@charset "UTF-8";
/* ==== app.css ==== */

/* ==========================================================================
   کیچن بوش — پایه
   ترتیب لود: app → rtl → nav → card → [صفحه] → mobile
   ========================================================================== */

/* ---------- فونت ----------
   swap تا متن قبل از رسیدن فونت دیده شود (جلوگیری از FOIT در اینترنت کند) */
/* مسیر همه فونت ها /public/fonts/ است — همان مسیری که header.php preload می کند.
   اگر این دو با هم فرق کنند مرورگر فونت را دو بار دانلود می کند. */
@font-face{
  font-family:'IRANYekanX';
  src:url('/public/fonts/IRANYekanX-Regular.woff2') format('woff2');
  font-weight:400; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'IRANYekanX';
  src:url('/public/fonts/IRANYekanX-Medium.woff2') format('woff2');
  font-weight:500; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'IRANYekanX';
  src:url('/public/fonts/IRANYekanX-Bold.woff2') format('woff2');
  font-weight:700; font-style:normal; font-display:swap;
}
/* پشتیبان: اگر یکان ایکس لایسنس نشد وزیرمتن جایش را می گیرد */
@font-face{
  font-family:'Vazirmatn';
  src:url('/public/fonts/Vazirmatn-Regular.woff2') format('woff2');
  font-weight:400; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'Vazirmatn';
  src:url('/public/fonts/Vazirmatn-Medium.woff2') format('woff2');
  font-weight:500; font-style:normal; font-display:swap;
}
@font-face{
  font-family:'Vazirmatn';
  src:url('/public/fonts/Vazirmatn-Bold.woff2') format('woff2');
  font-weight:700; font-style:normal; font-display:swap;
}

/* ---------- توکن ها ----------
   هویت «کیچن بوش» — لحن: شورومِ تخصصیِ بوش، نه مارکت پلیس.
   ⚠ پالتِ زیر توسط bosch.css بازتعریف می شود (سرمه ای به جای قرمز).

   دو تصمیم که این سایت را از بقیه سایت های مجموعه جدا می کند:

   ۱. پالت دورنگه است، نه تک رنگ. قرمز بوش فقط «اقدام» را نشان می دهد
      (خرید، تماس، تخفیف). سبزآبیِ رسمیِ بوش (--c-trust) کارِ «اطمینان» را
      می کند: موجودی، اصالت کالا، گارانتی، نوار اعتماد. چون ۵۸٪ محصولات این
      سایت قیمت آنلاین ندارند، کاربر بیش از قیمت دنبالِ «هست؟ اصله؟» است و
      آن سیگنال باید رنگِ خودش را داشته باشد، نه اینکه در دریای قرمز گم شود.

   ۲. شکل ها نرم ترند (شعاع ۱۰ تا ۲۴ به جای ۸ تا ۱۶) و سایه ها بازتر و
      دولایه. لوازم خانگیِ بزرگ عکس های حجیم دارند؛ کارتِ نرم و جادار به
      آن ها فضای نفس کشیدن می دهد. */
:root{
  /* ── پالت ─────────────────────────────────────────────────────────────── */
  --c-primary:#E4002B;  --c-primary-dark:#B00020;  --c-primary-soft:#FFF0F3;
  --c-primary-rgb:228,0,43;
  /* سبزآبیِ رسمیِ بوش — رنگِ «اعتماد» */
  --c-trust:#17817C;    --c-trust-dark:#0F5F5B;    --c-trust-soft:#E7F3F2;
  --c-trust-rgb:23,129,124;

  --c-ink:#10161C;      --c-ink-2:#59626B;  --c-ink-3:#858E97;
  --c-line:#E3E7EB;     --c-line-2:#EFF2F5;
  --c-bg:#F1F4F7;       --c-surface:#FFFFFF;
  /* پس زمینه قابِ عکس محصول — عکس های سایت قدیم پس زمینه سفید دارند و
     روی این خاکستریِ سرد، لبه محصول دیده می شود. */
  --c-panel:#EDF1F4;

  /* ⚠ --c-success متنِ روی --c-success-soft است، پس باید ۴٫۵:۱ بدهد.
     خودِ --c-trust (#17817C) روی آن زمینه فقط ۴٫۱۴:۱ می دهد و WCAG AA را
     رد می کند؛ نسخه تیره تر ۶٫۱۳:۱ می دهد. --c-trust برای پُرکردن (زمینه
     دکمه و آیکون) می ماند که آنجا سفیدِ روی آن ۴٫۷:۱ است و قبول. */
  --c-success:#116460;  --c-danger:#E4002B;  --c-warn:#946200;
  --c-success-soft:#E7F3F2; --c-warn-soft:#FDF4E4;
  --c-star:#E8A317;

  --c-dark:#10161C;     --c-on-dark:#EDF1F4;  --c-on-dark-2:#98A2AC;
  /* «accent» برای سازگاری با کلاس های قدیمی مانده؛ حالا به سبزآبی وصل است
     تا هر جایی که «تأکید ثانویه» می خواست رنگِ درست را بگیرد. */
  --c-accent:#17817C;   --c-accent-soft:#E7F3F2;

  /* ── شعاع ───────────────────────────────────────────────────────────────
     ورودی و دکمه ۱۰–۱۴ | کارت ۱۸ | بخش بزرگ ۲۴ */
  --r-sm:10px; --r-md:14px; --r-lg:18px; --r-xl:24px; --r-full:999px;

  /* ── سایه ───────────────────────────────────────────────────────────────
     سه سطح، دولایه (لبه ریز + پخشِ نرم). روی دکمه هیچ سایه ای نداریم. */
  --sh-1:0 1px 2px rgba(16,22,28,.04), 0 4px 16px rgba(16,22,28,.05);
  --sh-2:0 2px 6px rgba(16,22,28,.05), 0 12px 32px rgba(16,22,28,.08);
  --sh-3:0 8px 40px rgba(16,22,28,.12);

  --font:'IRANYekanX','Vazirmatn',Tahoma,sans-serif;
  --container:1320px;

  /* ── فاصله: مضربِ ۸ ─────────────────────────────────────────────────── */
  --sp-1:4px;  --sp-2:8px;  --sp-3:12px; --sp-4:16px;
  --sp-5:24px; --sp-6:32px; --sp-7:48px; --sp-8:64px;
  /* فاصله بین بخش های اصلی — دسکتاپ ۷۲تا۸۸، موبایل ۴۸تا۵۶ */
  --sec-gap:clamp(48px,6vw,80px);
  --pad-x:32px;

  --header-h:72px;
  --ease:cubic-bezier(.2,.7,.3,1);
  --t-fast:.15s var(--ease);
  --t-slow:.25s var(--ease);
}
@media (max-width:1023px){:root{--pad-x:20px}}
@media (max-width:639px){:root{--pad-x:16px}}

/* ---------- ریست ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + 16px)}
body{
  margin:0; direction:rtl; text-align:right;
  font-family:var(--font); font-size:15px; font-weight:400; line-height:1.85;
  color:var(--c-ink); background:var(--c-bg);
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  overflow-x:hidden;
}
h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd{margin:0}
/* ⚠ قبلاً «ul[class]» بود، یعنی فقط لیستی که کلاس دارد بولت نداشت.
   اما <ul> بدون کلاس در چند جای رابط هست — مثل <nav class="mobile-bar"><ul>
   و ستون های فوتر — و آنجا بولتِ پیش فرضِ مرورگر ظاهر می شد؛ چون padding صفر
   است، نشانه ها بیرونِ کادر و روی محتوا می افتادند (همان نقطه های اضافه ای که
   بین آیتم های نوار پایینِ موبایل دیده می شد).
   حالا بولت «انتخابی» است نه «پیش فرض»: فقط جایی که متنِ محتوایی داریم. */
ul,ol{margin:0;padding:0;list-style:none}
img,svg,video,iframe{max-width:100%;display:block}
img{height:auto}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
button{background:none;border:0;padding:0;cursor:pointer}
table{border-collapse:collapse;width:100%}
hr{border:0;border-top:1px solid var(--c-line);margin:var(--sp-5) 0}
:target{scroll-margin-top:calc(var(--header-h) + 16px)}
[hidden]{display:none !important}

/* اعداد فارسی در فرم ها همیشه چپ چین منطقی نباشند */
input[type=number]{-moz-appearance:textfield}
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}

/* ---------- دسترسی ---------- */
:focus{outline:none}
:focus-visible,
a:focus-visible,button:focus-visible,input:focus-visible,
select:focus-visible,textarea:focus-visible,[tabindex]:focus-visible,
summary:focus-visible{
  outline:2px solid var(--c-primary);
  outline-offset:2px;
  border-radius:var(--r-sm);
}
.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}
.skip-link{
  position:absolute;inset-inline-start:16px;top:-100px;z-index:1000;
  background:var(--c-surface);padding:10px 16px;border-radius:var(--r-sm);
  box-shadow:var(--sh-2);transition:top var(--t-fast);
}
.skip-link:focus{top:12px}

/* ---------- تایپوگرافی ----------
   دسکتاپ: H1 ۳۲–۳۸ | H2 ۲۴–۳۰ | متن ۱۵–۱۶
   موبایل: H1 ۲۵–۲۸ | H2 ۲۱–۲۴ | متن حداقل ۱۵
   ارتفاع خط فارسی ۱٫۷ تا ۱٫۹ */
h1,h2,h3,h4,h5,h6{font-weight:700;line-height:1.6;color:var(--c-ink);text-wrap:balance}
h1{font-size:clamp(25px,3vw,38px);line-height:1.45}
h2{font-size:clamp(21px,2.3vw,30px);line-height:1.5}
h3{font-size:clamp(18px,1.7vw,22px)}
h4{font-size:17px}
h5{font-size:16px}
h6{font-size:15px}
p{margin:0 0 1em}
p:last-child{margin-bottom:0}
/* هیچ متنی زیر ۱۵px نباشد جز فرا-داده های واقعاً فرعی */
small,.text-sm{font-size:15px}
.text-xs{font-size:15px}
.text-lg{font-size:17px}
strong,b{font-weight:700}
.lead{font-size:16px;color:var(--c-ink-2);line-height:2}
.muted{color:var(--c-ink-3)}
.ink-2{color:var(--c-ink-2)}
a.link{color:var(--c-primary)}
a.link:hover{color:var(--c-primary-dark);text-decoration:underline}
.tel-link{color:var(--c-primary);font-weight:500;direction:ltr;display:inline-block;unicode-bidi:isolate}
.num{font-variant-numeric:tabular-nums}
/* عنوان چندخطی محدودشده */
.clamp-1,.clamp-2,.clamp-3{display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}
.clamp-1{-webkit-line-clamp:1}
.clamp-2{-webkit-line-clamp:2}
.clamp-3{-webkit-line-clamp:3}

/* ---------- چیدمان ---------- */
/* یک کانتینر، یک عرض، یک padding — در تمام صفحه ها یکسان */
.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:var(--pad-x)}
.container-narrow{max-width:900px}
.section{padding-block:var(--sec-gap)}
.section-sm{padding-block:calc(var(--sec-gap) * .66)}
.section-head{
  display:flex;align-items:flex-end;justify-content:space-between;
  gap:var(--sp-4);margin-bottom:var(--sp-6);
}
/* تیتر بخش: بدون میله رنگی، بدون خط کش زیرین — فقط تایپوگرافی */
.section-title{font-size:clamp(21px,2.3vw,30px);font-weight:700;letter-spacing:-.01em}
.section-title::before{content:none}
.section-sub{color:var(--c-ink-2);font-size:15px;margin-top:8px;line-height:1.8}
.section-more{
  color:var(--c-ink);font-size:15px;font-weight:500;flex:none;
  display:inline-flex;align-items:center;gap:6px;white-space:nowrap;
  padding:10px 0;border-bottom:1px solid transparent;
}
.section-more svg{width:16px;height:16px}
.section-more:hover{color:var(--c-primary);border-bottom-color:var(--c-primary)}

.surface{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg)}
.card{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);padding:var(--sp-5)}
.card-lg{border-radius:var(--r-xl);padding:var(--sp-6)}

/* ---------- ابزارها (دستی، بدون فریم ورک) ---------- */
.flex{display:flex}
.iflex{display:inline-flex}
.grid{display:grid}
.wrap{flex-wrap:wrap}
.nowrap{flex-wrap:nowrap}
.col{flex-direction:column}
.items-center{align-items:center}
.items-start{align-items:flex-start}
.items-end{align-items:flex-end}
.items-stretch{align-items:stretch}
.justify-between{justify-content:space-between}
.justify-center{justify-content:center}
.justify-end{justify-content:flex-end}
.flex-1{flex:1 1 auto;min-width:0}
.flex-none{flex:none}
.gap-1{gap:var(--sp-1)}
.gap-2{gap:var(--sp-2)}
.gap-3{gap:var(--sp-3)}
.gap-4{gap:var(--sp-4)}
.gap-5{gap:var(--sp-5)}
.gap-6{gap:var(--sp-6)}
.mt-0{margin-top:0}.mt-2{margin-top:var(--sp-2)}.mt-3{margin-top:var(--sp-3)}
.mt-4{margin-top:var(--sp-4)}.mt-5{margin-top:var(--sp-5)}.mt-6{margin-top:var(--sp-6)}
.mb-0{margin-bottom:0}.mb-2{margin-bottom:var(--sp-2)}.mb-3{margin-bottom:var(--sp-3)}
.mb-4{margin-bottom:var(--sp-4)}.mb-5{margin-bottom:var(--sp-5)}.mb-6{margin-bottom:var(--sp-6)}
.mis-auto{margin-inline-start:auto}
.mie-auto{margin-inline-end:auto}
.mt-auto{margin-top:auto}
.p-0{padding:0}.p-3{padding:var(--sp-3)}.p-4{padding:var(--sp-4)}.p-5{padding:var(--sp-5)}
.w-full{width:100%}
.h-full{height:100%}
.text-center{text-align:center}
.text-start{text-align:start}
.text-end{text-align:end}
.rounded{border-radius:var(--r-md)}
.rounded-sm{border-radius:var(--r-sm)}
.rounded-full{border-radius:var(--r-full)}
.shadow-1{box-shadow:var(--sh-1)}
.shadow-2{box-shadow:var(--sh-2)}
.relative{position:relative}
.hidden{display:none}
.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-4)}
.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-4)}
.grid-4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--sp-4)}
@media (max-width:1023px){
  .grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}
  .grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:639px){
  .grid-4,.grid-3,.grid-2{grid-template-columns:repeat(1,minmax(0,1fr))}
  .sm-grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
}
.only-mobile{display:none}
@media (max-width:900px){
  .only-desktop{display:none !important}
  .only-mobile{display:block}
}

/* ---------- دکمه ها ---------- */
.btn{
  --btn-bg:var(--c-surface); --btn-fg:var(--c-ink); --btn-bd:var(--c-line);
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:46px;padding:6px 20px;
  font-size:15px;font-weight:500;line-height:1.25;
  color:var(--btn-fg);background:var(--btn-bg);
  border:1px solid var(--btn-bd);border-radius:var(--r-md);
  cursor:pointer;user-select:none;
  /* ⚠ قبلاً white-space:nowrap بود. برچسبِ بلندِ فارسی در ظرفِ باریک به جای
     شکستن، از لبه دکمه بیرون می زد و بریده می شد — همان «افزودن به سبد خرید
     جا نشده». حالا می شکند: دو سطرِ ۱۵px با line-height 1.25 حدود ۳۸px است و
     زیرِ min-height:46px جا می شود، پس هدفِ لمسی هیچ وقت کوچک تر نمی شود.
     balance باعث می شود شکستن عمدی به نظر برسد نه تصادفی. */
  white-space:normal;text-wrap:balance;
  transition:background var(--t-fast),color var(--t-fast),
             border-color var(--t-fast),box-shadow var(--t-fast),transform var(--t-fast);
}
.btn svg{width:19px;height:19px;flex:none;stroke-width:1.75}
.btn:disabled,.btn[aria-disabled=true],.btn.is-disabled{opacity:.55;cursor:not-allowed;pointer-events:none}
.btn.is-loading{color:transparent !important;position:relative;pointer-events:none}
.btn.is-loading::after{
  content:'';position:absolute;width:18px;height:18px;border-radius:50%;
  border:2px solid currentColor;border-top-color:transparent;
  color:#fff;animation:imb-spin .7s linear infinite;
}
/* ── فقط سه سبک دکمه ─────────────────────────────────────────────────────
   Primary   قرمز بوش + متن سفید   ← تنها یک CTA اصلی در هر بخش
   Secondary سفید + متن تیره + کادر
   Tertiary  فقط متن/آیکون
   هیچ کدام سایه ندارند. کلاس های قدیمی (accent/soft/call/ghost) عمداً به
   همین سه نگاشت شده اند تا ویوها دست نخورده بمانند و ظاهر یکدست شود. */
.btn-primary{--btn-bg:var(--c-primary);--btn-fg:#fff;--btn-bd:var(--c-primary)}
.btn-accent{--btn-bg:var(--c-primary);--btn-fg:#fff;--btn-bd:var(--c-primary)}
.btn-secondary,
.btn-ghost,
.btn-soft,
.btn-call{--btn-bg:var(--c-surface);--btn-fg:var(--c-ink);--btn-bd:#DADCE0;font-weight:500}
.btn-call svg,.btn-soft svg{color:var(--c-primary)}
.btn-tertiary{--btn-bg:transparent;--btn-fg:var(--c-ink);--btn-bd:transparent;padding-inline:8px}
.btn-danger{--btn-bg:var(--c-surface);--btn-fg:var(--c-danger);--btn-bd:var(--c-line)}
.btn-block{display:flex;width:100%}
/* هدف لمس هرگز زیر ۴۴ نرود */
.btn-sm{min-height:44px;padding:0 16px;font-size:15px;border-radius:var(--r-sm)}
.btn-sm svg{width:17px;height:17px}
.btn-lg{min-height:52px;padding:0 26px;font-size:16px;font-weight:700}
.btn-icon{min-height:44px;width:44px;padding:0;border-radius:var(--r-sm)}
.btn-icon.btn-sm{min-height:44px;width:44px}
@media (hover:hover){
  .btn-primary:hover,.btn-accent:hover{--btn-bg:var(--c-primary-dark);--btn-bd:var(--c-primary-dark)}
  .btn-secondary:hover,.btn-ghost:hover,.btn-soft:hover,.btn-call:hover{
    --btn-bd:var(--c-ink);--btn-bg:var(--c-surface);
  }
  .btn-tertiary:hover{--btn-fg:var(--c-primary)}
  .btn-danger:hover{--btn-bg:var(--c-primary-soft)}
}
.btn:active{transform:none}

/* ---------- فرم ها ---------- */
.field{display:block;margin-bottom:var(--sp-4)}
/* برچسب همیشه بالای فیلد است — placeholder جای برچسب را نمی گیرد */
.label{display:block;font-size:15px;font-weight:500;color:var(--c-ink-2);margin-bottom:8px}
.label .req{color:var(--c-danger);margin-inline-start:3px}
.input,.select,.textarea,
input[type=text],input[type=tel],input[type=email],input[type=number],
input[type=password],input[type=search],input[type=url],input[type=date],
select,textarea{
  width:100%;min-height:48px;padding:12px 14px;
  font-family:inherit;font-size:15px;color:var(--c-ink);
  background:var(--c-surface);
  border:1px solid #DADCE0;border-radius:var(--r-sm);
  transition:border-color var(--t-fast),box-shadow var(--t-fast),background var(--t-fast);
  appearance:none;
}
textarea,.textarea{min-height:120px;line-height:1.9;resize:vertical;padding-block:12px}
select,.select{
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2362666A' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-size:18px;
  background-position:left 12px center;padding-inline-start:38px;
}
.input:hover,select:hover,textarea:hover{border-color:var(--c-ink-3)}
.input:focus,.select:focus,.textarea:focus,
input:focus,select:focus,textarea:focus{
  border-color:var(--c-primary);
  box-shadow:0 0 0 3px rgba(var(--c-primary-rgb),.12);
  outline:none;
}
::placeholder{color:var(--c-ink-3)}
.input[disabled],select[disabled],textarea[disabled]{background:var(--c-line-2);color:var(--c-ink-3);cursor:not-allowed}
.input.is-invalid,textarea.is-invalid,select.is-invalid{border-color:var(--c-danger)}
.field-error{color:var(--c-danger);font-size:15px;margin-top:6px;display:block}
.field-help{color:var(--c-ink-2);font-size:15px;margin-top:6px;display:block}
.input-ltr{direction:ltr;text-align:left;font-variant-numeric:tabular-nums}
.form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-4)}
.form-row-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--sp-4)}
@media (max-width:639px){.form-row,.form-row-3{grid-template-columns:minmax(0,1fr)}}
.input-group{display:flex;align-items:stretch}
.input-group>.input{border-start-end-radius:0;border-end-end-radius:0}
.input-group>.btn{border-start-start-radius:0;border-end-start-radius:0;margin-inline-start:-1px}

