/* Sona kurumsal kimlik — tipografi token'ları v1 | 2026-07-21
   Aile: IBM Plex Sans + betik kardeşleri (Arabic / Devanagari / SC / TC / JP / KR)
   Lisans: SIL Open Font License 1.1 — kendi sunucumuzda barındırılır (fsType=0).

   🔑 TEK YIĞIN: her yerde  font-family: var(--sona-yazi)  yazılır; sayfa ya da
      bileşen için ayrı sınıf/koşul YOKTUR (dil koşulu TEK yerde, §2b'de, ve
      yalnız yığının İÇERİĞİNİ belirler). Dört aile vardır:
        "Sona Sans"       → Latin · Türkçe · Kiril · Yunan  (+ Arapça, dosyası gelince)
        "Sona Sans Menu"  → yalnız dil menüsündeki Latin dışı kelimeler (中文 · हिन्दी)
        "Sona Sans SC"    → Han          (zh)
        "Sona Sans DV"    → Devanagari   (hi)
        "Sona Sans AR"    → Arapça       (ar, RTL)
      Tarayıcı karakterin betiğine göre doğru aileyi kendi seçer.

   🐛 2026-08-02 — LATİN OLMAYAN BETİK NEDEN AYRI AİLE OLMAK ZORUNDA.
      Önce SC'yi `unicode-range` ile "Sona Sans" İÇİNE koymuştum; canlıda
      ölçtüm, ÇALIŞMADI. Sebep: varsayılan Latin yüzünün unicode-range'i YOK,
      yani bütün kod noktalarını sahipleniyor. Tarayıcı Han karakteri için onu
      indiriyor, glif bulamıyor ve AYNI AİLEDEKİ bir sonraki @font-face'e
      DEĞİL, doğrudan yığındaki bir sonraki AİLEYE (system-ui) düşüyor.
      Çözüm: her betiğe kendi aile adı + yığına ekle.
      Devanagari aynı kurala göre "Sona Sans DV" olarak eklendi (2026-08-02).
      ✅ 2026-08-03: Arapça da aynı kurala çekildi → "Sona Sans AR" (iki statik
      yüz) + yığında yalnız `lang="ar"`. Aileler artık: Latin "Sona Sans" ·
      Han "Sona Sans SC" · Devanagari "Sona Sans DV" · Arapça "Sona Sans AR". */

/* ---------- 1. Yazı tipi dosyaları ---------- */
/* Latin + Türkçe + Kiril + Yunan  (varsayılan) */
@font-face{
  font-family:"Sona Sans"; font-style:normal; font-weight:100 700; font-display:swap;
  src:url("/fonts/IBMPlexSans-var.woff2") format("woff2-variations");
}
/* Arapça (ar) — IBM Plex Sans Arabic, npm `@ibm/plex-sans-arabic` 1.1.0.
   🐛 2026-08-03 — BURASI ÜÇ KUSURU BİRDEN TAŞIYORDU, üçü de düzeltildi:
     ① Dosya `IBMPlexSansArabic-var.woff2` diye yazılıydı, O DOSYA HİÇ YOKTU
        (Çince ve Devanagari ile aynı kusur; rota kapalı olduğu için görülmemişti).
     ② Variable sürüm zaten yayınlanmamış → iki statik yüz, Devanagari ile aynı
        ağırlık eşlemesi: 100-500 → Regular · 501-700 → SemiBold.
     ③ 🔴 AYRI AİLE ADI: `unicode-range` ile "Sona Sans" İÇİNE konmuştu; bu yapı
        Han'da canlıda ölçüldü ve ÇALIŞMIYOR (gerekçe dosya başlığında). Arapça
        artık kendi ailesinde: "Sona Sans AR", ve yığına YALNIZ `lang="ar"`da girer.
   Şekillendirme (bitişik yazı, init/medi/fina) tarayıcının kendi işidir; yüz
   GSUB/GPOS tablolarını taşıdığı için ek bir katman gerekmez. */
