/* ==========================================================================
   OrtakİK — KARANLIK TEMA KATMANI
   Eklendi: 03.09.2026 · kullanıcı isteği ("1-şuanki tema 2-karanlık tema")

   `theme-grafit.css` ile AYNI KALIP, iki farkla:

   1. Seçicisi `:root` değil `:root[data-theme="dark"]`. Özgüllüğü (0-1-1)
      hem `ortakik.css`in `:root`undan hem `theme-grafit.css`ten yüksektir,
      yani yükleme sırasından bağımsız kazanır. Öznitelik `<html>` üzerinde
      durur ve `_Layout.cshtml`in <head> bloğundaki küçük betik tarafından,
      sayfa boyanmadan ÖNCE yazılır (yoksa açık tema bir kare görünüp
      karanlığa döner — FOUC).

   2. Token bloğundan sonra BİLEŞEN SEÇİCİLERİ de var. `theme-grafit.css`
      "hiçbir bileşen seçicisi taşımaz" diyor; bu dosya taşımak ZORUNDA ve
      sebebi iki ayrı ölçümdür (ikisi de 2026-09-03):

        · İKİ ROLLÜ TOKEN — `--ok-brand-800` kod tabanında hem metin hem
          zemin; karanlıkta bu iki rol zıt yöne çekiyor. Zemin kullanan üç
          yer elle sabitlendi ("ÜÇ BİLEŞEN DÜZELTMESİ" bölümü).
        · TOKEN OKUMAYAN KURALLAR — `ortakik.css`in bazı bileşenleri rengi
          `var()` ile değil doğrudan yazıyor; token katmanı onlara hiç
          ulaşmıyor. En büyüğü buton ailesi (2.232 kullanım). Son bölüm.

   ⚠️ SOL MENÜ VE ÜST BAR — 2026-09-16'DA KAPSAMA ALINDI (kullanıcı kararı,
      seçenek B). Önceden kapsam dışıydı: legacy'de de koyu laciverttiler
      (#0A2B4D) ve o hâlleriyle yerinde duruyorlardı. Aynı gün panel iki kez
      açılınca (#16202B → #253141) kart kabuğun ÜSTÜNE çıktı ve lacivert
      katman sırasında ortada kaldı; bu yüzden kabuk bir kademe DERİNLEŞTİRİLDİ
      (#0A2B4D → #082440, parlaklık 0,0233 → 0,0168). Marka kimliği korundu,
      yalnız derinleşti; metin kontrastı da arttı (10,1:1 → 11,1:1).
      ⚠️ Yalnız `--ok-sidebar-*` yazılır: `--ok-topbar-*` jetonlarının yedisi de
      `ortakik.css:89-96`da `var(--ok-sidebar-*)` ile TÜRETİLİR, kendiliğinden
      peşinden gelir. Üst barı ayrı yazmak bu bağı koparır.
      Nötr zeminler hâlâ SAF GRİ DEĞİL, hafif mavi biaslı: saf gri bir gövde,
      lacivert menünün yanında ikinci bir renk ailesi gibi duruyordu.

   ⚠️ Ölçü, tipografi, yarıçap, katman sırası ve hareket token'ları kapsam
      dışıdır — tema yalnız RENKTİR.
   ========================================================================== */

