/* ==========================================================================
   IKM — محصولات: کارت، آرشیو، صفحه محصول (فاز ۳)
   ========================================================================== */


/* ==========================================================================
   برچسب‌ها
   ========================================================================== */

.ikm-tags {
  position: absolute;
  top: 10px;
  inset-inline-start: 10px;
  z-index: 3;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 5px;
}

.ikm-tag {
  display: inline-flex;
  align-items: center;
  font-size: .66rem;
  font-weight: 700;
  line-height: 1;
  padding: 5px 8px;
  border-radius: 3px;
  color: #fff;
  white-space: nowrap;
}
.ikm-tag--ok     { background: var(--ikm-ok); }
.ikm-tag--steel  { background: var(--ikm-steel); }
.ikm-tag--accent { background: var(--ikm-accent-soft); color: var(--ikm-accent-ink); }
.ikm-tag--danger { background: var(--ikm-danger); }
.ikm-tag--muted  { background: var(--ikm-tx-faint); }


/* ==========================================================================
   کارت محصول
   ========================================================================== */

.ikm-prod { position: relative; }

.ikm-price {
  display: flex;
  flex-direction: column;
  gap: 1px;
  line-height: 1.3;
}
.ikm-price del {
  font-size: .7rem;
  color: var(--ikm-tx-faint);
  text-decoration: line-through;
}
.ikm-price b {
  font-size: .84rem;
  font-weight: 700;
  color: var(--ikm-tx);
}
.ikm-price--ask { font-size: .78rem; color: var(--ikm-steel); font-weight: 600; }

/* گرید محصولات ووکامرس با کارت خودمان */
ul.products {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 14px;
  list-style: none;
  margin: 0;
  padding: 0;
}
ul.products li.ikm-prod { margin: 0; }


/* ---------- کارت محصول ---------- */

.ikm-prod {
  display: flex;
  flex-direction: column;
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-card);
  overflow: hidden;
  transition: .18s;
}
.ikm-prod:hover { border-color: var(--ikm-accent); box-shadow: var(--ikm-shadow); }

/* نسبت ۱:۱ و contain طبق 02-SPEC بند ۷ — قطعه بریده نمی‌شود */
.ikm-prod__thumb {
  aspect-ratio: 1 / 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 10px;
  background: repeating-linear-gradient(135deg, var(--ikm-thumb-a) 0 10px, var(--ikm-thumb-b) 10px 20px);
  border-bottom: 1px solid var(--ikm-line-c);
}
.ikm-prod__thumb img {
  width: 100%;
  height: 100%;
  object-fit: contain;
}

.ikm-prod__body {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 15px;
  flex: 1;
}

.ikm-prod__cat   { font-size: .68rem; color: var(--ikm-steel); }
.ikm-prod__title { font-size: .89rem; font-weight: 700; line-height: 1.5; margin: 0; }
.ikm-prod__title a { color: var(--ikm-tx); text-decoration: none; }
.ikm-prod__title a:hover { color: var(--ikm-accent); }
.ikm-prod__code  { font-size: .65rem; color: var(--ikm-tx-faint); }

.ikm-prod__foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  margin-top: auto;
  padding-top: 10px;
  border-top: 1px dashed var(--ikm-line-c);
}
.ikm-prod__price {
  font-family: var(--ikm-mono);
  font-size: .82rem;
  font-weight: 700;
  color: var(--ikm-tx);
}
.ikm-prod__price del { color: var(--ikm-tx-faint); font-weight: 400; }
.ikm-prod__price ins { text-decoration: none; }



/* ==========================================================================
   آرشیو
   ========================================================================== */

.ikm-archive { padding-bottom: 30px; }

.ikm-archive__bar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
  padding-bottom: 16px;
  margin-bottom: 20px;
  border-bottom: 1px solid var(--ikm-line-c);
}
.ikm-archive__count { font-size: .82rem; color: var(--ikm-tx-mute); }
.ikm-archive__bar select {
  border: 1px solid var(--ikm-line-c);
  background: var(--ikm-bg-2);
  color: var(--ikm-tx);
  border-radius: var(--ikm-r-btn);
  padding: 9px 12px;
  font-family: var(--ikm-font);
  font-size: .82rem;
}

.ikm-archive__body {
  display: grid;
  grid-template-columns: 250px 1fr;
  gap: 24px;
  align-items: start;
}

.ikm-archive .ikm-archive__filter-btn { display: none; }

.ikm-filter {
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-card);
  padding: 15px;
  margin-bottom: 12px;
}
.ikm-filter h3 {
  font-size: .85rem;
  font-weight: 700;
  color: var(--ikm-tx);
  margin: 0 0 10px;
  padding-bottom: 9px;
  border-bottom: 1px dashed var(--ikm-line-c);
}
.ikm-filter a {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  padding: 7px 0;
  font-size: .82rem;
  color: var(--ikm-tx-mute);
  text-decoration: none;
}
.ikm-filter a:hover { color: var(--ikm-accent); }
.ikm-filter a span { color: var(--ikm-tx-faint); font-size: .7rem; }

.ikm-archive__empty {
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-card);
  padding: 30px;
  text-align: center;
  color: var(--ikm-tx-mute);
}

/* متن سئو پایین لیست محصولات (02-SPEC بند ۸) */
.ikm-archive__seo {
  margin-top: 40px;
  padding-top: 24px;
  border-top: 1px solid var(--ikm-line-c);
}


/* ==========================================================================
   صفحه محصول
   ========================================================================== */

.ikm-single { padding-bottom: 40px; }

.ikm-single__top {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 34px;
  margin-bottom: 44px;
}

/* ---------- گالری ---------- */

.ikm-gal__main {
  aspect-ratio: 1 / 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
}
.ikm-gal__main img { width: 100%; height: 100%; object-fit: contain; }

.ikm-gal__strip { display: flex; gap: 8px; margin-top: 10px; flex-wrap: wrap; }

.ikm-gal .ikm-gal__thumb {
  width: 70px;
  height: 70px;
  padding: 5px;
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-card);
  cursor: pointer;
}
.ikm-gal .ikm-gal__thumb.is-on { border-color: var(--ikm-accent); }
.ikm-gal .ikm-gal__thumb img { width: 100%; height: 100%; object-fit: contain; }

/* ---------- اطلاعات ---------- */

.ikm-single__title {
  font-size: 1.7rem;
  font-weight: 800;
  line-height: 1.4;
  letter-spacing: -.4px;
  color: var(--ikm-tx);
  margin: 6px 0 12px;
}

.ikm-single__meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 20px;
  font-size: .82rem;
  color: var(--ikm-tx-mute);
  padding-bottom: 14px;
  border-bottom: 1px dashed var(--ikm-line-c);
}
.ikm-single__meta b { color: var(--ikm-tx); }

.ikm-single__badges { display: flex; flex-wrap: wrap; gap: 6px; margin: 14px 0; }

.ikm-single__short {
  color: var(--ikm-tx-mute);
  font-size: .92rem;
  line-height: var(--ikm-line);
  margin: 0 0 18px;
}

.ikm-single__buy {
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
  padding: 18px;
  margin-bottom: 16px;
}
.ikm-single__buy .ikm-price b { font-size: 1.4rem; }
.ikm-single__buy .ikm-price del { font-size: .85rem; }

.ikm-single__save {
  font-size: .8rem;
  color: var(--ikm-ok);
  margin: 8px 0 0;
}
.ikm-single__save b { font-weight: 700; }

/* فرم افزودن به سبد ووکامرس */
.ikm-single__buy form.cart {
  display: flex;
  gap: 10px;
  align-items: stretch;
  margin-top: 16px;
  flex-wrap: wrap;
}
.ikm-single__buy .quantity input {
  width: 76px;
  height: 46px;
  text-align: center;
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-btn);
  background: var(--ikm-bg);
  color: var(--ikm-tx);
  font-family: var(--ikm-mono);
}
.ikm-single__buy .single_add_to_cart_button {
  flex: 1;
  min-width: 160px;
  min-height: 46px;
  padding: 13px 26px;
  border: none;
  border-radius: var(--ikm-r-btn);
  background: var(--ikm-accent);
  color: var(--ikm-accent-ink);
  font-family: var(--ikm-font);
  font-weight: 700;
  font-size: .92rem;
  cursor: pointer;
}
.ikm-single__buy .single_add_to_cart_button:hover { filter: brightness(1.08); }

.ikm-single__buy .stock { font-size: .8rem; color: var(--ikm-tx-mute); }

/* ---------- اشتراک‌گذاری ---------- */

.ikm-share { display: flex; align-items: center; gap: 8px; }
.ikm-share > span { font-size: .8rem; color: var(--ikm-tx-faint); }

.ikm-share .ikm-share__ic {
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-btn);
  color: var(--ikm-tx-mute);
}
.ikm-share .ikm-share__ic:hover { border-color: var(--ikm-accent); color: var(--ikm-accent); }
.ikm-share .ikm-share__ic svg { width: 17px; height: 17px; }


/* ==========================================================================
   تب‌های صفحه محصول
   ========================================================================== */

.ikm-tabs {
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
  overflow: hidden;
  margin-bottom: 44px;
}

.ikm-tabs__nav {
  display: flex;
  flex-wrap: wrap;
  background: var(--ikm-bg-3);
  border-bottom: 1px solid var(--ikm-line-c);
}

