/* So On's Cookies — stylesheet duy nhất của theme.
   Thứ tự: @font-face (tự host) -> layout primitives (@layer, luôn thua CSS thường) -> tokens :root -> component.
   Font được preload trong header.php nên @font-face nằm đây không làm chậm. */

/* Be Vietnam Pro 400 vietnamese */
@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/be-vietnam-pro-400-vietnamese.woff2') format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}
/* Be Vietnam Pro 400 latin */
@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/be-vietnam-pro-400-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
/* Be Vietnam Pro 500 vietnamese */
@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/be-vietnam-pro-500-vietnamese.woff2') format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}
/* Be Vietnam Pro 500 latin */
@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/be-vietnam-pro-500-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
/* Be Vietnam Pro 600 vietnamese */
@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/be-vietnam-pro-600-vietnamese.woff2') format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}
/* Be Vietnam Pro 600 latin */
@font-face{font-family:'Be Vietnam Pro';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/be-vietnam-pro-600-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
/* Dancing Script 500 700 vietnamese */
@font-face{font-family:'Dancing Script';font-style:normal;font-weight:500 700;font-display:swap;src:url('../fonts/dancing-script-500-700-vietnamese.woff2') format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}
/* Dancing Script 500 700 latin */
@font-face{font-family:'Dancing Script';font-style:normal;font-weight:500 700;font-display:swap;src:url('../fonts/dancing-script-500-700-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
/* Fraunces SOFT 100, opsz 36, wght 500-600 (đã cắt bằng fontTools) vietnamese */
@font-face{font-family:'Fraunces';font-style:normal;font-weight:500 600;font-display:swap;src:url('../fonts/fraunces-soft-500-600-vietnamese.woff2') format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}
/* Fraunces SOFT 100, opsz 36, wght 500-600 (đã cắt bằng fontTools) latin */
@font-face{font-family:'Fraunces';font-style:normal;font-weight:500 600;font-display:swap;src:url('../fonts/fraunces-soft-500-600-latin.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}

/* OD-LAYOUT-PRIMITIVES v1 — structure only: display, flex/grid, overflow, wrapping, ratio.
   Put this @layer first; product CSS outside the layer always wins. */
@layer od-layout {
  :where(.od-stack,.od-row,.od-row-top,.od-cluster,.od-grid,.od-field,.od-stat,.od-cell,.od-tile) > :where(*) { min-width: 0; }

  /* containers */
  .od-stack   { display: flex; flex-direction: column; gap: var(--od-gap, 8px); }
  .od-row     { display: flex; align-items: center; gap: var(--od-gap, 8px); }
  .od-row-top { display: flex; align-items: flex-start; gap: var(--od-gap, 8px); }
  .od-cluster { display: flex; flex-wrap: wrap; align-items: center; gap: var(--od-gap, 8px); }
  .od-fill    { flex: 1 1 0; min-width: 0; }
  .od-fixed   { flex: none; }
  .od-grid    { display: grid; gap: var(--od-gap, 12px); grid-template-columns: repeat(var(--od-cols, 3), minmax(0, 1fr)); }

  /* stacked information: each piece is its own line — never sibling inline spans */
  .od-stat, .od-field, .od-cell { display: grid; gap: var(--od-gap, 2px); }
  :where(.od-stat,.od-field,.od-cell) > :where(*) { display: block; }
  .od-tile { display: grid; grid-template-rows: auto 1fr; }
  :where(.od-tile) > :where(*) { display: block; }

  /* media keeps its intrinsic ratio by default; never a distorted or cropped
     cover by accident. height:auto lets the ratio win over an <img height="…">
     attribute. Cropping to a uniform box is an explicit opt-in: set --od-ratio
     AND add .od-media-cover together (per the core rule, only where a crop is
     deliberate — tile thumbs, decorative fills — never on full-frame content). */
  .od-media { display: block; width: 100%; height: auto; aspect-ratio: var(--od-ratio, auto); }
  .od-media-cover { object-fit: cover; }

  /* data text only — authored copy is rewritten to its budget instead */
  .od-truncate { display: block; max-width: 100%; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
  .od-clamp-2, .od-clamp-3 { display: -webkit-box; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; }
  .od-clamp-2 { -webkit-line-clamp: 2; }
  .od-clamp-3 { -webkit-line-clamp: 3; }
  .od-lines-2 { min-height: calc(2 * 1.4em); }   /* block-level reservation for a shared baseline */
  .od-nowrap  { white-space: nowrap; }           /* 数字+单位 · 价格+起 · 日期+星期 */
  .od-keep    { word-break: keep-all; overflow-wrap: anywhere; } /* CJK labels break at spaces / <wbr> first */

  /* screen skeleton (optional): bars take their own space, the middle scrolls — no padding guessed for chrome */
  .od-screen { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; height: 100%; }
  .od-scroll { overflow-y: auto; overscroll-behavior: contain; min-height: 0; }

  /* horizontal rail: the next item peeks at the edge; trailing room survives overflow */
  .od-rail { display: flex; gap: var(--od-gap, 8px); overflow-x: auto; scroll-snap-type: x proximity; scrollbar-width: none;
             padding-inline: var(--od-rail-pad, 16px); scroll-padding-inline: var(--od-rail-pad, 16px); }
  .od-rail::-webkit-scrollbar { display: none; }
  :where(.od-rail) > :where(*) { flex: none; scroll-snap-align: start; }
  :where(.od-rail) > :where(:last-child) { margin-inline-end: var(--od-rail-pad, 16px); }

  .od-spacer { flex: none; visibility: hidden; pointer-events: none; }
  .od-touch  { min-width: 44px; min-height: 44px; }
}
/* /OD-LAYOUT-PRIMITIVES v1 */

:root {
  /* palette — derived from the supplied designs */
  --bg: #FBF7F2;          /* cream page ground */
  --sand: #F4EAE0;        /* warm band */
  --sand-2: #EBDCCB;      /* deeper band / selected tile */
  --surface: #FFFFFF;
  --ink: #3A2418;         /* headings */
  --body: #5A4336;        /* body text  ~8.6:1 on --bg */
  --muted: #6E5A4C;       /* secondary  ~5.6:1 on --bg, ~5.1:1 on --sand */
  --accent: #6B3F24;      /* chocolate  white on it ~8.9:1 */
  --accent-hover: #54301B;
  --accent-soft: #F1E2D3;
  --line: #E8DACB;        /* decorative hairlines */
  --line-ui: #9C7F6A;     /* input borders ~3.5:1 */
  --line-2: #DECDBB;      /* hairlines that must read on the sand band */
  --placeholder: #7D6A5B; /* ~5.1:1 on white */
  --star: #D99A00;
  --error: #A3261B;
  --success: #2F6B3A;
  --overlay: rgba(42, 24, 14, .45);
  --on-accent: #FFFFFF;   /* chữ/icon trên nền --accent */
  --error-soft: #FBEDEA;  /* nền hộp lỗi */

  /* type */
  --f-display: 'Fraunces', Georgia, 'Times New Roman', serif;
  --f-script: 'Dancing Script', 'Brush Script MT', cursive;
  --f-body: 'Be Vietnam Pro', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --fs-xs: 13px;
  --fs-sm: 14px;
  --fs-base: 16px;
  --fs-md: 18px;
  --fs-lg: clamp(20px, 2vw, 24px);
  --fs-xl: clamp(26px, 3vw, 34px);
  --fs-2xl: clamp(32px, 4.4vw, 52px);
  --fs-script: clamp(24px, 2.6vw, 34px); /* chữ viết tay trang trí */
  /* ngoại lệ có chủ đích: cụm logo (.brand__*) và badge giỏ dùng px cố định */
  --lh: 1.6;

  /* spacing — 8px rhythm */
  --s1: 4px; --s2: 8px; --s3: 12px; --s4: 16px; --s5: 24px; --s6: 32px; --s7: 48px; --s8: 64px; --s9: 96px;
  --container: 1200px;
  --gutter: clamp(16px, 4vw, 32px);
  --header-h: 72px;
  /* distance from the container edge to the viewport edge, for media that bleeds out of the grid */
  --bleed: calc((100vw - min(100vw, var(--container) + 2 * var(--gutter))) / 2 + var(--gutter));

  /* shape */
  --r-sm: 6px;
  --r-md: 10px;
  --r-lg: 16px;
  --r-pill: 999px;
  --shadow: 0 1px 2px rgba(58, 36, 24, .06), 0 6px 18px rgba(58, 36, 24, .06);
  --shadow-lg: 0 18px 48px rgba(58, 36, 24, .18);

  /* motion */
  --t-fast: 160ms;
  --t-med: 240ms;
  --ease-out: cubic-bezier(.22, .61, .36, 1);
  --ease-in: cubic-bezier(.55, .06, .68, .19);
}

/* ---------- base ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: calc(var(--header-h) + 16px); }
body {
  margin: 0; background: var(--bg); color: var(--body);
  font-family: var(--f-body); font-size: var(--fs-base); line-height: var(--lh);
  -webkit-font-smoothing: antialiased; overflow-x: hidden;
}
img { max-width: 100%; display: block; }
[hidden] { display: none !important; }
a { color: inherit; }
button, input, select, textarea { font: inherit; color: inherit; }
input[type="radio"], input[type="checkbox"] { accent-color: var(--accent); width: 18px; height: 18px; }
h1, h2, h3, h4 { color: var(--ink); font-family: var(--f-display); font-weight: 500; line-height: 1.2; margin: 0; }
h1, h2, h3 { text-wrap: balance; }
.lead, .sec-lead { text-wrap: pretty; }
p { margin: 0; }
ul, ol { margin: 0; padding: 0; list-style: none; }
:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.skip { position: absolute; left: 16px; top: -60px; z-index: 100; background: var(--accent); color: var(--on-accent); padding: 10px 16px; border-radius: var(--r-sm); text-decoration: none; }
.skip:focus { top: 12px; }

.i { width: 24px; height: 24px; flex: none; display: inline-block; vertical-align: middle; }
.i-sm { width: 18px; height: 18px; }

.container { width: 100%; max-width: calc(var(--container) + 2 * var(--gutter)); margin-inline: auto; padding-inline: var(--gutter); }
.section { padding-block: var(--s7); }
.section--tight { padding-block: var(--s6); }
.band { background: var(--sand); }

.eyebrow { display: block; font-family: var(--f-display); font-size: var(--fs-xs); letter-spacing: .28em; text-transform: uppercase; color: var(--accent); font-weight: 600; }
.script { font-family: var(--f-script); color: var(--accent); font-weight: 600; line-height: 1.15; }
.script--deco { font-size: var(--fs-script); transform: rotate(-8deg); display: inline-block; pointer-events: none; }
.lead { font-size: var(--fs-md); color: var(--body); max-width: 60ch; }
.muted { color: var(--muted); }
.od-nowrap { white-space: nowrap; }
.price { font-weight: 600; color: var(--accent); }

/* section heading row: heading left, "Xem tất cả" right */
.sec-head { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--s4); margin-bottom: var(--s5); flex-wrap: wrap; }
.sec-head h2 { font-size: var(--fs-xl); margin-top: var(--s2); }
.link-arrow { display: inline-flex; align-items: center; gap: var(--s2); color: var(--accent); font-weight: 500; font-size: var(--fs-sm); text-decoration: none; min-height: 44px; white-space: nowrap; }
.link-arrow .i { transition: transform var(--t-fast) var(--ease-out); }
@media (hover: hover) { .link-arrow:hover .i { transform: translateX(3px); } .link-arrow:hover { text-decoration: underline; text-underline-offset: 4px; } }

/* ---------- buttons ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--s2);
  min-height: 48px; padding: 0 var(--s5); border-radius: var(--r-pill);
  font-weight: 500; font-size: var(--fs-base); text-decoration: none; cursor: pointer;
  border: 1.5px solid transparent; transition: background var(--t-fast), color var(--t-fast), border-color var(--t-fast), transform var(--t-fast);
  white-space: nowrap;
}
.btn:active { transform: scale(.98); }
.btn--primary { background: var(--accent); color: var(--on-accent); }
.btn--outline { background: transparent; color: var(--accent); border-color: var(--accent); }
.btn--ghost { background: var(--surface); color: var(--accent); border-color: var(--line); }
.btn--block { width: 100%; }
.btn--lg { min-height: 56px; font-size: var(--fs-md); }
@media (hover: hover) {
  .btn--primary:hover { background: var(--accent-hover); }
  .btn--outline:hover, .btn--ghost:hover { background: var(--accent-soft); }
}
.btn[disabled], .btn[aria-busy="true"] { opacity: .7; cursor: progress; }
.icon-btn {
  display: inline-grid; place-items: center; width: 44px; height: 44px; border-radius: var(--r-pill);
  background: transparent; border: 0; cursor: pointer; color: var(--ink); position: relative;
}
@media (hover: hover) { .icon-btn:hover { background: var(--accent-soft); } }

/* ---------- header ---------- */
.site-header { position: sticky; top: 0; z-index: 40; background: color-mix(in srgb, var(--bg) 96%, transparent); backdrop-filter: saturate(1.2) blur(8px); border-bottom: 1px solid var(--line); }
.site-header__in { display: flex; align-items: center; gap: var(--s4); min-height: var(--header-h); }
.brand { display: inline-flex; align-items: center; gap: var(--s3); text-decoration: none; color: var(--ink); flex: none; }
.brand__mark { width: 48px; height: 48px; border-radius: 50%; background: var(--accent-soft); color: var(--accent); display: grid; place-items: center; }
.brand__mark .i { width: 30px; height: 30px; }
.brand__text { display: grid; line-height: 1.1; }
.brand__name { font-family: var(--f-body); font-weight: 600; font-size: 20px; letter-spacing: -.01em; color: var(--ink); white-space: nowrap; }
.brand__tag { font-family: var(--f-script); color: var(--accent); font-size: 15px; white-space: nowrap; }
.nav { display: flex; gap: var(--s1); margin-inline: auto; }
.nav a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 10px; text-decoration: none; color: var(--ink); font-size: var(--fs-sm); position: relative; white-space: nowrap; }
.nav a::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: 6px; height: 2px; background: var(--accent); transform: scaleX(0); transform-origin: left; transition: transform var(--t-med) var(--ease-out); }
.nav a[aria-current="page"] { color: var(--accent); font-weight: 600; }
.nav a[aria-current="page"]::after { transform: scaleX(1); }
@media (hover: hover) { .nav a:hover::after { transform: scaleX(1); } }
.header-actions { display: flex; align-items: center; gap: var(--s2); flex: none; }
.cart-badge { position: absolute; top: 4px; right: 2px; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 9px; background: var(--accent); color: var(--on-accent); font-size: 11px; font-weight: 600; line-height: 18px; text-align: center; }
.cart-badge[data-count="0"] { background: var(--sand-2); color: var(--ink); }
.cart-badge.bump { animation: bump 300ms var(--ease-out); }
@keyframes bump { 50% { transform: scale(1.3); } }
.menu-toggle { display: none; }
/* header CTA only when the row has room for brand + 5 links + 3 controls (measured 1146px at 1280) */
.header-cta { padding: 0 var(--s5); min-height: 44px; display: none; }
@media (min-width: 1280px) { .header-cta { display: inline-flex; } }
@media (max-width: 1023px) {
  .nav { display: none; }
  .menu-toggle { display: inline-grid; }
  .header-actions { margin-left: auto; }
}
@media (max-width: 420px) {
  .site-header .brand { gap: var(--s2); }
  .site-header .brand__mark { width: 36px; height: 36px; }
  .site-header .brand__mark .i { width: 24px; height: 24px; }
  .site-header .brand__name { font-size: 17px; }
  .site-header .brand__tag { display: none; }
  .header-actions { gap: 0; }
}
@media (max-width: 359px) { .site-header .brand__text { display: none; } }

/* mobile nav drawer */
.drawer-scrim { position: fixed; inset: 0; background: var(--overlay); z-index: 60; opacity: 0; pointer-events: none; transition: opacity var(--t-med) var(--ease-out); }
.drawer-scrim.is-open { opacity: 1; pointer-events: auto; }
.drawer {
  position: fixed; top: 0; bottom: 0; right: 0; z-index: 70; width: min(420px, 100%);
  background: var(--bg); box-shadow: var(--shadow-lg);
  transform: translateX(100%); transition: transform 200ms var(--ease-in), visibility 0s linear 200ms; /* đóng nhanh hơn mở, ẩn sau khi trượt xong */
  display: grid; grid-template-rows: auto minmax(0, 1fr) auto; visibility: hidden;
}
.drawer.is-open { transform: none; transition: transform 280ms var(--ease-out), visibility 0s; visibility: visible; }
/* ngăn giỏ hàng: danh sách cuộn, tổng + nút luôn ở đáy */
.drawer--cart .widget_shopping_cart_content { display: flex; flex-direction: column; min-height: 0; }
.cart-lines { flex: 1; overflow-y: auto; overscroll-behavior: contain; padding: 0 var(--s5); }
.cart-lines .cart-line { padding-inline: var(--s2); margin-inline: calc(-1 * var(--s2)); border-radius: var(--r-sm); }
.cart-line.is-new { animation: line-new 1600ms var(--ease-out); }
@keyframes line-new { from { background: var(--accent-soft); } }
.cart-line__opts dl { margin: 0; }
.cart-line__opts dt, .cart-line__opts dd, .cart-line__opts p { display: inline; margin: 0; }
.cart-line__opts dd::after { content: "\A"; white-space: pre; }
.cart-drawer__view { margin-top: var(--s2); }
.drawer--cart .empty { margin-block: auto; }
.cart-error { color: var(--error); font-size: var(--fs-sm); margin-top: var(--s2); }
.drawer--left { right: auto; left: 0; transform: translateX(-100%); }
.drawer__head { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); padding: var(--s4) var(--s5); border-bottom: 1px solid var(--line); }
.drawer__head h2 { font-size: var(--fs-lg); }
.drawer__body { overflow-y: auto; overscroll-behavior: contain; padding: var(--s5); }
.drawer__foot { border-top: 1px solid var(--line); padding: var(--s5); background: var(--surface); }
.mnav a { display: flex; align-items: center; justify-content: space-between; min-height: 52px; border-bottom: 1px solid var(--line); text-decoration: none; color: var(--ink); font-size: var(--fs-md); }
.mnav a[aria-current="page"] { color: var(--accent); font-weight: 600; }

/* ---------- cart ---------- */
.cart-line { display: grid; grid-template-columns: 72px minmax(0, 1fr); gap: var(--s3); padding-block: var(--s4); border-bottom: 1px solid var(--line); }
.cart-line img { width: 72px; height: 72px; object-fit: cover; border-radius: var(--r-sm); }
.cart-line__name { font-weight: 600; color: var(--ink); text-decoration: none; display: block; }
.cart-line__opts { font-size: var(--fs-xs); color: var(--muted); display: block; }
.cart-line__row { display: flex; align-items: center; justify-content: space-between; gap: var(--s2); margin-top: var(--s2); }
.cart-total { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: var(--s4); font-size: var(--fs-md); color: var(--ink); }
.cart-total strong { font-size: var(--fs-lg); color: var(--accent); white-space: nowrap; }
.empty { text-align: center; padding: var(--s7) var(--s4); display: grid; justify-items: center; gap: var(--s3); color: var(--muted); }
.empty .i { width: 48px; height: 48px; color: var(--accent); }
.empty h3 { font-size: var(--fs-lg); }
.empty--span { grid-column: 1 / -1; }
.cart-note { text-align: center; margin-top: var(--s2); }
.textarea--short { min-height: 88px; }

.stepper { display: inline-flex; align-items: center; border: 1px solid var(--line-ui); border-radius: var(--r-sm); background: var(--surface); }
.stepper button { width: 44px; height: 44px; border: 0; background: transparent; cursor: pointer; display: grid; place-items: center; color: var(--ink); }
.stepper button:disabled { color: var(--line-ui); cursor: not-allowed; }
.stepper output, .stepper input { width: 48px; text-align: center; border: 0; border-inline: 1px solid var(--line); height: 44px; line-height: 44px; background: transparent; }
.text-btn { background: none; border: 0; padding: var(--s2); min-height: 44px; color: var(--muted); cursor: pointer; display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-sm); }
@media (hover: hover) { .text-btn:hover { color: var(--error); } }

/* ---------- search overlay ---------- */
div.search { position: fixed; inset: 0; z-index: 80; background: var(--overlay); display: none; padding: clamp(16px, 8vh, 96px) var(--gutter); }
div.search.is-open { display: block; animation: fade var(--t-med) var(--ease-out); }
.search__panel { max-width: 720px; margin: 0 auto; background: var(--bg); border-radius: var(--r-lg); box-shadow: var(--shadow-lg); overflow: hidden; }
.search__bar { display: flex; align-items: center; gap: var(--s3); padding: var(--s3) var(--s4); border-bottom: 1px solid var(--line); }
.search__bar input { flex: 1; min-width: 0; border: 0; background: transparent; font-size: var(--fs-md); min-height: 48px; outline: none; }
.search__bar input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; }
.search__bar:focus-within { box-shadow: inset 0 -2px var(--accent); }
.search__results { max-height: min(60vh, 520px); overflow-y: auto; padding: var(--s2); }
.search__hint { padding: var(--s5); color: var(--muted); text-align: center; }
@keyframes fade { from { opacity: 0; } }