:root[data-theme="dark"] {
  /* Tarayıcının kendi çizdiği yüzeyler (kaydırma çubuğu, native date/time
     seçici, otomatik doldurma sarısı) bu bildirim olmadan açık kalır ve
     ekranda tek başına parlar. Token değil, ama tema kararının parçası. */
  color-scheme: dark;
  /* ---- Marka ölçeği ---------------------------------------------------
     Merdiven KÖRLEMESİNE ters çevrilmedi; her basamağın kod tabanındaki
     ROLÜ sayıldı (`grep var(--ok-brand-NNN)`, 2026-09-03):

       900  2 metin / 1 zemin        800  10 metin / 3 zemin
       700  23 metin / 0 zemin       600  13 metin / 30 zemin
       500  2 metin / 11 zemin       300   0 metin /  7 zemin
       200  0 metin /  9 zemin       100   1 metin / 12 zemin
        50  0 metin / 34 zemin

     Yani üst basamaklar METİN, alt basamaklar ZEMİN taşıyor. Karanlıkta
     metin açık, zemin koyu olmalı — merdiven bu yüzden ortadan bükülür:
     700-900 açık maviye çıkar, 50-300 koyu maviye iner, 600/500 dolgu
     rolünde olduğu için orta mavi kalır. */
  --ok-brand-900: #CBE0FA; /* en vurgulu metin */
  --ok-brand-800: #A9CDF7; /* rozet, toplam değeri, seçili ağaç satırı */
  --ok-brand-700: #8CBAF2; /* bağlantı metni, aktif menü metni (~8,5:1) */
  --ok-brand-600: #2E7DD3; /* BİRİNCİL dolgu — beyaz metinle ~4,6:1 */
  --ok-brand-500: #4192E4; /* dolgu hover: 600'den AÇIK kalmak zorunda */
  --ok-brand-300: #2C4C74;
  --ok-brand-200: #24405F;
  --ok-brand-100: #1C3450;
  --ok-brand-50: #152A42; /* seçili satır, aktif menü dolgusu (34 kullanım) */
  /* ---- Kabuk ve panel kurgusu ----------------------------------------
     Açık temada kurgu "kabuk beyaz, kart gri"dir (2026-08-22 kararı).
     Karanlıkta aynı kurgu yönünü koruyamaz: koyu tarafta okunabilirlik
     "yükselen yüzey açılır" kuralına bağlıdır. Bu yüzden en arkadaki plan
     EN KOYU, kart ondan bir basamak açık, yüzen katman (modal, açılır
     menü, toast) bir basamak daha açıktır. Token ADLARI ve onları okuyan
     bileşenler değişmedi — kurgu bir daha dönerse yine tek yerden çevrilir. */
  --ok-page-bg: #17212D; /* kabuk zemini — en arkadaki plan */
  --ok-panel: #253141; /* kart / panel gövdesi */
  --ok-panel-alt: #2B3849; /* kart ayağı, aksiyon çubuğu */
  --ok-panel-filter: #243C5C; /* liste ekranı filtre paneli (mavi biaslı) */
  --ok-surface: #2A3748; /* yüzen katman: modal, dropdown, toast */
  --ok-surface-alt: #2E3B4C; /* zebra satır, tablo başlık altı */
  --ok-surface-sunk: #1E2836; /* girintili alan, devre dışı input */
  --ok-tabbar-bg: #202B3A; /* sarmalayan sekme şeridi */
  --ok-bg: #131C27; /* giriş ekranı zemini */
  /* ---- Metin ----------------------------------------------------------
     Kontrastlar `--ok-panel` (#253141) üzerinde ölçüldü (2026-09-16 tonlama A, bir kademe açık). */
  --ok-text: #E9EFF6; /* gövde metni      (~11,4:1) */
  --ok-text-2: #BAC6D3; /* ikincil metin    (~7,6:1)  */
  --ok-text-3: #8D9CAB; /* yer tutucu       (~4,7:1)  */
  /* `--ok-text-on-brand` BİLEREK EZİLMEDİ, beyaz kalıyor. Sekiz kullanımının
     beşi `.ok-grid thead th` ailesindedir; o başlığın zemini token değil
     SABİT bir `linear-gradient`tir (ortakik.css:7001) ve aşağıdaki bileşen
     bölümünde ELLE EZİLİYOR — ezilmiş hâlinin en açık durağında da beyaz
     metin 8,9:1 verir. Kalan üçü `.btn-primary` dolgusu üzerindedir;
     `--ok-brand-600` yukarıda beyazla 4,6:1 verecek şekilde seçildi.
     ⚠️ 2026-09-03'te burada "gradyan tema değişse de koyu mavi kalır"
     yazıyordu; ÖLÇÜM bunu çürüttü — gradyanın alt durağı #9FB4CF, yani
     açık gri-mavidir. Not düzeltildi. */
  /* ---- Kenarlık ------------------------------------------------------- */
  --ok-border: #374453; /* saç çizgisi ayraç */
  --ok-border-strong: #45525F; /* input kenarlığı */
  --ok-border-hard: #57646F; /* tablo hücre kenarlığı */
  /* ---- Durum renkleri -------------------------------------------------
     `theme-grafit.css` bunlara HİÇ dokunmaz (dokunmayan tema dosyası
     `ortakik.css`teki değeri dondurmasın diye). Karanlıkta dokunmak
     ZORUNLU: ana renkler koyu zeminde sönük kalıyor, `-bg` tonları ise
     açık zemin için üretilmiş (ör. `--ok-danger-bg: #FDECEB`) ve koyu
     kartın üstünde beyaz bir kutu gibi patlıyordu.
     Ana renk AÇILIR, `-bg` KOYULAŞIR, `-br` ikisinin arasında durur. */
  --ok-success: #5CBE89;
  --ok-success-bg: #17352A;
  --ok-success-br: #2F6B4C;
  --ok-warning: #E0A93C;
  --ok-warning-bg: #33290F;
  --ok-warning-br: #6B5420;
  --ok-danger: #d43a2a;
  --ok-danger-bg: #3A1D1B;
  --ok-danger-br: #7A3830;
  /* Bilgi rengi aksanla BİRLİKTE taşınır — `var()` bağı yok, değer olarak
     yazılır (aynı gerekçe theme-grafit.css'te de kayıtlı). */
  --ok-info: #4B9BE8;
  --ok-info-bg: #152A42;
  --ok-info-br: #24405F;
  --ok-neutral-bg: #2E3B4C;
  --ok-neutral-br: #434F5E;
  /* ---- Kabuk: sol menü + üst bar (2026-09-16, seçenek B) --------------
     Kart #253141e açıldığı için lacivert bir kademe derinleştirildi; böylece
     katman sırası kabuk < zemin < kart < yüzen katman olarak düzeldi.
     `fg` / `fg-strong` / `fg-dim` / `accent` BİLEREK ezilmedi — açık temadaki
     değerleri yeni zeminde daha yüksek kontrast veriyor (fg 11,1:1).
     Üst bar yazılmaz: `--ok-topbar-*` bunlardan türer (ortakik.css:89-96). */
  --ok-sidebar-bg: #082440;
  --ok-sidebar-active: #2E7DD3;
  --ok-sidebar-hover: rgba(255, 255, 255, .08);
  --ok-sidebar-border: rgba(255, 255, 255, .12);
  --ok-sidebar-field: rgba(255, 255, 255, .08);
  /* ---- Buton dolgulari (2026-09-16, secenek B) ------------------------
     `ortakik.css` artik bu uc rengi jetondan okuyor. Koyu temada birincil ve
     sil, acilan panelle (#253141) uyumlanmasi icin bir tik aciliyor.
     ⚠️ `--ok-btn-success-bg` BILEREK EZILMIYOR: `--ok-success` (#5CBE89) gibi
     acik bir yesil dolgu yapilsaydi uzerindeki beyaz metin 2,29:1 verirdi.
     Olculen degerler (beyaz metin / karttan ayrisma):
       primary #1264CE  5,62 / 2,35   ·  hover #0F55B0  7,13
       danger  #CE2626  5,34 / 2,46   ·  hover #B01F1F  6,86
       success #0F7A1A  5,50 / 2,40   (degismedi) */
  --ok-btn-primary-bg: #1264CE;
  --ok-btn-primary-bg-hover: #1B6FD6;
  --ok-btn-danger-bg: #CE2626;
  --ok-btn-danger-bg-hover: #D93232;
  --ok-btn-success-bg-hover: #17872A;
  /* ---- İş akışı durum metinleri --------------------------------------- */
  --ok-state-approved: #5CBE89;
  --ok-state-pending: #D9A548;
  --ok-state-rejected: #EE6E60;
  --ok-state-locked: #97A5B3;
  --ok-state-draft: #78889A;
  /* ---- Bölüm bandı (`.ok-band`) ----------------------------------------
     Açık temada zemin #588ec7; koyu kart (#16202B) üzerinde o ton parlıyor.
     Bir basamak koyulaştırıldı: beyaz yazıyla kontrast 3,44:1 → 6,56:1
     (AA'yı geçer), bandın kartla ayrımı 2,70:1. Yazı token'ı
     (`--ok-band-fg`) beyaz kalır, bu yüzden ezilmiyor. */
  --ok-band-bg: #2F5F96;
  /* ---- Gölge ----------------------------------------------------------
     Açık temada gölge `rgba(16,32,56,…)` — mavi-siyah, %6-14 opaklık.
     Koyu zeminde o gölge GÖRÜNMEZ (zeminden açık kalıyor); yüzen katmanlar
     kartın üstünde yüzdüğünü kaybediyordu. Saf siyaha ve yüksek opaklığa
     çekildi. */
  --ok-sh-sm: 0 1px 2px rgba(0, 0, 0, .45);
  --ok-sh-md: 0 4px 12px rgba(0, 0, 0, .5), 0 1px 3px rgba(0, 0, 0, .4);
  --ok-sh-lg: 0 12px 32px rgba(0, 0, 0, .55), 0 2px 8px rgba(0, 0, 0, .4);
  --ok-sh-top: 0 1px 0 var(--ok-border), 0 2px 6px rgba(0, 0, 0, .35);
  /* ---- Odak halkası ---------------------------------------------------
     Ham `rgba` — `var()` ile aksana bağlanamıyor, elle eşitlendi
     (ortakik.css:'--ok-focus-ring' ve theme-grafit.css'te de aynı not var).
     Koyu zeminde .28 opaklık kayboluyordu, .38'e çıkarıldı ve ton
     `--ok-brand-500`in rgb'sinden alındı. */
  --ok-focus-ring: 0 0 0 3px rgba(65, 146, 228, .38);
}

