:root {
  --blush: #f2c4c4;
  --rose: #d4728a;
  --deep-rose: #a84e65;
  --champagne: #f7e9d7;
  --gold: #c9a96e;
  --cream: #fdf6f0;
  --dark: #2d1b1e;
  --text: #4a2e34;
}
* { margin:0; padding:0; box-sizing:border-box; }
html {
  scroll-behavior:smooth;
  touch-action: manipulation;
  overscroll-behavior-y: none;
  background: var(--cream);
}
body {
  background:var(--cream);
  font-family:'Montserrat',sans-serif;
  color:var(--text);
  overflow-x:hidden;
  cursor:none;
  padding-bottom: env(safe-area-inset-bottom);
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
  overscroll-behavior-y: none;
}

@media(hover:none) and (pointer:coarse){
  html { scroll-behavior: auto; }
}

/* ─── cursor ─────────────────────────────── */
.cursor {
  width:12px; height:12px;
  background:var(--rose); border-radius:50%;
  position:fixed; pointer-events:none; z-index:9999;
  transform:translate(-50%,-50%);
  mix-blend-mode:multiply;
}
.cursor-ring {
  width:36px; height:36px;
  border:1.5px solid var(--rose); border-radius:50%;
  position:fixed; pointer-events:none; z-index:9998;
  transform:translate(-50%,-50%);
  transition:transform .15s ease;
  opacity:.6;
}

/* ─── confetti canvas ─────────────────────── */
#confetti-canvas {
  position:fixed; top:0; left:0;
  width:100%; height:100%;
  pointer-events:none; z-index:0;
}

/* ─── common helpers ─────────────────────── */
@keyframes fadeUp {
  from{opacity:0;transform:translateY(24px)}
  to{opacity:1;transform:translateY(0)}
}
.reveal {
  opacity:0; transform:translateY(30px);
  transition:opacity .7s ease,transform .7s ease;
}
.reveal.visible { opacity:1; transform:translateY(0); }

.section-title {
  font-family:'Playfair Display',serif;
  font-size:clamp(28px,6vw,50px);
  color:var(--dark);
  margin-bottom:14px;
}
.section-sub {
  font-family:'Cormorant Garamond',serif;
  font-size:18px; font-style:italic;
  color:var(--rose); margin-bottom:52px;
}

