/*
Theme Name: Hello Elementor Child
Theme URI: https://github.com/elementor/hello-theme-child/
Description: Hello Elementor Child is a child theme of Hello Elementor, created by Elementor team
Author: Elementor Team
Author URI: https://elementor.com/
Template: hello-elementor
Version: 2.0.0
Text Domain: hello-elementor-child
License: GNU General Public License v3 or later.
License URI: https://www.gnu.org/licenses/gpl-3.0.html
Tags: flexible-header, custom-colors, custom-menu, custom-logo, editor-style, featured-images, rtl-language-support, threaded-comments, translation-ready
*/

/* =========================================================
   GOLDENCUT — design system tokens
   1:1 a frontend-mockup/styles.css :root blokkjából, forrás:
   ~/Work/goldencut (elfogadott mockup repo). Ne módosítsd itt
   egyedül — a mockupban változtass előbb, aztán szinkronizáld.
   ========================================================= */
:root {
  /* Surfaces */
  --bg:        #050607;
  --bg-2:      #0b1a14;
  --bg-3:      #03100b;
  --panel:     #0e1a15;
  --panel-2:   #11231b;

  /* Ink */
  --ink:       #f4f3ee;
  --ink-soft:  #c9cdc7;
  --ink-dim:   #8a938c;

  /* Accent — bronze / gold */
  --gold:      #d2bc73;
  --gold-deep: #b89b4e;
  --gold-soft: rgba(210, 188, 115, 0.16);

  /* Greens */
  --green:     #5a9165;
  --green-dim: #44704d;

  --line:      rgba(210, 188, 115, 0.18);
  --line-soft: rgba(244, 243, 238, 0.08);

  --maxw: 1240px;
  --ease: cubic-bezier(0.22, 1, 0.36, 1);

  --f-display: "Fraunces", Georgia, serif;
  --f-body:    "Manrope", system-ui, sans-serif;
}

html { scroll-behavior: smooth; }
/* A mockup alap betűmérete 1rem minden breakpointon; az Elementor Kit
   tablet-tipográfiája 0.96rem-re csökkenti, ami minden em-alapú méretet
   arányosan elcsúsztat. */
body.cat-page, body.product-page { font-size: 1rem !important; }
/* A mockup globális "img { display:block; max-width:100% }" szabálya; a WP-ben
   eddig csak a .bg-plant-scroll (front page) alá volt szűkítve, ezért a
   láblécben az inline kép baseline-rése 7px-szel megnövelte a brand-blokkot
   (480px-en 113px a mockup 106px-e helyett). A saját sablonjaink gyökereire
   szűkítve, hogy plugin-UI-kat ne érintsen. */
.site-header img, .site-footer img, .cat-page img { display: block; max-width: 100%; }

/* =========================================================
   GLOBÁLIS ATMOSZFÉRA — grain + vignette
   A mockup <body>-jának első két eleme; a functions.php
   (wp_body_open) írja ki minden nem-front-page sablonon.
   Korábban ezek a szabályok a .bg-plant-scroll (csak front page)
   body-classra voltak szűkítve, ezért a listaoldalon egyáltalán
   nem érvényesültek — a WP-oldal láthatóan világosabb/laposabb volt.
   ========================================================= */
.grain {
  position: fixed; inset: 0; z-index: 9999; pointer-events: none; opacity: 0.045;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  mix-blend-mode: overlay;
}
.vignette {
  position: fixed; inset: 0; z-index: 9998; pointer-events: none;
  box-shadow: inset 0 0 220px 60px rgba(0,0,0,0.6);
}

/* Reveal-alapszabályok (mockup styles.css) — a .in class-t az archive.js adja */
.js-reveal .reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.9s var(--ease), transform 0.9s var(--ease); }
.js-reveal .reveal.in { opacity: 1; transform: none; }
.js-reveal .reveal[data-delay="1"] { transition-delay: .08s; }
.js-reveal .reveal[data-delay="2"] { transition-delay: .16s; }
.js-reveal .reveal[data-delay="3"] { transition-delay: .24s; }
.js-reveal .reveal[data-delay="4"] { transition-delay: .32s; }

/* Görgetősáv: az Elementor Kit egyedi 8px-es sávot ad (inline <style>:
   "::-webkit-scrollbar{width:8px}" + html{scrollbar-color:…}), a mockup
   viszont a natív 15px-es sávval renderel. A 7px eltérés a teljes tartalmi
   szélességet és így MINDEN középre zárt elem x-koordinátáját 3,5px-szel
   elcsúsztatja. Visszaállítjuk a natív méretre. */
::-webkit-scrollbar { width: 15px !important; height: 15px !important; }
::-webkit-scrollbar-track { background: #f1f1f1 !important; }
::-webkit-scrollbar-thumb { background: #c1c1c1 !important; border-radius: 0 !important; border: 3px solid #f1f1f1 !important; }
::-webkit-scrollbar-thumb:hover { background: #a8a8a8 !important; }
html { scrollbar-color: auto !important; scrollbar-width: auto !important; }

/* =========================================================
   KOSÁRBA HELYEZVE — TOAST ÉRTESÍTÉS
   Új komponens (nincs a frontend-mockup/-ban, l. CLAUDE.md): a mockup
   arany/frosted-glass nyelvén (--line szegély, --bg-2 üvegréteg, Fraunces
   kurzív terméknév, a .btn-primary arany-gradiens a gombon), jobb felső
   sarokban. A .woocommerce-message wrappert a Woo add-to-cart notice
   sablonja adja (wc_print_notices → notices/success.php); itt csak a
   belső tartalmát cseréljük (functions.php, wc_add_to_cart_message_html),
   a fixed pozicionálást és eltűnést ez a szabály + header-footer.js végzi.
   ========================================================= */
.woocommerce-message {
  position: fixed; top: 1.5rem; right: 1.5rem; z-index: 10000;
  display: flex; align-items: center; gap: 1rem; flex-wrap: wrap;
  max-width: 360px; width: calc(100% - 3rem);
  padding: 1.1rem 1.3rem;
  background: rgba(11,26,20,0.86); backdrop-filter: blur(14px) saturate(140%);
  border: 1px solid var(--line); border-radius: 4px;
  box-shadow: 0 24px 50px -20px rgba(0,0,0,0.8);
  color: var(--ink-soft); font-family: var(--f-body); font-size: 0.92rem; line-height: 1.5;
  list-style: none; animation: gc-toast-in .4s var(--ease);
}
.woocommerce-message::before { display: none !important; }
.woocommerce-message .gc-toast-name { font-family: var(--f-display); font-style: italic; color: var(--gold); }
.woocommerce-message .gc-toast-btn {
  margin-left: auto; display: inline-flex; align-items: center; justify-content: center;
  padding: 0.6rem 1.3rem; font-family: var(--f-body); font-weight: 600;
  font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase;
  border-radius: 2px; white-space: nowrap; text-decoration: none;
  background: linear-gradient(180deg, var(--gold), var(--gold-deep)); color: #15110a;
  box-shadow: 0 10px 30px -12px rgba(210,188,115,0.5);
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
}
.woocommerce-message .gc-toast-btn:hover { transform: translateY(-3px); box-shadow: 0 18px 40px -14px rgba(210,188,115,0.65); }
.woocommerce-message.gc-toast-out { animation: gc-toast-out .35s var(--ease) forwards; }
@keyframes gc-toast-in { from { opacity: 0; transform: translateY(-12px); } }
@keyframes gc-toast-out { to { opacity: 0; transform: translateY(-12px); } }
@media (max-width: 540px) {
  .woocommerce-message { left: 1rem; right: 1rem; top: 1rem; max-width: none; width: auto; }
}

/* =========================================================
   HEADER (frontend-mockup/index3-4.html + styles.css + styles3-2.css)
   ========================================================= */
.site-header {
  /* display:block !important: a theme/Kit szabálya flex + space-between-re
     állítja; a mockup .site-header-je sima block (a layoutot a .header-inner
     viszi). Geometriailag egyezik, de az azonosság kedvéért rögzítjük. */
  display: block !important;
  position: fixed; top: 0; left: 0; right: 0; z-index: 100;
  transition: background 0.5s var(--ease), border-color 0.5s var(--ease), padding 0.4s var(--ease);
  border-bottom: 1px solid transparent;
  font-family: var(--f-body);
}
.site-header::before {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: linear-gradient(180deg, rgba(3,7,5,0.85) 0%, rgba(3,7,5,0.45) 45%, transparent 100%);
  transition: opacity 0.5s var(--ease); opacity: 1;
}
.site-header.scrolled::before { opacity: 0; }
.site-header.scrolled {
  background: rgba(5,8,7,0.72);
  backdrop-filter: blur(14px) saturate(140%);
  border-bottom-color: var(--line-soft);
}
.site-header .header-inner {
  /* flex-wrap: nowrap !important — a theme/Kit wrap-ot ad, ezért 1024px-en a
     fejléc három sorba tört (137px) a mockup egysoros, zsugorodó 79px-e helyett.
     A mockupban a nav zsugorodik (a linkek szövege tördel), nem tör a fejléc. */
  flex-wrap: nowrap !important;
  max-width: var(--maxw); margin: 0 auto; padding: 1.4rem 2rem;
  display: flex; align-items: center; justify-content: space-between; gap: 2rem;
  transition: padding 0.4s var(--ease);
}
.site-header.scrolled .header-inner { padding-top: 0.9rem; padding-bottom: 0.9rem; }
.site-header .brand { display: inline-flex; }
.site-header .brand-logo {
  height: 44px; width: auto;
  filter: drop-shadow(0 1px 6px rgba(0,0,0,0.5));
}
.site-header.scrolled .brand-logo { height: 34px; transition: height 0.4s var(--ease); }

.site-header .main-nav { display: flex; gap: 2.4rem; }
.site-header .main-nav a {
  /* white-space: normal !important — a Kit nowrap-ot ad, ezért a nav nem tudott
     zsugorodni, és 1024px-en az egész .header-inner három sorba tört (137px
     magas fejléc a mockup 79px-e helyett). */
  white-space: normal !important;
  font-size: 0.8rem; letter-spacing: 0.14em; text-transform: uppercase;
  font-weight: 500; color: var(--ink-soft); position: relative; padding: 0.3rem 0;
  text-decoration: none;
}
.site-header .main-nav a::after {
  content: ""; position: absolute; left: 0; bottom: 0; height: 1px; width: 0;
  background: var(--gold); transition: width 0.35s var(--ease);
}
.site-header .main-nav a:hover { color: var(--ink); }
.site-header .main-nav a:hover::after { width: 100%; }
.site-header .main-nav .nav-account { color: var(--gold); }
.site-header .main-nav .nav-account:hover { color: var(--gold); }
.site-header .main-nav .nav-account::after { background: var(--gold); }

.site-header .header-actions { display: flex; align-items: center; gap: 0.6rem; }
.site-header .icon-btn {
  /* !important a width/height/padding-en: a <button class="icon-btn lang"> és
     <button class="icon-btn nav-toggle"> valódi <button> elemek, ezért az
     Elementor Kit globális gomb-stílusa (padding: 22px 30px, magasabb
     specificitású <button> szelektorral) felülírja a 42px kör-méretet
     62×46px-re — ez pontosan a mockup 72px és a WP 76px fejléc-magasság
     közti 4px eltérés forrása. */
  background: transparent !important; border: 1px solid var(--line-soft); color: var(--ink-soft);
  width: 42px !important; height: 42px !important; padding: 0 !important; border-radius: 50%; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  /* !important: a natív <button> böngésző-alapértelmezett betűtípust kap
     (Arial-szerű), amit se a Kit, se a mi korábbi szabályaink nem írtak
     felül — a "HU" nyelv-gomb és a mobil hamburger az egyetlen látható hely
     az egész oldalon, ahol nem Manrope jelent meg. */
  font-family: var(--f-body) !important;
  font-size: 0.72rem; font-weight: 600; letter-spacing: 0.08em; position: relative;
  transition: border-color 0.3s var(--ease), color 0.3s var(--ease);
  text-decoration: none;
}
.site-header .icon-btn:hover { border-color: var(--gold); color: var(--gold); }
/* A mockupban a <button class="icon-btn lang"> nem kap font-family-t, ezért a
   böngésző alapértelmezett Arialjával renderel — ez a mockup saját
   artefaktuma volt, amit korábban 1:1 reprodukáltunk. Kifejezett user-utasítás
   (2026-07-31): a site-en SOHA nem jelenhet meg más font, mint Fraunces/
   Manrope, kivétel nélkül minden oldalon — ez felülírja a korábbi 1:1
   mockup-egyezés döntést erre az egy elemre. */
.site-header .icon-btn.lang {
  font-family: var(--f-body) !important; text-transform: none !important; line-height: normal !important;
}
.site-header .cart-count {
  position: absolute; top: -4px; right: -4px; background: var(--gold); color: #15110a;
  font-size: 0.62rem; font-weight: 700; min-width: 18px; height: 18px; border-radius: 9px;
  display: grid; place-items: center; transition: transform 0.2s var(--ease);
}
.site-header .cart-count.pop { transform: scale(1.4); }

/* ---------- Mobil hamburger menü (styles3-2.css) ---------- */
.site-header .nav-toggle { display: none; }
.site-header .nav-toggle-bars { display: block; width: 20px; height: 14px; position: relative; }
.site-header .nav-toggle-bars span {
  position: absolute; left: 0; width: 100%; height: 2px; border-radius: 2px;
  background: currentColor; transition: transform .3s var(--ease), opacity .2s var(--ease), top .3s var(--ease);
}
.site-header .nav-toggle-bars span:nth-child(1) { top: 0; }
.site-header .nav-toggle-bars span:nth-child(2) { top: 6px; }
.site-header .nav-toggle-bars span:nth-child(3) { top: 12px; }
.site-header.nav-open .nav-toggle-bars span:nth-child(1) { top: 6px; transform: rotate(45deg); }
.site-header.nav-open .nav-toggle-bars span:nth-child(2) { opacity: 0; }
.site-header.nav-open .nav-toggle-bars span:nth-child(3) { top: 6px; transform: rotate(-45deg); }

@media (max-width: 900px) {
  .site-header .nav-toggle { display: inline-flex; }
  .site-header .main-nav { display: flex; }
  .site-header .header-actions { gap: 0.45rem; }
  .site-header .header-actions .icon-btn.lang { display: none; }
  .site-header .header-actions .icon-btn.account { display: none; }
  .site-header .main-nav .nav-account { margin-top: 0.3rem; }
  .site-header .icon-btn.cart, .site-header .nav-toggle { color: var(--ink); }

  .site-header .main-nav {
    position: absolute; top: 100%; left: 0; right: 0;
    flex-direction: column; gap: 0;
    background: rgba(5, 8, 7, 0.97);
    backdrop-filter: blur(12px) saturate(140%);
    border-top: 1px solid var(--line-soft);
    border-bottom: 1px solid var(--line-soft);
    padding: 0.5rem 1.5rem 1rem;
    box-shadow: 0 24px 40px -20px rgba(0,0,0,0.8);
    opacity: 0; visibility: hidden; transform: translateY(-8px);
    transition: opacity .3s var(--ease), transform .3s var(--ease), visibility .3s;
  }
  .site-header.nav-open .main-nav {
    opacity: 1; visibility: visible; transform: none;
  }
  .site-header .main-nav a {
    padding: 1rem 0; font-size: 1rem; letter-spacing: 0.08em;
    border-bottom: 1px solid var(--line-soft); color: var(--ink-soft);
  }
  .site-header .main-nav a:last-child { border-bottom: none; }
  .site-header .main-nav a::after { display: none; }
}
@media (max-width: 540px) {
  .site-header .header-inner { padding: 1rem 1.2rem; }
}

/* =========================================================
   FOOTER (frontend-mockup/index3-4.html + styles.css)
   ========================================================= */
.site-footer { background: var(--bg); padding: 4.5rem 2rem 2rem; font-family: var(--f-body); }
.site-footer a { text-decoration: none; }
.site-footer .footer-grid {
  max-width: var(--maxw); margin: 0 auto; display: grid;
  grid-template-columns: 1.6fr 1fr 1fr 1.2fr; gap: 2.5rem; padding-bottom: 3rem;
  border-bottom: 1px solid var(--line-soft);
}
.site-footer .footer-brand .brand-logo { height: 40px; margin-bottom: 1.2rem; }
/* margin-bottom 0 !important: az Elementor Kit globális bekezdés-margója
   (14.4px) különben megnyújtja a lábléc-brand blokkot. */
.site-footer .footer-brand p { color: var(--ink-dim); max-width: 22rem; font-size: 0.92rem; margin-bottom: 0 !important; }
.site-footer .footer-col h5 {
  font-family: var(--f-body) !important;
  /* margin-top 0 + line-height 1.6 !important: a Kit heading-szabálya 8px
     felső margót és 1.4-es sormagasságot ad, ezért a lábléc-oszlopok 8px-szel
     lejjebb csúsztak és a lábléc 5,7px-szel magasabb lett a mockupnál. */
  font-size: 0.72rem; letter-spacing: 0.22em; text-transform: uppercase; color: var(--gold);
  margin: 0 0 1.2rem !important; line-height: 1.6 !important; font-weight: 600;
}
.site-footer .footer-col a { display: block; color: var(--ink-soft); font-size: 0.92rem; padding: 0.35rem 0; transition: color .3s var(--ease), padding-left .3s var(--ease); }
.site-footer .footer-col a:hover { color: var(--gold); padding-left: 6px; }
.site-footer .footer-eu { display: flex; gap: 1rem; align-items: center; margin-top: 1.4rem; opacity: 0.8; }
.site-footer .footer-eu img { height: 38px; width: auto; }
.site-footer .footer-bottom {
  max-width: var(--maxw); margin: 1.6rem auto 0; display: flex; justify-content: space-between;
  color: var(--ink-dim); font-size: 0.78rem; flex-wrap: wrap; gap: 0.6rem;
}

@media (max-width: 980px) {
  .site-footer .footer-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 540px) {
  .site-footer .footer-grid { grid-template-columns: 1fr; }
}

/* =========================================================
   FŐOLDAL (frontend-mockup/index3-4.html + styles.css +
   styles3.css + styles3-2.css + styles3-3.css + styles3-4.css)
   Csak a Főoldal sablon (`page-front`) tartalmazza ezt a body
   osztályt (lásd wp-theme/elementor-templates/home.json).
   ========================================================= */
body.bg-plant-scroll {
  /* !important: felülírja az Elementor Kit szintű globális body háttérképét
     (hatter.webp / noveny-hatter-blurred.webp) — a Főoldalon a saját
     .page-bg elemünk adja a hátteret, nem a Kit beállítás. */
  background: var(--bg) !important;
  color: var(--ink);
  font-family: var(--f-body);
  font-weight: 400;
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}
.bg-plant-scroll img { display: block; max-width: 100%; }
.bg-plant-scroll ::selection { background: var(--gold); color: #1a1408; }

.bg-plant-scroll .grain {
  position: fixed; inset: 0; z-index: 9999; pointer-events: none; opacity: 0.045;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
  mix-blend-mode: overlay;
}
.bg-plant-scroll .vignette {
  position: fixed; inset: 0; z-index: 9998; pointer-events: none;
  box-shadow: inset 0 0 220px 60px rgba(0,0,0,0.6);
}

.bg-plant-scroll .page-bg {
  position: absolute; top: 0; left: 0; width: 100%; z-index: -3;
  aspect-ratio: 1920 / 2885;
  background: url("/wp-content/uploads/2026/07/bg_hq-scaled.jpg") top center / cover no-repeat;
}
.bg-plant-scroll .page-bg::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg,
    rgba(5,8,7,0.35) 0%, rgba(5,8,7,0.55) 45%, rgba(5,8,7,0.80) 80%, rgba(5,8,7,1) 100%);
}
@media (max-width: 760px) {
  .bg-plant-scroll .page-bg {
    aspect-ratio: auto; height: 150vh;
    background-size: cover; background-position: top center;
  }
}

/* ---------- Shared typography ---------- */
.bg-plant-scroll .eyebrow {
  font-size: 0.72rem; letter-spacing: 0.34em; font-weight: 600;
  color: var(--gold); text-transform: uppercase;
}
.bg-plant-scroll .section-title {
  font-family: var(--f-display); font-weight: 400;
  font-size: clamp(2rem, 4.5vw, 3.4rem); line-height: 1.05; letter-spacing: -0.01em;
}
.bg-plant-scroll .italic { font-style: italic; color: var(--gold); }
.bg-plant-scroll .section-head { max-width: 720px; margin: 0 auto 3.5rem; text-align: center; }
.bg-plant-scroll .section-head .eyebrow { display: block; margin-bottom: 1rem; }
.bg-plant-scroll .section-head.row {
  display: flex; align-items: flex-end; justify-content: space-between;
  max-width: var(--maxw); margin-left: auto; margin-right: auto; text-align: left; gap: 2rem;
}
.bg-plant-scroll .section-head.row .eyebrow { margin-bottom: 0.6rem; }
.bg-plant-scroll .link-all { color: var(--gold); font-weight: 600; font-size: 0.9rem; white-space: nowrap; }
.bg-plant-scroll .link-all em { font-style: normal; transition: transform 0.3s var(--ease); display: inline-block; }
.bg-plant-scroll .link-all:hover em { transform: translateX(6px); }

/* ---------- Buttons ---------- */
.bg-plant-scroll .btn {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0.95rem 1.9rem; font-family: var(--f-body); font-weight: 600;
  font-size: 0.82rem; letter-spacing: 0.12em; text-transform: uppercase;
  border-radius: 2px; cursor: pointer; border: 1px solid transparent;
  transition: transform 0.4s var(--ease), background 0.4s var(--ease), color 0.4s var(--ease), border-color 0.4s var(--ease);
  text-decoration: none;
}
.bg-plant-scroll .btn-primary {
  background: linear-gradient(180deg, var(--gold), var(--gold-deep));
  color: #15110a; box-shadow: 0 10px 30px -12px rgba(210,188,115,0.5);
}
.bg-plant-scroll .btn-primary:hover { transform: translateY(-3px); box-shadow: 0 18px 40px -14px rgba(210,188,115,0.65); }
.bg-plant-scroll .btn-ghost {
  background: rgba(255,255,255,0.02); color: var(--ink);
  border-color: var(--line); backdrop-filter: blur(6px);
}
.bg-plant-scroll .btn-ghost:hover { border-color: var(--gold); color: var(--gold); transform: translateY(-3px); }

/* ---------- HERO ---------- */
.bg-plant-scroll .hero {
  position: relative; min-height: 100svh; display: flex; align-items: center;
  padding: 8rem 2rem 4rem; background: transparent;
}
.bg-plant-scroll .hero::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  background: linear-gradient(90deg,
    rgba(5,8,7,0.86) 0%, rgba(5,8,7,0.5) 42%, rgba(5,8,7,0.12) 72%, transparent 100%);
}
.bg-plant-scroll .hero-content,
.bg-plant-scroll .hero-scroll { position: relative; z-index: 1; }
.bg-plant-scroll .hero-content { max-width: var(--maxw); margin: 0 auto; width: 100%; }
.bg-plant-scroll .hero .eyebrow { margin-bottom: 1.6rem; }
.bg-plant-scroll .hero-title {
  font-family: var(--f-display); font-weight: 300;
  font-size: clamp(3rem, 9vw, 7.5rem); line-height: 0.94; letter-spacing: -0.02em;
  margin-bottom: 1.8rem;
}
.bg-plant-scroll .hero-title span { display: block; }
.bg-plant-scroll .hero-lead { max-width: 30rem; color: var(--ink-soft); font-size: 1.1rem; margin-bottom: 2.4rem; }
.bg-plant-scroll .hero-cta { display: flex; gap: 1rem; flex-wrap: wrap; }
.bg-plant-scroll .hero-scroll {
  position: absolute; left: 0; right: 0; bottom: 2.2rem; transform: none;
  display: flex; flex-direction: column; align-items: center; gap: 0.7rem; z-index: 2;
  font-size: 0.62rem; letter-spacing: 0.3em; text-transform: uppercase; color: var(--ink-dim);
}
.bg-plant-scroll .hero-scroll .line { width: 1px; height: 46px; background: linear-gradient(var(--gold), transparent); }
.bg-plant-scroll .hero-scroll .line::after {
  content:""; display:block; width:1px; height:14px; background: var(--gold);
  animation: gcHomeScrollDot 1.8s var(--ease) infinite;
}
@keyframes gcHomeScrollDot { 0%{transform:translateY(0);opacity:1} 70%{transform:translateY(40px);opacity:0} 100%{opacity:0} }

/* ---------- Reveal-on-scroll (home.js) ---------- */
.bg-plant-scroll .reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.9s var(--ease), transform 0.9s var(--ease); }
.bg-plant-scroll .reveal.in { opacity: 1; transform: none; }
.bg-plant-scroll .reveal[data-delay="1"]{ transition-delay: .08s } .bg-plant-scroll .reveal[data-delay="2"]{ transition-delay:.16s }
.bg-plant-scroll .reveal[data-delay="3"]{ transition-delay:.24s } .bg-plant-scroll .reveal[data-delay="4"]{ transition-delay:.32s }
.bg-plant-scroll .reveal[data-delay="5"]{ transition-delay:.5s }

