::-webkit-scrollbar {
  width: 8px;
}
::-webkit-scrollbar-track {
  background-color: #fff;
}
::-webkit-scrollbar-thumb {
  background-color: #d79b9d;
}
/* Nguồn theme99 dùng GowunDodum (gothic bo tròn, thân bài) + một serif Latin giãn ký tự
   cho các dòng trang trí. Cả ba font đang dùng của nguồn đều KHÔNG có subset `vietnamese`
   (xem .cache/thegoodday/theme99/token-map.md) nên phải thay:
     Be Vietnam Pro    -> vai GowunDodum (thân bài, trung tính, nhiều nét mảnh)
     Cormorant Garamond -> vai serif Latin trang trí (tiêu đề HOA giãn ký tự, số ngày)
   Đã kiểm cả hai đều có khối `/* vietnamese *​/` trên Google Fonts. */
body {
  font-family: "Be Vietnam Pro", sans-serif;
  background: #eae6e4;
}

.story-section .timeline-card::before {
  border-color: #d79b9d;
}
.story-section .timeline .title::before {
  border-color: #d79b9d;
}
.story-section .timeline-1 li {
  border-left-color: #f9f9f9;
}
.story-section .timeline-1 li:before {
  border-color: #d79b9d;
  box-shadow: 3px 3px 0px #f9f9f9;
}
.section-bg-affect:nth-child(even) {
  background-color: #fafafa;
}
/* .section-bg-affect:nth-child(even) {
  background-color: #f8f2f2;
} */
/* .section-bg-affect {
  background-color: #f6f1f3;
} */
/* .section-bg-affect {
  background-color: #fafafa;
} */
.story-section .timeline-card::before {
  border-color: #a2908b;
}

.story-section .timeline .title::before {
  border-color: #a2908b;
}

.story-section .timeline-1 li {
  border-left-color: #a2908b;
}

.story-section .timeline-1 li:before {
  border-color: #a2908b;
  box-shadow: 3px 3px 0px #a2908b;
}

.donate-section .donate-box .donate-card {
  width: 100%;
  border: 1px dashed #d3c4a1;
 
}
.donate-card.p-4.rounded.text-center {
  border: 1px dashed #a2908b;
}
.donate-section .donate-box .donate-card p:last-child {
  margin-bottom: 0 !important;
}