/* ─── HERO ───────────────────────────────── */
.hero {
  min-height:100vh;
  display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  position:relative; text-align:center;
  contain:layout style;
  padding:60px 20px;
  background:
    radial-gradient(ellipse at 20% 10%,rgba(242,196,196,.45) 0%,transparent 55%),
    radial-gradient(ellipse at 80% 80%,rgba(212,114,138,.25) 0%,transparent 55%),
    radial-gradient(ellipse at 50% 50%,rgba(247,233,215,.6) 0%,transparent 70%),
    var(--cream);
  overflow:hidden; z-index:1;
}
.hero::before {
  content:''; position:absolute; inset:0;
  background-image:radial-gradient(circle,rgba(212,114,138,.12) 1px,transparent 1px);
  background-size:32px 32px; pointer-events:none;
}
.petal {
  position:absolute; border-radius:50% 0 50% 0;
  opacity:0; animation:floatPetal linear infinite;
  pointer-events:none;
}
@keyframes floatPetal {
  0%{transform:translateY(110vh) rotate(0deg);opacity:0}
  5%{opacity:.6} 90%{opacity:.4}
  100%{transform:translateY(-10vh) rotate(720deg);opacity:0}
}
.tag {
  font-size:11px; font-weight:500;
  letter-spacing:4px; text-transform:uppercase;
  color:var(--rose); opacity:0;
  animation:fadeUp .8s ease forwards .3s;
  margin-bottom:24px;
}
.hero-ribbon {
  display:inline-flex; align-items:center;
  gap:14px; margin-bottom:32px;
}
.hero-ribbon .line {
  height:1px; width:60px;
  background:linear-gradient(to right,transparent,var(--gold));
}
.hero-ribbon .line.right {
  background:linear-gradient(to left,transparent,var(--gold));
}
.hero-ribbon .diamond {
  width:6px; height:6px;
  background:var(--gold); transform:rotate(45deg);
}
h1 {
  font-family:'Playfair Display',serif;
  font-size:clamp(56px,12vw,110px);
  font-weight:700; line-height:.95;
  color:var(--dark); opacity:0;
  animation:fadeUp 1s ease forwards .6s;
}
h1 em { font-style:italic; color:var(--deep-rose); display:block; }
.subtitle {
  font-family:'Cormorant Garamond',serif;
  font-size:clamp(18px,3.5vw,26px);
  font-style:italic; color:var(--rose);
  margin-top:20px; opacity:0;
  animation:fadeUp .9s ease forwards 1s;
  letter-spacing:1px;
}
.divider {
  display:flex; align-items:center; justify-content:center;
  gap:12px; margin:40px auto;
  opacity:0; animation:fadeUp .8s ease forwards 1.3s;
}
.divider svg{color:var(--rose)}
.divider .dline {
  height:1px; width:80px;
  background:linear-gradient(to right,transparent,var(--blush),transparent);
}
.card-wrap {
  opacity:0; animation:fadeUp .9s ease forwards 1.6s;
  width:100%; max-width:520px;
}
.info-card {
  background:rgba(255,255,255,.7);
  backdrop-filter:blur(12px);
  border:1px solid rgba(212,114,138,.2);
  border-radius:24px; padding:44px 40px;
  box-shadow:0 20px 60px rgba(168,78,101,.1),inset 0 1px 0 rgba(255,255,255,.8);
  position:relative; overflow:hidden;
}
.info-card::before {
  content:''; position:absolute;
  top:-1px; left:30px; right:30px; height:3px;
  background:linear-gradient(to right,transparent,var(--rose),transparent);
}
.info-grid {
  display:grid; grid-template-columns:1fr 1fr;
  gap:28px 20px; margin-bottom:32px;
}
.info-item { text-align:center; }
.info-item .icon { font-size:22px; margin-bottom:6px; display:block; }
.info-item .label {
  font-size:9px; letter-spacing:3px;
  text-transform:uppercase; color:var(--rose);
  font-weight:500; margin-bottom:4px;
}
.info-item .value {
  font-family:'Playfair Display',serif;
  font-size:17px; color:var(--dark); font-weight:700;
}
.info-item .value.small { font-size:14px; }
.rsvp-btn {
  display:block; width:100%;
  padding:16px 28px;
  background:linear-gradient(135deg,var(--deep-rose),var(--rose));
  color:#fff; border:none; border-radius:14px;
  font-family:'Montserrat',sans-serif;
  font-size:12px; font-weight:500;
  letter-spacing:3px; text-transform:uppercase;
  cursor:none;
  transition:transform .2s,box-shadow .2s,filter .2s;
  box-shadow:0 8px 30px rgba(168,78,101,.35);
  text-decoration:none; text-align:center;
}
.rsvp-btn:hover {
  transform:translateY(-2px);
  box-shadow:0 14px 40px rgba(168,78,101,.45);
  filter:brightness(1.05);
}

