/* ==========================================================================
   ایجنت‌اینا — «سینمای اسکن» · لایهٔ توکن
   منبع حقیقت رنگ/فاصله/تایپوگرافی. هیچ صفحه‌ای اجازه ندارد این مقادیر را
   کپی کند؛ همه از همین متغیرها می‌خورند. کامپوننت‌ها در components.css.
   ========================================================================== */

/* ── فونت‌ها (سلف‌هاست، بدون CDN) ───────────────────────────────────────── */
@font-face{
  font-family:'Estedad';
  src:url('/static/lab/fonts/Estedad-FD.woff2') format('woff2-variations');
  font-weight:100 900;font-style:normal;font-display:swap;
}
/* مونوی لاتین — فقط توکن‌های فنی (دامنه، لیبل ACT/SCAN/FINDING، کد، URL).
   ساب‌ست latin؛ عمداً گلیف فارسی ندارد تا هرگز روی متن فارسی نیفتد. */
@font-face{
  font-family:'JetBrains Mono';
  src:url('/static/lab/fonts/JetBrainsMono-latin.woff2') format('woff2');
  font-weight:400 600;font-style:normal;font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,
                U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

/* ── توکن‌ها ───────────────────────────────────────────────────────────── */
:root{
  /* رنگ — آبی = کاری که از کاربر می‌خواهیم · سایان = چیزی که سیستم می‌گوید
     · قرمز = یافتهٔ بد. این تفکیک هرگز جابه‌جا نمی‌شود. */
  --bg:#05070C; --bg2:#070A12; --surface:#0B111C; --raised:#101827;
  --line:#1A2334; --line-soft:#121A28; --line-bright:#243049;
  --blue:#3E7BFF; --blue-hi:#5B90FF; --blue-rgb:62,123,255;
  --cyan:#38D9F0; --cyan-rgb:56,217,240; --cyan-faint:rgba(56,217,240,.09);
  --text:#EDF2FA; --muted:#93A0B8; --faint:#57637A;
  --danger:#FF6B7A; --danger-rgb:255,107,122;
  --warn:#FFC24A; --warn-rgb:255,194,74;
  /* تنها سطح روشنِ مجاز: «آرتیفکت کاغذی» (نمونهٔ گزارش/رسید) — هرگز پس‌زمینهٔ صفحه */
  --paper:#FAF6EC; --paper-ink:#1A1710;

  /* فاصله */
  --s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:24px;--s6:32px;
  --s7:48px;--s8:64px;--s9:96px;--s10:144px;

  /* شعاع */
  --r-s:8px;--r-m:12px;--r-l:18px;--r-xl:24px;

  /* ارتفاع — سایهٔ خنثی + هایلایت داخلی ۱px. هرگز گلوی رنگی به‌عنوان elevation. */
  --el-1:0 1px 2px rgba(0,0,0,.4),0 4px 12px rgba(0,0,0,.3),inset 0 1px 0 rgba(255,255,255,.035);
  --el-2:0 2px 4px rgba(0,0,0,.45),0 12px 32px rgba(0,0,0,.4),inset 0 1px 0 rgba(255,255,255,.045);
  --el-3:0 4px 8px rgba(0,0,0,.5),0 32px 80px rgba(0,0,0,.55),inset 0 1px 0 rgba(255,255,255,.05);

  /* حرکت و لایه */
  --ease:cubic-bezier(.22,.8,.28,1);
  --z-nav:80;--z-progress:90;--z-modal:100;--z-toast:110;

  /* تایپوگرافی */
  --font:'Estedad','Vazirmatn',system-ui,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace;

  /* عرض ستون */
  --wrap:1180px;      /* گرید لندینگ/فروش */
  --read:68ch;        /* ستون خواندن (بلاگ/حقوقی) */
}

/* ── ریست ─────────────────────────────────────────────────────────────
   ⚠️ این فایل فقط روی صفحاتی لود می‌شود که به «سینمای اسکن» مهاجرت کرده‌اند
   (‎_lab_head.html با ds_fusion). صفحات قدیمی سیستم خودشان را دارند و هیچ
   قاعده‌ای از اینجا رویشان نمی‌افتد — پس اینجا می‌توان نظرمند بود. */
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html{
  background:var(--bg);
  scroll-behavior:smooth;
  -webkit-text-size-adjust:100%;
  /* هیچ صفحه‌ای نباید افقی اسکرول شود — قاعدهٔ ریشه‌ای، نه وصله.
     clip (نه hidden) چون scroll-container نمی‌سازد و position:sticky سالم می‌ماند. */
  overflow-x:clip;
}
body{
  font-family:var(--font);
  background:var(--bg);
  color:var(--text);
  font-size:16px;font-weight:300;line-height:1.9;
  min-height:100svh;
  overflow-x:clip;
  text-rendering:optimizeLegibility;
  -webkit-font-smoothing:antialiased;
}
img,svg,video,canvas{display:block;max-width:100%}
img,video{height:auto}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
::selection{background:rgba(var(--cyan-rgb),.25);color:var(--text)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--line);border-radius:5px;border:2px solid var(--bg)}
::-webkit-scrollbar-track{background:var(--bg)}