.donate-section .donate-box .donate-card .qr-code-image {
  max-width: 150px;
  display: block;
  cursor: zoom-in;
}
.donate-modal {
  display: none; 
  position: fixed;
  z-index: 199;
  padding-top: 100px;
  padding-bottom: 100px;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  overflow: auto;
  background-color: rgb(0,0,0)!important;
  background-color: rgba(0,0,0,0.5)!important;
}
.donate-modal-content {
  position: relative;
  background-color: #fefefe;
  margin: auto;
  padding: 0;
  width: 90%;
  max-width: 750px;
  box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19);
  -webkit-animation-name: animatetopfordonatemodal;
  -webkit-animation-duration: 0.4s;
  animation-name: animatetopfordonatemodal;
  animation-duration: 0.4s
}
@-webkit-keyframes animatetopfordonatemodal {
  from {top:-300px; opacity:0} 
  to {top:0; opacity:1}
}
@keyframes animatetopfordonatemodal {
  from {top:-300px; opacity:0}
  to {top:0; opacity:1}
}
.donate-modal strong, .donate-modal h3{font-family:inherit!important;}
.donate-modal-close {color: red;font-size: 28px;font-weight: bold;text-decoration: none;cursor: pointer;position: absolute;right: 15px;z-index: 999;}
.donate-modal-header {padding: 8px 16px;background-color: #f23b43;color: #fff;font-size:30px;text-align:center;line-height: 40px;}
.donate-modal-header strong{display:flex;align-items:center;justify-content: center;flex-wrap: wrap;color:#fff;}

.donate-modal-header strong span{margin-left:10px;}
.donate-modal-body {padding: 0 15px;}
/* .donate-box{display: flex;justify-content: space-evenly;flex-wrap: wrap;} */
.donate-box .donate-card:hover{box-shadow: 0 8px 16px 0 rgba(0,0,0,0.2);}
.donate-box .donate-card h3{padding:0;margin:0;margin-bottom: 20px;font-weight: bold;font-size: 18px;line-height: 30px;}
.donate-box .donate-card p {margin: 10px 0!important;font-size: 16px;}
.donate-box .donate-card p:last-child {margin-bottom:0!important;}
@media (max-width: 699px) {
.donate-box .donate-card{width:100%;}
.donate-wrap{
  width: 100%;
}
.qr-code-image {
  max-width: 200px;
}
}
.donate-box .donate-card {position:relative;}
.donate-box .donate-card .qr-code-image{max-width: 150px;border: 1px solid #ccc;padding: 3px;margin: auto;display: block;cursor: zoom-in;}
.donate-box .cryptos-box .cryptos-items {display: flex;flex-wrap: wrap;justify-content: center;margin-right: -10px;margin-left: -10px;margin-top: 10px;}
.donate-box .cryptos-box .cryptos-items .crypto-item {padding:10px 10px 0;}
.donate-box .cryptos-box .cryptos-items .crypto-item img {width:30px;max-width:100%;min-width:35px;cursor:pointer;}
.donate-box .cryptos-box-view {display:none;position: absolute;top: 0;left: 0;background: #ffffff;width: 100%;height: 100%;border-radius: 7px;padding:10px;text-align: center;}
.donate-box .cryptos-box-view h5 {font-weight: bold;font-size: 18px;display: flex;align-items: center;justify-content: center;margin-bottom: 15px;}
.donate-box .cryptos-box-view h5 img{width:25px;}
.donate-box .cryptos-box-view h5 .coin-img {margin-right: 5px;}
.donate-box .cryptos-box-view h5 .coin-id {margin-left: 5px;}
.donate-box .cryptos-box-view .coin-address {display: block;padding: 10px;background: #ffe2e4;margin-bottom: 15px;word-break: break-word;color: #201f1f;}
.donate-box .cryptos-box-view .cryptos-box-view-close {margin-top: 15px;background: #f23b43;color: #fff;padding: 5px 15px;border-radius: 5px;border: 1px solid #e3252d;}
.donate-box .cryptos-box-view .cryptos-box-view-close:hover{background: #e3252d;}

.offcanvas-menu li {
  position: relative;
}
.offcanvas-menu li:after {
  content: "";
  position: absolute;
  width: 50px;
  height: 1px;
  bottom: 0;
  left: 0;
  border: 1px solid #c9bab5;
}
.offcanvas-menu .nav-link {
  font-size: 1.2rem;
  text-transform: capitalize;
}
/* Tiêu đề section. Nguồn KHÔNG dùng serif cỡ lớn: nó in `- LOCATION -` kiểu chữ HOA
   ~16px giãn ký tự ~1px, phần còn lại là ảnh chữ Anh. Chủ sản phẩm chọn giữ chữ i18n
   (dịch được ở 34 locale) và style theo dáng đó -> 4 ảnh mang chữ Anh đã xoá khỏi img/. */
.section-title {
  font-family: 'Cormorant Garamond', serif;
  font-size: 1.35rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 3px;
  color: #1a1a1a;
}
.section-sub-title {
  font-family: "Be Vietnam Pro", sans-serif;
  letter-spacing: .2px;
  font-weight: 300;
  color: #4a4a4a;
}
.title {
  font-family: "Be Vietnam Pro", sans-serif;
}
.sub-title {
  font-family: "Be Vietnam Pro", sans-serif;
  font-weight: 300;
}
/* ══ Hero — dựng theo TRANG NGUỒN thegoodday theme99 ══
   https://thegoodday.kr/invitation/view/94463 · đo @430px, xem
   .cache/thegoodday/theme99/source-shape.md (cột "thứ tự hero").

   ĐÃ GỠ ở đây, vì nguồn KHÔNG có:
     · `.opening-section` — code chết của donor t6: không template nào có markup trỏ tới,
       còn trỏ ngược vào intro_bg_top/bottom.png là hai ảnh không tồn tại.
     · `.title-head` băng màu đặc `#b5b9a3` chạy ngang đầu trang — nguồn mở bằng nhánh lá
       mảnh trên nền trắng phẳng.
     · ô ngày cắt từng ký tự thành hình vuông có viền — nguồn để ngày là chữ thường.
     · vân giấy `bg.png` trên `.main_area` — nguồn nền trắng phẳng.
     · bo góc ảnh — cột `radius` trong source-shape.md là 0px ở CẢ 41 ảnh. */
.banner-section {
  background: #fff;
}
.main_area {
  background: #fff;
  padding: 0;
}

/* 1. nhánh lá mảnh, căn giữa, pt20 h30 ở nguồn */
.hero-branch {
  padding: 20px 0 0;
  text-align: center;
}
.hero-branch img {
  height: 30px;
  width: auto;
}

/* 2. dòng "WE'RE GETTING MARRIED!" — nguồn dùng ảnh chữ Anh; ở đây là chữ i18n để 34
      locale còn dịch được, style theo đúng dáng nguồn: serif, HOA, giãn ký tự rất rộng. */
.banner-section .title-head {
  background: none;
  padding: 26px 24px 22px;
  text-align: center;
}
.banner-section .title-head p {
  margin: 0;
  padding: 0 !important;
  font-family: 'Cormorant Garamond', serif;
  font-size: 15px;
  line-height: 1.6;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 3px;
  color: #1a1a1a;
}

.main_area .wrap-img {
  width: 100%;
  margin: 0;
  overflow: hidden;
}
.main_area .wrap-img img {
  display: block;
  width: 100%;
  height: 100%;
  border-radius: 0;
  object-fit: cover;
  object-position: center top;        /* ảnh chân dung dọc: cắt giữa là mất mặt người */
}

/* 4. icon đôi (couple-icon.png) — ornament căn giữa, pt30 h50 ở nguồn */
.hero-couple-icon {
  padding: 30px 0 0;
  text-align: center;
}
.hero-couple-icon img {
  height: 50px;
  width: auto;
}

/* 5. dòng tên: Tên ♥ Tên trên MỘT hàng, trái tim hồng ở giữa.
      Nguồn 24px cho tên, 12px cho ♥. Tên Việt/Latin dài hơn tên Hàn 3 ký tự nên cho
      phép xuống dòng và bỏ `letter-spacing` âm của nguồn (-1.8px dính dấu tiếng Việt). */
.main_area .name-user {
  padding: 30px 20px;
  font-size: 24px;
  line-height: 1.45;
  color: #323232;
}
.main_area .name-user p {
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 0 10px;
  letter-spacing: 0;
}
.main_area .name-user img.hero-heart {
  width: 20px;
  height: auto;
}

/* 6. ngày cưới — chữ thường một dòng, KHÔNG ô vuông (xem ghi chú đầu khối) */
.main_area .wrap-img-title {
  width: 100%;
  padding: 0 20px 40px;
  text-align: center;
}
.main_area .wrap-img-title .wrap-text {
  display: block;
  width: auto;
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 15px;
  letter-spacing: 1px;
  color: #131313;
}
/* Hai kẻ mảnh ôm dòng ngày — nguồn vẽ chúng trong ảnh 004a.png (`◆ 결혼합니다 ◆`);
   dựng lại bằng CSS để chữ còn dịch được. */
.main_area .wrap-img-title .wrap-text::before,
.main_area .wrap-img-title .wrap-text::after {
  content: "";
  display: block;
  width: 160px;
  height: 1px;
  margin: 0 auto;
  background: #d8d2d0;
}
.main_area .wrap-img-title .wrap-text::before { margin-bottom: 16px; }
.main_area .wrap-img-title .wrap-text::after  { margin-top: 16px; }

/* accessibility-btn */
/* LUẬT MÀU CỦA BẢN DỰNG NÀY: `#d79b9d` (hồng nhấn) chỉ dùng cho VIỀN, kẻ mảnh, trái tim,
   nền hover — KHÔNG bao giờ làm nền đặc dưới chữ. Nó sáng hơn olive `#9dae82` của donor
   một bậc, nên chỗ nào donor để chữ trắng/chữ đậm lên olive mà hoán hex thẳng là tụt xuống
   2.2–3.8:1. Nền đặc dưới chữ dùng `#8f5f61` (chữ trắng: 5.4:1). Nguồn cũng không có nút
   hồng đặc nào — nút của nó là chữ nhật xám hoặc viền mảnh. */
.accessibility-btn {
  background-color: #8f5f61;
  border: none;
}
.accessibility-btn:hover {
  opacity: 0.6 !important;
  background-color: #8f5f61;
  border: none;
}
/* video-section */
.video-section iframe {
  border-radius: 20px;
  overflow: hidden;
}
/* gallery-section */
#btn-see-more-gallery{
  border-radius: 50px;
  padding: 12px 24px;
}
.gallery-section .btn-secondary.btn-see-more-gallery {
  background: #8f5f61;
  border-color: #8f5f61;
}
.gallery-item{
  cursor: pointer;
}
/* .lg-backdrop/.lg-outer đã gỡ: lightGallery không còn trong bundle template66
   (đã cắt khỏi libs.js). Trình xem ảnh thay thế: components/photo_viewer. */

/* weddingdate-section */
.weddingdate-section .mini_calendar_main {
  display: flex;
  justify-content: center;
}
.weddingdate-section .mini_calendar .calendar-month,
.weddingdate-section .mini_calendar table th {
  color: #8f5f61;                     /* #d79b9d trên #fafafa chỉ 2.2:1 */
}
.weddingdate-section .mini_calendar {
  padding-bottom: 18px;
  border-bottom: 1px solid #c6c6c6;
}
.weddingdate-section .mini_calendar table th {
  color: #5c5c5c;
  border-top: 1px solid #e2dcda;
  border-bottom: 1px solid #e2dcda;
}

.weddingdate-section .mini_calendar td {
  color: #484747;
}
.weddingdate-section .mini_calendar td #today {
  background: #8f5f61;                /* chữ trắng trên #cfa4a4 chỉ 2.2:1 */
  color: #fff;
}
.weddingdate-section #clock > div {
  color: #8f5f61;                     /* số đếm ngược: #d79b9d trên #fafafa chỉ 2.2:1 */
}
.weddingdate-section .wrap-img {
  /* ĐÃ BỎ `width: 150px` của donor: nó cắt sẵn theo cỡ `icon-calendar.png` cũ, còn
     `text-align` ở đây là `start` -> nhánh lá 73px dạt trái, lệch tâm 39px. */
  width: 100%;
  margin: 0 auto;
  text-align: center;
}
/* story-section — donor để lọt mảnh `tion */` ở đây, thành selector không hợp lệ nên
   trình duyệt bỏ nguyên rule bên dưới. Lỗi có sẵn của template6, chỉ chữa trong phạm vi
   template66. */
.story-section .timeline .title {
  color: #c9bab5;
}
.timeline-card .img-holder {
  border-radius: 20px;
  overflow: hidden;
}
.invitation-couple {
  color: #c9bab5;
}
.invitation-couple p {
  color: #a88290;
  font-size: 2rem;
}
.invitation-couple .text {
  align-items: center;
  gap: 10px;
  align-items: baseline;
}
.invitation-couple .text small {
  font-size: 1rem;
}
.invitation-section {
  background: #fafafa;                 /* nguồn: nền phẳng, không vân giấy `bg.png` */
}
.invitation-section .invitation_wrapper {
  position: relative;
  width: 100%;
}
.invitation-section .title-parent,
.invitation-section .title-time {
  display: inline-block;
  border-top: 1px solid #B9B8BD;
  border-bottom: 1px solid #B9B8BD;
  color: #545454;
  line-height: 1;
  width: 150px;
}
.invitation-section .parent {
  color: #545454;
  margin-top: 40px;
  letter-spacing: 1px;
  font-size: 1.3rem;
  line-height: 2rem;
}
.invitation-section .good-day {
  width: 250px;
  margin: 0 auto;
}
.invitation-section .main_dday_area {
  color: #c99591;
  margin-bottom: 20px;
  font-size: 1.5rem;
  letter-spacing: 0px;
  line-height: 3rem;
}
.invitation-section .main_dday_area .time p {
  font-size: 4rem;
}
.invitation-section .main_dday_wrapper {
  color: #383838;
}
.invitation-section .invitation-title img {
  width: 50px;
}
.invitation-section .couple-img {
  border-radius: 20px;
  overflow: hidden;
}
.invitation-section .title-custom {
  justify-content: space-between;
  align-items: center;
}
.invitation-section .title-custom h2 {
  font-size: 30px;
  line-height: 1 !important;
}
.invitation-section .title-custom .text-right {
  color: #e6dfd0;
  width: 120px;
}
.invitation-section .title-custom .text-right p {
  font-size: 40px;
  line-height: 1;
}
.invitation-content p {
  line-height: 40px;
  color: #bc827e;
}
.invitation-section .couple p {
  color: #9a9a9a;
  font-size: 1rem;
}
.invitation-section .couple p span {
  color: #000;
  font-size: 2rem;
}
.invitation-section .couple p:nth-child(2) {
  width: 30px;
  margin: 0 auto;
}
.invitation-section .wrap-img img {
  border-radius: 50%;
  width: 80%;
}
.invitation-groom-parent {
  font-size: 16px;
  font-family: "Be Vietnam Pro", sans-serif;
}
.parent-name {
  font-weight: bold;
}
/* event-section */
.event-section .event-item {
  background-color: #fafafa;
}
.event-section a {
  background: #8f5f61;
  border-color: #8f5f61;
}

/* couple section */
.couple-section {
  background: #fafafa;                 /* nguồn: nền phẳng, không vân giấy `bg.png` */
}
.couple-section h2 {
  line-height: 1 !important;
}
.couple-section p {
  /* text-transform: uppercase; */
  font-size: 12px;
  letter-spacing: 1px;
}
.couple-section h2 {
  width: auto;
  margin: 0 auto;
  font-size: 1.5rem;
  color: #1a1a1a;                      /* nguồn: chữ HOA trần, không dải ruy băng */
}
.couple-section .wrap-img {
  width: 100%;
  margin: 0 auto;
}
.couple-section .wrap-img img {
  border-radius: 50%;
  max-width: 350px;
}
.couple-section .member {
  gap: 20px;
}
.couple-section .member .wrap-icon {
  align-items: center;
  justify-content: center;
  font-size: 1.8rem;
  color: #747474;
}
.couple-section .member .wrap-icon ul {
  border-top: 1px dashed #B5B6B8;
  width: 250px;
  margin: 0 auto;
  justify-content: center;
}
.couple-section .member .wrap-icon > span > span {
color: #424242;
}
.couple-section .member .member-contact a {
  color: #b6b6b6;
  font-size: 35px;
}
.couple-section .member-groom {
  /*background: url(../img/contact_groom2.png) -30px top no-repeat;*/
  /*background-size: 110%;*/
}
.couple-section .member-bride {
  /*background: url(../img/contact_bride2.png) -30px top no-repeat;*/
  /*background-size: 110%;*/
}
/* people-section */
.people-section .rounded-circle {
  overflow: hidden;
}
.people-section .title {
}
.people-section a {
  color: #8f5f61;                     /* chữ link: #d79b9d trên trắng chỉ 2.3:1 */
}

/* wishes-section */
.wish-box {
  border-color: #000;
}
.wishes-section button,
.event-section a {
  background-color: #8f5f61;
  /* Nền đã đậm lên thì chữ phải trắng. Trước đây hai nút này ăn `color: #4a4a4a` từ
     `.section-sub-title` — trên nền #8f5f61 chỉ còn 1.7:1. */
  color: #fff;
  border: none;
  transition: 0.2s;
}
.wishes-section button:hover,
.event-section a:hover {
  opacity: 0.6 !important;
  background-color: #8f5f61 !important;
  border: none !important;
}

/* donate-section */
.donate-section .donate-card {
  background: #fff;
}
.donate-card .sub-title {
  color: #000;
  font-size: 1.3rem;
}



/* footer-section */
.footer-section {
  background-color: #fafafa;
}
.footer-section .title {
  color: #2f2f2f;
  font-size: 2.6em;
}
.footer-section .sub-title {
  font-size: 1.2em;
}

@media screen and (max-width: 640px) {

  .modal-donate {
    height: 70%;
    overflow-y: scroll;
  }
  .modal-donate h2 {
    gap: 10px;
    font-size: 32px;
    padding-block: 10px;
  }
  .modal-donate h2 span {
    width: 24px;
  }
  .modal-donate button,
  .popup-video button {
    /* right: 10px; */
    font-size: 24px;
  }
  .modal-donate .donate-box {
    flex-wrap: wrap;
  }
  .modal-donate .donate-box > div {
    width: 100%;
  }
  .modal-donate .donate-box .donate-card p {
    font-size: 14px;
    line-height: 20px;
    margin-bottom: 15px !important;
  }

}
@media (max-width: 414px) {
  /* ĐÃ GỠ: `.section-title { font-size: 2.5rem }` và khối `.main_area .time` của donor —
     tiêu đề của nguồn là chữ HOA nhỏ giãn ký tự (không phóng to ở màn hẹp), còn
     `.main_area .time` không còn phần tử nào trong markup và trỏ vào flower.png đã xoá. */
  .couple-section .member .wrap-icon {
    font-size: 1.5rem;
  }
  .couple-section .member .member-contact a {
    font-size: 20px;
  }
  .invitation-section .parent,
  .invitation-section .main_dday_area {
    font-size: 1.2rem;
  }


  }

#wish-form {
  background-color: #f7efef;
}
button#btn-submit-comment {
  background-color: #8d7d78;
  color: #fff;
  text-transform: uppercase;
}
button#btn-submit-comment:hover {
  opacity:0.6;
  color:black;
}
#show-comments {
  background-color: #f7efef;
}
.box-comment {
  background-color: white;
}
.reply-comment-box {
  border-top: 1px dashed #8d7d78;
}
#show-comments::-webkit-scrollbar {
  width: 8px;
}
#show-comments::-webkit-scrollbar-thumb {
  background-color: #8d7d78;
}
.bride-story, .groom-story{
	font-family: "Be Vietnam Pro", sans-serif;
}