/* ---------- product card ---------- */
.p-grid { --od-cols: 5; --od-gap: 20px; }
.p-grid--3 { --od-cols: 3; }
.p-card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; position: relative; transition: box-shadow var(--t-med) var(--ease-out), transform var(--t-med) var(--ease-out); }
@media (hover: hover) { .p-card:hover { box-shadow: var(--shadow); transform: translateY(-2px); } .p-card:hover .p-card__img img { transform: scale(1.04); } }
.p-card__img { overflow: hidden; background: var(--sand); }
.p-card__img img { --od-ratio: 4 / 3; transition: transform 400ms var(--ease-out); }
.p-card__link { color: inherit; text-decoration: none; display: block; }
.p-card__link::after { content: ""; position: absolute; inset: 0; z-index: 1; }
.p-card__body { padding: var(--s3) var(--s4) var(--s4); display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: var(--s2); }
.p-card__text { --od-gap: 2px; }
.p-card__name { font-family: var(--f-body); font-weight: 500; color: var(--ink); font-size: var(--fs-base); line-height: 1.35; }
.p-card__price { font-size: var(--fs-sm); }
.p-card__add { position: relative; z-index: 2; width: 44px; height: 44px; border-radius: 50%; border: 0; background: transparent; color: var(--accent); cursor: pointer; display: grid; place-items: center; }
@media (hover: hover) { .p-card__add:hover { background: var(--accent-soft); } }
.p-card__add.is-done { background: var(--accent); color: var(--on-accent); }