.ikm-tabs .ikm-tabs__nav button {
  padding: 14px 20px;
  min-height: 44px;
  background: transparent;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--ikm-tx-mute);
  font-family: var(--ikm-font);
  font-size: .88rem;
  font-weight: 600;
  cursor: pointer;
  transition: .15s;
}
.ikm-tabs .ikm-tabs__nav button:hover { color: var(--ikm-tx); }
.ikm-tabs .ikm-tabs__nav button.is-on {
  color: var(--ikm-accent);
  border-bottom-color: var(--ikm-accent);
  background: var(--ikm-bg-2);
}

.ikm-tabs__pane { display: none; padding: 22px; }
.ikm-tabs__pane.is-on { display: block; }
.ikm-tabs__pane > *:first-child { margin-top: 0; }

.ikm-spec { width: 100%; border-collapse: collapse; }
.ikm-spec th,
.ikm-spec td {
  padding: 11px 14px;
  text-align: start;
  font-size: .86rem;
  border-bottom: 1px solid var(--ikm-line-c);
}
.ikm-spec th { width: 190px; color: var(--ikm-tx-mute); font-weight: 600; background: var(--ikm-bg); }
.ikm-spec td { color: var(--ikm-tx); }
.ikm-spec tr:last-child th,
.ikm-spec tr:last-child td { border-bottom: none; }

.ikm-errlist { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin-top: 12px; }
.ikm-errlist__item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 13px;
  background: var(--ikm-bg);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-card);
  text-decoration: none;
  font-size: .84rem;
  color: var(--ikm-tx-mute);
}
.ikm-errlist__item:hover { border-color: var(--ikm-accent); }
.ikm-errlist__item b { color: var(--ikm-accent); }


/* ==========================================================================
   واکنش‌گرایی
   ========================================================================== */

@media (max-width: 1000px) {
  ul.products { grid-template-columns: repeat(2, 1fr); }
  .ikm-archive__body { grid-template-columns: 1fr; }

  .ikm-archive .ikm-archive__filter-btn {
    display: flex;
    align-items: center;
    justify-content: space-between;
    width: 100%;
    min-height: 44px;
    padding: 12px 15px;
    margin-bottom: 10px;
    background: var(--ikm-bg-2);
    border: 1px solid var(--ikm-line-c);
    border-radius: var(--ikm-r-card);
    color: var(--ikm-tx);
    font-family: var(--ikm-font);
    font-weight: 700;
    font-size: .88rem;
    cursor: pointer;
  }
  .ikm-archive__filters { display: none; }
  .ikm-archive__filters.is-open { display: block; }

  .ikm-single__top { grid-template-columns: 1fr; gap: 22px; }
}

@media (max-width: 760px) {
  .ikm-single__title { font-size: 1.3rem; }
  .ikm-errlist { grid-template-columns: 1fr; }
  .ikm-spec th { width: 120px; }
  .ikm-tabs .ikm-tabs__nav button { flex: 1 1 50%; font-size: .8rem; padding: 12px 10px; }
}

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


/* ==========================================================================
   اصلاحات نسخه ۲.۶
   ========================================================================== */

/* جدول مشخصات: مقدارها باید مثل عنوان‌ها از راست شروع شوند.
   قبلاً dir="ltr" روی خود <td> بود و جهت شروع متنِ سلول را هم
   چپ می‌کرد — حالا فقط روی <span> داخلی است، پس عدد لاتین درست
   خوانده می‌شود ولی سلول از راست می‌چیند. */
.ikm-spec td { text-align: right; }
.ikm-spec td span[dir="ltr"] { display: inline-block; unicode-bidi: isolate; }

/* دکمه‌های تعداد: در چیدمان راست‌به‌چپ، «+» باید سمت راست باشد */
.ikm-single__buy .quantity,
.woocommerce-cart .quantity {
  display: flex;
  flex-direction: row-reverse;
  align-items: stretch;
}




/* ==========================================================================
   سبد خرید — نسخه ۲.۸

   این استایل‌ها روی ساختار خودمان (woocommerce/cart/cart.php) می‌نشینند،
   نه روی جدول وودمارت. هیچ قاعده‌ای اینجا حدسی نیست.
   ========================================================================== */

/*
 * ⚠️ نسخه ۳.۴.۲۵ — چرا `div.` جلوی قاعده‌های ظرف سبد آمد.
 *
 * دکمه سبد در سرصفحه کلاس `ikm-cart` دارد
 * (`<a class="ikm-icon-btn ikm-cart">`) و ظرف صفحه سبد هم همان کلاس
 * را دارد (`<div class="ikm-cart">`). یک کلاس، دو چیز کاملاً متفاوت.
 *
 * روی صفحه‌های عادی چیزی دیده نمی‌شد چون `header.css` بعد از
 * `product.css` بارگذاری می‌شود و `.ikm-icon-btn { display: flex }`
 * با وزن برابر ولی ترتیب بعدتر برنده می‌شد. ولی روی صفحه سبد قاعده
 * `.woocommerce-cart .ikm-cart` وزن بیشتری داشت و برنده می‌شد — پس
 * دکمه سرصفحه تبدیل به یک گرید دوستونی ۳۳۰ پیکسلی می‌شد. نتیجه:
 * دکمه سبد و «ورود / ثبت‌نام» به وسط سرصفحه می‌رفتند و نشان تعداد
 * که `position: absolute` است تنها در لبه چپ جا می‌ماند.
 *
 * ⚠️ کلاس دکمه عوض نشد، چون کلید فرگمنت ووکامرس دقیقاً `a.ikm-cart`
 * است (`ikm_cart_fragment()` در `header-parts.php`). عوض کردنش
 * به‌روزرسانی زنده تعداد سبد را می‌شکست.
 *
 * پس فقط شش قاعده‌ی ظرف صفحه به `div.ikm-cart` محدود شدند.
 * قاعده‌های فرزند مثل `.ikm-cart .quantity` دست نخوردند — دکمه
 * سرصفحه چنین فرزندی ندارد.
 *
 * درس: یک نام کلاس را برای دو چیز متفاوت به کار نبر. وگرنه یک روز
 * وزن انتخابگر تصمیم می‌گیرد کدام برنده شود، نه تو.
 */
div.ikm-cart {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 330px;
  gap: 24px;
  align-items: start;
  padding-bottom: 40px;
}
.ikm-cart__form { min-width: 0; }
.ikm-cart__side { min-width: 0; }

/* ---------- فهرست اقلام ---------- */

.ikm-cart__list {
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
  overflow: hidden;
}

.ikm-cart__head,
.ikm-cart__row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 130px 132px 130px 44px;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
}

.ikm-cart__head {
  background: var(--ikm-bg-3);
  border-bottom: 1px solid var(--ikm-line-c);
  font-size: .8rem;
  font-weight: 700;
  color: var(--ikm-tx);
}

.ikm-cart__row { border-bottom: 1px solid var(--ikm-line-c); }
.ikm-cart__row:last-child { border-bottom: none; }

.ikm-cart__cell { min-width: 0; font-size: .86rem; color: var(--ikm-tx-mute); }

.ikm-cart__cell--prod { display: flex; align-items: center; gap: 12px; }

.ikm-cart__thumb {
  flex-shrink: 0;
  width: 62px;
  height: 62px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 5px;
  background: var(--ikm-bg);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-card);
}
.ikm-cart__thumb img { width: 100%; height: 100%; object-fit: contain; }

.ikm-cart__name { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.ikm-cart__name a { color: var(--ikm-tx); text-decoration: none; font-weight: 600; line-height: 1.6; }
.ikm-cart__name a:hover { color: var(--ikm-accent); }
.ikm-cart__name small { font-size: .72rem; color: var(--ikm-tx-faint); }

.ikm-cart__cell--price,
.ikm-cart__cell--sub { font-family: var(--ikm-mono); white-space: nowrap; }
.ikm-cart__cell--sub { color: var(--ikm-tx); font-weight: 700; }

/* دکمه‌های تعداد — در چیدمان راست‌به‌چپ «+» سمت راست */
.ikm-cart .quantity {
  display: flex;
  flex-direction: row-reverse;
  align-items: stretch;
  width: max-content;
}
.ikm-cart .quantity input {
  width: 52px;
  height: 38px;
  text-align: center;
  border: 1px solid var(--ikm-line-c);
  background: var(--ikm-bg);
  color: var(--ikm-tx);
  font-family: var(--ikm-mono);
}

.ikm-cart__cell--del { display: flex; justify-content: center; }
.ikm-cart .ikm-cart__del {
  width: 32px;
  height: 32px;
  display: flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-btn);
  color: var(--ikm-tx-faint);
}
.ikm-cart .ikm-cart__del:hover { border-color: var(--ikm-danger); color: var(--ikm-danger); }
.ikm-cart .ikm-cart__del svg { width: 14px; height: 14px; }

/* ---------- نوار عملیات ---------- */

.ikm-cart__actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px;
  margin-top: 14px;
}
.ikm-cart__coupon { display: flex; gap: 8px; flex: 1; min-width: 240px; }
.ikm-cart__coupon input {
  flex: 1;
  min-width: 0;
  padding: 11px 13px;
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-btn);
  background: var(--ikm-bg-2);
  color: var(--ikm-tx);
  font-family: var(--ikm-font);
  font-size: .85rem;
}
.ikm-cart__actions .ikm-btn { white-space: nowrap; }

/* ---------- کادر جمع کل ---------- */

