@charset "UTF-8";
@import url("https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300..700&family=Noto+Serif+JP:wght@200..900&family=Shippori+Mincho&display=swap");

@media screen and (min-width: 1600px) {
  html {
    /* ĐÃ REVERT về giá trị gốc (12.6984126984px) — từng thử giảm ~13.5%
       theo yêu cầu "font to quá", nhưng root font-size này KHÔNG chỉ quyết
       định cỡ chữ mà còn là đơn vị "rem" cho hầu hết max-width container
       toàn site (banner, hero, lineup-link__inner...). Giảm root font kéo
       theo mọi container đó co lại tỉ lệ thuận trong khi header
       (.custom-header, dùng px cố định, không phải rem) vẫn full-width —
       gây lệch rõ: nội dung bó hẹp giữa màn hình, lề 2 bên giãn to bất
       thường so với header tràn viền (xem ảnh chụp sếp gửi, trang chủ).
       Muốn giảm cỡ CHỮ mà không ảnh hưởng bề rộng layout thì phải chỉnh
       riêng từng font-size của các thành phần chữ, không đụng root này. */
    font-size: 12.6984126984px;
  }
}
@media screen and (min-width: 768px) and (max-width: 1599px) {
  html {
    font-size: 0.7936507937vw;
  }
}
@media screen and (max-width: 767px) {
  html {
    font-size: 2.5vw;
  }
}
html * {
  outline: none;
  /* Tắt hẳn hiệu ứng "chớp sáng" mặc định của trình duyệt mobile (Android Chrome/Safari) khi chạm
     vào link/nút/phần tử có thể bấm — đây là -webkit-tap-highlight-color mặc định (thường là màu
     xám/xanh phủ full khối), không phải hiệu ứng site tự thêm. Áp dụng toàn site vì lỗi này xảy ra
     ở bất kỳ phần tử bấm được nào, không riêng 1 trang. */
  -webkit-tap-highlight-color: transparent;
}

[x-cloak] {
  display: none !important;
}

:root {
  /* Lề tối thiểu dùng chung cho MỌI container "max-width + margin auto"
     toàn site (desktop) — đảm bảo nội dung không sát mép màn hình ở dải
     laptop 14-16" (~1366-1600px), nơi max-width co theo % viewport nên
     lề tự nhiên còn lại rất mỏng nếu chỉ padding cố định 2rem. min 24px,
     tự nới theo 4vw, tối đa 64px (không phình quá lớn trên màn rất
     rộng — ở đó margin-auto của max-width vốn đã đủ thoáng rồi).
     Đây là biến CHUNG cho toàn site: style.css lẫn <style> riêng trong
     từng trang HTML đều dùng được (custom property kế thừa qua toàn bộ
     DOM, không bị giới hạn trong 1 file CSS) — đổi lề toàn site chỉ cần
     sửa 1 dòng này thay vì sửa từng trang. KHÔNG áp dụng cho mobile
     (≤767px) — các override mobile giữ nguyên giá trị rem cũ riêng. */
  --vtm-gutter: clamp(24px, 4vw, 64px);
}

a {
  color: #001A4C;
  text-decoration: none;
}

*,
*::before,
*::after {
  box-sizing: border-box;
}

html,
body,
h1,
h2,
h3,
h4,
h5,
h6,
div,
dl,
dt,
dd,
p {
  padding: 0;
  margin: 0;
}

ul,
ol,
li {
  padding: 0;
  margin: 0;
}

li {
  list-style: none;
}

img {
  vertical-align: bottom;
}

figure {
  padding: 0;
  margin: 0;
}

input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button {
  -webkit-appearance: none;
          appearance: none;
  margin: 0;
}

input[type=number] {
  -webkit-appearance: textfield;
     -moz-appearance: textfield;
          appearance: textfield;
}

/* ===== Fixed Navigation Bar (.custom-header) =====
   Was previously copy-pasted into a <style> block inside every page's
   <head> (index/product/chinhsach/lienhe/aboutus/blog/huongdanmuahang/
   showroom/aboutus1) — consolidated here so it only needs editing once. */
.custom-header {
  /* スクロール追従（固定） */
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 9999;

  /* デザイン・配置 */
  background-color: rgba(255, 255, 255, 0.95);
  display: flex;
  justify-content: space-between;
  align-items: center;
  /* padding-inline co giãn: nền trắng + box-shadow vẫn tràn viền 100%
     (giữ đúng look thanh nav hiện có), nhưng bề rộng NỘI DUNG bên trong
     (logo...tìm kiếm) bị giới hạn không quá 1422px — khớp đúng bề rộng
     container chuẩn site đang dùng lặp lại nhiều nơi (max-width: 112rem,
     xem .s-lineup-link__inner) để header đồng bộ với các khối nội dung
     bên dưới thay vì rộng hơn hẳn. Mốc cũ 1600px chỉ kích hoạt trên màn
     hình rất rộng (>1680px) nên các laptop 15-16" phổ biến (~1536-1920px
     logic) không được hưởng, vẫn thấy khoảng cách logo/nav bị kéo giãn —
     hạ xuống 1422px để áp dụng sớm hơn, bù đúng ở dải kích thước đó.
     Dưới 1422px+80px padding, công thức tự rút về đúng 40px như cũ
     (max() chọn giá trị lớn hơn), không ảnh hưởng màn hình hẹp. */
  padding-block: 15px;
  padding-inline: max(40px, calc((100% - 1422px) / 2 + 40px));
  box-sizing: border-box;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  transition: all 0.3s ease;
}

/* ロゴのスタイル */
.custom-header__logo a {
  display: flex;         /* 画像下部の不要な余白を消す */
  align-items: center;   /* 縦方向の中央揃え */
  text-decoration: none;
}

.custom-header__logo img {
  display: block;
  max-height: 30px;      /* ★ロゴ画像が大きすぎる場合はここで高さを調整してください */
  width: auto;
}

/* ナビゲーションリストのスタイル */
.custom-header__nav {
  display: flex;
  gap: 30px;
  list-style: none;
  margin: 0;
  padding: 0;
}

.custom-header__nav a {
  text-decoration: none;
  color: #333;
  font-weight: bold;
  font-size: 15px;
  text-transform: uppercase;
  transition: opacity 0.3s;
}

@media (hover: hover) and (min-width: 768px) {
  .custom-header__nav a:hover {
  opacity: 0.5;
}
}
/* Trang đang xem — xem custom-header.js (so khớp theo path, kể cả tiền tố). */
.custom-header__nav a.is-active {
  color: #ac801a;
}

/* "DANH MỤC" — mục gộp các trang phụ (Về chúng tôi / Showroom / Hướng dẫn mua
   hàng / Blog) thành 1 dropdown thay vì liệt kê rời rạc trên thanh nav chính. */
.custom-header__nav-dropdown {
  position: relative;
}
.custom-header__nav-dropdown-toggle {
  /* Trình duyệt tự thêm margin/line-height/appearance riêng cho <button>
     (khác nhau giữa Chrome/Firefox/Safari) khiến chữ bị lệch nhẹ so với
     các mục <a> cạnh bên — reset toàn bộ để đảm bảo thẳng hàng mọi nơi. */
  appearance: none;
  -webkit-appearance: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin: 0;
  background: none;
  border: none;
  padding: 0;
  font-family: inherit;
  line-height: inherit;
  vertical-align: baseline;
  text-decoration: none;
  color: #333;
  font-weight: bold;
  font-size: 15px;
  text-transform: uppercase;
  cursor: pointer;
  transition: opacity 0.3s;
}
@media (hover: hover) and (min-width: 768px) {
  .custom-header__nav-dropdown-toggle:hover {
  opacity: 0.5;
}
}
/* Đang xem 1 trang con của "Danh mục" — xem custom-header.js. */
.custom-header__nav-dropdown-toggle.is-active {
  color: #ac801a;
}
.custom-header__nav-dropdown-arrow {
  width: 11px;
  height: 11px;
  flex-shrink: 0;
  transition: transform 0.25s ease;
}
.custom-header__nav-dropdown.is-open .custom-header__nav-dropdown-arrow {
  transform: rotate(180deg);
}
/* Panel dạng "liquid glass" — cùng blur(12px) saturate(150%) + box-shadow
   với 2 khối kính có sẵn trên site (.vtm-textsize__panel "Aa" và
   .vtm-related__panel "gợi ý", custom-header.js), NHƯNG alpha nền nâng lên
   0.95 (không phải 0.9 như 2 khối kia): 2 khối kia là position:fixed độc
   lập gắn thẳng vào <body>, còn panel này nằm LỒNG bên trong <nav> vốn
   cũng đang position:fixed — backdrop-filter trong ngữ cảnh lồng nhau này
   không chắc mờ được hết nền phía sau dù cùng công thức, nên nhìn xuyên
   rõ hơn dù cùng 1 con số alpha. Bù lại bằng cách tăng alpha (đặc hơn) —
   0.95 là mức thanh header (.custom-header) đang dùng, đã biết chắc trông
   "đặc" trên chính site này bất kể backdrop-filter có ăn trọn hay không. */
.custom-header__nav-dropdown-panel {
  position: absolute;
  top: calc(100% + 20px);
  right: 0;
  min-width: 230px;
  background: rgba(255, 255, 255, 0.95);
  -webkit-backdrop-filter: blur(12px) saturate(150%);
  backdrop-filter: blur(12px) saturate(150%);
  border-radius: 10px;
  box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.25);
  padding: 8px 0;
  opacity: 0;
  visibility: hidden;
  transform: translateY(8px);
  transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;
}
.custom-header__nav-dropdown.is-open .custom-header__nav-dropdown-panel {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
/* Đặc tả cao hơn ".custom-header__nav a" (vốn áp uppercase/bold cho toàn bộ nav)
   để các mục trong dropdown hiển thị đúng kiểu chữ thường, không bị ép in hoa.
   text-shadow trắng nhẹ: chữ nằm trực tiếp trên nền kính (không có chip
   riêng) nên cần quầng trắng để vẫn đọc được trên nền tối phía sau kính —
   cùng kỹ thuật liquid-glass đã dùng cho .custom-header__search-panel. */
.custom-header__nav .custom-header__nav-dropdown-item {
  display: block;
  padding: 10px 22px;
  font-size: 14px;
  font-weight: 600;
  text-transform: none;
  letter-spacing: 0.02em;
  color: #333;
  text-decoration: none;
  white-space: nowrap;
  text-shadow: 0 0 4px rgba(255, 255, 255, 0.9), 0 0 8px rgba(255, 255, 255, 0.6);
  transition: background 0.2s ease, color 0.2s ease;
}
@media (hover: hover) and (min-width: 768px) {
  .custom-header__nav-dropdown-item:hover {
  background: #f7f5f0;
  color: #ac801a;
}
}
/* Trang đang xem — xem custom-header.js. */
.custom-header__nav-dropdown-item.is-active {
  color: #ac801a;
}
.custom-header__nav-dropdown-item + .custom-header__nav-dropdown-item {
  border-top: 1px solid #f0f0f0;
}

/* ===== Ô "Tìm kiếm" trong header (desktop) =====
   Nút dạng pill bo tròn hết cỡ (border-radius: 999px), có viền + icon kính
   lúp + chữ "TÌM KIẾM" bên trong — chèn bằng JS ngay sau "LIÊN HỆ", trước
   "DANH MỤC" (xem custom-header.js). Cố tình có viền + bo tròn để tách
   hẳn khỏi các mục chữ trơn còn lại trên thanh (Trang chủ/Sản phẩm/Cam
   kết/Liên hệ) — đọc ngay là 1 "ô tìm kiếm" chứ không phải 1 link điều
   hướng thường. Ẩn trên mobile mà không cần rule riêng vì cả <li> này nằm
   trong .custom-header__nav — đã bị ẩn hẳn ở mobile (mobile-bottom-nav.css). */
.custom-header__nav-search {
  position: relative;
}
.custom-header__search-toggle {
  appearance: none;
  -webkit-appearance: none;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin: 0;
  padding: 7px 16px;
  border: 1px solid #ddd;
  border-radius: 999px;
  background: #fff;
  font-family: inherit;
  color: #333;
  font-weight: bold;
  font-size: 13px;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  cursor: pointer;
  transition: background 0.2s ease, border-color 0.2s ease;
}
.custom-header__search-toggle svg {
  width: 15px;
  height: 15px;
  flex-shrink: 0;
}
@media (hover: hover) and (min-width: 768px) {
  .custom-header__search-toggle:hover {
    background: #f7f5f0;
    border-color: #c9a227;
  }
}
.custom-header__nav-search.is-open .custom-header__search-toggle {
  border-color: #c9a227;
  color: #ac801a;
}

/* Dropdown kết quả — cùng "chất liệu" bo góc/đổ bóng với
   .custom-header__nav-dropdown-panel ("DANH MỤC") cạnh bên, chỉ khác nội
   dung (ô nhập + kết quả thay vì danh sách link tĩnh). Alpha nền 0.95
   (không phải 0.9 như .vtm-textsize__panel/.vtm-related__panel) — xem lý
   do đầy đủ tại rule .custom-header__nav-dropdown-panel. */
.custom-header__search-panel {
  position: absolute;
  top: calc(100% + 20px);
  right: 0;
  width: 360px;
  max-width: calc(100vw - 4rem);
  background: rgba(255, 255, 255, 0.95);
  -webkit-backdrop-filter: blur(12px) saturate(150%);
  backdrop-filter: blur(12px) saturate(150%);
  border-radius: 12px;
  box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.25);
  padding: 14px;
  opacity: 0;
  visibility: hidden;
  transform: translateY(8px);
  transition: opacity 0.2s ease, visibility 0.2s ease, transform 0.2s ease;
  z-index: 10000;
}
.custom-header__nav-search.is-open .custom-header__search-panel {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
}
.custom-header__search-panel-inputwrap {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 9px 12px;
  border: 1px solid #eee;
  border-radius: 8px;
  background: #f9f8f5;
}
.custom-header__search-panel-icon {
  width: 16px;
  height: 16px;
  flex-shrink: 0;
  color: #999;
  display: flex;
}
.custom-header__search-panel-icon svg {
  width: 100%;
  height: 100%;
}
.custom-header__search-panel-input {
  flex: 1;
  min-width: 0;
  border: none;
  outline: none;
  background: transparent;
  font-family: inherit;
  font-size: 14px;
  font-weight: normal;
  text-transform: none;
  color: #1a1a1a;
}
.custom-header__search-panel-body {
  max-height: 360px;
  overflow-y: auto;
  margin-top: 10px;
  /* Không có dòng này, cuộn chuột trong danh sách vẫn hoạt động bình
     thường CHO ĐẾN KHI chạm đáy/đỉnh danh sách — lúc đó trình duyệt tự
     "tràn" phần cuộn dư ra ngoài sang cuộn cả trang phía sau (hành vi
     mặc định gọi là "scroll chaining"), đúng lỗi chủ site báo "cuộn hết
     kết quả thì trang ngoài vẫn bị cuộn". overscroll-behavior: contain
     chặn đúng hành vi tràn này, không ảnh hưởng gì đến việc cuộn bên
     trong danh sách. */
  overscroll-behavior: contain;
}
.custom-header__search-hint {
  margin: 6px 4px;
  color: #888;
  font-size: 12.5px;
  font-weight: normal;
  text-transform: none;
  line-height: 1.6;
  /* Panel giờ là nền kính bán trong suốt (xem .custom-header__search-panel) —
     chữ nằm trực tiếp trên kính, không có chip nền riêng, nên cần quầng
     trắng nhẹ để vẫn đọc được khi phía sau kính là vùng ảnh/nền tối —
     đúng kỹ thuật liquid-glass đã chốt cho site (xem custom-header.js). */
  text-shadow: 0 0 4px rgba(255, 255, 255, 0.9), 0 0 8px rgba(255, 255, 255, 0.6);
}
/* !important — cùng lý do đã ghi ở .custom-header__search-chip phía trên:
   ".custom-header__nav a" đè ngược font-size/uppercase/đậm nếu không chặn. */