/* چک باکس و رادیو */
.check{display:flex;align-items:center;gap:9px;cursor:pointer;font-size:15px;color:var(--c-ink-2);line-height:1.6}
.check input[type=checkbox],.check input[type=radio]{
  width:18px;height:18px;min-height:0;flex:none;margin:0;padding:0;
  border:1.5px solid var(--c-line);background:#fff;cursor:pointer;
  border-radius:6px;transition:all var(--t-fast);position:relative;
}
.check input[type=radio]{border-radius:50%}
.check input:checked{background:var(--c-primary);border-color:var(--c-primary)}
.check input[type=checkbox]:checked::after{
  content:'';position:absolute;inset:0;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6L9 17l-5-5'/%3E%3C/svg%3E") center/12px no-repeat;
}
.check input[type=radio]:checked::after{
  content:'';position:absolute;inset:4px;background:#fff;border-radius:50%;
}
.check:hover input{border-color:var(--c-primary)}

/* سوییچ */
.switch{position:relative;display:inline-flex;align-items:center;gap:10px;cursor:pointer}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch .track{width:44px;height:25px;border-radius:var(--r-full);background:var(--c-line);transition:background var(--t-fast);flex:none;position:relative}
.switch .track::after{content:'';position:absolute;top:3px;inset-inline-end:3px;width:19px;height:19px;border-radius:50%;background:#fff;box-shadow:var(--sh-1);transition:transform var(--t-fast)}
.switch input:checked+.track{background:var(--c-success)}
.switch input:checked+.track::after{transform:translateX(-19px)}
.switch input:focus-visible+.track{outline:2px solid var(--c-primary);outline-offset:2px}

/* ---------- نشان ها و چیپ ها ---------- */
.badge{
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 10px;border-radius:var(--r-full);
  font-size:15px;font-weight:500;line-height:1.8;white-space:nowrap;
  background:var(--c-line-2);color:var(--c-ink-2);
}
.badge-primary{background:var(--c-primary-soft);color:var(--c-primary-dark)}
.badge-accent{background:var(--c-accent-soft);color:var(--c-warn)}
.badge-success{background:var(--c-success-soft);color:var(--c-success)}
.badge-danger{background:var(--c-primary-soft);color:var(--c-primary-dark)}
.badge-warn{background:var(--c-warn-soft);color:var(--c-warn)}
.badge-muted{background:var(--c-line-2);color:var(--c-ink-2)}
.badge-dot::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}

.chip{
  display:inline-flex;align-items:center;gap:7px;
  padding:7px 14px;border-radius:var(--r-full);
  font-size:15px;font-weight:500;color:var(--c-ink-2);
  background:var(--c-surface);border:1px solid var(--c-line);
  transition:all var(--t-fast);white-space:nowrap;cursor:pointer;
}
.chip img{width:20px;height:20px;object-fit:contain;flex:none}
@media (hover:hover){.chip:hover{border-color:var(--c-primary);color:var(--c-primary)}}
.chip.is-active,.chip[aria-current=page]{
  background:var(--c-primary);border-color:var(--c-primary);color:#fff;
}
.chip-remove{width:16px;height:16px;opacity:.7}
.chip-row{display:flex;gap:9px;flex-wrap:wrap}
/* min-width:0 اجباری است: بدون آن، آیتمِ فلکس/گریدِ والد به جای اسکرولِ
   داخلی، والدش را پهن می کند و کلِ صفحه از عرض بیرون می زند. */
.chip-rail{display:flex;gap:9px;overflow-x:auto;min-width:0;padding-bottom:6px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.chip-rail::-webkit-scrollbar{display:none}
.chip-rail>.chip{flex:none}

/* امتیاز ستاره */
.stars{display:inline-flex;gap:2px;color:var(--c-star)}
.stars svg{width:15px;height:15px}
.stars .off{color:var(--c-line)}

/* ---------- آکاردئون ----------
   اینجاست نه در product.css، چون بلوک های content_sections و سوالات متداول
   در صفحه اصلی و دسته و برند هم استفاده می شوند و آن صفحات product.css
   را لود نمی کنند. هندلر کلیکش در app.js روی .acc-head نشسته است. */
.accordion{border:1px solid var(--c-line);border-radius:var(--r-md);overflow:hidden;background:var(--c-surface)}
.accordion + .accordion{margin-top:10px}
.acc-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  width:100%;padding:15px 18px;font-weight:600;font-size:15px;
  text-align:start;color:var(--c-ink);background:var(--c-surface);
  transition:background var(--t-fast);
}
.acc-head:hover{background:var(--c-line-2)}
.acc-head svg{width:19px;height:19px;color:var(--c-ink-3);transition:transform var(--t-fast);flex:none}
.accordion.is-open .acc-head{background:var(--c-primary-soft);color:var(--c-primary-dark)}
.accordion.is-open .acc-head svg{transform:rotate(180deg)}
.acc-body{display:none;padding:18px;border-top:1px solid var(--c-line-2)}
.accordion.is-open .acc-body{display:block}

/* ---------- گرید محصول در متن ادیتور ----------
   renderBlocks() برای شورت کد [imb-products] کلاس .home-grid می زند و آن
   شورت کد در هر صفحه ای قابل استفاده است، پس تعریفش باید سراسری باشد
   (home.css فقط در صفحه اصلی لود می شود). */
.home-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media (min-width:640px){.home-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}}
@media (min-width:1024px){.home-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}}
.block-products{margin:22px 0}

/* ---------- جدول ---------- */
.table-wrap{
  width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;
  border:1px solid var(--c-line);border-radius:var(--r-md);
  background:var(--c-surface);
}
.table-wrap>table{min-width:520px;font-size:15px}
.table-wrap th,.table-wrap td{
  padding:12px 14px;text-align:start;
  border-bottom:1px solid var(--c-line-2);vertical-align:top;
}
.table-wrap thead th{
  background:var(--c-line-2);color:var(--c-ink-2);
  font-weight:700;font-size:15px;white-space:nowrap;
  border-bottom:1px solid var(--c-line);
}
.table-wrap tbody tr:last-child td{border-bottom:0}
.table-wrap tbody tr:nth-child(even){background:var(--c-surface)}
@media (hover:hover){.table-wrap tbody tr:hover{background:var(--c-primary-soft)}}

/* موبایل: هر ردیف یک کارت — data-label را renderBlocks() تزریق می کند */
@media (max-width:639px){
  .table-wrap{border:0;background:transparent;overflow:visible}
  .table-wrap>table{min-width:0;display:block}
  .table-wrap thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .table-wrap tbody,.table-wrap tr,.table-wrap td{display:block;width:100%}
  .table-wrap tr{
    background:var(--c-surface);border:1px solid var(--c-line);
    border-radius:var(--r-md);margin-bottom:12px;padding:4px 12px;box-shadow:var(--sh-1);
  }
  .table-wrap tbody tr:nth-child(even){background:var(--c-surface)}
  .table-wrap td{
    display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
    padding:9px 0;border-bottom:1px dashed var(--c-line);text-align:end;
  }
  .table-wrap tr td:last-child{border-bottom:0}
  .table-wrap td::before{
    content:attr(data-label);
    font-weight:700;color:var(--c-ink-3);font-size:15px;
    text-align:start;flex:none;max-width:45%;
  }
  .table-wrap td:not([data-label])::before{content:none}
}

/* ---------- محتوای ادیتور ---------- */
.content-note{
  background:var(--c-primary-soft);
  border:1px solid var(--c-line);
  border-inline-start:4px solid var(--c-primary);
  border-radius:var(--r-md);
  padding:16px 18px;margin:var(--sp-5) 0;
}
.content-note__title{display:block;font-weight:700;margin-bottom:6px;color:var(--c-primary-dark)}
.content-note__body{color:var(--c-ink-2);font-size:15px}
.content-note__body>*:last-child{margin-bottom:0}

.video-embed{
  position:relative;aspect-ratio:16/9;width:100%;
  border-radius:var(--r-md);overflow:hidden;background:var(--c-ink);
  margin:var(--sp-5) 0;box-shadow:var(--sh-2);
}
.video-embed iframe,.video-embed video{position:absolute;inset:0;width:100%;height:100%;border:0}

/* ---------- بردکرامب ---------- */
.breadcrumb{padding:14px 0;font-size:15px;color:var(--c-ink-3)}
.breadcrumb ol{display:flex;flex-wrap:wrap;align-items:center;gap:6px;list-style:none}
.breadcrumb li{display:flex;align-items:center;gap:6px;min-width:0}
.breadcrumb li:not(:last-child)::after{
  content:'';width:6px;height:6px;flex:none;
  border-inline-start:1.5px solid var(--c-line);border-block-end:1.5px solid var(--c-line);
  transform:rotate(45deg);opacity:.9;
}
.breadcrumb a{color:var(--c-ink-3);transition:color var(--t-fast)}
.breadcrumb a:hover{color:var(--c-primary)}
.breadcrumb [aria-current=page]{color:var(--c-ink-2);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}

/* ---------- صفحه بندی ---------- */
/* ⚠ چیدمان یک لایه پایین رفت: <nav> حالا یک <ul> دارد. انتخابگرهای
   `.pagination a,.pagination span` نزولی اند و دست نخورده کار می کنند. */
.pagination{margin:var(--sp-6) 0 0}
.pagination ul{display:flex;justify-content:center;flex-wrap:wrap;gap:7px;
               list-style:none;margin:0;padding:0}
.pagination a,.pagination span{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:42px;height:42px;padding:0 12px;
  border-radius:var(--r-md);border:1px solid var(--c-line);
  background:var(--c-surface);color:var(--c-ink-2);
  font-size:15px;font-weight:500;transition:all var(--t-fast);
}
@media (hover:hover){.pagination a:hover{border-color:var(--c-primary);color:var(--c-primary)}}
.pagination .is-current{background:var(--c-primary);border-color:var(--c-primary);color:#fff}
.pagination .is-disabled{opacity:.45;pointer-events:none}
.pagination .gap{border:0;background:transparent}

/* ---------- هشدار و پیام ---------- */
.alert{
  display:flex;align-items:flex-start;gap:11px;
  padding:14px 16px;border-radius:var(--r-md);
  font-size:15px;line-height:1.8;margin-bottom:var(--sp-4);
  border:1px solid transparent;
}
.alert svg{width:20px;height:20px;flex:none;margin-top:2px}
.alert-success{background:var(--c-success-soft);border-color:var(--c-success-soft);color:var(--c-success)}
.alert-danger,.alert-error{background:var(--c-primary-soft);border-color:var(--c-line);color:var(--c-primary-dark)}
.alert-warn,.alert-warning{background:var(--c-warn-soft);border-color:var(--c-warn-soft);color:var(--c-warn)}
.alert-info{background:var(--c-primary-soft);border-color:var(--c-line);color:var(--c-primary-dark)}

.flash-stack{margin:var(--sp-4) 0}

/* توست — از app.js ساخته می شود */
.toast-stack{
  position:fixed;inset-block-end:24px;inset-inline-start:24px;
  z-index:2000;display:flex;flex-direction:column;gap:10px;
  pointer-events:none;max-width:min(360px,calc(100vw - 32px));
}
.toast{
  display:flex;align-items:center;gap:10px;
  background:var(--c-ink);color:#fff;
  padding:13px 17px;border-radius:var(--r-md);
  box-shadow:var(--sh-3);font-size:15px;line-height:1.7;
  pointer-events:auto;
  animation:imb-toast-in .26s var(--ease) both;
}
.toast.is-out{animation:imb-toast-out .2s var(--ease) both}
.toast svg{width:19px;height:19px;flex:none}
.toast-success{background:var(--c-success)}
.toast-error{background:var(--c-primary-dark)}
.toast-info{background:var(--c-primary-dark)}
@keyframes imb-toast-in{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
@keyframes imb-toast-out{to{opacity:0;transform:translateY(8px)}}
@keyframes imb-spin{to{transform:rotate(360deg)}}

/* ---------- اسکلت لودینگ ---------- */
.skeleton,.skel{
  background:linear-gradient(90deg,var(--c-line-2) 25%,var(--c-line-2) 37%,var(--c-line-2) 63%);
  background-size:400% 100%;
  animation:imb-skel 1.3s ease-in-out infinite;
  border-radius:var(--r-sm);
}
.skel-line{height:12px;margin-bottom:9px}
.skel-line.w-60{width:60%}
.skel-line.w-40{width:40%}
.skel-box{aspect-ratio:1/1;border-radius:var(--r-md)}
.skel-card{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-md);padding:14px}
@keyframes imb-skel{0%{background-position:100% 50%}100%{background-position:0 50%}}

/* ---------- حالت خالی ---------- */
.empty{
  text-align:center;padding:var(--sp-8) var(--sp-4);
  color:var(--c-ink-2);background:var(--c-surface);
  border:1px dashed var(--c-line);border-radius:var(--r-lg);
}
.empty svg{width:56px;height:56px;margin:0 auto 16px;color:var(--c-line);stroke-width:1.5}
.empty h3{color:var(--c-ink-2);margin-bottom:8px}

/* ---------- متن سئو / پرزو ---------- */
.prose{color:var(--c-ink-2);font-size:15px;line-height:2.1}
.prose h2,.prose h3,.prose h4{color:var(--c-ink);margin:1.6em 0 .7em}
.prose h2{font-size:21px}
.prose h3{font-size:18px}
.prose p{margin:0 0 1.15em}
.prose ul,.prose ol{margin:0 0 1.2em;padding-inline-start:1.4em}
.prose ul{list-style:disc}
.prose ol{list-style:decimal}
.prose li{margin-bottom:.5em}
.prose li::marker{color:var(--c-primary)}
.prose a{color:var(--c-primary);text-decoration:underline;text-underline-offset:3px}
.prose a:hover{color:var(--c-primary-dark)}
.prose img{border-radius:var(--r-md);margin:1.4em auto;box-shadow:var(--sh-1)}
.prose blockquote{
  margin:1.4em 0;padding:14px 18px;
  background:var(--c-line-2);border-inline-start:4px solid var(--c-primary);
  border-radius:var(--r-md);color:var(--c-ink-2);
}
.prose table{margin:1.4em 0}
.prose code{background:var(--c-line-2);padding:2px 6px;border-radius:6px;font-size:.9em;direction:ltr;display:inline-block}
.prose>*:first-child{margin-top:0}
.prose>*:last-child{margin-bottom:0}

/* بلوک محصول داخل متن ادیتور */
.block-products{margin:var(--sp-5) 0}

/* ---------- ریل افقی عمومی ---------- */
/* ریل محصول — همه بخش های محصولی (فروش ویژه/جدیدترین/پرفروش) از همین یک
   سیستم استفاده می کنند؛ تمایزشان فقط از پس زمینه بخش می آید.
   snap از نوع proximity است نه mandatory: با mandatory، کشیدنِ کوتاه به زور
   برمی گشت و حسِ گیر کردن می داد. */
.rail{
  display:flex;gap:var(--sp-4);overflow-x:auto;
  scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;
  scroll-padding-inline-start:var(--pad-x);
  padding-bottom:8px;scrollbar-width:thin;
  min-width:0;
}
.rail>*{flex:none;scroll-snap-align:start}
.rail::-webkit-scrollbar{height:6px}
.rail::-webkit-scrollbar-thumb{background:var(--c-line);border-radius:var(--r-full)}
.rail::-webkit-scrollbar-track{background:transparent}

/* ---------- اسکلتِ بخش های صفحه (.hsec) ----------
   اینجاست نه در home.css، چون call-cta در چهار صفحه مختلف رندر می شود. */
/* ---------- اسکلت بخش ---------- */
.hsec{position:relative;padding-block:var(--sec-gap)}
.hsec--plain{background:var(--c-surface)}
.hsec--tint {background:var(--c-bg)}
/* بخش های هم رنگِ پشت سرهم با خط مویی از هم جدا می شوند، نه با شکل */
.hsec--plain + .hsec--plain{border-top:1px solid var(--c-line)}
.hsec--tint  + .hsec--tint {border-top:1px solid var(--c-line)}

/* ==========================================================================
   بخش مشاوره / درخواست تماس (partials/call-cta.php)
   ⚠ عمداً اینجاست نه در home.css: این پارشال در صفحه اول، صفحه محصول،
   صفحه دسته و صفحه جستجو رندر می شود، ولی home.css فقط در صفحه اول لود
   می شود؛ قبلاً در آن سه صفحه دیگر بی استایل دیده می شد.
   ========================================================================== */
/* ══════════════════════════════════════════════════ ۸. مشاوره / درخواست تماس
   دو ستون: یک طرف پیام و راه ارتباطی، طرف دیگر فرم.
   پس زمینه خنثیِ کنترل شده؛ قرمز فقط روی CTA. */
.hsec--consult{background:var(--c-bg);border-block:1px solid var(--c-line)}
.consult-inline{margin-block:var(--sec-gap)}
.consult-inline > .container{padding:0;max-width:none}
.consult-inline .consult{
  background:var(--c-bg);border:1px solid var(--c-line);
  border-radius:var(--r-xl);padding:clamp(20px,3vw,32px);
}
.consult{display:grid;grid-template-columns:minmax(0,1fr) 440px;gap:clamp(24px,4vw,56px);align-items:center}
@media (max-width:1023px){.consult{grid-template-columns:minmax(0,1fr);gap:var(--sp-6)}}

.consult-say{min-width:0}
.consult-kicker{
  display:inline-flex;align-items:center;gap:7px;
  background:var(--c-surface);border:1px solid var(--c-line);
  color:var(--c-ink-2);font-size:15px;font-weight:500;
  padding:7px 14px;border-radius:var(--r-full);margin-bottom:var(--sp-4);
}
.consult-kicker svg{width:16px;height:16px}
.consult-say h2{font-size:clamp(21px,2.3vw,30px);line-height:1.5;color:var(--c-ink)}
.consult-say p{color:var(--c-ink-2);font-size:16px;line-height:1.9;margin:12px 0 0;max-width:52ch}

.consult-tels{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:var(--sp-5)}
.consult-tels a{
  display:inline-flex;align-items:center;gap:8px;
  min-height:46px;padding-inline:16px;border-radius:var(--r-sm);
  background:var(--c-surface);border:1px solid var(--c-line);
  color:var(--c-ink);font-weight:700;font-size:15px;
  transition:border-color var(--t-fast);
}
.consult-tels a svg{width:18px;height:18px;color:var(--c-ink-2)}
.consult-tels a .num{direction:ltr;unicode-bidi:isolate;font-variant-numeric:tabular-nums}
.consult-tels a:hover{border-color:var(--c-ink)}

.consult-card{
  background:var(--c-surface);border:1px solid var(--c-line);
  border-radius:var(--r-lg);padding:clamp(20px,2.4vw,28px);
  display:flex;flex-direction:column;min-width:0;
}
.consult-card-title{display:block;font-size:16px;margin-bottom:var(--sp-4);color:var(--c-ink)}
.consult-card .label{font-size:15px;color:var(--c-ink-2);display:block;margin-bottom:8px}
.consult-card .input{width:100%}
.consult-note{
  display:flex;align-items:flex-start;gap:6px;
  margin-top:12px;font-size:15px;color:var(--c-ink-2);line-height:1.7;
}
.consult-note svg{width:15px;height:15px;flex:none;color:var(--c-success);margin-top:2px}

/* ---------- فوتر ----------
   روشن و آرام. در موبایل ستون ها آکاردئون می شوند تا فهرست های بلند
   همیشه باز نمانند (<details>/<summary> — بدون جاوااسکریپت). */
.site-footer{
  background:var(--c-bg);border-top:1px solid var(--c-line);
  margin-top:var(--sec-gap);padding-top:var(--sp-7);
}
.footer-grid{display:grid;grid-template-columns:minmax(0,1.7fr) repeat(3,1fr);gap:var(--sp-6)}
.footer-col h4{font-size:16px;margin-bottom:var(--sp-4);color:var(--c-ink)}
.footer-col ul li{margin-bottom:12px}
.footer-col a{color:var(--c-ink-2);font-size:15px;transition:color var(--t-fast)}
.footer-col a:hover{color:var(--c-primary)}
.footer-about p{color:var(--c-ink-2);font-size:15px;line-height:1.9}
/* لوگوی فوتر داخل یک قاب سفید. لوگوی بوش پس زمینه سفید دارد و روی خاکستریِ
   فوتر مثل یک تکه بریده شده دیده می شد؛ قاب آن را عمدی نشان می دهد.
   width:max-content تا قاب دقیقاً به اندازه لوگو باشد، نه تمامِ عرضِ ستون. */
.footer-logo{
  display:inline-flex;align-items:center;justify-content:center;
  width:max-content;max-width:100%;
  padding:10px 14px;margin-bottom:var(--sp-4);
  background:var(--c-surface);
  border:1px solid var(--c-line);
  border-radius:var(--r-md);
}
.footer-logo img{height:52px;width:auto;object-fit:contain;display:block}
@media (max-width:639px){.footer-logo img{height:44px}}
/* شعبه در ستون «تماس با ما»: نام، تلفن و آدرس باید زیر هم بنشینند.
   بدون این قاعده، <b>/<a>/<span> درون <li> کنار هم روی یک خط می افتادند
   و آدرسِ بلند، نام شعبه را از تلفن جدا نمی کرد. */
.foot-branch{display:flex;flex-direction:column;gap:3px;margin-bottom:var(--sp-4)}
.foot-branch b{color:var(--c-ink);font-size:15px}
.foot-branch .tel-link{font-weight:700;direction:ltr;text-align:start;unicode-bidi:isolate}
.foot-branch .muted{font-size:15px;line-height:1.8;color:var(--c-ink-2)}
.footer-badges{display:flex;gap:12px;flex-wrap:wrap;margin-top:var(--sp-4)}
.footer-badges img{width:86px;height:auto;border-radius:var(--r-sm);background:#fff;border:1px solid var(--c-line);padding:4px}
.footer-social{display:flex;gap:10px;margin-top:var(--sp-4)}
.footer-social a{
  width:44px;height:44px;border-radius:var(--r-sm);
  display:grid;place-items:center;
  background:var(--c-surface);border:1px solid var(--c-line);color:var(--c-ink-2);
  transition:border-color var(--t-fast),color var(--t-fast);
}
.footer-social a:hover{border-color:var(--c-ink);color:var(--c-ink)}
.footer-bottom{
  margin-top:var(--sp-6);padding:20px 0;border-top:1px solid var(--c-line);
  display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);
  color:var(--c-ink-2);font-size:15px;flex-wrap:wrap;
}
/* فلشِ آکاردئون فقط در موبایل دیده می شود */
.footer-col>summary{display:none}
@media (max-width:900px){
  .footer-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--sp-5)}
  .footer-about{grid-column:1/-1}
}
@media (max-width:639px){
  .footer-grid{grid-template-columns:minmax(0,1fr);gap:0}
  .footer-bottom{justify-content:center;text-align:center}

  /* هر ستون یک <details> است: در موبایل جمع می شود */
  .footer-col{border-top:1px solid var(--c-line)}
  .footer-col>summary{
    display:flex;align-items:center;justify-content:space-between;gap:10px;
    min-height:52px;cursor:pointer;list-style:none;
    font-size:16px;font-weight:700;color:var(--c-ink);
  }
  .footer-col>summary::-webkit-details-marker{display:none}
  .footer-col>summary::after{
    content:'';width:9px;height:9px;flex:none;
    border-inline-end:2px solid var(--c-ink-2);border-block-end:2px solid var(--c-ink-2);
    transform:rotate(45deg);margin-block-end:4px;
    transition:transform var(--t-fast);
  }
  .footer-col[open]>summary::after{transform:rotate(225deg);margin-block:4px 0}
  .footer-col>h4{display:none}
  .footer-col ul{padding-bottom:var(--sp-4)}
}

