/* KAWINKU R31 — ORIGINAL WEDDING EXPERIENCE
   Based on observation of publicly visible interaction patterns.
   No copied site artwork, stylesheets or code. */
:root {
  --kw31-ease: cubic-bezier(.21,.63,.27,1);
}
.kw31-page {
  --kw31-shadow: 0 18px 65px rgba(25,18,19,.17);
  font-synthesis: none;
}
.kw31-page .w-contents {
  display: flex;
  flex-direction: column;
  min-width: 0;
  overflow: clip;
}
.kw31-page .w-contents > * {
  flex-shrink: 0;
}
.kw31-page .w-top {
  order: 0;
}
.kw31-page .w-scene {
  order: 1;
}
.kw31-page .w-intro {
  order: 2;
}
.kw31-page .w-couple {
  order: 3;
}
.kw31-page .w-countdown {
  order: 4;
}
.kw31-page .w-events {
  order: 5;
}
.kw31-page .w-story {
  order: 6;
}
.kw31-page .w-gallery {
  order: 7;
}
.kw31-page .w-gifts {
  order: 8;
}
.kw31-page .w-wishes {
  order: 9;
}
.kw31-page .w-end {
  order: 10;
}
.kw31-page .w-quick-nav {
  order: 11;
}
.kw31-page .w-footer {
  order: 12;
}
/* Independent pacing for editorial and cinematic collections. */
.kw31-page.kw31-luxury .w-intro {
  order: 2;
}
.kw31-page.kw31-luxury .w-countdown {
  order: 3;
}
.kw31-page.kw31-luxury .w-couple {
  order: 4;
}
.kw31-page.kw31-luxury .w-events {
  order: 5;
}
.kw31-page.kw31-luxury .w-gallery {
  order: 6;
}
.kw31-page.kw31-luxury .w-story {
  order: 7;
}
.kw31-page.kw31-motion .w-intro {
  order: 2;
}
.kw31-page.kw31-motion .w-couple {
  order: 3;
}
.kw31-page.kw31-motion .w-story {
  order: 4;
}
.kw31-page.kw31-motion .w-countdown {
  order: 5;
}
.kw31-page.kw31-motion .w-events {
  order: 6;
}
.kw31-page.kw31-motion .w-gallery {
  order: 7;
}
.kw31-page .w-contents .w-quick-nav {
  position: fixed;
  bottom: 17px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 30;
}
/* Arch, borders and real foreground layering on the cover. */
.kw31-cover {
  --kw31-edge: clamp(18px,5%,42px);
}
.kw31-cover .kw31-filigree {
  position: absolute;
  z-index: 3;
  top: 11%;
  bottom: 10%;
  width: 20%;
  opacity: .8;
  pointer-events: none;
  background: repeating-linear-gradient(180deg,transparent 0 24px,color-mix(in srgb,var(--kw-accent) 55%,transparent) 25px 26px,transparent 27px 58px);
  mask-image: linear-gradient(180deg,transparent,#000 15%,#000 82%,transparent);
}
.kw31-cover .kw31-filigree-left {
  left: 3%;
  transform: skewY(-8deg);
  border-left: 1px solid color-mix(in srgb,var(--kw-accent) 55%,transparent);
}
.kw31-cover .kw31-filigree-right {
  right: 3%;
  transform: skewY(8deg);
  border-right: 1px solid color-mix(in srgb,var(--kw-accent) 55%,transparent);
}
.kw31-cover .kw31-corner {
  position: absolute;
  z-index: 3;
  pointer-events: none;
  left: 50%;
  transform: translateX(-50%);
  font: clamp(25px,5vw,52px)/1 Georgia,serif;
  color: var(--kw-accent);
  text-shadow: 0 1px 6px var(--kw-bg);
  opacity: .85;
}
.kw31-cover .kw31-corner-top {
  top: 5.6%;
}
.kw31-cover .kw31-corner-bottom {
  bottom: 5.6%;
}
.kw31-cover .kw30-foreground img {
  filter: drop-shadow(0 10px 12px rgba(0,0,0,.26));
  animation: kw31Sway 13s ease-in-out alternate infinite;
  will-change: transform;
}
.kw31-cover .kw30-scene-image {
  animation: kw31Dolly 19s var(--kw31-ease) alternate infinite;
  will-change: transform;
}
.kw31-cover .kw30-ambient {
  opacity: .17;
}
.kw31-cover .kw30-frame {
  inset: 17px 17px;
  border-width: 1.5px;
  box-shadow: inset 0 0 0 4px color-mix(in srgb,var(--kw-accent) 15%,transparent);
  opacity: .8;
}
.kw31-cover .kw30-frame:after {
  inset: 7px;
}
.kw31-cover .kw30-content {
  z-index: 7;
  width: min(78%,480px);
  max-width: calc(100% - 68px);
  gap: 11px;
  padding: 60px 0 46px;
  filter: drop-shadow(0 2px 8px color-mix(in srgb,var(--kw-bg) 40%,transparent));
}
.kw31-cover .kw30-kicker {
  font-size: clamp(22px,6cqw,39px);
  white-space: normal;
}
.kw31-cover .kw30-series {
  letter-spacing: .19em;
  text-wrap: balance;
}
.kw31-cover .kw30-names {
  isolation: isolate;
}
.kw31-cover .kw30-name {
  line-height: 1.04;
  letter-spacing: -.035em;
  max-width: 100%;
  text-wrap: balance;
}
.kw31-cover .kw30-to {
  max-width: min(320px,100%);
  border-radius: 10px;
  min-height: 59px;
  padding: 12px 16px;
  box-shadow: 0 14px 34px rgba(10,10,10,.15);
}
.kw31-cover .kw30-to span {
  letter-spacing: .14em;
}
.kw31-cover .kw30-to strong {
  font-size: clamp(15px,3.5cqw,21px);
  line-height: 1.24;
  overflow-wrap: anywhere;
}
.kw31-cover .kw30-open.w-open {
  min-height: 49px;
  padding: 13px 30px!important;
  box-shadow: 0 12px 26px rgba(0,0,0,.2);
  text-transform: none;
  transition: transform .23s,box-shadow .23s;
}
.kw31-cover .kw30-open.w-open:hover {
  transform: translateY(-2px);
  box-shadow: 0 18px 38px rgba(0,0,0,.21);
}
.kw31-cover .kw30-signature {
  bottom: 17px;
  letter-spacing: .15em;
  opacity: .7;
}
/* Dramatic but readable photo treatment: visible photograph, opaque greeting. */
.kw31-cover.kw30-photo:has(.kw30-uploaded-cover) .kw30-uploaded-cover {
  opacity: .92;
  object-position: center 20%;
  filter: saturate(.85) contrast(1.05);
}
.kw31-cover.kw30-photo:has(.kw30-uploaded-cover) .kw30-picture-veil {
  z-index: 2;
  opacity: 1;
  background: linear-gradient(180deg,color-mix(in srgb,var(--kw-bg) 4%,transparent) 2%,color-mix(in srgb,var(--kw-bg) 10%,transparent) 22%,color-mix(in srgb,var(--kw-bg) 82%,transparent) 44%,var(--kw-bg) 99%);
}
.kw31-cover.kw30-photo:has(.kw30-uploaded-cover) .kw30-content {
  justify-content: flex-end;
  padding-top: 190px;
}
/* Theme groups have materially different compositions, not color swaps. */
.kw31-cover.kw30-seruni .kw30-content,.kw31-cover.kw30-kasturi .kw30-content {
  padding-top: clamp(90px,13vh,145px);
}
.kw31-cover.kw30-seruni .kw30-name,.kw31-cover.kw30-marbella .kw30-name {
  font-weight: 400;
  font-style: italic;
}
.kw31-cover.kw30-ratih .kw31-filigree,.kw31-cover.kw30-nocturne .kw31-filigree {
  border: 2px double color-mix(in srgb,var(--kw-accent) 72%,transparent);
  background: repeating-linear-gradient(180deg,transparent 0 38px,color-mix(in srgb,var(--kw-accent) 58%,transparent) 39px 41px,transparent 42px 70px);
  width: 11%;
}
.kw31-cover.kw30-ratih .kw30-content {
  padding-top: 130px;
}
.kw31-cover.kw30-aksara .kw31-filigree {
  display: none;
}
.kw31-cover.kw30-aksara .kw30-content {
  border: 0;
  border-top: 1px solid var(--kw-accent);
  border-bottom: 1px solid var(--kw-accent);
  width: min(75%,520px);
  padding: 36px 5px;
  background: color-mix(in srgb,var(--kw-panel) 94%,transparent);
}
.kw31-cover.kw30-aksara .kw30-crest {
  margin: 4px 0;
}
.kw31-cover.kw30-nocturne .kw30-frame {
  border-radius: 240px 240px 0 0;
}
.kw31-cover.kw30-nocturne .kw30-content {
  padding-top: 110px;
}
.kw31-cover.kw30-marbella .kw30-content {
  background: color-mix(in srgb,var(--kw-panel) 93%,transparent);
  border: 1px solid color-mix(in srgb,var(--kw-accent) 55%,transparent);
  padding: 54px 13px 38px;
  border-radius: 200px 200px 8px 8px;
}
.kw31-cover.kw30-senandika .kw30-content,.kw31-cover.kw30-purnama .kw30-content {
  padding-top: 100px;
}
.kw31-cover.kw30-senandika .kw31-filigree,.kw31-cover.kw30-purnama .kw31-filigree {
  opacity: .3;
}
.kw31-cover.kw30-senandika .kw30-crest,.kw31-cover.kw30-purnama .kw30-crest {
  animation: kw31Glow 3s ease-in-out infinite alternate;
}
/* Interior: full-height scenes between richly differentiated content chapters. */
.kw31-page .w-scene {
  min-height: 76svh;
  max-height: none;
  height: 86svh;
  isolation: isolate;
  overflow: hidden;
}
.kw31-page .w-scene .kw31-scene-halo {
  position: absolute;
  inset: 0;
  z-index: 2;
  pointer-events: none;
  background: radial-gradient(ellipse at 50% 50%,transparent 22%,color-mix(in srgb,var(--kw-bg) 42%,transparent) 80%);
}
.kw31-page .w-scene .w-scene-art {
  filter: saturate(1.04);
  animation: kw31Dolly 22s ease-in-out alternate infinite;
}
.kw31-page .w-scene-caption {
  z-index: 7!important;
  width: min(74%,490px);
  max-width: 500px;
  box-sizing: border-box;
  padding: 38px 20px!important;
  backdrop-filter: blur(13px);
  border-color: color-mix(in srgb,var(--kw-accent) 75%,transparent)!important;
}
.kw31-page .w-scene-caption strong {
  font-size: clamp(36px,8vw,72px)!important;
  line-height: 1.08;
  overflow-wrap: anywhere;
}
.kw31-page .w-scene-caption:before {
  content: '✧';
  display: block;
  font: 30px Georgia,serif;
  color: var(--kw-accent);
  margin: 0 auto 12px;
}
.kw31-page .w-section {
  isolation: isolate;
  overflow: clip;
  min-height: 0;
  padding-top: clamp(82px,11vh,145px)!important;
  padding-bottom: clamp(82px,11vh,145px)!important;
}
.kw31-page .w-section::after {
  content: '✧  ·  ✧';
  position: absolute;
  bottom: 26px;
  left: 50%;
  transform: translateX(-50%);
  font: 14px/1 Georgia,serif;
  white-space: nowrap;
  letter-spacing: .25em;
  color: var(--kw-accent);
  opacity: .7;
  pointer-events: none;
}
.kw31-page .w-section h2 {
  font-size: clamp(38px,7vw,72px)!important;
  line-height: 1.06!important;
  letter-spacing: -.024em!important;
  text-wrap: balance;
}
.kw31-page .w-section :is(p,blockquote) {
  line-height: 1.8;
}
.kw31-page .w-section .w-eyebrow {
  letter-spacing: .18em!important;
}
.kw31-page .w-intro {
  min-height: 540px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;
  background-image: radial-gradient(circle at 50% 20%,color-mix(in srgb,var(--kw-flower) 12%,transparent),transparent 66%)!important;
}
.kw31-page .w-intro h1 {
  font-size: clamp(43px,8vw,82px);
  line-height: 1.05;
  text-wrap: balance;
  overflow-wrap: anywhere;
  max-width: 650px;
}
.kw31-page .w-intro > p {
  max-width: 620px;
}
.kw31-page .w-couple {
  background: var(--kw-panel)!important;
}
.kw31-page .w-people {
  margin-top: 45px;
  gap: clamp(18px,5vw,50px);
}
.kw31-page .w-people article {
  display: grid;
  justify-items: center;
  align-content: start;
  gap: 13px;
  min-width: 0;
  max-width: 340px;
}
.kw31-page .w-people :is(img,.w-person-placeholder) {
  width: min(100%,240px);
  aspect-ratio: 3/4;
  object-fit: cover;
  box-shadow: 0 15px 38px rgba(0,0,0,.14);
}
.kw31-page .w-people h3 {
  font-size: clamp(26px,4vw,38px);
  overflow-wrap: anywhere;
}
.kw31-page .w-countdown {
  background: linear-gradient(155deg,var(--kw-bg),var(--kw-panel))!important;
  min-height: 360px;
}
.kw31-page .count-numbers {
  max-width: 710px;
  margin: 35px auto 0;
}
.kw31-page .count-numbers > div {
  background: var(--kw-panel);
  border: 1px solid color-mix(in srgb,var(--kw-accent) 35%,transparent);
  border-radius: 100px 100px 10px 10px;
  box-shadow: 0 12px 28px rgba(0,0,0,.07);
}
.kw31-page .count-numbers b {
  color: var(--kw-ink)!important;
}
.kw31-page .w-events {
  background: var(--kw-bg)!important;
}
.kw31-page .w-events-grid {
  gap: 25px;
  align-items: stretch;
  max-width: 860px;
  margin-inline: auto;
}
.kw31-page .w-events .w-event {
  box-shadow: 0 25px 65px rgba(0,0,0,.11)!important;
  border: 1px solid color-mix(in srgb,var(--kw-accent) 67%,transparent)!important;
  min-width: 0;
  padding: 43px 25px!important;
}
.kw31-page .w-events .w-event h3 {
  font-size: clamp(29px,5vw,44px);
}
.kw31-page .w-events .w-event p {
  overflow-wrap: anywhere;
}
.kw31-page .w-story {
  min-height: 550px;
  background: linear-gradient(160deg,var(--kw-panel),var(--kw-bg))!important;
}
.kw31-page .kw31-story-paper {
  position: relative;
  max-width: 650px;
  padding: 42px clamp(20px,5vw,58px);
  margin: 32px auto 0;
  border: 1px solid color-mix(in srgb,var(--kw-accent) 40%,transparent);
  box-shadow: 0 18px 50px rgba(0,0,0,.09);
  background: var(--kw-panel);
  border-radius: 180px 180px 16px 16px;
}
.kw31-page .kw31-story-paper p {
  position: relative;
  z-index: 2;
  max-width: 58ch;
  margin: auto;
  text-wrap: pretty;
}
.kw31-page .kw31-story-quote {
  position: absolute;
  font: 110px/.8 Georgia,serif;
  left: 20px;
  top: 34px;
  color: var(--kw-accent);
  opacity: .18;
}
.kw31-page .w-photos {
  display: grid;
  grid-template-columns: repeat(12,minmax(0,1fr));
  gap: 11px;
  max-width: 900px;
  margin-inline: auto;
}
.kw31-page .w-photos img {
  grid-column: span 4;
  width: 100%;
  height: clamp(170px,30vw,335px);
  object-fit: cover;
  min-width: 0;
  box-shadow: 0 10px 27px rgba(0,0,0,.1);
}
.kw31-page .w-photos img:nth-child(6n + 1),.kw31-page .w-photos img:nth-child(6n + 4) {
  grid-column: span 6;
  height: clamp(220px,42vw,420px);
}
.kw31-page .w-gifts {
  background: var(--kw-bg)!important;
}
.kw31-page .w-gifts .w-gift {
  border-radius: 14px!important;
  box-shadow: 0 15px 44px rgba(0,0,0,.1);
}
.kw31-page .w-wishes {
  background: var(--kw-panel)!important;
}
.kw31-page .w-wishes .wish-shell {
  gap: 28px;
  max-width: 970px;
  margin: 38px auto 0;
}
.kw31-page .w-wishes .wish-editor,.kw31-page .w-wishes .wish-feed {
  border-radius: 24px!important;
  box-shadow: 0 14px 42px rgba(0,0,0,.08);
  padding: clamp(20px,3vw,36px);
}
.kw31-page .combined-guestbook label {
  font-size: 13px!important;
}
.kw31-page .combined-guestbook :is(input,select,textarea) {
  min-height: 50px;
  border-radius: 10px!important;
  font-size: 15px!important;
}
.kw31-page .w-end {
  min-height: 540px;
  background: linear-gradient(145deg,var(--kw-bg),var(--kw-panel))!important;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
.kw31-page .w-end h2 {
  overflow-wrap: anywhere;
  max-width: 850px;
}
/* Characterful interior sections: motion as chapters, special as garden, luxury as magazine. */
.kw31-page.kw31-spesial .w-couple::before,.kw31-page.kw31-spesial .w-end::before {
  content: '';
  position: absolute;
  inset: 0 0 auto 0;
  height: 145px;
  opacity: .3;
  pointer-events: none;
  background: radial-gradient(ellipse at 10% 0,var(--kw-flower),transparent 30%),radial-gradient(ellipse at 90% 0,var(--kw-flower),transparent 30%);
}
.kw31-page.kw31-luxury .w-section {
  border-top: 1px solid color-mix(in srgb,var(--kw-accent) 55%,transparent);
}
.kw31-page.kw31-luxury .w-couple,.kw31-page.kw31-luxury .w-story {
  background: var(--kw-bg)!important;
}
.kw31-page.kw31-luxury .w-section h2 {
  font-weight: 400!important;
  text-transform: none;
}
.kw31-page.kw31-motion .w-intro,.kw31-page.kw31-motion .w-story,.kw31-page.kw31-motion .w-end {
  background: radial-gradient(ellipse at 50% 10%,color-mix(in srgb,var(--kw-accent) 20%,transparent),transparent 58%),var(--kw-bg)!important;
}
.kw31-page.kw31-motion .w-scene {
  height: 100svh;
}
.kw31-page.kw30-nocturne .w-event,.kw31-page.kw30-aksara .w-event {
  border-radius: 4px!important;
}
/* Preview cards retain the underlying catalog sizing. */
.kw31-cover.compact .kw31-filigree,.kw31-cover.compact .kw31-corner {
  display: none;
}
.kw31-cover.compact .kw30-content {
  padding: 10px 0;
  gap: 2px;
  max-width: calc(100% - 30px);
}
.kw31-cover.compact .kw30-name {
  font-size: clamp(10px,6cqw,23px);
}
.kw31-cover.compact .kw30-frame {
  inset: 7px;
}
@keyframes kw31Sway {
  from {
    transform: translate3d(-3px,2px,0) rotate(-.5deg);
  }
  to {
    transform: translate3d(4px,-6px,0) rotate(.45deg);
  }
}
@keyframes kw31Dolly {
  from {
    transform: scale(1);
  }
  to {
    transform: scale(1.055);
  }
}
@keyframes kw31Glow {
  from {
    opacity: .64;
    filter: drop-shadow(0 0 2px var(--kw-accent));
  }
  to {
    opacity: 1;
    filter: drop-shadow(0 0 13px var(--kw-accent));
  }
}
/* Scroll reveal is opt-in and skipped for reduced motion. */
@media(prefers-reduced-motion:no-preference) {
  .kw31-page.kw31-ready .w-contents .w-section.kw31-enter {
    opacity: 0;
    transform: translate3d(0,24px,0);
    transition: opacity .7s var(--kw31-ease),transform .9s var(--kw31-ease);
  }
  .kw31-page.kw31-ready .w-contents .w-section.kw31-enter.kw31-visible {
    opacity: 1;
    transform: translate3d(0,0,0);
  }
}
@media(max-width:680px) {
  .kw31-cover .kw30-content {
    max-width: calc(100% - 56px);
    width: calc(100% - 74px);
    padding: 60px 0 44px;
    gap: 8px;
  }
  .kw31-cover .kw30-frame {
    inset: 14px;
  }
  .kw31-cover .kw31-filigree {
    width: 12%;
    opacity: .5;
  }
  .kw31-cover .kw30-series {
    font-size: 9px;
  }
  .kw31-cover .kw30-crest {
    margin: 9px 0 12px;
  }
  .kw31-cover .kw30-name {
    font-size: clamp(36px,8.6cqw,72px);
  }
  .kw31-cover .kw30-to {
    max-width: 100%;
    min-height: 57px;
  }
  .kw31-cover .kw30-to strong {
    font-size: clamp(14px,4cqw,19px);
  }
  .kw31-cover.kw30-marbella .kw30-content {
    padding: 34px 11px 30px;
  }
  .kw31-page .w-scene-caption {
    max-width: calc(100% - 70px)!important;
    width: calc(100% - 80px);
  }
  .kw31-page .w-scene-caption strong {
    font-size: clamp(31px,9vw,55px)!important;
  }
  .kw31-page .w-section {
    padding: 90px 23px!important;
  }
  .kw31-page .w-section h2 {
    font-size: clamp(36px,10vw,52px)!important;
  }
  .kw31-page .w-people {
    gap: 18px;
  }
  .kw31-page .w-people :is(img,.w-person-placeholder) {
    max-width: 190px;
  }
  .kw31-page .w-photos {
    gap: 8px;
  }
  .kw31-page .w-photos img {
    grid-column: span 6;
    height: 190px;
  }
  .kw31-page .w-photos img:nth-child(6n + 1),.kw31-page .w-photos img:nth-child(6n + 4) {
    grid-column: span 12;
    height: 300px;
  }
  .kw31-page .w-events .w-event {
    padding: 35px 18px!important;
  }
}
@media(max-width:360px) {
  .kw31-cover .kw30-content {
    width: calc(100% - 62px);
    max-width: calc(100% - 50px);
  }
  .kw31-cover .kw31-filigree {
    opacity: .3;
  }
  .kw31-cover .kw30-crest {
    margin: 4px 0 6px;
  }
  .kw31-cover .kw30-date {
    margin-bottom: 5px;
  }
  .kw31-cover .kw30-to {
    min-height: 52px;
  }
}
@media(prefers-reduced-motion:reduce) {
  .kw31-cover *,.kw31-page .w-scene * {
    animation: none!important;
    transition: none!important;
  }
}