.text-story{
    overflow: hidden;
    -o-text-overflow: ellipsis;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
}
.weddingplan-footer {
  margin: auto;
  max-width: 575px;
}
.weddingplan-footer a {
  text-decoration: none;
}

.emoji-picker{max-width:100%;display:none;position: absolute;user-select: none!important;background: #fff;right: 0px;z-index: 9999;bottom: -355px;-webkit-box-shadow: 0 1px 2px 0 rgb(60 64 67 / 35%), 0 2px 6px 2px rgb(60 64 67 / 35%);box-shadow: 0 1px 2px 0 rgb(60 64 67 / 35%), 0 2px 6px 2px rgb(60 64 67 / 35%);border-radius: 0.5rem;overflow: hidden;}
.emoji-picker > emoji-picker{--emoji-size:22px;}
@media screen and (max-width: 400px){
  .emoji-picker > emoji-picker{ --num-columns: 6;}
}
#wish-form textarea:focus {box-shadow: none;}
#wish-form textarea{margin-bottom:0;border-radius:0!important;resize: none;}
#wish-form .textAreaIcons{position:relative;text-align:right;background: #fff;padding: 10px;border-top: none;border-top: 1px solid #f3f1f1;}
#wish-form .textAreaIcons span{color: #333;cursor:pointer;margin-right:4px;}
.tooltip{ width: 160px;}
.tooltip .tooltip-inner{padding: 8px 12px;font-size: 16px;}
#wish-form .wishes-autocomplete-content{position: absolute;top: 50px;width: 100%;left: 0;z-index: 333;background: #fff;-webkit-box-shadow: 0 1px 2px 0 rgb(60 64 67 / 35%), 0 2px 6px 2px rgb(60 64 67 / 35%);box-shadow: 0 1px 2px 0 rgb(60 64 67 / 35%), 0 2px 6px 2px rgb(60 64 67 / 35%);}
#wish-form .wishes-autocomplete-content input{
	background-image: url('../img/searchicon.png')!important;
	background-position: 10px!important;
	background-repeat: no-repeat!important;
	width: 100%!important;
	font-size: 16px!important;
	padding: 12px 20px 12px 40px!important;
	border: 1px solid #ddd!important;
	margin-bottom: 0!important;
	border-radius:0!important;
}
#wish-form .wishes-autocomplete-content ul{list-style-type: none;margin: 0;padding: 0;max-height: 300px;overflow: auto;display: block;height: auto;text-align:left;}
#wish-form .wishes-autocomplete-content ul li a {
	border: 1px solid #ddd!important;
	margin-top: -1px!important;
	padding: 12px!important;
	text-decoration: none!important;
	font-size: 15px!important;
	color: black!important;
	display: block!important;
}
#wish-form .wishes-autocomplete-content ul li a:hover{background-color: #eee!important;}
#wish-form .tooltip-custom {
	position: relative;
	display: inline-block;
}

