:root {
  color-scheme: light;
  --do: #7d1f2d;
  --do-dam: #5e1521;
  --hong: #f8e8e6;
  --hong-nhat: #fdf6f4;
  --kem: #fffdfc;
  --chu: #41302f;
  --chu-nhat: #806c6a;
  --duong: #ead8d4;
  --vang: #c79c56;
  --viet: "Great Vibes", cursive;
  --co: "Playfair Display", Georgia, serif;
  --than: "Be Vietnam Pro", system-ui, sans-serif;
  --mem: cubic-bezier(.22, .8, .24, 1);
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; background: var(--hong); color: var(--chu); font: 300 15px/1.7 var(--than); }
body.dong-cua { overflow: hidden; height: 100svh; }
p, h1, h2, figure { margin: 0; }
img { display: block; max-width: 100%; height: auto; }
button { font: inherit; color: inherit; background: none; border: 0; padding: 0; cursor: pointer; }
main:focus { outline: none; }
.lien { white-space: nowrap; }

/* ---------- Khung trang: điện thoại một cột, máy tính có ảnh ngang bên trái ---------- */
.khung { min-height: 100svh; }
.canh { display: none; }
.cot { background: var(--kem); max-width: 520px; margin: 0 auto; overflow: hidden; overflow: clip; }

@media (min-width: 1280px) {
  /* Ảnh ngang phủ cả màn phía sau, thiệp nổi lên như một tấm thiệp để hai ảnh không dính vào nhau */
  .canh { display: block; position: fixed; inset: 0; overflow: hidden; background: var(--hong); }
  /* Ảnh dừng ở giữa tấm thiệp để đôi uyên ương nằm trọn bên trái, không bị thiệp che mất một người */
  .canh-anh {
    position: absolute; inset: 0 calc(290px + 6vw) 0 0; background: var(--anh) 50% 42% / cover no-repeat;
    opacity: 0; transform: scale(1.06); transition: opacity 1.4s ease, transform 7s ease-out;
  }
  .canh-anh.hien { opacity: 1; transform: none; }
  .cot {
    position: relative; width: 520px; max-width: none; margin: 0 max(6vw, 48px) 0 auto;
    box-shadow: 0 0 60px rgb(30 8 12 / .38);
  }
}

/* ---------- Hạt và đĩa nhạc ---------- */
.hat { position: fixed; inset: 0; width: 100%; height: 100%; z-index: 40; pointer-events: none; }
html:not(.dong) .hat { display: none; }

