/* Theme 08 v2 — Airy Mint Botanical */
html:has(> body.theme-thm08[data-theme-version="v2"]),
html:has(> body.theme-thm08[data-theme-version="v2"]) > body {
    inline-size: auto !important;
    max-inline-size: 100% !important;
    margin: 0;
}

body.theme-thm08[data-theme-version="v2"] {
    --thm08-paper: #f7fbf8;
    --thm08-paper-warm: #fcfdf9;
    --thm08-wash: #e6f2ec;
    --thm08-mist: #d3e7dd;
    --thm08-line: #c8dcd2;
    --thm08-sage: #7da995;
    --thm08-forest: #315f50;
    --thm08-ink: #1f4036;
    --thm08-muted: #40534c;
    --thm08-focus: #165f92;
    /* The couple's own fonts (custom font add-on) take over when set; see x-theme-custom-fonts. */
    --thm08-display: var(--invie-font-heading, "Cormorant Garamond"), Georgia, "Times New Roman", serif;
    --thm08-body: var(--invie-font-body, "Manrope"), system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    --theme-surface: var(--thm08-paper);
    --theme-surface-muted: var(--thm08-wash);
    --theme-text: var(--thm08-ink);
    --theme-text-muted: var(--thm08-muted);
    --theme-accent: var(--thm08-sage);
    --theme-accent-strong: var(--thm08-forest);
    --theme-accent-contrast: #fff;
    --theme-focus: var(--thm08-focus);
    --theme-font-display: var(--thm08-display);
    --theme-font-body: var(--thm08-body);
    --theme-motion-fast: 180ms;
    --theme-motion-normal: 420ms;
    min-width: 0;
    margin: 0;
    overflow-x: clip;
    background: var(--thm08-paper);
    color: var(--thm08-ink);
    font-family: var(--thm08-body);
    font-size: 16px;
    line-height: 1.7;
    text-rendering: optimizeLegibility;
}

body.theme-thm08[data-theme-version="v2"] *,
body.theme-thm08[data-theme-version="v2"] *::before,
body.theme-thm08[data-theme-version="v2"] *::after {
    box-sizing: border-box;
}

body.theme-thm08[data-theme-version="v2"] :where(h1, h2, h3, p, figure, blockquote) {
    margin-block-start: 0;
}

body.theme-thm08[data-theme-version="v2"] :where(h1, h2, h3) {
    color: var(--thm08-ink);
    font-family: var(--thm08-display);
    font-weight: 500;
    letter-spacing: -0.025em;
    line-height: 0.98;
    hyphens: none;
    overflow-wrap: normal;
    text-wrap: balance;
    word-break: normal;
}

body.theme-thm08[data-theme-version="v2"] :where(p, li, address, blockquote, figcaption, label) {
    overflow-wrap: anywhere;
    text-wrap: pretty;
}

body.theme-thm08[data-theme-version="v2"] :where(img, svg, video, iframe) {
    display: block;
    max-inline-size: 100%;
}

body.theme-thm08[data-theme-version="v2"] :where(a) {
    color: inherit;
    text-underline-offset: 0.22em;
}

body.theme-thm08[data-theme-version="v2"] :where(button, input, select, textarea) {
    border-radius: 0;
    color: inherit;
    font: inherit;
}

body.theme-thm08[data-theme-version="v2"] :where(button, a, input, select, textarea, summary):focus-visible {
    outline: 3px solid var(--thm08-focus) !important;
    outline-offset: 3px !important;
}

body.theme-thm08[data-theme-version="v2"] ::selection {
    background: var(--thm08-forest);
    color: #fff;
}

body.theme-thm08[data-theme-version="v2"]:not([data-theme-state="open"]) {
    overflow: hidden;
}

body.theme-thm08[data-theme-version="v2"][data-theme-state="open"] {
    overflow-y: auto;
}

.thm08-page {
    position: relative;
    width: 100%;
    min-width: 0;
    min-height: 100dvh;
    overflow-x: clip;
    background:
        radial-gradient(circle at 104% 6%, rgba(125, 169, 149, 0.13), transparent 25rem),
        var(--thm08-paper);
    container: thm08-page / inline-size;
    isolation: isolate;
}

.thm08-invitation {
    position: relative;
    z-index: 1;
    width: 100%;
    min-width: 0;
    background: var(--thm08-paper);
    opacity: 1;
}

.thm08-invitation[aria-hidden="true"] {
    visibility: visible !important;
}

.thm08-section {
    position: relative;
    width: 100%;
    min-width: 0;
    padding: clamp(4.75rem, 14vw, 7.25rem) clamp(1.25rem, 6vw, 2.5rem);
    overflow: clip;
    background: var(--thm08-paper);
}

.thm08-kicker {
    margin: 0 0 0.9rem;
    color: var(--thm08-forest);
    font-family: var(--thm08-body);
    font-size: clamp(0.75rem, 2.8vw, 0.8125rem);
    font-weight: 750;
    letter-spacing: 0.16em;
    line-height: 1.5;
    text-transform: uppercase;
}

.thm08-heading {
    position: relative;
    z-index: 2;
    max-width: 42rem;
    margin: 0 auto clamp(2.5rem, 9vw, 4rem);
}

.thm08-heading h2 {
    margin: 0;
    font-size: clamp(2.55rem, 11vw, 4.5rem);
}

.thm08-heading > p:last-child {
    max-width: 39rem;
    margin: 1.25rem 0 0;
    color: var(--thm08-muted);
    font-size: clamp(0.9375rem, 3.3vw, 1rem);
    line-height: 1.85;
}

.thm08-heading--center {
    text-align: center;
}

.thm08-heading--center > p:last-child {
    margin-inline: auto;
}

.thm08-couple .thm08-heading > h2 + p {
    margin-top: 1.25rem;
}

.thm08-button {
    display: inline-flex;
    min-width: 44px;
    min-height: 48px;
    align-items: center;
    justify-content: center;
    gap: 0.8rem;
    padding: 0.8rem 1.25rem;
    border: 1px solid var(--thm08-forest);
    border-radius: 999px;
    cursor: pointer;
    font-family: var(--thm08-body);
    font-size: 0.76rem;
    font-weight: 750;
    letter-spacing: 0.11em;
    line-height: 1.2;
    text-align: center;
    text-decoration: none;
    text-transform: uppercase;
    transition: color 180ms ease, background-color 180ms ease, border-color 180ms ease, transform 180ms ease;
}

.thm08-button:hover {
    transform: translateY(-2px);
}

.thm08-button--solid {
    border-color: var(--thm08-forest);
    background: var(--thm08-forest);
    color: #fff;
}

body.theme-thm08[data-theme-version="v2"] .thm08-button--solid {
    color: #fff;
}

.thm08-button--outline {
    background: transparent;
    color: var(--thm08-forest);
}

.thm08-text-link {
    display: inline-flex;
    min-height: 44px;
    align-items: center;
    gap: 0.5rem;
    color: var(--thm08-forest);
    font-size: 0.8125rem;
    font-weight: 750;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

/* Opening cover */
.thm08-cover {
    position: fixed;
    z-index: 100;
    inset: 0;
    display: grid;
    width: 100%;
    min-width: 0;
    height: 100dvh;
    min-height: 35.5rem;
    overflow: hidden;
    background: var(--thm08-paper-warm);
    transition: transform 880ms cubic-bezier(0.76, 0, 0.24, 1), visibility 0s linear 900ms;
}

.theme-thm08[data-theme-state="open"] .thm08-cover {
    visibility: hidden;
    transform: translateY(-104%);
}

.thm08-cover__media {
    position: absolute;
    inset: 36% 0 0;
    margin: 0;
    overflow: hidden;
    background: var(--thm08-mist);
}

.thm08-cover__media::before,
.thm08-cover__media::after {
    position: absolute;
    z-index: 1;
    inset: 0;
    content: "";
    pointer-events: none;
}

.thm08-cover__media::before {
    background: linear-gradient(180deg, var(--thm08-paper-warm) 0%, rgba(247, 251, 248, 0.38) 22%, transparent 58%);
}

.thm08-cover__media::after {
    background: linear-gradient(180deg, transparent 45%, rgba(20, 58, 47, 0.24));
}

.thm08-cover__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    filter: saturate(0.72) brightness(1.04) contrast(0.94);
    scale: 1.01;
}

.thm08-cover__botanical span {
    position: absolute;
    z-index: 2;
    width: clamp(5.5rem, 30vw, 9rem);
    aspect-ratio: 0.72;
    opacity: 0.42;
    background: url("../img/decoration/flower-green-right.png") center / contain no-repeat;
    pointer-events: none;
}

.thm08-cover__botanical span:first-child {
    top: -1rem;
    right: -1.3rem;
    rotate: -12deg;
}

.thm08-cover__botanical span:last-child {
    bottom: 8%;
    left: -2.25rem;
    background-image: url("../img/decoration/flower-green-left.png");
    rotate: 10deg;
}

.thm08-cover__copy {
    position: relative;
    z-index: 3;
    display: grid;
    width: 100%;
    height: 100%;
    min-height: 0;
    grid-template-rows: auto 1fr auto;
    padding: max(1.2rem, env(safe-area-inset-top)) clamp(1.2rem, 6vw, 2rem) max(1.2rem, env(safe-area-inset-bottom));
}

.thm08-cover__crest {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.65rem;
    color: var(--thm08-forest);
    font-family: var(--thm08-display);
    font-size: 1.08rem;
    letter-spacing: 0.12em;
}

.thm08-cover__crest i {
    width: 2.1rem;
    height: 1px;
    background: var(--thm08-sage);
}

.thm08-cover__title-block {
    align-self: start;
    width: min(100%, 34rem);
    margin: clamp(2.2rem, 8vh, 5rem) auto 0;
    text-align: center;
}