@font-face{
  font-family:"Sona Sans AR"; font-style:normal; font-weight:100 500; font-display:swap;
  src:url("/fonts/IBMPlexSansArabic-Regular.woff2") format("woff2");
  unicode-range:U+0600-06FF,U+0750-077F,U+0870-088E,U+08A0-08FF,U+FB50-FDFF,U+FE70-FEFF,U+200F,U+061C;
}
@font-face{
  font-family:"Sona Sans AR"; font-style:normal; font-weight:501 700; font-display:swap;
  src:url("/fonts/IBMPlexSansArabic-SemiBold.woff2") format("woff2");
  unicode-range:U+0600-06FF,U+0750-077F,U+0870-088E,U+08A0-08FF,U+FB50-FDFF,U+FE70-FEFF,U+200F,U+061C;
}
/* Devanagari (hi) — IBM Plex Sans Devanagari, npm `@ibm/plex-sans-devanagari` 1.1.0.
   🐛 2026-08-02: burada `IBMPlexSansDevanagari-var.woff2` yazıyordu, O DOSYA YOKTU
   (Çince ile aynı kusur). Rota kapalı olduğu için kimse görmemişti.

   🔴 AYRI AİLE ADI — Çince'de kanıtlanan tuzağın aynısı (bkz. dosya başlığı):
   `unicode-range` ile "Sona Sans" içine koymak ÇALIŞMAZ. Varsayılan Latin yüzü
   bütün kod noktalarını sahiplenir, glif bulamayınca aynı ailedeki bir sonraki
   yüze DEĞİL doğrudan sistem fontuna düşer.

   🔴 VARIABLE YOK, iki statik yüz — Plex Devanagari'nin de variable sürümü
   yayınlanmadı. Ağırlık eşlemesi Çince ile aynı: 100-500 → Regular ·
   501-700 → SemiBold.

   🔴 SUBSET YOK, tam yüzler. Çince'de subset şarttı (yüz başına 3,64 MB);
   Devanagari yüz başına ~100 KB, ikisi 206 KB. Subset'in getireceği kazanç
   küçük, bedeli ise "yeni karakter sessizce düşer" riski ve bir bekçi betiği.
   Bu yüzden Hintçe'de `npm run cjk` benzeri bir denetim GEREKMEZ. */
@font-face{
  font-family:"Sona Sans DV"; font-style:normal; font-weight:100 500; font-display:swap;
  src:url("/fonts/IBMPlexSansDevanagari-Regular.woff2") format("woff2");
  unicode-range:U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+A830-A839,U+A8E0-A8FF;
}
@font-face{
  font-family:"Sona Sans DV"; font-style:normal; font-weight:501 700; font-display:swap;
  src:url("/fonts/IBMPlexSansDevanagari-SemiBold.woff2") format("woff2");
  unicode-range:U+0900-097F,U+1CD0-1CF9,U+200C-200D,U+A830-A839,U+A8E0-A8FF;
}
/* Basitleştirilmiş Çince (zh) — IBM Plex Sans SC, npm `@ibm/plex-sans-sc` 1.1.0.
   🐛 2026-08-02: burada `IBMPlexSansSC-var.woff2` yazıyordu ve O DOSYA HİÇ YOKTU.
   Çince sayfalar canlıda 404 alıp işletim sistemi fontuna düşüyordu (Mac'te
   PingFang, Windows'ta YaHei) — yani ziyaretçiye göre başka yüz. GM kararı bana
   bıraktı (2026-08-02), IBM Plex Sans SC seçildi: Sona Sans zaten IBM Plex, Han
   yüzü aynı aileden gelince sayfa ile görselci karesi tek tipografide kalıyor.

   🔴 VARIABLE DEĞİL, İKİ STATİK YÜZ. Plex SC'nin variable sürümü YAYINLANMADI;
   yalnız statik ağırlıklar var. Bu yüzden aile aralık aralık bölündü.
   Ağırlık eşlemesi: 100-500 → Regular · 501-700 → SemiBold. Han ağırlık
   merdiveni Latin'den kabadır; dört yüz göndermek sayfayı ikiye katlar,
   karşılığı gözle seçilmez. Canlı ana sayfada ölçülen kullanım:
   400 (70 öğe) · 500 (25) · 600 (17) · 700 (6).

   🔴 SUBSET — SİTENİN KENDİ KARAKTERLERİ. Tam yüz ağırlık başına 3,64 MB;
   IBM'in hazır split parçalarıyla bile ağırlık başına ~1 MB inerdi (1119
   karakterimiz 216 parçanın 28'ine dağılıyor). Sayfa bugün 784 KB — kabul
   edilemezdi. `scripts/cjk-font-uret.mjs` yüzü yalnız `content/zh/`
   içinde geçen karakterlere indiriyor: 189 KB + 195 KB.
   ⚠️ Subset olduğu için Çince metne YENİ bir karakter girerse o karakter bu
   dosyalarda YOKTUR ve sessizce sistem fontuna düşer. `npm run cjk` bunu
   derleme öncesi yakalar; Çince metni değiştirdiyseniz fontu yeniden üretin. */
