:root{
  --green:#4c5a2e;
  --green-2:#5d6b3a;
  --green-dark:#3a4522;
  --cream:#f8f5ef;
  --paper:#fbf9f5;
  --ink:#3d3b35;
  --muted:#7a776d;
  --line:#b9b4a6;
  --serif:"Noto Serif",Georgia,serif;
  --script:"WindSong",cursive;
  --script-en:"WindSong",cursive;
  --display:"Noto Serif",Georgia,serif;
  --serif2:var(--display);
  --w:480px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  font-family:var(--serif);font-weight:300;color:var(--ink);font-size:15px;line-height:1.6;font-variant-numeric:lining-nums;font-feature-settings:"lnum" 1;
  background:#e9e6dd;
}
/* blurred photo backdrop for wide screens (position:fixed works on iOS, background-attachment:fixed doesn't) */
body::before{content:"";position:fixed;inset:-40px;background:url("images/full/60x90.jpg") center/cover;filter:blur(18px);opacity:.28;z-index:-1;pointer-events:none}
body::before{display:none}
h2,h3,p{text-wrap:balance}
img{display:block;max-width:100%}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
.card{width:100%;margin:0;background:var(--paper);overflow:hidden;position:relative}
.script{font-family:var(--script);font-weight:400;letter-spacing:0}
.script.en{font-family:var(--script-en)}
section{position:relative}

/* ---------- floral line art (mask => recolorable) ---------- */
.floral{position:absolute;display:block;pointer-events:none;
  -webkit-mask:url("images/floral.svg") no-repeat center/contain;mask:url("images/floral.svg") no-repeat center/contain}
.floral--light{background:rgba(255,255,255,.38)}
.floral--green{background:rgba(76,90,46,.28)}
.floral--hero{width:240px;height:240px;right:-40px;bottom:-30px;transform:rotate(-15deg)}
.floral--tr{width:260px;height:260px;right:-70px;top:-40px;transform:scaleX(-1) rotate(10deg)}
.floral--bl{width:280px;height:280px;left:-90px;bottom:28%;transform:rotate(30deg)}
.floral--events{width:300px;height:300px;left:50%;bottom:-120px;transform:translateX(-50%) rotate(-5deg)}
.floral--modal{width:200px;height:200px;right:-50px;top:-40px;transform:scaleX(-1)}

/* ---------- reveal animations ---------- */
[data-reveal]{opacity:0;filter:blur(8px);transition:opacity 1.1s ease,transform 1.2s cubic-bezier(.2,.7,.2,1),filter 1.1s ease;will-change:opacity,transform,filter}
[data-reveal="fade-up"]{transform:translateY(30px)}
[data-reveal="left"]{transform:translateX(-50px)}
[data-reveal="right"]{transform:translateX(50px)}
[data-reveal="zoom"]{transform:scale(.88)}
[data-reveal="grow"]{transform:scaleY(0);transform-origin:top;filter:none}
[data-reveal="photo"]{transform:scale(1.18);filter:blur(14px);transition-duration:1.4s}
[data-reveal].is-in{opacity:1;transform:none;filter:none}
/* Khối ngày như clip mẫu: vạch dọc hiện trước, số phóng to dần, chữ 2 bên trượt vào */
[data-reveal="date"]{transform:none;filter:none;transition:opacity .35s ease}
.dateblock__mid span{display:block;opacity:0;transform:scale(.55);transition:opacity .45s ease .35s,transform .5s cubic-bezier(.2,.8,.25,1) .35s}
.dateblock__side{opacity:0;filter:blur(4px);transition:opacity .45s ease .35s,transform .5s cubic-bezier(.2,.8,.25,1) .35s,filter .45s ease .35s}
.dateblock__side:first-child{transform:translateX(-40px)}
.dateblock__side:last-child{transform:translateX(40px)}
.dateblock.is-in .dateblock__mid span{opacity:1;transform:none}
.dateblock.is-in .dateblock__side{opacity:1;transform:none;filter:none}
@media (prefers-reduced-motion:reduce){[data-reveal],.dateblock__mid span,.dateblock__side{opacity:1;transform:none;filter:none;transition:none}}

