:root {
  --paper:#f6f1e8;
  --wine:#581d2b;
  --muted:#82656b;
  --line:#581d2b42;
  --serif:Georgia,'Times New Roman','Songti SC','STSong','SimSun',serif
}
* {
  box-sizing:border-box
}
html {
  scroll-behavior:smooth;
  scroll-padding-top:30px
}
body {
  margin:0;
  background:var(--paper);
  color:var(--wine);
  font-family:var(--serif);
  -webkit-font-smoothing:antialiased
}
button,a {
  -webkit-tap-highlight-color:transparent
}
button {
  font-family:inherit
}
a {
  color:inherit
}
button:focus-visible,a:focus-visible,summary:focus-visible {
  outline:2px solid var(--wine);
  outline-offset:7px
}
::selection {
  background:var(--wine);
  color:var(--paper)
}
.site {
  max-width:1680px;
  margin:auto
}
.masthead {
  display:flex;
  align-items:center;
  justify-content:space-between;
  margin:0 3.2%;
  height:76px;
  border-bottom:1px solid var(--wine);
  font-size:15px;
  letter-spacing:4px
}
.monogram {
  font-size:25px;
  letter-spacing:3px;
  text-decoration:none
}
.masthead time {
  letter-spacing:2px
}
.hero {
  display:grid;
  grid-template-columns:1.03fr 1fr;
  gap:5.6%;
  padding:42px 7% 36px;
  align-items:center
}
.hero-copy {
  position:relative;
  z-index:2;
  padding:0 0 12px
}
.hero h1 {
  font-weight:400;
  font-style:italic;
  font-size:clamp(76px,10.2vw,155px);
  line-height:.86;
  letter-spacing:-8px;
  margin:5px 0 26px
}
.hero h1 span {
  display:block
}
.prelude {
  font-size:19px;
  letter-spacing:6px;
  margin:26px 0 24px
}
.short-rule {
  width:45px;
  height:1px;
  background:var(--wine);
  margin:25px 0
}
.names {
  font-size:clamp(24px,3.35vw,48px);
  font-weight:400;
  letter-spacing:3px;
  margin:0 0 14px;
  white-space:nowrap
}
.names em {
  font-size:.85em;
  font-weight:400;
  letter-spacing:0;
  margin:0 7px
}
.hero-subtitle {
  font-size:16px;
  line-height:1.8;
  letter-spacing:2px;
  margin:0 0 28px
}
.primary {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:30px;
  border:1px solid var(--wine);
  background:var(--wine);
  color:var(--paper);
  padding:17px 27px;
  font-size:18px;
  letter-spacing:3px;
  text-decoration:none;
  cursor:pointer;
  transition:background .3s,transform .3s
}
.primary:hover {
  background:#74283b;
  transform:translateY(-2px)
}
.arrow {
  width:30px;
  height:18px;
  fill:none;
  stroke:currentColor;
  stroke-width:1.3
}
.portrait {
  position:relative;
  margin:0;
  aspect-ratio: .86;
  max-height:650px
}
.portrait:after {
  content:'';
  position:absolute;
  inset:-6px -15px 0 7px;
  border:1px solid var(--wine);
  border-radius:50% 50% 0 0;
  z-index:0;
  pointer-events:none;
  transform:rotate(1deg)
}
.portrait-inner {
  overflow:hidden;
  border-radius:50% 50% 0 0;
  height:100%;
  position:relative;
  z-index:1;
  background:#d8c2ac
}
.portrait img {
  width:100%;
  height:100%;
  object-fit:cover;
  object-position:center;
  display:block;
  animation:photoIn 1.8s ease-out both
}
.portrait figcaption {
  position:absolute;
  bottom:24px;
  left:0;
  width:100%;
  color:var(--paper);
  font-size:14px;
  letter-spacing:6px;
  text-align:center;
  text-shadow:0 1px 7px #220a11;
  z-index:2
}
.portrait figcaption:before,.portrait figcaption:after {
  content:'';
  display:inline-block;
  width:26px;
  height:1px;
  background:currentColor;
  vertical-align:middle;
  margin:0 15px
}
.ribbon {
  overflow:hidden;
  background:var(--wine);
  color:var(--paper);
  padding:18px 0;
  font-size:17px;
  letter-spacing:5px;
  white-space:nowrap;
  text-align:center
}
.ribbon span {
  display:inline-block
}
.summary {
  display:grid;
  grid-template-columns:1fr 1.1fr 1.15fr;
  padding:30px 5%;
  gap:4%
}
.summary>div+div {
  border-left:1px solid var(--line);
  padding-left:10%
}
.label {
  font-size:11px;
  letter-spacing:4px;
  margin:0 0 11px;
  font-weight:400
}
.summary p {
  font-size:clamp(16px,1.85vw,25px);
  letter-spacing:1px;
  margin:0;
  line-height:1.6
}
.parting {
  display:flex;
  align-items:center;
  gap:32px;
  justify-content:center;
  padding:0 4% 34px;
  font-style:italic;
  font-size:20px;
  letter-spacing:5px
}
.parting:before,.parting:after {
  content:'';
  height:1px;
  background:var(--line);
  flex:1
}
.letter-section {
  border-top:1px solid var(--line);
  padding:90px 8%;
  display:grid;
  grid-template-columns:.65fr 1fr;
  gap:10%;
  position:relative
}
.letter-mark {
  font-size:105px;
  font-style:italic;
  line-height:1.05;
  font-weight:400;
  margin:13px 0 24px;
  letter-spacing:-5px
}
.letter-lead .label {
  margin-bottom:28px
}
.letter-lead p {
  font-size:14px;
  letter-spacing:3px;
  line-height:2
}
.seal {
  border:1px solid var(--wine);
  width:66px;
  height:66px;
  border-radius:50%;
  display:grid;
  place-items:center;
  font-size:31px;
  margin:30px 0;
  transform:rotate(-12deg)
}
.letter-body {
  padding-top:7px
}
.letter-body h2 {
  font-size:30px;
  letter-spacing:5px;
  font-weight:400;
  margin:0 0 25px
}
.letter-body p {
  font-size:17px;
  line-height:2.35;
  letter-spacing:1.5px;
  margin:0 0 18px
}
.signature {
  padding-top:14px;
  border-top:1px solid var(--line);
  margin-top:28px!important
}
.signature small {
  font-size:14px;
  color:var(--muted);
  display:block;
  margin-top:6px
}
.event-section {
  background:var(--wine);
  color:var(--paper);
  padding:65px 8%
}
.event-top {
  display:flex;
  justify-content:space-between;
  align-items:end;
  padding-bottom:35px;
  border-bottom:1px solid #f6f1e83b;
  gap:25px
}
.event-top h2 {
  font-size:34px;
  letter-spacing:4px;
  font-weight:400;
  margin:10px 0 0
}
.countdown {
  text-align:right
}
.countdown .digits {
  white-space:nowrap;
  font-size:38px;
  letter-spacing:3px;
  font-variant-numeric:tabular-nums
}
.countdown .units {
  font-size:12px;
  letter-spacing:3px;
  color:#f6f1e8bd;
  margin-top:9px
}
.logistics {
  display:grid;
  grid-template-columns:.7fr 1.3fr;
  gap:10%;
  padding-top:35px
}
.logistics h3 {
  font-size:24px;
  font-weight:400;
  margin:12px 0
}
.logistics p {
  font-size:16px;
  line-height:1.9;
  margin:0 0 20px;
  letter-spacing:1px
}
.secondary {
  border:1px solid #f6f1e868;
  background:transparent;
  color:var(--paper);
  padding:12px 20px;
  cursor:pointer;
  display:inline-flex;
  align-items:center;
  gap:20px;
  font-size:14px;
  letter-spacing:2px;
  text-decoration:none;
  transition:background .3s
}
.secondary:hover {
  background:#ffffff12
}
.secondary:focus-visible {
  outline-color:var(--paper)
}
.address {
  font-style:normal
}
.closing {
  text-align:center;
  padding:75px 24px 35px
}
.closing h2 {
  font-size:clamp(65px,9vw,120px);
  font-style:italic;
  font-weight:400;
  letter-spacing:-5px;
  margin:0 0 20px
}
.closing p {
  font-size:16px;
  letter-spacing:5px;
  line-height:1.8
}
.closing .footerline {
  display:flex;
  justify-content:space-between;
  max-width:1200px;
  margin:60px auto 0;
  border-top:1px solid var(--line);
  padding-top:20px;
  align-items:center;
  font-size:11px;
  letter-spacing:2px
}
.petals {
  pointer-events:none;
  position:fixed;
  inset:0;
  overflow:hidden;
  z-index:5
}
.petal {
  position:absolute;
  top:-36px;
  left:var(--left);
  width:var(--size);
  height:var(--size);
  opacity:0;
  animation:heartFall var(--duration) linear var(--delay) infinite;
}
.petal::before {
  content:'';
  display:block;
  width:100%;
  height:100%;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23b85b73' d='M12 21S2 14.6 2 7.8C2 1.9 9.4.9 12 6c2.6-5.1 10-4.1 10 1.8C22 14.6 12 21 12 21Z'/%3E%3C/svg%3E") center / contain no-repeat;
  animation:heartSway var(--sway) ease-in-out var(--delay) infinite alternate;
}
/* Keep a generous density on phones without covering the invitation text. */
@media (max-width:600px) {
  .petal:nth-child(3n) { display:none; }
}
.petals.is-paused .petal,
.petals.is-paused .petal::before { animation-play-state:paused; }
@media (prefers-reduced-motion:reduce) {
  .petals { display:none; }
}
.toast {
  position:fixed;
  bottom:30px;
  left:50%;
  transform:translate(-50%,20px);
  background:var(--paper);
  border:1px solid var(--wine);
  color:var(--wine);
  padding:16px 25px;
  box-shadow:0 8px 32px #38141b20;
  z-index:20;
  opacity:0;
  visibility:hidden;
  transition:.25s;
  max-width:90%;
  width:max-content;
  font-size:14px
}
.toast.show {
  opacity:1;
  visibility:visible;
  transform:translate(-50%,0)
}
dialog {
  border:1px solid var(--wine);
  background:var(--paper);
  color:var(--wine);
  padding:30px;
  max-width:min(90%,440px);
  font-family:var(--serif)
}
dialog::backdrop {
  background:#210a1377
}
dialog p {
  line-height:2
}
dialog button {
  padding:10px 20px;
  background:var(--wine);
  color:var(--paper);
  border:0;
  cursor:pointer
}
.reveal {
  opacity:1
}
.js .reveal {
  opacity:0;
  transform:translateY(20px);
  transition:opacity .85s,transform .85s
}
.js .reveal.visible {
  opacity:1;
  transform:none
}
.no-motion * {
  animation:none!important;
  scroll-behavior:auto!important;
  transition:none!important
}
.no-motion .reveal {
  opacity:1;
  transform:none
}
@keyframes heartFall {
  0% {
    opacity:0;
    transform:translate3d(0,0,0);
  }
  8%,85% { opacity:var(--opacity); }
  100% {
    opacity:0;
    transform:translate3d(var(--drift),calc(100vh + 72px),0);
  }
}
@keyframes heartSway {
  from { transform:translateX(-10px) rotate(calc(var(--tilt) - 16deg)); }
  to { transform:translateX(10px) rotate(calc(var(--tilt) + 16deg)); }
}
@keyframes photoIn {
  from {
    transform:scale(1.05)
  }
  to {
    transform:scale(1)
  }
}
@media(min-width:1680px) {
  .hero h1 {
    font-size:170px
  }
}
@media(max-width:900px) {
  .event-top {
    display:block
  }
  .countdown {
    text-align:left;
    margin-top:26px
  }
  .masthead {
    font-size:11px;
    letter-spacing:2px;
    height:64px
  }
  .hero {
    padding:40px 5% 35px;
    gap:5%
  }
  .hero h1 {
    font-size:10.5vw;
    letter-spacing:-5px
  }
  .prelude {
    font-size:14px;
    letter-spacing:3px
  }
  .names {
    font-size:3.4vw;
    letter-spacing:1px
  }
  .hero-subtitle {
    font-size:13px;
    letter-spacing:0
  }
  .primary {
    padding:15px 18px;
    font-size:15px;
    gap:18px
  }
  .portrait {
    aspect-ratio:.73
  }
  .ribbon {
    font-size:12px;
    letter-spacing:3px
  }
  .parting {
    font-size:16px
  }
  .summary {
    padding:26px 5%
  }
  .summary p {
    font-size:16px
  }
  .letter-section {
    padding:65px 7%;
    gap:8%
  }
  .letter-mark {
    font-size:80px
  }
  .letter-body p {
    font-size:15px
  }
  .event-section {
    padding:50px 7%
  }
  .logistics {
    gap:7%
  }
  .logistics h3 {
    font-size:21px
  }
}
@media(max-width:600px) {
  .masthead {
    height:60px;
    margin:0 6%;
    font-size:10px;
    letter-spacing:1px
  }
  .monogram {
    font-size:21px
  }
  .masthead>span {
    font-size:8px;
    letter-spacing:1.2px
  }
  .masthead time {
    font-size:10px;
    letter-spacing:.7px
  }
  .hero {
    display:flex;
    flex-direction:column;
    padding:36px 7% 30px;
    gap:35px
  }
  .hero-copy {
    width:100%;
    padding:0
  }
  .hero h1 {
    font-size:24vw;
    letter-spacing:-5px;
    line-height:.9;
    margin:0 0 24px
  }
  .prelude {
    font-size:13px;
    letter-spacing:4px;
    margin:20px 0
  }
  .short-rule {
    margin:20px 0
  }
  .names {
    font-size:27px;
    letter-spacing:2px
  }
  .names em {
    margin:0 4px
  }
  .hero-subtitle {
    font-size:13px;
    letter-spacing:1px;
    margin:0 0 23px
  }
  .primary {
    padding:14px 20px;
    font-size:15px;
    letter-spacing:2px
  }
  .portrait {
    width:91%;
    aspect-ratio:.86;
    max-height:none;
    align-self:center
  }
  .portrait:after {
    inset:-5px -11px 0 5px
  }
  .portrait figcaption {
    font-size:10px;
    letter-spacing:3px;
    bottom:19px
  }
  .portrait figcaption:before,.portrait figcaption:after {
    width:16px;
    margin:0 10px
  }
  .ribbon {
    font-size:10px;
    letter-spacing:1.5px;
    padding:16px 0
  }
  .summary {
    grid-template-columns:1fr;
    padding:10px 7% 20px;
    gap:0
  }
  .summary>div {
    padding:20px 0;
    display:flex;
    justify-content:space-between;
    gap:12px;
    align-items:center;
    border-bottom:1px solid var(--line)
  }
  .summary>div+div {
    border-left:0;
    padding-left:0
  }
  .summary .label {
    font-size:9px;
    letter-spacing:2px;
    margin:0
  }
  .summary p {
    font-size:15px;
    letter-spacing:.5px
  }
  .parting {
    gap:14px;
    padding:4px 7% 30px;
    font-size:13px;
    letter-spacing:2px;
    white-space:nowrap
  }
  .letter-section {
    display:block;
    padding:48px 8%
  }
  .letter-lead {
    margin-bottom:35px
  }
  .letter-lead .label {
    margin-bottom:15px
  }
  .letter-mark {
    font-size:68px;
    letter-spacing:-3px;
    margin:0 0 12px
  }
  .letter-lead p {
    font-size:12px;
    letter-spacing:2px;
    margin:0
  }
  .seal {
    position:absolute;
    right:9%;
    top:98px;
    width:48px;
    height:48px;
    font-size:24px;
    margin:0
  }
  .letter-body h2 {
    font-size:24px;
    letter-spacing:3px
  }
  .letter-body p {
    font-size:15px;
    line-height:2.25;
    letter-spacing:1px
  }
  .signature small {
    font-size:13px
  }
  .event-section {
    padding:45px 8%
  }
  .event-top {
    display:block;
    padding-bottom:26px
  }
  .event-top h2 {
    font-size:28px
  }
  .countdown {
    text-align:left;
    margin-top:28px
  }
  .countdown .digits {
    font-size:31px
  }
  .countdown .units {
    font-size:10px;
    letter-spacing:2px
  }
  .logistics {
    grid-template-columns:1fr;
    gap:35px;
    padding-top:29px
  }
  .logistics h3 {
    font-size:22px
  }
  .logistics p {
    font-size:15px
  }
  .closing {
    padding:50px 7% 25px
  }
  .closing h2 {
    font-size:66px;
    letter-spacing:-3px
  }
  .closing p {
    font-size:13px;
    letter-spacing:3px
  }
  .closing .footerline {
    margin-top:35px;
    font-size:9px;
    letter-spacing:1px
  }
  .toast {
    font-size:12px;
    padding:14px 18px
  }
}
@media(prefers-reduced-motion:reduce) {
  html {
    scroll-behavior:auto
  }
  *,*:before,*:after {
    animation:none!important;
    transition:none!important
  }
  .js .reveal {
    opacity:1;
    transform:none
  }
}
@media print {
  .petals,.primary,.secondary,.toast {
    display:none
  }
  .hero {
    break-inside:avoid
  }
  .reveal {
    opacity:1!important;
    transform:none!important
  }
  body {
    print-color-adjust:exact;
    -webkit-print-color-adjust:exact
  }
  .letter-section {
    padding:30px 8%
  }
  .event-section {
    padding:30px 8%
  }
  .closing {
    padding:25px
  }
}