@media (max-width: 1024px) { .p-grid { --od-cols: 4; } }
@media (max-width: 860px) { .p-grid, .p-grid--3 { --od-cols: 3; } }
@media (max-width: 640px) { .p-grid, .p-grid--3 { --od-cols: 2; --od-gap: 12px; } .p-card__body { padding: var(--s3); } }

/* rail variant on small screens: horizontal scroll with peeking card */
@media (max-width: 860px) {
  .p-rail { display: flex; grid-template-columns: none; overflow-x: auto; scroll-snap-type: x proximity; scrollbar-width: none; margin-inline: calc(-1 * var(--gutter)); padding-inline: var(--gutter); scroll-padding-inline: var(--gutter); }
  .p-rail::-webkit-scrollbar { display: none; }
  .p-rail > * { flex: 0 0 min(62vw, 240px); scroll-snap-align: start; }
}

/* ---------- category tiles ---------- */
.cat-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(0, 180px)); justify-content: center; gap: var(--s4); }
.cat-tile { display: grid; justify-items: center; gap: var(--s3); text-decoration: none; color: var(--ink); text-align: center; padding: var(--s3) var(--s2); border-radius: var(--r-lg); min-height: 44px; }
.cat-tile__ico { width: 100px; height: 100px; border-radius: 50%; background: var(--sand); display: grid; place-items: center; color: var(--accent); transition: background var(--t-med), transform var(--t-med) var(--ease-out); }
.cat-tile__ico .i { width: 44px; height: 44px; }
.cat-tile__label { font-size: var(--fs-base); font-weight: 500; }
.cat-tile[aria-current="true"] .cat-tile__ico { background: var(--sand-2); }
.cat-tile[aria-current="true"] .cat-tile__label { color: var(--accent); font-weight: 600; }
@media (hover: hover) { .cat-tile:hover .cat-tile__ico { background: var(--sand-2); transform: translateY(-3px); } }
@media (max-width: 860px) {
  .cat-tiles { display: flex; justify-content: flex-start; overflow-x: auto; scrollbar-width: none; margin-inline: calc(-1 * var(--gutter)); padding-inline: var(--gutter); gap: var(--s2); scroll-snap-type: x proximity; }
  .cat-tiles::-webkit-scrollbar { display: none; }
  .cat-tile { flex: 0 0 104px; scroll-snap-align: start; }
  .cat-tile__ico { width: 76px; height: 76px; }
  .cat-tile__ico .i { width: 34px; height: 34px; }
  .cat-tile__label { font-size: var(--fs-sm); }
}

/* ---------- promise strip ---------- */
.promises { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); }
.promise { display: grid; justify-items: center; text-align: center; gap: var(--s2); padding: var(--s4) var(--s5); }
.promise + .promise { border-left: 1px solid var(--line-2); }
.promise .i { width: 40px; height: 40px; color: var(--accent); margin-bottom: var(--s1); }
.promise h3 { font-family: var(--f-body); font-size: var(--fs-base); font-weight: 600; }
.promise p { font-size: var(--fs-sm); color: var(--muted); max-width: 28ch; }
.promises--row .promise { grid-template-columns: auto minmax(0, 1fr); justify-items: start; text-align: left; align-items: center; column-gap: var(--s4); }
.promises--row .promise .i { grid-row: span 2; margin: 0; }
@media (max-width: 860px) {
  .promises { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: var(--s4); }
  .promise + .promise { border-left: 0; }
  .promise:nth-child(even) { border-left: 1px solid var(--line-2); }
}
@media (max-width: 480px) { .promise { padding: var(--s3); } .promises--row .promise { grid-template-columns: 1fr; justify-items: center; text-align: center; } .promises--row .promise .i { grid-row: auto; } }

