/* ============================================
   鄉田小舖 GoGoFood Taiwan - Main Stylesheet
   Single stylesheet for the whole site. Page-specific
   blocks live at the bottom under clearly marked sections.
   Fonts are loaded via <link> in each page's <head>.
   ============================================ */

/* ---- CSS Variables ---- */
:root {
  /* Surfaces — one light, one dark. Sections alternate between them.
     bg-sage / bg-warm are component tints only, never full sections. */
  --bg-base: #FBFAF5;
  --bg-dark: #3E2723;
  --bg-sage: #E8EDE3;
  --bg-warm: #F2EBDD;

  /* Terracotta: darkened from #D16A48 so white text on it clears
     WCAG AA (5.17:1 vs 3.58:1 before). Used as chip/button fill and as ink. */
  --terracotta: #B0512F;
  --terracotta-hover: #94411F;

  --text-primary: #3E2723;
  --text-secondary: #6D4C41;

  /* Amber is a BACKGROUND and UNDERLINE colour. It never sets text on a
     light surface — 2.27:1. Use --amber-ink there, or --accent-green. */
  --accent-amber: #D4A017;
  --amber-ink: #8A6A0E;      /* 4.84:1 on --bg-base */
  --amber-on-dark: #E8B33C;  /* 7.20:1 on --bg-dark */
  --accent-green: #556B2F;   /* 5.69:1 on --bg-base */

  /* Ink on the dark surface */
  --on-dark: #FBFAF5;        /* 13.23:1 */
  --on-dark-muted: #C9B7A6;  /*  7.11:1 */
  --on-dark-faint: #B9A695;  /*  5.89:1 */
  --on-dark-rule: rgba(255, 255, 255, 0.14);

  --white: #FFFFFF;

  /* Typography — webfonts first, system CJK as the fallback chain */
  --font-serif: "Noto Serif TC", "Songti TC", "Source Han Serif TC", "MingLiU", serif;
  --font-sans: "Noto Sans TC", "PingFang TC", "Microsoft JhengHei", sans-serif;
  --font-kai: "Noto Serif TC", "Kaiti TC", "DFKai-SB", serif;

  /* Spacing */
  --section-gap: 120px;
  --container-max: 1280px;
  --container-pad: 24px;
  --nav-height: 72px;
  --cat-strip-height: 44px;

  /* Border Radius */
  --radius-lg: 4px;
  --radius-md: 4px;
  --radius-sm: 4px;

  /* Shadows */
  --shadow-sm: 0 2px 8px rgba(62, 39, 35, 0.06);
  --shadow-md: 0 4px 16px rgba(62, 39, 35, 0.10);
  --shadow-lg: 0 8px 24px rgba(62, 39, 35, 0.12);

  /* Transitions */
  --transition-fast: 0.2s ease;
  --transition-base: 0.3s ease;
  --transition-slow: 0.4s ease;
}

/* ---- Reset & Base ---- */
*, *::before, *::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

html {
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--nav-height) + 16px);
}

body {
  font-family: var(--font-sans);
  font-size: 16px;
  line-height: 1.75;
  color: var(--text-primary);
  background-color: var(--bg-base);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Locked while the mobile nav panel is open */
body.nav-open {
  overflow: hidden;
}

img {
  max-width: 100%;
  height: auto;
  display: block;
}

a {
  color: inherit;
  text-decoration: none;
  transition: color var(--transition-fast);
}

button {
  cursor: pointer;
  border: none;
  background: none;
  font-family: inherit;
  color: inherit;
}

/* ---- Focus ---- */
:focus-visible {
  outline: 2px solid var(--amber-ink);
  outline-offset: 3px;
  border-radius: 2px;
}

.hero :focus-visible,
.footer :focus-visible,
.field-band :focus-visible,
.cat-strip :focus-visible {
  outline-color: var(--accent-amber);
}

/* ---- Layout ---- */
/* 產地誌 wrappers share the container grid, but keep the header's fixed
   24px gutter at every width so blog content aligns exactly with the
   nav/footer edges. Only .container widens its gutter on larger screens. */
.container,
.post__container,
.post__hero,
.post-related {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 var(--container-pad);
}

@media (min-width: 768px) {
  .container {
    padding: 0 48px;
  }
}

@media (min-width: 1024px) {
  .container {
    padding: 0 80px;
  }
}

/* Blog landing containers also match the header gutter (the higher
   specificity here overrides the responsive bumps above). */
.blog-hero .container,
.column-list-section .container {
  padding: 0 var(--container-pad);
}

@media (max-width: 768px) {
  :root {
    --section-gap: 80px;
  }
}

/* ---- Typography ---- */
.text-h1 {
  font-family: var(--font-serif);
  font-size: clamp(36px, 5vw, 48px);
  line-height: 1.2;
  font-weight: 700;
}

/* ---- Navigation ---- */
.nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: var(--nav-height);
  z-index: 1000;
  transition: background-color var(--transition-base),
              backdrop-filter var(--transition-base);
}

.nav--transparent {
  background-color: transparent;
}

.nav--scrolled {
  background-color: var(--bg-base);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
}

.nav__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 var(--container-pad);
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

.nav__logo {
  display: flex;
  align-items: center;
  gap: 12px;
  font-family: var(--font-serif);
  font-size: 20px;
  font-weight: 600;
  color: var(--text-primary);
}

.nav__logo-mark {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
  display: block;
}

.nav__menu {
  display: flex;
  align-items: center;
  gap: 32px;
  list-style: none;
}

.nav__menu a {
  font-size: 15px;
  font-weight: 500;
  color: var(--text-primary);
  position: relative;
  padding-bottom: 4px;
}

.nav__menu a::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 0;
  height: 2px;
  background-color: var(--accent-amber);
  transition: width var(--transition-base);
}

.nav__menu a:hover::after,
.nav__menu a.active::after {
  width: 100%;
}

.nav__menu a:hover {
  color: var(--amber-ink);
}

/* Homepage: the bar overlays the dark hero while transparent, so switch to
   light text to keep the logo and menu legible */
.home .nav--transparent .nav__logo,
.home .nav--transparent .nav__menu a {
  color: var(--white);
  text-shadow: 0 1px 10px rgba(62, 39, 35, 0.5);
}

