@charset "UTF-8";
/* === bundle-core.css - مُجمَّع يدوياً (لا node بهذه البيئة) - do not edit by hand === */
/* 🪽 [SILK-GLIDE 2026-07-17 B1 + مراجعة عدائية] هذا الملف لم يُنتَج فعلياً بتشغيل
   node tools/build-css.mjs (لا node متاح) — بل بحقن نصي يدوي مطابق لمخرجاته حرفياً
   (نفس منهج bundle-lazy.css المجاور). ⚠️ إن توفر node يوماً وشُغِّل السكربت فعلياً،
   راجع تعليق CORE_MANIFEST/LAZY_MANIFEST أعلى الملف أولاً — الناتج الآلي الحالي لا
   يتضمن كتلة «التكرارات الحرجة لترتيب الغلبة» ولا كتلة «FOUC حرج» المضافتين يدوياً
   هنا اليوم؛ فقدانهما يُعيد أعطالاً أُصلحت بالمراجعة العدائية. */
/* 🪽 [SILK-GLIDE 2026-07-17 B1] ملف مقسوم إلى نصفين: bundle-core.css (حرج/حاجب) */
/* + bundle-lazy.css (نادر/غير حاجب، assets/css/bundle-lazy.css) — راجع رأس ذلك الملف للتفاصيل. */
/* التراجع: أعد دمج bundle-lazy.css هنا في مكانه الأصلي واحذف رابط bundle-lazy.css من index.html. */