/* ---------- page banner (inner pages) ---------- */
.banner { position: relative; background: var(--sand); overflow: clip; }
.banner__in { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); align-items: center; min-height: 420px; } /* mọi trang con cùng chiều cao banner trên desktop */
.banner__text { padding-block: var(--s6); position: relative; z-index: 1; display: grid; gap: var(--s3); }
.banner__text h1 { font-size: var(--fs-2xl); }
.banner__sub { font-family: var(--f-script); font-size: var(--fs-script); color: var(--ink); line-height: 1.25; }
.banner__media { align-self: stretch; position: relative; margin-right: calc(-1 * var(--bleed)); }
.banner__media img { width: 100%; height: 100%; object-fit: cover; position: absolute; inset: 0;
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 28%); mask-image: linear-gradient(to right, transparent 0, #000 28%); }
.banner__deco { position: absolute; right: var(--gutter); top: var(--s5); z-index: 2; text-align: right; }
.banner__deco .script { color: var(--on-accent); text-shadow: 0 1px 12px rgba(42, 24, 14, .45); }
@media (max-width: 860px) {
  .banner__in { grid-template-columns: 1fr; min-height: 0; }
  .banner__media { order: -1; margin: 0 calc(-1 * var(--gutter)); aspect-ratio: 16 / 9; } /* ảnh lên trước như hero: font đổi không đẩy ảnh (CLS) */
  .banner__media img { -webkit-mask-image: linear-gradient(to top, transparent 0, #000 22%); mask-image: linear-gradient(to top, transparent 0, #000 22%); }
  .banner__text { padding-block: var(--s6) var(--s4); }
  .banner__deco { display: none; }
}

.crumb-bar { padding-top: var(--s4); }
.crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s1) var(--s2); font-size: var(--fs-xs); color: var(--muted); }
.crumbs a { color: var(--muted); text-decoration: none; min-height: 44px; display: inline-flex; align-items: center; }
@media (hover: hover) { .crumbs a:hover { color: var(--accent); text-decoration: underline; } }
.crumbs [aria-current] { color: var(--accent); font-weight: 500; }
.crumbs .i { width: 14px; height: 14px; }

/* ---------- story band ---------- */
.story { background: var(--sand); overflow: clip; }
.story__in { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: center; min-height: 320px; }
.story__media { position: relative; align-self: stretch; margin-left: calc(-1 * var(--bleed)); min-height: 260px; }
.story__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover;
  -webkit-mask-image: linear-gradient(to left, transparent 0, #000 30%); mask-image: linear-gradient(to left, transparent 0, #000 30%); }
.story__text { display: grid; gap: var(--s3); padding: var(--s7) 0 var(--s7) var(--s6); }
.story__text h2 { font-size: var(--fs-xl); }
.story__text .btn { justify-self: start; margin-top: var(--s2); }
@media (max-width: 860px) {
  .story__in { grid-template-columns: 1fr; }
  .story__media { margin: 0 calc(-1 * var(--gutter)); aspect-ratio: 16 / 9; min-height: 0; }
  .story__media img { -webkit-mask-image: linear-gradient(to top, transparent 0, #000 25%); mask-image: linear-gradient(to top, transparent 0, #000 25%); }
  .story__text { padding: var(--s4) 0 var(--s7); }
}

/* ---------- cards & forms ---------- */
.card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: clamp(20px, 3vw, 32px); }
.card__title { display: flex; align-items: center; gap: var(--s3); font-size: var(--fs-lg); }
.card__title .i { color: var(--accent); width: 30px; height: 30px; }
.card__intro { color: var(--muted); font-size: var(--fs-sm); margin-top: var(--s1); }

fieldset.card { margin: 0; min-width: 0; }
.form-grid { display: grid; gap: var(--s4) var(--s5); grid-template-columns: minmax(0, 1fr); margin-top: var(--s5); }
.form-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.form-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.form-grid--tight { margin-top: 0; }
.field { display: grid; gap: 6px; align-content: start; }
.field--full { grid-column: 1 / -1; }
.field label, .field .label { font-size: var(--fs-sm); font-weight: 500; color: var(--ink); }
.req { color: var(--error); }
.input, .select, .textarea {
  width: 100%; min-height: 48px; border: 1px solid var(--line-ui); border-radius: var(--r-sm);
  background: var(--surface); padding: 10px 14px; font-size: var(--fs-base); color: var(--ink);
  transition: border-color var(--t-fast), box-shadow var(--t-fast);
}
/* ô một dòng cao đúng 48px (ô ngày của trình duyệt tự cao hơn) để thẳng hàng với nút */
.input, .select { height: 48px; }
.input::placeholder, .textarea::placeholder { color: var(--placeholder); }
.input:focus, .select:focus, .textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent); }
.select { appearance: none; -webkit-appearance: none; padding-right: 40px; cursor: pointer;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%236B3F24' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat; background-position: right 12px center; }
.textarea { min-height: 136px; resize: vertical; line-height: 1.5; } /* = .drop để 2 ô cạnh nhau cùng cao */
.field__meta { display: flex; justify-content: space-between; gap: var(--s2); font-size: var(--fs-xs); color: var(--muted); }
.field__meta .count { margin-left: auto; white-space: nowrap; }
.field__help { font-size: var(--fs-xs); color: var(--muted); }
.field__help--center { text-align: center; }
.field__error { font-size: var(--fs-xs); color: var(--error); display: none; align-items: flex-start; gap: 4px; }
.field__error .i { width: 16px; height: 16px; margin-top: 1px; }
.field__error--file { display: flex; }
.field.is-invalid .input, .field.is-invalid .select, .field.is-invalid .textarea { border-color: var(--error); }
.field.is-invalid .field__error { display: flex; }
.err-summary { display: none; border: 1px solid var(--error); background: var(--error-soft); color: var(--error); border-radius: var(--r-md); padding: var(--s4); margin-bottom: var(--s5); }
.err-summary.is-on { display: block; }
.err-summary--top { margin-top: var(--s5); }
.err-summary h2 { font-family: var(--f-body); font-size: var(--fs-base); font-weight: 600; color: var(--error); }
.err-summary ul { margin-top: var(--s2); padding-left: 1.2em; list-style: disc; font-size: var(--fs-sm); }
.err-summary a { color: var(--error); }
.form-success { display: none; text-align: center; padding: var(--s6) var(--s4); gap: var(--s3); justify-items: center; }
.form-success.is-on { display: grid; animation: fade var(--t-med) var(--ease-out); }
.form-success .i { width: 56px; height: 56px; color: var(--success); }
.form-success h3 { font-size: var(--fs-lg); }
.spinner { width: 18px; height: 18px; border: 2px solid rgba(255,255,255,.4); border-top-color: var(--on-accent); border-radius: 50%; animation: spin 700ms linear infinite; display: none; }
[aria-busy="true"] .spinner { display: inline-block; }
@keyframes spin { to { transform: rotate(360deg); } }

/* option chips (radio) */
.opts { display: flex; flex-wrap: wrap; gap: var(--s3); border: 0; padding: 0; margin: 0; }
.opts legend { font-size: var(--fs-sm); font-weight: 600; color: var(--ink); margin-bottom: var(--s2); padding: 0; }
.opt { position: relative; }
.opt input { position: absolute; opacity: 0; inset: 0; margin: 0; cursor: pointer; }
.opt span { display: grid; justify-items: center; min-height: 48px; align-content: center; padding: var(--s2) var(--s5); border: 1px solid var(--line-ui); border-radius: var(--r-sm); background: var(--surface); font-size: var(--fs-sm); color: var(--ink); text-align: center; line-height: 1.35; transition: background var(--t-fast), color var(--t-fast), border-color var(--t-fast); }
.opt span small { display: block; font-size: var(--fs-xs); color: var(--muted); }
.opt input:checked + span { background: var(--accent); border-color: var(--accent); color: var(--on-accent); }
.opt input:checked + span small { color: var(--accent-soft); }
.opt input:focus-visible + span { outline: 2px solid var(--accent); outline-offset: 2px; }
@media (hover: hover) { .opt input:not(:checked):hover + span { border-color: var(--accent); } }

.radio-row { display: flex; flex-wrap: wrap; gap: var(--s3); }

/* faq */
.faq { display: grid; gap: var(--s3); }
.faq details { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); }
.faq summary { list-style: none; cursor: pointer; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--s4); padding: var(--s4) var(--s5); min-height: 56px; color: var(--ink); font-weight: 500; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary > .i:first-child { color: var(--accent); width: 28px; height: 28px; }
.faq summary .chev { transition: transform var(--t-med) var(--ease-out); color: var(--muted); }
.faq details[open] .chev { transform: rotate(180deg); }
.faq .faq__a { padding: 0 var(--s5) var(--s4) calc(var(--s5) + 28px + var(--s4)); color: var(--body); font-size: var(--fs-sm); }
.faq--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; }
@media (max-width: 760px) { .faq--2 { grid-template-columns: 1fr; } .faq .faq__a { padding-left: var(--s5); } }

/* ---------- footer ---------- */
.site-footer { background: var(--sand); margin-top: 0; padding-top: var(--s7); }
.footer-grid { display: grid; grid-template-columns: 1.3fr 1fr 1.3fr 1.2fr; gap: var(--s6); align-items: start; }
.footer-grid h2 { font-family: var(--f-body); font-size: var(--fs-base); font-weight: 600; margin-bottom: var(--s3); }
.footer-links a { display: inline-flex; min-height: 44px; align-items: center; text-decoration: none; color: var(--body); }
@media (hover: hover) { .footer-links a:hover { color: var(--accent); text-decoration: underline; text-underline-offset: 3px; } }
.footer-contact li { display: flex; align-items: center; gap: var(--s3); min-height: 36px; }
.footer-contact .i { color: var(--accent); width: 20px; height: 20px; }
.footer-contact a { text-decoration: none; display: inline-flex; align-items: center; min-height: 44px; }
@media (hover: hover) { .footer-contact a:hover { color: var(--accent); text-decoration: underline; } }
.socials { display: flex; gap: var(--s2); margin-top: var(--s4); }
.socials a { width: 44px; height: 44px; display: grid; place-items: center; border-radius: 50%; color: var(--ink); }
.socials .i { width: 22px; height: 22px; }
@media (hover: hover) { .socials a:hover { background: var(--sand-2); color: var(--accent); } }
.footer-thanks { font-size: clamp(26px, 2.4vw, 32px); transform: rotate(-8deg); text-align: center; align-self: center; }
.footer-bottom { display: flex; justify-content: space-between; flex-wrap: wrap; gap: var(--s2); border-top: 1px solid var(--line); margin-top: var(--s6); padding-block: var(--s5); font-size: var(--fs-xs); color: var(--muted); }
.footer-bottom span { display: inline-flex; align-items: center; gap: 6px; }
@media (max-width: 860px) { .footer-grid { grid-template-columns: 1fr 1fr; } .footer-thanks { grid-column: 1 / -1; } }
@media (max-width: 520px) { .footer-grid { grid-template-columns: 1fr; } }

