:root {
  /* Palette matched to the actual Elite Gift World logo (coral/salmon
     gift-cart mark on blush). Variable names (--brass/--madder/--indigo)
     are historical from the first draft palette; only the values below
     define the real brand. */
  --bg: #FFFFFF;
  --surface: #FFFFFF;
  --surface-2: #FDF1EF;
  --text: #2E211E;
  --text-muted: #7D6864;
  --brass: #E8756A;
  --brass-glow: #F0897E;
  --madder: #D9614F;
  --indigo: #9C5A6E;
  --border: #F5DFDB;
  --stamp-ink: #D9614F;
  --footer-dark: #2E211E;
  --footer-dark-text: #D9C4C0;

  --heading: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  --sans: 'Poppins', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  --mono: ui-monospace, 'SF Mono', 'Cascadia Code', 'Consolas', monospace;
  --ease: cubic-bezier(.22, .61, .36, 1);
  --ease-soft: cubic-bezier(.4, 0, .2, 1);
}

* { box-sizing: border-box; }
a { color: inherit; }
.kiln ::selection { background: var(--brass); color: var(--bg); }

.kiln {
  background: var(--bg);
  color: var(--text);
  font-family: var(--sans);
  -webkit-font-smoothing: antialiased;
}

.kiln .wrap { max-width: 1180px; margin: 0 auto; padding: 0 32px; }

/* ---------- Top utility bar ---------- */
.kiln .topbar { background: var(--surface); border-bottom: 1px solid var(--border); }
.kiln .topbar-inner { display: flex; align-items: center; justify-content: space-between; padding: 9px 0; }
.kiln .topbar-select-group { display: flex; gap: 4px; }
.kiln .topbar-select {
  font-family: var(--mono); font-size: 11px; letter-spacing: .04em; color: var(--text-muted);
  background: none; border: none; cursor: pointer; padding: 4px 8px;
  display: flex; align-items: center; gap: 6px; border-radius: 3px;
  transition: color .2s var(--ease), background .2s var(--ease);
}
.kiln .topbar-select:hover { color: var(--text); background: var(--surface-2); }
.kiln .topbar-select .chev { width: 9px; height: 9px; flex-shrink: 0; }
.kiln .flag-icon { width: 16px; height: 12px; flex-shrink: 0; border-radius: 2px; box-shadow: 0 0 0 1px rgba(0,0,0,.08); }

.kiln .flag-dropdown { position: relative; }
.kiln .flag-dropdown-menu[hidden] { display: none; }
.kiln .flag-dropdown-menu {
  position: absolute; top: calc(100% + 6px); left: 0; z-index: 60;
  min-width: 200px; background: var(--bg); border: 1px solid var(--border); border-radius: 4px;
  box-shadow: 0 16px 32px -16px rgba(20,15,8,.25);
  padding: 6px; display: flex; flex-direction: column; gap: 2px;
}
.kiln .flag-dropdown-menu form { margin: 0; }
.kiln .flag-dropdown-item {
  width: 100%; display: flex; align-items: center; gap: 8px;
  font-family: var(--sans); font-size: 13px; color: var(--text);
  background: none; border: none; border-radius: 3px; padding: 7px 8px; cursor: pointer; text-align: left;
  transition: background .2s var(--ease);
}
.kiln .flag-dropdown-item:hover { background: var(--surface-2); }
.kiln .flag-dropdown-item[selected] { background: var(--surface-2); font-weight: 600; }
.kiln .topbar-message { font-size: 12px; color: var(--text-muted); }

/* ---------- Top utility bar: right-side link row (wishlist / about / contact
   / login) — matches the reference's compact all-caps style instead of the
   vendor default's mixed-case text with an invisible subsetted icon font. --*/
.kiln .top-menu { display: flex; align-items: center; gap: 26px; margin: 0; padding: 0; list-style: none; }
.kiln .top-menu li { margin: 0; }
.kiln .top-menu a {
    display: flex; align-items: center; gap: 6px;
    font-family: var(--mono); font-size: 11px; font-weight: 500;
    letter-spacing: .04em; text-transform: uppercase; color: var(--text-muted);
    transition: color .2s var(--ease);
}
.kiln .top-menu a:hover { color: var(--madder); }
/* Vendor CSS has ".top-menu:hover .top-link > a { color:#c66 }" — an
   ancestor-hover rule, so the moment the mouse enters the top-menu row at
   all, EVERY .top-link link (About Us, Contact Us) turns red together,
   regardless of which one is actually being pointed at. Neutralize that
   ambient rule and restore real per-link hover with !important, since the
   vendor selector already ties our specificity. */
.kiln .top-menu:hover .top-link > a { color: var(--text-muted) !important; }
.kiln .top-menu .top-link > a:hover { color: var(--madder) !important; }
.kiln .top-menu a svg { width: 13px; height: 13px; flex-shrink: 0; }
.kiln .topbar-message strong { color: var(--madder); font-weight: 600; }
.kiln .topbar-right { font-family: var(--mono); font-size: 11.5px; color: var(--text-muted); }
.kiln .topbar-right a { text-decoration: none; }
.kiln .topbar-right a:hover { color: var(--brass-glow); }