.custom-header__search-hint a {
  color: #c9a227;
  font-size: inherit !important;
  font-weight: inherit !important;
  text-transform: none !important;
}
.custom-header__search-suggestions {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
/* !important trên 3 thuộc tính dưới đây: ".custom-header__nav a" (rule áp
   in hoa/đậm/15px cho MỌI link trong nav, kể cả chip này vì nó nằm lồng
   bên trong .custom-header__nav) có độ đặc hiệu CAO HƠN 1 class đơn
   ".custom-header__search-chip" (class + thẻ "a" thắng chỉ 1 class) — nếu
   không có !important thì mọi lần chỉnh cỡ chữ ở đây đều bị rule đó đè
   ngược, KHÔNG có tác dụng thật (đã xảy ra vài lần trước khi phát hiện ra). */
.custom-header__search-chip {
  display: inline-block;
  padding: 4px 9px;
  border-radius: 999px;
  background: #f7f5f0;
  border: 1px solid #eee;
  color: #333;
  font-size: 13px !important;
  font-weight: 500 !important;
  text-transform: none !important;
  text-decoration: none;
  white-space: nowrap;
}
@media (hover: hover) and (min-width: 768px) {
  .custom-header__search-chip:hover {
    background: #efece4;
  }
}
.custom-header__search-result {
  display: block;
  padding: 8px 4px;
  text-decoration: none;
  border-bottom: 1px solid #f5f5f5;
}
.custom-header__search-result:last-child {
  border-bottom: none;
}
.custom-header__search-result-cat {
  display: block;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: #c9a227;
  margin-bottom: 2px;
  text-shadow: 0 0 4px rgba(255, 255, 255, 0.9), 0 0 8px rgba(255, 255, 255, 0.6);
}
.custom-header__search-result-title {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  text-transform: none;
  color: #1a1a1a;
  line-height: 1.35;
  text-shadow: 0 0 4px rgba(255, 255, 255, 0.9), 0 0 8px rgba(255, 255, 255, 0.6);
}
@media (hover: hover) and (min-width: 768px) {
  .custom-header__search-result:hover .custom-header__search-result-title {
    color: #ac801a;
  }
}

/* ===== "Liên hệ" trong header (mobile) =====
   Menu ngang chính (.custom-header__nav) bị ẩn hẳn trên mobile (dùng bottom
   nav riêng thay thế — xem mobile-bottom-nav.css), nên "LIÊN HỆ" đã chèn
   vào đó cũng bị ẩn theo. Link nhỏ này được JS chèn riêng ngay kế bên logo
   (custom-header.js) để luôn có sẵn 1 lối vào trang Liên hệ trên mobile mà
   không cần cuộn. Ẩn theo mặc định (desktop) — chỉ hiện khi header đã thu
   gọn về dạng mobile ở @media bên dưới.
   LƯU Ý: rule này PHẢI đứng TRƯỚC khối @media mobile bên dưới — cùng độ
   đặc hiệu (1 class), nên rule đứng SAU trong file luôn thắng bất kể có
   nằm trong @media hay không. Từng có bug: đặt rule này sau khối @media
   khiến nó đè luôn cả bản mobile, ẩn mất nút trên mọi kích thước màn hình. */
.custom-header__mobile-contact {
  display: none;
}

/* レスポンシブ（スマホ用）の調整 */
@media (max-width: 767px) {
  .custom-header {
    padding: 4px 15px 0 15px;
    flex-direction: column; /* スマホではロゴを上、メニューを下に並べる */
    gap: 10px;
  }
  .custom-header__logo a {
    font-size: 16px;
  }
  .custom-header__nav {
    width: 100%;
    justify-content: space-between; /* 均等割付 */
  }
  .custom-header__nav a {
    font-size: 13px;
  }

  /* Link "Liên hệ" chèn kế bên logo (xem custom-header.js) — thấy ngay,
     không cần cuộn, vì menu ngang chính đã bị ẩn hoàn toàn trên mobile.
     Cố tình KHÔNG dùng pill/nền/viền — chỉ là chữ trơn, cùng kiểu chữ với
     .custom-header__nav a (menu desktop), để đọc như 1 phần tự nhiên của
     header thay vì 1 badge/nút gắn thêm lạc tông với tổng thể. */
  .custom-header__mobile-contact {
    display: inline-flex;
    align-items: center;
    margin-left: auto; /* tự đẩy sang phải, cách logo ra — không dính liền bên cạnh nữa */
    color: #333;
    font-weight: bold;
    font-size: 13px;
    text-transform: uppercase;
    text-decoration: none;
    white-space: nowrap;
    transition: opacity 0.3s;
  }
  .custom-header__mobile-contact:active {
    opacity: 0.5;
  }
@media (hover: hover) and (min-width: 768px) {
  .custom-header__mobile-contact:hover {
    opacity: 0.5;
  }
}
  /* Trang đang xem — xem custom-header.js. */
  .custom-header__mobile-contact.is-active {
    color: #ac801a;
  }
}

.l-main {
  line-height: 1.2;
}

svg,
img {
  max-width: 100%;
}

svg {
  overflow: visible;
}

@media (max-width: 767px) {
  html,
  body {
    width: 100%;
    max-width: 100%;
    height: 100%;
    /* ===== Prevent horizontal scrolling on mobile ===== */
    overflow-x: hidden;
    overflow-x: clip;
    overscroll-behavior-x: none;
  }
  /* Keep the bottom nav dropdown wide enough to be usable */
  .mobile-bottom-nav__dropdown,
  .mobile-bottom-nav__dropdown * {
    max-width: calc(100vw - 16px);
  }
  .mobile-bottom-nav__dropdown-item {
    white-space: normal;
    word-break: break-word;
  }
  h1,
  h2,
  h3,
  h4,
  h5,
  h6,
  div,
  dl,
  dt,
  dd,
  p {
    padding: 0;
    margin: 0;
  }
  img {
    width: auto;
    max-width: 100%;
    height: auto;
    max-height: 100%;
  }
}
@media (max-width: 767px) {
  .pc {
    display: none !important;
  }
}
@media (min-width: 768px) {
  [href*="tel:"] {
    pointer-events: none;
  }
  .sp {
    display: none !important;
  }
}/*# sourceMappingURL=structure.css.map */


.ttl-font {
  font-family: "Noto Serif JP", serif !important;
}

body {
  font-family: "Noto Serif JP", serif;
  font-weight: 400;
  letter-spacing: 0.1em;
  color: #222222;
  font-size: 1.3rem;
  line-height: 2.4;
  /* Tắt auto "font boosting" của trình duyệt mobile (Chrome/Safari Android
     tự phóng to chữ trong khối văn bản để dễ đọc trên màn hình nhỏ) — vốn
     đã bật sẵn ở crystal-style.css/30th-anniversary-style.css nhưng
     style.css (dùng cho phần lớn các trang, gồm cả thanh mobile-bottom-nav)
     lại thiếu. Vì cơ chế này thường BỎ QUA các phần tử form (button, input)
     khi tự phóng to, nhãn "Tìm kiếm" (<button>, 11px) vẫn giữ đúng size
     trong khi 4 nhãn còn lại (<a>, cũng 11px) bị trình duyệt tự phóng lớn
     hơn — khiến "Tìm kiếm" nhìn nhỏ/lệch hẳn dù CSS tác giả set cùng 1 giá
     trị font-size cho cả 5. */
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
body > * {
  position: relative;
  z-index: 1;
}

@media (hover: hover) and (min-width: 768px) {
  .c-hover-opacity {
    transition: 0.5s;
    cursor: pointer;
  }
  .c-hover-opacity:hover {
    opacity: 0.7;
  }
}

.c-btn-primary {
  width: 100%;
  display: grid;
  align-items: center;
  grid-template-columns: auto 5rem;
  background: linear-gradient(88deg, #222 23.1%, #555 86.68%, #888 102.57%);
  padding-left: 2.5rem;
  font-size: 1.3rem;
  font-weight: normal;
  color: #fff;
  border-radius: 0.4rem;
  padding-block: 1rem;
}
@media screen and (max-width: 767px), print {
  .c-btn-primary {
    font-size: 1.1rem;
    padding-left: 1.5rem !important;
    grid-template-columns: auto 4rem !important;
    letter-spacing: 0.03em;
    min-height: 5rem;
    padding-block: 0;
  }
}
.c-btn-primary__arrow {
  width: 5rem;
  height: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  border-left: 1px solid white;
}
@media screen and (max-width: 767px), print {
  .c-btn-primary__arrow {
    width: 4rem;
    height: calc(100% - 1.2rem);
  }
}
.c-btn-primary__arrow img,
.c-btn-primary__arrow svg {
  width: 1.2rem;
}
@media screen and (max-width: 767px), print {
  .c-btn-primary__arrow img,
  .c-btn-primary__arrow svg {
    width: 0.9rem;
  }
}
.c-btn-primary__arrow img path,
.c-btn-primary__arrow img line,
.c-btn-primary__arrow svg path,
.c-btn-primary__arrow svg line {
  stroke: #fff;
}

.c-modal {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 9999;
  opacity: 0;
  pointer-events: none;
  transition: 0.3s;
}
.c-modal * {
  color: #fff;
}
.c-modal.is-active {
  opacity: 1;
  pointer-events: auto;
}
.c-modal__overlay {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #222222;
}
.c-modal__content {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: calc(100% - 4rem);
  height: calc(100% - 6rem);
  background: #111111;
  border-radius: 0.4rem;
  padding: 2rem;
  border: 1px solid #fff;
}
.c-modal__close {
  position: absolute;
  top: 2rem;
  right: 3rem;
  display: flex;
  align-items: center;
  width: -moz-max-content;
  width: max-content;
  margin-left: auto;
  color: #fff;
  gap: 2rem;
  font-weight: 400;
  cursor: pointer;
  z-index: 1;
}
@media screen and (max-width: 767px), print {
  .c-modal__close {
    right: 2rem;
  }
  .c-modal__close--scroll {
    position: static;
    padding-bottom: 5rem;
  }
  .c-modal__close--bottom {
    margin-inline: auto;
    padding-bottom: 0;
    margin-top: 2.4rem;
  }
}
@media (hover: hover) and (min-width: 768px) {
  .c-modal__close {
    transition: 0.3s;
  }
  .c-modal__close:hover {
    opacity: 0.8;
  }
}
.c-modal__close span {
  position: relative;
  width: 2.6rem;
  height: 2.6rem;
}
.c-modal__close span::before,
.c-modal__close span::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
  height: 1px;
  background: #fff;
}
.c-modal__close span::before {
  transform: translate(-50%, -50%) rotate(45deg);
}
.c-modal__close span::after {
  transform: translate(-50%, -50%) rotate(-45deg);
}
.c-modal__body {
  padding-inline: 11rem;
  padding-block: 5rem;
  height: 100%;
}
@media screen and (max-width: 767px), print {
  .c-modal__body {
    padding-inline: 0;
    padding-block: 5rem;
  }
}
.c-modal__body--scroll {
  display: grid;
  align-items: center;
  justify-content: center;
  overflow: auto;
  padding-block: 14rem;
}
@media screen and (max-width: 767px), print {
  .c-modal__body--scroll {
    padding-top: 0;
    padding-bottom: 6rem;
  }
}
.c-modal__body--scroll::-webkit-scrollbar {
  width: 0.1rem;
}
.c-modal__body--scroll::-webkit-scrollbar-thumb {
  background-color: #fff;
  border-radius: 9999px;
}
.c-modal__body--youtube {
  display: grid;
  align-items: center;
}
.c-modal__body iframe {
  height: 100%;
  width: 100%;
}
@media screen and (max-width: 767px), print {
  .c-modal__body iframe {
    aspect-ratio: 16/9;
    height: auto;
  }
}

@media screen and (min-width: 768px), print {
  }
@media screen and (max-width: 767px), print {
  }

.cvArea {
  height: 100%;
  width: 100%;
  position: fixed;
  top: 0;
  left: 0;
  pointer-events: none;
  z-index: 99;
}
.cvArea__link {
  position: absolute;
  bottom: 2rem;
  width: 46rem;
  left: 50%;
  transform: translateX(-50%);
  margin-inline: auto;
  height: 4.6rem;
  padding-left: 2.4rem;
  padding-right: 1rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  z-index: 9;
  background: white;
  border-radius: 0.4rem;
  box-shadow: 0 4px 24px 0 rgba(0, 0, 0, 0.14);
  -webkit-backdrop-filter: blur(5px);
  backdrop-filter: blur(5px);
  opacity: 0;
  transition: 0.3s;
  pointer-events: none;
}
.is-cvDisp .cvArea__link--bottom {
  opacity: 1;
  pointer-events: auto;
}

.is-cvDispTop .cvArea__link--bottom {
  opacity: 0;
  pointer-events: none;
}

.cvArea__link--top {
  top: 2rem;
}
.is-cvDispTop .cvArea__link--top {
  opacity: 1;
  pointer-events: auto;
}

@media screen and (max-width: 767px), print {
  .cvArea__link {
    max-width: calc(100% - 3rem);
    bottom: 2rem;
  }
}
.cvArea__link p {
  display: flex;
  align-items: center;
  gap: 1.8rem;
  font-size: 1.3rem;
}
@media screen and (max-width: 767px), print {
  .cvArea__link p {
    font-size: 1.1rem;
    gap: 1.8rem;
  }
  .cvArea__link p a {
    letter-spacing: normal;
  }
}
@media (hover: hover) and (min-width: 768px) {
  .cvArea__link p a {
    transition: 0.3s;
  }
  .cvArea__link p a:hover {
    color: #ac801a;
  }
}
.cvArea__link .btn {
  width: 10.6rem;
  height: 3.2rem;
  background: #222;
  color: #fff;
  border-radius: 0.4rem;
  border: 1px solid #dcdcdc;
  text-align: center;
}
@media screen and (max-width: 767px), print {
  .cvArea__link .btn {
    width: 7.8rem;
    font-size: 1.3rem;
  }
}

.font-en-light {
  font-family: "Noto Serif JP", serif;
  font-weight: 300;
}
.font-en-semibold {
  font-family: "Noto Serif JP", serif;
  font-weight: 600;
}

.fixed-noise01 {
  position: fixed;
  top: 0;
  right: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  pointer-events: none;
}
.fixed-noise01-el {
  position: fixed;
  top: 0;
  right: 0;
  width: 40rem;
}
/* Ảnh nền trang trí, không phải chữ — không nên to ra khi khách bấm "Aa"
   phóng chữ (cùng lỗi & cùng cách sửa như .s-mv__logo, .s-collection-summary__figure...
   xem giải thích đầy đủ ở đó). Chia ngược lại cho --text-scale để huỷ phần
   phóng to ngoài ý muốn. */
html[data-text-scale-active] .fixed-noise01-el {
  width: calc(40rem / var(--text-scale, 1));
}
@media screen and (max-width: 767px), print {
  .fixed-noise01-el {
    width: 35rem;
  }
  html[data-text-scale-active] .fixed-noise01-el {
    width: calc(35rem / var(--text-scale, 1));
  }
}

.fixed-noise02 {
  position: fixed;
  top: 0;
  right: 0;
  width: 100%;
  height: 100%;
  z-index: 1;
  pointer-events: none;
}
.fixed-noise02-el {
  position: fixed;
  top: 0;
  left: 0;
  width: 65rem;
}
html[data-text-scale-active] .fixed-noise02-el {
  width: calc(65rem / var(--text-scale, 1));
}
@media screen and (max-width: 767px), print {
  .fixed-noise02-el {
    top: auto;
    bottom: 0;
    width: 30rem;
  }
  html[data-text-scale-active] .fixed-noise02-el {
    width: calc(30rem / var(--text-scale, 1));
  }
}

/* On mobile, .s-about is forced to a low z-index by mobile-bottom-nav.css
   so it stays below the fixed bottom nav. Lower the noise to z-index:0 too,
   otherwise the noise (z-index:1) paints on top of .s-about content.
   The noise comes before .s-about in the DOM, so at equal z-index the
   content stays above the noise. */
@media screen and (max-width: 767px), print {
  .fixed-noise01,
  .fixed-noise02 {
    z-index: 0;
  }
}

.s-mv {
  position: relative;
  z-index: 1;
  /* Trước đây height:100vh + margin-top:2rem cố định — 2rem không đủ để
     chừa chỗ cho .custom-header (position:fixed, cao hơn 2rem khá nhiều),
     nên phần trên của logo .s-mv__logo (canh giữa theo top:50% trong
     đúng khối 100vh này) có thể bị header đè lên. Dùng biến --header-h
     (đo thật bằng JS trong custom-header.js, luôn đúng dù header đổi cao
     thấp — kể cả khi đổi cỡ chữ qua nút "Aa") thay cho số đoán tay: lùi
     xuống đúng bằng chiều cao header thật, và trừ luôn phần đó khỏi chiều
     cao để logo canh giữa trong đúng khoảng trống còn lại bên dưới header,
     không tính lấn vào phần bị header che. */
  height: calc(100vh - var(--header-h, 8rem));
  min-height: 40vw;
  margin-top: var(--header-h, 8rem);
}
@media screen and (max-width: 767px), print {
  .s-mv {
    height: auto;
    display: grid;
    gap: 3.5rem;
  }
}
.s-mv__img {
  position: absolute;
}
@media screen and (min-width: 768px), print {
  .s-mv__img {
    left: 50%;
    top: 50%;
    transform: translateX(-50%) translateX(-46rem) translateY(-50%);
    width: 33.6rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-mv__img {
    width: 10.2rem;
    left: 0;
    top: 83rem;
  }
}
.s-mv__logo {
  display: block;
}
@media screen and (min-width: 768px), print {
  .s-mv__logo {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%) translateX(3rem);
    /* 54rem cố định làm logo cao ~69.1rem (tỉ lệ ảnh gốc ~5:4) — trên màn
       hình rộng nhưng THẤP (vd laptop 1366×768, rất phổ biến), khoảng
       trống thật dưới header (100vh - header-h) có thể thấp hơn 69.1rem,
       khiến logo (canh giữa theo top:50%) tràn lên trên, bị header đè
       mất 1 phần. min() ép logo co lại theo chiều rộng tỉ lệ với khoảng
       trống dọc còn lại (hệ số 1 vì mục tiêu chiều cao logo ≤ 80% khoảng
       trống, nhân với tỉ lệ khung ảnh ~1.25 vừa đúng ra 1) — màn hình đủ
       cao thì vẫn giữ nguyên 54rem như trước. */
    width: min(54rem, calc(100vh - var(--header-h, 8rem)));
  }
  /* Logo trang chủ (mv-logo.png, có chữ "30 Anniversary" lồng sẵn trong
     ảnh) không nên đổi kích thước theo nút "Aa" phóng chữ — đó là hình
     ảnh, không phải văn bản. 54rem cũng bị --text-scale nhân vào như mọi
     rem khác, khiến logo cứ to dần ra khi khách kéo thanh phóng chữ dù
     chữ trong ảnh không hề dễ đọc hơn. Chia ngược lại cho --text-scale
     ở đúng số hạng 54rem (không đụng calc(100vh - header-h), phần đó vốn
     đã tính bằng vh/px thật, không ăn theo rem). */
  html[data-text-scale-active] .s-mv__logo {
    width: min(calc(54rem / var(--text-scale, 1)), calc(100vh - var(--header-h, 8rem)));
    /* transform gốc có translateX(3rem) để dịch logo sang phải 1 chút cho
       cân bố cục — 3rem này cũng bị --text-scale nhân vào như mọi rem
       khác, nên phóng chữ càng nhiều thì logo càng bị đẩy sang phải càng
       xa. Chia ngược lại đúng số hạng đó, giữ nguyên -50%/-50% (canh giữa
       theo % kích thước box, không phải rem nên không bị ảnh hưởng). */
    transform: translate(-50%, -50%) translateX(calc(3rem / var(--text-scale, 1)));
  }
}
@media screen and (max-width: 767px), print {
  .s-mv__logo {
    margin-inline: auto;
    width: 32rem;
    /* An toàn khi cỡ chữ toàn site bị phóng to qua nút "Aa" (custom-header.js)
       — 1rem lúc đó lớn hẳn ra (font-size gốc mobile tính theo 2.5vw, nhân
       thêm với --text-scale), khiến 32rem có thể vượt quá bề ngang màn
       hình thật. margin-inline: auto không tự co khi nội dung rộng hơn
       khung chứa (auto margin không âm được) — logo bung ra khỏi vị trí
       canh giữa, lệch hẳn sang phải. Chặn bằng max-width: 100% để logo chỉ
       co nhỏ lại theo khung chứa thay vì tràn ra ngoài. */
    max-width: 100%;
  }
  /* Vẫn chưa đủ — max-width chỉ chặn KHÔNG cho tràn ra ngoài, nhưng logo
     vẫn to dần lên trong giới hạn đó khi phóng chữ (đúng như khách phản
     hồi: "phóng chữ mà hình vẫn to ra"). Đây là ẢNH có chữ lồng sẵn bên
     trong, không phải chữ HTML thật — phóng chữ không giúp đọc rõ hơn,
     chỉ nên giữ nguyên kích thước hiển thị gốc. Chia ngược lại cho
     --text-scale để huỷ hẳn phần phóng to này. */
  html[data-text-scale-active] .s-mv__logo {
    width: calc(32rem / var(--text-scale, 1));
  }
}
.s-mv__txt {
  width: 13rem;
}
.s-mv__txt img,
.s-mv__txt svg {
  opacity: 0;
}
@media screen and (min-width: 768px), print {
  .s-mv__txt {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%) translateX(47rem) translateY(-5rem);
  }
}
@media screen and (max-width: 767px), print {
  .s-mv__txt {
    width: 4.6rem;
    display: block;
    margin-inline: auto;
    order: -1;
    padding-top: 9.4rem;
  }
}
.s-mv__try {
  position: absolute;
  text-align: center;
  color: #fff;
  background: url(../images/cv-bg.png) no-repeat center center/contain;
  line-height: 1.5;
}
.s-mv__try-inner {
  width: 27rem;
  height: 27rem;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-top: 3rem;
}
@media screen and (max-width: 767px), print {
  .s-mv__try-inner {
    width: 13.8rem;
    height: 13.8rem;
    padding-top: 1rem;
  }
}
@media screen and (min-width: 768px), print {
  .s-mv__try {
    bottom: 0;
    right: 0;
  }
}
@media screen and (max-width: 767px), print {
  .s-mv__try {
    top: 0;
    left: 0;
  }
}
.s-mv__try img,
.s-mv__try svg {
  width: 16rem;
}
@media screen and (max-width: 767px), print {
  .s-mv__try img,
  .s-mv__try svg {
    width: 6.9rem;
  }
}
.s-mv .js-mv-other {
  opacity: 0;
}

/* ===== start-nudge ("Bạn muốn xem gì trước tiên?", assets/js/start-nudge.js)
   Thẻ nhỏ trượt lên góc màn hình trên trang chủ — điểm bắt đầu rõ ràng
   cho khách mới vào site, thay vì 1 khối lớn chen giữa hero và nội dung.
   Cùng ngôn ngữ hình ảnh với .related-nudge (trang PDP): tĩnh, không
   nhấp nháy, không chặn tương tác, tự ẩn nếu không dùng tới. ===== */
.start-nudge {
  position: fixed;
  right: 2rem;
  bottom: 2rem;
  z-index: 900;
  /* Đồng bộ font với nút "Aa"/gợi ý (custom-header.js) — dùng font hệ
     thống của Apple (San Francisco) trên máy Apple, tự rơi về font hệ
     thống tương ứng của từng nền tảng khác (Segoe UI/Roboto) chứ không
     tự host được San Francisco (Apple không cho phép nhúng font này ra
     ngoài app/web của chính Apple). */
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  width: 27rem;
  max-width: calc(100vw - 2.4rem);
  /* LỊCH SỬ: card này từng là kính xám khói tối (rgba(20,20,24,0.22)) +
     chữ trắng, đồng bộ với nút "Aa"/"gợi ý" hồi các nút đó còn tối — xem
     lịch sử đầy đủ (nhiều vòng thử gradient/viền/glow rồi bỏ hết) ở
     custom-header.js. Chủ site sau đó đổi HẲN 2 nút đó (và panel của
     chúng) sang nền TRẮNG + chữ ĐEN, không còn "liquid glass" (bỏ
     backdrop-filter, bỏ box-shadow nhiều lớp) — card này đổi theo cho
     đồng bộ: nền trắng hơi mờ (còn giữ 1 chút backdrop-filter cho đúng
     tinh thần "vẫn là kính" chủ site muốn giữ ở card/panel, khác hẳn 2
     nút đã bỏ hẳn kính), chữ đen, chỉ còn 1 lớp box-shadow đơn giản. */
  background: rgba(255, 255, 255, 0.9);
  -webkit-backdrop-filter: blur(12px) saturate(150%);
  backdrop-filter: blur(12px) saturate(150%);
  border-radius: 1.2rem;
  /* overflow:hidden để mọi thứ bên trong (nhất là thanh tiến trình sát mép
     trên) tự động bị cắt vừa khít theo đúng đường cong bo góc của thẻ,
     không bị vuông góc ở 2 đầu. Không ảnh hưởng box-shadow bên dưới —
     shadow là hiệu ứng của chính khung này, không bị chính overflow của
     nó cắt mất (chỉ cắt nội dung/con bên trong tràn ra ngoài). */
  overflow: hidden;
  box-shadow: 0 1.5rem 4rem rgba(0, 0, 0, 0.25);
  padding: 1.6rem 1.8rem 1.8rem;
  opacity: 0;
  transform: translateY(1.6rem);
  transition: opacity 0.4s ease, transform 0.4s ease;
  pointer-events: none;
}
.start-nudge.is-visible {
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}
/* Chuyển bước (bấm "Sản phẩm" → "Bạn quan tâm dòng nào?", hoặc bấm "Quay
   lại") trước đây thay nội dung NGAY LẬP TỨC (body.innerHTML = ...) —
   không có gì chuyển tiếp nên cảm giác "cục", đứt đoạn. Thêm hiệu ứng tan
   biến/hiện ra kiểu liquid glass CÓ HƯỚNG — cùng công thức với
   .vtm-related__body (custom-header.js, xem comment chi tiết ở đó): đi
   TỚI (bấm vào 1 mục) thì nội dung mới "phóng to ra" (bắt đầu nhỏ, nảy
   lên 1); đi LÙI (bấm "Quay lại") thì nội dung cũ "thu nhỏ lại" (bắt đầu
   to, thu về 1). 0.12s trước đây quá nhanh, chậm lại còn 0.42s (transform)
   / 0.3s (opacity/blur). Xem changeStep(body, step, direction) trong
   start-nudge.js. */
.start-nudge__body {
  transition: opacity 0.3s ease, transform 0.42s cubic-bezier(0.34, 1.56, 0.64, 1), filter 0.3s ease;
}
.start-nudge__body.is-leaving-forward {
  opacity: 0;
  transform: scale(0.9);
  filter: blur(6px);
  transition-duration: 0.22s;
  transition-timing-function: ease;
}
.start-nudge__body.is-leaving-back {
  opacity: 0;
  transform: scale(1.1);
  filter: blur(6px);
  transition-duration: 0.22s;
  transition-timing-function: ease;
}
.start-nudge__body.is-entering-forward {
  opacity: 0;
  transform: scale(0.78);
  filter: blur(6px);
  transition: none;
}
.start-nudge__body.is-entering-back {
  opacity: 0;
  transform: scale(1.22);
  filter: blur(6px);
  transition: none;
}
.start-nudge__close {
  position: absolute;
  top: 1rem;
  right: 1rem;
  width: 2rem;
  height: 2rem;
  border: none;
  background: none;
  color: #1a1a1a;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
}
.start-nudge__close svg { width: 1.4rem; height: 1.4rem; }
@media (hover: hover) and (min-width: 768px) {
  .start-nudge__close:hover { opacity: 0.7; }
}
/* Thanh tiến trình mảnh chạy dọc mép trên thẻ, báo hiệu thời gian còn lại
   trước khi tự ẩn — thay cho số đếm ngược trước đây (tĩnh, tinh tế hơn,
   hợp phong cách kính mờ). Chạy bằng CSS @keyframes (không phải JS tick
   từng giây) để mượt tuyệt đối; JS chỉ bật/tắt/khởi động lại animation
   qua class, xem start-nudge.js. */
.start-nudge__progress {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  border-radius: 1rem 1rem 0 0;
  overflow: hidden;
  background: rgba(0, 0, 0, 0.08);
  pointer-events: none;
}
.start-nudge__progress-bar {
  height: 100%;
  width: 100%;
  background: #ac801a;
  transform-origin: left center;
  transform: scaleX(1);
}
.start-nudge__progress-bar.is-running {
  animation-name: start-nudge-progress;
  animation-timing-function: linear;
  animation-fill-mode: forwards;
}
@keyframes start-nudge-progress {
  from { transform: scaleX(1); }
  to { transform: scaleX(0); }
}
.start-nudge__label {
  font-family: inherit;
  font-size: 1.55rem;
  font-weight: 700;
  color: #1a1a1a;
  margin: 0 2rem 1.2rem 0;
  /* Nền giờ trắng nên chữ đen luôn đủ tương phản, không cần text-shadow
     glow nữa. Tiêu đề to + đậm hẳn để nổi bật rõ là đầu mục, tách biệt với
     nội dung chữ thường bên dưới (bỏ khung từng dòng — xem
     .start-nudge__option). */
}
.start-nudge__options { display: flex; flex-direction: column; gap: 0.3rem; }
/* KHÔNG đóng khung từng dòng nữa (bỏ hẳn border + nền + backdrop-filter
   riêng từng ô — chủ site chê nhìn rối mắt) — chỉ còn icon + chữ trần trên
   nền kính chung của cả thẻ, phân cách bằng khoảng cách dòng. padding giữ
   nguyên để vùng bấm vẫn đủ to, chỉ bỏ phần trang trí.
   LƯU Ý: "Sản phẩm" (stepButtonHtml) và "Khác" (.start-nudge__more-toggle)
   là thẻ <button> thật, không phải <a> — chỉ xoá bớt border/background mà
   không đặt rõ về none/transparent thì khung xám mặc định của trình duyệt
   lại lộ ra (chỉ <button> mới bị, <a> không có khung mặc định nên không
   sao) — phải reset appearance/border/background rõ ràng. */
.start-nudge__option,
.start-nudge__more-toggle {
  appearance: none;
  -webkit-appearance: none;
  border: none;
  background: none;
  margin: 0;
  display: flex;
  align-items: center;
  gap: 0.9rem;
  width: 100%;
  padding: 0.7rem 0.4rem;
  border-radius: 0.6rem;
  text-decoration: none;
  color: inherit;
  font-family: inherit;
  cursor: pointer;
  transition: background 0.2s ease;
}
/* Hover chỉ là 1 lớp sáng mờ thoáng qua để báo đang trỏ tới, không phải
   khung cố định — nền kính đã tối sẵn nên không cần đổi màu chữ lúc hover
   như bản có khung trước đây. */
@media (hover: hover) and (min-width: 768px) {
  .start-nudge__option:hover,
  .start-nudge__more-toggle:hover {
  background: rgba(0, 0, 0, 0.06);
}
}
/* Icon đen luôn, không còn khoanh tròn nền màu vàng kem — đồng bộ với
   chữ đen, đỡ rối mắt hơn 1 huy hiệu màu riêng cho từng icon. */
.start-nudge__option-icon {
  flex-shrink: 0;
  width: 2rem;
  height: 2rem;
  color: #1a1a1a;
  display: flex;
  align-items: center;
  justify-content: center;
}
.start-nudge__option-icon svg { width: 1.3rem; height: 1.3rem; }
.start-nudge__option-label {
  flex: 1;
  text-align: left;
  font-size: 1.1rem;
  color: #1a1a1a;
  font-weight: 400;
}
.start-nudge__chevron {
  width: 1.3rem;
  height: 1.3rem;
  color: #1a1a1a;
  transition: transform 0.2s ease, color 0.2s ease;
}
.start-nudge__more-toggle[aria-expanded="true"] .start-nudge__chevron { transform: rotate(180deg); }
.start-nudge__more {
  max-height: 0;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  transition: max-height 0.3s ease;
}
.start-nudge__more.is-open { max-height: 30rem; margin-top: 0.6rem; }
/* Nút quay lại bước 1 — đồng bộ đúng màu đen như .vtm-related__back bên
   custom-header.js (đổi 1 bên thì phải đổi theo bên kia cho khớp). */
.start-nudge__back {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  border: none;
  background: none;
  padding: 0;
  margin-bottom: 1rem;
  font-family: inherit;
  font-size: 1.05rem;
  color: #1a1a1a;
  cursor: pointer;
}
@media (hover: hover) and (min-width: 768px) {
  .start-nudge__back:hover { color: #ac801a; }
}
.start-nudge__back svg { width: 1.3rem; height: 1.3rem; }
@media screen and (max-width: 600px) {
  .start-nudge {
    left: 1.2rem;
    right: 1.2rem;
    width: auto;
    padding: 1.4rem 1.6rem 1.6rem;
    /* TỪNG dời lên đầu màn hình để né đè lên nút "Aa"/gợi ý (cũng neo dưới
       cùng, bottom:78px) — nhưng chủ site báo neo trên che mất ảnh đàn
       piano ngay dưới header. Quay lại neo DƯỚI như bản gốc, chỉ nâng cao
       hơn khỏi bottom:2rem mặc định — đủ cao để nằm HẲN TRÊN nút "Aa"/gợi
       ý (44px, đỉnh nút ở bottom:78px+44px=122px) thay vì đè lên chúng.
       transform giữ nguyên translateY(1.6rem) của rule gốc phía trên (neo
       dưới thì trượt LÊN khi hiện ra) — không cần override lại ở đây. */
    bottom: 132px;
  }
  .start-nudge.is-visible {
    transform: translateY(0);
  }
}

/* ===== s-about (Concept) — redesigned clean layout ===== */
.s-about {
  z-index: 2;
  overflow-x: clip;
  padding-block: 8rem 6rem;
}
@media screen and (max-width: 767px), print {
  .s-about {
    /* Keep below fixed mobile bottom nav. */
    z-index: 1;
    /* Giảm từ 7rem — cộng thêm padding-top 3rem (rule .s-about phía dưới,
       trong khối "Mobile compact optimizations", thắng vì đứng sau) là
       10rem tổng cộng phía trên chữ "Việt Thương Music..." — quá xa so
       với logo .s-mv__logo ngay phía trên. */
    margin-top: 4rem;
    isolation: isolate;
    overflow-x: hidden;
    padding-block: 4rem 3rem;
  }
}
.s-about__inner {
  max-width: 112rem;
  margin-inline: auto;
  /* clamp() đảm bảo lề tối thiểu ~24-64px trên dải desktop hẹp hơn
     (laptop 14-16"), cùng lý do/công thức như .s-lineup-link__inner —
     xem giải thích đầy đủ ở đó. */
  padding-inline: var(--vtm-gutter);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4rem;
}
@media screen and (max-width: 767px), print {
  .s-about__inner {
    padding-inline: 1.5rem;
    gap: 2.5rem;
  }
}
.s-about__header {
  text-align: center;
  max-width: 80rem;
}
.s-about__title {
  font-size: 3.2rem;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: 0.1em;
  color: #222;
}
@media screen and (max-width: 767px), print {
  .s-about__title {
    font-size: 2rem;
    line-height: 1.5;
  }
}
.s-about__lead {
  margin-top: 2rem;
  font-size: 1.5rem;
  line-height: 2;
  color: #555;
}
@media screen and (max-width: 767px), print {
  .s-about__lead {
    font-size: 1.3rem;
    line-height: 1.8;
    margin-top: 1.5rem;
  }
}
.s-about__gallery {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2rem;
  width: 100%;
}
@media screen and (max-width: 767px), print {
  .s-about__gallery {
    grid-template-columns: repeat(3, 1fr);
    gap: 0.8rem;
  }
}
.s-about__gallery-item {
  overflow: hidden;
  border-radius: 0.4rem;
  margin: 0;
}
.s-about__gallery-item img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
@media screen and (min-width: 768px) {
  .s-about__gallery-item {
    height: 30rem;
  }
  html[data-text-scale-active] .s-about__gallery-item {
    height: calc(30rem / var(--text-scale, 1));
  }
}
@media screen and (max-width: 767px), print {
  .s-about__gallery-item {
    height: 11rem;
  }
  html[data-text-scale-active] .s-about__gallery-item {
    height: calc(11rem / var(--text-scale, 1));
  }
}
.s-about__stats {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 2rem;
  width: 100%;
  max-width: 100rem;
}
@media screen and (max-width: 767px), print {
  .s-about__stats {
    grid-template-columns: repeat(2, 1fr);
    gap: 1.2rem;
    max-width: 42rem;
  }
}
.s-about__stat {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.8rem;
  padding: 3rem 1.5rem;
  text-align: center;
  background: linear-gradient(160deg, #faf7f2 0%, #f2ecdf 100%);
  border: 1px solid #e4dcc9;
  border-radius: 0.8rem;
  overflow: hidden;
}
.s-about__stat::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 4.5rem;
  height: 2px;
  background: #ac801a;
}
.s-about__stat-num {
  display: flex;
  align-items: baseline;
  justify-content: center;
  font-size: 4.8rem;
  font-weight: 700;
  line-height: 1;
  letter-spacing: 0.02em;
  color: #ac801a;
  font-family: "Noto Serif JP", serif;
}
.s-about__stat-suffix {
  margin-left: 0.2rem;
  font-size: 2.4rem;
  font-weight: 600;
  color: #ac801a;
}
.s-about__stat-label {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 3.2rem;
  font-size: 1.3rem;
  font-weight: 500;
  line-height: 1.5;
  letter-spacing: 0.05em;
  color: #444;
}
@media screen and (max-width: 767px), print {
  .s-about__stat {
    padding: 2.2rem 1rem;
    gap: 0.6rem;
  }
  .s-about__stat-num {
    font-size: 3.4rem;
  }
  .s-about__stat-suffix {
    font-size: 1.8rem;
  }
  .s-about__stat-label {
    font-size: 1.2rem;
    min-height: 3.6rem;
  }
}
.s-about__footer {
  text-align: center;
  max-width: 80rem;
}
.s-about__brands {
  font-size: 1.3rem;
  line-height: 1.8;
  color: #666;
}
@media screen and (max-width: 767px), print {
  .s-about__brands {
    font-size: 1.2rem;
    line-height: 1.7;
  }
}
.s-about__cta {
  display: inline-block;
  margin-top: 2.5rem;
  padding: 1.2rem 3rem;
  font-size: 1.3rem;
  letter-spacing: 0.1em;
  color: #fff;
  background: #222;
  border-radius: 0.4rem;
  text-decoration: none;
  transition: opacity 0.3s;
}
@media (hover: hover) and (min-width: 768px) {
  .s-about__cta:hover {
    opacity: 0.8;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__cta {
    margin-top: 2rem;
    padding: 1rem 2.5rem;
    font-size: 1.2rem;
  }
}

.s-about__firstSec {
  position: relative;
  z-index: 1;
  height: 79rem;
}
@media screen and (max-width: 767px), print {
  .s-about__firstSec {
    height: 93rem;
  }
}
.s-about__secondSec {
  position: relative;
  height: 134rem;
}
@media screen and (max-width: 767px), print {
  .s-about__secondSec {
    height: 134rem;
  }
}
.s-about__thirdSec {
  position: relative;
  height: 94.5rem;
}
.s-about__imgArea-el {
  position: absolute;
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el {
    top: 0;
    left: calc(50% + 30rem);
    width: 24rem;
  }
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el01 {
    width: 24rem;
    left: calc(50% + 29rem);
    top: 3rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el01 {
    top: 0rem;
    left: auto;
    right: 0;
    width: 14.8rem;
  }
}
.s-about__imgArea-el02 {
  width: 35.8rem;
  top: 13rem;
  left: calc(50% - 17rem);
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el02 {
    width: 20.7rem;
    top: 31rem;
    left: 50%;
    transform: translateX(-50%) translateX(7rem);
  }
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el03 {
    width: 33rem;
    top: 57rem;
    left: calc(50% - 46rem);
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el03 {
    top: 56.7rem;
    left: 2rem;
    width: 16.5rem;
  }
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el04 {
    top: 12.6rem;
    left: calc(50% + 12.4rem);
    width: 50rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el04 {
    top: 3rem;
    width: 32.5rem;
    left: 0;
  }
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el05 {
    top: 53.6rem;
    left: calc(50% - 54.6rem);
    width: 50rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el05 {
    width: 29rem;
    right: 1rem;
    top: 54.7rem;
  }
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el06 {
    top: 71rem;
    left: calc(50% + 10rem);
    width: 21rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el06 {
    top: 95rem;
    left: 4rem;
    width: 11.8rem;
  }
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el07 {
    top: 71rem;
    left: calc(50% + 35rem);
    width: 21rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el07 {
    top: 95rem;
    left: 18rem;
    width: 11.8rem;
  }
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el08 {
    top: 7.3rem;
    left: calc(50% + 16rem);
    width: 41rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el08 {
    top: 5rem;
    width: 24.6rem;
    right: 0;
  }
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el09 {
    top: 22.2rem;
    left: calc(50% - 63rem);
    width: 20rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el09 {
    top: 10.9rem;
    width: 10.6rem;
    left: 0;
  }
}
.s-about__imgArea-el10 {
  text-align: right;
}
.s-about__imgArea-el10 figcaption {
  margin-top: 0.2rem;
  text-align: right;
  font-size: 1rem;
}
@media screen and (min-width: 768px), print {
  .s-about__imgArea-el10 {
    top: 53.5rem;
    left: calc(50% - 31rem);
    width: 42rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__imgArea-el10 {
    top: 53.2rem;
    left: 7.4rem;
    width: 28rem;
  }
}
.s-about__txt {
  display: grid;
  gap: 2rem;
  letter-spacing: 0.15em;
}
@media screen and (max-width: 767px), print {
  .s-about__txt {
    font-size: 1.4rem;
  }
}
.s-about__txt01 {
  display: flex;
  justify-content: center;
}
.s-about__txt01 p {
  width: -moz-fit-content;
  width: fit-content;
  color: #222222;
  /*writing-mode: tb-rl;*/
  letter-spacing: 0.2em;
  line-height: 2.5;
  text-align: center;
}
@media screen and (max-width: 767px), print {
  .s-about__txt01 p {
    font-size: 1.5rem;
    line-height: 2;
  }
}
.s-about__txt02 {
  position: absolute;
}
@media screen and (min-width: 768px), print {
  .s-about__txt02 {
    left: calc(50% - 45rem);
    top: 15rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__txt02 {
    left: 3rem;
    top: 22.3rem;
  }
}
.s-about__txt02 h3 svg,
.s-about__txt02 h3 img {
  width: 16.4rem;
}
@media screen and (max-width: 767px), print {
  .s-about__txt02 h3 svg,
  .s-about__txt02 h3 img {
    width: 16.4rem;
  }
}
.s-about__txt02 p {
  margin-top: 1.5rem;
}
@media screen and (max-width: 767px), print {
  .s-about__txt02 p {
    margin-top: 1rem;
  }
}
.s-about__txt03 {
  position: absolute;
}
@media screen and (min-width: 768px), print {
  .s-about__txt03 {
    left: calc(50% + 29rem);
    top: 54rem;
    font-size: 1.3rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__txt03 {
    top: 168.6rem;
    left: 11rem;
    /* Do not use high z-index here — it helped paint over the fixed bottom nav */
    z-index: 1;
  }
}

.s-about__txt04 {
  position: absolute;
}
@media screen and (min-width: 768px), print {
  .s-about__txt04 {
    left: calc(50% - 37rem);
    top: 19.4rem;
    font-size: 1.3rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__txt04 {
    top: 30rem;
    left: 6.8rem;
  }
}
.s-about__txt05 {
  position: absolute;
}
@media screen and (min-width: 768px), print {
  .s-about__txt05 {
    left: calc(50% + 11rem);
    top: 107rem;
    font-size: 1.3rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__txt05 {
    top: 119.4rem;
    left: 4rem;
  }
}
.s-about__txt06 {
  position: absolute;
}
@media screen and (min-width: 768px), print {
  .s-about__txt06 {
    left: calc(50% - 28rem);
    top: 23.6rem;
    font-size: 1.3rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__txt06 {
    top: 355rem;
    left: 5.4rem;
    /* Do not use high z-index here — it helped paint over the fixed bottom nav */
    z-index: 1;
  }
}

.s-about__txt07 {
  position: absolute;
}
@media screen and (min-width: 768px), print {
  .s-about__txt07 {
    left: calc(50% + 22rem);
    top: 62.7rem;
    font-size: 1.3rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-about__txt07 {
    top: 77rem;
    left: calc(50% - 12.4rem);
    font-size: 1.6rem;
    text-align: center;
    white-space: nowrap;
  }
}
.s-about__txt07 strong {
  font-weight: normal;
  font-size: 1.6rem;
  line-height: 1.7;
}

.s-daily {
  position: relative;
}
.s-daily__cvTrigger {
  position: absolute;
  bottom: 3rem;
  width: 100%;
  height: 1px;
}
.s-daily__img {
  position: relative;
  z-index: 1;
  max-width: 106rem;
  width: 100%;
  margin-inline: auto;
  margin-top: -5rem;
}
@media screen and (max-width: 767px), print {
  .s-daily__img {
    width: 33rem;
    max-width: 100%;
    margin-top: 0;
  }
}
.s-daily__img-caption {
  text-align: right;
  font-size: 1rem;
  color: #fff;
  margin-top: 0.3rem;
}
.s-daily__mainImg {
  margin-top: -38rem;
  position: relative;
}
@media screen and (max-width: 767px), print {
  .s-daily__mainImg {
    margin-top: -14rem;
  }
}
.s-daily__mainImg-el {
  display: block;
}
@media screen and (min-width: 768px), print {
  .s-daily__mainImg-el {
    height: 100rem;
  }
  html[data-text-scale-active] .s-daily__mainImg-el {
    height: calc(100rem / var(--text-scale, 1));
  }
}
.s-daily__mainImg-el img {
  -o-object-fit: cover;
  object-fit: cover;
  height: 100%;
  width: 100%;
}
.s-daily__mainImg-caption {
  z-index: 1;
  position: absolute;
  color: #fff;
  text-align: right;
}
@media screen and (min-width: 768px), print {
  .s-daily__mainImg-caption {
    left: 50%;
    transform: translateX(-50%) translateX(42rem);
    top: 47.5rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-daily__mainImg-caption {
    right: 3rem;
    top: 17rem;
  }
}
.s-daily__mainImg-caption h3 {
  font-size: 4rem;
  font-weight: lighter;
  line-height: 1;
}
@media screen and (max-width: 767px), print {
  .s-daily__mainImg-caption h3 {
    font-size: 2rem;
  }
}
.s-daily__mainImg-caption p {
  letter-spacing: 0.03em;
}
@media screen and (max-width: 767px), print {
  .s-daily__mainImg-caption p {
    font-size: 1.3rem;
  }
}
.s-daily__ttl {
  position: absolute;
  bottom: 26.6rem;
  left: calc(50% - 39rem);
  color: white;
  font-weight: normal;
  width: 20rem;
}
@media screen and (max-width: 767px), print {
  .s-daily__ttl {
    bottom: 13rem;
    left: 50%;
    transform: translateX(-50%);
    width: 16rem;
  }
}

.s-introduce {
  height: 400vh;
}
.s-introduce__boxArea,
.s-introduce__trigger {
  position: sticky;
  height: 100vh;
  width: 100%;
  left: 0;
  top: 0;
  display: flex;
  align-items: center;
}
.s-introduce__txtArea {
  display: flex;
  align-items: center;
  justify-content: center;
}
.s-introduce__txtWrap {
  width: 50%;
  transform: translateY(-3rem);
}
.s-introduce__box {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 100%;
  display: grid;
  align-items: center;
  grid-template-columns: repeat(2, 1fr);
}
.s-introduce__box:nth-of-type(n + 2) {
  -webkit-clip-path: polygon(0 100%, 100% 100%, 100% 100%, 0 100%);
  clip-path: polygon(0 100%, 100% 100%, 100% 100%, 0 100%);
  will-change: clip-path;
}
.s-introduce__en {
  font-size: 1.4rem;
  text-align: right;
  display: block;
  width: -moz-fit-content;
  width: fit-content;
  margin-left: auto;
}
.s-introduce__ttl {
  font-weight: normal;
  margin-top: 4rem;
}
.s-introduce__ttl img,
.s-introduce__ttl svg {
  width: 16rem;
}
.s-introduce__txt {
  font-size: 1.3rem;
  margin-top: 1rem;
}

.s-echo {
  padding-top: 12rem;
  padding-bottom: 8.6rem;
  overflow: clip;
  position: relative;
}
@media screen and (max-width: 767px), print {
  .s-echo {
    padding-top: 9rem;
    padding-bottom: 0;
  }
}
.s-echo__bgImg {
  width: 98rem;
  position: absolute;
  z-index: -1;
  left: 50%;
  top: 3rem;
  transform: translateX(-50%) translateX(25rem);
}
@media screen and (max-width: 767px), print {
  .s-echo__bgImg {
    width: 36rem;
    top: -1rem;
    transform: translateX(-50%);
  }
}
.s-echo__ttl {
  text-align: center;
  width: 100%;
  display: flex;
  justify-content: center;
}
.s-echo__ttl img,
.s-echo__ttl svg {
  width: 31rem;
}
@media screen and (max-width: 767px), print {
  .s-echo__ttl img,
  .s-echo__ttl svg {
    width: 18rem;
  }
}
.s-echo__txt {
  font-size: 1.3rem;
  margin-top: 1rem;
  text-align: center;
  margin-top: 1.5rem;
}
@media screen and (max-width: 767px), print {
  .s-echo__txt {
    font-size: 1.4rem;
    line-height: 2;
    margin-top: 2rem;
  }
}
.s-echo__content {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6rem;
  max-width: 114rem;
  width: 100%;
  margin-inline: auto;
  padding-inline: var(--vtm-gutter);
}
@media screen and (max-width: 767px), print {
  .s-echo__content {
    grid-template-columns: 1fr;
    width: 100%;
    padding-inline: 4.5rem;
    margin-top: 2.6rem;
    gap: 5rem;
  }
}
.s-echo__content-item {
  counter-increment: item;
}
@media screen and (min-width: 768px), print {
  .s-echo__content-item:nth-of-type(2) {
    margin-top: 7.7rem;
  }
  .s-echo__content-item:nth-of-type(3) {
    margin-top: 15.4rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-echo__content-item-img {
    display: block;
    padding-inline: 2rem;
  }
}
.s-echo__content-item-ttl {
  position: relative;
  margin-top: 4rem;
  font-size: 2rem;
  font-weight: normal;
  line-height: 1.5;
}
@media screen and (max-width: 767px), print {
  .s-echo__content-item-ttl {
    margin-top: 3rem;
  }
}
.s-echo__content-item-ttl .svg {
  position: absolute;
  right: 0;
  bottom: 0;
  width: 7.2rem;
}
@media screen and (max-width: 767px), print {
  .s-echo__content-item-ttl .svg {
    bottom: inherit;
    top: 0;
  }
}
.s-echo__content-item-txt {
  margin-top: 1rem;
  font-size: 1.3rem;
  line-height: 1.7;
}
.s-echo__content-item-link {
  display: block;
  width: -moz-max-content;
  width: max-content;
  margin-left: auto;
  margin-top: 0.4rem;
  border-bottom: 1px solid #222;
}
.s-echo-modal__mainttl {
  font-size: 3.2rem;
  font-weight: normal;
  line-height: 1.5;
  margin-bottom: 4.8rem;
  letter-spacing: 0.15em;
}
@media screen and (max-width: 767px), print {
  .s-echo-modal__mainttl {
    font-size: 2.4rem;
    margin-bottom: 2.4rem;
  }
}
.s-echo-modal__items {
  display: grid;
  gap: 4.8rem;
}
@media screen and (min-width: 768px), print {
  .s-echo-modal__item:nth-of-type(even) .s-echo-modal__figure img {
    order: 2;
  }
  .s-echo-modal__item:nth-of-type(even) .s-echo-modal__figure .s-echo-modal__content {
    order: 1;
  }
}
.s-echo-modal__figure {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6rem;
  align-items: center;
}
@media screen and (max-width: 767px), print {
  .s-echo-modal__figure {
    grid-template-columns: 1fr;
    gap: 1.6rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-echo-modal__img {
    order: 2;
  }
}
@media screen and (max-width: 767px), print {
  .s-echo-modal__content {
    order: 1;
  }
}
.s-echo-modal__ttl {
  font-size: 2rem;
  font-weight: normal;
  line-height: 1.2;
}
@media screen and (max-width: 767px), print {
  .s-echo-modal__ttl {
    font-size: 1.8rem;
  }
}
.s-echo-modal__subttl {
  font-size: 1.5rem;
  font-weight: normal;
  line-height: 1.2;
  margin-top: 1rem;
}
.s-echo-modal__txt {
  margin-top: 1.5rem;
  font-size: 1.3rem;
  display: grid;
  gap: 1.5rem;
  line-height: 1.8;
  letter-spacing: normal;
}
.s-echo-modal__bottom {
  display: grid;
  margin-top: 6rem;
}
.s-echo-modal__bottom-item {
  padding-block: 3rem;
  border-top: 1px solid #888888;
  font-size: 1.5rem;
  line-height: 1.8;
  letter-spacing: normal;
}
.s-echo-modal__bottom-item:last-of-type {
  padding-bottom: 0;
}
.s-echo-modal__bottom-ttl {
  font-size: 1.5rem;
  font-weight: lighter;
  letter-spacing: 0.2em;
}
@media screen and (max-width: 767px), print {
  .s-echo-modal__bottom-ttl {
    letter-spacing: 0.1em;
  }
}
.s-echo-modal__bottom-txt {
  font-size: 1.3rem;
  margin-top: 1rem;
  letter-spacing: normal;
}

/* .noise-bg::after trước đây trỏ tới assets/images/noise-bg.png — file này
   không tồn tại trong repo (không rõ có bao giờ tồn tại hay không), nên lớp
   phủ này chưa từng thật sự hiển thị gì (ảnh nền lỗi lặng lẽ, z-index: -1
   nằm khuất sau nội dung) — bỏ hẳn quy tắc chết này thay vì tiếp tục trỏ
   tới 1 file không có, không đổi gì về mặt hiển thị (đã vô hình từ trước
   tới giờ). */
.noise-bg {
  position: relative;
}

.s-voice {
  padding-top: 6rem;
  padding-bottom: 6rem;
  overflow: clip;
}
@media screen and (max-width: 767px), print {
  .s-voice {
    padding-top: 4rem;
    width: 100%;
    padding-bottom: 4rem;
  }
}
.s-voice.js-inveiw-intro {
  opacity: 1;
}
.s-voice__inner {
  align-items: start;
  max-width: 102rem;
  margin-inline: auto;
}
.s-voice__ttlWrap {
  position: relative;
}
.s-voice__ttl {
  font-size: 3.2rem;
  font-weight: normal;
  letter-spacing: 0.2em;
  position: relative;
  z-index: 1;
  text-align: center;
}
@media screen and (max-width: 767px), print {
  .s-voice__ttl {
    text-align: center;
    font-size: 2rem;
  }
}
.s-voice__en {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translateX(-50%) translateY(-50%) translateY(-1rem);
  width: 57.8rem;
}
/* Chữ nền "Artists Voices" (voice-enTtl.svg) — ảnh trang trí, không phải
   văn bản HTML thật, không nên to ra khi khách bấm "Aa" phóng chữ (cùng lỗi
   & cách sửa như .s-mv__logo/.fixed-noise01-el ở trên). */
html[data-text-scale-active] .s-voice__en {
  width: calc(57.8rem / var(--text-scale, 1));
}
@media screen and (max-width: 767px), print {
  .s-voice__en {
    left: 50%;
    transform: translate(-50%, -50%) translateX(2rem) translateY(-0.5rem);
    width: 30rem;
    opacity: 0.7;
  }
  html[data-text-scale-active] .s-voice__en {
    width: calc(30rem / var(--text-scale, 1));
  }
}
.s-voice__swiper {
  position: relative;
  max-width: 105.2rem;
  margin-inline: auto;
  overflow: hidden;
  margin-top: 3rem;
  /* スライドの動き等速 */
  /* 画像のサイズ調整 */
}

/* ----- Nút chuyển ảnh: mờ, nằm đè 2 bên cạnh ảnh (kiểu "‹ ›") -----
   Vị trí top được JS tính lại theo tâm ảnh của slide đang active (xem
   script cuối trang index.html), vì mỗi slide cao khác nhau (autoHeight)
   nên không thể canh giữa cố định bằng top:50% của cả khối. */
.s-voice__nav-btn {
  position: absolute;
  top: 20rem; /* giá trị mặc định trước khi JS tính lại, tránh giật hình khi tải trang */
  transform: translateY(-50%);
  z-index: 5;
  width: 4.4rem;
  height: 4.4rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: none;
  /* Độ "mờ" nằm ở chính màu nền/icon (rgba), không hạ opacity của cả nút —
     tránh bị mờ chồng mờ (nền đã bán trong suốt lại còn bị opacity nhân thêm
     lần nữa) khiến nút gần như biến mất. */
  background: rgba(255, 255, 255, 0.75);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
  box-shadow: 0 0.2rem 0.8rem rgba(0, 0, 0, 0.1);
  color: rgba(26, 26, 26, 0.65);
  cursor: pointer;
  transition: background 0.25s ease, color 0.25s ease, box-shadow 0.25s ease;
}
.s-voice__nav-btn svg {
  width: 1.8rem;
  height: 1.8rem;
}
.s-voice__nav-btn--prev {
  left: 0.6rem;
}
.s-voice__nav-btn--next {
  right: 0.6rem;
}
@media (hover: hover) and (min-width: 768px) {
  .s-voice__nav-btn:hover {
    background: #ac801a;
    color: #fff;
    box-shadow: 0 0.3rem 1.2rem rgba(172, 128, 26, 0.35);
  }
}
.s-voice__nav-btn.swiper-button-disabled {
  opacity: 0;
  pointer-events: none;
}
@media screen and (max-width: 767px), print {
  .s-voice__nav-btn {
    width: 3.4rem;
    height: 3.4rem;
    background: rgba(255, 255, 255, 0.8);
    color: rgba(26, 26, 26, 0.75);
  }
  .s-voice__nav-btn svg {
    width: 1.5rem;
    height: 1.5rem;
  }
  .s-voice__nav-btn--prev {
    left: 0.3rem;
  }
  .s-voice__nav-btn--next {
    right: 0.3rem;
  }
}

/* ----- Số đếm "01/09" — đứng riêng, gọn nhẹ bên dưới carousel -----
   Gạch mảnh phía trên tách hẳn khỏi "Xem thêm", số hiện tại đậm màu hơn
   tổng số để tạo phân cấp thị giác thay vì một dải chữ xám đều đều. */
.s-voice__swiper-control {
  position: relative;
  margin-top: 4.4rem;
  padding-top: 1.8rem;
  width: -moz-fit-content;
  width: fit-content;
  margin-inline: auto;
  font-family: "Noto Serif JP", serif;
  font-size: 1.3rem;
  letter-spacing: 0.15em;
}
.s-voice__swiper-control::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  width: 2.6rem;
  height: 1px;
  background: #ddd;
}
/* CSS gốc của Swiper đặt .swiper-pagination là position:absolute — khiến nó
   thoát khỏi luồng bố cục, nên .s-voice__swiper-control (width: fit-content)
   không còn "ôm" theo kích thước số đếm thật nữa mà co về 0, kéo theo gạch
   chân ::before (canh giữa theo chính khung 0px đó) bị lệch khỏi vị trí số
   đếm thực tế đang hiển thị (số đếm khi đó lại canh theo swiper cha, không
   phải theo khung này). Trả position về static để số đếm nằm lại đúng
   trong luồng, khung tự co khít theo và gạch chân canh giữa đúng vị trí. */
.s-voice__swiper-control .swiper-pagination {
  position: static;
  width: auto;
}
.s-voice__swiper-control .swiper-pagination-current {
  color: #1a1a1a;
  font-weight: 600;
}
.s-voice__swiper-control .swiper-pagination-total {
  color: #bbb;
}
/* Nút "Xem thêm" DUY NHẤT cho cả section (thay cho nút riêng trên từng thẻ
   nghệ sĩ trước đây) — dẫn sang trang Nghệ sĩ riêng, cùng kiểu gạch chân
   mảnh với .s-voice__content-item-continuation cũ để giữ ngôn ngữ thị giác. */
.s-voice__viewall {
  display: block;
  width: -moz-fit-content;
  width: fit-content;
  margin-inline: auto;
  margin-top: 1.6rem;
  font-size: 1.1rem;
  letter-spacing: 0.05em;
  color: #1a1a1a;
  text-decoration: none;
  border-bottom: 1px solid #464646;
  padding-bottom: 0.3rem;
}
@media screen and (max-width: 767px), print {
  .s-voice__swiper-control {
    margin-top: 2.8rem;
    padding-top: 1.4rem;
    font-size: 1.15rem;
  }
}
.s-voice__swiper .swiper-slide img {
  height: auto;
  width: 100%;
}
.s-voice__content.js-inveiw-intro-items {
  opacity: 1;
}
.s-voice__content-item {
  padding-inline: 1.6rem;
}
@media screen and (max-width: 767px), print {
  .s-voice__content-item {
    padding-inline: 1.2rem;
  }
}
.s-voice__content-item-header {
  margin-bottom: 1rem;
  text-align: center;
}
.s-voice__content-item-header--modal {
  text-align: center;
  margin-bottom: 2rem;
}
.s-voice__content-item-ttl {
  font-size: 1.5rem;
  font-weight: normal;
  line-height: 1.3;
}
.s-voice__content-item-furigana {
  font-size: 1.3rem;
}
.s-voice__content-item-img {
  padding-bottom: 2.7rem;
  position: relative;
}
.s-voice__content-item-img--modal {
  max-width: 50rem;
  margin-inline: auto;
}
.s-voice__content-item-img figcaption {
  position: absolute;
  bottom: 0;
  right: 0;
  text-align: right;
  font-size: 1rem;
  letter-spacing: 0;
  color: #707070;
}
.s-voice__content-item-img--modal figcaption {
  width: 100%;
  text-align: center;
}
.s-voice__content-item-plays {
  font-size: 1.1rem;
  letter-spacing: 0.05em;
  color: #464646;
  margin-top: -2.5rem;
}
.s-voice__content-item-achieve {
  font-size: 1.3rem;
  line-height: 1.5;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: normal;
  margin-top: 0.7rem;
}
.s-voice__content-item-achieve--modal {
  display: grid;
  gap: 1.2rem;
  line-height: 1.7;
}
.s-voice__content-item-continuation {
  display: block;
  width: -moz-fit-content;
  width: fit-content;
  margin-inline: auto;
  margin-top: 1.6rem;
  font-size: 1.1rem;
  border-bottom: 1px solid #464646;
  padding-bottom: 0.3rem;
  cursor: pointer;
}
.s-voice__content-item-box--modal {
  max-width: 60rem;
  margin-inline: auto;
}
.s-voice__imgArea {
  margin-top: 6rem;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 4rem;
}

.middle-bg {
  width: 100%;
  margin-inline: auto;
  display: block;
}
.middle-bg__wrap {
  position: relative;
  padding-bottom: 14rem;
}
@media screen and (max-width: 767px), print {
  .middle-bg__wrap {
    padding-bottom: 7rem;
  }
}
.middle-bg__try {
  position: absolute;
  text-align: center;
  color: #fff;
  background: url(../images/cv-bg.png) no-repeat center center/contain;
  line-height: 1.5;
  bottom: 0;
  right: 0;
}
.middle-bg__try-inner {
  width: 27rem;
  height: 27rem;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-top: 3rem;
}
@media screen and (max-width: 767px), print {
  .middle-bg__try-inner {
    width: 13.8rem;
    height: 13.8rem;
    padding-top: 1rem;
  }
}
.middle-bg__try img,
.middle-bg__try svg {
  width: 16rem;
}
@media screen and (max-width: 767px), print {
  .middle-bg__try img,
  .middle-bg__try svg {
    width: 6.9rem;
  }
}

.s-share {
  padding-top: 4.4rem;
  max-width: 102rem;
  width: 100%;
  margin-inline: auto;
  padding-inline: var(--vtm-gutter);
}
@media screen and (max-width: 767px), print {
  .s-share {
    padding-top: 2rem;
    width: 100%;
    padding-inline: 2rem;
    padding-bottom: 3rem;
  }
}
.s-share__inner {
  align-items: start;
}
.s-share__ttlWrap {
  position: relative;
}
.s-share__ttl {
  font-size: 3.2rem;
  font-weight: normal;
  letter-spacing: 0.2em;
  position: relative;
  z-index: 1;
  width: -moz-max-content;
  width: max-content;
  margin-left: auto;
}
@media screen and (max-width: 767px), print {
  .s-share__ttl {
    font-size: 2rem;
    margin-inline: auto;
  }
}
.s-share__en {
  position: absolute;
  top: 50%;
  right: 0;
  transform: translateY(-50%) translateY(-1rem);
  width: 57rem;
}
@media screen and (max-width: 767px), print {
  .s-share__en {
    width: 29rem;
  }
}
.s-share__description {
  position: relative;
  z-index: 1;
  margin-top: -8.8rem;
  line-height: 1.7;
}
@media screen and (max-width: 767px), print {
  .s-share__description {
    margin-top: 0;
    margin-top: 1.5rem;
  }
}
.s-share__tags {
  margin-top: 1.5rem;
  display: flex;
  gap: 2rem;
  margin-bottom: 2.5rem;
}
@media screen and (max-width: 767px), print {
  .s-share__tags {
    margin-top: 0.5rem;
  }
}
.s-share__tag {
  font-size: 1.3rem;
  color: #464646;
}
.s-share__post-list {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 3rem;
  margin-top: 3rem;
}
@media screen and (max-width: 767px), print {
  .s-share__post-list {
    margin-top: 2rem;
    grid-template-columns: repeat(3, 1fr);
    gap: 1.6rem 2.4rem;
  }
}
.s-share__post-account {
  display: inline-grid;
  grid-template-columns: 1.4rem auto;
  align-items: center;
  gap: 0.4rem;
  color: #ac801a;
  margin-top: 1.6rem;
  font-size: 1.3rem;
  line-height: 1;
  letter-spacing: 0;
}
@media screen and (max-width: 767px), print {
  .s-share__post-account {
    margin-top: 2rem;
    letter-spacing: normal;
    font-weight: lighter;
  }
}
.s-share__post-account-icon {
  width: 1.2rem;
  height: 1.2rem;
}
.s-share__post-account-img {
  border-radius: 0.5rem;
  overflow: hidden;
}
.s-share__post-text {
  font-size: 1.3rem;
  line-height: 1.8;
}
@media screen and (max-width: 767px), print {
  .s-share__post-text {
    font-size: 1.1rem;
    line-height: 1.6;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}
.s-share .vsm-tile .ecbn-selection-title,
.s-share .vsm-tile .section-text,
.s-share .vsm-tile .hashtag-list,
.s-share .vsm-tile .instalist__btn {
  display: none !important;
}
.s-share .ecbn-selection-caption {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.s-share .ecbn-selection-caption::after {
  display: none;
}
.s-share .ecbn-selection-description {
  font-size: 1.4rem !important;
  margin-top: 1.8rem !important;
  padding-bottom: 3rem !important;
  display: none !important;
}

.s-lineup-link {
  padding-top: 6rem;
  padding-bottom: 0;
  margin-bottom: 0;
}
/* Last .s-lineup-link section before footer — add breathing room on desktop */
.s-lineup-link:last-of-type {
  padding-bottom: 5rem;
}
@media screen and (max-width: 767px), print {
  .s-lineup-link {
    margin-top: 6rem;
    padding-top: 0;
    margin-bottom: 0;
    padding-bottom: 6.4rem;
  }
}
.s-lineup-link__inner {
  /* Lỗi có thật, có từ trước: "width: 112rem" (=1792px) là bề rộng CỐ
     ĐỊNH, không tự co lại cho vừa màn hình hẹp hơn 1792px (rất nhiều
     laptop phổ biến: 1536/1440/1366px) — khiến cả khối (tiêu đề + nội
     dung bên trong) tràn ra ngoài 2 bên màn hình. Đổi sang max-width +
     width:100% (mẫu container co giãn chuẩn): vẫn rộng tối đa 112rem trên
     màn hình lớn như thiết kế gốc, nhưng tự co vừa khít trên màn hẹp hơn.
     Thêm padding-inline để nội dung không dính sát mép màn hình khi
     width:100% có hiệu lực (dưới 1792px) — trước đó chỉ có padding này ở
     riêng bản mobile. */
  max-width: 112rem;
  width: 100%;
  margin-inline: auto;
  /* Trên màn hình rất rộng (>1600px), max-width đóng băng còn margin-auto
     tự nới ra rất nhiều nên lề luôn thoáng (không sát mép). Nhưng ở dải
     laptop 14-16" phổ biến (~1366-1600px, vẫn nằm trong công thức vw của
     html font-size), max-width co theo TỈ LỆ với viewport nên phần
     margin-auto còn lại rất mỏng — cộng với padding-inline cũ chỉ 2rem
     (~24-32px) khiến nội dung nhìn sát mép màn hình rõ trên đúng dải màn
     hình đó (sếp phản ánh, so sánh màn 27" vs 16", ảnh chụp thực tế màn
     16" thấy chữ/ảnh sát mép). Đổi sang clamp() để có lề TỐI THIỂU đảm
     bảo ~24-64px tuỳ bề rộng màn hình, không phụ thuộc mỗi tỉ lệ vw nữa —
     ở màn cực rộng gần như không đổi gì (margin-auto vốn đã quá thoáng),
     chỉ tăng thêm lề đúng ở dải laptop hẹp hơn. KHÔNG đụng override mobile
     (≤767px) ngay dưới — mobile giữ nguyên 2rem như cũ theo yêu cầu. */
  padding-inline: var(--vtm-gutter);
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__inner {
    width: 100%;
    padding-inline: 2rem;
  }
}
.s-lineup-link__ttlWrap {
  position: relative;
}
.s-lineup-link__ttl {
  text-align: center;
  position: relative;
  z-index: 1;
}
.s-lineup-link__ttl h2 {
  font-size: 3.2rem;
  font-weight: 500;
  line-height: 1.4;
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__ttl h2 {
    font-size: 2rem;
  }
}
.s-lineup-link__ttl p {
  font-size: 1.8rem;
  font-weight: normal;
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__ttl p {
    font-size: 1.5rem;
  }
}
.s-lineup-link__en {
  position: absolute;
  width: 62rem;
  left: 50%;
  transform: translateX(-50%);
  bottom: -5rem;
  pointer-events: none;
}
/* Chữ nền "piano" (lineup-link-enTtl.svg) — ảnh trang trí đè phía sau tiêu
   đề, không phải văn bản HTML thật, không nên to ra khi khách bấm "Aa"
   phóng chữ (cùng lỗi & cách sửa như .s-mv__logo/.fixed-noise01-el ở trên). */
html[data-text-scale-active] .s-lineup-link__en {
  width: calc(62rem / var(--text-scale, 1));
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__en {
    width: 29rem;
    bottom: -1rem;
    filter: blur(0.5rem);
  }
  html[data-text-scale-active] .s-lineup-link__en {
    width: calc(29rem / var(--text-scale, 1));
  }
}
.s-lineup-link__items {
  margin-top: 3rem;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 2rem;
}
.s-lineup-link__items > .s-lineup-link__item {
  /* 3 cột đều nhau; khi hàng chỉ có 1-2 sản phẩm, justify-content: center
     ở trên sẽ tự căn giữa thay vì lệch trái như grid-template-columns cũ */
  flex: 0 1 calc((100% - 2 * 2rem) / 3);
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__items > .s-lineup-link__item {
    flex: 0 1 100%;
  }
}
.s-lineup-link__item {
  position: relative;
}
@media (hover: hover) and (min-width: 768px) {
  .s-lineup-link__item:hover .s-lineup-link__img {
    transform: scale(1.05);
  }
  .s-lineup-link__item:hover .s-lineup-link__figure::after {
    background: #ac801a;
  }
}
.s-lineup-link__figure {
  position: relative;
  height: 12rem;
  overflow: hidden;
}
.s-lineup-link__figure::after {
  content: "";
  position: absolute;
  right: 0.7rem;
  bottom: 0.7rem;
  width: 1.2rem;
  height: 1.2rem;
  background: #fff;
  -webkit-clip-path: polygon(0 100%, 100% 0, 100% 100%, 0 100%);
  clip-path: polygon(0 100%, 100% 0, 100% 100%, 0 100%);
  transition: background 0.5s ease-in-out;
}
.s-lineup-link__img {
  position: absolute;
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  transition: transform 0.5s ease-in-out;
}
.s-lineup-link__caption {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  left: 3rem;
  height: 100%;
  color: #fff;
  font-size: 1.3rem;
  height: 1.6rem;
  text-shadow: 0 2px 4px rgba(0,0,0,0.6);
}
@media screen and (max-width: 768px), print {
  .s-lineup-link__caption {
    transform: translateY(-50%) translateY(-2.3rem);
  }
}
.s-lineup-link__caption img,
.s-lineup-link__caption svg {
  height: 100%;
  width: auto;
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__caption--spAdjust {
    height: 1.5rem;
  }
}
@media screen and (min-width: 768px), print {
  .s-lineup-link__caption--2line {
    height: 4rem;
    transform: translateY(-50%) translateY(0.7rem);
  }
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__caption--2line {
    height: 1.8rem;
    transform: translateY(-50%) translateY(-2.8rem);
  }
}
@media screen and (min-width: 768px), print {
  .s-lineup-link__caption--2line-mini-pc {
    height: 3rem;
    transform: translateY(-50%) translateY(0.7rem);
  }
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__caption--2line-mini-sp {
    height: 3.3rem;
    transform: translateY(-50%) translateY(-0.8rem);
  }
}
.s-lineup-link__catch {
  text-align: center;
  line-height: 1.4;
  margin-top: 1.3rem;
  font-weight: 400;
  font-size: 1rem;
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__catch {
    position: absolute;
    z-index: 1;
    color: white;
    text-align: left;
    padding-left: 3rem;
    margin-top: 0;
    bottom: 2.4rem;
    font-size: 1.1rem;
  }
  .s-lineup-link__catch--2line-mini-sp {
    bottom: 1.3rem;
  }
  .s-lineup-link__catch--3line-sp {
    bottom: 1rem;
  }
}

.s-lineup-primary {
  z-index: 2;
  position: relative;
  overflow: clip;
}
@media screen and (min-width: 768px), print {
  .s-lineup-primary {
    opacity: 1 !important;
    transform: none !important;
  }
}
.s-lineup-primary__figure {
  position: absolute;
  width: 100%;
  height: 100%;
  left: 0;
  top: 0;
  z-index: -1;
  display: flex;
  background: #000;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__figure {
    position: static;
  }
}
.s-lineup-primary__figure-el img {
  width: 100%;
  height: 100vh;
  min-height: 50vw;
  -o-object-fit: cover;
  object-fit: cover;
  -o-object-position: center;
  object-position: center;
  position: sticky;
  top: 0;
  --move-x: 20;
  -o-object-position: calc(50% + var(--move-x) * 1vw) center;
  object-position: calc(50% + var(--move-x) * 1vw) center;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__figure-el img {
    height: 26rem;
    -o-object-position: center center;
    object-position: center center;
  }
}
.s-lineup-primary__hgroup {
  position: relative;
  height: 100vh;
  width: 100%;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__hgroup {
    display: none;
  }
}
.s-lineup-primary__hgroup-content {
  position: absolute;
  bottom: 13rem;
  left: 13rem;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__hgroup-content {
    position: static;
  }
}
.s-lineup-primary__hgroup-content * {
  color: #fff;
}
.s-lineup-primary__hgroup-content--gl {
  bottom: auto;
  top: 50%;
  transform: translateY(-50%);
}
.s-lineup-primary__hgroup-title {
  font-size: 4.2rem;
  font-family: "Noto Serif JP", serif;
  font-weight: normal;
  letter-spacing: 0.1em;
}
.s-lineup-primary__hgroup-title small {
  font-size: 3.2rem;
}
.s-lineup-primary__hgroup-text {
  position: relative;
  padding-bottom: 1rem;
  letter-spacing: 0.1em;
  line-height: 2;
}
.s-lineup-primary__hgroup-text::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 5rem;
  height: 1px;
  background-color: #fff;
}
.s-lineup-primary__hgroup-title {
  font-weight: normal;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__anchor {
    margin-top: -34rem;
    padding-top: 34rem;
    display: block;
  }
}
.s-lineup-primary__content {
  padding-block: 10.3rem;
  position: relative;
  width: 50%;
  margin-left: auto;
  background: #fff;
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__content {
    padding-top: 4rem;
    padding-bottom: 6rem;
    width: 100%;
    min-height: auto;
    background: none;
  }
}
.s-lineup-primary__content-hgroup {
  line-height: 1.3;
}
.s-lineup-primary__content-hgroup-en {
  font-size: 3.2rem;
  font-weight: normal;
  color: #ac801a;
  margin-bottom: 1.5rem;
  display: block;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__content-hgroup-en {
    margin-bottom: 1rem;
  }
  .s-lineup-primary__content-hgroup-en small {
    font-size: 2.6rem;
  }
}
.s-lineup-primary__content-hgroup-title {
  font-weight: normal;
  padding-bottom: 1.5rem;
  position: relative;
  line-height: 1.8;
}
.s-lineup-primary__content-hgroup-title::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 5rem;
  height: 1px;
  background-color: #707070;
}
.s-lineup-primary__content-text {
  margin-top: 2.2rem;
  font-size: 1.3rem;
  line-height: 1.7;
  width: 36rem;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__content-text {
    width: 34rem;
  }
}
.s-lineup-primary__content-price {
  display: flex;
  align-items: center;
  margin-top: 1.4rem;
}
.s-lineup-primary__content-price-label {
  width: 3.7rem;
  height: 3.7rem;
  display: flex;
  justify-content: center;
  align-items: center;
  border: 1px solid #5b5b5b;
  font-size: 1rem;
  margin-right: 1.2rem;
}
.s-lineup-primary__content-price-title {
  font-weight: normal;
  font-size: 1.4rem;
  margin-right: 1rem;
  line-height: 1.5;
}
.s-lineup-primary__content-movie {
  margin-top: 4rem;
  width: 36rem;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__content-movie {
    margin-top: 2rem;
    width: 34rem;
  }
}
.s-lineup-primary__content-movie-ttl {
  font-size: 1.6rem;
  font-weight: 600;
  letter-spacing: 0.1em;
}
.s-lineup-primary__content-movie-trigger {
  position: relative;
  cursor: pointer;
}
.s-lineup-primary__content-movie-trigger::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 4.3rem;
  height: 4.3rem;
  background: #dcdcdc;
  -webkit-clip-path: polygon(0% 0%, 100% 50%, 100% 50%, 0 100%);
  clip-path: polygon(0% 0%, 100% 50%, 100% 50%, 0 100%);
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__content-movie-trigger::after {
    width: 3.3rem;
    height: 3.3rem;
  }
}
.s-lineup-primary__content-links {
  margin-top: 4rem;
  display: grid;
  grid-template-columns: 1fr;
  gap: 1.5rem;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__content-links {
    margin-top: 2.3rem;
    gap: 0.8rem;
  }
}
.s-lineup-primary__content-link {
  width: 100%;
}
@media screen and (max-width: 767px), print {
  .s-lineup-primary__content-link {
    width: calc(100% - 4rem);
    margin-inline: auto;
  }
}

.s-other {
  margin-top: 12rem;
  padding-bottom: 10rem;
}
@media screen and (max-width: 767px), print {
  .s-other {
    margin-top: 0;
    padding-inline: 2rem;
    padding-bottom: 2rem;
  }
}
.s-other__items {
  display: grid;
  grid-template-columns: repeat(2, 43rem);
  gap: 13rem;
  justify-content: center;
}
@media screen and (max-width: 767px), print {
  .s-other__items {
    grid-template-columns: 1fr;
    gap: 6rem;
  }
}
.s-other__hgroup {
  text-align: center;
  line-height: 1.5;
  color: #ac801a;
  margin-bottom: 2rem;
}
.s-other__title {
  font-size: 3.2rem;
  font-weight: normal;
}
@media screen and (max-width: 767px), print {
  .s-other__title {
    font-size: 2.6rem;
  }
}
.s-other__kana {
  font-size: 1.8rem;
}
@media screen and (max-width: 767px), print {
  .s-other__kana {
    font-size: 1.3rem;
  }
}
.s-other__img {
  margin-bottom: 2.4rem;
}
.s-other__catch,
.s-other__subCatch,
.s-other__text,
.s-other__link {
  width: calc(100% - 7rem);
  margin-inline: auto;
}
@media screen and (max-width: 767px), print {
  .s-other__catch,
  .s-other__subCatch,
  .s-other__text,
  .s-other__link {
    width: calc(100% - 2rem);
  }
}
.s-other__catch {
  font-size: 1.8rem;
  line-height: 1.7;
  font-weight: normal;
  padding-bottom: 1rem;
  position: relative;
  margin-top: 2.4rem;
}
@media screen and (min-width: 768px), print {
  .s-other__catch {
    font-size: 1.6rem;
  }
}
.s-other__catch::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 5rem;
  height: 1px;
  background-color: #707070;
}
.s-other__subCatch {
  font-weight: 400;
  font-size: 1.3rem;
  margin-top: 1rem;
  color: #ac801a;
}
@media screen and (max-width: 767px), print {
  .s-other__subCatch {
    font-size: 1.3rem;
  }
}
.s-other__text {
  font-size: 1.3rem;
  line-height: 2;
  margin-top: 1rem;
}
@media screen and (max-width: 767px), print {
  .s-other__text {
    font-size: 1.1rem;
  }
}
.s-other__link {
  margin-top: 2.4rem;
}
@media screen and (max-width: 767px), print {
  .s-other__link {
    width: calc(100% - 4rem);
  }
}

/* .s-column không được dùng ở bất kỳ trang nào hiện tại (grep toàn site
   không ra kết quả) — giữ lại phần đệm layout phòng khi cần dùng lại sau
   này, chỉ bỏ 2 dòng background trỏ tới assets/images/noise-bg.png (file
   không tồn tại, cùng vấn đề với .noise-bg ở trên). */
.s-column {
  padding-bottom: 10rem;
  padding-top: 18rem;
}
@media screen and (max-width: 767px), print {
  .s-column {
    padding-top: 14rem;
    padding-bottom: 5rem;
  }
}
.s-column__inner {
  align-items: start;
  max-width: 102rem;
  width: 100%;
  margin-inline: auto;
  padding-inline: var(--vtm-gutter);
}
@media screen and (max-width: 767px), print {
  .s-column__inner {
    width: 100%;
    padding-inline: 3rem;
  }
}
.s-column__ttlWrap {
  position: relative;
}
.s-column__ttl {
  font-size: 3.2rem;
  font-weight: normal;
  letter-spacing: 0.2em;
  position: relative;
  z-index: 1;
  line-height: 1.5;
}
@media screen and (max-width: 767px), print {
  .s-column__ttl {
    font-size: 2.4rem;
  }
}
.s-column__en {
  position: absolute;
  top: 50%;
  left: 0;
  transform: translateY(-50%) translateX(-9rem) translateY(-3rem);
  width: 83rem;
}
@media screen and (max-width: 767px), print {
  .s-column__en {
    transform: translateY(-50%) translateX(2rem) translateY(-3rem);
    width: 34rem;
  }
}
.s-column__en img,
.s-column__en svg {
  width: 100%;
}
.s-column__content {
  position: relative;
  z-index: 1;
  width: 70.4rem;
  margin-left: auto;
  margin-top: -9rem;
  display: grid;
  gap: 4.2rem;
}
@media screen and (max-width: 767px), print {
  .s-column__content {
    margin-top: 2.4rem;
    width: 100%;
  }
}
.s-column__content-item {
  display: grid;
  grid-template-columns: 27rem auto;
  gap: 4.4rem;
  align-items: center;
}
@media (hover: hover) and (min-width: 768px) {
  .s-column__content-item img {
    transition: 0.5s;
  }
  .s-column__content-item:hover img {
    transform: scale(1.05);
  }
}
@media screen and (max-width: 767px), print {
  .s-column__content-item {
    grid-template-columns: 1fr;
    gap: 1.6rem;
  }
}
.s-column__content-img {
  overflow: hidden;
}
.s-column__content-title {
  line-height: 1.5;
  font-weight: normal;
  font-size: 1.8rem;
}
.s-column__content-text {
  line-height: 1.5;
  margin-top: 1.5rem;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.s-column__content-link {
  display: block;
  width: -moz-max-content;
  width: max-content;
  margin-left: auto;
  border-bottom: 1px solid #555555;
  margin-top: 0.5rem;
}
@media screen and (max-width: 767px), print {
  .s-column__content-link {
    letter-spacing: 0.2em;
    margin-top: 1rem;
  }
}

.s-store {
  padding-top: 20rem;
  padding-bottom: 27rem;
}
@media screen and (max-width: 767px), print {
  .s-store {
    padding-top: 12.4rem;
    padding-bottom: 3.8rem;
  }
}
.s-store__inner {
  align-items: start;
  max-width: 102rem;
  width: 100%;
  margin-inline: auto;
  padding-left: 13rem;
  position: relative;
}
@media screen and (max-width: 767px), print {
  .s-store__inner {
    width: auto;
    padding-left: 0;
  }
}
.s-store__ttlWrap {
  position: relative;
}
.s-store__ttl {
  font-size: 3.2rem;
  font-weight: normal;
  letter-spacing: 0.2em;
  position: relative;
  z-index: 1;
  line-height: 1.5;
  color: white;
}
@media screen and (max-width: 767px), print {
  .s-store__ttl {
    font-size: 2.2rem;
    text-align: center;
  }
}
.s-store__en {
  position: absolute;
  top: 50%;
  left: 0;
  transform: translateY(-50%) translateX(-15rem) translateY(-5rem);
  width: 67rem;
}
@media screen and (max-width: 767px), print {
  .s-store__en {
    width: 28rem;
    left: 50%;
    transform: translateX(-50%) translateY(-9rem);
    opacity: 0.7;
  }
}
.s-store__try {
  position: absolute;
  width: 24rem;
  height: 24rem;
  display: flex;
  top: -9rem;
  right: 6rem;
  border-radius: 9999px;
  z-index: 1;
  border: 1px solid white;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-top: 3rem;
}
@media (hover: hover) and (min-width: 768px) {
  .s-store__try {
    transition: 0.5s;
  }
  .s-store__try:hover {
    background: rgba(255, 255, 255, 0.1215686275) !important;
  }
}
@media screen and (max-width: 767px), print {
  .s-store__try {
    position: static;
    width: 14rem;
    height: 14rem;
    margin-inline: auto;
    margin-top: 3rem;
    padding-top: 2rem;
  }
}
.s-store__try-inner {
  position: relative;
  width: 100%;
  height: 100%;
}
.s-store__try img,
.s-store__try svg {
  max-width: 15.7rem;
}
@media screen and (max-width: 767px), print {
  .s-store__try img,
  .s-store__try svg {
    max-width: 10.7rem;
  }
}
.s-store__link {
  background: none !important;
  border: 1px solid white;
}
@media screen and (max-width: 767px), print {
  .s-store__link {
    margin-top: 1rem;
  }
}
.s-store__desc {
  color: white;
  margin-top: 1rem;
  line-height: 1.8;
  font-size: 1.4rem;
}
@media screen and (max-width: 767px), print {
  .s-store__desc {
    padding-inline: 3.5rem;
    text-align: center;
    font-size: 1.3rem;
    margin-top: 2.5rem;
    line-height: 2.2;
  }
}
.s-store__links {
  margin-top: 4.5rem;
  width: 36rem;
  display: grid;
  gap: 1.4rem;
}
.s-store__links .info {
  line-height: 20px;
  font-size: 1rem;
  display: block;
}
.s-store__company {
  color: white;
  margin-top: 2rem;
}
.s-store__company a {
  color: white;
  font-size: 1rem;
}
@media screen and (max-width: 767px), print {
  .s-store__links {
    margin-inline: auto;
    width: 30rem;
    margin-top: 2.7rem;
  }
  .s-store__company {
    margin-inline: auto;
    width: 30rem;
    text-align: center;
  }
}
@media (hover: hover) and (min-width: 768px) {
  .s-store__links a {
    transition: 0.5s;
  }
  .s-store__links a:hover {
    background: rgba(255, 255, 255, 0.1215686275) !important;
  }
}
.js-inveiw-intro {
  opacity: 0.05;
  transform: translateY(-1rem);
  transition:
    opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1),
    transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
  will-change: opacity, transform;
}
.js-inveiw-intro.is-visible {
  opacity: 1 !important;
  transform: translateY(0);
}

.js-inveiw-intro-items > * {
  opacity: 0;
  transform: translateY(-1rem);
  transition:
    opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1),
    transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
  will-change: opacity, transform;
}
.js-inveiw-intro-items > *.is-visible {
  opacity: 1 !important;
  transform: translateY(0);
}

@media (min-width: 721px) {
  .ecbn-selection-preview-new div.noProductsMsg {
    height: 25px !important;
  }
  .ecbn-selection-preview-caption {
    height: 30rem !important;
  }
}
@media (max-width: 720px) {
  .ecbn-selection-preview-new div.noProductsMsg {
    height: auto !important;
  }
} /*# sourceMappingURL=style.css.map */


      .hero-catch-en {
        font-family: 'Noto Serif JP', serif; /* 上品なセリフ体を指定 */
        text-align: right;      /* ★右揃え */
        color: #333;
        line-height: 1.8;       /* 行間をゆったりと取る */
        letter-spacing: 0.05em;
      }
      /* PC表示の文字サイズ */
      @media (min-width: 768px) {
        .hero-catch-en {
          font-size: 34px;
        }
      }
      /* スマホ表示の文字サイズ */
      @media (max-width: 767px) {
        .hero-catch-en {
          font-size: 22px;
        }
      }
      .s-echo__overlay {
  position: relative;
  display: inline-block;
  width: 100%;
}

.s-echo__overlay img {
  width: 100%;
  display: block;
  filter: brightness(70%); /* làm tối ảnh */
}

.s-echo__overlay-text {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  color: #fff;
  font-size: 3.4rem;
  font-family: "Noto Serif JP", serif;
  letter-spacing: 0.1em;
  text-align: center;
}

/* ========================================
   Phân khúc Collection (Limited / Artists' / Starter)
   ======================================== */
.s-lineup-link__tabs {
  position: relative;
  display: flex;
  justify-content: center;
  gap: 1rem;
  margin-top: 4rem;
}

/* Gạch chân vàng trượt theo tab đang hover/active (xem JS). Tinh tế hơn
   badge/chấm nhấp nháy — gợi ý các tab khác cũng bấm được. */
.s-lineup-link__tabs-underline {
  position: absolute;
  left: 0;
  top: 0;
  width: 0;
  height: 2px;
  background: #ac801a;
  opacity: 0;
  pointer-events: none;
  transition: left 0.3s ease, width 0.3s ease, top 0.3s ease, opacity 0.3s ease;
}
.s-lineup-link__tabs.is-underline-ready .s-lineup-link__tabs-underline {
  opacity: 1;
}

.s-lineup-link__tab {
  position: relative;
  -webkit-appearance: none;
  appearance: none;
  border: 1px solid #0a0a0a;
  background: #fff;
  color: #0a0a0a;
  font-family: inherit;
  font-size: 1.2rem;
  letter-spacing: 0.05em;
  padding: 0.8rem 2.4rem;
  cursor: pointer;
  line-height: 1.4;
  transition: background 0.3s ease, color 0.3s ease, opacity 0.3s ease;
}

@media (hover: hover) and (min-width: 768px) {
  .s-lineup-link__tab:hover {
    opacity: 0.7;
  }
}

.s-lineup-link__tab.is-active {
  background: #0a0a0a;
  color: #fff;
}

/* Số lượng sản phẩm trong mỗi tab, vd "Artists' Collection (1)" */
.s-lineup-link__tab-count {
  margin-left: 0.4rem;
  font-size: 0.95em;
  opacity: 0.6;
}

/* Panel không được chọn sẽ bị ẩn */
.is-tab-hidden {
  display: none !important;
}

/* Thông báo phân khúc trống (Coming Soon) */
.s-lineup-link__empty {
  grid-column: 1 / -1;
  text-align: center;
  padding: 4rem 0;
  border: 1px dashed #aaa;
  color: #999;
  font-size: 1.4rem;
  letter-spacing: 0.15em;
  opacity: 1 !important;
}

/* Responsive: mobile */
@media screen and (max-width: 767px), print {
  .s-lineup-link__tabs {
    flex-wrap: wrap;
    gap: 0.6rem;
    margin-top: 2.5rem;
  }
  .s-lineup-link__tab {
    flex: 1 1 30%;
    font-size: 1rem;
    padding: 0.7rem 0.4rem;
    text-align: center;
  }
  .s-lineup-link__empty {
    padding: 3rem 0;
    font-size: 1.2rem;
  }
}

/* ========================================
   Thanh điều hướng nhanh giữa các dòng đàn (product/index.html)
   Dính ngay dưới header cố định; offset --vtm-header-h do JS đo và gán,
   fallback 0px nếu JS chưa chạy kịp.
   ======================================== */
/* ĐÃ THỬ position:fixed nhưng sai — fixed không đợi cuộn qua khỏi banner
   mới "dính" như sticky vốn làm, nó đè thẳng lên banner (.product-banner,
   đứng TRƯỚC quicknav trong DOM) ngay từ lúc mới vào trang, tệ hơn hẳn
   lỗi ban đầu. Quay lại position:sticky.
   Nghi vấn tiếp theo cho lỗi "cố định tới đoạn Touch to feel rồi mất"
   (xảy ra ở MỌI trình duyệt mobile, không riêng WebKit — chủ site xác
   nhận): trang có hiệu ứng cuộn-vào-thì-hiện (.js-inveiw-intro, xem cuối
   trang) áp dụng ngay đúng đoạn .s-taxonomy ("Touch to feel") — 1 reflow/
   repaint đúng lúc cuộn qua đoạn này CÓ THỂ khiến trình duyệt tính sai lại
   trạng thái "đang dính" của sticky. transform:translateZ(0) + will-change
   ép trình duyệt tách riêng quicknav ra 1 lớp compositing độc lập — kỹ
   thuật hay dùng để tránh đúng kiểu lỗi "sticky tự rớt giữa chừng" này,
   không đổi cách định vị (position vẫn là sticky) nên không có rủi ro đè
   lên phần tử khác như lần thử fixed trước. */
.s-quicknav {
  position: relative;
  z-index: 500;
  background: rgba(255, 255, 255, 0.97);
  border-bottom: 1px solid #e5e5e5;
}
/* "Dính" giờ do JS điều khiển hoàn toàn (gắn/gỡ class này khi cuộn qua
   khỏi vị trí tự nhiên) thay vì dựa vào position:sticky của trình duyệt —
   sticky từng bị lỗi tái diễn nhiều lần trên mobile ("cố định tới 1 đoạn
   rồi mất", xem lịch sử debug trong product/index.html: đo header-height
   hụt, rồi ResizeObserver, rồi ép compositing layer bằng translateZ — vẫn
   tái phát, không dò chắc được đúng 1 nguyên nhân cụ thể). position:fixed
   neo thẳng vào viewport, không phụ thuộc "nearest scrolling ancestor"
   hay containing-block như sticky nên né được cả LỚP lỗi đó luôn, bất kể
   nguyên nhân đích xác là gì — không còn cần các hack compositing nữa. */
.s-quicknav.is-pinned {
  position: fixed;
  top: var(--vtm-header-h, 0px);
  left: 0;
  right: 0;
}
/* Giữ đúng khoảng trống trong luồng tài liệu khi quicknav chuyển sang
   is-pinned (position:fixed không còn chiếm chỗ trong flow) — JS set
   height bằng đúng chiều cao quicknav lúc chuyển, để nội dung bên dưới
   không bị "nhảy" giật lên/xuống khi gắn/gỡ class. */
.s-quicknav__spacer {
  height: 0;
}
.s-quicknav__inner {
  max-width: 112rem;
  width: 100%;
  margin-inline: auto;
  padding-inline: var(--vtm-gutter);
  position: relative;
  display: flex;
  justify-content: flex-start;
}
/* gap giảm xuống (từ 2.4rem cũ) vì mỗi link giờ tự có padding-inline
   riêng (xem .s-quicknav__link) — viên kính bọc trọn cả phần padding đó,
   không cần khoảng gap lớn để "giả" khoảng thở như bản gạch chân cũ nữa.
   position:relative để chính nó (chứ không phải .s-quicknav__inner) là
   offsetParent của cả link lẫn viên kính .s-quicknav__thread bên trong —
   viên kính giờ là con của chính vùng cuộn ngang này (xem HTML), cần
   offsetLeft của link và vị trí "left" của viên kính tính trên CÙNG 1 hệ
   toạ độ thì mới khớp nhau khi cuộn ngang trên mobile. */
.s-quicknav__links {
  position: relative;
  display: flex;
  gap: 0.4rem;
  overflow-x: auto;
  scrollbar-width: none;
  /* Viên kính trượt (.s-quicknav__thread) đổ box-shadow ra NGOÀI bề rộng
     của chính nó (blur 8px) — nếu link đang active là link ĐẦU/CUỐI, phần
     bóng đó tràn ra sát đúng mép của vùng cuộn overflow-x:auto này và bị
     cắt cụt (viên kính trông "vuông 1 cạnh" thay vì tròn đều 4 phía). Thêm
     khoảng đệm 2 bên đủ chỗ cho bóng đổ, để viên kính LUÔN tròn đều dù
     đang ở link đầu hay cuối. */
  padding-inline: 0.8rem;
}
.s-quicknav__links::-webkit-scrollbar {
  display: none;
}
/* Dải mờ gợi ý ở mép phải — 5 mục (30th Anniversary/Grand/Upright/Digital
   & Hybrid/Special Edition) trên mobile luôn dài hơn bề ngang màn hình
   nên buộc phải cuộn ngang mới thấy hết; trước đây không có gợi ý gì nên
   trông như mục cuối ("Special Edition") bị cắt/thiếu hẳn chứ không phải
   còn cuộn được tiếp. Tĩnh (không nhấp nháy), không chặn thao tác cuộn/
   bấm bên dưới nhờ pointer-events: none. */
.s-quicknav__inner::after {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: 3.2rem;
  background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.95));
  pointer-events: none;
}
/* z-index:1 để chữ luôn nổi TRÊN viên kính trượt .s-quicknav__thread (xem
   bên dưới) — viên kính đó rộng bằng đúng bề ngang link đang active + cao
   gần hết thanh, nếu không nâng chữ lên lớp riêng thì kính sẽ đè lên chữ. */
.s-quicknav__link {
  position: relative;
  z-index: 1;
  font-family: inherit;
  font-size: 1.3rem;
  letter-spacing: 0.03em;
  text-decoration: none;
  color: #8a8a8a;
  white-space: nowrap;
  padding-block: 1.6rem;
  /* Khoảng thở 2 bên chữ — viên kính .s-quicknav__thread ôm trọn cả phần
     padding này (JS đo offsetWidth của chính link), không ôm sát mép chữ
     như bản gạch chân cũ. */
  padding-inline: 1rem;
  transition: color 0.25s ease;
}
.s-quicknav__link.is-current {
  color: #0a0a0a;
  font-weight: 500;
}
/* "Viên kính" báo hiệu mục đang xem — thay cho gạch chân 2px cũ. Nền
   thanh quicknav VẪN là dải trắng bình thường (chủ site yêu cầu giữ
   nguyên), chỉ riêng mục ĐANG ACTIVE được bọc trong 1 viên liquid glass
   bo tròn kiểu con trỏ segmented-control của iOS, tự trượt mượt theo
   left/width mỗi khi đổi mục (JS đo offsetLeft/offsetWidth của link đang
   active — xem product/index.html). Track nền tuy trắng nhưng viên kính
   vẫn cần TỰ nó có độ đổ bóng + viền sáng để phân biệt được với nền trắng
   phía sau — không dựa vào độ trong suốt (trắng trên trắng thì vô hình). */
.s-quicknav__thread {
  position: absolute;
  top: 50%;
  left: 0;
  width: 0;
  height: 3.4rem;
  transform: translateY(-50%);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.7);
  -webkit-backdrop-filter: blur(12px) saturate(180%);
  backdrop-filter: blur(12px) saturate(180%);
  border: 1px solid rgba(255, 255, 255, 0.9);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12), inset 0 1px 1px rgba(255, 255, 255, 0.9), inset 0 -1px 1px rgba(0, 0, 0, 0.04);
  /* opacity trong transition để lúc JS ẩn hẳn viên kính (cuộn ra khỏi cả
     4 section, xem setCurrentLink(null) ở product/index.html) nó mờ dần
     đi thay vì biến mất khựng — width:0 riêng KHÔNG đủ để ẩn (border 1px +
     box-shadow vẫn tự vẽ ra 1 chấm/vệt nhỏ nhìn thấy được dù width đã 0),
     phải tắt bằng opacity mới thật sự vô hình. */
  transition: left 0.3s cubic-bezier(0.65, 0, 0.35, 1), width 0.3s cubic-bezier(0.65, 0, 0.35, 1), opacity 0.3s ease;
}
@media screen and (max-width: 767px), print {
  .s-quicknav__inner {
    width: 100%;
    padding-inline: 2rem;
    justify-content: flex-start;
  }
  .s-quicknav__links {
    gap: 0.2rem;
  }
  .s-quicknav__link {
    font-size: 1.3rem;
    padding-block: 1.4rem;
    padding-inline: 0.8rem;
  }
  .s-quicknav__thread {
    height: 3rem;
  }
}

/* ========================================
   Khối giải thích phân khúc — "Cách đọc trang này" (product/index.html)
   Nói rõ 1 lần logic Limited/Artists/Starter, để 3 tab-bar lặp lại bên
   dưới không cần giải thích lại mỗi lần.
   ======================================== */
.s-taxonomy {
  border-bottom: 1px solid #e5e5e5;
}
.s-taxonomy__inner {
  max-width: 112rem;
  width: 100%;
  margin-inline: auto;
  padding: 8rem var(--vtm-gutter) 5rem;
}
.s-taxonomy__eyebrow {
  font-family: inherit;
  font-size: 1.2rem;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: #ac801a;
  margin: 0;
}
.s-taxonomy__title {
  margin-top: 0.8rem;
  font-size: 2.6rem;
  font-weight: 500;
  line-height: 1.4;
  max-width: 22ch;
}
.s-taxonomy__lede {
  margin-top: 1.2rem;
  max-width: 62ch;
  color: #555;
  font-size: 1.3rem;
  line-height: 1.8;
}
.s-taxonomy__grid {
  margin-top: 3rem;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2rem;
}
.s-taxonomy__item {
  border: 1px solid #e5e5e5;
  border-radius: 0.8rem;
  padding: 1.8rem 2rem;
}
.s-taxonomy__item h3 {
  font-family: inherit;
  font-size: 1.3rem;
  font-weight: 500;
  color: #ac801a;
  margin: 0;
}
.s-taxonomy__item p {
  margin: 0.7rem 0 0;
  font-size: 1.2rem;
  line-height: 1.7;
  color: #555;
}
@media screen and (min-width: 768px) {
  /* Section Grand Collection theo ngay sau khối này không cần padding-top
     14.4rem đầy đủ nữa (vốn để né header cố định lúc chưa có quicknav) —
     giảm bớt để không bị 2 lớp khoảng trắng cộng dồn quá lớn. */
  .s-taxonomy + .s-lineup-link {
    padding-top: 6rem;
  }
}
@media screen and (max-width: 767px), print {
  .s-taxonomy__inner {
    width: 100%;
    padding: 5rem 2rem 3rem;
  }
  .s-taxonomy__title {
    font-size: 1.9rem;
  }
  .s-taxonomy__lede {
    font-size: 1.4rem;
  }
  .s-taxonomy__grid {
    grid-template-columns: 1fr;
    gap: 0;
    margin-top: 1.6rem;
  }
  /* Rút gọn: bỏ hẳn khung/bo góc/nền riêng từng ô — chỉ còn tiêu đề + 1-2
     dòng mô tả, ngăn cách bằng đường kẻ mảnh phía dưới mỗi mục (không phải
     khung bọc quanh cả bảng) — thay cho 3 ô có khung/padding lớn xếp chồng
     chiếm quá nhiều chiều cao. */
  .s-taxonomy__item {
    border: none;
    border-radius: 0;
    padding: 1.1rem 0.4rem;
    border-bottom: 1px solid #e5e5e5;
  }
  .s-taxonomy__item:last-child {
    border-bottom: none;
  }
  .s-taxonomy__item h3 {
    font-size: 1.2rem;
  }
  .s-taxonomy__item p {
    margin-top: 0.35rem;
    font-size: 1.25rem;
    line-height: 1.55;
  }
}

/* ========================================
   CTA tư vấn chọn đàn (product/index.html)
   ======================================== */
.s-concierge {
  max-width: 112rem;
  width: 100%;
  margin-inline: auto;
  margin-top: 5rem;
  padding: 5rem var(--vtm-gutter);
  border-top: 1px solid #e5e5e5;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 2rem;
  flex-wrap: wrap;
}
.s-concierge__title {
  font-size: 2rem;
  font-weight: 500;
  max-width: none;
  white-space: nowrap;
  margin: 0;
}
.s-concierge__actions {
  display: flex;
  gap: 1.2rem;
  flex-wrap: wrap;
}
.s-concierge__btn {
  font-family: inherit;
  font-size: 1.2rem;
  letter-spacing: 0.03em;
  text-decoration: none;
  padding: 1.1rem 2.4rem;
  border: 1px solid #0a0a0a;
  color: #0a0a0a;
  transition: background 0.3s ease, color 0.3s ease;
  white-space: nowrap;
}
.s-concierge__btn--solid {
  background: #0a0a0a;
  color: #fff;
}
@media (hover: hover) and (min-width: 768px) {
  .s-concierge__btn:hover {
    background: #0a0a0a;
    color: #fff;
  }
  .s-concierge__btn--solid:hover {
    opacity: 0.85;
  }
}
@media screen and (max-width: 767px), print {
  .s-concierge {
    width: 100%;
    padding: 4rem 2rem;
    margin-top: 3rem;
    flex-direction: column;
    align-items: flex-start;
  }
  .s-concierge__title {
    font-size: 1.6rem;
    max-width: none;
    white-space: normal;
  }
}

/* ========================================
   product/index.html — chỉnh lại tiêu đề/tab/card/bảng phân khúc cho
   ĐÚNG bố cục đã chốt ở bản mockup (title trái, tab chữ trơn + gạch
   chân, card vuông góc, bảng phân khúc viền liền) — CHỈ áp cho 4
   section dòng đàn trên trang product, không đụng tới trang chủ vì
   các trang đó dùng chung class .s-lineup-link__tab/__item/__ttl.
   ======================================== */

/* --- Tiêu đề section: trái thay vì giữa, bỏ chữ nền "PIANO" mờ --- */
#lineup-30th .s-lineup-link__en,
#lineup-grand .s-lineup-link__en,
#lineup-upright .s-lineup-link__en,
#lineup-digital .s-lineup-link__en,
#lineup-accessories .s-lineup-link__en {
  display: none;
}
#lineup-30th .s-lineup-link__ttl,
#lineup-grand .s-lineup-link__ttl,
#lineup-upright .s-lineup-link__ttl,
#lineup-digital .s-lineup-link__ttl,
#lineup-accessories .s-lineup-link__ttl {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 2rem;
  flex-wrap: wrap;
  text-align: left;
}
#lineup-30th .s-lineup-link__ttl h2,
#lineup-grand .s-lineup-link__ttl h2,
#lineup-upright .s-lineup-link__ttl h2,
#lineup-digital .s-lineup-link__ttl h2,
#lineup-accessories .s-lineup-link__ttl h2 {
  font-size: 2.6rem;
  text-align: left;
}
#lineup-30th .s-lineup-link__ttl p,
#lineup-grand .s-lineup-link__ttl p,
#lineup-upright .s-lineup-link__ttl p,
#lineup-digital .s-lineup-link__ttl p,
#lineup-accessories .s-lineup-link__ttl p {
  font-size: 1.3rem;
  font-weight: 400;
  color: #555;
  max-width: none;
  white-space: nowrap;
  text-align: right;
}
@media screen and (max-width: 767px), print {
  #lineup-30th .s-lineup-link__ttl,
  #lineup-grand .s-lineup-link__ttl,
  #lineup-upright .s-lineup-link__ttl,
  #lineup-digital .s-lineup-link__ttl,
  #lineup-accessories .s-lineup-link__ttl {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.4rem;
  }
  #lineup-30th .s-lineup-link__ttl p,
  #lineup-grand .s-lineup-link__ttl p,
  #lineup-upright .s-lineup-link__ttl p,
  #lineup-digital .s-lineup-link__ttl p,
  #lineup-accessories .s-lineup-link__ttl p {
    text-align: left;
    max-width: none;
    white-space: normal;
  }
}

/* --- Dòng sản phẩm: căn trái thay vì căn giữa, card nhỏ hơn (cố định
   bề rộng thay vì chia đều 1/3 container) để nhiều thẻ vừa 1 hàng hơn --- */
#lineup-30th .s-lineup-link__items,
#lineup-grand .s-lineup-link__items,
#lineup-upright .s-lineup-link__items,
#lineup-digital .s-lineup-link__items,
#lineup-accessories .s-lineup-link__items {
  justify-content: flex-start;
}
#lineup-30th .s-lineup-link__item,
#lineup-grand .s-lineup-link__item,
#lineup-upright .s-lineup-link__item,
#lineup-digital .s-lineup-link__item,
#lineup-accessories .s-lineup-link__item {
  flex: 0 1 24rem;
}
/* Luôn cố định 4 cột trên desktop (thay vì bọc dòng theo bề rộng còn
   trống — trước đây có lúc ra 3, có lúc ra 4 cột tuỳ màn hình) — dùng
   grid repeat(4,...) để LUÔN đúng 4 cột, thẻ thứ 5 trở đi tự động xuống
   hàng dưới. flex ở rule ngay trên vẫn giữ nguyên cho mobile (grid bỏ qua
   thuộc tính flex trên item con nên không xung đột); chỉ bật grid từ
   768px trở lên để không đụng tới carousel vuốt ngang trên mobile. */
@media screen and (min-width: 768px), print {
  #lineup-30th .s-lineup-link__items,
  #lineup-grand .s-lineup-link__items,
  #lineup-upright .s-lineup-link__items,
  #lineup-digital .s-lineup-link__items,
  #lineup-accessories .s-lineup-link__items {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
  }
  /* #lineup-30th chỉ có đúng 1 thẻ (triptych 3-trong-1) nhưng vốn được
     thiết kế rộng bằng cả 4 cột cộng lại — cho nó chiếm hết 4 cột grid
     thay vì chỉ lọt vào ô đầu tiên. */
  #lineup-30th .s-lineup-link__item {
    grid-column: 1 / -1;
  }
}
/* --- Mobile: quá nhiều thẻ khiến trang phải cuộn dọc rất dài — chuyển
   mỗi dòng đàn thành 1 hàng vuốt ngang (scroll-snap tự nhiên của trình
   duyệt, không cần thư viện ngoài), chỉ cao bằng 1 thẻ thay vì xếp chồng
   hết. Thẻ đang xem luôn canh GIỮA màn hình, ló cả hai bên trái/phải —
   vuốt tự do 2 chiều, không bị ép chỉ trượt 1 hướng. Đã thử chuyển 4
   hàng (Grand/Upright/Digital/Special Edition) sang Swiper.js cho mượt
   hơn nhưng gây lỗi khó dò (nội dung "biến mất" trên mobile) nên quay
   lại đúng bản gộp chung này cho cả 5 hàng như trước. --- */
@media screen and (max-width: 767px), print {
  #lineup-30th .s-lineup-link__items,
  #lineup-grand .s-lineup-link__items,
  #lineup-upright .s-lineup-link__items,
  #lineup-digital .s-lineup-link__items,
  #lineup-accessories .s-lineup-link__items {
    flex-wrap: nowrap;
    align-items: flex-start;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    margin-inline: -2rem;
    padding-inline: 11%;
    padding-bottom: 0.4rem;
    gap: 1.4rem;
  }
  #lineup-30th .s-lineup-link__items::-webkit-scrollbar,
  #lineup-grand .s-lineup-link__items::-webkit-scrollbar,
  #lineup-upright .s-lineup-link__items::-webkit-scrollbar,
  #lineup-digital .s-lineup-link__items::-webkit-scrollbar,
  #lineup-accessories .s-lineup-link__items::-webkit-scrollbar {
    display: none;
    height: 0;
  }
  #lineup-30th .s-lineup-link__item,
  #lineup-grand .s-lineup-link__item,
  #lineup-upright .s-lineup-link__item,
  #lineup-digital .s-lineup-link__item,
  #lineup-accessories .s-lineup-link__item {
    flex: 0 0 78%;
    scroll-snap-align: center;
  }
}