@font-face{
  font-family:"Sona Sans SC"; font-style:normal; font-weight:100 500; font-display:swap;
  src:url("/fonts/IBMPlexSansSC-Regular-subset.woff2") format("woff2");
  unicode-range:U+2E80-2EFF,U+3000-303F,U+3400-4DBF,U+4E00-9FFF,U+F900-FAFF,U+FF00-FFEF;
}
@font-face{
  font-family:"Sona Sans SC"; font-style:normal; font-weight:501 700; font-display:swap;
  src:url("/fonts/IBMPlexSansSC-SemiBold-subset.woff2") format("woff2");
  unicode-range:U+2E80-2EFF,U+3000-303F,U+3400-4DBF,U+4E00-9FFF,U+F900-FAFF,U+FF00-FFEF;
}
/* Dil menüsü — HER SAYFADA görünen bir avuç Latin dışı harf.
   🐛 2026-08-02 — 290 KB'LIK SESSİZ VERGİ. Dil seçici her sayfada dilleri
   KENDİ yazılarıyla listeler: "中文", "हिन्दी". Bu iki kelime yüzünden İngilizce
   ana sayfa da SC subset'ini (189 KB) ve Devanagari Regular'ı (101 KB)
   indiriyordu — sekiz harf için 290 KB, dokuz dilin her sayfasında.
   Canlıda ölçüldü: `/` sayfası 364 KB font çekiyordu, 290 KB'ı bu.
   Kusur bana ait: SC Çince turunda, DV bugün eklendi; ikisi de yığına
   girince menü kelimeleri onları çağırır oldu.

   Çözüm: yalnız menü kelimelerini taşıyan minik yüzler (1,5 KB + 3,7 KB).
   `unicode-range` tam olarak o harflerin kod noktalarıdır — bir harf fazlası
   değil. Tam yüzlerin yığına yalnız kendi dilinde girmesi ise §2b'de; ikisi
   birlikte şunu verir:
     · Latin sayfa   → yalnız menü yüzleri; SC ve DV yığında YOK, inmez
     · Çince sayfa   → menü yüzü 中文'i verir, gövdedeki öbür Han harfleri
                       aralık dışında kaldığı için "Sona Sans SC"e düşer
     · Hintçe sayfa  → aynısı Devanagari için

   ⚠️ MENÜ ADI DEĞİŞİRSE BU YÜZLER DE YENİLENMELİ. `diller.ts` içindeki `ad`
   alanı ("中文" / "हिन्दी") değişirse yeni harf bu dosyalarda YOKTUR ve
   `unicode-range` de onu kapsamaz → harf tam yüzden gelir (bozulmaz, yalnız
   o sayfa yine 290 KB çeker). Üretim komutu dosyanın sonundaki nottadır.

   ⚠️ Rusça "Русский" için ayrı yüz YOK: Kiril yüzü 29 KB ve zaten "Sona Sans"
   ailesinin bir parçası. Arapça açılınca "العربية" için bu listeye üçüncü bir
   menü yüzü girecek. */
