/* ============================================================
   توکن‌های پایه — سرچشمهٔ یگانهٔ رنگ

   در قالب shadcn/tweakcn نوشته شده‌اند: هر سطح، رنگِ متنِ خوانا روی
   خودش را همراه دارد. یعنی می‌توان همین فایل را در tweakcn.com باز
   کرد، با لغزنده‌ها تغییرش داد و دوباره اینجا گذاشت — قالب همان است.

   چرا OKLCH: گام‌های برابرِ روشنایی، برابر دیده می‌شوند. رمپِ سطح‌ها
   با گام یکنواختِ ۰٫۰۲۵ ساخته شده، نه با هگزهای دستی. رمپِ پیشین
   دستی بود و همین دو اشکال را پنهان کرده بود:

     ۱) طلاییِ حلقهٔ تمرکز روی کاغذ ۲٫۷۵:۱ بود — زیر حداقلِ ۳:۱.
        سنجشِ پیشین فقط متن را می‌دید، پس حلقهٔ مردود از حلقهٔ قبول
        قابل تشخیص نبود.
     ۲) رنگ‌مایهٔ چهار رنگِ دسته از ۰٫۰۶۵ تا ۰٫۱۲۹ پخش بود، پس با
        وجود کنتراستِ نزدیک، سرخ فریاد می‌زد و فیروزه‌ای نجوا.

   هر مقدارِ اینجا با tools/contrast.mjs سنجیده می‌شود — متن ۴٫۵:۱ و
   عناصرِ واسط ۳:۱ — و آن ابزار در npm run validate اجرا می‌شود. اگر
   رنگی را دست بردید، همان فرمان می‌گوید که شکسته است یا نه.

   این فایل را هم نمایشگر می‌خواند و هم پنل مدیریت، تا دو سطح از هم
   دور نیفتند.
   ============================================================ */
:root{
  /* رمپ سطح — گام یکنواختِ ۰٫۰۲۵ روشنایی، فام ۸۸ (کاغذِ گرم) */
  --card:oklch(0.980 0.012 88);
  --surface-high:oklch(0.955 0.020 88);
  --surface:oklch(0.930 0.030 88);
  --surface-low:oklch(0.905 0.038 88);
  --surface-lowest:oklch(0.880 0.045 88);
  --border:oklch(0.830 0.055 88);
  --border-strong:oklch(0.760 0.065 88);

  /* خطوطِ نمودار خودشان اطلاعات‌اند — نسب را همین‌ها می‌گویند — پس
     باید ۳:۱ را پاس کنند. --border-strong نمی‌تواند همین کار را بکند:
     آن‌قدر تیره که ۳:۱ بدهد، برای یک خطِ مویِ کارت زیادی سنگین است.
     دو کار، دو توکن. */
  --link:oklch(0.600 0.065 88);

  /* مرکب */
  --fg:oklch(0.255 0.021 67);
  --fg-muted:oklch(0.486 0.037 78);

  /* نشان */
  --primary:oklch(0.300 0.092 168);
  --primary-2:oklch(0.430 0.120 166);

  /* طلایی دو کار دارد و دو مقدار می‌خواهد:
     --ring حلقهٔ تمرکز و خط مرزی است (حداقل ۳:۱)
     --accent-ink متن است (حداقل ۴٫۵:۱) */
  --ring:oklch(0.590 0.135 78);
  --accent-ink:oklch(0.508 0.082 80);

  /* جفت‌های معنایی: هر سطحِ پُررنگ، رنگِ متنِ خوانا روی خودش را همراه
     دارد. این همان الگوی shadcn است و دلیلش این است که کارت یا نشان
     هرگز نتواند با متنِ ناخوانا ساخته شود — نه به این دلیل که کسی
     یادش بماند، بلکه چون توکن دیگری وجود ندارد.

     --ring پُرکننده نیست و نباید باشد: حلقه است. نشانِ شمارهٔ امام
     پیش‌تر --gold را پُرکننده گرفته بود با متنِ تیره روی آن، که در
     ۱۱ پیکسل ۴٫۵:۱ را رد می‌کرد. پُرکنندهٔ طلاییِ درست --accent-ink
     است؛ همان طلایی که از اول برای متن تیره‌تر شده بود. */
  --primary-fg:oklch(0.980 0.012 88);

  /* رنگ‌های دسته — روشناییِ یکسانِ ۰٫۴۳ و رنگ‌مایهٔ نزدیک، تا چهار
     دسته هم‌خانواده دیده شوند نه یکی بلندتر از بقیه. راهنما همین‌ها
     را نشان می‌دهد، پس باید واقعاً یک خانواده باشند. */
  --karbala:oklch(0.445 0.155 26);
  --branch:oklch(0.445 0.135 330);
  --indigo:oklch(0.445 0.140 268);
  --teal:oklch(0.445 0.110 205);


  /* ── واژگانِ shadcn ──────────────────────────────────────
     نام‌هایی که مؤلفه‌های shadcn با آن‌ها ساخته شده‌اند، روی همین رمپ
     نگاشته می‌شوند. بدونِ این‌ها چیزی برای پورت‌کردن وجود ندارد:
     ghost و outline هر دو به --accent تکیه دارند، و همهٔ متن‌های فرعی
     به --muted-foreground.

     هر جفت، رنگِ متنِ خودش را همراه دارد. */
  --background:var(--surface);
  --foreground:var(--fg);
  --card-foreground:var(--fg);
  --popover:var(--card);
  --popover-foreground:var(--fg);

  --secondary:oklch(0.905 0.038 88);
  --secondary-foreground:oklch(0.255 0.021 67);
  --muted:oklch(0.930 0.030 88);
  --muted-foreground:oklch(0.486 0.037 78);
  --accent:oklch(0.880 0.045 88);
  --accent-foreground:oklch(0.255 0.021 67);
  --destructive:var(--karbala);
  --destructive-foreground:oklch(0.980 0.012 88);
  --input:var(--border);

  --radius:0.625rem;
  --dur:360ms;
  /* بازخوردِ مؤلفه‌ها باید فوری باشد. ۳۶۰ms برای حرکتِ نمودار درست است
     و برای فشردنِ یک دکمه کُند — دکمه باید زیر انگشت پاسخ بدهد. */
  --dur-fast:150ms;
  --ease:cubic-bezier(.4,.14,.3,1);
}