/* Chấm chỉ số vị trí trong hàng vuốt ngang — chỉ hiện trên mobile, tĩnh
   (không nhấp nháy), 1 chấm đặc vàng = đang xem, còn lại xám mờ. */
.s-lineup-link__dots {
  display: none;
}
@media screen and (max-width: 767px), print {
  #lineup-30th .s-lineup-link__dots,
  #lineup-grand .s-lineup-link__dots,
  #lineup-upright .s-lineup-link__dots,
  #lineup-digital .s-lineup-link__dots,
  #lineup-accessories .s-lineup-link__dots {
    display: flex;
    justify-content: center;
    gap: 0.6rem;
    margin-top: 1.6rem;
  }
  #lineup-30th .s-lineup-link__dot,
  #lineup-grand .s-lineup-link__dot,
  #lineup-upright .s-lineup-link__dot,
  #lineup-digital .s-lineup-link__dot,
  #lineup-accessories .s-lineup-link__dot {
    width: 0.6rem;
    height: 0.6rem;
    border-radius: 50%;
    background: #d8d8d8;
    transition: background 0.25s ease;
  }
  #lineup-30th .s-lineup-link__dot.is-active,
  #lineup-grand .s-lineup-link__dot.is-active,
  #lineup-upright .s-lineup-link__dot.is-active,
  #lineup-digital .s-lineup-link__dot.is-active,
  #lineup-accessories .s-lineup-link__dot.is-active {
    background: #ac801a;
  }
}
/* --- Card: ảnh tỷ lệ dọc 4:5 thay vì ngang 18rem cố định, như mockup --- */
#lineup-30th .s-lineup-link__img,
#lineup-grand .s-lineup-link__img,
#lineup-upright .s-lineup-link__img,
#lineup-digital .s-lineup-link__img,
#lineup-accessories .s-lineup-link__img {
  height: auto;
  aspect-ratio: 4 / 5;
}
/* Khung ảnh PHẢI cắt phần ảnh phóng to khi hover, để ảnh to ra mà không
   tràn ra ngoài viền/khung — nhắc lại overflow:hidden tường minh ở đây
   để chắc chắn, dù rule gốc .s-lineup-link__figure đã có sẵn. */