/* dresscode */
.event-section .dresscode-colors-event{
  position: relative;
	display: flex;
	align-items: center;
	gap: 4px;
	background: rgb(246 246 246 / 70%);
	padding: 4px;
	width:36%;
	justify-content: center;
}
.event-section .dresscode-colors-event > .dresscode-colors-item{
	border-radius: 50%;
	width: 25px;
	height: 25px;
}
.event-section .dresscode-colors-wrap{
  position: absolute;
  bottom: 0;
  width: 100%;
}
.event-section .event-item:hover .tooltip-dresscode{
  display: block;
}
.event-section .event-item .tooltip-dresscode {
	width: 130px;
  font-family: sans-serif; 
	font-size: 14px;
  background-color: rgb(255 255 255);
  border: 1px solid #eee;
  color: #000;
  box-shadow: 0 .125rem .25rem rgba(0,0,0,.075)!important;
	text-align: center;
	border-radius: 6px;
	padding: 5px 0;
	position: absolute;
	z-index: 1;
  bottom: 40px;
  display: none;
}
.event-section .event-item .tooltip-dresscode::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 50%;
  margin-left: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: rgb(255 255 255) transparent transparent transparent;
}
@media (max-width:449px){
  .event-section .dresscode-colors-event{width: 100%!important;gap: 10px!important;}
	.event-section .dresscode-colors-wrap{bottom: 189px!important;}
}
.contact-validation-active .error-handling-messages {
  width: 100% !important;
  margin-top: 15px !important;
}