.ikm-totals {
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
  padding: 18px;
  position: sticky;
  top: 108px;
}
.ikm-totals h2 {
  font-size: 1rem;
  font-weight: 800;
  color: var(--ikm-tx);
  margin: 0 0 14px;
  padding-bottom: 12px;
  border-bottom: 1px solid var(--ikm-line-c);
}
.ikm-totals__row {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 12px;
  padding: 10px 0;
  font-size: .86rem;
  color: var(--ikm-tx-mute);
  border-bottom: 1px dashed var(--ikm-line-c);
}
.ikm-totals__row b { font-family: var(--ikm-mono); color: var(--ikm-tx); font-weight: 700; }
.ikm-totals__row--final { border-bottom: none; padding-top: 14px; }
.ikm-totals__row--final span { font-weight: 700; color: var(--ikm-tx); }
.ikm-totals__row--final b { font-size: 1.1rem; color: var(--ikm-accent); }

.ikm-totals__ship { padding: 12px 0; border-bottom: 1px dashed var(--ikm-line-c); font-size: .84rem; }
.ikm-totals__label { display: block; color: var(--ikm-tx-mute); margin-bottom: 8px; }
.ikm-totals__ship ul { margin: 0; padding: 0; list-style: none; }
.ikm-totals__ship li { margin-bottom: 6px; }
.ikm-totals__ship label { color: var(--ikm-tx); cursor: pointer; }
.ikm-totals__note { font-size: .74rem; color: var(--ikm-tx-faint); margin: 8px 0 0; line-height: 1.7; }
.ikm-totals__ship .woocommerce-shipping-destination { font-size: .76rem; color: var(--ikm-tx-faint); }

.ikm-totals__go { margin-top: 16px; }
.ikm-totals__go a {
  display: block;
  width: 100%;
  text-align: center;
  min-height: 48px;
  padding: 15px;
  border-radius: var(--ikm-r-btn);
  background: var(--ikm-accent);
  color: var(--ikm-accent-ink);
  font-weight: 700;
  text-decoration: none;
}
.ikm-totals__go a:hover { filter: brightness(1.08); }

.ikm-totals__help { font-size: .78rem; color: var(--ikm-tx-faint); text-align: center; margin: 12px 0 0; }
.ikm-totals__help a { color: var(--ikm-accent); text-decoration: none; }

.woocommerce-cart .woocommerce-message,
.woocommerce-cart .woocommerce-info,
.woocommerce-cart .cart-empty {
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-inline-start: 3px solid var(--ikm-accent);
  border-radius: var(--ikm-r-card);
  padding: 14px 16px;
  margin-bottom: 18px;
  font-size: .88rem;
  list-style: none;
}

/* ---------- موبایل: هر قلم یک کارت واقعی، نه جدولِ تغییرشکل‌داده ---------- */

@media (max-width: 900px) {
  div.ikm-cart { grid-template-columns: 1fr; }
  .ikm-totals { position: static; }
}

@media (max-width: 640px) {
  .ikm-cart__head { display: none; }

  .ikm-cart__row {
    grid-template-columns: 1fr;
    gap: 10px;
    padding: 16px;
    position: relative;
  }
  .ikm-cart__cell--prod { padding-inline-end: 40px; }

  .ikm-cart__cell--price,
  .ikm-cart__cell--qty,
  .ikm-cart__cell--sub {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
  }
  .ikm-cart__cell--price::before,
  .ikm-cart__cell--qty::before,
  .ikm-cart__cell--sub::before {
    content: attr(data-label);
    font-size: .78rem;
    font-weight: 700;
    color: var(--ikm-tx-faint);
  }

  .ikm-cart__cell--del { position: absolute; top: 14px; inset-inline-end: 14px; }

  .ikm-cart__coupon { min-width: 100%; }
  .ikm-cart__actions .ikm-btn { flex: 1; }
}


/* ==========================================================================
   اصلاحات نسخه ۲.۸.۱
   ========================================================================== */

/* ---------- گرید محصولات: وودمارت گرید خودش را تحمیل می‌کرد ----------

   `.woocommerce ul.products` در وودمارت هم‌اندازه‌ی انتخابگر ما بود، پس
   نتیجه به ترتیب بارگذاری بستگی داشت و در موبایل گرید وودمارت برنده
   می‌شد: دو ستون به‌جای یک، کارت‌ها با ارتفاع نابرابر و دکمه بیرون‌زده.
   با یک سطح عمیق‌تر شدن، قاعده ما قطعی برنده می‌شود.                       */

.ikm-archive .ikm-archive__main ul.products,
.ikm-single ul.products,
.ikm-wrap ul.products {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  align-items: stretch;
  gap: 14px;
  list-style: none;
  margin: 0;
  padding: 0;
}

/* ارتفاع یکسان: کارت تمام قد ستون را می‌گیرد و پاورقی به کف می‌چسبد */
.ikm-archive ul.products > li.ikm-prod,
.ikm-single ul.products > li.ikm-prod,
.ikm-wrap ul.products > li.ikm-prod {
  height: 100%;
  margin: 0;
  width: auto;
  float: none;
}