.thm08-cover__title-block h1 {
    display: flex;
    min-width: 0;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: center;
    gap: 0.08em 0.22em;
    margin: 0;
    font-size: clamp(3rem, 15vw, 6.2rem);
    line-height: 0.82;
}

.thm08-cover__title-block h1 span {
    min-width: 0;
    max-width: 100%;
    overflow-wrap: anywhere;
}

.thm08-cover__title-block h1 i {
    color: var(--thm08-sage);
    font-size: 0.54em;
    font-weight: 400;
}

.thm08-cover--names-long .thm08-cover__title-block h1 {
    font-size: clamp(2.4rem, 12vw, 5.2rem);
}

.thm08-cover--names-xlong .thm08-cover__title-block h1 {
    font-size: clamp(2rem, 9.5vw, 4.2rem);
    line-height: 0.94;
}

.thm08-cover__title-block time {
    display: block;
    margin-top: 1.1rem;
    color: var(--thm08-muted);
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.16em;
    text-transform: uppercase;
}

.thm08-cover__invitation {
    width: min(100%, 33rem);
    margin-inline: auto;
    padding: 1rem;
    border: 1px solid rgba(200, 220, 210, 0.76);
    border-radius: 1.4rem;
    background: rgba(247, 251, 248, 0.88);
    box-shadow: 0 1rem 3rem rgba(31, 64, 54, 0.14);
    backdrop-filter: blur(14px);
}

.thm08-cover__guest {
    min-width: 0;
    margin-bottom: 0.8rem;
    padding: 0.2rem 0.2rem 0.75rem;
    border-bottom: 1px solid var(--thm08-line);
}

.thm08-cover__guest span,
.thm08-cover__guest strong {
    display: block;
}

.thm08-cover__guest span {
    color: var(--thm08-muted);
    font-size: 0.75rem;
    letter-spacing: 0.08em;
}

.thm08-cover__guest strong {
    margin-top: 0.2rem;
    overflow-wrap: anywhere;
    font-family: var(--thm08-display);
    font-size: clamp(1.3rem, 5vw, 1.7rem);
    font-weight: 500;
    line-height: 1.1;
}

.thm08-cover__invitation .thm08-button {
    width: 100%;
}

/* Introduction */
.thm08-intro {
    min-height: 100dvh;
    padding-top: 0;
    background:
        linear-gradient(180deg, rgba(255, 255, 255, 0.34), transparent 35%),
        url("../img/decoration/watercolor-section-1.jpg") top center / 100% auto no-repeat,
        var(--thm08-paper);
}

.thm08-nav {
    position: relative;
    z-index: 4;
    display: flex;
    min-height: 4.5rem;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    margin-inline: calc(clamp(1.25rem, 6vw, 2.5rem) * -1);
    padding: 0.8rem clamp(1.25rem, 6vw, 2.5rem);
    border-bottom: 1px solid rgba(49, 95, 80, 0.13);
    background: rgba(247, 251, 248, 0.82);
    backdrop-filter: blur(12px);
}

.thm08-nav__brand {
    display: inline-flex;
    min-width: 44px;
    min-height: 44px;
    align-items: center;
    gap: 0.55rem;
    text-decoration: none;
}

.thm08-nav__brand span {
    color: var(--thm08-forest);
    font-family: var(--thm08-display);
    font-size: 1.55rem;
    line-height: 1;
}

.thm08-nav__brand strong {
    color: var(--thm08-muted);
    font-size: 0.75rem;
    letter-spacing: 0.16em;
}

.thm08-nav__links {
    display: none;
}

.thm08-intro__botanical span {
    position: absolute;
    top: 4.8rem;
    right: -2rem;
    width: 10rem;
    height: 13rem;
    opacity: 0.13;
    background: url("../img/decoration/flower-green-left.png") center / contain no-repeat;
    rotate: -24deg;
}

.thm08-intro__editorial {
    position: relative;
    z-index: 2;
    display: grid;
    gap: 2rem;
    padding-top: clamp(4.5rem, 18vw, 8rem);
}

.thm08-intro__heading h2 {
    max-width: 11ch;
    margin: 0;
    font-size: clamp(2.9rem, 12vw, 5.5rem);
}

.thm08-intro__statement {
    max-width: 34rem;
    margin: 0;
    color: var(--thm08-muted);
    font-size: clamp(0.95rem, 3.8vw, 1.08rem);
    line-height: 1.9;
}

.thm08-intro__date-card {
    display: grid;
    width: min(100%, 22rem);
    grid-template-columns: auto 1fr;
    gap: 0.75rem 1.3rem;
    align-items: center;
    padding: 1.3rem;
    border: 1px solid var(--thm08-line);
    border-radius: 1.25rem;
    background: rgba(252, 253, 249, 0.74);
}

.thm08-intro__date-card > span {
    grid-column: 1 / -1;
    color: var(--thm08-forest);
    font-size: 0.75rem;
    font-weight: 750;
    letter-spacing: 0.14em;
    text-transform: uppercase;
}

.thm08-intro__date-card time {
    display: grid;
    grid-template-columns: auto 1fr;
    align-items: center;
    column-gap: 0.7rem;
}

.thm08-intro__date-card time strong {
    grid-row: 1 / 3;
    color: var(--thm08-forest);
    font-family: var(--thm08-display);
    font-size: 3.8rem;
    font-weight: 500;
    line-height: 0.8;
}

.thm08-intro__date-card time span,
.thm08-intro__date-card time small {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    line-height: 1.3;
}

.thm08-intro__date-card p {
    margin: 0;
    color: var(--thm08-muted);
    font-size: 0.8rem;
}

.thm08-countdown {
    position: relative;
    z-index: 2;
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-top: clamp(3.2rem, 12vw, 5.5rem);
    border-block: 1px solid var(--thm08-line);
}

.thm08-countdown > p {
    grid-column: 1 / -1;
    margin: 0;
    padding: 0.85rem 0;
    border-bottom: 1px solid var(--thm08-line);
    text-align: center;
}

.thm08-countdown > div {
    min-width: 0;
    padding: 1rem 0.25rem;
    text-align: center;
}

.thm08-countdown > div + div {
    border-left: 1px solid var(--thm08-line);
}

.thm08-countdown strong,
.thm08-countdown span {
    display: block;
}

.thm08-countdown strong {
    color: var(--thm08-forest);
    font-family: var(--thm08-display);
    font-size: clamp(1.8rem, 8vw, 2.5rem);
    font-weight: 500;
    line-height: 1;
}

.thm08-countdown span {
    margin-top: 0.4rem;
    color: var(--thm08-muted);
    font-size: 0.75rem;
    letter-spacing: 0.09em;
    text-transform: uppercase;
}

/* Couple */
.thm08-couple {
    background:
        radial-gradient(circle at 0 32%, rgba(211, 231, 221, 0.62), transparent 19rem),
        var(--thm08-paper-warm);
}

.thm08-couple::before {
    position: absolute;
    top: 1.5rem;
    left: -2.8rem;
    width: 9.5rem;
    height: 13rem;
    opacity: 0.16;
    background: url("../img/decoration/flower-green-right.png") center / contain no-repeat;
    content: "";
    rotate: 16deg;
}

.thm08-couple__profiles {
    position: relative;
    z-index: 2;
    display: grid;
    gap: clamp(3.5rem, 13vw, 5.5rem);
    max-width: 62rem;
    margin-inline: auto;
}

.thm08-profile {
    display: grid;
    /* One track as wide as the profile, so a long name never widens its portrait. */
    grid-template-columns: minmax(0, 1fr);
    min-width: 0;
    gap: 1.5rem;
}

.thm08-profile__media {
    position: relative;
    width: min(100%, 23rem);
    aspect-ratio: 4 / 5;
    margin: 0 auto;
    overflow: visible;
    background: var(--thm08-wash);
}

.thm08-profile__media::before {
    position: absolute;
    z-index: -1;
    inset: -0.7rem 0.7rem 0.7rem -0.7rem;
    border: 1px solid var(--thm08-line);
    content: "";
}

.thm08-profile__media img,
.thm08-profile__monogram {
    width: 100%;
    height: 100%;
}

.thm08-profile__media img {
    object-fit: cover;
    filter: saturate(0.72) brightness(1.04) contrast(0.96);
}

.thm08-profile__monogram {
    display: grid;
    place-items: center;
    background:
        url("../img/decoration/watercolor-header.png") top center / cover no-repeat,
        var(--thm08-wash);
    color: var(--thm08-forest);
    font-family: var(--thm08-display);
    font-size: clamp(6rem, 28vw, 10rem);
    line-height: 1;
}

.thm08-profile__leaf {
    position: absolute;
    right: -1.9rem;
    bottom: -2.2rem;
    width: 6.7rem;
    height: 8.5rem;
    opacity: 0.52;
    background: url("../img/decoration/flower-green-right.png") center / contain no-repeat;
    transform-origin: bottom right;
    rotate: 10deg;
    pointer-events: none;
}

.thm08-profile:nth-child(even) .thm08-profile__leaf {
    right: auto;
    left: -1.7rem;
    background-image: url("../img/decoration/flower-green-left.png");
    rotate: -8deg;
}

.thm08-profile__copy {
    min-width: 0;
    max-width: 31rem;
    margin-inline: auto;
    text-align: center;
}

.thm08-profile__copy h3 {
    max-width: 100%;
    margin: 0;
    overflow-wrap: anywhere;
    font-size: clamp(2.55rem, 11.5vw, 4.4rem);
    line-height: 0.95;
}

.thm08-profile--name-medium .thm08-profile__copy h3 {
    font-size: clamp(2.2rem, 9.7vw, 3.8rem);
}

.thm08-profile--name-long .thm08-profile__copy h3 {
    font-size: clamp(1.9rem, 8.4vw, 3.25rem);
    line-height: 1;
}

.thm08-profile--name-xlong .thm08-profile__copy h3 {
    font-size: clamp(1.65rem, 7vw, 2.85rem);
    line-height: 1.06;
}

