/* ============================================================================
   Alexandria: Tema Sistemi
   ----------------------------------------------------------------------------
   İKİ KATMANLI TOKEN YAPISI:
     Katman 1 (ham palet)   : tema bağımsız renk kütüphanesi (--c-*)
     Katman 2 (anlamsal rol): bileşenlerin kullandığı roller (--bg, --surface…)
   Bileşenler YALNIZCA Katman 2'yi (ve geçiş dönemi takma adlarını) kullanır.
   Tema değiştirmek = Katman 2'nin farklı ham renklere bağlanması.

   AYDINLIK TEMA ("Mürekkep"): Aşama 3'te OKLCH ile türetildi, kontrastı
   ölçüldü. Değerler elle seçilmedi; /tmp betikleriyle üretildi:
     · nötr eksen  hue 262, algısal açıklık adımlarıyla
     · aksan       hue burulması +18° (sRGB'de mavinin teal'e kaymasını önler)
     · ders paleti koyu paletin hue sırası korunur, L-0.03 / C×1.25
   Hedefler: gövde metni 7:1, ikincil metin ve durum renkleri 4.5:1,
   form kontrol sınırı 3:1 (WCAG 1.4.11).
   ========================================================================== */

/* ---------------------------------------------------------------- Katman 1 */
:root{
  /* nötr eksen (koyu → açık) */
  --c-ink-900:#0B1120;   /* en koyu zemin */
  --c-ink-800:#151F33;   /* yüzey */
  --c-ink-700:#1D2A44;   /* yükseltilmiş yüzey */
  --c-ink-600:#22314F;   /* vurgu yüzeyi (tur balonu vb.) */
  --c-ink-500:#2B3A57;   /* kenarlık */
  --c-ink-400:#1a2540;   /* ince ayraç */
  --c-slate-300:#8B9BB8; /* ikincil metin */
  --c-slate-100:#E8EDF7; /* birincil metin */
  --c-white:#FFFFFF;

  /* BEYAZ PANEL ÜSTÜNDEKİ DERS HÜCRESİ ("kâğıt" tokenları)
     Bu üçlü iki ayrı yerde kullanılıyor ve tam olarak aynı problemi çözüyor:
     aydınlık temanın hücreleri (beyaz panel üstünde) ve YAZDIRMA (beyaz kâğıt
     üstünde). Kâğıt da bir beyaz paneldir.
     Taban katmanında duruyorlar çünkü `static/print.css` aydınlık tema
     bloğunun içine bakamaz; oradan `var(--c-paper-*)` diye çağırıyor. İkinci
     bir kopya yazılsaydı bir gün ayrışırdı ve kâğıt sessizce ölçülmemiş bir
     palete geçerdi. Değerlerin nasıl üretildiği aydınlık tema bloğunda yazılı
     (260806-11: altın açı + OKLCH, `araclar/palet_uret.py`). */
  --c-paper-palette:#E3CD40,#B4CFE1,#EA999E,#55CD80,#B0A2FF,#F19B2A,#7DC0C7,#CDA3BB,#D2EC7B,#CAE0FF,#FEB39F,#AEE9D5,#C59FE0,#F7DFA6,#6BD7FF,#C3AAB0,#C1DDBA,#B6BDE2,#EB9C65,#B3D1CF,#D3B3CF,#CFCD6B,#81BFF4,#DBB8B6,#6DDDA6,#B5AAD1,#E7AC52,#53D2EA;
  --c-paper-ink:#162137;
  --c-paper-ink-2:rgba(20,30,49,.75);

  /* marka ve durum renkleri */
  --c-blue-400:#4CC3FF;
  --c-blue-950:#082F49;  /* aksan üstü metin (koyu) */
  --c-green-400:#3EE08A;
  --c-green-950:#052E16;
  --c-orange-400:#FFA14E;
  --c-red-400:#FF6B6B;
  --c-purple-400:#C08BFF;

  --c-lesson-ink:#1e293b;  /* canlı bant dolgusu üstündeki metin */
}