/* عنوان دو خطی رزرو می‌کند تا کارت‌های کنار هم هم‌تراز بمانند */
.ikm-prod .ikm-prod__title {
  min-height: calc(2 * 1.5em);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.ikm-prod .ikm-prod__cat {
  min-height: 2.1em;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* ---------- پاورقی کارت: دکمه دیگر به لبه نمی‌چسبد و بریده نمی‌شود ---------- */

.ikm-prod .ikm-prod__foot {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  align-items: center;
  gap: 10px;
  margin-top: auto;
  padding-top: 12px;
}
.ikm-prod .ikm-prod__foot .ikm-price { min-width: 0; }
.ikm-prod .ikm-prod__foot .ikm-btn {
  flex: 0 0 auto;
  white-space: nowrap;
  padding: 9px 16px;
  min-height: 36px;
  line-height: 1;
}

/* روی موبایل قیمت و دکمه زیر هم می‌نشینند تا هیچ‌کدام له نشوند */
@media (max-width: 560px) {
  .ikm-prod .ikm-prod__foot { flex-direction: column; align-items: stretch; gap: 8px; }
  .ikm-prod .ikm-prod__foot .ikm-btn { width: 100%; text-align: center; }
  .ikm-prod .ikm-prod__body { padding: 14px; }
}

@media (max-width: 1000px) {
  .ikm-archive .ikm-archive__main ul.products,
  .ikm-single ul.products,
  .ikm-wrap ul.products { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 480px) {
  .ikm-archive .ikm-archive__main ul.products,
  .ikm-single ul.products,
  .ikm-wrap ul.products { grid-template-columns: minmax(0, 1fr); }
}


/* ---------- سبد خرید دسکتاپ ----------

   ستون‌های ثابت پیکسلی جای کافی نداشتند و محتوا از سلول بیرون می‌زد.
   حالا همه ستون‌ها با `fr` تعریف شده‌اند: سلول‌ها هرگز از سهم خودشان
   بیرون نمی‌زنند، هر چقدر هم عرض صفحه کم شود.                              */

div.ikm-cart { grid-template-columns: minmax(0, 1fr) minmax(280px, 320px); gap: 20px; }

.ikm-cart__head,
.ikm-cart__row {
  grid-template-columns:
    minmax(0, 2.4fr)   /* محصول  */
    minmax(0, 1fr)     /* قیمت   */
    minmax(0, 1.2fr)   /* تعداد  */
    minmax(0, 1fr)     /* جمع جزء */
    40px;              /* حذف    */
  gap: 10px;
}
.ikm-cart__cell { min-width: 0; }
.ikm-cart__cell--price,
.ikm-cart__cell--sub { overflow-wrap: anywhere; white-space: normal; }
.ikm-cart__name { overflow-wrap: anywhere; }

@media (max-width: 1100px) {
  .ikm-cart__thumb { width: 48px; height: 48px; }
  .ikm-cart .quantity input { width: 42px; }
}


/* ==========================================================================
   نسخه ۳.۰ — مسیر رسیدن کاربر به محصول
   ========================================================================== */

/* ---------- چیپ فیلتر مدل ----------
   مکانیک مدل دستگاهش را می‌داند؛ این اولین چیزی است که می‌خواهد
   فیلتر کند، پس بالای فهرست می‌نشیند نه داخل سایدبار.                     */

.ikm-chips {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  padding: 14px 0 18px;
  margin-bottom: 18px;
  border-bottom: 1px solid var(--ikm-line-c);
}
.ikm-chips__label {
  font-size: .8rem;
  font-weight: 700;
  color: var(--ikm-tx-mute);
  margin-inline-end: 4px;
}
.ikm-chips .ikm-chip {
  display: inline-flex;
  align-items: center;
  min-height: 34px;
  padding: 7px 14px;
  border: 1px solid var(--ikm-line-c);
  border-radius: 999px;
  background: var(--ikm-bg-2);
  color: var(--ikm-tx-mute);
  font-family: var(--ikm-mono);
  font-size: .78rem;
  text-decoration: none;
  transition: .15s;
}
.ikm-chips .ikm-chip:hover { border-color: var(--ikm-accent); color: var(--ikm-accent); }
.ikm-chips .ikm-chip.is-on {
  background: var(--ikm-accent);
  border-color: var(--ikm-accent);
  color: var(--ikm-accent-ink);
  font-weight: 700;
}


/* ---------- همین قطعه برای مدل‌های دیگر ---------- */

.ikm-others { margin-bottom: 44px; }
.ikm-others h2 {
  font-size: 1.1rem;
  font-weight: 800;
  color: var(--ikm-tx);
  margin: 0 0 6px;
}
.ikm-others__lead { font-size: .85rem; color: var(--ikm-tx-mute); margin: 0 0 14px; }
.ikm-others__lead a { color: var(--ikm-accent); text-decoration: none; }

.ikm-others__list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 10px;
}
.ikm-others .ikm-others__item {
  display: flex;
  flex-direction: column;
  gap: 4px;
  padding: 13px 15px;
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-card);
  text-decoration: none;
  transition: .15s;
}
.ikm-others .ikm-others__item:hover { border-color: var(--ikm-accent); box-shadow: var(--ikm-shadow); }
.ikm-others__item b { font-size: .84rem; color: var(--ikm-accent); }
.ikm-others__item span {
  font-size: .8rem;
  color: var(--ikm-tx-mute);
  line-height: 1.6;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.ikm-others__item em {
  font-family: var(--ikm-mono);
  font-style: normal;
  font-size: .78rem;
  color: var(--ikm-tx);
  font-weight: 700;
}


/* ---------- آرشیو خالی ----------
   صفحه سفید یعنی کاربر برمی‌گردد. اینجا می‌گوییم قطعه را داریم و
   راه تماس را جلوی دستش می‌گذاریم.                                        */

.ikm-empty {
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
  padding: 32px 26px;
  text-align: center;
}
.ikm-empty h2 {
  font-size: 1.15rem;
  font-weight: 800;
  color: var(--ikm-tx);
  margin: 0 0 10px;
}
.ikm-empty p {
  font-size: .9rem;
  color: var(--ikm-tx-mute);
  line-height: var(--ikm-line);
  max-width: 46ch;
  margin: 0 auto 20px;
}
.ikm-empty__actions {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px;
}

@media (max-width: 560px) {
  .ikm-empty { padding: 24px 18px; }
  .ikm-empty__actions .ikm-btn { width: 100%; text-align: center; }
  .ikm-chips { padding: 12px 0 14px; }
}


/* ---------- سایدبار دوسطحی ---------- */

.ikm-filter__tree { display: flex; flex-direction: column; }

.ikm-filter .ikm-filter__main {
  font-weight: 600;
  color: var(--ikm-tx);
  padding: 8px 0;
}
.ikm-filter .ikm-filter__main.is-on { color: var(--ikm-accent); }

.ikm-filter__subs {
  display: flex;
  flex-direction: column;
  margin: 2px 0 8px;
  padding-inline-start: 12px;
  border-inline-start: 2px solid var(--ikm-line-c);
}
.ikm-filter__subs a { padding: 6px 0; font-size: .8rem; }
.ikm-filter__subs a.is-on { color: var(--ikm-accent); font-weight: 700; }

.ikm-filter a.is-on { color: var(--ikm-accent); font-weight: 700; }
.ikm-filter .ikm-filter__clear {
  margin-top: 8px;
  padding-top: 10px;
  border-top: 1px dashed var(--ikm-line-c);
  color: var(--ikm-danger);
  font-size: .78rem;
}


/* ==========================================================================
   سبد خرید — اصلاحات نسخه ۳.۲.۲
   ========================================================================== */

/*
 * ⚠️ در نسخه ۲.۸ روی سلول قیمت `overflow-wrap: anywhere` گذاشته بودم
 * تا از سرریز جلوگیری کند. نتیجه‌اش این شد که عدد وسط خودش می‌شکست:
 * «48,500,00 / 0 تومان». مبلغ هیچ‌وقت نباید بشکند.
 */
.ikm-cart__cell--price,
.ikm-cart__cell--sub {
  overflow-wrap: normal;
  white-space: nowrap;
}

/*
 * چیدمان با عمق بیشتر نوشته می‌شود تا قاعده ووکامرس یا وودمارت روی
 * عرض ستون‌ها اثر نگذارد — ستون جمع کل باید ثابت بماند.
 */
.woocommerce-cart div.ikm-cart {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: 20px;
  align-items: start;
}

/* ستون نام محصول جای بیشتری می‌گیرد؛ ستون‌های عددی به اندازه محتوا */
.woocommerce-cart .ikm-cart__head,
.woocommerce-cart .ikm-cart__row {
  grid-template-columns: minmax(0, 1fr) max-content max-content max-content 36px;
  gap: 12px;
}
.ikm-cart__name a { overflow-wrap: normal; word-break: normal; }

@media (max-width: 1100px) {
  .woocommerce-cart div.ikm-cart { grid-template-columns: minmax(0, 1fr) 270px; }
  .ikm-cart .quantity input { width: 40px; }
  .ikm-cart__cell--price,
  .ikm-cart__cell--sub { font-size: .8rem; }
}

@media (max-width: 900px) {
  .woocommerce-cart div.ikm-cart { grid-template-columns: 1fr; }
}

@media (max-width: 640px) {
  .woocommerce-cart .ikm-cart__row { grid-template-columns: 1fr; }
}


/* ==========================================================================
   سبد خرید — بازنویسی نسخه ۳.۴

   ⚠️ این بخش عمداً آخر فایل است و همه قاعده‌های ستونی قبلی
   (نسخه ۲.۸، ۳.۰، ۳.۲.۲) را باطل می‌کند. آن‌ها را پاک نکردم تا
   تاریخچه تصمیم‌ها گم نشود، ولی هیچ‌کدام دیگر اثر ندارند.

   چه عوض شد: گرید پنج‌ستونه حذف شد.

   دلیل: سرصفحه و ردیف دو گرید جدا بودند و ستون‌هایشان هیچ‌وقت روی
   هم نمی‌افتاد. ضمناً سه ستون عددی `max-content` بودند و ستون نام
   محصول به چند پیکسل می‌رسید — نام کلمه‌به‌کلمه و شماره فنی
   رقم‌به‌رقم عمودی می‌شکست.

   حالا هر قلم دو ردیف است و هیچ ستون مشترکی وجود ندارد که جا بیفتد.
   ========================================================================== */

.woocommerce-cart .ikm-cart__row,
.ikm-cart__row {
  display: block;
  padding: 16px;
  border-bottom: 1px solid var(--ikm-line-c);
}
.ikm-cart__row:last-child { border-bottom: none; }

.ikm-cart__head { display: none !important; }

/* ---------- ردیف بالا: عکس + نام + شماره فنی ---------- */

.ikm-cart__top {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  min-width: 0;
}

.ikm-cart__top .ikm-cart__thumb {
  flex: 0 0 auto;
  width: 64px;
  height: 64px;
}

.ikm-cart__top .ikm-cart__name {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
  flex: 1 1 auto;
  padding-top: 2px;
}

/*
 * نام محصول در جای کافی می‌نشیند و فقط بین کلمه‌ها می‌شکند،
 * نه وسط کلمه.
 */
.ikm-cart__top .ikm-cart__name a,
.ikm-cart__top .ikm-cart__name > span {
  font-size: .95rem;
  font-weight: 600;
  line-height: 1.7;
  color: var(--ikm-tx);
  text-decoration: none;
  overflow-wrap: normal;
  word-break: normal;
}
.ikm-cart__top .ikm-cart__name a:hover { color: var(--ikm-accent); }

/*
 * شماره فنی هیچ‌وقت نباید بشکند — نه بین رقم‌ها، نه بین خط تیره‌ها.
 * قبلاً در ستون باریک عمودی رقم‌به‌رقم چاپ می‌شد.
 */
.ikm-cart__top .ikm-cart__name small {
  font-size: .76rem;
  color: var(--ikm-tx-faint);
  white-space: nowrap;
  overflow-wrap: normal;
  word-break: keep-all;
  letter-spacing: .02em;
}

/* ---------- ردیف پایین: قیمت · تعداد · جمع · حذف ---------- */

.ikm-cart__bottom {
  display: flex;
  align-items: flex-end;
  flex-wrap: wrap;
  gap: 10px 22px;
  margin-top: 14px;
  padding-top: 14px;
  padding-inline-start: 78px;   /* هم‌تراز با نام، نه با عکس */
  border-top: 1px dashed var(--ikm-line-c);
}

.ikm-cart__field {
  display: flex;
  flex-direction: column;
  gap: 5px;
  min-width: 0;
}

.ikm-cart__lbl {
  font-size: .72rem;
  font-weight: 600;
  color: var(--ikm-tx-faint);
  white-space: nowrap;
}

/*
 * مبلغ هرگز نمی‌شکند. در نسخه ۲.۸ با `overflow-wrap: anywhere`
 * وسط عدد می‌شکست: «۴۸,۵۰۰,۰۰ / ۰ تومان».
 */
.ikm-cart__val {
  font-family: var(--ikm-mono);
  font-size: .88rem;
  color: var(--ikm-tx);
  white-space: nowrap;
  overflow-wrap: normal;
  word-break: keep-all;
}
.ikm-cart__field--sub .ikm-cart__val {
  font-weight: 700;
  color: var(--ikm-accent);
}

.ikm-cart__field--del { margin-inline-start: auto; }
.ikm-cart__field--del .ikm-cart__del { margin-bottom: 2px; }

/* دکمه تعداد بدون برچسب اضافی زیرش جا بیفتد */
.ikm-cart__field--qty .quantity { margin: 0; }

@media (max-width: 560px) {
  .ikm-cart__bottom {
    padding-inline-start: 0;
    gap: 10px 16px;
  }
  .ikm-cart__top .ikm-cart__thumb { width: 54px; height: 54px; }
}

/* ---------- کادر جمع کل ---------- */

/*
 * ارقام فارسی‌اند ولی خودِ کلمه «تومان» فارسی است. با فونت مونو
 * تنها، حروف فارسی از هم باز می‌شدند — در tokens.css وزیرمتن به
 * پشته فونت اضافه شد و اینجا فقط اندازه تنظیم می‌شود.
 */
.ikm-totals__row b,
.ikm-totals__row--final b {
  white-space: nowrap;
  overflow-wrap: normal;
}


/* ==========================================================================
   کشوی سبد خرید — نسخه ۳.۴.۶

   جای پیام گوشه صفحه را گرفت. پیام قبلی پایین صفحه می‌آمد و اگر
   کاربر بالای فهرست محصولات بود اصلاً نمی‌دیدش.

   دسکتاپ: از لبه چپ باز می‌شود (در چیدمان راست‌به‌چپ، چپ سمت پایانی است)
   موبایل: از پایین بالا می‌آید، چون کشوی کناری در عرض کم جا نمی‌شود
   ========================================================================== */

.ikm-drawer-ov {
  position: fixed;
  inset: 0;
  z-index: 9998;
  background: rgba(8, 14, 17, .5);
  opacity: 0;
  visibility: hidden;
  transition: opacity .25s ease, visibility .25s;
}
.ikm-drawer-ov.is-on { opacity: 1; visibility: visible; }

.ikm-drawer {
  position: fixed;
  top: 0;
  left: 0;
  bottom: 0;
  z-index: 9999;
  width: min(380px, 92vw);
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding: 20px;
  overflow-y: auto;
  background: var(--ikm-bg-2);
  border-inline-end: 1px solid var(--ikm-line-c);
  box-shadow: var(--ikm-shadow);
  transform: translateX(-100%);
  visibility: hidden;
  transition: transform .3s ease, visibility .3s;
}
.ikm-drawer.is-on { transform: translateX(0); visibility: visible; }

/* ---------- سرتیتر ---------- */

.ikm-drawer__head {
  display: flex;
  align-items: center;
  gap: 10px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--ikm-line-c);
}
.ikm-drawer__head b { font-size: .95rem; color: var(--ikm-tx); }

.ikm-drawer__ok {
  flex: 0 0 auto;
  width: 26px;
  height: 26px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--ikm-ok);
  color: #fff;
}
.ikm-drawer__ok svg { width: 15px; height: 15px; }