/* ==========================================================================
   BEŞ BİLEŞEN DÜZELTMESİ

   Aşağıdaki kurallar, yukarıdaki token değişiminin YAN ETKİSİNİ kapatır.
   İlk üçünün ortak sebebi aynı: `--ok-brand-800` kod tabanında 10 kez METİN,
   3 kez ZEMİN rolünde kullanılıyor. Metin rolü karanlıkta AÇIK ton ister
   (yukarıda #A9CDF7 verildi); zemin rolü KOYU ton ister. Bir token iki
   yöne birden gidemediği için zemin kullanan üç yer burada elle sabitlendi.
   Dördüncüsünün sebebi farklıdır ve 1. maddede yazılı: o kural hiç token
   okumuyor. Beşincisi de ayrıdır: token okuyor ama okuduğu ton karanlıkta
   zeminden ayırt edilemiyor (5. maddede ölçüsüyle yazılı).

   Bunlar token değil KURALDIR; yani bu dosya yalnız `:root` ezen ince bir
   katman DEĞİLDİR ve `ortakik.css` bu seçicilerde değişirse buraya da
   bakılmalıdır. Hepsi ölçülerek bulundu, tahmin değil.
   ========================================================================== */

/* 1) Grid başlığının zemini — ortakik.css:6998-7003 (K-41 "mavi tema").
      [2026-09-03 — KULLANICI KARARI] "light tema tamam kalsın ama koyu tema
      hiç olmamış." Ölçüm iki ayrı kusur gösterdi:

        · Zemin bir token DEĞİL, sabit `linear-gradient`: üstte
          rgb(3,103,143), ortada rgb(87,141,199), altta rgb(159,180,207).
          Token katmanı buraya HİÇ ULAŞMIYOR, yani karanlık tema bu şeridi
          olduğu gibi devralıyordu. Alt durak (#9FB4CF) koyu sayfanın içinde
          parlak bir bant gibi duruyor ve üzerindeki beyaz metin orada
          1,9:1'e düşüyor — WCAG metin eşiği 4,5:1'in çok altı.
        · `border-bottom: 1px solid var(--ok-brand-800)` — 800 karanlıkta
          METİN rolü gereği #A9CDF7'ye çıktığı için başlığın altında parlak
          bir çizgi kalıyordu.

      [2026-09-16 — kullanıcı kararı, seçenek B] GRADYAN KALDIRILDI, düz renge
      geçildi. Gerekçe: panel aynı gün #16202B → #253141 olarak açılınca üç
      duraklı gradyan kartın üstünde yapışık koyu bir şerit gibi kalıyordu.
      Ayrıca koyu zeminde gradyanlar bant izine meyillidir ve başlık satırı
      kısa olduğu için gradyanın görsel katkısı zaten azdı. Düz #1B4A6B
      üzerinde beyaz metin 9,4:1 verir (gradyanın en açık durağında 8,9:1 idi).
      ⚠️ Bu kural hâlâ JETON OKUMUYOR, sabit hex taşıyor: panel/tema değişirse
      elle güncellenmesi gerekir — bugün tam olarak bu yüzden geride kalmıştı.
      AÇIK TEMA DEĞİŞMEDİ — yalnız `[data-theme="dark"]` altında geçerlidir.

      ⚠️ Filtre satırı (`.ok-grid thead tr.ok-grid__filters th`, özgüllük
      0-2-3) bu kuraldan (0-2-2) YÜKSEK olduğu için kendi zeminini
      (`--ok-brand-50` → #152A42) korur; bilerek dokunulmadı. */
:root[data-theme="dark"] .ok-grid thead th {
  background: #1B4A6B;
  border-bottom-color: #0E2F47;
}

/* 2) Aktif sıralama başlığı — ortakik.css:7098-7100.
      `background: var(--ok-brand-800)` + `color: var(--ok-text-on-brand)`
      (beyaz). 800 açıldığı için beyaz metin okunmaz kalırdı. Değer, 1.
      maddedeki gradyanın ORTA durağından bir ton koyu seçildi: açık temada
      da brand-800 gradyanın ortasından koyudur, yani "bu kolona göre
      sıralı" ayrımı iki temada da aynı yönde okunur. */
:root[data-theme="dark"] .ok-grid th[aria-sort] {
  background: #0A2A42;
}

/* 3) Birincil butonun BASILI hâli — ortakik.css:527-528.
      `--bs-btn-active-bg` ve `--bs-btn-active-border-color` 800'den gelir.
      800 açıldığında buton basılınca AÇILIYORDU; basılı hâl koyulaşmalı. */
:root[data-theme="dark"] .btn-primary {
  --bs-btn-active-bg: #1E5FA8;
  --bs-btn-active-border-color: #1E5FA8;
}

/* 4) Giriş ekranının marka paneli — ortakik.css:9101.
      Gradyanın iki durağı `--ok-brand-800` ve `--ok-brand-900`; ikisi de
      açıldığı için panel karanlık temada BEYAZLIYORDU. Gradyan sabit
      değerlerle yeniden yazıldı — ilk iki radyal durak zaten sabitti
      (#2A7EE0 / #0C3F76), yalnız lineer katman token okuyordu. */