/* 移动端阅读与无障碍增强，延续原稿配色与版式。 */
.skip-link {
  position: fixed;
  top: 12px;
  left: 12px;
  padding: 12px 18px;
  background: var(--wine);
  color: var(--paper);
  z-index: 30;
  transform: translateY(-160%);
}
.skip-link:focus { transform: none; }
.hero > *, .summary > *, .logistics > *, .event-top > * { min-width: 0; }
button, .primary, .secondary { min-height: 44px; }
.arrow { flex-shrink: 0; }
.ribbon { white-space: normal; padding-inline: 20px; line-height: 1.8; }
.countdown .digits { font-size: clamp(22px, 3vw, 38px); letter-spacing: 1px; }
.event-top { flex-wrap: wrap; }
.lunar-date { display: block; margin-top: 6px; font-weight: 600; }
.summary .lunar-date { font-size: 18px; letter-spacing: 1px; }
.logistics .lunar-date { font-size: 20px; margin: 8px 0 12px; }
.logistics .location-note { font-size: 12px; opacity: .75; margin-top: 16px; }
.family-contact { border-top: 1px solid #f6f1e83b; margin-top: 38px; padding-top: 32px; }
.family-contact h3 { font-size: 24px; font-weight: 400; letter-spacing: 2px; margin: 12px 0; }
.contact-intro { font-size: 15px; line-height: 1.9; margin: 0 0 24px; }
.contact-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; }
.contact-card { border: 1px solid #f6f1e850; padding: 24px; }
.contact-person { margin: 0 0 12px; font-size: 16px; letter-spacing: 2px; }
.contact-person span { margin-left: 12px; font-size: 20px; }
.contact-phone { display: inline-flex; align-items: center; min-height: 44px; font-size: clamp(21px, 2.5vw, 30px); letter-spacing: 2px; text-underline-offset: 6px; font-variant-numeric: tabular-nums; }
.contact-phone[aria-disabled="true"] { text-decoration: none; }
.contact-phone:focus-visible { outline-color: var(--paper); }
.contact-status { display: block; font-size: 12px; margin-top: 8px; opacity: .8; letter-spacing: 1px; }
.toast { bottom: max(24px, env(safe-area-inset-bottom)); line-height: 1.7; }
dialog { width: min(90%, 440px); max-height: 85dvh; overflow-y: auto; }
dialog p { user-select: text; }
html.no-motion { scroll-behavior: auto; }
.no-motion *, .no-motion *::before, .no-motion *::after {
  animation: none !important;
  transition: none !important;
}
@media (max-width: 600px) {
  .hero h1 { font-size: clamp(68px, 22vw, 132px); }
  .names { font-size: clamp(22px, 6.8vw, 32px); letter-spacing: 1px; }
  .event-top h2 { font-size: clamp(23px, 6.1vw, 28px); letter-spacing: 2px; line-height: 1.6; }
  .countdown .digits { font-size: clamp(21px, 6.7vw, 31px); letter-spacing: 0; }
  .countdown .units { letter-spacing: 1px; line-height: 1.8; }
  .closing h2 { font-size: clamp(42px, 11vw, 66px); letter-spacing: -2px; }
  .closing .footerline { flex-wrap: wrap; gap: 12px; justify-content: center; }
  .summary p { text-align: right; }
  .contact-list { grid-template-columns: 1fr; gap: 16px; }
  .contact-card { padding: 20px; }
  .summary .lunar-date { font-size: 16px; letter-spacing: 0; }
  .logistics .lunar-date { font-size: 19px; }
  .toast { text-align: center; }
}

@media print {
  .skip-link { display: none; }
  .countdown { display: none; }
}

/* Editorial photo album: wine velvet, generous spacing and quiet typography. */
.memories {
  --album-ink: #f4ebdf;
  display: grid;
  grid-template-columns: minmax(0, .78fr) minmax(0, 1.22fr);
  gap: 7%;
  padding: 90px 7% 80px;
  background: #2b171c;
  color: var(--album-ink);
}
.memories-heading { padding-top: 24px; }
.memories .label { color: #c1a293; font-size: 10px; letter-spacing: 3px; line-height: 2; }
.memories h2 { font-size: clamp(46px, 5.2vw, 83px); font-weight: 400; line-height: 1.13; letter-spacing: -3px; margin: 40px 0 30px; }
.memories h2 em { font-weight: 400; color: #d0af9b; }
.memories-poem { font-size: 16px; line-height: 2.25; letter-spacing: 3px; color: #ddcbbc; }
.memories-signature { font-size: 49px; font-style: italic; letter-spacing: 4px; margin-top: 68px; }
.memories-signature span { font-size: 29px; color: #b58b7d; padding: 0 5px; }
.memories-note { color: #b69a8c; font-size: 11px; letter-spacing: 4px; margin-top: 18px; }
.memories-album { min-width: 0; }
.memory-stage {
  --memory-background: url('../images/gallery/memory-03.jpg');
  position: relative;
  isolation: isolate;
  aspect-ratio: .94;
  overflow: hidden;
  background: #211317;
  border: 1px solid #dec2a22b;
  touch-action: pan-y pinch-zoom;
}
.memory-stage::before { content: ''; position: absolute; inset: -30px; background: linear-gradient(#29161c9c, #29161cc9), var(--memory-background) center / cover; filter: blur(20px); opacity: .6; transition: background 1.2s; }
.memory-stage::after { content: ''; pointer-events: none; position: absolute; z-index: 3; inset: 0; background: linear-gradient(#1c0b1055, transparent 15%, transparent 80%, #1c0b10ba); }
.memory-slide { position: absolute; inset: 38px 28px 45px; margin: 0; opacity: 0; transition: opacity 1.2s ease; pointer-events: none; }
.memory-slide.is-active { opacity: 1; z-index: 1; }
.memory-slide img { display: block; width: 100%; height: 100%; object-fit: contain; transform: scale(1); transition: transform 7s linear; }
.memory-slide.is-active img { transform: scale(1.035); }
.memory-topline, .memory-bottomline { position: absolute; z-index: 4; left: 22px; right: 22px; display: flex; align-items: center; justify-content: space-between; gap: 12px; pointer-events: none; }
.memory-topline { top: 17px; font-size: 8px; letter-spacing: 2px; color: #ead3be; }
.memory-bottomline { bottom: 19px; font-size: 11px; letter-spacing: 2px; }
#memory-number { font-size: 12px; font-variant-numeric: tabular-nums; letter-spacing: 3px; }
.memory-progress { position: absolute; z-index: 5; bottom: 0; left: 0; right: 0; height: 2px; background: #f6ebdf20; }
.memory-progress span { display: block; height: 100%; width: 0; background: #d8b49c; }
.memory-stage.is-playing .memory-progress span { animation: albumProgress 6s linear both; }
.memory-navigation { display: flex; justify-content: space-between; align-items: center; gap: 15px; padding: 15px 0; }
.memory-caption { font-size: 12px; letter-spacing: 2px; line-height: 1.8; color: #d7c2b3; margin: 0; }
.memory-arrows { display: flex; gap: 8px; flex-shrink: 0; }
.memory-arrows button { width: 45px; height: 45px; background: transparent; border: 1px solid #d5bba247; color: var(--album-ink); border-radius: 50%; font-size: 21px; cursor: pointer; transition: background .2s, border-color .2s; }
.memory-arrows button:hover { background: #dec2a215; border-color: #d5bba2b0; }
.memory-thumbnails { display: grid; grid-template-columns: repeat(8, minmax(0, 1fr)); gap: 8px; }
.memory-thumb { position: relative; padding: 0; border: 1px solid transparent; background: #211317; aspect-ratio: .8; min-height: 44px; overflow: hidden; cursor: pointer; opacity: .48; transition: opacity .3s, border-color .3s; }
.memory-thumb img { width: 100%; height: 100%; display: block; object-fit: cover; }
.memory-thumb span { position: absolute; inset: auto 0 0; font-size: 9px; padding: 8px 0 5px; color: #fff0e2; background: linear-gradient(transparent, #1c0b10bb); letter-spacing: 1px; }
.memory-thumb:hover, .memory-thumb.is-active { opacity: 1; }
.memory-thumb.is-active { border-color: #e1bfa0; }
.memories :focus-visible { outline: 2px solid #e1bfa0; outline-offset: 4px; }
@keyframes albumProgress { from { width: 0; } to { width: 100%; } }
@media (max-width: 900px) {
  .memories { gap: 5%; padding: 60px 5%; grid-template-columns: .8fr 1.2fr; }
  .memories h2 { font-size: 49px; letter-spacing: -2px; }
  .memories-poem { font-size: 13px; letter-spacing: 1px; }
  .memories-signature { margin-top: 34px; }
  .memory-stage { aspect-ratio: .8; }
  .memory-slide { inset: 35px 12px 40px; }
  .memory-topline, .memory-bottomline { left: 14px; right: 14px; }
}
@media (max-width: 600px) {
  .memories { display: block; padding: 42px 7% 38px; }
  .memories-heading { padding-top: 0; }
  .memories h2 { font-size: clamp(40px, 11.5vw, 65px); margin: 22px 0 17px; }
  .memories-poem { font-size: 12px; line-height: 2; margin: 0 0 27px; }
  .memories-poem br { display: none; }
  .memories-signature, .memories-note { display: none; }
  .memory-stage { aspect-ratio: .78; }
  .memory-caption { font-size: 11px; letter-spacing: 1px; }
  .memory-arrows button { width: 40px; height: 40px; min-height: 44px; }
  .memory-thumbnails { gap: 5px; }
  .memory-thumb { min-height: 44px; aspect-ratio: .7; }
  .memory-topline { font-size: 7px; letter-spacing: 1px; }
}
@media (prefers-reduced-motion: reduce) {
  .memory-slide.is-active img { transform: none; }
}
@media print {
  .memories { display: block; break-inside: avoid; padding: 30px 7%; }
  .memories-heading { display: none; }
  .memory-stage { height: 450px; aspect-ratio: auto; }
  .memory-thumbnails, .memory-navigation { display: none; }
}

/* Desktop gallery follows the mobile page's centered, photo-led reading rhythm. */
@media screen and (min-width: 601px) {
  .site { max-width: 1440px; }
  .hero h1 { font-size: clamp(80px, 9.2vw, 137px); }
  .hero { padding-top: 38px; padding-bottom: 38px; }
  .memories {
    display: block;
    padding: 48px 6% 42px;
    background: radial-gradient(ellipse at 50% 50%, #48262f 0%, #2b171c 72%);
  }
  .memories-heading { position: relative; text-align: center; padding: 0; margin: 0 auto 28px; }
  .memories .label { font-size: 9px; letter-spacing: 3px; margin-bottom: 15px; }
  .memories h2 { font-size: clamp(36px, 4.2vw, 61px); line-height: 1.15; letter-spacing: -2px; margin: 0 0 14px; }
  .memories h2 br { display: none; }
  .memories-poem { font-size: 13px; line-height: 1.8; letter-spacing: 2px; margin: 0; }
  .memories-poem br { display: none; }
  .memories-signature, .memories-note { display: none; }
  .memories-album { max-width: 1100px; margin-inline: auto; }
  .memory-stage {
    height: clamp(600px, 70vh, 740px);
    aspect-ratio: auto;
    background: #21131755;
    border-color: #dec2a21f;
  }
  .memory-stage::before { filter: blur(35px); opacity: .24; }
  .memory-stage::after { background: linear-gradient(#1c0b1040, transparent 15%, transparent 84%, #1c0b1080); }
  .memory-slide {
    inset: 30px 28% 38px;
    transition: opacity 1.2s ease, left 1.2s ease, right 1.2s ease, filter 1.2s ease;
  }
  .memory-slide.is-active { z-index: 2; background: #28161bdd; box-shadow: 0 18px 50px #10060b40; }
  .memory-slide.is-active img { transform: none; }
  .memory-slide img { transition: opacity 1.2s ease; }
  .memory-slide.is-previous, .memory-slide.is-upcoming {
    top: 72px;
    bottom: 80px;
    opacity: .62;
    z-index: 0;
    filter: saturate(.85);
  }
  .memory-slide.is-previous { left: -3%; right: 74%; }
  .memory-slide.is-upcoming { left: 74%; right: -3%; }
  .memory-slide.is-previous img, .memory-slide.is-upcoming img { object-fit: cover; transform: none; }
  .memory-stage.is-landscape .memory-slide.is-active { left: 15%; right: 15%; }
  .memory-stage.is-landscape .memory-slide.is-previous { right: 86%; }
  .memory-stage.is-landscape .memory-slide.is-upcoming { left: 86%; }
  .memory-topline { left: 24px; right: 24px; top: 14px; }
  .memory-bottomline { left: 24px; right: 24px; bottom: 15px; }
  .memory-navigation { padding: 13px 0; }
  .memory-thumbnails { max-width: 560px; margin-inline: auto; gap: 10px; }
  .memory-thumb { aspect-ratio: 1; }
  .letter-section { gap: 8%; }
  .letter-body p { letter-spacing: 1px; }
}
@media screen and (min-width: 601px) and (max-width: 1024px) {
  .memories { padding-inline: 5%; }
  .memories h2 { font-size: clamp(33px, 4.8vw, 48px); }
  .memory-stage { height: 480px; }
  .memory-slide { left: 23%; right: 23%; }
  .memory-slide.is-previous { right: 80%; }
  .memory-slide.is-upcoming { left: 80%; }
  .memory-stage.is-landscape .memory-slide.is-active { left: 10%; right: 10%; }
  .memory-stage.is-landscape .memory-slide.is-previous { right: 93%; }
  .memory-stage.is-landscape .memory-slide.is-upcoming { left: 93%; }
}

/* A compact mobile itinerary keeps dates, directions and family contacts together. */
.action-short { display: none; }
@media screen and (max-width: 600px) {
  .event-section { padding: 28px 7% 24px; }
  .event-section .label { display: none; }
  .event-top { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 14px; padding-bottom: 19px; }
  .event-top h2 { font-size: 19px; line-height: 1.6; letter-spacing: 1px; margin: 0; max-width: 10em; }
  .countdown { margin: 0; text-align: right; max-width: 155px; }
  .countdown .digits { font-size: 18px; letter-spacing: 0; }
  .countdown .units { font-size: 9px; letter-spacing: 0; line-height: 1.6; margin-top: 5px; }
  .action-full { display: none; }
  .action-short { display: inline; }
  .logistics { display: block; padding-top: 0; }
  .logistics > div { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 3px 12px; align-items: center; padding: 20px 0; }
  .logistics > div + div { border-top: 1px solid #f6f1e833; }
  .logistics h3 { font-size: 18px; line-height: 1.6; margin: 0; grid-column: 1; }
  .logistics p { font-size: 14px; line-height: 1.65; margin: 0; letter-spacing: .4px; grid-column: 1; }
  .logistics .lunar-date { font-size: 17px; line-height: 1.7; margin: 0; }
  .logistics .secondary { grid-column: 2; grid-row: 1 / 4; padding: 10px 12px; font-size: 13px; letter-spacing: 1px; align-self: center; }
  .logistics .secondary .arrow { display: none; }
  .logistics .event-where h3 { font-size: 13px; letter-spacing: 1px; opacity: .8; font-weight: 400; }
  .event-where .address { grid-column: 1; }
  .event-where #address { font-size: 17px; line-height: 1.7; }
  .logistics .location-note { grid-column: 1 / -1; font-size: 11px; margin: 6px 0 0; }
  .family-contact { padding-top: 18px; margin-top: 0; }
  .family-contact h3 { font-size: 18px; letter-spacing: 1px; margin: 0 0 10px; }
  .contact-intro { display: none; }
  .contact-list { display: block; }
  .contact-card { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 12px; align-items: center; border: 0; padding: 9px 0; }
  .contact-card + .contact-card { border-top: 1px solid #f6f1e825; }
  .contact-person { grid-row: 1 / 3; margin: 0; font-size: 13px; letter-spacing: 0; }
  .contact-person span { margin-left: 7px; font-size: 17px; }
  .contact-phone { justify-self: end; font-size: 19px; letter-spacing: .6px; min-height: 44px; }
  .contact-status { text-align: right; margin: -2px 0 0; font-size: 10px; line-height: 1.5; letter-spacing: .5px; }
  .closing { padding: 26px 7% 18px; }
  .closing h2 { font-size: 36px; letter-spacing: -1.5px; margin: 0 0 10px; }
  .closing p { font-size: 12px; line-height: 1.7; letter-spacing: 2px; margin: 0; }
  .closing .footerline { justify-content: space-between; gap: 8px; margin-top: 18px; padding-top: 12px; font-size: 9px; letter-spacing: .5px; }
}
@media screen and (max-width: 359px) {
  .event-top { grid-template-columns: 1fr; gap: 10px; }
  .event-top h2 { max-width: none; }
  .countdown { text-align: left; max-width: none; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
  .countdown .units { margin-top: 0; }
  .contact-phone { font-size: 17px; }
}
@media screen and (max-width: 600px) {
  .logistics .event-where .secondary { grid-row: 1 / 3; }
  .logistics .event-where .location-note { grid-row: 3; }
}

/* A first-screen countdown introduces the wedding; travel details stay at the end. */
.hero-countdown { max-width: 430px; margin: 23px 0 25px; padding: 17px 0 14px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.countdown-eyebrow { font-size: 12px; letter-spacing: 3px; margin: 0 0 13px; }
.countdown-display { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; }
.clock-part { display: flex; align-items: baseline; gap: 7px; }
.clock-part b {
  font-family: Arial, 'Helvetica Neue', sans-serif;
  font-size: clamp(30px, 3.2vw, 46px);
  font-weight: 400;
  font-style: normal;
  font-variant-numeric: lining-nums tabular-nums;
  font-feature-settings: 'lnum' 1, 'tnum' 1;
  min-width: 2ch;
  line-height: 1.15;
  letter-spacing: 0;
}
.clock-part small { font-size: 12px; color: var(--muted); }
.countdown-note { font-size: 10px; letter-spacing: 2px; color: var(--muted); margin: 12px 0 0; line-height: 1.6; }
.countdown-display.is-message { display: block; font-size: 26px; line-height: 1.6; }
.event-top { display: block; }
@media screen and (max-width: 600px) {
  .hero-countdown { max-width: none; margin: 19px 0 22px; padding: 14px 0 12px; }
  .countdown-eyebrow { font-size: 11px; margin-bottom: 10px; letter-spacing: 2px; }
  .countdown-display { gap: 10px; }
  .clock-part { gap: 6px; }
  .clock-part b { font-size: 34px; }
  .clock-part small { font-size: 12px; }
  .countdown-note { margin-top: 9px; font-size: 10px; letter-spacing: 1px; }
  .countdown-display.is-message { font-size: 23px; }
  .event-top h2 { max-width: none; }
}
@media print { .hero-countdown { display: none; } }

/* The final information section begins directly with the wedding details. */
.event-section > .logistics { padding-top: 0; }