/* ---------- تنظیمات حرکت ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.001ms !important;
    scroll-behavior:auto !important;
  }
  html{scroll-behavior:auto}
}

/* ---------- چاپ ---------- */
@media print{
  .site-header,.site-footer,.mobile-bar,.toast-stack,.btn,.filters{display:none !important}
  body{background:#fff;font-size:15px}
  .container{max-width:none}
}

/* ==== rtl.css ==== */

/* ==========================================================================
   اصلاحات راست به چپ
   بیشتر فایل ها از خواص منطقی (inline-start/end) استفاده می کنند؛ این فایل
   فقط جاهایی را می گیرد که مرورگر یا مرزهای جهت دار خودکار درست نمی شوند.
   ========================================================================== */

html{direction:rtl}
body{direction:rtl;text-align:right}

/* عناصری که مرورگر پیش فرض چپ می گذارد */
input,select,textarea,button{text-align:right;direction:rtl}
input[type=tel],input[type=email],input[type=url],input[type=password],
input[type=number],.input-ltr,.ltr{direction:ltr;text-align:left}
/* شماره تلفن و قیمت داخل متن فارسی نباید تکه تکه شود */
.tel-link,.price-amount,.num,time,.order-number{unicode-bidi:isolate}

/* لیست ها: تورفتگی سمت راست */
ul,ol{padding-inline-start:0}
.prose ul,.prose ol{padding-inline-start:1.4em;padding-inline-end:0}

/* نقل قول و نوت: خط رنگی سمت راست */
blockquote,.content-note{border-inline-start-width:4px;border-inline-end-width:0}

/* فلش سلکت در RTL باید چپ باشد — در app.css با background-position:left ست شده،
   اینجا فقط برای سلکت های داخل فرم های تودرتو تکرار می شود */
select,.select{background-position:left 12px center}

/* اسکرول افقی: مرورگرهای قدیمی iOS نقطه شروع را چپ می گیرند */
.rail,.chip-rail,.table-wrap,.brand-rail,.related-rail{direction:rtl}

/* آیکون های جهت دار (فلش «ادامه») در RTL باید آینه شوند */
.icon-flip,
.section-more svg,
.pagination .prev svg,
.pagination .next svg,
.breadcrumb svg{transform:scaleX(-1)}

/* گرادیان ها و سایه های جهت دار */
.rail-fade{background:linear-gradient(to left,var(--c-bg),transparent)}

/* اسلایدر: ترتیب اسلایدها در RTL معکوس است */
.hero-slider,.hero-track{direction:rtl}

/* نوار پیشرفت / ریتینگ که با width پر می شود باید از راست پر شود */
.bar-fill,.rating-bar-fill{margin-inline-end:0;margin-inline-start:auto}

/* transform های افقی که در LTR نوشته شده اند */
[dir=rtl] .slide-in{transform:translateX(100%)}
[dir=rtl] .slide-in.is-open{transform:translateX(0)}

/* جدول: هدر و سلول ها همیشه از start */
th,td{text-align:start}

/* فرم شماره موبایل: پیشوند +۹۸ سمت چپ بماند */
.phone-field{display:flex;flex-direction:row-reverse}
.phone-field .prefix{
  display:grid;place-items:center;padding:0 12px;
  background:var(--c-line-2);border:1px solid var(--c-line);
  border-inline-end:0;
  border-start-start-radius:0;border-end-start-radius:0;
  border-start-end-radius:var(--r-md);border-end-end-radius:var(--r-md);
  color:var(--c-ink-2);font-size:15px;direction:ltr;
}
.phone-field .input{
  border-start-end-radius:0;border-end-end-radius:0;
}

/* اسکرول بار نازک سمت چپ در پنل ها */
.scroll-y{overflow-y:auto;scrollbar-width:thin;scrollbar-color:var(--c-line) transparent}
.scroll-y::-webkit-scrollbar{width:6px}
.scroll-y::-webkit-scrollbar-thumb{background:var(--c-line);border-radius:var(--r-full)}

/* محتوای انگلیسی داخل متن فارسی (مدل محصول) */
.model,.sku,code,kbd{direction:ltr;unicode-bidi:isolate;display:inline-block}

/* ==== nav.css ==== */

/* ==========================================================================
   هدر، ناوبری، مگامنو، پنل موبایل، نوار پایین موبایل
   --------------------------------------------------------------------------
   طراحی: روشن، مینیمال، اروپایی. سه لایه:
     ۱) نوار بالایی روشن (خاکستری --c-bg) — تلفن، ساعت کاری، لینک های فرعی
     ۲) نوار اصلی سفید — لوگو · جستجو · حساب · سبد · تماس
     ۳) نوار دسته ها سفید با خط مویی بالا + مگامنوی کم سایه
   --------------------------------------------------------------------------
   معماری چسبندگی (مهم — علت لرزش نسخه قدیم):
   نسخه خیلی قدیم روی همان عنصر sticky با transition، transform:translateY
   می زد. transform عنصر را به بلوکِ دربرگیرنده تبدیل می کند و مرورگر موقعیت
   sticky را یک فریم عقب تر حساب می کند ⇒ نوسان یک فریمی سر آستانه.
   قانون هایی که هنوز پابرجاست:
     • .topbar بیرون از هدر و در جریان عادی صفحه است.
     • .site-header فقط .mainbar + .navbar را دارد و فرزند مستقیم body است.
     • هیچ transform روی عنصر چسبان نداریم.
   تنها چیزی که در بازطراحی اضافه شد «جمع شدن در اسکرول» است (بند ۵ بریف):
   is-stuck فقط ارتفاع را کم می کند، آن هم حداکثر ۱۸px در دسکتاپ و ۱۰px در
   موبایل. هیسترزیس app.js ورود در ۱۲۰px و خروج در ۶۰px است؛ چون تغییر ارتفاع
   خیلی کوچک تر از فاصله ۶۰px است، امکان روشن/خاموش شدن حلقه ای وجود ندارد.
   (کم شدن ارتفاعِ عنصرِ چسبان scrollY را عوض نمی کند، فقط محتوای پایین را
   بالا می کشد؛ overflow-anchor:none هم جلوی جبران خودکار مرورگر را می گیرد.)
   ========================================================================== */

/* ارتفاع ها متغیرند تا scroll-padding و ستون های sticky بقیه صفحات هم خوان بمانند.
   نکته: بقیه فایل ها top:calc(var(--header-h) + 16px) می نویسند، پس --header-h
   باید «کل ارتفاع بخش چسبان» باشد نه فقط نوار اصلی.
   --msearch-h ردیف دومِ هدر موبایل (نوار جستجوی تمام عرض) است و در دسکتاپ صفر
   می ماند؛ mobile.css فقط --mainbar-h و --navbar-h را عوض می کند و این calc
   خودش را با آن ها به روز می کند. */
:root{
  --topbar-h:38px;
  --mainbar-h:76px;
  --navbar-h:50px;
  --msearch-h:0px;
  /* ارتفاع های حالت جمع شده (is-stuck) */
  --mainbar-h-stuck:62px;
  --navbar-h-stuck:46px;
  --header-h:calc(var(--mainbar-h) + var(--navbar-h) + var(--msearch-h));
  /* ارتفاع نوار پایین موبایل — با فضای امنِ body یک جا نگه داشته می شود */
  --mbar-h:62px;
  /* جهت خروج کشوی موبایل و اسلاید سطوح — سایت RTL است؛ برای LTR پایین بازنویسی می شود */
  --mp-out:100%;
  --mp-in:-100%;
}
[dir=ltr]{--mp-out:-100%;--mp-in:100%}

/* لنگر لینک های #… زیر هدر چسبان پنهان نشود */
html{scroll-padding-top:calc(var(--header-h) + 16px)}
:target{scroll-margin-top:calc(var(--header-h) + 16px)}

/* ==========================================================================
   ۱) نوار بالایی — روشن، کم رنگ، غیرچسبان
   در جریان عادی صفحه است؛ با اسکرول بالا می رود و دیگر رندر نمی شود.
   overflow-anchor:none تا اگر محتوایش دیر لود شد (فونت/ساعت کاری) مرورگر
   scrollTop را جبران نکند و حلقه اسکرول-انکرینگ راه نیفتد.
   ========================================================================== */
.topbar{
  background:var(--c-bg);
  color:var(--c-ink-2);
  font-size:15px;line-height:1;
  border-bottom:1px solid var(--c-line);
  overflow-anchor:none;
}
.topbar .container{
  display:flex;align-items:center;justify-content:space-between;
  gap:var(--sp-5);height:var(--topbar-h);
}
.topbar a{color:var(--c-ink-2);transition:color var(--t-fast)}
@media (hover:hover){.topbar a:hover{color:var(--c-primary)}}
/* روی زمینه روشن، حلقه سفیدِ نسخه تیره نامرئی بود */
.topbar a:focus-visible{outline:2px solid var(--c-primary);outline-offset:3px;border-radius:var(--r-sm)}

.topbar-start{display:flex;align-items:center;gap:var(--sp-5);min-width:0}
.topbar-links{display:flex;align-items:center;gap:18px;flex-wrap:wrap;min-width:0}
.topbar-links li{display:flex;align-items:center}
.topbar-links li+li{position:relative;padding-inline-start:18px}
.topbar-links li+li::before{
  content:'';position:absolute;inset-inline-start:0;top:50%;
  width:1px;height:12px;margin-top:-6px;background:var(--c-line);
}
.topbar-hours{
  display:inline-flex;align-items:center;gap:7px;
  white-space:nowrap;color:var(--c-ink-2);
}
.topbar-contact{display:flex;align-items:center;gap:var(--sp-4);flex:none}
.topbar-contact a{
  display:inline-flex;align-items:center;gap:7px;
  font-weight:500;color:var(--c-ink);
}
.topbar-contact .tel-num{unicode-bidi:isolate;font-variant-numeric:tabular-nums}
.topbar svg{width:15px;height:15px;stroke-width:1.75;flex:none;color:var(--c-primary)}
.topbar-hours svg{color:var(--c-ink-3)}

/* ==========================================================================
   ۲) هدر چسبان — سفید
   ========================================================================== */
.site-header{
  position:sticky;top:0;z-index:900;
  background:var(--c-surface);
  border-bottom:1px solid var(--c-line);
  transition:box-shadow .18s var(--ease),border-color .18s var(--ease);
  overflow-anchor:none;
}
/* .is-sticky فقط برای سازگاری با قالب ها/اسکریپت های قدیمی */
.site-header.is-sticky{position:sticky;top:0}
.site-header.is-stuck{box-shadow:var(--sh-1);border-bottom-color:var(--c-line-2)}

.mainbar{
  display:flex;align-items:center;gap:var(--sp-4);
  height:var(--mainbar-h);
  transition:height .18s var(--ease);
}
.site-header.is-stuck .mainbar{height:var(--mainbar-h-stuck)}

@media (prefers-reduced-motion:reduce){
  .site-header,.mainbar{transition:none}
}

/* ---------- لوگو ---------- */
.logo{
  display:flex;align-items:center;gap:10px;flex:none;
  border-radius:var(--r-sm);min-width:0;
}
/* ۲۰٪ بزرگ تر از قبل (۴۲→۵۰). --mainbar-h روی ۷۶px است، پس ۵۰px با
   فاصله بالا و پایین راحت جا می شود. */
.logo img{height:50px;width:auto;object-fit:contain;transition:height .18s var(--ease)}
.site-header.is-stuck .logo img{height:41px}
/* .logo خودش flex:none است، پس اگر نام/شعار سایت بلند باشد هیچ چیز جمعش
   نمی کند و نوار را پهن می کند؛ سقف عرض + بریدن با سه نقطه این را می بندد. */
.logo-text{display:flex;flex-direction:column;line-height:1.35;min-width:0;max-width:240px}
.logo-text b,.logo-text span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.logo-text b{font-size:16px;font-weight:700}
.logo-text span{font-size:15px;color:var(--c-ink-2)}
@media (max-width:1279px){.logo-text{display:none}}
@media (prefers-reduced-motion:reduce){.logo img{transition:none}}

/* ==========================================================================
   ۳) جستجو — مهم ترین عنصر هدر
   ========================================================================== */
.header-search{
  position:relative;
  flex:1 1 260px;min-width:0;max-width:620px;
  margin-inline-end:var(--sp-4);
}
/* display:block عمدی است: همه فرزندهای دیگر absolute هستند، پس نه فلکس لازم
   است نه دردسر min-width آیتم فلکس. */
.header-search form{position:relative;display:block}
.header-search input{
  width:100%;min-width:0;height:48px;
  padding-inline-start:46px;padding-inline-end:104px;
  background:var(--c-surface);
  border:1px solid var(--c-line);
  border-radius:var(--r-md);
  font-size:15px;color:var(--c-ink);
  transition:border-color var(--t-fast),box-shadow var(--t-fast);
}
.site-header.is-stuck .header-search input{height:44px}
.header-search input:hover{border-color:var(--c-ink-3)}
.header-search input:focus{
  border-color:var(--c-primary);
  box-shadow:0 0 0 3px rgba(var(--c-primary-rgb),.12);
  outline:none;
}
.header-search .search-icon{
  position:absolute;inset-inline-start:15px;top:50%;transform:translateY(-50%);
  width:20px;height:20px;color:var(--c-ink-2);pointer-events:none;stroke-width:1.75;
}
/* دکمه ارسال عمداً «متنی» است، نه یک دکمه رنگی سوم:
   تنها CTA رنگیِ هدر، دکمه تماس (.header-cta / .btn-primary) است. */
.header-search .search-submit{
  position:absolute;inset-inline-end:1px;top:50%;transform:translateY(-50%);
  height:34px;padding:0 16px;
  border-inline-start:1px solid var(--c-line);
  border-radius:0;
  background:transparent;color:var(--c-ink);
  font-size:15px;font-weight:500;line-height:1;
  transition:color var(--t-fast);
}
@media (hover:hover){.header-search .search-submit:hover{color:var(--c-primary)}}
.header-search .search-submit:focus-visible{outline:2px solid var(--c-primary);outline-offset:-2px;border-radius:var(--r-sm)}

/* ---------- پیشنهاد زنده — app.js پرش می کند ---------- */
.search-suggest{
  position:absolute;top:calc(100% + 8px);inset-inline:0;z-index:60;
  background:var(--c-surface);border:1px solid var(--c-line);
  border-radius:var(--r-md);box-shadow:var(--sh-2);
  max-height:70vh;overflow-y:auto;overscroll-behavior:contain;
  padding:6px;display:none;
}
.search-suggest.is-open{display:block}
.suggest-group-title{
  font-size:15px;color:var(--c-ink-2);font-weight:500;
  padding:10px 10px 5px;
}
.suggest-item{
  display:flex;align-items:center;gap:11px;
  padding:9px 10px;border-radius:var(--r-sm);
  transition:background var(--t-fast);
}
.suggest-item:hover,.suggest-item.is-active{background:var(--c-line-2)}
.suggest-item img{
  width:44px;height:44px;object-fit:contain;flex:none;
  border-radius:var(--r-sm);background:var(--c-line-2);
}
.suggest-item .t{
  font-size:15px;color:var(--c-ink);line-height:1.6;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.suggest-item .s{font-size:15px;color:var(--c-ink-2)}
.suggest-item .p{margin-inline-start:auto;font-size:15px;font-weight:700;color:var(--c-ink);flex:none}
.suggest-empty{padding:22px;text-align:center;color:var(--c-ink-2);font-size:15px}
.suggest-all{
  display:block;text-align:center;padding:12px;margin-top:4px;
  border-top:1px solid var(--c-line-2);
  color:var(--c-primary);font-size:15px;font-weight:500;
}
@media (hover:hover){.suggest-all:hover{color:var(--c-primary-dark)}}

/* ==========================================================================
   ۴) اکشن های هدر
   ========================================================================== */
.header-actions{display:flex;align-items:center;gap:4px;flex:none;margin-inline-start:auto}
.hact{
  position:relative;display:inline-flex;align-items:center;gap:8px;
  min-height:44px;padding:0 12px;border-radius:var(--r-md);
  color:var(--c-ink-2);font-size:15px;font-weight:500;
  transition:background var(--t-fast),color var(--t-fast);
}
.hact svg{width:22px;height:22px;stroke-width:1.75;flex:none}
@media (hover:hover){.hact:hover{background:var(--c-line-2);color:var(--c-ink)}}
/* نشان روی خودِ آیکون بنشیند نه گوشه دکمه — در RTL آیکون سمت شروع (راست) است،
   و با inset-inline-end نشان روی متن «سبد خرید» می افتاد و ناخوانا می شد */
.hact-count{
  position:absolute;top:2px;inset-inline-start:6px;
  min-width:18px;height:18px;padding:0 5px;
  display:grid;place-items:center;
  background:var(--c-primary);color:#fff;
  /* استثنای «حداقل ۱۵px» در app.css: عددِ داخل یک دایره ۱۸px است، نه متن بدنه */
  font-size:11px;font-weight:700;border-radius:var(--r-full);
  line-height:1;
}
.hact-count:empty,.hact-count[data-count="0"]{display:none}

/* تنها CTA رنگیِ هدر */
.header-cta{margin-inline-start:var(--sp-2);min-height:44px;padding:0 18px}
.header-cta svg{width:18px;height:18px}

/* زیر ۱۲۸۰ فقط آیکون می ماند تا نوار هرگز سرریز نکند */
@media (max-width:1279px){
  .hact span,.header-cta span{display:none}
  .hact{padding:0 10px}
  .header-cta{padding:0 12px;min-width:44px}
}

/* ---------- دکمه همبرگر ---------- */
.hamburger{
  display:none;width:44px;height:44px;border-radius:var(--r-md);
  align-items:center;justify-content:center;color:var(--c-ink);flex:none;
  transition:background var(--t-fast);
}
.hamburger svg{width:24px;height:24px;stroke-width:1.75}
@media (hover:hover){.hamburger:hover{background:var(--c-line-2)}}
@media (max-width:900px){.hamburger{display:inline-flex}}

/* ==========================================================================
   ۵) نوار دسته ها + مگامنو (دسکتاپ)
   ========================================================================== */
.navbar{border-top:1px solid var(--c-line-2);background:var(--c-surface)}
/* مگا نسبت به همین container موقعیت می گیرد تا هم عرض محتوای صفحه باشد */
.navbar>.container{position:relative}

/* نامِ دسته باید *کامل* دیده شود — سه نقطه نسخه قبل حذف شد.
   حساب سرانگشتی: ده دسته این فروشگاه اسم های بلند دارند («ماشین ظرفشویی»،
   «لوازم آشپزخانه»)؛ هر برچسب حدود ۹۰px است و با پدینگ و فلشِ مگا حدود ۱۳۰px
   می شود ⇒ نزدیک ۱۳۰۰px. بیشینه عرضِ مفیدِ .container هم ۱۲۵۶px است
   (۱۳۲۰ منهای ۲×۳۲ پدینگ) و در ۱۰۲۴px فقط ۹۶۰px. یعنی حتی با کمینه ترین
   پدینگ هم همیشه جا نمی شود. سه راه بود: بریدنِ نام (خواسته مالک را نقض
   می کرد)، کوچک کردنِ فونت زیر ۱۵px (قاعده سفت وسختِ پروژه)، یا لغزاندنِ نوار.
   سومی انتخاب شد؛ وقتی محتوا جا شود این قاعده هیچ اثر دیداری ندارد.

   ⚠ چرا این کار مگا را نمی بَرد: .mega موقعیتش را از .navbar>.container
   می گیرد (تنها عنصرِ position:relative این شاخه) و آن ظرف *والدِ* همین
   ظرفِ اسکرول است. طبق CSS 2.1 §11.1.1 عنصر absolute که بلوکِ دربرگیرنده اش
   بیرونِ ظرفِ برش باشد، بریده نمی شود. شرطِ لازمِ این معافیت، static ماندنِ
   .mainnav>li است — با یک position:relative روی li، بلوکِ دربرگیرنده می آید
   داخلِ ظرفِ اسکرول و پنل همان جا قیچی می شود.
   به همین دلیل هم هرگز transform / filter / contain / will-change روی
   .mainnav نگذارید: هر کدام .mainnav را خودش به بلوکِ دربرگیرنده تبدیل
   می کند و همان قیچی برمی گردد. (mask/clip-path هم checkdesign را می شکند،
   پس محوکننده لبه هم عمداً نداریم.)
   overflow-y:hidden صریح است تا مرورگر آن را به auto ترفیع ندهد و نوارِ
   اسکرولِ عمودیِ بی مورد نسازد. */
.mainnav{
  display:flex;align-items:center;gap:0;min-width:0;
  height:var(--navbar-h);transition:height .18s var(--ease);
  overflow-x:auto;overflow-y:hidden;
  overscroll-behavior-inline:contain;
  -webkit-overflow-scrolling:touch;
  scroll-padding-inline:12px;
  /* نوارِ اسکرول پنهان است: در دسکتاپ اغلب عرض ها محتوا جا می شود و یک نوارِ
     خاکستریِ دائمی زیرِ منو فقط شلوغی است. لغزش با ترک پد/شیفت+چرخ و پرشِ
     خودکارِ فوکوس با Tab کار می کند. */
  scrollbar-width:none;-ms-overflow-style:none;
}
.mainnav::-webkit-scrollbar{display:none}
/* flex:none یعنی هیچ آیتمی زیرِ عرضِ نامش جمع نمی شود؛ سرریز به اسکرول
   می رود نه به بریدنِ متن. */
.mainnav>li{position:static;display:flex;flex:none;min-width:0}
.mainnav>li>a{
  display:inline-flex;align-items:center;gap:5px;min-width:0;
  height:var(--navbar-h);padding:0 10px;
  font-size:15px;font-weight:500;color:var(--c-ink-2);
  white-space:nowrap;position:relative;
  transition:color var(--t-fast),height .18s var(--ease);
}
.site-header.is-stuck .mainnav,
.site-header.is-stuck .mainnav>li>a{height:var(--navbar-h-stuck)}
@media (prefers-reduced-motion:reduce){
  .mainnav,.mainnav>li>a{transition:none}
}
.mainnav>li>a>svg{width:16px;height:16px;flex:none;stroke-width:1.75;color:var(--c-ink-3);transition:transform var(--t-fast)}
.mainnav>li>a::after{
  content:'';position:absolute;inset-inline:10px;bottom:0;height:2px;
  background:var(--c-primary);
  transform:scaleX(0);transform-origin:center;transition:transform var(--t-fast);
}
.mainnav>li.is-open>a,.mainnav>li>a[aria-current=page]{color:var(--c-primary)}
.mainnav>li.is-open>a::after,.mainnav>li>a[aria-current=page]::after{transform:scaleX(1)}
.mainnav>li.is-open>a>svg{transform:rotate(180deg);color:var(--c-primary)}
@media (hover:hover){
  .mainnav>li>a:hover{color:var(--c-primary)}
  .mainnav>li>a:hover::after{transform:scaleX(1)}
}
.mainnav>li>a:focus-visible{outline:2px solid var(--c-primary);outline-offset:-3px;border-radius:var(--r-sm)}

/* برچسب کوچک (جدید / تخفیف) از ستون badge جدول menus */
.nav-badge{
  /* برچسبِ حبابیِ کنار عنوان منو — فرا-داده فرعی، نه متن بدنه.
     ۱۲٫۵px کفِ خوانایی فارسی در حباب است؛ ۱۱px حروفِ «تخفیف» را می بندد. */
  flex:none;font-size:12.5px;font-weight:700;line-height:1;
  padding:4px 7px;border-radius:var(--r-full);
  background:var(--c-primary-soft);color:var(--c-primary-dark);
}

/* ---------- پنل مگا ---------- */
.mega{
  position:absolute;inset-inline:0;top:100%;z-index:80;
  background:var(--c-surface);
  border:1px solid var(--c-line);border-top:0;
  border-radius:0 0 var(--r-lg) var(--r-lg);
  box-shadow:var(--sh-2);
  padding:var(--sp-6);
  max-height:calc(100vh - var(--header-h) - 24px);
  /* هر دو محور صریح: با نوشتن فقط overflow-y:auto، مرورگر overflow-x را هم
     auto می کند و کوچک ترین سرریز افقی یک اسکرول بار افقی زشت زیر پنل می سازد.
     بین نوار و پنل هیچ فاصله ای نیست (پنل دقیقاً top:100%)، پس «ناحیه امن»
     را app.js با تشخیص جهت حرکت ماوس می سازد نه با شبه عنصرِ بیرون زده. */
  overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;
  opacity:0;visibility:hidden;transform:translateY(-6px);
  /* visibility را نباید «مدت دار» ترنزیشن داد: در لحظه صفرِ ترنزیشن مقدار
     محاسبه شده هنوز hidden است و focus() برنامه ای (فلش پایین با کیبورد) بی اثر
     می ماند. الگوی درست: در حالت بسته با تأخیرِ برابرِ مدت محو، و در حالت باز
     با مدت و تأخیر صفر ⇒ باز شدن آنی و بسته شدن بعد از پایان انیمیشن. */
  transition:opacity .16s var(--ease),transform .16s var(--ease),visibility 0s linear .16s;
}
.mainnav>li.is-open>.mega{
  opacity:1;visibility:visible;transform:none;
  transition:opacity .16s var(--ease),transform .16s var(--ease),visibility 0s;
}
@media (prefers-reduced-motion:reduce){
  .mega,.mainnav>li.is-open>.mega{transition:none;transform:none}
}

/* مارک آپ فقط .mega-main را دارد؛ گریدِ دو ستونیِ قبلی یک ستونِ ۲۶۸px خالی
   می ساخت و پنل را نامتوازن نشان می داد. */
.mega-inner{display:block}
.mega-main{min-width:0}

/* سرستون پنل: عنوان دسته + لینک «مشاهده همه» */
.mega-top{
  display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);
  padding-bottom:var(--sp-3);margin-bottom:var(--sp-5);
  border-bottom:1px solid var(--c-line-2);
}
.mega-top h3{font-size:16px;font-weight:700;color:var(--c-ink);min-width:0}
.mega-all{
  display:inline-flex;align-items:center;gap:5px;flex:none;
  font-size:15px;font-weight:500;color:var(--c-primary);
  transition:color var(--t-fast);
}
.mega-all svg{width:15px;height:15px;stroke-width:2}
@media (hover:hover){.mega-all:hover{color:var(--c-primary-dark)}}

/* حالت ۱ — فرزندان نوه دارند: هر فرزند یک ستون با تیتر */
.mega-cols{
  display:grid;
  grid-template-columns:repeat(var(--mega-cols,4),minmax(0,1fr));
  gap:var(--sp-5) var(--sp-6);
}
.mega-col{min-width:0}
.mega-col>a.mega-head{
  display:block;font-size:15px;font-weight:700;color:var(--c-ink);
  padding-bottom:9px;margin-bottom:9px;border-bottom:1px solid var(--c-line-2);
  transition:color var(--t-fast);
}
@media (hover:hover){.mega-col>a.mega-head:hover{color:var(--c-primary)}}
.mega-col ul li{margin-bottom:1px}
.mega-col ul a{
  display:block;padding:6px 0;font-size:15px;color:var(--c-ink-2);
  border-radius:var(--r-sm);
  transition:color var(--t-fast);
}
@media (hover:hover){.mega-col ul a:hover{color:var(--c-primary)}}

/* حالت ۲ — فرزندان نوه ندارند: فهرست تخت که در چند ستون جاری می شود.
   با columns، ترتیب خواندن «بالا به پایینِ هر ستون» می ماند که برای فهرست
   الفبایی دسته درست تر از grid سطری است. تا ۱۱ فرزند هم مرتب می ماند. */
.mega-list{columns:var(--mega-cols,4);column-gap:var(--sp-6)}
.mega-list li{break-inside:avoid;margin-bottom:1px}
.mega-list a{
  display:block;padding:8px 10px;border-radius:var(--r-sm);
  font-size:15px;color:var(--c-ink-2);
  transition:background var(--t-fast),color var(--t-fast);
}
@media (hover:hover){
  .mega-list a:hover{background:var(--c-line-2);color:var(--c-ink)}
}
.mega a:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px;border-radius:var(--r-sm)}