/* ---------- MARQUEE ---------- */
.bg-plant-scroll .marquee {
  position: relative; border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft);
  background: rgba(3,8,5,0.62); backdrop-filter: blur(3px) saturate(130%);
  overflow: hidden; padding: 1.1rem 0;
}
.bg-plant-scroll .marquee-track {
  display: flex; gap: 2.4rem; white-space: nowrap; width: max-content;
  animation: gcHomeMarquee 32s linear infinite;
}
.bg-plant-scroll .marquee-track span { font-family: var(--f-display); font-style: italic; font-size: 1.5rem; color: var(--ink-soft); }
.bg-plant-scroll .marquee-track i { color: var(--gold); font-style: normal; align-self: center; }
@keyframes gcHomeMarquee { to { transform: translateX(-50%); } }

/* ---------- SECTION SHELL ---------- */
.bg-plant-scroll .categories,
.bg-plant-scroll .featured,
.bg-plant-scroll .newsletter { padding: 7rem 2rem; position: relative; }
.bg-plant-scroll .section-head,
.bg-plant-scroll .section-head.row {
  opacity: 0; transform: translateY(20px); transition: opacity .8s var(--ease), transform .8s var(--ease);
}
.bg-plant-scroll .section-head.in { opacity: 1; transform: none; }
.bg-plant-scroll .categories { background: rgba(5,8,7,0.50); backdrop-filter: blur(4px) saturate(120%); }
.bg-plant-scroll .categories .cat-intro { margin-top: 1rem; color: var(--ink-soft); max-width: 46ch; margin-left: auto; margin-right: auto; }

/* ---------- CATEGORIES (3 oszlop, styles3-3.css) ---------- */
.bg-plant-scroll .cat-grid {
  max-width: var(--maxw); margin: 0 auto; display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.6rem;
}
.bg-plant-scroll .cat-card {
  position: relative; overflow: hidden; border-radius: 4px; min-height: 460px;
  display: flex; align-items: flex-end; border: 1px solid var(--line-soft);
  opacity: 0; transform: translateY(30px); transition: opacity .8s var(--ease), transform .8s var(--ease), border-color .5s var(--ease);
}
.bg-plant-scroll .cat-card.in { opacity: 1; transform: none; }
.bg-plant-scroll .cat-card:nth-child(2) { transition-delay: .1s; }
.bg-plant-scroll .cat-card:nth-child(3) { transition-delay: .2s; }
.bg-plant-scroll .cat-card .cat-img {
  position: absolute; inset: 0; background: var(--cat-img) center top/cover no-repeat;
  transform: scale(1.05); transform-origin: center top; transition: transform 1s var(--ease); z-index: 0;
}
.bg-plant-scroll .cat-card::after {
  content: ""; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(0deg, rgba(3,8,5,0.95) 8%, rgba(3,8,5,0.35) 55%, rgba(3,8,5,0.15));
  transition: background .5s var(--ease);
}
.bg-plant-scroll .cat-card:hover { border-color: var(--gold); }
.bg-plant-scroll .cat-card:hover .cat-img { transform: scale(1.12); }
.bg-plant-scroll .cat-body { position: relative; z-index: 2; padding: 2.4rem; }
.bg-plant-scroll .cat-index { font-family: var(--f-display); font-style: italic; color: var(--gold); font-size: 1rem; display: block; margin-bottom: 0.6rem; }
.bg-plant-scroll .cat-body h3 { font-family: var(--f-display); font-weight: 400; font-size: 2rem; margin-bottom: 0.7rem; }
.bg-plant-scroll .cat-body p { color: var(--ink-soft); max-width: 30rem; margin-bottom: 1.2rem; }
.bg-plant-scroll .cat-link { color: var(--gold); font-weight: 600; font-size: 0.85rem; letter-spacing: 0.08em; }
.bg-plant-scroll .cat-link em { font-style: normal; display: inline-block; transition: transform .3s var(--ease); }
.bg-plant-scroll .cat-card:hover .cat-link em { transform: translateX(7px); }
/* Harmadik kártya: fotó helyett ikon-placeholder (Kiegészítő termékek, még nincs valós termékkép) */
.bg-plant-scroll .cat-card--tool .cat-img {
  background:
    radial-gradient(circle at 50% 38%, rgba(210,188,115,0.12), transparent 62%),
    linear-gradient(160deg, #10231a 0%, #07120d 100%);
  transform: none; display: flex; align-items: center; justify-content: center;
}
.bg-plant-scroll .cat-card--tool:hover .cat-img { transform: none; }
.bg-plant-scroll .cat-tool-svg { width: 92px; height: 92px; color: var(--gold); opacity: 0.6; transition: transform .6s var(--ease), opacity .4s var(--ease); }
.bg-plant-scroll .cat-card--tool:hover .cat-tool-svg { transform: scale(1.08) rotate(-6deg); opacity: 0.85; }

/* ---------- FEATURED PRODUCTS ---------- */
.bg-plant-scroll .featured { background: rgba(5,8,7,0.62) !important; backdrop-filter: blur(4px) saturate(120%); }
.bg-plant-scroll .product-grid {
  max-width: var(--maxw); margin: 3.5rem auto 0; display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.4rem;
}
.bg-plant-scroll .product {
  background: rgba(12,22,17,0.85); border: 1px solid var(--line-soft); border-radius: 4px; overflow: hidden;
  opacity: 0; transform: translateY(28px); transition: opacity .7s var(--ease), transform .7s var(--ease), border-color .4s var(--ease), box-shadow .4s var(--ease);
}
.bg-plant-scroll .product.in { opacity: 1; transform: none; }
.bg-plant-scroll .product:nth-child(2){transition-delay:.08s} .bg-plant-scroll .product:nth-child(3){transition-delay:.16s} .bg-plant-scroll .product:nth-child(4){transition-delay:.24s}
.bg-plant-scroll .product:hover { border-color: var(--line); box-shadow: 0 24px 50px -28px rgba(0,0,0,0.8); }
.bg-plant-scroll .product-media { display: block; position: relative; aspect-ratio: 1/1; overflow: hidden; }
.bg-plant-scroll .product-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease); }
.bg-plant-scroll .product:hover .product-media img { transform: scale(1.07); }
.bg-plant-scroll .add-btn {
  position: absolute; left: 0.9rem; right: 0.9rem; bottom: 0.9rem; z-index: 2;
  background: rgba(5,8,7,0.85); backdrop-filter: blur(6px); color: var(--ink);
  border: 1px solid var(--line); border-radius: 2px; padding: 0.75rem; cursor: pointer;
  font-family: var(--f-body); font-weight: 600; font-size: 0.78rem; letter-spacing: 0.1em; text-transform: uppercase;
  opacity: 0; transform: translateY(10px); transition: opacity .4s var(--ease), transform .4s var(--ease), background .3s var(--ease), color .3s var(--ease);
}
.bg-plant-scroll .product:hover .add-btn { opacity: 1; transform: none; }
.bg-plant-scroll .add-btn:hover { background: var(--gold); color: #15110a; border-color: var(--gold); }
.bg-plant-scroll .product-info { padding: 1.3rem 1.3rem 1.6rem; }
.bg-plant-scroll .product-info h3 { font-family: var(--f-display); font-weight: 400; font-size: 1.18rem; margin-bottom: 0.25rem; }
.bg-plant-scroll .product-info h3 a { color: inherit; text-decoration: none; }
.bg-plant-scroll .product-cat { color: var(--ink-dim); font-size: 0.78rem; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 0.7rem; }
.bg-plant-scroll .product-price strong { color: var(--gold); font-size: 1.1rem; font-weight: 700; }

/* ---------- STORY (logó-variáns, styles3-2.css) ---------- */
.bg-plant-scroll .story {
  display: grid; grid-template-columns: 1fr 1fr; align-items: stretch;
  max-width: var(--maxw); margin: 2rem auto; gap: 0;
  border: 1px solid var(--line-soft); border-radius: 4px; overflow: hidden;
}
.bg-plant-scroll .story-media {
  overflow: hidden; min-height: 480px;
  opacity: 0; transform: translateX(-30px); transition: opacity .9s var(--ease), transform .9s var(--ease);
  display: flex; align-items: center; justify-content: center;
  padding: clamp(1rem, 2vw, 2rem); background: rgba(8, 16, 12, 0.55);
}
.bg-plant-scroll .story-media.in { opacity: 1; transform: none; }
.bg-plant-scroll .story-media img {
  width: min(560px, 100%); height: auto; object-fit: contain;
  transform: none !important; filter: drop-shadow(0 10px 30px rgba(0,0,0,0.5));
}
.bg-plant-scroll .story-body {
  padding: clamp(2.5rem, 5vw, 4.5rem); background: rgba(12,24,18,0.88); backdrop-filter: blur(4px);
  display: flex; flex-direction: column; justify-content: center; gap: 1.3rem;
  opacity: 0; transform: translateX(30px); transition: opacity .9s var(--ease) .1s, transform .9s var(--ease) .1s;
}
.bg-plant-scroll .story-body.in { opacity: 1; transform: none; }
.bg-plant-scroll .story-body .eyebrow { margin-bottom: 0.3rem; }
.bg-plant-scroll .story-body p { color: var(--ink-soft); }
.bg-plant-scroll .story-body .btn { align-self: flex-start; margin-top: 0.6rem; }

/* ---------- BENEFITS ---------- */
.bg-plant-scroll .benefits {
  max-width: none; margin: 0 auto; padding: 5rem 2rem;
  background: rgba(5,8,7,0.5); backdrop-filter: blur(3px);
  display: flex; flex-wrap: wrap; justify-content: center; gap: 1.4rem;
}
.bg-plant-scroll .benefit {
  max-width: 280px; padding: 2rem 1.6rem; border: 1px solid var(--line-soft); border-radius: 4px; background: rgba(8,14,11,0.6);
  opacity: 0; transform: translateY(24px); transition: opacity .7s var(--ease), transform .7s var(--ease), border-color .4s var(--ease);
}
.bg-plant-scroll .benefit.in { opacity: 1; transform: none; }
.bg-plant-scroll .benefit:nth-child(2){transition-delay:.08s} .bg-plant-scroll .benefit:nth-child(3){transition-delay:.16s} .bg-plant-scroll .benefit:nth-child(4){transition-delay:.24s}
.bg-plant-scroll .benefit:hover { border-color: var(--line); }
.bg-plant-scroll .benefit-ico {
  font-size: 1.6rem; color: var(--gold); margin-bottom: 1rem;
  width: 54px; height: 54px; border: 1px solid var(--line); border-radius: 50%;
  display: grid; place-items: center;
}
.bg-plant-scroll .benefit h4 { font-family: var(--f-display); font-weight: 500; font-size: 1.15rem; margin-bottom: 0.4rem; }
.bg-plant-scroll .benefit p { color: var(--ink-soft); font-size: 0.92rem; }

/* ---------- NEWSLETTER ---------- */
.bg-plant-scroll .newsletter {
  background:
    radial-gradient(700px 300px at 50% 0%, rgba(210,188,115,0.10), transparent 70%),
    rgba(3,8,5,0.7);
  backdrop-filter: blur(4px) saturate(120%);
  border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft);
}
.bg-plant-scroll .news-inner {
  max-width: 640px; margin: 0 auto; text-align: center;
  opacity: 0; transform: translateY(22px); transition: opacity .8s var(--ease), transform .8s var(--ease);
}
.bg-plant-scroll .news-inner.in { opacity: 1; transform: none; }
.bg-plant-scroll .news-inner > p { color: var(--ink-soft); margin: 1rem auto 2rem; max-width: 32rem; }
.bg-plant-scroll .news-form { display: flex; gap: 0.8rem; max-width: 480px; margin: 0 auto; }
.bg-plant-scroll .news-form input {
  flex: 1; padding: 0.95rem 1.2rem; background: rgba(255,255,255,0.03);
  border: 1px solid var(--line); border-radius: 2px; color: var(--ink);
  font-family: var(--f-body); font-size: 0.95rem;
}
.bg-plant-scroll .news-form input::placeholder { color: var(--ink-dim); }
.bg-plant-scroll .news-form input:focus { outline: none; border-color: var(--gold); }
.bg-plant-scroll .news-fine { color: var(--ink-dim); font-size: 0.78rem; margin-top: 1.1rem; }