#lineup-30th .s-lineup-link__figure,
#lineup-grand .s-lineup-link__figure,
#lineup-upright .s-lineup-link__figure,
#lineup-digital .s-lineup-link__figure,
#lineup-accessories .s-lineup-link__figure {
  overflow: hidden;
}
@media (hover: hover) and (min-width: 768px) {
  #lineup-30th .s-lineup-link__item:hover .s-lineup-link__img,
  #lineup-grand .s-lineup-link__item:hover .s-lineup-link__img,
  #lineup-upright .s-lineup-link__item:hover .s-lineup-link__img,
  #lineup-digital .s-lineup-link__item:hover .s-lineup-link__img,
  #lineup-accessories .s-lineup-link__item:hover .s-lineup-link__img {
    transform: scale(1.08);
  }
}

/* --- Card: KHÔNG đóng khung ảnh/tiêu đề — bỏ viền, nền, đổ bóng, chữ
   thẳng hàng mép với ảnh thay vì thụt vào trong khung như trước --- */
#lineup-30th .s-lineup-link__item,
#lineup-grand .s-lineup-link__item,
#lineup-upright .s-lineup-link__item,
#lineup-digital .s-lineup-link__item,
#lineup-accessories .s-lineup-link__item {
  border: none;
  background: transparent;
  border-radius: 0;
}
@media (hover: hover) and (min-width: 768px) {
  #lineup-30th .s-lineup-link__item:hover,
  #lineup-grand .s-lineup-link__item:hover,
  #lineup-upright .s-lineup-link__item:hover,
  #lineup-digital .s-lineup-link__item:hover,
  #lineup-accessories .s-lineup-link__item:hover {
    box-shadow: none;
    transform: none;
  }
}
/* --- Lớp phủ gradient mờ dần ở ĐÁY ảnh — chỉ còn dùng cho badge xuất xứ
   (đã chuyển badge đẳng cấp ra khỏi ảnh, xem bên dưới). ::after vốn bị
   base rule tắt (display:none) nên phải bật lại tường minh ở đây. --- */