:root[data-theme="dark"] .ok-auth__brand {
  background:
    radial-gradient(1100px 620px at 12% 8%, #1F5FA8 0%, transparent 58%),
    radial-gradient(900px 700px at 88% 92%, #0A2E56 0%, transparent 60%),
    linear-gradient(148deg, #10457E 0%, #0A2C50 100%);
}

/* 5) "Seçili adım" halkası — ortakik.css:8913-8918.
      `.ok-step.is-current .ok-step__marker` marker'ın çevresine
      `box-shadow: 0 0 0 4px var(--ok-brand-100)` basıyor. Karanlıkta
      `--ok-brand-100` = #1C3450, kart gövdesi `--ok-panel` = #16202B;
      ölçüm 1,30:1 — halka pratikte GÖRÜNMÜYOR ve zincirde hangi adımın
      seçili olduğu kaybediliyor. Halka, zincirde seçili adımın TEK
      göstergesidir — dekoratif değil işlevseldir, yani SC 1.4.11'in 3:1
      eşiğine tabidir. `--ok-brand-300` (#2C4C74) yetmiyor: `--ok-panel`
      üzerinde 1,88:1, `--ok-panel-alt` üzerinde 1,72:1. `--ok-brand-500`
      (#4192E4) ile `--ok-panel` üzerinde 5,44:1, `--ok-panel-alt` üzerinde
      4,65:1 — eşiği geçiyor. Marker dolgusu `--ok-brand-600` olduğu için
      halka onun bir ton açığı olarak hale gibi okunuyor. Açık temada 100
      tonu doğru çalıştığı için kaynak değiştirilmedi; kural yalnız karanlık
      kapının arkasındadır. */
:root[data-theme="dark"] .ok-step.is-current .ok-step__marker {
  box-shadow: 0 0 0 4px var(--ok-brand-500);
}

/* ==========================================================================
   TOKEN OKUMAYAN BİLEŞENLER

   Aşağıdakiler yukarıdaki token katmanının HİÇ ULAŞAMADIĞI kurallardır:
   `ortakik.css` o satırlarda `var(--ok-…)` değil doğrudan renk değeri yazıyor,
   dolayısıyla tema değişse de eski değerlerinde kalıyorlar. Taranarak bulundu
   (2026-09-03); her birinin `ortakik.css` satır numarası yanında.

   ⚠️ AÇIK TEMA HİÇ DEĞİŞMEDİ. Buradaki hiçbir kural `ortakik.css`e taşınmadı;
      hepsi `:root[data-theme="dark"]` kapısının arkasında. Sabit renkleri
      kaynakta token'a bağlamak DOĞRU çözümdür ama açık temanın da rengini
      değiştirir (ör. `.ok-btn--primary` bugün #0D5BC0, token #1B6FD6) —
      o ayrı bir iş kalemidir ve kullanıcı kararı gerektirir.
   ========================================================================== */

/* ---- Butonlar (ortakik.css:2124-2234) -------------------------------------
   `components/buttons.css` tokens katmanını hiç okumuyor; yedi varyantın
   tamamı kendi sabit renk setini taşıyor. Ekranlarda 2.232 kullanım var, yani
   dokunulmazsa karanlık temanın en görünür kusuru bu olurdu.

   [2026-09-16 GÜNCELLEME] Dolgulu üçlü artık `ortakik.css`te JETON okuyor
   (`--ok-btn-*-bg`); bu bölümdeki elle ezme ihtiyacı kalktı. Yeni değerler
   yukarıdaki token bloğunda. `success` bilerek eski değerinde tutuldu.
   Aşağıdaki kurallar yalnız AÇIK ZEMİN taşıyan varyantlar içindir. */
:root[data-theme="dark"] .ok-btn--secondary {
  background: #1B2836;
  border-color: #4B90E4;
  color: #8CBAF2;
}

  :root[data-theme="dark"] .ok-btn--secondary:hover {
    background: #21374C;
    border-color: #6BA6EC;
    color: #A9CDF7;
  }

:root[data-theme="dark"] .ok-btn--ghost {
  border-color: #4B90E4;
  color: #8CBAF2;
}

  :root[data-theme="dark"] .ok-btn--ghost:hover {
    background: #1B2836;
  }

:root[data-theme="dark"] .ok-btn--soft {
  background: #1B3450;
  border-color: #2C4C74;
  color: #A9CDF7;
}

  :root[data-theme="dark"] .ok-btn--soft:hover {
    background: #21415F;
    border-color: #4B90E4;
  }

/* ---- Hover dolgusu: koyu temada AÇILIR, koyulaşmaz --------------------
   `ortakik.css` hover'da dolguyu KOYULAŞTIRIYOR — açık temada doğru (daha
   çok mürekkep), koyu temada ters: buton imleç üzerine gelince geri çekiliyor.
   Üç varyantta da ölçüldü (parlaklık, `filter: brightness(1.1)` dahil):
     primary #1264CE 0,1370 -> #0F55B0 x1,1 = 0,1202
     danger  #CE2626 0,1465 -> #B01F1F x1,1 = 0,1229
     success #0F7A1A 0,1410 -> #0d6517 x1,1 = 0,1153
   Hover jetonları tabandan AÇIK değerlerle değiştirildi (+18..25% parlaklık).
   `success` için hover jetonu ilk kez eziliyor; tabanı (#0F7A1A) yerinde
   kalıyor, orada bir sorun yoktu.

   ⚠️ `filter: brightness(1.1)` KALDIRILMAK ZORUNDA. Yeni jetonlar zaten açık;
   üstüne 1,1 çarpanı binseydi beyaz metin AA'nın altına düşerdi:
     primary 4,17 · danger 3,98 · success 3,90  (eşik 4,5)
   Kaldırılınca ölçülen değer = görünen değer:
     primary 4,89 · danger 4,72 · success 4,63
   Filtre ayrıca kenarlığı ve ikonu da parlatıyordu; kalkmasıyla hover
   yanıtı tek yerden, dolgu + çerçeveden okunuyor. */
:root[data-theme="dark"] .ok-btn--primary:hover,
:root[data-theme="dark"] .ok-btn--danger:hover,
:root[data-theme="dark"] .ok-btn--danger-solid:hover,
:root[data-theme="dark"] .ok-btn--success:hover {
  filter: none;
}

/* ---- Açık zeminli butonların gölgeleri (ortakik.css:2265-2305) -----------
   Bunlarda da gölge mavi tonluydu (`rgba(13,91,192,.12-.25)`), dolgulu
   üçlüdekinden soluk ama aynı kusur: panelden 1,07-1,18×'lik mavimsi bir iz.
   Nötr siyaha çevrilmedi, TAMAMEN KALDIRILDI. Gerekçe ölçüm: koyu temada
   `--secondary`in zemini (#1B2836, lum 0,0202) ve `--ghost`un hover zemini
   PANELDEN KOYU (#253141, lum 0,0297) — panelin içine çökmüş görünen bir
   yüzeyin ALTINA gölge koymak fiziksel olarak tutarsız, sadece bulanıklık
   ekler. `--soft` panelden yalnız 1,10× açık, orada da gölgenin anlatacağı
   bir yükseklik yok.
   Hover geri bildirimi kaybolmuyor: üçünün de hover'ı zaten zemin, kenarlık
   ve metin rengini değiştiriyor (yukarıdaki kurallar). Dolgulu üçlü nötr
   gölgesini KORUYOR — yükselen tek öğe birincil eylem olsun diye. */
:root[data-theme="dark"] .ok-btn--secondary,
:root[data-theme="dark"] .ok-btn--secondary:hover,
:root[data-theme="dark"] .ok-btn--ghost:hover,
:root[data-theme="dark"] .ok-btn--soft,
:root[data-theme="dark"] .ok-btn--soft:hover {
  box-shadow: none;
}

/* ---- Dolgulu butonlar: gölge ve çerçeve (ortakik.css:2246-2390) ----------
   Dolgu renkleri DEĞİŞMİYOR — yalnız iki kusur kapatılıyor.

   1) GÖLGE AÇIK TEMADAN KALMIŞTI. `0 4px 12px rgba(13,91,192,.3)` beyaz
      sayfada yumuşak mavi bir iz bırakır; koyu panelde (#253141) üzerine
      binince #1E3E67'ye dönüşüyor: panelden 1,22× ama DOLGUDAN 1,93× AÇIK.
      Yani gölge değil, butonun etrafında MAVİ HALE olarak okunuyordu
      (danger'da kırmızı). Nötr siyaha indi.
      ⚠️ `:hover` ve `:active` kendi gölgelerini AYRICA bildiriyor; yalnız
      taban ezilseydi hale fareyle üzerine gelince geri gelirdi.

   2) 2px KENARLIK HİÇBİR ŞEY ANLATMIYORDU: `.ok-btn` tabanı 2px veriyor ve
      dolgulu varyantlarda kenarlık rengi dolguyla aynı — buton boşuna
      şişiyordu. Kenarlık 1px'e indi ve DOLGUDAN AÇIK bir renk aldı, böylece
      butonun sınırını dolgu değil ince parlak bir çerçeve çiziyor: dolgu
      panelden zayıf ayrışsa da (primary 2,35×) buton nerede bitiyor belli.
      Çerçeve panelden: primary 3,70× · danger 4,23× · success 4,39×.

   Hover yanıtını da çerçeve taşıyor. Ölçüm: koyu temada primary hover'da
   AÇILMIYOR, KOYULAŞIYOR — `--ok-btn-primary-bg-hover` (#0F55B0) tabandan
   koyu ve `filter: brightness(1.1)` bunu kapatmıyor (0,1370 → 0,1202).
   Dolguya dokunulmadığı için burada düzeltilmedi; hover'da çerçeve açılıyor
   (primary 3,70× → 5,05×) ve hareket oradan okunuyor. */
:root[data-theme="dark"] .ok-btn--primary,
:root[data-theme="dark"] .ok-btn--danger,
:root[data-theme="dark"] .ok-btn--danger-solid,
:root[data-theme="dark"] .ok-btn--success {
  border-width: 1px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, .35);
}

  :root[data-theme="dark"] .ok-btn--primary:hover,
  :root[data-theme="dark"] .ok-btn--danger:hover,
  :root[data-theme="dark"] .ok-btn--danger-solid:hover,
  :root[data-theme="dark"] .ok-btn--success:hover {
    box-shadow: 0 3px 8px rgba(0, 0, 0, .45);
  }

  :root[data-theme="dark"] .ok-btn--primary:active,
  :root[data-theme="dark"] .ok-btn--danger:active,
  :root[data-theme="dark"] .ok-btn--success:active {
    box-shadow: 0 1px 3px rgba(0, 0, 0, .5);
  }

:root[data-theme="dark"] .ok-btn--primary { border-color: #3C8AE0; }
:root[data-theme="dark"] .ok-btn--danger,
:root[data-theme="dark"] .ok-btn--danger-solid { border-color: #E86B6B; }
:root[data-theme="dark"] .ok-btn--success { border-color: #46A855; }

  :root[data-theme="dark"] .ok-btn--primary:hover { border-color: #63A4EC; }
  :root[data-theme="dark"] .ok-btn--danger:hover,
  :root[data-theme="dark"] .ok-btn--danger-solid:hover { border-color: #F08A8A; }
  :root[data-theme="dark"] .ok-btn--success:hover { border-color: #63BE72; }

/* ---- Doğrulama özeti (ortakik.css:3421, :3440) ----------------------------
   Zemin token (`--ok-danger-bg`, yukarıda koyulaştırıldı) ama metin sabit
   koyu kırmızı (#7E1E18) — koyu zeminde okunmaz kalırdı. */
:root[data-theme="dark"] .ok-form-summary,
:root[data-theme="dark"] .ok-form-summary a {
  color: var(--ok-danger);
}

/* ---- Takvim olay etiketleri (ortakik.css:8409, :8415, :8421) --------------
   Aynı desen: zemin token, metin sabit koyu. */
:root[data-theme="dark"] .ok-cal__event--report { color: var(--ok-danger); }
:root[data-theme="dark"] .ok-cal__event--excuse { color: var(--ok-warning); }
:root[data-theme="dark"] .ok-cal__event--training { color: var(--ok-success); }

/* ---- Arama vurgusu (ortakik.css:3775, :8079) ------------------------------
   `background:#FFF1A8` (açık sarı) + `color:inherit`. Karanlıkta miras alınan
   metin AÇIK olur ve açık sarı üzerinde kaybolur. `ortakik.css:1630` aynı
   tuzağı `.ok-nav mark` için görüp metni sabitlemiş; bu iki ikizde eksik. */
:root[data-theme="dark"] .ok-select__opt mark,
:root[data-theme="dark"] .ok-tree mark {
  color: #16202E;
}
:root[data-theme="dark"] .ok-busy-screen {
  background: rgba(10, 18, 27, .68);
}

/* ---- Modal ayağı (ortakik.css:6026) ---------------------------------------
   Başlık zaten her iki temada koyu, gövde token okuyor; yalnız ayak sabit
   açık gri kalıyordu — koyu / koyu / AÇIK sırası. */
:root[data-theme="dark"] .ok-modal__foot {
  background: var(--ok-panel-alt);
}
:root[data-theme="dark"] .ok-cal__cell.is-holiday,
:root[data-theme="dark"] .ok-cal-res__day.is-holiday {
  background: #38201F !important;
}

/* ---- Yerel açılır liste oku (ortakik.css:2708-2715) -----------------------
   Ok işareti bir data-URI SVG ve rengi (#4A5A6E) içine GÖMÜLÜ — `var()`
   alamaz, bu yüzden tüm URI yeniden yazılıyor. Yalnız `stroke` değeri
   değişti; yol verisi ve ölçüler birebir aynı.

   🔴 [2026-09-03 — kullanıcı bildirdi: "ok en sağda 1 tane olacağına bir sürü
      çıkıyor"] Önce YALNIZ `background-image` yazılmıştı. Karanlıkta ok arka
      planda YATAY OLARAK TEKRARLIYOR ve metnin üstüne biniyordu (ekran
      görüntüsü: /emp/empdetail — İşyeri Adı, Cinsiyet, Kan Grubu).

      Bu ekranlardaki denetim İKİ SINIF taşıyor: `class="ok-native-select
      form-select"` (EmpDetail.cshtml:385 ve 710 benzeri yerde). Bootstrap'in
      `.form-select` kuralı da aynı dört background özelliğini yazıyor ve
      `background-image`i İKİ KATMAN veriyor
      (`var(--bs-form-select-bg-img), var(--bs-form-select-bg-icon, none)`).
      Tek bir `background-image` bildirimiyle katman sayısını 1'e düşürmek,
      diğer üç özelliğin hangi kuraldan geldiğine bağlı bir yarış bırakıyor.

      Çözüm: dördünü de BİRLİKTE yaz. Değerler `ortakik.css`in kendi
      değerleriyle birebir aynı — yani bu, davranış değiştiren bir düzeltme
      değil, kaybolan bildirimlerin yerine konması.
      ⚠️ `background-position` verildiği için `[dir="rtl"]` karşılığı da
         yazılmak zorunda (ortakik.css:2718 aynı gerekçeyle var). */
:root[data-theme="dark"] .ok-native-select:not([multiple]) {
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23B4C0CD' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9.5l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 8px center;
  background-size: 16px 16px;
}

:root[data-theme="dark"][dir="rtl"] .ok-native-select:not([multiple]),
:root[data-theme="dark"] [dir="rtl"] .ok-native-select:not([multiple]) {
  background-position: left 8px center;
}

/* ---- Kapalı alanlar (ortakik.css:2794-2808, :3683, :533) ------------------
   Açık temada kapalı/açık METİN farkı 2,33× — koyu temada 1,50×'e düşüyordu:
   `--ok-text-2` koyu zeminde hâlâ parlak, kapalı alan sönükleşmiyordu. Üstüne
   görüntüleme modunda `OK.aut.readonly()` (ortakik.js:946) HER alanı kapatır,
   yani gözün karşılaştıracağı açık alan kalmaz.

   [2026-09-16] Bir tur ÇAPRAZ DOKU denendi, kullanıcı beğenmedi ve kaldırıldı.
   Yürürlükteki çözüm: düz çökük zemin (#18212C) + SOL KENAR ŞERİDİ.
   Şerit ARTIK TÜM kapalı denetimlerde: metin alanı, textarea, açılır liste, özel
   combobox ve onay kutusu. Tek istisna radyo düğmesi (daire — aşağıda).
   Şerit yüzeye yayılmadığı için desen gibi gürültü yapmaz; dokuz alan birden
   kapalıyken göz yalnız sol kenarda hizalanmış bir dizi görür, alanların içi
   temiz kalır. Renk NÖTR GRİ (#57646F, panelden 2,17× · zeminden 2,67×):
   marka mavisi denendi ama o "seçili / etkin" demek, kapalı alanda ters sinyal.

   ⚠️ `border-left` DEĞİL `border-inline-start` — RTL'de şerit kendiliğinden
   sağa geçsin diye. Açılır listede okun RTL konumu zaten sola alınıyor, yani
   ikisi çakışmıyor.
   ⚠️ Dolgu 5px'ten 3px'e iniyor ki METİN HİZASI BOZULMASIN: açık alanda metin
   1px kenarlık + 5px dolgu = 6px içeride başlıyor; kapalıda 3px şerit + 3px
   dolgu = yine 6px. Dolgu 5px bırakılsaydı kapalı alanların metni komşu açık
   alanlardan 3px kayardı.

   Asıl düzeltme yine de metindeydi: kapalı/açık metin farkı 1,50×'ten 2,43×'e
   çıktı, açık temanın 2,33×'ini de geçiyor.
   Onay kutuları AYRI blokta (aşağıda): 17px'lik kutuda 3px şerit kutunun altıda
   birini yer, oraya UYGULANMIYOR — düz çökük zeminde kalıyorlar. */
:root[data-theme="dark"] .ok-input[readonly],
:root[data-theme="dark"] .ok-textarea[readonly],
:root[data-theme="dark"] .ok-input:disabled:not(select),
:root[data-theme="dark"] .ok-textarea:disabled,
:root[data-theme="dark"] .form-control:disabled {
  background: #18212C;
  color: var(--ok-text-3);
  border-color: #2E3F55;
  border-inline-start: 3px solid #57646F;
  padding-inline-start: 3px;
}

:root[data-theme="dark"] .ok-input-icon > .ok-input:is([readonly], :disabled) {
  padding-inline-start: 31px;
}

/* Açılır listeler de ŞERİT ALIYOR (kullanıcı kararı, 2026-09-16 — bir tur şeritsiz
   denendi, sonra tüm denetimlerde aynı olsun diye geri alındı). Sağdaki ok ile
   çakışmıyor: ok `right 8px`, şerit `inline-start`. RTL'de de çakışmaz — orada ok
   `left 8px`e, şerit ise sağa geçer.
   Üç ayrı işaretleme sınıfı da kapsanmak zorunda:
     · `.ok-select__control`  — özel combobox bileşeni (button)
     · `select.ok-input`      — ağaçtaki 118 YANLIŞ işaretleme; `.ok-input`
       taşıdığı için yukarıdaki kurala düşerdi, `:not(select)` onu dışarıda
       bırakıyor ve buraya alınıyor (ortakik.css'te de aynı sebeple
       `select.ok-input:not([multiple])` ok kuralı var)
     · `.ok-native-select` / `.form-select` — aşağıdaki ok bloğunda */
:root[data-theme="dark"] .ok-select__control:disabled,
:root[data-theme="dark"] select.ok-input:disabled {
  background: #18212C;
  color: var(--ok-text-3);
  border-color: #2E3F55;
  border-inline-start: 3px solid #57646F;
  padding-inline-start: 3px;
}

/* ⚠️ Açılır listede `background` KISAYOLU KULLANILAMAZ: ok işareti yukarıdaki
   blokta bir `background-image` KATMANIDIR, kısayol onu siler. Aynı tuzak
   2026-09-03'te "ok en sağda 1 tane olacağına bir sürü çıkıyor" olarak
   bildirilmişti. Zemin bu yüzden `background-color` ile veriliyor ve dört
   background özelliği BİRLİKTE yazılıyor; okun rengi de kapalı metnin tonuna
   (#8D9CAB) iniyor. `background-position` verildiği için RTL karşılığı
   zorunlu — ve orada da iki katman yazılmalı. */
:root[data-theme="dark"] .ok-native-select:disabled,
:root[data-theme="dark"] .form-select:disabled {
  background-color: #18212C;
  color: var(--ok-text-3);
  border-color: #2E3F55;
  border-inline-start: 3px solid #57646F;
  padding-inline-start: 3px;
}

  /* Ok katmanı YALNIZ tek satırlı listelere. `[multiple]` bir liste kutusudur:
     `size="6"` bir kutunun üstüne asılı ok basmak anlamsız, üstelik ilk satırın
     metnini örter. Aynı koruma `ortakik.css:2862` ve koyu temadaki etkin ok
     kuralında da var. */
  :root[data-theme="dark"] .ok-native-select:disabled:not([multiple]),
  :root[data-theme="dark"] .form-select:disabled:not([multiple]) {
    background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238D9CAB' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9.5l6 6 6-6'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 8px center;
    background-size: 16px 16px;
  }

:root[data-theme="dark"][dir="rtl"] .ok-native-select:disabled:not([multiple]),
:root[data-theme="dark"] [dir="rtl"] .ok-native-select:disabled:not([multiple]),
:root[data-theme="dark"][dir="rtl"] .form-select:disabled:not([multiple]),
:root[data-theme="dark"] [dir="rtl"] .form-select:disabled:not([multiple]) {
  background-position: left 8px center;
}

/* ---- Kapalı onay kutuları (ortakik.css:3068-3082) ------------------------
   Metin alanlarıyla aynı düz çökük zemin (#18212C). Buraya da bir tur çapraz
   doku konmuştu (2/5px), kullanıcı beğenmedi ve kaldırıldı.

   İşaretli hâl kapsamda KALIYOR. Bugün `--ok-brand-500` yazılıydı; o 600'ün
   HOVER jetonu ve ondan AÇIK, yani devre dışı kutu etkin kutudan 1,37× parlak
   çıkıyordu — kuralın kendi notu "daha koyu göster" derken tersi oluyordu.
   Düz #24548E brand-600'den koyu (lum 0,0867 ↔ 0,1995); beyaz tik 3,25:1'den
   7,68:1'e çıkıyor.

   ⚠️ Etiket `opacity` ile DEĞİL `color` ile söndürülüyor. Ölçüm: gruba
   `opacity:.6` verildiğinde tik 4,26 / 3,33:1'e (AA altı) düşüyor ve işaretsiz
   kutunun zemini panelden 1,01:1 ile kayboluyordu. `color` compositing yapmaz:
   kutu tam güçte kalır, etiket
   metin alanlarıyla AYNI jetona (`--ok-text-3`, panelde 4,69:1) iner.
   Bu yüzden `.ok-check.is-disabled`'in `opacity:.6`'sı burada geri alınıyor;
   o sınıf ağaçta yalnız 4 yerde elle yazılı ve orada da aynı çöküşü yapardı.

   `.ok-switch > input:disabled` KAPSAM DIŞI: onun `opacity:.55`'i K-70'te
   ayrıca ölçülüp bırakılmış bir karar. */
:root[data-theme="dark"] .ok-check > input:disabled {
  background: #18212C;
  border-color: #2E3F55;
}

:root[data-theme="dark"] .ok-check > input:disabled:checked,
:root[data-theme="dark"] .ok-check > input:disabled:indeterminate {
  background: #24548E;
  border-color: #2C5F9C;
}

/* Kapalı onay kutusuna SOL KENAR ŞERİDİ (kullanıcı kararı, 2026-09-16) — metin
   alanlarındaki şeridin karşılığı. Şerit kutunun KENDİ KENARINA biniyor, ayrı
   bir öğe eklenmiyor: kutu `border-box` olduğu için dış ölçü 17px'te kalıyor ve
   HİÇBİR ŞEY KAYMIYOR (satıra şerit koymak bütün onay kutularını 8px sağa
   iterdi, o yüzden seçilmedi).

   İki ton kullanılıyor, çünkü tek ton iki durumda birden okunmuyor:
     işaretsiz zemin #18212C -> #57646F 2,67:1  (alanlardakiyle AYNI ton)
     işaretli dolgu  #24548E -> #57646F 1,26:1  ← görünmüyor, bu yüzden #7A8894
                                        (2,11:1, algılanan kontrast eşitlenir)
   Kurallar bilerek SONRA geliyor: üstteki işaretli kural `border-color` ile dört
   kenarı birden boyuyor ve eşit özgüllükte, sonra gelmeseydi şeridi ezerdi.

   ⚠️ `[type="checkbox"]` ile sınırlı — RADYO DÜĞMELERİ HARİÇ. Radyo aynı
   elemanı kullanıyor ama `border-radius: 50%` taşıyor; 17px'lik bir dairenin
   tek kenarını 3px yapmak daireyi yumurtalaştırır. Radyolar düz çökük zeminde
   kalıyor (ağaçta 5 dosyada kullanılıyorlar).

   Tik `inset: 0` ile dolgu kutusuna göre ortalandığı için 0,75px kayıyor
   (17 − 3 − 1,5 = 12,5px alanın merkezi 9,25px, gerçek merkez 8,50px) — ölçüldü,
   gözle ayırt edilmiyor. */
:root[data-theme="dark"] .ok-check > input[type="checkbox"]:disabled {
  border-inline-start: 3px solid #57646F;
}

  :root[data-theme="dark"] .ok-check > input[type="checkbox"]:disabled:checked,
  :root[data-theme="dark"] .ok-check > input[type="checkbox"]:disabled:indeterminate {
    border-inline-start-color: #7A8894;
  }

/* Tik BEYAZ kalır. `ortakik.css`te kapalı+işaretli tik koyulaştırıldı, çünkü açık
   temada dolgu `--ok-brand-500` (#3B8AE8) ve beyaz tik orada 3,51:1 veriyordu.
   Koyu temada dolgu #24548E: koyu tik 2,28:1 (okunmaz), beyaz tik 7,68:1. */
:root[data-theme="dark"] .ok-check > input[type="checkbox"]:disabled:checked::after {
  background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4.5 12.5l5 5 10-11'/%3E%3C/svg%3E");
}

:root[data-theme="dark"] .ok-check > input[type="radio"]:disabled:checked::after {
  background: #fff;
}

:root[data-theme="dark"] .ok-check:has(> input:disabled),
:root[data-theme="dark"] .ok-check.is-disabled {
  color: var(--ok-text-3);
  opacity: 1;
}

/* ---- Gölgeli kutu (ortakik.css:4627-4631) ---------------------------------
   Neredeyse beyaz kenarlık + `gray` anahtar sözcüklü gölge. Kenarlık koyu
   zeminde parlak bir çerçeve, gölge ise görünmez kalıyordu. */
:root[data-theme="dark"] .ok-withshadow {
  border-color: var(--ok-border-strong);
  box-shadow: 0 1px 2px rgba(255, 255, 255, .072), 0 4px 9px -4px rgba(255, 255, 255, .168);
}

/* ==========================================================================
   EKRANA GÖMÜLÜ SABİT RENKLER

   Aşağıdakiler bu dosyaya değil, EKRANLARIN KENDİ `<style>` bloklarına ait
   kurallardır. Ekran dosyalarına dokunmadan buradan eziliyorlar; gerekçe:

     · Açık tema bir karakter bile değişmiyor — düzeltme `[data-theme="dark"]`
       kapısının arkasında ve kaynak ekran dosyası olduğu gibi duruyor.
     · Tek dosyada toplanınca geri almak da tek dosyayı silmek oluyor.
     · Kullanıcı aynı ağaçta Visual Studio'da çalışıyor; 34 ekran dosyasına
       aynı anda dokunmak onun açık dosyalarıyla çakışırdı.

   Özgüllük: sayfa içi `<style>` bloğu belge sırasında bu dosyadan SONRA gelir,
   ama buradaki seçiciler `:root[data-theme="dark"]` önekiyle daha özgül olduğu
   için yine de kazanır. `!important` taşıyan kaynak kurallarda burada da
   `!important` var — başka türlü ezilmiyorlar.

   ⚠️ PDF ÇIKTISI ETKİLENMEZ: yazdırma kabuğu hiçbir dış CSS yüklemiyor
      (ortakik-pdf-uretimi), yani bu dosya oraya hiç ulaşmıyor. Bordro zarfı
      gibi hem ekran hem PDF kaynağı olan parçalar bu yüzden güvenli.

   ⚠️ Taramada bulunan 34 ekranın HEPSİ burada DEĞİL. En görünür olanlar
      alındı; kalanlar (gömülü legacy stil sayfaları `SettingsTableCopy` ve
      `CorporateOrganizationTree`, bordro zarfının siyah çizgileri, performans
      formu aileleri, takvim boş hücreleri) ayrı bir iş kalemi olarak raporlandı.
   ========================================================================== */

/* Yönetim ana sayfası — AdminPagesIndex.cshtml:56-58.
   Kart zemini token okuyor (`--ok-panel`, koyulaşır) ama başlık yazısı sabit
   lacivert (#3E4E63) kalıyordu: koyu kart üstünde koyu yazı. */
:root[data-theme="dark"] .ok-home-widgets .ok-card__title {
  color: var(--ok-text);
}

/* 360 derece performans ve anket tabloları — PortalPagesPerformance   PerformanceDetails360.cshtml:87-100 · PerformanceDetails360Self.cshtml:86-99 ·
   PortalPagesSurveySurvey.cshtml:88-91.
   `color: black !important` ile grid'in kendi metin rengini eziyorlar; koyu
   zeminde metin görünmez oluyordu. Kaynak `!important` taşıdığı için burada
   da gerekiyor. */
:root[data-theme="dark"] .ok-grid-scroll .BgtHeader,
:root[data-theme="dark"] .ok-grid-scroll .BgtHeaderLeft,
:root[data-theme="dark"] .ok-grid-scroll .BgtTD,
:root[data-theme="dark"] .srv-body .table thead tr th {
  color: var(--ok-text) !important;
}

/* İş akışı satır durumları — PortalPagesWorkflowMyWorkflows.cshtml:73-75 ve
   Workflows.cshtml:87-89. Anahtar sözcük renkleri (`red`/`green`/`blue`);
   `blue` (#0000FF) koyu zeminde en düşük kontrastlı olanı. Durum token'larına
   bağlandı — kırmızı/yeşil/mavi ayrımı korunuyor, yalnız koyu tarafa taşındı. */
:root[data-theme="dark"] .ok-wf-red > td,
:root[data-theme="dark"] .ok-wf-red > td a { color: var(--ok-state-rejected); }

:root[data-theme="dark"] .ok-wf-green > td,
:root[data-theme="dark"] .ok-wf-green > td a { color: var(--ok-state-approved); }

:root[data-theme="dark"] .ok-wf-blue > td,
:root[data-theme="dark"] .ok-wf-blue > td a { color: var(--ok-info); }

/* Kart kitaplığı — token katmanının ulaşamadığı iki nokta. `.ok-doccard`
   hover kenarlığı `--ok-brand-300` idi: koyu zeminde 1,88:1 (yukarıdaki
   ölçüm), yani geri bildirim görünmüyordu. Basılı `--toggle` durumu ise hiç
   çıkmıyordu: `.ok-btn--secondary`nin karanlık kuralı (0,3,0) açık temadaki
   `.ok-btn--toggle[aria-pressed]`den (0,2,0) daha özgül. */
:root[data-theme="dark"] .ok-doccard:hover,
:root[data-theme="dark"] .ok-doccard:focus-within {
  border-color: var(--ok-brand-500);
}

:root[data-theme="dark"] .ok-btn--toggle[aria-pressed="true"] {
  background: var(--ok-brand-100);
  border-color: var(--ok-brand-500);
  color: var(--ok-brand-800);
}

  :root[data-theme="dark"] .ok-btn--toggle[aria-pressed="true"] .ok-btn__count {
    color: var(--ok-brand-700);
  }

:root[data-theme="dark"] .tcal__empty,
:root[data-theme="dark"] .plcal__empty {
  background-color: var(--ok-surface);
  color: var(--ok-text);
}

:root[data-theme="dark"] .ok-rapor-kart {
  background: var(--ok-panel);
  border-color: var(--ok-border);
}

:root[data-theme="dark"] .ok-rapor-kart > .card-body {
  background: var(--ok-panel);
  color: var(--ok-text);
}

:root[data-theme="dark"] .ok-rapor-tbl {
  background: var(--ok-panel);
  color: var(--ok-text);
}

:root[data-theme="dark"] .ok-rapor-tbl th,
:root[data-theme="dark"] .ok-rapor-tbl td {
  border-color: var(--ok-border-hard);
  color: var(--ok-text);
  background: var(--ok-panel);
}

:root[data-theme="dark"] .ok-rapor-tbl th {
  background: var(--ok-surface);
}

:root[data-theme="dark"] .ok-rapor-tbl tr:nth-child(odd) > td {
  background: var(--ok-surface-alt);
}