.ikm-drawer .ikm-drawer__x {
  margin-inline-start: auto;
  width: 30px;
  height: 30px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  background: none;
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-btn);
  color: var(--ikm-tx-faint);
  cursor: pointer;
}
.ikm-drawer .ikm-drawer__x:hover { color: var(--ikm-accent); border-color: var(--ikm-accent); }
.ikm-drawer__x svg { width: 15px; height: 15px; }

/* ---------- قلم اضافه‌شده ---------- */

/* ---------- فهرست اقلام ----------
   کشو کل سبد را نشان می‌دهد؛ قلم تازه با نشان «تازه» و یک نوار
   سبز کنارش مشخص می‌شود تا در فهرست گم نشود.                      */

.ikm-drawer__list {
  display: flex;
  flex-direction: column;
  gap: 4px;
  max-height: 46vh;
  overflow-y: auto;
  margin-inline: -6px;
  padding-inline: 6px;
}

.ikm-drawer__item {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  padding: 10px;
  border-radius: var(--ikm-r-card);
}
.ikm-drawer__item.is-new {
  background: color-mix(in srgb, var(--ikm-ok) 10%, transparent);
  border-inline-start: 3px solid var(--ikm-ok);
}

@supports not (background: color-mix(in srgb, red 50%, blue)) {
  .ikm-drawer__item.is-new { background: var(--ikm-bg-3); }
}

.ikm-drawer__new {
  margin-inline-start: auto;
  align-self: flex-start;
  padding: 3px 8px;
  font-size: .68rem;
  font-weight: 700;
  color: #fff;
  background: var(--ikm-ok);
  border-radius: 999px;
  white-space: nowrap;
}

.ikm-drawer__thumb {
  flex: 0 0 auto;
  width: 68px;
  height: 68px;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 5px;
  background: var(--ikm-bg);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-card);
  overflow: hidden;
}
.ikm-drawer__thumb img { width: 100%; height: 100%; object-fit: contain; display: block; }

.ikm-drawer__info { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.ikm-drawer__info b {
  font-size: .9rem;
  font-weight: 600;
  line-height: 1.7;
  color: var(--ikm-tx);
  overflow-wrap: normal;
}
.ikm-drawer__info small { font-size: .74rem; color: var(--ikm-tx-faint); white-space: nowrap; }
.ikm-drawer__qty {
  font-family: var(--ikm-mono);
  font-size: .82rem;
  color: var(--ikm-tx-mute);
  white-space: nowrap;
}

/* ---------- جمع ---------- */

.ikm-drawer__sum {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 0;
  border-top: 1px solid var(--ikm-line-c);
  border-bottom: 1px solid var(--ikm-line-c);
}
.ikm-drawer__sum > span { font-size: .82rem; color: var(--ikm-tx-mute); }
.ikm-drawer__sum > b {
  font-family: var(--ikm-mono);
  font-size: 1rem;
  color: var(--ikm-accent);
  white-space: nowrap;
}

.ikm-drawer__note {
  margin: 0;
  font-size: .78rem;
  line-height: 1.9;
  color: var(--ikm-tx-faint);
}

/* ---------- دکمه‌ها ---------- */

.ikm-drawer__actions {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: auto;
  padding-top: 8px;
}
.ikm-drawer__actions .ikm-btn { justify-content: center; width: 100%; }

/* ---------- موبایل: از پایین ---------- */

/*
 * ⚠️ نسخه ۳.۴.۳۰ — دکمه‌های کشو روی موبایل زیر لبه صفحه می‌ماندند.
 *
 * دو علت با هم داشت:
 *
 * ۱) `86vh` روی مرورگر موبایل دروغ می‌گوید. واحد `vh` ارتفاع صفحه را
 *    **بدون** نوار آدرس و نوار پایین مرورگر حساب می‌کند. یعنی کشو
 *    بلندتر از فضای واقعی می‌شد و ته آن — که دقیقاً جای دکمه‌هاست —
 *    زیر نوار مرورگر می‌رفت. `dvh` همان اندازه واقعی و لحظه‌ای است.
 *    `vh` به‌عنوان پشتیبان می‌ماند برای مرورگرهای قدیمی.
 *
 * ۲) دکمه‌ها ته محتوا بودند. اگر سبد چند قلم داشته باشد، کاربر باید
 *    داخل کشو اسکرول کند تا به آن‌ها برسد — و معلوم هم نیست که باید
 *    اسکرول کند. حالا نوار دکمه‌ها `sticky` است و همیشه ته کشو
 *    می‌چسبد، هر چقدر هم فهرست بلند باشد.
 *
 * `env(safe-area-inset-bottom)` هم برای آیفون‌هایی است که نوار خانه
 *    دارند، وگرنه دکمه آخر زیر آن نوار می‌افتد.
 */
@media (max-width: 640px) {
  .ikm-drawer {
    top: auto;
    right: 0;
    left: 0;
    width: auto;
    max-height: 86vh;
    max-height: 86dvh;
    padding-bottom: 0;
    border-inline-end: none;
    border-top: 1px solid var(--ikm-line-c);
    border-radius: var(--ikm-r-box) var(--ikm-r-box) 0 0;
    transform: translateY(100%);
  }
  .ikm-drawer.is-on { transform: translateY(0); }

  /* فهرست کوتاه‌تر تا همیشه جا برای نوار دکمه‌ها بماند */
  .ikm-drawer__list { max-height: 34vh; max-height: 34dvh; }

  /* نوار دکمه‌ها همیشه ته کشو می‌ماند و با محتوا بالا و پایین نمی‌رود */
  .ikm-drawer__actions {
    position: sticky;
    bottom: 0;
    margin-top: 8px;
    padding: 10px 0 calc(14px + env(safe-area-inset-bottom, 0px));
    background: var(--ikm-bg-2);
    border-top: 1px solid var(--ikm-line-c);
  }
}

/* حرکت کمتر برای کسانی که «کاهش حرکت» را فعال کرده‌اند */
@media (prefers-reduced-motion: reduce) {
  .ikm-drawer,
  .ikm-drawer-ov { transition: none; }
  .ikm-drawer { transform: none; }
}


/* ==========================================================================
   پیام خطا — فقط برای وقتی افزودن انجام نشد
   ========================================================================== */

.ikm-toast {
  position: fixed;
  inset-inline-start: 20px;
  bottom: 20px;
  z-index: 9999;
  max-width: 320px;
  padding: 14px 18px;
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-inline-start: 3px solid var(--ikm-danger);
  border-radius: var(--ikm-r-box);
  box-shadow: var(--ikm-shadow);
  opacity: 0;
  transform: translateY(12px);
  transition: opacity .25s ease, transform .25s ease;
}
.ikm-toast.is-on { opacity: 1; transform: translateY(0); }
.ikm-toast__txt { margin: 0; font-size: .86rem; line-height: 1.8; color: var(--ikm-tx); }

@media (max-width: 560px) {
  .ikm-toast { inset-inline: 14px; max-width: none; bottom: 14px; }
}
@media (prefers-reduced-motion: reduce) {
  .ikm-toast { transition: none; transform: none; }
}


/* ==========================================================================
   قیمت حراج — نسخه ۳.۴.۶

   قیمت خط‌خورده حالا بدون واحد پول چاپ می‌شود (در ikm_product_price)،
   پس خط خط‌خوردگی دیگر روی کلمه «تومان» کشیده نمی‌شود.
   ========================================================================== */

.ikm-price { display: flex; align-items: baseline; flex-wrap: wrap; gap: 8px; }
.ikm-price__old {
  font-size: .78rem;
  color: var(--ikm-tx-faint);
  text-decoration-thickness: 1px;
  white-space: nowrap;
}
.ikm-price > b { white-space: nowrap; }


/* ==========================================================================
   قاب تصویر کارت محصول — نسخه ۳.۴.۱۱

   ⚠️ چرا لازم شد: عکس‌های کارفرما دو نسبت متفاوت دارند — بیشترشان
   قاب اینستاگرامی ۴:۵ هستند و بعضی عکس ساده با نسبت دیگر. بدون
   نسبت ثابت، کارت‌ها کوتاه و بلند می‌شدند و ردیف به‌هم می‌ریخت.

   `contain` عمدی است نه `cover`: با `cover` بخشی از عکس بریده
   می‌شود و روی این عکس‌ها یعنی لوگو یا نوار پایین قیچی می‌شود.
   حاشیه سفید کنار عکس‌های غیر ۴:۵ قیمت این تصمیم است — و از
   بریدن برند کارفرما کم‌هزینه‌تر است.
   ========================================================================== */

.ikm-prod__thumb {
  display: block;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  background: var(--ikm-bg);
}
.ikm-prod__thumb img,
.ikm-prod__img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  display: block;
}