/* ---------- 1. hero ---------- */
.hero{height:100vh;height:100svh;min-height:560px;display:flex;align-items:flex-end;justify-content:center;color:#fff;overflow:hidden}
.hero__img{position:absolute;inset:0;background-image:url("images/full/60x90.jpg");background-size:cover;background-position:center 20%;animation:heroImg .7s ease-out both}
@keyframes heroImg{from{opacity:0}to{opacity:1}}
/* Như clip mẫu: ảnh hiện trước; ~1.2s sau tên + ngày hiện dần tại chỗ, "Save our date" hiện theo sau ~0.2s */
.hero__names,.hero__date{animation:heroText .7s ease-out 1.2s both}
.hero__save{animation:heroText .7s ease-out 1.4s both}
@keyframes heroText{from{opacity:0}to{opacity:1}}
@media (prefers-reduced-motion:reduce){.hero__img,.hero__names,.hero__date,.hero__save{animation:none}}
.hero__shade{position:absolute;inset:0;background:linear-gradient(to bottom,rgba(0,0,0,0) 45%,rgba(30,36,18,.55) 75%,var(--green) 100%)}
.hero__text{position:relative;text-align:center;padding:0 12px 90px;width:100%}
.hero__save{font-family:var(--script);font-weight:400;font-size:min(67px,15.2vw);line-height:1;margin:0 0 -.18em;position:relative;z-index:1;text-shadow:0 2px 12px rgba(0,0,0,.2)}
.hero__names{font-family:var(--display);font-weight:400;font-size:min(26px,6vw);white-space:nowrap;letter-spacing:.02em;line-height:1.25;text-shadow:0 2px 10px rgba(0,0,0,.3)}
.hero__date{font-family:var(--display);font-weight:400;font-size:min(22px,5vw);letter-spacing:.08em;margin-top:2px;text-shadow:0 2px 10px rgba(0,0,0,.3)}
.hero__foot{position:absolute;inset:auto 0 0;height:120px}

/* ---------- 2. green ---------- */
.green{background:var(--green);color:#fff;text-align:center;padding:60px 20px 40px;overflow:hidden}
.typing{font-family:var(--serif2);font-weight:400;font-size:29px;line-height:1.2;letter-spacing:.02em;min-height:2.4em;position:relative}
.typing__out{white-space:pre-line}
.typing__caret{display:inline-block;width:2px;height:1em;background:#fff;margin-left:3px;vertical-align:-.1em;animation:blink 1s steps(1) infinite}
@keyframes blink{50%{opacity:0}}
.vline{display:block;width:1px;height:46px;background:var(--ink);margin:18px auto}
.vline--light{background:#fff}
.green__sub{font-family:var(--serif2);font-size:17px;font-style:normal;line-height:1.3;margin-bottom:34px;opacity:.95}
.couple-cards{display:grid;grid-template-columns:1fr 1fr;gap:12px;align-items:stretch;padding-bottom:10px}
.person{position:relative;margin:0;border-radius:18px;overflow:hidden;box-shadow:0 14px 34px rgba(0,0,0,.28)}
.person--groom{margin-top:0}
.person img{width:100%;aspect-ratio:3/4.6;object-fit:cover;object-position:center 22%}
.person figcaption{position:absolute;inset:auto 0 0;padding:56px 6px 14px;background:linear-gradient(transparent,rgba(0,0,0,.55));display:flex;flex-direction:column;align-items:center}
.person .script{font-size:clamp(32px,9.5vw,42px);line-height:1}
.person b{font-family:var(--display);font-weight:400;font-size:clamp(14px,4.2vw,18px);letter-spacing:.12em;white-space:nowrap}

/* ---------- 3. invite ---------- */
.invite{text-align:center;padding:56px 24px 48px;background:var(--paper)}
.monogram{width:240px;height:186px;margin:0 auto 22px;color:#2f4128}
.monogram__svg{width:100%;height:100%;overflow:visible}
.mg-c{font-family:var(--serif);font-style:normal;font-weight:400;font-size:66px;fill:var(--ink)}
.mg-t{font-family:var(--serif);font-weight:400;font-size:60px;fill:var(--ink)}
.mg-amp{font-family:var(--script);font-size:24px;fill:var(--green)}
.invite__lead{font-size:17px;color:var(--ink);line-height:1.7}
.couple{font-family:var(--display);font-weight:400;font-size:30px;letter-spacing:.02em;line-height:1.15}
.and{font-size:34px;color:var(--muted);line-height:1;margin:2px 0}

/* ---------- 4. events ---------- */
.events{text-align:center;padding:10px 22px 150px;overflow:hidden}
.event{position:relative;z-index:1}
.event__title{font-size:32px;color:var(--green);line-height:1.1;margin-bottom:8px}
.dateblock{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;margin:0 auto;max-width:340px}
.dateblock__side{white-space:nowrap;font-size:15px;letter-spacing:.1em;padding:6px 0}
.dateblock__mid{display:flex;flex-direction:column;font-family:var(--display);font-size:38px;line-height:1.1;font-weight:400;padding:0 14px;border-left:1px solid var(--ink);border-right:1px solid var(--ink)}
.place__label{font-size:16px;color:var(--muted);margin-top:18px}
.place__name{font-family:var(--display);font-weight:400;font-size:20px;letter-spacing:.04em}
.place__addr{font-size:16px;line-height:1.4;margin:4px 0 12px}
.place__addr i{color:var(--muted)}
.link-map[hidden]{display:none}
.link-map{display:inline-block;font-weight:600;font-size:17px;letter-spacing:.12em;color:var(--ink);text-decoration:none;border-bottom:1px solid var(--ink);padding-bottom:2px;cursor:pointer}
.link-map::before{content:"➜ ";font-size:.8em}
.divider{display:flex;align-items:center;gap:14px;margin:34px auto;max-width:260px}
.divider i{flex:1;height:1px;background:var(--line)}
.divider span{font-size:28px;color:var(--green);line-height:1}
.btn{font-weight:500;display:block;width:100%;max-width:320px;margin:34px auto 0;padding:14px 18px;border-radius:999px;font-family:var(--serif);font-weight:500;font-size:15px;letter-spacing:.14em;text-align:center;text-decoration:none;transition:transform .2s,box-shadow .2s,background .2s;position:relative;z-index:1}
.btn:active{transform:scale(.97)}
.btn--green{background:var(--green);color:#fff;box-shadow:0 8px 20px rgba(76,90,46,.35)}
.btn--green:hover{background:var(--green-dark)}
.btn--outline{border:1px solid var(--ink);color:var(--ink);background:transparent}
.btn[disabled]{opacity:.6;pointer-events:none}

/* ---------- 5. calendar ---------- */
.calendar-sec{text-align:center;padding:0 0 56px;background:var(--paper)}
.wide-photo{overflow:hidden;position:relative}
.just{position:absolute;right:18px;bottom:14px;color:#fff;text-align:right;line-height:1;text-shadow:0 2px 10px rgba(0,0,0,.3)}
.just .script{display:block;font-size:34px;margin:0 0 -14px 0;position:relative;z-index:1}
.just b{font-family:var(--display);font-weight:400;font-size:34px;letter-spacing:.06em}
.wide-photo img{width:100%;aspect-ratio:4/3;object-fit:cover}
.year{font-family:var(--display);font-size:96px;line-height:.9;font-weight:200;color:var(--green);letter-spacing:.04em;margin-top:22px}
.month{font-size:58px;line-height:.8;color:var(--ink);margin:-10px 0 30px;position:relative}
.calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:6px 0;padding:0 24px;font-size:16px}
.calendar .dow{font-size:12px;letter-spacing:.06em;color:var(--muted);font-weight:600;padding-bottom:4px}
.calendar .day{height:38px;display:flex;align-items:center;justify-content:center;position:relative}
.calendar .day.mark{color:var(--green);font-weight:600}
.calendar .day.mark::before{content:"";position:absolute;width:42px;height:42px;z-index:-1;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M12 20.5s-7.3-4.5-9.6-9C.9 8.3 2.7 4.6 6.2 4.6c2.3 0 3.8 1.4 5.8 3.6 2-2.2 3.5-3.6 5.8-3.6 3.5 0 5.3 3.7 3.8 6.9-2.3 4.5-9.6 9-9.6 9z' fill='none' stroke='%234c5a2e' stroke-width='1.1'/%3E%3C/svg%3E") center/contain no-repeat;
  animation:beat 1.6s ease-in-out infinite}
.calendar .day{isolation:isolate}
@keyframes beat{0%,100%{transform:scale(1)}15%{transform:scale(1.15)}30%{transform:scale(1)}45%{transform:scale(1.1)}}
.count-lead{font-style:normal;font-size:17px;color:#a8a49a;margin:28px 0 8px;line-height:1.3}
.countdown{display:flex;justify-content:center;align-items:flex-start;gap:6px}
.countdown div{display:flex;flex-direction:column;align-items:center;min-width:56px}
.countdown b{font-family:var(--display);font-weight:300;font-size:38px;line-height:1.1;font-variant-numeric:tabular-nums}
.countdown small{font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.countdown>span{font-size:32px;line-height:1.2;color:var(--muted)}

/* ---------- timeline ---------- */
.timeline{background:#222 center/cover no-repeat;color:#fff}
.timeline__inner{background:linear-gradient(rgba(38,46,20,.55),rgba(38,46,20,.78));padding:56px 26px 64px}
.timeline__title{text-align:center;font-size:76px;line-height:1;margin-bottom:34px}
.tl{display:grid;grid-template-columns:auto minmax(20px,1fr) 10em;align-items:center;gap:12px;margin:0 auto 34px;max-width:360px}
.tl__icon{width:60px;height:60px}
.tl__line{height:1px;background:#fff;opacity:.85}
.tl__text{display:flex;flex-direction:column;align-items:flex-start;line-height:1.2}
.tl__text b{font-family:var(--display);font-weight:400;font-size:34px}
.tl__text small{font-size:11px;letter-spacing:.14em;opacity:.85}
.tl__text span{font-style:normal;font-size:14px;white-space:nowrap}

/* ---------- 6. memories ---------- */
.memories{padding:20px 0 50px;background:var(--paper)}
.split{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin:10px 16px 0;aspect-ratio:3/2.15}
.split i{display:block;background-image:var(--img);background-size:calc(300% + 20px) auto;background-repeat:no-repeat;height:88%;box-shadow:0 10px 24px rgba(0,0,0,.18)}
.split i:nth-child(1){background-position:0 58%}
.split i:nth-child(2){background-position:50% 58%;margin-top:12%;transform:rotate(-3deg);z-index:1}
.split i:nth-child(3){background-position:100% 58%}
.memories__title{display:block;width:100%;text-align:center;white-space:nowrap;font-size:clamp(32px,10vw,40px);color:var(--ink);margin:26px auto 12px;padding:0 16px;line-height:1.1}
.mosaic{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:0 10px}
.mosaic img{width:100%;height:100%;object-fit:cover;aspect-ratio:3/4;cursor:zoom-in;border-radius:4px}
.mosaic img:nth-child(1){grid-row:span 2;aspect-ratio:auto}
.slider{position:relative;margin:10px 10px 0}
.slider__track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;border-radius:4px}
.slider__track::-webkit-scrollbar{display:none}
.slider__track img{flex:0 0 100%;width:100%;aspect-ratio:4/5;object-fit:cover;scroll-snap-align:center;cursor:zoom-in}
.slider__nav{position:absolute;top:50%;transform:translateY(-50%);width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.75);font-size:30px;line-height:36px;color:var(--ink)}
.slider__nav--prev{left:8px}.slider__nav--next{right:8px}
.slider__count{text-align:center;color:var(--muted);font-size:13px;letter-spacing:.15em;margin-top:8px}

/* ---------- 7. rsvp ---------- */
.rsvp{padding:0 0 56px;background:var(--paper)}
.strip{overflow:hidden;padding:8px 0;background:#fff}
.strip__track{display:flex;gap:6px;width:max-content;animation:marquee 60s linear infinite}
.strip__track img{width:84px;height:110px;object-fit:cover}
@keyframes marquee{to{transform:translateX(-50%)}}
.rsvp__lead{text-align:center;font-size:17px;line-height:1.4;padding:30px 30px 18px}
form{padding:0 24px;display:flex;flex-direction:column;gap:12px}
input,textarea,select{width:100%;font-family:var(--serif);font-weight:300;font-size:16px;color:var(--ink);background:#fff;border:1px solid var(--line);border-radius:22px;padding:10px 18px;outline:none;transition:border-color .2s,box-shadow .2s;-webkit-appearance:none;appearance:none}
textarea{border-radius:18px;resize:vertical;min-height:110px}
input:focus,textarea:focus,select:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(76,90,46,.15)}
select:invalid,select.is-empty{color:#8d8a80}
select option{color:var(--ink)}
.select{position:relative}
.select::after{content:"";position:absolute;right:18px;top:50%;width:0;height:0;border:5px solid transparent;border-top-color:var(--ink);margin-top:-2px;pointer-events:none}
.select.is-hidden{display:none}
.form-msg{color:#a33;font-size:15px;text-align:center;min-height:0}
form .btn{margin-top:4px;max-width:none}
.invalid{border-color:#c66 !important}

/* ---------- 8. ending ---------- */
.ending{position:relative;color:#fff;text-align:center}
.ending img{width:100%;aspect-ratio:2/3;object-fit:cover;filter:brightness(.8)}
.ending__text{position:absolute;inset:auto 0 0;padding:120px 20px 56px;background:linear-gradient(transparent,rgba(0,0,0,.6))}
.ending .script{font-size:52px;line-height:1}
.ending p{font-size:18px;font-style:normal}
.ending__names{font-style:normal !important;letter-spacing:.2em;font-size:15px !important;margin-top:8px;opacity:.9}

/* ---------- modals ---------- */
.modal{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:18px;background:rgba(20,22,14,.6);opacity:0;visibility:hidden;transition:opacity .35s,visibility .35s}
.modal.open{opacity:1;visibility:visible}
.modal__box{position:relative;width:100%;max-width:420px;max-height:92vh;overflow:auto;background:var(--paper);border-radius:16px;transform:translateY(30px) scale(.96);transition:transform .45s cubic-bezier(.2,.8,.2,1)}
.modal.open .modal__box{transform:none}
.modal__box>img{width:100%;aspect-ratio:4/3;object-fit:cover}
#giftModal .modal__box>img{aspect-ratio:16/9;object-position:center 30%}
.modal__close{position:absolute;right:10px;top:8px;z-index:3;width:36px;height:36px;border-radius:50%;background:rgba(255,255,255,.85);font-size:26px;line-height:34px}
.modal__green{position:relative;overflow:hidden;background:var(--green);color:#fff;padding:22px 24px 26px}
.modal__green .script{font-size:48px;line-height:1.35}
.modal__green p{font-size:16px;line-height:1.4}
.gift{padding:16px 14px 22px;text-align:center}
.gift__title{white-space:nowrap;font-size:clamp(26px,8.4vw,40px);font-weight:400;color:var(--green);line-height:1.4;margin:0 0 8px}
.gift__grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.qr{border:1px solid var(--line);border-radius:14px;padding:10px 8px;background:#fff}
.qr__who{font-family:var(--script);font-weight:400;font-size:clamp(22px,7.4vw,30px);line-height:1.35;color:var(--green)}
.qr img{width:100%;border-radius:6px;margin:6px 0;image-rendering:pixelated}
.qr__name{font-weight:600;font-size:13px;letter-spacing:.05em}
.qr__bank{font-size:12px;color:var(--muted)}
.copy{margin-top:6px;font-size:15px;font-weight:600;padding:4px 10px;border:1px dashed var(--green);border-radius:999px;color:var(--green)}
.copy small{font-weight:400;font-size:12px;display:block;line-height:1}

/* ---------- lightbox ---------- */
.lightbox{position:fixed;inset:0;z-index:60;background:rgba(0,0,0,.92);display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .3s,visibility .3s}
.lightbox.open{opacity:1;visibility:visible}
.lightbox img{max-width:100vw;max-height:88vh;object-fit:contain}
.lightbox__close{position:absolute;top:10px;right:14px;color:#fff;font-size:40px}
.lightbox__nav{position:absolute;top:50%;transform:translateY(-50%);color:#fff;font-size:56px;padding:10px}
.lightbox__prev{left:4px}.lightbox__next{right:4px}

/* ---------- music ---------- */
.music{position:fixed;z-index:40;right:calc(12px + env(safe-area-inset-right));bottom:calc(16px + env(safe-area-inset-bottom));
  display:flex;align-items:center;gap:8px;padding:6px 14px 6px 6px;border-radius:999px;background:var(--green);color:#fff;box-shadow:0 6px 18px rgba(0,0,0,.25);font-size:11px;letter-spacing:.14em;font-weight:500}
.music__disc{width:30px;height:30px;border-radius:50%;background:rgba(255,255,255,.18);display:flex;align-items:center;justify-content:center;font-size:17px}
.music.playing .music__disc{animation:spin 3s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.yt-holder{position:fixed;width:1px;height:1px;left:-10px;bottom:0;overflow:hidden;opacity:0;pointer-events:none}

.toast{position:fixed;left:50%;bottom:80px;transform:translate(-50%,20px);background:rgba(30,30,25,.9);color:#fff;padding:8px 18px;border-radius:999px;font-size:15px;opacity:0;transition:.3s;z-index:70;pointer-events:none}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* =========================================================
   RESPONSIVE
   ========================================================= */

/* ---- Small phones (iPhone SE 1st gen, Galaxy Fold, old Android ≤374px) ---- */
@media (max-width:374px){
  body{font-size:14px}
  .green{padding:48px 14px 32px}
  .couple-cards{gap:10px}
  .typing{font-size:26px}
  .green__sub{font-size:18px}
  .invite{padding:44px 16px 32px}
  .monogram{width:210px;height:162px}
  .couple{font-size:27px}
  .events{padding:10px 14px 140px}
  .event__title{font-size:28px}
  .dateblock{gap:8px}
  .dateblock__side{font-size:12px;letter-spacing:.05em}
  .dateblock__mid{font-size:34px;padding:0 10px}
  .place__name{font-size:19px}
  .place__addr{font-size:15px}
  .year{font-size:88px}
  .month{font-size:50px}
  .calendar{padding:0 10px;font-size:15px}
  .calendar .dow{font-size:12px;letter-spacing:0}
  .calendar .day.mark::before{width:32px;height:32px}
  .countdown{gap:2px}
  .countdown div{min-width:46px}
  .countdown b{font-size:32px}
  .countdown>span{font-size:26px}
  .countdown small{font-size:11px;letter-spacing:.06em}
  .timeline__inner{padding:44px 14px 50px}
  .timeline__title{font-size:62px}
  .tl{gap:8px;grid-template-columns:auto minmax(16px,1fr) 9em}
  .tl__icon{width:42px;height:42px}
  .tl__text b{font-size:30px}
  .tl__text small{font-size:11px;letter-spacing:.08em}
  .tl__text span{font-size:12px}
  .memories__title{font-size:32px}
  .rsvp__lead{padding:26px 18px 16px;font-size:16px}
  form{padding:0 14px}
  .btn{font-size:13px;letter-spacing:.06em}
  .ending .script{font-size:44px}
  .modal{padding:10px}
  .gift{padding:14px 8px 18px}
  .gift__title{font-size:clamp(24px,8.4vw,34px)}
  .gift__grid{gap:6px}
  .qr{padding:8px 5px}
  .qr__name{font-size:12px;letter-spacing:0}
  .copy{font-size:12px;padding:4px 8px}
}

/* ---- Tablets & up (iPad, landscape phones, laptops) ---- */
@media (min-width:768px){
  body{font-size:15px}
  .card{border-radius:0;box-shadow:0 0 60px rgba(0,0,0,.18)}
  .hero__save{font-size:94px}
  .hero__names{font-size:44px}
  .hero__date{font-size:32px}
  .hero__text{padding-bottom:110px}
  .floral--hero{width:340px;height:340px}

  /* green: groom & bride side by side */
  .green{padding:80px 56px 72px}
  .couple-cards{gap:28px;max-width:600px;margin:0 auto}
  .typing{font-size:44px}
  .green__sub{font-size:23px;margin-bottom:46px}
  .person .script{font-size:54px}
  .person b{font-size:22px}
  .person figcaption{padding:90px 10px 22px}
  .floral--tr{width:380px;height:380px}
  .floral--bl{width:360px;height:360px;bottom:10%}

  .invite{padding:80px 40px 50px}
  .monogram{width:300px;height:232px}
  .invite__lead{font-size:20px}
  .couple{font-size:42px}
  .and{font-size:42px}

  /* events: two ceremonies side by side, vertical divider */
  .events{display:grid;grid-template-columns:1fr auto 1fr;column-gap:24px;align-items:start;padding:30px 36px 190px}
  .events>.btn{grid-column:1/-1}
  .divider{flex-direction:column;align-self:stretch;margin:20px 0;max-width:none;gap:10px}
  .divider i{width:1px;height:auto;flex:1}
  .event__title{font-size:36px}
  .floral--events{width:420px;height:420px;bottom:-170px}

  .wide-photo img{aspect-ratio:16/9}
  .year{font-size:150px}
  .month{font-size:80px}
  .calendar{max-width:560px;margin:0 auto;font-size:17px}
  .calendar .day{height:46px}
  .calendar .day.mark::before{width:42px;height:42px}
  .count-lead{font-size:20px}
  .countdown{gap:12px}
  .countdown div{min-width:80px}
  .countdown b{font-size:56px}
  .countdown>span{font-size:44px}

  .timeline__inner{padding:90px 40px 80px}
  .timeline__title{font-size:96px}
  .tl{max-width:520px;gap:20px;margin-bottom:44px;grid-template-columns:auto minmax(20px,1fr) 11.5em}
  .tl__icon{width:72px;height:72px}
  .tl__text b{font-size:46px}
  .tl__text span{font-size:17px}

  .split{max-width:640px;margin:20px auto 0}
  .memories__title{font-size:48px}
  .mosaic{grid-template-columns:repeat(3,1fr);gap:8px;padding:0 16px}
  .mosaic img{transition:transform .4s,filter .4s}
  .slider{margin:12px 16px 0}
  .slider__track{gap:8px}
  .slider__track img{flex-basis:calc(50% - 4px);width:calc(50% - 4px);scroll-snap-align:start}

  .strip__track img{width:116px;height:150px}
  .rsvp__lead{max-width:600px;margin:0 auto;font-size:20px;padding:44px 30px 22px}
  form{max-width:560px;margin:0 auto}

  .ending img{aspect-ratio:4/3;object-position:center 70%}
  .ending .script{font-size:70px}
  .ending p{font-size:21px}

  .modal__box{max-width:480px}
  #giftModal .modal__box{max-width:560px}
  .gift__title{font-size:46px}
}
@media (min-width:768px) and (min-height:700px){
  .hero{min-height:680px}
}
@media (hover:hover) and (min-width:768px){
  .mosaic img:hover{transform:scale(1.02);filter:brightness(1.05)}
  .btn--green:hover{box-shadow:0 10px 26px rgba(76,90,46,.45)}
}

/* ---- Laptops / desktops ---- */
@media (min-width:1200px){
  .hero__names{font-size:50px}
  .hero__save{font-size:109px}
  .hero__date{font-size:36px}
  .green{padding:90px 80px 80px}
  .events{padding:40px 60px 200px;column-gap:40px}
  .mosaic,.slider{padding:0 24px;margin-left:0;margin-right:0}
  .slider__nav--prev{left:32px}.slider__nav--next{right:32px}
}

/* ---- Landscape phones (short screens) ---- */
@media (orientation:landscape) and (max-height:520px){
  .hero{min-height:420px}
  .hero__text{padding-bottom:60px}
  .hero__save{font-size:61px}
  .hero__names{font-size:30px}
  .hero__img{background-position:center 25%}
  .modal__box{max-height:96vh}
  .modal__box>img{aspect-ratio:21/9}
  .lightbox img{max-height:96vh}
}

/* =========================================================
   FULL-WIDTH LAYOUT FOR TABLETS / DESKTOPS
   backgrounds span the whole screen, content stays centered
   ========================================================= */
@media (min-width:600px){
  .rsvp__lead{max-width:600px;margin:0 auto}
  form{max-width:560px;margin:0 auto}
  .couple-cards{max-width:600px;margin:0 auto}
  .split{max-width:640px;margin:20px auto 0}
}
@media (min-width:768px) and (orientation:landscape){
  .hero__img{background-image:url("images/hero-wide.jpg");background-position:center 30%}
  .hero__shade{background:linear-gradient(to bottom,rgba(0,0,0,0) 40%,rgba(30,36,18,.5) 72%,var(--green) 100%)}
}
@media (min-width:768px){
  .green{padding-left:max(56px,calc(50% - 460px));padding-right:max(56px,calc(50% - 460px))}
  .couple-cards{max-width:720px}
  .events{padding-left:max(36px,calc(50% - 520px));padding-right:max(36px,calc(50% - 520px))}
  .timeline{background-position:center 35%}
  .mosaic{max-width:1100px;margin:0 auto}
  .slider{max-width:1100px;margin:12px auto 0;padding:0 16px}
  .slider__nav--prev{left:24px}.slider__nav--next{right:24px}
  .slider__count{max-width:1100px;margin-left:auto;margin-right:auto}
}
@media (min-width:1024px){
  .hero__text{padding-bottom:120px}
  .wide-photo img{aspect-ratio:21/9;object-position:center 60%}
  .just{right:max(24px,calc(50% - 520px));bottom:28px}
  .just .script{font-size:52px;margin-bottom:-22px}
  .just b{font-size:54px}
  .split{max-width:900px}
  .slider__track img{flex-basis:calc(33.333% - 6px);width:calc(33.333% - 6px)}
  .ending img{aspect-ratio:21/9;object-position:center 55%}
  .ending__text{padding-bottom:70px}
  .floral--tr{width:460px;height:460px}
  .floral--bl{width:420px;height:420px}
  .floral--hero{width:420px;height:420px;right:2%}
  .floral--events{width:520px;height:520px;bottom:-220px}
  .timeline__inner{padding-top:110px;padding-bottom:100px}
}
@media (min-width:1600px){
  .hero__names{font-size:58px}
  .hero__save{font-size:123px}
  .hero__date{font-size:40px}
  .mosaic,.slider{max-width:1280px}
  .split{max-width:1000px}
}

/* RSVP lead: đúng 2 dòng, căn giữa */
.rsvp__lead{text-align:center;padding-left:12px;padding-right:12px;font-size:min(17px,4.05vw)!important;max-width:none!important}
.rsvp__lead span{display:block;white-space:nowrap}