.contact-validation-active #success,
.contact-validation-active #c-success,
.contact-validation-active #c-error,
.contact-validation-active #error {
width: 100%;
color: #fff;
padding: 5px 10px;
font-size: 16px;
text-align: center;
display: none;
}
@media (max-width: 767px) {
.contact-validation-active #success,
.contact-validation-active #c-success,
.contact-validation-active #c-error,
.contact-validation-active #error {
  font-size: 15px;
}
}
.contact-validation-active #c-success,
.contact-validation-active #success {
background-color: #009a00;
border-left: 5px solid green;
margin-bottom: 5px;
}
.contact-validation-active #c-error,
.contact-validation-active #error {
background-color: #ff1a1a;
border-left: 5px solid red;
}
/* === Gift registry theme === */
/* Palette: Olive & Cream — olive-sage=#d79b9d cream=#e2dcda (mixed; legacy).
   Olive is light -> gradients end on deep olive #8f5f61 so white text passes ~AA.
   #gifts prefix (1,1,0) beats the component class-only base (0,1,0), no !important. */
#gifts .gift-card-price      { color: #8f5f61; }              /* readable deep-olive (~4.7:1) */
#gifts .gift-buy-link        { border-color: #d79b9d; color: #8f5f61; }
#gifts .gift-buy-link:hover  { background: #faf3f3; color: #8f5f61; }
/* Chữ trắng phải đạt ở CẢ HAI đầu dải, không chỉ đầu đậm: #a9797b mới 3.7:1. */
#gifts .gift-claim-btn       { background: linear-gradient(45deg, #8f5f61, #754b4d); }
#gifts .gift-header          { background: linear-gradient(135deg, #8f5f61, #754b4d); }
#gifts .gift-submit          { background: linear-gradient(45deg, #8f5f61, #754b4d); }
#gifts .gift-info-ic         { background: #f7efef; color: #8f5f61; }
#gifts .gift-copy-ic         { color: #8f5f61; }
#gifts .gift-copy-ic:hover   { color: #754b4d; }
#gifts .gift-cta-shopee      { background: linear-gradient(90deg, #8f5f61, #754b4d);
                               box-shadow: 0 10px 24px rgba(169,121,123,.32); color: #fff; }
/* Leak defenses (universal): template global a / h* (0,1,1) outrank class-only base (0,1,0). */
#gifts .gift-modal-title     { color: #fff; }
#gifts .gift-release-link    { color: #E8556A; }
#gifts .gift-release-link:hover { color: #d23a51; }
/* Self-buy mixed olive/cream -> soft olive-cream tint */
#gifts .gift-selfbuy         { background: #faf4f3; border-color: #ecdedd; }
#gifts .gift-selfbuy-ic      { background: #f7efef; color: #8f5f61; }
#gifts .gift-copyall         { color: #8f5f61; }
#gifts .gift-copyall:hover   { color: #754b4d; }

