/* Sekar Bali: open split gateways, frangipani and warm terracotta. */
body.theme-thm27 {
    --bali-ink: #fbf3e4;
    --bali-panel: #f5e8d4;
    --bali-accent: #976c34;
    --bali-accent-ink: #7d5726;
    --bali-light: #643a2d;
    --bali-muted: #6e5a46;
    --bali-red: #a3593e;
    --bali-line: rgb(181 140 73 / 40%);
    --theme-focus: #88442f;
    margin: 0; background: var(--bali-ink); color: var(--bali-light);
    font: 400 15px/1.8 var(--invie-font-body, "Manrope"),sans-serif; -webkit-font-smoothing: antialiased;
}
.theme-thm27 *, .theme-thm27 *::before, .theme-thm27 *::after { box-sizing: border-box; }
.theme-thm27 :where(h1,h2,h3,p,figure,blockquote) { margin: 0; }
.theme-thm27 :is(h1,h2,h3) { font-family: var(--invie-font-heading, "Cormorant Garamond"),Georgia,serif; font-weight: 500; line-height: 1.08; overflow-wrap: anywhere; }
.theme-thm27 h2 { font-size: clamp(2.6rem,4.2vw,4.4rem); }.theme-thm27 h3 { font-size: clamp(2rem,3vw,2.8rem); }
.theme-thm27 p { text-wrap: pretty; }.theme-thm27 :is(a,button,input,textarea,select) { -webkit-tap-highlight-color: transparent; }
.theme-thm27 a { color: inherit; text-decoration: none; }.theme-thm27 button { cursor: pointer; font: inherit; }.theme-thm27 button:disabled { opacity: .55; cursor: wait; }
.theme-thm27 img { display: block; max-width: 100%; }.theme-thm27 :is(button,input,textarea,select) { max-width: 100%; }.theme-thm27 [hidden] { display: none !important; }
.theme-thm27 ::selection { color: #fff7e7; background: #a3593e; }.theme-thm27:not([data-theme-state="open"]) { overflow: hidden; }
.thm27-page { width: 100%; position: relative; }.theme-thm27 .thm27-invitation { visibility: visible; opacity: 1; outline: 0; }
.theme-thm27 [data-theme-section] { content-visibility: visible; contain-intrinsic-size: none; scroll-margin-top: 20px; }
.thm27-kicker { color: var(--bali-accent-ink); font-size: 12px; font-weight: 600; letter-spacing: 0.16em; line-height: 1.9; text-transform: uppercase; }
.thm27-button { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 14px; min-height: 48px; padding: 14px 28px; border: 1px solid #caa15e; border-radius: 30px 30px 3px 3px; background: #a3593e; color: #fff8e9; font-size: 12px; font-weight: 700; letter-spacing: .04em; transition: box-shadow .25s,transform .25s; }
.thm27-button:hover { box-shadow: 0 5px 22px #a3593e25; transform: translateY(-2px); }.theme-thm27 a.thm27-button { color: #fff8e9; }
.theme-thm27 .thm27-button.thm27-button--gold { border-color: #caa15e; background: #efd09b; color: var(--bali-light); }
.theme-thm27 .thm27-button.thm27-button--ink { border-color: #caa15e; background: var(--bali-light); color: var(--bali-ink); }
.theme-thm27 .thm27-button.thm27-button--paper { color: var(--bali-accent-ink); background: transparent; }
.thm27-text-link { display: inline-flex; gap: 14px; align-items: center; min-height: 44px; padding-block: 8px; border: 0; border-bottom: 1px solid var(--bali-line); background: transparent; color: var(--bali-accent-ink) !important; font-size: 12px; }
.thm27-divider { display: flex; align-items: center; justify-content: center; gap: 16px; color: var(--bali-accent-ink); margin: 24px 0; font-size: 8px; }
.thm27-divider::before,.thm27-divider::after { content: ''; width: 70px; height: 1px; background: linear-gradient(90deg,transparent,var(--bali-accent)); }.thm27-divider::after { transform: rotate(180deg); }

/* Invitation geometry is ready under the cover before its fade starts. */
.thm27-cover { position: fixed !important; z-index: 50; inset: 0; overflow: auto; overflow-x: hidden; isolation: isolate; background: #fbf3e4; transition: opacity .85s ease,visibility .85s; }
.thm27-cover::before { content: ''; position: fixed; z-index: -1; inset: 0; background: linear-gradient(90deg,#fbf3e42e,#fbf3e4aa 38%,#fbf3e4aa 62%,#fbf3e42e),url('../img/bali-garden.webp') center / cover; pointer-events: none; }
.thm27-cover__stage { position: relative; width: min(100% - 110px,1300px); min-height: 100svh; margin: auto; padding: 45px 0 55px; display: grid; place-items: center; }
.thm27-cover__frame { position: relative; z-index: 2; width: min(48%,530px); padding: 35px 28px; background: radial-gradient(ellipse,#fbf3e4f5 30%,#fbf3e4e2 62%,transparent 80%); text-align: center; isolation: isolate; animation: thm27-enter 1.3s ease both; }
.thm27-cover__portrait { position: absolute; z-index: -1; inset: 0; width: 100%; height: 100%; object-fit: cover; opacity: .035; mask-image: linear-gradient(transparent,#000 40%,transparent); }
.thm27-cover__crest { width: 130px; height: auto; margin: 0 auto 20px; }
.thm27-cover h1 { font-size: clamp(4rem,6vw,6rem); color: #945037; letter-spacing: -.025em; margin-top: 22px; }.thm27-cover h1 span { display: block; max-width: 100%; overflow-wrap: anywhere; }.thm27-cover h1 i { display: block; margin: 5px 0; font-size: .4em; font-weight: 400; color: #b58c49; }.thm27-cover--long h1 { font-size: clamp(2.5rem,4.5vw,4rem); }
.thm27-cover time { font-size: 12px; letter-spacing: .16em; text-transform: uppercase; }
.thm27-cover__guest { display: grid; gap: 6px; margin: 25px auto; overflow-wrap: anywhere; }.thm27-cover__guest span { color: var(--bali-muted); font-size: 12px; }.thm27-cover__guest strong { font-size: 16px; font-weight: 500; }
.thm27-cover__border { --thm27-repeat: 160px; position: fixed; z-index: 3; inset-block: 0; width: 32px; background: url('../img/patra-border.svg') center 0 / 80px var(--thm27-repeat) repeat-y; animation: thm27-weave 36s linear infinite; pointer-events: none; }
.thm27-cover__border--left { left: 7px; }.thm27-cover__border--right { right: 7px; animation-direction: reverse; }.thm27-cover > .thm27-ornaments { z-index: 1; position: fixed; }
.theme-thm27.thm27-is-open .thm27-cover { opacity: 0; visibility: hidden; pointer-events: none; }

/* Lightweight perpetual motion has no effect on content dimensions. */
.thm27-ornaments { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
.thm27-scrollwork { position: absolute; width: clamp(200px,25vw,360px); height: auto; bottom: -8px; opacity: .85; transform-origin: 15% 95%; animation: thm27-sway 14s ease-in-out infinite; }
.thm27-scrollwork--left { left: -4%; }.thm27-scrollwork--right { right: -4%; scale: -1 1; animation-delay: -7s; }
.thm27-dust { position: absolute; inset: 0; }.thm27-dust i { position: absolute; left: 17%; top: 75%; width: 6px; height: 10px; border-radius: 90% 0 90% 0; background: #e2c183; animation: thm27-drift 12s ease-in-out infinite; opacity: 0; }
.thm27-dust i:nth-child(2) { left: 33%; top: 39%; animation-delay: -4s; }.thm27-dust i:nth-child(3) { left: 69%; top: 68%; animation-delay: -7s; }.thm27-dust i:nth-child(4) { left: 85%; top: 29%; animation-delay: -2s; }.thm27-dust i:nth-child(5) { left: 8%; top: 31%; animation-delay: -6s; }.thm27-dust i:nth-child(6) { left: 53%; top: 88%; animation-delay: -1s; }.thm27-dust i:nth-child(7) { left: 78%; top: 82%; animation-delay: -8s; }.thm27-dust i:nth-child(8) { left: 42%; top: 12%; animation-delay: -3s; }
@keyframes thm27-enter { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
@keyframes thm27-weave { from { background-position: center 0; } to { background-position: center calc(-1 * var(--thm27-repeat)); } }
@keyframes thm27-sway { 0%,100% { transform: rotate(-1.5deg); } 50% { transform: rotate(1deg) translateY(-6px); } }
@keyframes thm27-drift { 0%,100% { opacity: 0; transform: translate(0,-20px) rotate(0); } 40% { opacity: .7; } 80% { opacity: .15; transform: translate(22px,55px) rotate(70deg); } }
.thm27-motion-ready [data-thm27-reveal] { transition: opacity .85s ease,transform .85s ease; }.thm27-motion-ready [data-thm27-reveal]:not(.is-visible) { opacity: 0; transform: translateY(24px); }
.theme-thm27:is([data-motion-paused="true"],[data-page-hidden="true"]) :is(.thm27-scrollwork,.thm27-dust i,.thm27-cover__border) { animation-play-state: paused !important; }.theme-thm27[data-motion-paused="true"] [data-thm27-reveal] { opacity: 1; transform: none; }
.thm27-section { position: relative; padding: 100px max(7vw,calc((100vw - 1140px)/2)); border-bottom: 1px solid var(--bali-line); }.thm27-section > :not(dialog) { position: relative; min-width: 0; }.thm27-section > .thm27-ornaments { position: absolute; }
.thm27-heading { max-width: 720px; text-align: center; margin: 0 auto 60px; }.thm27-heading::before { content: ''; display: block; width: 130px; height: 49px; margin: 0 auto 26px; background: url('../img/frangipani-mark.svg') center / contain no-repeat; }.thm27-heading .thm27-kicker { margin-bottom: 15px; }.thm27-heading p:not(.thm27-kicker) { max-width: 550px; margin: 22px auto 0; color: var(--bali-muted); font-size: 15px; }
.thm27-intro { padding-top: 0; background: #fbf3e4; }.thm27-intro .thm27-scrollwork { opacity: .55; }
.thm27-nav { display: flex; justify-content: space-between; gap: 24px; align-items: center; padding: 25px 0; border-bottom: 1px solid var(--bali-line); }.thm27-nav__brand { font: 30px/1.1 var(--invie-font-heading, "Cormorant Garamond"),serif; color: #945037 !important; }.thm27-nav__links { display: flex; gap: 28px; flex-wrap: wrap; }.thm27-nav__links a { display: inline-flex; align-items: center; min-height: 44px; font-size: 12px; }
.thm27-intro__grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 50px; padding: 65px 0 55px; }.thm27-intro__copy { text-align: center; width: min(100%,850px); margin: auto; }.thm27-intro__copy h2 { font-size: clamp(3rem,5vw,5rem); margin-top: 22px; }.thm27-intro__copy em { color: #a3593e; font-weight: 500; }.thm27-intro__copy > p:not(.thm27-kicker) { font-size: 15px; max-width: 580px; margin: auto; color: var(--bali-muted); }.thm27-intro__copy .thm27-text-link { margin-top: 18px; }.thm27-intro__ornament { width: 120px; height: auto; margin: 0 auto 25px; }
.thm27-intro__portrait { position: relative; width: min(100%,720px); margin: auto; padding: 0 125px 22px; border-bottom: 3px double #b58c49; }
.thm27-intro__portrait::before,.thm27-intro__portrait::after { content: ''; position: absolute; bottom: 0; width: 130px; aspect-ratio: 260 / 720; background: url('../img/gate-half.svg') center bottom / contain no-repeat; }.thm27-intro__portrait::before { left: 0; }.thm27-intro__portrait::after { right: 0; scale: -1 1; }
.thm27-intro__hero { position: relative; display: grid; place-items: center; aspect-ratio: 4 / 5; overflow: hidden; border: 7px solid #ead6b6; outline: 1px solid #b58c4980; border-radius: 48% 48% 0 0; background: linear-gradient(#643a2d70,#643a2d80),url('../img/bali-garden.webp') center / cover; color: #fff5df; }.thm27-intro__hero > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }.thm27-intro__hero figcaption { position: absolute; inset: auto 0 0; padding: 55px 20px 18px; text-align: center; background: linear-gradient(transparent,#4e3028dc); color: #fff6e3; font: italic 32px var(--invie-font-heading, "Cormorant Garamond"),serif; }.thm27-intro__monogram { font: 100px var(--invie-font-heading, "Cormorant Garamond"),serif; color: #fff5df; }
.thm27-countdown { display: flex; justify-content: center; align-items: center; gap: 42px; padding-top: 30px; border-top: 1px solid var(--bali-line); }.thm27-countdown > p { max-width: 150px; }.thm27-countdown > div { display: grid; min-width: 55px; text-align: center; }.thm27-countdown strong { color: #a3593e; font: 45px/1.2 var(--invie-font-heading, "Cormorant Garamond"),serif; }.thm27-countdown span { color: var(--bali-muted); font-size: 12px; letter-spacing: .1em; }
.thm27-couple { background: #f1e0c8; }.thm27-couple__profiles { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 8%; max-width: 950px; margin: 55px auto 0; }.thm27-profile { text-align: center; min-width: 0; }.thm27-profile__media { position: relative; width: min(100%,310px); aspect-ratio: 3 / 4; border: 1px solid #b58c49; border-radius: 48% 48% 0 0; background: #c4956b; }.theme-thm27 .thm27-profile__media { margin: 0 auto 32px; }.thm27-profile__media::before { content: ''; position: absolute; width: 115px; height: 43px; left: 50%; translate: -50% 0; bottom: -18px; z-index: 1; background: url('../img/frangipani-mark.svg') center / contain no-repeat; }.thm27-profile__media img,.thm27-profile__monogram { position: absolute; inset: 8px; width: calc(100% - 16px); height: calc(100% - 16px); object-fit: cover; border-radius: 48% 48% 0 0; }.thm27-profile__monogram { display: grid; place-items: center; color: #fff7e4; font: 90px var(--invie-font-heading, "Cormorant Garamond"),serif; background: linear-gradient(#643a2d90,#643a2d90),url('../img/bali-garden.webp') center / cover; }.thm27-profile__copy h3 { color: #8e4833; margin: 10px auto 18px; max-width: 420px; }.thm27-profile__copy > p:not(.thm27-kicker) { font-size: 15px; color: var(--bali-muted); max-width: 330px; margin: auto; }.thm27-profile__copy .thm27-text-link { margin-top: 12px; }.thm27-profile--name-long h3,.thm27-profile--name-xlong h3 { font-size: 2rem; }
.thm27-events { background: #8e4833; color: #fff4df; --bali-muted: #f0d6b5; --bali-accent: #efd09b; --bali-accent-ink: #efd09b; --bali-line: #efd09b66; --theme-focus: #fff7df; }.thm27-events__tickets { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 36px; }
.thm27-event { position: relative; padding: 35px 32px 32px; text-align: center; border: 1px solid #d9b876; background: #fbf3e4; color: #643a2d; --bali-muted: #6e5a46; --bali-accent: #976c34; --bali-accent-ink: #7d5726; --bali-line: #b58c4970; --theme-focus: #88442f; border-radius: 160px 160px 0 0; }
.thm27-event::before { content: ''; display: block; height: 70px; margin: 0 auto 22px; background: url('../img/gate-crest.svg') center / contain no-repeat; }
.thm27-event__date { padding: 16px 0 28px; margin-bottom: 26px; border-bottom: 1px solid #b58c4970; }.thm27-event__date time { display: grid; }.thm27-event__date span,.thm27-event__date small { font-size: 12px; letter-spacing: .17em; }.thm27-event__date strong { color: #a3593e; font: 75px/1.1 var(--invie-font-heading, "Cormorant Garamond"),serif; margin: 4px 0; }.thm27-event__copy h3 { margin: 10px 0 18px; }.thm27-event__copy > strong { display: block; font-size: 14px; margin: 20px 0 7px; }.thm27-event__copy address { font-style: normal; color: var(--bali-muted); font-size: 12px; }.thm27-event__time { font-size: 14px; }.thm27-event__actions { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 12px; margin-top: 24px; }
/* One map control: open, the map takes the card's width; the button and the maps link stay centred like the card. */
.thm27-event__map[open] { align-self: stretch; }.thm27-event__map > summary { margin-inline: auto; }.thm27-event__map .theme-v2-map__open { justify-self: center; color: var(--bali-accent-ink); font-size: 13px; }
.thm27-quote { text-align: center; background: #f4e5cb url('../img/frangipani-branch.svg') left bottom / min(30%,300px) auto no-repeat; }.thm27-quote__brush { display: block; height: 55px; background: url('../img/frangipani-mark.svg') center / contain no-repeat; margin-bottom: 30px; }.thm27-quote blockquote { max-width: 750px; margin: auto; }.thm27-quote__mark { display: none; }.thm27-quote blockquote p { font: 500 clamp(1.6rem,2.6vw,2.3rem)/1.5 var(--invie-font-heading, "Cormorant Garamond"),serif; }.thm27-quote cite { display: block; color: var(--bali-accent-ink); font-style: normal; letter-spacing: .14em; font-size: 12px; margin-top: 30px; }

/* Photo stories and accessible invitation interactions. */
.thm27-story__timeline { position: relative; max-width: 950px; margin: auto; }
.thm27-story__timeline::before { content: ''; position: absolute; left: 50%; top: 0; bottom: 0; width: 1px; background: linear-gradient(transparent,var(--bali-accent),transparent); }
.thm27-story-entry { display: grid; grid-template-columns: 1fr 1fr; gap: 60px; align-items: center; padding: 40px 0; }
.thm27-story-entry--even .thm27-story-entry__visual { order: 2; }
.thm27-story-entry__visual figure { position: relative; }
.thm27-story-entry__visual img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; padding: 7px; border: 1px solid var(--bali-line); border-radius: 48% 48% 0 0; }
.thm27-story-entry__visual figcaption { position: absolute; bottom: 20px; left: 25px; font: 45px var(--invie-font-heading, "Cormorant Garamond"),serif; text-shadow: 0 2px 10px #000; font-variant-numeric: lining-nums; }
.thm27-story-entry__placeholder { min-height: 220px; display: grid; place-items: center; background: url('../img/frangipani-branch.svg') center / contain no-repeat; color: var(--bali-accent-ink); }.thm27-story-entry__placeholder span { display: none; }
.thm27-story-entry__chapter { color: var(--bali-accent-ink); font-size: 12px; letter-spacing: .15em; text-transform: uppercase; }
.thm27-story-entry__copy time { font-size: 12px; color: var(--bali-muted); }.thm27-story-entry__copy h3 { margin: 14px 0; }.thm27-story-entry__copy > p:last-child { color: var(--bali-muted); font-size: 15px; }
.thm27-gallery { background: #f5e8d4; }
.thm27-gallery__collage { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 18px; align-items: start; }
.thm27-gallery__piece { position: relative; min-width: 0; padding: 7px; border: 1px solid var(--bali-line); background: transparent; color: var(--bali-light); }
.thm27-gallery__piece img { width: 100%; aspect-ratio: 3 / 4; object-fit: cover; border-radius: 46% 46% 0 0; }.thm27-gallery__piece:nth-child(3n+2) { margin-top: 50px; }
.thm27-gallery__piece > span { position: absolute; bottom: 16px; right: 20px; font-size: 12px; text-shadow: 0 1px 6px #000; }.thm27-gallery__piece small { display: block; padding: 10px; }
.thm27-gallery-dialog { padding: 18px; width: min(900px,94vw); max-height: 94dvh; color: var(--bali-light); background: var(--bali-ink); border: 1px solid var(--bali-accent); }
.thm27-gallery-dialog::backdrop { background: #10080ce8; }.thm27-gallery-dialog button { border: 1px solid var(--bali-line); color: var(--bali-light); background: transparent; padding: 8px 12px; }
.thm27-gallery-dialog__bar,.thm27-gallery-dialog__controls { display: flex; justify-content: space-between; gap: 10px; align-items: center; font-size: 12px; }.thm27-gallery-dialog figure { margin: 14px 0; }.thm27-gallery-dialog figure img { max-height: 65dvh; width: 100%; object-fit: contain; }.thm27-gallery-dialog figcaption { text-align: center; font-size: 12px; }
.thm27-rsvp__layout, .thm27-wishes__guestbook { display: grid; grid-template-columns: 1fr 1.2fr; gap: 70px; }
.thm27-rsvp__aside h2 { margin: 15px 0 24px; }.thm27-rsvp__aside > p:not(.thm27-kicker) { color: var(--bali-muted); font-size: 15px; }.thm27-rsvp__deadline strong { display: block; color: var(--bali-accent-ink); }
.thm27-rsvp__mark { width: 160px; height: 240px; background: url('../img/frangipani-branch.svg') center / contain no-repeat; margin: 35px 0; }.thm27-rsvp__mark span { display: none; }
.thm27-form { padding: 32px; background: #f5e8d4; border: 1px solid var(--bali-line); display: grid; gap: 20px; align-content: start; }
.thm27-field { min-width: 0; margin: 0; padding: 0; border: 0; }.thm27-field > label,.thm27-field legend { display: block; padding: 0; font-size: 12px; margin-bottom: 8px; color: var(--bali-accent-ink); }
.thm27-field :is(input:not([type="radio"]),textarea,select) { width: 100%; padding: 12px 14px; border: 1px solid #9b6f3940; border-radius: 0; background: #fbf3e4; color: var(--bali-light); font: 13px/1.8 var(--invie-font-body, "Manrope"),sans-serif; }.thm27-field textarea { resize: vertical; }.thm27-field ::placeholder { color: #887b6c; opacity: 1; }
.thm27-attendance__options { display: grid; gap: 8px; }.thm27-attendance__options label { display: flex; align-items: center; gap: 10px; min-height: 44px; padding: 8px 12px; border: 1px solid var(--bali-line); font-size: 12px; cursor: pointer; }.thm27-attendance__options label:has(input:checked) { background: #9b6f3912; border-color: var(--bali-accent); }.thm27-attendance input { accent-color: var(--bali-accent); }
.thm27-form__status { font-size: 12px; color: #6c5130; overflow-wrap: anywhere; }.thm27-form__status:empty { display: none; }.thm27-form__status[data-status="error"] { color: #a33826; }
.thm27-wishes { background: #f0dfc4; }.thm27-wishes__featured { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 22px; margin-bottom: 40px; }.thm27-wish-card { position: relative; padding: 30px; border: 1px solid var(--bali-line); }.thm27-wish-card__number { color: var(--bali-accent-ink); font-size: 12px; }.thm27-wish-card blockquote { margin: 12px 0 22px; font: 24px/1.5 var(--invie-font-heading, "Cormorant Garamond"),serif; }.thm27-wish-card figcaption { display: flex; gap: 12px; align-items: center; font-size: 12px; }.thm27-wish-card figcaption img,.thm27-wish-card__initial { width: 42px; height: 42px; object-fit: cover; border-radius: 50%; }.thm27-wish-card__initial { display: grid; place-items: center; border: 1px solid var(--bali-line); }.thm27-wish-card small { display: block; color: var(--bali-muted); font-size: 12px; }
.thm27-wishes__messages-head { display: flex; gap: 15px; justify-content: space-between; align-items: center; }.thm27-wishes__messages-head h3 { margin-top: 10px; }.thm27-wishes__messages ul { list-style: none; padding: 0; margin: 25px 0 0; max-height: 490px; overflow: auto; }.thm27-wishes__messages li { display: flex; gap: 16px; border-bottom: 1px solid var(--bali-line); padding: 22px 0; font-size: 15px; overflow-wrap: anywhere; }.thm27-wishes__messages li > span,.thm27-wishes__messages time { color: var(--bali-accent-ink); font-size: 12px; }.thm27-wishes__messages time { display: block; }.thm27-wishes__messages li p { margin-top: 10px; color: var(--bali-muted); }
.thm27-gift__accounts { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 25px; }.thm27-gift-card { padding: 30px; border: 1px solid var(--bali-line); background: linear-gradient(135deg,#eee0c5,#fbf3e4); }.thm27-gift-card__masthead { display: flex; justify-content: space-between; font-size: 12px; color: var(--bali-accent-ink); letter-spacing: .08em; }.thm27-gift-card__bank { display: flex; gap: 15px; align-items: center; margin: 22px 0; }.thm27-gift-card__bank img { max-width: 75px; max-height: 35px; padding: 6px; background: #fff; border-radius: 3px; }.thm27-gift-card__bank strong { font-size: 12px; }.thm27-gift-card__account { display: grid; margin-bottom: 25px; overflow-wrap: anywhere; }.thm27-gift-card__account span,.thm27-gift-card__account small { color: var(--bali-muted); font-size: 12px; }.thm27-gift-card__account strong { font: 29px/1.8 var(--invie-font-heading, "Cormorant Garamond"),serif; color: var(--bali-accent-ink); }
.thm27-dresscode,.thm27-livestream,.thm27-health { display: grid; grid-template-columns: 1fr 1fr; gap: 45px; align-items: center; }.thm27-dresscode h2,.thm27-livestream h2,.thm27-health h2 { margin: 14px 0 22px; font-size: 2.8rem; }.thm27-dresscode p:not(.thm27-kicker),.thm27-livestream p:not(.thm27-kicker),.thm27-health p:not(.thm27-kicker) { font-size: 15px; color: var(--bali-muted); }.thm27-dresscode small { display: block; margin-top: 15px; font-size: 12px; }.thm27-dresscode__palette { list-style: none; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 24px; }.thm27-dresscode__swatch { display: flex; gap: 12px; align-items: center; font-size: 12px; }.thm27-dresscode__swatch > span { width: 45px; height: 60px; flex: 0 0 45px; border: 1px solid var(--bali-line); border-radius: 0; background: var(--thm27-swatch); }.thm27-dresscode__swatch small { margin-top: 3px; }
/* Beside the copy, the swatches sit as one centred group instead of two far-apart columns. */
@media (min-width: 761px) { .thm27-dresscode__palette { grid-template-columns: repeat(2, minmax(0, max-content)); justify-content: center; column-gap: 56px; } }
.thm27-livestream { background: #eee0c5; }.thm27-livestream__signal { display: none; }.thm27-livestream__access { padding: 30px; border: 1px solid var(--bali-line); }.thm27-livestream__meta { display: grid; margin-bottom: 24px; }.thm27-livestream__meta span { font-size: 12px; letter-spacing: .14em; color: var(--bali-accent-ink); }.thm27-livestream dd { margin: 0; overflow-wrap: anywhere; }.thm27-health__grid { list-style: none; padding: 0; }.thm27-health-card { padding: 18px 0; border-bottom: 1px solid var(--bali-line); }.thm27-health-card__number { margin-right: 10px; color: var(--bali-accent-ink); font-size: 12px; }.thm27-health-card strong { font-size: 13px; }
.thm27-story__timeline::before { width: 28px; left: calc(50% - 14px); background: url('../img/patra-border.svg') center / 28px 56px repeat-y; opacity: .7; }
.thm27-gallery__piece { padding: 8px; background: #fbf3e4; border: 1px solid #b58c4980; }
.thm27-story-entry__visual figcaption,.thm27-gallery__piece > span { color: #fff7e4; }
.thm27-gallery__piece small { background: #f5e8d4; }
.thm27-form { border-top: 4px solid #b58c49; }.thm27-gift-card { background: #fbf3e4 url('../img/patra-border.svg') right center / 40px 80px repeat-y; border: 1px solid #b58c4980; padding-right: 56px; }
/* Keep the closing words on paper and give the gateway its own full-height scene. */
.thm27-closing {
    --bali-accent: #8b612e;
    --bali-accent-ink: #8b612e;
    --thm27-closing-art-width: min(100vw,1200px);
    --thm27-closing-art-height: calc(var(--thm27-closing-art-width) * 2 / 3);
    position: relative; overflow: hidden;
    padding: 85px 25px calc(var(--thm27-closing-art-height) + 28px);
    text-align: center; isolation: isolate; background: #fbf3e4;
}
.thm27-closing::before {
    --thm27-closing-mask: linear-gradient(transparent,#000 27%), linear-gradient(90deg,transparent,#0003 4%,#000a 9%,#000 15%,#000 85%,#000a 91%,#0003 96%,transparent);
    content: ''; position: absolute; z-index: -1; bottom: 0; left: 50%; translate: -50% 0;
    width: var(--thm27-closing-art-width); height: var(--thm27-closing-art-height);
    background: url('../img/bali-garden.webp') center bottom / contain no-repeat;
    -webkit-mask-image: var(--thm27-closing-mask);
    mask-image: var(--thm27-closing-mask);
    -webkit-mask-composite: source-in;
    mask-composite: intersect;
    -webkit-mask-repeat: no-repeat;
    mask-repeat: no-repeat;
    pointer-events: none;
}
.thm27-closing__media { position: absolute; inset: auto 0 0; height: var(--thm27-closing-art-height); z-index: -2; mask-image: linear-gradient(transparent,#000 40%); }
.thm27-closing__media img { width: 100%; height: 100%; object-fit: cover; opacity: .025; }
.thm27-closing__monogram { display: none; }
.thm27-closing__copy { position: relative; max-width: 850px; margin: auto; }
.thm27-closing__copy::before { content: ''; display: block; height: 65px; background: url('../img/frangipani-mark.svg') center / contain no-repeat; margin-bottom: 30px; }
.thm27-closing h2 { font-size: clamp(3.5rem,7vw,6rem); margin: 25px 0; color: #643a2d; }
.thm27-closing h2 i { font-size: .55em; margin-inline: 15px; color: #9b6f39; }
.thm27-closing__copy > p:not(.thm27-kicker) { font-size: 15px; color: var(--bali-light); max-width: 470px; margin: auto; }
.thm27-closing time { display: block; margin: 24px 0; font-size: 12px; letter-spacing: .15em; }
.thm27-closing small { display: block; font-size: 12px; color: var(--bali-light); margin-top: 40px; }
.thm27-closing--names-long h2,.thm27-closing--names-xlong h2 { font-size: clamp(2.6rem,5vw,4rem); }
.thm27-sr-status { position: fixed; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
@media (max-width: 1100px) {
    .thm27-section { padding: 80px 6vw; }.thm27-intro { padding-top: 0; }.thm27-rsvp__layout,.thm27-wishes__guestbook { gap: 35px; }
    .thm27-cover__stage { width: calc(100% - 85px); }.thm27-cover__frame { width: 60%; padding-inline: 12px; }.thm27-cover h1 { font-size: 5rem; }.thm27-cover--long h1 { font-size: 3rem; }
}
@media (max-width: 760px) {
    .theme-thm27 { font-size: 14px; }.thm27-cover__stage { width: calc(100% - 36px); padding: 26px 0 85px; }.thm27-cover__frame { width: min(90%,490px); padding: 26px 24px; }.thm27-cover__crest { width: 105px; margin-bottom: 18px; }.thm27-cover h1 { font-size: clamp(3.4rem,13vw,5rem); margin-top: 18px; }.thm27-cover--long h1 { font-size: clamp(2.1rem,8vw,3rem); }.thm27-cover .thm27-divider { margin-block: 20px; }.thm27-cover__guest { margin: 22px 0; }
    .thm27-cover__border { --thm27-repeat: 120px; width: 16px; background-size: 60px var(--thm27-repeat); }.thm27-cover__border--left { left: 0; }.thm27-cover__border--right { right: 0; }.thm27-cover::before { background: linear-gradient(90deg,#fbf3e42e,#fbf3e4aa 38%,#fbf3e4aa 62%,#fbf3e42e),url('../img/bali-garden.webp') center / cover; }
    .thm27-scrollwork { width: 180px; opacity: .65; }.thm27-scrollwork--left { left: -50px; }.thm27-scrollwork--right { right: -50px; }
    .thm27-section { padding: 65px 25px; }.thm27-intro { padding-top: 0; }.thm27-nav { gap: 18px; padding-block: 18px; }.thm27-nav__links { gap: 14px; }.thm27-nav__links a { font-size: 12px; }.thm27-nav__brand { font-size: 24px; }
    .thm27-intro__grid { gap: 38px; padding: 45px 0 35px; }.thm27-intro__copy h2 { font-size: clamp(2.6rem,10vw,4rem); }.thm27-intro__portrait { width: min(100%,430px); padding: 0 35px 15px; }.thm27-intro__portrait::before,.thm27-intro__portrait::after { width: 49px; }.thm27-intro__hero { border-width: 5px; }.thm27-intro__hero figcaption { font-size: 25px; padding-inline: 12px; }
    .thm27-countdown { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 12px; padding-top: 26px; }.thm27-countdown > p { grid-column: 1 / -1; max-width: none; text-align: center; margin-bottom: 8px; }.thm27-countdown > div { min-width: 0; }.thm27-countdown strong { font-size: 38px; }
    .thm27-heading { margin-bottom: 40px; }.thm27-couple__profiles { grid-template-columns: 1fr; gap: 65px; margin-top: 45px; }.thm27-profile__media { width: min(90%,285px); }.thm27-profile__copy { max-width: 390px; margin: auto; }
    .thm27-events__tickets { grid-template-columns: minmax(0,1fr); gap: 35px; }.thm27-event { padding: 30px 24px; border-radius: 130px 130px 0 0; }.thm27-event__date strong { font-size: 65px; }.thm27-event__actions { flex-direction: column; }
    .thm27-story-entry { grid-template-columns: 1fr; gap: 24px; padding: 28px 0; }.thm27-story-entry--even .thm27-story-entry__visual { order: 0; }.thm27-story-entry__copy { border-left: 2px solid #b58c49; padding-left: 18px; }.thm27-story__timeline::before { display: none; }
    .thm27-gallery__collage { grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; }.thm27-gallery__piece { padding: 5px; }.thm27-gallery__piece:nth-child(3n+2) { margin-top: 0; }.thm27-gallery__piece:nth-child(2n) { margin-top: 25px; }.thm27-gallery-dialog { padding: 12px; }
    .thm27-gift__accounts,.thm27-rsvp__layout,.thm27-wishes__guestbook,.thm27-wishes__featured,.thm27-dresscode,.thm27-livestream,.thm27-health { grid-template-columns: 1fr; gap: 28px; }.thm27-rsvp__aside { text-align: center; }.thm27-rsvp__mark { display: none; }.thm27-form { padding: 24px 20px; }.thm27-wish-card { padding: 24px; }.thm27-gift-card { padding: 26px 50px 26px 26px; }.thm27-dresscode h2,.thm27-livestream h2,.thm27-health h2 { font-size: 2.5rem; }
    .thm27-closing { --thm27-closing-art-width: max(100vw,480px); padding-top: 70px; padding-bottom: calc(var(--thm27-closing-art-height) + 20px); }.thm27-closing h2 span { display: block; }.thm27-closing h2 i { display: block; line-height: 1.4; }
}
@media (max-width: 359px) {
    .thm27-cover__frame { padding-inline: 15px; }.thm27-cover h1 { font-size: 3.2rem; }.thm27-cover--long h1 { font-size: 2rem; }.thm27-nav__links { gap: 9px; }.thm27-section { padding-inline: 20px; }.thm27-cover .thm27-button { padding-inline: 18px; font-size: 12px; }
}
@media (prefers-reduced-motion: reduce) {
    .theme-thm27 *, .theme-thm27 *::before, .theme-thm27 *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; }.theme-thm27 [data-thm27-reveal] { opacity: 1 !important; transform: none !important; }.thm27-dust { display: none; }
}

/* Floating controls use the shared dock (theme-system.css), coloured for this theme. */
.thm27-dock { --theme-dock-bg: #96553eea; --theme-dock-fg: #fff5df; --theme-dock-border: #bf985c; --theme-dock-bg-on-dark: #fbf3e4f2; --theme-dock-fg-on-dark: #8e4833; --theme-dock-border-on-dark: #bf985c; }
/* Decorative motion is paused from labelled buttons on the cover and in the closing, away from the music control. */
.thm27-motion-toggle { display: flex; min-height: 44px; margin: 14px auto 0; padding: 0 8px; align-items: center; border: 0; background: none; color: inherit; font-family: inherit; font-size: 12px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; text-decoration: underline; text-underline-offset: 5px; cursor: pointer; opacity: .85; }
.thm27-motion-toggle:hover { opacity: 1; }
.thm27-motion-toggle--cover { position: absolute; z-index: 6; top: max(12px, env(safe-area-inset-top)); right: max(12px, env(safe-area-inset-right)); min-height: 36px; margin: 0; padding: 0 14px; border: 1px solid #bf985c; border-radius: 999px; background: #96553eea; color: #fff5df; letter-spacing: .08em; text-decoration: none; opacity: 1; }
@media (prefers-reduced-motion: reduce) { .thm27-motion-toggle { display: none; } }

/* Portrait screens crop the 3:2 garden to the empty sky between the gates.
   Each gate half is laid on its own side instead, so the candi bentar frames
   the names and the kernel's split opening parts the two halves. */
@media (orientation: portrait) and (max-width: 900px) {
    .thm27-cover::before {
        background:
            linear-gradient(90deg,#fbf3e42e,#fbf3e4aa 38%,#fbf3e4aa 62%,#fbf3e42e),
            /* Each crop is 564x1024, so at 100vh tall it is 55.08vh wide: the
               left gate's inner edge lands at 44vw, the right gate's at 56vw. */
            url('../img/bali-gate-left.webp') calc(44vw - 55.08vh) center / auto 100vh no-repeat,
            url('../img/bali-gate-right.webp') 56vw center / auto 100vh no-repeat,
            url('../img/bali-garden.webp') center / cover;
    }
}

/* Long names on a short desktop screen: the 12px type floor made the cover a
   few pixels taller than 900px, so the long title and guest block tighten. */
@media (min-width: 761px) and (max-height: 920px) {
    .thm27-cover--long h1 { font-size: clamp(2.3rem, 3.4vw, 3.2rem); }
    .thm27-cover__guest { margin-block: 20px 16px; }
}



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

/* Guestbook numbers stay on one line beside the entry. */
.thm27-wishes__messages li > span { flex: none; min-width: 2.4ch; white-space: nowrap; }

/* Phones: the story chapters and gift accounts swipe sideways, one card at a
   time with the next peeking in, instead of stacking into a very long page. */
@media (max-width: 760px) {
    .thm27-story__timeline,
    .thm27-gift__accounts {
        display: flex;
        gap: 16px;
        overflow-x: auto;
        overscroll-behavior-x: contain;
        scroll-snap-type: x mandatory;
        scrollbar-width: none;
        padding-bottom: 8px;
    }
    .thm27-story__timeline::-webkit-scrollbar,
    .thm27-gift__accounts::-webkit-scrollbar { display: none; }
    .thm27-story__timeline::before { display: none; }
    .thm27-story-entry,
    .thm27-gift-card {
        flex: 0 0 86%;
        min-width: 0;
        scroll-snap-align: start;
    }
    .thm27-story-entry { align-content: start; padding: 0; }
    .thm27-story__timeline:focus-visible,
    .thm27-gift__accounts:focus-visible { outline: 2px solid currentColor; outline-offset: 4px; }
}

/* Swipe rails scroll sideways only: slides still waiting off-screen fade in without rising, so they never lengthen the rail. */
@media (max-width: 760px) {
    .thm27-story__timeline, .thm27-gift__accounts { overflow-y: hidden; }
    .thm27-motion-ready .thm27-story__timeline [data-thm27-reveal]:not(.is-visible),
    .thm27-motion-ready .thm27-gift__accounts [data-thm27-reveal]:not(.is-visible) { transform: none; }
}

/* Gallery: two tracks per photo on wider screens centre a short last row, and a lone last photo on mobile sits in the middle. */
@media (min-width: 761px) {
    .thm27-gallery__collage { grid-template-columns: repeat(6, minmax(0, 1fr)); }
    .thm27-gallery__piece { grid-column: span 2; }
    .thm27-gallery__piece:last-child:nth-child(3n+1) { grid-column: 3 / span 2; }
    .thm27-gallery__piece:nth-last-child(2):nth-child(3n+1) { grid-column: 2 / span 2; }
}
@media (max-width: 760px) {
    .thm27-gallery__piece:last-child:nth-child(odd) { grid-column: 1 / -1; justify-self: center; width: calc((100% - 12px) / 2); }
}

/* Names wrap only between words: a name shrinks to its line instead (the templates estimate --thm27-name-em). */
.thm27-cover h1, .thm27-closing h2 { container-type: inline-size; }
.thm27-cover h1 span, .thm27-closing h2 span { font-size: min(1em, max(1rem, 92cqi / var(--thm27-name-em, 3))); overflow-wrap: break-word; }

/* Video, Kirim Kado and event counts (2026-10 revision) ------------------------- */

/* Films sit in the gallery's own mats: one film centred, two or more in pairs with an odd last
   film centred under them. */
.thm27-video { --theme-video-gap: 28px; --theme-video-radius: 0; --theme-video-border: transparent; --theme-video-frame: #643a2d; --theme-video-button: #fbf3e4; --theme-video-button-text: #8e4833; }
.thm27-video .theme-video__list { display: flex; flex-wrap: wrap; justify-content: center; }
.thm27-video .theme-video__item { flex: 0 1 100%; padding: 8px; border: 1px solid #b58c4980; background: #fbf3e4; }
.thm27-video:not([data-video-count="1"]) .theme-video__item { flex-basis: calc((100% - var(--theme-video-gap)) / 2); }
.theme-thm27 .thm27-video .theme-video__play { --theme-focus: #ffffff; border-radius: 16px; }
.theme-thm27 .thm27-video .theme-video__play:focus-visible { box-shadow: 0 0 0 9px rgb(67 36 26 / 50%); }
body.theme-thm27 .thm27-video .theme-video__caption { margin: 10px 0 4px; color: var(--bali-accent-ink); font: italic 500 1.3rem/1.4 var(--invie-font-heading, "Cormorant Garamond"), Georgia, serif; }

/* Kirim Kado: each address on a card in the gift-card look, the delivery label as its masthead.
   One card sits centred; two share a row. */
.thm27-gift-address .theme-gift-address__list { gap: 25px; width: 100%; }
.thm27-gift-address .theme-gift-address__card { flex: 0 1 34rem; align-items: flex-start; gap: 0; padding: 30px 56px 30px 30px; border: 1px solid #b58c4980; background: #fbf3e4 url('../img/patra-border.svg') right center / 40px 80px repeat-y; color: inherit; text-align: left; }
.thm27-gift-address .theme-gift-address__list:not([data-address-count="1"]) .theme-gift-address__card { flex-basis: calc((100% - 25px) / 2); max-width: 34rem; }
.thm27-gift-address .theme-gift-address__card::before { content: "Alamat pengiriman"; margin-bottom: 22px; color: var(--bali-accent-ink); font-size: 12px; letter-spacing: .08em; line-height: 1.6; }
.thm27-gift-address .theme-gift-address__card:lang(en)::before { content: "Delivery address"; }
body.theme-thm27 .thm27-gift-address .theme-gift-address__label { color: var(--bali-muted); font-size: 12px; letter-spacing: 0; text-transform: none; opacity: 1; }
body.theme-thm27 .thm27-gift-address .theme-gift-address__name { margin: 2px 0 10px; color: var(--bali-accent-ink); font: 500 clamp(1.65rem, 2.3vw, 1.9rem)/1.25 var(--invie-font-heading, "Cormorant Garamond"), Georgia, serif; }
body.theme-thm27 .thm27-gift-address .theme-gift-address__phone a { display: inline-flex; align-items: center; min-height: 44px; font-size: 14px; font-weight: 600; text-decoration-color: var(--bali-line); }
body.theme-thm27 .thm27-gift-address .theme-gift-address__address { max-width: none; font-size: 14px; line-height: 1.75; }
body.theme-thm27 .thm27-gift-address .theme-gift-address__note { margin-top: 10px; color: var(--bali-muted); font-size: 13px; opacity: 1; }
body.theme-thm27 .thm27-gift-address .theme-gift-address__copy { margin-top: auto; }
.thm27-gift-address .theme-gift-address__card > :nth-last-child(2) { margin-bottom: 24px; }

/* One event sits centred and a little wider; an odd last event centres under the pair above. */
@media (min-width: 761px) {
    .thm27-events__tickets { grid-template-columns: repeat(4, minmax(0, 1fr)); }
    .thm27-events__tickets > .thm27-event { grid-column: span 2; }
    .thm27-events__tickets > .thm27-event:last-child:nth-child(odd) { grid-column: 2 / span 2; }
    .thm27-events__tickets[data-event-count="1"] { grid-template-columns: minmax(0, 680px); justify-content: center; }
    .thm27-events__tickets[data-event-count="1"] > .thm27-event:only-child { grid-column: 1; }
}

@media (max-width: 760px) {
    .thm27-video:not([data-video-count="1"]) .theme-video__item { flex-basis: 100%; }
    .thm27-video .theme-video__item { padding: 5px; }
    .thm27-gift-address .theme-gift-address__list[data-address-count] .theme-gift-address__card { flex-basis: 100%; max-width: none; padding: 26px 50px 26px 26px; }
}

/* The film mat takes the event cards' gate: an arched top with the candi bentar crest above the
   picture. The arch radius and top padding keep the picture's corners inside the curve. */
.thm27-video .theme-video__item { padding: 26px 14px 14px; border: 1px solid #d9b876; border-radius: 160px 160px 0 0; background: #f5e8d4; }
.thm27-video .theme-video__item::before { content: ''; display: block; height: 54px; margin: 0 auto 18px; background: url('../img/gate-crest.svg') center / contain no-repeat; }
@media (max-width: 760px) {
    .thm27-video .theme-video__item { padding: 20px 8px 8px; border-radius: 110px 110px 0 0; }
    .thm27-video .theme-video__item::before { height: 40px; margin-bottom: 12px; }
}

/* 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-thm27) :where(h4, p, small, li, blockquote, figcaption) {
    overflow-wrap: break-word;
}

/* Preview audit (2026-10-26) ------------------------------------------------ */

/* The cover's pause pill clears the patra side border. */
.thm27-motion-toggle--cover { right: max(52px, env(safe-area-inset-right)); }
@media (max-width: 760px) { .thm27-motion-toggle--cover { right: max(24px, env(safe-area-inset-right)); } }