@media (max-width:1180px){
  .mega-cols,.mega-list{--mega-cols:3 !important}
  .mega{padding:var(--sp-5)}
  /* پدینگ دو پیکسل بیشتر جمع می شود تا در تبلتِ افقی و لپ تاپِ ۱۰۲۴ چند
     دسته بیشتری بدون لغزاندن دیده شوند. فونت عمداً همان ۱۵px می ماند. */
  .mainnav>li>a{padding:0 8px}
  .mainnav>li>a::after{inset-inline:8px}
}
@media (max-width:900px){.navbar{display:none}}

/* ==========================================================================
   ۶) هدر موبایل — دو ردیفه (طراحی مستقل، نه دسکتاپِ کوچک شده)
   ردیف ۱: همبرگر · لوگو · سبد    ردیف ۲: جستجوی تمام عرض
   --------------------------------------------------------------------------
   ⚠ mobile.css بعد از این فایل لود می شود و روی .mainbar / .header-search input
   ارتفاع و flex تحمیل می کند. چون آن فایل خارج از دامنه این تغییر است، اینجا
   با یک کلاسِ بیشتر (.site-header …) تخصص بالاتر گرفته می شود. هیچ !important
   لازم نشد. کلاس ها و قلاب های app.js دست نخورده اند.
   ========================================================================== */
@media (max-width:900px){
  /* ردیف دوم به --header-h اضافه می شود تا لنگرها و ستون های sticky
     صفحات دیگر زیر هدر نروند */
  :root{--msearch-h:54px}

  .site-header .mainbar{
    display:grid;
    grid-template-columns:auto minmax(0,1fr) auto;
    grid-template-rows:var(--mainbar-h) var(--msearch-h);
    grid-template-areas:
      "burger logo actions"
      "search search search";
    align-items:center;
    height:auto;
    column-gap:var(--sp-2);row-gap:0;
  }
  .site-header .hamburger{grid-area:burger}
  .site-header .logo{grid-area:logo;justify-self:start}
  .site-header .header-actions{grid-area:actions;justify-self:end;margin-inline-start:0;gap:var(--sp-1)}
  .site-header .header-search{
    grid-area:search;align-self:start;
    width:100%;max-width:none;margin-inline-end:0;
  }
  /* ۴۶px هدف لمس و ۱۶px فونت تا iOS موقع فوکوس صفحه را زوم نکند */
  .site-header .header-search input{
    height:46px;font-size:16px;
    padding-inline-start:42px;padding-inline-end:14px;
  }
  .site-header .header-search .search-icon{inset-inline-start:12px;width:19px;height:19px}

  /* حالت جمع شده: فقط ۱۰px کوتاه تر — بسیار کمتر از فاصله ۶۰px هیسترزیس */
  .site-header.is-stuck .mainbar{height:auto;grid-template-rows:52px 50px}
  .site-header.is-stuck .header-search input{height:44px}
  .site-header.is-stuck .logo img{height:36px}

  /* شماره تلفن در نوار بالایی نباید ۱۲px بماند */
  body>.topbar{font-size:15px}
}

/* ==========================================================================
   ۷) کشوی موبایل — دو سطحی (drill-down)
   ⚠ عمداً آکاردئون نیست: منطقِ سطح بندی در app.js است (data-mp-open /
   data-mp-pane / is-drilled) و بعضی دسته ها ۱۱ فرزند دارند. سطح دوم روی سطح
   اول می لغزد. اینجا فقط ظاهر بازطراحی شده و همه قلاب های JS دست نخورده است.
   ========================================================================== */
.nav-overlay{
  position:fixed;inset:0;z-index:990;
  background:rgba(29,29,27,.45);
  opacity:0;visibility:hidden;
  transition:opacity var(--t-slow),visibility 0s linear .25s;
  /* عمداً backdrop-filter ندارد: بلورِ یک لایه تمام صفحه روی موبایلِ ضعیف
     هر فریم هزینه دارد و پشت ۴۵٪ تیرگی عملاً دیده نمی شود. */
}
.nav-overlay.is-open{opacity:1;visibility:visible;transition:opacity var(--t-slow),visibility 0s}

/* قفل اسکرول بدون پرش: app.js مقدار top را برابر منفیِ scrollY می گذارد و
   موقع بستن همان جا برمی گرداند. overflow:hidden تنها، در iOS کار نمی کند. */
body.is-locked{
  position:fixed;inset-inline:0;width:100%;
  overflow:hidden;overscroll-behavior:none;
}

.mobile-panel{
  position:fixed;inset-block:0;inset-inline-start:0;z-index:1000;
  width:min(360px,90vw);
  background:var(--c-surface);
  display:flex;flex-direction:column;
  transform:translateX(var(--mp-out));
  /* همان الگوی .mega — باز شدنِ آنیِ visibility تا focus() کار کند،
     پنهان شدن با تأخیر تا لغزشِ بسته شدن تا آخر دیده شود */
  transition:transform var(--t-slow),visibility 0s linear .25s;
  box-shadow:var(--sh-2);
  visibility:hidden;
  padding-top:env(safe-area-inset-top,0px);
  padding-bottom:env(safe-area-inset-bottom,0px);
  padding-inline-start:env(safe-area-inset-right,0px);
}
.mobile-panel.is-open{
  transform:translateX(0);visibility:visible;
  transition:transform var(--t-slow),visibility 0s;
}
@media (prefers-reduced-motion:reduce){
  .mobile-panel,.mobile-panel.is-open,.nav-overlay{transition:none}
}

/* سر کشو — خارج از ناحیه اسکرول است، پس همیشه دیده می شود */
.mp-head{
  display:flex;align-items:center;gap:var(--sp-2);
  padding:8px 12px;border-bottom:1px solid var(--c-line);flex:none;
  min-height:60px;background:var(--c-surface);
}
.mp-title{
  flex:1 1 auto;min-width:0;font-size:15.5px;font-weight:700;color:var(--c-ink);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.mp-back,.mp-close{
  width:44px;height:44px;flex:none;border-radius:var(--r-md);
  display:grid;place-items:center;
  background:transparent;color:var(--c-ink-2);
  border:1px solid var(--c-line);
  transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast);
}
.mp-back[hidden]{display:none}
.mp-back svg,.mp-close svg{width:20px;height:20px;stroke-width:1.75}
.mp-back:active,.mp-close:active{background:var(--c-line-2);color:var(--c-ink)}
.mp-back:focus-visible,.mp-close:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}

.mp-search{padding:12px;border-bottom:1px solid var(--c-line-2);flex:none;background:var(--c-surface)}
.mp-search input{width:100%;min-height:46px;font-size:16px}

/* ناحیه اسکرول: میزبان دو سطح که روی هم قرار می گیرند.
   min-height:0 لازم است وگرنه آیتمِ فلکسِ ستونی کوچک تر از محتوایش نمی شود
   و سرِ کشو و پایِ کشو از قاب بیرون می زنند. */
.mp-body{
  flex:1 1 auto;min-height:0;position:relative;overflow:hidden;
  background:var(--c-surface);
}
.mp-pane{
  position:absolute;inset:0;
  overflow-y:auto;-webkit-overflow-scrolling:touch;
  overscroll-behavior:contain;
  padding:4px 0 14px;
  background:var(--c-surface);
  /* همان الگوی visibility: نمایان شدن آنی (تا focus() کار کند)، پنهان شدن
     با تأخیرِ برابرِ مدت لغزش. app.js در focusables() هم دقیقاً روی
     getComputedStyle(el).visibility حساب می کند — display:none نکنید. */
  transition:transform var(--t-slow),visibility 0s linear .25s;
  visibility:hidden;
}
/* سطح ریشه بیرون که رفت، به سمت مقابلِ ورود می لغزد (هر دو سطح هم جهت حرکت می کنند) */
.mp-pane[data-mp-pane]{transform:translateX(var(--mp-in))}
.mp-pane-root{
  transform:translateX(0);visibility:visible;
  transition:transform var(--t-slow),visibility 0s;
}
.mobile-panel.is-drilled .mp-pane-root{
  transform:translateX(var(--mp-out));visibility:hidden;
  transition:transform var(--t-slow),visibility 0s linear .25s;
}
.mp-pane.is-active{
  transform:translateX(0);visibility:visible;
  transition:transform var(--t-slow),visibility 0s;
}
@media (prefers-reduced-motion:reduce){
  .mp-pane,.mp-pane-root,.mp-pane.is-active,.mobile-panel.is-drilled .mp-pane-root{transition:none}
}

.mp-nav>li+li{border-top:1px solid var(--c-line-2)}
.mp-nav a,.mp-nav .mp-drill{
  display:flex;align-items:center;gap:11px;width:100%;
  min-height:54px;padding:12px 16px;
  font-size:15px;color:var(--c-ink);text-align:start;line-height:1.5;
  -webkit-tap-highlight-color:transparent;
  transition:background var(--t-fast);
}
.mp-nav a:active,.mp-nav .mp-drill:active{background:var(--c-line-2)}
.mp-nav .mp-label{flex:1 1 auto;min-width:0}
.mp-nav .chev{flex:none;width:20px;height:20px;color:var(--c-ink-3);stroke-width:1.75}
.mp-nav .mp-badge{
  /* هم اندازه .nav-badge — ۱۲٫۵px کفِ خوانایی فارسی در حباب */
  flex:none;font-size:12.5px;font-weight:700;line-height:1;padding:4px 7px;
  border-radius:var(--r-full);background:var(--c-primary-soft);color:var(--c-primary-dark);
}
.mp-nav .mp-count{flex:none;font-size:14px;color:var(--c-ink-2)}
.mp-nav a:focus-visible,.mp-nav .mp-drill:focus-visible{
  outline:2px solid var(--c-primary);outline-offset:-2px;
}

/* تیتر سطح دوم + لینک «مشاهده همه …» */
.mp-sub-head{
  padding:12px 16px;border-bottom:1px solid var(--c-line-2);
  background:var(--c-bg);
}
.mp-sub-head .mp-all{
  display:inline-flex;align-items:center;gap:6px;min-height:0;padding:0;
  font-size:15px;font-weight:700;color:var(--c-primary);
}
.mp-sub-head .mp-all svg{width:16px;height:16px;stroke-width:2}

/* پای کشو — چسبان */
.mp-foot{
  flex:none;padding:12px;border-top:1px solid var(--c-line);
  display:grid;gap:8px;background:var(--c-surface);
}
.mp-foot .btn{min-height:48px;width:100%}
/* auto-flow تا اگر فقط یکی از تلفن/واتس اپ تنظیم شده بود، جای خالی نماند */
.mp-foot-row{display:grid;grid-auto-flow:column;grid-auto-columns:1fr;gap:8px}
.mp-foot .mp-phone,.mp-foot .mp-wa{
  display:flex;align-items:center;justify-content:center;gap:7px;
  min-height:46px;border-radius:var(--r-md);
  font-size:15px;font-weight:500;
  background:var(--c-surface);color:var(--c-ink);
  border:1px solid var(--c-line);min-width:0;
}
.mp-foot .mp-phone{direction:ltr;unicode-bidi:isolate}
.mp-foot .mp-phone svg,.mp-foot .mp-wa svg{color:var(--c-primary)}
.mp-foot .mp-phone span,.mp-foot .mp-wa span{
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;
}
.mp-foot svg{width:18px;height:18px;flex:none;stroke-width:1.75}

/* ==========================================================================
   ۸) نوار پایین موبایل — «کلیدهای نرم» (بازطراحی)
   مارک آپش در views/layout/footer.php است.
   --------------------------------------------------------------------------
   چرا عوض شد: چیدمانِ قبلی — پنج ستونِ مساویِ سفید، آیکونِ خطیِ لخت و برچسبِ
   زیرش — عیناً در سایتِ دیگری از همین مالک هم هست و دو سایت را هم شکل نشان
   می داد. حالا آیکون داخل یک «کلیدِ» نرمِ خاکستریِ کشیده می نشیند و آیتمِ
   فعال همان کلید را قرمزِ توپر می کند؛ برچسب فقط پررنگ تر و تیره تر می شود.

   چرا هویت را به «کلید» بستیم و نه به حالتِ فعال: در صفحه محصول و دسته و
   وبلاگ هیچ کدام از این پنج آیتم فعال نیست. اگر شخصیتِ نوار از آیتمِ فعال
   می آمد (نوارِ خاکستری با تبِ سفید و…) در همان صفحه ها که بیشترین بازدید
   را دارند، نوار بی شکل می شد. کلید همیشه هست.

   ⚠ --mbar-h تنها منبعِ حقیقتِ ارتفاعِ این نوار است. نوارِ خریدِ چسبانِ صفحه
   محصول (product.css) و دکمه بازگشت به بالا (mobile.css) هر دو خودشان را با
   همین توکن بالای این نوار نگه می دارند، پس عوض کردنش فقط همین جا لازم است و
   هیچ فایلی نباید عددِ ۶۲ را دوباره دستی بنویسد. ارتفاعِ محتوا
   (۲۸ کلید + ۴ فاصله + ۱۸ برچسب = ۵۰px) با ۶px تنفسِ بالا و پایین در ۶۲px جا می شود.
   ⚠ backdrop-filter عمداً ندارد — روی موبایلِ ضعیف هر فریم هزینه دارد.
   ⚠ همه قلاب های app.js دست نخورده اند: .mobile-bar · .mb-count[data-count]
     · [data-menu-open] · #mobilePanel · .is-active
   ========================================================================== */