/* بدنه کارت کش می‌آید تا همه کارت‌های یک ردیف هم‌قد بمانند */
.ikm-prod { display: flex; flex-direction: column; height: 100%; }
.ikm-prod__body { display: flex; flex-direction: column; flex: 1 1 auto; }
.ikm-prod__foot { margin-top: auto; }

@supports not (aspect-ratio: 1) {
  .ikm-prod__thumb { height: 320px; }
}


/* ==========================================================================
   متن معرفی دسته — نسخه ۳.۴.۱۹

   عرض متن مهار می‌شود چون خط بلندتر از ۷۵ نویسه سخت خوانده می‌شود،
   و این متن قرار است واقعاً خوانده شود نه فقط برای گوگل باشد.
   ========================================================================== */

/*
 * ⚠️ نسخه ۳.۴.۲۵ — مهار عرض برداشته شد.
 *
 * `max-width: 72ch` برای متن کوتاه معرفی نوشته شده بود و آن موقع
 * درست بود. ولی کادر در چیدمان راست‌به‌چپ از لبه راست شروع می‌شد و
 * نصف صفحه خالی می‌ماند — درست هم‌عرض ستون فیلترها. نتیجه این بود
 * که مثل یک بلوک سایدبار دیده می‌شد، نه بخشی از خود صفحه.
 *
 * حالا که قرار است متن سئوی هزار کلمه‌ای داخلش بنشیند، کادر تمام
 * عرض صفحه است. خوانایی با `line-height` و اندازه قلم مهار می‌شود،
 * نه با باریک‌کردن کادر.
 */
.ikm-archive__intro {
  max-width: none;
  margin: 0 0 24px;
  padding: 18px 22px;
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
}
.ikm-archive__intro p {
  margin: 0 0 12px;
  font-size: .92rem;
  line-height: 2.1;
  color: var(--ikm-tx-mute);
}
.ikm-archive__intro p:last-child { margin-bottom: 0; }
.ikm-archive__intro h2,
.ikm-archive__intro h3 {
  margin: 18px 0 10px;
  font-size: 1rem;
  color: var(--ikm-tx);
}
.ikm-archive__intro h2:first-child,
.ikm-archive__intro h3:first-child { margin-top: 0; }
.ikm-archive__intro a { color: var(--ikm-accent); }
.ikm-archive__intro ul { margin: 0 0 12px; padding-inline-start: 20px; }
.ikm-archive__intro li { font-size: .9rem; line-height: 2; color: var(--ikm-tx-mute); }

@media (max-width: 640px) {
  .ikm-archive__intro { padding: 14px 16px; }
}

/* ==========================================================================
   جعبه خرید صفحه محصول — نسخه ۳.۴.۲۴

   مقادیر عمداً همان مقادیر `.single_add_to_cart_button` قدیمی است تا
   ظاهر صفحه محصول یک پیکسل هم عوض نشود. فقط ساختار زیرش مال خودمان
   شده، نه فرم ووکامرس.

   قاعده‌های قدیمی `.single_add_to_cart_button` و `form.cart` دست‌نخورده
   ماندند: محصول متغیر و گروهی هنوز از فرم ووکامرس استفاده می‌کنند.
   ========================================================================== */

.ikm-single__buy .ikm-buy {
  display: flex;
  gap: 10px;
  align-items: stretch;
  margin-top: 16px;
  flex-wrap: wrap;
}

/* در چیدمان راست‌به‌چپ «+» باید سمت راست بنشیند */
.ikm-buy__qty {
  display: flex;
  flex-direction: row-reverse;
  align-items: stretch;
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-btn);
  overflow: hidden;
  background: var(--ikm-bg);
}

.ikm-buy__step {
  width: 40px;
  min-height: 46px;
  border: none;
  background: transparent;
  color: var(--ikm-tx);
  font-size: 1.1rem;
  line-height: 1;
  cursor: pointer;
  user-select: none;
}
.ikm-buy__step:hover { background: var(--ikm-bg-soft, rgba(127, 127, 127, .10)); }

.ikm-buy__num {
  width: 56px;
  min-height: 46px;
  text-align: center;
  border: none;
  border-inline-start: 1px solid var(--ikm-line-c);
  border-inline-end: 1px solid var(--ikm-line-c);
  background: transparent;
  color: var(--ikm-tx);
  font-family: var(--ikm-mono);
  -moz-appearance: textfield;
}
/* فلش‌های پیش‌فرض مرورگر کنار دکمه‌های خودمان اضافی‌اند */
.ikm-buy__num::-webkit-outer-spin-button,
.ikm-buy__num::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}

.ikm-single__buy .ikm-buy__add {
  flex: 1;
  min-width: 160px;
  min-height: 46px;
  padding: 13px 26px;
  border: none;
  border-radius: var(--ikm-r-btn);
  background: var(--ikm-accent);
  color: var(--ikm-accent-ink);
  font-family: var(--ikm-font);
  font-weight: 700;
  font-size: .92rem;
  cursor: pointer;
}
.ikm-single__buy .ikm-buy__add:hover { filter: brightness(1.08); }

@media (max-width: 480px) {
  .ikm-single__buy .ikm-buy { gap: 8px; }
  .ikm-buy__step { width: 36px; }
  .ikm-buy__num  { width: 48px; }
}

/* ==========================================================================
   نسخه ۳.۴.۲۶ — دو قاعده‌ای که عمداً آخر فایل و با وزن بالا نوشته شدند

   هر دو مورد دو بار با روش معمولی اصلاح شدند و باز برنگشتند سر جایشان.
   طبق قاعده ۴ پروژه، بار سوم روش عوض می‌شود: به‌جای اینکه به ارث‌بری و
   ترتیب بارگذاری تکیه کنیم، همین‌جا صریح و با وزن بالاتر بسته می‌شود.
   ========================================================================== */

/* ۱) کادر متن دسته — تمام‌عرض، هر جای صفحه که باشد.
 *
 * `max-width: none` در ۳.۴.۲۵ گذاشته شد ولی کادر همچنان دقیقاً
 * ۲۵۰ پیکسل ماند — یعنی هم‌عرض ستون فیلترها. به‌جای حدس زدن اینکه
 * کدام قاعده آن را مهار می‌کند، سه چیز با هم صریح می‌شود:
 *   - `max-width: none`  اگر مهار از عرض بیشینه است
 *   - `width: 100%`      اگر از عرض ذاتی محتواست
 *   - `grid-column: 1/-1` اگر کادر به‌عنوان خانه گرید جا افتاده
 * اگر کادر خانه گرید نباشد، خط سوم بی‌اثر است و ضرری ندارد.
 */
/*
 * ⚠️ اصلاح ۳.۴.۲۷ — انتخابگر فرزند مستقیم اشتباه بود.
 *
 * در ۳.۴.۲۶ نوشته بودم `.ikm-wrap.ikm-archive > .ikm-archive__intro`.
 * عکس DevTools نشان داد کادر متن در زمان اجرا **نوه** است نه فرزند:
 *   .ikm-wrap.ikm-archive ← .ikm-archive__body ← .ikm-archive__intro
 * پس آن قاعده اصلاً روی عنصر نمی‌افتاد و بی‌اثر بود.
 *
 * چرا نوه است: در قالب، کادر متن بیرون از `.ikm-archive__body` نوشته
 * شده. ولی وودمارت دور فهرست محصولات یک `<div>` اضافه باز می‌کند که
 * تگ بستنش را هوکی می‌بندد که ما صدا نمی‌زنیم. آن `<div>` باز، یکی
 * از دو تگ بستن ما را می‌بلعد و `.ikm-archive__body` باز می‌ماند.
 *
 * آن ریشه جداگانه باید بررسی شود (در فایل تحویل ثبت شد). اینجا با
 * انتخابگر نوادگان بسته می‌شود تا چیدمان در هر دو حالت درست باشد:
 * `grid-column: 1 / -1` اگر خانه گرید شد کل عرض را می‌گیرد، و اگر
 * روزی ریشه اصلاح شد و از گرید بیرون آمد، بی‌اثر است و ضرری ندارد.
 */