@font-face{
  font-family:"Sona Sans Menu"; font-style:normal; font-weight:100 700; font-display:swap;
  src:url("/fonts/IBMPlexSansSC-menu.woff2") format("woff2");
  unicode-range:U+4E2D,U+6587;                        /* 中 文 */
}
@font-face{
  font-family:"Sona Sans Menu"; font-style:normal; font-weight:100 700; font-display:swap;
  src:url("/fonts/IBMPlexSansDevanagari-menu.woff2") format("woff2");
  unicode-range:U+0939,U+093F,U+0928,U+094D,U+0926,U+0940;   /* ह ि न ् द ी */
}
/* Arapça menü sözcüğü "العربية" — 7 harf, 3,9 KB (tam yüz 70 KB).
   Şekil formları için `--layout-features='*'` ile altküme alındı; harfler
   bitişik yazılmazsa kelime okunmaz. */
@font-face{
  font-family:"Sona Sans Menu"; font-style:normal; font-weight:100 700; font-display:swap;
  src:url("/fonts/IBMPlexSansArabic-menu.woff2") format("woff2");
  unicode-range:U+0627,U+0644,U+0639,U+0631,U+0628,U+064A,U+0629;   /* ا ل ع ر ب ي ة */
}
/* Rusça menü sözcüğü "Русский" — 6 ayrı harf, 4 KB (tam yüz 28 KB).
   🔴 2026-08-31 · SON EKLENEN VE EN PAHALISI. Yukarıdaki not yıllarca
   *"Rusça için ayrı yüz YOK: Kiril yüzü zaten Sona Sans ailesinin parçası"*
   diyordu — bu, tam Kiril yüzünün HER SAYFADA, HER DİLDE indiği anlamına
   geliyordu. PageSpeed mobilde yakalandı: LCP 4,2 sn, sayfanın 83 KB fontunun
   28 KB'ı tek kelime içindi. Tam yüz artık "Sona Sans CY" ailesinde
   (`fonts-ek.css`) ve yalnız `html[lang="ru"]` yığınına giriyor. */
@font-face{
  font-family:"Sona Sans Menu"; font-style:normal; font-weight:100 700; font-display:swap;
  src:url("/fonts/IBMPlexSansCyrillic-menu.woff2") format("woff2");
  unicode-range:U+0420,U+0443,U+0441,U+043A,U+0438,U+0439;   /* Р у с к и й */
}
/* Teknik / kod / seri no */
/* 🐛 2026-08-03 — ÖLÜ BİLDİRİM KALDIRILDI (dördüncü vaka, `npm run font` yakaladı).
   Burada `IBMPlexMono-var.woff2` bildiriliyordu ama o dosya HİÇ YOKTU; bildirim
   kimlik token dosyasından (12 Kurumsal Kimlik) miras kalmıştı ve dosya bize hiç
   gelmedi. Çalışan iki statik yüz `fonts-ek.css` içinde (Regular 400 · SemiBold 600),
   bu yüzden gözle bir kusur görünmüyordu: tarayıcı 404 alıp aynı ailedeki statik
   yüze düşüyordu. Bedeli boşa giden bir istek + ilk boyamada kısa bir geri düşme.
   ⚠️ Kimlik dosyasının kendisinde de aynı satır duruyor (`3_Tipografi/`, satır 36)
   → DUZELTMELER'e 12 Kurumsal Kimlik maddesi açıldı. */

:root{
  /* ---------- 2. Aile ---------- */
  /* 🔴 VARSAYILAN YIĞINDA TAM BETİK YÜZLERİ YOKTUR — yalnız Latin + menü.
     Han ve Devanagari yüzleri aşağıda, YALNIZ kendi dillerinde yığına girer. */
  --sona-yazi: "Sona Sans", "Sona Sans Menu", system-ui, -apple-system, "Segoe UI", sans-serif;
  --sona-yazi-mono: "Sona Mono", ui-monospace, "SF Mono", Menlo, monospace;
}