/* شب — مرکب روی شب، نه کاغذِ وارونه.
   خنثی‌ها فامِ ۱۶۵ (سبزِ نشان) را با رنگ‌مایهٔ بسیار کم نگه می‌دارند تا
   صفحه «اتاقِ تاریک» خوانده شود نه خاکستریِ گِلی. رنگ‌های دسته بالا
   می‌آیند، چون در روشناییِ ۰٫۴۳ روی زمینهٔ تیره خوانده نمی‌شوند. */
[data-theme="dark"]{
  --card:oklch(0.285 0.016 165);
  --surface-high:oklch(0.255 0.015 165);
  --surface:oklch(0.215 0.014 165);
  --surface-low:oklch(0.185 0.012 165);
  --surface-lowest:oklch(0.155 0.010 165);
  --border:oklch(0.420 0.020 165);
  --border-strong:oklch(0.570 0.026 165);
  --link:oklch(0.620 0.030 165);

  --fg:oklch(0.935 0.018 88);
  --fg-muted:oklch(0.720 0.024 84);

  --primary:oklch(0.855 0.135 165);
  --primary-2:oklch(0.755 0.145 164);

  --ring:oklch(0.775 0.150 82);
  --accent-ink:oklch(0.800 0.095 82);

  --primary-fg:oklch(0.215 0.014 165);

  --karbala:oklch(0.705 0.165 26);
  --branch:oklch(0.705 0.140 330);
  --indigo:oklch(0.705 0.135 268);
  --teal:oklch(0.710 0.125 205);

  --background:var(--surface);
  --foreground:var(--fg);
  --card-foreground:var(--fg);
  --popover:var(--card);
  --popover-foreground:var(--fg);

  --secondary:oklch(0.320 0.018 165);
  --secondary-foreground:oklch(0.935 0.018 88);
  --muted:oklch(0.300 0.016 165);
  --muted-foreground:oklch(0.720 0.024 84);
  --accent:oklch(0.360 0.020 165);
  --accent-foreground:oklch(0.935 0.018 88);
  --destructive:var(--karbala);
  --destructive-foreground:oklch(0.155 0.010 165);
  --input:var(--border);
}

/* حرکتِ کاسته: توکن صفر می‌شود و همه‌جا اثر می‌گذارد. قاعدهٔ فراگیرِ
   `*` عمداً اینجا نیست — پنل مدیریت چرخندهٔ خود را کند می‌کند نه
   متوقف، و یک !important اینجا آن تصمیم را بی‌سروصدا لغو می‌کرد. */
@media (prefers-reduced-motion: reduce){
  :root{ --dur:0ms; --dur-fast:0ms; }
}