/* ------------------------------------------------- Katman 2: KOYU (varsayılan) */
:root{
  color-scheme: dark;

  /* zeminler ve yüzeyler */
  --bg:              var(--c-ink-900);
  --surface:         var(--c-ink-800);
  --surface-2:       var(--c-ink-700);
  --surface-3:       var(--c-ink-600);
  --border:          var(--c-ink-500);
  --border-soft:     var(--c-ink-400);

  /* metin */
  --text:            var(--c-slate-100);
  --text-muted:      var(--c-slate-300);

  /* etkileşim */
  --accent:          var(--c-blue-400);
  --accent-contrast: var(--c-blue-950);   /* aksan zemini üstündeki metin */

  /* durum */
  --ok:              var(--c-green-400);
  --ok-contrast:     var(--c-green-950);
  --warn:            var(--c-orange-400);
  --err:             var(--c-red-400);
  --info:            var(--c-purple-400);

  /* ÜRÜN DİLİ, üç bant (anlam her temada korunur) */
  --band-red:        var(--c-red-400);     /* kesin yasak */
  --band-orange:     var(--c-orange-400);  /* imkân varsa */
  --band-green:      var(--c-green-400);   /* keyfi istek */

  /* perde, gölge, ders paleti */
  --overlay:         rgba(3, 7, 16, .82);
  --overlay-soft:    rgba(0, 0, 0, .45);
  --shadow-1:        0 8px 24px rgba(0, 0, 0, .35);
  --shadow-2:        0 18px 60px rgba(0, 0, 0, .55);
  /* KART ÜST KENARI. Koyu temada yüzey (#151F33) ile zemin (#0B1120)
     arasındaki fark 1,14:1, kenarlık/yüzey farkı 1,45:1: kartın nerede
     başladığı ancak dikkatle bakınca seçiliyordu. Çare kenarlığı topluca
     parlatmak DEĞİL (o token 40'tan fazla yüzeyde geçiyor, form denetimi
     sınırından ayraca kadar), kartın üst kenarına ışık düşürmek: fiziksel
     kabartma sezgisi yönü de anlatır, alt kenar zaten gölgeyle ayrılır.
     Aydınlıkta yüzey beyaz, ışıklı kenar orada anlamsız: değer yüzeyle
     aynı olduğu için kural kendiliğinden etkisiz kalır. */
  --panel-edge:      #3B4E75;

  /* İKİ AYRI MÜREKKEP ROLÜ (A3, 260806-5 §3).
     6 Ağustos 2026'ya kadar tek token vardı: `--lesson-ink`. Ders hücresinin
     zemini de (pastel), trafik bandı dolgularının zemini de (yeşil/turuncu/
     kırmızı) AÇIK olduğu için ikisi aynı koyu mürekkebi paylaşabiliyordu.
     Işık adası kapatılınca hücre zemini koyulaştı, bant dolguları ise iki
     temada da aynı canlı tonda kalmak zorunda (ürün dili) -- rol ikiye
     ayrıldı:

       --fill-ink   CANLI DOLGU üstündeki metin. İki temada da KOYU.
                    Tüketicileri: .pbtn, .tchip.on, .zrz, .bn-chip,
                    .impact .bnd ve td.unav deseni.
       --cell-ink   DERS HÜCRESİ üstündeki metin. Temayla birlikte döner:
                    koyuda açık, aydınlıkta koyu.

     Ayrımın kaybolmadığını ölçen test: test_contrast.py içinde
     test_trafik_glifi_okunur. `--fill-ink` koyu temada açık renge
     çevrilirse 6 satır 8,52:1'den 1,46:1'e düşüp kırmızı olur (ölçüldü).

     `--lesson-ink` geçiş adı olarak duruyor: index.html, goruntule.css ve
     12/18 numaralı betikler onu adıyla yazıyor. Dosyanın sonundaki
     "DERS HÜCRESİNİN MÜREKKEBİ" bloğu, hücre yüzeylerinde bu adı
     `--cell-ink`e yeniden bağlıyor.

     Hücre mürekkebi gövde metni (--c-slate-100) DEĞİL saf beyaz: aradaki
     fark 0,84 ile 1,00 parlaklık, yani paletin en açık rengi için 4,5:1
     sınırında 5 L* birim daha yer demek. O 5 birim doğrudan ayırt
     edilebilirlik bütçesine gidiyor, hücrede başka yere harcanacak yeri
     yok. */
  --fill-ink:        var(--c-lesson-ink);
  --lesson-ink:      var(--fill-ink);
  --cell-ink:        var(--c-paper-ink);

  /* --- ton/kontrast yardımcıları (Aşama 2: sabit renklerin karşılıkları) --- */
  --accent-ink:      #082F49;   /* aksan zemini üstünde metin (uygulama) */
  --accent-ink-2:    #06283F;   /* aynı rol, giriş/tanıtım/sihirbaz sayfaları */
  --accent-tint:     #16283F;   /* seçili çip/aktif kutu zemini */
  --accent-border:   #245A6E;
  --ok-ink:          #052E16;   /* yeşil zemin üstünde metin */
  --ok-border:       #245A41;
  --warn-border:     #5A4424;
  --err-border:      #4A2530;
  --info-ink:        #2E1065;   /* mor zemin üstünde metin */
  --pure:            #FFFFFF;   /* saf beyaz vurgu (fark çerçevesi, buton metni) */

  /* liste/alt yüzeyler */
  --surface-list:    #16213A;   /* öğretmen listesi */
  --surface-row:     #26334A;   /* satır ayracı */
  --surface-deep:    #0F172A;   /* boyama ızgarası metni/zemini */
  --divider-soft:    #16223C;   /* tanıtım sayfası ayracı */
  --bg-deep:         #0A0F1D;   /* tanıtım sayfası alt zemin */
  --toggle-knob:     #94A3B8;   /* anahtar topuzu */

  /* rozet/etiket zeminleri */
  --badge-hard:      #7F1D1D;
  --badge-iter:      #1E40AF;
  --badge-tor:       #7C2D12;
  --badge-adv:       #0E7490;
  --badge-pref:      #7C3AED;

  /* çizgili desenler (kapalı/yasak hücreler) */
  --stripe-a:        #7F1D1D;
  --stripe-b:        #1E293B;
  --stripe-c:        #B91C1C;
  --stripe-d:        #450A0A;

  /* saydam tonlar (zemin üstü vurgu) */
  --tint-accent-06:  rgba(76,195,255,.06);
  --tint-accent-07:  rgba(76,195,255,.07);
  --tint-accent-08:  rgba(76,195,255,.08);
  --tint-accent-09:  rgba(76,195,255,.09);
  --tint-accent-22:  rgba(76,195,255,.22);
  --tint-accent-28:  rgba(76,195,255,.28);
  --tint-accent-35:  rgba(76,195,255,.35);
  --tint-ok-06:      rgba(62,224,138,.06);
  --tint-ok-12:      rgba(62,224,138,.12);
  --tint-ok-14:      rgba(62,224,138,.14);
  --tint-ok-15:      rgba(62,224,138,.15);
  --tint-ok-18:      rgba(62,224,138,.18);
  --tint-ok-30:      rgba(62,224,138,.3);
  --tint-warn-12:    rgba(255,161,78,.12);
  --tint-warn-20:    rgba(255,161,78,.2);
  --tint-err-10:     rgba(248,113,113,.1);
  --tint-err-12:     rgba(255,107,107,.12);
  --tint-err-18:     rgba(255,107,107,.18);
  --tint-err-20:     rgba(255,107,107,.2);
  --tint-err-45:     rgba(255,107,107,.45);
  --tint-info-10:    rgba(192,132,252,.1);
  --tint-surface-35: rgba(21,31,51,.35);
  --tint-surface-50: rgba(21,31,51,.5);

  /* perdeler ve gölge tonları */
  --scrim-header:    rgba(11,17,32,.85);
  --scrim-bar:       rgba(11,17,32,.95);
  --scrim-modal:     rgba(3,7,16,.7);
  --shadow-a:        rgba(0,0,0,.45);
  --shadow-b:        rgba(0,0,0,.5);
  --shadow-c:        rgba(0,0,0,.55);
  --shadow-d:        rgba(0,0,0,.6);
  --shadow-e:        rgba(0,0,0,.65);

  /* PDF önizleme çerçevesi (tarayıcı görüntüleyici zemini) */
  --pdf-backdrop:    #525659;

  /* DERS PALETİ: JS bunu okur (01-core.js, goruntule.js).

     ELLE YAZILMADI, ÜRETİLDİ. 260806-11, 7 Ağustos 2026:

         python araclar/palet_uret.py uret --n 28 --garanti 20

     Betik sabit tohumlu (TOHUM 5), yani aynı komut aynı listeyi veriyor. Bir
     rengi elle oynatan `test_palet_hue_altin_aciya_oturuyor` ile kırmızı
     görür; doğru tepki hex'i düzeltmek değil komutu yeniden koşturmaktır.

     ÜRETEÇ
       h(i) = (h0 + i x 137.50776405) mod 360      SABİT, aranmaz
       C(i) = min(rho(i) x kroma_tavani(L, h), TAVAN)
       L(i), rho(i) = build-time max-min aramasının çıktısı

     Bu temanın parametreleri: h0 275 derece, L bandı 0.28-0.45 (OKLab),
     kroma tavanı 0.185, kroma tabanı 0.03. Üreteç ürün kapılarından biraz
     İÇERİDE arıyor (bkz. betikteki KISIT_PAYI / ADA_TABAN_URETEC notu):
     max-min araması yoksa paleti her duvara yaslıyor ve bir sonraki
     basamaklık değişiklik testi kırmızıya çeviriyor.

     NEDEN ALTIN AÇI. Sonsuz dizinin her ön eki iyi dağılmıştır (filotaksi bu
     yüzden çalışır): 28'lik liste ilk 20 rengi bit-bit değiştirmiyor, yani
     "20 dersi ayırıyoruz" garantisi liste uzarken ayakta kalıyor. Ölçüldü:
     ilk20(liste 20) = ilk20(liste 28) = ilk20(liste 32).

     NEDEN 14 DEĞİL 28. `color(s) = RENKLER[yuva(s) % RENKLER.length]`
     olduğu için 14 renkte 28 dersli bir İmam Hatip Lisesinde iki ders birebir
     aynı hex'i alıyordu. Şimdi almıyor; ayrımı sol kenar şeridine
     yaslamak zorunda kalmıyoruz. Şerit YİNE DE DURUYOR, sebebi aşağıda.

     L BANDINI ŞARTNAME DEĞİL ÖLÇÜM SEÇTİ. İstenen bantların TAVANI (hiçbir
     paletin geçemeyeceği sınır) N=20'de açık 0.90-0.95 için 2.71, koyu
     0.12-0.18 için 1.40 çıktı; ürün o gün 8.40/8.53'teydi. Koyu 0.12-0.18'in
     iki ek kusuru daha var: hücre boş hücreden KOYU olur (bugünkü kutupluluk
     tersine döner) ve sayfa zemini tam o bandın üst ucunda oturuyor. Bandın
     sınırını WCAG değil "ada bandı" çiziyor (bkz. test_isik_adasi_kapali):
     ada + hiyerarşi birlikte koyuda İKİ AYRIK aralık bırakıyor, üstteki
     alındı.

     KROMA TAVANI. Kısıt DEĞİL, ürün kararı; bugünkü paletin en yüksek
     kromasıyla eşleşiyor. Onsuz arama elektrik mavisi ve neon sarı üretiyor:
     ızgaranın geri kalanı sakin, o iki hücre bağırıyor.

     KROMA TABANI 0.03. Taban yokken arama dört rengi neredeyse griye
     indiriyordu. Bedeli 0.57 ΔE, karşılığında her hücre renk olarak okunuyor.

     ÖLÇÜLEN (araç, üç görüş kipi):
       ilk 20 renk : normal 6.63 · protan 5.82 · deutan 5.90
       tam 28 renk : normal 4.17 · protan 3.65 · deutan 3.44
     Eşikler `tests/test_palet_mesafesi.py` içinde iki kademe: garanti 5.0,
     tam liste 3.0. Sayı 8.0'dan indi çünkü PROBLEM değişti, palet kötüleşmedi;
     gerekçenin tamamı ve tavan tablosu o dosyadaki eşik notunda.

     ŞERİT NEDEN DURUYOR. 260806-11 §8 onu sökmeyi öneriyordu, gerekçesi
     "palet 28'e çıkınca renk tek başına yeter" idi. Ölçüldü, TUTMADI:
       · dikromat: 28 renk 14'ten SIKIŞIK bir uzay. En yakın çift deutan
         görüşünde 8.53'ten 3.44'e (koyu), 8.40'tan 3.26'ya (açık) düşüyor;
         378 çiftin 62'si eski 8.0 kapısının altında, 21'i 5.0'ın altında.
         14 renkte 91 çiftin HİÇBİRİ 8.0'ın altında değildi.
       · gri tonlamalı baskı: kâğıt paleti 14 renkken bile iki rengi aynı
         griye düşürüyordu (oran 1.0001:1). 28'de 378 çiftin 38'i 1.02:1
         altında. Palet o kanalı hiç taşımıyordu, taşıyamaz da: ΔE00 bandın
         içinde hue ile büyüyor, gri tonlama hue'yu tamamen atıyor.
     Yani şerit kaldırılsaydı ikinci kanal giderken birincisi de yarıdan
     aşağı inecekti. Ölçüm: python araclar/palet_uret.py serit

     A3, 6 Ağustos 2026: IŞIK ADASI KAPATILDI. Eski palet 14 pastel tondan
     oluşuyordu (L* 76-94) ve sayfa zemini 0,006 parlaklıkta olduğu için
     ızgara karanlık sayfanın ortasında 12,5:1 parlaklıkta bir levha gibi
     duruyordu. Yeni palet aynı yüzeyi sayfaya OTURTUYOR: boş hücreye göre
     kontrast 1,12-2,27, yani hücre ayrı bir levha değil aynı yüzeyin
     renklendirilmiş bir bölgesi.

     Değerler elle seçilmedi. Kısıtlar (hepsi tests/ içinde ölçülüyor):
       · ders adı ve öğretmen adı için AA, 4,5:1        (test_ders_hucresi_okunur)
       · öğretmen adı ders adından sönük, oran >= 1,5   (test_hucre_murekkep_hiyerarsisi)
       · dolu hücre boş hücreden AÇIK, ada bandı 1,10-3,00
                                                       (test_isik_adasi_kapali)
       · her çift, üç görüş kipinde de ayrık            (test_palet_mesafesi)
       · kroma tavanı C* 72                          (aşağıdaki not)
     Bu kısıtları sağlayan sRGB adayları arasından, en kötü çiftin ΔE00'ını
     büyüten yerleştirme arandı (CIEDE2000 + Viénot dikromat simülasyonu).

     Sonuç: en yakın çift normal 8,72 · protan 8,89 · deutan 8,53.
     Eski değerler sırasıyla 3,71 · 2,77 · 0,73'tü.

     KROMA TAVANI. Kısıt DEĞİL, ürün kararı. Tavansız arama en kötü çifti
     9,20'ye çıkarıyordu ama bunu iki renge elektrik mavisi (#0600C0 gibi,
     C* 105 üstü) vererek yapıyordu: ızgaranın geri kalanı sakin, o iki hücre
     bağırıyordu. C* 72 tavanı en kötü çifti 8,53'e indiriyor, karşılığında
     palet tek bir kuşak hâlinde okunuyor. 0,67 ΔE'nin bedeli bu.

     ÜÇ RENK AİLESİ DEĞİL İKİ KUTUP. Hue'lar mavi-mor ve sarı-kırmızı
     uçlarında toplanıp aileler AÇIKLIKLA ayrıldı; eşit aralıklı hue
     dağılımı denendi ve ölçüldü, dikromatta tek eksene çöktüğü için
     daha kötü sonuç veriyor (260806-5 §2).

     TAVAN. 14 kategori tek başına renkle taşınmıyor: yukarıdaki kısıtlar
     altında ulaşılabilir en iyi "en kötü çift" 9 civarı. Raporun aileler
     arası hedefi olan 12'ye çıkmanın yolu paleti zorlamak değil ikinci
     kanalı kurmak (A5, sol kenar şeridi). */
  /* KOYU TEMA DA AYNI PALETİ KULLANIYOR (7 Ağustos 2026, kullanıcı kararı).
     Buraya kadar koyu temanın kendi koyu paleti vardı ve gerekçesi "ışık
     adası": açık pastel hücreler koyu sayfanın ortasında parlayan bir levha
     kuruyordu. Ölçüm o adayı kapattı (hücre parlaklığı 0,646 -> 0,058) ama
     bedeli kullanıcının reddettiği bir görüntü oldu: hücreler donuklaştı,
     ilk beş rengin parlaklığı 0,033-0,094 bandına indi.

     Karar: tek palet, iki temada da beyaz panel üstü için üretilmiş olan.
     Ada bandı bilerek feda edildi; kazanç ders renklerinin canlı ve iki
     ekranda aynı olması. `--cell-ink` de aşağıda koyuya çekildi, yani
     hücrenin içi iki temada da birebir aynı görünüyor. */
  --lesson-palette: var(--c-paper-palette);
  /* Aşama 5, bant renginin DOLGU ve METİN görevleri ayrıldı.
     Dolgu (şerit, boya, nokta) iki temada da aynı canlı tonda kalır;
     metin varyantı aydınlıkta okunabilir olacak şekilde koyulaşır. */
  --err-fill:        #D03F45;        /* solid tehlike düğmesi, beyaz metinle AA */
  --band-red-ink:    var(--band-red);
  --band-orange-ink: var(--band-orange);
  --band-green-ink:  var(--band-green);

  /* Aşama 3, çakışan tokenlardan ayrılan roller */
  /* Ders hücresindeki öğretmen adı. 11px, yani WCAG'ye göre NORMAL metin:
     hedef 4,5:1. Ders adının tam mürekkebi yanında ikincil kalmalı ama
     okunurluğunu kaybetmemeli; iki koşul birden ölçülüyor
     (test_contrast.py::test_hucre_murekkep_hiyerarsisi).

     ALFA NEDEN BU DEĞER. Işık adası kapatıldıktan sonra hücre zemini koyu,
     mürekkep açık. Alfa yükseldikçe ikincil mürekkep birincile YAKLAŞIR
     (ikisi de beyaza gider) ve hiyerarşi silinir; düştükçe zemine yaklaşır
     ve 4,5:1 kırılır. İki koşul paletin en açık rengini de sıkıştırıyor:
     alfa ne kadar düşükse palet o kadar koyu olmak zorunda, palet ne kadar
     koyuysa ayırt edilebilirlik bütçesi o kadar dar. Ölçüm (bu palette):
       .65 -> 14 rengin 6'sı 4,5 altında          (okunmuyor)
       .70 -> hepsi geçiyor, hiyerarşi 1,60-1,94  (bu değer)
       .75 -> hiyerarşi 1,47'ye düşüyor           (eşik 1,50, kırmızı)
     Yani .70 iki duvar arasındaki tek basamak; komşuları ölçülüp elenmiş. */
  --lesson-ink-2:    var(--cell-ink-2);
  --cell-ink-2:      var(--c-paper-ink-2);
  --diff-outline:    var(--c-white);    /* fark vurgusunun kesikli çerçevesi */
  --border-strong:   #616C81;           /* form kontrol sınırı: WCAG 1.4.11 */

}