/* ==========================================================
   PAGE: home
   ========================================================== */
.hero { position: relative; background: var(--sand); overflow: clip; }
.hero__in { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); align-items: center; min-height: min(560px, 76dvh); }
.hero__text { display: grid; gap: var(--s4); padding-block: var(--s8); position: relative; z-index: 1; }
.hero__title { font-family: var(--f-script); font-weight: 700; color: var(--accent); font-size: clamp(40px, 5.4vw, 64px); line-height: 1.1; }
.hero__text .lead { max-width: 46ch; }
.hero__ctas { display: flex; flex-wrap: wrap; gap: var(--s3); margin-top: var(--s2); }
.hero__deco { position: absolute; right: 0; bottom: 4%; }
.hero__media { position: relative; align-self: stretch; margin-right: calc(-1 * var(--bleed)); }
.hero__media img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: 40% 50%;
  -webkit-mask-image: linear-gradient(to right, transparent 0, #000 30%); mask-image: linear-gradient(to right, transparent 0, #000 30%); }
@media (max-width: 860px) {
  .hero__in { grid-template-columns: 1fr; min-height: 0; }
  .hero__media { order: -1; margin: 0 calc(-1 * var(--gutter)); aspect-ratio: 4 / 3; }
  .hero__media img { object-position: 62% 50%; }
  .hero__media img { -webkit-mask-image: linear-gradient(to top, transparent 0, #000 28%); mask-image: linear-gradient(to top, transparent 0, #000 28%); }
  .hero__text { padding-block: 0 var(--s7); }
  .hero__title { font-size: clamp(30px, 9vw, 44px); }
  .hero__deco { display: none; }
}
/* hero intro: the one orchestrated moment on the site. Headline is "written" left to right,
   the rest settles in after it. Static page is complete without it (no JS, reduced motion). */
@media (prefers-reduced-motion: no-preference) {
  .hero__media img { animation: hero-img 1400ms var(--ease-out) both; }
  .hero__title { animation: hero-write 1000ms cubic-bezier(.65, 0, .35, 1) both; }
  .hero__text > :not(.hero__title) { animation: hero-rise 600ms var(--ease-out) both; }
  .hero__text > .eyebrow { animation-delay: 0ms; }
  .hero__text > .lead { animation-delay: 250ms; }
  .hero__text > .hero__ctas { animation-delay: 350ms; }
  .hero__text > .hero__deco { animation: hero-rise-deco 900ms var(--ease-out) 900ms both; }
}
@keyframes hero-img { from { transform: scale(1.06); } }
@keyframes hero-write { from { clip-path: inset(-10% 100% -10% 0); } to { clip-path: inset(-10% -2% -10% 0); } }
@keyframes hero-rise { from { opacity: 0; transform: translateY(12px); } }
@keyframes hero-rise-deco { from { opacity: 0; transform: rotate(-8deg) translateY(12px); } to { opacity: 1; transform: rotate(-8deg); } }

.ask { text-align: center; }
.ask h2 { font-size: var(--fs-xl); display: inline-flex; align-items: center; gap: var(--s3); margin-bottom: var(--s5); }
.ask h2 .i { color: var(--accent); }
@media (max-width: 560px) { .ask h2 .i { display: none; } }

.insta { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: var(--s3); }
.insta a { display: block; border-radius: var(--r-md); overflow: hidden; position: relative; }
.insta img { --od-ratio: 4 / 3; transition: transform 400ms var(--ease-out); }
.insta a::after { content: ""; position: absolute; inset: 0; background: transparent; transition: background var(--t-med); }
@media (hover: hover) { .insta a:hover img { transform: scale(1.05); } .insta a:hover::after { background: color-mix(in srgb, var(--ink) 12%, transparent); } }
@media (max-width: 860px) { .insta { grid-template-columns: repeat(3, minmax(0, 1fr)); } }

.cta-band { background: var(--sand); }
.cta-band__in { display: grid; grid-template-columns: auto auto minmax(0, 1fr) auto; align-items: center; gap: var(--s5); padding-block: var(--s6); }
.cta-band h2 { font-size: var(--fs-lg); }
.cta-band__ico { width: 64px; height: 64px; border-radius: 50%; background: var(--surface); display: grid; place-items: center; color: var(--accent); }
.cta-band__ico .i { width: 36px; height: 36px; }
@media (max-width: 860px) { .cta-band__in { grid-template-columns: 1fr; justify-items: center; text-align: center; } .cta-band .script--deco { display: none; } }

/* ==========================================================
   PAGE: menu
   ========================================================== */
.cat-bar { background: var(--bg); border-bottom: 1px solid var(--line); padding-block: var(--s4); }
.cat-bar .cat-tiles { gap: 0; }
.cat-bar .cat-tile + .cat-tile { border-left: 1px solid var(--line-2); border-radius: 0; }
.cat-bar .cat-tile__ico { width: 76px; height: 76px; background: transparent; }
.cat-bar .cat-tile__ico .i { width: 36px; height: 36px; }
.cat-bar .cat-tile[aria-current="true"] .cat-tile__ico { background: var(--sand-2); }
@media (max-width: 860px) { .cat-bar .cat-tile + .cat-tile { border-left: 0; } }
.shop { display: grid; grid-template-columns: 260px minmax(0, 1fr); gap: var(--s6); align-items: start; }
.side { display: grid; gap: var(--s4); position: sticky; top: calc(var(--header-h) + 16px); }
.side-nav { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; }
.side-nav a, .side-nav button { display: flex; align-items: center; gap: var(--s3); width: 100%; min-height: 48px; padding: 0 var(--s4); background: none; border: 0; text-decoration: none; color: var(--ink); text-align: left; cursor: pointer; font-size: var(--fs-base); }
.side-nav .i { color: var(--accent); }
.side-nav [aria-current="true"] { background: var(--sand); font-weight: 600; color: var(--accent); }
@media (hover: hover) { .side-nav a:hover, .side-nav button:hover { background: var(--sand); } }
.side-nav__group + .side-nav__group { border-top: 1px solid var(--line); }
.side-nav__subs { padding: var(--s1) 0 var(--s2); }
.side-nav__subs a { min-height: 40px; padding-left: var(--s6); font-size: var(--fs-sm); color: var(--body); }
.side-nav__subs a .i { width: 14px; height: 14px; color: var(--muted); }
.side-nav__toggle .chev { margin-left: auto; transition: transform var(--t-med); color: var(--muted); }
.side-nav__toggle[aria-expanded="false"] .chev { transform: rotate(-90deg); }
.promo { border-radius: var(--r-md); overflow: hidden; background: var(--sand); display: grid; position: relative; }
.promo img { --od-ratio: 16 / 10; }
.promo__body { padding: var(--s4); display: grid; gap: var(--s3); }
.promo .script { font-size: var(--fs-script); }
.promo .btn { width: 100%; padding-inline: var(--s4); font-size: var(--fs-sm); }
.shop__head { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--s4); margin-bottom: var(--s5); align-items: start; }
.shop__head h2 { font-size: var(--fs-xl); margin-top: var(--s2); }
.shop__head p { color: var(--muted); margin-top: var(--s2); max-width: 62ch; }
.shop__head .script--deco { font-size: var(--fs-script); }
.shop__count { font-size: var(--fs-sm); color: var(--muted); margin-bottom: var(--s3); }
.filter-btn { display: none; min-width: 220px; }
.shop__bar { justify-content: space-between; flex-wrap: wrap; }
@media (max-width: 960px) {
  .shop { grid-template-columns: 1fr; }
  .side { position: static; }
  .side-nav, .side .promo { display: none; }
  .filter-btn { display: inline-flex; }
  .shop__head .script--deco { display: none; }
  .shop__head { grid-template-columns: 1fr; }
}

/* ==========================================================
   PAGE: product
   ========================================================== */
.pd { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr); gap: clamp(24px, 4vw, 56px); align-items: start; }
.gallery { display: grid; grid-template-columns: 88px minmax(0, 1fr); gap: var(--s4); align-items: start; }
.gallery__side { display: grid; gap: var(--s3); justify-items: center; }
.gallery__next { width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--line-ui); background: var(--surface); color: var(--ink); display: grid; place-items: center; cursor: pointer; }
@media (hover: hover) { .gallery__next:hover { background: var(--accent-soft); } }
.gallery--single { grid-template-columns: 1fr; }
.gallery__thumbs { display: grid; gap: var(--s3); }
.gallery__thumbs button { padding: 0; border: 2px solid transparent; border-radius: var(--r-md); overflow: hidden; cursor: pointer; background: var(--sand); width: 88px; height: 96px; }
.gallery__thumbs button img { width: 100%; height: 100%; object-fit: cover; }
.gallery__thumbs button[aria-current="true"] { border-color: var(--accent); }
.gallery__stage { border-radius: var(--r-lg); overflow: hidden; background: var(--sand); aspect-ratio: 2 / 3; display: grid; place-items: center; }
.gallery__stage img { width: 100%; height: 100%; object-fit: cover; }
.gallery__stage img.is-wide { object-fit: contain; }
.gallery--single .gallery__stage { aspect-ratio: 4 / 3; }
.pd__info { display: grid; gap: var(--s4); }
.pd__cat { color: var(--accent); font-size: var(--fs-sm); font-weight: 500; text-decoration: none; justify-self: start; }
.pd__name { font-size: clamp(30px, 3.6vw, 44px); }
.pd__tagline { font-family: var(--f-script); font-size: clamp(22px, 2.2vw, 28px); color: var(--ink); line-height: 1.2; margin-top: calc(-1 * var(--s2)); }
.rating { display: flex; align-items: center; gap: var(--s2); font-size: var(--fs-sm); color: var(--muted); }
.rating .stars { display: inline-flex; color: var(--star); }
.rating .stars .i { width: 18px; height: 18px; fill: currentColor; }
.pd__price { font-size: clamp(28px, 3vw, 34px); font-weight: 600; color: var(--accent); font-family: var(--f-body); }
.pd__desc { border-bottom: 1px solid var(--line); padding-bottom: var(--s5); }
.pd__msg { display: grid; gap: 6px; }
.pd__opts { --od-gap: 20px; }
.pd__qty { display: flex; align-items: center; gap: var(--s4); margin-bottom: 20px; }
.pd__qty .label { font-size: var(--fs-sm); font-weight: 600; color: var(--ink); }
.pd__note { font-size: var(--fs-sm); color: var(--muted); }
@media (max-width: 900px) {
  .pd { grid-template-columns: 1fr; }
  .gallery { grid-template-columns: 1fr; }
  .gallery__side { order: 2; justify-items: stretch; }
  .gallery__thumbs { grid-auto-flow: column; grid-auto-columns: 72px; overflow-x: auto; }
  .gallery__next { display: none; }
  .gallery__thumbs button { width: 72px; height: 80px; }
  .gallery__stage { aspect-ratio: 1 / 1; }
}