.ikm-archive .ikm-archive__intro {
  max-width: none;
  width: 100%;
  grid-column: 1 / -1;
}

/* ۲) کادر سبد خالی — متن داخلش هم وسط‌چین.
 *
 * `.ikm-empty { text-align: center }` وجود داشت، ولی پاراگراف آن را
 * به ارث نمی‌برد چون قالب مادر برای `p` چیدمان خودش را می‌گذارد.
 * نتیجه: آیکون و تیتر و دکمه‌ها وسط بودند ولی متن راست‌چین می‌ماند و
 * کادر نامرتب دیده می‌شد. حالا صریح نوشته شده.
 */
/*
 * ⚠️ اصلاح ۳.۴.۲۷ — این بار با `!important`.
 *
 * دو بار با وزن معمولی نوشته شد و هر دو بار پاراگراف راست‌چین ماند.
 * علت: کادر سبد خالی داخل `<article class="ikm-content entry-content">`
 * است و قالب مادر برای `p` داخل `entry-content` چیدمان خودش را
 * می‌گذارد — با وزن برابر ولی بارگذاری بعدتر، پس برنده می‌شود.
 *
 * طبق قاعده ۴، بار سوم روش عوض می‌شود. دامنه‌اش تنگ است و فقط داخل
 * `.ikm-empty` اثر دارد، پس جای دیگری را نمی‌شکند.
 */
.ikm-empty,
.ikm-empty h2,
.ikm-empty p {
  text-align: center !important;
}
.ikm-empty p {
  max-width: 46ch;
  margin-inline: auto;
}

/* ==========================================================================
   نسخه ۳.۴.۲۸ — چیدمان متن، این بار با وزن بالاتر از قالب مادر

   چرا دوباره: قاعده‌های `!important` نسخه ۳.۴.۲۷ هم جواب ندادند.
   علتش وزن نیست، **تساوی وزن** است: قالب مادر `.entry-content p` را
   هدف می‌گیرد که دقیقاً هم‌وزن `.ikm-empty p` است، و فایل‌های CSS
   وودمارت پایین صفحه بارگذاری می‌شوند — پس در تساوی، آن برنده می‌شود.

   راه‌حل: کلاس را دو بار می‌نویسیم. `.ikm-empty.ikm-empty p` همان
   عنصر را هدف می‌گیرد ولی یک پله وزن بیشتری دارد، پس دیگر تساوی
   نیست و ترتیب بارگذاری اهمیتی ندارد.
   ========================================================================== */

/* ۱) کادر سبد خالی — همه‌چیزش وسط‌چین */
.ikm-empty.ikm-empty,
.ikm-empty.ikm-empty h2,
.ikm-empty.ikm-empty p {
  text-align: center !important;
}
.ikm-empty.ikm-empty p {
  max-width: 46ch;
  margin-inline: auto;
}

/* ۲) کادر متن دسته — راست‌چین، نه وسط‌چین
 *
 * تا وقتی کادر ۲۵۰ پیکسلی بود هر خط تا ته پر می‌شد و وسط‌چین بودنش
 * دیده نمی‌شد. حالا که تمام‌عرض شده، یک متن کوتاه وسط کادر می‌ایستد
 * و غلط به نظر می‌رسد. `start` در راست‌به‌چپ یعنی راست.
 */
.ikm-archive__intro.ikm-archive__intro,
.ikm-archive__intro.ikm-archive__intro p:not([style*="text-align"]),
.ikm-archive__intro.ikm-archive__intro h2:not([style*="text-align"]),
.ikm-archive__intro.ikm-archive__intro h3:not([style*="text-align"]),
.ikm-archive__intro.ikm-archive__intro h4:not([style*="text-align"]),
.ikm-archive__intro.ikm-archive__intro li:not([style*="text-align"]) {
  text-align: start !important;
}

/*
 * ⚠️ چرا `:not([style*="text-align"])` اینجا هست و در کادر سبد خالی نیست:
 *
 * متن دسته را **کارفرما از پنل می‌نویسد** (محصولات ← دسته‌بندی‌ها ←
 * ویرایش ← توضیحات). وقتی در ویرایشگر روی دکمه وسط‌چین بزند، وردپرس
 * `style="text-align:center"` را روی همان پاراگراف می‌گذارد.
 *
 * اگر قاعده ما بی‌قید `!important` می‌بود، آن دکمه ویرایشگر برای همیشه
 * از کار می‌افتاد و دلیلش هم معلوم نمی‌شد. با این شرط، پیش‌فرض
 * راست‌چین است ولی هر جا خودش صریحاً چیدمان بدهد، حرف او می‌ماند.
 *
 * کادر سبد خالی چنین شرطی ندارد چون متنش در قالب خودمان است و کسی
 * از پنل ویرایشش نمی‌کند.
 */

/* ==========================================================================
   «ادامه متن» — نسخه ۳.۴.۳۲

   کلاس `is-clamped` را جاوااسکریپت می‌گذارد، نه قالب. پس بدون
   جاوااسکریپت هیچ‌کدام از این قاعده‌ها اجرا نمی‌شوند و متن کامل و باز
   می‌ماند — همان چیزی که برای خزنده لازم است.

   بریدن با `max-height` است نه `display: none`؛ متن واقعاً رندر
   می‌شود و فقط دیده نمی‌شود.
   ========================================================================== */

/*
 * ⚠️ نسخه ۳.۴.۳۹ — ارتفاع بر حسب «تعداد خط»، نه پیکسل ثابت.
 *
 * تا اینجا عدد پیکسلی بود و نتیجه‌اش این شد که روی دسکتاپ که خط‌ها
 * بلندترند متن کوتاه کامل جا می‌شد و دکمه نمی‌آمد، ولی روی موبایل
 * همان متن سه برابر می‌شد و دکمه می‌گرفت. رفتار ناپایدار به نظر
 * می‌رسید.
 *
 * حالا همیشه **سه خط** نشان داده می‌شود، روی هر دستگاهی. اگر متن
 * کمتر از سه خط باشد کامل می‌آید و دکمه‌ای ساخته نمی‌شود.
 *
 * `--ikm-more-lines` را می‌شود برای هر بلوک جدا عوض کرد.
 */
.ikm-archive__intro {
  --ikm-more-lines: 3;
  --ikm-more-lh: 1.93rem;   /* ۰٫۹۲rem × line-height ۲٫۱ */
}

.ikm-archive__intro.is-clamped .ikm-more__body {
  position: relative;
  max-height: calc(var(--ikm-more-lh) * var(--ikm-more-lines));
  overflow: hidden;
}

/* پرده محو در لبه پایین، تا معلوم شود متن ادامه دارد */
.ikm-archive__intro.is-clamped .ikm-more__body::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  bottom: 0;
  height: 72px;
  pointer-events: none;
  background: linear-gradient(to bottom, transparent, var(--ikm-bg-2));
}

.ikm-archive__intro.is-clamped.is-open .ikm-more__body {
  max-height: none;
}
.ikm-archive__intro.is-clamped.is-open .ikm-more__body::after {
  display: none;
}

.ikm-archive__intro .ikm-more__btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 14px;
  padding: 9px 20px;
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-btn);
  background: var(--ikm-bg);
  color: var(--ikm-accent);
  font-family: var(--ikm-font);
  font-size: .85rem;
  font-weight: 700;
  cursor: pointer;
}
.ikm-archive__intro .ikm-more__btn:hover {
  border-color: var(--ikm-accent);
}

/* فلش کوچک که با باز و بسته شدن می‌چرخد */
.ikm-archive__intro .ikm-more__btn::after {
  content: "";
  width: 7px;
  height: 7px;
  border-inline-end: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: translateY(-2px) rotate(45deg);
  transition: transform .2s ease;
}
.ikm-archive__intro.is-open .ikm-more__btn::after {
  transform: translateY(1px) rotate(-135deg);
}

/* روی موبایل هم همان سه خط — فقط پرده محو کوتاه‌تر */
@media (max-width: 640px) {
  .ikm-archive__intro.is-clamped .ikm-more__body::after { height: 52px; }
}

/* ==========================================================================
   نسخه ۳.۴.۳۳ — سه اصلاح موبایل
   ========================================================================== */

/* ۱) نوار مدل دستگاه: یک ردیف افقی که با انگشت کشیده می‌شود
 *
 * روی موبایل هشت چیپ در سه ردیف می‌افتادند و به‌هم‌ریخته دیده می‌شد.
 *
 * ⚠️ عمداً داخل پنل فیلترها برده نشد. این چیپ‌ها قرار است به آدرس
 * `/model/pc220/` لینک بدهند و مهم‌ترین لینک‌های داخلی سایت شوند.
 * لینکی که پشت یک دکمه بسته پنهان باشد هم کمتر دیده می‌شود و هم
 * ارزش کمتری برای گوگل دارد.
 *
 * `scroll-snap` باعث می‌شود چیپ‌ها موقع کشیدن، تمیز سر جایشان
 * بایستند. `scrollbar-width: none` نوار اسکرول را پنهان می‌کند —
 * روی موبایل خودش پیدا نیست و روی دسکتاپ این قاعده اصلاً اجرا
 * نمی‌شود.
 */