.home .nav--transparent .nav__menu a:hover {
  color: var(--amber-on-dark);
}

.home .nav--transparent .nav__hamburger span {
  background-color: var(--white);
}

.nav__hamburger {
  display: none;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: 40px;
  height: 40px;
  padding: 8px;
  cursor: pointer;
}

/* The X is built in two beats rather than one blended transform: opening
   slides the outer bars together, *then* rotates them; closing unwinds the
   rotation first, then slides them back apart. Hence `translate`/`rotate` as
   separate properties — a single `transform` can't stagger its own parts. */
.nav__hamburger span {
  display: block;
  width: 24px;
  height: 2px;
  background-color: var(--text-primary);
  transition: rotate 0.18s ease,
              translate 0.15s ease 0.16s,
              opacity 0.12s ease 0.22s,
              background-color var(--transition-base);
}

.nav__hamburger[aria-expanded="true"] span {
  transition: translate 0.15s ease,
              rotate 0.18s ease 0.13s,
              opacity 0.1s ease,
              background-color var(--transition-base);
}

.nav__hamburger[aria-expanded="true"] span:nth-child(1) {
  translate: 0 7px;
  rotate: 45deg;
}

.nav__hamburger[aria-expanded="true"] span:nth-child(2) {
  opacity: 0;
}

.nav__hamburger[aria-expanded="true"] span:nth-child(3) {
  translate: 0 -7px;
  rotate: -45deg;
}

/* The bar is opaque once the panel is open, so the bars must be dark */
.home .nav--transparent .nav__hamburger[aria-expanded="true"] span {
  background-color: var(--text-primary);
}

/* Mobile Navigation */
@media (max-width: 768px) {
  .nav__menu {
    /* Stays in the layout instead of `display: none` so open/close can
       animate. `visibility` is what actually takes it out of play while
       closed — no clicks, no tab stops — and its transition is delayed so
       the panel is still painted while it fades out. */
    display: flex;
    visibility: hidden;
    opacity: 0;
    translate: 0 -12px;
    position: absolute;
    top: var(--nav-height);
    left: 0;
    right: 0;
    bottom: auto;
    height: calc(100vh - var(--nav-height));
    height: calc(100dvh - var(--nav-height));
    background-color: var(--bg-base);
    flex-direction: column;
    align-items: flex-start;
    padding: 40px;
    gap: 24px;
    overflow-y: auto;
    transition: opacity 0.22s ease,
                translate 0.26s cubic-bezier(0.4, 0, 1, 1),
                visibility 0s linear 0.26s;
  }

  .nav__menu.open {
    visibility: visible;
    opacity: 1;
    translate: 0;
    transition: opacity 0.24s ease,
                translate 0.32s cubic-bezier(0.22, 1, 0.36, 1),
                visibility 0s;
  }

  /* Links trail the panel in. On close they leave together — a reversed
     stagger reads as hesitation. */
  .nav__menu li {
    opacity: 0;
    translate: 0 -10px;
    transition: opacity 0.15s ease, translate 0.15s ease;
  }

  .nav__menu.open li {
    opacity: 1;
    translate: 0;
    transition: opacity 0.28s ease,
                translate 0.34s cubic-bezier(0.22, 1, 0.36, 1);
  }

  .nav__menu.open li:nth-child(1) { transition-delay: 0.08s; }
  .nav__menu.open li:nth-child(2) { transition-delay: 0.13s; }
  .nav__menu.open li:nth-child(3) { transition-delay: 0.18s; }
  .nav__menu.open li:nth-child(4) { transition-delay: 0.23s; }
  .nav__menu.open li:nth-child(5) { transition-delay: 0.28s; }

  .nav__menu a {
    font-size: 20px;
  }

  /* The panel is a light surface whether or not the bar behind it is still
     transparent, so its links are always dark here. Keying this off `.open`
     would flash them white the moment the class is dropped, i.e. for the
     whole close animation. */
  .home .nav--transparent .nav__menu a {
    color: var(--text-primary);
    text-shadow: none;
  }

  .home .nav--transparent .nav__menu a:hover {
    color: var(--amber-ink);
  }

  .nav__hamburger {
    display: flex;
  }

  /* Panel is opaque; the transparent-hero bar needs a matching backdrop */
  .home .nav--transparent:has(.nav__menu.open) {
    background-color: var(--bg-base);
  }

  /* ...and the wordmark sits on that backdrop, so it can't stay hero-white */
  .home .nav--transparent:has(.nav__menu.open) .nav__logo {
    color: var(--text-primary);
    text-shadow: none;
  }
}

@media (prefers-reduced-motion: reduce) {
  .nav__menu,
  .nav__menu.open,
  .nav__menu li,
  .nav__menu.open li,
  .nav__hamburger span,
  .nav__hamburger[aria-expanded="true"] span {
    transition: none;
  }

  .nav__menu.open li:nth-child(n) {
    transition-delay: 0s;
  }
}

/* ---- Buttons ---- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 12px 28px;
  font-size: 15px;
  font-weight: 600;
  border-radius: var(--radius-md);
  transition: background-color var(--transition-base),
              color var(--transition-base),
              border-color var(--transition-base),
              transform var(--transition-base),
              box-shadow var(--transition-base);
  cursor: pointer;
}

.btn--primary {
  background-color: var(--terracotta);
  color: var(--white);
  border: 2px solid var(--terracotta);
}

.btn--primary:hover {
  background-color: var(--terracotta-hover);
  border-color: var(--terracotta-hover);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}

.btn--secondary {
  background-color: transparent;
  color: var(--text-primary);
  border: 2px solid var(--text-primary);
}

.btn--secondary:hover {
  background-color: var(--text-primary);
  color: var(--white);
  transform: translateY(-2px);
}

.btn--outline-green {
  background-color: transparent;
  color: var(--accent-green);
  border: 2px solid var(--accent-green);
}

.btn--outline-green:hover {
  background-color: var(--accent-green);
  color: var(--white);
  transform: translateY(-2px);
  box-shadow: var(--shadow-md);
}

/* ---- Cards ---- */
.card {
  background-color: var(--white);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
  transition: box-shadow var(--transition-base),
              transform var(--transition-base);
}

.card:hover {
  box-shadow: var(--shadow-lg);
  transform: translateY(-4px);
}