/* ==========================================================
   PAGE: custom order
   ========================================================== */
.mini-feats { display: flex; flex-wrap: wrap; gap: var(--s2) 0; margin-top: var(--s4); }
.mini-feat { display: grid; justify-items: center; text-align: center; gap: var(--s2); padding: 0 var(--s4); font-size: var(--fs-xs); color: var(--ink); max-width: 120px; }
.mini-feat + .mini-feat { border-left: 1px solid var(--line-2); }
.mini-feat .i { width: 34px; height: 34px; color: var(--accent); }
.order-form { display: grid; gap: var(--s5); }
.step-head { display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: var(--s3); align-items: center; }
.step-head .i { width: 30px; height: 30px; color: var(--accent); grid-row: span 2; }
.step-head h2 { font-size: var(--fs-lg); }
.step-head p { color: var(--muted); font-size: var(--fs-sm); }
.step-1 { display: grid; grid-template-columns: minmax(0, 1.8fr) minmax(0, 1fr); gap: var(--s5); }
.story-card { background: var(--sand); border-radius: var(--r-lg); padding: var(--s5); display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--s4); align-items: center; }
.story-card .i { width: 72px; height: 72px; color: var(--accent); }
.story-card .story-card__title { font-family: var(--f-script); font-size: var(--fs-script); line-height: 1.25; color: var(--accent); font-weight: 600; margin: 0; }
.story-card p:not(.story-card__title) { font-size: var(--fs-sm); color: var(--body); margin-top: var(--s2); }
.drop { min-height: 136px; border: 1.5px dashed var(--line-ui); border-radius: var(--r-sm); background: var(--bg); display: grid; justify-items: center; gap: var(--s2); text-align: center; padding: var(--s5); cursor: pointer; align-content: center; font-size: var(--fs-sm); color: var(--body); transition: background var(--t-fast), border-color var(--t-fast); }
.drop .i { color: var(--accent); width: 32px; height: 32px; }
.drop.is-over { background: var(--accent-soft); border-color: var(--accent); }
.drop:focus-within { border-color: var(--accent); }
.thumbs { display: flex; flex-wrap: wrap; gap: var(--s2); margin-top: var(--s2); }
.thumb { position: relative; width: 64px; height: 64px; border-radius: var(--r-sm); overflow: hidden; background: var(--sand); }
.thumb img { width: 100%; height: 100%; object-fit: cover; }
.thumb button { position: absolute; top: 2px; right: 2px; width: 24px; height: 24px; border-radius: 50%; border: 0; background: rgba(42, 24, 14, .75); color: var(--on-accent); display: grid; place-items: center; cursor: pointer; }
.thumb button .i { width: 14px; height: 14px; }
/* bước 3: ngân sách | ghi chú | nút gửi cùng một hàng (cùng cao 48px, thẳng đáy), chú thích hàng riêng bên dưới */
.step-3 { margin-top: var(--s5); display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--s3) var(--s5); align-items: end; }
.step-3__note { grid-column: 1 / -1; display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 0 var(--s4); font-size: var(--fs-sm); color: var(--muted); }
.submit-box__urgent a { color: var(--accent); font-weight: 500; display: inline-flex; align-items: center; min-height: 44px; }
.ideas-hint { margin: calc(-1 * var(--s3)) 0 var(--s5); font-size: var(--fs-sm); }
.ideas { --od-cols: 6; --od-gap: 16px; }
.idea { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); overflow: hidden; text-align: left; padding: 0; cursor: pointer; display: grid; color: inherit; }
.idea img { --od-ratio: 3 / 2; }
.idea__body { padding: var(--s3); display: grid; gap: 2px; }
.idea__name { font-weight: 600; color: var(--ink); font-size: var(--fs-sm); }
.idea__sub { font-size: var(--fs-xs); color: var(--muted); }
@media (hover: hover) { .idea:hover { box-shadow: var(--shadow); } }
@media (max-width: 1024px) { .ideas { --od-cols: 3; } }
@media (max-width: 860px) { .step-1, .step-3 { grid-template-columns: 1fr; } .step-3__note { justify-content: flex-start; } }
@media (max-width: 520px) { .ideas { --od-cols: 2; } .mini-feats { gap: var(--s3); } .mini-feat { padding: 0; max-width: 84px; } .mini-feat + .mini-feat { border-left: 0; } }

/* ==========================================================
   PAGE: contact
   ========================================================== */
.contact-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: var(--s5); }
.info-card { position: relative; overflow: clip; }
.info-list { display: grid; gap: var(--s5); margin-top: var(--s5); position: relative; z-index: 1; }
.info-item { display: grid; grid-template-columns: 64px minmax(0, 1fr); gap: var(--s4); align-items: center; }
.info-item__ico { width: 64px; height: 64px; border-radius: 50%; background: var(--sand); display: grid; place-items: center; color: var(--accent); }
.info-item__ico .i { width: 28px; height: 28px; }
.info-item h3 { font-family: var(--f-body); font-size: var(--fs-base); font-weight: 600; }
.info-item a { text-decoration: none; color: var(--ink); }
@media (hover: hover) { .info-item a:hover { color: var(--accent); text-decoration: underline; } }
.info-item small { display: block; color: var(--muted); font-size: var(--fs-xs); }
.info-card__mug { position: absolute; right: 0; bottom: 0; width: 34%; max-width: 200px; -webkit-mask-image: linear-gradient(to left, #000 60%, transparent); mask-image: linear-gradient(to left, #000 60%, transparent); }
.info-card .socials { margin-top: var(--s2); }
.contact-row2 { margin-top: var(--s5); }
.contact-row2 .hours { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s5); align-items: start; }
.hours { display: grid; gap: var(--s4); align-content: start; }
.hours__time { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: var(--s4); }
.hours__time .i { width: 34px; height: 34px; color: var(--accent); }
.hours__time .card__title { margin-bottom: var(--s3); }
.hours__time strong { display: block; color: var(--ink); }
.hours__note { margin-top: var(--s2); font-size: var(--fs-sm); }
.section--faq { padding-bottom: var(--s8); }
.urgent { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: var(--s4); align-items: center; background: var(--sand); border-radius: var(--r-md); padding: var(--s4) var(--s5); text-decoration: none; color: var(--body); }
.urgent > .i:first-child { width: 36px; height: 36px; color: var(--accent); }
.urgent strong { display: block; color: var(--ink); }
.urgent small { font-size: var(--fs-sm); }
@media (hover: hover) { .urgent:hover { background: var(--sand-2); } }
.faq-cards { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--s4); align-items: start; }
.faq-cards details { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); padding: var(--s5); }
.faq-cards summary { list-style: none; cursor: pointer; display: grid; gap: var(--s3); color: var(--ink); font-weight: 600; }
.faq-cards summary::-webkit-details-marker { display: none; }
.faq-cards summary .top { display: flex; justify-content: space-between; align-items: center; }
.faq-cards summary .top .i:first-child { width: 34px; height: 34px; color: var(--accent); }
.faq-cards summary .chev { transition: transform var(--t-med); color: var(--muted); }
.faq-cards details[open] .chev { transform: rotate(90deg); }
.faq-cards p { margin-top: var(--s3); font-size: var(--fs-sm); color: var(--muted); }
@media (max-width: 960px) { .contact-grid, .contact-row2 .hours { grid-template-columns: 1fr; } .faq-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .faq-cards { grid-template-columns: 1fr; } .info-card__mug { display: none; } }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: 1ms !important; animation-iteration-count: 1 !important; transition-duration: 1ms !important; scroll-behavior: auto !important; }
}