/* ---------- 2b. Betik yüzü YALNIZ kendi dilinde yığına girer ----------
   🐛 2026-08-02 — SIRAYA GÜVENMEK YETMEDİ, ÖLÇTÜM. Menü yüzlerini tam
   yüzlerden önce koymak KÂĞITTA doğru: tarayıcı aileleri sırayla dener,
   "Sona Sans Menu" 中 harfini verir, "Sona Sans SC"ye hiç sıra gelmez.
   Canlıda ölçtüm, ÖYLE OLMADI: İngilizce sayfa menü yüzlerini de indirdi,
   TAM yüzleri de. Zaman damgaları sebebi gösteriyor — tam yüzler 216. ms'de,
   menü yüzleri 225. ms'de başlıyor; yani tarayıcı `font-family` sırasına göre
   değil, CSS'teki bildirim sırasına göre aday yüzleri PEŞİNEN indiriyor.
   Varsayılan Latin yüzünün `unicode-range`i olmadığı için hangi harfi
   taşıdığı ancak indirildikten sonra bilinebiliyor; tarayıcı beklemek yerine
   aralığı uyan bütün adayları başlatıyor.

   Bu yüzden sıraya güvenmek bırakıldı: tam yüz, dili o dil olmayan sayfada
   YIĞINDA HİÇ YOK. İstenmeyen indirme mümkün değil — sezgiye değil, yığının
   içeriğine bağlı. Bileşenler yine yalnız `var(--sona-yazi)` yazar; koşul tek
   yerde, burada.

   `html[lang=…]` seçicisi `:root`tan daha belirgindir (0,1,1 > 0,1,0), sıralama
   önemli değil. Çince etiketi `zh-Hans` olduğu için `^=` ile eşleşir. */
html[lang^="zh"]{
  --sona-yazi: "Sona Sans", "Sona Sans Menu", "Sona Sans SC", system-ui, -apple-system, "Segoe UI", sans-serif;
}
html[lang="hi"]{
  --sona-yazi: "Sona Sans", "Sona Sans Menu", "Sona Sans DV", system-ui, -apple-system, "Segoe UI", sans-serif;
}
html[lang="ar"]{
  --sona-yazi: "Sona Sans", "Sona Sans Menu", "Sona Sans AR", system-ui, -apple-system, "Segoe UI", sans-serif;
}
/* 🔴 2026-08-31 eklendi. Kiril bu listeye en son katıldı çünkü tam yüzü baştan
   "Sona Sans" ailesinin içindeydi — yani kuralın istisnasıydı ve bu yüzden her
   dilde iniyordu. Artık diğer üç betikle aynı disiplinde. */
html[lang="ru"]{
  --sona-yazi: "Sona Sans", "Sona Sans Menu", "Sona Sans CY", system-ui, -apple-system, "Segoe UI", sans-serif;
}

:root{

  /* ---------- 3. Ağırlıklar (Plex değişken ekseni 100–700) ---------- */
  --sona-w-normal: 400;
  --sona-w-orta: 500;      /* etiket, tablo başlığı */
  --sona-w-yari-kalin: 600;/* başlıklar — VARSAYILAN başlık ağırlığı */
  --sona-w-kalin: 700;     /* vurgu; 800/900 YOK, aile 700'de biter */

  /* ---------- 4. Ölçek (taban 16px) ---------- */
  /* jeton         boyut            satır-yük.  izleme */
  --sona-display:  clamp(2.5rem, 1.6rem + 3.6vw, 3.75rem); /* 40 → 60 */
  --sona-h1:       clamp(2rem, 1.4rem + 2.4vw, 2.75rem);   /* 32 → 44 */
  --sona-h2:       clamp(1.6rem, 1.2rem + 1.5vw, 2.125rem);/* 26 → 34 */
  --sona-h3:       1.625rem;   /* 26 */
  --sona-h4:       1.25rem;    /* 20 */
  --sona-govde-bs: 1.125rem;   /* 18 — giriş paragrafı */
  --sona-govde:    1rem;       /* 16 — TABAN */
  --sona-govde-kk: 0.875rem;   /* 14 */
  --sona-etiket:   0.8125rem;  /* 13 */
  --sona-mikro:    0.75rem;    /* 12 — en küçük; altına inilmez */

  --sona-lh-siki:  1.05;  --sona-lh-baslik: 1.18;
  --sona-lh-orta:  1.35;  --sona-lh-govde:  1.6;

  --sona-iz-display: -0.025em; --sona-iz-baslik: -0.015em;
  --sona-iz-govde:    0;       --sona-iz-etiket:  0.01em;
}