/* ---------- CONTACT (styles3-4.css) ---------- */
.bg-plant-scroll .contact { padding: 6.5rem 2rem 7rem; border-top: 1px solid var(--line-soft); }
.bg-plant-scroll .contact-inner {
  max-width: 620px; margin: 0 auto; text-align: center;
  opacity: 0; transform: translateY(22px); transition: opacity .8s var(--ease), transform .8s var(--ease);
}
.bg-plant-scroll .contact-inner.in { opacity: 1; transform: none; }
.bg-plant-scroll .contact-inner .eyebrow { display: block; margin-bottom: 1rem; }
.bg-plant-scroll .contact-lead { color: var(--ink-soft); margin: 1rem auto 2.4rem; max-width: 46ch; }
.bg-plant-scroll .contact-form { display: flex; flex-direction: column; gap: 1rem; text-align: left; }
.bg-plant-scroll .contact-form input,
.bg-plant-scroll .contact-form textarea {
  width: 100%; padding: 0.95rem 1.2rem; background: rgba(255,255,255,0.03);
  border: 1px solid var(--line); border-radius: 2px; color: var(--ink);
  font-family: var(--f-body); font-size: 0.95rem;
}
.bg-plant-scroll .contact-form input::placeholder,
.bg-plant-scroll .contact-form textarea::placeholder { color: var(--ink-dim); }
.bg-plant-scroll .contact-form input:focus,
.bg-plant-scroll .contact-form textarea:focus { outline: none; border-color: var(--gold); }
.bg-plant-scroll .contact-form textarea { resize: vertical; min-height: 140px; line-height: 1.6; }
.bg-plant-scroll .contact-consent { display: flex; align-items: flex-start; gap: 0.65rem; color: var(--ink-soft); font-size: 0.85rem; line-height: 1.5; margin-top: 0.2rem; }
.bg-plant-scroll .contact-consent input { width: 18px; height: 18px; margin-top: 2px; flex: none; accent-color: var(--gold); }
.bg-plant-scroll .contact-consent a { color: var(--gold); text-decoration: underline; }
.bg-plant-scroll .contact-form .btn { align-self: center; margin-top: 0.6rem; min-width: 200px; }

/* ---------- Home responsive ---------- */
@media (max-width: 980px) {
  .bg-plant-scroll .product-grid { grid-template-columns: repeat(2, 1fr); }
  .bg-plant-scroll .story { grid-template-columns: 1fr; }
  .bg-plant-scroll .story-media { min-height: 260px; }
  .bg-plant-scroll .story-media img { width: min(280px, 60%); }
  .bg-plant-scroll .cat-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 760px) {
  /* A mockup `styles.css:433` szabálya minden oldaltípusra érvényes, nem csak a
     főoldalra — a termékoldalon (`.pd-care`, `.pd-related` section-head-jei)
     mobilon a cím és az "Összes …" link egymás alá kerül, balra igazítva. */
  .bg-plant-scroll .section-head.row,
  .cat-page .section-head.row { flex-direction: column !important; align-items: flex-start; }
  .bg-plant-scroll .hero { padding-top: 7rem; }
}
@media (max-width: 660px) {
  .bg-plant-scroll .cat-grid { grid-template-columns: 1fr; }
}
@media (max-width: 540px) {
  .bg-plant-scroll .product-grid { grid-template-columns: 1fr; }
  .bg-plant-scroll .benefit { max-width: 100%; }
  .bg-plant-scroll .news-form { flex-direction: column; }
}

@media (prefers-reduced-motion: reduce) {
  .bg-plant-scroll * { animation: none !important; transition: none !important; }
  .bg-plant-scroll .reveal, .bg-plant-scroll .section-head, .bg-plant-scroll .cat-card,
  .bg-plant-scroll .product, .bg-plant-scroll .story-media, .bg-plant-scroll .story-body,
  .bg-plant-scroll .benefit, .bg-plant-scroll .news-inner, .bg-plant-scroll .contact-inner { opacity: 1 !important; transform: none !important; }
}

/* =========================================================
   TERMÉKKATEGÓRIA-LISTA (frontend-mockup/disznovenyek.html +
   styles-kategoria.css). A `product-archive` Elementor sablon
   (post 330, feltétel: minden termékkategória-archívum + shop)
   HTML-widgetek helyett valódi, dinamikus WooCommerce/Elementor
   Pro widgeteket használ (archive-title/archive-description
   dynamic tag, woocommerce-breadcrumb, wc-archive-products) —
   ezért itt a valós WP/Woo által generált class-neveket
   (`.woocommerce-loop-product__*`, `ul.products` stb.) skinneljük,
   nem saját `.product` markupot írunk újra.
   ========================================================= */
:root { --header-h: 78px; }

body.cat-page, body.product-page {
  background:
    radial-gradient(900px 600px at 80% -10%, rgba(90,145,101,0.08), transparent 60%),
    var(--bg) !important;
  color: var(--ink); font-family: var(--f-body); line-height: 1.6; -webkit-font-smoothing: antialiased;
  /* A mockup globális `body { overflow-x: hidden }`-je (styles.css:52) — a body
     overflow-ja a viewportra propagál, ezért a mockupban a <html> computed
     értéke "hidden auto", a WP-ben "visible" volt (nincs vízszintes-túlcsordulás
     védelem). */
  overflow-x: hidden;
}
/* A termékoldal saját gradiense a mockupban MÁS, mint a kategórialistáé
   (`styles-termek.css:11-13`): 85% középpont és 0.07 opacitás. */
body.product-page {
  background:
    radial-gradient(900px 600px at 85% -10%, rgba(90,145,101,0.07), transparent 60%),
    var(--bg) !important;
}
body.cat-page .page-bg, body.product-page .page-bg { display: none; }
/* A mockup disznovenyek.html/termek.html-je mindig "scrolled" (tömör) fejlécet
   mutat ezeken az oldaltípusokon (nincs hero, ami indokolná az áttetsző
   kezdőállapotot). */
body.cat-page .site-header, body.product-page .site-header {
  background: rgba(5,8,7,0.72) !important;
  backdrop-filter: blur(14px) saturate(140%) !important;
  border-bottom-color: var(--line-soft) !important;
  /* !important: a .site-header dívnek ismeretlen eredetű 16px 0 saját padding-je
     van (nem ebből a fájlból, nem a header-inner-ből) — a mockupban a .site-header
     magának sosem kap paddinget, csak a .header-inner. Enélkül +32px marad a fejléc
     magasságán a mockup 72px-es (kompakt) állapotához képest. */
  padding: 0 !important;
}
body.cat-page .site-header::before, body.product-page .site-header::before { opacity: 0 !important; }
body.cat-page .site-header .header-inner, body.product-page .site-header .header-inner { padding-top: 0.9rem !important; padding-bottom: 0.9rem !important; }
body.cat-page .site-header .brand-logo, body.product-page .site-header .brand-logo { height: 34px !important; }
/* Fejléc-apróságok, amik a mockuphoz képest eltértek (mérve):
   - `.site-header` flex-wrap: wrap → nowrap, justify-content: space-between → normal
   - `.brand` display: flex → block, és a színe arany volt a mockup krém (--ink)
     helyett (a currentColor-t használó gyermekekre hat)
   - a `.nav-toggle`-ra és a nyelvváltóra a Kit gomb-tipográfiája szivárgott
     (Manrope, uppercase, line-height 13.8px, white-space nowrap). */
body.cat-page .site-header, body.product-page .site-header { flex-wrap: nowrap; justify-content: normal; }
body.cat-page .site-header .brand, body.product-page .site-header .brand { display: block !important; color: var(--ink) !important; }
/* A mockup `<html>`-jén az overflow-x: hidden (a body-ról propagálva) és a
   line-height a böngésző-alapértelmezés — a WP-ben mindkettő eltért
   (visible / 18.4px). A `:has()`-os gyökér-szelektor a saját sablonjainkra
   szűkíti, hogy plugin-oldalakat ne érintsen. */
:root:has(body.cat-page), :root:has(body.product-page) { overflow-x: hidden; line-height: normal; }
body.cat-page .site-header .nav-toggle, body.product-page .site-header .nav-toggle {
  /* A mockupban ez egy stílus nélküli <button> (Arial, weight 400) — mockup-
     artefaktum volt, felülírva a 2026-07-31-es user-utasítással (l.
     `.site-header .icon-btn.lang` fentebb: soha nem jelenhet meg más font,
     mint Fraunces/Manrope). */
  font-family: var(--f-body) !important; text-transform: none !important; line-height: normal !important; white-space: normal !important;
}
body.cat-page .site-header .icon-btn.lang, body.product-page .site-header .icon-btn.lang { white-space: normal !important; }
.cat-page .eyebrow, .product-page .eyebrow {
  font-size: 0.72rem; letter-spacing: 0.34em; font-weight: 600; color: var(--gold); text-transform: uppercase;
}
/* margin: 0 !important — a Heading widget Kit-globális margója (8px felül,
   16px alul) a mockup 0/0 margóját írja felül, minden section-title-t
   (pd-desc h2, news-inner h2 stb.) érintve.
   A .section-title class-t maga az Elementor Heading WIDGET (a külső div)
   kapja, a tényleges <h2>/<h3> a saját "elementor-heading-title" class-ával
   rendereli a szöveget — a Kit globális H2 szabálya (font-weight:800) EZEN
   a belső elemen nyer, nem a külső wrapperen, ezért a font-weight-et is meg
   kell ismételni a belső ".elementor-heading-title" szelektoron. */
