/* ============================================================
   Tahoorestan — pixel clone of the supplied design
   Reference viewport: 1440px.  Direction: RTL.
   ============================================================ */

/* body / UI — IRANYekanX (the design's own family) */
@font-face{font-family:IRANYekanX;src:url(assets/fonts/IRANYekanX-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:IRANYekanX;src:url(assets/fonts/IRANYekanX-Medium.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:IRANYekanX;src:url(assets/fonts/IRANYekanX-DemiBold.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:IRANYekanX;src:url(assets/fonts/IRANYekanX-Bold.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:IRANYekanX;src:url(assets/fonts/IRANYekanX-ExtraBold.woff2) format("woff2");font-weight:800;font-style:normal;font-display:swap}
@font-face{font-family:IRANYekanX;src:url(assets/fonts/IRANYekanX-Black.woff2) format("woff2");font-weight:900;font-style:normal;font-display:swap}

/* headings / display — Doran. No 600 cut exists; ExtraBold covers 800–900. */
@font-face{font-family:Doran;src:url(assets/fonts/Doran-Regular.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Doran;src:url(assets/fonts/Doran-Medium.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:Doran;src:url(assets/fonts/Doran-Bold.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:Doran;src:url(assets/fonts/Doran-ExtraBold.woff2) format("woff2");font-weight:800 900;font-style:normal;font-display:swap}

:root{
  --green:#67a435;      --green-d:#5b922d;   --green-dd:#4b7827;
  --ring:#8cc85b;       --pale:#e9f0e3;
  --gold:#f1b709;       --gold-d:#dca908;    --gold-dd:#a87a00;
  --gold-pale:#fcf0c8;
  --ink:#111;           --ink2:#252525;      --body:#686868;
  --muted:#8e8e8e;      --line:#e8e8e8;
  --card-t:#fcfcfc;     --card-b:#eaf1e4;
  --dark:#2b2b2b;
  --cw:1328px;          /* content container            */
  --hw:1366px;          /* header container             */
  --hh:102px;           /* header height                */
  --hh-c:64px;          /* header height once condensed */
  --r-sm:8px; --r-md:12px; --r-card:16px; --r-lg:24px;
  /* one hover language for every product card and its buttons */
  --btn-lift:-2px;   --lit-sh:0 9px 20px rgba(91,146,45,.34);
  --card-lift:-4px;  --card-sh:0 18px 38px rgba(40,60,20,.13);
  --font-body:IRANYekanX,"Segoe UI",Tahoma,sans-serif;   /* body, UI, prices */
  --font-head:Doran,var(--font-body);                    /* section + block headings */
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;overflow-x:clip;
     scroll-padding-top:calc(var(--hh-c) + 14px)}
body{
  margin:0;background:#fff;color:var(--body);
  font:400 16px/1.9 var(--font-body);
  overflow-x:clip;
}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
button,input{font:inherit;color:inherit}
button{background:none;border:0;cursor:pointer;padding:0}
ul{list-style:none;margin:0;padding:0}
h1,h2,h3,p{margin:0}

/* Section headings are set in Doran; everything else inherits IRANYekanX from
   `body`.  Split measured against the design export by glyph-overlap (IoU):
   .sec__h 90%, .new__title 92% Doran vs ~55% Yekan — every Doran weight beat
   every Yekan weight.  Footer/card headings, stat figures, nav, prices and the
   category labels all measured Yekan, so they are deliberately NOT listed here.
   .plate__title is kashida-stretched in the export and could not be measured;
   it is grouped with the section headings by role. */
.sec__h,.plate__title,.new__title{
  font-family:var(--font-head);
}
:focus-visible{outline:2px solid var(--green);outline-offset:2px;border-radius:4px}

.ic{width:1em;height:1em;fill:none;stroke:currentColor;stroke-width:1.7;
    stroke-linecap:round;stroke-linejoin:round;flex:none}

/* ───────────────────────── header ─────────────────────────
   The header sticks at every width.  Its *flow* box stays --hh tall at all
   times — only the painted bar (::before) and the inner row collapse to --hh-c
   when .is-stuck lands.  Shrinking .hdr itself would shorten the document and
   jerk the whole page up by the difference the instant it condensed. */
.hdr{position:sticky;top:0;z-index:40;height:var(--hh)}
/* the white bar, full-bleed.  z-index:-1 keeps it under .hdr__in inside the
   header's own stacking context, while still over everything the header covers */
.hdr::before{
  content:"";position:absolute;top:0;inset-inline:0;z-index:-1;height:var(--hh);
  background:#fff;pointer-events:none;
  transition:height .28s ease,box-shadow .28s ease;
}
.hdr__in{
  width:min(var(--hw),100% - 48px);margin-inline:auto;height:var(--hh);
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  transition:height .28s ease;
}
.hdr__start{display:flex;align-items:center;gap:38px;min-width:0}
.hdr__end{display:flex;align-items:center;gap:15px;margin-inline-end:20px}

.catbtn{
  display:flex;align-items:center;gap:8px;
  height:42px;padding:0 8px 0 6px;border:1px solid #e4efda;border-radius:var(--r-md);
  font-size:15.3px;font-weight:700;color:#2f2f2f;background:#fff;
}
.catbtn .ic-bars{width:19px;height:19px;stroke-width:2.4}
.catbtn .ic-chev{width:15px;height:15px;stroke-width:2;color:#8f8f8f;margin-inline-start:2px}
.catbtn:hover{background:#fafdf7}

.nav{display:flex;align-items:center;gap:30px}
.nav__a{font-size:15.1px;font-weight:500;color:#a2a2a2;padding:4px 2px;transition:color .18s}
.nav__a.is-active{color:#333;font-weight:700}
.nav__a:hover{color:#333}

.brand{position:absolute;left:50%;translate:calc(-50% + 1px) 0;top:0;height:var(--hh);
  display:flex;align-items:center;justify-content:center;z-index:2;
  transition:height .28s ease}
.brand__arch{
  position:absolute;top:var(--hh);left:50%;translate:-50% 0;
  width:180px;aspect-ratio:3.0177;background:#fff;
  clip-path:url(#sh-arch);pointer-events:none;
  transition:opacity .2s ease;
}
/* logo-ink-dark is 136x94 with the glyphs inset (x 5.18-133.81, y 2.35-92.46), so the
   width and margins are retuned to land the ink on the design's 134.3x94.3 box */
.brand__img{width:142px;height:auto;position:relative;z-index:1;margin-top:38.5px;
  margin-inline-start:11.2px;
  transition:width .28s ease,margin-top .28s ease,margin-inline-start .28s ease}

.iconbtn{position:relative;display:inline-flex;color:#141414}
.iconbtn .ic{width:25px;height:25px;stroke-width:1.55}
.badge{
  position:absolute;top:-2px;inset-inline-start:-9px;
  width:15px;height:15px;border-radius:50%;background:var(--green);
  color:#fff;font-size:9px;font-weight:700;line-height:15px;text-align:center;
}
.iconbtn:first-child .badge{background:var(--gold)}
.hdr__sep{width:1px;height:20px;background:#dcdcdc}
.hdr__acct{
  display:flex;align-items:center;gap:10px;
  height:47px;padding:0 13px;border-radius:10px;background:var(--dark);color:#fff;
  box-shadow:0 7px 15px rgba(0,0,0,.10);
  font-size:19px;font-weight:700;transition:background .2s;
}
.hdr__acct .ic{width:20px;height:20px}
.hdr__acct:hover{background:#1c1c1c}

/* ── condensed state ──
   Only where the header is tall enough to be worth reclaiming: --hh is already
   76px at 820 and 62px at 680, so those tiers stay sticky at full height.
   The arch goes, exactly as it does on mobile — a white arch dragged down the
   page would blot the green bands. */
@media (min-width:821px){
  .hdr.is-stuck::before{
    height:var(--hh-c);pointer-events:auto;
    box-shadow:0 1px 0 #f0f0f0,0 6px 18px rgba(0,0,0,.05);
  }
  .hdr.is-stuck .hdr__in{height:var(--hh-c)}
  /* what is left of .hdr below the bar is transparent, so it must not eat the
     clicks meant for the content showing through it */
  .hdr.is-stuck{pointer-events:none}
  .hdr.is-stuck .hdr__in{pointer-events:auto}
  .hdr.is-stuck .brand{height:var(--hh-c)}
  /* 142 -> 72px; the 11.2px ink-centring offset is scaled by the same 0.507 */
  .hdr.is-stuck .brand__img{width:72px;margin-top:0;margin-inline-start:5.7px}
  .hdr.is-stuck .brand__arch{opacity:0}
}

/* ───────────────────────── hero ───────────────────────── */
.hero{position:relative;height:516px}
/* the design's own hero backdrop: an 846x521 lattice carrying its own vignette,
   laid at 1:1 design scale over the flat green, so the outer thirds stay plain */
.hero__bg{position:absolute;inset:0;background:var(--green)
  url(assets/images/patern-bck-hero.png) center/846px 521px no-repeat;overflow:hidden}
.hero__body{position:relative;z-index:6;width:min(var(--cw),100% - 48px);margin-inline:auto;
  padding-top:71px;padding-inline-start:53px;text-align:center}
/* Hero lockup — live type in Doran, replacing the former hero-title.png.
   Every size derives from --lockw, so the whole lockup scales from one value. */
.hero__title{
  --lockw:380px;
  position:relative;width:var(--lockw);height:calc(var(--lockw) * 132 / 380);
  margin-inline:auto;transform:translateX(-7.5px);
  font-family:var(--font-head);font-weight:800;font-size:calc(var(--lockw) / 38);
  line-height:1;direction:rtl;text-align:center;
}
.lock__kick{position:relative;display:inline-block;line-height:1;z-index:3}
.lock__band{position:absolute;z-index:0;left:2%;right:2%;top:45%;bottom:11%;background:#e0a800}
.lock__kt{position:relative;z-index:2;display:inline-block;font-size:3.15em;color:#fff;
  -webkit-text-stroke:.19em #e2882c;paint-order:stroke fill}
.lock__word{display:block;font-size:9em;color:#fff;position:relative;z-index:2;margin-top:-.02em}
.hero__sub{margin-top:8px;font-size:15.25px;font-weight:500;line-height:19px;
  color:rgba(255,255,255,.94)}

.search{
  position:relative;margin:14px auto 0;width:482px;height:48px;background:#fff;
  border-radius:var(--r-card);display:flex;align-items:center;gap:11px;padding-inline:15px 7px;
}
.search__ic{width:22px;height:22px;color:#171717;stroke-width:1.9}
.search__in{flex:1;min-width:0;border:0;background:none;font-size:15px;font-weight:500;color:#2b2b2b}
.search__in::placeholder{color:#8d8d8d}
.search__in::-webkit-search-cancel-button{display:none}
.search__btn{flex:none;height:33px;padding:0 17px;border-radius:8px;background:var(--gold);white-space:nowrap;
  color:#fff;font-size:14px;font-weight:700;transition:background .2s}
.search__btn:hover{background:var(--gold-d)}

/* white arc closing the hero (fitted to the design: quadratic, 94px rise) */
.hero__curve{position:absolute;left:0;bottom:0;width:100%;height:94px;z-index:3;display:block}

/* ── shield category row (rides the arc) ── */
.shields{
  position:absolute;z-index:4;top:338px;left:50%;translate:calc(-50% - 3.5px) 0;
  width:min(var(--cw),100% - 40px);
  display:flex;align-items:flex-start;justify-content:space-between;
}
.shield{width:141px;text-align:center;position:relative;
  /* the asset's shadow; on the parent because clip-path would cut it off the button */
  filter:drop-shadow(0 4px 26px rgba(0,0,0,.1))}
.shield__f{position:relative;display:block;width:141px;height:161px;border:0;padding:0;
  cursor:pointer;
  background:var(--ring);clip-path:url(#sh-hex);transition:background .2s}
/* inner face: its own traced outline, inset so the ring reads 3px at the waist / 4.6px at the tips */
.shield__f::before{content:"";position:absolute;inset:4.6px 3px;background:#fff;clip-path:url(#sh-hex-in)}
.shield__c{position:relative;z-index:1;height:100%;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:1px;padding:16px 10px 14px}
.shield__img{width:84px;height:72px;object-fit:contain}
.shield__t{font-size:12.5px;font-weight:700;color:#141414;line-height:1.5}
.shield__b{display:inline-block;margin-top:2px;padding:0 9px;border-radius:5px;
  background:var(--gold);color:#fff;font-size:9.5px;font-weight:700;line-height:17px;
  display:none}
/* the gold face + "مشاهده" is the hover/focus affordance, not a selected state */
.shield__f:hover,.shield__f:focus-visible{background:var(--gold)}
.shield__f:hover .shield__b,.shield__f:focus-visible .shield__b{display:inline-block}

/* ───────────────── shared section furniture ───────────────── */
.sec{position:relative;width:min(var(--cw),100% - 48px);margin-inline:auto}
.sec__h{position:relative;font-size:25.8px;font-weight:800;color:var(--ink);line-height:1.35}
.swash{
  display:block;width:79px;height:13px;margin-top:7px;margin-inline-end:auto;margin-inline-start:0;
  background:radial-gradient(120% 190% at 50% 175%,transparent 56%,var(--gold) 57%,var(--gold) 70%,transparent 71%);
}

/* trapezoid plate header */
.plate{position:relative;text-align:center;padding-top:12px}
.plate__fleur{position:absolute;top:-1px;left:50%;translate:calc(-50% + 4px) 0;width:424px;opacity:1}
.plate__box{
  position:relative;margin-inline:auto;width:641px;min-height:127px;
  padding:19px 40px 0 36px;
  background:linear-gradient(180deg,#f7f7f7 0%,#fafafa 48%,rgba(255,255,255,0) 92%);
  clip-path:polygon(16.9% 0,83.1% 0,100% 100%,0 100%);
}
.plate__title{
  position:relative;display:flex;align-items:center;justify-content:center;gap:5px;
  font-size:33px;font-weight:800;color:var(--ink);line-height:1.08;white-space:nowrap;
}
.plate__leaf{width:79px;opacity:.9;margin-top:2px;margin-inline:16px}
.plate__leaf--l{scale:-1 1}
.g-grad{
  padding:2px 4px;
  background:linear-gradient(90deg,var(--gold) 0%,var(--gold) 26%,var(--green) 78%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.plate__sub{margin-top:16px;font-size:15.3px;font-weight:500;color:#6d6d6d;line-height:21.5px}
.plate__sub--green{color:var(--green);font-weight:600;font-size:13.9px;margin-top:2px;
  transform:translateX(8px)}

.count{display:flex;align-items:center;justify-content:center;gap:7px;margin-top:5px;line-height:1;
  transform:translateX(8px)}
.count i{font-style:normal;color:#b6b6b6;font-size:15px}
.count__b{
  width:39px;height:39px;display:grid;place-items:center;border-radius:var(--r-sm);
  border:1px solid #e7e7e7;background:#fff;color:#3a3a3a;font-size:15px;font-weight:700;
}
.count__b--on{background:var(--green);border-color:var(--green);color:#fff}

/* ───────────────── best-seller product row ───────────────── */
.sec--best{padding-top:41px}
.prow-wrap{margin-top:30px;margin-inline-start:-24.5px}
.prow-wrap .car__vp{cursor:grab}
.prow-wrap.is-drag .car__vp{cursor:grabbing}
.prow{display:flex;align-items:stretch}
.pcard{
  position:relative;flex:0 0 338.5px;width:338.5px;padding:31px 24px 29px;
  background:#fff;text-align:center;transition:background .25s;
}
.pcard:nth-child(even){background:linear-gradient(180deg,#fff 0%,#fbfbfb 18%,#f4f4f4 43%,
  #f0f0f0 57%,#f5f5f5 80%,#fdfdfd 97%,#fff 100%)}
.pcard:hover{background:linear-gradient(180deg,#fbfdf9 0%,#eef4e9 60%,#fbfdf9 100%)}
.pcard__media{position:relative;height:189px;display:flex;align-items:flex-start;justify-content:center}
.pcard__wm{position:absolute;top:88px;left:50%;translate:-50% -50%;width:207px;opacity:1}
.pcard__img{position:relative;max-height:170px;width:auto;object-fit:contain;margin-top:-2px}
.pcard__t{margin-top:3px;font-size:17.8px;font-weight:700;color:#141414;line-height:1.3}
.disc{
  position:absolute;top:0;inset-inline-start:0;inset-inline-end:auto;z-index:3;width:44px;height:44px;
  display:grid;place-content:center;gap:0;text-align:center;color:#fff;
  background:var(--gold);
  clip-path:polygon(50% 0,61% 7%,74% 4%,81% 15%,94% 17%,96% 30%,106% 39%,100% 50%,106% 61%,96% 70%,94% 83%,81% 85%,74% 96%,61% 93%,50% 100%,39% 93%,26% 96%,19% 85%,6% 83%,4% 70%,-6% 61%,0 50%,-6% 39%,4% 30%,6% 17%,19% 15%,26% 4%,39% 7%);
}
.disc b{font-size:12px;font-weight:800;line-height:1.1}
.disc i{font-style:normal;font-size:7.5px;font-weight:600;line-height:1.1}

.price{display:flex;align-items:center;justify-content:center;gap:6px;direction:rtl;margin-top:26px}
.price--old{margin-top:3px}
.price__lbl{font-size:8px;font-weight:500;color:#9b9b9b}
.price__v{font-size:18.6px;font-weight:700;color:var(--green);letter-spacing:0;line-height:1}
.price--old .price__v{font-size:16px;color:#c9c9c9;text-decoration:line-through;
  text-decoration-color:#9c9c9c;text-decoration-thickness:1.1px}
.price--old .toman{opacity:.42}
.toman{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;
  line-height:1.1;color:var(--green)}
.toman b{font-size:8px;font-weight:600}

.acts{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:11px}
/* The heart is a toggle, so its two faces have to read apart at a glance:
   off is the cart button's pale-tile language in gold with an outlined heart,
   on is the design's solid gold tile with the heart filled (.fav.is-on below).
   The heart always comes first in .acts, so it sits on the card's right. */
.fav{
  width:46px;height:46px;display:grid;place-items:center;border-radius:var(--r-sm);
  background:var(--gold-pale);color:var(--gold-dd);transition:.2s;
}
.fav .ic{width:20px;height:20px}
.fav .ic-f{stroke-width:2}
.fav:hover,.fav:focus-visible{background:#f9e6a6;transform:translateY(var(--btn-lift))}
.fav:active{transform:translateY(0)}
/* The export draws one card per row with a solid-green cart button.  That is
   the button's hover face, not a per-product state, so it lives here in :hover
   and no card ships pre-lit -- see actions() in app.js.  The icon-only
   .ncard__cart rides the same rule so the new-products block matches. */
.atc{
  display:flex;align-items:center;gap:10px;
  height:46px;padding:0 19px;border-radius:var(--r-sm);
  background:var(--pale);color:var(--green);font-size:10.3px;font-weight:600;transition:.2s;
}
.atc .ic{width:19px;height:19px}
.atc:hover,.atc:focus-visible,
.ncard__cart:hover,.ncard__cart:focus-visible{
  background:var(--green-d);color:#fff;
  transform:translateY(var(--btn-lift));box-shadow:var(--lit-sh);
}
.atc:active,.ncard__cart:active{transform:translateY(0);box-shadow:0 3px 10px rgba(91,146,45,.34)}

/* ───────────────────────── about ───────────────────────── */
/* The cartouche is the design's own export (sec-about-shape/Vector (2).svg):
   460x289 natural, drawn at 481x302, with Vector (1).svg as its outline echo
   at 1.2435x.  --blob-over is how far it tucks under the copy column.  */
.sec--about{--blob-w:481px;--blob-over:10px;--ring-k:1.2435;
  margin-top:123px;padding-block:0}
/* the mandala watermark bleeds off both page edges; the art is the left-edge
   half, so the right edge mirrors it.  The supplied Group 37183.svg is a
   different, hollow variant of this ornament, so the extracted art is kept. */
.about__orn{position:absolute;width:112px;pointer-events:none;user-select:none;
  filter:brightness(0)}   /* art is baked at alpha .078; black + that alpha == the design's 235 */
.about__orn--l{left:calc(50% - 720px);top:48px}
.about__orn--r{right:calc(50% - 720px);top:33px;scale:-1 1}
.about__in{display:grid;grid-template-columns:441px minmax(0,1fr) 340px;align-items:center;
  min-height:362px;gap:0}
.about__copy{position:relative;padding-inline-start:26px}
.about__arrow{position:absolute;top:-93px;inset-inline-end:70px;width:70px;opacity:.85}
.dots{display:block;width:66px;height:38px;
  background-image:radial-gradient(currentColor 42%,transparent 43%);
  background-size:13.6px 13.6px;color:#dcdcdc;opacity:.9}
.dots--about{position:absolute;top:-31px;inset-inline-start:13px;width:68px;height:27px;
  color:#dcdcdc}
.dots--about2{position:absolute;bottom:-32px;left:calc(50% - 361px);
  width:28px;height:68px;color:#dedede}
/* About lockup -- live type in Doran, replacing the former about-title.png.
   The export letters it with kashida, which no cut of Doran can reproduce, so
   the plain glyphs are set at the export's own letter height rather than
   stretched to its line width -- the same trade `پرفروش هفته` already makes.
   Both sizes derive from --aw, and the box keeps the image's 415x130 so the
   paragraph below it does not move. */
.about__title{
  --aw:415px;
  width:var(--aw);max-width:100%;height:calc(var(--aw) * 130 / 415);
  margin-inline-start:auto;
  /* padding, gap and the swash's margin are not eyeballed: they put each
     line's *ink* where the export puts it -- kick top 6.9, word top 45,
     arc top 120.5 of the 130 -- given how far Doran's ink sits above its
     line box at line-height 1. */
  padding-top:calc(var(--aw) * 12 / 415);
  padding-inline-start:calc(var(--aw) * 6 / 415);
  display:flex;flex-direction:column;align-items:flex-start;
  gap:calc(var(--aw) * 15 / 415);
  font-family:var(--font-head);font-weight:800;line-height:1;
}
.about__title > *{flex:none}   /* the box has a fixed height; nothing may squeeze */
.about__kick{font-size:calc(var(--aw) / 17.3);color:var(--ink)}
.about__word{font-size:calc(var(--aw) / 8.83);color:var(--green)}
/* The gold arc the export bakes into the lockup: the same ornament as .swash
   under a section heading, but measured off this export instead -- 167x9.4 at
   415, 5.4 thick in the middle, rising 4 from the ends.  That works out to an
   outer ellipse of 191x40 centred 40 below the box top, which is what the
   radii and stops below spell out. */
.swash--about{
  width:calc(var(--aw) * 167 / 415);height:calc(var(--aw) * 10 / 415);
  flex:none;margin-top:calc(var(--aw) * 7 / 415);margin-inline-end:0;
  background:radial-gradient(120% 420% at 50% 400%,
    transparent 82%,var(--gold) 82.5%,var(--gold) 95.2%,transparent 95.7%);
}
.about__text{width:401px;margin:-4px 0 0 auto;margin-inline-start:8px;font-size:18.6px;
  line-height:26.6px;color:#6b6b6b;text-align:justify}

/* the card hangs off the inline-start edge of its column, tucking --blob-over
   under the copy exactly as the design does; below 1440 it gives up width
   rather than eating into the paragraph.  isolation keeps the ring's z-index
   local to the card. */
.slider{position:relative;display:flex;justify-content:flex-start;align-items:center;
  padding-inline:0}
.slider__blob{
  position:relative;width:min(var(--blob-w),100%);max-width:none;flex:none;
  aspect-ratio:460/289;isolation:isolate;
  margin-inline-start:calc(0px - var(--blob-over));
  background:url("assets/images/sec-about-shape/Vector (2).svg") center/100% 100% no-repeat;
}
/* the ornamental lattice, masked to the cartouche so it stops at the scallops */
.slider__blob::before{content:"";position:absolute;inset:0;z-index:0;opacity:.07;
  background:url(assets/images/about-lattice.png) 0 0/40px 80px repeat;
  -webkit-mask:url("assets/images/sec-about-shape/Vector (2).svg") center/100% 100% no-repeat;
          mask:url("assets/images/sec-about-shape/Vector (2).svg") center/100% 100% no-repeat}
/* the outline echo behind the card - not quite concentric in the design:
   a scale/offset fit against the export puts it 16px left and 2px down */
.slider__ring{position:absolute;left:calc(50% - 16px);top:calc(50% + 2px);z-index:-1;
  pointer-events:none;
  width:calc(100% * var(--ring-k));aspect-ratio:572/360;translate:-50% -50%;
  background:url("assets/images/sec-about-shape/Vector (1).svg") center/100% 100% no-repeat}
.slider .car__vp{position:absolute;left:0;right:0;bottom:0;top:-64px;z-index:1;cursor:grab;
  clip-path:inset(0px)}
.slider.is-drag .car__vp{cursor:grabbing}
.slider .car__track{display:flex;height:100%}
.slide{flex:0 0 100%;position:relative;height:100%}
.slider__img{position:absolute;bottom:103px;left:calc(50% + 3px);translate:-50% 0;width:360px;
  max-width:none;filter:drop-shadow(0 20px 26px rgba(0,0,0,.2))}
.slider__cap{position:absolute;bottom:62px;left:50%;translate:-50% 0;
  font-size:20.3px;font-weight:700;color:#fff;line-height:1.3;white-space:nowrap}
.slider__dots{position:absolute;bottom:47px;left:50%;translate:-50% 0;z-index:2;
  display:flex;gap:8px;direction:ltr}
.slider__dots button{width:32px;height:3px;padding:0;border:0;border-radius:2px;
  background:rgba(255,255,255,.5);transition:background .2s}
.slider__dots button.is-on{background:#fff}
.slider__dots button:hover{background:rgba(255,255,255,.8)}
.slider__nav{
  position:absolute;top:50%;translate:0 -50%;width:52px;height:52px;border-radius:50%;
  background:rgba(255,255,255,.2);color:#fff;display:grid;place-items:center;transition:.2s;z-index:3;
}
.slider__nav:disabled{opacity:.35;cursor:default}
.slider__nav .ic{width:21px;height:21px;stroke-width:2}
.slider__nav:hover{background:rgba(255,255,255,.34)}
.slider__nav--prev{inset-inline-end:37px}
.slider__nav--next{inset-inline-start:40px}

.stats{display:flex;flex-direction:column;gap:32px;align-items:flex-start;
  padding-inline-start:11px}
.stat{display:flex;align-items:center;gap:0;direction:rtl}
.stat__plus{width:17px;height:17px;flex:none;margin-inline-end:13px;
  background:var(--green);
  clip-path:polygon(38% 0,62% 0,62% 38%,100% 38%,100% 62%,62% 62%,62% 100%,38% 100%,38% 62%,0 62%,0 38%,38% 38%)}
.stat__n{font-size:28.5px;font-weight:800;color:#141414;white-space:nowrap;line-height:1.3;
  margin-inline-end:9px}
.stat__d{width:146px;font-size:13px;font-weight:500;line-height:1.72;color:#8b8b8b;
  text-align:right}

/* ─────────────────── daily slaughter ─────────────────── */
.sec--slaughter{margin-top:113px}
.animals{display:flex;justify-content:center;gap:89px;margin-top:36px;padding-inline-end:16px}
.animal{width:144px;text-align:center;font-family:var(--font-head)}
.animal__f{position:relative;display:block;width:144px;height:159px;
  background:var(--a-in);clip-path:url(#sh-quatre);transition:filter .2s}
.animal__f::before{content:"";position:absolute;inset:15px;background:var(--a-out);
  clip-path:url(#sh-quatre)}
.animal__f::after{content:"";position:absolute;inset:17px;background:var(--a-in);
  clip-path:url(#sh-quatre)}
.animal__img{position:absolute;top:37px;left:50%;translate:-50% 0;z-index:1;
  width:auto;height:86px;max-width:none}
.animal__t{display:block;margin-top:3px;font-size:15.5px;font-weight:700;color:#141414;
  line-height:1.3}
.animal__s{display:block;margin-top:4px;font-size:12.6px;font-weight:500;color:#9a9a9a;
  line-height:1.3}
.animal:hover .animal__f{filter:brightness(.97)}
.dots--slaughter{position:absolute;inset-inline-start:-30px;bottom:-34px;width:28px;height:66px;
  background-size:13.6px 13.6px;color:#e2e2e2}

/* ───────────────────── new products ───────────────────── */
.sec--new{position:relative;margin-top:112px;padding:42px 0 37px;
  background:var(--green)}
.sec--new::before{content:"";position:absolute;inset:0;
  background:url(assets/images/pattern-green.png) center/540px auto repeat;
  opacity:.67;filter:brightness(1.07)}
.new__notch{position:absolute;top:0;left:50%;translate:-50% 0;width:90px;aspect-ratio:3.0177;
  background:#fff;clip-path:url(#sh-arch);z-index:3}
.new__leaf{position:absolute;top:-56px;inset-inline-start:0;width:auto;height:261px;z-index:2}
.new__leaf2{position:absolute;bottom:-36px;inset-inline-end:0;width:auto;height:200px;z-index:2}
.new__in{position:relative;z-index:4;width:min(var(--cw),100% - 48px);margin-inline:auto;
  text-align:center}
.new__title{font-size:25.9px;font-weight:800;color:#fff;line-height:1.3}
.new__sub{margin-top:8px;font-size:15.8px;font-weight:500;color:rgba(255,255,255,.86);
  line-height:1.4}
.new__grid{margin-top:-27px;display:grid;grid-template-columns:320px 798px;gap:0 61px;
  justify-content:center;align-items:start;padding-inline-end:32px;position:relative}
.new__cars{grid-area:1/2;margin-top:36px;padding-bottom:11px}
.new__cars .car__vp{height:420px}
.new__cars .car__track{display:flex;flex-direction:column;gap:30px}
.ncards__page{flex:0 0 420px;display:grid;grid-template-columns:385px 385px;gap:30px 28px}
.bigcard{grid-area:1/1}

.ncard{position:relative;width:385px;height:195px}
.ncard__shape{
  position:relative;width:385px;height:195px;background:#fff;clip-path:url(#sh-card);
  padding:46px 157px 20px 30px;display:flex;flex-direction:column;text-align:right;
}
.ncard__t{font-size:15.4px;font-weight:700;color:#141414;line-height:1.78}
.ncard__row{display:flex;align-items:center;gap:21px;margin-top:11px;justify-content:flex-start}
.ncard__cart{width:46px;height:46px;flex:none;display:grid;place-items:center;
  border-radius:var(--r-sm);background:var(--pale);color:var(--green);transition:.2s}
.ncard__cart .ic{width:21px;height:21px}
.ncard .price{margin-top:0}
.ncard .price__v{font-size:16px}
.ncard__img{position:absolute;inset-inline-start:45px;top:47px;width:85px;
  max-width:none;max-height:130px;object-fit:contain;z-index:2;filter:drop-shadow(0 10px 14px rgba(0,0,0,.18))}
.ncard .disc{top:-2px;inset-inline-start:58px;inset-inline-end:auto;width:36px;height:36px;z-index:5}
.ncard .disc b{font-size:10.5px}
.ncard .disc i{font-size:6.5px}

.bigcard{position:relative;width:320px}
.bigcard__shape{
  position:relative;width:320px;aspect-ratio:320/455;background:#fff;clip-path:url(#sh-bigcard);
  padding:56px 24px 30px;text-align:center;display:flex;flex-direction:column;align-items:center;
}
.bigcard__img{width:171px;max-width:none;margin-inline-end:20px;
  height:auto;aspect-ratio:171/143;object-fit:contain}   /* the design's box, whatever the photo's shape */
.bigcard__t{margin-top:54px;font-size:16px;font-weight:700;color:#141414;line-height:1.78}
.bigcard .price{margin-top:13px}
.bigcard .acts{margin-top:16px;gap:11px}
.bigcard .atc{height:42px;padding:0 14px}
.bigcard .fav{width:42px;height:42px}
.bigcard .disc{top:56px;inset-inline-start:13px;inset-inline-end:auto;width:40px;height:40px;z-index:5}
.bigcard .disc b{font-size:11px}
.bigcard .disc i{font-size:6.5px}
.new__scroll{position:absolute;inset-inline-start:42px;top:150px;width:4px;height:180px;
  background:repeating-linear-gradient(#ffffff4d 0 9px,transparent 9px 17px);z-index:5;
  border:0;padding:0;cursor:pointer}
.new__scroll i{position:absolute;inset-inline:0;display:block;height:34px;background:#fff;
  border-radius:2px;transition:top .35s cubic-bezier(.4,0,.2,1)}

/* ── new-products slider nav ──────────────────────────────────────────────
   Same control as the special band, re-themed for the green field: the band
   sits on white so its buttons are green, this one sits on green so they are
   white with a gold hover, the accent the section already uses on its badges.
   The track runs vertically here and flips horizontal on phones, so one
   chevron is rotated per axis rather than shipping four icons -- and the pair
   moves from the slider's edge to a centred row under the pager, where a
   thumb can reach it. */
.nbtn{position:absolute;z-index:7;width:46px;height:46px;border-radius:50%;
  display:grid;place-items:center;color:var(--green-d);background:#fff;
  box-shadow:0 10px 24px rgba(22,52,8,.30);
  transition:background .22s,color .22s,scale .22s,box-shadow .22s,opacity .22s}
.nbtn .ic{width:21px;height:21px;stroke-width:2.35;transition:rotate .3s}
.nbtn:hover:not(:disabled){background:var(--gold);color:#fff;scale:1.07;
  box-shadow:0 12px 26px rgba(22,52,8,.38)}
.nbtn:active:not(:disabled){scale:.95}
.nbtn:focus-visible{outline:3px solid #fff;outline-offset:3px}
.nbtn:disabled{opacity:.42;box-shadow:0 4px 10px rgba(22,52,8,.18)}
/* the chevron points along the axis it scrolls: up/down while the track is
   vertical, and in RTL "next" is leftwards once it lies down */
.car--y .nbtn--prev .ic{rotate:-90deg}
.car--y .nbtn--next .ic{rotate:90deg}
.new__cars:not(.car--y) .nbtn--next .ic{rotate:180deg}
/* centred pair on the outer edge of the cards column: the gutter left of it is
   only ~42px at 1280, so the buttons straddle the edge instead of clearing it,
   landing on the scalloped card's empty inline-end padding */
.new__cars .nbtn{inset-inline-end:-23px}
.new__cars .nbtn--prev{top:calc(50% - 53px)}
.new__cars .nbtn--next{top:calc(50% + 7px)}
.new__cars:focus-visible{outline-color:#fff}

/* ─────────────────── special products ─────────────────── */
.sec--special{margin-top:125px;width:100%;max-width:none}
.special__in{position:relative;width:min(var(--cw),100% - 48px);margin-inline:auto}
.special__head{display:flex;justify-content:flex-start;padding-inline-start:15px}
.special__band{
  position:relative;margin-top:9px;height:251px;
  display:grid;grid-template-columns:294px minmax(0,1fr);align-items:start;
  --gut:calc((100vw - min(var(--cw),100vw - 48px))/2);   /* container side gutter */
  --bandw:calc(var(--gut) + min(var(--cw),100vw - 48px) - 2px);
}
/* One shape, straight from the export: `Rectangle 7468.png` carries the gradient, the
   notch that pinches the band where the organic card starts, and the rounded end — so it
   is both the fill and the mask, which is what clips the `linear` line overlay to it. */
.special__band::before{
  content:"";position:absolute;z-index:0;top:0;bottom:0;
  inset-inline-start:2px;
  inset-inline-end:calc(0px - var(--gut));
  background:
    url("assets/images/special-shapes/linear (1).svg") 0 0/100% 100% no-repeat,
    url("assets/images/special-shapes/Rectangle 7468.png") 0 0/100% 100% no-repeat;
  -webkit-mask:url("assets/images/special-shapes/Rectangle 7468.png") 0 0/100% 100% no-repeat;
          mask:url("assets/images/special-shapes/Rectangle 7468.png") 0 0/100% 100% no-repeat;
}
.special__cards{grid-area:1/2;position:relative;z-index:2;
  padding-inline:1px 0;margin-inline:-32px -8px;transform:translateY(-97px)}
.special__cards .car__track{display:flex;gap:11px;align-items:stretch}
.scard{
  position:relative;flex:0 0 calc((100% - 33px)/4);min-width:0;background:#fff;
  border-radius:130px 130px 16px 16px;
  padding:24px 16px 20px;text-align:center;box-shadow:0 14px 30px rgba(0,0,0,.08);
}
.scard__media{position:relative;height:120px;display:flex;align-items:flex-start;
  justify-content:center}
.scard__img{max-height:118px;width:auto}
.scard__t{margin-top:14px;font-size:17.8px;font-weight:700;color:#141414}
.scard .price{margin-top:14px}
.scard .price__v{font-size:17.5px}
.scard .acts{margin-top:14px;gap:9px}
.scard .fav{width:40px;height:40px}
.scard .atc{height:40px;padding:0 13px;gap:8px}
.scard .disc{top:2px;inset-inline-end:12px;inset-inline-start:auto;width:38px;height:38px}
.scard .disc b{font-size:10.5px}
.scard .disc i{font-size:6.5px}

.orgcard{
  position:relative;z-index:1;grid-area:1/1;height:249px;margin:6px 2px 0 0;
  padding:22px 26px 0;text-align:right;
}
/* the divider sits just inside the notch, so it is measured off the band, not the card */
.orgcard__dash{position:absolute;inset-inline-start:calc(var(--bandw) * .1715);
  top:13px;bottom:23px;width:1px;
  background:repeating-linear-gradient(#ffffff9c 0 6px,transparent 6px 13px)}
.orgcard__t{font-size:21px;font-weight:800;color:#fffbe0;line-height:1.5}
.orgcard__s{font-size:14.5px;font-weight:600;color:rgba(255,255,255,.94);line-height:1.5}
.orgcard__img{position:absolute;bottom:-21px;inset-inline-start:0;width:229px;max-width:none}

.sbtn{position:absolute;z-index:6;inset-inline-start:auto;
  inset-inline-end:calc(0px - ((100vw - min(var(--cw),100vw - 48px))/2) + 20px);
  width:52px;height:52px;border-radius:50%;background:#8aab55;color:#fff;
  display:grid;place-items:center;transition:.2s}
.sbtn .ic{width:22px;height:22px;stroke-width:2.1}
.sbtn:hover{background:#789a44}
.sbtn--prev{top:22px}
.sbtn--next{top:92px;background:#93b163}

/* ───────────────────── promo banners ───────────────────── */
/* Each banner is one flat export: the 408×137 card sits inside a taller canvas
   because the product art breaks out of it. --cx/--cy locate the card in that
   canvas, so the three cards line up on the row while the art still spills. */
.sec--promos{margin-top:55px}
.promos{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.promo{position:relative;aspect-ratio:408/137;border-radius:8px}
.promo--pink{--iw:409;--ih:158;--cx:1;--cy:16;background:#fbcdc9}
.promo--yellow{--iw:417;--ih:205;--cx:8;--cy:37;background:#efd787}
.promo--mauve{--iw:421;--ih:146;--cx:12;--cy:8;background:#eddbd3}
.promo__link{position:absolute;inset:0;border-radius:inherit}
.promo__img{position:absolute;max-width:none;
  width:calc(var(--iw) * 100% / 408);
  left:calc(var(--cx) * -100% / 408);
  top:calc(var(--cy) * -100% / 137)}

/* ─────────────────── category icon row ─────────────────── */
.sec--cats{margin-top:81px}
.cats{display:flex;justify-content:center;gap:64px;padding-inline-end:24px}
.cat{width:159px;text-align:center}
.cat__f{position:relative;height:141px;display:flex;align-items:flex-start;justify-content:center}
.cat__f::after{
  content:"";position:absolute;bottom:0;left:50%;translate:-50% 0;width:159px;height:159px;
  border:11px solid #d9d9d9;border-radius:50%;clip-path:inset(50% 0 0 0);transition:border-color .2s;
}
.cat:hover .cat__f::after{border-color:var(--green)}
.cat__img{position:relative;z-index:1;height:109px;width:auto;max-width:none;margin-top:0}
.cat__t{margin-top:21px;font-size:17.8px;font-weight:700;color:#141414;line-height:1.2}

/* ───────────────────────── blog ───────────────────────── */
.sec--blog{margin-top:111px}
.blog__head{display:flex;align-items:flex-start;justify-content:space-between;
  padding-inline-start:7px}
.allbtn{display:inline-flex;align-items:center;gap:18px;height:46px;padding:0 26px;
  border-radius:var(--r-md);background:#eeeeee;color:#585858;font-size:15px;font-weight:600;
  transition:.2s}
.allbtn .ic{width:18px;height:18px}
.allbtn:hover{background:#e6e6e6}
.blog__grid{margin-top:29px}
.blog__grid .car__track{display:flex;gap:16px;align-items:stretch}
.bcard{flex:0 0 calc((100% - 48px)/4)}
.bcard{background:#fff;border-radius:var(--r-card);box-shadow:0 6px 22px rgba(0,0,0,.07);
  overflow:hidden;display:flex;flex-direction:column}
.bcard__img{width:100%;aspect-ratio:318/205;object-fit:cover;display:block}
.bcard__b{position:relative;padding:19px 22px 20px}
.tag{position:absolute;top:-15px;inset-inline-start:18px;height:27px;padding:0 11px;
  display:inline-flex;align-items:center;border-radius:5px;background:var(--gold);
  color:#fff;font-size:13px;font-weight:700}
.tag::after{content:"";position:absolute;bottom:-6px;inset-inline-end:0;width:0;height:0;
  border-style:solid;border-width:6px 7px 0 0;
  border-color:#c79403 transparent transparent transparent}
.bcard__t{font-size:14.5px;font-weight:700;color:#232323;line-height:1.85}
.bcard__x{margin-top:6px;font-size:12.5px;font-weight:500;color:#767676;line-height:1.95}
.bcard__f{display:flex;align-items:center;justify-content:space-between;margin-top:25px}
.bcard__d{display:flex;align-items:center;gap:10px;
  font-size:13.9px;font-weight:600;color:#3d3d3d}
.bcard__d .ic{width:19px;height:19px;color:#4c4c4c}
.bcard__go{width:48px;height:36px;border-radius:999px;background:var(--green);color:#fff;
  display:grid;place-items:center;transition:.2s}
.bcard__go .ic{width:20px;height:20px}
.bcard__go:hover{background:var(--green-d)}
.blog__dots{display:flex;justify-content:center;gap:9px;margin-top:15px;direction:ltr}
.blog__dots button{width:34px;height:4px;padding:0;border:0;border-radius:2px;background:#cfe3bf;
  transition:background .2s,width .2s}
.blog__dots button:hover{background:#b5d69c}
.blog__dots button.is-on{background:var(--green-d);width:38px}

/* ───────────────────── in-person purchase ───────────────────── */
/* the shop's walk-in address, sitting just above the feature bar; when it is
   there it takes the bar's large top gap and leaves the bar a short one */
.visit{width:min(var(--cw),100% - 48px);margin:110px auto 0;display:flex;align-items:center;gap:20px;
  padding:26px 30px;border:1px solid #e4efda;border-radius:var(--r-lg);background:#fbfdf8}
.visit__ic{display:grid;place-items:center;flex:none;width:58px;height:58px;border-radius:50%;
  background:var(--green);color:#fff}
.visit__ic .ic{width:27px;height:27px}
.visit__h{font-size:19px;font-weight:800;color:var(--ink);line-height:1.5}
.visit__a{margin-top:3px;font-style:normal;font-size:15px;font-weight:500;line-height:1.9;color:var(--body)}
.visit+.feat{margin-top:72px}

/* ───────────────────── feature bar ───────────────────── */
.feat{position:relative;margin-top:213px;background:var(--green);
  border-bottom:5px solid var(--gold)}
.feat__notch{position:absolute;top:0;inset-inline-end:calc(50% - 400px);
  width:26px;height:22px;background:#fff;clip-path:polygon(0 0,100% 0,50% 100%)}
.feat__in{width:min(var(--cw),100% - 48px);margin-inline:auto;height:104px;
  display:grid;grid-template-columns:repeat(4,1fr);align-items:center}
.feat__i{display:flex;align-items:center;justify-content:center;gap:16px;
  position:relative;text-align:left}
.feat__i+.feat__i::after{content:"";position:absolute;inset-inline-start:0;top:50%;translate:0 -50%;
  height:49px;width:1.5px;background:repeating-linear-gradient(#ffffff4d 0 10px,transparent 10px 15.8px)}
.feat__ic{flex:0 0 auto;width:37px;height:37px;object-fit:contain}
.feat__ic--wide{width:58px;height:58px}
.feat__i b{display:block;font-size:15.1px;font-weight:700;color:#fff;line-height:1.6}
.feat__i span{display:block;font-size:10.8px;font-weight:500;color:rgba(255,255,255,.9)}

/* ───────────────────────── footer ───────────────────────── */
.ft{width:min(var(--cw),100% - 48px);margin-inline:auto;padding:49px 0 0}
.ft__top{display:grid;grid-template-columns:232px minmax(0,1fr);gap:0;align-items:start}
/* logo-ink is 154x106 with the glyphs inset (x 5.87-151.53, y 2.65-104.26), so the
   width and margins are retuned to land the ink on the design's 152.9x107.0 box */
.ft__logo{width:161.7px;justify-self:center;margin-top:5.2px;margin-inline-start:3.5px}
.ft__about{text-align:right;padding-top:2px}
.ft__about h2{font-size:22.1px;font-weight:800;color:#0e0e0e}
.ft__about p{margin-top:8px;font-size:14.5px;line-height:2.1;color:#565656;text-align:justify}
.ft__rule{height:1px;margin:58px 0 30px;
  background:repeating-linear-gradient(90deg,#cfcfcf 0 7px,transparent 7px 14px)}
.ft__cols{display:grid;grid-template-columns:178px 178px 178px 175px 175px minmax(0,1fr);
  gap:0 10px}
.ft__col h3{position:relative;font-size:16px;font-weight:800;color:#131313;
  padding-inline-start:16px;margin-bottom:10px}
.ft__col h3::before{content:"";position:absolute;inset-inline-start:0;top:4px;width:7px;height:21px;
  border-radius:3px;background:var(--green)}
.ft__col li a{display:flex;align-items:center;gap:9px;justify-content:flex-start;font-size:14px;font-weight:500;color:#6f6f6f;line-height:2.3;
  transition:color .18s}
.ft__col li a::after{content:"";width:6px;height:6px;border-top:1.6px solid #9a9a9a;
  border-right:1.6px solid #9a9a9a;rotate:45deg;order:-1}
.ft__col li a:hover{color:var(--green)}
.ft__trust{grid-column:span 2;display:grid;grid-template-columns:1fr 1fr;gap:15px}
.trust{display:grid;place-items:center;background:#f4f4f4;border-radius:var(--r-card);
  padding:18px 10px;min-height:190px}
/* a pasted seal (eNamad iframe or its <a><img>) keeps its own size but never overflows the tile */
.trust--embed iframe{display:block;border:0;max-width:100%}
.trust--embed img{max-width:100%;height:auto}
.ft__contact{display:flex;flex-direction:column}
.phone{position:relative;display:flex;flex-direction:column;justify-content:center;
  align-items:flex-start;height:110px;border-radius:var(--r-md);overflow:hidden;
  background:linear-gradient(100deg,#6aa636 0%,#8cb432 48%,#c4b70b 100%);
  padding-block:5px 0;padding-inline:65px 88px;text-align:start;color:#fff}
/* the design's rosette: a 128px white ornament, vertically centred, its centre 53.6px
   in from the inline-end edge, so the outer leaves are clipped by the pill's corners */
.phone::after{content:"";position:absolute;top:50%;inset-inline-end:-10.5px;translate:0 -50%;
  width:128px;height:128px;
  background:url(assets/images/call-back-shape-footer.png) center/contain no-repeat}
.phone__ic{position:absolute;inset-inline-end:30px;top:50%;translate:0 -50%;
  width:46px;height:46px;color:#fff;z-index:1}
.phone__n{position:relative;z-index:1;display:block;font-size:30px;font-weight:900;
  letter-spacing:.5px;line-height:1.2}
.phone__s{position:relative;z-index:1;display:block;margin-top:1px;font-size:15.3px;
  font-weight:600;line-height:1.5;color:rgba(255,255,255,.73)}
.ft__h{position:relative;margin:17px 0 28px;font-size:17px;font-weight:800;color:#131313;
  padding-inline-start:16px}
.ft__h::before{content:"";position:absolute;inset-inline-start:0;top:6px;width:7px;height:21px;
  border-radius:3px;background:var(--green)}
.track{display:flex;align-items:center;gap:10px;height:70px;padding:0 8px 0 8px;
  border:1px solid #e2e2e2;border-radius:var(--r-md);background:#fff}
.track__in{flex:1;min-width:0;border:0;background:none;padding-inline:14px;
  font-size:15px;font-weight:500;color:#3a3a3a}
.track__in::placeholder{color:#9c9c9c}
.track__btn{flex:none;height:46px;padding:0 22px;border-radius:var(--r-sm);background:var(--green-d);white-space:nowrap;
  color:#fff;font-size:16px;font-weight:700;transition:.2s}
.track__btn:hover{background:var(--green-dd)}

/* the studio credit closes the page: Niasa's lock-up, linked to its site, over its mark
   as a watermark that the strip's bottom edge crops below the dot, so the n-and-u and
   the dot still read.  The strip takes over the 125px the footer used to end on, and
   stays centred so the corner dock never sits on it. */
.ft__credit{position:relative;overflow:hidden;display:flex;justify-content:center;
  margin-top:52px;padding:30px 0 70px}
.ft__credit::before{content:"";position:absolute;inset-inline:0;top:0;height:1px;
  background:repeating-linear-gradient(90deg,#cfcfcf 0 7px,transparent 7px 14px)}
.ft__wm{position:absolute;left:50%;top:8px;width:230px;height:auto;translate:-50% 0;
  color:#f5f5f4;pointer-events:none}
.credit{position:relative;display:inline-flex;align-items:center;gap:12px;
  font-size:13px;font-weight:500;color:#6f6f6f;transition:color .18s}
.credit__logo{width:107px;transition:transform .2s}
.credit:hover{color:var(--ink2)}
.credit:hover .credit__logo{transform:translateY(-2px)}
.credit:focus-visible{outline:2px solid var(--green);outline-offset:6px;border-radius:6px}

/* Footer link groups.  app.js moves each heading's text into a button so the
   groups can be folded on phones; they arrive open, so the links are on view
   without a tap.  On desktop the button is inert and everything stays open,
   so the reference layout is unchanged. */
.ft__acc{display:flex;align-items:center;gap:8px;width:100%;padding:0;
  font:inherit;color:inherit;text-align:start;cursor:default}
.ft__acc-ic{display:none;flex:none;width:15px;height:15px;margin-inline-start:auto;
  color:#a8a8a8;transition:transform .22s}

/* ═══════════════════ carousel + interaction shell ═══════════════════ */
.car{position:relative;outline:none}
.car__vp{clip-path:inset(-70px 0px)}
.car--y .car__vp{clip-path:inset(0px -70px)}
.car__track{position:relative;will-change:transform;
  transition:transform .48s cubic-bezier(.33,.9,.32,1);touch-action:pan-y}
.car--y .car__track{touch-action:pan-x}
.car.is-drag .car__track{transition:none}
.car__vp>*{user-select:none}
.slide.is-off,.pcard.is-off,.scard.is-off,.bcard.is-off,.rel__c.is-off{pointer-events:none}
.car:focus-visible{outline:2px solid var(--green);outline-offset:6px;border-radius:8px}

/* Phone-only pagination pills.  The design shows no indicator on these three
   rows, so they stay hidden on desktop -- on a phone a slider with no visible
   affordance reads as a clipped grid, which is the single biggest reason the
   mobile rows looked broken. */
.mdots{display:none;justify-content:center;gap:6px;margin-top:14px;direction:ltr}
.mdots button{width:7px;height:7px;padding:0;border:0;border-radius:99px;
  background:#d5e2c8;transition:width .22s,background .22s}
.mdots button.is-on{width:20px;background:var(--green)}
.mdots--on-green button{background:rgba(255,255,255,.45)}
.mdots--on-green button.is-on{background:#fff}

/* Touch-width arrows flanking those pills (and the blog's), built by app.js.
   A finger drag on a row of narrow cards is easy to miss, so every homepage
   row gets a pair; above 1024px the wrapper dissolves and the design's own
   arrows and dots are left exactly as they were. */
.mnav{display:contents}
.mnav__b{display:none}

/* skip link */
.skip{position:fixed;top:-60px;inset-inline-start:16px;z-index:120;background:var(--green);
  color:#fff;padding:10px 18px;border-radius:0 0 10px 10px;font-weight:700;transition:top .2s}
.skip:focus{top:0}

/* hamburger — revealed from 820px down, where the header drops the nav.
   The bars are spaced by --bg and the cross folds by exactly that distance,
   so the two states stay registered if the size is ever retuned. */
.burger{--bg:5px;display:none;width:42px;height:42px;border-radius:12px;
  border:1px solid #e4efda;background:#fff;color:#2f2f2f;
  flex-direction:column;justify-content:center;align-items:center;gap:var(--bg);
  transition:background .18s,border-color .18s}
.burger span{display:block;width:19px;height:2px;border-radius:2px;background:currentColor;
  transition:transform .24s cubic-bezier(.4,1.3,.5,1),opacity .16s,width .24s}
/* the third bar is short and hangs off the same edge as the other two; the
   margin is derived from the button so it survives the 40px phone size */
.burger span:nth-child(3){width:13px;align-self:flex-start;
  margin-inline-start:calc((100% - 19px) / 2)}
.burger:hover{background:#f6f9f2;border-color:#d8e6c9}
.burger[aria-expanded="true"]{background:var(--pale);border-color:#d3e3c2;color:var(--green-d)}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(calc(var(--bg) + 2px)) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.burger[aria-expanded="true"] span:nth-child(3){width:19px;
  transform:translateY(calc(-1 * (var(--bg) + 2px))) rotate(-45deg)}

/* category mega panel */
.catwrap{position:relative;display:flex}
.catpanel{position:absolute;top:calc(100% + 10px);inset-inline-start:0;z-index:60;width:296px;
  background:#fff;border:1px solid #edf3e8;border-radius:var(--r-card);
  box-shadow:0 24px 54px rgba(20,40,10,.14);padding:8px;
  animation:pop .18s cubic-bezier(.3,1.2,.5,1)}
@keyframes pop{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
.catpanel__list li+li{border-top:1px solid #f3f5f1}
/* «همه محصولات» leads the list and is set apart from the categories under it:
   it is the only row that goes somewhere wider rather than narrower. */
.catpanel__all{border-bottom:1px solid #e9efe3;margin-bottom:2px;padding-bottom:2px}
.catpanel__all a{font-weight:800;color:var(--green-dd)}
.catpanel__all+li{border-top:0}
.catpanel__list a{display:flex;align-items:center;gap:12px;padding:8px 10px;border-radius:10px;
  font-size:14.5px;font-weight:600;color:#3c3c3c;transition:background .16s,color .16s}
.catpanel__list img{width:34px;height:34px;object-fit:contain;flex:none}
.catpanel__list span{flex:1;min-width:0}
.catpanel__list .ic{width:15px;height:15px;color:#b6b6b6}
.catpanel__list a:hover{background:var(--pale);color:var(--green)}

/* ─────────────────────────── mobile drawer ───────────────────────────
   A sheet, not a list.  Three parts: a head that stays put, one scrolling
   body and a contact foot pinned to the bottom edge, so the phone number
   stays on screen however far the category list runs.  The scrim is a
   separate element from the panel so the two can animate apart — the panel
   slides and keeps a hard shadow while the scrim only fades and blurs.
   `hidden` on .drawer does the display:none; the classes only animate. */
.drawer{position:fixed;inset:0;z-index:110}
/* touch-action is the scroll lock on a phone: the drawer covers the viewport,
   so once nothing inside it can pan, the page behind it cannot be scrolled --
   and the sheet's own list still scrolls, without chaining to the page. */
.drawer__scrim{position:absolute;inset:0;background:rgba(14,24,8,.5);touch-action:none;
  opacity:0;transition:opacity .26s ease;
  -webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.drawer.is-on .drawer__scrim{opacity:1}
.drawer__panel{
  position:absolute;inset-block:0;inset-inline-start:0;width:min(348px,88vw);
  display:flex;flex-direction:column;background:#fff;
  box-shadow:0 0 60px rgba(12,26,4,.3);
  transform:translateX(var(--tx,-100%));
  transition:transform .3s cubic-bezier(.32,.86,.3,1);
  will-change:transform;
}
html[dir="rtl"] .drawer__panel{--tx:100%}
.drawer.is-on .drawer__panel{transform:none}
/* while a finger is dragging the panel it tracks the finger 1:1; easing a
   transform that is re-set every frame only makes it lag behind the thumb */
.drawer__panel.is-drag{transition:none}

/* head — the brand, and the only control that is always in reach */
.drawer__hd{
  flex:none;display:flex;align-items:center;justify-content:space-between;gap:12px;
  touch-action:none;
  padding:13px 16px;padding-top:calc(13px + env(safe-area-inset-top,0px));
  background:linear-gradient(180deg,#f2f8ec,#fff);border-bottom:1px solid #eaf0e3;
}
.drawer__logo{width:102px;height:auto}
.drawer__x{width:40px;height:40px;flex:none;display:grid;place-items:center;
  border:1px solid #e4efda;border-radius:12px;background:#fff;color:#3a3a3a;
  transition:background .18s,border-color .18s,color .18s}
.drawer__x .ic{width:18px;height:18px;stroke-width:2}
.drawer__x:hover{background:var(--green);border-color:var(--green);color:#fff}

.drawer__body{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;touch-action:pan-y;padding:16px 14px 22px}

/* account — the header's dark pill, widened to the panel */
.dacct{display:flex;align-items:center;gap:12px;padding:11px 13px;border-radius:14px;
  background:var(--dark);color:#fff;box-shadow:0 10px 22px rgba(0,0,0,.16);
  transition:background .2s}
.dacct:hover{background:#1c1c1c}
.dacct__av{width:40px;height:40px;flex:none;display:grid;place-items:center;
  border-radius:11px;background:rgba(255,255,255,.12)}
.dacct__av .ic{width:21px;height:21px}
.dacct__t{flex:1;min-width:0;display:flex;flex-direction:column;line-height:1.5}
.dacct__t b{font-size:15px;font-weight:700}
.dacct__t i{font-size:11.5px;font-style:normal;color:rgba(255,255,255,.6)}
.dacct__go{width:16px;height:16px;flex:none;color:rgba(255,255,255,.55)}

/* the two header counters, repeated where a thumb reaches them */
.dquick{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px}
/* «علاقه‌مندی‌ها» cannot be broken across lines, so the pair is sized around the
   longer label rather than around the box: 10px gutters, and one column below
   400px, where two of them stop fitting side by side */
.dquick__i{display:flex;align-items:center;gap:7px;min-height:44px;padding:10px;border-radius:13px;
  background:#f6f9f2;border:1px solid #eaf1e2;color:#33402a;
  font-size:12.4px;font-weight:700;transition:background .18s,border-color .18s}
.dquick__i .ic{width:19px;height:19px;color:var(--green)}
/* measured: the longer label is 69.3px in the 148px tile the 330px sheet gives
   it, so it fits on one line -- overflow:hidden is only a guard for a fallback
   face with wider glyphs, which would otherwise spill over the count */
.dquick__i span{flex:1;min-width:0;text-align:start;white-space:nowrap;overflow:hidden}
.dquick__i:hover{background:var(--pale);border-color:#d8e6c9}
.dquick__n{min-width:20px;height:20px;padding:0 5px;border-radius:99px;
  background:var(--green);color:#fff;font-size:10.5px;font-weight:700;
  line-height:20px;text-align:center}
.dquick__n--gold{background:var(--gold)}

/* primary nav — an icon, a label and a chevron, with the current section
   carrying the same green the desktop nav gives it */
.dnav{display:flex;flex-direction:column;gap:2px;margin-top:18px}
.dnav__a{position:relative;display:flex;align-items:center;gap:12px;
  padding:12px;border-radius:12px;font-size:15px;font-weight:600;color:#2f2f2f;
  transition:background .18s,color .18s}
.dnav__a .ic{width:20px;height:20px;color:#9cab8d;transition:color .18s}
.dnav__a span{flex:1;min-width:0}
.dnav__a .dnav__go{width:15px;height:15px;color:#cdcdcd}
.dnav__a:hover{background:#f6f9f2;color:var(--green-d)}
.dnav__a:hover .ic{color:var(--green)}
.dnav__a.is-active{background:var(--pale);color:var(--green-d);font-weight:800}
.dnav__a.is-active .ic{color:var(--green)}
.dnav__a.is-active::before{content:"";position:absolute;inset-block:11px;
  inset-inline-start:0;width:3px;border-radius:9px;background:var(--green)}

.drawer__h{display:flex;align-items:center;gap:10px;margin:22px 0 8px;padding-inline:12px;
  font-size:12.5px;font-weight:800;color:var(--green)}
.drawer__h::after{content:"";flex:1;height:1px;
  background:linear-gradient(to left,#e3ecd9,transparent)}

/* categories — the same rows the desktop dropdown shows, thumbnails and all;
   a bare text list here was the one place the catalogue looked like a sitemap */
.drawer__cats{display:flex;flex-direction:column;gap:2px}
.drawer__cats a{display:flex;align-items:center;gap:11px;padding:7px 12px;border-radius:12px;
  font-size:14px;font-weight:600;color:#4a4a4a;transition:background .18s,color .18s}
.drawer__cats img{width:38px;height:38px;flex:none;object-fit:contain;padding:3px;
  background:#f6f9f2;border-radius:10px}
.drawer__cats span{flex:1;min-width:0}
.drawer__cats .ic{width:15px;height:15px;color:#cdcdcd}
.drawer__cats a:hover{background:#f6f9f2;color:var(--green-d)}

/* The rest of the site.  Its rows are .dnav__a, so they inherit the drawer
   nav's own face — the only thing this container adds is the column.  It sits
   inside a hidden sheet, so it costs the measured page nothing. */
.drawer__more{display:flex;flex-direction:column;gap:2px}

/* foot — pinned, because "how do I phone them" is the one thing a visitor
   should never have to scroll a menu to find */
.drawer__ft{position:relative;flex:none;touch-action:none;padding:13px 16px;
  padding-bottom:calc(14px + env(safe-area-inset-bottom,0px));
  border-top:1px solid #eef2ea;background:#fbfdf9}
/* a row clipped by a hard edge reads as a cut-off list; faded, it reads as a
   list that continues -- which is the one thing the foot has to say */
.drawer__ft::before{content:"";position:absolute;bottom:100%;inset-inline:0;height:22px;
  background:linear-gradient(rgba(255,255,255,0),#fff);pointer-events:none}
.dcall{display:flex;align-items:center;gap:11px}
.dcall__b{width:40px;height:40px;flex:none;display:grid;place-items:center;
  border-radius:12px;background:var(--green);color:#fff;
  box-shadow:0 8px 18px rgba(91,146,45,.3)}
.dcall__b .ic{width:20px;height:20px}
.dcall__t{display:flex;flex-direction:column;line-height:1.45}
.dcall__t b{font-size:15.5px;font-weight:800;color:#1f1f1f}
.dcall__t i{font-size:11.5px;font-style:normal;color:var(--muted)}
.dsoc{display:flex;align-items:center;gap:8px;margin-top:12px}
.dsoc a{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;
  background:#fff;border:1px solid #ebefe6;
  transition:transform .18s,box-shadow .18s,border-color .18s}
.dsoc img{width:22px;height:22px;object-fit:contain}
.dsoc a:hover{transform:translateY(-2px);border-color:#dfe8d6;
  box-shadow:0 8px 16px rgba(20,40,10,.12)}

/* search suggestions */
.search{position:relative}
.search__list{position:absolute;top:calc(100% + 8px);inset-inline:0;z-index:30;background:#fff;
  border-radius:var(--r-card);box-shadow:0 20px 46px rgba(20,40,10,.18);padding:6px;
  max-height:280px;overflow:auto;text-align:start}
.search__list li{padding:9px 14px;border-radius:9px;font-size:14.5px;font-weight:500;
  color:#3d3d3d;cursor:pointer}
.search__list li:hover{background:var(--pale);color:var(--green)}
.search__list b{color:var(--green);font-weight:800}

/* toast */
.toast{position:fixed;inset-inline:0;bottom:calc(26px + var(--tabbar-h,0px));z-index:130;margin-inline:auto;width:max-content;
  max-width:calc(100% - 32px);background:#232323;color:#fff;font-size:14.5px;font-weight:600;
  padding:12px 22px;border-radius:999px;box-shadow:0 16px 40px rgba(0,0,0,.24);
  opacity:0;transform:translateY(16px);pointer-events:none;transition:opacity .22s,transform .22s}
.toast.is-on{opacity:1;transform:none}
.toast--ok{background:var(--green-d)}
.toast--warn{background:#c8791a}

/* badge pop */
.badge.is-pop,.tabbar__n.is-pop{animation:badgePop .42s cubic-bezier(.3,1.4,.5,1)}
@keyframes badgePop{0%{transform:scale(1)}45%{transform:scale(1.45)}100%{transform:scale(1)}}

/* button states shared by cards.  The add-to-cart flash fires under the
   pointer that just clicked, i.e. on top of the green hover face, so it goes
   one step darker and pops once to stay readable. */
.atc.is-done,.ncard__cart.is-done{
  background:var(--green-dd);color:#fff;
  transform:translateY(var(--btn-lift));box-shadow:var(--lit-sh);
  animation:atcPop .42s cubic-bezier(.3,1.4,.5,1);
}
@keyframes atcPop{0%{scale:1}45%{scale:1.06}100%{scale:1}}
.fav.is-on{background:var(--gold);color:#fff;box-shadow:0 5px 22px rgba(241,183,9,.62)}
.fav.is-on:hover,.fav.is-on:focus-visible{background:var(--gold-d);box-shadow:0 10px 26px rgba(241,183,9,.7)}
.fav.is-on .ic-f{fill:currentColor}
.fav.is-on .ic{transform:scale(1.12)}
.fav .ic{transition:transform .2s,fill .2s}
.sbtn:disabled,.car__prev:disabled,.car__next:disabled{opacity:.4;cursor:default}
.sbtn:disabled:hover{background:#8aab55}

/* order-tracking feedback */
.track.is-bad{border-color:#e0736b;box-shadow:0 0 0 3px rgba(224,115,107,.14)}
.ft__contact{position:relative}
.track__msg{position:absolute;top:100%;inset-inline:0;margin-top:9px;
  font-size:13.5px;font-weight:600;color:var(--green-d);opacity:0;transition:opacity .2s}
.track__msg.is-on{opacity:1}
.track.is-bad~.track__msg{color:#cf5a51}

/* ── hover polish that the design implies, standardised across the four
   product-card families: the card rises by --card-lift, casts --card-sh and
   floats its artwork, while the cart button inside turns green (.atc:hover).
   .ncard/.bigcard are cut with clip-path, which a box-shadow cannot escape,
   so they take the matching drop-shadow filter -- it follows the cut edge --
   and the rise goes on the wrapper so the badge and the artwork travel with
   the shape rather than sliding off it. */
.pcard{transition:background .25s,transform .25s,box-shadow .25s}
.pcard:hover{transform:translateY(var(--card-lift));box-shadow:var(--card-sh);z-index:2}
.scard{transition:transform .25s,box-shadow .25s}
.scard:hover{transform:translateY(var(--card-lift));box-shadow:var(--card-sh)}
.ncard,.bigcard{transition:transform .25s}
.ncard__shape,.bigcard__shape{transition:filter .25s}
.ncard:hover,.bigcard:hover{transform:translateY(var(--card-lift))}
.ncard:hover .ncard__shape,.bigcard:hover .bigcard__shape{
  filter:drop-shadow(0 12px 20px rgba(40,60,20,.17))}
.pcard__img,.scard__img,.cat__img{transition:transform .3s cubic-bezier(.33,.9,.32,1)}
.pcard:hover .pcard__img,.scard:hover .scard__img,.cat:hover .cat__img{transform:translateY(-6px) scale(1.03)}
.bcard{transition:transform .25s,box-shadow .25s}
.bcard:hover{transform:translateY(-4px);box-shadow:0 16px 36px rgba(0,0,0,.11)}
.promo{transition:box-shadow .25s}
.promo:hover{box-shadow:0 14px 32px rgba(0,0,0,.09)}
.animal__img{transition:transform .3s}
.animal:hover .animal__img{transform:scale(1.06)}
.trust{transition:box-shadow .2s}
.trust:hover{box-shadow:0 10px 26px rgba(0,0,0,.08)}
.shield__f,.cat__a{-webkit-tap-highlight-color:transparent}
/* both tiles are links now, so they need the block box <button> gave them for free */
.cat__a{display:block}

/* ═════════════════════ opening screen ═════════════════════ */
/* The motion logo writes itself once, full bleed, then the screen lifts.
   Three independent ways out, so it can never strand a visitor: <noscript>
   drops it entirely, app.js lifts it when the writing ends (or when it gives
   up waiting), and the keyframe below lifts it at 7s even if no script ever
   runs. The global reduced-motion rule at the end of this file collapses the
   fade to nothing, which is the right behaviour -- it still goes away. */
.preload{position:fixed;inset:0;z-index:500;display:grid;place-items:center;
  background:radial-gradient(120% 90% at 50% 0,#fff 0,#f6f9f4 70%,#eef4ea 100%);
  touch-action:none;overscroll-behavior:contain;
  transition:opacity .55s ease,visibility 0s linear .55s;
  animation:preload-lift .3s linear 7s forwards}
.preload.is-done{opacity:0;visibility:hidden}
.preload__logo{width:min(53vw,355px)}
/* The still frame must not flash before the ink starts. motion-logo.js moves
   this class onto its wrapper, so after the upgrade the selector stops
   matching the image -- which also means the plain logo still shows through
   if the canvas never comes up. */
img.preload__logo{opacity:0}
@keyframes preload-lift{to{opacity:0;visibility:hidden;pointer-events:none}}

/* ═════════════════════ floating dock ═════════════════════ */
/* Contact launcher + back-to-top, parked at the inline-end edge (the left, in
   RTL) so the centred toast and the footer's own phone card stay clear.  z-100
   puts it over the page but under the drawer (110), the skip link (120) and
   the toast (130), so an open drawer covers it as it should. */
.dock{position:fixed;z-index:100;inset-inline-start:20px;bottom:calc(22px + var(--tabbar-h,0px));
  display:flex;flex-direction:column;align-items:flex-start;gap:12px}
.dock__wrap{position:relative}

/* back to top ------------------------------------------------------------- */
.dock__top{position:fixed;inset-inline-end:20px;bottom:calc(22px + var(--tabbar-h,0px));width:46px;height:46px;border-radius:50%;background:#fff;
  border:1px solid #e4efda;color:var(--green);font-size:20px;
  display:grid;place-items:center;cursor:pointer;
  box-shadow:0 10px 26px rgba(20,40,10,.16);
  transition:transform .2s,background .2s,color .2s,opacity .25s}
.dock__top[hidden]{display:none}
/* `backwards`, never `forwards`: .is-in is added when the button appears and
   then stays on the element for good, so a forwards fill would keep painting
   dockIn's last frame -- transform:none -- over every later transform, and an
   animated value outranks a plain rule.  That is what used to kill the hover
   lift below.  The last frame is the element's own resting style anyway, so
   dropping the forwards fill changes nothing about how the entry looks. */
.dock__top.is-in{animation:dockIn .25s ease backwards}
.dock__top:hover{background:var(--green);color:#fff;transform:translateY(-3px)}
.dock__top:focus-visible{outline:2px solid var(--green);outline-offset:3px}
/* label slides out of the button on hover, on pointers that can hover */
.dock__tip{position:absolute;inset-inline-end:calc(100% + 10px);white-space:nowrap;
  background:#232323;color:#fff;font-size:12.5px;font-weight:600;
  padding:6px 11px;border-radius:8px;opacity:0;pointer-events:none;
  transform:translateX(-6px);transition:opacity .18s,transform .18s}
.dock__top:hover .dock__tip,.dock__top:focus-visible .dock__tip{opacity:1;transform:none}
@media (hover:none){.dock__tip{display:none}}
@keyframes dockIn{from{opacity:0;transform:translateY(10px) scale(.9)}to{opacity:1;transform:none}}

/* contact launcher -------------------------------------------------------- */
.dock__cta{position:relative;display:flex;align-items:center;gap:9px;height:52px;padding:0 17px 0 20px;
  border:0;border-radius:999px;cursor:pointer;
  background:linear-gradient(180deg,var(--green) 0,var(--green-d) 100%);
  color:#fff;font-family:var(--font-body);font-size:15px;font-weight:800;
  box-shadow:0 14px 30px rgba(70,120,30,.34);
  transition:transform .2s,box-shadow .2s,filter .2s}
.dock__cta:hover{transform:translateY(-3px);box-shadow:0 18px 38px rgba(70,120,30,.42)}
.dock__cta:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
.dock__cta-ic,.dock__cta-x{font-size:22px;stroke-width:1.6}
/* the icon swaps to a cross while the panel is open */
.dock__cta-x{display:none}
.dock__cta[aria-expanded="true"] .dock__cta-ic{display:none}
.dock__cta[aria-expanded="true"] .dock__cta-x{display:block}
/* a soft pulse draws the eye once the page has settled; it stops on hover and
   is killed outright by the global reduced-motion rule */
.dock__cta::before{content:"";position:absolute;inset:0;border-radius:999px;
  background:var(--green);opacity:.5;z-index:-1;animation:dockPulse 2.6s ease-out infinite}
.dock__cta:hover::before,.dock__cta[aria-expanded="true"]::before{animation:none;opacity:0}
@keyframes dockPulse{0%{transform:scale(1);opacity:.45}70%,100%{transform:scale(1.28);opacity:0}}

/* the panel --------------------------------------------------------------- */
.cpanel{position:absolute;bottom:calc(100% + 12px);inset-inline-start:0;width:302px;
  max-width:calc(100vw - 40px);background:#fff;border:1px solid #edf3e8;
  border-radius:var(--r-lg);box-shadow:0 26px 60px rgba(20,40,10,.2);
  padding:6px;text-align:start;transform-origin:bottom right;
  animation:cpanelIn .2s cubic-bezier(.3,1.2,.5,1)}
.cpanel[hidden]{display:none}
@keyframes cpanelIn{from{opacity:0;transform:translateY(10px) scale(.96)}to{opacity:1;transform:none}}

.cpanel__hd{display:flex;align-items:flex-start;justify-content:space-between;
  gap:10px;padding:12px 13px 11px}
.cpanel__h{margin:0;font-family:var(--font-head);font-size:16.5px;font-weight:800;color:var(--ink)}
.cpanel__s{margin:3px 0 0;font-size:12.4px;font-weight:600;color:var(--muted)}
.cpanel__x{width:30px;height:30px;flex:none;border-radius:50%;border:0;cursor:pointer;
  background:var(--pale);color:#5c6b51;font-size:15px;display:grid;place-items:center;
  transition:background .18s,color .18s}
.cpanel__x:hover{background:var(--green);color:#fff}
.cpanel__x:focus-visible{outline:2px solid var(--green);outline-offset:2px}

.cpanel__list{list-style:none;margin:0;padding:0 4px 5px;
  max-height:min(60vh,392px);overflow-y:auto;overscroll-behavior:contain}

.crow{display:flex;align-items:center;gap:11px;padding:8px 9px;border-radius:12px;
  transition:background .18s}
.crow:hover{background:var(--pale)}
.crow:focus-visible{outline:2px solid var(--brand,var(--green));outline-offset:-1px}
.crow__b{width:38px;height:38px;flex:none;border-radius:50%;overflow:hidden;
  display:grid;place-items:center;
  background:var(--brand,var(--green));color:#fff;font-size:21px;
  box-shadow:0 6px 14px rgba(20,40,10,.18);
  box-shadow:0 6px 14px color-mix(in srgb,var(--brand,var(--green)) 38%,transparent);
  transition:transform .18s}
/* The five messengers use the brands' own icons, which already carry their
   tile and colour -- so the badge underneath them paints nothing and just
   crops them to the same circle the two phone glyphs sit in. */
.crow--app .crow__b{background:none}
.cimg{width:100%;height:100%;object-fit:cover;display:block}
.crow:hover .crow__b{transform:scale(1.07)}
.cic{width:1em;height:1em;fill:currentColor;flex:none}
.cic--s{fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.crow__t{display:flex;flex-direction:column;min-width:0}
.crow__t b{font-size:14px;font-weight:800;color:var(--ink2);line-height:1.55}
.crow__t i{font-size:12.6px;font-weight:600;font-style:normal;color:var(--body);
  line-height:1.5;unicode-bidi:isolate;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

@media (max-width:680px){
  .dock{inset-inline-start:14px;bottom:calc(14px + var(--tabbar-h,0px));gap:10px}
  .dock__top{inset-inline-end:14px;bottom:calc(14px + var(--tabbar-h,0px));width:42px;height:42px;font-size:18px}
  /* the launcher drops its label and becomes a round FAB */
  .dock__cta{width:54px;height:54px;padding:0;justify-content:center;border-radius:50%}
  .dock__lbl{display:none}
  .cpanel{width:min(300px,calc(100vw - 28px))}
}

/* ═════════════════════ tab bar ═════════════════════ */
/* The app-style bottom bar: home, shop, cart, favourites, account -- the five
   places a thumb goes most, pinned where a thumb already is.  It arrives at
   820px with the burger, i.e. exactly where the desktop nav leaves.  The
   layout only renders it (and sets .has-tabbar on <html>) outside the
   checkout, so --tabbar-h is 0 on every page and width that has no bar, and
   everything that stands on the bottom edge -- dock, back-to-top, toast, the
   product buy bar -- adds it to its own offset.  z-98: over the buy bar (95),
   under the dock (100) so an open contact panel wins, and under every sheet.

   It is a frosted capsule floating off the edge rather than a strip welded to
   it.  One green pill marks the open tab and slides to the next one on a tap;
   the open tab widens to carry its label, the rest are icons. */
.tabbar{display:none}
@media (max-width:820px){
  /* the capsule, plus the gap under it -- or the home indicator, if taller */
  .has-tabbar{--tabbar-h:calc(64px + max(12px, env(safe-area-inset-bottom,0px)));
    scroll-padding-bottom:var(--tabbar-h)}
  /* the page ends above the bar, so the footer's last row is never under it */
  .has-tabbar body{padding-bottom:var(--tabbar-h)}

  /* a full-width, see-through rail that only positions the capsule; its
     gutters let taps through to the page */
  .tabbar{position:fixed;inset-inline:0;bottom:0;z-index:98;display:block;
    padding:0 12px max(12px, env(safe-area-inset-bottom,0px));pointer-events:none;
    transition:transform .32s cubic-bezier(.32,.86,.3,1)}
  .tabbar__in{
    --g:2.2;        /* how many closed tabs wide the open one is */
    position:relative;display:flex;width:min(480px,100%);height:64px;
    margin-inline:auto;padding:0 6px;border-radius:999px;pointer-events:auto;
    background:linear-gradient(180deg,rgba(255,255,255,.86),rgba(243,249,237,.8));
    -webkit-backdrop-filter:blur(18px) saturate(1.8);backdrop-filter:blur(18px) saturate(1.8);
    border:1px solid rgba(255,255,255,.75);
    box-shadow:0 0 0 1px rgba(91,146,45,.10),0 18px 36px -12px rgba(40,72,16,.38),
      0 4px 12px rgba(20,40,10,.07),inset 0 1px 0 #fff}
  /* no frosting to be had: go near-opaque rather than show the page through */
  @supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){
    .tabbar__in{background:rgba(255,255,255,.97)}
  }

  /* The pill is placed from --on (the open tab's index) by the same arithmetic
     flex uses to size the tabs: four closed at 1 and one open at --g.  Tabs and
     pill share a duration and an easing, so it lands exactly on the tab as the
     tab finishes widening -- with a little overshoot, so it settles. */
  .tabbar__pill{position:absolute;top:8px;bottom:8px;z-index:0;
    inset-inline-start:calc(6px + var(--on,0) * (100% - 12px) / (4 + var(--g)));
    width:calc((100% - 12px) * var(--g) / (4 + var(--g)));
    border-radius:999px;
    background:linear-gradient(135deg,var(--ring) 0%,var(--green) 48%,var(--green-d) 100%);
    box-shadow:0 8px 18px -5px rgba(91,146,45,.6),inset 0 1px 0 rgba(255,255,255,.35);
    opacity:0;transform:scale(.6);
    transition:inset-inline-start .46s cubic-bezier(.34,1.26,.5,1),
      width .46s cubic-bezier(.34,1.26,.5,1),opacity .2s ease,transform .3s ease}
  .tabbar__in.has-on .tabbar__pill{opacity:1;transform:none}

  .tabbar__a{position:relative;z-index:1;flex:1 1 0;min-width:0;
    display:flex;align-items:center;justify-content:center;border-radius:999px;
    color:#6f7c64;-webkit-tap-highlight-color:transparent;
    transition:flex-grow .46s cubic-bezier(.34,1.26,.5,1),color .25s ease}
  .tabbar__a.is-on{flex-grow:var(--g);color:#fff}
  .tabbar__a:focus-visible{outline:2px solid var(--green);outline-offset:-5px}

  /* the label follows the icon on screen but leads it in the source */
  .tabbar__ic{position:relative;order:-1;flex:none;display:grid;place-items:center;
    width:26px;height:26px;transition:transform .2s ease}
  .tabbar__ic .ic{width:23px;height:23px;stroke-width:1.7}
  .tabbar__a.is-on .ic{stroke-width:2}
  .tabbar__a:active .tabbar__ic{transform:scale(.84)}

  /* closed tabs keep their label for screen readers -- squeezed to nothing,
     never display:none -- and the open tab lets it out after the pill arrives */
  .tabbar__t{max-width:0;margin-inline-start:0;overflow:hidden;opacity:0;
    white-space:nowrap;text-overflow:ellipsis;
    font-size:12.6px;font-weight:800;line-height:1.4;
    transition:max-width .46s cubic-bezier(.34,1.26,.5,1),margin .46s ease,opacity .15s ease}
  .tabbar__a.is-on .tabbar__t{max-width:86px;margin-inline-start:7px;opacity:1;
    transition-delay:0s,0s,.14s}

  /* counts sit on the icon's inline-start shoulder, as the header's do; an
     empty count is hidden here, where ۰ under every thumb is only noise */
  .tabbar__n{position:absolute;top:-7px;inset-inline-start:-10px;
    min-width:17px;height:17px;padding:0 4px;border-radius:999px;
    background:var(--green);color:#fff;
    box-shadow:0 0 0 2px #fff,0 3px 8px rgba(91,146,45,.4);
    font-size:9.5px;font-weight:800;line-height:17px;text-align:center}
  .tabbar__n--gold{background:var(--gold);box-shadow:0 0 0 2px #fff,0 3px 8px rgba(241,183,9,.45)}
  /* on the green pill the count turns white, so it doesn't sink into it */
  .tabbar__a.is-on .tabbar__n{background:#fff;color:var(--green-d);
    box-shadow:0 2px 6px rgba(30,60,10,.25)}
  .tabbar__n.is-zero{display:none}

  /* An on-screen keyboard lifts a fixed bar with it on Android and parks it
     on top of the field being typed in, so the bar ducks away while any text
     field has focus.  It keeps its padding, so the page does not jump. */
  .has-tabbar:has(:is(input:not([type="checkbox"],[type="radio"],[type="button"],[type="submit"]),textarea):focus) .tabbar{
    transform:translateY(150%)}
}

/* ═════════════════════ responsive ═════════════════════ */
/* The 1440px layout above is the desktop reference and is never altered. */

@media (max-width:1439px){
  .hero{overflow:hidden;height:auto;padding-bottom:96px}
  .hero__curve{display:none}
  .shields{position:static;translate:none;width:100%;margin-top:34px;overflow-x:auto;
    justify-content:flex-start;gap:16px;padding:0 0 6px;scrollbar-width:none}
  .shields::-webkit-scrollbar{display:none}
  .shield{margin-top:0!important;flex:0 0 141px}
  .sec--best{padding-top:30px}
  .prow-wrap{margin-inline-start:0;overflow-x:auto;scrollbar-width:none;
    scroll-snap-type:x mandatory}
  .prow-wrap::-webkit-scrollbar{display:none}
  .prow{width:max-content}
  .pcard{scroll-snap-align:start}
  .sbtn{inset-inline-end:-6px}
}
@media (max-width:1240px){
  .about__in{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:34px 26px}
  .about__copy{grid-column:1/-1;padding-inline-start:0}
  .about__title,.about__text{width:100%;margin-inline:0 0}
  .slider{grid-column:1/-1;order:3;justify-content:center;padding-block:34px}
  .slider__blob{width:min(var(--blob-w),88%);margin-inline-start:0}
  .slider__img{width:min(360px,74%);left:50%}
  .slider__cap,.slider__dots{transform:none}
  .stats{grid-column:1/-1;flex-direction:row;flex-wrap:wrap;gap:24px 40px;
    justify-content:flex-start;padding-inline-start:0}
  .about__orn,.about__arrow,.dots{display:none}
  .new__grid{grid-template-columns:minmax(0,1fr);justify-content:center;padding-inline-end:0;
    margin-top:24px;gap:26px}
  .new__cars{grid-area:auto;margin-top:0;padding-bottom:0}
  .new__cars .nbtn{inset-inline-end:10px}
  .ncards__page{grid-template-columns:repeat(2,minmax(0,385px));justify-content:center}
  .bigcard{grid-area:auto;justify-self:center}
  .ncard,.ncard__shape{width:100%;max-width:385px}
  .cats{flex-wrap:wrap;gap:30px 40px;padding-inline-end:0}
  .cat{width:calc(33.333% - 28px)}
  .blog__grid{grid-template-columns:repeat(2,1fr);gap:22px}
  .animals{gap:26px 40px;flex-wrap:wrap;padding-inline-end:0}
  .ft__cols{grid-template-columns:repeat(3,minmax(0,1fr));gap:26px}
  .ft__trust{grid-column:span 3}
  .ft__contact{grid-column:span 3;max-width:460px}
}
@media (max-width:1024px){
  .special__band{grid-template-columns:minmax(0,1fr);height:auto;padding-bottom:26px}
  .special__band::before{inset-inline-start:0;inset-inline-end:0;border-radius:26px;
    background:url("assets/images/special-shapes/linear (1).svg") 0 0/100% 100% no-repeat,
      linear-gradient(200deg,#609a32 0 68%,#8ba226 86%,#d0ae13 100%);
    -webkit-mask:none;mask:none}
  /* a transform carousel cannot survive a wrapping track: the wrapped cards
     were stranded off the band and only one was ever reachable */
  .special__cards{grid-area:auto;transform:none;margin:0;padding:22px 16px 0}
  .special__cards .car__track{flex-wrap:nowrap}
  .scard{flex:0 0 calc((100% - 22px)/3);min-width:0}
  /* the product rows were driving one track with both a transform carousel and
     a native overflow box; the carousel wins, the overflow box goes */
  .prow-wrap{margin-inline-start:0;overflow:visible;scroll-snap-type:none}
  .prow{width:auto;gap:12px}
  .pcard{flex:0 0 calc((100% - 24px)/3);width:auto}
  .bcard{flex:0 0 calc((100% - 32px)/3)}
  .shields{padding-inline:24px;scroll-padding-inline:24px;scroll-snap-type:x mandatory}
  .shield{scroll-snap-align:center}
  .feat__notch{display:none}          /* its 50%-400px anchor leaves the page here */
  .mdots{display:flex}
  .mnav{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:14px}
  .mnav>.car__dots,.special__cards .mnav>.mdots{margin:0}
  .mnav--scroll{display:none}          /* the slaughter row only scrolls below 680px */
  /* 40px face, 44px tap area */
  .mnav__b{display:grid;place-items:center;flex:none;width:40px;height:40px;padding:0;border-radius:50%;
    border:1px solid #d8e6c9;background:#fff;color:var(--green-d);box-shadow:0 6px 16px rgba(22,52,8,.12);
    position:relative;transition:background .18s,color .18s,opacity .18s,scale .18s;-webkit-tap-highlight-color:transparent}
  .mnav__b::after{content:"";position:absolute;inset:-3px}
  .mnav__b .ic{width:19px;height:19px;stroke-width:2.2}
  .mnav__b:active:not(:disabled){scale:.93;background:var(--pale)}
  .mnav__b:disabled{opacity:.4;box-shadow:none}
  .mnav__b:focus-visible{outline:2px solid var(--green);outline-offset:3px}
  .mnav--on-green .mnav__b{border-color:transparent;box-shadow:0 6px 16px rgba(22,52,8,.25)}
  .mnav--on-green .mnav__b:focus-visible{outline-color:#fff}
  /* Touch product card: the desktop row of a 46px heart beside a 19px-padded
     button no longer fits once three cards share the width, and it wrapped the
     label onto two lines.  The heart moves onto the artwork and the button
     takes the full card width -- the ordinary mobile-commerce arrangement.
     The heart keeps the right-hand (start) corner it has on desktop, so the
     discount badge crosses to the left one. */
  /* the product title is a link, and its line box alone is a 16px target */
  .pcard__t a,.scard__t a,.ncard__t a,.bigcard__t a{display:block;padding-block:8px}
  .pcard__t,.scard__t{margin-top:2px}
  .pcard .acts,.scard .acts{gap:0}
  .pcard .fav,.scard .fav{position:absolute;z-index:4;top:10px;inset-inline-start:10px;
    width:42px;height:42px;border-radius:12px;box-shadow:0 3px 10px rgba(0,0,0,.08)}
  .pcard .fav.is-on,.scard .fav.is-on{box-shadow:0 4px 14px rgba(241,183,9,.5)}
  .pcard .disc{inset-inline-start:auto;inset-inline-end:0}
  .pcard .atc,.scard .atc{width:100%;justify-content:center;white-space:nowrap;
    padding:0 10px;gap:8px}
  /* :hover latches after a tap, so from the first touch width the cards stop
     rising; the cart button keeps its green face, which doubles as the
     add-to-cart acknowledgement on a device that has no pointer to show it */
  .pcard:hover,.scard:hover,.ncard:hover,.bigcard:hover,
  .atc:hover,.fav:hover,.ncard__cart:hover{transform:none}
  .ncard:hover .ncard__shape,.bigcard:hover .bigcard__shape{filter:none}
  .scard:hover{box-shadow:0 14px 30px rgba(0,0,0,.08)}
  /* three stat rows stacked down the page; as a 3-up they read as one figure set */
  .stats{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;
    padding-inline-start:0;margin-top:26px}
  .stat{flex-direction:column;align-items:center;text-align:center;gap:0;
    padding:18px 10px;background:#f7f9f5;border-radius:16px}
  .stat__plus{margin:0 0 7px}
  .stat__n{margin:0}
  .stat__d{width:auto;margin-top:4px;text-align:center}
  /* new products goes horizontal on every touch width: a vertical drag inside
     the page was competing with the page's own scroll */
  .new__cars .car__vp{height:auto}
  .new__cars .car__track{flex-direction:row;gap:16px}
  .ncards__page{flex:0 0 100%;min-width:0;display:grid;gap:24px 20px;
    grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .ncard,.ncard__shape{max-width:none}
  .new__scroll{display:none}
  /* the arrows lie down with the track.  A full-bleed pager leaves no gutter
     for a side arrow that isn't sitting on a card, so the pair drops out of
     absolute positioning and flanks the dots as one centred control row. */
  /* A grid item spanning every column sizes those columns, so the arrows were
     pushed to the far corners rather than flanking the dots.  Reserving a
     control strip and centring the three pieces in it keeps them as one group
     at any width. */
  .new__cars{position:relative;padding-bottom:58px}
  .new__cars .car__dots{position:absolute;bottom:18px;inset-inline:0;margin:0}
  .new__cars .nbtn{top:auto;bottom:0}
  .new__cars .nbtn--prev{inset-inline-start:auto;inset-inline-end:calc(50% + 44px)}
  .new__cars .nbtn--next{inset-inline-end:auto;inset-inline-start:calc(50% + 44px)}
  .orgcard{grid-area:auto;height:auto;min-height:200px;margin:0 16px 16px;
    border-radius:22px;overflow:hidden;
    background:linear-gradient(135deg,#609a32 0%,#9aa521 52%,#e2b40e 100%)}
  .orgcard__dash{inset-inline-start:auto;inset-inline-end:12px;top:16px;bottom:16px}
  /* stacked card is wide and short: keep the cut-out clear of the right-aligned copy */
  .orgcard__img{inset-inline-start:auto;inset-inline-end:0;bottom:0;width:196px}
  .sbtn{display:none}
  .promos{grid-template-columns:1fr;gap:18px;justify-items:center}
  .promo{width:100%;max-width:470px}
  .feat__in{grid-template-columns:1fr 1fr;height:auto;padding:26px 0;gap:26px}
  .feat__i+.feat__i::after{display:none}
  .ft__top{grid-template-columns:180px minmax(0,1fr)}
}
/* The scalloped card is a 385x195 ornament, so between 680 and 820 the page
   keeps its single 385px column rather than squeezing two into ~326px -- and
   the viewport keeps the height that column needs.  Below 680 the card becomes
   a clean portrait tile and the page goes two-up, so this pair must not leak
   down there: it left the pager in a fixed 870px box with ~440px of empty
   field under the cards, which stranded the nav row at the bottom of it. */
@media (min-width:681px) and (max-width:820px){
  .ncards__page{grid-template-columns:minmax(0,385px)}
  .new__cars .car__vp{height:870px}
}
@media (max-width:820px){
  :root{--hh:76px;--hh-c:var(--hh)}   /* short enough already; never condenses */
  /* The nav goes here, so the burger has to arrive here too — it used to wait
     until 680px, which left 681-820px with no route to the four main pages at
     all.  The category dropdown stays beside it, exactly as on desktop. */
  .nav,.hdr__sep{display:none}
  .burger{display:flex}
  .hdr__start{gap:14px}
  .hdr__acct span{display:none}
  .hdr__acct{padding:0 12px}
  /* the arch drops to 140px here, so the lockup scales with it (x0.778) and the
     restored descender keeps the same 75% fit inside the arch as on desktop */
  .brand__arch{width:140px}
  .brand__img{width:110.5px;margin-top:27.2px;margin-inline-start:4.4px}
  .hero__body{padding-top:44px;padding-inline-start:0}
  .hero__title{--lockw:min(320px,84vw);transform:none}
  .search{width:min(482px,100%)}
  .plate__box{width:min(641px,100%);padding-inline:18px;clip-path:none;border-radius:14px 14px 0 0}
  .plate__leaf{display:none}
  .plate__fleur{width:min(424px,96%)}
  .plate__title{font-size:26px}
  .about__in{grid-template-columns:minmax(0,1fr)}
  .blog__grid{grid-template-columns:1fr}
  .cat{width:calc(50% - 20px)}
  .ft__top{grid-template-columns:1fr;text-align:center}
  .ft__logo{justify-self:center;margin-bottom:14px}
  .ft__cols{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ft__trust,.ft__contact{grid-column:span 2}
  .feat__in{grid-template-columns:1fr}
  .animal{width:126px}.animal__f{width:126px;height:139px}
  .animal__img{height:74px;top:32px}
  .iconbtn{padding:6px}
  .new__title{font-size:22px}
}
@media (max-width:520px){
  .sec,.hero__body,.new__in,.feat__in,.ft,.special__in{width:calc(100% - 32px)}
  .plate__title{font-size:21px}
  .new__title,.sec__h{font-size:21px}
  .count__b{width:36px;height:36px;font-size:14px}
  .ft__cols{grid-template-columns:1fr}
  .ft__trust{grid-template-columns:1fr 1fr;grid-column:span 1}
  .ft__contact{grid-column:span 1}
  .phone__n{font-size:23px}
  .cat{width:100%}
  .ncard__shape{padding:42px 128px 16px 18px}
  .new__scroll{display:none}
  .ncard__img{width:78px}
  .bcard__b{padding:30px 16px 18px}
  .allbtn{height:40px;padding:0 16px;font-size:14px}
  .blog__head{gap:14px;flex-wrap:wrap}
}

/* ══════════════════════════ phones ══════════════════════════
   Everything above is the desktop reference, untouched.  Below 680px the page
   is re-laid rather than merely narrowed: every row that the desktop grid
   would drop into a single column becomes a snap-scrolling rail or a real
   grid, section rhythm is cut roughly in half, and the card rows carry one
   large card in view with the next peeking so the swipe is discoverable.
   ============================================================ */
@media (max-width:680px){
  :root{--hh:62px}

  /* ── section rhythm ──
     the desktop 110-125px gaps are most of a phone screen of nothing */
  .sec,.hero__body,.new__in,.feat__in,.ft,.special__in{width:calc(100% - 32px)}
  .sec--special{width:100%}          /* the coloured band stays full-bleed */
  .sec--about,.sec--slaughter,.sec--new,.sec--special,.sec--blog,.feat{margin-top:56px}
  .sec--cats{margin-top:52px}
  .sec--promos{margin-top:38px}
  .sec__h{font-size:19px;line-height:1.4}
  .swash{width:58px;height:10px;margin-top:5px}

  /* ────────────────────────── header ──────────────────────────
     Layout is burger | logo | categories.  Cart, favourites and account leave
     the bar: the tab bar carries all three on a phone, and the drawer does on
     the checkout, where the tab bar is off.  .hdr__start is dissolved so the
     burger and the dropdown sit at opposite ends of the row.
     The header sticks so the menu and the categories stay reachable the whole
     way down a ~6000px page. */
  .hdr{position:sticky;top:0;box-shadow:0 1px 0 #f0f0f0,0 6px 18px rgba(0,0,0,.05)}
  .hdr__in{width:calc(100% - 24px);gap:8px}
  .hdr__start{display:contents}
  .hdr__end{display:none}
  /* one notch tighter than desktop, so the button clears the centred logo
     down to 375px; below that it sheds the chevron (see the 374px tier) */
  .catbtn{height:40px;gap:6px;font-size:14px}
  /* the panel hangs from the button's outer edge, as on desktop, and scrolls
     rather than running under the tab bar on a short or landscape screen */
  .catpanel{inset-inline:auto 0;width:min(296px,100vw - 24px);overflow-y:auto;overscroll-behavior:contain;
    max-height:calc(100dvh - var(--hh) - var(--tabbar-h,0px) - 14px)}
  .brand{position:absolute;left:50%;translate:-50% 0;top:0;height:var(--hh);z-index:2}
  .brand__arch{display:none}        /* a sticky white arch would blot the green bands */
  .brand__img{width:76px;margin:0}
  .burger{width:40px;height:40px}

  /* one notch tighter on a phone: the sheet is the whole screen here, and the
     foot has to stay above the home indicator without eating the last row */
  .drawer__panel{width:min(330px,86vw)}
  .drawer__body{padding:14px 12px 20px}
  .dnav__a{padding:11px 12px;font-size:14.6px}
  .drawer__cats a{padding:6px 12px;font-size:13.6px}
  .drawer__cats img{width:36px;height:36px}
  .drawer__ft{padding-top:11px}

  /* ────────────────────────── hero ────────────────────────── */
  .hero{padding-bottom:24px}
  .hero__body{padding-top:26px;padding-inline-start:0}
  .hero__title{--lockw:min(272px,74vw);transform:none}
  .hero__sub{margin-top:10px;font-size:12.9px;line-height:1.72}
  .search{width:100%;height:54px;margin-top:16px;border-radius:14px;
    padding-inline:14px 6px;gap:8px}
  .search__in{align-self:stretch}
  .search__ic{width:19px;height:19px}
  .search__in{font-size:14.5px}
  .search__btn{height:42px;padding:0 15px;font-size:13.5px;border-radius:10px}
  .search__list{max-height:240px}

  /* hero category rail: was a bare overflow box, so cards bled off both edges
     mid-shape.  Full-bleed with its own gutters + snap = a readable rail. */
  .shields{margin-top:22px;gap:10px;padding:2px 16px 10px;
    scroll-snap-type:x mandatory;scroll-padding-inline:16px;
    overscroll-behavior-x:contain}
  .shield{flex:0 0 106px;scroll-snap-align:center}
  .shield__f{width:106px;height:121px}
  .shield__f::before{inset:3.5px 2.3px}
  .shield__c{padding:12px 7px 10px}
  .shield__img{width:62px;height:53px}
  .shield__t{font-size:10.6px;line-height:1.45}
  .shield__b{font-size:8.5px;line-height:15px;padding:0 7px}

  /* ───────────────────── best sellers ───────────────────── */
  .sec--best{padding-top:22px}
  .plate{padding-top:6px}
  .plate__fleur{width:min(300px,84%);translate:-50% 0}
  .plate__box{width:100%;min-height:0;padding:16px 14px 8px;border-radius:16px 16px 0 0}
  .plate__title{font-size:20px;gap:4px}
  .plate__sub{margin-top:10px;font-size:12.8px;line-height:1.75}
  .plate__sub--green{font-size:12.4px;margin-top:4px;transform:none}
  .count{margin-top:10px;gap:5px;transform:none}
  .count__b{width:34px;height:34px;font-size:13.5px}
  .count i{font-size:13px}

  /* drop the native-scroll hybrid the 1439 tier bolted on: the transform
     carousel and an overflow box were both driving the same track */
  .prow-wrap{margin:18px 0 0;overflow:visible;scroll-snap-type:none}
  .prow{width:auto;gap:12px}
  .pcard{flex:0 0 45%;width:auto;padding:14px 10px 12px;border-radius:14px;
    background:#fff;border:1px solid #f1f1f1;scroll-snap-align:none}
  /* the alternating desktop wash reads as a rendering fault in a swiped row */
  .pcard:nth-child(even){background:#fff}
  .pcard:hover{background:#fff}
  .pcard:hover{box-shadow:none}
  .pcard__media{height:112px}
  .pcard__wm{width:124px;top:54px}
  .pcard__img{max-height:104px}
  .pcard__t{margin-top:6px;font-size:13.4px}

  /* ── compact card internals, shared by the two product rows ──
     the desktop card puts a 46px heart beside a 19px-padded button; at half a
     phone screen that row cannot fit, so the heart moves onto the artwork
     (the usual mobile commerce spot) and the button takes the full width. */
  .pcard .price,.scard .price{margin-top:9px;gap:4px}
  .pcard .price--old,.scard .price--old{margin-top:2px}
  .pcard .price__lbl,.scard .price__lbl{font-size:7.5px}
  .pcard .price__v,.scard .price__v{font-size:14.6px}
  .pcard .price--old .price__v,.scard .price--old .price__v{font-size:12.4px}
  .pcard .toman b,.scard .toman b{font-size:6.8px}
  .pcard .acts,.scard .acts{margin-top:10px;gap:0}
  .pcard .fav,.scard .fav{position:absolute;z-index:4;top:7px;inset-inline-start:7px;
    width:38px;height:38px;border-radius:11px;box-shadow:0 2px 8px rgba(0,0,0,.08)}
  .pcard .fav.is-on,.scard .fav.is-on{box-shadow:0 3px 10px rgba(241,183,9,.45)}
  .pcard .fav .ic,.scard .fav .ic{width:17px;height:17px}
  .pcard .atc,.scard .atc{width:100%;height:40px;padding:0 8px;gap:6px;
    justify-content:center;font-size:9.6px;border-radius:10px}
  .pcard .atc .ic,.scard .atc .ic{width:16px;height:16px}
  .disc{width:36px;height:36px}
  .disc b{font-size:10px}
  .disc i{font-size:6px}

  /* ── one card in view, shared by the two homepage product rows ──
     Two half-width cards put the price at 14px and the cart label under 10px,
     which read as fine print on a phone.  One card at 80% gets the desktop's
     own type and artwork sizes back, and the next card peeks by a fifth.  The
     share also keeps the carousel's page count honest: it rounds viewport over
     step, so 1.2 cards in view is one page per card.  The compact rules above
     stay as the base -- the shop grid is still two-up on a phone -- and the
     best-seller card is reached through its row so none of this leaks there. */
  .prow .pcard{flex:0 0 80%;padding:18px 16px 16px;border-radius:18px}
  .prow .pcard__media{height:196px}
  .prow .pcard__wm{width:214px;top:94px}
  .prow .pcard__img{max-height:186px}
  .prow .pcard__t,.scard__t{margin-top:8px;font-size:17.4px}
  .prow .pcard .price,.scard .price{margin-top:12px;gap:6px}
  .prow .pcard .price--old,.scard .price--old{margin-top:4px}
  .prow .pcard .price__lbl,.scard .price__lbl{font-size:10.6px;font-weight:600}
  .prow .pcard .price__v,.scard .price__v{font-size:19.6px}
  .prow .pcard .price--old .price__v,.scard .price--old .price__v{font-size:15px}
  .prow .pcard .toman b,.scard .toman b{font-size:8.6px}
  .prow .pcard .acts,.scard .acts{margin-top:14px}
  .prow .pcard .fav,.scard .fav{top:10px;inset-inline-start:10px;width:44px;height:44px;
    border-radius:12px}
  .prow .pcard .fav .ic,.scard .fav .ic{width:20px;height:20px}
  .prow .pcard .atc,.scard .atc{height:48px;padding:0 12px;gap:8px;font-size:13px;
    border-radius:12px}
  .prow .pcard .atc .ic,.scard .atc .ic{width:19px;height:19px}
  .prow .pcard .disc{width:44px;height:44px}
  .prow .pcard .disc b,.scard .disc b{font-size:12px}
  .prow .pcard .disc i,.scard .disc i{font-size:7.5px}

  .mdots{display:flex}

  /* ────────────────────────── about ──────────────────────────
     three stacked full-width blocks became one column of headline, cartouche,
     paragraph and three stat rows; the stats are a real 3-up row here. */
  .sec--about{--blob-w:300px}
  .about__in{grid-template-columns:minmax(0,1fr);min-height:0}
  .about__copy{padding:0;text-align:center}
  .about__title{--aw:min(300px,86vw);width:var(--aw);margin-inline:auto;align-items:center}
  .about__text{width:100%;margin:12px 0 0;font-size:14.2px;line-height:2;
    text-align:start}                /* justify rivers badly in a 350px column */
  .slider{padding-block:20px 4px}
  .slider__blob{width:min(var(--blob-w),82%)}
  .slider__ring{width:calc(100% * 1.17)}
  /* every inset below was a px value tuned to the 481px cartouche; as a share
     of the viewport box they track whatever width the phone gives it */
  .slider .car__vp{top:-21%}
  .slider__img{width:74%;bottom:28%;left:50%}
  .slider__cap{bottom:17%;font-size:15px}
  .slider__dots{bottom:12.8%;gap:6px}
  .slider__dots button{width:22px;height:3px}
  .slider__nav{width:38px;height:38px}
  .slider__nav .ic{width:17px;height:17px}
  .slider__nav--prev{inset-inline-end:2px}
  .slider__nav--next{inset-inline-start:2px}
  .stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:20px;padding:0}
  .stat{flex-direction:column;align-items:center;text-align:center;gap:0;
    padding:12px 6px 11px;background:#f7f9f5;border-radius:14px}
  .stat__plus{width:12px;height:12px;margin:0 0 5px}
  .stat__n{margin:0;font-size:15.5px}
  .stat__d{width:auto;margin-top:3px;font-size:9.6px;line-height:1.55;text-align:center}

  /* ───────────────────── daily slaughter ─────────────────────
     five tiles wrapped 2+2+1; a full-bleed rail keeps them on one line */
  .animals{margin-top:20px;gap:10px;flex-wrap:nowrap;justify-content:flex-start;
    width:100vw;margin-inline:calc(50% - 50vw);padding:2px 16px 10px;
    overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding-inline:16px;
    scrollbar-width:none;overscroll-behavior-x:contain}
  .animals::-webkit-scrollbar{display:none}
  .mnav--scroll{display:flex;margin-top:4px}
  .animal{flex:0 0 114px;width:114px;scroll-snap-align:center}
  .animal__f{width:114px;height:126px}
  .animal__f::before{inset:11px}
  .animal__f::after{inset:12.5px}
  .animal__img{height:66px;top:29px}
  .animal__t{font-size:12.8px}
  .animal__s{font-size:11px;margin-top:2px}

  /* ───────────────────── new products ─────────────────────
     was the worst of the page: a 798px-wide two-column grid inside a vertical
     carousel, so seven of the eight cards sat off-screen and the featured card
     was entirely outside the viewport.  Here it is a horizontal pager of 2x2
     pages (four products in view) with the featured card as a wide row above.
     app.js drops .car--y below this width so a swipe no longer fights the
     page scroll. */
  .sec--new{padding:32px 0 28px}
  .new__notch,.new__leaf,.new__leaf2,.new__scroll{display:none}
  .new__title{font-size:20px}
  .new__sub{margin-top:6px;font-size:12.8px}
  .new__in{text-align:center}
  .new__grid{display:flex;flex-direction:column;gap:16px;margin-top:18px;
    padding:0;grid-template-columns:none}
  .new__grid>*{min-width:0}
  /* keep the control strip the 1024 tier reserves -- padding:0 here would drop
     the absolutely positioned arrows onto the last row of cards */
  .new__cars{order:2;grid-area:auto;margin:0;padding:0 0 56px;min-width:0}
  .new__cars .car__vp{height:auto;min-width:0;clip-path:inset(-16px 0px)}
  .new__cars .car__track{flex-direction:row;gap:12px;min-width:0}
  .new__cars .nbtn{width:44px;height:44px;box-shadow:0 6px 16px rgba(22,52,8,.26)}
  .new__cars .nbtn .ic{width:19px;height:19px}
  /* min-width:auto would floor each page at the min-content width of its
     cards, so the pager would be wider than the screen and slide off-centre */
  .ncards__page{flex:0 0 100%;min-width:0;display:grid;gap:12px;
    grid-template-columns:minmax(0,1fr);justify-content:stretch}

  /* the scalloped clip-path is a 385x195 landscape ornament that is unreadable
     at phone width.  A 2x2 page of portrait tiles left each card ~165px wide
     with a 58px photo and a 12px title, so a page is now one column of four
     full-width rows: photo on the start side, title, then price and cart. */
  .ncard{width:100%;max-width:none;height:auto}
  .ncard__shape{width:100%;max-width:none;height:auto;min-height:128px;clip-path:none;
    border-radius:16px;padding:12px 14px;padding-inline-start:136px;
    justify-content:center;text-align:start;align-items:stretch;
    box-shadow:0 8px 20px rgba(0,0,0,.10)}
  /* a square box with contain, so portrait and landscape cuts sit alike */
  .ncard__img{left:auto;inset-inline-start:14px;top:50%;translate:0 -50%;
    width:108px;height:108px;max-width:none;object-fit:contain;
    filter:drop-shadow(0 5px 8px rgba(0,0,0,.16))}
  .ncard__t{font-size:15.6px;line-height:1.6}
  .ncard__t a{padding-block:4px}
  /* price under the title, cart at the far end of the same line */
  .ncard__row{flex-direction:row-reverse;justify-content:space-between;align-items:center;
    gap:10px;margin-top:8px}
  .ncard__cart{width:46px;height:46px;border-radius:12px}
  .ncard__cart .ic{width:21px;height:21px}
  .ncard .price{justify-content:flex-start;margin:0}
  .ncard .price__v{font-size:17.6px}
  .ncard .toman b{font-size:8.4px}
  .ncard .disc{top:8px;inset-inline-start:8px;width:36px;height:36px}
  .ncard .disc b{font-size:10px}
  .ncard .disc i{font-size:6px}

  /* featured card: a 320x455 portrait tower is half a phone screen on its own,
     so it lies down into photo beside title and price, with the actions a
     full-width row underneath where the cart label has room to be read */
  .bigcard{order:1;width:100%;max-width:none;grid-area:auto}
  .bigcard__shape{width:100%;aspect-ratio:auto;clip-path:none;border-radius:18px;
    display:grid;grid-template-columns:136px minmax(0,1fr);column-gap:16px;
    align-items:center;padding:16px;text-align:start;
    box-shadow:0 10px 24px rgba(0,0,0,.12)}
  .bigcard__img{grid-area:1/1/3/2;align-self:center;width:100%;margin:0}
  .bigcard__t{grid-column:2;grid-row:1;align-self:end;margin-top:0;font-size:17.4px;
    line-height:1.6}
  .bigcard .price{grid-column:2;grid-row:2;align-self:start;margin-top:8px;
    justify-content:flex-start}
  .bigcard .price__v{font-size:19.6px}
  .bigcard .toman b{font-size:8.6px}
  .bigcard .acts{grid-column:1/-1;grid-row:3;margin-top:14px;gap:10px}
  .bigcard .atc{flex:1;justify-content:center;height:48px;padding:0 12px;gap:8px;
    font-size:13px;border-radius:12px}
  .bigcard .atc .ic{width:19px;height:19px}
  .bigcard .fav{flex:none;width:48px;height:48px;border-radius:12px}
  .bigcard .fav .ic{width:20px;height:20px}
  .bigcard .disc{top:10px;inset-inline-start:auto;inset-inline-end:10px;width:40px;height:40px}
  .bigcard .disc b{font-size:11px}
  .bigcard .disc i{font-size:6.5px}

  /* ───────────────────── special products ─────────────────────
     the 1024 tier let the carousel track wrap, which a transform slider cannot
     survive -- one card showed and the rest were stranded off-band */
  .special__head{padding:0}
  .special__band{margin-top:14px;padding-bottom:18px}
  .special__band::before{border-radius:20px}
  .special__cards{order:1;margin:0;padding:18px 12px 0;transform:none;flex-wrap:nowrap}
  .special__cards .car__vp{clip-path:inset(-14px 0px)}
  .special__cards .car__track{gap:12px;flex-wrap:nowrap}
  .scard{flex:0 0 80%;min-width:0;padding:22px 16px 16px;
    border-radius:140px 140px 18px 18px;box-shadow:0 8px 18px rgba(0,0,0,.10)}
  .scard__media{height:150px}
  .scard__img{max-height:148px}
  .scard .disc{top:4px;inset-inline-start:auto;inset-inline-end:10px;width:44px;height:44px}
  .special__cards .mdots{margin-top:16px}
  .orgcard{order:2;min-height:0;margin:14px 12px 0;padding:18px 18px 0;border-radius:18px}
  .orgcard__t{font-size:18px}
  .orgcard__s{font-size:13px}
  .orgcard__img{width:150px;bottom:0}
  .orgcard__dash{display:none}

  /* ───────────────────── promo banners ─────────────────────
     three stacked banners cost ~430px of scroll for one message each */
  .promos{display:flex;grid-template-columns:none;gap:10px;
    width:100vw;margin-inline:calc(50% - 50vw);
    padding:34px 16px 26px;                 /* the art breaks out of the card */
    overflow-x:auto;scroll-snap-type:x mandatory;scroll-padding-inline:16px;
    scrollbar-width:none;overscroll-behavior-x:contain;justify-items:stretch}
  .promos::-webkit-scrollbar{display:none}
  .promo{flex:0 0 84%;width:auto;max-width:none;scroll-snap-align:center}

  /* ───────────────────── category icons ─────────────────────
     one per row below 520 -- six tiles over ~1100px of scroll */
  .cats{display:grid;grid-template-columns:repeat(3,1fr);gap:18px 8px;padding:0}
  .cat{width:auto}
  .cat__f{height:86px}
  .cat__f::after{width:98px;height:98px;border-width:7px}
  .cat__img{height:68px}
  .cat__t{margin-top:12px;font-size:12.4px;line-height:1.35}

  /* ────────────────────────── blog ──────────────────────────
     the 4-per-view basis was never overridden, so four ~80px columns of
     one-word lines survived all the way down */
  .blog__head{gap:10px;align-items:center;flex-wrap:nowrap;padding:0}
  .allbtn{flex:none;height:36px;padding:0 12px;gap:8px;font-size:12.5px}
  .allbtn .ic{width:15px;height:15px}
  .blog__grid{margin-top:16px}
  .blog__grid .car__track{gap:12px}
  /* one post in view like the product rows; at that width the excerpt fits
     again, clamped so a long one cannot stretch the row */
  .bcard{flex:0 0 80%;border-radius:16px}
  .bcard__img{aspect-ratio:16/10}
  .bcard__b{padding:24px 14px 14px}
  .tag{top:-14px;inset-inline-start:12px;height:26px;padding:0 10px;font-size:11.6px}
  .bcard__t{font-size:15px;line-height:1.75;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .bcard__x{margin-top:4px;font-size:12.8px;line-height:1.85;
    display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .bcard__f{margin-top:14px;gap:6px}
  .bcard__d{gap:6px;font-size:11.6px;white-space:nowrap;min-width:0}
  .bcard__d .ic{width:16px;height:16px}
  .bcard__go{width:44px;height:36px;flex:none}
  .bcard__go .ic{width:18px;height:18px}
  .blog__dots{gap:6px;margin-top:16px}
  .blog__dots button{width:7px;height:7px;border-radius:99px}
  .blog__dots button.is-on{width:20px}

  /* ───────────────────── in-person purchase ───────────────────── */
  .visit{width:calc(100% - 32px);margin-top:56px;gap:14px;padding:16px 18px;border-radius:var(--r-card)}
  .visit+.feat{margin-top:40px}
  .visit__ic{width:44px;height:44px}
  .visit__ic .ic{width:21px;height:21px}
  .visit__h{font-size:15.5px}
  .visit__a{margin-top:1px;font-size:12.8px;line-height:1.85}

  /* ───────────────────── feature bar ───────────────────── */
  .feat{border-bottom-width:4px}
  .feat__notch{display:none}
  .feat__in{grid-template-columns:1fr 1fr;gap:20px 10px;padding:22px 0;height:auto}
  .feat__i{gap:10px;justify-content:flex-start;text-align:start}
  .feat__ic{width:31px;height:31px}
  .feat__ic--wide{width:49px;height:49px}
  .feat__i b{font-size:12.4px;line-height:1.45}
  .feat__i span{font-size:9.6px;line-height:1.45}

  /* ────────────────────────── footer ────────────────────────── */
  .ft{padding:34px 0 0}
  .ft__credit{margin-top:34px;padding:22px 0 46px}
  .ft__wm{width:170px;top:6px}
  .credit{gap:9px;font-size:11.8px}
  .credit__logo{width:90px}
  .ft__top{grid-template-columns:1fr;text-align:center}
  .ft__logo{width:118px;justify-self:center;margin:0 auto 12px}
  .ft__about{text-align:center}
  .ft__about h2{font-size:18px}
  .ft__about p{margin-top:8px;font-size:12.8px;line-height:2;text-align:start}
  .ft__rule{margin:26px 0 20px}
  .ft__cols{grid-template-columns:1fr 1fr;gap:20px 14px}
  .ft__cols{grid-template-columns:1fr}
  .ft__col{border-bottom:1px solid #f0f0f0}
  .ft__col h3{margin:0;padding:2px 0 2px 0;font-size:14.5px}
  .ft__col h3::before{top:9px;width:5px;height:17px}
  .ft__acc{cursor:pointer;padding:11px 0 11px 13px;padding-inline:13px 0}
  .ft__acc-ic{display:block}
  .ft__col[data-open="0"] ul{display:none}
  .ft__col[data-open="1"] .ft__acc-ic{transform:rotate(180deg)}
  .ft__col ul{padding-bottom:6px}
  .ft__col li a{gap:7px;font-size:12.6px;line-height:2.7}
  .ft__trust{grid-column:1/-1;grid-template-columns:1fr 1fr;gap:10px;margin-top:18px}
  .trust{min-height:0;padding:14px 10px}
  .trust img{max-height:104px;width:auto;object-fit:contain}
  .ft__contact{grid-column:1/-1;max-width:none}
  .phone{height:94px;padding-inline:18px 62px;border-radius:14px}
  .phone::after{width:94px;height:94px;inset-inline-end:-9px}
  .phone__ic{inset-inline-end:18px;width:34px;height:34px}
  .phone__n{font-size:21px}
  .phone__s{font-size:12px}
  .ft__h{margin:18px 0 10px;font-size:15px}
  .ft__h::before{top:4px;width:5px;height:17px}
  .track{height:56px;padding:0 6px;gap:6px}
  .track__in{padding-inline:10px;font-size:13.4px}
  .track__btn{height:42px;padding:0 14px;font-size:13.4px}
  .track__msg{font-size:12.4px}

  .toast{font-size:13.4px;padding:11px 18px;bottom:calc(18px + var(--tabbar-h,0px))}
}

/* Under 375px the header's category button would reach the centred logo, so
   it drops the chevron and keeps the bars and the label. */
@media (max-width:374px){
  .catbtn .ic-chev{display:none}
}

/* Above a phone's width one card at 80% would be a ~500px frame of mostly
   white, so the rows go back to two in view -- still ~260px each, the size the
   single card has on a phone.  46% keeps the carousel's rounding on 2. */
@media (min-width:521px) and (max-width:680px){
  .prow .pcard,.scard,.bcard{flex-basis:46%}
}

/* small phones — 360px and down */
@media (max-width:400px){
  .dquick{grid-template-columns:1fr}    /* both labels in full, one per row */
  .sec,.hero__body,.new__in,.feat__in,.ft,.special__in,.visit{width:calc(100% - 24px)}
  .sec--special{width:100%}
  .shields,.animals,.promos{padding-inline:12px;scroll-padding-inline:12px}
  .plate__title{font-size:18px}
  .new__title,.sec__h{font-size:18px}
  .hero__title{--lockw:min(252px,78vw)}
  .count__b{width:31px;height:31px;font-size:12.5px}
  /* the homepage's single card is ~240px here: trim the artwork, keep the type */
  .prow .pcard__media{height:172px}
  .prow .pcard__wm{width:190px;top:84px}
  .prow .pcard__img{max-height:162px}
  .scard__media{height:132px}
  .scard__img{max-height:130px}
  .prow .pcard__t,.scard__t{font-size:16.4px}
  .prow .pcard .price__v,.scard .price__v{font-size:18.4px}
  .prow .pcard .atc,.scard .atc{font-size:12.4px;padding:0 8px}
  .ncard__shape{padding-inline-start:116px}
  .ncard__img{inset-inline-start:12px;width:92px;height:92px}
  .ncard__t{font-size:14.6px}
  .ncard .price__v{font-size:16.4px}
  .stat__n{font-size:14px}
  .stat__d{font-size:9px}
  .cats{gap:16px 6px}
  .cat__f{height:78px}
  .cat__f::after{width:88px;height:88px;border-width:6px}
  .cat__img{height:62px}
  .cat__t{font-size:11.5px}
  .bigcard__shape{grid-template-columns:112px minmax(0,1fr);column-gap:12px;padding:14px}
  .bigcard__t{font-size:15.6px}
  .ft__col li a{font-size:11.8px}
}

@media (prefers-reduced-motion:reduce){
  *{transition-duration:.01ms!important;animation-duration:.01ms!important}
}

/* ==========================================================================
   Product detail page
   --------------------------------------------------------------------------
   Four zones rather than two columns.  The first pass stacked nine blocks in
   one column while the gallery column ran out of content after the photo; the
   page now reads identity → (picture | choices) → money, with the money in a
   sticky column of its own.

   No new vocabulary: the tiles and chips are `.count__b` grown up (bordered
   white tile, --r-sm, green when chosen), the stepper and the review field are
   the `.track` shell with its `.is-bad` error language, and the cards keep the
   site's one hover — rise --card-lift, cast --card-sh, cancelled at <=1024px
   where :hover latches on touch.
   ========================================================================== */
.pdp{width:min(var(--cw),100% - 48px);margin-inline:auto;padding-top:22px}

/* breadcrumb --------------------------------------------------------------- */
.crumbs__l{display:flex;flex-wrap:wrap;align-items:center;gap:7px;
  font-size:13px;font-weight:500;color:var(--muted)}
.crumbs__l li{display:flex;align-items:center;gap:7px}
.crumbs__l li+li::before{content:"/";color:#cfcfcf;font-size:12px}
.crumbs__l a{transition:color .18s}
.crumbs__l a:hover{color:var(--green-d)}
.crumbs__l [aria-current]{color:var(--ink2);font-weight:700}

/* ── the four zones ──────────────────────────────────────────────────────
   In RTL the first column is the rightmost, so: gallery right, choices in the
   middle, money on the left.  Identity spans the first two and the money
   column spans both rows, which is what lets it stick. */
.pdp__top{
  display:grid;
  grid-template-columns:minmax(0,398px) minmax(0,1fr) minmax(0,330px);
  grid-template-areas:
    "ident ident buy"
    "gal   opts  buy";
  column-gap:36px;row-gap:26px;
  margin-top:18px;align-items:start;
}
.ident{grid-area:ident;padding-bottom:4px;border-bottom:1px solid var(--line)}
.gal{grid-area:gal;align-self:start;position:sticky;top:calc(var(--hh-c) + 16px)}
.opts{grid-area:opts;min-width:0}
.buy{grid-area:buy;align-self:start;position:sticky;
     top:calc(var(--hh-c) + 16px)}

/* ── identity ────────────────────────────────────────────────────────────── */
.ident__h{font-family:var(--font-head);font-size:31px;font-weight:800;
  color:var(--ink);line-height:1.42}
.ident__sub{margin-top:7px;font-size:15.2px;line-height:1.85;color:var(--body);
  max-width:64ch}
.ident__meta{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:12px;
  font-size:13px;font-weight:600;color:var(--muted)}
.ident__dot{width:4px;height:4px;border-radius:50%;background:#d7d7d7}
.ident__reviews{color:var(--green-d);text-decoration:underline;text-underline-offset:3px}
.ident__sku bdi{color:var(--ink2)}

/* stars — one clipped shape, three states */
.stars{display:inline-flex;gap:2px;vertical-align:-2px}
.star{width:15px;height:15px;background:#e0e0e0;
  clip-path:polygon(50% 0,61.8% 35.4%,100% 35.4%,69.1% 57.2%,80.9% 92.6%,50% 70.8%,19.1% 92.6%,30.9% 57.2%,0 35.4%,38.2% 35.4%)}
.star.is-on{background:var(--gold)}
.star.is-half{background:linear-gradient(to left,var(--gold) 50%,#e0e0e0 50%)}
html[dir="rtl"] .star.is-half{background:linear-gradient(to right,var(--gold) 50%,#e0e0e0 50%)}

.stock{display:inline-flex;align-items:center;gap:6px;height:26px;padding:0 10px;
  border-radius:999px;font-size:12.3px;font-weight:700}
.stock::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
.stock--in{background:var(--pale);color:var(--green-dd)}
.stock--out{background:#fdecea;color:#c0524a}

/* facts — one row across the identity block, each with its own drawn mark */
.facts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin:17px 0 16px}
.fact{display:flex;align-items:center;gap:10px;padding:10px 12px;
  border:1px solid var(--line);border-radius:var(--r-md);background:#fcfdfb}
.fact__i{flex:none;width:34px;height:34px;display:grid;place-items:center;
  border-radius:10px;background:var(--pale);color:var(--green-dd)}
.fact__i .ic{width:19px;height:19px;stroke-width:1.5}
.fact__t{display:flex;flex-direction:column;gap:1px;min-width:0}
.fact__t b{font-size:11px;font-weight:600;color:var(--muted)}
.fact__t span{font-size:13.2px;font-weight:700;color:var(--ink2);line-height:1.5}

/* ── gallery ─────────────────────────────────────────────────────────────── */
/* The stage and each thumb are one fixed cell (minmax(0,1fr)), not an auto
   track: an auto row grows to the photo, the photo's max-height % then
   resolves against itself, and a portrait cut spills out of the frame. */
.gal__stage{position:relative;display:grid;place-items:center;grid-template:minmax(0,1fr)/minmax(0,1fr);
  aspect-ratio:1/.92;border-radius:var(--r-lg);overflow:hidden;
  background:linear-gradient(180deg,var(--card-t),var(--card-b))}
.gal__stage .disc{top:14px;inset-inline-start:14px;inset-inline-end:auto;width:52px;height:52px}
.gal__stage .disc b{font-size:14px}
.gal__wm{position:absolute;width:62%;max-width:360px;opacity:.5;pointer-events:none}
.gal__img{position:relative;max-width:76%;max-height:78%;object-fit:contain;
  filter:drop-shadow(0 22px 30px rgba(40,60,20,.18));
  transition:opacity .16s ease,transform .35s cubic-bezier(.33,.9,.32,1)}
.gal__stage:hover .gal__img{transform:translateY(-6px) scale(1.02)}
.gal__zoom{position:absolute;inset-inline-start:16px;bottom:16px;
  width:42px;height:42px;display:grid;place-items:center;
  border:1px solid #e4efda;border-radius:50%;background:#fff;color:var(--green);
  box-shadow:0 8px 20px rgba(20,40,10,.14);transition:background .2s,color .2s,transform .2s}
.gal__zoom .ic{width:20px;height:20px}
.gal__zoom:hover{background:var(--green);color:#fff;transform:translateY(-2px)}
.gal__thumbs{display:flex;flex-wrap:wrap;gap:10px;margin-top:13px}
.gal__t{width:78px;height:78px;display:grid;place-items:center;grid-template:minmax(0,1fr)/minmax(0,1fr);padding:8px;
  border:1px solid var(--line);border-radius:var(--r-md);background:#fff;
  transition:border-color .18s,box-shadow .18s,transform .18s}
.gal__t img{max-width:100%;max-height:100%;object-fit:contain}
.gal__t:hover{border-color:var(--ring);transform:translateY(-2px)}
.gal__t.is-on{border-color:var(--green);box-shadow:inset 0 0 0 1px var(--green)}
/* names whatever the stage is currently showing */
.gal__cap{margin-top:10px;font-size:12.4px;font-weight:600;color:var(--muted)}

/* ── option groups ───────────────────────────────────────────────────────── */
.optg{border:0;margin:0;padding:0 0 22px;min-width:0}
.optg+.optg{border-top:1px solid #f1f1f1;padding-top:20px}
.optg[hidden]{display:none}
.optg__h{display:flex;align-items:center;gap:9px;padding:0;margin-bottom:3px;
  font-size:16.4px;font-weight:800;color:var(--ink)}
.optg__opt{font-size:11.5px;font-weight:600;color:var(--muted);
  background:#f3f3f3;border-radius:999px;padding:2px 8px}
.optg__help{margin:0 0 12px;font-size:12.8px;line-height:1.8;color:var(--muted)}

/* the inputs stay real — grouping, arrow keys and labels come from the
   platform; only their painted face is ours */
.tile input,.chip2 input,.chk input{position:absolute;width:1px;height:1px;
  margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(146px,1fr));gap:9px}
.tile{display:block;cursor:pointer}
.tile__in{position:relative;display:grid;gap:2px;justify-items:center;text-align:center;
  height:100%;padding:13px 10px 11px;background:#fff;
  border:1px solid var(--line);border-radius:var(--r-md);
  transition:border-color .18s,box-shadow .18s,background .18s}
/* the drawn form sits on its own pale disc, which fills green when chosen */
.tile__f{width:52px;height:52px;display:grid;place-items:center;margin-bottom:5px;
  border-radius:50%;background:#f4f7f0;color:#7d8f6d;
  transition:background .18s,color .18s}
.tile__ic{width:29px;height:29px;stroke-width:1.5}
.tile__t{font-size:13.6px;font-weight:700;color:var(--ink2);line-height:1.5}
.tile__n{font-size:11.5px;font-weight:500;color:var(--muted);line-height:1.6}
.tile__tick{position:absolute;inset-inline-end:8px;top:8px;width:17px;height:17px;
  padding:2px;border-radius:50%;background:var(--green);color:#fff;stroke-width:3;
  opacity:0;transform:scale(.6);transition:opacity .18s,transform .18s}
.tile:hover .tile__in{border-color:var(--ring)}
.tile:hover .tile__f{background:var(--pale);color:var(--green-d)}
.tile input:checked+.tile__in{border-color:var(--green);background:#f7fbf3;
  box-shadow:inset 0 0 0 1px var(--green)}
.tile input:checked+.tile__in .tile__f{background:var(--green);color:#fff}
.tile input:checked+.tile__in .tile__tick{opacity:1;transform:none}
.tile input:focus-visible+.tile__in{outline:2px solid var(--green);outline-offset:2px}

.chips2{display:flex;flex-wrap:wrap;gap:8px}
.chip2{cursor:pointer}
.chip2__in{display:flex;align-items:center;gap:9px;padding:9px 13px;background:#fff;
  border:1px solid var(--line);border-radius:var(--r-md);
  transition:border-color .18s,box-shadow .18s,background .18s}
.chip2__ic{width:24px;height:24px;flex:none;color:#8b9b7c;stroke-width:1.5;
  transition:color .18s}
.chip2__t{display:flex;flex-direction:column;gap:1px}
.chip2__t b{font-size:13.6px;font-weight:700;color:var(--ink2)}
.chip2__t i{font-size:11.5px;font-style:normal;font-weight:500;color:var(--muted)}
.chip2:hover .chip2__in{border-color:var(--ring)}
.chip2 input:checked+.chip2__in{border-color:var(--green);background:#f7fbf3;
  box-shadow:inset 0 0 0 1px var(--green)}
.chip2 input:checked+.chip2__in .chip2__ic{color:var(--green-d)}
.chip2 input:focus-visible+.chip2__in{outline:2px solid var(--green);outline-offset:2px}

.checks{display:grid;gap:8px}
.chk{display:flex;align-items:center;gap:11px;padding:11px 13px;cursor:pointer;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-md);
  transition:border-color .18s,background .18s}
.chk__box{width:21px;height:21px;flex:none;display:grid;place-items:center;
  border:1.6px solid #d3d3d3;border-radius:7px;color:transparent;
  transition:background .18s,border-color .18s,color .18s}
.chk__box .ic{width:13px;height:13px;stroke-width:3}
.chk__ic{width:25px;height:25px;flex:none;color:#8b9b7c;stroke-width:1.5;
  transition:color .18s}
.chk__t{display:flex;flex-direction:column;gap:1px;min-width:0}
.chk__t b{font-size:13.8px;font-weight:700;color:var(--ink2)}
.chk__t i{font-size:11.7px;font-style:normal;font-weight:500;color:var(--muted)}
.chk:hover{border-color:var(--ring)}
.chk input:checked~.chk__box{background:var(--green);border-color:var(--green);color:#fff}
.chk input:checked~.chk__ic{color:var(--green-d)}
.chk:has(input:checked){border-color:var(--green);background:#f7fbf3}
.chk input:focus-visible~.chk__box{outline:2px solid var(--green);outline-offset:2px}

.sel{position:relative}
.sel select{width:100%;height:52px;padding-inline:14px 42px;cursor:pointer;
  font:600 14.2px var(--font-body);color:var(--ink2);
  background:#fff;border:1px solid #e2e2e2;border-radius:var(--r-md);
  -webkit-appearance:none;appearance:none;transition:border-color .18s}
.sel select:hover{border-color:var(--ring)}
.sel select:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.sel__ic{position:absolute;inset-inline-end:14px;top:50%;translate:0 -50%;
  width:17px;height:17px;color:#8f8f8f;pointer-events:none}

/* price deltas, stated on the choice itself */
.opt__p{font-size:11.4px;font-weight:700;color:var(--ink2);margin-inline-start:auto}
.tile .opt__p{margin-inline-start:0;margin-top:3px}
.opt__p--free{color:#a6a6a6;font-weight:600}
.opt__p--less{color:var(--green-d)}

/* ── quantity ────────────────────────────────────────────────────────────── */
.qty{border-top:1px solid #f1f1f1;padding-top:20px}
.qty__h{justify-content:space-between}
.qty__min{font-size:11.8px;font-weight:600;color:var(--muted)}
.qpresets{display:flex;flex-wrap:wrap;gap:7px;margin:11px 0 12px}
.qp{height:36px;padding:0 13px;border:1px solid var(--line);border-radius:var(--r-sm);
  background:#fff;font-size:13px;font-weight:700;color:var(--body);
  transition:background .18s,color .18s,border-color .18s}
.qp:hover{border-color:var(--ring);color:var(--ink2)}
.qp.is-on{background:var(--green);border-color:var(--green);color:#fff}
.qrow{display:flex;flex-wrap:wrap;align-items:center;gap:14px}
.qstep{display:flex;align-items:center;height:56px;padding:0 5px;
  border:1px solid #e2e2e2;border-radius:var(--r-md);background:#fff}
.qstep__b{width:44px;height:44px;display:grid;place-items:center;border-radius:9px;
  color:var(--green-d);transition:background .18s,color .18s}
.qstep__b .ic{width:18px;height:18px;stroke-width:2.4}
.qstep__b:hover{background:var(--pale)}
.qstep__f{display:flex;align-items:baseline;gap:5px;min-width:96px;justify-content:center}
.qstep__in{width:56px;border:0;background:none;text-align:center;
  font-size:17.5px;font-weight:800;color:var(--ink)}
.qstep__in:focus-visible{outline:2px solid var(--green);outline-offset:3px;border-radius:5px}
.qstep__u{font-size:12.4px;font-style:normal;font-weight:600;color:var(--muted)}
.qty__hint{font-size:13px;font-weight:600;color:var(--green-d)}

/* the compact stepper inside a cart line */
.qstep--sm{height:36px;padding:0 3px;gap:2px}
.qstep--sm .qstep__b{width:28px;height:28px;border-radius:7px}
.qstep--sm .qstep__b .ic{width:14px;height:14px}
.qstep--sm .qstep__v{min-width:76px;text-align:center;font-size:13px;font-weight:700;color:var(--ink2)}
.qstep--sm .qstep__v i{font-style:normal;font-weight:600;color:var(--muted);font-size:11.5px}

/* ── the money column ────────────────────────────────────────────────────── */
.buy__in{border:1px solid #e3eeda;border-radius:var(--r-card);background:#fff;
  box-shadow:0 14px 34px rgba(40,60,20,.07);overflow:hidden}

/* what has been chosen, restated where the button is */
.bsum{padding:15px 16px 13px;background:linear-gradient(180deg,#fbfdf8,#f4f9ee);
  border-bottom:1px solid #e9f0e1}
.bsum__t{font-size:14.6px;font-weight:800;color:var(--ink2);line-height:1.6}
.bsum__l{margin-top:8px;display:grid;gap:5px}
.bsum__l li{display:flex;align-items:baseline;justify-content:space-between;gap:12px;
  font-size:12.3px}
.bsum__l span{color:var(--muted);font-weight:600;flex:none}
.bsum__l b{font-weight:700;color:var(--ink2);text-align:end}
.bsum__q b{color:var(--green-dd)}

.pbox{padding:15px 16px 14px}
.pbox__top{display:flex;align-items:flex-end;justify-content:space-between;gap:12px}
.pbox__lbl{font-size:12px;font-weight:600;color:var(--muted)}
.pbox__now{margin-top:2px}
.pbox__now .price__v{font-size:27px;font-weight:800}
.pbox__now .toman b{font-size:9.5px}
.pbox__was{display:flex;flex-direction:column;align-items:flex-end;gap:5px}
.pbox__was[hidden]{display:none}
.pbox__was .price{margin-top:0}
.pbox__off{background:var(--gold);color:#fff;font-size:11.5px;font-weight:800;
  padding:3px 9px;border-radius:999px}
.pbox__unit{margin-top:9px;font-size:12.4px;font-weight:600;color:var(--body)}
.pbox__more{display:flex;align-items:center;gap:5px;margin-top:9px;
  font-size:12.6px;font-weight:700;color:var(--green-d)}
.pbox__more .ic{width:15px;height:15px;transition:transform .2s}
.pbox__more.is-on .ic{transform:rotate(180deg)}
.pbox__break{margin:9px 0 0;padding:10px 12px;background:#fbfdf8;
  border-radius:var(--r-sm);border:1px solid #eaf0e3}
.pbox__break[hidden]{display:none}
.pbox__break>div{display:flex;align-items:baseline;justify-content:space-between;
  gap:12px;padding:4px 0;font-size:12.6px}
.pbox__break dt{color:var(--body);font-weight:500}
.pbox__break dd{margin:0;font-weight:700;color:var(--ink2);white-space:nowrap}
.pbox__break dd span{font-size:10.5px;font-weight:600;color:var(--muted)}
.pbox__break .is-sum{margin-top:4px;padding-top:8px;border-top:1px dashed #dfe7d6}
.pbox__break .is-sum dt{font-weight:800;color:var(--ink2)}
.pbox__break .is-sum dd{color:var(--green-d)}
/* the number both reference sites bury: what arrives after the bone comes off */
.pbox__net{margin-top:11px;padding:10px 12px;background:#f7fbf3;border-radius:var(--r-sm);
  border-inline-start:3px solid var(--green);font-size:12.5px;line-height:1.85;color:var(--body)}
.pbox__net b{color:var(--ink2)}
.pbox__net i{display:block;font-style:normal;font-size:11.4px;color:var(--muted)}

.buy__acts{margin:0;padding:0 16px 14px;gap:10px}
.buy__atc{flex:1 1 auto;height:54px;font-size:15.2px;border-radius:var(--r-md);
  background:var(--green);color:#fff;box-shadow:0 10px 24px rgba(91,146,45,.26)}
.buy__atc:hover,.buy__atc:focus-visible{background:var(--green-dd);color:#fff}
.buy__atc .ic{width:21px;height:21px}
.buy__acts .fav{width:54px;height:54px;border-radius:var(--r-md)}
.buy__acts .fav .ic{width:22px;height:22px}

.promise{display:grid;gap:2px;padding:12px 10px 12px;border-top:1px solid #f0f0f0;
  background:#fcfdfb}
.promise li{display:flex;align-items:center;gap:11px;padding:6px}
.promise__b{flex:none;width:36px;height:36px;display:grid;place-items:center;
  border-radius:11px;background:var(--pale);color:var(--green-dd)}
.promise__b .ic{width:20px;height:20px;stroke-width:1.5}
.promise__t{display:flex;flex-direction:column;min-width:0}
.promise__t b{font-size:13px;font-weight:700;color:var(--ink2);line-height:1.55}
.promise__t i{font-size:11.6px;font-style:normal;color:var(--muted);line-height:1.55}

/* ── tabs / accordion ────────────────────────────────────────────────────── */
.tabs{margin-top:64px}
.tabs__list{display:flex;flex-wrap:wrap;gap:4px;border-bottom:1px solid var(--line)}
.tabs__b{position:relative;height:47px;padding:0 17px;font-size:14.8px;font-weight:700;
  color:var(--muted);transition:color .18s}
.tabs__b::after{content:"";position:absolute;inset-inline:10px;bottom:-1px;height:3px;
  border-radius:3px 3px 0 0;background:var(--green);
  transform:scaleX(0);transition:transform .22s}
.tabs__b:hover{color:var(--ink2)}
.tabs__b.is-on{color:var(--ink)}
.tabs__b.is-on::after{transform:none}
.tabs__p{padding-top:22px}
.tabs__p[data-open="0"]{display:none}
.tabs__h{margin:0}
.tabs__acc{font:inherit;color:inherit;text-align:start;cursor:default;width:100%}
.tabs__acc-ic{display:none}
.tabs__body{max-width:74ch;font-size:14.6px;line-height:2.05;color:var(--body)}
.tabs__body p+p{margin-top:13px}
.tabs__sh{margin:22px 0 10px;font-size:15.4px;font-weight:800;color:var(--ink2)}
.tabs__note{margin-top:14px;padding:11px 13px;background:#fbfdf8;border:1px solid #e7efdf;
  border-radius:var(--r-sm);font-size:12.8px;line-height:1.95;color:var(--body);max-width:74ch}
.tabs__note b{color:var(--ink2)}

.spectbl{width:100%;max-width:760px;border-collapse:collapse;font-size:13.8px}
.spectbl tr{border-bottom:1px solid #f0f0f0}
.spectbl tr:nth-child(odd){background:#fcfcfc}
.spectbl th{width:38%;text-align:start;padding:11px 13px;font-weight:600;
  color:var(--muted);vertical-align:top}
.spectbl td{padding:11px 13px;font-weight:700;color:var(--ink2);line-height:1.8}

.pills{display:flex;flex-wrap:wrap;gap:7px}
.pill{display:inline-flex;align-items:center;height:32px;padding:0 13px;
  border-radius:999px;background:var(--pale);color:var(--green-dd);
  font-size:12.8px;font-weight:700}
.pills--soft .pill{background:#f4f4f4;color:var(--body)}

.rev__sum{display:flex;align-items:center;gap:11px}
.rev__avg{font-size:32px;font-weight:800;color:var(--ink);line-height:1}
.rev__n{font-size:12.8px;font-weight:600;color:var(--muted)}
.rev__soon{margin-top:12px;font-size:13.6px;line-height:1.95;color:var(--body)}
.rev__form{margin-top:15px;max-width:520px}

/* ── related ─────────────────────────────────────────────────────────────── */
.sec--rel{margin-top:70px;padding-bottom:10px}
.rel{margin-top:22px}
.rel__track{display:flex;gap:11px}
.rel__c{position:relative;flex:0 0 calc((100% - 33px)/4);padding:22px 16px 18px;
  background:#fff;border:1px solid #f0f0f0;border-radius:var(--r-card);text-align:center;
  transition:transform .25s,box-shadow .25s,border-color .25s}
.rel__m{display:grid;place-items:center;height:132px}
.rel__img{max-height:126px;object-fit:contain;
  transition:transform .3s cubic-bezier(.33,.9,.32,1)}
.rel__t{margin-top:9px;font-size:15.4px;font-weight:700;color:#141414;line-height:1.6}
.rel__c .price{margin-top:11px}
.rel__c .acts{margin-top:12px;gap:9px}
.rel__c .atc{height:42px;padding:0 14px;font-size:10px}
.rel__c .fav{width:42px;height:42px}
.rel__c .disc{width:38px;height:38px;inset-inline-start:12px;top:12px}
.rel__c:hover{transform:translateY(var(--card-lift));box-shadow:var(--card-sh);border-color:#fff}
.rel__c:hover .rel__img{transform:translateY(-6px) scale(1.03)}

/* ── cart sheet ──────────────────────────────────────────────────────────
   Same panel as the menu, entering from the opposite edge.  In RTL the menu
   sits on the right, so the cart comes in from the left and never reads as
   the menu reopening. */
.drawer--cart .drawer__panel{inset-inline-start:auto;inset-inline-end:0;--tx:100%;
  width:min(392px,92vw)}
html[dir="rtl"] .drawer--cart .drawer__panel{--tx:-100%}
.cartd__h{font-family:var(--font-head);font-size:19px;font-weight:800;color:var(--ink);
  display:flex;align-items:center;gap:9px}
.cartd__n{min-width:24px;height:24px;padding:0 7px;border-radius:999px;
  background:var(--green);color:#fff;font-size:12px;font-weight:700;
  display:grid;place-items:center}
.cartd__body{padding:14px 13px 20px}
.cartd__list{display:grid;gap:10px}
.cline{position:relative;display:flex;gap:11px;padding:11px;
  border:1px solid var(--line);border-radius:var(--r-md);background:#fff}
.cline__img{width:62px;height:62px;flex:none;object-fit:contain;
  background:linear-gradient(180deg,var(--card-t),var(--card-b));border-radius:10px;padding:5px}
.cline__img--none{background:var(--pale)}
.cline__main{flex:1 1 auto;min-width:0}
.cline__t{font-size:14px;font-weight:700;color:var(--ink2);line-height:1.6;
  padding-inline-end:22px}
.cline__opts{display:flex;flex-wrap:wrap;gap:4px 8px;margin-top:4px}
.cline__opts li{font-size:11.4px;font-weight:600;color:var(--ink2)}
.cline__opts i{font-style:normal;color:var(--muted);font-weight:500}
.cline__row{display:flex;align-items:center;justify-content:space-between;
  gap:10px;margin-top:9px}
.cline__p{margin-top:0}
.cline__p .price__v{font-size:15px}
.cline__x{position:absolute;inset-inline-end:9px;top:9px;width:26px;height:26px;
  display:grid;place-items:center;border-radius:8px;color:#b9b9b9;
  transition:background .18s,color .18s}
.cline__x .ic{width:15px;height:15px}
.cline__x:hover{background:#fdecea;color:#c0524a}
.cartd__empty{display:grid;justify-items:center;gap:12px;padding:46px 18px;text-align:center}
.cartd__empty-ic{width:52px;height:52px;color:#d8e3cd;stroke-width:1.3}
.cartd__empty b{display:block;font-size:15.5px;font-weight:800;color:var(--ink2)}
.cartd__empty span{font-size:13px;color:var(--muted)}
.cartd__ft{display:grid;gap:9px;background:#fbfdf8;border-top:1px solid #eaf0e3}
.cartd__ft[hidden]{display:none}
.cartd__sum{display:flex;align-items:baseline;justify-content:space-between;
  font-size:13.6px;font-weight:600;color:var(--body)}
.cartd__sum b{font-size:19px;font-weight:800;color:var(--green-d)}
.cartd__sum .toman{display:inline-flex;margin-inline-start:4px}
.cartd__note{font-size:11.6px;color:var(--muted)}
.cartd__go{display:flex;align-items:center;justify-content:center;gap:8px;min-height:52px;
  padding:6px 16px;border-radius:var(--r-md);background:var(--green-d);color:#fff;
  font-size:15.5px;font-weight:800;line-height:1.45;text-align:center;transition:background .2s,transform .2s,box-shadow .2s}
.cartd__go .ic{width:18px;height:18px}
.cartd__go:hover{background:var(--green-dd);transform:translateY(var(--btn-lift));
  box-shadow:var(--lit-sh)}
/* The sheet is for a quick look; /cart/ is where a basket is actually edited.
   A quiet second route rather than a second button, so the primary action
   stays unambiguous. */
.cartd__page{display:block;margin-top:9px;text-align:center;
  font-size:13px;font-weight:600;color:#7b7b7b;text-decoration:underline;
  text-decoration-color:#d8d8d8;text-underline-offset:3px;transition:color .18s}
.cartd__page:hover{color:var(--green-dd);text-decoration-color:var(--ring)}

/* ── sticky buy bar ──────────────────────────────────────────────────────
   Below the dock (100) so an open contact panel still wins, and it publishes
   its height so the dock can step over it instead of sitting on top. */
.buybar{position:fixed;inset-inline:0;bottom:0;z-index:95;display:none;
  background:#fff;border-top:1px solid #eaf0e3;
  box-shadow:0 -10px 30px rgba(20,40,10,.10);
  padding:10px 16px calc(10px + env(safe-area-inset-bottom,0px));
  animation:barIn .22s ease both}
.buybar[hidden]{display:none}
@keyframes barIn{from{transform:translateY(100%)}to{transform:none}}
.buybar__in{display:flex;align-items:center;gap:12px;
  width:min(var(--cw),100% - 8px);margin-inline:auto}
.buybar__p{display:flex;flex-direction:column;line-height:1.4}
.buybar__p span{font-size:11.6px;font-weight:600;color:var(--muted)}
.buybar__p b{font-size:17px;font-weight:800;color:var(--green-d);white-space:nowrap}
.buybar__p b span{font-size:10.5px;color:var(--muted)}
.buybar__b{flex:1 1 auto;height:48px;justify-content:center;border-radius:var(--r-md);
  background:var(--green);color:#fff}
.buybar__b:hover{background:var(--green-dd);color:#fff}

/* ── lightbox ────────────────────────────────────────────────────────────
   Over the drawer (110), under the skip link and the toast. */
.lbox{position:fixed;inset:0;z-index:115;display:grid;place-items:center;padding:26px;
  background:rgba(12,20,6,.86);-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  animation:lboxIn .2s ease both}
@keyframes lboxIn{from{opacity:0}to{opacity:1}}
.lbox img{max-width:min(820px,100%);max-height:86vh;object-fit:contain;
  filter:drop-shadow(0 30px 50px rgba(0,0,0,.5))}
.lbox__x{position:absolute;inset-inline-end:22px;top:22px;width:44px;height:44px;
  display:grid;place-items:center;border-radius:50%;background:rgba(255,255,255,.14);
  color:#fff;transition:background .2s}
.lbox__x .ic{width:20px;height:20px;stroke-width:2}
.lbox__x:hover{background:rgba(255,255,255,.26)}
.lbox__x:focus-visible{outline:2px solid #fff;outline-offset:3px}

/* ── responsive ──────────────────────────────────────────────────────────── */
@media (max-width:1240px){
  /* the money column folds under the choices; the gallery spans and sticks */
  .pdp__top{
    grid-template-columns:minmax(0,352px) minmax(0,1fr);
    grid-template-areas:
      "ident ident"
      "gal   opts"
      "gal   buy";
    column-gap:30px;
  }
  .gal{align-self:start;position:sticky;top:calc(var(--hh-c) + 16px)}
  .buy{position:static}
  .ident__h{font-size:27px}
}
@media (max-width:1024px){
  .pdp__top{grid-template-columns:1fr;
    grid-template-areas:"ident" "gal" "opts" "buy";row-gap:24px}
  .gal{position:static;max-width:520px;margin-inline:auto}
  .buy__in{max-width:560px;margin-inline:auto}
  .rel__c{flex-basis:calc((100% - 22px)/3)}
  /* from the first touch width the heart goes up onto the photo, as the
     grid's own .pcard's does, so the cart button has the card's whole width
     and «افزودن به سبد خرید» one line — three to a row, it folded at 768px */
  .rel__c .acts{gap:0}
  .rel__c .fav{position:absolute;z-index:4;top:10px;inset-inline-start:10px;
    width:38px;height:38px;border-radius:11px;box-shadow:0 2px 8px rgba(0,0,0,.08)}
  .rel__c .fav .ic{width:17px;height:17px}
  .rel__c .disc{inset-inline-start:auto;inset-inline-end:10px}
  .rel__c .atc{width:100%;justify-content:center;white-space:nowrap;
    padding:0 8px;gap:6px;font-size:11px}
  .rel__c .atc .ic{width:16px;height:16px}
  /* :hover latches on touch, so the whole hover language stands down */
  .rel__c:hover,.gal__t:hover{transform:none}
  .rel__c:hover .rel__img,.gal__stage:hover .gal__img{transform:none}
  .tile:hover .tile__f{background:#f4f7f0;color:#7d8f6d}
}
@media (max-width:820px){
  .tabs{margin-top:48px}
  .tabs__list{display:none}
  /* the panels become an accordion: every heading is a handle */
  .tabs__p{padding-top:0;border-bottom:1px solid #f0f0f0}
  .tabs__p[data-open="0"]{display:block}
  .tabs__p[data-open="0"] .tabs__body{display:none}
  .tabs__acc{display:flex;align-items:center;gap:8px;cursor:pointer;padding:15px 2px}
  .tabs__acc-ic{display:block;width:16px;height:16px;margin-inline-start:auto;
    color:#a8a8a8;transition:transform .22s}
  .tabs__p[data-open="1"] .tabs__acc-ic{transform:rotate(180deg)}
  .tabs__h{font-size:15.6px;font-weight:800;color:var(--ink2)}
  .tabs__body{padding-bottom:18px}
  .sec--rel{margin-top:50px}
  /* the bar only earns its space where the buy panel has scrolled away */
  .buybar{display:block}
  .buybar[hidden]{display:none}
  /* Over the tab bar the buy bar becomes a second glass island of the same
     width.  The fixed box stays full width and transparent, and only its
     inner row is the card -- so the gap under the card is part of the
     height product.js publishes, and the dock clears both without knowing
     about either.  The gutters pass taps through, as the tab bar's do. */
  .has-tabbar .buybar{bottom:var(--tabbar-h);padding:0 12px 10px;
    background:none;border:0;box-shadow:none;pointer-events:none}
  .has-tabbar .buybar__in{width:min(480px,100%);padding:8px 16px 8px 8px;padding-inline:16px 8px;
    border-radius:24px;pointer-events:auto;
    background:linear-gradient(180deg,rgba(255,255,255,.93),rgba(246,250,242,.9));
    -webkit-backdrop-filter:blur(18px) saturate(1.8);backdrop-filter:blur(18px) saturate(1.8);
    border:1px solid rgba(255,255,255,.75);
    box-shadow:0 0 0 1px rgba(91,146,45,.10),0 16px 32px -14px rgba(40,72,16,.36),inset 0 1px 0 #fff}
  .has-tabbar .buybar__b{border-radius:17px}
  .dock,.dock__top{bottom:calc(22px + var(--tabbar-h,0px) + var(--buybar-h,0px))}
}
@media (max-width:680px){
  .pdp{width:calc(100% - 32px);padding-top:16px}
  .ident__h{font-size:22px}
  .ident__sub{font-size:14px}
  .facts{grid-template-columns:repeat(2,1fr)}
  .tiles{grid-template-columns:repeat(auto-fill,minmax(132px,1fr))}
  .tile__f{width:46px;height:46px}
  .tile__ic{width:26px;height:26px}
  .pbox__now .price__v{font-size:25px}
  .pbox__top{flex-wrap:wrap}
  .rel__c{flex-basis:calc((100% - 11px)/2)}
  .gal__t{width:66px;height:66px;padding:6px}
  .spectbl th{width:44%}
  .dock,.dock__top{bottom:calc(14px + var(--tabbar-h,0px) + var(--buybar-h,0px))}
}
@media (max-width:520px){
  .ident__h{font-size:20px}
  .qstep{width:100%;justify-content:space-between}
  .qrow{gap:10px}
  .qty__hint{width:100%}
  .buy__atc{font-size:14px}
  .tabs__body{font-size:13.8px}
  .rel__c{flex-basis:calc((100% - 11px)/2);padding:16px 11px 14px}
  /* the cart button's folded label used to stretch the card past its half
     of the row; held to it now, the price steps down a notch so «هر کیلو :»
     keeps its line beside a seven-digit price */
  .rel__c .price{gap:4px}
  .rel__c .price__v{font-size:16.4px}
  .spectbl{font-size:12.8px}
  .spectbl th,.spectbl td{padding:9px 10px}
  .fact{padding:9px 10px;gap:8px}
  .fact__i{width:30px;height:30px}
}
@media (max-width:400px){
  .tiles{grid-template-columns:1fr 1fr}
  .tile__t{font-size:12.6px}
  .tile__n{display:none}
  .buybar__p b{font-size:15px}
}

/* ==========================================================================
   Guide and policy pages  (help/*, track-order, privacy)
   --------------------------------------------------------------------------
   No new visual vocabulary either — the same trick the product page used.
   The page hero is the home hero's own lattice over --green closed by the
   feature bar's 5px gold rule; the medallions are the hero shields' traced
   clip-path (#sh-hex); section headings carry the footer column's green bar;
   callouts are `.tabs__note` grown a tone; cards keep the one hover language
   (--card-lift / --card-sh), cancelled at <=1024px where :hover latches.
   ========================================================================== */

/* ── page hero ───────────────────────────────────────────────────────────── */
.phero{
  position:relative;overflow:hidden;
  background:var(--green) url(assets/images/patern-bck-hero.png) center/846px 521px no-repeat;
  border-bottom:5px solid var(--gold);
  padding:30px 0 46px;text-align:center;
}
/* the about section's two ornaments, ghosted into the band's outer thirds —
   the lattice PNG only covers the middle 846px, so these fill the ends */
.phero__orn{position:absolute;pointer-events:none;opacity:.13;max-width:none}
.phero__orn--a{inset-inline-end:-34px;top:-26px;width:236px}
.phero__orn--b{inset-inline-start:26px;bottom:14px;width:86px;opacity:.22}
.phero__in{position:relative;z-index:1;width:min(var(--cw),100% - 48px);margin-inline:auto}

.crumbs--green .crumbs__l{justify-content:center;color:rgba(255,255,255,.72);font-weight:600}
.crumbs--green .crumbs__l li+li::before{color:rgba(255,255,255,.45)}
.crumbs--green .crumbs__l a:hover{color:#fff}
.crumbs--green .crumbs__l [aria-current]{color:#fff}

/* the shields' silhouette at badge scale: white face, green mark */
.phero__badge{
  display:grid;place-items:center;width:47px;height:54px;margin:19px auto 0;
  background:#fff;clip-path:url(#sh-hex);color:var(--green-d);
  filter:drop-shadow(0 6px 18px rgba(0,0,0,.16));
}
.phero__badge .ic{width:25px;height:25px;stroke-width:1.6}
.phero__kick{margin-top:13px;font-size:13px;font-weight:700;color:var(--gold);
  letter-spacing:.2px}
.phero__t{margin-top:4px;font-family:var(--font-head);font-size:34px;font-weight:800;
  color:#fff;line-height:1.5}
.phero__t em{font-style:normal;color:var(--gold)}
.phero__lead{max-width:63ch;margin:9px auto 0;font-size:14.8px;font-weight:500;
  line-height:2.05;color:rgba(255,255,255,.9)}

/* ── the two-column document ─────────────────────────────────────────────── */
.doc{
  width:min(var(--cw),100% - 48px);margin:38px auto 0;
  display:grid;grid-template-columns:272px minmax(0,1fr);gap:42px;align-items:start;
}
.doc__side{position:sticky;top:calc(var(--hh-c) + 18px);display:grid;gap:16px}
.doc__main{min-width:0}

/* ── sibling nav ─────────────────────────────────────────────────────────── */
.gnav{border:1px solid var(--line);border-radius:var(--r-card);background:#fff;
  padding:18px 14px 14px;box-shadow:0 8px 26px rgba(40,60,20,.05)}
.gnav__h{position:relative;padding-inline-start:16px;margin-bottom:12px;
  font-size:16px;font-weight:800;color:#131313}
.gnav__h::before{content:"";position:absolute;inset-inline-start:0;top:3px;
  width:7px;height:21px;border-radius:3px;background:var(--green)}
.gnav__l{display:grid;gap:2px}
.gnav__a{
  display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--r-md);
  font-size:13.8px;font-weight:600;color:#5f5f5f;line-height:1.6;
  transition:background .18s,color .18s;
}
.gnav__i{flex:none;display:grid;place-items:center;width:32px;height:32px;
  border-radius:9px;background:#f4f7f0;color:var(--green-d);transition:.18s}
.gnav__i .ic{width:18px;height:18px}
.gnav__t{flex:1;min-width:0}
.gnav__go{width:14px;height:14px;color:#c9c9c9;flex:none;transition:.18s}
.gnav__a:hover{background:#fafcf7;color:var(--ink2)}
.gnav__a:hover .gnav__i{background:var(--pale)}
.gnav__a:hover .gnav__go{color:var(--green)}
.gnav__a.is-on{background:var(--pale);color:var(--green-dd);font-weight:800}
.gnav__a.is-on .gnav__i{background:var(--green);color:#fff}
.gnav__a.is-on .gnav__go{color:var(--green-dd)}

/* ── the support card (the footer phone pill, in a column) ───────────────── */
.scall{
  position:relative;overflow:hidden;border-radius:var(--r-card);padding:20px 20px 18px;
  background:linear-gradient(145deg,#6aa636 0%,#8cb432 52%,#c4b70b 130%);color:#fff;
}
.scall::after{content:"";position:absolute;inset-inline-end:-30px;bottom:-34px;
  width:132px;height:132px;opacity:.22;
  background:url(assets/images/call-back-shape-footer.png) center/contain no-repeat}
.scall__k{position:relative;z-index:1;font-size:11.6px;font-weight:700;color:rgba(255,255,255,.78)}
.scall__t{position:relative;z-index:1;margin-top:2px;font-size:16.5px;font-weight:800;line-height:1.6}
.scall__n{position:relative;z-index:1;display:block;margin-top:8px;font-size:22px;
  font-weight:900;letter-spacing:.4px;line-height:1.3}
.scall__s{position:relative;z-index:1;font-size:11.8px;font-weight:600;color:rgba(255,255,255,.8)}
.scall__b{position:relative;z-index:1;display:inline-flex;align-items:center;gap:7px;
  margin-top:14px;height:38px;padding:0 15px;border-radius:var(--r-sm);
  background:rgba(255,255,255,.16);font-size:13px;font-weight:700;
  backdrop-filter:blur(2px);transition:background .2s}
.scall__b .ic{width:15px;height:15px}
.scall__b:hover{background:rgba(255,255,255,.28)}

/* ── document furniture ──────────────────────────────────────────────────── */
.doc__upd{display:inline-flex;align-items:center;gap:7px;height:30px;padding:0 12px;
  border-radius:999px;background:#f5f5f5;color:var(--muted);font-size:12.2px;font-weight:600}
.doc__upd .ic{width:14px;height:14px}

.blk{margin-top:34px}
.blk:first-of-type{margin-top:22px}
.blk__h{position:relative;padding-inline-start:16px;
  font-family:var(--font-head);font-size:22px;font-weight:800;color:var(--ink);line-height:1.6}
.blk__h::before{content:"";position:absolute;inset-inline-start:0;top:7px;
  width:7px;height:22px;border-radius:3px;background:var(--green)}
.blk__s{margin-top:8px;max-width:72ch;font-size:14.6px;line-height:2.05;color:var(--body)}
.blk__sh{margin-top:24px;font-size:16px;font-weight:800;color:var(--ink2);line-height:1.7}

.prose{max-width:72ch;font-size:14.6px;line-height:2.05;color:var(--body)}
.prose p+p,.prose ul+p,.prose p+ul{margin-top:12px}
.prose b,.prose strong{color:var(--ink2);font-weight:700}
.prose a{color:var(--green-dd);font-weight:600;text-decoration:underline;text-underline-offset:3px}
.prose a:hover{color:var(--green)}
/* the only list marker on these pages: a small gold lozenge, so ordered and
   unordered lists never argue with the numbered steps below */
.prose ul{display:grid;gap:7px}
.prose ul li{position:relative;padding-inline-start:18px}
.prose ul li::before{content:"";position:absolute;inset-inline-start:0;top:13px;
  width:7px;height:7px;border-radius:2px;rotate:45deg;background:var(--gold)}

/* ── numbered steps ──────────────────────────────────────────────────────── */
.steps{counter-reset:step;margin-top:20px;display:grid;gap:14px}
.step{position:relative;display:grid;grid-template-columns:47px minmax(0,1fr);gap:16px;
  padding:18px 18px 18px 20px;border:1px solid var(--line);border-radius:var(--r-card);
  background:#fff;transition:transform .25s,box-shadow .25s,border-color .25s}
.step:hover{transform:translateY(var(--card-lift));box-shadow:var(--card-sh);border-color:#fff}
/* the shields' silhouette again, green face this time, carrying the count */
.step__n{counter-increment:step;display:grid;place-items:center;
  width:47px;height:54px;background:var(--green);clip-path:url(#sh-hex);
  color:#fff;font-size:17px;font-weight:800;line-height:1}
.step__n::before{content:counter(step)}
/* the dotted rail between medallions — drawn on the card, stopped on the last */
.step:not(:last-child)::before{content:"";position:absolute;top:72px;bottom:-14px;
  inset-inline-start:41.5px;width:2px;
  background:repeating-linear-gradient(#d6e3c8 0 5px,transparent 5px 11px)}
.step__b{min-width:0;padding-top:3px}
.step__t{font-size:16.4px;font-weight:800;color:var(--ink);line-height:1.7}
.step__x{margin-top:5px;font-size:14.2px;line-height:2;color:var(--body)}
.step__x b{color:var(--ink2);font-weight:700}
.step__tip{display:flex;align-items:flex-start;gap:8px;margin-top:10px;padding:9px 12px;
  border-radius:var(--r-sm);background:#fbfdf8;border:1px solid #e7efdf;
  font-size:12.7px;line-height:1.9;color:var(--body)}
.step__tip .ic{flex:none;width:16px;height:16px;margin-top:5px;color:var(--green)}

/* ── method / topic cards ────────────────────────────────────────────────── */
.mcards{margin-top:20px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.mcards--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.mcard{position:relative;display:flex;flex-direction:column;padding:20px 20px 18px;
  border:1px solid var(--line);border-radius:var(--r-card);background:#fff;
  transition:transform .25s,box-shadow .25s,border-color .25s}
.mcard:hover{transform:translateY(var(--card-lift));box-shadow:var(--card-sh);border-color:#fff}
.mcard__i{display:grid;place-items:center;width:44px;height:44px;border-radius:13px;
  background:var(--pale);color:var(--green-dd);transition:.2s}
.mcard__i .ic{width:23px;height:23px}
.mcard:hover .mcard__i{background:var(--green);color:#fff}
.mcard__t{margin-top:13px;font-size:16.2px;font-weight:800;color:var(--ink);line-height:1.7}
.mcard__x{margin-top:5px;font-size:13.8px;line-height:1.95;color:var(--body)}
.mcard__x b{color:var(--ink2);font-weight:700}
.mcard__m{margin-top:13px;padding-top:12px;border-top:1px dashed #e6e6e6;display:grid;gap:6px}
.mcard__m li{display:flex;align-items:center;justify-content:space-between;gap:10px;
  font-size:12.6px;line-height:1.8}
.mcard__m b{font-weight:600;color:var(--muted)}
.mcard__m span{font-weight:700;color:var(--ink2);text-align:end}
/* a card that is also a link gets the chevron the nav rows have */
.mcard--go{padding-bottom:16px}
.mcard__go{display:inline-flex;align-items:center;gap:7px;margin-top:auto;padding-top:13px;
  font-size:13px;font-weight:700;color:var(--green-dd)}
.mcard__go .ic{width:14px;height:14px;transition:translate .2s}
.mcard:hover .mcard__go .ic{translate:-3px 0}

/* ── data tables ─────────────────────────────────────────────────────────── */
.tblw{margin-top:18px;overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-card)}
.dtbl{width:100%;border-collapse:collapse;font-size:13.6px;min-width:520px}
.dtbl thead th{background:#f4f7f0;color:var(--green-dd);font-size:12.6px;font-weight:800;
  text-align:start;padding:12px 14px;white-space:nowrap}
.dtbl tbody tr{border-top:1px solid #f0f0f0}
.dtbl tbody tr:nth-child(even){background:#fcfdfb}
.dtbl th[scope="row"]{text-align:start;padding:12px 14px;font-weight:700;color:var(--ink2);
  line-height:1.8}
.dtbl td{padding:12px 14px;font-weight:600;color:var(--body);line-height:1.8}
.dtbl td b{color:var(--ink2);font-weight:800}
.dtbl .is-free{color:var(--green-dd);font-weight:800}
.tblnote{margin-top:9px;font-size:12.3px;line-height:1.9;color:var(--muted)}

/* ── callouts: one shell, four tones ─────────────────────────────────────── */
.note{display:flex;align-items:flex-start;gap:11px;margin-top:16px;padding:13px 15px;
  border:1px solid #e7efdf;border-inline-start:3px solid var(--green);
  border-radius:var(--r-sm);background:#fbfdf8;
  font-size:13.4px;line-height:1.95;color:var(--body);max-width:72ch}
.note .ic{flex:none;width:19px;height:19px;margin-top:6px;color:var(--green)}
.note b{color:var(--ink2);font-weight:700}
.note--gold{border-color:#f2e4bd;border-inline-start-color:var(--gold);background:#fffdf5}
.note--gold .ic{color:var(--gold-d)}
.note--bad{border-color:#f3dcd9;border-inline-start-color:#cf5a51;background:#fefaf9}
.note--bad .ic{color:#cf5a51}
.note--plain{border-color:#ececec;border-inline-start-color:#c9c9c9;background:#fbfbfb}
.note--plain .ic{color:#9d9d9d}

/* ── yes / no lists ──────────────────────────────────────────────────────── */
.split{margin-top:18px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.clist{padding:17px 18px;border:1px solid var(--line);border-radius:var(--r-card);background:#fff}
.clist__h{display:flex;align-items:center;gap:8px;font-size:14.8px;font-weight:800;
  color:var(--ink);line-height:1.7}
.clist__h .ic{width:20px;height:20px}
.clist--ok .clist__h .ic{color:var(--green)}
.clist--no .clist__h .ic{color:#cf5a51}
.clist ul{margin-top:11px;display:grid;gap:8px;font-size:13.4px;line-height:1.9;color:var(--body)}
.clist li{position:relative;padding-inline-start:17px}
.clist li::before{content:"";position:absolute;inset-inline-start:0;top:12px;
  width:6px;height:6px;border-radius:50%}
.clist--ok li::before{background:var(--green)}
.clist--no li::before{background:#e0a49e}

/* ── timeline ────────────────────────────────────────────────────────────── */
.tl{margin-top:20px;display:grid;gap:0}
/* Rail and dot are both measured from the row, never from the label: pinning
   the dot to .tl__w drifts the moment a label wraps to two lines.  The label
   column is 96px and the gap 18px, so 99-111px lands the dot in the gap. */
.tl__i{position:relative;display:grid;grid-template-columns:96px minmax(0,1fr);gap:18px;
  padding-bottom:22px}
.tl__i:last-child{padding-bottom:0}
.tl__i::before{content:"";position:absolute;inset-inline-start:104px;top:18px;bottom:-4px;width:2px;
  background:repeating-linear-gradient(#e2e2e2 0 5px,transparent 5px 11px)}
.tl__i::after{content:"";position:absolute;inset-inline-start:99px;top:6px;
  width:12px;height:12px;border-radius:50%;background:#fff;
  border:3px solid var(--green);box-sizing:border-box}
.tl__i:last-child::before{display:none}
.tl__w{text-align:end;padding-top:3px;font-size:12.8px;font-weight:800;
  color:var(--green-dd);line-height:1.6}
.tl__b{min-width:0;padding-top:2px}
.tl__t{font-size:15.2px;font-weight:800;color:var(--ink);line-height:1.75}
.tl__x{margin-top:3px;font-size:13.5px;line-height:1.95;color:var(--body)}

/* ── stat tiles ──────────────────────────────────────────────────────────── */
.kpis{margin-top:20px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.kpis--4{grid-template-columns:repeat(4,minmax(0,1fr))}
.kpi{padding:16px 16px 14px;border:1px solid var(--line);border-radius:var(--r-card);
  background:linear-gradient(180deg,#fff,#fbfdf8)}
.kpi__n{display:flex;align-items:baseline;gap:5px;font-size:24px;font-weight:900;
  color:var(--green-dd);line-height:1.3}
.kpi__n i{font-style:normal;font-size:13px;font-weight:700;color:var(--muted)}
.kpi__t{margin-top:4px;font-size:13px;font-weight:700;color:var(--ink2);line-height:1.7}
.kpi__x{margin-top:1px;font-size:11.8px;line-height:1.75;color:var(--muted)}

/* ── FAQ (plain <details>, so it opens with no script) ───────────────────── */
.faq{margin-top:18px;display:grid;gap:9px}
.faq__i{border:1px solid var(--line);border-radius:var(--r-md);background:#fff;overflow:hidden}
.faq__i[open]{border-color:#dbe8cf;background:#fdfefb}
.faq__q{display:flex;align-items:center;gap:11px;padding:14px 16px;cursor:pointer;
  font-size:14.6px;font-weight:700;color:var(--ink2);line-height:1.8;list-style:none}
.faq__q::-webkit-details-marker{display:none}
/* physical borders on purpose: the logical pair rotates to a side-chevron
   under dir=rtl, and this has to read as a caret in both directions */
.faq__q::after{content:"";flex:none;width:9px;height:9px;margin-inline-start:auto;
  border-right:2px solid #a8a8a8;border-bottom:2px solid #a8a8a8;
  rotate:45deg;translate:0 -2px;transition:rotate .22s,border-color .22s}
.faq__i[open] .faq__q::after{rotate:225deg;translate:0 2px;border-color:var(--green)}
.faq__q:hover{color:var(--green-dd)}
.faq__i>div{padding:0 16px 15px 42px;font-size:13.7px;line-height:2;color:var(--body)}
.faq__i>div p+p{margin-top:9px}
.faq__i>div b{color:var(--ink2);font-weight:700}

/* ── order-status stepper (track-order) ──────────────────────────────────── */
.ot{margin-top:20px;padding:22px 22px 20px;border:1px solid var(--line);
  border-radius:var(--r-card);background:#fff;box-shadow:0 10px 30px rgba(40,60,20,.06)}
.ot__form{position:relative}
.ot__form .track{height:64px}
.ot__hint{margin-top:26px;font-size:12.4px;line-height:1.9;color:var(--muted)}
.ot__res{margin-top:20px;padding-top:20px;border-top:1px dashed #e6e6e6}
.ot__res[hidden]{display:none}
.ot__id{display:flex;flex-wrap:wrap;align-items:center;gap:10px;font-size:13.4px;
  font-weight:600;color:var(--muted)}
.ot__id b{font-size:15.4px;font-weight:800;color:var(--ink)}

/* the base reset only clears `ul`; this one is an <ol>, and .stg stays a
   list item (unlike .step / .tl__i, which are grids and drop their marker) */
.stager{list-style:none;margin-top:18px;
  display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}
.stg{position:relative;text-align:center;padding-top:34px}
/* the rail: drawn behind the dots, cut at the row's two ends */
.stg::before{content:"";position:absolute;top:11px;inset-inline:-4px 50%;height:2px;
  background:#ececec}
.stg::after{content:"";position:absolute;top:11px;inset-inline:50% -4px;height:2px;
  background:#ececec}
.stg:first-child::before,.stg:last-child::after{display:none}
.stg__d{position:absolute;top:0;left:50%;translate:-50% 0;
  width:24px;height:24px;border-radius:50%;background:#fff;border:2px solid #e2e2e2;
  display:grid;place-items:center;color:#c2c2c2}
.stg__d .ic{width:13px;height:13px;stroke-width:2.4}
.stg__t{display:block;font-size:12.4px;font-weight:700;color:#a9a9a9;line-height:1.6}
.stg__x{display:block;margin-top:1px;font-size:11px;color:#bcbcbc;line-height:1.6}
.stg.is-done .stg__d{background:var(--green);border-color:var(--green);color:#fff}
.stg.is-done .stg__t{color:var(--ink2)}
.stg.is-done .stg__x{color:var(--muted)}
.stg.is-done::before,.stg.is-done::after{background:var(--ring)}
.stg.is-now .stg__d{background:#fff;border-color:var(--green);color:var(--green);
  box-shadow:0 0 0 4px rgba(140,200,91,.24)}
.stg.is-now .stg__t{color:var(--green-dd);font-weight:800}
.stg.is-now .stg__x{color:var(--green-dd)}
.stg.is-now::before{background:var(--ring)}

/* ── in-page contents (privacy) ──────────────────────────────────────────── */
.toc{margin-top:20px;padding:18px 20px 16px;border:1px solid var(--line);
  border-radius:var(--r-card);background:#fbfcfa}
.toc__h{font-size:14.6px;font-weight:800;color:var(--ink2);line-height:1.7}
.toc__l{counter-reset:toc;margin-top:10px;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 18px}
.toc__l a{counter-increment:toc;display:flex;align-items:baseline;gap:8px;padding:4px 0;
  font-size:13.4px;font-weight:600;color:var(--body);line-height:1.8;transition:color .18s}
.toc__l a::before{content:counter(toc);flex:none;width:20px;height:20px;border-radius:6px;
  background:#eef3e9;color:var(--green-dd);font-size:11px;font-weight:800;
  text-align:center;line-height:20px;translate:0 3px}
.toc__l a:hover{color:var(--green-dd)}

/* ── the hub's card grid ─────────────────────────────────────────────────── */
.hub{margin-top:20px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px}

/* ── closing band ────────────────────────────────────────────────────────
   Contained and rounded rather than full-bleed: the feature bar below it is
   already a full-bleed green band, and two of them separated by the design's
   213px gap read as one band repeated by mistake.  As a card it belongs to
   the same family as .orgcard and the footer's phone pill, and the gold rule
   survives as an inset edge.  `.page + .feat` then closes the gap to
   something that suits a document rather than the homepage's blog row. */
.pcta{position:relative;overflow:hidden;
  width:min(var(--cw),100% - 48px);margin:64px auto 0;
  border-radius:var(--r-lg);box-shadow:inset 0 -5px 0 var(--gold);
  background:var(--green) url(assets/images/pattern-green.png) center/540px auto repeat}
.page + .feat{margin-top:104px}
.pcta__in{padding:32px 34px 36px;
  display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px}
.pcta__t h2{font-family:var(--font-head);font-size:22px;font-weight:800;color:#fff;line-height:1.6}
.pcta__t p{margin-top:5px;max-width:58ch;font-size:13.8px;font-weight:500;line-height:1.95;
  color:rgba(255,255,255,.88)}
.pcta__a{display:flex;flex-wrap:wrap;gap:10px}
.pcta__b{display:inline-flex;align-items:center;gap:9px;min-height:48px;padding:6px 20px;
  border-radius:var(--r-md);background:rgba(255,255,255,.16);color:#fff;
  font-size:14.6px;font-weight:700;line-height:1.45;text-align:center;transition:background .2s,transform .2s}
.pcta__b .ic{width:18px;height:18px}
.pcta__b:hover{background:rgba(255,255,255,.28);transform:translateY(var(--btn-lift))}
.pcta__b--w{background:#fff;color:var(--green-dd);box-shadow:0 8px 20px rgba(0,0,0,.12)}
.pcta__b--w:hover{background:#fff;color:var(--green-dd)}

/* ── responsive ──────────────────────────────────────────────────────────── */
@media (max-width:1240px){
  .doc{grid-template-columns:238px minmax(0,1fr);gap:30px}
  .mcards--3{grid-template-columns:repeat(2,minmax(0,1fr))}
  .hub{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:1024px){
  /* the sticky column stands down and lies across the top: at this width a
     272px rail is a quarter of the screen spent on navigation */
  .doc{display:block}
  .doc__side{position:static;display:grid;grid-template-columns:minmax(0,1fr) 268px;
    gap:14px;align-items:stretch}
  .gnav{padding:16px 14px 12px}
  .gnav__l{grid-template-columns:repeat(2,minmax(0,1fr));display:grid}
  .doc__main{margin-top:26px}
  .step:hover,.mcard:hover{transform:none;box-shadow:none;border-color:var(--line)}
  .mcard:hover .mcard__i{background:var(--pale);color:var(--green-dd)}
  .pcta{margin-top:52px}
}
@media (max-width:820px){
  .phero{padding:24px 0 38px}
  .phero__t{font-size:28px}
  .phero__lead{font-size:14px;line-height:1.95}
  .doc{margin-top:30px}

  /* On a phone the family nav becomes a scrolling rail at the top — one row
     rather than seven, so the first screen still belongs to the page's own
     content — and the support card drops to the end, which is where a reader
     who did not find the answer actually arrives.  `display:contents` is what
     lets the two be ordered apart without a second copy of either in the
     markup, and it also cancels the column's `position:sticky`. */
  .doc{display:flex;flex-direction:column;gap:0}
  .doc__side{display:contents}
  /* `stretch` alone does not clamp a flex item whose content is wider than
     the line, and the rail's max-content width is ~1150px — the card would
     run off the page (invisibly, since html carries overflow-x:clip).
     width:100% resolves against the flex container's content box and pins it,
     which is what lets the rail's own overflow-x:auto take over.  The main
     column needs the same pin: `.doc` keeps its desktop `align-items:start`,
     and the order-lookup field's ~410px min-content was widening it past the
     screen — /track-order/ lost half its button, /help/ the edge of its cards. */
  .gnav,.scall,.doc__main{width:100%}
  .gnav{order:1;padding:14px 12px 10px}
  .doc__main{order:2;margin-top:24px}
  .scall{order:3;margin-top:32px}
  .gnav__l{display:flex;gap:8px;overflow-x:auto;padding-bottom:5px;
    scroll-snap-type:x proximity;overscroll-behavior-x:contain}
  .gnav__a{flex:0 0 auto;scroll-snap-align:start;padding:7px 11px;font-size:13px;
    white-space:nowrap;border:1px solid var(--line);scroll-margin-inline:12px}
  .gnav__a.is-on{border-color:var(--ring)}
  .gnav__i{width:26px;height:26px;border-radius:8px}
  .gnav__i .ic{width:15px;height:15px}
  .gnav__go{display:none}

  .split,.mcards,.mcards--3,.hub{grid-template-columns:minmax(0,1fr)}
  .kpis,.kpis--4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .toc__l{grid-template-columns:minmax(0,1fr)}
  /* five stages do not fit a tablet row: the stepper stands up and the rail
     runs down the dot column instead of across it */
  .stager{grid-template-columns:minmax(0,1fr);gap:0}
  .stg{text-align:start;padding:0 0 18px 0;padding-inline-start:38px}
  .stg:last-child{padding-bottom:0}
  .stg::before{display:none}
  .stg::after{inset-inline:auto;inset-inline-start:11px;top:24px;bottom:-2px;
    height:auto;width:2px}
  .stg:last-child::after{display:none}
  .stg__d{top:0;left:auto;inset-inline-start:0;translate:none}
}
@media (max-width:680px){
  .pcta{margin-top:48px;border-radius:var(--r-card)}
  .page + .feat{margin-top:72px}
  .phero__orn--a{width:170px;inset-inline-end:-46px}
  .phero__orn--b{display:none}
  .phero__t{font-size:24px}
  .phero__badge{width:42px;height:48px;margin-top:15px}
  .phero__badge .ic{width:22px;height:22px}
  .blk__h{font-size:19.5px}
  .blk__h::before{height:19px;top:6px}
  .step{grid-template-columns:40px minmax(0,1fr);gap:13px;padding:15px}
  .step__n{width:40px;height:46px;font-size:15px}
  .step:not(:last-child)::before{top:61px;inset-inline-start:34px}
  .step__t{font-size:15.2px}
  .tl__i{grid-template-columns:70px minmax(0,1fr);gap:16px}
  .tl__i::before{inset-inline-start:77px}
  .tl__i::after{inset-inline-start:72px}
  .tl__w{font-size:12px}
  .ot{padding:16px}
  .pcta__in{padding:24px 20px 28px}
  .pcta__t h2{font-size:19px}
  .pcta__b{min-height:44px;padding-inline:16px;font-size:13.6px}
}
@media (max-width:520px){
  .kpis,.kpis--4{grid-template-columns:minmax(0,1fr)}
  .faq__i>div{padding-inline:16px 16px}
  .dtbl{min-width:440px}
  .pcta__a{width:100%}
  /* grow from the label's own width, not from zero: two that fit share the
     row, two that do not take a row each — `flex:1` halved the row and broke
     the phone number over two lines inside a 44px white button */
  .pcta__b{flex:1 1 auto;justify-content:center}
}

/* The way out of a teaser block to the page that carries the whole set —
   today that is /help/#faq linking to /faq/.  .allbtn is the homepage blog
   row's own button, so this adds placement and nothing else. */
.blk__more{margin-top:20px}