/* --------------- source: assets/css/main.css --------------- */
/* 🟣 [PERF-STUDENT 2026-06-10] حُذف @import الخط من هنا — صار preload+stylesheet في <head> (القديم: @import url Tajawal) */
:root {
  --primary: #a855f7;
  --primary-hover: #9333ea;
  --primary-light: #c084fc;
  --accent: #a855f7;
  --bg-page: #0a0e17;
  --bg-card: #111a27;
  --bg-input: #1a2536;
  --bg-input-focus: #213245;
  --text-primary: #e8eaed;
  --text-secondary: #8b95a5;
  --text-muted: #5a6577;
  --border-color: #1e2a3a;
  --shadow: 0 4px 20px rgba(0,0,0,0.4);
  --shadow-lg: 0 8px 40px rgba(0,0,0,0.5);
  --danger: #ff6b6b;
  --success: #51cf66;
  --warning: #f59e0b;
  --gradient: linear-gradient(135deg, #4c1d95 0%, #a855f7 100%);
  --gradient-dark: linear-gradient(135deg, #0a0e17 0%, #111a27 100%);
  --glow: 0 0 20px rgba(168,85,247,0.15);
  --radius: 14px;
  --navbar-height: 60px;
  --bottombar-height: 65px;
}

/* ═══════════════════════════════════════════════════════════════════════
   نظام الثيمات (المرحلة 1 — التأسيس)
   ───────────────────────────────────────────────────────────────────────
   الافتراضي  → :root أعلاه (dark — لا يحتاج data-theme)
   light      → فاتح ناعم ومريح
   blue       → أزرق ملكي (Hilal) + لمسات نيون خفيفة
   ───────────────────────────────────────────────────────────────────────
   كل الثيمات تستخدم نفس أسماء المتغيرات → كل المكونات تتكيّف تلقائياً
   (top nav، bottom nav، الكروت، النصوص، الحدود، الأزرار، الـ gradients،
    الـ glow، الـ modals، الـ toasts، الإدخالات)
   ═══════════════════════════════════════════════════════════════════════ */

/* ── LIGHT — نظيف ومريح، أبيض/رمادي فاتح + primary أزرق ── */
:root[data-theme="light"] {
  --primary: #7c3aed;             /* أزرق ملكي نظيف — تباين عالٍ على الأبيض */
  --primary-hover: #6d28d9;
  --primary-light: #8b5cf6;
  --accent: #7c3aed;
  --bg-page: #f5f7fa;             /* فاتح جداً مائل للأزرق-رمادي */
  --bg-card: #ffffff;              /* أبيض نقي للكروت */
  --bg-input: #f8fafc;             /* أفتح من bg-page للمدخلات */
  --bg-input-focus: #ffffff;       /* أبيض عند التركيز مع حد واضح */
  --text-primary: #0f172a;        /* داكن واضح للقراءة */
  --text-secondary: #475569;      /* رمادي متوسط واضح */
  --text-muted: #64748b;           /* رمادي للنصوص الثانوية */
  --border-color: #e2e8f0;         /* حد رمادي خفيف */
  --shadow: 0 2px 8px rgba(15,23,42,0.06);
  --shadow-lg: 0 8px 32px rgba(15,23,42,0.10);
  --danger: #dc2626;
  --success: #16a34a;
  --warning: #d97706;
  --gradient: linear-gradient(135deg, #5b21b6 0%, #7c3aed 100%);
  --gradient-dark: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
  --glow: 0 0 20px rgba(124,58,237,0.15);
}

/* ── PURPLE — بنفسجي فاخر، قاعدة بنفسجية عميقة (الافتراضي الجديد لكل زائر) ── */
:root[data-theme="purple"] {
  --primary: #a855f7;             /* بنفسجي راقٍ غير صارخ */
  --primary-hover: #9333ea;
  --primary-light: #c084fc;
  --accent: #a855f7;
  --bg-page: #140a24;             /* بنفسجي عميق دافئ */
  --bg-card: #1e1233;              /* بنفسجي أفتح للكروت */
  --bg-input: #221538;
  --bg-input-focus: #2b1a45;
  --text-primary: #f3e9ff;        /* أبيض بلمسة بنفسجية */
  --text-secondary: #c4b3da;      /* بنفسجي رمادي هادئ — مريح للقراءة */
  --text-muted: #8576a0;
  --border-color: #33244d;        /* حد بنفسجي خفيف */
  --shadow: 0 4px 20px rgba(10,5,24,0.5);
  --shadow-lg: 0 8px 40px rgba(10,5,24,0.65);
  --danger: #ff6b6b;
  --success: #51cf66;
  --warning: #f59e0b;
  --gradient: linear-gradient(135deg, #4c1d95 0%, #a855f7 100%);
  --gradient-dark: linear-gradient(135deg, #140a24 0%, #1e1233 100%);
  --glow: 0 0 26px rgba(168,85,247,0.16);
}

/* خلفية الجسم — radial gradients ناعمة جداً + ثابتة عند التمرير */

/* الكروت العامة — glassmorphism خفيف + حدود وردية شفافة */

/* بطاقات الخدمات (صفحة خدماتي) */

/* الشرائط العلوية والسفلية — زجاج وردي شفاف */

/* المودالات — زجاج وردي مكثف */

/* أزرار h-btn — توهج وردي ناعم (يتجاوز السماوي 0,180,216) */

/* أزرار الشريط العلوي (.nav-btn) — تجاوز السماوي */

/* الزر المركزي السفلي (طلب مادة) — تجاوز التوهج السماوي */

/* زر الدعم في الشريط العلوي (تجاوز inline cyan في style="...") */

/* بانر الدعم العلوي (تجاوز inline cyan في style="...") */

/* عناصر playlist drawer (مكتبة الفيديو) — تجاوز السماوي */

/* رسائل التحفيز peer-motivate */

/* ═══════════════════════════════════════════════════════════════════════
   PURPLE THEME — اللمسات الفاخرة (شقيقة الوردي، بنفسجي #a855f7)
   ───────────────────────────────────────────────────────────────────────
   كل قاعدة هنا مبنية على القواعد الأساسية مع تبديل
   الألوان للبنفسجي. مقصورة على [data-theme="purple"] ⇒ لا تمسّ dark/light.
   لا تلمس البوسترات ولا حالتي مكتمل/قيد التقدّم (تبقى كما هي لكل الثيمات).
   ═══════════════════════════════════════════════════════════════════════ */

/* خلفية الجسم — radial gradients ناعمة جداً + ثابتة عند التمرير */
:root[data-theme="purple"] body {
  background-image:
    radial-gradient(ellipse 800px 500px at 85% 0%, rgba(168,85,247,0.07), transparent 65%),
    radial-gradient(ellipse 700px 500px at 15% 100%, rgba(109,40,217,0.05), transparent 65%);
  background-attachment: fixed;
}

/* الكروت العامة — glassmorphism خفيف + حدود بنفسجية شفافة */
:root[data-theme="purple"] .h-card {
  background: linear-gradient(145deg, rgba(40,26,64,0.72), rgba(26,16,48,0.88));
  border-color: rgba(168,85,247,0.14);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
:root[data-theme="purple"] .h-card:hover {
  border-color: rgba(168,85,247,0.32);
  box-shadow: 0 4px 22px rgba(168,85,247,0.10);
}

/* بطاقات الخدمات (صفحة خدماتي) */
:root[data-theme="purple"] .svc-card {
  background: linear-gradient(145deg, rgba(40,26,64,0.74), rgba(26,16,48,0.9));
  border-color: rgba(168,85,247,0.14);
}
:root[data-theme="purple"] .svc-card:hover {
  border-color: rgba(168,85,247,0.42);
  box-shadow: 0 6px 22px rgba(168,85,247,0.14);
}
:root[data-theme="purple"] .svc-icon {
  background: linear-gradient(135deg, rgba(76,29,149,0.6), rgba(168,85,247,0.22));
  border-color: rgba(168,85,247,0.22);
}
:root[data-theme="purple"] .svc-card:hover .svc-icon {
  background: linear-gradient(135deg, rgba(76,29,149,0.85), rgba(168,85,247,0.42));
  box-shadow: 0 4px 18px rgba(168,85,247,0.22);
}

/* الشرائط العلوية والسفلية — زجاج بنفسجي شفاف */
:root[data-theme="purple"] .top-nav,
:root[data-theme="purple"] .bottom-nav {
  background: rgba(20,10,36,0.85);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-color: rgba(168,85,247,0.12);
}

/* المودالات — زجاج بنفسجي مكثف */
:root[data-theme="purple"] .h-modal {
  background: linear-gradient(145deg, rgba(40,26,64,0.96), rgba(26,16,48,0.98));
  border: 1px solid rgba(168,85,247,0.18);
  backdrop-filter: blur(14px);
  -webkit-backdrop-filter: blur(14px);
}

/* أزرار h-btn — توهج بنفسجي ناعم (يتجاوز السماوي 0,180,216) */
:root[data-theme="purple"] .h-btn {
  box-shadow: 0 4px 18px rgba(168,85,247,0.22);
}
:root[data-theme="purple"] .h-btn:hover {
  box-shadow: 0 6px 26px rgba(168,85,247,0.34);
}
:root[data-theme="purple"] .h-btn.outline:hover {
  background: rgba(168,85,247,0.10);
}

/* أزرار الشريط العلوي (.nav-btn) — تجاوز السماوي */
:root[data-theme="purple"] .top-nav .nav-btn {
  background: rgba(168,85,247,0.10);
}
:root[data-theme="purple"] .top-nav .nav-btn:hover {
  background: rgba(168,85,247,0.20);
}

/* الزر المركزي السفلي (طلب مادة) — تجاوز التوهج السماوي */
:root[data-theme="purple"] .nav-icon-request {
  box-shadow: 0 4px 18px rgba(168,85,247,0.40);
}
:root[data-theme="purple"] .nav-icon-request::before {
  background: rgba(168,85,247,0.15);
}
:root[data-theme="purple"] .nav-item-request:hover .nav-icon-request {
  box-shadow: 0 6px 24px rgba(168,85,247,0.50);
}
:root[data-theme="purple"] .nav-item-request.active .nav-icon-request {
  box-shadow: 0 4px 22px rgba(168,85,247,0.60);
}

/* زر الدعم في الشريط العلوي (تجاوز inline cyan في style="...") */
:root[data-theme="purple"] .nav-actions a[target="_blank"] {
  background: rgba(168,85,247,0.10) !important;
  border-color: rgba(168,85,247,0.22) !important;
}

/* بانر الدعم العلوي (تجاوز inline cyan في style="...") */
:root[data-theme="purple"] #supportBanner {
  background: rgba(168,85,247,0.08) !important;
  border-bottom-color: rgba(168,85,247,0.22) !important;
}

/* عناصر playlist drawer (مكتبة الفيديو) — تجاوز السماوي */
:root[data-theme="purple"] .playlist-drawer .drawer-item:hover,
:root[data-theme="purple"] .playlist-drawer .drawer-item.playing {
  background: rgba(168,85,247,0.08);
}

/* رسائل التحفيز peer-motivate */
:root[data-theme="purple"] .peer-motivate {
  background: rgba(168,85,247,0.08);
}

/* ═══ نهاية تحسينات الثيم البنفسجي ═══ */

/* ═══════════════════════════════════════════════════════════════════════
   LIGHT THEME — اللمسات النظيفة (المرحلة 5)
   ───────────────────────────────────────────────────────────────────────
   نظيف، مريح، احترافي. كل القواعد مقصورة على [data-theme="light"]
   لا تؤثر على dark/blue.
   الفلسفة:
     - كروت بيضاء صلبة (لا glassmorphism — الزجاج يشوش على الفاتح)
     - ظلال ناعمة ترفع الكرت من الخلفية
     - ربط بصري واضح بحدود رمادية خفيفة + accent أزرق
     - focus rings زرقاء واضحة للمدخلات (3px ring)
   البوسترات: لا تُلمَس — الـbox-shadow يعمل خارج العنصر فقط
   ═══════════════════════════════════════════════════════════════════════ */

/* خلفية الجسم — radial blue glow ناعم جداً (3-4% فقط) */
:root[data-theme="light"] body {
  background-image:
    radial-gradient(ellipse 800px 500px at 85% 0%, rgba(124,58,237,0.04), transparent 65%),
    radial-gradient(ellipse 700px 500px at 15% 100%, rgba(99,102,241,0.03), transparent 65%);
  background-attachment: fixed;
}

/* الكروت العامة — أبيض نقي + ظل ناعم */
:root[data-theme="light"] .h-card {
  background: #ffffff;
  border-color: #e2e8f0;
  box-shadow: 0 2px 8px rgba(15,23,42,0.04);
}
:root[data-theme="light"] .h-card:hover {
  border-color: rgba(124,58,237,0.30);
  box-shadow: 0 6px 20px rgba(124,58,237,0.10);
}

/* بطاقات الخدمات (صفحة خدماتي) — أبيض + لمسة زرقاء */
:root[data-theme="light"] .svc-card {
  background: #ffffff;
  border-color: #e2e8f0;
  box-shadow: 0 2px 8px rgba(15,23,42,0.04);
}
:root[data-theme="light"] .svc-card:hover {
  border-color: rgba(124,58,237,0.40);
  box-shadow: 0 6px 22px rgba(124,58,237,0.14);
}
:root[data-theme="light"] .svc-icon {
  background: linear-gradient(135deg, rgba(124,58,237,0.10), rgba(139,92,246,0.18));
  border-color: rgba(124,58,237,0.20);
}
:root[data-theme="light"] .svc-card:hover .svc-icon {
  background: linear-gradient(135deg, rgba(124,58,237,0.20), rgba(139,92,246,0.32));
  box-shadow: 0 4px 14px rgba(124,58,237,0.18);
}

/* الشرائط العلوية والسفلية — أبيض شبه شفاف + ظل ناعم */
:root[data-theme="light"] .top-nav {
  background: rgba(255,255,255,0.92);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-color: #e2e8f0;
  box-shadow: 0 1px 3px rgba(15,23,42,0.04);
}
:root[data-theme="light"] .bottom-nav {
  background: rgba(255,255,255,0.95);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border-color: #e2e8f0;
  box-shadow: 0 -2px 12px rgba(15,23,42,0.06);
}

/* المودالات — أبيض نظيف بظل واضح */
:root[data-theme="light"] .h-modal {
  background: #ffffff;
  border: 1px solid #e2e8f0;
  box-shadow: 0 20px 60px rgba(15,23,42,0.18);
}

/* أزرار h-btn — توهج أزرق ناعم (يتجاوز السماوي 0,180,216) */
:root[data-theme="light"] .h-btn {
  box-shadow: 0 2px 8px rgba(124,58,237,0.18);
}
:root[data-theme="light"] .h-btn:hover {
  box-shadow: 0 4px 16px rgba(124,58,237,0.30);
}
:root[data-theme="light"] .h-btn.outline:hover {
  background: rgba(124,58,237,0.08);
}

/* أزرار الشريط العلوي (.nav-btn) — تجاوز السماوي */
:root[data-theme="light"] .top-nav .nav-btn {
  background: rgba(124,58,237,0.08);
}
:root[data-theme="light"] .top-nav .nav-btn:hover {
  background: rgba(124,58,237,0.16);
}

/* الزر المركزي السفلي (طلب مادة) — توهج أزرق ناعم */
:root[data-theme="light"] .nav-icon-request {
  box-shadow: 0 4px 14px rgba(124,58,237,0.30);
}
:root[data-theme="light"] .nav-icon-request::before {
  background: rgba(124,58,237,0.12);
}
:root[data-theme="light"] .nav-item-request:hover .nav-icon-request {
  box-shadow: 0 6px 20px rgba(124,58,237,0.40);
}
:root[data-theme="light"] .nav-item-request.active .nav-icon-request {
  box-shadow: 0 4px 18px rgba(124,58,237,0.45);
}

/* زر الدعم في الشريط العلوي (تجاوز inline cyan) */
:root[data-theme="light"] .nav-actions a[target="_blank"] {
  background: rgba(124,58,237,0.08) !important;
  border-color: rgba(124,58,237,0.20) !important;
}

/* بانر الدعم العلوي — واضح وغير مزعج */
:root[data-theme="light"] #supportBanner {
  background: rgba(124,58,237,0.06) !important;
  border-bottom-color: rgba(124,58,237,0.20) !important;
}

/* عناصر playlist drawer (مكتبة الفيديو) — أزرق شفاف */
:root[data-theme="light"] .playlist-drawer .drawer-item:hover,
:root[data-theme="light"] .playlist-drawer .drawer-item.playing {
  background: rgba(124,58,237,0.06);
}

/* رسائل التحفيز peer-motivate */
:root[data-theme="light"] .peer-motivate {
  background: rgba(124,58,237,0.06);
}

/* Focus states واضحة للمدخلات (مطلوب صراحةً) */
:root[data-theme="light"] input:focus,
:root[data-theme="light"] textarea:focus,
:root[data-theme="light"] select:focus,
:root[data-theme="light"] .h-input:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 3px rgba(124,58,237,0.12);
  outline: none;
}

/* ═══ نهاية تحسينات الثيم الفاتح (المرحلة 5) ═══ */

/* ── انتقال ناعم بين الثيمات (لتغيير سلس عند التبديل لاحقاً) ── */
body, .top-nav, .bottom-nav, .h-card, .h-btn, .h-input, .h-modal {
  transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease;
}

* { margin:0; padding:0; box-sizing:border-box; font-variant-numeric: tabular-nums; }
body {
  font-family: 'Tajawal', 'Segoe UI', 'Arial', sans-serif;
  background: var(--bg-page);
  color: var(--text-primary);
  min-height: 100vh;
  padding-top: var(--navbar-height);
  padding-bottom: calc(var(--bottombar-height) + 10px);
  -webkit-locale: "en";
}
a { text-decoration: none; color: inherit; }
.page { display: none; padding: 16px; max-width: 600px; margin: 0 auto; animation: pageIn 0.25s ease; content-visibility: auto; }
.page.active { display: block; }
@keyframes pageIn { from { opacity:0; transform:translateY(12px); } to { opacity:1; transform:translateY(0); } }
@keyframes pageSlideLeft { from { opacity:0; transform:translateX(-30px); } to { opacity:1; transform:translateX(0); } }
@keyframes pageSlideRight { from { opacity:0; transform:translateX(30px); } to { opacity:1; transform:translateX(0); } }
@keyframes cardEnter { from { opacity:0; transform:translateY(20px) scale(0.97); } to { opacity:1; transform:translateY(0) scale(1); } }
@keyframes countUp { from { opacity:0; transform:scale(0.5); } to { opacity:1; transform:scale(1); } }
@keyframes progressFill { from { width: 0%; } }
@keyframes fadeInScale { from { opacity:0; transform:scale(0.9); } to { opacity:1; transform:scale(1); } }
@keyframes subtlePulse { 0%,100% { opacity:1; } 50% { opacity:0.7; } }
@keyframes slideUp { from { opacity:0; transform:translateY(30px); } to { opacity:1; transform:translateY(0); } }
@keyframes rippleEffect { 0% { transform:scale(0); opacity:0.5; } 100% { transform:scale(4); opacity:0; } }
/* 🪽 [SILK-GLIDE 2026-07-17 R7] حُذف @keyframes gradientShift — ميت مشحون (كان يخدم .login-gradient-bg المحذوفة، صفر استخدام HTML/JS مثبت بـgrep). للتراجع: أعد السطر من نسخة ما قبل SILK-GLIDE. */
@keyframes imgReveal { from { opacity:0; transform:scale(1.02); } to { opacity:1; transform:scale(1); } }

/* Staggered card entrance */
.stagger-card { animation: cardEnter 0.4s ease both; }
.stagger-card:nth-child(1) { animation-delay: 0s; }
.stagger-card:nth-child(2) { animation-delay: 0.06s; }
.stagger-card:nth-child(3) { animation-delay: 0.12s; }
.stagger-card:nth-child(4) { animation-delay: 0.18s; }
.stagger-card:nth-child(5) { animation-delay: 0.24s; }
.stagger-card:nth-child(6) { animation-delay: 0.3s; }
.stagger-card:nth-child(7) { animation-delay: 0.36s; }
.stagger-card:nth-child(8) { animation-delay: 0.42s; }

/* Progress bar animate on appear */
.h-progress-bar.animated { animation: progressFill 0.8s ease-out; }

/* Counter animation */
.count-animate { animation: countUp 0.5s ease both; }

/* Smooth accordion */
/* 🪽 [SILK-GLIDE 2026-07-17 R4] max-height:2000px→grid-template-rows 1fr/0fr (max-height animated
   a layout property every frame for ~0.4s; grid-template-rows on an auto-height row is the
   standard zero-reflow accordion trick). .cc-inner (added by courses.js/mv-ui.js/waiting-lessons.js)
   is the single grid row's content -- it measures its natural height and gets clipped as the row
   shrinks to 0fr. Rollback: restore the two lines below and drop display:grid + .cc-inner rule. */
.category-courses { display: grid; grid-template-rows: 1fr; transition: grid-template-rows 0.35s ease, opacity 0.3s ease; opacity: 1; }
.category-courses.collapsed { grid-template-rows: 0fr; opacity: 0; }
.category-courses > .cc-inner { overflow: hidden; min-height: 0; }

/* Page slide directions */
.page.slide-left { animation: pageSlideLeft 0.3s ease; }
.page.slide-right { animation: pageSlideRight 0.3s ease; }
.page.slide-up { animation: slideUp 0.3s ease; }

/* Ripple button effect */
.h-btn, .nav-btn, .nav-item { position: relative; overflow: hidden; }
.ripple-circle { position:absolute; border-radius:50%; background:rgba(255,255,255,0.3); width:20px; height:20px; pointer-events:none; animation:rippleEffect 0.6s ease-out forwards; }

/* Image lazy reveal */
img.lazy-reveal { animation: imgReveal 0.4s ease both; }

/* 🪽 [SILK-GLIDE 2026-07-17 R7] حُذفت .login-gradient-bg (تدرّج متحرك لانهائي 400%×400%) — ميتة مشحونة: صفر استخدام في أي HTML/JS (مثبت بـgrep). أزيلت إشاراتها أيضاً من قائمتي القتل في 100-performance-mode.css. للتراجع: أعد القاعدة والكيفريم من نسخة ما قبل SILK-GLIDE. */

/* Breadcrumb */
.breadcrumb { display:flex; align-items:center; gap:6px; font-size:0.85rem; color:var(--text-muted); margin-bottom:12px; flex-wrap:wrap; }
.breadcrumb a { color:var(--primary); font-weight:500; }
.breadcrumb span.sep { color:var(--border-color); }

/* Search bar global */
.search-global { position:relative; }
.search-global input { padding-right:40px; }
.search-global .search-icon { position:absolute; right:14px; top:50%; transform:translateY(-50%); color:var(--text-muted); pointer-events:none; }

/* Gamification badges */
.achievement-badge { display:inline-flex; align-items:center; gap:6px; padding:4px 12px; border-radius:20px; font-size:0.75rem; font-weight:600; background:rgba(245,158,11,0.15); color:var(--warning); }
.achievement-badge.gold { background:rgba(255,215,0,0.15); color:#ffd700; }
.achievement-badge.silver { background:rgba(192,192,192,0.15); color:#c0c0c0; }
.achievement-badge.bronze { background:rgba(205,127,50,0.15); color:#cd7f32; }

/* Streak counter */
.streak-counter { display:inline-flex; align-items:center; gap:4px; padding:6px 14px; border-radius:10px; background:rgba(255,107,107,0.1); color:var(--danger); font-weight:700; font-size:0.85rem; }

/* Stats mini card */
.stat-mini { text-align:center; padding:12px 8px; background:rgba(255,255,255,0.08); border-radius:12px; flex:1; }
.stat-mini .stat-num { font-size:1.4rem; font-weight:800; color:var(--primary); }
.stat-mini .stat-label { font-size:0.72rem; color:var(--text-muted); margin-top:2px; }

/* Playlist drawer */
.playlist-drawer { background:var(--bg-card); border-radius:16px 16px 0 0; border:1px solid var(--border-color); max-height:45vh; overflow-y:auto; margin-top:12px; }
.playlist-drawer .drawer-header { padding:12px 16px; border-bottom:1px solid var(--border-color); display:flex; justify-content:space-between; align-items:center; position:sticky; top:0; background:var(--bg-card); z-index:1; }
.playlist-drawer .drawer-item { display:flex; align-items:center; gap:10px; padding:10px 16px; border-bottom:1px solid rgba(30,42,58,0.5); cursor:pointer; transition:background 0.2s; }
.playlist-drawer .drawer-item:hover, .playlist-drawer .drawer-item.playing { background:rgba(168,85,247,0.08); }
.playlist-drawer .drawer-item.playing { border-right:3px solid var(--primary); }

/* Onboarding */

/* Safe area support */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
  .bottom-nav { padding-bottom: env(safe-area-inset-bottom); height: calc(var(--bottombar-height) + env(safe-area-inset-bottom)); }
  body { padding-bottom: calc(var(--bottombar-height) + env(safe-area-inset-bottom) + 10px); }
}

/* Skeleton Loading */
.skeleton { background: linear-gradient(90deg, var(--bg-input) 25%, var(--border-color) 50%, var(--bg-input) 75%); background-size: 200% 100%; animation: shimmer 1.5s infinite; border-radius: var(--radius); }
@keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.skeleton { contain: strict; }
.skeleton-card { height: 80px; margin-bottom: 12px; }

/* Top Navbar */
.top-nav {
  position: fixed; top:0; left:0; right:0; z-index: 1000;
  background: var(--bg-card);
  border-bottom: 1px solid var(--border-color);
  height: var(--navbar-height);
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 16px; color: var(--text-primary);
}
.top-nav .nav-title { font-size: 1.2rem; font-weight: 700; color: var(--primary); }
.top-nav .nav-actions { display: flex; gap: 12px; align-items: center; }
.top-nav .nav-btn {
  background: rgba(168,85,247,0.1); border: 1px solid var(--border-color); color: var(--primary);
  width: 44px; height: 44px; border-radius: 10px; cursor: pointer;
  display: flex; align-items: center; justify-content: center; font-size: 1rem;
  transition: all 0.2s;
}
.top-nav .nav-btn:hover { background: rgba(168,85,247,0.2); border-color: var(--primary); }

/* ═══════════════════════════════════════════════════════════════════════
   زر تغيير الثيم (المرحلة 2) — يتكيّف مع جميع الثيمات تلقائياً
   ═══════════════════════════════════════════════════════════════════════ */
.theme-toggle-btn {
  width: 40px;
  height: 40px;
  border-radius: 10px;
  background: transparent;
  border: 1px solid var(--border-color);
  color: var(--primary);
  cursor: pointer;
  font-family: inherit;
  font-size: 1.15rem;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
  padding: 0;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  transition: background-color 0.2s ease, border-color 0.2s ease, transform 0.15s ease;
  flex-shrink: 0;
}
.theme-toggle-btn:hover {
  border-color: var(--primary);
  background: rgba(127, 127, 127, 0.08);
  transform: translateY(-1px);
}
.theme-toggle-btn:active { transform: scale(0.94); }
.theme-toggle-btn:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
}
/* انتقال دوّار خفيف للأيقونة عند تغيير الثيم */
.theme-toggle-btn .tt-icon {
  display: inline-block;
  line-height: 1;
  transition: transform 0.35s ease;
}
.theme-toggle-btn.is-changing .tt-icon {
  transform: rotate(360deg) scale(1.18);
}

/* الجوال الصغير — تصغير لطيف */
@media (max-width: 380px) {
  .theme-toggle-btn { width: 36px; height: 36px; font-size: 1.02rem; }
}

/* Bottom Navbar */
.bottom-nav {
  position: fixed; bottom:0; left:0; right:0; z-index: 1000;
  background: var(--bg-card);
  height: var(--bottombar-height);
  display: flex; align-items: center; justify-content: space-around;
  border-top: 1px solid var(--border-color);
  transition: transform 0.3s ease;
}
.bottom-nav.hidden { transform: translateY(100%); }
.bottom-nav .nav-item {
  display: flex; flex-direction: column; align-items: center; gap: 3px;
  color: var(--text-muted); font-size: 0.72rem; cursor: pointer;
  padding: 6px 10px; border-radius: 10px; transition: all 0.25s;
  border: none; background: none; font-weight: 500;
}
.bottom-nav .nav-item:hover { color: var(--text-primary); }

/* Unified icon wraps */
.nav-icon-wrap {
  width: 38px; height: 38px; border-radius: 12px;
  display: flex; align-items: center; justify-content: center;
  font-size: 1.1rem; transition: all 0.3s ease;
  position: relative;
}

/* أيقونات مخصصة */
.nav-custom-icon {
  width: 26px; height: 26px; object-fit: contain;
  transition: all 0.3s ease; filter: grayscale(0.6) opacity(0.6);
}
.nav-item.active .nav-custom-icon { filter: none; }
.nav-item:hover .nav-custom-icon { filter: grayscale(0.2) opacity(0.85); }

/* Home icon */
.nav-icon-home { color: var(--text-muted); background: transparent; }
.nav-item.active .nav-icon-home {
  background: rgba(81,207,102,0.1);
  box-shadow: 0 2px 12px rgba(81,207,102,0.15);
  animation: navBounce 0.4s ease;
}
.nav-item.active .nav-icon-home .nav-custom-icon { filter: none; transform: scale(1.1); }
.nav-item.active .nav-icon-home + span { color: #51cf66; }

/* Request icon - elevated CTA */
.nav-item-request { overflow: visible !important; }
.nav-icon-request {
  width: 54px !important; height: 54px !important; border-radius: 50% !important;
  background: var(--gradient); color: #fff !important;
  font-size: 1.2rem !important; margin-top: -26px;
  box-shadow: 0 4px 18px rgba(168,85,247,0.4);
  border: 3px solid var(--bg-card); z-index: 2;
}
.nav-icon-request .nav-custom-icon { width: 30px; height: 30px; filter: none !important; animation: navFloat 3s ease-in-out infinite; }
.nav-icon-request::before {
  content: ''; position: absolute; inset: -5px; border-radius: 50%;
  background: rgba(168,85,247,0.15); z-index: -1;
  animation: iconGlow 2.5s ease-in-out infinite;
}
@keyframes iconGlow {
  0%, 100% { transform: scale(1); opacity: 0.4; }
  50% { transform: scale(1.18); opacity: 0; }
}
@keyframes navFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-2px); }
}
@keyframes navBounce {
  0% { transform: scale(0.85); }
  50% { transform: scale(1.1); }
  100% { transform: scale(1); }
}
.nav-item-request:hover .nav-icon-request { transform: scale(1.08); box-shadow: 0 6px 24px rgba(168,85,247,0.5); }
.nav-item-request.active .nav-icon-request { box-shadow: 0 4px 22px rgba(168,85,247,0.6); }
.nav-item-request span:last-child { color: var(--primary) !important; font-weight: 600; margin-top: 3px; }

/* Profile icon */
.nav-icon-profile { color: var(--text-muted); background: transparent; }
.nav-item.active .nav-icon-profile {
  background: rgba(167,139,250,0.1);
  box-shadow: 0 2px 12px rgba(167,139,250,0.15);
  animation: navBounce 0.4s ease;
}
.nav-item.active .nav-icon-profile .nav-custom-icon { filter: none; transform: scale(1.1); }
.nav-item.active .nav-icon-profile + span { color: #a78bfa; }

/* Hover effects for all icons */
.nav-item:hover .nav-icon-home { background: rgba(81,207,102,0.06); }
.nav-item:hover .nav-icon-profile { background: rgba(167,139,250,0.06); }

/* Active label styling */
.nav-item.active span:last-child { font-weight: 600; }

/* Cards */
.h-card {
  background: var(--bg-card); border-radius: var(--radius);
  padding: 16px; margin-bottom: 12px;
  border: 1px solid var(--border-color);
  transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; cursor: pointer; contain: layout style;
}
.h-card:hover { transform: translateY(-2px); box-shadow: var(--glow); border-color: rgba(168,85,247,0.3); }

/* Forms */
.h-input {
  width: 100%; padding: 14px 18px; border: 1px solid var(--border-color);
  border-radius: 12px; font-size: 1rem; font-family: inherit;
  background: var(--bg-input); color: var(--text-primary);
  transition: all 0.2s; outline: none;
}
.h-input:focus { border-color: var(--primary); background: var(--bg-input-focus); box-shadow: var(--glow); }
.h-input::placeholder { color: var(--text-muted); }
.h-btn {
  width: 100%; padding: 14px; border: none; border-radius: 12px;
  font-size: 1.05rem; font-weight: 700; cursor: pointer; font-family: inherit;
  background: var(--gradient); color: #fff;
  transition: all 0.2s; box-shadow: 0 4px 15px rgba(168,85,247,0.2);
}
.h-btn:hover { box-shadow: 0 6px 25px rgba(168,85,247,0.35); transform: translateY(-1px); }
.h-btn:active { transform: scale(0.98); }
.h-btn:disabled { opacity: 0.5; cursor: not-allowed; }
.h-btn.outline {
  background: transparent; color: var(--primary);
  border: 1.5px solid var(--primary); box-shadow: none;
}
.h-btn.outline:hover { background: rgba(168,85,247,0.1); }
.h-btn.danger { background: var(--danger); box-shadow: 0 4px 15px rgba(255,107,107,0.2); }
.h-label { display: block; margin-bottom: 8px; font-weight: 500; color: var(--text-secondary); font-size: 0.9rem; }
.form-group { margin-bottom: 16px; }

/* Section Headers */
.section-title { font-size: 1.1rem; font-weight: 700; margin-bottom: 12px; color: var(--text-primary); }

/* Progress Bar */
.h-progress { height: 5px; background: var(--border-color); border-radius: 3px; overflow: hidden; margin-top: 8px; }
.h-progress-bar { height: 100%; background: var(--gradient); border-radius: 3px; transition: width 0.3s; }

/* Category Accordion */
.category-header {
  background: var(--gradient); color: #fff; padding: 14px 16px;
  border-radius: 12px; cursor: pointer; display: flex;
  justify-content: space-between; align-items: center;
  margin-bottom: 6px; user-select: none; transition: all 0.2s;
}
.category-header:hover { opacity: 0.95; }
.category-header .cat-title { display: flex; align-items: center; gap: 8px; font-weight: 600; }
.category-badge { background: rgba(255,255,255,0.25); padding: 2px 10px; border-radius: 20px; font-size: 0.8rem; }
.category-chevron { transition: transform 0.3s; }
.category-chevron.collapsed { transform: rotate(-90deg); }
/* 🪽 [SILK-GLIDE 2026-07-17 R4] padding moved from .category-courses (the grid row track -- padding
   there wouldn't collapse with grid-template-rows:0fr) onto .cc-inner (the clipped grid item, whose
   overflow:hidden hides the padding along with content when the row shrinks). Rollback: '.category-courses { padding: 8px 0; }'. */
.category-courses > .cc-inner { padding: 8px 0; }
.category-courses.hidden { display: none; }

/* Course Card */
.course-card {
  display: flex; background: var(--bg-card); border-radius: 12px;
  overflow: hidden; border: 1px solid var(--border-color);
  margin-bottom: 8px; transition: transform 0.2s ease, box-shadow 0.2s ease; contain: layout style;
}
.course-card:hover { box-shadow: var(--shadow); transform: translateY(-1px); }
.course-thumb { width: 140px; min-width: 140px; height: 79px; background: var(--border-color); overflow: hidden; border-radius: 8px; display: flex; align-items: center; justify-content: center; margin: auto 0; margin-left: 10px; }
.course-thumb img { width: 100%; height: 100%; object-fit: cover; }
/* 🪽 [SILK-GLIDE 2026-07-17 I4] درع CLS للثمبنيل: نسبة صريحة + لون انتظار قبل وصول الصورة.
   المقاسات المرئية لا تتغيّر (140×79 مفروضة من .course-thumb أعلاه — aspect-ratio تُهمل
   ما دام البعدان محدّدين وتحمي فقط لو غاب أحدهما في سياق مستقبلي). للتراجع: احذف هذه الكتلة. */
.course-thumb img { aspect-ratio: 140 / 79; background-color: var(--border-color); }
.course-info { flex: 1; padding: 10px 12px; display: flex; flex-direction: column; justify-content: center; }
.course-info .c-title { font-weight: 600; font-size: 0.95rem; margin-bottom: 4px; }
.course-info .c-desc { font-size: 0.8rem; color: var(--text-muted); margin-bottom: 6px; }

/* سباق زملائك */
.peer-race-card { background: var(--bg-card); border-radius: 14px; border: 1px solid var(--border-color); padding: 16px; margin-bottom: 10px; }
.peer-race-title { font-weight: 700; font-size: 0.95rem; margin-bottom: 4px; }
.peer-race-rank { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; font-size: 0.85rem; color: var(--text-muted); }
.peer-race-rank .rank-num { background: var(--primary); color: #fff; width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: 0.85rem; }
.peer-race-rank .rank-num.top1 { background: linear-gradient(135deg, #f59e0b, #d97706); }
.peer-race-rank .rank-num.top2 { background: linear-gradient(135deg, #94a3b8, #64748b); }
.peer-race-rank .rank-num.top3 { background: linear-gradient(135deg, #b45309, #92400e); }
.peer-bars { display: flex; gap: 8px; align-items: center; margin-bottom: 6px; font-size: 0.8rem; }
.peer-bar-wrap { flex: 1; height: 10px; background: rgba(255,255,255,0.08); border-radius: 8px; overflow: hidden; position: relative; }
.peer-bar-you { height: 100%; border-radius: 8px; background: var(--primary); transition: width 0.8s ease; }
.peer-bar-avg { position: absolute; top: 0; height: 100%; border-radius: 8px; background: rgba(255,255,255,0.15); transition: width 0.8s ease; }
.peer-motivate { font-size: 0.85rem; padding: 8px 12px; border-radius: 10px; background: rgba(168,85,247,0.08); margin-top: 8px; }
.peer-finished { font-size: 0.8rem; color: var(--text-muted); margin-top: 6px; }

/* Messages */
.msg-header {
  background: var(--gradient); color: #fff; padding: 20px;
  border-radius: 16px 16px 0 0; display: flex; align-items: center; gap: 14px;
}
.msg-avatar { width: 45px; height: 45px; border-radius: 50%; background: rgba(255,255,255,0.2); display: flex; align-items: center; justify-content: center; font-size: 1.3rem; }
.msg-list { max-height: 50vh; overflow-y: auto; padding: 16px; background: var(--bg-card); border: 1px solid var(--border-color); }
.msg-bubble { background: #f0f2f5; padding: 10px 14px; border-radius: 14px; margin-bottom: 10px; max-width: 85%; }
.msg-bubble.admin { background: var(--primary); color: #fff; margin-right: auto; }
.msg-bubble .msg-time { font-size: 0.7rem; color: var(--text-muted); margin-top: 4px; }

/* Playlist Request */
.req-badge {
  display: inline-block; padding: 4px 12px; border-radius: 20px;
  font-size: 0.8rem; font-weight: 600;
}
.req-badge.pending { background: #fff3cd; color: #856404; }
.req-badge.approved { background: #d4edda; color: #155724; }
.req-badge.rejected { background: #f8d7da; color: #721c24; }

/* Profile */
.profile-avatar {
  width: 100px; height: 100px; border-radius: 50%; border: 3px solid var(--primary);
  object-fit: cover; box-shadow: var(--shadow);
}
.profile-menu-item {
  display: flex; align-items: center; justify-content: space-between;
  padding: 14px 16px; background: var(--bg-card); border-radius: 12px;
  margin-bottom: 8px; border: 1px solid var(--border-color); cursor: pointer;
  transition: all 0.2s;
}
.profile-menu-item:hover { box-shadow: var(--shadow); }
.profile-menu-item .pmi-right { display: flex; align-items: center; gap: 12px; }
.pmi-icon { width: 38px; height: 38px; border-radius: 10px; background: var(--bg-page); display: flex; align-items: center; justify-content: center; color: var(--primary); }

/* Video Player */
.video-container {
  background: #000; border-radius: 12px; overflow: hidden;
  aspect-ratio: 16/9; display: flex; align-items: center; justify-content: center;
}
.video-container iframe, .video-container video { width: 100%; height: 100%; border: none; }

/* Toast */
.toast-container {
  position: fixed; bottom: calc(var(--bottombar-height) + 12px); right: 16px;
  z-index: 9999; display: flex; flex-direction: column-reverse; gap: 8px;
}
.h-toast {
  padding: 12px 20px; border-radius: 12px; color: #fff; font-weight: 500;
  animation: slideDown 0.3s ease; min-width: 250px; text-align: center;
  box-shadow: 0 4px 20px rgba(0,0,0,0.2);
}
/* ملاحظة: ألوان النجاح/الخطأ + الكسوة السينمائية الكاملة في h-upgrade.css (يُحمَّل لاحقاً).
   أُزيل هنا «.h-toast.success/error { background: var(--…) }» لأن اختصار background
   كان يُصفّر background-image (يلغي صورة الكون) بأولوية أعلى من قاعدة h-upgrade. */
@keyframes slideDown { from { opacity:0; transform: translateY(-20px); } to { opacity:1; transform: translateY(0); } }

/* Loading Spinner */
.spinner { display: flex; justify-content: center; padding: 40px; }
.spinner::after {
  content: ''; width: 36px; height: 36px; border: 3px solid var(--border-color);
  border-top-color: var(--primary); border-radius: 50%;
  animation: spin 0.8s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }
.skel-list { padding: 0; }
.skel-list .skeleton-card { border-radius: var(--radius); }

/* Empty State */
.empty-state { text-align: center; padding: 40px 20px; color: var(--text-muted); }
.empty-state i { font-size: 3rem; margin-bottom: 12px; }
.empty-state h5 { color: var(--text-secondary); margin-bottom: 8px; }

/* Modal */
.h-modal-overlay {
  position: fixed; top:0; left:0; right:0; bottom:0;
  background: rgba(0,0,0,0.5); z-index: 2000;
  display: flex; align-items: center; justify-content: center;
  padding: 20px; opacity: 0; pointer-events: none; transition: opacity 0.3s;
}
.h-modal-overlay.active { opacity: 1; pointer-events: all; }
.h-modal {
  background: var(--bg-card); border-radius: 16px; padding: 24px;
  width: 100%; max-width: 420px; box-shadow: var(--shadow-lg);
  transform: translateY(20px); transition: transform 0.3s;
}
.h-modal-overlay.active .h-modal { transform: translateY(0); }
.h-modal h5 { margin-bottom: 16px; font-weight: 700; }

/* =====================================================
   CINEMATIC POSTER REQUEST EXPERIENCE
   ===================================================== */

/* Hero Header */
.req-hero {
  position: relative;
  border-radius: 20px;
  overflow: hidden;
  margin-bottom: 28px;
  min-height: 120px;
  display: flex;
  align-items: center;
}
.req-hero-bg {
  position: absolute; inset: 0;
  background: linear-gradient(135deg, #4c1d95 0%, #00243a 40%, #0a0e17 100%);
  z-index: 0;
}
.req-hero-bg::before {
  content: '';
  position: absolute; inset: 0;
  background: radial-gradient(ellipse at 30% 50%, rgba(168,85,247,0.18) 0%, transparent 70%);
}
.req-hero-bg::after {
  content: '';
  position: absolute;
  top: -50%; right: -30%;
  width: 400px; height: 400px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(168,85,247,0.08) 0%, transparent 60%);
}
.req-hero-content {
  position: relative; z-index: 1;
  padding: 28px 24px;
}
.req-hero-title {
  font-size: 1.6rem;
  font-weight: 800;
  color: #fff;
  margin-bottom: 6px;
  letter-spacing: -0.3px;
}
.req-hero-desc {
  color: rgba(255,255,255,0.6);
  font-size: 0.95rem;
  font-weight: 400;
}

/* Steps Progress Bar */
.req-steps-bar {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0;
  margin-bottom: 24px;
  padding: 0 8px;
}
.req-step {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 16px;
  border-radius: 12px;
  background: var(--bg-card);
  border: 1.5px solid var(--border-color);
  transition: all 0.4s cubic-bezier(0.4,0,0.2,1);
  color: var(--text-muted);
  font-size: 0.88rem;
  font-weight: 600;
  cursor: default;
  position: relative;
}
.req-step.active {
  border-color: var(--primary);
  color: var(--primary);
  background: rgba(168,85,247,0.08);
  box-shadow: 0 0 20px rgba(168,85,247,0.12);
}
.req-step.done {
  border-color: var(--success);
  color: var(--success);
  background: rgba(81,207,102,0.06);
}
.req-step-num {
  width: 28px; height: 28px;
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 0.85rem; font-weight: 800;
  background: var(--border-color);
  color: var(--text-muted);
  transition: all 0.4s;
  flex-shrink: 0;
}
.req-step.active .req-step-num {
  background: var(--primary);
  color: #fff;
  box-shadow: 0 2px 12px rgba(168,85,247,0.4);
}
.req-step.done .req-step-num {
  background: var(--success);
  color: #fff;
}
.req-step-line {
  width: 32px;
  height: 2px;
  background: var(--border-color);
  transition: background 0.4s;
  flex-shrink: 0;
}
.req-step-line.done {
  background: var(--success);
}

/* Step Panels */
.req-step-panel {
  display: none;
  animation: reqPanelIn 0.45s cubic-bezier(0.4,0,0.2,1);
}
.req-step-panel.active { display: block; }
@keyframes reqPanelIn {
  from { opacity: 0; transform: translateY(16px); }
  to { opacity: 1; transform: translateY(0); }
}

.req-select-label {
  display: block;
  font-weight: 700;
  font-size: 1rem;
  color: var(--text-primary);
  margin-bottom: 10px;
}
.req-select-fancy {
  padding: 16px 20px;
  border-radius: 14px;
  font-size: 1.05rem;
  font-weight: 600;
  background: var(--bg-card);
  border: 1.5px solid var(--border-color);
  transition: all 0.3s;
  cursor: pointer;
}
.req-select-fancy:focus {
  border-color: var(--primary);
  box-shadow: 0 0 0 4px rgba(168,85,247,0.1);
}

/* Poster Grid */
.poster-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 14px;
  padding-bottom: 20px;
}
@media (min-width: 520px) { .poster-grid { grid-template-columns: repeat(3, 1fr); gap: 16px; } }
@media (min-width: 768px) { .poster-grid { grid-template-columns: repeat(4, 1fr); gap: 18px; } }
@media (min-width: 1024px) { .poster-grid { grid-template-columns: repeat(5, 1fr); gap: 20px; } }

/* Individual Poster Card */
.poster-card {
  position: relative;
  border-radius: 16px;
  overflow: hidden;
  aspect-ratio: 9/16;
  background: var(--bg-card);
  border: 1.5px solid var(--border-color);
  cursor: default;
  transition: transform 0.3s cubic-bezier(0.4,0,0.2,1), box-shadow 0.3s ease, border-color 0.3s ease;
  transform: translateZ(0);
  will-change: transform;
  contain: layout style;
}
.poster-card:hover {
  transform: scale(1.035) translateY(-4px);
  box-shadow: 0 16px 48px rgba(0,0,0,0.45), 0 0 0 1px rgba(168,85,247,0.25);
  border-color: rgba(168,85,247,0.4);
}
.poster-card::before {
  content: '';
  position: absolute; inset: 0;
  border-radius: 16px;
  opacity: 0;
  transition: opacity 0.35s;
  background: linear-gradient(135deg, rgba(168,85,247,0.15) 0%, transparent 60%);
  z-index: 2;
  pointer-events: none;
}
.poster-card:hover::before { opacity: 1; }

/* Poster Shine Effect */
.poster-card::after {
  content: '';
  position: absolute;
  top: -120%; left: -120%;
  width: 60%; height: 200%;
  background: linear-gradient(105deg, transparent 40%, rgba(255,255,255,0.04) 45%, rgba(255,255,255,0.08) 50%, rgba(255,255,255,0.04) 55%, transparent 60%);
  transform: rotate(25deg);
  transition: top 0.5s ease, left 0.5s ease;
  z-index: 3;
  pointer-events: none;
}
.poster-card:hover::after {
  top: -50%; left: -30%;
}

/* Poster Image */
.poster-img-wrap {
  position: absolute; inset: 0;
  z-index: 0;
}
.poster-img-wrap img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform 0.4s cubic-bezier(0.4,0,0.2,1);
  will-change: transform;
}
.poster-card:hover .poster-img-wrap img {
  transform: scale(1.06);
}

/* Poster Fallback (no image) */
.poster-fallback {
  position: absolute; inset: 0;
  background: linear-gradient(160deg, #162032 0%, #0d1520 60%, #071018 100%);
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  z-index: 0;
}
.poster-fallback i {
  font-size: 2.8rem;
  color: rgba(168,85,247,0.2);
  margin-bottom: 8px;
}
.poster-fallback-pattern {
  position: absolute; inset: 0;
  background-image: radial-gradient(rgba(168,85,247,0.04) 1px, transparent 1px);
  background-size: 16px 16px;
}
/* 🪽 [SILK-GLIDE 2026-07-17] الثيم الثلجي — إصلاحات تناسق الألوان (رقم 12)
   تدرّج كحلي داكن صلب بلا تجاوز light ⇒ بوستر بلا صورة يظهر كتلة داكنة وسط
   الشبكة الفاتحة. للتراجع: احذف هذه الكتلة. */
:root[data-theme="light"] .poster-fallback{background:linear-gradient(160deg,#eef1f6 0%,#e2e8f0 60%,#dbe3ee 100%);}
:root[data-theme="light"] .poster-fallback i{color:rgba(124,58,237,.35);}
:root[data-theme="light"] .poster-fallback-pattern{background-image:radial-gradient(rgba(124,58,237,.08) 1px,transparent 1px);}

/* Poster Gradient Overlay */
.poster-gradient {
  position: absolute;
  bottom: 0; left: 0; right: 0;
  height: 65%;
  background: linear-gradient(to top, rgba(0,0,0,0.92) 0%, rgba(0,0,0,0.6) 40%, transparent 100%);
  z-index: 1;
  pointer-events: none;
}

/* Poster Content */
.poster-content {
  position: absolute;
  bottom: 0; left: 0; right: 0;
  padding: 14px;
  z-index: 4;
  display: flex; flex-direction: column;
  gap: 8px;
}
.poster-title {
  font-size: 0.92rem;
  font-weight: 700;
  color: #fff;
  line-height: 1.35;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-shadow: 0 1px 6px rgba(0,0,0,0.5);
}
.poster-desc {
  font-size: 0.75rem;
  color: rgba(255,255,255,0.55);
  line-height: 1.3;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

/* Poster Metadata Bar */
.poster-meta {
  display: flex;
  align-items: center;
  gap: 12px;
  font-size: 0.7rem;
  color: rgba(255,255,255,0.45);
  font-weight: 500;
}
.poster-meta-item {
  display: flex;
  align-items: center;
  gap: 4px;
}
.poster-meta-item i {
  font-size: 0.65rem;
  opacity: 0.7;
}

/* Status Badge (top-right of poster) */
.poster-status {
  position: absolute;
  top: 10px; right: 10px;
  z-index: 5;
  padding: 5px 12px;
  border-radius: 20px;
  font-size: 0.72rem;
  font-weight: 700;
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  display: flex; align-items: center; gap: 5px;
  animation: fadeInScale 0.4s ease;
}
.poster-status.pending {
  background: rgba(245,158,11,0.25);
  color: #fbbf24;
  border: 1px solid rgba(245,158,11,0.3);
}
.poster-status.approved {
  background: rgba(81,207,102,0.25);
  color: #6ee7b7;
  border: 1px solid rgba(81,207,102,0.3);
}
.poster-status.enrolled {
  background: rgba(81,207,102,0.3);
  color: #4ade80;
  border: 1px solid rgba(81,207,102,0.4);
}
.poster-status.rejected {
  background: rgba(255,107,107,0.25);
  color: #fca5a5;
  border: 1px solid rgba(255,107,107,0.3);
}

/* Action Button inside poster */
.poster-action-btn {
  width: 100%;
  padding: 10px;
  border: none;
  border-radius: 10px;
  font-family: inherit;
  font-size: 0.85rem;
  font-weight: 700;
  cursor: pointer;
  transition: all 0.25s;
  display: flex; align-items: center; justify-content: center; gap: 6px;
  position: relative; overflow: hidden;
}
.poster-action-btn.request {
  background: linear-gradient(135deg, #4c1d95 0%, #a855f7 100%);
  color: #fff;
  box-shadow: 0 4px 16px rgba(168,85,247,0.3);
}
.poster-action-btn.request:hover {
  box-shadow: 0 6px 24px rgba(168,85,247,0.45);
  transform: translateY(-1px);
}
.poster-action-btn.pending-btn {
  background: rgba(245,158,11,0.15);
  color: #f59e0b;
  cursor: default;
}
.poster-action-btn.approved-btn {
  background: rgba(81,207,102,0.15);
  color: #51cf66;
  cursor: default;
}
.poster-action-btn.enrolled-btn {
  background: rgba(81,207,102,0.2);
  color: #4ade80;
  cursor: default;
}
.poster-action-btn.retry-btn {
  background: rgba(255,107,107,0.15);
  color: #ff6b6b;
  border: 1px solid rgba(255,107,107,0.3);
}
.poster-action-btn.retry-btn:hover {
  background: rgba(255,107,107,0.25);
}
.poster-action-btn:disabled {
  opacity: 0.6;
  cursor: not-allowed;
}

/* Skeleton for Posters */
.poster-skeleton {
  aspect-ratio: 9/16;
  border-radius: 16px;
  background: linear-gradient(90deg, var(--bg-input) 25%, var(--border-color) 50%, var(--bg-input) 75%);
  background-size: 200% 100%;
  animation: shimmer 1.5s infinite;
}

/* Empty State for Requests */
.req-empty {
  text-align: center;
  padding: 48px 20px;
  color: var(--text-muted);
}
.req-empty-icon {
  width: 80px; height: 80px;
  border-radius: 50%;
  background: rgba(168,85,247,0.06);
  display: inline-flex;
  align-items: center; justify-content: center;
  margin-bottom: 16px;
}
.req-empty-icon i {
  font-size: 2rem;
  color: var(--text-muted);
}
.req-empty h5 {
  color: var(--text-secondary);
  font-weight: 700;
  margin-bottom: 6px;
}
.req-empty p {
  font-size: 0.9rem;
}

/* Poster stagger entrance */
.poster-card.stagger-poster {
  animation: posterEnter 0.5s cubic-bezier(0.4,0,0.2,1) both;
}
@keyframes posterEnter {
  from { opacity: 0; transform: translateY(24px) scale(0.95); }
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* Dashboard Poster Cards */
.dash-poster-grid {
  grid-template-columns: repeat(2, 1fr) !important;
  gap: 12px !important;
}
@media (min-width: 520px) { .dash-poster-grid { grid-template-columns: repeat(3, 1fr) !important; gap: 14px !important; } }
.dash-poster-card {
  aspect-ratio: 9/14 !important;
}
.dash-poster-card .poster-content {
  gap: 5px;
}
.dash-poster-card .poster-gradient {
  height: 75%;
}
.dash-poster-progress {
  display: flex;
  align-items: center;
  gap: 6px;
}
.dash-poster-progress .h-progress {
  flex: 1;
}
.dash-poster-pct {
  font-size: 0.72rem;
  font-weight: 700;
  min-width: 30px;
  text-align: left;
  text-shadow: 0 1px 4px rgba(0,0,0,0.5);
}

@media (max-width: 400px) {
  .req-hero-title { font-size: 1.3rem; }
  .req-steps-bar { gap: 0; }
  .req-step { padding: 8px 10px; font-size: 0.78rem; }
  .req-step span { display: none; }
  .req-step.active span { display: inline; }
  .req-step-line { width: 20px; }
  .poster-grid { gap: 10px; }
  .poster-title { font-size: 0.82rem; }
  .poster-content { padding: 10px; }
  .poster-action-btn { padding: 8px; font-size: 0.78rem; }
}
/* =====================================================
   VIDEO ENHANCEMENTS - Layered on existing
   ===================================================== */
.video-wrapper { position: relative; }

/* Controls Overlay */
.vid-controls-overlay {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%);
  display: flex; gap: 20px; align-items: center; z-index: 10;
  opacity: 0; transition: opacity 0.3s; pointer-events: none;
}
.video-wrapper:hover .vid-controls-overlay,
.video-wrapper.show-controls .vid-controls-overlay { opacity: 1; pointer-events: all; }
/* إخفاء الأزرار تماماً عند تشغيل Bunny iframe حتى لا تتعارض مع أزرار المشغل */
.video-wrapper.bunny-mode .vid-controls-overlay,
.video-wrapper.bunny-mode:hover .vid-controls-overlay,
.video-wrapper.bunny-mode.show-controls .vid-controls-overlay { display: none !important; opacity: 0 !important; pointer-events: none !important; }
.vid-ctrl-btn {
  width: 48px; height: 48px; border-radius: 50%; border: none;
  background: rgba(0,0,0,0.6); color: #fff; font-size: 1rem;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  transition: all 0.2s; position: relative;
  flex-direction: column; gap: 0;
}
.vid-ctrl-btn:hover { background: rgba(168,85,247,0.7); transform: scale(1.1); }
.vid-ctrl-btn small { font-size: 0.55rem; position: absolute; bottom: 6px; }
.vid-ctrl-btn:nth-child(2) { width: 56px; height: 56px; font-size: 1.2rem; }

/* Top Actions */
.vid-top-actions {
  position: absolute; top: 10px; left: 10px;
  display: flex; gap: 6px; z-index: 10;
  opacity: 0; transition: opacity 0.3s;
}
.video-wrapper:hover .vid-top-actions { opacity: 1; }
.video-wrapper.bunny-mode .vid-top-actions,
.video-wrapper.bunny-mode:hover .vid-top-actions { display: none !important; opacity: 0 !important; }
.vid-top-btn {
  width: 36px; height: 36px; border-radius: 50%; border: none;
  background: rgba(0,0,0,0.5); color: #fff; font-size: 0.85rem;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  transition: all 0.2s;
}
.vid-top-btn:hover { background: rgba(168,85,247,0.7); }

/* Speed Control */
.vid-speed-control {
  display: flex; gap: 4px; margin-top: 8px; flex-wrap: wrap; justify-content: center;
  background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px;
  padding: 8px 10px; animation: fadeInScale 0.2s ease;
}
.vid-speed-btn {
  padding: 6px 12px; border-radius: 8px; border: 1px solid var(--border-color);
  background: transparent; color: var(--text-secondary); font-family: inherit;
  font-size: 0.82rem; font-weight: 600; cursor: pointer; transition: all 0.2s;
}
.vid-speed-btn.active { background: var(--primary); color: #fff; border-color: var(--primary); }
.vid-speed-btn:hover:not(.active) { border-color: var(--primary); color: var(--primary); }

/* End Screen */
.vid-end-screen {
  position: absolute; inset: 0; z-index: 20;
  background: rgba(10,14,23,0.95);
  display: flex; align-items: center; justify-content: center;
  animation: fadeInScale 0.4s ease; border-radius: 12px;
}
.vid-end-content { text-align: center; padding: 24px; max-width: 340px; width: 90%; }
.vid-end-check { font-size: 3rem; color: var(--success); margin-bottom: 12px; animation: countUp 0.5s ease; }
.vid-end-content h4 { color: #fff; margin-bottom: 12px; }
.vid-end-progress { color: var(--text-muted); font-size: 0.88rem; margin-bottom: 16px; }
.vid-end-actions { display: flex; gap: 8px; }

/* Resume Prompt */
.vid-resume-prompt {
  position: absolute; bottom: 16px; left: 50%; transform: translateX(-50%);
  z-index: 15; animation: slideUp 0.35s ease;
}
.vid-resume-card {
  background: var(--bg-card); border: 1px solid var(--border-color);
  border-radius: 14px; padding: 16px 20px; text-align: center;
  box-shadow: 0 8px 32px rgba(0,0,0,0.4); min-width: 260px;
  
}
.vid-resume-card p { font-size: 0.92rem; font-weight: 600; margin-bottom: 6px; color: var(--text-primary); }

/* Mini Player */
.mini-player {
  position: fixed; bottom: 80px; right: 16px; z-index: 4000;
  width: 320px; background: var(--bg-card); border: 1px solid var(--border-color);
  border-radius: 14px; overflow: hidden; box-shadow: 0 12px 40px rgba(0,0,0,0.5);
  animation: slideUp 0.3s ease; resize: both; cursor: move;
  touch-action: none;
}
.mini-player-header {
  display: flex; justify-content: space-between; align-items: center;
  padding: 8px 12px; background: rgba(0,0,0,0.3);
  cursor: move; user-select: none;
}
.mini-player-title {
  font-size: 0.8rem; font-weight: 600; color: var(--text-primary);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px;
}
.mini-player-btn {
  width: 30px; height: 30px; border-radius: 8px; border: none;
  background: rgba(255,255,255,0.1); color: var(--text-primary);
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  font-size: 0.8rem; transition: all 0.2s;
}
.mini-player-btn:hover { background: rgba(168,85,247,0.3); }
.mini-player-video { aspect-ratio: 16/9; background: #000; }
.mini-player-video iframe, .mini-player-video video { width: 100%; height: 100%; border: none; }
@media (max-width: 480px) {
  .mini-player { width: 260px; bottom: 75px; right: 8px; }
}

/* Bookmark items */
.vid-bookmark-item {
  display: flex; align-items: center; gap: 10px; padding: 8px 12px;
  background: var(--bg-card); border: 1px solid var(--border-color);
  border-radius: 10px; margin-bottom: 6px; cursor: pointer; transition: all 0.2s;
}
.vid-bookmark-item:hover { border-color: var(--primary); background: rgba(168,85,247,0.05); }
.vid-bookmark-time { color: var(--primary); font-weight: 700; font-size: 0.88rem; min-width: 50px; }
.vid-bookmark-del { color: var(--text-muted); background: none; border: none; cursor: pointer; font-size: 0.85rem; padding: 4px; }
.vid-bookmark-del:hover { color: var(--danger); }

/* Enhanced Drawer Items */
.drawer-item .drawer-watch-bar { height: 3px; background: var(--border-color); border-radius: 2px; margin-top: 4px; overflow: hidden; }
.drawer-item .drawer-watch-fill { height: 100%; background: var(--primary); border-radius: 2px; transition: width 0.3s; }
.drawer-item.completed { border-right: 3px solid var(--success); }
.drawer-item.in-progress { border-right: 3px solid var(--warning); }

/* Video bookmark toast */
.vid-bookmark-toast {
  position: absolute; top: 10px; right: 10px; z-index: 20;
  background: var(--success); color: #fff; padding: 8px 14px;
  border-radius: 10px; font-size: 0.82rem; font-weight: 600;
  animation: fadeInScale 0.3s ease; pointer-events: none;
}

/* ═══════════════════════════════════════════════════════════════════════
   Final Enrollment Requests — Student Dashboard Cards
   منفصل تماماً عن .poster-card الموجود — namespace: final-req-*
   ═══════════════════════════════════════════════════════════════════════ */
.final-req-card { cursor: default; }
.final-req-card .poster-gradient { display: none; }

/* ─── اللوحة السفلية (premium glass panel) ─── */
.final-req-overlay {
  position: absolute; left: 0; right: 0; bottom: 0;
  min-height: 44%; z-index: 2;
  display: flex; flex-direction: column; justify-content: flex-end;
  padding: 18px 12px 13px;
  background: linear-gradient(to bottom,
    rgba(10,14,23,0) 0%,
    rgba(10,14,23,0.55) 18%,
    rgba(10,14,23,0.88) 55%,
    rgba(10,14,23,0.96) 100%);
  -webkit-backdrop-filter: blur(4px) saturate(110%);
  backdrop-filter: blur(4px) saturate(110%);
  border-radius: 0 0 var(--radius) var(--radius);
}

/* خط ضوء أعلى اللوحة */
.final-req-overlay::before {
  content: '';
  position: absolute;
  top: 0; left: 14%; right: 14%;
  height: 1px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(168,85,247,0.55) 30%,
    rgba(168,85,247,0.95) 50%,
    rgba(168,85,247,0.55) 70%,
    transparent 100%);
  box-shadow: 0 0 8px rgba(168,85,247,0.5);
  z-index: 3;
  pointer-events: none;
}

/* أيقونة سداسية صغيرة في منتصف الحافة العلوية */
.final-req-overlay::after {
  content: '\f5d2'; /* fa-atom */
  font-family: 'Font Awesome 6 Free';
  font-weight: 900;
  position: absolute;
  top: -10px;
  left: 50%;
  transform: translateX(-50%);
  width: 22px; height: 22px;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, rgba(10,14,23,0.96), rgba(20,28,44,0.96));
  border: 1.4px solid rgba(168,85,247,0.7);
  border-radius: 50%;
  color: var(--primary);
  font-size: 0.74rem;
  box-shadow:
    0 0 12px rgba(168,85,247,0.45),
    inset 0 1px 0 rgba(255,255,255,0.15);
  z-index: 4;
  pointer-events: none;
}

/* ─── بطاقة السؤال (glassmorphism) ─── */
.final-req-question {
  color: #fff;
  font-size: 0.88rem;
  font-weight: 700;
  text-align: center;
  margin: 6px 0 10px;
  line-height: 1.4;
  text-shadow: 0 1px 4px rgba(0,0,0,0.65);
  background: linear-gradient(135deg,
    rgba(0,64,82,0.40) 0%,
    rgba(168,85,247,0.18) 50%,
    rgba(0,64,82,0.40) 100%);
  border: 1px solid rgba(168,85,247,0.55);
  border-radius: 12px;
  padding: 10px 12px;
  position: relative;
  -webkit-backdrop-filter: blur(8px);
  backdrop-filter: blur(8px);
  box-shadow:
    0 4px 16px rgba(168,85,247,0.18),
    inset 0 1px 0 rgba(255,255,255,0.06);
  white-space: normal;
  overflow: visible;
  letter-spacing: 0.1px;
}

/* فاصل دقيق + sparkle بين السؤال والأزرار */
.final-req-question::before {
  content: '';
  position: absolute;
  bottom: -13px;
  left: 22%; right: 22%;
  height: 1px;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(168,85,247,0.45) 50%,
    transparent 100%);
}
.final-req-question::after {
  content: '✦';
  position: absolute;
  bottom: -19px;
  left: 50%;
  transform: translateX(-50%);
  color: rgba(168,85,247,0.75);
  font-size: 0.66rem;
  text-shadow: 0 0 6px rgba(168,85,247,0.5);
  background: linear-gradient(to right,
    transparent 0%,
    rgba(10,14,23,0.96) 30%,
    rgba(10,14,23,0.96) 70%,
    transparent 100%);
  padding: 0 8px;
  line-height: 1;
}

/* ─── صف الأزرار ─── */
.final-req-actions {
  display: flex;
  gap: 8px;
  width: 100%;
  margin-top: 14px;
}

/* ─── الزر الأساسي (pill premium) ─── */
.final-req-btn {
  border: none;
  border-radius: 18px;
  font-family: inherit;
  font-weight: 700;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 38px;
  padding: 8px 12px;
  line-height: 1.15;
  position: relative;
  overflow: hidden;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
  transition: transform 0.18s cubic-bezier(0.34,1.56,0.64,1),
              box-shadow 0.20s ease,
              filter 0.15s ease;
}

/* shimmer light sweep on hover */
.final-req-btn::before {
  content: '';
  position: absolute;
  top: 0; left: -60%;
  width: 50%; height: 100%;
  background: linear-gradient(90deg,
    transparent 0%,
    rgba(255,255,255,0.18) 50%,
    transparent 100%);
  transform: skewX(-18deg);
  transition: left 0.55s ease;
  pointer-events: none;
}
.final-req-btn:hover::before { left: 130%; }

/* زر القبول — أخضر premium */
.final-req-btn.accept {
  flex: 0 0 32%;
  font-size: 0.92rem;
  white-space: nowrap;
  background: linear-gradient(135deg, #059669 0%, #10b981 50%, #34d399 100%);
  color: #fff;
  box-shadow:
    0 3px 10px rgba(16,185,129,0.35),
    inset 0 1px 0 rgba(255,255,255,0.20),
    inset 0 -2px 0 rgba(0,0,0,0.18);
}
.final-req-btn.accept:hover {
  transform: translateY(-1px);
  box-shadow:
    0 5px 18px rgba(16,185,129,0.50),
    inset 0 1px 0 rgba(255,255,255,0.25),
    inset 0 -2px 0 rgba(0,0,0,0.18);
}
.final-req-btn.accept:active {
  transform: translateY(0) scale(0.96);
  box-shadow: 0 2px 6px rgba(16,185,129,0.30);
}

/* زر الرفض — وردي أنيق */
.final-req-btn.reject {
  flex: 1 1 0;
  font-size: 0.74rem;
  white-space: normal;
  word-break: break-word;
  text-align: center;
  background: linear-gradient(135deg, #be185d 0%, #db2777 50%, #ec4899 100%);
  color: #fff;
  box-shadow:
    0 3px 10px rgba(219,39,119,0.32),
    inset 0 1px 0 rgba(255,255,255,0.18),
    inset 0 -2px 0 rgba(0,0,0,0.18);
}
.final-req-btn.reject:hover {
  transform: translateY(-1px);
  box-shadow:
    0 5px 18px rgba(219,39,119,0.45),
    inset 0 1px 0 rgba(255,255,255,0.22),
    inset 0 -2px 0 rgba(0,0,0,0.18);
}
.final-req-btn.reject:active {
  transform: translateY(0) scale(0.96);
  box-shadow: 0 2px 6px rgba(219,39,119,0.30);
}

.final-req-btn i { font-size: 0.86rem; }
.final-req-btn.reject i { font-size: 0.72rem; }

/* الـdisabled */
.final-req-btn:disabled {
  opacity: 0.55;
  cursor: not-allowed;
  filter: grayscale(0.4);
  transform: none !important;
}
.final-req-btn:disabled::before { display: none; }
.final-req-btn:disabled:hover {
  filter: grayscale(0.4);
  transform: none;
  box-shadow: 0 2px 6px rgba(0,0,0,0.3);
}

/* ─── الحالات المغلقة (student_accepted / invoice_sent) ─── */
.final-req-overlay.state-locked {
  background: linear-gradient(to bottom,
    rgba(10,14,23,0) 0%,
    rgba(10,14,23,0.70) 30%,
    rgba(10,14,23,0.95) 100%);
  -webkit-backdrop-filter: blur(3px);
  backdrop-filter: blur(3px);
  justify-content: center;
}
/* في الحالة المغلقة لا نريد الأيقونة العلوية ولا خط الفصل */
.final-req-overlay.state-locked::before,
.final-req-overlay.state-locked::after { display: none; }

.final-req-state-msg {
  color: #fff;
  font-size: 0.78rem;
  font-weight: 600;
  text-align: center;
  margin: 0;
  line-height: 1.4;
  text-shadow: 0 1px 4px rgba(0,0,0,0.7);
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
  padding: 0 4px;
}
.final-req-state-msg i { color: var(--primary); margin-left: 4px; }

.final-req-cooldown {
  display: block;
  color: #fbcfe8;
  font-size: 0.68rem;
  font-weight: 600;
  text-align: center;
  margin: 4px 0 6px;
  font-variant-numeric: tabular-nums;
  text-shadow: 0 1px 3px rgba(0,0,0,0.6);
  letter-spacing: -0.1px;
}

/* ─── الجوال الصغير ─── */
@media (max-width: 360px) {
  .final-req-overlay {
    min-height: 48%;
    padding: 14px 9px 10px;
  }
  .final-req-question {
    font-size: 0.76rem;
    padding: 7px 9px;
    border-radius: 10px;
    margin: 4px 0 7px;
  }
  .final-req-actions { margin-top: 11px; gap: 6px; }
  .final-req-btn { min-height: 34px; padding: 6px 8px; }
  .final-req-btn.accept { font-size: 0.82rem; flex: 0 0 30%; }
  .final-req-btn.reject { font-size: 0.66rem; }
  .final-req-btn i { font-size: 0.76rem; }
  /* إخفاء أيقونة الساعة في الزر الـreject لتوفير مساحة للنص */
  .final-req-btn.reject i { display: none; }
}

/* ─── احترام prefers-reduced-motion ─── */
@media (prefers-reduced-motion: reduce) {
  .final-req-btn,
  .final-req-btn::before {
    transition: none !important;
    animation: none !important;
  }
  .final-req-btn:hover { transform: none !important; }
  .final-req-btn::before { display: none !important; }
}

/* ═══════════════════════════════════════════════════════════════════════
   صفحة الخدمات — بطاقات الخدمات (المرحلة 2)
   namespace: svc-*  |  مستقل تماماً عن باقي البطاقات
   ═══════════════════════════════════════════════════════════════════════ */
.svc-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 12px;
  margin-top: 4px;
}
.svc-card {
  position: relative;
  background: var(--bg-card);
  border: 1px solid var(--border-color);
  border-radius: var(--radius);
  padding: 18px 14px 16px;
  cursor: pointer;
  font-family: inherit;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  min-height: 158px;
  overflow: hidden;
  transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;
  contain: layout style;
  /* إعادة ضبط نمط الزر الافتراضي */
  color: inherit;
  outline: none;
  -webkit-tap-highlight-color: transparent;
}
.svc-card::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 2px;
  background: var(--gradient);
  opacity: 0;
  transition: opacity 0.25s ease;
}
.svc-card:hover {
  transform: translateY(-3px);
  border-color: rgba(168,85,247,0.4);
  box-shadow: 0 6px 22px rgba(168,85,247,0.14);
}
.svc-card:hover::before { opacity: 1; }
.svc-card:active { transform: translateY(-1px) scale(0.98); }
.svc-card:focus-visible {
  border-color: var(--primary);
  box-shadow: 0 0 0 3px rgba(168,85,247,0.25);
}
.svc-icon {
  width: 54px; height: 54px;
  border-radius: 14px;
  background: linear-gradient(135deg, rgba(0,64,82,0.55), rgba(168,85,247,0.22));
  border: 1px solid rgba(168,85,247,0.22);
  display: flex; align-items: center; justify-content: center;
  color: var(--primary);
  font-size: 1.45rem;
  margin-bottom: 12px;
  transition: transform 0.25s ease, background 0.25s ease, box-shadow 0.25s ease;
  overflow: hidden;
}
/* SVG inline / img داخل svc-icon — يأخذ كامل المساحة مع padding خفيف */
.svc-icon > svg,
.svc-icon > img {
  width: 100%;
  height: 100%;
  padding: 4px;
  box-sizing: border-box;
  display: block;
}
.svc-card:hover .svc-icon {
  transform: scale(1.07);
  background: linear-gradient(135deg, rgba(0,64,82,0.78), rgba(168,85,247,0.38));
  box-shadow: 0 4px 18px rgba(168,85,247,0.22);
}
.svc-name {
  font-size: 1rem;
  font-weight: 700;
  color: var(--text-primary);
  margin-bottom: 4px;
  line-height: 1.3;
}
.svc-desc {
  font-size: 0.78rem;
  color: var(--text-muted);
  line-height: 1.45;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}
.svc-badge {
  position: absolute;
  top: 9px;
  inset-inline-end: 9px;
  font-size: 0.62rem;
  font-weight: 700;
  padding: 3px 8px;
  border-radius: 8px;
  letter-spacing: 0.2px;
  line-height: 1.4;
  background: rgba(245,158,11,0.14);
  color: var(--warning);
  border: 1px solid rgba(245,158,11,0.32);
  pointer-events: none;
}
.svc-badge.svc-badge-external {
  background: rgba(139,149,165,0.14);
  color: var(--text-secondary);
  border-color: rgba(139,149,165,0.32);
}
.svc-badge.svc-badge-coming {
  background: rgba(245,158,11,0.14);
  color: var(--warning);
  border-color: rgba(245,158,11,0.32);
}
/* عرض بصري خفيف للخدمات قيد التطوير */
.svc-card.is-coming-soon .svc-icon { opacity: 0.86; }

/* الجوال: ابقاء عمودين مرتبَين */
@media (max-width: 380px) {
  .svc-grid { gap: 10px; }
  .svc-card { padding: 16px 10px 14px; min-height: 150px; }
  .svc-icon { width: 50px; height: 50px; font-size: 1.35rem; margin-bottom: 10px; }
  .svc-name { font-size: 0.95rem; }
  .svc-desc { font-size: 0.74rem; }
}

/* ═══════════════════════════════════════════════════════════════════════
   MOTION & POLISH (المرحلة 6) — تحسينات السلاسة
   ───────────────────────────────────────────────────────────────────────
   البنية التحتية ممتازة بالفعل (pageIn, cardEnter, stagger-card 1-8,
   skeleton+shimmer، h-btn:active، svc-card:active، content-visibility).
   هذه الكتلة تضيف فقط الناقص — بدون مكتبات وبدون JS:
     1) prefers-reduced-motion (مطلوب صراحةً)
     2) توهج زر تغيير الثيم (Ring متلوّن حسب الثيم)
     3) إصلاح transition للكروت (background-color كان لا يتحرك عند الثيم)
     4) easing ناعم cubic-bezier للحركات الرئيسية
     5) GPU hints محدودة (will-change فقط أثناء hover)
   كل ذلك CSS فقط — لا تغيير في JS، لا أثر على Supabase، لا على البوسترات.
   ═══════════════════════════════════════════════════════════════════════ */

/* (1) إصلاح transition للكروت — يضمن background-color يتحرك عند تبديل الثيم
       (هذه القاعدة في النهاية → تتجاوز كل التعريفات السابقة لـ.h-card و .svc-card) */
.h-card {
  transition:
    transform 0.2s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.2s ease,
    border-color 0.25s ease,
    background-color 0.35s ease,
    background 0.35s ease,
    color 0.3s ease;
}
.svc-card {
  transition:
    transform 0.22s cubic-bezier(0.4, 0, 0.2, 1),
    box-shadow 0.22s ease,
    border-color 0.25s ease,
    background-color 0.35s ease,
    background 0.35s ease,
    color 0.3s ease;
}
.svc-icon {
  transition:
    transform 0.22s cubic-bezier(0.4, 0, 0.2, 1),
    background-color 0.35s ease,
    background 0.35s ease,
    border-color 0.25s ease,
    box-shadow 0.25s ease,
    color 0.3s ease;
}

/* (2) توهج زر تغيير الثيم — Ring متلوّن حسب الثيم النشط
       يكمل دوران الأيقونة الموجود (.is-changing) بتأثير glow 350ms */
.theme-toggle-btn.is-changing {
  box-shadow: 0 0 0 4px rgba(127,127,127,0.18);
}
:root[data-theme="light"] .theme-toggle-btn.is-changing {
  box-shadow: 0 0 0 4px rgba(124,58,237,0.32);
}

/* (3) GPU hints محدودة — will-change فقط أثناء التفاعل (لا تكلفة دائمة) */
.h-card:hover,
.svc-card:hover,
.h-btn:hover,
.nav-icon-request:hover {
  will-change: transform;
}

/* (4) press refinement لزر الثيم نفسه (الأزرار الأخرى مغطّاة سابقاً) */
.theme-toggle-btn:active {
  transform: scale(0.92);
  transition-duration: 0.08s;
}

/* (5) ★ احترام تفضيل تقليل الحركة (مطلوب صراحة في الطلب) ★
       يعطّل/يقلّل كل الحركات للمستخدمين الذين فعّلوا
       prefers-reduced-motion في إعدادات نظامهم
       (Windows: Reduce motion، iOS: Reduce Motion، macOS: Reduce motion) */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ═══ نهاية تحسينات السلاسة (المرحلة 6) ═══ */

/* ═══════════════════════════════════════════════════════════════════════
   PHASE 7 FIXES — إصلاحات الفحص النهائي الشامل
   ───────────────────────────────────────────────────────────────────────
   كل القواعد هنا overrides فقط — لا تكسر شيء، تُصلح فقط.
   تُعالج 5 bugs اكتُشفت بالفحص النهائي حيث ألوان السماوية الصريحة لم تُغطَّ:
     1) .poster-card:hover (بطاقات المواد) — border + box-shadow صريح
     2) .vid-bookmark-item:hover (علامات الفيديو) — background صريح
     3) .svc-card:focus-visible (focus ring للوصول) — box-shadow صريح
     4) .poster-action-btn.request (زر الطلب على البطاقة) — gradient صريح
     5) .h-notif-banner (الإشعارات الديناميكية) — class جديدة بديلة عن inline
   ═══════════════════════════════════════════════════════════════════════ */

/* (5) كلاس بديلة للإشعارات الديناميكية (سابقاً كانت inline cyan) */
.h-notif-banner {
  background: linear-gradient(135deg, rgba(168,85,247,0.10), rgba(168,85,247,0.03));
  border: 1px solid rgba(168,85,247,0.20);
}
:root[data-theme="light"] .h-notif-banner {
  background: linear-gradient(135deg, rgba(124,58,237,0.08), rgba(124,58,237,0.02));
  border: 1px solid rgba(124,58,237,0.20);
}

/* (1) .poster-card:hover — يتجاوز السماوي الصريح بألوان الثيم */
:root[data-theme="light"] .poster-card:hover {
  border-color: rgba(124,58,237,0.40);
  box-shadow: 0 16px 48px rgba(15,23,42,0.18), 0 0 0 1px rgba(124,58,237,0.25);
}

/* (2) .vid-bookmark-item:hover — يتجاوز background السماوي */
:root[data-theme="light"] .vid-bookmark-item:hover { background: rgba(124,58,237,0.06); }

/* (3) .svc-card:focus-visible — focus ring متلوّن (accessibility) */
:root[data-theme="light"] .svc-card:focus-visible { box-shadow: 0 0 0 3px rgba(124,58,237,0.25); }

/* (4) .poster-action-btn.request — زر طلب البطاقة بتدرج الثيم */
:root[data-theme="light"] .poster-action-btn.request {
  background: linear-gradient(135deg, #5b21b6 0%, #7c3aed 100%);
  box-shadow: 0 4px 16px rgba(124,58,237,0.30);
}

/* ═══ الثيم البنفسجي — مقابلات قواعد الوردي في المرحلتين 6 و7 ═══ */
:root[data-theme="purple"] .theme-toggle-btn.is-changing {
  box-shadow: 0 0 0 4px rgba(168,85,247,0.32);
}
:root[data-theme="purple"]  .h-notif-banner {
  background: linear-gradient(135deg, rgba(168,85,247,0.10), rgba(168,85,247,0.03));
  border: 1px solid rgba(168,85,247,0.22);
}
:root[data-theme="purple"]  .poster-card:hover {
  border-color: rgba(168,85,247,0.40);
  box-shadow: 0 16px 48px rgba(0,0,0,0.45), 0 0 0 1px rgba(168,85,247,0.25);
}
:root[data-theme="purple"]  .vid-bookmark-item:hover { background: rgba(168,85,247,0.06); }
:root[data-theme="purple"]  .svc-card:focus-visible { box-shadow: 0 0 0 3px rgba(168,85,247,0.28); }
:root[data-theme="purple"]  .poster-action-btn.request {
  background: linear-gradient(135deg, #4c1d95 0%, #a855f7 100%);
  box-shadow: 0 4px 16px rgba(168,85,247,0.30);
}

/* ═══ نهاية إصلاحات الفحص النهائي (المرحلة 7) ═══ */

/* ═══════════════════════════════════════════════════════════════════════
   PHASE 8 — أنيميشن أيقونات SVG في خدماتي
   ───────────────────────────────────────────────────────────────────────
   - drawing animation: الخطوط ترسم نفسها عند ظهور البطاقة (مرة واحدة)
   - hover animation: تأثير لطيف عند تمرير الماوس (نبض/توهج)
   - يحترم prefers-reduced-motion (مُعالج في المرحلة 6)
   - لا يلمس أي JS — CSS فقط
   ═══════════════════════════════════════════════════════════════════════ */

/* (1) الرسم الذاتي للخطوط والمنحنيات داخل svc-icon
       يستخدم stroke-dasharray + dashoffset لإحساس "الرسم اللحظي" */
@keyframes svcIconDraw {
  0%   { stroke-dashoffset: 200; opacity: 0; }
  30%  { opacity: 1; }
  100% { stroke-dashoffset: 0; opacity: 1; }
}

/* (2) ظهور تدريجي للعناصر المُلوّنة (fill) داخل svc-icon
       circle/rect/path المعبّأة بألوان تظهر بـfade-in */
@keyframes svcIconFadeIn {
  0%   { opacity: 0; transform: scale(0.85); }
  100% { opacity: 1; transform: scale(1); }
}

/* (3) لمعان بسيط عند hover — للأيقونة الكاملة */
@keyframes svcIconShimmer {
  0%, 100% { filter: brightness(1) drop-shadow(0 0 0 transparent); }
  50%      { filter: brightness(1.08) drop-shadow(0 2px 8px rgba(251,191,36,0.25)); }
}

/* تطبيق الأنيميشن على عناصر الـSVG عند ظهور البطاقة لأول مرة
   نستهدف فقط الـSVG داخل svc-icon (لا تأثير على أيقونات أخرى) */
.svc-card .svc-icon > svg {
  transform-origin: center;
  transition: transform 0.32s cubic-bezier(0.34, 1.56, 0.64, 1);
}

/* خطوط الطبشور / المنحنيات / الـpaths الداخلية ترسم نفسها */
.svc-card .svc-icon > svg line,
.svc-card .svc-icon > svg path[stroke] {
  stroke-dasharray: 200;
  stroke-dashoffset: 200;
  animation: svcIconDraw 1.1s ease-out forwards;
  animation-delay: 0.18s;
}

/* الدوائر/المستطيلات المُعبّأة (fill) تظهر بـfade-in scale */
.svc-card .svc-icon > svg circle[fill]:not([fill="none"]),
.svc-card .svc-icon > svg rect[fill]:not([fill="none"]),
.svc-card .svc-icon > svg ellipse[fill],
.svc-card .svc-icon > svg path[fill]:not([fill="none"]) {
  transform-origin: center;
  transform-box: fill-box;
  animation: svcIconFadeIn 0.6s ease-out backwards;
  animation-delay: 0.05s;
}

/* عند hover — لمعان + تكبير خفيف للـSVG */
.svc-card:hover .svc-icon > svg {
  transform: scale(1.06) rotate(-2deg);
  animation: svcIconShimmer 1.4s ease-in-out;
}

/* عند الضغط — انكماش لطيف */
.svc-card:active .svc-icon > svg {
  transform: scale(0.96);
  transition-duration: 0.1s;
}

/* احترام prefers-reduced-motion: إيقاف كل الأنيميشنات */
@media (prefers-reduced-motion: reduce) {
  .svc-card .svc-icon > svg line,
  .svc-card .svc-icon > svg path[stroke],
  .svc-card .svc-icon > svg circle[fill]:not([fill="none"]),
  .svc-card .svc-icon > svg rect[fill]:not([fill="none"]),
  .svc-card .svc-icon > svg ellipse[fill],
  .svc-card .svc-icon > svg path[fill]:not([fill="none"]) {
    animation: none !important;
    stroke-dashoffset: 0 !important;
    opacity: 1 !important;
    transform: none !important;
  }
  .svc-card:hover .svc-icon > svg {
    animation: none !important;
    transform: none !important;
  }
}

/* ═══ نهاية أنيميشن أيقونات الخدمات (المرحلة 8) ═══ */

/* ═══════════════════════════════════════════════════════════════════════
   PHASE 9 — رسالة "البيانات غير قابلة للتعديل" في صفحة حسابي
   ═══════════════════════════════════════════════════════════════════════ */
.profile-readonly-notice {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  padding: 11px 13px;
  margin-bottom: 18px;
  background: linear-gradient(135deg,
    rgba(0,64,82,0.32) 0%,
    rgba(168,85,247,0.10) 100%);
  border: 1px solid rgba(168,85,247,0.45);
  border-radius: 11px;
  color: var(--text-primary);
  font-size: 0.78rem;
  line-height: 1.55;
  box-shadow:
    0 2px 8px rgba(168,85,247,0.12),
    inset 0 1px 0 rgba(255,255,255,0.05);
}
.profile-readonly-notice i {
  color: var(--primary);
  font-size: 1rem;
  margin-top: 2px;
  flex-shrink: 0;
}
.profile-readonly-notice span {
  flex: 1;
}
/* ═══ نهاية المرحلة 9 ═══ */

/* ════════════════════════════════════════════════════════════════════════
   PRIVACY TILE + PAGE — شروط الاشتراك وسياسة الخصوصية
   مربع في «حسابي» (قبل تسجيل الخروج) + صفحة العرض. ثيم داكن زجاجي + لمسة ذهبية.
   ════════════════════════════════════════════════════════════════════════ */
.privacy-tile {
  width: 100%;
  margin-top: 20px;
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 15px 16px;
  background: var(--bg-card);
  border: 1px solid rgba(251, 191, 36, 0.28);
  border-radius: var(--radius);
  color: var(--text-primary);
  cursor: pointer;
  font-family: inherit;
  text-align: start;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.18);
  transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease, background 0.22s ease;
  -webkit-tap-highlight-color: transparent;
}
.privacy-tile:hover {
  transform: translateY(-2px);
  border-color: rgba(251, 191, 36, 0.6);
  background: linear-gradient(135deg, rgba(251, 191, 36, 0.06), rgba(217, 119, 6, 0.04)), var(--bg-card);
  box-shadow: 0 8px 22px rgba(251, 191, 36, 0.14);
}
.privacy-tile:active { transform: translateY(0); }
.privacy-tile-ic {
  flex-shrink: 0;
  width: 40px;
  height: 40px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 11px;
  color: #fbbf24;
  background: rgba(251, 191, 36, 0.1);
  border: 1px solid rgba(251, 191, 36, 0.22);
}
.privacy-tile-ic svg { width: 22px; height: 22px; }
.privacy-tile-txt {
  flex: 1;
  font-weight: 600;
  font-size: 0.98rem;
  line-height: 1.4;
}
.privacy-tile-arrow {
  flex-shrink: 0;
  color: var(--text-muted);
  font-size: 1.5rem;
  line-height: 1;
  transition: color 0.22s ease, transform 0.22s ease;
}
.privacy-tile:hover .privacy-tile-arrow { color: #fbbf24; transform: translateX(-3px); }

/* صفحة العرض — محتوى موثوق من الأدمن */
.privacy-body {
  color: var(--text-primary);
  font-size: 1rem;
  line-height: 1.95;
}
.privacy-body p { margin: 0 0 14px; }
.privacy-body h2, .privacy-body h3 {
  color: var(--text-primary);
  margin: 20px 0 10px;
  line-height: 1.5;
}
.privacy-body h2 { font-size: 1.18rem; }
.privacy-body h3 { font-size: 1.05rem; }
.privacy-body ul, .privacy-body ol { padding-inline-start: 22px; margin: 0 0 14px; }
.privacy-body li { margin-bottom: 6px; }
.privacy-body a { color: var(--primary); text-decoration: underline; word-break: break-word; }
.privacy-body img {
  max-width: 100%;
  height: auto;
  border-radius: 10px;
  margin: 10px 0;
  display: block;
}
.privacy-body strong { color: var(--text-primary); font-weight: 700; }

/* --------------- source: assets/css/courses-shelf.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * COURSES SHELF — STUDENT CSS — خانة «الدورات» الموحّدة ([UNIFY-CLEANUP 2026-07-05])
 * ────────────────────────────────────────────────────────────────────────────
 * خلَف paid-content.css المحذوف: أُبقيت حصراً قواعد pcs-* التي تستهلكها صفحة
 * «الدورات» (page-paid-courses الثابتة في index.html) ورفّ الدورات dev-shelf.js
 * — منسوخة حرفياً من الملف القديم (نفس الأسماء حتى تبقى تجاوزات الثيمات في
 * 104/105/h-upgrade/100-performance فاعلة كما هي). قواعد الشراء/الشيت حُذفت
 * مع نظام المحتوى المدفوع. للإزالة: احذف <link> هذا من index.html.
 * ════════════════════════════════════════════════════════════════════════════ */

/* هيدر صفحة «الدورات» */
.pcs-page-header {
  padding:24px 16px 12px; text-align:center;
}
.pcs-page-title {
  font-size:1.45rem; font-weight:800; margin:0 0 6px;
  color:var(--primary, #d4af37);
  display:inline-flex; align-items:center; gap:10px;
}
.pcs-page-sub { color:var(--muted, #94a3b8); font-size:.88rem; }
.pcs-host { padding:0 12px 28px; }
.pcs-section { margin-bottom:24px; }
.pcs-section-h {
  font-size:1.02rem; font-weight:700; color:var(--text, #e5e7eb);
  margin:14px 4px 10px; display:flex; align-items:center; gap:8px;
}
.pcs-section-h i { color:var(--primary, #d4af37); }

/* بوستر — نُضيف فوق .poster-card الموجودة في main.css */
.pcs-poster { position:relative; }
.pcs-skel-poster { aspect-ratio:9/16; border-radius:18px; }

/* شارات الحالة على البوستر */
.pcs-st-owned {
  background:linear-gradient(135deg, rgba(34,197,94,.95), rgba(22,163,74,.95)) !important;
  color:#fff !important;
}
.pcs-st-pending {
  background:linear-gradient(135deg, rgba(212,175,55,.95), rgba(184,134,11,.95)) !important;
  color:#000 !important;
}
.pcs-st-rej {
  background:linear-gradient(135deg, rgba(239,68,68,.95), rgba(220,38,38,.95)) !important;
  color:#fff !important;
}

/* شارة «مجاني» على البوستر (أعلى-يسار) */
.pcs-price-tag {
  position:absolute; top:10px; right:10px; z-index:3;
  background:rgba(212,175,55,.95); color:#000;
  font-size:.72rem; font-weight:800; padding:4px 9px; border-radius:10px;
  display:inline-flex; align-items:center; gap:5px;
  box-shadow:0 4px 12px rgba(0,0,0,.4);
}
.pcs-price-tag.free { background:rgba(34,197,94,.95); color:#fff; }

/* زر «افتح الدورة» — variant إضافي فوق .poster-action-btn في main.css */
.poster-action-btn.open {
  background:linear-gradient(135deg, #22c55e, #16a34a); color:#fff;
}
/* 🪽 [SILK-GLIDE 2026-07-17] الثيم الثلجي — إصلاحات تناسق الألوان (رقم 5)
   var(--text,#e5e7eb) وvar(--muted,#94a3b8) غير معرَّفين ⇒ عنوان القسم رمادي
   فاتح شبه مختفٍ على خلفية فاتحة. للتراجع: احذف هذه الكتلة. */
:root[data-theme="light"] .pcs-section-h{color:#0f172a;}
:root[data-theme="light"] .pcs-page-sub{color:#475569;}


/* --------------- source: assets/css/waiting-lessons.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * WAITING LESSONS — STUDENT CSS — بطاقة «مقطع انتظار» سينمائية
 * ────────────────────────────────────────────────────────────────────────────
 * البطاقة تأخذ نفس بنية .course-card الموجودة (نفس الأبعاد، نفس .course-thumb،
 * نفس .course-info) — ونضيف الكلاس المعدِّل .lesson-card--waiting لاستهداف
 * التفاصيل المختلفة (لا فيديو، شارة قريباً، مؤقت/نسبة).
 *
 * الهوية: ذهبي #f59e0b/#fbbf24 + كحلي #0b1726 + أبيض، احترام prefers-reduced-motion.
 * كل المحدّدات بـ .lesson-card--waiting أو بدائي .wl- (waiting-lesson-).
 * ════════════════════════════════════════════════════════════════════════════ */

.lesson-card--waiting{
  display:flex;background:var(--bg-card,#15212e);border-radius:12px;
  overflow:hidden;border:1px solid var(--border-color,#1f2c3a);
  margin-bottom:8px;position:relative;cursor:default;
  contain:layout style;
  transition:transform .2s ease, box-shadow .2s ease;
}
.lesson-card--waiting:hover{
  box-shadow:0 4px 20px rgba(245,158,11,0.18);
  transform:translateY(-1px);
}

/* ── الثمبنيل (نفس أبعاد المقطع العادي) ───────────────────────────────────── */
.lesson-card--waiting .course-thumb{
  width:140px;min-width:140px;height:79px;
  background:var(--border-color,#1f2c3a);overflow:hidden;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  margin:auto 0;margin-left:10px;position:relative;
  isolation:isolate;
}
.lesson-card--waiting .course-thumb img{
  width:100%;height:100%;object-fit:cover;
  filter:saturate(0.85) brightness(0.92);
}
.lesson-card--waiting .course-thumb .wl-thumb-ph{
  width:100%;height:100%;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#1a2535,#0e1822);
  color:#f59e0b;font-size:1.6rem;
}

/* تدرّج داكن خفيف فوق الثمبنيل لإيحاء «قيد التجهيز» */
.lesson-card--waiting .course-thumb::before{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:linear-gradient(135deg, rgba(11,23,38,0.32), rgba(11,23,38,0.06) 60%);
}

/* شعاع لمعان (shimmer) يمر ببطء */
.lesson-card--waiting .course-thumb::after{
  content:"";position:absolute;top:0;bottom:0;left:-60%;width:60%;z-index:2;
  background:linear-gradient(110deg,
    rgba(255,255,255,0) 0%,
    rgba(255,255,255,0.07) 40%,
    rgba(255,255,255,0.22) 50%,
    rgba(255,255,255,0.07) 60%,
    rgba(255,255,255,0) 100%);
  transform:skewX(-18deg);
  animation:waitShimmerSweep 2.6s ease-in-out infinite;
  pointer-events:none;
}

/* أيقونة وسطية خفيفة (ساعة رملية) فوق الثمبنيل */
.lesson-card--waiting .wl-center-icon{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  z-index:3;color:#fbbf24;font-size:1.6rem;
  filter:drop-shadow(0 0 6px rgba(0,0,0,0.55));
  animation:waitCenterPulse 2.4s ease-in-out infinite;
  pointer-events:none;
}

/* شارة «قريباً» في زاوية البطاقة */
.lesson-card--waiting .wl-badge{
  position:absolute;top:8px;right:8px;z-index:4;
  background:linear-gradient(135deg,#f59e0b,#fbbf24);
  color:#0b1726;font-weight:700;font-size:0.72rem;
  padding:3px 10px;border-radius:10px;
  box-shadow:0 2px 8px rgba(245,158,11,0.45);
  animation:waitBadgePulse 2s ease-in-out infinite;
  letter-spacing:0.5px;
}
.lesson-card--waiting .wl-badge i{margin-left:4px;font-size:0.7rem;}

/* ── محتوى المعلومات (يحاكي .course-info) ─────────────────────────────────── */
.lesson-card--waiting .course-info{
  flex:1;padding:10px 12px;display:flex;flex-direction:column;justify-content:center;min-width:0;
}
.lesson-card--waiting .c-title{
  font-weight:600;font-size:0.95rem;margin-bottom:4px;
  color:var(--text-primary,#fff);
  display:flex;align-items:center;gap:6px;flex-wrap:wrap;
}
.lesson-card--waiting .c-desc{
  font-size:0.8rem;color:var(--text-muted,#94a3b8);margin-bottom:6px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* ── منطقة الفوتر (مكان زر التشغيل/المدة عادةً) ──────────────────────────── */
.lesson-card--waiting .wl-foot{
  margin-top:2px;
}

/* وضع المؤقت — شرائح رقمية */
.lesson-card--waiting .wl-cd{
  display:flex;align-items:center;gap:4px;flex-wrap:wrap;
}
.lesson-card--waiting .wl-cd-label{
  font-size:0.72rem;color:var(--text-muted,#94a3b8);margin-left:6px;
}
.lesson-card--waiting .wl-cd-chip{
  background:linear-gradient(180deg,#0e1d2c,#15293c);
  color:#fbbf24;border:1px solid rgba(245,158,11,0.18);
  border-radius:6px;padding:2px 7px;min-width:34px;text-align:center;
  font-weight:700;font-size:0.84rem;letter-spacing:0.3px;
  display:inline-flex;flex-direction:column;align-items:center;line-height:1;
}
.lesson-card--waiting .wl-cd-chip small{
  font-size:0.58rem;font-weight:500;color:rgba(255,255,255,0.42);margin-top:2px;
  letter-spacing:0.4px;
}
.lesson-card--waiting .wl-cd-sep{
  color:#f59e0b;font-weight:700;font-size:0.9rem;padding:0 1px;
  animation:waitCountdownBlink 1s steps(2,start) infinite;
}

/* وضع النسبة — شريط تقدم */
.lesson-card--waiting .wl-pct{
  display:flex;align-items:center;gap:8px;
}
.lesson-card--waiting .wl-pct-bar{
  position:relative;flex:1;height:8px;border-radius:6px;
  background:rgba(255,255,255,0.06);overflow:hidden;
  border:1px solid rgba(245,158,11,0.12);
}
.lesson-card--waiting .wl-pct-fill{
  position:absolute;top:0;bottom:0;right:0;
  background:linear-gradient(90deg,#f59e0b,#fbbf24);
  border-radius:6px;width:0%;
  animation:waitBarFill .8s ease-out both;
}
.lesson-card--waiting .wl-pct-fill::after{
  content:"";position:absolute;top:0;bottom:0;left:-40%;width:40%;
  background:linear-gradient(90deg,
    rgba(255,255,255,0) 0%,
    rgba(255,255,255,0.45) 50%,
    rgba(255,255,255,0) 100%);
  animation:waitBarShine 2.2s ease-in-out infinite;
}
.lesson-card--waiting .wl-pct-num{
  font-weight:700;color:#fbbf24;font-size:0.86rem;min-width:54px;text-align:left;
}
/* 🪽 [SILK-GLIDE 2026-07-17] الثيم الثلجي — إصلاحات تناسق الألوان (رقم 9)
   شرائح العد التنازلي بتدرج كحلي صلب = مربعات داكنة وسط بطاقة بيضاء، وشريط
   النسبة أبيض شفاف على أبيض = مسار مختفٍ تماماً. للتراجع: احذف هذه الكتلة. */
:root[data-theme="light"] .lesson-card--waiting .wl-cd-chip{background:linear-gradient(180deg,#fffbeb,#fef3c7);color:#92400e;border-color:rgba(217,119,6,.35);}
:root[data-theme="light"] .lesson-card--waiting .wl-cd-chip small{color:rgba(120,53,15,.65);}
:root[data-theme="light"] .lesson-card--waiting .wl-pct-bar{background:rgba(15,23,42,.08);border-color:rgba(217,119,6,.25);}
:root[data-theme="light"] .lesson-card--waiting .wl-pct-num{color:#b45309;}

/* حالة «نزل المقطع — حدّث الصفحة» */
.lesson-card--waiting.is-released .wl-foot{
  display:flex;align-items:center;gap:10px;
}
.lesson-card--waiting.is-released .wl-released-msg{
  color:#10b981;font-weight:600;font-size:0.86rem;
}
.lesson-card--waiting.is-released .wl-released-btn{
  background:linear-gradient(135deg,#10b981,#34d399);color:#0b1726;
  border:none;padding:6px 12px;border-radius:8px;font-weight:700;cursor:pointer;
  font-family:inherit;font-size:0.82rem;
}

/* ── الأنيميشن ──────────────────────────────────────────────────────────── */
/* 🪽 [SILK-GLIDE 2026-07-17 R1] كان يحرّك left (خاصية layout كل إطار) — أُعيدت كتابته
   بـtransform:translateX (compositor-only) بنفس المدى البصري حرفياً:
   left:-60%→120% = إزاحة 180% من عرض الحاوية = 300% من عرض العنصر (عرضه 60%).
   skewX(-18deg) يُكرَّر داخل الكيفريم لأن transform هنا يدهس skew الأساس في
   .course-thumb::after — وترتيب skewX/translateX متكافئ رياضياً لإزاحة X صرفة.
   للتراجع: أعد الكيفريمات إلى { left:-60% } / { left:120% } بلا transform. */
@keyframes waitShimmerSweep{
  0%   { transform:skewX(-18deg) translateX(0); }
  60%  { transform:skewX(-18deg) translateX(300%); }
  100% { transform:skewX(-18deg) translateX(300%); }
}
@keyframes waitBadgePulse{
  0%,100%{ transform:scale(1);   box-shadow:0 2px 8px rgba(245,158,11,0.45); }
  50%    { transform:scale(1.05); box-shadow:0 2px 14px rgba(245,158,11,0.65); }
}
@keyframes waitCenterPulse{
  0%,100%{ transform:scale(1);   opacity:0.85; }
  50%    { transform:scale(1.08); opacity:1; }
}
@keyframes waitCountdownBlink{
  0%,49%   { opacity:1; }
  50%,100% { opacity:0.25; }
}
@keyframes waitBarFill{
  from { width:0%; }
  to   { width:var(--wl-pct, 0%); }
}
/* 🪽 [SILK-GLIDE 2026-07-17 R1] كان يحرّك left — صار transform:translateX بنفس المدى:
   left:-40%→100% = إزاحة 140% من عرض الحاوية = 350% من عرض العنصر (عرضه 40%).
   للتراجع: أعد { left:-40% } / { left:100% } بلا transform. */
@keyframes waitBarShine{
  0%   { transform:translateX(0); }
  60%  { transform:translateX(350%); }
  100% { transform:translateX(350%); }
}

/* احترام تفضيل تقليل الحركة */
@media (prefers-reduced-motion: reduce){
  .lesson-card--waiting .course-thumb::after,
  .lesson-card--waiting .wl-center-icon,
  .lesson-card--waiting .wl-badge,
  .lesson-card--waiting .wl-cd-sep,
  .lesson-card--waiting .wl-pct-fill,
  .lesson-card--waiting .wl-pct-fill::after{
    animation:none;
  }
}

/* لمسة لطيفة عند الضغط على بطاقة لا تقبل النقر */
.lesson-card--waiting{ user-select:none; }
.lesson-card--waiting:active{ transform:scale(0.998); }

/* shimmer أيضاً على placeholder لو ما فيه ثمبنيل */
.lesson-card--waiting .wl-thumb-ph{ position:relative;overflow:hidden; }
.lesson-card--waiting .wl-thumb-ph i{ position:relative; z-index:2; }


/* --------------- source: assets/css/stats-hub.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
   stats-hub.css — 🟢 [STATS-UNIFY 2026-07-02] صفحة «إحصائيات» الطالب
   ────────────────────────────────────────────────────────────────────────────
   كل الألوان عبر متغيرات الثيم القائمة (--primary/--bg-card/--text-muted/
   --border-color...) فتعمل مع purple (الافتراضي) وlight تلقائياً — R9.
   الاستثناء الوحيد: الذهبي #f59e0b لتمييز سلاسل الرسوم (هوية ثابتة).
   RTL كامل + من 320px حتى الديسكتوب.
   ════════════════════════════════════════════════════════════════════════════ */

/* ── الإطار (overlay ملء الشاشة بنمط exss-ov لكن مُثيَّم بالمتغيرات) ─────── */
.sh-ov {
  position: fixed; inset: 0; z-index: 10000;
  background: var(--bg-page, #0a0e17);
  color: var(--text-primary, #e8eaed);
  overflow: auto; display: none;
  padding: 18px 16px 48px;
  font-family: inherit; direction: rtl;
}
.sh-ov.on { display: block; animation: shFade .25s ease; }
@keyframes shFade { from { opacity: 0; } to { opacity: 1; } }
.sh-box { max-width: 780px; margin: 0 auto; animation: shSlide .22s ease; }
@keyframes shSlide { from { opacity: 0; transform: translateX(14px); } to { opacity: 1; transform: none; } }

.sh-back {
  background: none; border: none; color: var(--primary);
  cursor: pointer; font-family: inherit; font-size: .9rem; font-weight: 700;
  padding: 8px 0; margin-bottom: 6px; display: flex; align-items: center; gap: 6px;
}

.sh-hero {
  background: var(--gradient, linear-gradient(135deg, #4c1d95, #a855f7));
  color: #fff;
  border-radius: 18px; padding: 22px; margin-bottom: 16px;
  position: relative; overflow: hidden;
}
.sh-hero::after {
  content: ""; position: absolute; top: -50px; left: -30px;
  width: 180px; height: 180px; border-radius: 50%;
  background: radial-gradient(circle, rgba(245,158,11,.22), transparent 65%);
}
.sh-hero h2 { margin: 0 0 4px; font-size: 1.35rem; }
.sh-hero p  { margin: 0; opacity: .88; font-size: .85rem; }

/* ── هيكل التحميل ────────────────────────────────────────────────────────── */
.sh-skel {
  height: 84px; border-radius: 14px; margin-bottom: 12px;
  background: linear-gradient(90deg, var(--bg-card, #111a27) 25%,
    var(--bg-input, #1a2536) 50%, var(--bg-card, #111a27) 75%);
  background-size: 200% 100%; animation: shShimmer 1.2s infinite;
}
.sh-skel.tall { height: 200px; }
@keyframes shShimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }

/* ── البطاقات ───────────────────────────────────────────────────────────── */
.sh-card {
  background: var(--bg-card, #111a27);
  border: 1px solid var(--border-color, #1e2a3a);
  border-radius: 16px; padding: 16px; margin-bottom: 14px;
}
.sh-title {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-weight: 800; font-size: .95rem; margin: 0 0 10px;
  color: var(--text-primary, #e8eaed);
}
.sh-title i { color: var(--primary); }
.sh-counter {
  margin-inline-start: auto; font-size: .68rem; font-weight: 600;
  color: var(--text-muted, #5a6577);
}

/* ── صف الأرقام التحفيزية (فوق stat-mini القائمة) ───────────────────────── */
.sh-stats-row {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 8px; margin-bottom: 14px;
}
@media (min-width: 640px) { .sh-stats-row { grid-template-columns: repeat(6, 1fr); } }
.sh-mini .stat-num small { font-size: .8rem; margin-inline-start: 1px; }
.sh-mini .stat-label { line-height: 1.5; }

/* ── الرسوم ─────────────────────────────────────────────────────────────── */
.sh-svg { width: 100%; height: 190px; display: block; }
/* الهيستوقرام: 14 يوماً على الجوال / 30 على الشاشات الأعرض */
.sh-hist-30 { display: none; }
@media (min-width: 640px) {
  .sh-hist-14 { display: none; }
  .sh-hist-30 { display: block; }
}
.sh-legend {
  display: flex; gap: 14px; flex-wrap: wrap;
  font-size: .72rem; color: var(--text-muted, #5a6577); margin-bottom: 6px;
}
.sh-legend span { display: flex; align-items: center; gap: 5px; }
.sh-dot { width: 9px; height: 9px; border-radius: 50%; display: inline-block; }

/* ── جدول متابعة المقاطع ────────────────────────────────────────────────── */
.sh-course { padding: 10px 0 4px; border-top: 1px dashed var(--border-color, #1e2a3a); }
.sh-course:first-of-type { border-top: none; padding-top: 2px; }
.sh-course-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.sh-course-title { font-weight: 700; font-size: .9rem; }
.sh-course-pct { font-weight: 800; font-size: .85rem; }

.sh-cells { display: flex; flex-wrap: wrap; gap: 5px; padding-bottom: 8px; }
.sh-cell {
  width: 22px; height: 22px; border-radius: 6px;
  border: 1px solid var(--border-color, #1e2a3a);
  background: var(--bg-input, #1a2536);
  color: transparent; font-size: .7rem; font-weight: 900;
  cursor: pointer; padding: 0; line-height: 1;
  transition: transform .15s ease, box-shadow .15s ease;
}
.sh-cell.todo { border-radius: 50%; opacity: .55; }
.sh-cell.done {
  background: linear-gradient(135deg, var(--success, #51cf66), #f59e0b);
  border-color: transparent; color: #fff;
  box-shadow: 0 0 8px rgba(245, 158, 11, .35);   /* توهج ذهبي/أخضر */
}
.sh-cell:hover { transform: scale(1.18); box-shadow: 0 0 10px rgba(245, 158, 11, .45); }
/* فوق 60 مقطعاً: خلايا 10px مضغوطة — تبقى شبكة كاملة، لا قصّ */
.sh-cells.compact { gap: 3px; }
.sh-cells.compact .sh-cell { width: 10px; height: 10px; border-radius: 3px; font-size: 0; }
.sh-cells.compact .sh-cell.todo { border-radius: 50%; }

/* ── الحالة الفارغة والأخطاء ────────────────────────────────────────────── */
.sh-empty {
  text-align: center; padding: 42px 16px;
  background: var(--bg-card, #111a27);
  border: 1px dashed var(--border-color, #1e2a3a); border-radius: 16px;
}
.sh-empty .ic { font-size: 2.2rem; margin-bottom: 8px; }
.sh-empty p { color: var(--text-secondary, #8b95a5); font-size: .95rem; margin: 0 0 14px; }
.sh-cta {
  background: var(--primary); color: #fff; border: none; border-radius: 12px;
  padding: 10px 20px; font-family: inherit; font-weight: 700; font-size: .9rem;
  cursor: pointer; box-shadow: var(--glow, none);
}
.sh-empty-line { color: var(--text-muted, #5a6577); font-size: .82rem; margin: 4px 0; }

/* ── ثيم light: ظلال أنعم على الخلايا المكتملة ─────────────────────────── */
:root[data-theme="light"] .sh-cell.done { box-shadow: 0 0 6px rgba(217, 119, 6, .3); }

/* ── تجاوب 320px: حشوات أصغر ────────────────────────────────────────────── */
@media (max-width: 360px) {
  .sh-ov { padding: 12px 10px 40px; }
  .sh-card { padding: 12px; }
  .sh-stats-row { grid-template-columns: repeat(2, 1fr); }
}


/* --------------- source: assets/css/h-upgrade.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * HAMDAN — Design Upgrade Layer (طبقة الترقية البصرية)
 * ────────────────────────────────────────────────────────────────────────────
 * طبقة تصميم غير مدمّرة — تُحمَّل آخر شيء بعد كل ملفات CSS الأخرى.
 *
 * ✅ لا تغيّر أي اسم class / id / data-attr / متغيّر CSS
 * ✅ لا تلمس أي JS — صفر تأثير على Supabase/Auth/Billing/Files/Logic
 * ✅ تستخدم نفس متغيرات الثيمات الموجودة (—primary, —bg-card …) كقاعدة
 * ✅ تعمل لكل الثيمات (dark / light / blue) بنفس البنية
 * ✅ تحترم prefers-reduced-motion بشكل صارم
 * ✅ Progressive enhancement — لو فشل أي مؤثر، الواجهة القديمة لا زالت تعمل
 * ✅ تحافظ على RTL — لا أيقونات/مسافات معكوسة
 *
 * فلسفة التصميم:
 *   - منصة تعليمية فاخرة (Premium Edu) بإحساس "لعبة تعليمية راقية"
 *   - Glassmorphism خفيف، ظلال طبقية ناعمة، حواف لمعان شعرية (hairline)
 *   - حركات خفيفة جداً (transform + opacity فقط، لا blur ثقيل)
 *   - تأكيد بصري على الـ primary لكل ثيم بدلاً من النيون الصارخ
 *
 * البنية:
 *   §1  Design Tokens (إضافية، تكميلية، لا تكسر الموجود)
 *   §2  Ambient Background (طبقات نور هادئة لكل ثيم)
 *   §3  Typography refinement
 *   §4  Top Nav / Support Banner / Bottom Nav
 *   §5  Cards (.h-card / .course-card / .svc-card / .peer-race-card)
 *   §6  Buttons (.h-btn, .nav-btn, .h-btn.outline, .h-btn.danger)
 *   §7  Inputs / Forms / Selects
 *   §8  Modals & Toasts
 *   §9  Posters & Skeletons
 *   §10 Dashboard hero & section titles & stats
 *   §11 Login / Register pages
 *   §12 Requests (steps & hero) refinement
 *   §13 Profile / Services page polish
 *   §14 Billing module polish (sbil-*)
 *   §15 Video page polish
 *   §16 Messages page polish
 *   §17 Mobile safeguards (no horiz overflow, larger tap targets)
 *   §18 Motion polish + prefers-reduced-motion
 *   §19 Print fallback
 *   §20 Telegram & utility modules touch-ups
 * ════════════════════════════════════════════════════════════════════════════ */


/* ─── §1  Design tokens ─────────────────────────────────────────────────── */

:root {
  /* shadows: طبقات (ambient + key + soft glow) — أخف من القديم لكن أعمق بصرياً */
  --hu-shadow-1:  0 1px 0 rgba(255,255,255,0.04) inset, 0 1px 2px rgba(0,0,0,0.20);
  --hu-shadow-2:  0 1px 0 rgba(255,255,255,0.05) inset, 0 6px 16px -6px rgba(0,0,0,0.30);
  --hu-shadow-3:  0 1px 0 rgba(255,255,255,0.06) inset, 0 14px 36px -12px rgba(0,0,0,0.50);
  --hu-shadow-4:  0 1px 0 rgba(255,255,255,0.06) inset, 0 24px 60px -18px rgba(0,0,0,0.60);

  /* hairline border highlight: حافة لمعان شعرية — تعطي إحساس "زجاج مصقول" */
  --hu-hairline: rgba(255,255,255,0.06);

  /* easings */
  --hu-ease:        cubic-bezier(.4, 0, .2, 1);
  --hu-ease-spring: cubic-bezier(.34, 1.45, .55, 1);

  /* radii — متناسقة عبر الواجهة */
  --hu-r-xs: 10px;
  --hu-r-sm: 12px;
  --hu-r-md: 16px;
  --hu-r-lg: 20px;
  --hu-r-xl: 24px;

  /* halo color حسب الثيم — يُستخدم في focus + hover */
  --hu-halo: rgba(168,85,247,0.18);
}
:root[data-theme="light"] {
  --hu-hairline: rgba(15,23,42,0.06);
  --hu-shadow-1: 0 1px 2px rgba(15,23,42,0.04);
  --hu-shadow-2: 0 1px 2px rgba(15,23,42,0.04), 0 6px 16px -6px rgba(15,23,42,0.10);
  --hu-shadow-3: 0 2px 4px rgba(15,23,42,0.05), 0 14px 36px -12px rgba(15,23,42,0.18);
  --hu-shadow-4: 0 4px 8px rgba(15,23,42,0.06), 0 24px 60px -18px rgba(15,23,42,0.25);
  --hu-halo: rgba(37,99,235,0.16);
}
:root[data-theme="purple"] { --hu-halo: rgba(168,85,247,0.18); }


/* ─── §2  Ambient background (طبقات نور هادئة) ──────────────────────────── */

/* الطبقة العلوية: بقعة spotlight خفيفة جداً (لا تربك العين، fixed، GPU-cheap) */
html body::before {
  content: "";
  position: fixed;
  inset: -20% -10% auto -10%;
  height: 85vh;
  pointer-events: none;
  z-index: 0;
  background:
    radial-gradient(60% 50% at 50% 0%, rgba(168,85,247,0.10), transparent 70%),
    radial-gradient(35% 35% at 85% 12%, rgba(168,85,247,0.06), transparent 75%);
  filter: saturate(1.05);
}
:root[data-theme="light"] body::before {
  background:
    radial-gradient(60% 50% at 50% 0%, rgba(37,99,235,0.05), transparent 70%),
    radial-gradient(35% 35% at 85% 12%, rgba(99,102,241,0.04), transparent 75%);
}
:root[data-theme="purple"] body::before {
  background:
    radial-gradient(60% 55% at 50% 0%, rgba(168,85,247,0.10), transparent 70%),
    radial-gradient(40% 40% at 85% 12%, rgba(109,40,217,0.07), transparent 75%);
}
/* المحتوى يطفو فوق طبقة الأمبيانت */
body > *:not(script):not(style) { position: relative; z-index: 1; }


/* ─── §3  Typography refinement ─────────────────────────────────────────── */

html { -webkit-text-size-adjust: 100%; }
body {
  font-family: 'Tajawal', 'Segoe UI', system-ui, -apple-system, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  font-feature-settings: "kern", "liga", "calt", "tnum";
  letter-spacing: -0.005em;
}
h1, h2, h3, h4, h5, h6,
.req-hero-title, .nav-title,
.section-title, .mf-title-h {
  letter-spacing: -0.012em;
  text-wrap: pretty;
}
p, .h-label, .req-hero-desc, .mf-sub { text-wrap: pretty; }
:focus-visible { outline: none; }


/* ─── §4  Top nav / Support banner / Bottom nav ─────────────────────────── */

.top-nav {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0) 60%),
    var(--bg-card);
  border-bottom: 1px solid var(--hu-hairline);
  backdrop-filter: blur(16px) saturate(1.1);
  -webkit-backdrop-filter: blur(16px) saturate(1.1);
  box-shadow:
    0 1px 0 rgba(255,255,255,0.04) inset,
    0 8px 24px -16px rgba(0,0,0,0.45);
}
:root[data-theme="light"] .top-nav {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.92), rgba(255,255,255,0.78));
  box-shadow:
    0 1px 0 rgba(255,255,255,0.9) inset,
    0 1px 3px rgba(15,23,42,0.06),
    0 8px 24px -16px rgba(15,23,42,0.10);
}
.top-nav .nav-title {
  display: flex; align-items: center; gap: 8px;
  letter-spacing: -0.02em;
  font-weight: 800;
}
.top-nav .nav-title img {
  width: 30px; height: 30px;
  border-radius: 8px;
  box-shadow: 0 4px 14px rgba(168,85,247,0.30), 0 0 0 1px var(--hu-hairline);
}
:root[data-theme="purple"] .top-nav .nav-title img { box-shadow: 0 4px 14px rgba(168,85,247,0.30), 0 0 0 1px var(--hu-hairline); }
:root[data-theme="light"] .top-nav .nav-title img { box-shadow: 0 4px 14px rgba(37,99,235,0.22), 0 0 0 1px var(--hu-hairline); }
/* 🪽 [SILK-GLIDE 2026-07-17] الثيم الثلجي — إصلاحات تناسق الألوان (رقم 11)
   بقايا الأزرق rgba(37,99,235,…) بينما هوية light صارت بنفسجية #7c3aed
   (طبقة 104) — يعيد تعريف نفس المحدد بعد الأصلي فيغلبه بترتيب المصدر.
   للتراجع: احذف السطر التالي. */
:root[data-theme="light"] .top-nav .nav-title img { box-shadow: 0 4px 14px rgba(124,58,237,.22), 0 0 0 1px var(--hu-hairline); }
.top-nav .nav-btn,
.theme-toggle-btn {
  border-radius: 12px;
  border: 1px solid var(--hu-hairline);
  background: rgba(255,255,255,0.04);
  transition: transform .18s var(--hu-ease), background-color .2s ease, border-color .2s ease, box-shadow .2s ease;
}
.top-nav .nav-btn:hover,
.theme-toggle-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 14px -4px var(--hu-halo);
}
:root[data-theme="light"] .top-nav .nav-btn,
:root[data-theme="light"] .theme-toggle-btn {
  background: rgba(15,23,42,0.03);
  border-color: rgba(15,23,42,0.08);
}

/* رابط الدعم في الـnav-actions — أكثر تكاملاً */
.nav-actions a[target="_blank"] {
  border-radius: 12px !important;
  padding: 7px 14px !important;
  font-weight: 600;
  letter-spacing: -0.01em;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  transition: transform .18s var(--hu-ease), background-color .2s ease, border-color .2s ease, box-shadow .2s ease;
}
.nav-actions a[target="_blank"]:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 18px -8px var(--hu-halo);
}

/* بانر الدعم — يندمج بصرياً مع الـ topbar */
#supportBanner {
  border-bottom: 1px solid var(--hu-hairline) !important;
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  padding: 9px 16px !important;
  font-size: 0.85rem;
}
#supportBanner a { letter-spacing: -0.01em; }

/* Bottom nav — pill عائم بزجاج هادئ */
.bottom-nav {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0) 60%),
    var(--bg-card);
  border-top: 1px solid var(--hu-hairline);
  backdrop-filter: blur(18px) saturate(1.1);
  -webkit-backdrop-filter: blur(18px) saturate(1.1);
  box-shadow:
    0 -1px 0 rgba(255,255,255,0.04) inset,
    0 -10px 32px -16px rgba(0,0,0,0.50);
}
:root[data-theme="light"] .bottom-nav {
  background: linear-gradient(180deg, rgba(255,255,255,0.96), rgba(255,255,255,0.88));
  box-shadow:
    0 -1px 0 rgba(255,255,255,0.9) inset,
    0 -1px 3px rgba(15,23,42,0.04),
    0 -10px 32px -18px rgba(15,23,42,0.12);
}
.bottom-nav .nav-item { font-weight: 600; letter-spacing: -0.01em; }


/* ─── §5  Cards ─────────────────────────────────────────────────────────── */

.h-card,
.course-card,
.peer-race-card,
.profile-menu-item {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.025), rgba(255,255,255,0)),
    var(--bg-card);
  border: 1px solid var(--hu-hairline);
  border-radius: var(--hu-r-md);
  box-shadow: var(--hu-shadow-2);
  transition:
    transform .22s var(--hu-ease),
    box-shadow .25s var(--hu-ease),
    border-color .25s ease,
    background-color .35s ease;
}
:root[data-theme="light"] .h-card,
:root[data-theme="light"] .course-card,
:root[data-theme="light"] .peer-race-card,
:root[data-theme="light"] .profile-menu-item {
  background: #ffffff;
  border-color: #e6ebf2;
  box-shadow: var(--hu-shadow-2);
}
.h-card:hover,
.course-card:hover,
.profile-menu-item:hover {
  transform: translateY(-2px);
  box-shadow: var(--hu-shadow-3), 0 0 0 1px var(--hu-halo);
  border-color: color-mix(in oklab, var(--primary) 28%, var(--border-color));
}

/* Service grid — بطاقات مربّعة تتكيّف مع عرض الصفحة (نفس تجربة الجوال على كل
   المقاسات). صفحة الخدمات محدودة بـ 600px؛ الـ media queries المعتمدة على عرض
   الـ viewport كانت تحشر حتى 5 أعمدة داخل 600px → بطاقات ~99px مشوّهة على اللاب.
   minmax(150px,1fr) يُبقي البطاقة مربّعة ويغيّر عددها حسب المساحة المتاحة فقط. */
.svc-grid {
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: 14px;
}

.svc-card {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0) 55%),
    var(--bg-card);
  border: 1px solid var(--hu-hairline);
  border-radius: var(--hu-r-md);
  padding: 18px 14px 16px;
  min-height: 162px;
  box-shadow: var(--hu-shadow-2);
}
.svc-card::before {
  height: 1px;
  top: 0; left: 12%; right: 12%;
  background: linear-gradient(90deg, transparent, color-mix(in oklab, var(--primary) 60%, transparent), transparent);
  opacity: 0;
}
.svc-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--hu-shadow-3), 0 0 0 1px var(--hu-halo);
}
.svc-card:hover::before { opacity: 1; }
.svc-icon {
  width: 56px; height: 56px;
  border-radius: 16px;
  background:
    linear-gradient(160deg,
      color-mix(in oklab, var(--primary) 22%, transparent),
      color-mix(in oklab, var(--primary)  6%, transparent));
  border: 1px solid color-mix(in oklab, var(--primary) 25%, transparent);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.10),
    0 6px 18px -8px var(--hu-halo);
}
.svc-card:hover .svc-icon {
  transform: translateY(-1px) scale(1.04);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.15),
    0 10px 24px -8px var(--hu-halo);
}
.svc-name { font-weight: 800; letter-spacing: -0.012em; }
.svc-desc { line-height: 1.5; }
.svc-badge { box-shadow: var(--hu-shadow-1); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }

/* Course cards (المواد داخل الكورس) — أنظف */
.course-card { border-radius: var(--hu-r-sm); padding: 4px; gap: 0; }
.course-thumb { border-radius: 10px; box-shadow: var(--hu-shadow-1); }
.course-info .c-title { letter-spacing: -0.01em; font-weight: 700; }


/* ─── §6  Buttons ──────────────────────────────────────────────────────── */

.h-btn {
  border-radius: 14px;
  font-weight: 800;
  letter-spacing: -0.012em;
  background:
    linear-gradient(180deg, color-mix(in oklab, white 14%, var(--primary)) 0%, var(--primary) 55%, var(--primary-hover) 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.20),
    inset 0 -1px 0 rgba(0,0,0,0.10),
    0 6px 18px -8px var(--hu-halo);
  transition:
    transform .15s var(--hu-ease),
    box-shadow .2s var(--hu-ease),
    filter .15s ease;
}
.h-btn:hover {
  transform: translateY(-1px);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.25),
    inset 0 -1px 0 rgba(0,0,0,0.10),
    0 10px 28px -10px var(--hu-halo);
  filter: brightness(1.03);
}
.h-btn:active { transform: translateY(0) scale(0.985); }
.h-btn.outline {
  background: rgba(255,255,255,0.02);
  border: 1.5px solid color-mix(in oklab, var(--primary) 60%, var(--border-color));
  color: var(--primary);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.05),
    0 1px 2px rgba(0,0,0,0.05);
}
.h-btn.outline:hover {
  background: color-mix(in oklab, var(--primary) 10%, transparent);
  border-color: var(--primary);
}
:root[data-theme="light"] .h-btn.outline { background: rgba(15,23,42,0.02); }
.h-btn.danger {
  background: linear-gradient(180deg, #ff8a8a 0%, #ef4444 60%, #dc2626 100%);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.22),
    0 6px 18px -8px rgba(220,38,38,0.40);
}

/* nav-btn (الأيقونة المربعة) */
.top-nav .nav-btn { box-shadow: var(--hu-shadow-1); }


/* ─── §7  Inputs / Forms ───────────────────────────────────────────────── */

.h-input {
  border-radius: 14px;
  border: 1.5px solid var(--hu-hairline);
  background:
    linear-gradient(180deg, rgba(255,255,255,0.02), rgba(255,255,255,0) 60%),
    var(--bg-input);
  box-shadow: inset 0 1px 2px rgba(0,0,0,0.08);
  transition:
    border-color .2s ease,
    background-color .25s ease,
    box-shadow .2s ease,
    transform .15s var(--hu-ease);
}
:root[data-theme="light"] .h-input {
  background: #ffffff;
  border-color: #e6ebf2;
  box-shadow: inset 0 1px 2px rgba(15,23,42,0.04);
}
.h-input:hover { border-color: color-mix(in oklab, var(--primary) 35%, var(--border-color)); }
.h-input:focus {
  border-color: var(--primary);
  background: var(--bg-input-focus);
  box-shadow: 0 0 0 4px var(--hu-halo);
}
.h-label {
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--text-secondary);
}
.req-select-fancy {
  border-radius: 14px;
  background:
    linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0)),
    var(--bg-card);
  border: 1.5px solid var(--hu-hairline);
  box-shadow: var(--hu-shadow-1);
}
.req-select-fancy:hover { border-color: color-mix(in oklab, var(--primary) 35%, var(--border-color)); }
.req-select-fancy:focus { border-color: var(--primary); box-shadow: 0 0 0 4px var(--hu-halo); }

/* checkbox / accent */
input[type="checkbox"], input[type="radio"] { accent-color: var(--primary); }


/* ─── §8  Modals & Toasts ──────────────────────────────────────────────── */

.h-modal-overlay {
  background:
    radial-gradient(60% 60% at 50% 30%, rgba(0,0,0,0.35), rgba(0,0,0,0.55));
  backdrop-filter: blur(10px) saturate(1.05);
  -webkit-backdrop-filter: blur(10px) saturate(1.05);
}
.h-modal {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0) 60%),
    var(--bg-card);
  border: 1px solid var(--hu-hairline);
  border-radius: var(--hu-r-lg);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.06),
    0 28px 70px -20px rgba(0,0,0,0.60),
    0 0 0 1px var(--hu-hairline);
}
:root[data-theme="light"] .h-modal {
  background: #ffffff;
  border-color: #e6ebf2;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.9),
    0 28px 70px -20px rgba(15,23,42,0.24);
}
.h-modal h5 { letter-spacing: -0.015em; font-weight: 800; }

/* Toasts — رسائل اللي تظهر: كرت كوني بنفسجي سينمائي (صورة cosmos خلف زجاج بنفسجي
   داكن) + إشارة لون دلالية (نجاح أخضر / خطأ أحمر) تبقى واضحة. موحّد بنفسجي مهما كان
   الثيم الداخلي. الصورة نسبية لمجلد هذا الملف (assets/css/ ⇒ ../cinematic/). */
.h-toast {
  position: relative; overflow: hidden; isolation: isolate;
  border-radius: 14px;
  padding: 13px 20px;
  font-weight: 700;
  letter-spacing: -0.01em;
  text-align: start;
  color: #f3e9ff;
  min-width: 250px; max-width: min(86vw, 440px);
  background-color: #160d2a;
  background-image:
    linear-gradient(180deg, rgba(32,19,58,0.94), rgba(18,10,34,0.97)),
    image-set(url("../cinematic/cosmos-banner-purple.webp") type("image/webp"),
              url("../cinematic/cosmos-banner-purple.jpg")  type("image/jpeg"));
  background-size: cover, cover;
  background-position: center, center;
  background-repeat: no-repeat, no-repeat;
  border: 1px solid rgba(168,85,247,0.45);
  border-inline-start: 3px solid #a855f7;
  backdrop-filter: blur(12px) saturate(1.1);
  -webkit-backdrop-filter: blur(12px) saturate(1.1);
  box-shadow:
    0 14px 38px -12px rgba(76,29,149,0.65),
    0 0 0 1px rgba(168,85,247,0.10),
    inset 0 1px 0 rgba(255,255,255,0.08);
}
/* خيط ضوء علوي شعري بنفسجي */
.h-toast::after {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(192,132,252,0.6), transparent);
  pointer-events: none;
}
/* النجاح — زجاج كوني أخضر (وشاح أخضر فوق صورة الكون) + علامة صحّ، واضح وبطابع سينمائي */
.h-toast.success {
  background-image:
    linear-gradient(160deg, rgba(16,122,82,0.88), rgba(6,70,46,0.94)),
    image-set(url("../cinematic/cosmos-banner-purple.webp") type("image/webp"),
              url("../cinematic/cosmos-banner-purple.jpg")  type("image/jpeg"));
  border-color: rgba(52,211,153,0.50);
  border-inline-start-color: #34d399;
  box-shadow:
    0 16px 40px -12px rgba(0,0,0,0.50),
    0 0 26px -10px rgba(52,211,153,0.60),
    inset 0 1px 0 rgba(255,255,255,0.12);
}
.h-toast.success::before { content: "\2713"; margin-inline-end: 8px; color: #d1fae5; font-weight: 900; }
/* الخطأ — زجاج كوني أحمر + علامة تنبيه، واضح وبطابع سينمائي */
.h-toast.error {
  background-image:
    linear-gradient(160deg, rgba(165,30,42,0.88), rgba(110,14,26,0.94)),
    image-set(url("../cinematic/cosmos-banner-purple.webp") type("image/webp"),
              url("../cinematic/cosmos-banner-purple.jpg")  type("image/jpeg"));
  border-color: rgba(248,113,113,0.50);
  border-inline-start-color: #f87171;
  box-shadow:
    0 16px 40px -12px rgba(0,0,0,0.50),
    0 0 26px -10px rgba(248,113,113,0.60),
    inset 0 1px 0 rgba(255,255,255,0.12);
}
.h-toast.error::before { content: "\26A0"; margin-inline-end: 8px; color: #fee2e2; font-weight: 900; }


/* ─── §9  Posters & Skeletons ──────────────────────────────────────────── */

.poster-card {
  border-radius: var(--hu-r-md);
  border: 1px solid var(--hu-hairline);
  box-shadow: var(--hu-shadow-2);
  transition:
    transform .3s var(--hu-ease),
    box-shadow .3s var(--hu-ease),
    border-color .3s ease;
}
.poster-card:hover {
  transform: translateY(-4px) scale(1.02);
  box-shadow:
    var(--hu-shadow-4),
    0 0 0 1px color-mix(in oklab, var(--primary) 45%, transparent);
  border-color: color-mix(in oklab, var(--primary) 45%, var(--border-color));
}
.poster-gradient {
  background: linear-gradient(to top,
    rgba(0,0,0,0.96) 0%,
    rgba(0,0,0,0.78) 25%,
    rgba(0,0,0,0.40) 55%,
    transparent 100%);
}
.poster-title { letter-spacing: -0.005em; }
.poster-status { box-shadow: var(--hu-shadow-1); }

/* skeleton — shimmer أنعم وأقل صراخاً */
.skeleton, .poster-skeleton {
  background:
    linear-gradient(90deg,
      color-mix(in oklab, var(--bg-input) 92%, transparent) 25%,
      color-mix(in oklab, var(--border-color) 80%, var(--primary) 10%) 50%,
      color-mix(in oklab, var(--bg-input) 92%, transparent) 75%);
  background-size: 200% 100%;
  border-radius: var(--hu-r-sm);
}


/* ─── §10  Dashboard hero, section titles, stats ───────────────────────── */

/* Welcome banner (الكتلة الأولى داخل dashboard) — تستخدم background:var(--gradient) inline.
   نضيف لها overlays عبر selector نوعي ـ لا نلمس inline لكن نزيد جمالها */
#page-dashboard > div:first-child {
  border-radius: var(--hu-r-lg) !important;
  border: 1px solid var(--hu-hairline);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.20),
    0 14px 36px -16px color-mix(in oklab, var(--primary) 60%, transparent);
  position: relative;
  isolation: isolate;
}
#page-dashboard > div:first-child::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background:
    radial-gradient(120% 80% at 0% 100%, rgba(255,255,255,0.15), transparent 60%),
    radial-gradient(80% 80% at 100% 0%, rgba(255,255,255,0.10), transparent 55%);
  pointer-events: none;
  z-index: 0;
}

.section-title {
  font-weight: 800;
  letter-spacing: -0.015em;
  font-size: 1.06rem;
  margin: 22px 0 12px;
  display: flex; align-items: center; gap: 8px;
}
.section-title::before {
  content: "";
  width: 4px; height: 18px;
  border-radius: 3px;
  background: linear-gradient(180deg, var(--primary), color-mix(in oklab, var(--primary) 50%, transparent));
  box-shadow: 0 0 12px var(--hu-halo);
  flex-shrink: 0;
}

/* Stat mini cards */
.stat-mini {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.01)),
    var(--bg-card);
  border: 1px solid var(--hu-hairline);
  border-radius: var(--hu-r-sm);
  padding: 14px 10px;
  box-shadow: var(--hu-shadow-1);
  transition: transform .2s var(--hu-ease), box-shadow .25s ease, border-color .25s ease;
}
:root[data-theme="light"] .stat-mini { background: #fff; border-color: #e6ebf2; }
.stat-mini:hover {
  transform: translateY(-2px);
  box-shadow: var(--hu-shadow-2), 0 0 0 1px var(--hu-halo);
}
.stat-mini .stat-num {
  font-size: 1.65rem;
  letter-spacing: -0.02em;
  background: linear-gradient(180deg, var(--primary), var(--primary-hover));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}
.stat-mini .stat-label { font-size: 0.74rem; font-weight: 600; }

/* Streak / badges */
.streak-counter,
.achievement-badge {
  border: 1px solid var(--hu-hairline);
  box-shadow: var(--hu-shadow-1);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}

/* Progress bars */
.h-progress {
  height: 6px;
  background: color-mix(in oklab, var(--border-color) 70%, transparent);
  border-radius: 99px;
  box-shadow: inset 0 1px 2px rgba(0,0,0,0.15);
}
.h-progress-bar {
  background:
    linear-gradient(90deg, var(--primary), color-mix(in oklab, var(--primary) 60%, white));
  border-radius: 99px;
  box-shadow: 0 0 10px var(--hu-halo);
}


/* ─── §11  Login / Register pages ──────────────────────────────────────── */

#page-login, #page-register {
  max-width: 460px;
}
#page-login > div:first-child img,
#page-register > div:first-child img {
  filter: drop-shadow(0 14px 30px var(--hu-halo));
  transition: transform .35s var(--hu-ease-spring), filter .3s ease;
}
#page-login > div:first-child img:hover { transform: scale(1.04); }

/* عنوان "تسجيل الدخول" */
#page-login h3, #page-register h3 {
  letter-spacing: -0.025em;
  background: linear-gradient(180deg, var(--text-primary), color-mix(in oklab, var(--text-primary) 70%, var(--primary)));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  font-size: 1.6rem;
  margin-bottom: 28px !important;
}

/* الرابط الأنيق "تواصل مع فريق الدعم" */
#page-login a[target="_blank"],
#page-register a[target="_blank"] {
  background: rgba(255,255,255,0.02);
  border-radius: 14px;
  transition: transform .18s var(--hu-ease), background .2s ease, border-color .2s ease, box-shadow .2s ease;
}
#page-login a[target="_blank"]:hover,
#page-register a[target="_blank"]:hover {
  transform: translateY(-1px);
  background: color-mix(in oklab, var(--primary) 8%, transparent);
  box-shadow: 0 6px 18px -8px var(--hu-halo);
}


/* ─── §12  Requests (steps + hero) ─────────────────────────────────────── */

.req-hero {
  border-radius: var(--hu-r-lg);
  border: 1px solid var(--hu-hairline);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.12),
    var(--hu-shadow-3);
}
.req-hero-bg {
  background:
    linear-gradient(135deg,
      color-mix(in oklab, var(--primary) 20%, #001520) 0%,
      color-mix(in oklab, var(--primary) 5%, #000a14) 100%);
}
.req-hero-bg::before {
  background: radial-gradient(80% 70% at 25% 50%, color-mix(in oklab, var(--primary) 25%, transparent), transparent 70%);
}
.req-hero-title {
  letter-spacing: -0.025em;
  font-weight: 800;
}
.req-step {
  border-radius: 14px;
  background:
    linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0)),
    var(--bg-card);
  border-color: var(--hu-hairline);
  box-shadow: var(--hu-shadow-1);
}
.req-step.active {
  background:
    linear-gradient(180deg, color-mix(in oklab, var(--primary) 8%, var(--bg-card)), var(--bg-card));
  box-shadow: 0 0 0 1px var(--hu-halo), 0 8px 22px -10px var(--hu-halo);
}


/* ─── §13  Profile & services ──────────────────────────────────────────── */

.profile-avatar {
  border: 3px solid color-mix(in oklab, var(--primary) 70%, white);
  box-shadow:
    0 0 0 4px color-mix(in oklab, var(--primary) 20%, transparent),
    0 12px 28px -10px var(--hu-halo);
}
.profile-readonly-notice {
  background:
    linear-gradient(180deg, color-mix(in oklab, var(--primary) 12%, var(--bg-card)), var(--bg-card)) !important;
  border-color: color-mix(in oklab, var(--primary) 35%, var(--border-color)) !important;
  border-radius: 14px !important;
  box-shadow: var(--hu-shadow-1) !important;
}


/* ─── §14  Billing module polish (sbil-*) ──────────────────────────────── */

.sbil-card,
.sbil-detail,
.sbil-section,
.sbil-svc-card,
.sbil-full-card {
  border-radius: var(--hu-r-md) !important;
  border-color: var(--hu-hairline) !important;
  box-shadow: var(--hu-shadow-2) !important;
  transition: transform .2s var(--hu-ease), box-shadow .25s ease, border-color .25s ease;
}
.sbil-card:hover,
.sbil-svc-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--hu-shadow-3), 0 0 0 1px color-mix(in oklab, var(--sbil-primary) 30%, transparent) !important;
}
.sbil-pay-btn,
.sbil-pay-btn-large {
  border-radius: 14px !important;
  font-weight: 800 !important;
  letter-spacing: -0.01em !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.22),
    0 8px 22px -10px var(--sbil-primary-glow) !important;
  transition: transform .15s var(--hu-ease), box-shadow .2s ease, filter .15s ease !important;
}
.sbil-pay-btn:hover,
.sbil-pay-btn-large:hover {
  transform: translateY(-1px);
  filter: brightness(1.04);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.30),
    0 12px 30px -10px var(--sbil-primary-glow) !important;
}
.sbil-pay-modal-box {
  border-radius: var(--hu-r-lg) !important;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.08),
    0 30px 80px -20px rgba(0,0,0,0.65) !important;
}
.sbil-back-btn { transition: background .2s ease, transform .15s var(--hu-ease); }
.sbil-back-btn:hover { transform: translateX(2px); }

.sbil-sum-box {
  border-radius: 14px !important;
  box-shadow: var(--hu-shadow-1) !important;
  background:
    linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0)),
    var(--bg-card) !important;
}
.sbil-sum-value { letter-spacing: -0.02em; font-weight: 800; }
.sbil-progress-fill {
  border-radius: 99px !important;
  box-shadow: 0 0 10px rgba(34,197,94,0.45);
}


/* ─── §15  Video page polish ───────────────────────────────────────────── */

.video-container {
  border-radius: var(--hu-r-md);
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.05),
    0 18px 50px -18px rgba(0,0,0,0.70);
}
.vid-ctrl-btn {
  background: rgba(0,0,0,0.55);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(255,255,255,0.10);
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.10), 0 6px 18px -8px rgba(0,0,0,0.40);
}
.vid-top-btn {
  background: rgba(0,0,0,0.45);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(255,255,255,0.08);
}
.vid-speed-control {
  border-radius: 14px;
  background:
    linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0)),
    var(--bg-card);
  box-shadow: var(--hu-shadow-2);
}
.vid-speed-btn { border-radius: 10px; }
.vid-resume-card {
  border-radius: var(--hu-r-md);
  background:
    linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0)),
    var(--bg-card);
  border: 1px solid var(--hu-hairline);
  box-shadow: var(--hu-shadow-3);
}
.playlist-drawer {
  border-radius: var(--hu-r-md) var(--hu-r-md) 0 0;
  border-color: var(--hu-hairline);
  background:
    linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0) 30%),
    var(--bg-card);
  box-shadow: var(--hu-shadow-3);
}
.playlist-drawer .drawer-item.playing {
  background: color-mix(in oklab, var(--primary) 12%, transparent);
}


/* ─── §16  Messages page ───────────────────────────────────────────────── */

.msg-header {
  border-radius: var(--hu-r-md) var(--hu-r-md) 0 0;
  box-shadow: inset 0 1px 0 rgba(255,255,255,0.18);
  position: relative;
  overflow: hidden;
}
.msg-header::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    radial-gradient(60% 80% at 100% 0%, rgba(255,255,255,0.15), transparent 60%);
}
.msg-list {
  border-radius: 0 0 var(--hu-r-md) var(--hu-r-md);
  border-color: var(--hu-hairline);
}
.msg-bubble {
  border-radius: 14px;
  box-shadow: var(--hu-shadow-1);
}
.msg-bubble.admin {
  background: linear-gradient(180deg, color-mix(in oklab, var(--primary) 90%, white), var(--primary));
  color: #fff;
}


/* ─── §17  Mobile safeguards ───────────────────────────────────────────── */

html, body { overflow-x: hidden; }
img, svg, video { max-width: 100%; height: auto; }
.page { padding: 16px; }
@media (max-width: 390px) {
  .h-btn { padding: 14px 16px; font-size: 1.02rem; }
  .h-input { padding: 13px 16px; font-size: 0.98rem; }
  .section-title { font-size: 1rem; }
  .stat-mini .stat-num { font-size: 1.4rem; }
  .svc-card { padding: 16px 10px 14px; min-height: 154px; }
  .svc-icon { width: 50px; height: 50px; border-radius: 14px; }
  .svc-name { font-size: 0.95rem; }
  .svc-desc { font-size: 0.74rem; }
  .req-hero-content { padding: 22px 18px; }
  .req-hero-title { font-size: 1.35rem; }
}
@media (max-width: 360px) {
  body { font-size: 14.5px; }
  .nav-actions a[target="_blank"] span,
  #supportBanner a span { letter-spacing: -0.02em; }
}

/* hit areas — كل الأزرار ≥ 44px في الجوال (Apple HIG) */
@media (max-width: 600px) {
  .h-btn { min-height: 48px; }
  .nav-item { min-height: 56px; padding: 6px 8px; }
  .theme-toggle-btn,
  .top-nav .nav-btn { min-width: 44px; min-height: 44px; }
}

/* Safe area للأجهزة ذات الشق */
@supports (padding: max(0px)) {
  body {
    padding-left: max(0px, env(safe-area-inset-left));
    padding-right: max(0px, env(safe-area-inset-right));
  }
}


/* ─── §18  Motion polish + Reduced motion ──────────────────────────────── */

/* Lift cards on appear — أنعم وأطول قليلاً */
.stagger-card {
  animation: huCardEnter 0.55s var(--hu-ease) both;
}
@keyframes huCardEnter {
  from { opacity: 0; transform: translateY(14px) scale(0.985); filter: blur(2px); }
  to   { opacity: 1; transform: translateY(0)    scale(1);     filter: blur(0); }
}

/* Hover glow على الأزرار المهمة */
.h-btn::after,
.sbil-pay-btn::after,
.sbil-pay-btn-large::after {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  box-shadow: 0 0 0 0 var(--hu-halo);
  pointer-events: none;
  transition: box-shadow .5s var(--hu-ease);
  z-index: 1;
}
.h-btn { position: relative; isolation: isolate; }
.h-btn:hover::after { box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 18%, transparent); }

/* Reduced motion: تجاوز صارم لكل شيء */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
    transition-delay: 0ms !important;
  }
  html body::before { display: none; }
  .h-card:hover,
  .svc-card:hover,
  .poster-card:hover,
  .h-btn:hover,
  .stat-mini:hover { transform: none !important; }
}


/* ─── §19  Print fallback ──────────────────────────────────────────────── */

@media print {
  html body::before { display: none; }
  .top-nav, .bottom-nav, #supportBanner, .toast-container { display: none !important; }
  body { padding-top: 0 !important; padding-bottom: 0 !important; }
}


/* ─── §20  Telegram / utility modules touch-ups ────────────────────────── */

/* أيقونات Font Awesome داخل العناصر الزجاجية تستفيد من smoothing خفيف */
.fa, .fas, .fab, .far {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* الأكاديميون لا يتوقعون hover ثقيل على ملفاتي — لكن نظافة الـpills تفيد */
.mf-pill, .mf-chip {
  border-radius: 999px;
  transition: transform .15s var(--hu-ease), background .2s ease, border-color .2s ease, box-shadow .2s ease;
}
.mf-pill:hover, .mf-chip:hover {
  transform: translateY(-1px);
  box-shadow: var(--hu-shadow-1);
}
.mf-dl {
  border-radius: 14px;
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.30),
    0 6px 18px -8px rgba(212,175,55,0.40);
}
.mf-dl:hover { box-shadow: inset 0 1px 0 rgba(255,255,255,0.40), 0 10px 26px -8px rgba(212,175,55,0.50); }

/* فحص نهائي — لمسة لطيفة على الفقاعات المنبثقة في الفواتير عند نجاح الدفع */
.sbil-pay-success-icon {
  filter: drop-shadow(0 6px 18px rgba(34,197,94,0.40));
  animation: huPopIn .6s var(--hu-ease-spring) both;
}
@keyframes huPopIn {
  from { opacity: 0; transform: scale(0.5); }
  to   { opacity: 1; transform: scale(1); }
}

/* ═══ نهاية طبقة الترقية البصرية ═══ */

/* --------------- source: assets/cinematic/cine-cosmos.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * cine-cosmos.css — الخلفية السينمائية الكونية المشتركة (صورة «المعبد الكوني»)
 * ────────────────────────────────────────────────────────────────────────────
 * طبقة إضافية مشتركة بين landing.html و index.html (صفحتا الدخول/التسجيل).
 *
 * 2026-06-03 (إحياء): صار المشهد صورةً حقيقية (بوستر «المعبد الكوني») بدل الرسم
 *   بالـCSS. الصورة تُوضع على .cine-cosmos نفسها ⇒ تُورَّث تلقائياً إلى
 *   .h-auth-cosmos في صفحتي الدخول/التسجيل (لأنها .cine-cosmos أيضاً)، فيُكتب
 *   مسار الصورة هنا مرّة واحدة ويستفيد منه الطرفان. فوق الصورة طبقات حياة خفيفة:
 *     (أ) سكريم قراءة (.cine-cosmos::before)  — يعمّق الأعلى/الحواف ويُبقي عمود
 *         النور أسفل-الوسط حيّاً ⇒ تباين قراءة عالٍ للنصوص/البطاقة.
 *     (ب) نجوم حيّة (.cine-stars + ::after)   — وميض opacity بطيء فقط (لمسة حياة).
 *     (ج) توهّج وجزيئات الأرضية (.cine-aurora + ::before/::after) — تطابق الأرضية
 *         العاكسة المتوهّجة في البوستر (transform/opacity فقط).
 *     (د) تنفّس بارالاكس خفيف جدّاً (scale ضئيل) على الكمبيوتر فقط — عمق سينمائي.
 *
 * مبادئ:
 *   • لوحة باردة صارمة: كحلي/سماوي صرف — بلا أي بنفسجي/أحمر (توكنات --cine-* فقط).
 *   • الحركة transform/opacity فقط؛ تخفيف/إلغاء تدريجي على الجوال؛ احترام
 *     prefers-reduced-motion.
 *   • Namespace: .cine-*  ⇒ صفر تعارض مع أي class قائم. لا يلمس أي JS/id/handler.
 *   • المسار نسبي لمجلد هذا الـCSS ⇒ url("../cinematic/cosmos-wide.webp") يكفي (الصور في نفس
 *     المجلد): cosmos-wide.* للعريض، cosmos-tall.* للطولي (portrait).
 *
 * للإزالة: احذف <link> هذا الملف + كتلة <div class="cine-cosmos"> من الصفحة.
 * ════════════════════════════════════════════════════════════════════════════ */

/* ─── الحاوية + خلفية الصورة (تملأ lp-bg الثابتة / h-auth-cosmos الثابتة) ──────── */
.cine-cosmos {
  position: absolute;
  inset: 0;
  overflow: hidden;
  pointer-events: none;

  /* توكنات لونية محلية للمشهد — سماوي/كحلي صرف (بلا بنفسجي a855f7 إطلاقاً) */
  --cine-cyan:  #22d3ee;
  --cine-teal:  #00b4d8;
  --cine-blue:  #2b6fe0;
  --cine-deep:  #0098b8;
  --cine-ink:   #060912;
  --cine-ink-2: #0a1120;

  /* خلفية المشهد: بوستر المعبد العريض. سطر url() سقوطٌ آمن لأي متصفّح لا يفهم
     image-set؛ ثم image-set يقدّم WebP مع سقوط JPG حسب دعم المتصفّح. */
  background-color: var(--cine-ink);
  background-image: url("../cinematic/cosmos-wide.jpg");
  background-image: image-set(
    url("../cinematic/cosmos-wide.webp") type("image/webp"),
    url("../cinematic/cosmos-wide.jpg")  type("image/jpeg"));
  background-repeat: no-repeat;
  background-position: center bottom;   /* المعبد مثبّت في أسفل-الوسط */
  background-size: cover;
}

/* تبديل حسب التوجّه: الجوال/التابلت الرأسي + أي شاشة ضيّقة ⇒ البوستر الطولي.
   هكذا البورتريه يأخذ cosmos-tall، والكمبيوتر/الأفقي يبقى على cosmos-wide. */
@media (orientation: portrait), (max-width: 820px) {
  .cine-cosmos {
    background-image: url("../cinematic/cosmos-tall.jpg");
    background-image: image-set(
      url("../cinematic/cosmos-tall.webp") type("image/webp"),
      url("../cinematic/cosmos-tall.jpg")  type("image/jpeg"));
  }
}

/* ═══ (أ) سكريم القراءة — يطلى فوق الصورة (::before = أوّل طبقة فوق الخلفية) ═══════
 * يعمّق الأعلى (تحت الـnav/العنوان) والحواف نحو الأسود، ويُبقي مركز-أسفل المشهد
 * (عمود النور) حيّاً ⇒ النصوص والبطاقة تُقرأ بوضوح فوق المناطق المضيئة. */
.cine-cosmos::before {
  content: "";
  position: absolute;
  inset: 0;
  background:
    /* تعتيم الشريط العلوي (مساحة العنوان/الـnav) */
    linear-gradient(180deg,
      rgba(3, 6, 14, 0.66) 0%,
      rgba(3, 6, 14, 0.30) 22%,
      rgba(3, 6, 14, 0.05) 45%,
      transparent 62%),
    /* تعتيم الحواف/الزوايا لتأطير البوّابة */
    radial-gradient(126% 100% at 50% 72%,
      transparent 40%,
      rgba(2, 4, 10, 0.40) 76%,
      rgba(1, 2, 7, 0.66) 100%),
    /* رفع سماوي خفيف جدّاً عند القاع ⇒ الأرضية تبقى نابضة */
    radial-gradient(72% 46% at 50% 110%,
      color-mix(in oklab, var(--cine-cyan) 12%, transparent),
      transparent 60%);
}

/* ═══ (ب) نجوم حيّة فوق الصورة — طبقتان خفيفتان (الصورة فيها نجوم؛ هذه لمسة حياة) ══
 * وميض opacity بطيء فقط — بلا تحريك background-position (الذي يسبّب repaint ثقيل).
 * يُفعّل الوميض على الكمبيوتر فقط (كتلة الحركة بالأسفل). */
.cine-stars,
.cine-stars::after {
  content: "";
  position: absolute;
  inset: -10% 0;
}
.cine-stars {
  background-image:
    radial-gradient(1.4px 1.4px at 12% 18%, rgba(234,242,255,.80), transparent 60%),
    radial-gradient(1.2px 1.2px at 28% 8%,  rgba(180,225,255,.62), transparent 60%),
    radial-gradient(1px   1px   at 44% 22%, rgba(234,242,255,.48), transparent 60%),
    radial-gradient(1.6px 1.6px at 62% 12%, rgba(190,235,255,.78), transparent 60%),
    radial-gradient(1px   1px   at 78% 26%, rgba(234,242,255,.48), transparent 60%),
    radial-gradient(1.3px 1.3px at 90% 9%,  rgba(190,235,255,.70), transparent 60%),
    radial-gradient(1px   1px   at 8%  40%, rgba(234,242,255,.44), transparent 60%),
    radial-gradient(1.5px 1.5px at 36% 46%, rgba(190,235,255,.64), transparent 60%),
    radial-gradient(1px   1px   at 70% 42%, rgba(234,242,255,.42), transparent 60%),
    radial-gradient(1.2px 1.2px at 96% 38%, rgba(180,225,255,.56), transparent 60%);
  background-repeat: repeat;
  background-size: 100% 60vh;
  opacity: .5;
}
/* طبقة ثانية أصغر ⇒ إحساس عمق ساكن */
.cine-stars::after {
  background-image:
    radial-gradient(1px 1px at 20% 12%, rgba(234,242,255,.44), transparent 60%),
    radial-gradient(1px 1px at 52% 6%,  rgba(190,235,255,.38), transparent 60%),
    radial-gradient(1px 1px at 84% 18%, rgba(234,242,255,.40), transparent 60%),
    radial-gradient(1px 1px at 16% 34%, rgba(190,235,255,.34), transparent 60%),
    radial-gradient(1px 1px at 60% 30%, rgba(234,242,255,.38), transparent 60%),
    radial-gradient(1px 1px at 92% 28%, rgba(190,235,255,.34), transparent 60%);
  background-repeat: repeat;
  background-size: 100% 48vh;
  opacity: .4;
}

/* ═══ (ج) توهّج الأرضية + جزيئات صاعدة — تطابق الأرضية العاكسة المتوهّجة بالبوستر ══
 * .cine-aurora = توهّج سماوي ناعم أسفل-الوسط (يتنفّس بهدوء على الكمبيوتر).
 * ::before/::after = «جزيئتان» (عناقيد box-shadow) تصعدان ببطء وتتلاشيان. */
.cine-aurora {
  position: absolute;
  left: 50%;
  bottom: -10%;
  width: 128%;
  height: 54%;
  transform: translateX(-50%);
  background:
    radial-gradient(58% 80% at 50% 100%,
      color-mix(in oklab, var(--cine-cyan) 24%, transparent), transparent 70%),
    radial-gradient(40% 64% at 36% 100%,
      color-mix(in oklab, var(--cine-teal) 16%, transparent), transparent 72%);
  filter: blur(26px);
  opacity: .32;
  mix-blend-mode: screen;
}
.cine-aurora::before,
.cine-aurora::after {
  content: "";
  position: absolute;
  bottom: 9%;
  width: 3px;
  height: 3px;
  border-radius: 50%;
  background: #d7f6ff;
  opacity: 0;            /* تظهر فقط أثناء حركة الصعود (الكمبيوتر) */
}
.cine-aurora::before {
  left: 38%;
  box-shadow:
    0    0   7px 1px color-mix(in oklab, var(--cine-cyan) 70%, transparent),
    34px 30px 5px -1px color-mix(in oklab, var(--cine-cyan) 55%, transparent),
    -46px 56px 5px -1px color-mix(in oklab, var(--cine-teal) 52%, transparent);
}
.cine-aurora::after {
  left: 61%;
  box-shadow:
    0    0   7px 1px color-mix(in oklab, var(--cine-teal) 66%, transparent),
    40px 48px 5px -1px color-mix(in oklab, var(--cine-cyan) 50%, transparent),
    -30px 26px 5px -1px color-mix(in oklab, var(--cine-cyan) 48%, transparent);
}

/* ════════════════════════════════ الحركات ════════════════════════════════════ */
@keyframes cineTwinkle {              /* وميض نجوم هادئ (opacity فقط) */
  0%, 100% { opacity: .32; }
  50%      { opacity: .6; }
}
@keyframes cineFloorBreathe {         /* تنفّس توهّج الأرضية */
  0%, 100% { opacity: .26; transform: translateX(-50%) scale(1); }
  50%      { opacity: .42; transform: translateX(-50%) scale(1.05); }
}
@keyframes cineMoteRise {             /* صعود جزيئة وتلاشيها */
  0%   { opacity: 0;   transform: translateY(0); }
  14%  { opacity: .85; }
  82%  { opacity: .5; }
  100% { opacity: 0;   transform: translateY(-180px); }
}
@keyframes cineBreathe {              /* بارالاكس: تنفّس خلفية ضئيل جدّاً */
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.035); }
}

/* ─── تفعيل الحياة على الكمبيوتر فقط (وعند السماح بالحركة) ───────────────────────
 * على الجوال نُبقي الصورة + السكريم + التوهّج الساكن فقط ⇒ أداء أعلى. */
@media (min-width: 769px) and (prefers-reduced-motion: no-preference) {
  .cine-cosmos        { animation: cineBreathe 26s ease-in-out infinite; }
  .cine-stars         { animation: cineTwinkle 7s ease-in-out infinite; }
  .cine-stars::after  { animation: cineTwinkle 9s ease-in-out .8s infinite; }
  .cine-aurora        { animation: cineFloorBreathe 12s ease-in-out infinite; }
  .cine-aurora::before { animation: cineMoteRise 9s  ease-in-out infinite; }
  .cine-aurora::after  { animation: cineMoteRise 11s ease-in-out 2.6s infinite; }
}

/* 🪽 [SILK-GLIDE 2026-07-17 R5] هدوء الخمول: main.js يضيف html.h-idle-calm بعد ~10ث
 * بلا تفاعل ويزيله عند أي تفاعل (الاسم حرفي — منفّذ عند وكيل آخر) ⇒ إيقاف مؤقّت
 * (لا إلغاء) للأنيميشنات اللانهائية الست أعلاه — أثقلها توهّج الأرضية
 * blur(26px)+mix-blend-mode. الاستئناف فوري من الإطار نفسه عند عودة التفاعل.
 * للتراجع: احذف هذه الكتلة كاملة. */
html.h-idle-calm .cine-cosmos,
html.h-idle-calm .cine-stars,
html.h-idle-calm .cine-stars::after,
html.h-idle-calm .cine-aurora,
html.h-idle-calm .cine-aurora::before,
html.h-idle-calm .cine-aurora::after {
  animation-play-state: paused !important;
}

/* ════════════════════════════════ أداء الجوال ════════════════════════════════ */
@media (max-width: 768px) {
  /* لا بارالاكس ولا وميض نجوم؛ توهّج أرضية ساكن أخفّ وبلا mix-blend-mode الثقيل */
  .cine-cosmos { background-attachment: scroll; animation: none !important; }
  .cine-stars,
  .cine-stars::after { animation: none !important; }
  .cine-aurora {
    filter: blur(30px);
    opacity: .38;
    mix-blend-mode: normal;
    animation: none !important;
  }
}
@media (max-width: 420px) {
  /* أصغر الشاشات: صورة + سكريم + توهّج فقط (إلغاء الجزيئات) */
  .cine-aurora::before,
  .cine-aurora::after { display: none; }
}

/* ════════════════════════════════ تقليل الحركة ═══════════════════════════════ */
@media (prefers-reduced-motion: reduce) {
  .cine-cosmos,
  .cine-stars,
  .cine-stars::after,
  .cine-aurora,
  .cine-aurora::before,
  .cine-aurora::after { animation: none !important; }
}


/* --------------- source: assets/css/95-cinematic-auth.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * 95-cinematic-auth.css — طبقة صفحتي الدخول/التسجيل السينمائية (إضافية، قابلة للإزالة)
 * ────────────────────────────────────────────────────────────────────────────
 * تُحمَّل بعد main.css + h-upgrade.css + cine-cosmos.css. تجعل #page-login و
 *   #page-register توأماً للواجهة: نفس خلفية المعبد (الموروثة من cine-cosmos.css)
 *   + شعار بطل + بطاقة زجاجية.
 *
 * جدار الحماية: كل تثبيت لوحة/خلفية/إخفاء مقيّد بـ :has(#page-login.active) /
 *   :has(#page-register.active) ⇒ صفر أثر على الداشبورد وبقية صفحات #page-* بعد
 *   الدخول (يبقى مبدّل الثيم والثيمات هناك كما هي تماماً).
 *
 * 2026-06-03 (إحياء): صارت الخلفية صورة المعبد (عبر cine-cosmos.css)؛ وبما أن
 *   البطاقة تقع فوق ألمع منطقة (عمود النور وسط الصورة) رفعنا تعتيم خلفية البطاقة
 *   قليلاً وعمّقنا scrim الخلفية خلفها لضمان وضوح الحقول والنصوص.
 *
 * لا يلمس أي JS / id / class / data-attr / handler. للإزالة: احذف <link> هذا
 *   الملف + <link> cine-cosmos.css + <div class="cine-cosmos h-auth-cosmos"> +
 *   غلاف <div class="auth-logo-stage"> (يبقى span.h-logo.auth-logo كما هو).
 * ════════════════════════════════════════════════════════════════════════════ */

/* ─── (1) خلفية المعبد الثابتة — تظهر فقط على صفحتي الدخول/التسجيل ──────────────── */
.h-auth-cosmos {
  position: fixed !important;
  inset: 0;
  z-index: 0 !important;          /* خلف المحتوى (body > * = z-index:1 عبر h-upgrade) */
  display: none;
}
body:has(#page-login.active) .h-auth-cosmos,
body:has(#page-register.active) .h-auth-cosmos { display: block; }

/* غمر/scrim إضافي يعمّق القراءة خلف النموذج (::after = آخر طبقة فوق النجوم/الأورورا،
   أغمق من اللاندنق). نُعمّق المركز قليلاً لتهدئة عمود النور خلف البطاقة. */
.h-auth-cosmos::after {
  content: "";
  position: absolute;
  inset: 0;
  background:
    radial-gradient(62% 72% at 50% 48%, rgba(3,6,14,0.74), transparent 72%),
    linear-gradient(180deg, rgba(6,9,18,0.58), rgba(6,9,18,0.30) 30%, rgba(6,9,18,0.68));
}

/* ─── (2) تثبيت اللوحة السينمائية أثناء الدخول/التسجيل مهما كان الثيم المحفوظ ────── */
body:has(#page-login.active),
body:has(#page-register.active) {
  --primary:        #a855f7;
  --primary-hover:  #9333ea;
  --primary-light:  #c084fc;
  --bg-page:        #0c0618;
  --bg-card:        #1a1030;
  --bg-input:       rgba(26, 16, 48, 0.62);
  --bg-input-focus: rgba(38, 24, 64, 0.82);
  --text-primary:   #f3e9ff;
  --text-secondary: #c4b3da;
  --text-muted:     #8576a0;
  --border-color:   rgba(168, 85, 247, 0.16);
  --glow:           0 0 0 4px rgba(168, 85, 247, 0.18);
  --hu-halo:        rgba(168, 85, 247, 0.22);
  background: #0c0618 !important;
}

/* ─── (3) لا مبدّل ثيم + لا بانر دعم عائم في الصفحات العامة (يبقيان بعد الدخول) ──── */
body:has(#page-login.active) #themeToggleBtn,
body:has(#page-register.active) #themeToggleBtn { display: none !important; }
/* البانر العائم زائد على شاشتي auth (الدعم متاح في الـnav وأسفل البطاقة) ⇒ نخفيه
   بصرياً فقط عبر :has دون لمس closeBanner()؛ يعود في الداشبورد طبيعياً. */
body:has(#page-login.active) #supportBanner,
body:has(#page-register.active) #supportBanner { display: none !important; }

/* ─── (4) البطاقة الزجاجية — توأم لزجاج اللاندنق، متمركزة وأنيقة ───────────────── */
#page-login.active,
#page-register.active {
  position: relative;
  z-index: 1;
  max-width: 468px;
  margin: clamp(14px, 5vh, 54px) auto;
  padding: clamp(18px, 3vw, 30px) clamp(16px, 3vw, 30px) clamp(20px, 3vw, 28px);
  border-radius: 22px;
  /* تعتيم أعلى (قيم أكثف من اللاندنق) لأنها فوق عمود النور المركزي ⇒ وضوح الحقول */
  background:
    linear-gradient(180deg, rgba(18, 28, 46, 0.90), rgba(8, 13, 24, 0.94));
  border: 1px solid rgba(168, 85, 247, 0.18);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.05),
    0 30px 70px -28px rgba(0, 0, 0, 0.72),
    0 0 0 1px rgba(168, 85, 247, 0.05);
  backdrop-filter: blur(16px) saturate(1.05);
  -webkit-backdrop-filter: blur(16px) saturate(1.05);
}
/* خيط ضوء علوي شعري على حافّة البطاقة (بنفسجي فاتح) */
#page-login.active::before,
#page-register.active::before {
  content: "";
  position: absolute;
  top: 0; left: 18%; right: 18%;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(192, 132, 252, 0.55), transparent);
  pointer-events: none;
}

/* رابط «الواجهة الرئيسية» داخل البطاقة — زجاج خفيف */
#page-login.active .auth-back-link,
#page-register.active .auth-back-link {
  border-radius: 12px;
  border: 1px solid rgba(168, 85, 247, 0.16);
  background: rgba(255, 255, 255, 0.03);
  padding: 8px 14px;
}

/* ─── (5) الشعار بطل النموذج — غلاف .auth-logo-stage (هالة بنفسجية هادئة) ─────── */
.auth-logo-stage {
  position: relative;
  display: inline-grid;
  place-items: center;
  isolation: isolate;
}
/* هالة بنفسجية ناعمة */
.auth-logo-stage::before {
  content: "";
  position: absolute;
  inset: -32%;
  border-radius: 50%;
  background: radial-gradient(closest-side,
    rgba(192, 132, 252, 0.22) 0%,
    rgba(168, 85, 247, 0.08) 50%,
    transparent 72%);
  z-index: -1;
  pointer-events: none;
}

/* الشعار نفسه (.h-logo المقنّع): ظلّ بنفسجي خفيف */
.auth-logo-stage .auth-logo {
  position: relative;
  z-index: 1;
  filter:
    drop-shadow(0 6px 16px rgba(0, 0, 0, 0.45))
    drop-shadow(0 0 18px rgba(192, 132, 252, 0.35));
}

/* العنوان «تسجيل الدخول/سوي حساب جديد» — أوضح فوق الزجاج */
body:has(#page-login.active) #page-login h3,
body:has(#page-register.active) #page-register h3 {
  background: linear-gradient(180deg, #ffffff, color-mix(in oklab, #ffffff 62%, var(--primary)));
  -webkit-background-clip: text;
          background-clip: text;
  -webkit-text-fill-color: transparent;
}

/* ─── (6) الحقول والأزرار — زجاج داكن، حدّ بنفسجي رفيع، توهّج عند التركيز ─────────── */
#page-login.active .h-input,
#page-register.active .h-input {
  background:
    linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0) 60%),
    var(--bg-input);
  border: 1.5px solid rgba(168, 85, 247, 0.18);
  color: #eaf2ff;
  box-shadow: inset 0 1px 2px rgba(0,0,0,0.25);
}
#page-login.active .h-input::placeholder,
#page-register.active .h-input::placeholder { color: #67768c; }
#page-login.active .h-input:hover,
#page-register.active .h-input:hover { border-color: rgba(192, 132, 252, 0.4); }
#page-login.active .h-input:focus,
#page-register.active .h-input:focus {
  border-color: var(--primary);
  background: var(--bg-input-focus);
  box-shadow: 0 0 0 4px rgba(168, 85, 247, 0.18), 0 0 26px -8px rgba(192, 132, 252, 0.6);
}
#page-login.active .h-btn,
#page-register.active .h-btn {
  box-shadow:
    inset 0 1px 0 rgba(255,255,255,0.22),
    inset 0 -1px 0 rgba(0,0,0,0.10),
    0 12px 28px -10px rgba(168, 85, 247, 0.45),
    0 0 0 1px rgba(192, 132, 252, 0.22);
}

/* رابط الدعم (تلجرام) أسفل البطاقة — زجاج خفيف متّسق */
#page-login.active a[target="_blank"],
#page-register.active a[target="_blank"] {
  background: rgba(255, 255, 255, 0.03);
  border-radius: 14px;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

/* ─── (7) تقليل الحركة — لا حركات على الشعار، الكتلة محفوظة احتياطاً ────────────── */
@media (prefers-reduced-motion: reduce) {
  .auth-logo-stage::before,
  .auth-logo-stage .auth-logo { animation: none !important; }
}


/* --------------- source: assets/css/96-cosmic-skin.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * 96-cosmic-skin.css — الجلد الكوني للصفحات الداخلية (إضافي، آخر طبقة، قابل للإزالة)
 * ────────────────────────────────────────────────────────────────────────────
 * يُحمَّل في index.html فقط، بعد main.css + h-upgrade.css + cine-cosmos.css +
 *   95-cinematic-auth.css. يكسو كل صفحات #page-* (بعد الدخول) بـ:
 *     (1) خلفية كونية هادئة تتبدّل تلقائياً مع الثيم (داكن=سماوي، وردي، فاتح)
 *         وتتبدّل مع توجّه الشاشة (عريض ↔ طولي) — عبر body::after فقط (صفر HTML).
 *     (2) سطوح زجاجية (كروت/شرائط/مودالات) يبان الكون خلفها، بلون زجاج لكل ثيم.
 *     (3) بانر ترحيب الداشبورد كصورة كونية متبدّلة مع الثيم + سكريم قراءة.
 *     (4) موتيف كوني خافت كعلامة مائية في الحالات الفارغة.
 *
 * بصري ١٠٠٪: لا يلمس أي JS / id / class / data-attr / handler / بنية DOM. التبديل
 *   مع الثيم يعتمد فقط على السمة :root[data-theme="…"] الموجودة أصلاً (لا نلمس كودها).
 *
 * ⚠️ ملاحظة معمارية مهمّة (انحراف مقصود عن المثال الحرفي في البرومبت):
 *   • البرومبت اقترح body::before للخلفية بـ z-index:-1. لكن:
 *       - h-upgrade.css يستعمل أصلاً «html body::before» (سبوت‌لايت أمبيانت) ⇒ لو
 *         استعملناه نصطدم به ونفقده.
 *       - body يملك «background: var(--bg-page)» معتمًا ⇒ أي طبقة بـ z-index:-1 تُرسَم
 *         خلف خلفية body فلا تظهر أبداً.
 *   • الحل المثبَت في هذا المشروع (نفس آلية h-upgrade spotlight و .h-auth-cosmos):
 *       نستعمل «body::after» (حُرّ تماماً، لا يستعمله أحد) بـ z-index:0 ⇒ يُرسَم فوق
 *       خلفية body وتحت المحتوى (body > * = z-index:1 عبر h-upgrade). نتيجة بصرية
 *       مطابقة لمراد البرومبت، لكن صحيحة فعلياً فوق هذا الكود تحديداً.
 *
 * المسارات هنا نسبية لمجلد هذا الملف (assets/css/) ⇒ «../cinematic/…».
 * أداء: backdrop-filter محصور بالشرائط/المودال؛ الكروت شفافة بلا blur؛ body::after
 *   عنصر ثابت (position:fixed) مركّب على الـGPU بلا background-attachment الثقيل.
 * لا حركات في هذا الملف إطلاقاً ⇒ آمن تماماً تحت prefers-reduced-motion.
 *
 * للإزالة: احذف سطر <link> الخاص به من index.html فقط. (لا أثر على أي ملف آخر.)
 * ════════════════════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════════════════════
 * (0) توكنات الجلد لكل ثيم — صورة الخلفية + سكريم القراءة + لون الزجاج + قاع آمن
 * ────────────────────────────────────────────────────────────────────────────
 * نُعرّف الصورة كمتغيّر (--ck-cosmos-img) ⇒ نكتب قاعدة body::after مرّة واحدة ونُبدّل
 * الصورة فقط حسب الثيم/التوجّه. image-set يقدّم WebP مع سقوط JPG (مدعوم في كل
 * المتصفّحات الحديثة — نفس ما يستعمله cine-cosmos.css للمعبد). القاع اللوني سقوطٌ
 * آمن لو تأخّر تحميل الصورة. السكريم متغيّر لأن الفاتح يحتاج وشاحاً فاتحاً (لا داكناً).
 * ════════════════════════════════════════════════════════════════════════════ */

/* ── الداكن (الافتراضي) — سماوي/كحلي ── */
:root {
  --ck-cosmos-img:
    image-set(url("../cinematic/cosmos-ambient-wide.webp") type("image/webp"),
              url("../cinematic/cosmos-ambient-wide.jpg")  type("image/jpeg"));
  --ck-banner-img:
    image-set(url("../cinematic/cosmos-banner.webp") type("image/webp"),
              url("../cinematic/cosmos-banner.jpg")  type("image/jpeg"));
  --ck-floor: #060912;
  /* وشاح قراءة داكن: يعمّق الأعلى (تحت الـnav) والأسفل (فوق bottom-nav)، أخفّ بالوسط */
  --ck-scrim: linear-gradient(180deg,
      rgba(3,6,14,0.52) 0%,
      rgba(3,6,14,0.12) 24%,
      rgba(3,6,14,0.22) 64%,
      rgba(3,6,14,0.54) 100%);
  /* زجاج السطوح (سماوي داكن) */
  --ck-glass:        rgba(14,22,39,0.62);
  --ck-glass-strong: rgba(14,22,39,0.80);
  --ck-glass-bd:     rgba(120,170,210,0.16);
}

/* ── البنفسجي — صورة + بانر + زجاج بنفسجي (السكريم يرث الداكن المحايد) ── */
:root[data-theme="purple"] {
  --ck-cosmos-img:
    image-set(url("../cinematic/cosmos-ambient-wide-purple.webp") type("image/webp"),
              url("../cinematic/cosmos-ambient-wide-purple.jpg")  type("image/jpeg"));
  --ck-banner-img:
    image-set(url("../cinematic/cosmos-banner-purple.webp") type("image/webp"),
              url("../cinematic/cosmos-banner-purple.jpg")  type("image/jpeg"));
  --ck-floor: #0c0618;
  --ck-glass:        rgba(20,12,38,0.62);
  --ck-glass-strong: rgba(20,12,38,0.80);
  --ck-glass-bd:     rgba(168,85,247,0.18);
}

/* ── الفاتح — 🚪 [ONE-DOOR V1 2026-08-02 M7.2] هوية ثلوج تبوك (-snow): أسماء
   جديدة لا استبدال بالمكان (ق1 — كاش الصور أسبوع + SWR). وشاح فاتح، زجاج أبيض ── */
:root[data-theme="light"] {
  --ck-cosmos-img:
    image-set(url("../cinematic/cosmos-ambient-wide-snow.webp") type("image/webp"),
              url("../cinematic/cosmos-ambient-wide-snow.jpg")  type("image/jpeg"));
  --ck-banner-img:
    image-set(url("../cinematic/cosmos-banner-snow.webp") type("image/webp"),
              url("../cinematic/cosmos-banner-snow.jpg")  type("image/jpeg"));
  --ck-floor: #eef1f6;
  /* وشاح فاتح: يبيّض الحواف قليلاً ليبقى النص الغامق مقروءاً فوق صورة ساطعة */
  --ck-scrim: linear-gradient(180deg,
      rgba(245,247,250,0.60) 0%,
      rgba(245,247,250,0.28) 26%,
      rgba(245,247,250,0.40) 66%,
      rgba(245,247,250,0.66) 100%);
  --ck-glass:        rgba(255,255,255,0.66);
  --ck-glass-strong: rgba(255,255,255,0.84);
  --ck-glass-bd:     rgba(120,140,170,0.22);
}
/* 🪽 [SILK-GLIDE 2026-07-17] الثيم الثلجي — إصلاحات تناسق الألوان (رقم 7)
   الزجاج الأبيض 66% الشفاف فوق صورة كونية مزدحمة يبهت البطاقات ويكاد يخفي
   حدها rgba(120,140,170,.22) — لوحة موحدة: بطاقات شبه صلبة بحد #e2e8f0.
   للتراجع: احذف هذه الكتلة. */
:root[data-theme="light"]{
  --ck-glass: rgba(255,255,255,0.92);
  --ck-glass-strong: rgba(255,255,255,0.96);
  --ck-glass-bd: #e2e8f0;
}
:root[data-theme="light"] .h-card,
:root[data-theme="light"] .stat-mini{box-shadow:0 2px 8px rgba(15,23,42,.06);}

/* ════════════════════════════════════════════════════════════════════════════
 * (1) الخلفية الكونية الداخلية — body::after (ثابتة، خلف المحتوى، z-index:0)
 * ════════════════════════════════════════════════════════════════════════════ */
body::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 0;                 /* فوق خلفية body المعتمة، تحت المحتوى (body>*=z-index:1) */
  pointer-events: none;
  background-color: var(--ck-floor);            /* قاع آمن */
  background-image:
    var(--ck-scrim),                            /* وشاح القراءة (الطبقة العليا) */
    var(--ck-cosmos-img);                        /* صورة الكون (تتبدّل مع الثيم/التوجّه) */
  background-repeat: no-repeat, no-repeat;
  background-position: center, center bottom;
  background-size: cover, cover;
}

/* تبديل حسب التوجّه: البورتريه + الشاشات الضيّقة ⇒ الصورة الطولية (لكل ثيم) ──────── */
@media (orientation: portrait), (max-width: 820px) {
  :root {
    --ck-cosmos-img:
      image-set(url("../cinematic/cosmos-ambient-tall.webp") type("image/webp"),
                url("../cinematic/cosmos-ambient-tall.jpg")  type("image/jpeg"));
  }
  :root[data-theme="purple"] {
    --ck-cosmos-img:
      image-set(url("../cinematic/cosmos-ambient-tall-purple.webp") type("image/webp"),
                url("../cinematic/cosmos-ambient-tall-purple.jpg")  type("image/jpeg"));
  }
  :root[data-theme="light"] {
    /* 🚪 [ONE-DOOR M7.2] الطولية بهوية ثلوج تبوك */
    --ck-cosmos-img:
      image-set(url("../cinematic/cosmos-ambient-tall-snow.webp") type("image/webp"),
                url("../cinematic/cosmos-ambient-tall-snow.jpg")  type("image/jpeg"));
  }
}

/* ─── حصر النطاق: لا خلفية كونية داخلية على الدخول/التسجيل (هناك المعبد عبر cine-cosmos) ─
 * نلغي body::after تماماً أثناء عرض صفحتي الـauth ⇒ يظهر .h-auth-cosmos (المعبد) وحده. */
body:has(#page-login.active)::after,
body:has(#page-register.active)::after {
  content: none;
}

/* ─── تعتيم أعمق على صفحة الفيديو (تركيز على المشغّل) — عبر تغيير المتغيّر فقط ───────
 * نضبط --ck-scrim على body نفسه (يرثه body::after) ⇒ خلفية معتمة هادئة خلف الفيديو
 * بلا استبدال الصورة ولا تكلفة filter. */
body:has(#page-video.active) {
  --ck-scrim: linear-gradient(180deg, rgba(0,0,0,0.62), rgba(0,0,0,0.55));
}
/* 🪽 [SILK-GLIDE 2026-07-17] الثيم الثلجي — إصلاحات تناسق الألوان (رقم 6)
   القاعدة أعلاه بلا استثناء light ⇒ وشاح أسود 62% فوق خلفية الفيديو الفاتحة
   يجعل النصوص الداكنة (--text-primary/--text-muted) غير مقروءة.
   للتراجع: احذف هذه الكتلة. */
:root[data-theme="light"] body:has(#page-video.active){
  --ck-scrim: linear-gradient(180deg, rgba(245,247,250,.80), rgba(245,247,250,.72));
}

/* ════════════════════════════════════════════════════════════════════════════
 * (2) السطوح الزجاجية — يبان الكون خلفها، بلون زجاج لكل ثيم
 * ────────────────────────────────────────────────────────────────────────────
 * نكتب القواعد بمحدِّدات مقيّدة بالثيم (:root[data-theme] …) بنفس قوة قواعد main.css
 * الملوّنة (0,3,0) ⇒ بما أنّ هذا الملف يُحمَّل أخيراً يتغلّب عليها. الداكن الافتراضي
 * (بلا data-theme) يُغطّى بالمحدّد المجرّد (0,1,0) المتغلّب بالترتيب على القاعدة الأساس.
 * القيمة تأتي من المتغيّر --ck-glass* ⇒ تعريف واحد يخدم كل الثيمات.
 *
 * • الكروت الكثيرة: شفافية فقط بلا backdrop-filter (أداء الجوال).
 * • الشرائط/المودال (قليلة/ثابتة): زجاج مكثّف + blur.
 * • لا نلمس .poster-card (تحمل بوسترات) ولا مشغّل الفيديو إطلاقاً.
 * • متغيّرات النص (--text-*) تبقى كما هي ⇒ الزجاج الداكن يحفظ قراءة الداكن، والأبيض
 *   يحفظ قراءة الفاتح (نص غامق).
 * ════════════════════════════════════════════════════════════════════════════ */

/* ── (أ) الكروت — زجاج خفيف بلا blur (الداكن الافتراضي) ── */
.h-card,
.stat-mini,
.playlist-drawer {
  background: var(--ck-glass);
  border-color: var(--ck-glass-bd);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
/* الكروت — تجاوز قواعد الثيم الملوّنة في main.css (نفس القوة + تحميل لاحق) */
:root[data-theme="purple"] .h-card,
:root[data-theme="light"]  .h-card,
:root[data-theme="purple"] .stat-mini,
:root[data-theme="light"]  .stat-mini,
:root[data-theme="purple"] .playlist-drawer,
:root[data-theme="light"]  .playlist-drawer {
  background: var(--ck-glass);
  border-color: var(--ck-glass-bd);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* ── (ب) الشرائط + المودال — زجاج مكثّف + blur (الداكن الافتراضي) ── */
.top-nav,
.bottom-nav,
.h-modal {
  background: var(--ck-glass-strong);
  border-color: var(--ck-glass-bd);
  backdrop-filter: blur(14px) saturate(1.05);
  -webkit-backdrop-filter: blur(14px) saturate(1.05);
}
/* الشرائط + المودال — تجاوز قواعد الثيم الملوّنة في main.css ── */
:root[data-theme="purple"] .top-nav,
:root[data-theme="light"]  .top-nav,
:root[data-theme="purple"] .bottom-nav,
:root[data-theme="light"]  .bottom-nav,
:root[data-theme="purple"] .h-modal,
:root[data-theme="light"]  .h-modal {
  background: var(--ck-glass-strong);
  border-color: var(--ck-glass-bd);
  backdrop-filter: blur(14px) saturate(1.05);
  -webkit-backdrop-filter: blur(14px) saturate(1.05);
}

/* ════════════════════════════════════════════════════════════════════════════
 * (3) بانر ترحيب الداشبورد — صورة كونية متبدّلة مع الثيم + سكريم قراءة
 * ────────────────────────────────────────────────────────────────────────────
 * العنصر = أوّل ابن داخل #page-dashboard (نمط inline: background:var(--gradient)…
 * position:relative; overflow:hidden). نتجاوز الصورة بـ!important (لتخطّي inline).
 * النص أبيض (#fff) داخل غلاف z-index:1 ⇒ سكريم ::after (z-index تلقائي) يقع فوق
 * الصورة وتحت النص فيبقى الترحيب واضحاً.
 * ════════════════════════════════════════════════════════════════════════════ */
#page-dashboard > div:first-child {
  background-image: var(--ck-banner-img) !important;
  background-size: cover !important;
  background-position: center !important;
  background-repeat: no-repeat !important;
}
#page-dashboard > div:first-child::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 16px;                 /* مطابقة لزوايا البانر */
  pointer-events: none;
  /* RTL: النص يبدأ يميناً ⇒ نُعمّق جهة اليمين (start) */
  background: linear-gradient(to left,
    rgba(3,6,14,0.56) 0%,
    rgba(3,6,14,0.30) 46%,
    rgba(3,6,14,0.12) 100%);
}
/* الفاتح: البانر ساطع ⇒ سكريم أعمق ليبقى النص الأبيض مقروءاً */
:root[data-theme="light"] #page-dashboard > div:first-child::after {
  background: linear-gradient(to left,
    rgba(3,6,14,0.72) 0%,
    rgba(3,6,14,0.50) 42%,
    rgba(3,6,14,0.22) 100%);
}

/* ════════════════════════════════════════════════════════════════════════════
 * (4) الموتيف الكوني — علامة مائية خافتة جدّاً خلف محتوى الحالات الفارغة
 * ────────────────────────────────────────────────────────────────────────────
 * نضعه خلف المحتوى (لا فوقه) كعلامة مائية هادئة لا تزاحم أيقونة <i> القائمة.
 * (الموتيف أزرق ⇒ نعيد تلوينه للوردي بـhue-rotate، ويبقى أزرق في الداكن/الفاتح.)
 * ════════════════════════════════════════════════════════════════════════════ */
.empty-state { position: relative; }
.empty-state > * { position: relative; z-index: 1; }   /* المحتوى فوق العلامة المائية */
.empty-state::before {
  content: "";
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  width: clamp(120px, 38vw, 190px);
  aspect-ratio: 1;
  z-index: 0;
  pointer-events: none;
  opacity: 0.12;
  background:
    image-set(url("../cinematic/cosmos-motif.webp") type("image/webp"),
              url("../cinematic/cosmos-motif.png")  type("image/png"))
    center / contain no-repeat;
}
:root[data-theme="light"] .empty-state::before { opacity: 0.10; }
/* البنفسجي — موتيف بنفسجي مخصّص (بلا hue-rotate؛ الصورة بنفسجية أصلاً) */
:root[data-theme="purple"] .empty-state::before {
  background-image:
    image-set(url("../cinematic/cosmos-motif-purple.webp") type("image/webp"),
              url("../cinematic/cosmos-motif-purple.png")  type("image/png"));
}
/* 🚪 [ONE-DOOR V1 2026-08-02 M7.2] الثلجي — موتيف ثلوج تبوك المخصّص (جبل + ندفة):
   كان الفاتح يرث الموتيف البنفسجي الافتراضي أعلاه. نفس التخصيص (0,2,1). */
:root[data-theme="light"] .empty-state::before {
  background-image:
    image-set(url("../cinematic/cosmos-motif-snow.webp") type("image/webp"),
              url("../cinematic/cosmos-motif-snow.png")  type("image/png"));
}

/* ════════════════════════════════════════════════════════════════════════════
 * (5) أداء الجوال — تخفيف نصف الـblur على الشرائط/المودال (≤768px)
 * ════════════════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
  .top-nav,
  .bottom-nav,
  .h-modal {
    backdrop-filter: blur(10px) saturate(1.03);
    -webkit-backdrop-filter: blur(10px) saturate(1.03);
  }
}

/* --------------- source: assets/css/97-responsive-harmony.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * 97-responsive-harmony.css — طبقة توحيد التجاوب البصري (إضافية، تُحمَّل آخر <link>)
 * ────────────────────────────────────────────────────────────────────────────
 * موديول مستقل ضمن assets/css/ — قابل للإزالة بحذف سطر <link> الخاص به في index.html.
 *
 * الغرض: نفس التصميم السينمائي تماماً، لكنه «متناسق ومضبوط» على كل الأجهزة في
 *        الوضع الطبيعي (آيفون صغير/كبير، أندرويد، تابلت، لابتوب، كمبيوتر). نُصلح فقط
 *        ما يكسر التناسق على الشاشات الصغيرة (أزرار/إيموجي بأبعاد px ثابتة لا تصغر).
 *
 * العقد (Zero Alteration):
 *   • بصري بحت 100٪ — صفر JS، صفر HTML، صفر handler، صفر تغيير id/class/بنية.
 *   • يُحمَّل أخيراً ⇒ يتغلّب على main.css و h-upgrade.css و 96-cosmic-skin.css بالترتيب.
 *   • مبدأ «سقف clamp = الحالة الأصلية»: كل قيمة تتدرّج عبر clamp() وسقفها الأعلى =
 *     القيمة الحالية على الكمبيوتر. الـ vw لا «يَعَضّ» إلا على الشاشات الضيّقة ⇒
 *     **لا اختلاف بصري على اللابتوب/الكمبيوتر** (القيم تصل لسقفها = الأصل).
 *   • لا نلمس: مشغّل الفيديو/البوستر/Fingerprint/الثيمات/خلفية المعبد/أي ملف لاندنق.
 *
 * نقاط التوقّف — موحّدة مع منظومة اللاندنق: ≤600 (جوال) / ≤480 / ≤390 (آيفون صغير)
 *               / ≤360 / ≤340 (الأصغر). نعتمد clamp() للتدرّج السلس بدل القفزات.
 *
 * ملاحظة حركة: هذا الملف ساكن بصرياً (بلا أي animation/transition جديد) ⇒ لا يخالف
 *              prefers-reduced-motion المُحترَمة أصلاً في h-upgrade.css.
 * ════════════════════════════════════════════════════════════════════════════ */


/* ─── (1) ثبات عبر المنصّات + حارس التمرير الأفقي ─────────────────────────────
 * نُكمل ضبط تضخّم النص (h-upgrade فيه -webkit- فقط) بإضافة القياسي، ونؤكّد منع
 * أي تمرير أفقي على كل المقاسات (overflow-x مضبوط أصلاً في h-upgrade:836، نُعزّزه). */
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
html, body {
  max-width: 100%;
  overflow-x: hidden;   /* حارس نهائي: لا سكرول أفقي على أي صفحة/أي عرض/أي ثيم */
}


/* ─── (2) الشريط العلوي .top-nav — أهم إصلاح ─────────────────────────────────
 * الهدف: نفس الشكل الفخم، لكن الأزرار والإيموجي تتناسب مع عرض الشاشة بلا «نفخ».
 *
 * تعارض الأسبقية المُعالَج: h-upgrade.css:857-863 يفرض min-width/min-height:44px عند
 * ≤600px فيمنع التصغير. هنا (محمّل لاحقاً، بنفس المحدّد) نُعيد min-* إلى 0 لنسمح
 * بالتدرّج، **مع الحفاظ على مساحة لمس آمنة ≥44px** عبر ::before شفّاف (Apple HIG). */

/* أزرار الأيقونة داخل الشريط العلوي (ملاحظة: لا يوجد .nav-btn داخل .top-nav حالياً —
   القاعدة وقائية لأي زر أيقونة مستقبلي في الشريط، وسقفها = 44px الأصلية). */
.top-nav .nav-btn {
  width: clamp(38px, 11vw, 44px);
  height: clamp(38px, 11vw, 44px);
  min-width: 0;            /* يتغلّب على min-width:44px في h-upgrade (محمّل قبلنا) */
  min-height: 0;
  font-size: clamp(0.9rem, 3.4vw, 1rem);   /* سقف 1rem = الأصل */
}

/* زر تغيير الثيم — سقفه 40px (قيمته الأصلية على الكمبيوتر في main.css:642). */
.theme-toggle-btn {
  width: clamp(36px, 10vw, 40px);
  height: clamp(36px, 10vw, 40px);
  min-width: 0;
  min-height: 0;
}

/* توسيع منطقة اللمس إلى ≥44px دون تكبير الإطار المرئي (حشوة شفافة غير مرئية).
   عند أصغر مقاس مرئي (36px) ⇒ 36 + 4×2 = 44px. لا خلفية/لا z-index ⇒ غير مرئية. */
.top-nav .nav-btn,
.theme-toggle-btn { position: relative; }
.top-nav .nav-btn::before,
.theme-toggle-btn::before {
  content: "";
  position: absolute;
  inset: -4px;
  /* تمرّر الضغط للزر نفسه (جزء من محتواه)، بلا أي أثر بصري */
}

/* الإيموجي 🌙🔵🌸☀️ — هو ما يبدو «منفوخاً» على iOS (Apple Color Emoji يُرسَم أكبر
   من حجم الخط المحدّد). نقيّده ليطابق وزن أيقونات FontAwesome المجاورة على iOS/أندرويد. */
.theme-toggle-btn .tt-icon {
  font-size: clamp(0.95rem, 3.4vw, 1.12rem);
  line-height: 1;
}

/* الشعار + العنوان: نمنع الانضغاط ونتدرّج بحجم النص (سقف 1.2rem = الأصل). */
.top-nav .nav-title {
  font-size: clamp(1rem, 4vw, 1.2rem);
  white-space: nowrap;
}

/* رابط الدعم «التواصل مع فريق الدعم» — أنماطه سطرية في index.html:228 و h-upgrade
   يفرض padding بـ!important ⇒ نستعمل !important هنا فقط (محدّد أقوى + محمّل أخيراً).
   النص يبقى ظاهراً افتراضياً؛ تدرّج الخط/الحشوة عبر clamp + nowrap لمنع الالتفاف. */
.top-nav .nav-actions a[target="_blank"] {
  font-size: clamp(0.68rem, 2.6vw, 0.8rem) !important;   /* سقف 0.8rem = الأصل */
  padding: clamp(5px, 1.5vw, 7px) clamp(9px, 3vw, 14px) !important;
  white-space: nowrap;
  letter-spacing: -0.01em;
}
.top-nav .nav-actions a[target="_blank"] .fab {
  font-size: clamp(0.95rem, 3.2vw, 1.1rem) !important;   /* سقف 1.1rem = الأصل */
}


/* ─── (3) الشريط السفلي + زر الطلب العائم ─────────────────────────────────────
 * تدرّج لطيف. لا نلمس min-height:56px (هدف لمس h-upgrade) ولا الوهج/الحدود. */
.bottom-nav .nav-item {
  font-size: clamp(0.66rem, 2.8vw, 0.72rem);   /* سقف 0.72rem = الأصل */
}
.nav-icon-wrap {
  width: clamp(34px, 9.5vw, 38px);
  height: clamp(34px, 9.5vw, 38px);
  font-size: clamp(1rem, 3vw, 1.1rem);
}
/* زر الطلب العائم: الأبعاد بـ!important في main.css:733 ⇒ نطابقها. نضبط margin-top
   بنفس النسبة حتى يبقى البروز متناسقاً (عند 54px ⇒ 54/-2+1 = -26px = الأصل بالضبط). */
.nav-icon-request {
  width: clamp(48px, 14vw, 54px) !important;
  height: clamp(48px, 14vw, 54px) !important;
  margin-top: calc(clamp(48px, 14vw, 54px) / -2 + 1px);
}


/* ─── (4) البطاقات والإحصائيات ────────────────────────────────────────────────
 * نضمن أن أرقام الإحصائيات لا تكسر السطر على ≤360px. سقوف = الأصل. لا نلمس بانر
 * الداشبورد ولا صورته/سكريمه (قادمة من 96-cosmic-skin) ولا شبكات البوسترات. */
.stat-mini .stat-num {
  font-size: clamp(1.05rem, 4.6vw, 1.4rem);   /* سقف 1.4rem = الأصل */
  white-space: nowrap;
}
.stat-mini .stat-label {
  font-size: clamp(0.66rem, 2.6vw, 0.72rem);   /* سقف 0.72rem = الأصل */
}


/* ─── (5) صفحتا الدخول والتسجيل ───────────────────────────────────────────────
 * شعارا الدخول/التسجيل أبعادهما سطرية (index.html:255 = 130px، :305 = 90px) ⇒
 * !important. تدرّج للأسفل على الصغير بلا تكبير فوق الأصل. البطاقة/الحقول تستعمل
 * clamp أصلاً في 95-cinematic-auth ⇒ لا نكسرها. خلفية المعبد محصورة بـ:has ⇒ تبقى. */
#page-login .auth-logo {
  width: clamp(96px, 26vw, 130px) !important;    /* سقف 130px = الأصل */
  height: clamp(96px, 26vw, 130px) !important;
}
#page-register .auth-logo {
  width: clamp(72px, 22vw, 90px) !important;     /* سقف 90px = الأصل */
  height: clamp(72px, 22vw, 90px) !important;
}


/* ─── (6) الحواف الآمنة (Safe-area) — مُفعَّلة بعد viewport-fit=cover ──────────
 * env() يرجع 0 على الأجهزة بلا شق/على الكمبيوتر ⇒ كل قيمة أدناه = الأصل بالضبط
 * (16px / 0px) ⇒ صفر تغيير خارج آيفونات الشق، وصفر أثر عمودي بأي حال.
 *
 * ⚠️ قرار هندسي مقصود — لماذا «الجوانب فقط» (landscape) لا القمة العمودية:
 *   حشوة body العلوية مضبوطة **سطرياً عبر JS** بالقيمة calc(var(--navbar-height)+42px)
 *   حيث الـ42px تحجز مكان «بانر الدعم»، وتتغيّر حسب فتح/إغلاق البانر (closeBanner).
 *   لو كبّرنا ارتفاع .top-nav بمقدار env(safe-area-inset-top) فلن تتبعه حشوة body
 *   (ممنوع لمس JS) ⇒ يتسرّب المحتوى أسفل الشريط/البانر على آيفون الشق. لذلك نتجنّب
 *   أي تكبير عمودي للشريط، ونكتفي بحواف الجوانب (آمنة 100٪: أفقية، لا تُحدث إزاحة
 *   عمودية، وتصبح 0 على الوضع الطولي/الكمبيوتر). القاع والجوانب العامة مؤمَّنة أصلاً
 *   (main.css:609 + h-upgrade.css:866) ⇒ viewport-fit=cover يفعّلها كما هي دون تغيير. */
@supports (top: env(safe-area-inset-top)) {
  /* الشريط العلوي ثابت (لا يتأثّر بحشوة body) ⇒ نُبعد محتواه عن شق الجانب في الوضع
     الأفقي، مع الإبقاء على 16px الأصلية عند انعدام الشق. */
  .top-nav {
    padding-left: max(16px, env(safe-area-inset-left, 0px));
    padding-right: max(16px, env(safe-area-inset-right, 0px));
  }
  /* الشريط السفلي ثابت كذلك ⇒ نؤمّن جوانبه (القاع العمودي مؤمَّن أصلاً main.css:609). */
  .bottom-nav {
    padding-left: env(safe-area-inset-left, 0px);
    padding-right: env(safe-area-inset-right, 0px);
  }
}


/* ════════════════════════════════════════════════════════════════════════════
 * نقاط التوقّف المرحلية — موحّدة مع منظومة اللاندنق. معظم التدرّج تكفّل به clamp
 * أعلاه؛ هذه الكتل لِما لا يُناسبه clamp (فجوات الشريط، فجوة العنوان السطرية، وملاذ
 * أخير لرابط الدعم عند أضيق الشاشات). كلها تنشط على الجوال فقط ⇒ الكمبيوتر سليم.
 * ════════════════════════════════════════════════════════════════════════════ */

/* ≤480px — تخفيف فجوة إجراءات الشريط (الأصل 12px ⇒ يبقى 12px فوق 480). */
@media (max-width: 480px) {
  .top-nav .nav-actions { gap: 10px; }
}

/* ≤390px (آيفون صغير) — إحكام بسيط إضافي لرابط الدعم. */
@media (max-width: 390px) {
  .top-nav .nav-actions a[target="_blank"] { letter-spacing: -0.015em; }
}

/* ≤360px — فجوة أصغر + تقليص فجوة العنوان السطرية (gap:6px سطري ⇒ !important). */
@media (max-width: 360px) {
  .top-nav .nav-actions { gap: 8px; }
  .top-nav .nav-title { gap: 4px !important; }
}

/* ≤340px (الأصغر) — ملاذ أخير: إن ضاق الشريط نُخفي نص الدعم بصرياً ونُبقي الأيقونة.
 * النص يبقى في DOM (قارئ الشاشة يقرؤه) — font-size:0 يطويه بصرياً فقط، فلا نفقد
 * الميزة ولا الوصولية. الأيقونة تُستعاد بحجمها. */
@media (max-width: 340px) {
  .top-nav .nav-actions a[target="_blank"] {
    font-size: 0 !important;
    gap: 0 !important;
    padding: 7px 10px !important;
  }
  .top-nav .nav-actions a[target="_blank"] .fab {
    font-size: 1.05rem !important;
  }
}


/* --------------- source: assets/css/98-cinematic-layers.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * 98-cinematic-layers.css — الطبقة السينمائية للفهارس وبطاقات الفيديو (إضافية، آخر طبقة)
 * ────────────────────────────────────────────────────────────────────────────
 * تُحمَّل في index.html بعد 97-responsive-harmony.css ⇒ تتغلّب بالترتيب على
 *   القواعد السابقة بنفس قوة المحدِّد (تكملة لتسلسل: cine-cosmos → 96 → 97 → 98).
 *
 * تكسو ثلاثة عناصر قائمة (شكلاً فقط — لا تلمس أي JS / id / handler / بنية DOM):
 *   (4) .category-header  — فهارس الفصول كشريط سينمائي (صورة كونية + وشاح RTL).
 *   (5) .course-card       — بطاقات الفيديو سينمائية لكل ثيم + حالتا «مكتمل» و«قيد التقدّم».
 *   (5-ج) #drawerList .drawer-item — لمسات لونية خفيفة متّسقة في مشغّل الفيديو.
 *
 * المبدأ: نُعرّف توكنات لونية لكل ثيم (داكن=افتراضي، وردي، فاتح) ونكتب القواعد مرّة
 *   واحدة تستهلك التوكنات ⇒ لا تكرار، والثيم يتبدّل عبر :root[data-theme="…"] القائم.
 *   الأخضر/البرتقالي للحالات «إشارة» عابرة للثيم (مكتمل=أخضر، قيد التقدّم=برتقالي) —
 *   أعمق في الداكن، أنقى/أفتح في الفاتح، سينمائي غير مزعج.
 *
 * أداء: بلا backdrop-filter على البطاقات (تتكرر كثيراً) — تدرّجات صلبة فقط.
 * وصول: prefers-reduced-motion يلغي الحركات المضافة (انظر §6)، والنص عالي التباين
 *   فوق كل خلفية في الثيمات الثلاثة (وشاح للفهارس، تدرّجات متّزنة للبطاقات).
 *
 * للإزالة: احذف سطر <link> الخاص به من index.html فقط. (لا أثر على أي ملف آخر.)
 * المسارات نسبية لمجلد هذا الملف (assets/css/) ⇒ «../cinematic/…».
 * ════════════════════════════════════════════════════════════════════════════ */

/* ════════════════════════════════════════════════════════════════════════════
 * (0) توكنات الثيمات — صورة شريط الفهرس + الوشاح + ألوان البطاقات والحالات
 * ════════════════════════════════════════════════════════════════════════════ */

/* ── الداكن (الافتراضي) — سماوي/كحلي عميق ── */
:root {
  /* فهرس الفصل: صورة الشريط (image-set: webp ثم jpg) + وشاح RTL أعمق يميناً + حد ناعم */
  --cat-img:
    image-set(url("../cinematic/cosmos-banner.webp") type("image/webp"),
              url("../cinematic/cosmos-banner.jpg")  type("image/jpeg"));
  --cat-floor: #0c1626;
  --cat-bd:    rgba(120,170,210,0.22);
  --cat-scrim: linear-gradient(to left,
      rgba(4,9,18,0.84) 0%, rgba(4,9,18,0.60) 46%, rgba(4,9,18,0.40) 100%);

  /* بطاقة عادية — أسود سينمائي */
  --cc-bg:   linear-gradient(155deg, #0d1626 0%, #06090f 100%);
  --cc-bd:   rgba(120,170,210,0.14);
  --cc-glow: rgba(70,130,190,0.20);
  --cc-rest: none;                 /* لمعة علوية (الفاتح فقط) */

  /* حالة «مكتمل» — أخضر سينمائي عميق */
  --cc-done-bg:   linear-gradient(155deg, #103a26 0%, #0a2418 100%);
  --cc-done-bd:   rgba(52,211,153,0.34);
  --cc-done-glow: rgba(16,185,129,0.22);

  /* حالة «قيد التقدّم» — برتقالي/كهرماني سينمائي عميق */
  --cc-prog-bg:   linear-gradient(155deg, #2e1f0c 0%, #1d1308 100%);
  --cc-prog-bd:   rgba(245,158,11,0.34);
  --cc-prog-glow: rgba(245,158,11,0.22);
  --cc-prog-bar:  linear-gradient(90deg, #f59e0b 0%, #f97316 100%);

  /* الشارات */
  --cc-done-badge-bg: rgba(16,185,129,0.18);
  --cc-done-badge-fg: #6ee7b7;
  --cc-prog-badge-bg: rgba(245,158,11,0.18);
  --cc-prog-badge-fg: #fcd34d;
}

/* ── البنفسجي — نتجاوز توكنات البطاقة العادية فقط؛ الأخضر/البرتقالي يبقيان عميقين ── */
:root[data-theme="purple"] {
  --cat-img:
    image-set(url("../cinematic/cosmos-banner-purple.webp") type("image/webp"),
              url("../cinematic/cosmos-banner-purple.jpg")  type("image/jpeg"));
  --cat-floor: #140a24;
  --cat-bd:    rgba(168,85,247,0.26);
  --cat-scrim: linear-gradient(to left,
      rgba(16,8,28,0.84) 0%, rgba(16,8,28,0.60) 46%, rgba(16,8,28,0.40) 100%);

  --cc-bg:   linear-gradient(155deg, #1e1233 0%, #0c0618 100%);
  --cc-bd:   rgba(168,85,247,0.18);
  --cc-glow: rgba(168,85,247,0.18);
}

/* ── الفاتح — ثلجي سينمائي بارد؛ النص غامق ⇒ توكنات حالات أفتح + شارات نصّها غامق ──
   🚪 [ONE-DOOR V1 2026-08-02 M7.2] البانر بهوية ثلوج تبوك (-snow، اسم جديد ق1) ── */
:root[data-theme="light"] {
  --cat-img:
    image-set(url("../cinematic/cosmos-banner-snow.webp") type("image/webp"),
              url("../cinematic/cosmos-banner-snow.jpg")  type("image/jpeg"));
  --cat-floor: #dde6f2;
  --cat-bd:    rgba(110,130,165,0.30);
  /* نص الفهرس أبيض دائماً ⇒ وشاح أعمق فوق الصورة الثلجية الساطعة ليبقى مقروءاً */
  --cat-scrim: linear-gradient(to left,
      rgba(4,9,18,0.90) 0%, rgba(4,9,18,0.70) 46%, rgba(4,9,18,0.48) 100%);

  --cc-bg:   linear-gradient(155deg, #f5f9fe 0%, #e6eef9 100%);
  --cc-bd:   rgba(120,140,170,0.30);
  --cc-glow: rgba(37,99,235,0.14);
  --cc-rest: inset 0 1px 0 rgba(255,255,255,0.75);   /* لمعة علوية ناعمة */

  --cc-done-bg:   linear-gradient(155deg, #e6f8ef 0%, #cdeedb 100%);  /* منت بارد */
  --cc-done-bd:   rgba(16,140,92,0.40);
  --cc-done-glow: rgba(16,185,129,0.18);

  --cc-prog-bg:   linear-gradient(155deg, #fdf1da 0%, #f8e2bd 100%);  /* كهرمان فاتح */
  --cc-prog-bd:   rgba(194,124,20,0.42);
  --cc-prog-glow: rgba(245,158,11,0.18);

  --cc-done-badge-bg: rgba(16,140,92,0.16);
  --cc-done-badge-fg: #0c7a4d;
  --cc-prog-badge-bg: rgba(194,124,20,0.18);
  --cc-prog-badge-fg: #9a6410;
}

/* ════════════════════════════════════════════════════════════════════════════
 * (4) فهارس الفصول — .category-header كشريط سينمائي (صورة + وشاح RTL)
 * ────────────────────────────────────────────────────────────────────────────
 * نتجاوز «background: var(--gradient)» في main.css (نفس قوة المحدِّد 0,1,0 + تحميل
 *   لاحق). الزوايا 12px واللون #fff يبقيان من main.css. الوشاح أعمق جهة اليمين (RTL:
 *   حيث يبدأ العنوان) فيبقى عالي التباين؛ السهم (يسار) يأخذ ظلّاً نصّياً للقراءة.
 * ════════════════════════════════════════════════════════════════════════════ */
.category-header {
  background-color: var(--cat-floor);
  background-image: var(--cat-scrim), var(--cat-img);    /* الوشاح فوق الصورة */
  background-repeat: no-repeat, no-repeat;
  background-position: center, center;
  background-size: cover, cover;
  border: 1px solid var(--cat-bd);
  /* حشو متجاوب: السقف = الأصل (14/16) فلا يتغيّر سطح المكتب */
  padding: clamp(11px, 3.2vw, 14px) clamp(13px, 4vw, 16px);
}
/* النص فوق الصورة — ظل خفيف يرفع التباين فوق المناطق المزدحمة */
.category-header .cat-title { text-shadow: 0 1px 3px rgba(0,0,0,0.35); }
.category-header .category-chevron {
  color: #fff;
  text-shadow: 0 1px 3px rgba(0,0,0,0.45);   /* السهم يقع على الجهة الأخفّ وشاحاً */
}
/* الشارة — زجاج أبيض خفيف فوق الصورة */
.category-header .category-badge {
  background: rgba(255,255,255,0.18);
  border: 1px solid rgba(255,255,255,0.28);
  color: #fff;
}
/* Hover — لمعة سينمائية هادئة (لا قفزات): نلغي خفوت main.css ونرفع السطوع قليلاً */
.category-header:hover {
  opacity: 1;
  filter: brightness(1.07) saturate(1.04);
  box-shadow: 0 6px 20px rgba(0,0,0,0.22);
}

/* ════════════════════════════════════════════════════════════════════════════
 * (5) بطاقات الفيديو — .course-card سينمائية لكل ثيم + حالتان
 * ────────────────────────────────────────────────────────────────────────────
 * نتجاوز «background: var(--bg-card)» و«border» في main.css (تحميل لاحق). نُبقي
 *   onclick/transition/الثمبنيل/شريط .h-progress كما هي — كسوة شكل فقط. كل الحالات
 *   تبقى قابلة للضغط (لا pointer-events:none).
 * ════════════════════════════════════════════════════════════════════════════ */
.course-card {
  background: var(--cc-bg);
  border: 1px solid var(--cc-bd);
  box-shadow: var(--cc-rest);          /* لمعة علوية في الفاتح، لا شيء في الداكن/الوردي */
  position: relative;                  /* لتثبيت العلامة المائية (الداكن) */
}
.course-card > * { position: relative; z-index: 1; }   /* المحتوى فوق العلامة المائية */

/* علامة مائية كونية خافتة جدّاً في زاوية البطاقة العادية (الداكن فقط) */
.course-card::after {
  content: "";
  position: absolute;
  inset: auto auto -18px 8px;          /* أسفل-يسار، يقصّها overflow:hidden */
  width: clamp(64px, 20%, 104px);
  aspect-ratio: 1;
  z-index: 0;
  pointer-events: none;
  opacity: 0.06;
  background:
    image-set(url("../cinematic/cosmos-motif.webp") type("image/webp"),
              url("../cinematic/cosmos-motif.png")  type("image/png"))
    left bottom / contain no-repeat;
}
/* لا علامة مائية في البنفسجي/الفاتح ولا على بطاقات الحالات */
:root[data-theme="purple"] .course-card::after,
:root[data-theme="light"]  .course-card::after,
.course-card.is-completed::after,
.course-card.is-progress::after { content: none; }

/* Hover البطاقة العادية — توهج لوني هادئ (نُبقي رفعة translateY من main.css) */
.course-card:hover { box-shadow: 0 8px 24px var(--cc-glow); }

/* ── حالة «مكتمل» — البطاقة كلها خضراء سينمائية + توهج أخضر + حد أخضر (تبقى قابلة للضغط) ── */
.course-card.is-completed {
  background: var(--cc-done-bg);
  border-color: var(--cc-done-bd);
  box-shadow: 0 0 0 1px var(--cc-done-bd), 0 4px 18px var(--cc-done-glow);
}
.course-card.is-completed:hover {
  box-shadow: 0 0 0 1px var(--cc-done-bd), 0 8px 26px var(--cc-done-glow);
}

/* ── حالة «قيد التقدّم» — البطاقة كلها برتقالية سينمائية + توهج برتقالي + شريط كهرماني ── */
.course-card.is-progress {
  background: var(--cc-prog-bg);
  border-color: var(--cc-prog-bd);
  box-shadow: 0 0 0 1px var(--cc-prog-bd), 0 4px 18px var(--cc-prog-glow);
}
.course-card.is-progress:hover {
  box-shadow: 0 0 0 1px var(--cc-prog-bd), 0 8px 26px var(--cc-prog-glow);
}
/* شريط التقدّم داخل البطاقة — كهرماني متّسق بدل السماوي الافتراضي */
.course-card.is-progress .h-progress-bar { background: var(--cc-prog-bar); }

/* ── الشارات النصّية (.cc-badge) — بديل أنيق عن الإيموجي، تُنسَّق هنا ── */
.cc-badge {
  display: inline-block;
  vertical-align: middle;
  margin-inline-start: 6px;
  padding: 1px 9px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  line-height: 1.7;
  white-space: nowrap;
}
.cc-badge--done {                       /* «مكتمل» — شارة خضراء + علامة صحّ (Unicode، بلا اعتماد خط) */
  background: var(--cc-done-badge-bg);
  color: var(--cc-done-badge-fg);
  border: 1px solid var(--cc-done-bd);
}
.cc-badge--done::before { content: "\2713"; margin-inline-end: 4px; font-weight: 900; }
.cc-badge--prog {                       /* «%» — شارة كهرمانية */
  background: var(--cc-prog-badge-bg);
  color: var(--cc-prog-badge-fg);
  border: 1px solid var(--cc-prog-bd);
}

/* ════════════════════════════════════════════════════════════════════════════
 * (5-ج) مشغّل الفيديو — لمسات لونية خفيفة متّسقة على عناصر القائمة (drawer)
 * ────────────────────────────────────────────────────────────────────────────
 * سياق مركّز ⇒ إشارة لونية خفيفة فقط (لا خلفيات كاملة). الحدود الجانبية والأيقونة
 *   موجودة أصلاً في main.css؛ نضيف تلميحاً للخلفية + نوحّد الألوان مع لغة البطاقات.
 *   #drawerList (id) يرفع القوة فوق قواعد main.css الملوّنة بالثيم.
 * ════════════════════════════════════════════════════════════════════════════ */
#drawerList .drawer-item.completed   { background: rgba(16,185,129,0.07); }
#drawerList .drawer-item.completed .drawer-done-icon { color: #34d399; }
#drawerList .drawer-item.in-progress { background: rgba(245,158,11,0.07); }
#drawerList .drawer-item.in-progress .drawer-watch-fill {
  background: linear-gradient(90deg, #f59e0b 0%, #f97316 100%);
}
/* العنصر قيد التشغيل — لمسة بلون الثيم الحالي (بدل الأزرق المحذوف) */
#drawerList .drawer-item.playing { background: color-mix(in srgb, var(--primary) 12%, transparent); }

/* ════════════════════════════════════════════════════════════════════════════
 * (6) التجاوب + إمكانية الوصول
 * ════════════════════════════════════════════════════════════════════════════ */

/* الجوال (≤480px): خفّف حشو الفهرس وأبرز جزءاً ألطف من صورة الشريط */
@media (max-width: 480px) {
  .category-header { padding: 10px 12px; background-position: center, center 30%; }
}

/* البانر الترحيبي: اسمح للجملة الأطول بالالتفاف بأناقة على الشاشات الضيّقة (لا قصّ) */
@media (max-width: 380px) {
  #page-dashboard > div:first-child p { line-height: 1.45; }
}

/* احترام تقليل الحركة: ألغِ الحركات المضافة (نُبقي الحالات الساكنة والتوهجات الثابتة) */
@media (prefers-reduced-motion: reduce) {
  .category-header, .course-card { transition: none; }
  .category-header:hover { filter: none; }
  .course-card:hover { transform: none; }
}

/* --------------- source: assets/css/99-theme-isolation.css --------------- */
/* ════════════════════════════════════════════════════════════════════════
   99-theme-isolation.css — عزل الثيم (طبقة إضافية، آخر ملف في تتالي index)
   ──────────────────────────────────────────────────────────────────────
   الهدف: إبقاء «تسجيل الدخول» و«إنشاء حساب» بلوحة بنفسجية داكنة موحّدة مهما كان
   الثيم المحفوظ (بنفسجي/وردي/فاتح) — حتى على متصفحات WebView القديمة داخل تطبيقات
   مثل تيليجرام التي لا تدعم المُحدِّد :has().
   الآلية: سكربت ui-theme-isolation.js يضيف الصنف .is-auth-screen على <body>
   عند تفعيل أيٍّ من صفحتَي المصادقة، وهذه القواعد تعيد فرض اللوحة الداكنة.
   القيم مطابقة تماماً لـ 95-cinematic-auth.css لكن بصنف بدل :has (توافق أوسع).
   إضافي بالكامل وقابل للإزالة بحذف <link> هذا الملف + سطر السكربت.
   ════════════════════════════════════════════════════════════════════════ */

/* (1) فرض اللوحة الداكنة على شاشات المصادقة — نفس قيم القفل السينمائي بالضبط */
body.is-auth-screen {
  --primary:        #a855f7;
  --primary-hover:  #9333ea;
  --primary-light:  #c084fc;
  --bg-page:        #0c0618;
  --bg-card:        #1a1030;
  --bg-input:       rgba(26, 16, 48, 0.62);
  --bg-input-focus: rgba(38, 24, 64, 0.82);
  --text-primary:   #f3e9ff;
  --text-secondary: #c4b3da;
  --text-muted:     #8576a0;
  --border-color:   rgba(168, 85, 247, 0.16);
  --glow:           0 0 0 4px rgba(168, 85, 247, 0.18);
  --hu-halo:        rgba(168, 85, 247, 0.22);
  background: #0c0618 !important;
}

/* (2) إخفاء مبدّل الثيم + بانر الدعم العائم داخل شاشات المصادقة (كما في 95) */
body.is-auth-screen #themeToggleBtn,
body.is-auth-screen #supportBanner { display: none !important; }

/* (3) إلغاء خلفية الكون الداخلية (body::after) فوق المصادقة ⇒ يظهر المعبد وحده */
body.is-auth-screen::after { content: none !important; }

/* (4) إظهار خلفية المعبد السينمائية الخاصة بالمصادقة (بديل :has للمتصفحات القديمة) */
body.is-auth-screen .h-auth-cosmos { display: block !important; }

/* (5) توحيد خلفية <html> مع الثيم النشط ⇒ يمنع ظهور شريط بلون منفصل عند ارتداد
       التمرير (overscroll) في أعلى/أسفل الشاشة بالجوال. يتبع الثيم تلقائياً. */
html { background: var(--bg-page); }


/* --------------- source: assets/css/100-performance-mode.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * 🟣 [PERF-STUDENT 2026-06-10] 100-performance-mode.css — وضع الأداء القصوى
 * ────────────────────────────────────────────────────────────────────────────
 * مرآة طبقة الأدمن 99 لمنصة الطالب. تُحمَّل آخر ملف CSS في index.html.
 * التحميل بسطر واحد = التراجع بحذف سطر واحد (يرجع الشكل القديم بالكامل).
 *
 * الفلسفة: نحذف «كلفة» الحركة لا «جمالها» — الديسكتوب يحتفظ بأناقة مخففة،
 * والجوال (hover:none / pointer:coarse) يحصل على فورية مطلقة.
 * الأرقام من جرد فعلي: ~50 transition:all، ~121 backdrop-filter، 32 أنيميشن
 * لانهائي بالتطبيق، 3 خلفيات body ثابتة (fixed)، صفر مستمعات
 * animationend/transitionend في كل JS (مُثبت بـ grep ⇒ القتل آمن).
 *
 * الأقسام: §1 أنيميشن الدخول | §2 النبضات اللانهائية | §3 الزجاج backdrop
 * §4 خلفيات fixed | §5 الانتقالات والظلال | §hover حارس الهوفر واللمس
 * §6 انسجام الأجهزة | §7 القوائم الطويلة | §8 perf-lite + reduced-motion
 * §9 أدوات (هياكل شيمر + سهم العودة)
 * ════════════════════════════════════════════════════════════════════════════ */

/* ═══ §0 عام (كل الأجهزة) — مكاسب مجانية بلا أثر بصري ══════════════════════ */
body { touch-action: manipulation; }
a, button, .h-btn, .nav-item, .nav-btn, .poster-card, .course-card,
.svc-card, .profile-menu-item, .drawer-item, .category-header {
  -webkit-tap-highlight-color: transparent;
  touch-action: manipulation;
}
/* تأثير الموجة (هوية) — صفر اعتراض لمس + تلميح تركيب */
.ripple-circle { pointer-events: none; will-change: transform, opacity; }

/* ═════════════════════════════════════════════════════════════════════════
 * الجوال/اللمس — فورية مطلقة
 * ═════════════════════════════════════════════════════════════════════════ */
@media (hover: none), (pointer: coarse) {

  /* ─── §1 أنيميشن الدخول: لا شيء — الصفحة تظهر فوراً ─────────────────── */
  .page,
  .page.slide-left, .page.slide-right, .page.slide-up,
  .poster-card.stagger-poster,
  .stagger-card,
  .count-animate { animation: none !important; }
  /* أنيميشن inline (كرت الترحيب fadeInScale + نبض «اسمك الثلاثي») */
  #page-dashboard div[style*="fadeInScale"] { animation: none !important; }
  #page-register span[style*="namePulseGlow"] { animation: none !important; }
  /* يبقى يتحرك: .h-progress-bar.animated (progressFill 0.8s مرة واحدة — وظيفي) */

  /* ─── §2 النبضات اللانهائية الزخرفية: إيقاف كامل على الجوال ───────────
     يبقى يتحرك: .spinner::after / .sbil-spinner / .pcs-spinner / .fa-spin
     (سبينرات) + .skeleton/.poster-skeleton/.h-skel-* (هياكل تحميل) +
     .wl-cd-sep (وميض فاصل countdown مقاطع الانتظار — وظيفي) +
     .sbil-pending-dots (مؤشر «جاري» فعلي). الشارات تبقى ظاهرة ثابتة. */
  /* 🪽 [SILK-GLIDE 2026-07-17 R7] أزيل .login-gradient-bg من القائمة — القاعدة الميتة
     حُذفت من main.css (للتراجع: أعد السطر مع إعادة القاعدة هناك) */
  .nav-icon-request .nav-custom-icon,
  .nav-icon-request::before,
  .lesson-card--waiting .course-thumb::after,
  .lesson-card--waiting .wl-center-icon,
  .lesson-card--waiting .wl-badge,
  .lesson-card--waiting .wl-pct-fill::after,
  /* 🪽 [SILK-GLIDE 2026-07-17 R2] قفل البوابة التتابعية: نبض القفل الخامل + وهج ::after —
     زخرفة لانهائية تُقتل على الجوال. :not(.sg-unlocking) يستثني اهتزازة الفتح الوظيفية
     (0.9s مرة واحدة — وإلا دهسها الـ!important). للتراجع: احذف السطر التالي. */
  .sg-gate-overlay:not(.sg-unlocking) .sg-gate-lock, .sg-gate-lock::after,
  .tg-particle, .tg-logo-wrap, .tg-logo-glow, .tg-open-btn,
  .tg-status-dot, .tg-success-ring, .tg-recovery-icon-bg,
  .dlm-badge .dot, .dlm-illust .halo,
  .sbil-svc-card[data-has-unpaid="1"],
  .sbil-result-icon-bg,
  .sbil-rt-connected i,
  .svc-card-badge,
  .sbil-pickcard-due .sbil-pickcard-status i,
  .sbil-pickcard-overdue .sbil-pickcard-status i,
  .cine-cosmos, .cine-stars, .cine-stars::after,
  .cine-aurora, .cine-aurora::before, .cine-aurora::after { animation: none !important; }

  /* ─── §3 الزجاج: إلغاء كامل على اللمس + خلفيات صلبة بروح كل ثيم ──────── */
  *, *::before, *::after {
    -webkit-backdrop-filter: none !important;
    backdrop-filter: none !important;
  }
  /* الشرائط والمودالات — صلبة شبه معتمة (معايرة على الثيمات الأربعة) */
  .top-nav, .bottom-nav, .h-modal, .h-toast, .playlist-drawer {
    background: rgba(13, 17, 28, 0.97) !important;
  }
  :root[data-theme="purple"] .top-nav, :root[data-theme="purple"] .bottom-nav,
  :root[data-theme="purple"] .h-modal, :root[data-theme="purple"] .h-toast,
  :root[data-theme="purple"] .playlist-drawer {
    background: rgba(18, 12, 38, 0.96) !important;
  }
  :root[data-theme="light"] .top-nav, :root[data-theme="light"] .bottom-nav,
  :root[data-theme="light"] .h-modal, :root[data-theme="light"] .playlist-drawer {
    background: rgba(250, 251, 253, 0.97) !important;
  }
  :root[data-theme="light"] .h-toast { background: rgba(255, 255, 255, 0.97) !important; }
  /* بطاقات الثيمات الزجاجية (وردي/بنفسجي كان عليها blur 6px) — تعتيم أعلى بدل الزجاج */
  :root[data-theme="purple"] .h-card {
    background: linear-gradient(145deg, rgba(40, 26, 64, 0.95), rgba(26, 16, 48, 0.97)) !important;
  }
  /* خلفيات المودالات/الشيتات (كانت blur) — سكريم أعمق يعوّض غياب الضبابية */
  .h-modal-overlay, .dlm-backdrop, .sbil-pay-modal-backdrop, .sbil-receipt-overlay,
  .pcs-sheet-backdrop, .tg-modal-overlay, .fp-gate-backdrop, .final-req-overlay {
    background-color: rgba(4, 6, 12, 0.78) !important;
  }
  /* 🪽 [SILK-GLIDE 2026-07-17 مراجعة عدائية] القاعدة أعلاه غير مقيدة بالثيم
     فكانت تُسقط سكريم device-limit-modal.css الفاتح («رقم 10») على
     الجوال. للتراجع: احذف هذه الكتلة. */
  :root[data-theme="light"] .dlm-backdrop {
    background-color: rgba(15, 23, 42, .45) !important;
  }

  /* ─── §4 خلفيات fixed: إعادة رسم كاملة مع كل سكرول على الجوال ─────────── */
  body { background-attachment: scroll !important; }

  /* ─── §hover حارس الهوفر اللزج: أول نقرة لمس كانت تفعّل hover كاملاً ──── */
  .poster-card:hover, .dash-poster-card:hover, .h-card:hover, .course-card:hover,
  .svc-card:hover, .h-btn:hover, .profile-menu-item:hover, .stat-mini:hover,
  .category-header:hover, .drawer-item:hover, .vid-bookmark-item:hover,
  .auth-back-link:hover, .poster-action-btn:hover {
    transform: none !important;
    filter: none !important;
  }
  .poster-card:hover img, .poster-card:hover .poster-img-wrap img { transform: none !important; }
  /* شاين البطاقات (::before تظليل + ::after لمعة قطرية) — معدوم على اللمس */
  .poster-card::before, .poster-card::after { display: none !important; }
  .h-btn:hover::after { box-shadow: none !important; }
  /* بديل اللمس الفوري: إحساس «ضغطة» حقيقي بلا كلفة */
  .poster-card:active, .dash-poster-card:active, .course-card:active,
  .h-card:active, .svc-card:active, .h-btn:active, .profile-menu-item:active,
  .drawer-item:active, .nav-item:active, .category-header:active {
    transform: scale(0.985) !important;
    transition: transform 0.06s ease !important;
  }

  /* ─── §5 الظلال متعددة الطبقات ⇒ ظل واحد خفيف على اللمس ───────────────── */
  .poster-card, .dash-poster-card { box-shadow: 0 6px 18px rgba(0, 0, 0, 0.35) !important; }
  :root[data-theme="light"] .poster-card,
  :root[data-theme="light"] .dash-poster-card { box-shadow: 0 4px 14px rgba(15, 23, 42, 0.14) !important; }

  /* ─── §6 انسجام الأجهزة ──────────────────────────────────────────────── */
  /* مدخلات ≥16px = لا زوم قسري على iOS (شاشة الدخول تحديداً) */
  .h-input, input, select, textarea { font-size: max(16px, 1rem) !important; }
  /* أهداف لمس ≥ 44px للأزرار الصغيرة */
  .top-nav .nav-btn, .theme-toggle-btn, .vid-top-btn, .vid-ctrl-btn,
  .mini-player-btn, .vid-speed-btn {
    min-width: 44px; min-height: 44px;
  }
}

/* الحواف الآمنة (آيفون) — إضافي فوق معالجة 97 الجانبية: شريط القاع والتوست
   فوق home-indicator. لا أثر على الأجهزة بلا notch (env = 0). */
@supports (padding: env(safe-area-inset-bottom)) {
  @media (hover: none), (pointer: coarse) {
    .bottom-nav {
      height: calc(var(--bottombar-height) + env(safe-area-inset-bottom, 0px));
      padding-bottom: env(safe-area-inset-bottom, 0px);
    }
    .toast-container {
      bottom: calc(var(--bottombar-height) + 12px + env(safe-area-inset-bottom, 0px));
    }
    /* ⚠️ (اكتشاف المراجعة العدائية) لا قاعدة body هنا — main.css:604-607 يعالج
       env على حشوة body أصلاً مع إبقاء إزاحة الشريط؛ قاعدة body{padding-bottom:env}
       كانت ستمحو الإزاحة وتحجب آخر ~75px من كل صفحة خلف الشريط الثابت. */
  }
}

/* ═════════════════════════════════════════════════════════════════════════
 * الديسكتوب — أناقة مخففة (hover حقيقي موجود)
 * ═════════════════════════════════════════════════════════════════════════ */
@media (hover: hover) and (pointer: fine) {

  /* §1 دخول مخفف: نفس الحركات بنصف الكلفة (≤ 0.15s) */
  .page { animation-duration: 0.12s !important; }
  .page.slide-left, .page.slide-right, .page.slide-up { animation-duration: 0.15s !important; }
  .stagger-card { animation-duration: 0.2s !important; }

  /* §2 الأثقل فقط على الديسكتوب: نبض فلتر drop-shadow + الجزيئات العائمة */
  .nav-icon-request::before, .tg-particle { animation: none !important; }

  /* §3 الزجاج للعناصر العليا فقط وبسقف blur 8px */
  .top-nav { -webkit-backdrop-filter: blur(8px) saturate(1.1) !important; backdrop-filter: blur(8px) saturate(1.1) !important; }
  .bottom-nav { -webkit-backdrop-filter: blur(8px) saturate(1.1) !important; backdrop-filter: blur(8px) saturate(1.1) !important; }
  .h-modal, .h-modal-overlay, .h-toast,
  .dlm-backdrop, .sbil-pay-modal-backdrop, .sbil-receipt-overlay,
  .pcs-sheet-backdrop, .tg-modal-overlay, .fp-gate-backdrop,
  #page-login.active, #page-register.active {
    -webkit-backdrop-filter: blur(8px) !important;
    backdrop-filter: blur(8px) !important;
  }
  /* زجاج «البطاقات» (كلفة بلا قيمة فوق خلفية كونية أصلاً) ⇒ إلغاء */
  :root[data-theme="purple"] .h-card,
  .poster-status, .svc-badge, .streak-counter, .achievement-badge,
  .vid-ctrl-btn, .vid-top-btn, .nav-actions a[target="_blank"],
  .mf-badge, .wa-badge,
  #page-login.active a[target="_blank"], #page-register.active a[target="_blank"] {
    -webkit-backdrop-filter: none !important;
    backdrop-filter: none !important;
  }

  /* §5 هوفر مخفف: transform ≤ scale(1.02) + ظل واحد (بدل ظل ضخم + حلقة + شاين) */
  .poster-card:hover, .dash-poster-card:hover {
    transform: translateY(-2px) scale(1.02) !important;
    box-shadow: 0 10px 28px rgba(0, 0, 0, 0.4) !important;
  }
  :root[data-theme="light"] .poster-card:hover,
  :root[data-theme="light"] .dash-poster-card:hover { box-shadow: 0 8px 22px rgba(15, 23, 42, 0.18) !important; }
  .poster-card:hover img, .poster-card:hover .poster-img-wrap img { transform: scale(1.02) !important; }
  /* لمعة الـ::after القطرية (أغلى رسم في البطاقة) تُلغى حتى ديسكتوباً —
     يبقى تظليل ::before الرقيق (رخيص: opacity فقط) */
  .poster-card::after { display: none !important; }
}

/* ═══ §5 الانتقالات: كل transition:all (~50 موضعاً) تُحصر في الخصائص الرخيصة
 *      بمدة قصوى 0.15s — على كل الأجهزة (مُثبت بـ grep: لا مستمع transitionend
 *      في أي JS). pay-share خارج النطاق (لا يحمّل هذا الملف). ══════════════ */
.top-nav .nav-btn, .bottom-nav .nav-item, .nav-icon-wrap, .nav-custom-icon,
.h-input, .h-btn, .category-header, .profile-menu-item,
.req-step, .req-step-num, .req-select-fancy, .poster-action-btn,
.vid-ctrl-btn, .vid-top-btn, .vid-speed-btn, .mini-player-btn, .vid-bookmark-item,
.dlm-back, .dlm-btn, .exss-opt, .mf-pill, .mf-chip,
.pcs-sheet-back, .pcs-sheet-x, .pcs-paytype-opt, .pcs-method-opt, .pcs-cta,
.rh-back-btn, .rh-tile-arrow, .rh-chip,
.sbil-method-card, .sbil-pay-btn-large, .sbil-inst-pay-btn, .sbil-copy-btn,
.sbil-result-btn, .sbil-rt-badge, .sbil-receipt-btn, .sbil-receipt-close,
.sbil-receipt-foot button, .sbil-pickcard-tick,
.tg-link-banner-btn, .tg-copy-btn, .tg-secondary-actions button,
.wa-pill, .wa-chip,
#page-login a[target="_blank"], #page-register a[target="_blank"] {
  transition-property: background-color, color, border-color, opacity, transform !important;
  transition-duration: 0.15s !important;
}

/* ═══ §7 القوائم الطويلة: المتصفح يرسم الظاهر فقط ═══════════════════════ */
.course-card { content-visibility: auto; contain-intrinsic-size: auto 112px; }
.drawer-item { content-visibility: auto; contain-intrinsic-size: auto 52px; }
.vid-bookmark-item { content-visibility: auto; contain-intrinsic-size: auto 48px; }
.peer-race-card { content-visibility: auto; contain-intrinsic-size: auto 150px; }

/* ═══ §8 perf-lite (جهاز ضعيف — حتى لو ديسكتوب) + prefers-reduced-motion ═══
 *  html.perf-lite يفعّله سكربت inline في <head> عند deviceMemory≤4 أو
 *  hardwareConcurrency≤4 أو saveData. ════════════════════════════════════ */
html.perf-lite *, html.perf-lite *::before, html.perf-lite *::after {
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
}
html.perf-lite .top-nav, html.perf-lite .bottom-nav, html.perf-lite .h-modal {
  background: rgba(13, 17, 28, 0.97) !important;
}
html.perf-lite[data-theme="purple"] .top-nav, html.perf-lite[data-theme="purple"] .bottom-nav,
html.perf-lite[data-theme="purple"] .h-modal { background: rgba(18, 12, 38, 0.96) !important; }
html.perf-lite[data-theme="light"] .top-nav, html.perf-lite[data-theme="light"] .bottom-nav,
html.perf-lite[data-theme="light"] .h-modal { background: rgba(250, 251, 253, 0.97) !important; }
/* 🪽 [SILK-GLIDE 2026-07-17 R7] أزيل html.perf-lite .login-gradient-bg — القاعدة الميتة حُذفت من main.css (للتراجع: أعد السطر) */
html.perf-lite .nav-icon-request .nav-custom-icon,
html.perf-lite .nav-icon-request::before,
html.perf-lite .tg-particle, html.perf-lite .tg-logo-wrap, html.perf-lite .tg-logo-glow,
html.perf-lite .tg-open-btn, html.perf-lite .tg-success-ring,
html.perf-lite .cine-cosmos, html.perf-lite .cine-stars, html.perf-lite .cine-stars::after,
html.perf-lite .cine-aurora, html.perf-lite .cine-aurora::before, html.perf-lite .cine-aurora::after,
html.perf-lite .skeleton, html.perf-lite .poster-skeleton,
html.perf-lite .h-skel-row, html.perf-lite .h-skel-16x9 { animation: none !important; }
html.perf-lite .poster-card::before, html.perf-lite .poster-card::after { display: none !important; }
html.perf-lite .poster-card, html.perf-lite .dash-poster-card { box-shadow: 0 6px 18px rgba(0, 0, 0, 0.35) !important; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.001ms !important;
    animation-delay: 0ms !important;          /* (مراجعة عدائية) بدون تصفير التأخير تبقى بطاقات stagger مخفية ثم «تفقع» تباعاً */
    animation-iteration-count: 1 !important;
    transition-duration: 0.001ms !important;
  }
  /* (مراجعة عدائية) قواعد الديسكتوب أعلاه (.page/.stagger-card بخصوصية 0,1,0)
     كانت تتغلب على القاعدة العامة (*) — نعيد فرض التسطيح بخصوصية مكافئة */
  .page, .page.slide-left, .page.slide-right, .page.slide-up, .stagger-card {
    animation-duration: 0.001ms !important;
    animation-delay: 0ms !important;
  }
  /* السبينرات تبقى تدور — مؤشر تحميل وظيفي لا زخرفة */
  .spinner::after, .sbil-spinner, .pcs-spinner, .fa-spin, .fa-pulse {
    animation-duration: 0.8s !important;
    animation-iteration-count: infinite !important;
  }
  /* (مراجعة عدائية) نقاط «جاري التحقق من الدفع» مؤشر وظيفي — تبقى بتوقيتها الأصلي */
  .sbil-pending-dots span {
    animation-duration: 1.4s !important;
    animation-iteration-count: infinite !important;
  }
}

/* ═══ §9 أدوات ═══════════════════════════════════════════════════════════ */
/* هيكل صف درس (يستعمله openPlaylist) + هيكل فيديو 16:9 (يستعمله openVideo) */
.h-skel-row {
  height: 84px; border-radius: 14px; margin-bottom: 10px;
  background: linear-gradient(90deg, rgba(255, 255, 255, 0.05) 25%, rgba(255, 255, 255, 0.12) 50%, rgba(255, 255, 255, 0.05) 75%);
  background-size: 200% 100%;
  animation: hSkelShimmer 1.4s linear infinite;
}
.h-skel-16x9 {
  aspect-ratio: 16 / 9; border-radius: 12px;
  background: linear-gradient(90deg, rgba(255, 255, 255, 0.04) 25%, rgba(255, 255, 255, 0.10) 50%, rgba(255, 255, 255, 0.04) 75%);
  background-size: 200% 100%;
  animation: hSkelShimmer 1.4s linear infinite;
}
:root[data-theme="light"] .h-skel-row,
:root[data-theme="light"] .h-skel-16x9 {
  background: linear-gradient(90deg, rgba(15, 23, 42, 0.06) 25%, rgba(15, 23, 42, 0.12) 50%, rgba(15, 23, 42, 0.06) 75%);
  background-size: 200% 100%;
}
@keyframes hSkelShimmer { to { background-position: -200% 0; } }

/* سهم العودة للواجهة على شعار «حمدان» (navTitle) — محسوس أكثر (المهمة ٢/د).
   ⚠️ المحرف "‹" (U+2039) من فئة Bidi_Mirrored: تحت dir=rtl يُرسم «›» يشير
   يميناً (اتجاه العودة الصحيح). لا «تُصلحه» إلى "›" وإلا انعكس وصار خاطئاً. */
.top-nav .nav-title::after {
  content: "‹";
  font-size: 1.05em;
  opacity: 0.55;
  margin-inline-start: 2px;
  transition: opacity 0.15s ease, transform 0.15s ease;
}
@media (hover: hover) and (pointer: fine) {
  /* +3px = يمين (الـ transform لا ينعكس مع direction) — نفس اتجاه إشارة السهم المرسوم */
  .top-nav .nav-title:hover::after { opacity: 1; transform: translateX(3px); }
}

/* --------------- source: assets/css/101-iron-lock-modal.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
   101-iron-lock-modal.css — طبقة «القيد الحديدي» فوق device-limit-modal.css
   ────────────────────────────────────────────────────────────────────────────
   تنسيقات إضافية فقط لعناصر شاشة «الدكتور حمدان» الجديدة (قائمة الأجهزة + أزرار
   جديدة + وسم تحذير). لا تُعدّل القاعدة — طبقة فوقها (فلسفة الطبقات 90+).
   RTL + clamp() متجاوبة + نفس الثيم البنفسجي/الكوني الزجاجي.
   ════════════════════════════════════════════════════════════════════════════ */

/* ── كتلة الأجهزة المسجَّلة ─────────────────────────────────────────────── */
.dlm-root .dlm-devices{
  margin: clamp(6px, 1.6vw, 12px) 0 clamp(4px, 1.2vw, 10px);
  text-align: right;
}
.dlm-root .dlm-devices-title{
  display: flex; align-items: center; gap: 8px;
  font-size: clamp(.82rem, 2.6vw, .95rem);
  font-weight: 700;
  color: var(--text-primary, #fff);
  opacity: .92;
  margin-bottom: clamp(6px, 1.4vw, 10px);
}
.dlm-root .dlm-devices-title i{ opacity: .8; }

.dlm-root .dlm-dev-list{
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-direction: column; gap: clamp(6px, 1.4vw, 10px);
}

.dlm-root .dlm-dev{
  background: rgba(255,255,255,.05);
  border: 1px solid rgba(255,255,255,.10);
  border-radius: clamp(12px, 2.4vw, 16px);
  padding: clamp(9px, 2vw, 13px) clamp(11px, 2.4vw, 15px);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
}
.dlm-root .dlm-dev-head{
  display: flex; align-items: center; gap: 9px;
  font-size: clamp(.84rem, 2.7vw, .98rem);
  font-weight: 600;
  color: var(--text-primary, #fff);
  line-height: 1.5;
}
.dlm-root .dlm-dev-head i{
  flex: 0 0 auto;
  color: #6ee7f0; /* سماوي هادئ — متناسق، بلا توهج بنفسجي/أحمر */
  font-size: 1.02rem; opacity: .95;
}
.dlm-root .dlm-dev-name{ word-break: break-word; }
.dlm-root .dlm-dev-os{
  font-size: .82em; opacity: .7; font-weight: 500;
}
.dlm-root .dlm-dev-primary{
  display: inline-block;
  margin-inline-start: 6px;
  font-size: .72em; font-weight: 700;
  color: #34d399;
  background: rgba(52,211,153,.14);
  border: 1px solid rgba(52,211,153,.34);
  border-radius: 999px;
  padding: 1px 8px;
  vertical-align: middle;
}
.dlm-root .dlm-dev-meta{
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  margin-top: clamp(4px, 1vw, 7px);
  font-size: clamp(.72rem, 2.3vw, .82rem);
  color: var(--text-secondary, rgba(255,255,255,.7));
  opacity: .9;
}
.dlm-root .dlm-dev-dot{ opacity: .45; }

.dlm-root .dlm-devices-empty{
  background: rgba(255,255,255,.05);
  border: 1px dashed rgba(255,255,255,.16);
  border-radius: 14px;
  padding: clamp(10px, 2.2vw, 14px);
  font-size: clamp(.82rem, 2.6vw, .92rem);
  color: var(--text-secondary, rgba(255,255,255,.78));
  text-align: center;
}

/* ── تذييل زر الرجوع (سطر مستقل أسفل الأزرار) ───────────────────────────── */
.dlm-root .dlm-foot{
  margin-top: clamp(8px, 1.8vw, 13px);
  display: flex; justify-content: center;
}
.dlm-root .dlm-foot .dlm-btn{ width: 100%; }

/* ── زر «إعادة المحاولة» الناعم ─────────────────────────────────────────── */
.dlm-root .dlm-btn-soft{
  background: rgba(110,231,240,.10);
  border: 1px solid rgba(110,231,240,.30);
  color: #bdf3f7;
}
.dlm-root .dlm-btn-soft:hover{
  background: rgba(110,231,240,.18);
  border-color: rgba(110,231,240,.46);
}
.dlm-root .dlm-btn-soft:focus-visible{
  outline: 2px solid rgba(110,231,240,.7);
  outline-offset: 2px;
}

/* ── وسم «تعذّر التحقق» التحذيري ────────────────────────────────────────── */
.dlm-root .dlm-badge-warn{
  background: rgba(245,158,11,.14);
  border-color: rgba(245,158,11,.4) !important;
  color: #fcd9a0 !important;
}
.dlm-root .dlm-badge-warn .dot{ background: #f59e0b !important; }

/* ── الجمل الناعمة داخل الملاحظة ────────────────────────────────────────── */
.dlm-root .dlm-note .dlm-soft{
  opacity: .85;
  font-size: .95em;
}
.dlm-root .dlm-note p{ margin: 0 0 6px; }
.dlm-root .dlm-note p:last-child{ margin: 0; }

/* ── على الشاشات الصغيرة جداً: الأزرار عمودية مريحة ─────────────────────── */
@media (max-width: 380px){
  .dlm-root .dlm-actions{ flex-direction: column; }
  .dlm-root .dlm-actions .dlm-btn{ width: 100%; }
}


/* --------------- source: assets/css/102-video-experience.css --------------- */
/* ═════════════════════════════════════════════════════════════════════════
 * 🎬 102 — تجربة الفيديو الموحدة (2026-06-12)
 * جوال + ديسكتوب + آيفون + أندرويد + متصفحات تلجرام الداخلية.
 *
 * المبدأ: لا نلمس مشغل Bunny نفسه ولا قيود الحماية — كل شيء على «غلاف»
 * الفيديو (#videoWrapper) وصف الأزرار تحته. أربعة أنظمة:
 *   §1 صف الأزرار تحت المشغل (أهداف لمس ≥44px، إخفاء زر السرعة بوضع Bunny)
 *   §2 ملء الشاشة الأصلي (:fullscreen) — ديسكتوب/أندرويد كروم
 *   §3 ملء الشاشة البديل (html.h-fs-fake) — تلجرام/آيفون، مع تدوير اصطناعي
 *   §4 المشغل المصغر CSS (h-mini-on) — نفس iframe بلا إعادة تحميل
 * التراجع الكامل: حذف سطر <link> لهذا الملف من index.html.
 * ═════════════════════════════════════════════════════════════════════════ */

/* ─── §1 صف أزرار الفيديو تحت المشغل ─────────────────────────────────────── */
.vid-extra-controls {
  display: flex;
  gap: 8px;
  margin-top: 10px;
  flex-wrap: wrap;
  align-items: center;
}
.vid-extra-controls .h-btn {
  width: auto;
  padding: 9px 14px;
  font-size: 0.82rem;
  min-height: 44px; /* هدف لمس آمن (Apple HIG) */
}
/* وضع Bunny: زر السرعة لا يمكن أن يعمل (playerjs بلا setPlaybackRate) — يُخفى
   بدل أن يبقى زراً كاذباً؛ السرعة متاحة من ترس إعدادات مشغل Bunny نفسه */
.vid-extra-controls.bunny .vx-speed { display: none !important; }

/* ─── §2 ملء الشاشة الأصلي (Fullscreen API على الغلاف) ──────────────────── */
.video-wrapper:fullscreen {
  background: #000;
  width: 100%;
  height: 100%;
}
.video-wrapper:fullscreen .video-container {
  width: 100%;
  height: 100%;
  aspect-ratio: auto;
  border-radius: 0;
}
.video-wrapper:-webkit-full-screen { background: #000; width: 100%; height: 100%; }
.video-wrapper:-webkit-full-screen .video-container {
  width: 100%; height: 100%; aspect-ratio: auto; border-radius: 0;
}

/* شريط الخروج/التدوير العائم — يظهر داخل أي وضع ملء شاشة فقط */
#hFsBar {
  display: none;
  position: absolute;
  top: calc(10px + env(safe-area-inset-top, 0px));
  inset-inline-end: calc(10px + env(safe-area-inset-right, 0px));
  z-index: 40;
  gap: 8px;
}
.video-wrapper:fullscreen #hFsBar,
.video-wrapper:-webkit-full-screen #hFsBar,
html.h-fs-fake .video-wrapper.h-fs-el #hFsBar { display: flex; }
#hFsBar button {
  min-width: 44px;
  min-height: 44px;
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: 12px;
  background: rgba(0, 0, 0, 0.65);
  color: #fff;
  font-size: 1rem;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}
/* زر التدوير الاصطناعي معنيٌّ بالمسار البديل فقط */
.video-wrapper:fullscreen #hFsRotateBtn,
.video-wrapper:-webkit-full-screen #hFsRotateBtn { display: none; }

/* ─── §3 ملء الشاشة البديل — CSS فقط (يعمل حيث تفشل الـAPI) ─────────────── */
/* 🛡️ جذر حرج: transform على #page-video (حركة pageIn — تتجمد بأول إطار في
   التبويبات الخلفية) + content-visibility:auto على .page يجعلان position:fixed
   يُحسب نسبةً للصفحة لا للشاشة ⇒ ملء الشاشة/المصغر ينكمشان. نحيّدهما في
   الوضعين فقط — صفر أثر على بقية حركات المنصة. */
html.h-fs-fake #page-video,
#page-video.h-mini-detached {
  transform: none !important;
  animation: none !important;
  filter: none !important;
  content-visibility: visible !important;
}
html.h-fs-fake,
html.h-fs-fake body { overflow: hidden !important; }
/* 🛡️ supportBanner أيضاً: ابن مباشر للـbody بـz:999 سطري — كان يطفو فوق ملء
   الشاشة البديل (غلاف z:100000 محبوس بسياق تكديس الصفحة z:1). !important
   المؤلف يغلب السطري غير المهم، والخروج نظيف بالحالتين. */
html.h-fs-fake .top-nav,
html.h-fs-fake .bottom-nav,
html.h-fs-fake .toast-container,
html.h-fs-fake #supportBanner { display: none !important; }
html.h-fs-fake .video-wrapper.h-fs-el {
  position: fixed !important;
  inset: 0 !important;
  z-index: 100000;
  margin: 0 !important;
  background: #000;
  border-radius: 0;
}
html.h-fs-fake .video-wrapper.h-fs-el .video-container {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  aspect-ratio: auto;
  border-radius: 0;
}
/* التدوير الاصطناعي 90° للوضع الطولي: الحاوية تأخذ أبعاد الشاشة مقلوبة
   وتدور حول مركزها ⇒ فيديو 16:9 يملأ عرض الجهاز فعلياً بلا أي API */
html.h-fs-fake .video-wrapper.h-fs-el.h-fs-rotate .video-container {
  inset: auto;
  top: 50%;
  left: 50%;
  width: 100vh;
  height: 100vw;
  transform: translate(-50%, -50%) rotate(90deg);
}
/* 🛡️ Safari iOS: vh = المنفذ الكبير بينما شرائط المتصفح لا تنكمش داخل
   h-fs-fake (overflow:hidden يمنع التمرير) ⇒ كان يُقص ~طرفا الفيديو وأطراف
   شريط تحكم Bunny. dvh/dvw يتتبعان المنفذ الديناميكي الفعلي (iOS 15.4+)،
   و100vh/100vw أعلاه تبقى احتياطاً متدهوراً للمحركات الأقدم. */
@supports (height: 100dvh) {
  html.h-fs-fake .video-wrapper.h-fs-el.h-fs-rotate .video-container {
    width: 100dvh;
    height: 100dvw;
  }
}

/* ─── §4 المشغل المصغر CSS — نفس العنصر، صفر إعادة تحميل ────────────────── */
/* صفحة الفيديو «المنفصلة»: تبقى مرسومة (التشغيل والتتبع مستمران) لكن كل
   محتواها مخفي إلا غلاف الفيديو المثبّت بزاوية الشاشة */
#page-video.h-mini-detached {
  display: block !important;
  padding: 0 !important;
  margin: 0 !important;
  /* 🛡️ h-upgrade يجعل كل ابن للـbody سياق تكديس z:1 ⇒ الـ4500 على الغلاف
     قيمة داخلية محبوسة، و7 صفحات تأتي بعد page-video بالـDOM كانت تدفن
     المصغر عند فتحها (طلب مادة/خدماتي!). 1500 = فوق كل الصفحات (z:1)
     وتحت المودالات (2000) والتوست (9999). position:relative من h-upgrade. */
  z-index: 1500;
}
#page-video.h-mini-detached > *:not(#videoWrapper) { display: none !important; }

.video-wrapper.h-mini-on {
  position: fixed;
  inset-inline-end: 12px;
  bottom: calc(var(--bottombar-height, 64px) + 14px + env(safe-area-inset-bottom, 0px));
  width: min(320px, 62vw);
  z-index: 4500;
  border-radius: 14px;
  overflow: hidden;
  background: #000;
  box-shadow: 0 14px 44px rgba(0, 0, 0, 0.55);
}
.video-wrapper.h-mini-on .video-container { border-radius: 0; }
/* طبقات لا معنى لها داخل المصغر */
.video-wrapper.h-mini-on .vid-top-actions,
.video-wrapper.h-mini-on .vid-controls-overlay,
.video-wrapper.h-mini-on .vid-resume-prompt,
.video-wrapper.h-mini-on #hFsBar { display: none !important; }
/* شاشة النهاية تتقلص بحجم مقروء داخل المصغر */
.video-wrapper.h-mini-on .vid-end-content { padding: 8px; max-width: 95%; font-size: 0.72rem; }
.video-wrapper.h-mini-on .vid-end-check { font-size: 1.4rem; margin-bottom: 4px; }

/* شريط المصغر (عنوان + استعادة + إغلاق) — يُحقن مرة واحدة من video.js */
#hMiniBar {
  display: none;
  align-items: center;
  gap: 6px;
  padding: 6px 8px;
  background: rgba(10, 8, 22, 0.92);
  color: #fff;
  font-size: 0.78rem;
  touch-action: none; /* السحب بالإصبع بلا تمرير للصفحة */
  cursor: grab;
}
.video-wrapper.h-mini-on #hMiniBar { display: flex; }
#hMiniBar .h-mini-title {
  flex: 1;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-weight: 600;
}
#hMiniBar button {
  width: 36px;
  height: 36px;
  min-width: 36px;
  border: none;
  border-radius: 9px;
  background: rgba(255, 255, 255, 0.10);
  color: #fff;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* ─── §5 لمس الجوال: إظهار أزرار الفيديو المباشر بالكلاس (لا hover) ──────── */
/* main.css يربط الظهور بـ:hover فقط — على اللمس video.js يبدّل show-controls */
@media (hover: none), (pointer: coarse) {
  .video-wrapper.show-controls .vid-top-actions { opacity: 1; }
}

/* ─── §6 امتداد كامل للعرض على الجوال (تجربة أوسع بلا تكبير) ────────────── */
@media (max-width: 640px) {
  #page-video .video-wrapper:not(.h-mini-on):not(.h-fs-el) {
    margin-inline: calc(50% - 50vw);
  }
  #page-video .video-wrapper:not(.h-mini-on):not(.h-fs-el) .video-container {
    border-radius: 0;
  }
}


/* --------------- source: assets/css/103-request-experience.css --------------- */
/* ════════════════════════════════════════════════════════════════════════
 * 🟣 [Hubs+RX 2026-06-30] — تجربة الطلب الجديدة بالصور (طبقة 103)
 * ────────────────────────────────────────────────────────────────────────
 * الغرض:
 *   تنسيق سينمائي بنفسجي/ذهبي لشاشة «الطلب» الجديدة: هيرو بصورة، بطاقتا
 *   اختيار كبيرتان بصور غلاف، وورقة تأكيد/دفع سفلية (Bottom Sheet) أنيقة.
 *
 * مبادئ:
 *   • تدرّج آمن: كل صورة لها fallback (تدرّج بنفسجي + أيقونة) عبر .rx-noimg.
 *   • تجربة موحّدة 360→1024: dvh/svh + safe-area + أهداف لمس ≥44px.
 *   • سرعة: حركات دخول خفيفة فقط (≤200ms) + احترام prefers-reduced-motion.
 *
 * تُحمَّل بعد 102 لتغلب بنظافة. للإزالة: احذف <link> هذا + الملف.
 * ════════════════════════════════════════════════════════════════════════ */

/* متغيّرات محليّة (هوية بنفسجي/ذهبي) */
:root {
  --rx-gold: #fbbf24;
  --rx-gold-deep: #d97706;
  --rx-violet: #a855f7;
  --rx-violet-deep: #4c1d95;
}

/* ════════ (1) الهيرو ════════ */
.rx-hero {
  position: relative;
  border-radius: 20px;
  overflow: hidden;
  min-height: 150px;
  margin-bottom: 18px;
  background: linear-gradient(135deg, #2a1259 0%, var(--rx-violet-deep) 55%, #1a0d33 100%);
  isolation: isolate;
}
.rx-hero-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  z-index: 0;
  opacity: .92;
}
.rx-hero-scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  /* RTL: تعتيم أقوى من جهة البداية (يمين) لقراءة النص */
  background:
    linear-gradient(to left, rgba(15,8,30,0) 30%, rgba(20,8,40,.62) 100%),
    linear-gradient(to top, rgba(12,6,26,.70) 0%, rgba(12,6,26,0) 60%);
}
.rx-hero-content {
  position: relative;
  z-index: 2;
  padding: 26px 22px;
  text-align: right;
}
.rx-hero-title {
  margin: 0 0 6px;
  font-size: clamp(1.3rem, 1rem + 1.8vw, 1.8rem);
  font-weight: 800;
  color: #fff;
  letter-spacing: -.01em;
  text-shadow: 0 2px 12px rgba(0,0,0,.45);
}
.rx-hero-desc {
  margin: 0;
  font-size: clamp(.85rem, .78rem + .5vw, 1rem);
  color: #ecdcff;
  text-shadow: 0 1px 8px rgba(0,0,0,.4);
}

/* ════════ (2) المربعان الكبيران ════════ */
.rx-choice-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 14px;
}
@media (max-width: 560px) {
  .rx-choice-grid { grid-template-columns: 1fr; }
}
.rx-choice-card {
  position: relative;
  display: block;
  width: 100%;
  min-height: 168px;
  border: 1px solid var(--border-color);
  border-radius: 18px;
  overflow: hidden;
  cursor: pointer;
  padding: 0;
  text-align: right;
  background: linear-gradient(135deg, #241046 0%, var(--rx-violet-deep) 100%);
  isolation: isolate;
  -webkit-tap-highlight-color: transparent;
}
.rx-choice-media {
  position: absolute;
  inset: 0;
  z-index: 0;
  /* fallback: تدرّج بنفسجي يظهر تحت الصورة وعند فشلها */
  background: linear-gradient(135deg, #2a1259 0%, var(--rx-violet-deep) 60%, #1a0d33 100%);
  display: flex;
  align-items: center;
  justify-content: center;
}
.rx-choice-img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* 🚪 [ONE-DOOR V1b 2026-08-02] عاد الوسط الافتراضي: أصول TILE-TRIO الجديدة
     بلا نص مدموج (سبب object-position:15% في V1 زال معها — كان يتفادى أنصاف
     حروف العناوين المدموجة بأسفل صور V1). السكريمات لم تُمس. */
  z-index: 1;
}
.rx-choice-fallback {
  position: relative;
  z-index: 0;
  font-size: 3rem;
  color: rgba(251,191,36,.85);
  opacity: 0;            /* مخفي افتراضياً — يظهر فقط عند .rx-noimg */
}
.rx-choice-media.rx-noimg .rx-choice-fallback { opacity: 1; }
.rx-choice-scrim {
  position: absolute;
  inset: 0;
  z-index: 2;
  background:
    linear-gradient(to top, rgba(10,5,22,.85) 0%, rgba(10,5,22,.15) 55%, rgba(10,5,22,.05) 100%),
    linear-gradient(to left, rgba(10,5,22,0) 45%, rgba(10,5,22,.45) 100%);
}
.rx-choice-body {
  position: absolute;
  z-index: 3;
  right: 16px;
  left: 16px;
  bottom: 14px;
  text-align: right;
}
.rx-choice-title {
  margin: 0 0 4px;
  font-size: clamp(1.05rem, .95rem + .6vw, 1.25rem);
  font-weight: 800;
  color: #fff;
  text-shadow: 0 2px 10px rgba(0,0,0,.5);
}
.rx-choice-desc {
  margin: 0;
  font-size: .8rem;
  line-height: 1.5;
  color: #e7d8ff;
  text-shadow: 0 1px 8px rgba(0,0,0,.5);
}
.rx-choice-arrow {
  position: absolute;
  z-index: 3;
  top: 14px;
  left: 14px;          /* RTL: الزاوية الخلفية */
  width: 34px;
  height: 34px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: rgba(251,191,36,.18);
  border: 1px solid rgba(251,191,36,.45);
  color: var(--rx-gold);
  font-size: .85rem;
}
.rx-choice-card:hover { border-color: rgba(168,85,247,.55); }
.rx-choice-card:active { transform: scale(.985); }

/* ════════ (3) ورقة التأكيد/الدفع السفلية ════════ */
.rx-confirm-overlay {
  position: fixed;
  inset: 0;
  z-index: 100000;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  background: rgba(8,4,18,.55);
  opacity: 0;
  transition: opacity .16s ease;
}
.rx-confirm-overlay.rx-open { opacity: 1; }
.rx-confirm-sheet {
  width: 100%;
  max-width: 520px;
  background: var(--bg-card);
  border: 1px solid var(--border-color);
  border-bottom: 0;
  border-radius: 22px 22px 0 0;
  padding: 12px 20px calc(20px + env(safe-area-inset-bottom, 0px));
  box-shadow: 0 -10px 40px rgba(0,0,0,.4);
  transform: translateY(12px);
  transition: transform .18s ease;
  text-align: center;
  max-height: 88svh;
  overflow-y: auto;
}
.rx-confirm-overlay.rx-open .rx-confirm-sheet { transform: translateY(0); }
.rx-confirm-grip {
  width: 42px;
  height: 4px;
  border-radius: 4px;
  background: var(--border-color);
  margin: 0 auto 14px;
}
.rx-confirm-illus {
  position: relative;
  width: 96px;
  height: 96px;
  margin: 4px auto 12px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.rx-confirm-illus img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  border-radius: 16px;
}
.rx-illus-fallback {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 2.6rem;
  color: var(--rx-gold);
  opacity: 0;
}
.rx-confirm-illus.rx-noimg .rx-illus-fallback { opacity: 1; }
.rx-confirm-title {
  margin: 0 0 6px;
  font-size: 1.2rem;
  font-weight: 800;
  color: var(--text-primary);
}
.rx-confirm-sub {
  margin: 0 0 6px;
  font-size: .9rem;
  color: var(--text-secondary);
}
.rx-confirm-item {
  display: flex;
  align-items: center;
  gap: 12px;
  justify-content: center;
  margin: 10px 0 18px;
  padding: 10px 14px;
  border-radius: 14px;
  background: var(--bg-input);
  border: 1px solid var(--border-color);
}
.rx-confirm-thumb {
  width: 46px;
  height: 46px;
  border-radius: 10px;
  overflow: hidden;
  flex-shrink: 0;
}
.rx-confirm-thumb img { width: 100%; height: 100%; object-fit: cover; }
.rx-confirm-item-name {
  font-size: .95rem;
  font-weight: 700;
  color: var(--text-primary);
  text-align: right;
}
.rx-confirm-actions {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.rx-btn {
  width: 100%;
  min-height: 50px;
  border-radius: 14px;
  font-size: .98rem;
  font-weight: 700;
  cursor: pointer;
  border: 1px solid transparent;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  -webkit-tap-highlight-color: transparent;
}
.rx-btn-primary {
  color: #1a0d33;
  background: linear-gradient(135deg, var(--rx-gold) 0%, var(--rx-gold-deep) 100%);
  box-shadow: 0 6px 18px rgba(217,119,6,.28);
}
.rx-btn-primary:active { transform: scale(.985); }
.rx-btn-secondary {
  color: var(--text-primary);
  background: transparent;
  border-color: var(--primary);
}
.rx-btn-secondary:active { transform: scale(.985); }
.rx-btn-ghost {
  color: var(--text-secondary);
  background: transparent;
  border-color: transparent;
  min-height: 44px;
}
.rx-confirm-success { padding: 6px 0 4px; }

/* ════════ (4) تنقّل الهيدر: البداية الذكية ════════
   🚪 [ONE-DOOR V1 2026-08-02] قواعد .rx-nav-landing («عن المنصة») نُظّفت مع
   تقاعد الزر وحذف الصفحة نهائياً — بقي زر البداية وحده في العنقود. */
.rx-nav-group {
  display: flex;
  align-items: center;
  gap: 6px;
}
.rx-nav-home {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-height: 36px;
  border-radius: 10px;
  font-size: .78rem;
  font-weight: 600;
  cursor: pointer;
  color: var(--primary);
  background: rgba(168,85,247,.10);
  border: 1px solid rgba(168,85,247,.22);
  -webkit-tap-highlight-color: transparent;
  width: 36px;
  justify-content: center;
  padding: 0;
  font-size: .85rem;
}
.rx-nav-home:active { transform: scale(.94); }
.rx-nav-home:hover { border-color: var(--primary); }

/* الثيم الفاتح: لمسة بنفسجية واضحة */
:root[data-theme="light"] .rx-nav-home {
  background: rgba(124,58,237,.08);
  border-color: rgba(124,58,237,.28);
  color: #7c3aed;
}

/* ════════ احترام تقليل الحركة ════════ */
@media (prefers-reduced-motion: reduce) {
  .rx-confirm-overlay,
  .rx-confirm-sheet { transition: none !important; }
  .rx-choice-card:active,
  .rx-btn:active,
  .rx-nav-home:active { transform: none !important; }
}


/* --------------- source: assets/css/104-theme-purple-white.css --------------- */
/* ════════════════════════════════════════════════════════════════════════
 * 🟣 [Hubs+RX 2026-06-30] — حصر الثيمات: بنفسجي + أبيض (طبقة 104)
 * ────────────────────────────────────────────────────────────────────────
 * الغرض:
 *   (1) حزام أمان: تحييد أي أزرق/سماوي متبقٍّ في :root الأساسي ⇒ بنفسجي
 *       (المحرّك أصلاً يفرض purple/light دائماً، وهذا تأمين إضافي).
 *   (2) الأبيض = براند بنفسجي بتباين عالٍ (≥AA) + إصلاح الألوان الباهتة.
 *
 *   الأزرق في main.css أُعيد تلوينه للبنفسجي عند المصدر؛ هذه الطبقة تضيف
 *   التأمين + إصلاح وضوح الأبيض (نصوص ثانوية/حدود/placeholders/معطّلة).
 *
 * تُحمَّل بعد 102/103. للإزالة: احذف <link> هذا + الملف.
 * ════════════════════════════════════════════════════════════════════════ */

/* ════════ (1) تحييد الأساس (belt) — برّاند بنفسجي بدل الأزرق/السماوي ════════ */
:root,
:root:not([data-theme]) {
  --primary:        #a855f7;
  --primary-hover:  #9333ea;
  --primary-light:  #c084fc;
  --accent:         #a855f7;
  --gradient:       linear-gradient(135deg, #4c1d95 0%, #a855f7 100%);
  --glow:           0 0 26px rgba(168,85,247,0.16);
}

/* ════════ (2) الأبيض = براند بنفسجي + تباين عالٍ ════════ */
:root[data-theme="light"] {
  /* لمسة بنفسجية بدل الأزرق */
  --primary:        #7c3aed;
  --primary-hover:  #6d28d9;
  --primary-light:  #8b5cf6;
  --accent:         #7c3aed;
  --gradient:       linear-gradient(135deg, #5b21b6 0%, #7c3aed 100%);
  --glow:           0 0 20px rgba(124,58,237,0.16);

  /* إصلاح وضوح الأبيض (AA): أوضح من الباهت السابق */
  --text-secondary: #334155;   /* كان #475569 */
  --text-muted:     #475569;   /* كان #64748b الباهت */
  --border-color:   #cbd5e1;   /* كان #e2e8f0 شبه المختفي */
}

/* placeholders واضحة على الأبيض (AA للقراءة) */
:root[data-theme="light"] ::placeholder { color: #5b6473; opacity: 1; }
:root[data-theme="light"] input::placeholder,
:root[data-theme="light"] textarea::placeholder { color: #5b6473; opacity: 1; }

/* الأزرار/العناصر المعطّلة — مقروءة لا باهتة جداً */
:root[data-theme="light"] button:disabled,
:root[data-theme="light"] .h-btn:disabled,
:root[data-theme="light"] .poster-action-btn:disabled {
  opacity: 1;
  color: #475569;
  background: #eef1f6;
  border-color: #cbd5e1;
}

/* الشرائح/الـ chips على الأبيض — حدّ ونصّ واضحان */
:root[data-theme="light"] .rh-chip,
:root[data-theme="light"] .rx-nav-home {
  color: #5b21b6;
  border-color: rgba(124,58,237,0.30);
}
:root[data-theme="light"] .rh-chip.rh-chip-active {
  background: #7c3aed;
  color: #ffffff;
  border-color: #7c3aed;
}

/* فواصل breadcrumb + الفواصل العامة — تباين كافٍ */
:root[data-theme="light"] .breadcrumb .sep,
:root[data-theme="light"] .breadcrumb a { color: #475569; }
:root[data-theme="light"] .breadcrumb span { color: #1e293b; }

/* أيقونات التنقّل غير النشطة على الأبيض (شريط سفلي فاتح) */
:root[data-theme="light"] .bottom-nav .nav-item:not(.active) { color: #475569; }
/* ملاحظة: .poster-meta و .poster-desc تبقى فاتحة (تجلس على صورة بوستر داكنة
   بكل الثيمات) — لا نُعتّمها لئلا تختفي على الخلفية الداكنة. */


/* 🪽 [SILK-GLIDE 2026-07-17 T] قسم 105-theme-alula.css أزيل بالكامل (اجتثاث ثيم العلا) */

/* --------------- source: assets/css/107-nav-harmony.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * 107-nav-harmony.css — تناسق الشريط العلوي عبر كل الأجهزة (طبقة إضافية، بعد 106)
 * ────────────────────────────────────────────────────────────────────────────
 * الغرض:
 *   جعل أيقونات إجراءات الهيدر «عنقوداً واحداً متناسقاً» بنفس المقاس ونفس نصف
 *   القطر، وإظهار عبارة «التواصل مع فريق الدعم» كاملةً بلا قصّ حتى على الجوالات
 *   الصغيرة — من غير أي لون صريح (كل زر يرث --primary/--border-color/--danger
 *   فيتلوّن ذهبياً في العلا، بنفسجياً في purple، غامقاً في light تلقائياً).
 *
 * آلية العمل:
 *   • طبقة بصرية بحتة 100٪ — صفر JS/HTML/handler/تغيير id أو class أو بنية.
 *   • تُحمَّل بعد 106 ⇒ تتغلّب على main.css و 97 و 103 و exam-system-student.css
 *     بنفس قوة المحدِّد + ترتيب التحميل (وبمحدّد أقوى حيث يلزم كسر ID/!important).
 *   • مبدأ «سقف clamp = الأصل أو أصغر»: لا تكبير فوق الأصل على الكمبيوتر/الآيباد
 *     إطلاقاً؛ العنقود يتوحّد على 36px (= مقاس rx-nav-home الأصلي) فيتناسق بلا نفخ.
 *   • سقوط رشيق: أي زر غير موجود (مثل زر الخروج الأحمر #exsLogoutTop المحقون شرطياً)
 *     ببساطة لا تُطبَّق عليه القاعدة — لا كسر ولا أثر.
 *
 * نقاط التوقّف: ≤480 (طيّ نص الواجهة الأساسية مطبَّق أصلاً في 103) / ≤390 (إحكام) /
 *              ≤360 (أصغر فجوة + فجوة العنوان) / ≤320 فقط (ملاذ أخير: طيّ نص الدعم).
 *
 * خطة الإزالة: احذف سطر <link> الخاص به من index.html + هذا الملف ⇒ رجوع كامل.
 * ════════════════════════════════════════════════════════════════════════════ */


/* ─── (1) العنقود: توحيد مقاس أيقونات الإجراءات ──────────────────────────────
 * الأزرار المربّعة الأيقونية (الرئيسية + مبدّل الثيم + زر الخروج الأحمر إن وُجد)
 * تتوحّد على clamp(30px, 8.2vw, 36px): سقفها 36px (= rx-nav-home الأصلي) فلا تكبير
 * فوق الأصل، وأرضيّتها 30px على أضيق جوال. نصف قطر موحّد 10px + flex-shrink:0 لكلها.
 *
 * كسر الأسبقية:
 *   • theme-toggle: main.css/97 يعطيانه (0,1,0)؛ محدّدنا (0,3,0) + لاحق ⇒ يتغلّب.
 *   • rx-nav-home: 103 يعطيه (0,1,0) + min-height:36px؛ نعيد min-* إلى 0 لنسمح بالتدرّج.
 *   • #exsLogoutTop: مُعرَّف بـID (1,0,0) + خلفية حمراء صريحة في exam-system-student.css؛
 *     محدّدنا (1,2,0) + لاحق ⇒ يتغلّب على الحجم/الشكل، والخلفية تصير من --danger. */
.top-nav .nav-actions .rx-nav-home,
.top-nav .nav-actions .theme-toggle-btn,
.top-nav .nav-actions #exsLogoutTop {
  width: clamp(30px, 8.2vw, 36px);
  height: clamp(30px, 8.2vw, 36px);
  min-width: 0;             /* يتغلّب على min-width الموروث (h-upgrade/103) */
  min-height: 0;
  border-radius: 10px;      /* نصف قطر موحّد للعنقود كله */
  flex-shrink: 0;
  position: relative;       /* مرساة لمنطقة اللمس ::before */
}

/* زر الخروج الأحمر — لون من --danger (لا لون صريح)، ويبقى أحمراً في كل الثيمات.
 * نُبقيه دائرة الطاقة المألوفة بصرياً عبر الأيقونة، لكن ضمن مقاس/نصف قطر العنقود. */
.top-nav .nav-actions #exsLogoutTop {
  background: var(--danger);
  font-size: clamp(12px, 3.4vw, 15px);   /* سقف 15px = الأصل */
}

/* الإيموجي داخل مبدّل الثيم — يتناسب مع المقاس الجديد (36px) بلا «نفخ» iOS. */
.top-nav .nav-actions .theme-toggle-btn .tt-icon {
  font-size: clamp(0.9rem, 3.2vw, 1.05rem);
  line-height: 1;
}

/* منطقة لمس ≥44px دون تكبير الإطار المرئي (حشوة شفّافة غير مرئية، نفس نهج 97).
 * عند الأرضية 30px (أضيق الجوالات) ⇒ 30 + 7×2 = 44px ⇒ يفي بحدّ ≥44px على كل
 * الأجهزة (وأكبر فوقها). لا خلفية/لا z-index ⇒ غير مرئية. */
.top-nav .nav-actions .rx-nav-home::before,
.top-nav .nav-actions .theme-toggle-btn::before,
.top-nav .nav-actions #exsLogoutTop::before {
  content: "";
  position: absolute;
  inset: -7px;
  /* تمرّر الضغط للزر نفسه (جزء من محتواه)، بلا أي أثر بصري */
}
/* 🚪 [ONE-DOOR V1 2026-08-02] قواعد .rx-nav-landing (المرساة + مقاس ≤480px)
   نُظّفت مع تقاعد زر «عن المنصة». */


/* ─── (2) الفجوات: عنقود مُحكَم يتدرّج على الجوال ────────────────────────────
 * سقف الفجوة = 12px (الأصل في main.css) فوق الجوال، ويضيق تدريجياً على الضيّق. */
.top-nav .nav-actions {
  gap: clamp(5px, 1.6vw, 10px);
  flex-shrink: 0;           /* لا يُضغط العنقود ⇒ نص الدعم لا يُقصّ (العنوان يتقلّص بدله) */
}
.top-nav .nav-actions .rx-nav-group {
  gap: clamp(4px, 1.2vw, 6px);
}


/* ─── (3) رابط الدعم «التواصل مع فريق الدعم» — كامل بلا قصّ ────────────────────
 * أنماطه سطرية في index.html + 97/h-upgrade يفرضان بـ!important ⇒ نستعمل !important
 * هنا (محدّد أقوى + محمّل أخيراً). ألوان الخلفية/الحد تبقى للثيمات (main.css/105) —
 * نحن نضبط التخطيط فقط: نص كامل، nowrap، خط/حشوة متدرّجان بسقف = الأصل، لا انضغاط. */
.top-nav .nav-actions a[target="_blank"] {
  font-size: clamp(0.6rem, 2.5vw, 0.8rem) !important;   /* سقف 0.8rem = الأصل */
  padding: clamp(4px, 1.4vw, 7px) clamp(8px, 2.6vw, 14px) !important;
  white-space: nowrap;
  flex-shrink: 0;
  letter-spacing: -0.015em;
}
.top-nav .nav-actions a[target="_blank"] .fab {
  font-size: clamp(0.9rem, 3vw, 1.1rem) !important;     /* سقف 1.1rem = الأصل */
}


/* ─── (4) العنوان قابل للانكماش بأمان (لا يزاحم الإجراءات) ─────────────────────
 * الشعار ثابت (flex-shrink:0)، ونص «حمدان» يتقلّص خطّه بـclamp (سقف 1.2rem = الأصل)
 * قبل أي قصّ. flex:0 1 auto + min-width:0 يسمحان للعنوان بامتصاص أي ضيق. overflow:hidden
 * حارس أخير (نادراً ما يُفعَّل لأن تقلّص الخط يكفي على 360px). */
.top-nav .nav-title {
  flex: 0 1 auto;
  min-width: 0;
  overflow: hidden;
  font-size: clamp(0.85rem, 3.4vw, 1.2rem);   /* سقف 1.2rem = الأصل */
  white-space: nowrap;
}
.top-nav .nav-title .h-logo { flex-shrink: 0; }


/* ════════════════════════════════════════════════════════════════════════════
 * نقاط التوقّف المرحلية — لِما لا يُناسبه clamp (الفجوات + ملاذ نص الدعم).
 * ════════════════════════════════════════════════════════════════════════════ */

/* ≤390px (آيفون صغير) — إحكام بسيط إضافي للفجوة. */
@media (max-width: 390px) {
  .top-nav .nav-actions { gap: clamp(4px, 1.4vw, 8px); }
}

/* ≤440px (كل الجوالات الطولية) — قد يزاحم عنقودُ الإجراءات (حتى 5 أزرار + نصُّ دعم
 * كامل) كلمةَ «حمدان» فتُقصّ. الأولوية لنص الدعم الكامل + عنقود متناسق ⇒ نُظهر
 * الشعار وحده (28px، يحمل aria-label="حمدان") ونطوي الكلمة بصرياً (font-size:0) بلا
 * قصّ. الكلمة تبقى في DOM (وصولية). على ≥441px (تابلت/كمبيوتر) تعود «حمدان» كاملة. */
@media (max-width: 440px) {
  .top-nav .nav-title {
    font-size: 0 !important;
    gap: 0 !important;
  }
}

/* ≤360px — أصغر فجوة للعنقود. */
@media (max-width: 360px) {
  .top-nav .nav-actions { gap: 5px; }
  .top-nav .nav-actions .rx-nav-group { gap: 4px; }
}

/* ≤340px — نُلغي طيّ 97 (font-size:0): النص يبقى كاملاً حتى 320px على الجوالات
 * الواقعية. نُحكم الخط/الحشوة قليلاً ليفِد الكل داخل العرض. */
@media (max-width: 340px) {
  .top-nav .nav-actions a[target="_blank"] {
    font-size: clamp(0.56rem, 2.4vw, 0.8rem) !important;
    gap: 5px !important;
    padding: clamp(4px, 1.3vw, 6px) clamp(7px, 2.3vw, 11px) !important;
  }
  .top-nav .nav-actions a[target="_blank"] .fab {
    font-size: clamp(0.85rem, 2.9vw, 1rem) !important;
  }
}

/* ≤320px فقط (ملاذ أخير لأجهزة نادرة جداً) — نطوي نص الدعم لأيقونة. النص يبقى في
 * DOM (قارئ الشاشة يقرؤه) + «بانر الدعم» أسفل الشريط يعرض النص كاملاً دائماً على كل
 * الأجهزة ⇒ لا نفقد الميزة ولا الوصولية. هذا البلوك لاحق للـ≤340 ⇒ يتغلّب عند <320. */
@media (max-width: 320px) {
  .top-nav .nav-actions a[target="_blank"] {
    font-size: 0 !important;
    gap: 0 !important;
    padding: 6px 9px !important;
  }
  .top-nav .nav-actions a[target="_blank"] .fab {
    font-size: 1rem !important;
  }
}


/* --------------- source: assets/css/108-rx-theme-harmony.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * 108-rx-theme-harmony.css — توافق خانة الطلب مع الثيم + تكبير العناوين (بعد 107)
 * ────────────────────────────────────────────────────────────────────────────
 * الغرض:
 *   خانة «طلب المادة» (الهيرو + المربّعان) صُمّمت في 103 بألوان بنفسجية صريحة
 *   فتصطدم فوق ثيم العلا الذهبي والفاتح. هنا نحوّل تلك الألوان إلى «واعية بالثيم»
 *   عبر متغيّرات محليّة، ونكبّر عنوانَي «دروس الجامعة»/«دورات تطويرية»/«طلب جديد»
 *   قليلاً — بلا لمس منطق ولا 103، تجاوز لوني/مقاسي فقط عبر هذه الطبقة.
 *
 * آلية العمل:
 *   • متغيّرات محليّة بقيم بنفسجية افتراضية على :root (= مظهر purple الحالي)، ثم
 *     تجاوزها للثيم الآخر عبر :root[data-theme="light"]. الثيم purple (الذي لا
 *     يطابق أياً من التجاوزين) يقع على قيم :root الافتراضية ⇒ صفر انحدار عليه.
 *   • قواعد الاستهلاك محدّدات single-class (0,1,0) = نفس قوة 103، ومحمّلة بعده
 *     ⇒ تتغلّب بنظافة. الهوفر (0,1,1) كذلك.
 *   • السكريم يبقى تدرّجاً مزدوجاً RTL (أقوى من جهة النص)؛ نُعيد بناءه بلون القاعدة
 *     --rx-scrim-rgb لكل ثيم مع الحفاظ على نفس شدّات 103.
 *
 * خطة الإزالة: احذف سطر <link> الخاص به من index.html + هذا الملف ⇒ رجوع كامل.
 * ════════════════════════════════════════════════════════════════════════════ */


/* ─── (0) المتغيّرات — الافتراضي بنفسجي (purple)، ثم تجاوز light ──────────────
 * --rx-card-grad : تدرّج خلفية الهيرو/البطاقة/الميديا البديل (يظهر تحت الصورة وعند فشلها).
 * --rx-scrim-rgb : لون قاعدة السكريم (نُبنى منه التدرّج المزدوج بشدّات 103 الثابتة).
 * --rx-desc-color: لون نص الوصف.  --rx-title-color: لون العنوان.
 * --rx-hover-bd  : حدّ البطاقة عند الهوفر.
 * --rx-arrow-*   : خلفية/حدّ/لون دائرة السهم (بنفسجية في purple/light). */
:root {
  --rx-card-grad: linear-gradient(135deg, #2a1259 0%, #4c1d95 60%, #1a0d33 100%);
  --rx-scrim-rgb: 12, 6, 26;
  --rx-desc-color: #ecdcff;
  --rx-title-color: #ffffff;
  --rx-hover-bd: rgba(168, 85, 247, .55);
  --rx-arrow-bg: rgba(168, 85, 247, .18);
  --rx-arrow-bd: rgba(168, 85, 247, .45);
  --rx-arrow-fg: #c084fc;
}

/* 🪽 [SILK-GLIDE 2026-07-17 T] أزيلت كتلة متغيّرات alula (اجتثاث ثيم العلا). */

/* الفاتح — وشاح فاتح + نص غامق مقروء + سهم بنفسجي غامق. */
:root[data-theme="light"] {
  --rx-card-grad: linear-gradient(135deg, #efe9f7 0%, #e6ddf3 60%, #f6f3fb 100%);
  --rx-scrim-rgb: 245, 247, 250;
  --rx-desc-color: #3a2b52;
  --rx-title-color: #2a1a4a;
  --rx-hover-bd: rgba(124, 58, 237, .45);
  --rx-arrow-bg: rgba(124, 58, 237, .12);
  --rx-arrow-bd: rgba(124, 58, 237, .40);
  --rx-arrow-fg: #7c3aed;
}


/* ─── (1) الهيرو ─────────────────────────────────────────────────────────────
 * تجاوز لوني فقط (الخلفية/السكريم/الوصف). العنوان يكبر في القسم (3). */
.rx-hero {
  background: var(--rx-card-grad);
}
/* 🪽 [SILK-GLIDE 2026-07-17 T] أزيل سكريم alula للهيرو (اجتثاث ثيم العلا) —
 * البنفسجي يبقى على سكريم 103 الأصلي حرفياً، والفاتح له تجاوزه أدناه. */
.rx-hero-desc {
  color: var(--rx-desc-color);
}


/* ─── (2) المربّعان الكبيران ──────────────────────────────────────────────────
 * تجاوز لوني: خلفية البطاقة + خلفية الميديا البديلة + السكريم + الوصف + السهم + الهوفر. */
.rx-choice-card {
  background: var(--rx-card-grad);
}
.rx-choice-media {
  background: var(--rx-card-grad);
}
/* 🪽 [SILK-GLIDE 2026-07-17 T] أزيل سكريم alula للمربّعين (اجتثاث ثيم العلا). */
.rx-choice-desc {
  color: var(--rx-desc-color);
}
/* أيقونة السقوط البديلة (عند غياب الصورة) — تتبع لون السهم فتبقى مقروءة في كل ثيم. */
.rx-choice-media.rx-noimg .rx-choice-fallback {
  color: var(--rx-arrow-fg);
}
.rx-choice-arrow {
  background: var(--rx-arrow-bg);
  border-color: var(--rx-arrow-bd);
  color: var(--rx-arrow-fg);
}
.rx-choice-card:hover {
  border-color: var(--rx-hover-bd);
}

/* الفاتح فقط — صور الطلب هنا «ثلجية» فاتحة مخصّصة (rx-*-light) ⇒ النص الغامق مقروء
 * أصلاً بتباين عالٍ. نكتفي بوشاح فاتح لطيف عند منطقة النص (يمين الهيرو/أسفل المربّع)
 * ك«لوحة» هادئة تُثبّت القراءة، مع إبقاء الثلج ظاهراً وجميلاً (لا نغرق الصورة). */
:root[data-theme="light"] .rx-hero-scrim {
  background:
    linear-gradient(to left,
      rgba(var(--rx-scrim-rgb), 0) 24%,
      rgba(var(--rx-scrim-rgb), .60) 100%),
    linear-gradient(to top,
      rgba(var(--rx-scrim-rgb), .30) 0%,
      rgba(var(--rx-scrim-rgb), 0) 55%);
}
:root[data-theme="light"] .rx-choice-scrim {
  background:
    linear-gradient(to top,
      rgba(var(--rx-scrim-rgb), .74) 0%,
      rgba(var(--rx-scrim-rgb), .26) 52%,
      rgba(var(--rx-scrim-rgb), .06) 100%),
    linear-gradient(to left,
      rgba(var(--rx-scrim-rgb), 0) 45%,
      rgba(var(--rx-scrim-rgb), .32) 100%);
}
/* في الفاتح: 103 يضع ظلّ نصّ داكناً (لأبيض على داكن) يُعكّر النصَّ الغامق الجديد.
 * نستبدله بهالة فاتحة رقيقة ⇒ نص غامق حادّ ومقروء فوق الوشاح الفاتح (تجاوز لوني فقط). */
:root[data-theme="light"] .rx-hero-title,
:root[data-theme="light"] .rx-hero-desc,
:root[data-theme="light"] .rx-choice-title,
:root[data-theme="light"] .rx-choice-desc {
  text-shadow: 0 1px 2px rgba(255, 255, 255, .6);
}


/* ─── (3) تكبير العناوين وتناسقها عبر الأجهزة ────────────────────────────────
 * سقوف أكبر بلا كسر على الصغير (clamp min مرفوع باعتدال). لون العنوان واعٍ بالثيم. */
/* 🚪 [ONE-DOOR V1b 2026-08-02] تكبير نصوص البطاقات (قرار المالك — أصول
   TILE-TRIO بلا نص مدموج فالعنوان المرسوم هو الهوية):
   كان: title clamp(1.18rem, 1rem + 1.1vw, 1.5rem) · desc clamp(0.82rem, 0.78rem + 0.35vw, 0.95rem) */
.rx-choice-title {
  font-size: clamp(1.35rem, 1.12rem + 1.35vw, 1.75rem);
  line-height: 1.25;
  letter-spacing: -0.01em;
  color: var(--rx-title-color);
}
.rx-choice-desc {
  font-size: clamp(0.95rem, 0.88rem + 0.45vw, 1.1rem);
}
.rx-hero-title {
  font-size: clamp(1.45rem, 1.05rem + 2vw, 2rem);
  color: var(--rx-title-color);
}
/* نوسّع منطقة النص السفلية للمربّع قليلاً حتى لا يلتصق العنوان الأكبر بالحافة. */
.rx-choice-body {
  bottom: clamp(12px, 3.5vw, 18px);
}


/* --------------- source: assets/css/109-toast-contrast.css --------------- */
/* 🟣 [FIX-CC 2026-07-01] وضوح إشعارات الوضع الأبيض — نص داكن بدل الأبيض-على-الأبيض.
   العلّة: 100-performance-mode.css يفرض على .h-toast خلفية بيضاء في الوضع الأبيض
   (داخل @media اللمس) بينما يبقى لون النص فاتحاً (#f3e9ff) ⇒ أبيض على أبيض، ويمسح
   تدرّج الأحمر/الأخضر فتضيع دلالة الخطأ/النجاح.
   الحل: هذه الطبقة (109) تُحمَّل آخر التتالي — بلا @media — فتتغلّب على قاعدة الأداء
   المحصورة باللمس وعلى الأساس في سطح المكتب معاً ⇒ إشعار الوضع الأبيض موحّد ومقروء
   على كل الأجهزة. القواعد مقيّدة بـ[data-theme="light"] فقط ⇒ الثيمات الداكنة
   (بنفسجي/علا) لا تتأثر إطلاقاً.
   للإزالة: احذف سطر <link> الخاص بهذا الملف من index.html + احذف هذا الملف ⇒ رجوع تام. */

:root[data-theme="light"] .h-toast{
  background:#ffffff !important;          /* خلفية بيضاء صريحة */
  background-image:none !important;        /* إلغاء أي صورة/تدرّج كوني في الوضع الفاتح */
  color:#1f2937 !important;                /* نص داكن مقروء */
  border:1px solid rgba(15,23,42,.12) !important;
  box-shadow:0 10px 30px -10px rgba(15,23,42,.22) !important;
}

/* خطأ — خلفية حمراء فاتحة + نص أحمر داكن + شريط جانبي أحمر */
:root[data-theme="light"] .h-toast.error{
  background:#fef2f2 !important;
  color:#991b1b !important;
  border-color:rgba(220,38,38,.35) !important;
  border-inline-start:3px solid #dc2626 !important;
}
:root[data-theme="light"] .h-toast.error::before{ color:#dc2626 !important; }

/* نجاح — خلفية خضراء فاتحة + نص أخضر داكن + شريط جانبي أخضر */
:root[data-theme="light"] .h-toast.success{
  background:#f0fdf4 !important;
  color:#166534 !important;
  border-color:rgba(22,163,74,.35) !important;
  border-inline-start:3px solid #16a34a !important;
}
:root[data-theme="light"] .h-toast.success::before{ color:#16a34a !important; }


/* --------------- source: assets/js/material-viewer/mv-viewer.css --------------- */
/* ════════════════════════════════════════════════════════════════════════════
 * MATERIAL-VIEWER (MV) — أنماط عارض المحتوى (الطالب)  ·  2026-07-03  ·  طبقة 110
 * ────────────────────────────────────────────────────────────────────────────
 * يُحمَّل بعد أعلى طبقة (109) فيغلب. ألوان عبر var(--…) فقط ⇒ يحترم ثيمات الطالب
 * (البنفسجي الافتراضي/العلا/الفاتح). RTL كامل. يعيد استخدام .course-card/.cc-badge/
 * .category-wrapper القائمة. قابل للإزالة: احذف <link> + مجلد material-viewer/.
 * ════════════════════════════════════════════════════════════════════════════ */

#mvRoot { position: fixed; inset: 0; z-index: 2600; pointer-events: none; }
#mvRoot.show { pointer-events: auto; }
.mv-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,.55); backdrop-filter: blur(3px); opacity: 0; transition: opacity .22s ease; }
#mvRoot.show .mv-backdrop { opacity: 1; }
.mv-sheet {
  position: absolute; inset: 0; margin-inline-start: auto; width: 100%; max-width: 760px;
  background: var(--bg, #14101e); color: var(--text, #ece9f5);
  display: flex; flex-direction: column;
  transform: translateX(100%); transition: transform .26s cubic-bezier(.22,.61,.36,1);
  box-shadow: -8px 0 40px rgba(0,0,0,.4);
}
html[dir="rtl"] .mv-sheet, .mv-sheet { inset-inline-end: 0; }
#mvRoot.show .mv-sheet { transform: translateX(0); }

.mv-head { display: flex; align-items: center; gap: 10px; padding: 12px 14px; border-bottom: 1px solid var(--border, rgba(255,255,255,.08)); }
.mv-back, .mv-x { background: none; border: none; color: var(--muted, #b7add0); font-size: 1.2rem; cursor: pointer; padding: 4px 8px; }
.mv-head-title { flex: 1; font-weight: 700; font-size: 1.02rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.mv-body { flex: 1; overflow-y: auto; padding: 14px; -webkit-overflow-scrolling: touch; }

.mv-desc { color: var(--muted, #b7add0); font-size: .9rem; line-height: 1.7; margin: 0 0 12px; }
.mv-empty, .mv-locked-note { text-align: center; padding: 30px 16px; color: var(--muted, #b7add0); }
.mv-locked-note i { color: var(--primary, #a855f7); margin-inline-end: 6px; }
.mv-skel-wrap { display: flex; flex-direction: column; gap: 10px; }
.mv-skel { height: 74px; border-radius: 14px; background: linear-gradient(90deg, rgba(255,255,255,.04) 25%, rgba(255,255,255,.09) 37%, rgba(255,255,255,.04) 63%); background-size: 400% 100%; animation: mv-shimmer 1.2s ease infinite; }
@keyframes mv-shimmer { 0% { background-position: 100% 0; } 100% { background-position: -100% 0; } }

/* بطاقة درس MV (تعيد استخدام .course-card + إضافات) */
.mv-lesson-card { cursor: pointer; }
.mv-lesson-card.mv-locked { opacity: .72; }
.mv-lock-i { color: var(--muted, #b7add0); font-size: .82rem; }
.mv-dur { color: var(--muted, #b7add0); display: inline-flex; align-items: center; gap: 4px; margin-top: 3px; }

/* المشغّل */
.mv-player-wrap { position: relative; }
.mv-player-16x9 { position: relative; width: 100%; aspect-ratio: 16/9; background: #000; border-radius: 14px; overflow: hidden; }
.mv-player-16x9 iframe, .mv-player-16x9 video { width: 100%; height: 100%; display: block; }
.mv-player-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 12px 0; flex-wrap: wrap; }
.mv-nav { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.mv-nav-pos { color: var(--muted, #b7add0); font-size: .82rem; }
.mv-player-title { font-weight: 700; font-size: 1.05rem; margin-top: 4px; }
.mv-player-desc { color: var(--muted, #b7add0); font-size: .9rem; line-height: 1.7; margin-top: 6px; }

/* احتفال الإكمال */
.mv-celebrate { position: absolute; inset: 0; pointer-events: none; overflow: hidden; }
.mv-celebrate span { position: absolute; color: var(--primary, #a855f7); font-size: 1.4rem; animation: mv-pop 1.4s ease forwards; opacity: 0; }
@keyframes mv-pop { 0% { opacity: 0; transform: scale(.4) translateY(0); } 30% { opacity: 1; } 100% { opacity: 0; transform: scale(1.3) translateY(-40px); } }

@media (max-width: 560px) {
  .mv-sheet { max-width: 100%; }
  .mv-player-bar { gap: 6px; }
}

/* وضع الأداء: أوقف الوميض والانتقالات */
body.performance-mode .mv-skel { animation: none; }
body.performance-mode .mv-sheet, body.performance-mode .mv-backdrop { transition: none; }
body.performance-mode .mv-celebrate span { animation: none; opacity: 0; }
/* 🪽 [SILK-GLIDE 2026-07-17] الثيم الثلجي — إصلاحات تناسق الألوان (رقم 2)
   الملف يستهلك متغيرات غير معرَّفة (--bg/--text/--muted/--border) فتنطبق قيم
   سقوط داكنة في كل الثيمات — شيت داكن ملء الشاشة فوق الثيم الثلجي.
   للتراجع: احذف هذه الكتلة. */
:root[data-theme="light"] .mv-sheet{background:#f6f7fb;color:#0f172a;box-shadow:-8px 0 40px rgba(15,23,42,.18);}
:root[data-theme="light"] .mv-head{border-bottom-color:#e2e8f0;}
:root[data-theme="light"] .mv-back,
:root[data-theme="light"] .mv-x,
:root[data-theme="light"] .mv-desc,
:root[data-theme="light"] .mv-empty,
:root[data-theme="light"] .mv-locked-note,
:root[data-theme="light"] .mv-lock-i,
:root[data-theme="light"] .mv-dur,
:root[data-theme="light"] .mv-nav-pos,
:root[data-theme="light"] .mv-player-desc{color:#475569;}
:root[data-theme="light"] .mv-locked-note i,
:root[data-theme="light"] .mv-celebrate span{color:#7c3aed;}
:root[data-theme="light"] .mv-skel{background:linear-gradient(90deg,rgba(15,23,42,.05) 25%,rgba(15,23,42,.10) 37%,rgba(15,23,42,.05) 63%);background-size:400% 100%;}


/* ─────────────── SEQUENTIAL-GATE 2026-07-11: كتلة مُلحقة يدوياً ───────────────
 * المصدر: ذيل assets/css/waiting-lessons.css — أُلحقت هنا يدوياً لغياب node في
 * بيئة البناء (المولّد tools/build-css.mjs). كل المحدّدات جديدة (.lesson-card--gate
 * و .sg-*) فترتيب المصدر لا يتأثر. إعادة توليد الحزمة بـ node لاحقاً تنتج نفس
 * القواعد من موضع المصدر الأصلي بلا تعارض. ─────────────── */
/* ▼ SEQUENTIAL-GATE ▼ ═══════════════════════════════════════════════════════
 * البوابة التتابعية — طبقة القفل الموحّدة (الوهمي = وضع completion في الانتظار،
 * والحقيقي = مقطع فعلي requires_completion). مكوّن واحد ⇒ تطابق بكسل-ببكسل.
 * ساكنة بلا مؤقتات؛ الأنيميشن CSS خالص على transform/opacity فقط.
 * ═══════════════════════════════════════════════════════════════════════════ */

/* البطاقة المبوَّبة (تُضاف للوهمي مع lesson-card--waiting وللحقيقي مع course-card) */
.lesson-card--gate{
  cursor:pointer;user-select:none;
  touch-action:manipulation; /* يمنع تكبير النقر المزدوج على الجوال (الباب السرّي) */
}
.lesson-card--gate .course-thumb{ position:relative;isolation:isolate;overflow:hidden; }

/* تحييد لمسات «الانتظار» على بطاقة البوابة الوهمية — لتطابق الحقيقية حرفياً:
 * لا shimmer ولا تدرّج ::before ولا فلتر صورة ولا توهج hover ذهبي إضافي */
.lesson-card--waiting.lesson-card--gate .course-thumb::before,
.lesson-card--waiting.lesson-card--gate .course-thumb::after{ content:none; }
.lesson-card--waiting.lesson-card--gate .course-thumb img{ filter:none; }
.lesson-card--waiting.lesson-card--gate:hover{ box-shadow:none;transform:none; }
.lesson-card--waiting.lesson-card--gate:active{ transform:none; }

/* المقطع الحقيقي المبوَّب: أخفِ شارة التقدم وشريطه (لا معنى لهما خلف القفل —
 * والوهمي بلا تقدم أصلاً ⇒ يحفظ التطابق) */
.lesson-card--gate .cc-badge,
.lesson-card--gate .h-progress{ display:none; }

/* طبقة القفل: تعتيم كوني متدرّج + ضبابية خفيفة (بديل تعتيم صريح أدناه للأضعف) */
.sg-gate-overlay{
  position:absolute;inset:0;z-index:5;pointer-events:none;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(135deg, rgba(13,10,32,0.72), rgba(43,18,64,0.5) 55%, rgba(11,23,38,0.74));
  -webkit-backdrop-filter:blur(3px);
  backdrop-filter:blur(3px);
}
/* متصفحات بلا backdrop-filter: تعتيم صريح أقوى بدل الضبابية */
@supports not ((backdrop-filter:blur(3px)) or (-webkit-backdrop-filter:blur(3px))){
  .sg-gate-overlay{ background:linear-gradient(135deg, rgba(13,10,32,0.86), rgba(43,18,64,0.72) 55%, rgba(11,23,38,0.88)); }
}

/* القفل الذهبي داخل حلقة تنبض بهدوء */
.sg-gate-lock{
  width:42px;height:42px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  color:#fbbf24;font-size:1rem;
  border:2px solid rgba(245,158,11,0.55);
  background:rgba(11,17,32,0.55);
  box-shadow:0 0 12px rgba(245,158,11,0.35);
  animation:gateLockPulse 2.4s ease-in-out infinite;
  /* 🪽 [SILK-GLIDE 2026-07-17 R2] مرساة لطبقة الوهج ::after (للتراجع: احذف السطر التالي مع كتلة ::after) */
  position:relative;
}
/* 🪽 [SILK-GLIDE 2026-07-17 R2] الوهج النابض انتقل من box-shadow متحرك داخل gateLockPulse
   (إعادة paint كل إطار) إلى ::after بظل مرسوم مسبقاً يتحرك opacity فقط (compositor-only).
   للتراجع: احذف كتلة ::after وكيفريم gateLockGlow وأعد سطرَي box-shadow داخل gateLockPulse
   (0 0 10px rgba(245,158,11,0.3) ↔ 0 0 20px rgba(245,158,11,0.55)). */
.sg-gate-lock::after{
  content:"";position:absolute;inset:-2px;border-radius:50%;pointer-events:none;
  box-shadow:0 0 20px rgba(245,158,11,0.55);
  opacity:0;
  animation:gateLockGlow 2.4s ease-in-out infinite;
}

/* الشارة الموحّدة مكان «قريباً» — ذهبية بنفس عائلة شارات الانتظار */
.sg-gate-badge{
  position:absolute;top:8px;right:8px;
  background:linear-gradient(135deg,#f59e0b,#fbbf24);
  color:#0b1726;font-weight:700;font-size:0.72rem;
  padding:3px 10px;border-radius:10px;
  box-shadow:0 2px 8px rgba(245,158,11,0.45);
  letter-spacing:0.5px;white-space:nowrap;
}

/* سطر عبارة القفل تحت العنوان — نفسه في البطاقتين */
.sg-gate-msg{
  margin-top:2px;font-size:0.78rem;font-weight:600;color:#fbbf24;
}

/* الفتح الحي: القفل يهتز اهتزازة خفيفة ثم تتلاشى الطبقة (gateUnlockSweep) */
.sg-gate-overlay.sg-unlocking{ animation:gateOverlayFade 0.9s ease forwards; }
.sg-gate-overlay.sg-unlocking .sg-gate-lock{ animation:gateUnlockSweep 0.9s ease forwards; }
/* 🪽 [SILK-GLIDE 2026-07-17 R2] أثناء الفتح يسكت الوهج (يطابق السلوك الأصلي: sweep كان
   يدهس نبض box-shadow ويعيده للظل الساكن). للتراجع: احذف السطر التالي. */
.sg-gate-overlay.sg-unlocking .sg-gate-lock::after{ animation:none;opacity:0; }

/* القائمة الجانبية (drawer): عنصر مقفول بالتتابع */
.drawer-item.sg-locked{ opacity:0.55; }
.drawer-item .sg-drawer-lock{ color:#fbbf24;font-size:0.8rem;flex-shrink:0; }

/* 🪽 [SILK-GLIDE 2026-07-17 R2] gateLockPulse صار transform فقط — الوهج في gateLockGlow (::after)
   للتراجع: أعد سطرَي box-shadow واحذف gateLockGlow */
@keyframes gateLockPulse{
  0%,100%{ transform:scale(1); }
  50%    { transform:scale(1.06); }
}
@keyframes gateLockGlow{
  0%,100%{ opacity:0; }
  50%    { opacity:1; }
}
@keyframes gateUnlockSweep{
  0%  { transform:rotate(0) scale(1); }
  25% { transform:rotate(-10deg) scale(1.05); }
  50% { transform:rotate(8deg) scale(1.1); }
  100%{ transform:rotate(0) scale(1.35);opacity:0; }
}
@keyframes gateOverlayFade{
  0%,45%{ opacity:1; }
  100%  { opacity:0; }
}

/* احترام تفضيل تقليل الحركة: طبقة ثابتة، والفتح إخفاء مباشر */
@media (prefers-reduced-motion: reduce){
  .sg-gate-lock,
  /* 🪽 [SILK-GLIDE 2026-07-17 R2] وهج ::after يتجمد أيضاً (opacity يبقى 0 — للتراجع: احذف السطر التالي) */
  .sg-gate-lock::after,
  .sg-gate-overlay.sg-unlocking,
  .sg-gate-overlay.sg-unlocking .sg-gate-lock{ animation:none; }
  .sg-gate-overlay.sg-unlocking{ opacity:0;transition:opacity 0.2s; }
}
/* وضع الأداء (html.perf-lite): صفر أنيميشن + بلا ضبابية (تعتيم صريح) */
html.perf-lite .sg-gate-lock,
/* 🪽 [SILK-GLIDE 2026-07-17 R2] وهج ::after مقتول كذلك على perf-lite (للتراجع: احذف السطر التالي) */
html.perf-lite .sg-gate-lock::after,
html.perf-lite .sg-gate-overlay.sg-unlocking,
html.perf-lite .sg-gate-overlay.sg-unlocking .sg-gate-lock{ animation:none; }
html.perf-lite .sg-gate-overlay{
  -webkit-backdrop-filter:none;backdrop-filter:none;
  background:linear-gradient(135deg, rgba(13,10,32,0.86), rgba(43,18,64,0.72) 55%, rgba(11,23,38,0.88));
}
html.perf-lite .sg-gate-overlay.sg-unlocking{ opacity:0; }
/* ▲ SEQUENTIAL-GATE ▲ */
/* 🪽 [SILK-GLIDE 2026-07-17 مراجعة عدائية] FOUC حرج — نسخة مصغّرة من موضعة
   .exss-ov (exam-system-student.css) و.dlm-root (device-limit-modal.css):
   كلا الملفين صار داخل bundle-lazy.css (B1، غير حاجب) بعد أن كانا ضمن الحزمة
   الحاجبة الواحدة. الطبقتان تُفتحان أحياناً فوراً عند التحميل (رابط اختبار
   عميق exs-exam-/exs-result-/exs-review- عبر handleDeep، أو نافذة حدّ الأجهزة
   عند دخول محظور) — لو سبق ذلك وصول bundle-lazy.css، كانت الطبقة تُرسم بلا أي
   تنسيق (كتلة عارية بلا position:fixed ولا خلفية). هذه النسخة المصغّرة (موضعة
   + إخفاء/إظهار فقط، لا تصميم كامل) تضمن ظهوراً صحيحاً حتى قبل وصول الحزمة
   الكسولة؛ الأنماط الكاملة من الملفين الأصليين تتغلّب فور وصولها (لا تعارض —
   نفس القيم حرفياً). للتراجع: احذف هذه الكتلة فقط (الملفان الأصليان لم يُمسّا).
*/
.exss-ov{position:fixed;inset:0;z-index:10000;background:#0a0f17;overflow:auto;display:none}
.exss-ov.on{display:block}
.dlm-root{position:fixed;inset:0;z-index:10000;display:none;align-items:center;justify-content:center;padding:16px;pointer-events:none}
.dlm-root.is-open{display:flex;pointer-events:auto}