.cat-page .section-title, .product-page .section-title {
  font-family: var(--f-display); font-weight: 400 !important; font-size: clamp(2rem, 4.5vw, 3.4rem); line-height: 1.05; letter-spacing: -0.01em;
  margin: 0 !important;
}
.cat-page .section-title .elementor-heading-title, .product-page .section-title .elementor-heading-title {
  font-family: inherit; font-weight: 400 !important; font-size: inherit; line-height: inherit; letter-spacing: inherit;
  margin: 0 !important;
}
.cat-page .italic, .product-page .italic { font-style: italic; color: var(--gold); }
.cat-page .btn, .product-page .btn {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0.95rem 1.9rem; font-family: var(--f-body); font-weight: 600;
  font-size: 0.82rem; letter-spacing: 0.12em; text-transform: uppercase;
  border-radius: 2px; cursor: pointer; border: 1px solid transparent;
  transition: transform 0.4s var(--ease), background 0.4s var(--ease), color 0.4s var(--ease), border-color 0.4s var(--ease);
  text-decoration: none;
}
.cat-page .btn-primary, .product-page .btn-primary { background: linear-gradient(180deg, var(--gold), var(--gold-deep)); color: #15110a; box-shadow: 0 10px 30px -12px rgba(210,188,115,0.5); }
.cat-page .btn-primary:hover, .product-page .btn-primary:hover { transform: translateY(-3px); box-shadow: 0 18px 40px -14px rgba(210,188,115,0.65); }

/* ---------- KATEGÓRIA-BANNER ---------- */
.cat-page .cat-banner {
  /* flex-direction:row + gap:0 !important: az Elementor konténer alapból
     flex-direction:column-t és 20px gap-et ad. Column esetén a keresztirány
     VÍZSZINTES lesz, így az align-items:flex-end nem alulra igazít, hanem a
     justify-content (flex-start) dönt → a hero teljes tartalma 66px-szel
     feljebb került (breadcrumb y=144 a mockup 210-e helyett). A mockup
     .cat-banner-je row-irányú, ezért ott az inner a padding-bottom (3.5rem)
     felett, ALULRA igazodik. */
  position: relative; min-height: 58vh; display: flex; align-items: flex-end;
  flex-direction: row !important; gap: normal !important;
  padding: 9rem 2rem 3.5rem; overflow: hidden;
}
.cat-page .cat-banner::before {
  content: ""; position: absolute; inset: 0; z-index: -2;
  background: url("/wp-content/uploads/2026/05/kulonleges_disznovenyek.webp") center / cover no-repeat;
  transform: scale(1.04); transform-origin: center; animation: gcCatBannerZoom 16s ease-out forwards;
}
@keyframes gcCatBannerZoom { to { transform: scale(1); } }
.cat-page .cat-banner::after {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background:
    linear-gradient(90deg, rgba(5,8,7,0.88) 0%, rgba(5,8,7,0.5) 45%, rgba(5,8,7,0.12) 80%, transparent 100%),
    linear-gradient(0deg, var(--bg) 1%, rgba(5,8,7,0.6) 22%, transparent 55%);
}
.cat-page .cat-banner-inner { position: relative; z-index: 1; max-width: var(--maxw); margin: 0 auto; width: 100%; }
/* Az Elementorban a banner tartalma (breadcrumb/eyebrow/cím/lead) egy beágyazott
   "boxed" content-width-ű .e-con-inner konténerben van a .cat-banner-inner-en
   belül — ez a saját, Elementor-adta var(--content-width) (1140px) miatt
   50px-szel szűkebb és balra csúszik a mockup 1240px-es (var(--maxw)) tartalmi
   szélességéhez képest. Ki kell venni a boxolásból, hogy örökölje a szülő teljes
   szélességét.
   A gap:0 !important ugyanitt: az .e-con-inner flex-column konténer saját,
   Elementor-adta 20px-es widget-köztes gap-je minden egyes elem közé (breadcrumb→
   eyebrow, eyebrow→cím, cím→lead) rátevődött a mockup saját, pontosan belőtt
   margin-bottom értékeire — ezért lett minden hero-térköz 20px-szel nagyobb a
   mockuphoz képest (pl. cím→lead: 37.6px a mockup 17.6px-e helyett). */
.cat-page .cat-banner-inner .e-con-inner { max-width: none !important; width: 100%; margin: 0; gap: 0 !important; }
.cat-page .cat-banner .eyebrow { display: block; margin-bottom: 1rem; }
/* line-height: az Elementor Heading widget saját (0.8-as) sormagasságot ad az
   .elementor-heading-title-nek, ezért az eyebrow magassága 11.5px lett a
   mockup 18.4px-e helyett (a body 1.6-os line-height-jából). */
.cat-page .cat-banner .eyebrow,
.cat-page .cat-banner .eyebrow .elementor-heading-title { line-height: 1.6 !important; }
.cat-page .cat-banner h1 {
  font-family: var(--f-display); font-weight: 300; font-size: clamp(2.6rem, 6.5vw, 5rem);
  line-height: 0.98; letter-spacing: -0.02em; margin-bottom: 1.1rem; color: var(--ink);
}
.cat-page .cat-lead {
  /* !important a max-width-en: az elem valójában egy Elementor Text Editor
     widget (.elementor-widget-text-editor), amelynek globális Kit-stílusa
     max-width:100%-et ad, azonos/magasabb specificitással — enélkül a lead
     szöveg a teljes 1240px-es rácsszélességben egy sorba törik a mockup
     608px-es (38rem), 3 soros elrendezése helyett. */
  max-width: 38rem !important; color: var(--ink-soft); font-size: 1.05rem;
}
.cat-page .cat-lead p { margin: 0; }

/* ---------- Breadcrumb (woocommerce-breadcrumb widget) ---------- */
.cat-page .woocommerce-breadcrumb, .product-page .woocommerce-breadcrumb {
  /* margin-bottom itt van, nem a (nem létező) .breadcrumb class-on: a valós
     markup a WooCommerce natív .woocommerce-breadcrumb elemét használja,
     a mockup .breadcrumb-margin-bottom szabálya (1.6rem) rá sosem
     érvényesült volna.
     display:flex + gap: a mockup .breadcrumb-ja flex-sor 0.55rem gap-pel;
     natívan block volt, inline linkekkel. */
  display: flex; align-items: center; gap: 0.55rem; flex-wrap: wrap;
  margin-bottom: 1.6rem; font-size: 0.76rem; letter-spacing: 0.06em; color: var(--ink-dim);
  line-height: 1.6 !important;
}
/* line-height !important a linken is: a Kit globális link-line-height-ja
   16.5px-es magasságot adott a mockup 19.4px-e helyett. */
.cat-page .woocommerce-breadcrumb a, .product-page .woocommerce-breadcrumb a {
  color: var(--ink-soft); text-decoration: none; line-height: 1.6 !important;
  transition: color .3s var(--ease);
}
.cat-page .woocommerce-breadcrumb a:hover, .product-page .woocommerce-breadcrumb a:hover { color: var(--gold); }
/* A theme/Kit egy ::before { content: " " } pseudo-elemet ad a nav-nak, ami
   flex-elemként külön 0.55rem gap-et generált a lista elé → az első link
   8,8px-szel jobbra csúszott. */
.cat-page .woocommerce-breadcrumb::before, .product-page .woocommerce-breadcrumb::before { content: none !important; display: none !important; }
.cat-page .woocommerce-breadcrumb .sep, .product-page .woocommerce-breadcrumb .sep { color: var(--line); }
.cat-page .woocommerce-breadcrumb [aria-current="page"], .product-page .woocommerce-breadcrumb [aria-current="page"] { color: var(--gold); }

/* ---------- TERMÉKLISTA (wc-archive-products widget) ---------- */
/* A functions.php a loop-hookokat leszerelve pontosan a mockup markupját írja
   ki (.product-media > .badge + a.product-media-link > img + a.add-btn,
   .product-info > h3 > a + p.product-cat + p.product-price), ezért itt a
   mockup CSS-e szinte szó szerint használható — nem kell a natív Woo-markup
   ellen specificitás-háborút vívni.
   overflow-x: clip a .cat-listing-en: a filtersáv full-bleed háttércsíkja
   negatív margóval nyúlik ki a tartalmi szélességből, a görgetősáv miatti
   pár px-es túlnyúlást ez vágja le (a clip — a hidden-nel ellentétben — nem
   csinál scroll-konténert, így a position:sticky érintetlen marad). */
/* padding-top 0: a mockupban a .filter-bar a .cat-listing-en KÍVÜL van, közvetlenül
   a banner alatt; a 2.5rem felső térköz a sáv ALATT, a rács előtt van (ezt itt az
   ul.products margin-top-ja adja). Ha a konténer kapná a felső paddingot, az egész
   sáv 40px-szel lejjebb kerülne a mockuphoz képest.
   container-type: inline-size: a filtersáv full-bleed háttércsíkjához kell — a
   100cqw a konténer (görgetősáv nélküli) szélessége, szemben a 100vw-vel, ami a
   15px-es görgetősávot is tartalmazza (az 1440 vs 1425 miatt a sáv kilógott). */
.cat-page .cat-listing { padding: 0 2rem 6rem; overflow-x: clip; container-type: inline-size; }
.cat-page .gc-archive-products .woocommerce { max-width: var(--maxw); margin: 0 auto; }
.cat-page .gc-archive-products .woocommerce-notices-wrapper:empty { display: none; }

/* ---------- FILTERSÁV (mockup .filter-bar) ---------- */
.cat-page .filter-bar {
  position: sticky; top: var(--header-h); z-index: 50;
  /* full-bleed háttércsík: a sáv a viewport teljes szélességét fogja, a
     tartalma viszont a var(--maxw) rácson belül marad — pontosan úgy, ahogy
     a mockupban, ahol a .filter-bar a tartalmi wrapperen KÍVÜL van. */
  /* -2rem / +2rem: a 100cqw a container (.cat-listing) CONTENT-boxa, ami a
     2rem-es oldalpadding miatt 1361px, nem a teljes 1425px — ezzel toljuk ki
     a sávot a konténer padding-jén túl is, a viewport széléig. */
  margin-inline: calc((100% - 100cqw) / 2 - 2rem);
  padding: 1rem calc((100cqw - 100%) / 2 + 2rem);
  border-bottom: 1px solid var(--line);
  background: rgba(5,8,7,0.82); backdrop-filter: blur(10px) saturate(130%);
}
.cat-page .filter-bar-inner {
  max-width: var(--maxw); margin: 0 auto;
  display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
}
.cat-page .filter-count {
  margin: 0; font-size: 0.82rem; letter-spacing: 0.04em; color: var(--ink-soft) !important;
}
.cat-page .filter-count strong { color: var(--ink); font-weight: 700; }
.cat-page .filter-sort { display: flex; align-items: center; gap: 0.7rem; }
.cat-page .filter-sort label {
  font-family: var(--f-body) !important; font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-dim);
  margin: 0;
}
.cat-page .filter-sort .select-wrap { position: relative; display: inline-block; }
.cat-page .filter-sort form.woocommerce-ordering { margin: 0; padding: 0; }
.cat-page .filter-sort select.orderby {
  /* !important a background/border/border-radius/font-size-en: az Elementor Kit
     globális form-szabálya (site settings-ből generált inline <style>) mindezt
     !important-tel írja felül a globális form-stílusra (zöld keret, 10px
     radius, nagyobb betű). */
  appearance: none; -webkit-appearance: none;
  background: rgba(255,255,255,0.03) !important; color: var(--ink) !important;
  border: 1px solid var(--line) !important; border-radius: 2px !important;
  font-family: var(--f-body) !important; font-size: 0.85rem !important; font-weight: 500 !important;
  line-height: normal !important;
  padding: 0.6rem 2.4rem 0.6rem 0.9rem !important; cursor: pointer;
  display: inline-block !important; width: auto !important;
  transition: border-color .3s var(--ease);
}
.cat-page .filter-sort select.orderby:hover,
.cat-page .filter-sort select.orderby:focus { outline: none; border-color: var(--gold) !important; }
.cat-page .filter-sort select.orderby option { background: var(--panel); color: var(--ink); }
.cat-page .filter-sort .select-wrap::after {
  content: "▾"; position: absolute; right: 0.85rem; top: 50%; transform: translateY(-50%);
  color: var(--gold); font-size: 0.7rem; pointer-events: none;
}

/* ---------- TERMÉKRÁCS ---------- */
/* .elementor-grid.columns-4 a szelektorban: az Elementor Pro widget saját
   ".elementor-330 .elementor-element-catarchivew01 .elementor-grid" szabálya
   (0,3,0) minden breakpointon felülírta a mi (0,2,2)-es szabályunkat — a
   1200px-es sávban ezért lett 20px a rács-gap a mockup 22.4px-e helyett.
   Így (0,4,2)-vel minden breakpointon nyerünk. */
.cat-page .gc-archive-products ul.products.elementor-grid.columns-4 {
  display: grid !important; grid-template-columns: repeat(3, 1fr) !important; gap: 1.4rem !important;
  list-style: none; margin: 2.5rem 0 0 !important; padding: 0;
}
.cat-page .gc-archive-products ul.products li.product {
  position: static; display: block !important; width: auto !important;
  margin: 0 !important; padding: 0 !important; float: none !important;
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: 4px; overflow: hidden;
  transition: opacity .7s var(--ease), transform .7s var(--ease), border-color .4s var(--ease), box-shadow .4s var(--ease);
}
.cat-page .gc-archive-products ul.products li.product:hover { border-color: var(--line); box-shadow: 0 24px 50px -28px rgba(0,0,0,0.8); }
/* Scroll-reveal: csak akkor rejtjük el induláskor, ha az archive.js tényleg
   lefutott (body.js-reveal) — JS nélkül nem tűnhet el a tartalom. */
.js-reveal.cat-page .gc-archive-products ul.products li.product { opacity: 0; transform: translateY(28px); }
.js-reveal.cat-page .gc-archive-products ul.products li.product.in { opacity: 1; transform: none; }

/* ---------- KÁRTYA: kép-réteg + overlay-gomb + badge ---------- */
.cat-page .gc-archive-products .product-media {
  display: block; position: relative; aspect-ratio: 1/1; overflow: hidden;
}
.cat-page .gc-archive-products a.product-media-link { display: block; width: 100%; height: 100%; }
.cat-page .gc-archive-products .product-media img {
  width: 100%; height: 100%; margin: 0 !important; object-fit: cover;
  transition: transform .8s var(--ease);
}
.cat-page .gc-archive-products li.product:hover .product-media img { transform: scale(1.07); }
.cat-page .gc-archive-products .badge {
  position: absolute; top: 0.9rem; left: 0.9rem; z-index: 2;
  background: var(--gold); color: #15110a; font-size: 0.62rem; font-weight: 700;
  letter-spacing: 0.14em; text-transform: uppercase; padding: 0.3rem 0.6rem; border-radius: 2px;
  line-height: 1.6;
}
/* A Woo natív "Akció!" flash-e helyett a mockup "Új" badge-e van (a mockupban
   nincs sale-badge koncepció) — a natívot biztosra elrejtjük, ha bárhol
   mégis kirenderelődne. */
.cat-page .gc-archive-products .onsale { display: none !important; }
.cat-page .gc-archive-products a.add-btn {
  /* !important a background/border/radius/padding/font-size-en: az Elementor
     Kit globális gomb-szabálya (".add_to_cart_button, .woocommerce .button,
     …" inline <style>) mindezt !important-tel írja felül a nagy, natív
     gombstílusra. */
  position: absolute !important; left: 0.9rem !important; right: 0.9rem !important; bottom: 0.9rem !important;
  top: auto !important; width: auto !important; z-index: 2;
  display: block !important; margin: 0 !important; text-align: center;
  background: rgba(5,8,7,0.85) !important; backdrop-filter: blur(6px);
  color: var(--ink) !important;
  border: 1px solid var(--line) !important; border-radius: 2px !important;
  padding: 0.75rem !important; cursor: pointer;
  font-family: var(--f-body) !important; font-weight: 600 !important; font-size: 0.78rem !important;
  letter-spacing: 0.1em !important; text-transform: uppercase; line-height: normal !important;
  text-decoration: none;
  opacity: 0; transform: translateY(10px);
  transition: opacity .4s var(--ease), transform .4s var(--ease), background .3s var(--ease), color .3s var(--ease);
}
.cat-page .gc-archive-products li.product:hover a.add-btn { opacity: 1; transform: none; }
.cat-page .gc-archive-products a.add-btn:hover { background: var(--gold) !important; color: #15110a !important; border-color: var(--gold) !important; }
.cat-page .gc-archive-products a.add-btn.added::after { content: " ✓"; }
.cat-page .gc-archive-products a.added_to_cart { display: none; }

/* ---------- KÁRTYA: szöveges rész ---------- */
.cat-page .gc-archive-products .product-info { padding: 1.3rem 1.3rem 1.6rem; }
.cat-page .gc-archive-products .product-info h3 {
  font-family: var(--f-display) !important; font-weight: 400 !important; font-size: 1.18rem !important;
  line-height: 1.6 !important; margin: 0 0 0.25rem !important; padding: 0 !important; color: var(--ink) !important;
}
.cat-page .gc-archive-products .product-info h3 a { color: inherit; text-decoration: none; transition: color .3s var(--ease); }
.cat-page .gc-archive-products .product-info h3 a:hover { color: var(--gold); }
.cat-page .gc-archive-products p.product-cat {
  margin: 0 0 0.7rem !important; color: var(--ink-dim) !important; font-size: 0.78rem;
  letter-spacing: 0.06em; text-transform: uppercase;
}
/* !important a színen/méreten: a WooCommerce core
   ".woocommerce ul.products li.product .price{color:#958e09;font-size:.857em}"
   szabálya (0,4,2) egyébként nyer. */
.cat-page .gc-archive-products p.product-price {
  margin: 0 !important; font-family: var(--f-body); font-size: 1rem !important;
  line-height: 1.6 !important; color: var(--ink) !important;
}
.cat-page .gc-archive-products p.product-price del,
.cat-page .gc-archive-products p.product-price s {
  color: var(--ink-dim) !important; font-size: 0.9rem; margin-right: 0.4rem; opacity: 0.7; text-decoration: line-through;
}
.cat-page .gc-archive-products p.product-price ins,
.cat-page .gc-archive-products p.product-price strong,
.cat-page .gc-archive-products p.product-price > .amount,
.cat-page .gc-archive-products p.product-price > .woocommerce-Price-amount {
  text-decoration: none; color: var(--gold) !important; font-size: 1.1rem; font-weight: 700;
}
.cat-page .gc-archive-products p.product-price .screen-reader-text { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }

/* Lapozás (Elementor Pro paginate control alapértelmezett markupja) */
.cat-page .gc-archive-products nav.woocommerce-pagination { grid-column: 1 / -1; text-align: center; margin-top: 3rem; }
.cat-page .gc-archive-products nav.woocommerce-pagination ul { list-style: none; display: inline-flex; gap: 0.4rem; padding: 0; margin: 0; }
.cat-page .gc-archive-products nav.woocommerce-pagination a,
.cat-page .gc-archive-products nav.woocommerce-pagination span {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 38px; height: 38px; border: 1px solid var(--line-soft); border-radius: 2px;
  color: var(--ink-soft); text-decoration: none; font-size: 0.85rem;
}
.cat-page .gc-archive-products nav.woocommerce-pagination a:hover,
.cat-page .gc-archive-products nav.woocommerce-pagination span.current { border-color: var(--gold); color: var(--gold); }

/* ---------- NEWSLETTER (styles.css) ---------- */
.cat-page .newsletter {
  padding: 7rem 2rem;
  /* background-image külön, !important-tel: az Elementor lazyload-szabálya
     (".e-con.e-parent:nth-of-type(n+3):not(.e-lazyloaded):not(.e-no-lazyload)
     { background-image: none !important }") egyébként letörli az arany
     radial-gradient fényt — a háttérszín átment, a gradiens-réteg nem. */
  background-color: var(--bg-3);
  background-image: radial-gradient(700px 300px at 50% 0%, rgba(210,188,115,0.10), transparent 70%) !important;
  border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft);
}
.cat-page .news-inner {
  max-width: 640px; margin: 0 auto; text-align: center;
  transition: opacity .8s var(--ease), transform .8s var(--ease);
}
.js-reveal.cat-page .news-inner { opacity: 0; transform: translateY(22px); }
.js-reveal.cat-page .news-inner.in { opacity: 1; transform: none; }
/* margin 0 !important: az Elementor Kit globális heading-margói (8px felül,
   16px alul) különben megnövelik a szekciót a mockuphoz képest. */
.cat-page .news-inner .section-title { margin: 0 !important; }
.cat-page .news-inner > p { color: var(--ink-soft) !important; margin: 1rem auto 2rem !important; max-width: 32rem; }
.cat-page .news-form { display: flex; gap: 0.8rem; max-width: 480px; margin: 0 auto; }
/* !important: az Elementor Kit globális form-field stílusa (10px radius,
   #0b1a14 háttér, #1e3a2f keret, 14px betű, 8px/16px padding) írja felül. */
.cat-page .news-form input {
  flex: 1; padding: 0.95rem 1.2rem !important; background: rgba(255,255,255,0.03) !important;
  border: 1px solid var(--line) !important; border-radius: 2px !important; color: var(--ink) !important;
  font-family: var(--f-body) !important; font-size: 0.95rem !important; line-height: normal !important;
}
.cat-page .news-form input::placeholder { color: var(--ink-dim); }
.cat-page .news-form input:focus { outline: none; border-color: var(--gold) !important; }
/* A .btn-primary arany gradiense: a Kit globális gomb-szabálya
   background-image:none-t ad, ezért !important kell. */
.cat-page .news-form button.btn-primary {
  background-image: linear-gradient(180deg, var(--gold), var(--gold-deep)) !important;
  background-color: transparent !important; color: #15110a !important;
  padding: 0.95rem 1.9rem !important; border-radius: 2px !important;
  font-size: 0.82rem !important; line-height: normal !important;
}
.cat-page .news-fine { color: var(--ink-dim) !important; font-size: 0.78rem !important; margin: 1.1rem 0 0 !important; }

/* Az Elementor Pro Products widget saját reszponzív rácsa (tablet: 2 oszlop,
   20px gap) felülírja a mockup 980/540-es töréspontjait — ezért a saját
   szabályokat minden érintett breakpointon megismételjük, magasabb
   specificitással (ul.products.elementor-grid). */
@media (max-width: 1024px) and (min-width: 981px) {
  .cat-page .gc-archive-products ul.products.elementor-grid.columns-4 {
    grid-template-columns: repeat(3, 1fr) !important; gap: 1.4rem !important;
  }
}
@media (max-width: 980px) {
  .cat-page .gc-archive-products ul.products.elementor-grid.columns-4 {
    grid-template-columns: repeat(2, 1fr) !important; gap: 1.4rem !important;
  }
}
@media (max-width: 760px) {
  .cat-page .cat-banner { min-height: 50vh; padding-top: 7.5rem; }
}
@media (max-width: 540px) {
  .cat-page .gc-archive-products ul.products.elementor-grid.columns-4 {
    grid-template-columns: 1fr !important; gap: 1.4rem !important;
  }
  .cat-page .gc-archive-products .woocommerce { row-gap: 0.8rem; }
  .cat-page .news-form { flex-direction: column; }
  /* mockup styles-kategoria.css @540: a filtersáv két eleme sorba tördel */
  .cat-page .filter-bar-inner { flex-wrap: wrap; gap: 0.8rem; }
}

/* =========================================================
   TERMÉKADATLAP (Single Product Theme Builder sablon, post 358)
   ========================================================= */