/* ══════════════════════════════════════════════════════════════════════════════
   BÁM NGUỒN — thegoodday theme99 · https://thegoodday.kr/invitation/view/94463
   Đo @430px: .cache/thegoodday/theme99/source-shape.md · palette: token-map.md

   Nguồn là một trang TRẮNG PHẲNG, đường nét mảnh, chữ nhỏ giãn ký tự, ảnh KHÔNG bo góc
   (cột `radius` = 0px ở cả 41 ảnh), nhấn duy nhất là hồng phấn #e4a8a8. Palette repo đẩy
   đậm hơn nguồn một bậc vì chữ tiếng Việt có dấu cần tương phản cao hơn chữ Hàn cùng cỡ.
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Chuyển động lúc mở trang ──────────────────────────────────────────────────
   Nhịp của nguồn, đọc từ /static/js/front.js — xem đầu js/intro-opening.js.
   Ẩn CHỈ khi <html> mang cờ `tpl66-opening`, và cờ đó chỉ được đặt khi JS chạy được:
   không có JS -> không có cờ -> hero hiện bình thường. Đây là lý do khối này không
   dùng `opacity: 0` trần (xem hero-scene-guide.md, mục watchdog 3 giây). */
/* Hai lựa chọn có chủ đích ở đây, cả hai đều để tránh giẫm chân:

   1. Cú TRƯỢT đặt lên PHẦN CON (`> *`), không lên chính `[data-open-layer]`. Wrapper là
      thứ quyết định hộp layout; cho nó trượt 50px thì trong ~1.5 giây đầu hộp của lớp
      này ăn vào hộp của lớp kia (check-hero-overlap.mjs đo được đúng 50px giữa
      `.wrap-img-title` và `.name-user`). Đẩy phần con thì hộp đứng yên.

   2. Dùng thuộc tính `translate` chứ KHÔNG dùng `transform`. GSAP (motion-scrub-hero.js)
      ghi `transform` lên đúng những phần tử con này khi cuộn; `translate` là thuộc tính
      riêng, trình duyệt hợp thành nó TRƯỚC `transform` nên hai chuyển động cộng vào nhau
      thay vì cái sau xoá cái trước. Trình duyệt quá cũ không hiểu `translate` thì chỉ mất
      cú trượt, phần mờ->rõ vẫn còn. */
html.tpl66-opening .banner-section [data-open-layer] {
  opacity: 0;
}
html.tpl66-opening .banner-section [data-open-layer] > * {
  translate: 0 50px;                    /* .animationUp   { top:  50px } */
}
html.tpl66-opening .banner-section [data-open-layer="1"] > *,
html.tpl66-opening .banner-section [data-open-layer="2"] > * {
  translate: 0 -50px;                   /* .animationDown { top: -50px } */
}
html.tpl66-opening .banner-section [data-open-layer].is-on {
  opacity: 1;
  transition: opacity 1500ms cubic-bezier(.33, 0, .2, 1);       /* 1500ms của nguồn */
}
html.tpl66-opening .banner-section [data-open-layer].is-on > * {
  translate: 0 0;
  transition: translate 1500ms cubic-bezier(.33, 0, .2, 1);
}
@media (prefers-reduced-motion: reduce) {
  html.tpl66-opening .banner-section [data-open-layer] > * { translate: none; }
  html.tpl66-opening .banner-section [data-open-layer].is-on,
  html.tpl66-opening .banner-section [data-open-layer].is-on > * { transition: none; }
}

/* Chỉ các lớp hero THẬT SỰ được transform mới nâng layer riêng; bật `will-change` tràn
   lan tốn bộ nhớ mobile. Cảnh parallax đẩy PHẦN CON bên trong chứ không đẩy wrapper —
   wrapper là thứ quyết định hộp layout, đẩy nó là hai khối chữ ăn vào nhau. */
.tpl-scrub .banner-section #main-image,
.tpl-scrub .banner-section .hero-branch img,
.tpl-scrub .banner-section .hero-couple-icon img,
.tpl-scrub .banner-section .name-user p,
.tpl-scrub .banner-section .title-head p {
  will-change: transform;
}

/* ── Nút truy cập nhanh ────────────────────────────────────────────────────────
   Nguồn không có cụm nút này (chức năng của app). Style nó nói cùng thứ tiếng: chữ
   nhật GÓC VUÔNG, viền mảnh, nền trắng, chữ nhỏ giãn ký tự — thay khối đặc bo 50px
   full-width của donor. */
.tpl-scrub .accessibilities-section .accessibility-btn {
  background: #fff;
  border: 1px solid #e2dcda;
  border-radius: 0;
  color: #5b5b5b;
  /* KHÔNG giãn ký tự ở nhãn nút. Nguồn giãn ký tự cho tiêu đề section (chữ ngắn, HOA), còn
     ở đây `letter-spacing: .6px` cộng thêm ~10px cho "Xác nhận tham dự" (16 ký tự) — cùng
     với 2px viền là đủ tràn cột 173px và xuống hai dòng, trong khi template65 (để `normal`)
     vẫn một dòng. Cỡ chữ đặt ở khối bên dưới. */
  /* Ba nút MỘT HÀNG (`col-sm-4`) như template65. Từ 576px `.wrapper` chỉ còn 575px nên mỗi
     cột ~181px — phải giành lại từng px cho nhãn, nếu không "Wedding Gift Box" xuống hai
     dòng trong khi hai nút bên cạnh một dòng. Ba chỗ giành được:
       1. bỏ lề NGANG của `m-1` — khe giữa ba nút đã do gutter `gx-2` của row lo, `m-1` chỉ
          làm hẹp nút thêm 8px;
       2. đệm ngang về 8px cho ĐỀU — markup donor thiếu class `px-2` ở nút "Mừng cưới" nên
          nó ăn đệm mặc định 12px của `.btn`, hẹp hơn hai nút kia;
       3. cỡ chữ 14px thay vì 15px của `libs.css` — Be Vietnam Pro rộng hơn font của
          template1 khoảng 11% ở cùng cỡ, hạ 1px là bù đúng phần chênh.
     `!important` là bắt buộc: nhóm tiện ích khoảng cách của Bootstrap (`m-1`, `px-2`) đều
     khai `!important`, specificity thường không thắng được. */
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 1;
  min-height: 48px;                   /* đồng thời đủ vùng chạm 48px */
  white-space: normal;
  margin-left: 0 !important;
  margin-right: 0 !important;
  padding-left: 8px !important;
  padding-right: 8px !important;
  font-size: 14px;
}
.tpl-scrub .accessibilities-section .row > [class*="col-"] { display: flex; }
.tpl-scrub .accessibilities-section .accessibility-btn:hover {
  background: #faf3f3;
  border-color: #d79b9d;
  color: #8f5f61;
  opacity: 1 !important;
}
/* Icon không được tách khỏi chữ khi chữ xuống dòng: để cả cụm là một inline-flex thì chữ
   xuống dòng NGAY BÊN CẠNH icon, không chui xuống dưới icon. `text-wrap: balance` chia hai
   dòng cho đều ở locale dài hẳn (Swahili 27 ký tự) thay vì để rơi một chữ xuống dòng dưới. */