#lineup-30th .s-lineup-link__figure::after,
#lineup-grand .s-lineup-link__figure::after,
#lineup-upright .s-lineup-link__figure::after,
#lineup-digital .s-lineup-link__figure::after,
#lineup-accessories .s-lineup-link__figure::after {
  content: "";
  display: block;
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 4.5rem;
  background: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
  z-index: 1;
  pointer-events: none;
}

/* --- Nhãn đẳng cấp (Limited/Artists'/Starter, Hybrid/Digital Grand/
   Digital Upright) — sau nhiều lần thử đè lên ảnh (khối màu, viền, chữ
   nổi...) đều không ổn vì phải chống chọi với ảnh nền thay đổi liên tục.
   Giải pháp thanh lịch hơn: đưa hẳn RA KHỎI ảnh, làm 1 dòng "kicker" chữ
   nghiêng nhỏ ngay phía trên tên sản phẩm — giống cách catalogue cao cấp
   ghi chú hạng mục trước tên sản phẩm. Không còn phải lo tương phản với
   ảnh nữa vì giờ nằm trên nền trắng của thẻ. Phân biệt bằng màu thương
   hiệu: vàng (đẳng cấp cao nhất) → navy → xám. */
#lineup-30th .s-lineup-link__badge,
#lineup-grand .s-lineup-link__badge,
#lineup-upright .s-lineup-link__badge,
#lineup-digital .s-lineup-link__badge,
#lineup-accessories .s-lineup-link__badge {
  display: block;
  margin: 0.1rem 0 0;
  line-height: 1.2;
  font-family: inherit;
  font-style: italic;
  font-size: 0.95rem;
  font-weight: 500;
  letter-spacing: 0.02em;
}
#lineup-30th .s-lineup-link__badge.is-tier-1,
#lineup-grand .s-lineup-link__badge.is-tier-1,
#lineup-upright .s-lineup-link__badge.is-tier-1,
#lineup-digital .s-lineup-link__badge.is-tier-1 {
  color: #ac801a;
}
#lineup-30th .s-lineup-link__badge.is-tier-2,
#lineup-grand .s-lineup-link__badge.is-tier-2,
#lineup-upright .s-lineup-link__badge.is-tier-2,
#lineup-digital .s-lineup-link__badge.is-tier-2 {
  color: #001a4c;
}
#lineup-30th .s-lineup-link__badge.is-tier-3,
#lineup-grand .s-lineup-link__badge.is-tier-3,
#lineup-upright .s-lineup-link__badge.is-tier-3,
#lineup-digital .s-lineup-link__badge.is-tier-3 {
  color: #8a8a8a;
}