/* termek.html mintája szerint. HTML-widgetek helyett valódi Elementor Pro
   WooCommerce single-product widgeteket (Product Images/Title/Price/Stock/
   Add to Cart/Short Description/Content/Additional Information/Related)
   használ, ezért a valós WP/Woo class-neveket (`.woocommerce-product-gallery`,
   `.product_title`, `.price`, `.stock`, `form.cart`, `.woocommerce-product-
   attributes` stb.) skinneljük — ugyanaz a módszer, mint a Product
   Archive-nál (7. fázis). A dinamikus, de nem widget-natív sorokat
   (kategória-eyebrow, kiemelt-badge, cert-panel, related-link) a
   functions.php shortcode-jai adják ([gc_*]). */
.product-page .pd-wrap { max-width: var(--maxw); margin: 0 auto; padding: 7.5rem 2rem 0; }
/* A breadcrumb nav az Elementor widget-burkoló BELSEJÉBEN van, tehát nem
   közvetlen gyermeke a `.pd-wrap`-nak — a korábbi `>` szelektor sosem illeszkedett,
   ezért a Woo natív 1.6rem-es alsó margója maradt a mockup 2.2rem-e helyett
   (az egész `.pd-top` 9.6px-szel feljebb kezdődött). */
.product-page .pd-wrap .elementor-widget-woocommerce-breadcrumb { margin-bottom: 0; }
.product-page .pd-wrap .woocommerce-breadcrumb { margin-bottom: 2.2rem !important; }

/* Scroll-reveal (mockup termek.html IntersectionObserver-e) — a product.js
   teszi a body-ra a `.js-reveal` class-t és az elemekre a `.reveal`-t, hogy
   JS nélkül semmi ne tűnjön el. A `.pd-wrap` fölötti elemek a mockupban
   `load`-kor azonnal "in"-t kapnak (nincs belépő animáció a hajtás felett). */