/* --------------------------------------- Katman 2: AYDINLIK · MÜREKKEP
   ŞU AN GEÇİCİ: yalnızca yapının yerinde olduğunu göstermek için makul
   varsayılanlar. Tema anahtarı Aşama 4'te geleceği için bu blok henüz
   kullanıcıya ulaşmıyor. Aşama 3'te kontrast ölçülerek yeniden tasarlanacak. */
[data-theme="light"]{
  /* MÜREKKEP: OKLCH ile türetildi, kontrast ölçüldü (AŞAMA 3) */
  color-scheme: light;

  --bg:               #E7EDF8;
  --surface:          #FFFFFF;
  --surface-2:        #F0F5FD;
  --surface-3:        #E1E8F6;
  --border:           #B0BBCE;
  --border-strong:    #8793A8;
  --border-soft:      #D9E0EC;
  --text:             #141E31;
  --text-muted:       #5B6577;
  --accent:           #0069C0;
  --accent-contrast:  #FFFFFF;
  --ok:              #007440;
  --ok-contrast:      #FFFFFF;
  --warn:             #AB5E00;
  --err:              #BE2130;
  --info:             #7730B7;
  --err-fill:        #D03F45;
  --band-red:        #FF6B6B;   /* dolgu: koyu temayla aynı */
  --band-orange:     #FFA14E;
  --band-green:      #3EE08A;
  --band-red-ink:    #BA1C2D;   /* metin: ölçülmüş koyu ton */
  --band-orange-ink: #A55A00;
  --band-green-ink:  #007943;
  --overlay:          rgba(20,30,49,.45);
  --overlay-soft:     rgba(20,30,49,.25);
  --shadow-1:         0 6px 18px rgba(20,30,49,.09);
  --shadow-2:         0 18px 48px rgba(20,30,49,.16);
  --panel-edge:       #FFFFFF;   /* yüzeyle aynı: aydınlıkta kabartma yok */
  /* Aydınlıkta iki mürekkep rolü de koyu: hücre zemini de bant dolgusu da
     açık. Değer aynı olsa bile roller AYRI tutuluyor, çünkü koyu temada
     ayrışıyorlar (bkz. koyu bloktaki --fill-ink / --cell-ink notu). */
  --fill-ink:         var(--c-paper-ink);
  --cell-ink:         var(--c-paper-ink);
  --accent-ink:       #FFFFFF;
  --accent-ink-2:     #FFFFFF;
  --accent-tint:      #E0EEFF;
  --accent-border:    #94C2F7;
  --ok-ink:           #FFFFFF;
  --ok-border:        #95D6AB;
  --warn-border:      #F7BD8F;
  --err-border:       #F9ADA9;
  --info-ink:         #FFFFFF;
  --pure:             #FFFFFF;
  --surface-list:     #F3F7FE;
  --surface-row:      #D2D9E7;
  --surface-deep:     #141E31;
  --divider-soft:     #E4EAF3;
  --bg-deep:          #DCE3EF;
  --toggle-knob:      #FFFFFF;
  --badge-hard:       #A91226;
  --badge-iter:       #2F51C1;
  --badge-tor:        #9B5400;
  --badge-adv:        #006F87;
  --badge-pref:       #6E25AD;
  --stripe-a:         #F69B96;
  --stripe-b:         #FFFFFF;
  --stripe-c:         #DA4147;
  --stripe-d:         #FFDFDD;
  --diff-outline:     #141E31;
  --pdf-backdrop:     #525659;
  --tint-accent-06:  #F4FBFF;
  --tint-accent-07:   rgba(0,105,192,.07);
  --tint-accent-08:   rgba(0,105,192,.08);
  --tint-accent-09:   rgba(0,105,192,.09);
  --tint-accent-22:  #D8F2FF;
  --tint-accent-28:  #CDEEFF;
  --tint-accent-35:  #C0EAFF;
  --tint-ok-06:       rgba(0,126,70,.06);
  --tint-ok-12:      #E8FBF1;
  --tint-ok-14:      #E4FBEF;
  --tint-ok-15:      #E2FAED;
  --tint-ok-18:      #DCF9EA;
  --tint-ok-30:      #C5F6DC;
  --tint-warn-12:    #FFF4EA;
  --tint-warn-20:    #FFECDC;
  --tint-err-10:     #FFF0F0;
  --tint-err-12:     #FFEDED;
  --tint-err-18:     #FFE4E4;
  --tint-err-20:     #FFE1E1;
  --tint-err-45:     #FFBCBC;
  --tint-info-10:    #F9F3FF;
  --tint-surface-35:  rgba(225,232,246,.35);
  --tint-surface-50:  rgba(225,232,246,.50);
  --scrim-header:     rgba(231,237,248,.85);
  --scrim-bar:        rgba(231,237,248,.95);
  --scrim-modal:      rgba(20,30,49,.45);
  --shadow-a:         rgba(20,30,49,.35);
  --shadow-b:         rgba(20,30,49,.12);
  --shadow-c:         rgba(20,30,49,.16);
  --shadow-d:         rgba(20,30,49,.55);
  --shadow-e:         rgba(20,30,49,.20);
  /* Koyu bloktaki kardeşiyle aynı iki duvar, aynı sonuç: .70'te 14 rengin
     7'si 4,5 altında kalıyor, .80'de hiyerarşi 1,38'e düşüp eşiği kırıyor.
     .75 aradaki tek basamak. (Eski palette de .62 hepsini düşürüyordu.) */
  --cell-ink-2:       var(--c-paper-ink-2);
  /* Kâğıt / aydınlık paleti. Değer taban katmanında (`--c-paper-palette`),
     çünkü aynı renkler yazdırma yaprağında da gerekiyor.

     260806-11, 7 Ağustos 2026: koyu paletle AYNI betikten, aynı komutla
     üretildi. Bu temanın parametreleri: h0 100 derece, L bandı 0.76-0.96
     (OKLab), kroma tavanı 0.155, kroma tabanı 0.03. Yöntemin tamamı koyu
     bloktaki DERS PALETİ notunda; burada yalnız yönün ters olduğu yer:

     Aydınlıkta mürekkep koyu kaldığı için kısıt yönü ters: hücre yeterince
     AÇIK olmak zorunda, bandın tavanı beyaz yüzey. Ada bandının ALT ucu asıl
     kısıt: 6 Ağustos öncesi paletin en açık rengi boş hücreden yalnız 1,27:1
     ayrılıyordu, dolu hücre beyaz kâğıtta neredeyse görünmüyordu.

     Kroma tavanı burada daha düşük (0.155 / 0.185): aynı kroma açık zeminde
     çok daha çiğ okunuyor, tavansız arama neon sarı-yeşil ve elektrik
     camgöbeği üretiyor. Bedeli 0,4-0,5 ΔE.

     ÖLÇÜLEN: ilk 20 renk normal 7,39 · protan 5,41 · deutan 5,28;
     tam 28 renk normal 4,92 · protan 3,54 · deutan 3,26.

     ADA TABANI. Üreteç bu temada 1,30 ile arıyor, ürün kapısı ise 1,10.
     Sebep yukarıdaki paragrafta: 1,27'de "dolu hücre beyaz kâğıtta neredeyse
     görünmüyordu" diye kayda geçmiştik. Kapıyı geçen bir renk o cümleyi geri
     getirebilir; üreteç o yüzden 1,27'nin üstünden başlıyor. Ölçülen en
     düşük ada kontrastı 1,3076.

     SIRA KOYU PALETLE EŞLEŞTİRİLMİYOR. 6 Ağustos'ta Macar algoritmasıyla
     eşleştirilmişti ve eşleşme zaten tam değildi (ortalama hue farkı 41
     derece), çünkü iki temanın uygulanabilir bölgeleri farklı. Altın açı
     dizisinde eşleştirme yapılamaz: sıra bozulursa ön ek özelliği de bozulur,
     yani "ilk 20 kararlı" garantisi düşer. Tema değiştiren kullanıcı
     derslerin rengini yeniden öğrenir; bu bilinen bir bedel. */
  --lesson-palette:   var(--c-paper-palette);
}