/* --- Badge phụ (xuất xứ/thủ công...) — VẪN đè lên ảnh (góc dưới-phải,
   trên lớp phủ gradient), khác với badge đẳng cấp đã chuyển ra ngoài. */
#lineup-30th .s-lineup-link__badge--origin,
#lineup-grand .s-lineup-link__badge--origin,
#lineup-upright .s-lineup-link__badge--origin,
#lineup-digital .s-lineup-link__badge--origin,
#lineup-accessories .s-lineup-link__badge--origin {
  position: absolute;
  z-index: 2;
  margin: 0;
  bottom: 1rem;
  right: 1.2rem;
  left: auto;
  font-style: normal;
  font-size: 0.85rem;
  font-weight: 400;
  letter-spacing: 0.03em;
  color: #fff;
  pointer-events: none;
}

#lineup-30th .s-lineup-link__caption,
#lineup-grand .s-lineup-link__caption,
#lineup-upright .s-lineup-link__caption,
#lineup-digital .s-lineup-link__caption,
#lineup-accessories .s-lineup-link__caption {
  color: #0a0a0a;
  padding: 1rem 0 0;
}
#lineup-30th .s-lineup-link__catch,
#lineup-grand .s-lineup-link__catch,
#lineup-upright .s-lineup-link__catch,
#lineup-digital .s-lineup-link__catch,
#lineup-accessories .s-lineup-link__catch {
  padding-inline: 0;
  margin-top: 0.5rem;
}
#lineup-30th .s-lineup-link__item::after,
#lineup-grand .s-lineup-link__item::after,
#lineup-upright .s-lineup-link__item::after,
#lineup-digital .s-lineup-link__item::after,
#lineup-accessories .s-lineup-link__item::after {
  content: "Xem sản phẩm →";
  margin: 0.8rem 0 0;
  border-bottom: none;
  padding-bottom: 0;
  transition: transform 0.25s ease, opacity 0.3s ease;
}
@media (hover: hover) and (min-width: 768px) {
  #lineup-30th .s-lineup-link__item:hover::after,
  #lineup-grand .s-lineup-link__item:hover::after,
  #lineup-upright .s-lineup-link__item:hover::after,
  #lineup-digital .s-lineup-link__item:hover::after,
  #lineup-accessories .s-lineup-link__item:hover::after {
    transform: translateX(3px);
  }
}