.tpl-scrub .accessibilities-section .accessibility-btn .content-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  text-align: center;
  text-wrap: balance;
  top: 0;                             /* libs.css đẩy `.content-button` xuống 3px */
}
.tpl-scrub .accessibilities-section .access-section-icon { flex-shrink: 0; }
/* `assets/img/{wishes,rsvp4,money_bag}.png` là icon TRẮNG, vẽ cho nền đặc của donor.
   Bỏ nền đặc là chúng tàng hình. Sửa trong phạm vi template, KHÔNG đụng asset dùng chung. */
.tpl-scrub .accessibilities-section .access-section-icon {
  filter: brightness(0) opacity(.45);
}

/* ── Khối lời mời ──────────────────────────────────────────────────────────────
   Nguồn: vòm xám bo tròn đáy (222×303, số trắng lớn), nhánh hoa mảnh, chữ căn giữa,
   nền phẳng #fafafa. Bỏ vân giấy `bg.png` của donor. */
.invitation-section {
  background: #fafafa;
}
.invite-arch {
  width: 111px;
  padding: 26px 0 30px;
  margin: 0 auto 34px;
  background: #b8b8b8;
  border-radius: 0 0 56px 56px;
  color: #fff;
  text-align: center;
  font-family: 'Cormorant Garamond', serif;
  font-size: 32px;
  line-height: 1.55;
  letter-spacing: 2px;
}
.invite-arch span { display: block; }
.invitation-section .invitation-title .invite-flower {
  height: 80px;                       /* nguồn: 009.png cao 80px */
  width: auto;
  margin-bottom: 14px;
}
.invitation-section .invitation-content p {
  font-size: 16px;
  line-height: 1.7;
  font-weight: 300;
  color: #1a1a1a;
}
/* Ảnh phụ cuối khối: nguồn để `ph20` hai bên, KHÔNG bo góc, KHÔNG cắt tròn. */
.invitation-section .wrap-img-couple img,
.invitation-section .wrap-img img {
  border-radius: 0;
  width: 100%;
  max-width: none;
}
.invitation-section .wrap-img-couple {
  padding: 0 20px;
}
/* Ảnh phụ cuối khối lời mời — nguồn đo được 390×510 (1.31). Khoá cùng lý do như hero. */
.invitation-section .wrap-img-couple {
  overflow: hidden;
}
.invitation-section .wrap-img-couple img {
  aspect-ratio: 390 / 510;
  height: 100%;
  object-fit: cover;
  object-position: center top;
}

/* Dòng tên trong khối lời mời — nhãn nhỏ TRÊN tên, trái tim giữa hai cột. */
.invitation-couple p#couple-name {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;              /* trái tim ăn theo dòng TÊN, không theo dòng nhãn */
  justify-content: center;
  gap: 0 12px;
  font-size: 24px;
  color: #323232;
}
.invitation-couple .couple-name__side {
  display: flex;
  flex-direction: column;
  line-height: 1.3;
}
.invitation-couple .couple-name__side small {
  font-size: 11px;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: #6f6f6f;                     /* #8b8b8b trên #fafafa chỉ 3.3:1 ở cỡ 11px */
}
.couple-name_left_side {
  align-items: flex-end;
}
.couple-name_right_side {
  align-items: flex-start;
}
.invitation-couple .couple-name__heart {
  width: 20px;
  height: auto;
  margin-bottom: 6px;
}

/* ── Khối dâu & rể ─────────────────────────────────────────────────────────────
   Nguồn xếp HAI CỘT cạnh nhau (`w50p` mỗi bên, ảnh 200×200 vuông), donor xếp chồng
   hai khối trọn bề ngang với ảnh tròn 350px. Đây là khác biệt về BỐ CỤC — đổi màu
   không chữa được, và là đúng vòng đã mất ở template65. */
.couple-section {
  background: #fafafa;
}
.couple-section h2 {
  /* Bỏ dải ruy băng `groombride.png` của donor: nguồn không có dải nào, chỉ chữ HOA trần. */
  background: none;
  width: auto;
  color: #1a1a1a;
}
.couple-section .wrap-people {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 0 10px;
}
.couple-section .member {
  width: 50%;
  padding-top: 30px !important;
  padding-bottom: 0 !important;
  gap: 10px;
}
/* Ảnh dâu/rể tỉ lệ 9:16 (dọc) — QUYẾT ĐỊNH CỦA CHỦ SẢN PHẨM, cố ý lệch nguồn: theme99 để
   ảnh vuông 200×200, nhưng ảnh chân dung cặp đôi tải lên vốn là ảnh dọc, ép vuông là cắt
   mất phần lớn khung hình.

   Khoá tỉ lệ ở KHUNG chứ không ở thẻ `<img>`: `aspect-ratio` trên `<img>` chỉ có hiệu lực
   khi cả hai chiều để auto, nên một thuộc tính `width`/`height` trên thẻ, hay một rule
   `height` từ media query dùng chung, là đủ để nó im lặng mất tác dụng và ảnh kéo cả cột
   dài ra. Khoá ở khung thì không quy tắc nào của `<img>` phá được.
   `object-position: top` vì ảnh chân dung cắt giữa là mất mặt người. */
