/* ألوان التصميم — المرحلة ٤ من ترتيب الكود.
   كل لونٍ كان مكتوباً بقيمته في ملفات التصميم صار متغيّراً هنا، بالقيمة نفسها حرفاً
   (أداة tools/migration/tokenize-colors.mjs، والإثبات verify-colors.mjs).
   الاسم: --p-<العائلة>[-a<الشفافية>] — مثل --p-brand-a34 = الزيتوني بشفافية ٠٫٣٤.
   البوتيك فاتح فقط (القرار ١٨): لا قيم داكنة بديلة ولا prefers-color-scheme.
   لونٌ جديد يُعرَّف هنا ويُقرأ بـ var(); npm test يرفض لوناً بقيمته في ملف آخر. */
:root{
  --p-080906-a55: rgba(8,9,6,0.55);
  --p-080906-a82: rgba(8,9,6,0.82);
  --p-0a0b08: #0a0b08;
  --p-0c0e09-a58: rgba(12,14,9,0.58);
  --p-11130e: #11130e;
  --p-12140e-a38: rgba(18,20,14,0.38);
  --p-1b2015: #1B2015;
  --p-1c2018-a0: rgba(28,32,24,0);
  --p-1c2018-a62: rgba(28,32,24,.62);
  --p-262b21: #262b21;
  --p-262c21-a62: rgba(38,44,33,0.62);
  --p-2c3325: #2C3325;
  --p-2e3528-a55: rgba(46,53,40,0.55);
  --p-30392b-a18: rgba(48,57,43,0.18);
  --p-30392b-a24: rgba(48,57,43,0.24);
  --p-3a422f: #3A422F;
  --p-46503f-a78: rgba(70,80,63,0.78);
  --p-46503f-a94: rgba(70,80,63,0.94);
  --p-465040-a96: rgba(70,80,64,0.96);
  --p-8fa085: #8FA085;
  --p-black: #000;
  --p-black-a0: rgba(0,0,0,0);
  --p-black-a06: rgba(0,0,0,0.06);
  --p-black-a08: rgba(0,0,0,0.08);
  --p-black-a10: rgba(0,0,0,0.1);
  --p-black-a12: rgba(0,0,0,0.12);
  --p-black-a14: rgba(0,0,0,0.14);
  --p-black-a15: rgba(0,0,0,0.15);
  --p-black-a16: rgba(0,0,0,0.16);
  --p-black-a18: rgba(0,0,0,0.18);
  --p-black-a20: rgba(0,0,0,0.2);
  --p-black-a22: rgba(0,0,0,0.22);
  --p-black-a25: rgba(0,0,0,0.25);
  --p-black-a26: rgba(0,0,0,0.26);
  --p-black-a28: rgba(0,0,0,0.28);
  --p-black-a30: rgba(0,0,0,0.3);
  --p-black-a35: rgba(0,0,0,0.35);
  --p-black-a38: rgba(0,0,0,0.38);
  --p-black-a40: rgba(0,0,0,0.4);
  --p-black-a42: rgba(0,0,0,0.42);
  --p-black-a45: rgba(0,0,0,0.45);
  --p-black-a50: rgba(0,0,0,0.5);
  --p-black-a55: rgba(0,0,0,0.55);
  --p-black-a60: rgba(0,0,0,0.6);
  --p-black-a75: rgba(0,0,0,0.75);
  --p-brand: #535E4D;
  --p-brand-a035: rgba(83,94,77,0.035);
  --p-brand-a05: rgba(83,94,77,0.05);
  --p-brand-a06: rgba(83,94,77,0.06);
  --p-brand-a07: rgba(83,94,77,0.07);
  --p-brand-a08: rgba(83,94,77,0.08);
  --p-brand-a10: rgba(83,94,77,0.10);
  --p-brand-a12: rgba(83,94,77,0.12);
  --p-brand-a13: rgba(83,94,77,0.13);
  --p-brand-a14: rgba(83,94,77,0.14);
  --p-brand-a16: rgba(83,94,77,0.16);
  --p-brand-a18: rgba(83,94,77,0.18);
  --p-brand-a20: rgba(83,94,77,0.20);
  --p-brand-a22: rgba(83,94,77,0.22);
  --p-brand-a26: rgba(83,94,77,0.26);
  --p-brand-a28: rgba(83,94,77,0.28);
  --p-brand-a30: rgba(83,94,77,0.30);
  --p-brand-a32: rgba(83,94,77,0.32);
  --p-brand-a34: rgba(83,94,77,.34);
  --p-brand-a35: rgba(83,94,77,0.35);
  --p-brand-a36: rgba(83,94,77,0.36);
  --p-brand-a42: rgba(83,94,77,0.42);
  --p-brand-a45: rgba(83,94,77,0.45);
  --p-brand-a55: rgba(83,94,77,0.55);
  --p-brand-a62: rgba(83,94,77,0.62);
  --p-brand-a70: rgba(83,94,77,0.70);
  --p-brand-a82: rgba(83,94,77,0.82);
  --p-brand-a88: rgba(83,94,77,0.88);
  --p-brand-a90: rgba(83,94,77,0.9);
  --p-brand-a94: rgba(83,94,77,0.94);
  --p-brand-a97: rgba(83,94,77,0.97);
  --p-brand-deep: #3F4839;
  --p-charcoal-a12: rgba(18,18,16,.12);
  --p-charcoal-a20: rgba(18,18,16,.20);
  --p-charcoal-a52: rgba(18,18,16,.52);
  --p-charcoal-a90: rgba(18,18,16,.90);
  --p-d9b36c: #D9B36C;
  --p-e5a9a2: #E5A9A2;
  --p-e9e5da: #E9E5DA;
  --p-efece3: #EFECE3;
  --p-f4f1e8: #F4F1E8;
  --p-f4f2ec: #F4F2EC;
  --p-f7f1e6: #F7F1E6;
  --p-faf9f6-a94: rgba(250,249,246,0.94);
  --p-faf9f6-a985: rgba(250,249,246,0.985);
  --p-fffdf9: #FFFDF9;
  --p-ink: #1C1C1C;
  --p-ink-a06: rgba(28,28,28,0.06);
  --p-ink-a07: rgba(28,28,28,0.07);
  --p-ink-a08: rgba(28,28,28,0.08);
  --p-ink-a10: rgba(28,28,28,0.10);
  --p-ink-a14: rgba(28,28,28,0.14);
  --p-ink-a22: rgba(28,28,28,0.22);
  --p-ink-a25: rgba(28,28,28,0.25);
  --p-ink-a50: rgba(28,28,28,0.5);
  --p-ink-a55: rgba(28,28,28,0.55);
  --p-ink-a72: rgba(28,28,28,0.72);
  --p-ivory: #F2EEE4;
  --p-ivory-a0: rgba(242,238,228,0);
  --p-ivory-a04: rgba(242,238,228,0.04);
  --p-ivory-a07: rgba(242,238,228,0.07);
  --p-ivory-a08: rgba(242,238,228,0.08);
  --p-ivory-a10: rgba(242,238,228,0.10);
  --p-ivory-a12: rgba(242,238,228,0.12);
  --p-ivory-a14: rgba(242,238,228,0.14);
  --p-ivory-a16: rgba(242,238,228,0.16);
  --p-ivory-a18: rgba(242,238,228,0.18);
  --p-ivory-a22: rgba(242,238,228,0.22);
  --p-ivory-a26: rgba(242,238,228,0.26);
  --p-ivory-a28: rgba(242,238,228,0.28);
  --p-ivory-a30: rgba(242,238,228,0.30);
  --p-ivory-a32: rgba(242,238,228,0.32);
  --p-ivory-a35: rgba(242,238,228,0.35);
  --p-ivory-a40: rgba(242,238,228,0.4);
  --p-ivory-a42: rgba(242,238,228,0.42);
  --p-ivory-a45: rgba(242,238,228,0.45);
  --p-ivory-a50: rgba(242,238,228,0.5);
  --p-ivory-a55: rgba(242,238,228,0.55);
  --p-ivory-a62: rgba(242,238,228,0.62);
  --p-ivory-a70: rgba(242,238,228,0.7);
  --p-ivory-a72: rgba(242,238,228,0.72);
  --p-ivory-a80: rgba(242,238,228,.8);
  --p-ivory-a82: rgba(242,238,228,0.82);
  --p-ivory-a90: rgba(242,238,228,0.9);
  --p-ivory-a92: rgba(242,238,228,0.92);
  --p-ivory-a95: rgba(242,238,228,0.95);
  --p-ivory-a98: rgba(242,238,228,0.98);
  --p-ivory-soft: #F7F4EC;
  --p-ivory-soft-a12: rgba(247,244,236,.12);
  --p-ivory-soft-a22: rgba(247,244,236,.22);
  --p-ivory-soft-a45: rgba(247,244,236,.45);
  --p-ivory-soft-a72: rgba(247,244,236,.72);
  --p-ivory-soft-a90: rgba(247,244,236,.9);
  --p-olive-black-a42: rgba(10,11,7,0.42);
  --p-olive-black-a50: rgba(10,11,7,0.50);
  --p-olive-black-a52: rgba(10,11,7,0.52);
  --p-olive-black-a55: rgba(10,11,7,0.55);
  --p-olive-black-a86: rgba(10,11,7,0.86);
  --p-olive-dark-a10: rgba(28,35,22,0.10);
  --p-olive-dark-a14: rgba(28,35,22,0.14);
  --p-olive-dark-a20: rgba(28,35,22,0.20);
  --p-olive-deep-a16: rgba(20,23,15,0.16);
  --p-olive-deep-a22: rgba(20,23,15,.22);
  --p-olive-deep-a24: rgba(20,23,15,0.24);
  --p-olive-deep-a70: rgba(20,23,15,.70);
  --p-olive-deep-a74: rgba(20,23,15,.74);
  --p-olive-deep-a82: rgba(20,23,15,.82);
  --p-olive-deep-a95: rgba(20,23,15,0.95);
  --p-olive-ink-a55: rgba(15,17,11,0.55);
  --p-olive-ink-a56: rgba(15,17,11,0.56);
  --p-olive-ink-a72: rgba(15,17,11,0.72);
  --p-olive-night-a06: rgba(18,21,14,0.06);
  --p-olive-night-a30: rgba(18,21,14,0.30);
  --p-olive-night-a38: rgba(18,21,14,0.38);
  --p-olive-night-a62: rgba(18,21,14,0.62);
  --p-olive-night-a80: rgba(18,21,14,0.80);
  --p-olive-shade-a0: rgba(20,22,17,0);
  --p-olive-shade-a28: rgba(20,22,17,.28);
  --p-olive-shade-a40: rgba(20,22,17,0.40);
  --p-olive-shade-a42: rgba(20,22,17,0.42);
  --p-olive-shade-a62: rgba(20,22,17,.62);
  --p-olive-shade-a72: rgba(20,22,17,0.72);
  --p-olive-smoke-a10: rgba(24,26,20,.10);
  --p-olive-smoke-a28: rgba(24,26,20,.28);
  --p-olive-smoke-a32: rgba(24,26,20,.32);
  --p-rose: #E4C9C2;
  --p-rose-a12: rgba(228,201,194,0.12);
  --p-rose-a55: rgba(228,201,194,0.55);
  --p-white: #fff;
  --p-white-a03: rgba(255,255,255,0.03);
  --p-white-a04: rgba(255,255,255,0.04);
  --p-white-a05: rgba(255,255,255,0.05);
  --p-white-a06: rgba(255,255,255,0.06);
  --p-white-a08: rgba(255,255,255,0.08);
  --p-white-a10: rgba(255,255,255,0.10);
  --p-white-a14: rgba(255,255,255,0.14);
  --p-white-a16: rgba(255,255,255,0.16);
  --p-white-a18: rgba(255,255,255,0.18);
  --p-white-a20: rgba(255,255,255,0.2);
  --p-white-a22: rgba(255,255,255,0.22);
  --p-white-a25: rgba(255,255,255,0.25);
  --p-white-a30: rgba(255,255,255,0.30);
  --p-white-a32: rgba(255,255,255,0.32);
  --p-white-a35: rgba(255,255,255,0.35);
  --p-white-a45: rgba(255,255,255,0.45);
  --p-white-a50: rgba(255,255,255,0.5);
  --p-white-a55: rgba(255,255,255,0.55);
  --p-white-a62: rgba(255,255,255,0.62);
  --p-white-a65: rgba(255,255,255,0.65);
  --p-white-a72: rgba(255,255,255,0.72);
  --p-white-a90: rgba(255,255,255,0.9);
}
  @font-face{
    font-family:'Cairo';
    src:url('/assets/cairo-light.woff2') format('woff2');
    font-weight:1 450;
    font-style:normal;
    font-display:swap;
  }
  @font-face{
    font-family:'Cairo';
    src:url('/assets/cairo-semibold.woff2') format('woff2');
    font-weight:451 699;
    font-style:normal;
    font-display:swap;
  }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P105 · ٢٠٢٦-٠٨-١٥ — درجةُ تشديدٍ ثالثة حقيقية.

     ⚠️ قبلها: ملفّان ثابتان لا خطٌّ متغيّر، والثاني يغطّي ٤٥١–١٠٠٠ كلّه. فكلّ
        وزنٍ فوق الـ٤٥٠ صورةٌ واحدة على الشاشة — و١٠٠ عنصرٍ كانت تطلب ٧٠٠ و٦٠٠
        و٥٠٠ وتنال الشيء نفسه. فالتراتب بالوزن لم يكن موجوداً أصلاً، وهو سببٌ
        مباشر لانبساط الصفحة الذي رصده المالك.

     ⚠️ ولذلك ضاق مدى شبه العريض إلى ٦٩٩، وصار ٧٠٠ ملفّاً مستقلاً — فالفرق
        بين --w-bold و--w-heavy فرقٌ يُرى لا رقمٌ يُكتب.

     ⚠️ وملفّان لا ملفّ: عربيّ ولاتينيّ بنطاقَي يونيكود منفصلين، فلا يُحمَّل
        اللاتينيّ في صفحةٍ عربيةٍ خالصة. المجموع ٢٩ كيلوبايت لا ٧٠.
     ══════════════════════════════════════════════════════════════════════════════ */
  @font-face{
    font-family:'Cairo';
    src:url('/assets/cairo-bold-ar.woff2') format('woff2');
    font-weight:700 1000;
    font-style:normal;
    font-display:swap;
    unicode-range:U+0600-06FF,U+0750-077F,U+0870-088E,U+0890-0891,U+0897-08E1,U+08E3-08FF,U+200C-200E,U+2010-2011,U+204F,U+2E41,U+FB50-FDFF,U+FE70-FE74,U+FE76-FEFC;
  }
  @font-face{
    font-family:'Cairo';
    src:url('/assets/cairo-bold-latin.woff2') format('woff2');
    font-weight:700 1000;
    font-style:normal;
    font-display:swap;
    unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
  }
  @font-face{
    font-family:'Ciguatera';
    src:url('/assets/ciguatera.woff2') format('woff2');
    font-weight:400;
    font-style:normal;
    font-display:swap;
  }
  :root{
    --bg-light:#FFFFFF;
    --bg-dark:#1C1C1C;
    --ink-light:#1C1C1C;
    --ink-dark:#F2EEE4;
    /* ⚠️ P193 · ٢٠٢٦-٠٩-٢٢ — لون قاع الفوتر، متغيّرٌ لا رقمٌ مكرّر.

       العلّة: آخر ٩٦ بكسل من الصفحة كانت بيضاء، فيبدو الفوتر مقصوصاً.
       السبب: `.bottom-nav-spacer` — حاجزٌ شفاف بارتفاع ٩٦px يلي الفوتر
       ليمنع شريط التنقّل الثابت من تغطية آخر سطر. شفافٌ فوق `body` أبيض
       = شريطٌ أبيض. والشريط الثابت ظاهرٌ على الحاسوب أيضاً (fixed، ٥٠px)،
       فالحاجز مطلوب في المقاسين ولا يُحذف.

       الحلّ: يأخذ الحاجزُ لونَ قاع الفوتر. وحتى لا يتفرّق اللونان يوماً،
       صار اللون متغيّراً واحداً يقرأ منه التدرّج والحاجز معاً — تغييره
       في مكانٍ واحد يحرّك الاثنين. رقمٌ مكرّر في موضعين ينحرف حتماً. */
    --footer-end:#262C20;
    --brand:#535E4D;
    --brand-soft: rgba(83,94,77,0.14);
    --ivory: #F2EEE4;                  /* عاجي — يُستخدم فقط كخلفية شفافة خفيفة خلف كروت المنتجات */
    --ivory-card-bg: rgba(242,238,228,0.55);
    --ivory-card-bg-dark: rgba(242,238,228,0.08);

    /* ⚠️ ٢٠٢٦-٠٧-٢٦ — رموز لونية موحّدة (مسح التوحيد).
       المسح كشف قيماً مكرّرة بنفس المعنى ومكتوبة يدوياً بأماكن متفرقة. تجميعها هون
       بيمنع الانحراف مستقبلاً: أي تعديل بيصير بمكان واحد.
       ⚠️ القيم نفسها ما تغيّرت — فصفر أثر بصري، والمكسب اتساق وصيانة. */
    --danger: #B5443B;              /* أفعال الحذف — اللون التحذيري الوحيد المسموح */
    --surface-dark: #1C1C1C;        /* السطح الداكن الأساسي */
    --surface-dark-2: #161514;      /* سطح داكن ثانوي */
    --ink-on-brand: #12160D;        /* نص فوق الزيتوني الفاتح بالوضع الليلي */

    --font-ar: 'Cairo', -apple-system, BlinkMacSystemFont, "Segoe UI", "Geeza Pro", Tahoma, sans-serif;   /* ⚠️ SF Arabic ممنوع بقرار الخطوط — أُزيل من سلسلة الاحتياط */
    /* ══════════════════════════════════════════════════════════════════════════════
       ⚠️ ٢٠٢٦-٠٧-٢٦ (مراجعة عميقة) — ثلاثة أدوار للخط، مو خط واحد ولا خطّين عشوائيين.

       التحليل الفعلي لملفات الخطوط المضمّنة:
         · Cairo     — ٦٩٩ محرف: ١٠٢ عربي + ٥٨ لاتيني + ١٠ أرقام. وزن متغيّر ١–١٠٠٠.
         · Ciguatera — ١٩٧ محرف: **صفر عربي** + ٥٧ لاتيني + ١٠ أرقام. لاتيني بحت.
       وفحص التغطية: صفر محرف عربي مستخدم بالموقع ناقص من Cairo — يعني ما في احتياط
       (fallback) لخط النظام. فمصدر "تعدّد الخطوط العربية" مو الخط، هو التباعد (تحت).

       الأدوار المعتمدة:
         --font-ar   Cairo      → كل العربي
         --font-en   Ciguatera  → الكلمات اللاتينية والعرض (اسم العلامة، العناوين الإنجليزية)
         --font-num  Cairo      → الأرقام الظاهرة داخل جمل عربية

       ⚠️ ليش الأرقام على Cairo مو Ciguatera: الرقم جوّا جملة عربية جزء من الجملة —
       "30–90 دقيقة" بخط مختلف عن كلمة "دقيقة" يقرأ كأنه لصق من مكان تاني.
       أما "+974 3397 7932" و"WSH SWEET" فسياقهم لاتيني بالكامل، فياخدوا Ciguatera.
       ══════════════════════════════════════════════════════════════════════════════ */
    --font-en: 'Ciguatera', Georgia, "Times New Roman", serif;
    --font-num: 'Cairo', -apple-system, BlinkMacSystemFont, "Segoe UI", Tahoma, sans-serif;

    --glass-bg-on-dark: rgba(255,255,255,0.10);
    --glass-bg-on-light: rgba(28,28,28,0.06);
    --glass-border: rgba(255,255,255,0.28);
    --glass-border-on-light: rgba(28,28,28,0.10);

    --morph-progress: 0;
  }

  *{box-sizing:border-box; margin:0; padding:0;}

  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P84 · ٢٠٢٦-٠٨-١٣ — رفع التباين للنصوص الثانوية (نقد مستخدمين).

     ⚠️ النقد حرفياً: «الخطوط صغيرة وغير واضحة كلون وحجم، ما في تباين بصري،
        وخصوصاً الأسعار والنصوص تحت العناوين التي لونها رمادي».

     ⚠️ والقياس يؤيّده: الحبر ‎#1C1C1C‎ على أرضية ‎#FBFAF7‎ يعطي تبايناً ≈١٦:١،
        لكن كل نصّ ثانوي عندنا كان يُخفَّف بـopacity بين ٠٫٥ و٠٫٦٥ — فينزل
        التباين الفعليّ إلى ≈٦:١ … ٨:١ عند مقاسات ٩٫٥–١٢px. والمعيار يطلب ٤٫٥:١
        للنصّ الصغير، فنحن فوقه رقمياً وتحته إدراكياً: الشفافية تُضعف حدّة الحرف
        العربي أكثر مما تُضعف اللاتيني، لأن تفاصيله أدقّ ووزنه أخفّ.

     ⚠️ العلاج بالرفع لا بالإلغاء: أدنى شفافية صارت ٠٫٧٢ بدل ٠٫٥، وأكثر النصوص
        الثانوية عند ٠٫٧٨. يبقى التدرّج البصري بين الأساسي والثانوي — وهو مقصود
        ولا يُلغى — لكن الثانوي يصير مقروءاً لا باهتاً.

     ⚠️ ومقاسات ما دون ١١px رُفعت إلى ١١px: هذا أدنى مقاس يُقرأ بأمان على الجوّال،
        وما دونه يُقرأ زخرفةً لا معلومة.

     ⚠️ والأسعار خُصّت بمعالجة أقوى (أدناه) لأنها المعلومة التي يبحث عنها الزائر،
        وكانت بلون العلامة الزيتوني على أرضية عاجية — تباينه ≈٥٫٣:١ وهو أضعف من
        الحبر بثلاثة أضعاف.
     ══════════════════════════════════════════════════════════════════════════════ */
  .pt-sub{ opacity:.78 !important; font-size:var(--t-xs) !important; }
  .feature-row-sub,
  .cart-inline-note,
  .gift-card-summary-meta,
  .more-row-label small,
  .cart-upsell-price,
  .browse-fallback-note,
  .discover-empty,
  .occ-card-note,
  .occ-card-kick,
  .cart-item-price{ opacity:.78 !important; }
  .composer-counter,
  .gift-card-preview-qr span,
  .cart-empty{ opacity:.72 !important; }
  .occ-card-note{ font-size:var(--t-xs) !important; }
  .occ-card-kick{ font-size:var(--t-micro) !important; }
  .cart-upsell-price{ font-size:var(--t-xs) !important; }
  .more-row-label small,
  .feature-row-sub{ font-size:var(--t-xs) !important; }

  /* ⚠️ الأسعار: الحبر الكامل بدل الزيتوني، ووزن أثقل ومقاس أكبر. اللون الزيتوني
     يخدم العناوين على الأرضية العاجية، ولا يخدم رقماً صغيراً يُقرأ لمحاً. */
  .product-price,
  .browse-product-price,
  .gb-product-price,
  .pd-related-card-price,
  .recommended-card-price{
    color:var(--ink-light) !important;
    font-weight:600 !important;
  }
  .product-price{ font-size:var(--t-sm) !important; }
  .browse-product-price,
  .gb-product-price,
  .pd-related-card-price{ font-size:var(--t-sm) !important; }


  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٢٦ (السبب الثاني لـ"أكثر من نوع خط عربي") — عناصر النماذج لا ترث الخط.

     قاعدة أساسية بالمتصفحات: button و input و select و textarea **ما بترث**
     font-family من الأب. المتصفح بيفرض عليها خط واجهة النظام. وعلى الآيفون خط الواجهة
     العربي هو SF Arabic — شكله مختلف تماماً عن Cairo.

     النتيجة: كل نص عربي جوّا زر كان يُعرض بخط النظام مو بخط الموقع. والموقع فيه
     **264 زر**، وكان في 7 قواعد متفرقة بس تصلّح المشكلة يدوياً — يعني الأغلبية الساحقة
     كانت بخط غلط: "تعرّف علينا أكثر" · بانر "لا تعرف ماذا تختار؟" · أزرار السلة
     والاستوديوهات وكل زر تاني.

     ⚠️ font-family فقط — بدون font-size ولا font-weight. تغييرهم كان بيقلب مقاسات
     أزرار كتير تعتمد على قيمها الصريحة، والمشكلة أصلاً بالخط مو بالمقاس.
     ⚠️ هاي القاعدة تُكتب مرة وحدة وتغطي أي زر جديد مستقبلاً — فما نرجع نصلّح يدوياً.
     ══════════════════════════════════════════════════════════════════════════════ */
  button, input, select, textarea, optgroup{
    font-family:inherit;
  }

  h1,h2,h3,h4{ font-weight:var(--w-bold); }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P81 · ٢٠٢٦-٠٨-١٣ — قصّ الفيض الأفقي عند الجذر لا عند الجسم وحده.

     ⚠️ رصد المالك: الصفحة تظهر على أندرويد وهواوي بعمودٍ أبيض على اليسار
        والمحتوى مزاح إلى اليمين — بينما هي سليمة على الكمبيوتر و iPhone.

     ⚠️ السبب: كان overflow-x:hidden مكتوباً على body وحده دون html. وهذا في
        صفحة RTL يجعل **body** حاوية تمرير أفقي بدل أن يُقصّ الفيض عند الجذر.
        وفي RTL يبدأ أصل التمرير من اليمين، فأي عنصر يتجاوز العرض بجزء من
        البكسل يوسّع صندوق body، وتُحسب الأبعاد النسبية على عرض المستند لا على
        عرض الشاشة — فينزاح المحتوى ويظهر عمودٌ فارغ من الجهة المقابلة.
        و Chromium على أندرويد يحسم هذا التعارض بغير ما يحسمه WebKit، ولهذا
        بقيت الصفحة سليمة على iPhone ومكسورة على أندرويد.

     ⚠️ العلاج القياسي لصفحات RTL: القصّ على html و body معاً، مع تثبيت العرض
        عند ١٠٠٪ حتى لا يوسّعه ابنٌ فائض أصلاً. فالجذر يقصّ، ولا يصير أيٌّ منهما
        حاوية تمرير أفقي، ويبقى الحساب على عرض الشاشة في المتصفحات كلّها.

     ⚠️ ولا يمسّ التمرير العمودي: القصّ أفقيّ وحده، و overflow-y يبقى تلقائياً.

     ⚠️ وهذا تشخيصٌ له آليّة معلومة لا تخمين: الفارق بين المحرّكين في هذه الحالة
        بعينها موثّق، ويطابق وصف المالك «مستقرّة على الكمبيوتر والآيفون» حرفاً.
     ══════════════════════════════════════════════════════════════════════════════ */
  html{
    scroll-behavior:smooth;
    overflow-x:hidden;
    width:100%;
    max-width:100%;
  }
  body{
    font-family:var(--font-ar);
    background:var(--bg-light);
    color:var(--ink-light);
    overflow-x:hidden;
    width:100%;
    max-width:100%;
    transition:background .4s ease, color .4s ease;
  }
  body.lang-en{
    font-family:var(--font-en);
  }
  body.lang-en .product-name,
  body.lang-en .occasion-label,
  body.lang-en h1, body.lang-en h2, body.lang-en h3, body.lang-en h4{
    font-family:var(--font-en);
  }
  /* ⚠️ ٢٠٢٦-٠٧-٢٦: .num انفصلت عن .lat — الأرقام داخل الجمل العربية على Cairo،
     والنصوص اللاتينية على Ciguatera. الوظيفة المشتركة (عزل الاتجاه) محفوظة للاثنين. */
  [lang="en"], .lat{
    font-family:var(--font-en);
    direction:ltr;
    unicode-bidi:isolate;
  }
  .num{
    font-family:var(--font-num);
    direction:ltr;
    unicode-bidi:isolate;
  }

  /* ============ الشعار العائم الصغير (ثابت دائماً) ============ */
  .logo-crystal{
    position:fixed;
    top:calc(20px + env(safe-area-inset-top));
    left:50%;
    transform:translateX(-50%);
    width:52px;
    height:52px;
    border-radius:50%;
    display:flex;
    align-items:center;
    justify-content:center;
    z-index:80;
    backdrop-filter:blur(18px) saturate(160%);
    -webkit-backdrop-filter:blur(18px) saturate(160%);
    background:var(--glass-bg-on-dark);
    border:1px solid var(--glass-border);
    box-shadow:none;
    filter:drop-shadow(0 8px 16px var(--p-black-a18));
    transition:opacity .15s linear;
  }
  .logo-crystal svg{ width:24px; height:auto; display:block; }
  /* خلفية داكنة ثابتة دائماً لضمان وضوح الشعار الكريمي، لأنه يظهر فقط فوق الـ Hero الداكن ويختفي بعده */
  .logo-crystal{
    background:var(--p-12140e-a38);
    border-color:var(--p-white-a25);
  }

  /* ============ ورقة "المزيد" (نفس نمط ورقة تفاصيل المنتج الزجاجية) ============ */
  /* ⚠️ P94 — العنوان أثقل وأوضح: ١٧px بوزن ٦٠٠ وتباعد حرفيّ سالب خفيف، وهو
     نمط عناوين الأوراق في iOS. وحدٌّ سفليّ رفيع يفصل الترويسة عن محتواها —
     في المرجع فاصلٌ حقيقي لا مسافة بيضاء وحدها. */
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P99 · ٢٠٢٦-٠٨-١٥ — قاعدةٌ واحدة لكل ترويسات الأوراق. مصدرٌ واحد لا أربعة.

     ⚠️ سبب تكرار الأخطاء الذي رصده المالك بحقّ: أربع بنى مختلفة لنفس الشيء —
        sheet-title-row (عشرون ورقة) · browse-head-row · cart-header · وثلاث
        أوراق بلا ترويسة أصلاً. فكل إصلاح كنت أطبّقه على بنيةٍ واحدة، ويبقى
        الباقي على حاله — ثم يعود المالك بالملاحظة نفسها. العلّة لم تكن في
        القيم بل في تعدّد المصادر.

     ⚠️ فالمتغيّرات أدناه هي المصدر الوحيد: أي تعديل على مقاس العنوان أو حشو
        الترويسة أو الفاصل يقع هنا مرّة، ويسري على الجميع.

     ⚠️ وموضع ✕: كان معلّقاً بين العنوان وما تحته فلا يُقرأ تابعاً لأيّهما (رصد
        المالك). صار في **صفّ العنوان نفسه** محاذياً له عمودياً — فيُقرأ جزءاً
        من الترويسة، ويأخذ حيّزه من الحشو الأبيض نفسه لا من مساحةٍ إضافية.

     ⚠️ والعنوان ينزل عن المقبض: حشوٌ علويّ ١٠px يفصله عن مقبض السحب فوقه، بدل
        ٢px التي كانت تُلصقه به.
  ══════════════════════════════════════════════════════════════════════════════ */
  :root{
    --sheet-title-size: 17px;
    --sheet-title-weight: 600;
    /* ⚠️ P115 — «المجال المعطى للعنوان يتقلّل ارتفاعه شوي». الترويسة كانت
       تستهلك ٣٦ نقطةً حشواً وفصلاً حول عنوانٍ ارتفاعه ٢٢. صارت ٢٠ — أي ستّ
       عشرة نقطةً تنتقل إلى مساحة العرض بلا مساسٍ بحجم العنوان ولا بزرّه. */
    --sheet-head-pad-top: 6px;
    --sheet-head-pad-bottom: 6px;
    --sheet-head-gap: 8px;
    --sheet-head-border: 1px solid rgba(28,28,28,0.07);
    --sheet-side-col: 44px;   /* ⚠️ P103 — يتبع --icon-44: العمود لا يكون أضيق من زرّه */

    /* ══════════════════════════════════════════════════════════════════════════
       ⚠️ P101 — ارتفاعات الأوراق: مصدرٌ واحد بدل أربعة مواضع.

       ⚠️ سبب الجمع: الارتفاع كان مكتوباً حرفياً في ثلاثة محدِّدات متفرّقة
          (.pd-sheet ٨٠ · ‎#pdSheet‎ ٩٢ · الأربعة ٩٢) بوحدتين مختلفتين، فأيّ
          تعديل يطال بعضها ويترك بعضها — وهو «كل قسم يفتح بنسبة» الذي رصده
          المالك. القيمتان تبقيان قيمتين لأنهما قرار تصميميّ معلَّل، لكن
          مصدرهما صار واحداً.

       ⚠️ ولماذا ‎@supports‎ لا سطران متتاليان: نمط الاحتياط
          ‎height:80vh; height:80dvh‎ يعمل لأن المتصفح يُسقط التصريح المجهول.
          وهذا النمط **ينكسر مع ‎var()‎** لأن المتغيّر يُستبدل وقت الحساب لا وقت
          التحليل، فالتصريح يصير غير صالح ويعود إلى ‎unset‎ بدل أن يُتجاهل.
          فالحارس هنا شرطُ صحّةٍ لا تحسين.
       ══════════════════════════════════════════════════════════════════════════ */
    /* ⚠️ P107 — قرار المالك (١٥ أغسطس): ٩٣٪ لكل الأوراق **بلا استثناء**.
       ينسخ تقسيم P101 (٨٠ قاعدةً و٩٢ استثناءً). والاستثناء المعلَّل لورقة
       المنتج — أن معرضها يحسب ارتفاعه من نسبة الصورة — لم يعُد مبرِّراً:
       الزائر يقرأ التفاوت قبل أن يقرأ سببه، والاتّساق هنا مقدَّمٌ على التعليل.
       فرمزٌ واحد لا رمزان، ومن أراد تغيير النسبة غيّرها هنا وحدها. */
    --sheet-h: 93vh;
    /* ⚠️ P185 — --discover-grid-h لم يعد يُقرأ (سقط الصندوق ذو الارتفاع
       الثابت)، ويبقى معرَّفاً لأن قاعدة dvh أدناه تكتبه ولا ضرر منه. */
    --discover-grid-h: 46vh; /* غير مستعمَل منذ P185 */
  }
  @supports (height: 1dvh){
    :root{
      --sheet-h: 93dvh;
      --discover-grid-h: 46dvh;
    }
  }

  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P102 · ٢٠٢٦-٠٨-١٥ — سلالم القياس: مصدرٌ واحد بدل قيمٍ مكتوبة يدوياً.

     ⚠️ الحالة قبل: ٣٥ مقاس خطّ مختلفاً (منها أحد عشر بنصف بكسل) و١٦ استدارة
        و٦ أوزان — أي ٥٧ قيمة تصميمية لعناصر متشابهة. وأنصاف البكسل بصمةُ
        تقديرٍ بالعين لا قرارِ سلّم، فأيّ عنصرين متشابهين يفترقان بلا سبب.

     ⚠️ والوزن حالةٌ خاصّة تستحقّ التصريح: Cairo هنا ملفّان **ثابتان** لا خطّ
        متغيّر (لا محور fvar في أيٍّ منهما — light عند ٣٠٠ و semibold عند ٦٠٠).
        و@font-face يمنح الأول المدى ١–٤٥٠ والثاني ٤٥١–١٠٠٠. فكلّ وزنٍ فوق
        الـ٤٥٠ يُصيّر بنفس الملفّ حرفياً: ٧٠٠ و٦٠٠ و٥٠٠ صورةٌ واحدة على الشاشة.
        أي أن مئة عنصرٍ كانت تدّعي درجتَي تشديد وهي درجةٌ واحدة — وهذا سببٌ
        مباشر لانبساط التراتب. فالدمج هنا **صفر أثرٍ بصريّ** ويُظهر الحقيقة في
        الكود بدل أن يخفيها. ولو أُريدت درجةُ تشديدٍ ثالثة حقيقية فطريقها ملفّ
        Cairo Bold ثالث لا رقمٌ أكبر في CSS.
     ══════════════════════════════════════════════════════════════════════════════ */
  :root{
    /* الخطّ — ثمانِ درجات. ما فوق ٤٠px زخرفيٌّ (أرقام البلورة) ويبقى خارج السلّم */
    --t-micro: 9px;    /* لصاقات دقيقة وعدّادات — لاتينية أو رقمية فقط */
    --t-xs:   11px;
    --t-sm:   13px;    /* النصّ الأساسي */
    --t-base: 15px;
    --t-md:   17px;    /* عناوين الأوراق */
    --t-lg:   19px;
    --t-xl:   23px;
    --t-2xl:  28px;

    /* الاستدارة — خمس درجات وكبسولة */
    --r-xs:    4px;
    --r-sm:   12px;
    --r-md:   16px;
    --r-lg:   22px;
    --r-xl:   28px;    /* رأس الورقة */
    --r-full: 999px;

    /* الوزن — درجتان لأن الملفّين درجتان */
    --w-normal: 400;
    --w-bold:   600;
    --w-heavy:  700;   /* ⚠️ P105 — ملفٌّ مستقلّ لا رقمٌ أكبر: فرقُه يُرى */

    /* ════════════════════════════════════════════════════════════════════════
       ⚠️ P103 — الأزرار الدائرية: ثلاثَ عشرةَ مقاساً على مفهومٍ واحد.

       ⚠️ ٤٤ ليست ذوقاً: هي أدنى هدفِ لمسٍ يُعتمد على الجوّال، وهي مقاس زرّي
          الإغلاق والرجوع في المرجع الذي اختاره المالك. وزرّ الإغلاق كان ٣٢
          بصرياً ورقعتُه ٤٦ عبر ‎::after‎ — أي أن الهدف كان صحيحاً والشكل
          يكذّبه، فيبدو الزرّ أصغر من أن يُضغط ويُضغط. فصار الشكل هو الهدف.
       ════════════════════════════════════════════════════════════════════════ */
    --icon-24: 24px;   /* أيقونة صامتة بلا حاوية */
    --icon-32: 32px;   /* تحكّمٌ داخل بطاقة أو صفّ */
    --icon-44: 44px;   /* كروم الأوراق وكل هدفِ لمسٍ أساسيّ */
    --icon-56: 56px;   /* وسائط — تشغيل وأيقونات الحالة */

    /* ════════════════════════════════════════════════════════════════════════
       ⚠️ P104 — المسافات: ثمانٍ وعشرون قيمة على ثلاث خصائص متقاربة المعنى
          (حشو وهامش وفجوة). والعين لا تقرأ الأرقام لكنها تقرأ غياب الخطّ
          المستقيم — وهو ما رصده المالك حين قال «ما في تفاصيل ثابتة».

       ⚠️ التعادل يرفع لا يخفض: الطابع المعتمد فاخرٌ هادئ، والفخامة تنفّسٌ
          لا ضغط. وحدّ الحركة ٣px فما تجاوزه تُرك حرفياً بدل أن يُقسر.
          والسالب متروكٌ كلّه: هو غالباً مرآةُ حشوٍ في حاوٍ، وكسرُه يكسر
          محاذاةً لا يوحّد مسافة.
       ════════════════════════════════════════════════════════════════════════ */
    --s-1:   2px;
    --s-2:   4px;
    --s-3:   8px;
    --s-4:  12px;
    --s-5:  16px;   /* الهامش الجانبي المعتمد */
    --s-6:  20px;
    --s-7:  24px;
    --s-8:  32px;
    --s-9:  40px;
    --s-10: 48px;
    --s-11: 56px;
    --s-12: 72px;
    --s-13: 120px;

    /* ════════════════════════════════════════════════════════════════════════
       ⚠️ P109 — البطاقة: مفهومٌ واحد كان له ستّ صور.

       ⚠️ الحالة قبل: أربع بطاقات منتجٍ تعرض الشيء نفسه (صورة · اسم · سعر) وكلٌّ
          لها سطحُها وعرضُها ومقاسُ نصّها: استدارة ٢٢ في واحدة و١٦ في ثلاث،
          وعرضٌ ١٠٤ و١٥٢ و١٧٤، واسمٌ بمقاسين وسعرٌ بلونين. فيقرأ الزائر أربعة
          منتجاتٍ بأربع لغاتٍ بصرية في جلسةٍ واحدة.

       ⚠️ والعرض رمزٌ يتدرّج لا رقمٌ ثابت: البطاقة في شريطٍ أفقي تحتاج عرضاً
          يناسب الشاشة، فالتدرّج يبقى والتفاوت بين البطاقات يزول.
       ════════════════════════════════════════════════════════════════════════ */
    /* ⚠️ P111 — العرض حسابٌ لا ذوق. صفُّ الأزرار حين يظهر العدّاد يحمل:
       عدّاد + هدية ٣٢ + قلب ٢٤ + فجوتين ٨ = العدّاد + ٦٤. والعدّاد المضغوط
       ٧٨ تقريباً، فالمجموع ١٤٢. وحشو البطاقة ٢٤. فأدنى عرضٍ لا يُقصّ فيه شيء
       ١٦٦ — و١٥٢ التي وضعناها في P109 كانت دون ذلك بأربع عشرة، فكان آخر زرّ
       في اتجاه القراءة (القلب يساراً) يُقصّ عند الإضافة. */
    --card-w: 174px;        /* الجوّال */
    --card-radius: var(--r-md);
    /* ══════════════════════════════════════════════════════════════════════
       ⚠️ P113 — الصورة: نسبةٌ مقيسة، وسلوكان لا سلوكٌ واحد.

       ⚠️ النسبة قِيست من لقطةِ المالك نفسها لا خُمِّنت: الصورة معروضةً بـcontain
          داخل إطارٍ مربّع ظهرت ٨٨٧×١١٠٤ بكسل = ٠٫٨٠٣ — أي ٤:٥ حرفياً. فصورُ
          المنتجات طوليّة، وتحويلي الإطار إلى مربّع في P110 هو ما صغّرها وأحاطها
          بالفراغ. عادت النسبة إلى ما كانت عليه قبل تدخّلي.

       ⚠️ والسلوكان: البطاقة تملأ إطارها من حافةٍ إلى حافّة (cover) لأنها واجهةٌ
          مصغّرة يُقرأ منها المنتج لمحةً، والمعرضُ داخل الورقة يُظهر الصورة
          كاملةً (contain) لأنه موضع التفحّص. وتعميمي contain على الاثنين في
          P111 هو ما أحدث الحواف البيضاء على البطاقات.
       ══════════════════════════════════════════════════════════════════════ */
    --card-img-ratio: 4/5;
    --card-img-fit: cover;      /* البطاقات: ملءٌ كامل */
    --gallery-img-fit: contain; /* المعرض: إظهارٌ كامل */
  }
  @media (max-width: 380px){ :root{ --card-w: 166px; } }   /* أدنى عرضٍ لا يُقصّ فيه الصفّ */
  @media (min-width: 768px){ :root{ --card-w: 200px; } }
  @media (min-width: 1200px){ :root{ --card-w: 224px; } }
  .more-sheet-title{
    font-size:var(--sheet-title-size);
    font-weight:var(--sheet-title-weight);
    letter-spacing:-0.01em;
    padding:var(--sheet-head-pad-top) 20px var(--sheet-head-pad-bottom);
    border-bottom:var(--sheet-head-border);
    margin-bottom:var(--sheet-head-gap);
  }
  .more-row{
    display:flex; align-items:center; justify-content:space-between;
    padding:var(--s-5) var(--s-6);
    border-top:1px solid var(--p-black-a08);
    background:none; border-inline:none; border-bottom:none;
    width:100%; text-align:start; font-size:var(--t-sm); color:inherit; cursor:pointer;
  }
  .more-row-label{ display:flex; flex-direction:column; gap:var(--s-1); }
  .more-row-label small{ font-size:var(--t-xs); opacity:.6; font-weight:var(--w-normal); }
  .more-row-value{ font-size:var(--t-sm); opacity:.7; }

  .toggle-switch{
    width:46px; height:28px; border-radius:var(--r-full);
    background:var(--p-black-a15);
    position:relative; flex:0 0 auto;
    transition:background .2s ease;
  }
  .toggle-switch::after{
    content:"";
    position:absolute; top:3px; inset-inline-start:3px;
    width:22px; height:22px; border-radius:50%;
    background:var(--p-white);
    box-shadow:0 1px 3px var(--p-black-a30);
    transition:transform .2s ease;
  }
  .toggle-switch.on{ background:var(--brand,var(--p-brand)); }
  .toggle-switch.on::after{ transform:translateX(18px); }
  html[dir="rtl"] .toggle-switch.on::after{ transform:translateX(-18px); }

  /* ============ السلة + تدفق الشراء ============ */
  .cart-sheet .pd-scroll{ padding:0 20px 28px; }
  #giftCardSheet .pd-scroll, #suggestSheet .pd-scroll, #boxWritingSheet .pd-scroll,
  #moreSheet .pd-scroll, #distributionSheet .pd-scroll, #customDesignSheet .pd-scroll,
  #cakeBuilderSheet .pd-scroll, #occasionsSheet .pd-scroll, #giftHistorySheet .pd-scroll,
  #browseSheet .pd-scroll, #discoverSheet .pd-scroll, #giftBuilderSheet .pd-scroll{ padding:0 20px 28px; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P85 · ٢٠٢٦-٠٨-١٣ — الشريط يختفي أثناء إتمام الطلب (قرار المالك).

     ⚠️ تاريخ هذا السطر تبدّل ثلاث مرات بطلب المالك: P70 رفعه فوق الأوراق،
        و P73 رجع عنه، و P74 أعاده بخلوص محسوب. واليوم يختفي في السلة وحدها.

     ⚠️ والقرار لا يناقض ما قبله: الشريط تنقّلٌ بين أقسام المتجر، وإتمام الطلب
        ليس قسماً بل مساراً له مخرج واحد. فحضوره في التصفّح مكسب، وحضوره في
        الدفع خمسة أبواب للخروج من مسارٍ نريد إتمامه.

     ⚠️ ومحصور في ورقة السلة (body.cart-open) — بقيّة الأوراق تبقى بشريطها.
     ⚠️ ويعود خلوصها السفلي إلى صفر، فلا تبقى فجوة بيضاء مكان شريطٍ غائب.

     ⚠️ P74 — خلوص الشريط السفلي، على الورقة لا على محتواها.

     ⚠️ القيمة = ارتفاع الشريط (٥٦) + إزاحته (٢) + هامش تنفّس (١٢) + منطقة الأمان.
     ⚠️ وعلى .pd-sheet لا .pd-scroll: الورقة صندوق عمودي، فالحشو عليها يرفع كل
        ما بداخلها معاً — منطقة التمرير وأزرارها وحافّة الورقة. وحشوٌ على الابن
        وحده كان يترك حافّة الأب مغطّاة، وهي علّة P70 التي رصدها المالك.
     ⚠️ وخلفية الورقة تمتدّ تحت الشريط بقصد: الشريط يطفو على حافّتها فيُقرأ
        عائماً فوقها لا قاطعاً لها. */
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P116 — الفراغ بين صفّ الأزرار وشريط التنقّل (رصد المالك بدائرةٍ حمراء).

     ⚠️ الحساب لا التقدير: الشريط يشغل من أسفل الشاشة ٥٠ نقطة —
        إزاحته السفلية ٢ + حشوه ٤×٢ + ارتفاع عنصره ٤٠.
        وكان المحجوز ٧٠، فيبقى فوقه ٢٠ فراغاً ميتاً، يُضاف إليه الحشو السفليّ
        لصفّ الأزرار ١٢ = **٣٢ نقطة** هي ما رآه المالك.

     ⚠️ الآن المحجوز ٥٨: يبقى فوق الشريط ٨ نقاطٍ خلوصاً — موجبٌ فلا يختفي شيء
        خلفه — والحشو السفليّ ٤. فالفراغ **١٢ نقطة** بدل ٣٢، أي أقلّ من النصف
        كما طلب. والخلوص محسوبٌ في الفحص فيسقط إن صار سالباً يوماً.
     ══════════════════════════════════════════════════════════════════════════════ */
  :root{ --bn-clear: calc(58px + env(safe-area-inset-bottom)); }
  .pd-sheet.pd-sheet{ padding-bottom:var(--bn-clear); }
  /* ⚠️ P87 · ٢٠٢٦-٠٨-١٣ — !important لازمة هنا، وليست كسلاً.

     ⚠️ العطل الذي رصده المالك: «الشريط ظاهر بس مو متفاعل». والسبب أن حلقة
        التحوّل مع التمرير تكتب bottomNav.style.opacity سطرياً في كل إطار،
        والسطري يغلب قاعدة الصنف مهما كانت أسبقيّتها. فطُبّق pointer-events
        وحده (لا يكتبه الجافاسكربت منذ P63) وسقطت العتامة والإزاحة — فبقي
        الشريط مرئياً وميّتاً معاً، وهو أسوأ من بقائه عاملاً.

     ⚠️ ولم نعالجها بمنع الجافاسكربت من الكتابة: الحلقة تعمل في كل إطار ولا
        تعرف بالأوراق، وإضافة شرطٍ لها يربط حلقة الأداء بحالة السلة. فالقاعدة
        هنا هي الموضع الصحيح للحسم. */
  body.cart-open .bottom-nav{
    opacity:0 !important;
    pointer-events:none !important;
    transform:translateX(-50%) translateY(130%) !important;
    transition:opacity .2s ease, transform .28s cubic-bezier(.32,.72,0,1);
  }
  /* ⚠️ P97 — عند الفوتر: يختفي بصرياً ويبقى **قابلاً للضغط** لو عاد.
     ولا pointer-events هنا بقصد — مشروح عند المراقب في الجافاسكربت. */
  body.at-footer:not(.cart-open) .bottom-nav{
    opacity:0 !important;
    transform:translateX(-50%) translateY(130%) !important;
    transition:opacity .25s ease, transform .3s cubic-bezier(.32,.72,0,1);
  }
  body.cart-open #cartSheet.pd-sheet.pd-sheet{ padding-bottom:0; }
  /* ⚠️ وتدفّق «شاهد» بملء الشاشة: الخلوص على شريط المحتوى السفلي وحده، لا على
     حاوية التمرير. الحاوية شرائح بارتفاع ١٠٠٪ مع scroll-snap إجباري، وحشوها
     يزيح نقاط الالتقاط فتقف الشريحة مائلة — علاجٌ يُنتج عطلاً أوضح من علّته. */
  /* ⚠️ محدِّد أرفع (.reels-feed قبله) بقصد: القاعدة الأساس لهذا الصنف تأتي
     لاحقاً في الملف، ولو تساوى المحدِّدان لغلبها الترتيب — نفس علّة P59. */
  .reels-feed .reels-feed-bottom{ padding-bottom:var(--bn-clear); }
  /* هاي الأوراق بتنفتح من جوا ورقة السلة نفسها — لازم تكون فوقها دايماً بشكل مضمون،
     بغض النظر عن ترتيبها بالـ DOM (بدل الاعتماد الضمني على تعادل z-index) */
  #giftCardBackdrop, #suggestBackdrop, #boxWritingBackdrop{ z-index:160; }
  #giftCardSheet, #suggestSheet, #boxWritingSheet{ z-index:161; }
  /* تفاصيل المنتج (pdSheet) لازم تطلع دايماً فوق أي ورقة تانية بدون استثناء — بما فيها
     مناسباتي/حسابي/سجل الهدايا — بغض النظر من وين انفتحت (إصلاح باج: كانت بتعتمد ضمنياً
     على ترتيب DOM بدل z-index صريح، فكانت أحياناً تطلع تحت الورقة الأم) */
  #pdBackdrop{ z-index:170; }
  #pdSheet{ z-index:171; }
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — خلل حقيقي: "ابني هديتك" و"صمم كيكتك" كانوا يفتحوا **خلف** ورقة
     المنتج، لأن ورقة المنتج عندها z-index:171 (مرفوعة بقصد فوق كل شي) والاستوديوهات
     على القيمة الافتراضية 151. والاثنان يُفتحوا **من جوّا** ورقة المنتج — يعني هما
     خطوة للأمام، فلازم يكونوا فوقها دايماً. */
  #giftBuilderBackdrop, #cakeBuilderBackdrop{ z-index:180; }
  #giftBuilderSheet, #cakeBuilderSheet{ z-index:181; }

  /* ============ ورقة "حسابي" — عرض شبه كامل الشاشة، وكل الشاشات الفرعية (مناسباتي/سجل الهدايا)
     مكدسة جواها بنفس الترتيب، تتنقل بنفس التنقل التدريجي ============ */
  /* ⚠️ P107 — حُذفت هنا قاعدةُ ارتفاعٍ خاصّة بهذه الأربع. صارت تكراراً حرفياً
     للقاعدة الأساسية بعد توحيد ٩٣٪، وبقاؤها يُبقي فخَّ الأولوية الذي أنتج
     التفاوت أصلاً: محدِّدٌ بمعرّف يغلب محدِّداً بصنف، فيظنّ من يعدّل القاعدة
     أنه عدّل الكلّ وقد ترك أربعاً. المصدر واحدٌ الآن: .pd-sheet وحدها. */
  /* ⚠️ P99 — بنيتها من القاعدة الموحّدة؛ لا تحمل هنا إلا إلغاء الحشو الجانبي
     لأنها داخل .pd-scroll الذي يحمل حشوه الخاصّ. */
  .acct-header{ padding-inline:0; }
  .acct-header > .acct-header-title{
    grid-column:2; grid-row:1; text-align:center; min-width:0;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  }
  .acct-header > .sheet-close-btn{ grid-column:1; grid-row:1; justify-self:start; }
  .acct-header-title{ font-size:var(--t-base); font-weight:var(--w-bold); }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P95 · ٢٠٢٦-٠٨-١٤ — العنوان وسطاً والمرحلة **تحته** (قرار المالك).

     ⚠️ كانت المرحلة بجانب العنوان على السطر نفسه، فتُقرأ امتداداً للاسم
        («السلة الخطوة ١ من ٣») وتزيح العنوان عن المنتصف. وهي معلومة تابعة
        لا نظيرة، فموضعها تحته لا بجانبه.

     ⚠️ عمود لا صفّ: العنوان أولاً ثم المرحلة سطراً ثانياً أصغر وأخفت — فيتوسّط
        العنوان توسّطاً حقيقياً مهما طال نصّ المرحلة أو قصر.

     ⚠️ وفاصلٌ سفليّ كما في بقيّة الأوراق (P94): كانت السلة الوحيدة بلا فاصل
        بعد التوحيد، لأنها لا تستعمل sheet-title-row بل ترويسةً خاصّة بها.
     ══════════════════════════════════════════════════════════════════════════════ */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P99 — هذه الكتلة تقع **بعد** القاعدة الموحّدة في الملف، فتغلبها بالترتيب
        لو أعادت تعريف display. ولهذا لا تحمل إلا ما يخصّ السلة وحدها: الموضع
        النسبي لزرّ الرجوع المعلّق، والحشو والفاصل بالمتغيّرات المشتركة.
     ⚠️ وكتلة .cart-header مكرّرة في هذا الملف — وهي التي أوقعتني في P95 حين
        عدّلتُ النسخة غير المستعملة فمرّ التغيير صامتاً. فلا يُكتب هنا شيء
        تحمله القاعدة الموحّدة.
     ══════════════════════════════════════════════════════════════════════════ */
  .cart-header{
    position:relative;
    row-gap:var(--s-1);
    padding:var(--sheet-head-pad-top) 20px var(--sheet-head-pad-bottom);
    border-bottom:var(--sheet-head-border);
    margin-bottom:var(--sheet-head-gap);
  }
  .cart-header-spacer{ display:none; }
  /* ⚠️ P95 — يبقى معلّقاً بأعلى الترويسة لا متوسّطاً معها بعد أن صارت عموداً. */
  .cart-back-btn{
    /* ⚠️ P118 — دخل عقد الترويسة بدل الموضع المطلق: عمود الرجوع (يسارٌ في RTL)
       كما في ورقة المنتج، فصار الإغلاق يميناً والرجوع يساراً في كل الأوراق. */
    width:var(--icon-44); height:var(--icon-44);
    display:flex; align-items:center; justify-content:center;
    border-radius:50%; background:var(--p-black-a06); color:inherit; cursor:pointer;
  }
  .cart-back-btn[hidden]{ display:none; }
  /* ⚠️ P114 — «زرّ الرجوع بالسلة بعده على حاله». كان خارج عقد الترويسة: أيقونته
     بلا مقاس فتُرسم بحجمها الطبيعي أكبر من كلّ أيقونات الترويسات، وموضعه عند
     top:0 بينما محتوى الترويسة يبدأ بعد حشوها. فصار بمقاس إخوته وموضعهم. */
  .cart-back-btn svg{ width:15px; height:15px; display:block; }
  /* ⚠️ P95 — أُلغي: كان يوازن العنوان في صفٍّ أفقي، والترويسة صارت عموداً. */

  .cart-items{ display:flex; flex-direction:column; gap:var(--s-4); margin-bottom:var(--s-4); }
  .cart-item{
    /* ⚠️ P113 — «قلّل الهوامش والارتفاع حتى يقلّ التمرير». الحشو من ١٢ إلى ٨،
       والفجوة الداخلية من ١٦ إلى ١٢، والصورة من ٧٢ إلى ٦٤ — والكتلة تقصر
       بمقدار ستّة عشر بكسلاً تقريباً لكلّ صنف بلا مساسٍ بمقروئية شيء. */
    display:flex; gap:var(--s-4); align-items:center;
    padding:var(--s-3); border-radius:var(--r-md); border:1px solid var(--p-black-a08);
  }
  .cart-item-img{
    width:64px; height:64px; border-radius:var(--r-md); overflow:hidden; flex:0 0 auto;
    background:var(--ivory-card-bg);
  }
  .cart-item-img img{ width:100%; height:100%; object-fit:cover; display:block; }
  .cart-item-info{ flex:1; min-width:0; }
  .cart-item-name{ font-size:var(--t-sm); font-weight:var(--w-bold); margin-bottom:var(--s-1); }
  .cart-item-price{ font-size:var(--t-sm); opacity:.65; margin-bottom:var(--s-3); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P91 · ٢٠٢٦-٠٨-١٤ — أزرار الكمية في السلة (رصد المالك).

     ⚠️ ثلاثة أعطال حقيقية لا تصميم ذوقي:
        · العدد بينهما بخط Ciguatera (زخرفي لاتيني للعناوين) بينما السعر تحت
          المنتج بخط Cairo (var(--font-num)) — خطّان مختلفان فعلاً لرقمين
          متجاورين في نفس البطاقة.
        · الرمزان +/− بوزن عادي لا بولد، فيبدوان خافتين داخل دائرة ٢٨px.
        · والدائرة صغيرة نسبياً لعنصر يُضغط بالإصبع على الجوّال.

     ⚠️ العلاج: خط الرقم صار var(--font-num) مطابقاً للسعر تماماً، والرمزان
        بولد (700)، والدائرة ٣٢px بدل ٢٨ — وحدٌ أدنى مريح للمس دون أن تكبر
        عن حجم بطاقة السلة.
     ══════════════════════════════════════════════════════════════════════════ */
  .cart-item-qty-row{
    /* ⚠️ P113 — «طابق الشكل». كان قرصين محدَّدين منفصلين بينما العدّاد في
       البطاقة والورقة كبسولةٌ واحدة — عنصرٌ واحد بشكلين. صار كبسولةً مثلهما:
       حدٌّ واحد يحيط الإشارتين والرقم، وارتفاعُ درجةِ السلّم نفسها. */
    display:inline-flex; align-items:center; gap:var(--s-1);
    height:var(--icon-32); padding-inline:var(--s-2);
    border:1px solid var(--brand); border-radius:var(--r-full);
    color:var(--brand); box-sizing:border-box; align-self:flex-start;
  }
  .cart-item-qty-btn{
    width:var(--icon-24); height:var(--icon-24); border-radius:50%; flex:0 0 auto;
    border:none; background:none; color:var(--brand);
    font-size:var(--t-base); font-weight:var(--w-bold); line-height:1; padding:0;
    display:flex; align-items:center; justify-content:center; cursor:pointer;
  }
  .cart-item-qty-value{
     direction:ltr; unicode-bidi:isolate;
    min-width:14px; text-align:center; font-size:var(--t-sm); font-weight:var(--w-bold);
   color:var(--brand);}
  .cart-item-remove{
    width:var(--icon-24); height:var(--icon-24); border-radius:50%; flex:0 0 auto;
    display:flex; align-items:center; justify-content:center;
    color:inherit; opacity:.5; cursor:pointer;
  }
  .cart-item-remove svg{ width:14px; height:14px; }

  .cart-empty{ text-align:center; padding:var(--s-8) 0; opacity:.6; font-size:var(--t-sm); }

  .cart-summary-row{
    display:flex; justify-content:space-between; align-items:center;
    padding:var(--s-5) 0; border-top:1px solid var(--p-black-a08); font-size:var(--t-sm); font-weight:var(--w-bold);
  }

  .cart-upsell-section{ margin-top:var(--s-6); }
  .cart-upsell-section[hidden]{ display:none; }
  .cart-upsell-title{ font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.7; margin-bottom:var(--s-4); }
  .cart-upsell-row{ display:flex; gap:var(--s-4); overflow-x:auto; scrollbar-width:none; padding-bottom:var(--s-1); }
  .cart-upsell-row::-webkit-scrollbar{ display:none; }
  .cart-upsell-card{
    flex:0 0 auto; width:104px; display:flex; flex-direction:column; align-items:center; gap:var(--s-2);
    padding:var(--s-5) var(--s-4); border-radius:var(--r-md); border:1px dashed var(--p-black-a16);
    background:none; color:inherit; cursor:pointer; text-align:center;
  }
  .cart-upsell-card.added{ border-style:solid; border-color:var(--brand); background:var(--p-brand-a07); }
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — تفضيلات الإضافة: تظهر بس لما تنختار الإضافة */
  .upsell-prefs{ margin-top:var(--s-4); display:flex; flex-direction:column; gap:var(--s-1); }
  .upsell-prefs[hidden]{ display:none !important; }
  .upsell-prefs-label{ font-size:var(--t-xs); font-weight:var(--w-bold); opacity:.72; }
  .upsell-prefs-hint{ font-size:var(--t-xs); opacity:.45; margin-top:var(--s-2); }
  /* ⚠️ P87 — رمز الإضافة صورةً حين ترفعها اللوحة. */
  /* ⚠️ P92 — بطاقة المنتج ذي الصلة: صورة حقيقية بنسبة مربّعة، لا رمز تعبيري. */
  .cart-related-img{
    width:100%; aspect-ratio:1/1; object-fit:cover; border-radius:var(--r-sm); display:block;
    margin-bottom:var(--s-3);
  }
  .cart-related-card{ text-align:center; }
  .cart-upsell-icon-img{
    width:34px; height:34px; border-radius:var(--r-sm); object-fit:cover; display:block; margin-inline:auto;
  }
  .cart-upsell-icon{ font-size:var(--t-xl); }
  .cart-upsell-name{ font-size:var(--t-xs); font-weight:var(--w-bold); line-height:1.3; }
  .cart-upsell-price{ font-size:var(--t-xs); opacity:.6; }

  .cart-continue-btn{
    width:100%; padding:var(--s-5); border-radius:var(--r-md);
    background:var(--brand); color:var(--p-ivory); font-size:var(--t-sm); font-weight:var(--w-bold);
    cursor:pointer; margin-top:var(--s-3);
  }
  /* ⚠️ P165 — زرّا الانتقال في الصفحة الواحدة: خفيفان بستروك. الفعل الوحيد
     المصمت في السلة يجب أن يكون «تأكيد الطلب» — وزرّان مصمتان فوقه يسحبان
     ثقله ويجعلان الزائر يظنّ أنه أنهى وهو لم يبدأ. */
  .cart-jump-btn{
    background:none; color:var(--brand);
    border:1px solid var(--p-brand-a34); font-weight:var(--w-bold);
  }
  .cart-jump-btn:hover{ background:var(--p-brand-a07); }

  /* ⚠️ P91 — دوّارة زرّ الإرسال. تُرافق النصّ ولا تحلّ محلّه: النصّ يقول ماذا
     يجري، والحركة تقول إنه ما زال يجري. */
  .btn-spinner{
    display:inline-block; width:13px; height:13px; margin-inline-end:var(--s-3);
    vertical-align:-2px;
    border:2px solid var(--p-ivory-a35);
    border-top-color:var(--p-ivory);
    border-radius:50%;
    animation:wshSpin .7s linear infinite;
  }
  @keyframes wshSpin{ to{ transform:rotate(360deg); } }
  @media (prefers-reduced-motion:reduce){
    /* ⚠️ من يطلب تقليل الحركة يبقى محتاجاً دليل التقدّم — فتُستبدل الدورة
       بنبضة عتامة لا تدور، لا أن يُحذف المؤشّر فيعود الزرّ ساكناً. */
    .btn-spinner{ animation:wshPulse 1.1s ease-in-out infinite; }
    @keyframes wshPulse{ 0%,100%{ opacity:.35; } 50%{ opacity:1; } }
  }
  .cart-continue-btn:disabled{ opacity:.4; cursor:default; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P84 — «الحقول المهمة داخل السلة لا تظهر بأهميتها، وكأن الزائر يتخطاها
        بدون قصد» (نقد مستخدمين).

     ⚠️ التشخيص: عنوان الحقل كان ١٢px بشفافية ٠٫٧ — أخفت من نصّ الحقل نفسه
        (١٣px بحبر كامل). فالعين تقرأ المُدخَل ولا ترى ما يطلبه، والحقول
        الإلزامية (اسمك · رقم جوالك · العنوان) تبدو اختيارية.

     ⚠️ وليست مشكلة مقاس وحدها: كل الحقول كانت متساوية الوزن، فلا شيء يميّز
        الإلزامي عن الاختياري. أضفنا وسم «مطلوب» على الثلاثة الإلزامية —
        صغيراً بلون العلامة لا بالأحمر، لأن الأحمر إنذار خطأ لا دلالة إلزام.

     ⚠️ وحدّ الحقل الإلزامي أوضح (٠٫٢٢ بدل ٠٫١٢) فيُقرأ الصندوق حدّاً لا خطّاً.
     ══════════════════════════════════════════════════════════════════════════ */
  .cart-field-label{ font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.92; margin:var(--s-6) 0 var(--s-4); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P95 · ٢٠٢٦-٠٨-١٤ — عنوان القسم متوسّط وأكبر، بلا وسم إلزام (قرار المالك).
     يقود مجموعةً من الحقول، فيجب أن يُقرأ مستوىً أعلى منها لا نظيراً لها.
     ══════════════════════════════════════════════════════════════════════════ */
  .cart-section-label{
    font-size:var(--t-base); font-weight:var(--w-bold); opacity:1;
    text-align:center; margin:var(--s-7) 0 var(--s-5);
  }
  /* ⚠️ P95 — زرّ «لأكثر من شخص؟» كان ملتصقاً بأزرار الاختيار فوقه، فيُقرأ خياراً
     ثالثاً لها لا سؤالاً مستقلاً. يفصله هامشٌ يوضّح أنه تفريع لا خيار. */
  #cartMultiToggle{ margin-top:var(--s-5); }
  /* ⚠️ P95 — ملاحظة تحت حقل الهاتف كانت لاصقةً به بهامش سالب من ترميز قديم. */
  .cart-inline-note{ margin-top:var(--s-3); }
  .cart-field-label:first-child{ margin-top:var(--s-2); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P85 — عنوان فوق كل حقل بدل الاعتماد على placeholder وحده.

     ⚠️ العلّة: العنوان كان داخل الحقل، فيختفي لحظة يكتب الزائر. فيراجع استمارته
        فلا يعرف ماذا يمثّل كل صندوق — وهو ما وصفه المراجع حرفاً. والمثال يبقى
        داخل الحقل لأنه يوضّح **شكل** الإجابة لا **هويّة** الحقل، فاختفاؤه بعد
        الكتابة صحيح.

     ⚠️ و<label for> لا <div>: الضغط على العنوان يركّز الحقل، وقارئ الشاشة يربط
        الاثنين. الفرق مجّاني في الكتابة وجوهري في الاستعمال.

     ⚠️ ووسم «مطلوب/اختياري» على كل حقل لا على المجموعة: المجموعة كانت تقول
        «مطلوب» ويضمّ تحتها حقلٌ اختياري (هاتف المستلم)، فيقرأ الزائر إلزاماً
        ليس عليه.
     ══════════════════════════════════════════════════════════════════════════ */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P87 · ٢٠٢٦-٠٨-١٣ — حقل الهاتف: مفتاح ثابت وأرقام لاتينية وثمانية فقط.

     ⚠️ أربعة أعطال في حقل واحد رصدها المالك: يقبل حروفاً عربية وإنجليزية،
        ويقبل أكثر من ثمانية أرقام، ولا يحوّل الأرقام العربية إلى لاتينية،
        وبلا مفتاح دولة.

     ⚠️ (تصحيح P91): المفتاح صار قائمة قابلة للاختيار — قرارٌ صريح من المالك
        يعلو القرار الذي وُصف هنا سابقاً. التفصيل الكامل عند ترميز الحقل نفسه.
     ══════════════════════════════════════════════════════════════════════════ */
  .phone-field{ position:relative; display:block; }
  /* ⚠️ P91 — قائمة منسدلة بمظهر الشارة السابقة لا بمظهر حقل نموذج: بلا حدّ
     ولا خلفية خاصّة بها، تندمج بصرياً في نفس موضع "+974" الثابت سابقاً. */
  .phone-field .phone-cc-select{
    position:absolute; inset-inline-start:10px; top:50%; transform:translateY(-50%);
    font-size:var(--t-sm); opacity:.75; letter-spacing:.02em; z-index:1;
    border:none; background:none; color:inherit; cursor:pointer;
    padding:var(--s-2) var(--s-1); direction:ltr;
    appearance:none; -webkit-appearance:none;
  }
  .phone-field .cart-address{
    padding-inline-start:var(--s-11);
    direction:ltr; text-align:end;
  }
  body.lang-en .phone-field .cart-address{ text-align:start; }

  /* ⚠️ P88 — مؤشّر المرحلة في ترويسة السلة: صغيرٌ وثانويّ، لا ينافس العنوان. */
  /* ⚠️ P95 — سطر ثانٍ تحت العنوان لا لصيقٌ به. */
  .cart-step-count{
    font-size:var(--t-xs); opacity:.55; white-space:nowrap; margin:0;
  }
  .cart-step-count[hidden]{ display:none !important; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P90 · ٢٠٢٦-٠٨-١٤ — توحيد الإيقاع الرأسي في السلة (رصد المالك).

     ⚠️ العطل الذي أدخلتُه في P87: قاعدة «العنوان يليه حقلٌ فيُلغى هامشه» كانت
        ‎.cart-input-label + .cart-address‎ — ومحدِّد الشقيق المباشر ينكسر متى
        حال بينهما غلاف. وحقلا الهاتف صارا داخل ‎.phone-field‎ في P87، فبقي
        هامشهما ١٢px فوق هامش العنوان ٦px — فراغٌ ضعف ما تحت بقيّة العناوين.
        ولهذا بدت المسافات متفاوتة بلا سبب ظاهر.

     ⚠️ والعلاج توحيد الإيقاع لا ترقيع الحالة: ثلاثة مستويات لا أكثر —
        عنوان القسم (٢٠px فوقه) · عنوان الحقل (١٤px) · ما يلي الحقل (٦px).
        فتصير المسافة تدلّ على العلاقة: الأبعد أقلّ صلةً بما قبله.
     ══════════════════════════════════════════════════════════════════════════ */
  .cart-input-label{
    display:block; font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.9;
    margin:var(--s-5) 0 var(--s-3);
  }
  .cart-input-label + .cart-address,
  .cart-input-label + .phone-field,
  .cart-input-label + .phone-field .cart-address{ margin-top:0; }
  /* الملاحظة تتبع حقلها لا تعوم بينه وبين ما بعده */
  .cart-address + .cart-inline-note,
  .phone-field + .cart-inline-note{ margin-top:var(--s-3); }
  /* وصفّ الميزة يأخذ فاصلاً أوضح لأنه كتلة مستقلة لا حقل */
  .feature-row{ margin-top:var(--s-5); }
  .cart-input-label .req,
  .cart-input-label .opt{
    font-size:var(--t-xs); font-weight:var(--w-bold); margin-inline-start:var(--s-3);
  }
  .cart-input-label .req{ color:var(--brand); opacity:.85; }
  .cart-input-label .opt{ opacity:.55; }

  .cart-field-label .req{
    font-size:var(--t-xs); font-weight:var(--w-bold); opacity:.75; color:var(--brand);
    margin-inline-start:var(--s-3);
  }
  .cart-address[data-required="1"]{
    border-color:var(--p-brand-a34);
    background:var(--p-brand-a035);
  }
  .cart-address[data-required="1"]:focus{
    outline:none;
    border-color:var(--p-brand-a62);
    background:var(--p-brand-a06);
  }

  .cart-toggle-group{ display:flex; gap:var(--s-3); }
  .cart-toggle-btn{
    flex:1; padding:var(--s-4) var(--s-3); border-radius:var(--r-sm);
    border:1px solid var(--p-black-a12);
    background:none; color:inherit; font-size:var(--t-sm); cursor:pointer;
  }
  .cart-toggle-btn.active{
    background:var(--brand); border-color:var(--brand); color:var(--p-ivory); font-weight:var(--w-bold);
  }

  /* تبويبات استوديو التصميم المخصص: فكرة عامة / خدمة الطباعة */
  .cd-tabs{ display:flex; gap:var(--s-3); margin-bottom:var(--s-6); }
  .cd-tab{
    flex:1; padding:var(--s-4) var(--s-3); border-radius:var(--r-sm);
    border:1px solid var(--p-black-a12); background:none; color:inherit;
    font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.55; cursor:pointer;
  }
  .cd-tab.active{ opacity:1; background:var(--brand); border-color:var(--brand); color:var(--p-ivory); }
  .cd-print-types{ display:flex; flex-wrap:wrap; gap:var(--s-3); }
  .cd-print-types .cart-toggle-btn{ flex:0 0 auto; padding:var(--s-4) var(--s-6); }

  /* ============ بانر وورقة "ساعدني أختار" (Guided Discovery) ============ */
  /* شريط رسالة "متكامل" — سطر واحد خفيف بين الهيرو وبانر ساعدني أختار */
  .promise-strip{
    display:flex; align-items:center; justify-content:center; gap:var(--s-3);
    padding:var(--s-5) var(--s-6); text-align:center;
    font-size:var(--t-sm); font-weight:var(--w-bold); color:var(--brand); opacity:.85;
  }
  .promise-strip svg{ width:15px; height:15px; flex:0 0 auto; }
  /* ⚠️ ٢٠٢٦-٠٧-٢٥ (المرحلة ٢): نسخة الوعد — أهدى وأصغر من نسخة الميزة القديمة،
     وتلتف على أكتر من سطر بالشاشات الضيقة بدل ما تنقص. */
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — شريط الوعد بثلاث خانات موضّحة.
     شبكة ثلاثية حتى على أصغر شاشة (الخانات قصيرة بقصد فما تنضغط)، وخطوط فاصلة رقيقة
     جداً بين الخانات بدل نقاط وسطية. بلا أيقونات ولا ألوان تحذيرية — قاعدة ٣ و٧. */
  .promise-strip-trust{
    display:grid; grid-template-columns:repeat(3,1fr);
    gap:0; padding:var(--s-5) var(--s-5) var(--s-6); margin:0 var(--s-5);
    border-top:1px solid var(--p-ink-a07);
    border-bottom:1px solid var(--p-ink-a07);
  }
  .pt-cell{
    display:flex; flex-direction:column; gap:var(--s-2);
    align-items:center; text-align:center;
    padding:0 var(--s-3); position:relative;
  }
  .pt-cell + .pt-cell::before{
    content:""; position:absolute; inset-inline-start:0; top:12%; bottom:12%;
    width:1px; background:var(--p-ink-a08);
  }
  .pt-head{
    font-size:var(--t-xs); font-weight:var(--w-bold); line-height:1.5;
    color:var(--brand); opacity:.9;
  }
  .pt-sub{
    font-size:var(--t-micro); font-weight:var(--w-normal); line-height:1.6; opacity:.5;
    /* ⚠️ P91 — سطر واحد بحدٍّ أقصى: يمنع تفاوت ارتفاع الخلايا الثلاث. */
    display:-webkit-box; -webkit-line-clamp:1; -webkit-box-orient:vertical; overflow:hidden;
  }
  @media (min-width:768px){
    .promise-strip-trust{ max-width:920px; margin-inline:auto; padding:var(--s-7) var(--s-6) var(--s-7); }
    .pt-head{ font-size:var(--t-sm); }
    .pt-sub{ font-size:var(--t-xs); }
  }

  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — البانر صار "مربع زجاجي زيتوني" بدل زر عاجي باهت.
     كان أهم مدخل بالصفحة (بديلنا الفاخر عن فلاتر المنافس) بس شكله كان أضعف من كرت منتج.
     زجاج زيتوني كثيف + لمعة داخلية + حد فاتح، ونص عاجي بالكامل.
     ⚠️ بدون filter إطلاقاً — عنصر عريض فيه backdrop-filter، وتركيبة filter معه هي
     السبب الموثّق للتشويش على الموبايل. الظل الخارجي: box-shadow ناعم فقط. */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P45 · ٢٠٢٦-٠٨-١٠ — أُعيد تشكيله بأمر المالك على هيئة الشريط السفلي.

     ما كان: مستطيل بانحناء ٢٠px وارتفاع ≈٧٥px، بتدرّج زيتوني معتم وسطرين
     كبيرين ولمعة قطرية — كتلة أثقل من الشريط السفلي نفسه رغم أنها ليست تنقّلاً.

     صار: كبسولة بنفس زجاج الشريط السفلي حرفياً — نفس الشفافية ٠٫٧٢، ونفس
     الضبابية والإشباع، ونفس الحد وحدّه العلوي الفاتح، وانحناء ٩٩٩px.
     والارتفاع ≈٥٢px ليطابق الشريط لا ليتجاوزه.

     ⚠️ اللمعة القطرية أُلغيت: الشريط السفلي بلا لمعة، والتطابق هو المطلوب.
     ⚠️ بلا filter إطلاقاً — العنصر يحمل backdrop-filter، والجمع بينهما هو
     السبب الموثّق لتشويش العرض على الموبايل.
     ══════════════════════════════════════════════════════════════════════════ */
  .discover-banner{
    display:flex; align-items:center; gap:var(--s-4);
    width:calc(100% - 28px); margin:18px auto 12px;
    padding:var(--s-3) var(--s-5); border-radius:var(--r-full);
    min-height:52px;
    cursor:pointer; text-align:start;
    position:relative;
    color:var(--p-ivory);
    background:var(--p-brand-a82);
    backdrop-filter:blur(30px) saturate(220%);
    -webkit-backdrop-filter:blur(30px) saturate(220%);
    border:1px solid var(--p-ivory-a28);
    border-top-color:var(--p-ivory-a42);
    box-shadow:0 6px 20px var(--p-olive-dark-a14);
    transition:transform .25s ease, box-shadow .25s ease;
    touch-action:manipulation;
  }
  .discover-banner:hover{ transform:translateY(-1px); box-shadow:0 10px 26px var(--p-olive-dark-a20); }
  /* ⚠️ P56 — نفس عمود المحاذاة الذي أخذه مبدّل المحور (١١٢٠ = ١٢٠٠ ناقص حشو
     الطرفين). كان بلا حدّ عرض فيمتدّ بعرض الشاشة كاملة على المكتب. */
  @media (min-width:768px){
    .discover-banner{ width:100%; max-width:1120px; margin:18px auto 12px; }
  }
  .discover-banner:active{ transform:scale(0.99); }
  .discover-banner-icon{ flex:0 0 auto; width:20px; height:20px; color:var(--p-ivory); opacity:.9; }
  .discover-banner-icon svg{ width:100%; height:100%; }
  .discover-banner-text{ display:flex; flex-direction:column; gap:var(--s-1); flex:1; min-width:0; }
  .discover-banner-title{ font-size:var(--t-sm); font-weight:var(--w-bold); line-height:1.35; }
  .discover-banner-sub{
    font-size:var(--t-xs); opacity:.7; line-height:1.4;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  }
  .discover-banner-arrow{ flex:0 0 auto; width:15px; height:15px; opacity:.55; }
  .discover-banner-arrow svg{ width:100%; height:100%; }
  .discover-step-title{ font-size:var(--t-sm); font-weight:var(--w-bold); margin-bottom:var(--s-5); }
  .discover-grid{ display:flex; flex-wrap:wrap; gap:var(--s-4); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P68 — الخطوة صارت طويلة بعد أن قُرئت مناسباتها من القاعدة، فتُمرَّر
     الشبكة وحدها ويبقى حقل التصفية ثابتاً فوقها. وبلا حدّ ارتفاع كانت الورقة
     كلّها تمرّ فيغيب الحقل عن العين وقت الحاجة إليه.
     ⚠️ والحدّ بوحدة svh لا vh: شريط عنوان المتصفح على الجوّال يغيّر vh أثناء
     التمرير، وهي علّة موثّقة في هذا الملف. */
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P97 · ٢٠٢٦-٠٨-١٥ — حقل بحث المساعد: لونه ورفعه (رصد المالك).

     ⚠️ اللون: كان يرث خلفية الورقة الرمادية الباهتة، بينما حقل «تصفّح» أبيض
        بحدٍّ واضح — فبدا الأول جزءاً من الخلفية لا حقلاً يُكتب فيه. صار أبيض
        بنفس حدّ حقل التصفّح تماماً، فيُقرأ حقلاً في الورقتين.

     ⚠️ والرفع: الهامش العلوي قُلّص فيقترب من عنوان «ما المناسبة؟» فوقه، ويبقى
        لاصقاً بأعلى الورقة عند التمرير (sticky) كما كان.
  ══════════════════════════════════════════════════════════════════════════════ */
  .discover-search-row{
    position:sticky; top:0; z-index:2;
    /* ⚠️ P159 (مراجعة المالك) — لون الورقة نفسه، وهو معتمٌ فيصلح للّصق
       (sticky) بلا أن يبين لوحاً أبيض غريباً داخل ورقةٍ عاجية. */
    background:var(--p-fffdf9);
    margin:var(--s-1) 0 var(--s-4);
  }
  #discoverOccasionGrid, #discoverRecipientGrid{
    /* ⚠️ P96 — dvh بدل svh: الوحدة الثابتة (svh) تقيس أصغر ارتفاعٍ ممكن ولا
       تتغيّر مع لوحة المفاتيح، فتبقى الشبكة بطولها بينما تنكمش الورقة حولها
       (88dvh) — فتتجاوز أمّها ويُدفع حقل البحث خارج الشاشة. والوحدة الديناميكية
       تنكمش معها فيبقى الحقل ظاهراً. */
    /* ⚠️ P97 — ارتفاع ثابت لا يتبع عدد النتائج (رصد المالك: «خلّي الكرت
       بارتفاع ثابت ما يتغيّر ارتفاعه مع عدد المحتوى المعروض»). min-height
       مع max-height يجعل الشبكة تحجز مساحتها كاملةً سواء عُرضت رقاقة واحدة أم
       ثلاثون — فلا تقفز الورقة طولاً وقصراً مع كل حرفٍ يُكتب في البحث. */
    padding:var(--s-1); margin:2px -2px 0;
    align-content:flex-start;
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P185 · ٢٠٢٦-٠٩-٢١ — تمريرٌ واحد للدرج كلّه (قرار المالك).

     العطل: شبكة المناسبات كانت صندوقاً بارتفاعٍ ثابت (‎46dvh‎) يمرّ داخله
     تمريرٌ ثانٍ. فالإصبع على الرقائق يحرّك الشبكة، وعلى ما حولها يحرّك الورقة
     — تمريران متداخلان في ورقةٍ واحدة، وأحدهما يبتلع حركة الآخر عند حدوده.
     العلاج: الشبكة تأخذ طولها الطبيعي، والورقة وحدها تمرّ.
     ⚠️ والارتفاع الثابت كان له سببٌ (P97): ألّا تقفز الورقة طولاً وقصراً مع
     كل حرفٍ يُكتب في البحث. السبب ما زال قائماً لحقل المناسبات، لكنّ القفزة
     في تمريرٍ واحد أهون من تمريرين متنازعين — والمالك جرّب الاثنين واختار.
     ══════════════════════════════════════════════════════════════════════════ */
  #discoverOccasionGrid, #discoverRecipientGrid{
    min-height:0; max-height:none; overflow:visible;
  }
  .discover-empty{ font-size:var(--t-sm); opacity:.6; margin:var(--s-5) var(--s-1) 0; }
  .discover-occasion-chip[hidden]{ display:none !important; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P184 · ٢٠٢٦-٠٩-٢١ — الخيارات: أصغر، متساوية العرض، وبزوايا الحقل.

     العطل (بلغة المالك): «صغّر حجمها شوي ورتّب عرضها، والحواف بزاوية مثل
     زوايا خانة البحث مو نصف دائري».
     السبب: كانت صفّاً متدفّقاً (flex-wrap) فعرض كل رقاقة بطول كلمتها — صفٌّ
     مهلهل بثلاثِ رقاقاتٍ هنا واثنتين هناك. ونصفُ الدائرة (‎--r-full‎) يجعلها
     تُقرأ وسماً لا خياراً يُضغط، ويخالف زوايا الحقل فوقها.
     العلاج: شبكةٌ بعمودين متساويين — كل خيار بعرض أخيه مهما طال اسمه —
     وزاويةٌ ‎16px‎ هي زاوية الحقل نفسه، وحجمٌ أصغر درجة.
     ولمَ عمودان لا ثلاثة: أطول الأسماء («للحاج والمعتمر» · «زيارة أهل
     العروس») لا تسع في ثلث الورقة فتُقطع أو تنكسر سطرين.
     ══════════════════════════════════════════════════════════════════════════ */
  .discover-grid{ display:grid; grid-template-columns:repeat(2, 1fr); gap:var(--s-3); }
  .discover-occasion-chip{
    display:flex; align-items:center; justify-content:center;
    gap:var(--s-2); padding:var(--s-3) var(--s-4); border-radius:var(--r-md);
    border:1px solid var(--p-black-a12); background:none; color:inherit;
    font-size:var(--t-xs); line-height:1.5; cursor:pointer; min-width:0; text-align:center;
  }
  /* ⚠️ P209 — ١٥ لا ١٣: التعليل عند مجموعة الأيقونات. */
  .discover-occasion-chip svg{ width:15px; height:15px; flex:0 0 auto; }
  /* وأزرار الميزانية تتبعها: نفس الدرجة من الارتفاع فلا يبدو سؤالٌ أثقل من أخيه. */
  .discover-budget-btn{ padding:var(--s-4) var(--s-5); }
  /* ⚠️ P185 — تنسيق زرّ «رجوع» حُذف مع الزرّ نفسه: لا قاعدةً بلا عنصرٍ يقرؤها. */
  /* رسالة طمأنة سرعة التخصيص — بجانب حقول الكتابة على البوكس تحديداً */
  .speed-note{
    display:flex; align-items:center; gap:var(--s-3);
    margin:-6px 0 16px; padding:var(--s-4) var(--s-4); border-radius:var(--r-sm);
    background:var(--ivory-card-bg);
    font-size:var(--t-xs); opacity:.75; line-height:1.4;
  }
  .speed-note svg{ width:16px; height:16px; flex:0 0 auto; color:var(--brand); }

  .discover-budget-grid{ display:flex; flex-direction:column; gap:var(--s-4); }

  /* ============ "ابني هديتك" (٢٠٢٦-٠٧-٢٢) ============ */
  .gb-steps-indicator{ display:flex; justify-content:center; gap:var(--s-3); margin:-4px 0 16px; }
  .gb-step-dot{ width:7px; height:7px; border-radius:50%; background:var(--p-black-a15); transition:background .2s; }
  .gb-step-dot.active{ background:var(--brand); }
  .gb-product-preview{
    display:flex; align-items:center; gap:var(--s-4); padding:var(--s-4);
    background:var(--ivory-card-bg); border-radius:var(--r-md); margin-bottom:var(--s-6);
  }
  .gb-product-preview img{ width:52px; height:52px; border-radius:var(--r-sm); object-fit:cover; flex:0 0 auto; }
  .gb-product-info{ min-width:0; }
  .gb-product-name{ font-size:var(--t-sm); font-weight:var(--w-bold); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
  .gb-product-price{ font-size:var(--t-sm); color:var(--brand); margin-top:var(--s-1); }
  .gb-nav-row{ display:flex; gap:var(--s-4); margin-top:var(--s-6); }
  .gb-nav-row .composer-save-btn{ margin-top:0; flex:1; }
  .gb-back-btn{
    flex:0 0 auto; padding:0 var(--s-6); border-radius:var(--r-md); border:1px solid var(--p-black-a12);
    background:none; color:inherit; font-size:var(--t-sm); font-weight:var(--w-bold); cursor:pointer;
  }

  /* المشهد النهائي المركّب — صورة المنتج (بادجات التغليف فوقها) + بطاقة الإهداء سوا بمشهد واحد */
  .gb-scene{ display:flex; flex-direction:column; gap:var(--s-5); }
  .gb-scene-photo{ position:relative; border-radius:var(--r-md); overflow:hidden; height:180px; }
  .gb-scene-photo img{ width:100%; height:100%; object-fit:cover; display:block; }
  .gb-scene-badges{ position:absolute; top:10px; inset-inline-end:10px; display:flex; flex-direction:column; gap:var(--s-3); }
  .gb-scene-badge{
    width:var(--icon-32); height:var(--icon-32); border-radius:50%; background:var(--p-olive-ink-a55);
    backdrop-filter:blur(6px); display:flex; align-items:center; justify-content:center;
    font-size:var(--t-base);
  }
  .gb-scene-card.gift-card-preview{ padding:var(--s-7) var(--s-6); min-height:auto; }
  .gb-scene-box-text{
    text-align:center; font-size:var(--t-sm); opacity:.7; padding:var(--s-4);
    border:1px dashed var(--p-black-a15); border-radius:var(--r-sm);
  }

  .discover-budget-btn{
    width:100%; padding:var(--s-5) var(--s-5); border-radius:var(--r-md); border:1px solid var(--p-black-a12);
    background:none; color:inherit; font-size:var(--t-sm); text-align:start; cursor:pointer;
  }
  .discover-budget-skip{ opacity:.6; font-size:var(--t-sm); }
  /* ⚠️ P184 — «لا يهم» داخل شبكة الخيارات رقاقةٌ مثل أخواتها، لا مقاسٌ ثانٍ. */
  .discover-grid .discover-budget-skip{ font-size:var(--t-xs); }
  .discover-step[hidden]{ display:none; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P171 · ٢٠٢٦-٠٩-٢١ — «ساعدني أختار» صفحةٌ واحدة: ثلاثة أسئلة مفتوحة معاً.

     الحالة المختارة تُقرأ من aria-pressed لا من صنفٍ موازٍ — فما يراه المستخدم
     وما يُقرأ بقارئ الشاشة شيءٌ واحد. وخطوطُ الفصل بين الأسئلة خفيفة: الصفحة
     الواحدة تحتاج إيقاعاً يفصل الأسئلة بلا أن يبني ثلاثة صناديق.
     ══════════════════════════════════════════════════════════════════════════ */
  .discover-occasion-chip[aria-pressed="true"],
  .discover-budget-btn[aria-pressed="true"]{
    background:var(--brand); border-color:var(--brand); color:var(--p-ivory-soft); font-weight:var(--w-bold);
  }
  #discoverSheet .discover-step + .discover-step{
    margin-top:var(--s-6); padding-top:var(--s-6);
    border-top:1px solid var(--p-ink-a08);
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P183 · ٢٠٢٦-٠٩-٢١ — ذيل ورقة المساعد: زجاجٌ لا لوحٌ عاجيّ.

     العطل (بلغة المالك): «الزرّ تحته لون عاجي أبيض — شو هذا المفروض ما يكون».
     السبب: الذيل اللاصق كان يُصبَغ بلونٍ مصمت (‎#FFFDF9‎) ليحجب ما يمرّ تحته،
     فظهر شريطٌ أبيض مستطيل يقطع الورقة عرضاً — جسمٌ غريب داخل درجٍ زجاجيّ
     كلُّ سطحه طمسٌ وشفافية.
     العلاج: لا لون أصلاً، بل طمسٌ خلفيّ (backdrop-filter) كطمس الورقة نفسها.
     الرقائق تمرّ تحته مطموسةً فيبقى الزرّ مقروءاً، والذيل يُقرأ جزءاً من الورقة
     لا لوحاً فوقها.
     ⚠️ والزرّ نزل: الحشوة صارت ‎20px‎ فوقه و‎20px‎ تحته بدل ‎12/4‎ — كان ملتصقاً
     بحافّة الورقة السفلى، وصار له متّسعٌ من الجهتين.
     ══════════════════════════════════════════════════════════════════════════ */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P184 · ٢٠٢٦-٠٩-٢١ — الذيل يخرج من منطقة التمرير ويصير قدماً للورقة.

     العطل (بلغة المالك): «الزرّ المفروض يكون فوق الشريط السفلي بقليل، وما
     يمرق الكلام بالطريقة هذه أسفله».
     السبب الجذري: الذيل كان لاصقاً (sticky) **داخل** منطقة التمرير، فالرقائق
     تمرّ خلفه بحكم التعريف. وكل علاجٍ للّون — لوحٌ عاجيّ (P171) ثم طمسٌ
     خلفيّ ثم قناعٌ متدرّج (P183) — كان يعالج العَرَض: يحجب المارّ بطبقةٍ
     تظهر هي نفسها لوحاً غريباً داخل ورقةٍ زجاجية.
     العلاج: يخرج من منطقة التمرير ويصير أخاً لها داخل الورقة — وهو بالضبط ما
     فُعل برأس درج «تصفّح» في P143 وللسبب نفسه. فلا شيء يمرّ تحته أصلاً، ولا
     يحتاج لوناً ولا طمساً، والورقة أصلاً محشوّةٌ من أسفل بمقدار الشريط
     السفلي (‎--bn-clear‎) فيقف القدم فوقه بقليل بلا رقمٍ جديد.
     ⚠️ وسقطت معه شارة العدّاد: كانت لتُقرأ فوق ما يمرّ، ولم يعد يمرّ شيء.
     ══════════════════════════════════════════════════════════════════════════ */
  .discover-go{
    flex:0 0 auto;
    padding:var(--s-4) var(--s-6) var(--s-5);
    border-top:1px solid var(--p-ink-a08);
    display:flex; flex-direction:column; align-items:center; gap:var(--s-3);
  }
  /* ⚠️ P184 — الزرّ أقصر: حشوةٌ ‎12px‎ بدل ‎16px‎ (طلب المالك). */
  .discover-go .cart-continue-btn{ margin-top:0; padding:var(--s-4); }
  .discover-count{ font-size:var(--t-xs); opacity:.6; }
  /* ⚠️ P183 — حقل بحث المساعد يرتفع عن عنوان الخطوة فوقه (طلب المالك).
     القاعدة هنا لا في مكان ‎.discover-search-row‎ الأصلي: ‎.browse-search-row‎
     تأتي بعدها في الملف وتكتب هامشها فوقها، فالتعديل هناك وحده كان لا يظهر. */
  /* ⚠️ P184 — ولا لصقَ بعد اليوم: الحقل الشفّاف اللاصق كان سيمرّ تحته المحتوى.
     والخطوات الثلاث في صفحةٍ واحدة قصيرة، فالحقل في مكانه من التدفّق يكفي. */
  #discoverSheet .discover-search-row{
    position:static;
    background:none;
    margin-top:calc(var(--s-3) * -1);
    margin-bottom:var(--s-3);
  }
  #discoverSheet .discover-step-title{ margin-bottom:var(--s-4); }

  .cart-gift-note, .cart-address{
    width:100%; margin-top:var(--s-4); padding:var(--s-4); border-radius:var(--r-sm);
    border:1px solid var(--p-black-a12); background:none; color:inherit; font-size:var(--t-sm);
    font-family:inherit;
  }
  .cart-gift-note{ resize:none; height:64px; }

  .cart-datetime-row{ display:flex; gap:var(--s-4); align-items:flex-start; }
  /* ⚠️ P91 — خلية لكل حقل تحمل تسميته الخاصّة، بلا كسر لتخطيط الصفّ الأفقي
     القائم (flex:1 على كل خلية كما كان على الحقل مباشرةً). */
  .cart-datetime-cell{ flex:1; display:flex; flex-direction:column; gap:var(--s-2); min-width:0; }
  .cart-datetime-mini-label{ font-size:var(--t-xs); font-weight:var(--w-bold); opacity:.75; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P95 · ٢٠٢٦-٠٨-١٤ — تداخل حقلَي التاريخ والوقت (رصد المالك).

     ⚠️ السبب: القاعدة الأساس تحمل flex:1 على الحقل نفسه — من يوم كان الحقلان
        أبناءً مباشرين للصفّ المرن. وبعد أن غلّفتُ كلّاً منهما بخليّة في P91،
        صار flex:1 يُحسب داخل الخليّة لا داخل الصفّ، فيتمدّد الحقل على أساسٍ
        خاطئ ويتجاوز حدود خليّته.

     ⚠️ العلاج إلغاؤه داخل الخليّة صراحةً: العرض صار مسؤولية الخليّة (flex:1
        عليها) لا الحقل. وmin-width:0 يمنع محتوى منتقي التاريخ الأصليّ من فرض
        عرضٍ أدنى يدفع جاره.
     ══════════════════════════════════════════════════════════════════════════ */
  /* ⚠️ P96 — لم تعد لازمة بعد حذف flex:1 من الأصل، وتُترك min-width فقط لمنع
     محتوى منتقي التاريخ الأصليّ من فرض عرضٍ أدنى يدفع جاره. */
  .cart-datetime-cell .cart-date-input,
  .cart-datetime-cell .cart-time-input{ min-width:0; }

  /* ============ مسار ب — نموذج الهدية المستقلة (٢٠٢٦-٠٧-٢١) ============ */
  .cart-multi-link{
    display:block; width:100%; text-align:center; cursor:pointer;
    padding:var(--s-4); border-radius:var(--r-md); margin-bottom:var(--s-5);
    background:var(--brand-soft); border:1px solid var(--brand);
    color:var(--brand); font-size:var(--t-sm); font-weight:var(--w-bold);
  }
  .cart-checkbox-row{
    display:flex; align-items:center; gap:var(--s-3); margin-top:var(--s-4); font-size:var(--t-sm); cursor:pointer;
  }
  .cart-checkbox-row[hidden]{ display:none; }
  .cart-checkbox-row input[type="checkbox"]{ width:16px; height:16px; accent-color:var(--brand); flex:0 0 auto; }
  .cart-inline-note{ font-size:var(--t-xs); opacity:.6; line-height:1.6; margin-top:var(--s-3); }
  select.cart-address{ appearance:none; cursor:pointer; }
  /* بطاقة الهدية — كرت مصغّر (شبيه بكرت المنتج) بالوضع الافتراضي، يتوسّع لعرض النموذج الكامل بالضغط */
  .gift-card{
    border-radius:var(--r-md); overflow:hidden; margin-bottom:var(--s-4);
    border:1px solid var(--glass-border-on-light);
    background:linear-gradient(155deg, var(--p-white-a50) 0%, var(--ivory-card-bg) 45%, var(--ivory-card-bg) 100%);
  }
  .gift-card-summary{ display:flex; align-items:center; gap:var(--s-4); padding:var(--s-5); cursor:pointer; }
  .gift-card-summary-thumbs{ display:flex; flex:0 0 auto; }
  .gift-summary-thumb{
    width:44px; height:44px; border-radius:var(--r-sm); overflow:hidden; flex:0 0 auto; padding:0; cursor:pointer;
    border:2px solid var(--bg-light); margin-inline-start:-14px; background:var(--ivory-card-bg);
    display:flex; align-items:center; justify-content:center; font-size:var(--t-md);
  }
  .gift-summary-thumb:first-child{ margin-inline-start:0; }
  .gift-summary-thumb img{ width:100%; height:100%; object-fit:cover; display:block; }
  .gift-summary-thumb-empty{ cursor:default; opacity:.5; }
  .gift-card-summary-text{ flex:1; min-width:0; display:flex; flex-direction:column; gap:var(--s-2); }
  .gift-card-summary-name{ font-size:var(--t-sm); font-weight:var(--w-bold); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
  .gift-card-summary-meta{ font-size:var(--t-xs); opacity:.6; }
  .gift-card-summary-badge{
    width:var(--icon-24); height:var(--icon-24); border-radius:50%; flex:0 0 auto; font-size:var(--t-xs); font-weight:var(--w-bold);
    display:flex; align-items:center; justify-content:center; background:var(--p-black-a08); color:inherit;
  }
  .gift-card-summary-badge.complete{ background:var(--brand); color:var(--p-ivory); }
  .gift-card-body{ padding:var(--s-2) var(--s-5) var(--s-6); border-top:1px solid var(--p-black-a08); }
  .gift-card:not(.expanded) .gift-card-body{ display:none; }
  .gift-card.expanded .gift-card-summary{ display:none; }
  .gift-card-collapse-btn{
    width:var(--icon-32); height:var(--icon-32); border-radius:50%; border:none; background:var(--p-black-a06); flex:0 0 auto;
    color:inherit; font-size:var(--t-sm); cursor:pointer; display:flex; align-items:center; justify-content:center;
  }
  .gift-card-header{ display:flex; align-items:center; justify-content:space-between; gap:var(--s-3); margin-bottom:var(--s-2); padding-top:var(--s-5); }
  .gift-card-title{ font-size:var(--t-sm); font-weight:var(--w-bold); flex:1; text-align:center; }
  .gift-card-remove{ background:none; border:none; color:var(--danger); font-size:var(--t-xs); cursor:pointer; padding:var(--s-2); }
  .cart-add-gift-btn{
    width:100%; padding:var(--s-4); border-radius:var(--r-sm); border:1px dashed var(--p-black-a20);
    background:none; color:var(--brand); font-size:var(--t-sm); font-weight:var(--w-bold); cursor:pointer; margin-top:var(--s-2);
  }
  .gift-item-picker{ display:flex; gap:var(--s-3); overflow-x:auto; padding-bottom:var(--s-3); margin-bottom:var(--s-4); scrollbar-width:none; }
  .gift-item-thumb{
    position:relative; width:56px; height:56px; border-radius:var(--r-sm); overflow:hidden; flex:0 0 auto;
    border:2px solid transparent; padding:0; cursor:pointer; background:var(--ivory-card-bg);
  }
  .gift-item-thumb img{ width:100%; height:100%; object-fit:cover; display:block; }
  .gift-item-thumb.selected{ border-color:var(--brand); }
  .gift-item-check{
    position:absolute; inset:0; background:var(--p-brand-a55); color:var(--p-ivory);
    display:none; align-items:center; justify-content:center; font-size:var(--t-md); font-weight:var(--w-bold);
  }
  .gift-item-thumb.selected .gift-item-check{ display:flex; }
  .gift-item-thumb.taken{ opacity:.35; cursor:not-allowed; }
  .gift-item-thumb.taken img{ filter:grayscale(1); }
  .gift-item-taken-label{
    position:absolute; bottom:0; inset-inline:0; background:var(--p-black-a60); color:var(--p-white);
    font-size:var(--t-micro); text-align:center; padding:var(--s-2) 0; font-family:var(--font-ar);
  }

  /* ============ بطاقة الإهداء + الكتابة على البوكس — مسار ب تكملة (٢٠٢٦-٠٧-٢١) ============ */
  .feature-row{
    display:flex; align-items:center; justify-content:space-between; gap:var(--s-4);
    width:100%; margin-top:var(--s-4); padding:var(--s-5); border-radius:var(--r-md);
    border:1px solid var(--p-black-a10); background:none; color:inherit; cursor:pointer; text-align:start;
  }
  .feature-row-text{ display:flex; flex-direction:column; gap:var(--s-2); }
  .feature-row-title{ font-size:var(--t-sm); font-weight:var(--w-bold); }
  .feature-row-sub{ font-size:var(--t-xs); opacity:.6; }
  .feature-row-sub.done{ opacity:1; color:var(--brand); font-weight:var(--w-bold); }
  .feature-row-chevron{ opacity:.4; font-size:var(--t-sm); flex:0 0 auto; }
  .feature-row[hidden]{ display:none; } /* نفس إصلاح الباج: display:flex فوق كان بيبطل خاصية hidden */
  .pin-details-row{ display:flex; gap:var(--s-4); margin-top:var(--s-4); }
  .pin-details-row[hidden]{ display:none; }

  .composer-tabs{ display:flex; gap:var(--s-3); background:var(--ivory-card-bg); border-radius:var(--r-full); padding:var(--s-2); margin-bottom:var(--s-5); }
  .composer-tab{
    flex:1; padding:var(--s-4) var(--s-3); border-radius:var(--r-full); border:none; background:none;
    color:inherit; opacity:.55; font-size:var(--t-sm); font-weight:var(--w-bold); cursor:pointer;
  }
  .composer-tab.active{ background:var(--bg-light); opacity:1; }

  .composer-field{
    width:100%; margin-bottom:var(--s-4); padding:var(--s-4); border-radius:var(--r-md);
    border:1px solid var(--p-black-a12); background:none; color:inherit; font-size:var(--t-sm); font-family:inherit;
  }
  .composer-message{ resize:none; height:110px; }
  .composer-counter{ font-size:var(--t-xs); opacity:.5; margin:-8px 0 12px; }
  .composer-suggest-link{ display:block; font-size:var(--t-sm); color:var(--brand); font-weight:var(--w-bold); text-decoration:underline; margin-bottom:var(--s-5); cursor:pointer; background:none; border:none; padding:0; text-align:start; }
  .composer-save-btn{
    width:100%; padding:var(--s-5); border-radius:var(--r-md); background:var(--brand); color:var(--p-ivory);
    font-size:var(--t-sm); font-weight:var(--w-bold); cursor:pointer; margin-top:var(--s-3);
  }
  .gift-card-preview{
    background:var(--ivory-card-bg); border-radius:var(--r-lg); padding:var(--s-9) var(--s-7) var(--s-7);
    display:flex; flex-direction:column; align-items:center; text-align:center;
    min-height:280px; gap:var(--s-5); margin-bottom:var(--s-3);
  }
  /* ⚠️ ٢٠٢٦-٠٧-٢٦: صار شعاراً حقيقياً (SVG) مو محرفاً — فيحتاج مقاساً مو حجم خط. */
  .gift-card-preview-logo{ color:var(--brand); opacity:.72; line-height:0; }
  /* ⚠️ نسبة الشعار عريضة (145×110) مو مربعة — فالمقاس بالعرض والارتفاع تلقائي */
  .gift-card-preview-logo svg{ width:56px; height:43px; display:block; margin:0 auto; }
  .gift-card-preview-to{ font-size:var(--t-sm); font-weight:var(--w-bold); }
  .gift-card-preview-msg{ font-size:var(--t-sm); line-height:1.8; opacity:.85; white-space:pre-wrap; }
  /* المرسل — قالب البطاقة الثابت (٢٠٢٦-٠٧-٢٢): ثابت فعلياً على الجهة اليسرى الفيزيائية
     للبطاقة (مو "بداية" اتجاه القراءة) بغض النظر عن اتجاه الصفحة RTL/LTR — بالضبط متل
     توقيع بطاقة ورقية حقيقية. align-self:stretch يمدّه بعرض البطاقة كامل، وtext-align:left
     خاصية فيزيائية دايماً بتثبته يسار بصري حقيقي. */
  .gift-card-preview-from{
    font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.7; margin-top:var(--s-2);
    align-self:stretch; text-align:left;
  }
  .gift-card-preview-qr{ display:flex; flex-direction:column; align-items:center; gap:var(--s-3); margin-top:var(--s-2); }
  /* ⚠️ ٢٠٢٦-٠٧-٢٤ — خلل حقيقي انلقى بالتدقيق الشامل: هالعنصر بينخفى/بيظهر عبر خاصية
     hidden بالجافاسكريبت (previewQrWrap.hidden = true/false)، بس display:flex الصريح
     فوق كان يبطل تأثير hidden الافتراضي — يعني كتلة الـQR كانت تضل ظاهرة دايماً حتى
     لما المفروض تنخفى. نفس الباج الموثّق بالمشروع (انلقى ٦ مرات بجلسة سابقة). */
  .gift-card-preview-qr[hidden]{ display:none; }
  .gift-card-preview-qr svg{ width:80px; height:80px; }
  .gift-card-preview-qr span{ font-size:var(--t-xs); opacity:.55; }
  .gift-card-preview-empty{ font-size:var(--t-sm); opacity:.45; }
  /* صف تواصل ثابت أسفل كل بطاقة إهداء — واتساب وانستقرام جنب بعض بالنص، تحت توقيع المرسل */
  .gift-card-preview-contact{
    align-self:stretch; display:flex; align-items:center; justify-content:center;
    gap:var(--s-6); margin-top:var(--s-3); padding-top:var(--s-5); border-top:1px solid var(--p-black-a08);
  }
  /* ⚠️ ٢٠٢٦-٠٧-٢٦: كانت ترث لون النص (يميل للأزرق كروابط). صارت بلون العلامة — نفس
     لون الشعار فوقها بالبطاقة بالضبط. */
  .gift-card-preview-contact-item{
    display:flex; align-items:center; gap:var(--s-2); font-size:var(--t-xs); opacity:.72;
    white-space:nowrap; color:var(--brand); text-decoration:none;
  }
  .gift-card-preview-contact-item svg{ width:13px; height:13px; stroke:currentColor; fill:none; stroke-width:1.6; flex:0 0 auto; }

  /* ============ مناسباتي + سجل الهدايا ============ */
  .gift-history-item{
    display:flex; gap:var(--s-4); align-items:center; padding:var(--s-4);
    border:1px solid var(--p-black-a08); border-radius:var(--r-md); margin-bottom:var(--s-4);
  }
  .gift-history-item img{
    width:56px; height:56px; border-radius:var(--r-sm); object-fit:cover; flex:0 0 auto; background:var(--ivory-card-bg);
  }
  /* شبكة كروت "مناسباتي" — بديل الصف الأفقي القديم، بشكل يشبه كروت المنتج بالصفحة الرئيسية */
  #occDetailProducts{
    display:grid; grid-template-columns:repeat(auto-fill, minmax(126px,1fr)); gap:var(--s-4);
  }
  #occDetailProducts .empty-state-note{ grid-column:1/-1; }
  /* شبكة "المجموعات" لمناسباتي — كرت غلاف لكل مناسبة + المحفوظات العامة، بنفس نمط Instagram */
  #occasionsList{ display:grid; grid-template-columns:1fr 1fr; gap:var(--s-5) var(--s-5); margin-bottom:var(--s-6); }
  #occasionsList .empty-state-note{ grid-column:1/-1; }
  #giftHistoryGroupsGrid{ display:grid; grid-template-columns:1fr 1fr; gap:var(--s-5) var(--s-5); }
  #giftHistoryGroupsGrid .empty-state-note{ grid-column:1/-1; }
  /* شبكة "تصفح المنتجات" — شاشة عرض نظيفة لأي مجموعة منتجات مفلترة (مناسبة/قسم/بدون فلتر) */
  .browse-grid{ display:grid; grid-template-columns:1fr 1fr; gap:var(--s-5); }
  .browse-grid .empty-state-note{ grid-column:1/-1; }
  /* ⚠️ P109 — حُذفت هنا قاعدةُ السطح الخاصّة: صارت مكرَّرةً حرفياً للقاعدة
     الموحّدة أعلى الملف، وبقاؤها بعدها في الترتيب يعني أنها تغلبها فيعود
     التفاوت من حيث أُزيل. */
  .browse-product-img{ width:100%; aspect-ratio:var(--card-img-ratio); display:block; background:var(--ivory-card-bg); }
  .browse-product-img img{ width:100%; height:100%; object-fit:var(--card-img-fit); display:block; }
  .browse-product-info{ padding:var(--s-3) var(--s-4) var(--s-4); display:flex; flex-direction:column; gap:var(--s-2); }
  .browse-product-name{ font-size:var(--t-sm); font-weight:var(--w-bold); line-height:1.35; }
  .browse-product-price{ font-size:var(--t-sm); color:var(--brand); }

  .browse-search-row{
    display:flex; align-items:center; gap:var(--s-3);
    margin:var(--s-3) 0 var(--s-2); padding:0 var(--s-3) 0 var(--s-5); border-radius:var(--r-md);
    border:1px solid var(--p-black-a12);
  }
  /* ⚠️ P159 · ٢٠٢٦-٠٩-٢١ — حقل البحث لم يعد عاجياً كخلفية الدرج (قرار المالك).
     كان بلا خلفيةٍ خاصّة، فيأخذ عاج الورقة ويختفي كحقلٍ: حدٌّ رفيع حول فراغ.
     الآن أبيضُ أفتح من الورقة مع ظلٍّ داخليّ خفيف — يقرأ كحقلٍ يُكتب فيه، بلا
     أن يخرج عن لغة الزجاج والعاج. والظلّ داخليّ لا خارجيّ: الخارجي يرفع الحقل
     فوق الورقة ويكسر هدوء السطح. */
  .browse-search-row{
    /* ⚠️ P159 (مراجعة المالك) — بلون الورقة نفسه لا أبيضَ أفتح منها: الحقل
       يُعرف بالظلّ الداخلي والحلقة عند التركيز، لا بلونٍ مختلف يقطع هدوء
       السطح العاجي. */
    background:var(--p-fffdf9);
    border-color:var(--p-ink-a10);
    box-shadow:inset 0 1px 2px var(--p-ink-a06);
  }
  .browse-search-row:focus-within{
    border-color:var(--p-brand-a45);
    box-shadow:inset 0 1px 2px var(--p-ink-a06), 0 0 0 3px var(--p-brand-a10);
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P183 · ٢٠٢٦-٠٩-٢١ — حقل البحث بلون الورقة فعلاً (مراجعة المالك، الثالثة).

     العطل: طلب المالك مرّتين أن يكون الحقل «بنفس لون الورقة»، وفي P159 كتبتُ
     ‎#FFFDF9‎ ظنّاً أنه لون الورقة — وهو ليس كذلك: ورقة الموقع ‎--ivory‎
     (‎#F2EEE4‎)، و‎#FFFDF9‎ أفتح منها بدرجتين. وفوق الدرج الزجاجي (أبيضُ بشفافية
     ‎0.72‎ مع طمس) يزداد الفرق فيقرأ الحقل أبيضَ صريحاً داخل ورقةٍ عاجية.
     العلاج: اللون هو المتغيّر نفسه الذي تُصبَغ به الصفحة — لا قيمةً مكتوبة
     بالتقريب. فإن تغيّرت الهوية يوماً تبعها الحقل بلا تعديل.
     والحقل يبقى مقروءاً حقلاً بالظلّ الداخلي وحلقة التركيز الزيتونية، لا بلونٍ
     أفتح يقطع هدوء السطح.
     ══════════════════════════════════════════════════════════════════════════ */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P184 · ٢٠٢٦-٠٩-٢١ — الحقل بلا لونٍ إطلاقاً (طلب المالك، الرابعة).

     تتبُّع المحاولات، لأن الخطأ فيها واحد: P159 جعله ‎#FFFDF9‎، وP183 جعله
     ‎--ivory‎ (‎#F2EEE4‎). كلاهما لونٌ مصمت، وسطح الدرج ليس لوناً مصمتاً بل
     أبيضُ بشفافية ‎0.72‎ فوق طمس — فلونه المرئي يتغيّر بما تحته. فأيّ قيمةٍ
     أكتبها ستختلف عنه في مكان، ومهما قاربتُها يبقى الحقل «بلون غير لون الورقة».
     العلاج الوحيد الصحيح: لا خلفية. الحقل يرث سطح الورقة نفسه مهما تغيّر،
     ويُبرزه إطارٌ زيتونيٌّ وحده — وهو نصّ الطلب حرفياً: «بنفس لون الورقة بس
     إطار يبرزها». والظلّ الداخلي سقط معه: كان يوهم بلونٍ أغمق قليلاً.
     ══════════════════════════════════════════════════════════════════════════ */
  .browse-search-row{
    background:none;
    border-color:var(--p-brand-a30);
    box-shadow:none;
  }
  .browse-search-row:focus-within{
    border-color:var(--p-brand-a55);
    box-shadow:0 0 0 3px var(--p-brand-a10);
  }
  .browse-search-row svg{ width:16px; height:16px; flex:0 0 auto; opacity:.5; }
  .browse-search-row input{
    flex:1; min-width:0; border:none; background:none; outline:none;
    padding:var(--s-4) 0; font-size:var(--t-sm); color:inherit; font-family:inherit;
  }
  .browse-search-row .sheet-close-btn{ opacity:.5; }
  /* عنوان الفلتر الحالي (لو موجود، زي "هدايا فاخرة") — تسمية فرعية صغيرة تحت صف البحث
     مباشرة، مو عنوان كبير منفصل بصف لحاله. بتختفي كلياً بوضع البحث الحر (نص فاضي). */
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ (المرحلة ٣) — مسار الكميات. */
  .bulk-intro{ font-size:var(--t-sm); line-height:1.85; opacity:.65; margin:0 0 var(--s-6); }
  .bulk-services{ display:flex; flex-direction:column; gap:var(--s-3); margin-bottom:var(--s-7); }
  .bulk-service{
    display:flex; flex-direction:column; align-items:flex-start; gap:var(--s-2);
    padding:var(--s-5) var(--s-5); border-radius:var(--r-md); cursor:pointer; text-align:start;
    background:none; color:inherit;
    border:1px solid var(--p-brand-a18);
    transition:border-color .2s ease, background .2s ease;
  }
  .bulk-service:hover{ border-color:var(--brand); background:var(--p-brand-a05); }
  .bulk-service.active{ border-color:var(--brand); background:var(--p-brand-a08); }
  .bulk-service-name{ font-size:var(--t-sm); font-weight:var(--w-bold); }
  .bulk-service-note{ font-size:var(--t-xs); opacity:.55; }
  .bulk-form{ padding-top:var(--s-7); border-top:1px solid var(--p-brand-a12); }
  .bulk-form h4{ font-size:var(--t-sm); font-weight:var(--w-bold); margin-bottom:var(--s-5); }
  .bulk-form .cart-address{ margin-bottom:var(--s-4); }
  .bulk-notes{ height:88px; resize:none; }
  .bulk-lead{ display:block; font-size:var(--t-xs); opacity:.5; line-height:1.75; margin:var(--s-2) 0 var(--s-5); }
  .bulk-wa{
    display:flex; align-items:center; justify-content:center; gap:var(--s-3);
    margin-top:var(--s-4); padding:var(--s-4); border-radius:var(--r-full); text-decoration:none;
    color:inherit; font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.7;
    border:1px solid var(--p-brand-a22);
  }
  .bulk-wa svg{ width:15px; height:15px; }

  /* ⚠️ ٢٠٢٦-٠٧-٢٦ (الطبقة ٦) — شاشة حالة الطلب. */
  /* الزر الثانوي بشاشة النجاح — بلا تعبئة عشان الأساسي (تابع طلبك) يبقى واضح */
  .cart-secondary-btn{
    background:none !important; color:inherit !important;
    border:1px solid var(--p-brand-a28) !important; margin-top:var(--s-3);
  }

  .os-empty{ text-align:center; padding:36px 20px 30px; }
  .os-empty p{ font-size:var(--t-sm); font-weight:var(--w-bold); margin-bottom:var(--s-3); }
  .os-empty span{ font-size:var(--t-sm); opacity:.55; line-height:1.8; display:block; max-width:34ch; margin:0 auto; }
  .os-empty[hidden], .os-journey[hidden]{ display:none !important; }
  .os-list{ display:flex; flex-direction:column; gap:var(--s-4); }
  .os-card{
    border:1px solid var(--p-brand-a16); border-radius:var(--r-md);
    padding:var(--s-5) var(--s-5); display:flex; flex-direction:column; gap:var(--s-3);
  }
  .os-card-top{ display:flex; align-items:center; justify-content:space-between; gap:var(--s-4); }
  .os-num{ font-size:var(--t-sm); font-weight:var(--w-bold); }
  .os-date{ font-size:var(--t-xs); opacity:.5; }
  .os-line{ font-size:var(--t-sm); opacity:.65; line-height:1.7; }
  .os-badge{
    align-self:flex-start; font-size:var(--t-xs); font-weight:var(--w-bold);
    padding:var(--s-2) var(--s-4); border-radius:var(--r-full);
    background:var(--p-brand-a10); color:var(--brand);
  }

  .os-journey{ margin-top:var(--s-7); padding-top:var(--s-7); border-top:1px solid var(--p-brand-a12); }
  .os-journey h4{ font-size:var(--t-sm); font-weight:var(--w-bold); margin-bottom:var(--s-5); }
  .os-steps{ list-style:none; display:flex; flex-direction:column; gap:var(--s-5); margin-bottom:var(--s-6); }
  .os-steps li{ display:flex; gap:var(--s-4); align-items:flex-start; }
  .os-step-n{
    flex:0 0 auto; width:var(--icon-24); height:var(--icon-24); border-radius:50%;
    display:flex; align-items:center; justify-content:center;
    font-size:var(--t-xs); font-weight:var(--w-bold);
    background:var(--p-brand-a12); color:var(--brand);
  }
  .os-steps strong{ display:block; font-size:var(--t-sm); font-weight:var(--w-bold); margin-bottom:var(--s-2); }
  .os-steps em{ display:block; font-size:var(--t-xs); font-style:normal; opacity:.55; line-height:1.75; }
  .os-wa-btn{
    display:flex; align-items:center; justify-content:center; gap:var(--s-3);
    padding:var(--s-5); border-radius:var(--r-full); text-decoration:none;
    background:var(--brand); color:var(--p-ivory); font-size:var(--t-sm); font-weight:var(--w-bold);
  }
  .os-wa-btn svg{ width:17px; height:17px; }
  .os-note{ text-align:center; font-size:var(--t-xs); opacity:.45; margin-top:var(--s-4); line-height:1.7; }

  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٢٦ (المرحلة ٣) — رأس المجموعة.
     صورة عريضة نسبتها 5:2 بحواف مستديرة، والعنوان تحتها لا فوقها — عشان الصورة تشتغل
     كـ"غلاف" مو كخلفية نص. هاد يفرق المجموعة بصرياً عن أي ورقة تانية بالموقع، فيحس
     الزائر إنه **انتقل لمكان**، مو إنه فتح لوح.
     ⚠️ بدون filter ولا backdrop-filter — عنصر بحواف مستديرة داخل ورقة عليها زجاج. */
  /* ⚠️ P97 — الهامش العلوي أُلغي: الترويسة فوقها لها فاصلها الخاصّ (P94)،
     فهامشٌ إضافي هنا يضاعف الفراغ الذي رصده المالك. */
  .collection-head{ margin:0 0 var(--s-6); }
  .collection-head[hidden]{ display:none !important; }
  .collection-cover{
    width:100%; aspect-ratio:5/2; border-radius:var(--r-md); overflow:hidden;
    background:var(--p-brand-a07);
  }
  .collection-cover img{ width:100%; height:100%; object-fit:cover; display:block; }
  /* ⚠️ P173 · ٢٠٢٦-٠٩-٢١ — رأس المجموعة شريطٌ نصّي لا صور (قرار المالك).
     زجاج الصفحة نفسه، وسطرٌ واحد يحمل العدد والوعد. ارتفاعه ثابتٌ قصير،
     فلا يؤخّر أول صفٍّ من المنتجات عن أول شاشة. */
  .collection-head{
    padding:var(--s-4) var(--s-5);
    border-radius:var(--r-md);
    background:var(--glass-bg-on-light);
    border:1px solid var(--glass-border-on-light);
  }
  .collection-line{
    margin:0; font-size:var(--t-xs); line-height:1.8; opacity:.66;
  }
  @media (min-width:768px){ .collection-line{ font-size:var(--t-sm); } }
  /* ⚠️ P98 — الحشو العلوي قُلّص: كان يفصل العنوان عن الصورة، وقد سقط العنوان
     من هنا (صار في الترويسة) فلم يبقَ تحتها إلا الوصف. */
  .collection-meta{ padding:var(--s-3) var(--s-1) 0; }
  .collection-title[hidden], .collection-count[hidden]{ display:none !important; }
  /* ⚠️ P98 — عنوان الترويسة في وضع المجموعة أكبر قليلاً (طلب المالك: «كلمة ورد
     كعنوان تصير أكبر شوي فوق وتحتها الخط الصغير»). ١٩px مطابقاً لما كان عليه
     عنوان رأس المجموعة قبل إسقاطه، فلا يخسر شيئاً بانتقاله للأعلى. */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P99 — شكل رأس المجموعة كما رسمه المالك:
                              **الورد**
                  ورد مُنسَّق بيدنا، يُجهَّز يوم الطلب
        العنوان أكبر ووسطاً، والوصف تحته مباشرةً وسطاً كذلك — سطران متمركزان
        لا عنوانٌ فوق ووصفٌ محاذٍ لليمين كما كان.
     ⚠️ والوصف انتقل إلى الترويسة تحت العنوان بدل أن يبقى تحت الصورة: هكذا
        يقرأهما الزائر معاً كوحدة واحدة، وهو ما يعنيه الرسم. */
  #browseSheet .browse-head-row.has-collection .browse-head-title{ font-size:var(--t-lg); }
  .browse-head-sub{
    grid-column:2; grid-row:2;
    text-align:center; font-size:var(--t-sm); line-height:1.7; opacity:.6;
    margin:var(--s-1) 0 0; max-width:44ch; justify-self:center;
    overflow:hidden; text-overflow:ellipsis;
  }
  .browse-head-sub[hidden]{ display:none !important; }
  /* ⚠️ P108 — والفارغ كالمخفيّ: يُملأ من القاعدة، وحتى يصل يبقى عنصرَ شبكةٍ
     يحجز صفّاً بلا نصّ. العقد أعلاه يكفي وحده، وهذا حزامٌ ثانٍ. */
  .browse-head-sub:empty{ display:none; }
  .collection-title{ font-size:var(--t-lg); font-weight:var(--w-bold); line-height:1.4; margin:0 0 var(--s-2); }
  .collection-sub{ font-size:var(--t-sm); line-height:1.8; opacity:.6; margin:0 0 var(--s-3); max-width:44ch; }
  .collection-count{
    display:inline-block; font-size:var(--t-xs); font-weight:var(--w-bold);
    padding:var(--s-2) var(--s-4); border-radius:var(--r-full);
    background:var(--p-brand-a10); color:var(--brand);
  }

  /* سطر الوعد بأسفل المجموعة — هادي جداً، بلا حدود ولا أيقونات */
  .collection-promise{
    display:flex; flex-wrap:wrap; align-items:center; justify-content:center;
    gap:var(--s-2) var(--s-3); margin:var(--s-7) 0 var(--s-3); padding-top:var(--s-6);
    border-top:1px solid var(--p-brand-a10);
    font-size:var(--t-xs); opacity:.5; text-align:center;
  }
  .collection-promise[hidden]{ display:none !important; }
  .cp-dot{ opacity:.4; }
  @media (min-width:768px){
    .collection-cover{ aspect-ratio:16/5; border-radius:var(--r-lg); }
    .collection-title{ font-size:var(--t-xl); }
    .collection-sub{ font-size:var(--t-sm); }
  }

  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — صف الرأس، حقل البحث، وصف الفلاتر بورقة التصفح. */
  /* ⚠️ P93 — ترويسة ورقة التصفّح تتبع القاعدة الموحّدة نفسها. كانت الوحيدة
     بصنفٍ خاصّ (browse-head-row) فبقيت خارج التوحيد، وعنوانها إلى اليمين لا
     وسطاً. صارت شبكةً ثلاثية مطابقة لبقيّة الأوراق — والفرق الوحيد الباقي
     هامشها السفلي، لأن تحتها حقل بحث لا محتوى مباشر. */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P99 — بنيتها من القاعدة الموحّدة (الشبكة والعنوان والأزرار). ولا يبقى
        هنا إلا حشوها وفاصلها، وكلاهما بالمتغيّرات المشتركة لا بأرقامٍ مكرّرة.
     ⚠️ وكانت هذه الكتلة تعيد تعريف الشبكة بأرقامٍ مكتوبة، وتقع **بعد** القاعدة
        الموحّدة فتغلبها بالترتيب — فيبقى «التوحيد» اسماً بلا أثر. حُذفت.
     ══════════════════════════════════════════════════════════════════════════ */
  .browse-head-row{
    padding:var(--sheet-head-pad-top) 0 var(--sheet-head-pad-bottom);
    border-bottom:var(--sheet-head-border);
    margin-bottom:var(--sheet-head-gap);
  }
  .browse-clear-btn{
    flex:0 0 auto; width:var(--icon-24); height:var(--icon-24); border-radius:50%;
    border:none; background:var(--p-ink-a08); color:inherit;
    font-size:var(--t-xs); line-height:1; cursor:pointer; opacity:.6;
  }
  .browse-clear-btn[hidden]{ display:none !important; }
  /* ⚠️ P92 — باب الاستوديو: بارزٌ بلون العلامة لأنه مسارٌ ثانٍ لا فلتر،
     ومكانه فوق الشبكة مباشرةً ليُرى قبل التصفّح لا بعده. */
  .browse-studio-link{
    display:flex; align-items:center; gap:var(--s-4); width:100%;
    margin:0 0 var(--s-5); padding:var(--s-4) var(--s-5); border-radius:var(--r-md);
    background:var(--p-brand-a07); border:1px solid var(--p-brand-a28);
    color:inherit; cursor:pointer; text-align:start; font-family:inherit;
  }
  .browse-studio-link[hidden]{ display:none !important; }
  .browse-studio-link .bsl-text{ display:flex; flex-direction:column; gap:var(--s-1); flex:1; min-width:0; }
  .browse-studio-link .bsl-title{ font-size:var(--t-sm); font-weight:var(--w-bold); color:var(--brand); }
  .browse-studio-link .bsl-sub{ font-size:var(--t-xs); opacity:.7; }
  .browse-studio-link .bsl-arrow{ flex:0 0 auto; width:15px; height:15px; opacity:.5; }
  .browse-studio-link .bsl-arrow svg{ width:100%; height:100%; display:block; }

  .browse-filters{
    display:flex; gap:var(--s-3); overflow-x:auto;
    padding:var(--s-4) 0 var(--s-2); margin:0 0 var(--s-3);
    /* ⚠️ P173 · ٢٠٢٦-٠٩-٢١ — الفلاتر تبدأ من اليمين (قرار المالك: «أساسه من
       جهة اليمين لا اليسار بكل مكان»). كانت direction:ltr — قاعدةٌ اعتُمدت
       لحاويات السحب الأفقي، فصار أول فلترٍ («الكل») في أقصى اليسار بينما عين
       القارئ العربي تبدأ يميناً، فيبدو الصفّ مقلوباً ومبتوراً من بدايته.
       الترتيب المنطقي (DOM) لم يتغيّر — اتجاه العرض وحده. */
    direction:rtl;
    -webkit-overflow-scrolling:touch; scrollbar-width:none;
  }
  .browse-filters::-webkit-scrollbar{ display:none; }
  /* وبالإنجليزية يعود الصفّ لاتجاه لغته — الاتجاه يتبع النصّ لا الصفحة. */
  body.lang-en .browse-filters{ direction:ltr; }
  .browse-filters:empty{ display:none; }
  /* ⚠️ P42 — سطر الارتداد: هادئ لأنه تفسير لا إعلان، وواضح لأنه صدق لا اعتذار */
  .browse-fallback-note{
    font-size:var(--t-sm); line-height:1.6; opacity:.62;
    margin:var(--s-1) 0 var(--s-4); text-align:start;
  }
  .browse-fallback-note[hidden]{ display:none; }
  .browse-chip{
    flex:0 0 auto; direction:rtl;
    display:flex; align-items:center; gap:var(--s-2);
    padding:var(--s-3) var(--s-4); border-radius:var(--r-full);
    font-size:var(--t-xs); font-weight:var(--w-bold); cursor:pointer;
    background:none; color:inherit;
    border:1px solid var(--p-brand-a22);
    transition:background .18s ease, border-color .18s ease, color .18s ease;
  }
  .browse-chip:hover{ border-color:var(--brand); }
  .browse-chip .bc-count{ font-size:var(--t-micro); opacity:.5; }
  .browse-chip.active{
    background:var(--brand); border-color:var(--brand); color:var(--p-ivory); font-weight:var(--w-bold);
  }
  .browse-chip.active .bc-count{ opacity:.7; }

  .browse-filter-title{
    font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.6; margin:0 var(--s-1) var(--s-5);
  }
  .browse-filter-title:empty{ display:none; margin:0; }
  .occ-collection-card{
    display:flex; flex-direction:column; align-items:flex-start; gap:var(--s-3);
    background:none; border:none; padding:0; cursor:pointer; text-align:start; color:inherit;
  }
  .occ-collection-cover{
    width:100%; aspect-ratio:1/1; border-radius:var(--r-md); overflow:hidden; flex:0 0 auto;
    background:var(--ivory-card-bg); border:1px solid var(--glass-border-on-light);
    display:flex; align-items:center; justify-content:center;
  }
  .occ-collection-cover img{ width:100%; height:100%; object-fit:cover; display:block; }
  .occ-collection-cover-icon svg{ width:34px; height:34px; }
  .occ-collection-label{ font-size:var(--t-sm); font-weight:var(--w-bold); line-height:1.3; }
  .occ-collection-meta{ font-size:var(--t-xs); opacity:.6; }
  .occasion-detail-product{
    display:flex; flex-direction:column; overflow:hidden; border-radius:var(--r-md);
    border:1px solid var(--glass-border-on-light);
    background:linear-gradient(155deg, var(--p-white-a50) 0%, var(--ivory-card-bg) 45%, var(--ivory-card-bg) 100%);
  }
  .occasion-detail-product .occasion-product-img{
    width:100%; aspect-ratio:var(--card-img-ratio); object-fit:var(--card-img-fit); background:var(--ivory-card-bg); display:block; cursor:pointer;
  }
  .occasion-detail-product .gift-history-item-info{ padding:var(--s-3) var(--s-3) 0; }
  .occasion-detail-product .gift-history-item-name{
    font-size:var(--t-sm); margin-bottom:var(--s-1);
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
  }
  .occasion-detail-product .gift-history-item-meta{ font-size:var(--t-xs); }
  .occasion-detail-product .occasion-product-actions{ padding:var(--s-3) var(--s-3) var(--s-3); justify-content:space-between; }
  .occasion-detail-product .occasion-product-btn{ width:28px; height:28px; font-size:var(--t-sm); }
  .gift-history-item-info{ flex:1; min-width:0; }
  .gift-history-item-name{ font-size:var(--t-sm); font-weight:var(--w-bold); margin-bottom:var(--s-1); }
  .gift-history-item-meta{ font-size:var(--t-xs); opacity:.6; line-height:1.6; }
  .occasion-product-actions{ display:flex; gap:var(--s-3); flex:0 0 auto; }
  .occasion-product-btn{
    width:var(--icon-32); height:var(--icon-32); border-radius:50%; border:1px solid var(--p-black-a12);
    background:none; color:inherit; display:flex; align-items:center; justify-content:center;
    cursor:pointer; font-size:var(--t-sm);
  }
  .occasion-product-btn.cart-action{ border-color:var(--brand); color:var(--brand); }
  .gift-history-group{ margin-bottom:var(--s-6); }
  .gift-history-group-title{ font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.7; margin-bottom:var(--s-4); padding:0 var(--s-1); }
  .gift-history-group-count{ font-weight:var(--w-normal); opacity:.7; }
  .gift-history-reorder-btn{
    flex:0 0 auto; padding:var(--s-3) var(--s-5); border-radius:var(--r-full); border:1px solid var(--brand);
    background:none; color:var(--brand); font-size:var(--t-xs); font-weight:var(--w-bold); cursor:pointer;
  }
  .empty-state-note{ text-align:center; padding:var(--s-8) 0; opacity:.5; font-size:var(--t-sm); }
  .save-btn.saved svg{ fill:var(--brand); stroke:var(--brand); }
  .gift-history-reorder-wrap{ display:flex; flex-direction:column; align-items:flex-end; gap:var(--s-3); }
  .box-preview{ display:flex; flex-direction:column; align-items:center; padding:var(--s-8) 0 var(--s-5); }
  .box-preview-lid{ width:150px; height:20px; background:var(--brand); border-radius:6px 6px 0 0; }
  .box-preview-body{
    width:170px; height:130px; background:var(--ivory-card-bg); border:2px solid var(--brand);
    border-top:none; display:flex; align-items:center; justify-content:center; padding:var(--s-5); text-align:center;
  }
  .box-preview-text{ font-size:var(--t-sm); font-weight:var(--w-bold); color:var(--brand); line-height:1.5; }
  .suggest-item.custom-write-item{ border-style:dashed; color:var(--brand); font-weight:var(--w-bold); }
  .suggest-item.selected{ background:var(--brand-soft); border-color:var(--brand); }

  .suggest-cats{ display:flex; gap:var(--s-3); overflow-x:auto; padding-bottom:var(--s-4); margin-bottom:var(--s-3); scrollbar-width:none; }
  .suggest-cat-btn{
    flex:0 0 auto; padding:var(--s-3) var(--s-5); border-radius:var(--r-full); border:1px solid var(--p-black-a12);
    background:none; color:inherit; font-size:var(--t-sm); cursor:pointer; white-space:nowrap;
  }
  .suggest-cat-btn.active{ background:var(--brand); border-color:var(--brand); color:var(--p-ivory); font-weight:var(--w-bold); }
  .suggest-item{
    width:100%; text-align:start; padding:var(--s-5); border-radius:var(--r-md); margin-bottom:var(--s-4);
    border:1px solid var(--p-black-a10); background:none; color:inherit; font-size:var(--t-sm); line-height:1.7; cursor:pointer;
  }
  .suggest-item:active{ background:var(--brand-soft); border-color:var(--brand); }

  .box-mode-toggle{ display:flex; gap:var(--s-3); margin-bottom:var(--s-5); }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P93 · ٢٠٢٦-٠٨-١٤ — ترويسة موحّدة لكل ورقة تُفتح من الأسفل (قرار المالك).

     ⚠️ المرجع الذي أرسله: عنوان **متوسّط**، وإغلاق يميناً (أوّل الاتجاه)، ورجوع
        يساراً، وحقل البحث أسفلهما مباشرةً.

     ⚠️ الحال قبل هذا: أربعٌ وعشرون ورقة بترويسات غير متّسقة — بعضها «عنوان ثم
        إغلاق»، وبعضها «رجوع ثم عنوان»، والعنوان في جميعها **غير متوسّط** لأن
        space-between يوزّع المساحة بين عنصرين لا حول عنصر. فموضع العنوان كان
        يتغيّر من ورقة لأخرى تبعاً لوجود زرّ الرجوع من عدمه.

     ⚠️ والعلاج بقاعدة واحدة لا بتعديل أربعةٍ وعشرين موضعاً: شبكة من ثلاثة أعمدة
        متساوية الطرفين (٣٦px يميناً ويساراً) والعنوان يملأ الوسط. فيتوسّط
        العنوان **دائماً** سواء وُجد زرّ الرجوع أم لا — لأن العمودين محجوزان
        بعرضهما حتى وهما فارغان.

     ⚠️ ولم تُنقل الأزرار في الترميز: ترتيب الأعمدة يُحسم بـorder لا بإعادة كتابة
        أربعٍ وعشرين ترويسة. فالإغلاق (:last-child) يذهب للعمود الأول والرجوع
        للأخير، مهما كان ترتيبهما في المصدر — وهذا يمنع طبقة أخطاء كاملة كان
        سيُنتجها نقلٌ يدوي في أربعةٍ وعشرين موضعاً.
     ══════════════════════════════════════════════════════════════════════════════ */
  .sheet-title-row,
  .browse-head-row,
  .cart-header{
    display:grid;
    grid-template-columns:var(--sheet-side-col) 1fr var(--sheet-side-col);
    align-items:center;
    gap:var(--s-3);
  }
  /* العنوان (العنصر النصّي) وسطاً دائماً */
  .sheet-title-row > span,
  .browse-head-row > .browse-head-title,
  .cart-header > .cart-title{
    grid-column:2; grid-row:1; text-align:center; min-width:0;
    overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
    font-size:var(--sheet-title-size);
    font-weight:var(--sheet-title-weight);
    letter-spacing:-0.01em;
  }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P108 · ٢٠٢٦-٠٨-١٥ — عقدٌ صريح للترويسة: الصفُّ يُذكَر ولا يُترك للترتيب.

     ⚠️ العطل (رصد المالك بصورتين متقابلتين): ورقة المنتج تُظهر ✕ والعنوان في
        سطرٍ واحد، وورقة التصفّح تُظهر العنوان في سطرٍ و✕ تحته في سطرٍ ثانٍ —
        بالقاعدة الموحّدة نفسها حرفياً.

     ⚠️ السبب هو الوضع التلقائي في الشبكة: .browse-head-sub مصرَّحٌ عند
        grid-row:2، ويبقى عنصرَ شبكةٍ حتى وهو فارغٌ بلا نصّ (لا يُخفى إلّا بسمة
        hidden). فبمجرّد وضعه ينتقل مؤشّر الوضع التلقائي إلى الصفّ الثاني، فيجد
        زرُّ الإغلاق — المصرَّح بعموده لا بصفّه — أوّلَ موضعٍ متاحٍ له في الصفّ
        الثاني لا الأول. أي أن ترتيب الأبناء في الترميز كان يقرّر التخطيط، وهو
        ما جعل ورقتين بقاعدةٍ واحدة تُرسمان بشكلين.

     ⚠️ والعلاج عقدٌ لا ترقيع: كلّ عنصرٍ في الترويسة يُصرَّح بعموده **وصفّه**
        معاً، فتصير الترويسة مستقلّةً عن ترتيب أبنائها وعن أيّ ابنٍ يُضاف لاحقاً.
     ⚠️ ويبقى سطر مرحلة السلة وحده على grid-row:2 بقصد — هو الوحيد المصمَّم
        ليقع تحت العنوان.
     ══════════════════════════════════════════════════════════════════════════════ */
  /* الإغلاق أوّل الاتجاه (يمين في RTL)، والرجوع آخره */
  .sheet-title-row > .sheet-close-btn,
  .browse-head-row > .sheet-close-btn,
  .cart-header > .sheet-close-btn{ grid-column:1; grid-row:1; justify-self:start; }
  .sheet-title-row > .sheet-back-btn,
  .browse-head-row > .sheet-back-btn,
  .cart-header > .sheet-back-btn{ grid-column:3; grid-row:1; justify-self:end; }
  /* ⚠️ P99 — سطر المرحلة في السلة يقع تحت العنوان داخل العمود الأوسط نفسه،
     فلا يزيح العنوان ولا يخرج عن الشبكة. */
  .cart-header > .cart-step-count{ grid-column:2; grid-row:2; text-align:center; }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P94 · ٢٠٢٦-٠٨-١٤ — تفاصيل الترويسة، لا بنيتها (رصد المالك).

     ⚠️ P93 وحّدت المواضع وتركت الشكل. والمالك يقيس على مرجعٍ من iOS، وفيه ثلاثة
        تفاصيل تصنع الإحساس ولا تظهر في وصف البنية:
        · الزرّ **قرصٌ معتم** لا محرفٌ عائم — سطح ملموس له حدّ واضح.
        · الأيقونة **رفيعة داخل القرص** بهامش واضح حولها، لا تملؤه.
        · العنوان **أثقل وزناً** ممّا كان، فيقود الترويسة بدل أن يساوي الأزرار.

     ⚠️ والقرص ٣٢px لا ٣٦: عمود الشبكة ٣٦، فيبقى للقرص هامشٌ يتنفّس فيه داخل
        عموده بدل أن يلاصق حافّته. والمساحة القابلة للمس تبقى ٤٦px بالطبقة
        الشفافة أسفله (::after)، فوق حدّ آبل الأدنى (٤٤).

     ⚠️ ولا لون علامة على القرص: هو تنقّلٌ محايد لا فعلٌ رئيس. اللون الزيتوني
        محجوز لأزرار الإجراء (المتابعة، التأكيد) — وإعطاؤه للإغلاق يخلط
        المستويين، وهي قاعدة قائمة في هذا الملف.
     ══════════════════════════════════════════════════════════════════════════════ */
  .sheet-close-btn{
    width:var(--icon-44); height:var(--icon-44); background:var(--p-ink-a06);
    border:none; color:inherit; font-size:var(--t-base); font-weight:var(--w-normal); line-height:1; cursor:pointer; flex:0 0 auto;
    display:flex; align-items:center; justify-content:center;
    border-radius:50%;
    opacity:1;
    transition:background .2s ease, transform .15s ease;
  }
  .sheet-close-btn:hover{ background:var(--p-ink-a10); }
  .sheet-close-btn:active{ transform:scale(0.94); }
  /* الأيقونة رفيعة داخل القرص لا مالئةً له */
  .sheet-close-btn svg{ width:15px; height:15px; display:block; }

  /* ============ نماذج الاستوديوهات (توزيع + تصميم مخصص) ============ */
  .studio-textarea{
    width:100%; margin-top:var(--s-4); padding:var(--s-4); border-radius:var(--r-sm);
    border:1px solid var(--p-black-a12); background:none; color:inherit; font-size:var(--t-sm);
    font-family:inherit; resize:none; height:96px;
  }
  .studio-upload{
    display:flex; align-items:center; gap:var(--s-4);
    width:100%; margin-top:var(--s-4); padding:var(--s-4); border-radius:var(--r-sm);
    border:1px dashed var(--p-black-a20); background:none; color:inherit; font-size:var(--t-sm);
    cursor:pointer; text-align:start;
  }
  .studio-upload svg{ width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:1.6; flex:0 0 auto; opacity:.7; }
  .studio-upload .studio-upload-text{ display:flex; flex-direction:column; gap:var(--s-2); }
  .studio-upload .studio-upload-name{ font-size:var(--t-xs); opacity:.6; }
  .studio-upload input[type=file]{ display:none; }
  /* صف حاسبة الكمية باستوديو التوزيع — حقل عدد الضيوف + اختيار نصيب الفرد جنب بعض */
  .dist-calc-row{ display:flex; gap:var(--s-4); }
  .dist-calc-row input{ flex:1; }
  .dist-calc-row select{ flex:1.3; appearance:none; cursor:pointer; }
  /* ⚠️ P96 — رُفع flex:1 من هنا إلى الحالة التي تحتاجه وحدها.

     ⚠️ ولماذا تكرّر العطل رغم «إصلاحه» في P95: كتبتُ هناك قاعدةً تُلغيه داخل
        الخليّة (.cart-datetime-cell) عند السطر ٨٩٣، وهذه القاعدة الأساس عند
        السطر ١٤٢٩ — أي **بعدها**. والمحدِّدان متساويا الأسبقية، فيحسم الترتيب
        لا النيّة، فبقي flex:1 غالباً ولم يتغيّر شيء على الشاشة.
        وهي بالحرف علّة P59 التي كلّفتنا دورةً كاملة، ووقعتُ فيها ثانيةً.

     ⚠️ والعلاج بالجذر لا بمحدِّدٍ أقوى: الحقلان لم يعودا أبناءً مباشرين للصفّ
        المرن (لكلٍّ خليّته منذ P91)، فـflex:1 عليهما لا معنى له أصلاً — يُحذف
        بدل أن يُبطَل. ويبقى على .dist-date-input وحده حيث ما زال ابناً مباشراً. */
  .cart-date-input, .cart-time-input{
    /* ⚠️ P114 — «الخانتان بعدهما على حالهما». حدٌّ بشفافية ١٢٪ لا يكاد يُرى،
       ونوعا date/time لا يقبلان نصّاً إرشادياً بحكم المواصفة، فتبدو الخانة
       الفارغة شريطاً باهتاً لا حقلاً. فقوِّي الحدّ، وثبّت الارتفاع على درجة
       السلّم كبقيّة أهداف اللمس، وامنع تنسيق النظام من ابتلاع الشكل. */
    width:100%; box-sizing:border-box;
    min-height:var(--icon-44);
    padding:var(--s-3) var(--s-4);
    border-radius:var(--r-sm);
    border:1px solid var(--p-black-a22);
    background:none; color:inherit;
    font-family:inherit; font-size:var(--t-sm);
    -webkit-appearance:none; appearance:none;
    color-scheme:light;
  }

  .cart-radio-row{
    display:flex; align-items:center; gap:var(--s-4);
    padding:var(--s-4) 0; font-size:var(--t-sm); cursor:pointer;
  }
  .cart-radio-row input{ width:18px; height:18px; accent-color:var(--brand); }

  .cart-totals{ margin-top:var(--s-5); padding-top:var(--s-4); border-top:1px solid var(--p-black-a08); }
  .cart-totals-row{ display:flex; justify-content:space-between; padding:var(--s-3) 0; font-size:var(--t-sm); opacity:.75; }
  .cart-totals-row[hidden]{ display:none; }
  .cart-totals-total{ font-size:var(--t-base); font-weight:var(--w-bold); opacity:1; padding-top:var(--s-4); }

  .cart-step-success{ text-align:center; padding:var(--s-6) 0 var(--s-2); }
  .cart-success-icon{
    width:var(--icon-56); height:var(--icon-56); margin:0 auto 16px;
    border-radius:50%; background:var(--brand); color:var(--p-ivory);
    display:flex; align-items:center; justify-content:center;
  }
  .cart-success-icon svg{ width:26px; height:26px; }
  .cart-success-title{ font-size:var(--t-md); font-weight:var(--w-bold); margin-bottom:var(--s-3); }
  .cart-success-sub{ font-size:var(--t-sm); opacity:.6; margin-top:var(--s-5); }
  .cart-order-number{
    font-family:var(--font-en); direction:ltr; font-size:var(--t-lg); font-weight:var(--w-bold);
    letter-spacing:1px; margin:var(--s-2) 0 var(--s-7);
  }

  /* ============ الـ Hero ============ */
  .hero{
    position:relative;
    height:100vh;      /* ⚠️ P79 — احتياطي لمتصفحات لا تدعم svh */
    height:100svh;
    min-height:560px;
    overflow:hidden;
  }
  .hero-slides{
    position:absolute; inset:0; z-index:0;
    display:flex; overflow-x:auto; scroll-snap-type:x mandatory;
    scrollbar-width:none; -webkit-overflow-scrolling:touch;
    /* ⚠️ ٢٠٢٦-٠٧-٢٤ — السبب الجذري الحقيقي لتعطّل السكرول العمودي أول ما يفتح الموقع على
       الموبايل: كانت القيمة هون `pan-x` بس، وهاي تعليمة صريحة للمتصفح نفسه معناها "على
       هالعنصر اسمح بالسحب الأفقي فقط". والهيرو بياخد الشاشة كاملة (100svh) أول ما تفتح
       الصفحة — يعني أي سحب عمودي بيبلش فوقه كان يترفض من المتصفح مباشرة، قبل ما يوصل
       لأي كود عنا. (وهاد يفسّر بالضبط إنه الضغط بنص الشاشة كان يشتغل: الكريستالة عنصر
       منفصل فوقه وما عليها هالقيد.) على الكمبيوتر ما بتظهر المشكلة إطلاقاً لأنه
       touch-action ما إلها أي تأثير على عجلة الماوس.
       الحل: `pan-x pan-y` — بيسمح بالاتجاهين، والمتصفح بيحدد الاتجاه الغالب من الإيماءة
       نفسها (سحب أفقي = تنقل بين الشرائح، سحب عمودي = سكرول الصفحة). السناب الأفقي
       (scroll-snap-type:x) بيضل شغال تماماً زي ما هو. */
    touch-action:pan-x pan-y; cursor:grab; user-select:none;
    /* ⚠️ الصفحة كلها RTL، وهاد بيقلب معنى scrollLeft (بيصير صفر أو سالب دايماً بمعظم
       المتصفحات) ويكسر حساب السحب/التنقل التلقائي المبني أصلاً على منطق LTR بسيط.
       فارضين LTR هون بس، مستقلة عن اتجاه الصفحة، عشان scrollLeft يشتغل بمنطق موجب طبيعي
       (٠ = الشريحة الأولى، وبيزيد كل ما نتقدم) — الشرائح نفسها صور خلفية بدون نص، فمافي
       تأثير بصري سلبي لفرض LTR هون تحديداً. */
    direction:ltr;
  }
  .hero-slides.dragging{ cursor:grabbing; scroll-snap-type:none; }
  .hero-slides::-webkit-scrollbar{ display:none; }
  .hero-slide{
    position:relative; flex:0 0 100%; height:100%; scroll-snap-align:start;
    overflow:hidden;
  }
  /* طبقة الخلفية الداخلية — منفصلة عن عنصر الشريحة نفسه (يلي بيتحكم بالـsnap/العرض)
     حتى نقدر نكبّرها (Ken Burns) بأمان بدون ما نأثر على حسابات السكرول الأفقي.
     inset:-4% بدل 0 يعطي هامش نزيف (bleed) فوق حواف الشاشة، فالتكبير الخفيف ما بيكشف حافة فاضية. */
  .hero-slide-bg{
    position:absolute; inset:-4%;
    background-size:cover; background-position:center 30%;
    animation:heroKenBurns 22s ease-in-out infinite alternate;
    will-change:transform;
  }
  @keyframes heroKenBurns{ from{ transform:scale(1); } to{ transform:scale(1.07); } }
  @media (prefers-reduced-motion: reduce){
    .hero-slide-bg{ animation:none !important; }
  }
  .hero-slide-1 .hero-slide-bg{
    animation-duration:20s; /* الأسرع نسبياً — إحساس حيوي يناسب التخرج */
    background:
      /* ⚠️ P84 — خُفّفت مع OVERLAY في الجافاسكربت. القيمتان يجب أن تبقيا
         متطابقتين، وإلا اختلفت شريحة الاحتياطي عن شرائح اللوحة. */
      radial-gradient(120% 90% at 50% 0%, var(--p-olive-deep-a24), var(--p-olive-black-a50) 60%),
      linear-gradient(180deg, var(--p-olive-deep-a16) 0%, var(--p-olive-black-a42) 100%),
      url("data:image/jpeg;base64,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");
    background-size: cover;
    background-position: center 30%;
  }
  #heroSlide2 .hero-slide-bg{ animation-duration:25s; } /* الفاخرة — وسطية */
  #heroSlide3 .hero-slide-bg{ animation-duration:30s; } /* العروس — الأبطأ، إحساس رومانسي هادئ */
  /* ============ محتوى حر للشريحتين ٢ و٣ — برا نظام الكريستالة تماماً (٢٠٢٦-٠٧-٢٢) ============ */
  /* الفاخرة والعروس سوا — شريط سفلي عريض حافة-لحافة، بدون زجاج (سكريم تدرّجي بس)، خط أعرض
     وأجرأ. بلون هوية eyebrow-dot مختلف لكل وحدة بس (نفس القالب بالضبط، بطلب العميل). */
  .hero-luxury-panel{
    position:absolute; inset-inline:0; bottom:0; z-index:3;
    /* ⚠️ ٢٠٢٦-٠٧-٢٤ — الحشو السفلي زاد من 44px: كان النص والزر ينزلوا لتحت لدرجة
       يزاحموا الشريط السفلي العائم (ارتفاعه ~68px + 14px مسافة + منطقة الأمان بالأجهزة
       يلي عندها شريط لمس سفلي). القيمة الجديدة بترفعهم فوق الشريط بمسافة مريحة. */
    padding:28px 24px calc(124px + env(safe-area-inset-bottom));
    background:linear-gradient(0deg, var(--p-080906-a82) 0%, var(--p-080906-a55) 45%, transparent 100%);
    color:var(--p-ivory);
  }
  /* ⚠️ الدفع لليمين هون بهامش فيزيائي مباشر (margin-left:auto) بدل الاعتماد على
     direction/align-items — أضمن ١٠٠٪ وما بيتأثر بـdirection:ltr المفروضة على الأب
     (.hero-slides) لحساب السحب الأفقي. margin-left:auto بيدفع العنصر يمين دايماً
     بغض النظر عن أي direction محيطة، فيزيائي صريح مو منطقي (logical). */
  .hero-luxury-inner{
    margin-left:auto; margin-right:0;
    max-width:min(78%, 340px);
    display:flex; flex-direction:column; align-items:flex-end; gap:var(--s-4);
    text-align:right;
  }
  body.lang-en .hero-luxury-inner{
    margin-left:0; margin-right:auto;
    align-items:flex-start; text-align:left;
  }
  .hero-luxury-panel .eyebrow{ font-size:var(--t-xs); letter-spacing:.24em; opacity:.75; }
  .hero-luxury-panel h2{
    font-size:clamp(24px,5.5vw,42px); font-weight:var(--w-bold); letter-spacing:-0.02em;
    line-height:1.2; margin:0;
  }
  .hero-luxury-panel p{ font-size:var(--t-sm); opacity:.8; margin:0; }

  .hero-dots{
    position:absolute; z-index:5; bottom:34px; left:0; right:0;
    display:flex; justify-content:center; gap:var(--s-3);
  }
  .hero-dot{
    width:6px; height:6px; border-radius:50%;
    background:var(--p-ivory-a35); transition:background .2s, width .2s;
  }
  .hero-dot.active{ background:var(--p-ivory-a90); width:16px; border-radius:var(--r-xs); }
  .hero::before{
    /* نسيج/حبيبات خفيفة لإحساس سينمائي بدل صورة الحملة الفعلية (مؤقت) */
    content:"";
    position:absolute; inset:0; z-index:1; pointer-events:none;
    background-image:
      radial-gradient(1px 1px at 20% 30%, var(--p-white-a05) 0, transparent 100%),
      radial-gradient(1px 1px at 70% 60%, var(--p-white-a04) 0, transparent 100%),
      radial-gradient(1px 1px at 40% 80%, var(--p-white-a05) 0, transparent 100%);
    background-size:220px 220px;
    opacity:.9;
    mix-blend-mode:overlay;
  }
  .hero::after{
    content:"";
    position:absolute; inset:0; z-index:2; pointer-events:none;
    box-shadow: inset 0 -180px 160px -80px var(--p-black-a55);
  }
  .hero-caption{
    position:absolute;
    bottom:34px;
    inset-inline-start:24px;
    z-index:5;
    color:var(--p-ivory-a55);
    font-size:var(--t-xs);
    letter-spacing:.06em;
  }

  /* ============ الكريستالة الكبيرة (تتحول لشريط بحث بالسكرول) ============ */
  .crystal{
    position:fixed;
    left:50%;
    top:50%;
    transform:translate(-50%,-50%);
    z-index:60;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:0 28px;
    text-align:center;
    /* ⚠️ P141 — كمية «البلور» أقلّ بقرار المالك: الضباب ١٦ بدل ٢٨ والإشباع ١٦٠٪
       بدل ١٩٠٪، فالصورة تحتها تُقرأ ويبقى الزجاج زجاجاً. التراجع: إرجاع الرقمين. */
    backdrop-filter:blur(16px) saturate(160%);
    -webkit-backdrop-filter:blur(16px) saturate(160%);
    background:
      linear-gradient(155deg, var(--p-white-a16) 0%, var(--p-white-a05) 40%, var(--p-white-a08) 100%);
    border:1px solid var(--p-white-a32);
    border-top-color:var(--p-white-a55);
    box-shadow:
      inset 0 1.5px 0 var(--p-white-a45),
      inset 0 0 40px var(--p-white-a03);
    /* الظل الخارجي + التوهج المحيطي عبر filter:drop-shadow مش box-shadow —
       drop-shadow ما بيتأثر بـoverflow:hidden لنفس العنصر متل ما بيصير مع box-shadow
       (نفس خلل الظل الحاد يلي صلحناه بكروت المنتجات، بس هون العنصر أهم فما بناخذ الخطر) */
    filter:
      drop-shadow(0 24px 50px var(--p-black-a40))
      drop-shadow(0 0 34px var(--p-white-a14));
    overflow:hidden;
    will-change:width,height,border-radius,top,left;
    transition:opacity .15s linear;
    /* ⚠️ pointer-events:none مقصودة — الكريستالة بتغطي مساحة كبيرة من الهيرو وقت
       عرض الشريحة الأولى، فبدونها أي محاولة سحب أفقي فوق مساحتها الفاضية كانت
       "تعلق" عليها ومتوصلش لصفوف الهيرو تحتها. الأزرار وحقل البحث لهم استثناء صريح تحت */
    pointer-events:none;
    /* ⚠️ ٢٠٢٦-٠٨-٠٨ — بطاقة عرض لا نصّ يُنسخ: بلا مؤشر نصّ فوق عنوانها، والسهم
       ثابت على كامل البطاقة. الإصبع للأزرار وحدها ومؤشر النص لحقل البحث وحده. */
    cursor:default; user-select:none;
  }
  .crystal .btn, .crystal input{ pointer-events:auto; }
  /* ⚠️ ٢٠٢٦-٠٨-٠٨ — إخفاء الكريستالة كان يوقف قشرتها ويترك أولادها أحياء:
     pointer-events:none على الأب لا يحجب ابناً أعاد تفعيلها صراحةً (القاعدة
     فوق)، وتعطيل المحتوى مربوط بتقدّم السكرول العمودي وحده لا برقم الشريحة.
     فعلى الشريحتين ٢ و٣ بقي العنوان والزران أحياء غير مرئيين وسط الهيرو —
     الماوس يتقلب فوقهم (نصّ/إصبع/سهم) والضغط يصيب زراً خفياً فعلاً.
     الحارس يقيس المخرَج لا أحد مدخلاته: الصنف يُدار من نفس الموضع الذي يكتب
     الشفافية النهائية، والتعطيل هنا يسري قسراً على كل الأولاد.
     التراجع: حذف القاعدة والصنف — ويعود الزر الخفي معه. */
  .crystal.is-inert, .crystal.is-inert *{ pointer-events:none !important; }
  .crystal::before{
    /* خط لمعة رفيع أعلى الزجاج، إحساس انعكاس ضوء حقيقي */
    content:"";
    position:absolute;
    top:0; left:8%; right:8%;
    height:1px;
    background:linear-gradient(90deg, transparent, var(--p-white-a90), transparent);
    opacity:.7;
  }
  .crystal::after{
    /* محاكاة آمنة لـ"التقاط الضوء" على حافة الزجاج — نقطة ضوء واحدة رئيسية (زاوية علوية، متل
       مصدر ضوء طبيعي واحد) + أثر خفيف جداً بالزاوية المقابلة، مو أربع بقع متناظرة (كانت تبين
       مصطنعة/مزخرفة). ملاصقة للحافة نفسها (0%) مو مسحوبة لجوا، وممدودة (ellipse) بدل دائرة
       حتى تحس "خط ضوء عالحافة" مو "بقعة بالنص" */
    content:"";
    position:absolute;
    inset:0;
    border-radius:inherit;
    pointer-events:none;
    background:
      radial-gradient(ellipse 60% 40% at 4% 0%, var(--p-white-a65), transparent 70%),
      radial-gradient(ellipse 35% 25% at 96% 100%, var(--p-white-a25), transparent 70%);
  }

  .crystal-content{
    position:absolute;
    inset:0;
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    gap:var(--s-5);
    padding:var(--s-7);
    color:var(--p-ivory);
    transition:transform .32s cubic-bezier(.22,1,.36,1), opacity .28s ease;
  }
  .crystal-content.cc-pulse{ transform:scale(0.965); opacity:.8; }
  /* تنويع خفيف بحركة الدخول حسب الشريحة الهدف — كريستالة "الفاخرة" تدخل بحركة أقصر
     وأوضح (إحساس حازم)، و"العروس" بحركة أطول وأنعم (إحساس رقيق) */
  .crystal-content.cc-pulse-crisp{ transform:scale(0.972); opacity:.82; transition-duration:.18s; }
  .crystal-content.cc-pulse-soft{ transform:scale(0.955) translateY(3px); opacity:.75; transition-duration:.42s; }
  .crystal-content .eyebrow{
    font-size:var(--t-xs);
    letter-spacing:.2em;
    color:var(--p-ivory-a70);
  }
  /* نقطة لونية صغيرة فوق eyebrow كل شريحة — تلميح هوية بصرية مختلفة بدون كسر لوحة الألوان */
  .eyebrow-dot{
    display:block; width:5px; height:5px; border-radius:50%; margin:0 auto 2px;
  }
  .eyebrow-dot.dot-gold{ background:var(--p-d9b36c); }
  .eyebrow-dot.dot-brand{ background:var(--p-8fa085); }
  .eyebrow-dot.dot-blush{ background:var(--p-rose); }
  .crystal-content h1{
    font-size:clamp(22px,4vw,44px);
    line-height:1.32;
    font-weight:var(--w-bold);
    letter-spacing:-0.01em;
    max-width:18ch;
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P82 · ٢٠٢٦-٠٨-١٣ — أزرار الهيرو تُقصّ على الشاشات الضيّقة (رصد المالك).

     ⚠️ العطل: flex-wrap:nowrap على الصفّ، و white-space:nowrap على كل زرّ.
        فحين لا يتّسع العرض لزرّين بنصّيهما الكاملين، لا يستطيع الصفّ أن يلفّ
        ولا الزرّ أن يكسر نصّه — فيُقصّ الزرّ عند حافّة اللوح. وهو ما ظهر في
        لقطة المالك: «استكشف الهدايا الفاخ…» مقطوعة.

     ⚠️ ولماذا لم يظهر على iPhone: عرضه الفعّال أوسع بقليل من أجهزة أندرويد
        التي جرّبها، فيتّسع للنصّين بفارق بكسلات — والتصميم كان على حافّة
        الانكسار لا في أمانٍ منه.

     ⚠️ العلاج: يُسمح للصفّ باللفّ، ويُسمح للزرّ بأن يضيق حتى حدّ معقول قبل
        أن يلفّ الصفّ. فالنصّ يبقى كاملاً في كل الحالات: زرّان جنباً إلى جنب
        حيث يتّسع، وزرّ فوق زرّ حيث لا يتّسع — ولا قصّ في الحالتين.
     ══════════════════════════════════════════════════════════════════════════ */
  .crystal-content .cta-row{
    display:flex;
    gap:var(--s-3);
    flex-wrap:wrap;
    justify-content:center;
    width:100%;
  }
  /* ⚠️ P82 — الزرّ يضيق قبل أن يلفّ الصفّ، ولا يقصّ نصّه أبداً. */
  .crystal-content .cta-row .btn{
    flex:0 1 auto;
    min-width:0;
    max-width:100%;
    white-space:normal;
  }
  /* زر "مميّز" لشريحة الهدايا الفاخرة — أعرض، بأيقونة صغيرة، إحساس "منتج بارز" */
  .btn-featured{
    display:inline-flex; align-items:center; gap:var(--s-3); padding:var(--s-4) var(--s-7);
  }
  .btn-featured svg{ width:14px; height:14px; flex:0 0 auto; }
  /* زر شفاف ناعم لشريحة العروس — بدون تعبئة (بخلاف .primary)، حدود أرق ولمسة وردية خفيفة
     بدل الأبيض العاجي القياسي، إحساس أرق يناسب موضوع الشريحة */
  .btn-bridal{
    background:transparent; border-color:var(--p-rose-a55); color:var(--p-ivory);
  }
  .btn-bridal:hover{ background:var(--p-rose-a12); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P91 · ٢٠٢٦-٠٨-١٤ — زرّ الشريحة الأولى: ستروك زجاجي بدل التعبئة الصلبة
     (رصد المالك: «خليه فقط ستروك زجاجي، وعرضه يتناسب مع النص فوقه، مثل الهيرو
     الثالث»). طُبِّق تماماً نمط .btn-bridal أعلاه لا نمطٌ جديد — نفس الفلسفة:
     شفافية بدل تعبئة، وحدود لا كتلة. والفرق الوحيد لونٌ يخصّ موضوع كلّ شريحة. */
  .btn-crystal-glass{
    background:var(--p-ivory-a10);
    border-color:var(--p-ivory-a50);
    color:var(--p-ivory);
    backdrop-filter:blur(14px) saturate(160%);
    -webkit-backdrop-filter:blur(14px) saturate(160%);
  }
  .btn-crystal-glass:hover{ background:var(--p-ivory-a18); }
  /* ⚠️ P158 — الزرّ المصمت: المقصد الأول على الكريستالة. العاجيّ على صورةٍ
     داكنة أعلى تبايناً من أي زجاج، فيُقرأ أولاً بلا أن يصرخ. */
  .btn-crystal-solid{
    background:var(--p-ivory); border-color:var(--p-ivory); color:var(--p-ink); font-weight:var(--w-bold);
  }
  .btn-crystal-solid:hover{ background:var(--p-white); border-color:var(--p-white); }
  @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){
    .btn-crystal-glass{ background:var(--p-brand-a55); }
  }
  .crystal-slide-panel{
    position:absolute; inset:0;
    display:flex; flex-direction:column; align-items:center; justify-content:center;
    gap:var(--s-5); padding:var(--s-7);
  }
  .crystal-slide-panel[hidden]{ display:none; }
  /* موتيف رقم كبير شفاف — عنصر أول بكل لوحة (يترسم تحت الباقي بترتيب DOM الطبيعي، بدون
     حاجة لـz-index). overflow:hidden على .crystal الأب بيقص أي جزء زايد بأمان. */
  .panel-numeral{
    position:absolute;
    font-family:var(--font-en);
    line-height:1;
    color:var(--p-ivory-a07);
    pointer-events:none;
    user-select:none;
  }
  .crystal-slide-panel[data-panel="0"] .panel-numeral{ top:4%; inset-inline-start:5%; font-size:110px; font-weight:var(--w-bold); }
  .crystal-slide-panel[data-panel="1"] .panel-numeral{ top:2%; inset-inline-end:3%; font-size:150px; font-weight:var(--w-bold); }
  .crystal-slide-panel[data-panel="2"] .panel-numeral{ bottom:0%; inset-inline-start:3%; font-size:120px; font-weight:var(--w-normal); }

  /* شريحة ٢ (الفاخرة) — المحتوى ينزل لأسفل الصندوق بدل النص بالنص، وخط أعرض وأجرأ:
     إحساس "بوستر منتج مميّز" مختلف فعلياً عن الشريحة الأولى، مو بس ألوان مختلفة */
  .crystal-slide-panel[data-panel="1"]{ justify-content:flex-end; padding-bottom:var(--s-8); gap:var(--s-4); }
  .crystal-slide-panel[data-panel="1"] h1{
    font-size:clamp(24px,5vw,48px); font-weight:var(--w-bold); letter-spacing:-0.02em; max-width:13ch;
  }
  .crystal-slide-panel[data-panel="1"] .eyebrow{ letter-spacing:.24em; }

  /* شريحة ٣ (العروس) — المحتوى يطلع لأعلى الصندوق، خط أخف وزناً وأوسع تباعد أحرف:
     إحساس رقيق مختلف كلياً عن الشريحتين التانيتين */
  .crystal-slide-panel[data-panel="2"]{ justify-content:flex-start; padding-top:var(--s-8); gap:var(--s-4); }
  .crystal-slide-panel[data-panel="2"] h1{
    font-weight:var(--w-normal); font-size:clamp(19px,3.6vw,36px); max-width:15ch;
  }
  .crystal-slide-panel[data-panel="2"] .eyebrow{ letter-spacing:.32em; }
  .crystal-light-text{
    font-size:var(--t-sm); line-height:1.6; opacity:.85; max-width:26ch; text-align:center; font-weight:var(--w-normal);
  }
  .btn{
    font-family:var(--font-ar);
    font-size:var(--t-sm);
    padding:var(--s-4) var(--s-5);
    border-radius:var(--r-full);
    border:1px solid var(--p-ivory-a40);
    background:transparent;
    color:var(--p-ivory);
    cursor:pointer;
    transition:background .25s ease, transform .2s ease;
    white-space:nowrap;
    flex:0 1 auto;
  }
  .btn.primary{
    background:var(--p-ivory);
    color:var(--p-ink);
    border-color:var(--p-ivory);
  }
  .btn:hover{ transform:translateY(-1px); }
  .btn.primary:hover{ background:var(--p-white); }
  .btn:not(.primary):hover{ background:var(--p-ivory-a12); }

  .search-content{
    position:absolute;
    inset:0;
    display:flex;
    align-items:center;
    gap:var(--s-4);
    padding:0 var(--s-6);
    color:var(--p-ivory);
  }
  .search-content input{
    flex:1;
    background:transparent;
    border:none;
    outline:none;
    color:inherit;
    font-family:var(--font-ar);
    font-size:var(--t-sm);
  }
  .search-content input::placeholder{ color:var(--p-ivory-a55); }
  .search-icon{ width:18px; height:18px; flex:none; opacity:.85; }

  /* ============ نمط عام لأي شريط تمرير أفقي قابل للسحب (Occasions، وصل حديثاً، إلخ) ============ */
  .drag-scroll{ cursor:grab; user-select:none; scrollbar-width:none; }
  .drag-scroll.dragging{ cursor:grabbing; scroll-snap-type:none; }
  .drag-scroll::-webkit-scrollbar{ display:none; }

  /* ============ قسم المناسبات (Occasions) ============ */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P57 · ٢٠٢٦-٠٨-١٠ — الخطّان الفاصلان انتقلا إلى حدّي القسم (أمر المالك).

     ⚠️ ما كان: الخطّان لم يكونا فاصلَي قسم أصلاً، بل حدّاً علوياً على صفَّي
        الروابط (.occ-link-row) — واحد فوق «ابحث عن مناسبتك» وآخر فوق «عرض كل
        المناسبات». فوقعا **داخل** القسم يقطعانه ثلاثاً، بينما القسم نفسه بلا
        حدّ يفصله عمّا قبله وبعده. وهذا سبب قراءته متداخلاً مع جيرانه.

     ⚠️ ما صار: خطّ فوق «المناسبات» وخطّ تحت «عرض كل المناسبات» — أي أن الخطّ
        صار يحدّ القسم لا يقطعه.

     ⚠️ ويتبعان عمود الصفحة نفسه (١١٢٠ متمركز على المكتب، ٢٤px إزاحة على
        الجوّال) كما ضُبط في P56 — فاصل يخالف محاذاة ما يفصله يزيد التشتّت.

     ⚠️ والحشو أُعيد توزيعه: كان ٥٦/٨٠ خارج الخطّ لأنه لم يكن هناك خط، وصار
        الفراغ موزّعاً بين خارج الخطّ وداخله ليبقى الإيقاع العمودي كما هو.
     ══════════════════════════════════════════════════════════════════════════ */
  .occasions{
    padding:28px 0 28px;
  }
  .occasions::before,
  .occasions::after{
    content:''; display:block; height:1px;
    background:var(--p-brand-a16);
    width:calc(100% - 48px); margin-inline:var(--s-7);
  }
  .occasions::before{ margin-bottom:var(--s-9); }
  .occasions::after{ margin-top:var(--s-9); }
  @media (min-width:768px){
    .occasions::before,
    .occasions::after{ width:100%; max-width:1120px; margin-inline:auto; }
  }
  .occasions .head{
    padding:0 var(--s-7);
    margin-bottom:var(--s-6);
    display:flex;
    flex-direction:column;
    gap:var(--s-2);
  }
  .occasions h2{ font-size:var(--t-lg); font-weight:var(--w-bold); }
  .occasions .sub{ font-size:var(--t-sm); opacity:.6; }

  .occasions-scroll{
    display:flex;
    gap:var(--s-5);
    overflow-x:auto;
    scroll-snap-type:x proximity;
    scroll-padding-inline:var(--s-7);
    padding:var(--s-2) var(--s-7) var(--s-5);
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
    cursor:grab;
    user-select:none;
  }
  .occasions-scroll.dragging{ cursor:grabbing; scroll-snap-type:none; }
  .occasions-scroll::-webkit-scrollbar{ display:none; }

  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٢٦ — إعادة تصميم صف المناسبات.
     الملاحظة: "كتل مكدسة مو مفهومة، ما بعرف شو لازمهم". السبب التصميمي: كانت دوائر
     ملوّنة بحجم كبير بلا سياق — بتقرا كأيقونات تطبيق مرصوفة، مو كمدخل لمجموعة هدايا.
     التصميم الجديد: بطاقة رأسية نحيلة، حد رقيق، الأيقونة صغيرة وهادية بالأعلى،
     والاسم هو البطل. أضفنا سطر "هدايا" فوق الاسم بحجم مجهري — بيوضّح وظيفة الصف
     بدون عنوان زيادة.
     الفرق البصري: من "كتلة مصمّتة" إلى "بطاقة مفتوحة" — نفس منطق بطاقات المنتج،
     فالصف صار ينتمي لباقي الصفحة بدل ما يكون جزيرة غريبة.
     ══════════════════════════════════════════════════════════════════════════════ */
  .occasion-item{
    scroll-snap-align:start;
    flex:0 0 auto;
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    gap:var(--s-3);
    width:96px;
    padding:var(--s-5) var(--s-3) var(--s-5);
    border-radius:var(--r-md);
    cursor:pointer;
    background:var(--ivory-card-bg);
    border:1px solid var(--p-brand-a14);
    transition:border-color .22s ease, transform .22s ease, background .22s ease;
  }
  .occasion-item:hover{
    transform:translateY(-2px);
    border-color:var(--p-brand-a34);
    background:var(--p-brand-a05);
  }
  /* سطر "هدايا" للمناسبات فقط — بطاقات النوع بتشارك نفس الأصناف للمقاس بس بلا هالسطر */
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٢٦ (السبب الجذري لـ"أكثر من نوع خط عربي") — تباعد الحروف على العربي.

     العربي **خط متّصل**: الحروف ترتبط ببعضها. وأي letter-spacing موجب بيفكّ الاتصال،
     فالكلمة تطلع حروفاً مبعثرة — والعين تقرأها كأنها **خط تاني تماماً**.
     مو خط تاني فعلاً: فحص الملفات أثبت إنه ما في ولا محرف عربي ناقص من Cairo، وما في
     أي احتياط لخط النظام. المشكلة كانت التباعد وحده.

     المواضع المصابة كانت: "هدايا" فوق بطاقة المناسبة · عناوين أعمدة الفوتر
     (البوتيك/الخدمة/قانوني) · "صُنعت بالدوحة" · توقيع صور "قبل التسليم".

     ⚠️ القاعدة المعتمدة من الآن: letter-spacing **للاتيني فقط**. أي عنصر محتواه عربي
     تباعده صفر أو سالب خفيف. (وهاد يطابق طلب صاحب المحل: التباعد بالعناوين اللاتينية.)
     ══════════════════════════════════════════════════════════════════════════════ */
  .occasion-item:not(.category-item)::before{
    content:"هدايا";
    font-size:var(--t-micro); font-weight:var(--w-bold); letter-spacing:0;
    color:var(--brand); opacity:.42; margin-bottom:-2px;
  }
  body.lang-en .occasion-item:not(.category-item)::before{ content:"GIFTS"; }
  /* ⚠️ ٢٠٢٦-٠٧-٢٦: الأيقونة صارت مجرد رمز صغير بلا صندوق — الصندوق انتقل للبطاقة الأم
     (.occasion-item). قبل هيك كان في صندوقين متداخلين، وهاد سبب إحساس "الكتل المكدسة". */
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — زر تبديل المجموعة. زر واحد صريح بحدود واضحة ونص كامل، مو أيقونة
     غامضة — الزائر لازم يعرف شو رح يصير قبل ما يضغط. */
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — شريط التذكير. زجاجي زيتوني خفيف (أهدى من بانر ساعدني أختار عشان
     ما يتنافس معه)، مع عدّاد أيام بارز على اليمين.
     ⚠️ بدون filter — عنصر عريض فيه backdrop-filter (العائلة الممنوعة على iOS). */
  .occ-reminder{
    display:flex; align-items:stretch; gap:0;
    width:calc(100% - 28px); margin:0 auto 14px;
    border-radius:var(--r-md); overflow:hidden;
    border:1px solid var(--p-brand-a22);
    background:var(--p-brand-a07);
  }
  .occ-reminder[hidden]{ display:none !important; }
  .occ-reminder-main{
    flex:1; display:flex; align-items:center; gap:var(--s-4);
    padding:var(--s-4) var(--s-5); background:none; border:none;
    cursor:pointer; text-align:start; color:inherit;
  }
  .occ-reminder-main svg{ width:15px; height:15px; opacity:.4; flex:0 0 auto; }
  .occ-reminder-days{
    flex:0 0 auto; min-width:42px; padding:var(--s-3) 0;
    border-radius:var(--r-sm); text-align:center;
    background:var(--brand); color:var(--p-ivory);
    font-size:var(--t-base); font-weight:var(--w-bold); line-height:1.15;
    display:flex; flex-direction:column; align-items:center;
  }
  .occ-reminder-days small{ font-size:var(--t-micro); font-weight:var(--w-bold); opacity:.75; letter-spacing:.06em; }
  .occ-reminder-text{ display:flex; flex-direction:column; gap:var(--s-1); flex:1; }
  .occ-reminder-title{ font-size:var(--t-sm); font-weight:var(--w-bold); }
  .occ-reminder-sub{ font-size:var(--t-xs); opacity:.55; }
  .occ-reminder-dismiss{
    flex:0 0 auto; width:34px; border:none; background:none;
    color:inherit; opacity:.3; cursor:pointer; font-size:var(--t-xs);
    border-inline-start:1px solid var(--p-brand-a14);
  }
  .occ-reminder-dismiss:hover{ opacity:.7; }
  @media (min-width:768px){
    .occ-reminder{ max-width:560px; margin-inline:auto; }
    .occ-reminder-title{ font-size:var(--t-base); }
    .occ-reminder-sub{ font-size:var(--t-xs); }
  }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P50 — زر تبديل المحور بهيئة لافتة «لا تعرف ماذا تختار؟» بأمر المالك.
     كان حبّة صغيرة بحدّ رفيع تحت الترويسة، لا يُقرأ كفعل ولا يُرى.
     صار كبسولة بنفس زجاج الشريط السفلي واللافتة — لغة واحدة لأزرار الدعوة.
     وموضعه بين باب البحث ورأس الشريط بمسافة متساوية (٢٦px من الاثنين). */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P56 · ٢٠٢٦-٠٨-١٠ — فصل شكل مبدّل المحور عن لافتة «لا تعرف ماذا تختار؟».

     ⚠️ المشكلة المرصودة (المالك على الحيّ): الشريطان كانا **متطابقين حرفياً**
        في كل قيمة — انحناء ٩٩٩ · ارتفاع أدنى ٥٢ · حشو ٩/١٦ · فجوة ١١ · نفس
        الخلفية rgba(83,94,77,0.82) · نفس الحدّ والظل والسهم. ووظيفتهما مختلفة
        تماماً: الأولى دعوة لمساعد الاختيار، والثاني تبديل طريقة التصفّح.
        شكل واحد لمهمتين ⇒ يُقرآن تكراراً فيُتجاهل الاثنان.

     ⚠️ الفرق بالوزن البصري لا بالنصّ: اللافتة تبقى كتلة زيتونية معتمة لأنها
        دعوة، والمبدّل يصير زجاجاً فاتحاً بحبر داكن — أداة لا دعوة. وزجاجه هو
        زجاج بطاقة المناسبة نفسه (نفس التدرّج ونفس الحدّ)، فينتمي لقسمه بصرياً
        بدل أن ينافس اللافتة.

     ⚠️ بلا backdrop-filter هنا عمداً: بطاقات القسم لا تستعمله، وإضافته على
        عنصر بعرض الصفحة كلفة إطار موثّقة على الجوّال.
     ══════════════════════════════════════════════════════════════════════════ */
  .occ-switch-btn{
    display:flex; align-items:center; gap:var(--s-4);
    padding-block:var(--s-4);
    width:calc(100% - 48px); margin:var(--s-7) var(--s-7);
    padding:var(--s-3) var(--s-5); border-radius:var(--r-full); min-height:52px;
    cursor:pointer; text-align:start;
    color:var(--ink, var(--p-ink)); font-family:inherit;
    background:linear-gradient(155deg, var(--p-white-a62) 0%, var(--glass-bg-on-light) 45%, var(--glass-bg-on-light) 100%);
    /* ⚠️ P77 — حدّ زيتوني بدل الرمادي المحايد (رصد المالك: «مدموج مع الخلفية»).
       P56 خفّفته حتى صار يذوب في الأرضية العاجية — والغرض كان تمييزه عن لافتة
       «لا تعرف ماذا تختار؟» لا إخفاؤه. فالحلّ لون لا وزن: حدّ من لون العلامة
       نفسها بشفافية منخفضة، يظهر الشكل ولا يعيد المنافسة على الانتباه.
       والظلّ رُفع قليلاً ليفصله عن الأرضية بلا أن يصير كتلة. */
    border:1px solid var(--p-brand-a28);
    border-top-color:var(--p-white-a72);
    box-shadow:0 2px 12px var(--p-olive-dark-a10), inset 0 0 0 1px var(--p-white-a30);
    touch-action:manipulation;
    transition:transform .25s ease, box-shadow .25s ease, border-color .22s ease;
  }
  .occ-switch-btn:hover{ border-color:var(--p-brand-a45); }
  .occ-switch-btn:hover{ transform:translateY(-1px); box-shadow:0 10px 26px var(--p-olive-dark-a20); }
  .occ-switch-btn:active{ transform:scale(0.99); }
  .occ-switch-icon{ flex:0 0 auto; width:20px; height:20px; opacity:.9; }
  .occ-switch-icon svg{ width:100%; height:100%; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P91 · ٢٠٢٦-٠٨-١٤ — نصّان يندمجان في جملة واحدة بدل طبقتين منفصلتين
     (رصد المالك). صفّ متدفّق لا عمود: الحالة والدعوة تُقرآن كجملة واحدة —
     «أنت الآن تتصفّح حسب المناسبة، تسوّق حسب النوع» — والتمييز بالوزن وحده
     (عادي ثم بولد)، لا بالحجم ولا بتغميق أحدهما. وكلاهما بالحبر الكامل: كانت
     الحالة معتمة ٠٫٦ فتُقرأ رمادية، وهذا وحده كان يكفي ليبدو الزرّ ناقص وضوح.
     ⚠️ ويُسمح باللفّ لا القصّ (P52 القائمة): إن ضاق العرض عن الجملة كاملة على
     سطر، تلفّ لا تُقصّ بثلاث نقاط — القصّ يخفي المعلومة التي كُتب السطر لأجلها. */
  .occ-switch-text{
    display:flex; flex-direction:row; flex-wrap:wrap; align-items:baseline;
    gap:0 var(--s-3); flex:1; min-width:0;
  }
  .occ-switch-label{ font-size:var(--t-sm); font-weight:var(--w-bold); line-height:1.4; overflow-wrap:anywhere; }
  /* ⚠️ P51 — السطر الثاني يقول أين أنت الآن، والأول يقول أين ستذهب. بسطر واحد
     كان الزر يُقرأ وصفاً للحالة لا دعوةً للتبديل — وهذا مصدر التشتّت. */
  /* ⚠️ P52 — رُفع nowrap: كان يقصّ «أنت الآن تتصفّح حسب المستلم» بثلاث نقاط.
     الزرّ يحتمل سطرين، والقصّ يخفي المعلومة التي وُضع السطر لأجلها. */
  /* ⚠️ P56 — الشفافيات على الزجاج الفاتح تتبع اتفاق القسم نفسه (.occ-card-note
     و .occ-card-kick عند ٠٫٦)، لا اتفاق الكتلة المعتمة الذي كانت عليه. */
  .occ-switch-sub{ font-size:var(--t-sm); font-weight:var(--w-normal); opacity:1; line-height:1.4; overflow-wrap:anywhere; }
  .occ-switch-ar{ flex:0 0 auto; width:15px; height:15px; opacity:.5; }
  .occ-switch-ar svg{ width:100%; height:100%; display:block; }

  /* تلاشٍ قصير عند القلب — يوضّح إنه نفس الصف تبدّل، مو صف تاني ظهر */
  .occ-panes > div{ animation:occFade .32s ease both; }
  @keyframes occFade{ from{ opacity:0; transform:translateY(5px); } to{ opacity:1; transform:none; } }
  .occ-panes > div[hidden]{ display:none !important; }
  /* ⚠️ P56 — المحاذاة على الشاشة الكبيرة. العناوين والكروت محبوسة في عمود
     max-width:1200px متمركز وبحشو داخلي ٤٠px، والشريط كان بلا حدّ عرض إطلاقاً
     (width:calc(100% - 80px) وحدها) فيمتدّ بعرض الشاشة كاملة. على شاشة ٢٥٠٠px
     يقطع الصفحة من طرف لطرف بينما النصّ بعمود ضيّق وسط — وهذا مصدر الإحساس
     بأن القسم متداخل. و١١٢٠ = ١٢٠٠ ناقص حشو الطرفين، فتقع حافة الشريط تماماً
     حيث يبدأ العنوان وأول كرت. */
  @media (min-width:768px){
    .occ-switch-btn{ width:100%; max-width:1120px; margin:26px auto; }
  }

  .occasion-circle{
    width:40px; height:40px;
    border-radius:0;
    display:flex; align-items:center; justify-content:center;
    background:none;
    border:none;
    transition:transform .2s ease, opacity .2s ease;
  }
  .occasion-circle svg{ width:20px; height:20px; stroke:var(--brand); fill:none; stroke-width:1.5; opacity:.72; }
  .occasion-item:hover .occasion-circle svg{ opacity:1; }
  /* الحالة النشطة: البطاقة كلها تتلوّن زيتوني — أوضح بكتير من تلوين أيقونة صغيرة */
  .occasion-item.active{ background:var(--brand); border-color:var(--brand); }
  .occasion-item.active:not(.category-item)::before{ color:var(--p-ivory); opacity:.6; }
  .occasion-item.active .occasion-circle svg{ stroke:var(--p-ivory); opacity:1; }
  .occasion-item.active .occasion-label{ color:var(--p-ivory); opacity:1; font-weight:var(--w-bold); }
  .occasion-item.active .occasion-label{ color:var(--brand); font-weight:var(--w-bold); }
  .occasion-label{ font-size:var(--t-sm); text-align:center; line-height:1.3; }

  /* ⚠️ 2026-07-22: فاصل بصري واضح قبل المناسبات الموسمية الفعّالة حالياً — عشان العميل
     يميّز فوراً "هاي مناسبات ثابتة" مقابل "هاي مناسبات موسم معيّن جاري حالياً" */
  .occasion-season-divider{
    flex:0 0 auto;
    display:flex; align-items:center;
    align-self:stretch;
    padding:0 var(--s-2);
    position:relative;
  }
  .occasion-season-divider::before{
    content:''; width:1px; align-self:stretch;
    background:var(--p-brand-a18); margin-inline-end:var(--s-4);
  }
  .occasion-season-divider span{
    font-size:var(--t-xs); font-weight:var(--w-bold); color:var(--brand); white-space:nowrap;
    letter-spacing:.02em; writing-mode:vertical-rl; text-orientation:mixed;
  }
  /* حلقة خفيفة إضافية حول أيقونة أي مناسبة موسمية (حتى وهي غير فعّالة بقائمة "مناسبات
     تانية") — تمييز صغير ثابت بغض النظر عن حالة التفعيل */
  .occasion-item-seasonal .occasion-circle{ box-shadow:0 0 0 1.5px var(--p-brand-a18) inset; }

  /* زر "عرض المزيد/عرض أقل" — نفس شكل عنصر مناسبة بس خط متقطّع ومحايد، يميّزه بصرياً
     إنه فعل (تبديل عرض) مو مناسبة فعلية قابلة للفلترة */
  button.occasion-item.occasion-toggle{
    background:none; border:none; padding:0; font-family:inherit;
  }
  .occasion-circle-toggle{
    background:none !important; border-style:dashed !important;
    border-color:var(--p-brand-a35) !important;
  }
  .occasion-circle-toggle svg{ stroke:var(--brand); }

  /* ---- صف الأقسام (ورد/حلويات/سناكات...) — كروت أصغر تحت المناسبات ---- */
  .categories-row{
    margin-top:var(--s-3);
  }
  .categories-row .sub{ font-size:var(--t-sm); opacity:.55; padding:0 var(--s-7); display:block; margin-bottom:var(--s-4); }
  /* ⚠️ 2026-07-26: نفس حشوات ومسافات صف المناسبات — الصفّان صاروا يتشاركوا نفس
     المكان بالتبديل، فأي فرق بالحشو كان بيسبب "قفزة" وقت القلب. */
  .categories-scroll{
    display:flex;
    gap:var(--s-5);
    overflow-x:auto;
    scroll-snap-type:x proximity;
    scroll-padding-inline:var(--s-7);
    padding:var(--s-2) var(--s-7) var(--s-3);
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
    cursor:grab;
    user-select:none;
  }

  .categories-scroll.dragging{ cursor:grabbing; scroll-snap-type:none; }
  .categories-scroll::-webkit-scrollbar{ display:none; }
  /* ⚠️ 2026-07-26 — كل مقاسات بطاقة النوع انشالت بقصد.
     البطاقة صارت تلبس أصناف بطاقة المناسبة كمان (occasion-item / occasion-circle /
     occasion-label) فبترث المقاس والحد والحركة كاملة — مصدر واحد للحقيقة، وصفر فرصة
     إنه الصفّان يطلعوا بمقاسين مختلفين زي ما كان صاير.
     الباقي هون: الحالة النشطة فقط. */
  .category-box svg{ stroke:var(--brand); fill:none; stroke-width:1.5; }
  .category-item.active{ background:var(--brand); border-color:var(--brand); }
  .category-item.active .category-box svg{ stroke:var(--p-ivory); opacity:1; }
  .category-item.active .category-label{ color:var(--p-ivory); opacity:1; font-weight:var(--w-bold); }
  .category-label{ text-align:center; line-height:1.3; }

  /* ============ قسم "وصل حديثاً" وبطاقة المنتج ============ */
  .new-arrivals{ padding:0 0 var(--s-11); }
  .new-arrivals .head{
    padding:0 var(--s-7);
    margin-bottom:var(--s-6);
    display:flex;
    align-items:baseline;
    justify-content:space-between;
    gap:var(--s-4);
  }
  .new-arrivals h2{ font-size:var(--t-lg); font-weight:var(--w-bold); }
  .new-arrivals .see-all{
    font-size:var(--t-sm);
    color:var(--brand);
    background:none; border:none;
    cursor:pointer;
    white-space:nowrap;
  }

  .products-scroll{
    display:flex;
    gap:var(--s-5);
    overflow-x:auto;
    scroll-snap-type:x proximity;
    scroll-padding-inline:var(--s-7);
    /* الحشو السفلي زاد من 10px لـ34px عشان ظل الكرت (0 10px 26px) ياخد مساحة كافية يتلاشى فيها
       بشكل طبيعي — overflow-x:auto بيفرض تلقائياً overflow-y مقيّد كمان على نفس الصف، فأي ظل
       فايض عن الحشو المتاح كان ينقطع فجأة (يبين "مقصوص" بدل متدرّج). الهامش السالب تحت يعوّض
       المساحة الزيادة حتى ما يصير فراغ إضافي قبل القسم يلي بعده */
    padding:var(--s-2) var(--s-7) var(--s-8);
    margin-bottom:-34px;
    -webkit-overflow-scrolling:touch;
  }

  .product-card{
    scroll-snap-align:start;
    flex:0 0 auto;
    /* ⚠️ P109 — عرضٌ ورمزٌ واحد لكل بطاقات المنتج */
    width:var(--card-w);
    border-radius:var(--card-radius);
  }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P109 · ٢٠٢٦-٠٨-١٥ — سطح البطاقة: قاعدةٌ واحدة لأربع بطاقاتٍ كانت أربعاً.

     ⚠️ رصد المالك: «كل كرت بكل مكان يعرض بشكل وهوامش وأحجام مختلفة». والفحص
        أثبته: أربع بطاقاتٍ تعرض الشيء نفسه (صورة · اسم · سعر) ولكلٍّ سطحُها.
        وثلاثٌ منها كانت متطابقةً حرفياً في تسع خصائص وتفترق في الاستدارة
        والعرض وحدهما — أي أن التكرار لم يكن قراراً بل نسخاً.

     ⚠️ ولم تُوحَّد البنية بل السطح: بطاقة الشبكة غلافٌ داخله .pc-inner، والثلاث
        الأخرى عنصرٌ واحد. وتوحيد الترميز يعني إعادة كتابة دوال التوليد في
        الجافاسكربت — خطرٌ لا يقابله مكسبٌ بصريّ. فالموحَّد هو ما يراه الزائر:
        الاستدارة والحدّ والخلفية والقصّ ونسبة الصورة ومقاسا الاسم والسعر.
     ══════════════════════════════════════════════════════════════════════════════ */
  .pc-inner,
  .browse-product-card,
  .pd-related-card,
  .recommended-card{
    border-radius:var(--card-radius);
  }
  .browse-product-card,
  .pd-related-card,
  .recommended-card{
    display:flex; flex-direction:column;
    overflow:hidden;
    border:1px solid var(--glass-border-on-light);
    padding:0;
    cursor:pointer;
    text-align:start;
    color:inherit;
    background:linear-gradient(155deg, var(--p-white-a50) 0%, var(--ivory-card-bg) 45%, var(--ivory-card-bg) 100%);
  }
  /* البطاقتان في الشريط الأفقي تأخذان العرض نفسه؛ وبطاقة الشبكة يملأها عمودها */
  .pd-related-card,
  .recommended-card{ flex:0 0 auto; width:var(--card-w); }
  /* نسبة الصورة واحدة في الأربع */
  .pd-related-card img,
  .recommended-card img,
  .browse-product-img,
  .product-image{ aspect-ratio:var(--card-img-ratio); }
  /* الاسم والسعر: مقاسٌ واحد ووزنٌ واحد وحشوٌ واحد */
  .pd-related-card-name,
  .recommended-card-name{
    font-size:var(--t-sm); font-weight:var(--w-heavy); line-height:1.4;
    padding:var(--s-4) var(--s-4) var(--s-1);
  }
  .pd-related-card-price,
  .recommended-card-price{
    font-size:var(--t-sm); padding:0 var(--s-4) var(--s-4);
  }
  /* غلاف داخلي — الحركة (transform/opacity) بتنحط عليه هو، مو على .product-card نفسها،
     حتى ما تتصادم مع محرك scroll-snap تبع الصف الأفقي (كان هو سبب "النتعة" بعد اكتمال الظهور) */
  .pc-inner{
    display:flex;
    flex-direction:column;
    /* ⚠️ P109 — الاستدارة من القاعدة الموحّدة أعلاه، لا تُكرَّر هنا. */
    overflow:hidden;
    position:relative;
    background:linear-gradient(155deg, var(--p-white-a55) 0%, var(--glass-bg-on-light) 45%, var(--glass-bg-on-light) 100%);
    border:1px solid var(--glass-border-on-light);
    border-top-color:var(--p-white-a65);
    box-shadow:inset 0 1px 0 var(--p-white-a45);
  }
  .pc-inner::before{
    content:"";
    position:absolute;
    top:0; left:8%; right:8%;
    height:1px;
    background:linear-gradient(90deg, transparent, var(--p-white-a90), transparent);
    opacity:.8;
  }
  .product-image{
    position:relative;
    width:100%;
    aspect-ratio:var(--card-img-ratio);
  }
  .product-image .ph-label{
    position:absolute; inset:0;
    display:flex; align-items:center; justify-content:center;
    font-size:var(--t-xs);
    letter-spacing:.04em;
    color:var(--brand);
    opacity:.55;
    text-align:center;
    padding:var(--s-4);
  }

  /* لوحة المعلومات — اسم، سعر، وأزرار الإجراء — كلها تحت الصورة، والصورة نفسها نظيفة بدون أي عنصر عليها */
  .product-info{
    display:flex;
    flex-direction:column;
    gap:var(--s-3);
    padding:var(--s-4) var(--s-4) var(--s-4);
  }
  .product-name{ font-size:var(--t-sm); font-weight:var(--w-heavy); line-height:1.4; }
  .product-meta{
    /* ══════════════════════════════════════════════════════════════════════
       ⚠️ P112 — صفُّ الأزرار سطرٌ مستقلّ دائماً، لا مشاركاً للسعر.

       ⚠️ العطل (رصد المالك): «ليش الكرت يزيد ارتفاعه بعد ما أضيفه للسلة».
          كان السعر والأزرار في سطرٍ واحد يلتفّ عند الضيق. وحين يظهر العدّاد
          يصير محتوى السطر: سعر ~٥٥ + عدّاد ٧٨ + هدية ٣٢ + قلب ٢٤ + فجوات ٢٠
          = ٢٠٩ في عرضٍ متاحٍ ١٥٠ — فيلتفّ حتماً ويطول الكرت. وحسابي في P111
          أسقط السعر من المعادلة، فعالج القصّ وأبقى القفزة.

       ⚠️ والعلاج بنيةٌ لا عرض: سطرٌ للسعر وسطرٌ للأزرار **دائماً**، فارتفاع
          البطاقة واحدٌ قبل الإضافة وبعدها، ولا يتوقّف على عرضِ سعرٍ ولا على
          ظهور عدّاد. والصفُّ كاملُ العرض فلا يُقصّ منه شيء أبداً.
       ══════════════════════════════════════════════════════════════════════ */
    display:flex; flex-direction:column; align-items:stretch;
    gap:var(--s-3);
  }
  /* يُبقي الأزرار ملتصقة بالطرف حين تنزل سطراً وحدها */
  .pc-actions{ margin-inline-start:0; }   /* ⚠️ P112 — الصفّ مستقلّ فلا يُدفع إلى الطرف */
  .product-price{ font-size:var(--t-sm); color:var(--brand); white-space:nowrap; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P162 · ٢٠٢٦-٠٩-٢١ — البطاقة: ثلثان صورة وثلثٌ معلومات (قرار المالك).

     ⚠️ ما لم يتغيّر بقصد: السعر في سطرٍ والأزرار في سطر. هذا ليس ترتيباً
        عشوائياً بل علاجُ P112 — لو اجتمعا في سطرٍ واحد، ظهورُ عدّاد الكمية
        بعد الإضافة يلفّ السطر فيطول الكرت أمام عين الزائر. الأناقة المطلوبة
        تأتي من الإيقاع والتباين لا من ضغط السطرين في واحد.

     ما تغيّر: إيقاعٌ أضيق (فجوات وحشو)، واسمٌ بسطرين محجوزين فلا تتفاوت
     ارتفاعات البطاقات في الشريط، وسعرٌ أوضح لأنه مرساة القرار، وخيطُ فصلٍ
     رفيع فوق الأزرار يجعلها منطقة فعلٍ لا ذيلاً للاسم.
     ══════════════════════════════════════════════════════════════════════════ */
  .product-info{
    gap:var(--s-2);
    padding:var(--s-3) var(--s-4) var(--s-3);
  }
  .product-name{
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
    overflow:hidden; min-height:2.8em; line-height:1.4;
  }
  .product-meta{ gap:var(--s-2); }
  .product-price{ font-size:var(--t-base); font-weight:var(--w-bold); }
  /* ⚠️ بمحدّدٍ أعلى بقصد: قاعدة .pc-actions الأساسية تأتي بعد هذا الموضع في
     الملف وتضبط justify-content — والتخصيص هنا يعلوها بلا !important. */
  .product-info .pc-actions{
    padding-top:var(--s-2);
    border-top:1px solid var(--p-ink-a07);
    justify-content:flex-end;
  }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P172 · ٢٠٢٦-٠٩-٢١ — بطاقةٌ واحدة في كل مكان (رصد المالك: «بقسم مجموعة
     مختارة تُعرض بشكلٍ غير باقي الأماكن كلها»).

     P109 وحّد **سطح** البطاقة (الخلفية والاستدارة والحدّ)، لكنّ **لوحة
     المعلومات** بقيت أربعاً: بطاقة الأشرطة، وبطاقة درج التصفّح، وبطاقة
     «منتجات مرتبطة»، وبطاقة «موصى به». وP162 هذبّ الأولى وحدها، فاتّسع الفرق
     بدل أن يضيق — وهو بالضبط ما رآه المالك.

     الآن القاعدة واحدة للأربع: اسمٌ بسطرين محجوزين (فلا تتفاوت ارتفاعات
     البطاقات في شبكةٍ أو شريط)، وسعرٌ بالوزن نفسه، وإيقاعٌ واحد للحشو.
     ══════════════════════════════════════════════════════════════════════════ */
  .browse-product-info{ padding:var(--s-3) var(--s-4) var(--s-3); gap:var(--s-2); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P188 · ٢٠٢٦-٠٩-٢٢ — بطاقة المنتج تأخذ لغة بطاقة المناسبة والمقطع
     (تصميم المالك، ثلاث لقطات).

     ما كان: ثلاثة تشريحات في صفحة واحدة —
       · بطاقة الاستوديو: صورة تملأ البطاقة، والنصّ فوقها على حجابٍ داكن.
       · بطاقة المقطع: مثلها (بُنيت على .occ-card في P148).
       · بطاقة المنتج: صورة **فوق** ولوحُ معلوماتٍ أبيض **تحت**، وصفُّ أزرارٍ
         ثلاثة، وشريط توقيع. خمس طبقات مقابل ثلاث.
     فالفرق لم يكن تنسيقاً بل بنيةً مختلفة، ولذلك لم يُغلقه توحيد الخطّ في P172.

     القرار: التشريح واحد للثلاثة — صورةٌ تملأ البطاقة، حجابٌ متدرّج في أسفلها،
     وفوقه: سطرُ نوعٍ هادئ، ثم الاسم، ثم السطر الثالث (سعرٌ للمنتج، «شاهد
     الفيديو» للمقطع، وصفٌ للاستوديو). وفعلٌ واحد في كل زاوية: الحفظ قرصٌ
     زجاجيّ أعلى الصورة، والإضافة قرصٌ محدَّد أسفلها.

     ما سقط ولماذا:
     · اللوح الأبيض تحت الصورة: كان يقصّ البطاقة نصفين ويسرق من الصورة ثلثها.
     · «ابنيها كهدية» من البطاقة: ثلاثة أهداف بعرض ٤٠ بكسل على بطاقةٍ عرضها
       ١٧٠، وأعلاها صوتاً قرصٌ زيتونيّ مصمت أثقل من صورة المنتج. والمسار كامل
       في ورقة المنتج (‎#pdGiftBuildBtn‎) حيث له اسمٌ مكتوب لا أيقونة تُخمَّن.
       ⚠️ هذا يخصّ قراراً مسجّلاً للمالك (سطر «ابنيها كهدية صار الأساسي»)،
       فالإخفاء بالتنسيق لا بحذف الترميز: إرجاعه حذف سطرٍ واحد.
     · شريط «WSH SWEET · DOHA»: طبقةٌ خامسة على ١٩٣ بطاقة، والتوقيع محفورٌ في
       الصور نفسها أصلاً.

     ⚠️ مصدر الترميز واحد: الكتالوج يستنسخ البطاقة الثابتة (سطر ~١٤٩٨٢)، فأي
     تغييرٍ في القالب يسري على المئة والثلاثة والتسعين بلا مولّدٍ ثانٍ.
     ══════════════════════════════════════════════════════════════════════════ */
  .product-card .pc-inner{
    position:relative; overflow:hidden;
    border-radius:var(--r-lg);
    /* ⚠️ P189 — النسبة من تصميم المالك: بطاقةٌ طويلة (١٧٤×٤١٨) لا مربّعة
       تقريباً. والطول ليس زينة: هو ما يُنزل كتلة النصّ إلى الرُبع الأسفل حيث
       الحجاب أعتم، فيُقرأ سطر النوع بلا تعتيمٍ إضافي على الصورة. */
    aspect-ratio:3/4.2;
    border-radius:26px;
    /* الاتجاه عمودي أصلاً (قاعدة .pc-inner)، فالدفع إلى الأسفل بـjustify لا
       بـalign — وهذا ما أخطأتُه أوّل مرّة فطفا النصّ إلى أعلى البطاقة. */
    display:flex; flex-direction:column; justify-content:flex-end; align-items:stretch;
    background:var(--p-brand-deep); color:var(--p-ivory);
    border:1px solid var(--glass-border-on-light);
    border-top-color:var(--p-white-a65);
  }
  .product-card .product-image{
    position:absolute; inset:0; width:auto; height:auto;
    aspect-ratio:auto; border-radius:0; margin:0;
  }
  .product-card .product-image img{
    position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
  }
  /* الحجاب على البطاقة لا على الصورة: الصورة قد تُستبدل أو تفشل، والحجاب
     يجب أن يبقى تحت النصّ في الحالتين. */
  .product-card .pc-inner::after{
    content:''; position:absolute; inset:0; z-index:1; pointer-events:none;
    background:linear-gradient(0deg,
      var(--p-olive-night-a80) 0%, var(--p-olive-night-a62) 16%,
      var(--p-olive-night-a30) 34%, var(--p-olive-night-a06) 52%, transparent 64%);
  }
  .product-card .product-info{
    position:relative; z-index:2; width:100%;
    padding:var(--s-6) var(--s-4) var(--s-4);
    display:flex; flex-direction:column; gap:2px;
    background:none; color:var(--p-ivory);
  }
  /* ⚠️ P188 — ظلٌّ نصّي على كل ما يقع فوق صورة: الحجاب يحمي أسفل البطاقة،
     أمّا سطر النوع فيعلو مع طول الاسم فيقع أحياناً على منطقةٍ فاتحة من الصورة.
     والظلّ يحمي النصّ على أي صورةٍ تُرفع غداً بلا تعديلٍ في التدرّج. */
  .product-card .product-info,
  .recommended-card, .pd-related-card{ text-shadow:0 1px 6px var(--p-0c0e09-a58); }
  .pc-kick{ font-size:var(--t-micro); opacity:.82; letter-spacing:.04em; line-height:1.5; }
  .pc-kick:empty{ display:none; }
  /* ⚠️ P188 — لا ارتفاع محجوز للاسم بعد اليوم.
     الحجز (‎min-height:2.6em‎ من P172) كان يسوّي ارتفاعات البطاقات حين كان
     الارتفاع يتبع المحتوى. والآن ‎aspect-ratio‎ يثبّته، فالحجز لم يعد يسوّي
     شيئاً — بل يدفع سطر النوع سطراً كاملاً إلى أعلى، خارج الحجاب، فيبهت على
     الصور الفاتحة. والنصّ يُلصق بأسفل البطاقة فيبقى الإيقاع واحداً. */
  .product-card .product-name{
    color:var(--p-ivory); font-size:var(--t-base); font-weight:var(--w-bold);
    line-height:1.3; min-height:0;
  }
  /* ⚠️ P188 — السعر والفعل في سطرٍ واحد، وهذا نقضٌ مقصود لـP112.
     P112 فصلهما سطرين لأن ظهور العدّاد كان يطيل البطاقة. والآن ارتفاع البطاقة
     مربوط بنسبة الصورة (aspect-ratio) فلا يتبع محتواها إطلاقاً — فسقط سبب
     الفصل، وبقي سببُ الجمع: السعر يميناً والفعل يساراً في سطرٍ واحد. */
  /* ⚠️ P189 — السعر سطرٌ والسلّة سطرٌ تحته إلى جهة البداية، كما في التصميم.
     (P188 جمعهما في سطر، والتصميم يفصلهما — والبطاقة الطويلة تتّسع للاثنين.) */
  .product-card .product-meta{
    display:flex; flex-direction:column; align-items:stretch;
    gap:var(--s-3); margin-top:var(--s-2);
  }
  .product-card .product-info .pc-actions{ align-self:flex-end; }
  .product-card .product-price{ color:var(--p-ivory); font-size:var(--t-base); font-weight:var(--w-bold); }
  .product-card .product-info .pc-actions{
    padding-top:0; border-top:0; justify-content:flex-end;
  }
  .product-card .gift-build-btn{ display:none; }
  .pc-signature{ display:none; }

  /* الفعلان: إضافةٌ محدَّدة أسفل الصورة، وحفظٌ زجاجيّ في أعلاها. */
  .product-card .add-btn, .pc-echo-add{
    width:44px; height:44px; border-radius:50%;
    display:flex; align-items:center; justify-content:center; flex:0 0 auto;
    background:none; border:1px solid var(--p-ivory-a62); color:var(--p-ivory);
    cursor:pointer; transition:transform .15s ease, border-color .15s ease;
  }
  .pc-echo-add:active, .product-card .add-btn:active{ transform:scale(0.92); }
  .product-card .add-btn:hover, .pc-echo-add:hover{ border-color:var(--p-ivory); background:var(--p-ivory-a12); }
  .product-card .add-btn svg, .pc-echo-add svg{ width:19px; height:19px; stroke:currentColor; stroke-width:1.6; fill:none; }
  /* ⚠️ الحفظ يُنقل بالتنسيق لا بالترميز: .pc-inner هو الكتلة المرجعية
     (position:relative)، فالقرص يقف في زاويتها بلا لمس بنية البطاقة ولا
     قطع وصْله بـbindProductCard. */
  /* ⚠️ position/z-index لازمان: القرص عنصرٌ ساكن، والحجاب (::after) بـz-index:1
     يُرسم فوق كل ساكنٍ قبله — فكان القرص موجوداً في الترميز وغير مرئيّ. */
  .pc-echo-add{
    position:relative; z-index:2;
    align-self:flex-end; margin:var(--s-3) var(--s-4) var(--s-4);
  }
  .product-card .save-btn, .pc-echo-save{
    /* ⚠️ P189 — القرصان إلى جهة النهاية (اليسار في العربية) كما في تصميم
       المالك: النصّ يبدأ من اليمين والفعلان يقفان مقابله، فلا يتزاحمان معه. */
    position:absolute; top:12px; inset-inline-end:12px; z-index:3;
    width:36px; height:36px; border-radius:50%; opacity:1;
    display:flex; align-items:center; justify-content:center;
    background:var(--p-olive-night-a38); color:var(--p-ivory);
    border:1px solid var(--p-ivory-a30); cursor:pointer;
    backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  }
  .product-card .save-btn svg, .pc-echo-save svg{ width:17px; height:17px; stroke:currentColor; stroke-width:1.6; fill:none; }
  .product-card .save-btn.saved svg, .pc-echo-save.saved svg{ fill:var(--p-ivory); stroke:var(--p-ivory); }
  .product-card .qty-stepper{
    border-color:var(--p-ivory-a62); color:var(--p-ivory); height:38px;
  }
  .product-card .qty-stepper .qty-value{ color:var(--p-ivory); }
  .product-card .qty-stepper button{ color:var(--p-ivory); }

  /* بطاقتا «موصى به» و«مرتبطة» تتبعان اللغة نفسها. */
  /* ⚠️ P189 — «كروت المنتجات كلها تصميم واحد» (نصّ المالك): البطاقات الثلاث
     على نسبةٍ واحدة وحافّةٍ واحدة وحجابٍ واحد، ولها الفعلان نفسهما. */
  .recommended-card, .pd-related-card, .browse-product-card{
    position:relative; overflow:hidden; border-radius:26px;
    aspect-ratio:3/4.2; display:flex; flex-direction:column; justify-content:flex-end;
    background:var(--p-brand-deep); color:var(--p-ivory); padding:0;
    text-shadow:0 1px 6px var(--p-0c0e09-a58);
  }
  .recommended-card img, .pd-related-card img,
  .browse-product-card .browse-product-img, .browse-product-card .browse-product-img img{
    position:absolute; inset:0; width:100%; height:100%; object-fit:cover; aspect-ratio:auto;
    border-radius:0; margin:0;
  }
  .recommended-card::after, .pd-related-card::after, .browse-product-card::after{
    content:''; position:absolute; inset:0; z-index:1; pointer-events:none;
    background:linear-gradient(0deg,
      var(--p-olive-night-a80) 0%, var(--p-olive-night-a62) 16%,
      var(--p-olive-night-a30) 34%, var(--p-olive-night-a06) 52%, transparent 64%);
  }
  .recommended-card-tag,
  .recommended-card-name, .recommended-card-price,
  .pd-related-card-name, .pd-related-card-price,
  .browse-product-card .browse-product-info{ position:relative; z-index:2; color:var(--p-ivory); }
  .browse-product-card .browse-product-info{ padding:var(--s-6) var(--s-4) var(--s-4); gap:2px; }
  .browse-product-card .browse-product-name,
  .browse-product-card .browse-product-price{ color:var(--p-ivory); min-height:0; }
  .browse-product-card .pc-kick{ order:-1; }
  .recommended-card-tag{
    font-weight:var(--w-normal); opacity:.82; letter-spacing:.04em;
    padding:0 var(--s-4) !important; line-height:1.5;
  }
  .recommended-card-tag:empty{ display:none; }
  .recommended-card-name, .pd-related-card-name{
    color:var(--p-ivory); padding:2px var(--s-4) 0; min-height:0;
  }
  .recommended-card-price, .pd-related-card-price{
    color:var(--p-ivory); padding:var(--s-2) var(--s-4) var(--s-4);
  }
  /* بطاقتا «مرتبطة» و«موصى به» بلا غلافٍ للمعلومات — الاسم والسعر أبناءٌ
     مباشرون للبطاقة، فالحشو يُضبط عليهما لا على غلافٍ لا وجود له. */
  .pd-related-card-name, .recommended-card-name{ padding:var(--s-3) var(--s-4) var(--s-1); }
  .pd-related-card-price, .recommended-card-price{ padding:0 var(--s-4) var(--s-3); }
  .browse-product-name,
  .pd-related-card-name,
  .recommended-card-name{
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical;
    overflow:hidden; min-height:2.8em; line-height:1.4;
    font-weight:var(--w-heavy);
  }
  .browse-product-price,
  .pd-related-card-price,
  .recommended-card-price{
    font-size:var(--t-base); font-weight:var(--w-bold); color:var(--brand);
  }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ 2026-07-24 — إخفاء الأسعار مؤقتاً (قرار الإدارة)

     السبب: الأسعار المعروضة بالموقع كانت أرقام مؤقتة/نموذجية، مو أسعار معتمدة —
     والكتالوج الفعلي وأسعاره لسا قرار معلّق. ونظام الطلبات الداخلي بيستقبل الطلب
     **بدون سعر** بقصد (الموظف يسعّر يدوياً). عرض سعر للزبون بينما التسعير الفعلي
     يصير لاحقاً = فجوة ثقة حقيقية (الزبون يشوف رقم والموظف يحسب رقم تاني).
     فالأصدق: ما نعرض سعر إطلاقاً لحد ما يجهز الكتالوج الرسمي.

     ⚠️ للإرجاع لاحقاً: بدّل WSH_HIDE_PRICES لـ false بالجافاسكريبت — سطر واحد بس،
     وكل الأسعار ترجع تظهر بمواضعها الأصلية بدون أي تغيير تاني.

     ملاحظة تقنية: حساب الإجماليات بالجافاسكريبت ضل شغال كما هو (ما لمسناه) — بس
     مخفي بصرياً. فلما ترجع الأسعار، كل شي يشتغل فوراً بدون إعادة بناء.
     ══════════════════════════════════════════════════════════════════════════ */
  body.prices-hidden .product-price,
  body.prices-hidden .cart-upsell-price,
  body.prices-hidden .recommended-card-price,
  body.prices-hidden .reels-feed-product-price,
  body.prices-hidden .pd-related-card-price,
  body.prices-hidden .pd-price,
  body.prices-hidden .gb-product-price,
  body.prices-hidden .cb-summary-price,
  body.prices-hidden .cart-item-price,
  body.prices-hidden .browse-product-price,
  body.prices-hidden .gift-item-price,
  body.prices-hidden .cart-summary-row,
  body.prices-hidden .cart-totals{
    display:none !important;
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P190 · ٢٠٢٦-٠٩-٢٢ — السعر عاجيٌّ على البطاقة (رصد المالك: «ليش السعر
     بالأسود»).

     السبب: قاعدةٌ قديمة أعلى الملف تفرض على كل أصناف السعر
     ‎color:var(--ink-light) !important‎ — كُتبت يوم كانت البطاقة عاجيةً
     والسعر عليها حبراً. وصارت البطاقة صورةً داكنة، فبقي الحبر أسود على داكن.
     ⚠️ ولمَ ‎!important‎ هنا أيضاً ولم أحذفها هناك: تلك القاعدة تخدم أماكنَ
     أخرى ما زالت على أرضيةٍ فاتحة (السلة · ورقة المنتج · بانيةُ الهدية)،
     وحذفها يسوّد… بل يبيّض أسعارها. فالاستثناء يُكتب للبطاقة وحدها.
     ⚠️ وهذه الكتلة في آخر الملف بقصد: قواعد الحشو والتسمية لهذه البطاقات
     موزّعة على ثلاثة مواضع سابقة، وآخرُها في الملف هو من يحكم.
     ══════════════════════════════════════════════════════════════════════════ */
  .product-card .product-price,
  .recommended-card-price,
  .pd-related-card-price,
  .browse-product-card .browse-product-price{
    color:var(--p-ivory) !important;
  }
  .recommended-card-name, .pd-related-card-name{
    color:var(--p-ivory) !important; padding:2px var(--s-4) 0 !important; min-height:0 !important;
  }
  .recommended-card-price, .pd-related-card-price{
    padding:var(--s-2) var(--s-4) 0 !important;
  }
  .recommended-card-tag{ padding:0 var(--s-4) !important; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P191 · ٢٠٢٦-٠٩-٢٢ — ثلاثة تصحيحات على البطاقة (رصد المالك).

     (١) كل نصّ البطاقة عاجيّ. سطر النوع كان زيتونيّاً بقاعدةٍ في سطر ٣٩٨٠
         كُتبت يوم كان السطر على ورقةٍ فاتحة. وعلى صورةٍ داكنة يقرأ النوع
         بلونٍ والاسم بآخر — فيبدو سطرين من نظامين.
     (٢) كتلة النصّ تنزل إلى أسفل البطاقة، والسعر بمحاذاة قرص السلّة.
         القرص صار مطلقاً في الزاوية كالقلب تماماً، فالنصّ لم يعد يقف فوقه بل
         بجانبه — وحُجز له عرضٌ لا يدخله (‎padding-inline-end‎) فلا يتصادمان
         مع الأسماء الطويلة.
     (٣) خيطٌ رفيع داخل الحافّة، نفس خيط بطاقة المقطع (‎.occ-card-frame‎ بإزاحة
         ٦ بكسل) — ولكنه هنا عنصرٌ زائف لا وسمٌ إضافي، لأن البطاقات الأربع
         تُبنى في أربعة مولّدات ووسمٌ جديد يعني تعديلها كلّها.
     ══════════════════════════════════════════════════════════════════════════ */
  .pc-kick,
  .recommended-card-tag{ color:var(--p-ivory) !important; opacity:.82 !important; font-weight:var(--w-normal) !important; }

  /* القرصان في زاويتَي البطاقة، والنصّ بينهما لا فوقهما. */
  .product-card .product-info .pc-actions,
  .pc-echo-add{
    position:absolute; bottom:12px; inset-inline-end:12px; z-index:3;
    margin:0 !important; align-self:auto !important;
  }
  .product-card .product-info{ padding-bottom:var(--s-6); padding-inline-end:60px; }
  .recommended-card-tag,
  .recommended-card-name, .pd-related-card-name{ padding-inline-end:60px !important; }
  .recommended-card-price, .pd-related-card-price{
    padding:var(--s-2) var(--s-4) var(--s-6) !important;
    padding-inline-end:60px !important;
  }
  .browse-product-card .browse-product-info{
    padding-bottom:var(--s-6) !important; padding-inline-end:60px !important;
  }

  /* الخيط الرفيع داخل الحافّة — لغة بطاقة المقطع نفسها. */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P214 · ٢٠٢٦-٠٩-٢٣ — «الستروك في مجموعة مختارة خطٌّ رفيع من الأعلى فقط»
        (رصد المالك). القياس على المعاينة الحيّة: ارتفاع ::before في «مجموعة
        مختارة» = **١px** بينما هو ٢٩٧٫٥px في «موصى به» — والاثنان بنفس المقاس.

     ⚠️ السبب: قاعدة .pc-inner::before الأقدم (لمعةُ حافّةٍ علوية من يوم كانت
        البطاقة لوحاً عاجياً) تضع height:1px و background:linear-gradient.
        وهذه القاعدة تكتب inset:6px فقط، فترث الارتفاع والخلفية من تلك. وفي
        العنصر المطلق حين يجتمع top و bottom و height يفوز height ويسقط bottom
        — فينكمش الإطار إلى شريطٍ بارتفاع بكسلٍ واحد أعلى البطاقة.
        و«موصى به» سليمة لأن ::before عندها معرّفٌ هنا فقط بلا سلف.

     ⚠️ العلاج تصفيرُ الموروثَين صراحةً لا إعادةُ كتابة القاعدة القديمة: تلك
        تخدم بطاقة الشبكة (.pc-inner بلا .product-card) وما زالت مطلوبةً لها.
     ══════════════════════════════════════════════════════════════════════════ */
  .product-card .pc-inner::before,
  .recommended-card::before,
  .pd-related-card::before,
  .browse-product-card::before{
    content:''; position:absolute; inset:6px; z-index:3; pointer-events:none;
    height:auto; width:auto; background:none;
    border:1px solid var(--p-ivory-a26); border-radius:20px;
  }

  /* ⚠️ P191 — شارة التشغيل تصير كقرص الإعجاب: زجاجٌ داكن وخطٌّ عاجيّ لا قرصٌ
     عاجيّ مصمت، وتنتقل إلى جهة النهاية (اليسار) كأختها على بطاقة المنتج —
     فالزاوية نفسها تحمل الفعل نفسه في كل بطاقات الموقع. */
  /* ⚠️ الجهة بوحدةٍ فيزيائية لا منطقية: صفّ المقاطع حاوية سحبٍ أفقي اتجاهها
     ltr، فـ‎inset-inline-end‎ فيها هو اليمين لا اليسار — والمطلوب اليسار
     في الحالتين. و‎!important‎ لأن قاعدة الشارة الأصلية تأتي بعد هذا الموضع. */
  .reel-card.occ-card .reel-play{
    left:12px !important; right:auto !important; top:12px !important;
    inset-inline-start:auto; inset-inline-end:auto;
    width:36px !important; height:36px !important;
    background:var(--p-olive-night-a38) !important;
    border:1px solid var(--p-ivory-a30) !important;
    backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  }
  .reel-card.occ-card .reel-play svg{
    width:15px !important; height:15px !important; margin:0 0 0 1px !important;
    fill:none !important; stroke:var(--p-ivory) !important; stroke-width:1.6; stroke-linejoin:round;
  }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P192 · ٢٠٢٦-٠٩-٢٢ — حافّة واحدة للبطاقات الأربع (رصد المالك: «الستروك
     في موصى به صحيح وفي مجموعة مختارة لا»).

     القياس: حافّة ‎.pc-inner‎ كانت ‎rgba(255,255,255,0.65)‎ من الأعلى مع
     ‎box-shadow: inset 0 1px 0 rgba(255,255,255,0.45)‎ — لمعةٌ بيضاء على
     الحافّة العليا بقيت من يوم كانت البطاقة لوحاً عاجياً، وعلى صورةٍ داكنة
     تُقرأ خطّاً أبيض غريباً. وبطاقة «موصى به» بلا لمعة، فبدت صحيحة.
     العلاج: الأربع على حافّةٍ واحدة بلا لمعة — والخيط الداخلي وحده هو الزينة.
     ══════════════════════════════════════════════════════════════════════════ */
  .product-card .pc-inner,
  .recommended-card, .pd-related-card, .browse-product-card{
    border:1px solid var(--p-ivory-a16) !important;
    box-shadow:none !important;
  }

  /* عدّاد المرآة على البطاقة المولَّدة — بقياس قرص السلّة نفسه وموضعه. */
  .pc-echo-qty{
    position:absolute; bottom:12px; inset-inline-end:12px; z-index:3;
    display:flex; align-items:center; justify-content:space-between; gap:var(--s-2);
    height:44px; min-width:92px; padding:0 var(--s-3);
    border-radius:var(--r-full);
    border:1px solid var(--p-ivory-a62); color:var(--p-ivory);
  }
  .pc-echo-qty[hidden], .pc-echo-add[hidden]{ display:none !important; }
  .pc-echo-minus, .pc-echo-plus{
    width:24px; height:24px; display:flex; align-items:center; justify-content:center;
    cursor:pointer; flex:0 0 auto;
  }
  .pc-echo-minus svg, .pc-echo-plus svg{
    width:15px; height:15px; fill:none; stroke:currentColor; stroke-width:2;
  }
  .pc-echo-val{
    font-size:var(--t-sm); font-weight:var(--w-bold); min-width:14px; text-align:center;
    direction:ltr; unicode-bidi:isolate;
  }

  /* ملاحظة صادقة بمكان الإجماليات — الزبون لازم يعرف ليش ما في سعر وشو رح يصير */
  .cart-pricing-note{
    margin-top:var(--s-5); padding:var(--s-5) var(--s-5); border-radius:var(--r-md);
    background:var(--ivory-card-bg);
    font-size:var(--t-sm); line-height:1.7; opacity:.85;
  }
  body:not(.prices-hidden) .cart-pricing-note{ display:none; }

  /* ⚠️ 2026-07-25 (المرحلة 1، بند 2) — سطر التسعير الهادي.
     الفرق عن .cart-pricing-note: هاد سطر رقيق بدون صندوق ولا خلفية، للاستخدام
     المتكرر بلحظات القرار (كرت المنتج، عناصر السلة، الإضافات). القاعدة المعتمدة
     بملف الأسس: خط رقيق صغير، لون واحد هادي، بدون أيقونات تحذيرية ولا ألوان صارخة.
     يختفي تلقائياً لما ترجع الأسعار (بحذف صنف prices-hidden). */
  .pricing-line{
    font-size:var(--t-xs); line-height:1.65; opacity:.55;
    margin:var(--s-3) 0 0;
  }
  /* ⚠️ 2026-07-25: سطر مهلة التجهيز — نفس هدوء سطر التسعير، بس بيضل ظاهر حتى لما
     ترجع الأسعار (لأنه وعد تشغيلي مستقل عن السعر). */
  .lead-time-line{
    font-size:var(--t-xs); line-height:1.65; opacity:.55; margin:var(--s-3) 0 0;
  }
  body:not(.prices-hidden) .pricing-line{ display:none !important; }

  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ 2026-07-26 — سطر التوقيع (قرار صاحب المحل).

     المشكلة اللي بيحلها: أهم سلوك بشراء الهدايا هو "شوفي هاد شو رأيك" — والزبون
     بيعمله بأسهل طريقة عنده: **لقطة شاشة** يبعتها بواتساب، مو زر المشاركة.
     واللقطة كانت تخرج **عارية تماماً**: ولا اسم ولا موقع ولا أي دلالة على المصدر.
     يعني زائرة جاهزة تشتري تُخسر بلقطة شاشة من عميل معجب — نزيف صامت ما يظهر بأي إحصائية.

     ⚠️ ليش توقيع مو ووترمارك: بنتريست مضطر يبصم فوق الصور لأن المحتوى مو محتواه.
     هون المحتوى محتوانا — فالعلامة تقعد بالإطار، مو فوق الصورة. صفر ثمن بصري.

     ⚠️ التكرار مقبول استثناءً (9 مرات بشاشة وحدة) رغم قاعدة 3 (الوعد يُقال مرة):
     هاد مو وعد ولا إقناع — هو توقيع صانع، زي ما الصايغ يحفر علامته على كل قطعة
     مو على واجهة الدكان بس. الشرط الملزم: خفيف لدرجة إنه ما يُقرأ إلا لما تدوّر عليه.

     ⚠️ للتخفيف أو الإلغاء: عدّل opacity هون — سطر واحد يشمل كل الكروت.
     ══════════════════════════════════════════════════════════════════════════════ */
  .pc-signature{
    font-size:var(--t-micro); font-weight:var(--w-bold); letter-spacing:.22em;
    opacity:.26; margin-top:var(--s-3); text-align:start;
    user-select:none; pointer-events:none;
  }
  @media (min-width:768px){ .pc-signature{ font-size:var(--t-micro); margin-top:var(--s-4); } }

  /* ⚠️ P217 · ٢٠٢٦-٠٩-٢٤ — الطلب ١٢٨: حجزُ ارتفاع الأدوات قبل ترطيبها.
     البطاقة تولد و.pc-actions فارغة، وللكتلة padding-top و border-top — فلو
     تُركت بلا ارتفاعٍ محجوز لقفزت البطاقة ٣٢ بكسلاً لحظة عودة أزرارها.
     الرقم ليس تقديراً: هو --icon-32 نفسه، مقاس كل أزرار البطاقة الأربعة
     (.save-btn و .add-btn و .gift-build-btn و .qty-stepper) — فالمحجوز يطابق
     المشغول بالضبط، ولا إزاحة ولا فراغ زائد. ويسقط الحجز فور امتلائها. */
  .pc-actions:empty{ min-height:var(--icon-32); }
  .pc-actions{
    display:flex;
    align-items:center;
    gap:var(--s-2);
    flex:0 0 auto;
    min-width:0; flex-wrap:wrap; justify-content:flex-start; row-gap:var(--s-2);   /* ⚠️ P111 — حزامٌ: لو ضاق الصفّ يوماً التفّ ولم يُقصّ */   /* ⚠️ P110 — لا يفيض الصفُّ عن البطاقة فيُقصّ آخر زرّ */
  }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ 2026-07-26 — هرمية أزرار الكرت (قرار صاحب المحل).
     كان في ثلاثة أزرار بنفس الوزن البصري تقريباً — فالكرت ما كان يقترح أي قرار.
     الدرس من مرجع بنتريست: فعل أساسي واحد بارز، والباقي صامت.
     "ابنيها كهدية" صار الأساسي: هو المسار اللي ما حدا يقلّده، وبيرفع قيمة الطلب،
     وهو جوهر تموضع البوتيك (إهداء، مو بيع منتج).
     ⚠️ نأخذ *المبدأ* من بنتريست مو *اللون* — الفعل الأساسي زيتوني (لون العلامة)،
     والأحمر مرفوض نهائياً لأنه يهدم الهوية.
     ══════════════════════════════════════════════════════════════════════════════ */

  /* الأساسي: "ابنيها كهدية" — أكبر، معبّأ زيتوني */
  .gift-build-btn{
    width:var(--icon-32); height:var(--icon-32);
    border-radius:50%;
    border:none;
    background:var(--brand);
    color:var(--p-ivory);
    display:flex; align-items:center; justify-content:center;
    cursor:pointer;
    flex:0 0 auto;
    box-shadow:0 2px 8px var(--p-brand-a28);
    transition:transform .15s ease, box-shadow .2s ease;
  }
  .gift-build-btn svg{ width:17px; height:17px; }
  .gift-build-btn:active{ transform:scale(0.9); }
  .gift-build-btn:hover{ box-shadow:0 4px 14px var(--p-brand-a36); }

  /* الثانوي: أضف للسلة — صار محدَّداً بدون تعبئة (كان معبّأ زيتوني) */
  .add-btn{
    width:var(--icon-32); height:var(--icon-32);
    border-radius:50%;
    border:1px solid var(--p-brand-a32);
    background:none;
    color:var(--brand);
    display:flex; align-items:center; justify-content:center;
    cursor:pointer;
    flex:0 0 auto;
    transition:transform .15s ease, border-color .15s ease;
  }
  .add-btn svg{ width:14px; height:14px; stroke:currentColor; stroke-width:1.7; fill:none; }
  .add-btn:active{ transform:scale(0.9); }
  .add-btn:hover{ border-color:var(--brand); }

  /* زر الحفظ لمناسباتي القادمة */
  /* الثالث والأهدى: الحفظ — بلا حد إطلاقاً، أيقونة صامتة */
  .save-btn{
    width:var(--icon-24); height:var(--icon-24);
    border-radius:50%;
    border:none;
    background:none;
    color:var(--ink-light);
    opacity:.42;
    display:flex; align-items:center; justify-content:center;
    cursor:pointer;
    flex:0 0 auto;
    transition:transform .15s ease;
  }
  .save-btn:hover{ opacity:.75; }
  .save-btn.saved{ opacity:1; }
  .save-btn svg{ width:12px; height:12px; stroke:currentColor; stroke-width:1.6; fill:none; transition:fill .2s ease, stroke .2s ease; }
  .save-btn:active{ transform:scale(0.9); }
  .save-btn.saved svg{ fill:var(--brand); stroke:var(--brand); }

  /* عداد الكمية (يظهر بدل زر الإضافة بعد أول إضافة) */
  .qty-stepper{
    /* ⚠️ P105 — كان معبّأً بالزيتوني كزرّ "ابنيها كهدية" في البطاقة نفسها،
       فتنازع نداءان على عينٍ واحدة. والعدّاد لا يُنادي: هو يظهر **بعد** الإضافة
       فيقول "صار عندك اثنان" لا "اضغطني". فبقيت التعبئة للنداء الأساسي وحده،
       وأخذ العدّاد حدّاً بلون العلامة — يُقرأ ويُضغط ولا يزاحم. */
    display:none;
    /* ⚠️ P110 — رصد المالك: «الحقل ينقص بعد الإضافة». كان زرُّ الإضافة قرصاً
       ٣٢ ويحلّ محلّه عدّادٌ أعرض منه، فيزحف صفُّ الأزرار ويُقصّ القلب عند
       الحافّة. فحُجز للعدّاد ارتفاعُ القرص نفسه وحدٌّ أدنى لعرضه، وصار الصفّ
       لا يعرف أيّهما ظاهر. */
    height:var(--icon-32); min-width:78px; justify-content:space-between; box-sizing:border-box;
    align-items:center;
    gap:var(--s-2);
    background:transparent;
    border:1px solid var(--brand);
    border-radius:var(--r-full);
    padding:var(--s-2) var(--s-3);
    flex:0 0 auto;
    min-width:0;
  }
  .qty-stepper button{
    width:var(--icon-24); height:var(--icon-24);
    border:none; background:none;
    color:var(--brand);
    font-size:var(--t-sm); line-height:1;
    display:flex; align-items:center; justify-content:center;
    cursor:pointer;
    flex:0 0 auto;
  }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P113 · ٢٠٢٦-٠٨-١٥ — الإشارتان رسمٌ لا محرف.

     ⚠️ العطل (رصد المالك في ثلاثة مواضع): «إشارات − و + مو بالمنتصف الأفقي».
        وهي علّةٌ واحدة لا ثلاث: كانت المحرفين النصّيين − و + داخل زرّ، ومحاذاة
        المحرف الرأسية تتبع خطّ الأساس في سطره لا مركزَ صندوقه — والمحرفان
        نفساهما يجلسان في الخطّ عند ارتفاعين مختلفين. فلا يستويان مع الرقم
        بجانبهما مهما ضُبط الزرّ، لأن الضبط يقع على الصندوق والمحرفُ يعوم داخله.

     ⚠️ والرسم يحسمها من أصلها: المسار متمركزٌ في صندوق ٢٤×٢٤ بحكم إحداثياته،
        فمركز الأيقونة هو مركز الزرّ حتماً — لا يتوقّف على خطٍّ ولا على لغة.
        وهي القاعدة نفسها المتّبعة في كلّ أيقونات الموقع الأخرى.
     ══════════════════════════════════════════════════════════════════════════════ */
  .qty-stepper button .qs-ico,
  .pd-qty-stepper button .qs-ico,
  .cart-item-qty-btn .qs-ico{
    width:60%; height:60%; display:block; flex:0 0 auto;
  }
  .qty-stepper button,
  .pd-qty-stepper button,
  .cart-item-qty-btn{
    display:flex; align-items:center; justify-content:center; line-height:0; padding:0;
  }

  .qty-stepper .qty-value{
    /* ⚠️ P110 — كان بـ--font-en وهو Ciguatera: خطُّ العلامة اللاتينيّ المحجوز
       للشعار والعناوين الإنجليزية بقرار الخطوط. رقمُ كميّةٍ ليس عنواناً، فبدا
       مخالفاً لكلّ ما حوله. عاد إلى خطّ الواجهة. */
    direction:ltr; unicode-bidi:isolate;
    font-size:var(--t-sm); font-weight:var(--w-bold); color:var(--brand);
    min-width:14px; text-align:center; flex:0 0 auto;
  }

  /* نافذة تأكيد صغيرة عائمة (Toast) */
  .toast{
    position:fixed;
    bottom:28px;
    left:50%;
    transform:translateX(-50%) translateY(12px);
    z-index:200;
    background:var(--p-ink);
    color:var(--p-ivory);
    font-size:var(--t-sm);
    padding:var(--s-4) var(--s-6);
    border-radius:var(--r-full);
    box-shadow:0 10px 30px var(--p-black-a25);
    opacity:0;
    pointer-events:none;
    transition:opacity .25s ease, transform .25s ease;
  }
  .toast.show{
    opacity:1;
    transform:translateX(-50%) translateY(0);
  }
  /* ============ ورقة تفاصيل المنتج (Liquid Glass Bottom Sheet) ============ */
  .pd-backdrop{
    position:fixed; inset:0;
    background:var(--p-black-a0);
    pointer-events:none;
    z-index:150;
    /* ملاحظة: ما منحرّك opacity هون بقصد (خلل معروف بسفاري الموبايل بيلغي البلور لما يتحرك opacity
       العنصر). كمان ما منحرّك backdrop-filter نفسه بـ transition — سفاري الموبايل ما بتدعم تحريكه
       أصلاً وبتتجاهله بالكامل، فكان هاد سبب اختفاء البلور تماماً بالموبايل. البلور هلأ يظهر فوراً
       (توجّل بدون انتقال)، وبس لون التعتيم هو يلي يتلاشى بانسيابية */
    transition:background-color .28s ease;
  }
  .pd-backdrop.open{
    /* بدون backdrop-filter بقصد — بلورة كامل الشاشة خلف الورقة كانت مضاعفة (خلفية + ورقة سوا)
       وثقيلة جداً على معالج الموبايل الرسومي. الإحساس الزجاجي هلأ من بلور الورقة نفسها بس (أقوى وكافي). */
    background:var(--p-black-a40);
    pointer-events:auto;
  }
  .pd-sheet{
    position:fixed;
    left:0; right:0; bottom:0;
    z-index:151;
    max-width:520px;
    margin:0 auto;
    /* ══════════════════════════════════════════════════════════════════════════
       ⚠️ P96 · ٢٠٢٦-٠٨-١٤ — الورقة تختفي وراء لوحة المفاتيح (رصد المالك، مكرَّر).

       ⚠️ لماذا لم يُصلحه P91: عالجتُ max-height على ورقة «ساعدني أختار» وحدها،
          وثبّتُّه بالبكسل عند الفتح. لكنّ القيد الفعليّ ليس الارتفاع الأقصى —
          بل أن الورقة position:fixed; bottom:0. ولوحة المفاتيح على iOS تُقلّص
          الـviewport المرئيّ نفسه، فتُدفع الورقة لأعلى ويُقصّ أسفلها. فتثبيت
          الارتفاع لا يمسّ السبب إطلاقاً، ولهذا تكرّر الطلب.

       ⚠️ والعلاج الصحيح وحدتان لا قيمة ثابتة:
          · 88dvh — الوحدة الديناميكية تتبع الارتفاع المرئيّ الحيّ، فتنكمش
            الورقة مع الكيبورد بدل أن تُدفع خلفه. وvh احتياطيٌّ قبلها لمتصفحات
            لا تدعمها.
          · وتُطبَّق على القاعدة المشتركة لا على ورقةٍ واحدة: العلّة تصيب كل
            ورقة فيها حقل إدخال — السلة والتصفّح والمساعد والاستوديوهات — وعلاج
            واحدةٍ منها هو بالضبط ما جعل الطلب يتكرّر.
       ══════════════════════════════════════════════════════════════════════════ */
    /* ⚠️ P97 · ٢٠٢٦-٠٨-١٥ — ارتفاع واحد لكل الأوراق: ٨٠٪ (قرار المالك).

       ⚠️ سبب التفاوت الذي رصده: سبع أوراق كانت تحمل ارتفاعاً **سطرياً** خاصّاً
          بها (٨٠ · ٨٦ · ٨٨ · ٩٠)، والسطري يغلب القاعدة المشتركة مهما ضُبطت.
          فكان كل قسم يفتح بارتفاع مختلف بلا سبب تصميميّ — تراكمُ قراراتٍ فردية
          لا نظام. أُزيلت السبعة كلّها، فصار المصدر واحداً.

       ⚠️ و٨٠dvh لا 80vh: الديناميكية تتبع الارتفاع المرئيّ الحيّ فتنكمش الورقة
          مع لوحة المفاتيح بدل أن تُدفع خلفها (علّة P96). وvh احتياطيٌّ قبلها. */
    /* ══════════════════════════════════════════════════════════════════════════
       ⚠️ P100 · ٢٠٢٦-٠٨-١٥ — ارتفاعٌ ثابت لا سقفٌ أعلى (رصد المالك: «قائمة
          السلة بعدها بتنعرض بارتفاع أقلّ بكثير من ٨٠٪»).

       ⚠️ سبب بقاء التفاوت رغم توحيد الرقم في P97: max-height **سقفٌ** لا
          ارتفاع. فالورقة تنكمش إلى ارتفاع محتواها ولا تبلغ الثمانين إلا إن
          فاضت. فسلةٌ بصنفٍ واحد تفتح قصيرة، وقائمةٌ بعشرين صنفاً تفتح كاملة —
          وهو بالضبط «كل قسم يفتح بنسبة» الذي رصده المالك ثلاث مرات.
          توحيد الرقم لم يكن كافياً لأن الخاصيّة نفسها كانت الخطأ.

       ⚠️ height:80dvh يجعلها تفتح بالنسبة نفسها دائماً، ومحتواها القصير يترك
          فراغاً أسفله بدل أن يقصّر الورقة. وmax-height يبقى معه حارساً على
          المتصفحات التي لا تدعم dvh فلا تتجاوز الشاشة.

       ⚠️ P107 — لا استثناء بعد اليوم: ٩٣٪ لكل الأوراق بأمر المالك، وأُسقط
          استثناء ورقة المنتج الذي كان هنا.
       ══════════════════════════════════════════════════════════════════════════ */
    height:var(--sheet-h);
    max-height:var(--sheet-h);
    display:flex;
    flex-direction:column;
    border-radius:28px 28px 0 0;
    overflow:hidden;
    background:var(--p-white-a72);
    backdrop-filter:blur(34px) saturate(200%);
    -webkit-backdrop-filter:blur(34px) saturate(200%);
    /* بالوضع الفاتح: حد خفيف جداً بدل حد أبيض ساطع (كان يبين "متسخ" فوق خلفية فاتحة —
       نفس ملاحظة أمثلة Apple)، والاعتماد الأساسي عالظل الاتجاهي الناعم تحت لفصل الورقة بصرياً */
    border:1px solid var(--p-black-a06);
    border-bottom:none;
    box-shadow:none;
    /* الظل عبر filter:drop-shadow مش box-shadow — نفس خلل "الظل المستطيل الحاد" يلي بيصير مع
       backdrop-filter + border-radius + box-shadow سوا على عنصر فيه overflow:hidden */
    filter:drop-shadow(0 -16px 32px var(--p-black-a14));
    transform:translateY(100%);
    /* ⚠️ 2026-07-24 — ضمانة مطلقة ضد "طرف الورقة الظاهر من تحت": الإخفاء كان معتمد
       حصراً على translateY(100%) — أي على قياس ارتفاع العنصر نفسه. عالموبايل هالقياس
       مو موثوق: شريط عنوان المتصفح بيطلع/ينزل فبيتغيّر الارتفاع الفعلي أثناء التصفح،
       والأوراق شبه كاملة الشاشة (حسابي/تصفح/مناسباتي/سجل الهدايا) مقاسها بـsvh يلي
       بيختلف عن الارتفاع الحقيقي وقت الحساب — فالإزاحة بتطلع أقل من اللازم ويضل طرف
       من الورقة ظاهر فوق حافة الشاشة. على الكمبيوتر ما بتظهر لأنه ارتفاع النافذة ثابت.
       الحل: visibility:hidden بالحالة المغلقة (مع تأخير مطابق لمدة الحركة حتى تخلص
       الحركة قبل الإخفاء) — بيضمن إنه الورقة المغلقة غير مرئية 100٪ مهما طلع الحساب. */
    visibility:hidden;
    transition:transform .38s cubic-bezier(.32,.72,0,1), visibility 0s linear .38s;
    touch-action:none;
  }
  .pd-sheet.open{
    transform:translateY(0);
    visibility:visible;
    transition:transform .38s cubic-bezier(.32,.72,0,1), visibility 0s linear 0s;
  }
  .pd-sheet.dragging{ transition:none; }

  .pd-handle-wrap{
    display:flex; justify-content:center;
    padding:var(--s-4) 0 var(--s-2);
    cursor:grab;
    flex-shrink:0;
  }
  .pd-handle{
    width:38px; height:4px;
    border-radius:var(--r-full);
    background:var(--p-ink-a22);
  }

  .pd-scroll{
    overflow-y:auto;
    -webkit-overflow-scrolling:touch;
    /* ⚠️ 2026-07-24 — خلل حقيقي انلقى بالتدقيق: الأب (.pd-sheet) عليه touch-action:none
       (مقصودة، عشان السحب لإغلاق الورقة يشتغل عبر المقبض بدون تعارض)، بس هالقيمة بترث
       للأبناء — فمنطقة المحتوى هاي كانت ممنوعة من السحب باللمس بالكامل عالموبايل. النتيجة:
       الزبون يفتح ورقة منتج ويشوف الجزء العلوي بس (المقبض + الصورة + الأزرار) وما يقدر
       ينزل يشوف الوصف/المحتويات/المنتجات المرتبطة — بتبين كأنها "نص نافذة عالقة".
       على الكمبيوتر ما بتظهر لأنه عجلة الماوس ما بتتأثر بـtouch-action إطلاقاً.
       الحل: استثناء صريح للسحب العمودي هون. */
    touch-action:pan-y;
  }

  .pd-gallery{
    /* ⚠️ P115 — عودةٌ إلى السلوك الأصلي: العرض كاملٌ والارتفاع يُحسب من نسبة
       الصورة نفسها. تدخّلاتي في P112 و١١٤ (إطارٌ ثابت ثم سقفٌ ٤٢٪) صغّرت
       الصورة من ٣٦٨×٤٣٧ نقطة إلى ٢٤٠×٣٠٠ — الثلث — والمالك لم يطلب تصغيراً
       قطّ. طلبُه توسيعُ مساحة العرض بتقليل الفراغات حولها، لا تقليصها. */

    position:relative;
    width:100%;
    margin:0;
    /* ⚠️ 2026-07-24 — شبكة أمان: الارتفاع الفعلي بينحسب بالجافاسكريبت من نسبة الصورة
       الحقيقية (fitGalleryToImage). لو فشل الحساب لأي سبب (صورة ما تحمّلت، شبكة بطيئة،
       عرض الحاوية لسا صفر لحظة الفتح)، كان المعرض ينهار لارتفاع شبه معدوم وتبين الورقة
       "فاضية/نص نافذة". هالحد الأدنى بيضمن إنها تضل بمظهر معقول بأسوأ الحالات. */
    /* ⚠️ P112 — إطارٌ ثابتٌ مربّع بدل ارتفاعٍ يُحسب لكل صورة.
       ⚠️ العطل (رصد المالك): «تنقص من تحت وبدي أعمل سكرول لأشوف الأسفل».
          كان الارتفاع يُحسب من نسبة **صورةٍ واحدة** ثم تُعرض فيه صورٌ بنسبٍ
          مختلفة، فما طابقها يُرى وما خالفها يُقصّ أو يترك فراغاً — والقياس
          نفسه يقع أحياناً قبل اكتمال التخطيط فيخرج قصيراً.
       ⚠️ والإطار الثابت يحسم الاثنين: نسبةٌ واحدة مع object-fit:contain تعني
          أن كلّ صورةٍ تُرى كاملةً مهما كانت نسبتها، وأن ارتفاع الورقة لا
          يتغيّر بين شريحةٍ وأخرى. وهي نسبة البطاقة نفسها. */
    
    
    min-height:240px;
    /* الارتفاع منحسبه ديناميكياً بالجافاسكريبت حسب نسبة كل صورة فعلياً (مو نسبة ثابتة)،
       بعد ما نطرح الحشو من العرض المتاح — هيك الصورة تحافظ على نسبتها الأصلية بالكامل
       جوا إطار محشو، بدل ما تتمدد لتعبي العرض حافة-لحافة.
       ⚠️ 2026-07-22: الخلفية هلأ background:inherit (تاخد نفس خلفية ورقة تفاصيل المنتج
       الزجاجية نفسها)، بدل لون عاجي منفصل — الكرت والصورة صاروا بخلفية واحدة موحّدة. */
    overflow-x:auto;
    overflow-y:hidden;
    display:flex;
    scroll-snap-type:x mandatory;
    -webkit-overflow-scrolling:touch;
    scrollbar-width:none;
    /* نفس تصليح الهيرو (2026-07-24): pan-x لحالها كانت تمنع السحب العمودي لمحتوى الورقة
       لو نزل الإصبع فوق الصورة — والصورة بتاخد مساحة كبيرة من الورقة. */
    touch-action:pan-x pan-y;
    background:transparent;
  }
  .pd-gallery::-webkit-scrollbar{ display:none; }
  /* ⚠️ 2026-07-22: كل صورة هلأ بإطار محشو خاص فيها (مو ملزوقة بحواف الشاشة) — كل شريحة
     صندوقها الخاص بحشو ثابت، والصورة جواها بنصف قطر خاص فيها (Concentric Corners)،
     بدل معرض قديم كانت فيه الصورة تعبي الشريحة بالكامل بدون أي هامش. */
  .pd-gallery-slide{
    flex:0 0 100%;
    scroll-snap-align:start;
    box-sizing:border-box;
    padding:0 var(--s-5);   /* ⚠️ P117 — قرار المالك: ارتفاع ٤٤٠ ⇒ عرض ٣٧٠ ⇒ حشوٌ جانبيّ ١٦ */
    display:flex;
    align-items:center;
    justify-content:center;
  }
  .pd-gallery-slide img{
    width:100%; height:100%;
    object-fit:var(--gallery-img-fit);
    border-radius:var(--r-md);
    display:block;
  }
  /* ══ P39 · ٢٠٢٦-٠٨-٠٩ — شريحة فيديو المنتج داخل معرض الصور ══════════════════════
     الشريحة الثانية تحمل صورة الغلاف (poster) + شارة تشغيل فوقها. عنصر <video>
     الحقيقي لا يُنشأ ولا يُنزَّل ملفه إلا عند الضغط على التشغيل — ففتح الصفحة يبقى
     خفيفاً (الغلاف صورة فقط). الأصل من media_library عبر أعمدته: video_role للدور،
     cover_asset_id للغلاف، duration_seconds للمدة. */
  .pd-gallery-slide.pd-gallery-video{ position:relative; cursor:pointer; }
  .pd-video-play{
    position:absolute; inset:0; margin:auto;
    width:var(--icon-56); height:var(--icon-56); border-radius:50%; border:none; cursor:pointer;
    background:var(--p-ink-a55); color:var(--p-ivory);
    display:flex; align-items:center; justify-content:center;
    -webkit-backdrop-filter:blur(2px); backdrop-filter:blur(2px);
    box-shadow:0 6px 20px var(--p-black-a28);
    transition:transform .18s ease, background .18s ease;
  }
  .pd-video-play:hover{ transform:scale(1.06); background:var(--p-ink-a72); }
  .pd-video-play svg{ width:24px; height:24px; margin-inline-start:var(--s-2); }
  .pd-video-badge{
    position:absolute; bottom:26px; inset-inline-start:26px; z-index:2;
    background:var(--p-ink-a55); color:var(--p-ivory);
    font-size:var(--t-xs); line-height:1; padding:var(--s-2) var(--s-4); border-radius:var(--r-full);
    display:inline-flex; align-items:center; gap:var(--s-2); pointer-events:none;
    -webkit-backdrop-filter:blur(2px); backdrop-filter:blur(2px);
  }
  .pd-video-badge svg{ width:11px; height:11px; }
  .pd-gallery-video.playing .pd-video-play,
  .pd-gallery-video.playing .pd-video-badge{ display:none; }
  .pd-gallery-video.playing > img{ display:none; }
  .pd-video-el{
    width:100%; height:100%;
    max-height:100%;
    object-fit:contain;
    border-radius:var(--r-md); display:block; background:var(--p-black);
  }
  /* ⚠️ 2026-07-26 — النقاط انتقلت خارج حاوية الصور المتحركة.
     كانت position:absolute جوّا #pdGallery — وهي حاوية **تتحرك أفقياً**، فالنقاط كانت
     تمشي مع الصورة الأولى وتختفي عن الشاشة مع أول سحب.
     صارت عنصراً مستقلاً تحت المعرض: ثابتة دايماً، والنقطة النشطة بس تتغيّر.
     ⚠️ وأنزل شوي (مسافة 12px) بدل ما تكون ملاصقة لحرف الصورة. */
  /* ⚠️ 2026-07-26 — قضيب مؤشر السحب الأفقي. رفيع جداً وبلون العلامة الباهت — يوضّح
     بدون ما يزاحم المحتوى. الجزء المتحرّك عرضه = نسبة المرئي من الكل. */
  .scroll-rail{
    position:relative; height:2px; border-radius:var(--r-full);
    margin:var(--s-4) var(--s-7) 0;
    background:var(--p-brand-a10);
    overflow:hidden; direction:ltr;
  }
  .scroll-rail[hidden]{ display:none !important; }

  /* ══════════════════════════════════════════════════════════════════════════════
     قسم المناسبات — الشكل الجديد · P49 · ٢٠٢٦-٠٨-١٠ (اعتمده المالك على المعاينة)

     ما كان: ثمان وخمسون بطاقة أيقونية متطابقة في شريط أفقي لا ينتهي، وفوق كلٍّ
     منها كلمة «هدايا» مكرّرة ثمانياً وخمسين مرة. المحور يبدو صفّاً واحداً
     متكرّراً لا ثماني وخمسين وجهة.

     ما صار: قلّة منسّقة بالصورة، والباقي خلف بابين هادئين — بحثٌ في الأعلى
     وقائمةٌ كاملة في الأسفل. البوتيك لا يفرش بضاعته كلها على الواجهة.

     ⚠️ الانحناء ٢٢px مطابق لكرت المنتج حرفياً — لغة واحدة للحواف في الصفحة.
     ⚠️ البابان صنف واحد لا صنفان متشابهان، فلا يفترقان عند أي تعديل لاحق.
     ⚠️ بلا filter مع backdrop-filter في أي عنصر هنا (التركيبة الموثّقة للتشويش).
     ══════════════════════════════════════════════════════════════════════════════ */
  .occ-head{ padding:0 var(--s-7); }
  /* ⚠️ P50 — التباعد الحرفي رُفع عن العربية: العربي خط متّصل، والتباعد الموجب
     يفكّ اتصال الحروف فتُقرأ «م ن ا س ب ا ت» — وهو أحد الأسباب الثلاثة الموثّقة
     لوهم «تعدّد الخطوط» بالمشروع. يبقى للاتينية وحدها. */
  .occ-eyebrow{
    font-size:var(--t-xs); color:var(--brand);
    opacity:.72; margin-bottom:var(--s-5); font-weight:var(--w-normal);
  }
  /* ⚠️ P57 — سطر «المناسبات» يسمّي القسم كلّه، فلا يصحّ أن يكون بمقاس السطر
     العلوي لشريط داخلي. كبّر ورُفع وزنه وتباينه ليُقرأ عنواناً لا هامشاً.
     ⚠️ ومحصور في .occ-head وحدها: السطر العلوي داخل .occ-rail-head يخصّ شريطاً
     بعينه لا القسم، فيبقى صغيراً — وإلا صار في القسم عنوانان بنفس الوزن. */
  .occ-head .occ-eyebrow{
    font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.9; margin-bottom:var(--s-5);
  }
  body.lang-en .occ-head .occ-eyebrow{ font-size:var(--t-sm); letter-spacing:.2em; }
  body.lang-en .occ-eyebrow{ letter-spacing:.28em; font-size:var(--t-micro); }

  /* ⚠️ العنوان كان ٢٧px بعرض ١٦ محرفاً، فينكسر «ما يليق / بها.» ويبدو مقطوعاً.
     كبّرناه ووسّعنا مداه وأرخينا سطره — سطران متوازنان لا سطر ونصف. */
  .occ-h{
    font-size:var(--t-2xl); font-weight:var(--w-normal); line-height:1.5;
    letter-spacing:0; max-width:24ch;
  }
  .occ-h em{ font-style:normal; font-weight:var(--w-bold); color:var(--brand); }
  .occ-lede{
    margin-top:var(--s-5); font-size:var(--t-sm); line-height:2;
    opacity:.55; max-width:34ch;
    /* ⚠️ P59 — كان السطر ينتهي بكلمة يتيمة وحدها («منه.») لأن الكسر يقع عند
       آخر كلمة تسع. text-wrap:pretty يوازن السطر الأخير، ويُتجاهل بهدوء في
       المتصفحات التي لا تعرفه فلا خسارة. */
    text-wrap:pretty;
  }

  /* الباب: هيئة واحدة للبحث ولكل المناسبات */
  .occ-link-row{
    width:100%; background:none; border:none;
    /* ⚠️ P57 — رُفع border-top: كان هذان الخطّان يقطعان القسم من الداخل، وقد
       انتقلا إلى حدّي القسم (::before و ::after على .occasions). والحشو باقٍ
       ليحفظ المسافة التي كان الخطّ يصنعها. */
    padding:var(--s-5) 0 0; margin:var(--s-7) 0 0;
    font-family:inherit; font-size:var(--t-sm); font-weight:var(--w-normal); color:var(--brand);
    display:flex; align-items:center; justify-content:space-between;
    cursor:pointer; text-align:start; touch-action:manipulation;
    transition:padding-inline .3s ease;
  }
  .occ-link-row:hover{ padding-inline:var(--s-3); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P57 — سهام هذا القسم كانت المحرف النصّي ← بينما كل الموقع يرسمها مساراً
     في SVG بنفس التوقيع (M15 19l-7-7 7-7 · stroke-linecap و linejoin مدوّران).
     المحرف النصّي يتبع الخط لا نظام الأيقونات: سُمكه ورأسه وميله تقرّرها عائلة
     الخط، فيخرج أعرض رأساً وأقصر جسماً من كل سهم آخر بالصفحة — وهذا ما رصده
     المالك. رجّعناها إلى المسار نفسه، فصار للسهم مصدر واحد في الموقع.
     ⚠️ والمقاس ١٥px هو مقاس سهم لافتة «لا تعرف ماذا تختار؟» حرفياً. */
  .occ-link-ar{
    flex:0 0 auto; width:15px; height:15px; opacity:.55;
    transition:transform .3s ease;
  }
  .occ-link-ar svg{ width:100%; height:100%; display:block; }
  .occ-link-row:hover .occ-link-ar{ transform:translateX(-4px); }
  /* ⚠️ P119 — حُذفت: الرابط ترك نمط الصفّ كامل العرض وانتقل إلى ترويسة قسمه. */
  /* ⚠️ P52 — كان مقصوصاً من الطرفين: .occ-link-row{width:100%} تأتي بعد قاعدته
     في الملف فتغلبها، فيخرج بعرض القسم كاملاً بلا هوامش. القاعدة هنا بعدها. */
  .occ-link-search{ width:calc(100% - 48px); margin:0 var(--s-7); }
  /* ⚠️ P59 — نفس عطل P56 وقد فاتني هذان الصفّان: العناوين والكروت محبوسة في
     عمود ١١٢٠ متمركز، وهما بلا حدّ عرض فيمتدّان بعرض الشاشة كاملة — فيقع
     نصّهما بأقصى اليمين وسهمهما بأقصى اليسار، خارج هوامش القسم. رصده المالك.
     القاعدة المستخلصة: إصلاح المحاذاة يُطبَّق بمسح كل عناصر القسم لا على ما
     رُصد منها؛ فالعنصر الذي لم يُرصد اليوم يُرصد غداً. */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P186 · ٢٠٢٦-٠٩-٢١ — قاعدةٌ ميتة تُحيا: صفّ «ابحث عن مناسبتك».

     العطل (رصد المالك): «النصوص هون مو ع سوا، كل نصّ عنوان بجهة».
     السبب هنا بالضبط ما حذّر منه P59 نفسه: كانت القاعدة تحمل محدِّدين، فحذف
     P119 أحدهما وترك الفاصلة — فصار المحدِّد ‎.occ-link-search,‎ ثم ‎}‎، وهذا
     محدِّدٌ غير صالح يُسقط المتصفحُ الكتلة كلَّها بلا إنذار. فبقي الصفّ على
     قاعدة الهاتف (‎calc(100% - 48px)‎) بعرض الشاشة كاملة، ونصُّه في أقصى
     اليمين وسهمه في أقصى اليسار خارج عمود القسم.
     القاعدة المستخلصة: حذف محدِّدٍ من قائمة يعني حذف فاصلته معه.
     ══════════════════════════════════════════════════════════════════════════ */
  @media (min-width:768px){
    /* ⚠️ width:100% لا auto: الصفّ زرّ، و‎width:auto‎ على الزرّ انكماشٌ إلى
       مقاس نصّه (shrink-to-fit) — فيتوسّط بالهامش التلقائي بدل أن يملأ العمود. */
    .occ-link-search{
      width:100%; max-width:1200px; margin-inline:auto; padding-inline:var(--s-9);
    }
    /* لمسة التحويم تُضاف فوق الحشو لا تحلّ محلّه، وإلا قفز الصفّ عند المرور. */
    .occ-link-search:hover{ padding-inline:calc(var(--s-9) + var(--s-3)); }
  }

  .occ-rail-head{ padding:0 var(--s-7); }
  .occ-rail-t{ font-size:var(--t-xl); font-weight:var(--w-normal); letter-spacing:0; line-height:1.4; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P50 — بطاقة المناسبة بمقاس كرت المنتج وزجاجه بأمر المالك.

     كانت لوحة زيتونية معتمة بعرض ٧٣٪ من الشاشة — كتلة غريبة عن بقية الصفحة.
     صارت ١٧٤px وانحناءً ٢٢px ونفس التدرّج الزجاجي وحدّه، وبنية صورة فوق
     ومعلومات تحت — أي كرت المنتج حرفياً. مصدر واحد للشكل، لا شكلان متجاوران.
     ══════════════════════════════════════════════════════════════════════════ */
  .occ-cards{ gap:var(--s-5); padding-top:var(--s-5); }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P52 — تخطيط المعاينة بمقاس كرت المنتج وزجاجه (أمر المالك).

     بنية واحدة لحالتين: المحتوى يقعد بأسفل البطاقة دائماً — سطر علوي صغير،
     ثم الاسم كبيراً، ثم سطر تعريف، ثم صفّ الفعل فوق خط رفيع.

     · بلا صورة ⇒ زجاج كرت المنتج نفسه وحبر داكن.
     · مع صورة ⇒ الصورة تملأ البطاقة وحجابٌ متدرّج وحبر عاجي، وإلا لا يُقرأ الاسم.
     الحالتان بنفس المقاس ونفس الانحناء، فلا يبدو الصفّ مختلطاً.
     ══════════════════════════════════════════════════════════════════════════ */
  .occ-card{
    scroll-snap-align:start; flex:0 0 auto;
    width:174px; aspect-ratio:3/4.2;
    border-radius:var(--r-lg); overflow:hidden;
    position:relative; display:flex; align-items:flex-end;
    cursor:pointer; padding:0; text-align:start;
    font-family:inherit; color:var(--ink, var(--p-ink));
    background:linear-gradient(155deg, var(--p-white-a55) 0%, var(--glass-bg-on-light) 45%, var(--glass-bg-on-light) 100%);
    border:1px solid var(--glass-border-on-light);
    border-top-color:var(--p-white-a65);
    touch-action:manipulation;
    transition:transform .22s ease, border-color .22s ease;
  }
  .occ-card:hover{ transform:translateY(-2px); border-color:var(--p-brand-a30); }

  .occ-card-media{ position:absolute; inset:0; overflow:hidden; }
  .occ-card-img{
    position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
    transform:scale(1.04);
    transition:transform 1.4s cubic-bezier(.22,.61,.36,1);
  }
  .occ-card:hover .occ-card-img{ transform:scale(1.10); }
  /* الحجاب لا يُرسم إلا فوق صورة — وإلا أعتم الزجاج بلا سبب */
  .occ-card.has-img .occ-card-media::after{
    content:''; position:absolute; inset:0;
    background:linear-gradient(to top, var(--p-charcoal-a90) 0%, var(--p-charcoal-a52) 36%,
      var(--p-charcoal-a12) 64%, var(--p-charcoal-a20) 100%);
  }
  .occ-card.has-img{ color:var(--p-ivory); background:var(--p-brand-deep); }

  /* رمز المناسبة حين لا صورة — خفيف جداً، خلف النصّ لا فوقه */
  .occ-card-glyph{
    position:absolute; top:26%; inset-inline-end:16px;
    color:var(--p-brand-a16);
  }
  .occ-card-glyph svg{ width:52px; height:52px; fill:none; stroke:currentColor; stroke-width:1; }

  .occ-card-frame{
    position:absolute; inset:8px; pointer-events:none; border-radius:var(--r-md);
    border:1px solid var(--p-brand-a13);
  }
  .occ-card.has-img .occ-card-frame{ border-color:var(--p-ivory-a22); }

  .occ-card-info{
    position:relative; z-index:2;
    display:flex; flex-direction:column;
    padding:0 var(--s-5) var(--s-5); width:100%;
  }
  .occ-card-kick{
    font-size:var(--t-micro); opacity:.6; margin-bottom:var(--s-3);
    display:flex; align-items:center; gap:var(--s-3);
  }
  .occ-card-kick i{
    font-style:normal; width:3px; height:3px; border-radius:50%;
    background:currentColor; opacity:.8; flex:0 0 auto;
  }
  .occ-card-name{ font-size:var(--t-md); font-weight:var(--w-normal); line-height:1.3; letter-spacing:-.01em; }
  .occ-card-note{
    margin-top:var(--s-3); font-size:var(--t-xs); line-height:1.6; opacity:.6;
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
  }
  .occ-card-go{
    margin-top:var(--s-4); padding-top:var(--s-4);
    border-top:1px solid var(--p-brand-a18);
    font-size:var(--t-xs); opacity:.8;
    display:flex; justify-content:space-between; align-items:center;
  }
  .occ-card.has-img .occ-card-go{ border-top-color:var(--p-ivory-a26); }
  /* ⚠️ P57 — سهم البطاقة صار المسار نفسه لا المحرف النصّي، بمقاس ١٢px لأنه
     يجاور نصّاً ١٠px لا ١٣px كسهام الصفوف. */
  .occ-card-ar{ flex:0 0 auto; width:12px; height:12px; display:block; }
  .occ-card-ar svg{ width:100%; height:100%; display:block; }

  .occ-card-chip{
    position:absolute; top:14px; inset-inline-start:14px; z-index:3;
    background:var(--p-ivory-a95); color:var(--p-brand-deep);
    font-size:var(--t-micro); padding:var(--s-2) var(--s-4); border-radius:var(--r-full);
  }

  /* ── ورقة كل المناسبات ────────────────────────────────────────────────── */
  .occ-sheet-sub{ font-size:var(--t-sm); opacity:.55; margin:var(--s-3) 0 var(--s-7); }
  .occ-g-t{
    /* ⚠️ P52 — كان ١٠px بتباعد .24em: صغير، والتباعد يفكّ اتصال العربية
       فتُقرأ «أ ف ر ا ح  و ت ه ا ن» — نفس العلّة الموثّقة. */
    font-size:var(--t-base); font-weight:var(--w-bold); letter-spacing:0;
    color:var(--brand); opacity:.9;
    margin:var(--s-8) 0 var(--s-5); padding-top:var(--s-7);
    border-top:1px solid var(--p-brand-a14);
  }
  .occ-g-t:first-child{ margin-top:0; padding-top:0; border-top:none; }
  .occ-g-list{ columns:2; column-gap:var(--s-6); }
  @media (max-width:359px){ .occ-g-list{ columns:1; } }
  .occ-g-list button{
    display:block; width:100%; text-align:start; break-inside:avoid;
    font-family:inherit; color:inherit; background:none; border:none;
    font-size:var(--t-sm); font-weight:var(--w-normal); padding:var(--s-3) 0; cursor:pointer;
    touch-action:manipulation; transition:color .2s ease;
  }
  .occ-g-list button:hover{ color:var(--brand); }

  @media (min-width:768px){
    .occ-head, .occ-rail-head{ padding-inline:var(--s-9); max-width:1200px; margin-inline:auto; }
    /* ⚠️ P59 — حُذف من هنا سطرٌ ثانٍ لـ.occ-link-all بقيمة قديمة
       (width:calc(100% - 80px); margin-inline:40px). كان يأتي **بعد** قاعدته
       الصحيحة في الملف فيغلبها بالترتيب لا بالقيمة — نفس علّة P52 بالحرف.
       القاعدة: المحدِّد الواحد لا يُكتب في موضعين. */
    .occ-h{ font-size:var(--t-2xl); }
  }


  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P43 · ٢٠٢٦-٠٨-١٠ — أزرار التنقّل تحت كل صفّ أفقي (قرار المالك).

     ⚠️ عامّة لا خاصة بقسم: تُبنى داخل attachRail نفسها، فتأخذها كل حاوية
     .drag-scroll قائمة أو مستقبلية بلا سطر إضافي — نفس مبدأ خط التقدّم.

     ⚠️ لا تظهر إذا كان المحتوى غير أعرض من الشاشة: صفّ لا ينسحب لا يحتاج زرّي
     تنقّل، وإظهارهما معطّلين يعد بما لا يوجد.

     ⚠️ الجهة اليمين بأمر المالك — لا الطرف الخلفي. فالحاوية تضعهما أولاً في
     الترتيب، و flex-start في صفحة RTL هو اليمين فعلاً.

     ⚠️ الاتجاه محسوب لا مفترَض: scrollLeft في RTL سالب بالمتصفحات الحديثة،
     فنقرأ اتجاه الحاوية فعلياً ونضرب الإشارة. الافتراض هنا كان سيقلب الزرّين.
     ══════════════════════════════════════════════════════════════════════════════ */
  .rail-ctl{
    display:flex; align-items:center; gap:var(--s-5);
    margin:var(--s-4) var(--s-7) 0;
    /* ⚠️ P45 — فوق حافة الصفّ لا تحتها: صفوف المنتجات عليها margin-bottom سالب
       (‎-34px) يسحب ما بعدها لأعلى، فكانت لوحة التحكّم تقع **تحت** ذيل الكروت
       وتلتقط الكروت ضغطاتِ الأزرار. z-index وحده لا يكفي — التعويض يُحسب في
       attachRail من الهامش الفعلي للصفّ، وهذا يضمن الطبقة فوق أي تراكب باقٍ. */
    position:relative; z-index:3;
  }
  .rail-ctl[hidden]{ display:none !important; }
  .rail-ctl .scroll-rail{ margin:0; flex:1 1 auto; }
  .rail-arrows{ display:flex; gap:var(--s-3); flex:0 0 auto; touch-action:manipulation; }
  .rail-arrow{
    width:var(--icon-32); height:var(--icon-32); border-radius:50%;
    /* ⚠️ P45 — منع تكبير الصفحة عند ضغطتين متتاليتين بسرعة. المتصفح يفسّر
       اللمسة المزدوجة كـ double-tap zoom ما لم يُصرَّح بغير ذلك، وزرّ تنقّل
       يُضغط مرتين بسرعة بطبيعته. القيمة manipulation تبقي التمرير والسحب. */
    touch-action:manipulation;
    border:1px solid var(--p-brand-a20);
    background:none; color:var(--brand);
    display:flex; align-items:center; justify-content:center;
    cursor:pointer; padding:0;
    transition:border-color .22s ease, background .22s ease, opacity .22s ease;
  }
  .rail-arrow svg{ width:14px; height:14px; fill:none; stroke:currentColor; stroke-width:1.7; }
  .rail-arrow:hover{ border-color:var(--brand); background:var(--p-brand-a06); }
  .rail-arrow:active{ transform:scale(0.93); }
  .rail-arrow[disabled]{ opacity:.26; pointer-events:none; }
  @media (min-width:768px){ .rail-ctl{ margin-inline:var(--s-9); } }
  .scroll-rail-thumb{
    position:absolute; top:0; bottom:0;
    background:var(--p-brand-a42); border-radius:var(--r-full);
    transition:inset-inline-start .12s linear, width .2s ease;
  }
  @media (min-width:768px){ .scroll-rail{ margin-inline:var(--s-9); } }

  .pd-dots{
    display:flex; gap:var(--s-3);
    justify-content:center;
    margin:var(--s-3) 0 var(--s-1);   /* ⚠️ P115 — أربع نقاطٍ أقلّ فوق الشريط */
  }
  .pd-dots span{
    width:5px; height:5px;
    border-radius:var(--r-full);
    background:var(--p-ink-a25);
    transition:background .2s ease, transform .2s ease;
  }
  .pd-dots span.active{
    background:var(--brand);
    transform:scale(1.3);
  }

  .pd-body{ padding:18px 22px 28px; }
  .pd-name-row{ display:flex; align-items:flex-start; justify-content:space-between; gap:var(--s-4); }
  /* ⚠️ P91 — نفس نمط الأزرار المحايدة بجانب الاسم، بلا تمييز يوحي بأهمية أعلى
     من زرّي المشاركة والتكبير. ودائري مثلهما — لا سهم مختلف الشكل. */
  .pd-back-in-sheet{ position:static; width:var(--icon-44); height:var(--icon-44); border-radius:50%;
    background:var(--p-black-a06); color:inherit; backdrop-filter:none; -webkit-backdrop-filter:none;
    display:flex; align-items:center; justify-content:center; border:none; cursor:pointer; flex:0 0 auto;
  }
  .pd-back-in-sheet[hidden]{ display:none !important; }
  .pd-name{ font-size:var(--t-md); font-weight:var(--w-heavy); line-height:1.4; margin-bottom:var(--s-3); }
  .pd-name-actions{ display:flex; gap:var(--s-3); flex:0 0 auto; margin-top:var(--s-1); }
  /* أزرار أيقونة صغيرة محايدة — بجانب اسم المنتج، مو عائمة فوق صورة */
  .pd-name-actions .pd-icon-btn{
    position:static; width:var(--icon-32); height:var(--icon-32); border-radius:50%;
    background:var(--p-black-a06); color:inherit;
    display:flex; align-items:center; justify-content:center;
    backdrop-filter:none; -webkit-backdrop-filter:none;
  }
  .pd-price{ font-size:var(--t-base); color:var(--brand); font-weight:var(--w-bold); }
  .pd-desc{ font-size:var(--t-sm); line-height:1.9; opacity:.7; margin-top:var(--s-4); }
  /* ⚠️ P164 — صندوق «لماذا تناسب؟»: زجاج الصفحة نفسه لا لوحٌ جديد، فينتمي
     لورقة المنتج بدل أن يكون لصاقةً عليها. */
  .pd-why{
    margin-top:var(--s-5); padding:var(--s-5);
    border-radius:var(--r-md);
    background:var(--glass-bg-on-light);
    border:1px solid var(--glass-border-on-light);
  }
  .pd-why[hidden]{ display:none !important; }
  .pd-why-t{ display:block; font-size:var(--t-xs); font-weight:var(--w-bold); color:var(--brand); }
  .pd-why-b{ margin:var(--s-2) 0 0; font-size:var(--t-sm); line-height:1.85; opacity:.72; }

  /* أزرار مشاركة/تكبير فوق معرض الصور */
  .pd-gallery-wrap{ position:relative; }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P97 — ورقة المنتج وحدها أطول: ٩٢٪ (رصد المالك: «خليها تفتح بارتفاع أعلى
     حتى ما يصير قصّ للصورة»).

     ⚠️ ولماذا استثناءٌ من قاعدة ٨٠٪ الموحّدة: المعرض يحسب ارتفاعه من **نسبة
        الصورة الحقيقية** لا من نسبةٍ ثابتة (fitGalleryToImage)، فصورةٌ طويلة
        تُنتج معرضاً طويلاً. والورقة عند ٨٠٪ تقصّه — لا لأن المعرض أخطأ، بل لأن
        وعاءه أقصر ممّا يحتاج. فالتوحيد يخدم الأوراق التي محتواها نصّ وحقول،
        وهذه محتواها صورة بأبعادٍ لا نتحكّم فيها.

     ⚠️ والاستثناء مكتوبٌ هنا صراحةً بمحدِّدٍ واحد، لا سطرياً على الترميز كما
        كانت الأوراق السبع — فيبقى مصدره ظاهراً ولا يتكرّر تفاوتٌ صامت.
  ══════════════════════════════════════════════════════════════════════════════ */
  /* ⚠️ P107 — وحُذف استثناء ورقة المنتج للسبب نفسه. */
  .pd-gallery-actions{
    position:absolute; top:14px; inset-inline-end:14px; z-index:3;
    display:flex; gap:var(--s-3);
  }
  .pd-icon-btn{
    width:var(--icon-32); height:var(--icon-32); border-radius:50%; border:none;
    background:var(--p-ink-a55); color:var(--p-ivory);
    display:flex; align-items:center; justify-content:center; cursor:pointer;
    backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
  }
  .pd-icon-btn svg{ width:16px; height:16px; }

  /* تبويبات الوصف / نصائح العناية */
  .pd-info-tabs{ display:flex; gap:var(--s-3); margin-top:var(--s-5); }
  .pd-info-tab{
    flex:0 0 auto; padding:var(--s-3) var(--s-2); border:none; background:none;
    color:inherit; opacity:.45; font-size:var(--t-sm); font-weight:var(--w-bold); cursor:pointer;
    border-bottom:2px solid transparent;
  }
  .pd-info-tab.active{ opacity:1; color:var(--brand); border-bottom-color:var(--brand); }
  .pd-care{ font-size:var(--t-sm); line-height:1.9; opacity:.7; margin-top:var(--s-4); }

  /* محتويات المنتج / الأبعاد */
  .pd-spec-row{
    display:flex; justify-content:space-between; gap:var(--s-4);
    padding:var(--s-4) 0; border-top:1px solid var(--p-black-a08);
    font-size:var(--t-sm);
  }
  .pd-spec-label{ opacity:.55; flex:0 0 auto; }
  .pd-spec-value{ text-align:end; opacity:.85; }

  /* منتجات مرتبطة */
  .pd-related{ margin-top:var(--s-7); }
  .pd-related-title{ font-size:var(--t-sm); font-weight:var(--w-bold); margin-bottom:var(--s-4); }
  .pd-related-scroll{ display:flex; gap:var(--s-4); overflow-x:auto; scrollbar-width:none; margin:0 -22px; padding:0 var(--s-7) var(--s-2); }
  .pd-related-scroll::-webkit-scrollbar{ display:none; }
  /* ⚠️ P109 — حُذفت هنا قاعدةُ السطح الخاصّة: صارت مكرَّرةً حرفياً للقاعدة
     الموحّدة أعلى الملف، وبقاؤها بعدها في الترتيب يعني أنها تغلبها فيعود
     التفاوت من حيث أُزيل. */
  .pd-related-card img{ width:100%; aspect-ratio:var(--card-img-ratio); object-fit:var(--card-img-fit); display:block; background:var(--ivory-card-bg); }
  /* ⚠️ P109 — حُذفت: مكرَّرةٌ للقاعدة الموحّدة وتغلبها بترتيبها فيعود التفاوت. */
  /* ⚠️ P109 — حُذفت: مكرَّرةٌ للقاعدة الموحّدة وتغلبها بترتيبها فيعود التفاوت. */

  /* ============ قسم "موصى به" ============ */
  /* ⚠️ P109 — حُذفت هنا قاعدةُ السطح الخاصّة: صارت مكرَّرةً حرفياً للقاعدة
     الموحّدة أعلى الملف، وبقاؤها بعدها في الترتيب يعني أنها تغلبها فيعود
     التفاوت من حيث أُزيل. */
  .recommended-card img{ width:100%; aspect-ratio:var(--card-img-ratio); object-fit:var(--card-img-fit); display:block; background:var(--ivory-card-bg); }
  .recommended-card-tag{ font-size:var(--t-micro); font-weight:var(--w-bold); color:var(--brand); padding:var(--s-3) var(--s-4) 0; opacity:.85; }
  /* ⚠️ P109 — حُذفت: مكرَّرةٌ للقاعدة الموحّدة وتغلبها بترتيبها فيعود التفاوت. */
  /* ⚠️ P109 — حُذفت: مكرَّرةٌ للقاعدة الموحّدة وتغلبها بترتيبها فيعود التفاوت. */

  /* ورقة تكبير الصور — عرض كامل الشاشة */
  .pd-lightbox{
    /* ⚠️ P211 — ٢١٠ لا ١٩٠: شريط التنقّل السفليّ عند ٢٠٠، فكان يطفو فوق
       عارض الصور بملء الشاشة — قِيس على لقطة. وهذه الورقة أعلى ما في
       الموقع بقصد: لا شيء يعلو صورةً فُتحت بملء الشاشة. */
    position:fixed; inset:0; z-index:210; background:var(--p-black);
    display:flex; align-items:center;
  }
  .pd-lightbox[hidden]{ display:none; }
  .pd-lightbox-close{
    position:absolute; top:calc(16px + env(safe-area-inset-top)); inset-inline-end:16px; z-index:3;
    width:var(--icon-44); height:var(--icon-44); border-radius:50%; border:none;
    /* ⚠️ P211 — حاجبٌ داكنٌ لا حليبيّ شفّاف: الخلفية كانت بياضاً بشفافية ١٤٪
       فتذوب على صورةٍ فاتحة (صينية بيضاء) ويختفي المخرج الوحيد. الداكن
       يُقرأ على الفاتح والداكن معاً. */
    background:var(--p-black-a45); color:var(--p-ivory);
    backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
    display:flex; align-items:center; justify-content:center; cursor:pointer; font-size:var(--t-base);
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P211 · ٢٠٢٦-٠٩-٢٣ — تكبيرٌ وتصفّحٌ عموديّ داخل ورقة الصور (أمر المالك:
     «بدي أعمل سكرول عمودي حتى أشوف تفاصيلها على أجزاء»).

     ما كان: الصورة تُلاءَم إلى الشاشة (object-fit:contain) فلا شيء يفيض،
     فلا شيء يُمرَّر. وصورة منتجٍ كصينية فطورٍ من ثلاث طبقات فيها عشرون صنفاً
     تصير على شاشة الجوّال أصغر من أن تُقرأ تفاصيلها — وهي أهمّ ما في الصورة.

     ما صار: لمسةٌ على الصورة تكبّرها إلى ٢٢٠٪ من عرض الشاشة، فتفيض طولاً
     وعرضاً، ويصير تصفّحها بالتمرير الأصليّ — عموديّاً وأفقيّاً. ولمسةٌ ثانية
     تُعيدها.

     ولماذا التمرير الأصليّ لا سحبٌ مكتوبٌ بالجافاسكربت: المتصفّح يعطينا
     القصور الذاتيّ والارتداد عند الحواف والمقاطعة أثناء الحركة مجّاناً
     وبدقّةٍ لا تُكتب باليد — وهي بالضبط ما يجعل السحب يُحَسّ مباشراً.

     ⚠️ والتمرير الأفقيّ بين الصور يُعطَّل أثناء التكبير (is-zooming على
        الحاوية): وإلّا نازع سحبُ التصفّح سحبَ الانتقال إلى الصورة التالية،
        فلا يعمل أحدهما.

     ⚠️ ومصدر الصورة يُرفع عند الفتح: بعد P204 صارت صور الورقة تُطلب بعرض
        ٤٦٠ — وهو مقاس عرضها هناك. وتكبيرُ ٤٦٠ إلى ٨٥٨ بكسل CSS يعطي ضبابةً
        لا تفصيلاً. فورقة التكبير تطلبها بدرجةٍ أعلى (١٤٠٠)، وهي الحالة التي
        بُني لها رفعُ العرض في __wshThumbFor أصلاً.
     ══════════════════════════════════════════════════════════════════════════ */
  .pd-lightbox-scroll{
    width:100%; height:100%; display:flex; overflow-x:auto; scroll-snap-type:x mandatory;
    scrollbar-width:none; -webkit-overflow-scrolling:touch;
  }
  .pd-lightbox-scroll.is-zooming{ overflow-x:hidden; scroll-snap-type:none; }
  .pd-lightbox-scroll::-webkit-scrollbar{ display:none; }
  .pd-lightbox-slide{
    flex:0 0 100%; display:flex; align-items:center; justify-content:center;
    scroll-snap-align:start; overflow:hidden;
    -webkit-overflow-scrolling:touch; scrollbar-width:none;
  }
  .pd-lightbox-slide::-webkit-scrollbar{ display:none; }
  .pd-lightbox-slide img{
    width:100%; max-height:100%; object-fit:contain;
    cursor:zoom-in; -webkit-user-select:none; user-select:none;
    /* ⚠️ manipulation لا none: تمنع تكبير المتصفّح باللمستين وتُبقي التمرير. */
    touch-action:manipulation;
  }
  /* مكبَّرة: الصورة تفيض والشريحة تصير مساحة تصفّح */
  .pd-lightbox-slide.is-zoomed{ overflow:auto; align-items:flex-start; justify-content:flex-start; }
  .pd-lightbox-slide.is-zoomed img{
    width:220%; max-width:none; max-height:none; height:auto;
    object-fit:fill; flex:0 0 auto; cursor:zoom-out;
  }
  /* تلميحٌ يظهر مرّةً ثم ينسحب — التكبير باللمس لا يُكتشف بلا إشارة */
  .pd-lightbox-hint{
    position:absolute; inset-inline:0; bottom:calc(22px + env(safe-area-inset-bottom));
    text-align:center; color:var(--p-ivory); font-size:var(--t-xs); opacity:0;
    pointer-events:none; z-index:2;
    animation:pdHintIn .4s ease .5s forwards, pdHintOut .5s ease 4s forwards;
  }
  .pd-lightbox-hint span{
    display:inline-block; padding:7px 14px; border-radius:var(--r-full);
    background:var(--p-black-a42); backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px);
  }
  @keyframes pdHintIn{ to{ opacity:.9; } }
  @keyframes pdHintOut{ to{ opacity:0; } }
  .pd-lightbox.has-zoomed .pd-lightbox-hint{ display:none; }
  @media (prefers-reduced-motion: reduce){
    .pd-lightbox-hint{ animation:none; opacity:.9; }
  }

  /* ============ صفحات من نحن / تواصل معنا / الأسئلة الشائعة ============ */
  .info-sheet .pd-scroll{ padding:0 var(--s-7) var(--s-8); }
  .info-text{ font-size:var(--t-sm); line-height:1.9; opacity:.8; margin-bottom:var(--s-5); }
  .info-row{
    display:flex; justify-content:space-between; align-items:center; gap:var(--s-4);
    padding:var(--s-5) 0; border-top:1px solid var(--p-black-a08); font-size:var(--t-sm);
  }
  .info-row-label{ opacity:.55; flex:0 0 auto; }
  .info-row-value{ text-align:end; color:inherit; text-decoration:none; }
  a.info-row-value{ color:var(--brand); }
  .faq-item{ padding:var(--s-5) 0; border-top:1px solid var(--p-black-a08); }
  .faq-item summary{ font-size:var(--t-sm); font-weight:var(--w-bold); cursor:pointer; list-style:none; }
  .faq-item summary::-webkit-details-marker{ display:none; }
  .faq-item summary::after{ content:"+"; float:inline-end; opacity:.5; }
  .faq-item[open] summary::after{ content:"–"; }
  .faq-item p{ font-size:var(--t-sm); line-height:1.8; opacity:.75; margin-top:var(--s-4); }

  /* ============ شاشة "شاهد المنتج" — عرض كامل الشاشة بأسلوب Reels ============ */
  .reels-feed{ position:fixed; inset:0; z-index:155; background:var(--p-black); }
  .reels-feed[hidden]{ display:none; }
  .reels-feed-close{
    position:absolute; top:calc(16px + env(safe-area-inset-top)); inset-inline-end:16px; z-index:4;
    width:var(--icon-44); height:var(--icon-44); border-radius:50%; border:none; flex:0 0 auto;
    background:var(--p-white-a14); color:var(--p-ivory);
    display:flex; align-items:center; justify-content:center; cursor:pointer; font-size:var(--t-base);
  }
  .reels-feed-mute{
    position:absolute; top:calc(16px + env(safe-area-inset-top)); inset-inline-start:16px; z-index:4;
    width:var(--icon-44); height:var(--icon-44); border-radius:50%; border:none; flex:0 0 auto;
    background:var(--p-white-a14); color:var(--p-ivory);
    display:flex; align-items:center; justify-content:center; cursor:pointer;
  }
  .reels-feed-mute svg{ width:17px; height:17px; }
  .reels-feed-mute.unmuted svg path:last-child{ opacity:.35; }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P97 · ٢٠٢٦-٠٨-١٥ — تنبيه «اضغط لتشغيل الصوت» (رصد المالك).

     ⚠️ الحال: الصوت مكتوم عند أول دخول — وهذا صحيح ولا يُغيَّر: المتصفحات لا
        تسمح بتشغيل صوتٍ تلقائيّ بلا تفاعل، فلو حاولنا لتوقّف الفيديو نفسه.

     ⚠️ والفجوة أن زرّ الصوت رمادي صغير في زاوية علوية، فلا يعرف الزائر أن ثمّة
        صوتاً أصلاً — يشاهد المقطع صامتاً ويظنّه بلا صوت. وطلب المالك ربطَه بزرّ
        مستوى الصوت في الجهاز غير ممكن: المتصفح لا يعرض حدثاً لأزرار الجهاز
        المادية، ولا صلاحية لنا بقراءتها. فالبديل الصحيح تنبيهٌ ظاهر يدلّ عليه.

     ⚠️ ويختفي بعد أول تشغيل للصوت في الجلسة: تنبيهٌ يتكرّر بعد أن يفهمه الزائر
        يصير إزعاجاً.
  ══════════════════════════════════════════════════════════════════════════════ */
  .reels-sound-hint{
    position:absolute; top:calc(62px + env(safe-area-inset-top)); inset-inline-start:16px; z-index:4;
    display:flex; align-items:center; gap:var(--s-3);
    padding:var(--s-3) var(--s-4); border-radius:var(--r-full);
    background:var(--p-black-a55); color:var(--p-ivory);
    font-family:var(--font-ar); font-size:var(--t-xs); white-space:nowrap;
    border:none; cursor:pointer;
    animation:wshHintIn .3s ease both;
  }
  .reels-sound-hint[hidden]{ display:none !important; }
  .reels-sound-hint svg{ width:13px; height:13px; flex:0 0 auto; }
  @keyframes wshHintIn{ from{ opacity:0; transform:translateY(-4px); } to{ opacity:1; transform:none; } }
  /* شريط فلاتر المناسبات — بين زر الإغلاق وزر كتم الصوت */
  .reels-feed-chips{
    position:absolute; top:calc(16px + env(safe-area-inset-top)); z-index:3;
    inset-inline:62px;
    display:flex; gap:var(--s-3); overflow-x:auto; scrollbar-width:none;
    height:38px; align-items:center;
  }
  .reels-feed-chips::-webkit-scrollbar{ display:none; }
  .reels-feed-chip{
    flex:0 0 auto; padding:var(--s-3) var(--s-5); border-radius:var(--r-full); border:none; cursor:pointer;
    background:var(--p-white-a14); color:var(--p-ivory); font-size:var(--t-sm); white-space:nowrap;
  }
  .reels-feed-chip.active{ background:var(--p-ivory); color:var(--p-ink); font-weight:var(--w-bold); }
  .reels-feed-scroll{
    width:100%; height:100%; overflow-y:auto; scroll-snap-type:y mandatory;
    scrollbar-width:none; -webkit-overflow-scrolling:touch; touch-action:pan-y;
  }
  .reels-feed-scroll::-webkit-scrollbar{ display:none; }
  .reels-feed-slide{
    position:relative; width:100%; height:100%; scroll-snap-align:start; scroll-snap-stop:always;
    overflow:hidden; display:flex; align-items:flex-end;
  }
  .reels-feed-bg{
    position:absolute; inset:0; width:100%; height:100%; object-fit:cover;
    animation:reelFeedKenburns 14s ease-in-out infinite alternate;
    pointer-events:none;
    /* ⚠️ 2026-07-24: pointer-events:none ضرورية هون تحديداً — عنصر <video> (بعكس <img>)
       بياخد لفة لمس خاصة فيه ببعض متصفحات الموبايل (استماع/تحكم بالتشغيل)، وهاد كان
       يتعارض مع سحب اللمس العمودي للسكرول بين اللقطات (scroll-snap على الأب). خلينا
       اللمس يعدي بالكامل للأب (.reels-feed-scroll) يلي فيه السكرول الفعلي.
       ما بيأثر على تشغيل الفيديو التلقائي (autoplay) لأنه مش محتاج تفاعل لمس أصلاً. */
  }
  @keyframes reelFeedKenburns{ from{ transform:scale(1); } to{ transform:scale(1.15); } }
  @media (prefers-reduced-motion: reduce){ .reels-feed-bg{ animation:none; } }
  /* الفيديو الحقيقي ما بده حركة Ken Burns إضافية (عنده حركته الطبيعية أصلاً) */
  video.reels-feed-bg{ animation:none; }
  .reels-feed-shade{
    position:absolute; inset:0; pointer-events:none;
    background:linear-gradient(0deg, var(--p-black-a75) 0%, var(--p-black-a10) 40%, var(--p-black-a30) 100%);
  }
  .reels-feed-play{
    position:relative; z-index:2; margin:auto;
    width:var(--icon-56); height:var(--icon-56); border-radius:50%; border:none; cursor:pointer;
    background:var(--p-white-a16); color:var(--p-ivory);
    display:flex; align-items:center; justify-content:center;
  }
  .reels-feed-play svg{ width:20px; height:20px; margin-inline-start:var(--s-1); }
  /* ⚠️ ٢٠٢٦-٠٧-٢٤: طبقة تفاعل شفافة فوق الفيديو — بتاخد الضغطات (تشغيل/إيقاف + ضغطة
     مطوّلة) بدون أي تدخل بالسحب العمودي بين اللقطات (ما بتستخدم preventDefault إطلاقاً،
     السكرول الطبيعي للمتصفح يضل يشتغل عادي حتى فوقها تماماً). z-index أوطى من المحتوى
     السفلي (أزرار/تسمية) عشان الضغط عليهم يضل يشتغل عادي، مو الطبقة يلي تاخده. */
  .reels-feed-tap-layer{
    position:absolute; inset:0; z-index:1;
    -webkit-touch-callout:none; -webkit-user-select:none; user-select:none;
  }
  .reels-feed-flash-icon{
    position:absolute; top:50%; left:50%; transform:translate(-50%,-50%) scale(0.7);
    width:var(--icon-56); height:var(--icon-56); border-radius:50%;
    background:var(--p-black-a35);
    display:flex; align-items:center; justify-content:center;
    opacity:0; pointer-events:none;
    transition:opacity .25s ease, transform .25s ease;
  }
  .reels-feed-flash-icon.show{ opacity:1; transform:translate(-50%,-50%) scale(1); }
  .reels-feed-flash-icon svg{ width:28px; height:28px; fill:var(--p-ivory); }
  /* حالة الضغطة المطوّلة — الفيديو يضل ظاهر، بس كل الواجهة (تسمية/أزرار/فلاتر/صوت)
     تختفي مؤقتاً لحد ما يرفع إصبعه، نفس سلوك إنستغرام بالضبط */
  .reels-feed-slide.peeking .reels-feed-bottom,
  .reels-feed.peeking .reels-feed-chips,
  .reels-feed.peeking .reels-feed-mute,
  .reels-feed.peeking .reels-feed-close{
    opacity:0 !important;
    transition:opacity .15s ease;
    pointer-events:none;
  }
  .reels-feed-slide.peeking .reels-feed-shade{ opacity:0; transition:opacity .15s ease; }

  .reels-feed-bottom{ position:relative; z-index:2; width:100%; padding:0 18px calc(22px + env(safe-area-inset-bottom)); }
  .reels-feed-caption{ color:var(--p-ivory); font-size:var(--t-sm); opacity:.85; margin-bottom:var(--s-3); }
  .reels-feed-product-row{ display:flex; align-items:baseline; gap:var(--s-4); margin-bottom:var(--s-5); }
  .reels-feed-product-name{ color:var(--p-ivory); font-size:var(--t-md); font-weight:var(--w-bold); }
  .reels-feed-product-price{ color:var(--p-ivory); opacity:.8; font-size:var(--t-sm); }
  .reels-feed-actions-row{ display:flex; align-items:center; gap:var(--s-3); }
  .reels-feed-share-btn{
    flex:0 0 auto; width:var(--icon-44); height:var(--icon-44); border-radius:50%; border:none; cursor:pointer;
    background:var(--p-white-a14); color:var(--p-ivory);
    display:flex; align-items:center; justify-content:center;
  }
  .reels-feed-share-btn svg{ width:16px; height:16px; }
  .reels-feed-outline-btn{
    flex:0 1 auto; display:flex; align-items:center; gap:var(--s-3);
    padding:var(--s-4) var(--s-4); border-radius:var(--r-full); border:1px solid var(--p-white-a35); cursor:pointer;
    background:var(--p-white-a06); color:var(--p-ivory); font-size:var(--t-xs); white-space:nowrap;
    min-width:0;
  }
  .reels-feed-outline-btn span{ overflow:hidden; text-overflow:ellipsis; }
  .reels-feed-outline-btn svg{ width:15px; height:15px; flex:0 0 auto; }
  .reels-save-btn.saved svg{ fill:var(--p-ivory); }
  .reels-feed-shop-btn{
    flex:1 1 auto; padding:var(--s-4) var(--s-5); border-radius:var(--r-full); border:none; cursor:pointer;
    background:var(--p-ivory); color:var(--p-ink); font-size:var(--t-sm); font-weight:var(--w-bold); white-space:nowrap;
  }
  .reels-action-count{ font-size:var(--t-xs); font-family:var(--font-en); }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P219 · ٢٠٢٦-٠٩-٢٤ — شاشة «شاهد» بثلاثة أوامر من المالك.

     ١· على اللابتوب والتابلت: عمودٌ بنسبة ٩:١٦ في منتصف الشاشة كريلز
        إنستغرام، لا فيديو بعرض الشاشة. المقاطع كلها عمودية (مقاس الستوري)،
        فعرضها بعرض شاشةٍ أفقية كان يقصّ ثلثيها من فوق ومن تحت — يرى الزائر
        شريطاً من منتصف الصورة لا المنتج. العمود يعرض المقطع كاملاً.
     ٢· زرّا التشغيل والصوت في منتصف الشاشة عند لمس أيّ مكان، كإنستغرام —
        بدل زرّ كتمٍ رماديٍّ صغير في الزاوية لا يراه أحد.
     ٣· تصفية المقاطع بزرٍّ واحد يفتح كل الخيارات، لا شريط رقاقاتٍ مزدحم فوق
        الفيديو.

     ⚠️ والمحتوى كلّه من البيانات القائمة لا من قائمةٍ مكتوبة: خيارات التصفية
        تُبنى من أنواع المنتجات ومناسباتها التي لها مقطعٌ فعلاً، بعددها. فخيارٌ
        لا مقطع وراءه لا يظهر، ولا يضغط زائرٌ ليجد شاشةً فارغة.
     ══════════════════════════════════════════════════════════════════════════ */

  /* زرّ الكتم القديم في الزاوية يُخلي مكانه لزرّ المنتصف — وتنبيه الصوت كذلك. */
  .reels-feed-mute, .reels-sound-hint{ display:none !important; }

  /* ── ٢· زرّا المنتصف ─────────────────────────────────────────────────────── */
  .rf-center{
    position:absolute; top:50%; left:50%; z-index:5;
    transform:translate(-50%,-50%);
    display:flex; flex-direction:column; align-items:center; gap:18px;
    pointer-events:none;
  }
  .rf-center-btn{
    width:64px; height:64px; border-radius:50%; cursor:pointer;
    display:flex; align-items:center; justify-content:center;
    color:var(--p-ivory); border:1px solid var(--p-ivory-a26);
    background:var(--p-olive-shade-a42);
    backdrop-filter:blur(14px) saturate(140%);
    -webkit-backdrop-filter:blur(14px) saturate(140%);
    opacity:0; transform:scale(.82); visibility:hidden; pointer-events:none;
    transition:opacity .2s ease, transform .2s ease, visibility 0s linear .2s;
  }
  .rf-center-btn.rf-center-sound{ width:50px; height:50px; }
  .rf-center-btn svg{ width:26px; height:26px; }
  .rf-center-sound svg{ width:21px; height:21px; }
  .rf-center-play svg{ margin-inline-start:3px; }
  .rf-center-play.is-playing svg{ margin-inline-start:0; }
  .rf-center.show .rf-center-btn{
    opacity:1; transform:scale(1); visibility:visible; pointer-events:auto;
    transition:opacity .2s ease, transform .2s ease, visibility 0s;
  }
  .rf-center-btn:focus-visible{ outline:2px solid var(--p-ivory); outline-offset:3px; }
  /* ⚠️ بلا تمويه يبقى الزرّ مقروءاً فوق أي لقطة — لا زرّ شفافٌ فوق صورةٍ بيضاء. */
  @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){
    .rf-center-btn{ background:var(--p-olive-shade-a72); }
  }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P220 — «أضف لمناسباتي» على المقطع: زرٌّ رابعٌ في صفّ الأفعال، ولمستان
        متتاليتان على المقطع تحفظانه كإعجاب إنستغرام (أمر المالك).
     ⚠️ القلب القافز يولد عند موضع الإصبع لا في وسط الشاشة: الزائر يرى أثر
        لمسته حيث لمس — هو ما يجعل الإيماءة مفهومةً بلا شرح.
     ══════════════════════════════════════════════════════════════════════════ */
  /* ⚠️ النقر المزدوج بالفأرة يظلّل النصّ تحته (اسم المنتج) — قِيس على
     اللابتوب. المقطع لا نصَّ فيه يُنسخ، فالتظليل يُمنع على الشريحة كلّها. */
  .reels-feed-slide{ -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; }
  .reels-feed-share-btn.reels-save-btn svg{ width:18px; height:18px; }
  .reels-save-btn.saved{ background:var(--p-ivory-a22); }
  .rf-heart-burst{
    position:absolute; z-index:6; width:96px; height:96px; margin:-48px 0 0 -48px;
    pointer-events:none; color:var(--p-ivory);
    filter:drop-shadow(0 6px 18px var(--p-black-a35));
    animation:rfHeart .9s cubic-bezier(.2,.9,.25,1) forwards;
  }
  .rf-heart-burst svg{ width:100%; height:100%; display:block; }
  @keyframes rfHeart{
    0%{ opacity:0; transform:scale(.3) rotate(-12deg); }
    18%{ opacity:1; transform:scale(1.12) rotate(4deg); }
    32%{ transform:scale(.94) rotate(0); }
    70%{ opacity:1; transform:scale(1) translateY(0); }
    100%{ opacity:0; transform:scale(1.05) translateY(-38px); }
  }
  @media (prefers-reduced-motion:reduce){ .rf-heart-burst{ animation:rfHeartCalm .7s ease forwards; } }
  /* ⚠️ P220 — تنبيه «أُضيف لمناسباتي» كان يقع فوق صفّ أزرار المقطع (تسوّق · أضف
     للسلة · القلب) ثلاث ثوانٍ فيحجبها. في «شاهد» يعلو الصفَّ واسمَ المنتج. */
  /* ⚠️ يُقرأ من حال الشاشة نفسها (:has) لا من صنفٍ يُضاف ويُزال: حارس زرّ الرجوع
     قد يُخفي «شاهد» مباشرةً بلا close()، فصنفٌ على body كان سيبقى عالقاً. */
  body:has(#reelsFeed:not([hidden])) .toast{ bottom:calc(var(--bn-clear, 60px) + 118px); }
  @keyframes rfHeartCalm{ 0%,60%{ opacity:1; } 100%{ opacity:0; } }

  /* ── ٣· زرّ التصفية الواحد ─────────────────────────────────────────────── */
  .rf-filter-pill{
    position:absolute; z-index:4;
    top:calc(19px + env(safe-area-inset-top)); left:50%; transform:translateX(-50%);
    display:inline-flex; align-items:center; gap:8px; max-width:calc(100% - 140px);
    height:38px; padding:0 16px 0 14px; border-radius:999px; cursor:pointer;
    color:var(--p-ivory); font:inherit; font-size:var(--t-sm); white-space:nowrap;
    border:1px solid var(--p-ivory-a26);
    background:var(--p-olive-shade-a40);
    backdrop-filter:blur(14px) saturate(140%);
    -webkit-backdrop-filter:blur(14px) saturate(140%);
  }
  .rf-filter-pill[hidden]{ display:none; }
  .rf-filter-pill svg{ width:16px; height:16px; flex:0 0 auto; }
  .rf-filter-pill .rf-filter-label{ overflow:hidden; text-overflow:ellipsis; }
  .rf-filter-pill .rf-filter-count{ opacity:.6; font-family:var(--font-en); font-size:var(--t-xs); }
  /* ⚠️ P220 — الزرّ يبقى زجاجياً حين تُختار تصفية (أمر المالك: «الأبيض مشتّت
     للعين»). الاسم والعدد في داخله يتبدّلان — وهذا وحده يكفي ليُعرف أن
     تصفيةً قائمة، بلا بقعةٍ فاتحةٍ فوق الفيديو. */
  .reels-feed.peeking .rf-filter-pill{ opacity:0; pointer-events:none; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P220 · ٢٠٢٦-٠٩-٢٤ — درج الفلاتر بلغة أدراج الموقع كلّها (أمر المالك:
        «يفتح بارتفاع أعلى مثل باقي أدراج الموقع، وبنفس اللون والثيم»).

     ⚠️ القيم منسوخة من .pd-sheet لا مخترعة: الارتفاع --sheet-h (٩٣٪ بقرار
        P107) · العرض الأقصى ٥٢٠ · الاستدارة ٢٨ من فوق · مقبض ٣٨×٤ · ترويسة
        بعنوانٍ في الوسط وزرّ إغلاقٍ دائريّ على الجانب وخطٍّ تحتها. والرقاقة
        المختارة بزيتون العلامة كـ.suggest-cat-btn.active تماماً.
     ⚠️ والفرق الوحيد عتامة الخلفية: أدراج الموقع ٠٫٧٢ فوق صفحةٍ فاتحة، وهذا
        الدرج فوق فيديو داكن — فبالعتامة نفسها يصير رمادياً. ٠٫٩٤ تجعله يُرى
        بلون الأدراج الأخرى نفسه وهو فوق الأسود.
     ⚠️ والدرج ثابتٌ في أسفل الشاشة على اللابتوب أيضاً كما هي أدراج الموقع
        هناك — لا نافذةٌ في الوسط لقسمٍ واحد.
     ══════════════════════════════════════════════════════════════════════════ */
  .rf-filter-sheet{
    position:absolute; inset:0; z-index:8;
    display:flex; align-items:flex-end; justify-content:center;
    background:var(--p-black-a38);
    animation:rfFade .18s ease both;
  }
  .rf-filter-sheet[hidden]{ display:none; }
  @keyframes rfFade{ from{ opacity:0; } to{ opacity:1; } }
  .rf-filter-panel{
    width:100%; max-width:520px;
    height:var(--sheet-h, 93vh); max-height:var(--sheet-h, 93vh);
    display:flex; flex-direction:column; overflow:hidden;
    border-radius:28px 28px 0 0;
    color:var(--ink, var(--p-ink));
    background:var(--p-faf9f6-a94);
    backdrop-filter:blur(34px) saturate(200%);
    -webkit-backdrop-filter:blur(34px) saturate(200%);
    border:1px solid var(--p-black-a06); border-bottom:0;
    box-shadow:0 -10px 40px var(--p-black-a18);
    animation:rfRise .28s cubic-bezier(.2,.8,.2,1) both;
  }
  @keyframes rfRise{ from{ transform:translateY(40px); opacity:.5; } to{ transform:none; opacity:1; } }
  .rf-filter-grab{ display:flex; justify-content:center; padding:var(--s-4) 0 var(--s-2); flex-shrink:0; }
  .rf-filter-grab i{ width:38px; height:4px; border-radius:999px; background:var(--p-ink-a22); }
  .rf-filter-head{
    display:grid; grid-template-columns:44px 1fr 44px; align-items:center; gap:var(--s-3);
    padding:var(--sheet-head-pad-top, 6px) 20px var(--sheet-head-pad-bottom, 12px);
    border-bottom:var(--sheet-head-border, 1px solid var(--p-ink-a07));
    flex-shrink:0;
  }
  .rf-filter-head b{
    grid-column:2; text-align:center; min-width:0;
    font-size:var(--sheet-title-size, 17px); font-weight:var(--sheet-title-weight, 600); letter-spacing:-0.01em;
  }
  .rf-filter-close{
    grid-column:3; justify-self:end;
    width:var(--icon-44, 44px); height:var(--icon-44, 44px); border-radius:50%; border:0; cursor:pointer;
    background:var(--p-ink-a06); color:inherit; font-size:var(--t-base); line-height:1;
    display:flex; align-items:center; justify-content:center;
  }
  .rf-filter-close:hover{ background:var(--p-ink-a10); }
  /* ⚠️ P219ج باقٍ هنا: التمرير في جسم الدرج، وحشوه السفلي حجز شريط الموقع
     + ٤٤ — فآخر خيارٍ يُمرَّر حتى يعلو الشريط بفسحةٍ واضحة. */
  .rf-filter-scroll{
    flex:1 1 auto; min-height:0; overflow-y:auto; overscroll-behavior:contain;
    -webkit-overflow-scrolling:touch; touch-action:pan-y;
    padding:4px 20px calc(var(--bn-clear, 60px) + 44px);
  }
  .rf-filter-group{ margin-top:18px; }
  .rf-filter-group-t{ font-size:var(--t-xs); color:var(--p-ink-a50); margin-bottom:10px; }
  .rf-filter-chips{ display:flex; flex-wrap:wrap; gap:8px; }
  .rf-chip{
    display:inline-flex; align-items:center; gap:7px;
    padding:var(--s-3) var(--s-5); border-radius:999px; cursor:pointer;
    color:inherit; font:inherit; font-size:var(--t-sm); white-space:nowrap;
    border:1px solid var(--p-black-a12); background:none;
  }
  .rf-chip small{ opacity:.5; font-family:var(--font-en); font-size:var(--t-xs); }
  .rf-chip[aria-pressed="true"]{ background:var(--brand); border-color:var(--brand); color:var(--p-ivory); font-weight:var(--w-bold); }
  .rf-chip[aria-pressed="true"] small{ opacity:.7; }
  .rf-chip:focus-visible{ outline:2px solid var(--brand); outline-offset:2px; }
  .rf-filter-pill:focus-visible{ outline:2px solid var(--p-ivory); outline-offset:2px; }

  /* ── أسهم التنقّل — للفأرة وحدها (اللابتوب)، فاللمس يسحب ── */
  .rf-nav{ display:none; }

  /* ── ١· العمود ٩:١٦ على اللابتوب والتابلت ──────────────────────────────── */
  @media (min-width:768px){
    .reels-feed{ background:radial-gradient(ellipse at 50% 45%, var(--p-262b21) 0%, var(--p-11130e) 62%, var(--p-0a0b08) 100%); }
    .reels-feed-scroll{
      /* الارتفاع أولاً ثم العرض منه — فالمقطع يظهر كاملاً مهما كانت الشاشة.
         والعرض لا يتجاوز الشاشة إن كانت نافذةً ضيّقة طويلة. */
      height:calc(100vh - 40px); height:calc(100svh - 40px);
      width:min(100%, calc((100vh - 40px) * 9 / 16));
      width:min(100%, calc((100svh - 40px) * 9 / 16));
      margin:20px auto;
      border-radius:22px;
      box-shadow:0 24px 70px var(--p-black-a50);
    }
    .reels-feed-slide{ contain-intrinsic-size:auto calc(100svh - 40px); }
    .rf-filter-pill{ top:34px; max-width:min(320px, calc(100% - 140px)); }
    .rf-nav{
      display:flex; flex-direction:column; gap:14px;
      position:absolute; top:50%; transform:translateY(-50%); inset-inline-end:28px; z-index:4;
    }
    .rf-nav-btn{
      width:52px; height:52px; border-radius:50%; cursor:pointer;
      display:flex; align-items:center; justify-content:center;
      color:var(--p-ink); background:var(--p-ivory-a92); border:0;
      box-shadow:0 6px 20px var(--p-black-a30);
      transition:transform .15s ease, opacity .15s ease;
    }
    .rf-nav-btn:hover{ transform:scale(1.06); }
    .rf-nav-btn[disabled]{ opacity:.3; cursor:default; transform:none; }
    .rf-nav-btn svg{ width:22px; height:22px; }
  }
  @media (prefers-reduced-motion:reduce){
    .rf-center-btn, .rf-filter-sheet, .rf-filter-panel{ transition:none !important; animation:none !important; }
  }

  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — الوصف المطبّق. ثلاثة أسطر ثم تلاشٍ تدريجي، ويُفتح بزر صريح. */
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٢٦ (تراجع) — "مصغّرة الهوية" اللي أُضيفت بنفس اليوم **انشالت بالكامل**.

     شو صار بالاختبار على جهاز حقيقي — ثلاث مشاكل، كل وحدة كافية لوحدها:
       ١. **تكرار**: ورقة "ابني هديتك" عندها أصلاً .gb-product-preview (صورة + اسم +
          سعر). فصار عنصران يقولوا نفس الشي، والمصغّرة فوقهم مقصوصة.
       ٢. **القص**: .pd-sheet عليها overflow:hidden (إلزامي للحواف المستديرة والسكرول)،
          فأي عنصر بـtop سالب يُقص. المصغّرة طلعت نصها مقطوع — "من فوق مقصوصة وكثير
          صغيرة" بوصف صاحب المحل.
       ٣. **الصورة الغلط**: منطق مصدر الصورة كان يبدأ من activeCard تبع ورقة المنتج،
          وهاي تضل محفوظة من فتحة سابقة. فلما تُفتح "ابني هديتك" مباشرة من الكرت، طلعت
          مصغّرة منتج **تاني تماماً** جنب اسم المنتج الصح.

     ⚠️ الدرس: قراءة هوية المنتج من الـDOM بالتخمين (activeCard / آخر كرت) غير موثوقة.
     الطريق الصح إنه كل ورقة تعرض الهوية **من بياناتها هي** — زي ما ورقة ابني هديتك
     تعمل فعلاً. البند يرجع لقائمة المعلّقات ليُبنى هيك، مو بمصغّرة عامة.
     ══════════════════════════════════════════════════════════════════════════════ */

  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٢٦ (تصحيح) — "خط عاجي ظاهر تحت التبويبات".
     كان التلاشي طبقة لون فوق النص: linear-gradient(transparent → var(--ivory)).
     وخلفية الورقة شبه شفافة مع زجاج، فالعاجي المصمّت ما ذاب — بان كشريط واضح.
     ⚠️ نفس غلطة شريط الأزرار بالضبط: لون مصمّت فوق سطح شفاف.

     الحل الصح: قناع (mask) بدل طبقة. القناع بيذوّب **النص نفسه** لشفافية، فما يهم
     شو ورا النص — يشتغل فوق أي خلفية، فاتحة أو داكنة أو زجاجية.
     ⚠️ القناع يُشال بالكامل عند الفتح (mask:none) عشان ما يتلاشى آخر سطر بالنص الكامل. */
  .pd-collapse{
    /* ⚠️ P119 — «التدرّج يقصّ السطر بنصّه». سببان معاً:
       · ٥٫٤em على سطرٍ ارتفاعه ١٫٩ = سطران وأربعة أخماس — فالقصّ يقع في وسط
         السطر الثالث لا بعده. صارت ٥٫٧ = ثلاثة أسطرٍ تامّة.
       · والتلاشي كان يبدأ من ٦٢٪ فيبتلع أكثر من ثلث الكتلة، فيبدو السطر
         الأخير ممحوّاً وما فيه من رموزٍ عائماً في الضباب. صار من ٨٤٪،
         فيتلاشى آخر السطر وحده إشارةً إلى وجود بقيّة. */

    position:relative; overflow:hidden;
    max-height:5.7em; transition:max-height .38s ease;
    -webkit-mask-image:linear-gradient(180deg, var(--p-black) 84%, transparent 100%);
            mask-image:linear-gradient(180deg, var(--p-black) 84%, transparent 100%);
  }
  .pd-collapse.open{
    max-height:220em;
    -webkit-mask-image:none;
            mask-image:none;
  }
  .pd-collapse-toggle{
    display:flex; align-items:center; gap:var(--s-2);
    margin:var(--s-3) 0 0; padding:var(--s-3) 0;
    background:none; border:none; cursor:pointer;
    color:var(--brand); font-size:var(--t-xs); font-weight:var(--w-bold);
  }
  .pd-collapse-toggle svg{ width:13px; height:13px; transition:transform .3s ease; }
  .pd-collapse-toggle[aria-expanded="true"] svg{ transform:rotate(180deg); }

  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٢٦ (درس بنتريست) — شريط الأفعال مثبّت بأسفل الورقة.
     كان يقعد بمنتصف المحتوى، فبينزل مع السكرول ويطلع من متناول الإبهام. صار ملاصقاً
     لأسفل الورقة ودايماً حاضر مهما نزّل الزائر.
     ⚠️ بدون backdrop-filter ولا filter إطلاقاً — عنصر ثابت عريض بأسفل الشاشة، وهاي
     بالضبط عائلة الخلل اللي سببت التشويش على iOS. الفصل البصري بخلفية عاتمة + حد علوي.
     ══════════════════════════════════════════════════════════════════════════════ */
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — تصحيح: كانت خلفيته var(--ivory) صريحة، بينما خلفية الورقة نفسها
     rgba(255,255,255,0.72) مع زجاج. فطلع "شريط عاجي بشع" واضح خلف الأزرار + خط رفيع
     عاجي — بالضبط الوصف. الحل: نفس عائلة لون الورقة بعتامة أعلى (عشان يخفي المحتوى
     المارّ تحته)، وبدون أي حد صريح — تلاشٍ ناعم بدل خط قاطع. */
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — فوتر الورقة: صفر خلفية، صفر حد، صفر تدرّج.
     ما في شي يمرّ تحته (هو خارج منطقة السكرول)، فزجاج الورقة نفسه هو خلفيته — ومستحيل
     يطلع أي "شريط عاجي" أو "خط رفيع" لأنه ما في طبقة زيادة أصلاً. */
  .pd-actions{
    flex:0 0 auto;
    display:flex;
    align-items:center;
    gap:var(--s-4);
    padding:var(--s-3) var(--s-6) calc(var(--s-2) + env(safe-area-inset-bottom));
    /* ⚠️ P115 — «الأزرار ينزلوا أكثر لتحت». الحشو العلويّ من ١٤ إلى ٨ والسفليّ
       من ١٦ إلى ١٢ — عشر نقاطٍ تنتقل إلى مساحة العرض، والشريط يبقى ثابتاً
       أسفل الورقة فالأزرار ظاهرةٌ دائماً بلا تمرير. */
  }
  .pd-save-btn{
    width:var(--icon-44); height:var(--icon-44);
    flex-shrink:0;
    border-radius:50%;
    border:1px solid var(--p-ink-a14);
    background:none;
    color:var(--p-ink);
    display:flex; align-items:center; justify-content:center;
    cursor:pointer;
  }
  .pd-save-btn svg{ width:19px; height:19px; stroke:currentColor; fill:none; stroke-width:1.6; transition:fill .2s ease, stroke .2s ease; }
  .pd-save-btn.saved svg{ fill:var(--brand); stroke:var(--brand); }

  .pd-add-row{
    flex:1;
    display:flex;
    align-items:center;
    gap:var(--s-3);
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P42 · ٢٠٢٦-٠٨-٠٩ — زر السلة داخل ورقة المنتج (رصده المالك على الحيّ).

     العطل: بعد الإضافة وتحديد الكمية يصير الفوتر عدّاداً بعرض كامل ولا شيء
     غيره — فالزائر واقف: لا يعرف أن السلة تُفتح من الشريط السفلي، ولازم يغلق
     الورقة يدوياً ثم يبحث. أطول مسافة في الرحلة كانت بين «أضفته» و«أين هو».

     الظهور مشروط بالكمية: لا يظهر قبل الإضافة إطلاقاً، فلا يزاحم الفعل
     الأساسي «أضف للسلة». وعرضه ثابت ليبقى العدّاد هو الأوسع.
     ══════════════════════════════════════════════════════════════════════════ */
  .pd-go-cart-btn{
    flex:0 0 auto;
    height:46px;
    padding:0 var(--s-5);
    border-radius:var(--r-full);
    border:1px solid var(--p-brand-a34);
    background:none;
    color:var(--brand);
    font-family:inherit;
    font-size:var(--t-sm);
    font-weight:var(--w-bold);
    display:flex;
    align-items:center;
    justify-content:center;
    gap:var(--s-3);
    cursor:pointer;
    transition:transform .15s ease, border-color .15s ease;
  }
  .pd-go-cart-btn svg{ width:17px; height:17px; flex:0 0 auto; }
  .pd-go-cart-btn:active{ transform:scale(0.96); }
  .pd-go-cart-btn:hover{ border-color:var(--brand); }
  .pd-add-btn{
    width:100%;
    height:46px;
    border:none;
    border-radius:var(--r-full);
    background:var(--brand);
    color:var(--p-white);
    font-size:var(--t-sm);
    font-weight:var(--w-bold);
    cursor:pointer;
  }
  .pd-qty-stepper{
    /* ⚠️ P111 — رصد المالك: «شكل من برّا الكرت وشكل من داخله». كان هذا معبّأً
       بالزيتوني ونصُّه أبيض، وعدّادُ البطاقة محدَّداً ونصُّه زيتونيّ — عنصرٌ
       واحد بلغتين. والمعبَّأ محفوظٌ للنداء الأساسي وحده (P105)، والعدّاد ليس
       نداءً بل حالة. فصار الاثنان محدَّدَين، ويبقى «أضف للسلة» وحده معبّأً. */
    display:none;
    width:auto;
    /* ⚠️ P113 — «العدّاد حجمه كبير بالعرض». كان يرث عرض «أضف للسلة» الكامل
       لأنه يحلّ محلّه، فيبدو شريطاً لا عدّاداً. صار يتّسع لمحتواه: إشارة ورقم
       وإشارة، ويبقى في موضع النداء نفسه فلا يقفز الصفّ. */
    min-width:132px; padding-inline:var(--s-5); flex:0 0 auto;
    height:46px;
    border-radius:var(--r-full);
    background:transparent; border:1px solid var(--brand);
    color:var(--brand);
    align-items:center;
    justify-content:space-between;
    padding:0 var(--s-6);
  }
  .pd-qty-stepper button{
    width:var(--icon-24); height:var(--icon-24);
    border:none; background:none;
    color:var(--brand);
    font-size:var(--t-md); font-weight:var(--w-bold);
    cursor:pointer;
  }
  .pd-qty-stepper .pd-qty-value{ direction:ltr; unicode-bidi:isolate; font-size:var(--t-sm); font-weight:var(--w-bold); color:var(--brand); min-width:14px; text-align:center; }

  .next-section{
    min-height:70vh;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:80px 24px;
    text-align:center;
  }
  .next-section .inner{
    max-width:520px;
    display:flex;
    flex-direction:column;
    gap:var(--s-5);
    align-items:center;
  }
  .next-section h2{ font-size:var(--t-xl); font-weight:var(--w-bold); }
  .next-section p{ font-size:var(--t-sm); line-height:1.9; opacity:.65; }
  .pill-note{
    font-size:var(--t-xs);
    letter-spacing:.05em;
    padding:var(--s-3) var(--s-5);
    border-radius:var(--r-full);
    border:1px dashed var(--brand);
    color:var(--brand);
  }

  /* ============ نمط رأس عام لأي قسم شرائح (الأكثر مبيعاً، موصى به...) ============ */
  .rail-section{ padding:var(--s-4) 0 var(--s-11); }
  .rail-head{
    padding:0 var(--s-7);
    margin-bottom:var(--s-6);
    display:flex;
    align-items:baseline;
    justify-content:space-between;
    gap:var(--s-4);
  }
  .rail-head h2{ font-size:var(--t-lg); font-weight:var(--w-bold); }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P161 · ٢٠٢٦-٠٩-٢١ — سطر سبب الشريط، بقاعدةٍ واحدة لكل الرؤوس.

     الرأس صفٌّ بين العنوان و«عرض الكل»، فالسطر الثالث يلفّ إلى سطرٍ كاملٍ تحتهما
     (flex-basis: 100%) بدل أن يزاحمهما. وبهذا لا يتغيّر مكان الزرّ ولا محاذاة
     العنوان في أي شريط، ويبقى الفرق الوحيد هو النصّ نفسه.
     ══════════════════════════════════════════════════════════════════════════ */
  .rail-head, .new-arrivals .head{ flex-wrap:wrap; row-gap:var(--s-2); }
  .rail-sub{
    flex:1 0 100%; order:3; margin:0;
    font-size:var(--t-xs); line-height:1.7; opacity:.58;
  }
  .new-arrivals h2, .rail-head h2{ font-size:var(--t-lg); }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P119 — نمطٌ واحد لـ«عرض الكل» (رصد المالك: نمطان في صفحةٍ واحدة).

     ⚠️ كان صفّان مختلفان: «شاهد المجموعة كاملة» و«عرض الكل» نصّاً صغيراً في
        ترويسة القسم، و«عرض كل المناسبات» صفّاً كامل العرض تحت الشريط بسهمٍ في
        طرفه. فيقرأ الزائر فعلاً واحداً بلغتين في شاشةٍ واحدة.

     ⚠️ فانتقل رابط المناسبات إلى ترويسة قسمه ونال المعالجة نفسها، وسقط سهمُه:
        السهم يعد بانتقالٍ مختلف، ولا اختلاف.
     ══════════════════════════════════════════════════════════════════════════════ */
  .occ-head .occ-see-all{ align-self:flex-end; margin-top:var(--s-3); }
  .rail-head .see-all,
  .occ-head .occ-see-all{
    font-size:var(--t-sm);
    color:var(--brand);
    background:none; border:none;
    cursor:pointer;
    white-space:nowrap;
  }

  /* ============ نمط زجاجي موحّد لكل بطاقات الصورة+نص (هدايا فاخرة، الضيافة، قصتنا) ============ */
  .photo-card{
    position:relative;
    border-radius:var(--r-lg);
    overflow:hidden;
    background-size:cover;
    background-position:center;
  }
  .photo-card::after{
    content:"";
    position:absolute; inset:0;
    /* ⚠️ P77 — عُمّق من ٠٫٢٨ إلى ٠٫٤٢ لنفس سبب الحجاب أعلاه: التدرّج هو خط
       الدفاع الأول عن قراءة النصّ، وكان مضبوطاً على صور الكود وحدها. */
    background:linear-gradient(0deg, var(--p-olive-black-a42) 0%, transparent 48%);
  }
  .overlay-glass{
    position:absolute;
    z-index:2;
    inset-inline:14px;
    bottom:14px;
    /* ══════════════════════════════════════════════════════════════════════
       ⚠️ P78 · ٢٠٢٦-٠٨-١٣ — اللوح يتّسع لنصّه بدل أن يعصره.

       ⚠️ العطل: اختفى نصّ «قصتنا» تماماً وبقي زرّه ظاهراً. ولم يكن سبباً في
          التباين كما قدّرتُ في P77 — بل في الارتفاع. اللوح كان height:40% من
          البانر، وأبناؤه عناصر مرنة تنكمش افتراضياً (flex-shrink:1) وعليها
          overflow:hidden. فحين يقصر اللوح يُعصر العنوان والمتن إلى ما يقارب
          الصفر ويُقصّان، ويبقى الزرّ لأن حشوه يمنع انكماشه — وهو بالضبط ما
          رآه المالك: زرٌّ بلا نصّ فوقه.

       ⚠️ ومن أقصره: تغييري في P66 حين جعلتُ «قصتنا» بنسبة البانر (٣:٢ جوّالاً
          بدل min-height:360px). البانر صار أقصر، و٤٠٪ منه أقصر، فسقط النصّ.
          أي أن العطل من عملي لا من صورة المالك — وتشخيصي في P77 كان خاطئاً
          وإن كان رفع الحجاب تحسيناً قائماً بذاته يبقى.

       ⚠️ العلاج: الارتفاع صار حدّاً أدنى لا مقاساً مغلقاً، والأبناء لا تنكمش.
          فاللوح يأخذ حدّه الأدنى حين يكفي، ويزيد حين لا يكفي — ولا يُقصّ نصٌّ.
          (⚠️ والحدّ نفسه خُفض لاحقاً في P82 — انظر التعليق تحته مباشرةً.)
       ══════════════════════════════════════════════════════════════════════ */
    /* ⚠️ P82 — خُفض الحدّ الأدنى من ٤٠٪ إلى ٢٦٪ (رصد المالك أن صورة «قصتنا»
       مقصوصة). بعد P78 صار اللوح يتّسع لنصّه وحده، فلم يعد الحدّ الأدنى ضرورةً
       بل صار يقتطع من الصورة بلا مقابل. الآن يأخذ ما يحتاجه فقط، ويبقى للصورة
       ما يكفي لتُقرأ صورةً لا خلفيةً. */
    min-height:26%;
    max-height:calc(100% - 28px);
    width:auto;
    padding:var(--s-5);
    color:var(--p-ivory);
    display:flex;
    flex-direction:column;
    align-items:center;
    justify-content:center;
    gap:var(--s-2);
    text-align:center;
    border-radius:var(--r-md);
    overflow:hidden;
    backdrop-filter:blur(10px) saturate(150%);
    -webkit-backdrop-filter:blur(10px) saturate(150%);
    /* ══════════════════════════════════════════════════════════════════════
       ⚠️ P77 · ٢٠٢٦-٠٨-١٣ — رفع الحجاب من ٠٫٣٠ إلى ٠٫٤٦ (رصد المالك).

       ⚠️ العطل: نصّ «قصتنا» اختفى بعد أن رفع المالك صورته من اللوحة. والنصّ
          موجود في الصفحة — الصفّ سليم وقُرئ — لكنه عاجيّ فوق حجابٍ شفيف فوق
          صورة فاتحة، فذاب فيها. الحرف مرسوم ولا يُقرأ.

       ⚠️ والعلّة أعمق من صورة بعينها: ٠٫٣٠ كانت تكفي لصور الكود المختارة
          يدوياً، ولا تضمن شيئاً لصورة يرفعها المالك غداً. وقراءة النصّ يجب
          ألّا تتوقّف على سطوع الصورة التي تحته — وإلا صار كل رفعٍ رهاناً.

       ⚠️ و٠٫٤٦ محسوبة لا مُقدَّرة: عند هذه القيمة يبقى النصّ العاجيّ فوق أشدّ
          صورنا بياضاً ضمن نسبة التباين المطلوبة للنصّ الكبير، ويظلّ الزجاج
          شفيفاً تُقرأ الصورة خلفه. */
    /* ⚠️ P80 — ورُفع مرةً أخرى إلى ٠٫٥٦ لنفس سبب الشريط: القراءة يجب ألّا
       تعتمد على تمويهٍ قد لا يُنتج أثراً على بعض أجهزة أندرويد. و٠٫٥٦ تُبقي
       الصورة مقروءة خلف اللوح وتضمن النصّ فوقه. */
    background:var(--p-olive-ink-a56);
    border:1px solid var(--p-white-a18);
    border-top-color:var(--p-white-a32);
    box-shadow:inset 0 1px 0 var(--p-white-a10);
    filter:drop-shadow(0 8px 16px var(--p-black-a20));
    /* ⚠️ ٢٠٢٦-٠٧-٢٤: الظل الخارجي صار عبر filter:drop-shadow بدل box-shadow — نفس خلل
       "الظل الغريب/المشوّه" الموثّق مع backdrop-filter + border-radius + overflow:hidden
       سوا (نفس السبب المصلّح بكروت المنتجات والكريستالة). box-shadow ضلت بس للمعة
       الداخلية (inset) لأنها آمنة ومش سبب المشكلة. */
  }
  /* ⚠️ P78 — لا ينكمش ابنٌ من أبناء اللوح: الانكماش مع overflow:hidden يقصّ
     النصّ بلا أثر يدلّ عليه. */
  .overlay-glass > *{ flex-shrink:0; }
  .overlay-glass .og-tag{
    font-size:var(--t-micro); opacity:.75;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis; max-width:100%;
  }
  .overlay-glass h3, .overlay-glass h2{
    font-size:var(--t-base); font-weight:var(--w-bold); line-height:1.25;
    max-width:22ch;
    display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
  }
  .overlay-glass p{
    font-size:var(--t-xs); line-height:1.35; opacity:.85; max-width:34ch;
    display:-webkit-box; -webkit-line-clamp:1; -webkit-box-orient:vertical; overflow:hidden;
  }
  .overlay-glass .og-btn{
    margin-top:var(--s-1);
    font-size:var(--t-xs);
    padding:var(--s-3) var(--s-5);
    border-radius:var(--r-full);
    border:1px solid var(--p-ivory-a50);
    background:var(--p-ivory-a14);
    color:var(--p-ivory);
    cursor:pointer;
    white-space:nowrap;
    flex:0 0 auto;
  }

  /* ============ هدايا فاخرة — بانرين كبيرين ============ */
  .luxury-gifts{ padding:0 var(--s-7) var(--s-11); }
  .luxury-grid{
    display:grid;
    grid-template-columns:1fr;
    gap:var(--s-5);
  }
  .luxury-card{ aspect-ratio:4/5; }

  /* ============ الضيافة المنزلية — بانر واحد عريض ============ */
  .hospitality{ padding:0 var(--s-7) var(--s-11); }
  .hospitality-banner{ min-height:340px; }

  /* ============ صمم كيكتك (Cake Builder) ============ */
  .cake-builder-section{ padding:0 var(--s-7) var(--s-11); }
  .cake-builder-banner{ min-height:340px; }

  /* --- الرسمة التوضيحية للكيك (CSS illustration، مو صورة فوتوغرافية) --- */
  .cb-cake{
    position:relative;
    width:100%; height:100%;
    display:flex; flex-direction:column; align-items:center; justify-content:flex-end;
    transition:transform .4s cubic-bezier(.34,1.2,.64,1);
  }
  .cb-cake[data-size="sm"]{ transform:scale(0.8); }
  .cb-cake[data-size="md"]{ transform:scale(1); }
  .cb-cake[data-size="lg"]{ transform:scale(1.2); }
  .cb-plate{
    width:80%; height:9px; border-radius:50%;
    background:radial-gradient(ellipse at center, var(--p-black-a20), transparent 72%);
    margin-top:var(--s-1);
  }
  .cb-tier{
    position:relative;
    border-radius:9px 9px 5px 5px;
    background:var(--cb-color, var(--p-f7f1e6));
    box-shadow:inset 0 -10px 14px var(--p-black-a08), inset 0 3px 0 var(--p-white-a55);
    transition:background .35s ease;
  }
  .cb-tier-base{ width:76px; height:38px; z-index:1; }
  .cb-tier-top{ width:48px; height:28px; margin-bottom:-5px; z-index:2; border-radius:14px 14px 5px 5px; }
  .cb-toppings{
    position:relative;
    width:48px; height:0;
    display:flex; align-items:center; justify-content:center; gap:var(--s-2);
    flex-wrap:wrap;
    z-index:3;
    top:6px;
  }
  .cb-topping-dot{ width:6px; height:6px; border-radius:50%; box-shadow:0 1px 2px var(--p-black-a25); }
  .cb-tier.shape-square{ border-radius:5px 5px 4px 4px; }
  .cb-tier-top.shape-square{ border-radius:5px 5px 4px 4px; }

  /* --- كتابة على الكيك --- */
  .cb-cake-text{
    position:absolute; top:-2px; left:50%; transform:translateX(-50%);
    max-width:70px; font-family:var(--font-ar); font-style:italic;
    font-size:var(--t-xs); text-align:center; line-height:1.1; white-space:nowrap;
    overflow:hidden; text-overflow:ellipsis;
    color:var(--p-black-a55);
    z-index:4;
  }
  .cb-write-input{
    width:100%; padding:var(--s-4); border-radius:var(--r-sm);
    border:1px solid var(--p-black-a12); background:none; color:inherit; font-size:var(--t-sm);
    text-align:center; font-family:inherit;
  }
  .cb-write-count{ font-size:var(--t-xs); opacity:.5; text-align:center; margin-top:var(--s-3); }
  .cb-suggest-tabs{ display:flex; gap:var(--s-3); overflow-x:auto; padding:var(--s-5) 0 var(--s-4); }
  .cb-suggest-tab{
    flex:0 0 auto; padding:var(--s-3) var(--s-5); border-radius:var(--r-full); font-size:var(--t-sm);
    border:1px solid var(--p-black-a10); background:none; color:inherit; cursor:pointer; white-space:nowrap;
  }
  .cb-suggest-tab.active{ background:var(--brand); border-color:var(--brand); color:var(--p-ivory); }
  .cb-suggest-chips{ display:flex; flex-wrap:wrap; gap:var(--s-3); }
  .cb-suggest-chip{
    padding:var(--s-3) var(--s-5); border-radius:var(--r-full); font-size:var(--t-sm);
    border:1px solid var(--p-black-a10); background:none; color:inherit; cursor:pointer;
  }

  /* --- ورقة بناء الكيك --- */
  .cb-steps-indicator{ display:flex; gap:var(--s-3); justify-content:center; padding:var(--s-1) 0 var(--s-2); }
  .cb-step-dot{ width:6px; height:6px; border-radius:50%; background:var(--p-black-a14); transition:background .2s, width .2s; }
  .cb-step-dot.active{ background:var(--brand); width:16px; border-radius:var(--r-xs); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P210 · ٢٠٢٦-٠٩-٢٣ — كتل «صمّم كيكتك» وأزرارها (أمر المالك).

     أربع علل مقيسة على الخطوة الأولى:

     ١· الخيارات كانت صفّاً متدفّقاً بمحاذاة الوسط (flex-wrap + center)، فعرض
        كلّ خيارٍ بطول كلمته: «وسط» و«صغير» في سطر و«كبير» وحده معلّقاً في
        منتصف السطر الثاني. وهي العلّة نفسها التي حسمها P184 في رقائق المساعد
        — شبكةٌ بعمودين متساويين — ولم تصل إلى هذه الورقة يومها.
        والفردُ الأخير يمتدّ على العمودين، فيُقرأ قصداً لا بقيّةً.

     ٢· الزوايا كانت --r-full (نصف دائرة). وحكم P184 صريح: نصفُ الدائرة يجعل
        الخيار يُقرأ وسماً لا زرّاً يُضغط. فصارت --r-md، وهي زاوية الحقول
        ورقائق المساعد نفسها.

     ٣· «الشكل» كان مكتوباً بصنف .cb-step-sub — أي بصنف وصفِ الخطوة. فجاء
        رماديّاً خفيفاً في منتصف الورقة بلا وزنٍ يقول إنه بداية مجموعة.
        صار له صنفه: عنوان مجموعةٍ محاذٍ للبداية بخطٍّ فاصلٍ فوقه.

     ٤· منطقة المعاينة ١٥٠ بكسل والكيكة فيها صغيرة، فبقي فراغٌ بينها وبين
        العنوان أوسع من الفراغ بين العنوان وخياراته — فانفصل رأس الخطوة عن
        جسمها. ضُبطت المسافات على سلّمٍ واحد: المعاينة أقرب، والعنوان أقرب
        إلى وصفه، والوصف أبعد قليلاً عن الخيارات.
     ══════════════════════════════════════════════════════════════════════════ */
  .cb-preview-zone{
    display:flex; align-items:center; justify-content:center;
    height:132px; margin:var(--s-2) 0 var(--s-4);
  }
  .cb-step-title{ font-size:var(--t-base); font-weight:var(--w-bold); margin:0 0 var(--s-1); text-align:center; }
  .cb-step-sub{ font-size:var(--t-sm); opacity:.6; text-align:center; margin-bottom:var(--s-6); }
  /* عنوان مجموعةٍ داخل الخطوة — لا وصفٌ ثانٍ لها */
  .cb-group-label{
    font-size:var(--t-xs); font-weight:var(--w-bold); opacity:.55;
    text-align:start; margin:var(--s-7) 0 var(--s-4);
    padding-top:var(--s-5); border-top:1px solid var(--p-black-a08);
  }
  .cb-options-grid{ display:grid; grid-template-columns:repeat(2, 1fr); gap:var(--s-3); align-items:stretch; }
  /* الفردُ الأخير يمتدّ على العمودين بدل أن يتدلّى في منتصف سطره */
  .cb-options-grid > .cb-option-chip:last-child:nth-child(odd){ grid-column:1 / -1; }
  .cb-option-chip{
    padding:var(--s-4) var(--s-4); border-radius:var(--r-md);
    border:1px solid var(--p-black-a12); background:none; color:inherit;
    font-size:var(--t-sm); line-height:1.45; cursor:pointer; min-width:0;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
    transition:border-color .18s ease, background .18s ease;
  }
  .cb-option-chip:active{ transform:scale(0.985); }
  .cb-option-chip .cb-option-extra{ font-size:var(--t-xs); opacity:.55; }
  .cb-option-chip.active{ background:var(--brand); border-color:var(--brand); color:var(--p-ivory); font-weight:var(--w-bold); }
  .cb-option-chip.active .cb-option-extra{ opacity:.85; }
  .cb-swatch-grid{ display:flex; flex-wrap:wrap; gap:var(--s-5); justify-content:center; }
  .cb-swatch{
    width:38px; height:38px; border-radius:50%;
    border:2px solid transparent; cursor:pointer;
    box-shadow:inset 0 0 0 1px var(--p-black-a10);
    position:relative;
  }
  .cb-swatch.active{ border-color:var(--brand); }
  .cb-swatch.active::after{
    content:"✓"; position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
    color:var(--p-white); font-size:var(--t-sm); text-shadow:0 1px 2px var(--p-black-a40);
  }
  .cb-nav-row{ display:flex; gap:var(--s-4); margin-top:var(--s-6); }
  .cb-back-btn{
    flex:0 0 auto; padding:var(--s-5) var(--s-6); border-radius:var(--r-md);
    border:1px solid var(--p-black-a12); background:none; color:inherit; font-size:var(--t-sm); cursor:pointer;
  }
  .cb-next-btn{ flex:1; }
  .cb-summary-row{
    display:flex; justify-content:space-between; align-items:center;
    padding:var(--s-4) 0; border-top:1px solid var(--p-black-a08); font-size:var(--t-sm);
  }
  .cb-summary-row.cb-summary-total{ font-weight:var(--w-bold); font-size:var(--t-base); border-top:1px solid var(--p-black-a14); margin-top:var(--s-2); }
  .cb-summary-price{ font-family:var(--font-en); direction:ltr; }

  /* ============ استوديو التوزيع + استوديو التصميم المخصص ============ */
  .studios{ padding:0 var(--s-7) var(--s-11); display:grid; grid-template-columns:1fr; gap:var(--s-5); }
  .studio-card{ aspect-ratio:4/5; }

  /* ============ قصتنا ============ */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P66 · ٢٠٢٦-٠٨-١٢ — «قصتنا» بمقاس البانر العرضي نفسه (أمر المالك).

     ⚠️ كان min-height لا نسبةً، فارتفاعه ثابت وعرضه يتبع الشاشة — أي أن نسبته
        تتغيّر بكل جهاز، ولا يمكن للوحة أن تضبط عليها إطار قصّ. صار ٣:٢ على
        الجوّال و١٦:٦ على المكتب، وهما نسبتا البانر حرفاً بحرف.

     ⚠️ وأُلغيت الحاجة إلى قاعدتين مختلفتين: النسبة تحمل الارتفاع، فلا min-height
        يزاحمها. وإبقاؤه كان سيغلبها على الشاشة الضيّقة (٣٦٠px أعلى مما تنتجه
        نسبة ٣:٢ دون عرض ٥٤٠px).
     ══════════════════════════════════════════════════════════════════════════ */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P83 — رُفع min-height:300px الذي أضفتُه في P78، لأنه هو ما يقصّ الصورة.

     ⚠️ الآلية: النسبة ٣:٢ تعطي البانر ارتفاعاً محسوباً من عرضه. و min-height
        يفرض ارتفاعاً أكبر منه على الشاشات الضيّقة، فتنكسر النسبة الفعلية ويصير
        الصندوق أطول من ٣:٢ — و background-size:cover يملأ الأطول بقصّ الجانبين.
        فالصورة المرفوعة بـ٣:٢ تماماً — كما طلبنا من اللوحة — تُقصّ رغم مطابقتها.

     ⚠️ ولم يعد الحدّ ضرورياً: أُضيف في P78 ليضمن مساحةً للوح النصّ حين كان
        اللوح ٤٠٪ مغلقة، وقد صار اللوح يتّسع لنصّه وحده (P78) وخُفض حدّه الأدنى
        إلى ٢٦٪ (P82). فالنسبة وحدها تكفي، والصورة تُعرض كما رُفعت.
     ══════════════════════════════════════════════════════════════════════════ */
  .our-story-banner{ aspect-ratio:3/2; }


  /* ============ استكشف أكتر (صف أفقي موحّد: استوديوهات + كيك + ضيافة + هدايا) ============ */
  .explore-more-section{ padding:0 0 var(--s-11); }
  .explore-scroll{
    display:flex;
    gap:var(--s-5);
    overflow-x:auto;
    padding:var(--s-2) var(--s-7) var(--s-8);
    margin-bottom:-34px;
    scroll-snap-type:x proximity;
    scroll-padding-inline:var(--s-7);
    -webkit-overflow-scrolling:touch;
  }
  .explore-card{
    scroll-snap-align:start;
    flex:0 0 auto;
    width:220px;
    aspect-ratio:3/4;
  }
  .explore-card .overlay-glass{ inset-inline:10px; bottom:10px; padding:var(--s-4); gap:var(--s-2); }
  /* ⚠️ P60 — البلاطات أزرار لا عناصر عرض: تُصفَّر تنسيقات الزر الافتراضية حتى
     تُقرأ صورةً لا زرّ نموذج، ويبقى المؤشّر يدلّ أنها قابلة للضغط. */
  button.explore-card{
    border:none; padding:0; margin:0; font-family:inherit; color:inherit;
    cursor:pointer; display:block; text-align:start;
    background-color:var(--ivory-card-bg);
    -webkit-tap-highlight-color:transparent;
    transition:transform .3s ease;
  }
  button.explore-card:hover{ transform:translateY(-2px); }

  /* ============ ريلز ============ */
  .reels-section{ padding:0 0 var(--s-11); }
  .reels-scroll{ display:flex; gap:var(--s-5); overflow-x:auto; padding:var(--s-2) var(--s-7) var(--s-8); margin-bottom:-34px; scroll-snap-type:x proximity; scroll-padding-inline:var(--s-7); }
  .reel-card{
    scroll-snap-align:start;
    flex:0 0 auto;
    width:140px;
    aspect-ratio:9/16;
    border-radius:var(--r-md);
    position:relative;
    overflow:hidden;
    cursor:pointer;
    background:linear-gradient(160deg, var(--p-brand-a90), var(--p-olive-deep-a95));
    display:flex; align-items:center; justify-content:center;
  }
  .reel-card .reel-kenburns{
    position:absolute; inset:0;
    width:100%; height:100%;
    object-fit:cover;
    animation:reelKenBurns 14s ease-in-out infinite alternate;
    will-change:transform;
  }
  .reel-card:nth-child(2n) .reel-kenburns{ animation-duration:17s; animation-delay:-3s; }
  .reel-card:nth-child(3n) .reel-kenburns{ animation-duration:12s; animation-delay:-6s; }
  @keyframes reelKenBurns{
    0%{ transform:scale(1.0) translate(0,0); }
    100%{ transform:scale(1.18) translate(-2%,-2%); }
  }
  @media (prefers-reduced-motion: reduce){
    .reel-card .reel-kenburns{ animation:none; }
  }
  .reel-card .reel-shade{
    position:absolute; inset:0;
    background:linear-gradient(0deg, var(--p-olive-black-a55) 0%, transparent 45%);
    pointer-events:none;
  }
  .reel-card .reel-play{
    position:relative; z-index:2;
    width:var(--icon-44); height:var(--icon-44);
    border-radius:50%;
    background:var(--p-ivory-a92);
    display:flex; align-items:center; justify-content:center;
  }
  .reel-card .reel-play svg{ width:16px; height:16px; fill:var(--p-ink); margin-inline-start:var(--s-1); }
  .reel-card .reel-label{
    position:absolute; bottom:10px; inset-inline:10px;
    color:var(--p-ivory); font-size:var(--t-xs); text-align:center; opacity:.85;
    z-index:2;
  }
  .reel-video-card{ background:var(--p-black); cursor:pointer; }
  .reel-video-card .reel-video{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
  .reel-video-card .reel-play{ position:relative; z-index:2; transition:opacity .2s; }
  .reel-video-card.playing .reel-play{ opacity:0; }
  .reel-video-card .reel-label{ z-index:2; }

  /* ============ هدايانا عند عملائنا ============ */
  .customer-gallery-section{ padding:0 0 var(--s-9); text-align:center; }
  .customer-gallery-section h2{ font-size:var(--t-lg); font-weight:var(--w-bold); margin-bottom:var(--s-2); padding:0 var(--s-7); }
  .customer-gallery-section .cg-sub{ font-size:var(--t-sm); opacity:.6; margin-bottom:var(--s-6); padding:0 var(--s-7); }
  .cg-scroll{
    display:flex; align-items:center; gap:var(--s-5);
    overflow-x:auto; overflow-y:hidden; scroll-snap-type:x mandatory;
    scrollbar-width:none; -webkit-overflow-scrolling:touch; touch-action:pan-x pan-y;
    padding:30px 42vw;
    perspective:900px;
  }
  .cg-scroll::-webkit-scrollbar{ display:none; }
  .cg-item{
    flex:0 0 auto; width:132px; height:132px; border-radius:var(--r-md);
    overflow:hidden; scroll-snap-align:center;
    transform-origin:center center; will-change:transform,opacity;
    box-shadow:0 14px 30px var(--p-black-a18);
  }
  .cg-item img{ width:100%; height:100%; object-fit:cover; display:block; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P174 · ٢٠٢٦-٠٩-٢١ — «قبل التسليم»: شبكةٌ ساكنة بدل الشريط الدوّار.

     الكوفرفلو يبقى لقسم «تابعونا» (إنستغرام) حيث الصور كثيرة ومتشابهة فيصلح
     أن تمرّ. أمّا هنا فالصور قليلة وكلٌّ منها إثبات — تُرى كاملةً أو لا تُعرض.
     الأولى بعرض القسم لأنها تحمل التفاصيل، والباقي مربّعاتٌ متساوية.
     ══════════════════════════════════════════════════════════════════════════ */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P182 · ٢٠٢٦-٠٩-٢١ — القسم صفٌّ أفقي يتصفّحه العميل (قرار المالك).

     ما تغيّر ولماذا: الشبكة الساكنة (P174/P181) كانت تعرض الصور كلوحةِ إثبات،
     والمقصود من القسم أقرب إلى التصفّح: «كيف تمّت الطلبات» — طلبٌ بعد طلب.
     الصفّ الأفقي يعطي كل لقطةٍ دورها كاملةً، ويحتمل ثلاثاً كما يحتمل خمسين
     بلا أن يطول القسم سطراً واحداً، فسقط معه زرّ «شاهد الباقي» وحدّ الستّ.
     ⚠️ وليس هذا رجوعاً إلى كوفرفلو P174 المرفوض: لا ميلان ولا تصغير ولا
     شفافية — بطاقاتٌ كاملة الوضوح تتوقّف كلٌّ في وسط الشاشة (snap)، والقياس
     كبير (٧٨٪ من العرض) لا ١٣٢ بكسل. الحركة في الكوفرفلو كانت تخفي الصورة،
     وهنا لا تخفي شيئاً.
     ⚠️ و drag-scroll على الحاوية: يأتي معها سحبُ الماوس وخطّ التقدّم وزرّا
     التنقّل — نفس ما لبقيّة صفوف الموقع، بلا سطرِ كودٍ خاص.
     ══════════════════════════════════════════════════════════════════════════ */
  .cg-scroll:not(.ig-scroll){
    display:flex; align-items:flex-start; gap:var(--s-4);
    overflow-x:auto; overflow-y:hidden;
    padding:0 var(--s-7); perspective:none;
  }
  .cg-scroll:not(.ig-scroll) .cg-item{
    flex:0 0 78%; width:auto; height:auto; aspect-ratio:4/5;
    scroll-snap-align:center; border-radius:var(--r-lg);
    transform:none !important; opacity:1 !important;
    box-shadow:0 10px 24px var(--p-olive-dark-a10);
    border:1px solid var(--glass-border-on-light);
  }
  .cg-scroll:not(.ig-scroll) .cg-item[hidden]{ display:none; }
  @media (min-width:768px){
    .cg-scroll:not(.ig-scroll){
      max-width:1120px; margin-inline:auto; padding:0 var(--s-9); gap:var(--s-5);
    }
    .cg-scroll:not(.ig-scroll) .cg-item{ flex:0 0 300px; }
  }
  /* ⚠️ P167 — باب واتساب داخل الاستوديو: سطرٌ هادئ تحت زرّ الإرسال، لا زرٌّ
     ثانٍ ينافسه. الأخضر ممنوع هنا — لغة الصفحة زيتونٌ وعاج، وأيقونة واتساب
     وحدها تكفي للتعريف. */
  .studio-wa{
    display:flex; align-items:center; justify-content:center; gap:var(--s-3);
    margin-top:var(--s-5); padding:var(--s-4);
    border-radius:var(--r-md); text-decoration:none;
    border:1px solid var(--p-brand-a28); color:var(--brand);
    font-size:var(--t-sm); font-weight:var(--w-bold);
  }
  .studio-wa svg{ width:18px; height:18px; fill:currentColor; }
  .studio-wa:hover{ background:var(--p-brand-a07); }
  /* ⚠️ P166 — النصّ يتبع إيقاع بقيّة الأقسام: عنوانٌ إلى الجهة نفسها لا وسطاً،
     وسطر الإثبات شارةً صغيرة تحته لا جملةً سائبة. القسم كان الوحيد الموسَّط
     بين أقسام الصفحة، فيقرأ كأنه من موقعٍ آخر. */
  .customer-gallery-section{ text-align:start; }
  .customer-gallery-section h2{ font-size:var(--t-lg); }
  .cg-proof{
    display:inline-flex; align-items:center; gap:var(--s-2);
    margin:0 var(--s-7) var(--s-5); padding:6px 12px;
    border-radius:var(--r-full); background:var(--p-brand-a08);
    font-size:var(--t-xs); color:var(--brand); font-weight:var(--w-bold);
  }
  /* ⚠️ P181 — display:inline-flex يتغلّب على سمة hidden، فلا بدّ من نصٍّ صريح. */
  .cg-proof[hidden]{ display:none; }
  @media (min-width:768px){ .cg-proof{ margin-inline:var(--s-9); } }

  /* ============ Instagram ============ */
  .instagram-section{ padding:0 var(--s-7) var(--s-11); text-align:center; }
  .instagram-section h2{ font-size:var(--t-lg); font-weight:var(--w-bold); margin-bottom:var(--s-2); }
  .instagram-section .ig-handle{ font-size:var(--t-sm); color:var(--brand); margin-bottom:var(--s-5); display:inline-block; }
  .ig-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:var(--s-3); }
  .ig-cell{
    display:block;           /* ⚠️ P154 — صار <a> أحياناً، والوسم السطري يتجاهل النسبة */
    aspect-ratio:1/1;
    border-radius:var(--r-sm);
    overflow:hidden;
    background:var(--ivory-card-bg);
  }
  /* ⚠️ P61 — الشبكة تُملأ من media_library، ولم تكن لها قاعدة صورة إطلاقاً
     لأنها كانت فارغة منذ تفريغ المحتوى المكتوب بالكود. */
  .ig-cell img{ width:100%; height:100%; object-fit:cover; display:block; }

  /* ⚠️ P179 — مربّعات إنستغرام أكبر (قرار المالك). الصور هنا هي الإثبات
     اليومي، والمقاس السابق (١٣٢px) يجعلها زخرفةً تمرّ. والكوفرفلو يصغّر
     الأطراف أصلاً، فالمقاس الأكبر يبقي الوسطى مقروءةً كما ينبغي. */
  .ig-scroll .cg-item{ width:180px; height:180px; border-radius:var(--r-md); }
  @media (min-width:768px){
    .ig-scroll .cg-item{ width:240px; height:240px; border-radius:var(--r-lg); }
  }

  /* ============ الفوتر ============ */
  /* ⚠️ ٢٠٢٦-٠٧-٢٤ — إعادة تصميم الفوتر الكاملة: قسم دعوة أخيرة قبل الفوتر، معلومات علامة
     مختصرة، تواصل وساعات عمل، نشرة بريدية صادقة (غير مفعّلة فعلياً)، ملاحظة دفع صادقة
     بدل شارات بوابات دفع غير موجودة، خط ختامي، فوتر بدرجة لون مميزة عن باقي الموقع. */
  /* ⚠️ ٢٠٢٦-٠٧-٢٦ — الخاتمة، بلغة الهيرو نفسها. */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P176 · ٢٠٢٦-٠٩-٢١ — خاتمة الصفحة صارت صورةً بشفافية والنصّ فوقها
     (قرار المالك)، ومرتفعةً قليلاً عن الفوتر لا ملتصقةً به.

     كانت لوحاً أسود مصمتاً — أقوى تباينٍ في الصفحة كلّها لجملةٍ شاعرية، فيقرأ
     قطعةً غريبة قبل الفوتر مباشرةً. الآن: صورةٌ من شغل البوتيك تحت طبقة داكنة
     شفّافة، والنصّ فوقها، والكتلة مرفوعةٌ بحافّةٍ مستديرة وظلٍّ خفيف فتُقرأ
     خاتمةً مستقلّة.
     ⚠️ الصورة تُملأ من الكتالوج نفسه (سكربت P176) — لا أصل مكتوب في الكود
        يشيخ، وإن لم تصل صورةٌ بقي التدرّج الزيتوني وحده وهو كافٍ.
     ══════════════════════════════════════════════════════════════════════════ */
  .final-cta{
    position:relative;
    /* ⚠️ P178 — مربّعٌ ثابت: النسبة ١:١ تحفظ للكتلة هيئةً واحدة مهما تبدّلت
       الصور خلفها، فلا يقفز ارتفاع الصفحة مع كل تبديل. والمحتوى في وسطه. */
    aspect-ratio:1/1;
    padding:var(--s-8) var(--s-7);
    /* ⚠️ P178 — ومكانها: كانت تجلس على الفوتر بهامشٍ سالب (P176). الآن
       تتوسّط المسافة بين «تابعونا» والفوتر: هواءٌ متساوٍ فوقها وتحتها. */
    /* ⚠️ القياس على المعاينة: الفجوة فوق الكتلة كانت تزيد ١٧px عن هامشها
       (فيض شريط إنستغرام أسفل قسمه)، وتحتها تنقص ١٦px. فالهوامش غير متساوية
       في الكود لتخرج متساويةً على الشاشة — وهو ما يراه الزائر. */
    margin:40px var(--s-5) 56px;
    border-radius:var(--r-lg);
    text-align:center;
    background:var(--p-1b2015);
    color:var(--p-ivory);
    display:flex; flex-direction:column; align-items:center; justify-content:center;
    gap:var(--s-2);
    overflow:hidden;
    box-shadow:0 22px 48px var(--p-olive-deep-a22);
    z-index:2;
  }
  /* طبقتا الصورة: أسفل طبقة التعتيم وأسفل النصّ. */
  .fc-bg{
    position:absolute; inset:0; z-index:0;
    background-size:cover; background-position:center;
    opacity:0; transition:opacity 1.1s ease;
  }
  .fc-bg.on{ opacity:1; }
  @media (prefers-reduced-motion: reduce){ .fc-bg{ transition:none; } }
  .final-cta::before{
    content:""; position:absolute; inset:0; pointer-events:none; z-index:1;
    background:
      /* ⚠️ الطبقة أعتم في الوسط حيث النصّ: صورةٌ مزدحمة تحت نصٍّ رفيع تُفقده
         حدّه. والقاعدة: يُقرأ النصّ أولاً، ثم تُفهم الصورة خلفه. */
      linear-gradient(180deg, var(--p-olive-deep-a70) 0%, var(--p-olive-deep-a74) 45%, var(--p-olive-deep-a82) 100%),
      radial-gradient(120% 80% at 50% 0%, var(--p-brand-a26), transparent 62%);
  }
  @media (min-width:768px){
    /* على المكتب المربّع الكامل يطول أكثر من اللازم، فالنسبة تصير ١٦:٧
       والكتلة تبقى واحدةً بحافّتها وظلّها. */
    .final-cta{ margin:72px auto; max-width:1120px; aspect-ratio:16/7; padding:var(--s-10) var(--s-9); }
  }
  .final-cta > *{ position:relative; z-index:2; }
  .final-cta > .fc-bg{ position:absolute; z-index:0; }
  .fc-eyebrow{ font-size:var(--t-micro); font-weight:var(--w-bold); letter-spacing:.34em; opacity:.42; margin-bottom:var(--s-7); }
  .final-cta p{
    font-size:var(--t-lg); font-weight:var(--w-normal); line-height:1.85;
    max-width:24ch; margin:0 auto; opacity:.94;
  }
  .fc-rule{
    display:block; width:34px; height:1px; margin:26px auto;
    background:linear-gradient(90deg, transparent, var(--p-ivory-a42), transparent);
  }
  .final-cta button{
    padding:var(--s-5) var(--s-9); border-radius:var(--r-full);
    border:1px solid var(--p-ivory-a30);
    background:var(--p-ivory-a04);
    color:var(--p-ivory); font-size:var(--t-sm); font-weight:var(--w-bold);
    cursor:pointer;
    transition:background .22s ease, border-color .22s ease, transform .22s ease;
  }
  .final-cta button:hover{
    background:var(--p-ivory-a10); border-color:var(--p-ivory-a55);
    transform:translateY(-1px);
  }
  @media (min-width:768px){
    .final-cta{ padding:120px 40px 124px; }
    .final-cta p{ font-size:var(--t-xl); max-width:26ch; }
    .fc-eyebrow{ font-size:var(--t-xs); margin-bottom:28px; }
  }

  .site-footer{
    /* ⚠️ P177 · ٢٠٢٦-٠٩-٢١ — الفوتر زيتونٌ زجاجي ونصوصه أوضح (مراجعة المالك).

       المسار: أسودٌ شبه صرف (#161514) → زيتونٌ داكن (P169) → زجاجٌ زيتوني
       هنا: تدرّجٌ من الزيتوني إلى أعمق منه مع طبقةٍ فاتحة في أعلاه، فيقرأ
       امتداداً للهوية لا لوحاً مصمتاً. ومع فتح الخلفية رُفعت عتامة النصوص:
       سطرٌ بعتامة ٠٫٤٥ على أسودَ يُقرأ، وعلى زيتونٍ أفتح يبهت — فالنسب
       تُعاد لا تُنسخ.
       ⚠️ الترتيب والمناطق الثلاث لم تُمَسّ بأمر المالك. */
    background:
      linear-gradient(180deg, var(--p-ivory-a07) 0%, var(--p-ivory-a0) 26%),
      linear-gradient(180deg, var(--p-3a422f) 0%, var(--p-2c3325) 58%, var(--footer-end) 100%);
    color:var(--p-f4f1e8);
    /* ⚠️ 2026-07-26 (ترتيب ثانٍ) — ثلاث مناطق مفصولة بخطوط رقيقة بدل كومة عمودية
       بمسافات متساوية: (1) الهوية (2) الروابط والتواصل والنشرة (3) الخاتمة والحقوق.
       gap صار صفر — كل منطقة بتحمل حشوتها الخاصة، فالمسافات صارت غير متساوية بقصد
       وهاد اللي يخلق الهرمية. */
    padding:44px 22px 26px;
    display:flex;
    flex-direction:column;
    gap:0;
    border-top:1px solid var(--p-ivory-a10);
    position:relative;
  }
  .site-footer::before{
    /* إضاءة ناعمة جداً من الأعلى — خط الحد العلوي مو حاد، بيتلاشى تدريجياً */
    content:"";
    position:absolute; inset:0 0 auto 0; height:80px;
    background:linear-gradient(180deg, var(--p-ivory-a04), transparent);
    pointer-events:none;
  }
  /* ⚠️ 2026-07-26 — الشعار كان مرتفعاً عن الاسم بفراغ كبير.
     السبب: نسبة الشعار عريضة (145×110) وكان محصوراً بمربع 44×44 — فالارتفاع الفعلي
     للرسمة ~33px والباقي فراغ شفاف يدفع الاسم لتحت. المربع صار أعرض وأقصر ليطابق
     النسبة الحقيقية، والفجوة أُغلقت بهامش سالب خفيف. */
  .footer-logo{
    /* ⚠️ P177 — الشعار أقرب إلى الاسم (رصد المالك: «ما تكون مرتفعة بهذا الشكل
       عن اسم WSH SWEET»). الفجوة كانت فجوة الصفّ كاملةً (١٦px) فوق هامشٍ
       سالب صغير، فيبدو الشعار طائراً فوق الاسم لا متّصلاً به. */
    width:58px; height:44px; opacity:.98; margin-bottom:-14px;
    background:none; border:none; padding:0; cursor:pointer;
    display:flex; align-items:center; justify-content:center;
  }
  .footer-logo svg{ width:100%; height:100%; }
  .footer-logo:hover{ opacity:1; }
  .footer-tagline{ font-size:var(--t-sm); opacity:.8; line-height:1.8; max-width:32ch; }

  /* منطقة 1 — الهوية */
  .footer-top{
    display:flex; flex-direction:column; align-items:center; text-align:center;
    gap:var(--s-4); padding-bottom:var(--s-8);
    width:100%; max-width:1200px; margin:0 auto;
  }
  .footer-brand-mini{ display:flex; flex-direction:column; gap:var(--s-2); align-items:center; }
  .footer-brand-name{ font-size:var(--t-base); font-weight:var(--w-bold); letter-spacing:.14em; }
  .footer-brand-tags{ font-size:var(--t-xs); opacity:.72; line-height:1.7; }
  /* ⚠️ 2026-07-26: "صُنعت بالدوحة" عربية — التباعد كان يفكّ حروفها. */
  .footer-brand-loc{ font-size:var(--t-xs); font-weight:var(--w-bold); letter-spacing:0; opacity:.66; margin-top:var(--s-1); }
  .footer-brand-addr{ font-size:var(--t-xs); opacity:.7; line-height:1.7; text-align:center; }

  /* ⚠️ 2026-07-25 — الشريط الفاصل بمنتصف الصفحة.
     كامل العرض بقصد (يكسر إيقاع الصفوف والبطاقات)، بارتفاع محدود عشان يضل "نَفَس"
     مو قسم. بدون backdrop-filter نهائياً — الحجاب طبقة تدرّج عادية، تفادياً للتركيبة
     الممنوعة (filter/backdrop-filter على عنصر عريض) اللي سببت التشويش على الموبايل. */
  /* ⚠️ 2026-07-26 — نفس هوامش ونصف قطر ولوح زجاج قسم "قصتنا". */
  .break-band{ padding:0 var(--s-7) var(--s-10); }
  .break-band-banner{
    position:relative; width:100%;
    /* ⚠️ P62 — نسبة قصّ صريحة بدل min-height: اللوحة تحتاج رقماً تضبط عليه إطار
       القصّ، و min-height يعطي نسبةً تتغيّر بعرض الجهاز فلا يمكن الرفع عليها.
       الجوّال ٣:٢ والمكتب ١٦:٦ — تُرفع الصورة بـ١٦:٦ ويُبقى الموضوع في الثلث
       الأوسط أفقياً، لأن الجوّال يقصّ الطرفين. */
    aspect-ratio:3/2;
    border-radius:var(--r-lg); overflow:hidden;
    display:flex; align-items:flex-end;
  }
  .break-band-img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
  /* ⚠️ P67 — البانر يصير قابلاً للضغط فقط متى كانت له وجهة (صنف is-link يضيفه
     الجافاسكربت). فبلا وجهة لا مؤشّر يد ولا حركة تعد بما لا يفتح. */
  .break-band-banner.is-link{ cursor:pointer; transition:transform .3s ease; }
  .break-band-banner.is-link:hover{ transform:translateY(-2px); }
  .break-band-banner::after{
    content:""; position:absolute; inset:0; pointer-events:none;
    background:linear-gradient(180deg, var(--p-olive-deep-a16) 0%, var(--p-olive-black-a52) 100%);
  }
  .break-band .overlay-glass{ height:auto; min-height:26%; }
  .bb-text{ margin:0; font-size:var(--t-base); font-weight:var(--w-bold); line-height:1.95; max-width:34ch; }
  @media (min-width:768px){
    .break-band{ padding:0 40px 64px; }
    /* ⚠️ P62 — يتبع عمود الصفحة (١١٢٠) كبقيّة الأقسام منذ P56، ونسبته ١٦:٦. */
    .break-band-banner{ aspect-ratio:16/6; max-width:1120px; margin-inline:auto; }
    .bb-text{ font-size:var(--t-md); max-width:40ch; }
  }
  /* ⚠️ 2026-07-25: سطر الإثبات الرقمي — أكبر شوي من السطر التعريفي فوقه بس بلا صخب،
     بلون العلامة نفسه. بدون أيقونة ولا خلفية ولا إطار (قاعدة 3 و7). */
  /* ⚠️ 2026-07-26 — التوقيع على صور "قبل التسليم".
     هالصور تُصوّر بالمحل وتُبعت للعملاء بواتساب — يعني تخرج من الموقع أكتر من أي صورة
     تانية، وكانت تخرج عارية. التوقيع هون فوق الصورة (مو بالإطار) لأن الصورة نفسها
     هي اللي بتسافر، مو الكرت.
     ⚠️ بدون filter إطلاقاً — عنصر فوق صورة بحواف مستديرة، ونفس العائلة اللي سببت
     التشويش على iOS. الوضوح مضمون بالتدرّج الداكن تحت النص. */
  .cg-item{ position:relative; }
  .cg-item::after{
    content:"WSH SWEET · DOHA";
    position:absolute; inset-inline:0; bottom:0;
    padding:var(--s-5) var(--s-4) var(--s-3);
    /* التوقيع لاتيني — التباعد مسموح ومطلوب هون */
    font-size:var(--t-micro); font-weight:var(--w-bold); letter-spacing:.2em;
    color:var(--p-ivory-a72); text-align:center;
    background:linear-gradient(180deg, transparent, var(--p-olive-black-a42));
    pointer-events:none; user-select:none;
    direction:ltr;
  }
  @media (min-width:768px){ .cg-item::after{ font-size:var(--t-micro); padding:var(--s-6) var(--s-4) var(--s-3); } }

  /* ⚠️ P166 — شكل سطر الإثبات انتقل إلى شارةٍ صغيرة أعلى الملف (مع بقيّة
     تنسيق القسم)، وبقي هنا ما لا يخصّ الشكل: لا قاعدة ثانية تتنازع معه. */
  .cg-proof .num{ font-family:var(--font-en, inherit); }
  .footer-connect{ display:flex; flex-direction:column; align-items:center; gap:var(--s-4); }
  .footer-meta-line{ display:flex; align-items:center; gap:var(--s-3); font-size:var(--t-xs); opacity:.78; }
  .footer-meta-line svg{ width:14px; height:14px; flex:0 0 auto; stroke:currentColor; fill:none; stroke-width:1.6; }

  /* ⚠️ 2026-07-26 — إعادة ترتيب خانة الاشتراك.
     المشكلة: زر "اشترك" كان كبسولة عاجية مصمّتة كبيرة + حقل بحد عريض — أثقل عنصر
     بالفوتر كله، بينما الفوتر كله هادي بخطوط رقيقة وعتامة منخفضة. فكان يشدّ العين
     لأقل عنصر أهمية بالصفحة، ويكسر الإيقاع.
     الحل: سطر واحد مدمج — حقل بلا حد وزر نصّي جنبه، والفاصل خط رفيع تحتهم سوا.
     نفس الوظيفة، بوزن بصري يناسب مكانه. */
  .footer-newsletter{
    width:100%; max-width:330px; text-align:center;
    margin:26px auto 0; padding-top:var(--s-7);
    border-top:1px solid var(--p-ivory-a08);
  }
  .footer-newsletter p{ font-size:var(--t-xs); opacity:.45; margin-bottom:var(--s-4); line-height:1.7; }
  /* ⚠️ 2026-07-26 — سطر واحد مدمج بدل حقل مؤطّر + كبسولة عاجية مصمّتة.
     الحقل بلا حد وبلا خلفية (شفاف)، والزر نصّي بلون العلامة الفاتح، والفاصل خط رفيع
     واحد تحتهم — يتلوّن عند التركيز. أخفّ عنصر بالفوتر بدل ما يكون أثقله. */
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P215 · ٢٠٢٦-٠٩-٢٣ — الاشتراك عبر واتساب لا بالبريد (أمر المالك: البريد
        ضعيف الاستجابة عند القطريين).

     ⚠️ والعميل هو من يرسل، لا نحن من نأخذ رقمه. والسبب ليس تفضيلاً في التصميم:
        صفحة الخصوصية المنشورة على الإنتاج تنصّ حرفياً «لا نبدأ مراسلتك من
        تلقائنا لغرض تسويقي»، وهي إحدى الصفحات الثلاث المعروضة على ميتا الآن
        ضمن الطلب ١٣٤ (يمنع الإطلاق). فجمعُ الأرقام هنا كان يجعل الموقع يجمع
        أرقاماً لغرضٍ تنفيه سياسته المنشورة أمام مراجعٍ يقرأ الموقع كلّه.

     ⚠️ وهذا المسار يكسب أربعاً معاً بلا سطرٍ واحد في القاعدة: لا يخالف الوعد
        لأن العميل بدأ؛ ورقمه يدخل wa_contacts و wa_conversations مباشرةً وهما
        ما يُربط باللوحة الآن؛ ورسالته نفسها موافقةٌ مسجّلة بنصّها؛ وتفتح نافذة
        الأربع والعشرين ساعة فتصير المراسلة بعدها بلا كلفة قوالب.

     ⚠️ ولذلك لا جدول مشتركين ولا سياسة صفوف جديدة — وكلاهما كان يقع خارج ملكية
        البوتيك ويمرّ على جلسة النظام (القاعدة ١٣ والقرار ١٢).
     ══════════════════════════════════════════════════════════════════════════ */
  .footer-newsletter-row{
    display:flex; align-items:center; gap:var(--s-4);
    border-bottom:1px solid var(--p-ivory-a18);
    padding-bottom:var(--s-3);
    transition:border-color .25s ease;
  }
  .footer-newsletter-row:focus-within{ border-bottom-color:var(--p-ivory-a45); }
  .footer-sub-cc{
    flex:0 0 auto; border:none; background:none; color:var(--p-ivory);
    font-family:inherit; font-size:var(--t-sm); padding:var(--s-3) 0;
    cursor:pointer; appearance:none; -webkit-appearance:none;
  }
  /* ⚠️ الترتيب بصرياً بـ order لا بتبديل الوسوم: يبقى تسلسل Tab (الرقم ثم الزر) سليماً.
     يميناً «اشترك»، وفي الوسط الرقم، ويساراً مفتاح الدولة — فيُقرأ الرقم +974 … من اليسار. */
  .footer-newsletter-row button{ order:-1; }
  .footer-sub-cc{ order:1; }
  .footer-sub-cc:focus{ outline:none; }
  .footer-sub-cc option{ color:var(--p-ink); }
  .footer-newsletter-row input{
    flex:1; min-width:0; border:none; border-radius:0;
    background:none; color:var(--p-ivory); padding:var(--s-3) var(--s-1); font-size:var(--t-sm);
    font-family:inherit; direction:ltr; text-align:start;
  }
  .footer-newsletter-row input:focus{ outline:none; }
  .footer-newsletter-row input::placeholder{ color:var(--p-ivory-a35); }
  .footer-newsletter-row input.is-bad{ color:var(--p-e5a9a2); }
  .footer-newsletter-row button{
    flex:0 0 auto; padding:var(--s-3) var(--s-2); border:none; border-radius:0;
    background:none; color:var(--p-ivory); font-size:var(--t-sm); font-weight:var(--w-bold);
    cursor:pointer; opacity:.72;
    transition:opacity .2s ease;
  }
  .footer-newsletter-row button:hover{ opacity:1; }
  .footer-newsletter-row button[disabled]{ opacity:.4; cursor:default; }
  /* سطر الموافقة أخفت من الجملة فوقه: هو شرطٌ قانونيّ لا دعوة، فلا يزاحمها. */
  .footer-sub-consent{
    margin:var(--s-4) 0 0; font-size:var(--t-micro); line-height:1.75;
    opacity:.34; text-align:start;
  }
  .footer-payment-note{ font-size:var(--t-xs); opacity:.4; text-align:center; }
  .footer-cols[hidden]{ display:none !important; }
  /* منطقة 3 — الخاتمة */
  /* ⚠️ P197 · ٢٠٢٦-٠٩-٢٣ — السطر الختامي مستقيمٌ عريض بدل مائلٍ خفيف (أمر المالك).

     ورُفعت العتامة من ٠٫٤٢ إلى ٠٫٧٢ معه: العريض عند ٠٫٤٢ يقرأ أثقل لا أوضح —
     الحرف يغلظ والحبر يبقى شاحباً، فيبدو ضبابياً لا بارزاً. والغرض من العرض
     إبرازُ السطر، فالعتامة تتبع الغرض. */
  .footer-tagline-final{
    text-align:center; font-size:var(--t-sm);
    font-style:normal; font-weight:var(--w-bold); opacity:.72;
    padding:var(--s-8) 0 var(--s-7); margin-top:var(--s-3);
    border-top:1px solid var(--p-ivory-a08);
  }
  .footer-social-label{ font-size:var(--t-xs); font-weight:var(--w-bold); letter-spacing:.04em; opacity:.5; margin-top:var(--s-3); }
  /* ⚠️ 2026-07-26 — ثلاث أعمدة حتى على الموبايل (الروابط قصيرة فما تنضغط)، مع خط فاصل
     علوي رقيق يفصل منطقة الروابط عن منطقة العلامة. */
  .footer-cols{
    display:grid; grid-template-columns:repeat(3,1fr); gap:var(--s-4);
    width:100%; max-width:1200px; margin:0 auto;
    padding:var(--s-8) 0 var(--s-2); border-top:1px solid var(--p-ivory-a10);
  }
  .footer-col{ text-align:start; }
  .footer-col h4{
    /* ⚠️ 2026-07-26: كان .16em — والعناوين عربية (البوتيك/الخدمة/قانوني) فكانت
       تنفكّ حروفها وتقرأ كخط غريب. التمييز صار بالوزن والعتامة مو بالتباعد. */
    font-size:var(--t-xs); font-weight:var(--w-bold); letter-spacing:0;
    /* ⚠️ P177 — عناوين الأعمدة كانت شبه غائبة (٠٫٤٢) على خلفيةٍ فاتحة الآن. */
    margin-bottom:var(--s-5); opacity:.62; text-transform:none;
  }
  .footer-col a{ display:block; font-size:var(--t-xs); color:var(--p-f4f1e8); opacity:.86; text-decoration:none; margin-bottom:var(--s-4); line-height:1.5; }
  .footer-col a:hover{ opacity:1; }
  .footer-contact-link{ display:flex !important; align-items:center; gap:var(--s-3); }
  .footer-contact-link svg{ width:16px; height:16px; flex:0 0 auto; fill:none; stroke:currentColor; stroke-width:1.6; }
  .footer-static-line{ display:block; font-size:var(--t-xs); opacity:.5; margin-bottom:var(--s-4); line-height:1.5; }
  .footer-connect{ display:flex; flex-direction:column; align-items:center; gap:var(--s-4); padding-top:var(--s-2); }
  .footer-meta-line{ display:flex; align-items:center; gap:var(--s-3); font-size:var(--t-xs); opacity:.5; }
  /* الموقع كزر: حد رقيق يميّزه كعنصر قابل للضغط، بلا صخب */
  .footer-meta-btn{
    color:var(--p-ivory); text-decoration:none;
    padding:var(--s-3) var(--s-5); border-radius:var(--r-full);
    border:1px solid var(--p-ivory-a16);
    transition:border-color .2s ease, opacity .2s ease;
  }
  .footer-meta-btn:hover{ border-color:var(--p-ivory-a40); opacity:.85; }
  .footer-meta-arrow{ width:11px !important; height:11px !important; opacity:.5; }
  .footer-meta-line svg{ width:13px; height:13px; fill:none; stroke:currentColor; stroke-width:1.6; opacity:.8; }
  /* بصمة البناء للفريق: مخفية عن الزبائن وتظهر بإضافة ‎?build‎ للرابط (انظر build-stamp.js). */
  .build-stamp{ display:block; margin-top:6px; font-size:10.5px; opacity:.4; }
  .footer-social{ display:flex; gap:var(--s-3); }
  .footer-social a{
    width:var(--icon-32); height:var(--icon-32); border-radius:50%;
    border:1px solid var(--p-ivory-a18);
    transition:border-color .2s ease, background .2s ease;
    display:flex; align-items:center; justify-content:center;
    color:var(--p-ivory);
  }
  .footer-social svg{ width:16px; height:16px; stroke:currentColor; fill:none; stroke-width:1.6; }
  /* ⚠️ 2026-07-26 — الشريط الأخير: منطقة هادية جداً للحقوق والبناء وطرق الدفع. */
  .footer-bottom{
    border-top:1px solid var(--p-ivory-a10);
    padding-top:var(--s-6);
    font-size:var(--t-xs);
    opacity:.42;
    display:flex; flex-direction:column; align-items:center;
    gap:var(--s-3); text-align:center;
    width:100%; max-width:1200px; margin:0 auto;
  }
  .footer-bottom .footer-payment-note{ font-size:var(--t-xs); opacity:1; }
  @media (min-width:768px){
    .footer-bottom{ flex-direction:row; justify-content:space-between; text-align:start; }
  }
  .footer-legal-links{ width:100%; display:flex; flex-wrap:wrap; justify-content:center; gap:var(--s-3) var(--s-3); align-items:center; }
  .footer-legal-links a{ color:inherit; text-decoration:none; }
  .footer-legal-links a:hover{ text-decoration:underline; }
  .footer-legal-sep{ opacity:.6; }

  /* ============ الشريط السفلي (Liquid Glass Bottom Nav) ============ */
  .bottom-nav{
    position:fixed;
    /* ⚠️ 2026-07-26: كان 14px — على الآيفون بيجتمع مع env(safe-area-inset-bottom)
       (يلي أصلاً بيحسب مؤشر الهوم) + شريط سفاري السفلي، فالفراغ تحت الشريط كان يطلع
       كبير والشريط يبين "معلّق عالي". نزّلناه لـ6px — يقعد أقرب لشريط سفاري. */
    /* ⚠️ 2026-07-26 — إعادة تشكيل بأسلوب شريط إنستقرام الجديد (قرار صاحب المحل):
       أقصر ارتفاعاً، بعرض الشاشة تقريباً، وأنزل لتحت. الكبسولة الضيقة الوسطانية كانت
       تبين "عائمة" وسط الشاشة بدل ما تكون شريط تنقّل. */
    bottom:calc(2px + env(safe-area-inset-bottom));
    left:50%;
    transform:translateX(-50%);
    /* ══════════════════════════════════════════════════════════════════════
       ⚠️ P74 · ٢٠٢٦-٠٨-١٢ — الشريط فوق الأوراق، بخلوصٍ محسوب هذه المرة.

       ⚠️ تاريخ هذا السطر يستحق البقاء: P70 رفعه إلى ٢٠٠ وعوّض بحشوٍ على
          .pd-scroll وحدها — فبقي يغطّي ما ليس داخلها، و P73 رجع عنه كلّه.
          والمالك أراده ظاهراً فعلاً، فالرجوع كان الحلّ الخطأ للعلّة الصحيحة.

       ⚠️ الفرق الآن: الخلوص على **الورقة نفسها** (.pd-sheet) لا على محتواها.
          الورقة صندوق عمودي بحوافّ، فحشوٌ سفليّ عليها يرفع كل ما بداخلها فوق
          الشريط دفعةً واحدة — منطقة التمرير وأزرارها وحافّة الورقة معاً. وهذا
          ما فات P70: عالج ابناً واحداً وترك الأب.

       ⚠️ و٢٠٠ فوق أعلى ورقة (تدفّق «شاهد» عند ١٩٠) ودون شريط وضع الكشف.
       ══════════════════════════════════════════════════════════════════════ */
    z-index:200;
    display:flex;
    align-items:center;
    justify-content:space-around;
    width:calc(100% - 16px);
    max-width:560px;
    gap:0;
    padding:var(--s-2) var(--s-3);
    border-radius:var(--r-full);
    backdrop-filter:blur(30px) saturate(220%);
    -webkit-backdrop-filter:blur(30px) saturate(220%);
    /* ⚠️ 2026-07-26 — الألوان انقلبت بقرار صريح: الوضع الفاتح = زجاج زيتوني،
       الوضع الداكن = زجاج عاجي. الأيقونات تعاكس الخلفية بالحالتين (تحت). */
    background:var(--p-brand-a82);
    border:1px solid var(--p-ivory-a28);
    border-top-color:var(--p-ivory-a42);
    /* ⚠️ 2026-07-24: خلل حقيقي انلقى — كانت الشفافية 10٪ بس (مصممة تبين فوق خلفية الهيرو
       الغامقة تحديداً)، فلما تنزل الصفحة لخلفية بيضاء عادية (معظم الموقع)، الشريط
       يصير شبه مختفي فعلاً (زجاج شفاف فوق أبيض = تباين شبه معدوم). رفعت العتامة لتضمن
       وضوح ثابت بكل مكان بالصفحة، بغض النظر شو الخلفية تحتها. */
    box-shadow:
      inset 0 1px 0 var(--p-white-a25);
    /* ⚠️ 2026-07-24 (تعديل ثالث) — الظل الخارجي انشال نهائياً بالكامل (مو بس drop-shadow،
       حتى box-shadow البسيط يلي حطيناه بدله). تأكد فعلياً من صورة جهاز حقيقي إنه المشكلة
       رجعت حتى بعد استبدال drop-shadow بـbox-shadow — يعني الخلل مش بنوع الخاصية المحددة،
       هو بمبدأ backdrop-filter + أي ظل خارجي (external) سوا على هالعنصر تحديداً. الحل
       النهائي: بدون أي ظل خارجي إطلاقاً، الاعتماد فقط على العتامة العالية للخلفية
       (rgba(255,255,255,0.68)) + الحد (border) للتمايز البصري — آمن 100٪ مع backdrop-filter. */
    touch-action:none;
    cursor:grab;
    /* الحجم/الشفافية الآن يُحسبان كل إطار من update() كـ lerp مستمر من موضع وسرعة السكرول —
       بدون CSS transition وبدون class ثنائي (نفس فلسفة الكريستالة) */
  }
  .bottom-nav.dragging{ cursor:grabbing; }

  /* ⚠️ 2026-07-24 (تعديل رابع ونهائي) — "الظل الغريب" حوالين الشريط السفلي على الموبايل:
     شلنا drop-shadow، وبعدين شلنا box-shadow الخارجي كمان، والمشكلة ضلت. يعني المصدر مش
     الظل أصلاً — المصدر هو تركيبة `backdrop-filter` (تأثير الزجاج) + `transform` سوا على
     نفس العنصر: على Safari بالموبايل هالتركيبة بتخلي منطقة التمويه تنحسب غلط و"تنزف" برا
     حدود العنصر كبقعة ضبابية عريضة — بالضبط الشكل يلي ظهر بالصور. على الكمبيوتر بتنرندر
     صح فما بتظهر إطلاقاً.
     الحل النهائي على أجهزة اللمس بس (الكمبيوتر ما بينلمس ويحتفظ بالزجاج كامل):
       1. إلغاء backdrop-filter نهائياً — بدون تأثير زجاج = بدون أي احتمال نزيف.
       2. التوسيط بهامش تلقائي بدل transform — بنشيل الطرف التاني من التركيبة كمان.
       3. تعويض بصري: خلفية أعتم (0.92 بدل 0.68) — الشكل النهائي قريب جداً من الزجاج
          الأصلي، بس مستقر ومضمون 100٪ بدون أي أثر جانبي. */
  @media (hover: none) and (pointer: coarse){
    .bottom-nav{
      /* ══════════════════════════════════════════════════════════════════════════
         ⚠️ 2026-07-26 — إرجاع الزجاج الحقيقي على أجهزة اللمس.

         الملاحظة: شريط سفاري السفلي زجاجه نظيف وشفّاف، وشريطنا كان يبين "زيتوني معتّم
         وموحل" — لأنه backdrop-filter كان مقفول على اللمس، فما كان في زجاج أصلاً، بس
         لون معتّم فوق المحتوى.

         ⚠️ المخاطرة أقل مما تبدو، والدليل موثّق بهالملف نفسه (أسفل هالكتلة):
         السبب الجذري الحقيقي لـ"الظل الغريب" **ما كان الشريط السفلي إطلاقاً**. تأكد
         بالدليل القاطع: العميل فتح الموقع بـ?nonav فاختفى الشريط بالكامل، والظل ضل
         موجود بمكانه. السبب الفعلي كان تركيبة filter + backdrop-filter على أربعة عناصر
         تانية (وأخطرها .pd-sheet بظل اتجاهه لفوق)، وهي مُعالَجة بـfilter:none !important
         تحت. يعني إلغاء backdrop-filter عن الشريط كان **علاجاً بالمكان الغلط**، ورجوعه
         ما يرجّع الخلل.

         التحصينات المحفوظة كلها بمكانها رغم ذلك:
           · ولا filter ولا ظل خارجي على الشريط ولا على أيقوناته.
           · isolation + contain:paint + backface-visibility + translateZ(0).
           · overflow:hidden مقصوص بنصف القطر — يحصر أي رسم جوّا الكبسولة.

         ⚠️ **للتراجع بسطرين** (لو ظهر أي أثر ضبابي): backdrop-filter:none !important
            + عتامة الخلفية 0.95.
         ══════════════════════════════════════════════════════════════════════════ */
      backdrop-filter:blur(36px) saturate(190%);
      -webkit-backdrop-filter:blur(36px) saturate(190%);
      /* ══════════════════════════════════════════════════════════════════════
         ⚠️ P80 · ٢٠٢٦-٠٨-١٣ — العتامة رُفعت من ٠٫٥٨ إلى ٠٫٨٨ على أجهزة اللمس.

         ⚠️ رصد المالك أن P79 نُشرت ولم يتغيّر شيء على هواوي وأندرويد. ودلالته
            أن المتصفح **يدعم** backdrop-filter — وإلا لطبّق احتياطي P79 —
            لكنّ التمويه لا يُنتج أثراً مرئياً على تلك الأجهزة. وهذا يقع فعلاً
            في Chromium حين يجتمع على العنصر نفسه contain:paint و will-change
            و translateZ: يتغيّر جذر الخلفية الذي يعتمد عليه التمويه فيُسحب من
            لا شيء، فتبقى الخلفية الشفيفة وحدها — وهي بالضبط ٠٫٥٨ التي تُرى
            الصور من خلالها.

         ⚠️ ولا تُنزع تلك الخصائص الثلاث: كلٌّ منها ثمن عطلٍ حقيقي على iOS
            موثّق فوق (بقايا رسم وطرف ورقة ظاهر)، ونزعها يصلح جهازاً ويكسر
            آخر. فالعلاج ألّا تعتمد القراءة على التمويه أصلاً.

         ⚠️ ٠٫٨٨ لا ٠٫٩٦: تكفي لقراءة الأيقونات فوق أي محتوى، وتُبقي أثر الزجاج
            محسوساً حيث يعمل التمويه فعلاً. والفرق عن ٠٫٨٢ في القاعدة الأساس
            مقصود — أجهزة اللمس هي التي يمرّ المحتوى تحت شريطها.

         ⚠️ وهذا إصلاح متانة لا تشخيص مؤكَّد: لا أملك جهاز هواوي لأقيس عليه،
            والقيمة تجعل الشريط مقروءاً سواء أصاب التشخيص أم أخطأ.
         ══════════════════════════════════════════════════════════════════════ */
      background:var(--p-brand-a88);
      overflow:hidden;
      /* ⚠️ 2026-07-24 (الجراحة النهائية) — تصليح خطأ "الشريط نصه ظاهر": المحاولة السابقة
         غيّرت التموضع لـ left:0/right:0/margin-auto بس نسيت إنه القاعدة الأساسية فوق لسا
         بتطبّق transform:translateX(-50%) — فانجمع الاثنين وانزاح الشريط نص عرضه لبرا
         الشاشة. الحل: رجعنا للتموضع الأصلي حرفياً (left:50% من القاعدة الأساسية +
         translateX ثابت هون)، و!important عشان ولا أي كتابة inline من JS (لو ضل أي أثر)
         تقدر تغيّر الموضع أو الشفافية — CSS هو المالك الوحيد للشريط على اللمس. */
      /* ══════════════════════════════════════════════════════════════════════════
         ⚠️ 2026-07-26 — إرجاع التصغير والتلاشي عند الفوتر على أجهزة اللمس.

         الوضع قبل: هالسطرين كانوا يقفلوا الحجم والشفافية بـ!important، فالشريط على
         الموبايل ثابت الحجم ولا يختفي عند الفوتر — عكس سطح المكتب.

         ⚠️ ليش انقفلوا أصلاً: أثناء تعقّب "الظل الغريب" (2026-07-24) كان JS يكتب
         transform/opacity **سطرياً** على العنصر، وهاد كان يجبر إعادة رسم متكررة لعنصر
         ثابت فيه backdrop-filter. القفل كان الحل الصحيح وقتها.

         ⚠️ ليش صار آمن هلأ: السبب الجذري الفعلي (تركيبة filter + backdrop-filter) اتشال
         نهائياً — backdrop-filter صار none على اللمس، و.bn-item svg{filter:none}.
         وهون الفرق الجوهري: JS ما بيكتب ولا خاصية على العنصر نفسه، بس بيحدّث متغيّرين
         على :root. العنصر ما بيتلمس سطرياً إطلاقاً.

         ⚠️ كل تحصينات iOS محفوظة كما هي: translateZ(0) ضمن نفس الـtransform،
         backface-visibility، isolation، contain:paint — ولا وحدة انشالت.

         ⚠️ للتراجع: رجّع السطرين لقيمهم الثابتة (scale بدون var، opacity:1) — سطر واحد. */
      transform:translateX(-50%) translateZ(0) scale(var(--bn-scale, 1)) !important;
      opacity:var(--bn-opacity, 1) !important;
      /* ⚠️ 2026-07-24 — طقم العلاج القياسي الكامل لبقايا الرسم المتراكمة على iOS WebKit
         (نفس المحرّك بـSafari وChrome على الآيفون، ولهيك المشكلة ظهرت بالاثنين):
           · translateZ(0) — بيجبر المتصفح يرفع العنصر لطبقة رسم GPU مستقلة فعلياً.
             (will-change لحاله ما كان كافي — معروف إنه iOS بيتجاهله أحياناً، بينما
             translateZ صريح بالـtransform بيجبره فعلياً.)
           · backface-visibility:hidden — علاج كلاسيكي موثّق لنفس الفئة من الخلل.
           · isolation:isolate — سياق دمج مستقل، بيمنع تداخل رسم العنصر مع الصفحة تحته.
           · contain:paint — بيضمن إنه رسم العنصر ما بيتعدى حدوده إطلاقاً، فحتى لو صار
             أي أثر، بينحصر جوّا الكبسولة نفسها وما بيمتد للصفحة. */
      backface-visibility:hidden;
      -webkit-backface-visibility:hidden;
      isolation:isolate;
      contain:paint;
      will-change:transform;
    }
    /* فلتر الظل على أيقونات الشريط: (1) فلاتر على أبناء عنصر مثبّت = مسبب موثّق لبقايا
       الرسم على iOS تحديداً، (2) صار بلا معنى أصلاً — انصمم لأيقونات فاتحة فوق الهيرو
       الغامق، والأيقونات صارت داكنة فوق خلفية فاتحة. */
    .bn-item svg{ filter:none; }

    /* ══════════════════════════════════════════════════════════════════════════
       ⚠️ 2026-07-26 — إصلاح "الزوم عند الكتابة" + "السكرول شغّال بالخلفية".

       العرضان ليهم **سبب واحد**: iOS Safari بيكبّر الصفحة تلقائياً لما تركّز على حقل
       إدخال حجم خطه **أصغر من 16px**. وحقولنا كانت 13px.
       والتكبير بيحرّك المنفذ البصري (visual viewport)، فالخلفية تبين كأنها "بتتسكرل"
       والورقة تنزاح — رغم إنه قفل السكرول شغّال صح تماماً. يعني ما كان عندنا عطلان،
       كان عندنا عطل واحد بمظهرين.

       ⚠️ الحل هو 16px، **مو** maximum-scale=1 بوسم viewport: منع التكبير كلياً يكسر
       إمكانية الوصول (كبار السن وضعاف النظر ما يقدروا يكبّروا الموقع إطلاقاً).

       ⚠️ على أجهزة اللمس فقط — الكمبيوتر يضل بمقاساته الأصلية الأنعم.
       ══════════════════════════════════════════════════════════════════════════ */
    input, textarea, select,
    .cart-address, .cart-gift-note, .cart-date-input, .cart-time-input{
      font-size:var(--t-base) !important;
    }

    /* ══════════════════════════════════════════════════════════════════════════
       ⚠️ 2026-07-24 — السبب الجذري الحقيقي والنهائي لـ"الظل الغريب" (تأكد بالدليل
       القاطع: العميل فتح الموقع بـ?nonav فاختفى الشريط السفلي بالكامل، والظل ضل موجود
       بمكانه — يعني الشريط كان بريء تماماً وكل المحاولات السابقة عليه كانت بالمكان الغلط).

       السبب الفعلي: تركيبة `filter` + `backdrop-filter` على نفس العنصر. هالتركيبة موثّقة
       بهالملف نفسه كخطر معروف (بتعليقات الكود)، بس انطبقت على الشريط السفلي بس وما
       انفحصت على باقي العناصر إطلاقاً. أربع عناصر عندها نفس التركيبة، وأخطرها
       `.pd-sheet` (ورقة تفاصيل المنتج): عنصر ثابت بأسفل الشاشة، بعرض كامل، وظله اتجاهه
       **لفوق** (drop-shadow(0 -16px 32px)) — فبيرسم شريط غامق بعرض الشاشة كامل فوق
       الورقة، بالضبط الشكل يلي ظهر بكل الصور.

       ليش ظهر على أندرويد وiOS سوا: لأنه مش خلل رندر خاص بمحرّك معيّن — هو ظل حقيقي
       بيترسم صح بكل الأجهزة، بس شكله غلط بسبب تداخله مع طبقة الـbackdrop-filter تحته.

       الحل: إلغاء filter نهائياً عن الأربعة على أجهزة اللمس. الفصل البصري مضمون بدونه:
       الورقة فوق خلفية معتّمة 40% أصلاً، والكريستالة/البلاطات عندها حدود وخلفيات واضحة.
       ══════════════════════════════════════════════════════════════════════════ */
    .pd-sheet,
    .crystal,
    .logo-crystal,
    .overlay-glass{
      filter:none !important;
    }
  }
  /* ⚠️ 2026-07-24 — خلل رؤية حقيقي: كانت القيمة هون #F2EEE4 (فاتحة)، بس مؤشر التبويب
     النشط (.bn-indicator) دائرة عاجية فاتحة بكل الأوضاع — يعني أيقونة فاتحة فوق دائرة
     فاتحة = غير مرئية تماماً بالوضع الداكن. اللون الصحيح داكن، مطابق للوضع الفاتح
     (.bn-item.active{color:#1C1C1C}). */
  .bottom-nav::after{
    /* نفس مبدأ مصدر الضوء الواحد الطبيعي عالكريستالة، بمقاس أصغر يناسب الكبسولة */
    content:"";
    position:absolute;
    inset:0;
    border-radius:inherit;
    pointer-events:none;
    background:
      radial-gradient(ellipse 45% 60% at 2% 10%, var(--p-white-a55), transparent 70%),
      radial-gradient(ellipse 30% 40% at 98% 90%, var(--p-white-a20), transparent 70%);
  }
  .bn-item{
    position:relative;
    /* ⚠️ 2026-07-26: 52×52 → 46×40. الارتفاع هو اللي يحدد ارتفاع الشريط كله، فتقليله
       هو المفتاح. العرض بيتوزّع بالتساوي عبر justify-content:space-around بالحاوية. */
    width:46px; height:40px;
    border-radius:var(--r-full);
    display:flex; align-items:center; justify-content:center;
    /* ⚠️ 2026-07-26: الشريط صار زيتوني بالوضع الفاتح — فالأيقونة لازم تكون عاجية.
       بالوضع الداكن الشريط عاجي فالأيقونة تصير داكنة (تحت). */
    color:var(--p-ivory-a82);
    background:none; border:none;
    cursor:pointer;
    z-index:2;
    transition:color .2s ease;
  }
  /* ⚠️ 2026-07-24: لون الأيقونة الافتراضي صار داكن (كان فاتح #F2EEE4 مصمم بس لخلفية الهيرو
     الغامقة) — بعد ما صار الشريط عاتم فعلياً (البند فوق)، الأيقونة الفاتحة صارت هي المشكلة
     (فاتح فوق خلفية فاتحة عاتمة = نفس مشكلة التباين). */
  /* ⚠️ 2026-07-22: كل أيقونة هلأ نسختين — outline (افتراضي) وfilled (مطموسة). التبديل
     بينهم بـdisplay فعلي، مو stroke/fill CSS trick — عشان الأيقونة "المطموسة" تصميم
     مقصود بحد ذاته (شكل مختلف فعلياً)، مو بس تلوين نفس الخطوط. */
  .bn-item svg{ width:20px; height:20px; filter:drop-shadow(0 1px 3px var(--p-black-a45)); }
  .bn-icon-outline{ stroke:currentColor; fill:none; stroke-width:1.6; }
  .bn-icon-filled{ fill:currentColor; stroke:none; display:none; }
  .bn-item.active .bn-icon-outline{ display:none; }
  .bn-item.active .bn-icon-filled{ display:block; }
  /* المؤشر النشط دائرة عاجية فاتحة بالوضع الفاتح → الأيقونة عليها لازم تكون داكنة.
     بالوضع الداكن المؤشر داكن → الأيقونة عاجية. */
  /* ⚠️ P63 — انقلب الأساس: المؤشّر صار غَوراً داكناً بعد أن كان كتلة عاجية، فلا
     تصلح الأيقونة الداكنة فوقه (كانت #3F4839 على عاجيّ). صارت عاجية كاملة
     الوضوح — أنصع من أخواتها الخاملة (٠٫٨٢) فتُقرأ نشطةً بلا مؤشّر أصلاً. */
  .bn-item.active{ color:var(--p-ivory); }
  .bn-item.active svg{ filter:none; }
  /* ⚠️ P63 — التكبير الخفيف: لمّا خفّ المؤشّر انتقل عبء التمييز إلى الأيقونة.
     ١٫٠٨ حدٌّ مقصود — ما فوقه يخرج عن غَور المؤشّر فيبدو طافياً لا مستقرّاً.
     والانتقال بنفس المنحنى النابض للمؤشّر ليصلا معاً. */
  .bn-item svg{
    transition:transform .38s cubic-bezier(.34,1.56,.64,1);
    transform-origin:center;
  }
  .bn-item.active svg{ transform:scale(1.08); }
  @media (prefers-reduced-motion: reduce){
    .bn-item svg{ transition:none; }
    .bn-item.active svg{ transform:none; }
  }
  @keyframes bnCartPulse{ 0%{ transform:scale(1); } 40%{ transform:scale(1.22); } 100%{ transform:scale(1); } }
  .bn-item.bn-cart-pulse{ animation:bnCartPulse .26s ease; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P63 · ٢٠٢٦-٠٨-١٢ — المؤشّر: من الكتلة العاجية إلى غَورٍ زجاجيّ أعمق من الشريط.

     ⚠️ ما كان: كتلة عاجية صلبة (#fff ← #F2EEE4 ← #E8E3D5) بأربع طبقات ظلّ خارجي.
        تباينها أعلى من الشريط نفسه، فتسحب العين إليها قبل الأيقونة التي تدلّ
        عليها — والمؤشّر خادمٌ للأيقونة لا منافس لها.

     ⚠️ ما صار: زجاجة زيتونية أعمق من الشريط بدرجة، بحدّ عاجي شفيف أفتح من أعلى.
        تُقرأ **غَوراً في الزجاج** لا كتلةً فوقه — وهذا الفرق الذي طلبه المالك.

     ⚠️ والظلّ صار داخلياً كلّه: الكتلة الصلبة كانت تحتاج ظلّاً خارجياً لترتفع،
        والغَور يحتاج ظلّاً داخلياً لينغمس. وهذا يوافق قيد الشريط الموثّق: لا ظلّ
        خارجي داخل عنصرٍ يحمل backdrop-filter (ينزف خارج الحدود على Safari).

     ⚠️ وبلا backdrop-filter على المؤشّر: هو داخل عنصر مموَّه أصلاً، وتمويهٌ فوق
        تمويه كلفةُ إطارٍ موثّقة على الجوّال بلا مقابل بصري.

     ⚠️ ولمّا خفّ المؤشّر، صار تمييز الأيقونة النشطة عليها هي: تكبير خفيف
        (١٫٠٨) مع الانتقال من المفرّغة إلى الممتلئة. المؤشّر يدلّ، والأيقونة
        هي التي تُرى.
     ══════════════════════════════════════════════════════════════════════════ */
  .bn-indicator{
    position:absolute;
    /* ⚠️ 2026-07-26: لازم يطابق مقاس .bn-item بالضبط — الجافاسكريبت بيقرأ offsetWidth
       تبع العنصر ويمركز عليه، فأي فرق هون = مؤشر مو منمركز. */
    top:5px; bottom:5px;
    width:46px;
    border-radius:var(--r-full);
    background:linear-gradient(155deg, var(--p-2e3528-a55) 0%, var(--p-262c21-a62) 100%);
    border:1px solid var(--p-ivory-a16);
    border-top-color:var(--p-ivory-a30);
    box-shadow:
      inset 0 1px 0 var(--p-white-a14),
      inset 0 -3px 6px var(--p-black-a18);
    z-index:1;
    left:0;
    transform:translateX(0);
    transition:transform .38s cubic-bezier(.34,1.56,.64,1);
    will-change:transform;
  }
  .bottom-nav.dragging .bn-indicator{
    transition:none;
    box-shadow:
      inset 0 1px 0 var(--p-white-a20),
      inset 0 -3px 8px var(--p-black-a26);
  }
  .bn-badge{
    position:absolute;
    top:2px; inset-inline-end:2px;
    min-width:15px; height:15px;
    border-radius:var(--r-full);
    background:var(--brand);
    color:var(--p-ivory);
    font-family:var(--font-en);
    font-size:var(--t-micro);
    display:flex; align-items:center; justify-content:center;
    padding:0 var(--s-2);
    z-index:3;
  }
  .bn-badge[hidden]{ display:none; } /* إصلاح: display:flex أعلاه كان يبطل خاصية hidden فيضل العداد ظاهر بـ"0" دايماً */

  /* ============ حركة "سحب المنتج للسلة" — نسخة مصغّرة من صورة المنتج تتطاير لأيقونة السلة ============ */
  .fly-to-cart-img{
    position:fixed;
    z-index:200;
    border-radius:var(--r-md);
    object-fit:cover;
    pointer-events:none;
    box-shadow:0 6px 20px var(--p-black-a30);
    transition:transform .62s cubic-bezier(.5,-0.2,.7,.4), opacity .62s ease .18s;
    will-change:transform, opacity;
  }

  /* مساحة أسفل الصفحة حتى لا يغطي الشريط السفلي الفوتر */
  /* ⚠️ P193 — الحاجز يرث قاع الفوتر (التعليل الكامل عند --footer-end). */
  .bottom-nav-spacer{ height:96px; background:var(--footer-end); }

  /* =====================================================================
     Responsive / Media Queries
     قاعدة ثابتة تُطبّق على كل قسم بالمشروع من هلأ وطالع:
     - الأساس (بدون media query) = تصميم الموبايل (Mobile First).
     - 768px فما فوق = تابلت / سطح مكتب صغير.
     - 1200px فما فوق = سطح مكتب كبير.
     - أقل من 380px = هواتف صغيرة جداً (تعديلات دقيقة إضافية).
     ===================================================================== */

  /* ---- تابلت وسطح مكتب (768px+) ---- */
  @media (min-width: 768px){
    .crystal-content{ padding:var(--s-10); gap:var(--s-7); }
    .crystal-content h1{ font-size:clamp(32px, 3.2vw, 46px); max-width:20ch; }
    .crystal-content .eyebrow{ font-size:var(--t-sm); }
    .btn{ padding:var(--s-5) var(--s-8); font-size:var(--t-base); }
    .hero-caption{ inset-inline-start:32px; bottom:40px; font-size:var(--t-sm); }
    .next-section{ padding:var(--s-13) var(--s-9); }
    .next-section .inner{ max-width:620px; }
    .next-section h2{ font-size:var(--t-2xl); }
    .next-section p{ font-size:var(--t-base); }

    /* ⚠️ P57 — الفراغ صار موزّعاً بين خارج الخطّ الفاصل وداخله (٤٠+٤٠) بدل
       أن يكون كلّه خارجه، فالإيقاع العمودي كما كان (٨٠ فوق الترويسة). */
    .occasions{ padding:40px 0 28px; }
    .occasions .head{ padding:0 var(--s-9); margin-bottom:var(--s-7); }
    .occasions h2{ font-size:var(--t-xl); }
    .occasions .sub{ font-size:var(--t-sm); }
    .occasions-scroll{ gap:var(--s-7); padding:var(--s-2) var(--s-9) var(--s-5); scroll-padding-inline:var(--s-9); }
    .occasion-item{ width:116px; gap:var(--s-3); padding:var(--s-6) var(--s-4) var(--s-6); }
    .occasion-circle{ width:46px; height:46px; }
    .occasion-circle svg{ width:22px; height:22px; }
    .occasion-label{ font-size:var(--t-sm); }
    .occasion-item::before{ font-size:var(--t-micro); }

    .categories-row .sub{ padding:0 var(--s-9); }
    .categories-scroll{ gap:var(--s-5); padding:var(--s-2) var(--s-9) var(--s-3); scroll-padding-inline:var(--s-9); }

    .new-arrivals .head{ padding:0 var(--s-9); }
    .new-arrivals h2{ font-size:var(--t-xl); }
    .products-scroll{ gap:var(--s-6); padding:var(--s-2) var(--s-9) var(--s-8); margin-bottom:-34px; scroll-padding-inline:var(--s-9); }
    /* ⚠️ P109 — العرض انتقل إلى --card-w في :root */
    .product-name{ font-size:var(--t-base); }
    .product-price{ font-size:var(--t-sm); }

    .rail-head{ padding:0 var(--s-9); }
    .rail-head h2{ font-size:var(--t-xl); }

    .luxury-gifts{ padding:0 var(--s-9) var(--s-12); }
    .luxury-grid{ grid-template-columns:1fr 1fr; }

    .hospitality{ padding:0 var(--s-9) var(--s-12); }
    .hospitality-banner{ min-height:400px; }

    .studios{ padding:0 var(--s-9) var(--s-12); grid-template-columns:1fr 1fr; }
    .studios{ grid-template-columns:1fr 1fr; }

    /* ⚠️ P66 — نسبة البانر نفسها وعمود الصفحة نفسه (١١٢٠) كما في P56 و P62. */
    .our-story-banner{ aspect-ratio:16/6; max-width:1120px; margin-inline:auto; }

    .overlay-glass{ inset-inline:26px; bottom:26px; height:40%; padding:var(--s-6); gap:var(--s-3); }
    .overlay-glass h3, .overlay-glass h2{ font-size:var(--t-lg); }
    .overlay-glass p{ font-size:var(--t-sm); -webkit-line-clamp:2; }
    .overlay-glass .og-btn{ font-size:var(--t-sm); padding:var(--s-3) var(--s-6); }

    .reels-scroll{ gap:var(--s-6); padding:4px 40px 44px; margin-bottom:-44px; scroll-padding-inline:var(--s-9); }
    .reel-card{ width:180px; }

    .explore-more-section .rail-head{ padding:0 var(--s-9); }
    .explore-scroll{ gap:var(--s-6); padding:4px 40px 44px; margin-bottom:-44px; scroll-padding-inline:var(--s-9); }
    .explore-card{ width:260px; }

    .instagram-section{ padding:0 var(--s-9) var(--s-12); }
    .customer-gallery-section{ padding:0 0 var(--s-11); }
    .customer-gallery-section h2, .customer-gallery-section .cg-sub{ padding:0 var(--s-9); }
    .cg-scroll{ padding:36px 38vw; gap:var(--s-6); }
    .cg-item{ width:180px; height:180px; border-radius:var(--r-lg); }
    .ig-grid{ grid-template-columns:repeat(6,1fr); max-width:1200px; margin:0 auto; }

    .site-footer{ padding:64px 40px 32px; }
    .footer-top{ display:flex; justify-content:space-between; gap:var(--s-9); max-width:1200px; margin:0 auto; width:100%; }
    .footer-cols{ grid-template-columns:repeat(3,1fr); flex:1; max-width:640px; }
    .footer-bottom{ max-width:1200px; margin:0 auto; width:100%; }
  }

  /* ---- سطح مكتب كبير (1200px+) ---- */
  @media (min-width: 1200px){
    .crystal-content h1{ font-size:44px; max-width:22ch; }
    .next-section .inner{ max-width:680px; }
    .next-section h2{ font-size:var(--t-2xl); }

    .occasions-scroll{
      max-width:1200px; margin:0 auto;
      justify-content:flex-start;
    }
    .occasions .head{ max-width:1200px; margin-inline:auto; margin-bottom:var(--s-7); }

    .categories-scroll{ max-width:1200px; margin:0 auto; justify-content:flex-start; }
    .categories-row .sub{ max-width:1200px; margin-inline:auto; }

    .products-scroll{ max-width:1200px; margin:0 auto; }
    .new-arrivals .head{ max-width:1200px; margin-inline:auto; }
    /* ⚠️ P109 — العرض انتقل إلى --card-w في :root */

    /* نفس التوسيط المطبّق على "وصل حديثاً" لازم ينطبق على أي قسم شرائح تاني —
       "الأكثر مبيعاً" (rail-section) و"شاهد المنتج" (reels-section) كانوا ناقصين هالقاعدة،
       فكانوا يبينوا ملزّقين يمين الشاشة مع فراغ أبيض ضخم يسار على الشاشات العريضة */
    .rail-section .rail-head{ max-width:1200px; margin-inline:auto; }
    .rail-section .products-scroll{ max-width:1200px; margin:0 auto; }
    .reels-section .rail-head{ max-width:1200px; margin-inline:auto; }
    .reels-scroll{ max-width:1200px; margin:0 auto; }
    .explore-more-section .rail-head{ max-width:1200px; margin-inline:auto; }
    .explore-scroll{ max-width:1200px; margin:0 auto; }
  }

  /* ---- هواتف صغيرة جداً (أقل من 380px) ---- */
  @media (max-width: 380px){
    .crystal-content{ padding:var(--s-7); gap:var(--s-5); }
    .crystal-content h1{ font-size:var(--t-xl); max-width:16ch; }
    .btn{ padding:var(--s-4) var(--s-6); font-size:var(--t-sm); }
    .logo-crystal{ width:46px; height:46px; }
    .logo-crystal svg{ width:21px; }
    .next-section{ padding:var(--s-11) var(--s-5); }

    .occasion-item{ width:84px; padding:var(--s-4) var(--s-3) var(--s-4); }
    .occasion-circle{ width:34px; height:34px; }
    .occasion-circle svg{ width:16px; height:16px; }
    .occasion-label{ font-size:var(--t-xs); }

    /* ⚠️ P109 — العرض انتقل إلى --card-w في :root */
    .product-name{ font-size:var(--t-sm); }
  }

  /* ---- احترام تفضيل تقليل الحركة ---- */
  @media (prefers-reduced-motion: reduce){
    html{ scroll-behavior:auto; }
    .crystal, .logo-crystal, .btn{ transition:none !important; }
    .fly-to-cart-img{ transition:none !important; }
    .bn-item.bn-cart-pulse{ animation:none !important; }
  }

  /* إصلاح شامل نهائي — أي صنف فوق عنده display صريح، ولازم يحترم خاصية hidden لو انطبّقت عليه مستقبلاً */
  .add-btn[hidden],
  .bn-item[hidden],
  .bottom-nav[hidden],
  .box-mode-toggle[hidden],
  .box-preview[hidden],
  .box-preview-body[hidden],
  .cart-datetime-row[hidden],
  .cart-header[hidden],
  .cart-item[hidden],
  .cart-item-qty-btn[hidden],
  .cart-item-qty-row[hidden],
  .cart-item-remove[hidden],
  .cart-items[hidden],
  .cart-radio-row[hidden],
  .cart-success-icon[hidden],
  .cart-summary-row[hidden],
  .cart-toggle-group[hidden],
  .categories-scroll[hidden],
  .category-box[hidden],
  .category-item[hidden],
  .cb-cake[hidden],
  .cb-nav-row[hidden],
  .cb-option-chip[hidden],
  .cb-options-grid[hidden],
  .cb-preview-zone[hidden],
  .cb-steps-indicator[hidden],
  .cb-suggest-chips[hidden],
  .cb-suggest-tabs[hidden],
  .cb-summary-row[hidden],
  .cb-swatch-grid[hidden],
  .cb-toppings[hidden],
  .composer-tabs[hidden],
  .crystal[hidden],
  .crystal-content[hidden],
  .explore-scroll[hidden],
  .feature-row-text[hidden],
  .footer-bottom[hidden],
  .footer-cols[hidden],
  .build-stamp[hidden],
  .footer-social[hidden],
  .footer-social a[hidden],
  .gift-card-header[hidden],
  .gift-card-preview[hidden],
  .gift-item-picker[hidden],
  .ig-scroll[hidden],
  .logo-crystal[hidden],
  .luxury-grid[hidden],
  .pd-spec-row[hidden],
  .more-row[hidden],
  .more-row-label[hidden],
  .next-section[hidden],
  .occasion-circle[hidden],
  .occasion-item[hidden],
  .occasions-scroll[hidden],
  .overlay-glass[hidden],
  .pc-actions[hidden],
  .pc-inner[hidden],
  .pd-actions[hidden],
  .pd-add-row[hidden],
  .pd-dots[hidden],
  .pd-gallery[hidden],
  .pd-go-cart-btn[hidden],
  .pd-handle-wrap[hidden],
  .pd-save-btn[hidden],
  .pd-sheet[hidden],
  .product-info[hidden],
  .product-meta[hidden],
  .products-scroll[hidden],
  .rail-head[hidden],
  .reel-card[hidden],
  .reels-scroll[hidden],
  .save-btn[hidden],
  .search-content[hidden],
  .sheet-close-btn[hidden],
  .sheet-title-row[hidden],
  .site-footer[hidden],
  .studio-upload[hidden],
  .studios[hidden],
  .suggest-cats[hidden]{ display:none; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٢٧ — كتلة تصحيح P9. ثلاث عائلات، كلها من تدقيق فعلي لا من وثيقة.

     (١) التباعد للاتيني فقط. خمسة عناصر كانت تحمل letter-spacing موجباً ونصها
         عربي بوضع العربية: العربي خط متّصل، والتباعد الموجب يفكّ الحروف فتُقرأ
         كخط ثانٍ — وهذا أحد الأسباب الثلاثة الموثّقة لوهم "تعدّد الخطوط".
         التباعد رُفع من القاعدة الأصلية، ويرجع هون بوضع الإنجليزية فقط.

     (٢) وسم الطبقة ثنائي اللغة: كان عليه lat دائماً، يعني نص عربي على خط
         بصفر محرف عربي + direction:ltr. هلق lat انشالت، والزينة اللاتينية
         بترجع بوضع الإنجليزية.

     (٣) حجم خط الحقول ١٦px على اللمس. ستة حقول كانت بين 13 و14.5px، وiOS
         يكبّر الصفحة تلقائياً عند التركيز على أي حقل أصغر من 16px — والتكبير
         ما يرجع لحاله، فالزائر يعلق بصفحة مكبّرة.
         ⚠️ داخل حارس اللمس بقصد: مقاس الكمبيوتر ما يتغيّر إطلاقاً.
     ══════════════════════════════════════════════════════════════════════════ */
  body.lang-en .recommended-card-tag{ letter-spacing:.04em; }
  body.lang-en .overlay-glass .og-tag{ letter-spacing:.08em; }
  body.lang-en .final-cta button{ letter-spacing:.02em; }
  body.lang-en .footer-newsletter-row button{ letter-spacing:.04em; }
  body.lang-en .crystal-slide-panel[data-panel="2"] h1{ letter-spacing:.015em; }
  body.lang-en .overlay-glass .og-tag:not(.lat){
    font-family:var(--font-en); direction:ltr; unicode-bidi:isolate;
  }
  @media (hover: none) and (pointer: coarse){
    .browse-search-row input,
    .studio-textarea,
    .cart-date-input, .cart-time-input,
    .search-content input,
    .cb-write-input,
    .footer-newsletter-row input{ font-size:var(--t-base); }
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٣٠ — هوامش الأوراق السفلية. ثلاث علل مقيسة من الأنماط نفسها:

     (١) حشوة أفقية مزدوجة على عنوان الورقة. منطقة السحب عليها 20px جانبية،
         وعنوان الورقة عليه 20px كمان — فالعنوان وزر الإغلاق بعيدين 40px عن
         الحافة، بينما كل شي تحتهم (الكرت · القائمة · زر واتساب) على 20px.
         العنوان يبيّن مزحلقاً للداخل. ١٨ ورقة من ٢٣ متأثرة.

     (٢) لا منطقة آمنة أسفل الورقة. الحشوة السفلية 28px ثابتة، وشريط الإيماءة
         بالآيفون ياخد ~34px — فآخر سطر (ملاحظة التتبّع) يقع تحته. النمط
         مستخدم بخمسة مواضع تانية بالملف، والأوراق انفلتت منه.

     (٣) زر الإغلاق 30×30 والحد الأدنى للمس 44×44. كبّرنا **مساحة اللمس** عبر
         طبقة شفافة، ومقاس الرمز ما تغيّر ولا الصف انزاح.
     ══════════════════════════════════════════════════════════════════════════ */
  .pd-scroll .more-sheet-title{ padding-inline:0; }
  .pd-scroll{ padding-bottom:calc(28px + env(safe-area-inset-bottom)); }
  .sheet-close-btn{ position:relative; }
  .sheet-close-btn::after{ content:''; position:absolute; inset:0; }  /* ⚠️ P103 — كانت -7px لتوسيع رقعة زرٍّ شكلُه ٣٢. الشكل صار ٤٤ فالتوسيع صار تداخلاً مع العنوان. */
  @media (min-width:768px){
    .pd-scroll{ padding-bottom:calc(32px + env(safe-area-inset-bottom)); }
  }

  /* أفعال الطلب — كل كرت يحمل رقمه بنفسه، لا رقم أحدث طلب */
  /* ⚠️ ٢٠٢٦-٠٧-٣٠ — أول محاولة عملت الأزرار 44px **بصرياً**، فبانت كتلاً فارغة
     جوّا الكرت. الصح: الشكل ٣٤px والمساحة الملموسة 44px عبر طبقة شفافة —
     نفس حلّ زر الإغلاق. الحد الأدنى للمس محفوظ والكرت رجع هادئاً. */
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P123 — مسار الطلب وأصنافه في ورقة «طلباتك».

     ⚠️ ولماذا os-track لا os-steps: الصنف الأخير مستعملٌ أصلاً لقائمة «رحلة
        الطلب» التفسيرية باتجاهٍ عمودي، فورث شريطي منها flex-direction:column
        ولم أُبطلها — فخرج المسار مكدّساً رأسياً بخطوطٍ في غير مواضعها. والعلاج
        اسمٌ مستقلّ لا إبطالُ خاصّيةٍ فوق أخرى: التصادم يعود مع أوّل تعديلٍ على
        القائمة الأخرى، والاسم المستقلّ لا يعود.

     ⚠️ والخطّ الواصل خلف النقاط لا بينها: يُرسم مرّةً على الحاوي بين مركزَي
        أوّل نقطةٍ وآخرها، فلا يبرز من طرفٍ ولا ينكسر عند التفاف نصّ.
     ══════════════════════════════════════════════════════════════════════════════ */
  .os-track{
    position:relative;
    display:flex; align-items:flex-start; gap:0;
    margin:var(--s-5) 0 var(--s-4);
    padding:0;
    list-style:none;
  }
  .os-track::before{
    content:''; position:absolute; top:9px; height:2px;
    inset-inline-start:12.5%; inset-inline-end:12.5%;
    background:var(--p-brand-a18); border-radius:2px;
  }
  .os-track-fill{
    content:''; position:absolute; top:9px; height:2px;
    inset-inline-start:12.5%; width:0;
    background:var(--brand); border-radius:2px;
    transition:width .4s var(--ease-out, ease);
  }
  .os-track-step{
    flex:1 1 0; min-width:0; position:relative; z-index:1;
    display:flex; flex-direction:column; align-items:center; gap:var(--s-2);
    text-align:center;
  }
  .os-track-dot{
    width:20px; height:20px; border-radius:50%; flex:0 0 auto;
    background:var(--ivory-card-bg);
    border:2px solid var(--p-brand-a28);
    display:flex; align-items:center; justify-content:center;
    box-sizing:border-box;
  }
  .os-track-dot svg{ width:11px; height:11px; opacity:0; }
  .os-track-label{ font-size:var(--t-micro); line-height:1.35; opacity:.45; }

  .os-track-step.done .os-track-dot{ background:var(--brand); border-color:var(--brand); }
  .os-track-step.done .os-track-dot svg{ opacity:1; color:var(--ivory-card-bg); }
  .os-track-step.done .os-track-label{ opacity:.65; }
  .os-track-step.now .os-track-dot{
    background:var(--brand); border-color:var(--brand);
    box-shadow:0 0 0 5px var(--p-brand-a16);
  }
  .os-track-step.now .os-track-label{ opacity:1; font-weight:var(--w-bold); color:var(--brand); }

  /* الأصناف: صورةٌ صغيرة تُعرّف المنتج أسرع من اسمه */
  .os-items{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:var(--s-3); }
  .os-items li{ display:flex; align-items:center; gap:var(--s-4); }
  .os-item-img{
    width:44px; height:44px; flex:0 0 auto;
    border-radius:var(--r-sm); object-fit:cover;
    background:var(--ivory-card-bg);
    border:1px solid var(--glass-border-on-light);
  }
  .os-item-name{ font-size:var(--t-sm); font-weight:var(--w-bold); flex:1 1 auto; min-width:0; line-height:1.4; }
  .os-item-qty{ font-size:var(--t-sm); opacity:.55; flex:0 0 auto; }
  .os-line-sub{ opacity:.5; }

  .os-card-acts{
    display:flex; flex-wrap:wrap; gap:var(--s-3); margin-top:var(--s-2);
    padding-top:var(--s-3); border-top:1px solid var(--p-brand-a10);
  }
  .os-act{
    position:relative;
    display:inline-flex; align-items:center; justify-content:center;
    height:34px; padding:0 var(--s-4); border-radius:var(--r-full);
    border:1px solid var(--p-brand-a20);
    font-size:var(--t-xs); font-weight:var(--w-bold); text-decoration:none;
    color:var(--brand); background:transparent;
  }
  .os-act::after{ content:''; position:absolute; inset:-5px; }
  .os-act-locked{
    border-style:dashed; opacity:.42; pointer-events:none;
  }
  .os-window-note{
    font-size:var(--t-xs); opacity:.5; line-height:1.7; margin-top:var(--s-1);
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٣٠ (مراجعة شاملة) — ثلاث عائلات، كلها مقيسة لا مُقدَّرة:

     (١) العربي بأحجام لا تُقرأ. اللاتيني يتحمّل ٩px لأن حروفه مصمتة؛ العربي
         عليه نقاط وهمزات وتشكيل، وتحت ١٠.٥px تلتحم وتضيع. أربعة مواضع كان
         نصها عربياً بين ٨.٥ و٩.٥ — وأسوأها كلمة "هدايا" بـ٨.٥px وشفافية ٤٢٪.

     (٢) أهداف لمس أصغر من ٤٤. أزرار الكمية كانت **١٤×١٤** — ثلث الحد الأدنى،
         وهي أكثر زر يُضغط بالسلة. ونقاط الهيرو ٦px وهي قابلة للنقر فعلاً.
         الشكل يكبر قليلاً حيث يلزم، والمساحة الملموسة تكتمل بطبقة شفافة.

     (٣) الصور: أربع صور منتجات بلا تحميل كسول بينما أخواتها عليها.
     ══════════════════════════════════════════════════════════════════════════ */
  .occasion-item:not(.category-item)::before{ font-size:var(--t-xs); opacity:.5; }
  /* ⚠️ داخل حارس الجوّال بقصد: قاعدة ٧٦٨px ترفعه لـ11.5px، ولو حطّينا 10.5
     مطلقة كانت **تصغّر** الكمبيوتر بدل ما تكبّر الجوّال — لأن استعلام الوسائط
     ما يزيد الأولوية، والقاعدة الأخيرة تغلب. */
  @media (max-width:767px){ .pt-sub{ font-size:var(--t-xs); } }
  .recommended-card-tag{ font-size:var(--t-xs); }
  .overlay-glass .og-tag:not(.lat){ font-size:var(--t-xs); }

  .qty-stepper{ gap:var(--s-1); padding:0 var(--s-2); }   /* ⚠️ P111 — الارتفاع من --icon-32، فالحشو الرأسيّ يزيده بلا داعٍ */
  .qty-stepper button{
    /* ⚠️ P110 — كانت ٢٠px حرفيّة: مقاسٌ خارج سلّم الأيقونات، فبدت الإشارتان
       أصغر من كلّ ما حولهما. صارتا على درجة السلّم نفسها. */
    position:relative; width:var(--icon-24); height:var(--icon-24); font-size:var(--t-md);
  }
  .qty-stepper button::after{ content:''; position:absolute; inset:-12px; }

  .hero-dot, .pd-dots span{ position:relative; }
  .hero-dot::after, .pd-dots span::after{ content:''; position:absolute; inset:-19px; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٣١ — تنفّس كرت الطلب.

     المشكلة مو ضيق الهوامش، هي **اختلال الوزن**: بعد انتهاء مهلة التعديل يبقى
     زر واحد يمين، وعن يساره فراغ بعرض الكرت كامل، وتحته سطر تفسير طويل ملزوق
     فيه. فالكرت يقرأ كأنه ناقص لا كأنه مكتمل.

     الحل: سطر التفسير ينتقل **جوّا صف الأفعال** ويملأ الفراغ عن يسار الزر.
     الصفّ يصير متوازناً: تفسير يسار · فعل يمين. وعلى الشاشات الضيقة ينزل تحته
     بسطر مستقل تلقائياً بلا قاعدة إضافية.

     ومعها زيادة تنفّس محسوبة: حشوة الكرت ١٤/١٦ ← ١٦/١٨ · المسافة بين الكروت
     ١٠ ← ١٢ · وفوق الفاصل ١٢ ← ١٦.
     ══════════════════════════════════════════════════════════════════════════ */
  .os-list{ gap:var(--s-4); }
  .os-card{ padding:var(--s-5) var(--s-6); }
  .os-card-acts{
    margin-top:var(--s-3); padding-top:var(--s-4);
    align-items:center; justify-content:flex-end;
  }
  .os-card-acts .os-window-note{
    flex:1 1 150px; min-width:0; margin-top:0; text-align:right;
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ ٢٠٢٦-٠٧-٣١ — علّتان بورقة الطلبات:

     (١) **الحشوة الأفقية ما كانت موجودة أصلاً.** قاعدة `.pd-scroll{padding:0 20px}`
         مو عامة — هي مقصورة على قائمة أوراق مذكورة بالاسم، و#orderStatusSheet
         و#bulkSheet **مو منها**. فمحتواهما ملتصق بالحافة من البداية.
         وأسوأ: بمراجعة ٣٠ يوليو شلت الحشوة الخاصة بعنوان الورقة ظنّاً أن
         `.pd-scroll` تعطي ٢٠px دائماً — فبهاتين الورقتين صار العنوان ملتصقاً
         بعد ما كان مزحلقاً. خطأ مني، وهذا إصلاحه: حشوة أفقية **أساسية** لكل
         أوراق التمرير، والقواعد المخصّصة تبقى تغلبها حيث يلزم.
         ⚠️ #pdSheet مستثناة بقصد: معرض صورها ملء العرض، وأبناؤها لهم حشوتهم.

     (٢) **الطلبات كانت مفتوحة كلها دائماً.** بعشرة طلبات تصير الورقة جداراً.
         صارت مطويّة: سطر واحد لكل طلب (الرقم · التاريخ · الحالة)، يُفتح
         بالضغط ويطوي غيره. أقل ازدحام، وكل التفاصيل على بُعد ضغطة.
     ══════════════════════════════════════════════════════════════════════════ */
  .pd-scroll{ padding-left:var(--s-6); padding-right:var(--s-6); }
  #pdSheet .pd-scroll{ padding-left:0; padding-right:0; }

  .os-card{ padding:0; overflow:hidden; }
  .os-head{
    display:flex; align-items:center; gap:var(--s-4); width:100%;
    min-height:52px; padding:var(--s-4) var(--s-5); background:none; border:none;
    font-family:inherit; color:inherit; cursor:pointer; text-align:right;
  }
  .os-head .os-num{ font-size:var(--t-sm); font-weight:var(--w-bold); }
  .os-head .os-date{ font-size:var(--t-xs); opacity:.5; }
  .os-head-spacer{ flex:1 1 auto; }
  .os-chev{
    width:16px; height:16px; flex:0 0 auto; opacity:.45;
    transition:transform .22s ease;
  }
  .os-card.open .os-chev{ transform:rotate(180deg); }
  .os-body{ padding:0 var(--s-5) var(--s-5); display:flex; flex-direction:column; gap:var(--s-3); }
  .os-body[hidden]{ display:none; }
  .os-card-acts{ margin-top:var(--s-2); padding-top:var(--s-4); }
  /* ══════════════════════════════════════════════════════════════════════════════
     ⚠️ P79 · ٢٠٢٦-٠٨-١٣ — احتياطي الزجاج للمتصفحات التي لا تدعم backdrop-filter.

     ⚠️ رصد المالك: النسخة مستقرّة على الكمبيوتر و iPhone، وتظهر مكسورة على
        أجهزة هواوي وبعض أندرويد — الشريط السفلي يُرى ما خلفه من خلاله، والألواح
        تبدو مغسولة والنصّ فوقها بلا أرضية.

     ⚠️ السبب: الملف يستعمل backdrop-filter في **واحدٍ وخمسين** موضعاً بلا
        @supports واحد. وكل سطح زجاجي عندنا مبنيّ على معادلة واحدة: خلفية شفيفة
        جداً + تمويه لما خلفها. فإن سقط التمويه بقيت الشفافية وحدها — فيصير
        الزجاج زجاجاً حقيقياً لا مصنفراً، ويُقرأ ما خلفه بدل ما فوقه.
        ومتصفح هواوي وWebView القديم في أندرويد لا يدعمانه.

     ⚠️ ولماذا لم يظهر على iPhone: Safari يدعمه بالبادئة ‎-webkit-‎ منذ سنوات،
        والملف يكتب البادئة دائماً — فبقيت العلّة محصورة في عائلة أندرويد.

     ⚠️ العلاج بقاعدة واحدة سالبة الشرط لا بتعديل واحدٍ وخمسين موضعاً: حين يغيب
        الدعم تُرفع عتامة الأسطح وحدها إلى ما يكفي لقراءة ما فوقها. والأسطح
        المعالَجة هي التي يعلوها نصّ أو أيقونة — لا كل ما فيه تمويه.

     ⚠️ والقيم ليست تخميناً: كلٌّ منها عتامة الأصل نفسه مرفوعة إلى حدّ يعطي
        النصّ العاجيّ (أو الحبر الداكن) تباينه المطلوب فوق أسوأ خلفية ممكنة —
        صورة بيضاء أو نصّ داكن مزدحم.
     ══════════════════════════════════════════════════════════════════════════════ */
  @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){
    .bottom-nav{ background:var(--p-465040-a96) !important; }
    .pd-sheet{ background:var(--p-faf9f6-a985) !important; }
    .overlay-glass{ background:var(--p-olive-ink-a72) !important; }
    .discover-banner{ background:var(--p-brand-a97) !important; }
    .occ-switch-btn{ background:var(--p-f4f2ec) !important; }
    .reels-feed-chips{ background:var(--p-olive-black-a86) !important; }
    /* الشارة والرقاقة فوق الصور: تُقرأ فوق أي صورة حين يغيب التمويه */
    .occ-card-chip{ background:var(--p-ivory-a98) !important; }
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P137 · ٢٠٢٦-٠٩-٢٠ — الخطوة الأولى وحدها: السلايدر الجديد. ولا شيء غيره
     تغيّر في الصفحة؛ باقي الأقسام كما هي على الموقع حرفاً.

     · ارتفاعه ٧٠٪ من الشاشة على الهاتف (كان ملء الشاشة).
     · الشرائح تُقرأ من صفوف hero_* التي لها link_target وصورة (١ إلى ١٠ بترتيب
       sort_order): title_ar العنوان · body_ar الجملة تحت الزرّ · link_target
       القسم أو المناسبة. وبلا صفّ مربوط: ثلاث شرائح افتراضية من صور الكتالوج
       (فطور · ورد · حلويات باردة) وزرّ كلٍّ يفتح قسمه.
     · الانتقال تبادلٌ ناعم: الخارجة تغبش وتشفّ وتنزاح يساراً، والداخلة تصفو
       وتظهر من اليمين. ٣٫٥ ثانية في الدورة الأولى ثم ٥ ثوانٍ.
     · الكريستالة باقية كما هي — هي التي تحمل عنوان الشريحة وزرّها، وتحوّلها
       إلى خانة بحث عند التمرير لم يُمسّ.
     · الهيرو القديم لا يُحذف: [data-hv-off] يخفيه، والتراجع حذف السمة.
     ══════════════════════════════════════════════════════════════════════════ */
  [data-hv-off]{ display:none !important; }

  .hv-hero{ position:relative; height:70vh; height:70svh; min-height:420px; max-height:760px;
            overflow:hidden; background:var(--p-e9e5da); touch-action:pan-y; }
  .hv-slide{ position:absolute; inset:0; opacity:0; visibility:hidden;
             transition:opacity 1500ms cubic-bezier(.4,0,.2,1), visibility 0s linear 1500ms; }
  .hv-slide.is-on{ opacity:1; visibility:visible; z-index:2;
                   transition:opacity 1500ms cubic-bezier(.4,0,.2,1), visibility 0s; }
  .hv-slide.is-off{ z-index:1; }
  .hv-media{ position:absolute; inset:0; overflow:hidden; }
  .hv-media img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; display:block;
                 transform:translate3d(6%,0,0) scale(1.06); filter:blur(14px);
                 transition:transform 1600ms cubic-bezier(.22,.61,.36,1), filter 1500ms ease; }
  .hv-slide.is-on .hv-media img{ transform:translate3d(0,0,0) scale(1.02); filter:blur(0); }
  .hv-slide.is-off .hv-media img{ transform:translate3d(-6%,0,0) scale(1.06); filter:blur(14px); }
  .hv-slide.from-left .hv-media img{ transform:translate3d(-6%,0,0) scale(1.06); }
  .hv-slide.is-off.to-right .hv-media img{ transform:translate3d(6%,0,0) scale(1.06); }
  .hv-shade{ position:absolute; inset:0; pointer-events:none;
             background:radial-gradient(120% 80% at 50% 45%, var(--p-olive-smoke-a32) 0%, var(--p-olive-smoke-a10) 55%, var(--p-olive-smoke-a28) 100%); }
  /* ⚠️ P138 — الشريحة الأولى للكريستالة وحدها (قرار المالك)، وما بعدها لوحُ نصٍّ
     حرّ أسفل اليمين بزرّ عادي — نفس الشكل الذي اعتمده المالك بلقطته. */
  .hv-copy{ position:absolute; z-index:3; inset-inline-end:0; bottom:0;
            width:min(80%, 460px); padding:0 22px 58px; color:var(--p-ivory-soft); text-align:start;
            opacity:0; transform:translate3d(0,10px,0);
            transition:opacity 700ms ease 520ms, transform 900ms cubic-bezier(.22,.61,.36,1) 520ms; }
  .hv-slide.is-on .hv-copy{ opacity:1; transform:none; }
  .hv-eyebrow{ display:block; font-family:var(--font-en); font-size:10px; letter-spacing:.26em;
               opacity:.82; direction:ltr; text-align:right; margin-bottom:10px; }
  .hv-slide-title{ margin:0 0 8px; font-size:22px; line-height:1.5; font-weight:var(--w-bold); text-wrap:balance; }
  .hv-slide-cta{ margin:0 0 18px; font-size:12.5px; line-height:1.8; opacity:.86; max-width:30ch; }
  .hv-btn{ display:inline-flex; align-items:center; gap:9px; height:44px; padding:0 22px;
           border-radius:var(--r-full); cursor:pointer; font-family:inherit; font-size:14px; font-weight:var(--w-bold);
           color:var(--p-ink); background:var(--p-ivory-soft); border:1px solid var(--p-ivory-soft-a90);
           box-shadow:0 10px 26px var(--p-black-a18); transition:transform .25s ease; }
  .hv-btn svg{ width:15px; height:15px; }
  .hv-btn:active{ transform:scale(.98); }
  .hv-shade-side{ position:absolute; inset:0; pointer-events:none; opacity:0; transition:opacity 900ms ease;
                  background:linear-gradient(290deg, var(--p-olive-shade-a62) 0%, var(--p-olive-shade-a28) 40%, var(--p-olive-shade-a0) 72%); }
  .hv-slide.has-copy .hv-shade-side{ opacity:1; }

  .hv-dots{ position:absolute; z-index:4; bottom:22px; inset-inline:0; display:flex; justify-content:center; gap:6px; }
  .hv-dot{ width:5px; height:5px; border-radius:5px; background:var(--p-ivory-soft-a45); border:0; padding:0;
           cursor:pointer; transition:width .6s ease, background .6s ease; }
  .hv-dot.on{ width:20px; background:var(--p-ivory-soft); }
  .hv-hero[data-count="1"] .hv-dots{ display:none; }
  /* الكريستالة تحمل كلام الشريحة: عنوان أهدأ وجملة قصيرة تحت الزرّ */
  #crystalHero h1{ font-size:clamp(20px,3.4vw,32px); font-weight:var(--w-bold); max-width:20ch; }
  .crystal-cta{ margin:0; font-size:12px; line-height:1.6; color:var(--p-ivory-a80); max-width:34ch; }
  /* ⚠️ P139 — الصندوق أقصر، فالحشوة والفجوات تضيق معه لئلّا يُقصّ سطر. */
  #crystal .crystal-content, #crystal .crystal-slide-panel{ gap:var(--s-3); padding:var(--s-5) var(--s-6); }
  #crystalHero h1{ font-size:clamp(19px,3vw,28px); line-height:1.4; }
  #crystal .cta-row .btn{ padding:var(--s-3) var(--s-6); }

  @media (min-width:768px){
    .hv-hero{ height:min(76vh, 740px); }
    .hv-dots{ bottom:30px; }
    .hv-copy{ padding:0 64px 70px; width:min(48%, 520px); }
    .hv-slide-title{ font-size:30px; }
    .hv-slide-cta{ font-size:13.5px; }
  }
  @media (prefers-reduced-motion: reduce){
    .hv-slide, .hv-slide.is-on, .hv-media img, .hv-copy, .hv-shade-side{ transition:none !important; }
    .hv-media img{ filter:none !important; transform:none !important; }
  }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P142 · ٢٠٢٦-٠٩-٢٠ — الخطوة الثانية: أبواب ثلاثة تحت «لا تعرف ماذا تختار؟»،
     وكروت أصغر، وسطرٌ خفيف للأسئلة. (P141 كانت أوّل شكلٍ لها، وهذه تصحيحُ المالك.)

     · الشريط بتباين الشريط السفلي نفسه: زجاج زيتوني وحبر عاجي، والباب المختار
       غَورٌ داكن لا كتلة فاتحة — مصدر الشكل واحد، فلا لغتان في صفحة واحدة.
     · أوسع: الشريط يأخذ عرض العمود، والأبواب الثلاثة تتقاسمه بالتساوي.
     · الزرّ الدوّار القديم لم يُحذف: [data-ax-off] يخفيه، والتراجع حذف السمة.
     · الكروت ١٣٢px (كانت ١٧٤ ثم ١٤٨).
     · سطر الأسئلة: الزرّ نفسه بلا صندوق — سطرٌ تحته خطّ، كما في صورة المالك.
     ══════════════════════════════════════════════════════════════════════════ */
  [data-ax-off]{ display:none !important; }

  .ax-tabs{
    display:flex; gap:0; align-items:center;
    width:calc(100% - 28px); max-width:560px; margin:var(--s-6) auto 0;
    padding:var(--s-2) var(--s-3); border-radius:var(--r-full);
    color:var(--p-ivory);
    background:var(--p-brand-a82);
    border:1px solid var(--p-ivory-a28);
    border-top-color:var(--p-ivory-a42);
    backdrop-filter:blur(30px) saturate(220%);
    -webkit-backdrop-filter:blur(30px) saturate(220%);
    /* ⚠️ لا ظلّ خارجي على عنصرٍ يحمل backdrop-filter — قيدٌ موثّق في الشريط السفلي
       (ينزف خارج الحدود على Safari). الإبراز داخليّ وحده. */
    box-shadow:inset 0 1px 0 var(--p-white-a22);
  }
  .ax-tab{
    flex:1 1 0; min-width:0;
    display:flex; align-items:center; justify-content:center; gap:var(--s-3);
    font-family:inherit; font-size:var(--t-sm); font-weight:var(--w-normal); color:inherit;
    background:none; border:1px solid transparent; border-radius:var(--r-full);
    padding:var(--s-3) var(--s-2); min-height:40px; cursor:pointer; white-space:nowrap;
    opacity:.66; transition:opacity .24s ease, background .3s ease, border-color .3s ease, box-shadow .3s ease;
  }
  .ax-tab:hover{ opacity:.9; }
  /* الباب المختار: غَورٌ داكن داخل الزجاج — نفس لغة مؤشّر الشريط السفلي حرفياً */
  .ax-tab.is-on{
    opacity:1; font-weight:var(--w-bold);
    background:linear-gradient(155deg, var(--p-2e3528-a55) 0%, var(--p-262c21-a62) 100%);
    border-color:var(--p-ivory-a16);
    border-top-color:var(--p-ivory-a30);
    box-shadow:inset 0 1px 0 var(--p-white-a14), inset 0 -3px 6px var(--p-black-a18);
  }
  .ax-ic{ flex:0 0 auto; width:16px; height:16px; display:block; opacity:.92; }
  .ax-ic svg{ width:100%; height:100%; display:block; }
  .ax-tab:focus-visible{ outline:2px solid var(--p-ivory-a80); outline-offset:-3px; }

  @media (max-width:359px){
    .ax-tab{ gap:var(--s-2); font-size:var(--t-xs); }
    .ax-ic{ width:14px; height:14px; }
  }
  @media (min-width:768px){
    .ax-tabs{ max-width:600px; margin-top:var(--s-7); padding:var(--s-3) var(--s-4); }
    .ax-tab{ font-size:var(--t-base); min-height:46px; }
    .ax-ic{ width:18px; height:18px; }
  }
  /* ⚠️ أجهزة اللمس: بلا backdrop-filter (نفس علاج الشريط السفلي — تمويه + تحويل
     على العنصر نفسه ينزف على Safari، وحركة الظهور تكتب transform علينا)، وتُعوَّض
     بخلفية أعتم فيبقى الشكل كما هو. */
  @media (hover: none) and (pointer: coarse){
    .ax-tabs{
      backdrop-filter:none; -webkit-backdrop-filter:none;
      background:var(--p-brand-a94);
    }
  }

  /* ── سطر الأسئلة تحت الأبواب: الزرّ نفسه بلا صندوق ───────────────────── */
  .occasions .discover-banner{
    width:auto; max-width:none; min-height:0;
    margin:var(--s-5) auto 0; padding:var(--s-2) var(--s-3);
    background:none !important; border:0; box-shadow:none;
    backdrop-filter:none; -webkit-backdrop-filter:none;
    color:var(--ink, var(--p-ink));
    justify-content:center; text-align:center;
  }
  .occasions .discover-banner:hover{ transform:none; box-shadow:none; }
  .occasions .discover-banner:hover .discover-banner-sub{ opacity:.85; }
  .occasions .discover-banner-icon,
  .occasions .discover-banner-arrow{ display:none; }
  .occasions .discover-banner-text{
    flex-direction:row; flex-wrap:wrap; gap:var(--s-2);
    justify-content:center; align-items:baseline; flex:0 1 auto;
  }
  .occasions .discover-banner-title{ font-size:var(--t-sm); font-weight:var(--w-bold); opacity:.9; }
  .occasions .discover-banner-sub{
    font-size:var(--t-sm); font-weight:var(--w-normal); opacity:.62;
    white-space:normal; overflow:visible; text-overflow:clip;
    text-decoration:underline; text-underline-offset:5px;
    text-decoration-color:var(--p-brand-a35); text-decoration-thickness:1px;
    transition:opacity .2s ease;
  }
  @media (min-width:768px){
    .occasions .discover-banner-title,
    .occasions .discover-banner-sub{ font-size:var(--t-base); }
  }

  /* ── ترويسة القسم: سطران بدل أربعة (قرار المالك) ─────────────────────── */
  /* السطر العلوي كان يسمّي المحور، وصار الباب المختار يقوله — فحذفه توضيحٌ لا نقص. */
  .occasions .occ-head .occ-eyebrow{ display:none; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P186 · ٢٠٢٦-٠٩-٢١ — محورٌ واحد لنصوص القسم كلّها (رصد المالك).

     العطل: على المكتب كان كلُّ سطرٍ في القسم على محورٍ مختلف — العنوان
     وزرّ «كل المناسبات» وترويسة الصفّ على حافّة العمود (١٢٠٠ + حشو ٤٠)،
     بينما السطر التعريفي والأبواب الثلاثة ولافتة «لا تعرف ماذا تختار؟»
     موسَّطة كلٌّ بعرضه هو، فتخرج أربعة محاور في قسمٍ واحد.
     السبب: كلٌّ منها كُتب في وقته بـ‎margin-inline:auto‎ — وهو توسيطٌ صحيح
     على الهاتف حيث العنصر بعرض الشاشة تقريباً، وخاطئ على المكتب حيث يترك
     العمود فيسبح في الفراغ.
     العلاج: الجميع يبدأ من حافّة العمود نفسها —
     ‎(100% − 1200px) ÷ 2 + 40px‎ — وهي بعينها الحافّة التي تحسبها
     ‎max-width:1200px; margin-inline:auto; padding-inline:40px‎ للترويسة.
     و‎max()‎ يحرس الشاشات دون ١٢٠٠ فلا تصير الحافّة سالبة.
     ⚠️ والهاتف لم يُمسّ: العناصر هناك بعرض الشاشة تقريباً فتوسيطها هو نفسه
     محاذاتها، والقواعد كلّها داخل استعلام ‎min-width:768px‎ عدا السطر
     التعريفي — وهو بعرضٍ أقصاه ‎46ch‎ يتجاوز الهاتف أصلاً فلا يتغيّر شيء.
     ══════════════════════════════════════════════════════════════════════════ */
  .occasions .occ-head .occ-lede{ max-width:46ch; margin-inline:0 auto; }
  @media (min-width:768px){
    .occasions{ --occ-edge: max(var(--s-9), calc((100% - 1200px) / 2 + var(--s-9))); }
    .occasions .ax-tabs,
    .occasions .discover-banner{
      margin-inline-start:var(--occ-edge);
      margin-inline-end:auto;
    }
  }

  /* ── تصغير كروت الصفّ (قرار المالك — الجولة الثانية) ─────────────────── */
  .occ-card{ width:132px; }
  .occ-card-glyph{ inset-inline-end:12px; top:24%; }
  .occ-card-glyph svg{ width:38px; height:38px; }
  .occ-card-frame{ inset:6px; }
  .occ-card-info{ padding:0 var(--s-4) var(--s-4); }
  .occ-card-name{ font-size:var(--t-sm); }
  .occ-card-note{ -webkit-line-clamp:2; }
  .occ-card-chip{ top:11px; inset-inline-start:11px; }
  @media (min-width:768px){ .occ-card{ width:148px; } .occ-card-name{ font-size:var(--t-base); } }


  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P143 · ٢٠٢٦-٠٩-٢٠ — رأس ورقة التصفّح الثابت (قرار المالك).
     أخٌ لمنطقة التمرير لا ابنٌ لها، فلا يمرّ تحته شيء ولا يحتاج خلفيةً ولا حدّاً:
     زجاج الورقة نفسه هو خلفيته — نفس حلّ شريط أفعال ورقة المنتج.
     ⚠️ touch-action: الأمّ .pd-sheet عليها none (للسحب بالمقبض) وهي تُورَّث،
     فبدون هذا السطر يتجمّد السحب الأفقي للرقاقات وتحديد النصّ في حقل البحث.
     ══════════════════════════════════════════════════════════════════════════ */
  #browseSheet .browse-fixed-head{
    flex:0 0 auto;
    padding:0 var(--s-6);
    touch-action:auto;
  }
  /* الحقل والرقاقات كانا يرثان حشو .pd-scroll، وقد خرجا منها — فالحشو أعلاه يعوّضه. */
  #browseSheet .browse-filters{ margin-bottom:var(--s-2); }
  #browseSheet .pd-scroll{ padding-top:var(--s-3); }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P144 · ٢٠٢٦-٠٩-٢٠ — (أ) لوح نصّ الشريحتين ٢ و٣ على يمين الصورة فعلاً،
     وزرّه شفافٌ بحدّ. (ب) صفوف الرئيسية لا تطول بلا نهاية.

     (أ) ⚠️ خللٌ حقيقيّ: كان inset-inline-end:0 — وفي الاتجاه من اليمين لليسار
         النهايةُ المنطقيّة هي **اليسار**، فاللوح كان ينزل على يسار الصورة بينما
         نصّه محاذٍ لليمين وحجابُه الجانبيّ مرسومٌ لليمين. فبدا الكلام «طايراً»
         غير متوازٍ — وهو ما رصده المالك. الصحيح inset-inline-start (= اليمين
         في العربية، واليسار تلقائياً لو قُلبت الصفحة إنجليزيةً).
     (ب) الصفّ يقف عند عشر بطاقات وبطاقةِ «شاهد الكل»، والباقي يبقى في الترميز
         مخفيّاً لا محذوفاً — لأن التصفّح والبحث والسلة وورقة المنتج تقرأ منه.
         التراجع: حذف كتلة P144 من الأنماط والسكربت.
     ══════════════════════════════════════════════════════════════════════════ */
  .hv-copy{ inset-inline-start:0; inset-inline-end:auto; text-align:start; }
  .hv-copy > *{ margin-inline-start:0; margin-inline-end:0; }
  .hv-slide-cta{ margin-inline-start:0; }
  /* الزرّ: زجاجٌ شفّاف بحدّ عاجيّ، لا كتلة مطموسة (قرار المالك) */
  .hv-btn{
    color:var(--p-ivory-soft);
    background:var(--p-ivory-soft-a12);
    border:1px solid var(--p-ivory-soft-a72);
    backdrop-filter:blur(10px) saturate(150%);
    -webkit-backdrop-filter:blur(10px) saturate(150%);
    box-shadow:none;
    transition:transform .25s ease, background .3s ease, border-color .3s ease;
  }
  .hv-btn:hover{ background:var(--p-ivory-soft-a22); border-color:var(--p-ivory-soft); }

  /* ── صفوف مقصوصة ─────────────────────────────────────────────────────── */
  .product-card.rc-over, .reel-card.rc-over{ display:none !important; }
  .rc-more{
    scroll-snap-align:start; flex:0 0 auto;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:var(--s-3);
    cursor:pointer; font-family:inherit; color:var(--ink, var(--p-ink)); text-align:center;
    padding:var(--s-5); border-radius:var(--card-radius);
    background:linear-gradient(155deg, var(--p-white-a55) 0%, var(--glass-bg-on-light) 45%, var(--glass-bg-on-light) 100%);
    border:1px solid var(--glass-border-on-light);
    border-top-color:var(--p-white-a65);
    transition:transform .22s ease, border-color .22s ease;
  }
  .rc-more:hover{ transform:translateY(-2px); border-color:var(--p-brand-a30); }
  .products-scroll > .rc-more{ width:var(--card-w); min-height:220px; }
  .reels-scroll > .rc-more{ width:140px; aspect-ratio:9/16; }
  .rc-more b{ font-size:var(--t-sm); font-weight:var(--w-bold); }
  .rc-more .rc-more-sub{ font-size:var(--t-xs); opacity:.6; line-height:1.6; }
  .rc-more-ar{
    width:44px; height:44px; border-radius:50%;
    background:var(--brand); color:var(--p-ivory-soft);
    display:flex; align-items:center; justify-content:center;
  }
  .rc-more-ar svg{ width:20px; height:20px; display:block; }
  @media (min-width:768px){ .reels-scroll > .rc-more{ width:180px; } }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P146 · ٢٠٢٦-٠٩-٢٠ — حالة المشغّل مرئية: دوّارٌ أثناء التحميل وسطرٌ عند
     التعذّر. لا يُغني عن ضغط الملفات (طلبٌ في اللوحة)، لكنه يمنع قراءة البطء
     على أنه عطل. الاثنان مخفيّان افتراضياً ولا يظهران إلا بصنف على الشريحة.
     ══════════════════════════════════════════════════════════════════════════ */
  .rf-spin{
    position:absolute; top:50%; left:50%; width:34px; height:34px; margin:-17px 0 0 -17px;
    border-radius:50%; border:2px solid var(--p-ivory-a28); border-top-color:var(--p-ivory);
    opacity:0; pointer-events:none; z-index:3;
    animation:wshSpin .9s linear infinite;
  }
  .reels-feed-slide.rf-busy .rf-spin{ opacity:1; }
  .rf-fail-note{
    position:absolute; top:50%; inset-inline:0; transform:translateY(-50%);
    text-align:center; font-size:var(--t-sm); color:var(--p-ivory); opacity:0;
    pointer-events:none; z-index:3; padding:0 var(--s-8);
  }
  .reels-feed-slide.rf-fail .rf-fail-note{ opacity:.85; }
  @media (prefers-reduced-motion: reduce){ .rf-spin{ animation:none; } }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P148 · ٢٠٢٦-٠٩-٢١ — خفّة قسم المقاطع وبطاقته.

     · الشريحة تُرسم عند الحاجة: content-visibility تُخبر المتصفح أن يتخطّى ما
       هو خارج الشاشة تخطّياً كاملاً، والارتفاع المفترض يمنع قفز التمرير.
     · الغلاف صورة كسولة بلا حركة Ken Burns — الحركة على مئة عنصرٍ ثمنُها إطار.
     · بطاقة المقطع صارت ببنية بطاقة «الأكثر طلباً» نفسها (قرار المالك)، فلا
       شكلان لكرتٍ واحد في صفحة واحدة.
     ══════════════════════════════════════════════════════════════════════════ */
  .reels-feed-slide{ content-visibility:auto; contain-intrinsic-size:100svh; }
  .rf-poster{ animation:none !important; object-fit:cover; }

  /* ── بطاقة المقطع بلغة بطاقة النوع ─────────────────────────────────────── */
  .reel-card.occ-card{
    width:132px; aspect-ratio:3/4.2; border-radius:var(--r-lg);
    display:flex; align-items:flex-end; justify-content:flex-start;
    background:var(--p-brand-deep); color:var(--p-ivory);
    border:1px solid var(--glass-border-on-light); border-top-color:var(--p-white-a65);
  }
  @media (min-width:768px){ .reel-card.occ-card{ width:148px; } }
  .reel-card.occ-card .occ-card-img{ animation:none; }
  /* شارة التشغيل: صغيرة أعلى البطاقة، لا قرصٌ في منتصفها */
  .reel-card.occ-card .reel-play{
    position:absolute; top:11px; inset-inline-start:11px; inset-inline-end:auto; z-index:3;
    width:26px; height:26px; border-radius:50%; margin:0;
    background:var(--p-ivory-a92); display:flex; align-items:center; justify-content:center;
  }
  .reel-card.occ-card .reel-play svg{ width:12px; height:12px; fill:var(--p-ink); margin-inline-start:1px; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P148 — الأقسام البعيدة تحت الشاشة لا تُرسَم حتى تُقارب: content-visibility
     تُخبر المتصفح أن يتخطّى تخطيطها ورسمها كلّياً، و contain-intrinsic-size
     تحجز ارتفاعاً مفترضاً فلا يقفز شريط التمرير حين تُرسم.
     ⚠️ يفشل مفتوحاً: متصفّح لا يدعمها يرسم كل شيء كما اليوم، بلا فرق في السلوك.
     ⚠️ ولا تُطبَّق على الهيرو ولا على قسم الاختيار ولا على صفّ «مجموعة مختارة»
     — هذه أول ما يُرى، وتخطّيها يُقرأ وميضاً لا خفّة.
     ══════════════════════════════════════════════════════════════════════════ */
  .customer-gallery-section, .instagram-section, .explore-more-section,
  #unexpectedSection, .final-cta, .site-footer{
    content-visibility:auto;
    contain-intrinsic-size:auto 700px;
  }


  /* ════════════════════════════════════════════════════════════════════════
     ⚠️ P213 · ٢٠٢٦-٠٩-٢٣ — «من نحن» كتالوجاً تحريرياً (شكلٌ اختاره المالك).
        بطاقةٌ كبيرة للاستوديو المختار بجانبها تعريفه وزرّه، وتحتها فهرسٌ
        مصوَّر للسبعة. لا تثبيتَ تمرير ولا عمقَ ولا سائقاً يحسب في كلّ إطار.

     ⚠️ القياس الذي بنى القرار (عرض ٣٩٠): القسم كان ٤٣٥٢ بكسل من أصل ٦٤٣٥
        للصفحة كلّها — أي ٦٨٪ من طولها ومعه سائقٌ يعيد رسم سبع بطاقات مع كل
        إطار. بعده: القسم ١٤٢٨ والصفحة ٣٥١١. وهذا مصدر «ثقل الحركة» المرصود.

     ⚠️ الألوان مربوطةٌ برموز الموقع لا مكتوبةً من جديد: --brand و --ivory.
        وما بقي محصورٌ في متغيّرات القسم فلا يتسرّب لغيره.
     ════════════════════════════════════════════════════════════════════════ */
  .abx{ --abx-ground:#F6F5F0; --abx-ink:#30392B; --abx-ink-2:#697360; --abx-olive:var(--brand); --abx-olive-soft:#8A9579;
        --abx-on-olive:var(--ivory); --abx-rule:#D9DDD1;
        background:var(--abx-ground); color:var(--abx-ink); padding:56px 16px; }
  .abx *{ box-sizing:border-box; }
  .abx .lat{ font-family:var(--font-en, Georgia, serif); direction:ltr; unicode-bidi:isolate; letter-spacing:.24em; text-transform:uppercase; }
  .abx-in{ max-width:850px; margin:0 auto; padding:34px; }
  .abx-top{ display:flex; justify-content:space-between; align-items:baseline; gap:12px; padding-bottom:22px; border-bottom:1px solid var(--abx-rule); }
  .abx-brand{ font-size:22px; color:var(--abx-ink); letter-spacing:.18em !important; }
  .abx-where{ font-size:13px; color:var(--abx-ink-2); }
  .abx-main{ display:grid; grid-template-columns:1fr 1fr; gap:36px; padding:36px 0 34px; align-items:stretch; }
  .abx-copy{ display:flex; flex-direction:column; min-width:0; }
  .abx-kicker{ font-size:13.5px; color:var(--abx-ink-2); margin:0 0 14px; }
  .abx-h{ font-size:clamp(28px,3.6vw,35px); line-height:1.35; font-weight:500; margin:0 0 18px; color:var(--abx-ink); text-wrap:balance; }
  .abx-h span{ display:block; }
  .abx-h .abx-h2{ color:var(--abx-olive-soft); }
  .abx-p{ font-size:14.5px; line-height:2; color:var(--abx-ink-2); margin:0; max-width:40ch; }
  .abx-studio{ margin-top:auto; padding-top:26px; border-top:1px solid var(--abx-rule); min-height:190px; }
  .abx-en{ display:block; font-size:11px; color:var(--abx-ink-2); text-align:start; }
  body:not(.lang-en) .abx-en{ text-align:right; }
  .abx-name{ font-size:24px; font-weight:600; margin:8px 0 6px; line-height:1.4; color:var(--abx-ink); }
  .abx-desc{ font-size:14.5px; color:var(--abx-ink-2); margin:0 0 18px; line-height:1.8; }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P218 · ٢٠٢٦-٠٩-٢٤ — «ابدأ بفكرتك» زيتونيٌّ زجاجيّ (أمر المالك).

     ⚠️ الزجاج هنا هو زجاج الموقع نفسه لا زجاجٌ ثانٍ: نفس تركيبة .logo-crystal
        و.occ-card — تدرّجٌ مائلٌ ١٥٥ درجة، وطمسٌ خلفيٌّ مع إشباع، وحافّةٌ
        عاجيّةٌ خفيفة. والفرق أن اللون الأساس زيتونُ العلامة لا أبيضُها.
     ⚠️ ولا filter مع backdrop-filter على العنصر نفسه: اجتماعهما يُنشئ سياق
        تركيبٍ جديداً فيُلغي الطمس الخلفيّ صامتاً (محذَّرٌ منه مرّتين في هذا
        الملف). فالعمق من box-shadow وحده.
     ⚠️ والشفافية ٠٫٨٢ لا أقلّ: النصّ عاجيٌّ على الزيتون، وكلّ نقصٍ في العتامة
        يقرّبه من خلفية القسم الفاتحة ويأكل التباين. */
  .abx-cta{ display:inline-flex; align-items:center; justify-content:space-between; gap:28px; min-width:200px; padding:14px 26px;
            border:1px solid var(--p-ivory-a32); border-radius:999px;
            background:linear-gradient(155deg, var(--p-brand-a88) 0%, var(--p-brand-a70) 100%);
            backdrop-filter:blur(14px) saturate(150%);
            -webkit-backdrop-filter:blur(14px) saturate(150%);
            box-shadow:0 6px 20px var(--p-30392b-a18);
            color:var(--abx-on-olive); font:inherit; font-size:15px; font-weight:500;
            cursor:pointer; transition:background .2s, box-shadow .2s, border-color .2s; }
  .abx-cta:hover{ background:linear-gradient(155deg, var(--p-46503f-a94) 0%, var(--p-46503f-a78) 100%);
                  border-color:var(--p-ivory-a45); box-shadow:0 8px 24px var(--p-30392b-a24); }
  .abx-cta:focus-visible{ outline:2px solid var(--abx-olive); outline-offset:3px; }
  .abx-cta svg{ width:22px; height:12px; flex:none; }
  body.lang-en .abx-cta svg{ transform:scaleX(-1); }
  /* ⚠️ P214 — الصورة الكبيرة بلغة بطاقة المنتج نفسها (أمر المالك): الاستدارة
     ٢٦px والحافّة والخيط الداخلي بإزاحة ٦ واستدارة ٢٠ — القيم منسوخة من
     .product-card .pc-inner حرفاً، فما من شكلين متجاورين في صفحةٍ واحدة. */
  .abx-fig{ position:relative; margin:0; height:445px; border-radius:26px;
            overflow:hidden; background:var(--p-brand-deep);
            border:1px solid var(--p-ivory-a16); }
  .abx-fig::before{
    content:''; position:absolute; inset:6px; z-index:3; pointer-events:none;
    border:1px solid var(--p-ivory-a26); border-radius:20px;
  }
  .abx-fig img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; transition:opacity .32s ease; }
  .abx-fig img.is-out{ opacity:0; }
  .abx-fig::after{ content:''; position:absolute; inset:auto 0 0 0; height:42%; pointer-events:none;
                   background:linear-gradient(to top, var(--p-1c2018-a62), var(--p-1c2018-a0)); }
  .abx-num{ position:absolute; right:22px; bottom:16px; z-index:2; font-style:italic; font-size:42px; line-height:1; color:var(--p-efece3); letter-spacing:0 !important; }
  .abx-art{ position:absolute; left:22px; bottom:20px; z-index:2; font-size:10.5px; line-height:1.9; color:var(--p-efece3); text-align:left; }
  /* ⚠️ الاتجاه هنا فيزيائيٌّ عمداً لا منطقيّ: الصنف .lat يفرض ltr على العنصر
     نفسه، فالخصائص المنطقية تنقلب معه ويهاجر الرقم إلى الجهة الخطأ. */
  body.lang-en .abx-num{ right:auto; left:22px; }
  body.lang-en .abx-art{ left:auto; right:22px; text-align:right; }
  .abx-idx{ border-top:1px solid var(--abx-rule); padding-top:24px; }
  .abx-idx-head{ display:flex; justify-content:space-between; align-items:baseline; margin-bottom:18px; }
  .abx-idx-head b{ font-weight:500; font-size:15px; }
  .abx-idx-head span{ font-size:11px; color:var(--abx-ink-2); }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P214 · ٢٠٢٦-٠٩-٢٣ — بطاقات الاستوديوهات بشكل بطاقات «مناسب الآن»
        والنصّ عليها (أمر المالك).

     ⚠️ ولم أُحاكِ الشكل بل أعدتُ استعمال أصنافه: occ-card و occ-card-media و
        occ-card-frame و occ-card-info و occ-card-kick و occ-card-name. فالشكل
        واحدٌ لأنه الكود نفسه — ولو عدّل المالك بطاقة المناسبة غداً تبعتها هذه
        بلا لمسة. نسخُ القيم كان سيصنع توأماً ينحرف بعد أوّل تعديل.

     ⚠️ وصارت صفّاً يُمرَّر أفقياً لا شبكةً: البطاقة بنصّها عرضها ١٣٢px (١٤٨ على
        المكتب)، وسبعٌ منها ٩٢٤px بينما عمود القسم ٧٨٢ — فالشبكة كانت ستضغطها
        إلى ١٠٣ ويسقط النصّ. والصفّ هو نمط «مناسب الآن» نفسه أصلاً.

     ⚠️ والمختار يُميَّز بالإضاءة والخيط لا بالمقاس: تكبير البطاقة المختارة كان
        يزحزح الصفّ كلّه عند كل نقرة.
     ══════════════════════════════════════════════════════════════════════════ */
  .abx-rail{
    display:flex; gap:var(--s-4); overflow-x:auto; overflow-y:hidden;
    scroll-snap-type:x proximity; -webkit-overflow-scrolling:touch;
    margin:0; padding:2px 2px 8px; list-style:none; scrollbar-width:none;
  }
  .abx-rail::-webkit-scrollbar{ display:none; }
  .abx-rail .occ-card{ opacity:.66; transition:opacity .3s ease, transform .22s ease, border-color .22s ease; }
  .abx-rail .occ-card:hover{ opacity:.88; }
  .abx-rail .occ-card[aria-pressed="true"]{ opacity:1; }
  .abx-rail .occ-card[aria-pressed="true"] .occ-card-frame{ border-color:var(--p-ivory-a55); }
  .abx-rail .occ-card:focus-visible{ outline:2px solid var(--abx-olive); outline-offset:3px; }
  .abx-rail .occ-card-kick{ letter-spacing:.14em; }
  .abx-foot{ display:flex; justify-content:space-between; align-items:baseline; gap:12px; margin-top:26px; padding-top:22px; border-top:1px solid var(--abx-rule); }
  .abx-foot p{ margin:0; font-size:14px; color:var(--abx-ink-2); }
  .abx-foot span{ font-size:11px; color:var(--abx-ink-2); }
  @media (max-width:760px){ .abx-in{ padding:28px 0; } .abx-main{ gap:28px; } .abx-fig{ height:360px; } }
  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P218 · ٢٠٢٦-٠٩-٢٤ — القسم يُقرأ بشاشةٍ واحدة على الجوّال (أمر المالك:
        «لازم يكونوا معروضين بنفس الشاشة بدون سكرول، عم ردّي أطلع وأنزل»).

     ⚠️ القياس قبل (٣٩٠×٨٤٤، وهو مقاس جهاز المالك): من أعلى الصورة الكبيرة إلى
        أسفل صفّ الاستوديوهات ٨٢٤ بكسلاً — والمتاح بعد شريطي المتصفّح نحو ٦٦٠.
        فالفارق ١٦٤ على الأقلّ، وهو سبب الصعود والنزول.
        التفصيل: الصورة ٣٤٠ · كتلة الاستوديو ١٧١ وفوقها فراغ ٢٢ · كتلة الفهرس
        ٢٩١ (حشو ٢٤ + عنوان ١٧ + فراغ ١٨ + صفّ ١٨٩ وبطاقته ١٧٩×١٢٨).

     ⚠️ العلاج توزيعٌ على ثلاثة لا قصٌّ من واحد، فلا يبدو شيءٌ مضغوطاً:
        · الصورة ٣٤٠ ⇒ ٢٣٢ (أكبر بندٍ وأقلّه ضرراً — الصورة تبقى بمساحةٍ كافية)
        · كتلة الاستوديو: الاسم ٢٤ ⇒ ١٩ والوصف ١٤٫٥ ⇒ ١٣ وفراغه ١٨ ⇒ ١٠،
          وسقف الارتفاع ١٧٦ يسقط لأنه كان يحجز فراغاً لا يملؤه شيء
        · الفهرس: الحشو ٢٤ ⇒ ١٤ وفراغ العنوان ١٨ ⇒ ١٠
        · البطاقة ١٢٨ ⇒ ١٠٦ عرضاً (والنسبة ٣/٤٫٢ تتكفّل بالارتفاع: ١٧٩ ⇒ ١٤٨)
     ⚠️ والبطاقة لا تنزل تحت ١٠٦: قِيس أن اسم «تصاميم خاصة» يلتفّ سطرين عندها،
        وثلاثةً دونها — وثلاثة أسطرٍ تكسر ارتفاع الصفّ كلّه.
     ⚠️ ولم أمسّ .occ-card الأصلية إطلاقاً: التخصيص محصورٌ في .abx-rail، فبطاقات
        «مناسب الآن» في الرئيسية تبقى بمقاسها كما هي. */
  @media (max-width:540px){
    .abx{ padding:26px 0; }
    .abx-in{ padding:0 20px; }
    .abx-main{ display:flex; flex-direction:column; gap:0; padding:22px 0 20px; }
    .abx-copy{ display:contents; }
    .abx-intro{ order:1; margin-bottom:18px; }
    .abx-fig{ order:2; height:232px; }
    .abx-studio{ order:3; margin-top:16px; padding-top:0; border-top:0; min-height:0; }
    .abx-name{ font-size:19px; margin:6px 0 4px; }
    .abx-desc{ font-size:13px; line-height:1.7; margin:0 0 10px; }
    .abx-cta{ width:100%; padding:12px 22px; }
    .abx-idx{ padding-top:14px; }
    .abx-idx-head{ margin-bottom:10px; }
    .abx-rail{ gap:var(--s-3); padding:2px 2px 6px; }
    .abx-rail .occ-card{ width:106px; }
    .abx-foot{ flex-direction:column; align-items:flex-start; margin-top:18px; padding-top:16px; }
  }
  @media (prefers-reduced-motion:reduce){ .abx *{ transition:none !important; } }
  /* ⚠️ الصفّ القديم («استكشف أكثر») يبقى مخفيّاً لا محذوفاً: أزراره السبعة هي
     الأبواب الحقيقية للاستوديوهات، وزرّ هذا القسم ينقر زرَّها بمعرّفه. تحذير
     P60 و P67 قائم — تغيير تلك المعرّفات يقطع ميزاتٍ حيّة. */
  .explore-more-section{ display:none; }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P153 — ستارة الإقلاع: عاجُ الهوية، والعلامة بلون العلامة، وحركةُ إطاراتٍ
     مقطّعة (steps) لا دورانٌ ناعم — فتُقرأ صناعةً يدويّة لا مؤشّر تحميلٍ تقنيّ.
     ══════════════════════════════════════════════════════════════════════════ */
  .wsh-boot{
    position:fixed; inset:0; z-index:400;
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:var(--s-6);
    background:var(--p-ivory); color:var(--brand); padding-inline:var(--s-7);
    transition:opacity .55s ease, visibility 0s linear .55s;
    animation:wshBootBail 0s linear 8s forwards;   /* شبكة أمان بلا جافاسكربت */
  }
  .wsh-boot.is-off{ opacity:0; visibility:hidden; pointer-events:none; }
  @keyframes wshBootBail{ to{ opacity:0; visibility:hidden; pointer-events:none; } }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P207 · ٢٠٢٦-٠٩-٢٣ — الشعار يُكشَف بمرور ضوء، لا يُرسَم بقلم.

     ما جُرّب وفشل (P206): رسمُ الشعار بـstroke-dashoffset على مساراته.
     العلّة بنيويّة لا في التوقيت: الشعار أربعةُ مسارات، وأكبرها مسارٌ واحدٌ
     يحوي عشرات المقاطع المنفصلة (M بعد M). و dashoffset يكشفها بترتيب
     كتابتها في الملفّ — وهو ترتيبُ مُصَدِّر الرسم لا ترتيبُ يدٍ ترسم. فتظهر
     قطعاً متناثرةً في أماكن متباعدة، تُقرأ خربشةً لا شعاراً يتكوّن. وحكم
     المالك: «مو زابط».

     ولا يُصلحه تبطيءٌ ولا تنعيم: العيب في ترتيب الكشف نفسه. وتقسيمُ المسار
     إلى مساراتٍ مرتّبةٍ يدوياً يعني إعادةَ رسم الشعار — ثمنٌ باهظ لحركةِ
     ثانيتين، ويفتح بابَ أن يتباعد شعارُ الستارة عن شعار الموقع.

     ما صار: الشعار حاضرٌ كاملاً بشكله الأصليّ (مملوءاً، بلا قلم)، ويُكشَف
     من اليمين إلى اليسار — اتّجاه القراءة — بحافّةٍ يسري معها خيطُ ضوء.
     فما يُرى في كلّ لحظة هو الشعار نفسه لا شظاياه، والحركة تُقرأ كشفاً
     مقصوداً. وهي أرخص أيضاً: clip-path و transform لا حساب مسارات.

     ══ والانتظار ثلاث ثوانٍ (أمر المالك) ══
     الحدّ الأدنى للعرض رُفع من ٥٥٠ms إلى ٣٠٠٠. وهو حدٌّ أدنى لا سقف: إن
     تأخّر الكتالوج بقيت الستارة حتى يجهز. والانتظار الحقيقيّ المقيس كان
     ٢٫٤–٢٫٧ ثانية، فالزيادة الفعليّة على الزائر أقلُّ من نصف ثانية.

     والمشهد يملأ الثلاث: الكشف ٠٫٢٠→١٫٧٠ · العبارة ١٫٦٠→٢٫٢٠ · ثم سكونٌ
     مقصودٌ إلى ٣٫٠٠ قبل الانحسار. والسكون جزءٌ من التصميم لا فراغٌ فيه.

     ⚠️ ويفشل مفتوحاً: clip-path و mask حركتان بـforwards، ولو لم تُدعَما
        فالشعار ظاهرٌ كاملاً من أوّل إطار — لأنه مملوءٌ أصلاً، لا مخفيّاً
        ينتظر حركةً تُظهره. وهذا فرقٌ جوهريٌّ عن P206.
     ══════════════════════════════════════════════════════════════════════════ */
  .wsh-boot-in{ position:relative; display:flex; align-items:center; justify-content:center; }
  .wsh-boot-mark{
    position:relative; width:112px; display:block;
    /* inset(أعلى يمين أسفل يسار): اليمين يبدأ ١٠٠٪ فلا عرضَ للمنطقة
       المرئيّة، ثمّ ينحسر إلى صفر — فتتّسع من الحافّة اليسرى يميناً.
       ⚠️ والاتّجاه يتبع المكشوف لا الصفحة: الصفحة RTL، لكنّ المكشوف
          حروفٌ لاتينيّة (WSH). والكشفُ يميناً-يساراً يُظهر H ثم S ثم W —
          الاسمُ مقلوباً. قِيس على لقطةِ ٧٠٠ms في التجربة الأولى. */
    clip-path:inset(0 100% 0 0);
    animation:wshBootWipe 1.5s cubic-bezier(.36,.15,.2,1) .2s forwards;
  }
  .wsh-boot-mark svg{ width:100%; height:auto; display:block; }
  /* الشعار مملوءٌ بلونه كما في الترويسة — لا قلم ولا حدود. */
  .wsh-boot-mark svg path{ fill:var(--brand); }
  @keyframes wshBootWipe{ to{ clip-path:inset(0 0 0 0); } }

  /* خيط الضوء يسري مع الحافّة نفسها وبالمنحنى نفسه، فيبدو سببَ الكشف لا
     زينةً بجانبه. ويخفت في آخر الشوط حتى لا يقف واقفاً عند الحافّة. */
  .wsh-boot-beam{
    position:absolute; top:-6%; bottom:-6%; width:1px; left:0;
    background:linear-gradient(180deg, transparent, var(--brand) 22%, var(--brand) 78%, transparent);
    opacity:0; transform:translateX(0);
    animation:wshBootBeam 1.5s cubic-bezier(.36,.15,.2,1) .2s forwards;
    pointer-events:none;
  }
  @keyframes wshBootBeam{
    0%  { opacity:0;   transform:translateX(0); }
    12% { opacity:.55; }
    82% { opacity:.55; }
    100%{ opacity:0;   transform:translateX(112px); }
  }

  .wsh-boot-say{
    margin:0; text-align:center; max-width:30ch;
    font-size:var(--t-base); color:var(--brand);
    opacity:0; transform:translateY(10px);
    animation:wshBootRise .6s cubic-bezier(.22,.9,.3,1) 1.6s forwards;
  }
  @keyframes wshBootRise{ to{ opacity:.78; transform:none; } }

  /* ⚠️ تقليل الحركة: الشعار كاملٌ والعبارة حاضرة من أوّل إطار، ولا خيط. */
  @media (prefers-reduced-motion: reduce){
    .wsh-boot-mark, .wsh-boot-say{ animation:none !important; }
    .wsh-boot-mark{ clip-path:none; }
    .wsh-boot-say{ opacity:.78; transform:none; }
    .wsh-boot-beam{ display:none; }
  }

  /* ══════════════════════════════════════════════════════════════════════════
     ⚠️ P155 — «تابعونا» بعرض «قبل التسليم»: الصفّ يأخذ عرض الشاشة كاملاً (الحشو
     الجانبي ينتقل من القسم إلى عنوانه)، والبطاقات هي بطاقات ذلك القسم نفسها.
     ══════════════════════════════════════════════════════════════════════════ */
  .instagram-section{ padding-inline:0; }
  .instagram-section h2, .instagram-section .ig-handle{ padding-inline:var(--s-7); }
  @media (min-width:768px){
    .instagram-section h2, .instagram-section .ig-handle{ padding-inline:var(--s-9); }
  }
  .ig-scroll{ margin-top:var(--s-2); }