.card__image {
  position: relative;
  overflow: hidden;
  aspect-ratio: 4/3;
}

.card__image img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--transition-slow);
}

.card:hover .card__image img {
  transform: scale(1.05);
}

.card__content {
  padding: 20px 24px 24px;
}

.card__title {
  font-size: 18px;
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 6px;
}

.card__meta {
  font-size: 13px;
  color: var(--text-secondary);
  margin-bottom: 4px;
}

.card__price {
  display: flex;
  align-items: baseline;
  gap: 8px;
}

.card__price-current {
  font-size: 20px;
  font-weight: 700;
  color: var(--terracotta);
}

.card__price-original {
  font-size: 14px;
  color: var(--text-secondary);
  text-decoration: line-through;
}

/* ---- Product Grid ---- */
.product-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 32px;
}

@media (max-width: 1024px) {
  .product-grid {
    grid-template-columns: repeat(2, 1fr);
    gap: 24px;
  }
}

@media (max-width: 480px) {
  .product-grid {
    grid-template-columns: 1fr;
  }
}

/* Category page grid — up to 4 columns, but never stretch a short row */
.product-grid--4 {
  grid-template-columns: repeat(auto-fit, minmax(240px, 280px));
  gap: 24px;
  justify-content: start;
}

@media (max-width: 480px) {
  .product-grid--4 {
    grid-template-columns: 1fr;
  }
}

/* ---- Tags ---- */
.tag {
  display: inline-block;
  padding: 4px 12px;
  border-radius: var(--radius-sm);
  font-size: 12px;
  font-weight: 600;
}

.tag--primary {
  background-color: var(--terracotta);
  color: var(--white);
}

.tag--green {
  background-color: var(--accent-green);
  color: var(--white);
}

.tag--outline {
  background-color: transparent;
  border: 1px solid rgba(62, 39, 35, 0.15);
  color: var(--text-secondary);
}

/* ---- Forms ---- */
.form-group {
  margin-bottom: 20px;
}

.form-label {
  display: block;
  font-size: 14px;
  font-weight: 500;
  color: var(--text-primary);
  margin-bottom: 8px;
}

.form-input,
.form-select,
.form-textarea {
  width: 100%;
  height: 48px;
  padding: 0 16px;
  border: 1px solid rgba(62, 39, 35, 0.15);
  border-radius: var(--radius-md);
  font-family: var(--font-sans);
  font-size: 15px;
  color: var(--text-primary);
  background-color: var(--white);
  transition: border-color var(--transition-fast);
}

.form-input:focus,
.form-select:focus,
.form-textarea:focus {
  outline: none;
  border-color: var(--amber-ink);
}

.form-textarea {
  height: auto;
  padding: 12px 16px;
  resize: vertical;
  min-height: 140px;
}

/* ---- Footer (dark surface) ---- */
.footer {
  background-color: var(--bg-dark);
  color: var(--on-dark-muted);
  padding: 80px 0 40px;
}

.footer__inner {
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 var(--container-pad);
}

.footer__top {
  display: grid;
  grid-template-columns: 1.5fr repeat(3, 1fr);
  gap: 48px;
  padding-bottom: 48px;
  border-bottom: 1px solid var(--on-dark-rule);
}

.footer__brand {
  max-width: 280px;
}

.footer__brand-name {
  font-family: var(--font-serif);
  font-size: 24px;
  font-weight: 600;
  color: var(--on-dark);
  margin-bottom: 12px;
}

.footer__brand-desc {
  font-size: 14px;
  color: var(--on-dark-muted);
  line-height: 1.7;
}

.footer__column-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--on-dark);
  margin-bottom: 20px;
}