.dia {
  position: fixed; top: 14px; right: 14px; z-index: 45; width: 46px; height: 46px; border-radius: 50%;
  background: rgb(255 255 255 / .86); box-shadow: 0 4px 14px rgb(45 12 18 / .28); display: grid; place-items: center;
}
.dia[hidden] { display: none; }
.dia-tron {
  width: 36px; height: 36px; border-radius: 50%; display: grid; place-items: center;
  background: repeating-radial-gradient(circle, #2a1518 0 1.5px, #3b2024 1.5px 3px);
}
.dia-tron svg { width: 15px; height: 15px; fill: #e58a9e; }
.dia.quay .dia-tron { animation: quay 3.6s linear infinite; }
.dia:not(.quay)::after { content: ""; position: absolute; width: 34px; height: 2px; background: var(--do); transform: rotate(-45deg); border-radius: 2px; }
@keyframes quay { to { transform: rotate(360deg); } }

/* ---------- Màn phong bì ---------- */
.mo { display: none; }
.co-js .mo {
  position: fixed; inset: 0; z-index: 30; display: flex; flex-direction: column; align-items: center;
  justify-content: center; gap: clamp(14px, 3svh, 28px); padding: 24px 18px; text-align: center; overflow: hidden;
  background: radial-gradient(120% 90% at 50% 8%, #fff 0, var(--hong-nhat) 45%, var(--hong) 100%);
  transition: opacity .8s ease;
}
.mo.tan { opacity: 0; pointer-events: none; }
.co-js .mo:not(.tan) ~ .khung { visibility: hidden; }
.mo-dau { transition: opacity .4s ease, transform .6s ease; }
.mo-nho { font-size: 11px; font-weight: 400; letter-spacing: .42em; text-transform: uppercase; color: var(--do); margin-right: -.42em; }
.mo-lon { font: 400 clamp(25px, 7vw, 32px)/1.3 var(--co); letter-spacing: .08em; text-transform: uppercase; color: var(--do-dam); margin-top: 4px; }
.mo-ten { font: 400 clamp(29px, 9vw, 44px)/1.25 var(--viet); color: var(--chu); margin-top: 8px; white-space: nowrap; }
.mo-ten i { font-style: normal; color: var(--do); padding: 0 .1em; }

.pb {
  --w: min(84vw, 47svh, 560px);
  position: relative; display: block; flex: none; width: var(--w); height: calc(var(--w) * .66);
  perspective: 1200px; filter: drop-shadow(0 18px 18px rgb(94 21 33 / .28)); transition: translate .9s ease .15s;
}
.dong .pb { animation: bong 4.2s ease-in-out infinite; }
@keyframes bong { 50% { transform: translateY(-7px); } }
.pb > span { position: absolute; inset: 0; display: block; }
.pb-sau { background: linear-gradient(#5e1521, #741b28); border-radius: 6px; transition: opacity .4s ease; }
.pb-the {
  inset: 6% 5% 5% !important; background: #fff; border-radius: 4px; z-index: 2; color: var(--chu);
  display: flex !important; flex-direction: column; align-items: center; justify-content: flex-start; padding-top: 9%;
  box-shadow: 0 -2px 10px rgb(0 0 0 / .14); transition: transform .85s cubic-bezier(.3, .7, .25, 1);
}
.pb-the > * { transition: opacity .3s ease; }
.pb-the small { font-size: 10px; letter-spacing: .2em; text-transform: uppercase; color: var(--chu-nhat); }
.pb-the b { font: 400 calc(var(--w) * .1)/1.25 var(--viet); color: var(--do); padding: 0 8px; }
.pb-tui { z-index: 3; transition: opacity .4s ease; }
.pb-tui span { position: absolute; inset: 0; display: block; border-radius: 6px; }
.tui-trai { background: linear-gradient(100deg, #93303d, #84232f); clip-path: polygon(0 0, 52% 50%, 0 100%); }
.tui-phai { background: linear-gradient(260deg, #93303d, #84232f); clip-path: polygon(100% 0, 48% 50%, 100% 100%); }
.tui-duoi { background: linear-gradient(0deg, #8e2a37, #9b3743); clip-path: polygon(0 100%, 50% 42%, 100% 100%); filter: drop-shadow(0 -1px 2px rgb(0 0 0 / .2)); }
.pb-nap {
  bottom: auto !important; height: 60%; z-index: 4; transform-origin: 50% 0; transform-style: preserve-3d;
  transition: transform .75s cubic-bezier(.45, .05, .3, 1) .34s, z-index 0s linear .68s, opacity .4s ease;
}
.nap-ngoai, .nap-trong {
  position: absolute; inset: 0; display: block; backface-visibility: hidden; -webkit-backface-visibility: hidden;
  clip-path: polygon(0 0, 100% 0, 51.5% 98%, 50% 100%, 48.5% 98%);
}
.nap-ngoai { background: linear-gradient(175deg, #a03a47, #7d1f2d 70%); }
/* Mặt trong lật hai lần nên phải vẽ ngược: cạnh rộng nằm dưới, đỉnh nằm trên */
.nap-trong {
  background: linear-gradient(0deg, #f1c9c5, #f8e0dc); transform: rotateX(180deg);
  clip-path: polygon(0 100%, 100% 100%, 51.5% 2%, 50% 0, 48.5% 2%);
}
.pb-dau {
  inset: auto auto auto 50% !important; top: 60%; width: 23%; aspect-ratio: 1; margin: calc(var(--w) * -.115) 0 0 calc(var(--w) * -.115);
  z-index: 5;
}
.dong .pb-dau::before, .dong .pb-dau::after {
  content: ""; position: absolute; inset: 4%; border-radius: 50%; border: 2px solid rgb(236 210 155 / .85); animation: gon 2.4s ease-out infinite;
}
.dong .pb-dau::after { animation-delay: 1.2s; }
@keyframes gon { from { transform: scale(.85); opacity: .9; } to { transform: scale(1.75); opacity: 0; } }
.nua {
  position: absolute; inset: 0; width: 100%; height: 100%; filter: drop-shadow(0 3px 4px rgb(0 0 0 / .35));
  transition: transform .8s cubic-bezier(.5, 0, .9, .6), opacity .8s ease;
}
.nua-trai { clip-path: polygon(0 0, 52% 0, 46% 18%, 55% 33%, 45% 52%, 54% 70%, 47% 86%, 52% 100%, 0 100%); }
.nua-phai { clip-path: polygon(52% 0, 100% 0, 100% 100%, 52% 100%, 47% 86%, 54% 70%, 45% 52%, 55% 33%, 46% 18%); }
.sap-chu { font: 400 33px var(--viet); fill: #6e4a18; }
.mo-goi { font: 400 clamp(24px, 7vw, 30px)/1 var(--viet); color: var(--do); transition: opacity .3s ease; }
.dong .mo-goi { animation: tho 2.4s ease-in-out infinite; }
@keyframes tho { 50% { opacity: .55; } }
.mo-khach { display: flex; flex-direction: column; gap: 0; transition: opacity .3s ease; }
.mo-khach small { font-size: 10.5px; font-weight: 400; letter-spacing: .3em; text-transform: uppercase; color: var(--chu-nhat); margin-right: -.3em; }
.mo-khach b { font: 500 clamp(19px, 5.4vw, 23px)/1.4 var(--co); color: var(--do-dam); text-wrap: balance; }

.dong .vang-chay {
  background: linear-gradient(100deg, var(--do-dam) 40%, #d9b268 50%, var(--do-dam) 60%) 100% 0 / 300% 100%;
  -webkit-background-clip: text; background-clip: text; color: transparent; animation: anh-kim 3.6s ease-in-out infinite;
}
@keyframes anh-kim { 55%, 100% { background-position: 0 0; } }

.mo.dang-mo .mo-goi, .mo.dang-mo .mo-khach { opacity: 0; animation: none; }
.mo.dang-mo .mo-dau { opacity: 0; transform: translateY(-10px); }
.mo.dang-mo .pb { animation: none; translate: 0 18svh; }
.mo.dang-mo .pb-dau::before, .mo.dang-mo .pb-dau::after { display: none; }
.mo.dang-mo .nua-trai { transform: translate(-75%, 150%) rotate(-42deg); opacity: 0; }
.mo.dang-mo .nua-phai { transform: translate(80%, 170%) rotate(38deg); opacity: 0; }
.mo.dang-mo .pb-nap { transform: rotateX(-180deg); z-index: 1; }
.mo.thiep-len .pb-the { transform: translateY(-74%); }
.mo.thiep-phong .pb-the {
  z-index: 7; transform: translate(var(--x), var(--y)) scale(var(--s));
  transition: transform .85s cubic-bezier(.7, 0, .2, 1); box-shadow: none; border-radius: 0;
}
.mo.thiep-phong .pb-the > * { opacity: 0; }
.mo.thiep-phong :is(.pb-sau, .pb-tui, .pb-nap) { opacity: 0; }
.mo.thiep-phong .pb { filter: none; }

/* ---------- Ba khung phim sau khi mở thiệp ---------- */
.trai { display: none; position: fixed; inset: 0; z-index: 26; background: #fff; overflow: hidden; }
.trai.chay { display: block; }
.trai.het { opacity: 0; pointer-events: none; transition: opacity 1s ease; }
.trai::before, .trai::after { content: ""; position: absolute; left: 0; right: 0; height: 6.5svh; background: #120a0c; z-index: 2; }
.trai::before { top: 0; }
.trai::after { bottom: 0; }
.khuc { position: absolute; inset: 0; opacity: 0; transition: opacity .9s ease; }
.khuc.hien { opacity: 1; }
.khuc img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 28%; transform: scale(1.08); }
.khuc.hien img { transform: none; transition: transform 3.4s ease-out; }
.khuc::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 34%; background: linear-gradient(transparent, rgb(30 8 12 / .55)); }
.khuc p {
  position: absolute; left: 0; right: 0; bottom: 11svh; z-index: 1; text-align: center; color: #fff;
  opacity: 0; transform: translateY(16px); transition: opacity .9s ease .35s, transform 1.1s var(--mem) .35s; text-shadow: 0 2px 14px rgb(30 8 12 / .6);
}
.khuc.hien p { opacity: 1; transform: none; }
.khuc-viet { font: 400 clamp(32px, 9.4vw, 52px)/1.15 var(--viet); white-space: nowrap; }
@media (max-aspect-ratio: 1 / 1) { .khuc.qua p { opacity: 0 !important; transition: opacity .25s ease; } }
.khuc-ngay { font: 400 clamp(26px, 8vw, 38px)/1.2 var(--co); letter-spacing: .12em; }
.bo-qua { position: absolute; right: 14px; bottom: calc(6.5svh + 12px); z-index: 3; color: #fff; font-size: 13px; padding: 6px 12px; border: 1px solid rgb(255 255 255 / .6); border-radius: 99px; background: rgb(30 8 12 / .3); }
@media (min-aspect-ratio: 1 / 1) {
  .khuc { left: calc(var(--i) * 33.334%); right: auto; width: 33.34%; }
  .khuc-viet { font-size: clamp(30px, 3.4vw, 54px); }
  .khuc-ngay { font-size: clamp(20px, 2.2vw, 34px); }
}

/* ---------- Chữ tự viết ---------- */
.viet { display: block; margin: 0 auto; width: auto; overflow: visible; fill: currentColor; }
.dong .viet.cho path { fill: transparent; stroke: currentColor; stroke-width: 7; stroke-dasharray: 1; stroke-dashoffset: 1; }
.dong .viet.da-hien path {
  --tre: calc(var(--i) * .15s);
  animation: viet-net .75s var(--tre) ease-in-out forwards, viet-mau .5s calc(var(--tre) + .5s) ease forwards;
}
@keyframes viet-net { to { stroke-dashoffset: 0; } }
@keyframes viet-mau { to { fill: currentColor; stroke-width: 0; } }

/* ---------- Bìa ---------- */
.bia { position: relative; text-align: center; padding-bottom: 44px; }
.bia-anh { overflow: hidden; -webkit-mask-image: linear-gradient(#000 76%, transparent); mask-image: linear-gradient(#000 76%, transparent); }
.bia-anh img { width: 100%; translate: 0 var(--troi, 0); }
.dong .bia.vao .bia-anh img { animation: thu-nho 7s ease-out both; }
@keyframes thu-nho { from { transform: scale(1.08); } to { transform: none; } }
.bia-tren {
  position: absolute; top: 18px; left: 0; right: 0; color: #fff; font-size: 12px; font-weight: 400;
  letter-spacing: .46em; text-transform: uppercase; text-shadow: 0 1px 8px rgb(0 0 0 / .6);
}
.dong .bia.vao .bia-tren { animation: gian-chu 2.2s var(--mem) both; }
@keyframes gian-chu { from { letter-spacing: .06em; opacity: 0; } }
.bia-ten { margin: -13% 0 0; position: relative; color: var(--do); font-weight: 400; }
.bia-ten .viet { height: clamp(66px, 20vw, 88px); }
.bia-va { display: block; color: var(--chu-nhat); margin: -2px 0; }
.bia-va .viet { height: clamp(24px, 7vw, 32px); }
.dong .bia-va .viet path { --i: 6 !important; }
.dong .bia-hai .viet path { animation-delay: calc(var(--i) * .15s + 1.2s), calc(var(--i) * .15s + 1.7s) !important; }
.bia-ngay { font: 400 21px/1 var(--co); letter-spacing: .14em; margin-top: 16px; color: var(--chu); }
.bia-vai { font-size: 11px; letter-spacing: .24em; text-transform: uppercase; color: var(--chu-nhat); margin-top: 10px; }
.dong .bia:not(.vao) :is(.bia-ngay, .bia-vai, .bia-tren) { opacity: 0; }
.dong .bia.vao .bia-ngay { animation: len-mem 1s 2.3s var(--mem) both; }
.dong .bia.vao .bia-vai { animation: len-mem 1s 2.6s var(--mem) both; }
@keyframes len-mem { from { opacity: 0; transform: translateY(14px); } }

.cuon {
  position: fixed; left: 50%; bottom: 16px; z-index: 20; translate: -50% 0; display: none; flex-direction: column; align-items: center;
  gap: 2px; color: #fff; font-size: 11px; letter-spacing: .14em; padding: 6px 14px; border-radius: 99px;
  background: rgb(94 21 33 / .72); opacity: 0; transition: opacity .5s ease; pointer-events: none;
}
.dong .cuon { display: flex; }
.cuon.hien { opacity: 1; }
.cuon.tat { opacity: 0; }
.cuon i { width: 9px; height: 9px; border-right: 1.5px solid; border-bottom: 1.5px solid; rotate: 45deg; animation: nay 1.5s ease-in-out infinite; }
@keyframes nay { 50% { transform: translate(3px, 3px); } }

/* ---------- Thư mời ---------- */
.tieu-viet { color: var(--do); text-align: center; font-weight: 400; }
.tieu-viet .viet { height: 62px; }
.thu { padding: 18px 24px 40px; text-align: center; }
.thu-nho { font-size: 12px; font-weight: 400; letter-spacing: .24em; text-transform: uppercase; color: var(--chu-nhat); margin-top: 12px; }
.thu-ten { font: 500 clamp(26px, 7.6vw, 32px)/1.3 var(--co); color: var(--do-dam); margin: 8px 0 22px; text-wrap: balance; }
.thu-loi { font-size: 15px; position: relative; padding-top: 16px; }
.thu-loi::before { content: ""; position: absolute; top: 0; left: 50%; width: 56px; height: 1px; margin-left: -28px; background: var(--do); }

/* ---------- Hai nhà ---------- */
.hai-nha { display: grid; grid-template-columns: 1fr 1fr; background: var(--hong-nhat); padding: 30px 12px; text-align: center; position: relative; overflow: hidden; }
.hai-nha::before { content: ""; position: absolute; left: 50%; top: 30px; bottom: 30px; width: 1px; background: var(--duong); transition: transform 1.1s var(--mem); }
.hai-tim { position: absolute; left: 50%; top: 50%; width: 30px; height: 30px; margin: -15px 0 0 -15px; background: var(--hong-nhat); border-radius: 50%; display: grid; place-items: center; z-index: 1; }
.hai-tim svg { width: 20px; height: 20px; fill: var(--do); }
.nha { padding: 0 14px; }
.nha h2 { font: 400 23px/1.3 var(--co); color: var(--do); margin: 0 0 8px; }
.nha p { font-size: 13.5px; line-height: 1.75; }
.nha b { font-weight: 500; }
.nha .nha-dc { font-size: 12px; line-height: 1.55; color: var(--chu-nhat); margin-top: 8px; }
.dong .hai-nha.cho:not(.da-hien) .nha { opacity: 0; }
.dong .hai-nha.cho:not(.da-hien) .nha:nth-of-type(1) { transform: translateX(-46px); }
.dong .hai-nha.cho:not(.da-hien) .nha:nth-of-type(2) { transform: translateX(46px); }
.dong .hai-nha.cho:not(.da-hien)::before { transform: scaleY(0); }
.dong .hai-nha.cho:not(.da-hien) .hai-tim { transform: scale(0); }
.dong .hai-nha .nha { transition: opacity 1s ease .15s, transform 1.1s var(--mem) .15s; }
.dong .hai-nha.da-hien .nha { opacity: 1; transform: none; }
.dong .hai-nha.da-hien::before { transform: none; }
.dong .hai-nha.da-hien .hai-tim { transform: none; transition: transform .7s cubic-bezier(.3, 1.8, .5, 1) .9s; }
.dong .hai-nha.da-hien .hai-tim svg { animation: dap 1.5s ease-in-out 1.7s infinite; }
@keyframes dap { 0%, 100% { transform: scale(1); } 14% { transform: scale(1.22); } 28% { transform: scale(1); } 42% { transform: scale(1.14); } 60% { transform: scale(1); } }

/* ---------- Thẻ cô dâu, chú rể: thẻ sau trượt phủ lên thẻ trước ---------- */
.doi-the { padding: 40px 20px 24px; }
.the-nguoi { position: relative; border-radius: 22px; overflow: hidden; box-shadow: 0 14px 30px rgb(94 21 33 / .22); margin-bottom: 26px; }
.dong .the-nguoi { position: sticky; top: clamp(16px, 8svh, 70px); scale: var(--thu, 1); transform-origin: 50% 0; }
.the-nguoi img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; object-position: 50% 20%; }
.the-nguoi figcaption {
  position: absolute; inset: auto 0 0; padding: 70px 22px 18px; color: #fff; display: flex; flex-direction: column;
  background: linear-gradient(transparent, rgb(45 12 18 / .62));
}
.the-nguoi i { font: 400 32px/1 var(--viet); }
.the-nguoi b { font: 500 22px/1.3 var(--than); letter-spacing: .12em; text-transform: uppercase; }

/* ---------- Sự kiện ---------- */
.su-kien { padding: 40px 22px 36px; text-align: center; }
.su-kien-phu { font-size: 14px; margin-top: 6px; text-wrap: balance; }
.vao-luc { font-size: 12.5px; font-weight: 400; letter-spacing: .16em; text-transform: uppercase; margin-top: 24px; color: var(--do-dam); }
.ngay-lon { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; margin: 12px auto 0; max-width: 340px; }
.ngay-lon span { font: 400 16px/1.35 var(--co); letter-spacing: .04em; border-block: 1px solid var(--do); padding: 9px 2px; color: var(--do-dam); }
.ngay-lon b { font: 400 92px/1 var(--co); color: var(--do); padding: 0 16px; min-width: 1.7em; font-variant-numeric: lining-nums; }
.dong .ngay-lon span { transition: opacity .9s ease .3s, transform 1.1s var(--mem) .3s; }
.dong .ngay-lon.cho:not(.da-hien) span { opacity: 0; }
.dong .ngay-lon.cho:not(.da-hien) span:first-child { transform: translateX(46px); }
.dong .ngay-lon.cho:not(.da-hien) span:last-child { transform: translateX(-46px); }
.dong .ngay-lon.cho:not(.da-hien) b { opacity: 0; transform: scale(.7); }
.dong .ngay-lon b { transition: opacity .6s ease, transform 1.2s cubic-bezier(.3, 1.5, .5, 1); }
.dong .ngay-lon.da-hien :is(span, b) { opacity: 1; transform: none; }
.am-lich { font-size: 13px; color: var(--chu-nhat); margin-top: 10px; }
.tiec { background: var(--hong-nhat); border-radius: 22px; padding: 26px 18px; margin-top: 28px; }
.tiec h2 { font: 400 24px/1.3 var(--co); color: var(--do-dam); margin: 0; }
.gio-tiec { display: flex; justify-content: center; gap: 40px; margin-top: 12px; }
.gio-tiec small { display: block; font-size: 11px; font-weight: 400; letter-spacing: .14em; text-transform: uppercase; color: var(--chu-nhat); }
.gio-tiec b { font: 400 30px/1.2 var(--co); color: var(--do); }
.dia-diem { font-weight: 500; margin-top: 14px; }
.dia-chi { font-size: 14px; text-wrap: balance; }
.nut-hang { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 16px; }
.nut {
  display: inline-block; padding: 10px 24px; border-radius: 99px; background: var(--do); color: #fff; font-size: 14px;
  font-weight: 400; text-decoration: none; border: 1px solid var(--do); transition: background .2s, color .2s;
}
.nut-vien { background: transparent; color: var(--do); }
.nut:hover { background: var(--do-dam); color: #fff; border-color: var(--do-dam); }
:is(.nut, .tam, .so-do, .pb, .dia):focus-visible { outline: 2px solid var(--do); outline-offset: 3px; }
.so-do { display: block; width: 100%; margin-top: 20px; border-radius: 18px; overflow: hidden; border: 1px solid var(--duong); }
.so-do img { width: 100%; }

/* ---------- Lịch tháng ---------- */
.lich-thang { background: var(--do); color: #fff; padding: 32px 22px 30px; }
.dong .lich-thang { transition: clip-path 1.3s cubic-bezier(.6, 0, .2, 1); clip-path: circle(150% at 50% 40%); }
.dong .lich-thang.cho:not(.da-hien) { clip-path: circle(0% at 50% 40%); }
.lich-dau { display: flex; align-items: baseline; justify-content: space-between; padding: 0 6px 16px; }
.lich-dau b { font: 400 44px/1 var(--viet); }
.lich-dau span { font: 400 19px/1 var(--co); letter-spacing: .1em; }
.lich-luoi { display: grid; grid-template-columns: repeat(7, 1fr); row-gap: 6px; text-align: center; background: var(--kem); color: var(--chu); border-radius: 18px; padding: 16px 10px; }
.lich-luoi small { font-size: 11px; font-weight: 500; color: var(--do); }
.lich-luoi span { position: relative; font-size: 14px; line-height: 38px; height: 38px; }
.dong .lich-luoi span { transition: opacity .4s ease calc(var(--i) * 22ms + .5s), transform .5s var(--mem) calc(var(--i) * 22ms + .5s); }
.dong .lich-thang.cho:not(.da-hien) .lich-luoi span { opacity: 0; transform: scale(.4); }
.lich-luoi .dung { color: #fff; font-weight: 500; z-index: 0; }
.lich-luoi .dung::before {
  content: ""; position: absolute; z-index: -1; left: 50%; top: 50%; width: 44px; height: 42px; margin: -22px 0 0 -22px;
  background: var(--do); clip-path: path("M22 40S2 27 2 13A11 11 0 0 1 22 8 11 11 0 0 1 42 13C42 27 22 40 22 40Z");
}
.dong .lich-thang.da-hien .dung::before { animation: dap 1.5s ease-in-out 1.8s infinite; }
.dem { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-top: 16px; text-align: center; }
.dem[hidden] { display: none; }
.dem p { background: rgb(255 255 255 / .12); border-radius: 12px; padding: 8px 2px; overflow: hidden; }
.dem b { display: block; font: 400 27px/1.2 var(--co); font-variant-numeric: tabular-nums lining-nums; }
.dem small { font-size: 11px; }

/* ---------- Xác nhận tham dự ---------- */
.xn { padding: 44px 20px; text-align: center; background: var(--kem); }
.xn .tieu-viet .viet { height: auto; width: min(100%, 320px); }
.xn-phu { font-size: 14px; max-width: 320px; margin: 8px auto 0; text-wrap: balance; }
.xn-form, .xn-xong { background: var(--hong-nhat); border-radius: 22px; padding: 22px 18px; margin-top: 20px; text-align: left; }
.xn-form { display: grid; gap: 16px; }
.xn-form[hidden], .xn-xong[hidden], .o[hidden], .xn-loi[hidden] { display: none; }
.o { display: grid; gap: 6px; }
.o > span { font-size: 13px; font-weight: 400; color: var(--chu-nhat); }
.o input, .o textarea {
  width: 100%; font: 400 16px/1.5 var(--than); color: var(--chu); background: #fff; border: 1px solid var(--duong);
  border-radius: 12px; padding: 10px 14px;
}
.o textarea { resize: vertical; }
.o :is(input, textarea):focus { outline: 2px solid var(--do); outline-offset: 1px; }
.chon { border: 0; margin: 0; padding: 0; display: grid; gap: 8px; }
.chon legend { padding: 0 0 8px; font: 500 16px/1.4 var(--co); color: var(--do-dam); }
.chon label { display: block; cursor: pointer; }
.chon input { position: absolute; opacity: 0; width: 0; height: 0; }
.chon span {
  display: block; text-align: center; padding: 10px 14px; border-radius: 99px; border: 1px solid var(--do); color: var(--do);
  font-size: 14px; font-weight: 400; background: #fff; transition: background .2s, color .2s, transform .2s;
}
.chon input:checked + span { background: var(--do); color: #fff; transform: scale(1.02); }
.chon input:focus-visible + span { outline: 2px solid var(--do); outline-offset: 2px; }
.so { display: grid; grid-template-columns: 46px 64px 46px; gap: 6px; align-items: center; }
.so button { height: 44px; border-radius: 50%; border: 1px solid var(--do); color: var(--do); background: #fff; font-size: 22px; line-height: 1; }
.o .so input { text-align: center; padding: 8px 4px; }
.bay { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.xn-loi { color: #a11d2b; font-size: 14px; font-weight: 400; }
.nut-gui { width: 100%; padding: 13px 24px; font-size: 15px; cursor: pointer; }
.nut-gui:disabled { opacity: .65; cursor: progress; }
.xn-xong { text-align: center; }
.xn-xong:focus { outline: none; }
.xn-xong svg { width: 42px; height: 42px; fill: var(--do); margin: 0 auto 4px; display: block; }
.dong .xn-xong svg { animation: dap 1.5s ease-in-out infinite; }
.xn-cam { font: 500 24px/1.35 var(--co); color: var(--do-dam); text-wrap: balance; }
.xn-xong .nut { margin-top: 14px; cursor: pointer; }

/* ---------- Ảnh ghép chữ lớn ---------- */
.ghep { background: var(--hong); position: relative; display: grid; grid-template-columns: repeat(12, 1fr); padding: 44px 16px 48px; row-gap: 6px; overflow: hidden; }
.ghep figure { box-shadow: 0 12px 26px rgb(94 21 33 / .22); }
.ghep img { width: 100%; }
.ghep-chu { font: 400 clamp(46px, 14vw, 62px)/1 var(--co); letter-spacing: .04em; color: var(--do); text-transform: uppercase; position: relative; z-index: 1; will-change: transform; }
.ghep-1 { grid-column: 1 / -1; }
.ghep-a { grid-column: 4 / -1; margin-top: -14px; }
.ghep-2 { grid-column: 1 / -1; margin-top: 12px; }
.ghep-b { grid-column: 1 / 9; margin-top: 6px; }
.ghep-3 { grid-column: 1 / -1; text-align: right; margin-top: -26px; }
.ghep-c { grid-column: 3 / -1; margin-top: 16px; }

/* ---------- Dải phim chạy ngang theo cuộn ---------- */
.phim { background: #17100f; position: relative; }
.dong .phim { height: var(--cao, 320svh); }
.phim-dinh { overflow-x: auto; padding: 26px 0; }
.dong .phim-dinh { position: sticky; top: 0; height: 100svh; overflow: hidden; display: flex; flex-direction: column; justify-content: center; gap: 16px; padding: 0; }
.phim-tieu { color: #f6d9d6; font-weight: 400; }
.phim-tieu .viet { height: 54px; }
.phim-chay {
  --lo: repeating-linear-gradient(90deg, transparent 0 9px, #f4ece6 9px 20px, transparent 20px 29px);
  position: relative; display: flex; gap: 8px; width: max-content; padding: 24px 12px; will-change: transform;
}
.phim-chay::before, .phim-chay::after { content: ""; position: absolute; left: 0; right: 0; height: 10px; background: var(--lo); opacity: .92; }
.phim-chay::before { top: 7px; }
.phim-chay::after { bottom: 7px; }
.phim-chay img { height: min(58svh, 540px); width: auto; aspect-ratio: 2 / 3; object-fit: cover; border-radius: 3px; }

/* ---------- Bộ ảnh ---------- */
.bo { padding: 44px 12px 40px; text-align: center; }
.bo-luoi { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-top: 16px; }
.tam { display: block; width: 100%; border-radius: 10px; overflow: hidden; }
.tam.ngang { grid-column: 1 / -1; }
.tam img { width: 100%; transition: transform .4s ease; }
.tam:hover img { transform: scale(1.03); }

/* ---------- Kết ---------- */
.ket { background: var(--hong-nhat); text-align: center; padding-bottom: 54px; }
.ket-anh > img { width: 100%; }
.ket-anh { -webkit-mask-image: linear-gradient(#000 86%, transparent); mask-image: linear-gradient(#000 86%, transparent); }
.ket-cam { color: var(--do); margin-top: 12px; font-weight: 400; }
.ket-cam .viet { height: clamp(78px, 22vw, 96px); }
.ket-loi { max-width: 330px; margin: 10px auto 0; padding: 0 16px; font-size: 14.5px; text-wrap: balance; }
.ket-ten { font: 400 32px/1.3 var(--viet); color: var(--chu); margin-top: 18px; }
.ket-ten i { font-style: normal; color: var(--do); }

/* ---------- Xem ảnh lớn ---------- */
.xem { border: 0; padding: 0; margin: 0; width: 100vw; height: 100dvh; max-width: none; max-height: none; background: rgb(20 10 12 / .94); }
.xem[open] { display: flex; align-items: center; justify-content: center; }
.xem::backdrop { background: rgb(20 10 12 / .94); }
.xem img { max-width: 100%; max-height: 100dvh; object-fit: contain; }
.xem-dong, .xem-chuyen { position: absolute; color: #fff; font-size: 34px; line-height: 1; width: 48px; height: 48px; z-index: 1; text-shadow: 0 1px 6px #000; }
.xem-dong { top: 8px; right: 8px; }
.xem-chuyen { top: 50%; margin-top: -24px; font-size: 44px; }
.xem-truoc { left: 4px; }
.xem-sau { right: 4px; }
.xem.mot-anh .xem-chuyen { display: none; }

/* ---------- Màn lớn: đặt sau các quy tắc chung để ghi đè được ---------- */
@media (min-width: 1280px) {
  .cuon { left: auto; right: calc(max(6vw, 48px) + 260px); translate: 50% 0; }
}

@media (min-width: 700px) {
  /* Ảnh bìa và tên phải nằm gọn trong màn đầu, tên xếp một hàng cho đỡ tốn chiều cao */
  .bia { padding-bottom: 24px; }
  .bia-anh { height: min(calc(100vh - 170px), 780px); }
  .bia-anh img { height: 100%; object-fit: cover; object-position: 50% 16%; }
  .bia-ten { margin-top: -26px; display: flex; align-items: center; justify-content: center; gap: 8px; }
  .bia-ten .viet { height: 56px; }
  .bia-va { margin: 0; }
  .bia-va .viet { height: 24px; }
  .bia-ngay { margin-top: 8px; }
  .bia-vai { margin-top: 6px; }

  /* Thẻ đang dính phải lọt trong màn, kể cả màn thấp */
  .the-nguoi img { aspect-ratio: auto; height: min(600px, calc(100vh - 110px)); }
}

/* ---------- Hiện dần khi cuộn tới ---------- */
.dong .len { transition: opacity .9s ease calc(var(--i, 0) * .12s), transform 1s var(--mem) calc(var(--i, 0) * .12s); }
.dong .len.cho:not(.da-hien) { opacity: 0; transform: translateY(26px); }

/* Ảnh mở ra như vén màn. Chỉ cắt ảnh bên trong, vì khung bị cắt hết thì trình duyệt coi như không nhìn thấy
   và không báo khi cuộn tới. */
.dong .man { transition: box-shadow .8s ease .6s, border-color .8s ease .6s; }
.dong .man > img { transition: clip-path 1.25s cubic-bezier(.7, 0, .2, 1), transform 1.7s var(--mem); clip-path: inset(0); }
.dong .man.cho:not(.da-hien) { box-shadow: none; border-color: transparent; }
.dong .man.cho:not(.da-hien) > img { clip-path: inset(46%); transform: scale(1.08); }
.dong .man.tu-duoi.cho:not(.da-hien) > img { clip-path: inset(100% 0 0 0); }
.dong .man > figcaption { transition: opacity .8s ease .7s, transform .9s var(--mem) .7s; }
.dong .man.cho:not(.da-hien) > figcaption { opacity: 0; transform: translateY(18px); }