.js-reveal.product-page .section-head,
.js-reveal.product-page .section-head.row { opacity: 0; transform: translateY(20px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.js-reveal.product-page .section-head.in { opacity: 1; transform: none; }
.js-reveal.product-page .gc-related-products ul.products li.product { opacity: 0; transform: translateY(28px); transition: opacity .9s var(--ease), transform .9s var(--ease); }
.js-reveal.product-page .gc-related-products ul.products li.product.in { opacity: 1; transform: none; }
.js-reveal.product-page .news-inner { opacity: 0; transform: translateY(22px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.js-reveal.product-page .news-inner.in { opacity: 1; transform: none; }
@media (prefers-reduced-motion: reduce) {
  .js-reveal.product-page .reveal, .js-reveal.product-page .section-head,
  .js-reveal.product-page ul.products li.product, .js-reveal.product-page .news-inner { opacity: 1 !important; transform: none !important; }
}

/* Minden Elementor-container ezen az oldalon (.pd-wrap, .pd-top, .pd-gallery,
   .buy-panel, .pd-details, .pd-desc, .spec-table, .pd-care, .pd-related, a
   section-head-ek stb.) saját, widget-közi 20px `gap`-et ad — ez a mockupban
   sehol nem létező extra függőleges hézag minden egyes szekcióban (a badge is
   emiatt csúszott a galéria fölé: a köztük lévő 20px gap miatt a galéria-widget
   20px-szel lejjebb kezdődött, mint ahova a badge abszolút pozíciója számított).
   A mockup helyette a saját, pontosan belőtt margin/padding rendszerét várja —
   ezért itt globálisan kinullázzuk minden `.e-con`-on a `.pd-wrap`-on belül;
   ahol tényleg kell flex-gap (pl. `.buy-actions` egy soros elrendezése,
   `.section-head.row`), ott alább specifikusabb szabály visszaadja. */
/* A gap-nullázás a sablon MINDEN konténerére kell (`.elementor-location-single`
   gyökér), nem csak a `.pd-wrap` leszármazottaira: a `.pd-details`, `.pd-care`,
   `.pd-related` és a newsletter-konténer a DOM-ban a `.pd-wrap` TESTVÉRE, ezért
   a korábbi `.pd-wrap .e-con` szelektor nem érte el őket, és ott életben maradt
   az Elementor 20px-es widget-gap-je (pd-care +80px, pd-related +20px).
   Ahol tényleg kell gap (`.pd-top`, `.pd-details`, `.section-head.row`,
   `form.cart`), ott alább `!important`-tal adjuk vissza. */
.product-page .elementor-location-single .e-con { gap: 0 !important; }
/* A mockupban ezek a szekciók sima BLOKK elemek, az Elementor konténerei
   viszont flex-ek. A különbség nem csak a gap: flex-ben NEM omlik össze
   (collapse) a szomszédos gyermekek margója, ezért a `.pd-care`-ben és a
   `.pd-related`-ben a fejléc 3.5rem/2.5rem alsó margója + a rács 2.5rem/3.5rem
   felső margója összeadódott (mérve +40px mindkét szekcióban) a mockup
   összeomlott 56px-e helyett. Blokkra állítva a margó-viselkedés is azonos. */
.product-page .pd-wrap.e-con,
.product-page .pd-gallery.e-con,
.product-page .buy-panel.e-con,
.product-page .pd-desc.e-con,
.product-page .spec-table.e-con,
.product-page .pd-care.e-con,
.product-page .pd-related.e-con { display: block !important; }

/* ---------- FELSŐ BLOKK — galéria + vásárló panel ---------- */
.product-page .pd-top {
  /* !important: az Elementor konténer saját "e-flex" szabálya (display:flex,
     flex-direction:column) azonos specificitással, de a mi style.css-ünk
     UTÁN generált inline <style>-ban van, ezért különben felülírná a grid-et.
     A gap-en is kell: a fenti globális gap:0 !important különben kinullázná a
     mockup 3rem-es oszlopközét (emiatt lett a galéria 617px a 592px helyett és
     csúszott minden a buy-panelben 22.8px-szel balra).
     A szelektorban a `.elementor-location-single` azért kell, mert a fenti
     gap-nullázó szabály (3 class) különben SPECIFIKUSABB, mint egy
     `.product-page .pd-top` (2 class) — !important ide-oda azonos, a
     specificitás dönt. */
  display: grid !important; grid-template-columns: 1.05fr 0.95fr; align-items: start;
}
.product-page .elementor-location-single .pd-top { gap: 3rem !important; }
.product-page .elementor-location-single .pd-details { gap: 3rem !important; }
.product-page .elementor-location-single .section-head.row { gap: 2rem !important; }

/* ---------- Galéria (woocommerce-product-images widget) ---------- */
.product-page .pd-gallery { position: relative; }
/* A Woo natív "Akció!" sale-flash helyett a valós "featured" flagre kötött
   [gc_featured_badge] jelenik meg — a mockupban nincs sale-badge koncepció. */
.product-page .pd-gallery .onsale { display: none !important; }
/* top/left = 1rem + 1px: a mockupban a badge a `.gallery-main` 1px-es keretén
   BELÜL van pozicionálva (a padding-boxhoz képest), a WP-ben viszont a
   keret nélküli `.pd-gallery`-hez képest — enélkül 1-1px-szel balra/feljebb ült. */
.product-page .pd-gallery .badge {
  position: absolute; top: calc(1rem + 1px); left: calc(1rem + 1px); z-index: 2;
  background: var(--gold); color: #15110a; font-size: 0.66rem; font-weight: 700;
  letter-spacing: 0.14em; text-transform: uppercase; padding: 0.32rem 0.7rem; border-radius: 2px;
}
/* A mockupban a keret/háttér/lekerekítés CSAK a főképet fogja körbe
   (`.gallery-main`), a thumbnail-sor a kereten KÍVÜL, teljes szélességben áll.
   A natív markupban viszont a thumbnail-sor is a `.woocommerce-product-gallery`
   BELSEJÉBEN van, ezért ha a keret ezen van, a thumb-sor 2px-szel keskenyebb
   lesz és 1px-szel feljebb kezdődik. A flexslider a képeket egy saját
   `.flex-viewport` elembe csomagolja — pontosan ez a mockup `.gallery-main`
   megfelelője, tehát a keret ide kerül.
   margin-bottom !important: a Woo core `.woocommerce div.product div.images`
   szabálya (0,3,2 specificitás) 2em = 32px alsó margót adott, amivel a galéria
   és így az egész oldal 31.5px-szel hosszabb volt. */
.product-page .woocommerce-product-gallery {
  border: 0; background: none; overflow: visible;
  margin-bottom: 0 !important;
}
.product-page .flex-viewport {
  border: 1px solid var(--line-soft); border-radius: 4px; background: var(--panel); overflow: hidden;
}
/* Ha a galéria-JS nem futna le (nincs .flex-viewport), a keret a képlistára
   kerül, hogy a főkép ne maradjon keret nélkül. */
.product-page .woocommerce-product-gallery:not(:has(.flex-viewport)) .woocommerce-product-gallery__wrapper {
  border: 1px solid var(--line-soft); border-radius: 4px; background: var(--panel); overflow: hidden;
}
.product-page .woocommerce-product-gallery__wrapper { margin: 0; }
.product-page .woocommerce-product-gallery__image { aspect-ratio: 1/1; }
/* A kép közvetlen szülője egy class nélküli <a>, aminek nincs explicit
   magassága — a % magasság csak explicit magasságú ősre vonatkozik a CSS
   szabályai szerint, ezért az img height:100%-a némán figyelmen kívül
   maradt, és a kép a natív 600/900 arányban (885px) töltötte ki a
   sávot a wrapper 590px-es négyzete helyett. */
.product-page .woocommerce-product-gallery__image a { display: block; width: 100%; height: 100%; }
/* !important: a WordPress-mag "img{height:auto}" szabálya (has higher
   source-order/globális form-reset) a natív 600/900 arányban tartotta a
   képet a 100%-os (négyzetes) magasság helyett. */
.product-page .woocommerce-product-gallery__image img { width: 100% !important; height: 100% !important; object-fit: cover; max-width: none !important; }
/* A mockupban nincs nagyító-ikon koncepció. */
.product-page .woocommerce-product-gallery__trigger { display: none !important; }
/* A galéria-slide-okba a WP emoji-helyettesítője (wp-smiley) egy külön 32px-es
   <img class="emoji">-t szúr a képfelirat/alt emoji-karaktere helyére (4 slide-ra
   5 img jutott) — a mockupban nincs ilyen elem. */
.product-page .woocommerce-product-gallery img.emoji { display: none !important; }
.product-page .woocommerce-product-gallery__image .zoomImg { display: none !important; }
/* A natív flexslider a fő képet leszámítva minden .woocommerce-product-gallery__image
   elemet elrejt (display:none), amíg a JS be nem tölt — a többi thumbként a
   flex-control-nav-ban jelenik meg. */
.product-page .flex-control-nav {
  display: grid !important; grid-template-columns: repeat(4, 1fr); gap: 0.7rem; margin: 0.7rem 0 0 !important; padding: 0; list-style: none;
}
/* width/float !important: a WooCommerce natív `.flex-control-thumbs li`
   szabálya `width: 25%; float: left`-et ad — grid-tagként ez a 145px-es
   rács-sáv 25%-át jelentette, ezért a thumbnail-ek 36px-esek lettek a mockup
   139.6px-e helyett (mobilon 17px a 76px helyett). */
.product-page .flex-control-nav li { margin: 0; width: 100% !important; float: none !important;
  /* A mockup thumbnail-gombja mögött a panel-szín látszik az áttetsző képrészeken. */
  background: var(--panel); border-radius: 3px; overflow: hidden; }
.product-page .flex-control-nav img {
  aspect-ratio: 1/1; object-fit: cover; width: 100%; display: block;
  border: 1px solid var(--line-soft); border-radius: 3px; cursor: pointer;
  opacity: 0.7; transition: border-color .3s var(--ease), opacity .3s var(--ease);
}
.product-page .flex-control-nav img:hover { opacity: 1; }
.product-page .flex-control-nav .flex-active img { border-color: var(--gold); opacity: 1; }

/* ---------- Vásárló panel ---------- */
.product-page .buy-panel {
  position: sticky; top: var(--header-h);
  background: var(--panel-2); border: 1px solid var(--line-soft); border-radius: 4px;
  padding: clamp(1.6rem, 2.6vw, 2.4rem);
}
.product-page .buy-panel .eyebrow { display: block; margin-bottom: 0.8rem; }
.product-page .buy-panel h1.product_title {
  font-family: var(--f-display); font-weight: 400;
  font-size: clamp(1.8rem, 3.4vw, 2.6rem); line-height: 1.05; letter-spacing: -0.01em;
  margin: 0 0 0.9rem;
}
/* !important mindenhol: a WooCommerce core ".woocommerce div.product p.price"
   szabálya (0,3,2 specificitás — két type-selectorral, div/p) magasabb
   specificitású a mi (0,3,0)-ás class-only szelektorunknál, és a saját,
   a mockuptól eltérő olíva `#958e09` színét + kisebb betűméretét adja. */
.product-page .buy-panel .price {
  display: block; font-size: 1.9rem !important; color: var(--gold) !important; font-weight: 700 !important; margin-bottom: 1.2rem;
  font-family: var(--f-body); line-height: 1.6 !important;
}
.product-page .buy-panel .price del { color: var(--ink-dim) !important; font-size: 1.1rem !important; font-weight: 400; margin-right: 0.5rem; text-decoration: line-through; opacity: 0.7; }
.product-page .buy-panel .price ins { text-decoration: none; color: var(--gold) !important; }
.product-page .woocommerce-product-details__short-description { color: var(--ink-soft); margin-bottom: 1.4rem; }
.product-page .woocommerce-product-details__short-description p { margin: 0 0 0.6rem; }
/* !important: ugyanaz a WooCommerce core "p.stock" szabály (szintén #958e09)
   írja felül a mockup zöld készlet-színét. */
.product-page .stock {
  display: inline-flex; align-items: center; gap: 0.5rem;
  font-size: 0.82rem !important; color: var(--green) !important; margin: 0 0 1.6rem; line-height: 1.6 !important;
}
.product-page .stock::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--green); }
.product-page .stock.out-of-stock { color: #d26b6b; }
.product-page .stock.out-of-stock::before { background: #d26b6b; }

/* ---------- Kosárba (woocommerce-product-add-to-cart widget → form.cart) ---------- */
/* A ".buy-actions" valójában maga a Product Add to Cart WIDGET wrappere
   (nem "elementor-add-to-cart" class-szal, az korábban egy soha nem
   létező class-kombinációra próbált illeszkedni, ezért nem hatott). */
.product-page .buy-actions { margin-bottom: 1.6rem !important; }
/* !important a gap-en: a WooCommerce core "form.cart{display:flex;gap:10px}"
   szabálya azonos specificitású, de később generálódik, és felülírta a
   mockup 12.8px-es hézagát. */
/* margin:0 !important — a WooCommerce/Elementor `form.cart{margin-top:15px}`-je
   a mockupban nem létező 15px-es hézagot adott a készlet-sor és a
   mennyiség+Kosárba sor közé (emiatt csúszott a `.buy-trust` és alatta minden
   31px-szel lejjebb 1440px-en, 38px-szel 390px-en). */
.product-page .buy-actions form.cart {
  display: flex !important; gap: 0.8rem !important; align-items: stretch; margin: 0 !important;
}
/* A WooCommerce `form.cart::before/::after` clearfix-e (content:"";display:table)
   flex-konténerben két 0 szélességű FLEX ELEM lesz, tehát két extra 12.8px-es
   gap-et hoz: a mennyiség-blokk 12.8px-szel beljebb kezdődött, a "Kosárba"
   gomb (flex:1) pedig 25.6px-szel rövidebb lett (282.5px vs mockup 308.1px). */
.product-page .buy-actions form.cart::before,
.product-page .buy-actions form.cart::after { display: none !important; }
/* margin: 0 !important — a Woo/Elementor add-to-cart CSS-e 0.8rem bal margót
   adott a mennyiség-blokknak, ami a flex-gap MELLETT jelent meg: a `.quantity`
   12.8px-szel beljebb kezdődött, és a "Kosárba" gomb (flex:1) ugyanennyivel
   rövidebb lett (278.5px a mockup 308.1px-e helyett). */
.product-page .buy-actions .quantity {
  display: inline-flex !important; flex-shrink: 0; align-items: center;
  border: 1px solid var(--line); border-radius: 2px; overflow: hidden;
  margin: 0 !important;
}
/* !important minden méret/szín/padding tulajdonságon: az Elementor Kit
   globális gomb-szabálya (minden <button>-re vonatkozó inline <style>,
   pl. 22px/30px padding + saját width) minden breakpointon felülírta a
   mockup kompakt +/- gombjait — asztali nézeten még "véletlenül" elég
   specifikus volt a mi szabályunk, mobilon már nem. */
/* margin: 0 !important — a Kit globális gomb-margója (10px bal) minden
   qty-btn-t 10-10px-szel jobbra tolt, a `.quantity` wrapper 158px-re
   szélesedett a mockup 138px-e helyett. */
/* font-family/font-weight: a mockup +/- gombjai NEM kapnak font-family-t
   (böngésző-alapértelmezés = Arial, weight 400) — mockup-artefaktum volt,
   felülírva a 2026-07-31-es user-utasítással (soha nem jelenhet meg más
   font, mint Fraunces/Manrope, kivétel nélkül minden oldalon). A Kit
   globális gomb-szabálya Manrope 600-at adna helyette, ami látványosan más
   "−"/"+" glyphet rajzol — súlyt itt explicit 400-ra állítjuk, hogy a
   glyph-alak a lehető legközelebb maradjon a mockup-éhoz. */
.product-page .buy-actions .quantity .qty-btn {
  width: 44px !important; min-width: 44px !important; height: 48px !important; min-height: 48px !important;
  padding: 0 !important; margin: 0 !important; background: transparent !important; color: var(--ink) !important;
  border: none !important; border-radius: 0 !important; cursor: pointer; font-size: 1.2rem !important; line-height: 1 !important;
  letter-spacing: normal !important; text-transform: none !important;
  font-family: var(--f-body) !important; font-weight: 400 !important; white-space: normal !important;
  flex-shrink: 0;
  transition: background .25s var(--ease), color .25s var(--ease);
}
.product-page .buy-actions .quantity .qty-btn:hover { background: var(--gold-soft) !important; color: var(--gold) !important; }
/* border/border-radius !important: a Kit globális form-field szabálya
   (1px rgba(255,255,255,.314) keret, 10px radius) a mockup keretnélküli,
   2px radiusú input-ját írta felül. */
.product-page .buy-actions .quantity input.qty {
  /* height:auto — a mockup inputja nem kap magasságot (22px tartalmi magasság,
     a 48px-es pill-t a wrapper align-items:center-je centrálja); a korábbi
     48px-es kényszer magasabb sormagasságot és más szövegpozíciót adott. */
  width: 48px !important; height: auto !important; padding: 0 !important; text-align: center; background: transparent !important;
  border: none !important; border-radius: 0 !important; color: var(--ink) !important;
  /* line-height: normal — a mockup inputja nem örökli a body 1.6-os
     sormagasságát (böngésző-alapértelmezés), így 22px, nem 25.6px. */
  font-family: var(--f-body); font-size: 1rem !important; font-weight: 600; line-height: normal !important; -moz-appearance: textfield; margin: 0 !important;
  flex-shrink: 0;
}
.product-page .buy-actions .quantity input.qty::-webkit-outer-spin-button,
.product-page .buy-actions .quantity input.qty::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
/* letter-spacing/text-transform/line-height/border !important: a Kit
   globális <button> szabálya (minden gombra vonatkozó inline <style>)
   ezeket mind felülírta a mockup kompakt Kosárba gombjához képest. */
.product-page .buy-actions button.single_add_to_cart_button {
  flex: 1; display: inline-flex !important; align-items: center; justify-content: center;
  /* font-family !important + white-space: a Kit gomb-szabálya `Manrope, sans-serif`-et
     (system-ui fallback nélkül) és `white-space: nowrap`-ot ad, a mockup
     `Manrope, system-ui, sans-serif` + normal helyett. */
  padding: 0.95rem 1.9rem !important; font-family: var(--f-body) !important; white-space: normal !important; font-weight: 600 !important;
  font-size: 0.82rem !important; letter-spacing: 0.12em !important; text-transform: uppercase !important;
  line-height: normal !important;
  border-radius: 2px !important; cursor: pointer; border: 1px solid transparent !important;
  background: linear-gradient(180deg, var(--gold), var(--gold-deep)) !important; color: #15110a !important;
  box-shadow: 0 10px 30px -12px rgba(210,188,115,0.5);
  transition: transform 0.4s var(--ease), box-shadow 0.4s var(--ease);
}
.product-page .buy-actions button.single_add_to_cart_button:hover { transform: translateY(-3px); box-shadow: 0 18px 40px -14px rgba(210,188,115,0.65); }

/* padding-left:0 — a natív <ul> böngésző-alapértelmezés (40px) a mockupban
   nincs resetelve az ősi CSS-ben sem, mert ott a lista soha nem kap
   list-style-t; itt viszont valódi <ul>-ként semmi nem nullázza. */
.product-page .buy-trust { display: grid; gap: 0.7rem; border-top: 1px solid var(--line-soft); padding: 1.4rem 0 0; margin: 0; list-style: none; }
.product-page .buy-trust li {
  list-style: none; display: flex; align-items: center; gap: 0.7rem;
  color: var(--ink-soft); font-size: 0.88rem;
}
.product-page .buy-trust .ico { color: var(--gold); font-size: 1rem; width: 1.4rem; text-align: center; }

/* ---------- LEÍRÁS + JELLEMZŐK ---------- */
.product-page .pd-details {
  display: grid !important; grid-template-columns: 1.4fr 1fr; gap: 3rem !important;
  max-width: var(--maxw); margin: 5.5rem auto 0; padding: clamp(1.6rem, 2.6vw, 2.4rem) 2rem;
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: 4px;
}
/* color !important: a mockupban a .pd-desc .eyebrow valójában egy sima <p>
   (a ".pd-desc p" szabály nyer rajta, ezért tompa színű), itt viszont külön
   Heading widget, amire az általános ".eyebrow" class-szabály (arany) fut rá. */
.product-page .pd-desc .eyebrow { display: block; margin-bottom: 1rem; color: var(--ink-soft) !important; line-height: 1.6 !important; }
/* Az `.eyebrow`/`.section-title` class az Elementor heading widget BURKOLÓJÁN
   van, a szöveg a belső `.elementor-heading-title`-ben — arra viszont a Kit
   heading-tipográfiája `line-height: 1`-et (11.52px) és 19.2px alsó margót ad,
   ezért minden eyebrow 6.9px-szel alacsonyabb volt a mockup 18.43px-énél.
   A `p.elementor-heading-title` (elem + class) azért kell a margóhoz, mert a
   Kit bekezdés-térköze (1.2rem = 19.2px) `!important`-tal jön, és egy
   class-only szelektor nem verte — a wrapper így 37.6px magas volt a mockup
   18.43px-e helyett. */
.product-page .eyebrow .elementor-heading-title { line-height: 1.6 !important; }
.product-page .eyebrow p.elementor-heading-title,
.product-page .eyebrow.elementor-widget-heading p.elementor-heading-title { margin: 0 !important; }
/* margin-bottom !important + a .elementor-heading-title class megismétlése
   a szelektorban: azonos specificitású, mint a fenti globális
   ".section-title .elementor-heading-title{margin:0}" kinullázás, a
   forráson belüli KÉSŐBBI pozíció miatt ez nyer, visszaadva a mockup
   19.2px-es térközét a cím alatt. */
.product-page .pd-desc h2, .product-page .pd-desc .elementor-heading-title { margin: 0 0 1.2rem !important; }
.product-page .pd-desc p { color: var(--ink-soft); margin-bottom: 1rem; }

/* min-width:0 — a CSS Grid rácstag alapértelmezett min-width:auto-ja a
   <table> intrinsic (nem tördelt) tartalmi szélességét venné figyelembe,
   ami kilógott a rács 1fr sávjából a kártya jobb szélén túlra. */
.product-page .spec-table { border-top: 1px solid var(--line); min-width: 0; }
.product-page .spec-table .eyebrow { display: block; margin: 0 0 1.2rem; padding-top: 1.4rem; }
/* A natív "Additional information" <h2>-t elrejtjük — saját eyebrow-t adunk
   helyette (show_heading widget-beállítás "no"-ra állítva). */
.product-page .spec-table h2 { display: none; }
/* A natív <table>-t (`single-product/product-attributes.php`) a child theme
   sablon-override-ja a mockup `<dl>` + `.spec-row` + `dt`/`dd` markupjára
   cseréli (`wp-theme/woocommerce/single-product/product-attributes.php`),
   így a mockup CSS-e szó szerint alkalmazható. Ezzel egyszerre megszűnt a
   `td > p` extra sormagasság (66.3 → 51.7px), a pontozott
   `rgba(0,0,0,0.1)` elválasztó, a dőlt értékek és a 14.4px-es betűméret. */
.product-page .spec-table dl { display: grid; grid-template-columns: 1fr 1fr; gap: 0; margin: 0; }
.product-page .spec-table .spec-row { display: contents; }
.product-page .spec-table dt,
.product-page .spec-table dd {
  padding: 0.85rem 0; margin: 0; border-bottom: 1px solid var(--line-soft);
  font-size: 0.92rem; line-height: 1.6 !important;
}
.product-page .spec-table dt { color: var(--ink-dim); font-weight: 400; }
.product-page .spec-table dd { color: var(--ink); text-align: right; font-weight: 500; }
/* A mockup `dd.id` sora (Egyedi azonosító = valós SKU) arany Fraunces italic. */
.product-page .spec-table dd.id { color: var(--gold); font-family: var(--f-display); font-style: italic; }

/* ---------- GONDOZÁS + CERTIFIKÁCIÓ ---------- */
.product-page .pd-care { max-width: var(--maxw); margin: 5.5rem auto 0; padding: 0 2rem; }
.product-page .care-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 1.4rem; margin-top: 2.5rem; }
.product-page .care-card { padding: 1.8rem 1.5rem; border: 1px solid var(--line-soft); border-radius: 4px; background: var(--panel); }
.product-page .care-card .ico {
  font-size: 1.5rem; color: var(--gold); margin-bottom: 0.9rem;
  width: 50px; height: 50px; border: 1px solid var(--line); border-radius: 50%;
  display: grid; place-items: center;
}
/* line-height !important: a Kit globális H4 sormagassága (21.12px) a mockup
   1.6-os (28.16px) body line-height-jét írja felül. */
.product-page .care-card h4 { font-family: var(--f-display); font-weight: 500 !important; font-size: 1.1rem; margin: 0 0 0.35rem; line-height: 1.6 !important; }
.product-page .care-card p { color: var(--ink-soft); font-size: 0.9rem; margin: 0; }

.product-page .cert-panel {
  max-width: var(--maxw); margin: 3rem auto 0; padding: clamp(2rem, 4vw, 3rem);
  display: flex; align-items: center; gap: 2rem;
  background: var(--gold-soft); border-left: 3px solid var(--gold); border-radius: 4px;
}
.product-page .cert-panel .cert-seal {
  flex: 0 0 auto; width: 70px; height: 70px; border-radius: 50%;
  border: 1px solid var(--gold); color: var(--gold);
  display: grid; place-items: center; font-size: 2rem;
}
.product-page .cert-panel h3 { font-family: var(--f-display); font-weight: 400 !important; font-size: 1.4rem; margin: 0 0 0.5rem; line-height: 1.6 !important; }
.product-page .cert-panel p { color: var(--ink-soft); font-size: 0.95rem; max-width: 60ch; margin: 0; }

/* ---------- KAPCSOLÓDÓ TERMÉKEK (woocommerce-product-related widget) ---------- */
.product-page .pd-related { padding: 6rem 2rem 2rem; }
.product-page .section-head.row {
  /* !important a display/flex-direction-en: az Elementor konténer saját
     "e-flex" szabálya (flex-direction:column) különben nyer. */
  display: flex !important; flex-direction: row !important;
  align-items: flex-end; justify-content: space-between;
  max-width: var(--maxw); margin: 0 auto 3.5rem; text-align: left; gap: 2rem !important;
}
.product-page .section-head.row .eyebrow { margin-bottom: 0.6rem; }
/* A mockup `.pd-related .section-head.row { margin: 0 auto 2.5rem }` felülírása
   (a globális 3.5rem helyett) — 16px-szel kevesebb a fejléc alatt. */
.product-page .pd-related .section-head.row { margin: 0 auto 2.5rem; }
/* display:block — a link natívan inline (a Kit link-alapértelmezés miatt),
   ezért a mockup fix szélességű, jobbra igazított sorát a szöveg saját
   (auto) szélessége helyettesítette, és balra csúszott. */
.product-page .link-all { display: block; color: var(--gold); font-weight: 600; font-size: 0.9rem; white-space: nowrap; }
.product-page .link-all em { font-style: normal; transition: transform 0.3s var(--ease); display: inline-block; }
.product-page .link-all:hover em { transform: translateX(6px); }

/* A related-products widget a NATÍV Woo loop-hookokat futtatja (content-product.php),
   amiket a functions.php globálisan (nem oldaltípusra szűkítve) a mockup
   .product-media/.product-info markupjára cserél — ugyanaz a kártya-CSS
   alkalmazható, mint a Product Archive-on (7. fázis), csak más gyökér-selectorral. */
.product-page .gc-related-products .related.products > h2 { display: none; }
.product-page .gc-related-products ul.products.elementor-grid.columns-4 {
  display: grid !important; grid-template-columns: repeat(4, 1fr) !important; gap: 1.4rem !important;
  /* margin-top: a mockup `.product-grid` 3.5rem-es felső margója (56px) — a
     korábbi `margin: 0 !important` ezt kinullázta. */
  list-style: none; margin: 3.5rem 0 0 !important; padding: 0; max-width: var(--maxw); margin-inline: auto !important;
}
.product-page .gc-related-products ul.products li.product {
  position: static; display: block !important; width: auto !important;
  margin: 0 !important; padding: 0 !important; float: none !important;
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: 4px; overflow: hidden;
  transition: border-color .4s var(--ease), box-shadow .4s var(--ease);
}
.product-page .gc-related-products ul.products li.product:hover { border-color: var(--line); box-shadow: 0 24px 50px -28px rgba(0,0,0,0.8); }
.product-page .gc-related-products .product-media { display: block; position: relative; aspect-ratio: 1/1; overflow: hidden; }
.product-page .gc-related-products a.product-media-link { display: block; width: 100%; height: 100%; }
.product-page .gc-related-products .product-media img { width: 100%; height: 100%; margin: 0 !important; object-fit: cover; transition: transform .8s var(--ease); }
.product-page .gc-related-products li.product:hover .product-media img { transform: scale(1.07); }
.product-page .gc-related-products .badge {
  position: absolute; top: 0.9rem; left: 0.9rem; z-index: 2;
  background: var(--gold); color: #15110a; font-size: 0.62rem; font-weight: 700;
  letter-spacing: 0.14em; text-transform: uppercase; padding: 0.3rem 0.6rem; border-radius: 2px; line-height: 1.6;
}
.product-page .gc-related-products .onsale { display: none !important; }
.product-page .gc-related-products a.add-btn {
  position: absolute !important; left: 0.9rem !important; right: 0.9rem !important; bottom: 0.9rem !important;
  top: auto !important; width: auto !important; z-index: 2;
  display: block !important; margin: 0 !important; text-align: center;
  background: rgba(5,8,7,0.85) !important; backdrop-filter: blur(6px);
  color: var(--ink) !important; border: 1px solid var(--line) !important; border-radius: 2px !important;
  padding: 0.75rem !important; cursor: pointer;
  font-family: var(--f-body) !important; font-weight: 600 !important; font-size: 0.78rem !important;
  letter-spacing: 0.1em !important; text-transform: uppercase; line-height: normal !important; text-decoration: none;
  opacity: 0; transform: translateY(10px);
  transition: opacity .4s var(--ease), transform .4s var(--ease), background .3s var(--ease), color .3s var(--ease);
}
.product-page .gc-related-products li.product:hover a.add-btn { opacity: 1; transform: none; }
.product-page .gc-related-products a.add-btn:hover { background: var(--gold) !important; color: #15110a !important; border-color: var(--gold) !important; }
.product-page .gc-related-products a.add-btn.added::after { content: " ✓"; }
.product-page .gc-related-products a.added_to_cart { display: none; }
.product-page .gc-related-products .product-info { padding: 1.3rem 1.3rem 1.6rem; }
.product-page .gc-related-products .product-info h3 {
  font-family: var(--f-display) !important; font-weight: 400 !important; font-size: 1.18rem !important;
  line-height: 1.6 !important; margin: 0 0 0.25rem !important; padding: 0 !important; color: var(--ink) !important;
}
.product-page .gc-related-products .product-info h3 a { color: inherit; text-decoration: none; transition: color .3s var(--ease); }
.product-page .gc-related-products .product-info h3 a:hover { color: var(--gold); }
.product-page .gc-related-products p.product-cat { margin: 0 0 0.7rem !important; color: var(--ink-dim) !important; font-size: 0.78rem; letter-spacing: 0.06em; text-transform: uppercase; }
.product-page .gc-related-products p.product-price { margin: 0 !important; font-family: var(--f-body); font-size: 1rem !important; line-height: 1.6 !important; color: var(--ink) !important; }
.product-page .gc-related-products p.product-price del,
.product-page .gc-related-products p.product-price s { color: var(--ink-dim) !important; font-size: 0.9rem; margin-right: 0.4rem; opacity: 0.7; text-decoration: line-through; }
.product-page .gc-related-products p.product-price ins,
.product-page .gc-related-products p.product-price strong,
.product-page .gc-related-products p.product-price > .amount,
.product-page .gc-related-products p.product-price > .woocommerce-Price-amount { text-decoration: none; color: var(--gold) !important; font-size: 1.1rem; font-weight: 700; }

/* ---------- NEWSLETTER (styles.css, ua. mint a Product Archive-on) ---------- */
/* A mockup `background` shorthandje (gradiens + var(--bg-3) mint utolsó réteg
   háttérszíne) — így a computed background-image is réteg-azonos
   ("grad, none"), nem csak a látvány. */
.product-page .newsletter {
  padding: 7rem 2rem;
  background:
    radial-gradient(700px 300px at 50% 0%, rgba(210,188,115,0.10), transparent 70%),
    var(--bg-3) !important;
  border-top: 1px solid var(--line-soft); border-bottom: 1px solid var(--line-soft);
}
.product-page .news-inner { max-width: 640px; margin: 0 auto; text-align: center; }
.product-page .news-inner .section-title { margin: 0 !important; }
.product-page .news-inner > p { color: var(--ink-soft) !important; margin: 1rem auto 2rem !important; max-width: 32rem; }
.product-page .news-form { display: flex; gap: 0.8rem; max-width: 480px; margin: 0 auto; }
.product-page .news-form input {
  flex: 1; padding: 0.95rem 1.2rem !important; background: rgba(255,255,255,0.03) !important;
  border: 1px solid var(--line) !important; border-radius: 2px !important; color: var(--ink) !important;
  font-family: var(--f-body) !important; font-size: 0.95rem !important; line-height: normal !important;
}
.product-page .news-form input::placeholder { color: var(--ink-dim); }
.product-page .news-form input:focus { outline: none; border-color: var(--gold) !important; }
.product-page .news-form button.btn-primary {
  background-image: linear-gradient(180deg, var(--gold), var(--gold-deep)) !important;
  background-color: transparent !important; color: #15110a !important;
  padding: 0.95rem 1.9rem !important; border-radius: 2px !important; font-size: 0.82rem !important; line-height: normal !important;
  /* a Kit gomb-szabálya `nowrap`-ot ad, a mockup `normal`-t */
  white-space: normal !important;
}
.product-page .news-fine { color: var(--ink-dim) !important; font-size: 0.78rem !important; margin: 1.1rem 0 0 !important; }

/* ---------- RESZPONZÍV ---------- */
@media (max-width: 1024px) and (min-width: 981px) {
  .product-page .gc-related-products ul.products.elementor-grid.columns-4 { grid-template-columns: repeat(3, 1fr) !important; }
}
@media (max-width: 980px) {
  .product-page .pd-top { grid-template-columns: 1fr; gap: 2rem; }
  .product-page .buy-panel { position: static; }
  .product-page .pd-details { grid-template-columns: 1fr; gap: 2.5rem; }
  .product-page .care-grid { grid-template-columns: repeat(2, 1fr); }
  .product-page .gc-related-products ul.products.elementor-grid.columns-4 { grid-template-columns: repeat(2, 1fr) !important; }
  /* !important: a fenti globális `.e-con { gap: 0 !important }` miatt a
     mobil oszlopköz is csak !important-tal érvényesül. */
  .product-page .elementor-location-single .pd-top { gap: 2rem !important; }
  /* A mockupban a `.pd-top` egyetlen rács-sávja NEM a wrapper 311px-es
     tartalmi szélességére, hanem a buy-panel min-content szélességére
     (337.75px: 138px mennyiség + 12.8px gap + a "Kosárba" gomb min-contentje +
     2×25.6px panel-padding) igazodik, tehát kissé túllóg a wrapper paddingján.
     Az Elementor konténerén ez a min-content nem propagált (a rács-sáv 311px
     maradt), ezért explicit `min-width: min-content` kell — így a mockup
     viselkedését adja, nem beégetett px-t. */
  .product-page .pd-top > .e-con { min-width: min-content; }
  .product-page .elementor-location-single .pd-details { gap: 2.5rem !important; }
}
@media (max-width: 760px) {
  /* A mockup `styles.css:433` szabálya: mobilon a section-head cím és az
     "Összes …" link egymás alá kerül, balra igazítva. Ennek a termékoldal
     `.section-head.row` szabálya UTÁN kell állnia a fájlban, különben az
     (azonos specificitású, de korábbi) `flex-direction: row !important` nyer. */
  .product-page .section-head.row { flex-direction: column !important; align-items: flex-start !important; }
}
@media (max-width: 540px) {
  /* A mockup `styles-termek.css` 540px-es blokkja: 6.5rem (104px). Korábban egy
     760px-es breakpointon 7.5rem (120px) volt — 390px-en 16px-szel lejjebb
     kezdődött az egész oldal. */
  .product-page .pd-wrap { padding-top: 6.5rem; }
  .product-page .care-grid { grid-template-columns: 1fr; }
  .product-page .cert-panel { flex-direction: column; text-align: center; }
  .product-page .gc-related-products ul.products.elementor-grid.columns-4 { grid-template-columns: 1fr !important; }
  .product-page .news-form { flex-direction: column; }
  /* A korábbi `form.cart { flex-wrap: wrap }` mobil szabály eltávolítva: a
     mockupban nincs ilyen, és emiatt a sor összenyomható volt a min-content alá
     — a `.pd-top` egyetlen rács-sávja 311px maradt a mockup 337.75px-e helyett
     (a mockupban a buy-panel min-content-je szélesíti a sávot, kissé túl is
     lógva a wrapper paddingján; ez a mockup viselkedése, amit reprodukálunk). */
}

/* Elementor Pro's own Cart/Checkout widget CSS
   (widget-woocommerce-cart.min.css) ships `.woocommerce{font-family:Roboto,
   sans-serif}` as its base reset — a plain single-class rule, but since
   font-family is inherited, anything inside `.woocommerce` that isn't
   covered by one of our own (more specific) typography rules falls back to
   Roboto instead of Manrope. Confirmed live on both Cart and Checkout
   (e.g. the pickup-point "Válassz egy átvételi helyet" link, and the whole
   `.woocommerce-checkout-review-order-table`). One rule at the site's own
   font-family, same specificity but loaded later, fixes every current AND
   future instance in one place instead of chasing individual leaf elements. */
.woocommerce,
.elementor-widget-woocommerce-cart,
.elementor-widget-woocommerce-checkout-page { font-family: var(--f-body) !important; }

/* =========================================================
   KOSÁR OLDAL (frontend-mockup/kosar.html, styles-fiok.css .cart-*)
   Natív WooCommerce cart.php táblázatot CSS-grid kártya-sorrá alakítjuk —
   CSS-reskin, nem markup-újraírás (ld. termékkategória-archívum minta).
   ========================================================= */
body.woocommerce-cart .entry-content,
body.woocommerce-cart main { background: var(--bg); }

/* The title widget's Typography control is bound to an empty Kit global
   (cart.json `__globals__.typography_typography: ""`), so it fell through to
   Elementor's default Heading style — Manrope 16px/400, nothing like any
   other page's title. Match `frontend-mockup/styles-fiok.css` `.cart-head h1`
   (same treatment `.co-head h1` uses on Checkout, and the same family/weight/
   negative tracking every hero/banner title in the mockup shares). */
.elementor-element-81781b6.elementor-widget-heading .elementor-heading-title {
  font-family: var(--f-display); font-weight: 300;
  font-size: clamp(2.2rem, 5vw, 3.4rem); letter-spacing: -0.02em;
}

.woocommerce-cart-form table.cart,
.woocommerce-cart-form table.cart tbody,
.woocommerce-cart-form table.cart tr { display: block; width: 100%; }
.woocommerce-cart-form table.cart thead { display: none; }

.woocommerce-cart-form table.cart tr.woocommerce-cart-form__cart-item {
  display: grid;
  grid-template-columns: 88px 1fr auto auto auto;
  align-items: center; gap: 1.25rem;
  padding: 1.5rem 0; border-bottom: 1px solid var(--line-soft);
  position: relative;
}
/* !important: Elementor Pro's compiled cart-widget CSS
   (custom-pro-widget-woocommerce-cart.min.css) adds its own
   `border-top: var(--order-summary-items-divider-weight,1px) solid
   var(--order-summary-items-divider-color,#d5d8dc)` to every td via a
   4-class selector — higher specificity than this rule, so every row after
   the first showed a second, misaligned divider line on top of our own
   `tr` border-bottom. */
.woocommerce-cart-form table.cart td { display: block; padding: 0; border: none; border-top: none !important; }
.woocommerce-cart-form table.cart td.product-thumbnail img {
  width: 88px; height: 88px; object-fit: cover; border-radius: 2px;
}
.woocommerce-cart-form table.cart td.product-name a {
  font-family: var(--f-display); font-weight: 400; font-size: 1.05rem; color: var(--ink);
}
.woocommerce-cart-form table.cart td.product-price {
  color: var(--ink-dim); font-size: 0.85rem; white-space: nowrap;
}
.woocommerce-cart-form table.cart td.product-subtotal {
  font-family: var(--f-display) !important; font-style: italic; color: var(--gold); white-space: nowrap;
}
.woocommerce-cart-form table.cart td.product-remove {
  position: absolute; top: 0.5rem; right: 0;
}
.woocommerce-cart-form table.cart td.product-remove a.remove {
  /* !important: Elementor Pro's compiled cart CSS declares
     `.remove{color:var(--order-summary-remove-icon-normal-color,#000)!important}`
     (and the hover equivalent), and cart.json resolves that var from Kit
     globals, not the mockup palette — without !important this rule never
     applies and the icon renders in whatever colour Kit's globals give. */
  color: var(--ink-dim) !important; font-size: 1.2rem; text-decoration: none;
}
.woocommerce-cart-form table.cart td.product-remove a.remove:hover { color: var(--gold) !important; }

.woocommerce-cart-form td.product-quantity .quantity {
  display: inline-flex; align-items: center; border: 1px solid var(--line-soft); border-radius: 2px;
}
/* !important: az Elementor Kit globális `button` szabálya (padding, border-radius,
   width, border, color) inline <style>-ben, !important-tal érkezik, és a natív
   Kit-gomb méretét (10px 40px padding, 10px radius) adná a stepper gombokra is
   — l. CLAUDE.md "Elementor Kit globals" gotcha. */
.woocommerce-cart-form td.product-quantity .gc-qty-minus,
.woocommerce-cart-form td.product-quantity .gc-qty-plus {
  width: 2rem !important; height: 2rem !important; padding: 0 !important;
  background: transparent !important; border: none !important; border-radius: 2px !important;
  color: var(--ink-soft) !important; cursor: pointer;
}
.woocommerce-cart-form td.product-quantity .gc-qty-minus:hover,
.woocommerce-cart-form td.product-quantity .gc-qty-plus:hover { color: var(--gold) !important; }
.woocommerce-cart-form td.product-quantity input.qty {
  width: 2.5rem; text-align: center; background: transparent; border: none; color: var(--ink);
  font-family: var(--f-body);
}

.woocommerce-cart-form table.cart tr.actions {
  display: flex; flex-wrap: wrap; gap: 1rem; padding-top: 1.5rem;
}
.woocommerce-cart-form table.cart tr.actions td { display: flex; flex-wrap: wrap; gap: 1rem; width: 100%; }

/* Elementor Pro's Cart widget replaces the native coupon form entirely with
   its own `.coupon.e-cart-section.shop_table` > `.form-row.coupon-col` >
   `.coupon-col-start` (input) + `.coupon-col-end` (button) markup — the old
   `.woocommerce-form-coupon-toggle`/`.showcoupon` selectors never matched
   anything here. Retargeted to the real, confirmed-live classes. */
.woocommerce-cart-form .coupon.e-cart-section {
  background: none; border: none; padding: 0; margin: 0 0 1.5rem;
}
.woocommerce-cart-form .coupon .coupon-col { display: flex; gap: 0.6rem; }
.woocommerce-cart-form .coupon-col-start { flex: 1; }
/* !important: same Kit "button" global fight as `.checkout-button`/`#place_order`
   — the coupon-apply button carries `class="button e-apply-coupon"`, so it's
   caught by the same `.woocommerce .button, … #place_order { … !important }`
   rule (float/display/width/color/background/border/padding). Shared skin for
   both the cart and checkout apply-coupon button (same class on both pages). */
.woocommerce-cart-form .coupon .e-apply-coupon,
.woocommerce-checkout .e-apply-coupon {
  display: inline-flex !important; align-items: center; justify-content: center;
  width: auto !important; float: none !important; margin: 0 !important;
  padding: 0.7rem 1.3rem !important;
  background: rgba(255,255,255,0.02) !important; color: var(--ink) !important;
  border: 1px solid var(--line) !important; border-radius: 2px !important;
  font-family: var(--f-body) !important; font-weight: 600; font-size: 0.75rem !important;
  letter-spacing: 0.08em; text-transform: uppercase; white-space: nowrap; cursor: pointer;
  transition: border-color 0.3s var(--ease), color 0.3s var(--ease);
}
.woocommerce-cart-form .coupon .e-apply-coupon:hover,
.woocommerce-checkout .e-apply-coupon:hover { border-color: var(--gold) !important; color: var(--gold) !important; }

/* Elementor Pro's own Cart-widget wrapper around the totals block ships its
   own decorative panel (background/border/16px-30px padding, resolved from
   Kit globals) — since our `.cart-collaterals` card floats inside it via
   margin-left:auto, that outer panel was left showing as a large empty box
   to the left of our narrower card. Neutralised so only our own card shows. */
.e-cart-totals.e-cart-section {
  background: none !important; border: none !important; padding: 0 !important;
}

/* One-column native flow (no grid/column restructure, per explicit
   instruction): left-aligned, not floated right via margin-left:auto —
   that used to leave a large, pointless empty void beside it since nothing
   else shares its row. Full width (no max-width cap): a narrow fixed-width
   card looked lost/arbitrary sitting alone under the full-width cart-lines
   list above it, once the page container itself was corrected to the
   site's actual --maxw. */
.cart-collaterals {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: 4px;
  padding: clamp(1.5rem, 2.4vw, 2.1rem); width: 100%;
}
/* !important: the Cart widget's own "Section Titles Typography" setting
   (cart.json) is bound to Kit's H2 global (Fraunces, weight 600) — a more
   specific, later-loaded per-post rule than this one, so our intended
   lighter weight-400 heading never won without it. Same fight for
   `.product-subtotal`/`.order-total` below: the widget's own "cart td"
   typography (bound to Kit's body-text global, Manrope) beats our
   Fraunces-italic-gold styling for those two cells specifically. */
.cart_totals h2 {
  font-family: var(--f-display) !important; font-weight: 400 !important; font-size: 1.35rem; margin-bottom: 1rem;
}
.cart_totals table.shop_table { width: 100%; border-collapse: collapse; }
.cart_totals table.shop_table tr th,
.cart_totals table.shop_table tr td { padding: 0.6rem 0; border-bottom: 1px solid var(--line-soft); text-align: left; }
.cart_totals tr.order-total th,
.cart_totals tr.order-total td {
  font-family: var(--f-display) !important; font-style: italic; color: var(--gold) !important; font-size: 1.1rem; border-bottom: none;
}
.wc-proceed-to-checkout { margin-top: 1.2rem; }
/* !important: ugyanaz az Elementor Kit globális gomb-stílus (fehér szöveg,
   10px radius, üveg-szerű border-szín) nyeri a Woo natív "Tovább a
   pénztárhoz" linket is Kit-!important nélkül. */
.wc-proceed-to-checkout a.checkout-button {
  display: block !important; text-align: center; padding: 0.9rem 1.5rem !important;
  background: linear-gradient(180deg, var(--gold), var(--gold-deep)) !important;
  color: #15110a !important;
  font-family: var(--f-body); font-weight: 600; font-size: 0.78rem; letter-spacing: 0.1em;
  text-transform: uppercase; text-decoration: none; border-radius: 2px !important;
  border: none !important; transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease);
}
/* !important: the widget's own :hover rule swaps in a Bootstrap-blue
   background + border + white text (`--checkout-button-hover-*` vars,
   default #5bc0de/#fff) on top of the gold button above — same Kit-style
   fight, just triggered only on hover so it's easy to miss in a static
   review. Matches the mockup's `.btn-primary:hover` treatment instead. */
.wc-proceed-to-checkout a.checkout-button:hover {
  background: linear-gradient(180deg, var(--gold), var(--gold-deep)) !important;
  color: #15110a !important; border: none !important; border-radius: 2px !important;
  transform: translateY(-3px); box-shadow: 0 18px 40px -14px rgba(210,188,115,0.65);
}

.woocommerce-cart .cart-empty {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: 4px;
  padding: 2.5rem; text-align: center; color: var(--ink-soft);
}

/* A brief 5 fázisában mért 390px-es Playwright-ellenőrzés horizontális
   túlcsordulást talált: az 5-oszlopos grid (88px 1fr auto auto auto + 1.25rem
   gap) szélesebb, mint a mobil viewport. A mockup `styles-fiok.css` 540px-es
   blokkja (`.cart-line { grid-template-columns: 72px 1fr }`,
   `.cart-controls` a bal oldal alá kerül) ugyanezt a mintát követi — ide is
   2 oszlopra csökkentjük a rácsot, a mennyiség/ár/részösszeg cellák pedig
   teljes szélességben, egymás alatt jelennek meg. */
@media (max-width: 540px) {
  .woocommerce-cart-form table.cart tr.woocommerce-cart-form__cart-item {
    grid-template-columns: 72px 1fr;
  }
  .woocommerce-cart-form table.cart td.product-thumbnail img { width: 72px; height: 72px; }
  .woocommerce-cart-form table.cart td.product-price,
  .woocommerce-cart-form table.cart td.product-quantity,
  .woocommerce-cart-form table.cart td.product-subtotal {
    grid-column: 1 / -1;
  }
}

/* =========================================================
   CHECKOUT OLDAL (frontend-mockup/penztar.html, styles-penztar.css .co-*)
   A natív WooCommerce checkout-form szerkezetét (billing/shipping/order-notes
   + order review) tartjuk meg — csak vizuális skin, mezőszemantika natív marad.
   ========================================================= */
body.woocommerce-checkout main { background: var(--bg); }

/* Same missing-typography bug as the cart page's title (see
   `.elementor-element-81781b6` above) — matches `.co-head h1`. */
.elementor-element-77ffc5e.elementor-widget-heading .elementor-heading-title {
  font-family: var(--f-display); font-weight: 300;
  font-size: clamp(2.2rem, 5vw, 3.4rem); line-height: 1.02; letter-spacing: -0.02em;
}

form.woocommerce-checkout { max-width: var(--maxw); margin: 0 auto; }
/* Finding #2 (final review): Elementor Pro's own compiled CSS already
   stacks billing/shipping (`float:none;width:auto`) inside this element —
   forcing a SECOND 1.5fr/1fr split here (nested inside the outer
   `.e-checkout__container` split below) created a grid whose `fr` tracks
   can't shrink below min-content(billing)+gap+min-content(shipping), which
   was the real cause of the ~565px scrollWidth overflow at 375px previously
   (mis-)attributed to select2. The mockup has no such nested split either
   (frontend-mockup/penztar.html's numbered billing/shipping/notes cards are
   a single vertical stack) — so this stays single-column at every width. */
/* !important on display/padding: Elementor Pro's own Checkout-widget CSS
   styles `.col-1` as a decorative intro panel (16px 30px padding,
   display:block) but leaves `.col-2` untouched — order notes (which WC
   renders inside `.col-2` when "ship to different address" is off) sat
   flush at 0 padding while billing (`.col-1`) was inset 30px, so the two
   stacked cards had different widths/x-offsets. Forced identical. */
#customer_details.col2-set {
  display: grid; gap: 2rem;
}
/* WooCommerce core ships a float-clearfix on `.col2-set`
   (`::before`/`::after { content:" "; display:table }`) for its native
   2-column float layout — once `.col2-set` becomes a grid container those
   two generated-content pseudo-elements turn into real (0-height) grid
   items themselves, adding a full row-gap of empty space *before* col-1
   and *after* col-2 (this is what pushed the "Rendelésed" order-review
   column, which has no such clearfix, noticeably higher than the billing
   card next to it). Removing the generated content drops them from the
   box tree entirely. */
#customer_details.col2-set::before,
#customer_details.col2-set::after { content: none; }
/* Elementor Pro's own "Form Section" style gives `.col-1`/`.col-2` a
   decorative panel of their own (border + background, resolved from Kit
   globals) — nested directly around our `.woocommerce-billing-fields` /
   `.woocommerce-shipping-fields` / `.woocommerce-additional-fields` panels
   below, which carry the SAME treatment. The result was a border-in-a-border
   ("dupla border") around every numbered section. Only the inner card
   should show. Same fight, same fix, as `#payment` and
   `.e-checkout__order_review` below. */
#customer_details .col-1, #customer_details .col-2 {
  display: grid !important; gap: 1.4rem; padding: 0 !important; float: none; width: 100%; margin: 0;
  background: none !important; border: none !important;
}

#customer_details .woocommerce-billing-fields,
#customer_details .woocommerce-shipping-fields,
#customer_details .woocommerce-additional-fields {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: 4px;
  padding: clamp(1.5rem, 2.4vw, 2.1rem);
  counter-increment: co-section;
}
#customer_details { counter-reset: co-section; }
#customer_details .woocommerce-billing-fields > h3::before,
#customer_details .woocommerce-shipping-fields > h3::before,
#customer_details .woocommerce-additional-fields > h3::before {
  content: counter(co-section, decimal-leading-zero) "  ";
  font-family: var(--f-display); font-style: italic; color: var(--gold);
}
/* WooCommerce's order-notes template (`.woocommerce-additional-fields`)
   never renders its own <h3> — the counter above still increments on this
   element, but with no heading to prefix, "02" never appeared anywhere and
   the card looked like an unlabelled, disconnected box. Generate the
   missing section heading directly. */