.footer__links {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.footer__links a {
  font-size: 14px;
  color: var(--on-dark-muted);
  transition: color var(--transition-fast);
}

.footer__links a:hover {
  color: var(--amber-on-dark);
}

.footer__bottom {
  padding-top: 32px;
  text-align: center;
}

.footer__legal {
  display: flex;
  justify-content: center;
  gap: 24px;
  margin-bottom: 16px;
}

.footer__legal a {
  font-size: 13px;
  color: var(--on-dark-muted);
}

.footer__legal a:hover {
  color: var(--amber-on-dark);
}

.footer__copyright {
  font-size: 12px;
  color: var(--on-dark-faint);
}

@media (max-width: 768px) {
  .footer__top {
    grid-template-columns: 1fr 1fr;
    gap: 32px;
  }

  .footer__brand {
    grid-column: 1 / -1;
    max-width: none;
  }
}

@media (max-width: 480px) {
  .footer__top {
    grid-template-columns: 1fr;
  }
}

/* ---- Animations ---- */
@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(30px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

/* The fade completes by 60% while the scale settles over the full run,
   so the reveal reads quick but the zoom lingers. */
@keyframes zoomSettle {
  from {
    opacity: 0;
    transform: scale(1.06);
  }
  60% {
    opacity: 1;
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* ---- Scroll reveal ----
   Every "hidden until revealed" state is scoped under .js, which is set by an
   inline script in <head>. Without JS — or if the script fails — nothing is
   ever hidden and the page renders fully. */
.js .reveal,
.js .reveal-fade,
.js .reveal-zoom {
  opacity: 0;
  will-change: opacity, transform;
}

.js .reveal.is-visible {
  animation: fadeInUp 0.8s cubic-bezier(0.22, 1, 0.36, 1) both;
  animation-delay: calc(var(--reveal-order, 0) * 80ms);
}

/* Transform-free variant, for elements whose transform is load-bearing
   (e.g. the field-band caption's translateX centring). */
.js .reveal-fade.is-visible {
  animation: fadeIn 0.8s ease both;
  animation-delay: calc(var(--reveal-order, 0) * 80ms);
}

/* Full-bleed imagery variant: fade in with a slow zoom-settle. The image
   starts oversized, so it needs an overflow-hidden wrapper (see
   .field-band picture) to keep the overshoot from spilling out. */
.js .reveal-zoom.is-visible {
  animation: zoomSettle 1.1s cubic-bezier(0.22, 1, 0.36, 1) both;
  animation-delay: calc(var(--reveal-order, 0) * 80ms);
}

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  .js .reveal,
  .js .reveal-fade,
  .js .reveal-zoom,
  .js .reveal.is-visible,
  .js .reveal-fade.is-visible,
  .js .reveal-zoom.is-visible {
    opacity: 1;
    animation: none;
  }
}

/* ---- Scrollbar ---- */
::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: var(--bg-base);
}

::-webkit-scrollbar-thumb {
  background: var(--text-secondary);
  border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
  background: var(--text-primary);
}

/* ---- Section Headers ---- */
.section-header {
  text-align: center;
  margin-bottom: 60px;
}

.section-header__title {
  font-family: var(--font-serif);
  font-size: clamp(36px, 5vw, 48px);
  color: var(--text-primary);
  margin-bottom: 12px;
}

.section-header__subtitle {
  font-family: var(--font-kai);
  font-size: 18px;
  color: var(--text-secondary);
}

/* ---- Category Sub-header (cat-strip) ---- */
.cat-strip {
  position: fixed;
  top: var(--nav-height);
  left: 0;
  right: 0;
  z-index: 999;
  height: var(--cat-strip-height);
  background-color: var(--accent-green);
  border-top: 1px solid rgba(255, 255, 255, 0.14);
  box-shadow: var(--shadow-sm);
}

.cat-strip ul {
  display: flex;
  align-items: center;
  gap: 2px;
  height: 100%;
  max-width: var(--container-max);
  margin: 0 auto;
  padding: 0 16px;
  list-style: none;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}

.cat-strip ul::-webkit-scrollbar {
  display: none;
}

.cat-strip a {
  display: flex;
  align-items: center;
  height: 30px;
  padding: 0 14px;
  border-radius: var(--radius-sm);
  color: rgba(255, 255, 255, 0.85);
  font-size: 14px;
  font-weight: 500;
  white-space: nowrap;
  text-decoration: none;
  transition: background-color var(--transition-fast), color var(--transition-fast);
}

.cat-strip a:hover {
  background-color: rgba(255, 255, 255, 0.14);
  color: var(--white);
}

.cat-strip a.active,
.cat-strip a[aria-current="page"] {
  background-color: var(--bg-base);
  color: var(--accent-green);
  font-weight: 700;
}

/* ---- Breadcrumb ---- */
.breadcrumb {
  font-size: 14px;
  color: var(--text-secondary);
  margin-bottom: 24px;
}

.breadcrumb a {
  color: var(--text-secondary);
  transition: color var(--transition-fast);
}

.breadcrumb a:hover {
  color: var(--amber-ink);
}

.breadcrumb--center {
  text-align: center;
}

.breadcrumb__sep {
  margin: 0 8px;
  color: rgba(62, 39, 35, 0.3);
}

/* ---- FAQ Accordion ---- */
.faq-item {
  background-color: var(--white);
  border-radius: var(--radius-sm);
  margin-bottom: 12px;
  overflow: hidden;
}

.faq-question {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 16px;
  width: 100%;
  padding: 20px 24px;
  text-align: left;
  font-size: 16px;
  font-weight: 500;
  color: var(--text-primary);
}

.faq-icon {
  font-size: 24px;
  line-height: 1;
  color: var(--text-secondary);
  transition: transform var(--transition-base);
  flex-shrink: 0;
}

.faq-question[aria-expanded="true"] .faq-icon {
  transform: rotate(45deg);
}

.faq-answer {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows var(--transition-base), opacity var(--transition-base);
  opacity: 0;
}

.faq-answer > div {
  overflow: hidden;
}

.faq-item.active .faq-answer {
  grid-template-rows: 1fr;
  opacity: 1;
}

.faq-answer-inner {
  padding: 0 24px 20px;
  font-size: 15px;
  color: var(--text-secondary);
  line-height: 1.75;
}

/* Without JS the accordion can't toggle, so leave every answer open. */
html:not(.js) .faq-answer {
  grid-template-rows: 1fr;
  opacity: 1;
}

html:not(.js) .faq-icon {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  .faq-answer {
    transition: none;
  }
}

/* ---- Contact Info ---- */
.contact-info__item {
  display: flex;
  gap: 16px;
  margin-bottom: 32px;
}

.contact-info__icon {
  width: 48px;
  height: 48px;
  border-radius: var(--radius-md);
  background-color: var(--bg-sage);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--accent-green);
  flex-shrink: 0;
}

.contact-info__icon svg {
  width: 22px;
  height: 22px;
}

.contact-info__content-title {
  font-size: 14px;
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 4px;
}

.contact-info__content-text {
  font-size: 18px;
  color: var(--text-primary);
  margin-bottom: 2px;
}

.contact-info__content-note {
  font-size: 13px;
  color: var(--text-secondary);
}

/* ---- Origin Badge ---- */
.origin-badge {
  position: absolute;
  top: 12px;
  left: 12px;
  z-index: 1;
  background-color: rgba(62, 39, 35, 0.75);
  backdrop-filter: blur(4px);
  color: var(--white);
  font-size: 12px;
  font-weight: 500;
  padding: 4px 10px;
  border-radius: var(--radius-sm);
}

.origin-badge--green {
  background-color: rgba(64, 82, 34, 0.85);
}

/* ---- Value Cards ---- */
.value-cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 32px;
}

.value-card {
  background-color: var(--white);
  border-radius: var(--radius-lg);
  padding: 40px 32px;
  text-align: center;
  box-shadow: var(--shadow-sm);
}

.value-card__icon {
  width: 48px;
  height: 48px;
  margin: 0 auto 20px;
  color: var(--accent-green);
}

.value-card__title {
  font-size: 20px;
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 12px;
}

.value-card__desc {
  font-size: 15px;
  color: var(--text-secondary);
  line-height: 1.7;
}

@media (max-width: 768px) {
  .value-cards {
    grid-template-columns: 1fr;
  }
}

/* ---- Location Grid ---- */
.location-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 24px;
}

.location-item {
  background-color: var(--bg-sage);
  border-radius: var(--radius-sm);
  padding: 20px 24px;
}

.location-item__name {
  font-size: 16px;
  font-weight: 600;
  color: var(--text-primary);
  margin-bottom: 4px;
}

.location-item__products {
  font-size: 14px;
  color: var(--text-secondary);
}

