/* اولفانا — تصميم موقع تواصل طلابي على نمط X (RTL، فاتح/داكن، متجاوب) */
:root{
  --brand:#8B5E3C; --brand-2:#5B3A29; --accent:#1d9bf0;
  --bg:#ffffff; --bg-soft:#f7f9fb; --panel:#ffffff; --hover:#f2f5f8;
  --text:#0f1419; --muted:#5b6b7a; --border:#e6ecf1;
  --card:#f7f9fb; --brand-soft:color-mix(in srgb,var(--brand) 12%,transparent);
  --like:#e0245e; --repost:#17bf63; --gold:#f0b429;
  /* ⚠️ ألوانُ بطاقاتِ الأدوات كانت ‏12 لوناً مكتوباً في جافاسكربت (أزرقُ تويتر
     وبنفسجيٌّ وأحمر) لا صلةَ لها بلوحةِ الموقعِ الدافئة (مراجعة 2026-09-22).
     ستّةُ رموزٍ متناسقةٍ مع البنّيّ والذهبيّ تكفي للتمييز بلا نشاز. */
  --tool-brown:#8B5E3C; --tool-gold:#C79A3B; --tool-clay:#C77D34;
  --tool-teal:#2E7D6B; --tool-indigo:#3B5BA5; --tool-plum:#6A5A8E;
  --radius:16px; --maxw:1100px;
  /* تعبئةُ الأسطح التي فوقها نصٌّ أبيض (الأزرار، فقاعةُ رسالتك، الشارات…). في الفاتح هي
     `--brand` نفسُها فلا يتغيّر شيء؛ وتنفصل عنه في الداكن — انظر هناك. */
  --brand-fill:var(--brand);
}
[data-theme="dark"]{
  --bg:#15191e; --bg-soft:#1b2027; --panel:#1b2027; --hover:#222a33;
  --text:#e7eef5; --muted:#8b98a5; --border:#2a333d;
  --card:#222a33; --brand-soft:color-mix(in srgb,var(--brand) 24%,transparent);
  /* لونُ الهويّة في الوضع الداكن — قِيس ولم يُقدَّر.
     كان `#8B5E3C` يُورَث من `:root` بلا إعادة تعريف، فتباينُه على خلفيّة البطاقة
     الداكنة **٢٫٦٠:١** — دون عتبة WCAG AA (٤٫٥) بل ودون عتبة النصّ الكبير (٣٫٠).
     وعلى الخلفيّة الأساسيّة ٣٫١٦:١.
     و١٩٩ قاعدةً تستعمل `--brand`: اسمُ المنصّة، وبند القائمة النشط (وهو الدليل
     الوحيد على موضع الطالب في التطبيق)، وعدّاد نقاطه، وروابط مصادر المكتبة.
     والوضع الداكن هو ما يستعمله الطالب ليلاً — وهو وقت المذاكرة.
     `#C89A6B` أقربُ درجةٍ للهويّة ترفع التباين إلى ٦٫٩٧ على الأساسيّة و**٥٫٧٣**
     على البطاقة، فتعبر AA في الاثنتين. */
  --brand:#C89A6B; --brand-2:#A87B52;
  /* ⚠️ لكنّ `#C89A6B` **خلفيةً** تحت نصٍّ أبيض تباينُها ‏2.53:1 (قِيس في مراجعة 2026-09-23: كلُّ
     زرٍّ رئيسيٍّ في الداكن — «منشور»، «متابعة»، «تسجيل الدخول»). فالتعبئةُ تنفصل عن لون النصّ:
     `#8B5E3C` — بنّيُّ الوضع الفاتح نفسُه، فالزرُّ واحدٌ في الوضعين — أبيضُه ‏5.58:1، ويتميّز عن
     الخلفيّة الداكنة بـ‏3.16:1. ورُفض ‏`#7A4F2E` (أبيضُه ‏7.03) لأنّه يذوب في الخلفيّة (‏2.51 و‏2.33
     على البطاقة) ويُضيف درجةَ بنّيٍّ ثالثة. و`--brand` يبقى ‏`#C89A6B` لكلّ **نصٍّ** بنّيّ. */
  --brand-fill:#8B5E3C;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
/* ضبط حجم أيقونات SVG افتراضياً (تتمدّد بلا قيد لولاه) */
svg{width:20px;height:20px;flex:0 0 auto;display:inline-block;vertical-align:middle}
.searchbox svg{width:19px;height:19px;color:var(--muted)}
.pctx svg{width:14px;height:14px}
.why svg{width:14px;height:14px}
.nav-compose .btn svg{width:21px;height:21px}
.feature-ic svg{width:24px;height:24px}
.av svg{width:54%;height:54%}
.brand img{width:34px;height:34px}
body{
  font-family:"Segoe UI",Tahoma,system-ui,sans-serif; background:var(--bg-soft); color:var(--text);
  line-height:1.6; -webkit-font-smoothing:antialiased;   /* الاتّجاهُ من <html dir> (i18n.js)، لا مكتوباً هنا */
}
a{color:inherit;text-decoration:none}
button{font-family:inherit;cursor:pointer}
/* الحقولُ ترث خطَّ الصفحة كالأزرار (مراجعة 2026-09-22: كانت Arial وسط Segoe UI) */
input,select,textarea,optgroup{font-family:inherit}
/* ⚠️ عنصرُ النائب صريحاً (مراجعة 2026-09-22): بلا قاعدةٍ يأخذ كلُّ متصفّحٍ لونَه — Safari ‏#a9a9a9 ≈ 2.3:1
   على الأبيض (دون WCAG AA). و`--muted` ‏5.2:1 في الفاتح. والشفافيّةُ 1 لأنّ Firefox يخفّفه افتراضاً. */
::placeholder{color:var(--muted);opacity:1}
.hidden{display:none!important}
.spacer{flex:1}
.muted{color:var(--muted)}
.center{display:flex;align-items:center;justify-content:center}

/* أزرار */
.btn{border:none;border-radius:999px;padding:10px 18px;font-weight:800;font-size:15px;background:var(--brand-fill);color:#fff;transition:.15s}
.btn:hover{filter:brightness(1.08)}
.btn.block{width:100%}
.btn.lg{padding:13px 22px;font-size:16px}
.btn.ghost{background:transparent;color:var(--brand);border:1.5px solid var(--border)}
.btn.ghost:hover{background:var(--hover)}
.btn.sm{padding:7px 14px;font-size:13px}
.btn.danger{background:var(--like)}
.icon-btn{background:transparent;border:none;color:var(--muted);width:38px;height:38px;border-radius:999px;display:grid;place-items:center;transition:.15s}
.icon-btn:hover{background:var(--hover);color:var(--brand)}
.icon-btn svg{width:20px;height:20px}

/* الصورة الرمزية */
.av{border-radius:999px;display:grid;place-items:center;color:#fff;font-weight:800;flex:0 0 auto;overflow:hidden}
.verified{color:var(--accent);width:17px;height:17px;flex:0 0 auto}

/* الشارات/الرقائق */
.chip{display:inline-flex;align-items:center;gap:6px;background:var(--hover);color:var(--text);border-radius:999px;padding:5px 12px;font-size:13px;font-weight:700}
.chip.brand{background:color-mix(in srgb,var(--brand) 16%,transparent);color:var(--brand)}
.badge{background:var(--brand-fill);color:#fff;border-radius:999px;font-size:11px;font-weight:800;padding:1px 7px}

/* ── التخطيط (3 أعمدة) ── */
.app{display:grid;grid-template-columns:minmax(260px,300px) minmax(0,1fr) minmax(330px,380px);max-width:none;margin:0;gap:0}
.sidebar{position:sticky;top:0;height:100vh;height:100dvh;padding:8px 12px;display:flex;flex-direction:column;gap:2px;border-inline-start:1px solid var(--border);overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}
.brand{display:flex;align-items:center;gap:10px;padding:10px 12px;margin-bottom:6px}
.brand img{width:34px;height:34px}
.brand b{font-size:22px;font-weight:900;color:var(--brand)}
.nav-item{display:flex;align-items:center;gap:14px;padding:9px 14px;border-radius:999px;font-size:18px;font-weight:700;color:var(--text);transition:.15s;position:relative}
/* ⚠️ قِيس (مراجعة 2026-09-22): محتوى الشريط الجانبيّ ‏1013px في نافذةٍ ‏936px، فيظهر له
   شريطُ تمريرٍ **ثانٍ** بجانب شريط الصفحة على كلّ مسار. أربعةَ عشرَ بنداً + زرٌّ + صفُّ
   المستخدم: تضييقُ الحشوِ والمسافةِ يُدخلها في الشاشة الشائعة، ويبقى `overflow-y:auto`
   للنوافذِ القصيرةِ جدّاً (حيث التمريرُ ضرورةٌ لا زينة). */
.nav-item svg{width:24px;height:24px}
.nav-item:hover{background:var(--hover)}
.nav-item.active{font-weight:900;color:var(--brand)}
.nav-item .ncount{position:absolute;inset-inline-start:30px;top:7px;background:var(--brand-fill);color:#fff;border-radius:999px;font-size:11px;font-weight:800;min-width:18px;height:18px;display:grid;place-items:center;padding:0 4px}
.nav-compose{margin:10px 6px}
.nav-user{margin-top:auto;display:flex;align-items:center;gap:10px;padding:10px;border-radius:999px;cursor:pointer}
.nav-user:hover{background:var(--hover)}

.main{min-height:100vh;border-inline:1px solid var(--border);background:var(--bg)}
.topbar{position:sticky;top:0;z-index:20;backdrop-filter:blur(10px);background:color-mix(in srgb,var(--bg) 80%,transparent);border-bottom:1px solid var(--border)}
.topbar .tb-head{display:flex;align-items:center;gap:14px;padding:10px 16px}
.topbar h2{margin:0;font-size:20px;font-weight:900}
/* ⚠️ إصلاحان متراكبان على هذا الرأس (يحشد حتى ٦ عناصر: أيقونة+عنوان + ٥ أزرار
   أيقونة، مثل رأس محادثة المكتبة الناطقة):
   (١) ٢٠٢٦-٠٨-٢٦ — تصغيرٌ طفيف للأزرار/المسافات/الخطّ عند ≤٤٨٠بكسل. **لكنّ
   `font-size:16px` هنا كان ميتاً فعلياً منذ كتابته**: قاعدة `.topbar h2` غير
   الشرطيّة (تحت هذا الصندوق مباشرةً حينها) بنفس الخصوصيّة وتالية له في الترتيب
   المصدريّ ⇒ تغلبه دائماً بصرف النظر عن العرض (تعادلُ الخصوصيّة يُحسَم بالترتيب،
   لا بوجود `@media`). نُقلت القاعدة غير الشرطيّة الآن *قبل* هذا الصندوق كي يستطيع
   فعلاً الكتابة فوقها.
   (٢) ٢٠٢٦-٠٨-٢٧ — حتى مع (١) مُصلَحاً، عند ٣٢٠بكسل تحديداً يبقى العنوان يلتفّ
   سطرَين فعلياً (ارتفاعُه المقيس ٦٤بكسل، لا ٣٢): بحساب الأزرار الخمسة وأيقونة
   الكتاب والمسافات لا يتبقّى له سوى ~٧٦بكسل من أصل ~١٥٠بكسل يحتاجها نصّه — فجوةٌ
   لا يسدّها تصغيرُ خطٍّ بمقدار نقطتين. الحلّ الجذريّ لا تخمين حجمٍ آخر: العنوان
   يتقلّص حتى الحدّ المتاح فعلياً ويُقتَطع بثلاث نقاطٍ بدل أن يلتفّ — يضمن سطراً
   واحداً **دائماً** أيّاً كان عدد الأزرار مستقبلاً، بدل عتبةٍ محسوبةٍ يدوياً تنكسر
   عند أوّل زرٍّ يُضاف. */
.topbar h2{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:480px){
  .topbar .tb-head{gap:6px}
  .topbar h2{font-size:16px}
  .tb-head .icon-btn{width:32px;height:32px}
  .tb-head .icon-btn svg{width:17px;height:17px}
}
.tabs{display:flex}
.tab{flex:1;min-width:0;overflow-wrap:break-word;hyphens:auto;text-align:center;padding:15px;font-weight:800;color:var(--muted);position:relative;cursor:pointer;transition:.15s}
/* تبويباتٌ متساويةٌ لا تفيض: «Most influential» ‏115px كان يدفع الصفَّ إلى ‏345 في شاشة ‏320 */
@media(max-width:400px){.tab{padding:15px 6px}}
.tab:hover{background:var(--hover)}
.tab.active{color:var(--text)}
.tab.active:after{content:"";position:absolute;bottom:0;inset-inline:25%;height:4px;border-radius:4px;background:var(--brand)}

.right{position:sticky;top:0;height:100vh;overflow-y:auto;overscroll-behavior:contain;padding:12px;display:flex;flex-direction:column;gap:14px}
/* ⚠️ **بطاقةٌ تُعصَر لا تفيض** (بلاغُ المالك 2026-09-23): الرفُّ عمودٌ مرن، وأبناؤه بـ`flex-shrink:1`
   افتراضاً. فحين يطول المحتوى عن النافذة تُقصَّر البطاقةُ نفسُها ويُقتطَع ما فيها بدل أن يفيض
   الرفُّ — فلا يظهر شريطُ تمريرٍ ولا يُبلَغ المقطوع. قِيس في نافذةٍ ارتفاعُها 620: «الأندية
   الرائجة» 507 من 598، و`scrollHeight == clientHeight` أي لا تمرير. المنعُ من الانكماش يجعل
   الفيضَ حقيقيّاً فيعمل `overflow-y:auto` كما يُنتظَر. وينطبق الأمرُ نفسُه على شريط التنقّل. */
.right > *, .sidebar > *{flex:0 0 auto}
/* الحشوةُ على الحقل لا على الإطار: كان الحقلُ ‏22px في إطارٍ ‏42px فلمسُ حوافّه لا يُركّز فيه (مراجعة 2026-09-23) */
.searchbox{display:flex;align-items:center;gap:8px;background:var(--hover);border-radius:999px;padding:0 16px}
.searchbox input{background:transparent;border:none;outline:none;color:var(--text);width:100%;font-size:15px;padding:11px 0}
.card{background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
[data-theme="dark"] .card{background:#1f262e}
.card h3{margin:0;padding:14px 16px 6px;font-size:19px;font-weight:900}
.card .row{display:flex;align-items:center;gap:10px;padding:11px 16px;transition:.15s}
.card .row:hover{background:var(--hover)}
.card .row .av{width:42px;height:42px}

/* ── المنشور ── */
.post{display:flex;gap:12px;padding:12px 16px;border-bottom:1px solid var(--border);transition:.1s;cursor:pointer}
.post:hover{background:var(--hover)}
.post .pbody{flex:1;min-width:0}
.phead{display:flex;align-items:center;gap:6px;flex-wrap:wrap;position:relative}
/* منشورٌ باسمٍ/شارةٍ طويلة على هاتفٍ ضيّق يلفّ .phead — فيسحب معه .spacer الفارغ و.pmenu
   («⋯» خيارات المنشور) إلى سطرٍ يتيمٍ وحدهما، منفصلَين بصريّاً عن الاسم الذي يخصّانه.
   الحل: يخرج .pmenu من تدفّق الالتفاف تماماً ويُثبَّت أعلى الرأس دائماً — نمطٌ مألوف
   (X/Twitter). الحشوة تحجز له مكاناً فلا يعلو النصّ تحته. */
.phead:has(.pmenu){padding-inline-end:26px}
.phead .pname{font-weight:800}
.phead .phandle,.phead .ptime{color:var(--muted);font-size:14px}
.pctx{color:var(--muted);font-size:13px;display:flex;align-items:center;gap:5px;margin-top:1px}
.ptext{margin:5px 0;white-space:pre-wrap;word-break:break-word;font-size:15.5px}
.pimg{margin-top:8px;border-radius:14px;border:1px solid var(--border);max-height:380px;width:100%;object-fit:cover;display:block}
.phashtags{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.phashtags a{color:var(--accent);font-weight:700;font-size:14px}
.why{margin-top:8px;font-size:12px;color:var(--brand);background:color-mix(in srgb,var(--brand) 7%,transparent);border:1px solid color-mix(in srgb,var(--brand) 16%,transparent);border-radius:8px;padding:5px 9px;display:inline-flex;gap:6px;align-items:center;cursor:pointer;transition:background .15s,border-color .15s}
.why:hover{background:color-mix(in srgb,var(--brand) 13%,transparent);border-color:color-mix(in srgb,var(--brand) 30%,transparent)}
.why:focus-visible{outline:2px solid var(--brand);outline-offset:1px}
.why-gear{margin-inline-start:auto;font-size:11px;font-weight:700;opacity:.85;white-space:nowrap;padding-inline-start:6px}
/* ستّة أزرارٍ ثابتة العرض (ردّ/إعادة نشر/إعجاب/حفظ/مشاهدات/مشاركة)، كلٌّ منها
   يتّسع بعددٍ ظاهر (رقم التفاعل) — لا تشترك كل المنشورات في نفس العرض المطلوب:
   منشورٌ بتفاعلٍ عالٍ (كل الحقول مملوءة بأرقام) قِيس يحتاج ٢٤٢بكسل، بينما البطاقة
   نفسها عند ٣٢٠بكسل لا تمنحه إلا ٢٣٢ — ‎١٠بكسل فيضانٌ صامت (`space-between` يوزّع
   الفائض، لا يتقلّص عن مجموع محتوى الأزرار). نفس معالجة `.kind-chips` أعلاه:
   تمريرٌ أفقيّ بدل فيضانٍ يكسر عرض المستند كلّه (المُكتشَف حيّاً في المُنشئ). */
.pactions{display:flex;justify-content:space-between;max-width:430px;margin-top:8px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.pactions::-webkit-scrollbar{display:none}
.pactions .pact{flex-shrink:0}
.pact{display:flex;align-items:center;gap:6px;color:var(--muted);font-size:13px;border:none;background:none;padding:6px 8px;border-radius:999px;transition:.15s}
.pact svg{width:18px;height:18px}
.pact:hover{background:var(--hover)}
.pact.reply:hover{color:var(--accent)}
.pact.repost:hover,.pact.repost.on{color:var(--repost)}
.pact.like:hover,.pact.like.on{color:var(--like)}
.pact.bm:hover,.pact.bm.on{color:var(--brand)}
.pmenu{position:absolute;top:-2px;inset-inline-end:0}
/* Portaled to <body> as position:fixed (coords set in openMenu) so it floats above
   later posts/comments — which form their own stacking contexts via the fadeUp
   animation and otherwise painted over an absolute, in-card menu. */
.pmenu-pop{position:fixed;background:var(--panel);border:1px solid var(--border);border-radius:12px;box-shadow:0 8px 30px rgba(0,0,0,.18);min-width:190px;z-index:160;overflow:hidden}
.pmenu-pop button{display:flex;align-items:center;gap:10px;width:100%;text-align:start;padding:11px 14px;background:none;border:none;color:var(--text);font-size:14px}
.pmenu-pop button:hover{background:var(--hover)}
.pmenu-pop button.del{color:var(--like)}

/* استطلاع */
.poll{margin-top:8px;max-width:430px}
.poll-opt{position:relative;border:1px solid var(--border);border-radius:10px;padding:9px 13px;margin-bottom:7px;font-weight:700;overflow:hidden;cursor:pointer}
.poll-opt .fill{position:absolute;inset-block:0;inset-inline-start:0;background:color-mix(in srgb,var(--brand) 18%,transparent);z-index:0}
.poll-opt .lbl{position:relative;z-index:1;display:flex;justify-content:space-between}

/* المُنشئ */
.composer{display:flex;gap:12px;padding:14px 16px;border-bottom:1px solid var(--border)}
/* عمودُ النصّ (`<div style="flex:1">` بلا صنف) إلى جانب الصورة الرمزية `.av` —
   عنصرُ flex بلا `min-width:0` يرث `min-width:auto`، فيُقاس حدُّه الأدنى بأكبر
   محتوًى داخله. و`<textarea>` عنصرٌ "شِبهُ مُستبدَل" (كالـ`<input>`) لا يتقلّص حدُّه
   الأدنى مع `width:100%` — فيرفض العمود التقلّص عن عرضه شبه الكامل رغم الصورة
   الرمزية المجاورة له، فيفيض المُنشئ عن ٣٢٠ﭙكسل أفقياً (قِيس فعلاً: ٣٤ﭙكسل، يُخرج
   زرّ النشر العائم وشريط التنقّل السفليّ جزئياً عن حافة الشاشة على الهواتف الضيّقة
   — عطلٌ منفصلٌ عن التفاف الرقائق أدناه، سبقه في الترتيب ولم يُكتشَف حينها لأنّ
   الفحص وقتها اقتصر على 320/375px الرأسيّين لا فحص فيضان المستند الأفقيّ).
   `min-width:0` تسمح للعمود بالتقلّص حتى صفر فيتقلّص الـtextarea معه فعلياً. */
.composer>div:has(>textarea){min-width:0}
.composer textarea{width:100%;border:none;outline:none;resize:none;background:transparent;color:var(--text);font-size:18px;font-family:inherit;min-height:54px}
.composer .crow{display:flex;align-items:center;gap:6px;margin-top:8px}
/* على هاتفٍ ضيّق (~320px) لا يتّسع صفّ الرقائق (منشور/سؤال/إعلان/مصدر) وزرّ «نشر» معاً
   في سطرٍ واحد؛ الالتفاف (flex-wrap) كان يُشتّت الرقائق سطرَين ويفصل زرّ «نشر» عنها
   بصريّاً. الحلّ: الرقائق تُمرَّر أفقيّاً بدل أن تلتفّ — كما شريط تبويبات المكتبة تماماً —
   فيبقى الصفّ سطراً واحداً منظّماً وزرّ «نشر» ثابتاً في مكانه دائماً. */
.kind-chips{display:flex;gap:6px;flex-wrap:nowrap;overflow-x:auto;min-width:0;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.kind-chips::-webkit-scrollbar{display:none}
.kind-chips .kc{font-size:13px;padding:5px 11px;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--muted);font-weight:700;flex-shrink:0}
.kind-chips .kc.on{background:color-mix(in srgb,var(--brand) 14%,transparent);color:var(--brand);border-color:transparent}

/* الترويسة في الملف الشخصي */
.profile-head{padding:16px}
.profile-cover{height:130px;background:linear-gradient(120deg,var(--brand),var(--brand-2));margin:-16px -16px 0}
.profile-row{display:flex;align-items:flex-end;gap:14px;margin-top:-44px}
/* زرُّ «تعديل الملف» يقع فوق طرف الغلاف: نصٌّ باهتٌ على تدرّجٍ ملوّن لا يُقرأ ⇒ خلفيّةٌ مصمتة */
.profile-row > .btn.ghost, .profile-row > .icon-btn{background:var(--bg);color:var(--text)}
.profile-row .av{width:88px;height:88px;border:4px solid var(--bg);font-size:30px}
.profile-stats{display:flex;gap:18px;margin-top:10px}
.profile-stats b{font-weight:900}

/* الأقسام/الشبكة */
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:14px}
.feature-card{background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius);padding:16px;cursor:pointer;transition:.15s}
.feature-card:hover{transform:translateY(-2px);box-shadow:0 8px 24px rgba(0,0,0,.08);border-color:var(--brand)}
.feature-ic{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;color:#fff;margin-bottom:10px}
.feature-card h4{margin:0 0 4px;font-size:16px;font-weight:900}
.feature-card p{margin:0;font-size:13px;color:var(--muted)}

.empty{padding:40px 20px;text-align:center;color:var(--muted)}
.empty svg{width:46px;height:46px;opacity:.5;margin-bottom:8px}
.empty h4{margin:0 0 4px;color:var(--text);font-size:18px}

/* المكتبة المدمجة */
.app.lib-mode{grid-template-columns:minmax(260px,300px) minmax(0,1fr) minmax(300px,360px);max-width:none}
/* ════ المرحلة 2: شاشة المحادثة الأصيلة (بلا iframe) ════ */
.nchat{display:flex;flex-direction:column;height:calc(100vh - 108px)}   /* الشريط العلوي (~54) + شريط التبويبات (~54) */
.nchat-msgs{flex:1;overflow-y:auto;padding:18px 16px;display:flex;flex-direction:column;gap:14px}
.nchat-empty{margin:auto;text-align:center;color:var(--muted);display:flex;flex-direction:column;align-items:center;gap:6px;padding:40px 20px}
.nchat-empty svg{width:46px;height:46px;opacity:.7}
/* ⚠️ الفقرةُ موسَّطةٌ كالعنوان والأيقونة (طلبُ المالك 2026-09-23: «كلُّها في الوسط»).
   كانت تُحاذى من البداية (مراجعة 2026-09-22) لأنّ الموسَّطَ الطويلَ يُضيّع العين؛ وهذا
   يعالجه `text-wrap:balance`: أسطرٌ متقاربةُ الطول فلا يتيمَ قصيراً تحت سطرٍ طويل. */
.nchat-empty p,.nlib-empty p,.empty p{max-width:46ch;margin-inline:auto;text-align:center;text-wrap:balance;line-height:1.9}
.empty > div{text-wrap:balance}
/* عنوانُ شاشة المكتبة الفارغة كعناوين سائر الشاشات الفارغة (لونُ النصّ، ‏18px، أيقونةٌ خافتة) */
.nchat-empty h3{margin:4px 0 0;color:var(--text);font-size:18px}
.nchat-empty svg{opacity:.5}

.nbub{max-width:82%;padding:11px 15px;border-radius:16px;line-height:1.8;font-size:15px;word-wrap:break-word;overflow-wrap:anywhere}
.nbub.user{align-self:flex-end;background:var(--brand-fill);color:#fff;border-end-end-radius:5px}
.nbub.bot{align-self:flex-start;background:var(--bg-soft);color:var(--text);border-end-start-radius:5px}
.nbub.bot :is(h1,h2,h3,h4){font-size:1.06em;margin:.45em 0;font-weight:700}
.nbub.bot p{margin:.35em 0}.nbub.bot ul,.nbub.bot ol{margin:.35em 0;padding-inline-start:1.5em}.nbub.bot li{margin:.15em 0}
.nbub.bot pre{background:rgba(0,0,0,.06);padding:9px 11px;border-radius:9px;overflow-x:auto;margin:.45em 0}
.nbub.bot code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.92em}
.nbub.bot pre code{background:none;padding:0}.nbub.bot blockquote{border-inline-start:3px solid var(--border);padding-inline-start:10px;margin:.4em 0;color:var(--muted)}
[data-theme="dark"] .nbub.bot pre{background:rgba(255,255,255,.07)}
.nbub.bot .nchat-pre{position:relative}
.nbub.bot .nchat-pre code{display:block;padding-inline-end:34px}
.nchat-codecopy{position:absolute;inset-block-start:6px;inset-inline-end:6px;background:var(--bg);border:1px solid var(--border);border-radius:7px;padding:3px 5px;cursor:pointer;opacity:.6;line-height:0;color:var(--muted);transition:opacity .15s,border-color .15s}
.nchat-codecopy:hover{opacity:1;border-color:var(--brand);color:var(--brand)}
.nchat-codecopy svg{width:14px;height:14px}
.nch-src{margin-top:8px;border-top:1px dashed var(--border);padding-top:7px}
.nch-src summary{cursor:pointer;color:var(--brand);font-size:12.5px;font-weight:700;list-style:none;user-select:none;display:inline-flex;align-items:center;gap:5px}
.nch-src summary::-webkit-details-marker{display:none}
.nch-src summary:hover{text-decoration:underline}
.nch-src-pg{font-weight:800;background:var(--bg-soft);border:1px solid var(--border);border-radius:6px;padding:0 6px;font-size:11.5px;color:var(--brand);white-space:nowrap}
.nch-src[open] summary{margin-bottom:6px}
.nch-src-body{font-size:12.5px;line-height:1.7;color:var(--muted);background:var(--bg-soft);border-inline-start:3px solid var(--brand);border-radius:8px;padding:8px 11px;max-height:200px;overflow:auto;white-space:pre-wrap}
.nbub.bot a{color:var(--brand);text-decoration:underline;word-break:break-word}
.nbub.bot del{opacity:.6}
.nbub.bot .nchat-tbl{border-collapse:collapse;margin:.5em 0;font-size:.93em;display:block;overflow-x:auto;max-width:100%}
.nbub.bot .nchat-tbl th,.nbub.bot .nchat-tbl td{border:1px solid var(--border);padding:6px 10px;text-align:start;vertical-align:top}
.nbub.bot .nchat-tbl th{background:color-mix(in srgb,var(--brand) 10%,transparent);font-weight:700}
.nbub.bot .nchat-tbl tbody tr:nth-child(even){background:color-mix(in srgb,var(--text) 4%,transparent)}
.nchat-compose{display:flex;gap:9px;padding:12px 14px;border-top:1px solid var(--border);align-items:flex-end;background:var(--bg)}
.nchat-compose textarea{flex:1;min-width:0;resize:none;border:1px solid var(--border);border-radius:21px;padding:10px 15px;font:inherit;line-height:1.5;background:var(--bg);color:var(--text);max-height:160px;outline:none}
.nchat-compose textarea:focus{border-color:var(--brand)}
/* ⚠️ `min-width:0`: بدونه يأخذ المربّعُ عرضَه الذاتيّ (‏20 عموداً) فيدفع زرَّ الإرسال خارج الشاشة على الهاتف (قِيس بلقطة 390px، 2026-09-22) */
.nchat-send{flex:0 0 auto;width:42px;height:42px;border-radius:50%;border:0;background:var(--brand-fill);color:#fff;cursor:pointer;display:grid;place-items:center}
.nchat-send svg{width:20px;height:20px}.nchat-send:disabled{opacity:.5;cursor:default}
.nchat-attach{flex:0 0 auto;width:40px;height:40px;border-radius:50%;border:1px solid var(--border);background:var(--bg);color:var(--muted);cursor:pointer;font-size:18px;line-height:1;display:grid;place-items:center}
.nchat-attach:hover{background:var(--bg-soft);color:var(--brand)}
.nchat-prev{display:none;align-items:center;gap:10px;padding:8px 14px;border-top:1px solid var(--border);background:var(--bg-soft)}
.nchat-prev.show{display:flex}
.nchat-prev img{width:44px;height:44px;object-fit:cover;border-radius:8px}
.nchat-prev-name{flex:1;min-width:0;font-size:13px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nchat-prev-x{flex:0 0 auto;border:0;background:none;color:var(--muted);cursor:pointer;font-size:15px;width:26px;height:26px;border-radius:50%}
.nchat-prev-x:hover{background:var(--border);color:var(--text)}
.nbub-img{max-width:220px;max-height:170px;border-radius:10px;display:block;margin-bottom:6px}
.nchat-mic.recording{background:#e0245e;border-color:#e0245e;color:#fff;animation:nvpulse 1.1s ease-in-out infinite}
@keyframes nvpulse{0%,100%{box-shadow:0 0 0 0 rgba(224,36,94,.5)}50%{box-shadow:0 0 0 7px rgba(224,36,94,0)}}
.nchat-tts.on{color:var(--brand)}
.nchat-tts,.nchat-miclang{font-size:16px}
.nchat-miclang{font-size:13px;font-weight:800;color:var(--muted)}
.icon-btn.nchat-miclang:hover,.icon-btn.nchat-tts:hover{color:var(--brand)}
/* ════ تبويبات المكتبة الأصيلة (م6) ════ */
.nlib-tabs{display:flex;gap:2px;padding:0 8px;border-bottom:1px solid var(--border);overflow-x:auto;flex:0 0 auto;background:var(--bg);scrollbar-width:none}
.nlib-tabs::-webkit-scrollbar{display:none}
.nlib-tab{flex:0 0 auto;position:relative;padding:13px 14px 12px;background:none;border:0;color:var(--muted);font:inherit;font-weight:700;font-size:14px;cursor:pointer;white-space:nowrap;transition:color .15s}
.nlib-tab:hover{color:var(--text)}
.nlib-tab.active{color:var(--brand)}
.nlib-tab.active:after{content:"";position:absolute;inset-inline:10px;bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--brand)}
.nsess-group{font-size:11.5px;font-weight:800;color:var(--muted);padding:10px 11px 4px}
.nlib-body{flex:1;overflow-y:auto;min-height:0}
.nlib-pad{padding:16px}
.nlib-row{display:flex;gap:8px;margin-bottom:14px}
.nlib-input{flex:1;border:1px solid var(--border);border-radius:12px;padding:10px 14px;font:inherit;background:var(--bg);color:var(--text);outline:none}
.nlib-input:focus{border-color:var(--brand)}
.nlib-empty{text-align:center;padding:36px 16px;font-size:14px;max-width:52ch;margin-inline:auto}
.nbub-actions{display:flex;gap:2px;margin-top:7px;opacity:0;transition:opacity .15s}
.nbub.bot:hover .nbub-actions{opacity:1}
.nbub-act{border:0;background:none;cursor:pointer;color:var(--muted);padding:4px;border-radius:7px;display:inline-flex}
.nbub-act svg{width:16px;height:16px}.nbub-act:hover{background:var(--bg);color:var(--brand)}
.nchat-send.stopping{background:#dc2626}.nchat-send.stopping:hover{background:#b91c1c}
.nchat-follow{display:flex;flex-wrap:wrap;gap:7px;padding:0 16px 8px;flex:0 0 auto}
.nchat-follow:empty{display:none}
.nchat-fu{display:inline-flex;align-items:center;gap:5px;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:999px;padding:7px 13px;font:inherit;font-size:12.5px;font-weight:600;cursor:pointer;transition:all .15s}
.nchat-fu:hover{border-color:var(--brand);color:var(--brand);background:var(--bg-soft)}
.nchat-fu svg{width:14px;height:14px}
.nchat-fu-regen{color:var(--brand);border-color:color-mix(in srgb,var(--brand) 35%,var(--border))}
.nv-x{margin-inline-start:auto;border:0;background:none;cursor:pointer;font-size:14px;opacity:.5;flex:0 0 auto}.nv-x:hover{opacity:1}
.nv-note,.nv-book,.nv-sres{border:1px solid var(--border);border-radius:12px;padding:11px 13px;margin-bottom:10px}
.nv-note-c{font-size:14px;line-height:1.7;max-height:300px;overflow:auto}.nv-note-n{font-size:13px;color:var(--brand);margin-top:5px}
/* عرض ماركداون مشترك للملاحظات (نفس عناصر فقاعة المحادثة): جداول/أكواد/قوائم/روابط */
.nch-md :is(h1,h2,h3,h4){font-size:1.05em;margin:.4em 0;font-weight:700}
.nch-md p{margin:.3em 0}.nch-md ul,.nch-md ol{margin:.3em 0;padding-inline-start:1.4em}.nch-md li{margin:.12em 0}
.nch-md pre{background:rgba(0,0,0,.06);padding:8px 10px;border-radius:9px;overflow-x:auto;margin:.4em 0;position:relative}
.nch-md code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:.92em}.nch-md pre code{background:none;padding:0;display:block;padding-inline-end:34px}
[data-theme="dark"] .nch-md pre{background:rgba(255,255,255,.07)}
.nch-md a{color:var(--brand);text-decoration:underline;word-break:break-word}.nch-md del{opacity:.6}
.nch-md blockquote{border-inline-start:3px solid var(--border);padding-inline-start:10px;margin:.35em 0;color:var(--muted)}
.nch-md .nchat-tbl{border-collapse:collapse;margin:.45em 0;font-size:.92em;display:block;overflow-x:auto;max-width:100%}
.nch-md .nchat-tbl th,.nch-md .nchat-tbl td{border:1px solid var(--border);padding:5px 9px;text-align:start;vertical-align:top}
.nch-md .nchat-tbl th{background:color-mix(in srgb,var(--brand) 10%,transparent);font-weight:700}
.nv-note-f,.nv-book{display:flex;align-items:center;gap:8px}.nv-note-f{margin-top:7px;font-size:12px}
.nv-book-t{font-weight:700;font-size:14px;display:flex;align-items:center;gap:7px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nv-book-t svg{width:18px;height:18px;flex:0 0 auto}.nv-book-m{font-size:12px;flex:0 0 auto}
.nv-book-sum{flex:0 0 auto;padding:5px 11px}
/* ⚠️ زرُّ الحذف: كان رمزاً بـ14px ونصفِ شفافيّةٍ ملتصقاً بـ«تلخيص»، والعنوانُ
   الطويلُ يزاحمه لأنّ `.nv-book-t` بلا `flex:1` — فلا يراه المستخدم أصلاً.
   الآن: العنوانُ يأخذ المتاحَ فيُدفَع الزرُّ إلى حافّة الصفّ (اليسار في RTL)،
   بحجمٍ وتباينٍ يُرى، وبمساحةِ لمسٍ تكفي الإصبع على الهاتف (‏≥32px). */
.nv-book-t{flex:1 1 auto}
.nv-book .nv-x{margin-inline-start:auto;font-size:17px;opacity:.75;line-height:1;
  min-width:32px;min-height:32px;display:inline-flex;align-items:center;justify-content:center;
  border-radius:8px;transition:opacity .15s,background .15s,color .15s}
.nv-book .nv-x:hover,.nv-book .nv-x:focus-visible{opacity:1;background:rgba(220,38,38,.12);color:#dc2626}
.nv-book .nv-x:focus-visible{outline:2px solid #dc2626;outline-offset:1px}
.nv-summary{background:var(--bg);border-radius:16px;width:min(640px,94vw);max-height:86vh;display:flex;flex-direction:column;overflow:hidden}
.nv-sum-h{display:flex;align-items:center;gap:9px;padding:14px 16px;border-bottom:1px solid var(--border);font-size:15px}
.nv-sum-h svg{width:20px;height:20px;color:var(--brand);flex:0 0 auto}.nv-sum-h b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nv-sum-x{flex:0 0 auto}
.nv-sum-body{padding:16px 18px;overflow-y:auto;line-height:1.9;font-size:14.5px}
.nv-sum-body :is(h1,h2,h3){font-size:1.08em;font-weight:700;margin:.6em 0 .3em;color:var(--brand)}
.nv-sum-body ul,.nv-sum-body ol{padding-inline-start:1.5em;margin:.4em 0}.nv-sum-body li{margin:.2em 0}.nv-sum-body p{margin:.4em 0}
.nv-upload{display:flex;flex-direction:column;align-items:center;gap:5px;padding:24px;border:2px dashed var(--border);border-radius:14px;cursor:pointer;text-align:center;margin-bottom:14px}
.nv-upload:hover{border-color:var(--brand)}.nv-upload svg{width:30px;height:30px;color:var(--brand)}.nv-upload .muted{font-size:12.5px}
.nv-upstatus{margin-bottom:14px}.nv-upbar{height:8px;border-radius:8px;background:var(--bg-soft);overflow:hidden}.nv-upfill{height:100%;width:0;background:var(--brand);transition:width .4s}.nv-upstatus .muted{font-size:12.5px;margin-top:5px}
.nv-sres{cursor:pointer}.nv-sres:hover{background:var(--bg-soft)}
.nv-sres-h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.nv-sres-h b{font-size:14px}
.nv-sres-q{font-size:13px;margin-top:5px}.nv-sres-a{font-size:13px;margin-top:3px}
.nlib-pad .chip{background:var(--bg-soft);color:var(--brand);padding:2px 9px;border-radius:999px;font-size:11.5px;font-weight:700}
.nv-settings{max-width:560px;display:flex;flex-direction:column;gap:14px}
.nv-set-card{border:1px solid var(--border);border-radius:14px;padding:15px}
.nv-set-h{display:flex;align-items:flex-start;gap:11px;margin-bottom:11px}
.nv-set-h svg{width:22px;height:22px;color:var(--brand);flex:0 0 auto;margin-top:2px}
.nv-set-t{display:flex;flex-direction:column;gap:2px}.nv-set-t b{font-size:14.5px}.nv-set-t span{font-size:12.5px;line-height:1.5}
.nv-set-stat{font-size:12.5px;margin-top:7px}
/* جدولُ «أيُّ نموذجٍ لأيّ غرض» — عرضٌ لا تبديل */
.nv-routing{margin-top:10px;border-top:1px solid var(--line,#e6e6e6);padding-top:8px}
.nv-routing-h{font-size:12px;margin-bottom:6px}
.nv-routing-row{display:flex;justify-content:space-between;gap:10px;
  font-size:12.5px;padding:3px 0;line-height:1.5}
.nv-routing-task{opacity:.8;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nv-routing-model{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:11.5px;white-space:nowrap;opacity:.95}
.nv-lbl{display:block;font-weight:700;font-size:13.5px;margin:12px 0 6px}
.nv-range{width:100%;height:32px}   /* المنزلقُ ‏16px ⇒ ‏32 لمساً؛ المسارُ المرئيُّ كما هو */
.nv-seg{display:flex;gap:6px}.nv-segb{flex:1;padding:9px;border:1px solid var(--border);border-radius:10px;background:var(--bg);color:var(--muted);font:inherit;font-weight:700;cursor:pointer}
.nv-segb.active{background:var(--brand-fill);color:#fff;border-color:var(--brand-fill)}
.btn.block{width:100%}.btn.ghost{background:none;border:1px solid var(--border);color:var(--text)}
.nv-loading{display:flex;align-items:center;gap:10px;justify-content:center;padding:50px 16px;color:var(--muted)}
.nv-qbar{height:7px;border-radius:7px;background:var(--bg-soft);overflow:hidden;margin-bottom:8px}.nv-qfill{height:100%;background:var(--brand);transition:width .3s}
.nv-qmeta{font-size:12.5px;margin-bottom:10px}
.nv-qtext{font-size:16px;font-weight:700;line-height:1.7;margin-bottom:14px}
.nv-qopts{display:flex;flex-direction:column;gap:9px}
.nv-qopt{text-align:start;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--bg);color:var(--text);font:inherit;cursor:pointer;line-height:1.5;display:flex;align-items:center;gap:10px}
.nv-qnum{flex:0 0 auto;width:22px;height:22px;border-radius:6px;background:var(--bg-soft);border:1px solid var(--border);display:grid;place-items:center;font-size:12.5px;font-weight:700;color:var(--muted)}
.nv-qopt.correct .nv-qnum,.nv-qopt.wrong .nv-qnum{background:rgba(255,255,255,.25);color:#fff;border-color:transparent}
.nv-fcg kbd{background:rgba(255,255,255,.25);border-radius:5px;padding:0 5px;font-size:.82em;font-family:inherit;margin-inline-end:2px}
.nv-qopt:hover:not(:disabled){border-color:var(--brand)}
.nv-qopt.correct{background:#16a34a;color:#fff;border-color:#16a34a}.nv-qopt.wrong{background:#dc2626;color:#fff;border-color:#dc2626}
.nv-qexplain{margin-top:12px;padding:11px 13px;background:var(--bg-soft);border-radius:10px;font-size:13.5px;line-height:1.7}
.nv-qresult{text-align:center;padding:34px 16px;display:flex;flex-direction:column;align-items:center;gap:12px}.nv-qemo{font-size:54px}.nv-qresult h2{margin:0}
.nv-fcstats{display:flex;align-items:center;gap:14px;padding:14px;background:var(--bg-soft);border-radius:14px;margin-bottom:6px}
.nv-fcstat{display:flex;flex-direction:column;align-items:center}.nv-fcstat b{font-size:22px;color:var(--brand)}.nv-fcstat span{font-size:11.5px}
.nv-fcstats .btn{margin-inline-start:auto}
.nv-fcard{border:1px solid var(--border);border-radius:16px;padding:30px 18px;text-align:center;cursor:pointer;min-height:150px;display:flex;flex-direction:column;justify-content:center;gap:14px;margin:14px 0}
.nv-fcfront{font-size:18px;font-weight:700;line-height:1.7}.nv-fcback{font-size:15px;line-height:1.8;border-top:1px solid var(--border);padding-top:14px}.nv-fchint{font-size:12.5px}
.nv-fcgrades{display:flex;gap:7px}.nv-fcg{flex:1;padding:11px;border:0;border-radius:11px;color:#fff;font:inherit;font-weight:700;cursor:pointer}
.nv-fcg.g1{background:#dc2626}.nv-fcg.g3{background:#ea580c}.nv-fcg.g4{background:#16a34a}.nv-fcg.g5{background:#2563eb}
.nv-fclist{margin-top:14px}.nv-fcitem{display:flex;align-items:center;gap:9px;border:1px solid var(--border);border-radius:11px;padding:9px 12px;margin-bottom:8px}
.nv-fcq{font-weight:700;font-size:13.5px}.nv-fca{font-size:12.5px;flex:1;min-width:0}
/* تحميل المكتبة كتطبيق */
.nlib-dl{font-size:17px}
.dl-modal{background:var(--bg);border-radius:18px;width:min(820px,95vw);max-height:88vh;display:flex;flex-direction:column;overflow:hidden}
.dl-modal-h{display:flex;align-items:center;gap:10px;padding:16px 18px;border-bottom:1px solid var(--border);font-size:16px;font-weight:800}
.dl-modal-h svg{width:22px;height:22px;color:var(--brand)}.dl-modal-h b{flex:1}
.dl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:13px;padding:18px;overflow-y:auto}
.dl-card{position:relative;border:1px solid var(--border);border-radius:14px;padding:15px;display:flex;flex-direction:column;gap:8px}
.dl-card.rec{border-color:var(--brand);box-shadow:0 0 0 2px color-mix(in srgb,var(--brand) 22%,transparent)}
.dl-badge{position:absolute;top:-9px;inset-inline-start:13px;background:var(--brand-fill);color:#fff;font-size:11px;font-weight:800;padding:2px 9px;border-radius:999px}
.dl-card-h{display:flex;align-items:center;gap:9px;font-size:16px;font-weight:800}.dl-card-ic{font-size:24px}
.dl-card-desc{font-size:12.8px;color:var(--muted);line-height:1.7;margin:0;flex:1}
.dl-btn{display:block;text-align:center;background:var(--brand-fill);color:#fff;text-decoration:none;font-weight:800;padding:10px;border-radius:11px;font-size:13.5px}
.dl-btn:hover{filter:brightness(1.07)}
.dl-card-note{font-size:11.5px;color:var(--muted);line-height:1.6;margin:0}
.nchat-typing{display:flex;align-items:center;gap:9px;color:var(--muted)}
.nchat-spin{width:16px;height:16px;border:2px solid var(--border);border-top-color:var(--brand);border-radius:50%;animation:spin .8s linear infinite;display:inline-block;flex:0 0 auto}
@media(max-width:680px){.nchat{height:calc(100dvh - 108px - 62px - env(safe-area-inset-bottom))}
  .nlib-body{height:calc(100dvh - 108px - 62px - env(safe-area-inset-bottom));overflow-y:auto}}
.nlib-body{height:calc(100vh - 108px);overflow-y:auto}
/* شريط المحادثات السابقة (الرفّ الأيمن) */
.nsess-card .nsess-head{display:flex;align-items:center;justify-content:space-between;padding:12px 14px 4px;gap:8px}
.nsess-card .nsess-head h3{padding:0;margin:0}
.nsess-list{display:flex;flex-direction:column;gap:2px;padding:4px 8px 10px;max-height:50vh;overflow-y:auto}
.nsess-item{padding:9px 11px;border-radius:10px;cursor:pointer;display:flex;align-items:center;gap:6px}
.nsess-item:hover{background:var(--bg-soft)}
.nsess-item.active{background:var(--bg-soft);box-shadow:inset 3px 0 0 var(--brand)}
.nsess-topic{flex:1;min-width:0;font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nsess-del{flex:0 0 auto;border:0;background:none;color:var(--muted);cursor:pointer;padding:3px;border-radius:6px;opacity:0;display:inline-flex}
.nsess-item:hover .nsess-del{opacity:.7}.nsess-del:hover{opacity:1!important;color:#dc2626;background:var(--bg)}
.nsess-del svg{width:15px;height:15px}
.nsess-time{font-size:11.5px;color:var(--muted)}
.nsess-loading{padding:10px 12px;font-size:13px}

/* شريط الملاحة السفلي (الجوال) */
.mobile-nav{display:none}

/* النوافذ المنبثقة */
.modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:100;display:grid;place-items:center;padding:16px}
.modal{position:relative;background:var(--bg);border-radius:18px;width:100%;max-width:540px;max-height:92vh;overflow-y:auto;box-shadow:0 20px 60px rgba(0,0,0,.4)}
/* إبراز منطقة الإفلات (سحب وإفلات الملفات على المُنشئ) */
.modal.drop-hot{outline:2.5px dashed var(--brand);outline-offset:-8px}
.modal.drop-hot::after{content:attr(data-drop);position:absolute;inset:0;z-index:6;display:flex;align-items:flex-start;justify-content:center;padding-top:84px;font-weight:900;font-size:17px;color:var(--brand);background:color-mix(in srgb,var(--brand) 14%,var(--bg));border-radius:18px;pointer-events:none}
.modal .mhead{display:flex;align-items:center;gap:12px;padding:12px 16px;position:sticky;top:0;background:var(--bg);border-bottom:1px solid var(--border)}
.modal .mbody{padding:16px}
.field{margin-bottom:12px}
.field label{display:block;font-size:13px;font-weight:700;color:var(--muted);margin-bottom:5px}
.field input,.field select,.field textarea{width:100%;padding:11px 13px;border:1px solid var(--border);border-radius:12px;background:var(--bg-soft);color:var(--text);font-size:15px;font-family:inherit;outline:none}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--brand)}
.err{color:var(--like);font-size:13px;margin:6px 0}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}

/* صفحة الدخول/التسجيل — تخطيط بلوحتين */
.auth{min-height:100vh;min-height:100dvh;display:grid;grid-template-columns:1.05fr 1fr;background:var(--bg)}
.auth-brand{position:relative;overflow:hidden;color:#fff;background:linear-gradient(150deg,#8B5E3C 0%,#5B3A29 60%,#3d2719 100%);display:flex;align-items:center;justify-content:center;padding:40px}
.auth-brand::before{content:"";position:absolute;width:420px;height:420px;border-radius:50%;background:rgba(255,255,255,.06);top:-120px;inset-inline-end:-120px}
.auth-brand::after{content:"";position:absolute;width:300px;height:300px;border-radius:50%;background:rgba(255,255,255,.05);bottom:-90px;inset-inline-start:-80px}
.auth-brand-in{position:relative;max-width:440px}
.ab-logo{display:flex;align-items:center;gap:14px;margin-bottom:26px}
.ab-logo img{width:56px;height:56px;filter:drop-shadow(0 4px 10px rgba(0,0,0,.3))}
.ab-logo span{font-size:34px;font-weight:900}
.auth-brand h2{font-size:25px;line-height:1.5;font-weight:800;margin:0 0 30px}
.ab-features{display:flex;flex-direction:column;gap:18px}
.ab-feat{display:flex;gap:14px;align-items:flex-start}
.ab-ic{width:46px;height:46px;flex:0 0 auto;border-radius:14px;background:rgba(255,255,255,.15);display:grid;place-items:center}
.ab-ic svg{width:24px;height:24px;color:#fff}
.ab-feat b{font-size:17px;font-weight:800}
.ab-feat p{margin:3px 0 0;font-size:14px;color:rgba(255,255,255,.82);line-height:1.5}
/* ⚠️ **توسيطٌ يحبس أعلى النموذج** (بلاغُ المالك 2026-09-23): مع `align-items:center` يفيض
   المحتوى الأطولُ من الحاوية **في الاتّجاهين**، وأعلاه لا يُبلَغ أبداً لأنّ `scrollTop` لا
   يصير سالباً. قِيس في نموذج التسجيل: زرُّ اللغة عند `top:-87` على الهاتف و`-3` على
   الحاسوب — ظاهرٌ في الشيفرة، غائبٌ عن الشاشة، ولا سبيلَ إليه إلّا بطيّ «بياناتك
   الدراسية». والبديلُ المعروف: محاذاةٌ من الأعلى وتوسيطٌ بهوامشَ تلقائيّة — يتوسّط حين
   يتّسع، ويُمرَّر كاملاً حين يطول. */
.auth-form-wrap{display:flex;align-items:flex-start;justify-content:center;padding:30px 24px;overflow-y:auto;max-height:100vh;max-height:100dvh}
.auth-form-wrap > *{margin-block:auto}
.auth-card{background:var(--bg);width:100%;max-width:420px}
.auth-card .mobile-logo{display:none;text-align:center;margin-bottom:10px}
.auth-card .mobile-logo img{width:60px;height:60px}
.auth-card h1{font-size:28px;font-weight:900;margin:0 0 4px;color:var(--text)}
.auth-card .sub{color:var(--muted);margin-bottom:22px;font-size:15px}
.reg-section{margin:18px 0 10px;font-weight:800;color:var(--text);font-size:14.5px;border-top:1px solid var(--border);padding-top:16px}
.reg-section span{font-weight:500;color:var(--muted);font-size:13px}
.pw-wrap{position:relative}
.pw-wrap input{width:100%;padding-inline-end:44px}
.pw-toggle{position:absolute;inset-inline-end:6px;top:50%;transform:translateY(-50%);background:transparent;border:none;color:var(--muted);width:34px;height:34px;border-radius:8px;display:grid;place-items:center;cursor:pointer}
.pw-toggle.on,.pw-toggle:hover{color:var(--brand)}
.pw-toggle svg{width:20px;height:20px}
/* رابطُ الزائر — ثانويٌّ تحت زرّ المالك */
.auth-alt{display:block;width:100%;margin-block-start:8px;padding:6px;border:0;background:none;
  color:var(--muted);font:inherit;font-size:.86rem;cursor:pointer;text-align:center}
.auth-alt:hover{color:var(--text);text-decoration:underline}
.auth-switch{text-align:center;margin-top:18px;color:var(--muted)}
.auth-switch a{color:var(--brand);font-weight:800;cursor:pointer}
.auth-switch a:hover{text-decoration:underline}
.demo-btn{margin-top:14px}
.err{color:#e0245e;font-size:14px;font-weight:600;min-height:0;max-height:0;overflow:hidden;transition:.2s}
.err.show{min-height:20px;max-height:60px;margin:4px 0;padding:8px 12px;background:color-mix(in srgb,#e0245e 10%,transparent);border-radius:10px}
@media(max-width:860px){
  .auth{grid-template-columns:1fr}
  .auth-brand{display:none}
  .auth-card .mobile-logo{display:block}
  .auth-card h1{text-align:center}.auth-card .sub{text-align:center}
}

.toast{position:fixed;inset-block-end:calc(20px + env(safe-area-inset-bottom, 0px));inset-inline-start:50%;transform:translateX(50%);background:var(--brand-fill);color:#fff;padding:12px 20px;border-radius:999px;font-weight:700;z-index:200;box-shadow:0 8px 30px rgba(0,0,0,.3);opacity:0;transition:.3s;pointer-events:none}
.toast{visibility:hidden}.toast.show{opacity:1;visibility:visible}
/* `inset-inline-start:50%` يصير left في الإنجليزيّة ⇒ الإزاحةُ تنعكس وإلّا خرج الإشعارُ عن الوسط */
[dir="ltr"] .toast{transform:translateX(-50%)}
/* ⚠️ `visibility` لا `opacity` وحدَها (2026-09-22): الرسالةُ المخفيّةُ بالشفافيّة تبقى نصّاً في
   الصفحة — فيقرؤها قارئُ الشاشة ومُراجِعٌ آليّ «ظاهرةً بعد الانتقال بين الصفحات». */

/* قائمة إكمال @الإشارة */
.mention-pop{position:fixed;z-index:210;background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:0 12px 40px rgba(0,0,0,.22);overflow-y:auto;max-height:282px;min-width:220px}
.mention-item{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer}
.mention-item.on,.mention-item:hover{background:var(--hover)}
.mention-meta{display:flex;align-items:center;gap:5px;min-width:0;flex-wrap:wrap}
.mention-meta b{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:170px}
.mention-meta .muted{font-size:12px}

/* متجاوب */
/* ⚠️ خطوةٌ وسطى 1001–1240px (مراجعة 2026-09-22): iPad أفقيّاً (1024) كان يُبقي الأعمدةَ الثلاثة فلا يبقى
   للخلاصة إلّا ~340px — كلُّ جملةٍ تنكسر أسطراً قصيرة. يُخفى العمودُ الثالث (أدواتُه في القائمة) ويبقى
   الشريطُ الجانبيُّ بأسمائه. ودون 1000px يبقى التخطيطُ المصغّرُ كما كان. */
@media(min-width:1001px) and (max-width:1240px){
  .app, .app.lib-mode{grid-template-columns:minmax(220px,260px) minmax(0,1fr)}
  .right{display:none}
}
@media(max-width:1000px){
  .app{grid-template-columns:88px minmax(0,1fr)}
  .app.lib-mode{grid-template-columns:88px minmax(0,1fr)}  /* اللوحي: شريط مصغّر + المكتبة، بلا لوحة مرافِقة */
  .right{display:none}
  .nav-item span{display:none}
  .nav-item{justify-content:center}
  .brand b{display:none}
  .nav-compose .btn{padding:13px;border-radius:999px}
  .nav-compose .btn span{display:none}
  .nav-user span,.nav-user-t{display:none}
  .nav-user{justify-content:center}
}
/* الجوال: عرض ضيّق (طول) أو ارتفاع قصير (الهاتف بالعرض الأفقي landscape) → تخطيط عمود واحد + شريط سفلي.
   يعالج جذر مشكلة العرض الأفقي: قبلاً كان الهاتف الأفقي (عريض/قصير) يقع في نطاق «اللوحي» فيُقصّ شريطه. */
@media(max-width:680px),(max-height:560px){
  .app{grid-template-columns:minmax(0,1fr)}   /* minmax(0,…) يسمح للعمود بالانكماش دون عرض المحتوى — يمنع التجاوز الأفقي والقصّ */
  .app.lib-mode{grid-template-columns:minmax(0,1fr)}  /* الجوال: المكتبة بعرض كامل، عمود واحد */
  .app.lib-mode .right{display:none}
  .sidebar{display:none}
  .right{display:none}   /* أخفِ الرف الأيمن في التخطيط الجوّال (يشمل النافذة العريضة القصيرة) */
  .mobile-nav{display:flex;position:fixed;inset-block-end:0;inset-inline:0;background:var(--bg);border-top:1px solid var(--border);z-index:50;justify-content:space-around;padding:8px 0 calc(8px + env(safe-area-inset-bottom))}
  .mobile-nav .mn{display:grid;place-items:center;gap:2px;color:var(--muted);position:relative;padding:4px 8px;min-width:56px}
  .mobile-nav .mn svg{width:23px;height:23px}
  /* ⚠️ اسمٌ صغيرٌ تحت كلّ أيقونة (مراجعة 2026-09-22): «الكتاب» و«•••» وحدَهما يحتملان أكثر من معنى */
  .mobile-nav .mn-l{font-size:11px;line-height:1.1;font-weight:600;white-space:nowrap}
  .mobile-nav .mn.active{color:var(--brand)}
  .mobile-nav .mn .ncount{position:absolute;top:0;inset-inline-end:8px;background:var(--brand-fill);color:#fff;border-radius:999px;font-size:10px;min-width:16px;height:16px;display:grid;place-items:center}
  .main{border:none;padding-bottom:104px}   /* مساحة أسفل المحتوى ليعلو فوق الشريط وزرّ النشر */
  .fab{position:fixed;inset-block-end:92px;inset-inline-start:18px;width:56px;height:56px;border-radius:999px;background:var(--brand-fill);color:#fff;border:none;display:grid;place-items:center;box-shadow:0 8px 24px rgba(0,0,0,.3);z-index:50}
  .app.lib-mode ~ .fab, .app.no-fab ~ .fab{display:none}  /* لا زرّ نشر عائم فوق المكتبة أو صفحات الأدوات */
  .fab svg{width:26px;height:26px}
  .pactions{max-width:none}
}
@media(min-width:681px) and (min-height:561px){.fab{display:none}}

/* ══ ترويسة الردود + الردود المتداخلة ══ */
.reps-head{padding:10px 16px 4px;font-weight:700;font-size:14px;border-top:1px solid var(--border)}
.reply-item.nested{padding-inline-start:46px;background:color-mix(in srgb,var(--brand) 2.5%,transparent)}
.reply-item.nested::before{content:"";position:absolute;inset-inline-start:30px;top:0;bottom:0;width:2px;background:var(--border)}
.reply-item{position:relative}
.rreply{background:none;border:none;color:var(--muted);font-size:12.5px;font-weight:700;display:inline-flex;gap:4px;align-items:center;margin-top:6px;padding:3px 0;cursor:pointer}
.rreply:hover{color:var(--brand)}
.rreply svg{width:14px;height:14px}
.reply-target{display:flex;gap:6px;align-items:center;font-size:13px;margin-bottom:6px;background:var(--hover);border-radius:10px;padding:6px 10px}
.reply-target b{color:var(--brand)}
.rt-cancel{margin-inline-start:auto;background:none;border:none;color:var(--muted);cursor:pointer;display:grid;place-items:center}
.rt-cancel svg{width:15px;height:15px}

/* ══ روابط داخل النص (#وسوم @إشارات) ══ */
.ptext .ln,.dm-b .ln{color:var(--accent);font-weight:600;cursor:pointer}
.ptext .ln:hover,.dm-b .ln:hover{text-decoration:underline}

/* ══ الأدوات (المعدّل/المهام/الجدول) ══ */
.toolwrap{padding:16px}
.tool-hd{display:flex;gap:12px;align-items:center;margin-bottom:16px}
.tool-hd .feature-ic{width:48px;height:48px;margin:0;border-radius:14px;display:grid;place-items:center;color:#fff}
.gpa-result{min-height:30px;margin-bottom:14px}
.gpa-big{font-size:46px;font-weight:900;color:var(--brand);line-height:1}
.gpa-big span{font-size:18px;color:var(--muted);font-weight:600}
.gpa-sub{color:var(--muted);margin-top:4px}
.gpa-row{display:grid;grid-template-columns:1fr 90px 80px 40px;gap:8px;margin-bottom:8px;align-items:center}
.gpa-row input{padding:10px;border:1.5px solid var(--border);border-radius:10px;background:var(--bg);color:var(--text);font-family:inherit;width:100%}
.gpa-row input:focus{outline:none;border-color:var(--brand)}
.g-del{color:#e0245e}
.task-add{display:flex;gap:8px;margin-bottom:14px}
.task-add input{flex:1;min-width:0;padding:11px;border:1.5px solid var(--border);border-radius:12px;background:var(--bg);color:var(--text);font-family:inherit}
.task-add input:focus{outline:none;border-color:var(--brand)}
/* ⚠️ على الهاتف كان الصفُّ ‏463px في شاشة ‏390 (قِيس) فيُصغِّر المتصفّحُ الصفحةَ كلَّها. وحتّى
   مع الانكماش لا يبقى لعنوان المهمّة على ‏320 إلّا ‏57px ⇒ العنوانُ سطرٌ كامل، والتاريخُ والزرُّ تحته. */
@media(max-width:480px){.task-add{flex-wrap:wrap}.task-add #tTitle{flex-basis:100%}}
.task-row{display:flex;gap:12px;align-items:center;padding:12px 4px;border-bottom:1px solid var(--border)}
.task-check{width:26px;height:26px;border-radius:999px;border:2px solid var(--border);background:transparent;display:grid;place-items:center;flex:0 0 auto;color:var(--muted)}
.task-row.done .task-check{background:#17bf63;border-color:#17bf63;color:#fff}
.task-row.done .task-title{text-decoration:line-through;color:var(--muted)}
.task-main{flex:1;min-width:0}.task-title{font-weight:600}
.task-del{color:#e0245e}
.task-due{font-size:12px;display:flex;align-items:center;gap:4px;margin-top:2px;color:var(--muted)}
.task-due svg{width:13px;height:13px}
.task-due.overdue{color:#e0245e;font-weight:700}.task-due.today{color:#E8A33D;font-weight:700}.task-due.soon{color:var(--brand)}
.task-row.overdue{border-inline-start:3px solid #e0245e;padding-inline-start:8px}
.task-row.today{border-inline-start:3px solid #E8A33D;padding-inline-start:8px}
.task-done-wrap{margin-top:6px}
.task-done-wrap>summary{cursor:pointer;color:var(--muted);font-size:13px;font-weight:700;padding:10px 4px;list-style:none}
.task-done-wrap>summary::-webkit-details-marker{display:none}
.task-done-wrap>summary::before{content:'▸ ';font-size:11px}
.task-done-wrap[open]>summary::before{content:'▾ '}
.sched{display:flex;flex-direction:column;gap:10px}
.sched-day{border:1px solid var(--border);border-radius:14px;padding:12px}
.sched-day.today{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand) inset}
.sched-dname{font-weight:800;color:var(--brand);margin-bottom:8px;display:flex;align-items:center;gap:8px}
.sd-today{font-size:11px;font-weight:800;background:var(--brand-fill);color:#fff;border-radius:999px;padding:2px 8px}
.sched-items{display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.sched-it{display:flex;gap:8px;align-items:center;background:var(--hover);border-radius:10px;padding:7px 10px;font-size:14px}
.si-time{font-variant-numeric:tabular-nums;font-weight:700;color:var(--brand);font-size:12.5px;flex:none;min-width:42px}
.si-name{flex:1;min-width:0}
.sched-it .icon-btn{width:22px;height:22px}.sched-it svg{width:14px;height:14px}
.sched-next{display:flex;gap:10px;align-items:center;background:color-mix(in srgb,var(--brand) 10%,var(--bg-soft));border:1px solid var(--brand);border-radius:14px;padding:12px 14px;margin-bottom:12px}
.sched-next svg{width:22px;height:22px;color:var(--brand);flex:none}
.sched-add{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.sched-add .sa-name{flex:1;min-width:110px;padding:9px;border:1.5px dashed var(--border);border-radius:10px;background:transparent;color:var(--text);font-family:inherit}
.sched-add .sa-time{padding:7px;border:1.5px dashed var(--border);border-radius:10px;background:transparent;color:var(--text);font-family:inherit;font-size:12.5px;max-width:96px}
.sched-add input:focus{outline:none;border-color:var(--brand)}

/* ══ أداة الملاحظات ══ */
.notes-bar{display:flex;gap:8px;align-items:center;margin-bottom:14px}
.notes-search{flex:1;min-width:0;display:flex;align-items:center;gap:8px;background:var(--bg);border:1.5px solid var(--border);border-radius:12px;padding:0 12px}
.notes-search:focus-within{border-color:var(--brand)}
.notes-search svg{width:18px;height:18px;color:var(--muted);flex:none}
.notes-search input{flex:1;min-width:0;border:none;background:transparent;color:var(--text);padding:11px 0;font-family:inherit;font-size:15px;outline:none}
#noteNew{flex:none;white-space:nowrap}
.notes-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:12px;align-items:start}
.notes-empty-wrap{grid-column:1/-1}
.note-card{position:relative;display:flex;flex-direction:column;gap:8px;min-height:96px;background:var(--bg-soft);border:1px solid var(--border);border-radius:16px;padding:14px 14px 10px;cursor:pointer;transition:.15s;overflow:hidden}
.note-card:hover{box-shadow:0 6px 22px rgba(0,0,0,.1);transform:translateY(-2px)}
.note-card.pinned{border-color:var(--brand)}
.note-card.c-yellow{background:color-mix(in srgb,#ffd54f 24%,var(--panel));border-color:color-mix(in srgb,#ffd54f 38%,var(--border))}
.note-card.c-green{background:color-mix(in srgb,#66bb6a 22%,var(--panel));border-color:color-mix(in srgb,#66bb6a 36%,var(--border))}
.note-card.c-blue{background:color-mix(in srgb,#42a5f5 20%,var(--panel));border-color:color-mix(in srgb,#42a5f5 34%,var(--border))}
.note-card.c-pink{background:color-mix(in srgb,#ec407a 18%,var(--panel));border-color:color-mix(in srgb,#ec407a 32%,var(--border))}
.note-card.c-purple{background:color-mix(in srgb,#ab47bc 18%,var(--panel));border-color:color-mix(in srgb,#ab47bc 32%,var(--border))}
.note-card.c-orange{background:color-mix(in srgb,#ffa726 22%,var(--panel));border-color:color-mix(in srgb,#ffa726 36%,var(--border))}
.note-pin{position:absolute;top:6px;inset-inline-end:6px;background:transparent;border:none;color:var(--muted);width:30px;height:30px;border-radius:999px;display:grid;place-items:center;cursor:pointer;opacity:.55;transition:.15s}
.note-pin:hover{opacity:1;background:var(--hover)}
.note-pin.on{color:var(--brand);opacity:1}
.note-pin svg{width:17px;height:17px}
.note-title{margin:0;padding-inline-end:26px;font-size:15px;font-weight:900;line-height:1.4;word-break:break-word}
.note-prev{font-size:13.5px;line-height:1.65;color:var(--text);opacity:.9;max-height:168px;overflow:hidden;word-break:break-word;-webkit-mask-image:linear-gradient(180deg,#000 78%,transparent);mask-image:linear-gradient(180deg,#000 78%,transparent)}
.note-prev.empty-prev{opacity:.5;font-style:italic;-webkit-mask-image:none;mask-image:none}
.note-prev>*:first-child{margin-top:0}.note-prev>*:last-child{margin-bottom:0}
/* أنماط عناصر الماركداون — كانت لمعاينة البطاقة فقط؛ وُسِّعت لمعاينة المحرّر (.note-ed-prev)
   فكانت تسقط على افتراضات المتصفّح (عناوين أصغر من النصّ + قوائم متباعدة → «الترتيب يختل»). */
.note-prev h4,.note-prev h5,.note-prev h6,.note-ed-prev h4,.note-ed-prev h5,.note-ed-prev h6{margin:.4em 0 .25em;font-weight:800;line-height:1.4}
.note-prev h4,.note-prev h5,.note-prev h6{font-size:14px}
.note-ed-prev h4{font-size:21px}.note-ed-prev h5{font-size:18px}.note-ed-prev h6{font-size:15.5px}
.note-prev p,.note-ed-prev p{margin:.3em 0}
.note-prev ul,.note-prev ol,.note-ed-prev ul,.note-ed-prev ol{margin:.2em 0;padding-inline-start:20px}
.note-prev a,.note-ed-prev a{color:var(--accent)}
.note-prev code,.note-ed-prev code{background:var(--hover);padding:1px 5px;border-radius:6px;font-size:.92em}
.note-prev pre,.note-ed-prev pre{background:var(--hover);padding:8px 10px;border-radius:8px;overflow:auto;margin:.3em 0}
.note-prev pre code,.note-ed-prev pre code{background:none;padding:0}
.note-prev blockquote,.note-ed-prev blockquote{margin:.3em 0;padding-inline-start:10px;border-inline-start:3px solid var(--border);color:var(--muted)}
.md-task{display:flex;gap:7px;align-items:flex-start;margin:.2em 0}
.md-task .md-box{flex:none;width:16px;height:16px;border:1.6px solid var(--muted);border-radius:5px;display:grid;place-items:center;font-size:11px;line-height:1;margin-top:2px;color:#fff}
.md-task.done .md-box{background:#17bf63;border-color:#17bf63}
.note-prev .md-box,.note-ed-prev .md-box{cursor:pointer}
.note-prev .md-box:hover,.note-ed-prev .md-box:hover{border-color:var(--brand)}
.md-task.done>span:last-child{text-decoration:line-through;opacity:.6}
.note-tags{display:flex;flex-wrap:wrap;gap:5px}
.note-tag{background:var(--brand-soft);color:var(--brand);font-size:11px;font-weight:800;padding:2px 8px;border-radius:999px}
.note-foot{display:flex;align-items:center;gap:6px;margin-top:auto;padding-top:2px;font-size:12px;color:var(--muted)}
.note-time{display:inline-flex;align-items:center;gap:4px}.note-time svg{width:13px;height:13px}
.note-act{margin-inline-start:auto;display:flex;gap:0;opacity:0;transition:opacity .15s}
.note-card:hover .note-act{opacity:1}
.note-act .icon-btn{width:30px;height:30px}.note-act .icon-btn svg{width:16px;height:16px}
@media(hover:none){.note-act{opacity:1}}
/* محرّر الملاحظة */
.note-ed-bg{align-items:flex-start}
.note-ed{background:var(--panel);border-radius:18px;width:min(680px,100%);margin-top:24px;max-height:88vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 24px 64px rgba(0,0,0,.4)}
.note-ed-tb{display:flex;gap:3px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.fmt-btn{min-width:32px;height:32px;padding:0 8px;border:none;background:transparent;color:var(--text);border-radius:8px;font-size:14px;font-weight:800;cursor:pointer;display:grid;place-items:center}
.fmt-btn:hover{background:var(--hover)}
.fmt-btn.on{background:var(--brand-fill);color:#fff}
.fmt-btn svg{width:18px;height:18px}
.note-ed-title{border:none;background:transparent;color:var(--text);font-size:19px;font-weight:900;padding:14px 18px 4px;width:100%;outline:none;font-family:inherit}
.note-ed-body{border:none;background:transparent;color:var(--text);font-size:15px;line-height:1.75;padding:6px 18px 12px;width:100%;min-height:42vh;max-height:52vh;resize:none;outline:none;font-family:inherit;overflow:auto}
.note-ed-prev{padding:6px 18px 12px;min-height:42vh;max-height:52vh;overflow:auto;font-size:15px;line-height:1.75}
.note-ed-prev>*:first-child{margin-top:0}
.note-ed-tags{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:6px 18px;border-top:1px solid var(--border)}
.ed-tag{display:inline-flex;align-items:center;gap:4px;background:var(--brand-soft);color:var(--brand);font-size:12px;font-weight:800;padding:3px 4px 3px 10px;border-radius:999px}
.ed-tag button{border:none;background:transparent;color:inherit;cursor:pointer;font-size:15px;line-height:1;width:18px;height:18px;border-radius:999px}
.ed-tag button:hover{background:rgba(0,0,0,.14)}
.note-ed-tags input{flex:1;min-width:120px;border:none;background:transparent;color:var(--text);font-family:inherit;font-size:13px;outline:none;padding:4px 0}
.note-ed-foot{display:flex;align-items:center;gap:4px;padding:8px 12px;border-top:1px solid var(--border);flex-wrap:wrap}
.nsw-row{display:flex;gap:6px;align-items:center}
.nsw{width:22px;height:22px;border-radius:999px;border:2px solid var(--border);cursor:pointer;padding:0}
.nsw.on{box-shadow:0 0 0 2px var(--panel),0 0 0 4px var(--brand)}
.nsw.c-none{background:var(--bg-soft)}
.nsw.c-yellow{background:#ffd54f}.nsw.c-green{background:#66bb6a}.nsw.c-blue{background:#42a5f5}.nsw.c-pink{background:#ec407a}.nsw.c-purple{background:#ab47bc}.nsw.c-orange{background:#ffa726}
.note-count{font-size:12px;white-space:nowrap}
.note-del-btn:hover{color:var(--like,#e0245e)}
.note-ed-foot .icon-btn.on{color:var(--brand)}
@media(max-width:560px){.note-ed{margin-top:0;max-height:100vh;height:100dvh;border-radius:0;width:100%}.note-ed-body,.note-ed-prev{max-height:none;flex:1}.notes-grid{grid-template-columns:1fr 1fr}}

/* ══ ورقة «المزيد» للتنقّل على الجوال ══ */
.more-sheet{background:var(--panel);border-radius:18px;padding:16px;width:min(92vw,420px);max-height:80vh;overflow-y:auto}
.more-head{font-weight:800;font-size:18px;margin-bottom:12px;color:var(--text)}
.more-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.more-item{display:flex;align-items:center;gap:12px;padding:14px 12px;border-radius:14px;border:1px solid var(--border);background:var(--bg-soft);color:var(--text);font-weight:700;min-height:52px;cursor:pointer}
.more-item svg{width:24px;height:24px;color:var(--brand);flex-shrink:0}
.more-item.active{border-color:var(--brand);background:color-mix(in srgb,var(--brand) 12%,transparent)}
.more-item:active{transform:scale(.97)}

/* ══ أدوات جديدة (بومودورو / مخطّط / محاضرات / بطاقات) ══ */
.tool-in{width:100%;padding:11px 12px;margin-bottom:10px;border:1.5px solid var(--border);border-radius:12px;background:var(--bg);color:var(--text);font-family:inherit;font-size:15px;box-sizing:border-box}
.tool-in:focus{outline:none;border-color:var(--brand)}
textarea.tool-in{resize:vertical;line-height:1.7}
.tool-lbl{display:block;font-size:13px;font-weight:700;color:var(--muted);margin:0 2px 5px}
.tool-hint{display:flex;align-items:center;gap:7px;font-size:13px;line-height:1.5;background:var(--bg-soft);border:1px dashed var(--border);border-radius:12px;padding:9px 12px;margin-bottom:12px;cursor:pointer}
.tool-hint svg{width:16px;height:16px;color:var(--brand);flex:none}
.tool-hint:hover{border-color:var(--brand)}
/* بومودورو */
.pomo-presets{display:flex;gap:8px;justify-content:center;margin-bottom:12px;flex-wrap:wrap}
.pchip{padding:7px 14px;border:1.5px solid var(--border);border-radius:999px;background:var(--bg);color:var(--text);font-weight:700;font-size:14px;cursor:pointer;font-family:inherit}
.pchip.on{background:var(--brand-fill);color:#fff;border-color:var(--brand-fill)}
.pomo-sess{font-size:13px;font-weight:700;margin-bottom:12px;min-height:16px}
.pomo{text-align:center;background:var(--bg-soft);border:1px solid var(--border);border-radius:18px;padding:22px;margin-bottom:14px}
.pomo-time{font-size:64px;font-weight:800;letter-spacing:2px;color:var(--brand);font-variant-numeric:tabular-nums}
.pomo-mode{color:var(--muted);font-weight:700;margin-bottom:14px}
.pomo-btns{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.pomo-stats{display:flex;gap:10px;margin-bottom:14px}
.pstat{flex:1;background:var(--bg-soft);border:1px solid var(--border);border-radius:14px;padding:12px;text-align:center}
.pstat-n{font-size:22px;font-weight:800;color:var(--text)}
.pstat-l{font-size:12px;color:var(--muted);margin-top:2px}
.pomo-week{display:flex;gap:6px;align-items:flex-end;justify-content:space-between;height:80px;padding:8px;background:var(--bg-soft);border:1px solid var(--border);border-radius:14px}
.pw-col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;justify-content:flex-end}
.pw-bar{width:60%;min-height:4px;background:var(--brand);border-radius:4px 4px 0 0;transition:height .3s}
.pw-d{font-size:11px;color:var(--muted)}
.btn.rec{background:var(--like)}
/* مخرجات الذكاء الاصطناعي */
.ai-out{margin-top:12px}
.ai-card{background:var(--bg-soft);border:1px solid var(--border);border-radius:14px;padding:14px}
.ai-body{line-height:1.9;white-space:pre-wrap;word-break:break-word}

/* ══ الجواز الأكاديمي ══ */
.passport-card{background:linear-gradient(135deg,#3B5BA5,#2E4576);color:#fff;border-radius:18px;padding:16px;margin-bottom:14px;box-shadow:0 8px 24px rgba(59,91,165,.28)}
.pp-top{display:flex;gap:12px;align-items:center}
.pp-who{flex:1;min-width:0}.pp-who b{font-size:17px}
.pp-handle{font-size:13px;opacity:.8}
.pp-meta{font-size:12.5px;opacity:.85;margin-top:2px;word-break:break-word}
.pp-badge svg{width:26px;height:26px;color:#FFD27A}
.pp-code{display:flex;justify-content:space-between;align-items:center;margin-top:14px;padding-top:12px;border-top:1px solid rgba(255,255,255,.2);font-size:13px}
.pp-code b{font-family:ui-monospace,monospace;font-size:16px;letter-spacing:1px}
.pp-ready{background:var(--bg-soft);border:1px solid var(--border);border-radius:16px;padding:14px;margin-bottom:14px}
.pp-ready-top{display:flex;justify-content:space-between;align-items:center;gap:8px}
.pp-pct{font-weight:900;font-size:18px;color:var(--brand)}
.pp-bar{height:10px;border-radius:999px;background:var(--hover);overflow:hidden;margin-top:8px}
.pp-bar-fill{height:100%;background:linear-gradient(90deg,#17bf63,#3B5BA5);border-radius:999px;transition:width .4s}
.pp-src{font-size:12.5px;color:var(--muted);margin-top:8px;display:flex;align-items:center;gap:6px;line-height:1.5}
.pp-src.ai{color:var(--brand);font-weight:700}
.pp-src svg{width:15px;height:15px;flex:none}
.pp-ledger-h{margin-bottom:8px;font-size:15px}
.pp-add{display:flex;gap:8px;margin-bottom:10px}
.pp-add input{flex:1;padding:10px 12px;border:1.5px solid var(--border);border-radius:10px;background:var(--bg);color:var(--text);font-family:inherit}
.pp-add input:focus{outline:none;border-color:var(--brand)}
.pp-comp{display:flex;align-items:center;gap:10px;padding:9px 4px;border-bottom:1px solid var(--border)}
.pp-check{width:30px;height:30px;flex:none;border-radius:999px;border:1.5px solid var(--border);background:transparent;color:var(--muted);display:grid;place-items:center;cursor:pointer}
.pp-comp.on .pp-check{background:#17bf63;border-color:#17bf63;color:#fff}
.pp-check svg{width:16px;height:16px}
.pp-name{flex:1;font-weight:600}.pp-comp.on .pp-name{color:var(--muted)}
.pp-tag{font-size:11px;font-weight:800;color:var(--brand);background:var(--brand-soft);padding:1px 7px;border-radius:999px}
.pp-del{width:30px;height:30px}.pp-del svg{width:16px;height:16px}

/* ══ جسر الانتقال الذكي ══ */
.br-gap{font-size:13.5px;margin:10px 2px 12px;line-height:1.7}
.br-out{margin-top:14px}
.br-plan-hd{font-size:13px;margin-bottom:8px}
.br-plan{display:flex;flex-direction:column;gap:8px}
.br-sess{display:flex;gap:12px;align-items:center;background:var(--bg-soft);border:1px solid var(--border);border-radius:12px;padding:10px 12px;border-inline-start:4px solid var(--border)}
.br-sess.first{border-inline-start-color:#1d9bf0}
.br-sess.consolidate{border-inline-start-color:#9C6B2E}
.br-sess.final{border-inline-start-color:#C0392B;background:color-mix(in srgb,#C0392B 8%,var(--bg-soft))}
.br-day{flex:none;text-align:center;min-width:52px}.br-day b{display:block;font-size:15px}.br-day span{font-size:11px}
.br-comp{flex:1;min-width:0}.br-comp b{display:block;word-break:break-word}
.br-type{font-size:12px;font-weight:700;color:var(--muted)}
.br-type.final{color:#C0392B;font-weight:800}
/* الجسر الذكي 2.0 — نموذج جمع المعلومات */
.br-card{background:var(--bg-soft);border:1px solid var(--border);border-radius:14px;padding:12px 14px;margin-bottom:12px}
.br-sec-t{display:flex;align-items:center;gap:7px;font-weight:800;font-size:14.5px;margin-bottom:10px;color:var(--text)}
.br-sec-t svg{width:18px;height:18px;color:var(--brand)}
.br-subjects{display:flex;flex-direction:column;gap:8px;margin-bottom:10px}
.br-subj{display:flex;gap:10px;align-items:center;background:var(--bg);border:1px solid var(--border);border-radius:11px;padding:8px 10px}
.br-subj-name{flex:1;min-width:0;font-weight:700;display:flex;align-items:center;gap:6px;word-break:break-word}
.br-subj-name svg{width:16px;height:16px;flex:none;color:var(--brand)}
.br-subj-date{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--muted)}
.br-subj-date input{padding:5px 7px;border:1.5px solid var(--border);border-radius:9px;background:var(--bg);color:var(--text);font-family:inherit;font-size:12.5px}
.br-subj-del{flex:none}
.br-subadd{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.br-subadd #brSubName{flex:1;min-width:140px;padding:10px 11px;border:1.5px solid var(--border);border-radius:11px;background:var(--bg);color:var(--text);font-family:inherit;font-size:14.5px}
.br-subadd #brSubDate{padding:9px 10px;border:1.5px solid var(--border);border-radius:11px;background:var(--bg);color:var(--text);font-family:inherit;font-size:13px}
.br-subadd #brSubName:focus,.br-subj-date input:focus,.br-subadd #brSubDate:focus{outline:none;border-color:var(--brand)}
.lec-ctrl{display:flex;gap:10px;flex-wrap:wrap}
.lec-ctrl .btn{cursor:pointer}
/* بطاقات قابلة للقلب */
.cards-wrap{margin-top:10px}
.flip-card{perspective:1000px;height:120px;margin-bottom:10px;cursor:pointer}
.fc-inner{position:relative;width:100%;height:100%;transition:transform .5s;transform-style:preserve-3d}
.flip-card.flipped .fc-inner{transform:rotateY(180deg)}
.fc-face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;display:flex;align-items:center;justify-content:center;text-align:center;padding:16px;border-radius:14px;border:1px solid var(--border);font-weight:600;line-height:1.6;overflow:auto}
.fc-front{background:var(--panel);color:var(--text)}
.fc-back{background:var(--brand-fill);color:#fff;transform:rotateY(180deg)}
.flip-card{position:relative}
.srs-box{position:absolute;bottom:4px;inset-inline-end:8px;font-size:9px;letter-spacing:1px;color:var(--brand);opacity:.7;pointer-events:none}
/* مراجعة متباعدة (لايتنر) */
.srs-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;background:var(--bg-soft);border:1px solid var(--border);border-radius:14px;padding:12px 14px;margin-bottom:6px}
.srs-bar.done{color:var(--muted);font-size:14px;justify-content:flex-start;gap:8px}
.srs-bar.done svg{width:18px;height:18px;color:#17bf63;flex:none}
.srs-review{display:flex;flex-direction:column;gap:10px;margin-top:8px}
.srs-prog{font-size:13px;text-align:center}
.srs-rcard{min-height:140px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;text-align:center;background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:22px 18px}
.srs-q{font-weight:800;font-size:17px;line-height:1.6}
.srs-a{font-size:16px;line-height:1.7;color:var(--brand);border-top:1px dashed var(--border);padding-top:14px;width:100%}
.srs-grade{display:flex;gap:10px}
.srs-grade .btn{flex:1}

/* ══ الرسائل المباشرة ══ */
.conv{cursor:pointer}
.dm-wrap{display:flex;flex-direction:column;gap:10px;padding:18px 16px;min-height:calc(100vh - 170px)}
.dm{display:flex;flex-direction:column;align-items:flex-start;max-width:78%}
.dm.mine{align-self:flex-end;align-items:flex-end}
.dm-b{background:var(--hover);padding:10px 14px;border-radius:18px;border-end-start-radius:4px;line-height:1.5;word-break:break-word}
.dm.mine .dm-b{background:var(--brand-fill);color:#fff;border-radius:18px;border-end-end-radius:4px}
.dm-t{font-size:11px;color:var(--muted);margin-top:3px}
.dm-compose{position:sticky;inset-block-end:0;display:flex;gap:8px;padding:12px 16px;background:var(--bg);border-top:1px solid var(--border)}
.dm-compose input{flex:1;padding:12px 16px;border:1.5px solid var(--border);border-radius:999px;background:var(--bg-soft);color:var(--text);font-family:inherit}
.dm-compose input:focus{outline:none;border-color:var(--brand)}
.dm-compose .btn{padding:10px 16px}

/* ══ الإعدادات ══ */
.settings{padding:10px 0}
.set-group{padding:8px 0;border-bottom:8px solid var(--bg-soft)}
.set-group h3{font-size:14px;color:var(--muted);font-weight:700;padding:8px 16px 4px;margin:0}
.set-row{display:flex;gap:12px;align-items:center;padding:12px 16px;cursor:pointer;transition:background .15s}
.set-row[data-act]:hover{background:var(--hover)}
.set-row .feature-ic{margin:0;border-radius:12px;display:grid;place-items:center;color:#fff}
.set-row .switch{width:34px;height:34px;border-radius:999px;display:grid;place-items:center;background:var(--hover);color:var(--muted)}
.set-row .switch.on{background:var(--brand-fill);color:#fff}
/* ⚠️ زرُّ الخروج `.btn.block` عرضُه `100%`، و`.settings` بلا حشوٍ أفقيّ
   (`padding:10px 0`) ⇒ ‏100% + هامشَي 16 = **عرضُ الشاشة + 32**. فتطفح صفحةُ
   الإعدادات وحدَها أفقيّاً على الهاتف (قِيس: 422 مقابل 390، و392 مقابل 360)،
   **وينزاح التطبيقُ كلُّه** — الشريطُ العلويّ والمحتوى معاً. والحسابُ صريح،
   فالعلاجُ طرحُ الهامشين من العرض لا إلغاؤهما. */
.settings>.btn{margin:16px;width:calc(100% - 32px)}

/* ══ الملف الشخصي: غلاف/وسائط ══ */
.profile-av{margin-top:-44px}
.icon-btn.rounded{border:1.5px solid var(--border);border-radius:999px}
.media-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:3px}
.media-cell{aspect-ratio:1;overflow:hidden;cursor:pointer;background:var(--hover)}
.media-cell img{width:100%;height:100%;object-fit:cover;transition:transform .2s}
.media-cell:hover img{transform:scale(1.05)}

/* ══ حركات دقيقة ══ */
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.post,.feature-card,.card,.set-row,.gpa-row,.task-row{animation:fadeUp .25s ease both}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
.pact,.icon-btn,.btn{transition:background .15s,color .15s,transform .1s}
.pact:active,.btn:active{transform:scale(.94)}
.skeleton{background:linear-gradient(90deg,var(--hover) 25%,var(--bg-soft) 50%,var(--hover) 75%);background-size:200% 100%;animation:sk 1.2s infinite;border-radius:8px}
@keyframes sk{from{background-position:200% 0}to{background-position:-200% 0}}

/* ══ لافتة إكمال الملف ══ */
.onboard{display:flex;gap:12px;align-items:center;margin:12px 16px;padding:14px;border-radius:16px;background:color-mix(in srgb,var(--brand) 8%,var(--bg));border:1px solid color-mix(in srgb,var(--brand) 22%,transparent)}
.onboard-ic{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:var(--brand-fill);color:#fff;flex:0 0 auto}
.onboard-ic svg{width:22px;height:22px}

@keyframes spin{to{transform:rotate(360deg)}}

/* ══ رفع صورة الملف والغلاف ══ */
.ep-cover{position:relative;height:130px;border-radius:14px;margin-bottom:50px;background-size:cover;background-position:center}
.ep-cover-btn{position:absolute;top:8px;inset-inline-end:8px;background:rgba(0,0,0,.5);color:#fff}
.ep-cover-btn:hover{background:rgba(0,0,0,.7)}
.ep-avatar{position:absolute;inset-block-end:-40px;inset-inline-start:16px}
.ep-avatar .av{border:4px solid var(--bg)}
.ep-avatar-btn{position:absolute;inset-block-end:0;inset-inline-end:-4px;background:var(--brand-fill);color:#fff;width:30px;height:30px}
.ep-avatar-btn svg{width:16px;height:16px}

/* ══ الإكمال التلقائي للإشارة @ ══ */
.mention-pop{border:1px solid var(--border);border-radius:12px;background:var(--bg);box-shadow:0 8px 24px rgba(0,0,0,.18);overflow:hidden;margin-top:4px;max-height:240px;overflow-y:auto}
.mention-item{display:flex;gap:10px;align-items:center;padding:8px 12px;cursor:pointer}
.mention-item:hover{background:var(--hover)}

/* ══ محدّد نادي النشر ══ */
.ccompose-club{display:flex;gap:8px;align-items:center;font-size:14px;color:var(--muted);margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--border)}
.ccompose-club svg{width:18px;height:18px;color:var(--brand)}
.ccompose-club select{border:1.5px solid var(--border);border-radius:999px;padding:5px 12px;background:var(--bg);font-family:inherit;font-weight:800;color:var(--brand);cursor:pointer}

/* ══ مجلّدات المحفوظات ══ */
.bm-folders{display:flex;gap:8px;flex-wrap:wrap;padding:12px 16px;border-bottom:1px solid var(--border);overflow-x:auto}
.bm-folder{display:inline-flex;gap:5px;align-items:center;border:1.5px solid var(--border);background:var(--bg);color:var(--text);border-radius:999px;padding:6px 13px;font-size:13.5px;font-weight:700;cursor:pointer;white-space:nowrap;transition:.15s}
.bm-folder svg{width:15px;height:15px}
.bm-folder:hover{border-color:var(--brand)}
.bm-folder.on{background:var(--brand-fill);color:#fff;border-color:var(--brand-fill)}
.bm-folder.new{color:var(--brand);border-style:dashed}

/* ══ المنشور المثبَّت ══ */
.pin-label{display:flex;gap:6px;align-items:center;padding:8px 16px 0;font-size:12.5px;font-weight:700;color:var(--muted)}
.pin-label svg{width:14px;height:14px}

/* ══ عدّاد المشاهدات (impressions) ══ */
.pact.pviews{cursor:default;color:var(--muted);gap:4px}
.pact.pviews:hover{background:transparent;color:var(--muted)}

/* ══ مقترَح لك (pushservice) + مواضيع (TSPS) ══ */
.rec-head{display:flex;gap:7px;align-items:center;padding:12px 16px 4px;font-weight:800;color:var(--brand)}
.rec-head svg{width:18px;height:18px}
.topic-row{display:flex;gap:10px;align-items:center;padding:10px 14px;border-bottom:1px solid var(--border)}
.topic-ic{width:40px;height:40px;border-radius:12px;background:color-mix(in srgb,var(--brand) 14%,transparent);color:var(--brand);display:grid;place-items:center;flex:0 0 auto}
.topic-row .chip.dept{background:color-mix(in srgb,#2E7D6B 16%,transparent);color:#2E7D6B;font-size:11px;padding:1px 7px}

/* ══ المنشور المقتبَس (Quote) ══ */
.quoted-post{border:1px solid var(--border);border-radius:14px;padding:10px 12px;margin-top:10px;cursor:pointer;transition:background .15s}
.quoted-post:hover{background:var(--hover)}
.quoted-post.unavailable{color:var(--muted);font-size:13px;display:flex;gap:6px;align-items:center;cursor:default}
.quoted-head{display:flex;gap:6px;align-items:center;font-size:13.5px;flex-wrap:wrap}
.quoted-head .av{width:22px;height:22px;font-size:9px}
.quoted-head b{font-weight:800}
.quoted-head .phandle,.quoted-head .ptime{color:var(--muted);font-weight:400}
.quoted-text{font-size:14.5px;margin-top:4px;line-height:1.5;word-break:break-word}
.quoted-img{width:100%;max-height:240px;object-fit:cover;border-radius:10px;margin-top:8px}

/* ══ المنشور المجهول ══ */
.anon-av{background:linear-gradient(135deg,#6b7280,#4b5563)!important;color:#fff;display:grid;place-items:center}
.anon-av svg{width:55%;height:55%}
.anon-note{font-size:13px;color:var(--brand);background:color-mix(in srgb,var(--brand) 8%,transparent);border-radius:10px;padding:8px 12px;margin-top:8px;display:flex;gap:6px;align-items:center}
.anon-note svg{width:16px;height:16px}
.ctools .icon-btn.on{background:var(--brand-fill);color:#fff}

/* ══ أدوات المُنشئ ومعاينة الصورة ══ */
.ctools{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:10px 0;border-top:1px solid var(--border);padding-top:10px}
.ctools .icon-btn{color:var(--brand)}
.ctools label.icon-btn{position:relative;display:grid;place-items:center}
.cimg-preview{position:relative;margin:10px 0;border-radius:16px;overflow:hidden;border:1px solid var(--border)}
.cimg-preview img{width:100%;max-height:340px;object-fit:cover;display:block}
.cimg-rm{position:absolute;top:8px;inset-inline-end:8px;background:rgba(0,0,0,.6);color:#fff;border-radius:999px}
.cimg-rm:hover{background:rgba(0,0,0,.8)}

/* ══ لوحة المكتبة المرافِقة ══ */
.lib-intro{text-align:center;padding-top:16px}
.lib-intro-ic{width:54px;height:54px;margin:0 auto;border-radius:16px;background:linear-gradient(135deg,#8B5E3C,#5B3A29);display:grid;place-items:center}
.lib-intro-ic svg{width:28px;height:28px;color:#fff}

/* ══ ودجات الرف الأيمن السياقي ══ */
.right .card h3 svg{width:17px;height:17px;vertical-align:-3px;color:var(--brand)}
.rank-pts{font-size:30px;font-weight:900;color:var(--brand);line-height:1.1}
.rank-pts span{font-size:14px;color:var(--muted);font-weight:600}
.rank-card:hover{background:var(--hover)}
ul.tips{margin:0;padding:6px 24px 14px;color:var(--muted);font-size:13.5px;line-height:1.7}
ul.tips li{margin-bottom:4px}

/* ══ اختصارات لوحة المفاتيح ══ */
.kbd-list{display:flex;flex-direction:column;gap:2px}
.kbd-row{display:flex;justify-content:space-between;align-items:center;padding:10px 4px;border-bottom:1px solid var(--border)}
kbd{background:var(--hover);border:1px solid var(--border);border-bottom-width:2px;border-radius:7px;padding:3px 9px;font-size:13px;font-weight:700;font-family:inherit;color:var(--text)}

/* ══ لوحة الصدارة + الأوسمة (تلعيب) ══ */
.lb-hd{display:flex;gap:12px;align-items:center;padding:16px}
.lb-hd .feature-ic{width:48px;height:48px;margin:0;border-radius:14px;display:grid;place-items:center;color:#fff}
.lb-list{padding:0 10px 16px}
.lb-row{display:flex;gap:12px;align-items:center;padding:12px 8px;border-bottom:1px solid var(--border);cursor:pointer;border-radius:12px;transition:background .15s}
.lb-row:hover{background:var(--hover)}
.lb-row.me{background:color-mix(in srgb,var(--brand) 8%,transparent)}
.lb-rank{width:34px;text-align:center;font-size:22px;flex:0 0 auto}
.lb-rank .lb-num{font-size:16px;font-weight:800;color:var(--muted)}
.lb-stats{display:flex;gap:10px;align-items:center;font-size:12px;margin-top:3px}
.lb-stats svg{width:13px;height:13px;vertical-align:-2px}
.lb-pts{text-align:center;flex:0 0 auto}
.lb-pts b{display:block;font-size:20px;font-weight:900;color:var(--brand);line-height:1}
.lb-pts span{font-size:11px;color:var(--muted)}
.badges-row{display:flex;flex-wrap:wrap;gap:7px;margin-top:10px}
.ubadge{display:inline-flex;gap:5px;align-items:center;font-size:12.5px;font-weight:700;padding:4px 10px;border-radius:999px;background:color-mix(in srgb,var(--brand) 12%,transparent);color:var(--brand)}
.ubadge svg{width:14px;height:14px}

/* ══ وسائط المنشور (صورة/فيديو/ملف) ══ */
.pvid{width:100%;max-height:460px;border-radius:16px;margin-top:10px;background:#000;border:1px solid var(--border)}
.pfile{display:flex;gap:12px;align-items:center;margin-top:10px;padding:12px 14px;border:1px solid var(--border);border-radius:16px;background:var(--bg-soft);color:var(--text);text-decoration:none;transition:.15s}
.pfile:hover{background:var(--hover);border-color:var(--brand)}
.pfile svg{width:26px;height:26px;color:var(--brand);flex:0 0 auto}
.pfile svg:last-child{width:18px;height:18px;color:var(--muted)}
/* معاينة الوسائط في المُنشئ */
.cmedia{position:relative;margin:10px 0}
.cmedia img,.cmedia video{width:100%;max-height:340px;object-fit:cover;border-radius:16px;border:1px solid var(--border);display:block}
.cmedia video{background:#000;object-fit:contain}
.cmedia .filecard{display:flex;gap:12px;align-items:center;padding:14px;border:1px solid var(--border);border-radius:16px;background:var(--bg-soft)}
.cmedia .filecard svg{width:30px;height:30px;color:var(--brand)}

/* ══ شبكة وسائط متعددة (المنشور) ══ */
.pmedia-grid{display:grid;grid-template-columns:1fr 1fr;gap:3px;margin-top:10px;border-radius:16px;overflow:hidden}
.pmedia-grid img.pimg.grid{margin-top:0;border-radius:0;width:100%;height:100%;aspect-ratio:1;object-fit:cover}
.pmedia-grid.n1{grid-template-columns:1fr}
.pmedia-grid.n3 img:first-child{grid-row:span 2;aspect-ratio:auto;height:100%}
/* شبكة المُنشئ */
.cmedia-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.cmedia-cell{position:relative;border-radius:12px;overflow:hidden;border:1px solid var(--border)}
.cmedia-cell img,.cmedia-cell video{width:100%;height:150px;object-fit:cover;display:block;background:#000}
.cmedia-cell .filecard{height:150px;display:flex;flex-direction:column;gap:6px;align-items:center;justify-content:center;text-align:center;padding:10px;background:var(--bg-soft)}
.cmedia-cell .filecard svg{width:30px;height:30px;color:var(--brand)}
.cmedia-cell .cimg-rm{position:absolute;top:5px;inset-inline-end:5px;background:rgba(0,0,0,.6);color:#fff;border-radius:999px;width:28px;height:28px}

/* ══ مُكبّر الصور ══ */
.pimg{cursor:zoom-in}
.lightbox{position:fixed;inset:0;z-index:300;background:rgba(0,0,0,.92);display:grid;place-items:center;padding:20px;animation:fadeUp .2s ease}
.lightbox img{max-width:96vw;max-height:92vh;border-radius:12px;object-fit:contain}
.lightbox .lb-close{position:fixed;top:16px;inset-inline-end:16px;background:rgba(255,255,255,.15);color:#fff}

/* عارض المستندات داخل التطبيق (PDF/Office/نص) */
.docview-bg{align-items:stretch;padding:0}
.docview{display:flex;flex-direction:column;background:var(--panel);width:min(960px,100%);height:min(92vh,100%);margin:auto;border-radius:16px;overflow:hidden;box-shadow:0 24px 64px rgba(0,0,0,.45)}
.docview-bar{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border);flex:0 0 auto}
.docview-name{font-size:15px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:70%}
.docview-body{flex:1;min-height:0;position:relative;background:var(--bg-soft)}
.docview-frame{width:100%;height:100%;border:none;background:#fff}
.docview-load{position:absolute;inset:0;display:flex;flex-direction:column;gap:12px;align-items:center;justify-content:center;text-align:center;padding:24px}
.docview-text{margin:0;width:100%;height:100%;overflow:auto;padding:16px;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,monospace;font-size:13.5px;line-height:1.6;color:var(--text);background:var(--bg)}
@media(max-width:560px){.docview{height:100dvh;width:100%;border-radius:0}}

/* تركيز مرئي لإتاحة الوصول */
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,[data-nav]:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}

/* ── تحليلات المنشور ── */
.an-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:6px}
.an-stat{display:flex;gap:10px;align-items:center;padding:12px;border:1px solid var(--border);border-radius:14px;background:var(--card)}
.an-ic{width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:var(--brand-soft,rgba(111,78,55,.12));color:var(--brand)}
.an-ic svg{width:18px;height:18px}
.an-num{font-weight:800;font-size:18px;line-height:1}
.an-sec{margin-top:16px}
.an-h{font-weight:800;font-size:14px;margin-bottom:10px}
.an-bar-row{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-size:13px}
.an-bar-label{flex:0 0 38%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--muted)}
.an-bar{flex:1;height:8px;border-radius:6px;background:var(--border);overflow:hidden}
.an-bar-fill{height:100%;border-radius:6px;background:linear-gradient(90deg,var(--brand),#8D6E63)}
.an-bar-n{flex:0 0 auto;font-weight:700;min-width:22px;text-align:end}
.an-engagers{display:flex;flex-wrap:wrap;gap:8px}
.an-eng{cursor:pointer;transition:transform .12s}
.an-eng:hover{transform:translateY(-2px)}

/* ── الفعاليات الدراسية ── */
.event-box{display:flex;align-items:center;gap:12px;margin-top:10px;padding:12px;border:1px solid var(--border);border-radius:16px;background:linear-gradient(135deg,var(--brand-soft,rgba(111,78,55,.08)),transparent)}
.event-box.past{opacity:.7}
.ev-cal{flex:0 0 auto;width:52px;height:52px;border-radius:12px;background:var(--brand-fill);color:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}
.ev-day{font-size:21px;font-weight:800}
.ev-mon{font-size:11px;margin-top:2px}
.ev-info{flex:1;min-width:0}
.ev-when{font-weight:700;font-size:13.5px;display:flex;align-items:center;gap:5px}
.ev-loc{font-size:12.5px;color:var(--muted);display:flex;align-items:center;gap:5px;margin-top:2px}
.ev-when svg,.ev-loc svg{width:14px;height:14px;flex:0 0 auto}
.ev-count{font-size:12px;margin-top:3px}
.ev-rsvp{flex:0 0 auto;white-space:nowrap}
#cEventFields .field{display:flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:10px;padding:6px 10px}
#cEventFields .field svg{width:16px;height:16px;color:var(--muted);flex:0 0 auto}
#cEventFields input{border:none;outline:none;background:transparent;color:var(--text);font-family:inherit;font-size:14px}

/* «تخصيص حسب اهتمامك» — سطر واحد نظيف تحت البحث (بديل بطاقة الأوزان السابقة) */
.rail-line{display:flex;align-items:center;gap:9px;padding:11px 14px;margin:10px 0;background:var(--card,#fff);border:1px solid var(--border);border-radius:12px;color:var(--text);font-size:14px;font-weight:600;cursor:pointer;text-decoration:none;transition:background .15s,border-color .15s}
.rail-line:hover{background:var(--bg-soft);border-color:var(--brand)}
.rail-line svg{width:18px;height:18px;color:var(--brand);flex:0 0 auto}
.rail-line span{flex:1}
.adapt-card h3{display:flex;align-items:center;gap:6px}
.adapt-row{display:flex;align-items:center;gap:8px;margin:7px 0;font-size:12.5px}
.adapt-lbl{flex:0 0 62px;color:var(--text)}
.adapt-bar{flex:1;height:7px;background:var(--bg-soft);border-radius:6px;overflow:hidden}
.adapt-bar>i{display:block;height:100%;background:linear-gradient(90deg,var(--brand),var(--brand-soft,#c9a06a));border-radius:6px;transition:width .55s cubic-bezier(.4,0,.2,1)}
.adapt-pct{flex:0 0 34px;text-align:end;color:var(--muted);font-variant-numeric:tabular-nums}
.adapt-more{display:inline-block;margin-top:8px;color:var(--brand);font-size:12px;cursor:pointer;font-weight:700}
.adapt-more:hover{text-decoration:underline}
/* ملاحظة: الخلفيّة المعتمة تأتي من .modal — لذا يجب أن تحمل اللوحة الصنفين معاً
   (class="modal feedhelp"). بدون .modal تُرسَم اللوحة شفّافة فوق الخلاصة،
   وهو عيب كان قائماً في openFeedHelp حتى 2026-07-28. نضع خلفيّة احتياطيّة هنا
   كي لا يتكرّر الخطأ لو نُسي الصنف مستقبلاً. */
.feedhelp{max-width:440px;padding:20px;background:var(--bg);border-radius:18px}
.feedhelp .fh-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.feedhelp .fh-head h3{margin:0}
.feedhelp .fh-head svg{width:22px;height:22px;color:var(--brand)}
.fh-sig{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;margin:12px 0}
.fh-row{display:flex;flex-direction:column;font-size:12.5px}
.fh-row b{color:var(--text)}
.fh-ctrl{display:flex;align-items:center;gap:12px;margin:14px 0 10px;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--bg-soft)}
.fh-ctrl-t{display:flex;flex-direction:column;gap:3px;flex:1;font-size:12.5px;line-height:1.5}
.fh-ctrl #fhToggle{white-space:nowrap;flex-shrink:0}
.fh-ctrl #fhToggle.on{background:var(--brand-fill);color:#fff;border-color:var(--brand-fill)}

/* ════════ مركز المساعدة والدعم (Help & Support Center) ════════ */
.support-wrap{max-width:760px;margin:0 auto;padding:8px 16px 40px}
.sup-hero{padding:18px 4px 10px}
.sup-hero h3{font-size:22px;font-weight:800;margin:0 0 14px}
.sup-search{background:var(--hover);border:1px solid var(--border)}
.sup-search input{flex:1;border:none;background:transparent;color:var(--text);font-size:15px;outline:none}
.sup-tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:18px 0 26px}
.sup-tile{display:flex;align-items:center;gap:12px;padding:14px;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;transition:.15s;text-decoration:none;color:inherit}
.sup-tile:hover{background:var(--hover);border-color:var(--brand-soft)}
.sup-tile-ic{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand);flex-shrink:0}
.sup-tile-ic svg{width:22px;height:22px}
.sup-tile-t{display:flex;flex-direction:column;gap:2px;min-width:0}
.sup-tile-t b{font-size:15px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.sup-tile-t .muted{font-size:12.5px;line-height:1.5}
.sup-soon{font-size:10.5px;font-weight:700;background:var(--gold);color:#3a2d00;border-radius:999px;padding:1px 7px}
.sup-sec-h{font-size:13px;font-weight:800;color:var(--muted);margin:6px 4px 10px;text-transform:uppercase;letter-spacing:.4px}
.sup-cat{background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:16px}
.sup-cat-h{font-size:13.5px;font-weight:800;color:var(--brand);padding:12px 16px 6px}
.sup-art{display:flex;align-items:center;gap:12px;padding:13px 16px;border-top:1px solid var(--border);cursor:pointer;transition:.12s;text-decoration:none;color:inherit}
.sup-cat-h + .sup-art,.sup-cat .sup-art:first-child{border-top:none}
.sup-art:hover{background:var(--hover)}
.sup-art svg{width:20px;height:20px;color:var(--muted);flex-shrink:0}
.sup-art-t{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.sup-art-t b{font-size:14.5px}
.sup-art-t .muted{font-size:12.5px;line-height:1.5;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.sup-chev{margin-inline-start:auto;color:var(--muted);opacity:.5;transform:scaleX(-1)}
.sup-chev svg{width:16px;height:16px}
.sup-results{margin-bottom:18px}
.sup-empty{padding:20px 16px;text-align:center}
.sup-article{padding:18px 6px 8px}
.sup-cat-tag{display:inline-block;font-size:12px;font-weight:800;color:var(--brand);background:var(--brand-soft);border-radius:999px;padding:3px 12px;margin-bottom:12px}
.sup-article h1{font-size:25px;font-weight:800;line-height:1.35;margin:0 0 16px}
.sup-body{font-size:15.5px;line-height:1.9;color:var(--text)}
.sup-body h2{font-size:20px;font-weight:800;margin:22px 0 10px}
.sup-body h3{font-size:17px;font-weight:800;margin:18px 0 8px}
.sup-body h4{font-size:15px;font-weight:800;margin:14px 0 6px}
.sup-body p{margin:0 0 12px}
.sup-body ul,.sup-body ol{margin:0 0 14px;padding-inline-start:24px}
.sup-body li{margin-bottom:7px}
.sup-body strong{font-weight:800}
.sup-body code{background:var(--hover);border-radius:6px;padding:1px 6px;font-size:13.5px}
.sup-body a{color:var(--brand);text-decoration:none}
.sup-body a:hover{text-decoration:underline}
.sup-body blockquote{margin:14px 0;padding:10px 16px;border-inline-start:3px solid var(--brand);background:var(--hover);border-radius:8px;color:var(--text)}
.sup-meta{font-size:12.5px;margin-top:18px;padding-top:12px;border-top:1px solid var(--border)}
.sup-contact{margin-top:20px;padding:16px;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius);display:flex;align-items:center;gap:12px;flex-wrap:wrap}
@media(max-width:600px){.sup-tiles{grid-template-columns:1fr}.sup-article h1{font-size:22px}}

/* ── مساعد الدعم الذكي ── */
.sup-search{position:relative}
.sup-ask-btn{background:var(--brand-fill);color:#fff;border:none;width:34px;height:34px;border-radius:999px;display:grid;place-items:center;cursor:pointer;flex-shrink:0;transition:.15s}
.sup-ask-btn:hover{filter:brightness(1.08)}
.sup-ask-btn svg{width:17px;height:17px}
.sup-ask-hint{display:flex;align-items:center;gap:6px;font-size:12.5px;margin:8px 4px 0}
.sup-ask-hint svg{width:14px;height:14px;color:var(--brand)}
.sup-answer{background:var(--bg-soft);border:1px solid var(--brand-soft);border-radius:var(--radius);padding:16px;margin:16px 0}
.sup-answer-ng{border-color:var(--border)}
.sup-ans-head{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.sup-ans-head b{font-size:15px}
.sup-ans-head svg{width:18px;height:18px;color:var(--brand)}
.sup-ans-mode{margin-inline-start:auto;font-size:11px;font-weight:700;color:var(--brand);background:var(--brand-soft);border-radius:999px;padding:2px 9px}
.sup-ans-body{font-size:15px;line-height:1.85}
.sup-ans-body p:last-child{margin-bottom:0}
.sup-srcs{margin-top:12px;padding-top:10px;border-top:1px solid var(--border);display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:13px}
.sup-src{display:inline-flex;align-items:center;gap:5px;background:var(--hover);color:var(--text);border-radius:999px;padding:4px 11px;font-size:12.5px;font-weight:700;cursor:pointer;text-decoration:none;transition:.12s}
.sup-src:hover{background:var(--brand-soft);color:var(--brand)}
.sup-src svg{width:13px;height:13px}
.sup-thinking{display:flex;gap:5px;padding:4px 2px}
.sup-thinking span{width:8px;height:8px;border-radius:50%;background:var(--brand);opacity:.4;animation:supdot 1.2s infinite ease-in-out}
.sup-thinking span:nth-child(2){animation-delay:.2s}
.sup-thinking span:nth-child(3){animation-delay:.4s}
@keyframes supdot{0%,60%,100%{opacity:.35;transform:translateY(0)}30%{opacity:1;transform:translateY(-4px)}}

/* ── التذاكر وصندوق الدعم ── */
.sup-form{padding:8px 4px 20px;display:flex;flex-direction:column}
.sup-form p{line-height:1.7;margin:0 0 8px}
.sup-lbl{font-size:13.5px;font-weight:800;margin:14px 0 7px}
.sup-input{width:100%;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:12px;padding:11px 14px;font-size:15px;font-family:inherit;outline:none;transition:.15s}
.sup-input:focus{border-color:var(--brand)}
textarea.sup-input{resize:vertical;line-height:1.7}
.sup-kinds{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sup-kind{display:flex;align-items:center;gap:8px;padding:11px 12px;border:1px solid var(--border);background:var(--bg-soft);color:var(--text);border-radius:12px;cursor:pointer;font-weight:700;font-size:14px;transition:.12s}
.sup-kind svg{width:18px;height:18px;color:var(--muted)}
.sup-kind.on{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}
.sup-kind.on svg{color:var(--brand)}
.sup-ctx-note{display:flex;align-items:center;gap:7px;font-size:12.5px;margin:12px 0 16px}
.sup-ctx-note svg{width:14px;height:14px;flex-shrink:0}
.sup-form .btn.block{margin-top:4px}
.sup-tk-top{display:flex;justify-content:flex-end;padding:8px 0 14px}
.sup-tk{align-items:center}
.sup-status{margin-inline-start:auto;font-size:11.5px;font-weight:800;border-radius:999px;padding:3px 11px;white-space:nowrap;flex-shrink:0}
.st-recv{background:var(--brand-soft);color:var(--brand)}
.st-rev{background:#fff3d6;color:#8a6100}
.st-res{background:#d8f5e3;color:#1a7a45}
.st-cls{background:var(--hover);color:var(--muted)}
.st-cnl{background:var(--hover);color:var(--muted);text-decoration:line-through}
[data-theme="dark"] .st-rev{background:#3a2f12;color:#f0c768}
[data-theme="dark"] .st-res{background:#143524;color:#7fdca6}
.sup-tk-head{display:flex;align-items:flex-start;gap:12px;padding:14px 4px}
.sup-tk-head h2{font-size:20px;font-weight:800;margin:0 0 4px}
.sup-thread{display:flex;flex-direction:column;gap:12px;padding:8px 0 16px}
.sup-msg{max-width:88%;padding:11px 14px;border-radius:14px;border:1px solid var(--border)}
.sup-msg-user{align-self:flex-start;background:var(--bg-soft)}
.sup-msg-agent{align-self:flex-end;background:var(--brand-soft);border-color:var(--brand-soft)}
.sup-msg-system{align-self:center;background:var(--hover);font-size:13px;color:var(--muted);text-align:center;border:none}
.sup-msg-who{font-size:11.5px;font-weight:800;color:var(--muted);margin-bottom:4px}
.sup-msg-agent .sup-msg-who{color:var(--brand)}
.sup-msg-body{font-size:14.5px;line-height:1.7;word-break:break-word}
.sup-reply{margin-top:6px}
.sup-reply-actions{display:flex;gap:8px;margin-top:8px}
.btn.ghost{background:transparent;color:var(--muted);border:1px solid var(--border)}
.btn.ghost:hover{background:var(--hover)}
.sup-closed{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}

/* ── مركز الحماية من الاحتيال ── */
.fraud-intro{display:flex;gap:14px;align-items:center;padding:10px 4px 16px}
.fraud-ic{width:48px;height:48px;border-radius:14px;display:grid;place-items:center;background:var(--brand-soft);color:var(--brand);flex-shrink:0}
.fraud-ic svg{width:26px;height:26px}
.fraud-intro h3{font-size:19px;font-weight:800;margin:0 0 3px}
.fraud-intro p{margin:0;font-size:13.5px;line-height:1.6}
.fraud-card{background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:16px}
.fraud-card h4{display:flex;align-items:center;gap:8px;font-size:15.5px;font-weight:800;margin:0 0 6px}
.fraud-card h4 svg{width:18px;height:18px;color:var(--brand)}
.fraud-card>p.muted{margin:0 0 12px;font-size:13.5px;line-height:1.6}
.fraud-actions{margin-top:10px}
.fr-result{margin-top:14px;padding:14px;border-radius:12px;border:1px solid var(--border)}
.fr-clear{background:#eafaf0;border-color:#bfe8cf}
.fr-suspicious{background:#fff6e2;border-color:#f0d896}
.fr-likely_scam{background:#fdeaea;border-color:#f3b6b6}
[data-theme="dark"] .fr-clear{background:#13301f;border-color:#1d5235}
[data-theme="dark"] .fr-suspicious{background:#332a10;border-color:#5a4716}
[data-theme="dark"] .fr-likely_scam{background:#341515;border-color:#5e2020}
.fr-meter{display:flex;align-items:center;gap:12px;margin-bottom:10px}
.fr-meter-bar{flex:1;height:9px;border-radius:999px;background:rgba(0,0,0,.1);overflow:hidden}
.fr-meter-bar i{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,#36b37e,#f5a623,#e05555);transition:width .4s}
.fr-level{font-weight:800;font-size:14px;white-space:nowrap}
.fr-cues{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:10px}
.fr-cue{font-size:12px;font-weight:700;background:rgba(0,0,0,.06);border-radius:999px;padding:3px 11px}
[data-theme="dark"] .fr-cue{background:rgba(255,255,255,.1)}
.fr-advice{margin:0;padding-inline-start:20px;font-size:13.5px;line-height:1.8}
.fr-advice li{margin-bottom:4px}
.fr-result .btn.sm{margin-top:12px}
.fr-reported{margin-top:10px;font-size:13.5px;line-height:1.7;display:flex;flex-wrap:wrap;gap:5px;align-items:center}
.fr-reported svg{width:16px;height:16px;color:#1a7a45}
.fr-reported b{color:#c0392b}
.fr-camp{padding:11px 0;border-top:1px solid var(--border)}
.fraud-card .fr-camp:first-of-type{border-top:none}
.fr-camp-h{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px}
.fr-camp-n{font-weight:800;font-size:13.5px;color:#c0392b}
.fr-camp-s{font-size:12.5px;line-height:1.5;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.fr-sec-score{font-weight:800;font-size:14px;margin-bottom:10px;color:var(--brand)}
.fr-check{display:flex;gap:10px;align-items:flex-start;padding:9px 0;border-top:1px solid var(--border)}
.fr-check:first-child{border-top:none}
.fr-check svg{width:18px;height:18px;flex-shrink:0;margin-top:2px}
.fr-check.ok svg{color:#1a7a45}
.fr-check.warn svg{color:#c0392b}
.fr-check b{display:block;font-size:14px}
.fr-check .muted{font-size:12.5px;line-height:1.5}
.fr-imp-h{font-weight:800;font-size:13.5px;margin:14px 0 4px}

/* ── حالة الحساب وحوكمة السياسات ── */
.acct-standing{display:flex;align-items:center;gap:14px;padding:16px;border-radius:var(--radius);border:1px solid var(--border);margin:8px 0 16px}
.acct-st-ic{font-size:30px;line-height:1}
.acct-standing b{display:block;font-size:16px;font-weight:800}
.acct-good{background:#eafaf0;border-color:#bfe8cf}
.acct-caution{background:#fff6e2;border-color:#f0d896}
.acct-restricted{background:#fdeaea;border-color:#f3b6b6}
[data-theme="dark"] .acct-good{background:#13301f;border-color:#1d5235}
[data-theme="dark"] .acct-caution{background:#332a10;border-color:#5a4716}
[data-theme="dark"] .acct-restricted{background:#341515;border-color:#5e2020}
.acct-action{display:flex;gap:10px;align-items:center;padding:10px 0;border-top:1px solid var(--border)}
.acct-action:first-child{border-top:none}
.acct-act-badge{font-size:11px;font-weight:800;border-radius:6px;padding:2px 8px;background:var(--hover);color:var(--muted)}
.act-block,.act-report{background:#fdeaea;color:#c0392b}
.act-soft,.act-label{background:#fff6e2;color:#8a6100}
.acct-action b{display:block;font-size:14px}
.acct-action .muted{font-size:12px}
.acct-consent{display:flex;align-items:center;gap:12px;padding:11px 0;border-top:1px solid var(--border)}
.acct-consent:first-of-type{border-top:none}
.acct-consent>div{flex:1}
.acct-consent b{display:block;font-size:14px}
.acct-consent .muted{font-size:12.5px}
.sup-consent-box{margin-top:16px;padding:13px 16px;background:var(--bg-soft);border:1px solid var(--border);border-radius:12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13.5px}
.sup-consent-box svg{width:15px;height:15px;color:#1a7a45;vertical-align:-2px}
.pol-cat{display:flex;gap:11px;align-items:flex-start;padding:10px 0;border-top:1px solid var(--border)}
.pol-cat:first-of-type{border-top:none}
.pol-cat-code{font-size:12px;font-weight:800;color:#fff;background:var(--brand-fill);border-radius:7px;padding:2px 9px;flex-shrink:0;margin-top:1px}
.pol-cat b{display:block;font-size:14px}
.pol-cat .muted{font-size:12.5px;line-height:1.5}

/* ── لوحة الوكيل والتحليلات ── */
.ag-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:6px 0 4px}
.ag-stat{background:var(--bg);border:1px solid var(--border);border-radius:12px;padding:12px 8px;text-align:center}
.ag-stat-v{font-size:21px;font-weight:800;color:var(--brand);line-height:1.1}
.ag-stat-l{font-size:11.5px;color:var(--muted);margin-top:4px;line-height:1.3}
.ag-top{margin-top:14px;border-top:1px solid var(--border);padding-top:10px}
.ag-top-h{font-weight:800;font-size:13px;margin-bottom:6px}
.ag-top-row{display:flex;justify-content:space-between;gap:10px;padding:5px 0;font-size:13px;border-top:1px solid var(--border)}
.ag-top-row:first-of-type{border-top:none}
.ag-top-row span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ag-top-n{font-weight:800;color:var(--brand);flex-shrink:0}
.ag-counts{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px;align-items:center}
.ag-count{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;font-weight:700}
.sup-agent-controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:10px 0;padding:10px;background:var(--bg-soft);border:1px dashed var(--border);border-radius:12px}
.sup-agent-controls .muted{font-size:12.5px;font-weight:700}
@media(max-width:600px){.ag-stats{grid-template-columns:repeat(2,1fr)}}

/* ── شاتبوت الدعم + رسالة البوت ── */
.sup-msg-bot{align-self:flex-start;background:var(--brand-soft);border-color:var(--brand-soft)}
.sup-msg-bot .sup-msg-who{color:var(--brand)}
.chatw{display:flex;flex-direction:column;height:calc(100vh - 120px);max-width:760px;padding-bottom:0}
.chat-thread{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:12px;padding:14px 4px}
.chat-msg{display:flex;gap:9px;max-width:90%}
.chat-bot{align-self:flex-start}
.chat-u{align-self:flex-end;flex-direction:row-reverse}
.chat-av{width:30px;height:30px;border-radius:50%;background:var(--brand-soft);color:var(--brand);display:grid;place-items:center;flex-shrink:0}
.chat-av svg{width:17px;height:17px}
.chat-bub{padding:10px 14px;border-radius:16px;font-size:14.5px;line-height:1.7;border:1px solid var(--border)}
.chat-bot .chat-bub{background:var(--bg-soft);border-top-left-radius:4px}
.chat-u .chat-bub{background:var(--brand-fill);color:#fff;border:none;border-top-right-radius:4px}
.chat-bub .sup-body{font-size:14.5px}
.chat-bub .sup-srcs{margin-top:8px;padding-top:8px}
.chat-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:0 4px;align-self:flex-start;max-width:90%}
.chat-faq{display:flex;flex-wrap:wrap;gap:8px}
.chat-chip{background:var(--bg-soft);border:1px solid var(--border);color:var(--text);border-radius:999px;padding:8px 14px;font-size:13px;font-weight:700;cursor:pointer;transition:.12s;text-align:start}
.chat-chip:hover{background:var(--brand-soft);border-color:var(--brand);color:var(--brand)}
.chat-input{display:flex;gap:8px;align-items:center;padding:12px 4px;border-top:1px solid var(--border);background:var(--bg);position:sticky;bottom:0}
.chat-input input{flex:1;border:1px solid var(--border);background:var(--hover);color:var(--text);border-radius:999px;padding:11px 16px;font-size:15px;outline:none}
.chat-input input:focus{border-color:var(--brand)}
.chat-input .sup-ask-btn{width:40px;height:40px}

/* ── جولة التعريف بالموقع (Onboarding) ── */
.intro-cta{display:flex;align-items:center;gap:13px;margin:6px 16px 14px;padding:14px 16px;border-radius:var(--radius);cursor:pointer;background:linear-gradient(120deg,var(--brand-soft),color-mix(in srgb,var(--brand) 8%,transparent));border:1px solid var(--brand-soft);transition:.15s}
.intro-cta:hover{filter:brightness(1.03)}
.intro-cta-ic{width:42px;height:42px;border-radius:12px;background:var(--brand-fill);color:#fff;display:grid;place-items:center;flex-shrink:0}
.intro-cta-ic svg{width:22px;height:22px}
.intro-cta-t{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}
.intro-cta-t b{font-size:15px}
.intro-cta-t span{font-size:12.5px;color:var(--muted)}
.intro-cta-go{font-size:12.5px;font-weight:800;color:var(--brand);white-space:nowrap;background:var(--bg);border:1px solid var(--brand-soft);border-radius:999px;padding:6px 12px}
.intro-bg{display:grid;place-items:center;z-index:1000}
.intro-modal{position:relative;background:var(--bg);border:1px solid var(--border);border-radius:22px;width:min(440px,92vw);padding:30px 26px 22px;text-align:center;box-shadow:0 18px 60px rgba(0,0,0,.28);animation:introIn .3s cubic-bezier(.2,.8,.3,1)}
@keyframes introIn{from{opacity:0;transform:translateY(14px) scale(.97)}to{opacity:1;transform:none}}
.intro-skip{position:absolute;inset-inline-end:14px;top:14px;background:transparent;border:none;color:var(--muted);font-size:13.5px;font-weight:700;cursor:pointer;padding:4px 8px;border-radius:8px}
.intro-skip:hover{background:var(--hover)}
.intro-illu{width:84px;height:84px;margin:6px auto 16px;border-radius:24px;background:linear-gradient(135deg,var(--brand),color-mix(in srgb,var(--brand) 55%,#000));color:#fff;display:grid;place-items:center;box-shadow:0 10px 26px color-mix(in srgb,var(--brand) 40%,transparent)}
.intro-illu svg{width:42px;height:42px}
.intro-title{font-size:22px;font-weight:800;margin:0 0 10px;line-height:1.35}
.intro-body{font-size:15px;line-height:1.85;color:var(--muted);margin:0 0 18px;min-height:84px}
.intro-dots{display:flex;justify-content:center;gap:7px;margin-bottom:18px}
.intro-dot{width:8px;height:8px;border-radius:999px;background:var(--border);cursor:pointer;transition:.2s}
.intro-dot.on{background:var(--brand);width:22px}
.intro-nav{display:flex;justify-content:space-between;align-items:center;gap:10px}
.intro-nav .btn{min-width:104px}
.intro-step-n{margin-top:12px;font-size:12px;color:var(--muted);font-weight:700}
@media(max-width:600px){.intro-modal{width:94vw;padding:26px 18px 18px}.intro-body{min-height:96px}}

/* ── سؤال التخصيص في الجولة ── */
.intro-goals{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:2px 0 16px}
.intro-goal{display:flex;flex-direction:column;align-items:center;gap:7px;padding:14px 8px;border:1.5px solid var(--border);background:var(--bg-soft);color:var(--text);border-radius:14px;cursor:pointer;font-size:13.5px;font-weight:700;transition:.15s}
.intro-goal svg{width:24px;height:24px;color:var(--muted);transition:.15s}
.intro-goal:hover{border-color:var(--brand-soft)}
.intro-goal.on{border-color:var(--brand);background:var(--brand-soft);color:var(--brand)}
.intro-goal.on svg{color:var(--brand)}
.intro-rec{display:flex;align-items:center;justify-content:center;gap:6px;flex-wrap:wrap;font-size:13.5px;background:var(--brand-soft);color:var(--brand);border-radius:12px;padding:9px 12px;margin:0 0 16px}
.intro-rec svg{width:15px;height:15px}
.intro-goal:focus-visible,.intro-dot:focus-visible{outline:2px solid var(--brand);outline-offset:2px}

/* ── نافذة الإبلاغ عن منشور (تُوحَّد مع الدعم) ── */
.report-modal{background:var(--bg);border:1px solid var(--border);border-radius:18px;width:min(420px,92vw);padding:20px;box-shadow:0 16px 50px rgba(0,0,0,.25)}
.rep-head{display:flex;align-items:center;gap:9px;margin-bottom:6px}
.rep-head svg{width:22px;height:22px;color:#c0392b}
.rep-head h3{font-size:18px;font-weight:800;margin:0}
.report-modal>p.muted{font-size:13px;line-height:1.6;margin:0 0 12px}
.rep-reasons{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:12px}
.rep-reason{background:var(--bg-soft);border:1px solid var(--border);color:var(--text);border-radius:999px;padding:7px 13px;font-size:13px;font-weight:700;cursor:pointer;transition:.12s}
.rep-reason:hover{border-color:var(--brand-soft)}
.rep-reason.on{background:var(--brand-soft);border-color:var(--brand);color:var(--brand)}
.rep-actions{display:flex;gap:8px;margin-top:12px}
.rep-actions .btn{flex:1}

/* ═══════════════════════════════════════════════════════════════════════════
   طبقة إتاحة وحركة — 2026-07-28
   مبنيّة على قياس فعليّ بمتصفّح حقيقي (Playwright) لا على تخمين:
     · ٩٠ من ٩٥ هدف لمس أصغر من 44×44 على شاشة 390px — أبرزها .pact (٦٠ عنصراً
       بـ34×30) وهي أزرار التفاعل الستّة نفسها: إعجاب، إعادة نشر، تعليق، حفظ، مشاركة.
     · صفر دعم لـprefers-color-scheme ⇒ مستخدم الوضع الداكن يُفتح له أبيض ويبقى أبيض.
     · موضع واحد فقط لـprefers-reduced-motion في المشروع كلّه.
   كلّ ما يلي بلا مكتبة خارجيّة وبلا تغيير في الشكل — توسيع منطقة اللمس عبر عنصر
   زائف، لا عبر تكبير الزرّ (لئلّا ينكسر تخطيط صفّ التفاعل).
   ═══════════════════════════════════════════════════════════════════════════ */

/* ١) منطقة لمس ٤٤×٤٤ دون تغيير الحجم المرئيّ (توصية WCAG 2.5.5 / أبل / جوجل) */
@media (pointer: coarse) {
  .pact, .icon-btn, .why, .kc, .mn, .ln, .intro-skip, .rreply {
    position: relative;
  }
  .pact::after, .icon-btn::after, .kc::after, .mn::after,
  .ln::after, .intro-skip::after, .rreply::after {
    content: "";
    position: absolute;
    inset: 50% 50% 50% 50%;
    width: 44px; height: 44px;
    transform: translate(50%, -50%);
    inset-inline-start: 50%;
    inset-block-start: 50%;
    /* لا خلفيّة ولا حدود: منطقة لمس خفيّة فقط */
  }
  /* لا تلتقط الأحداث فوق نصّ قابل للتحديد داخل البطاقة */
  .pact::after { z-index: 0; }
}

/* ٢) احترام تفضيل النظام للوضع الداكن عند أوّل زيارة.
      السمة اليدويّة (data-theme) تبقى الأقوى — إن اختار المستخدم صراحةً فاختياره يفوز. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme]) {
    color-scheme: dark;
  }
}
/* ⚠️ **والقاعدةُ أعلاه ميّتةٌ عملياً — والحيُّ هو ما تحتها** (2026-09-01).
 *
 * `app.js` يضبط `data-theme` في كلّ إقلاع (`setAttribute('data-theme', theme)`)،
 * فـ`:root:not([data-theme])` **لا تُطابِق أبداً**. وقِيس على الصفحة الحيّة:
 * `color-scheme: normal` في الحالتين — أي أنّ المتصفّحَ لا يعرف سمةَ الصفحة قطّ.
 *
 * وثمنُه مرئيّ: العناصرُ الأصليّة (مربّعُ الكتابة · الحقول · أشرطةُ التمرير)
 * تتبع **نظامَ التشغيل** لا اختيارَ الطالب. قِيس في كروم:
 *     نظامٌ فاتح + اختيارٌ داكن ⇒ خلفيّةُ مربّع الكتابة **بيضاء** في صفحةٍ داكنة
 *     نظامٌ داكن + اختيارٌ فاتح ⇒ **داكنةٌ** في صفحةٍ فاتحة
 * وهو أيضاً أقوى إشارةٍ تمنع متصفّحاً من فرض تعتيمه على الصفحة. */
:root[data-theme="dark"]  { color-scheme: dark; }
:root[data-theme="light"] { color-scheme: light; }

/* ٣) بوّابة تقليل الحركة — إلزاميّة قبل أيّ طبقة حركة.
      نُبقي الانتقالات القصيرة جداً (تغذية راجعة للنقر) ونُلغي كلّ ما هو زخرفيّ. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
  ::view-transition-group(*),
  ::view-transition-old(*),
  ::view-transition-new(*) { animation: none !important; }
}

/* ٤) تركيز لوحة المفاتيح مرئيّ في كلّ مكان — شرط تنقّل بلا فأرة */
:where(button, a, input, select, textarea, [tabindex]):focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 2px;
  border-radius: 8px;
}

/* ٥) «لماذا أرى هذا؟» — رفعها من حاشية إلى ميزة.
      هذه أقوى ما تملكه المنصّة ولا تملكه المنصّات الكبرى: تفكيك دقيق لا تقريبيّ.
      كانت 12px بلون باهت أسفل البطاقة؛ نجعلها مقروءة ونضيف مؤشّراً بصريّاً أنّها قابلة للفتح. */
.why {
  font-size: 12.5px;
  font-weight: 600;
  cursor: pointer;
}
.why:hover, .why:focus-visible {
  background: color-mix(in srgb, var(--brand) 16%, transparent);
}
.why-gear { opacity: 1; }

/* ٦) رموز الحركة — نظام لا حركات عشوائيّة.
      المدد والتخفيف معرَّفة مرّة واحدة كي تبقى الحركة متّسقة عبر المنصّة. */
:root {
  --dur-fast: 120ms;
  --dur-base: 200ms;
  --dur-slow: 320ms;
  --ease-out: cubic-bezier(.22, 1, .36, 1);
  --ease-spring: cubic-bezier(.34, 1.56, .64, 1);
}

/* ٧) تغذية راجعة لمسيّة على أزرار التفاعل — تحسّ بالاستجابة على الأجهزة الضعيفة
      لأنّها transform فقط (تعمل على المُركِّب، لا تُعيد التخطيط). */
.pact { transition: color var(--dur-fast) var(--ease-out),
                    background var(--dur-fast) var(--ease-out),
                    transform var(--dur-fast) var(--ease-out); }
.pact:active { transform: scale(.88); }
.pact.like.on svg { animation: ulf-pop var(--dur-base) var(--ease-spring); }
@keyframes ulf-pop {
  0%   { transform: scale(1); }
  45%  { transform: scale(1.35); }
  100% { transform: scale(1); }
}

/* ٨) انتقالات العرض الأصليّة (View Transitions API) — صفر بايت جافاسكربت.
      المتصفّحات غير الداعمة تتجاهلها ببساطة: تحسين تدريجيّ خالص. */
@view-transition { navigation: auto; }
::view-transition-old(root) { animation: ulf-fade-out var(--dur-base) var(--ease-out) both; }
::view-transition-new(root) { animation: ulf-fade-in  var(--dur-base) var(--ease-out) both; }
@keyframes ulf-fade-out { to   { opacity: 0; transform: translateY(-4px); } }
@keyframes ulf-fade-in  { from { opacity: 0; transform: translateY(6px);  } }

/* «لماذا ظهر لي هذا؟» — التفكيك الدقيق لمنشور واحد.
   شرائط أفقيّة تُظهر نسبة مساهمة كل إشارة. المساهمة السالبة تُلوَّن مختلفةً
   لأنّ «ما خفض ترتيب المنشور» جزء من الشفافيّة لا يقلّ عن «ما رفعه». */
.why-bars { display: flex; flex-direction: column; gap: 9px; margin: 14px 0; }
.why-row { display: flex; flex-direction: column; gap: 4px; }
.why-lbl { display: flex; justify-content: space-between; align-items: baseline;
           font-size: 13px; gap: 10px; }
.why-bar { height: 8px; border-radius: 999px; overflow: hidden;
           background: color-mix(in srgb, var(--brand) 10%, transparent); }
.why-bar > i { display: block; height: 100%; border-radius: 999px;
               background: var(--brand);
               animation: ulf-grow var(--dur-slow) var(--ease-out) both; }
@keyframes ulf-grow { from { transform: scaleX(0); transform-origin: inline-start; } }
.why-sum { display: flex; justify-content: space-between; align-items: center;
           padding-top: 10px; margin-top: 4px; font-size: 14px;
           border-top: 1px solid var(--border); }

/* الصفوف الدراسيّة — مدخل الإطلاق التجريبيّ */
.cls-wrap { padding: 14px; }
.cls-intro { display: flex; gap: 12px; align-items: flex-start; padding: 14px;
             border-radius: 14px; margin-bottom: 12px;
             background: color-mix(in srgb, var(--brand) 8%, transparent);
             border: 1px solid color-mix(in srgb, var(--brand) 18%, transparent); }
.cls-intro svg { width: 26px; height: 26px; color: var(--brand); flex: 0 0 auto; }
.cls-intro span { display: block; margin-top: 4px; line-height: 1.7; font-size: 13.5px; }
.cls-actions { display: flex; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.cls-actions .btn { flex: 1; min-width: 150px; }
.cls-card { border: 1px solid var(--border); border-radius: 14px; padding: 14px;
            margin-bottom: 10px; background: var(--panel);
            transition: border-color var(--dur-fast) var(--ease-out),
                        transform var(--dur-fast) var(--ease-out); }
.cls-card:hover { border-color: color-mix(in srgb, var(--brand) 40%, transparent); }
.cls-top { display: flex; align-items: center; gap: 8px; }
.cls-badge { font-size: 11px; font-weight: 700; color: var(--brand); padding: 2px 8px;
             border-radius: 999px; background: color-mix(in srgb, var(--brand) 14%, transparent); }
.cls-meta { font-size: 13px; margin-top: 4px; }
.cls-foot { display: flex; justify-content: space-between; align-items: center;
            margin-top: 10px; gap: 10px; }
.cls-code { font-family: ui-monospace, monospace; letter-spacing: .16em;
            font-weight: 700; direction: ltr; display: inline-block; }
/* الرمز يُملى صوتياً في قاعة الدرس ⇒ يجب أن يكون كبيراً ومتباعد الحروف */
.cls-bigcode { font-family: ui-monospace, monospace; font-size: 40px; font-weight: 800;
               letter-spacing: .3em; color: var(--brand); margin: 14px 0 6px;
               padding-inline-start: .3em; }
/* الرابط بديلٌ عن الإملاء الصوتيّ — يُعرض كاملاً وينكسر بدل أن يمدّ النافذة */
.cls-link { font-family: ui-monospace, monospace; font-size: 12px; margin: 12px 0 4px;
            padding: 8px 10px; border-radius: 8px; background: var(--surface-2, rgba(127,127,127,.10));
            border: 1px solid var(--border, rgba(127,127,127,.22));
            overflow-wrap: anywhere; user-select: all; }
/* حقل رمز الصفّ في التسجيل: أبرز من بقيّة الحقول لأنّه المسار السريع للطالب */
.cls-code-field input { font-family: ui-monospace, monospace; letter-spacing: .22em;
                        text-transform: uppercase; font-weight: 700; }
/* تلميحٌ تحت حقل. كان مُنسَّقاً داخل `.cls-code-field` وحدها، فبدا تلميح البريد
   نصّاً عاديّاً بحجم المتن — يقرؤه الطالب كأنّه تعليمةٌ لا إيضاحاً. */
.field .hint, .cls-code-field .hint { font-size: 12px; color: var(--muted);
                                      margin-top: 6px; line-height: 1.6; }

/* ── البيانات الدراسيّة المطويّة في التسجيل ──
   رمز الصفّ **يُلغي** خمسة حقول لا يكمّلها (قِيس حيّاً: ما يكتبه الطالب يُستبدَل
   بقيم الصفّ). فطيّها مع الرمز يُسقط خمسة حقولٍ تُرمى إجاباتها، وفتحُها بنقرةٍ
   يُبقيها لمن لا رمز معه. */
.reg-study { margin-top: 14px; border-top: 1px solid var(--border, rgba(127,127,127,.22));
             padding-top: 12px; }
.reg-study-toggle { display: flex; align-items: center; justify-content: space-between;
                    gap: 10px; width: 100%; background: none; border: 0; padding: 4px 0;
                    cursor: pointer; font: inherit; font-weight: 700; color: inherit;
                    text-align: start; }
.reg-study-toggle::after { content: '▾'; font-size: 13px; opacity: .55; transition: transform .18s; }
/* المطويّ يشير في اتّجاه القراءة: يساراً في العربيّة ويميناً في الإنجليزيّة.
   وسهمٌ يشير يميناً في واجهةٍ عربيّة يبدو «رجوعاً» لا «فتحاً». */
.reg-study.folded .reg-study-toggle::after { transform: rotate(90deg); }
[dir="ltr"] .reg-study.folded .reg-study-toggle::after { transform: rotate(-90deg); }
.reg-study .rs-note { font-weight: 400; font-size: 12px; }
/* الطيّ بـ`grid-template-rows` لا بـ`display:none`: الحقول تبقى في النموذج فتُرسَل
   قيمها إن كان الطالب قد ملأها قبل أن يكتب الرمز، ويبقى الانتقال متحرّكاً.
   وهو مهمٌّ عمليّاً: من كتب رمزاً **خاطئاً** لا يرث بيانات صفّ، فتُستعمل قيمه هي.

   ⚠️ و**غلافٌ واحد** داخل الكتلة شرطٌ لا تنظيم: `grid-template-rows: 0fr` يُصفّر
   الصفّ الأوّل وحده، وما بعده يأخذ `auto`. وكانت الكتلة أربعةَ أبناء فطُوي أوّلها
   وبقي ثلاثة — قِيس على هاتفٍ ٣٩٠px: النموذج ٧٩١px مفتوحاً و٧٣٢px «مطويّاً»، أي
   ٥٩px من ٢٥٠ متوقّعة. والغلاف يجعل الأبناء صفّاً واحداً فيُطوى كلّه. */
.reg-study-body { display: grid; grid-template-rows: 1fr; transition: grid-template-rows .2s ease;
                  overflow: hidden; }
.reg-study.folded .reg-study-body { grid-template-rows: 0fr; }
.reg-study-body > .reg-study-inner { min-height: 0; }
.reg-study.folded .reg-study-inner { visibility: hidden; }

/* رابط «نسيت كلمة المرور» — مسارٌ لم يكن للمنصّة أثرٌ منه إطلاقاً قبل هذه الجولة */
.auth-forgot { text-align: center; margin-top: 10px; font-size: 13px; }
.auth-forgot a { color: var(--muted); cursor: pointer; text-decoration: underline;
                 text-underline-offset: 3px; }
.auth-forgot a:hover { color: var(--brand); }

/* نافذة الاستعادة */
.rec-body { padding: 4px 2px 2px; }
.rec-lead { font-size: 13.5px; line-height: 1.8; margin: 0 0 12px; }
.rec-hint { font-size: 13px; line-height: 1.8; margin-bottom: 12px; padding: 10px 12px;
            border-radius: 10px; background: var(--surface-2, rgba(127,127,127,.10));
            border: 1px solid var(--border, rgba(127,127,127,.22)); }
#recCode { font-family: ui-monospace, monospace; letter-spacing: .24em;
           text-transform: uppercase; font-weight: 700; text-align: center; }

/* تقدّم معالجة الكتاب — بديل «جارٍ الإضافة…» الصامت الذي كان يترك المستخدم
   بلا خبر لدقائق ثمّ يصمت للأبد. */
.ing-prog { display: flex; flex-direction: column; gap: 6px; min-width: 210px; }
.ing-bar { height: 6px; border-radius: 999px; overflow: hidden;
           background: color-mix(in srgb, var(--brand) 14%, transparent); }
.ing-bar > i { display: block; height: 100%; background: var(--brand); border-radius: 999px;
               transition: width var(--dur-base, 200ms) var(--ease-out, ease); }
.ing-prog span { font-size: 12px; }

/* ── وجهة الرفع وعلامة كتاب الصفّ ─────────────────────────────────────────
   يظهر المُنتقي لمن له صفٌّ فقط (يُخفيه JS)، فلا يرى من لا صفّ له خياراً بلا معنى. */
.nv-updest { display: flex; align-items: center; gap: 10px; margin: 10px 0 4px;
             font-size: 13px; flex-wrap: wrap; }
.nv-updest label { color: var(--muted); white-space: nowrap; }
.nv-updest select { flex: 1; min-width: 160px; padding: 7px 10px; border-radius: 8px;
                    border: 1px solid var(--border, rgba(127,127,127,.3));
                    background: var(--surface, transparent); color: inherit; font: inherit; }
/* علامةٌ على الكتاب المشترك: الطالب يجب أن يعرف أنّ حذفه يمسّ زملاءه */
.nv-book-cls { display: inline-block; font-size: 11px; font-weight: 700;
               padding: 1px 7px; border-radius: 999px; vertical-align: middle;
               background: color-mix(in srgb, var(--brand) 16%, transparent);
               color: var(--brand); margin-inline-start: 6px; }

/* ── كشف أسماء الصفّ (للمدرّس) ────────────────────────────────────────────
   يُعرَض آخرُ ظهور لأنّ سؤال المدرّس ليس «من انضمّ» بل «من يستعمل». */
.roster-body { max-height: 56vh; overflow-y: auto; margin: 8px 0; }
.roster-count { font-size: 12.5px; padding: 2px 2px 8px; }
.roster-row { display: flex; align-items: center; gap: 10px; padding: 7px 4px;
              border-bottom: 1px solid var(--border, rgba(127,127,127,.14)); }
.roster-row:last-child { border-bottom: 0; }
.roster-who { flex: 1; min-width: 0; display: flex; flex-direction: column; line-height: 1.35; }
.roster-who b { font-size: 13.5px; }
.roster-who span { font-size: 11.5px; }
.roster-seen { font-size: 11.5px; white-space: nowrap; }
/* من لم يدخل قطّ: يُميَّز بهدوء — إشارةٌ للمدرّس لا وصمٌ للطالب */
.roster-idle { opacity: .62; }

/* صفّ طلب استعادةٍ في نافذة المدرّس */
.rec-row { display: flex; align-items: center; justify-content: space-between; gap: 12px;
           padding: 11px 12px; border-bottom: 1px solid var(--border, rgba(127,127,127,.18)); }
.rec-row:last-child { border-bottom: 0; }
.rec-who { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.rec-who span { font-size: 12px; }
.rec-issued { display: flex; flex-direction: column; gap: 6px; width: 100%; padding: 4px 0; }
/* الرمز يُملى صوتاً في صفٍّ من ثلاثين — فيُعرَض كبيراً متباعد الحروف قابلاً للتحديد */
.rec-code { font-family: ui-monospace, monospace; font-size: 20px; font-weight: 800;
            letter-spacing: .28em; text-align: center; user-select: all;
            padding: 10px 8px; border-radius: 10px;
            background: var(--surface-2, rgba(127,127,127,.12));
            border: 1px dashed var(--border, rgba(127,127,127,.35)); }
.cls-rec svg { width: 14px; height: 14px; }

/* لافتةُ البريد المفقود: أبرزُ من لافتة إكمال الملفّ لأنّها تخصّ استعادة الحساب
   لا تخصيص الخلاصة — ولا زرّ إغلاق لها، تزول بإضافة البريد وحده. */
.onboard.onboard-warn { border-color: var(--warn, #C79A3B);
                        background: color-mix(in srgb, var(--warn, #C79A3B) 8%, transparent); }
.onboard.onboard-warn .onboard-ic { background: var(--warn, #C79A3B); }

/* ═══════════════════════════════════════════════════════════════════════════
   رفيقُ الطالب — «نبتة»
   ───────────────────────────────────────────────────────────────────────────
   الألوان **مقيسةٌ من مرجع المالك** (متوسّطُ رقعةٍ ١٣×١٣ عند كلّ موضع)، لا
   مُخترَعة ولا مأخوذةٌ من لوحة الهويّة — الشخصيّة لها لوحتُها.

   ⚠️ والموضع مقيسٌ من التخطيط بعد أن كان بالحدس فتصادم ثلاث مرّات:
     · سطح المكتب: `.sidebar` عمودٌ `minmax(260px,300px)` على `inline-start`
     · الجوال: `.fab` عند `92px/18px` و`.mobile-nav` ≈62px + `safe-area`

   وقيدان لا يُخالَفان: **`transform`/`opacity` وحدهما** في الحركات، و**خصائصُ
   منطقيّة** لا فيزيائيّة. والعينان تُزاحان بـ`transform` على المجموعة — لا
   بـ`cx`/`cy`، فتلك تُجبر المتصفّح على إعادة رسمٍ في كلّ حركة فأرة.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── ألوانُ الشخصيّات ───────────────────────────────────────────────────────
   ألوانُ «أرم» على `:root` عمداً: فهي الافتراضيّة **وشبكةُ الأمان** — شخصيّةٌ
   جديدة نسيت رمزاً تَرِثُه فتبدو باهتةً لا مكسورة.

   ولإضافة شخصيّةٍ اسمُها `x`، اكتب **كتلتين** لا واحدة:

       .cp-ch-x{ --np-hood:…; --np-face:…; … }
       [data-theme="dark"] .cp-ch-x{ --np-hood:…; … }

   ⚠️ الثانية ليست تزيّناً: `.cp-ch-x` أخصُّ من `[data-theme="dark"]` وحدها،
   فكتلةٌ واحدة تغلب الوضع الداكن وتُبقي الشخصيّة فاتحةً على أرضيّةٍ سوداء.
   ─────────────────────────────────────────────────────────────────────────── */
:root{
  /* ⚠️ **مقيسةٌ من مرجع المالك `ارم.png`** بمتوسّط رقعةٍ ١١×١١ — لا مُخترَعة.
     والشخصيّة صارت متخرِّجة: قبّعةٌ زيتونيّةٌ بشرّابةٍ ذهبيّة بدل البرعم. */
  /* ⚠️ لوحةٌ **مسمّاةٌ بقيمها** من برنامج المالك الفنّيّ، لا اجتهاد. وأهمُّ
     ما فيها أنّها تفكّ اشتباهَ الأخضر: كان الجسمُ والقبّعةُ والكتابُ ثلاثةَ
     أخضرَ متقاربة فتذوب العناصرُ في بعضها. فصار:
       الجسم   `#A8C17A` زيتونيٌّ **فاتح**
       القبّعة `#4A5C2E` زيتونيٌّ **عميق**
       الكتاب  `#7A6B3C` زيتونيٌّ **مائلٌ للبنّيّ** — لونٌ ثالثٌ يُميَّز
     والوجهُ عاجيٌّ لا أبيضَ صافياً، والذهبيُّ متكرّرٌ (حافّة · عِرق · زرّ)
     فلا تبقى الشرّابةُ لمسةً دافئةً وحيدةً منفصلة.
     وتبايُنُ الحدّ على الفرو ٣٫٧٠ وعلى الأرضيّة ٧٫٣٤ — فوق عتبتَي الحارس. */
  --np-hood:#A8C17A; --np-line:#4A5C2E;
  /* ⚠️ الوجهُ **عاجيٌّ أدفأ**: `#F5F3E4` قريبٌ من الأبيض فيشتدّ تبايُنُه مع
     الجسم الأخضر ويبدو مُلصَقاً عليه. و`#F1E7CF` يُبقيه فاتحاً ويُلحقه باللوحة. */
  --np-face:#F1E7CF; --np-cheek:#FFBFA1; --np-eye:#20260F;
  /* ⚠️ الغلافُ **بنّيٌّ دافئ** لا زيتونيّ: تبايُنُه مع الجسم ٢٫٦٥ ← ٣٫٣٠،
     فيخرج الكتابُ من اشتباه الأخضر ويُقرأ عنصراً مستقلّاً. وله **حدُّه
     الخاصّ** `--np-bline`: الحدُّ الزيتونيُّ العامّ تبايُنُه عليه ١٫١٢ — أي
     يذوب — فلا حدَّ للكتاب أصلاً لو شاركه. */
  --np-book:#7A5630; --np-bline:#3A2814; --np-page:#F5F3E4; --np-limb:#9CB56E;
  --np-cap:#4A5C2E; --np-cap-2:#3B4A24; --np-tass:#F4C542; --np-tass-2:#C79A26;
  --np-gold:#F4C542;
  --np-glow:rgba(244,197,66,.18); --np-shade:rgba(74,92,46,.16);
}
[data-theme="dark"]{
  --np-hood:#93AC66; --np-line:#2C3A19;
  --np-face:#DFD5BC; --np-cheek:#E8A98D; --np-eye:#161B0B;
  --np-book:#6B4A26; --np-bline:#2B1D0F; --np-page:#E7E4D3; --np-limb:#87A05C;
  --np-cap:#3B4A24; --np-cap-2:#2E3A1C; --np-tass:#E0B43C; --np-tass-2:#B48A22;
  --np-gold:#E0B43C;
  --np-glow:rgba(224,180,60,.14); --np-shade:rgba(0,0,0,.34);
}

/* غلافُ الشخصيّة: يحمل صنفها ليصل إليه الطلاء، و`contents` تُلغي أثره
   في التخطيط فلا يتغيّر شيءٌ في القياس ولا في المحاذاة. */
.cp-ch{display:contents}

/* ── «ثعلوبي» — أبيضُ وأسود كما في المرجع ───────────────────────────────
   المرجع `ثعلوي.png` خطٌّ أسودُ على أبيض، وطلبَ المالك بقاءه كذلك. فالتمايزُ
   عن أرم هنا **في القيمة لا في الصبغة**: أرم لونٌ وتدرّج، وثعلوبي تباينٌ حادّ.
   وهو أصعبُ طلاءٍ في الوضع الداكن — أسودُ خالصٌ يبتلعه سوادُ الصفحة.
   ⚠️ ولذلك «أسودُ» الوضع الداكن **ليس أسود** بل `#2B3038`: أفتحُ من أرضيّة
      الصفحة (`#15191e`) بقدرٍ يكفي لأن تُقرأ الأذنان والقبّعة والكتابُ صُوَراً
      لا ثقوباً. وأُبقيَ الفروُ فاتحاً لأنّ الصورةَ الظِّلّيّة هي ما يُعرَف منها. */
.cp-ch-thaloobi{
  --np-hood:#FFFFFF; --np-line:#12100F;
  /* لا `--np-face` ولا `--np-cheek`: ثعلوبي بلا قناعِ وجهٍ وبلا خدودٍ حمراء
     (حُذفا بطلب المالك)، فتعريفُهما طلاءٌ ميّتٌ يُضلّل من يعدّل بعد اليوم. */
  --np-eye:#12100F;
  --np-book:#26262A; --np-page:#FFFFFF; --np-limb:#FFFFFF;
  --np-cap:#1B1A19; --np-cap-2:#000000; --np-tass:#1B1A19; --np-tass-2:#000000;
  --np-glow:rgba(0,0,0,.07); --np-shade:rgba(0,0,0,.13);
  --fx-ear:#12100F; --fx-in:#FFFFFF; --fx-tip:#12100F;
  /* ⚠️ أصلُ دوران الشرّابة **لكلّ شخصيّة**: شرّابةُ ثعلوبي عند (92,46) لا (106,40)،
     ولولا هذا لتأرجحت حول نقطةٍ خارجها فبدت تنزلق لا تتمايل. */
  --np-tass-o:84px 46px;
  --cp-blink:3.6s;          /* يقظٌ — يرمش أسرعَ من أرم */
}
[data-theme="dark"] .cp-ch-thaloobi{
  /* ⚠️ `#2B3038` كان تبايُنُه مع الأرضيّة ١٫٣٣، وهو **لونُ مِلءِ** الأذنين
     والقبّعة والذيل لا حدَّها فقط — فتذوب حوافُّها. رُفع إلى `#343B46` (١٫٥٨). */
  --np-hood:#F2F3F5; --np-line:#343B46;
  --np-eye:#20242B;
  --np-book:#404853; --np-page:#F2F3F5; --np-limb:#F2F3F5;
  --np-cap:#343B46; --np-cap-2:#262C35; --np-tass:#343B46; --np-tass-2:#262C35;
  --np-glow:rgba(255,255,255,.06); --np-shade:rgba(0,0,0,.34);
  --fx-ear:#343B46; --fx-in:#F2F3F5; --fx-tip:#343B46;
  --np-tass-o:84px 46px; --cp-blink:3.6s;
}
/* ── «ميجو» — كوالا رماديّة ─────────────────────────────────────────────
   الطلاءُ مقيسٌ من `ميجو.png`. والرماديُّ ثالثُ لونٍ مستقلّ: أرمُ خضراء،
   وثعلوبي أبيضُ وأسود، وميجو رماديٌّ دافئ — فالثلاثةُ تُميَّز من لمحة. */
.cp-ch-mijo{
  /* ⚠️ لوحةٌ **مسمّاةٌ بالقيم** من وصف المالك، لا اجتهاد. وأهمُّ ما فيها أنّها
     تحلّ مشكلةً ذكرها بنفسه: القبّعةُ البيضاء كانت **أسطعَ من الوجه** فتسرق
     البطولةَ من العينين — والبيجُ الدافئ يعيدها إليهما. */
  --np-hood:#A9ADB7; --np-line:#252933;
  --np-face:#F2EEE5; --np-eye:#22252B; --np-limb:#9BA0AA;
  /* لا `--np-glow`: ميجو بلا كتابٍ فبلا توهّجٍ خلفه. */
  --np-shade:rgba(0,0,0,.12);
  /* أوراقٌ **أوضحُ وأزهى**: كان الأخضرُ باهتاً فذاب في الرماديّ. */
  --mj-leaf:#67B84F; --mj-leaf-2:#3E7A2E; --mj-twig:#C0A171;
  --mj-earin:#F4D2D2;
  /* قبّعةٌ **ورقيّة**: أبيضُ مسطَّحٌ بلا تدرّج — طلبُ المالك. */
  --mj-hat:#F3E3B4; --mj-pad:#7A7F8A;
  --cp-blink:6.8s;          /* كوالا: أبطأُ الثلاثة رمشاً */
}
[data-theme="dark"] .cp-ch-mijo{
  /* ⚠️ ليس `#171A22`: كان يساوي أرضيّةَ الصفحة (#15191e) بتبايُن **١٫٠١** —
     أي بلا حدٍّ في الوضع الداكن. و`#333A45` يرفعه إلى ١٫٥٧ ويبقى ٤٫٤ على
     الفرو، فيُقرأ الحدُّ خارجاً وداخلاً. */
  --np-hood:#9BA1AC; --np-line:#333A45;
  --np-face:#E6E1D6; --np-eye:#15181D; --np-limb:#8D939E;
  --np-shade:rgba(0,0,0,.34);
  --mj-leaf:#5CA645; --mj-leaf-2:#376A26; --mj-twig:#A98D62;
  --mj-earin:#DDB9B9;
  --mj-hat:#DCCB9C; --mj-pad:#6A6F79;
  --cp-blink:6.8s;
}
/* طرفُ الأذن الداخليّ ورديٌّ خفيف — دفءٌ اقترحه المالك، وهو تشريحيٌّ صادق */
.mj-earin{fill:var(--mj-earin); opacity:.85}
.mj-fur{fill:none; stroke:var(--np-line); stroke-width:1.8; stroke-linecap:round; opacity:.5}
.mj-pad{fill:var(--mj-pad)}
.mj-pad2{fill:var(--mj-pad)}
.mj-brow{fill:none; stroke:var(--np-line); stroke-width:2.4; stroke-linecap:round; opacity:.75}
/* ⚠️ لا `mj-cheek`: قرأها المالك مكياجاً وميجو ولد. والمضغُ يُقرأ من حركة
   الفكّ نفسِه — وهي الأصدقُ تشريحيّاً على كلّ حال. */
.mj-lid{fill:var(--np-hood); stroke:var(--np-line); stroke-width:2; stroke-linejoin:round}
.mj-twig2{fill:none; stroke:var(--mj-twig); stroke-width:2.4; stroke-linecap:round}
.mj-d{font:900 17px/1 system-ui,-apple-system,"Segoe UI",sans-serif;
  fill:var(--np-line); letter-spacing:0; -webkit-user-select:none; user-select:none}
/* أنفٌ أصغرُ ١٨٪ وأنعم، وبريقٌ صغيرٌ يُعطيه عمقاً بلا تدرّجٍ حقيقيّ */
.mj-nose{fill:var(--np-eye); stroke:var(--np-line); stroke-width:2.6}
.mj-nosehl{fill:#fff; opacity:.26}
/* ظلٌّ خفيفٌ أسفل القبّعة — يربطها بالرأس فلا تُقرأ موضوعةً فوقه */
.mj-hatsh{fill:var(--np-line); opacity:.15}
.mj-mouth{fill:none; stroke:var(--np-line); stroke-width:3; stroke-linecap:round}
/* ⚠️ سُمكُ الحدّ **موحَّدٌ** حول الصورة الظِّلّيّة كلِّها (٣٫٤): الفروُ والوجهُ
   والأطرافُ والقبّعة. والتفاصيلُ الداخليّة أرفعُ عمداً — وذاك تدرّجٌ مقصود
   لا تفاوتٌ عشوائيّ، وهو أسلوبُ تمائم المشاريع البرمجيّة. */
.mj-hat{fill:var(--mj-hat); stroke:var(--np-line); stroke-width:3.4; stroke-linejoin:round}
.mj-seam{fill:none; stroke:var(--np-line); stroke-width:1.6; stroke-linecap:round; opacity:.34}
.mj-twig{fill:none; stroke:var(--mj-twig); stroke-width:3.2; stroke-linecap:round}
.mj-lf{fill:var(--mj-leaf); stroke:var(--mj-leaf-2); stroke-width:1.8; stroke-linejoin:round}
.mj-lv{fill:none; stroke:var(--mj-leaf-2); stroke-width:1.3; stroke-linecap:round; opacity:.8}

/* ── الخطُّ الزمنيُّ الواحد: خمسُ قَضْماتٍ ثمّ غصنٌ فارغٌ ثمّ إعادة ─────────
   ⚠️ لماذا CSS لا JS: السلوكُ **ذو حالة** (عدّادُ أوراقٍ يتناقص ثمّ يُعاد)،
   وهو أوّلُ ما يدفع نحو مؤقّتٍ في JS. لكنّ المؤقّت يعني حساباً دائماً ما دام
   الرفيقُ ظاهراً، وإيقافاً يدويّاً عند `cp-quiet` وعند `prefers-reduced-motion`.
   والحلقةُ الواحدة تُعطي السلوكَ كلَّه مجّاناً: عند حدّ الدورة تعود الأوراقُ
   من تلقائها — و«يُعيدها حين يحرّك الغصن مرّةً أخرى» هو **حدُّ الحلقة نفسُه**.

   ⚠️ ولكلّ ورقةٍ `@keyframes` خاصّةٌ بالمدّة نفسها، ولا `animation-delay`:
   التأخيرُ يزيح دورةَ الورقة كلَّها، فتعود كلُّ ورقةٍ في لحظةٍ مختلفة ويسقط
   شرطُ «الغصن يفرغ» — وهو جوهرُ الطلب. */
.mj-branch{transform-box:view-box; transform-origin:92px 104px; animation:mj-branch 11s ease-in-out infinite}
@keyframes mj-branch{
  0%,4%{transform:rotate(0deg)}
  8%{transform:rotate(-52deg) translate(-2px,9px)}
  14%,22%{transform:rotate(0deg)}
  26%{transform:rotate(-52deg) translate(-2px,9px)}
  32%,40%{transform:rotate(0deg)}
  44%{transform:rotate(-52deg) translate(-2px,9px)}
  50%,58%{transform:rotate(0deg)}
  62%{transform:rotate(-52deg) translate(-2px,9px)}
  68%,76%{transform:rotate(0deg)}
  80%{transform:rotate(-52deg) translate(-2px,9px)}
  86%,100%{transform:rotate(0deg)}}
.mj-leaf{transform-box:fill-box; transform-origin:0 50%}
.mj-l1{animation:mj-eat1 11s steps(1,end) infinite}
.mj-l2{animation:mj-eat2 11s steps(1,end) infinite}
.mj-l3{animation:mj-eat3 11s steps(1,end) infinite}
.mj-l4{animation:mj-eat4 11s steps(1,end) infinite}
.mj-l5{animation:mj-eat5 11s steps(1,end) infinite}
@keyframes mj-eat1{0%,9%{opacity:1}10%,100%{opacity:0}}
@keyframes mj-eat2{0%,27%{opacity:1}28%,100%{opacity:0}}
@keyframes mj-eat3{0%,45%{opacity:1}46%,100%{opacity:0}}
@keyframes mj-eat4{0%,63%{opacity:1}64%,100%{opacity:0}}
@keyframes mj-eat5{0%,81%{opacity:1}82%,100%{opacity:0}}
/* المضغُ: حلقةٌ أسرعُ على الفكّ. ٢٪ لا أكثر — الأكبرُ ارتجافٌ لا مضغ. */
.mj-jaw{transform-box:view-box; transform-origin:60px 68px; animation:mj-chew 1.05s ease-in-out infinite}
@keyframes mj-chew{
  0%,100%{transform:translateY(0) scaleY(1)}
  50%{transform:translateY(.9px) scaleY(.975)}}
/* تسكن أثناء البثّ كبقيّة الحركة */
.cp-quiet .mj-branch,.cp-quiet .mj-jaw,.cp-quiet .mj-leaf{animation:none}
/* الاحتفال: قَضْمةٌ سريعة */
.cp-cheer .mj-jaw{animation:mj-chew .34s ease-in-out 5}

/* ── «أدّون» — كوكاتو ورديّة ────────────────────────────────────────────
   لونٌ رابعٌ مستقلّ: أرومةُ خضراء، وذيبو أبيضُ وأسود، وميجو رماديّ،
   وأدّون ورديّة. فالأربعةُ تُميَّز من لمحةٍ في قائمة الاختيار.
   والحدُّ `#7E2A4A`: تبايُنُه ٤٫٠٧ على الجسم و٩٫٠٦ على الأرضيّة. */
.cp-ch-addoun{
  /* اللوحةُ مقيسةٌ من `اديان 2.png` (سيادةُ اللون في كلّ منطقة).
     ⚠️ ثمّ **ثلاثُ أُسَرِ لونٍ لا خمس**: قِيس أنّ لكلٍّ من الشخصيّات الثلاث
     أُسرتَي لون، ولأدّون كانت خمس (ورديّ، مرجانيّ، ذهبيّ، أردوازيّ،
     فيروزيّ) — فلا لونَ يملك أكثرَ من ١٥٪ من مساحتها بينما لكلّ أختٍ لونٌ
     يملك ٢٥–٥٠٪. وهذا معنى «عناصرُ تتنافس»: كثرةُ الأصوات لا كثرةُ الأشكال.
     ⚠️ **وتصحيحُ فرضيّةٍ**: ظننتُ العلاجَ إسقاطَ المرجانيّ أُسرةً مستقلّة،
     فأسقطتُه — ثمّ أظهرت البياناتُ أنّ الأُسرة الورديّة تملك ٤٧٫٥٪ أصلاً،
     وأنّ أكبرَ لونٍ عندها هو **الحدُّ نفسُه** (١٥٪) وأكبرَ حشوٍ ٣٫٥٪ فقط.
     فالعلّةُ **تفتّتُ الحشو** لا كثرةُ الأُسَر. فرُدّ المرجانيُّ (يُدفّئ
     أطرافَ الريش والقدمين، ومساحتُه صغيرة) وسُطّح البدنُ والصدرُ بدله —
     فصار أكبرُ لونٍ حشواً (١٧٪) لا حدّاً، وأعلى ثلاثةٍ ٢٥٪→٣٧٪.
     وعُمّق الورديُّ درجةً: وسيطُ قيمتها كان ١٧٣ — الأفتحَ بين الأربع، أي
     الأضعفَ حضوراً على خلفيّةٍ فاتحة. */
  --np-hood:#FAB4C4; --np-line:#7E2A4A;
  --np-face:#FDD2D8; --ad-belly:#FDE6E9; --ad-deep:#F9639A;
  --np-eye:#3A2233; --np-limb:#F7A2B8;
  --np-shade:rgba(126,42,74,.14);
  --ad-coral:#FBA184;
  --ad-cheek:#F98CAE;
  --ad-beak:#5E4A63; --ad-beak2:#41344A;
  --ad-foot:#F79578;
  /* ⚠️ سُلَّمُ الريشة كلُّه **تحت** قيمة الرأس (١٤٥): كان طرفُها ١٨١ أي
     **أفتحَ من الرأس** فيذوب فيه، ووسطُها ١٠٨ (فرقُ ٣٧ فقط). فاختبارُ
     التدرّج الرماديّ أظهر التوقيعَ يختفي. وهي الآن ٢٨ و٧٠ و١٢٢. */
  --ad-gold:#C69528; --ad-gold2:#D9B24A; --ad-gold3:#7E5410;
  --ad-hw:#48546A; --ad-hw2:#252D3A; --ad-hl:#1B2129;
  /* ⚠️ الكأسُ كان **هدفَ رماية**: ثلاثُ حلقاتٍ متمركزةٍ متساويةُ الوزن،
     ومركزُه الفاتحُ (#C9D4DE، قيمة ٢١٠) يُقرأ **عيناً ثالثة** على كلّ
     جانب — والشخصيّةُ فيها زوجُ عيونٍ أصلاً. فالوسادةُ صارت **أدكنَ من
     الحُقّ** لا أفتح، والحلقةُ الفيروزيّةُ خطاً رفيعاً بينهما: حُقٌّ داكنٌ
     وحافّةٌ مضيئةٌ ومُشغِّلٌ غائر — لا حلقاتٌ متساوية. */
  --ad-hr:#22CFBB; --ad-hd:#1C2430;
  --cp-blink:4.2s;
}
[data-theme="dark"] .cp-ch-addoun{
  --np-hood:#E4A5B5; --np-line:#6B2340;
  --np-face:#EDC1C9; --ad-belly:#EFD1D6; --ad-deep:#DE5786;
  --np-eye:#2C1A27; --np-limb:#E195AB;
  --np-shade:rgba(0,0,0,.34);
  --ad-coral:#E29076;
  --ad-cheek:#E37EA0;
  --ad-beak:#503F56; --ad-beak2:#352A3C;
  --ad-foot:#DC876C;
  --ad-gold:#B28621; --ad-gold2:#C6A044; --ad-gold3:#6F4A0E;
  --ad-hw:#3E4A5E; --ad-hw2:#1F2733; --ad-hl:#151A21;
  --ad-hr:#1FBCAA; --ad-hd:#161C26;
  --cp-blink:4.2s;
}
/* نُقَطُ التدرّج — هنا لأنّ `var()` ممنوعٌ في سمات الرسم التقديميّة */
/* `ad-s4` و`ad-s6` أُزيلتا مع تدرّجَيهما الميّتَين `b` و`c` (2026-09-01). */
.ad-s5{stop-color:var(--ad-belly)}
.ad-s7{stop-color:var(--np-limb)}   .ad-s8{stop-color:var(--ad-coral)}
.ad-k1{stop-color:var(--ad-cheek); stop-opacity:.55}
.ad-k2{stop-color:var(--ad-cheek); stop-opacity:.26}
.ad-k3{stop-color:var(--ad-cheek); stop-opacity:0}
/* ── قواعدُ بدن أدّون ─────────────────────────────────────────────────
   ⚠️ **الحدُّ للظِّلّ الخارجيّ وحده.** بلّغ المالك أنّ التصميم يُقرأ «أشكالاً
   هندسيّةً منفصلة» لا «كُتَلَ ريشٍ متداخلة» — وأكبرُ سببٍ لذلك أنّ كلَّ قطعةٍ
   كانت تحمل حدَّها الخاصّ، فيرسم الحدُّ حدودَ القطع بدل أن يرسم الطائر.
   فالريشُ الداخليُّ هنا بالنَّبْرة والتدرّج، بلا خطٍّ البتّة. */
.ad-body{fill:var(--np-hood); stroke:var(--np-line); stroke-width:3.4; stroke-linejoin:round}
/* ⚠️ **٢٫٩ ← ٣٫٤** (2026-09-01) — وزنُ الأُسرة. كان أدّونُ الوحيدَ بين الخمسة
   بلا حدِّ ٣٫٤: أرم وذيبو وميجو وأوزيس كلُّهم عليه (وأوزيسُ ٥٫٦ لظِلّه). وحين
   يتقلّص الرفيقُ على الهاتف إلى ٧٩٪ (‏112px ← 88px عند `max-width:520px`)
   يهبط حدُّه إلى ١٫٩٦px الفعليّة بينما يبقى حدُّ إخوته ٢٫٣ — فيبهت ظِلُّه
   وحدَه. ولا يخالف هذا «الحدُّ للظِّلِّ الخارجيّ وحده»: هو الظِّلُّ الخارجيُّ
   نفسُه، لا حدٌّ داخليٌّ جديد. */
.ad-breast{fill:var(--np-face); stroke:none}
.ad-flame{stroke:none}
/* الخصلة: شكلٌ واحدٌ بحدِّه — تُرسَم قبل البدن فيُخفي الرأسُ قاعدتَها */
.ad-plume{stroke:var(--np-line); stroke-width:2.8; stroke-linejoin:round}
/* شريطُ القاعدة: نبرةٌ أنثويّةٌ بلا استبدال الهويّة */
.ad-ribbon{fill:var(--ad-deep); stroke:var(--np-line); stroke-width:2.3; stroke-linejoin:round}
/* ظِلُّ الريشة على الجبهة — يُخرجها من سطح الرأس إلى فوقه */
/* الجفنُ العلويّ: أدكنُ من الحدقة قليلاً — عمقٌ بلا تغيير حجم العين */
/* شقوقُ الريشة — أخفتُ من العِرق فلا تزدحم */
/* الحلقةُ الذهبيّة عند قاعدة الخصلة — هي ما يقول «ريشةُ قلمٍ» لا «عُرف» */
/* ── نُقَطُ تدرّج الخصلة الذهبيّة ─────────────────────────────────────
   ⚠️ الذهبُ لا الورديّ: بلّغ المالك أنّ الشخصيّة «لا تُعرَف من ظِلّها»، وأنّ
   العُرفَ يجب أن يتميّز. واللونُ المخالفُ يفعل ما يفعله الظِّلّ: يجعل الخصلةَ
   أوّلَ ما تُرى، ويقول «ريشةُ قلمٍ» بلا كلمة. */
.ad-q1{stop-color:var(--ad-gold3)}
.ad-q2{stop-color:var(--ad-gold)}
.ad-q3{stop-color:var(--ad-gold2)}
/* ── العمق: ظِلٌّ متلاشٍ تحت الرأس، ووهجٌ أعلاه ────────────────────────
   «التصميمُ مسطّحٌ جدّاً» — وهذان يعطيان الحجمَ بلا خطٍّ واحدٍ جديد،
   فلا يزداد ازدحامُ الحدود ولا يتأثّر الظِّلُّ الخارجيّ. */
/* ⚠️ **‏.16 ← .30** (2026-09-01) — وأصلُ شكوى المالك: «الرأسُ مشوّهٌ وضعيفٌ
   على الهاتف، وغيرُ متناسق». وأدّونُ **وحدَه** بين الخمسة رأسُه ليس كتلةً
   مستقلّةً بحدِّها: بدنُه مسارٌ واحد (رأسٌ ٧٦ · خصرٌ ٤٨ · جسدٌ ٦٠)، فلا يفصل
   الرأسَ عن الجسد إلّا شيئان — انحناءةُ الخصر، وظِلُّ الذقن هذا. وكان ١٦٪
   على مدىً ١٦ وحدةً فقط؛ فعند ٨٨px تصير الإشارةُ كلُّها ≈١٫٥px بتباينٍ
   ١٦٪ — أي دون عتبة القراءة، فيندمج الرأسُ في الكتلة الورديّة.
   ⚠️ ولم يُضَف خطٌّ: «العمقُ بالقيمة لا بالخطوط» قرارُ المالك في هذا الرسم
   نفسِه، والقيمةُ هنا رُفعت لا استُبدلت. */
.ad-h1{stop-color:var(--np-line); stop-opacity:.30}
.ad-h2{stop-color:var(--np-line); stop-opacity:0}
.ad-shade2{stroke:none}
/* ظِلُّ جذر الذيل على الجسد — عمقٌ بلا حدٍّ جديد */
.ad-troot{fill:var(--np-line); opacity:.11}
/* وهجُ الصدر — المساحةُ الكبرى في الشخصيّة، وتُقرأ فارغةً بلا هذا */
/* بريقٌ نجميٌّ في العين — لمسةُ الأسلوب اللطيف */
/* حدٌّ أرفع: على شكلٍ نحيلٍ يشغل الحدُّ الغليظُ ثُلثَ مساحته */
.ad-tailm{stroke:var(--np-line); stroke-width:2.2; stroke-linejoin:round}
/* ⚠️ العمقُ بالقيمة لا بالخطّ: شريحتان داكنتان **بلا حدّ** تُنشئان ثلاثَ
   طبقاتٍ في كتلةٍ واحدة — الأعلى أدكنُ فهي أبعدُ، والأسفلُ في الضوء.
   والخطُّ كان سيُفتّت الظِّلَّ ويزيد الحجمَ ويُضيف صنفاً بلا مقابل. */
.ad-tsh1{fill:var(--ad-deep); opacity:.34}
.ad-tsh2{fill:var(--ad-deep); opacity:.17}
.ad-down{fill:none; stroke:var(--ad-belly); stroke-width:2.2; stroke-linecap:round; opacity:1}
/* الطبقةُ الثانية تحت الجناح — تظهر حافّتُها فقط فتُقرأ ريشاً مضاعفاً */
/* عناقيدُ الريش الخفيفة أسفلَ الخدّ */
/* الريشةُ المدسوسة: عاجيّةٌ بعِرقٍ ذهبيّ — تُقرأ قلماً بلا أن تُزاحم الوجه */
.ad-cheek{stroke:none}
.ad-lash{fill:none; stroke:var(--np-eye); stroke-width:1.9; stroke-linecap:round}
.ad-wtip{ stroke:var(--np-line); stroke-width:2.4; stroke-linejoin:round}
.ad-wing{stroke:var(--np-line); stroke-width:2.5; stroke-linejoin:round}
/* عمقُ الجناح بالقيمة — الشريحةُ العليا أبعدُ فهي أدكن */
.ad-wsh1{fill:var(--ad-deep); opacity:.26}
.ad-wsh2{fill:var(--ad-deep); opacity:.13}
/* ⚠️ الميلُ للخارج **مخبوزٌ في إحداثيّات المسار** لا بـ`transform` في CSS:
   قِيس بالرسم أنّ `transform-origin` بالبكسل على عنصرِ SVG يُزيح الجناحَ ١٢
   وحدةً للداخل (‏`transform-box` يختلف بين المحرّكات: view-box مقابل
   fill-box). فالهندسةُ في المسار لا تكذب على أيّ محرّك. */
/* ⚠️ أُزيلت هنا قاعدةُ `.ad-tail` مكرّرةٌ بحدٍّ 2.6 (2026-09-01): تليها قاعدةٌ
   بالتخصيص نفسِه بحدٍّ 3 وبالخصائص نفسِها، فتفوز — والأولى ميّتةٌ صامتة. */
.ad-vane{fill:none; stroke:var(--ad-deep); stroke-width:1.8; stroke-linecap:round; opacity:.38}
.ad-tail{fill:var(--ad-deep); stroke:var(--np-line); stroke-width:3; stroke-linejoin:round}
.ad-foot{fill:var(--ad-foot); stroke:var(--np-line); stroke-width:2.1; stroke-linejoin:round}
/* ⚠️ وكذلك `.ad-beak` بحدٍّ 2.6: تليها نظيرتُها بحدٍّ 2.2 فتفوز. */
/* ── المنقارُ الببغائيّ: ثلاثُ طبقاتٍ تصنع الخُطّاف ────────────────────
   الفكُّ السفليّ أدكنُ ويقع **خلف** العلويّ فلا يُرى إلّا طرفاه — وهو ما
   يرفع خطَّ الفكّين ويترك ما تحته خُطّافاً. والشمعةُ أفتحُ بفتحتَي أنف. */
.ad-jaw{fill:var(--ad-beak2)}
.ad-beak{fill:var(--ad-beak); stroke:var(--ad-beak2); stroke-width:2.2; stroke-linejoin:round}
.ad-nos{fill:var(--ad-beak2); opacity:.75}
/* ── سمّاعةُ الرأس: عتادٌ داكنٌ بحلقةٍ ذهبيّةٍ تُقفّي الريشة ──────────────
   اللونُ لا يُنافس الذهبَ بل يُقفّيه: جسمٌ برقوقيٌّ داكنٌ من عائلة الحدّ
   نفسِها فلا يبدو جسماً غريباً، وحلقةٌ ذهبيّةٌ واحدةٌ تربطه بالريشة. */
/* ⚠️ **حدُّها خاصٌّ بها** (`--ad-hl`) لا حدُّ الشخصيّة: تباينُ البرقوقيّ مع
   الأردوازيّ ١٫١٤ — أي حدٌّ لا يُرى. والجهازُ يُقرأ جهازاً لأنّه ليس مصنوعاً
   من مادّة الطائر، فحدُّه أردوازيٌّ أعمق. وحافّتُه الخارجيّةُ يحملها التباينُ
   مع الرأس (٦٫٦٧) لا الحدُّ — وهو نفسُ ما يفعله المنقارُ في هذا الملفّ. */
.ad-hband{stroke:var(--ad-hl); stroke-width:2.2; stroke-linejoin:round}
.ad-hcup{stroke:var(--ad-hl); stroke-width:2.2}
/* لمسةُ اللون الواحدة: حلقةٌ فيروزيّةٌ ساطعة — لغةُ السمّاعات الحديثة نفسُها،
   جسمٌ مطفأٌ ولمسةٌ واحدة. وتباينُها مع الجسم ٥٫٢٧ فتُرى في التدرّج الرماديّ
   ولعمى الألوان، بخلاف الذهب: الذهبُ والفيروزيُّ متساويان إضاءةً (١٫٠٠). */
.ad-hring{fill:none; stroke:var(--ad-hr); stroke-width:1.6}
.ad-hpad{fill:var(--ad-hd)}
.ad-g1{stop-color:var(--ad-hw)}
.ad-g2{stop-color:var(--ad-hw2)}
/* ⚠️ أُزيلت هنا `ad-cf1` و`ad-cf2` و`ad-feather` (2026-09-01): ثلاثُ قواعدَ
   لا يحملها شكلٌ واحدٌ في الرسم، وكلُّها تُحيل إلى `--ad-cheek1` و`--ad-cheek2`
   و`--ad-crest2` — ولا وجودَ لأيٍّ منها في اللوحة (المعرَّفُ `--ad-cheek` فقط).
   والخدُّ الحيُّ اليوم هو التدرّجُ الدائريُّ `k` (`ad-k1..k3`) لا هذه. */
.ad-rib{fill:none; stroke:var(--ad-gold); stroke-width:2.4; stroke-linecap:round}
.ad-nib{fill:var(--ad-gold); stroke:var(--np-line); stroke-width:1.8; stroke-linejoin:round}

/* ── تنظيفُ الريشة: محطّتان ونقرات ─────────────────────────────────────────
   ⚠️ **الريشةُ ترتفع نحو المنقار، لا العكس** — وهذا قرارٌ هندسيٌّ لا ذوقيّ:
   المنقارُ قريبٌ من مركز دوران الرأس، فتدويرُ الرأس ٢٥° يُحرّك طرفَه أربعَ
   وحداتٍ فقط ولا يبلغ الريشة؛ وإزاحتُه ٢٢ وحدة تفصله عن الجسد. فالرأسُ يميل
   ١٠° والجناحُ يرفع القلم — وهكذا يفعل الطائرُ فعلاً.

   والمحطّتان «الوسط» ثمّ «الأعلى» بنصّ الطلب، وثلاثُ نقراتٍ عند كلٍّ.
   والحركاتُ الثلاث (الرأس · القلم · المنقار) على **المدّة نفسها** فتتزامن:
   لو اختلفت لَنقر المنقارُ والريشةُ بعيدة. */
/* ── حركتُها: **رفعُ العُرف وخفضُه** ─────────────────────────────────
   ⚠️ الشخصيّاتُ الثلاثُ الأخرى تُميل رؤوسَها أو تهزّ أذيالَها. ورفعُ العُرف
   سلوكٌ لا يفعله إلّا الكوكاتو — فهو ما يجعل حركتَها تُعرَّف بها وحدها،
   لا نسخةً من حركةِ غيرها بسرعةٍ أخرى.
   وقد كان القلمُ يُنظَّف بالمنقار؛ فلمّا حُذف (بطلب المالك) لم أُبقِ إيماءةً
   بلا هدفٍ تُقلّد إمالةَ ميجو. */
/* ⚠️ **`transform-box:view-box` شرطٌ لا زينة على كلّ `transform-origin` بالبكسل**
   (2026-09-01). في SVG يختلف الافتراضُ بين المحرّكات: `view-box` في المواصفة
   الحديثة، و`fill-box` في محرّكاتٍ أقدم (وبعضُ متصفّحات الهاتف). ومع `fill-box`
   يُقاس `62px 38px` من **صندوق العنصر نفسِه** لا من إطار الرسم — فيدور العُرفُ
   والمنقارُ حول محورٍ مختلفٍ تماماً، ويبدو الشكلُ مزاحاً ومتحرّكاً خطأً.
   وهذا ما بلّغه المالك: «الشكلُ يختلف على الهاتف». وأوزيس كان يضبطه صراحةً
   (`oz-spear`) — فالمعيارُ قائمٌ ولم يُطبَّق على البقيّة. */
.ad-preen{transform-box:view-box; transform-origin:64px 96px;animation:ad-head 5.4s ease-in-out infinite}
@keyframes ad-head{0%,64%,100%{transform:translateY(0)}30%,44%{transform:translateY(-1.4px)}}

.ad-crestg{transform-box:view-box; transform-origin:62px 38px;animation:ad-crest-up 7.6s ease-in-out infinite}
/* متراخيةٌ كريشةٍ في الهواء: ميلٌ صغيرٌ وطوفانٌ بدل رفعةٍ حادّة */
/* ⚠️ السَّعةُ ٥° لا ٢٫٦°: عند ٢٫٦° كان طرفُ الريشة يتحرّك **دون بكسلٍ واحد**
   في العرض الحقيقيّ فلا تُرى الحركةُ أصلاً (سقط  في المِسبار).
   والبطءُ محفوظٌ في المدّة ٧٫٦ث لا في صِغَر السَّعة — «ريشةٌ في الهواء»
   تطوف ببطء، لا تكاد تتحرّك. */
@keyframes ad-crest-up{0%,100%{transform:rotate(0deg) translateY(0)}
  26%{transform:rotate(-5deg) translateY(-2px)}
  54%{transform:rotate(2.4deg) translateY(-.6px)}
  78%{transform:rotate(-1.8deg) translateY(-1.4px)}}

  64%,100%{transform:rotate(0deg)}}

.ad-beakg{transform-box:view-box; transform-origin:64px 60px;animation:ad-peck 5.4s linear infinite}
@keyframes ad-peck{0%,30%{transform:rotate(0deg)}34%{transform:rotate(5deg)}
  38%,44%{transform:rotate(0deg)}48%{transform:rotate(5deg)}52%,100%{transform:rotate(0deg)}}

.cp-quiet .ad-preen,.cp-quiet .ad-crestg,.cp-quiet .ad-beakg{animation:none}

/* ── تمايزُ التصرّف ────────────────────────────────────────────────────────
   طلبَ المالك أن تتميّز كلُّ شخصيّةٍ «بالرسم والتصرّف». فمدى النظر والميل في
   `traits` داخل `companion.js`، والحركةُ الساكنة هنا: أرمُ تتمايل شرّابتُها،
   وثعلوبي **يهزّ ذيله**. وهو فرقٌ يُقرأ من طرف العين بلا نصٍّ يشرحه. */
/* ── هزّةُ الذيل ───────────────────────────────────────────────────────────
   ⚠️ ثلاثةُ قراراتٍ، وكلٌّ منها يُصلح عيباً في المحاولة السابقة:

   ① **حول موضع السكون في الجهتين** (−٣٫٢° … +٤٫٨°) لا من الصفر إلى جهةٍ
      واحدة. الاتّجاهُ الواحد يُقرأ ارتعاشاً؛ والعبورُ على موضع السكون هو ما
      يجعل الذيل «يقترب ويبتعد» كما وصف المالك حركةَ القطّ.
   ② **الدورانُ حول القاعدة** (٧٨,١١٨) لا حول المركز: فيتحرّك الطرفُ نحو
      سبعين ضِعفَ ما تتحرّكه القاعدة — وهي فيزياءُ الذيل نفسها.
      ⚠️ والسَّعةُ رُفعت من ٨° إلى **١٢°** بعد أن بلّغ المالك أنّه لا يراها:
      نصفُ القطر ٦٦ وحدة، فـ٨° = ٧٫٩px وحدها — دون عتبة الالتقاط بطرف
      العين على شاشةٍ فيها نصٌّ يتحرّك. و١٢° = ١١٫٩px: يُرى بلا أن يَشغل.
   ③ **٣٫٢s وأربعُ محطّات** لا اثنتين: المحطّتان تُنتجان بندولاً آليّاً،
      والمحطّاتُ غيرُ المتناظرة تُنتج حركةً حيّة. والبطءُ مقصود — السرعةُ
      تسرق الانتباه من الدرس، وهي القاعدة التي تحكم هذا الرفيق كلَّه.

   وهي `transform` وحدها على مجموعةٍ صغيرة — لا `d` ولا `x`، فلا إعادةَ
   تخطيطٍ في كلّ إطار. */
.fx-tailg{transform-box:view-box; transform-origin:78px 118px; animation:fx-wag 2.9s ease-in-out infinite}
@keyframes fx-wag{
  0%{transform:rotate(-4.8deg)}
  28%{transform:rotate(5deg)}
  50%{transform:rotate(7.2deg)}
  78%{transform:rotate(-2.4deg)}
  100%{transform:rotate(-4.8deg)}}
/* ⚠️ يسكن أثناء البثّ كبقيّة الحركة — الحركةُ هي ما يسرق الانتباه لا الوجود. */
.cp-quiet .fx-tailg{animation:none}
/* الاحتفال: الهزّةُ نفسها أسرعَ ثلاثَ مرّات — لا حركةٌ أخرى تُتعلَّم */
.cp-cheer .fx-tailg{animation:fx-wag .62s ease-in-out 3}
/* الأذنان والذيل — أصنافُ ثعلوبي وحده. والذيلُ **خطّان**: عريضٌ بلون الحدّ
   تحته وأضيقُ بلون الفرو فوقه، فينتج حدٌّ متساوٍ حول منحنٍ مفتوح. */
.fx-ear{fill:var(--fx-ear); stroke:var(--np-line); stroke-width:3.4; stroke-linejoin:round}
.fx-earin{fill:var(--fx-in); stroke:var(--np-line); stroke-width:2.4; stroke-linejoin:round}
/* ⚠️ مسارٌ **مغلقٌ واحد** لا خطّان: الخطّان بعرضٍ ثابتٍ يحتاجان مضلَّعاً
   منفصلاً للطرف، والدَّرزُ بينهما يُقرأ قَطْعاً (بُلِّغ). والمسارُ المغلق
   يتيح أيضاً حافّةً متعرّجةً وتناقصاً نحو الرأس — وهما ما يُشبِهان الفرو. */
/* ⚠️ القسمةُ **ثلثان أسودُ من جهة الجسد وثلثٌ أبيضُ مدبَّبٌ عند الطرف**،
   بينهما فاصلٌ زجزاجيّ. وهي قسمةُ الذئب الحقيقيّ — وكانت مقلوبةً عندي.
   والخشونةُ من **نتوءاتٍ صغيرةٍ متباعدةٍ على الحدّ** لا من شعيراتٍ مفردة:
   الشعيراتُ عند ١١٢px نقاطٌ عشوائيّة تُوسّخ الرسم ولا تُقرأ فروا. */
.fx-tailf{fill:var(--np-hood); stroke:var(--np-line); stroke-width:3.4; stroke-linejoin:round}
.fx-tailb{fill:var(--fx-tip); stroke:var(--np-line); stroke-width:3; stroke-linejoin:round}
/* الخَطْمُ والشاربان: خطوطٌ لا كتل — الكتلةُ تُقرأ رقعةً ملصقة */
.fx-muz{fill:none; stroke:var(--np-line); stroke-width:2.6; stroke-linecap:round}
.fx-whisk{fill:none; stroke:var(--np-line); stroke-width:2.2; stroke-linecap:round; opacity:.8}
/* شعيراتُ داخل الأذن — من المرجع */
.fx-earf{fill:none; stroke:var(--np-line); stroke-width:2; stroke-linecap:round}
.fx-nose,.fx-mouth{fill:var(--np-eye)}

/* ── قائمةُ اختيار الشخصيّة (الإعدادات) ───────────────────────────────────
   بطاقةٌ لكلّ شخصيّة: معاينةٌ حيّة (ترمش وتتمايل شرّابتُها) + اسمٌ + قصّة.
   والمعاينةُ رسمُ الشخصيّة نفسه لا صورة — فلا تنجرف عنها أبداً. */
.cp-pick{display:flex; flex-direction:column; gap:8px; margin-top:10px}
.cp-pick-i{display:flex; gap:11px; align-items:flex-start; text-align:start; width:100%;
  background:var(--bg-soft); border:2px solid var(--border); border-radius:14px;
  padding:10px 12px; cursor:pointer; font:inherit; color:inherit;
  touch-action:manipulation; -webkit-tap-highlight-color:transparent;
  transition:border-color .15s, background .15s, transform .08s}
.cp-pick-i:hover{background:var(--hover)}
/* أثرُ ضغطٍ مرئيّ: زرٌّ بلا استجابةٍ لحظيّة يُقرأ معطّلاً */
.cp-pick-i:active{transform:scale(.985); background:var(--hover)}
.cp-pick-i.on{border-color:var(--brand); background:color-mix(in srgb,var(--brand) 8%,transparent)}
.cp-pick-i:focus-visible{outline:2px solid var(--brand); outline-offset:2px}
/* ⚠️ ثلاثةُ قراراتٍ في هذا الصنف، كلُّها من شكوى «الأزرار لا تعمل جيّداً»:
   ① `pointer-events:none` — الرسمُ داخل الزرّ، ولمسةٌ تقع على مسارٍ في SVG
      تجعل `e.target` عنصرَ SVG. و`closest` يصعد إلى الزرّ فيعمل النقر، لكنّ
      الفجواتِ الشفّافةَ بين المسارات ومناطقَ الحدّ تُنتج إصاباتٍ غيرَ متّسقة
      على اللمس. وإلغاءُ استقبال الحدث يجعل **الزرَّ كلَّه** هدفاً واحداً.
   ② **تجميدُ الحركة** — ثلاثُ معايناتٍ تحمل ١٨ حركةً دائمةً متزامنة (٤+٥+٩)
      فوق الرفيق الحيّ في الزاوية. وهي في القائمة **صورةٌ للاختيار** لا رفيقٌ
      يتحرّك، فالحركةُ هناك ضجيجٌ يزاحم القراءة ويُثقل هاتفاً متوسّطاً.
   ③ `touch-action:manipulation` — يُلغي تأخيرَ الـ٣٠٠ms وتكبيرَ النقرة
      المزدوجة، وهو أشهرُ سببٍ لإحساس «الزرّ بطيء» على الجوال. */
.cp-pick-fig{flex:0 0 auto; width:48px; pointer-events:none}
.cp-pick-fig svg{width:48px; height:55px; display:block; overflow:visible}
/* ⚠️ تجميدٌ **انتقائيّ** لا شامل. كان `.cp-pick-fig *{animation:none}` فجمّد
   كلَّ شيءٍ — ومن يبدّل الشخصيّات ينظر إلى المعاينات بالضبط، فرأى ثعلباً لا
   يهزّ ذيلَه وظنّ الحركةَ معطوبة (بلّغ). والحملُ الحقيقيّ من ميجو وحده:
   خمسُ أوراقٍ وغصنٌ وفكٌّ = ٧ من ١٨. فتُجمَّد `mj-*` وتبقى السِّمةُ المميّزة
   لكلّ شخصيّةٍ حيّةً في المعاينة: ذيلٌ يهتزّ · شرّابةٌ تتمايل · عينٌ ترمش. */
.cp-pick-fig [class*="mj-"]{animation:none !important}
.cp-pick-b{flex:1; min-width:0}
.cp-pick-n{font-weight:800; font-size:14.5px; color:var(--text)}
.cp-pick-s{font-size:12.5px; line-height:1.75; color:var(--muted); margin-top:3px}
.cp-pick-i.on .cp-pick-n{color:var(--brand)}

.cp{
  position:fixed;
  inset-block-end:calc(96px + env(safe-area-inset-bottom));
  inset-inline-end:14px;
  width:112px; z-index:40;                 /* +٢٥٪ — كانت صغيرةً في الواجهة */
  pointer-events:none;
  opacity:0; transform:translateY(10px) scale(.94);
  transition:opacity .3s ease, transform .34s cubic-bezier(.34,1.3,.5,1);
}
@media(min-width:681px) and (min-height:561px){
  /* مسافةٌ مريحة عن مربّع الإدخال والرفّ — لا ازدحام */
  /* ⚠️ كان يوضَع على بُعد «عرضِ الرفّ + 20px» من الحافّة، أي **داخل** العمود الأوسط
     تماماً — فيغطّي نصَّ البطاقةِ أو المنشور (رُئي في لقطة «أدوات الطالب»،
     مراجعة 2026-09-22). موضعُه الصحيحُ في فراغِ الرفّ نفسِه، لا على حدّه. */
  .cp{inset-block-end:26px; inset-inline-end:16px}
  .cp svg{width:96px; height:110px}
}
@media(max-width:1240px) and (min-width:681px){ .cp{inset-inline-end:18px} }  /* بلا عمودٍ ثالث حتّى 1240px */
/* في محادثة المكتبة: فوق شريط الإدخال (‏~72px) بهامش — لا على مربّع السؤال وزرّ الإرسال */
@media(min-width:681px) and (min-height:561px){ .cp.cp-lib{inset-block-end:calc(104px + env(safe-area-inset-bottom))} }
.cp-on{opacity:1; transform:none}
.cp svg{width:112px; height:129px; display:block; overflow:visible}

/* حدٌّ أسمك — هو ما يصنع الأسلوب الأيقونيّ (Nintendo / LINE Friends) */
.np-hood,.np-face,.np-limb,.np-book,.np-page{
  stroke:var(--np-line); stroke-width:3.4; stroke-linejoin:round
}
.np-hood{fill:var(--np-hood)}
.np-shine{fill:#fff; opacity:.45}
.np-face{fill:var(--np-face)}
.np-cheek{fill:var(--np-cheek); opacity:.92}
.np-pupil{fill:var(--np-eye)}
.np-gl{fill:#fff}
.np-mouth{fill:none; stroke:var(--np-eye); stroke-width:2.8; stroke-linecap:round}
.np-limb{fill:var(--np-limb)}
/* قبّعةُ التخرّج — سطحٌ أفتحُ من القاعدة فتُقرأ مجسّمةً بلا تدرّج */
.np-cap-top{fill:var(--np-cap); stroke:var(--np-line); stroke-width:3.2; stroke-linejoin:round}
.np-cap-base{fill:var(--np-cap-2); stroke:var(--np-line); stroke-width:3.2; stroke-linejoin:round}
.np-cap-btn{fill:var(--np-gold); stroke:var(--np-line); stroke-width:2}
.np-tass-str{fill:none; stroke:var(--np-tass-2); stroke-width:2.6; stroke-linecap:round}
.np-tass{fill:var(--np-tass); stroke:var(--np-tass-2); stroke-width:2}
.np-tass-f{fill:none; stroke:var(--np-tass); stroke-width:2.6; stroke-linecap:round}
.np-book{fill:var(--np-book); stroke:var(--np-bline); stroke-width:3.4; stroke-linejoin:round}
.np-page{fill:var(--np-page)}
.np-spine{fill:none; stroke:var(--np-bline); stroke-width:2.6; stroke-linecap:round}
/* توهّجٌ خفيفٌ جدّاً خلف الكتاب — «كأنّه يحمل معرفة» */
.np-glow{fill:var(--np-glow); filter:blur(6px)}
.np-mark{fill:none; stroke:var(--np-page); stroke-width:2.2; stroke-linecap:round;
  stroke-linejoin:round; opacity:.85}
/* ⚠️ أرنبُ ذيبو وحدَه: صُغِّر إلى ٠٫٦٧١ ليسع داخل غلاف الكتاب (كان يتجاوز
 * حافّتَه السفلى ٥٫١٦ وحدة). وحدُّ ٢٫٢ حولَ رسمٍ بهذا الصِّغَر يبتلع تفاصيلَه،
 * والمقياسُ الصرفُ يعطي ١٫٤٨ فيبهت. فـ١٫٧ وسطٌ مقيس: يبقى الخطُّ ظاهراً
 * والهامشُ داخل الإطار موجباً. */
.np-bun .np-mark{stroke-width:1.7}
/* حزمةُ صفحاتٍ لها سُمكٌ وحافّةٌ ذهبيّة — الكتابُ كان مسطّحاً يشبه صندوقاً */
.np-edge{fill:var(--np-gold); stroke:var(--np-line); stroke-width:3; stroke-linejoin:round}
/* الشارة: ورقةٌ **ذهبيّة** وحدها — الإطارُ الدائريّ أُزيل بطلب المالك */
.np-emblem{fill:var(--np-gold); stroke:var(--np-bline); stroke-width:1.6; stroke-linejoin:round}
.np-emvein{fill:none; stroke:var(--np-bline); stroke-width:1.15; stroke-linecap:round; opacity:.5}
/* شريطُ التأشير والنقاطُ الصغيرة على الغلاف — بلون الصفحة ليُقرآ عليه */
.np-ribbon{fill:var(--np-page); stroke:var(--np-line); stroke-width:2; stroke-linejoin:round; opacity:.9}
.np-dot{fill:var(--np-page)}
.np-shade{fill:var(--np-shade); filter:blur(3px)}
.np-eyes{transition:transform .08s linear}
/* الميلُ نحو المؤشّر — يُقرأ بلمحةٍ قبل حركة الحدقة */
.cp-fig{transform:rotate(var(--cp-lean, 0deg))}

.cp-fig{animation:cp-breathe 3.8s ease-in-out infinite}
@keyframes cp-breathe{
  0%,100%{transform:rotate(var(--cp-lean,0deg)) translateY(0) scale(1)}
  50%{transform:rotate(var(--cp-lean,0deg)) translateY(-3.5px) scale(1.016)}}
/* الشرّابة تتأرجح — تفصيلٌ حيٌّ بضربةٍ واحدة */
.np-tassel{transform-box:view-box; transform-origin:var(--np-tass-o, 106px 40px); animation:cp-sway 3.4s ease-in-out infinite}
@keyframes cp-sway{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}
.np-glow{animation:cp-lume 4s ease-in-out infinite}
@keyframes cp-lume{0%,100%{opacity:.75}50%{opacity:1}}

/* ⚠️ السكون أثناء بثّ الجواب: يبقى حاضراً وتبقى عيناه تتبعان الطالب.
   الحركة هي ما يسرق الانتباه لا الوجود — وبه يبقى مبدأ التماسك محفوظاً. */
/* ── «دُرّة» — حوريّةٌ ومحارةٌ تُغنّي ──────────────────────────────────────
   لونٌ خامسٌ مستقلّ: أرومةُ خضراء، وذيبو أبيضُ وأسود، وميجو رماديّ،
   وأدّون ورديّة، ودُرّةُ **زرقاء** — فالخمسةُ تُميَّز من لمحةٍ في المنتقي.

   ⚠️ اللوحةُ **ليست مختارة**: هي شريطُ النُّخَب الستّةُ في مرجع المالك
   (`سوفي 2.png`) مقروءاً بأداة `tools/companion_reference.py` — قِيست
   مواضعُها وأخِذ وسيطُ كلّ نُخبة:
     ‏#08225d (L١٩٪) · #113fa2 (L٣٥٪) · #2776a7 (L٤٠٪)
     ‏#74acc8 (L٦١٪) · #9099cf (L٦٨٪) · #b8c7da (L٧٨٪)
   أُسرةٌ واحدةٌ ذاتُ مدىً واسع (١٩→٧٨) — وهو ما يُقرأ مجسّماً. ودرسُ أدّون
   أنّ خمسَ أُسَرٍ تُقرأ «عناصرَ تتنافس»، فلا سادسَ هنا إلّا اللؤلؤة. */
.cp-ch-ozis{
  /* ⚠️ اللوحةُ **مقيسةٌ من «سوفي ٤»** بأخذِ بكسلاتها لا باختيارٍ بالنظر —
     وهي الآن **سبعُ قيمٍ** بدل ثلاثَ عشرةَ طبقةً مولَّدة. والمفرداتُ مفرداتُ
     إخوته: `--np-hood` كتلةُ الشَّعر والذيل، و`--np-face` البشرة، و`--np-line`
     الحدُّ الذي يفصل الكتلَ — فيُقرأ من أُسرتهم لا غريباً بينهم. */
  /* القلنسوة أفتحُ قليلاً (#2059cf ← #2663db): كان تبايُنُ الحدِّ عليها 2.67
     دون العتبة 3، فتضيع التفاصيلُ الداخليّة داخل كتلةِ الشَّعر. */
  --np-hood:#2663db; --np-face:#b4c9e5; --np-limb:#a6bcdd;
  --np-line:#0a1c47; --np-eye:#0a1c47; --np-cheek:#8fb6e4;
  --oz-coral:#69d3e8; --oz-fin:#3ba6cf; --oz-tail2:#1e6fd0;
  --oz-tail-c:#1747b8; --oz-tail-lo:#1f6ad4; --oz-lit:#c6d8ef; --oz-pearl:#f2eee4;
  --oz-shd:#0a1c47; --oz-coral-b:#2f93b4; --oz-hairln:#0a2f86;
  --oz-ln-tail:#082456; --oz-ln-skin:#42597f; --oz-ln-fin:#1a6f95;
  --oz-metal:#dbe9f6; --oz-ln-metal:#2a4a74;
  --oz-ln-wood:#5c3b2a; --oz-ln-shell:#3b3a72; --oz-rimlight:#8fe6f7;
  --oz-hair2:#2f66d6; --oz-ir:#2aa7e0;
  --oz-wood:#9a6c53;
  --oz-shell:#6a68ab; --oz-shell2:#8280c2; --oz-shell3:#403e7c;
  --oz-cream:#f5e0c8; --oz-cream2:#cdb598;
  --np-shade:rgba(10,28,71,.16);
  --oz-glow:#60c5ef; --oz-bub:rgba(120,200,245,.34);
  --cp-blink:4.9s;
}
/* ⚠️ **الوضعُ الداكن يرفع الغائرَ لا يخفض الساطع.** درسٌ ثبت على الرسم
   المتتبَّع وبقي صحيحاً بعد إعادة البناء: تعتيمُ كلّ لونٍ كما تفعل الأخوات
   يُذيب الشَّعرَ الأزرقَ الغامقَ في الخلفيّة الداكنة (قِيس تباينُه على
   `--bg` فكان ١٫٥٦) فيبدو **نصفَ شخصيّة**: وجهٌ يطفو بلا شَعر. والعلاجُ في
   **الحشو** لا الحدّ — فرفعُ الحدّ يجعله هالةً حول كتلةٍ غائرة، وهو أسوأ. */
[data-theme="dark"] .cp-ch-ozis{
  /* ⚠️ في الوضع الداكن كان الحدُّ #061230 على أرضيّةِ #15191e تبايُنُه **1.05** —
     أي أنّ أوزيس **يذوب في الصفحة**. والقيدان متناقضان مع القلنسوة القديمة:
     الحدُّ يلزمه ≥1.45 على الأرضيّة (فيرتفع ضوؤه) و≥3 على القلنسوة (فينخفض) —
     ولا حلَّ إلّا برفع الاثنين معاً. حُلّا عددياً بأقلِّ انزياحٍ داخل عائلته:
     الحدُّ 22٪ والقلنسوة 27٪ نحو أزرقه الفاتح (`--oz-lit`/`--oz-rimlight`).
     النتيجة: الحدّ/الأرضيّة 1.52 · الحدّ/القلنسوة 3.08 · القلنسوة/الأرضيّة 4.66. */
  --np-hood:#4a82df; --np-face:#a3bbdb; --np-limb:#95aed2;
  --np-line:#28385a; --np-eye:#081638; --np-cheek:#7ea6d8;
  --oz-coral:#7fdcee; --oz-fin:#4ab4dc; --oz-tail2:#2f7ed6;
  --oz-tail-c:#2a5cc6; --oz-tail-lo:#3080dc; --oz-lit:#b7cbe6; --oz-pearl:#e4e0d6;
  --oz-shd:#02091c; --oz-coral-b:#3ea3c2; --oz-hairln:#12409c;
  --oz-ln-tail:#082561; --oz-ln-skin:#33465f; --oz-ln-fin:#155a78;
  --oz-metal:#c6d9ea; --oz-ln-metal:#1d3657;
  --oz-ln-wood:#472d20; --oz-ln-shell:#2b2a55; --oz-rimlight:#a5eefb;
  --oz-hair2:#4278e0; --oz-ir:#3ab6ea;
  --oz-wood:#a5765c;
  --oz-shell:#5c5a97; --oz-shell2:#7371ac; --oz-shell3:#38366c;
  --oz-cream:#ddc9b2; --oz-cream2:#b39d83;
  --np-shade:rgba(0,0,0,.34);
  --oz-glow:#54b0d6; --oz-bub:rgba(100,175,215,.28);
  --cp-blink:4.9s;
}
/* ⚠️ أُزيلت هنا **اثنتا عشرةَ** قاعدةَ نقطةِ تدرّجٍ لأوزيس (2026-09-01):
   `oz-t2 t3 h2 f2 bf2 p2 s2 v1 v2 v3 b1 b2`. وأوزيسُ **لا تدرّجَ فيه أصلاً**
   — حشوٌ مسطّحٌ وحدٌّ كإخوته — فلم تُحِل إليها لبنةُ `<stop>` واحدة.
   وستٌّ منها كانت تُحيل إلى متغيّراتٍ **لا وجودَ لها**: `--oz-tail` و`--oz-fin2`
   و`--oz-bfin2` و`--oz-pearl2` و`--oz-lit1` و`--oz-shad` (والمعرَّفُ في اللوحة
   `--oz-lit` و`--oz-shd`). ولو أُحيل إليها يوماً لرُسمت **سوداء** صامتةً:
   قيمةُ `var()` غيرِ المعرَّفة بلا بديلٍ باطلةٌ، فيعود `stop-color` أسودَ.
   وخمسٌ منها نُقلت إلى أدّون بالنسخ فبقيت هناك ميّتةً حتّى أُزيلت.
   يحرسُ عودتَها `tests/test_companion_art_contract.py`. */
/* ⚠️ **الحدُّ للظِّلِّ الخارجيّ وحده** — درسُ أدّون حرفيّاً: حين تحمل كلُّ
   قطعةٍ حدَّها الخاصّ يرسم الحدُّ «حدودَ القِطَع» لا الشخصيّة.
   ⚠️ و**سماكةٌ متدرّجة** لا واحدة: الظِّلُّ الخارجيّ ٣٫٤، والزعانفُ والمرجانُ
   ٢٫٤ لأنّهما خلفَ الشخصيّة، والتفاصيلُ الداخليّةُ ١٫٢–١٫٦. والسماكةُ
   الواحدةُ تجعل الرسمَ مسطّحاً بلا تراتب. */
.np-face,.oz-tail,.oz-lock,.oz-shellb,.oz-shellt,.np-hood{
  stroke:var(--np-line); stroke-width:3.4; stroke-linejoin:round
}
/* الخصلة: حدُّها يرسم الخصلَ متراكبةً — وهو أسلوبُ المرجع نفسِه */
/* خطُّ الإضاءة داخل الخصلة: تظليلٌ خلويٌّ **بلا حدّ** — النقطة ١١ */
/* جَعْدةٌ داخلَ الكتلة: أدكنُ قليلاً بلا حدّ — عمقٌ بالقيمة لا بالخطّ */
/* ⚠️ رفيعةٌ وخافتة: بسُمك ٢٫٦ وشفافيّة ٠٫٨٥ قُرئت **أشرطةً زرقاء** ملفوفةً
   حول الرأس لا فصلاً بين جَعَدات. وخطُّ الفصل في الرسم يُلمَح ولا يُرى. */
/* الحافّةُ الكريميّةُ المفصَّصة — أبرزُ ما يميّز المحارةَ في المرجع */
/* ظِلٌّ ملتصقٌ وظِلٌّ أسطوانيّ — كلاهما بلا حدّ: العمقُ بالقيمة لا بالخطّ */
/* ── لؤلؤةُ الرمح: **نقطةُ التركيز اللونيّة الوحيدة** ─────────────────────
   ⚠️ بُلِّغ أنّ «كلَّ شيءٍ أزرقُ فلا تجد العينُ نقطةَ تركيز». وأُسرةُ لونٍ
   ثانيةٌ كاملةٌ كانت ستُعيد عطبَ أدّون («عناصرُ تتنافس»)، فاللهجةُ **نقطةٌ
   واحدةٌ صغيرةٌ متوهّجة** لا أُسرة: مساحتُها أقلُّ من ١٪ من الرسم، ولونُها
   هو لونُ النغمات نفسُه — فتربط السلاحَ بالموسيقى بدل أن تزاحمها. */
/* جوفُ المحارة: ظِلٌّ داخليٌّ بلا حدّ — به تُقرأ مُقعَّرةً بعد حذف اللؤلؤة */
/* تشريحٌ خفيف: ترقوتان وحدُّ صدرٍ وسُرّة — بالقيمة لا بالحدّ */
/* القشور: تبدأ كبيرةً من أعلى الذيل وتتلاشى قبل الذَّنَب — النقطة ٧ */
/* ⚠️ القزحيّة **لونٌ لا شفافيّة**: كانت بياضاً بشفافيّة ٠٫١٣ فبقيت العينُ
   ثقباً أسودَ بنقطتين — والمرجعُ فيه قزحيّةٌ زرقاءُ تحت الحدقة تجعلها عيناً
   تنظر. وهي أسفلَ مركز العين قليلاً فتُقرأ نظرةً إلى الأمام لا إلى أعلى. */
/* ⚠️ القزحيّةُ **أعمقُ من الجوهرة**: بلون `--oz-gem` الفاتح مع حدقةٍ صغيرة
   قُرئت العينُ **نظّارةً** لا عيناً. والمرجعُ عينُه داكنةٌ في جوهرها: قزحيّةٌ
   زرقاءُ متوسّطةٌ وحدقةٌ واسعةٌ سوداء. */
.np-gl2{fill:#fff; opacity:.75}

/* ── الترايدنت: **من عظمٍ وصَدَف** لا معدن ───────────────────────────────
   ⚠️ قرارُ تناسقٍ لا ذوق: سلاحٌ معدنيٌّ يُدخل أُسرةَ لونٍ ثالثةً (رماديّ/ذهبيّ)
   في لوحةٍ أُسرتُها الزرقاءُ واحدةٌ ولهجتُها الكريميّةُ واحدة — وهو بعينه ما
   جعل أدّون تُقرأ «عناصرَ تتنافس». وبصنعه من مادّة حافّة المحارة نفسِها
   يرتبط الشيئان فيُقرآن عالماً واحداً، ولا يزيد عددُ الأصوات. */
/* جفنٌ علويٌّ حادّ — يقصّ استدارةَ العين فتُقرأ نظرةً لا دهشةً دائمة */
/* ══ أوزيس — أشكالٌ مرسومةٌ باليد بمفردات إخوته ═══════════════════════
   الحدُّ السميكُ والحشوُ المسطّح يأتيان من `.np-hood/.np-face/.np-limb`،
   وما هنا هو ما يخصُّه وحدَه. */
.oz-tail{fill:var(--oz-tail-c); stroke:var(--oz-ln-tail); stroke-width:4;
  stroke-linejoin:round}
/* حدودٌ من أسرة لون المنطقة — والوجهُ وحدَه على الحدّ الأدكن فيبقى البؤرة */
.cp-ch-ozis .np-face{stroke:var(--oz-ln-skin)}
.cp-ch-ozis .np-limb{stroke:var(--oz-ln-skin)}
.cp-ch-ozis .np-head .np-face{stroke:var(--np-line)}
.oz-fin{fill:var(--oz-fin); stroke:var(--oz-ln-fin); stroke-width:2.8;
  stroke-linejoin:round}
/* ⚠️ الحرشفاتُ **ثلاثةُ أقواسٍ فقط**: الرسمُ يُعرَض في ١١٢ بكسلاً، وكلُّ خطٍّ
   زائدٍ فيه يُقرأ ضجيجاً رماديّاً لا تفصيلاً — وهو ما يُميّز التميمةَ من
   الرسم التصويريّ. */
/* ⚠️ **حراشفُ نسيجٍ لا خطوطُ تقسيم.** خطٌّ عرضيٌّ كاملٌ عبر الذيل يُقرأ
   مفصلاً فتبدو العضلةُ عُقَداً — بُلِّغ. وهي أقواسٌ صغيرةٌ متداخلةٌ برفيعٍ جدّاً
   (١٫٣) فلا تزاحم الحدَّ السميك. */
.oz-scale{fill:none; stroke:var(--oz-tail2); stroke-width:1.3; stroke-linecap:round;
  opacity:.6}
.oz-tshd{fill:var(--oz-shd); opacity:.17; stroke:none}
.oz-belt{fill:var(--oz-tail-lo); stroke:var(--oz-ln-tail); stroke-width:3;
  stroke-linejoin:round}
.oz-gloss{fill:none; stroke:var(--oz-rimlight); stroke-width:2.6; stroke-linecap:round;
  opacity:.34}
.oz-coral{fill:none; stroke:var(--oz-coral); stroke-width:3.4; stroke-linecap:round;
  stroke-linejoin:round}
/* الطبقةُ الخلفيّةُ من التاج: اللونُ نفسُه أدكنَ درجةً — التداخلُ بالقيمة */
.oz-coral-b{fill:none; stroke:var(--oz-coral-b); stroke-width:3.4; stroke-linecap:round;
  stroke-linejoin:round}
.oz-coral2{fill:var(--oz-coral); stroke:var(--np-line); stroke-width:1.8;
  stroke-linejoin:round}
.oz-hair2{fill:var(--oz-hair2); stroke:none; opacity:.75}
/* ⚠️ **الخصلاتُ داخل الكتلة لا على ظِلّها.** الشَّعرُ كان كتلةً واحدةً تُقرأ
   خوذة؛ والانفصالُ يُصنَع بغائرٍ بين الخصلات ولامعٍ فوقها — لا بتشريح
   الظِّلّ الخارجيّ (الرؤوسُ المدبَّبةُ فيه تُقرأ عُرفَ أسدٍ، فشلت ٣ مرّات). */
.oz-lock{fill:var(--oz-hairln); opacity:.26; stroke:none}
.oz-lockhi{fill:var(--oz-hair2); opacity:.3; stroke:none}
.oz-lite{fill:none; stroke:var(--oz-rimlight); stroke-width:2.2; stroke-linecap:round;
  opacity:.42}
/* الأنامل بالضربتين: حدٌّ أعرضُ تحته وحشوٌ أرفعُ فوقه — وهو التعبيرُ نفسُه
   الذي في `.np-limb` لكن بخطٍّ لأنّ الإصبعَ أضيقُ من أن يكون كتلة. */
.oz-arm{fill:var(--np-limb); stroke:var(--oz-ln-skin); stroke-width:3.2;
  stroke-linejoin:round}
/* ⚠️ اليدُ **كتلةٌ واحدةٌ بشقَّين**، لا كفٌّ وأصابعُ متفرّقة: في هذا المقاس
   يُقرأ الإصبعُ المستقلُّ سجقّةً بجانب كرة (بُلِّغ مرّتين). */
.oz-hand{fill:var(--np-limb); stroke:var(--oz-ln-skin); stroke-width:3;
  stroke-linejoin:round}
.oz-hnotch{fill:none; stroke:var(--oz-ln-skin); stroke-width:1.9; stroke-linecap:round;
  opacity:.7}
.oz-fingo{fill:none; stroke:var(--oz-ln-skin); stroke-width:4.6; stroke-linecap:round}
.oz-fing{fill:none; stroke:var(--np-limb); stroke-width:3; stroke-linecap:round}
.oz-thumb{fill:none; stroke:var(--oz-ln-skin); stroke-width:3; stroke-linecap:round}
/* الحاجبُ سميكٌ قصير: الرفيعُ الطويلُ يُقرأ خدشاً، وقد جُرّب */
/* ⚠️ حاجبٌ **مائلٌ نحو الأنف بعشر درجاتٍ لا أكثر**: الأشدُّ ميلاً يُقرأ غضباً،
   والمقوَّسُ لأعلى دهشة. والمطلوبُ «حارسٌ واثقٌ هادئ» — فالزاويةُ تُثبَّت. */
.oz-brow{fill:none; stroke:var(--np-line); stroke-width:2.3; stroke-linecap:round}
.oz-lid{fill:var(--np-line)}
/* ⚠️ **الظِّلُّ لونٌ واحدٌ شفّاف، لا لونٌ ثالثٌ لكلّ كتلة.** طبقةٌ واحدةٌ بـ`--oz-shd`
   بشفافيّةٍ منخفضةٍ تعمل فوق البشرة والذيل والشَّعر جميعاً، فتبقى اللوحةُ
   مضبوطةً بقيمةٍ واحدةٍ ولا تتفكّك عند تبديل الوضع. */
.oz-shd{fill:var(--oz-shd); opacity:.15; stroke:none}
/* ⚠️ ظِلُّ الوجه **أخفُّ من ظِلّ الجسد**: البشرةُ فاتحةٌ والوجهُ هو ما يُنظَر
   إليه، فالقيمةُ نفسُها التي تُقرأ عمقاً على الذيل تُقرأ لطخةً على الخدّ. */
.oz-shd2{fill:var(--oz-shd); opacity:.09; stroke:none}
.oz-lit{fill:var(--oz-lit); stroke:none; opacity:.85}
.oz-tail-lo{fill:var(--oz-tail-lo); stroke:none}
/* أعصابُ الزعانف والخياشيمُ والرِّباط: خطوطٌ رفيعةٌ خافتة — التفصيلُ في
   ١١٢ بكسلاً يُقرأ ضجيجاً إن ساوى الحدَّ في القتامة */
.oz-rib{fill:none; stroke:var(--np-line); stroke-width:1.5; stroke-linecap:round;
  opacity:.45}
.oz-cord{fill:none; stroke:var(--oz-ln-wood); stroke-width:2.2; stroke-linecap:round;
  opacity:.85}
.oz-pearl{fill:var(--oz-pearl); stroke:var(--np-line); stroke-width:1.6}
.oz-pearl-hl{fill:#fff; opacity:.85}
.oz-pearl-sh{fill:var(--oz-shd); opacity:.3}
/* حافّةٌ مضيئةٌ وبريقٌ معدنيّ: خطّان لا كتلتان */
.oz-rimlt{fill:none; stroke:var(--oz-rimlight); stroke-width:1.8; stroke-linecap:round;
  opacity:.5}
.oz-glint{fill:none; stroke:#fff; stroke-width:1.4; stroke-linecap:round; opacity:.55}
.oz-ribf{fill:none; stroke:var(--np-line); stroke-width:1.5; stroke-linecap:round;
  opacity:.35}
/* ⚠️ الحاجبان **رفيعان قصيران**: كلّفت حواجبُ ميجو المائلةُ الغليظةُ جولةً
   لأنّها قُرئت «ماكراً»، وحُذفت. وهنا تبقى لأنّ نظرةَ المرجع حازمة — لكن
   بثلثِ الغِلَظ، وخارجَ `.np-eyes` فلا تتحرّك مع الحدقة. */
.oz-ir{fill:var(--oz-ir); opacity:.9}
.oz-nose{fill:var(--np-line); opacity:.55}
/* الرمح: عصاً خشبيّةٌ وثلاثُ شُعَبٍ ذهبيّة — بخطوطٍ لا بكتلٍ مملوءة، فالكتلةُ
   الذهبيّةُ بهذا الحجم تُقرأ لطخة. */
.oz-shaft{fill:none; stroke:var(--oz-ln-wood); stroke-width:5.6; stroke-linecap:round}
.oz-shaft2{fill:none; stroke:var(--oz-wood); stroke-width:3.4; stroke-linecap:round}
/* الشُّعَبُ ذهبيّةٌ بحدٍّ داكن — والرسمُ بخطّين للسبب نفسِه */
.oz-prong{fill:none; stroke:var(--oz-ln-metal); stroke-width:5.6; stroke-linecap:round}
.oz-prong2{fill:none; stroke:var(--oz-ln-metal); stroke-width:5.6; stroke-linecap:round;
  stroke-linejoin:round}
.oz-prong3{fill:none; stroke:var(--oz-metal); stroke-width:2.8; stroke-linecap:round}
.oz-prong4{fill:none; stroke:var(--oz-metal); stroke-width:2.8; stroke-linecap:round;
  stroke-linejoin:round}
.oz-gem{fill:var(--oz-coral); stroke:var(--oz-ln-metal); stroke-width:2.2}
.oz-gem2{fill:var(--oz-coral); stroke:var(--oz-ln-wood); stroke-width:1.6}

/* ── طَفوٌ تحت الماء ────────────────────────────────────────────────────
   ⚠️ بلّغ المالك أنّ الجسدَ **يبدو جامداً**. والرسمُ متتبَّعٌ بطبقاتٍ مسطّحة،
   فلا سبيلَ لتحريك ذيلٍ أو خصلةٍ على حِدة — لكنّ **الطَّفوَ** لا يحتاج ذلك:
   ما يسبح يرتفع وينخفض ويميل بجسده كلِّه.
   ودورتُه (٧٫٤s) **لا تساوي** دورةَ التنفّس في `.cp-fig` (٣٫٨s) ولا نبضةَ
   المحارة — فتتراكب الثلاثةُ ولا تتزامن، وهو ما يجعل السكونَ يبدو حيّاً
   بدل أن يبدو آليّاً.
   والسَّعةُ ضئيلةٌ عمداً (١٫٦px ودرجةٌ واحدة): الحركةُ الكبيرةُ تسرق انتباهَ
   الطالب — وهي القاعدةُ التي تحكم هذا الرفيق كلَّه. */
/* ⚠️ **السَّعةُ رُفعت لأنّها كانت دون عتبة الإدراك.** ١٫٦px على شكلٍ
   ارتفاعُه ١٢٩px = ١٫٢٪ — تعمل الحركةُ فعلاً ولا تُرى، وقد بلّغ المالك
   «لا يوجد أنميشن». وهو الدرسُ المكتوبُ في ذيل ذيبو: ٧٫٩px دون العتبة
   و١١٫٩px «يُرى بلا أن يَشغل». فالطَّفوُ ٤px ودرجتان.
   والذيلُ **مفصولٌ في التتبّع** ليتموّج حول الخصر — وهو ما يُخرج الجسدَ من
   الجمود، إذ لا سبيلَ لتحريك جزءٍ من رسمٍ مسطّحٍ إلّا بفصله. */
/* ⚠️ **حافّةٌ خارجيّةٌ في الوضع الداكن وحدَه.** حدُّ أوزيس كُحليٌّ أدكنُ من
   أرضيّة الصفحة الداكنة (تباينُ ١٫٠٥) — فيصحّ داخلاً لأنّه يفصل كتلَه، ولا
   ظِلَّ له خارجاً فيذوب طرفُه في السواد. ورفعُ الحدّ نفسِه يجعله هالةً حول
   الشَّعر الغامق (جُرّب فأُلغي)، فالحلُّ **هالةٌ خارجيّةٌ لا حدّ**: تُرى عند
   الظِّلّ الخارجيّ ولا تمسّ شيئاً من الرسم. */
[data-theme="dark"] .cp-ch-ozis svg{
  filter:drop-shadow(0 0 3.2px rgba(143,230,247,.34))}
.cp-ch-ozis svg{animation:oz-float 7.4s ease-in-out infinite}
/* ⚠️ الرمحُ والتاجُ كانا **صلبين تماماً** بينما يتموّج الذيل — وأداةٌ مسمَّرةٌ
   في يد شخصيّةٍ تسبح تُقرأ «مثبَّتة». والسَّعةُ ضئيلةٌ ودورتُها **مغايرةٌ**
   لدورة الذيل فلا تتزامنان فتبدو الحركةُ آليّة. */
.oz-spear{transform-box:view-box; transform-origin:101px 100px;
  animation:oz-sway 5.3s ease-in-out infinite}
@keyframes oz-sway{0%,100%{transform:rotate(-1.4deg)}50%{transform:rotate(1.4deg)}}
.cp-quiet .oz-spear{animation:none}
/* ⚠️ **لا دورانَ للمجموعة بعد اليوم.** كان `oz-wag` يدير الذيلَ كجسمٍ صلبٍ
   حول الخصر، فينزلق حدُّ أصله على البطن — وهو ما جعله يُقرأ «قطعةً أخرى».
   وقد صار كلُّ مسارٍ فيه يتموّج في خاصّيّة `d` بسَعةٍ **صفرٍ عند الأصل**،
   فالوصلةُ ساكنةٌ رياضيّاً ولا حاجة إلى إخفائها. */
.oz-w2{animation:oz-w2 3.9s ease-in-out infinite}
.oz-w3{animation:oz-w3 3.9s ease-in-out infinite}
.oz-w4{animation:oz-w4 3.9s ease-in-out infinite}
.oz-w5{animation:oz-w5 3.9s ease-in-out infinite}
.oz-w6{animation:oz-w6 3.9s ease-in-out infinite}
.oz-w7{animation:oz-w7 3.9s ease-in-out infinite}
.oz-w8{animation:oz-w8 3.9s ease-in-out infinite}
.oz-w0{animation:oz-w0 3.9s ease-in-out infinite}
.oz-w9{animation:oz-w9 3.9s ease-in-out infinite}
.cp-quiet .oz-w2,.cp-quiet .oz-w3,
.cp-quiet .oz-w4,.cp-quiet .oz-w5,.cp-quiet .oz-w6,
.cp-quiet .oz-w7,.cp-quiet .oz-w8,
.cp-quiet .oz-w0,.cp-quiet .oz-w9{animation:none}
@keyframes oz-float{
  0%,100%{transform:translateY(0) rotate(-1deg)}
  50%    {transform:translateY(-4px) rotate(1deg)}}
.cp-quiet .cp-ch-ozis svg{animation:none}

/* المحارة المرسومة باليد */
.oz-shellb,.oz-shellt{fill:var(--oz-shell); stroke:var(--oz-ln-shell); stroke-width:2.4;
  stroke-linejoin:round}
.oz-shellt{fill:var(--oz-shell2)}
.oz-hollow{fill:var(--oz-shell3); stroke:none}
.oz-cave{fill:var(--oz-shd); opacity:.22; stroke:none}
.oz-rim{fill:none; stroke:var(--oz-cream); stroke-width:2.6; stroke-linecap:round;
  stroke-linejoin:round}
.oz-vrib{fill:none; stroke:var(--oz-cream2); stroke-width:1.1; stroke-linecap:round;
  opacity:.6}

/* ألوانُ الرسم المتتبَّع */

/* ── المحارةُ تُغنّي ──────────────────────────────────────────────────────
   ⚠️ **لماذا CSS لا JS**: مؤقّتُ JS يعني حساباً دائماً ما دام الرفيقُ ظاهراً،
   وإيقافاً يدويّاً عند `cp-quiet` وعند `prefers-reduced-motion` — وهو بعينه ما
   رُفض في غصن ميجو. والحلقةُ تُعطي السلوكَ مجّاناً.

   ⚠️ **والتناسبُ هو ما يجعل التأخيرَ مشروعاً هنا.** حذّر تعليقُ ميجو من
   `animation-delay` لأنّه يزيح الدورةَ كلَّها فتنفكّ العناصرُ عن بعضها. وهنا
   العكسُ مقصود: مدّةُ الفقاعة = **ثلاثةُ أمثال** النبضة بالضبط، وتأخيرُها
   نبضةٌ كاملة — فالمُدَدُ متناسبةٌ بالبناء، وتخرج فقاعةٌ مع كلّ انفتاحةٍ إلى
   الأبد ولا تنزلق عنها.

   والعشوائيّةُ (النغمةُ ومَيلُها وحجمُها وطولُ النبضة) تُولَّد في `svg()` عند
   كلّ تركيب — فلا سطرَ في المنطق المشترك. */
/* ⚠️ المفصلُ بـ`fill-box` لا بإحداثيّاتٍ مطلقة: ركنُ الصندوق الأيمنُ
   الأسفلُ **هو** ملتقى المِصراعين بعينه (٤٤،١٣٠)، وبه تبقى المحارةُ
   تفتح من مفصلها مهما نُقلت أو صُغِّرت — والمطلقةُ تنكسر بأوّل إزاحة. */
.oz-valve{transform-box:fill-box; transform-origin:100% 100%;
  animation:oz-clam var(--oz-beat,2.4s) ease-in-out infinite}
/* ⚠️ **مُوارَبةٌ في السكون لا مغلقة**: بزاويةِ صفرٍ يطبق المِصراعُ العلويُّ
   على السفليّ فتُقرأ المحارةُ **قبّةً مصمتة** لا صَدَفةً مفتوحة — وهو ما
   تراه العينُ في معظم لحظات الدورة. فالسكونُ عند ‏−١٢° والانفتاحُ إلى −٣٤°:
   تبقى مفتوحةً دائماً، وتتنفّس. */
/* ⚠️ **اتّجاهُ الدوران كان معكوساً.** المحورُ الرأسيُّ في SVG نازل، فالدورانُ
   **السالب** يُنزل الحافّةَ اليسرى للمِصراع بدل أن يرفعها — فكان المِصراعُ
   يهوي في الكأس ويبدو منفصلاً عنها («حركةُ المحار مشوّهة»، بُلِّغ مرّتين).
   والموجبُ يرفعها فينفتح انفتاحاً حقيقيّاً.
   ⚠️ والمفصلُ عند (٣٨,١٢٢) حيث يلتقي المِصراعان — لا عند مركزهما: الدورانُ
   حول المركز يُزحلق القطعةَ كلَّها بدل أن يفتحها.
   والرسمُ المتتبَّعُ **مفتوحٌ أصلاً**، فالسكونُ عند صفرٍ والانفتاحُ زيادةٌ عليه. */
/* ⚠️ والحدّان **مقيسان بالمعاينة لا مفترضان**: صُوِّرت ثلاثُ زوايا جنباً
   إلى جنب، فتبيّن أنّ ‏١٢° هو الوضعُ الذي يستقرّ فيه المِصراعُ على الكأس،
   وأنّ ٠° يتركه معلّقاً بفجوةٍ تحته تُقرأ انفصالاً. فالموجبُ **يُغلق** لا
   يفتح — والسكونُ ١٢° والانفتاحُ ٥°. */
@keyframes oz-clam{
  0%,62%,100%{transform:rotate(12deg)}
  14%,44%{transform:rotate(5deg)}}
/* فقاعةٌ فيها نغمة — النقطة ١٤ */
.oz-bub{fill:var(--oz-bub); stroke:var(--oz-glow); stroke-width:1; opacity:.85}
.oz-bubgl{fill:#fff; opacity:.5}
.oz-gl{font-size:8.4px; font-weight:700; fill:var(--oz-glow); text-anchor:middle}
.oz-note{opacity:0; animation:oz-rise calc(var(--oz-beat,2.4s) * 3) linear infinite}
.oz-n2{animation-delay:calc(var(--oz-beat,2.4s) * 1)}
.oz-n3{animation-delay:calc(var(--oz-beat,2.4s) * 2)}
@keyframes oz-rise{
  0%   {opacity:0; transform:translate(0,0) scale(.45)}
  8%   {opacity:.95; transform:translate(calc(var(--oz-dx,0px) * .2),-5px) scale(var(--oz-sc,1))}
  70%  {opacity:.6; transform:translate(calc(var(--oz-dx,0px) * .8),-30px) scale(var(--oz-sc,1))}
  92%,100%{opacity:0; transform:translate(var(--oz-dx,0px),-42px) scale(calc(var(--oz-sc,1) * .86))}}
/* ── الشَّعرُ والزعانفُ تتموّج دائماً — النقطة ١٥ ──────────────────────────
   حركةٌ **بطيئةٌ جدّاً وصغيرةُ السَّعة**: تحت الماء كلُّ شيءٍ يتموّج، لكنّ
   السرعةَ تسرق الانتباه من الدرس — وهي القاعدةُ التي تحكم هذا الرفيق كلَّه.
   و`transform` وحدها على مجموعاتٍ صغيرة: لا إعادةَ تخطيطٍ في كلّ إطار. */
@keyframes oz-drift{
  0%,100%{transform:rotate(-1.5deg)}
  50%{transform:rotate(1.5deg)}}
@keyframes oz-wave{
  0%,100%{transform:rotate(-3.4deg)}
  50%{transform:rotate(3.4deg)}}
/* تسكن أثناء البثّ كبقيّة الحركة — الحركةُ هي ما يسرق الانتباه لا الوجود */
.cp-quiet .oz-valve,.cp-quiet .oz-tailg,.cp-quiet .oz-note,.cp-quiet .oz-hairb,
.cp-quiet .oz-hairf,.cp-quiet .oz-earl,.cp-quiet .oz-earr,
.cp-quiet .oz-flukeg{animation:none}
/* الاحتفال: نبضةٌ سريعةٌ من المحارة — لا حركةٌ أخرى تُتعلَّم */
.cp-cheer .oz-valve{animation:oz-clam .5s ease-in-out 4}

.cp-quiet .cp-fig,.cp-quiet .np-tassel,.cp-quiet .np-glow{animation:none}

.cp-pop .cp-fig{animation:cp-pop .5s cubic-bezier(.3,1.4,.4,1)}
@keyframes cp-pop{
  0%{transform:rotate(var(--cp-lean,0deg)) translateY(6px) scale(.9)}
  55%{transform:rotate(var(--cp-lean,0deg)) translateY(-5px) scale(1.06)}
  100%{transform:rotate(var(--cp-lean,0deg))}}

/* ── الانكماشة: جوابُ الرفيق حين يلمسه الطالبُ نفسه ────────────────────────
   ⚠️ حركةٌ بلا نصّ عمداً. والنقرُ يُكتشَف **بقياس الإحداثيّات** على مستطيلٍ
   مخزَّن لا بإصابة DOM — فتبقى `pointer-events:none` قائمةً واللمسةُ تمرّ
   إلى ما تحته. و`scale` على المُركِّب: لا إعادةَ تخطيطٍ في أيّ إطار. */
/* ⚠️ ارتدادةٌ **ثانيةٌ أصغر**: الارتدادةُ الواحدة تنتهي فجأةً فتُقرأ نقرةً
   لا وثبة. والثانيةُ بثُلث السَّعة هي ما يجعل الجسمَ يبدو مطّاطيّاً — وهي
   أرخصُ فرقٍ بين «يتحرّك» و«حيّ». */
.cp-poke .cp-fig{animation:cp-poke .62s cubic-bezier(.3,1.5,.4,1)}
@keyframes cp-poke{
  0%{transform:rotate(var(--cp-lean,0deg)) scale(1)}
  22%{transform:rotate(var(--cp-lean,0deg)) scale(.9,1.08) translateY(3px)}
  48%{transform:rotate(var(--cp-lean,0deg)) scale(1.06,.95) translateY(-5px)}
  70%{transform:rotate(var(--cp-lean,0deg)) scale(.97,1.03) translateY(1px)}
  86%{transform:rotate(var(--cp-lean,0deg)) scale(1.02,.98) translateY(-2px)}
  100%{transform:rotate(var(--cp-lean,0deg)) scale(1)}}

/* ── ردُّ فعلٍ يخصّ أدّون: الخصلةُ الذهبيّةُ تنتفض ثمّ ترتدّ ──────────────
   لكلّ شخصيّةٍ استجابةٌ من جسدها هي: ذيبو يهزّ ذيله، وميجو يمضغ، وأرومة
   تهزّ شرّابتها. وأدّون قلمُها فوق رأسها — فهو ما ينتفض. */
.cp-poke .ad-crestg{animation:ad-flick .62s cubic-bezier(.3,1.6,.4,1)}
@keyframes ad-flick{
  0%{transform:rotate(0deg)}28%{transform:rotate(-13deg)}
  56%{transform:rotate(6deg)}78%{transform:rotate(-3deg)}
  100%{transform:rotate(0deg)}}
/* وعند الاحتفال ترتفع الخصلةُ عالياً ثلاث مرّات */
.cp-cheer .ad-crestg{animation:ad-hail .78s ease-in-out 2}
@keyframes ad-hail{
  0%,100%{transform:rotate(0deg) scaleY(1)}
  40%{transform:rotate(-9deg) scaleY(1.14)}}

.cp-cheer .cp-fig{animation:cp-cheer .78s cubic-bezier(.3,1.35,.4,1)}
@keyframes cp-cheer{
  0%{transform:rotate(var(--cp-lean,0deg)) translateY(0)}
  22%{transform:rotate(-7deg) translateY(-18px)}
  46%{transform:rotate(var(--cp-lean,0deg)) translateY(0)}
  66%{transform:rotate(5deg) translateY(-10px)}
  100%{transform:rotate(var(--cp-lean,0deg)) translateY(0)}}
/* الاحتفال: الشرّابة تنطلق مع القفزة */
.cp-cheer .np-tassel{animation:cp-tfling .78s cubic-bezier(.3,1.5,.4,1)}
@keyframes cp-tfling{0%{transform:rotate(0)}30%{transform:rotate(-32deg)}
  62%{transform:rotate(18deg)}100%{transform:rotate(0)}}

/* ⚠️ `transform-box:fill-box` **شرطٌ لا زينة**: في SVG يعني `center` بلا
   هذه الخاصّيّة **مركزَ الإطار** لا مركزَ العنصر — فكانت العينُ تنضغط نحو
   وسط الرسم وتنزلق عن محجرها بدل أن ترمش في مكانها. عطبٌ كان في الرفاق
   **الخمسة** جميعاً ولم يُلحَظ لأنّ عيونهم قريبةٌ من المركز. */
.np-eye{transform-box:fill-box; transform-origin:center;
  animation:cp-blink var(--cp-blink,5.6s) infinite}
.np-eye-r{animation-delay:.06s}
/* ⚠️ نافذةُ الإغلاق **٣٫٤٪** لا ٤٫٥٪: عند ٤٫٢ث كانت الرمشةُ ٠٫١٨٩ث،
   والرمشةُ الطبيعيّةُ دون ٠٫١٥. وهي الآن ٠٫١٤٣ث لأدّون و٠٫١٢٢ لذيبو
   و٠٫٢٣١ لميجو (كوالا، وبطؤه مقصود). حُسبت لا قُدِّرت. */
@keyframes cp-blink{0%,96.6%,100%{transform:scaleY(1)}98.2%{transform:scaleY(.08)}}
.cp-quiet .np-eye{animation-duration:8s}
/* رمشةٌ عند كلّ ضغطةٍ أو لمسة — أولويّةٌ أعلى من الرمش التلقائيّ فلا يتصارعان */
.cp-wink .np-eye{animation:cp-wink .2s ease-in-out !important}
@keyframes cp-wink{0%,100%{transform:scaleY(1)}45%{transform:scaleY(.06)}}

.cp-say{
  position:absolute; inset-block-end:calc(100% + 4px); inset-inline-end:0;
  background:var(--panel); border:1px solid var(--border); border-radius:14px;
  padding:7px 14px; font-size:13.5px; font-weight:600; color:var(--text);
  white-space:nowrap; max-width:64vw; overflow:hidden; text-overflow:ellipsis;
  box-shadow:0 4px 16px rgba(0,0,0,.10);
  opacity:0; transform:translateY(5px) scale(.94);
  transition:opacity .2s, transform .2s cubic-bezier(.3,1.5,.5,1)
}
.cp-say-on .cp-say{opacity:1; transform:none}

.cp-empty{display:flex; flex-direction:column; align-items:center; gap:10px;
  padding:24px 16px; text-align:center}
.cp-empty-fig svg{width:136px; height:157px; display:block; overflow:visible}
.cp-empty .muted{max-width:34ch}

/* ⚠️ لا يظهر في الطباعة: الطالب يطبع ملاحظاته واختباراته، ورفيقٌ في زاوية
   الورقة عبثٌ يستهلك حبراً. `z-index:40` يُبقيه تحت النوافذ المنبثقة (١٠٠)
   وتحت الشريط السفليّ (٥٠) — قِيست كلُّ قيم `z-index` في المشروع. */
@media print{ .cp,.cp-empty-fig{display:none !important} }

@media(max-width:520px){
  /* ⚠️ **‏88 ← ‏104px بطلب المالك** (2026-09-01): «كبّر الشخصيّة على الهاتف».
   * وهي الآن ‏93٪ من حجم الحاسوب (‏112px) بدل ‏79٪ — ونصيبُها من عرض الشاشة
   * صار أكبرَ منه على الحاسوب (‏104/390 = ‏27٪ مقابل ‏112/1280 = ‏9٪).
   * والمسافةُ السفليّةُ ‏84px تُبقيها فوق الشريط السفليّ بلا ازدحام. */
  /* ⚠️ **‏84 ← ‏136px: الرفيقُ كان يغطّي مربّعَ الكتابة وزرَّ الإرسال** (2026-09-01).
   * قِيس على الصفحة الحيّة (‏390×844، المكتبة، تبويب المحادثة):
   *     شريطُ الكتابة  y = 717…763   ·  زرُّ الإرسال y = 721…763
   *     الرفيقُ عند ‏84px  ⇒  y = 658…760  ⇒ تراكبٌ ‏1,321px² مع المربّع
   *                                        و‏1,622px² مع زرّ الإرسال
   * والعطبُ **سابقٌ للتكبير** (كان قائماً عند ‏88px)، لكنّ التكبيرَ زاد تراكبَ
   * المربّع إلى ‏2,003px² — فيُصلَح الآن لا يُورَّث.
   * و`pointer-events:none` يمنع حجبَ اللمس لكنّه لا يمنع حجبَ **النظر**: يرى
   * الطالبُ ببغاءً فوق زرّ الإرسال. والمطلوبُ أن يعلوَ الشريطَ: ‏844−717 = ‏127
   * حدّاً أدنى، و‏136 تترك هامشاً ‏19px لنموّ المربّع بالنصّ. */
  /* ⚠️ **وحجمُها على الهاتف كان ربعَ الشاشة** (قِيس 2026-09-23: ‏104 من ‏390 = ‏27٪، فوق
   * المنشورات ورسائل المكتبة). وهي زينةٌ لا أداة (`pointer-events:none` و`aria-hidden`)،
   * فحقُّها الحضورُ لا المزاحمة. ‏76px ≈ ‏19٪: تبقى مرئيّةً ويبقى المحتوى هو الأصل. */
  .cp{inset-block-end:calc(136px + env(safe-area-inset-bottom)); inset-inline-end:8px; width:76px}
  .cp svg{width:76px; height:88px}

  /* ⚠️ **الحدُّ يتقلّص مع الشكل — وأدّون وحدَه لا يحتمل ذلك** (2026-09-01).
   *
   * بلّغ المالكُ بصورتين: «هكذا يجب أن تكون» من الحاسوب، و«هكذا تظهر في الهاتف».
   * وقِيس الفرقُ بالبكسل بعد توحيد الارتفاع، فلم يكن تشويهَ نسبةٍ (‏0.639 مقابل
   * ‏0.631) بل **ذوبانَ الحدّ**.
   *
   * والسببُ حسابيٌّ بحت: `stroke-width` بوحدات `viewBox`، فتُضرب في مقياس العرض.
   *     حاسوب  ‏112px ⇒ 112/130 = 0.862  ⇒ حدُّ ‏3.4 يُرسم **‏2.93px**
   *     هاتف   ‏104px ⇒ 104/130 = 0.800 ⇒ حدُّ ‏3.4 يُرسم **‏2.72px**
   * وقِيس على الرسم فعلاً عند ‏DPR 1: ‏2 بكسل على الحاسوب و**‏1 بكسل** على الهاتف —
   * أي أنّه يُنصَّف. وخطٌّ بعرض بكسلٍ واحدٍ داكنٍ على وردٍّ فاتحٍ يبتلعه التنعيمُ.
   *
   * ⚠️ ولماذا أدّون وحدَه: إخوتُه الأربعةُ رؤوسُهم **كتلٌ مستقلّةٌ بحدودها**، أمّا
   * بدنُه فمسارٌ واحد (رأسٌ ٧٦ · خصرٌ ٤٨ · جسدٌ ٦٠) — فالحدُّ الخارجيُّ هو كلُّ
   * ما يرسم شكلَه. وحين يرقّ، يذوب.
   *
   * فالتعويضُ ‏112/104 = ‏1.077 على حدود الظِّلّ ووجهِ الرأس وحدها. والتفاصيلُ
   * الداخليّةُ الدقيقة (‏`ad-down` · `ad-vane` · `ad-lash` · `ad-rib`) **تُترَك**:
   * تثخينُها يطمس الرسمَ بدل أن يُقوّيه — والهدفُ ظِلٌّ يُقرأ لا خطوطٌ تتزاحم. */
  .cp-ch-addoun .ad-body {stroke-width:3.66}
  .cp-ch-addoun .ad-tail {stroke-width:3.23}
  .cp-ch-addoun .ad-plume{stroke-width:3.02}
  .cp-ch-addoun .ad-wing {stroke-width:2.69}
  .cp-ch-addoun .ad-wtip {stroke-width:2.58}
  .cp-ch-addoun .ad-beak {stroke-width:2.37}
  .cp-ch-addoun .ad-hband{stroke-width:2.37}
  .cp-ch-addoun .ad-hcup {stroke-width:2.37}
  .cp-ch-addoun .ad-foot {stroke-width:2.26}
}
.nv-set-row{display:flex;align-items:center;gap:9px;padding:10px 14px;cursor:pointer;font-size:14px}
.nv-set-row input{width:17px;height:17px;accent-color:var(--brand);cursor:pointer}

/* كتابٌ مفهرسٌ لا يُبحَث فيه — تحذيرٌ هادئ: يُخبر ولا يُفزع (كاشفُ الانهيار). */
.nv-book-bad{color:#b3541e;font-weight:700;cursor:help}

/* ملاحظةُ «لا كتب» بجانب الزرّ المعطَّل (2026-09-22) */
.nv-nobooks{margin-top:12px;padding:10px 12px;border:1px dashed var(--border);border-radius:12px;line-height:1.7}
.nv-nobooks .btn{display:inline-flex;vertical-align:middle;margin-block-start:6px}
.composer-cta{align-items:center;gap:12px}
.onboard-compact{display:flex;align-items:center;gap:10px;padding:10px 14px;font-size:14px}
.onboard-compact svg{width:18px;height:18px;flex:0 0 auto;color:var(--brand)}
.onboard-compact .x-btn{background:none;border:0;font-size:20px;line-height:1;color:var(--muted);cursor:pointer;padding:0 4px}
.cp-pick-h{font-weight:700;margin:14px 16px 8px}
.cp-pick-ok{display:inline-grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--brand-fill);color:#fff;font-size:12px;margin-inline-start:6px;vertical-align:middle}

/* شرحٌ صغيرٌ أسفل عنوان مجموعةِ إعدادات: يفرّق ما يُحفَظ على الجهاز عمّا يُحفَظ في
   الحساب — سأله المالكُ في مراجعة 2026-09-22 ولم يكن في الواجهة ما يقوله. */
.set-note{margin:-2px 16px 10px;font-size:13px;line-height:1.8;color:var(--muted);max-width:60ch}

/* ════════ عدّادُ الحضور الحيّ — للمالك وحدَه (طلبُه 2026-09-23) ════════
   علامةٌ مائيّةٌ لا لوحةُ تحكّم: قرصٌ شفّافٌ يُسحَب بحرّيّة ويُطوى إلى حلقةٍ صغيرة.
   ‏`touch-action:none` شرطٌ للسحب على الهاتف — بدونه يسحب المتصفّحُ الصفحةَ بدلاً منه. */
.oc{
  position:fixed; z-index:60; width:60px; height:60px; border-radius:50%;
  display:grid; place-items:center; gap:0; cursor:grab; user-select:none; touch-action:none;
  background:color-mix(in srgb, var(--brand) 16%, transparent);
  border:1px solid color-mix(in srgb, var(--brand) 38%, transparent);
  color:var(--brand); backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px);
  box-shadow:0 4px 18px rgba(0,0,0,.14); opacity:.72; transition:opacity .2s, transform .12s;
}
.oc:hover,.oc:focus-visible{opacity:1}
.oc.oc-drag{cursor:grabbing; transform:scale(1.04); opacity:1}
.oc .oc-n{font-size:19px; font-weight:900; line-height:1}
.oc .oc-l{font-size:10px; opacity:.85; margin-top:1px}
/* المطويّ: حلقةٌ صغيرةٌ تكاد لا تُرى حتّى يمرّ عليها المؤشّر */
.oc.oc-min{width:18px; height:18px; opacity:.45; background:transparent;
  border:2px solid color-mix(in srgb, var(--brand) 55%, transparent); box-shadow:none}
.oc.oc-min:hover{opacity:.95}
