﻿@import url("https://fonts.googleapis.com/css2?family=Allura&family=Cormorant+Garamond:ital,wght@0,400;0,500;0,600;1,400&family=Montserrat:wght@300;400;500;600;700&family=Pinyon+Script&family=Poppins:wght@300;400;500;600;700&family=Pompiere&family=Homemade+Apple&family=League+Script&family=Parisienne&family=Petit+Formal+Script&display=swap");

@font-face {
    font-family: "InvSloop";
    src: url("../fonts/invitations/Sloop-ScriptThree.woff2") format("woff2");
    font-display: swap;
}

@font-face {
    font-family: "InvAmelia";
    src: url("../fonts/invitations/amelia-giovani-webfont.woff2") format("woff2");
    font-display: swap;
}

@font-face {
    font-family: "InvBentham";
    src: url("../fonts/invitations/Bentham-Regular.ttf") format("truetype");
    font-display: swap;
}

@font-face {
    font-family: "InvCinzel";
    src: url("../fonts/invitations/CinzelFont.ttf") format("truetype");
    font-display: swap;
}

@font-face {
    font-family: "InvCrimson";
    src: url("../fonts/invitations/Crimson-Foam.woff2") format("woff2");
    font-display: swap;
}

@font-face {
    font-family: "InvEvolventa";
    src: url("../fonts/invitations/Evolventa-zLXL.ttf") format("truetype");
    font-display: swap;
}

/* RSVP_MOBILE_STABILITY_HOTFIX_20260922 */
/* RSVP_RUNTIME_HOTFIX_20261007_V6 */
/* Respect the HTML hidden attribute even when a component defines its own display mode (grid/flex/etc.). */
[hidden] {
    display: none !important;
}

:root {
    --inv-bg-light: #f1eee8;
    --inv-bg-dark: #465152;
    --inv-text: #191919;
    --inv-text-inverse: #f7f5ef;
    --inv-accent: #c7d3a9;
    --inv-button-bg: #3f4852;
    --inv-button-text: #ffffff;
    --inv-button-light-bg: #3f4852;
    --inv-button-light-text: #ffffff;
    --inv-button-light-border: #3f4852;
    --inv-button-light-border-width: 1px;
    --inv-button-light-hover-bg: #3f4852;
    --inv-button-light-hover-text: #ffffff;
    --inv-button-light-hover-border: #3f4852;
    --inv-button-light-secondary-hover-bg: transparent;
    --inv-button-light-secondary-hover-text: #3f4852;
    --inv-button-light-secondary-hover-border: #3f4852;
    --inv-button-light-hover-opacity: .88;
    --inv-button-dark-bg: #f7f5ef;
    --inv-button-dark-text: #465152;
    --inv-button-dark-border: #f7f5ef;
    --inv-button-dark-border-width: 1px;
    --inv-button-dark-hover-bg: #f7f5ef;
    --inv-button-dark-hover-text: #465152;
    --inv-button-dark-hover-border: #f7f5ef;
    --inv-button-dark-secondary-hover-bg: transparent;
    --inv-button-dark-secondary-hover-text: #f7f5ef;
    --inv-button-dark-secondary-hover-border: #f7f5ef;
    --inv-button-dark-hover-opacity: .88;
    --inv-content-max: 1180px;
    --inv-section-space: 96px;
    --inv-card-radius: 0px;
    --inv-button-radius: 28px;
    --inv-button-tracking: 3px;
    --inv-nav-offset: 88px;
    --inv-display-font: "InvSloop", cursive;
    --inv-heading-font: "InvBentham", Georgia, serif;
    --inv-body-font: "InvEvolventa", Arial, sans-serif;
    --inv-label-font: "InvEvolventa", Arial, sans-serif;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
    margin: 0;
    min-width: 320px;
    background: var(--inv-bg-light);
    color: var(--inv-text);
    font-family: var(--inv-body-font);
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
    /* A2.5H: floral ornaments may cross section boundaries vertically, but they
       must never widen the document or create a horizontal scrollbar. */
    overflow-x: hidden;
    overflow-x: clip;
}

/* INV_MOBILE_ORNAMENT_OVERFLOW_20261010: Mobile ornament overflow guard.
   A section may intentionally let decorative artwork extend past its own edges.
   Clip only the horizontal paint area at the document/root boundary so those
   ornaments cannot expand the mobile page. `clip` (unlike `hidden`) does not
   create an extra scrolling container or suppress vertical section overlaps. */
@media (max-width: 767.98px) {
    html {
        overflow-x: hidden; /* Fallback for browsers without `clip`. */
        overflow-x: clip;
    }

    #invitation-root {
        max-width: 100%;
        overflow-x: clip;
        overflow-y: visible;
    }
}

img, video { display: block; max-width: 100%; }
button, a { font: inherit; }

.inv-section {
    position: relative;
    overflow: hidden;
}

.inv-section__inner {
    width: min(calc(100% - 48px), var(--inv-content-max));
    margin: 0 auto;
}

/* Global title/button typography is opt-in. Missing values deliberately keep the
   historical CSS so existing invitations do not change when this feature ships. */
html.inv-title-size-global .inv-section:not(.inv-section--title-size-override) .inv-editorial-title,
html.inv-title-size-global .inv-section:not(.inv-section--title-size-override) .inv-participation__title,
html.inv-title-size-global .inv-section:not(.inv-section--title-size-override) .inv-countdown__title,
html.inv-title-size-global .inv-section:not(.inv-section--title-size-override) .inv-countdown__bottom-title,
html.inv-title-size-global .inv-section:not(.inv-section--title-size-override) .inv-rsvp__title,
html.inv-title-size-global .inv-section:not(.inv-section--title-size-override) .inv-gallery__title,
html.inv-title-size-global .inv-section:not(.inv-section--title-size-override) .inv-welcome__title {
    font-size: var(--inv-title-size);
}

html.inv-button-size-global .inv-section .inv-button {
    font-size: var(--inv-button-font-size);
}

/* A2.4P1: per-section typography and vertical spacing.
   Overrides are applied only when the corresponding value is explicitly configured.
   This preserves each layout's original responsive defaults when Studio is in Auto mode. */
.inv-section.inv-section--padding-top-override {
    padding-top: var(--inv-section-padding-top);
}

.inv-section.inv-section--padding-bottom-override {
    padding-bottom: var(--inv-section-padding-bottom);
}

/* Whole-section overlap control. A negative margin lets the current section
   slide underneath the previous one while preserving normal document flow for
   every section that follows. */
.inv-section.inv-section--offset-top-override {
    margin-top: var(--inv-section-offset-top, 0px);
}

/* Bottom overlap control. A positive Studio value pulls the following section
   upward while the current section remains the upper visual layer. This is the
   preferred control for torn-paper transitions that must sit on top of the next
   section rather than underneath the previous one. */
.inv-section.inv-section--overlap-bottom-override {
    margin-bottom: calc(-1 * var(--inv-section-overlap-bottom, 0px));
    z-index: 2;
}

/* Trap the immediately following section in a lower stacking context so its
   positioned children/decorations cannot paint over the torn edge above. */
.inv-section.inv-section--overlap-bottom-override + .inv-section {
    z-index: 1;
}

.inv-section.inv-section--title-size-override .inv-editorial-title,
.inv-section.inv-section--title-size-override .inv-participation__title,
.inv-section.inv-section--title-size-override .inv-countdown__title,
.inv-section.inv-section--title-size-override .inv-countdown__bottom-title,
.inv-section.inv-section--title-size-override .inv-rsvp__title,
.inv-section.inv-section--title-size-override .inv-gallery__title,
.inv-section.inv-section--title-size-override .inv-welcome__title {
    font-size: var(--inv-section-title-size);
}

/* Studio title casing/tracking. Global values affect primary section titles only;
   section Presentation overrides always win. Missing values preserve legacy CSS. */
html.inv-title-transform-global .inv-section .inv-editorial-title,
html.inv-title-transform-global .inv-section .inv-participation__title,
html.inv-title-transform-global .inv-section .inv-countdown__title,
html.inv-title-transform-global .inv-section .inv-countdown__bottom-title,
html.inv-title-transform-global .inv-section .inv-rsvp__title,
html.inv-title-transform-global .inv-section .inv-gallery__title,
html.inv-title-transform-global .inv-section .inv-welcome__title {
    text-transform: var(--inv-title-text-transform);
}

html .inv-section.inv-section--title-transform-override .inv-editorial-title,
html .inv-section.inv-section--title-transform-override .inv-participation__title,
html .inv-section.inv-section--title-transform-override .inv-countdown__title,
html .inv-section.inv-section--title-transform-override .inv-countdown__bottom-title,
html .inv-section.inv-section--title-transform-override .inv-rsvp__title,
html .inv-section.inv-section--title-transform-override .inv-gallery__title,
html .inv-section.inv-section--title-transform-override .inv-welcome__title {
    text-transform: var(--inv-section-title-text-transform);
}

html.inv-title-spacing-global .inv-section .inv-editorial-title,
html.inv-title-spacing-global .inv-section .inv-participation__title,
html.inv-title-spacing-global .inv-section .inv-countdown__title,
html.inv-title-spacing-global .inv-section .inv-countdown__bottom-title,
html.inv-title-spacing-global .inv-section .inv-rsvp__title,
html.inv-title-spacing-global .inv-section .inv-gallery__title,
html.inv-title-spacing-global .inv-section .inv-welcome__title {
    letter-spacing: var(--inv-title-letter-spacing);
}

html .inv-section.inv-section--title-spacing-override .inv-editorial-title,
html .inv-section.inv-section--title-spacing-override .inv-participation__title,
html .inv-section.inv-section--title-spacing-override .inv-countdown__title,
html .inv-section.inv-section--title-spacing-override .inv-countdown__bottom-title,
html .inv-section.inv-section--title-spacing-override .inv-rsvp__title,
html .inv-section.inv-section--title-spacing-override .inv-gallery__title,
html .inv-section.inv-section--title-spacing-override .inv-welcome__title {
    letter-spacing: var(--inv-section-title-letter-spacing);
}

.inv-section.inv-section--body-size-override p:not(.inv-guestbook__intro),
.inv-section.inv-section--body-size-override .inv-button,
.inv-section.inv-section--body-size-override label,
.inv-section.inv-section--body-size-override input,
.inv-section.inv-section--body-size-override select,
.inv-section.inv-section--body-size-override textarea {
    font-size: var(--inv-section-body-size);
}

/* A2.4P2: mobile typography can be overridden independently. When no explicit
   mobile value exists but desktop has an override, runtime supplies a conservative
   responsive mobile size derived from the desktop value. */
@media (max-width: 720px) {
    html.inv-title-mobile-size-global .inv-section:not(.inv-section--mobile-title-size-override):not(.inv-section--mobile-title-size-auto) .inv-editorial-title,
    html.inv-title-mobile-size-global .inv-section:not(.inv-section--mobile-title-size-override):not(.inv-section--mobile-title-size-auto) .inv-participation__title,
    html.inv-title-mobile-size-global .inv-section:not(.inv-section--mobile-title-size-override):not(.inv-section--mobile-title-size-auto) .inv-countdown__title,
    html.inv-title-mobile-size-global .inv-section:not(.inv-section--mobile-title-size-override):not(.inv-section--mobile-title-size-auto) .inv-countdown__bottom-title,
    html.inv-title-mobile-size-global .inv-section:not(.inv-section--mobile-title-size-override):not(.inv-section--mobile-title-size-auto) .inv-rsvp__title,
    html.inv-title-mobile-size-global .inv-section:not(.inv-section--mobile-title-size-override):not(.inv-section--mobile-title-size-auto) .inv-gallery__title,
    html.inv-title-mobile-size-global .inv-section:not(.inv-section--mobile-title-size-override):not(.inv-section--mobile-title-size-auto) .inv-welcome__title {
        font-size: var(--inv-title-mobile-size);
    }

    html.inv-button-mobile-size-global .inv-section .inv-button {
        font-size: var(--inv-button-mobile-font-size);
    }

    .inv-section.inv-section--mobile-title-size-override .inv-editorial-title,
    .inv-section.inv-section--mobile-title-size-override .inv-participation__title,
    .inv-section.inv-section--mobile-title-size-override .inv-countdown__title,
    .inv-section.inv-section--mobile-title-size-override .inv-countdown__bottom-title,
    .inv-section.inv-section--mobile-title-size-override .inv-rsvp__title,
    .inv-section.inv-section--mobile-title-size-override .inv-gallery__title,
    .inv-section.inv-section--mobile-title-size-override .inv-welcome__title {
        font-size: var(--inv-section-mobile-title-size);
    }

    .inv-section.inv-section--mobile-title-size-auto .inv-editorial-title,
    .inv-section.inv-section--mobile-title-size-auto .inv-participation__title,
    .inv-section.inv-section--mobile-title-size-auto .inv-countdown__title,
    .inv-section.inv-section--mobile-title-size-auto .inv-countdown__bottom-title,
    .inv-section.inv-section--mobile-title-size-auto .inv-rsvp__title,
    .inv-section.inv-section--mobile-title-size-auto .inv-gallery__title,
    .inv-section.inv-section--mobile-title-size-auto .inv-welcome__title {
        font-size: var(--inv-section-mobile-title-size);
    }

    html.inv-title-mobile-spacing-global .inv-section .inv-editorial-title,
    html.inv-title-mobile-spacing-global .inv-section .inv-participation__title,
    html.inv-title-mobile-spacing-global .inv-section .inv-countdown__title,
    html.inv-title-mobile-spacing-global .inv-section .inv-countdown__bottom-title,
    html.inv-title-mobile-spacing-global .inv-section .inv-rsvp__title,
    html.inv-title-mobile-spacing-global .inv-section .inv-gallery__title,
    html.inv-title-mobile-spacing-global .inv-section .inv-welcome__title {
        letter-spacing: var(--inv-title-mobile-letter-spacing);
    }

    html .inv-section.inv-section--mobile-title-spacing-override .inv-editorial-title,
    html .inv-section.inv-section--mobile-title-spacing-override .inv-participation__title,
    html .inv-section.inv-section--mobile-title-spacing-override .inv-countdown__title,
    html .inv-section.inv-section--mobile-title-spacing-override .inv-countdown__bottom-title,
    html .inv-section.inv-section--mobile-title-spacing-override .inv-rsvp__title,
    html .inv-section.inv-section--mobile-title-spacing-override .inv-gallery__title,
    html .inv-section.inv-section--mobile-title-spacing-override .inv-welcome__title,
    html .inv-section.inv-section--mobile-title-spacing-auto .inv-editorial-title,
    html .inv-section.inv-section--mobile-title-spacing-auto .inv-participation__title,
    html .inv-section.inv-section--mobile-title-spacing-auto .inv-countdown__title,
    html .inv-section.inv-section--mobile-title-spacing-auto .inv-countdown__bottom-title,
    html .inv-section.inv-section--mobile-title-spacing-auto .inv-rsvp__title,
    html .inv-section.inv-section--mobile-title-spacing-auto .inv-gallery__title,
    html .inv-section.inv-section--mobile-title-spacing-auto .inv-welcome__title {
        letter-spacing: var(--inv-section-mobile-title-letter-spacing);
    }

    .inv-section.inv-section--mobile-body-size-override p:not(.inv-guestbook__intro),
    .inv-section.inv-section--mobile-body-size-override .inv-button,
    .inv-section.inv-section--mobile-body-size-override label,
    .inv-section.inv-section--mobile-body-size-override input,
    .inv-section.inv-section--mobile-body-size-override select,
    .inv-section.inv-section--mobile-body-size-override textarea {
        font-size: var(--inv-section-mobile-body-size);
    }

    .inv-section.inv-section--mobile-body-size-auto p:not(.inv-guestbook__intro),
    .inv-section.inv-section--mobile-body-size-auto .inv-button,
    .inv-section.inv-section--mobile-body-size-auto label,
    .inv-section.inv-section--mobile-body-size-auto input,
    .inv-section.inv-section--mobile-body-size-auto select,
    .inv-section.inv-section--mobile-body-size-auto textarea {
        font-size: var(--inv-section-mobile-body-size);
    }

    .inv-section.inv-section--mobile-padding-top-override {
        padding-top: var(--inv-section-mobile-padding-top);
    }

    .inv-section.inv-section--mobile-padding-bottom-override {
        padding-bottom: var(--inv-section-mobile-padding-bottom);
    }

    .inv-section.inv-section--offset-top-override {
        margin-top: var(--inv-section-mobile-offset-top, var(--inv-section-offset-top, 0px));
    }

    .inv-section.inv-section--overlap-bottom-override {
        margin-bottom: calc(-1 * var(--inv-section-mobile-overlap-bottom, var(--inv-section-overlap-bottom, 0px)));
    }
}


.inv-treatment-light {
    background: var(--inv-bg-light);
    color: var(--inv-text);
}

.inv-treatment-dark {
    background: var(--inv-bg-dark);
    color: var(--inv-text-inverse);
}

/* When global button typography is customized, apply it to editorial action
   links too. They are visually buttons in the open-list variants, but do not
   use the shared .inv-button class. Older invitations remain unchanged. */
html.inv-button-typography-global .inv-section .inv-editorial-list__action {
    font-weight: var(--inv-button-font-weight, inherit);
    font-style: var(--inv-button-font-style, inherit);
    text-transform: var(--inv-button-text-transform, inherit);
    text-decoration: var(--inv-button-text-decoration, inherit);
}

/* Surface-local button palette utilities.
   A component can live on a different immediate surface than its section.
   For example, RSVP may be a light stationery card inside a dark section.
   These utilities make buttons follow the surface they are actually drawn on. */
.inv-button-surface-light {
    --section-btn-primary-bg: var(--inv-button-light-bg);
    --section-btn-primary-text: var(--inv-button-light-text);
    --section-btn-primary-border: var(--inv-button-light-border);
    --section-btn-primary-hover-bg: var(--inv-button-light-hover-bg);
    --section-btn-primary-hover-text: var(--inv-button-light-hover-text);
    --section-btn-primary-hover-border: var(--inv-button-light-hover-border);
    --section-btn-secondary-bg: transparent;
    --section-btn-secondary-text: var(--inv-button-light-border);
    --section-btn-secondary-border: var(--inv-button-light-border);
    --section-btn-secondary-hover-bg: var(--inv-button-light-secondary-hover-bg);
    --section-btn-secondary-hover-text: var(--inv-button-light-secondary-hover-text);
    --section-btn-secondary-hover-border: var(--inv-button-light-secondary-hover-border);
    --section-btn-border-width: var(--inv-button-light-border-width);
    --section-btn-hover-opacity: var(--inv-button-light-hover-opacity);
}

.inv-button-surface-dark {
    --section-btn-primary-bg: var(--inv-button-dark-bg);
    --section-btn-primary-text: var(--inv-button-dark-text);
    --section-btn-primary-border: var(--inv-button-dark-border);
    --section-btn-primary-hover-bg: var(--inv-button-dark-hover-bg);
    --section-btn-primary-hover-text: var(--inv-button-dark-hover-text);
    --section-btn-primary-hover-border: var(--inv-button-dark-hover-border);
    --section-btn-secondary-bg: transparent;
    --section-btn-secondary-text: var(--inv-button-dark-border);
    --section-btn-secondary-border: var(--inv-button-dark-border);
    --section-btn-secondary-hover-bg: var(--inv-button-dark-secondary-hover-bg);
    --section-btn-secondary-hover-text: var(--inv-button-dark-secondary-hover-text);
    --section-btn-secondary-hover-border: var(--inv-button-dark-secondary-hover-border);
    --section-btn-border-width: var(--inv-button-dark-border-width);
    --section-btn-hover-opacity: var(--inv-button-dark-hover-opacity);
}

/* A2.6P: button palettes follow the surface automatically.
   Secondary buttons remain an outline derivative of the same surface palette. */
.inv-treatment-light {
    --section-btn-primary-bg: var(--inv-button-light-bg);
    --section-btn-primary-text: var(--inv-button-light-text);
    --section-btn-primary-border: var(--inv-button-light-border);
    --section-btn-primary-hover-bg: var(--inv-button-light-hover-bg);
    --section-btn-primary-hover-text: var(--inv-button-light-hover-text);
    --section-btn-primary-hover-border: var(--inv-button-light-hover-border);
    --section-btn-secondary-bg: transparent;
    --section-btn-secondary-text: var(--inv-button-light-border);
    --section-btn-secondary-border: var(--inv-button-light-border);
    --section-btn-secondary-hover-bg: var(--inv-button-light-secondary-hover-bg);
    --section-btn-secondary-hover-text: var(--inv-button-light-secondary-hover-text);
    --section-btn-secondary-hover-border: var(--inv-button-light-secondary-hover-border);
    --section-btn-border-width: var(--inv-button-light-border-width);
    --section-btn-hover-opacity: var(--inv-button-light-hover-opacity);
}

.inv-treatment-dark,
.inv-treatment-ocean {
    --section-btn-primary-bg: var(--inv-button-dark-bg);
    --section-btn-primary-text: var(--inv-button-dark-text);
    --section-btn-primary-border: var(--inv-button-dark-border);
    --section-btn-primary-hover-bg: var(--inv-button-dark-hover-bg);
    --section-btn-primary-hover-text: var(--inv-button-dark-hover-text);
    --section-btn-primary-hover-border: var(--inv-button-dark-hover-border);
    --section-btn-secondary-bg: transparent;
    --section-btn-secondary-text: var(--inv-button-dark-border);
    --section-btn-secondary-border: var(--inv-button-dark-border);
    --section-btn-secondary-hover-bg: var(--inv-button-dark-secondary-hover-bg);
    --section-btn-secondary-hover-text: var(--inv-button-dark-secondary-hover-text);
    --section-btn-secondary-hover-border: var(--inv-button-dark-secondary-hover-border);
    --section-btn-border-width: var(--inv-button-dark-border-width);
    --section-btn-hover-opacity: var(--inv-button-dark-hover-opacity);
}

/* Hero.VideoEditorial */
.inv-hero {
    min-height: 100svh;
    height: max(680px, 100svh);
    background: var(--inv-bg-dark);
    color: var(--inv-text-inverse);
}

.inv-hero__media,
.inv-hero__fallback,
.inv-hero__overlay {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
}

.inv-hero__media {
    object-fit: cover;
    object-position: var(--inv-hero-media-position-desktop, 50% 50%);
    opacity: 0;
    transition: opacity .45s ease;
}

.inv-hero__media--ready {
    opacity: 1;
}

.inv-hero__fallback {
    background-position: var(--inv-hero-media-position-desktop, 50% 50%);
    background-size: cover;
    background-repeat: no-repeat;
}

.inv-hero__fallback--mobile {
    display: none;
}

/* PhotoEditorial: independent photo scale per device.
   100% is the legacy full-bleed cover behavior. */
.inv-hero--photo .inv-hero__fallback--desktop {
    transform: scale(var(--inv-hero-photo-scale-desktop, 1));
    transform-origin: var(--inv-hero-media-position-desktop, 50% 50%);
}

.inv-hero--photo .inv-hero__fallback--mobile {
    transform: scale(var(--inv-hero-photo-scale-mobile, 1));
    transform-origin: var(--inv-hero-media-position-mobile, 50% 50%);
}

.inv-hero__overlay {
    pointer-events: none;
    background: #000;
}

.inv-hero__content {
    position: relative;
    z-index: 2;
    min-height: inherit;
    height: 100%;
    width: min(calc(100% - 48px), 1260px);
    margin: 0 auto;
    padding: clamp(72px, 9vh, 118px) 0 clamp(48px, 7vh, 84px);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-between;
    text-align: center;
}

.inv-hero__top {
    min-height: 1px;
}

.inv-hero__center {
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: var(--inv-monogram-align-desktop, center);
    gap: 18px;
    transform: translateY(var(--inv-monogram-offset-desktop, 0));
    transition: transform .2s ease;
}

.inv-hero__monogram {
    width: var(--inv-monogram-width-desktop, 30%);
    max-width: none;
    min-width: 0;
    height: auto;
    filter: drop-shadow(0 3px 18px rgba(0,0,0,.08));
}

.inv-hero__names {
    margin: 0;
    font-family: var(--inv-label-font);
    font-size: clamp(14px, 1.4vw, 24px);
    font-weight: 400;
    letter-spacing: .34em;
    text-transform: uppercase;
}

.inv-hero__bottom {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 14px;
}

.inv-hero__date {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: clamp(12px, 1.6vw, 28px);
    font-family: var(--inv-heading-font);
    font-size: clamp(22px, 2.4vw, 38px);
    letter-spacing: .02em;
    text-transform: uppercase;
}

.inv-hero__date-separator {
    width: 1px;
    height: 1.15em;
    background: currentColor;
    opacity: .9;
}

.inv-hero__location {
    margin: 0;
    font-family: var(--inv-label-font);
    font-size: clamp(12px, 1.15vw, 18px);
    letter-spacing: .22em;
    text-transform: uppercase;
}

.inv-hero--photo {
    background: var(--inv-bg-light);
    color: var(--inv-text);
}

.inv-hero--photo .inv-hero__overlay {
    background: linear-gradient(180deg, rgba(22, 22, 22, .08) 0%, rgba(22, 22, 22, .22) 56%, rgba(22, 22, 22, .38) 100%);
}

.inv-hero__content--photo {
    position: relative;
    width: 100%;
    max-width: none;
    padding: 0;
}

.inv-hero__photo-brand {
    position: absolute;
    z-index: 3;
    left: var(--inv-photo-monogram-x-desktop, 50%);
    top: var(--inv-photo-monogram-y-desktop, 50%);
    width: var(--inv-monogram-width-desktop, 30%);
    max-width: none;
    transform: translate(-50%, -50%);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: clamp(8px, 1.2vw, 14px);
    text-align: center;
}

.inv-hero__photo-monogram-picture {
    display: block;
    width: 100%;
}

.inv-hero__photo-monogram {
    width: 100%;
    max-height: none;
    object-fit: contain;
    filter: drop-shadow(0 4px 16px rgba(255,255,255,.28));
}

.inv-hero__photo-brand-date {
    justify-content: center !important;
    gap: clamp(8px, 1vw, 14px) !important;
    margin: 0;
    padding: 7px 12px;
    width: max-content;
    max-width: min(90vw, 100%);
    border-radius: 999px;
    background: rgba(247,240,232,.72);
    color: var(--inv-text);
    box-shadow: 0 6px 18px rgba(21,21,21,.08);
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
    font-size: clamp(12px, 1.25vw, 17px) !important;
    letter-spacing: .08em;
}

.inv-hero__photo-info {
    position: absolute;
    z-index: 3;
    left: 50%;
    bottom: clamp(34px, 5vh, 64px);
    width: min(calc(100% - 48px), 620px);
    padding: clamp(18px, 2.5vw, 30px);
    transform: translateX(-50%);
    background: rgba(247,240,232,.82);
    border: 1px solid rgba(36,29,26,.08);
    border-radius: 24px;
    box-shadow: 0 18px 40px rgba(21,21,21,.12);
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    text-align: center;
}

.inv-hero__photo-names {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.inv-hero__name-line {
    font-family: var(--inv-heading-font);
    font-size: clamp(44px, 6.2vw, 82px);
    line-height: .92;
    letter-spacing: .04em;
    text-transform: uppercase;
}

.inv-hero__ampersand {
    margin: 4px 0 2px;
    color: var(--inv-accent);
    font-family: var(--inv-display-font);
    font-size: clamp(44px, 5vw, 68px);
    line-height: .7;
}

.inv-hero__photo-meta {
    margin-top: 22px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.inv-hero--photo .inv-hero__date {
    justify-content: flex-start;
    gap: clamp(10px, 1.2vw, 18px);
    font-size: clamp(19px, 2vw, 30px);
}

.inv-hero--photo .inv-hero__date-separator {
    opacity: .38;
}

.inv-hero__location--photo {
    font-size: clamp(11px, 1vw, 15px);
    letter-spacing: .18em;
    opacity: .84;
}

/* Editorial welcome */
.inv-welcome {
    padding: clamp(86px, 10vw, 150px) 0;
}

.inv-welcome__inner {
    max-width: 830px;
    margin: 0 auto;
    padding: 0 28px;
    text-align: center;
}

.inv-welcome__title {
    margin: 0 0 32px;
    font-family: var(--inv-display-font);
    font-size: clamp(72px, 9vw, 142px);
    font-weight: 400;
    line-height: .85;
}

.inv-welcome__text {
    margin: 0 auto;
    max-width: 760px;
    white-space: pre-line;
    font-size: clamp(17px, 1.55vw, 24px);
    line-height: 1.55;
}

/* Countdown.Editorial */
.inv-countdown {
    padding: clamp(78px, 9vw, 132px) 0 clamp(82px, 10vw, 140px);
}

.inv-countdown__inner {
    width: min(calc(100% - 44px), 1240px);
    margin: 0 auto;
    text-align: center;
}

.inv-countdown__title {
    margin: 0 0 46px;
    font-family: var(--inv-display-font);
    font-size: clamp(60px, 8vw, 122px);
    font-weight: 400;
    line-height: .9;
}

.inv-countdown__grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: clamp(12px, 3vw, 44px);
    align-items: end;
}

.inv-countdown__value {
    display: block;
    font-family: var(--inv-heading-font);
    font-size: clamp(54px, 7vw, 110px);
    line-height: .95;
    font-variant-numeric: tabular-nums;
}

.inv-countdown__item:last-child .inv-countdown__value {
    color: var(--inv-accent);
}

.inv-countdown__label {
    display: block;
    margin-top: 24px;
    font-family: var(--inv-heading-font);
    font-size: clamp(12px, 1.35vw, 22px);
    letter-spacing: .03em;
    text-transform: uppercase;
}

.inv-countdown__bottom-title {
    /* BottomText is a second countdown title, not body/subtitle text. */
    margin: clamp(38px, 5vw, 68px) 0 0;
}

.inv-countdown.inv-countdown--number-size-override .inv-countdown__value {
    font-size: var(--inv-countdown-number-size);
}

.inv-countdown.inv-countdown--label-size-override .inv-countdown__label {
    font-size: var(--inv-countdown-label-size);
}

/* Countdown compact layout: two editorial titles around a tighter counter,
   plus subtle vertical dividers. This is opt-in so existing invitations keep
   the original countdown composition. */
.inv-countdown--compact-dividers .inv-countdown__inner {
    width: min(calc(100% - 44px), 980px);
}

.inv-countdown--compact-dividers .inv-countdown__title {
    margin-bottom: 8px;
    line-height: 1.05;
}

.inv-countdown--compact-dividers .inv-countdown__bottom-title {
    margin: 22px 0 0;
    line-height: 1.05;
}

.inv-countdown--compact-dividers .inv-countdown__grid {
    width: min(100%, 700px);
    margin: 0 auto;
    gap: 0;
    align-items: stretch;
}

.inv-countdown--compact-dividers .inv-countdown__item {
    position: relative;
    min-width: 0;
    padding: 0 clamp(16px, 2.2vw, 30px);
}

.inv-countdown--compact-dividers .inv-countdown__item + .inv-countdown__item::before {
    content: "";
    position: absolute;
    top: 8%;
    bottom: 8%;
    left: 0;
    width: 1px;
    background: currentColor;
    opacity: .48;
}

.inv-countdown--compact-dividers .inv-countdown__value {
    line-height: .92;
}

.inv-countdown--compact-dividers .inv-countdown__item:last-child .inv-countdown__value {
    color: inherit;
}

.inv-countdown--compact-dividers .inv-countdown__label {
    margin-top: 6px;
    line-height: 1.15;
}

.inv-runtime-message {
    padding: 48px 24px;
    text-align: center;
    font-family: var(--inv-body-font);
}


.inv-hero__countdown {
    position: absolute;
    z-index: 4;
    left: var(--inv-hero-countdown-x-desktop, 78%);
    top: var(--inv-hero-countdown-y-desktop, 78%);
    width: var(--inv-hero-countdown-width-desktop, 42%);
    transform: translate(-50%, -50%);
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    align-items: stretch;
    color: var(--inv-text);
    text-align: center;
}
.inv-hero__countdown-item { padding: 0 clamp(8px, 1.2vw, 18px); border-left: 1px solid currentColor; }
.inv-hero__countdown-item:first-child { border-left: 0; }
.inv-hero__countdown-value { display:block; font-family: var(--inv-font-heading); font-size: clamp(24px, 2.5vw, 42px); line-height: 1; }
.inv-hero__countdown-label { display:block; margin-top: 6px; font-size: clamp(8px, .72vw, 11px); letter-spacing: .12em; text-transform: uppercase; }

@media (max-width: 720px) {
    .inv-section__inner { width: min(calc(100% - 32px), var(--inv-content-max)); }

    .inv-hero {
        min-height: 100svh;
        height: max(640px, 100svh);
    }

    .inv-hero__media {
        object-position: var(--inv-hero-media-position-mobile, 50% 50%);
    }

    .inv-hero__fallback {
        background-position: var(--inv-hero-media-position-mobile, 50% 50%);
    }

    .inv-hero__fallback--desktop {
        display: none;
    }

    .inv-hero__fallback--mobile {
        display: block;
    }

    .inv-hero__center {
        align-items: var(--inv-monogram-align-mobile, center);
        transform: translateY(var(--inv-monogram-offset-mobile, 0));
    }

    .inv-hero__content {
        width: calc(100% - 32px);
        padding-top: 64px;
        padding-bottom: 36px;
    }

    .inv-hero__monogram {
        width: var(--inv-monogram-width-mobile, 62%);
        min-width: 0;
    }

    .inv-hero__names {
        font-size: 12px;
        letter-spacing: .25em;
    }

    .inv-hero__date {
        gap: 10px;
        font-size: 22px;
    }

    .inv-hero__location {
        font-size: 11px;
        letter-spacing: .16em;
    }

    .inv-hero__content--photo {
        width: 100%;
        padding: 0;
    }

    .inv-hero__countdown {
        left: var(--inv-hero-countdown-x-mobile, 50%);
        top: var(--inv-hero-countdown-y-mobile, 82%);
        width: var(--inv-hero-countdown-width-mobile, 88%);
    }
    .inv-hero__countdown-item { padding: 0 6px; }
    .inv-hero__countdown-value { font-size: clamp(22px, 7vw, 32px); }
    .inv-hero__countdown-label { margin-top: 4px; font-size: 8px; letter-spacing: .08em; }

    .inv-hero__photo-brand {
        left: var(--inv-photo-monogram-x-mobile, 50%);
        top: var(--inv-photo-monogram-y-mobile, 20%);
        width: var(--inv-monogram-width-mobile, 44%);
        max-width: none;
        gap: 8px;
    }

    .inv-hero__photo-monogram {
        max-height: none;
    }

    .inv-hero__photo-brand-date {
        padding: 6px 10px;
        font-size: 10px !important;
        letter-spacing: .06em;
    }

    .inv-hero__photo-info {
        bottom: 24px;
        width: calc(100% - 32px);
        padding: 16px 18px;
        border-radius: 20px;
    }

    .inv-hero__name-line {
        font-size: clamp(34px, 12vw, 54px);
        letter-spacing: .03em;
    }

    .inv-hero__ampersand {
        font-size: clamp(36px, 11vw, 52px);
    }

    .inv-hero--photo .inv-hero__date {
        font-size: 18px;
    }

    .inv-hero__location--photo {
        font-size: 10px;
        letter-spacing: .14em;
    }

    .inv-welcome { padding: 82px 0 94px; }
    .inv-welcome__title { margin-bottom: 28px; }
    .inv-welcome__text { font-size: 17px; line-height: 1.6; }

    .inv-countdown { padding: 78px 0 88px; }
    .inv-countdown__title { margin-bottom: 42px; }
    .inv-countdown__grid { gap: 8px; }
    .inv-countdown__value { font-size: clamp(40px, 13vw, 58px); }
    .inv-countdown__label { margin-top: 14px; font-size: 10px; letter-spacing: 0; }
    .inv-countdown__bottom-title { margin-top: 38px; }
    .inv-countdown.inv-countdown--mobile-number-size-override .inv-countdown__value,
    .inv-countdown.inv-countdown--mobile-number-size-auto .inv-countdown__value { font-size: var(--inv-countdown-mobile-number-size); }
    .inv-countdown.inv-countdown--mobile-label-size-override .inv-countdown__label,
    .inv-countdown.inv-countdown--mobile-label-size-auto .inv-countdown__label { font-size: var(--inv-countdown-mobile-label-size); }

    .inv-countdown--compact-dividers .inv-countdown__inner {
        width: min(calc(100% - 24px), 620px);
    }
    .inv-countdown--compact-dividers .inv-countdown__title { margin-bottom: 6px; }
    .inv-countdown--compact-dividers .inv-countdown__bottom-title {
        margin: 18px 0 0;
    }
    .inv-countdown--compact-dividers .inv-countdown__grid { width: 100%; }
    .inv-countdown--compact-dividers .inv-countdown__item { padding: 0 9px; }
    .inv-countdown--compact-dividers .inv-countdown__label { margin-top: 5px; }
}

@media (max-width: 430px) {
    .inv-countdown__inner { width: min(calc(100% - 20px), 1240px); }
    .inv-countdown__grid {
        grid-template-columns: repeat(4, minmax(0, 1fr));
        gap: 2px;
        align-items: end;
    }
    .inv-countdown__item { min-width: 0; }
    .inv-countdown__value {
        font-size: clamp(24px, 8.5vw, 36px);
        line-height: .92;
    }
    .inv-countdown__label {
        margin-top: 8px;
        font-size: clamp(6px, 1.9vw, 8px);
        line-height: 1.1;
        letter-spacing: 0;
        white-space: nowrap;
    }
    .inv-countdown--compact-dividers .inv-countdown__grid { gap: 0; }
    .inv-countdown--compact-dividers .inv-countdown__item { padding: 0 6px; }
    .inv-countdown--compact-dividers .inv-countdown__label { margin-top: 4px; }
}

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    .inv-hero__media { display: none; }
}

/* Shared Invitation Studio section language */
.inv-treatment-ocean {
    background: var(--inv-bg-dark);
    color: var(--inv-text-inverse);
}

.inv-has-backdrop {
    background-image: linear-gradient(rgba(17, 28, 29, .20), rgba(17, 28, 29, .20)), var(--inv-section-backdrop);
    background-size: cover;
    background-position: center calc(var(--inv-section-backdrop-anchor-y, 50%) + var(--inv-section-backdrop-offset-y, 0px));
    background-repeat: no-repeat;
}

/* Section-owned backgrounds keep Desktop and Mobile assets simultaneously.
   This is intentionally CSS-responsive so the Studio preview can resize its iframe
   between devices without carrying the previously selected background across. */
.inv-has-responsive-backdrop {
    --inv-section-backdrop: var(--inv-section-backdrop-desktop);
    --inv-section-backdrop-anchor-y: var(--inv-section-backdrop-anchor-y-desktop, 50%);
    --inv-section-backdrop-offset-y: var(--inv-section-backdrop-offset-y-desktop, 0px);
}

@media (max-width: 767px) {
    .inv-has-responsive-backdrop {
        --inv-section-backdrop: var(--inv-section-backdrop-mobile, var(--inv-section-backdrop-desktop));
        --inv-section-backdrop-anchor-y: var(--inv-section-backdrop-anchor-y-mobile, var(--inv-section-backdrop-anchor-y-desktop, 50%));
        --inv-section-backdrop-offset-y: var(--inv-section-backdrop-offset-y-mobile, var(--inv-section-backdrop-offset-y-desktop, 0px));
    }
}

/* A2.7G: the image choice no longer determines contrast. A light theme can
   sit on a light image, while a dark theme keeps the protective dark wash. */
.inv-treatment-light.inv-has-backdrop {
    background-image: linear-gradient(rgba(247, 245, 239, .10), rgba(247, 245, 239, .10)), var(--inv-section-backdrop);
}

.inv-treatment-dark.inv-has-backdrop {
    background-image: linear-gradient(rgba(17, 28, 29, .20), rgba(17, 28, 29, .20)), var(--inv-section-backdrop);
}

.inv-editorial-title {
    margin: 0;
    text-align: center;
    font-family: var(--inv-display-font);
    font-weight: 400;
    font-size: clamp(64px, 8vw, 118px);
    line-height: .9;
}

.inv-section-intro {
    margin: clamp(18px, 2.4vw, 28px) auto 0;
    max-width: 840px;
    text-align: center;
    line-height: 1.65;
    white-space: pre-line;
}

.inv-section-kicker {
    margin: 22px 0 0;
    text-align: center;
    font-family: var(--inv-label-font);
    font-size: clamp(11px, 1vw, 15px);
    letter-spacing: .28em;
}

.inv-section-title-icon-wrap {
    display: flex;
    justify-content: center;
    align-items: center;
    margin: var(--inv-section-title-icon-spacing-top, 18px) 0 0;
}

.inv-section-title-icon {
    display: block;
    max-width: 100%;
    max-height: none;
    width: var(--inv-section-title-icon-width, auto);
    height: auto;
}

@media (max-width: 767.98px) {
    .inv-section-title-icon-wrap {
        margin-top: var(--inv-section-title-icon-mobile-spacing-top, 14px);
    }

    .inv-section-title-icon {
        max-width: 100%;
        max-height: none;
        width: var(--inv-section-title-icon-mobile-width, var(--inv-section-title-icon-width, auto));
    }
}

.inv-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 46px;
    padding: 13px 26px 12px;
    border-width: var(--section-btn-border-width, 1px);
    border-style: solid;
    border-color: var(--section-btn-primary-border, var(--inv-button-bg));
    border-radius: var(--inv-button-radius);
    background: var(--section-btn-primary-bg, var(--inv-button-bg));
    color: var(--section-btn-primary-text, var(--inv-button-text));
    font-family: var(--inv-label-font);
    font-size: 11px;
    font-weight: var(--inv-button-font-weight, 600);
    font-style: var(--inv-button-font-style, normal);
    letter-spacing: var(--inv-button-tracking);
    line-height: 1.2;
    text-align: center;
    text-decoration: var(--inv-button-text-decoration, none);
    text-transform: var(--inv-button-text-transform, uppercase);
    cursor: pointer;
    transition: background-color .18s ease, border-color .18s ease, color .18s ease, opacity .18s ease, transform .18s ease;
}

.inv-button:hover,
.inv-button:focus-visible {
    background: var(--section-btn-primary-hover-bg, var(--section-btn-primary-bg, var(--inv-button-bg)));
    border-color: var(--section-btn-primary-hover-border, var(--section-btn-primary-border, var(--inv-button-bg)));
    color: var(--section-btn-primary-hover-text, var(--section-btn-primary-text, var(--inv-button-text)));
    opacity: var(--section-btn-hover-opacity, .88);
    transform: translateY(-1px);
}

.inv-button--secondary {
    background: var(--section-btn-secondary-bg, transparent);
    border-color: var(--section-btn-secondary-border, var(--section-btn-primary-border, var(--inv-button-bg)));
    color: var(--section-btn-secondary-text, var(--section-btn-primary-border, var(--inv-button-bg)));
}

.inv-button--secondary:hover,
.inv-button--secondary:focus-visible {
    background: var(--section-btn-secondary-hover-bg, var(--section-btn-primary-hover-bg, var(--inv-button-bg)));
    border-color: var(--section-btn-secondary-hover-border, var(--section-btn-primary-hover-border, var(--inv-button-bg)));
    color: var(--section-btn-secondary-hover-text, var(--section-btn-primary-hover-text, var(--inv-button-text)));
}

.inv-has-paper-surface {
    position: relative;
    isolation: isolate;
    overflow: hidden;
}

.inv-has-paper-surface::before {
    content: "";
    position: absolute;
    inset: -1px;
    z-index: -1;
    background-image: var(--inv-paper-surface);
    background-size: cover;
    background-position: center;
    background-repeat: no-repeat;
    opacity: .96;
}

/* Itinerary paper cards deliberately bleed the artwork beyond the card edge.
   This removes any residual edge from uploaded paper artwork while allowing the
   card height to continue being driven entirely by its content. */
.inv-events__card.inv-has-paper-surface {
    background: transparent;
}

.inv-events__card.inv-has-paper-surface::before {
    /* Crop the uploaded paper artwork inside the card instead of displaying
       its full canvas. The extra vertical bleed removes residual top/bottom
       bands without tying the card height to the source image. */
    inset: -8% -2%;
    z-index: 0;
    transform: none;
    opacity: 1;
}

.inv-events__card.inv-has-paper-surface > * {
    position: relative;
    z-index: 1;
}

/* A2.4P5: itinerary/additional-events typography follows the global semantic font roles. */
/* Events.EditorialSchedule */
.inv-events {
    padding: clamp(84px, 9vw, 138px) 0;
}

.inv-events__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-events__card {
    width: min(100%, 900px);
    margin-top: clamp(46px, 6vw, 72px);
    padding: clamp(36px, 5vw, 68px) clamp(28px, 6vw, 76px);
    background: rgba(248, 245, 238, .98);
    color: var(--inv-text);
    box-shadow: 0 16px 44px rgba(13, 25, 27, .08);
    border-radius: var(--inv-card-radius);
}

.inv-treatment-light .inv-events__card {
    box-shadow: none;
    border-top: 1px solid rgba(25, 25, 25, .12);
    border-bottom: 1px solid rgba(25, 25, 25, .12);
    background: transparent;
}

.inv-event-row {
    display: grid;
    grid-template-columns: minmax(150px, .42fr) minmax(0, 1fr);
    gap: clamp(22px, 4vw, 54px);
    padding: 28px 0;
    align-items: start;
}

.inv-event-row--border {
    border-top: 1px solid rgba(25, 25, 25, .16);
}

.inv-event-location-group--border {
    margin-top: clamp(38px, 5vw, 58px);
    padding-top: clamp(38px, 5vw, 58px);
    border-top: 1px solid rgba(25, 25, 25, .20);
}

/* A location is the visual parent of its itinerary events. It intentionally
   spans the full card width so the address/map reads once before the rows. */
.inv-event-location--header {
    display: grid;
    grid-template-columns: minmax(150px, .42fr) minmax(0, 1fr);
    gap: clamp(22px, 4vw, 54px);
    padding: 0 0 clamp(24px, 3vw, 34px);
    text-align: left;
    border-bottom: 1px solid rgba(25, 25, 25, .16);
}

.inv-event-location__spacer {
    display: none;
}

.inv-event-location__details {
    grid-column: 2;
    width: 100%;
    margin: 0;
}

.inv-event-location__venue,
.inv-event-location__address {
    margin: 0;
    line-height: 1.5;
}

.inv-event-location__venue {
    font-family: var(--inv-body-font);
    font-size: clamp(20px, 2vw, 28px);
    font-weight: 500;
    letter-spacing: .035em;
}

/* Invitation Studio: in Itinerario the shared venue name follows the same
   "Títulos de eventos / venue" control as the event titles. Additional
   events keep their existing venue hierarchy. */
[data-section="events"] .inv-event-location__venue {
    font-size: var(--inv-event-title-size, clamp(20px, 2vw, 28px));
}

.inv-event-location__address {
    margin-top: 8px;
    font-size: clamp(14px, 1.15vw, 17px);
    opacity: .72;
}

.inv-event-location__details .inv-button {
    margin-top: 16px;
}

.inv-event-location-group__events .inv-event-row:first-child {
    padding-top: clamp(28px, 3vw, 38px);
}

.inv-event-row__time {
    padding-top: 5px;
    font-family: var(--inv-body-font);
    font-size: clamp(20px, 2.1vw, 30px);
    letter-spacing: .08em;
    text-align: right;
}

.inv-event-row__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: var(--inv-event-title-size, clamp(16px, 1.45vw, 21px));
    font-weight: 600;
    letter-spacing: .20em;
    text-transform: uppercase;
}

.inv-event-row__venue,
.inv-event-row__address,
.inv-event-row__description {
    margin: 10px 0 0;
    font-size: clamp(15px, 1.25vw, 18px);
    line-height: 1.55;
}

.inv-event-row__address { opacity: .74; }

.inv-event-row__location {
    margin-top: 10px;
}

.inv-event-row__location-venue {
    margin: 0;
    font-size: clamp(15px, 1.25vw, 18px);
    line-height: 1.55;
}

.inv-event-row__location .inv-event-row__address {
    margin-top: 6px;
}

.inv-event-row__location .inv-button {
    margin-top: 18px;
}

.inv-event-row__details .inv-button { margin-top: 18px; }

/* Additional events reuse the itinerary layouts, but each event keeps its own date. */
.inv-additional-event-row .inv-event-row__time {
    display: flex;
    flex-direction: column;
    gap: 7px;
}

.inv-event-row__date {
    margin: 0;
    font-size: clamp(13px, 1.05vw, 16px);
    line-height: 1.4;
    letter-spacing: .03em;
    text-transform: capitalize;
    opacity: .72;
}

.inv-additional-events-classic__date {
    margin-bottom: clamp(24px, 3vw, 34px);
}

/* Events.ClassicColumns
   Reference layout: one shared venue uses date/location + ornament + schedule;
   separate venues use two editorial location columns with the ornament between. */
.inv-events--classic-columns {
    padding: clamp(82px, 8.5vw, 132px) 0 clamp(92px, 9vw, 144px);
}

.inv-events-classic__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-events-classic__title {
    font-size: clamp(54px, 6.8vw, 94px);
}

.inv-events-classic__title-rule,
.inv-events-classic__short-rule,
.inv-events-classic__event-rule {
    display: block;
    width: 56px;
    height: 1px;
    background: currentColor;
    opacity: .72;
}

.inv-events-classic__title-rule {
    margin: 30px auto 0;
}

.inv-events-classic__surface {
    width: min(100%, 1120px);
    margin: clamp(38px, 5vw, 66px) auto 0;
}

.inv-events-classic__surface.inv-layout-surface-card {
    padding: clamp(34px, 5vw, 68px) clamp(24px, 5vw, 64px);
}

.inv-events-classic__same-grid,
.inv-events-classic__location-grid--split {
    display: grid;
    grid-template-columns: minmax(250px, 1fr) minmax(90px, .34fr) minmax(250px, 1fr);
    align-items: center;
    gap: clamp(20px, 3.6vw, 58px);
}

.inv-events-classic__meta-column,
.inv-events-classic__event-stack,
.inv-events-classic__location-group {
    min-width: 0;
    text-align: center;
}

.inv-events-classic__date-block,
.inv-events-classic__location-block,
.inv-events-classic__group-location {
    text-align: center;
}

.inv-events-classic__label,
.inv-events-classic__event-title {
    font-family: var(--inv-heading-font);
    text-transform: uppercase;
}

.inv-events-classic__label {
    margin: 0 0 10px;
    font-size: clamp(12px, 1vw, 15px);
    letter-spacing: .12em;
}

.inv-events-classic__weekday,
.inv-events-classic__date-text,
.inv-events-classic__event-time,
.inv-events-classic__event-place,
.inv-events-classic__event-description,
.inv-events-classic__address {
    margin: 0;
    font-family: var(--inv-body-font);
}

.inv-events-classic__weekday {
    font-size: clamp(17px, 1.45vw, 21px);
    line-height: 1.35;
    text-transform: capitalize;
}

.inv-events-classic__date-text {
    margin-top: 4px;
    font-size: clamp(17px, 1.45vw, 21px);
    line-height: 1.45;
}

.inv-events-classic__short-rule {
    width: 28px;
    margin: clamp(26px, 3vw, 38px) auto;
}

.inv-events-classic__venue {
    margin: 0;
    font-family: var(--inv-body-font);
    font-size: clamp(19px, 1.65vw, 24px);
    font-weight: 600;
    line-height: 1.35;
}

[data-section="events"] .inv-events-classic__venue {
    font-size: var(--inv-event-title-size, clamp(19px, 1.65vw, 24px));
}

.inv-events-classic__address {
    margin-top: 10px;
    white-space: pre-line;
    font-size: clamp(16px, 1.35vw, 20px);
    line-height: 1.6;
}

.inv-events-classic__action {
    margin-top: 28px;
}

.inv-events--classic-columns .inv-events-classic__action .inv-button {
    min-height: 46px;
    padding: 12px 24px 11px;
    border-radius: var(--inv-button-radius);
    border-color: currentColor;
    background: transparent;
    color: inherit;
    font-size: 10px;
    letter-spacing: .28em;
}

.inv-events-classic__center-decor {
    position: relative;
    display: flex;
    width: 100%;
    min-height: 190px;
    align-items: center;
    justify-content: center;
    align-self: stretch;
}

.inv-events-classic__center-decor:not(.has-desktop-decoration)::before {
    content: "";
    width: 1px;
    height: 112px;
    background: currentColor;
    opacity: .24;
}

.inv-events-classic__center-decor-image {
    object-fit: contain;
}

.inv-events-classic__center-decor-image--desktop {
    display: block;
    width: min(100%, 150px);
    max-height: 320px;
}

.inv-events-classic__center-decor-image--mobile {
    display: none;
}

.inv-events-classic__event {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0;
    padding: 0;
    text-align: center;
}

.inv-events-classic__event--spaced {
    margin-top: clamp(30px, 3.5vw, 46px);
}

.inv-events-classic__event-icon {
    display: flex;
    width: var(--inv-classic-event-icon-desktop-size, clamp(46px, 4.4vw, 64px));
    height: var(--inv-classic-event-icon-desktop-size, clamp(46px, 4.4vw, 64px));
    margin: 0 auto clamp(14px, 1.6vw, 20px);
    align-items: center;
    justify-content: center;
}

.inv-events-classic__event-icon-image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain;
}

@media (max-width: 720px) {
    .inv-events-classic__event-icon {
        width: var(--inv-classic-event-icon-mobile-size, var(--inv-classic-event-icon-desktop-size, 52px));
        height: var(--inv-classic-event-icon-mobile-size, var(--inv-classic-event-icon-desktop-size, 52px));
    }
}

.inv-events-classic__event-title {
    margin: 0;
    font-size: var(--inv-event-title-size, clamp(15px, 1.35vw, 20px));
    font-weight: 400;
    letter-spacing: .07em;
    line-height: 1.35;
}

@media (max-width: 720px) {
    .inv-events-classic__event-title {
        font-size: var(--inv-event-mobile-title-size, var(--inv-event-title-size, clamp(15px, 4.8vw, 20px)));
    }
}

.inv-events-classic__event-rule {
    width: 28px;
    margin: 18px auto 20px;
}

.inv-events-classic__event-time {
    font-size: clamp(16px, 1.35vw, 20px);
    line-height: 1.4;
}

.inv-events-classic__event-place {
    margin-top: 10px;
    font-size: clamp(18px, 1.55vw, 23px);
    font-weight: 600;
    line-height: 1.35;
}

.inv-events-classic__event-description {
    margin-top: 10px;
    font-size: clamp(15px, 1.2vw, 18px);
    line-height: 1.55;
    opacity: .78;
}

.inv-events-classic__main-date {
    margin-top: clamp(38px, 4vw, 52px);
    text-align: center;
}

.inv-events-classic__main-date .inv-events-classic__weekday {
    font-weight: 600;
}

.inv-events-classic__location-group {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
}

.inv-events-classic__group-events {
    width: 100%;
}

.inv-events-classic__group-location {
    width: 100%;
    margin-top: clamp(24px, 3vw, 36px);
}

.inv-events-classic__location-grid--many {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: clamp(54px, 7vw, 90px) clamp(44px, 7vw, 100px);
    align-items: start;
}

.inv-events-classic__location-grid--many .inv-events-classic__location-group {
    padding-top: 10px;
}

.inv-events-classic__location-grid--split[data-visible-location-groups="1"] {
    grid-template-columns: minmax(0, 560px);
    justify-content: center;
}

.inv-events-classic__location-group--solo {
    grid-column: 1;
}

@media (max-width: 767.98px) {
    .inv-events--classic-columns {
        padding: 76px 0 88px;
    }

    .inv-events-classic__title {
        font-size: clamp(52px, 17vw, 78px);
    }

    .inv-events-classic__surface {
        margin-top: 42px;
    }

    .inv-events-classic__same-grid,
    .inv-events-classic__location-grid--split,
    .inv-events-classic__location-grid--many {
        grid-template-columns: 1fr;
        gap: 0;
        width: min(100%, 560px);
        margin-left: auto;
        margin-right: auto;
    }

    .inv-events-classic__center-decor {
        min-height: 0;
        padding: 38px 0;
    }

    .inv-events-classic__center-decor-image--desktop {
        display: none;
    }

    .inv-events-classic__center-decor-image--mobile {
        display: block;
        width: min(62vw, 240px);
        max-height: 120px;
    }

    .inv-events-classic__center-decor.has-mobile-decoration::before {
        display: none;
    }

    .inv-events-classic__center-decor:not(.has-mobile-decoration)::before {
        content: "";
        display: block;
        width: 72px;
        height: 1px;
        background: currentColor;
        opacity: .24;
    }

    .inv-events-classic__event-stack,
    .inv-events-classic__location-group + .inv-events-classic__location-group {
        margin-top: 42px;
    }

    .inv-events-classic__location-grid--split .inv-events-classic__location-group + .inv-events-classic__center-decor,
    .inv-events-classic__location-grid--split .inv-events-classic__center-decor + .inv-events-classic__location-group {
        margin-top: 0;
    }

    .inv-events-classic__location-grid--many .inv-events-classic__location-group {
        padding: 42px 0 0;
        border-top: 1px solid currentColor;
        border-color: color-mix(in srgb, currentColor 18%, transparent);
    }

    .inv-events-classic__location-grid--many .inv-events-classic__location-group:first-child {
        padding-top: 0;
        border-top: 0;
    }

    .inv-events-classic__address {
        font-size: 16px;
    }

    [data-section="events"] .inv-events-classic__venue {
        font-size: var(--inv-event-mobile-title-size, var(--inv-event-title-size, clamp(19px, 6vw, 25px)));
    }

    /* 2026-10-04 — Itinerario móvil: compacta únicamente el espacio que queda
       DESPUÉS del separador horizontal. Hay dos estructuras posibles:
       - same-grid: una sola sede, separador entre sede y eventos;
       - location-grid--split: dos sedes, separador entre ambos bloques.
       El ajuste anterior cubría solamente same-grid, por eso en itinerarios
       con dos sedes el espacio seguía viéndose grande. */
    [data-section="events"].inv-events--classic-columns
    .inv-events-classic__same-grid > .inv-events-classic__center-decor,
    [data-section="events"].inv-events--classic-columns
    .inv-events-classic__location-grid--split > .inv-events-classic__center-decor {
        /* El separador ya aporta su propio aire visual. En teléfono no dejamos
           espacio adicional debajo para acercar el siguiente evento/icono. */
        padding-bottom: 0;
    }

    [data-section="events"].inv-events--classic-columns
    .inv-events-classic__same-grid > .inv-events-classic__event-stack {
        margin-top: 0;
    }

    [data-section="events"].inv-events--classic-columns
    .inv-events-classic__location-grid--split > .inv-events-classic__center-decor
    + .inv-events-classic__location-group {
        margin-top: 0;
    }

    /* 2026-10-05 — Itinerario móvil: igualar visualmente el aire a ambos lados
       del divisor central. El asset del divisor puede traer espacio transparente
       dentro de su propia caja, así que un margin-top:0 todavía deja el siguiente
       evento demasiado abajo. Acercamos solamente el bloque que viene DESPUÉS
       del divisor; no se modifica el espacio entre el botón de ubicación y la
       línea, ni desktop, ni Eventos Adicionales. */
    [data-section="events"].inv-events--classic-columns
    .inv-events-classic__same-grid > .inv-events-classic__center-decor
    + .inv-events-classic__event-stack,
    [data-section="events"].inv-events--classic-columns
    .inv-events-classic__location-grid--split > .inv-events-classic__center-decor
    + .inv-events-classic__location-group {
        margin-top: -44px;
    }
}

/* DressCode.EditorialSplit */
.inv-dresscode {
    padding: clamp(88px, 10vw, 146px) 0;
}

.inv-dresscode__inner { text-align: center; }

.inv-dresscode__name {
    margin: 24px 0 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(28px, 3vw, 46px);
    letter-spacing: .04em;
}

/* Studio override for the selected dress-code name (for example "Formal").
   Keep this separate from BodyFontSizePx so the explanatory copy can remain
   smaller while the dress-code name acts as its own visual heading. */
.inv-section.inv-dresscode.inv-dresscode--name-size-override .inv-dresscode__name {
    font-size: var(--inv-dresscode-name-size);
}

.inv-dresscode__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: clamp(36px, 8vw, 110px);
    margin-top: clamp(48px, 6vw, 76px);
}

.inv-dresscode__inline-images {
    width: var(--inv-dresscode-image-desktop-width, 82%);
    max-width: 1180px;
    margin: clamp(34px, 5vw, 62px) auto 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: clamp(18px, 3vw, 36px);
}

.inv-dresscode__inline-image {
    display: block;
    width: 100%;
    max-width: 100%;
    height: auto;
    object-fit: contain;
}

.inv-dresscode__inline-images--multiple .inv-dresscode__inline-image {
    width: calc(50% - 18px);
}

.inv-dresscode-card__inline-image-holder {
    width: var(--inv-dresscode-card-image-desktop-width, 82%);
    margin: 24px auto 0;
}

.inv-dresscode-card__inline-image {
    display: block;
    width: 100%;
    height: auto;
    object-fit: contain;
}

.inv-dresscode-card {
    position: relative;
    display: flex;
    flex-direction: column;
    height: 100%;
    padding: 0 clamp(10px, 2vw, 30px);
}

.inv-dresscode-card + .inv-dresscode-card::before {
    content: "";
    position: absolute;
    left: calc(clamp(36px, 8vw, 110px) / -2);
    top: 8%;
    bottom: 8%;
    width: 1px;
    background: currentColor;
    opacity: .14;
}

.inv-dresscode-card__title {
    margin: 0 0 22px;
    font-family: var(--inv-heading-font);
    font-size: clamp(25px, 2.6vw, 40px);
    font-weight: 400;
}

.inv-dresscode-card__text,
.inv-dresscode-card__note {
    margin: 0 auto;
    max-width: 480px;
    font-size: clamp(15px, 1.25vw, 18px);
    line-height: 1.65;
}

.inv-dresscode-card__note {
    margin-top: 20px;
    font-size: clamp(13px, 1vw, 15px);
    opacity: .7;
}

.inv-dresscode-card__action {
    margin-top: auto;
    padding-top: 28px;
    text-align: center;
}

.inv-dresscode-card__action .inv-button {
    margin-top: 0;
}



/* Compact editorial composition when Dress Code images are shown inline. */
@media (min-width: 769px) {
    .inv-dresscode--inline .inv-dresscode__grid {
        gap: clamp(22px, 3.2vw, 52px);
        margin-top: clamp(28px, 3.5vw, 44px);
        align-items: start;
    }

    .inv-dresscode--inline .inv-dresscode-card {
        display: grid;
        grid-template-columns: minmax(0, 1fr) minmax(140px, .85fr);
        grid-template-rows: auto auto auto;
        column-gap: clamp(14px, 2vw, 30px);
        align-items: center;
        padding: 0 clamp(6px, 1vw, 16px);
    }

    .inv-dresscode--inline .inv-dresscode-card__title {
        grid-column: 1;
        grid-row: 1;
        align-self: end;
        margin: 0 0 5px;
        font-size: clamp(20px, 1.75vw, 29px);
        text-align: right;
    }

    .inv-dresscode--inline .inv-dresscode-card__text,
    .inv-dresscode--inline .inv-dresscode-card__note {
        grid-column: 1;
        margin: 0;
        max-width: none;
        font-size: clamp(13px, 1vw, 16px);
        line-height: 1.35;
        text-align: right;
    }

    .inv-dresscode--inline .inv-dresscode-card__text { grid-row: 2; }
    .inv-dresscode--inline .inv-dresscode-card__note { grid-row: 3; margin-top: 5px; }

    .inv-dresscode--inline .inv-dresscode-card__inline-image-holder {
        grid-column: 2;
        grid-row: 1 / span 3;
        width: min(var(--inv-dresscode-card-image-desktop-width, 82%), 240px);
        max-width: 100%;
        height: clamp(190px, 16vw, 240px);
        margin: 0;
        display: flex;
        align-items: flex-start;
        justify-content: center;
        justify-self: start;
        align-self: start;
    }

    .inv-dresscode--inline .inv-dresscode-card__inline-image {
        width: 100%;
        height: 100%;
        object-fit: contain;
        object-position: center top;
    }

    .inv-dresscode--inline .inv-dresscode-card:nth-child(2) {
        grid-template-columns: minmax(140px, .85fr) minmax(0, 1fr);
    }

    .inv-dresscode--inline .inv-dresscode-card:nth-child(2) .inv-dresscode-card__title,
    .inv-dresscode--inline .inv-dresscode-card:nth-child(2) .inv-dresscode-card__text,
    .inv-dresscode--inline .inv-dresscode-card:nth-child(2) .inv-dresscode-card__note {
        grid-column: 2;
        text-align: left;
    }

    .inv-dresscode--inline .inv-dresscode-card:nth-child(2) .inv-dresscode-card__inline-image-holder {
        grid-column: 1;
        justify-self: end;
    }

    .inv-dresscode--inline .inv-dresscode-card + .inv-dresscode-card::before {
        left: calc(clamp(22px, 3.2vw, 52px) / -2);
        top: 4%;
        bottom: 4%;
    }
}

@media (max-width: 768px) {
    .inv-section.inv-dresscode.inv-dresscode--mobile-name-size-override .inv-dresscode__name,
    .inv-section.inv-dresscode.inv-dresscode--mobile-name-size-auto .inv-dresscode__name {
        font-size: var(--inv-dresscode-mobile-name-size);
    }
}

/* Dress code reference image detail */
.inv-dresscode-card__action--detail {
    margin-top: auto;
    padding-top: 28px;
}

.inv-dresscode-card__action--detail + .inv-dresscode-card__action {
    margin-top: 0;
    padding-top: 12px;
}

.inv-dresscode-detail-button {
    margin-top: 0;
}

body.inv-dresscode-image-modal-open {
    overflow: hidden;
}

.inv-dresscode-image-modal[hidden] {
    display: none !important;
}

/*
 * Dress-code image modal intentionally uses conservative viewport/layout CSS.
 * Safari/WebKit versions in the field have had edge cases around intrinsic image
 * sizing inside Grid/Flex containers combined with min() and svh.  This modal does
 * not need those primitives, so keep the sizing path simple and broadly compatible.
 */
.inv-dresscode-image-modal {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 100250;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 24px;
}

.inv-dresscode-image-modal__backdrop {
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 0;
    width: 100%;
    height: 100%;
    border: 0;
    padding: 0;
    background: rgba(0, 0, 0, .62);
    cursor: default;
}

.inv-dresscode-image-modal__stage {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: flex-start;
    justify-content: center;
    width: auto;
    max-width: calc(100vw - 48px);
    max-height: calc(100vh - 48px);
    padding: 0;
    overflow: visible;
    text-align: center;
    background: transparent;
    border-radius: 0;
    box-shadow: none;
}

.inv-dresscode-image-modal__image {
    display: block;
    width: auto;
    height: auto;
    max-width: calc(100vw - 48px);
    max-height: calc(100vh - 48px);
    margin: 0 auto;
    object-fit: contain;
    border-radius: 8px;
    box-shadow: 0 24px 80px rgba(0, 0, 0, .34);
    user-select: none;
    -webkit-user-drag: none;
}

.inv-dresscode-image-modal__close {
    position: absolute;
    top: -14px;
    right: -14px;
    z-index: 2;
    width: 38px;
    height: 38px;
    border: 0;
    border-radius: 50%;
    padding: 0;
    color: #1f1f1f;
    background: rgba(255, 255, 255, .94);
    box-shadow: 0 2px 10px rgba(0, 0, 0, .16);
    font: 300 28px/1 Arial, sans-serif;
    cursor: pointer;
}

.inv-dresscode-image-modal__close:hover,
.inv-dresscode-image-modal__close:focus-visible {
    background: #fff;
    outline: none;
}

@media (max-width: 767.98px) {
    .inv-dresscode-image-modal {
        padding: 14px;
    }

    .inv-dresscode-image-modal__stage {
        max-width: calc(100vw - 28px);
        max-height: calc(100vh - 28px);
    }

    .inv-dresscode-image-modal__image {
        max-width: calc(100vw - 28px);
        max-height: calc(100vh - 28px);
        border-radius: 6px;
    }

    .inv-dresscode-image-modal__close {
        top: -10px;
        right: -10px;
        width: 36px;
        height: 36px;
        font-size: 26px;
    }
}

/* A2.5F: reusable floral decoration layer. The decorated section intentionally allows
   controlled overflow so ornaments can cross into the adjacent section without affecting
   layout or pointer interaction. */
.inv-section--has-floral-decoration {
    position: relative;
    overflow: visible;
    /* Do not create a stacking context on the whole section. If the section owns
       a z-index, its overflowing ornament can still be painted below a later
       sibling section. Let the floral layer participate in the page stacking
       context instead, so it can render above the following section background. */
    z-index: auto;
}

.inv-section--has-floral-decoration > .inv-section__inner,
.inv-footer.inv-section--has-floral-decoration > .inv-footer__inner {
    position: relative;
    z-index: 2;
}

.inv-floral-decoration-layer {
    position: absolute;
    inset: 0;
    z-index: 50;
    pointer-events: none;
}

.inv-floral-decoration-layer--mobile {
    display: none;
}

/* Repeated lateral ornaments behave like a decorative border: they can fill the
   current section, but they must stop at the section boundary instead of painting
   over the next/previous section. Single ornaments keep the existing overflow
   behavior controlled by the Studio's overflow settings. */
.inv-floral-decoration-layer--clip-section {
    overflow: hidden;
}

/* Single mobile ornaments can still overlap the sections above/below, but
   artwork extending past the left/right edge is not part of the scroll area.
   Repeated lateral borders retain their existing four-sided clipping. */
@media (max-width: 767.98px) {
    .inv-section--has-floral-decoration .inv-floral-decoration-layer:not(.inv-floral-decoration-layer--clip-section) {
        overflow-x: clip;
        overflow-y: visible;
    }
}

.inv-floral-decoration {
    position: absolute;
    width: min(var(--inv-floral-item-width, var(--inv-floral-decoration-width, 360px)), 44vw);
    opacity: var(--inv-floral-item-opacity, var(--inv-floral-decoration-opacity, .45));
    pointer-events: none;
    transform: translateY(0);
    will-change: transform;
}

.inv-floral-decoration__stack {
    display: flex;
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    gap: clamp(10px, 1.4vw, 18px);
}

.inv-floral-decoration--repeated .inv-floral-decoration__stack {
    gap: clamp(8px, 1.1vw, 14px);
}

.inv-floral-decoration__image {
    display: block;
    position: relative;
    top: var(--inv-floral-item-side-y, 0px);
    width: 100%;
    height: auto;
    max-width: none;
    object-fit: contain;
}

.inv-floral-decoration--mirrored .inv-floral-decoration__image {
    transform: rotate(180deg);
}

.inv-floral-decoration--top-left {
    top: 0;
    left: 0;
}

.inv-floral-decoration--bottom-right {
    right: 0;
    bottom: 0;
}

.inv-floral-decoration--top-right {
    top: 0;
    right: 0;
}

.inv-floral-decoration--bottom-left {
    left: 0;
    bottom: 0;
}

.inv-floral-decoration--top-center {
    top: 0;
    left: 50%;
    transform: translateX(-50%);
}

.inv-floral-decoration--bottom-center {
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
}

.inv-floral-decoration--side-left {
    top: 50%;
    left: 0;
    transform: translateY(-50%);
}

.inv-floral-decoration--side-right {
    top: 50%;
    right: 0;
    transform: translateY(-50%);
}

.inv-floral-preset--top-left .inv-floral-decoration--top-left,
.inv-floral-preset--opposite-corners .inv-floral-decoration--top-left,
.inv-floral-preset--frame-light .inv-floral-decoration--top-left {
    left: clamp(-38px, -2.5vw, -12px);
}

.inv-floral-preset--top-center .inv-floral-decoration--top-center {
    top: clamp(-18px, -1.2vw, -8px);
}

.inv-floral-preset--bottom-right .inv-floral-decoration--bottom-right,
.inv-floral-preset--opposite-corners .inv-floral-decoration--bottom-right,
.inv-floral-preset--frame-light .inv-floral-decoration--bottom-right {
    right: clamp(-38px, -2.5vw, -12px);
}

.inv-floral-preset--opposite-corners-reverse .inv-floral-decoration--top-right {
    right: clamp(-38px, -2.5vw, -12px);
}

.inv-floral-preset--opposite-corners-reverse .inv-floral-decoration--bottom-left {
    left: clamp(-38px, -2.5vw, -12px);
}

.inv-floral-preset--bottom-center .inv-floral-decoration--bottom-center {
    bottom: clamp(-18px, -1.2vw, -8px);
}

.inv-floral-preset--side-soft .inv-floral-decoration {
    width: min(var(--inv-floral-item-width, var(--inv-floral-decoration-width, 360px)), 34vw);
    filter: opacity(.72);
}

.inv-floral-preset--side-soft .inv-floral-decoration--side-left { left: calc(clamp(-110px, -6vw, -46px) + var(--inv-floral-item-side-x, 0px)); }
.inv-floral-preset--side-soft .inv-floral-decoration--side-right { right: calc(clamp(-110px, -6vw, -46px) + var(--inv-floral-item-side-x, 0px)); }

.inv-floral-decoration__frame {
    position: absolute;
    inset: clamp(28px, 4vw, 58px);
    border: 1px solid currentColor;
    opacity: .12;
}

/* A2.5J: each ornament owns its own overflow amount, size and opacity. */
.inv-floral-overflow--up .inv-floral-decoration--top-left,
.inv-floral-overflow--both .inv-floral-decoration--top-left {
    transform: translateY(calc(0% - var(--inv-floral-item-overflow, 0%)));
}

.inv-floral-overflow--up .inv-floral-decoration--top-center,
.inv-floral-overflow--both .inv-floral-decoration--top-center {
    transform: translateX(-50%) translateY(calc(0% - var(--inv-floral-item-overflow, 0%)));
}

.inv-floral-overflow--down .inv-floral-decoration--bottom-right,
.inv-floral-overflow--both .inv-floral-decoration--bottom-right {
    transform: translateY(var(--inv-floral-item-overflow, 0%));
}

.inv-floral-overflow--down .inv-floral-decoration--bottom-center,
.inv-floral-overflow--both .inv-floral-decoration--bottom-center {
    transform: translateX(-50%) translateY(var(--inv-floral-item-overflow, 0%));
}

.inv-floral-overflow--up .inv-floral-decoration--top-right,
.inv-floral-overflow--both .inv-floral-decoration--top-right {
    transform: translateY(calc(0% - var(--inv-floral-item-overflow, 0%)));
}

.inv-floral-overflow--down .inv-floral-decoration--bottom-left,
.inv-floral-overflow--both .inv-floral-decoration--bottom-left {
    transform: translateY(var(--inv-floral-item-overflow, 0%));
}

@media (max-width: 720px) {
    .inv-floral-decoration-layer--desktop {
        display: none;
    }

    .inv-floral-decoration-layer--mobile {
        display: block;
    }

    .inv-floral-decoration {
        width: min(var(--inv-floral-item-mobile-width, var(--inv-floral-decoration-mobile-width, 240px)), 58vw);
    }

    .inv-floral-decoration__image {
        top: var(--inv-floral-item-mobile-side-y, var(--inv-floral-item-side-y, 0px));
    }

    .inv-floral-preset--top-left .inv-floral-decoration--top-left,
    .inv-floral-preset--opposite-corners .inv-floral-decoration--top-left,
    .inv-floral-preset--frame-light .inv-floral-decoration--top-left { left: -22px; }

    .inv-floral-preset--top-center .inv-floral-decoration--top-center { top: -12px; }

    .inv-floral-preset--bottom-right .inv-floral-decoration--bottom-right,
    .inv-floral-preset--opposite-corners .inv-floral-decoration--bottom-right,
    .inv-floral-preset--frame-light .inv-floral-decoration--bottom-right { right: -22px; }

    .inv-floral-preset--bottom-center .inv-floral-decoration--bottom-center { bottom: -12px; }

    .inv-floral-preset--opposite-corners-reverse .inv-floral-decoration--top-right { right: -22px; }
    .inv-floral-preset--opposite-corners-reverse .inv-floral-decoration--bottom-left { left: -22px; }

    .inv-floral-overflow--up .inv-floral-decoration--top-left,
    .inv-floral-overflow--both .inv-floral-decoration--top-left {
        transform: translateY(calc(0% - var(--inv-floral-item-mobile-overflow, 0%)));
    }

    .inv-floral-overflow--up .inv-floral-decoration--top-center,
    .inv-floral-overflow--both .inv-floral-decoration--top-center {
        transform: translateX(-50%) translateY(calc(0% - var(--inv-floral-item-mobile-overflow, 0%)));
    }

    .inv-floral-overflow--down .inv-floral-decoration--bottom-right,
    .inv-floral-overflow--both .inv-floral-decoration--bottom-right {
        transform: translateY(var(--inv-floral-item-mobile-overflow, 0%));
    }

    .inv-floral-overflow--up .inv-floral-decoration--top-right,
    .inv-floral-overflow--both .inv-floral-decoration--top-right {
        transform: translateY(calc(0% - var(--inv-floral-item-mobile-overflow, 0%)));
    }

    .inv-floral-overflow--down .inv-floral-decoration--bottom-left,
    .inv-floral-overflow--both .inv-floral-decoration--bottom-left {
        transform: translateY(var(--inv-floral-item-mobile-overflow, 0%));
    }

    .inv-floral-overflow--down .inv-floral-decoration--bottom-center,
    .inv-floral-overflow--both .inv-floral-decoration--bottom-center {
        transform: translateX(-50%) translateY(var(--inv-floral-item-mobile-overflow, 0%));
    }

    .inv-floral-preset--side-soft .inv-floral-decoration {
        width: min(var(--inv-floral-item-mobile-width, var(--inv-floral-decoration-mobile-width, 240px)), 44vw);
    }

    .inv-floral-preset--side-soft .inv-floral-decoration--side-left { left: calc(-58px + var(--inv-floral-item-mobile-side-x, var(--inv-floral-item-side-x, 0px))); }
    .inv-floral-preset--side-soft .inv-floral-decoration--side-right { right: calc(-58px + var(--inv-floral-item-mobile-side-x, var(--inv-floral-item-side-x, 0px))); }
    .inv-floral-decoration__frame { inset: 24px 18px; }
}

/* Additional information */
.inv-info {
    padding: clamp(84px, 9vw, 136px) 0;
}

.inv-info__groups {
    width: min(100%, 980px);
    margin: clamp(48px, 6vw, 78px) auto 0;
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: clamp(28px, 4vw, 52px);
}

.inv-info__groups--split {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: stretch;
}

.inv-info__group {
    min-width: 0;
}

.inv-info__groups--split {
    position: relative;
}

.inv-info__internal-separator {
    position: absolute;
    left: 50%;
    top: 50%;
    z-index: 2;
    width: var(--inv-info-separator-desktop-width, 54px);
    transform: translate(-50%, -50%);
    opacity: var(--inv-info-separator-opacity, .55);
    pointer-events: none;
}

.inv-info__internal-separator-image {
    display: block;
    width: 100%;
    height: auto;
    max-height: 140px;
    object-fit: contain;
}

/* A2.5R: these are semantic secondary headings, so they use the Studio's
   Títulos secundarios font rather than falling back to the body font. */
.inv-info__group-title {
    margin: 0 0 clamp(24px, 2.8vw, 34px);
    font-family: var(--inv-heading-font);
    font-size: clamp(18px, 1.7vw, 26px);
    font-weight: 400;
    line-height: 1.25;
    letter-spacing: .05em;
    text-align: center;
    text-transform: uppercase;
}

.inv-info__list {
    width: 100%;
    margin: 0;
    display: grid;
    gap: clamp(22px, 2.8vw, 34px);
}

.inv-info__item {
    width: min(100%, 40ch);
    margin: 0 auto;
    padding: 0;
    border: 0;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: start;
    column-gap: .65em;
}

/* Lista clásica: take advantage of the available column width on desktop.
   Keep the other editorial variants and transport layouts unchanged. */
.inv-info:not(.inv-info--editorial-blocks) .inv-info__groups {
    width: min(100%, 1160px);
    gap: clamp(28px, 3.5vw, 56px);
}

.inv-info:not(.inv-info--editorial-blocks) .inv-info__item {
    width: 100%;
    max-width: none;
}

/* The bullet is presentation only; it is not persisted in questionnaire text. */
.inv-info__item::before {
    content: "•";
    line-height: 1.7;
    opacity: .62;
}

.inv-info__number {
    font-family: var(--inv-heading-font);
    font-size: 22px;
    opacity: .48;
}

.inv-info__text {
    min-width: 0;
    max-width: none;
    margin: 0;
    font-size: clamp(16px, 1.3vw, 20px);
    line-height: 1.7;
}

/* Información importante · Bloques editoriales
   Clean editorial grouping: no extra background or border is introduced by the
   layout itself. The section's configured surface treatment remains independent. */
.inv-info__groups--editorial-blocks {
    width: min(100%, 1060px);
    gap: clamp(48px, 7vw, 92px);
    align-items: start;
}

.inv-info__groups--editorial-blocks:not(.inv-info__groups--split) {
    width: min(100%, 680px);
}

.inv-info__groups--editorial-blocks .inv-info__group {
    padding: 0 clamp(4px, .8vw, 12px);
}

.inv-info__groups--editorial-blocks .inv-info__group-title {
    position: relative;
    margin-bottom: clamp(30px, 3.4vw, 42px);
    padding-bottom: clamp(14px, 1.5vw, 20px);
    text-align: left;
    letter-spacing: .07em;
}

.inv-info__groups--editorial-blocks .inv-info__group-title::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: 0;
    width: min(100%, 190px);
    height: 1px;
    background: currentColor;
    opacity: .24;
}

.inv-info__groups--editorial-blocks .inv-info__list {
    gap: clamp(24px, 3vw, 38px);
}

.inv-info__groups--editorial-blocks .inv-info__item {
    width: 100%;
    margin: 0;
}

/* Card treatments render Información importante and Recomendaciones as two
   independent cards instead of one large shared surface. */
.inv-info__group.inv-layout-surface-card {
    height: 100%;
    padding: clamp(34px, 4vw, 52px) clamp(26px, 3.5vw, 46px);
}

.inv-treatment-dark .inv-info__group.inv-layout-surface-card,
.inv-treatment-ocean .inv-info__group.inv-layout-surface-card {
    color: var(--inv-text);
}

.inv-info__link {
    color: inherit;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: .18em;
}

.inv-info__link:hover,
.inv-info__link:focus-visible {
    color: inherit;
    opacity: .72;
}

@media (max-width: 767.98px) {
    .inv-info__groups--split .inv-info__internal-separator {
        position: relative;
        left: auto;
        top: auto;
        width: var(--inv-info-separator-mobile-width, 42px);
        margin: -4px auto;
        transform: none;
        grid-column: 1;
    }

    .inv-info__groups--split {
        grid-template-columns: minmax(0, 1fr);
    }

    .inv-info__group-title {
        margin-bottom: 20px;
        font-size: clamp(18px, 6vw, 24px);
    }

    .inv-info__group.inv-layout-surface-card {
        padding: 30px 22px;
    }

    .inv-info__item {
        width: min(100%, 34ch);
    }

    .inv-info__text {
        font-size: 16px;
        line-height: 1.65;
    }

    .inv-info__groups--editorial-blocks {
        gap: 42px;
    }

    .inv-info__groups--editorial-blocks .inv-info__group {
        padding: 0;
    }

    .inv-info__groups--editorial-blocks .inv-info__group-title {
        margin-bottom: 24px;
        padding-bottom: 13px;
        text-align: left;
    }

    .inv-info__groups--editorial-blocks .inv-info__item {
        width: 100%;
    }
}


/* A2.7I: Información importante · Post-its apilados */
.inv-info--postit {
    overflow: hidden;
}

.inv-info__inner--postit {
    position: relative;
    z-index: 2;
}

.inv-postit-stack {
    width: min(100%, 860px);
    margin: clamp(34px, 5vw, 64px) auto 0;
    user-select: none;
    -webkit-user-select: none;
}

.inv-postit-stack__stage {
    position: relative;
    width: 100%;
    height: clamp(365px, 48vw, 535px);
    outline: none;
    touch-action: pan-y;
}

.inv-postit-stack__stage:focus-visible::after {
    content: "";
    position: absolute;
    inset: 4px;
    border: 1px dashed currentColor;
    border-radius: 14px;
    opacity: .28;
    pointer-events: none;
}

.inv-postit-card {
    --inv-postit-drag-x: 0px;
    --inv-postit-drag-y: 0px;
    --inv-postit-drag-rotation: 0deg;
    position: absolute;
    left: 50%;
    top: 50%;
    width: min(560px, calc(100vw - 70px));
    height: clamp(340px, 42vw, 480px);
    padding: clamp(40px, 5vw, 68px) clamp(32px, 5.2vw, 70px);
    border: 0;
    border-radius: 2px;
    background-color: var(--inv-postit-paper-color, #f4edcf);
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
    box-shadow:
        0 18px 34px rgba(24, 24, 20, .16),
        0 4px 10px rgba(24, 24, 20, .10);
    transform-origin: center center;
    opacity: 1;
    transition:
        transform 430ms cubic-bezier(.2,.72,.22,1),
        opacity 320ms ease,
        box-shadow 220ms ease;
    will-change: transform, opacity;
    overflow: hidden;
}

.inv-postit-card__texture {
    position: absolute;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    background-position: var(--inv-postit-texture-position-desktop, center center);
    background-size: var(--inv-postit-texture-size-desktop, cover);
    background-repeat: var(--inv-postit-texture-repeat-desktop, no-repeat);
    transform: scale(var(--inv-postit-texture-scale-desktop, 1));
    transform-origin: var(--inv-postit-texture-origin-desktop, center center);
}

.inv-postit-card::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    pointer-events: none;
    background: linear-gradient(145deg, transparent 18%, var(--inv-postit-gradient-color, var(--inv-bg-light)) 100%);
    opacity: .24;
}

.inv-postit-card::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 3;
    pointer-events: none;
    box-shadow: inset 0 0 0 1px rgba(255,255,255,.12);
}

.inv-postit-card--theme-light {
    color: var(--inv-text);
}

.inv-postit-card--theme-dark {
    color: var(--inv-text-inverse);
}

.inv-postit-card--fallback-paper.inv-postit-card--theme-light {
    background-image:
        linear-gradient(135deg, rgba(255,255,255,.20), rgba(120,94,48,.035)),
        linear-gradient(var(--inv-postit-paper-color, #f5efda), var(--inv-postit-paper-color, #eee3c4));
}

.inv-postit-card--fallback-paper.inv-postit-card--theme-dark {
    background-image:
        linear-gradient(135deg, rgba(255,255,255,.055), rgba(0,0,0,.13)),
        linear-gradient(var(--inv-postit-paper-color, var(--inv-bg-dark)), var(--inv-postit-paper-color, var(--inv-bg-dark)));
}

.inv-postit-card[data-stack-position="0"] {
    transform:
        translate(calc(-50% + var(--inv-postit-drag-x)), calc(-50% + var(--inv-postit-drag-y)))
        rotate(calc(var(--inv-postit-base-rotation, 0deg) + var(--inv-postit-drag-rotation)));
}

.inv-postit-card[data-stack-position="1"] {
    transform: translate(calc(-50% + 10px), calc(-50% + 12px)) rotate(calc(var(--inv-postit-base-rotation, 0deg) + 1.1deg)) scale(.985);
}

.inv-postit-card[data-stack-position="2"] {
    transform: translate(calc(-50% - 12px), calc(-50% + 23px)) rotate(calc(var(--inv-postit-base-rotation, 0deg) - 1.35deg)) scale(.966);
}

.inv-postit-card[data-stack-position="3"] {
    transform: translate(calc(-50% + 5px), calc(-50% + 32px)) rotate(calc(var(--inv-postit-base-rotation, 0deg) + .45deg)) scale(.948);
}

.inv-postit-card.is-active {
    cursor: grab;
}

.inv-postit-card.is-active:active,
.inv-postit-card.is-dragging {
    cursor: grabbing;
    transition: box-shadow 120ms ease;
    box-shadow:
        0 26px 52px rgba(24, 24, 20, .22),
        0 8px 18px rgba(24, 24, 20, .12);
}

.inv-postit-card.is-behind {
    pointer-events: none;
}

.inv-postit-card.is-hidden {
    opacity: 0;
    pointer-events: none;
    transform: translate(-50%, calc(-50% + 38px)) scale(.93);
}

.inv-postit-card.is-exiting-left {
    pointer-events: none;
    opacity: 0;
    transform: translate(calc(-50% - 118vw), calc(-50% - 26px)) rotate(-15deg) scale(.96);
}

.inv-postit-card.is-exiting-right {
    pointer-events: none;
    opacity: 0;
    transform: translate(calc(-50% + 118vw), calc(-50% - 26px)) rotate(15deg) scale(.96);
}

.inv-postit-card__content {
    position: relative;
    z-index: 2;
    width: 100%;
    height: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 0;
    text-align: center;
}

.inv-postit-card__eyebrow {
    flex: 0 0 auto;
    margin: 0 0 clamp(16px, 2vw, 24px);
    font-family: var(--inv-label-font);
    font-size: clamp(10px, .9vw, 12px);
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: .14em;
    text-transform: uppercase;
    opacity: .66;
}

.inv-postit-card__icon {
    flex: 0 0 auto;
    display: block;
    width: min(var(--inv-postit-icon-width-desktop, 72px), 72%);
    max-height: 34%;
    height: auto;
    object-fit: contain;
    margin: 0 0 clamp(16px, 2vw, 24px);
    user-select: none;
    -webkit-user-select: none;
    -webkit-user-drag: none;
    pointer-events: none;
}

.inv-postit-card__text {
    margin: 0;
    max-width: 32ch;
    max-height: 100%;
    overflow: auto;
    overscroll-behavior: contain;
    scrollbar-width: thin;
    font-family: var(--inv-body-font);
    font-size: clamp(17px, 1.55vw, 22px);
    line-height: 1.65;
    text-wrap: pretty;
    /* A2.7J: text is part of the draggable surface. Disabling selection avoids
       the browser competing with the horizontal Post-it gesture. */
    user-select: none;
    -webkit-user-select: none;
    -webkit-user-drag: none;
    -webkit-touch-callout: none;
    touch-action: pan-y;
    cursor: inherit;
}

.inv-postit-card__link {
    display: inline-block;
    margin-left: .18em;
    padding: 7px 15px;
    border-radius: var(--inv-button-radius);
    text-decoration: none;
    font-family: var(--inv-label-font);
    font-size: .72em;
    font-weight: 600;
    line-height: 1.2;
    letter-spacing: .06em;
    text-transform: uppercase;
    transition: opacity 160ms ease, background-color 160ms ease, color 160ms ease;
}

.inv-postit-card--theme-light .inv-postit-card__link {
    background: var(--inv-button-light-bg);
    color: var(--inv-button-light-text);
    border: var(--inv-button-light-border-width) solid var(--inv-button-light-border);
}

.inv-postit-card--theme-dark .inv-postit-card__link {
    background: var(--inv-button-dark-bg);
    color: var(--inv-button-dark-text);
    border: var(--inv-button-dark-border-width) solid var(--inv-button-dark-border);
}

.inv-postit-card__link:hover,
.inv-postit-card__link:focus-visible {
    opacity: var(--inv-button-light-hover-opacity, .88);
}

.inv-postit-stack__nav {
    min-height: 48px;
    margin-top: clamp(16px, 2.5vw, 28px);
    display: flex;
    justify-content: center;
    align-items: center;
    gap: clamp(16px, 3vw, 30px);
}

.inv-postit-stack__control {
    width: 44px;
    height: 44px;
    display: inline-grid;
    place-items: center;
    padding: 0;
    border-radius: 50%;
    cursor: pointer;
    font: 400 21px/1 var(--inv-body-font);
    transition: transform 160ms ease, opacity 160ms ease, background-color 160ms ease, color 160ms ease;
}

.inv-postit-stack__control:hover,
.inv-postit-stack__control:focus-visible {
    transform: translateY(-2px);
}

.inv-postit-stack__control:active {
    transform: translateY(0);
}

.inv-section[data-section-theme="light"] .inv-postit-stack__control {
    background: var(--inv-button-light-bg);
    color: var(--inv-button-light-text);
    border: var(--inv-button-light-border-width) solid var(--inv-button-light-border);
}

.inv-section[data-section-theme="dark"] .inv-postit-stack__control {
    background: var(--inv-button-dark-bg);
    color: var(--inv-button-dark-text);
    border: var(--inv-button-dark-border-width) solid var(--inv-button-dark-border);
}

.inv-postit-stack__counter {
    min-width: 76px;
    text-align: center;
    font-family: var(--inv-label-font);
    font-size: 11px;
    line-height: 1.2;
    letter-spacing: .1em;
    text-transform: uppercase;
    opacity: .72;
}

.inv-postit-stack__counter--single {
    min-width: 0;
}

@media (max-width: 720px) {
    .inv-postit-stack {
        margin-top: 30px;
    }

    .inv-postit-stack__stage {
        height: clamp(350px, 108vw, 430px);
    }

    .inv-postit-card {
        width: min(84vw, 360px);
        height: clamp(330px, 92vw, 405px);
        padding: 38px 28px;
    }

    .inv-postit-card__texture {
        background-position: var(--inv-postit-texture-position-mobile, var(--inv-postit-texture-position-desktop, center center));
        background-size: var(--inv-postit-texture-size-mobile, var(--inv-postit-texture-size-desktop, cover));
        background-repeat: var(--inv-postit-texture-repeat-mobile, var(--inv-postit-texture-repeat-desktop, no-repeat));
        transform: scale(var(--inv-postit-texture-scale-mobile, var(--inv-postit-texture-scale-desktop, 1)));
        transform-origin: var(--inv-postit-texture-origin-mobile, var(--inv-postit-texture-origin-desktop, center center));
    }

    .inv-postit-card[data-stack-position="1"] {
        transform: translate(calc(-50% + 7px), calc(-50% + 10px)) rotate(calc(var(--inv-postit-base-rotation, 0deg) + .9deg)) scale(.982);
    }

    .inv-postit-card[data-stack-position="2"] {
        transform: translate(calc(-50% - 8px), calc(-50% + 18px)) rotate(calc(var(--inv-postit-base-rotation, 0deg) - 1deg)) scale(.962);
    }

    .inv-postit-card[data-stack-position="3"] {
        transform: translate(calc(-50% + 4px), calc(-50% + 25px)) rotate(var(--inv-postit-base-rotation, 0deg)) scale(.942);
    }

    .inv-postit-card__icon {
        width: min(var(--inv-postit-icon-width-mobile, var(--inv-postit-icon-width-desktop, 72px)), 72%);
        max-height: 30%;
    }

    .inv-postit-card__text {
        max-width: 27ch;
        font-size: 16px;
        line-height: 1.6;
    }

    .inv-postit-stack__nav {
        margin-top: 12px;
    }
}

@media (prefers-reduced-motion: reduce) {
    .inv-postit-card,
    .inv-postit-stack__control {
        transition-duration: 1ms !important;
    }
}

/* Proposal story */
.inv-proposal {
    padding: clamp(84px, 9vw, 136px) 0;
}

.inv-proposal__title {
    margin-bottom: clamp(46px, 6vw, 82px);
}

.inv-proposal__layout {
    width: min(100%, 1080px);
    margin: 0 auto;
}

.inv-proposal__layout--editorialsplit,
.inv-proposal__layout--editorialsplitscroll {
    display: grid;
    grid-template-columns: minmax(0, 1.05fr) minmax(280px, .95fr);
    align-items: center;
    gap: clamp(38px, 6vw, 86px);
}

.inv-proposal__layout--photocentered,
.inv-proposal__layout--phototop,
.inv-proposal__layout--texttop {
    width: min(100%, 820px);
    display: flex;
    flex-direction: column;
    gap: clamp(30px, 4vw, 48px);
}

.inv-proposal__layout--photocentered {
    align-items: center;
}

.inv-proposal__layout--photocentered .inv-proposal__media {
    width: min(100%, 720px);
    margin: 0 auto;
}

.inv-proposal__layout--photocentered .inv-proposal__copy {
    width: min(100%, 720px);
    margin: 0 auto;
    text-align: center;
}

.inv-proposal__layout--phototop .inv-proposal__media,
.inv-proposal__layout--texttop .inv-proposal__media {
    width: min(100%, 760px);
    margin: 0 auto;
}

.inv-proposal__layout--phototop .inv-proposal__copy,
.inv-proposal__layout--texttop .inv-proposal__copy {
    width: min(100%, 760px);
    margin: 0 auto;
}

.inv-proposal__layout--text-only,
.inv-proposal__layout--image-only {
    display: block;
    width: min(100%, 760px);
}

.inv-proposal__media {
    position: relative;
    min-width: 0;
}

.inv-proposal__image {
    width: 100%;
    aspect-ratio: 4 / 5;
    object-fit: cover;
    object-position: center;
}

.inv-proposal__layout--photocentered .inv-proposal__image,
.inv-proposal__layout--phototop .inv-proposal__image,
.inv-proposal__layout--texttop .inv-proposal__image,
.inv-proposal__layout--image-only .inv-proposal__image {
    height: auto;
    max-height: min(76vh, 820px);
    aspect-ratio: auto;
    object-fit: contain;
}

.inv-proposal__layout--image-only .inv-proposal__media {
    width: min(100%, 720px);
    margin: 0 auto;
}

.inv-proposal__copy {
    min-width: 0;
}

.inv-proposal__layout--editorialsplitscroll .inv-proposal__copy {
    max-height: 430px;
    overflow-y: auto;
    overscroll-behavior: contain;
    padding-right: 14px;
}

.inv-proposal__text {
    margin: 0;
    font-family: var(--inv-body-font);
    font-size: clamp(16px, 1.35vw, 20px);
    line-height: 1.9;
}

.inv-proposal__text + .inv-proposal__text {
    margin-top: 1.15em;
}

.inv-treatment-dark .inv-layout-surface-card .inv-proposal__text,
.inv-treatment-ocean .inv-layout-surface-card .inv-proposal__text {
    color: var(--inv-text);
}

@media (max-width: 720px) {
    .inv-proposal {
        padding: 82px 0 92px;
    }

    .inv-proposal__title {
        margin-bottom: 42px;
    }

    .inv-proposal__layout--editorialsplit,
    .inv-proposal__layout--editorialsplitscroll {
        grid-template-columns: 1fr;
        gap: 34px;
    }

    .inv-proposal__layout--photocentered,
    .inv-proposal__layout--phototop,
    .inv-proposal__layout--texttop {
        gap: 30px;
    }

    .inv-proposal__media {
        width: min(100%, 520px);
        margin: 0 auto;
    }

    .inv-proposal__layout--editorialsplitscroll .inv-proposal__copy {
        max-height: 320px;
        padding-right: 10px;
    }

    .inv-proposal__text {
        font-size: 16px;
        line-height: 1.8;
    }
}

/* RSVP.EnvelopeEditorial */
.inv-rsvp {
    padding: clamp(72px, 8vw, 118px) 0 clamp(64px, 7vw, 96px);
}

.inv-rsvp__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-rsvp__envelope-wrap {
    position: relative;
    width: min(100%, 840px);
    min-height: 430px;
    display: grid;
    place-items: center;
}

.inv-rsvp__envelope {
    width: 100%;
    height: auto;
}

.inv-rsvp__envelope-wrap--fallback {
    min-height: 410px;
    background: var(--inv-bg-light);
    color: var(--inv-text);
    box-shadow: 0 18px 48px rgba(0,0,0,.12);
}

.inv-rsvp__content {
    position: absolute;
    inset: 13% 18% 12%;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    color: var(--inv-text);
    text-align: center;
    pointer-events: none;
}

.inv-rsvp__content .inv-rsvp__button {
    pointer-events: auto;
}

.inv-rsvp__title {
    margin: 0;
    font-family: var(--inv-display-font);
    font-size: clamp(55px, 6vw, 94px);
    font-weight: 400;
    line-height: .86;
}

.inv-rsvp__intro {
    max-width: 520px;
    margin: 22px auto 0;
    font-size: clamp(14px, 1.2vw, 18px);
    line-height: 1.5;
}

.inv-rsvp__button { margin-top: clamp(24px, 4vw, 42px); }

.inv-rsvp__children-policy {
    margin: clamp(24px, 3vw, 34px) 0 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(17px, 1.7vw, 24px);
    font-weight: 400;
    letter-spacing: .22em;
    line-height: 1.45;
    text-align: center;
    text-transform: uppercase;
}

.inv-rsvp__deadline {
    margin: 32px 0 0;
    font-family: var(--inv-label-font);
    font-size: clamp(11px, 1.1vw, 16px);
    font-weight: 600;
    letter-spacing: .34em;
    text-align: center;
}

.inv-rsvp__deadline-prefix,
.inv-rsvp__deadline-date {
    display: block;
}

.inv-rsvp__deadline-date {
    width: fit-content;
    margin: 8px auto 0;
    font-weight: 400;
    letter-spacing: .16em;
    border-bottom: 1px solid currentColor;
}

/* RSVP inline: personalized confirmation stays inside the invitation flow. */
.inv-rsvp__header {
    width: min(100%, 820px);
    margin: 0 auto;
    text-align: center;
}

.inv-rsvp-ticket-summary {
    width: min(100%, 620px);
    margin: clamp(32px, 4vw, 48px) auto 0;
    text-align: center;
    color: currentColor;
}

.inv-rsvp-ticket-summary__label {
    font: 600 clamp(12px, 1.15vw, 16px)/1.4 var(--inv-label-font);
    letter-spacing: .28em;
}

.inv-rsvp-ticket-summary__counts {
    display: grid;
    gap: 3px;
    margin-top: 10px;
}

.inv-rsvp-ticket-summary__line {
    color: inherit;
    font: 600 clamp(24px, 2.5vw, 34px)/1.15 var(--inv-heading-font);
}

.inv-rsvp-ticket-notice {
    width: min(100%, 620px);
    margin: 14px auto 0;
    color: currentColor;
    font: 600 clamp(10px, .95vw, 13px)/1.5 var(--inv-label-font);
    letter-spacing: .18em;
    text-align: center;
    text-transform: uppercase;
}

.inv-rsvp-form {
    /* Avoid browser scroll anchoring while RSVP dependent fields appear/disappear. */
    overflow-anchor: none;
    width: min(100%, 920px);
    margin: clamp(42px, 6vw, 72px) auto 0;
    padding: clamp(18px, 3.5vw, 38px) clamp(8px, 3vw, 30px) clamp(20px, 3.5vw, 38px);
    color: inherit;
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
}

.inv-rsvp-form__status {
    min-height: 22px;
    margin: 0 auto 18px;
    max-width: 680px;
    text-align: center;
    font: 500 12px/1.5 var(--inv-body-font);
}

.inv-rsvp-form__body {
    display: grid;
    gap: 26px;
}

.inv-rsvp-form__footer {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 28px;
}

/* RSVP editorial inline layout -------------------------------------------------
   The public RSVP should read like invitation stationery, not an admin form.
   The modal keeps the denser boxed treatment above; these rules only target the
   inline invitation flow. */
.inv-rsvp-form--editorial .inv-rsvp-form__status {
    margin-bottom: clamp(18px, 3vw, 30px);
    color: inherit;
    opacity: .78;
}

.inv-rsvp-form--editorial .inv-rsvp-form__body {
    width: min(100%, 760px);
    margin: 0 auto;
    gap: 0;
}

.inv-rsvp-form--editorial .inv-rsvp-event {
    position: relative;
    padding: 0;
    border: 0;
    background: transparent;
}

.inv-rsvp-form--editorial .inv-rsvp-event + .inv-rsvp-event {
    margin-top: clamp(58px, 8vw, 88px);
    padding-top: clamp(58px, 8vw, 88px);
}

.inv-rsvp-form--editorial .inv-rsvp-event + .inv-rsvp-event::before {
    content: "";
    position: absolute;
    top: 0;
    left: 50%;
    width: clamp(86px, 13vw, 132px);
    height: 1px;
    background: currentColor;
    opacity: .28;
    transform: translateX(-50%);
}

.inv-rsvp-form--editorial .inv-rsvp-event + .inv-rsvp-event::after {
    content: "";
    position: absolute;
    top: -4px;
    left: 50%;
    width: 9px;
    height: 9px;
    border: 1px solid currentColor;
    background: var(--inv-bg-dark, transparent);
    transform: translateX(-50%) rotate(45deg);
}

.inv-treatment-light .inv-rsvp-form--editorial .inv-rsvp-event + .inv-rsvp-event::after,
.inv-rsvp-form--editorial.inv-layout-surface-card--light .inv-rsvp-event + .inv-rsvp-event::after,
.inv-rsvp-form--editorial.inv-layout-surface-card--paper .inv-rsvp-event + .inv-rsvp-event::after {
    background: var(--inv-bg-light, #f7f4ed);
}

.inv-rsvp-form--editorial .inv-rsvp-event__heading {
    margin: 0 auto clamp(30px, 4vw, 44px);
    text-align: center;
}

.inv-rsvp-form--editorial .inv-rsvp-event__heading .inv-events-classic__event-icon {
    width: min(var(--inv-classic-event-icon-desktop-size, 84px), 112px);
    height: min(var(--inv-classic-event-icon-desktop-size, 84px), 112px);
    margin-bottom: clamp(16px, 2vw, 22px);
}

.inv-rsvp-form--editorial .inv-rsvp-event__title {
    font-size: clamp(30px, 4vw, 46px);
    line-height: 1.12;
}

.inv-rsvp-form--editorial .inv-rsvp-event__meta {
    margin-top: 13px;
    gap: 4px;
}

.inv-rsvp-form--editorial .inv-rsvp-event__weekday,
.inv-rsvp-form--editorial .inv-rsvp-event__date,
.inv-rsvp-form--editorial .inv-rsvp-event__time {
    font-size: clamp(12px, 1.15vw, 15px);
}

.inv-rsvp-form--editorial .inv-rsvp-event__place {
    max-width: 560px;
    margin: 7px auto 0 !important;
    font-size: clamp(10px, 1vw, 13px);
    line-height: 1.6;
}

.inv-rsvp-form--editorial .inv-rsvp-person {
    width: min(100%, 680px);
    margin: 0 auto;
    padding: clamp(26px, 4vw, 38px) 0;
    border-top: 0;
    text-align: center;
}

.inv-rsvp-form--editorial .inv-rsvp-person + .inv-rsvp-person {
    border-top: 1px solid rgba(127,127,127,.22);
}

@supports (color: color-mix(in srgb, white 20%, transparent)) {
    .inv-rsvp-form--editorial .inv-rsvp-person + .inv-rsvp-person {
        border-top-color: color-mix(in srgb, currentColor 18%, transparent);
    }
}

.inv-rsvp-form--editorial .inv-rsvp-person__top {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    justify-items: center;
    gap: 12px;
}

.inv-rsvp-form--editorial .inv-rsvp-person__name,
.inv-rsvp-form--editorial .inv-rsvp-person__name-input {
    width: min(100%, 460px);
    font-family: var(--inv-body-font);
    font-size: clamp(16px, 1.7vw, 21px);
    line-height: 1.45;
    text-align: center;
}

.inv-rsvp-form--editorial .inv-rsvp-person__name {
    font-weight: 500;
}

.inv-rsvp-form--editorial .inv-rsvp-person__name-input {
    padding-inline: 8px;
}

.inv-rsvp-form--editorial .inv-rsvp-person__name-input::placeholder,
.inv-rsvp-form--editorial .inv-rsvp-field__control::placeholder {
    color: currentColor;
    opacity: .48;
}

.inv-rsvp-form--editorial .inv-rsvp-person__attendance-question {
    margin-top: 9px;
    font: 400 clamp(17px, 1.8vw, 22px)/1.35 var(--inv-heading-font);
    letter-spacing: .02em;
}

.inv-rsvp-form--editorial .inv-rsvp-person__attendance {
    justify-content: center;
    gap: 10px 12px;
    margin-top: 4px;
}

.inv-rsvp-form--editorial .inv-rsvp-choice {
    min-height: 38px;
    padding: 9px 16px 8px;
    border: 1px solid currentColor;
    border-radius: 999px;
    gap: 8px;
    opacity: .9;
    font-size: clamp(11px, 1vw, 13px);
    line-height: 1.25;
    transition: background-color .18s ease, color .18s ease, opacity .18s ease, transform .18s ease;
}

.inv-rsvp-form--editorial .inv-rsvp-choice:hover,
.inv-rsvp-form--editorial .inv-rsvp-choice:focus-within {
    opacity: 1;
    transform: translateY(-1px);
}

.inv-rsvp-form--editorial .inv-rsvp-choice__mark {
    width: 13px;
    height: 13px;
}

.inv-rsvp-form--editorial .inv-rsvp-choice__mark::after {
    inset: 3px;
}

.inv-rsvp-form--editorial .inv-rsvp-choice.is-selected {
    background: var(--section-btn-primary-bg, var(--inv-button-bg, #3f4852));
    border-color: var(--section-btn-primary-border, var(--inv-button-bg, #3f4852));
    color: var(--section-btn-primary-text, var(--inv-button-text, #fff));
    opacity: 1;
    transform: none;
    box-shadow: 0 0 0 1px color-mix(in srgb, currentColor 8%, transparent);
}

.inv-rsvp-form--editorial .inv-rsvp-choice.is-selected .inv-rsvp-choice__mark {
    opacity: 1;
    border-color: currentColor;
}

.inv-rsvp-form--editorial .inv-rsvp-choice.is-selected .inv-rsvp-choice__mark::after {
    transform: scale(1);
}

@supports selector(label:has(input:checked)) {
    .inv-rsvp-form--editorial .inv-rsvp-choice:has(input:checked) {
        background: var(--section-btn-primary-bg, var(--inv-button-bg, #3f4852));
        border-color: var(--section-btn-primary-border, var(--inv-button-bg, #3f4852));
        color: var(--section-btn-primary-text, var(--inv-button-text, #fff));
        opacity: 1;
        transform: none;
    }
}

.inv-rsvp-form--editorial .inv-rsvp-person__details {
    width: min(100%, 620px);
    margin: clamp(24px, 3.5vw, 34px) auto 0;
    padding: 0;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 24px 34px;
    background: transparent;
    text-align: left;
}

.inv-rsvp-form--editorial .inv-rsvp-field {
    gap: 8px;
}

.inv-rsvp-form--editorial .inv-rsvp-field__label {
    opacity: .82;
    font-size: clamp(10px, 1vw, 13px);
    line-height: 1.45;
}

.inv-rsvp-form--editorial .inv-rsvp-field__control,
.inv-rsvp-form--editorial .inv-rsvp-person__name-input,
.inv-rsvp-form--editorial .inv-rsvp-waitlist__input {
    border-bottom-color: currentColor;
    opacity: .92;
}

.inv-rsvp-form--editorial select.inv-rsvp-field__control option {
    background: var(--inv-bg-light, #f7f4ed);
    color: var(--inv-text, #191919);
}

.inv-rsvp-form--editorial .inv-rsvp-inline-choices {
    gap: 8px 10px;
}

.inv-rsvp-form--editorial .inv-rsvp-field--choice .inv-rsvp-choice {
    min-height: 34px;
    padding: 7px 13px 6px;
}

.inv-rsvp-form--editorial .inv-rsvp-waitlist {
    position: relative;
    width: min(100%, 680px);
    margin: clamp(62px, 8vw, 92px) auto 0;
    padding: clamp(58px, 7vw, 78px) 0 0;
    border-top: 0;
    text-align: center;
}

.inv-rsvp-form--editorial .inv-rsvp-waitlist::before {
    content: "";
    position: absolute;
    top: 0;
    left: 50%;
    width: clamp(86px, 13vw, 132px);
    height: 1px;
    background: currentColor;
    opacity: .28;
    transform: translateX(-50%);
}

.inv-rsvp-form--editorial .inv-rsvp-waitlist::after {
    content: "";
    position: absolute;
    top: -4px;
    left: 50%;
    width: 9px;
    height: 9px;
    border: 1px solid currentColor;
    background: var(--inv-bg-dark, transparent);
    transform: translateX(-50%) rotate(45deg);
}

.inv-treatment-light .inv-rsvp-form--editorial .inv-rsvp-waitlist::after,
.inv-rsvp-form--editorial.inv-layout-surface-card--light .inv-rsvp-waitlist::after,
.inv-rsvp-form--editorial.inv-layout-surface-card--paper .inv-rsvp-waitlist::after {
    background: var(--inv-bg-light, #f7f4ed);
}

.inv-rsvp-form--editorial .inv-rsvp-waitlist__title {
    margin-bottom: 11px;
    font-size: clamp(28px, 3.4vw, 38px);
}

.inv-rsvp-form--editorial .inv-rsvp-waitlist__text {
    max-width: 560px;
    opacity: .84;
}

.inv-rsvp-form--editorial .inv-rsvp-waitlist__row {
    gap: 16px;
    margin-top: 18px;
}

.inv-rsvp-form--editorial .inv-rsvp-waitlist__input {
    width: 58px;
    max-width: 58px;
    padding-inline: 4px;
    font-size: 16px;
}

.inv-rsvp-form--editorial .inv-rsvp-form__footer {
    margin-top: clamp(52px, 7vw, 78px);
    gap: 14px;
}

.inv-rsvp-form--editorial .inv-rsvp-form__save {
    background: transparent;
    color: currentColor;
    border-color: currentColor;
}

.inv-rsvp-form--editorial .inv-rsvp-form__save:hover,
.inv-rsvp-form--editorial .inv-rsvp-form__save:focus-visible {
    background: color-mix(in srgb, currentColor 9%, transparent);
    color: currentColor;
    border-color: currentColor;
}

@supports not (color: color-mix(in srgb, white 20%, transparent)) {
    .inv-rsvp-form--editorial .inv-rsvp-form__save:hover,
    .inv-rsvp-form--editorial .inv-rsvp-form__save:focus-visible {
        background: rgba(127,127,127,.12);
    }
}

/* RSVP explicit-save feedback: keep autosave silent, but acknowledge a manual save. */
.inv-rsvp-form__save,
.inv-rsvp-modal__save {
    transition: opacity .18s ease, transform .18s ease, box-shadow .22s ease;
}

.inv-rsvp-form__save.is-saving,
.inv-rsvp-modal__save.is-saving {
    cursor: wait;
    opacity: .78;
}

.inv-rsvp-form__save.is-saved,
.inv-rsvp-modal__save.is-saved {
    gap: 9px;
    box-shadow: 0 0 0 4px rgba(255,255,255,.34), 0 10px 26px rgba(0,0,0,.14);
    transform: translateY(-1px) scale(1.015);
}

.inv-rsvp-form__save.is-saved::before,
.inv-rsvp-modal__save.is-saved::before {
    content: "✓";
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    flex: 0 0 18px;
    border: 1px solid currentColor;
    border-radius: 50%;
    font-family: Arial, sans-serif;
    font-size: 12px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: 0;
}

/* Manual RSVP receipt: a clear acknowledgement without adding another form card. */
.inv-rsvp-save-receipt {
    width: min(100%, 470px);
    margin: 20px auto 0;
    padding: 13px 18px;
    border: 1px solid color-mix(in srgb, currentColor 42%, transparent);
    border-radius: 999px;
    background: color-mix(in srgb, currentColor 8%, transparent);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    color: inherit;
    text-align: left;
    opacity: 0;
    transform: translateY(6px) scale(.985);
    transition: opacity .24s ease, transform .24s ease;
}

.inv-rsvp-save-receipt[hidden] {
    display: none !important;
}

.inv-rsvp-save-receipt.is-visible {
    opacity: 1;
    transform: translateY(0) scale(1);
}

.inv-rsvp-save-receipt__icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    flex: 0 0 30px;
    border: 1px solid currentColor;
    border-radius: 50%;
    font: 700 16px/1 Arial, sans-serif;
}

.inv-rsvp-save-receipt__copy {
    display: grid;
    gap: 2px;
}

.inv-rsvp-save-receipt__title {
    font-family: var(--inv-heading-font);
    font-size: 16px;
    font-weight: 500;
    letter-spacing: .04em;
}

.inv-rsvp-save-receipt__text {
    font-family: var(--inv-body-font);
    font-size: 12px;
    line-height: 1.5;
    opacity: .82;
}

@supports not (color: color-mix(in srgb, white 20%, transparent)) {
    .inv-rsvp-save-receipt {
        border-color: rgba(127,127,127,.42);
        background: rgba(127,127,127,.10);
    }
}

@media (max-width: 720px) {
    .inv-rsvp-save-receipt {
        width: min(100%, 360px);
        margin-top: 18px;
        padding: 12px 14px;
        border-radius: 20px;
        gap: 10px;
    }
    .inv-rsvp-save-receipt__title { font-size: 15px; }
    .inv-rsvp-save-receipt__text { font-size: 12px; }
}

.inv-rsvp-calendar {
    position: relative;
    display: inline-flex;
}

.inv-rsvp-calendar[hidden] { display: none !important; }

.inv-rsvp-calendar__menu {
    position: absolute;
    left: 50%;
    bottom: calc(100% + 10px);
    z-index: 20;
    width: max-content;
    min-width: 180px;
    padding: 8px;
    border: 1px solid rgba(25,25,25,.14);
    border-radius: 12px;
    background: rgba(251, 249, 244, .99);
    box-shadow: 0 14px 34px rgba(0,0,0,.16);
    transform: translateX(-50%);
}

.inv-rsvp-calendar__menu[hidden] { display: none !important; }

.inv-rsvp-calendar__item {
    display: block;
    width: 100%;
    padding: 10px 14px;
    border: 0;
    border-radius: 8px;
    background: transparent;
    color: var(--inv-text);
    font: 500 13px/1.35 var(--inv-body-font);
    text-align: left;
    cursor: pointer;
}

.inv-rsvp-calendar__item:hover,
.inv-rsvp-calendar__item:focus-visible {
    background: rgba(63, 72, 82, .08);
    outline: none;
}

.inv-rsvp-form.is-busy { cursor: wait; }

[data-rsvp-container].is-readonly .inv-rsvp-choice,
[data-rsvp-container].is-readonly .inv-rsvp-person__name-input,
[data-rsvp-container].is-readonly .inv-rsvp-field__control {
    cursor: default;
}

[data-rsvp-container].is-readonly input:disabled,
[data-rsvp-container].is-readonly select:disabled,
[data-rsvp-container].is-readonly textarea:disabled {
    opacity: 1;
    color: inherit;
    -webkit-text-fill-color: currentColor;
}

[data-rsvp-container].is-readonly .inv-rsvp-choice input:disabled + .inv-rsvp-choice__mark {
    opacity: 1;
}

.inv-rsvp-form__closed {
    max-width: 650px;
    margin: 0 auto;
}

/* Hotels */
.inv-hotels,
.inv-gifts {
    padding: clamp(88px, 10vw, 146px) 0;
}

.inv-hotels__grid,
.inv-gifts__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 330px), 1fr));
    gap: clamp(24px, 4vw, 46px);
    margin-top: clamp(50px, 6vw, 76px);
}

.inv-hotel-card,
.inv-gift-card {
    min-height: 100%;
    padding: clamp(36px, 4vw, 54px);
    background: rgba(255,255,255,.30);
    border: 1px solid rgba(25,25,25,.13);
    border-radius: var(--inv-card-radius);
    text-align: center;
}

/* Hotel cards use a compact reading order. The title/address keep aligned
   bands, then contact/booking data flows naturally, followed by the hotel
   notes and finally the actions. Avoid a flexible 1fr content row here: it
   created large empty gaps in cards with fewer notes. */
.inv-hotels__grid {
    /* Keep every card in the row at the same height so the CTA row can sit
       on a common baseline. */
    align-items: stretch;
}

.inv-hotel-card {
    display: grid;
    grid-template-areas:
        "hotel-title"
        "hotel-address"
        "hotel-details"
        "hotel-deadline"
        "hotel-notes"
        "hotel-actions";
    /* Notes absorb only the remaining vertical space. This keeps title,
       address and contact data compact while pinning the buttons to the
       bottom edge of every card. */
    grid-template-rows: auto auto auto auto 1fr auto;
    align-content: stretch;
}

.inv-hotel-card__title { grid-area: hotel-title; }
.inv-hotel-card__address { grid-area: hotel-address; }
.inv-hotel-card__details { grid-area: hotel-details; }
.inv-hotel-card__deadline { grid-area: hotel-deadline; }
.inv-hotel-card__notes { grid-area: hotel-notes; }
.inv-hotel-card > .inv-card-actions { grid-area: hotel-actions; }

.inv-gift-card {
    box-shadow: -12px 14px 28px -14px rgba(31, 27, 24, .22);
}

.inv-treatment-dark .inv-hotel-card,
.inv-treatment-dark .inv-gift-card {
    border-color: rgba(255,255,255,.18);
    background: rgba(255,255,255,.04);
}

.inv-hotel-card__title,
.inv-gift-card__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(28px, 2.7vw, 42px);
    font-weight: 400;
}

.inv-hotel-card__address,
.inv-hotel-card__notes,
.inv-hotel-card__deadline,
.inv-hotel-card__details,
.inv-gift-card__note,
.inv-gifts__intro {
    margin: 20px auto 0;
    max-width: 700px;
    font-size: clamp(14px, 1.2vw, 17px);
    line-height: 1.65;
}

.inv-hotel-card__notes { white-space: pre-line; }
.inv-hotel-card__deadline { font-weight: 600; }
.inv-hotel-card__details {
    opacity: .78;
}

/* Tighter vertical rhythm for hotel cards. Contact/booking data should feel
   connected to the address, while descriptive notes sit immediately above
   the CTA row. */
.inv-hotel-card__details {
    margin-top: 14px;
}
.inv-hotel-card__deadline {
    margin-top: 12px;
}
.inv-hotel-card__notes {
    margin-top: 16px;
    align-self: start;
}
.inv-hotel-card > .inv-card-actions {
    margin-top: 20px;
    align-self: end;
}
.inv-hotel-card__detail {
    margin: 0;
    line-height: 1.55;
}
.inv-hotel-card__detail + .inv-hotel-card__detail {
    margin-top: 3px;
}
.inv-hotel-card__detail-label {
    font-weight: 500;
}
.inv-hotel-card__detail-link,
.inv-hotel-card__detail-link:visited,
.inv-hotel-card__detail-link:hover,
.inv-hotel-card__detail-link:focus-visible {
    color: inherit;
    font: inherit;
    text-decoration: none;
}
.inv-hotel-card__detail-link:hover,
.inv-hotel-card__detail-link:focus-visible {
    opacity: .82;
    text-decoration: underline;
    text-underline-offset: .14em;
}

.inv-card-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 12px;
    margin-top: 28px;
}

.inv-gifts__intro {
    margin-top: 30px;
    text-align: center;
    font-size: clamp(16px, 1.35vw, 20px);
}

.inv-gift-option__icon {
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    margin: 0 auto 22px;
}

.inv-gift-option__icon--card-footer {
    margin: 24px auto 0;
}

.inv-gift-option__icon-artwork {
    display: block;
    width: min(100%, var(--inv-gift-cash-icon-width, 110px));
    max-width: 100%;
    height: auto;
}

.inv-gift-option__icon svg.inv-gift-option__icon-artwork {
    overflow: visible;
}

.inv-treatment-dark .inv-gift-option__icon,
.inv-treatment-ocean .inv-gift-option__icon {
    color: var(--inv-text-inverse);
}

.inv-gifts-editorial__column > .inv-gift-option__icon {
    justify-content: flex-start;
    margin: 0 0 24px;
}

.inv-detail-line {
    margin: 20px 0 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.inv-detail-line__label {
    font-family: var(--inv-label-font);
    font-size: 10px;
    font-weight: 600;
    letter-spacing: .22em;
    opacity: .58;
    text-transform: uppercase;
}

.inv-detail-line__value {
    font-size: clamp(15px, 1.25vw, 18px);
    line-height: 1.45;
    overflow-wrap: anywhere;
}

@media (max-width: 720px) {
    .inv-events__card.inv-has-paper-surface::before {
        background-image: var(--inv-paper-surface-mobile, var(--inv-paper-surface));
    }
    .inv-editorial-title { font-size: clamp(58px, 19vw, 88px); }
    .inv-events,
    .inv-dresscode,
    .inv-info,
    .inv-hotels,
    .inv-gifts { padding: 82px 0 92px; }

    .inv-event-row {
        grid-template-columns: 1fr;
        gap: 12px;
        padding: 26px 0;
        text-align: center;
    }

    .inv-event-row__time { text-align: center; }
    .inv-event-row__title {
        font-size: var(--inv-event-mobile-title-size, var(--inv-event-title-size, clamp(16px, 5vw, 21px)));
        letter-spacing: .14em;
    }
    .inv-event-location-group--border {
        margin-top: 34px;
        padding-top: 34px;
    }
    .inv-event-location--header {
        display: block;
        padding-bottom: 24px;
        text-align: center;
    }
    .inv-event-location__details {
        width: min(100%, 700px);
        margin: 0 auto;
    }
    .inv-event-location__venue {
        font-size: clamp(19px, 6vw, 25px);
    }
    [data-section="events"] .inv-event-location__venue {
        font-size: var(--inv-event-mobile-title-size, var(--inv-event-title-size, clamp(19px, 6vw, 25px)));
    }
    .inv-event-location__address {
        font-size: 14px;
    }

    .inv-dresscode__grid {
        grid-template-columns: 1fr;
        gap: 54px;
    }

    .inv-dresscode__inline-images {
        width: var(--inv-dresscode-image-mobile-width, 100%);
        flex-direction: column;
        gap: 20px;
    }

    .inv-dresscode__inline-images--multiple .inv-dresscode__inline-image {
        width: 100%;
    }

    .inv-dresscode-card__inline-image-holder {
        width: var(--inv-dresscode-card-image-mobile-width, 100%);
    }

    .inv-dresscode-card__action {
        margin-top: 0;
        padding-top: 28px;
    }

    .inv-dresscode-card + .inv-dresscode-card::before {
        left: 15%;
        right: 15%;
        top: -27px;
        bottom: auto;
        width: auto;
        height: 1px;
    }


    .inv-rsvp { padding: 64px 0 74px; }
    .inv-rsvp__title { font-size: clamp(48px, 16vw, 72px); }
    .inv-rsvp__intro { display: block; margin-top: 18px; font-size: 14px; }
    .inv-rsvp__children-policy { margin-top: 20px; font-size: 15px; letter-spacing: .16em; }
    .inv-rsvp__deadline { margin-top: 22px; font-size: 9px; letter-spacing: .20em; }
    .inv-rsvp__deadline-date { margin-top: 7px; }
    .inv-rsvp-form { margin-top: 34px; padding: 28px 16px 24px; }

    .inv-hotels__grid,
    .inv-gifts__grid { grid-template-columns: 1fr; }
}

.inv-gifts__grid--paper-cards .inv-gift-card {
    border: 0;
    background: transparent;
    box-shadow: -12px 14px 28px -14px rgba(31, 27, 24, .22);
}

.inv-gifts__grid--paper-cards .inv-gift-card.inv-has-paper-surface::before {
    /* Gift artwork can contain residual light margins at the sides. Render the
       paper slightly wider than the card and let the card clip it, so the
       visible surface reaches the full card edge without distorting content. */
    inset: -3% -10%;
    opacity: 1;
    background-size: cover;
    background-position: center;
}

.inv-gifts__grid--paper-art {
    position: relative;
    isolation: isolate;
    min-height: clamp(480px, 44vw, 660px);
    align-items: stretch;
    padding: clamp(50px, 7vw, 92px) clamp(48px, 9vw, 130px);
    background-image: var(--inv-gifts-paper);
    background-size: 100% 100%;
    background-position: center;
    background-repeat: no-repeat;
}

.inv-gifts__grid--paper-art .inv-gift-card {
    border: 0;
    background: transparent;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

@media (max-width: 720px) {
    .inv-gifts__grid--paper-art {
        min-height: 0;
        padding: 0;
        background-image: none;
    }
    .inv-gifts__grid--paper-art .inv-gift-card {
        border: 1px solid rgba(25,25,25,.13);
        background: rgba(255,255,255,.30);
    }
}


/* Gifts: reusable editorial split variant. One shared stationery surface replaces
   individual cards; structure and Treatment remain independent Studio controls. */
.inv-gifts-editorial__panel {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: clamp(48px, 6vw, 72px);
    padding: clamp(48px, 6vw, 76px) clamp(34px, 6vw, 78px);
    border-top: 1px solid rgba(25, 25, 25, .15);
    border-bottom: 1px solid rgba(25, 25, 25, .15);
    background: rgba(255, 255, 255, .12);
    text-align: left;
}

.inv-treatment-dark .inv-gifts-editorial__panel,
.inv-treatment-ocean .inv-gifts-editorial__panel {
    border-color: rgba(255, 255, 255, .20);
    background: rgba(255, 255, 255, .025);
}

.inv-gifts-editorial__panel.inv-has-paper-surface {
    border: 0;
    background: transparent;
    box-shadow: 0 16px 46px rgba(13, 25, 27, .07);
}

.inv-gifts-editorial__panel.inv-has-paper-surface::before {
    inset: -2%;
    opacity: 1;
    background-size: cover;
    background-position: center;
}

.inv-gifts-editorial__column {
    position: relative;
    z-index: 1;
    min-width: 0;
    padding: 0 clamp(22px, 4vw, 54px);
}

.inv-gifts-editorial__column:nth-child(even) {
    border-left: 1px solid rgba(25, 25, 25, .15);
}

.inv-treatment-dark .inv-gifts-editorial__column:nth-child(even),
.inv-treatment-ocean .inv-gifts-editorial__column:nth-child(even) {
    border-left-color: rgba(255, 255, 255, .20);
}

.inv-gifts-editorial__column:nth-child(n+3) {
    margin-top: 44px;
    padding-top: 44px;
    border-top: 1px solid rgba(25, 25, 25, .15);
}

.inv-gifts-editorial__title {
    margin: 0 0 clamp(28px, 3.4vw, 42px);
    font-family: var(--inv-heading-font);
    font-size: clamp(30px, 2.8vw, 42px);
    font-weight: 400;
    line-height: 1.08;
}

.inv-gifts-editorial__column .inv-detail-line {
    margin: 0 0 24px;
    gap: 7px;
}

.inv-gifts-editorial__column .inv-detail-line__label {
    font-size: 10px;
    letter-spacing: .20em;
    opacity: .58;
}

.inv-gifts-editorial__column .inv-detail-line__value {
    font-size: clamp(16px, 1.35vw, 20px);
    line-height: 1.5;
}

.inv-gifts-editorial__note {
    margin: 0 0 20px;
    max-width: 520px;
    font-size: clamp(15px, 1.25vw, 18px);
    line-height: 1.65;
}

.inv-gifts-editorial__action.inv-button {
    min-height: 0;
    margin-top: 6px;
    padding: 0 0 6px;
    border: 0;
    border-bottom: 1px solid currentColor;
    border-radius: 0;
    background: transparent;
    color: inherit;
    font-size: 10px;
    letter-spacing: .19em;
}

.inv-gifts-editorial__action.inv-button:hover,
.inv-gifts-editorial__action.inv-button:focus-visible {
    color: inherit;
    opacity: .65;
    transform: none;
}

@media (max-width: 720px) {
    .inv-gifts-editorial__panel {
        grid-template-columns: 1fr;
        padding: 38px 26px;
    }

    .inv-gifts-editorial__panel.inv-has-paper-surface::before {
        background-image: var(--inv-paper-surface-mobile, var(--inv-paper-surface));
    }

    .inv-gifts-editorial__column {
        padding: 0;
    }

    .inv-gifts-editorial__column:nth-child(even) {
        border-left: 0;
    }

    .inv-gifts-editorial__column + .inv-gifts-editorial__column {
        margin-top: 38px;
        padding-top: 38px;
        border-top: 1px solid rgba(25, 25, 25, .15);
    }

    .inv-treatment-dark .inv-gifts-editorial__column + .inv-gifts-editorial__column,
    .inv-treatment-ocean .inv-gifts-editorial__column + .inv-gifts-editorial__column {
        border-top-color: rgba(255, 255, 255, .20);
    }

    .inv-gifts-editorial__title {
        margin-bottom: 28px;
        font-size: clamp(30px, 10vw, 38px);
    }

    .inv-gifts-editorial__column > .inv-gift-option__icon {
        justify-content: center;
        margin: 0 auto 22px;
    }
}

/* Invitation navigation */
.inv-section { scroll-margin-top: var(--inv-nav-offset); }
body.inv-menu-open { overflow: hidden; }

.inv-nav {
    position: fixed;
    inset: 0 0 auto 0;
    z-index: 1200;
    pointer-events: none;
    color: var(--inv-text-inverse);
}

.inv-nav__bar {
    position: relative;
    z-index: 2;
    min-height: 76px;
    padding: 14px clamp(18px, 3vw, 44px);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    pointer-events: auto;
    background: transparent;
    text-shadow: none;
}

.inv-nav__brand,
.inv-nav__toggle,
.inv-nav__link {
    appearance: none;
    border: 0;
    background: transparent;
    color: inherit;
    cursor: pointer;
}

.inv-nav__brand {
    display: inline-flex;
    align-items: center;
    min-width: 48px;
    min-height: 48px;
    padding: 0;
}

.inv-nav__monogram {
    display: block;
    width: clamp(42px, 4vw, 60px);
    max-height: 54px;
    object-fit: contain;
}

.inv-nav__brand--monogram {
    transition: opacity .22s ease, visibility .22s ease;
}

.inv-nav.inv-nav--hero-visible .inv-nav__brand--monogram {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}

.inv-nav__brand-text {
    font-family: var(--inv-label-font);
    font-size: 11px;
    letter-spacing: .18em;
    text-transform: uppercase;
}

.inv-nav__toggle {
    width: 48px;
    height: 48px;
    padding: 11px;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    justify-content: center;
    gap: 6px;
    margin-left: auto;
    color: #fff;
    transition: color .2s ease;
}

/* Keep the hamburger readable against the active section instead of relying on
   mix-blend-mode, which becomes unreliable with section overlays/backdrops. */
.inv-nav.inv-nav--over-light .inv-nav__toggle {
    color: rgba(28, 28, 28, .92);
}

.inv-nav.inv-nav--over-dark .inv-nav__toggle,
.inv-nav.is-open .inv-nav__toggle {
    color: rgba(255, 255, 255, .96);
}

.inv-nav__toggle-line {
    height: 1px;
    background: currentColor;
    transition: transform .25s ease, opacity .2s ease, background-color .2s ease;
}

.inv-nav.is-open .inv-nav__toggle-line:nth-child(1) { transform: translateY(7px) rotate(45deg); }
.inv-nav.is-open .inv-nav__toggle-line:nth-child(2) { opacity: 0; }
.inv-nav.is-open .inv-nav__toggle-line:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }

.inv-nav__panel {
    position: fixed;
    inset: 0;
    display: grid;
    place-items: center;
    padding: 92px 28px 42px;
    background: rgba(34, 45, 46, .985);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .24s ease, visibility .24s ease;
}

.inv-nav.is-open .inv-nav__panel {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
}

.inv-nav__links {
    width: min(100%, 680px);
    max-height: calc(100svh - 150px);
    overflow: auto;
    display: flex;
    flex-direction: column;
    align-items: stretch;
}

.inv-nav__link {
    padding: 16px 8px;
    border-bottom: 1px solid rgba(255,255,255,.16);
    font-family: var(--inv-heading-font);
    font-size: clamp(24px, 3vw, 42px);
    line-height: 1.15;
    text-align: center;
    transition: color .18s ease, opacity .18s ease;
}

.inv-nav__link:hover,
.inv-nav__link:focus-visible { color: var(--inv-accent); }

/* Music.MediaEditorial */
.inv-music {
    padding: clamp(88px, 10vw, 146px) 0;
}

.inv-music__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-music__grid {
    width: min(100%, 920px);
    margin-top: clamp(42px, 6vw, 72px);
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 360px), 1fr));
    gap: clamp(22px, 4vw, 38px);
}

.inv-music__frame {
    width: 100%;
    border: 0;
    border-radius: max(12px, var(--inv-card-radius));
    background: rgba(0,0,0,.08);
}

.inv-music__frame--spotify { min-height: 352px; }
.inv-music__frame--youtube { min-height: 0; aspect-ratio: 16 / 9; }

/* INV_GUESTBOOK_INPUT_CONTRAST_20261020: dark entry text on light fields. */
/* GuestBook.EditorialCard */
.inv-guestbook {
    padding: clamp(88px, 10vw, 146px) 0;
}

.inv-guestbook__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-section-decoration-horizontal {
    width: min(48vw, 340px);
    max-height: 88px;
    margin: 20px auto 4px;
    object-fit: contain;
}

.inv-guestbook__card {
    width: min(100%, 760px);
    margin-top: clamp(36px, 5vw, 60px);
    padding: clamp(34px, 5vw, 64px);
    border: 1px solid rgba(25,25,25,.14);
    background: rgba(255,255,255,.38);
    text-align: center;
    box-shadow: 0 18px 52px rgba(0,0,0,.06);
}

.inv-treatment-dark .inv-guestbook__card,
.inv-treatment-ocean .inv-guestbook__card {
    border-color: rgba(255,255,255,.20);
    background: rgba(255,255,255,.06);
}

.inv-guestbook__intro {
    margin: 0 auto;
    max-width: 600px;
    font-size: clamp(17px, 1.4vw, 21px);
    line-height: 1.65;
}

/* Libro de felicitaciones: IntroText has an independent Studio size control.
   BodyFontSizePx intentionally excludes this paragraph so the secondary copy
   can change size without changing the primary invitation sentence. */
.inv-section.inv-guestbook.inv-guestbook--intro-size-override .inv-guestbook__intro {
    font-size: var(--inv-guestbook-intro-size);
}

@media (max-width: 720px) {
    .inv-section.inv-guestbook.inv-guestbook--mobile-intro-size-override .inv-guestbook__intro,
    .inv-section.inv-guestbook.inv-guestbook--mobile-intro-size-auto .inv-guestbook__intro {
        font-size: var(--inv-guestbook-mobile-intro-size);
    }
}

.inv-guestbook__note {
    margin: 12px auto 0;
    max-width: 600px;
    font-size: 13px;
    line-height: 1.6;
    opacity: .66;
}

.inv-guestbook__textarea {
    width: 100%;
    min-height: 150px;
    margin-top: 30px;
    padding: 20px 22px;
    resize: vertical;
    border: 1px solid rgba(25,25,25,.22);
    border-radius: 0;
    background: rgba(255,255,255,.72);
    /* A light input needs dark entry text even in a light-on-dark section. */
    color: #302c28;
    caret-color: #302c28;
    font: 15px/1.7 var(--inv-body-font);
    outline: none;
}

.inv-guestbook__textarea:focus {
    border-color: var(--inv-button-bg);
    background: #fff;
}

.inv-guestbook__textarea::placeholder {
    color: rgba(48,44,40,.48);
}

.inv-guestbook__status {
    min-height: 20px;
    margin-top: 10px;
    font-size: 13px;
}

.inv-guestbook__actions {
    margin-top: 24px;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 12px;
}

.inv-guestbook__button { min-width: min(100%, 220px); }

/* Libro de felicitaciones: the section body-size control must size the copy and
   form fields, not the CTA labels. Keep these buttons on the same button
   typography scale used by the rest of the invitation. This selector matches
   the specificity of the generic section body override so the later rule wins. */
.inv-section.inv-guestbook .inv-guestbook__button {
    font-size: 11px;
}

@media (max-width: 720px) {
    .inv-nav__bar { min-height: 66px; padding: 9px 12px 9px 16px; }
    .inv-nav__monogram { width: 42px; max-height: 44px; }
    .inv-nav__links { max-height: calc(100svh - 120px); }
    .inv-nav__link { padding: 14px 6px; font-size: clamp(24px, 8vw, 34px); }

    .inv-music,
    .inv-guestbook { padding: 82px 0 92px; }
    .inv-music__grid { grid-template-columns: 1fr; margin-top: 38px; }
    .inv-music__frame--spotify { min-height: 352px; }

    .inv-guestbook__card { margin-top: 34px; padding: 30px 20px; }
    .inv-section-decoration-horizontal { width: min(58vw, 240px); max-height: 72px; }
    .inv-guestbook__actions { flex-direction: column; }
    .inv-guestbook__button { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
    .inv-nav__panel,
    .inv-nav__toggle-line,
    .inv-nav__brand--monogram { transition: none; }
}

body.inv-guestbook-modal-open { overflow: hidden; }
.inv-guestbook-modal[hidden] { display: none !important; }
.inv-guestbook-modal {
    position: fixed;
    inset: 0;
    z-index: 1400;
    display: grid;
    place-items: center;
    padding: 24px;
}
/* Nested guestbook opened from Card Menu must sit above the parent modal;
   the original Scroll behavior keeps its previous stacking level. */
body.inv-card-menu-modal-open .inv-guestbook-modal { z-index: 13000; }
.inv-guestbook-modal__backdrop {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    background: rgba(20, 28, 29, .78);
    cursor: default;
}
.inv-guestbook-modal__card {
    position: relative;
    z-index: 1;
    width: min(100%, 760px);
    max-height: min(82svh, 760px);
    overflow: auto;
    padding: clamp(34px, 5vw, 58px);
    background: var(--inv-bg-light);
    color: var(--inv-text);
    box-shadow: 0 28px 80px rgba(0,0,0,.30);
}
.inv-guestbook-modal__close {
    position: absolute;
    top: 14px;
    right: 18px;
    width: 42px;
    height: 42px;
    border: 0;
    background: transparent;
    color: currentColor;
    font-size: 34px;
    line-height: 1;
    cursor: pointer;
}
.inv-guestbook-modal__title {
    margin: 0;
    padding: 0 42px;
    text-align: center;
    font-family: var(--inv-display-font);
    font-size: clamp(52px, 7vw, 86px);
    font-weight: 400;
    line-height: .9;
}
.inv-guestbook-modal__status {
    margin: 26px auto 0;
    max-width: 540px;
    text-align: center;
    font-size: 14px;
    line-height: 1.6;
    opacity: .72;
}
.inv-guestbook-modal__comments {
    margin-top: 26px;
    display: grid;
    gap: 16px;
}
@media (max-width: 720px) {
    .inv-guestbook-modal { padding: 14px; }
    .inv-guestbook-modal__card { max-height: 88svh; padding: 42px 20px 30px; }
    .inv-guestbook-modal__title { padding: 0 28px; }
}

/* Invitation entrance: loader, personalized envelope and background music */
body.inv-entrance-active {
    overflow: hidden;
}
body.inv-entrance-active #invitation-root,
body.inv-entrance-active .inv-nav {
    visibility: hidden;
}
.inv-loader-screen,
.inv-rotulo-screen {
    position: fixed;
    inset: 0;
    z-index: 3000;
    width: 100vw;
    height: 100vh;
    height: 100svh;
    border: 0;
    margin: 0;
    padding: 0;
    overflow: hidden;
    background: var(--inv-bg-dark);
    opacity: 1;
    transition: opacity .55s ease;
}
.inv-loader-screen.inv-entry-treatment-light,
.inv-rotulo-screen.inv-entry-treatment-light {
    background-color: var(--inv-bg-light);
}
.inv-loader-screen.inv-entry-treatment-dark,
.inv-rotulo-screen.inv-entry-treatment-dark {
    background-color: var(--inv-bg-dark);
}
.inv-loader-screen.inv-entry-treatment-light {
    color: var(--inv-text);
}
.inv-loader-screen.inv-entry-treatment-dark {
    color: var(--inv-text-inverse);
}
.inv-rotulo-screen.inv-entry-treatment-light .inv-rotulo-screen__instruction {
    color: var(--inv-text);
}

.inv-loader-screen--hidden,
.inv-rotulo-screen--hidden,
.inv-rotulo-screen--leaving {
    opacity: 0;
    pointer-events: none;
}
.inv-loader-screen {
    color: var(--inv-text-inverse);
}

.inv-loader-screen__image {
    position: absolute;
    inset: 0;
    z-index: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center center;
    user-select: none;
    -webkit-user-drag: none;
    animation: invLoaderEntrance .8s ease-out both;
}
.inv-entry-composed-image {
    transform: scale(var(--inv-entry-scale, 1));
    transform-origin: var(--inv-entry-origin, 50% 50%);
}
.inv-loader-screen__image.inv-entry-composed-image {
    animation: invLoaderEntranceComposed .8s ease-out both;
}

.inv-loader-screen__overlay { z-index: 1; }
.inv-loader-screen .inv-hero__content {
    position: absolute;
    inset: 0;
    z-index: 2;
    min-height: 100%;
}
/* A2.7H: once the Loader monogram is customized, its center composition gets
   independent coordinates instead of inheriting the Hero preset. */
.inv-loader-screen--custom-monogram .inv-hero__center {
    position: absolute;
    left: var(--inv-loader-monogram-x-desktop, 50%);
    top: var(--inv-loader-monogram-y-desktop, 50%);
    width: min(calc(100% - 48px), 1260px);
    align-items: center;
    transform: translate(-50%, -50%);
}
.inv-loader-screen--custom-monogram .inv-hero__monogram {
    width: var(--inv-loader-monogram-width-desktop, var(--inv-monogram-width-desktop, 30%));
}
.inv-loader-screen--plain {
    background: var(--inv-bg-dark);
}
@keyframes invLoaderEntrance {
    from { opacity: 0; transform: scale(1.018); }
    to { opacity: 1; transform: scale(1); }
}
@keyframes invLoaderEntranceComposed {
    from { opacity: 0; transform: scale(var(--inv-entry-scale, 1)); }
    to { opacity: 1; transform: scale(var(--inv-entry-scale, 1)); }
}
.inv-rotulo-screen {
    z-index: 2990;
    display: grid;
    place-items: center;
    padding: clamp(18px, 4vw, 48px);
    background-color: var(--inv-bg-dark);
    background-size: cover;
    background-position: center center;
    background-repeat: no-repeat;
    color: var(--inv-text);
    cursor: pointer;
    appearance: none;
    -webkit-appearance: none;
}
.inv-rotulo-screen::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 1;
    background: transparent;
    pointer-events: none;
}
.inv-rotulo-screen__screen-background {
    position: absolute;
    inset: 0;
    z-index: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center center;
    user-select: none;
    -webkit-user-drag: none;
}
.inv-rotulo-screen__monogram.inv-entry-monogram {
    position: absolute;
    left: var(--inv-rotulo-monogram-x-desktop, 50%);
    top: var(--inv-rotulo-monogram-y-desktop, 35%);
    z-index: 2;
    display: block;
    width: min(var(--inv-rotulo-monogram-width-desktop, 30%), 860px);
    max-height: 48%;
    object-fit: contain;
    object-position: center center;
    transform: translate(-50%, -50%);
    pointer-events: none;
    user-select: none;
    -webkit-user-drag: none;
}
.inv-rotulo-screen__card {
    position: relative;
    z-index: 2;
    width: min(88vw, 680px);
}
.inv-rotulo-screen__envelope-frame {
    position: relative;
    width: 100%;
    aspect-ratio: 1.48 / 1;
    overflow: hidden;
    filter: drop-shadow(0 22px 36px rgba(0,0,0,.22));
}
.inv-rotulo-screen__envelope {
    position: absolute;
    left: 50%;
    top: 50%;
    display: block;
    width: 216%;
    height: auto;
    max-width: none;
    max-height: none;
    transform: translate(-50%, -50%);
    user-select: none;
    -webkit-user-drag: none;
}
.inv-rotulo-screen__guest {
    position: absolute;
    z-index: 2;
    left: 25%;
    right: 7%;
    bottom: 8%;
    min-width: 0;
    text-align: right;
    color: var(--inv-text);
    font-family: var(--inv-heading-font);
    letter-spacing: .07em;
    line-height: 1.08;
    text-shadow: 0 1px 2px rgba(255,255,255,.5);
}
.inv-rotulo-screen__guest-name {
    width: 100%;
    max-height: 2.35em;
    overflow: hidden;
    overflow-wrap: break-word;
    word-break: normal;
    font-size: clamp(16px, 2vw, 25px);
    line-height: 1.08;
    text-wrap: balance;
}
.inv-rotulo-screen__present {
    margin-top: 5px;
    font-size: clamp(10px, 1.05vw, 13px);
    letter-spacing: .16em;
}
.inv-rotulo-screen__instruction {
    position: absolute;
    left: 50%;
    top: calc(100% + 20px);
    transform: translateX(-50%);
    width: max-content;
    max-width: 90vw;
    color: var(--inv-text);
    font-family: var(--inv-label-font);
    font-size: 11px;
    font-weight: 600;
    letter-spacing: .28em;
    text-transform: uppercase;
    text-align: center;
    text-shadow: none;
}

/* Alegría editorial entrance: warm embossed-paper loader + personalized stationery card. */
html[data-inv-profile="alegria-editorial"] .inv-loader-screen--editorial-paper {
    background:
        radial-gradient(circle at 50% 44%, rgba(255,255,255,.72), transparent 48%),
        linear-gradient(135deg, rgba(184,108,75,.035), transparent 35%),
        var(--inv-bg-light);
    color: var(--inv-text);
}

html[data-inv-profile="alegria-editorial"] .inv-loader-screen--editorial-paper .inv-loader-screen__image.inv-entry-background {
    object-fit: cover;
    object-position: center center;
    background: #f3ede4;
}

html[data-inv-profile="alegria-editorial"] .inv-loader-screen--editorial-paper .inv-loader-screen__monogram.inv-entry-monogram {
    position: absolute;
    left: var(--inv-loader-monogram-x-desktop, 50%);
    top: var(--inv-loader-monogram-y-desktop, 50%);
    z-index: 2;
    width: min(var(--inv-loader-monogram-width-desktop, 74%), 860px);
    max-width: calc(100% - 48px);
    max-height: min(66vh, 620px);
    object-fit: contain;
    object-position: center center;
    transform: translate(-50%, -50%);
    filter: drop-shadow(0 8px 24px rgba(255,255,255,.18));
}

.inv-loader-editorial {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 48px 24px;
    color: var(--inv-text);
    text-align: center;
}

.inv-loader-editorial::before,
.inv-loader-editorial::after {
    content: "";
    position: absolute;
    left: 50%;
    width: min(62vw, 560px);
    height: 1px;
    background: linear-gradient(90deg, transparent, rgba(36,29,26,.28) 18%, rgba(36,29,26,.28) 82%, transparent);
    transform: translateX(-50%);
}
.inv-loader-editorial::before { top: 13%; }
.inv-loader-editorial::after { bottom: 13%; }

.inv-loader-editorial__monogram {
    width: clamp(74px, 10vw, 132px);
    max-height: 120px;
    object-fit: contain;
    margin-bottom: 20px;
}

.inv-loader-editorial__initials {
    margin-bottom: 18px;
    font-family: "Cormorant Garamond", var(--inv-heading-font);
    font-size: clamp(36px, 5vw, 58px);
    font-weight: 400;
    letter-spacing: .08em;
    color: var(--inv-button-bg);
}

.inv-loader-editorial__names {
    font-family: "Cormorant Garamond", var(--inv-heading-font);
    font-size: clamp(30px, 4.4vw, 56px);
    font-weight: 400;
    line-height: 1;
    letter-spacing: .055em;
    text-transform: uppercase;
}

.inv-loader-editorial__date {
    margin-top: 18px;
    gap: 12px;
    color: rgba(36,29,26,.72);
    font-family: var(--inv-label-font);
    font-size: clamp(11px, 1.15vw, 14px);
    letter-spacing: .18em;
}

.inv-loader-editorial__date .inv-hero__date-separator {
    height: 1em;
    opacity: .35;
}

.inv-loader-editorial__progress {
    position: relative;
    width: min(180px, 46vw);
    height: 1px;
    margin-top: 30px;
    overflow: hidden;
    background: rgba(36,29,26,.14);
}

.inv-loader-editorial__progress-line {
    position: absolute;
    inset: 0 auto 0 0;
    width: 38%;
    background: var(--inv-accent);
    animation: invEditorialLoaderLine 1.45s ease-in-out infinite;
}

@keyframes invEditorialLoaderLine {
    0% { transform: translateX(-110%); }
    50% { transform: translateX(115%); }
    100% { transform: translateX(370%); }
}

.inv-loader-editorial__botanical,
.inv-rotulo-screen__botanical {
    position: absolute;
    width: 72px;
    height: 116px;
    opacity: .16;
    pointer-events: none;
}

.inv-loader-editorial__botanical::before,
.inv-loader-editorial__botanical::after,
.inv-rotulo-screen__botanical::before,
.inv-rotulo-screen__botanical::after {
    content: "";
    position: absolute;
    border: 1px solid currentColor;
    border-radius: 50% 0 50% 0;
    transform-origin: bottom left;
}

.inv-loader-editorial__botanical::before,
.inv-rotulo-screen__botanical::before {
    width: 42px;
    height: 78px;
    left: 8px;
    top: 20px;
    transform: rotate(-28deg);
}

.inv-loader-editorial__botanical::after,
.inv-rotulo-screen__botanical::after {
    width: 32px;
    height: 62px;
    right: 6px;
    bottom: 8px;
    transform: rotate(34deg);
}

.inv-loader-editorial__botanical--top {
    top: 5%;
    right: 7%;
    color: var(--inv-button-bg);
    transform: rotate(18deg);
}
.inv-loader-editorial__botanical--bottom {
    left: 6%;
    bottom: 4%;
    color: var(--inv-accent);
    transform: rotate(205deg);
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper {
    background:
        radial-gradient(circle at 50% 48%, rgba(255,255,255,.46), transparent 46%),
        var(--inv-bg-light) !important;
    color: var(--inv-text);
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper::before {
    background: transparent;
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__card {
    width: min(86vw, 720px);
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope-frame {
    aspect-ratio: 1.55 / 1;
    overflow: visible;
    padding: clamp(38px, 5vw, 62px) clamp(32px, 6vw, 74px);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    background:
        linear-gradient(rgba(247,240,232,.975), rgba(247,240,232,.975)),
        repeating-linear-gradient(0deg, rgba(36,29,26,.025) 0 1px, transparent 1px 4px);
    border: 1px solid rgba(36,29,26,.15);
    box-shadow: 0 28px 70px rgba(36,29,26,.16), inset 0 0 0 8px rgba(255,255,255,.26);
    filter: none;
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope-frame::before {
    content: "";
    position: absolute;
    inset: 16px;
    border: 1px solid rgba(36,29,26,.12);
    pointer-events: none;
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope {
    opacity: .13;
    mix-blend-mode: multiply;
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__couple {
    position: relative;
    z-index: 3;
    margin-bottom: clamp(24px, 3vw, 36px);
    font-family: var(--inv-label-font);
    font-size: clamp(10px, 1.05vw, 13px);
    letter-spacing: .28em;
    text-transform: uppercase;
    color: rgba(36,29,26,.64);
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest {
    position: relative;
    left: auto;
    right: auto;
    bottom: auto;
    width: min(100%, 540px);
    color: var(--inv-text);
    text-align: center;
    text-shadow: none;
    font-family: "Cormorant Garamond", var(--inv-heading-font);
    letter-spacing: .025em;
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest-name {
    max-height: 2.2em;
    font-size: clamp(34px, 5.2vw, 58px);
    line-height: 1.02;
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__present {
    margin-top: 12px;
    font-family: var(--inv-label-font);
    font-size: clamp(10px, 1vw, 12px);
    letter-spacing: .24em;
    text-transform: uppercase;
    color: var(--inv-accent);
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__instruction {
    top: calc(100% + 28px);
    color: var(--inv-button-bg);
    text-shadow: none;
    font-size: 10px;
    letter-spacing: .30em;
}

/* Layered entrance mode: background cover + localized monogram + guest label. */
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__card--layered {
    width: min(92vw, 920px);
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope-frame--layered {
    aspect-ratio: 4 / 3;
    padding: 0;
    overflow: hidden;
    background: #f3ede4;
    border: 0;
    box-shadow: 0 24px 64px rgba(36,29,26,.18);
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope-frame--layered::before {
    display: none;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__background {
    position: absolute;
    inset: 0;
    z-index: 1;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center center;
    user-select: none;
    -webkit-user-drag: none;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__monogram.inv-entry-monogram {
    left: var(--inv-rotulo-monogram-x-desktop, 50%);
    top: var(--inv-rotulo-monogram-y-desktop, 34%);
    width: min(var(--inv-rotulo-monogram-width-desktop, 68%), 620px);
    max-height: 44%;
    filter: drop-shadow(0 6px 18px rgba(255,255,255,.22));
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered {
    position: absolute;
    z-index: 3;
    left: 50%;
    right: auto;
    top: 58%;
    bottom: auto;
    width: min(72%, 560px);
    padding: 12px 22px 10px;
    transform: translate(-50%, -50%);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
    background: rgba(247,240,232,.78);
    border: 1px solid rgba(36,29,26,.08);
    border-radius: 999px;
    box-shadow: 0 8px 22px rgba(36,29,26,.06);
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered .inv-rotulo-screen__guest-name {
    max-height: none;
    font-family: var(--inv-heading-font);
    font-size: clamp(28px, 3.2vw, 40px);
    line-height: 1.04;
    letter-spacing: .02em;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered .inv-rotulo-screen__present {
    margin-top: 6px;
    font-size: clamp(8px, .8vw, 10px);
    letter-spacing: .24em;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__card--layered .inv-rotulo-screen__instruction {
    top: calc(100% + 20px);
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen__botanical--top {
    top: -20px;
    right: -14px;
    color: var(--inv-button-bg);
    transform: rotate(22deg);
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen__botanical--bottom {
    bottom: -18px;
    left: -12px;
    color: var(--inv-accent);
    transform: rotate(202deg);
}

.inv-background-audio {
    display: none;
}
.inv-music-control {
    --inv-music-desktop-offset: 20px;
    --inv-music-mobile-offset: 16px;
    position: fixed;
    right: max(22px, env(safe-area-inset-right));
    bottom: max(var(--inv-music-desktop-offset), env(safe-area-inset-bottom));
    left: auto;
    z-index: 1250;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    min-height: 48px;
    padding: 0;
    border: 1px solid rgba(255, 255, 255, .55);
    border-radius: 50%;
    background: rgba(250, 250, 248, .56);
    color: rgba(28, 28, 28, .92);
    box-shadow: 0 8px 24px rgba(0, 0, 0, .16);
    backdrop-filter: blur(18px) saturate(120%);
    -webkit-backdrop-filter: blur(18px) saturate(120%);
    transition: bottom .2s ease, background-color .2s ease, box-shadow .2s ease, opacity .2s ease, transform .2s ease;
}
.inv-music-control--hidden {
    opacity: 0;
    pointer-events: none;
    transform: translateY(10px);
}
.inv-music-control__button {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: rgba(255, 255, 255, .08);
    color: rgba(28, 28, 28, .92);
    cursor: pointer;
}
.inv-music-control__button:hover,
.inv-music-control__button:focus-visible {
    color: #181818;
    background: rgba(255, 255, 255, .28);
    outline: 0;
}
.inv-music-control__icon {
    position: relative;
    display: block;
    width: 22px;
    height: 22px;
    color: currentColor;
}
.inv-music-control__icon::before {
    content: '♪';
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-family: Georgia, 'Times New Roman', serif;
    font-size: 23px;
    font-weight: 400;
    line-height: 1;
    transform: translateY(-1px);
    transition: opacity .18s ease, transform .18s ease;
}
.inv-music-control__icon::after {
    content: '';
    position: absolute;
    left: 10px;
    top: 1px;
    width: 1.5px;
    height: 20px;
    border-radius: 999px;
    background: currentColor;
    opacity: 0;
    transform: rotate(-42deg) scaleY(.7);
    transform-origin: center;
    transition: opacity .18s ease, transform .18s ease;
}
.inv-music-control.is-paused .inv-music-control__icon::before {
    opacity: .62;
}
.inv-music-control.is-paused .inv-music-control__icon::after {
    opacity: .9;
    transform: rotate(-42deg) scaleY(1);
}
@media (max-width: 575.98px) {
    .inv-music-control {
        right: max(16px, env(safe-area-inset-right));
        bottom: max(var(--inv-music-mobile-offset), env(safe-area-inset-bottom));
    }
}
@media (max-width: 720px) {
    .inv-rotulo-screen { padding: 12px; }
    .inv-rotulo-screen__card { width: min(92vw, 680px); }
    .inv-loader-editorial { padding: 32px 20px; }
    .inv-loader-editorial::before { top: 10%; }
    .inv-loader-editorial::after { bottom: 10%; }
    .inv-loader-editorial__botanical { width: 52px; height: 84px; }
    .inv-loader-screen--custom-monogram .inv-hero__center {
        left: var(--inv-loader-monogram-x-mobile, 50%);
        top: var(--inv-loader-monogram-y-mobile, 50%);
        width: calc(100% - 32px);
    }
    .inv-loader-screen--custom-monogram .inv-hero__monogram {
        width: var(--inv-loader-monogram-width-mobile, var(--inv-monogram-width-mobile, 62%));
    }
    html[data-inv-profile="alegria-editorial"] .inv-loader-screen--editorial-paper .inv-loader-screen__monogram.inv-entry-monogram {
        left: var(--inv-loader-monogram-x-mobile, 50%);
        top: var(--inv-loader-monogram-y-mobile, 50%);
        width: min(var(--inv-loader-monogram-width-mobile, 74%), 860px);
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__card { width: min(92vw, 620px); }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__card--layered { width: min(96vw, 720px); }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope-frame--layered {
        aspect-ratio: 4 / 3;
        min-height: 0;
        padding: 0;
    }
    .inv-rotulo-screen__monogram.inv-entry-monogram {
        left: var(--inv-rotulo-monogram-x-mobile, var(--inv-rotulo-monogram-x-desktop, 50%));
        top: var(--inv-rotulo-monogram-y-mobile, var(--inv-rotulo-monogram-y-desktop, 30%));
        width: min(var(--inv-rotulo-monogram-width-mobile, 56%), 520px);
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__monogram.inv-entry-monogram {
        left: var(--inv-rotulo-monogram-x-mobile, 50%);
        top: var(--inv-rotulo-monogram-y-mobile, 31%);
        width: min(var(--inv-rotulo-monogram-width-mobile, 84%), 520px);
        max-height: 42%;
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered {
        width: min(82%, 460px);
        top: 60%;
        bottom: auto;
        padding: 8px 14px 7px;
        transform: translate(-50%, -50%);
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered .inv-rotulo-screen__guest-name {
        font-family: var(--inv-heading-font);
        font-size: clamp(20px, 5.8vw, 30px);
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope-frame {
        aspect-ratio: auto;
        min-height: min(62vh, 460px);
        padding: 46px 24px 42px;
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest { left: auto; right: auto; bottom: auto; }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest-name { font-size: clamp(32px, 10vw, 46px); }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__present { font-size: 10px; }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__instruction { top: calc(100% + 20px); font-size: 9px; }
    .inv-rotulo-screen__guest { left: 20%; right: 6%; bottom: 8%; }
    .inv-rotulo-screen__guest-name { font-size: clamp(14px, 4.2vw, 19px); }
    .inv-rotulo-screen__present { font-size: 9px; }
    .inv-rotulo-screen__instruction { top: calc(100% + 14px); font-size: 9px; letter-spacing: .22em; }
}
@media (prefers-reduced-motion: reduce) {
    .inv-loader-screen,
    .inv-rotulo-screen,
    .inv-loader-screen__image,
    .inv-music-control { transition: none; animation: none; }
}

/* Invitation Studio v1 - public guest runtime */
body.inv-rsvp-modal-open { overflow: hidden; }
.inv-rsvp-modal[hidden] { display: none !important; }
.inv-rsvp-modal {
    position: fixed;
    inset: 0;
    z-index: 100030;
    display: grid;
    place-items: center;
    padding: clamp(14px, 3vw, 34px);
}
.inv-rsvp-modal__backdrop {
    position: absolute;
    inset: 0;
    border: 0;
    background: rgba(20, 29, 30, .72);
    backdrop-filter: blur(7px);
    cursor: default;
}
.inv-rsvp-modal__card {
    position: relative;
    z-index: 1;
    width: min(920px, 96vw);
    max-height: 92svh;
    overflow: auto;
    padding: clamp(38px, 5vw, 70px) clamp(22px, 5vw, 64px) clamp(28px, 4vw, 48px);
    color: var(--inv-text);
    background: var(--inv-bg-light);
    border-radius: max(2px, var(--inv-card-radius));
    box-shadow: 0 30px 90px rgba(0, 0, 0, .28);
}
.inv-rsvp-modal__close {
    position: absolute;
    top: 12px;
    right: 16px;
    width: 42px;
    height: 42px;
    border: 0;
    background: transparent;
    color: currentColor;
    font: 300 34px/1 var(--inv-body-font);
    cursor: pointer;
}
.inv-rsvp-modal__title {
    margin: 0 48px 10px;
    text-align: center;
    font-family: var(--inv-display-font);
    font-size: clamp(50px, 7vw, 92px);
    font-weight: 400;
    line-height: .95;
}
.inv-rsvp-modal__status {
    min-height: 24px;
    margin: 0 auto 20px;
    max-width: 680px;
    text-align: center;
    font: 500 12px/1.5 var(--inv-body-font);
}
.inv-rsvp-modal__body { display: grid; gap: 26px; }
.inv-rsvp-event {
    padding: clamp(22px, 3vw, 34px);
    border: 1px solid rgba(25, 25, 25, .15);
    background: rgba(255,255,255,.22);
}
.inv-rsvp-event__heading { margin-bottom: 22px; text-align: center; }
.inv-rsvp-event__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(27px, 3.5vw, 42px);
    font-weight: 400;
    letter-spacing: .02em;
}
.inv-rsvp-event__meta {
    margin: 10px 0 0;
    display: grid;
    gap: 3px;
    justify-items: center;
}
.inv-rsvp-event__meta p { margin: 0; }
.inv-rsvp-event__weekday {
    font: 500 12px/1.35 var(--inv-body-font);
    letter-spacing: .02em;
}
.inv-rsvp-event__date {
    font: 500 12px/1.4 var(--inv-body-font);
}
.inv-rsvp-event__time {
    margin-top: 2px !important;
    font: 600 12px/1.4 var(--inv-label-font);
    letter-spacing: .08em;
}
.inv-rsvp-event__place {
    margin-top: 3px !important;
    font: 500 10px/1.45 var(--inv-label-font);
    letter-spacing: .08em;
    text-transform: uppercase;
}
.inv-rsvp-person {
    padding: 18px 0;
    border-top: 1px solid rgba(25, 25, 25, .11);
}
.inv-rsvp-person:first-of-type { border-top: 0; }
.inv-rsvp-person__top {
    display: grid;
    grid-template-columns: minmax(180px, 1fr) auto;
    gap: 20px;
    align-items: center;
}
.inv-rsvp-person__name,
.inv-rsvp-person__name-input {
    font: 500 16px/1.35 var(--inv-body-font);
}
.inv-rsvp-person__name-input,
.inv-rsvp-field__control,
.inv-rsvp-waitlist__input {
    width: 100%;
    border: 0;
    border-bottom: 1px solid rgba(25,25,25,.34);
    border-radius: 0;
    padding: 10px 4px;
    background: transparent;
    color: inherit;
    outline: none;
    font-family: var(--inv-body-font);
}
.inv-rsvp-person__name-input:focus,
.inv-rsvp-field__control:focus,
.inv-rsvp-waitlist__input:focus { border-bottom-color: var(--inv-button-bg); }
.inv-rsvp-person__attendance,
.inv-rsvp-inline-choices {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 16px;
}
.inv-rsvp-choice {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    cursor: pointer;
    font: 500 12px/1.3 var(--inv-body-font);
}
.inv-rsvp-choice input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}
.inv-rsvp-choice__mark {
    position: relative;
    flex: 0 0 auto;
    width: 15px;
    height: 15px;
    border: 1px solid currentColor;
    border-radius: 50%;
    background: transparent;
    opacity: .72;
}
/*
   The RSVP radio must not depend on --inv-button-bg. Some invitation themes
   intentionally use a very light button palette, which made a checked radio
   indistinguishable from an unchecked one even though the native input was
   correctly checked and the answer had already been saved.
*/
.inv-rsvp-choice__mark::after {
    content: "";
    position: absolute;
    inset: 3px;
    border-radius: 50%;
    background: currentColor;
    transform: scale(0);
    transform-origin: center;
    transition: transform .12s ease;
}
.inv-rsvp-choice input:checked + .inv-rsvp-choice__mark {
    opacity: 1;
    border-color: currentColor;
}
.inv-rsvp-choice input:checked + .inv-rsvp-choice__mark::after {
    transform: scale(1);
}
.inv-rsvp-person__details {
    display: grid;
    grid-template-columns: repeat(2, minmax(0,1fr));
    gap: 18px 24px;
    margin-top: 20px;
    padding: 18px;
    background: rgba(255,255,255,.32);
}
.inv-rsvp-person__details[hidden] { display: none !important; }
.inv-rsvp-person__details > .inv-rsvp-field:only-child { grid-column: 1 / -1; }
.inv-rsvp-field { display: grid; gap: 9px; }
.inv-rsvp-field--choice { align-content: start; }
.inv-rsvp-field__label {
    font: 600 11px/1.45 var(--inv-label-font);
    letter-spacing: .04em;
}
.inv-rsvp-field__textarea { resize: vertical; min-height: 72px; }
.inv-rsvp-field__textarea[hidden] { display: none !important; }
.inv-rsvp-modal__footer {
    display: flex;
    justify-content: center;
    margin-top: 28px;
}
.inv-rsvp-modal__closed {
    max-width: 650px;
    margin: 0 auto;
    padding: 26px;
    text-align: center;
    font: 500 15px/1.7 var(--inv-body-font);
}
.inv-rsvp-modal.is-busy { cursor: wait; }
.inv-rsvp-waitlist {
    padding: 22px;
    border-top: 1px solid rgba(25,25,25,.15);
    text-align: center;
}
.inv-rsvp-waitlist__title {
    margin: 0 0 8px;
    font: 400 28px/1.15 var(--inv-heading-font);
}
.inv-rsvp-waitlist__text {
    margin: 0 auto 15px;
    max-width: 620px;
    font: 400 13px/1.65 var(--inv-body-font);
}
.inv-rsvp-waitlist__row {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 14px;
    margin-top: 10px;
}
.inv-rsvp-waitlist__input { max-width: 72px; text-align: center; }
.inv-rsvp-waitlist__feedback {
    min-height: 22px;
    margin: 12px auto 0;
    max-width: 620px;
    font: 600 12px/1.55 var(--inv-body-font);
}
.inv-rsvp-waitlist__feedback.is-success {
    letter-spacing: .01em;
}
.inv-rsvp__runtime-status {
    margin: 18px auto 0;
    max-width: 620px;
    text-align: center;
    color: inherit;
    font: 500 11px/1.5 var(--inv-body-font);
}

.inv-guestbook-comment {
    padding: 18px 0;
    border-bottom: 1px solid rgba(25,25,25,.12);
}
.inv-guestbook-comment:last-child { border-bottom: 0; }
.inv-guestbook-comment__name {
    font: 600 12px/1.4 var(--inv-label-font);
    letter-spacing: .12em;
    text-transform: uppercase;
}
.inv-guestbook-comment__date {
    margin-top: 3px;
    opacity: .62;
    font: 400 10px/1.4 var(--inv-body-font);
}
.inv-guestbook-comment__text {
    margin: 10px 0 0;
    white-space: pre-wrap;
    font: 400 14px/1.7 var(--inv-body-font);
}

@media (min-width: 1050px) {
    /* Desktop gift accessibility scale. Keep tablet/mobile unchanged. */
    .inv-gifts__intro {
        max-width: 780px;
        font-size: 22px;
        line-height: 1.7;
    }
    .inv-gifts__grid {
        gap: 48px;
        margin-top: 64px;
    }
    .inv-gift-card {
        padding: 54px 50px;
    }
    .inv-gift-card__title {
        font-size: 38px;
        line-height: 1.2;
    }
    .inv-gift-card .inv-detail-line {
        margin-top: 24px;
        gap: 8px;
    }
    .inv-gift-card .inv-detail-line__label {
        font-size: 12px;
        line-height: 1.45;
    }
    .inv-gift-card .inv-detail-line__value,
    .inv-gift-card__note {
        font-size: 19px;
        line-height: 1.55;
    }
    .inv-gift-card .inv-button {
        min-height: 48px;
        padding: 14px 26px 13px;
        font-size: 13px;
    }
}

@media (min-width: 1050px) {
    /* Desktop RSVP accessibility scale: prioritize comfortable reading over density. */
    .inv-rsvp-form {
        width: min(100%, 1040px);
        padding: 44px 54px 50px;
    }
    .inv-rsvp-form:not(.inv-rsvp-form--editorial) .inv-rsvp-form__body { gap: 42px; }
    .inv-rsvp-form:not(.inv-rsvp-form--editorial) .inv-rsvp-event { padding: 46px 48px; }
    .inv-rsvp-event__heading { margin-bottom: 36px; }
    .inv-rsvp-event__meta { margin-top: 14px; gap: 5px; }
    .inv-rsvp-event__weekday,
    .inv-rsvp-event__date,
    .inv-rsvp-event__time { font-size: 16px; }
    .inv-rsvp-event__place { font-size: 14px; line-height: 1.55; }
    .inv-rsvp-person { padding: 30px 0; }
    .inv-rsvp-person__top { gap: 34px; }
    .inv-rsvp-person__name,
    .inv-rsvp-person__name-input {
        font-size: 22px;
        line-height: 1.4;
    }
    .inv-rsvp-person__name-input,
    .inv-rsvp-field__control,
    .inv-rsvp-waitlist__input {
        padding: 15px 6px;
        font-size: 19px;
        line-height: 1.55;
    }
    .inv-rsvp-person__attendance,
    .inv-rsvp-inline-choices { gap: 16px 26px; }
    .inv-rsvp-choice {
        gap: 10px;
        font-size: 18px;
        line-height: 1.45;
    }
    .inv-rsvp-choice__mark { width: 20px; height: 20px; }
    .inv-rsvp-form:not(.inv-rsvp-form--editorial) .inv-rsvp-person__details {
        gap: 30px 38px;
        margin-top: 32px;
        padding: 30px 32px;
    }
    .inv-rsvp-field { gap: 15px; }
    .inv-rsvp-field__label {
        font-size: 17px;
        line-height: 1.55;
    }
    .inv-rsvp-form__status,
    .inv-rsvp__runtime-status {
        font-size: 17px;
        line-height: 1.6;
    }
    .inv-rsvp-ticket-summary__label { font-size: 16px; }
    .inv-rsvp-ticket-summary__line { font-size: 34px; }
    .inv-rsvp-waitlist__title { font-size: 30px; }
    .inv-rsvp-waitlist__text {
        font-size: 17px;
        line-height: 1.7;
    }
    .inv-rsvp-form:not(.inv-rsvp-form--editorial) .inv-rsvp-waitlist { padding: 28px; }
    .inv-rsvp-waitlist__row { gap: 18px; margin-top: 14px; }
    .inv-rsvp-form__footer { margin-top: 42px; gap: 14px; }
    .inv-rsvp-form__footer .inv-button,
    .inv-rsvp-calendar__toggle {
        min-height: 50px;
        padding: 15px 28px 14px;
        font-size: 13px;
    }

    /* Rótulo: keep the validated geometry, only increase desktop typography. */
    .inv-rotulo-screen__guest-name { font-size: clamp(22px, 2.15vw, 30px); }
    .inv-rotulo-screen__present { font-size: 16px; }
}

@media (max-width: 720px) {
    .inv-rsvp-form--editorial {
        margin-top: 34px;
        padding: 12px 2px 26px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-form__body {
        width: 100%;
    }
    .inv-rsvp-form--editorial .inv-rsvp-event + .inv-rsvp-event {
        margin-top: 52px;
        padding-top: 56px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-event__heading {
        margin-bottom: 24px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-event__heading .inv-events-classic__event-icon {
        width: min(var(--inv-classic-event-icon-mobile-size, 68px), 86px);
        height: min(var(--inv-classic-event-icon-mobile-size, 68px), 86px);
    }
    .inv-rsvp-form--editorial .inv-rsvp-event__title {
        font-size: clamp(27px, 9vw, 36px);
    }
    .inv-rsvp-form--editorial .inv-rsvp-person {
        padding: 22px 0 26px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-person__attendance {
        width: 100%;
        gap: 9px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-choice {
        flex: 1 1 132px;
        justify-content: center;
        min-height: 44px;
        padding: 10px 12px 9px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-person__details {
        grid-template-columns: 1fr;
        gap: 20px;
        margin-top: 26px;
        padding: 0 8px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-field--choice .inv-rsvp-choice {
        flex: 0 1 auto;
        min-width: 72px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-waitlist {
        margin-top: 56px;
        padding-top: 56px;
    }
    .inv-rsvp-form--editorial .inv-rsvp-waitlist__row {
        flex-direction: row;
        flex-wrap: wrap;
    }
    .inv-rsvp-form--editorial .inv-rsvp-waitlist__input {
        max-width: 64px;
    }
}

@media (max-width: 720px) {
    .inv-rsvp-ticket-summary { margin-top: 26px; }
    .inv-rsvp-ticket-summary__label { font-size: 10px; letter-spacing: .20em; }
    .inv-rsvp-ticket-summary__line { font-size: 25px; }
    .inv-rsvp-form__body { gap: 20px; }
    .inv-rsvp-form__footer {
        flex-direction: column;
        align-items: stretch;
    }
    .inv-rsvp-form__footer .inv-button,
    .inv-rsvp-calendar,
    .inv-rsvp-calendar__toggle { width: 100%; }
    .inv-rsvp-calendar { display: block; }
    .inv-rsvp-calendar__menu {
        position: static;
        width: 100%;
        margin-top: 10px;
        transform: none;
    }
}

@media (max-width: 720px) {
    .inv-rsvp-modal { padding: 10px; }
    .inv-rsvp-modal__card { width: 100%; max-height: 94svh; padding: 46px 18px 26px; }
    .inv-rsvp-modal__title { margin-inline: 28px; font-size: clamp(48px, 16vw, 68px); }
    .inv-rsvp-form:not(.inv-rsvp-form--editorial) .inv-rsvp-event { padding: 20px 14px; }
    .inv-rsvp-person__top { grid-template-columns: 1fr; gap: 12px; }
    .inv-rsvp-form:not(.inv-rsvp-form--editorial) .inv-rsvp-person__details { grid-template-columns: 1fr; padding: 16px 12px; }
    .inv-rsvp-form:not(.inv-rsvp-form--editorial) .inv-rsvp-waitlist__row { flex-direction: column; }
    .inv-rsvp-waitlist__input { max-width: 100px; }
}

/* Invitation Studio footer */
.inv-footer {
    position: relative;
    z-index: 1;
    width: 100%;
    padding: 34px 24px 30px;
    background-color: var(--inv-bg-light, #f1eee8);
    color: var(--inv-text, #191919);
    text-align: center;
}

.inv-footer.inv-treatment-light {
    background-color: var(--inv-bg-light, #f1eee8);
    color: var(--inv-text, #191919);
}

.inv-footer.inv-treatment-dark {
    background-color: var(--inv-bg-dark, #465152);
    color: var(--inv-text-inverse, #f7f5ef);
}

.inv-footer__inner {
    width: min(100%, var(--inv-content-max, 1180px));
    margin: 0 auto;
}

.inv-footer__monogram-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 34px;
    text-decoration: none;
}

.inv-footer__monogram {
    display: block;
    width: min(var(--inv-footer-monogram-width, 120px), 48vw);
    max-width: 100%;
    height: auto;
    max-height: none;
    object-fit: contain;
    /* A2.6S: footer artwork must preserve the uploaded file colors.
       The previous monochrome filter turned opaque JPG/PNG backgrounds into a black square. */
    filter: none;
    opacity: 1;
}

.inv-footer__legal {
    margin: 0;
    font-family: var(--inv-body-font, sans-serif);
    font-size: .78rem;
    line-height: 1.7;
    letter-spacing: .02em;
    color: inherit;
}

.inv-footer__legal a {
    color: inherit;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.inv-footer__legal a:hover,
.inv-footer__legal a:focus-visible {
    opacity: .72;
}

.inv-footer__separator {
    display: inline-block;
    margin: 0 5px;
    opacity: .55;
}

@media (max-width: 575.98px) {
    .inv-footer {
        padding: 30px 18px 26px;
    }

    .inv-footer__monogram-link {
        margin-bottom: 28px;
    }

    .inv-footer__monogram {
        width: min(var(--inv-footer-monogram-width, 120px), 56vw);
    }

    .inv-footer__legal {
        font-size: .72rem;
    }

    .inv-footer__separator {
        margin: 0 3px;
    }
}

@media (min-width: 1050px) {
    /* Desktop high-legibility scale for Gifts and Hotels.
       These sections contain operational details, so use comfortable fixed
       minimum sizes instead of relying on viewport-relative typography. */
    .inv-gifts__intro {
        max-width: 820px;
        font-size: 24px;
        line-height: 1.65;
    }

    .inv-gift-card {
        padding: 58px 54px;
    }

    .inv-hotel-card {
        padding: 46px 48px;
    }

    .inv-gift-card__title,
    .inv-hotel-card__title {
        font-size: 42px;
        line-height: 1.18;
    }

    /* Reserve the same vertical bands across hotel cards. Two title lines and
       two address lines cover the common editorial cases without forcing the
       entire card into a fixed height. */
    .inv-hotel-card__title {
        min-height: 2.36em;
        display: flex;
        align-items: center;
        justify-content: center;
    }

    .inv-hotel-card__address {
        min-height: 3.3em;
        display: flex;
        align-items: flex-start;
        justify-content: center;
    }

    .inv-gift-card .inv-detail-line {
        margin-top: 26px;
        gap: 9px;
    }

    .inv-gift-card .inv-detail-line__label {
        font-size: 13px;
        line-height: 1.45;
        letter-spacing: .18em;
    }

    .inv-gift-card .inv-detail-line__value,
    .inv-gift-card__note {
        font-size: 21px;
        line-height: 1.55;
    }

    .inv-hotel-card__address {
        margin-top: 18px;
        font-size: 19px;
        line-height: 1.55;
    }

    .inv-hotel-card__details {
        margin-top: 14px;
        font-size: 18px;
        line-height: 1.5;
    }

    .inv-hotel-card__deadline {
        margin-top: 12px;
        font-size: 19px;
        line-height: 1.5;
    }

    .inv-hotel-card__notes {
        margin-top: 18px;
        font-size: 18px;
        line-height: 1.5;
    }

    .inv-card-actions {
        gap: 14px;
        margin-top: 32px;
    }

    .inv-hotel-card > .inv-card-actions {
        margin-top: 22px;
    }

    .inv-gift-card .inv-button,
    .inv-hotel-card .inv-button {
        min-height: 50px;
        padding: 15px 28px 14px;
        font-size: 14px;
    }
}

@media (min-width: 1050px) {
    /* Guestbook desktop legibility. Keep the validated composition unchanged. */
    .inv-guestbook__intro {
        font-size: 23px;
        line-height: 1.65;
    }

    .inv-guestbook__note,
    .inv-guestbook__status {
        font-size: 16px;
        line-height: 1.6;
    }

    .inv-guestbook__textarea {
        font-size: 18px;
        line-height: 1.7;
    }

    .inv-guestbook__button {
        min-height: 50px;
        padding: 15px 28px 14px;
    }

    /* Preserve the existing larger desktop CTA size while still keeping it
       independent from the Guest Book body-text setting. */
    .inv-section.inv-guestbook .inv-guestbook__button {
        font-size: 14px;
    }

    .inv-guestbook-modal__status {
        font-size: 18px;
        line-height: 1.65;
    }

    .inv-guestbook-modal__comments {
        margin-top: 32px;
        gap: 20px;
    }

    .inv-guestbook-comment {
        padding: 22px 0;
    }

    .inv-guestbook-comment__name {
        font-size: 19px;
        line-height: 1.45;
    }

    .inv-guestbook-comment__date {
        margin-top: 5px;
        font-size: 15px;
        line-height: 1.5;
    }

    .inv-guestbook-comment__text {
        margin-top: 12px;
        font-size: 21px;
        line-height: 1.75;
    }
}

/* Reusable section treatments exposed by Invitation Studio. The section keeps
   its own renderer/variant; these classes only combine backdrop + surface. */
.inv-layout-surface-card {
    position: relative;
    isolation: isolate;
    padding: clamp(32px, 5vw, 60px);
    border: 1px solid rgba(25, 25, 25, .12);
    border-radius: max(2px, var(--inv-card-radius));
    color: var(--inv-card-light-text, var(--inv-text));
    box-shadow: 0 18px 52px rgba(0, 0, 0, .10);
}

.inv-layout-surface-card--light {
    background: var(--inv-bg-light);
    color: var(--inv-card-light-text, var(--inv-text));
}

/* A2.7G: card orientation and surface are independent from the section
   background/theme. Vertical cards are intentionally narrower on desktop;
   mobile returns both shapes to the available width. */
.inv-layout-surface-card--horizontal {
    width: 100%;
    margin-left: auto;
    margin-right: auto;
}

.inv-layout-surface-card--vertical {
    width: min(100%, 720px);
    margin-left: auto;
    margin-right: auto;
}

.inv-layout-surface-card--dark {
    background: var(--inv-bg-dark);
    color: var(--inv-card-dark-text, var(--inv-text-inverse)) !important;
    border-color: rgba(247, 245, 239, .18);
    --section-btn-primary-bg: var(--inv-button-dark-bg);
    --section-btn-primary-text: var(--inv-button-dark-text);
    --section-btn-primary-border: var(--inv-button-dark-border);
    --section-btn-primary-hover-bg: var(--inv-button-dark-hover-bg);
    --section-btn-primary-hover-text: var(--inv-button-dark-hover-text);
    --section-btn-primary-hover-border: var(--inv-button-dark-hover-border);
    --section-btn-secondary-bg: transparent;
    --section-btn-secondary-text: var(--inv-button-dark-border);
    --section-btn-secondary-border: var(--inv-button-dark-border);
    --section-btn-secondary-hover-bg: var(--inv-button-dark-secondary-hover-bg);
    --section-btn-secondary-hover-text: var(--inv-button-dark-secondary-hover-text);
    --section-btn-secondary-hover-border: var(--inv-button-dark-secondary-hover-border);
    --section-btn-border-width: var(--inv-button-dark-border-width);
    --section-btn-hover-opacity: var(--inv-button-dark-hover-opacity);
}

.inv-layout-surface-card--dark .inv-hotel-card,
.inv-layout-surface-card--dark .inv-gift-card,
.inv-layout-surface-card--dark .inv-activity-card,
.inv-layout-surface-card--dark .inv-makeup-card,
.inv-layout-surface-card--dark .inv-transport-card,
.inv-layout-surface-card--dark .inv-restaurant-card {
    color: inherit;
    border-color: rgba(247, 245, 239, .16);
    background: rgba(255, 255, 255, .05);
}

/* Buttons inside a light/paper card use the light palette even when the
   containing section itself is dark/ocean. */
.inv-treatment-dark .inv-layout-surface-card:not(.inv-layout-surface-card--dark),
.inv-treatment-ocean .inv-layout-surface-card:not(.inv-layout-surface-card--dark) {
    --section-btn-primary-bg: var(--inv-button-light-bg);
    --section-btn-primary-text: var(--inv-button-light-text);
    --section-btn-primary-border: var(--inv-button-light-border);
    --section-btn-primary-hover-bg: var(--inv-button-light-hover-bg);
    --section-btn-primary-hover-text: var(--inv-button-light-hover-text);
    --section-btn-primary-hover-border: var(--inv-button-light-hover-border);
    --section-btn-secondary-bg: transparent;
    --section-btn-secondary-text: var(--inv-button-light-border);
    --section-btn-secondary-border: var(--inv-button-light-border);
    --section-btn-secondary-hover-bg: var(--inv-button-light-secondary-hover-bg);
    --section-btn-secondary-hover-text: var(--inv-button-light-secondary-hover-text);
    --section-btn-secondary-hover-border: var(--inv-button-light-secondary-hover-border);
    --section-btn-border-width: var(--inv-button-light-border-width);
    --section-btn-hover-opacity: var(--inv-button-light-hover-opacity);
}

/* A2.5U - Paper cards behave like loose stationery: no drawn border,
   only the paper artwork plus a soft elevation shadow. */
.inv-layout-surface-card--paper {
    background: transparent !important;
    border: 0;
    box-shadow: 0 14px 36px rgba(31, 27, 24, .11);
}

.inv-layout-surface-card--paper.inv-has-paper-surface::before {
    inset: -2%;
    z-index: -1;
    opacity: 1;
    background-size: cover;
}

.inv-layout-surface-card--paper.inv-has-paper-surface > * {
    position: relative;
    z-index: 1;
}

/* A light/paper surface inside a blue or sea section must use the normal dark
   content rules rather than the inverse rules inherited from the section. */
.inv-treatment-dark .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-hotel-card,
.inv-treatment-dark .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-gift-card,
.inv-treatment-dark .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-restaurant-card,
.inv-treatment-dark .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-activity-card,
.inv-treatment-dark .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-makeup-card,
.inv-treatment-dark .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-transport-card,
.inv-treatment-ocean .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-hotel-card,
.inv-treatment-ocean .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-gift-card,
.inv-treatment-ocean .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-restaurant-card,
.inv-treatment-ocean .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-activity-card,
.inv-treatment-ocean .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-makeup-card,
.inv-treatment-ocean .inv-layout-surface-card:not(.inv-layout-surface-card--dark) .inv-transport-card {
    color: var(--inv-card-light-text, var(--inv-text));
    border-color: rgba(25, 25, 25, .13);
    background: rgba(255, 255, 255, .30);
}

.inv-treatment-dark .inv-layout-surface-card.inv-guestbook__card:not(.inv-layout-surface-card--dark),
.inv-treatment-ocean .inv-layout-surface-card.inv-guestbook__card:not(.inv-layout-surface-card--dark) {
    border-color: rgba(25, 25, 25, .14);
}

@media (max-width: 720px) {
    .inv-layout-surface-card {
        padding: 28px 18px;
    }

    .inv-layout-surface-card--vertical,
    .inv-layout-surface-card--horizontal {
        width: 100%;
    }

    .inv-layout-surface-card--paper.inv-has-paper-surface::before {
        background-image: var(--inv-paper-surface-mobile, var(--inv-paper-surface));
    }
}

/* Participación de la Boda */
.inv-participation {
    padding: clamp(86px, 10vw, 150px) 0;
}

.inv-participation__inner {
    width: min(calc(100% - 48px), 980px);
    margin: 0 auto;
    text-align: center;
}

.inv-participation__title {
    margin: 0 0 clamp(34px, 5vw, 64px);
    font-family: var(--inv-display-font);
    font-size: clamp(58px, 7vw, 108px);
    font-weight: 400;
    line-height: .9;
}

.inv-participation__parents-heading {
    margin: 0 auto 18px;
    font-family: var(--inv-heading-font);
    font-size: clamp(18px, 1.8vw, 26px);
    font-weight: 400;
    line-height: 1.25;
}

/* Keep reordered participation blocks visually separated.
   This matters when Parents follows the custom message/reference. */
.inv-participation__custom-text + .inv-participation__parents-heading,
.inv-participation__reference + .inv-participation__parents-heading {
    margin-top: clamp(28px, 3vw, 42px);
}

.inv-participation__custom-text + .inv-participation__parents,
.inv-participation__reference + .inv-participation__parents {
    margin-top: clamp(28px, 3vw, 42px);
}

.inv-participation__parents {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 24px clamp(36px, 7vw, 96px);
    margin: 0 auto clamp(30px, 4vw, 48px);
    max-width: 840px;
}

.inv-participation__parents-column {
    display: flex;
    flex-direction: column;
    gap: 5px;
}

.inv-participation__parent-name {
    font-family: var(--inv-body-font);
    font-size: var(--inv-section-body-size, clamp(16px, 1.4vw, 21px));
    line-height: 1.45;
}

.inv-participation__couple {
    margin: clamp(18px, 2vw, 30px) auto clamp(24px, 3vw, 38px);
    font-family: var(--inv-display-font);
    font-size: clamp(64px, 8vw, 126px);
    font-weight: 400;
    line-height: .86;
}

.inv-participation__couple--image {
    width: 100%;
    line-height: 1;
}

.inv-participation__couple-image {
    display: block;
    width: var(--inv-participation-couple-image-desktop-width, 60%);
    max-width: 100%;
    height: auto;
    margin: 0 auto;
    object-fit: contain;
}

@media (max-width: 767.98px) {
    .inv-participation__couple-image {
        width: var(--inv-participation-couple-image-mobile-width, var(--inv-participation-couple-image-desktop-width, 60%));
    }
}

.inv-participation__decoration {
    width: 100%;
    margin: var(--inv-participation-decoration-top-space, 24px) auto var(--inv-participation-decoration-bottom-space, 24px);
    text-align: center;
    line-height: 1;
}

.inv-participation__decoration-image {
    display: block;
    width: var(--inv-participation-decoration-desktop-width, 48%);
    max-width: 100%;
    height: auto;
    margin: 0 auto;
    object-fit: contain;
}

@media (max-width: 767.98px) {
    .inv-participation__decoration-image {
        width: var(--inv-participation-decoration-mobile-width, var(--inv-participation-decoration-desktop-width, 80%));
    }
}

/* Keep the couple names on one row on tablet/desktop.
   Mobile keeps the existing wrapping behavior. */
@media (min-width: 768px) {
    .inv-participation__couple {
        white-space: nowrap;
    }
}

.inv-participation__lead,
.inv-participation__body,
.inv-participation__custom-text,
.inv-participation__reference,
.inv-participation__officiant,
.inv-participation__additional {
    max-width: 790px;
    margin-left: auto;
    margin-right: auto;
    font-family: var(--inv-body-font);
    font-size: clamp(16px, 1.45vw, 21px);
    line-height: 1.65;
    white-space: pre-line;
}

.inv-participation__lead {
    margin-top: 0;
    margin-bottom: 22px;
}

.inv-participation__body {
    margin-top: 0;
    margin-bottom: 0;
}

.inv-participation__custom-text {
    margin-top: 0;
    margin-bottom: 0;
}

.inv-participation__reference {
    margin-top: 18px;
    margin-bottom: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(15px, 1.25vw, 18px);
    font-style: italic;
    letter-spacing: .02em;
}

.inv-participation__officiant {
    margin-top: 30px;
    margin-bottom: 0;
}

.inv-participation__godparents-heading {
    margin: clamp(42px, 6vw, 72px) auto 24px;
    font-family: var(--inv-heading-font);
    font-size: clamp(18px, 1.8vw, 26px);
    font-weight: 400;
    line-height: 1.25;
}

.inv-participation__godparents {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 28px 44px;
    max-width: 820px;
    margin: clamp(42px, 6vw, 72px) auto 0;
    padding-top: clamp(34px, 4vw, 48px);
}

.inv-participation__godparents--with-heading {
    margin-top: 0;
    padding-top: 0;
}

.inv-participation__godparents > :last-child:nth-child(odd) {
    grid-column: 1 / -1;
    justify-self: center;
    width: min(100%, 320px);
}

.inv-participation__godparent-icon {
    display: block;
    width: clamp(52px, 5vw, 72px);
    height: clamp(52px, 5vw, 72px);
    margin: 0 auto 14px;
    object-fit: contain;
}

.inv-treatment-light .inv-participation__godparent-icon,
.inv-layout-surface-card .inv-participation__godparent-icon {
    filter: invert(1);
}

.inv-participation__godparent-label {
    margin-bottom: 8px;
    font-family: var(--inv-label-font);
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .14em;
    text-transform: uppercase;
}

.inv-participation__godparent-name {
    font-family: var(--inv-body-font);
    font-size: clamp(15px, 1.25vw, 19px);
    line-height: 1.5;
}

.inv-participation__additional {
    margin-top: clamp(36px, 5vw, 58px);
    margin-bottom: 0;
}

@media (max-width: 767.98px) {
    .inv-participation {
        padding: 82px 0 94px;
    }

    .inv-participation__inner {
        width: min(calc(100% - 38px), 680px);
    }

    .inv-participation__parents,
    .inv-participation__godparents {
        grid-template-columns: 1fr;
    }

    .inv-participation__parents {
        gap: 24px;
    }

    .inv-participation__godparents {
        gap: 24px;
    }

    .inv-participation__parent-name {
        font-size: var(--inv-section-mobile-body-size, var(--inv-section-body-size, clamp(16px, 1.4vw, 21px)));
    }
}

/* RSVP deadline: published Invitation Studio uses semantic status badges instead of disabled radios. */
.inv-rsvp-form__closed-message {
    font: 500 clamp(14px, 1.15vw, 17px)/1.55 var(--inv-body-font);
}

.inv-rsvp-form__closed-note {
    margin-top: 8px;
    font: 600 clamp(10px, .9vw, 12px)/1.45 var(--inv-label-font);
    letter-spacing: .08em;
    text-transform: uppercase;
    opacity: .72;
}

.inv-rsvp-attendance-status {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 96px;
    padding: 7px 12px;
    border: 1px solid transparent;
    border-radius: 999px;
    font: 700 11px/1.2 var(--inv-label-font);
    letter-spacing: .06em;
    white-space: nowrap;
}

.inv-rsvp-attendance-status--attending {
    color: #24613f;
    background: rgba(45, 132, 85, .10);
    border-color: rgba(45, 132, 85, .28);
}

.inv-rsvp-attendance-status--declined {
    color: #8b3737;
    background: rgba(173, 58, 58, .09);
    border-color: rgba(173, 58, 58, .25);
}

.inv-rsvp-attendance-status--pending {
    color: #805f12;
    background: rgba(196, 145, 25, .12);
    border-color: rgba(196, 145, 25, .30);
}

@media (max-width: 767.98px) {
    .inv-rsvp-person__top {
        grid-template-columns: 1fr;
    }
    .inv-rsvp-person__attendance {
        justify-content: flex-start;
    }
}


/* Alegría rótulo: full-cover background, no monogram, centered guest name. */
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper {
    padding: 0;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__card--layered {
    width: 100%;
    height: 100%;
    max-width: none;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope-frame--layered {
    width: 100%;
    height: 100%;
    min-height: 100%;
    aspect-ratio: auto;
    border: 0;
    box-shadow: none;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__background {
    object-fit: cover;
    object-position: center center;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered {
    top: 50%;
    bottom: auto;
    width: min(78%, 620px);
    transform: translate(-50%, -50%);
    background: rgba(247,240,232,.74);
    /* The guest label lives on a light paper/pill surface. Keep it isolated
       from --inv-text, which may intentionally be light for dark sections. */
    color: var(--inv-card-light-text, var(--inv-text));
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered .inv-rotulo-screen__guest-name {
    font-family: var(--inv-heading-font);
    color: inherit;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered .inv-rotulo-screen__present {
    color: inherit;
    opacity: .72;
}

html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__card--layered .inv-rotulo-screen__instruction {
    top: auto;
    bottom: max(28px, env(safe-area-inset-bottom));
    color: var(--inv-button-bg);
}

@media (max-width: 720px) {
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper {
        padding: 0;
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__card--layered {
        width: 100%;
        height: 100%;
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__envelope-frame--layered {
        width: 100%;
        height: 100%;
        min-height: 100%;
        aspect-ratio: auto;
    }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__guest--layered {
        top: 50%;
        width: min(84%, 480px);
        transform: translate(-50%, -50%);
    }
}


/* A1.6F/G - Rótulo instruction styles + position variants. */
html[data-inv-profile="alegria-editorial"]
.inv-rotulo-screen--editorial-paper
.inv-rotulo-screen__card--layered
.inv-rotulo-screen__instruction {
    z-index: 6;
    padding: 8px 14px;
    /* Match the instruction to the guest-name color used by the rótulo.
       The rótulo name sits on a light paper surface, so do not inherit the
       section text color (which can be white on dark sections). */
    color: var(--inv-card-light-text, var(--inv-text));
    background: rgba(247, 240, 232, .88);
    border: 1px solid rgba(61,20,25,.12);
    border-radius: 999px;
    text-shadow: none;
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
}

html[data-inv-profile="alegria-editorial"]
.inv-rotulo-screen--editorial-paper
.inv-rotulo-screen__card--layered
.inv-rotulo-screen__instruction--bottom {
    top: auto;
    bottom: max(24px, env(safe-area-inset-bottom));
}

html[data-inv-profile="alegria-editorial"]
.inv-rotulo-screen--editorial-paper
.inv-rotulo-screen__card--layered
.inv-rotulo-screen__instruction--center {
    top: 74%;
    bottom: auto;
    transform: translate(-50%, -50%);
}

html[data-inv-profile="alegria-editorial"]
.inv-rotulo-screen--editorial-paper
.inv-rotulo-screen__card--layered
.inv-rotulo-screen__instruction--top {
    top: 16%;
    bottom: auto;
}

@media (max-width: 720px) {
    html[data-inv-profile="alegria-editorial"]
    .inv-rotulo-screen--editorial-paper
    .inv-rotulo-screen__card--layered
    .inv-rotulo-screen__instruction {
        padding: 7px 11px;
        font-size: 9px;
        letter-spacing: .22em;
    }

    html[data-inv-profile="alegria-editorial"]
    .inv-rotulo-screen--editorial-paper
    .inv-rotulo-screen__card--layered
    .inv-rotulo-screen__instruction--bottom {
        bottom: max(18px, env(safe-area-inset-bottom));
    }

    html[data-inv-profile="alegria-editorial"]
    .inv-rotulo-screen--editorial-paper
    .inv-rotulo-screen__card--layered
    .inv-rotulo-screen__instruction--center {
        top: 76%;
    }

    html[data-inv-profile="alegria-editorial"]
    .inv-rotulo-screen--editorial-paper
    .inv-rotulo-screen__card--layered
    .inv-rotulo-screen__instruction--top {
        top: 14%;
    }
}

/* A1.6H - Mobile rótulo alignment */
@media (max-width: 720px) {
    html[data-inv-profile="alegria-editorial"]
    .inv-rotulo-screen--editorial-paper
    .inv-rotulo-screen__guest--layered {
        left: 50%;
        right: auto;
        top: 50%;
        bottom: auto;
        width: min(calc(100% - 44px), 420px);
        padding: 10px 16px 9px;
        transform: translate(-50%, -50%);
        border-radius: 999px;
        text-align: center;
    }

    html[data-inv-profile="alegria-editorial"]
    .inv-rotulo-screen--editorial-paper
    .inv-rotulo-screen__guest--layered
    .inv-rotulo-screen__guest-name {
        width: 100%;
        max-height: none;
        overflow: visible;
        font-family: var(--inv-heading-font);
        font-size: clamp(22px, 7vw, 30px);
        line-height: 1.05;
        text-align: center;
    }

    html[data-inv-profile="alegria-editorial"]
    .inv-rotulo-screen--editorial-paper
    .inv-rotulo-screen__guest--layered
    .inv-rotulo-screen__present {
        margin-top: 5px;
        font-size: 9px;
    }
}

/* Reusable Gallery sections */
.inv-gallery {
    padding: clamp(58px, 8vw, 112px) 0;
}
.inv-gallery__title {
    width: min(calc(100% - 48px), var(--inv-content-max));
    margin: 0 auto clamp(28px, 4vw, 52px);
    text-align: center;
    font-family: var(--inv-heading-font);
    font-size: clamp(30px, 4vw, 54px);
    font-weight: 400;
}
.inv-gallery__mosaic {
    width: min(calc(100% - 48px), var(--inv-content-max));
    margin: 0 auto;
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    grid-auto-flow: dense;
    grid-auto-rows: clamp(72px, 7vw, 118px);
    gap: clamp(6px, .65vw, 12px);
}
.inv-gallery__mosaic-item {
    grid-column: span 3;
    grid-row: span 3;
    margin: 0;
    min-width: 0;
    overflow: hidden;
}
.inv-gallery__mosaic-item:nth-child(10n + 2),
.inv-gallery__mosaic-item:nth-child(10n + 7) { grid-column: span 5; grid-row: span 3; }
.inv-gallery__mosaic-item:nth-child(10n + 3),
.inv-gallery__mosaic-item:nth-child(10n + 8) { grid-column: span 4; grid-row: span 4; }
.inv-gallery__mosaic-item:nth-child(10n + 6) { grid-column: span 6; grid-row: span 3; }
.inv-gallery__mosaic-item:nth-child(10n + 9) { grid-column: span 3; grid-row: span 4; }
.inv-gallery__image {
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: var(--inv-gallery-focal-x, 50%) var(--inv-gallery-focal-y, 50%);
}

/* A gallery with a single photograph should behave like a photograph, not like a crop cell.
   Keep the full image visible at its natural aspect ratio and only cap very tall portraits. */
.inv-gallery__mosaic.inv-gallery__mosaic--single-image {
    display: flex;
    align-items: center;
    justify-content: center;
    aspect-ratio: auto;
    grid-template-columns: none;
    grid-auto-rows: auto;
    gap: 0;
    overflow: visible;
}
.inv-gallery__mosaic--single-image .inv-gallery__mosaic-item,
.inv-gallery__mosaic--single-image .inv-gallery__mosaic-item:nth-child(n) {
    position: relative;
    inset: auto;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: auto;
    margin: 0;
    padding: 0;
    grid-column: auto;
    grid-row: auto;
    overflow: visible;
}
.inv-gallery__mosaic--single-image .inv-gallery__image {
    display: block;
    width: auto;
    max-width: 100%;
    height: auto;
    max-height: min(82svh, 900px);
    object-fit: contain;
}
.inv-gallery__polaroids {
    width: min(calc(100% - 48px), var(--inv-content-max));
    margin: 0 auto;
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: clamp(18px, 3vw, 44px);
    padding: clamp(8px, 2vw, 24px);
}
.inv-gallery__polaroid {
    margin: 0;
    width: clamp(230px, 31vw, 430px);
    flex: 0 0 auto;
    padding: clamp(10px, 1.2vw, 16px) clamp(10px, 1.2vw, 16px) clamp(34px, 3vw, 58px);
    background: #f8f7f2;
    box-shadow: 0 12px 28px rgba(16, 20, 24, .18);
    transform: rotate(var(--inv-gallery-rotate, 0deg));
}
.inv-gallery__polaroid .inv-gallery__image { aspect-ratio: 4 / 3; }
.inv-gallery__carousel {
    position: relative;
    width: 100%;
}
.inv-gallery__carousel-viewport {
    overflow: hidden;
    padding: 26px max(24px, calc((100vw - var(--inv-content-max)) / 2));
    touch-action: pan-y;
    cursor: grab;
    user-select: none;
    -webkit-user-select: none;
}
.inv-gallery__carousel-viewport:active { cursor: grabbing; }
.inv-gallery__carousel-track {
    display: flex;
    align-items: center;
    gap: clamp(14px, 2vw, 30px);
    width: max-content;
    transform: translate3d(0, 0, 0);
    will-change: transform;
}
.inv-gallery__carousel-item { flex: 0 0 auto; }
.inv-gallery--polaroidcarousel .inv-gallery__polaroid {
    width: clamp(250px, 34vw, 470px);
}
.inv-gallery__strip-item {
    width: clamp(240px, 34vw, 540px);
    height: clamp(300px, 38vw, 620px);
    margin: 0;
    overflow: hidden;
}
.inv-gallery__strip-item--wide { width: clamp(300px, 43vw, 680px); }
.inv-gallery__carousel-button {
    position: absolute;
    z-index: 2;
    top: 50%;
    width: 46px;
    height: 46px;
    margin-top: -23px;
    border: 0;
    border-radius: 50%;
    background: rgba(255, 255, 255, .88);
    color: #25282b;
    box-shadow: 0 8px 24px rgba(0, 0, 0, .18);
    font-size: 34px;
    line-height: 1;
    cursor: pointer;
}
.inv-gallery__carousel-button--prev { left: 18px; }
.inv-gallery__carousel-button--next { right: 18px; }
.inv-treatment-dark .inv-gallery__carousel-button,
.inv-treatment-ocean .inv-gallery__carousel-button { background: rgba(247, 245, 239, .92); }
.inv-treatment-paper .inv-gallery__mosaic,
.inv-treatment-paper .inv-gallery__polaroids,
.inv-treatment-paper .inv-gallery__carousel {
    background: rgba(255, 255, 255, .34);
}


/* Interactive centered photo stack. The top photo is consumable; once every photo has
   been dismissed the visible pile rebuilds automatically, matching the Post-it behavior. */
.inv-gallery-stack {
    width: min(calc(100% - 40px), 720px);
    margin: 0 auto;
    padding: clamp(6px, 1vw, 12px) 0 0;
}
.inv-gallery-stack__stage {
    position: relative;
    width: min(76vw, 520px);
    aspect-ratio: 4 / 5;
    margin: 0 auto;
    touch-action: pan-y;
    user-select: none;
    -webkit-user-select: none;
    cursor: grab;
    outline: none;
}
.inv-gallery-stack__stage:active { cursor: grabbing; }
.inv-gallery-stack__stage:focus-visible::after {
    content: "";
    position: absolute;
    inset: -12px;
    border: 2px solid currentColor;
    border-radius: 16px;
    opacity: .32;
    pointer-events: none;
}
.inv-gallery-stack__card {
    --inv-gallery-stack-drag-x: 0px;
    --inv-gallery-stack-drag-y: 0px;
    --inv-gallery-stack-drag-rotation: 0deg;
    position: absolute;
    left: 50%;
    top: 50%;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: clamp(7px, .8vw, 11px);
    box-sizing: border-box;
    background: #fbfaf7;
    border: 1px solid rgba(25, 27, 30, .08);
    border-radius: 3px;
    box-shadow: 0 18px 42px rgba(15, 18, 22, .22);
    transform-origin: 50% 56%;
    transition:
        transform 430ms cubic-bezier(.2,.78,.22,1),
        opacity 260ms ease,
        box-shadow 220ms ease;
    will-change: transform, opacity;
    overflow: hidden;
    pointer-events: none;
}
.inv-gallery-stack__card[data-stack-position="0"] {
    transform:
        translate(calc(-50% + var(--inv-gallery-stack-drag-x)), calc(-50% + var(--inv-gallery-stack-drag-y)))
        rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) + var(--inv-gallery-stack-drag-rotation)));
}
.inv-gallery-stack__card[data-stack-position="1"] {
    transform: translate(calc(-50% + 11px), calc(-50% + 13px)) rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) + 1.15deg)) scale(.985);
}
.inv-gallery-stack__card[data-stack-position="2"] {
    transform: translate(calc(-50% - 11px), calc(-50% + 24px)) rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) - 1.2deg)) scale(.968);
}
.inv-gallery-stack__card[data-stack-position="3"] {
    transform: translate(calc(-50% + 7px), calc(-50% + 34px)) rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) + .65deg)) scale(.95);
}
.inv-gallery-stack__card[data-stack-position="4"] {
    transform: translate(calc(-50% - 5px), calc(-50% + 43px)) rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) - .45deg)) scale(.932);
}
.inv-gallery-stack__card.is-active {
    pointer-events: auto;
    box-shadow: 0 24px 58px rgba(15, 18, 22, .28);
}
.inv-gallery-stack__card.is-active:active,
.inv-gallery-stack__card.is-dragging {
    transition: box-shadow 160ms ease;
    box-shadow: 0 30px 70px rgba(15, 18, 22, .32);
}
.inv-gallery-stack__card.is-behind { opacity: 1; }
.inv-gallery-stack__card.is-hidden {
    opacity: 0;
    transform: translate(-50%, calc(-50% + 48px)) scale(.92);
}
.inv-gallery-stack__card.is-exiting-left {
    opacity: 0;
    transform: translate(calc(-50% - 118vw), calc(-50% - 30px)) rotate(-16deg) scale(.96);
}
.inv-gallery-stack__card.is-exiting-right {
    opacity: 0;
    transform: translate(calc(-50% + 118vw), calc(-50% - 30px)) rotate(16deg) scale(.96);
}
.inv-gallery-stack__card.is-dismissed-left,
.inv-gallery-stack__card.is-dismissed-right {
    opacity: 0;
    pointer-events: none;
}
.inv-gallery-stack__card.is-dismissed-left {
    transform: translate(calc(-50% - 118vw), calc(-50% - 30px)) rotate(-16deg) scale(.96);
}
.inv-gallery-stack__card.is-dismissed-right {
    transform: translate(calc(-50% + 118vw), calc(-50% - 30px)) rotate(16deg) scale(.96);
}
.inv-gallery-stack__card.is-returning-left,
.inv-gallery-stack__card.is-returning-right {
    opacity: 0;
    pointer-events: none;
    transition:
        transform 520ms cubic-bezier(.18,.78,.22,1),
        opacity 360ms ease,
        box-shadow 220ms ease;
}
.inv-gallery-stack__card.is-returning-left {
    transform: translate(calc(-50% - 76vw), calc(-50% - 20px)) rotate(-13deg) scale(.95);
}
.inv-gallery-stack__card.is-returning-right {
    transform: translate(calc(-50% + 76vw), calc(-50% - 20px)) rotate(13deg) scale(.95);
}
.inv-gallery-stack__photo {
    position: relative;
    width: 100%;
    height: 100%;
    overflow: hidden;
    background: #eceae5;
}
.inv-gallery-stack__image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    -webkit-user-drag: none;
    user-select: none;
}
.inv-gallery-stack__open {
    position: absolute;
    z-index: 3;
    top: clamp(14px, 1.4vw, 18px);
    right: clamp(14px, 1.4vw, 18px);
    width: 38px;
    height: 38px;
    border: 0;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: rgba(255, 255, 255, .9);
    color: #25282b;
    box-shadow: 0 7px 20px rgba(0, 0, 0, .2);
    font-size: 20px;
    line-height: 1;
    cursor: pointer;
}
.inv-gallery-stack__open:hover,
.inv-gallery-stack__open:focus-visible { transform: scale(1.06); }
.inv-gallery-stack__nav {
    width: min(100%, 520px);
    margin: clamp(28px, 4vw, 44px) auto 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 16px;
}
.inv-gallery-stack__control {
    width: 46px;
    height: 46px;
    border: 0;
    border-radius: 50%;
    display: grid;
    place-items: center;
    background: rgba(255, 255, 255, .9);
    color: #25282b;
    box-shadow: 0 8px 24px rgba(0, 0, 0, .17);
    font-size: 34px;
    line-height: 1;
    cursor: pointer;
    transition: transform 160ms ease, opacity 160ms ease;
}
.inv-gallery-stack__control:hover,
.inv-gallery-stack__control:focus-visible { transform: translateY(-2px); }
.inv-gallery-stack__control:disabled {
    cursor: default;
    opacity: .42;
    transform: none;
}
.inv-gallery-stack__counter {
    min-width: 82px;
    text-align: center;
    font-size: 13px;
    letter-spacing: .08em;
    text-transform: uppercase;
    opacity: .72;
}
.inv-gallery-stack__counter--single { margin: 26px auto 0; }
.inv-gallery-stack.is-restoring .inv-gallery-stack__control { pointer-events: none; }
@media (prefers-reduced-motion: reduce) {
    .inv-gallery__carousel-track { transition: none !important; }
    .inv-gallery-stack__card,
    .inv-gallery-stack__control,
    .inv-gallery-stack__open { transition-duration: 1ms !important; }
}

@media (max-width: 767.98px) {
    .inv-gallery { padding: 54px 0; }
    .inv-gallery__image {
        object-position: var(--inv-gallery-focal-x-mobile, var(--inv-gallery-focal-x, 50%)) var(--inv-gallery-focal-y-mobile, var(--inv-gallery-focal-y, 50%));
    }
    .inv-gallery__title { width: min(calc(100% - 32px), var(--inv-content-max)); margin-bottom: 26px; }
    .inv-gallery__mosaic {
        width: min(calc(100% - 24px), var(--inv-content-max));
        grid-template-columns: repeat(6, minmax(0, 1fr));
        grid-auto-rows: 72px;
        gap: 6px;
    }
    .inv-gallery__mosaic.inv-gallery__mosaic--single-image {
        width: min(calc(100% - 20px), var(--inv-content-max));
        display: flex;
        grid-template-columns: none;
        grid-auto-rows: auto;
        gap: 0;
    }
    .inv-gallery__mosaic--single-image .inv-gallery__image {
        max-height: 80svh;
    }
    .inv-gallery__mosaic-item,
    .inv-gallery__mosaic-item:nth-child(n) { grid-column: span 3; grid-row: span 3; }
    .inv-gallery__mosaic-item:nth-child(5n + 2) { grid-column: span 6; grid-row: span 3; }
    .inv-gallery__polaroids { width: calc(100% - 24px); gap: 18px; padding: 4px; }
    .inv-gallery__polaroid { width: min(84vw, 360px); }
    .inv-gallery__carousel-viewport { padding: 20px 24px; }
    .inv-gallery__strip-item { width: 72vw; height: 62vw; min-height: 310px; }
    .inv-gallery__strip-item:nth-child(3n + 2) { width: 84vw; }
    .inv-gallery__carousel-button { display: none; }
    .inv-gallery-stack { width: min(calc(100% - 20px), 440px); }
    .inv-gallery-stack__stage { width: min(82vw, 390px); }
    .inv-gallery-stack__card { padding: 6px; }
    .inv-gallery-stack__card[data-stack-position="1"] { transform: translate(calc(-50% + 7px), calc(-50% + 10px)) rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) + .9deg)) scale(.983); }
    .inv-gallery-stack__card[data-stack-position="2"] { transform: translate(calc(-50% - 8px), calc(-50% + 18px)) rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) - 1deg)) scale(.965); }
    .inv-gallery-stack__card[data-stack-position="3"] { transform: translate(calc(-50% + 4px), calc(-50% + 26px)) rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) + .45deg)) scale(.947); }
    .inv-gallery-stack__card[data-stack-position="4"] { transform: translate(calc(-50% - 3px), calc(-50% + 33px)) rotate(calc(var(--inv-gallery-stack-base-rotation, 0deg) - .35deg)) scale(.929); }
    .inv-gallery-stack__nav { margin-top: 30px; }
}

/* Small galleries get deliberate compositions instead of a sparse repeating mosaic. */
.inv-gallery__mosaic--count-1 .inv-gallery__mosaic-item:nth-child(n) { grid-column: 2 / span 10; grid-row: span 6; }
.inv-gallery__mosaic--count-2 .inv-gallery__mosaic-item:nth-child(n) { grid-column: span 6; grid-row: span 5; }
.inv-gallery__mosaic--count-3 .inv-gallery__mosaic-item:nth-child(1) { grid-column: span 7; grid-row: span 6; }
.inv-gallery__mosaic--count-3 .inv-gallery__mosaic-item:nth-child(2),
.inv-gallery__mosaic--count-3 .inv-gallery__mosaic-item:nth-child(3) { grid-column: span 5; grid-row: span 3; }
@media (max-width: 767.98px) {
    .inv-gallery__mosaic--count-1 .inv-gallery__mosaic-item:nth-child(n) { grid-column: span 6; grid-row: span 5; }
    .inv-gallery__mosaic--count-2 .inv-gallery__mosaic-item:nth-child(n) { grid-column: span 3; grid-row: span 4; }
    .inv-gallery__mosaic--count-3 .inv-gallery__mosaic-item:nth-child(1) { grid-column: span 6; grid-row: span 4; }
    .inv-gallery__mosaic--count-3 .inv-gallery__mosaic-item:nth-child(2),
    .inv-gallery__mosaic--count-3 .inv-gallery__mosaic-item:nth-child(3) { grid-column: span 3; grid-row: span 3; }
}
.inv-gallery__polaroid { position: relative; }
.inv-gallery__polaroid::before {
    content: "";
    position: absolute;
    z-index: 1;
    top: -13px;
    left: 50%;
    width: 34%;
    height: 30px;
    transform: translateX(-50%) rotate(-1deg);
    background: rgba(196, 169, 119, .58);
    box-shadow: 0 2px 4px rgba(0, 0, 0, .05);
}
.inv-gallery--stripcarousel .inv-gallery__carousel-viewport { padding-left: 0; padding-right: 0; }
.inv-gallery--stripcarousel .inv-gallery__carousel-track { gap: 0; }

/* Full-screen lightbox shared by all gallery layouts. */
.inv-gallery__openable {
    cursor: zoom-in;
    outline: none;
}
.inv-gallery__openable:focus-visible {
    box-shadow: 0 0 0 3px var(--inv-accent, #b48a50);
}
body.inv-gallery-lightbox-open { overflow: hidden; }
.inv-gallery-lightbox[hidden] { display: none !important; }
.inv-gallery-lightbox {
    position: fixed;
    inset: 0;
    z-index: 100200;
    display: grid;
    place-items: center;
    padding: 24px clamp(66px, 7vw, 118px);
    color: #fff;
    isolation: isolate;
}
.inv-gallery-lightbox__backdrop {
    position: absolute;
    inset: 0;
    z-index: 0;
    width: 100%;
    height: 100%;
    border: 0;
    padding: 0;
    background: rgba(0, 0, 0, .96);
    cursor: zoom-out;
}
.inv-gallery-lightbox__stage {
    position: relative;
    z-index: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: 100%;
    min-width: 0;
    min-height: 0;
    pointer-events: none;
}
.inv-gallery-lightbox__image {
    display: block;
    max-width: 100%;
    max-height: calc(100svh - 48px);
    width: auto;
    height: auto;
    object-fit: contain;
    box-shadow: 0 18px 70px rgba(0, 0, 0, .42);
    user-select: none;
    -webkit-user-drag: none;
    pointer-events: auto;
    cursor: default;
}
.inv-gallery-lightbox__counter {
    position: absolute;
    left: 50%;
    bottom: 8px;
    transform: translateX(-50%);
    min-width: 48px;
    padding: 5px 10px;
    border-radius: 999px;
    background: rgba(0, 0, 0, .52);
    color: rgba(255, 255, 255, .88);
    font-family: var(--inv-body-font);
    font-size: 12px;
    letter-spacing: .08em;
    text-align: center;
}
.inv-gallery-lightbox__close,
.inv-gallery-lightbox__nav {
    position: fixed;
    z-index: 2;
    border: 0;
    color: #fff;
    background: transparent;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.inv-gallery-lightbox__close {
    top: 12px;
    right: 18px;
    width: 52px;
    height: 52px;
    font: 300 38px/1 Arial, sans-serif;
    opacity: .82;
}
.inv-gallery-lightbox__nav {
    top: 50%;
    width: 58px;
    height: 82px;
    margin-top: -41px;
    font: 300 66px/1 Arial, sans-serif;
    opacity: .72;
}
.inv-gallery-lightbox__close:hover,
.inv-gallery-lightbox__close:focus-visible,
.inv-gallery-lightbox__nav:hover,
.inv-gallery-lightbox__nav:focus-visible { opacity: 1; outline: none; }
.inv-gallery-lightbox__nav--prev { left: 12px; }
.inv-gallery-lightbox__nav--next { right: 12px; }
@media (max-width: 767.98px) {
    .inv-gallery-lightbox { padding: 54px 10px 42px; }
    .inv-gallery-lightbox__image { max-height: calc(100svh - 96px); max-width: 100%; }
    .inv-gallery-lightbox__close { top: 4px; right: 4px; width: 48px; height: 48px; font-size: 34px; }
    .inv-gallery-lightbox__nav { width: 46px; height: 70px; margin-top: -35px; font-size: 54px; text-shadow: 0 1px 12px rgba(0, 0, 0, .65); }
    .inv-gallery-lightbox__nav--prev { left: 0; }
    .inv-gallery-lightbox__nav--next { right: 0; }
    .inv-gallery-lightbox__counter { bottom: 2px; }
}

/* Nuestra Historia: questionnaire moments can be shown as a navigable slider.
   Moments without a photo intentionally use a lightweight editorial icon instead. */
.inv-story {
    padding: clamp(72px, 8vw, 118px) 0;
}
.inv-story__title {
    margin-bottom: clamp(34px, 5vw, 64px);
    text-align: center;
}
.inv-story__inner--slider .inv-story__title {
    margin-bottom: clamp(18px, 2.2vw, 28px);
}
.inv-story__video-wrap {
    width: min(1120px, 92vw);
    margin: 0 auto;
}
.inv-story__video {
    display: block;
    width: 100%;
    max-height: min(78vh, 820px);
    margin: 0 auto;
    background: #000;
    border-radius: 14px;
    box-shadow: 0 22px 58px rgba(0, 0, 0, .16);
    object-fit: contain;
}
.inv-story__video-status {
    padding: 42px 24px;
    border: 1px solid currentColor;
    border-radius: 12px;
    opacity: .72;
    text-align: center;
}

/* Moment slider */
.inv-story-slider {
    width: min(1120px, 92vw);
    margin: 0 auto;
}
.inv-story-slider__viewport {
    overflow: hidden;
    outline: none;
    touch-action: pan-y;
    transition: height .28s ease;
}
.inv-story-slider__viewport:focus-visible {
    outline: 1px solid currentColor;
    outline-offset: 10px;
}
.inv-story-slider__track {
    display: flex;
    align-items: flex-start;
    width: 100%;
    transition: transform .58s cubic-bezier(.22, .61, .36, 1);
    will-change: transform;
}
.inv-story-slider__slide {
    display: grid;
    flex: 0 0 100%;
    grid-template-columns: minmax(0, .92fr) minmax(0, 1.08fr);
    gap: clamp(36px, 6vw, 86px);
    align-items: center;
    min-width: 0;
    padding: 2px clamp(4px, 1vw, 12px) 8px;
}
.inv-story-slider__slide--text-only {
    grid-template-columns: 1fr;
}
.inv-story-slider__slide--text-only .inv-story-slider__copy {
    width: min(900px, 100%);
    margin-inline: auto;
}
.inv-story-slider__visual {
    display: grid;
    place-items: center;
    min-width: 0;
}
.inv-story-slider__visual.has-photo {
    position: relative;
}
.inv-story-slider__image {
    display: block;
    width: 100%;
    aspect-ratio: 4 / 3;
    object-fit: cover;
    border-radius: 2px;
    box-shadow: 0 18px 48px rgba(0, 0, 0, .12);
}
.inv-story-slider__visual.has-icon {
    min-height: clamp(250px, 34vw, 430px);
}
.inv-story-slider__icon {
    display: grid;
    place-items: center;
    width: clamp(150px, 18vw, 220px);
    aspect-ratio: 1;
    border: 1px solid currentColor;
    border-radius: 50%;
    font-family: Georgia, "Times New Roman", serif;
    font-size: clamp(68px, 9vw, 108px);
    font-weight: 300;
    line-height: 1;
    opacity: .82;
}
.inv-story-slider__copy {
    min-width: 0;
    text-align: left;
}
.inv-story-slider__moment-title {
    margin: 0 0 22px;
    font-size: clamp(30px, 3.4vw, 48px);
    line-height: 1.12;
}
.inv-story__voice + .inv-story__voice {
    margin-top: 24px;
    padding-top: 22px;
    border-top: 1px solid currentColor;
    border-top-color: rgba(128, 128, 128, .24);
}
.inv-story__voice-name {
    margin-bottom: 9px;
    font-family: var(--inv-heading-font, inherit);
    font-size: clamp(14px, 1.1vw, 17px);
    font-weight: 600;
    letter-spacing: .08em;
    text-transform: uppercase;
    opacity: .82;
}
.inv-story__moment-text {
    margin: 0;
    font-size: clamp(15px, 1.35vw, 18px);
    line-height: 1.78;
    white-space: pre-line;
}
.inv-story__moment-text--together {
    max-width: 60ch;
}
.inv-story-slider__controls {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 18px;
    margin: 0 0 clamp(28px, 4vw, 44px);
}
.inv-story-slider__arrow,
.inv-story-slider__dot {
    appearance: none;
    border: 0;
    color: inherit;
    background: transparent;
}
.inv-story-slider__arrow {
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    padding: 0;
    border: 1px solid currentColor;
    border-radius: 50%;
    font-size: 22px;
    line-height: 1;
    cursor: pointer;
    opacity: .74;
    transition: opacity .2s ease, transform .2s ease;
}
.inv-story-slider__arrow:hover,
.inv-story-slider__arrow:focus-visible {
    opacity: 1;
    transform: translateY(-1px);
    outline: none;
}
.inv-story-slider__dots {
    display: flex;
    align-items: center;
    gap: 10px;
}
.inv-story-slider__dot {
    width: 8px;
    height: 8px;
    padding: 0;
    border: 1px solid currentColor;
    border-radius: 50%;
    cursor: pointer;
    opacity: .46;
    transition: opacity .2s ease, background-color .2s ease, transform .2s ease;
}
.inv-story-slider__dot.is-active {
    background: currentColor;
    opacity: .9;
    transform: scale(1.18);
}
.inv-story-slider__dot:focus-visible {
    outline: 1px solid currentColor;
    outline-offset: 4px;
}

/* Legacy cards layout, preserved as a selectable option. */
.inv-story__moments {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: clamp(22px, 4vw, 54px);
    width: min(1160px, 92vw);
    margin: 0 auto;
}
.inv-story__moment {
    min-width: 0;
}
.inv-story__moment--text-only {
    grid-column: 1 / -1;
    width: min(900px, 100%);
    justify-self: center;
}
.inv-story__moment-visual {
    display: grid;
    place-items: center;
    min-height: 240px;
}
.inv-story__moment-image {
    display: block;
    width: 100%;
    aspect-ratio: 4 / 5;
    object-fit: cover;
    border-radius: 10px;
}
.inv-story__moment-icon {
    display: grid;
    place-items: center;
    width: min(190px, 60%);
    aspect-ratio: 1;
    border: 1px solid currentColor;
    border-radius: 50%;
    font-family: Georgia, "Times New Roman", serif;
    font-size: clamp(58px, 7vw, 92px);
    opacity: .78;
}
.inv-story__moment-title {
    margin: 18px 0 8px;
    font-size: clamp(22px, 2.4vw, 34px);
}

@media (max-width: 720px) {
    .inv-story { padding: 64px 0 72px; }
    .inv-story__title { margin-bottom: 34px; }
    .inv-story-slider { width: min(92vw, 620px); }
    .inv-story-slider__slide {
        grid-template-columns: 1fr;
        gap: 28px;
        padding-inline: 0;
    }
    .inv-story-slider__slide--text-only .inv-story-slider__copy {
        width: 100%;
    }
    .inv-story-slider__image {
        aspect-ratio: 4 / 3;
        border-radius: 0;
    }
    .inv-story-slider__visual.has-icon {
        min-height: 190px;
    }
    .inv-story-slider__icon {
        width: 160px;
        font-size: 74px;
    }
    .inv-story-slider__copy { text-align: center; }
    .inv-story-slider__moment-title {
        margin-bottom: 18px;
        font-size: clamp(28px, 8vw, 38px);
    }
    .inv-story__voice-name { font-size: 15px; }
    .inv-story__moment-text {
        font-size: 15px;
        line-height: 1.72;
    }
    .inv-story__moment-text--together { margin-inline: auto; }
    .inv-story__inner--slider .inv-story__title { margin-bottom: 16px; }
    .inv-story-slider__controls { margin: 0 0 24px; }
    .inv-story-slider__arrow { width: 42px; height: 42px; }
    .inv-story__moments { grid-template-columns: 1fr; gap: 38px; }
    .inv-story__video-wrap { width: min(94vw, 720px); }
    .inv-story__video { border-radius: 8px; max-height: 72vh; }
}

@media (prefers-reduced-motion: reduce) {
    .inv-story-slider__track { transition: none !important; }
    .inv-story-slider__arrow,
    .inv-story-slider__dot { transition: none !important; }
}


/* Square gallery mosaic: dynamically positioned by the runtime so every photo count fills
   one complete square without the empty cells produced by the old fixed 12-column pattern. */
.inv-gallery__mosaic.inv-gallery__mosaic--square {
    position: relative;
    display: block;
    aspect-ratio: 1 / 1;
    overflow: hidden;
    grid-template-columns: none;
    grid-auto-rows: auto;
    gap: 0;
}
.inv-gallery__mosaic--square .inv-gallery__mosaic-item,
.inv-gallery__mosaic--square .inv-gallery__mosaic-item:nth-child(n) {
    position: absolute;
    box-sizing: border-box;
    margin: 0;
    padding: clamp(2px, .28vw, 4px);
    grid-column: auto;
    grid-row: auto;
}
.inv-gallery__mosaic--square .inv-gallery__image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
@media (max-width: 767.98px) {
    .inv-gallery__mosaic.inv-gallery__mosaic--square {
        aspect-ratio: 1 / 1;
        grid-template-columns: none;
        grid-auto-rows: auto;
        gap: 0;
    }
    .inv-gallery__mosaic--square .inv-gallery__mosaic-item,
    .inv-gallery__mosaic--square .inv-gallery__mosaic-item:nth-child(n) {
        padding: 2px;
        grid-column: auto;
        grid-row: auto;
    }
}

/* A2.4H - Curated gallery grid. Each selected template covers the complete grid. */
.inv-gallery__mosaic.inv-gallery__curated-grid {
    display: grid;
    grid-auto-flow: initial;
    grid-auto-rows: auto;
    overflow: hidden;
    gap: clamp(5px, .55vw, 9px);
}
.inv-gallery__curated-grid .inv-gallery__mosaic-item,
.inv-gallery__curated-grid .inv-gallery__mosaic-item:nth-child(n) {
    position: relative;
    min-width: 0;
    min-height: 0;
    margin: 0;
    padding: 0;
    overflow: hidden;
}
.inv-gallery__curated-grid .inv-gallery__image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
@media (max-width: 767.98px) {
    .inv-gallery__mosaic.inv-gallery__curated-grid {
        width: min(calc(100% - 20px), var(--inv-content-max));
        height: min(var(--inv-gallery-mobile-height, 112vw), 760px);
        aspect-ratio: auto !important;
        gap: 4px;
        grid-template-columns: repeat(12, minmax(0, 1fr));
        grid-template-rows: var(--inv-gallery-mobile-rows, auto) !important;
        grid-auto-rows: auto;
    }
    .inv-gallery__curated-grid .inv-gallery__mosaic-item,
    .inv-gallery__curated-grid .inv-gallery__mosaic-item:nth-child(n) {
        padding: 0;
        grid-column: var(--inv-gallery-mobile-column) !important;
        grid-row: var(--inv-gallery-mobile-row) !important;
    }
}

/* Additional events: event-specific dress code */
.inv-additional-event-dresscode {
    margin-top: clamp(14px, 1.8vw, 22px);
    padding-top: 0;
}

.inv-additional-event-dresscode__label {
    margin: 0;
    font-family: var(--inv-label-font);
    font-size: clamp(11px, .9vw, 13px);
    font-weight: 600;
    letter-spacing: .18em;
    text-transform: uppercase;
    opacity: .72;
}

.inv-additional-event-dresscode__name {
    margin: 9px 0 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(20px, 1.8vw, 28px);
    line-height: 1.25;
}

.inv-additional-event-dresscode__details {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: clamp(18px, 2.5vw, 32px);
    margin-top: 18px;
}

.inv-additional-event-dresscode__audience--both {
    grid-column: 1 / -1;
    justify-self: center;
    width: min(100%, 360px);
    text-align: center;
}

.inv-additional-event-dresscode__audience-label {
    margin: 0;
    font-family: var(--inv-label-font);
    font-size: clamp(12px, 1vw, 14px);
    font-weight: 600;
    letter-spacing: .08em;
}

.inv-additional-event-dresscode__text,
.inv-additional-event-dresscode__reserved {
    margin: 7px 0 0;
    font-size: clamp(13px, 1.05vw, 15px);
    line-height: 1.5;
}

.inv-additional-event-dresscode__reserved {
    opacity: .7;
}

.inv-additional-event-dresscode__action {
    margin-top: 12px;
}

.inv-additional-event-dresscode__action--detail + .inv-additional-event-dresscode__action {
    margin-top: 10px;
}

.inv-additional-event-dresscode__action .inv-button {
    margin-top: 0;
}

/* Additional-event Dress Code detail buttons must follow the immediate
   section/card surface. The previous rule forced --inv-button-bg and could
   make VER DETALLE effectively invisible on light themed event sections. */
.inv-additional-event-dresscode__action .inv-button--secondary {
    background: var(--section-btn-secondary-bg, transparent);
    border-color: var(--section-btn-secondary-border, var(--section-btn-primary-border, var(--inv-button-bg)));
    color: var(--section-btn-secondary-text, var(--section-btn-primary-border, var(--inv-button-bg)));
}

.inv-additional-event-dresscode__action .inv-button--secondary:hover,
.inv-additional-event-dresscode__action .inv-button--secondary:focus-visible {
    background: var(--section-btn-secondary-hover-bg, var(--section-btn-primary-hover-bg, var(--inv-button-bg)));
    border-color: var(--section-btn-secondary-hover-border, var(--section-btn-primary-hover-border, var(--inv-button-bg)));
    color: var(--section-btn-secondary-hover-text, var(--section-btn-primary-hover-text, var(--inv-button-text)));
}

.inv-additional-event-row .inv-event-row__time .inv-additional-event-dresscode {
    width: 100%;
    font-family: var(--inv-body-font);
    letter-spacing: normal;
    text-align: right;
}

.inv-additional-event-row .inv-event-row__time .inv-additional-event-dresscode__name {
    font-size: clamp(18px, 1.5vw, 24px);
}

.inv-additional-event-row .inv-event-row__time .inv-additional-event-dresscode__details {
    grid-template-columns: 1fr;
    gap: 14px;
    margin-top: 14px;
}

.inv-additional-event-row .inv-event-row__time .inv-additional-event-dresscode__action {
    display: flex;
    justify-content: flex-end;
}

.inv-additional-event-dresscode--classic {
    width: min(100%, 430px);
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}

.inv-additional-event-dresscode--classic .inv-additional-event-dresscode__details {
    grid-template-columns: 1fr;
    gap: 18px;
}

@media (max-width: 720px) {
    .inv-additional-event-dresscode__details {
        grid-template-columns: 1fr;
        gap: 18px;
    }

    .inv-additional-event-row .inv-event-row__time .inv-additional-event-dresscode {
        text-align: center;
    }

    .inv-additional-event-row .inv-event-row__time .inv-additional-event-dresscode__action {
        justify-content: center;
    }
}

/* Eventos adicionales: el tamaño de Texto de la sección no debe modificar
   el tamaño de los botones. Ver ubicación y las acciones del código de
   vestimenta utilizan Apariencia > Botones en desktop y mobile. Esta regla
   va después de los overrides de tipografía de sección para vencerlos sin
   tocar los colores ni los tratamientos de cada botón. */
html .inv-section.inv-additional-events .inv-button {
    font-size: var(--inv-button-font-size, 11px);
}

@media (max-width: 720px) {
    html .inv-section.inv-additional-events .inv-button {
        font-size: var(--inv-button-mobile-font-size, var(--inv-button-font-size, 11px));
    }
}

/* A2.4Q - itinerary / additional events icon timeline layout */
.inv-events--icon-timeline .inv-section__inner {
    width: min(calc(100% - 48px), 1080px);
}

.inv-events-icon__inner {
    text-align: center;
}

.inv-events-icon__title {
    margin-bottom: 0;
}

.inv-events-icon__title-rule {
    display: block;
    width: 84px;
    height: 1px;
    margin: 18px auto 28px;
    /* Use the actual section/card foreground color, including custom themes. */
    background: currentColor;
    opacity: 0.7;
}

.inv-events-icon__meta {
    max-width: 760px;
    margin: 0 auto 42px;
}

.inv-events-icon__date-block,
.inv-events-icon__location {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
}

.inv-events-icon__location + .inv-events-icon__date-block,
.inv-events-icon__date-block + .inv-events-icon__location {
    margin-top: 14px;
}

.inv-events-icon__weekday,
.inv-events-icon__venue {
    margin: 0;
    font-family: var(--inv-heading-font);
    letter-spacing: 0.04em;
}

.inv-events-icon__weekday {
    font-size: clamp(1.75rem, 2.2vw, 2.6rem);
}

.inv-events-icon__venue {
    font-size: clamp(1.75rem, 2.2vw, 2.6rem);
}

[data-section="events"] .inv-events-icon__venue {
    font-size: var(--inv-event-title-size, clamp(1.75rem, 2.2vw, 2.6rem));
}

.inv-events-icon__date-text,
.inv-events-icon__time {
    margin: 0;
    font-family: var(--inv-label-font);
    font-size: clamp(1rem, 1.5vw, 1.35rem);
    letter-spacing: 0.18em;
    text-transform: uppercase;
}

.inv-events-icon__address,
.inv-events-icon__description,
.inv-events-icon__item-address,
.inv-events-icon__item-date {
    margin: 0;
    font-size: 1rem;
    line-height: 1.75;
    opacity: 0.86;
}

.inv-events-icon__action,
.inv-events-icon__item-action {
    margin-top: 12px;
}

.inv-events-icon__action .inv-button,
.inv-events-icon__item-action .inv-button {
    border-radius: var(--inv-button-radius);
}

.inv-events-icon__surface {
    position: relative;
    padding: 18px 12px 8px;
}

.inv-events-icon__timeline {
    position: relative;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    gap: 28px;
    align-items: start;
}

/* A2.7B: draw the timeline as individual connectors instead of one continuous
   line. This leaves a real transparent gap around each icon, so transparent
   PNG/WebP artwork is never crossed by the timeline and does not need a solid
   background mask. */
.inv-events-icon__timeline::before {
    display: none;
}

.inv-events-icon__item {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 18px;
    padding: 0 12px;
    z-index: 1;
}

@media (min-width: 721px) {
    .inv-events-icon__item::before,
    .inv-events-icon__item::after {
        content: "";
        position: absolute;
        top: 68px;
        height: 1px;
        /* Inherit the same foreground as the event text (e.g. #f4f1ec). */
        background: currentColor;
        opacity: 0.75;
        pointer-events: none;
        z-index: -1;
    }

    /* 96px icon + breathing room: the line stops before the artwork. */
    .inv-events-icon__item::before {
        left: -14px;
        right: calc(50% + 64px);
    }

    .inv-events-icon__item::after {
        left: calc(50% + 64px);
        right: -14px;
    }

    .inv-events-icon__item:first-child::before,
    .inv-events-icon__item:last-child::after {
        display: none;
    }

}

.inv-events-icon__icon-wrap {
    position: relative;
    padding: 0 8px;
    background: transparent;
}

.inv-has-paper-surface .inv-events-icon__icon-wrap {
    background: transparent;
}

.inv-events-icon__icon {
    width: 96px;
    height: 96px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.inv-events-icon__icon-image {
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.inv-events-icon__details {
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
}

.inv-events-icon__event-title,
.inv-events-icon__item-venue {
    margin: 0;
    font-family: var(--inv-heading-font);
    line-height: 1.3;
}

.inv-events-icon__event-title {
    font-size: var(--inv-event-title-size, clamp(1.35rem, 1.7vw, 1.9rem));
}

.inv-events-icon__item-venue {
    font-size: clamp(1.35rem, 1.7vw, 1.9rem);
}

.inv-events-icon__item-location {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    max-width: 100%;
}

.inv-events-icon__item-venue,
.inv-events-icon__item-address {
    max-width: 100%;
}

.inv-additional-event-dresscode--icon {
    margin-top: 4px;
    padding-top: 0;
    border-top: 0;
    text-align: center;
}

.inv-additional-event-dresscode--icon .inv-additional-event-dresscode__label,
.inv-additional-event-dresscode--icon .inv-additional-event-dresscode__name,
.inv-additional-event-dresscode--icon .inv-additional-event-dresscode__audience-label,
.inv-additional-event-dresscode--icon .inv-additional-event-dresscode__text,
.inv-additional-event-dresscode--icon .inv-additional-event-dresscode__reserved {
    text-align: center;
}

.inv-additional-event-dresscode--icon .inv-additional-event-dresscode__details {
    justify-content: center;
}

@media (max-width: 920px) {
    .inv-events-icon__timeline {
        grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    }
}

@media (max-width: 720px) {
    .inv-events--icon-timeline .inv-section__inner {
        width: min(calc(100% - 32px), 680px);
    }

    .inv-events-icon__meta {
        margin-bottom: 34px;
    }

    .inv-events-icon__timeline {
        grid-template-columns: 1fr;
        gap: 32px;
    }

    .inv-events-icon__timeline::before,
    .inv-events-icon__item::before,
    .inv-events-icon__item::after {
        display: none;
    }

    .inv-events-icon__item {
        padding: 0;
    }

    .inv-events-icon__icon-wrap {
        padding: 0;
        background: transparent;
    }

    .inv-events-icon__icon {
        width: 82px;
        height: 82px;
    }

    .inv-events-icon__event-title {
        font-size: var(--inv-event-mobile-title-size, var(--inv-event-title-size, 1.5rem));
    }

    .inv-events-icon__item-venue {
        font-size: 1.5rem;
    }

    [data-section="events"] .inv-events-icon__venue {
        font-size: var(--inv-event-mobile-title-size, var(--inv-event-title-size, clamp(1.75rem, 7vw, 2.35rem)));
    }

    .inv-events-icon__date-text,
    .inv-events-icon__time {
        font-size: 0.95rem;
        letter-spacing: 0.12em;
    }
}

/* A2.5G (re-applied on A2.5I) - RSVP desktop field layout
   Keep mobile stacked, but present Reception/Banquet detail questions as
   clear label/control rows on wider screens instead of pairing unrelated
   questions side by side. */
@media (min-width: 721px) {
    .inv-rsvp-person__details {
        grid-template-columns: minmax(0, 1fr);
        gap: 0;
    }

    .inv-rsvp-person__details > .inv-rsvp-field,
    .inv-rsvp-person__details > .inv-rsvp-field:only-child {
        grid-column: 1 / -1;
        grid-template-columns: minmax(220px, .9fr) minmax(280px, 1.1fr);
        align-items: center;
        gap: 10px 32px;
        padding: 18px 0;
        border-bottom: 1px solid rgba(25, 25, 25, .10);
    }

    .inv-rsvp-person__details > .inv-rsvp-field:first-child {
        padding-top: 0;
    }

    .inv-rsvp-person__details > .inv-rsvp-field:last-child {
        padding-bottom: 0;
        border-bottom: 0;
    }

    .inv-rsvp-person__details > .inv-rsvp-field > .inv-rsvp-field__label {
        grid-column: 1;
        grid-row: 1;
        align-self: center;
    }

    .inv-rsvp-person__details > .inv-rsvp-field > .inv-rsvp-field__control,
    .inv-rsvp-person__details > .inv-rsvp-field > .inv-rsvp-inline-choices {
        grid-column: 2;
    }

    .inv-rsvp-person__details > .inv-rsvp-field > .inv-rsvp-field__textarea {
        grid-column: 2;
        margin-top: 2px;
    }
}

/* A2.6X - Itinerary actions participate in the surface-aware button system.
   A2.5Q used to force every wedding-day itinerary action to a legacy outline
   based on --inv-button-bg. That bypassed the light/dark palettes introduced
   by A2.6P. Primary itinerary actions now inherit the palette selected by the
   section surface; explicit secondary actions keep the shared outline style. */
.inv-events:not(.inv-additional-events) .inv-button:not(.inv-button--secondary) {
    background: var(--section-btn-primary-bg, var(--inv-button-bg));
    border-width: var(--section-btn-border-width, 1px);
    border-style: solid;
    border-color: var(--section-btn-primary-border, var(--inv-button-bg));
    color: var(--section-btn-primary-text, var(--inv-button-text));
}

.inv-events:not(.inv-additional-events) .inv-button:not(.inv-button--secondary):hover,
.inv-events:not(.inv-additional-events) .inv-button:not(.inv-button--secondary):focus-visible {
    background: var(--section-btn-primary-hover-bg, var(--section-btn-primary-bg, var(--inv-button-bg)));
    border-color: var(--section-btn-primary-hover-border, var(--section-btn-primary-border, var(--inv-button-bg)));
    color: var(--section-btn-primary-hover-text, var(--section-btn-primary-text, var(--inv-button-text)));
    opacity: var(--section-btn-hover-opacity, .88);
}

/* A2.5V - Local paper-card treatments.
   "Mar 1/Mar 2 + tarjeta de papel" keeps the backdrop on the section and
   renders the stationery on the actual inner card, not on the entire grid. */
.inv-local-paper-card.inv-has-paper-surface {
    background: transparent;
    border: 0;
    color: var(--inv-text);
    box-shadow: 0 14px 36px rgba(31, 27, 24, .11);
}

/* A2.7G: paper is a light immediate surface even when the section theme is
   dark. Text and buttons inside the local paper card therefore use the light
   palette rather than inheriting the section palette. */
.inv-treatment-dark .inv-local-paper-card.inv-has-paper-surface,
.inv-treatment-ocean .inv-local-paper-card.inv-has-paper-surface {
    color: var(--inv-text);
    --section-btn-primary-bg: var(--inv-button-light-bg);
    --section-btn-primary-text: var(--inv-button-light-text);
    --section-btn-primary-border: var(--inv-button-light-border);
    --section-btn-primary-hover-bg: var(--inv-button-light-hover-bg);
    --section-btn-primary-hover-text: var(--inv-button-light-hover-text);
    --section-btn-primary-hover-border: var(--inv-button-light-hover-border);
    --section-btn-secondary-bg: transparent;
    --section-btn-secondary-text: var(--inv-button-light-border);
    --section-btn-secondary-border: var(--inv-button-light-border);
    --section-btn-secondary-hover-bg: var(--inv-button-light-secondary-hover-bg);
    --section-btn-secondary-hover-text: var(--inv-button-light-secondary-hover-text);
    --section-btn-secondary-hover-border: var(--inv-button-light-secondary-hover-border);
    --section-btn-border-width: var(--inv-button-light-border-width);
    --section-btn-hover-opacity: var(--inv-button-light-hover-opacity);
}

.inv-local-paper-card.inv-has-paper-surface::before {
    z-index: 0;
    opacity: 1;
    background-size: cover;
    background-position: center;
}

.inv-local-paper-card.inv-has-paper-surface > * {
    position: relative;
    z-index: 1;
}

/* GuestBook: when a real paper image is assigned to the selected content-card
   treatment, the artwork itself is the card. Keep the surrounding container
   fully transparent and remove the rectangular elevation so transparent/
   torn paper edges can reveal the section background naturally. */
.inv-guestbook__card.inv-local-paper-card.inv-has-paper-surface {
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
}

.inv-gifts__grid--paper-cards .inv-gift-card.inv-has-paper-surface {
    border: 0;
    background: transparent;
    color: var(--inv-text);
    box-shadow: -12px 14px 28px -14px rgba(31, 27, 24, .22);
}

.inv-gifts__grid--paper-cards .inv-gift-card.inv-has-paper-surface::before {
    inset: -3% -10%;
    z-index: 0;
    opacity: 1;
    background-size: cover;
    background-position: center;
}

@media (max-width: 720px) {
    .inv-local-paper-card.inv-has-paper-surface::before,
    .inv-gifts__grid--paper-cards .inv-gift-card.inv-has-paper-surface::before {
        background-image: var(--inv-paper-surface-mobile, var(--inv-paper-surface));
    }
}


/* Gift registry paper composition.
   The registry options themselves are the stationery cards. Do not draw an
   additional rectangular container behind them; the section background must
   remain visible around each individual card and its shadow. */
.inv-gifts__grid--outer-card {
    padding: 0;
    background: transparent;
    border: 0;
    border-radius: 0;
    box-shadow: none;
}

.inv-gifts__grid--paper-cards .inv-gift-card {
    border: 0 !important;
    background: transparent !important;
    box-shadow: -12px 14px 28px -14px rgba(31, 27, 24, .22);
}

.inv-gifts__grid--paper-cards .inv-gift-card.inv-has-paper-surface::before {
    inset: -3% -10%;
    z-index: 0;
    opacity: 1;
    background-size: cover;
    background-position: center;
}

.inv-gifts__grid--paper-cards .inv-gift-card.inv-has-paper-surface > * {
    position: relative;
    z-index: 1;
}

@media (max-width: 720px) {
    .inv-gifts__grid--outer-card {
        padding: 0;
    }
}


/* A2.6B - Card Menu stationery suite: editorial paper collage + responsive modal. */
.inv-card-menu {
    position: relative;
    min-height: 100svh;
    overflow: hidden;
    padding: clamp(46px, 6vw, 94px) clamp(18px, 4.6vw, 70px) clamp(62px, 8vw, 118px);
    background: var(--inv-card-menu-background-color, var(--inv-bg-light));
    isolation: isolate;
}

.inv-card-menu::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -2;
    background-image: var(--inv-card-menu-background, none);
    background-size: var(--inv-card-menu-background-size, cover);
    background-repeat: var(--inv-card-menu-background-repeat, no-repeat);
    background-position: var(--inv-card-menu-background-position, center);
    opacity: var(--inv-card-menu-bg-opacity, .42);
}

.inv-card-menu::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: -1;
    background: rgba(248, 245, 238, var(--inv-card-menu-wash-opacity, .34));
    pointer-events: none;
}

.inv-card-menu__composition {
    width: min(var(--inv-card-menu-max-width, 1180px), 100%);
    margin: 0 auto;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    grid-auto-flow: row;
    grid-auto-rows: auto;
    gap: var(--inv-card-menu-gap, 24px);
    align-items: start;
    perspective: 1200px;
    position: relative;
}

/* Card Menu editorial header: names/date and hero photo are a single vertical
   collage block on both desktop and mobile. Fine-tune transforms still live on the
   individual cards, so Studio offsets/scale/rotation continue to work normally. */
.inv-card-menu__header-stack {
    width: min(var(--inv-card-menu-max-width, 1180px), 100%);
    margin: 0 auto clamp(52px, 6vw, 86px);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: clamp(22px, 2.8vw, 38px);
    position: relative;
    z-index: 2;
}

.inv-card-menu__header-stack > .inv-card-menu__main-card {
    width: min(54%, 660px);
    min-height: 190px;
    padding: clamp(28px, 3.4vw, 50px);
    flex: 0 0 auto;
}

.inv-card-menu__header-stack > .inv-card-menu__photo-card {
    width: min(66%, 820px);
    aspect-ratio: 1.65 / 1;
    min-height: 0;
    flex: 0 0 auto;
}

/* Card Menu countdown: an ivory oval stationery card that belongs to the
   opening composition and sits directly below the couple photo. */
.inv-card-menu__header-stack > .inv-card-menu__countdown-card,
.inv-card-menu__header-stack > .inv-card-menu__countdown-card.inv-has-backdrop {
    width: min(48%, 620px);
    aspect-ratio: 1.78 / 1;
    min-height: 0;
    margin: 4px 0 0;
    padding: clamp(30px, 3.2vw, 46px) clamp(38px, 4vw, 62px);
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    color: var(--inv-text);
    background-color: #f7f2e9;
    background-image: linear-gradient(rgba(250, 247, 240, .52), rgba(250, 247, 240, .52)), var(--inv-card-menu-background, none);
    background-size: auto, 512px 512px;
    background-position: center, center;
    background-repeat: no-repeat, repeat;
    border: 1px solid rgba(95, 82, 66, .10);
    border-radius: 51% 49% 50% 50% / 47% 49% 52% 48%;
    box-shadow: 0 18px 34px rgba(64, 53, 42, .12), 0 3px 8px rgba(64, 53, 42, .06);
    isolation: isolate;
}

.inv-card-menu__countdown-card::after {
    content: "";
    position: absolute;
    inset: 8px;
    z-index: 0;
    border: 1px solid rgba(95, 82, 66, .045);
    border-radius: inherit;
    pointer-events: none;
}

.inv-card-menu__countdown-card .inv-countdown__inner {
    position: relative;
    z-index: 1;
    width: 100%;
    margin: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

/* In the approved stationery composition the two configurable phrases form the
   editorial heading above the numbers: Title = kicker, BottomText = main line. */
.inv-card-menu__header-stack > .inv-card-menu__countdown-card .inv-countdown__title {
    order: 1;
    margin: 0 0 7px;
    font-family: var(--inv-label-font);
    font-size: clamp(10px, .9vw, 13px);
    font-weight: 400;
    line-height: 1.15;
    letter-spacing: .24em !important;
    text-transform: uppercase !important;
}

.inv-card-menu__header-stack > .inv-card-menu__countdown-card .inv-countdown__bottom-title {
    order: 2;
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(28px, 3vw, 42px);
    font-weight: 400;
    line-height: 1;
    letter-spacing: .12em !important;
    text-transform: uppercase !important;
}

.inv-card-menu__countdown-card .inv-countdown__inner::after {
    content: "";
    order: 3;
    display: block;
    width: min(64%, 300px);
    height: 1px;
    margin: clamp(14px, 1.7vw, 21px) auto clamp(14px, 1.7vw, 20px);
    background: currentColor;
    opacity: .24;
}

.inv-card-menu__countdown-card .inv-countdown__grid,
.inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__grid {
    order: 4;
    width: min(88%, 470px);
    margin: 0 auto;
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0;
    align-items: stretch;
}

.inv-card-menu__countdown-card .inv-countdown__item,
.inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__item {
    position: relative;
    min-width: 0;
    padding: 0 clamp(8px, 1.2vw, 16px);
}

.inv-card-menu__countdown-card .inv-countdown__item + .inv-countdown__item::before,
.inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__item + .inv-countdown__item::before {
    content: "";
    position: absolute;
    top: 8%;
    bottom: 8%;
    left: 0;
    width: 1px;
    background: currentColor;
    opacity: .20;
}

.inv-card-menu__countdown-card .inv-countdown__value,
.inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__value {
    font-family: var(--inv-heading-font);
    font-size: var(--inv-countdown-number-size, clamp(30px, 3vw, 42px));
    font-weight: 400;
    line-height: .92;
    color: inherit;
}

.inv-card-menu__countdown-card .inv-countdown__item:last-child .inv-countdown__value {
    color: inherit;
}

.inv-card-menu__countdown-card .inv-countdown__label,
.inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__label {
    margin-top: 7px;
    font-family: var(--inv-label-font);
    font-size: var(--inv-countdown-label-size, clamp(8px, .75vw, 10px));
    line-height: 1.1;
    letter-spacing: .12em;
    text-transform: uppercase;
    white-space: nowrap;
}

/* A2.6C - one optional stationery layer (envelope/backing paper) behind the cards. */
.inv-card-menu__decorative-piece {
    position: absolute;
    left: var(--inv-decorative-desktop-x, 50%);
    top: var(--inv-decorative-desktop-y, 43%);
    width: min(78%, 920px);
    max-width: none;
    transform: translate(-50%, -50%) rotate(var(--inv-decorative-desktop-rotation, -3deg)) scale(var(--inv-decorative-desktop-scale, 1));
    transform-origin: center;
    opacity: var(--inv-decorative-opacity, 1);
    pointer-events: none;
    z-index: 0;
    filter: drop-shadow(0 22px 28px rgba(42, 35, 30, .13));
}
.inv-card-menu__decorative-piece img {
    display: block;
    width: 100%;
    height: auto;
    object-fit: contain;
}

.inv-card-menu__main-card,
.inv-card-menu__photo-card,
.inv-card-menu__menu-card {
    position: relative;
    border: 0;
    border-radius: 1px;
    box-shadow: 0 18px 38px rgba(42, 35, 30, .13), 0 2px 7px rgba(42, 35, 30, .06);
    transform-origin: center;
}

/* A2.6D fine composition variables. Main/photo use them directly; section cards
   inherit the same model through their wrapper below. Zero/100 keeps A2.6C unchanged. */
.inv-card-menu__main-card,
.inv-card-menu__photo-card,
.inv-card-menu__card-wrap {
    --inv-fine-desktop-x: 0px;
    --inv-fine-desktop-y: 0px;
    --inv-fine-desktop-scale: 1;
    --inv-fine-desktop-rotation: 0deg;
    --inv-fine-mobile-x: 0px;
    --inv-fine-mobile-y: 0px;
    --inv-fine-mobile-scale: 1;
    --inv-fine-mobile-rotation: 0deg;
    --inv-fine-layer: 2;
}

.inv-card-menu__main-card,
.inv-card-menu__photo-card {
    z-index: var(--inv-fine-layer, 2);
    transform: translate(var(--inv-fine-desktop-x), var(--inv-fine-desktop-y)) scale(var(--inv-fine-desktop-scale));
}

.inv-card-menu__menu-card { z-index: 2; }

/* A2.6C frame wrapper keeps the functional card rectangular/accessibile while the
   stationery silhouette can be ornamental around it. */
.inv-card-menu__card-wrap {
    --inv-card-frame-pad: 8px;
    position: relative;
    z-index: var(--inv-fine-layer, 2);
    min-width: 0;
    padding: var(--inv-card-frame-pad);
    transform: translate(var(--inv-fine-desktop-x), var(--inv-fine-desktop-y)) scale(var(--inv-fine-desktop-scale));
    background: var(--inv-card-frame-color, #eee7dc);
    border: 1px solid var(--inv-card-frame-border, #b9aea0);
    box-shadow: 0 12px 24px rgba(42,35,30,.07);
    transform-origin: center;
}
.inv-card-menu__card-wrap > .inv-card-menu__menu-card { width: 100%; height: 100%; min-height: 100%; }

/* Image-based stationery artwork. Transparent PNG/WebP/SVG files become the visible
   card surface while the wrapper/button stay transparent and preserve click/accessibility. */
.inv-card-menu__card-wrap--has-artwork {
    padding: 0 !important;
    background: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    filter: none !important;
    clip-path: none !important;
    overflow: visible;
}
.inv-card-menu__card-wrap--has-artwork::after {
    display: none !important;
}
.inv-card-menu__card-artwork {
    position: absolute;
    inset: 0;
    z-index: 0;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: contain;
    opacity: var(--inv-card-artwork-opacity, 1);
    pointer-events: none;
    filter: drop-shadow(0 15px 20px rgba(42,35,30,.12));
}
.inv-card-menu__card-wrap--has-artwork > .inv-card-menu__menu-card {
    position: relative;
    z-index: 1;
    padding: clamp(22px, 2.7vw, 34px) !important;
    background: transparent !important;
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    overflow: visible;
}
.inv-card-menu__menu-card--has-artwork::before,
.inv-card-menu__menu-card--has-artwork::after {
    display: none !important;
}
.inv-card-menu__menu-card--has-artwork:hover,
.inv-card-menu__menu-card--has-artwork:focus-visible {
    box-shadow: none !important;
}
.inv-card-menu__card-wrap--frame-none { padding: 0; background: transparent; border: 0; box-shadow: none; }
.inv-card-menu__card-wrap--frame-classic { border-radius: 2px; }
.inv-card-menu__card-wrap--frame-double {
    border-radius: 2px;
    box-shadow: inset 0 0 0 3px color-mix(in srgb, var(--inv-card-frame-color) 72%, white), inset 0 0 0 5px var(--inv-card-frame-border), 0 12px 24px rgba(42,35,30,.07);
}
.inv-card-menu__card-wrap--frame-soft { border-radius: 26px; }
.inv-card-menu__card-wrap--frame-soft > .inv-card-menu__menu-card { border-radius: 19px; }
.inv-card-menu__card-wrap--frame-scalloped {
    border-radius: 34px 12px 34px 12px / 18px 34px 18px 34px;
    box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--inv-card-frame-border) 58%, transparent), 0 14px 28px rgba(42,35,30,.08);
}
.inv-card-menu__card-wrap--frame-scalloped > .inv-card-menu__menu-card { border-radius: 26px 8px 26px 8px / 14px 27px 14px 27px; }
.inv-card-menu__card-wrap--frame-plaque {
    clip-path: polygon(7% 0, 93% 0, 100% 8%, 100% 92%, 93% 100%, 7% 100%, 0 92%, 0 8%);
    padding: max(var(--inv-card-frame-pad), 9px);
    border: 0;
    box-shadow: none;
    filter: drop-shadow(0 15px 19px rgba(42,35,30,.11));
}
.inv-card-menu__card-wrap--frame-plaque::after {
    content: ""; position: absolute; inset: 4px; pointer-events: none; z-index: 2;
    clip-path: inherit; border: 1px solid var(--inv-card-frame-border); opacity: .75;
}
.inv-card-menu__card-wrap--frame-arch {
    border-radius: 48% 48% 10px 10px / 22% 22% 10px 10px;
    padding-top: calc(var(--inv-card-frame-pad) + 9px);
}
.inv-card-menu__card-wrap--frame-arch > .inv-card-menu__menu-card { border-radius: 46% 46% 3px 3px / 18% 18% 3px 3px; padding-top: calc(clamp(22px, 2.7vw, 34px) + 6px); }

.inv-card-menu__main-card {
    grid-column: 5 / span 8;
    grid-row: 1 / span 4;
    min-height: 330px;
    padding: clamp(38px, 5vw, 76px);
    display: flex;
    flex-direction: column;
    justify-content: center;
    text-align: center;
    overflow: hidden;
    background: rgba(250, 247, 241, .97);
    color: var(--inv-text);
}


.inv-card-menu__main-card--has-artwork {
    background: transparent;
    box-shadow: none;
    overflow: visible;
}
.inv-card-menu__main-card--has-artwork::before,
.inv-card-menu__main-card--has-artwork::after {
    display: none;
}
.inv-card-menu__main-card--has-artwork .inv-card-menu__main-ornament {
    display: none;
}
.inv-card-menu__main-artwork {
    position: absolute;
    inset: 0;
    z-index: 0;
    width: 100%;
    height: 100%;
    display: block;
    object-fit: contain;
    opacity: var(--inv-card-artwork-opacity, 1);
    pointer-events: none;
    filter: drop-shadow(0 18px 24px rgba(42,35,30,.12));
}

.inv-card-menu__main-card::before,
.inv-card-menu__menu-card--embossed::before,
.inv-card-menu__menu-card--paper::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: var(--inv-card-menu-paper, none);
    background-size: cover;
    background-position: center;
    opacity: .17;
    pointer-events: none;
}

.inv-card-menu__main-card::after {
    content: "";
    position: absolute;
    inset: 12px;
    border: 1px solid rgba(83, 75, 67, .09);
    pointer-events: none;
}

.inv-card-menu__main-ornament {
    position: relative;
    z-index: 1;
    width: 44px;
    height: 1px;
    margin: 0 auto 26px;
    background: color-mix(in srgb, var(--inv-accent) 72%, var(--inv-text));
    opacity: .72;
}

.inv-card-menu__couple,
.inv-card-menu__location,
.inv-card-menu__date {
    position: relative;
    z-index: 1;
}

.inv-card-menu__couple {
    margin: 0 0 24px;
    font-family: var(--inv-heading-font);
    font-size: clamp(42px, 5.4vw, 78px);
    font-weight: 400;
    line-height: .96;
    letter-spacing: -.015em;
}

.inv-card-menu__couple-image-wrap {
    position: relative;
    z-index: 1;
    width: 100%;
    margin: 0 0 24px;
    line-height: 1;
}

.inv-card-menu__couple-image {
    display: block;
    width: var(--inv-card-menu-couple-image-desktop-width, 70%);
    max-width: 100%;
    height: auto;
    margin: 0 auto;
    object-fit: contain;
}

@media (max-width: 767.98px) {
    .inv-card-menu__couple-image {
        width: var(--inv-card-menu-couple-image-mobile-width, var(--inv-card-menu-couple-image-desktop-width, 70%));
    }
}

.inv-card-menu__location,
.inv-card-menu__date {
    margin: 5px 0;
    font-family: var(--inv-label-font);
    font-size: clamp(11px, 1.05vw, 15px);
    letter-spacing: .13em;
    text-transform: uppercase;
}

.inv-card-menu__photo-card {
    grid-column: 1 / span 4;
    grid-row: 1 / span 7;
    margin: 0;
    min-height: 520px;
    overflow: hidden;
    padding: 10px;
    background: #f7f2ea;
}

.inv-card-menu--desktop-rotation .inv-card-menu__photo-card,
.inv-card-menu--desktop-rotation .inv-card-menu__main-card {
    transform: translate(var(--inv-fine-desktop-x), var(--inv-fine-desktop-y)) rotate(var(--inv-fine-desktop-rotation)) scale(var(--inv-fine-desktop-scale));
}

.inv-card-menu__photo-card img {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: var(--inv-card-menu-photo-fit, cover);
    background: #eee7df;
}

.inv-card-menu__menu-card {
    --inv-card-rotation: 0deg;
    min-height: 150px;
    padding: clamp(22px, 2.7vw, 34px);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    overflow: hidden;
    cursor: pointer;
    transition: transform .25s ease, box-shadow .25s ease, filter .25s ease;
    background: rgba(249, 246, 239, .98);
    color: var(--inv-text);
}

.inv-card-menu--desktop-rotation .inv-card-menu__card-wrap { transform: translate(var(--inv-fine-desktop-x), var(--inv-fine-desktop-y)) rotate(var(--inv-fine-desktop-rotation)) scale(var(--inv-fine-desktop-scale)); }
.inv-card-menu__card-wrap:hover,
.inv-card-menu__card-wrap:focus-within { z-index: 30; }

.inv-card-menu__menu-card:hover,
.inv-card-menu__menu-card:focus-visible {
    transform: translateY(-5px) !important;
    box-shadow: 0 28px 60px rgba(42, 35, 30, .19), 0 4px 12px rgba(42, 35, 30, .08);
    outline: none;
    z-index: 4;
}

.inv-card-menu__menu-card--paper { background: rgba(249, 246, 239, .97); }
.inv-card-menu__menu-card--embossed {
    background: rgba(246, 241, 232, .98);
    box-shadow: 0 20px 38px rgba(42, 35, 30, .11), inset 0 0 0 1px rgba(255,255,255,.58);
}
.inv-card-menu__menu-card--embossed::before { opacity: .29; filter: contrast(.95) brightness(1.04); }

.inv-card-menu__menu-card--dark {
    background: color-mix(in srgb, var(--inv-bg-dark) 94%, #4f594d);
    color: var(--inv-text-inverse);
    box-shadow: 0 22px 48px rgba(35, 42, 38, .22);
}

.inv-card-menu__menu-card--dark::after {
    content: "";
    position: absolute;
    inset: 12px;
    border: 1px solid rgba(255,255,255,.12);
    pointer-events: none;
}

.inv-card-menu__menu-card--accent {
    background: color-mix(in srgb, var(--inv-accent) 28%, var(--inv-bg-light));
}

.inv-card-menu__menu-card--photo {
    color: #fff;
    background: #555;
    text-shadow: 0 2px 12px rgba(0,0,0,.42);
}
.inv-card-menu__menu-card--photo::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(rgba(20,18,16,.18), rgba(20,18,16,.48)), var(--inv-card-photo, none);
    background-size: cover;
    background-position: center;
    transform: scale(1.015);
}
.inv-card-menu__menu-card--photo:not(.inv-card-menu__menu-card--has-photo) { background: var(--inv-bg-dark); }

.inv-card-menu__menu-title,
.inv-card-menu__itinerary-summary,
.inv-card-menu__open-cue {
    position: relative;
    z-index: 1;
}

.inv-card-menu__menu-title {
    font-family: var(--inv-heading-font);
    font-size: clamp(24px, 2.7vw, 40px);
    font-weight: 400;
    line-height: 1.02;
    letter-spacing: .005em;
}

.inv-card-menu__itinerary-summary {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-top: 24px;
    padding-top: 20px;
    width: min(82%, 260px);
    border-top: 1px solid currentColor;
    border-color: color-mix(in srgb, currentColor 25%, transparent);
}

.inv-card-menu__itinerary-event {
    font-family: var(--inv-label-font);
    font-size: clamp(10px, .95vw, 13px);
    letter-spacing: .12em;
    line-height: 1.35;
    text-transform: uppercase;
}

.inv-card-menu__open-cue {
    margin-top: 18px;
    font-family: var(--inv-label-font);
    font-size: 9px;
    letter-spacing: .26em;
    opacity: .56;
}

.inv-card-menu__menu-card--dark .inv-card-menu__open-cue,
.inv-card-menu__menu-card--photo .inv-card-menu__open-cue { opacity: .7; }

/* Card sizing. The menu is a controlled stationery flow: at most two cards per
   row on desktop. Cards keep natural height, so a tall card reserves real vertical
   space instead of letting later cards pack underneath it. */
.inv-card-menu__card-wrap--size-small,
.inv-card-menu__card-wrap--size-medium { grid-column: span 1; }
.inv-card-menu__card-wrap--size-large,
.inv-card-menu__card-wrap--size-feature { grid-column: 1 / -1; }

.inv-card-menu__card-wrap--size-small { min-height: 170px; }
.inv-card-menu__card-wrap--size-medium { min-height: 220px; }
.inv-card-menu__card-wrap--size-large { min-height: 250px; }
.inv-card-menu__card-wrap--size-feature { min-height: 340px; }

.inv-card-menu__card-wrap--orientation-horizontal { min-height: 185px; }
.inv-card-menu__card-wrap--orientation-vertical { min-height: 340px; }
.inv-card-menu__card-wrap--orientation-square { aspect-ratio: 1 / 1; min-height: 0; }
.inv-card-menu__card-wrap--orientation-auto { min-height: 210px; }
.inv-card-menu__card-wrap--size-feature.inv-card-menu__card-wrap--orientation-vertical { min-height: 390px; }

.inv-card-menu__section-store {
    position: fixed;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    pointer-events: none;
}

.inv-card-menu__stored-section { display: block !important; }

.inv-card-menu-modal[hidden] { display: none !important; }
.inv-card-menu-modal {
    position: fixed;
    inset: 0;
    z-index: 12000;
    display: grid;
    place-items: center;
    padding: clamp(12px, 3vw, 40px);
}

.inv-card-menu-modal__backdrop {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    background: rgba(35, 31, 28, .68);
    backdrop-filter: blur(7px) saturate(.82);
    cursor: default;
}

.inv-card-menu-modal__dialog {
    position: relative;
    z-index: 1;
    width: min(1080px, 100%);
    max-height: calc(100svh - 56px);
    overflow: auto;
    background-color: var(--inv-bg-light);
    background-image: linear-gradient(rgba(249,247,242,.93), rgba(249,247,242,.93)), var(--inv-card-menu-paper, none);
    background-size: auto, cover;
    background-position: center;
    box-shadow: 0 38px 110px rgba(0, 0, 0, .30);
    border: 1px solid rgba(255,255,255,.42);
    overscroll-behavior: contain;
}

.inv-card-menu-modal__dialog::after {
    content: "";
    position: absolute;
    inset: 12px;
    border: 1px solid rgba(64,57,51,.07);
    pointer-events: none;
    z-index: 10;
}

.inv-card-menu-modal__body { min-height: 100%; }
.inv-card-menu-modal__close {
    position: sticky;
    float: right;
    top: 14px;
    right: 14px;
    z-index: 30;
    width: 42px;
    height: 42px;
    margin: 14px 14px -56px 0;
    border: 1px solid rgba(28, 25, 22, .12);
    border-radius: 999px;
    background: rgba(250, 247, 241, .90);
    color: #231f1c;
    box-shadow: 0 7px 22px rgba(40,34,29,.10);
    font-family: Georgia, serif;
    font-size: 28px;
    line-height: 1;
    cursor: pointer;
    backdrop-filter: blur(6px);
}

.inv-card-menu__modal-section {
    min-height: auto !important;
    padding-top: clamp(66px, 8vw, 100px) !important;
    padding-bottom: clamp(56px, 7vw, 92px) !important;
}

body.inv-card-menu-modal-open { overflow: hidden; }

@media (max-width: 900px) {
    .inv-card-menu__composition {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        grid-auto-rows: auto;
    }
    .inv-card-menu__photo-card { min-height: 0; }
    .inv-card-menu__card-wrap--size-small,
    .inv-card-menu__card-wrap--size-medium { grid-column: span 1; }
    .inv-card-menu__card-wrap--size-large,
    .inv-card-menu__card-wrap--size-feature { grid-column: 1 / -1; }
}

@media (max-width: 760px) {
    .inv-card-menu { padding: 26px 14px 54px; }
    .inv-card-menu__composition {
        grid-template-columns: 1fr;
        grid-auto-rows: auto;
        grid-auto-flow: row;
        gap: 18px;
    }
    .inv-card-menu__main-card {
        grid-column: 1 / -1;
        grid-row: auto;
        min-height: 260px;
        padding: 42px 24px;
        order: 1;
        transform: translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y)) scale(var(--inv-fine-mobile-scale)) !important;
    }
    .inv-card-menu__main-card::after { inset: 8px; }
    .inv-card-menu__couple { font-size: clamp(38px, 12vw, 58px); }
    .inv-card-menu__photo-card {
        grid-column: 1 / -1;
        grid-row: auto;
        min-height: min(62vh, 560px);
        order: 2;
        transform: translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y)) scale(var(--inv-fine-mobile-scale));
        padding: 7px;
    }
    .inv-card-menu__card-wrap--size-small,
    .inv-card-menu__card-wrap--size-medium,
    .inv-card-menu__card-wrap--size-large,
    .inv-card-menu__card-wrap--size-feature,
    .inv-card-menu__card-wrap--orientation-horizontal,
    .inv-card-menu__card-wrap--orientation-vertical,
    .inv-card-menu__card-wrap--orientation-square,
    .inv-card-menu__card-wrap--orientation-auto {
        grid-column: 1 / -1;
        grid-row: auto;
        aspect-ratio: auto;
        min-height: 150px;
        transform: translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y)) scale(var(--inv-fine-mobile-scale));
    }
    .inv-card-menu__card-wrap > .inv-card-menu__menu-card { padding: 22px 14px; }
    .inv-card-menu__card-wrap--size-feature {
        grid-column: 1 / -1;
        min-height: 320px;
    }
    .inv-card-menu__card-wrap--size-feature > .inv-card-menu__menu-card { padding: 36px 22px; }
    .inv-card-menu__card-wrap--size-large { grid-column: 1 / -1; min-height: 190px; }
    .inv-card-menu--mobile-rotation .inv-card-menu__card-wrap { transform: translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y)) rotate(var(--inv-fine-mobile-rotation)) scale(var(--inv-fine-mobile-scale)); }
    .inv-card-menu--mobile-staggered .inv-card-menu__card-wrap:not(.inv-card-menu__card-wrap--size-feature):nth-of-type(odd) { margin-top: 18px; }
    .inv-card-menu--mobile-stacked .inv-card-menu__card-wrap { grid-column: 1 / -1; margin-top: 0 !important; }
    .inv-card-menu__menu-title { font-size: clamp(21px, 6.4vw, 31px); }
    .inv-card-menu__itinerary-summary { width: min(86%, 280px); }
    .inv-card-menu__decorative-piece { width: min(92%, 620px); }
    .inv-card-menu__decorative-piece--desktop-only { display: none; }
    .inv-card-menu-modal { padding: 0; place-items: stretch; }
    .inv-card-menu-modal__dialog { width: 100%; max-height: 100svh; height: 100svh; border: 0; }
    .inv-card-menu-modal__dialog::after { inset: 7px; }
    .inv-card-menu__modal-section { min-height: 100svh !important; }
}

@media (max-width: 760px) {
    .inv-card-menu__header-stack {
        gap: 20px;
        margin-bottom: 48px;
    }

    .inv-card-menu__header-stack > .inv-card-menu__main-card {
        width: min(90%, 520px);
        min-height: 150px;
        padding: 28px 20px;
    }

    .inv-card-menu__header-stack > .inv-card-menu__photo-card {
        width: min(92%, 540px);
        min-height: 0;
        aspect-ratio: 1.45 / 1;
        padding: 7px;
    }


    .inv-card-menu__header-stack > .inv-card-menu__countdown-card,
    .inv-card-menu__header-stack > .inv-card-menu__countdown-card.inv-has-backdrop {
        order: 3;
        width: min(92%, 420px);
        aspect-ratio: 1.30 / 1;
        min-height: 0;
        margin-top: 2px;
        padding: 30px 22px 28px;
        border-radius: 50% 50% 49% 51% / 46% 48% 53% 53%;
    }

    .inv-card-menu__header-stack > .inv-card-menu__countdown-card .inv-countdown__title {
        margin-bottom: 6px;
        font-size: clamp(9px, 2.7vw, 11px);
        letter-spacing: .20em !important;
    }

    .inv-card-menu__header-stack > .inv-card-menu__countdown-card .inv-countdown__bottom-title {
        font-size: clamp(24px, 7.4vw, 31px);
        letter-spacing: .09em !important;
    }

    .inv-card-menu__countdown-card .inv-countdown__inner::after {
        width: 62%;
        margin: 13px auto 15px;
    }

    .inv-card-menu__countdown-card .inv-countdown__grid,
    .inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__grid {
        width: 96%;
    }

    .inv-card-menu__countdown-card .inv-countdown__item,
    .inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__item {
        padding: 0 7px;
    }

    .inv-card-menu__countdown-card .inv-countdown__value,
    .inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__value {
        font-size: var(--inv-countdown-mobile-number-size, clamp(25px, 8.3vw, 32px));
    }

    .inv-card-menu__countdown-card .inv-countdown__label,
    .inv-card-menu__countdown-card.inv-countdown--compact-dividers .inv-countdown__label {
        margin-top: 5px;
        font-size: var(--inv-countdown-mobile-label-size, clamp(7px, 2vw, 8px));
        letter-spacing: .06em;
    }
}

@media (prefers-reduced-motion: reduce) {
    .inv-card-menu__menu-card { transition: none; }
}

.inv-restaurants__grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: clamp(18px, 2vw, 30px);
}

.inv-restaurant-card {
    padding: clamp(24px, 3vw, 38px);
    background: rgba(248, 245, 238, .9);
    border: 1px solid rgba(25, 25, 25, .08);
    box-shadow: 0 14px 34px rgba(31, 27, 24, .08);
}

.inv-restaurant-card__title {
    margin: 0 0 10px;
    font-family: var(--inv-heading-font);
    font-size: clamp(26px, 2.6vw, 38px);
    font-weight: 400;
}

.inv-restaurant-card__category { margin: 0 0 20px; opacity: .72; }

@media (max-width: 760px) {
    .inv-card-menu { padding: 28px 16px 48px; }
    .inv-card-menu__composition { grid-template-columns: 1fr; grid-auto-flow: row; grid-auto-rows: auto; gap: 18px; }
    .inv-card-menu__main-card { grid-column: 1 / -1; grid-row: auto; padding: 38px 24px; order: 1; transform: translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y)) scale(var(--inv-fine-mobile-scale)) !important; }
    .inv-card-menu__photo-card { grid-column: 1 / -1; grid-row: auto; min-height: min(66vh, 620px); order: 2; transform: translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y)) scale(var(--inv-fine-mobile-scale)) !important; }
    .inv-card-menu__card-wrap,
    .inv-card-menu__card-wrap:nth-of-type(n) { grid-column: 1 / -1; min-height: 150px; transform: translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y)) scale(var(--inv-fine-mobile-scale)) !important; }
    .inv-card-menu--mobile-rotation .inv-card-menu__main-card,
    .inv-card-menu--mobile-rotation .inv-card-menu__photo-card,
    .inv-card-menu--mobile-rotation .inv-card-menu__card-wrap { transform: translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y)) rotate(var(--inv-fine-mobile-rotation)) scale(var(--inv-fine-mobile-scale)) !important; }
    .inv-card-menu__decorative-piece {
        left: var(--inv-decorative-mobile-x, var(--inv-decorative-desktop-x, 50%));
        top: var(--inv-decorative-mobile-y, var(--inv-decorative-desktop-y, 43%));
        transform: translate(-50%, -50%) rotate(var(--inv-decorative-mobile-rotation, var(--inv-decorative-desktop-rotation, -3deg))) scale(var(--inv-decorative-mobile-scale, var(--inv-decorative-desktop-scale, 1)));
    }
    .inv-card-menu__card-wrap > .inv-card-menu__menu-card { padding: 20px 12px; }
    .inv-card-menu__menu-title { font-size: clamp(20px, 6.5vw, 30px); }
    .inv-card-menu-modal { padding: 0; place-items: stretch; }
    .inv-card-menu-modal__dialog { width: 100%; max-height: 100svh; height: 100svh; }
    .inv-card-menu__modal-section { min-height: 100svh !important; }
}

/* A2.6H — Stationery styling expansion: layered backing pieces, vellum,
   refined plaque, reusable card ornaments and internal content presets. */
.inv-card-menu__decorative-piece {
    z-index: var(--inv-decorative-layer, 0);
}
.inv-card-menu__decorative-piece--slot-2 { width: min(68%, 800px); }
.inv-card-menu__decorative-piece--slot-3 { width: min(50%, 620px); }

.inv-card-menu__card-wrap--frame-plaqueclassic {
    clip-path: polygon(
        18% 0, 82% 0,
        86% 3%, 92% 3%, 97% 8%, 97% 18%,
        100% 23%, 100% 77%, 97% 82%, 97% 92%,
        92% 97%, 86% 97%, 82% 100%, 18% 100%,
        14% 97%, 8% 97%, 3% 92%, 3% 82%,
        0 77%, 0 23%, 3% 18%, 3% 8%,
        8% 3%, 14% 3%
    );
    padding: max(var(--inv-card-frame-pad), 10px);
    border: 0;
    box-shadow: none;
    filter: drop-shadow(0 16px 20px rgba(42,35,30,.12));
}
.inv-card-menu__card-wrap--frame-plaqueclassic::after {
    content: "";
    position: absolute;
    inset: 5px;
    z-index: 3;
    pointer-events: none;
    clip-path: inherit;
    border: 1px solid var(--inv-card-frame-border);
    opacity: .78;
}
.inv-card-menu__card-wrap--frame-plaqueclassic > .inv-card-menu__menu-card {
    clip-path: inherit;
}

.inv-card-menu__menu-card--vellum {
    background: rgba(247, 243, 235, .62);
    color: var(--inv-text);
    border: 1px solid rgba(255,255,255,.38);
    box-shadow: 0 18px 40px rgba(42,35,30,.09), inset 0 0 0 1px rgba(106,94,80,.035);
    -webkit-backdrop-filter: blur(3px) saturate(.88);
    backdrop-filter: blur(3px) saturate(.88);
}
.inv-card-menu__menu-card--vellum::before {
    content: "";
    position: absolute;
    inset: 0;
    background-image: linear-gradient(rgba(255,255,255,.08), rgba(255,255,255,.02)), var(--inv-card-menu-paper, none);
    background-size: auto, cover;
    background-position: center;
    opacity: .11;
    pointer-events: none;
}

.inv-card-menu__card-content {
    position: relative;
    z-index: 2;
    display: flex;
    min-width: 0;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.inv-card-menu__menu-card--layout-detail {
    align-items: stretch;
    text-align: left;
}
.inv-card-menu__menu-card--layout-detail .inv-card-menu__card-content {
    width: 100%;
    align-items: flex-start;
    text-align: left;
}
.inv-card-menu__menu-card--layout-detail .inv-card-menu__menu-title {
    max-width: 82%;
    line-height: 1.08;
}
.inv-card-menu__menu-card--layout-detail .inv-card-menu__open-cue {
    padding-top: 13px;
    border-top: 1px solid color-mix(in srgb, currentColor 18%, transparent);
}

.inv-card-menu__menu-card--layout-simple .inv-card-menu__menu-title {
    font-size: clamp(20px, 2.25vw, 32px);
    letter-spacing: .01em;
}
.inv-card-menu__menu-card--layout-simple .inv-card-menu__open-cue {
    margin-top: 12px;
}

.inv-card-menu__menu-card--layout-rsvpseal {
    display: grid;
    grid-template-columns: minmax(64px, .72fr) 1px minmax(0, 1.7fr);
    gap: clamp(14px, 2vw, 25px);
    align-items: center;
    justify-items: center;
    text-align: left;
}
.inv-card-menu__menu-card--layout-rsvpseal .inv-card-menu__card-content {
    width: 100%;
    align-items: flex-start;
    text-align: left;
}
.inv-card-menu__menu-card--layout-rsvpseal .inv-card-menu__menu-title {
    font-size: clamp(20px, 2.1vw, 31px);
}
.inv-card-menu__menu-card--layout-rsvpseal .inv-card-menu__open-cue {
    margin-top: 10px;
}
.inv-card-menu__wax-seal {
    position: relative;
    z-index: 2;
    display: grid;
    place-items: center;
    width: clamp(58px, 6vw, 82px);
    aspect-ratio: 1;
    border-radius: 50%;
    color: #e6c883;
    background:
        radial-gradient(circle at 38% 30%, rgba(255,255,255,.18), transparent 28%),
        radial-gradient(circle at 55% 58%, #7c4e16 0 45%, #5c340d 66%, #382009 100%);
    border: 4px double rgba(205,165,84,.72);
    box-shadow: 0 6px 12px rgba(46,31,15,.28), inset 0 0 0 3px rgba(58,32,8,.35);
    font-family: var(--inv-heading-font);
    font-size: clamp(16px, 1.7vw, 24px);
    letter-spacing: .05em;
    text-shadow: 0 1px 1px rgba(0,0,0,.32);
}
.inv-card-menu__seal-divider {
    position: relative;
    z-index: 2;
    align-self: stretch;
    width: 1px;
    min-height: 74px;
    background: color-mix(in srgb, currentColor 22%, transparent);
}

.inv-card-menu__card-ornament {
    --inv-card-ornament-scale: 1;
    --inv-card-ornament-opacity: .75;
    --inv-card-ornament-x: 0px;
    --inv-card-ornament-y: 0px;
    position: absolute;
    z-index: 1;
    width: min(47%, 190px);
    aspect-ratio: 1;
    background-image: var(--inv-card-ornament-image, none);
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
    opacity: var(--inv-card-ornament-opacity);
    pointer-events: none;
    transform: translate(var(--inv-card-ornament-x), var(--inv-card-ornament-y)) scale(var(--inv-card-ornament-scale));
    transform-origin: center;
}
.inv-card-menu__card-ornament--topleft { top: -7%; left: -5%; }
.inv-card-menu__card-ornament--topright { top: -7%; right: -5%; }
.inv-card-menu__card-ornament--bottomleft { bottom: -7%; left: -5%; }
.inv-card-menu__card-ornament--bottomright { right: -5%; bottom: -7%; }

.inv-card-menu__menu-card--dark .inv-card-menu__card-ornament,
.inv-card-menu__menu-card--photo .inv-card-menu__card-ornament {
    filter: brightness(0) invert(1);
    mix-blend-mode: screen;
}

@media (max-width: 760px) {
    .inv-card-menu__decorative-piece--slot-2 { width: min(88%, 560px); }
    .inv-card-menu__decorative-piece--slot-3 { width: min(70%, 460px); }
    .inv-card-menu__menu-card--layout-rsvpseal {
        grid-template-columns: minmax(52px, .62fr) 1px minmax(0, 1.55fr);
        gap: 10px;
    }
    .inv-card-menu__wax-seal { width: clamp(50px, 14vw, 66px); }
    .inv-card-menu__seal-divider { min-height: 58px; }
    .inv-card-menu__card-ornament { width: min(42%, 145px); }
}

/* A2.6I — loader/rótulo floral overlays. These are independent of the cover image,
   so cover can crop freely while the floral anchors remain tied to the viewport. */
.inv-entry-decoration {
    position: absolute;
    left: var(--inv-entry-decor-desktop-x, 50%);
    top: var(--inv-entry-decor-desktop-y, 50%);
    z-index: 1;
    width: min(30vw, 520px);
    max-width: none;
    transform: translate(
        calc(var(--inv-entry-decor-desktop-translate-x, -50%) + var(--inv-entry-decor-desktop-fine-x, 0px)),
        calc(var(--inv-entry-decor-desktop-translate-y, -50%) + var(--inv-entry-decor-desktop-fine-y, 0px))
    ) rotate(var(--inv-entry-decor-desktop-rotation, 0deg)) scale(var(--inv-entry-decor-desktop-scale, 1));
    transform-origin: center;
    opacity: var(--inv-entry-decor-desktop-opacity, 1);
    pointer-events: none;
    user-select: none;
}
/* Decoration layers must remain above the dark entrance overlay. The content
   keeps its own stacking order, while decorations do not receive clicks. */
.inv-loader-screen > .inv-entry-decoration,
.inv-rotulo-screen > .inv-entry-decoration { z-index: 2; }
.inv-entry-decoration--top { width: min(44vw, 760px); }
.inv-entry-decoration img {
    display: block;
    width: 100%;
    height: auto;
    max-width: none;
    object-fit: contain;
    user-select: none;
    -webkit-user-drag: none;
}

/* Friendly responsive sizing for entrance decorations. Manual preserves the
   historical width-based behavior. Height/width modes fit against the entrance
   viewport while keeping the image aspect ratio; Scale remains a fine multiplier. */
.inv-entry-decoration[data-desktop-size="height"] {
    width: auto;
    height: 100%;
}
.inv-entry-decoration[data-desktop-size="height"] img {
    width: auto;
    height: 100%;
}
.inv-entry-decoration[data-desktop-size="width"] {
    width: 100%;
    height: auto;
}
.inv-entry-decoration[data-desktop-size="width"] img {
    width: 100%;
    height: auto;
}
@media (max-width: 767.98px) {
    .inv-entry-decoration {
        left: var(--inv-entry-decor-mobile-x, var(--inv-entry-decor-desktop-x, 50%));
        top: var(--inv-entry-decor-mobile-y, var(--inv-entry-decor-desktop-y, 50%));
        width: min(46vw, 260px);
        height: auto;
        transform: translate(
            calc(var(--inv-entry-decor-mobile-translate-x, var(--inv-entry-decor-desktop-translate-x, -50%)) + var(--inv-entry-decor-mobile-fine-x, 0px)),
            calc(var(--inv-entry-decor-mobile-translate-y, var(--inv-entry-decor-desktop-translate-y, -50%)) + var(--inv-entry-decor-mobile-fine-y, 0px))
        ) rotate(var(--inv-entry-decor-mobile-rotation, 0deg)) scale(var(--inv-entry-decor-mobile-scale, 1));
        opacity: var(--inv-entry-decor-mobile-opacity, var(--inv-entry-decor-desktop-opacity, 1));
    }
    .inv-entry-decoration--top { width: min(72vw, 420px); }
    .inv-entry-decoration[data-mobile-size="manual"] {
        width: min(46vw, 260px);
        height: auto;
    }
    .inv-entry-decoration--top[data-mobile-size="manual"] { width: min(72vw, 420px); }
    .inv-entry-decoration[data-mobile-size="manual"] img {
        width: 100%;
        height: auto;
    }
    .inv-entry-decoration[data-mobile-size="height"] {
        width: auto;
        height: 100%;
    }
    .inv-entry-decoration[data-mobile-size="height"] img {
        width: auto;
        height: 100%;
    }
    .inv-entry-decoration[data-mobile-size="width"] {
        width: 100%;
        height: auto;
    }
    .inv-entry-decoration[data-mobile-size="width"] img {
        width: 100%;
        height: auto;
    }
}

/* A2.7C - Gift registry cards fill their shared desktop height.
   Sparse store cards (for example Liverpool: title + event number + action)
   keep their information at the top and anchor the action to the bottom so
   they use the same visual height as cards with several banking fields. */
@media (min-width: 721px) {
    .inv-gifts__grid .inv-gift-card {
        display: flex;
        flex-direction: column;
        align-items: center;
        height: 100%;
    }

    .inv-gifts__grid .inv-gift-card > .inv-detail-line {
        width: 100%;
    }

    .inv-gifts__grid .inv-gift-card > .inv-button:last-child {
        margin-top: auto;
    }
}

/* A2.7D — remaining questionnaire sections in Invitation Studio */
.inv-activities,
.inv-makeup,
.inv-transport {
    padding: clamp(88px, 10vw, 146px) 0;
}

.inv-activities__inner,
.inv-makeup__inner,
.inv-transport__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-activities__grid,
.inv-makeup__grid,
.inv-transport__grid {
    width: 100%;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
    gap: clamp(20px, 3vw, 36px);
    margin-top: clamp(42px, 6vw, 72px);
}

.inv-activity-card,
.inv-makeup-card,
.inv-transport-card {
    min-height: 100%;
    padding: clamp(28px, 3.6vw, 46px);
    background: rgba(248, 245, 238, .9);
    border: 1px solid rgba(25, 25, 25, .08);
    border-radius: var(--inv-card-radius);
    box-shadow: 0 14px 34px rgba(31, 27, 24, .08);
    text-align: center;
}

.inv-treatment-dark .inv-activity-card,
.inv-treatment-dark .inv-makeup-card,
.inv-treatment-dark .inv-transport-card,
.inv-treatment-ocean .inv-activity-card,
.inv-treatment-ocean .inv-makeup-card,
.inv-treatment-ocean .inv-transport-card {
    color: var(--inv-text-inverse);
    background: rgba(255,255,255,.05);
    border-color: rgba(255,255,255,.18);
}

.inv-treatment-dark-light-card .inv-activity-card,
.inv-treatment-dark-light-card .inv-makeup-card,
.inv-treatment-dark-light-card .inv-transport-card,
.inv-treatment-dark .inv-local-paper-card.inv-activity-card,
.inv-treatment-dark .inv-local-paper-card.inv-makeup-card,
.inv-treatment-dark .inv-local-paper-card.inv-transport-card,
.inv-treatment-ocean .inv-local-paper-card.inv-activity-card,
.inv-treatment-ocean .inv-local-paper-card.inv-makeup-card,
.inv-treatment-ocean .inv-local-paper-card.inv-transport-card {
    color: var(--inv-text);
}

/* A2.7G: a local paper card is always a light immediate surface. These
   declarations intentionally come after the generic dark-section card rules. */
.inv-treatment-dark .inv-local-paper-card.inv-has-paper-surface,
.inv-treatment-ocean .inv-local-paper-card.inv-has-paper-surface {
    background: transparent !important;
    border: 0 !important;
}

.inv-activity-card__title,
.inv-makeup-card__title,
.inv-transport-card__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(26px, 2.6vw, 40px);
    font-weight: 400;
    line-height: 1.15;
}

.inv-activity-card__description,
.inv-activity-card__extra,
.inv-transport__intro {
    margin: 18px auto 0;
    max-width: 760px;
    line-height: 1.7;
    white-space: pre-line;
}

.inv-activity-card__extra {
    opacity: .76;
}

.inv-makeup-card__phone {
    margin: 18px 0 0;
    opacity: .78;
    letter-spacing: .02em;
}

.inv-transport__intro {
    text-align: center;
}

/* Transporte · Studio body font size.
   The generic body-size rule covers paragraphs/forms, but Transport's actual
   questionnaire content is rendered as list items in several variants. Include
   those nodes so the Studio "Texto" control really changes the transport copy. */
.inv-section.inv-transport.inv-section--body-size-override .inv-transport-card__item,
.inv-section.inv-transport.inv-section--body-size-override .inv-transport-open__item,
.inv-section.inv-transport.inv-section--body-size-override .inv-info__text,
.inv-section.inv-transport.inv-section--body-size-override .inv-postit-card__text {
    font-size: var(--inv-section-body-size);
}

@media (max-width: 720px) {
    .inv-section.inv-transport.inv-section--mobile-body-size-override .inv-transport-card__item,
    .inv-section.inv-transport.inv-section--mobile-body-size-override .inv-transport-open__item,
    .inv-section.inv-transport.inv-section--mobile-body-size-override .inv-info__text,
    .inv-section.inv-transport.inv-section--mobile-body-size-override .inv-postit-card__text,
    .inv-section.inv-transport.inv-section--mobile-body-size-auto .inv-transport-card__item,
    .inv-section.inv-transport.inv-section--mobile-body-size-auto .inv-transport-open__item,
    .inv-section.inv-transport.inv-section--mobile-body-size-auto .inv-info__text,
    .inv-section.inv-transport.inv-section--mobile-body-size-auto .inv-postit-card__text {
        font-size: var(--inv-section-mobile-body-size);
    }
}

.inv-transport-card__list {
    margin: 24px 0 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: 14px;
}

.inv-transport-card__item {
    position: relative;
    padding-left: 18px;
    text-align: left;
    line-height: 1.6;
}

.inv-transport-card__item::before {
    content: "•";
    position: absolute;
    left: 0;
    top: 0;
    opacity: .58;
}

.inv-makeup-card .inv-card-actions,
.inv-activity-card .inv-card-actions {
    margin-top: 26px;
}

@media (max-width: 720px) {
    .inv-activities__grid,
    .inv-makeup__grid,
    .inv-transport__grid {
        grid-template-columns: 1fr;
        margin-top: 36px;
    }

    .inv-activity-card,
    .inv-makeup-card,
    .inv-transport-card {
        padding: 28px 22px;
    }
}



/* Transporte · layouts editoriales
   editorialOpen keeps the questionnaire text untouched while removing cards and
   presenting the two source groups as an open editorial spread. Lista clásica,
   Bloques editoriales and Post-its reuse the same visual vocabulary as
   Información importante. */
.inv-transport--editorial-open .inv-transport__intro,
.inv-transport--info-layout .inv-transport__intro,
.inv-transport--postit .inv-transport__intro {
    width: min(100%, 760px);
}

.inv-transport-open__grid {
    position: relative;
    width: min(100%, 1080px);
    margin: clamp(46px, 6vw, 78px) auto 0;
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: clamp(64px, 8vw, 118px);
    align-items: start;
}

.inv-transport-open__grid--single {
    width: min(100%, 650px);
    grid-template-columns: minmax(0, 1fr);
}

.inv-transport-open__grid--split::before {
    content: "";
    position: absolute;
    left: 50%;
    top: 4px;
    bottom: 4px;
    width: 1px;
    background: currentColor;
    opacity: .20;
    transform: translateX(-.5px);
}

.inv-transport-open__group {
    min-width: 0;
    padding: 0 clamp(4px, .6vw, 10px);
}

.inv-transport-open__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(25px, 2.35vw, 38px);
    font-weight: 400;
    line-height: 1.18;
    letter-spacing: .025em;
    text-align: center;
}

.inv-transport-open__title-divider {
    display: block;
    width: 44px;
    height: 1px;
    margin: 18px auto 0;
    background: currentColor;
    opacity: .34;
}

.inv-transport-open__list {
    margin: clamp(28px, 3vw, 38px) 0 0;
    padding: 0;
    list-style: none;
    display: grid;
    gap: clamp(20px, 2.3vw, 30px);
}

.inv-transport-open__item {
    position: relative;
    margin: 0;
    padding-left: 1.05em;
    font-size: clamp(16px, 1.25vw, 19px);
    line-height: 1.72;
    text-align: left;
}

.inv-transport-open__item::before {
    content: "•";
    position: absolute;
    left: 0;
    top: 0;
    opacity: .58;
}

.inv-transport--info-layout .inv-info__groups {
    margin-top: clamp(46px, 6vw, 76px);
}

.inv-transport--info-layout .inv-info__group-title {
    text-transform: none;
}

.inv-transport--postit .inv-postit-stack {
    margin-top: clamp(42px, 5vw, 68px);
}

.inv-transport__intro--postit {
    margin-bottom: 0;
}

@media (max-width: 767.98px) {
    .inv-transport-open__grid,
    .inv-transport-open__grid--single {
        width: min(100%, 560px);
        grid-template-columns: minmax(0, 1fr);
        gap: 0;
        margin-top: 38px;
    }

    .inv-transport-open__grid--split::before {
        display: none;
    }

    .inv-transport-open__group {
        padding: 0;
    }

    .inv-transport-open__group + .inv-transport-open__group {
        position: relative;
        margin-top: 46px;
        padding-top: 46px;
    }

    .inv-transport-open__group + .inv-transport-open__group::before {
        display: none;
    }

    .inv-transport-open__title {
        font-size: clamp(24px, 7.2vw, 32px);
    }

    .inv-transport-open__list {
        gap: 22px;
        margin-top: 26px;
    }

    .inv-transport-open__item {
        width: min(100%, 35ch);
        margin-left: auto;
        margin-right: auto;
        font-size: 16px;
        line-height: 1.68;
    }
}

/* A2.7L · consumable Post-it stack + rebuild animation */
.inv-postit-card.is-dismissed-left,
.inv-postit-card.is-dismissed-right {
    opacity: 0;
    pointer-events: none;
}

.inv-postit-card.is-dismissed-left {
    transform: translate(calc(-50% - 118vw), calc(-50% - 26px)) rotate(-15deg) scale(.96);
}

.inv-postit-card.is-dismissed-right {
    transform: translate(calc(-50% + 118vw), calc(-50% - 26px)) rotate(15deg) scale(.96);
}

.inv-postit-card.is-returning-left,
.inv-postit-card.is-returning-right {
    opacity: 0;
    pointer-events: none;
    transition:
        transform 520ms cubic-bezier(.18,.78,.22,1),
        opacity 360ms ease,
        box-shadow 220ms ease;
}

.inv-postit-card.is-returning-left {
    transform: translate(calc(-50% - 76vw), calc(-50% - 18px)) rotate(-12deg) scale(.95);
}

.inv-postit-card.is-returning-right {
    transform: translate(calc(-50% + 76vw), calc(-50% - 18px)) rotate(12deg) scale(.95);
}

.inv-postit-stack.is-restoring .inv-postit-stack__control {
    pointer-events: none;
}

.inv-postit-stack__control:disabled {
    cursor: default;
    opacity: .42;
    transform: none;
}

@media (prefers-reduced-motion: reduce) {
    .inv-postit-card.is-returning-left,
    .inv-postit-card.is-returning-right {
        transition-duration: 1ms !important;
    }
}

/* Reusable Editorial List layout for questionnaire-driven content.
   Hotels and Activities keep one editorial row per item; Restaurants groups the
   existing questionnaire rows by Category. No content is duplicated in Studio. */
.inv-hotels--editorial-list,
.inv-restaurants--editorial-list,
.inv-activities--editorial-list {
    padding: clamp(88px, 10vw, 146px) 0;
}

.inv-hotels--editorial-list .inv-hotels__inner,
.inv-restaurants--editorial-list .inv-restaurants__inner,
.inv-activities--editorial-list .inv-activities__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-editorial-list {
    width: min(100%, 980px);
    margin-top: clamp(38px, 5vw, 64px);
    color: inherit;
}

.inv-editorial-list__row {
    position: relative;
    padding: clamp(24px, 3vw, 34px) clamp(10px, 2vw, 24px);
    text-align: center;
}

.inv-editorial-list__row::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    height: 1px;
    background: currentColor;
    opacity: .16;
}

.inv-editorial-list__row:last-child::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 1px;
    background: currentColor;
    opacity: .16;
}

.inv-editorial-list__heading {
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 12px;
    min-width: 0;
}

.inv-editorial-list__icon {
    width: 26px;
    height: 26px;
    flex: 0 0 26px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    color: currentColor;
}

.inv-editorial-list__icon svg {
    display: block;
    width: 100%;
    height: 100%;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.7;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.inv-editorial-list__icon--compact {
    width: 15px;
    height: 15px;
    flex-basis: 15px;
}

.inv-editorial-list__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(21px, 2vw, 30px);
    font-weight: 400;
    line-height: 1.2;
}

.inv-editorial-list__items,
.inv-editorial-list__description,
.inv-editorial-list__extra {
    margin: 10px auto 0;
    max-width: 880px;
    line-height: 1.65;
}

.inv-editorial-list__items {
    font-size: 1em;
}

/* Restaurants editorial layout: recommendations are intentionally easier to scan
   than comma-separated prose. Each restaurant gets its own centered line. */
.inv-editorial-list--restaurants .inv-editorial-list__restaurant-items {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 7px;
    margin-top: 14px;
    font-size: clamp(17px, 1.35vw, 21px);
    line-height: 1.42;
}

.inv-editorial-list--restaurants .inv-editorial-list__restaurant-item {
    display: flex;
    justify-content: center;
    align-items: center;
    min-width: 0;
}

.inv-editorial-list__description {
    white-space: pre-line;
}

.inv-editorial-list__extra {
    margin-top: 5px;
    opacity: .72;
    white-space: pre-line;
}

/* Hospedaje · Lista editorial */
.inv-editorial-list--hotels .inv-editorial-list__row--hotel {
    padding-left: clamp(14px, 2vw, 28px);
    padding-right: clamp(14px, 2vw, 28px);
}

.inv-hotel-editorial__address {
    margin-top: 14px;
}

.inv-hotel-editorial__details {
    margin: 14px auto 0;
    max-width: 760px;
    font-size: inherit;
    line-height: 1.6;
    opacity: .82;
}

.inv-hotel-editorial__deadline {
    margin: 12px auto 0;
    max-width: 760px;
    font-size: inherit;
    line-height: 1.6;
}

.inv-hotel-editorial__notes {
    max-width: 760px;
    margin-left: auto;
    margin-right: auto;
    white-space: pre-line;
}

.inv-editorial-list__item-with-map {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    white-space: nowrap;
}

.inv-editorial-list__item-link,
.inv-editorial-list__item-text {
    color: inherit;
}

.inv-editorial-list__item-link,
.inv-editorial-list__location-link,
.inv-editorial-list__action {
    text-decoration: none;
    color: inherit;
}

.inv-editorial-list__item-link:hover,
.inv-editorial-list__item-link:focus-visible,
.inv-editorial-list__action:hover,
.inv-editorial-list__action:focus-visible {
    text-decoration: underline;
    text-underline-offset: .18em;
}

.inv-editorial-list__location-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    opacity: .68;
    transition: opacity .18s ease, transform .18s ease;
}

.inv-editorial-list__location-link:hover,
.inv-editorial-list__location-link:focus-visible {
    opacity: 1;
    transform: translateY(-1px);
}

.inv-editorial-list__actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 8px;
    margin-top: 13px;
    font-family: var(--inv-label-font);
    font-size: clamp(10px, .9vw, 13px);
    letter-spacing: .13em;
    text-transform: uppercase;
}

.inv-editorial-list__action {
    opacity: .78;
}

.inv-editorial-list__action:hover,
.inv-editorial-list__action:focus-visible {
    opacity: 1;
}

.inv-editorial-list__action-separator {
    opacity: .4;
}

/* If Studio applies one content-card surface, it wraps the complete editorial list,
   never each individual recommendation. */
.inv-editorial-list.inv-layout-surface-card {
    padding: clamp(28px, 4vw, 52px);
}

@media (max-width: 720px) {
    .inv-hotels--editorial-list,
    .inv-restaurants--editorial-list,
    .inv-activities--editorial-list {
        padding: 72px 0;
    }

    .inv-editorial-list {
        width: 100%;
        margin-top: 32px;
    }

    .inv-editorial-list__row {
        padding: 22px 4px;
    }

    .inv-editorial-list__heading {
        gap: 9px;
    }

    .inv-editorial-list__icon {
        width: 23px;
        height: 23px;
        flex-basis: 23px;
    }

    .inv-editorial-list__icon--compact {
        width: 14px;
        height: 14px;
        flex-basis: 14px;
    }

    .inv-editorial-list__title {
        font-size: clamp(20px, 6vw, 27px);
    }

    .inv-editorial-list__items,
    .inv-editorial-list__description,
    .inv-editorial-list__extra {
        line-height: 1.55;
    }

    .inv-editorial-list--restaurants .inv-editorial-list__restaurant-items {
        gap: 8px;
        margin-top: 13px;
        font-size: clamp(17px, 4.8vw, 20px);
        line-height: 1.4;
    }

    .inv-editorial-list__item-with-map {
        white-space: normal;
    }

    .inv-editorial-list.inv-layout-surface-card {
        padding: 24px 18px;
    }
}

.inv-section.inv-section--body-size-override .inv-editorial-list__items,
.inv-section.inv-section--body-size-override .inv-editorial-list__action {
    font-size: var(--inv-section-body-size);
}

@media (max-width: 720px) {
    .inv-section.inv-section--mobile-body-size-override .inv-editorial-list__items,
    .inv-section.inv-section--mobile-body-size-override .inv-editorial-list__action,
    .inv-section.inv-section--mobile-body-size-auto .inv-editorial-list__items,
    .inv-section.inv-section--mobile-body-size-auto .inv-editorial-list__action {
        font-size: var(--inv-section-mobile-body-size);
    }
}

/* Keep restaurant names a little more prominent than the general section body size,
   while still following the size selected in Studio. */
.inv-section.inv-section--body-size-override .inv-editorial-list--restaurants .inv-editorial-list__restaurant-items {
    font-size: calc(var(--inv-section-body-size) * 1.12);
}

@media (max-width: 720px) {
    .inv-section.inv-section--mobile-body-size-override .inv-editorial-list--restaurants .inv-editorial-list__restaurant-items,
    .inv-section.inv-section--mobile-body-size-auto .inv-editorial-list--restaurants .inv-editorial-list__restaurant-items {
        font-size: calc(var(--inv-section-mobile-body-size) * 1.12);
    }
}

/* GuestBook / paper card: integrate the message field into the paper artwork.
   The field remains visibly editable, but avoids the hard white HTML-form block. */
.inv-guestbook__card.inv-local-paper-card.inv-has-paper-surface .inv-guestbook__textarea {
    background: rgba(255, 252, 247, .26);
    border: 0;
    border-radius: 8px;
    box-shadow: none;
    color: #302c28;
    caret-color: #302c28;
    transition:
        background-color .18s ease;
}

.inv-guestbook__card.inv-local-paper-card.inv-has-paper-surface .inv-guestbook__textarea::placeholder {
    color: currentColor;
    opacity: .48;
    font-style: italic;
}

.inv-guestbook__card.inv-local-paper-card.inv-has-paper-surface .inv-guestbook__textarea:hover {
    background: rgba(255, 252, 247, .32);
}

.inv-guestbook__card.inv-local-paper-card.inv-has-paper-surface .inv-guestbook__textarea:focus {
    background: rgba(255, 252, 247, .38);
    border: 0;
    outline: none;
    box-shadow: none;
}

@media (max-width: 720px) {
    .inv-guestbook__card.inv-local-paper-card.inv-has-paper-surface .inv-guestbook__textarea {
        min-height: 164px;
        padding: 18px 18px;
        border-radius: 6px;
    }
}

/* Optional one-event title within the card, above the event date.
   Applies to editorial, classic columns and icon timeline. */
.inv-additional-events__card-event-title {
    margin: 0 auto clamp(16px, 2.1vw, 26px);
    max-width: min(100%, 780px);
    font-family: var(--inv-heading-font);
    font-size: var(--inv-event-title-size, clamp(20px, 2vw, 28px));
    font-weight: 600;
    line-height: 1.3;
    letter-spacing: .09em;
    text-align: center;
    text-transform: uppercase;
    overflow-wrap: anywhere;
}

@media (max-width: 720px) {
    .inv-additional-events__card-event-title {
        margin-bottom: 16px;
        font-size: var(--inv-event-mobile-title-size, clamp(18px, 5vw, 24px));
    }
}

/* Additional Events: keep the shared date (and icon-timeline metadata)
   at the TOP of the same card as the event information. Other itinerary
   sections retain their existing layout and outer date placement. */
.inv-additional-events__card > .inv-events__date {
    margin: 0 auto clamp(18px, 2.7vw, 30px);
    max-width: 100%;
}

.inv-additional-events-classic__surface > .inv-events-classic__main-date {
    margin: 0 auto clamp(26px, 3vw, 38px);
}

.inv-additional-events--icon-timeline .inv-events-icon__surface > .inv-events-icon__meta {
    margin: 0 auto clamp(28px, 3vw, 42px);
}

@media (max-width: 720px) {
    .inv-additional-events__card > .inv-events__date {
        margin-bottom: 18px;
    }
    .inv-additional-events-classic__surface > .inv-events-classic__main-date {
        margin-bottom: 24px;
    }
    .inv-additional-events--icon-timeline .inv-events-icon__surface > .inv-events-icon__meta {
        margin-bottom: 28px;
    }
}

/* Single additional event (editorial): the shared date is immediately above
   the start time. Remove the compounded margin + first-row padding without
   changing the gaps between event details, or other itinerary layouts. */
.inv-additional-events__card--single-shared-date > .inv-events__date {
    margin-bottom: 4px;
}

.inv-additional-events__card--single-shared-date .inv-event-location-group__events > .inv-additional-event-row:first-child {
    padding-top: 8px;
}

.inv-additional-events__card--single-shared-date .inv-additional-event-row:first-child .inv-event-row__time {
    padding-top: 0;
}

/* Single additional event (classic columns): the previous fix targeted only
   Editorial. In ClassicColumns, a separate 24–38px date margin and the generic
   itinerary's 28–38px first-row top padding were both being applied. Keep a
   deliberate 12px gap instead, without changing multiple-event grids or the
   main wedding-day itinerary. Works at desktop and mobile widths. */
.inv-additional-events-classic__surface--single-shared-date > .inv-events-classic__main-date {
    margin-bottom: 12px;
}

.inv-additional-events-classic__surface--single-shared-date .inv-events-classic__group-events > .inv-events-classic__event:first-child {
    padding-top: 0;
}

/* Additional events: notes belong at the end of the event block and need a touch more presence. */
.inv-additional-event-note {
    margin-top: clamp(20px, 2vw, 28px);
    font-family: var(--inv-body-font);
    font-size: clamp(15px, 1.2vw, 18px);
    line-height: 1.6;
    text-align: center;
    opacity: .82;
}

.inv-additional-events-classic__event-group > .inv-additional-event-note {
    width: min(100%, 560px);
    margin-left: auto;
    margin-right: auto;
}


/* Additional-events discretion message supplied by the couple in Questionnaire. */
.inv-additional-events__privacy-message {
    max-width: 780px;
    margin: 10px auto 24px;
    text-align: center;
    font-size: var(--inv-section-body-size);
    line-height: 1.55;
}

@media (max-width: 767.98px) {
    .inv-additional-events__privacy-message {
        margin: 8px auto 20px;
        font-size: var(--inv-section-mobile-body-size);
    }
}

/* Loader-owned responsive monograms use <picture> so Desktop/Mobile artwork can differ
   without changing the existing monogram sizing/position system. */
picture.inv-hero__monogram-picture,
picture.inv-loader-screen__monogram-picture,
picture.inv-rotulo-screen__monogram-picture {
    display: contents;
}

/* A2.7 participation: decorative section backgrounds are authored with the
   important ornament anchored at the bottom. Keep that edge visible when the
   published viewport is wider than the Studio preview (background-size: cover
   otherwise crops equally from top and bottom). */
.inv-participation.inv-has-backdrop {
    --inv-section-backdrop-anchor-y: 100%;
}

/* A2.6: Hero ornaments must stay inside the hero viewport.
   Other decorated sections keep their intentional cross-section overflow. */
.inv-hero.inv-section--has-floral-decoration {
    overflow: hidden;
}
/* A2.6J — reusable stationery content layouts.
   These layouts separate photographic composition from the surface Style:
   - photo-full: photograph fills the card;
   - photo-bottom: text/paper above with an integrated photograph at the bottom;
   - photo-inset: editorial text plus a smaller side photograph;
   - paper-only: explicitly keeps the card typographic even if a photo is available. */

.inv-card-menu__menu-card--layout-photo-full {
    color: #fff;
    background: #555;
    text-shadow: 0 2px 12px rgba(0,0,0,.42);
}
.inv-card-menu__menu-card--layout-photo-full::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 0;
    background-image:
        linear-gradient(rgba(20,18,16,.14), rgba(20,18,16,.50)),
        var(--inv-card-photo, none);
    background-size: cover;
    background-position: center;
    transform: scale(1.015);
    pointer-events: none;
}
.inv-card-menu__menu-card--layout-photo-full:not(.inv-card-menu__menu-card--has-photo) {
    color: var(--inv-text);
    text-shadow: none;
    background: rgba(249, 246, 239, .98);
}
.inv-card-menu__menu-card--layout-photo-full:not(.inv-card-menu__menu-card--has-photo)::before {
    display: none;
}
.inv-card-menu__menu-card--layout-photo-full .inv-card-menu__open-cue {
    opacity: .78;
}

/* Integrated bottom photo: ideal for itinerary/accommodation cards. */
.inv-card-menu__menu-card--layout-photo-bottom {
    display: grid;
    grid-template-rows: minmax(0, 1fr) clamp(125px, 38%, 220px);
    padding: 0;
    align-items: stretch;
    justify-items: stretch;
    text-shadow: none;
}
.inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-content {
    width: 100%;
    min-height: 0;
    padding: clamp(24px, 3vw, 40px) clamp(22px, 3vw, 38px) clamp(20px, 2.4vw, 30px);
}
.inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-photo-region--bottom {
    position: relative;
    z-index: 1;
    display: block;
    width: 100%;
    min-height: 125px;
    align-self: stretch;
    background-image:
        linear-gradient(rgba(247,243,235,.02), rgba(247,243,235,.06)),
        var(--inv-card-photo, none);
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
    box-shadow: inset 0 1px 0 rgba(91,76,62,.08);
}
.inv-card-menu__menu-card--layout-photo-bottom:not(.inv-card-menu__menu-card--has-photo) {
    display: flex;
    padding: clamp(22px, 2.7vw, 34px);
}
.inv-card-menu__menu-card--layout-photo-bottom:not(.inv-card-menu__menu-card--has-photo) .inv-card-menu__card-content {
    padding: 0;
}

/* Inset photo: editorial paper with a small photograph nested on one side. */
.inv-card-menu__menu-card--layout-photo-inset {
    display: grid;
    grid-template-columns: minmax(0, 1.18fr) minmax(105px, .82fr);
    gap: 0;
    padding: 0;
    align-items: stretch;
    justify-items: stretch;
    text-align: left;
    text-shadow: none;
}
.inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__card-content {
    width: 100%;
    min-width: 0;
    padding: clamp(24px, 3vw, 38px) clamp(20px, 2.5vw, 34px);
    align-items: flex-start;
    text-align: left;
}
.inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__menu-title {
    max-width: 100%;
}
.inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__card-photo-region--inset {
    position: relative;
    z-index: 1;
    display: block;
    min-height: 100%;
    background-image:
        linear-gradient(rgba(247,243,235,.02), rgba(247,243,235,.04)),
        var(--inv-card-photo, none);
    background-repeat: no-repeat;
    background-position: center;
    background-size: cover;
    box-shadow: inset 1px 0 0 rgba(91,76,62,.08);
}
.inv-card-menu__menu-card--layout-photo-inset:not(.inv-card-menu__menu-card--has-photo) {
    display: flex;
    padding: clamp(22px, 2.7vw, 34px);
    text-align: center;
}
.inv-card-menu__menu-card--layout-photo-inset:not(.inv-card-menu__menu-card--has-photo) .inv-card-menu__card-content {
    padding: 0;
    align-items: center;
    text-align: center;
}

/* Explicit paper-only mode overrides Style=photo safely if a saved configuration
   is later changed in Studio without clearing its old photo fields. */
.inv-card-menu__menu-card--layout-paper-only {
    color: var(--inv-text);
    text-shadow: none;
}
.inv-card-menu__menu-card--layout-paper-only::before {
    display: none !important;
}
.inv-card-menu__menu-card--layout-paper-only .inv-card-menu__open-cue {
    opacity: .56;
}

@media (max-width: 760px) {
    .inv-card-menu__menu-card--layout-photo-bottom {
        grid-template-rows: minmax(0, 1fr) clamp(125px, 42vw, 185px);
    }
    .inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-content {
        padding: 28px 22px 22px;
    }

    /* Keep the inset composition visible on mobile, matching the stationery reference:
       copy on the left, smaller photograph on the right. */
    .inv-card-menu__menu-card--layout-photo-inset {
        grid-template-columns: minmax(0, 1.22fr) minmax(105px, .78fr);
    }
    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__card-content {
        padding: 24px 17px 24px 20px;
    }
    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__menu-title {
        font-size: clamp(20px, 7vw, 29px);
        line-height: 1.05;
    }
    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__open-cue {
        margin-top: 12px;
    }
}
/* A2.6K — external card ornaments.
   Grid placement and fine transforms live on a visible outer stage. The stationery
   frame/button stays inside that stage and may keep its own clipping/silhouette,
   while botanical/ribbon ornaments are siblings and can extend into the surrounding
   composition without affecting layout height. */

.inv-card-menu__card-stage {
    --inv-fine-desktop-x: 0px;
    --inv-fine-desktop-y: 0px;
    --inv-fine-desktop-scale: 1;
    --inv-fine-desktop-rotation: 0deg;
    --inv-fine-mobile-x: 0px;
    --inv-fine-mobile-y: 0px;
    --inv-fine-mobile-scale: 1;
    --inv-fine-mobile-rotation: 0deg;
    --inv-fine-layer: 2;

    position: relative;
    z-index: var(--inv-fine-layer, 2);
    min-width: 0;
    overflow: visible;
    isolation: isolate;
    transform-origin: center;
    transform:
        translate(var(--inv-fine-desktop-x), var(--inv-fine-desktop-y))
        scale(var(--inv-fine-desktop-scale));
}

.inv-card-menu--desktop-rotation .inv-card-menu__card-stage {
    transform:
        translate(var(--inv-fine-desktop-x), var(--inv-fine-desktop-y))
        rotate(var(--inv-fine-desktop-rotation))
        scale(var(--inv-fine-desktop-scale));
}

.inv-card-menu__card-stage--has-ornament {
    z-index: calc(var(--inv-fine-layer, 2) + 1);
}

.inv-card-menu__card-stage:hover,
.inv-card-menu__card-stage:focus-within {
    z-index: 30;
}

/* The old card-wrap remains the actual paper/frame surface, but no longer owns
   composition transforms or grid sizing. */
.inv-card-menu__card-stage > .inv-card-menu__card-wrap {
    position: relative;
    z-index: 1;
    width: 100%;
    height: 100%;
    min-height: 100%;
    transform: none !important;
}

/* Controlled two-column desktop sizing now belongs to the stage. */
.inv-card-menu__card-stage--size-small,
.inv-card-menu__card-stage--size-medium {
    grid-column: span 1;
}
.inv-card-menu__card-stage--size-large,
.inv-card-menu__card-stage--size-feature {
    grid-column: 1 / -1;
}

.inv-card-menu__card-stage--size-small { min-height: 170px; }
.inv-card-menu__card-stage--size-medium { min-height: 220px; }
.inv-card-menu__card-stage--size-large { min-height: 250px; }
.inv-card-menu__card-stage--size-feature { min-height: 340px; }

.inv-card-menu__card-stage--orientation-horizontal { min-height: 185px; }
.inv-card-menu__card-stage--orientation-vertical { min-height: 340px; }
.inv-card-menu__card-stage--orientation-square { aspect-ratio: 1 / 1; min-height: 0; }
.inv-card-menu__card-stage--orientation-auto { min-height: 210px; }
.inv-card-menu__card-stage--size-feature.inv-card-menu__card-stage--orientation-vertical {
    min-height: 390px;
}

/* Exterior ornaments use the stage as their containing block. */
.inv-card-menu__card-stage > .inv-card-menu__card-ornament--external {
    z-index: 4;
    width: min(48%, 210px);
    overflow: visible;
    filter: none;
    mix-blend-mode: normal;
}

/* Move the ornament together with the paper's subtle hover lift. */
.inv-card-menu__card-stage:hover > .inv-card-menu__card-ornament--external,
.inv-card-menu__card-stage:focus-within > .inv-card-menu__card-ornament--external {
    --inv-card-ornament-hover-y: -5px;
}

.inv-card-menu__card-ornament--external {
    transform:
        translate(
            var(--inv-card-ornament-x),
            calc(var(--inv-card-ornament-y) + var(--inv-card-ornament-hover-y, 0px))
        )
        scale(var(--inv-card-ornament-scale));
}

/* Push the anchors farther outside the paper than the former internal treatment.
   Studio X/Y offsets still fine-tune from these reusable anchors. */
.inv-card-menu__card-stage > .inv-card-menu__card-ornament--topleft {
    top: -13%;
    left: -11%;
}
.inv-card-menu__card-stage > .inv-card-menu__card-ornament--topright {
    top: -13%;
    right: -11%;
}
.inv-card-menu__card-stage > .inv-card-menu__card-ornament--bottomleft {
    bottom: -13%;
    left: -11%;
}
.inv-card-menu__card-stage > .inv-card-menu__card-ornament--bottomright {
    right: -11%;
    bottom: -13%;
}

@media (max-width: 900px) {
    .inv-card-menu__card-stage--size-small,
    .inv-card-menu__card-stage--size-medium {
        grid-column: span 1;
    }
    .inv-card-menu__card-stage--size-large,
    .inv-card-menu__card-stage--size-feature {
        grid-column: 1 / -1;
    }
}

@media (max-width: 760px) {
    .inv-card-menu__card-stage--size-small,
    .inv-card-menu__card-stage--size-medium,
    .inv-card-menu__card-stage--size-large,
    .inv-card-menu__card-stage--size-feature,
    .inv-card-menu__card-stage--orientation-horizontal,
    .inv-card-menu__card-stage--orientation-vertical,
    .inv-card-menu__card-stage--orientation-square,
    .inv-card-menu__card-stage--orientation-auto {
        grid-column: 1 / -1;
        grid-row: auto;
        aspect-ratio: auto;
        min-height: 150px;
        transform:
            translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y))
            scale(var(--inv-fine-mobile-scale));
    }

    .inv-card-menu__card-stage--size-feature {
        min-height: 320px;
    }
    .inv-card-menu__card-stage--size-large {
        min-height: 190px;
    }

    .inv-card-menu--mobile-rotation .inv-card-menu__card-stage {
        transform:
            translate(var(--inv-fine-mobile-x), var(--inv-fine-mobile-y))
            rotate(var(--inv-fine-mobile-rotation))
            scale(var(--inv-fine-mobile-scale));
    }

    .inv-card-menu--mobile-staggered .inv-card-menu__card-stage:not(.inv-card-menu__card-stage--size-feature):nth-of-type(odd) {
        margin-top: 18px;
    }
    .inv-card-menu--mobile-stacked .inv-card-menu__card-stage {
        grid-column: 1 / -1;
        margin-top: 0 !important;
    }

    .inv-card-menu__card-stage > .inv-card-menu__card-ornament--external {
        width: min(43%, 160px);
    }

    .inv-card-menu__card-stage > .inv-card-menu__card-ornament--topleft {
        top: -11%;
        left: -8%;
    }
    .inv-card-menu__card-stage > .inv-card-menu__card-ornament--topright {
        top: -11%;
        right: -8%;
    }
    .inv-card-menu__card-stage > .inv-card-menu__card-ornament--bottomleft {
        bottom: -11%;
        left: -8%;
    }
    .inv-card-menu__card-stage > .inv-card-menu__card-ornament--bottomright {
        right: -8%;
        bottom: -11%;
    }
}
/* A2.6L — reusable editorial card details: line icon, divider, description and CTA. */
.inv-card-menu__editorial-icon,
.inv-card-menu__editorial-eyebrow,
.inv-card-menu__editorial-divider,
.inv-card-menu__editorial-description,
.inv-card-menu__editorial-cta {
    position: relative;
    z-index: 2;
}

.inv-card-menu__editorial-icon {
    display: inline-grid;
    place-items: center;
    width: clamp(30px, 3vw, 44px);
    height: clamp(30px, 3vw, 44px);
    margin-bottom: 12px;
    color: color-mix(in srgb, currentColor 82%, #788472 18%);
}
.inv-card-menu__editorial-icon svg {
    display: block;
    width: 100%;
    height: 100%;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.45;
    stroke-linecap: round;
    stroke-linejoin: round;
}

.inv-card-menu__editorial-eyebrow {
    margin-bottom: 7px;
    font-family: var(--inv-label-font);
    font-size: clamp(8px, .82vw, 11px);
    letter-spacing: .24em;
    line-height: 1.25;
    text-transform: uppercase;
    opacity: .76;
}

.inv-card-menu__editorial-divider {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 13px;
    width: min(74%, 180px);
    margin: 13px auto 0;
    background: radial-gradient(circle, currentColor 0 2px, transparent 2.5px) center / 5px 5px no-repeat;
}
.inv-card-menu__editorial-divider::before,
.inv-card-menu__editorial-divider::after {
    content: "";
    flex: 1 1 auto;
    height: 1px;
    background: currentColor;
    opacity: .24;
}

.inv-card-menu__editorial-description {
    width: min(88%, 360px);
    margin-top: 14px;
    font-family: var(--inv-body-font);
    font-size: clamp(13px, 1.12vw, 16px);
    line-height: 1.42;
    letter-spacing: .005em;
    opacity: .82;
}

.inv-card-menu__editorial-cta {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    min-height: 39px;
    margin-top: 19px;
    padding: 8px 18px 7px 20px;
    border: 1px solid color-mix(in srgb, currentColor 30%, transparent);
    border-radius: 999px;
    font-family: var(--inv-label-font);
    font-size: clamp(8px, .78vw, 10px);
    line-height: 1;
    letter-spacing: .18em;
    text-transform: uppercase;
    white-space: nowrap;
    background: rgba(255,255,255,.10);
    transition: transform .18s ease, background-color .18s ease, border-color .18s ease;
}
.inv-card-menu__editorial-cta-arrow {
    font-size: 15px;
    line-height: .8;
    letter-spacing: 0;
    transform: translateY(-1px);
}
.inv-card-menu__menu-card:hover .inv-card-menu__editorial-cta,
.inv-card-menu__menu-card:focus-visible .inv-card-menu__editorial-cta {
    transform: translateY(-1px);
    border-color: color-mix(in srgb, currentColor 46%, transparent);
    background: color-mix(in srgb, currentColor 5%, transparent);
}

.inv-card-menu__menu-card--layout-detail .inv-card-menu__editorial-divider,
.inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-divider {
    margin-left: 0;
    margin-right: 0;
}
.inv-card-menu__menu-card--layout-detail .inv-card-menu__editorial-description,
.inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-description {
    width: 100%;
}
.inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-cta {
    padding-left: 14px;
    padding-right: 13px;
    gap: 8px;
}

@media (max-width: 760px) {
    .inv-card-menu__editorial-icon {
        width: 34px;
        height: 34px;
        margin-bottom: 10px;
    }
    .inv-card-menu__editorial-divider {
        width: min(68%, 150px);
        margin-top: 11px;
    }
    .inv-card-menu__editorial-description {
        width: min(92%, 320px);
        margin-top: 12px;
        font-size: clamp(12px, 3.55vw, 14px);
        line-height: 1.4;
    }
    .inv-card-menu__editorial-cta {
        min-height: 36px;
        margin-top: 16px;
        padding: 7px 14px 6px 16px;
        font-size: 8px;
        letter-spacing: .16em;
    }
    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-icon {
        width: 28px;
        height: 28px;
        margin-bottom: 8px;
    }
    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-description {
        font-size: 11px;
        line-height: 1.32;
    }
    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-cta {
        white-space: normal;
        text-align: left;
        font-size: 7px;
        padding: 7px 11px;
    }
}
/* A2.6M — reusable layout refinements.
   1) photo-bottom really means text above + photo below.
   2) the outer stage grows enough to contain editorial icon/description/CTA on desktop.
   3) photo-inset preserves a readable text column on mobile. */

/* Explicit placement prevents DOM append order from flipping the intended layout. */
.inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-content {
    grid-row: 1;
}
.inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-photo-region--bottom {
    grid-row: 2;
}

.inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__card-content {
    grid-column: 1;
}
.inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__card-photo-region--inset {
    grid-column: 2;
}

/* Desktop photo-bottom cards need enough real stage height for:
   icon + title + divider + description + CTA + integrated photo.
   This fixes Itinerario without changing its saved size/orientation settings. */
@media (min-width: 761px) {
    .inv-card-menu__card-stage--layout-photo-bottom {
        min-height: 510px;
    }

    .inv-card-menu__card-stage--layout-photo-bottom.inv-card-menu__card-stage--size-feature,
    .inv-card-menu__card-stage--layout-photo-bottom.inv-card-menu__card-stage--orientation-vertical {
        min-height: 540px;
    }

    .inv-card-menu__menu-card--layout-photo-bottom {
        grid-template-rows: minmax(270px, 1fr) clamp(185px, 38%, 230px);
    }

    .inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-content {
        padding-top: clamp(42px, 5vw, 68px);
        padding-bottom: 26px;
    }
}

/* Mobile inset: text must remain the dominant column, with the photo as the accent.
   This matches the approved stationery reference for Eventos adicionales. */
@media (max-width: 760px) {
    .inv-card-menu__card-stage--layout-photo-inset {
        min-height: 260px;
    }

    .inv-card-menu__menu-card--layout-photo-inset {
        grid-template-columns: minmax(0, 1.42fr) minmax(92px, .58fr);
    }

    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__card-content {
        grid-column: 1;
        padding: 22px 14px 20px 18px;
        justify-content: center;
    }

    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__card-photo-region--inset {
        grid-column: 2;
        min-width: 0;
        background-position: center;
    }

    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-icon {
        width: 24px;
        height: 24px;
        margin-bottom: 7px;
    }

    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__menu-title {
        font-size: clamp(18px, 5.8vw, 24px);
        line-height: 1.03;
        overflow-wrap: anywhere;
    }

    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-divider {
        width: min(82%, 105px);
        margin-top: 9px;
    }

    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-description {
        margin-top: 9px;
        font-size: 10.5px;
        line-height: 1.28;
    }

    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-cta {
        min-height: 31px;
        margin-top: 11px;
        padding: 6px 9px;
        font-size: 6.8px;
        line-height: 1.15;
        letter-spacing: .11em;
        gap: 6px;
    }

    .inv-card-menu__menu-card--layout-photo-inset .inv-card-menu__editorial-cta-arrow {
        font-size: 12px;
    }
}
/* A2.6N — Card Menu Motion & Depth.
   Premium stationery motion: soft one-time reveal, tiny depth offsets and tactile
   hover states. All movement is disabled when the visitor requests reduced motion. */

.inv-card-menu__motion-item {
    --inv-motion-delay: 0ms;
    will-change: opacity, translate, filter;
}

.inv-card-menu--motion-ready .inv-card-menu__motion-item {
    opacity: 0;
    translate: 0 24px;
    filter: blur(2.5px);
    transition:
        opacity .72s cubic-bezier(.22,.61,.36,1) var(--inv-motion-delay),
        translate .82s cubic-bezier(.16,1,.3,1) var(--inv-motion-delay),
        filter .62s ease var(--inv-motion-delay);
}

.inv-card-menu--motion-ready .inv-card-menu__motion-item--header {
    translate: 0 18px;
}

.inv-card-menu--motion-ready .inv-card-menu__motion-item.is-motion-visible {
    opacity: 1;
    translate: 0 0;
    filter: none;
}

/* The paper itself lifts slightly. Existing saved rotation/scale remain on the stage. */
.inv-card-menu__card-stage > .inv-card-menu__card-wrap {
    transition:
        translate .32s cubic-bezier(.2,.75,.25,1),
        box-shadow .38s ease,
        filter .38s ease;
}

@media (hover:hover) and (pointer:fine) {
    .inv-card-menu__card-stage:hover > .inv-card-menu__card-wrap,
    .inv-card-menu__card-stage:focus-within > .inv-card-menu__card-wrap {
        translate: 0 -2px;
        filter: drop-shadow(0 5px 7px rgba(42,35,30,.035));
    }
}

/* Exterior ornaments live on a slightly different visual plane. */
.inv-card-menu__card-ornament--external {
    translate: 0 var(--inv-depth-ornament-y, 0px);
    transition:
        translate .18s linear,
        opacity .5s ease,
        filter .45s ease;
    will-change: translate;
}

.inv-card-menu--motion-ready
.inv-card-menu__motion-item:not(.is-motion-visible)
> .inv-card-menu__card-ornament--external {
    opacity: 0;
    filter: blur(2px);
}

.inv-card-menu--motion-ready
.inv-card-menu__motion-item.is-motion-visible
> .inv-card-menu__card-ornament--external {
    opacity: var(--inv-card-ornament-opacity, .75);
    filter: none;
}

/* Integrated photos breathe slightly inside the stationary paper. */
.inv-card-menu__card-photo-region {
    translate: 0 var(--inv-depth-photo-y, 0px);
    scale: 1.012;
    transition:
        translate .18s linear,
        scale 1.05s cubic-bezier(.2,.75,.25,1),
        filter .9s ease;
    will-change: translate, scale;
}

.inv-card-menu__menu-card--layout-photo-full::before {
    transition:
        transform 1.15s cubic-bezier(.2,.75,.25,1),
        filter .9s ease;
}

.inv-card-menu__photo-card img {
    translate: 0 var(--inv-depth-header-photo-y, 0px);
    scale: 1.012;
    transition:
        translate .18s linear,
        scale 1.2s cubic-bezier(.2,.75,.25,1),
        filter 1s ease;
    will-change: translate, scale;
}

@media (hover:hover) and (pointer:fine) {
    .inv-card-menu__menu-card:hover .inv-card-menu__card-photo-region,
    .inv-card-menu__menu-card:focus-visible .inv-card-menu__card-photo-region {
        scale: 1.03;
    }

    .inv-card-menu__menu-card--layout-photo-full:hover::before,
    .inv-card-menu__menu-card--layout-photo-full:focus-visible::before {
        transform: scale(1.038);
    }

    .inv-card-menu__photo-card:hover img {
        scale: 1.028;
    }
}

/* Tiny CTA motion is enough to make the interaction feel responsive. */
.inv-card-menu__editorial-cta-arrow {
    transition: transform .24s cubic-bezier(.2,.75,.25,1);
}

.inv-card-menu__menu-card:hover .inv-card-menu__editorial-cta-arrow,
.inv-card-menu__menu-card:focus-visible .inv-card-menu__editorial-cta-arrow {
    transform: translate(4px, -1px);
}

/* A very soft shadow change gives embossed/paper cards more physical depth. */
@media (hover:hover) and (pointer:fine) {
    .inv-card-menu__card-stage:hover .inv-card-menu__menu-card,
    .inv-card-menu__card-stage:focus-within .inv-card-menu__menu-card {
        box-shadow:
            0 30px 62px rgba(42,35,30,.17),
            0 5px 13px rgba(42,35,30,.07);
    }

    .inv-card-menu__card-stage:hover .inv-card-menu__menu-card--has-artwork,
    .inv-card-menu__card-stage:focus-within .inv-card-menu__menu-card--has-artwork {
        box-shadow: none;
    }
}

/* Mobile keeps the entrance/depth effect, but avoids hover-only lifting. */
@media (max-width: 760px) {
    .inv-card-menu--motion-ready .inv-card-menu__motion-item {
        translate: 0 18px;
        filter: blur(1.5px);
        transition-duration: .64s, .72s, .55s;
    }

    .inv-card-menu--motion-ready .inv-card-menu__motion-item.is-motion-visible {
        translate: 0 0;
        filter: none;
    }

    .inv-card-menu__card-photo-region,
    .inv-card-menu__photo-card img {
        scale: 1.008;
    }
}

/* Accessibility: no hidden state, parallax, hover travel or animated transitions. */
@media (prefers-reduced-motion: reduce) {
    .inv-card-menu__motion-item,
    .inv-card-menu--motion-ready .inv-card-menu__motion-item,
    .inv-card-menu--motion-ready .inv-card-menu__motion-item.is-motion-visible {
        opacity: 1 !important;
        translate: none !important;
        filter: none !important;
        transition: none !important;
        will-change: auto !important;
    }

    .inv-card-menu__card-stage > .inv-card-menu__card-wrap,
    .inv-card-menu__card-ornament--external,
    .inv-card-menu__card-photo-region,
    .inv-card-menu__photo-card img,
    .inv-card-menu__menu-card--layout-photo-full::before,
    .inv-card-menu__editorial-cta-arrow {
        translate: none !important;
        scale: 1 !important;
        transition: none !important;
        animation: none !important;
        will-change: auto !important;
    }
}
/* A2.6O — Paper Surface & Shadows.
   Material pass for Card Menu stationery: warmer paper, visible grain, contact
   shadows, layered depth and photographic prints mounted on paper. */

.inv-card-menu {
    --inv-paper-ivory: #f5f0e7;
    --inv-paper-highlight: rgba(255,255,255,.72);
    --inv-paper-edge: rgba(116,98,78,.18);
    --inv-paper-contact: rgba(55,43,32,.13);
    --inv-paper-shadow: rgba(55,43,32,.16);
}

/* ---------------------------------------------------------
   OUTER PAPER / FRAME
   --------------------------------------------------------- */

.inv-card-menu__card-wrap:not(.inv-card-menu__card-wrap--has-artwork) {
    background-color: color-mix(in srgb, var(--inv-card-frame-color, #eee7dc) 78%, #f8f3ea);
    background-image:
        linear-gradient(135deg, rgba(255,255,255,.22), rgba(102,82,61,.025)),
        var(--inv-card-menu-paper, none);
    background-size: auto, cover;
    background-position: center;
    background-blend-mode: soft-light, normal;
    border-color: color-mix(in srgb, var(--inv-card-frame-border, #b9aea0) 52%, transparent);
    box-shadow:
        0 2px 3px rgba(55,43,32,.10),
        0 10px 20px rgba(55,43,32,.075),
        0 28px 52px rgba(55,43,32,.11),
        inset 0 1px 0 rgba(255,255,255,.62);
}

/* A subtle fibrous veil on the frame itself. */
.inv-card-menu__card-wrap:not(.inv-card-menu__card-wrap--has-artwork)::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 0;
    border-radius: inherit;
    pointer-events: none;
    opacity: .33;
    background-image:
        radial-gradient(circle at 12% 20%, rgba(95,77,58,.07) 0 .55px, transparent .75px),
        radial-gradient(circle at 72% 34%, rgba(255,255,255,.42) 0 .65px, transparent .85px),
        radial-gradient(circle at 38% 81%, rgba(95,77,58,.045) 0 .45px, transparent .7px),
        var(--inv-card-menu-paper, none);
    background-size: 15px 17px, 19px 21px, 13px 14px, cover;
    background-position: 0 0, 4px 7px, 9px 3px, center;
    mix-blend-mode: multiply;
}

.inv-card-menu__card-wrap:not(.inv-card-menu__card-wrap--has-artwork)
> .inv-card-menu__menu-card {
    position: relative;
    z-index: 1;
}

/* Organic-looking edges for standard paper silhouettes without changing saved frame type. */
.inv-card-menu__card-wrap--frame-classic,
.inv-card-menu__card-wrap--frame-soft {
    outline: 1px solid rgba(255,255,255,.26);
    outline-offset: -2px;
}

.inv-card-menu__card-wrap--frame-arch {
    border-color: rgba(137,119,99,.22);
    box-shadow:
        0 2px 3px rgba(55,43,32,.10),
        0 12px 24px rgba(55,43,32,.08),
        0 34px 58px rgba(55,43,32,.12),
        inset 0 1px 0 rgba(255,255,255,.68);
}

.inv-card-menu__card-wrap--frame-double {
    box-shadow:
        inset 0 0 0 2px rgba(255,255,255,.45),
        inset 0 0 0 4px color-mix(in srgb, var(--inv-card-frame-border) 44%, transparent),
        0 2px 3px rgba(55,43,32,.09),
        0 24px 46px rgba(55,43,32,.11);
}

.inv-card-menu__card-wrap--frame-scalloped,
.inv-card-menu__card-wrap--frame-plaque,
.inv-card-menu__card-wrap--frame-plaqueclassic {
    filter:
        drop-shadow(0 2px 2px rgba(55,43,32,.09))
        drop-shadow(0 14px 20px rgba(55,43,32,.10));
}

/* ---------------------------------------------------------
   INNER PAPER SURFACE
   --------------------------------------------------------- */

.inv-card-menu__menu-card--paper,
.inv-card-menu__menu-card--embossed,
.inv-card-menu__menu-card--vellum,
.inv-card-menu__menu-card--layout-paper-only,
.inv-card-menu__menu-card--layout-photo-bottom,
.inv-card-menu__menu-card--layout-photo-inset {
    background-color: var(--inv-paper-ivory);
    background-image:
        linear-gradient(148deg, rgba(255,255,255,.32), rgba(109,91,72,.026) 55%, rgba(255,255,255,.12)),
        var(--inv-card-menu-paper, none);
    background-size: auto, cover;
    background-position: center;
    background-blend-mode: soft-light, normal;
    box-shadow:
        inset 0 1px 0 var(--inv-paper-highlight),
        inset 0 0 0 1px rgba(117,99,79,.045);
}

/* Increase actual paper grain without obscuring copy. */
.inv-card-menu__menu-card--paper::before,
.inv-card-menu__menu-card--embossed::before,
.inv-card-menu__menu-card--vellum::before,
.inv-card-menu__menu-card--layout-paper-only::before,
.inv-card-menu__menu-card--layout-photo-bottom::before,
.inv-card-menu__menu-card--layout-photo-inset::before {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    opacity: .38;
    background-image:
        radial-gradient(circle at 20% 30%, rgba(82,67,52,.07) 0 .45px, transparent .7px),
        radial-gradient(circle at 67% 65%, rgba(255,255,255,.58) 0 .6px, transparent .85px),
        radial-gradient(circle at 42% 12%, rgba(82,67,52,.045) 0 .35px, transparent .6px),
        var(--inv-card-menu-paper, none);
    background-size: 14px 16px, 18px 20px, 11px 13px, cover;
    background-position: 0 0, 5px 9px, 8px 3px, center;
    mix-blend-mode: multiply;
}

/* Preserve readable content above the paper fibers. */
.inv-card-menu__card-content,
.inv-card-menu__card-photo-region,
.inv-card-menu__card-artwork {
    position: relative;
    z-index: 2;
}

/* Embossed remains slightly richer, but no longer looks like a flat beige block. */
.inv-card-menu__menu-card--embossed {
    background-color: #f2eadf;
    box-shadow:
        inset 0 1px 0 rgba(255,255,255,.72),
        inset 0 -1px 0 rgba(98,78,57,.06);
}
.inv-card-menu__menu-card--embossed::before {
    opacity: .46;
    filter: contrast(.94) brightness(1.025);
}

/* Vellum is lighter and more translucent while still reading as a physical layer. */
.inv-card-menu__menu-card--vellum {
    background-color: rgba(248,244,236,.91);
    backdrop-filter: blur(1.5px);
    box-shadow:
        inset 0 1px 0 rgba(255,255,255,.72),
        inset 0 0 0 1px rgba(113,95,75,.04);
}

/* ---------------------------------------------------------
   PHOTOGRAPHS AS PHYSICAL PRINTS
   --------------------------------------------------------- */

.inv-card-menu__card-photo-region {
    border: 6px solid rgba(248,244,236,.96);
    background-color: #e8e0d5;
    box-shadow:
        0 2px 3px rgba(54,42,31,.12),
        0 10px 20px rgba(54,42,31,.12),
        inset 0 0 0 1px rgba(96,76,57,.08);
}

/* Itinerary / accommodation: photo mounted into the lower half of a paper card. */
.inv-card-menu__menu-card--layout-photo-bottom {
    padding-bottom: 14px;
}

.inv-card-menu__menu-card--layout-photo-bottom
.inv-card-menu__card-photo-region--bottom {
    width: auto;
    margin: 0 14px;
    min-height: 125px;
    border-width: 6px;
    transform-origin: center;
}

/* Editorial inset: photo feels placed on top of the paper instead of being a rigid column. */
.inv-card-menu__menu-card--layout-photo-inset {
    column-gap: 9px;
}

.inv-card-menu__menu-card--layout-photo-inset
.inv-card-menu__card-photo-region--inset {
    min-height: calc(100% - 24px);
    margin: 12px 12px 12px 0;
    border-width: 6px;
    box-shadow:
        0 2px 3px rgba(54,42,31,.10),
        0 12px 22px rgba(54,42,31,.13),
        inset 0 0 0 1px rgba(96,76,57,.07);
}

/* Full-photo cards also read as a mounted print. */
.inv-card-menu__menu-card--layout-photo-full {
    border: 7px solid rgba(248,244,236,.96);
    box-shadow:
        0 2px 3px rgba(54,42,31,.12),
        0 14px 28px rgba(54,42,31,.14);
}

/* ---------------------------------------------------------
   CONTACT SHADOW / PAPER LIFT
   --------------------------------------------------------- */

.inv-card-menu__card-stage::after {
    content: "";
    position: absolute;
    z-index: -1;
    left: 7%;
    right: 7%;
    bottom: -9px;
    height: 22px;
    border-radius: 50%;
    background: rgba(55,43,32,.15);
    filter: blur(13px);
    opacity: .46;
    pointer-events: none;
    transform: scaleX(.96);
}

.inv-card-menu__card-stage--has-ornament::after {
    opacity: .40;
}

/* The shadow should never compete with transparent PNG artwork cards. */
.inv-card-menu__card-stage:has(.inv-card-menu__card-wrap--has-artwork)::after {
    opacity: .20;
}

/* Slight edge warmth gives the illusion of paper thickness. */
.inv-card-menu__menu-card--paper,
.inv-card-menu__menu-card--layout-paper-only,
.inv-card-menu__menu-card--layout-photo-bottom,
.inv-card-menu__menu-card--layout-photo-inset {
    border: 1px solid rgba(116,98,78,.055);
}

/* ---------------------------------------------------------
   MOBILE TUNING
   --------------------------------------------------------- */

@media (max-width: 760px) {
    .inv-card-menu__card-wrap:not(.inv-card-menu__card-wrap--has-artwork) {
        box-shadow:
            0 2px 3px rgba(55,43,32,.095),
            0 9px 18px rgba(55,43,32,.075),
            0 22px 42px rgba(55,43,32,.105),
            inset 0 1px 0 rgba(255,255,255,.64);
    }

    .inv-card-menu__card-stage::after {
        left: 9%;
        right: 9%;
        bottom: -7px;
        height: 18px;
        filter: blur(11px);
        opacity: .42;
    }

    .inv-card-menu__menu-card--layout-photo-bottom {
        padding-bottom: 11px;
    }

    .inv-card-menu__menu-card--layout-photo-bottom
    .inv-card-menu__card-photo-region--bottom {
        margin: 0 11px;
        border-width: 5px;
    }

    .inv-card-menu__menu-card--layout-photo-inset {
        column-gap: 5px;
    }

    .inv-card-menu__menu-card--layout-photo-inset
    .inv-card-menu__card-photo-region--inset {
        min-height: calc(100% - 18px);
        margin: 9px 9px 9px 0;
        border-width: 4px;
    }

    .inv-card-menu__menu-card--layout-photo-full {
        border-width: 5px;
    }
}

/* Reduced motion users keep the same materiality; only animated depth is disabled. */
@media (prefers-reduced-motion: reduce) {
    .inv-card-menu__card-stage::after {
        transition: none !important;
    }
}
/* A2.6P — Artisanal paper realism.
   Goal: move Card Menu from "styled cards" to "physical stationery pieces".
   Section-specific treatments add rough paper edges, mounted-photo behavior and
   bits of translucent tape where the approved reference calls for them. */

/* ---------------------------------------------------------
   GLOBAL PAPER REALISM BOOST
   --------------------------------------------------------- */

.inv-card-menu__card-wrap:not(.inv-card-menu__card-wrap--has-artwork) {
    box-shadow:
        0 1px 1px rgba(49,37,28,.07),
        0 5px 10px rgba(49,37,28,.05),
        0 18px 34px rgba(49,37,28,.09),
        0 34px 60px rgba(49,37,28,.05),
        inset 0 1px 0 rgba(255,255,255,.68);
}

.inv-card-menu__menu-card--paper,
.inv-card-menu__menu-card--embossed,
.inv-card-menu__menu-card--vellum,
.inv-card-menu__menu-card--layout-paper-only,
.inv-card-menu__menu-card--layout-photo-bottom,
.inv-card-menu__menu-card--layout-photo-inset {
    background-image:
        linear-gradient(150deg, rgba(255,255,255,.34), rgba(127,101,75,.022) 58%, rgba(255,255,255,.12)),
        radial-gradient(circle at 18% 24%, rgba(134,110,82,.055) 0 .55px, transparent .9px),
        radial-gradient(circle at 71% 63%, rgba(255,255,255,.46) 0 .7px, transparent 1px),
        radial-gradient(circle at 37% 82%, rgba(134,110,82,.035) 0 .45px, transparent .8px),
        var(--inv-card-menu-paper, none);
    background-size: auto, 14px 16px, 20px 22px, 12px 13px, cover;
    background-position: center, 0 0, 3px 8px, 8px 5px, center;
    background-blend-mode: soft-light, multiply, screen, multiply, normal;
}

.inv-card-menu__menu-card--paper::before,
.inv-card-menu__menu-card--embossed::before,
.inv-card-menu__menu-card--vellum::before,
.inv-card-menu__menu-card--layout-paper-only::before,
.inv-card-menu__menu-card--layout-photo-bottom::before,
.inv-card-menu__menu-card--layout-photo-inset::before {
    opacity: .48;
}

/* ---------------------------------------------------------
   ITINERARY / HOTELS — ARCH CARD WITH INTEGRATED PHOTO
   --------------------------------------------------------- */

.inv-card-menu__menu-card[data-card-section-key="events"].inv-card-menu__menu-card--layout-photo-bottom,
.inv-card-menu__menu-card[data-card-section-key="hotels"].inv-card-menu__menu-card--layout-photo-bottom {
    background-color: #f7f2ea;
    background-image:
        linear-gradient(156deg, rgba(255,255,255,.34), rgba(134,110,84,.024) 56%, rgba(255,255,255,.10)),
        radial-gradient(circle at 20% 28%, rgba(120,96,69,.05) 0 .55px, transparent .85px),
        radial-gradient(circle at 70% 68%, rgba(255,255,255,.42) 0 .75px, transparent 1.05px),
        radial-gradient(circle at 40% 15%, rgba(120,96,69,.038) 0 .45px, transparent .75px),
        var(--inv-card-menu-paper, none);
    background-size: auto, 14px 16px, 19px 20px, 12px 13px, cover;
    background-position: center, 0 0, 5px 9px, 8px 4px, center;
    background-blend-mode: soft-light, multiply, screen, multiply, normal;
    box-shadow:
        inset 0 1px 0 rgba(255,255,255,.70),
        inset 0 0 0 1px rgba(117,99,79,.045);
}

.inv-card-menu__card-wrap:has(.inv-card-menu__menu-card[data-card-section-key="events"].inv-card-menu__menu-card--layout-photo-bottom),
.inv-card-menu__card-wrap:has(.inv-card-menu__menu-card[data-card-section-key="hotels"].inv-card-menu__menu-card--layout-photo-bottom) {
    box-shadow:
        0 2px 3px rgba(50,38,29,.08),
        0 12px 24px rgba(50,38,29,.08),
        0 28px 48px rgba(50,38,29,.12),
        inset 0 1px 0 rgba(255,255,255,.72);
}

/* Integrated photo should feel embedded in the bottom of the paper, not like a
   framed print placed inside the card. */
.inv-card-menu__menu-card[data-card-section-key="events"].inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-photo-region--bottom,
.inv-card-menu__menu-card[data-card-section-key="hotels"].inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-photo-region--bottom {
    margin: 0;
    border: 0;
    box-shadow: none;
    min-height: clamp(170px, 40%, 245px);
    overflow: hidden;
}

/* Soft feather between paper and image. */
.inv-card-menu__menu-card[data-card-section-key="events"].inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-photo-region--bottom::before,
.inv-card-menu__menu-card[data-card-section-key="hotels"].inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-photo-region--bottom::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    top: -1px;
    height: 28px;
    z-index: 2;
    pointer-events: none;
    background:
        linear-gradient(to bottom, rgba(247,242,234,.96), rgba(247,242,234,0)),
        radial-gradient(circle at 8px 15px, rgba(247,242,234,.96) 0 8px, transparent 8.5px) 0 0 / 24px 22px repeat-x;
    mix-blend-mode: normal;
}

/* Rough lower silhouette for the arch paper. */
.inv-card-menu__menu-card[data-card-section-key="events"].inv-card-menu__menu-card--layout-photo-bottom::after,
.inv-card-menu__menu-card[data-card-section-key="hotels"].inv-card-menu__menu-card--layout-photo-bottom::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -10px;
    height: 26px;
    z-index: 3;
    pointer-events: none;
    background:
        radial-gradient(circle at 10px -4px, transparent 11px, #f7f2ea 11.5px) 0 0 / 28px 20px repeat-x,
        radial-gradient(circle at 24px -3px, transparent 9px, #f7f2ea 9.5px) 0 0 / 31px 18px repeat-x;
    filter: drop-shadow(0 2px 2px rgba(49,37,28,.08));
}

/* Slightly warmer edge line around the arch. */
.inv-card-menu__card-wrap:has(.inv-card-menu__menu-card[data-card-section-key="events"].inv-card-menu__menu-card--layout-photo-bottom) .inv-card-menu__menu-card,
.inv-card-menu__card-wrap:has(.inv-card-menu__menu-card[data-card-section-key="hotels"].inv-card-menu__menu-card--layout-photo-bottom) .inv-card-menu__menu-card {
    border: 1px solid rgba(125,105,82,.07);
}

/* ---------------------------------------------------------
   EVENTOS ADICIONALES — TORN PAPER + TAPED PHOTO
   --------------------------------------------------------- */

.inv-card-menu__card-wrap:has(.inv-card-menu__menu-card[data-card-section-key="additionalevents"]) {
    background-color: transparent;
    border-color: rgba(135,113,88,.12);
    box-shadow:
        0 2px 2px rgba(49,37,28,.07),
        0 12px 22px rgba(49,37,28,.08),
        0 28px 50px rgba(49,37,28,.09);
}

.inv-card-menu__menu-card[data-card-section-key="additionalevents"] {
    border: 1px solid rgba(128,107,85,.05);
    box-shadow:
        inset 0 1px 0 rgba(255,255,255,.68),
        inset 0 0 0 1px rgba(125,101,77,.03);
}

/* Rougher bottom edge to mimic torn handmade paper. */
.inv-card-menu__menu-card[data-card-section-key="additionalevents"]::after {
    content: "";
    position: absolute;
    left: -1px;
    right: -1px;
    bottom: -11px;
    height: 28px;
    z-index: 4;
    pointer-events: none;
    background:
        radial-gradient(circle at 8px -5px, transparent 10px, #f5f0e7 10.5px) 0 0 / 23px 19px repeat-x,
        radial-gradient(circle at 19px -4px, transparent 8px, #f5f0e7 8.5px) 0 0 / 25px 17px repeat-x;
    filter: drop-shadow(0 2px 1px rgba(49,37,28,.06));
}

/* The mounted photo feels like a separate print attached onto the paper. */
.inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-photo-region--inset {
    position: relative;
    margin: 16px 12px 14px 0;
    border: 6px solid rgba(248,243,235,.98);
    box-shadow:
        0 2px 3px rgba(49,37,28,.08),
        0 10px 20px rgba(49,37,28,.11),
        0 18px 28px rgba(49,37,28,.08);
    transform: rotate(2deg);
    overflow: visible;
}

/* Soft paper photo border */
.inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-photo-region--inset::after {
    content: "";
    position: absolute;
    inset: 0;
    pointer-events: none;
    border: 1px solid rgba(122,100,78,.08);
    box-shadow: inset 0 1px 0 rgba(255,255,255,.52);
}

/* Translucent tape pieces like the approved reference. */
.inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-photo-region--inset::before {
    content: "";
    position: absolute;
    top: -15px;
    left: 14px;
    width: 58px;
    height: 18px;
    border-radius: 3px;
    background:
        linear-gradient(180deg, rgba(255,255,255,.34), rgba(214,199,174,.34)),
        rgba(229,217,197,.52);
    box-shadow:
        0 1px 1px rgba(110,92,69,.07),
        inset 0 1px 0 rgba(255,255,255,.46);
    transform: rotate(3deg);
}

.inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-photo-region--inset {
    --inv-photo-tape-right: 1;
}
.inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-photo-region--inset > * {
    position: relative;
    z-index: 1;
}

/* Right-side second tape via extra shadowless pseudo on the paper card */
.inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-content::after {
    content: "";
    position: absolute;
    top: -10px;
    right: -118px;
    width: 46px;
    height: 15px;
    border-radius: 3px;
    background:
        linear-gradient(180deg, rgba(255,255,255,.30), rgba(214,199,174,.30)),
        rgba(229,217,197,.46);
    box-shadow:
        0 1px 1px rgba(110,92,69,.06),
        inset 0 1px 0 rgba(255,255,255,.42);
    transform: rotate(-7deg);
    pointer-events: none;
    z-index: 4;
}

/* ---------------------------------------------------------
   OTHER PAPER-ONLY CARDS — clearer physical surface
   --------------------------------------------------------- */

.inv-card-menu__menu-card[data-card-section-key="dresscode"],
.inv-card-menu__menu-card[data-card-section-key="rsvp"],
.inv-card-menu__menu-card[data-card-section-key="giftregistry"],
.inv-card-menu__menu-card[data-card-section-key="guestbook"],
.inv-card-menu__menu-card[data-card-section-key="restaurants"],
.inv-card-menu__menu-card[data-card-section-key="additionalinfo"] {
    background-color: #f6f1e9;
    border-color: rgba(125,104,81,.055);
    box-shadow:
        inset 0 1px 0 rgba(255,255,255,.74),
        inset 0 0 0 1px rgba(125,104,81,.028);
}

.inv-card-menu__card-wrap:has(.inv-card-menu__menu-card[data-card-section-key="giftregistry"]) {
    box-shadow:
        0 2px 3px rgba(49,37,28,.08),
        0 14px 26px rgba(49,37,28,.085),
        0 26px 48px rgba(49,37,28,.08);
}

/* Gallery print becomes more obviously photographic and mounted. */
.inv-card-menu__menu-card[data-card-section-key="gallery"].inv-card-menu__menu-card--layout-photo-full {
    border-color: rgba(250,246,239,.98);
    box-shadow:
        0 2px 3px rgba(49,37,28,.08),
        0 12px 22px rgba(49,37,28,.10),
        0 22px 36px rgba(49,37,28,.10);
}

/* ---------------------------------------------------------
   MOBILE TUNING
   --------------------------------------------------------- */

@media (max-width: 760px) {
    .inv-card-menu__menu-card[data-card-section-key="events"].inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-photo-region--bottom,
    .inv-card-menu__menu-card[data-card-section-key="hotels"].inv-card-menu__menu-card--layout-photo-bottom .inv-card-menu__card-photo-region--bottom {
        min-height: 155px;
    }

    .inv-card-menu__menu-card[data-card-section-key="events"].inv-card-menu__menu-card--layout-photo-bottom::after,
    .inv-card-menu__menu-card[data-card-section-key="hotels"].inv-card-menu__menu-card--layout-photo-bottom::after,
    .inv-card-menu__menu-card[data-card-section-key="additionalevents"]::after {
        height: 22px;
        bottom: -9px;
        background-size: 22px 16px, 24px 15px;
    }

    .inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-photo-region--inset {
        margin: 12px 9px 10px 0;
        border-width: 4px;
        transform: rotate(1.5deg);
    }

    .inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-photo-region--inset::before {
        top: -11px;
        left: 8px;
        width: 42px;
        height: 13px;
    }

    .inv-card-menu__menu-card[data-card-section-key="additionalevents"] .inv-card-menu__card-content::after {
        top: -6px;
        right: -82px;
        width: 34px;
        height: 12px;
    }
}
/* A2.6Q — artwork card surface fix.
   Artwork is the card silhouette/background, never a normal-flow image. A generic
   materiality rule previously promoted it to position:relative, which made the PNG
   render as a giant image above the card copy. Keep it absolutely behind the content. */

.inv-card-menu__card-wrap--has-artwork {
    position: relative;
    overflow: visible !important;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
}

.inv-card-menu__card-wrap--has-artwork > .inv-card-menu__card-artwork {
    position: absolute !important;
    inset: 0 !important;
    z-index: 0 !important;
    display: block !important;
    width: 100% !important;
    height: 100% !important;
    max-width: none !important;
    max-height: none !important;
    margin: 0 !important;
    object-fit: contain !important;
    object-position: center !important;
    opacity: var(--inv-card-artwork-opacity, 1);
    pointer-events: none;
    filter: drop-shadow(0 15px 20px rgba(42,35,30,.12));
}

.inv-card-menu__card-wrap--has-artwork > .inv-card-menu__menu-card {
    position: relative !important;
    z-index: 2 !important;
    width: 100%;
    height: 100%;
    min-height: 100%;
    background: transparent !important;
    border: 0 !important;
    box-shadow: none !important;
}

/* When artwork is present, the generated paper material layer must not cover it. */
.inv-card-menu__card-wrap--has-artwork::before,
.inv-card-menu__card-wrap--has-artwork::after {
    display: none !important;
}

/* Artwork already contains the physical paper/photo/tape composition. Avoid adding
   generated paper fibers or internal card photos on top of it. */
.inv-card-menu__menu-card--has-artwork::before,
.inv-card-menu__menu-card--has-artwork::after {
    display: none !important;
}

/* Give the copy a safe central overlay region while preserving the artwork edges. */
.inv-card-menu__card-wrap--has-artwork .inv-card-menu__card-content {
    position: relative;
    z-index: 3;
}

/* Do not apply the generic contact ellipse under PNG artwork; the artwork already
   includes its own natural edge/shadow and transparent silhouette. */
.inv-card-menu__card-stage:has(.inv-card-menu__card-wrap--has-artwork)::after {
    opacity: 0 !important;
}
/* A2.6R — artwork sizing by intrinsic ratio.
   Artwork cards should size like real stationery pieces, not like a normal large/feature
   CSS card. Use the image's own ratio to choose a sensible card width per device. */

.inv-card-menu__card-stage--has-artwork-surface {
    min-height: 0 !important;
    aspect-ratio: var(--inv-card-artwork-ratio, 1);
    height: auto !important;
    align-self: start;
    justify-self: center;
}

.inv-card-menu__card-stage--has-artwork-surface > .inv-card-menu__card-wrap {
    width: 100%;
    height: 100%;
    min-height: 0 !important;
}

.inv-card-menu__card-stage--has-artwork-surface > .inv-card-menu__card-wrap > .inv-card-menu__menu-card {
    min-height: 100%;
}

.inv-card-menu__card-stage--artwork-portrait {
    grid-column: 1 / -1 !important;
    width: min(100%, clamp(250px, 28vw, 360px));
}

.inv-card-menu__card-stage--artwork-square {
    grid-column: 1 / -1 !important;
    width: min(100%, clamp(320px, 38vw, 500px));
}

.inv-card-menu__card-stage--artwork-landscape {
    grid-column: 1 / -1 !important;
    width: min(100%, clamp(560px, 82vw, 1100px));
}

.inv-card-menu__card-stage--has-artwork-surface.inv-card-menu__motion-item {
    filter: none;
}

/* The artwork image should fill the card surface chosen above. */
.inv-card-menu__card-stage--has-artwork-surface .inv-card-menu__card-wrap--has-artwork > .inv-card-menu__card-artwork {
    object-fit: contain !important;
    object-position: center !important;
}

/* Keep the text overlay centered in the interior of the artwork composition. */
.inv-card-menu__card-stage--has-artwork-surface .inv-card-menu__card-wrap--has-artwork .inv-card-menu__card-content {
    width: min(68%, 360px);
    margin-inline: auto;
    text-align: center;
    justify-self: center;
}

@media (max-width: 760px) {
    .inv-card-menu__card-stage--artwork-portrait,
    .inv-card-menu__card-stage--artwork-square,
    .inv-card-menu__card-stage--artwork-landscape {
        grid-column: 1 / -1 !important;
        width: min(100%, 390px);
    }

    .inv-card-menu__card-stage--has-artwork-surface .inv-card-menu__card-wrap--has-artwork .inv-card-menu__card-content {
        width: min(76%, 300px);
    }
}
/* A2.6S — artwork scale unlock.
   Portrait/square artwork needs a larger desktop base width so visual scale keeps
   growing in a meaningful way. */

.inv-card-menu__card-stage--artwork-portrait {
    width: min(100%, clamp(420px, 42vw, 560px));
}

.inv-card-menu__card-stage--artwork-square {
    width: min(100%, clamp(360px, 42vw, 540px));
}

@media (max-width: 760px) {
    .inv-card-menu__card-stage--artwork-portrait,
    .inv-card-menu__card-stage--artwork-square,
    .inv-card-menu__card-stage--artwork-landscape {
        width: min(100%, 420px);
    }
}

/* RSVP progressive flow refinement 2026-09-30 --------------------------------
   Keep the RSVP visually open, but reveal companion questions only after the
   principal guest confirms attendance. This is especially important on mobile,
   where repeated RSVP questions can otherwise feel like a long admin form. */
.inv-rsvp-event__companion-note {
    width: min(100%, 560px);
    margin: 4px auto 0;
    text-align: center;
    font-size: clamp(10px, 1vw, 13px);
    line-height: 1.6;
    opacity: .68;
}

.inv-rsvp-event__companion-note[hidden],
.inv-rsvp-event__companions[hidden] {
    display: none !important;
}

.inv-rsvp-event__companions {
    width: min(100%, 680px);
    margin: 18px auto 0;
    padding-top: 22px;
    border-top: 1px solid rgba(127,127,127,.18);
}

.inv-rsvp-event__companions-title {
    margin: 0 0 2px;
    text-align: center;
    font-family: var(--inv-body-font);
    font-size: 10px;
    font-weight: 600;
    line-height: 1.2;
    letter-spacing: .18em;
    text-transform: uppercase;
    opacity: .58;
}

.inv-rsvp-form--editorial .inv-rsvp-event__companions .inv-rsvp-person {
    padding-top: 22px;
    padding-bottom: 22px;
}

.inv-rsvp-form--editorial .inv-rsvp-event__companions .inv-rsvp-person:first-of-type {
    border-top: 0;
}

.inv-rsvp-form--editorial .inv-rsvp-event__heading {
    margin-bottom: clamp(22px, 3vw, 32px);
}

/* The RSVP no longer reuses event artwork/icons. Event identity comes from the
   title/date/place, which keeps the form calmer and easier to scan. */
.inv-rsvp-form--editorial .inv-rsvp-event__heading .inv-events-classic__event-icon {
    display: none !important;
}

@media (max-width: 720px) {
    .inv-rsvp-form--editorial .inv-rsvp-event + .inv-rsvp-event {
        margin-top: 44px;
        padding-top: 48px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-event__heading {
        margin-bottom: 18px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-person {
        padding: 18px 0 20px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-person__top {
        gap: 9px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-person__attendance-question {
        margin-top: 5px;
        font-size: 18px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-person__attendance {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        width: 100%;
        gap: 8px;
        margin-top: 3px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-person__attendance .inv-rsvp-choice {
        width: 100%;
        min-width: 0;
        min-height: 46px;
        padding: 9px 8px;
    }

    .inv-rsvp-event__companion-note {
        max-width: 290px;
        margin-top: 4px;
        padding-inline: 8px;
        font-size: 11px;
        line-height: 1.5;
    }

    .inv-rsvp-event__companions {
        margin-top: 14px;
        padding-top: 18px;
    }

    .inv-rsvp-event__companions-title {
        margin-bottom: 0;
        font-size: 9px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-event__companions .inv-rsvp-person {
        padding-top: 18px;
        padding-bottom: 18px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-person__details {
        gap: 16px;
        margin-top: 20px;
        padding-inline: 4px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-field__label {
        font-size: 11px;
        line-height: 1.35;
    }

    .inv-rsvp-form--editorial .inv-rsvp-inline-choices {
        gap: 7px;
    }

    .inv-rsvp-form--editorial .inv-rsvp-field--choice .inv-rsvp-choice {
        min-height: 38px;
        padding: 7px 12px;
    }
}

/* RSVP · TYPOGRAPHY OVERRIDES FROM STUDIO -------------------------------------
   These classes are added only when a specific RSVP typography control is set,
   so untouched invitations keep the exact responsive sizes they had before. */
.inv-section.inv-rsvp--event-title-size-override .inv-rsvp-form--editorial .inv-rsvp-event__title {
    font-size: var(--inv-rsvp-event-title-size);
}
.inv-section.inv-rsvp--event-meta-size-override .inv-rsvp-form--editorial .inv-rsvp-event__weekday,
.inv-section.inv-rsvp--event-meta-size-override .inv-rsvp-form--editorial .inv-rsvp-event__date,
.inv-section.inv-rsvp--event-meta-size-override .inv-rsvp-form--editorial .inv-rsvp-event__time,
.inv-section.inv-rsvp--event-meta-size-override .inv-rsvp-form--editorial .inv-rsvp-event__place {
    font-size: var(--inv-rsvp-event-meta-size);
}
.inv-section.inv-rsvp--guest-name-size-override .inv-rsvp-form--editorial .inv-rsvp-person__name,
.inv-section.inv-rsvp--guest-name-size-override .inv-rsvp-form--editorial .inv-rsvp-person__name-input {
    font-size: var(--inv-rsvp-guest-name-size);
}
.inv-section.inv-rsvp--field-label-size-override .inv-rsvp-form--editorial .inv-rsvp-field__label {
    font-size: var(--inv-rsvp-field-label-size);
}
.inv-section.inv-rsvp--field-value-size-override .inv-rsvp-form--editorial .inv-rsvp-field__control,
.inv-section.inv-rsvp--field-value-size-override .inv-rsvp-form--editorial .inv-rsvp-waitlist__input {
    font-size: var(--inv-rsvp-field-value-size);
}
.inv-section.inv-rsvp--choice-size-override .inv-rsvp-form--editorial .inv-rsvp-choice {
    font-size: var(--inv-rsvp-choice-size);
}
.inv-section.inv-rsvp--companion-label-size-override .inv-rsvp-event__companions-title {
    font-size: var(--inv-rsvp-companion-label-size);
}
.inv-section.inv-rsvp--action-size-override .inv-rsvp-form--editorial .inv-button,
.inv-section.inv-rsvp--action-size-override .inv-rsvp-calendar__toggle {
    font-size: var(--inv-rsvp-action-size);
}

@media (max-width: 720px) {
    .inv-section.inv-rsvp--mobile-event-title-size-override .inv-rsvp-form--editorial .inv-rsvp-event__title {
        font-size: var(--inv-rsvp-mobile-event-title-size);
    }
    .inv-section.inv-rsvp--mobile-event-meta-size-override .inv-rsvp-form--editorial .inv-rsvp-event__weekday,
    .inv-section.inv-rsvp--mobile-event-meta-size-override .inv-rsvp-form--editorial .inv-rsvp-event__date,
    .inv-section.inv-rsvp--mobile-event-meta-size-override .inv-rsvp-form--editorial .inv-rsvp-event__time,
    .inv-section.inv-rsvp--mobile-event-meta-size-override .inv-rsvp-form--editorial .inv-rsvp-event__place {
        font-size: var(--inv-rsvp-mobile-event-meta-size);
    }
    .inv-section.inv-rsvp--mobile-guest-name-size-override .inv-rsvp-form--editorial .inv-rsvp-person__name,
    .inv-section.inv-rsvp--mobile-guest-name-size-override .inv-rsvp-form--editorial .inv-rsvp-person__name-input {
        font-size: var(--inv-rsvp-mobile-guest-name-size);
    }
    .inv-section.inv-rsvp--mobile-field-label-size-override .inv-rsvp-form--editorial .inv-rsvp-field__label {
        font-size: var(--inv-rsvp-mobile-field-label-size);
    }
    .inv-section.inv-rsvp--mobile-field-value-size-override .inv-rsvp-form--editorial .inv-rsvp-field__control,
    .inv-section.inv-rsvp--mobile-field-value-size-override .inv-rsvp-form--editorial .inv-rsvp-waitlist__input {
        font-size: var(--inv-rsvp-mobile-field-value-size);
    }
    .inv-section.inv-rsvp--mobile-choice-size-override .inv-rsvp-form--editorial .inv-rsvp-choice {
        font-size: var(--inv-rsvp-mobile-choice-size);
    }
    .inv-section.inv-rsvp--mobile-companion-label-size-override .inv-rsvp-event__companions-title {
        font-size: var(--inv-rsvp-mobile-companion-label-size);
    }
    .inv-section.inv-rsvp--mobile-action-size-override .inv-rsvp-form--editorial .inv-button,
    .inv-section.inv-rsvp--mobile-action-size-override .inv-rsvp-calendar__toggle {
        font-size: var(--inv-rsvp-mobile-action-size);
    }
}

/* =============================================================
   HOSPEDAJE · GUÍA EDITORIAL ABIERTA
   -------------------------------------------------------------
   El título/ilustración de sección funciona como único ancla visual.
   No usa cards ni el adorno horizontal compartido. En desktop, el
   primer hotel respira a todo lo ancho y el resto forma una retícula
   editorial de dos columnas. Alojamientos alternativos como Airbnb
   se separan visualmente al final sin convertirse en otra tarjeta.
   ============================================================= */
.inv-hotels--editorial-guide {
    padding: clamp(86px, 9vw, 138px) 0;
}

.inv-hotels--editorial-guide .inv-hotels__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-hotels--editorial-guide .inv-hotels__decoration {
    display: none !important;
}

.inv-hotel-guide {
    width: min(100%, 1080px);
    margin: clamp(44px, 5vw, 72px) auto 0;
    color: inherit;
}

.inv-hotel-guide__item {
    min-width: 0;
    text-align: center;
}

.inv-hotel-guide__item--featured {
    position: relative;
    width: min(100%, 820px);
    margin: 0 auto clamp(64px, 7vw, 92px);
    padding: 0 clamp(12px, 2vw, 28px) clamp(40px, 4vw, 56px);
}

.inv-hotel-guide__item--featured::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: 0;
    width: 132px;
    height: 1px;
    background: currentColor;
    opacity: .22;
    transform: translateX(-50%);
}

.inv-hotel-guide__item--featured::before {
    content: "◇";
    position: absolute;
    left: 50%;
    bottom: -8px;
    z-index: 1;
    padding: 0 10px;
    font-family: Georgia, serif;
    font-size: 13px;
    line-height: 16px;
    background: var(--inv-section-background-color, transparent);
    color: currentColor;
    transform: translateX(-50%);
}

.inv-hotel-guide__grid {
    --inv-hotel-guide-column-gap: clamp(54px, 7vw, 92px);
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: var(--inv-hotel-guide-column-gap);
    row-gap: clamp(50px, 6vw, 76px);
    align-items: start;
}

.inv-hotel-guide__grid .inv-hotel-guide__item {
    padding: 0 clamp(8px, 1.5vw, 18px);
}

/* Si la última fila tiene un único hotel visible, centrarlo manteniendo
   exactamente el ancho de una columna normal. El runtime recalcula esta
   clase cuando el acceso de hospedaje cambia según el invitado. */
.inv-hotel-guide__grid .inv-hotel-guide__item--solo-last {
    grid-column: 1 / -1;
    width: calc((100% - var(--inv-hotel-guide-column-gap)) / 2);
    justify-self: center;
}

/* INV_HOTEL_TITLE_UNIFORM_SIZE_20261013
   All lodging names (featured, regular, and alternative) share the same
   typography. Builder overrides below continue to work for every item. */
.inv-hotel-guide__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(22px, 2vw, 30px);
    font-weight: 400;
    line-height: 1.2;
    letter-spacing: .01em;
}

.inv-hotel-guide__address {
    max-width: 720px;
    margin: 12px auto 0;
    line-height: 1.58;
    opacity: .78;
}

.inv-hotel-guide__details {
    max-width: 720px;
    margin: 14px auto 0;
    line-height: 1.55;
    opacity: .84;
}

.inv-hotel-guide__details .inv-hotel-card__detail {
    margin: 3px 0 0;
}

.inv-hotel-guide__deadline,
.inv-hotel-guide__notes {
    max-width: 720px;
    margin: 11px auto 0;
    line-height: 1.58;
}

.inv-hotel-guide__notes {
    white-space: pre-line;
    opacity: .76;
}

.inv-hotel-guide__actions {
    margin-top: 15px;
    gap: 10px;
}

.inv-hotel-guide__actions .inv-editorial-list__action {
    opacity: .72;
}

.inv-hotel-guide__alternatives {
    position: relative;
    width: min(100%, 760px);
    margin: clamp(72px, 8vw, 104px) auto 0;
    padding-top: clamp(38px, 4vw, 52px);
}

.inv-hotel-guide__alternatives::before {
    content: "";
    position: absolute;
    top: 0;
    left: 50%;
    width: 132px;
    height: 1px;
    background: currentColor;
    opacity: .22;
    transform: translateX(-50%);
}

.inv-hotel-guide__alternatives::after {
    content: "◇";
    position: absolute;
    top: -8px;
    left: 50%;
    padding: 0 10px;
    font-family: Georgia, serif;
    font-size: 13px;
    line-height: 16px;
    background: var(--inv-section-background-color, transparent);
    color: currentColor;
    transform: translateX(-50%);
}

.inv-hotel-guide__item--alternative + .inv-hotel-guide__item--alternative {
    margin-top: 38px;
}

/* Los items de la guía conservan la misma metadata de audiencia que los
   layouts anteriores, por lo que la lógica de hospedaje preferencial sigue
   pudiendo ocultarlos/mostrarlos sin alterar la retícula. */
.inv-hotel-guide__item[hidden] {
    display: none !important;
}

@media (max-width: 720px) {
    .inv-hotels--editorial-guide {
        padding: 72px 0;
    }

    .inv-hotel-guide {
        width: 100%;
        margin-top: 36px;
    }

    /* Hospedaje · mobile
       Keep the separator-free layout, but preserve the generous breathing room
       that existed around the old dividers. */
    .inv-hotel-guide__item--featured {
        width: 100%;
        margin-bottom: 36px;
        padding: 0 2px 44px;
    }

    .inv-hotel-guide__grid {
        display: flex;
        flex-direction: column;
        gap: 36px;
    }

    .inv-hotel-guide__grid .inv-hotel-guide__item {
        position: relative;
        width: 100%;
        padding: 0 4px 44px;
    }

    .inv-hotel-guide__grid .inv-hotel-guide__item--solo-last {
        grid-column: auto;
        width: 100%;
    }

    /* There is no divider anymore, so avoid adding trailing empty space after
       the last regular hotel when there are no alternatives below it. */
    .inv-hotel-guide__grid .inv-hotel-guide__item:last-child {
        padding-bottom: 0;
    }

    .inv-hotel-guide:has(.inv-hotel-guide__alternatives)
        .inv-hotel-guide__grid .inv-hotel-guide__item:last-child {
        padding-bottom: 44px;
    }

    /* Remove every hotel separator only on mobile, including the featured
       hotel, regular grid rows and the alternatives/Airbnb block. */
    .inv-hotel-guide__item--featured::before,
    .inv-hotel-guide__item--featured::after,
    .inv-hotel-guide__grid .inv-hotel-guide__item::before,
    .inv-hotel-guide__grid .inv-hotel-guide__item::after,
    .inv-hotel-guide__alternatives::before,
    .inv-hotel-guide__alternatives::after,
    .inv-hotel-guide__item--alternative::before,
    .inv-hotel-guide__item--alternative::after {
        content: none !important;
        display: none !important;
    }

    .inv-hotel-guide__item--alternative {
        position: relative;
        padding-bottom: 44px;
    }

    .inv-hotel-guide__item--alternative:last-child {
        padding-bottom: 0;
    }

    /* The two actions under each hotel remain visibly links on touch devices. */
    .inv-hotels--editorial-guide .inv-hotel-guide__actions .inv-editorial-list__action {
        text-decoration: underline;
        text-decoration-thickness: 1px;
        text-underline-offset: .22em;
        opacity: .82;
    }

    .inv-hotel-guide__title {
        font-size: clamp(22px, 6.5vw, 28px);
    }

    .inv-hotel-guide__address,
    .inv-hotel-guide__details,
    .inv-hotel-guide__deadline,
    .inv-hotel-guide__notes {
        max-width: 94%;
    }

    .inv-hotel-guide__alternatives {
        width: 100%;
        margin-top: 0;
        padding-top: 36px;
    }

    .inv-hotel-guide__item--alternative + .inv-hotel-guide__item--alternative {
        margin-top: 36px;
    }

    /* Same mobile rule for the older Editorial List hotel variant: no rules,
       but keep a comfortable gap between one hotel and the next. */
    .inv-editorial-list--hotels .inv-editorial-list__row {
        padding-top: 40px;
        padding-bottom: 40px;
    }

    .inv-editorial-list--hotels .inv-editorial-list__row:first-child {
        padding-top: 22px;
    }

    .inv-editorial-list--hotels .inv-editorial-list__row:last-child {
        padding-bottom: 22px;
    }

    .inv-editorial-list--hotels .inv-editorial-list__row::before,
    .inv-editorial-list--hotels .inv-editorial-list__row::after {
        content: none !important;
        display: none !important;
    }
}


/* Restaurants · editorial guide
   Mirrors the open Hospedaje composition: no repeated rules, no category cards,
   no small category icons, and a wider two-column layout on desktop. */
.inv-restaurants--editorial-guide {
    padding: clamp(88px, 10vw, 146px) 0;
}

.inv-restaurants--editorial-guide .inv-restaurants__inner {
    display: flex;
    flex-direction: column;
    align-items: center;
}

.inv-restaurants--editorial-guide .inv-restaurants__decoration {
    display: none !important;
}

.inv-restaurant-guide {
    width: min(100%, 1040px);
    margin-top: clamp(44px, 5vw, 68px);
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: clamp(54px, 7vw, 104px);
    row-gap: clamp(48px, 6vw, 76px);
    color: inherit;
}

.inv-restaurant-guide__group {
    min-width: 0;
    padding: 0 clamp(8px, 1.5vw, 18px);
    text-align: center;
}

.inv-restaurant-guide__group--wide {
    grid-column: 1 / -1;
    width: min(100%, 560px);
    justify-self: center;
}

.inv-restaurant-guide__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(22px, 2vw, 30px);
    font-weight: 400;
    line-height: 1.2;
}

.inv-restaurant-guide__title--italic {
    font-style: italic;
}

.inv-restaurant-guide__title::after {
    content: "";
    display: block;
    width: 34px;
    height: 1px;
    margin: 14px auto 0;
    background: currentColor;
    opacity: .28;
}

.inv-restaurant-guide__items {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 9px;
    margin-top: 16px;
    font-size: clamp(17px, 1.3vw, 21px);
    line-height: 1.42;
}

.inv-restaurant-guide__item {
    display: flex;
    justify-content: center;
    align-items: center;
    min-width: 0;
}

.inv-restaurant-guide__restaurant {
    display: flex;
    flex-direction: column;
    align-items: center;
    min-width: 0;
    text-align: center;
}

.inv-restaurant-guide__name {
    color: inherit;
    text-decoration: none;
    transition: opacity .18s ease;
}

.inv-restaurant-guide__name:hover,
.inv-restaurant-guide__name:focus-visible {
    opacity: .72;
}

.inv-restaurant-guide__location-link {
    display: inline-block;
    margin-top: 4px;
    color: var(--section-btn-primary-bg, var(--inv-text-inverse, #f7f0e8));
    font-family: var(--inv-body-font);
    font-size: clamp(9px, .72vw, 11px);
    font-weight: 600;
    line-height: 1.25;
    letter-spacing: .24em;
    text-transform: uppercase;
    text-decoration: none;
    transition: opacity .18s ease;
}

.inv-restaurant-guide__location-link:hover,
.inv-restaurant-guide__location-link:focus-visible {
    opacity: .68;
}

.inv-restaurant-guide .inv-editorial-list__item-with-map {
    white-space: normal;
}

/* If a paper/card treatment is intentionally selected in Studio, wrap the complete
   restaurant guide once rather than turning each category back into a card. */
.inv-restaurant-guide.inv-layout-surface-card {
    padding: clamp(30px, 4vw, 54px);
}

.inv-section.inv-section--body-size-override .inv-restaurant-guide__items {
    font-size: calc(var(--inv-section-body-size) * 1.12);
}

@media (max-width: 720px) {
    .inv-restaurants--editorial-guide {
        padding: 72px 0;
    }

    .inv-restaurant-guide {
        width: 100%;
        margin-top: 36px;
        grid-template-columns: 1fr;
        row-gap: 44px;
    }

    .inv-restaurant-guide__group,
    .inv-restaurant-guide__group--wide {
        grid-column: auto;
        width: 100%;
        padding: 0 4px;
    }

    .inv-restaurant-guide__title {
        font-size: clamp(21px, 6.2vw, 28px);
    }

    .inv-restaurant-guide__items {
        gap: 9px;
        margin-top: 15px;
        font-size: clamp(17px, 4.8vw, 20px);
        line-height: 1.42;
    }

    .inv-restaurant-guide.inv-layout-surface-card {
        padding: 24px 18px;
    }

    .inv-section.inv-section--mobile-body-size-override .inv-restaurant-guide__items,
    .inv-section.inv-section--mobile-body-size-auto .inv-restaurant-guide__items {
        font-size: calc(var(--inv-section-mobile-body-size) * 1.12);
    }
}

/* 2026-09-30 — Maquillaje y Peinado: layout Directorio editorial */
.inv-makeup--directory .inv-makeup__inner {
    width: min(100% - 40px, 1120px);
    margin-inline: auto;
}

.inv-makeup-directory {
    --inv-makeup-columns: 3;
    width: 100%;
    display: grid;
    grid-template-columns: repeat(var(--inv-makeup-columns), minmax(0, 1fr));
    margin-top: clamp(48px, 6vw, 78px);
}

.inv-makeup-directory__item {
    position: relative;
    min-width: 0;
    padding: 4px clamp(28px, 3.4vw, 52px) 12px;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-start;
}

.inv-makeup-directory__item:not(.inv-makeup-directory__item--row-start) {
    border-left: 1px solid color-mix(in srgb, currentColor 24%, transparent);
}

.inv-makeup-directory__title {
    margin: 0;
    max-width: 280px;
    font-family: var(--inv-heading-font);
    font-size: clamp(24px, 2.15vw, 34px);
    font-weight: 400;
    line-height: 1.16;
}

.inv-makeup-directory__phone {
    margin: 18px 0 0;
    font-size: .96em;
    letter-spacing: .015em;
    opacity: .74;
}

.inv-makeup-directory__actions {
    margin-top: 24px;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 10px 20px;
}

.inv-makeup-directory__actions .inv-button {
    min-height: 0;
    padding: 3px 0 5px;
    border: 0;
    border-bottom: 1px solid color-mix(in srgb, currentColor 58%, transparent);
    border-radius: 0;
    background: transparent;
    box-shadow: none;
    color: inherit;
    font-size: 11px;
    line-height: 1.2;
    letter-spacing: .12em;
}

.inv-makeup-directory__actions .inv-button:hover,
.inv-makeup-directory__actions .inv-button:focus-visible {
    background: transparent;
    color: inherit;
    border-bottom-color: currentColor;
    transform: none;
}

@media (max-width: 820px) {
    .inv-makeup--directory .inv-makeup__inner {
        width: min(100% - 32px, 620px);
    }

    .inv-makeup-directory {
        grid-template-columns: 1fr;
        margin-top: 38px;
    }

    .inv-makeup-directory__item,
    .inv-makeup-directory__item:not(.inv-makeup-directory__item--row-start) {
        border-left: 0;
    }

    .inv-makeup-directory__item {
        padding: 30px 8px 32px;
    }

    .inv-makeup-directory__item:first-child {
        padding-top: 4px;
    }

    .inv-makeup-directory__item + .inv-makeup-directory__item {
        border-top: 1px solid color-mix(in srgb, currentColor 22%, transparent);
    }

    .inv-makeup-directory__title {
        font-size: clamp(25px, 7vw, 32px);
    }

    .inv-makeup-directory__actions {
        margin-top: 20px;
        gap: 10px 18px;
    }

    .inv-makeup-directory__actions .inv-button {
        min-height: 44px;
        display: inline-flex;
        align-items: center;
    }
}

/* Maquillaje y Peinado: los enlaces de acción usan Apariencia > Botones.
   La regla compartida de tamaño del texto de sección incluye .inv-button y
   de otro modo sobreescribe la tipografía global, especialmente en móvil. */
html .inv-section.inv-makeup .inv-button {
    font-size: var(--inv-button-font-size, 11px);
}

@media (max-width: 720px) {
    html .inv-section.inv-makeup .inv-button {
        font-size: var(--inv-button-mobile-font-size, var(--inv-button-font-size, 11px));
    }
}

/* 2026-09-30 — Libro de felicitaciones: layout "Libro editorial".
   Keeps the existing guestbook behavior, but turns the form into an open-book
   composition on desktop and a single editorial sheet on mobile. */
.inv-guestbook--book .inv-guestbook__card--book {
    width: min(100%, 1060px);
    margin-top: clamp(38px, 5vw, 64px);
    padding: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
    text-align: left;
    overflow: visible;
}

.inv-guestbook--book .inv-guestbook__spread {
    position: relative;
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    align-items: stretch;
    width: 100%;
    isolation: isolate;
}

.inv-guestbook--book .inv-guestbook__page {
    position: relative;
    min-width: 0;
    min-height: clamp(390px, 38vw, 500px);
    padding: clamp(46px, 5vw, 72px) clamp(38px, 4.8vw, 66px);
    color: var(--inv-text);
    background:
        linear-gradient(rgba(255, 253, 248, .97), rgba(250, 246, 238, .97));
    border: 1px solid rgba(84, 70, 54, .10);
    box-shadow: 0 24px 46px rgba(25, 20, 16, .12);
}

.inv-guestbook--book .inv-guestbook__page--intro {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    border-right: 0;
    border-radius: 10px 0 0 10px;
}

.inv-guestbook--book .inv-guestbook__page--message {
    display: flex;
    flex-direction: column;
    justify-content: center;
    border-left: 0;
    border-radius: 0 10px 10px 0;
}

.inv-guestbook--book .inv-guestbook__spread::after {
    content: "";
    position: absolute;
    z-index: 3;
    top: 5%;
    bottom: 5%;
    left: 50%;
    width: 1px;
    pointer-events: none;
    background: rgba(92, 75, 58, .16);
    box-shadow:
        -8px 0 18px rgba(72, 55, 39, .08),
         8px 0 18px rgba(72, 55, 39, .08);
}

.inv-guestbook--book .inv-guestbook__intro {
    max-width: 390px;
    margin: 0 auto;
    font-family: var(--inv-heading-font);
    font-size: clamp(22px, 2vw, 30px);
    line-height: 1.48;
    font-weight: 400;
}

.inv-guestbook--book .inv-guestbook__note {
    max-width: 370px;
    margin: 22px auto 0;
    font-size: 13px;
    line-height: 1.75;
    opacity: .64;
}

.inv-guestbook--book .inv-guestbook__textarea {
    min-height: 230px;
    margin-top: 0;
    /* El texto inicia por encima del primer renglón, dibujado a 32px. */
    padding: 4px 24px 24px;
    border: 0;
    border-radius: 0;
    /* The editorial book pages are light, regardless of the section theme. */
    color: #302c28;
    caret-color: #302c28;
    background:
        repeating-linear-gradient(
            to bottom,
            transparent 0,
            transparent 31px,
            rgba(91, 76, 58, .14) 32px,
            transparent 33px
        );
    box-shadow: none;
    font-size: 15px;
    line-height: 2.12;
}

.inv-guestbook--book .inv-guestbook__textarea::placeholder {
    color: currentColor;
    opacity: .40;
    font-style: italic;
}

.inv-guestbook--book .inv-guestbook__textarea:hover,
.inv-guestbook--book .inv-guestbook__textarea:focus {
    border: 0;
    outline: none;
    background:
        linear-gradient(rgba(255,255,255,.16), rgba(255,255,255,.16)),
        repeating-linear-gradient(
            to bottom,
            transparent 0,
            transparent 31px,
            rgba(91, 76, 58, .16) 32px,
            transparent 33px
        );
    box-shadow: none;
}

.inv-guestbook--book .inv-guestbook__status {
    margin-top: 10px;
    text-align: center;
}

.inv-guestbook--book .inv-guestbook__actions {
    margin-top: 22px;
}

.inv-guestbook--book .inv-guestbook__button {
    min-width: 0;
    padding-inline: 22px;
}

/* If a paper artwork is configured, let it become the open spread instead of
   drawing another rectangular card over it. */
.inv-guestbook--book .inv-guestbook__card--book.inv-local-paper-card.inv-has-paper-surface {
    position: relative;
    overflow: hidden;
    border-radius: 10px;
    box-shadow: 0 24px 50px rgba(25, 20, 16, .12) !important;
}

.inv-guestbook--book .inv-guestbook__card--book.inv-local-paper-card.inv-has-paper-surface::before {
    inset: 0;
    opacity: 1;
    background-size: cover;
    background-position: center;
}

.inv-guestbook--book .inv-guestbook__card--book.inv-local-paper-card.inv-has-paper-surface .inv-guestbook__page {
    background: rgba(255, 252, 246, .10);
    border-color: rgba(88, 73, 56, .08);
    box-shadow: none;
}

/* On dark/ocean sections the book pages remain a light paper surface, so the
   guest message is always legible and the object reads as a real guestbook. */
.inv-treatment-dark .inv-guestbook--book .inv-guestbook__page,
.inv-treatment-ocean .inv-guestbook--book .inv-guestbook__page,
.inv-treatment-dark-light-card .inv-guestbook--book .inv-guestbook__page {
    color: var(--inv-text);
}

@media (max-width: 720px) {
    .inv-guestbook--book .inv-guestbook__card--book {
        width: min(100%, 560px);
        margin-top: 34px;
    }

    .inv-guestbook--book .inv-guestbook__spread {
        display: block;
        overflow: hidden;
        border-radius: 8px;
        color: var(--inv-text);
        background: linear-gradient(rgba(255, 253, 248, .98), rgba(250, 246, 238, .98));
        border: 1px solid rgba(84, 70, 54, .10);
        box-shadow: 0 18px 38px rgba(25, 20, 16, .11);
    }

    .inv-guestbook--book .inv-guestbook__spread::after { display: none; }

    .inv-guestbook--book .inv-guestbook__page {
        min-height: 0;
        padding: 30px 22px;
        border: 0;
        border-radius: 0;
        background: transparent;
        box-shadow: none;
    }

    .inv-guestbook--book .inv-guestbook__page--intro {
        padding-bottom: 24px;
    }

    .inv-guestbook--book .inv-guestbook__page--message {
        padding-top: 24px;
        border-top: 1px solid rgba(84, 70, 54, .12);
    }

    .inv-guestbook--book .inv-guestbook__intro {
        max-width: 100%;
        font-size: clamp(20px, 6.2vw, 26px);
    }

    .inv-guestbook--book .inv-guestbook__note {
        max-width: 100%;
        margin-top: 16px;
        font-size: 12px;
    }

    .inv-guestbook--book .inv-guestbook__textarea {
        min-height: 190px;
        padding: 4px 12px 18px;
    }

    .inv-guestbook--book .inv-guestbook__actions {
        flex-direction: column;
        gap: 10px;
    }

    .inv-guestbook--book .inv-guestbook__button {
        width: 100%;
    }

    .inv-guestbook--book .inv-guestbook__card--book.inv-local-paper-card.inv-has-paper-surface {
        box-shadow: 0 18px 38px rgba(25, 20, 16, .11) !important;
    }
}

/* La textura de papel usa un padding mobile más específico. Mantener el texto
   también encima del primer renglón en esa variante. */
.inv-guestbook--book .inv-guestbook__card.inv-local-paper-card.inv-has-paper-surface .inv-guestbook__textarea {
    padding-top: 4px;
}

/* 2026-09-30 — Libro editorial: botones sobre superficie clara.
   El bloque vive dentro de una sección que puede ser oscura, pero las páginas
   del libro son claras. Forzamos aquí la paleta de botones para superficie clara
   para que Publicar mensaje / Ver felicitaciones tengan contraste real. */
.inv-guestbook--book .inv-guestbook__page--message {
    --section-btn-primary-bg: var(--inv-button-light-bg);
    --section-btn-primary-text: var(--inv-button-light-text);
    --section-btn-primary-border: var(--inv-button-light-border);
    --section-btn-primary-hover-bg: var(--inv-button-light-hover-bg);
    --section-btn-primary-hover-text: var(--inv-button-light-hover-text);
    --section-btn-primary-hover-border: var(--inv-button-light-hover-border);
    --section-btn-secondary-bg: transparent;
    --section-btn-secondary-text: var(--inv-button-light-border);
    --section-btn-secondary-border: var(--inv-button-light-border);
    --section-btn-secondary-hover-bg: var(--inv-button-light-secondary-hover-bg);
    --section-btn-secondary-hover-text: var(--inv-button-light-secondary-hover-text);
    --section-btn-secondary-hover-border: var(--inv-button-light-secondary-hover-border);
    --section-btn-border-width: var(--inv-button-light-border-width);
    --section-btn-hover-opacity: var(--inv-button-light-hover-opacity);
}

.inv-guestbook--book .inv-guestbook__button {
    opacity: 1;
    visibility: visible;
}

.inv-guestbook--book .inv-guestbook__button:not(.inv-button--secondary) {
    box-shadow: 0 5px 14px rgba(35, 29, 24, .08);
}

.inv-guestbook--book .inv-guestbook__button.inv-button--secondary {
    background: transparent;
}


/* 2026-10-02 — Libro editorial: cubierta simple de libro, sin efecto de hojas.
   Solo deja asomar una cubierta en el color del botón alrededor de las páginas. */
.inv-guestbook--book .inv-guestbook__card--book {
    --inv-guestbook-book-cover-color: var(--inv-button-light-bg);
}

.inv-guestbook--book .inv-guestbook__spread {
    position: relative;
    overflow: visible;
}

.inv-guestbook--book .inv-guestbook__spread::before {
    content: "";
    position: absolute;
    z-index: -1;
    top: 8px;
    left: -8px;
    right: -8px;
    bottom: -8px;
    border-radius: 12px;
    background: var(--inv-guestbook-book-cover-color);
    box-shadow: 0 16px 30px rgba(25, 20, 16, .12);
    pointer-events: none;
}

@media (max-width: 720px) {
    .inv-guestbook--book .inv-guestbook__spread::before {
        display: none;
    }
}

/* 2026-10-01 — Global visual rule for card-based section layouts.
   Content cards may keep their background, paper artwork, radius and shadow,
   but they should not draw a 1px outline/frame. This intentionally targets
   invitation content cards only; form controls, buttons, modals and Card Menu
   stationery frames keep their own interaction/visual borders. */
.inv-layout-surface-card,
.inv-events__card,
.inv-hotel-card,
.inv-gift-card,
.inv-restaurant-card,
.inv-activity-card,
.inv-makeup-card,
.inv-transport-card,
.inv-guestbook__card,
.inv-gallery-stack__card {
    border: 0 !important;
}

/* The classic itinerary card treatment used horizontal edge rules as its
   visible frame. Remove those too so it follows the same borderless rule. */
.inv-treatment-light .inv-events__card,
.inv-treatment-dark .inv-events__card,
.inv-treatment-ocean .inv-events__card {
    border-top: 0 !important;
    border-bottom: 0 !important;
}

/* 2026-10-02 — Actividades en el destino: layout con foto por actividad. */
.inv-activities--photo-cards .inv-activities__grid--photos {
    width: min(100%, 1240px);
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: clamp(18px, 2.2vw, 30px);
    align-items: start;
}

.inv-activity-photo-card {
    min-width: 0;
    text-align: center;
}

.inv-activity-photo-card__media {
    position: relative;
    width: 100%;
    aspect-ratio: 4 / 3;
    overflow: hidden;
    border-radius: clamp(8px, .9vw, 14px);
    background: rgba(127, 117, 101, .08);
    box-shadow: 0 12px 28px rgba(26, 22, 18, .09);
}

.inv-activity-photo-card__image {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.inv-activity-photo-card__content {
    padding: clamp(18px, 2.2vw, 26px) clamp(4px, .6vw, 10px) 0;
}

.inv-activity-photo-card__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-size: clamp(19px, 1.7vw, 25px);
    line-height: 1.18;
    font-weight: 400;
}

.inv-activity-photo-card__description,
.inv-activity-photo-card__extra {
    margin: 10px auto 0;
    max-width: 30ch;
    line-height: 1.55;
}

.inv-activity-photo-card__extra {
    opacity: .72;
    font-size: .92em;
}

.inv-activity-photo-card__actions {
    justify-content: center;
    margin-top: 18px;
}

.inv-activity-photo-card--no-photo {
    padding-top: 8px;
}

@media (max-width: 1050px) {
    .inv-activities--photo-cards .inv-activities__grid--photos {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        width: min(100%, 820px);
    }
}

@media (max-width: 620px) {
    .inv-activities--photo-cards .inv-activities__grid--photos {
        grid-template-columns: 1fr;
        width: min(100%, 430px);
        gap: 34px;
    }

    .inv-activity-photo-card__media {
        aspect-ratio: 16 / 11;
    }
}

/* 2026-10-02 — Regression guard: Actividades con fotos.
   Mantiene las tarjetas a la misma altura y reserva el mismo bloque para
   acciones, de modo que la primera fila de botones quede alineada aunque
   los títulos ocupen 1–3 líneas o una actividad tenga solo un botón. */
.inv-activities--photo-cards .inv-activities__grid--photos {
    align-items: stretch;
}

.inv-activities--photo-cards .inv-activity-photo-card {
    display: flex;
    flex-direction: column;
    height: 100%;
}

.inv-activities--photo-cards .inv-activity-photo-card__content {
    display: flex;
    flex: 1 1 auto;
    flex-direction: column;
}

.inv-activities--photo-cards .inv-activity-photo-card__title {
    display: flex;
    min-height: 3.54em;
    align-items: flex-start;
    justify-content: center;
}

.inv-activities--photo-cards .inv-activity-photo-card__actions {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: flex-start;
    gap: 10px;
    min-height: 92px;
    margin-top: auto;
    padding-top: 18px;
}

.inv-activities--photo-cards .inv-activity-photo-card__actions .inv-button {
    margin-top: 0;
}

/* 2026-10-02 — Regression guard: Restaurantes · enlace editorial de ubicación.
   En superficie oscura el enlace debe usar el texto claro de la invitación;
   en superficie clara/papel conserva el color de acción de la paleta clara. */
.inv-restaurant-guide__location-link {
    font-size: clamp(10px, .82vw, 12px);
    font-weight: 600;
    opacity: .92;
}

.inv-treatment-dark .inv-restaurant-guide__location-link,
.inv-treatment-ocean .inv-restaurant-guide__location-link {
    color: var(--inv-text-inverse, #f7f0e8) !important;
}

.inv-treatment-light .inv-restaurant-guide__location-link,
.inv-restaurant-guide.inv-layout-surface-card--light .inv-restaurant-guide__location-link,
.inv-restaurant-guide.inv-layout-surface-card--paper .inv-restaurant-guide__location-link {
    color: var(--inv-button-light-bg, #3d1419) !important;
}

@media (max-width: 620px) {
    .inv-activities--photo-cards .inv-activity-photo-card__title {
        min-height: 0;
    }

    .inv-activities--photo-cards .inv-activity-photo-card__actions {
        min-height: 0;
        margin-top: 18px;
        padding-top: 0;
    }
}

/* F1-A — Editorial stationery suite. Strictly opt-in, legacy Card Menu is unchanged.
   CSS custom properties are populated from persisted per-device piece coordinates.
   F1-B can update the data, without rebuilding the runtime's DOM structure. */
.inv-card-menu--editorial-suite {
    padding-top: clamp(22px, 3vw, 54px);
    padding-left: clamp(8px, 2.8vw, 42px);
    padding-right: clamp(8px, 2.8vw, 42px);
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-stage {
    display: block;
    width: min(100%, var(--inv-editorial-desktop-width, 1160px));
    aspect-ratio: var(--inv-editorial-desktop-ratio, 1160 / 940);
    height: auto;
    position: relative;
    margin: 0 auto;
    isolation: isolate;
    perspective: none;
    overflow: visible;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece {
    position: absolute;
    display: var(--inv-editorial-desktop-display, block);
    left: var(--inv-editorial-desktop-x, 50%);
    top: var(--inv-editorial-desktop-y, 50%);
    width: var(--inv-editorial-desktop-width, 40%);
    height: var(--inv-editorial-desktop-height, 20%);
    z-index: var(--inv-editorial-desktop-layer, 2);
    transform: translate(-50%, -50%) rotate(var(--inv-editorial-desktop-rotation, 0deg));
    transform-origin: center;
    box-sizing: border-box;
    min-width: 0;
    min-height: 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece:has(button:hover),
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece:focus-within {
    z-index: 45;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece[data-piece-kind="envelope"],
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece[data-piece-kind="image"] {
    pointer-events: none;
}
.inv-card-menu__editorial-envelope {
    position: relative;
    width: 100%; height: 100%;
    overflow: hidden;
    border-radius: 3% 3% 5% 5%;
    border: 1px solid #81907d;
    background: linear-gradient(140deg, #9eae97 0%, #81967e 72%, #7d917a 100%);
    box-shadow: 0 22px 36px rgba(47, 52, 40, .22), inset 0 1px 1px #c1cbbb;
}
.inv-card-menu__editorial-envelope::before {
    content: '';
    position: absolute;
    inset: 0 0 41%;
    background: linear-gradient(152deg, #f6f0e5, #e9e0cf);
    clip-path: polygon(0 0, 50% 77%, 100% 0);
    filter: drop-shadow(0 5px 3px rgba(32, 41, 31, .13));
}
.inv-card-menu__editorial-envelope::after {
    content: '';
    position: absolute;
    inset: 39% 0 0;
    background: linear-gradient(135deg, rgba(179, 194, 170, .95), rgba(117, 143, 115, .95));
    clip-path: polygon(0 0, 50% 53%, 100% 0, 100% 100%, 0 100%);
    box-shadow: inset 0 2px 2px rgba(42, 64, 39, .12);
}
.inv-card-menu__editorial-envelope-liner {
    position: absolute;
    inset: 2% 2% 41%;
    background: repeating-linear-gradient(125deg, transparent 0 25px, rgba(156, 140, 107, .07) 25px 26px, transparent 26px 48px), #f5eee1;
    clip-path: polygon(0 0, 50% 78%, 100% 0);
}
/* Opt-in palette; existing editorial invitations retain their exact legacy colors. */
.inv-card-menu--custom-envelope .inv-card-menu__editorial-envelope {
    border-color: color-mix(in srgb, var(--inv-editorial-envelope-color, #81967e), black 8%);
    background: linear-gradient(140deg, color-mix(in srgb, var(--inv-editorial-envelope-color, #81967e), white 18%) 0%, var(--inv-editorial-envelope-color, #81967e) 72%, color-mix(in srgb, var(--inv-editorial-envelope-color, #81967e), black 4%) 100%);
}
.inv-card-menu--custom-envelope .inv-card-menu__editorial-envelope::before {
    background: linear-gradient(152deg, color-mix(in srgb, var(--inv-editorial-envelope-liner, #f5eee1), white 8%), color-mix(in srgb, var(--inv-editorial-envelope-liner, #f5eee1), black 5%));
}
.inv-card-menu--custom-envelope .inv-card-menu__editorial-envelope::after {
    background: linear-gradient(135deg, color-mix(in srgb, var(--inv-editorial-envelope-color, #81967e), white 14%), color-mix(in srgb, var(--inv-editorial-envelope-color, #81967e), black 7%));
}
.inv-card-menu--custom-envelope .inv-card-menu__editorial-envelope-liner {
    background: repeating-linear-gradient(125deg, transparent 0 25px, rgba(156, 140, 107, .07) 25px 26px, transparent 26px 48px), var(--inv-editorial-envelope-liner, #f5eee1);
}
.inv-card-menu__editorial-image { width: 100%; height: 100%; object-fit: contain; filter: drop-shadow(0 11px 12px rgba(50,45,34,.18)); }

/* In stage each card fills its allotted paper piece, rather than claiming grid columns. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__main-card,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__photo-card,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__card-stage {
    position: relative;
    inset: auto;
    display: flex;
    flex-direction: column;
    justify-content: center;
    width: 100%;
    height: 100%;
    min-width: 0;
    min-height: 0;
    max-width: none;
    grid-column: auto;
    grid-row: auto;
    aspect-ratio: auto;
    margin: 0;
    transform: none !important;
    scale: 1 !important;
    translate: none !important;
    rotate: none !important;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__main-card {
    padding: clamp(12px, 2.8vw, 40px);
    overflow: hidden;
    background-color: #fbf8f0;
    border: 9px double rgba(175, 159, 130, .14);
    box-shadow: 0 10px 25px rgba(33,36,28,.17);
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece .inv-card-menu__card-wrap {
    width: 100%; height: 100%; min-height: 0;
    display: flex; flex-direction: column;
    transform: none !important;
    padding: clamp(3px, .7vw, 10px);
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece .inv-card-menu__menu-card {
    width: 100%; height: 100%; min-height: 0;
    padding: clamp(8px, 1.7vw, 25px);
    display: flex; flex-direction: column; align-items: center; justify-content: center;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece .inv-card-menu__card-content {
    max-width: 100%;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras {
    display: grid;
    width: min(var(--inv-card-menu-max-width, 1180px), 100%);
    margin: clamp(28px, 5vw, 62px) auto 0;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--inv-card-menu-gap, 24px);
    align-items: stretch;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras > .inv-card-menu__main-card,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras > .inv-card-menu__photo-card,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras > .inv-card-menu__editorial-flow-photo {
    width: 100%;
    min-height: 220px;
    grid-column: 1 / -1;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-photo > .inv-card-menu__photo-card {
    width: min(100%, 640px); margin: 0 auto; min-height: 220px;
}
.inv-card-menu--editorial-suite .inv-card-menu__header-stack {
    margin: clamp(28px, 5vw, 64px) auto 0;
}
@media (max-width: 720px) {
    .inv-card-menu--editorial-suite {
        padding: 16px 5px 40px;
        overflow-x: clip;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-stage {
        width: min(100%, 390px);
        aspect-ratio: var(--inv-editorial-mobile-ratio, 390 / 1080);
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece {
        display: var(--inv-editorial-mobile-display, block);
        left: var(--inv-editorial-mobile-x, 50%);
        top: var(--inv-editorial-mobile-y, 50%);
        width: var(--inv-editorial-mobile-width, 70%);
        height: var(--inv-editorial-mobile-height, 20%);
        z-index: var(--inv-editorial-mobile-layer, 2);
        transform: translate(-50%, -50%) rotate(var(--inv-editorial-mobile-rotation, 0deg));
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__main-card {
        padding: clamp(10px, 3vw, 22px);
        border-width: 5px;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece .inv-card-menu__menu-card {
        padding: 6px 5px;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece .inv-card-menu__card-wrap {
        padding: 3px;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-extras {
        grid-template-columns: minmax(0,1fr);
        width: calc(100% - 22px);
        gap: 17px;
    }
}
@media (prefers-reduced-motion: reduce) {
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece { transition: none !important; }
}

/* F1-A.1-P: In modal mode the main paper is the actual Participation trigger.
   Keep its existing layout; only communicate interactivity on mouse and keyboard. */
.inv-card-menu--editorial-suite .inv-card-menu__main-card--modal-trigger {
    cursor: pointer;
}
.inv-card-menu--editorial-suite .inv-card-menu__main-card--modal-trigger:focus-visible {
    outline: 3px solid rgba(92, 111, 85, .85);
    outline-offset: 5px;
}
@media (hover: hover) and (pointer: fine) {
    .inv-card-menu--editorial-suite .inv-card-menu__main-card--modal-trigger:hover {
        box-shadow: 0 15px 32px rgba(33, 36, 28, .23);
    }
}

/* F1-A.1 — One continuous editorial document. Sections set to 'inline' are
   real renderer nodes in auto-height paper panels, never copied or constrained
   to the absolutely positioned collage dimensions. Modal cards remain tappable. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: clamp(22px, 4.5vw, 60px);
    max-width: 100%;
    padding-bottom: clamp(35px, 5vw, 80px);
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-modal {
    position: relative;
    width: min(76%, 640px);
    min-width: 0;
    isolation: isolate;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-modal:nth-child(even) {
    margin-left: auto;
    margin-right: 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-modal:nth-child(odd) {
    margin-right: auto;
    margin-left: 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-modal > .inv-card-menu__card-stage {
    display: block;
    width: 100%;
    max-width: 100%;
    grid-column: auto;
    grid-row: auto;
    transform: none !important;
    min-width: 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-inline-card {
    position: relative;
    width: 100%;
    min-width: 0;
    height: auto;
    border: 1px solid rgba(151, 132, 101, .20);
    background: rgba(250, 247, 240, .95);
    box-shadow: 0 14px 38px rgba(42, 39, 32, .13);
    overflow: visible;
    isolation: isolate;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-inline-card > .inv-section {
    width: 100%;
    max-width: 100%;
    height: auto;
    min-height: 0;
    box-sizing: border-box;
    margin-top: 0;
    margin-bottom: 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-inline-card .inv-section__inner {
    max-width: 100%;
}
@media (max-width: 720px) {
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-extras {
        width: calc(100% - 12px);
        gap: 22px;
        padding-bottom: 36px;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-modal {
        width: min(92%, 480px);
        margin-left: auto !important;
        margin-right: auto !important;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-inline-card {
        width: 100%;
    }
}


/* F1-A.1-P — Real participation, embedded in the principal stationery card.
   Only editorialSuite + participation inline. All other inline sections continue
   as full-height paper panels below the opening collage. */
.inv-card-menu--participation-in-suite .inv-card-menu__editorial-piece > .inv-card-menu__main-card--participation {
    display: block;
    height: auto;
    min-height: 100%;
    overflow: visible;
    box-sizing: border-box;
    padding: clamp(18px, 2.2vw, 32px) clamp(20px, 3.5vw, 45px);
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation > .inv-participation {
    position: relative;
    width: 100%;
    max-width: none;
    min-height: 0;
    height: auto;
    padding: 0;
    margin: 0;
    border: 0;
    background: transparent !important;
    box-shadow: none;
    overflow: visible;
    transform: none;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation > .inv-participation::before,
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation > .inv-participation::after {
    display: none;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__inner {
    box-sizing: border-box;
    width: 100%;
    max-width: none;
    padding: 0;
    margin: 0 auto;
    background: none;
    border: 0;
    box-shadow: none;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__title {
    font-size: clamp(20px, 2vw, 30px);
    line-height: 1.12;
    margin: 0 auto 12px;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__parents-heading {
    margin: 0 auto 10px;
    font-size: clamp(11px, 1.15vw, 15px);
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__parents {
    display: grid;
    grid-template-columns: repeat(2, minmax(0,1fr));
    gap: 10px 24px;
    margin: 0 auto clamp(9px, 1.3vw, 17px);
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__parents-column {
    gap: 2px;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__parent-name {
    font-size: var(--inv-section-body-size, clamp(10px, .9vw, 13px));
    line-height: 1.35;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__couple {
    font-size: clamp(33px, 4.8vw, 69px);
    line-height: 1;
    margin: clamp(9px, 1.3vw, 18px) auto clamp(10px, 1.3vw, 18px);
    white-space: normal;
    overflow-wrap: anywhere;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__lead,
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__body,
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__custom-text,
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__reference,
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__officiant,
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__additional {
    font-size: clamp(10px, 1vw, 13px);
    line-height: 1.45;
    max-width: 100%;
    margin-top: 0;
    margin-bottom: 9px;
    overflow-wrap: anywhere;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__reference {
    font-style: italic;
    margin-top: 7px;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__decoration {
    margin: 9px auto;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__godparents-heading {
    font-size: 13px;
    margin: 12px auto 8px;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__godparents {
    display: grid;
    grid-template-columns: repeat(2, minmax(0,1fr));
    gap: 10px 20px;
    margin: 8px auto 0;
    padding: 8px 0 0;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__godparent-icon {
    width: 28px;
    height: 28px;
    margin-bottom: 5px;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__godparent-label {
    font-size: 9px;
    margin-bottom: 4px;
}
.inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__godparent-name {
    font-size: 10px;
    line-height: 1.35;
}
@media (max-width: 720px) {
    .inv-card-menu--participation-in-suite .inv-card-menu__editorial-piece > .inv-card-menu__main-card--participation {
        padding: 14px 13px;
        border-width: 5px;
    }
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__title {
        font-size: 20px;
    }
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__parents {
        gap: 6px 9px;
        margin-bottom: 11px;
    }
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__parent-name {
        font-size: var(--inv-section-mobile-body-size, var(--inv-section-body-size, 10px));
    }
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__couple {
        font-size: clamp(29px, 8vw, 40px);
        margin: 10px auto 13px;
    }
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__lead,
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__body,
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__custom-text,
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__reference,
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__officiant,
    .inv-card-menu--participation-in-suite .inv-card-menu__main-card--participation .inv-participation__additional {
        font-size: 10px;
        line-height: 1.42;
        margin-bottom: 7px;
    }
}


/* Adjust only visual clearance, never persisted F1-B placement coordinates. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece {
    translate: 0 var(--inv-editorial-inline-clearance, 0px);
}

/* F1-A.1-V — Dress Code can be a real, interactive stationery insert in the
   same opening collage. The full renderer node lives here, NOT in the modal
   section store, and is never duplicated in the editorial flow. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content {
    height: auto;
    min-height: var(--inv-editorial-desktop-height, 20%);
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__editorial-stage-inline-card {
    display: block;
    width: 100%;
    height: auto;
    min-height: var(--inv-editorial-desktop-height, 20%);
    padding: clamp(14px, 2vw, 23px) clamp(12px, 1.7vw, 21px);
    border: 7px double rgba(169, 154, 129, .22);
    box-shadow: 0 12px 24px rgba(45, 46, 37, .20);
    background: #fbf8f0;
    box-sizing: border-box;
    isolation: isolate;
    overflow: visible;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-inline {
    width: min(90%, 660px);
    margin-inline: auto;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-inline > .inv-card-menu__editorial-stage-inline-card {
    min-height: 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card > .inv-dresscode {
    padding: 0 !important;
    margin: 0 !important;
    min-height: 0;
    height: auto;
    width: 100%;
    max-width: 100%;
    background: transparent;
    border: none;
    box-shadow: none;
    overflow: visible;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode__inner {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    padding: 0 !important;
    margin: 0 auto;
    color: #494339;
    text-align: center;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-editorial-title {
    font-family: var(--inv-heading-font, Georgia, serif);
    font-size: clamp(19px, 2vw, 27px) !important;
    line-height: 1.17;
    margin: 0 0 9px;
    letter-spacing: .01em;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode__name {
    margin: 0 0 8px;
    font-size: clamp(14px, 1.6vw, 19px) !important;
    line-height: 1.25;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 12px;
    margin: 11px 0 0;
    padding: 0;
    max-width: 100%;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card {
    min-width: 0;
    height: auto;
    padding: 0 3px;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card + .inv-dresscode-card::before {
    left: -6px; top: 8%; bottom: 8%; right: auto;
    height: auto; width: 1px;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__title {
    font-size: clamp(12px, 1.4vw, 16px);
    line-height: 1.25;
    margin: 0 0 5px;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__text,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__note {
    font-size: clamp(10px, .92vw, 12px) !important;
    line-height: 1.35;
    overflow-wrap: anywhere;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__note { margin-top: 5px; }
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__action {
    margin-top: 4px;
    padding-top: 4px;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__action .inv-button {
    font-size: 10px;
    min-height: 28px;
    padding: 5px 9px;
    white-space: normal;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode__inline-images {
    margin: 8px auto 0;
    width: 100%;
    max-width: 100%;
    gap: 6px;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__inline-image-holder {
    margin: 8px auto 0;
    max-width: 140px;
}
@media (max-width: 720px) {
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content {
        min-height: var(--inv-editorial-mobile-height, 20%);
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__editorial-stage-inline-card {
        min-height: var(--inv-editorial-mobile-height, 20%);
        padding: 11px 9px;
        border-width: 4px;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-editorial-title {
        font-size: 18px !important;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode__name {
        font-size: 14px !important;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode__grid {
        grid-template-columns: minmax(0, 1fr);
        gap: 9px;
        margin-top: 8px;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card {
        padding: 0;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card + .inv-dresscode-card::before {
        left: 15%; right: 15%; top: -5px;
        bottom: auto; height: 1px; width: auto;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__title {
        font-size: 13px;
        margin: 0 0 3px;
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__text,
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-dresscode-card .inv-dresscode-card__note {
        font-size: 11px !important;
        line-height: 1.28;
    }
}

/* F1-A.2 — Universal direct/modal presentation. The section renderer is reused
   rather than recoded, so existing forms and links remain functional. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-content-card {
    position: relative;
    display: block;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    min-height: 0;
    height: auto;
    overflow: visible;
    box-sizing: border-box;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-content-card > .inv-section {
    position: relative;
    box-sizing: border-box;
    width: 100%;
    max-width: 100%;
    min-width: 0;
    height: auto;
    min-height: 0;
    padding: 0 !important;
    margin: 0 !important;
    background: transparent;
    box-shadow: none;
    border: 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-content-card .inv-section__inner {
    max-width: 100%;
    min-width: 0;
    width: 100%;
    padding: 0;
    margin-left: auto;
    margin-right: auto;
    box-sizing: border-box;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content {
    min-width: 0;
    min-height: var(--inv-editorial-desktop-height, 20%);
    height: auto;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content > .inv-card-menu__editorial-content-card {
    min-height: var(--inv-editorial-desktop-height, 20%);
}
/* Preserve full-width layouts below the suite: large galleries, hotels and
   RSVP forms get real document height rather than being forced into a slot. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras .inv-card-menu__editorial-flow-inline {
    min-width: 0;
    width: min(100%, 900px);
    align-self: start;
    grid-column: 1 / -1;
    margin-inline: auto;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras .inv-card-menu__editorial-flow-inline > .inv-card-menu__editorial-content-card {
    min-height: 0;
}
@media (max-width: 720px) {
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content {
        min-height: var(--inv-editorial-mobile-height, 20%);
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content > .inv-card-menu__editorial-content-card {
        min-height: var(--inv-editorial-mobile-height, 20%);
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-extras .inv-card-menu__editorial-flow-inline {
        width: 100%;
    }
}

/* A stationery insert is narrower than a conventional scrolling section.
   Reduce spacious editorial headings/columns ONLY inside positioned pieces;
   full-width direct sections below the collage keep their original typography. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-editorial-title {
    font-size: clamp(19px, 2.2vw, 28px) !important;
    line-height: 1.2;
    margin-top: 0;
    margin-bottom: 9px;
    overflow-wrap: anywhere;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-section-kicker {
    font-size: clamp(9px, 1vw, 12px);
    line-height: 1.35;
    margin-bottom: 6px;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events__card,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__surface,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-icon__surface {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    margin-top: 8px;
    padding: 6px 0;
    background: transparent;
    box-shadow: none;
    box-sizing: border-box;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-event-row,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-event-location--header {
    grid-template-columns: minmax(0, .35fr) minmax(0, 1fr);
    gap: 8px;
    padding: 9px 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-event-row__time {
    font-size: clamp(11px, 1.2vw, 15px);
    line-height: 1.3;
    white-space: normal;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-event-row__title,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-event-location__venue {
    font-size: clamp(11px, 1.35vw, 15px) !important;
    line-height: 1.35;
    overflow-wrap: anywhere;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-event-row__venue,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-event-row__description,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-event-location__address {
    font-size: clamp(10px, 1vw, 12px);
    line-height: 1.45;
    overflow-wrap: anywhere;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events__decoration { max-height: 20px; }
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__same-grid,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__location-grid--split,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__location-grid--many {
    display: flex;
    flex-direction: column;
    gap: 12px;
    min-width: 0;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__center-decor { min-height: 0; max-height: 35px; }
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__title { font-size: clamp(19px, 2.2vw, 28px) !important; }
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__event-title,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__venue,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-icon__event-title { font-size: clamp(12px, 1.3vw, 16px) !important; }
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__date-text,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__event-time,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content .inv-events-classic__address { font-size: clamp(10px, 1.05vw, 13px) !important; }

/* The persisted Y is the center of the minimum paper slot. Tall content grows
   downward from that slot rather than unexpectedly growing over the header. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content {
    top: calc(var(--inv-editorial-desktop-y, 50%) - var(--inv-editorial-desktop-height, 20%) / 2);
    transform: translate(-50%, 0) rotate(var(--inv-editorial-desktop-rotation, 0deg));
}
@media (max-width: 720px) {
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-piece--inline-content {
        top: calc(var(--inv-editorial-mobile-y, 50%) - var(--inv-editorial-mobile-height, 20%) / 2);
        transform: translate(-50%, 0) rotate(var(--inv-editorial-mobile-rotation, 0deg));
    }
}

/* F1-A.2.1 — Unpositioned INLINE sections are still real stationery cards.
   Keep natural document height for hotels / galleries / forms and make the card
   edge visible. Modal cards and the positioned opening collage are unchanged. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras .inv-card-menu__editorial-flow-inline {
    position: relative;
    align-self: center;
    width: min(84%, 760px);
    max-width: 100%;
    min-width: 0;
    margin: 0 auto;
    isolation: isolate;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-extras .inv-card-menu__editorial-flow-inline > .inv-card-menu__editorial-content-card {
    display: block;
    box-sizing: border-box;
    padding: clamp(20px, 3.5vw, 50px) clamp(16px, 3vw, 46px);
    border: 7px double rgba(170, 151, 122, .37);
    border-radius: 2px;
    background-color: #fbf8f0;
    box-shadow: 0 20px 38px rgba(45, 46, 37, .21), 0 3px 8px rgba(45, 46, 37, .1);
    min-height: 0;
    height: auto;
    overflow: visible;
}
/* Renderers keep their actual content and live action handlers, but suppress
   section-sized margins in the smaller, continuous paper inserts. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-inline .inv-hotels--editorial-guide .inv-hotel-guide {
    margin-top: clamp(16px, 2vw, 30px);
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-inline .inv-hotel-guide__item--featured {
    margin-bottom: clamp(20px, 3vw, 40px);
    padding-bottom: clamp(16px, 2vw, 28px);
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-flow-inline .inv-editorial-title {
    font-size: clamp(26px, 3.6vw, 51px);
    line-height: 1.15;
}
@media (max-width: 720px) {
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-extras .inv-card-menu__editorial-flow-inline {
        width: calc(100% - 28px);
    }
    .inv-card-menu--editorial-suite .inv-card-menu__editorial-extras .inv-card-menu__editorial-flow-inline > .inv-card-menu__editorial-content-card {
        padding: 22px 13px;
        border-width: 4px;
    }
}

/* Rótulo typography: preserve the original font sizes at 100%, including
   the editorial and mobile variants. A custom scale is applied inline only
   when the Builder requests it. */
.inv-rotulo-screen__instruction {
    --inv-rotulo-instruction-base-size: 11px;
}
html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__instruction {
    --inv-rotulo-instruction-base-size: 10px;
}
@media (max-width: 767.98px) {
    .inv-rotulo-screen__instruction { --inv-rotulo-instruction-base-size: 9px; }
    html[data-inv-profile="alegria-editorial"] .inv-rotulo-screen--editorial-paper .inv-rotulo-screen__instruction {
        --inv-rotulo-instruction-base-size: 9px;
    }
}

/* Hotel-name typography set in Invitation Builder > Hospedaje.
   Applies to both presentation variants, including featured and alternate lodging.
   With no override, the original responsive sizes remain unchanged. */
.inv-section.inv-hotels.inv-hotels--hotel-name-size-override .inv-hotel-card__title,
.inv-section.inv-hotels.inv-hotels--hotel-name-size-override .inv-hotel-guide__title {
    font-size: var(--inv-hotel-name-size);
}

@media (max-width: 768px) {
    .inv-section.inv-hotels.inv-hotels--mobile-hotel-name-size-override .inv-hotel-card__title,
    .inv-section.inv-hotels.inv-hotels--mobile-hotel-name-size-override .inv-hotel-guide__title,
    .inv-section.inv-hotels.inv-hotels--mobile-hotel-name-size-auto .inv-hotel-card__title,
    .inv-section.inv-hotels.inv-hotels--mobile-hotel-name-size-auto .inv-hotel-guide__title {
        font-size: var(--inv-hotel-mobile-name-size);
    }
}

/* Builder 2026-10-13: opt-in desktop columns for Restaurants and Activities.
   Added after photo-card breakpoint rules so an explicit choice wins at desktop
   widths; unconfigured invitations retain their previous layout unchanged. */
@media (min-width: 721px) {
    .inv-restaurants__grid.inv-grid--columns-custom,
    .inv-restaurant-guide.inv-grid--columns-custom,
    .inv-activities__grid.inv-grid--columns-custom,
    .inv-activities--photo-cards .inv-activities__grid--photos.inv-grid--columns-custom,
    .inv-editorial-list--activities.inv-grid--columns-custom {
        grid-template-columns: repeat(var(--inv-grid-desktop-columns), minmax(0, 1fr));
    }

    .inv-editorial-list--activities.inv-grid--columns-custom {
        display: grid;
        width: 100%;
        gap: clamp(18px, 2vw, 30px);
        align-items: start;
    }

    .inv-restaurants__grid.inv-grid--columns-custom > *,
    .inv-restaurant-guide.inv-grid--columns-custom > *,
    .inv-activities__grid.inv-grid--columns-custom > *,
    .inv-editorial-list--activities.inv-grid--columns-custom > * {
        min-width: 0;
    }

    .inv-restaurant-guide.inv-grid--columns-custom {
        width: 100%;
        column-gap: clamp(18px, 2.4vw, 42px);
    }
}

@media (max-width: 720px) {
    .inv-restaurants__grid.inv-grid--columns-custom,
    .inv-restaurant-guide.inv-grid--columns-custom,
    .inv-activities__grid.inv-grid--columns-custom,
    .inv-activities--photo-cards .inv-activities__grid--photos.inv-grid--columns-custom,
    .inv-editorial-list--activities.inv-grid--columns-custom {
        grid-template-columns: minmax(0, 1fr);
    }
}

/* Hospedaje: using one image on all cards requires a consistent card height
   across desktop rows. With background-size: cover, different row heights
   otherwise produce different scales/crops of the same texture or photograph.
   Keep natural heights on mobile so single-column cards do not gain empty space. */
@media (min-width: 721px) {
    .inv-hotels__grid.inv-hotels__grid--uniform-image-rows {
        grid-auto-rows: minmax(0, 1fr);
    }
}

/* Hospedaje: shared Recursos Visuales image on each hotel card. */
.inv-hotels .inv-hotel-card.inv-hotel-card--image-background,
.inv-hotels .inv-hotel-guide__item.inv-hotel-card--image-background {
    background-image: linear-gradient(rgba(0, 0, 0, var(--inv-hotel-image-overlay, .45)),
                                      rgba(0, 0, 0, var(--inv-hotel-image-overlay, .45))),
                      var(--inv-hotel-card-background-image, none);
    /* Full-card shading must not repeat with the texture underneath. */
    background-size: 100% 100%, var(--inv-hotel-card-image-size, cover);
    background-position: center center, var(--inv-hotel-card-image-position, center center);
    background-repeat: no-repeat, var(--inv-hotel-card-image-repeat, no-repeat);
}
.inv-hotels .inv-hotel-guide__item.inv-hotel-card--image-background {
    padding: clamp(22px, 3vw, 36px);
    border-radius: var(--inv-card-radius);
}

/* Universal background image sizing from Invitation Builder, with separate
   background-size for the wash layer and the image. No selector matches
   preexisting invitations unless a fit was explicitly configured. */
.inv-section.inv-has-backdrop.inv-section--image-fit-custom,
.inv-footer.inv-has-backdrop.inv-section--image-fit-custom {
    background-size: 100% 100%, var(--inv-section-image-size, cover);
    background-repeat: no-repeat, var(--inv-section-image-repeat, no-repeat);
    background-position: center center, var(--inv-section-image-position, center center);
}

/* Cards with image backgrounds inherit one shared size (fixed 320px base
   for repeat) instead of recalculating scale from each card's height.
   Limit this to card surfaces, not section media/gallery photographs. */
.inv-section--custom-card-image :is(
    .inv-layout-surface-card:not(:has(.inv-restaurant-card, .inv-activity-card, .inv-makeup-card, .inv-transport-card, .inv-gift-card)),
    .inv-restaurant-card,
    .inv-activity-card,
    .inv-makeup-card,
    .inv-transport-card,
    .inv-gift-card,
    .inv-activity-photo-card__content,
    .inv-info__group--card,
    .inv-editorial-list__row.inv-layout-surface-card,
    .inv-guestbook__card,
    .inv-dresscode-card,
    .inv-events__card,
    .inv-postit-card,
    .inv-gifts-editorial__panel
) {
    background-image: linear-gradient(rgba(0, 0, 0, var(--inv-section-card-overlay, .45)), rgba(0, 0, 0, var(--inv-section-card-overlay, .45))), var(--inv-section-card-image, none) !important;
    background-size: 100% 100%, var(--inv-section-card-size, cover) !important;
    background-repeat: no-repeat, var(--inv-section-card-repeat, no-repeat) !important;
    background-position: center center, var(--inv-section-card-position, center center) !important;
    --inv-text: #ffffff;
    --inv-text-inverse: #ffffff;
    color: #ffffff;
}
.inv-section--custom-card-image :is(
    .inv-layout-surface-card:not(:has(.inv-restaurant-card, .inv-activity-card, .inv-makeup-card, .inv-transport-card, .inv-gift-card)),
    .inv-restaurant-card,
    .inv-activity-card,
    .inv-makeup-card,
    .inv-transport-card,
    .inv-gift-card,
    .inv-activity-photo-card__content,
    .inv-info__group--card,
    .inv-guestbook__card
).inv-has-paper-surface::before {
    opacity: 0 !important;
    background-image: none !important;
}

/* Paper artwork is normally light, unlike photographs with a dark overlay. */
.inv-section--custom-card-image--paper :is(
    .inv-layout-surface-card, .inv-restaurant-card, .inv-activity-card,
    .inv-makeup-card, .inv-transport-card, .inv-gift-card,
    .inv-activity-photo-card__content, .inv-info__group--card, .inv-guestbook__card
) {
    --inv-text: #191919;
    --inv-text-inverse: #191919;
    color: #191919;
}


/* 2026-10-14 · Actividades: Foto + texto amplio (layout opt-in).
   For long descriptions, one activity per row instead of narrow 3–5 columns.
   Keep the original photoCards layout entirely unchanged. */
.inv-activities--photo-stories .inv-activities__grid--photos {
    width: min(100%, 1120px);
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 0;
    margin-top: clamp(34px, 5vw, 70px);
    align-items: stretch;
}
.inv-activities--photo-stories .inv-activity-photo-card {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    align-items: center;
    column-gap: clamp(28px, 5vw, 86px);
    row-gap: 22px;
    height: auto;
    min-height: 0;
    text-align: left;
    padding: clamp(30px, 4.3vw, 62px) 0;
    border-bottom: 1px solid currentColor;
    border-color: rgba(116, 86, 114, .22);
}
.inv-activities--photo-stories .inv-activity-photo-card:first-child {
    padding-top: 0;
}
.inv-activities--photo-stories .inv-activity-photo-card:last-child {
    padding-bottom: 0;
    border-bottom: 0;
}
.inv-activities--photo-stories .inv-activity-photo-card__media {
    width: min(100%, 470px);
    aspect-ratio: 4 / 3;
    grid-column: 1;
    justify-self: start;
    border-radius: 10px;
    box-shadow: 0 12px 32px rgba(34, 26, 28, .10);
}
.inv-activities--photo-stories .inv-activity-photo-card__content {
    grid-column: 2;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: center;
    width: 100%;
    max-width: 560px;
    min-width: 0;
    justify-self: start;
    padding: 0;
    text-align: left;
}
.inv-activities--photo-stories .inv-activity-photo-card:nth-child(even) .inv-activity-photo-card__media {
    grid-column: 2;
    grid-row: 1;
    justify-self: end;
}
.inv-activities--photo-stories .inv-activity-photo-card:nth-child(even) .inv-activity-photo-card__content {
    grid-column: 1;
    grid-row: 1;
    justify-self: start;
}
.inv-activities--photo-stories .inv-activity-photo-card__index {
    display: none;
    margin-bottom: 14px;
    font-size: 11px;
    font-weight: 500;
    font-family: var(--inv-body-font, inherit);
    letter-spacing: .23em;
    opacity: .65;
}
.inv-activities--photo-stories .inv-activity-photo-card__title {
    display: block;
    min-height: 0;
    margin: 0;
    width: 100%;
    font-size: clamp(23px, 2.15vw, 32px);
    line-height: 1.24;
    text-align: left;
}
.inv-activities--photo-stories .inv-activity-photo-card__description,
.inv-activities--photo-stories .inv-activity-photo-card__extra {
    max-width: 70ch;
    width: 100%;
    margin: 18px 0 0;
    line-height: 1.7;
    text-align: left;
    white-space: pre-line;
    overflow-wrap: anywhere;
}
.inv-activities--photo-stories .inv-activity-photo-card__extra {
    margin-top: 12px;
}
.inv-activities--photo-stories .inv-activity-photo-card__actions {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-start;
    gap: 9px 14px;
    min-height: 0;
    margin: 22px 0 0;
    padding: 0;
}
.inv-activities--photo-stories .inv-activity-photo-card__actions .inv-button {
    margin: 0;
}
.inv-activities--photo-stories .inv-activity-photo-card--no-photo {
    grid-template-columns: minmax(0, 1fr);
}
.inv-activities--photo-stories .inv-activity-photo-card--no-photo .inv-activity-photo-card__content {
    grid-column: 1 / -1;
    grid-row: auto;
    max-width: 760px;
    margin: 0 auto;
}
@media (max-width: 850px) {
    .inv-activities--photo-stories .inv-activities__grid--photos {
        width: min(100%, 640px);
    }
    .inv-activities--photo-stories .inv-activity-photo-card {
        grid-template-columns: minmax(0, 1fr);
        gap: 0;
        padding: 35px 0;
    }
    .inv-activities--photo-stories .inv-activity-photo-card__media,
    .inv-activities--photo-stories .inv-activity-photo-card:nth-child(even) .inv-activity-photo-card__media {
        grid-row: 1;
        grid-column: 1;
        width: 100%;
        justify-self: stretch;
        aspect-ratio: 16 / 10;
    }
    .inv-activities--photo-stories .inv-activity-photo-card__content,
    .inv-activities--photo-stories .inv-activity-photo-card:nth-child(even) .inv-activity-photo-card__content {
        grid-row: 2;
        grid-column: 1;
        max-width: none;
        justify-self: stretch;
        padding-top: 21px;
    }
    .inv-activities--photo-stories .inv-activity-photo-card--no-photo .inv-activity-photo-card__content {
        grid-row: 1;
        padding-top: 0;
    }
    .inv-activities--photo-stories .inv-activity-photo-card__index {
        margin-bottom: 9px;
    }
    .inv-activities--photo-stories .inv-activity-photo-card__description,
    .inv-activities--photo-stories .inv-activity-photo-card__extra {
        margin-top: 13px;
    }
}


/* Transporte · Texto compacto (opt-in).
   Uses the existing section background, color, title decoration and theme,
   without a paper content card or list markers. Height follows actual content.
   Section-specific padding overrides in the Builder remain in effect. */
.inv-transport--compact-text {
    padding: clamp(44px, 6.5vw, 86px) 0;
    min-height: 0;
}

.inv-transport--compact-text .inv-transport__inner {
    width: min(calc(100% - 48px), 960px);
}

.inv-transport--compact-text .inv-transport__intro {
    width: min(100%, 680px);
    margin-top: 20px;
    text-align: center;
}

.inv-transport-compact__groups {
    display: grid;
    width: min(100%, 910px);
    margin: clamp(26px, 3.6vw, 48px) auto 0;
    gap: clamp(30px, 5vw, 72px);
    align-items: start;
    text-align: center;
}

.inv-transport-compact__groups--single {
    max-width: 680px;
    grid-template-columns: minmax(0, 1fr);
}

.inv-transport-compact__groups--split {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.inv-transport-compact__group {
    min-width: 0;
}

.inv-transport-compact__title {
    margin: 0;
    font-family: var(--inv-heading-font);
    font-weight: 400;
    font-size: clamp(23px, 2.15vw, 32px);
    line-height: 1.24;
}

.inv-transport-compact__copy {
    display: grid;
    gap: 12px;
    margin-top: 14px;
}

.inv-transport-compact__group--no-heading .inv-transport-compact__copy {
    margin-top: 0;
}

.inv-transport-compact__item {
    margin: 0;
    font-size: clamp(15px, 1.22vw, 18px);
    line-height: 1.7;
    white-space: pre-line;
    overflow-wrap: anywhere;
}

@media (max-width: 767.98px) {
    .inv-transport--compact-text {
        padding: 46px 0 54px;
    }

    .inv-transport--compact-text .inv-transport__inner {
        width: min(calc(100% - 32px), 600px);
    }

    .inv-transport-compact__groups {
        width: 100%;
        grid-template-columns: minmax(0, 1fr);
        margin-top: 28px;
        gap: 32px;
    }

    .inv-transport-compact__title {
        font-size: clamp(22px, 5.7vw, 28px);
    }

    .inv-transport-compact__copy {
        gap: 12px;
        margin-top: 12px;
    }

    .inv-transport-compact__item {
        font-size: 16px;
        line-height: 1.65;
    }
}

/* INV_MOBILE_LEGACY_SAFARI_LAYOUT_20261015
   Old iOS WebKit can mis-measure percentage min-heights of grid cards, and
   photoStories' nested CSS Grid + aspect-ratio can place all photographs in a
   stack ahead of their descriptions. Keep both mobile layouts content-sized.
   Only these two section variants are affected; desktop remains unchanged. */
@media (max-width: 720px) {
    /* A one-column stack avoids Safari's indefinite 100% grid-item height,
       while preserving each vendor's own paper/texture and button styles. */
    .inv-makeup:not(.inv-makeup--directory) .inv-makeup__grid {
        display: block;
        height: auto;
        min-height: 0;
    }
    .inv-makeup:not(.inv-makeup--directory) .inv-makeup__grid > .inv-makeup-card {
        display: block;
        width: 100%;
        height: auto;
        min-height: 0;
        box-sizing: border-box;
    }
    .inv-makeup:not(.inv-makeup--directory) .inv-makeup__grid > .inv-makeup-card + .inv-makeup-card {
        margin-top: 24px;
    }
}

@media (max-width: 850px) {
    /* Mobile photoStories use normal flex document order: photo, then its own
       title, description and actions. No CSS Grid auto-placement required. */
    .inv-activities--photo-stories .inv-activities__grid--photos {
        display: block;
        width: 100%;
        max-width: 640px;
        height: auto;
        min-height: 0;
    }
    .inv-activities--photo-stories .inv-activities__grid--photos > .inv-activity-photo-card {
        display: flex;
        flex-direction: column;
        align-items: stretch;
        justify-content: flex-start;
        width: 100%;
        height: auto;
        min-height: 0;
        box-sizing: border-box;
    }
    .inv-activities--photo-stories .inv-activity-photo-card__media,
    .inv-activities--photo-stories .inv-activity-photo-card:nth-child(even) .inv-activity-photo-card__media {
        display: block;
        flex: none;
        position: relative;
        width: 100%;
        height: 0;
        padding-top: 62.5%; /* 16:10, supported without aspect-ratio */
        aspect-ratio: auto;
        min-height: 0;
        overflow: hidden;
        box-sizing: content-box;
    }
    .inv-activities--photo-stories .inv-activity-photo-card__media .inv-activity-photo-card__image {
        position: absolute;
        display: block;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    .inv-activities--photo-stories .inv-activity-photo-card__content,
    .inv-activities--photo-stories .inv-activity-photo-card:nth-child(even) .inv-activity-photo-card__content {
        display: flex;
        flex: none;
        flex-direction: column;
        align-items: stretch;
        width: 100%;
        height: auto;
        min-height: 0;
        padding: 21px 0 0;
        margin: 0;
        box-sizing: border-box;
    }
    .inv-activities--photo-stories .inv-activity-photo-card--no-photo .inv-activity-photo-card__content {
        padding-top: 0;
    }
}

/* The original photoCards variant likewise avoids percentage card heights
   in the one-column mobile layout. This prevents overlapping rows on older
   WebKit when a photo is taller than expected. */
@media (max-width: 620px) {
    .inv-activities--photo-cards:not(.inv-activities--photo-stories) .inv-activities__grid--photos {
        display: block;
        width: 100%;
        max-width: 430px;
        height: auto;
        min-height: 0;
    }
    .inv-activities--photo-cards:not(.inv-activities--photo-stories) .inv-activity-photo-card {
        display: flex;
        flex-direction: column;
        width: 100%;
        height: auto;
        min-height: 0;
    }
    .inv-activities--photo-cards:not(.inv-activities--photo-stories) .inv-activity-photo-card + .inv-activity-photo-card {
        margin-top: 34px;
    }
    .inv-activities--photo-cards:not(.inv-activities--photo-stories) .inv-activity-photo-card__content {
        flex: none;
        height: auto;
        min-height: 0;
    }
}

/* The other activity-photo layout also needs a ratio fallback in iOS Safari
   versions that predate native aspect-ratio (iOS < 15). */
@supports not (aspect-ratio: 1 / 1) {
    .inv-activities--photo-cards:not(.inv-activities--photo-stories) .inv-activity-photo-card__media {
        position: relative;
        height: 0;
        padding-top: 75%;
        box-sizing: content-box;
    }
    .inv-activities--photo-cards:not(.inv-activities--photo-stories) .inv-activity-photo-card__image {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    @media (max-width: 620px) {
        .inv-activities--photo-cards:not(.inv-activities--photo-stories) .inv-activity-photo-card__media {
            padding-top: 68.75%; /* 16:11 */
        }
    }
}

/* Proposal story: optional, continuous full-width photo carousel. */
.inv-proposal--carousel .inv-proposal__title { margin-bottom: clamp(26px, 3.7vw, 46px); }
.inv-proposal__layout--infinitecarousel {
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: clamp(35px, 4.6vw, 58px);
}
.inv-proposal__carousel {
    position: relative;
    width: min(100%, 1440px);
    max-width: 100%;
    margin-inline: auto;
    overflow: hidden;
    isolation: isolate;
    touch-action: pan-y;
    cursor: grab;
    -webkit-tap-highlight-color: transparent;
}
.inv-proposal__carousel:active { cursor: grabbing; }
.inv-proposal__carousel-track {
    display: flex;
    width: max-content;
    /* The runtime owns the offset so users can swipe in BOTH directions and
       the automatic movement can resume from the exact release position. */
    will-change: transform;
}
.inv-proposal__carousel-sequence {
    display: flex;
    flex: none;
    gap: 0;
    padding-right: 0;
}
.inv-proposal__carousel-image {
    width: clamp(190px, 19.2vw, 272px);
    height: clamp(285px, 29vw, 415px);
    max-width: none;
    flex: none;
    object-fit: cover;
    object-position: center;
    user-select: none;
    -webkit-user-drag: none;
    cursor: zoom-in;
}
.inv-proposal__carousel-image:focus-visible {
    outline: 3px solid currentColor;
    outline-offset: -3px;
}
.inv-proposal--carousel .inv-proposal__copy {
    width: min(100%, 760px);
    margin: 0 auto;
    text-align: left;
}
@media (max-width: 720px) {
    .inv-proposal__carousel { width: calc(100vw - 24px); }
    .inv-proposal__carousel-image { width: clamp(152px, 46vw, 220px); height: clamp(235px, 69vw, 340px); }
    .inv-proposal--carousel .inv-proposal__copy { padding: 0 4px; }
}
@media (prefers-reduced-motion: reduce) {
    .inv-proposal__carousel-track { will-change: auto; }
}

/* Card Menu Builder design placeholders: rendered ONLY inside the selected
   Studio iframe; the published runtime does not receive the design marker. */
.inv-card-menu__design-placeholder-inner {
    padding: 34px 24px;
    max-width: 660px;
    margin-inline: auto;
    text-align: center;
}
.inv-card-menu__design-placeholder-message {
    margin: 12px auto 0;
    max-width: 400px;
    border: 1px dashed #b9aea0;
    border-radius: 8px;
    padding: 14px;
    background: rgba(255, 255, 255, .94);
    color: #454545 !important;
    font-size: 14px;
    line-height: 1.5;
}
.inv-card-menu__card-stage--design-placeholder::after {
    content: 'SOLO VISTA PREVIA';
    position: absolute;
    bottom: 2px;
    right: 8px;
    z-index: 10;
    padding: 3px 5px;
    border-radius: 4px;
    background: #fff7e4;
    color: #65501f;
    font: 600 9px/1.2 system-ui, sans-serif;
    letter-spacing: .04em;
    pointer-events: none;
}

/* UI-5E: loader artwork must be visually above the central composition as well
   as the dark overlay. The ornaments do not capture pointer events. */
.inv-loader-screen > .inv-entry-decoration { z-index: 3; }

/* UI-5V: allow each floral ornament to control overflow direction independently.
   Old global directions still supply defaults when individual settings are absent. */
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration {
    --inv-floral-overflow-distance: var(--inv-floral-item-overflow, 0%);
    --inv-floral-y-shift: 0%;
    transform: translateY(var(--inv-floral-y-shift));
}
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--top-center,
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--bottom-center {
    transform: translateX(-50%) translateY(var(--inv-floral-y-shift));
}
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--side-left,
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--side-right {
    transform: translateY(calc(-50% + var(--inv-floral-y-shift)));
}
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration.inv-floral-item-direction--up,
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--top-left.inv-floral-item-direction--both,
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--top-center.inv-floral-item-direction--both,
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--top-right.inv-floral-item-direction--both {
    --inv-floral-y-shift: calc(0% - var(--inv-floral-overflow-distance));
}
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration.inv-floral-item-direction--down,
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--bottom-left.inv-floral-item-direction--both,
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--bottom-center.inv-floral-item-direction--both,
.inv-floral-decoration-layer--per-item-direction .inv-floral-decoration--bottom-right.inv-floral-item-direction--both {
    --inv-floral-y-shift: var(--inv-floral-overflow-distance);
}
@media (max-width: 720px) {
    .inv-floral-decoration-layer--per-item-direction .inv-floral-decoration {
        --inv-floral-overflow-distance: var(--inv-floral-item-mobile-overflow, 0%);
    }
}

/* UI-5W: custom two-side layout uses the established individually editable
   X/Y offsets, without changing the geometry of legacy published presets. */
.inv-floral-preset--custom .inv-floral-decoration--side-left {
    left: calc(0px + var(--inv-floral-item-side-x, 0px));
}
.inv-floral-preset--custom .inv-floral-decoration--side-right {
    right: calc(0px + var(--inv-floral-item-side-x, 0px));
}
@media (max-width: 720px) {
    .inv-floral-preset--custom .inv-floral-decoration--side-left {
        left: calc(0px + var(--inv-floral-item-mobile-side-x, 0px));
    }
    .inv-floral-preset--custom .inv-floral-decoration--side-right {
        right: calc(0px + var(--inv-floral-item-mobile-side-x, 0px));
    }
}
/* UI-61: The Countdown's lower phrase is a SECOND title in the legacy layout.
   Unlike other sections' BodyFontSizePx, its size was never applied because the
   node also has .inv-countdown__title. Only override when an explicit size is
   configured, so previously published/legacy layouts retain their appearance. */
html .inv-section.inv-countdown.inv-section--body-size-override .inv-countdown__title.inv-countdown__bottom-title {
    font-size: var(--inv-section-body-size);
}
@media (max-width: 720px) {
    html .inv-section.inv-countdown.inv-section--mobile-body-size-override .inv-countdown__title.inv-countdown__bottom-title,
    html .inv-section.inv-countdown.inv-section--mobile-body-size-auto .inv-countdown__title.inv-countdown__bottom-title {
        font-size: var(--inv-section-mobile-body-size);
    }
}

/* Card Menu artwork fitting — preserve the draggable box, crop ONLY its image.
   A separate viewport prevents scaled photos from spilling over neighboring cards.
   Important: never clip the card's outer wrapper, text or click target. */
.inv-card-menu__card-wrap--has-artwork > .inv-card-menu__artwork-viewport {
    position: absolute !important; inset: 0 !important; z-index: 0 !important;
    width: 100%; height: 100%; overflow: hidden;
    pointer-events: none;
}
.inv-card-menu__card-wrap--has-artwork > .inv-card-menu__artwork-viewport > .inv-card-menu__card-artwork {
    position: absolute !important; inset: 0 !important; z-index: 0 !important;
    display: block !important; width: 100% !important; height: 100% !important;
    max-width: none !important; max-height: none !important; margin: 0 !important;
    object-fit: var(--inv-card-artwork-fit, contain) !important;
    object-position: var(--inv-card-artwork-position-x, 50%) var(--inv-card-artwork-position-y, 50%) !important;
    transform: scale(var(--inv-card-artwork-scale, 1)) !important;
    transform-origin: var(--inv-card-artwork-position-x, 50%) var(--inv-card-artwork-position-y, 50%) !important;
    opacity: var(--inv-card-artwork-opacity, 1); pointer-events:none;
    filter: drop-shadow(0 15px 20px rgba(42,35,30,.12));
}


/* A2.7M — editorial collage artwork must fill the resized piece box.
   When a card with uploaded artwork is resized on the Card Menu canvas,
   the visible paper/viewport should expand with that piece instead of keeping
   an older intrinsic height. Only the image is cropped by its viewport. */
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__card-stage.inv-card-menu__card-stage--has-artwork-surface {
    width: 100% !important;
    height: 100% !important;
    min-height: 0 !important;
    aspect-ratio: auto !important;
    align-self: stretch !important;
    justify-self: stretch !important;
}
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__card-stage.inv-card-menu__card-stage--has-artwork-surface > .inv-card-menu__card-wrap,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__card-stage.inv-card-menu__card-stage--has-artwork-surface > .inv-card-menu__card-wrap > .inv-card-menu__artwork-viewport,
.inv-card-menu--editorial-suite .inv-card-menu__editorial-piece > .inv-card-menu__card-stage.inv-card-menu__card-stage--has-artwork-surface > .inv-card-menu__card-wrap > .inv-card-menu__menu-card {
    width: 100% !important;
    height: 100% !important;
    min-height: 0 !important;
    flex: 1 1 auto;
}

/* UI-84: background framing preserves image proportions at every viewport. */
.inv-card-menu::before {
    transform: scale(var(--inv-card-menu-bg-scale, 1));
    transform-origin: center center;
    pointer-events: none;
}
@media (min-width: 768px) and (max-width: 1024px) {
    .inv-card-menu::before {
        background-position: var(--inv-card-menu-background-position-tablet, var(--inv-card-menu-background-position, center));
        transform: scale(var(--inv-card-menu-bg-scale-tablet, var(--inv-card-menu-bg-scale, 1)));
    }
}
@media (max-width: 767px) {
    .inv-card-menu::before {
        background-position: var(--inv-card-menu-background-position-mobile, var(--inv-card-menu-background-position, center));
        transform: scale(var(--inv-card-menu-bg-scale-mobile, var(--inv-card-menu-bg-scale, 1)));
    }
}

/* Propuesta en video: comparte la reproducción adaptativa de Nuestra Historia. */
.inv-proposal__video-wrap { width: min(100%, 860px); margin-inline: auto; }
.inv-proposal__video { display: block; width: 100%; max-height: min(76vh, 720px); height: auto; aspect-ratio: 16 / 9; object-fit: contain; background: #111; border-radius: 8px; }
.inv-proposal__video-wrap .inv-story__video-status { min-height: 190px; display: flex; align-items: center; justify-content: center; text-align: center; }

/* Additional Events: chronological date groups (default). The existing
   per-section theme, paper treatment and event typography remain in force. */
.inv-additional-events--grouped .inv-additional-events__grouped-surface {
    width: min(100%, 1100px);
}
.inv-additional-events__date-group {
    width: 100%;
    text-align: center;
}
.inv-additional-events__date-group--following {
    margin-top: clamp(60px, 8vw, 104px);
}
/* Cada fecha queda diferenciada por el propio encabezado y el espacio,
   sin agregar líneas decorativas entre los días. */
.inv-additional-events__group-date {
    margin: 0 auto clamp(26px, 3.5vw, 44px);
}
.inv-additional-events__date-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: clamp(28px, 5vw, 88px);
    row-gap: clamp(44px, 5vw, 70px);
    justify-content: center;
    align-items: start;
    width: 100%;
    max-width: 1020px;
    margin: 0 auto;
}
/* An odd last row is centered, as is a whole date with one event. */
.inv-additional-events__date-grid > :last-child:nth-child(odd) {
    grid-column: 1 / -1;
    width: calc(50% - clamp(14px, 2.5vw, 44px));
    justify-self: center;
}
.inv-additional-events--grouped .inv-additional-events-classic__event-group {
    width: 100%;
    min-width: 0;
    padding: 0;
}
.inv-additional-events--grouped .inv-additional-events__editorial-event {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: clamp(12px, 1.5vw, 22px);
    padding: 0;
    min-width: 0;
    text-align: center;
}
.inv-additional-events--grouped .inv-additional-events__editorial-event .inv-event-row__time {
    padding: 0;
    text-align: center;
    align-items: center;
}
.inv-additional-events--grouped .inv-additional-events__editorial-event .inv-event-row__details {
    width: 100%;
    text-align: center;
}
.inv-additional-events--grouped .inv-additional-events__editorial-event .inv-event-row__location {
    text-align: center;
}
.inv-additional-events--grouped .inv-events-icon__item {
    min-width: 0;
}
/* Existing icon-timeline connectors must not join unrelated dates or rows. */
.inv-additional-events--grouped .inv-events-icon__item::before,
.inv-additional-events--grouped .inv-events-icon__item::after {
    display: none;
}
@media (max-width: 720px) {
    .inv-additional-events__date-grid {
        grid-template-columns: minmax(0, 560px);
        row-gap: 42px;
    }
    .inv-additional-events__date-grid > :last-child:nth-child(odd) {
        grid-column: auto;
        width: 100%;
    }
    .inv-additional-events__date-group--following {
        margin-top: 54px;
    }
    .inv-additional-events__group-date {
        margin-bottom: 26px;
    }
    .inv-additional-events--grouped .inv-additional-events-classic__event-group + .inv-additional-events-classic__event-group {
        margin-top: 0;
    }
    .inv-additional-events--grouped .inv-additional-events-classic__event-group {
        border: 0;
    }
}

/* Additional events: presentation-only shared dress code for same-day events.
   No questionnaire/DB inheritance: each event remains independently editable. */
.inv-additional-events__date-group > .inv-additional-events__date-grid + *,
.inv-additional-events__date-group > .inv-additional-events__shared-set + * {
    margin-top: clamp(38px, 5vw, 64px);
}
.inv-additional-events__shared-set {
    width: 100%;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: clamp(12px, 1.8vw, 20px);
}
.inv-additional-events__shared-headings,
.inv-additional-events__shared-locations {
    width: 100%;
}
.inv-additional-events__shared-headings .inv-events-classic__event,
.inv-additional-events__shared-headings .inv-events-icon__item,
.inv-additional-events__shared-headings .inv-additional-events__editorial-event {
    min-width: 0;
}
/* Shared dress code as a single editorial block beneath the event headings.
   These refinements are scoped to shared, grouped Additional Events only;
   text/button colors and selected invitation fonts remain inherited. */
.inv-additional-events__shared-dress {
    width: min(100%, 700px);
    text-align: center;
    margin-inline: auto;
    padding: 0;
    border: none;
}
.inv-additional-events__shared-dress .inv-additional-event-dresscode--shared {
    margin: 0 auto;
    text-align: center;
}
.inv-additional-events__shared-dress .inv-additional-event-dresscode__label {
    max-width: 100%;
    font-size: clamp(10px, .85vw, 12px);
    font-weight: 500;
    letter-spacing: .12em;
    line-height: 1.35;
    opacity: .7;
}
.inv-additional-events__shared-dress .inv-additional-event-dresscode__name {
    margin-top: 7px;
    font-size: clamp(23px, 2vw, 30px);
    line-height: 1.2;
}
.inv-additional-events__shared-dress .inv-additional-event-dresscode__details {
    justify-items: center;
    align-items: start;
    gap: clamp(16px, 2.2vw, 28px);
    margin: clamp(14px, 1.8vw, 20px) auto 0;
}
.inv-additional-events__shared-dress .inv-additional-event-dresscode__audience,
.inv-additional-events__shared-dress .inv-additional-event-dresscode__action {
    text-align: center;
}
.inv-additional-events__shared-dress .inv-additional-event-dresscode__audience-label {
    letter-spacing: .04em;
}
.inv-additional-events__shared-dress .inv-additional-event-dresscode__text,
.inv-additional-events__shared-dress .inv-additional-event-dresscode__reserved {
    margin-top: 6px;
    line-height: 1.45;
}
.inv-additional-events__shared-dress .inv-additional-event-dresscode__action {
    display: flex;
    justify-content: center;
    margin-top: 12px;
}
.inv-additional-events__shared-location-cell {
    min-width: 0;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    text-align: center;
}
.inv-additional-events__shared-location-cell > * {
    max-width: 100%;
    margin-inline: auto;
}
.inv-additional-events__shared-locations .inv-events-classic__group-location,
.inv-additional-events__shared-locations .inv-events-icon__item-location {
    text-align: center;
}
.inv-additional-events__shared-set--single-visible .inv-additional-events__shared-headings,
.inv-additional-events__shared-set--single-visible .inv-additional-events__shared-locations {
    grid-template-columns: minmax(0, 1fr);
}
.inv-additional-events__shared-set--single-visible .inv-additional-events__shared-headings > :not([hidden]),
.inv-additional-events__shared-set--single-visible .inv-additional-events__shared-locations > :not([hidden]) {
    grid-column: 1;
    width: min(100%, 460px);
    justify-self: center;
}
@media (max-width: 720px) {
    .inv-additional-events__shared-set { gap: 16px; }
    .inv-additional-events__shared-dress { padding: 0; }
    .inv-additional-events__shared-dress .inv-additional-event-dresscode__details {
        grid-template-columns: 1fr;
        gap: 16px;
    }
}

/* Eventos adicionales: una ubicación para eventos del mismo día y lugar.
   Independiente de la agrupación del código de vestimenta. */
.inv-additional-events__shared-location {
    width: min(100%, 760px);
    margin: clamp(12px, 1.6vw, 18px) auto 0;
    text-align: center;
}
.inv-additional-events__shared-location[hidden] { display: none !important; }
.inv-additional-events__shared-location > * {
    max-width: 100%;
    margin-left: auto;
    margin-right: auto;
    text-align: center;
}
.inv-additional-events__shared-location .inv-additional-events__shared-space {
    margin: 4px auto 10px;
}
.inv-additional-events__shared-location .inv-events-classic__group-location,
.inv-additional-events__shared-location .inv-events-icon__item-location,
.inv-additional-events__shared-location .inv-event-row__location {
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}
/* La ubicación se sitúa justo después del código compartido; no se usa
   el espaciado genérico entre grupos, que dejaba una franja excesiva. */
.inv-additional-events__date-group > .inv-additional-events__shared-set + .inv-additional-events__shared-location {
    margin-top: clamp(14px, 1.8vw, 20px);
}
.inv-additional-events__shared-set > .inv-additional-events__shared-location {
    margin-top: 0;
}

/* Studio: optional date-to-icon spacing in Additional Events only.
   No override unless the couple supplies a value, preserving old invitations. */
.inv-additional-events--date-icon-spacing-custom.inv-additional-events--grouped .inv-additional-events__group-date {
    margin-bottom: var(--inv-additional-date-icon-gap-desktop, clamp(26px, 3.5vw, 44px));
}
.inv-additional-events--date-icon-spacing-custom.inv-additional-events--classic-columns:not(.inv-additional-events--grouped) .inv-additional-events-classic__surface > .inv-events-classic__main-date {
    margin-bottom: var(--inv-additional-date-icon-gap-desktop, clamp(26px, 3vw, 38px));
}
.inv-additional-events--date-icon-spacing-custom.inv-additional-events--icon-timeline:not(.inv-additional-events--grouped) .inv-events-icon__surface > .inv-events-icon__meta {
    margin-bottom: var(--inv-additional-date-icon-gap-desktop, clamp(28px, 3vw, 42px));
}
@media (max-width: 720px) {
    .inv-additional-events--date-icon-spacing-custom.inv-additional-events--grouped .inv-additional-events__group-date {
        margin-bottom: var(--inv-additional-date-icon-gap-mobile, var(--inv-additional-date-icon-gap-desktop, 26px));
    }
    .inv-additional-events--date-icon-spacing-custom.inv-additional-events--classic-columns:not(.inv-additional-events--grouped) .inv-additional-events-classic__surface > .inv-events-classic__main-date {
        margin-bottom: var(--inv-additional-date-icon-gap-mobile, var(--inv-additional-date-icon-gap-desktop, 24px));
    }
    .inv-additional-events--date-icon-spacing-custom.inv-additional-events--icon-timeline:not(.inv-additional-events--grouped) .inv-events-icon__surface > .inv-events-icon__meta {
        margin-bottom: var(--inv-additional-date-icon-gap-mobile, var(--inv-additional-date-icon-gap-desktop, 28px));
    }
}


/* 2026-11-01 — Itinerario Classic Columns: pulido visual del layout principal.
   Objetivo: acercar la composición editorial al reference aprobado:
   - columna izquierda con FECHA/LUGAR;
   - ornamento central más presente;
   - columna derecha con eventos en stack vertical;
   - mejor jerarquía tipográfica y espaciado del CTA.
   Se limita al itinerario principal (data-section="events") para no alterar
   Eventos adicionales. */
[data-section="events"].inv-events--classic-columns .inv-events-classic__surface--same {
    width: min(100%, 1180px);
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__same-grid {
    grid-template-columns: minmax(280px, 1.08fr) minmax(120px, .42fr) minmax(220px, .88fr);
    align-items: start;
    gap: clamp(28px, 4.2vw, 82px);
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__meta-column,
[data-section="events"].inv-events--classic-columns .inv-events-classic__event-stack {
    justify-self: center;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__meta-column {
    max-width: 390px;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__event-stack {
    display: flex;
    flex-direction: column;
    align-items: center;
    max-width: 280px;
    width: 100%;
    padding-top: clamp(10px, 1.2vw, 18px);
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__date-block,
[data-section="events"].inv-events--classic-columns .inv-events-classic__location-block {
    max-width: 100%;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__label {
    margin-bottom: 12px;
    font-size: clamp(12px, 1.05vw, 15px);
    letter-spacing: .42em;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__weekday,
[data-section="events"].inv-events--classic-columns .inv-events-classic__date-text {
    line-height: 1.5;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__venue {
    line-height: 1.28;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__address {
    max-width: 26ch;
    margin-left: auto;
    margin-right: auto;
    line-height: 1.72;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__action {
    margin-top: 30px;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__action .inv-button {
    min-height: 50px;
    padding: 14px 32px 13px;
    letter-spacing: .34em;
    font-size: 11px;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__center-decor {
    min-height: 236px;
    padding-top: clamp(6px, 1vw, 14px);
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__center-decor-image--desktop {
    width: min(100%, 176px);
    max-height: 360px;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__event {
    width: 100%;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__event--spaced {
    margin-top: clamp(32px, 4vw, 52px);
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__event-title {
    max-width: 16ch;
    margin-left: auto;
    margin-right: auto;
    font-size: var(--inv-event-title-size, clamp(16px, 1.5vw, 24px));
    letter-spacing: .30em;
    line-height: 1.55;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__event-rule {
    width: 36px;
    margin: 16px auto 18px;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__event-time {
    font-size: clamp(16px, 1.28vw, 20px);
    line-height: 1.6;
}

[data-section="events"].inv-events--classic-columns .inv-events-classic__event-place,
[data-section="events"].inv-events--classic-columns .inv-events-classic__event-description {
    max-width: 22ch;
    margin-left: auto;
    margin-right: auto;
}

@media (max-width: 767.98px) {
    [data-section="events"].inv-events--classic-columns .inv-events-classic__same-grid {
        grid-template-columns: 1fr;
        gap: 0;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__meta-column,
    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-stack {
        max-width: 100%;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-stack {
        padding-top: 0;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__center-decor {
        min-height: 0;
        padding-top: 38px;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-title {
        max-width: 100%;
        letter-spacing: .18em;
        line-height: 1.45;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__address {
        max-width: 100%;
    }
}


/* BG_ITINERARIO_REFERENCIA_VISUAL_V2_20261101
   Itinerario principal / Classic Columns / una misma sede.
   Referencia aprobada: fecha+lugar izquierda, adorno, agenda derecha.
   No altera eventos adicionales ni otros formatos de itinerario.
   En versiones móviles conservamos la estructura responsiva anterior. */
@media (min-width: 768px) {
    [data-section="events"].inv-events--classic-columns:has(.inv-events-classic__surface--same) {
        padding-top: clamp(72px, 7.5vw, 110px);
        padding-bottom: clamp(48px, 5vw, 78px);
    }

    /* Respetar siempre el título configurado en el Builder y su separador.
       No se ocultan cuando todos los eventos comparten ubicación. */

    [data-section="events"].inv-events--classic-columns .inv-events-classic__surface--same {
        width: min(100%, 1220px);
        margin-top: clamp(36px, 4.2vw, 60px);
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__same-grid {
        grid-template-columns: minmax(0, 1.15fr) minmax(130px, .68fr) minmax(0, 1.22fr);
        gap: clamp(12px, 2.7vw, 42px);
        align-items: start;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__meta-column {
        justify-self: stretch;
        max-width: 420px;
        margin-inline: auto;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__label {
        font-size: clamp(16px, 1.6vw, 23px);
        line-height: 1.35;
        letter-spacing: .39em;
        margin-bottom: 5px;
        font-weight: 400;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__weekday,
    [data-section="events"].inv-events--classic-columns .inv-events-classic__date-text {
        font-size: clamp(18px, 1.95vw, 25px);
        line-height: 1.45;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__date-text {
        margin-top: 2px;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__short-rule {
        width: 64px;
        margin: clamp(26px, 3.3vw, 46px) auto;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__venue {
        font-size: var(--inv-event-title-size, clamp(20px, 2.2vw, 28px));
        line-height: 1.35;
        font-weight: 600;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__address {
        max-width: 29ch;
        font-size: clamp(18px, 2.05vw, 26px);
        line-height: 1.6;
        margin: 10px auto 0;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__action {
        margin-top: clamp(24px, 3.2vw, 38px);
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__action .inv-button {
        min-height: 52px;
        border-radius: 0;
        padding: 14px 26px;
        font-size: clamp(10px, .96vw, 13px);
        letter-spacing: .25em;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__center-decor {
        min-height: 0;
        align-self: start;
        align-items: flex-start;
        padding-top: clamp(5px, 1.6vw, 26px);
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__center-decor-image--desktop {
        width: min(100%, 200px);
        max-height: 270px;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-stack {
        width: 100%;
        max-width: 365px;
        justify-self: center;
        padding-top: clamp(5px, 1vw, 16px);
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-title {
        max-width: 21ch;
        font-size: var(--inv-event-title-size, clamp(20px, 2.2vw, 29px));
        font-weight: 400;
        letter-spacing: .29em;
        line-height: 1.33;
        overflow-wrap: normal;
        text-wrap: balance;
        order: 1;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-time {
        order: 2;
        font-size: clamp(18px, 1.88vw, 25px);
        line-height: 1.45;
        margin-top: 11px;
    }

    /* El divisor va después de la hora, no entre título y hora. */
    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-rule {
        order: 3;
        width: 64px;
        margin: clamp(24px, 2.7vw, 38px) auto 0;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-stack > .inv-events-classic__event:last-child .inv-events-classic__event-rule {
        display: none;
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__event--spaced {
        margin-top: clamp(23px, 2.9vw, 42px);
    }

    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-place,
    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-description {
        order: 4;
        max-width: 25ch;
        margin-inline: auto;
    }
}

/* BG_EVENT_TITLES_RESPECT_BUILDER_PX_20261101
   Event/venue title font sizes come from Builder settings, including 8-11px.
   Preserve the smaller-screen setting rather than inheriting desktop size. */
@media (max-width: 767.98px) {
    [data-section="events"].inv-events--classic-columns .inv-events-classic__event-title,
    [data-section="events"].inv-events--classic-columns .inv-events-classic__venue {
        font-size: var(--inv-event-mobile-title-size,
            var(--inv-event-title-size, clamp(15px, 4.8vw, 20px)));
    }
}