/* ============================================================================
   GEÇİŞ DÖNEMİ TAKMA ADLARI
   Mevcut altı sayfa üç ayrı isim sözlüğü kullanıyordu (--txt/--text,
   --mut/--muted, --red/--pr/--err …). Hepsi burada TEK kaynağa bağlanır;
   böylece Aşama 1'de hiçbir bileşen dosyasına dokunmadan tema merkezîleşir.
   Aşama 2'de bileşenler anlamsal isimlere geçirilecek, bu blok küçülecek.
   ========================================================================== */
:root, [data-theme="light"]{
  --panel:   var(--surface);
  --panel2:  var(--surface-2);
  --line:    var(--border);
  --txt:     var(--text);
  --mut:     var(--text-muted);
  --muted:   var(--text-muted);
  --acc:     var(--accent);
  --grn:     var(--ok);
  --orn:     var(--warn);
  --red:     var(--err);
  --pur:     var(--info);
  --pg:      var(--band-green);
  --po:      var(--band-orange);
  --pr:      var(--band-red);
  --relax:   var(--info);
}

/* ============================================================================
   DERS HÜCRESİNİN MÜREKKEBİ (A3 geçiş kuralı, 260806-5)

   Yukarıda rol ikiye ayrıldı: `--fill-ink` canlı dolgu üstünde, `--cell-ink`
   ders hücresi üstünde. Ama hücreyi çizen dört yer token'ı hâlâ eski adıyla,
   `var(--lesson-ink)` diye yazıyor:

     static/index.html          table.tt td .m           (öğretmen adı)
     static/js/12-timetable.js  <td style="...">         (çizelge hücresi)
     static/js/18-carsaf.js     <td style="...">         (çarşaf hücresi)
     static/goruntule.css       .ders.dolu, .hafta td.dolu

   Bu blok o adı YALNIZ hücre yüzeylerinde `--cell-ink`e bağlar. Özel
   nitelik değişkenleri kalıtımla iniyor, yani satır içi `style` ile yazılmış
   `color:var(--lesson-ink)` bile burada çözülür: satır içi bildirimi
   `!important` ile ezmeye gerek kalmıyor.

   İKİ İSTİSNA. Hücrenin İÇİNDE oturan ama zemini palet DEĞİL canlı dolgu
   olan iki yüzey var; onlarda ad geri alınır:
     table.tt td.unav      kapalı saat deseni (--stripe-a üstüne koyu tarama)
     table.cs td .zrz      zincir rozeti (--pg / --po dolgu, 18-carsaf.js:619)
   Seçici özgüllükleri (0,2,2) > (0,1,2) olduğu için sıra yeterli.

   GEÇİCİ. Dört tüketici `var(--cell-ink)` yazmaya geçtiği gün bu blok
   silinir; o gün `--lesson-ink` de yalnız `--fill-ink`in takma adı kalır.
   Blok silinirse ne olduğunu ölçen test:
   tests/test_contrast.py::test_hucre_murekkebi_yeniden_baglanmis
   ========================================================================== */
table.tt td, table.cs td, .ders.dolu, .hafta td.dolu{ --lesson-ink: var(--cell-ink) }
table.tt td.unav, table.cs td .zrz{ --lesson-ink: var(--fill-ink) }

/* Tema değiştirme düğmesi. Boyut sayfaya göre değişebilsin diye burada;
   theme.js yalnız davranışı kuruyor. */
#themeBtn{
  background: transparent;
  border: 1px solid var(--border-strong);
  color: var(--text-muted);
  border-radius: 8px;
  width: 30px; height: 30px;
  line-height: 1; font-size: 15px;
  cursor: pointer; padding: 0; flex: 0 0 auto;
}
#themeBtn:hover{ color: var(--text); border-color: var(--accent); }