/* ─── COUNTDOWN ──────────────────────────── */
.countdown-section {
  padding:70px 20px;
  text-align:center; position:relative; z-index:1;
  background:linear-gradient(160deg,var(--dark) 0%,#3d1f28 100%);
  overflow:hidden;
}
.countdown-section::before {
  content:''; position:absolute; inset:0;
  background-image:radial-gradient(circle,rgba(242,196,196,.05) 1px,transparent 1px);
  background-size:28px 28px; pointer-events:none;
}
.countdown-section .section-title { color:var(--champagne); }
.countdown-section .section-sub   { color:var(--blush); margin-bottom:40px; }
.countdown-grid {
  display:flex; justify-content:center;
  align-items:baseline;
  flex-wrap:wrap;
  gap:0;
}
.cd-block {
  display:inline-flex; align-items:baseline; gap:4px;
  background:none; border:none; border-radius:0;
  padding:0; min-width:unset;
}
.cd-block:hover { transform:none; box-shadow:none; }
.cd-sep {
  font-family:'Great Vibes',cursive;
  font-size:clamp(40px,8vw,72px);
  color:rgba(212,114,138,.5);
  line-height:1; padding:0 6px;
  position:relative; top:4px;
}
.cd-num {
  font-family:'Great Vibes',cursive;
  font-size:clamp(52px,12vw,100px);
  color:#fff; line-height:1;
  display:inline;
  text-shadow:0 0 40px rgba(212,114,138,.4);
}
.cd-label {
  font-size:10px; letter-spacing:3px;
  text-transform:uppercase;
  color:rgba(242,196,196,.5);
  font-family:'Montserrat',sans-serif;
  font-weight:400;
  margin-left:4px;
  position:relative; top:-6px;
}
.cd-done {
  font-family:'Cormorant Garamond',serif;
  font-size:clamp(22px,5vw,36px);
  font-style:italic; color:var(--blush);
  margin-top:20px;
}

/* ─── ПРОГРАММА ──────────────────────────── */
.details {
  padding:80px 20px; text-align:center;
  position:relative; z-index:1;
  background:
    radial-gradient(ellipse at 70% 30%,rgba(247,233,215,.7) 0%,transparent 60%),
    var(--cream);
}
.program-list {
  display:flex; flex-direction:column;
  gap:0; max-width:480px; margin:0 auto;
  position:relative;
}
.program-list::before {
  content:''; position:absolute;
  left:50%; top:0; bottom:0; width:1px;
  background:linear-gradient(to bottom,transparent,var(--blush) 20%,var(--blush) 80%,transparent);
  transform:translateX(-50%);
}
.program-item {
  display:flex; align-items:center;
  gap:24px; padding:20px 0;
  opacity:0; transform:translateY(20px);
  transition:opacity .6s,transform .6s;
}
.program-item.visible{opacity:1;transform:translateY(0)}
.program-item:nth-child(odd)  { flex-direction:row-reverse; text-align:right; }
.program-item:nth-child(even) { flex-direction:row; text-align:left; }
.prog-time {
  min-width:70px; font-size:11px;
  letter-spacing:2px; color:var(--rose); font-weight:500;
}
.prog-dot {
  width:14px; height:14px;
  background:var(--rose); border-radius:50%; flex-shrink:0;
  box-shadow:0 0 0 4px rgba(212,114,138,.2);
  position:relative; z-index:1;
}
.prog-text { flex:1; font-family:'Cormorant Garamond',serif; font-size:17px; color:var(--text); }
.prog-text strong { display:block; font-size:18px; color:var(--dark); font-weight:600; }

/* ─── DRESSCODE ───────────────────────────── */
.dresscode {
  padding:90px 20px 100px; text-align:center;
  position:relative; z-index:1;
  background:linear-gradient(160deg,var(--dark) 0%,#3d1f28 100%);
  color:var(--cream); overflow:hidden;
}
.dresscode::before {
  content:''; position:absolute; inset:0;
  background-image:radial-gradient(circle,rgba(242,196,196,.06) 1px,transparent 1px);
  background-size:28px 28px; pointer-events:none;
}
.dresscode .section-title{color:var(--champagne)}
.dresscode .section-sub{color:var(--blush); margin-bottom:56px;}

/* ── color strip ── */
.color-strip {
  max-width:720px; margin:0 auto;
  position:relative; z-index:1;
}
.strip-bar {
  display:flex; border-radius:20px;
  overflow:hidden;
  height:200px;
  box-shadow:0 20px 60px rgba(0,0,0,.4);
  position:relative;
}
.strip-segment {
  flex:1;
  position:relative;
  transition:flex .4s ease;
  cursor:default;
  overflow:hidden;
}
.strip-segment:first-child { border-radius:20px 0 0 20px; }
.strip-segment:last-child  { border-radius:0 20px 20px 0; }
.strip-segment:hover { flex:1.7; }
.strip-segment::after {
  content:'';
  position:absolute; inset:0;
  background:linear-gradient(to top, rgba(0,0,0,.45) 0%, transparent 55%);
  pointer-events:none;
}
.strip-label {
  position:absolute; bottom:14px; left:0; right:0;
  text-align:center; z-index:1;
  opacity:0;
  transform:translateY(6px);
  transition:opacity .3s, transform .3s;
}
.strip-segment:hover .strip-label {
  opacity:1; transform:translateY(0);
}
.strip-label-name {
  font-family:'Great Vibes',cursive;
  font-size:22px; color:#fff;
  line-height:1; display:block;
  text-shadow:0 2px 8px rgba(0,0,0,.4);
}
.strip-label-hex {
  font-size:9px; letter-spacing:2px;
  text-transform:uppercase;
  color:rgba(255,255,255,.6);
  font-family:'Montserrat',sans-serif;
  margin-top:3px; display:block;
}
/* names always visible on mobile */
.strip-names {
  display:flex; margin-top:20px;
}
.strip-name-item {
  flex:1; text-align:center;
  font-family:'Great Vibes',cursive;
  font-size:18px; color:rgba(255,255,255,.7);
  transition:color .3s;
}
.strip-segment:nth-child(1):hover ~ .strip-names .strip-name-item:nth-child(1),
.strip-name-item:nth-child(1) { color:rgba(255,255,255,.85); }

.dc-rule {
  display:flex; align-items:center; justify-content:center;
  gap:16px; margin-top:40px;
  position:relative; z-index:1;
}
.dc-rule .rl { height:1px; width:80px; background:linear-gradient(to right,transparent,rgba(212,114,138,.35),transparent); }
.dc-rule span {
  font-family:'Cormorant Garamond',serif;
  font-size:16px; font-style:italic;
  color:rgba(242,196,196,.5);
}
/* hide old palette */
.palette { display:none; }
.swatch,.swatch-circle,.swatch-name,.swatch-hex { display:none; }

@media(max-width:600px){
  .strip-bar { height:140px; border-radius:14px; }
  .strip-segment:first-child { border-radius:14px 0 0 14px; }
  .strip-segment:last-child  { border-radius:0 14px 14px 0; }
  .strip-label { opacity:1; transform:none; }
  .strip-label-name { font-size:15px; }
  .strip-label-hex  { display:none; }
}

/* ─── GALLERY / SLIDER ────────────────────── */
.gallery {
  padding:80px 0; text-align:center;
  position:relative; z-index:1;
  background:
    radial-gradient(ellipse at 80% 20%,rgba(242,196,196,.3) 0%,transparent 55%),
    var(--cream);
  overflow:hidden;
}
.gallery .section-title,.gallery .section-sub { padding:0 20px; }

/* track wrapper */
.slider-outer {
  position:relative; width:100%;
  margin-bottom:28px;
}

/* the scrolling track */
.slider-track {
  display:flex;
  gap:16px;
  padding:24px calc(50% - min(39vw, 210px));
  overflow-x:auto;
  scroll-snap-type:x mandatory;
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
  cursor:grab;
  touch-action: pan-x;
}
.slider-track:active { cursor:grabbing; }
.slider-track::-webkit-scrollbar { display:none; }

/* each slide */
.slide {
  flex:0 0 auto;
  width: min(72vw, 360px);
  height: min(96vw, 480px);   /* 3:4 portrait — под фото с телефона */
  border-radius:20px;
  overflow:hidden;
  scroll-snap-align:center;
  position:relative;
  background:rgba(212,114,138,.08);
  border:1.5px solid rgba(212,114,138,.18);
  box-shadow:0 8px 32px rgba(168,78,101,.1);
  transition:transform .35s ease, box-shadow .35s ease;
}
.slide.active {
  transform:scale(1.03);
  box-shadow:0 20px 56px rgba(168,78,101,.3);
}
.slide {
  position:relative;
}
/* размытый фон — копия фото за основным */
.slide::before {
  content:'';
  position:absolute; inset:0;
  background-image:var(--bg);
  background-size:cover;
  background-position:center;
  filter:blur(22px) brightness(1.1) saturate(.6) opacity(.5);
  transform:scale(1.15);
  z-index:0;
  mix-blend-mode:normal;
}
/* розовый оверлей поверх размытого фона */
.slide::after {
  content:'';
  position:absolute; inset:0;
  background:linear-gradient(160deg, rgba(253,232,239,.55), rgba(242,196,196,.45));
  z-index:0;
  pointer-events:none;
}
/* img поверх обоих псевдоэлементов */
.slide img { z-index:2; }
.slide img {
  position:relative; z-index:1;
  width:100%; height:100%;
  object-fit:contain;
  display:block;
  transition:transform .4s ease;
}
.slide:hover img { transform:scale(1.02); }
.slide-placeholder {
  width:100%; height:100%;
  display:flex; flex-direction:column;
  align-items:center; justify-content:center;
  gap:10px; color:var(--rose);
  font-size:11px; letter-spacing:2px;
  text-transform:uppercase; font-weight:500;
}

/* side fade gradients */
.slider-outer::before,
.slider-outer::after {
  content:''; position:absolute;
  top:0; bottom:0; width:60px;
  pointer-events:none; z-index:2;
}
.slider-outer::before {
  left:0;
  background:linear-gradient(to right,var(--cream),transparent);
}
.slider-outer::after {
  right:0;
  background:linear-gradient(to left,var(--cream),transparent);
}

/* arrow buttons */
.sl-prev,.sl-next {
  position:absolute; top:50%; transform:translateY(-50%);
  z-index:3;
  width:44px; height:44px; border-radius:50%;
  background:rgba(255,255,255,.85);
  backdrop-filter:blur(6px);
  border:1px solid rgba(212,114,138,.3);
  color:var(--deep-rose); font-size:20px;
  display:flex; align-items:center; justify-content:center;
  cursor:pointer;
  box-shadow:0 4px 16px rgba(168,78,101,.15);
  transition:background .2s, transform .2s, box-shadow .2s;
}
.sl-prev { left:10px; }
.sl-next { right:10px; }
.sl-prev:hover,.sl-next:hover {
  background:#fff;
  transform:translateY(-50%) scale(1.08);
  box-shadow:0 8px 24px rgba(168,78,101,.25);
}

/* dots */
.slider-dots {
  display:flex; justify-content:center; gap:8px;
  flex-wrap:wrap; padding:0 20px;
}
.sl-dot {
  width:7px; height:7px; border-radius:50%;
  background:rgba(212,114,138,.25);
  transition:background .3s, transform .3s, width .3s;
  cursor:pointer;
}
.sl-dot.active {
  background:var(--rose);
  width:22px; border-radius:4px;
  transform:scale(1);
}

/* caption block */
.slide-caption-box {
  max-width:min(72vw, 360px);
  margin:16px auto 0;
  min-height:60px;
  text-align:center;
  padding:0 10px;
}
.slide-caption-text {
  font-family:'Cormorant Garamond',serif;
  font-size:17px; font-style:italic;
  color:var(--text); line-height:1.6;
  opacity:0; transform:translateY(8px);
  transition:opacity .35s ease, transform .35s ease;
}
.slide-caption-text.visible {
  opacity:1; transform:translateY(0);
}

/* counter */
.slider-counter {
  margin-top:14px;
  font-size:11px; letter-spacing:3px;
  text-transform:uppercase; color:var(--rose);
  opacity:.7;
}



.g-placeholder { display:none; }
.upload-zone {
  max-width:860px; margin:0 auto;
  border:2px dashed rgba(212,114,138,.35);
  border-radius:16px; padding:28px 20px;
  text-align:center; cursor:none;
  transition:background .2s,border-color .2s;
  position:relative;
}
.upload-zone.drag-over{background:rgba(212,114,138,.08);border-color:var(--rose)}
.upload-zone input[type=file]{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.upload-zone p{font-size:12px;letter-spacing:2px;text-transform:uppercase;color:var(--rose);font-weight:500;pointer-events:none}
.upload-zone span{font-size:11px;color:rgba(74,46,52,.45);display:block;margin-top:6px;font-style:italic;font-family:'Cormorant Garamond',serif;pointer-events:none}
.lightbox{display:none;position:fixed;inset:0;background:rgba(45,27,30,.9);z-index:10000;align-items:center;justify-content:center;backdrop-filter:blur(8px)}
.lightbox.open{display:flex}
.lightbox img{max-width:90vw;max-height:88vh;border-radius:12px;box-shadow:0 30px 80px rgba(0,0,0,.5);animation:lbIn .25s ease}
@keyframes lbIn{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
.lb-close{position:absolute;top:24px;right:28px;font-size:32px;color:rgba(255,255,255,.7);cursor:pointer;line-height:1;transition:color .2s}
.lb-close:hover{color:#fff}
.lb-prev,.lb-next{position:absolute;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.12);border:none;color:#fff;font-size:28px;width:52px;height:52px;border-radius:50%;cursor:pointer;transition:background .2s;display:flex;align-items:center;justify-content:center}
.lb-prev{left:20px}.lb-next{right:20px}
.lb-prev:hover,.lb-next:hover{background:rgba(255,255,255,.25)}

/* ─── MAP ─────────────────────────────────── */
.map-section {
  padding:80px 20px; text-align:center;
  position:relative; z-index:1;
  background:linear-gradient(160deg,var(--dark) 0%,#3d1f28 100%);
  color:var(--cream);
}
.map-section::before{content:'';position:absolute;inset:0;background-image:radial-gradient(circle,rgba(242,196,196,.05) 1px,transparent 1px);background-size:28px 28px;pointer-events:none}
.map-section .section-title{color:var(--champagne)}
.map-section .section-sub{color:var(--blush)}
.map-wrap {
  max-width:760px; margin:0 auto;
  border-radius:20px; overflow:hidden;
  box-shadow:0 24px 60px rgba(0,0,0,.4);
  border:1px solid rgba(212,114,138,.25);
  position:relative;
}
.map-wrap::after{content:'';position:absolute;inset:0;background:rgba(168,78,101,.08);pointer-events:none;border-radius:20px}
.map-wrap iframe{width:100%;height:380px;border:none;display:block;filter:grayscale(20%) saturate(.85)}
.map-address {
  margin-top:20px;
  display:flex;align-items:center;justify-content:center;gap:10px;
  font-family:'Cormorant Garamond',serif;
  font-size:20px;font-style:italic;color:var(--blush);
}
.map-address svg{flex-shrink:0;color:var(--rose)}

/* ─── CONGRATS ───────────────────────────── */
.congrats-block {
  max-width:480px; margin:0 auto 40px;
  position:relative; z-index:1;
}
.congrats-line {
  display:flex; align-items:center; gap:14px;
  margin-bottom:20px;
}
.congrats-dline {
  flex:1; height:1px;
  background:linear-gradient(to right,transparent,rgba(212,114,138,.4),transparent);
}
.congrats-label {
  font-size:10px; letter-spacing:4px;
  text-transform:uppercase; color:var(--rose);
  font-weight:500;
}
.congrats-text {
  font-family:'Cormorant Garamond',serif;
  font-size:18px; font-style:italic;
  color:var(--text); line-height:1.9;
  text-align:center;
}

/* ─── CLOSING ─────────────────────────────── */
.closing {
  padding:100px 20px 80px;
  text-align:center; position:relative; z-index:1;
  background:
    radial-gradient(ellipse at 30% 80%,rgba(242,196,196,.3) 0%,transparent 50%),
    radial-gradient(ellipse at 70% 20%,rgba(212,114,138,.15) 0%,transparent 50%),
    var(--cream);
  overflow:hidden;
}
.closing-rings {
  position:absolute;
  top:50%; left:50%;
  transform:translate(-50%,-50%);
  pointer-events:none;
}
.closing-rings span {
  position:absolute;
  border:1px solid rgba(212,114,138,.1);
  border-radius:50%;
  transform:translate(-50%,-50%);
  animation:ringPulse 4s ease-in-out infinite;
}
@keyframes ringPulse {
  0%,100%{transform:translate(-50%,-50%) scale(1);opacity:.5}
  50%{transform:translate(-50%,-50%) scale(1.05);opacity:.15}
}
.closing-name {
  font-family:'Playfair Display',serif;
  font-size:clamp(48px,10vw,96px);
  font-style:italic; color:var(--deep-rose);
  margin-bottom:20px; line-height:1;
}
.closing-text {
  font-family:'Cormorant Garamond',serif;
  font-size:20px; color:var(--text);
  max-width:440px; margin:0 auto 20px;
  line-height:1.8; font-style:italic;
}
.closing-wedding {
  font-family:'Playfair Display',serif;
  font-size:clamp(14px,3vw,20px);
  color:var(--gold); letter-spacing:6px;
  text-transform:uppercase;
  margin-bottom:48px;
  opacity:.8;
}
.hearts-row{display:flex;justify-content:center;gap:14px}
.heart{font-size:22px;animation:heartbeat 1.4s ease-in-out infinite}
.heart:nth-child(2){animation-delay:.2s;font-size:28px}
.heart:nth-child(3){animation-delay:.4s}
@keyframes heartbeat{0%,100%{transform:scale(1)}50%{transform:scale(1.2)}}

/* ─── FIREWORKS CANVAS ────────────────────── */
#fw-canvas {
  position:absolute; inset:0;
  pointer-events:none; z-index:0;
}

/* ─── RESPONSIVE ──────────────────────────── */

/* touch devices — restore normal cursor everywhere */
@media(hover:none) and (pointer:coarse){
  body { cursor:auto !important; }
  *    { cursor:auto !important; }
  .cursor,.cursor-ring { display:none !important; }
  /* bigger tap targets */
  .quiz-opt { padding:16px 20px; }
  .ctrl-btn  { padding:12px; font-size:24px; }
  .play-btn  { width:60px; height:60px; font-size:22px; }
  .lb-prev,.lb-next { width:44px; height:44px; }
}

@media(max-width:600px){
  /* hero */
  .hero { padding:48px 16px 40px; }
  h1 { font-size:clamp(48px,16vw,80px); }
  .subtitle { font-size:18px; }
  .info-card { padding:28px 20px; }
  .info-grid { gap:18px 14px; }
  .info-item .value { font-size:15px; }

  /* countdown */
  .cd-num  { font-size:clamp(40px,13vw,64px); }
  .cd-sep  { font-size:clamp(32px,10vw,52px); padding:0 3px; }
  .cd-label{ font-size:9px; }

  /* programme */
  .program-list::before { display:none; }
  .program-item,
  .program-item:nth-child(odd) {
    flex-direction:column !important;
    text-align:center !important;
    gap:6px;
  }
  .prog-time { min-width:unset; }

  /* dresscode */
  .color-strip { padding:0 16px; }

  /* music */
  .player { padding:24px 16px; }
  .track-name { font-size:14px; }

  /* map */
  .map-wrap iframe { height:260px; }

  /* closing */
  .closing { padding:70px 16px 60px; }

  /* sections padding */
  .details,.dresscode,.music-section,.gallery,.map-section,.countdown-section {
    padding:60px 16px;
  }
}

@media(max-width:380px){
  .info-grid { grid-template-columns:1fr 1fr; gap:14px; }
  .info-card  { padding:24px 16px; }
  .cd-num     { font-size:38px; }
}