@media (max-width: 768px) {
  .location-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ============================================
   Home page
   ============================================ */

/* ---- Hero ---- */
.hero {
  position: relative;
  height: 100vh;
  width: 100%;
  overflow: hidden;
  background-color: var(--bg-dark);
}

.hero__slider {
  position: absolute;
  inset: 0;
  display: flex;
}

.hero__slider-left {
  position: absolute;
  left: 0;
  width: 45%;
  height: 100%;
  overflow: hidden;
}

.hero__slider-right {
  position: absolute;
  right: 0;
  width: 55%;
  height: 100%;
  overflow: hidden;
}

.hero__slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity 0.5s ease;
}

.hero__slide.active {
  opacity: 1;
}

.hero__slide img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transform: scale(1.1);
  transition: transform 6s ease;
}

.hero__slide.active img {
  transform: scale(1);
}

.hero__slider-left .hero__slide img {
  clip-path: circle(38% at 50% 50%);
}

.hero__overlay {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    to right,
    rgba(62, 39, 35, 0.6) 0%,
    rgba(62, 39, 35, 0.3) 50%,
    rgba(62, 39, 35, 0.5) 100%
  );
  z-index: 2;
}

/* A dedicated scrim behind the wordmark, so the title never depends on
   whatever happens to be in the slide behind it. */
.hero__scrim {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: min(1100px, 92vw);
  height: min(620px, 70vh);
  z-index: 3;
  pointer-events: none;
  background: radial-gradient(
    ellipse at center,
    rgba(40, 22, 15, 0.72) 0%,
    rgba(40, 22, 15, 0.52) 42%,
    rgba(40, 22, 15, 0) 72%
  );
}

.hero__content {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 10;
  text-align: center;
  color: var(--white);
  padding: 0 24px;
}

.hero__subtitle {
  font-family: var(--font-kai);
  font-size: 18px;
  font-weight: 600;
  letter-spacing: 0.15em;
  color: #F6C651;
  text-shadow: 0 2px 10px rgba(40, 22, 15, 0.7);
  margin-bottom: 24px;
}

.hero__subtitle::before,
.hero__subtitle::after {
  content: ' \2726 ';
  font-size: 12px;
}

.hero__title {
  font-family: var(--font-serif);
  font-size: clamp(48px, 8vw, 96px);
  line-height: 1.1;
  font-weight: 700;
  text-shadow: 0 2px 20px rgba(62, 39, 35, 0.5);
}

.hero__title-line {
  display: block;
}

.hero__title-line:nth-child(2) {
  font-size: 0.6em;
}

/* Entrance animation only when JS confirmed it can run */
.js .hero__subtitle,
.js .hero__title-line {
  opacity: 0;
  animation: fadeInUp 0.9s ease forwards;
}

.js .hero__subtitle { animation-delay: 0.35s; }
.js .hero__title-line:nth-child(1) { animation-delay: 0.5s; }
.js .hero__title-line:nth-child(2) { animation-delay: 0.7s; }
.js .hero__title-line:nth-child(3) { animation-delay: 0.9s; }

@media (prefers-reduced-motion: reduce) {
  .js .hero__subtitle,
  .js .hero__title-line {
    opacity: 1;
    animation: none;
  }

  .hero__slide img,
  .hero__slide.active img {
    transform: none;
    transition: none;
  }
}

.hero__dots {
  position: absolute;
  left: 50%;
  bottom: 40px;
  transform: translateX(-50%);
  z-index: 10;
  display: flex;
  align-items: center;
  gap: 12px;
}

.hero__dot {
  width: 10px;
  height: 10px;
  padding: 0;
  border-radius: 999px;
  background-color: rgba(255, 255, 255, 0.4);
  cursor: pointer;
  transition: width var(--transition-base),
              background-color var(--transition-base),
              transform var(--transition-base);
}

.hero__dot:hover {
  background-color: rgba(255, 255, 255, 0.75);
  transform: scale(1.15);
}

.hero__dot.active {
  width: 32px;
  background-color: var(--accent-amber);
  transform: none;
}

/* ---- Stalls / Category Mosaic ---- */
.stalls {
  background-color: var(--bg-base);
  padding: var(--section-gap) 0;
}

.stall-mosaic {
  display: grid;
  grid-template-columns: 1.35fr 1fr 1fr;
  grid-auto-rows: 190px;
  gap: 16px;
}

.stall-tile {
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  border-radius: var(--radius-lg);
  overflow: hidden;
  text-decoration: none;
  background-color: var(--bg-sage);
  box-shadow: var(--shadow-sm);
  transition: transform var(--transition-base), box-shadow var(--transition-base);
}

.stall-tile img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--transition-slow);
}

.stall-tile::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(46, 31, 27, 0.9) 0%, rgba(46, 31, 27, 0.25) 42%, transparent 68%);
}

.stall-tile:hover {
  transform: translateY(-4px);
  box-shadow: var(--shadow-lg);
}

.stall-tile:hover img {
  transform: scale(1.05);
}

.stall-label {
  position: relative;
  z-index: 1;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 8px;
  padding: 14px 16px;
  color: var(--white);
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: 16px;
  letter-spacing: 1px;
}

.stall-label small {
  font-weight: 400;
  font-size: 12px;
  letter-spacing: 0.5px;
  color: var(--accent-amber);
}

.stall-tile--lead {
  grid-row: span 2;
}

.stall-tile--lead .stall-label {
  padding: 16px 18px;
  font-size: 20px;
}

.stall-more {
  margin-top: 28px;
  text-align: center;
  font-family: var(--font-kai);
  font-size: 15px;
  color: var(--text-secondary);
}

.stall-more a {
  color: var(--accent-green);
  font-weight: 600;
  text-decoration: none;
  border-bottom: 1px solid transparent;
  transition: border-color var(--transition-fast);
}

.stall-more a:hover {
  border-bottom-color: currentColor;
}

/* ---- Field Band ----
   The caption is the one place the brand commits to a full deep-brown
   surface. Its translateX(-50%) does the centring, so it must never be
   handed to a transform-based animation — see .reveal-fade. */
.field-band {
  position: relative;
}

/* Clips the .reveal-zoom overshoot — the photo enters at scale(1.06). */
.field-band picture {
  display: block;
  overflow: hidden;
}

.field-band img {
  display: block;
  width: 100%;
  height: 420px;
  object-fit: cover;
}