.thm08-profile__copy > p:not(.thm08-kicker) {
    max-width: 30rem;
    margin: 1rem auto 0;
    color: var(--thm08-muted);
    font-size: 0.9375rem;
}

.thm08-profile__copy .thm08-text-link {
    margin-top: 1rem;
}

/* Events */
.thm08-events {
    background:
        linear-gradient(rgba(230, 242, 236, 0.88), rgba(230, 242, 236, 0.88)),
        url("../img/decoration/watercolor-section-1.jpg") center / cover,
        var(--thm08-wash);
}

.thm08-events__ledger {
    display: grid;
    max-width: 66rem;
    gap: 1.25rem;
    margin-inline: auto;
}

.thm08-event {
    position: relative;
    display: grid;
    min-width: 0;
    grid-template-columns: 4.9rem minmax(0, 1fr);
    gap: 0 1rem;
    padding: 1.15rem;
    border: 1px solid rgba(49, 95, 80, 0.15);
    border-radius: 1.35rem;
    background: rgba(252, 253, 249, 0.86);
    box-shadow: 0 1rem 2.8rem rgba(49, 95, 80, 0.07);
}

.thm08-event__date {
    min-width: 0;
    padding-right: 0.85rem;
    border-right: 1px solid var(--thm08-line);
    text-align: center;
}

.thm08-event__date time,
.thm08-event__date time > * {
    display: block;
}

.thm08-event__date span,
.thm08-event__date small {
    color: var(--thm08-muted);
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    line-height: 1.35;
}

.thm08-event__date strong {
    margin: 0.35rem 0;
    color: var(--thm08-forest);
    font-family: var(--thm08-display);
    font-size: 3rem;
    font-weight: 500;
    line-height: 0.8;
}

.thm08-event__stem {
    display: none;
}

.thm08-event__copy {
    min-width: 0;
}

.thm08-event__copy .thm08-kicker {
    margin-bottom: 0.45rem;
    font-size: 0.75rem;
}

.thm08-event__copy h3 {
    margin: 0;
    overflow-wrap: anywhere;
    font-size: clamp(2rem, 8vw, 3rem);
    line-height: 1;
}

.thm08-event__copy > time,
.thm08-event__copy > strong,
.thm08-event__copy > address {
    display: block;
    margin-top: 0.65rem;
    font-size: 0.78rem;
    font-style: normal;
    line-height: 1.65;
}

.thm08-event__copy > strong {
    color: var(--thm08-forest);
}

.thm08-event__copy > address {
    color: var(--thm08-muted);
}

.thm08-event__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem 0.85rem;
    margin-top: 1rem;
}

.thm08-event__actions .thm08-button {
    min-height: 44px;
    padding: 0.65rem 0.95rem;
    font-size: 0.8125rem;
}

.thm08-event__map {
    grid-column: 1 / -1;
    margin-top: 1rem;
    border-top: 1px solid var(--thm08-line);
}

.thm08-event__map summary {
    min-height: 44px;
    padding: 0.8rem 0;
    cursor: pointer;
    color: var(--thm08-forest);
    font-size: 0.8125rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.thm08-event__map iframe {
    width: 100%;
    min-height: 15rem;
    border: 0;
    border-radius: 0.9rem;
}

/* Dress code */
.thm08-dresscode {
    display: grid;
    gap: 2.5rem;
    background: var(--thm08-paper-warm);
}

.thm08-dresscode__copy {
    max-width: 37rem;
}

.thm08-dresscode__copy h2,
.thm08-livestream h2,
.thm08-rsvp h2,
.thm08-gift h2,
.thm08-health h2 {
    margin: 0;
    font-size: clamp(2.6rem, 11vw, 4.4rem);
}

.thm08-dresscode__copy > p:not(.thm08-kicker),
.thm08-livestream__headline > div > p:last-child,
.thm08-rsvp__intro > p:not(.thm08-kicker),
.thm08-gift__heading > p:not(.thm08-kicker),
.thm08-health__copy > p:not(.thm08-kicker) {
    margin: 1.15rem 0 0;
    color: var(--thm08-muted);
    font-size: 0.9375rem;
}

.thm08-dresscode__copy small {
    display: block;
    margin-top: 1rem;
    color: var(--thm08-forest);
    font-size: 0.75rem;
    font-weight: 650;
}

.thm08-dresscode__palette {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0;
    margin: 0;
    padding: 0;
    border: 1px solid var(--thm08-line);
    list-style: none;
}

.thm08-dresscode__swatch {
    min-width: 0;
    padding: 1rem;
}

.thm08-dresscode__swatch:nth-child(even) {
    border-left: 1px solid var(--thm08-line);
}

.thm08-dresscode__swatch:nth-child(n + 3) {
    border-top: 1px solid var(--thm08-line);
}

.thm08-dresscode__swatch > span {
    display: block;
    width: 100%;
    aspect-ratio: 1.45;
    margin-bottom: 0.75rem;
    border-radius: 50% 50% 46% 54% / 56% 44% 56% 44%;
    background: var(--thm08-swatch);
    box-shadow: inset 0 0 0 1px rgba(31, 64, 54, 0.12);
}

.thm08-dresscode__swatch strong,
.thm08-dresscode__swatch small {
    display: block;
    overflow-wrap: anywhere;
}

.thm08-dresscode__swatch strong {
    font-family: var(--thm08-display);
    font-size: 1.15rem;
    font-weight: 600;
    line-height: 1.1;
}

.thm08-dresscode__swatch small {
    margin-top: 0.35rem;
    color: var(--thm08-muted);
    font-size: 0.75rem;
    letter-spacing: 0.08em;
}

/* Livestream */
.thm08-livestream {
    display: grid;
    gap: 2rem;
    background:
        radial-gradient(circle at 105% 0, rgba(211, 231, 221, 0.18), transparent 17rem),
        var(--thm08-forest);
    color: #f6fbf8;
}

.thm08-livestream :where(h2, .thm08-kicker) {
    color: #f6fbf8;
}

body.theme-thm08[data-theme-version="v2"] .thm08-livestream h2,
body.theme-thm08[data-theme-version="v2"] .thm08-livestream .thm08-kicker,
body.theme-thm08[data-theme-version="v2"] .thm08-gift h2,
body.theme-thm08[data-theme-version="v2"] .thm08-gift .thm08-kicker {
    color: #f6fbf8;
}

.thm08-livestream__headline {
    display: grid;
    gap: 1.25rem;
}

.thm08-livestream__headline > div > p:last-child {
    color: rgba(246, 251, 248, 0.86);
}

.thm08-livestream__signal {
    display: flex;
    width: 4.75rem;
    height: 4.75rem;
    align-items: flex-end;
    justify-content: center;
    gap: 0.3rem;
    padding-bottom: 1.25rem;
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 50%;
}

.thm08-livestream__signal i {
    display: block;
    width: 0.22rem;
    border-radius: 999px;
    background: var(--thm08-mist);
}

.thm08-livestream__signal i:nth-child(1) { height: 0.65rem; }
.thm08-livestream__signal i:nth-child(2) { height: 1.2rem; }
.thm08-livestream__signal i:nth-child(3) { height: 1.75rem; }

.thm08-livestream__access {
    padding: 1.25rem;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: 1.25rem;
    background: rgba(247, 251, 248, 0.08);
}

.thm08-livestream__access dl {
    margin: 0 0 1rem;
}

.thm08-livestream__access dl > div {
    display: grid;
    grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
    gap: 0.75rem;
    padding: 0.7rem 0;
    border-bottom: 1px solid rgba(255, 255, 255, 0.14);
}

.thm08-livestream__access dt,
.thm08-livestream__access dd {
    min-width: 0;
    margin: 0;
    overflow-wrap: anywhere;
    font-size: 0.75rem;
}

.thm08-livestream__access dt {
    color: rgba(255, 255, 255, 0.62);
}

.thm08-livestream__access p {
    margin: 0;
    color: rgba(255, 255, 255, 0.72);
    font-size: 0.82rem;
}

.thm08-livestream__access .thm08-button {
    width: 100%;
    border-color: var(--thm08-paper);
    background: var(--thm08-paper);
    color: var(--thm08-forest);
}

body.theme-thm08[data-theme-version="v2"] .thm08-livestream__access .thm08-button {
    color: var(--thm08-forest);
}

/* Quote */
.thm08-quote {
    display: grid;
    min-height: min(44rem, 82dvh);
    place-items: center;
    padding-block: clamp(6rem, 22vw, 10rem);
    background:
        radial-gradient(circle at 50% 44%, rgba(211, 231, 221, 0.72), transparent 18rem),
        var(--thm08-paper-warm);
    text-align: center;
}

.thm08-quote__sprig {
    position: absolute;
    top: 2rem;
    left: 50%;
    width: 1px;
    height: 3.5rem;
    background: var(--thm08-line);
}

.thm08-quote__sprig span {
    position: absolute;
    top: 2.4rem;
    left: 50%;
    width: 4.8rem;
    height: 6rem;
    opacity: 0.22;
    background: url("../img/decoration/flower-green-right.png") center / contain no-repeat;
    translate: -50% 0;
    rotate: 22deg;
}

.thm08-quote blockquote {
    position: relative;
    z-index: 2;
    width: min(100%, 46rem);
    margin: 0;
    padding: clamp(2rem, 7vw, 3rem) 0;
    border-block: 1px solid var(--thm08-line);
}

.thm08-quote__mark {
    display: block;
    height: 2rem;
    color: var(--thm08-sage);
    font-family: var(--thm08-display);
    font-size: 5rem;
    line-height: 0.75;
}

.thm08-quote blockquote p {
    max-width: 48ch;
    margin: 0 auto;
    font-family: var(--thm08-display);
    font-size: clamp(1.375rem, 1.2rem + 0.8vw, 1.875rem);
    font-style: italic;
    font-weight: 500;
    letter-spacing: -0.01em;
    line-height: 1.5;
}

.thm08-quote cite {
    display: block;
    margin-top: 1.6rem;
    color: var(--thm08-ink);
    font-family: var(--thm08-body);
    font-size: 0.75rem;
    font-style: normal;
    font-weight: 750;
    letter-spacing: 0.15em;
    text-transform: uppercase;
}

/* Story */
.thm08-story {
    background:
        linear-gradient(180deg, rgba(230, 242, 236, 0.42), transparent 20rem),
        var(--thm08-paper);
}

.thm08-story__timeline {
    position: relative;
    display: grid;
    max-width: 62rem;
    gap: 2.75rem;
    margin-inline: auto;
}

.thm08-story__timeline::before {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0.45rem;
    width: 1px;
    background: var(--thm08-line);
    content: "";
}

.thm08-story-card {
    position: relative;
    display: grid;
    min-width: 0;
    gap: 1rem;
    padding-left: 2.2rem;
}

.thm08-story-card__node {
    position: absolute;
    z-index: 2;
    top: 0.3rem;
    left: 0;
    display: grid;
    width: 0.95rem;
    height: 0.95rem;
    place-items: center;
    border: 1px solid var(--thm08-sage);
    border-radius: 50%;
    background: var(--thm08-paper);
}

.thm08-story-card__node span {
    width: 0.35rem;
    height: 0.35rem;
    border-radius: 50%;
    background: var(--thm08-forest);
}

.thm08-story-card__media {
    width: 100%;
    aspect-ratio: 4 / 3;
    margin: 0;
    overflow: hidden;
    border-radius: 50% 50% 1.2rem 1.2rem / 2.5rem 2.5rem 1.2rem 1.2rem;
    background: var(--thm08-wash);
}

.thm08-story-card__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    filter: saturate(0.76) contrast(0.96);
}

