/* ═══════════════════════════════════════════════════════════════════════
   GEONAZORAT SRM — GRAFIK TIZIMI (uslub qatlami)
   Juftlik: `grafik.js`. Ikkalasi birga ulanadi, alohida ma'nosi yo'q.
   ═══════════════════════════════════════════════════════════════════════

   NIMA UCHUN ALOHIDA FAYL
   ───────────────────────
   Ilgari har sahifa o'z grafigini `<style>` blokida qurardi: `.soatlik .b`
   (analitika + asosiy), `.gorb .ich` (analitika), `.bog .s` (nazorat) …
   Bitta rang o'zgarsa olti joyni qidirish kerak edi va ular allaqachon
   bir-biridan uzoqlashgan — bir sahifada ustun `--teal`, boshqasida
   `--kok`. Endi grafik ranglari FAQAT shu faylda; sahifa `Grafik.*`
   chaqiradi va rang tanlamaydi.

   RANG QAROR DAFTARI (dataviz metodikasi, olti tekshiruv)
   ───────────────────────────────────────────────────────
   Loyiha palitrasi (`belgilar.css`) grafik uchun to'liq emas edi: unda
   bitta brend ko'ki, oltin (3 joyga band) va BESHTA HOLAT rangi bor.
   Holat ranglari — zaxiralangan ma'no (norma/kuzatuv/jiddiy/kritik), ular
   «4-qator seriya» sifatida ishlatilmaydi. Ya'ni identifikatsiya
   (qaysi karyer, qaysi tuman) uchun rang YO'Q edi.

   Shuning uchun 8 slotli SERIYA shkalasi hosil qilindi. U taxmin bilan
   emas, qidiruv bilan tanlandi: 8 hue oilasi OKLCH da qadamlab qo'yildi,
   birinchi slot brend ko'ki (H=261, `--asos` bilan bir oila) qilib
   qotirildi, qolgan 7 slotning 5040 tartibi `validate_palette.js` orqali
   o'tkazildi va qo'shni juftlarning eng yomon CVD ΔE si maksimallashtirildi.
   568 tartib barcha darvozadan o'tdi; ulardan eng yaxshisi olindi.

   O'LCHOV NATIJASI (skript chiqishi, ko'z bilan emas):
     OCH  (yuza #FFFFFF)  — band PASS · chroma PASS ·
       CVD qo'shni eng yomon #CE3E41↔#01A19D ΔE 12.6 (deutan)   [nishon ≥8]
       oddiy ko'rish eng yomon #D669A1↔#E37A2E ΔE 15.9          [chegara ≥15]
       kontrast: zarg'aldoq 2.96:1 va sariq 2.22:1 — 3:1 dan past → WARN.
       YENGILLIK MAJBURIYATI bajarilgan: har grafikda ko'rinadigan
       to'g'ridan-to'g'ri yorliq VA jadval ko'rinishi bor.
     TO'Q (yuza #0C1F38)  — band PASS · chroma PASS ·
       CVD qo'shni eng yomon #CF4D4C↔#00A9A6 ΔE 12.4 (deutan)
       oddiy ko'rish eng yomon #CD5E98↔#C96617 ΔE 15.9
       kontrast: 8 tasi ham ≥3:1 — PASS.
     Ikkala rejimda ham `exit 0`.

   SERIYA CHEKLOVI: `--pairs all` (har ikki belgi yonma-yon tushishi mumkin
   bo'lgan shakllar) da FAQAT BIRINCHI UCH SLOT o'tadi (och 12.5/15.9,
   to'q 9.7/15.9). To'rtinchi slot qo'shilganda sariq↔zarg'aldoq juftligi
   oddiy ko'rish chegarasidan tushadi (ΔE 12.3) — shuning uchun 3 dan ortiq
   seriya kerak bo'lsa qolganini «Boshqa» ga yig'ing yoki kichik ko'plikka
   bo'ling. Rang QO'SHIB muammo hal qilinmaydi.

   HOLAT bilan TO'QNASHUV (halol o'lchov, yashirilmaydi):
     qizil #CE3E41 ↔ --kritik #C4283C  ΔE 4.0
     o't-yashil #3F8739 ↔ --norma #11803A  ΔE 3.7
     ko'k #2D5FB7 ↔ --kuzatuv #1F6FB2  ΔE 4.6
     sariq #D1AA15 ↔ --oltin #F7B524  ΔE 7.0
   Bu tasodif emas va «tuzatib» bo'lmaydi: holat ranglari ham xuddi shu
   hue oilalarida. Yechim rang emas, KANAL: holat har doim BELGI+YOZUV
   bilan keladi (`.gr-holat` nuqta emas, shakl), seriya esa har doim
   afsona va to'g'ridan-to'g'ri yorliq bilan. Rang hech qachon yolg'iz
   ma'no tashimaydi.

   KETMA-KET (sequential) shkala — bitta hue, `--asos` oilasidan
   (H=261). `--ordinal` bilan tekshirilgan: och (#90B6F9→#1F4B99)
   monoton PASS, eng och qadam 2.05:1; to'q (#D6E6FF→#3A6DC6) monoton
   PASS, eng och qadam 3.30:1. Kamalak YO'Q.

   IKKI YUZA
   ─────────
   Dastur OCH; `sputnik-arxiv` sahnasi TO'Q. To'q yuzada grafik kerak
   bo'lsa grafik elementiga yoki uning HAR QANDAY ota-onasiga `gr-toq`
   klassi qo'yiladi — belgilar qayta ta'riflanadi, JS ga tegilmaydi.
   `prefers-color-scheme` ga bog'lanmaydi: bu dasturda mavzu tanlovi
   yo'q va operator ekranidagi yuza sahifaga qarab QAT'IY belgilangan.
   ═══════════════════════════════════════════════════════════════════════ */