.field-band figcaption {
  position: absolute;
  left: 50%;
  bottom: -46px;
  transform: translateX(-50%);
  text-align: center;
  background-color: var(--bg-dark);
  border-radius: var(--radius-lg);
  padding: 30px 40px;
  max-width: 660px;
  width: calc(100% - 48px);
  box-shadow: 0 18px 44px rgba(46, 31, 27, 0.34);
}

.field-band blockquote {
  font-family: var(--font-serif);
  font-size: clamp(17px, 2vw, 21px);
  font-weight: 700;
  line-height: 1.75;
  color: var(--on-dark);
  margin: 0;
}

.field-band cite {
  display: block;
  margin-top: 12px;
  font-style: normal;
  font-size: 14px;
  letter-spacing: 0.04em;
  color: var(--amber-on-dark);
}

/* ---- 產地誌 Journal feature ---- */
.journal {
  background-color: var(--bg-base);
  padding: var(--section-gap) 0;
}

.journal__feature {
  position: relative;
  display: flex;
  align-items: center;
  color: inherit;
}

.journal__feature-media {
  width: 58%;
  flex-shrink: 0;
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-md);
}

.journal__feature-media img {
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  transition: transform var(--transition-slow);
}

.journal__feature:hover .journal__feature-media img {
  transform: scale(1.04);
}

.journal__feature-card {
  position: relative;
  z-index: 1;
  width: 46%;
  flex-shrink: 0;
  margin-left: -4%;
  background-color: var(--white);
  border: 1px solid rgba(62, 39, 35, 0.06);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  padding: 44px 42px;
  transition: box-shadow var(--transition-base), transform var(--transition-base);
}

.journal__feature:hover .journal__feature-card {
  box-shadow: 0 16px 48px rgba(62, 39, 35, 0.18);
  transform: translateY(-2px);
}

.journal__eyebrow {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.06em;
  color: var(--terracotta);
  margin-bottom: 16px;
}

.journal__feature-title {
  font-family: var(--font-serif);
  font-size: clamp(24px, 2.6vw, 33px);
  line-height: 1.35;
  font-weight: 700;
  color: var(--text-primary);
  margin-bottom: 16px;
}

.journal__feature-excerpt {
  font-size: 15px;
  line-height: 1.85;
  color: var(--text-secondary);
  margin-bottom: 24px;
}

.journal__feature-date {
  font-size: 14px;
  color: var(--text-secondary);
}

.journal__more {
  margin-top: 40px;
  font-size: 15px;
  color: var(--text-secondary);
}

.journal__more a {
  color: var(--accent-green);
  font-weight: 600;
  border-bottom: 1px solid transparent;
  transition: border-color var(--transition-fast);
}

.journal__more a:hover {
  border-bottom-color: currentColor;
}

@media (max-width: 768px) {
  .journal__feature {
    flex-direction: column;
    align-items: stretch;
  }
  .journal__feature-media {
    width: 100%;
  }
  .journal__feature-card {
    width: auto;
    margin: -44px 16px 0;
    padding: 28px 24px;
  }
  .journal__more {
    margin-top: 24px;
  }
}

/* ---- Order CTA ---- */
.order-cta {
  background-color: var(--bg-base);
  padding: var(--section-gap) 0;
}

.order-cta__band {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
  background-color: var(--accent-amber);
  border-radius: var(--radius-lg);
  padding: 32px 40px;
  box-shadow: var(--shadow-md);
}

.order-cta__title {
  font-family: var(--font-sans);
  font-size: clamp(20px, 2.4vw, 26px);
  font-weight: 800;
  letter-spacing: 1px;
  color: var(--text-primary);
  margin-bottom: 8px;
}

.order-cta__desc {
  font-size: 15px;
  line-height: 1.7;
  color: var(--text-primary);
  max-width: 46em;
}

.order-cta__btn {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 14px 28px;
  background-color: var(--bg-dark);
  color: var(--white);
  font-weight: 700;
  font-size: 15px;
  border-radius: var(--radius-md);
  text-decoration: none;
  transition: background-color var(--transition-base), transform var(--transition-base);
}

.order-cta__btn:hover {
  background-color: #2a1a16;
  transform: translateY(-2px);
}

@media (max-width: 768px) {
  .hero__slider-left {
    width: 100%;
  }
  .hero__slider-right {
    display: none;
  }
  .hero__slider-left .hero__slide img {
    clip-path: none;
  }

  .order-cta__band {
    padding: 26px 24px;
  }
  .order-cta__btn {
    width: 100%;
    justify-content: center;
  }

  .stall-mosaic {
    grid-template-columns: 1fr 1fr;
    grid-auto-rows: 150px;
    gap: 12px;
  }
  .stall-tile--lead {
    grid-column: span 2;
  }

  .field-band img {
    height: 260px;
  }
  .field-band blockquote {
    font-size: 16px;
  }
  .field-band figcaption {
    padding: 22px 24px;
  }
}

/* ============================================
   產地誌 Journal / Food Blog
   ============================================ */

/* ---- Blog landing hero ---- */
.blog-hero {
  background-color: var(--bg-base);
  margin-top: calc(var(--nav-height) + var(--cat-strip-height));
  padding: 72px 0 52px;
  text-align: center;
}

.blog-hero__eyebrow {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--amber-ink);
  margin-bottom: 14px;
}

.blog-hero__title {
  font-family: var(--font-serif);
  font-size: clamp(36px, 5vw, 52px);
  color: var(--text-primary);
  margin-bottom: 16px;
}

.blog-hero__subtitle {
  font-size: 17px;
  line-height: 1.85;
  color: var(--text-secondary);
  max-width: 38em;
  margin: 0 auto;
}

/* ---- Latest columns list ( 最新專欄 ) ---- */
.column-list-section {
  background-color: var(--bg-base);
  padding: 8px 0 var(--section-gap);
}

.column-list {
  position: relative;
}

.column-list__vertical {
  position: absolute;
  left: -60px;
  top: 4px;
  writing-mode: vertical-rl;
  font-size: 13px;
  letter-spacing: 0.35em;
  color: rgba(62, 39, 35, 0.28);
  user-select: none;
  pointer-events: none;
}

.column-list__heading {
  font-family: var(--font-serif);
  font-size: clamp(28px, 3.4vw, 36px);
  color: var(--text-primary);
  padding-bottom: 12px;
}