.thm08-story-card__copy {
    min-width: 0;
    padding-bottom: 0.4rem;
}

.thm08-story-card__copy .thm08-kicker {
    margin-bottom: 0.35rem;
}

.thm08-story-card__copy time {
    display: block;
    margin-bottom: 0.55rem;
    color: var(--thm08-muted);
    font-size: 0.75rem;
    font-weight: 650;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.thm08-story-card__copy h3 {
    margin: 0;
    font-size: clamp(2rem, 8vw, 3rem);
}

.thm08-story-card__copy > p:last-child {
    margin: 0.85rem 0 0;
    color: var(--thm08-muted);
    font-size: 0.9375rem;
    line-height: 1.8;
}

.thm08-story-card--text-only .thm08-story-card__copy {
    padding: 1.25rem;
    border: 1px solid var(--thm08-line);
    border-radius: 1.1rem;
    background: var(--thm08-paper-warm);
}

/* Gallery */
/* Rows come from the shared gallery layout in theme-system.css; the couple's
   column choice caps a row. */
.thm08-gallery {
    --theme-gallery-gap: 0.6rem;
    background: var(--thm08-paper-warm);
}

.thm08-gallery__grid {
    max-width: 68rem;
    margin-inline: auto;
}

.thm08-gallery__item {
    position: relative;
    min-width: 0;
    padding: 0;
    overflow: hidden;
    border: 0;
    border-radius: 0.9rem;
    background: var(--thm08-wash);
    cursor: zoom-in;
}

.thm08-gallery__item img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    filter: saturate(0.78) brightness(1.01);
    transition: filter 260ms ease, scale 600ms cubic-bezier(0.2, 0.8, 0.2, 1);
}

.thm08-gallery__item:hover img,
.thm08-gallery__item:focus-visible img {
    filter: saturate(0.92);
    scale: 1.035;
}

.thm08-gallery__item > span {
    position: absolute;
    right: 0.45rem;
    bottom: 0.45rem;
    display: grid;
    min-width: 1.8rem;
    min-height: 1.8rem;
    place-items: center;
    border-radius: 50%;
    background: rgba(247, 251, 248, 0.9);
    color: var(--thm08-forest);
    font-size: 0.75rem;
    font-weight: 750;
}

.thm08-gallery-dialog {
    width: min(94vw, 62rem);
    max-width: 62rem;
    height: min(90dvh, 50rem);
    max-height: 90dvh;
    margin: auto;
    padding: 0;
    overflow: hidden;
    border: 0;
    border-radius: 1rem;
    background: #10241d;
    color: #fff;
}

.thm08-gallery-dialog::backdrop {
    background: rgba(11, 26, 21, 0.82);
    backdrop-filter: blur(8px);
}

.thm08-gallery-dialog[data-gallery-fallback] {
    box-shadow: 0 0 0 100vmax rgba(11, 26, 21, 0.82);
}

.thm08-gallery-dialog[open] {
    display: grid;
    grid-template-rows: auto minmax(0, 1fr) auto;
}

.thm08-gallery-dialog__bar,
.thm08-gallery-dialog__controls {
    display: flex;
    min-width: 0;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    padding: 0.65rem;
}