#customer_details .woocommerce-additional-fields:not(:has(h3))::before {
  content: counter(co-section, decimal-leading-zero) "  Megjegyzés";
  display: block; color: var(--ink); font-family: var(--f-display); font-weight: 400;
  font-size: 1.35rem; letter-spacing: -0.01em; margin-bottom: 1.4rem;
}
#customer_details h3 {
  font-family: var(--f-display); font-weight: 400; font-size: 1.35rem;
  letter-spacing: -0.01em; margin-bottom: 1.4rem;
}

.woocommerce-billing-fields .form-row,
.woocommerce-shipping-fields .form-row,
.woocommerce-additional-fields .form-row { margin-bottom: 1rem; }
.woocommerce-billing-fields .form-row:last-child,
.woocommerce-additional-fields .form-row:last-child { margin-bottom: 0; }

.woocommerce-billing-fields label,
.woocommerce-shipping-fields label,
.woocommerce-additional-fields label {
  display: block; font-size: 0.74rem; letter-spacing: 0.1em; text-transform: uppercase;
  color: var(--ink-dim); margin-bottom: 0.5rem; font-family: var(--f-body);
}
/* !important on padding: the Checkout widget's own "Form Fields
   Typography/Style" setting (Kit-bound) ships a decorative `10px 40px`
   padding on every input/select/textarea — the 40px left/right made every
   field look like a pill-shaped search box instead of the mockup's plain
   rectangular field. */