.couple-section .wrap-img {
  aspect-ratio: 9 / 16;
  overflow: hidden;
}
.couple-section .wrap-img img {
  border-radius: 0;                   /* nguồn: radius 0 ở mọi ảnh */
  display: block;
  width: 100%;
  height: 100%;
  max-width: none;
  object-fit: cover;
  object-position: center top;
}
/* `.wrap-people` mang class `.section-title` (markup của donor) nên MỌI chữ trong khối
   thừa kế serif HOA giãn ký tự — đúng cho tiêu đề, sai cho tên và đoạn giới thiệu. Kéo
   hai thứ đó về chữ thân bài; chỉ nhãn `<small>` giữ dáng HOA nhỏ của nguồn. */
.couple-section .member .wrap-icon,
.couple-section .member h3 {
  font-family: "Be Vietnam Pro", sans-serif;
  text-transform: none;
  letter-spacing: normal;
}
.couple-section .member .wrap-icon {
  font-size: 1rem;
  color: #323232;
}
/* Nhãn ĐỨNG TRÊN tên (dáng của nguồn). `<small>` là inline; cho nó `display:block` bên
   trong một `<span>` inline làm hộp cha vỡ và cả cụm lệch khỏi trục giữa của cột ảnh —
   phải nâng chính `<span>` lên thành cột flex thì mới căn giữa đúng. */
.couple-section .member .wrap-icon > span {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
}
.couple-section .member .wrap-icon > span > small {
  font-size: 11px;
  letter-spacing: 1px;
  text-transform: uppercase;
  color: #6f6f6f;                     /* #8b8b8b trên #fafafa chỉ 3.3:1 ở cỡ 11px */
}
.couple-section .member .wrap-icon ul {
  width: auto;
  border-top: 1px solid #e2dcda;      /* nguồn: kẻ MẢNH liền, không phải gạch đứt */
}
.couple-section .member h3 {
  font-size: 14px;
  line-height: 1.6;
  font-weight: 300;
  color: #5b5b5b;
}
@media (max-width: 359px) {
  /* Máy rất hẹp: hai cột 50% làm tên dài vỡ chữ -> về một cột. */
  .couple-section .wrap-people { flex-direction: column; }
  .couple-section .member { width: 100%; }
}

/* ── Hộp mừng cưới ─────────────────────────────────────────────────────────────
   Nguồn: ornament hoa hồng nhạt, tiêu đề HỒNG, gạch chân mảnh cùng màu. */
.donate-section .donate-flower {
  display: block;
  height: 40px;                       /* nguồn: 025.png cao 40px */
  width: auto;
  margin: 0 auto 10px;
}
.donate-section .section-title {
  color: #8f5f61;                     /* #b97b7d ở 21.6px/300 chỉ 3.25:1, chưa phải cỡ lớn */
  padding-bottom: 14px;
  border-bottom: 1px solid #eccfd0;
  display: block;
}

/* ── Gallery · lời chúc · footer ───────────────────────────────────────────────
   Nút của nguồn là chữ nhật góc vuông, không phải viên thuốc bo 50px. */
#btn-see-more-gallery,
.gallery-section .btn-secondary.btn-see-more-gallery {
  border-radius: 0;
  letter-spacing: 1px;
  /* Nút "xem thêm ảnh" của nguồn là chữ nhật ĐẶC chữ trắng. Nền phải đủ đậm: chữ trắng
     trên hồng nhấn #d79b9d chỉ được 2.3:1, không đọc nổi ngoài nắng. */
  background-color: #8f5f61;
  border-color: #8f5f61;
  color: #fff;
}
.video-section iframe { border-radius: 0; }

/* Nguồn không có sổ lời chúc (chức năng của app). Dịch sang ngôn ngữ thị giác của nó:
   khung viền mảnh trên nền trắng, thay hai tấm nền đặc của donor. */
#wish-form,
#show-comments {
  background-color: #fff;
  border: 1px solid #e2dcda;
}
/* Nền thẻ đổi sang trắng (donor để `#f7efef`) nên ô nhập trắng của component dùng chung
   tan vào mặt thẻ — không còn thấy mép ô, chỉ còn chữ gợi ý trôi lơ lửng. Trả lại viền
   mảnh cùng màu với viền thẻ.
   `!important` là bắt buộc, không phải cẩu thả: markup dùng chung gắn class Bootstrap
   `.border-0` (`border: 0 !important`), specificity thường không thắng được. */
#wish-form .form-control,
#wish-form textarea,
#wish-form input {
  border: 1px solid #e2dcda !important;
  /* Ô nội dung đã vuông góc (dòng `#wish-form textarea` phía trên) và nút gửi cũng vuông;
     ô tên thì đang ăn `border-radius` mặc định của `.form-control`. Trước đây không viền
     nên không ai thấy, giờ viền hiện thì hai ô lệch dáng nhau. */
  border-radius: 0;
}
#wish-form .form-control:focus,
#wish-form textarea:focus,
#wish-form input:focus {
  border-color: #8f5f61 !important;
  box-shadow: 0 0 0 .18rem rgba(143, 95, 97, .18);
}
button#btn-submit-comment {
  background-color: #8f5f61;          /* chữ trắng trên #a9797b mới 3.7:1 */
  border-radius: 0;
  letter-spacing: 1px;
}
.footer-section {
  background: #fff;
}
/* Ornament trên lịch — cùng nhánh lá của hero, cỡ nhỏ như các ornament căn giữa của nguồn. */
.weddingdate-section .wrap-img .calendar-branch {
  height: 30px;
  width: auto;
}
/* Chữ "giá tham khảo" của component quà dùng #999 trên trắng = 2.85:1 ở cỡ 12px. Đây là
   lỗi của component DÙNG CHUNG (mọi template đều dính) — chữa trong phạm vi template66
   theo đúng lối khối gift theme ở trên, không sửa asset dùng chung. */
#gifts .gift-card-price-ref { color: #6f6f6f; }