/* --- Mobile: html {font-size} chạy theo 2.5vw nên các cỡ chữ nhỏ (badge,
   mô tả, link "Xem sản phẩm") tính ra chưa tới 10px trên màn hình điện
   thoại — quá nhỏ để đọc thoải mái. Tăng riêng cho khu vực lineup này. --- */
@media screen and (max-width: 767px), print {
  #lineup-30th .s-lineup-link__badge,
  #lineup-grand .s-lineup-link__badge,
  #lineup-upright .s-lineup-link__badge,
  #lineup-digital .s-lineup-link__badge,
  #lineup-accessories .s-lineup-link__badge {
    font-size: 1.15rem;
  }
  #lineup-30th .s-lineup-link__catch,
  #lineup-grand .s-lineup-link__catch,
  #lineup-upright .s-lineup-link__catch,
  #lineup-digital .s-lineup-link__catch,
  #lineup-accessories .s-lineup-link__catch {
    font-size: 1.35rem;
  }
  #lineup-30th .s-lineup-link__item::after,
  #lineup-grand .s-lineup-link__item::after,
  #lineup-upright .s-lineup-link__item::after,
  #lineup-digital .s-lineup-link__item::after,
  #lineup-accessories .s-lineup-link__item::after {
    font-size: 1.15rem;
  }
}

/* --- 30th VTM Anniversary: sản phẩm đặc biệt (kỷ niệm 30 năm VTM), cho
   card này rộng hẳn ra thành 1 banner ngang thay vì bó hẹp 24rem như card
   thường. Banner này ghép chung ẢNH CỦA CẢ 3 MODEL (GL-30 VT, K-800 VT,
   ND-21 VT) thành 1 dải 3 cột — dùng đúng 3 ảnh bối cảnh có nền phòng
   thật (30th_Anniversary_Series_*), giống ảnh hero đầu trang
   30th-anniversary, KHÔNG dùng ảnh cutout nền trong suốt.
   Bề ngang = đúng bề ngang dải 4 thẻ Grand Collection bên dưới
   (4 * 24rem thẻ + 3 * 2rem gap = 102rem), để 2 hàng canh mép đều nhau
   thay vì banner chỉ rộng 76% container như trước.
   Đặt SAU các rule dùng chung ở trên để thắng cascade. --- */
#lineup-30th .s-lineup-link__item {
  flex: 0 1 calc(4 * 24rem + 3 * 2rem);
}
#lineup-30th .s-lineup-link__triptych {
  position: relative;
  display: flex;
  align-items: stretch;
  width: 100%;
  height: 100%;
  aspect-ratio: 21 / 9;
  /* Nền lộ ra đúng bằng khe hở chéo mà clip-path của 2 panel liền kề tạo
     ra bên dưới — nhìn như 1 đường vàng ánh kim CHẠY CHÉO qua ảnh, không
     cần thêm phần tử trang trí riêng. */
  background: linear-gradient(180deg, #e8cd7a, #ac801a);
}
#lineup-30th .s-lineup-link__triptych-panel {
  position: relative;
  flex: 1 1 0;
  min-width: 0;
  overflow: hidden;
}
/* Mỗi panel bị "vạt chéo" 1 góc nhỏ ở mép giáp panel kế bên (2% bề rộng
   panel — đã giảm từ 4% để đường kẻ vàng mỏng hơn) — 2 mép chéo liền kề
   LUÔN cách nhau đúng 1 khoảng không đổi dọc suốt chiều cao (đã tính
   toán để không đổi độ rộng khe hở), tạo thành 1 dải vàng chéo đều,
   không bị há to/hẹp bất thường ở đâu cả. */
#lineup-30th .s-lineup-link__triptych-panel--1 {
  clip-path: polygon(0 0, 100% 0, 98% 100%, 0 100%);
}
#lineup-30th .s-lineup-link__triptych-panel--2 {
  clip-path: polygon(2% 0, 100% 0, 98% 100%, 0 100%);
}
#lineup-30th .s-lineup-link__triptych-panel--3 {
  clip-path: polygon(2% 0, 100% 0, 100% 100%, 0 100%);
}
#lineup-30th .s-lineup-link__triptych-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Mặc định neo giữa — luôn giữ thân đàn nằm giữa khung panel, 3 rule
     bên dưới chỉnh lệch riêng cho từng ảnh vì mỗi ảnh gốc canh đàn hơi
     khác nhau. Lưu ý object-position-x CÀNG THẤP thì đàn (nếu vốn nằm
     giữa ảnh gốc) càng lộ dạt sang bên PHẢI của khung (và ngược lại),
     do object-position dịch chuyển "cửa sổ" cắt ảnh chứ không dịch
     chuyển bản thân đàn. */
  object-position: center;
  transition: transform 0.5s ease-in-out;
}
/* K-800 VT — dịch đàn sang phải 1 tí (lệch nhẹ so với tâm — xem ghi chú
   ở trên: object-position-x càng thấp thì đàn càng lệch phải). */
#lineup-30th .s-lineup-link__triptych-panel--1 .s-lineup-link__triptych-img {
  object-position: 44% center;
}
/* GL-30 VT — dịch đàn sang trái 1 tí, lên trên 1 tí */
#lineup-30th .s-lineup-link__triptych-panel--2 .s-lineup-link__triptych-img {
  object-position: 56% 56%;
}
/* ND-21 VT — dịch đàn sang phải 1 tí */
#lineup-30th .s-lineup-link__triptych-panel--3 .s-lineup-link__triptych-img {
  object-position: 38% center;
}
#lineup-30th .s-lineup-link__figure::after {
  /* Lớp phủ gradient tối vốn dành cho badge xuất xứ đè lên ảnh — banner
     3 cột này không dùng badge đó, tắt để không ám tối đáy ảnh vô cớ. */
  display: none;
}
@media (hover: hover) and (min-width: 768px) {
  #lineup-30th .s-lineup-link__item:hover .s-lineup-link__triptych-img {
    transform: scale(1.06);
  }
}
@media screen and (max-width: 767px), print {
  #lineup-30th .s-lineup-link__items {
    padding-inline: 2rem;
  }
  #lineup-30th .s-lineup-link__item {
    flex: 0 0 100%;
    scroll-snap-align: start;
  }
  #lineup-30th .s-lineup-link__triptych {
    aspect-ratio: 16 / 9;
  }
}

/* ========================================
   product/index.html — Banner carousel quảng cáo, đặt trên đầu trang
   (ngay dưới header cố định, trên cả thanh quicknav). Y hệt cơ chế +
   giao diện của .store-banner bên store/index.html (lướt ngang bằng
   scroll-snap gốc trình duyệt, nút mũi tên + chấm tròn xử lý ở JS cuối
   trang) — chỉ đổi tên class thành .product-banner để không dính tới
   store.css (trang này không nạp file đó). Muốn thêm banner mới cứ
   copy nguyên khối .product-banner__slide rồi dán thêm, nút mũi tên +
   chấm tròn sẽ tự hiện khi có từ 2 slide trở lên. ======================================== */
.product-banner {
  position: relative;
  max-width: 1320px;
  margin: 7rem auto 0;
  /* Có padding-bottom (khác 0 như trước) để dải chấm tròn bên dưới có
     khoảng thở, không bị dính sát/che bởi thanh .s-quicknav (kính mờ)
     ngay sau nó trong DOM. */
  padding: 1.6rem var(--vtm-gutter) 1.6rem;
}
.product-banner__viewport {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  border-radius: 12px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.product-banner__viewport::-webkit-scrollbar { display: none; }
.product-banner__slide {
  flex: 0 0 100%;
  scroll-snap-align: start;
}
.product-banner__slide a { display: block; position: relative; }

/* Caption overlay — dùng cho các slide "Best Choice/Seller/Price/Start":
   khác với slide ảnh quảng cáo thuần (không chữ) ban đầu, các slide này
   cần 1 dòng chữ để khách biết đang bấm vào đâu trước khi qua trang mới,
   nên phủ thêm lớp gradient tối + chữ ở góc trái dưới, đồng bộ màu vàng
   thương hiệu (#c9a227) và kiểu chữ hoa cách chữ giống .sk-hero__sub. */
.product-banner__scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, rgba(10, 10, 10, 0.75) 0%, rgba(10, 10, 10, 0.15) 55%, rgba(10, 10, 10, 0) 100%);
  pointer-events: none;
}
.product-banner__caption {
  position: absolute;
  left: 2.4rem;
  bottom: 2rem;
  color: #fff;
  pointer-events: none;
}
.product-banner__caption-eyebrow {
  display: block;
  font-size: 1.2rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #d5c78c;
  margin-bottom: 0.4rem;
}
.product-banner__caption-title {
  display: block;
  font-size: 2.4rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
/* Dòng khuyến mãi — chỉ dùng cho slide "30th VTM Anniversary" (banner khác
   không có block này nên không bị ảnh hưởng). Nằm ngay trong
   .product-banner__caption, xuống dòng dưới tiêu đề thay vì tách thành
   badge/vé riêng ở góc phải như trước — gọn hơn, không lo tràn/đụng chữ
   trên mobile vì đi chung khối caption bên trái.
   Tách riêng 2 dòng tiền — "Giảm đến 60 triệu" và "+ Gói bảo hành, bảo
   dưỡng đến 5 triệu" — mỗi dòng để số tiền rơi đúng CUỐI dòng của nó,
   khách lướt mắt bắt được ngay cả 2 con số thay vì phải đọc hết 1 câu
   dài mới thấy số thứ 2. Dòng "60 triệu" (mức giảm chính) đậm/to nhất —
   màu vàng thương hiệu; dòng "5 triệu" (quà tặng thêm, phụ hơn) dùng
   .product-banner__caption-promo--bonus để nhỏ/nhạt hơn 1 chút, đứng gần
   sát dòng trên (margin-top nhỏ) cho thấy rõ 2 dòng này là 1 nhóm với
   nhau. Dòng điều kiện "đặt hàng trước ngay bây giờ" (promo-cond) xuống
   cuối cùng, nhỏ và nhạt nhất vì chỉ là phụ, không cạnh tranh sự chú ý
   với 2 con số. */
/* Badge "Chỉ từ 99 triệu" — pill nền vàng thương hiệu, tách khỏi kiểu
   chữ-trên-nền-ảnh của các dòng promo bên dưới để nổi bật rõ nhất trong
   cả khối caption (mắt khách bắt ngay số tiền cụ thể trước khi đọc tới
   "Ưu đãi lên đến..."). pointer-events tự động theo cha (none) nên
   không chặn click vào link banner. */
.product-banner__caption-pricefrom {
  display: inline-block;
  margin-top: 0.5rem;
  padding: 0.3rem 0.9rem;
  font-size: 1.05rem;
  font-weight: 800;
  letter-spacing: 0.01em;
  text-transform: none;
  color: #2a1e05;
  background: linear-gradient(135deg, #f3dfa0, #cf9f3f);
  border-radius: 999px;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.28);
}
.product-banner__caption-promo {
  display: block;
  margin-top: 0.5rem;
  font-size: 1.15rem;
  font-weight: 700;
  letter-spacing: 0.01em;
  text-transform: none;
  color: #d5c78c;
}
.product-banner__caption-promo--bonus {
  margin-top: 0.15rem;
  font-size: 1rem;
  font-weight: 600;
  color: #fff;
}
.product-banner__caption-promo-cond {
  display: block;
  margin-top: 0.3rem;
  font-size: 0.85rem;
  font-weight: 400;
  color: rgba(255, 255, 255, 0.78);
}
.product-banner__img {
  display: block;
  width: 100%;
  height: 460px;
  object-fit: cover;
}
/* Không còn nút mũi tên (.product-banner__nav) — banner giờ tự động
   lướt + vuốt tay/bấm chấm tròn, xem product/index.html. */
.product-banner__dots {
  display: flex;
  justify-content: center;
  gap: 0.5rem;
  margin-top: 0.8rem;
}
.product-banner__dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  border: none;
  background: #ddd;
  cursor: pointer;
  padding: 0;
  transition: background 0.2s ease, transform 0.2s ease;
}
.product-banner__dot.is-active { background: #ac801a; transform: scale(1.3); }
@media screen and (max-width: 767px), print {
  /* margin-top chừa chỗ cho .custom-header (position:fixed, bị lấy ra
     khỏi luồng trang nên không tự "đẩy" nội dung xuống) — trước đoán tay
     1 số cố định (5rem rồi 4.4rem) vẫn dư/thiếu tuỳ máy vì chiều cao
     header thật đổi tuỳ nội dung (logo + link "Liên hệ" chèn động qua
     custom-header.js). Dùng thẳng --vtm-header-h — biến CSS JS ĐÃ ĐO
     THẬT chiều cao header (xem syncHeaderOffset() cuối file, biến này
     cũng đang dùng cho .s-quicknav sticky ngay bên dưới banner) — khớp
     chính xác, không còn đoán mò. Fallback 4.4rem chỉ dùng đúng 1 nhịp
     trước khi JS kịp đo xong lúc mới tải trang. */
  .product-banner { margin-top: var(--vtm-header-h, 4.4rem); padding: 1.2rem 1.5rem 1.2rem; }
  /* Cao lên từ 180px — banner cao hơn giúp lấp đầy/cân đối phần trên
     trang tốt hơn trên mobile. */
  .product-banner__img { height: 260px; }
  .product-banner__caption { left: 1.4rem; right: 1.4rem; bottom: 1.2rem; }
  .product-banner__caption-eyebrow { font-size: 1rem; margin-bottom: 0.2rem; }
  .product-banner__caption-title { font-size: 1.7rem; }
  /* Dòng khuyến mãi đi chung khối caption bên trái nên không cần neo/canh
     riêng như badge cũ — chỉ giảm cỡ chữ cho vừa màn hẹp. */
  .product-banner__caption-pricefrom { font-size: 0.85rem; padding: 0.22rem 0.7rem; margin-top: 0.35rem; }
  .product-banner__caption-promo { font-size: 0.95rem; margin-top: 0.35rem; }
  .product-banner__caption-promo--bonus { font-size: 0.82rem; margin-top: 0.1rem; }
  .product-banner__caption-promo-cond { font-size: 0.72rem; margin-top: 0.25rem; }
}

/* --- Bảng phân khúc: viền liền dạng "museum label" thay vì 3 ô rời ---
   Chỉ áp dụng cho desktop — trên mobile dùng list gọn với đường kẻ mảnh
   riêng (xem .s-taxonomy__item trong @media max-width: 767px bên trên).
   TRƯỚC ĐÂY 2 rule này KHÔNG bọc trong @media nên luôn thắng (đứng sau
   trong file, cùng độ đặc hiệu) — kể cả trên mobile, đè mất phần bỏ viền
   ngoài đã chỉnh riêng cho mobile, khiến chữ dính sát viền khung xám. */
@media screen and (min-width: 768px) {
  .s-taxonomy__grid {
    gap: 1px;
    background: #e5e5e5;
    border: 1px solid #e5e5e5;
  }
  .s-taxonomy__item {
    border: none;
    border-radius: 0;
    background: #fff;
  }
}

/* ========================================
   Tóm tắt Collection (index.html)
   ======================================== */
.s-collection-summary {
  margin-top: 3rem;
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 2rem;
}

.s-collection-summary__card {
  display: block;
  background: #fff;
  border: 1px solid #e5e5e5;
  overflow: hidden;
  /* opacity thêm vào đây — cùng lý do như .s-lineup-link__item bên dưới:
     thiếu opacity trong transition khiến thẻ hiện "bụp" tức thời thay vì
     mờ dần khi cuộn tới (transition là shorthand, khai báo sau ở cùng độ
     ưu tiên sẽ THAY HẲN chứ không cộng dồn với transition gốc của
     .js-inveiw-intro-items > *). */
  transition: opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s ease, transform 0.3s ease;
}

/* min-width:768px thêm vào cùng (hover:hover) — (hover:hover) chỉ kiểm tra
   thiết bị CÓ chuột hay không, một số trường hợp giả lập mobile trên máy
   tính (DevTools mobile view) vẫn giữ con trỏ chuột nên vẫn khớp
   (hover:hover); chặn thêm theo bề rộng màn hình để chắc chắn khung nhìn
   mobile không bao giờ có hiệu ứng hover, đúng yêu cầu "mobile không có
   chuột thì không cần hover". */
@media (hover: hover) and (min-width: 768px) {
  .s-collection-summary__card:hover {
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    transform: translateY(-4px);
  }
  .s-collection-summary__card:hover .s-collection-summary__img {
    transform: scale(1.05);
  }
}

.s-collection-summary__figure {
  position: relative;
  height: 20rem;
  overflow: hidden;
}
/* Xem giải thích đầy đủ ở bản mobile (@media max-width:767px bên dưới) —
   giữ chiều cao khung ảnh này cố định theo px thật, không ăn theo
   --text-scale của nút "Aa" phóng chữ. */
html[data-text-scale-active] .s-collection-summary__figure {
  height: calc(20rem / var(--text-scale, 1));
}

.s-collection-summary__img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
  object-fit: cover;
  transition: transform 0.5s ease-in-out;
}

.s-collection-summary__body {
  padding: 1.8rem 2rem 2rem;
}

.s-collection-summary__name {
  font-size: 1.8rem;
  font-weight: 500;
  line-height: 1.4;
  color: #222222;
}

.s-collection-summary__desc {
  margin-top: 0.8rem;
  font-size: 1.2rem;
  line-height: 1.7;
  color: #555;
}

.s-collection-summary__link {
  display: inline-block;
  margin-top: 1.2rem;
  font-size: 1.2rem;
  color: #ac801a;
  border-bottom: 1px solid #ac801a;
  padding-bottom: 0.2rem;
}

/* Responsive: mobile */
@media screen and (max-width: 767px), print {
  .s-collection-summary {
    grid-template-columns: 1fr;
    gap: 1.6rem;
    margin-top: 2.5rem;
  }
  .s-collection-summary__figure {
    height: 16rem;
  }
  html[data-text-scale-active] .s-collection-summary__figure {
    height: calc(16rem / var(--text-scale, 1));
  }
  .s-collection-summary__body {
    padding: 1.4rem 1.6rem 1.6rem;
  }
  .s-collection-summary__name {
    font-size: 1.6rem;
  }
  .s-collection-summary__desc {
    font-size: 1.1rem;
  }
}

/* ========================================
   Footer (index.html)
   ======================================== */
.vt-footer {
  background: #0a0a0a;
  color: #fff;
  padding: 3rem var(--vtm-gutter) 1rem;
  margin-top: auto;
  position: relative;
  z-index: 2;
}

.vt-footer__inner {
  max-width: 1200px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1.3fr 1fr 1fr 1fr;
  gap: 3rem;
  padding-bottom: 3rem;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

/* Brand column */
.vt-footer__col--brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  text-align: left;
  gap: 1.5rem;
}

/* Sản phẩm + Liên hệ + Network — căn trái đồng bộ với cột Brand (tiêu đề + danh sách link) */
.vt-footer__col--products,
.vt-footer__col--contact,
.vt-footer__col--nav {
  text-align: left;
}

.vt-footer__logo {
  display: inline-block;
}

.vt-footer__logo img {
  display: block;
  max-height: 40px;
  width: auto;
}

/* Logo + social nằm chung 1 khối căn giữa (thay vì căn trái theo cột) —
   logo là 1 wordmark rất RỘNG (tỉ lệ ~6:1) trong khi hàng icon social hẹp
   hơn nhiều, nên căn trái khiến 2 thứ lệch hẳn nhau. align-items:center ở
   đây + align-self:stretch để khối này chiếm đủ bề ngang cột thì mới có
   "chỗ" để căn giữa; phần <ul> danh sách link bên dưới KHÔNG nằm trong
   khối này nên vẫn giữ căn trái như cũ. */