.woocommerce-billing-fields input.input-text,
.woocommerce-shipping-fields input.input-text,
.woocommerce-additional-fields input.input-text,
.woocommerce-additional-fields textarea,
.woocommerce-billing-fields select,
.woocommerce-shipping-fields select {
  width: 100%; padding: 0.85rem 1rem !important; background: rgba(255,255,255,0.03);
  border: 1px solid var(--line); border-radius: 2px; color: var(--ink);
  font-family: var(--f-body); font-size: 0.95rem;
}
.woocommerce-billing-fields input.input-text:focus,
.woocommerce-shipping-fields input.input-text:focus,
.woocommerce-additional-fields input.input-text:focus,
.woocommerce-additional-fields textarea:focus { outline: none; border-color: var(--gold); }

.woocommerce-billing-fields .form-row-first,
.woocommerce-billing-fields .form-row-last,
.woocommerce-shipping-fields .form-row-first,
.woocommerce-shipping-fields .form-row-last { display: inline-block; width: 48%; }
.woocommerce-billing-fields .form-row-first,
.woocommerce-shipping-fields .form-row-first { margin-right: 4%; }

label.checkbox { display: flex; align-items: center; gap: 0.6rem; color: var(--ink-soft); font-size: 0.9rem; }

/* Checkout — shipping/payment radio cards, order review, notices, coupon toggle */
/* width:100% is required: inside a table cell a `display:grid` box with no
   explicit width computed to 0 (shrink-to-fit instead of filling the cell
   like a plain block box would) — the `<li>` then had no room at all and
   sat pinned to the cart-totals card's right edge, which is what made the
   vp_pont icon row look like it was floating outside the card. */
#shipping_method,
.wc_payment_methods { list-style: none; display: grid; gap: 0.8rem; min-width: 0; width: 100%; }
/* flex-wrap:wrap is required, not cosmetic: `.payment_box` below relies on
   `flex-basis:100%` to drop onto its own row under the label — with the
   default nowrap, the row instead squeezed the label down to a sliver and
   let the payment_box float alongside it on the same line (bacs option
   rendered as a near-empty box + a misplaced floating description bubble). */
#shipping_method li,
.wc_payment_method {
  display: flex; align-items: center; flex-wrap: wrap; gap: 0.8rem; max-width: 100%;
  border: 1px solid var(--line-soft); border-radius: 4px; padding: 1rem 1.2rem;
  background: rgba(255,255,255,0.02);
}
/* !important: WooCommerce core CSS ships `.woocommerce ul#shipping_method
   li label { display: inline }`, a more specific selector (id + 2 classes
   + 3 elements) than this one — without !important this rule never won,
   `display` stayed `inline`/`block`, and the vp_pont plugin's icon-row span
   (see below) rendered inline instead of wrapping onto its own row. */
#shipping_method li label,
.wc_payment_method > label {
  color: var(--ink-soft); font-family: var(--f-body); font-size: 0.92rem; margin: 0; flex: 1;
  display: flex !important; align-items: center; flex-wrap: wrap !important; gap: 0.6rem; min-width: 0;
  text-transform: none; letter-spacing: normal;
}
#shipping_method li input.shipping_method,
.wc_payment_method input.input-radio { accent-color: var(--gold); }
.wc_payment_method .payment_box {
  flex-basis: 100%; margin-top: 0.8rem; padding-top: 0.8rem; border-top: 1px solid var(--line-soft);
  color: var(--ink-dim); font-size: 0.85rem;
}
/* The pickup-point plugin (vp_pont) injects its own provider-icon row
   (`.vp-woo-pont-shipping-method-icons`, four 32px logos) inside the
   shipping-method label next to the price text — with no basis/wrap of its
   own it forced the whole `<li>` wider than the 380px cart-totals/checkout
   card and overflowed past the card's right edge. Drop it onto its own row,
   same pattern as `.payment_box` above. */
.vp-woo-pont-shipping-method-icons { flex-basis: 100%; margin-top: 0.4rem; }
/* The plugin's price markup uses a plain (breakable) space between the
   thousands group and the number ("1 040 Ft"), which wrapped mid-price in
   the narrower checkout summary column ("1" / "040 Ft-tól"). */
.vp-woo-pont-shipping-method-label-price { white-space: nowrap; }
/* The pickup-point plugin's own map modal (Leaflet.js) ships its own
   Helvetica/Arial UI font for labels and a monospace font for the +/- zoom
   controls — hidden until the visitor opens "Válassz egy átvételi helyet",
   but still reachable, so still in scope for the site-wide "only Manrope/
   Fraunces" rule. */
.vp-woo-pont-modal, .vp-woo-pont-modal * { font-family: var(--f-body) !important; }

/* Elementor Pro wraps `#order_review` in its own decorative
   `.e-checkout__order_review` panel (border + background from Kit globals)
   — same nested-panel "dupla border" bug as `.col-1`/`.col-2` above, just on
   the "Rendelésed" card instead. */
.e-checkout__order_review {
  background: none !important; border: none !important; padding: 0 !important;
}
#order_review { background: var(--panel); border: 1px solid var(--line-soft); border-radius: 4px;
  padding: clamp(1.5rem, 2.4vw, 2.1rem); position: sticky; top: 6rem; }
#order_review_heading {
  font-family: var(--f-display); font-weight: 400; font-size: 1.35rem; margin-bottom: 1.4rem;
}
.woocommerce-checkout-review-order-table { width: 100%; border-collapse: collapse; }
.woocommerce-checkout-review-order-table thead { display: none; }
.woocommerce-checkout-review-order-table td,
.woocommerce-checkout-review-order-table th { padding: 0.6rem 0; border-bottom: 1px solid var(--line-soft); text-align: left; }
.woocommerce-checkout-review-order-table tr.order-total th,
.woocommerce-checkout-review-order-table tr.order-total td {
  font-family: var(--f-display); font-style: italic; color: var(--gold); font-size: 1.1rem; border-bottom: none;
}

/* `#payment` (`.woocommerce-checkout-payment`) carries the same Elementor
   decorative panel as `.col-1`/`.col-2` and `.e-checkout__order_review`
   above — nested around `.wc_payment_method`'s own bordered card below,
   same "dupla border" bug. */
#payment {
  margin-top: 1.4rem;
  background: none !important; border: none !important; padding: 0 !important;
}
#payment .form-row.place-order { margin-top: 1.2rem; }
/* !important: `#place_order` is caught by the same Kit-global button rule as
   `.checkout-button`/`.gc-qty-*` (`.woocommerce .button, …, #place_order {
   float/display/width/margin/color/background/border/padding … !important }`,
   confirmed live in the checkout page's inline Kit <style>) — without
   !important here it renders Kit's default (fit-content width, white text,
   dark translucent background) instead of the mockup's full-width gold
   button. docs/kosar-penztar-fidelity-elteresek.md previously claimed this
   was already fixed "with the same pattern" — it wasn't; corrected here. */
#place_order {
  display: block !important; float: none !important; width: 100% !important; margin: 0 !important;
  padding: 0.9rem 1.5rem !important;
  background: linear-gradient(180deg, var(--gold), var(--gold-deep)) !important; color: #15110a !important;
  border: none !important; border-radius: 2px !important; cursor: pointer;
  font-family: var(--f-body) !important; font-weight: 600; font-size: 0.78rem !important; letter-spacing: 0.1em; text-transform: uppercase;
  transition: transform 0.3s var(--ease), box-shadow 0.3s var(--ease);
}
/* !important: the Checkout widget's own :hover rule swaps in Bootstrap-blue
   (`--purchase-button-hover-*`, default #5bc0de/#fff) and a separate Kit
   global button-hover rule adds a `border-radius:10px` outline on top —
   same fight as `.checkout-button:hover` on the cart page. */
/* Extra `#payment` ID prefix: a separate Kit-global inline <style> rule
   (`.woocommerce .button:hover, #place_order:hover { border-radius:10px;
   border:1px solid ...; background-color:rgba(3,4,4,.55) !important }`)
   has the SAME specificity as a bare `#place_order:hover` and is injected
   later in the page, so it won — the gold gradient still showed through
   (it's a background-image layer) but a white 10px-rounded border leaked
   on top of it. The extra ID wins the specificity tie outright. */
#payment #place_order:hover {
  background: linear-gradient(180deg, var(--gold), var(--gold-deep)) !important;
  color: #15110a !important; border: none !important; border-radius: 2px !important;
  transform: translateY(-3px); box-shadow: 0 18px 40px -14px rgba(210,188,115,0.65);
}
.woocommerce-terms-and-conditions-wrapper { margin-bottom: 1rem; color: var(--ink-soft); font-size: 0.85rem; }
.woocommerce-terms-and-conditions-wrapper a { color: var(--gold); }

.woocommerce-error,
.woocommerce-info {
  list-style: none; margin: 0 0 1.5rem; padding: 1rem 1.3rem;
  background: var(--panel); border: 1px solid var(--line); border-radius: 4px;
  color: var(--ink-soft); font-family: var(--f-body); font-size: 0.9rem;
}
.woocommerce-error li, .woocommerce-info li { margin: 0.2rem 0; }
.woocommerce-error::before, .woocommerce-info::before { display: none !important; }

/* Finding #3 (final review): Elementor Pro's Checkout widget renders its own
   `.e-coupon-box` (nudge text + toggle link + hidden anchor form), never the
   classic `.woocommerce-form-coupon-toggle`/`.showcoupon`/`.woocommerce-form-coupon`
   markup those old rules targeted (confirmed live: zero matches in rendered
   HTML). Retargeted to the real, confirmed-live classes. #coupon_code sizing
   is handled by the shared rule above (`.woocommerce-cart-form #coupon_code`
   is cart-only, so it's duplicated here for the checkout instance). */
.e-coupon-box {
  background: var(--panel); border: 1px solid var(--line-soft); border-radius: 4px;
  padding: clamp(1.5rem, 2.4vw, 2.1rem); margin-bottom: 1.5rem;
}
.e-woocommerce-coupon-nudge { margin: 0; color: var(--ink-soft); font-family: var(--f-body); font-size: 0.9rem; }
.e-woocommerce-coupon-nudge .e-show-coupon-form { color: var(--gold); }
.e-coupon-anchor-description {
  display: block; margin: 1rem 0 0.6rem; color: var(--ink-dim); font-size: 0.8rem; font-family: var(--f-body);
}
.coupon-container-grid { display: flex; gap: 0.6rem; align-items: center; }
.coupon-col-1 { flex: 1; }
/* Shared #coupon_code skin — the id is unique per page (cart vs checkout each
   render their own coupon form), so one unscoped rule covers both instead of
   duplicating it per page. */
#coupon_code {
  width: 100%; padding: 0.7rem 1rem; background: rgba(255,255,255,0.03); border: 1px solid var(--line);
  border-radius: 2px; color: var(--ink); font-family: var(--f-body);
}

/* Finding #7 (final review): both cart.json and checkout.json's Theme Builder
   root containers (.elementor-element-b587593 / .elementor-element-85ed10a)
   carry their own 200px-top/0-side/80px-bottom padding — copied from another
   template, not matching frontend-mockup/kosar.html's `.cart-wrap` or
   penztar.html's `.co-wrap`, which both use `7.5rem 2rem 6rem` identically.
   Checkout additionally got a compensating `body.woocommerce-checkout main`
   padding rule (removed above) that stacked ON TOP of the container's own
   200px, giving ~320px of top whitespace vs. the cart page's plain 200px —
   the two pages never matched each other, let alone the mockup. Overriding
   the containers' own padding custom properties directly normalizes both to
   the mockup's actual value. */
body.woocommerce-cart .elementor-element-b587593,
body.woocommerce-checkout .elementor-element-85ed10a {
  --padding-top: 7.5rem !important;
  --padding-right: 2rem !important;
  --padding-bottom: 6rem !important;
  --padding-left: 2rem !important;
}
/* `content_width: full` (required so the container isn't boxed by Elementor's
   own default, per CLAUDE.md) means the root container has no cap of its
   own — it renders edge-to-edge at the full page width. Nothing inside ever
   set a max-width either: `form.woocommerce-checkout` caps the checkout
   FORM at var(--maxw), but the root container (and the heading widget that
   sits beside it) stayed full-bleed, so the cart page's whole content was
   ~1425px wide on a 1440px viewport instead of matching the mockup's (and
   every other page's) 1240px `--maxw`, and the checkout "Pénztár" title sat
   ~68px further left than the form beneath it. Capping the root container
   itself — not just its children — fixes both. */
body.woocommerce-cart .elementor-element-b587593,
body.woocommerce-checkout .elementor-element-85ed10a {
  max-width: var(--maxw) !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
@media (max-width: 540px) {
  body.woocommerce-cart .elementor-element-b587593,
  body.woocommerce-checkout .elementor-element-85ed10a {
    --padding-top: 6.5rem !important;
  }
}

/* Finding #4 (final review): WooCommerce emits `.woocommerce-message` for
   cart/checkout AJAX notices too ("Kosár frissítve", "Kupon sikeresen
   alkalmazva", the remove-with-undo notice) — not just the add-to-cart
   toast. On these two pages the message should render inline in its normal
   document position (inside `.woocommerce-notices-wrapper`), not fly to a
   fixed top-right corner and self-destruct after 4s (which silently kills
   the Undo link before anyone can use it). The JS auto-dismiss is also
   scoped off these pages — see header-footer.js. */
body.woocommerce-cart .woocommerce-message,
body.woocommerce-checkout .woocommerce-message {
  position: static; top: auto; right: auto; left: auto;
  max-width: none; width: 100%; margin: 0 0 1.5rem;
  animation: none;
}