/* responsive form grids */
.form-grid--split { grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); }
@media (max-width: 960px) { .form-grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } .form-grid--split { grid-template-columns: 1fr; } }
@media (max-width: 560px) { .form-grid--2, .form-grid--4 { grid-template-columns: 1fr; } }
.od-cluster--center { justify-content: center; }
.stepper input { -moz-appearance: textfield; appearance: textfield; font-size: var(--fs-base); color: var(--ink); }
.stepper input::-webkit-inner-spin-button, .stepper input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
@media (min-width: 561px) { .info-list { padding-right: 28%; } }

/* ==========================================================
   PAGE: about
   ========================================================== */
.about-story { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr); gap: clamp(24px, 5vw, 64px); align-items: center; }
.about-story__media { position: relative; }
.about-story__media img { --od-ratio: 11 / 7; border-radius: var(--r-lg); }
.about-story__text { display: grid; gap: var(--s4); }
.about-story__text h2 { font-size: var(--fs-xl); }
.about-story__text .btn { justify-self: start; }
.process { display: grid; margin: var(--s5) 0 0; padding: 0; list-style: none; }
.process__row { display: grid; grid-template-columns: 72px minmax(0, 1fr) 220px; gap: var(--s5); align-items: center; padding-block: var(--s5); border-top: 1px solid var(--line); }
.process__row:last-child { border-bottom: 1px solid var(--line); }
.process__num { font-family: var(--f-display); font-size: clamp(36px, 4vw, 52px); color: var(--accent); line-height: 1; }
.process__row h3 { font-size: var(--fs-lg); margin-bottom: var(--s2); }
.process__row p { max-width: 56ch; }
.process__row img { --od-ratio: 4 / 3; border-radius: var(--r-md); }
.sec-title { font-size: var(--fs-xl); margin-bottom: var(--s2); }
.sec-lead { color: var(--muted); max-width: 60ch; }
@media (max-width: 860px) {
  .about-story { grid-template-columns: 1fr; }
  .process__row { grid-template-columns: 48px minmax(0, 1fr); row-gap: var(--s4); }
  .process__row img { grid-column: 2; max-width: 280px; }
}

/* ==========================================================
   PAGE: faq
   ========================================================== */
.faq-layout { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: var(--s6); align-items: start; }
.faq-nav { position: sticky; top: calc(var(--header-h) + 16px); display: grid; gap: var(--s1); }
.faq-nav a { display: flex; align-items: center; gap: var(--s3); min-height: 48px; padding: 0 var(--s4); border-radius: var(--r-md); text-decoration: none; color: var(--ink); font-size: var(--fs-base); }
.faq-nav a .i { color: var(--accent); }
.faq-nav a[aria-current="true"] { background: var(--sand); color: var(--accent); font-weight: 600; }
@media (hover: hover) { .faq-nav a:hover { background: var(--sand); } }
.faq-group { scroll-margin-top: calc(var(--header-h) + 16px); }
.faq-group + .faq-group { margin-top: var(--s7); }
.faq-group h2 { font-size: var(--fs-lg); margin-bottom: var(--s4); display: flex; align-items: center; gap: var(--s3); }
.faq-group h2 .i { color: var(--accent); }
.faq-more { margin-top: var(--s7); background: var(--sand); border-radius: var(--r-lg); padding: clamp(20px, 3vw, 32px); display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: var(--s4); align-items: center; }
.faq-more h2 { font-size: var(--fs-lg); }
.faq-more p { margin-top: var(--s1); }
.faq-more .od-cluster { --od-gap: 12px; justify-content: flex-end; }
@media (max-width: 960px) {
  .faq-layout { grid-template-columns: 1fr; }
  .faq-nav { position: static; display: flex; overflow-x: auto; scrollbar-width: none; gap: var(--s2); margin-inline: calc(-1 * var(--gutter)); padding-inline: var(--gutter); }
  .faq-nav::-webkit-scrollbar { display: none; }
  .faq-nav a { flex: none; border: 1px solid var(--line); border-radius: var(--r-pill); min-height: 44px; }
  .faq-more { grid-template-columns: 1fr; }
  .faq-more .od-cluster { justify-content: flex-start; }
}

/* ---------- WooCommerce ---------- */
/* header: nút giỏ là link; nav/menu di động là <ul><li> của wp_nav_menu */
a.icon-btn { text-decoration: none; }
.nav li, .mnav li { display: contents; }
.footer-links li { display: block; }
.mnav a .i { color: var(--muted); }
/* thẻ sản phẩm: ẩn link "Xem giỏ" WC chèn sau khi thêm giỏ ajax */
.added_to_cart { display: none; }
.p-card__add.loading { opacity: .5; }
/* breadcrumb WC: mục cuối không có aria-current */
.crumbs li:last-child { color: var(--accent); font-weight: 500; }
/* giá */
.price del { color: var(--muted); font-weight: 400; margin-right: var(--s2); }
.price ins { text-decoration: none; }
.pd__price.single_variation { display: none; }
.pd__price.single_variation .price { color: var(--accent); }
.pd__price.single_variation .woocommerce-variation-availability, .pd__price.single_variation .woocommerce-variation-description { display: none; }
/* stepper bọc .quantity của WC */
.stepper .quantity { display: contents; }
.stepper .quantity label { display: none; }
.pd__desc p + p { margin-top: var(--s3); }
/* thông báo WC trên trang sản phẩm (CSS WC tắt ở đây) */
.woocommerce-message, .woocommerce-info, .woocommerce-error { list-style: none; margin: 0; padding: var(--s3) var(--s4); border-radius: var(--r-md); background: var(--sand); border-left: 4px solid var(--accent); font-size: var(--fs-sm); display: flex; flex-wrap: wrap; gap: var(--s2) var(--s4); align-items: center; }
.woocommerce-error { border-left-color: var(--error); color: var(--error); }
.woocommerce-message .button, .woocommerce-info .button { order: 2; margin-left: auto; color: var(--accent); font-weight: 600; text-decoration: none; }
/* phân trang */
.woocommerce-pagination ul { display: flex; justify-content: center; gap: var(--s2); margin-top: var(--s6); }
.woocommerce-pagination a, .woocommerce-pagination span { display: grid; place-items: center; min-width: 40px; height: 40px; border-radius: var(--r-sm); border: 1px solid var(--line-ui); text-decoration: none; color: var(--ink); }
.woocommerce-pagination .current { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
/* cart / checkout / tài khoản: giữ template + CSS WC, chỉ khớp token */
.woocommerce-page main:not(:has(> .banner:first-child)) { padding-block: var(--s7); }
.woocommerce-page .woocommerce { max-width: calc(var(--container) + 2 * var(--gutter)); margin-inline: auto; padding-inline: var(--gutter); }
.woocommerce-page .container .woocommerce { padding-inline: 0; } /* đã nằm trong .container: không thụt thêm gutter */
/* checkout: ô quốc gia (chỉ bán VN, WC in sẵn dạng ẩn) không chiếm hàng; nút đặt hàng to, full chiều ngang */
#billing_country_field, #shipping_country_field { display: none; }
.woocommerce-page .woocommerce #payment #place_order, .woocommerce-page .woocommerce .wc-proceed-to-checkout a.button { float: none; width: 100%; min-height: 56px; border-radius: var(--r-pill); font-size: var(--fs-md); margin-top: var(--s4); font-weight: 500; }
.woocommerce-checkout main h1, .woocommerce-cart main h1 { margin-bottom: var(--s5); }
.woocommerce-page .woocommerce h1, .woocommerce-page .woocommerce h2, .woocommerce-page .woocommerce h3 { font-family: var(--f-display); }
.woocommerce-page .woocommerce .button, .woocommerce-page .woocommerce button.button, .woocommerce-page .woocommerce a.button, .woocommerce-page .woocommerce #place_order { background: var(--accent); color: var(--on-accent); border-radius: var(--r-pill); font-weight: 600; font-family: var(--f-body); padding: 12px 24px; border: 0; }
.woocommerce-page .woocommerce .button:hover, .woocommerce-page .woocommerce #place_order:hover { background: var(--accent-hover); color: var(--on-accent); }
.woocommerce-page .woocommerce .button:disabled, .woocommerce-page .woocommerce .button:disabled[disabled] { background: var(--accent); color: var(--on-accent); opacity: .6; }
.woocommerce-page .woocommerce table.shop_table { border: 1px solid var(--line); border-radius: var(--r-md); border-collapse: separate; }
.woocommerce-page .woocommerce table.shop_table th, .woocommerce-page .woocommerce table.shop_table td { border-color: var(--line); }
.woocommerce-page .woocommerce td.product-name dl.variation { font-size: var(--fs-xs); color: var(--muted); }
.woocommerce-page .woocommerce img.attachment-woocommerce_thumbnail { border-radius: var(--r-sm); }
.woocommerce-page .woocommerce .cart_totals, .woocommerce-page .woocommerce #order_review, .woocommerce-page .woocommerce .woocommerce-checkout-review-order { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: var(--s5); }
.woocommerce-page .woocommerce form .form-row { padding: 0; margin: 0 0 var(--s4); }
.woocommerce-page .woocommerce form .form-row label { font-size: var(--fs-sm); font-weight: 500; color: var(--ink); }
.woocommerce-page .woocommerce form .form-row .input, .woocommerce-page .woocommerce form .form-row .select, .woocommerce-page .woocommerce form .form-row .textarea { width: 100%; }
.woocommerce-page .woocommerce form .form-row .input-text, .woocommerce-page .woocommerce form .form-row select, .woocommerce-page .woocommerce form .form-row textarea { border: 1px solid var(--line-ui); border-radius: var(--r-sm); background: var(--surface); padding: 10px 14px; min-height: 48px; font-size: var(--fs-base); color: var(--ink); }
.woocommerce-page .woocommerce form .form-row .input-text:focus, .woocommerce-page .woocommerce form .form-row select:focus, .woocommerce-page .woocommerce form .form-row textarea:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 16%, transparent); }
.woocommerce-page .woocommerce form .form-row.woocommerce-invalid .input-text { border-color: var(--error); }
.woocommerce-page .woocommerce #payment .payment_box, .woocommerce-page .woocommerce #payment { border-radius: var(--r-md); }
/* nút Cập nhật giỏ: WC bật lại khi đổi số lượng, lúc disabled thì ẩn thay vì mờ */
.woocommerce-page button[name="update_cart"]:disabled { display: none; }
.woocommerce-page .woocommerce table.shop_table td.product-remove a { width: 44px; height: 44px; display: inline-grid; place-items: center; border-radius: 50%; font-size: 22px; color: var(--muted); }
/* WC ép color: var(--wc-red) !important -> đổi biến trong phạm vi ô xoá */
.woocommerce-page td.product-remove { --wc-red: var(--muted); }
@media (hover: hover) { .woocommerce-page td.product-remove:hover { --wc-red: var(--error); } }
/* hàng actions của bảng giỏ chỉ còn nút Cập nhật (ẩn khi disabled) -> ẩn cả hàng cho tới khi WC bật nút */
.woocommerce-page .woocommerce table.shop_table td.actions:not(:has(button:not(:disabled))) { display: none; }