.vt-footer__brand-head {
  display: flex;
  flex-direction: column;
  align-items: center;
  align-self: stretch;
  gap: 1rem;
}

/* Social icons — Facebook/Instagram/YouTube/TikTok, ngay dưới logo trong
   cột Brand để hiện diện trên mọi trang (footer lặp lại ở mọi trang). */
.vt-footer__social {
  display: flex;
  align-items: center;
  gap: 0.8rem;
}

.vt-footer__social-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.08);
  border: 1px solid rgba(255, 255, 255, 0.15);
  color: rgba(255, 255, 255, 0.7);
  transition: background 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

.vt-footer__social-link svg {
  width: 16px;
  height: 16px;
}

@media (hover: hover) and (min-width: 768px) {
  .vt-footer__social-link:hover {
    background: #c9a227;
    border-color: #c9a227;
    color: #0a0a0a;
  }
}

/* Column titles — viết hoa, có thanh vàng đứng phía trước làm điểm nhấn.
   Dùng ::before thay vì border-left: border-left kéo dài hết chiều cao
   line-box (thường cao hơn hẳn chữ hoa thực tế) nên trông "dài" quá mức —
   ::before cho phép định chiều cao riêng, ngắn gọn ôm sát chữ hơn. */
.vt-footer__col-ttl {
  position: relative;
  font-size: 1.4rem;
  font-weight: 600;
  color: #fff;
  margin: 0 0 1.5rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  padding-left: 0.8rem;
}
.vt-footer__col-ttl::before {
  content: "";
  position: absolute;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  height: 1em;
  width: 3px;
  background: #c9a227;
}

/* Lists */
.vt-footer__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1rem;
}

.vt-footer__list li {
  margin: 0;
}

/* Links */
.vt-footer__link {
  font-size: 1.2rem;
  color: rgba(255, 255, 255, 0.7);
  text-decoration: none;
  transition: color 0.3s ease;
  line-height: 1.6;
}

@media (hover: hover) and (min-width: 768px) {
  .vt-footer__link:hover {
  color: #ac801a;
}
}

/* Hotline trong cột "Liên hệ" của footer: ẩn hẳn số điện thoại, chỉ hiện
   badge "Gọi ngay" — bấm vào mới gọi (tel:), không lộ số ra ngoài text. */
.vt-footer__link--hotline {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.3rem 0.9rem;
  border-radius: 999px;
  background: rgba(201, 162, 39, 0.15);
  border: 1px solid rgba(201, 162, 39, 0.4);
  color: #d8b440;
  font-weight: 600;
}
.vt-footer__link--hotline svg {
  width: 12px;
  height: 12px;
  flex-shrink: 0;
}
@media (hover: hover) and (min-width: 768px) {
  .vt-footer__link--hotline:hover {
  background: #c9a227;
  color: #0a0a0a;
}
}

/* Bottom bar */
.vt-footer__bottom {
  max-width: 1200px;
  margin: 2rem auto 0;
  text-align: center;
}

.vt-footer__copyright {
  font-size: 1.1rem;
  color: rgba(255, 255, 255, 0.5);
  margin: 0;
  letter-spacing: 0.05em;
}

/* Responsive: tablet */
@media screen and (max-width: 1024px) {
  .vt-footer__inner {
    grid-template-columns: 1fr 1fr;
    gap: 2.5rem;
  }
}

/* Responsive: mobile */
@media screen and (max-width: 767px) {
  .vt-footer {
    padding: 3.5rem 1.5rem 1.5rem;
  }

  .vt-footer__inner {
    gap: 2rem;
    padding-bottom: 2rem;
  }

  .vt-footer__col--brand {
    gap: 1.2rem;
  }

  .vt-footer__logo img {
    max-height: 32px;
  }

  .vt-footer__col-ttl {
    font-size: 1.3rem;
    margin-bottom: 1rem;
  }

  .vt-footer__list {
    gap: 0.8rem;
  }

  .vt-footer__link {
    font-size: 1.1rem;
  }

  .vt-footer__copyright {
    font-size: 1rem;
  }
}

/* ============================================================
   Mobile compact optimizations — makes sections gọn gàng hơn
   on phones. Overrides come last so they win at equal specificity.
   ============================================================ */
@media screen and (max-width: 767px) {
  /* --- s-mv: compact hero --- */
  .s-mv__logo {
    width: 36rem;
    margin-top: 1rem;
  }

  /* --- s-about: tighten spacing --- */
  .s-about {
    padding-block: 3rem 2rem;
  }
  .s-about__inner {
    gap: 2rem;
  }
  .s-about__gallery-item {
    height: 11rem;
  }
  .s-about__stats {
    gap: 1rem;
    max-width: 40rem;
  }
  .s-about__stat {
    padding: 1.6rem 0.8rem;
  }
  .s-about__stat-num {
    font-size: 2.9rem;
  }
  .s-about__stat-suffix {
    font-size: 1.5rem;
  }
  .s-about__stat-label {
    font-size: 1.05rem;
    min-height: 3.2rem;
  }

  /* --- s-echo: compact pillar cards --- */
  .s-echo {
    padding-top: 4rem;
    padding-bottom: 2rem;
  }
  .s-echo__ttl {
    font-size: 1.6rem;
  }
  .s-echo__txt {
    font-size: 1.2rem;
    margin-top: 1rem;
    line-height: 1.6;
  }
  .s-echo__content {
    padding-inline: 1.5rem;
    margin-top: 2rem;
    gap: 2.2rem;
  }
  .s-echo__overlay {
    overflow: hidden;
    border-radius: 0.4rem;
  }
  .s-echo__overlay img {
    height: 12rem;
    object-fit: cover;
    width: 100%;
  }
  .s-echo__overlay-text {
    font-size: 1.8rem;
  }
  .s-echo__content-item-ttl {
    font-size: 1.5rem;
    margin-top: 1.5rem;
  }
  .s-echo__content-item-ttl .svg {
    width: 5rem;
  }
  .s-echo__content-item-txt {
    font-size: 1.2rem;
    line-height: 1.6;
  }

  /* --- s-voice: compact artist slides --- */
  .s-voice {
    padding-top: 4rem;
    padding-bottom: 5rem;
  }
  .s-voice__ttl {
    font-size: 1.6rem;
  }
  .s-voice__content-item {
    padding-inline: 1rem;
  }
  .s-voice__content-item-achieve {
    font-size: 1.1rem;
    line-height: 1.5;
  }
  /* --- s-lineup-link: compact collection cards --- */
  .s-lineup-link {
    margin-top: 3rem;
    padding-bottom: 3rem;
  }
  .s-lineup-link:last-of-type {
    padding-bottom: 3rem;
  }
  .s-lineup-link__ttl h2 {
    font-size: 1.6rem;
  }
  .s-lineup-link__ttl p {
    font-size: 1.2rem;
  }
  .s-collection-summary {
    margin-top: 2rem;
    gap: 1rem;
  }
  .s-collection-summary__figure {
    height: 12rem;
  }
  /* Chiều cao khung ảnh này KHÔNG phải cỡ chữ — nhưng vì tính bằng rem nên
     vẫn vô tình bị nhân theo --text-scale khi khách bấm nút "Aa" phóng chữ
     (xem custom-header.js). Khung cao lên trong khi ảnh vẫn width:100% cố
     định theo màn hình khiến object-fit:cover phải zoom ảnh vào nhiều hơn
     để lấp đầy khung — nhất là card 30th Anniversary (object-position:
     center 72%, xem rule bên dưới) bị crop lệch trông như ảnh "nhảy" chỗ.
     Chia ngược lại cho --text-scale để chiều cao khung LUÔN giữ nguyên px
     thật bất kể phóng chữ tới đâu — chỉ chữ to ra, ảnh không bị crop lại. */
  html[data-text-scale-active] .s-collection-summary__figure {
    height: calc(12rem / var(--text-scale, 1));
  }
  .s-collection-summary__body {
    padding: 1rem 1.2rem 1.2rem;
  }
  .s-collection-summary__name {
    font-size: 1.3rem;
  }
  .s-collection-summary__desc {
    font-size: 1rem;
    line-height: 1.5;
  }

  /* --- Footer: tighten --- */
  .vt-footer {
    padding: 2.5rem 1rem 1rem;
  }
  .vt-footer__inner {
    gap: 1.5rem;
    padding-bottom: 1.5rem;
  }

  /* --- Footer: compact mobile layout — lưới 2x2 (Brand + Sản phẩm hàng
     trên, Liên hệ + Network hàng dưới), căn trái đồng bộ với desktop — cột
     hẹp nên 1 hàng ngang đủ 4 cột không đủ chỗ, và chữ center dễ vỡ dòng
     lệch trông rối hơn căn trái. */
  /* fit-content(46%): mỗi cột chỉ rộng bằng đúng nội dung của nó (nhưng
     không vượt quá 46% để chữ dài như "Đội ngũ kỹ thuật viên" tự xuống
     dòng thay vì tràn ngang màn hình), rồi justify-content: center canh
     giữa cả khối 2x2 so với footer. Chữ TRONG từng cột vẫn căn trái (không
     đổi) nhờ align-items: flex-start ở dưới — chỉ VỊ TRÍ của khối 2 cột
     được canh giữa theo yêu cầu, không phải căn giữa từng dòng chữ. */
  .vt-footer__inner {
    display: grid;
    grid-template-areas:
      "brand products"
      "contact nav";
    grid-template-columns: fit-content(46%) fit-content(46%);
    justify-content: center;
    gap: 1.4rem 2.5rem;
    padding-bottom: 1.6rem;
  }
  .vt-footer__col--brand { grid-area: brand; }
  .vt-footer__col--products { grid-area: products; }
  .vt-footer__col--contact { grid-area: contact; }
  .vt-footer__col--nav { grid-area: nav; }
  .vt-footer__col--brand,
  .vt-footer__col--products,
  .vt-footer__col--contact,
  .vt-footer__col--nav {
    text-align: left;
  }
  .vt-footer__col--brand {
    align-items: flex-start;
    gap: 1rem;
  }
  .vt-footer__list {
    align-items: flex-start;
  }
  .vt-footer__logo {
    align-self: flex-start;
  }
  .vt-footer__logo img {
    max-height: 28px;
    margin-left: 0;
  }
  /* Hàng icon social kế thừa align-items:center từ .vt-footer__brand-head
     (căn giữa cho desktop) — trên mobile logo đã ghim trái ở trên, nên hàng
     icon cũng phải ghim trái theo để không bị lệch tâm so với logo. */
  .vt-footer__social {
    align-self: flex-start;
    gap: 0.5rem;
  }
  /* Cột Brand trên mobile bị giới hạn bề ngang (fit-content(46%) ở lưới 2x2
     bên dưới) — 5 icon cỡ desktop (36px + gap 0.8rem) rộng hơn cả giới hạn
     đó, khiến hàng icon không co lại được và làm lệch/tràn khỏi cột. Thu
     nhỏ icon + khoảng cách trên mobile để hàng icon vừa trong bề ngang cột. */
  .vt-footer__social-link {
    width: 28px;
    height: 28px;
  }
  .vt-footer__social-link svg {
    width: 13px;
    height: 13px;
  }

  /* Column titles: chỉ thu nhỏ font — chữ hoa + thanh vàng bên trái đã kế
     thừa từ rule gốc .vt-footer__col-ttl phía trên, không cần khai báo lại. */
  .vt-footer__col-ttl {
    font-size: 1.05rem;
    margin-bottom: 0.7rem;
    line-height: 1.2;
  }

  /* Hàng trên của lưới 2x2 (brand + products) không có tiêu đề chung để so
     hàng: cột "Brand" bắt đầu bằng logo (28px + gap 1rem phía dưới nó),
     trong khi cột "Sản phẩm" bắt đầu bằng tiêu đề (~1.26rem + margin-bottom
     0.7rem) — thấp hơn hẳn logo, nên 4 dòng link của 2 cột bị lệch hàng.
     Đẩy tiêu đề "Sản phẩm" xuống thêm ~1.8rem để dòng link đầu tiên của cả
     2 cột bắt đầu ngang nhau. */
  .vt-footer__col--products .vt-footer__col-ttl {
    margin-top: 2.1rem;
  }

  /* Lists: tighter — lưới 2x2 nên mỗi cột có nửa bề ngang màn hình, đỡ chật
     hơn kiểu 1-hàng-4-cột trước đó. */
  .vt-footer__list {
    gap: 0.55rem;
  }
  .vt-footer__link {
    font-size: 0.95rem;
    line-height: 1.35;
  }

  /* Bottom bar */
  .vt-footer__bottom {
    margin-top: 1.2rem;
  }
  .vt-footer__copyright {
    font-size: 0.95rem;
  }
}

/* ============================================================
   Echo section (#echo) — desktop: show all 3 cards at once
   Mobile keeps tab switching; desktop hides tabs and displays
   all 3 content cards side-by-side in a 3-column grid.
   ============================================================ */
@media (min-width: 768px) {
  #echo .s-lineup-link__tabs {
    display: none;
  }
  #echo .s-lineup-link__inner {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 2rem;
  }
  #echo .s-lineup-link__ttlWrap {
    grid-column: 1 / -1;
  }
  #echo .s-lineup-link__items[data-panel-group="echo"] {
    display: block !important;
    margin-top: 0;
  }
  #echo .s-lineup-link__item {
    height: 100%;
  }
}

/* ============================================================
   Piano Collection (#lineup) — desktop: show all 4 cards at once
   in a 2x2 grid. Mobile keeps tab switching with 2x2 tab layout.
   ============================================================ */
@media (min-width: 768px) {
  #lineup .s-lineup-link__tabs {
    display: none;
  }
  #lineup .s-lineup-link__inner {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 2rem;
  }
  #lineup .s-lineup-link__ttlWrap {
    grid-column: 1 / -1;
  }
  #lineup .s-collection-summary[data-panel-group="collection"] {
    display: block !important;
    margin-top: 0;
  }
  /* 30th VTM Anniversary — nằm ở hàng riêng, span cả 2 cột, bên dưới
     Digital Grand + Special Edition (2 ô cuối của lưới 2x2 phía trên). */
  #lineup .s-collection-summary--anniv {
    grid-column: 1 / -1;
    margin-top: 0;
  }
}
/* Card 30th VTM Anniversary chỉ có 1 thẻ duy nhất bên trong — không dùng
   lưới 2 cột nội bộ mặc định của .s-collection-summary (sẽ để trống 1 cột)
   như 4 card phân khúc còn lại; ép về block ở MỌI kích thước màn hình
   (không chỉ desktop) vì nó không có data-panel-group để hưởng override ở
   trên và cũng không cần format 1-cột-grid riêng cho mobile. */
#lineup .s-collection-summary--anniv {
  display: block;
}
/* Ảnh 30th_Anniversary_Series_Grand.png là ảnh toàn cảnh phòng khách (đàn
   grand nằm ở nửa dưới khung hình, còn nửa trên là cửa kính/trần nhà) —
   object-position mặc định (center) crop ngay giữa ảnh nên bị mất chân đàn
   phía dưới. Đẩy điểm neo xuống ~72% để giữ trọn thân + chân đàn trong
   khung, chấp nhận crop bớt trần/cửa kính phía trên (không quan trọng). */
#lineup .s-collection-summary--anniv .s-collection-summary__img {
  object-position: center 72%;
}
@media (min-width: 768px) {
  /* Desktop: card này rộng ngang (chiếm cả hàng) nên khung hình bị dẹt,
     che mất phần lớn cây đàn — tăng chiều cao khung ảnh riêng cho card này
     (không đụng tới 4 card phân khúc còn lại) để thấy rõ cây đàn hơn. */
  #lineup .s-collection-summary--anniv .s-collection-summary__figure {
    height: 32rem;
  }
  html[data-text-scale-active] #lineup .s-collection-summary--anniv .s-collection-summary__figure {
    height: calc(32rem / var(--text-scale, 1));
  }
}

/* Black tab styling for collection tabs (mobile) */
.s-lineup-link__tabs[data-tab-group="collection"] .s-lineup-link__tab {
  border-color: #0a0a0a;
  background: #fff;
  color: #0a0a0a;
}
.s-lineup-link__tabs[data-tab-group="collection"] .s-lineup-link__tab.is-active {
  background: #0a0a0a;
  color: #fff;
}
@media (hover: hover) and (min-width: 768px) {
  .s-lineup-link__tabs[data-tab-group="collection"] .s-lineup-link__tab:hover {
    opacity: 0.7;
  }
}

/* Mobile: collection tabs arranged in 2x2 grid, equal size */
@media screen and (max-width: 767px), print {
  .s-lineup-link__tabs[data-tab-group="collection"] {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 0.6rem;
    margin-top: 2.5rem;
  }
  .s-lineup-link__tabs[data-tab-group="collection"] .s-lineup-link__tab {
    flex: none;
    width: 100%;
    padding: 0.8rem 0.4rem;
    font-size: 1rem;
    text-align: center;
  }
}

/* ============================================================
   Product lineup cards — match collection-summary card style
   (image on top + body below: name, description, "Xem sản phẩm" link)
   Keeps existing i18n markup; only visuals are restyled.
   ============================================================ */
.s-lineup-link__item {
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid #e5e5e5;
  border-radius: 0.8rem;
  overflow: hidden;
  /* opacity thêm vào đây (cùng specificity với .js-inveiw-intro-items > *
     nên định nghĩa transition sau sẽ THAY HẲN, không cộng dồn) — thiếu
     opacity làm thẻ hiện "bụp" tức thời thay vì mờ dần khi cuộn tới. */
  transition: opacity 0.8s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.3s ease, transform 0.3s ease;
}
@media (hover: hover) and (min-width: 768px) {
  .s-lineup-link__item:hover {
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
    transform: translateY(-4px);
  }
  .s-lineup-link__item:hover .s-lineup-link__img {
    transform: scale(1.05);
  }
  .s-lineup-link__item:hover::after {
    opacity: 0.7;
  }
}
.s-lineup-link__figure {
  position: relative;
  display: block;
  height: auto;
  margin: 0;
  overflow: hidden;
}
.s-lineup-link__figure::after {
  display: none;
}
.s-lineup-link__img {
  position: static;
  display: block;
  width: 100%;
  height: 18rem;
  object-fit: cover;
}
html[data-text-scale-active] .s-lineup-link__img {
  height: calc(18rem / var(--text-scale, 1));
}
.s-lineup-link__caption {
  position: static;
  transform: none;
  height: auto !important;
  padding: 1.6rem 1.8rem 0;
  color: #222222;
  font-size: 1.7rem;
  font-weight: 500;
  line-height: 1.4;
  letter-spacing: 0.05em;
  text-shadow: none;
  text-align: left;
}
.s-lineup-link__catch {
  margin-top: 0.8rem;
  padding-inline: 1.8rem;
  text-align: left;
  font-size: 1.2rem;
  font-weight: 400;
  line-height: 1.7;
  color: #555;
}
.s-lineup-link__item::after {
  content: "Xem thêm →";
  display: inline-block;
  margin: 1rem 1.8rem 1.8rem;
  padding-bottom: 0.2rem;
  font-size: 1.2rem;
  line-height: 1.4;
  color: #ac801a;
  border-bottom: 1px solid #ac801a;
  width: fit-content;
  transition: opacity 0.3s;
}
@media screen and (max-width: 767px), print {
  .s-lineup-link__item {
    border-radius: 0.6rem;
  }
  .s-lineup-link__img {
    height: 12rem;
  }
  html[data-text-scale-active] .s-lineup-link__img {
    height: calc(12rem / var(--text-scale, 1));
  }
  .s-lineup-link__caption {
    padding: 1.2rem 1.2rem 0;
    font-size: 1.4rem;
  }
  .s-lineup-link__catch {
    position: static;
    z-index: auto;
    color: #555;
    text-align: left;
    padding-left: 1.2rem;
    padding-right: 1.2rem;
    margin-top: 0.6rem;
    bottom: auto;
    font-size: 1rem;
    line-height: 1.6;
  }
  .s-lineup-link__catch--2line-mini-sp,
  .s-lineup-link__catch--3line-sp {
    bottom: auto;
  }
  .s-lineup-link__item::after {
    margin: 0.8rem 1.2rem 1.2rem;
    font-size: 1.05rem;
  }
}

/* ============================================================
   CHUẨN HOÁ CỠ CHỮ TOÀN SITE theo yêu cầu chủ site (2026-09):
   heading 2 = 20px, nội dung (đoạn văn) = 15px.
   (Đã nâng từ 14px/12px ban đầu — chủ site phản hồi so với card bên
   dưới #echo, chữ h2/p nhìn nhỏ hơn hẳn, không đồng bộ. figcaption/h4
   của card đó KHÔNG bị luật này chi phối nên không nhỏ theo — nó vốn
   không phải h2/p.)
   heading 3 GỘP CHUNG mức với h2 (20px) — site dùng h3 cho nhiều tiêu đề
   section y hệt vai trò h2 (VD "Nghệ sĩ / Pianist" ở #voices, trang chủ),
   không phải luôn là tiêu đề phụ nhỏ hơn h2 — chủ site báo h3 "vẫn to"
   sau khi chỉnh h2/p, nên thêm h3 vào cùng luật thay vì để riêng.
   heading 1 KHÔNG áp — kiểm tra thực tế cho thấy MỌI <h1> trên site đều
   là tiêu đề hero/đầu trang (category-hero__title, policy-hero__title,
   pdp-hero__title, sk-hero__title, blog-post__title, store-intro__title,
   v.v. — không có <h1> nào là tiêu đề phụ nhỏ), và chủ site xác nhận chữ
   hero phải giữ to như cũ — nên h1 giữ nguyên cỡ chữ gốc của từng trang.
   Áp bằng thẻ ngữ nghĩa (h2/p) thay vì sửa từng class tiêu đề riêng
   (hàng trăm class khác nhau rải khắp style.css + <style> riêng của từng
   trang) — !important để thắng chắc chắn mọi rule cụ thể hơn đã định
   nghĩa trước đó. Cố định bằng px (không theo rem/vw) để giữ đúng 2 mức
   này trên MỌI kích thước màn hình, kể cả mobile.
   Gom hết vào khối RIÊNG này ở cuối file để dễ tìm lại/chỉnh sửa/gỡ bỏ
   toàn bộ nếu chủ site đổi ý sau này — không rải rác sửa lẻ tẻ khắp file. */
h2, h3 { font-size: 20px !important; }
p { font-size: 15px !important; }