.column-row {
  display: grid;
  grid-template-columns: 200px 1fr;
  gap: 28px;
  align-items: center;
  padding: 26px 0;
  border-top: 1px solid rgba(62, 39, 35, 0.1);
}

.column-row:last-of-type {
  border-bottom: 1px solid rgba(62, 39, 35, 0.1);
}

.column-row__thumb {
  border-radius: var(--radius-md);
  overflow: hidden;
  aspect-ratio: 16 / 10;
  background-color: var(--bg-sage);
}

.column-row__thumb img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--transition-slow);
}

.column-row:hover .column-row__thumb img {
  transform: scale(1.05);
}

.column-row__cat {
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.05em;
  margin-bottom: 10px;
}

.column-row__cat--green { color: var(--accent-green); }
.column-row__cat--terracotta { color: var(--terracotta); }
.column-row__cat--amber { color: var(--amber-ink); }

.column-row__title {
  font-family: var(--font-serif);
  font-size: clamp(19px, 2vw, 23px);
  font-weight: 700;
  line-height: 1.5;
  color: var(--text-primary);
  margin-bottom: 8px;
  transition: color var(--transition-fast);
}

.column-row:hover .column-row__title {
  color: var(--terracotta);
}

.column-row__excerpt {
  font-size: 14px;
  line-height: 1.7;
  color: var(--text-secondary);
  margin-bottom: 10px;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.column-row__date {
  font-size: 13px;
  color: var(--text-secondary);
}

.column-list__footer {
  margin-top: 44px;
}

/* The container now keeps the header's 24px gutter, so the -60px label
   only clears the viewport once there is >=36px of margin outside the
   1280px container (viewport >= 1352px). Hide it below that. */
@media (max-width: 1351px) {
  .column-list__vertical {
    display: none;
  }
}

@media (max-width: 768px) {
  .column-row {
    grid-template-columns: 96px 1fr;
    gap: 16px;
    align-items: start;
  }
  .column-row__excerpt {
    display: none;
  }
}

@media (max-width: 480px) {
  .column-row {
    grid-template-columns: 1fr;
  }
  .column-row__thumb {
    aspect-ratio: 16 / 9;
  }
}

/* ---- Article page ---- */
.post {
  background-color: var(--bg-base);
  padding-top: calc(var(--nav-height) + var(--cat-strip-height));
}

/* .post__container matches the header width exactly (see Layout);
   the article header and body span it fully. */
.post__header,
.post__body {
  margin: 0 auto;
}

.post__header {
  padding: 52px 0 30px;
}

.post__eyebrow {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.05em;
  margin-bottom: 16px;
}

.post__eyebrow--green { color: var(--accent-green); }
.post__eyebrow--terracotta { color: var(--terracotta); }
.post__eyebrow--amber { color: var(--amber-ink); }

.post__title {
  font-family: var(--font-serif);
  font-size: clamp(30px, 4.4vw, 46px);
  line-height: 1.28;
  color: var(--text-primary);
  margin-bottom: 20px;
}

.post__meta {
  font-size: 14px;
  color: var(--text-secondary);
}

.post__hero {
  margin: 4px auto 48px;
}

.post__hero img {
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border-radius: var(--radius-lg);
}

.post__body p {
  font-size: 17px;
  line-height: 1.95;
  color: var(--text-primary);
  margin-bottom: 24px;
}

.post__body h2 {
  font-family: var(--font-serif);
  font-size: clamp(22px, 2.6vw, 28px);
  color: var(--text-primary);
  margin: 44px 0 18px;
}

.post__pullquote {
  font-family: var(--font-serif);
  font-size: clamp(20px, 2.4vw, 26px);
  line-height: 1.6;
  font-weight: 700;
  color: var(--accent-green);
  border-left: 3px solid var(--accent-amber);
  padding: 4px 0 4px 26px;
  margin: 36px 0;
}

.post__author {
  margin-top: 48px;
  padding: 24px 28px;
  background-color: var(--bg-warm);
  border-left: 3px solid var(--accent-green);
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  font-size: 15px;
  line-height: 1.85;
  color: var(--text-secondary);
}

.post__author strong {
  color: var(--text-primary);
}

/* ---- Article footer: related posts + back link ---- */
.post-related {
  margin: 72px auto 0;
}

.post-related__title {
  font-family: var(--font-serif);
  font-size: 24px;
  color: var(--text-primary);
  margin-bottom: 8px;
}

.post-back {
  text-align: center;
  padding: 48px 0 var(--section-gap);
}

/* ============================================
   Page header (about / contact / policy / category)
   ============================================ */
.page-header {
  background-color: var(--bg-base);
  padding: 80px 0 60px;
  margin-top: var(--nav-height);
}

.page-header--center {
  text-align: center;
}

/* Category pages sit under the nav *and* the category strip */
.page-header--cat {
  padding: 60px 0 40px;
  margin-top: calc(var(--nav-height) + var(--cat-strip-height));
}

.page-header__title {
  font-family: var(--font-serif);
  font-size: clamp(36px, 5vw, 48px);
  color: var(--text-primary);
}

.page-header__desc {
  font-family: var(--font-kai);
  font-size: 16px;
  color: var(--text-secondary);
  max-width: 640px;
  line-height: 1.75;
  margin-top: 12px;
}

.page-header__subtitle {
  font-family: var(--font-kai);
  font-size: 19px;
  color: var(--text-secondary);
  margin-top: 14px;
}

.page-header__date {
  font-size: 14px;
  color: var(--text-secondary);
  margin-top: 12px;
}

/* ============================================
   Category page
   ============================================ */
.cat-products {
  background-color: var(--bg-base);
  padding-bottom: 120px;
}

.page-header__row {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 40px;
}

.page-header__main {
  flex: 1 1 auto;
  min-width: 0;
}

.season-note {
  flex: 0 0 300px;
  max-width: 300px;
  margin-top: 4px;
  padding: 20px 24px;
  background-color: var(--bg-sage);
  border-left: 3px solid var(--accent-green);
  border-radius: var(--radius-md);
}

.season-note__label {
  display: block;
  margin-bottom: 8px;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--accent-green);
}

.season-note__text {
  font-size: 14px;
  line-height: 1.7;
  color: var(--text-secondary);
}