.mobile-bar{
  display:none;
  position:fixed;inset-block-end:0;inset-inline:0;z-index:880;
  background:var(--c-surface);
  border-top:1px solid var(--c-line);
  padding-bottom:env(safe-area-inset-bottom,0px);
}
.mobile-bar ul{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));align-items:center}
.mobile-bar a{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;
  height:var(--mbar-h);min-width:0;padding:0 2px;
  /* غیرفعال = --c-ink-2. عمداً نه --c-ink-3: آن یکی روی سفید ۳٫۳:۱ است و
     برای متن AA را رد نمی کند. --c-ink-2 روی سفید ۵٫۸:۱ و روی کلید ۵٫۴:۱. */
  font-size:15px;font-weight:500;color:var(--c-ink-2);line-height:1.2;
  position:relative;transition:color var(--t-fast);
  -webkit-tap-highlight-color:transparent;
}
/* «کلید» — کشیده و نه دایره، تا کنارِ برچسبِ ۱۵پیکسلیِ فارسی پهن تر از بلند
   دیده شود و ردیف آرام بماند. ۴۴×۲۸ خودش هدفِ لمسیِ اضافه نیست؛ هدفِ لمسیِ
   واقعی کلِ <a> است (۶۲px ارتفاع × حداقل ۶۴px عرضِ ستون در ۳۲۰px). */
.mobile-bar .mb-ico{
  display:grid;place-items:center;flex:none;
  width:44px;height:28px;border-radius:var(--r-full);
  background:var(--c-bg);color:var(--c-ink-2);
  transition:background var(--t-fast),color var(--t-fast);
}
.mobile-bar svg{width:21px;height:21px;stroke-width:1.75;flex:none}
.mobile-bar .mb-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}

/* حالت فعال. سلکتور عمداً یک پله تخصصی تر (ul اضافه) است چون bosch.css بعد
   از این فایل لود می شود و آنجا «.mobile-bar a.is-active{color:var(--c-primary)}»
   نوشته شده؛ با برچسبِ قرمز *و* کلیدِ قرمز، دو قرمزِ هم زمان روی یک آیتم
   می افتاد. حالا قرمز فقط در کلید است و برچسب مشکیِ پررنگ.
   [aria-expanded=true] برای «دسته ها»ست: app.js همین ویژگی را روی
   [data-menu-open] می گذارد، پس تا وقتی کشو باز است آن آیتم هم فعال دیده
   می شود — بدون یک خط جاوااسکریپتِ تازه. */