/* ── فوکوس — روی هر عنصر تعاملی، بدون استثنا ──────────────────────────── */
:where(a,button,input,select,textarea,summary,dialog,[role=button],[role=switch],[tabindex]):focus-visible{
  outline:2px solid var(--cyan);outline-offset:3px;border-radius:6px;
}

/* ── مقیاس تایپوگرافی ─────────────────────────────────────────────────── */
h1,.t-h1{font-size:clamp(36px,5vw,64px);line-height:1.22;font-weight:900;letter-spacing:-1.2px}
h2,.t-h2{font-size:clamp(28px,3.4vw,42px);line-height:1.3;font-weight:900;letter-spacing:-.8px}
h3,.t-h3{font-size:clamp(18px,2vw,21px);line-height:1.5;font-weight:800;letter-spacing:-.2px}
p,.t-body{font-size:16px;font-weight:300;line-height:1.95}
.t-lead{font-size:17px;color:var(--muted);font-weight:300;line-height:2}
.t-cap{font-size:12.5px;color:var(--faint);line-height:1.75}

/* لیبل مونوی لاتین — همیشه جزیرهٔ LTR */
.mono,.t-mono{font-family:var(--mono);direction:ltr;unicode-bidi:isolate;letter-spacing:2px}
.t-mono{font-size:10.5px;color:var(--faint);text-transform:uppercase}
/* هر محتوای لاتین (دامنه/کد/URL) داخل متن فارسی */
.ltr{direction:ltr;unicode-bidi:isolate;text-align:left}
/* اعداد جدولی — متریک، جدول، خروجی محاسبه */
.num{font-variant-numeric:tabular-nums}

/* ── کانتینرها ────────────────────────────────────────────────────────── */
.wrap{max-width:var(--wrap);margin-inline:auto;padding-inline:var(--s6);position:relative;z-index:2}
.read{max-width:var(--read);margin-inline:auto}
@media(max-width:640px){.wrap{padding-inline:var(--s4)}}

/* ── دسترس‌پذیری ──────────────────────────────────────────────────────── */
/* پرش به محتوا — با clip پنهان می‌شود، نه با inset منفیِ بزرگ (که در RTL
   صفحه را هزاران پیکسل عریض می‌کرد؛ ریشهٔ باگ سرریز افقی همین الگو بود). */
.skip-link{
  position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);
  white-space:nowrap;background:var(--blue);color:#fff;font-weight:700;font-size:14px;
  padding:10px 16px;border-radius:var(--r-s);z-index:200;
}
.skip-link:focus-visible{
  width:auto;height:auto;overflow:visible;clip:auto;clip-path:none;
  inset-block-start:var(--s3);inset-inline-start:var(--s3);
}
.sr-only{
  position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);
  clip-path:inset(50%);white-space:nowrap;
}
/* هانی‌پات ضدبات: برای انسان نامرئی، برای بات قابل‌پرکردن. با clip پنهان
   می‌شود (نه inset:-9999px) تا عرض سند را بزرگ نکند. display:none نیست
   چون بعضی بات‌ها فیلدهای none را رد می‌کنند. */
.hp-field{
  position:absolute!important;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);opacity:0;pointer-events:none;
}

/* ── حرکت ─────────────────────────────────────────────────────────────── */
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{
    animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important;
  }
}