@media (max-width: 768px) {
  .page-header__row {
    flex-direction: column;
    gap: 24px;
  }
  .season-note {
    flex-basis: auto;
    max-width: none;
    width: 100%;
  }
}

/* ---- Browse other categories ( 逛別攤 prev / next ) ---- */
.cat-browse {
  margin-top: 56px;
  padding-top: 32px;
  border-top: 1px solid rgba(62, 39, 35, 0.12);
}

.cat-browse__text {
  font-size: 15px;
  color: var(--text-secondary);
}

.cat-browse__text a {
  color: var(--accent-green);
  font-weight: 600;
}

.cat-browse__text a:hover {
  color: var(--amber-ink);
}

/* ============================================
   Store index ( /category/ — 全部商品 )
   Sidebar of categories + the full product grid.
   ============================================ */
.store {
  background-color: var(--bg-base);
  padding-bottom: 120px;
}

.store__layout {
  display: grid;
  grid-template-columns: 220px 1fr;
  gap: 48px;
  align-items: start;
}

/* Clears the fixed nav + category strip when it sticks */
.store__sidebar {
  position: sticky;
  top: calc(var(--nav-height) + var(--cat-strip-height) + 24px);
}

.store__sidebar-title {
  font-family: var(--font-serif);
  font-size: 18px;
  font-weight: 700;
  color: var(--text-primary);
  margin-bottom: 14px;
  padding-bottom: 10px;
  border-bottom: 2px solid var(--text-primary);
}

.store__nav {
  list-style: none;
}

.store__nav a {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
  padding: 11px 0;
  font-size: 15px;
  color: var(--text-primary);
  border-bottom: 1px solid rgba(62, 39, 35, 0.08);
  transition: color var(--transition-fast), padding-left var(--transition-fast);
}

.store__nav a:hover {
  color: var(--accent-green);
  padding-left: 8px;
}

.store__nav-count {
  flex-shrink: 0;
  font-size: 13px;
  color: var(--text-secondary);
}

.store__count {
  font-size: 14px;
  color: var(--text-secondary);
  margin-bottom: 24px;
}

/* Sidebar unsticks and turns into a wrapped pill row on narrow screens,
   where a 220px column would squeeze the grid below two usable columns. */
@media (max-width: 1023px) {
  .store__layout {
    grid-template-columns: 1fr;
    gap: 32px;
  }
  .store__sidebar {
    position: static;
  }
  .store__nav {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
  }
  .store__nav a {
    padding: 8px 14px;
    border: 1px solid rgba(62, 39, 35, 0.14);
    border-radius: var(--radius-sm);
    font-size: 14px;
  }
  .store__nav a:hover {
    padding-left: 14px;
    border-color: var(--accent-green);
  }
}

/* ---- Category label on a product card ---- */
.card__cat {
  display: inline-block;
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.05em;
  margin-bottom: 8px;
  border-bottom: 1px solid transparent;
  transition: border-color var(--transition-fast);
}

.card__cat:hover {
  border-bottom-color: currentColor;
}

.card__cat--green { color: var(--accent-green); }
.card__cat--terracotta { color: var(--terracotta); }
.card__cat--amber { color: var(--amber-ink); }

/* ============================================
   About page
   ============================================ */
.brand-story {
  background-color: var(--bg-base);
  padding-bottom: 100px;
}

.brand-story__grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 64px;
  align-items: center;
}

.brand-story__image {
  border-radius: var(--radius-lg);
  overflow: hidden;
}

.brand-story__image img {
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
}

.brand-story__label {
  font-size: 13px;
  font-weight: 600;
  color: var(--amber-ink);
  letter-spacing: 0.1em;
  margin-bottom: 12px;
}

.brand-story__title {
  font-family: var(--font-serif);
  font-size: 36px;
  color: var(--text-primary);
  margin-bottom: 24px;
}

.brand-story__text {
  font-size: 16px;
  color: var(--text-secondary);
  line-height: 1.9;
  margin-bottom: 20px;
}

.brand-story__signature {
  font-family: var(--font-kai);
  font-size: 15px;
  color: var(--text-primary);
  margin-top: 24px;
}

.core-values {
  background-color: var(--bg-base);
  padding: 100px 0;
}

.partner-locations {
  background-color: var(--bg-base);
  padding: 100px 0;
}

@media (max-width: 768px) {
  .brand-story__grid {
    grid-template-columns: 1fr;
    gap: 32px;
  }
}

/* ============================================
   Contact page
   ============================================ */
.contact-section {
  background-color: var(--bg-base);
  padding-bottom: 120px;
}

.contact-info {
  max-width: 520px;
  margin: 0 auto;
  background-color: var(--white);
  border-radius: var(--radius-lg);
  padding: 40px;
  box-shadow: var(--shadow-sm);
}

.contact-info__section-title {
  font-family: var(--font-serif);
  font-size: 24px;
  color: var(--text-primary);
  margin-bottom: 32px;
  text-align: center;
}

.contact-info__content-text a {
  color: var(--text-primary);
  transition: color var(--transition-fast);
}

.contact-info__content-text a:hover {
  color: var(--amber-ink);
}

.faq-section {
  background-color: var(--bg-base);
  padding: 100px 0;
}

.faq-container {
  max-width: 800px;
  margin: 0 auto;
}

@media (max-width: 768px) {
  .contact-info {
    padding: 28px 24px;
  }
}

/* ============================================
   Policy pages (privacy / terms)
   ============================================ */
.policy-content {
  background-color: var(--bg-base);
  padding-bottom: 120px;
}

.policy-container {
  max-width: 800px;
  margin: 0 auto;
}

.policy-intro {
  font-size: 16px;
  color: var(--text-secondary);
  line-height: 1.9;
  margin-bottom: 48px;
}

.policy-section {
  margin-bottom: 48px;
}

.policy-section__title {
  font-family: var(--font-serif);
  font-size: 24px;
  color: var(--text-primary);
  margin-bottom: 20px;
}

.policy-section__content {
  font-size: 16px;
  color: var(--text-secondary);
  line-height: 1.9;
}

.policy-section__content ol,
.policy-section__content ul {
  margin-left: 24px;
  margin-top: 12px;
}

.policy-section__content li {
  margin-bottom: 8px;
}

.policy-section__content p + p {
  margin-top: 16px;
}