.mobile-bar ul a.is-active,
.mobile-bar ul a[aria-expanded=true]{color:var(--c-ink);font-weight:700}
.mobile-bar ul a.is-active .mb-ico,
.mobile-bar ul a[aria-expanded=true] .mb-ico{background:var(--c-primary);color:#fff}

/* بازخوردِ لمس روی خودِ کلید می نشیند نه کلِ ستون — نوار جابه جا به نظر نرسد */
.mobile-bar a:active .mb-ico{background:var(--c-line)}
.mobile-bar ul a.is-active:active .mb-ico{background:var(--c-primary-dark)}
.mobile-bar a:focus-visible{outline:2px solid var(--c-primary);outline-offset:-3px;border-radius:var(--r-sm)}

/* شمارنده روی گوشه کلید می نشیند، نه وسطِ هوا. حلقه سفید لازم است چون روی
   کلیدِ قرمزِ حالتِ فعال، دایره قرمز در زمینه قرمز گم می شد. */
.mobile-bar .mb-count{
  position:absolute;top:4px;inset-inline-end:calc(50% - 28px);
  min-width:17px;height:17px;padding:0 4px;
  display:grid;place-items:center;background:var(--c-primary);color:#fff;
  /* عددِ داخل دایره ۱۷px — استثنای «حداقل ۱۵px» */
  font-size:10px;font-weight:700;border-radius:var(--r-full);line-height:1;
  box-shadow:0 0 0 2px var(--c-surface);
}
.mobile-bar .mb-count:empty,.mobile-bar .mb-count[data-count="0"]{display:none}
@media (prefers-reduced-motion:reduce){
  .mobile-bar a,.mobile-bar .mb-ico{transition:none}
}
@media (max-width:900px){
  .mobile-bar{display:block}
  /* فضای امن تا محتوا زیر نوار نرود */
  body{padding-bottom:calc(var(--mbar-h) + 2px + env(safe-area-inset-bottom,0px))}
}
/* در ۳۲۰–۴۰۰px هر ستون فقط ۶۴ تا ۸۰px است؛ کلید کمی باریک تر می شود تا
   برچسبِ «دسته ها» بدون سه نقطه جا شود. font-size هم دوباره تصریح می شود:
   mobile.css بعد از این فایل لود می شود و پیش تر همین برچسب ها را ۹٫۵px
   می کرد؛ سلکتور یک پله تخصصی تر است تا اگر آن قاعده برگشت برنده نشود. */
@media (max-width:400px){
  .mobile-bar li a{font-size:15px}
  .mobile-bar li .mb-ico{width:38px;height:27px}
  .mobile-bar li .mb-count{inset-inline-end:calc(50% - 25px)}
}

/* نوار بالایی هم مثل هدر در چاپ حذف شود (app.css فقط .site-header را می برد،
   و .topbar دیگر داخل هدر نیست) */
@media print{
  .topbar,.nav-overlay,.mobile-panel{display:none !important}
}

/* ==== card.css ==== */

/* ==========================================================================
   کارت محصول
   --------------------------------------------------------------------------
   سه حالتِ کاملاً مجزا (منطقِ انتخاب در views/partials/product-card.php):

     .pcard            قیمت دار و موجود   → قیمت + دکمه «افزودن به سبد»
     .pcard.is-oos     قیمت دار ناموجود   → قیمتِ خاموش + دکمه «اطلاع از موجودی»
     .pcard.is-quote   بدون قیمت (استعلامی) → فقط دکمه استعلام، بدون هیچ خطِ قیمت

   ⚠ قانونِ اصلِ کاتالوگ: از ۴۸۵ محصول، ۳۸۵ تا price=0 هستند. در حالتِ استعلامی
   نه قیمت چاپ می شود و نه جای خالیِ قیمت رزرو می شود؛ «قیمت» و «تماس بگیرید»
   هیچ وقت کنار هم دیده نمی شوند.

   هم ترازیِ کارت ها: .pcard-foot با margin-block-start:auto به کفِ کارت می چسبد،
   پس دکمه های همه کارت های یک ردیف — در هر سه حالت — روی یک خط می نشینند و
   ارتفاعِ کارت ها هم با stretch گرید یکسان می ماند.

   ⚠ کارت فقط یک دکمه دارد: «مشاهده جزئیات و خرید» که به صفحه محصول می رود
   (خواسته صریحِ کارفرما). «افزودن به سبد» و «تماس برای قیمت» از کارت برداشته
   شدند و فقط در صفحه محصول اند. یعنی روی صفحه دسته دیگر هیچ [data-add-to-cart]
   وجود ندارد؛ app.js با delegation کار می کند پس چیزی نمی شکند.
   تنها قلاب باقی مانده روی کارت: [data-wish] برای علاقه مندی.
   ========================================================================== */

/* ---------- گرید محصولات ---------- */
/* ⚠ گرید حالا <ul> است (فهرست محصولات باید فهرستِ واقعی باشد).
   بدونِ ریست، مرورگر بولت و تورفتگی می گذارد. list-style روی خودِ ul
   کافی نیست چون بعضی مرورگرها آن را به li ارث نمی دهند در حالتِ grid. */
.product-grid,
.product-grid > li{list-style:none}
/* ⚠ کلیدِ «صفحه بندی نداشته باشیم ولی کند نشود».
   content-visibility:auto به مرورگر می گوید چیدمان و رنگ آمیزیِ این
   کارت را تا وقتی نزدیکِ دید نشده انجام ندهد. با ۳۰۰ کارت تفاوتش
   بزرگ است.
   contain-intrinsic-size ارتفاعِ حدسی می دهد تا نوارِ اسکرول در حین
   اسکرول نپرد — بدون آن، پرشِ محتوا (CLS) می سازد. عدد از ارتفاعِ
   واقعیِ کارت آمده. */
.product-grid > li{
  min-width:0;display:flex;
  content-visibility:auto;
  contain-intrinsic-size:auto 360px;
}
.product-grid > li > .pcard{flex:1 1 auto}
.product-grid{margin:0;padding:0;
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:12px;
}
@media (min-width:640px){/* ⚠ گرید حالا <ul> است (فهرست محصولات باید فهرستِ واقعی باشد).
   بدونِ ریست، مرورگر بولت و تورفتگی می گذارد. list-style روی خودِ ul
   کافی نیست چون بعضی مرورگرها آن را به li ارث نمی دهند در حالتِ grid. */
.product-grid,
.product-grid > li{list-style:none}
.product-grid > li{min-width:0;display:flex}
.product-grid > li > .pcard{flex:1 1 auto}
.product-grid{margin:0;padding:0;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}}
@media (min-width:1024px){/* ⚠ گرید حالا <ul> است (فهرست محصولات باید فهرستِ واقعی باشد).
   بدونِ ریست، مرورگر بولت و تورفتگی می گذارد. list-style روی خودِ ul
   کافی نیست چون بعضی مرورگرها آن را به li ارث نمی دهند در حالتِ grid. */
.product-grid,
.product-grid > li{list-style:none}
.product-grid > li{min-width:0;display:flex}
.product-grid > li > .pcard{flex:1 1 auto}
.product-grid{margin:0;padding:0;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}}

/* ---------- بدنه کارت ---------- */
.pcard{
  position:relative;
  display:flex;flex-direction:column;
  min-width:0;                       /* فرزندِ گرید باید اجازه کوچک شدن داشته باشد */
  background:var(--c-surface);
  border:1px solid var(--c-line);
  border-radius:var(--r-lg);
  overflow:hidden;
  box-shadow:var(--sh-1);
  transition:box-shadow .2s var(--ease),border-color .2s var(--ease),transform .2s var(--ease);
  /* رندر تنبل: گرید دسته ها گاهی ۴۸ کارت دارد */
  content-visibility:auto;
  contain-intrinsic-size:auto 380px;
}
@media (hover:hover){
  .pcard:hover{border-color:#DADCE0;box-shadow:var(--sh-2);transform:translateY(-2px)}
  .pcard:hover .pcard-img img{transform:scale(1.04)}
  .pcard:hover .pcard-quick{opacity:1;transform:none}
}
.pcard:focus-within{border-color:var(--c-primary);box-shadow:0 0 0 3px rgba(var(--c-primary-rgb),.12)}

/* ---------- ۱) تصویر ---------- */
.pcard-img{
  position:relative;display:block;
  aspect-ratio:1/1;
  /* ⚠ سفید، نه خاکستری. تصویرِ خودِ محصولات پس زمینه سفیدِ توپر دارد؛ روی
     خاکستریِ --c-bg یک مربعِ سفیدِ واضح دورِ محصول دیده می شد. حالا تصویر با
     کارت یکی می شود و جداکننده زیر، مرزِ لازم را می سازد. */
  background:var(--c-surface);
  border-block-end:1px solid var(--c-line-2);
  padding:var(--sp-4);
  overflow:hidden;
}
.pcard-img img{
  width:100%;height:100%;object-fit:contain;
  transition:transform .25s var(--ease);
}
/* جای گیرِ عمدی برای دو محصولی که اصلاً تصویر ندارند */
.pcard-img .ph{
  width:100%;height:100%;display:grid;place-items:center;
  color:var(--c-line);
}
.pcard-img .ph svg{width:38px;height:38px;stroke-width:1.25}

/* ---------- ۲) برچسب (فقط وقتی لازم است) ---------- */
.pcard-flags{
  position:absolute;top:10px;inset-inline-start:10px;z-index:2;
  display:flex;flex-direction:column;gap:5px;align-items:flex-start;
}
.pcard-flag{
  padding:1px 9px;border-radius:var(--r-full);
  font-size:15px;font-weight:700;line-height:1.55;
  background:var(--c-ink);color:#fff;
}
.pcard-flag.off{background:var(--c-primary)}
.pcard-flag.new,
.pcard-flag.hot{background:var(--c-surface);color:var(--c-ink-2);border:1px solid var(--c-line)}

/* افزودن به علاقه مندی — روی دسکتاپ با hover، روی لمسی همیشه دیده می شود */
.pcard-quick{
  position:absolute;top:8px;inset-inline-end:8px;z-index:2;
  display:flex;flex-direction:column;gap:6px;
  opacity:0;transform:translateY(-4px);
  transition:opacity var(--t-fast),transform var(--t-fast);
}
.pcard-quick button{
  width:40px;height:40px;border-radius:var(--r-full);
  display:grid;place-items:center;
  background:var(--c-surface);border:1px solid var(--c-line);
  color:var(--c-ink-2);
  transition:color var(--t-fast),border-color var(--t-fast),background var(--t-fast);
}
.pcard-quick button svg{width:18px;height:18px;stroke-width:1.75}
@media (hover:hover){.pcard-quick button:hover{color:var(--c-primary);border-color:var(--c-primary)}}
.pcard-quick button.is-on{background:var(--c-primary);border-color:var(--c-primary);color:#fff}
@media (hover:none){.pcard-quick{opacity:1;transform:none}}

/* ---------- بدنه متنی ---------- */
.pcard-body{
  display:flex;flex-direction:column;flex:1 1 auto;
  min-width:0;min-height:0;
  padding:var(--sp-3) var(--sp-3) var(--sp-3);
  gap:6px;
}
@media (min-width:640px){.pcard-body{padding:14px}}

/* ۳) نام محصول — حداکثر دو خط */
.pcard .pcard-title{
  font-size:15px;font-weight:500;line-height:1.75;color:var(--c-ink);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;overflow-wrap:anywhere;
  min-height:calc(1.75em * 2);
  transition:color var(--t-fast);
}
@media (hover:hover){.pcard .pcard-title:hover{color:var(--c-primary)}}

/* ۴) کد مدل / SKU — کوچک و خاکستری */
.pcard-meta{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  font-size:15px;color:var(--c-ink-3);line-height:1.7;min-width:0;
}
.pcard-sku{
  direction:ltr;unicode-bidi:isolate;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;
}
.pcard-rating{display:inline-flex;align-items:center;gap:3px;color:var(--c-star);flex:none}
.pcard-rating svg{width:13px;height:13px}
.pcard-rating b{color:var(--c-ink-2);font-size:15px;font-weight:500}

/* ---------- بلوکِ پایین: قیمت (اگر هست) + دکمه ----------
   margin-block-start:auto ⇒ دکمه ها در همه حالت ها کفِ کارت هم تراز می شوند. */
.pcard-foot{
  margin-block-start:auto;
  padding-block-start:var(--sp-3);
  display:grid;gap:10px;min-width:0;
}

/* ۵) قیمت — فقط در حالتِ قیمت دار رندر می شود */
.pcard-amount{
  display:flex;flex-direction:column;justify-content:flex-end;gap:2px;
  min-height:42px;min-width:0;
}
.price-old{
  font-size:15px;color:var(--c-ink-3);text-decoration:line-through;
  text-decoration-color:var(--c-ink-3);line-height:1.6;
}
.price-now{
  display:flex;align-items:baseline;gap:4px;flex-wrap:wrap;
  font-size:20px;font-weight:700;color:var(--c-ink);line-height:1.45;
}
.price-now .unit{font-size:15px;font-weight:400;color:var(--c-ink-3)}
/* ⚠ اندازه با .pcard قفل شده چون mobile.css — که بعد از این فایل لود می شود —
   زیر ۹۰۰px قیمت را به کوچک تر از کفِ ۱۵px می برد. */
.pcard .price-now{font-size:20px}
.price-off{
  align-self:flex-start;
  background:var(--c-primary);color:#fff;
  font-size:15px;font-weight:700;line-height:1.9;
  padding:2px 8px;border-radius:var(--r-full);
  white-space:nowrap;
}

/* ۶) دکمه CTA — یک هندسه برای هر سه حالت، همیشه دیده می شود (بدون hover) */
.pcard-cta{
  display:flex;align-items:center;justify-content:center;gap:7px;
  width:100%;min-height:44px;padding-inline:10px;
  border:1px solid transparent;border-radius:var(--r-sm);
  font-size:15px;font-weight:700;line-height:1.2;text-align:center;
  transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast);
}
/* ⚠ برچسب عمداً ellipsis ندارد و اجازه شکستن به دو خط دارد.
   «مشاهده جزئیات و خرید» ۲۰ کاراکتر است و در کارتِ ۱۶۴ پیکسلیِ ۳۶۰px در یک خط
   جا نمی شود؛ با ellipsis می شد «مشاهده جزئیات و…» که بدتر از دو خط است. */
.pcard-cta .t{min-width:0;text-wrap:balance}

/* تکِ CTA برای هر سه حالت: سفید با کادر — مطابق btn-secondary در app.css.
   قرمز عمداً اینجا نیست: در یک گرید ۲۴تایی، ۲۴ دکمه قرمز صفحه را داد می زند و
   با قاعده «قرمز فقط برای CTA اصلی» می جنگد. CTA اصلی در صفحه محصول است. */
.pcard-cta--go{
  background:var(--c-surface);color:var(--c-ink);border-color:#DADCE0;
  white-space:normal;line-height:1.45;padding-block:6px;
}
@media (hover:hover){
  .pcard-cta--go:hover{background:var(--c-primary-soft);border-color:var(--c-primary);color:var(--c-primary-dark)}
}

/* حالت ب: قیمت دار ولی ناموجود — قیمت خاموش می شود، اما حذف نمی شود */
.pcard.is-oos .pcard-img img{filter:grayscale(1);opacity:.55}
.pcard.is-oos .price-now{color:var(--c-ink-2)}
.pcard.is-oos .price-now .unit{color:var(--c-ink-2)}
/* خطِ «ناموجود» زیر قیمت — چون دکمه دیگر این را نمی گوید، وضعیت باید
   جایی دیده شود وگرنه کاربر تا صفحه محصول نمی فهمد. */
.pcard-oos{
  font-size:15px;font-weight:500;line-height:1.6;color:var(--c-ink-2);
  display:flex;align-items:center;gap:5px;min-width:0;
}
.pcard-oos::before{
  content:'';width:7px;height:7px;flex:none;border-radius:50%;
  background:var(--c-ink-3);
}

/* حالت ج: بدون قیمت — .pcard-amount اصلاً رندر نمی شود، پس جای خالی نداریم */

/* ---------- ریزتنظیمِ نمایشگرهای کوچک ----------
   کفِ اندازه متن ۱۵px است، پس در گریدِ دوستونیِ ۳۶۰px فقط فاصله ها جمع می شوند
   نه متن؛ کوتاه شدنِ برچسبِ دکمه هم با .t (ellipsis + min-width:0) مهار می شود. */
@media (max-width:479px){
  .pcard-img{padding:var(--sp-3)}
  .pcard .pcard-title{line-height:1.7;min-height:calc(1.7em * 2)}
  .pcard-body{padding:10px 10px 12px;gap:5px}
  .pcard-foot{padding-block-start:10px;gap:8px}
  .pcard-amount{min-height:38px}
  .pcard .price-now{font-size:18px}
  .pcard-cta{gap:5px;padding-inline:6px}
  .pcard-quick button{width:36px;height:36px}
}
@media (prefers-reduced-motion:reduce){
  .pcard,.pcard-img img,.pcard-quick{transition:none}
  .pcard:hover{transform:none}
  .pcard:hover .pcard-img img{transform:none}
}

/* ---------- کارت افقی (سبد، مقایسه، نتایج جستجو) ---------- */
.pcard-h{
  display:flex;gap:14px;align-items:center;
  background:var(--c-surface);border:1px solid var(--c-line);
  border-radius:var(--r-lg);padding:12px;
}
/* سفید، به همان دلیلِ .pcard-img: تصویرِ محصول خودش زمینه سفید دارد */
.pcard-h .thumb{width:88px;height:88px;flex:none;border-radius:var(--r-sm);background:var(--c-surface);border:1px solid var(--c-line-2);overflow:hidden}
.pcard-h .thumb img{width:100%;height:100%;object-fit:contain}
.pcard-h .info{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:5px}
.pcard-h .info .t{font-size:15px;font-weight:500;line-height:1.7}
@media (max-width:560px){.pcard-h .thumb{width:70px;height:70px}}

/* ---------- کارت داخل ریل ---------- */
.rail .pcard{width:230px;min-width:230px}
/* در موبایل عرض کارت طوری است که همیشه بخشی از کارت بعدی دیده شود،
   تا کاربر بفهمد می تواند بکشد. در ۳۶۰px: ۱۶۴+۱۶+۱۶۴ = ۳۴۴ > ۳۲۸ عرض مفید. */
@media (max-width:639px){.rail .pcard{width:164px;min-width:164px}}

/* ---------- اسکلت کارت ---------- */
.pcard-skel{
  background:var(--c-surface);border:1px solid var(--c-line);
  border-radius:var(--r-lg);padding:12px;
}
.pcard-skel .im{aspect-ratio:1/1;border-radius:var(--r-sm);margin-bottom:12px}

/* ==== home.css ==== */

/* ==========================================================================
   کیچن بوش — صفحه اصلی
   لود پس از app/rtl/nav/card و پیش از bosch.css (لایه هویت) و mobile.css

   ترتیب بخش ها و دلیل وجود هرکدام — «چرا این بخش هست؟» برای هرکدام
   جواب دارد، وگرنه حذف شده است:

     اسلایدشو   → تصویر فروشگاه، بدون متن و بدون دکمه (خواسته کارفرما)
     دسته بندی  → کاربر تایپ ۱ (می دانم چه می خواهم) را در یک کلیک تمام کند
     پیشنهادی   → کالایی که واقعا قیمت و موجودی دارد، جلوی چشم بیاید
     تازه ها    → ورودی های جدید کاتالوگ
     تجربه بوش  → کاربر تایپ ۴ (اعتماد پیش از خرج بزرگ) را قانع کند
     اعتماد     → تایپ ۳ (اصل می خواهم)
     مشاوره     → تنها فرم صفحه
     وبلاگ      → عمق محتوایی و لینک داخلی؛ سیگنال سئو
     پرسش ها    → آخرین مانع های خرید

   ⚠ شماره گذاری بخش ها (.sec-num) حذف شد — خواسته صریح کارفرما. خود
     کلاس در bosch.css می ماند چون بی مصرف است و ضرری ندارد، ولی هیچ
     ویویی دیگر صدایش نمی زند.
   ========================================================================== */


/* ═══════════════════════════════════════════════════════════ ۱. اسلایدشو
   تمام عرض، بدون هیچ متن یا دکمه روی تصویر.

   ⚠ چون متنی روی اسلاید نیست، لایه تیره نیمه شفاف هم لازم نیست — یعنی
     همان «گلَس»ی که نمی خواستیم اصلا وارد طرح نمی شود.
   ⚠ aspect-ratio جای ارتفاع ثابت را می گیرد تا پیش از لود شدن عکس هم
     فضایش رزرو باشد و صفحه نپرد (CLS).
   ⚠ نسبت روی موبایل بازتر می شود، وگرنه بنر افقی به نوار باریک تبدیل
     می شود و چیزی از آن خوانده نمی شود. */
.kslider{
  position:relative; overflow:hidden;
  background:var(--c-panel);
  aspect-ratio:1600 / 520;
}
.kslider-track{display:flex;height:100%;transition:transform .45s var(--ease)}
.kslider-slide{flex:0 0 100%;height:100%;min-width:0}
.kslider-slide a{display:block;height:100%}
.kslider-slide img{width:100%;height:100%;object-fit:cover;display:block}

.kslider .hero-nav{
  position:absolute; top:50%; transform:translateY(-50%); z-index:2;
  width:44px; height:44px; display:grid; place-items:center;
  background:rgba(255,255,255,.92); color:var(--c-primary);
  border:1px solid var(--c-line); border-radius:2px;
}
.kslider .hero-nav:hover{background:#fff;border-color:var(--c-primary)}
.kslider .hero-nav.prev{inset-inline-end:16px}
.kslider .hero-nav.next{inset-inline-start:16px}
.kslider .hero-dots{
  position:absolute; inset-block-end:14px; inset-inline:0; z-index:2;
  display:flex; justify-content:center; gap:7px;
}
.kslider .hero-dots button{
  width:26px; height:3px; border-radius:0; border:0;
  background:rgba(255,255,255,.55); cursor:pointer;
}
.kslider .hero-dots button.is-active{background:var(--c-signal)}

@media (max-width:900px){ .kslider{aspect-ratio:16 / 10} }
@media (max-width:560px){ .kslider{aspect-ratio:4 / 3} }


/* ══════════════════════════════════════════════════ ۲. دسته بندی محصولات
   هر خانه یک عکس پس زمینه می گیرد (پنل ← دسته ها ← «تصویر دسته»).

   ⚠ گرید یکنواخت نیست: دو خانه اول بزرگ اند. دلیل کاربردی دارد —
     لباسشویی و ظرفشویی بیشتر ترافیک این سایت را می گیرند.
   ⚠ خانه بدون عکس (has-bg ندارد) میدان سرمه ای می ماند، نه «جای خالی
     عکس». حالت پیش فرض باید خودش تمام شده به نظر برسد. */
.disc-grid{
  display:grid; gap:1px; background:var(--c-line);
  border:1px solid var(--c-line);
  grid-template-columns:repeat(4,minmax(0,1fr));
}
.disc-cell{
  position:relative; overflow:hidden;
  display:flex; flex-direction:column; justify-content:flex-end;
  background:var(--c-primary-dark); min-height:220px; padding:22px;
  text-decoration:none; color:#fff;
}
.disc-cell.is-lead{grid-column:span 2;min-height:320px}
.disc-cell.is-lead .disc-name{font-size:23px}

/* لایه عکس جدا از خود خانه است تا فقط عکس زوم شود نه متن */
.disc-cell.has-bg::before{
  content:''; position:absolute; inset:0; z-index:0;
  background-image:var(--bg); background-size:cover; background-position:center;
  transition:transform .5s var(--ease);
}
.disc-cell:hover.has-bg::before{transform:scale(1.05)}

/* ⚠ پرده خوانایی. بدون این، نام دسته روی عکس روشن ناپدید می شود و
   کنتراست از حد AA می افتد. عمدا از پایین به بالاست و در کف غلیظ،
   نه یک لایه یکنواخت روی کل تصویر. */
.disc-cell.has-bg::after{
  content:''; position:absolute; inset:0; z-index:1;
  background:linear-gradient(to top,
    rgba(6,27,44,.94) 0%, rgba(6,27,44,.72) 34%,
    rgba(6,27,44,.22) 70%, rgba(6,27,44,.08) 100%);
}
.disc-in{position:relative;z-index:2;display:block}

.disc-name{margin:0;font-size:18px;font-weight:700;color:#fff;line-height:1.5}
.disc-n{display:block;margin-top:6px;font-size:13px;color:#B7C5D2}
.disc-go{
  display:inline-flex; align-items:center; gap:8px; margin-top:14px;
  font-size:14px; font-weight:600; color:#fff;
}
.disc-go::after{
  content:''; width:18px; height:1px; background:var(--c-signal);
  transition:width .2s var(--ease);
}
.disc-cell:hover .disc-go::after{width:34px}


/* ══════════════════════════════════════════ ۳. تجربه بوش (سرمقاله ای)
   چهار جعبه آیکون دار نیست. چیدمان مجله ای: شماره بزرگ کم رنگ، تیتر،
   و متنی که زیر تیتر آویزان می شود. آیکون عمدا وجود ندارد — آیکون
   عمومی («چرخ دنده» برای مهندسی) دقیقا همان چیزی است که یک صفحه
   تولیدشده را لو می دهد. */
.xp-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0}
.xp-item{padding:clamp(28px,3.4vw,44px);border-bottom:1px solid rgba(255,255,255,.14)}
.xp-item:nth-child(odd){border-inline-end:1px solid rgba(255,255,255,.14)}
.xp-item:nth-last-child(-n+2){border-bottom:0}
.xp-num{
  display:block; font-size:clamp(38px,4.6vw,60px); font-weight:700;
  line-height:1; color:rgba(255,255,255,.16); margin-bottom:16px;
}
.xp-t{margin:0 0 12px;font-size:clamp(18px,1.9vw,21px);font-weight:700;color:#fff}
.xp-d{margin:0;color:#B7C5D2;font-size:15.5px;line-height:1.95;max-width:52ch}


/* ═══════════════════════════════════════════════════════════ ۴. اعتماد
   چهار ستون جدا شده با خط عمودی. بدون آیکون دایره ای و بدون کارت — تا
   شبیه «بخش مزایای» هر فروشگاه دیگری نباشد. */
.trust-row{
  display:grid; grid-template-columns:repeat(4,minmax(0,1fr));
  gap:0; border-top:1px solid var(--c-line); border-bottom:1px solid var(--c-line);
}
.trust-cell{padding:clamp(24px,2.6vw,34px) clamp(16px,2vw,28px)}
.trust-cell + .trust-cell{border-inline-start:1px solid var(--c-line)}
.trust-i{display:block;width:26px;height:2px;background:var(--c-signal);margin-bottom:16px}
.trust-t{margin:0 0 8px;font-size:16.5px;font-weight:700;color:var(--c-ink)}
.trust-d{margin:0;font-size:14.5px;line-height:1.9;color:var(--c-ink-2)}


/* ═════════════════════════════════════════════════════════════ ۵. وبلاگ
   ⚠ چیدمان کاملا عوض شد. نسخه قبلی «مقاله بزرگ + فهرست کناری» بود؛
     حالا ردیف افقی کارت های هم اندازه با نوار عکس بالای هر کارت و
     تاریخ به عنوان کیکر. لحن «آرشیو مجله» نه «مقاله منتخب».
   ⚠ کارت ها کادر و سایه ندارند — فقط یک خط ضخیم بالای هر ستون که در
     هاور قرمز می شود. همان نشانه برند، در مقیاس کوچک. */
.blogrow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(18px,2.4vw,32px)}
.blogrow-item{
  display:flex; flex-direction:column; min-width:0;
  text-decoration:none; color:inherit;
  border-top:2px solid var(--c-ink); padding-top:16px;
  transition:border-color .18s var(--ease);
}
.blogrow-item:hover{border-top-color:var(--c-signal)}
.blogrow-img{
  display:block; background:var(--c-panel); overflow:hidden;
  aspect-ratio:3 / 2; margin-bottom:14px;
}
.blogrow-img img{width:100%;height:100%;object-fit:cover;transition:transform .45s var(--ease)}
.blogrow-item:hover .blogrow-img img{transform:scale(1.04)}
.blogrow-body{display:flex;flex-direction:column;min-width:0}
.blogrow-date{
  display:block; font-size:12.5px; font-weight:600; letter-spacing:.04em;
  color:var(--c-ink-3); margin-bottom:8px;
}
.blogrow-t{margin:0;font-size:16.5px;font-weight:700;line-height:1.7;color:var(--c-ink)}
.blogrow-item:hover .blogrow-t{text-decoration:underline;text-underline-offset:3px}
.blogrow-x{display:block;margin-top:9px;font-size:14.5px;line-height:1.9;color:var(--c-ink-2)}
.blogrow-go{
  display:inline-flex; align-items:center; gap:8px; margin-top:14px;
  font-size:14px; font-weight:600; color:var(--c-primary);
}
.blogrow-go::after{content:'';width:16px;height:1px;background:var(--c-primary);transition:width .2s var(--ease)}
.blogrow-item:hover .blogrow-go::after{width:28px}


/* ══════════════════════════════════════════════════════ ۶. فرم مشاوره
   روی نوار سرمه ای. دو ستون: پیام سمت راست، فرم کوتاه سمت چپ.
   فقط دو فیلد — نام و موبایل. هر فیلد اضافه نرخ تکمیل را پایین می آورد. */
.consult{display:grid;grid-template-columns:minmax(0,6fr) minmax(0,6fr);gap:clamp(28px,4vw,64px);align-items:center}
.consult-t{margin:0;font-size:clamp(22px,2.7vw,32px);font-weight:700;color:#fff;line-height:1.45}
.consult-d{margin:14px 0 0;color:#B7C5D2;font-size:16px;line-height:1.95;max-width:48ch}
.consult-phone{
  display:inline-flex; align-items:center; gap:10px; margin-top:22px;
  font-size:clamp(20px,2.2vw,26px); font-weight:700; color:#fff;
  direction:ltr; unicode-bidi:isolate;
}
.consult-form{display:grid;gap:14px}
.consult-form .input{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.25);color:#fff}
.consult-form .input::placeholder{color:#8FA3B5}
.consult-form .input:focus{background:rgba(255,255,255,.1);border-color:#fff;outline-color:rgba(255,255,255,.25)}
.consult-form .btn{background:#fff;color:var(--c-primary-dark);border-color:#fff}
.consult-form .btn:hover{background:var(--c-signal);border-color:var(--c-signal);color:#fff}
.consult-note{margin:0;font-size:13px;color:#8FA3B5}


/* ═══════════════════════════════════════════════════════ ۷. ریل محصولات */
.prow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}
.prow--5{grid-template-columns:repeat(5,minmax(0,1fr))}


/* ═════════════════════════════════════════ ۸. آکاردئون پرسش های متداول
   ⚠ پارشال partials/faq.php محتوایش را در .p-section می گذارد و آن کلاس
     فقط در product.css تعریف شده — که صفحه اصلی عمدا لود نمی کند
     (۲۸KB CSS مسدودکننده رندر روی مهم ترین صفحه سایت). پس همان چند
     قاعده لازم اینجا و در همین لحن صاف بازنویسی شده است. */
.hsec .p-section{background:transparent;border:0;padding:0;margin:0;min-width:0}
.hsec .accordion{border:0;border-top:1px solid var(--c-line);border-radius:0;background:transparent}
.hsec .accordion:last-child{border-bottom:1px solid var(--c-line)}
.hsec .accordion + .accordion{margin-top:0}
.hsec .acc-head{background:transparent;padding:20px 4px;font-size:16px;font-weight:600}
.hsec .acc-head:hover{background:var(--c-paper)}
.hsec .accordion.is-open .acc-head{background:transparent;color:var(--c-primary)}
.hsec .acc-body{border-top:0;padding:0 4px 22px}
.hsec .acc-body .prose{color:var(--c-ink-2);font-size:15.5px;line-height:1.95;max-width:74ch}

/* ⚠ فاصله انتهای آخرین بخش تا فوتر.
   .hsec بالا و پایین var(--sec-gap) پدینگ دارد (تا ۱۰۴px) و .ftr هم
   margin-top به همان اندازه — یعنی زیر آخرین پرسش تا فوتر نزدیک ۲۰۰px
   خالی می افتاد. is-last پدینگ پایینی را صفر می کند و فاصله را به
   حاشیه خود فوتر می سپارد. */
.hsec.is-last{padding-block-end:0}


/* ═════════════════════════════════════════════════════════ ۹. واکنش گرا */
@media (max-width:1100px){
  .prow,.prow--5{grid-template-columns:repeat(3,minmax(0,1fr))}
  .disc-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .disc-cell.is-lead{grid-column:span 3}
  .blogrow{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:900px){
  .xp-grid,.trust-row,.consult{grid-template-columns:minmax(0,1fr)}
  .trust-cell + .trust-cell{border-inline-start:0;border-top:1px solid var(--c-line)}
  .xp-item:nth-child(odd){border-inline-end:0}
  .xp-item:nth-last-child(-n+2){border-bottom:1px solid rgba(255,255,255,.14)}
  .xp-item:last-child{border-bottom:0}
}
@media (max-width:640px){
  .prow,.prow--5{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
  .disc-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .disc-cell.is-lead{grid-column:span 2;min-height:240px}
  .disc-cell{min-height:190px;padding:16px}
  .blogrow{grid-template-columns:minmax(0,1fr);gap:22px}
  .blogrow-img{aspect-ratio:2 / 1}
}

/* app.js اسلاید را با translateX جابه جا می کند و rtl.css جهت را تنظیم
   می کند؛ این دو کلاس فقط قلاب JS اند و استایلشان از kslider-* می آید. */
.hero-slider{position:relative}
.hero-slide{min-width:0}

/* ==== bosch.css ==== */

/* ==========================================================================
   کیچن بوش — لایه هویت برند
   ترتیب لود: app → rtl → nav → card → [CSS صفحه] → bosch → mobile

   این فایل بعد از همه کامپوننت هاست، پس هر تصمیمی که «امضای بصری سایت»
   باشد اینجا نوشته می شود و بقیه فایل ها ساختارِ خالص می مانند.

   ⚠ mobile.css بعد از این لود می شود؛ هر قاعده ای که باید در موبایل هم
     برنده باشد یا در mobile.css نوشته می شود یا اینجا با تخصصِ بالاتر.

   ── پنج تصمیمِ هویتی ─────────────────────────────────────────────────────
   ۱. سرمه ایِ بوش، نه قرمزِ بوش. قرمز فقط «نشانه» است: خطِ کوتاهِ کنارِ
      تیترِ بخش ها، بَجِ تخفیف، و هاورِ دکمه اصلی. اگر قرمز پس زمینه سطحِ
      بزرگ شود، سایت از «شوروم» به «حراجی» تبدیل می شود.
   ۲. گوشه تیز. شعاع حداکثر ۴px و روی قابِ عکس و بخش ها صفر. لوازم خانگیِ
      آلمانی خطِ صاف دارند؛ کارتِ گِرد لحنِ اپلیکیشنِ موبایل می دهد نه
      لحنِ کاتالوگِ محصول.
   ۳. خطِ مویی به جای سایه. جداسازی با ۱px #E1E5EA انجام می شود. سایه فقط
      برای هدرِ چسبان می ماند، چون آنجا واقعاً «شناور» است.
   ۴. شماره بخش. هر بخشِ سرمقاله ای شماره دورقمی فارسی دارد (۰۱، ۰۲ …).
      این قراردادِ مجله چاپی است و بیشترین سهم را در «دست ساز به نظر
      رسیدن» دارد؛ هیچ قالبِ آماده فروشگاهی این کار را نمی کند.
   ۵. قابِ عکس گرمِ خاکستری (#F0EFEC) نه سفید. ۹۲۹ عکسِ محصولِ این سایت
      پس زمینه سفید دارند؛ روی کارتِ سفید لبه یخچالِ سفید ناپدید می شد.
      خاکستریِ گرم (نه سرد) لحنِ کاغذِ کاتالوگ می دهد.
   ========================================================================== */


/* ══════════════════════════════════════════════════════ ۰. بازتعریفِ توکن ها
   app.css پالتِ قرمزمحورِ فورک را تعریف می کند. اینجا کلِ پالت به سرمه ای
   منتقل می شود؛ چون همه کامپوننت ها از همین متغیرها می خوانند، هیچ فایلِ
   دیگری لازم نیست عوض شود. */
:root{
  /* ── سرمه ای: رنگِ اصلیِ اقدام و سطوحِ تیره ─────────────────────────── */
  --c-primary:#0A2A43;   --c-primary-dark:#061B2C;  --c-primary-soft:#EDF1F5;
  --c-primary-rgb:10,42,67;

  /* ── قرمزِ بوش: فقط نشانه، هرگز سطح ───────────────────────────────── */
  --c-signal:#E20015;    --c-signal-dark:#B80011;
  --c-signal-rgb:226,0,21;

  /* «اعتماد» حالا سرمه ایِ روشن است نه سبزآبی — پالت دورنگه شد یک رنگه با
     یک نشانه. سبزآبی روی سرمه ای لحنِ «داروخانه» می داد. */
  --c-trust:#15507C;     --c-trust-dark:#0E3A5C;    --c-trust-soft:#E9F0F6;
  --c-trust-rgb:21,80,124;
  --c-accent:#15507C;    --c-accent-soft:#E9F0F6;

  /* ── گرافیت و کاغذ ─────────────────────────────────────────────────── */
  --c-ink:#111820;       --c-ink-2:#4E5964;   --c-ink-3:#7C8792;
  --c-line:#E1E5EA;      --c-line-2:#EDEFF2;
  --c-bg:#FFFFFF;        --c-surface:#FFFFFF;
  /* نوارِ روشنِ بینِ بخش ها — کاغذِ گرم، نه خاکستریِ آبی */
  --c-paper:#F7F6F3;
  /* قابِ عکسِ محصول */
  --c-panel:#F0EFEC;

  --c-success:#14624F;   --c-danger:#B80011;  --c-warn:#8A5A00;
  --c-success-soft:#E8F1EE; --c-warn-soft:#FBF3E3;
  --c-star:#C8891B;

  --c-dark:#0A2A43;      --c-on-dark:#E8EDF2;  --c-on-dark-2:#9FB0C0;

  /* ── گوشه تیز ───────────────────────────────────────────────────────
     تصمیمِ ۲. هیچ چیزی در این سایت گِردتر از ۴px نیست. */
  --r-sm:2px; --r-md:3px; --r-lg:4px; --r-xl:4px; --r-full:999px;

  /* ── سایه: تقریباً هیچ ───────────────────────────────────────────────
     تصمیمِ ۳. sh-1 و sh-2 عمداً «هیچ» شده اند تا کامپوننت هایی که از فورک
     سایه ارث برده اند خودبه خود صاف شوند، بدون ویرایشِ تک تکِ فایل ها. */
  --sh-1:none;
  --sh-2:none;
  --sh-3:0 12px 40px rgba(10,42,67,.10);

  --container:1280px;
  --sec-gap:clamp(56px,7vw,104px);
  --header-h:76px;
}

/* ⚠ کامپوننت هایی که به جای متغیر، سایه خام نوشته اند اینجا خنثی می شوند.
   بدون این، کارت های ارث بری شده هنوز «شناور» به نظر می رسیدند و کلِ
   تصمیمِ «خط مویی به جای سایه» نصفه می ماند. */
.pcard, .cat-card, .post-card, .box, .panel{box-shadow:none}


/* ══════════════════════════════════════════════════════════ ۱. تایپوگرافی
   تضادِ اندازه کارِ تضادِ رنگ را می کند. تیترها بزرگ اند و line-height
   کوچک؛ متن بدنه بزرگ تر از حدِ معمولِ فارسی (۱۶px) چون این سایت
   «خوانده» می شود نه «اسکن». */
body{
  font-size:16px;
  line-height:1.9;
  color:var(--c-ink);
  background:var(--c-bg);
}
h1,h2,h3,h4{line-height:1.4;letter-spacing:0}
h1{font-size:clamp(28px,4.2vw,46px);font-weight:700}
h2{font-size:clamp(23px,2.9vw,34px);font-weight:700}
h3{font-size:clamp(18px,2vw,22px);font-weight:700}

/* کدِ مدلِ لاتین همه جا با فونتِ سیستمیِ تک عرض می آید — «SMS6ZCI08Q» در
   یکان ایکس شبیه متنِ عادی است و باید مثلِ شماره فنی خوانده شود. */
.model,.pcard-sku,.spec-key code,.sku{
  font-family:ui-monospace,'SF Mono',Menlo,Consolas,monospace;
  font-size:.86em; letter-spacing:.04em; direction:ltr; unicode-bidi:isolate;
}


/* ═══════════════════════════════════════════════════ ۲. تیترِ بخش (امضا)
   تصمیمِ ۴. شماره دورقمی + خطِ قرمزِ کوتاه. این ترکیب در کلِ سایت تکرار
   می شود و «زبانِ» صفحه را می سازد.

   ⚠ شماره با ::before نمی آید بلکه در HTML است، چون محتوای معنایی است و
     باید در حالتِ چاپ و صفحه خوان هم دیده شود. */
.sec-head{
  display:flex; align-items:flex-end; justify-content:space-between;
  gap:24px; margin-bottom:clamp(24px,3vw,40px);
  padding-bottom:18px; border-bottom:1px solid var(--c-line);
}
.sec-head-in{min-width:0}
.sec-num{
  display:block; font-size:13px; font-weight:700; letter-spacing:.14em;
  color:var(--c-signal); margin-bottom:10px;
}
.sec-num::after{
  content:''; display:inline-block; vertical-align:middle;
  width:28px; height:2px; background:var(--c-signal);
  margin-inline-start:10px; margin-bottom:3px;
}
.sec-t{margin:0;font-size:clamp(23px,2.9vw,34px);font-weight:700;color:var(--c-ink)}
.sec-s{margin:10px 0 0;color:var(--c-ink-2);font-size:16px;max-width:62ch}
.sec-more{
  flex:none; font-weight:600; color:var(--c-primary); font-size:15px;
  border-bottom:1px solid transparent; padding-bottom:2px; transition:border-color .15s;
}
.sec-more:hover{border-bottom-color:var(--c-primary)}


/* ═════════════════════════════════════════════════════════════ ۳. دکمه ها
   دو دکمه بیشتر نداریم: پُرِ سرمه ای و خطیِ سرمه ای. گوشه تیز، بدون سایه،
   بدون گرادیان. قرمز فقط در هاورِ دکمه اصلی ظاهر می شود — یک اشاره کوتاه. */
.btn{
  border-radius:2px; font-weight:600; letter-spacing:0;
  min-height:48px; padding:0 26px; box-shadow:none;
  transition:background .18s var(--ease), color .18s var(--ease), border-color .18s var(--ease);
}
.btn-primary{background:var(--c-primary);color:#fff;border:1px solid var(--c-primary)}
.btn-primary:hover{background:var(--c-signal);border-color:var(--c-signal);color:#fff}
.btn-outline,.btn-ghost{
  background:transparent; color:var(--c-primary);
  border:1px solid var(--c-primary);
}
.btn-outline:hover,.btn-ghost:hover{background:var(--c-primary);color:#fff}
.btn-lg{min-height:56px;padding:0 34px;font-size:16px}

/* دکمه روی سطحِ تیره */
.on-dark .btn-outline{color:#fff;border-color:rgba(255,255,255,.45)}
.on-dark .btn-outline:hover{background:#fff;color:var(--c-primary);border-color:#fff}


/* ══════════════════════════════════════════════════════════ ۴. نوارِ بالا
   تنها سطحِ تیره ثابتِ سایت. متنِ روشنِ #E8EDF2 روی سرمه ای ۱۳٫۴:۱ می دهد. */
.topbar{background:var(--c-primary-dark);color:var(--c-on-dark);font-weight:500;border-bottom:0}
.topbar a{color:var(--c-on-dark)}
.topbar a:hover{color:#fff}
.topbar-links > li:first-child > a{color:#fff;font-weight:700}

/* هدر: تنها جایی که سایه دارد، چون واقعاً روی محتوا شناور است */
.header{background:#fff;border-bottom:1px solid var(--c-line)}
.header.is-stuck{box-shadow:0 1px 0 var(--c-line), 0 8px 24px rgba(10,42,67,.07)}
.nav-link{font-weight:600;color:var(--c-ink)}
.nav-link:hover,.nav-link.is-open{color:var(--c-primary)}
/* زیرخطِ منو: خطِ قرمزِ نازک، همان نشانه تیترِ بخش ها */
.nav-item.is-open > .nav-link::after,
.nav-link:hover::after{background:var(--c-signal)}
.mega{border:1px solid var(--c-line);border-radius:0;box-shadow:0 16px 40px rgba(10,42,67,.10)}


/* ═════════════════════════════════════════════════════════ ۵. کارتِ محصول
   بدون سایه، بدون گوشه گِرد، جدا شده با خطِ مویی. هاور فقط عکس را کمی
   بزرگ می کند و نام را زیرخط می زند — کارت بالا نمی پرد. */
.pcard{
  background:#fff; border:1px solid var(--c-line); border-radius:0;
  transition:border-color .18s var(--ease);
}
.pcard:hover{border-color:var(--c-primary);transform:none}
.pcard-media{background:var(--c-panel);border-radius:0;overflow:hidden}
.pcard-media img{transition:transform .4s var(--ease)}
.pcard:hover .pcard-media img{transform:scale(1.035)}
.pcard-title{font-weight:600;font-size:15px;line-height:1.75;color:var(--c-ink)}
.pcard:hover .pcard-title{text-decoration:underline;text-underline-offset:3px}
.pcard-price{font-weight:700;color:var(--c-ink)}
.pcard-old{color:var(--c-ink-3)}

/* بَجِ تخفیف — تنها جایی که قرمز پس زمینه می شود، و عمداً کوچک است */
.pcard-off,.badge-off{background:var(--c-signal);color:#fff;border-radius:2px;font-weight:700}
/* بَجِ سری بوش — خطی، نه پُر */
.pcard-series,.badge-series{
  background:#fff;color:var(--c-primary);border:1px solid var(--c-primary);
  border-radius:2px;font-weight:700;font-size:11px;letter-spacing:.02em;
}
/* بلوکِ استعلامِ قیمت — ۹۴٪ کاتالوگ این حالت را دارد، پس باید محترم به
   نظر برسد نه «ناقص». خطِ سرمه ایِ کنارش همان نقشِ نشانه را دارد. */
.pcard.is-quote .pcard-price-wrap,.quote-box{
  background:var(--c-primary-soft); border-inline-start:3px solid var(--c-primary);
  border-radius:0; color:var(--c-primary);
  /* ⚠ بدون پدینگ، خط تاکید به متن می چسبد و شبیه خطای رندر می شود */
  padding-inline-start:12px;
}


/* ═══════════════════════════════════════════════════ ۶. سطوح و جداکننده ها
   بخش ها فقط با فضای سفید و تغییرِ بسیار ملایمِ پس زمینه از هم جدا می شوند.
   هیچ موج، مورب، قوس یا محوی وجود ندارد. */
.hsec{padding-block:var(--sec-gap)}
.hsec--paper{background:var(--c-paper)}
.hsec--ink{background:var(--c-primary-dark);color:var(--c-on-dark)}
.hsec--ink .sec-t{color:#fff}
.hsec--ink .sec-s{color:var(--c-on-dark-2)}
.hsec--ink .sec-head{border-bottom-color:rgba(255,255,255,.16)}
.hsec + .hsec:not(.hsec--paper):not(.hsec--ink){border-top:1px solid var(--c-line-2)}

/* خطِ افقیِ نازکِ تزئینی که در چند بخش تکرار می شود */
.rule{height:1px;background:var(--c-line);border:0;margin:0}


/* ═════════════════════════════════════════════════════════════ ۷. فوتر */
.footer{background:var(--c-primary-dark);color:var(--c-on-dark);border-top:0}
.footer a{color:var(--c-on-dark-2)}
.footer a:hover{color:#fff}
.footer h4,.footer-col-t{color:#fff;font-weight:700;font-size:15px}
.footer-bottom{border-top:1px solid rgba(255,255,255,.12);color:var(--c-on-dark-2)}


/* ══════════════════════════════════════════════════════ ۸. فرم و ورودی ها */
.input,.form-control,input[type=text],input[type=tel],input[type=email],
input[type=search],select,textarea{
  border-radius:2px; border:1px solid var(--c-line); min-height:48px;
  font-family:var(--font); font-size:15px; background:#fff;
}
.input:focus,input:focus,select:focus,textarea:focus{
  border-color:var(--c-primary); outline:2px solid rgba(var(--c-primary-rgb),.18);
  outline-offset:0;
}
/* ⚠ حلقه فوکوس هرگز حذف نمی شود؛ فقط شکلش هماهنگِ برند می شود. */
:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}


/* ══════════════════════════════════════════════════ ۹. نوارِ تماسِ موبایل
   دکمه چسبانِ «مشاوره خرید بوش» — خواسته صریحِ طرح. روی موبایل تنها
   اقدامِ همیشه دردسترس است، پس عرضِ کامل و ارتفاعِ ۵۶px می گیرد. */
.callbar{background:#fff;border-top:1px solid var(--c-line);box-shadow:0 -6px 20px rgba(10,42,67,.08)}
.callbar-btn{border-radius:2px;min-height:52px;font-weight:700;font-size:15px}
.callbar-btn.is-main{background:var(--c-primary);color:#fff}
.callbar-btn.is-alt{background:#fff;color:var(--c-primary);border:1px solid var(--c-primary)}


/* ═══════════════════════════════════════════════════════════ ۱۰. حرکت
   هیچ انیمیشنِ ورودی/اسکرولی وجود ندارد. تنها حرکتِ سایت، بزرگ نماییِ
   ملایمِ عکس در هاور است. کاربری که با اسکرینِ ۶۰Hz و اینترنتِ موبایل
   می آید، «صفحه ساکن» را سریع تر حس می کند تا «صفحه زنده». */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;transition-duration:.001ms!important}
}


/* ══════════════════════════════════════════════ ۱۱. شماره تلفن در متنِ RTL
   ⚠ شماره دارای فاصله («۰۲۱ ۲۲۰۴۰۲۰۵») در متنِ راست به چپ وارونه دیده
     می شود («۲۲۰۴۰۲۰۵ ۰۲۱») چون الگوریتم دوطرفه یونیکد دو گروهِ عدد را
     جدا می بیند. isolate این را در همه جاهایی که شماره چاپ می شود می بندد
     — هدر، فوتر، نوارِ تماسِ موبایل، پارشالِ call-cta و صفحه تماس.
   ⚠ tabular-nums تا ارقام هم عرض بمانند و شماره نلرزد. */
.tel-num,.tel-link,.consult-phone,.mp-phone span,.tcall b{
  unicode-bidi:isolate; direction:ltr; font-variant-numeric:tabular-nums;
}


/* ══════════════════════════════════════════════════════════ ۱۲. لوگو
   نشان مربعِ خالص است (بدون متن) تا در فاویکون ۱۶px و در اشتراک گذاری هم
   خوانا بماند؛ نامِ سایت کنارش متنِ واقعیِ HTML است. */
.logo{gap:12px}
.logo img{height:42px;width:42px;border-radius:2px;object-fit:contain}
.site-header.is-stuck .logo img{height:36px;width:36px}
.logo-text b{font-size:17px;font-weight:700;color:var(--c-ink);letter-spacing:0}
.logo-text span{font-size:12.5px;color:var(--c-ink-3);font-weight:500}
@media (max-width:639px){
  .logo img{height:36px;width:36px}
  .logo-text b{font-size:15px}
  .logo-text span{display:none}   /* شعار در موبایل جا نمی شود و نام را جمع می کند */
}


/* ==========================================================================
   ۱۳. کامپوننت های سایت — پورت شده از فورکِ مبدأ

   ⚠ این بخش با بازنویسیِ کاملِ bosch.css از دست رفته بود. لایه هویتِ فورکِ
     قبلی فقط «رنگ» نبود؛ ۳۵ کلاسِ ساختاری هم اینجا تعریف شده بود که هیچ
     فایلِ دیگری تعریفشان نمی کند — فوترِ کاملِ سایت، نوارِ تماسِ چسبانِ
     موبایل، تلفنِ هدر و دکمه های کارتِ محصول. یعنی فوتر در همه صفحات و
     نوارِ تماس در کلِ موبایل بی استایل می شد.

     همه اینجا در زبانِ تختِ جدید بازنویسی شده اند: گوشه تیز، خطِ مویی،
     بدون سایه، سرمه ای به جای قرمز.
   ========================================================================== */

/* ── سوپرگرافیکِ رسمیِ بوش ────────────────────────────────────────────────
   تنها گرادیانِ سایت. «گرادیانِ تزئینی» نیست؛ خودِ نشانِ رسمیِ برندِ بوش
   است و مثلِ مبدأ فقط در دو جا می آید: زیرِ هدر و لبه بالای کارتِ فوتر. */
.bosch-strip{
  height:3px; width:100%; flex:none; display:block;
  background:linear-gradient(90deg,
    #8E2B34 0%, #E4002B 12%, #C8102E 20%, #7B3F98 34%,
    #1E4B8F 46%, #0079C1 58%, #00A0D2 68%, #00A651 80%,
    #6CBE45 90%, #A8CF45 100%);
}

/* ── تلفنِ نوارِ بالا و دکمه تماسِ هدر ──────────────────────────────── */
.tcall{display:inline-flex;align-items:center;gap:6px;padding:0 10px;line-height:1;white-space:nowrap;transition:color var(--t-fast)}
.tcall svg{width:15px;height:15px;flex:none;stroke-width:1.9;color:currentColor}
.tcall-t{display:inline-flex;align-items:baseline;gap:5px;min-width:0}
.tcall-t b{font-size:15px;font-weight:700;unicode-bidi:isolate;direction:ltr}
.tcall-t i{display:none}
.tcall--mob,.tcall--mob:hover{color:#fff}
.tcall--tel{color:var(--c-on-dark)}
.tcall--tel:hover{color:#fff}
.tcall + .tcall{border-inline-start:1px solid rgba(255,255,255,.28)}
.hcta-t{display:flex;flex-direction:column;align-items:flex-start;line-height:1.25;min-width:0}
.hcta-t i{font-style:normal;font-size:13px;font-weight:400;opacity:.85}
.hcta-t b{font-size:16px;font-weight:700;unicode-bidi:isolate;direction:ltr}
/* سبد و علاقه مندی با CART_ENABLED=false معنایی ندارند */
.hact--user,.hact--wish,.hact--cart{display:none}
.mainnav > li.has-mega:focus-within > .mega{opacity:1;visibility:visible;transform:none}

/* ── کارتِ محصول: ویژگی ها، استعلام، دکمه ها ─────────────────────────── */
.pcard-flag.series{background:var(--c-primary);color:#fff;border-color:var(--c-primary);font-weight:700}
.pcard-feat{display:flex;flex-direction:column;gap:3px;margin-block-start:6px;min-width:0;list-style:none;padding:0}
.pcard-feat li{
  display:flex; align-items:flex-start; gap:7px;
  font-size:14px; line-height:1.6; color:var(--c-ink-2);
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
.pcard-feat li::before{content:"";flex:none;width:7px;height:1px;margin-block-start:11px;background:var(--c-ink-3)}
.pcard-rating .rc{color:var(--c-ink-3);font-size:14px}
.pcard-quote{
  display:flex; align-items:center; gap:6px; min-height:30px;
  font-size:15px; font-weight:700; line-height:1.5; color:var(--c-primary);
}
.pcard-quote svg{width:16px;height:16px;flex:none;stroke-width:2}
.pcard-actions .pcard-cta{flex:1 1 auto;min-width:0;margin:0}
.pcard-cta--buy,.pcard-cta--quote,.pcard-cta--oos{border-radius:2px;font-weight:700}
.pcard-cta--buy,.pcard-cta--quote{background:var(--c-primary);border-color:var(--c-primary);color:#fff}
.pcard-cta--buy:hover,.pcard-cta--quote:hover{background:var(--c-signal);border-color:var(--c-signal);color:#fff}
.pcard-cta--oos{background:#fff;border-color:var(--c-line);color:var(--c-ink-2)}
.pcard-cta--oos:hover{border-color:var(--c-ink-3);color:var(--c-ink)}
.pcard-cta svg{width:17px;height:17px;flex:none;stroke-width:1.9}
.pcard-trust{display:flex;align-items:center;gap:5px;margin-block-start:2px;font-size:13.5px;font-weight:500;color:var(--c-primary)}
.pcard-trust svg{width:15px;height:15px;flex:none;stroke-width:2}

/* ── نوارِ اعتماد (پارشالِ trust-bar) ────────────────────────────────── */
.hsec--trust{padding-block:clamp(28px,3.4vw,44px);background:var(--c-paper)}
.trustbar{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;border-block:1px solid var(--c-line)}
.trustbar > *{padding:20px clamp(12px,1.8vw,24px)}
.trustbar > * + *{border-inline-start:1px solid var(--c-line)}
.trust-ic{display:block;width:24px;height:2px;background:var(--c-signal);margin-block-end:12px}
.trust-ic svg{display:none}
.trust-tx b{display:block;font-size:16px;font-weight:700;color:var(--c-ink);margin-block-end:5px}
.trust-tx span{font-size:14px;line-height:1.85;color:var(--c-ink-2)}

/* ── مرتب سازیِ صفحه دسته ───────────────────────────────────────────── */
.sortdd{position:relative;flex:0 0 auto;min-width:0}
.sortdd > summary{
  display:flex; align-items:center; gap:8px; min-height:44px; padding:0 14px;
  background:#fff; border:1px solid var(--c-line); border-radius:2px;
  font-size:15px; cursor:pointer; list-style:none; white-space:nowrap;
}
.sortdd > summary::-webkit-details-marker{display:none}
.sortdd-k{color:var(--c-ink-3)}
.sortdd-v{font-weight:700;color:var(--c-ink)}
.sortdd > summary svg{width:15px;height:15px;stroke-width:2;color:var(--c-ink-3);transition:transform var(--t-fast)}
.sortdd[open] > summary{border-color:var(--c-primary)}
.sortdd[open] > summary svg{transform:rotate(180deg)}
.sortdd-menu{
  position:absolute; z-index:60; inset-block-start:calc(100% + 4px); inset-inline-start:0;
  min-width:200px; display:flex; flex-direction:column; padding:4px;
  background:#fff; border:1px solid var(--c-line); border-radius:2px;
  box-shadow:0 12px 28px rgba(10,42,67,.10);
}
.sortdd-menu a{padding:10px 12px;border-radius:2px;font-size:15px;color:var(--c-ink-2);white-space:nowrap}
.sortdd-menu a:hover{background:var(--c-paper);color:var(--c-ink)}
.sortdd-menu a.is-active{background:var(--c-primary-soft);color:var(--c-primary);font-weight:700}

/* ── پنلِ کشویی موبایل ───────────────────────────────────────────────── */
.mp-nav--more{margin-block-start:10px;border-top:1px solid var(--c-line)}
.mp-nav--more a{color:var(--c-ink-2);font-weight:500}
.consult-tels a.is-wa{background:var(--c-primary-soft);border-color:rgba(var(--c-primary-rgb),.3);color:var(--c-primary);font-weight:700}
.consult-tels a.is-wa:hover{border-color:var(--c-primary)}


/* ══════════════════════════════════════════════════════════════ ۱۴. فوتر
   کارتِ گوشه تیزِ سفید روی نوارِ کاغذی، با سوپرگرافیکِ بوش در لبه بالا. */
.ftr{background:var(--c-paper);margin-block-start:var(--sec-gap);padding-block:clamp(20px,3vw,40px);color:var(--c-ink-2)}
.ftr-card{
  position:relative; overflow:hidden; background:#fff;
  border:1px solid var(--c-line); border-radius:0;
  padding:clamp(26px,3.4vw,50px) clamp(18px,3vw,44px) clamp(18px,2.4vw,28px);
}
.ftr-card > .bosch-strip{position:absolute;inset-block-start:0;inset-inline:0;height:3px}
.ftr-grid{display:grid;grid-template-columns:minmax(0,1.6fr) repeat(3,minmax(0,1fr));gap:clamp(22px,3vw,40px);align-items:start}
.ftr-col{min-width:0}
.ftr-col h3,.ftr-sub h3{font-size:15px;font-weight:700;color:var(--c-ink);margin-block-end:14px}
.ftr-col h3::after,.ftr-sub h3::after{content:"";display:block;width:22px;height:2px;background:var(--c-signal);margin-block-start:8px}
.ftr-col ul{display:flex;flex-direction:column;gap:11px;list-style:none;margin:0;padding:0}
.ftr-col ul li{margin:0;min-width:0}
.ftr-col ul a{display:inline-flex;align-items:center;gap:7px;font-size:14.5px;line-height:1.7;color:var(--c-ink-2)}
.ftr-col ul a:hover{color:var(--c-primary)}
.ftr-col ul svg{width:16px;height:16px;flex:none;color:var(--c-ink-3)}
.ftr-col--stack{display:flex;flex-direction:column;gap:24px}
.ftr-logo{display:inline-flex;align-items:center;gap:10px}
.ftr-logo img{height:40px;width:40px;border-radius:2px;object-fit:contain}
.ftr-about{margin-block-start:14px;max-width:44ch;font-size:14.5px;line-height:1.95}
.ftr-social{display:flex;gap:8px;flex-wrap:wrap;margin-block-start:16px}
.ftr-social a{
  width:40px; height:40px; display:grid; place-items:center;
  background:#fff; border:1px solid var(--c-line); border-radius:2px; color:var(--c-ink-2);
}
.ftr-social a:hover{border-color:var(--c-primary);color:var(--c-primary)}
.ftr-social svg{width:18px;height:18px;stroke-width:1.8}
.ftr-badges{display:inline-flex;gap:8px;margin-block-start:16px;padding:8px;background:#fff;border:1px solid var(--c-line);border-radius:2px}
.ftr-contact .tel-link{font-weight:700;color:var(--c-primary)}
.ftr-contact .tel-link:hover{color:var(--c-signal)}
.ftr-addr{display:flex;align-items:flex-start;gap:7px}
.ftr-addr svg{width:16px;height:16px;flex:none;margin-block-start:4px;color:var(--c-ink-3)}
.ftr-addr address{font-style:normal;font-size:14.5px;line-height:1.85;color:var(--c-ink-2)}
.ftr-bottom{
  display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:wrap;
  margin-block-start:var(--sp-6); padding-block-start:var(--sp-4);
  border-block-start:1px solid var(--c-line); font-size:14px; color:var(--c-ink-3);
}
.ftr-bottom p{margin:0}
.ftr-bottom-links{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.ftr-bottom-links > a{color:var(--c-ink-2)}
.ftr-bottom-links > a:hover{color:var(--c-primary)}
.ftr-credit a{color:var(--c-ink);font-weight:700}
.ftr-credit a:hover{color:var(--c-primary)}

@media (max-width:1023px){
  .ftr-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:26px 22px}
  .ftr-brand{grid-column:1 / -1}
}
@media (max-width:639px){
  .ftr{padding-block:14px}
  .ftr-card{padding:22px 16px 16px}
  .ftr-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 16px}
  .ftr-brand,.ftr-contact{grid-column:1 / -1}
  .ftr-bottom{flex-direction:column;gap:8px;text-align:center;justify-content:center}
  .ftr-bottom-links{justify-content:center;gap:14px}
  .trustbar{grid-template-columns:repeat(2,minmax(0,1fr))}
  .trustbar > *{border-inline-start:0;border-top:1px solid var(--c-line)}
  .trustbar > *:nth-child(2n){border-inline-start:1px solid var(--c-line)}
  .trustbar > :nth-child(-n+2){border-top:0}
}


/* ═════════════════════════════════════ ۱۵. نوارِ تماسِ چسبانِ موبایل
   ⚠ بدون این بلوک، .callbar در جریانِ عادیِ صفحه می افتاد و اصلاً چسبان
     نبود — فقط دو لینکِ بی استایل ته صفحه. خواسته صریحِ طرح، دکمه
     همیشه دردسترسِ «مشاوره خرید بوش» است. */
.callbar{
  display:none;
  position:fixed; inset-inline:0; inset-block-end:0; z-index:880;
  gap:8px; padding:8px 12px calc(8px + env(safe-area-inset-bottom,0px));
  background:#fff; border-block-start:1px solid var(--c-line);
  box-shadow:0 -6px 20px rgba(10,42,67,.08);
}
.callbar .mb-call{
  flex:1 1 auto; min-width:0;
  display:flex; align-items:center; justify-content:center; gap:9px;
  min-height:52px; padding:0 14px; border-radius:2px;
  background:var(--c-primary); color:#fff;
}
.callbar .mb-call svg{width:21px;height:21px;flex:none;stroke-width:2}
.callbar .mb-t{display:flex;flex-direction:column;line-height:1.25;min-width:0}
.callbar .mb-t i{font-style:normal;font-size:13px;font-weight:500;opacity:.9}
.callbar .mb-t b{font-size:17px;font-weight:700;unicode-bidi:isolate;direction:ltr}
.callbar .mb-wa{
  flex:0 0 auto;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  min-width:74px; min-height:52px; padding:0 10px; border-radius:2px;
  background:#fff; color:var(--c-primary); border:1px solid var(--c-primary);
  font-size:12px; font-weight:600;
}
.callbar .mb-wa svg{width:20px;height:20px;stroke-width:1.9}

@media (max-width:900px){
  .callbar{display:flex}
  /* فاصله امن زیرِ نوارِ چسبان تا فوتر زیرش پنهان نشود */
  :root{--mbar-h:68px}
  .ftr{padding-block-end:calc(var(--mbar-h,68px) + 20px + env(safe-area-inset-bottom,0px))}
}


/* ═════════════════════════ ۱۶. نامِ سایت در هدر باید همیشه دیده شود
   ⚠ nav.css:136 زیرِ ۱۲۸۰px کلاسِ .logo-text را display:none می کند. در
     فورکِ قبلی درست بود چون لوگوی تصویری نامِ سایت را در خودش داشت؛ نشانِ
     کیچن بوش مربعِ خالص است، پس زیرِ ۱۲۸۰px هدر یک مربعِ بی نام می شد.
   ⚠ و این «موبایل» نیست: لپ تاپِ ۱۳۶۶ با مقیاسِ ۱۵۰٪ ویندوز ۹۱۰ CSS px
     است، یعنی حالتِ پیش فرضِ خودِ کارفرما هم زیرِ این نقطه می افتد. */
@media (max-width:1279px){
  .logo-text{display:flex}
  .logo-text b{font-size:15px}
  .logo-text span{display:none}    /* شعار جا نمی شود؛ نام می ماند */
}

/* ==== mobile.css ==== */

/* ==========================================================================
   اصلاحات موبایل — آخرین فایل CSS در هدر، پس برنده تداخل هاست.
   به همین دلیل عمداً «لاغر» است: هرچه اینجا بنویسیم، هر فایلِ دیگری را
   خاموش می کند و اشکال زدایی را سخت می کند.

   ⚠ قانون این فایل: فقط چیزی اینجا می آید که *هیچ فایل دیگری نمی تواند
   بگوید*. چیدمانِ هدر موبایل (nav.css §۶)، کارت محصول (card.css) و صفحه
   محصول (product.css) خودشان مدیای موبایل دارند و اینجا تکرار نمی شوند.
   تکرارشان قبلاً باعث شده بود دو فایل سرِ یک عدد دعوا کنند.
   ========================================================================== */

@media (max-width:900px){

  /* ارتفاع های هدر. --header-h در nav.css از این ها calc می شود
     (--mainbar-h + --navbar-h + --msearch-h)، پس خودِ --header-h اینجا
     بازنویسی نمی شود؛ اگر بشود، ستون های چسبانِ بقیه صفحات زیر هدر گیر
     می کنند. .navbar در این عرض مخفی است ⇒ صفر. */
  :root{--topbar-h:34px;--mainbar-h:58px;--navbar-h:0px;--sp-7:32px;--sp-8:44px}

  body{font-size:15px}
  .container{padding:0 12px}
  .section{padding-block:var(--sp-6)}
  .section-head{margin-bottom:var(--sp-4)}

  /* تیترها عمداً کوچک نمی شوند: app.css از clamp() استفاده می کند
     (h1 ۲۵→۳۸ / h2 ۲۱→۳۰) و کفِ آن دقیقاً همان چیزی است که برای موبایل
     می خواهیم. نسخه قبلی اینجا h1 را ۲۰px و h2 را ۱۸px می کرد و clamp را
     بی اثر می گذاشت — یعنی تیترِ موبایل از حداقلِ خوانایی هم پایین تر می رفت. */
  .lead{font-size:15px}
  .prose,.article{font-size:15px;line-height:2.05}
  .article h2{font-size:21px}
  .article h3{font-size:18px}

  /* لوگو در موبایل ۳۰٪ کوچک تر: ۵۰→۳۵ و در حالتِ جمع شده ۳۶→۲۵.
     mobile.css آخرین فایل است، پس بر nav.css §۶ برنده می شود. */
  .logo img{height:35px}
  .site-header.is-stuck .logo img{height:25px}

  /* نوار بالایی بیرون از هدرِ چسبان است و با اسکرول برای همیشه بالا می رود؛
     فقط لینک های منو حذف می شوند تا شماره تماس یک لمسِ راحت فاصله بگیرد. */
  .topbar-links{display:none}
  .topbar-start{gap:0}
  .topbar--nophone{display:none}

  /* ورود و علاقه مندی در نوار پایینِ موبایل هستند؛ در هدر فقط سبد می ماند.
     «پشتیبانی» هم مخفی می شود چون همان کار را دکمه «تماس» در نوار پایین
     انجام می دهد و دو CTAِ تماس در یک صفحه، هر دو را ضعیف می کند.
     (چیدمان دو-ردیفه هدر خودش در nav.css §۶ است و اینجا دست کاری نمی شود.) */
  .header-cta,.hact--user,.hact--wish,.hact--help{display:none}

  /* کارت های عمومی. کارتِ محصول (.pcard) عمداً اینجا نیست — اندازه عنوان،
     قیمت و دکمه اش در card.css تعریف شده و تکرارِ اینجا فقط با آن می جنگید. */
  .card,.card-lg{padding:var(--sp-4);border-radius:var(--r-md)}

  /* لمس راحت تر: هدف کلیک حداقل ۴۴px */
  .btn{min-height:46px}
  .btn-sm{min-height:44px}
  .chip{padding:9px 15px}

  /* ریل ها لبه به لبه اسکرول شوند.
     ⚠ .sort-opts عمداً از این فهرست بیرون است: آیتمِ فلکسِ داخلِ .sortbar است و
     حاشیه منفی، آن را ۲۴ پیکسل از ظرفش پهن تر می کرد و کل ستون را می ترکاند. */
  .rail,.chip-rail,.related-rail,.grp-rail{
    margin-inline:-12px;padding-inline:12px;
  }
  /* هر ظرفِ اسکرول شونده باید بتواند باریک شود، وگرنه به جای اسکرولِ داخلی،
     والدش را پهن می کند و صفحه از عرض بیرون می زند. */
  .rail,.chip-rail,.related-rail,.grp-rail,
  .coll-main,.coll-results,.sortbar,.quick-filters{min-width:0;max-width:100%}

  .site-footer{margin-bottom:8px}
}

@media (max-width:639px){
  /* ستون های چندتایی به یک ستون */
  .coll-layout,.cart-layout,.blog-layout,.acct-layout{grid-template-columns:minmax(0,1fr)}
  .home-seo .prose{columns:1}

  /* نوار برندها در موبایل کمی جمع تر */
  .brand-logo{min-width:158px;height:74px;padding:10px 12px}
  .brand-mono{width:38px;height:38px;font-size:16px}

  /* .product-top زیر ۸۶۰px در product.css به flex-column تبدیل می شود تا
     ترتیبِ گالری → عنوان → باکس خرید درست دربیاید؛ اینجا grid-template-columns
     دادن آن را خنثی می کرد. */

  /* باکس های داخلی صفحه محصول */
  .p-section{padding:var(--sp-4) 14px}
  /* زیر هدر چسبان بنشیند — عدد ثابت با ارتفاع واقعی هدر هم خوان نبود */
  .p-tabs{border-radius:var(--r-md);padding:4px;top:var(--header-h)}
  .p-tabs a{padding:9px 14px;font-size:15px}

  .summary{border-radius:var(--r-md)}

  /* بردکرامب: به جای شکستن خط، افقی اسکرول شود */
  .breadcrumb{overflow-x:auto;min-width:0;scrollbar-width:none;white-space:nowrap}
  .breadcrumb::-webkit-scrollbar{display:none}
  .breadcrumb ol{flex-wrap:nowrap}

  /* صفحه بندی جمع وجور */
  .pagination a,.pagination span{min-width:38px;height:38px;font-size:15px}
}

/* زیر ~۶۰۰px ساعت کاری جا نمی شود و متن را می شکند؛ فقط شماره تماس می ماند */
@media (max-width:599px){
  :root{--topbar-h:32px}
  .topbar-start{display:none}
  .topbar .container{justify-content:center}
  .bc-links{grid-template-columns:minmax(0,1fr)}
}

@media (max-width:400px){
  .product-grid{gap:10px}
  .btn-lg{min-height:48px;font-size:15px;padding:0 18px}
}

/* ---------- دکمه بازگشت به بالا ---------- */
.to-top{
  position:fixed;inset-block-end:24px;inset-inline-start:20px;z-index:870;
  width:44px;height:44px;border-radius:var(--r-full);
  display:grid;place-items:center;
  background:var(--c-surface);border:1px solid var(--c-line);
  color:var(--c-ink-2);box-shadow:var(--sh-2);
  opacity:0;visibility:hidden;transform:translateY(10px);
  transition:all var(--t-slow);
}
.to-top.is-visible{opacity:1;visibility:visible;transform:none}
.to-top svg{width:20px;height:20px;stroke-width:2}

/* بالای نوار پایینِ موبایل بنشیند. عمداً !important ندارد و از --mbar-h
   (nav.css) می خواند: product.css با body:has(.sticky-buy.is-visible) این
   دکمه را بالاتر می برد و !important آن قاعده را از کار می انداخت. */
@media (max-width:900px){
  .to-top{inset-block-end:calc(var(--mbar-h,62px) + 12px + env(safe-area-inset-bottom,0px))}
}

/* ---------- صفحه های خیلی بلند: بهبود پیمایش ---------- */
@media (max-width:900px) and (prefers-reduced-motion:no-preference){
  /* کارت حالا یک خطِ «وضعیت اعتماد» بیشتر دارد؛ عددِ قبلی (۲۷۰) کوتاه بود و
     مرورگر موقعِ اسکرول ارتفاع را اصلاح می کرد ⇒ پرشِ چیدمان. */
  .pcard{contain-intrinsic-size:305px}
}

/* ==========================================================================
   لایه برندِ «کیچن بوش» در موبایل
   bosch.css قبل از این فایل لود می شود، پس هر قاعده برندی که در موبایل باید
   برنده باشد اینجاست — نه آنجا. (همان دامی که در iranboschcenter خورده بودیم.)
   ۹۰٪ ترافیک این سایت موبایل است، پس این بلوک «حاشیه» نیست؛ حالتِ اصلی است.
   ========================================================================== */
@media (max-width:900px){

  /* نوار بالاییِ تیره: زیر ۶۰۰px فقط شماره تماس می ماند و وسط چین می شود
     (mobile.css §۵۹۹). روی زمینه تیره باید کاملاً سفید و درشت تر باشد تا
     به یک «دکمه تماس» تمام عرض شبیه شود، نه یک خطِ تزئینی. */
  .topbar{background:var(--c-dark)}
  .topbar-contact a{color:#fff;font-weight:700;letter-spacing:.01em}
  .topbar-contact svg{color:var(--c-primary)}

  /* قابِ عکس در کارتِ باریکِ موبایل نباید ۱۰px حاشیه داخلی بگیرد؛
     روی کارتِ ۱۶۴ پیکسلیِ ریل، عکس را به یک تمبر تبدیل می کرد. */
  .pcard-img{margin:6px 6px 0;padding:6px}
  .pcard-flags{inset-block-start:12px;inset-inline-start:12px}
  .pcard-quick{inset-block-start:12px;inset-inline-end:12px}

  /* «موجود در فروشگاه · قیمت تلفنی» در دو ستونِ موبایل دو خط می شود و
     ارتفاع کارت ها را نامساوی می کند. یک خط، با بریدنِ نرم. */
  .pcard-trust{
    white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
    display:flex;
  }
  .pcard-trust span{overflow:hidden;text-overflow:ellipsis}

  /* برچسبِ دکمه کارت در عرضِ کم نباید بشکند */
  .pcard-cta{min-height:44px}
  .pcard-cta .t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

  /* هیرو، کارت دسته و جدول مقایسه — نسخه موبایل در همان فایلِ برند
     تعریف شده اند (bosch.css §۱۱٫۵ تا ۱۱٫۷) چون آنجا مدیای اختصاصی دارند
     و اینجا فقط چیزی می آید که واقعاً باید بعد از bosch.css برنده شود. */

  /* دکمه مقایسه روی کارتِ باریکِ موبایل جا را از برچسبِ دکمه اصلی می گیرد */
  .pcard-cmp{width:38px}
  .pcard-actions{gap:5px}

  /* خطِ قرمزِ بالای تیترها در موبایل جمع تر */
  .section-head h2::before,
  .sec-title::before,
  .home-sec > h2::before{width:28px;height:3px;margin-block-end:8px}
}

  /* ریلِ گروه ها: کاشیِ جمع تر تا سه تا در عرضِ گوشی دیده شود و کاربر
     بفهمد ادامه دارد (لبه چهارمی پیدا باشد). */
  .grp{width:114px;padding:12px 8px}
  .grp-ic{width:54px;height:54px}
  .grp b{font-size:15px}

  /* چیپ های فیلترِ سریع: یک ردیفِ افقیِ اسکرول شونده، نه شکستن به چند خط.
     این ها مهم ترین کنترلِ صفحه دسته روی موبایل اند («فقط چیزهایی که
     قیمت دارند») و نباید زیرِ دکمه فیلتر گم شوند. */
  .quick-filters{
    flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
    margin-inline:-12px;padding-inline:12px;
  }
  .quick-filters::-webkit-scrollbar{display:none}
  .chip--toggle{flex:0 0 auto;min-height:38px;padding:8px 14px}

  /* دو دکمه «سفارش تلفنی / واتس اپ» زیر دکمه سبد، کنار هم می مانند */
  .buybox-alt{gap:6px}
}

@media (max-width:479px){
  /* در دو ستونِ خیلی باریک، آیکنِ خطِ اعتماد جا را می گیرد و متن را می بُرد */
  .pcard-trust svg{display:none}
  .pcard-trust{gap:0}
}


/* ==========================================================================
   اصلاحات موبایلِ دورِ آخر
   ========================================================================== */
@media (max-width:900px){

  /* ── بردکرامب ──────────────────────────────────────────────────────────
     نوارِ افقیِ اسکرول شونده روی گوشی بد بود: کاربر نمی فهمید ادامه دارد و
     زنجیره چهارتایی («خانه › گروه › دسته › محصول») نصفه دیده می شد.
     روی موبایل فقط یک لینکِ «بازگشت به والد» می ماند — همان کاری که کاربر
     واقعاً با بردکرامب می کند. زنجیره کامل در DOM می ماند (سئو و
     BreadcrumbList دست نخورده) و فقط بصری پنهان می شود. */
  .breadcrumb{overflow:visible;white-space:normal}
  .breadcrumb ol{flex-wrap:nowrap;gap:4px}
  .breadcrumb li{display:none}
  .breadcrumb li:nth-last-child(2){
    display:flex;align-items:center;gap:6px;
    font-size:15px;font-weight:500;
  }
  .breadcrumb li:nth-last-child(2)::before{
    content:"‹";
    font-size:19px;line-height:1;color:var(--c-ink-3);
  }
  .breadcrumb li:nth-last-child(2) a{color:var(--c-ink-2)}

  /* ── مرتب سازی ────────────────────────────────────────────────────────
     لیست باکس تمام عرض تا با دکمه فیلتر یک ردیفِ مرتب بسازد. */
  .sortbar{flex-wrap:wrap;gap:8px}
  .sortdd{flex:1 1 100%}
  .sortdd > summary{justify-content:space-between;width:100%}
  .sortdd-menu{inset-inline:0;min-width:0}

  /* ── هر دو شماره در موبایل هم می مانند ────────────────────────────────
     روی سایتی که تبدیلِ اصلی اش تماس است، هیچ کدام نباید حذف شود. فقط
     برچسبِ زیرِ عدد («مشاوره و سفارش») می رود تا نوار یک خطی بماند. */
  /* هر دو شماره می مانند، تک خطی و جمع. دکمه قرمزِ هدر در موبایل مخفی
     است (فضا نیست) ولی نوارِ پایین دکمه «تماس» دارد، پس شماره موبایل
     در سه جا در دسترس است: همین جا، نوارِ پایین، و فوتر. */
  .topbar-contact{gap:0}
  .tcall{padding:0 8px;gap:5px}
  .tcall svg{width:14px;height:14px}
  .tcall-t b{font-size:15px}
}

/* ── نوارِ رنگیِ بوش روی موبایل نازک تر ───────────────────────────────── */
@media (max-width:639px){
  .bosch-strip{height:3px}
}