.gr{
  /* ── Yuza va siyoh ─────────────────────────────────────────────── */
  --gr-yuza:#FFFFFF;           /* karta yuzasi — bo'shliq va halqa shu rangda */
  --gr-matn:#2B333D;           /* asosiy matn (qiymat, sarlavha) */
  --gr-matn2:#49525F;          /* ikkilamchi matn (afsona, jadval sarlavhasi) */
  --gr-sonik:#6A7585;          /* o'q yorlig'i, izoh — 4.67:1 oq fonda */
  --gr-tor:#EBEEF3;            /* to'r — ingichka, yuzadan bir qadam */
  --gr-baz:#CBD2DC;            /* bazis va o'q chizig'i */
  --gr-sonuq:#DDE3EB;          /* e'tibordan chetlashtirilgan chiziq (uchqun) */
  /* «Boshqa» — cheklovdan ortiq qatorlar YIG'ILADIGAN neytral. Seriya
     sloti EMAS: u identifikatsiya qilmaydi, «bu yerda yana N ta bor»
     deydi. Oq fonda 3.49:1 — belgi uchun yetarli. */
  --gr-boshqa:#7F8A9B;
  --gr-nishon:rgba(31,75,153,.07); /* hover/fokus dog'i */

  /* ── SERIYA (identifikatsiya) — TARTIB QOTIRILGAN ──────────────────
     Slotlar KETMA-KET beriladi va HECH QACHON aylantirilmaydi. Rang
     entitetga (karyerga, tumanga) biriktiriladi — filtr natijani
     qisqartirsa, omon qolganlar rangini SAQLAYDI. */
  --gr-s1:#2D5FB7;   /* ko'k — brend oilasi, sukut bo'yicha yagona seriya */
  --gr-s2:#E37A2E;   /* zarg'aldoq */
  --gr-s3:#D669A1;   /* pushti */
  --gr-s4:#D1AA15;   /* sariq */
  --gr-s5:#01A19D;   /* firuza */
  --gr-s6:#CE3E41;   /* qizil */
  --gr-s7:#6C39AC;   /* binafsha */
  --gr-s8:#3F8739;   /* o't-yashil */

  /* ── KETMA-KET (kattalik) — bitta hue, och→to'q ────────────────── */
  --gr-k1:#90B6F9; --gr-k2:#4C7ED6; --gr-k3:#2B5CB3; --gr-k4:#1F4B99;

  /* ── HOLAT — `belgilar.css` dan O'ZGARISHSIZ olinadi ───────────────
     Bu qiymatlar shu yerda qayta yozilmaydi: butun dasturda chip, jadval
     va grafik bir xil qizilni ko'rsatishi shart. */
  --gr-h-norma:var(--norma,#11803A);
  --gr-h-kuzatuv:var(--kuzatuv,#1F6FB2);
  --gr-h-jiddiy:var(--jiddiy,#B45309);
  --gr-h-kritik:var(--kritik,#C4283C);
  --gr-h-olchanmadi:var(--olchanmadi,#6A7585);

  /* ── O'lchamlar ────────────────────────────────────────────────── */
  --gr-ustun-eni:24px;   /* belgi qalinligi shifti — band to'ldirilmaydi */
  --gr-bosh:1.5px;       /* to'r/o'q — hairline, DOIM to'liq (punktir emas) */

  position:relative;
  display:block;
  margin:0;
  color:var(--gr-matn);
  font-family:inherit;
  font-size:12px;
}

/* ═══ TO'Q YUZA ══════════════════════════════════════════════════════
   Ota-ona `.gr-toq` bo'lsa ham, elementning o'zi bo'lsa ham ishlaydi. */
.gr-toq .gr, .gr.gr-toq{
  --gr-yuza:#0C1F38;
  --gr-matn:#E6EDF7;
  --gr-matn2:#C9D6E8;
  --gr-sonik:#8FA3BC;
  --gr-tor:#17304F;
  --gr-baz:#2C4A6E;
  --gr-sonuq:#274465;
  --gr-nishon:rgba(255,255,255,.06);

  --gr-s1:#4C7ED6; --gr-s2:#C96617; --gr-s3:#CD5E98; --gr-s4:#B29000;
  --gr-s5:#00A9A6; --gr-s6:#CF4D4C; --gr-s7:#956DD4; --gr-s8:#4C9445;
  --gr-boshqa:#7A93B0;         /* to'q yuzada 5.22:1 */

  /* Ketma-ket shkala to'q yuzada TESKARI langar oladi: eng och qadam
     endi «ko'p», chunki to'q qadam fonga singib ketadi. */
  --gr-k1:#3A6DC6; --gr-k2:#6C99E9; --gr-k3:#B5D1FF; --gr-k4:#D6E6FF;

  /* Holat ranglari to'q yuzada ochroq qadamga ko'chadi — asl qiymatlar
     #0C1F38 ustida 3:1 dan past tushardi (kritik 2.93:1). Hue va ma'no
     o'zgarmaydi, faqat yorqinlik. */
  --gr-h-norma:#44A65E;
  --gr-h-kuzatuv:#4C97DD;
  --gr-h-jiddiy:#DE793D;
  --gr-h-kritik:#E94E59;
  --gr-h-olchanmadi:#939FB1;
}

/* ═══ SARLAVHA QISMI ═══════════════════════════════════════════════ */
.gr-shapka{
  display:flex; align-items:flex-start; justify-content:space-between;
  gap:12px; margin:0 0 10px;
}
.gr-sarlavha{font-size:14px;font-weight:600;line-height:1.3;color:var(--gr-matn)}
.gr-izoh{font-size:11.5px;color:var(--gr-sonik);margin-top:2px;line-height:1.35}
.gr-boshqaruv{display:flex;gap:6px;flex:0 0 auto}

.gr-tugma{
  font:inherit; font-size:11.5px; font-weight:600;
  color:var(--gr-matn2); background:transparent;
  border:1px solid var(--gr-baz); border-radius:4px;
  padding:4px 9px; cursor:pointer;
}
.gr-tugma[aria-pressed="true"]{
  color:var(--gr-yuza); background:var(--gr-s1); border-color:var(--gr-s1);
}

/* ═══ AFSONA ═══════════════════════════════════════════════════════
   ≥2 seriya bo'lsa DOIM bor. Matn hech qachon seriya rangini kiymaydi —
   rang faqat yonidagi belgida (chiziq kaliti yoki to'rtburchak). */
.gr-afsona{display:flex;flex-wrap:wrap;gap:4px 14px;margin:0 0 10px}
.gr-af{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;
  color:var(--gr-matn2);line-height:1.3}
.gr-af-belgi{flex:0 0 auto;border-radius:2px}
.gr-af-belgi.chiziq{width:14px;height:2.5px;border-radius:99px}
.gr-af-belgi.blok{width:10px;height:10px}
.gr-af-qiy{color:var(--gr-sonik);font-variant-numeric:tabular-nums}

/* ═══ CHIZMA MAYDONI ═══════════════════════════════════════════════
   Balandlik CHIZMA + X O'QI ni birga o'z ichiga oladi — aks holda
   kartaning ichida mayda vertikal skroll paydo bo'ladi. */
.gr-maydon{position:relative}
.gr-svg{display:block;width:100%;height:auto;overflow:visible;
  -webkit-tap-highlight-color:transparent}
.gr-svg:focus{outline:none}
.gr-svg:focus-visible{outline:2px solid var(--oltin,#F7B524);outline-offset:2px;border-radius:4px}

/* To'r va o'q: bir qadam so'nik, DOIM to'liq chiziq. */
.gr-tor-chiziq{stroke:var(--gr-tor);stroke-width:var(--gr-bosh)}
.gr-bazis{stroke:var(--gr-baz);stroke-width:var(--gr-bosh)}
.gr-oq-matn{fill:var(--gr-sonik);font-size:10.5px;font-variant-numeric:tabular-nums}
.gr-yorliq{fill:var(--gr-matn);font-size:11px;font-weight:600;
  font-variant-numeric:tabular-nums}
.gr-yorliq-ich{font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}
.gr-nom{fill:var(--gr-matn2);font-size:11.5px}

/* Belgilar. Chegara CHIZILMAYDI — ajratuvchi yuza bo'shlig'i (2px) va
   yuza halqasi. */
.gr-belgi{shape-rendering:crispEdges}
.gr-chiziq{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.gr-maydonchiz{stroke:none}
.gr-nuqta{stroke:var(--gr-yuza);stroke-width:2}
.gr-krossxeyr{stroke:var(--gr-baz);stroke-width:var(--gr-bosh)}

/* Hover/fokus: belgi javob berishi ko'rinsin. Qiymat O'ZGARMAYDI —
   faqat holat. */
.gr-hit{fill:transparent;cursor:default}
.gr-hit.faol{fill:var(--gr-nishon)}
.gr-belgi.faol{filter:brightness(1.12)}
.gr-toq .gr-belgi.faol,.gr.gr-toq .gr-belgi.faol{filter:brightness(1.22)}

/* ═══ TOOLTIP ══════════════════════════════════════════════════════
   Qiymat YETAKCHI (kuchli), seriya nomi ikkilamchi — afsonaning
   ierarxiyasi teskari: bu yerda o'quvchi seriyani biladi, raqamni
   qidiradi. Tooltip hech narsani QULFLAMAYDI: har qiymat jadval
   ko'rinishida ham bor. */
.gr-tip{
  position:absolute; z-index:5; pointer-events:none;
  min-width:120px; max-width:240px;
  background:var(--gr-yuza); color:var(--gr-matn);
  border:1px solid var(--gr-baz); border-radius:4px;
  box-shadow:var(--soya2,0 4px 12px rgba(7,22,43,.10));
  padding:7px 9px; font-size:11.5px; line-height:1.4;
}
.gr-tip[hidden]{display:none}
.gr-tip-x{color:var(--gr-sonik);font-size:10.5px;margin-bottom:4px;
  font-variant-numeric:tabular-nums}
.gr-tip-qat{display:flex;align-items:baseline;gap:7px;margin-top:2px}
.gr-tip-kalit{flex:0 0 auto;width:12px;height:2.5px;border-radius:99px;
  transform:translateY(-3px)}
.gr-tip-nom{color:var(--gr-matn2);flex:1 1 auto;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gr-tip-qiy{font-weight:700;font-variant-numeric:tabular-nums;flex:0 0 auto}

/* ═══ JADVAL KO'RINISHI ════════════════════════════════════════════
   Grafikning matnli egizagi. Har qiymat shu yerda — hech bir raqam
   faqat hoverda yashirinmaydi. */
.gr-jadval{margin-top:4px;max-height:320px;overflow:auto}
.gr-jadval[hidden]{display:none}
.gr-jadval table{width:100%;border-collapse:collapse;font-size:12px}
.gr-jadval caption{text-align:left;font-size:11px;color:var(--gr-sonik);
  padding:0 0 6px}
.gr-jadval th,.gr-jadval td{padding:5px 8px;text-align:left;
  border-bottom:1px solid var(--gr-tor)}
.gr-jadval thead th{position:sticky;top:0;background:var(--gr-yuza);
  color:var(--gr-matn2);font-weight:600;font-size:11px;
  border-bottom:1px solid var(--gr-baz)}
.gr-jadval td.son,.gr-jadval th.son{text-align:right;
  font-variant-numeric:tabular-nums}
.gr-jadval td.son{font-weight:600}

/* ═══ HOLAT BELGISI ════════════════════════════════════════════════
   Holat rangi HECH QACHON yolg'iz ketmaydi: shakl + yozuv majburiy.
   Shakl rangdan mustaqil o'qiladi (rang ko'rmaydigan foydalanuvchi va
   oq-qora chop etish uchun). */
.gr-holat{display:inline-flex;align-items:center;gap:5px}
.gr-holat-shakl{flex:0 0 auto;width:9px;height:9px;display:inline-block}
.gr-holat-shakl.norma{border-radius:99px}                                  /* doira */
.gr-holat-shakl.kuzatuv{border-radius:1px}                                 /* kvadrat */
.gr-holat-shakl.jiddiy{clip-path:polygon(50% 0,100% 100%,0 100%)}          /* uchburchak */
.gr-holat-shakl.kritik{clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%)}   /* romb */
.gr-holat-shakl.olchanmadi{clip-path:polygon(0 40%,100% 40%,100% 60%,0 60%)} /* tire */

/* ═══ BO'SH HOLAT ══════════════════════════════════════════════════
   Ma'lumot yo'q bo'lsa TAXMIN QO'YILMAYDI va bo'sh o'q ham chizilmaydi —
   aytiladi. */
.gr-bosh{
  display:flex;align-items:center;justify-content:center;
  min-height:110px; padding:18px;
  border:1px dashed var(--gr-baz); border-radius:4px;
  color:var(--gr-sonik); font-size:12px; text-align:center;
}

/* ═══ STAT PLITKA ══════════════════════════════════════════════════ */
.gr-plitka{display:flex;flex-direction:column;gap:6px}
.gr-pl-yorliq{font-size:11.5px;color:var(--gr-sonik);line-height:1.3}
.gr-pl-qator{display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}
/* Katta yakka son PROPORSIONAL raqam bilan: `tabular-nums` da har raqam
   nol kengligini oladi va 121 kabi son bo'sh ko'rinadi. Tabular faqat
   ustunlarda (jadval, o'q nishoni). */
.gr-pl-qiymat{font-size:28px;font-weight:700;line-height:1.05;
  color:var(--gr-matn);font-variant-numeric:normal;letter-spacing:-.5px}
.gr-pl-birlik{font-size:12px;font-weight:600;color:var(--gr-sonik)}
.gr-pl-izoh{font-size:11px;color:var(--gr-sonik);line-height:1.35}
.gr-pl-delta{font-size:11.5px;font-weight:600;display:inline-flex;
  align-items:center;gap:4px}
.gr-pl-uchqun{display:block;width:100%;height:auto;overflow:visible;margin-top:2px}
/* Plitkada «Jadval» tugmasi PASTDA: tepada bo'lsa, yonma-yon turgan
   plitkalarning katta soni bir chiziqdan chiqib ketadi (tugmasi bori
   pastroq boshlanadi). */
.gr-oyoq{margin-top:8px}
.gr-oyoq[hidden]{display:none}
.gr-oyoq .gr-tugma{padding:2px 8px;font-size:11px}

/* ═══ HARAKAT ══════════════════════════════════════════════════════
   QOIDA: qiymat animatsiya qilinmaydi — ustun o'smaydi, chiziq
   chizilmaydi, son sanalmaydi. Ekranda ko'rilgan har raqam bazadan
   kelgan yakuniy qiymat.
   Faqat HOLAT (hover, fokus) yumshoq o'tadi va u ham
   `prefers-reduced-motion: no-preference` ichida — `reduce` da o'tish
   SEKINLASHTIRILMAYDI, umuman YOZILMAYDI. */
@media (prefers-reduced-motion:no-preference){
  .gr-hit,.gr-belgi,.gr-tugma{transition:fill .12s ease,filter .12s ease,
    background .12s ease,color .12s ease,border-color .12s ease}
}

/* ═══ MAJBURIY RANGLAR (forced-colors) ═════════════════════════════
   Tizim yuqori kontrast rejimida rang kanali butunlay yo'qoladi.
   Belgilar tizim ranglariga o'tadi; ma'no afsona yozuvi, to'g'ridan-
   to'g'ri yorliq va jadval orqali saqlanadi. */
@media (forced-colors:active){
  .gr-belgi,.gr-chiziq,.gr-nuqta{forced-color-adjust:none;
    fill:CanvasText;stroke:CanvasText}
  .gr-maydonchiz{fill:transparent}
  .gr-tip{border-color:CanvasText}
}

/* ═══ CHOP ETISH ═══════════════════════════════════════════════════
   Qog'ozda hover yo'q — jadval ko'rinishi ham chiqadi, tugma esa yo'q. */
@media print{
  .gr-boshqaruv,.gr-tip{display:none!important}
  .gr-jadval[hidden]{display:block!important}
  .gr-jadval{max-height:none;overflow:visible}
}