.thm08-gallery-dialog__bar p {
    margin: 0;
    padding-left: 0.45rem;
    font-size: 0.72rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.thm08-gallery-dialog button {
    min-width: 44px;
    min-height: 44px;
    border: 1px solid rgba(255, 255, 255, 0.24);
    background: transparent;
    color: #fff;
    cursor: pointer;
}

.thm08-gallery-dialog__bar button {
    border-radius: 50%;
    font-size: 1.35rem;
}

.thm08-gallery-dialog figure {
    display: grid;
    grid-template-rows: minmax(0, 1fr);
    min-width: 0;
    min-height: 0;
    place-items: center;
    margin: 0;
    background: #09130f;
}

.thm08-gallery-dialog figure img {
    min-height: 0;
    min-width: 0;
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.thm08-gallery-dialog__controls button {
    padding: 0.55rem 0.75rem;
    font-size: 0.75rem;
}

.thm08-gallery-dialog__controls > span {
    flex: 0 0 auto;
    font-size: 0.75rem;
}

/* RSVP and shared forms */
.thm08-rsvp {
    display: grid;
    gap: 2rem;
    background:
        radial-gradient(circle at 96% 8%, rgba(125, 169, 149, 0.2), transparent 17rem),
        var(--thm08-wash);
}

.thm08-rsvp__intro {
    position: relative;
    min-width: 0;
}

.thm08-rsvp__intro small {
    display: block;
    margin-top: 0.9rem;
    color: var(--thm08-forest);
    font-size: 0.75rem;
    font-weight: 650;
}

.thm08-rsvp__sprig {
    width: 7rem;
    height: 8.5rem;
    margin-top: 1.5rem;
    opacity: 0.42;
    background: url("../img/decoration/flower-green-right.png") center / contain no-repeat;
    rotate: 11deg;
}

.thm08-form {
    display: grid;
    min-width: 0;
    gap: 1.15rem;
    padding: clamp(1.2rem, 5vw, 1.75rem);
    border: 1px solid rgba(49, 95, 80, 0.14);
    border-radius: 1.35rem;
    background: rgba(252, 253, 249, 0.9);
    box-shadow: 0 1.2rem 3.5rem rgba(49, 95, 80, 0.08);
}

.thm08-field {
    display: grid;
    min-width: 0;
    gap: 0.35rem;
}

.thm08-field label {
    color: var(--thm08-forest);
    font-size: 0.75rem;
    font-weight: 750;
    letter-spacing: 0.1em;
    text-transform: uppercase;
}

.thm08-field :where(input, select, textarea) {
    width: 100%;
    min-width: 0;
    min-height: 48px;
    padding: 0.75rem 0;
    border: 0;
    border-bottom: 1px solid var(--thm08-line);
    background: transparent;
    color: var(--thm08-ink);
    font-size: 0.9rem;
}

.thm08-field textarea {
    min-height: 7rem;
    resize: vertical;
}

.thm08-field :where(input, textarea)::placeholder {
    color: #82948d;
    opacity: 1;
}

.thm08-form .thm08-button {
    width: 100%;
    margin-top: 0.25rem;
}

.thm08-form__status {
    min-height: 1.5em;
    margin: 0;
    color: var(--thm08-forest);
    font-size: 0.74rem;
}

.thm08-form__status[data-status="error"] {
    color: #9a382f;
}

/* Wishes */
.thm08-wishes {
    background:
        linear-gradient(180deg, var(--thm08-paper-warm), rgba(230, 242, 236, 0.55)),
        var(--thm08-paper);
}

.thm08-wishes__featured {
    display: flex;
    max-width: 68rem;
    gap: 0.9rem;
    margin: 0 auto 3rem;
    padding: 0.25rem 0.25rem 1rem;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    scrollbar-color: var(--thm08-sage) transparent;
}

.thm08-wish-card {
    display: grid;
    min-width: min(82%, 20rem);
    min-height: 20rem;
    align-content: space-between;
    gap: 2rem;
    margin: 0;
    padding: 1.4rem;
    border: 1px solid var(--thm08-line);
    border-radius: 45% 45% 1.2rem 1.2rem / 2.3rem 2.3rem 1.2rem 1.2rem;
    background: rgba(252, 253, 249, 0.84);
    scroll-snap-align: start;
}

.thm08-wish-card blockquote {
    margin: 0;
    font-family: var(--thm08-display);
    font-size: clamp(1.55rem, 6.7vw, 2.2rem);
    font-style: italic;
    line-height: 1.25;
}

.thm08-wish-card figcaption {
    display: flex;
    min-width: 0;
    align-items: center;
    gap: 0.7rem;
}

.thm08-wish-card figcaption > img,
.thm08-wish-card__initial {
    display: grid;
    width: 2.7rem;
    height: 2.7rem;
    flex: 0 0 auto;
    place-items: center;
    border-radius: 50%;
    background: var(--thm08-mist);
    object-fit: cover;
}

.thm08-wish-card figcaption > span:last-child {
    min-width: 0;
}

.thm08-wish-card figcaption strong,
.thm08-wish-card figcaption small {
    display: block;
    overflow-wrap: anywhere;
}

.thm08-wish-card figcaption strong {
    color: var(--thm08-forest);
    font-size: 0.75rem;
}

.thm08-wish-card figcaption small {
    color: var(--thm08-muted);
    font-size: 0.75rem;
}

.thm08-wishes__guestbook {
    display: grid;
    max-width: 68rem;
    gap: 1.25rem;
    margin-inline: auto;
}

.thm08-wishes__messages {
    min-width: 0;
    padding: 1.25rem;
    border: 1px solid var(--thm08-line);
    border-radius: 1.35rem;
    background: rgba(247, 251, 248, 0.72);
}

.thm08-wishes__messages-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
    border-bottom: 1px solid var(--thm08-line);
}

.thm08-wishes__messages-head .thm08-text-link {
    border: 0;
    background: transparent;
    cursor: pointer;
}

.thm08-wishes__messages ul {
    display: grid;
    gap: 0;
    margin: 0;
    padding: 0;
    list-style: none;
}

.thm08-wishes__messages li {
    display: grid;
    min-width: 0;
    grid-template-columns: 2rem minmax(0, 1fr);
    gap: 0.65rem;
    padding: 1rem 0;
    border-bottom: 1px solid var(--thm08-line);
}

.thm08-wishes__messages li > span {
    color: var(--thm08-sage);
    font-family: var(--thm08-display);
    font-size: 1.15rem;
}

.thm08-wishes__messages li strong,
.thm08-wishes__messages li time,
.thm08-wishes__messages li p {
    display: block;
}

.thm08-wishes__messages li strong {
    font-size: 0.75rem;
}

.thm08-wishes__messages li time {
    color: var(--thm08-muted);
    font-size: 0.75rem;
}

.thm08-wishes__messages li p {
    margin: 0.35rem 0 0;
    color: var(--thm08-muted);
    font-size: 0.9375rem;
}

.thm08-wishes__empty {
    display: block !important;
    color: var(--thm08-muted);
    font-size: 0.78rem;
}

/* Gift */
.thm08-gift {
    display: grid;
    gap: 2.5rem;
    background: var(--thm08-forest);
    color: #f6fbf8;
}

.thm08-gift :where(h2, .thm08-kicker) {
    color: #f6fbf8;
}

.thm08-gift__heading {
    position: relative;
    min-width: 0;
}

.thm08-gift__heading > p:not(.thm08-kicker) {
    color: rgba(246, 251, 248, 0.86);
}

.thm08-gift__leaf {
    display: block;
    width: 6.5rem;
    height: 8rem;
    margin-top: 1.4rem;
    opacity: 0.46;
    background: url("../img/decoration/flower-green-left.png") center / contain no-repeat;
    filter: brightness(0) invert(1);
    rotate: -12deg;
}

.thm08-gift-card {
    min-width: 0;
    padding: 1.3rem;
    border-radius: 1.4rem;
    background: var(--thm08-paper-warm);
    box-shadow: 0 1.4rem 4rem rgba(10, 30, 23, 0.22);
    color: var(--thm08-ink);
}

.thm08-gift-card__select {
    position: relative;
    display: grid;
    min-width: 0;
    grid-template-columns: minmax(0, 1fr) auto;
    gap: 0.75rem;
    align-items: center;
}

.thm08-gift-card__select select {
    min-width: 0;
}

.thm08-gift-card__select img {
    width: 4.6rem;
    max-height: 2rem;
    object-fit: contain;
    object-position: right center;
}

.thm08-gift-card__account {
    min-width: 0;
    margin-top: 1.3rem;
    padding-top: 1.25rem;
    border-top: 1px solid var(--thm08-line);
}

.thm08-gift-card__account > span,
.thm08-gift-card__account > strong,
.thm08-gift-card__account > small {
    display: block;
}

.thm08-gift-card__account > span {
    color: var(--thm08-muted);
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.09em;
    text-transform: uppercase;
}

.thm08-gift-card__account > strong {
    margin-top: 0.4rem;
    overflow-wrap: anywhere;
    color: var(--thm08-forest);
    font-family: var(--thm08-display);
    font-size: clamp(1.8rem, 8vw, 2.6rem);
    font-weight: 550;
    line-height: 1;
}

.thm08-gift-card__account > small {
    margin-top: 0.45rem;
    color: var(--thm08-muted);
}

.thm08-gift-card__account .thm08-button {
    width: 100%;
    margin-top: 1.15rem;
}

/* Health */
.thm08-health {
    display: grid;
    gap: 2.4rem;
    background: var(--thm08-paper-warm);
}

.thm08-health__list {
    display: grid;
    gap: 0;
    margin: 0;
    padding: 0;
    border-block: 1px solid var(--thm08-line);
    list-style: none;
}

.thm08-health__list li {
    display: grid;
    min-width: 0;
    grid-template-columns: 2.4rem minmax(0, 1fr);
    gap: 0.8rem;
    align-items: start;
    padding: 1rem 0;
}

.thm08-health__list li + li {
    border-top: 1px solid var(--thm08-line);
}

.thm08-health__list span {
    color: var(--thm08-sage);
    font-family: var(--thm08-display);
    font-size: 1.5rem;
    line-height: 1;
}

.thm08-health__list p {
    min-width: 0;
    margin: 0;
    color: var(--thm08-muted);
    font-size: 0.9375rem;
    line-height: 1.7;
}

/* Closing */
.thm08-closing {
    position: relative;
    display: grid;
    width: 100%;
    min-height: max(43rem, 82dvh);
    overflow: hidden;
    background: var(--thm08-mist);
}

.thm08-closing__media {
    position: absolute;
    inset: 0;
    margin: 0;
}

.thm08-closing__media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    filter: saturate(0.72) brightness(0.88) contrast(1.02);
}

.thm08-closing__wash {
    position: absolute;
    inset: 0;
    background:
        linear-gradient(180deg, rgba(18, 54, 43, 0.42) 0%, rgba(18, 54, 43, 0.68) 52%, rgba(12, 43, 34, 0.92) 100%),
        radial-gradient(ellipse at 50% 48%, rgba(125, 169, 149, 0.08), rgba(18, 54, 43, 0.28) 70%);
}

.thm08-closing__copy {
    position: relative;
    z-index: 2;
    display: grid;
    width: 100%;
    min-height: max(43rem, 82dvh);
    grid-template-rows: auto 1fr auto;
    align-items: center;
    padding: clamp(2rem, 8vw, 3.5rem) clamp(1.25rem, 7vw, 3rem);
    text-align: center;
}

.thm08-closing__sprig {
    display: grid;
    place-items: center;
}

.thm08-closing__sprig span {
    display: block;
    width: 6.5rem;
    height: 7.5rem;
    opacity: 0.58;
    background: url("../img/decoration/flower-green-right.png") center / contain no-repeat;
    filter: brightness(0) invert(1);
}

.thm08-closing__copy > div:nth-child(2) {
    width: min(100%, 39rem);
    margin-inline: auto;
}

body.theme-thm08[data-theme-version="v2"] .thm08-closing__copy h2 {
    display: flex;
    min-width: 0;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: center;
    gap: 0.08em 0.2em;
    margin: 0;
    color: var(--thm08-paper);
    overflow-wrap: anywhere;
    font-size: clamp(3rem, 14vw, 5.6rem);
    text-shadow: 0 0.12em 0.6em rgba(8, 30, 23, 0.32);
}

body.theme-thm08[data-theme-version="v2"] .thm08-closing__copy h2 i {
    color: #a9d4bf;
    font-size: 0.55em;
    font-weight: 400;
}

body.theme-thm08[data-theme-version="v2"] .thm08-closing--names-long .thm08-closing__copy h2 {
    font-size: clamp(2.35rem, 11vw, 4.5rem);
}

body.theme-thm08[data-theme-version="v2"] .thm08-closing--names-xlong .thm08-closing__copy h2 {
    font-size: clamp(1.95rem, 8.8vw, 3.65rem);
    line-height: 1.02;
}

.thm08-closing__copy > div:nth-child(2) > p:not(.thm08-kicker) {
    max-width: 32rem;
    margin: 1rem auto 0;
    color: rgba(255, 255, 255, 0.9);
    font-size: 0.9375rem;
    text-shadow: 0 1px 12px rgba(8, 30, 23, 0.42);
}

.thm08-closing__copy .thm08-kicker {
    color: #d9eee4;
    text-shadow: 0 1px 12px rgba(8, 30, 23, 0.48);
}

.thm08-closing__copy time {
    display: block;
    margin-top: 1rem;
    color: #d9eee4;
    font-size: 0.75rem;
    font-weight: 750;
    letter-spacing: 0.13em;
    text-transform: uppercase;
}

.thm08-closing__copy > small {
    align-self: end;
    color: rgba(255, 255, 255, 0.94);
    font-size: 0.75rem;
    text-shadow: 0 1px 10px rgba(13, 38, 30, 0.5);
}

/* Announcements */

.thm08-sr-status {
    position: fixed;
    z-index: 150;
    right: 1rem;
    bottom: 1rem;
    max-width: min(22rem, calc(100vw - 2rem));
    margin: 0;
    padding: 0.75rem 1rem;
    border-radius: 0.8rem;
    background: var(--thm08-forest);
    color: #fff;
    font-size: 0.8rem;
    opacity: 0;
    pointer-events: none;
}