@media (max-width: 640px) {

  .ikm-chips {
    flex-wrap: nowrap;
    overflow-x: auto;
    overflow-y: hidden;
    scroll-snap-type: x proximity;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
    /* لبه‌ها تا انتهای عرض صفحه کشیده شوند تا معلوم باشد ادامه دارد */
    padding-inline: 2px;
  }
  .ikm-chips::-webkit-scrollbar { display: none; }

  .ikm-chips__label,
  .ikm-chips .ikm-chip {
    flex: 0 0 auto;
    white-space: nowrap;
    scroll-snap-align: start;
  }
}

/* ۲) جعبه خرید صفحه محصول روی موبایل
 *
 * کادر تعداد بی‌دلیل پهن می‌شد و دکمه افزودن را به سطر بعد می‌انداخت.
 * اندازه‌ها با کلاس دوتایی نوشته شده‌اند تا قاعده قالب مادر روی
 * `input` و `button` — که هم‌وزن است و بعدتر بارگذاری می‌شود — آن‌ها
 * را کش ندهد. همان درسی که در ۳.۴.۲۸ گرفتیم.
 */
@media (max-width: 640px) {

  .ikm-single__buy .ikm-buy {
    flex-wrap: nowrap;
    align-items: stretch;
  }

  .ikm-single__buy .ikm-buy__qty.ikm-buy__qty {
    flex: 0 0 auto;
  }
  .ikm-single__buy .ikm-buy__step.ikm-buy__step {
    flex: 0 0 auto;
    width: 38px;
    min-width: 38px;
  }
  .ikm-single__buy .ikm-buy__num.ikm-buy__num {
    flex: 0 0 auto;
    width: 46px;
    min-width: 46px;
  }
  .ikm-single__buy .ikm-buy__add.ikm-buy__add {
    flex: 1 1 auto;
    min-width: 0;
    padding: 13px 10px;
  }

  /* قیمت مثل بقیه صفحه راست‌چین بماند، نه وسط */
  .ikm-single__buy .ikm-price {
    display: block;
    text-align: start;
  }
}

/* ==========================================================================
   شبکه لینک داخلی — نسخه ۳.۴.۴۳

   سه لایه سایت باید به هم لینک بدهند: دسته اصلی ↔ زیردسته ↔ مدل.
   این بلوک بالای فهرست محصولات می‌نشیند و از داده خود سایت پر می‌شود.

   ⚠️ عمداً چیپ‌های بزرگ و دیدنی است، نه یک فهرست کوچک پایین صفحه.
   هم کاربر باید ببیندشان و هم گوگل باید دنبالشان کند. لینکی که پنهان
   باشد ارزش کمتری دارد.
   ========================================================================== */

.ikm-links {
  margin: 0 0 22px;
  padding: 16px 18px;
  background: var(--ikm-bg-2);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
}

.ikm-links__title {
  margin: 0 0 12px;
  font-size: .88rem;
  font-weight: 700;
  color: var(--ikm-tx);
}

.ikm-links__row {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.ikm-links__item {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 8px 14px;
  background: var(--ikm-bg);
  border: 1px solid var(--ikm-line-c);
  border-radius: 999px;
  color: var(--ikm-tx);
  font-size: .84rem;
  text-decoration: none;
  transition: border-color .15s, color .15s;
}
.ikm-links__item:hover {
  border-color: var(--ikm-accent);
  color: var(--ikm-accent);
}

.ikm-links__n {
  min-width: 20px;
  padding: 1px 5px;
  border-radius: 999px;
  background: var(--ikm-bg-3, rgba(127, 127, 127, .10));
  color: var(--ikm-tx-mute);
  font-size: .72rem;
  text-align: center;
}

.ikm-links__all {
  display: inline-block;
  margin-top: 12px;
  color: var(--ikm-accent);
  font-size: .84rem;
  font-weight: 700;
  text-decoration: none;
}
.ikm-links__all:hover { text-decoration: underline; }

/* مدل‌های سازگار در صفحه محصول — لینک، نه متن ساده */
.ikm-spec__models a {
  color: var(--ikm-accent);
  text-decoration: none;
}
.ikm-spec__models a:hover { text-decoration: underline; }

/* روی موبایل یک ردیف افقی، مثل نوار مدل‌ها */
@media (max-width: 640px) {
  .ikm-links { padding: 14px; }
  .ikm-links__row {
    flex-wrap: nowrap;
    overflow-x: auto;
    scroll-snap-type: x proximity;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .ikm-links__row::-webkit-scrollbar { display: none; }
  .ikm-links__item {
    flex: 0 0 auto;
    white-space: nowrap;
    scroll-snap-align: start;
  }
}


/* ==========================================================================
   تب نظرات — نسخه ۳.۴.۵۵ (inc/reviews.php)

   ⚠️ رنگ، حاشیه و گردی ورودی‌ها و دکمه ثبت از woodmart-compat.css می‌آید
   (با !important برای همه فرم‌های سایت). اینجا فقط چیدمان و اندازه.
   ========================================================================== */

.ikm-reviews__notice {
  margin: 0 0 16px;
  padding: 12px 14px;
  border: 1px solid var(--ikm-ok);
  border-radius: var(--ikm-r-card);
  background: var(--ikm-bg);
  color: var(--ikm-tx);
  font-size: .86rem;
}

.ikm-reviews__sum {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: 16px;
}
.ikm-reviews__sum b { font-size: 1.6rem; color: var(--ikm-tx); line-height: 1; }
.ikm-reviews__sum span { font-size: .82rem; color: var(--ikm-tx-mute); }

.ikm-reviews__empty { color: var(--ikm-tx-mute); font-size: .88rem; margin: 0 0 18px; }

/* ستاره‌های نمایشی */
.ikm-stars { display: inline-flex; gap: 1px; direction: ltr; line-height: 1; }
.ikm-stars i { font-style: normal; font-size: 1rem; color: var(--ikm-line-c); }
.ikm-stars i.is-full { color: var(--ikm-star); }
.ikm-stars i.is-half {
  background: linear-gradient(90deg, var(--ikm-star) 50%, var(--ikm-line-c) 50%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.ikm-reviews__list { list-style: none; margin: 0 0 22px; padding: 0; }
.ikm-review { padding: 14px 0; border-bottom: 1px solid var(--ikm-line-c); }
.ikm-review:first-child { padding-top: 0; }
.ikm-review__head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-bottom: 6px; }
.ikm-review__head b { font-size: .88rem; color: var(--ikm-tx); }
.ikm-review__head time { font-size: .72rem; color: var(--ikm-tx-faint); }
.ikm-review__body p { margin: 0 0 8px; font-size: .86rem; line-height: 1.9; color: var(--ikm-tx-mute); }

/* فرم */
.ikm-review-form {
  display: flex;
  flex-direction: column;
  gap: 12px;
  max-width: 620px;
  padding: 18px;
  background: var(--ikm-bg);
  border: 1px solid var(--ikm-line-c);
  border-radius: var(--ikm-r-box);
}
.ikm-review-form h3 { margin: 0; font-size: 1rem; font-weight: 800; color: var(--ikm-tx); }
.ikm-review-form label { display: flex; flex-direction: column; gap: 5px; font-size: .82rem; color: var(--ikm-tx); }
/* ۳.۴.۵۷ — متن برچسب و ستاره قرمز یک تکه‌اند؛ قبلاً چون برچسب ستونی
   است، «*» به خط بعد می‌افتاد */
.ikm-review-form__lbl b { color: var(--ikm-danger); font-weight: 700; }
.ikm-review-form small { font-size: .7rem; color: var(--ikm-tx-faint); }
.ikm-review-form input[type="text"],
.ikm-review-form input[type="email"],
.ikm-review-form textarea { width: 100%; min-height: 42px; padding: 8px 12px; font-size: .86rem; }
.ikm-review-form textarea { min-height: 110px; resize: vertical; }
.ikm-review-form__row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.ikm-review-form .ikm-btn { align-self: flex-start; min-height: 44px; padding: 10px 26px; }
.ikm-review-form__note { margin: 0; font-size: .74rem; color: var(--ikm-tx-faint); }

@media (max-width: 560px) {
  .ikm-review-form__row { grid-template-columns: 1fr; }
  .ikm-review-form { padding: 14px; }
}

/* انتخاب ستاره — در HTML ۵ تا ۱، اینجا برعکس: ۱ سمت راست */
.ikm-rate { border: 0; margin: 0; padding: 0; }
.ikm-rate legend { font-size: .82rem; color: var(--ikm-tx); margin-bottom: 4px; padding: 0; }
.ikm-rate legend span { color: var(--ikm-danger); }
.ikm-rate__stars { display: inline-flex; flex-direction: row-reverse; justify-content: flex-end; gap: 2px; }
.ikm-rate__stars input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.ikm-rate__stars label {
  display: block;
  font-size: 1.7rem;
  line-height: 1;
  color: var(--ikm-line-c);
  cursor: pointer;
  transition: color .1s;
}
.ikm-rate__stars input:checked ~ label,
.ikm-rate__stars label:hover,
.ikm-rate__stars label:hover ~ label { color: var(--ikm-star); }
.ikm-rate__stars input:focus-visible + label { outline: 2px solid var(--ikm-accent); outline-offset: 2px; border-radius: 3px; }

/* تله ربات */
.ikm-hp { position: absolute !important; left: -9999px !important; width: 1px; height: 1px; overflow: hidden; }