/* ---------- Topmost strip: brand maroon bg, light-yellow links ---------- */
.kiln .header-top { background: #842a2a; }
.kiln .header-top .top-menu a,
.kiln .header-top .topbar-select { color: #FFE9A0; }
.kiln .header-top .top-menu a:hover,
.kiln .header-top .topbar-select:hover { color: #fff; background: rgba(255, 255, 255, .12); }
.kiln .header-top .top-menu:hover .top-link > a { color: #FFE9A0 !important; }
.kiln .header-top .top-menu .top-link > a:hover { color: #fff !important; }

/* ---------- Header ---------- */
.kiln header.site { border-bottom: 1px solid var(--border); background: var(--bg); }
.kiln .site-bar { display: flex; align-items: center; justify-content: space-between; padding: 22px 0; gap: 24px; }
.kiln .wordmark {
  font-family: var(--heading); font-weight: 700; font-size: 21px; letter-spacing: -.01em;
  display: flex; align-items: baseline; gap: 8px; text-decoration: none; color: var(--text); flex-shrink: 0;
}
.kiln .wordmark .amp { color: var(--brass); }
.kiln nav.primary { display: flex; gap: 34px; font-family: var(--sans); font-size: 15px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--text-muted); }
.kiln nav.primary a { text-decoration: none; }
.kiln nav.primary a:hover { color: var(--brass-glow); }
.kiln .nav-item { position: relative; }
.kiln .nav-item > a { display: inline-flex; align-items: center; gap: 5px; }
.kiln .nav-item > a svg { width: 10px; height: 10px; transition: transform .25s var(--ease); }
/* Real vendor mega-menu classes (.megamenu > ul.sub-menu.pos-left, .menu-grid-col,
   .menu-subtitle) supply the actual column layout/typography. The vendor's own
   show/hide relies on JS/hover machinery this port doesn't have (its base rule
   is `opacity:0` + `top:-9999px` unconditionally) — so the open/close mechanics
   below are driven by the SAME .nav-item.is-open JS toggle used everywhere else
   in this theme (mouseenter/mouseleave with a close delay, see kiln.js), just
   pointed at the vendor's real elements instead of invented ones. */
.kiln .nav-item.megamenu > .sub-menu {
  top: -9999px; left: -32px; opacity: 0; visibility: hidden;
  background: var(--bg); border: 1px solid var(--border);
  box-shadow: 0 24px 48px -20px rgba(20,15,8,.18);
  border-radius: 3px;
  transition: opacity .25s var(--ease), visibility 0s linear .25s;
  z-index: 40;
}
.kiln .nav-item.megamenu.is-open > .sub-menu {
  top: 100%; margin-top: 4px; opacity: 1; visibility: visible; transition-delay: 0s;
}
.kiln .nav-item.is-open > a svg { transform: rotate(180deg); }
/* Caret is now its own button (see main.blade.php) so "Shop" the label and
   the open/close control are two separate targets — the label always
   navigates, the caret always toggles, on any pointer type. */
.kiln .mega-toggle {
  display: inline-flex; align-items: center; justify-content: center;
  background: none; border: none; padding: 10px 6px; margin: 0; cursor: pointer;
  color: inherit; vertical-align: middle;
}
.kiln .mega-toggle svg { width: 10px; height: 10px; transition: transform .25s var(--ease); }
.kiln .nav-item.is-open .mega-toggle svg { transform: rotate(180deg); }
/* Vendor CSS doesn't set a flex-basis for these (the original demo hardcoded
   per-column inline widths) — even out the real category columns and give
   the promo column a fixed width instead. */
.kiln .menu-grid-col { flex: 1 1 0; min-width: 0; position: relative; }
.kiln .menu-grid-col.mmenu-with-banner { flex: 0 0 160px; }
.kiln .menu-grid-col > a { display: none; }
/* Fresh, vendor-CSS-free classes for the column's inner lists — no selector
   anywhere in the vendor stylesheets targets "kiln-col-inner"/"kiln-col-links",
   so there is nothing left to fight over position/display here. */
.kiln .kiln-col-inner, .kiln .kiln-col-links {
  opacity: 1 !important; visibility: visible !important; transform: none !important;
  position: static; display: block; list-style: none; margin: 0; padding: 0; width: auto;
}
.kiln .menu-subtitle > a {
  display: block; font-family: var(--mono); font-size: 10.5px; letter-spacing: .07em;
  text-transform: uppercase; color: var(--brass); margin: 0 0 16px; pointer-events: none;
}
/* Links were invisible by default and only appeared per-item on :hover — some
   vendor "reveal on hover" animation (built for a different interaction
   entirely) was applying to these regardless of the class rename. Force every
   visibility-related property so nothing can hide them again. */
.kiln .kiln-col-links li,
.kiln .kiln-col-links a,
.kiln .kiln-col-links a:visited,
.kiln .kiln-col-links a:link {
  opacity: 1 !important; visibility: visible !important; filter: none !important;
  transform: none !important; clip: auto !important; clip-path: none !important;
  display: block !important; font-size: 13.5px !important; line-height: 1.45 !important;
  text-transform: none !important; letter-spacing: 0 !important;
  color: var(--text) !important; text-decoration: none !important; margin-bottom: 13px !important;
}
.kiln .kiln-col-links a:hover { color: var(--brass-glow) !important; }
.kiln .mmenu-with-banner .banner a {
  position: relative; border-radius: 3px; overflow: hidden; background: var(--madder);
  display: flex; align-items: flex-end; min-height: 180px; color: #fff; text-decoration: none;
}
.kiln .mmenu-with-banner .banner svg { color: #fff; }
.kiln .site-actions { display: flex; gap: 26px; align-items: center; font-family: var(--sans); font-size: 14px; font-weight: 500; color: var(--text-muted); flex-shrink: 0; }
.kiln .site-actions a { display: flex; align-items: center; gap: 7px; text-decoration: none; color: inherit; position: relative; }
.kiln .site-actions a:hover { color: var(--brass-glow); }
.kiln .site-actions svg { width: 17px; height: 17px; flex-shrink: 0; transition: transform .25s var(--ease); }
.kiln .site-actions a:hover svg { transform: translateY(-1px); }
.kiln .site-search { flex: 1; max-width: 320px; position: relative; }
.kiln .site-search input {
  width: 100%; border: 1px solid var(--border); border-radius: 999px; padding: 10px 16px;
  font-family: var(--sans); font-size: 14.5px; background: var(--surface-2);
}
.kiln .site-search input:focus { outline: none; border-color: var(--brass); background: var(--bg); }
.kiln .badge {
  font-family: var(--mono); font-size: 9.5px; background: var(--madder); color: #fff;
  width: 15px; height: 15px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  position: absolute; top: -7px; left: 11px;
}

/* ---------- Cart hover preview ---------- */
.kiln .cart-nav-item { position: relative; }
.kiln .cart-preview-panel {
  position: absolute; top: 100%; right: 0; margin-top: 14px; z-index: 60;
  width: 320px; background: var(--bg); border: 1px solid var(--border); border-radius: 4px;
  box-shadow: 0 24px 48px -20px rgba(20,15,8,.18);
  padding: 18px;
  opacity: 0; visibility: hidden; transform: translateY(8px);
  transition: opacity .25s var(--ease), transform .25s var(--ease), visibility 0s linear .25s;
}
.kiln .cart-nav-item.is-open .cart-preview-panel { opacity: 1; visibility: visible; transform: translateY(0); transition-delay: 0s; }
.kiln .cart-preview-empty { font-family: var(--sans); font-size: 14px; color: var(--text-muted); text-align: center; margin: 8px 0; }
.kiln .cart-preview-items { display: flex; flex-direction: column; gap: 14px; max-height: 320px; overflow-y: auto; }
.kiln .cart-preview-item { display: flex; gap: 12px; align-items: flex-start; }
.kiln .cart-preview-thumb { width: 48px; height: 48px; flex-shrink: 0; border-radius: 3px; overflow: hidden; background: var(--surface-2); }
.kiln .cart-preview-thumb img { width: 100%; height: 100%; object-fit: cover; }
.kiln .cart-preview-info { min-width: 0; }
.kiln .cart-preview-name { font-family: var(--sans); font-size: 13.5px; font-weight: 500; color: var(--text); line-height: 1.35; }
.kiln .cart-preview-variant { font-size: 12px; color: var(--text-muted); margin-top: 2px; }
.kiln .cart-preview-qty { font-family: var(--mono); font-size: 12px; color: var(--text-muted); margin-top: 4px; }
.kiln .cart-preview-subtotal {
  display: flex; justify-content: space-between; align-items: center;
  font-family: var(--sans); font-size: 14px; font-weight: 600; color: var(--text);
  border-top: 1px solid var(--border); margin-top: 16px; padding-top: 14px;
}
.kiln .cart-preview-actions { display: flex; gap: 10px; margin-top: 14px; }
.kiln .cart-preview-actions .btn-outline, .kiln .cart-preview-actions .btn-primary { flex: 1; text-align: center; padding: 11px 14px; font-size: 13px; }

/* ---------- Hero: image slider ---------- */
.kiln .slider { position: relative; height: 560px; overflow: hidden; border-bottom: 1px solid var(--border); }
.kiln .slide {
  position: absolute; inset: 0; display: flex; align-items: center;
  text-decoration: none; color: inherit;
  opacity: 0; visibility: hidden; transition: opacity .8s var(--ease);
}
.kiln .slide.is-active { opacity: 1; visibility: visible; }
.kiln .slide-content { position: relative; z-index: 1; max-width: 560px; padding: 0 8vw; }
.kiln .eyebrow {
  font-family: var(--mono); font-size: 11px; letter-spacing: .12em; text-transform: uppercase;
  color: #fff; opacity: .85; margin-bottom: 22px; display: flex; align-items: center; gap: 10px;
}
.kiln .eyebrow::before { content: ""; width: 22px; height: 1px; background: currentColor; }
.kiln .slide-content h1 {
  font-family: var(--heading); font-weight: 700; font-size: 2.6rem; line-height: 1.2; color: #fff;
  margin: 0 0 26px; text-wrap: balance; letter-spacing: -.01em; text-shadow: 0 4px 24px rgba(0,0,0,.25);
}
.kiln .slide-content h1 em { font-style: normal; color: var(--brass-glow); }
.kiln .slide-content .slide-cta {
  font-family: var(--sans); font-size: 14px; font-weight: 600; letter-spacing: .02em;
  background: #fff; color: var(--text); border: none; padding: 14px 26px; display: inline-block;
}
.kiln .slider-motif { position: absolute; right: 4vw; top: 50%; transform: translateY(-50%); opacity: .28; }
.kiln .slider-motif svg { width: 280px; height: 280px; color: #fff; }
.kiln .slider-arrow {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 44px; height: 44px; border-radius: 50%; border: 1px solid rgba(255,255,255,.5);
  background: rgba(0,0,0,.15); color: #fff; cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  transition: background .25s var(--ease), border-color .25s var(--ease);
}
.kiln .slider-arrow:hover { background: rgba(0,0,0,.3); border-color: #fff; }
.kiln .slider-arrow svg { width: 18px; height: 18px; }
.kiln .slider-arrow.prev { left: 28px; }
.kiln .slider-arrow.next { right: 28px; }
.kiln .slider-dots { position: absolute; bottom: 26px; left: 50%; transform: translateX(-50%); z-index: 2; display: flex; gap: 9px; }
.kiln .slider-dots .dot { width: 8px; height: 8px; border-radius: 50%; border: 1px solid #fff; background: transparent; cursor: pointer; padding: 0; opacity: .7; transition: opacity .25s var(--ease), background .25s var(--ease); }
.kiln .slider-dots .dot.is-active { background: #fff; opacity: 1; }

/* ---------- Trust strip (signature stamp, condensed) ---------- */
.kiln .trust-strip { border-bottom: 1px solid var(--border); background: var(--surface); }
.kiln .trust-strip .wrap { display: flex; align-items: center; gap: 20px; padding: 22px 32px; }
.kiln .trust-copy { font-size: 1.45rem; line-height: 1.5; color: var(--text-muted); }
.kiln .trust-copy strong { color: var(--text); font-family: var(--heading); font-size: 15px; font-weight: 700; display: block; margin-bottom: 2px; }

.kiln .hero-cta { display: flex; gap: 16px; align-items: center; }
.kiln .btn-primary {
  font-family: var(--sans); font-size: 14px; font-weight: 600; letter-spacing: .02em;
  background: var(--text); color: var(--bg); border: none; padding: 14px 26px;
  cursor: pointer; text-decoration: none; display: inline-block;
  transition: background .3s var(--ease), transform .3s var(--ease), box-shadow .3s var(--ease);
}
.kiln .btn-primary:hover {
  background: var(--brass-glow);
  transform: translateY(-2px);
  box-shadow: 0 14px 24px -12px color-mix(in srgb, var(--brass) 55%, transparent);
}
.kiln .btn-primary:active { transform: translateY(0); }
.kiln .link-quiet { font-size: 14px; color: var(--indigo); text-decoration: none; border-bottom: 1px solid transparent; transition: border-color .25s var(--ease), color .25s var(--ease); }
.kiln .link-quiet:hover { border-bottom-color: var(--indigo); color: var(--brass-glow); }

/* ---------- Process strip ---------- */
.kiln .process { border-bottom: 1px solid var(--border); background: var(--surface); }
.kiln .process-grid { display: grid; grid-template-columns: repeat(3, 1fr); }
.kiln .process-step { padding: 40px 40px 44px; border-left: 1px solid var(--border); }
.kiln .process-step:first-child { border-left: none; }
.kiln .process-step .num { font-family: var(--mono); font-size: 12px; color: var(--brass-glow); letter-spacing: .06em; }
.kiln .process-step h3 { font-family: var(--heading); font-weight: 700; font-size: 18px; margin: 10px 0 10px; }
.kiln .process-step p { font-size: 0.95rem; color: var(--text-muted); line-height: 1.55; margin: 0; max-width: 34ch; }

/* ---------- Homepage sections: one shared heading + one shared vertical
   rhythm, instead of each section carrying its own ad-hoc inline style
   (mb-2 here, margin-bottom:32px there, left-aligned by default elsewhere). --*/
.kiln .kiln-section-heading { text-align: center; padding-top: 56px; margin: 0 0 32px; }
.kiln .kiln-section-heading .elementor-heading-title { margin: 0; }
/* All homepage segment headings (Featured Products / New Arrivals / Our
   Customers Say — every section built on the shared .kiln-section-heading
   wrapper) — Times New Roman per request. */
.kiln .kiln-section-heading .elementor-heading-title { font-family: 'Times New Roman', Times, serif; }

/* ---------- Product grid ---------- */
.kiln section.catalog { padding: 88px 0 96px; }
.kiln .section-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 42px; }
.kiln .section-head h2 { font-family: var(--heading); font-weight: 700; font-size: 28px; letter-spacing: -.01em; margin: 0; }
/* Category/search results heading ("From the Workshop" etc.) — Times New Roman
   per request. */
.kiln .section-head h2 { font-family: 'Times New Roman', Times, serif; }
.kiln .section-head .link-quiet { font-family: var(--mono); font-size: 12px; text-transform: uppercase; letter-spacing: .05em; }

.kiln .tabs { display: flex; gap: 8px; border-bottom: 1px solid var(--border); margin-bottom: 40px; }
.kiln .tabs button {
  font-family: var(--mono); font-size: 12px; letter-spacing: .06em; text-transform: uppercase;
  background: none; border: none; color: var(--text-muted); cursor: pointer;
  padding: 12px 4px; margin-right: 26px; position: relative;
}
.kiln .tabs button::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--brass);
  transform: scaleX(0); transform-origin: left; transition: transform .3s var(--ease);
}
.kiln .tabs button:hover { color: var(--text); }
.kiln .tabs button[aria-selected="true"] { color: var(--text); }
.kiln .tabs button[aria-selected="true"]::after { transform: scaleX(1); }

.kiln .grid-products[hidden] { display: none; }
.kiln .card .rating { display: flex; gap: 2px; margin-bottom: 8px; color: var(--brass); }
.kiln .card .rating svg { width: 11px; height: 11px; }
.kiln .card .rating svg.dim { color: var(--border); }
.kiln .card .price-was { font-size: 12px; color: var(--text-muted); text-decoration: line-through; margin-right: 6px; }
.kiln .sale-tag {
  position: absolute; top: 10px; left: 10px; z-index: 1;
  font-family: var(--mono); font-size: 10px; letter-spacing: .05em; text-transform: uppercase;
  background: var(--madder); color: #fff; padding: 4px 9px; border-radius: 2px;
}

.kiln .view-more { display: flex; justify-content: center; margin-top: 48px; }
.kiln .btn-outline {
  font-family: var(--sans); font-size: 13.5px; font-weight: 600; letter-spacing: .03em;
  background: transparent; color: var(--text); border: 1px solid var(--text); padding: 13px 34px;
  cursor: pointer; transition: background .25s var(--ease), color .25s var(--ease), transform .2s var(--ease);
  text-decoration: none; display: inline-block;
}
.kiln .btn-outline:hover { background: var(--text); color: var(--bg); transform: translateY(-2px); }

/* ---------- Go to top ----------
   Vendor CSS has its own #scroll-top rule (theme330a.css) — an ID selector,
   which outranks any of our .to-top classes no matter what we set them to,
   and it also toggles on a ".show" class that our own kiln.js never adds (it
   adds ".is-visible"). Between the specificity loss and the class mismatch,
   the button was permanently stuck at the vendor's opacity:0/visibility:hidden.
   Overriding by the same #scroll-top ID so ours actually wins. */
#scroll-top.to-top {
  position: fixed; right: 24px; bottom: 54px; z-index: 45;
  width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--border);
  background: var(--bg); color: var(--text); cursor: pointer;
  display: flex; align-items: center; justify-content: center;
  box-shadow: 0 10px 24px -12px rgba(20,15,8,.3);
  opacity: 0; visibility: hidden; transform: translateY(10px);
  transition: opacity .3s var(--ease), transform .3s var(--ease), visibility 0s linear .3s, background .25s var(--ease);
}
#scroll-top.to-top.is-visible { opacity: 1; visibility: visible; transform: translateY(0); transition-delay: 0s; }
#scroll-top.to-top:hover { background: var(--brass-glow); color: #fff; }
#scroll-top.to-top svg { width: 18px; height: 18px; }
.kiln .to-top svg { width: 18px; height: 18px; }

.kiln .grid-products {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 0;
  border-top: 1px solid var(--border); border-left: 1px solid var(--border);
}
.kiln .card {
  border-right: 1px solid var(--border); border-bottom: 1px solid var(--border);
  padding: 22px 22px 26px; position: relative; z-index: 0;
  transition: box-shadow .35s var(--ease), transform .35s var(--ease);
}
.kiln .card:hover { z-index: 1; box-shadow: 0 22px 40px -20px color-mix(in srgb, var(--brass) 45%, transparent); }
.kiln .swatch { aspect-ratio: 4/5; margin-bottom: 18px; position: relative; overflow: hidden; cursor: pointer; }
.kiln .swatch img { width: 100%; height: 100%; object-fit: cover; }
.kiln .card h4 { cursor: pointer; }
.kiln .motif {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  transition: transform .5s var(--ease), opacity .35s var(--ease);
  color: rgba(255,255,255,.9);
}
.kiln .motif svg { width: 46%; height: 46%; opacity: .5; filter: drop-shadow(0 2px 6px rgba(0,0,0,.25)); }
.kiln .card:hover .motif { transform: scale(1.08) rotate(-2deg); opacity: .85; }

/* ---------- Product card hover actions ----------
   Dead code removed here 2026-09-08: this block styled .qa-btn for a
   ".card"-wrapped card design that no longer exists (only the orphaned,
   never-included _product-card.blade.php used that class) — its base
   opacity:0 had higher specificity than the current .product-media .qa-btn
   rule below (which drives the real, currently-rendered vendor-product-card
   markup), and since its own reveal trigger (".card:hover") never matched
   anything, the wishlist/compare buttons were permanently stuck invisible
   regardless of hover. See ".product-media .qa-btn" further down for the
   rule set that's actually live. */

.kiln .quick-add {
  position: absolute; left: 0; right: 0; bottom: 0; z-index: 2;
  background: rgba(20, 15, 10, .88); color: #fff; border: none;
  padding: 12px; cursor: pointer;
  font-family: var(--sans); font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  display: flex; align-items: center; justify-content: center; gap: 8px;
  transform: translateY(100%);
  transition: transform .3s var(--ease), background .2s var(--ease);
}
.kiln .card:hover .quick-add { transform: translateY(0); }
.kiln .quick-add:hover { background: var(--brass); }
.kiln .quick-add svg { width: 15px; height: 15px; }

.kiln .detail-image { color: rgba(255,255,255,.85); }
.kiln .detail-image .motif svg { width: 34%; height: 34%; opacity: .4; }
.kiln .card h4 { transition: color .25s var(--ease); font-family: var(--heading); font-weight: 600; font-size: 15.5px; margin: 0 0 14px; }
.kiln .card:hover h4 { color: var(--brass-glow); }
.kiln .card .add { transition: transform .25s var(--ease), color .2s var(--ease); }
.kiln .card .add:hover { transform: translateX(2px); }
.kiln .tex-brass { background:
  radial-gradient(120% 90% at 25% 15%, rgba(255,255,255,.20), transparent 55%),
  linear-gradient(155deg, #8a5f22, #c9974f 45%, #7c531c 100%); }
.kiln .tex-indigo { background:
  repeating-linear-gradient(115deg, rgba(255,255,255,.06) 0 2px, transparent 2px 14px),
  linear-gradient(160deg, #223244, #3c5876 55%, #1c2833 100%); }
.kiln .tex-madder { background:
  repeating-linear-gradient(20deg, rgba(255,255,255,.05) 0 1px, transparent 1px 10px),
  linear-gradient(150deg, #7c2c22, #b8543f 50%, #5c1f18 100%); }
.kiln .tex-clay { background:
  radial-gradient(100% 80% at 70% 20%, rgba(255,255,255,.15), transparent 60%),
  linear-gradient(160deg, #6b5a3f, #a3855a 55%, #4f3f29 100%); }

.kiln .card .cat { font-family: var(--mono); font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase; color: var(--text-muted); margin-bottom: 6px; }
.kiln .card .origin { font-size: 12.5px; color: var(--text-muted); margin-bottom: 14px; }
.kiln .card .price-row { display: flex; align-items: baseline; justify-content: space-between; }
.kiln .price { font-family: var(--mono); font-size: 15px; font-variant-numeric: tabular-nums; }
.kiln .card .add { font-family: var(--mono); font-size: 11px; letter-spacing: .05em; text-transform: uppercase; color: var(--indigo); background: none; border: none; cursor: pointer; padding: 0; }
.kiln .card .add:hover { color: var(--brass-glow); }
.kiln .empty-state { padding: 60px 0; text-align: center; color: var(--text-muted); font-size: 14px; grid-column: 1 / -1; }

/* ---------- Breadcrumb (product page) ---------- */
.kiln .breadcrumb { padding: 26px 32px 0; font-size: 12.5px; color: var(--text-muted); }
.kiln .breadcrumb a { color: var(--text-muted); text-decoration: none; }
.kiln .breadcrumb a:hover { color: var(--brass-glow); text-decoration: underline; }
.kiln .breadcrumb span { color: var(--text); }

/* ---------- Cart / Checkout / Account / Wishlist ----------
   Kiln's rollout only covered the catalog pages (product listing/detail) —
   cart, checkout, addresses, wishlist had no kiln views at all and 500'd.
   These reuse the same design tokens/components as the rest of the theme
   (--madder, --border, .btn-primary, .link-quiet, .empty-state) rather than
   pulling in more vendor CSS, since none of that markup existed here. */
.kiln .cart-page, .kiln .checkout-page, .kiln .account-page, .kiln .checkout-confirm, .kiln .static-page { padding: 48px 0 96px; }
.kiln .static-page-wrap { max-width: 760px; margin: 0; }
.kiln .static-page-wrap .policy-panel-body { font-size: 14.5px; }
.kiln .static-page-wrap .policy-panel-body h3 { font-family: var(--heading); font-size: 16px; color: var(--text); margin: 24px 0 8px; }

.kiln .cart-layout, .kiln .checkout-layout { display: grid; grid-template-columns: 1fr 340px; gap: 48px; align-items: start; }
@media (max-width: 860px) {
  .kiln .cart-layout, .kiln .checkout-layout { grid-template-columns: 1fr; }
}

.kiln .cart-items { display: flex; flex-direction: column; gap: 24px; }
.kiln .cart-row { display: grid; grid-template-columns: 84px 1fr auto; gap: 18px; padding-bottom: 24px; border-bottom: 1px solid var(--border); }
.kiln .cart-row-media { width: 84px; height: 84px; border-radius: 4px; overflow: hidden; background: var(--surface-2); display: flex; align-items: center; justify-content: center; }
.kiln .cart-row-media img { width: 100%; height: 100%; object-fit: cover; }
.kiln .cart-row-media .no-image { font-size: 11px; color: var(--text-muted); }
.kiln .cart-row-name { font-weight: 600; color: var(--text); text-decoration: none; }
.kiln .cart-row-name:hover { color: var(--madder); }
.kiln .cart-row-variant { font-size: 12.5px; color: var(--text-muted); margin-top: 2px; }
.kiln .cart-row-price { font-size: 13px; color: var(--text-muted); margin-top: 4px; }
.kiln .gift-note { font-size: 12.5px; color: var(--madder); margin-top: 4px; }
.kiln .cart-row-qty { display: flex; align-items: center; gap: 0; margin-top: 10px; }
.kiln .cart-row-qty input {
  width: 40px; padding: 6px 4px; border: 1px solid var(--border); border-left: none; border-right: none;
  font-size: 13px; text-align: center; -moz-appearance: textfield;
}
.kiln .cart-row-qty input::-webkit-outer-spin-button, .kiln .cart-row-qty input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.kiln .cart-row-error { font-size: 12px; color: #B3261E; margin-top: 6px; }
.kiln .qty-btn {
  width: 28px; height: 28px; flex-shrink: 0; display: flex; align-items: center; justify-content: center;
  background: var(--surface-2); border: 1px solid var(--border); font-size: 15px; line-height: 1; color: var(--text);
  cursor: pointer; padding: 0; transition: background .2s var(--ease), color .2s var(--ease);
}
.kiln .qty-btn:first-child { border-radius: 3px 0 0 3px; }
.kiln .qty-btn:last-child { border-radius: 0 3px 3px 0; }
.kiln .qty-btn:hover { background: var(--madder); border-color: var(--madder); color: #fff; }
.kiln .cart-row-total { text-align: right; }
.kiln .cart-row-total-amount { font-family: var(--mono); font-weight: 600; }
.kiln .cart-row-remove { background: none; border: none; padding: 0; margin-top: 10px; font-size: 12.5px; color: var(--text-muted); cursor: pointer; text-decoration: underline; font-family: inherit; }
.kiln .cart-row-remove:hover { color: var(--madder); }
.kiln .address-card-remove {
  background: none; border: none; padding: 0; margin: 0; cursor: pointer; text-decoration: underline;
  font-family: inherit; font-size: 14px; line-height: inherit; color: var(--text-muted);
}
.kiln .address-card-remove:hover { color: var(--madder); }

.kiln .cart-summary { border: 1px solid var(--border); border-radius: 6px; padding: 24px; }
.kiln .cart-summary h3 { font-family: var(--heading); font-size: 17px; margin: 0 0 16px; }
.kiln .cart-summary-row { display: flex; justify-content: space-between; font-size: 13.5px; color: var(--text-muted); padding: 8px 0; }
.kiln .cart-summary-total { border-top: 1px solid var(--border); margin-top: 8px; padding-top: 16px; font-weight: 700; color: var(--text); font-size: 15px; }
.kiln .cart-checkout-btn { display: block; width: 100%; text-align: center; margin-top: 18px; }

.kiln .checkout-main h3 { font-family: var(--heading); font-size: 17px; margin: 0 0 16px; }
.kiln .address-choice-list { display: flex; flex-direction: column; gap: 10px; margin-bottom: 12px; }
.kiln .address-choice { display: flex; align-items: flex-start; gap: 12px; border: 1px solid var(--border); border-radius: 6px; padding: 14px 16px; cursor: pointer; font-size: 13.5px; color: var(--text-muted); line-height: 1.6; }
.kiln .address-choice:has(input:checked) { border-color: var(--madder); background: var(--surface-2); }
.kiln .address-choice input { margin-top: 4px; accent-color: var(--madder); }
.kiln .address-choice strong { color: var(--text); }
.kiln .duties-banner { margin-top: 24px; padding: 16px 18px; border-radius: 6px; font-size: 13.5px; line-height: 1.6; border: 1px solid var(--border); }
.kiln .duties-banner.is-included { background: rgba(120, 160, 100, .08); border-color: rgba(120, 160, 100, .35); }
.kiln .duties-banner.is-collect { background: rgba(232, 117, 106, .07); border-color: rgba(232, 117, 106, .3); }

/* Order confirmation */
.kiln .kiln-form-narrow { max-width: 620px; }
.kiln .checkout-step-banner { margin-bottom: 36px; }
.kiln .checkout-step-badge {
  display: inline-block; font-family: var(--mono); font-size: 11px; text-transform: uppercase; letter-spacing: .06em;
  color: var(--madder); background: var(--surface-2); padding: 4px 10px; border-radius: 3px; margin-bottom: 14px;
}
.kiln .checkout-step-banner h2 { font-family: var(--heading); font-weight: 700; font-size: 24px; margin: 0 0 8px; }
.kiln .checkout-step-banner p { font-size: 13.5px; color: var(--text-muted); margin: 0; }
.kiln .confirm-check { width: 64px; height: 64px; border-radius: 50%; background: var(--surface-2); color: var(--madder); display: flex; align-items: center; justify-content: center; margin: 0 auto 16px; }
.kiln .confirm-title { text-align: center; font-family: var(--heading); font-size: 26px; margin: 0; }
.kiln .confirm-sub { text-align: center; color: var(--text-muted); font-size: 14px; margin: 6px 0 32px; }
.kiln .confirm-card { border: 1px solid var(--border); border-radius: 6px; padding: 28px; }
.kiln .confirm-card h3, .kiln .confirm-card h4 { font-family: var(--heading); font-size: 15px; margin: 0 0 12px; }
.kiln .confirm-ship { border-top: 1px solid var(--border); margin-top: 20px; padding-top: 20px; }
.kiln .confirm-ship p { font-size: 13.5px; color: var(--text-muted); line-height: 1.7; margin: 0; }
.kiln .confirm-duties { border-top: 1px solid var(--border); margin-top: 20px; padding-top: 20px; font-size: 13px; color: var(--text-muted); }
.kiln .confirm-continue { text-align: center; margin-top: 28px; }

/* Forms (addresses) */
.kiln .kiln-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin-bottom: 18px; }
.kiln .kiln-field-full { grid-column: 1 / -1; }
.kiln .kiln-field label { display: block; font-size: 12.5px; font-weight: 600; color: var(--text-muted); margin-bottom: 6px; }
.kiln .kiln-field input, .kiln .kiln-field select {
  width: 100%; box-sizing: border-box; padding: 11px 13px; font-size: 14px; font-family: var(--sans);
  border: 1px solid var(--border); border-radius: 4px; background: var(--bg); color: var(--text);
}
.kiln .kiln-field input:focus, .kiln .kiln-field select:focus { outline: none; border-color: var(--madder); }
.kiln .kiln-checkbox { display: flex; align-items: center; gap: 8px; font-size: 13.5px; color: var(--text-muted); margin-bottom: 24px; }
.kiln .kiln-checkbox input { accent-color: var(--madder); }
@media (max-width: 640px) { .kiln .kiln-form-grid { grid-template-columns: 1fr; } }
[x-cloak] { display: none !important; }

/* Product page collapsible panels (Description / Shipping / Refund) */
.kiln .policy-panels { display: flex; flex-direction: column; }
.kiln .policy-panel { border-bottom: 1px solid var(--border); }
.kiln .policy-panel summary {
  cursor: pointer; list-style: none; padding: 16px 0;
  font-family: var(--heading); font-weight: 700; font-size: 13.5px;
  display: flex; align-items: center; justify-content: space-between;
  color: var(--text);
}
.kiln .policy-panel summary::-webkit-details-marker { display: none; }
.kiln .policy-panel summary::after {
  content: ''; width: 8px; height: 8px; margin-left: 12px; flex-shrink: 0;
  border-right: 1.5px solid var(--text-muted); border-bottom: 1.5px solid var(--text-muted);
  transform: rotate(45deg); transition: transform .25s var(--ease);
}
.kiln .policy-panel[open] summary::after { transform: rotate(-135deg); }
.kiln .policy-panel-body { padding: 0 0 20px; font-size: 13.5px; line-height: 1.7; color: var(--text-muted); text-align: justify; }
.kiln .policy-panel-body p { margin: 0 0 12px; }
.kiln .policy-panel-body p:last-child { margin-bottom: 0; }
.kiln .policy-panel-body ul, .kiln .policy-panel-body ol { margin: 0 0 12px; padding-left: 20px; }

/* Address list */
.kiln .address-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 20px; }
.kiln .address-card { border: 1px solid var(--border); border-radius: 6px; padding: 20px; font-size: 13.5px; color: var(--text-muted); line-height: 1.6; }
.kiln .address-card-name { font-weight: 700; color: var(--text); margin-top: 6px; }
.kiln .address-card-actions { display: flex; align-items: center; gap: 14px; margin-top: 14px; }
.kiln .address-card-actions form { margin: 0; }

/* Wishlist grid */
.kiln .wishlist-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 28px; }
.kiln .wishlist-card-media { display: block; aspect-ratio: 1; border-radius: 4px; overflow: hidden; background: var(--surface-2); display: flex; align-items: center; justify-content: center; }
.kiln .wishlist-card-media img { width: 100%; height: 100%; object-fit: cover; }
.kiln .wishlist-card-media .no-image { font-size: 12px; color: var(--text-muted); }
.kiln .wishlist-card-name { display: block; margin-top: 10px; font-size: 13.5px; font-weight: 600; color: var(--text); text-decoration: none; }
.kiln .wishlist-card-name:hover { color: var(--madder); }

/* Orders table (My Orders) */
.kiln .orders-table-wrap { overflow-x: auto; }
.kiln .orders-table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.kiln .orders-table th { text-align: left; padding: 12px 16px; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; color: var(--text-muted); border-bottom: 1px solid var(--border); }
.kiln .orders-table td { padding: 14px 16px; border-bottom: 1px solid var(--border); color: var(--text-muted); }
.kiln .orders-table-number { font-weight: 600; color: var(--text); }
.kiln .orders-table-action { text-align: right; }
.kiln .order-show-sub { font-size: 13px; color: var(--text-muted); margin: 4px 0 0; }

/* Order tracking timeline */
.kiln .order-timeline { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 18px; }
.kiln .order-timeline li { display: flex; gap: 12px; }
.kiln .order-timeline-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--madder); margin-top: 6px; flex-shrink: 0; }
.kiln .order-timeline-title { font-weight: 600; font-size: 13.5px; color: var(--text); }
.kiln .order-timeline-message { font-size: 13px; color: var(--text-muted); margin-top: 2px; }
.kiln .order-timeline-date { font-size: 11.5px; color: var(--text-muted); opacity: .75; margin-top: 2px; }

/* ---------- Product detail ---------- */
.kiln section.detail { border-top: 1px solid var(--border); padding: 64px 0 96px; background: var(--surface); }
.kiln .detail-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 64px; align-items: start; }
/* object-fit:contain on the <img> (catalog/show.blade.php) means an image
   narrower/taller than this 1/1.05 box leaves empty space at the sides —
   this background fills that space so it reads as a deliberate mat, not a
   layout gap. Necessary because this product's own gallery mixes several
   very different aspect ratios (poster-style 2:3 up to near-square). */
.kiln .detail-image { aspect-ratio: 1/1.05; position: relative; background: var(--surface-2); }
.kiln .detail-thumbs { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; }
.kiln .detail-thumb {
  width: 68px; height: 68px; padding: 0; flex-shrink: 0; overflow: hidden;
  border: 2px solid transparent; border-radius: 6px; cursor: pointer; background: none;
  opacity: .65; transition: opacity .25s var(--ease), border-color .25s var(--ease);
}
.kiln .detail-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.kiln .detail-thumb:hover { opacity: 1; }
.kiln .detail-thumb.is-active { opacity: 1; border-color: var(--madder); }

.kiln .placard { padding-top: 4px; }
.kiln .placard .cat { font-family: var(--mono); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--madder); margin-bottom: 16px; }
.kiln .placard h1, .kiln .placard h2 { font-family: var(--heading); font-weight: 700; font-size: 32px; letter-spacing: -.01em; margin: 0 0 14px; text-wrap: balance; }
.kiln .placard .price { font-size: 21px; margin-bottom: 12px; display: block; }
.kiln .placard .stock { font-size: 13px; margin-bottom: 26px; }
.kiln .placard .stock.in { color: #1a7a4c; }
.kiln .placard .stock.out { color: var(--madder); }
.kiln .placard .desc { font-size: 1.5rem; line-height: 1.65; color: var(--text-muted); margin-bottom: 32px; max-width: 46ch; text-align: justify; }

.kiln .placard .cta-row { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 16px; }
.kiln .placard .cta-row .btn-primary, .kiln .placard .cta-row .btn-outline { flex: 1 1 160px; text-align: center; margin: 0; }

.kiln dl.placard-fields { border-top: 1px solid var(--border); margin: 0 0 32px; }
.kiln dl.placard-fields .row { display: grid; grid-template-columns: 130px 1fr; padding: 13px 0; border-bottom: 1px solid var(--border); }
.kiln dl.placard-fields dt { font-family: var(--mono); font-size: 11px; letter-spacing: .05em; text-transform: uppercase; color: var(--text-muted); margin: 0; }
.kiln dl.placard-fields dd { margin: 0; font-size: 14px; }

.kiln .variant-row { display: flex; gap: 10px; margin-bottom: 30px; flex-wrap: wrap; }
.kiln .variant-pill {
  font-family: var(--mono); font-size: 12.5px; padding: 9px 16px;
  border: 1px solid var(--border); background: transparent; color: var(--text);
  cursor: pointer; text-decoration: none; display: inline-block;
  transition: border-color .25s var(--ease), color .25s var(--ease), background .25s var(--ease), transform .2s var(--ease);
}
.kiln .variant-pill:hover { transform: translateY(-1px); border-color: var(--brass); }
.kiln .variant-pill.is-selected { border-color: var(--brass); color: var(--brass-glow); background: color-mix(in srgb, var(--brass) 12%, transparent); }
.kiln .variant-pill:disabled { opacity: .4; cursor: not-allowed; text-decoration: line-through; }
.kiln .variant-pill:focus-visible, .kiln .btn-primary:focus-visible, .kiln .add:focus-visible, .kiln .btn-outline:focus-visible { outline: 2px solid var(--indigo); outline-offset: 2px; }

.kiln .review-row { display: flex; gap: 2px; color: var(--brass); margin: 4px 0 20px; }
.kiln .review-row svg { width: 13px; height: 13px; }
.kiln .review-row svg.dim { color: var(--border); }
.kiln .review-row span { font-size: 13px; color: var(--text-muted); margin-left: 6px; }

/* ---------- Trust badges ---------- */
.kiln section.badges { padding: 0 0 88px; }
.kiln .badges-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
.kiln .badge-card {
  border: 1px solid var(--border); border-radius: 4px; padding: 40px 28px;
  text-align: center; background: var(--bg);
  transition: transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s var(--ease), background .3s var(--ease);
}
.kiln .badge-card:hover {
  transform: translateY(-6px); border-color: transparent;
  background: linear-gradient(155deg, #F0897E, #E8756A 60%, #C85647);
  box-shadow: 0 20px 36px -18px rgba(217,97,79,.45);
}
.kiln .badge-card svg { width: 34px; height: 34px; margin-bottom: 18px; color: var(--brass); transition: transform .4s var(--ease), color .3s var(--ease); }
.kiln .badge-card:hover svg { transform: scale(1.12) rotate(-6deg); color: #fff; }
.kiln .badge-card h4 { font-family: var(--heading); font-weight: 700; font-size: 15px; letter-spacing: .02em; text-transform: uppercase; margin: 0 0 8px; transition: color .3s var(--ease); }
.kiln .badge-card:hover h4 { color: #fff; }
.kiln .badge-card p { font-size: 1.4rem; line-height: 1.5; color: var(--text-muted); margin: 0; transition: color .3s var(--ease); }
.kiln .badge-card:hover p { color: rgba(255,255,255,.85); }

/* ---------- Alerts (session status/error) ---------- */
.kiln .alert { padding: 12px 18px; font-size: 13.5px; margin-bottom: 4px; border: 1px solid var(--border); }
.kiln .alert.status { background: #F0F8F2; border-color: #BEE3C8; color: #1a5c34; }
.kiln .alert.error { background: #FDF0EF; border-color: #F3C7C2; color: #8a2c24; }

/* ---------- Footer ---------- */
.kiln footer.site { padding-top: 56px; }
.kiln .foot-grid { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 40px; border-top: 1px solid var(--border); padding: 44px 0 60px; }
.kiln .foot-grid .wordmark { font-size: 18px; margin-bottom: 14px; }
.kiln .foot-grid p { font-family: var(--sans); font-size: 14.5px; color: var(--text-muted); line-height: 1.6; max-width: 30ch; margin: 0; }
.kiln .foot-col h5 { font-family: var(--mono); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--text-muted); margin: 0 0 16px; }
.kiln .foot-col a { display: block; font-family: var(--sans); font-size: 14.5px; text-decoration: none; color: var(--text); margin-bottom: 10px; }
.kiln .foot-col a:hover { color: var(--brass-glow); }
.kiln .foot-bottom { background: var(--footer-dark); }
.kiln .foot-bottom-inner {
  display: flex; align-items: center; justify-content: space-between;
  padding: 20px 0; font-family: var(--mono); font-size: 11.5px; color: var(--footer-dark-text); letter-spacing: .03em;
}
.kiln .foot-bottom-inner a { color: var(--footer-dark-text); text-decoration: underline; text-underline-offset: 2px; }
.kiln .foot-bottom-inner a:hover { color: #fff; }
.kiln .foot-social { display: flex; align-items: center; gap: 14px; }
.kiln .foot-social span { text-transform: uppercase; letter-spacing: .06em; margin-right: 2px; }
.kiln .foot-social a {
  width: 30px; height: 30px; border-radius: 50%; border: 1px solid rgba(255,255,255,.18);
  display: flex; align-items: center; justify-content: center; text-decoration: none;
  transition: border-color .25s var(--ease), background .25s var(--ease), transform .2s var(--ease);
}
.kiln .foot-social a:hover { border-color: var(--brass-glow); background: rgba(255,255,255,.06); transform: translateY(-2px); }
.kiln .foot-social svg { width: 14px; height: 14px; }

/* ---------- Top utility bar on mobile ----------
   header-left (currency/country) and header-right (wishlist/about/contact/
   login) are flex siblings sitting side by side. header-right's 4 items
   don't fit their half of a narrow screen, so they wrap onto several lines —
   and because flex siblings stretch to match each other's height by default,
   header-left's single line of dropdowns gets vertically centered inside
   that same tall box, appearing to float in the middle of header-right's
   wrapped lines. Stacking them as two full-width rows removes the shared
   height entirely, so each wraps on its own, predictably. */
@media (max-width: 767px) {
  .kiln .header-top .inner-wrap { flex-direction: column; align-items: center; gap: 10px; padding: 10px 0; }
  .kiln .header-top .header-left,
  .kiln .header-top .header-right { width: 100%; justify-content: center; }
  .kiln .top-menu { justify-content: center; flex-wrap: wrap; row-gap: 8px; }

  /* ---------- Shop mega-menu on mobile ----------
     The desktop panel is a fixed 900px, 4-column, absolutely-positioned
     block designed to float over the page — hard-coded at a width wider
     than most phones. Below this breakpoint it becomes a plain, full-width,
     single-column panel that flows in normal document flow right under the
     "Shop" row instead of floating, so it can never overflow the screen
     edge or get clipped. */
  .kiln .nav-item.megamenu > .sub-menu {
    position: static; width: 100% !important; left: auto; top: auto; margin-top: 0;
    display: none; opacity: 1; visibility: visible; transition: none;
    border: none; border-top: 1px solid var(--border); box-shadow: none; border-radius: 0;
    flex-direction: column; padding: 18px 4px;
  }
  .kiln .nav-item.megamenu.is-open > .sub-menu { display: flex; }
  /* Opening the panel makes the nav's flex row tall; the header's own
     row (logo/nav vs. search/cart) defaults to vertically centering its
     two halves, which then floats the cart icon down into the middle of
     the open panel. Pin it to the top instead. */
  .kiln .header-main .inner-wrap { align-items: flex-start; }
  .kiln .header-main .header-right { align-self: flex-start; }
  /* Same vertical-centering issue, one level in: ul.menu.menu-skin1 (Home /
     Shop / Contact) also centers its flex children, so opening Shop's now-
     tall dropdown drags "Home" and "Contact" down into the middle of the
     open panel along with it. Pin the whole row to the top too. */
  .kiln .menu.menu-skin1 { align-items: flex-start; }
  .kiln .menu-grid-col,
  .kiln .menu-grid-col.mmenu-with-banner { flex: 1 1 auto; width: 100%; margin-bottom: 22px; }
  .kiln .menu-grid-col:last-child { margin-bottom: 0; }
  .kiln .mmenu-with-banner .banner a { min-height: 100px; }

  /* ---------- Footer on mobile ----------
     The footer's columns (logo/about, Useful Links, Customer Service, My
     Account, Newsletter) sit side by side on desktop via Bootstrap-style
     col-* classes, which stack to full width below this breakpoint — but
     nothing marked where one column's list ended and the next one's
     heading began, so five columns' worth of links read as one long
     undifferentiated list ("Log In" running straight into "CUSTOMER
     SERVICE" with no more space than between any two ordinary links). A
     bottom border + generous spacing turns each stacked column back into
     a visually distinct section. */
  .kiln .footer-main .row > [class*="col-"] {
    padding-bottom: 28px; margin-bottom: 28px; border-bottom: 1px solid rgba(255,255,255,.08);
  }
  .kiln .footer-main .row > [class*="col-"]:last-child {
    padding-bottom: 0; margin-bottom: 0; border-bottom: none;
  }
  /* The fixed go-to-top button was overlapping the last line of real
     content (copyright text) at the very bottom of the page — give the
     page enough trailing space that a corner-docked button never sits on
     top of anything. */
  .kiln .footer-bottom { padding-bottom: 74px; }
  /* Useful Links / Customer Service / My Account: each of these 3 link
     lists (the only <ul class="menu"> lists in the footer — the logo/about
     and newsletter columns use different markup) runs its links in a row
     instead of stacking them, so a short list of links doesn't burn a full
     screen's worth of vertical space one-per-line. */
  .kiln .footer-main .menu { display: flex; flex-direction: row; flex-wrap: wrap; gap: 10px 20px; }
  .kiln .footer-main .menu li { margin: 0; }
}

@media (max-width: 980px) {
  .kiln .slider { height: 460px; }
  .kiln .slide-content h1 { font-size: 2.4rem; }
  .kiln .slider-motif { display: none; }
  .kiln .nav-item.megamenu > .sub-menu { display: none; }
  .kiln .site-search { display: none; }
  .kiln .process-grid, .kiln .grid-products, .kiln .foot-grid { grid-template-columns: 1fr 1fr; }
  .kiln .detail-grid { grid-template-columns: 1fr; gap: 40px; }
  .kiln nav.primary { display: none; }
  .kiln .topbar-message { display: none; }
  .kiln .foot-bottom-inner { flex-direction: column; gap: 12px; text-align: center; }
}

/* ---------- Reveal-on-scroll + page-load sequence ---------- */
@media (prefers-reduced-motion: no-preference) {
  .kiln [data-reveal] {
    opacity: 0; transform: translateY(22px);
    transition: opacity .7s var(--ease), transform .7s var(--ease);
    transition-delay: calc(var(--i, 0) * 80ms);
  }
  .kiln [data-reveal].is-visible { opacity: 1; transform: translateY(0); }

  .kiln .slide.is-active .eyebrow,
  .kiln .slide.is-active .slide-content h1,
  .kiln .slide.is-active .slide-cta {
    opacity: 0; transform: translateY(16px);
    animation: kiln-rise .8s var(--ease) forwards;
  }
  .kiln .slide.is-active .eyebrow { animation-delay: .1s; }
  .kiln .slide.is-active .slide-content h1 { animation-delay: .22s; }
  .kiln .slide.is-active .slide-cta { animation-delay: .4s; }
}

/* ---------- Ported homepage (vendor Elementor demo) ----------
   The copied page CSS (post-2*.css) targets Elementor's auto-generated
   per-element hash classes (.elementor-element-bc3dc0d etc.), which our
   hand-written markup doesn't reproduce. Without them .elementor-container
   has no boxed max-width, so content bleeds to the viewport edge. This
   gives every top-level homepage section a sane centered/gutttered width. */
.kiln .elementor-section-boxed > .elementor-container {
  max-width: 1200px !important;
  margin-left: auto !important;
  margin-right: auto !important;
  padding: 0 20px !important;
  box-sizing: border-box;
}
/* Equal padding between all 5 header banner images (2 hero + 3 promo) — both
   the horizontal gap within each row and the vertical gap between the two
   rows (the latter already 28px via .banner's margin-bottom below). */
.kiln .elementor-section-boxed > .elementor-container.elementor-column-gap-default,
.kiln .elementor-section-boxed > .elementor-container.c-lg-3 {
  gap: 28px;
}
/* Hero banner section (the two "Gifts From the Heart" / "Gifts Worth Keeping"
   columns right below the header's moving promo slider) — brand maroon fill
   behind/between the two banner images, per request. */
.kiln .hero-banners-section { background: #842a2a; padding: 20px 0; }
/* .banner's own margin-bottom:28px (needed elsewhere to separate stacked banner
   rows) was adding extra space under THIS section's banners on top of the
   section's own padding, making the bottom gap visibly taller than the top —
   zero it out here so top/bottom spacing matches. */
.kiln .hero-banners-section .banner { margin-bottom: 0; }
.kiln .Storefront-product-wrapper .products {
  display: flex; flex-wrap: wrap; gap: 20px; list-style: none; padding: 0; margin: 0;
}
.kiln .Storefront-product-wrapper .products .product-wrap { flex: 1 1 220px; max-width: 240px; }
/* Blog grid layout lives further down (.posts.columns-4, plain CSS Grid) —
   this duplicate flex-based rule had higher specificity (.kiln prefix) and
   was silently winning over it, wrapping 4 cards to 3+1 well before the grid
   rule's own responsive breakpoints called for it. */
.kiln section .elementor-container.c-xs-1 { display: flex; flex-wrap: wrap; gap: 20px; }
.kiln section .elementor-container.c-xs-1 > .elementor-column { flex: 1 1 280px; }
@keyframes kiln-rise { to { opacity: 1; transform: translateY(0); } }

/* --- Homepage "Coming Soon" filler cards (vendor template product grid,
   padded out since the real catalog only has a couple of products so far) --- */
.coming-soon-card .product-media img { filter: grayscale(85%); opacity: 0.55; }
.coming-soon-card .coming-soon-ribbon {
    position: absolute; top: 12px; left: 12px; z-index: 2;
    background: rgba(46,33,30,0.85); color: #fff;
    font-family: var(--sans, 'Poppins', sans-serif);
    font-size: 11px; font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase;
    padding: 4px 10px; border-radius: 3px;
}
.coming-soon-card .product-title { color: var(--text-muted, #8a8a8a); }

/* --- Vendor product/blog "grids" were designed to be sized by Owl Carousel's
   JS at runtime (not included here) — give them a real static CSS Grid
   instead so cards don't collapse to unpredictable content-based widths. --- */
.Storefront-product-wrapper .products.columns-5 {
    display: grid; grid-template-columns: repeat(5, 1fr); gap: 24px;
    list-style: none; padding: 0; margin: 0;
}
.posts.columns-4 {
    display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px;
    list-style: none; padding: 0; margin: 0;
}
@media (max-width: 992px) {
    .Storefront-product-wrapper .products.columns-5 { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 700px) {
    .posts.columns-4 { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
    .Storefront-product-wrapper .products.columns-5,
    .posts.columns-4 { grid-template-columns: repeat(2, 1fr); }
}
.Storefront-product-wrapper .products.columns-5 > .product-wrap,
.posts.columns-4 > .post-wrapper { width: 100%; min-width: 0; margin: 0; }

/* Homepage rails only (Featured Products / New Arrivals) — 4 per row instead
   of the shared 5-column grid, so cards run wider; category/search-result
   grids keep 5. Re-declared at each of the shared rule's own breakpoints so
   this doesn't outrank the narrower-viewport step-downs to 3/2 columns. */
.kiln .featured-products .products.columns-5 { grid-template-columns: repeat(4, 1fr); }
@media (max-width: 992px) {
    .kiln .featured-products .products.columns-5 { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 640px) {
    .kiln .featured-products .products.columns-5 { grid-template-columns: repeat(2, 1fr); }
}
/* The shared .product-wrap rule elsewhere caps width at 240px (fine for the
   5-column grid it was written for, where columns run narrower than that
   anyway) — the wider homepage columns above need that cap lifted or cards
   stay pinned at 240px with dead space filling the rest of each grid cell. */
.kiln .featured-products .products.columns-5 > .product-wrap { max-width: none; }

/* Defensive hardening: vendor CSS sets word-break:break-word on .entry-meta/
   .entry-title so a flex-shrunk container degrades gracefully instead of
   overflowing — but combined with any transient width squeeze (stale cache,
   a font not yet loaded, a flex/grid min-width quirk) that turns into
   catastrophic letter-by-letter wrapping. Word-wrapping only at real word
   boundaries can never look like that, so it's a strictly safer default here. */
.posts.columns-4 .entry-meta,
.posts.columns-4 .entry-title,
.posts.columns-4 .entry-title a {
    word-break: normal !important;
    overflow-wrap: normal !important;
    min-width: 0;
}

/* --- Hero/promo banner caption: overlaid ON the photo (per the reference design),
   not floating below it in blank space. Earlier this was made position:static to
   stop it escaping into the NEXT banner when columns stacked at narrow widths —
   that fix threw out the actual design instead of fixing the real problem. The
   real fix: keep it a contained absolute overlay (inset:0 within .banner, which
   is exactly the image's own box) so it can NEVER extend past its own photo,
   stacked or not — no separate space-reservation trick needed. */
.banner { position: relative; overflow: hidden; margin-bottom: 28px; }
.banner-img { display: block; width: 100%; }
.banner-content {
  position: absolute !important; inset: 0 !important;
  width: 100% !important; height: 100% !important;
  display: flex !important; align-items: center !important; justify-content: center !important;
  z-index: 2; background: none !important;
}
.kiln .banner-content.banner-content { align-items: center !important; }
.banner-content-inner {
  transform: none !important;
  padding: 0 40px;
  max-width: 100%;
  text-align: center !important;
  display: flex !important; flex-direction: column !important;
  align-items: center !important; justify-content: center !important;
  align-self: center !important; height: auto !important; flex: 0 0 auto !important;
}
.kiln .banner-content-inner.banner-content-inner.t-y-center { align-items: center !important; justify-content: center !important; }
.banner-content-inner h2, .banner-content-inner h3, .banner-content-inner h4 {
  color: #fff !important;
  text-shadow: 0 2px 12px rgba(0,0,0,.35);
}
.banner-content-inner h2 { font-size: 26px !important; }
.banner-content-inner h3 { font-size: 15px !important; }
.banner-content-inner .btn, .banner-content-inner .btn span {
  color: #fff !important;
  border-color: #fff !important;
}
.banner-content-inner .btn:hover { background: #fff !important; color: var(--text) !important; }
.banner-content-inner .btn:hover span { color: inherit !important; }

/* Homepage product-card border — scoped to .featured-products (the rail
   wrapper shared by both Featured Products and New Arrivals) so category/
   search-result and wishlist cards, which reuse the same .product-dark
   markup, are left unaffected. Was a solid background; now a border instead,
   shown in the brand tint (#feeedf) at rest and swapping to the site's
   standard neutral border color on hover — inverted from the usual pattern
   of a border only appearing on hover. */
.kiln .featured-products .product-dark {
  border: 1px solid #feeedf;
  transition: border-color .3s var(--ease);
}
.kiln .featured-products .product-dark:hover,
.kiln .featured-products .product-dark:focus-within {
  border-color: var(--border);
}

/* --- Product-card hover: quick-actions (wishlist/compare) + Add to Cart bar,
   both hidden by default and revealed with a smooth fade/slide on hover. --- */
.product-media {
    position: relative;
    overflow: hidden;
    display: block;
}
.product-media img { display: block; width: 100%; height: auto; transition: transform 1.6s var(--ease); }
.product-dark:hover .product-media img, .product-dark:focus-within .product-media img { transform: scale(1.015); }
/* Homepage rails only — fixed image height instead of the aspect-ratio-driven
   auto height above, so all cards in a row line up evenly regardless of each
   product photo's native aspect ratio. object-fit:cover crops rather than
   stretching/squashing to fill that fixed box. */
.kiln .featured-products .product-media img { height: 250px; object-fit: cover; }

.product-media .quick-actions {
    position: absolute;
    top: 14px;
    right: 14px;
    z-index: 3;
    display: flex;
    flex-direction: column;
    gap: 8px;
    opacity: 0;
    transform: translateX(10px);
    transition: opacity .9s var(--ease), transform .9s var(--ease);
    pointer-events: none;
}
.product-dark:hover .quick-actions,
.product-dark:focus-within .quick-actions {
    opacity: 1;
    transform: translateX(0);
    pointer-events: auto;
}
.product-media .qa-btn {
    width: 36px; height: 36px;
    display: flex; align-items: center; justify-content: center;
    border-radius: 50%;
    background: var(--text);
    color: #fff;
    border: none;
    cursor: pointer;
    transition: background .25s var(--ease), transform .25s var(--ease);
}
.product-media .qa-btn svg { width: 16px; height: 16px; }
.product-media .qa-btn:hover { background: var(--madder); transform: scale(1.08); }

.product-media .product-action {
    position: absolute;
    left: 0; right: 0; bottom: 0;
    z-index: 3;
    opacity: 0;
    transform: translateY(100%);
    transition: opacity .9s var(--ease), transform .9s var(--ease);
    pointer-events: none;
    /* Vendor's own .product-action rule sets display:flex plus a translucent
       white background — the flex row left the <form> child sized to its
       own content (flex items don't stretch to fill a row by default), so
       the dark button never reached the card's edges and that white
       background showed through as a halo on both sides. */
    background: transparent;
}
.product-media .product-action > form { flex: 1 1 auto; width: 100%; }
.product-dark:hover .product-action,
.product-dark:focus-within .product-action {
    opacity: 1;
    transform: translateY(0);
    pointer-events: auto;
}
.product-media .product-action .button {
    display: flex; align-items: center; justify-content: center; gap: 8px;
    width: 100%;
    /* Vendor's .btn-cart carries margin-right:2rem and .add_to_cart_button a
       fixed width:198px — neither is contested by any property of the same
       name here otherwise, so they applied unopposed and left the bar both
       narrower than the card and offset from its right edge. */
    margin: 0;
    max-width: none;
    box-sizing: border-box;
    background: var(--madder);
    color: #fff;
    border: none;
    padding: 13px 0;
    font-family: var(--sans);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .02em;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
    transition: background .25s var(--ease);
}
.product-media .product-action .button svg { width: 16px; height: 16px; }
.product-media .product-action .button:hover:not(:disabled) { background: var(--text); }
.product-media .product-action .button:disabled { background: var(--text-muted); cursor: not-allowed; }

/* --- Homepage product-rail tabs (real categories, not vendor demo's fake ones) --- */
.tab-pane { display: none; }
.tab-pane.active { display: block; }
.nav-border-anim {
    display: flex; gap: 28px; list-style: none; padding: 0; margin: 0 0 24px;
    border-bottom: 1px solid var(--border);
}
.nav-border-anim .nav-link {
    display: inline-block; padding-bottom: 12px;
    color: var(--text-muted); text-decoration: none;
    font-family: var(--sans); font-weight: 600; font-size: 13px; letter-spacing: .03em;
    border-bottom: 2px solid transparent;
    transition: color .2s var(--ease), border-color .2s var(--ease);
}
.nav-border-anim .nav-item.active .nav-link,
.nav-border-anim .nav-link:hover { color: var(--text); border-bottom-color: var(--madder); }

/* --- Real star ratings (from approved reviews — ProductResource) --- */
.ratings-container { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; margin-top: 6px; }
.star-rating { display: flex; gap: 2px; }
.star-icon { width: 13px; height: 13px; color: var(--border); }
.star-icon.is-filled { color: #F0A83C; }
.reviews-count { font-size: 12px; color: var(--text-muted); }

/* --- Honest section badge (e.g. "Featured") — never a fabricated sale % --- */
.product-labels { position: absolute; top: 12px; left: 12px; z-index: 2; }
.product-label.gift-badge {
    display: inline-block; background: var(--madder); color: #fff;
    font-family: var(--sans); font-size: 10.5px; font-weight: 600;
    letter-spacing: .04em; text-transform: uppercase;
    padding: 6px 12px; border-radius: 20px;
}

/* --- Testimonials: auto-scrolling marquee of review cards. Track holds the
   testimonial set THREE times back-to-back and slides left by exactly one
   third of its own width — with only 3 real testimonials this keeps the
   track comfortably wider than any realistic viewport before it loops, so
   there's never a blank gap at the seam. Pauses on hover so a visitor can
   actually read one without it running away. Cards are plain <div>s (see
   index.blade.php) specifically so they don't inherit the vendor theme's
   default <blockquote> styling. */
/* ---------- Promo slider (crossfade banner below the header) ----------
   Full-bleed crossfade carousel, cycled by kiln.js (adds/removes .is-active
   on .promo-slide / .promo-dot every 5.5s). Each slide gets a slow Ken-Burns
   zoom on its image while active — .promo-slider itself only ever fades
   opacity, so the crop never jumps at the transition. */
/* Vendor's .header-main padding-top/bottom:1.5rem (15px) is what was
   creating the oversized gaps above/below the logo row and above the
   promo slider — trimmed to 8px here so the slider's own margin doesn't
   have to double up on top of it. */
.kiln .header-main { padding-top: 8px; padding-bottom: 8px; background: #feeedf; }

.promo-slider {
    position: relative; width: 100%;
    aspect-ratio: 1881 / 500;
    overflow: hidden;
    background: var(--surface-2);
    margin: 0 0 5px;
}
.promo-slide {
    position: absolute; inset: 0;
    display: block;
    opacity: 0;
    filter: blur(6px);
    clip-path: inset(0 45% 0 0);
    transition: opacity .9s var(--ease), filter .9s var(--ease), clip-path 1s var(--ease);
    pointer-events: none;
}
.promo-slide.is-active { opacity: 1; filter: blur(0); clip-path: inset(0 0 0 0); pointer-events: auto; z-index: 2; }
.promo-slide img { display: block; width: 100%; height: 100%; object-fit: cover; }
.promo-dots { position: absolute; left: 0; right: 0; bottom: 16px; z-index: 3; display: flex; justify-content: center; gap: 9px; }
.promo-dot {
    width: 8px; height: 8px; border-radius: 50%; padding: 0; cursor: pointer;
    border: 1.5px solid rgba(255, 255, 255, .85);
    background: rgba(255, 255, 255, .25);
    transition: background .25s var(--ease), transform .25s var(--ease);
}
.promo-dot.is-active { background: #fff; transform: scale(1.2); }
.promo-dot:hover { background: rgba(255, 255, 255, .6); }
@media (prefers-reduced-motion: reduce) {
    .promo-slide { transition: opacity .3s linear; filter: none; clip-path: none; }
}
@media (max-width: 767px) {
    .promo-slider { aspect-ratio: 1881 / 650; }
}

/* --- Craft strip: static image filmstrip above the testimonials section,
   framed in the brand maroon. Was an auto-scrolling marquee; per request now
   static, so the track is just a plain flex row (no animation, no triple-
   repeat — that repeat existed only to make the scroll loop seamless). --- */
.craft-strip {
    width: 100%;
    border: 10px solid #842a2a;
    background: #842a2a;
    overflow: hidden;
    margin: 48px 0 5px;
}
.craft-strip-track {
    display: flex; justify-content: center; flex-wrap: wrap;
}
.craft-strip-item { flex: 0 0 auto; width: 260px; height: 260px; margin: 3px; overflow: hidden; }
.craft-strip-item img { display: block; width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 767px) {
    .craft-strip-item { width: 170px; height: 170px; }
}

.testimonial-marquee {
    width: 100%; overflow: hidden;
    /* Vertical breathing room so a hovered card's lift (translateY) and shadow
       have somewhere to go instead of being clipped by this container's own
       edge — overflow:hidden only needs to clip horizontally for the scroll. */
    padding: 24px 0;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
    mask-image: linear-gradient(90deg, transparent, #000 5%, #000 95%, transparent);
}
.testimonial-track {
    display: flex; gap: 24px; width: max-content;
    animation: kiln-testimonial-scroll 36s linear infinite;
}
.testimonial-marquee:hover .testimonial-track { animation-play-state: paused; }
@keyframes kiln-testimonial-scroll {
    from { transform: translateX(0); }
    to { transform: translateX(-33.3333%); }
}
.testimonial-card {
    flex: 0 0 360px; margin: 0; padding: 32px 30px; text-align: left;
    background: var(--bg); border: 1px solid var(--border); border-radius: 10px;
    box-shadow: 0 2px 10px rgba(0, 0, 0, .03);
    transition: box-shadow .3s var(--ease), transform .3s var(--ease);
}
.testimonial-card:hover { box-shadow: 0 14px 30px rgba(0, 0, 0, .08); transform: translateY(-3px); }
.testimonial-card .tc-stars { display: flex; gap: 3px; margin-bottom: 16px; }
.testimonial-card .tc-stars svg { width: 15px; height: 15px; fill: var(--madder); }
.testimonial-card .tc-quote { color: var(--text); font-size: 15px; line-height: 1.7; margin: 0 0 24px; }
.testimonial-card .tc-footer {
    display: flex; align-items: center; gap: 14px;
    padding-top: 20px; border-top: 1px solid var(--border);
}
.testimonial-card .tc-avatar {
    width: 42px; height: 42px; border-radius: 50%; flex: 0 0 auto;
    display: flex; align-items: center; justify-content: center;
    background: var(--surface-2); color: var(--madder); font-weight: 700; font-size: 15px;
}
.testimonial-card .tc-who { display: flex; flex-direction: column; }
.testimonial-card .tc-name { font-weight: 600; font-size: 14px; color: var(--text); }
.testimonial-card .tc-role { font-size: 12px; color: var(--text-muted); }

.load-more-btn { padding: 13px 40px; }

/* --- Footer logo: the PNG itself is painted on a white background (matches
   the header, which sits on a white bar), so on the dark footer it needs its
   own light card behind it rather than floating on the dark background raw. --*/
.kiln .footer-logo-box {
    display: inline-flex; background: #fff; border-radius: 6px;
    padding: 10px 16px; margin-bottom: 20px;
}
.kiln .footer-logo-box img { height: 36px; width: auto; display: block; }
/* Same rounded-wrapper treatment as the footer logo, adapted for a white
   header (a plain white box would be invisible there) with a light border
   and soft shadow to read as its own card instead of a flat inline image. */
.kiln .header-logo-box {
    display: inline-flex; background: #fff; border: 1px solid var(--border); border-radius: 8px;
    padding: 6px 14px; box-shadow: 0 2px 8px rgba(0, 0, 0, .04);
}
.kiln .header-logo-box img { height: 44px; width: auto; display: block; }
.kiln .footer .footer-copyright a { color: inherit; text-decoration: underline; margin: 0 2px; }

/* --- Footer newsletter form: unstyled Contact-Form-7 markup was falling back
   to raw browser input sizing (text cropped) and the shared .btn-outline,
   whose border/text color is meant for a light background — invisible on
   this dark footer. Both get dedicated, dark-footer-aware styling here. --*/
.kiln .footer .newsletter-form { display: flex; flex-direction: column; gap: 10px; margin-top: 14px; }
.kiln .footer .wpcf7-form-control-wrap { display: block; width: 100%; }
.kiln .footer .wpcf7-form-control {
    width: 100%; box-sizing: border-box; padding: 12px 14px;
    font-family: var(--sans); font-size: 13.5px; color: #fff;
    background: rgba(255, 255, 255, .07); border: 1px solid rgba(255, 255, 255, .18); border-radius: 4px;
}
.kiln .footer .wpcf7-form-control::placeholder { color: rgba(255, 255, 255, .5); }
.kiln .footer .wpcf7-form-control:focus { outline: none; border-color: var(--madder); background: rgba(255, 255, 255, .1); }
.kiln .footer .newsletter-form .btn-outline {
    width: 100%; text-align: center; color: #fff; border: 1px solid rgba(255, 255, 255, .4); background: transparent;
}
.kiln .footer .newsletter-form .btn-outline:hover { background: var(--madder); border-color: var(--madder); color: #fff; }

/* --- Main nav active-page accent (vendor CSS has no current-page color of its own) --- */
.menu.menu-skin1 > .menu-item > a.is-current { color: var(--madder) !important; }

/* --- Search box: visible bordered box, matching the reference (vendor's own
   border rule needs a modifier class this markup doesn't carry). --- */
.header-search .search-wrapper {
    border: 1px solid var(--border);
    border-radius: 3px;
    overflow: hidden;
}
.header-search .search-wrapper .form-control {
    border: none;
    outline: none;
}
.header-search .search-wrapper .btn-icon {
    border: none;
    background: transparent;
    cursor: pointer;
}

/* The vendor's nav-link padding (padding-top:3.9rem, padding-bottom:3.7rem) is
   built for a much taller desktop header than this one — it's what was
   creating the big visible gap between "Shop" and its dropdown, not the
   dropdown's own offset (already trimmed to 4px above). */
.kiln .menu.menu-skin1 > .menu-item > a { padding-top: 1.6rem !important; padding-bottom: 1.6rem !important; }

/* Elementor's own base rule is `.elementor-column{display:flex}` with NO
   flex-direction set (defaults to row) — the real Elementor runtime must set
   column direction via a rule this static port doesn't carry. Every column
   in this theme is meant to stack its content vertically (heading above a
   grid/marquee/etc.), not lay it out side by side. */
.kiln .elementor-column { flex-direction: column; }