/* Tablet-only wider composition. The desktop portrait pane intentionally keeps the mobile rhythm. */
@media (min-width: 700px) and (max-width: 1023px) {
    .thm08-section {
        padding-inline: clamp(3rem, 8vw, 5rem);
    }

    .thm08-nav__links {
        display: flex;
        flex-wrap: wrap;
        justify-content: flex-end;
        gap: 0.25rem 1.1rem;
    }

    .thm08-nav__links a {
        display: inline-flex;
        min-height: 44px;
        align-items: center;
        color: var(--thm08-muted);
        font-size: 0.75rem;
        font-weight: 700;
        letter-spacing: 0.1em;
        text-decoration: none;
        text-transform: uppercase;
    }

    .thm08-intro__editorial {
        grid-template-columns: minmax(0, 1.3fr) minmax(15rem, 0.7fr);
    }

    .thm08-intro__statement {
        grid-column: 1;
    }

    .thm08-intro__date-card {
        grid-column: 2;
        grid-row: 1 / 3;
        align-self: end;
    }

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

    .thm08-profile__media {
        width: 100%;
        max-width: none;
    }

    .thm08-events__ledger,
    .thm08-wishes__guestbook {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .thm08-dresscode,
    .thm08-livestream,
    .thm08-rsvp,
    .thm08-gift,
    .thm08-health {
        grid-template-columns: minmax(0, 0.82fr) minmax(0, 1.18fr);
        align-items: start;
    }

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

    .thm08-story__timeline::before {
        left: 50%;
    }

    .thm08-story-card {
        padding-inline: 1.75rem;
    }

    .thm08-story-card__node {
        left: auto;
        right: -0.48rem;
    }

    .thm08-story-card:nth-child(even) {
        grid-column: 2;
        translate: 0 5rem;
    }

    .thm08-story-card:nth-child(even) .thm08-story-card__node {
        right: auto;
        left: -0.48rem;
    }
}

@media (min-width: 1024px) {
    body.theme-thm08:is(.desktop-invitation-preview, .desktop-invitation-presentation) {
        overflow: hidden !important;
    }

    body.theme-thm08:is(.desktop-invitation-preview, .desktop-invitation-presentation) .desktop-invitation-shell--enabled > .desktop-invitation-shell__invitation {
        overflow: hidden;
        background: var(--thm08-paper);
    }

    body.theme-thm08:is(.desktop-invitation-preview, .desktop-invitation-presentation) .desktop-invitation-shell__invitation > .thm08-page {
        width: 100%;
        height: 100dvh;
        min-height: 0;
        overflow-x: clip;
        overflow-y: hidden;
        overscroll-behavior: contain;
        scrollbar-gutter: stable;
    }

    body.theme-thm08:is(.desktop-invitation-preview, .desktop-invitation-presentation)[data-theme-state="open"] .desktop-invitation-shell__invitation > .thm08-page {
        overflow-y: auto;
    }

    body.theme-thm08:is(.desktop-invitation-preview, .desktop-invitation-presentation) .thm08-cover {
        position: absolute;
        width: 100%;
        height: 100dvh;
    }

    body.theme-thm08 .desktop-invitation-shell__visual {
        --desktop-invitation-accent: #d3e7dd;
    }

    body.theme-thm08 .desktop-invitation-shell__visual::before {
        background:
            linear-gradient(180deg, rgba(230, 242, 236, 0.06), rgba(25, 65, 52, 0.58)),
            radial-gradient(circle at 75% 15%, rgba(211, 231, 221, 0.16), transparent 32%);
    }

    body.theme-thm08 .desktop-invitation-shell__copy {
        top: auto;
        bottom: clamp(3rem, 8vh, 7rem);
        translate: -50% 0;
    }

    body.theme-thm08 .desktop-invitation-shell__eyebrow,
    body.theme-thm08 .desktop-invitation-shell__date {
        font-family: var(--thm08-body);
    }

    body.theme-thm08 .desktop-invitation-shell__names {
        font-family: var(--thm08-display);
    }
}

@media (max-width: 359px) {
    .thm08-section {
        padding-inline: 1rem;
    }

    .thm08-cover__copy {
        padding-inline: 1rem;
    }

    .thm08-event {
        grid-template-columns: 4.25rem minmax(0, 1fr);
        padding: 0.95rem;
    }
}

/* Text-only enlargement must reflow within the 390–480px portrait pane. */
html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-section {
    padding-inline: 1rem;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] :where(
    .thm08-section,
    .thm08-section > *,
    .thm08-intro__editorial,
    .thm08-intro__heading,
    .thm08-intro__statement,
    .thm08-intro__date-card,
    .thm08-profile,
    .thm08-profile__copy,
    .thm08-event,
    .thm08-event__copy,
    .thm08-dresscode__copy,
    .thm08-livestream__headline,
    .thm08-livestream__access,
    .thm08-rsvp__intro,
    .thm08-form,
    .thm08-wishes__guestbook,
    .thm08-wishes__messages,
    .thm08-gift__heading,
    .thm08-gift-card,
    .thm08-health__copy,
    .thm08-health__list
) {
    min-width: 0;
    width: 100%;
    max-width: 100%;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] :where(
    .thm08-intro__editorial,
    .thm08-dresscode,
    .thm08-livestream,
    .thm08-rsvp,
    .thm08-gift,
    .thm08-health,
    .thm08-wishes__guestbook,
    .thm08-story__timeline
) {
    grid-template-columns: minmax(0, 1fr);
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] :where(
    .thm08-intro h2,
    .thm08-heading h2,
    .thm08-dresscode h2,
    .thm08-livestream h2,
    .thm08-rsvp h2,
    .thm08-gift h2,
    .thm08-health h2,
    .thm08-profile h3,
    .thm08-event h3,
    .thm08-story-card h3,
    .thm08-quote p
) {
    max-width: 100%;
    overflow-wrap: anywhere;
    word-break: normal;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] :where(
    .thm08-intro h2,
    .thm08-heading h2,
    .thm08-dresscode h2,
    .thm08-livestream h2,
    .thm08-rsvp h2,
    .thm08-gift h2,
    .thm08-health h2
) {
    font-size: clamp(2rem, 9vw, 3rem);
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-profile__copy {
    margin-inline: 0;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-event {
    grid-template-columns: minmax(0, 1fr);
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-event__date {
    padding: 0 0 0.8rem;
    border-right: 0;
    border-bottom: 1px solid var(--thm08-line);
    text-align: left;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-event__date time {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.35rem 0.65rem;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-event__date strong {
    font-size: 2.2rem;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-event__copy {
    padding-top: 0.8rem;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] :where(
    .thm08-event__actions,
    .thm08-event__actions .thm08-button,
    .thm08-form .thm08-button,
    .thm08-gift-card__account .thm08-button
) {
    min-width: 0;
    width: 100%;
    max-width: 100%;
    white-space: normal;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-dresscode__palette {
    grid-template-columns: minmax(0, 1fr);
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-dresscode__swatch {
    border-left: 0;
    border-top: 1px solid var(--thm08-line);
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-dresscode__swatch:first-child {
    border-top: 0;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-nav {
    width: auto;
    max-width: none;
    margin-inline: -1rem;
    padding-inline: 1rem;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-closing__copy {
    inset-inline: 0;
    width: auto;
    max-width: 100%;
    min-width: 0;
    padding-inline: 1rem;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] :where(
    .thm08-closing__copy > *,
    .thm08-closing__copy > div,
    .thm08-closing__copy h2,
    .thm08-closing__copy h2 span,
    .thm08-closing__copy p,
    .thm08-closing__copy small
) {
    min-width: 0;
    width: 100%;
    max-width: 100%;
    overflow-wrap: anywhere;
}

html[style*="font-size"] body.theme-thm08[data-theme-version="v2"] .thm08-closing__copy h2 {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    font-size: clamp(2rem, 9vw, 3rem);
}

@media (prefers-reduced-motion: reduce) {
    body.theme-thm08[data-theme-version="v2"],
    body.theme-thm08[data-theme-version="v2"] *,
    body.theme-thm08[data-theme-version="v2"] *::before,
    body.theme-thm08[data-theme-version="v2"] *::after {
        scroll-behavior: auto !important;
        animation-delay: 0.01ms !important;
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-delay: 0.01ms !important;
        transition-duration: 0.01ms !important;
    }
}

@media (forced-colors: active) {
    body.theme-thm08[data-theme-version="v2"] :focus-visible {
        outline-color: Highlight !important;
    }
}

/* Floating controls use the shared dock (theme-system.css), coloured for this theme. */
.thm08-dock {
    --theme-dock-bg: #315f50;
    --theme-dock-fg: #f7fbf8;
    --theme-dock-border: rgba(247, 251, 248, 0.35);
    --theme-dock-bg-on-dark: rgba(247, 251, 248, 0.94);
    --theme-dock-fg-on-dark: #315f50;
    --theme-dock-border-on-dark: rgba(49, 95, 80, 0.18);
}

/* On phones the countdown stays clear of the floating music control. */
@media (max-width: 480px) {
    .thm08-intro .thm08-countdown {
        width: min(100%, 17.5rem);
        margin-inline: auto;
    }
}

/* Revisions after the 2026-10-12 review ------------------------------------ */

/* The month column never breaks a word. */
.thm08-event__date small {
    white-space: nowrap;
}

/* Dress palette: one row of soft circles with their names. */
.thm08-dresscode__palette {
    grid-template-columns: repeat(auto-fit, minmax(4.75rem, 1fr));
    border: 0;
}

.thm08-dresscode__swatch,
.thm08-dresscode__swatch:nth-child(even),
.thm08-dresscode__swatch:nth-child(n + 3) {
    padding: 0.5rem 0.25rem;
    border: 0;
    text-align: center;
}

.thm08-dresscode__swatch > span {
    width: clamp(3.4rem, 15vw, 4.25rem);
    margin: 0 auto 0.65rem;
    aspect-ratio: 1;
    border-radius: 50%;
    box-shadow: inset 0 0 0 1px rgba(31, 64, 54, 0.2);
}

.thm08-dresscode__swatch strong {
    font-size: 1.05rem;
}

/* Livestream: a play mark in the ring. */
.thm08-livestream__signal {
    align-items: center;
    padding-bottom: 0;
    color: var(--thm08-mist);
}

.thm08-livestream__signal svg {
    margin-inline-start: 0.2rem;
}

/* One map control per event. */
.thm08-map .theme-v2-map__panel iframe {
    border-radius: 1rem;
}

/* Desktop: the companion photograph carries no second set of names. */
@media (min-width: 1024px) {
    body.theme-thm08 .desktop-invitation-shell--enabled:not(.desktop-invitation-shell--without-photo) .desktop-invitation-shell__copy,
    body.theme-thm08 .desktop-invitation-shell--enabled:not(.desktop-invitation-shell--without-photo) .desktop-invitation-shell__monogram {
        display: none;
    }
}

/* Revisions after the 2026-10-14 review ------------------------------------ */

/* Save-the-date card: the venue moves to its own line before it would break a word. */
.thm08-intro__date-card {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
}

.thm08-intro__date-card > span {
    flex: 1 0 100%;
}

.thm08-intro__date-card time {
    flex: 0 0 auto;
}

.thm08-intro__date-card p {
    flex: 1 1 8rem;
    min-width: 0;
    overflow-wrap: normal;
}

/* Health numerals meet the 3:1 contrast for large text. */
.thm08-health__list span {
    color: #56806e;
}

/* Dress palette names stay on balanced lines. */
.thm08-dresscode__swatch strong {
    font-size: 1rem;
    text-wrap: balance;
}

/* Phones: the countdown sits left, clear of the floating music control,
   and side ornaments that only fill a second column are dropped. */
@media (max-width: 699px) {
    .thm08-intro .thm08-countdown {
        width: min(100% - 3.5rem, 18rem);
        margin-inline: 0;
    }

    .thm08-rsvp__sprig,
    .thm08-gift__leaf {
        display: none;
    }
}

/* Tablet: two even columns with headings sized for them. */
@media (min-width: 700px) and (max-width: 1023px) {
    .thm08-dresscode,
    .thm08-livestream,
    .thm08-rsvp,
    .thm08-gift,
    .thm08-health {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        column-gap: clamp(2rem, 5vw, 3.5rem);
        align-items: center;
    }

    .thm08-rsvp,
    .thm08-gift {
        align-items: start;
    }

    .thm08-dresscode__copy h2,
    .thm08-livestream h2,
    .thm08-rsvp h2,
    .thm08-gift h2,
    .thm08-health h2 {
        font-size: clamp(2.4rem, 5.4vw, 3.1rem);
    }

    .thm08-event__copy h3 {
        font-size: 2.1rem;
    }
}

/* Names wrap only between words: a name shrinks to its line instead (the templates estimate --thm08-name-em). */
.thm08-cover h1,
.thm08-closing h2 {
    container-type: inline-size;
}

.thm08-cover h1 > span,
.thm08-closing h2 > span {
    font-size: min(1em, max(1rem, 92cqi / var(--thm08-name-em, 3)));
    overflow-wrap: break-word;
}

/* Revisions after the 2026-10-24 review ------------------------------------ */

/* Video: softly rounded frames in the garden, between the gallery and the mint
   RSVP. Phones and the desktop pane show one film per row; tablets pair them, and
   an odd number opens with the first film across both columns. */
.thm08-video {
    --theme-video-gap: 1.1rem;
    --theme-video-radius: 1.1rem;
    --theme-video-border: rgba(49, 95, 80, 0.16);
    --theme-video-frame: var(--thm08-forest);
    --theme-video-button: var(--thm08-paper);
    --theme-video-button-text: var(--thm08-forest);
    background:
        radial-gradient(circle at 4% 8%, rgba(125, 169, 149, 0.16), transparent 18rem),
        var(--thm08-paper);
}

.thm08-video .thm08-video__reel.theme-video__list {
    display: grid;
    width: 100%;
    max-width: 62rem;
    grid-template-columns: minmax(0, 1fr);
    gap: 1.75rem var(--theme-video-gap);
    margin-inline: auto;
    counter-reset: thm08-film;
}

.thm08-video .theme-video__item {
    container-type: inline-size;
    counter-increment: thm08-film;
}

.thm08-video .theme-video__frame {
    box-shadow: 0 1rem 2.8rem rgba(49, 95, 80, 0.12);
}

.thm08-video .theme-video__poster {
    filter: saturate(0.82) brightness(1.01);
}

/* The whole frame is the play button: a guest taps the film, not a small target. */
body.theme-thm08[data-theme-version="v2"] .thm08-video .theme-video__play {
    z-index: 2;
    align-self: stretch;
    justify-self: stretch;
    justify-content: center;
}

body.theme-thm08[data-theme-version="v2"] .thm08-video .theme-video__play,
body.theme-thm08[data-theme-version="v2"] .thm08-video .theme-video__frame--link {
    font-family: var(--thm08-body);
    font-size: 0.75rem;
    font-weight: 750;
    letter-spacing: 0.14em;
}

/* The play mark grows with its frame, so paired films are not all button. */
.thm08-video .theme-video__play-icon {
    width: clamp(3.25rem, 15cqi, 4.5rem);
    box-shadow: 0 0.8rem 2rem rgba(16, 36, 29, 0.28);
}

.thm08-video :is(.theme-video__play, .theme-video__frame--link):is(:hover, :focus-visible) {
    --theme-video-button: var(--thm08-forest);
    --theme-video-button-text: #fff;
}

/* Focus rings the whole frame in forest green. The frame clips its button, so the
   ring is drawn on the frame; browsers without :has() keep an inner ring. */
body.theme-thm08[data-theme-version="v2"] .thm08-video .theme-video__play:focus-visible {
    outline: 2px solid #fff !important;
    outline-offset: -0.5rem !important;
}

body.theme-thm08[data-theme-version="v2"] .thm08-video .theme-video__frame--link:focus-visible {
    outline: 3px solid var(--thm08-forest) !important;
    outline-offset: 3px !important;
}

.thm08-video .theme-video__frame:has(.theme-video__play:focus-visible) {
    outline: 3px solid var(--thm08-forest);
    outline-offset: 3px;
}

@supports selector(:has(*)) {
    body.theme-thm08[data-theme-version="v2"] .thm08-video .theme-video__play:focus-visible {
        outline-color: transparent !important;
    }
}

body.theme-thm08[data-theme-version="v2"] .thm08-video .theme-video__caption {
    display: flex;
    align-items: baseline;
    justify-content: center;
    gap: 0.7rem;
    margin-top: 0.8rem;
    color: var(--thm08-ink);
    font-family: var(--thm08-display);
    font-size: clamp(1.35rem, 5vw, 1.6rem);
    font-weight: 500;
    line-height: 1.15;
}

body.theme-thm08[data-theme-version="v2"] .thm08-video .theme-video__caption::before {
    color: var(--thm08-forest);
    content: counter(thm08-film, decimal-leading-zero);
    font-family: var(--thm08-body);
    font-size: 0.75rem;
    font-weight: 750;
    letter-spacing: 0.14em;
}

/* Kirim Kado: the forest gift band's light sibling. The address sits on the gift's
   paper card with its leaf, over the garden's mint wash. */
.thm08-gift-address {
    display: grid;
    gap: 2.5rem;
    background:
        radial-gradient(circle at 96% 6%, rgba(125, 169, 149, 0.22), transparent 16rem),
        var(--thm08-wash);
}

.thm08-gift-address__heading {
    position: relative;
    z-index: 2;
    min-width: 0;
}

.thm08-gift-address__heading h2 {
    margin: 0;
    font-size: clamp(2.6rem, 11vw, 4.4rem);
}

.thm08-gift-address__heading > p:not(.thm08-kicker) {
    margin: 1.15rem 0 0;
    color: var(--thm08-muted);
}

.thm08-gift-address .thm08-gift-address__cards {
    display: grid;
    width: 100%;
    grid-template-columns: minmax(0, 1fr);
    gap: 1rem;
}

.thm08-gift-address .theme-gift-address__card {
    position: relative;
    align-items: flex-start;
    gap: 0;
    overflow: hidden;
    padding: 1.3rem 1.3rem 1.4rem;
    border: 1px solid rgba(49, 95, 80, 0.14);
    border-radius: 1.4rem;
    background: var(--thm08-paper-warm);
    box-shadow: 0 1.4rem 4rem rgba(31, 64, 54, 0.12);
    color: var(--thm08-ink);
    text-align: left;
}

/* The gift band's leaf, in green on the paper card. */
.thm08-gift-address .theme-gift-address__card::after {
    position: absolute;
    top: -0.9rem;
    right: -1.1rem;
    width: 4.75rem;
    height: 5.8rem;
    background: url("../img/decoration/flower-green-left.png") center / contain no-repeat;
    content: "";
    opacity: 0.32;
    pointer-events: none;
    rotate: 200deg;
}

body.theme-thm08[data-theme-version="v2"] .thm08-gift-address .theme-gift-address__label {
    color: var(--thm08-forest);
    font-size: 0.75rem;
    font-weight: 750;
    letter-spacing: 0.16em;
    opacity: 1;
}

body.theme-thm08[data-theme-version="v2"] .thm08-gift-address .theme-gift-address__name {
    max-width: calc(100% - 2.5rem);
    margin: 0.5rem 0 0.25rem;
    color: var(--thm08-forest);
    font-family: var(--thm08-display);
    font-size: clamp(1.9rem, 8vw, 2.6rem);
    font-weight: 550;
    line-height: 1;
    overflow-wrap: break-word;
}

body.theme-thm08[data-theme-version="v2"] .thm08-gift-address .theme-gift-address__phone a {
    display: inline-flex;
    min-height: 44px;
    align-items: center;
    color: var(--thm08-forest);
    font-size: 0.9rem;
    font-weight: 700;
}

body.theme-thm08[data-theme-version="v2"] .thm08-gift-address .theme-gift-address__address {
    font-size: 0.9375rem;
    line-height: 1.7;
}

body.theme-thm08[data-theme-version="v2"] .thm08-gift-address .theme-gift-address__note {
    margin-top: 0.55rem;
    color: var(--thm08-muted);
    font-size: 0.85rem;
    opacity: 1;
}

body.theme-thm08[data-theme-version="v2"] .thm08-gift-address .theme-gift-address__copy {
    width: 100%;
    margin-top: 1.15rem;
}

body.theme-thm08[data-theme-version="v2"] .thm08-gift-address .theme-gift-address__copy:focus-visible {
    outline: 3px solid var(--thm08-forest) !important;
    outline-offset: 3px !important;
}

body.theme-thm08[data-theme-version="v2"] .thm08-gift-address .theme-gift-address__copy[data-copy-state="copied"] {
    background: var(--thm08-forest);
    color: #fff;
}

@media (min-width: 700px) and (max-width: 1023px) {
    .thm08-video:not([data-video-count="1"]) .thm08-video__reel {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    /* Films pair up; an odd last one is centred under the pairs. */
    .thm08-video:not([data-video-count="1"]) .theme-video__item:last-child:nth-child(odd) {
        grid-column: 1 / -1;
        justify-self: center;
        width: calc((100% - var(--theme-video-gap)) / 2);
    }

    /* Kirim Kado: one address mirrors the gift band, the card first and the heading
       beside it. Two sit side by side under the heading; three put the first centred
       over the other two. */
    .thm08-gift-address[data-address-count="1"] {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        column-gap: clamp(2rem, 5vw, 3.5rem);
        align-items: center;
    }

    .thm08-gift-address[data-address-count="1"] .thm08-gift-address__heading {
        grid-column: 2;
        grid-row: 1;
    }

    .thm08-gift-address[data-address-count="1"] .thm08-gift-address__cards {
        grid-column: 1;
        grid-row: 1;
    }

    .thm08-gift-address:not([data-address-count="1"]) .thm08-gift-address__cards {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        align-items: start;
    }

    body.theme-thm08[data-theme-version="v2"] .thm08-gift-address:not([data-address-count="1"]) .theme-gift-address__name {
        font-size: clamp(1.7rem, 3.6vw, 2.2rem);
    }

    .thm08-gift-address[data-address-count="3"] .theme-gift-address__card:first-child {
        grid-column: 1 / -1;
        justify-self: center;
        width: calc(50% - 0.5rem);
    }

    .thm08-gift-address__heading h2 {
        font-size: clamp(2.4rem, 5.4vw, 3.1rem);
    }

    /* Events: one celebration is a single centred card; an odd number opens with the
       first celebration centred over the pairs, so no card is left alone in a row. */
    .thm08-events__ledger[data-event-count="1"] {
        grid-template-columns: minmax(0, 34rem);
        justify-content: center;
    }

    .thm08-events__ledger:is([data-event-count="3"], [data-event-count="5"]) > .thm08-event:first-child {
        grid-column: 1 / -1;
        justify-self: center;
        width: calc(50% - 0.625rem);
    }

    /* Story: the right-hand chapters step down, and the last one keeps its step
       inside the timeline instead of hanging below it. */
    .thm08-story__timeline {
        align-items: start;
    }

    .thm08-story-card:nth-child(even):last-child {
        margin-bottom: 5rem;
    }
}

/* Teks & Font: a text the couple writes may hold one long word (Bapak/Ibu/Saudara/i). Body text
   breaks instead of pushing past its column (headings shrink first: text-fit.js). Zero
   specificity, so the theme's own wrapping rules win. */
:where(body.theme-thm08) :where(h4, p, small, li, blockquote, figcaption) {
    overflow-wrap: break-word;
}

/* Teks & Font: these grids size their column to the longest word, so a longer title or a wider
   custom font widened the section past the phone column. The column now holds and the heading
   shrinks or breaks inside it (text-fit.js); the theme's own words fit as before. */
.thm08-dresscode > *,
.thm08-livestream > *,
.thm08-livestream__headline > *,
.thm08-rsvp > *,
.thm08-gift > *,
.thm08-gift-address > * {
    min-width: 0;
}

/* The health title already reaches into the section's right padding with the theme's own words in
   the desktop column, so it keeps that room; a longer word is held there and shrinks (text-fit.js). */
.thm08-health h2 {
    max-width: calc(100cqi - clamp(1.25rem, 6vw, 2.5rem));
}

/* A wider custom font keeps the couple's names inside the profile column. */
.thm08-profile__copy {
    max-width: min(31rem, 100%);
}

/* Desktop frame (≥1024px): the invitation is a 375–465px column, but its type is sized for phones
   in vw, which here follows the window. The opening heading kept an 11ch track wider than the
   column at every desktop width, pushing its lead and date card past the edge, and long section
   headings outgrew the column at 1024px. In the frame the widest heading word (about 5em) is kept
   inside the column, measured by the page container; headings that already fit keep their size.
   The phone scale (vw) is read from the column too (cqi): sized by the window, the headings in
   the 460px column grew to 72px and ran to five lines, against 43px on a 390px phone. */
@media (min-width: 1024px) {
    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-intro__editorial {
        grid-template-columns: minmax(0, 1fr);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-intro__heading h2 {
        max-width: min(11ch, 100%);
        font-size: min(clamp(2.9rem, 12cqi, 5.5rem), calc((100cqi - 5rem) / 5.1));
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-heading h2 {
        font-size: min(clamp(2.55rem, 11cqi, 4.5rem), calc((100cqi - 5rem) / 5.1));
    }

    body.theme-thm08 .desktop-invitation-shell--enabled :is(.thm08-dresscode__copy h2, .thm08-livestream h2, .thm08-rsvp h2, .thm08-gift h2, .thm08-health h2, .thm08-gift-address__heading h2) {
        font-size: min(clamp(2.6rem, 11cqi, 4.4rem), calc((100cqi - 5rem) / 5.1));
    }

    /* The rest of the phone type, also read from the column. */
    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-cover__title-block h1 {
        font-size: clamp(3rem, 15cqi, 6.2rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-cover--names-long .thm08-cover__title-block h1 {
        font-size: clamp(2.4rem, 12cqi, 5.2rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-cover--names-xlong .thm08-cover__title-block h1 {
        font-size: clamp(2rem, 9.5cqi, 4.2rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-cover__guest strong {
        font-size: clamp(1.3rem, 5cqi, 1.7rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-countdown strong {
        font-size: clamp(1.8rem, 8cqi, 2.5rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-profile__monogram {
        font-size: clamp(6rem, 28cqi, 10rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-profile__copy h3 {
        font-size: clamp(2.55rem, 11.5cqi, 4.4rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-profile--name-medium .thm08-profile__copy h3 {
        font-size: clamp(2.2rem, 9.7cqi, 3.8rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-profile--name-long .thm08-profile__copy h3 {
        font-size: clamp(1.9rem, 8.4cqi, 3.25rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-profile--name-xlong .thm08-profile__copy h3 {
        font-size: clamp(1.65rem, 7cqi, 2.85rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled :is(.thm08-event__copy h3, .thm08-story-card__copy h3) {
        font-size: clamp(2rem, 8cqi, 3rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-wish-card blockquote {
        font-size: clamp(1.55rem, 6.7cqi, 2.2rem);
    }

    body.theme-thm08 .desktop-invitation-shell--enabled .thm08-gift-card__account > strong {
        font-size: clamp(1.8rem, 8cqi, 2.6rem);
    }

    body.theme-thm08[data-theme-version="v2"] .desktop-invitation-shell--enabled .thm08-closing__copy h2 {
        font-size: clamp(3rem, 14cqi, 5.6rem);
    }

    body.theme-thm08[data-theme-version="v2"] .desktop-invitation-shell--enabled .thm08-closing--names-long .thm08-closing__copy h2 {
        font-size: clamp(2.35rem, 11cqi, 4.5rem);
    }

    body.theme-thm08[data-theme-version="v2"] .desktop-invitation-shell--enabled .thm08-closing--names-xlong .thm08-closing__copy h2 {
        font-size: clamp(1.95rem, 8.8cqi, 3.65rem);
    }

    body.theme-thm08[data-theme-version="v2"] .desktop-invitation-shell--enabled .thm08-video .theme-video__caption {
        font-size: clamp(1.35rem, 5cqi, 1.6rem);
    }

    body.theme-thm08[data-theme-version="v2"] .desktop-invitation-shell--enabled .thm08-gift-address .theme-gift-address__name {
        font-size: clamp(1.9rem, 8cqi, 2.6rem);
    }
}

/* Tablets: the couple sit in two half columns, where the phone-sized names (11.5vw) ran to
   four lines and set the two profiles at different heights. The names follow the section
   headings' tablet scale instead. The palette keeps its four colours on one row instead of
   three and a lone fourth. */
@media (min-width: 700px) and (max-width: 1023px) {
    .thm08-profile__copy h3 {
        font-size: clamp(2.3rem, 5.4vw, 3.1rem);
    }

    .thm08-profile--name-medium .thm08-profile__copy h3 {
        font-size: clamp(2.1rem, 4.7vw, 2.75rem);
    }

    .thm08-profile--name-long .thm08-profile__copy h3 {
        font-size: clamp(1.9rem, 4.1vw, 2.4rem);
    }

    .thm08-profile--name-xlong .thm08-profile__copy h3 {
        font-size: clamp(1.7rem, 3.5vw, 2.1rem);
    }

    .thm08-dresscode__palette {
        grid-template-columns: repeat(auto-fit, minmax(4.25rem, 1fr));
    }

    .thm08-dresscode__swatch > span {
        width: 3.75rem;
    }
}

/* Teks & Font: the opening title's 11ch measure is set for the theme's own words. A title the
   couple writes (no data-copy-fit="off") takes its column: in ch the box shrank with the type as
   text-fit shrank it, so a long word never fitted and broke mid-word in a narrow strip. */
body.theme-thm08 h2[id$="-title"]:not([data-copy-fit="off"]) {
    max-width: 100%;
}