.woocommerce-page .woocommerce form .form-row .required { color: var(--error); text-decoration: none; }
.woocommerce-page .woocommerce form .form-row.woocommerce-invalid .input { border-color: var(--error); }
.woocommerce-page .woocommerce .woocommerce-error, .woocommerce-page .woocommerce .woocommerce-message, .woocommerce-page .woocommerce .woocommerce-info { border-top: 0; }
.woocommerce-page .woocommerce .woocommerce-message::before, .woocommerce-page .woocommerce .woocommerce-info::before, .woocommerce-page .woocommerce .woocommerce-error::before { display: none; }
.woocommerce-page .woocommerce #payment { background: var(--sand); border-radius: var(--r-md); }
.woocommerce-page .woocommerce #payment div.payment_box { background: var(--surface); color: var(--body); }
.woocommerce-page .woocommerce #payment div.payment_box::before { border-bottom-color: var(--surface); }
.woocommerce-page .woocommerce .cart-empty, .woocommerce-page .woocommerce .return-to-shop { text-align: center; }
.woocommerce-page .woocommerce .woocommerce-Price-amount { color: var(--accent); font-weight: 600; }
.woocommerce-page .woocommerce a { color: var(--accent); }
/* nav desktop: <nav class="nav"><ul><li> của wp_nav_menu */
.nav > ul { display: contents; }
/* trang sản phẩm: link liên hệ đủ 44px, dòng đặt trước, đánh giá */
.pd__note a { padding-block: 10px; } /* vùng chạm đủ mà không tách dòng */
.pd__lead-time { display: flex; align-items: center; gap: var(--s2); font-size: var(--fs-sm); color: var(--muted); }
.pd__lead-time .i { color: var(--accent); }
.rating a { color: var(--accent); min-height: 32px; display: inline-flex; align-items: center; }
.star-rating { position: relative; display: inline-block; width: 5.6em; height: 1.3em; line-height: 1.3; overflow: hidden; color: var(--star); font-size: var(--fs-sm); letter-spacing: 2px; }
.star-rating::before { content: "☆☆☆☆☆"; position: absolute; left: 0; top: 0; }
.star-rating > span { position: absolute; left: 0; top: 0; overflow: hidden; white-space: nowrap; color: transparent; }
.star-rating > span::before { content: "★★★★★"; color: var(--star); position: absolute; left: 0; top: 0; }
.reviews { display: grid; gap: var(--s5); }
.reviews__list { display: grid; gap: var(--s4); }
.reviews__list .comment_container { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-md); padding: var(--s4) var(--s5); }
.reviews__list .meta { display: flex; flex-wrap: wrap; gap: var(--s2); font-size: var(--fs-sm); color: var(--muted); margin-top: var(--s1); }
.reviews__list .meta strong { color: var(--ink); }
.reviews__list .description { margin-top: var(--s2); }
.review-form { display: grid; gap: var(--s4); background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-lg); padding: clamp(20px, 3vw, 32px); }
.review-form .comment-reply-title { font-size: var(--fs-lg); }
.review-form .form-submit { margin: 0; }
.review-form .comment-form-rating { flex-wrap: nowrap; gap: var(--s2); }
.review-form .comment-form-rating .opt { flex: 1; max-width: 88px; }
.review-form .comment-form-rating .opt span { min-height: 44px; padding-inline: var(--s2); white-space: nowrap; }
.comment-form-cookies-consent { display: flex; gap: var(--s2); align-items: center; font-size: var(--fs-sm); color: var(--muted); }
/* thanh Gọi / Nhắn Zalo cố định ở mobile (ngoại lệ: CSS layout của theme đặt trong khối WC theo phân công) */
.quickbar { display: none; }
.quickbar-drawer { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s2); margin-top: var(--s3); }
.quickbar-drawer .btn { min-height: 48px; padding-inline: var(--s3); }
@media (max-width: 860px) {
  .quickbar { display: grid; grid-template-columns: 1fr 1fr; gap: var(--s2); position: fixed; left: 0; right: 0; bottom: 0; z-index: 35; padding: var(--s2) var(--gutter) calc(var(--s2) + env(safe-area-inset-bottom)); background: color-mix(in srgb, var(--bg) 96%, transparent); backdrop-filter: blur(8px); border-top: 1px solid var(--line); }
  .quickbar .btn { min-height: 56px; }
  body.has-quickbar { padding-bottom: calc(84px + env(safe-area-inset-bottom)); }
}
/* giỏ: ô số lượng đủ 44px, ảnh thumbnail */
.woocommerce-page .woocommerce .quantity .qty { min-height: 44px; min-width: 72px; padding: 0 var(--s2); border: 1px solid var(--line-ui); border-radius: var(--r-sm); text-align: center; }
.woocommerce-page .woocommerce table.shop_table td.product-thumbnail img { width: 72px; height: 72px; object-fit: cover; }
/* trang cảm ơn */
.soons-thankyou { display: grid; gap: var(--s3); justify-items: start; background: var(--sand); border-radius: var(--r-md); padding: var(--s5); margin: var(--s5) 0; }
/* checkout: mô tả dưới ô ngày nhận hiện tĩnh thay vì tooltip WC */
.woocommerce-page .woocommerce form .form-row .description { position: static; display: block; background: none; color: var(--muted); padding: 0; margin-top: var(--s1); font-size: var(--fs-xs); }
.woocommerce-page .woocommerce form .form-row .description::before { display: none; }
/* logo tuỳ chọn trong brand__mark, bản đồ nhúng (nội dung từ Cài đặt tiệm) */
.brand__logo { width: 100%; height: 100%; object-fit: cover; border-radius: 50%; }
.map-head { display: flex; align-items: center; justify-content: space-between; gap: var(--s3); flex-wrap: wrap; margin-bottom: var(--s4); }
.map { display: block; border-radius: var(--r-md); overflow: hidden; border: 1px solid var(--line); }
.map iframe { display: block; width: 100%; aspect-ratio: 1010 / 420; border: 0; }
/* có bản đồ (Cài đặt tiệm > link Google Maps): bản đồ trái, giờ mở cửa phải */
@media (min-width: 961px) { .contact-row2:has(> .card) { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: var(--s5); } .contact-row2:has(> .card) .hours { grid-template-columns: 1fr; } }
/* WP/WC dùng .screen-reader-text (CSS block-library đã bỏ) */
.screen-reader-text { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
/* honeypot chống spam form (inc/forms.php): ẩn khỏi người, bot vẫn điền */
.hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }
.cf-turnstile { margin: var(--s2) 0; }