/* ---------- 5. Betiğe göre satır yüksekliği düzeltmesi ----------
   Arapça ve Devanagari, Latin ile aynı satır yüksekliğinde SIKIŞIR
   (Arapça'da alt uzantılar, Devanagari'de üst çizgi + işaretler taşar).
   CJK ise daha ferah satır ister. Bu düzeltme opsiyonel değil, okunabilirlik şartıdır. */
:lang(ar){ line-height:calc(var(--sona-lh-govde) + 0.18); }
:lang(hi){ line-height:calc(var(--sona-lh-govde) + 0.22); }
:lang(zh){ line-height:calc(var(--sona-lh-govde) + 0.10); letter-spacing:0.01em; }
[dir="rtl"]{ text-align:start; }

/* ---------- 6. Hazır sınıflar ---------- */
.sona-display{font:var(--sona-w-yari-kalin) var(--sona-display)/var(--sona-lh-siki) var(--sona-yazi);letter-spacing:var(--sona-iz-display)}
.sona-h1{font:var(--sona-w-yari-kalin) var(--sona-h1)/var(--sona-lh-baslik) var(--sona-yazi);letter-spacing:var(--sona-iz-baslik)}
.sona-h2{font:var(--sona-w-yari-kalin) var(--sona-h2)/var(--sona-lh-baslik) var(--sona-yazi);letter-spacing:var(--sona-iz-baslik)}
.sona-h3{font:var(--sona-w-yari-kalin) var(--sona-h3)/var(--sona-lh-orta) var(--sona-yazi)}
.sona-h4{font:var(--sona-w-yari-kalin) var(--sona-h4)/var(--sona-lh-orta) var(--sona-yazi)}
.sona-govde-bs{font:var(--sona-w-normal) var(--sona-govde-bs)/var(--sona-lh-govde) var(--sona-yazi)}
.sona-govde{font:var(--sona-w-normal) var(--sona-govde)/var(--sona-lh-govde) var(--sona-yazi)}
.sona-govde-kk{font:var(--sona-w-normal) var(--sona-govde-kk)/var(--sona-lh-govde) var(--sona-yazi)}
.sona-etiket{font:var(--sona-w-orta) var(--sona-etiket)/var(--sona-lh-orta) var(--sona-yazi);letter-spacing:var(--sona-iz-etiket)}
.sona-mikro{font:var(--sona-w-normal) var(--sona-mikro)/var(--sona-lh-orta) var(--sona-yazi);letter-spacing:var(--sona-iz-etiket)}
.sona-mono{font-family:var(--sona-yazi-mono);font-variant-numeric:tabular-nums}

/* ---------- Not: dil menüsü yüzleri nasıl üretildi ----------
   Kaynak, sitenin kendi dosyalarıdır (npm paketleri kurulu olmasa da çalışır).
   fonttools + brotli:  python3 -m venv venv && ./venv/bin/pip install fonttools brotli

     printf '中文'   > /tmp/menu-zh.txt
     printf 'हिन्दी' > /tmp/menu-hi.txt

     ./venv/bin/pyftsubset public/fonts/IBMPlexSansSC-Regular-subset.woff2 \
       --text-file=/tmp/menu-zh.txt --flavor=woff2 --layout-features='*' \
       --output-file=public/fonts/IBMPlexSansSC-menu.woff2

     ./venv/bin/pyftsubset public/fonts/IBMPlexSansDevanagari-Regular.woff2 \
       --text-file=/tmp/menu-hi.txt --flavor=woff2 --layout-features='*' \
       --output-file=public/fonts/IBMPlexSansDevanagari-menu.woff2

   `--layout-features='*'` ŞART: "हिन्दी" न् + द birleşik biçimini OpenType
   kuralıyla kurar; kural atılırsa kelime yanlış dizilir. Üretimden sonra
   menüyü GÖZLE kontrol edin — dosya boyutu doğru olması glifin doğru
   çizildiğini göstermez (Çince turunda bu ders bir kez alındı). */
