/*
 * arbitraj - canli arayuz stili.  TASARIM DILI: shadcn/ui (neutral).
 *
 * SIFIR BAGIMLILIK (L1): CDN yok, Tailwind yok, React yok, derleme adimi yok,
 * DIS YAZI TIPI INDIRILMEZ. shadcn'den alinan sey RENK TOKEN'LARI ve OLCULER;
 * tasiyici hala duz CSS.
 *
 * TOKEN KAYNAGI — KANONIK, UYDURULMADI:
 *   /shadcn-ui/ui  ·  apps/v4/content/docs/(root)/theming.mdx  (varsayilan neutral)
 * Asagidaki `:root` ve `.dark` bloklari o kaynaktan BIREBIR kopyalanmistir.
 * OKLCH kullanilir; hedef tarayici Chrome, destekli.
 *
 * OLCULMUS BILESEN OLCULERI — /shadcn-ui/ui registry/new-york-v4/ui/*:
 *   table   w-full text-sm · kapsayici relative w-full overflow-x-auto
 *   th      h-10 px-2 text-left align-middle font-medium
 *   td      p-2 align-middle
 *   tr      border-b transition-colors hover:bg-muted/50 · son satir border-0
 *   card    rounded-xl border bg-card text-card-foreground shadow-sm · py-6 px-6
 *   badge   inline-flex w-fit shrink-0 items-center justify-center gap-1
 *           overflow-hidden rounded-full border border-transparent px-2 py-0.5
 *           text-xs font-medium whitespace-nowrap            (badge.tsx)
 *   input   h-9 w-full min-w-0 rounded-md border border-input bg-transparent
 *           px-3 py-1 shadow-xs outline-none
 *           placeholder:text-muted-foreground dark:bg-input/30   (input.tsx)
 *   button  h-9 px-4 py-2 · size=sm: h-8 px-3 rounded-md gap-1.5 (button.tsx)
 *   odak    focus-visible -> border-ring + ring-[3px] ring-ring/50
 *
 * ⚠ TURETILDI, OLCULMEDI (acikca isaretlidir): `button`un VARYANT govde dizgisi
 * (outline/secondary renkleri) context7'den cekilemedi. Input ve Badge'in
 * OLCULEN ortak desenlerinden turetildi: ayni kenarlik (--input), ayni yaricap
 * (--radius-md), ayni golge (shadow-xs), ayni odak halkasi. Boyutlar (h-8/h-9,
 * px-3/px-4, gap-1.5) OLCULDU.
 * ⚠ TURETILDI: `shadow-xs` / `shadow-sm` sayisal degerleri Tailwind v4
 * varsayilanlaridir; shadcn kaynagindan ayrica olculmedi.
 *
 * 🔴 TIPOGRAFI SAPMASI, BILEREK: shadcn govde yazisini SANS ister. Bu bir SAYI
 * PANOSUDUR ve sutun hizasi okunabilirligin kendisidir; ondalik noktalar alt
 * alta gelmezse 0.00967 ile 368.25 ayni sutunda okunamaz. O yuzden SAYILAR
 * monospace + `font-variant-numeric: tabular-nums` KALIR; metin, baslik ve
 * etiketler sans olur. Sapma burada, gerekcesiyle.
 *
 * RENK SOZLESMESI (L2) - burasi ilkeyi TASIYAN yer:
 *   yesil = YALNIZ .d-ok  (EvidenceRow.status === 'EXECUTABLE')
 *   Yuksek spread yesil BOYANMAZ. "en ucuz / en pahali" vurgulari NOTRdur
 *   (--chart-1 / --chart-4: mavi-mor); isaretli olmak uygulanabilir olmak
 *   DEGILDIR. --chart-2 (yesil/zumrut) YALNIZ --ok icin kullanilir.
 *
 * TAZELIK (L3): `data-yas` niteligi taze|gec|bayat|izlenmiyor alir ve opaklik
 * dusurur. Baglanti kopukken tum govde solar (L7).
 *
 * KIMLIK (W-E madde 1): `tr[data-kimlik="ayrisik"]` - satirdaki en yuksek
 * kotasyon en dusugun EN AZ 2 KATI (BigInt capraz carpim, float yok). O
 * satirda "en ucuz/en pahali" DOLGUSU kalkar, cunku dolgu "bu iki fiyat
 * karsilastirilabilir" imasinin ta kendisiydi. Fiyatlar okunabilir KALIR.
 */

/* ===========================================================================
 * shadcn TOKEN'LARI — KANONIK, DEGISTIRILMEDI (varsayilan neutral tema)
 * ======================================================================== */
:root {
  --radius: 0.625rem;
  --background: oklch(1 0 0);
  --foreground: oklch(0.145 0 0);
  --card: oklch(1 0 0);
  --card-foreground: oklch(0.145 0 0);
  --popover: oklch(1 0 0);
  --popover-foreground: oklch(0.145 0 0);
  --primary: oklch(0.205 0 0);
  --primary-foreground: oklch(0.985 0 0);
  --secondary: oklch(0.97 0 0);
  --secondary-foreground: oklch(0.205 0 0);
  --muted: oklch(0.97 0 0);
  --muted-foreground: oklch(0.556 0 0);
  --accent: oklch(0.97 0 0);
  --accent-foreground: oklch(0.205 0 0);
  --destructive: oklch(0.577 0.245 27.325);
  --border: oklch(0.922 0 0);
  --input: oklch(0.922 0 0);
  --ring: oklch(0.708 0 0);
  --chart-1: oklch(0.646 0.222 41.116);
  --chart-2: oklch(0.6 0.118 184.704);
  --chart-3: oklch(0.398 0.07 227.392);
  --chart-4: oklch(0.828 0.189 84.429);
  --chart-5: oklch(0.769 0.188 70.08);
}

.dark {
  --background: oklch(0.145 0 0);
  --foreground: oklch(0.985 0 0);
  --card: oklch(0.205 0 0);
  --card-foreground: oklch(0.985 0 0);
  --popover: oklch(0.205 0 0);
  --popover-foreground: oklch(0.985 0 0);
  --primary: oklch(0.922 0 0);
  --primary-foreground: oklch(0.205 0 0);
  --secondary: oklch(0.269 0 0);
  --secondary-foreground: oklch(0.985 0 0);
  --muted: oklch(0.269 0 0);
  --muted-foreground: oklch(0.708 0 0);
  --accent: oklch(0.269 0 0);
  --accent-foreground: oklch(0.985 0 0);
  --destructive: oklch(0.704 0.191 22.216);
  --border: oklch(1 0 0 / 10%);
  --input: oklch(1 0 0 / 15%);
  --ring: oklch(0.556 0 0);
  --chart-1: oklch(0.488 0.243 264.376);
  --chart-2: oklch(0.696 0.17 162.48);
  --chart-3: oklch(0.769 0.188 70.08);
  --chart-4: oklch(0.627 0.265 303.9);
  --chart-5: oklch(0.645 0.246 16.439);
}

:root {
  --radius-sm: calc(var(--radius) * 0.6);
  --radius-md: calc(var(--radius) * 0.8);
  --radius-lg: var(--radius);
  --radius-xl: calc(var(--radius) * 1.4);

  /* TURETILDI (Tailwind v4 varsayilanlari) */
  --golge-xs: 0 1px 2px 0 rgb(0 0 0 / 0.05);
  --golge-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);

  /* YAZI TIPI YIGINLARI — hepsi SISTEM, hicbiri indirilmiyor (L1). */
  --yazi-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
    "Helvetica Neue", Arial, sans-serif;
  --yazi-mono: ui-monospace, SFMono-Regular, Menlo, Consolas,
    "Liberation Mono", monospace;
}

/* ---------------------------------------------------------------------------
 * ANLAM RENKLERI — hepsi shadcn token'larindan TURETILIR, elle renk YOK.
 * ------------------------------------------------------------------------ */
:root {
  --ok: var(--chart-2); /* YALNIZ EXECUTABLE. chart-2 baska hicbir yerde. */
  --riskli: var(--chart-1); /* acik temada turuncu */
  --hayir: var(--destructive);
  --yok: var(--muted-foreground);

  --poz: var(--chart-3); /* acik temada koyu mavi - YESIL DEGIL */
  --neg: var(--destructive);

  --vurgu-ucuz: color-mix(in oklch, var(--chart-3) 12%, transparent);
  --vurgu-pahali: color-mix(in oklch, var(--chart-1) 14%, transparent);
  --flash: color-mix(in oklch, var(--ring) 32%, transparent);
}

.dark {
  --ok: var(--chart-2); /* zumrut */
  --riskli: var(--chart-3); /* koyu temada turuncu */
  --hayir: var(--destructive);
  --yok: var(--muted-foreground);

  --poz: var(--chart-4); /* mor - YESIL DEGIL */
  --neg: var(--destructive);

  --vurgu-ucuz: color-mix(in oklch, var(--chart-1) 26%, transparent);
  --vurgu-pahali: color-mix(in oklch, var(--chart-4) 22%, transparent);
  --flash: color-mix(in oklch, var(--ring) 45%, transparent);
}

/* ---------------------------------------------------------------------------
 * `hidden` OZNITELIGI HER ZAMAN KAZANIR.
 *
 * 🔴 OLCULDU (bu turda, canli sayfada): `hidden` tasiyan 4 ogeden 1'i EKRANDA
 * DURUYORDU — `button#rotalar-daha`, 32 px yuksekliginde, uzerinde
 * "hepsini goster (0 satir daha)" yazili. Kusur JS'te DEGILDI: `hiddenAttr`
 * ve `hiddenProp` ikisi de `true`ydu. Sebep CSS kaskadi — tarayicinin kendi
 * `[hidden] { display: none }` kurali bir UA kuralidir ve YAZAR kurallari
 * ozgullukten BAGIMSIZ olarak onu ezer; bu sayfada `button { display:
 * inline-flex }` tam olarak bunu yapiyordu.
 *
 * Bu, deponun "hicbisey olmuyor" sikayetinin ayni sinifindan bir kusurdur:
 * ekranda duran ama HICBIR ISI OLMAYAN bir kontrol. `display` atayan her yeni
 * kural ayni tuzagi yeniden kurabilir, o yuzden kural TEK ve GENEL.
 *
 * `!important` burada bilincli: `hidden` bir GORUNURLUK IDDIASI degil, bir
 * VARLIK IDDIASIDIR — hicbir gorsel kuralin onu tartismaya hakki yok.
 * -------------------------------------------------------------------------*/
[hidden] {
  display: none !important;
}

* {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  padding: 0;
  background: var(--background);
  color: var(--foreground);
  max-width: 100%;
}

body {
  font-family: var(--yazi-sans);
  font-size: 14px; /* shadcn text-sm */
  line-height: 1.5;
  padding: 0 0 4rem;
  overflow-x: hidden; /* govde yatay KAYMAZ; genis tablolar kendi icinde kayar */
  -webkit-font-smoothing: antialiased;
}

/* SAYILAR MONOSPACE — bilerek yapilan tipografi sapmasi (bkz. dosya basi). */
.h-sayi,
.h-yas,
.h-veri,
.ex-fiyat,
.mini,
.b-rozet,
.blok-fiyat,
.blok-alis,
.yon-sayilar,
.rota-tepe,
.rota-boyut,
.r-fiyat,
.rota-net,
#t-detay td.h-sayi {
  font-family: var(--yazi-mono);
  font-variant-numeric: tabular-nums;
}

/* ---- ust ---- */
#ust {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  align-items: baseline;
  justify-content: space-between;
  padding: 0.6rem 1rem;
  border-bottom: 1px solid var(--border);
  background: color-mix(in oklch, var(--card) 88%, transparent);
  backdrop-filter: blur(6px);
  position: sticky;
  top: 0;
  z-index: 20;
}

#ust h1 {
  margin: 0;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.08em;
}

#ust-durum {
  color: var(--muted-foreground);
  font-weight: 500;
}

/*
 * 🔴 KUSUR 3 — DEKORATIF YESIL NOTRLESTIRILDI (ana beynin karari).
 * Gerekce OLCULDU: bu projede EXECUTABLE sayisi her turda 0. Yani ekrandaki
 * yesil piksellerin %100'u "soket bagli" demekti, "para kazanabilirsin"
 * demek degil - ve goz atan biri yesili "iyi" diye okur. Baglanti canliligi
 * artik NOTR: "baglaniyor"dan ayirt edilebilsin diye PARLAK ama renksiz.
 * Yesil, ortaya ciktigi gun tek bir sey demesi icin saklaniyor.
 * Bu karar `tests/guards/yesil-yalniz-executable.test.ts` ile MEKANIK olarak
 * kilitlidir; sessizce geri alinamaz.
 */
body[data-baglanti="bagli"] #ust-durum {
  color: var(--foreground);
}

body[data-baglanti="kopuk"] #ust-durum {
  color: var(--hayir);
}

#ust-sayac {
  color: var(--muted-foreground);
  font-family: var(--yazi-mono);
  font-variant-numeric: tabular-nums;
  font-size: 12px;
}

.nokta {
  color: var(--muted-foreground);
  opacity: 0.55;
  margin: 0 0.4em;
}

/* ---- seritler + ilke + tavan: shadcn ALERT gorunumu, SIKISIK ----
 * Bilgi AZALTILMADI; yalnizca ikincil oldugu gorunur hale getirildi. */
#seritler {
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}

#seritler:empty {
  display: none;
}

.serit {
  margin: 0.5rem 0.6rem 0;
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  color: var(--muted-foreground);
  font-size: 12px;
  line-height: 1.5;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

/* ---------------------------------------------------------------------------
 * KUSUR 4 — KATLANABILIR NOTLAR.
 * Olculdu: ilk matris satiri y=688 px (pencerenin %68'i). Bu iki not eskiden
 * tam genislikte iki ayri blok halinde ~190 px kapliyordu. Artik YAN YANA iki
 * sutun ve KATLI. Hicbir olgu silinmedi; `summary` her notun durustluk
 * iddiasini HER ZAMAN ekranda tutuyor.
 * ------------------------------------------------------------------------ */
#notlar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin: 0.5rem 0.6rem 0;
}

.not {
  flex: 1 1 24rem;
  min-width: 0;
  padding: 0.35rem 0.7rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  font-size: 12px;
  line-height: 1.5;
}

.not > summary {
  cursor: pointer;
  list-style: none;
  color: var(--foreground);
  font-weight: 500;
  border-radius: var(--radius-sm);
}

.not > summary::-webkit-details-marker {
  display: none;
}

/* Katli/acik gostergesi — ikon yok, karakter yok bagimlilik yok. */
.not > summary::before {
  content: "+ ";
  color: var(--muted-foreground);
  font-family: var(--yazi-mono);
}

.not[open] > summary::before {
  content: "- ";
}

.not > summary:focus-visible {
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--ring) 50%, transparent);
  outline: none;
}

#ilke,
#tavan {
  margin: 0.4rem 0 0.15rem;
  padding: 0;
  color: var(--muted-foreground);
  font-size: 12px;
  line-height: 1.5;
  overflow-wrap: anywhere;
}

#ilke strong,
#tavan strong,
.not > summary strong,
/* ANA TABLONUN baslik satiri: `<summary>`nin yerini aldi, o yuzden onun
   TIPOGRAFISINI de devralir (ayri bir kural yazmak ikisini ayristirirdi). */
.ana-tablo > .defter-baslik strong {
  color: var(--foreground);
  font-weight: 600;
}

/* ---- DEX turu ilerlemesi ----
 *
 * 🔴 NEDEN VAR: DEX turu 6-22 dakika surer ve o sure boyunca panel yalniz
 * "tur henuz kosmadi" yazardi — CALISIYOR ile TAKILDI ekranda ayni gorunurdu.
 * Cubuk panelin ICINDE, kisa yuzde ise BASLIKTA (`.d-kosuyor`): panel
 * varsayilan KAPALI oldugu icin yalniz icerideki gosterge YETMEZ.
 *
 * Renk `--riskli` ailesinden: bu bir BASARI degil, SUREN bir is. Yesil
 * kullanmak biten bir sey gibi okunurdu.
 */
.d-ilerleme {
  display: block;
  width: 100%;
  height: 0.5rem;
  margin: 0.35rem 0 0.15rem;
  border: 1px solid color-mix(in oklch, var(--riskli) 45%, transparent);
  border-radius: 999px;
  background: color-mix(in oklch, var(--riskli) 10%, var(--card));
  /* Tarayicilar `<progress>`i kendi temasiyla cizer; ikisini de ayarliyoruz. */
  appearance: none;
  -webkit-appearance: none;
  overflow: hidden;
}

.d-ilerleme::-webkit-progress-bar {
  background: transparent;
}

.d-ilerleme::-webkit-progress-value {
  background: var(--riskli);
  border-radius: 999px;
}

.d-ilerleme::-moz-progress-bar {
  background: var(--riskli);
  border-radius: 999px;
}

.d-kosuyor {
  color: var(--riskli);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------------------------------
 * YUKLEME SERIDI + BELIRSIZ CUBUKLAR
 *
 * 🔴 BU IKI CUBUK `appearance: none` ALMAZ — ve bu bilincli. DEX cubugu
 * (`.d-ilerleme`) DOLAN bir cubuktur, `value` tasir, o yuzden tamamen bize ait
 * bir gorunume boyanabilir. Bu ikisi BELIRSIZ (`value` YOK): belirsiz hali
 * cizen sey tarayicinin KENDI animasyonudur ve `appearance: none` onu SUSTURUR
 * — geriye bos, olu bir kutu kalir. Renk `accent-color` ile veriliyor; bicim
 * tarayicinin.
 * -------------------------------------------------------------------------*/

.serit-yukleme {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  background: color-mix(in oklch, var(--riskli) 10%, var(--card));
  border-color: color-mix(in oklch, var(--riskli) 35%, transparent);
  color: var(--foreground);
}

.y-cubuk {
  flex: 0 0 8rem;
  height: 0.45rem;
  accent-color: var(--riskli);
}

.y-metin {
  font-weight: 600;
}

.k-tur-cubuk {
  width: 5rem;
  height: 0.4rem;
  margin: 0 0.4rem;
  vertical-align: middle;
  accent-color: var(--riskli);
}

.k-tur-kosuyor {
  color: var(--riskli);
  font-variant-numeric: tabular-nums;
}

.k-tur-kosuyor:empty {
  display: none;
}

/* Ilk goruntu gelene kadar tablo SOLUK durur: "hazir degil" gorsel olarak da
   okunur. Gizlemez — icindeki "YUKLENIYOR" satiri okunabilir kalmali. */
body[data-yukleme='evet'] #rotalar-kaydir {
  opacity: 0.55;
}

/* ---------------------------------------------------------------------------
 * BULGU DEFTERI — biriken liste
 *
 * 🔴 TAM GENISLIK: `#notlar` iki sutunlu bir flex kabi (`.not { flex: 1 1 24rem }`)
 * ve 7 sutunlu bir tablo 24 rem'e SIGMAZ. `.not-genis` kardeslerinin yanina
 * degil, KENDI SATIRINA gecer. Kullanicinin istedigi ANA gorunum bu.
 * -------------------------------------------------------------------------*/

.not-genis {
  flex: 1 1 100%;
}

.defter-tablo {
  width: 100%;
  margin-top: 0.4rem;
  font-size: 12px;
}

.defter-tablo th,
.defter-tablo td {
  padding: 0.25rem 0.5rem;
  vertical-align: top;
  text-align: left;
}

/* KAR % sutunu. Sinif adi `d-bp` DEGIL: sutun artik bp gostermiyor. */
.defter-tablo td.d-kar {
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  white-space: nowrap;
}

/*
 * 🔴 NET ile BRUT OKUMADAN AYIRT EDILIR. Net olan VURGULU (ucretler dusulmus,
 * kullanicinin sordugu sayi bu); brut olan SOLUK (henuz bir iddia degil).
 * Renk YESIL DEGIL: bu depoda yesil kullanilmiyor (bkz. `--poz` yorumu).
 */
.defter-tablo td.d-kar-net {
  color: var(--poz);
}

/*
 * KADEME 2 — `transfer sonrasi`: cekme ucreti dusuldu, TAKER KOMISYONU HARIC.
 * 🔴 NET ILE AYNI RENK OLAMAZ: ayni renk "ayni kalitede sayi" demek olurdu ve bu
 * sayi gercek netin UST SINIRIDIR. Ayrilmis yesil (`--ok`) KULLANILMAZ (yesil bu
 * depoda yalniz `EXECUTABLE` icin ve bekcisi var); `--poz` SOLDURULUR.
 */
.defter-tablo td.d-kar-transfer {
  color: color-mix(in oklch, var(--poz) 55%, var(--muted-foreground));
  font-weight: 400;
}

/*
 * DERINLIK — KARIN GECERLILIGI. 🔴 IKI HAL IKI AYRI GORUNUM ve UCUNCUSU SESSIZ:
 *   `YETERSIZ`  -> `--riskli` (olculdu, TASIMIYOR: yuzde gecersiz olabilir)
 *   `OLCULMEDI` -> yalniz SOLUK (defter cekilmedi; "sigmiyor" DEMEK DEGIL)
 *   `YETERLI`   -> HICBIR ek kural (gurultu yapmaz)
 * Ikisini ayni renge boyamak "olcmedim"i "sigmiyor" diye okuturdu.
 */
.defter-tablo td.d-kar-derinlik-yetersiz {
  color: var(--riskli);
}

.defter-tablo td.d-kar-derinlik-olculmedi {
  opacity: 0.75;
}

/* KAR % hesaplanamadi: TIRE. Brut sayi buraya DUSMEZ (ucret dusulmus sanilirdi). */
.defter-tablo td.d-kar-yok {
  color: var(--muted-foreground);
  font-weight: 400;
}

/* SPREAD % — HAM fark. Etiket yok; sutunun kendisi brut demek. */
.defter-tablo td.d-spread {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  color: var(--muted-foreground);
}

/*
 * PARA TRANSFERI — 🔴 DORT HAL DORT AYRI RENK. `BILINMIYOR` ile `KAPALI` ayni
 * renge boyanirsa kullanici "olculmedi"yi "yasak" diye okur; `ESLESMEDI` de
 * ucuncu bir seydir (kapi kaydi hic gelmedi).
 */
.defter-tablo td.d-tr {
  overflow-wrap: anywhere;
}

.defter-tablo td.d-tr-acik {
  color: var(--poz);
}

/*
 * 🔴 DORDUNCU HAL — `RISKLI`: transfer yolu ACIK ama ZINCIRIN KENDISI guvenli
 * degil (olculen olay: Ravencoin agi 2026-08-07'de hacklendi, reorg riski).
 * `ACIK` gibi gorunmemeli — kullanici olumlu okumamali — ama `KAPALI` da degil:
 * yol GERCEKTEN acik, tehlike zincirde. Bu yuzden AYRI renk: `--riskli`
 * (turuncu). 🔴 Ayrilmis yesil (`--ok`) KULLANILMAZ.
 */
.defter-tablo td.d-tr-riskli {
  color: var(--riskli);
  font-weight: 600;
}

/*
 * CIKIS YOLU KAPALI — satis borsasindan cekme kapali (olculdu: `bitget` dort
 * zincirde dep=OPEN / wd=CLOSED). 🔴 BU BIR KAPI DEGIL: `durum` rengi neyse O
 * KALIR, bu kural yalnizca ALT CIZGIYLE dikkat ceker. `KAPALI` kovasiyla ayni
 * renge boyamak, gecerli bir rotayi reddedilmis gibi gosterirdi.
 */
.defter-tablo td.d-tr-cikis-kapali {
  text-decoration: underline wavy color-mix(in oklch, var(--riskli) 70%, transparent);
  text-underline-offset: 3px;
}

/*
 * SELL EXCHANGE FROZEN — the EXCHANGE, not the row, is the problem: measured
 * `open / (open + closed)` at or below 1% (bitget, 2026-09-24 hack: 0 of 4930
 * networks withdrawable while deposits stayed open).
 * 🔴 NOT A GATE EITHER: `durum`'s own colour is kept, this rule only adds a left
 * marker. And `UNKNOWN` deliberately gets NOTHING — 26 of 29 exchanges report no
 * withdrawal state, so marking them would be a claim rather than a measurement.
 */
.defter-tablo td.d-tr-borsa-donmus {
  box-shadow: inset 3px 0 0 0 color-mix(in oklch, var(--destructive) 80%, transparent);
}

.defter-tablo td.d-tr-kapali {
  color: color-mix(in oklch, var(--destructive) 85%, var(--foreground));
}

.defter-tablo td.d-tr-bilinmiyor {
  color: var(--muted-foreground);
}

/* HIC OLCULMEDI: sorulmadi. `BILINMIYOR`DAN (sorduk, cevap yok) AYRI gorunur. */
.defter-tablo td.d-tr-olculmedi {
  color: var(--muted-foreground);
  font-style: italic;
}

/* SON BILINEN (bayat) kapi: satir SON YAYINDA YOK, ozet eski olcumden kalma. */
.defter-tablo td.d-tr-bayat {
  opacity: 0.7;
  font-style: italic;
}

/* NE ZAMAN artik SUTUN DEGIL: COIN hucresinin altinda ikinci satir. */
/* Kalici defterin paydasi — baslik satirinin yaninda, SOLUK ama SILIK DEGIL. */
.ana-tablo .defter-kalici {
  font-weight: 400;
  color: var(--muted-foreground);
}

.defter-tablo .d-zaman {
  margin-top: 0.15rem;
  font-weight: 400;
  font-size: 10px;
  white-space: normal;
  color: var(--muted-foreground);
}

/*
 * BACAK BASINA KOD KONSENSUSU SAPMASI — AL/SAT hucresinin IKINCI satiri.
 * Geometri `.d-zaman`dan GELIR (yeni bir gorsel dil ICAT EDILMEDI); tek fark,
 * olculmemis halin (`.d-sapma-yok`) ITALIK olmasidir — "olculmedi" ile "sapma
 * sifir" ekranda da AYRI gorunmek zorunda.
 * 🔴 RENK BIR HUKUM TASIMAZ: bu sayi bir KAPI DEGIL, o yuzden kirmizi/yesil
 * kullanilmaz ve `--muted-foreground`ta kalir.
 */
.defter-tablo .d-sapma {
  margin-top: 0.15rem;
  font-weight: 400;
  font-size: 10px;
  white-space: normal;
  color: var(--muted-foreground);
}

.defter-tablo .d-sapma-yok {
  font-style: italic;
}

.defter-tablo td.d-kod {
  font-weight: 600;
  white-space: nowrap;
}

/*
 * ANA TABLO · COIN hucresindeki "karalisteye al" dugmesi. Rengi ve davranisi
 * `.sil-btn`den GELIR (yeni bir gorsel dil ICAT EDILMEDI); burada yalnizca
 * koddan AYRILIR ve satir yuksekligini buyutmeyecek kadar KUCULUR.
 */
.defter-tablo td.d-kod .d-kara {
  margin-left: 0.35rem;
  height: 1.25rem;
  padding: 0 0.4rem;
  font-size: 10px;
}

/*
 * TUR: `cex->dex` gibi YONLU bir metin (bkz. `defterYonMetni`). ARTIK AYRI
 * SUTUN DEGIL — COIN hucresinde kucuk bir rozet (7 sutun -> 6; dar ekranda
 * tabloyu yatay kaymaya zorlamamak icin).
 */
.defter-tablo .d-tur {
  margin-left: 0.35rem;
  white-space: nowrap;
  font-weight: 400;
  font-size: 10px;
  color: var(--muted-foreground);
}

/*
 * 🔴 DURUM SUTUNU KALKTI (2026-09-24, "tek tablo"): hukum artik COIN hucresinin
 * `title`inda yasiyor, kendi sutunu yok. Bu yuzden `td.d-durum` ve dort
 * `td.d-h-*` kurali SILINDI — olu selektor birakmak, ekranda karsiligi olmayan
 * bir gorunum sozu vermek olurdu. `defterHukmu` ve testleri DURUYOR.
 */

.defter-tablo td.d-al,
.defter-tablo td.d-sat {
  overflow-wrap: anywhere;
}

/* FIYATI OLMAYAN BACAK — mekan adi duruyor, fiyatin YERINE sebebi yaziyor.
   🔴 ONCE `@ undefined` YAZIYORDU (olculdu, canli sunucu 2026-09-25). Bu kural
   o metni SOLUK yapar ama SILMEZ: eksiklik ADLANDIRILIR, gizlenmez.
   🔴 YESIL YASAK: bu bir iyi haber DEGIL, olculmemis bir bacak. */
.defter-tablo .d-price-missing {
  color: var(--muted-foreground);
  font-size: 11px;
  font-style: italic;
  cursor: help;
}

/* 🔴 SOLUK ama SILIK DEGIL: satir ARTIK GORUNMUYOR demektir, YOK demek degil.
   Tamamen gizlemek defterin tek isini (gecmisi tutmak) yok ederdi. */
.defter-eski {
  opacity: 0.55;
}

.defter-daha {
  margin-top: 0.5rem;
}

/* 🔴 ANA TABLO artik `<details>` DEGIL, duz bir kap: katlama yok, HER ZAMAN
   acik. `<summary>`nin yerini bu baslik satiri aldi ve tiklanabilir DEGIL —
   tiklanabilir gorunmesi katlanabilirlik VAAT EDERDI. */
.ana-tablo > .defter-baslik {
  display: block;
  margin-bottom: 0.25rem;
}

/* KIMLIK ROZETI. Kullanici karari (B): uyari metin ONEKI degil ROZET.
   🔴 TAM aciklama `title`da durur (R1: ekranda kirpilmis, tamami `title`da).
   🔴 `.rozet` govde dizgisini KOPYALAMIYOR: bu rozet tek karakterlik bir
   isarettir ve tablo hucresinde satir yuksekligini bozmamasi gerekir. */
.defter-tablo .d-rozet {
  display: inline-block;
  margin-left: 0.3rem;
  font-size: 11px;
  line-height: 1;
  cursor: help;
}

/* KIMLIK_KANITLANMADI — BELIRSIZLIK. `--riskli` (amber), yesil DEGIL. */
.defter-tablo .d-rozet-kimlik {
  color: var(--riskli);
}

/* KIMLIK_CELISKILI — CELISKI belirsizlikten AGIR. `--destructive`.
   Ayni iki-basamakli ayrim `SPREAD_KIMLIK_ISARETI`/`...CELISKI_ISARETI`
   ikilisinde de var; bu onun gorsel karsiligidir, IKINCI bir kural degil. */
.defter-tablo .d-rozet-celiski {
  color: var(--destructive);
}

/* SEVEN CRITERIA — the "all MEASURED and GREEN" positive mark
   (`allCriteriaGreenBadge`). Geometry comes from `.d-rozet`; only the colour is
   defined here.
   🔴 RESERVED GREEN (`--ok`) IS NOT USED: in this repo green belongs to
   `EXECUTABLE` alone and the repo sends no orders. "All criteria green" is not
   "press and buy" — hence `--poz` (dark blue in light theme, purple in dark;
   NOT green).
   🔴 BOLD TOO: the mark is RARE (0 rows live today) and must not be missed;
   if colour were the only cue, colour blindness would erase it. */
.defter-tablo .d-all-green {
  color: var(--poz);
  font-weight: 600;
}

/*
 * "BU NEDEN OLMUYOR" — TEK BAGLAYICI ENGEL (`rowBlocker`). COIN hucresinin
 * UCUNCU satiri; geometri `.d-zaman`dan GELIR (yeni bir gorsel dil ICAT
 * EDILMEDI), burada yalnizca renk ve agirlik tanimlanir.
 *
 * 🔴 YESIL (`--ok`) HICBIR BASAMAKTA KULLANILMAZ - 12. basamakta da. Bu depoda
 * yesil YALNIZ `EXECUTABLE`in ve depo emir GONDERMEZ; "on bir basamak
 * isirmadi" ile "bas ve al" ayni sey degildir. Ayni gerekce `.d-all-green`
 * yaninda da yazili ve `tests/guards/yesil-yalniz-executable.test.ts` bunu
 * mekanik olarak kolluyor.
 *
 * DORT SIDDET, DORT AYRI OLGU - tek kovaya toplanmadi:
 *   hard     = bir kapi ISIRDI (rota HIC yurumez)              -> --destructive
 *   warn     = olculdu ama TAM CEVAP yok (bayat/derinlik/net)  -> --riskli
 *   measured = HESAPLANDI ve kar cikmadi (bilgi yoklugu DEGIL) -> muted
 *   unknown  = kapi kaydi YOK, hukum URETILEMEDI               -> muted
 *   clear    = on bir basamak isirmadi                         -> --poz
 */
.defter-tablo .d-blocker {
  margin-top: 0.15rem;
  font-weight: 500;
  font-size: 10px;
  white-space: normal;
  cursor: help;
}

.defter-tablo .d-blocker-hard {
  color: var(--destructive);
}

.defter-tablo .d-blocker-warn {
  color: var(--riskli);
}

/* 🔴 OLCUM, UYARI DEGIL: "net hesaplandi, kar yok" bir BILGIDIR ve kirmizi
   boyanmasi onu bir ARIZA gibi okuturdu. Notr kalir. */
.defter-tablo .d-blocker-measured {
  font-weight: 400;
  color: var(--muted-foreground);
}

/* 🔴 BILGI YOKLUGU DA NOTRDUR: "kapi kaydi yok" bir ENGEL DEGIL, cevaplanamamis
   bir sorudur. Uyari rengi vermek olculmemis bir seyi olculmus gosterirdi. */
.defter-tablo .d-blocker-unknown {
  font-weight: 400;
  color: var(--muted-foreground);
}

/* 🔴 `--poz` (acik temada koyu mavi, koyu temada mor) - YESIL DEGIL. `.d-all-green`
   ile AYNI token ve AYNI gerekce; ikinci bir kural degil, onun kardesi. */
.defter-tablo .d-blocker-clear {
  color: var(--poz);
  font-weight: 600;
}

.serit-kirmizi {
  background: color-mix(in oklch, var(--destructive) 14%, var(--card));
  border-color: color-mix(in oklch, var(--destructive) 45%, transparent);
  color: var(--foreground);
}

.serit-sari {
  background: color-mix(in oklch, var(--riskli) 14%, var(--card));
  border-color: color-mix(in oklch, var(--riskli) 45%, transparent);
  color: var(--foreground);
}

/* ---- kontroller ---- */
/*
 * KONTROL SERIDI — TABLONUN USTUNDE ve KAYARKEN YAPISIK.
 *
 * 🔴 `sticky`: tablo ~60 satir; serit sayfayla birlikte kayip giderse kullanici
 * filtreyi/dondurmayi yine bulamaz (olculen kusurun ikinci yarisi). Desen
 * dosyanin kendisinden: `#ust` ve `thead th` de boyle yapisiyor.
 * 🔴 `z-index: 21` BILINCLI olarak `#ust`un 20'sinden BUYUK: ikisi de `top: 0`da
 * yapisiyor ve band cakisiyor. Kullanici bu turda ucuncu kez BASITLIK ve
 * "durdurabilcem/filtreleyebilcem" dedi — o yuzden bandi KONTROL kazanir, baslik
 * seridi (adi + sayaclar) sayfa tepeye donunce yine gorunur.
 * ⚠ SABIT BIR OFSET (`top: 3.4rem` gibi) YAZILMADI: baslik yuksekligi
 * OLCULMEDI ve uydurma bir sayi ilk yazi tipi degisikliginde sessizce kayardi.
 * 🔴 Arka plan OPAK olmak ZORUNDA: seffaf kalirsa altindan kayan tablo satirlari
 * seridin icinden gorunur (ayni gerekce `th.b-sembol` sticky kuralinda yazili).
 */
#kontroller {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  margin: 0.5rem 0.6rem 0;
  padding: 0.45rem 0.7rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--card);
  position: sticky;
  top: 0;
  z-index: 21;
}

.kt {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  color: var(--muted-foreground);
  font-size: 12px;
  font-weight: 500; /* etkilesimli etiket -> font-medium */
}

.kt-bilgi {
  color: var(--muted-foreground);
  font-size: 12px;
  font-family: var(--yazi-mono);
  font-variant-numeric: tabular-nums;
}

/* INPUT — olculen shadcn input.tsx dizgisi */
input {
  height: 2.25rem; /* h-9 */
  min-width: 0;
  border-radius: var(--radius-md);
  border: 1px solid var(--input);
  background: transparent;
  padding: 0.25rem 0.75rem; /* py-1 px-3 */
  font-family: var(--yazi-sans);
  font-size: 14px;
  color: var(--foreground);
  box-shadow: var(--golge-xs);
  transition: color 150ms, box-shadow 150ms, border-color 150ms;
  outline: none;
}

.dark input {
  background: color-mix(in oklch, var(--input) 30%, transparent);
}

input::placeholder {
  color: var(--muted-foreground);
}

/* BUTTON — boyutlar OLCULDU (size=sm: h-8 px-3 rounded-md gap-1.5),
 * varyant govdesi TURETILDI (input+badge'in olculen ortak deseninden). */
button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.375rem; /* gap-1.5 */
  height: 2rem; /* h-8 */
  padding: 0 0.75rem; /* px-3 */
  white-space: nowrap;
  border-radius: var(--radius-md);
  border: 1px solid var(--input);
  background: var(--card);
  color: var(--foreground);
  font-family: var(--yazi-sans);
  font-size: 13px;
  font-weight: 500; /* etkilesimli metin -> font-medium */
  box-shadow: var(--golge-xs);
  transition: color 150ms, background-color 150ms, box-shadow 150ms,
    border-color 150ms;
  cursor: pointer;
  outline: none;
}

button:hover:not(:disabled) {
  background: var(--accent);
  color: var(--accent-foreground);
}

button:disabled {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.5;
}

/* ODAK HALKASI — olculen shadcn deseni: kenarlik --ring, halka ring/50, 3px */
input:focus-visible,
button:focus-visible,
tr:focus-visible,
a:focus-visible {
  border-color: var(--ring);
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--ring) 50%, transparent);
  outline: none;
}

#k-filtre {
  width: 16rem;
  max-width: 100%;
}

#k-autolimit {
  width: 6rem;
}

/* ---- bolumler: shadcn CARD ----
 * ⚠ KANONIK OLCUDEN BILEREK SAPMA: shadcn Card `py-6 px-6` (24 px) ister.
 * Burada 16 px kullaniliyor. Gerekce OLCULDU: 24 px ile ilk matris satiri
 * y=688 px'e dusuyor, yani pencerenin %68'i veriye varmadan tukeniyor. Bu bir
 * SAYI PANOSU; kart nefesi ile veri yogunlugu arasindaki takas burada verinin
 * lehine cozuldu. Yaricap, kenarlik, golge ve renkler kanonik KALDI.
 */
section {
  margin: 0.6rem;
  padding: 1rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-xl);
  background: var(--card);
  color: var(--card-foreground);
  box-shadow: var(--golge-sm);
  max-width: 100%;
}

/* CardTitle: leading-none font-semibold */
section h2 {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 0.75rem;
  align-items: baseline;
  margin: 0 0 0.6rem;
  font-size: 14px;
  font-weight: 600;
  line-height: 1;
  letter-spacing: 0.06em;
  color: var(--foreground);
}

.blok-bas {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 0.6rem;
  align-items: baseline;
  margin: 1.25rem 0 0.5rem;
  font-size: 12px;
  font-weight: 600;
  letter-spacing: 0.08em;
  color: var(--foreground);
}

/* CardDescription: text-sm text-muted-foreground */
section h2 .alt,
.blok-bas .alt {
  color: var(--muted-foreground);
  letter-spacing: 0;
  font-weight: 400;
  font-size: 12px;
}

.bos {
  color: var(--muted-foreground);
}

/* ---- besleme cipleri ---- */
.cipler {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

/* KUSUR 4: TEK SATIRLIK cip. Eskiden dikey kartti ve 280 px'lik blogun
 * tamami buydu. Sebep metni artik katli (bkz. .cip-sebep-tam). */
.cip {
  display: block;
  padding: 0.3rem 0.5rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--background);
  min-width: 0;
  font-size: 12px;
}

.cip-satir {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4rem;
}

.cip strong {
  font-weight: 600;
  letter-spacing: 0.04em;
}

/* Sayilar yine monospace (tipografi sozlesmesi). */
.cip-sayi {
  color: var(--muted-foreground);
  font-family: var(--yazi-mono);
  font-variant-numeric: tabular-nums;
}

.cip-ac {
  height: 1.35rem;
  padding: 0 0.4rem;
  font-size: 11px;
}

.cip-ac-uyari {
  border-color: color-mix(in oklch, var(--destructive) 50%, transparent);
  color: color-mix(in oklch, var(--destructive) 80%, var(--foreground));
}

/* 🔴 TAM METIN, KIRPILMAZ - yalnizca katli. */
.cip-sebep-tam {
  margin: 0.3rem 0 0.1rem;
  color: var(--muted-foreground);
  font-size: 11px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.cip-sebep-uyari {
  color: color-mix(in oklch, var(--destructive) 75%, var(--foreground));
}

.cip-kapali {
  border-color: color-mix(in oklch, var(--destructive) 55%, transparent);
  opacity: 0.8;
}

.cip-rest {
  border-color: color-mix(in oklch, var(--riskli) 55%, transparent);
}

/* ---- BADGE — olculen shadcn badge.tsx govde dizgisi ---- */
.rozet {
  display: inline-flex;
  width: fit-content;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  gap: 0.25rem;
  overflow: hidden;
  border-radius: 9999px;
  border: 1px solid transparent;
  padding: 0.125rem 0.5rem; /* py-0.5 px-2 */
  font-family: var(--yazi-sans);
  font-size: 12px; /* text-xs */
  line-height: 1.34;
  font-weight: 500; /* font-medium */
  white-space: nowrap;
}

/* 🔴 `transition` KALDIRILDI 2026-09-24 — OLCULMUS KUSUR: `guncelleRotaSatiri`
   satir basina 4-6 rozet dugumunu YENIDEN YARATIYOR ve bu HER `prices`
   deltasinda kosuyor. Yeni dogan bir dugumde gecis zaten gorsel olarak hicbir
   sey yapmaz (baslangic degeri yok) ama tarayiciya satir basina 4-6 gecis
   kaydi actiriyordu. Diger gorsel ozellikler AYNEN duruyor.
   ⚠ BU YORUM BIR KEZ BLOGUN ICINDE, KAPANIS `}` YERINE birakildi ve `.rozet`ten
   dosya SONUNA kadar HER KURALI oldurdu (yorumsuz `{` 326 / `}` 325). Artik
   `tests/web-ui.test.ts` bir SUSLU PARANTEZ DENGESI kapisi tasiyor. */

/* badge variant=secondary */
.rozet {
  background: var(--secondary);
  color: var(--secondary-foreground);
}

/* KUSUR 3: notr. `rest` rozeti amber kaldigi icin ikisi hala ayirt edilebilir. */
.rozet-ws {
  background: var(--secondary);
  color: var(--secondary-foreground);
}

.rozet-rest {
  background: color-mix(in oklch, var(--riskli) 20%, transparent);
  color: var(--riskli);
}

/* DURUM ROZETLERI. 🔴 YESIL YALNIZ .r-d-ok. */
.r-d-ok {
  background: color-mix(in oklch, var(--ok) 22%, transparent);
  color: var(--ok);
}

.r-d-riskli {
  background: color-mix(in oklch, var(--riskli) 22%, transparent);
  color: var(--riskli);
}

.r-d-hayir {
  background: color-mix(in oklch, var(--hayir) 22%, transparent);
  color: color-mix(in oklch, var(--hayir) 80%, var(--foreground));
}

.r-d-yok {
  background: var(--secondary);
  color: var(--muted-foreground);
}

/* ---------------------------------------------------------------------------
 * DALGA 4 MADDE 1 — GIZLEME ANAHTARLARI + GIZLI SAYACI
 * ------------------------------------------------------------------------ */
.kt-anahtar {
  gap: 0.35rem;
  cursor: pointer;
  user-select: none;
}

.kt-anahtar input {
  height: auto;
  width: auto;
  margin: 0;
  padding: 0;
  box-shadow: none;
  accent-color: var(--primary);
  cursor: pointer;
}

/*
 * 🔴 Gizlenen satir sayisi SESSIZ kalamaz. Bu yuzden `bos` gibi soluk DEGIL:
 * kenarligi olan, okunur bir not. Kullanici elinde olandan azini gordugunu
 * BILMEK zorunda.
 */
.gizli-not {
  margin: 0.5rem 0 0;
  padding: 0.4rem 0.7rem;
  border: 1px dashed color-mix(in oklch, var(--ring) 55%, transparent);
  border-radius: var(--radius-md);
  background: var(--muted);
  color: var(--foreground);
  font-size: 12px;
  overflow-wrap: anywhere;
}

/* ---------------------------------------------------------------------------
 * DALGA 4 MADDE 2 — TRANSFER BAYRAKLARI (deposit / withdraw)
 *
 * 🔴 UC DURUM UC GORUNUM — ve 'ACIK' YESIL DEGIL. Yesil bu depoda yalniz
 * EXECUTABLE demek; transferin acik olmasi rotanin uygulanabilir oldugu
 * ANLAMINA GELMEZ. `--ok` burada KULLANILMAZ; guard testi zaten kizartirdi.
 * 'ACIK' notr-vurgulu, 'KAPALI' destructive, 'BILINMIYOR' ise CIZGILI kenarlik
 * (olculmedigini gorsel olarak da soyler - dolu rozet "karar verildi" okunur).
 * ------------------------------------------------------------------------ */
.t-rozet {
  font-size: 11px;
  padding: 0 0.45rem;
}

.t-acik {
  background: color-mix(in oklch, var(--chart-1) 22%, transparent);
  color: var(--foreground);
  border-color: color-mix(in oklch, var(--chart-1) 45%, transparent);
}

.t-kapali {
  background: color-mix(in oklch, var(--destructive) 22%, transparent);
  color: color-mix(in oklch, var(--destructive) 80%, var(--foreground));
  border-color: color-mix(in oklch, var(--destructive) 55%, transparent);
}

.t-bilinmiyor {
  background: transparent;
  border: 1px dashed var(--ring);
  color: var(--muted-foreground);
}

/* D-104 · KARISIK = aglar ayni bayragi tasimiyor. Ne acik ne kapali; bu yuzden
   ne `--chart-1` ne `--destructive` ailesinden. `--chart-4` (amber) UYARI
   rengidir ve depoda `--ok` ile HICBIR iliskisi yoktur. */
/* TUR 11 — ONARIM ROZETI. 🔴 YESIL DEGIL: toparlanmis olmak "sorun yok"
   demek degildir, bir KOPUS yasandigini soyler. Amber (`--chart-4`). */
.cip-onarim {
  font-size: 12px;
  letter-spacing: 0.04em;
  padding: 0.05rem 0.3rem;
  border-radius: 0.3rem;
  border: 1px solid color-mix(in oklch, var(--chart-4) 50%, transparent);
  color: var(--foreground);
}

/* Sebebin EKRAN ozeti: bir satir, ikincil renk. Tam metin acilir kutuda. */
.cip-sebep-ozet {
  font-size: 11px;
  color: var(--muted-foreground);
  max-width: 34rem;
  overflow-wrap: anywhere;
}

/* TUR 9 — BACAK BLOGU: borsa · fiyat · O BACAGIN bayragi, alt alta.
   Rotanin yonu (al -> sat) gorsel olarak okunur. */
.r-bacak {
  display: inline-block;
  vertical-align: top;
}

.r-bayrak {
  display: block;
  font-size: 11px;
  line-height: 1.4;
  letter-spacing: 0.01em;
  padding: 0 0.15rem;
  border-radius: 0.3rem;
  border: 1px solid transparent;
  color: var(--muted-foreground);
}

/* TUR 10 — ISARET CUMLEYI ONCELER, TEK BASINA SINYAL DEGILDIR.
   Metin tek basina okundugunda da tam anlasilir; renk yalnizca PEKISTIRIR.
   🔴 `OK` YESIL DEGIL: `--ok` yalniz EXECUTABLE'in (guard mekanik zorluyor).
   Olumlu isaret icin `--chart-1` (mavi) kullanilir — transfer yolu rozetiyle
   ayni aile, ayni anlam: "yol var", "kazanc var" DEGIL. */
.c-isaret {
  display: inline-block;
  min-width: 1.2rem;
  font-family: var(--yazi-mono);
  font-weight: 700;
  font-size: 12px;
}

.c-metin {
  color: var(--muted-foreground);
}

.c-evet .c-isaret {
  color: color-mix(in oklch, var(--chart-1) 80%, var(--foreground));
}

.c-hayir .c-isaret {
  color: var(--destructive);
}

.c-hayir .c-metin {
  color: color-mix(in oklch, var(--destructive) 55%, var(--foreground));
}

.c-bilinmiyor .c-isaret {
  color: var(--muted-foreground);
}

/* Donus bacagi MANSETTEN INDI, silinmedi: kucuk bir iz birakir, tamami
   `title`da durur. */
.r-donus {
  font-size: 12px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--muted-foreground);
  border-bottom: 1px dotted var(--ring);
  cursor: help;
  margin-left: 0.35rem;
}

/* 🔴 TRANSFER YOLU ACIK = MAVI (`--chart-1`), YESIL DEGIL.
   Olculdu: yolu acik 18 rotanin 18'inde de motor EXECUTABLE DEMEDI. Yesil
   `--ok` yalniz `EXECUTABLE`in; `--chart-2` (zumrut) `--ok`un kaynagidir ve
   BURADA KULLANILMAZ. Yol acik olmak GEREKLI ama YETERLI degildir. */
.t-yol-acik {
  background: color-mix(in oklch, var(--chart-1) 24%, transparent);
  color: var(--foreground);
  border-color: color-mix(in oklch, var(--chart-1) 60%, transparent);
  font-weight: 600;
}

/* TUR 12 — rotanin ZINCIR hukmunun DUZ CUMLESI. Rozet bir terim, bu bir eylem
   cumlesi: "bybit borsasindan yalniz Base agi ile cikarabilirsin, gate
   borsasina yalniz Arbitrum agi ile sokabilirsin - ortak acik ag yok".
   🔴 Yesil YOK: `c-evet` isareti bile `--ok` kullanmaz (`--ok` yalniz
   EXECUTABLE'in; `tests/guards/yesil-yalniz-executable.test.ts` zorlar). */
.r-yol-cumle {
  display: block;
  font-size: 11px;
  line-height: 1.4;
  color: var(--muted-foreground);
  margin-top: 0.15rem;
  cursor: help;
}

/* Degerli bir RET sebebi: %16 spread gorup "neden olmuyor" diye sorulmasin. */
.t-yol-kapali {
  background: color-mix(in oklch, var(--destructive) 18%, transparent);
  color: color-mix(in oklch, var(--destructive) 85%, var(--foreground));
  border-color: color-mix(in oklch, var(--destructive) 55%, transparent);
  font-weight: 600;
}

/* DALGA 6 — sira modu kontrolu. Kontrol seridinin BASINDA durur.
   🔴 Yesil YOK: secili secenek `--ring`/`--foreground` ile belirtilir,
   `--ok` EXECUTABLE'a ayrilmistir. */
.kt-mod {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  border: 1px solid var(--border);
  border-radius: 0.5rem;
  padding: 0.2rem 0.6rem 0.35rem;
  margin: 0;
}

.kt-mod legend {
  font-size: 12px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted-foreground);
  padding: 0 0.25rem;
}

.kt-mod input:checked + span {
  color: var(--foreground);
  font-weight: 600;
}

.kt-uyari {
  font-family: inherit;
  font-style: italic;
}

/* DALGA 6 — olcutu artik saglamayan ama sirada TUTULAN satir.
   🔴 Yesil YOK, dolgu YOK: bu bir uyari isaretidir, bir hukum degil.
   Sol kenar cizgisi satiri kaydirmaz (genislik degismez). */
.rota-dusmus {
  border-left: 2px solid color-mix(in oklch, var(--chart-4) 65%, transparent);
}

.rota-dusmus .r-sembol::after {
  content: ' olcut disi';
  font-size: 12px;
  letter-spacing: 0.06em;
  color: var(--muted-foreground);
}

.t-karisik {
  background: color-mix(in oklch, var(--chart-4) 20%, transparent);
  color: var(--foreground);
  border-color: color-mix(in oklch, var(--chart-4) 50%, transparent);
}

/* Kanit ile borsa beyani birbirini tutmuyor — GIZLENMEZ, kirmizi cerceveyle
   isaretlenir. Dolgu YOK: bu bir HUKUM degil, bir UYARIDIR. */
.t-celiski {
  background: transparent;
  border: 1px solid var(--destructive);
  color: color-mix(in oklch, var(--destructive) 85%, var(--foreground));
  font-weight: 600;
}

/* Iki kaynak AYRI SATIRDA durur; yan yana yazmak onlari tek bir iddia gibi
   gosterirdi. Etiket hangi kaynak oldugunu soyler. */
.ag-satir {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  align-items: baseline;
  margin-bottom: 0.2rem;
}

.ag-etiket {
  font-size: 12px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted-foreground);
  min-width: 2.6rem;
}

.rota-transfer {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: baseline;
  margin-top: 0.35rem;
}

.rota-transfer-bas {
  font-size: 12px;
  letter-spacing: 0.1em;
  color: var(--muted-foreground);
  font-weight: 600;
}

.rota-transfer-zincir {
  font-size: 11px;
  color: var(--muted-foreground);
  font-family: var(--yazi-mono);
}

/* BILINMIYOR'un sebebi bos birakilmaz — TAM METIN, kirpilmaz. */
.rota-transfer-not {
  flex: 1 1 100%;
  margin-top: 0.15rem;
  color: var(--muted-foreground);
  font-size: 11px;
  overflow-wrap: anywhere;
}

.h-transfer {
  min-width: 11rem;
}

.h-transfer .rozet {
  margin-right: 0.3rem;
}

/* ---------------------------------------------------------------------------
 * DALGA 5 — SEKMELER · ROTA LISTESI · KARALISTE
 * ------------------------------------------------------------------------ */
#sekmeler {
  display: flex;
  gap: 0.4rem;
  margin: 0.6rem 0.6rem 0;
}

#sekmeler button {
  height: 2.25rem;
  padding: 0 1rem;
  border-radius: var(--radius-md);
  background: transparent;
  border-color: transparent;
  box-shadow: none;
  color: var(--muted-foreground);
  letter-spacing: 0.06em;
}

#sekmeler button[data-aktif="1"] {
  background: var(--card);
  border-color: var(--border);
  color: var(--foreground);
  box-shadow: var(--golge-xs);
}

#rotalar-kaydir {
  position: relative;
  width: 100%;
  overflow-x: auto;
  max-width: 100%;
}

#t-rotalar {
  width: auto;
  min-width: 100%;

  /*
   * 🔴 TEK DOGRULUK KAYNAGI. SEMBOL sutununun genisligi BIR YERDE yazilir ve
   * iki yerde OKUNUR: (1) `td.r-sembol` genisligi, (2) onun sagina yapisan
   * `td.r-spread` icin `left` ofseti. Ikisini ayri ayri elle yazmak, birini
   * degistirip otekini unutunca spread'i sembolun UZERINE bindirirdi.
   */
  --r-sembol-w: 12rem;
}

/*
 * SEMBOL sutunu listede de yerinde kalir.
 *
 * 🔴 GENISLIK SABIT. Sticky bir komsunun (`r-spread`) `left` degeri ancak bu
 * sutunun genisligi BILINIYORSA dogru olur; o yuzden `--r-sembol-w` burada
 * uc ozellikle birden dayatilir. Icerik (sembol + `fiyatlar ayrisiyor` rozeti)
 * sigmazsa SARAR - kirpilmaz.
 */
#t-rotalar th:first-child,
#t-rotalar td.r-sembol {
  position: sticky;
  left: 0;
  width: var(--r-sembol-w);
  min-width: var(--r-sembol-w);
  max-width: var(--r-sembol-w);
  background: var(--card);
  z-index: 3;
  white-space: normal;
  overflow-wrap: anywhere;
}

/*
 * 🔴 TEPE SPREAD DE SABITLENIR - kusurun ta kendisi buydu: kullanici
 * "yatayda sigmiyor kaydirmam gerekiyor spreadlari goremiorum" dedi.
 * SEMBOL'un hemen saginda durur; ofset `--r-sembol-w`den okunur, SIHIRLI
 * SAYI YOK.
 *
 * z-index KATMANI: `r-sembol` 3, `r-spread` 2, kalan hucreler katmansiz.
 * Yani yatay kaydirmada spread diger hucrelerin USTUNU orter ama sembolun
 * ALTINDA kalir - bindirme olsa bile sembol kazanir.
 *
 * Arka plan ZORUNLU (hem normal hem hover): saydam birakilsaydi kaydirirken
 * altindan ROTA metni gecerdi.
 */
#t-rotalar th:nth-child(2),
#t-rotalar td.r-spread {
  position: sticky;
  left: var(--r-sembol-w);
  background: var(--card);
  z-index: 2;
}

#t-rotalar tbody tr:hover td.r-sembol,
#t-rotalar tbody tr:hover td.r-spread {
  background: color-mix(in oklch, var(--muted) 50%, var(--card));
}

/*
 * 🔴 GENISLIK TAVANI - KIRPMA DEGIL.
 *
 * ROTA ve transfer hucreleri bacak basina uzun ag notu tasir ("Base agi: cekim
 * BILINMIYOR · ... · bu rota icin hukum kurulamadi"). Tavan yokken tablo
 * yatayda sisiyor ve TEPE spread ekran disina tasiyordu.
 *
 * Cozum SARMAKTIR, GIZLEMEK DEGIL: `text-overflow: ellipsis`,
 * `-webkit-line-clamp` ve `overflow: hidden` BU KURALLARDA YASAK. Bu deponun
 * ilkesi "kanitlanamayani da SEBEBIYLE goster"; sebep metnini uc noktaya
 * indirmek o ilkeyi ihlal ederdi (`app.js`: "TAM METIN - kirpilmaz, CSS sarar").
 */
#t-rotalar td.r-yon,
#t-rotalar td.r-transfer {
  max-width: clamp(18rem, 32vw, 40rem);
  white-space: normal;
  overflow-wrap: anywhere;
}

.r-sembol .sembol-ad {
  font-weight: 600;
  letter-spacing: 0.02em;
  margin-right: 0.35rem;
}

.r-yon {
  white-space: nowrap;
  font-weight: 500;
}

/* TUR 6: iki bacagin fiyati. Sayi oldugu icin MONO + tabular-nums. */
.r-fiyat {
  margin: 0 0.5rem 0 0.35rem;
  color: var(--muted-foreground);
  font-weight: 400;
}

/*
 * 🔴 TEPE SPREAD NOTR RENKTEDIR — yesil DEGIL, hatta vurgulu bile degil.
 * Sirali bir listede buyuk sayiyi renklendirmek "kazanc" imasi kurar; oysa bu
 * defterin tepesidir ve gerceklesen marj degildir.
 */
.r-spread {
  white-space: nowrap;
  font-weight: 600;
  min-width: 7rem;
}

.r-transfer {
  min-width: 22rem;
}

.r-transfer .rozet,
.r-durum .rozet {
  margin-right: 0.3rem;
}

.r-durum {
  min-width: 13rem;
}

.r-boyut {
  display: block;
  margin-top: 0.15rem;
  font-size: 11px;
  color: var(--muted-foreground);
  font-family: var(--yazi-mono);
}

/* Ayrisan rota GOSTERILDIGINDE acikca isaretli: cizgili sol kenar. */
tr.rota-ayrisik td.r-sembol {
  box-shadow: inset 3px 0 0 0 color-mix(in oklch, var(--riskli) 70%, transparent);
}

/*
 * SIL tusu. 🔴 KIRMIZI OLABILIR, YESIL OLAMAZ (guard testi zaten kizartirdi).
 * Yikici bir eylem gibi gorunmeli ama geri alinabilir oldugu `title`da yazili.
 */
.sil-btn {
  height: 1.5rem;
  padding: 0 0.55rem;
  font-size: 11px;
  border-color: color-mix(in oklch, var(--destructive) 45%, transparent);
  color: color-mix(in oklch, var(--destructive) 85%, var(--foreground));
}

.sil-btn:hover:not(:disabled) {
  background: color-mix(in oklch, var(--destructive) 18%, transparent);
  color: var(--foreground);
}

#rotalar-daha {
  margin-top: 0.6rem;
}

.kl-liste {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.kl-satir {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  padding: 0.25rem 0.4rem 0.25rem 0.6rem;
  border: 1px solid var(--border);
  border-radius: 9999px;
  background: var(--background);
}

.kl-sembol {
  font-family: var(--yazi-mono);
  font-size: 12px;
  font-weight: 600;
}

.kl-cikar {
  height: 1.35rem;
  padding: 0 0.5rem;
  font-size: 11px;
}

/* ---- yatay kaydirma: govde DEGIL, tablo kayar ---- */
#prices-kaydir,
#detay-kaydir,
#evidence-kaydir {
  position: relative;
  width: 100%;
  overflow-x: auto;
  max-width: 100%;
}

/* ---- tablolar (shadcn table.tsx: w-full text-sm) ---- */
table {
  border-collapse: collapse;
  width: 100%;
  font-size: 13px;
}

#t-prices {
  width: auto;
  min-width: 100%;
}

th {
  height: 2.5rem; /* h-10 */
  padding: 0 0.5rem; /* px-2 */
  text-align: left;
  vertical-align: middle;
  font-weight: 500; /* font-medium */
}

td {
  padding: 0.5rem; /* p-2 */
  text-align: left;
  vertical-align: middle;
}

tbody tr {
  border-bottom: 1px solid var(--border);
  transition: background-color 150ms;
}

tbody tr:last-child {
  border-bottom: 0;
}

thead th {
  position: sticky;
  top: 0;
  background: var(--card);
  border-bottom: 1px solid var(--border);
  color: var(--muted-foreground);
  font-size: 11px;
  letter-spacing: 0.06em;
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
  z-index: 2;
}

#t-detay thead th,
#t-evidence thead th {
  cursor: default;
  position: static;
}

/* ---------------------------------------------------------------------------
 * KANIT TABLOSU — SUTUN TAHSISI (olculdu 2026-09-21, Chromium 1280px).
 *
 * 🔴 KUSUR: `table-layout: auto` ile tarayici sutunu ICERIGIN EN DAR HALINE
 * gore paylastiriyordu. `.h-sebep`'te `overflow-wrap: anywhere` var, yani o
 * sutunun "en dar" hali TEK KARAKTERdir; tarayici ona 52px verip 176
 * karakteri ~35 satira sardi. Ayni anda `boyut (VWAP)` ve `net USD` 36'sar
 * karakter tasiyip 298'er piksel aldi. Olculen ortanca satir: 629px, sayfa
 * 625.130px, 1139 satirin yalniz 91'i normal yukseklikte.
 *
 * 🔴 COZUM `table-layout: fixed` + sutun genisligi — KIRPMA DEGIL.
 * `overflow: hidden` · `text-overflow: ellipsis` · `-webkit-line-clamp` ·
 * `max-height` BILEREK YOK: `sebep` metni bu projenin "NEDEN kanitlanamadi"
 * cumlesidir; onu kesmek kaniti yok etmektir. Sutun GENISLER, metin sarilir,
 * tablo `#evidence-kaydir` icinde YATAY KAYAR (govde kaymaz).
 *
 * NEDEN `fixed`: `auto`da sutunu buyutmenin tek yolu `min-width`dir ve
 * `min-width` 10 sutunun HEPSINE verilmedikce tarayici kalani yine icerige
 * gore dagitir — yani `sebep`i buyutmek `boyut`/`net`i kucultmez. `fixed`
 * dagitimi tamamen bize birakir ve yan etkisi olarak satir yuksekligini
 * ilk satira degil, YAZILI genisliklere baglar.
 *
 * Toplam 1694px (once 1578px): +116px yatay, -560px/satir dikey.
 * ------------------------------------------------------------------------ */
#t-evidence {
  table-layout: fixed;
  width: 100%;
  min-width: 1694px;
}

#t-evidence th:nth-child(1) {
  width: 110px;
} /* SEMBOL */
#t-evidence th:nth-child(2) {
  width: 95px;
} /* AL */
#t-evidence th:nth-child(3) {
  width: 95px;
} /* SAT */
#t-evidence th:nth-child(4) {
  width: 240px;
} /* DURUM - rozet + kod + aciklama */
#t-evidence th:nth-child(5) {
  width: 64px;
} /* guven */
#t-evidence th:nth-child(6) {
  width: 150px;
} /* boyut (VWAP) - "hesaplanmadi (...)" cumlesi 2 satira sarsin diye 150 */
#t-evidence th:nth-child(7) {
  width: 150px;
} /* net USD - ayni gerekce */
#t-evidence th:nth-child(8) {
  width: 130px;
} /* kimlik */
#t-evidence th:nth-child(9) {
  width: 150px;
} /* transfer */
#t-evidence th:nth-child(10) {
  width: 510px;
} /* sebep - EN GENIS, metin burada yasiyor (610 -> 510: 100px sayi sutunlarina gitti, TOPLAM 1694px DEGISMEDI) */

/*
 * `fixed` dagitimda hucre icindeki uzun tek kelime (borsa adi, kod, URL)
 * sutunu tasirmasin diye sarma izni. KIRPMA DEGIL — sarma.
 */
#t-evidence td {
  overflow-wrap: anywhere;
}

/*
 * 🔴 REGRESYON ONARIMI (olculdu 2026-09-21): `.h-sayi` genelinde
 * `white-space: nowrap` var. `auto` duzende sutun metne gore genisledigi
 * icin zararsizdi; `fixed` duzende 100px'lik kutuya 290px'lik
 * "hesaplanmadi (rota zaten reddedildi)" cumlesi SARMADAN basildi ve
 * komsu hucrenin METNININ USTUNE bindi — 1996 hucre, orneklenen 300'un
 * 300'u cakisiyordu. Ust uste basilan metin, kirpilmis metinden KOTUDUR.
 *
 * COZUM: bu iki sutunda sarmaya izin ver. Metin GIZLENMIYOR, SARILIYOR —
 * `ellipsis`/`line-clamp`/`overflow:hidden`/`max-height` YINE YOK.
 * Sayisal degerler ($0.299543156, %1.23) zaten kisa, sarmazlar; sarmasi
 * gereken yalniz "bilinmiyor" cumleleridir ve onlar 3 satira siger.
 * ⚠ Sutunu ~300px'e genisletmek de mumkundu; sarma secildi cunku tabloyu
 * 1694px'ten 2094px'e sismanletmek yatay kaydirmayi buyutur ve 1018
 * satirin yalniz bir kisminda gereken yeri HER satira odetirdi.
 */
#t-evidence td.h-sayi {
  white-space: normal;
}

th[data-aktif="asc"]::after {
  content: " ^";
  color: var(--foreground);
}

th[data-aktif="desc"]::after {
  content: " v";
  color: var(--foreground);
}

/* SEMBOL sutunu yatay kaydirmada YERINDE kalir. */
th.b-sembol,
td.h-sembol {
  position: sticky;
  left: 0;
  background: var(--card);
  z-index: 3;
  white-space: nowrap;
}

thead th.b-sembol {
  z-index: 4;
}

/*
 * 2026-09-21 · MATRIS 7 -> 26 SUTUN. Uc kural burada ACIKCA yazilidir; ucu de
 * yukarida zaten yururlukteydi ama HICBIRI matris sutunu adina baglanmamisti,
 * yani 26 sutunda gecerli kalacaklarinin kaniti yoktu.
 *
 * 🔴 BORSA ADI KIRPILMAZ. `cryptocom` · `bequant` · `btcturk` gibi adlar
 * kisaltilmaz ve `text-overflow: ellipsis` ile UCU KESILMEZ: kirpilmis bir
 * borsa adi (`crypto…`) kullaniciyi YANLIS BORSAYA baktirir ve bu, yanlis
 * link uretmekle ayni sinifta bir hatadir. Ad sigmiyorsa sutun genisler,
 * tablo `#prices-kaydir` icinde YATAY KAYAR — govde kaymaz (`body` zaten
 * `overflow-x: hidden`). Yer sorunu KAYDIRMAYLA cozulur, KIRPMAYLA degil.
 *
 * `min-width`: 26 sutunda tarayici sutunlari birbirine yapistirmasin diye
 * alt sinir; `max-width` ve `overflow: hidden` BILEREK YOK — ikisi de kirpma
 * kapisidir.
 */
.b-borsa {
  white-space: nowrap;
  text-overflow: clip;
  overflow: visible;
  min-width: 5.5rem;
}

.b-rozet {
  display: block;
  font-size: 12px;
  font-weight: 400;
  letter-spacing: 0;
  color: var(--muted-foreground);
}

/* KUSUR 3: notr. */
.b-rozet-ws {
  color: var(--foreground);
}

.b-rozet-rest {
  color: var(--riskli);
}

.b-kopuk {
  color: var(--hayir);
}

tbody tr {
  cursor: pointer;
}

tbody tr:hover {
  background: color-mix(in oklch, var(--muted) 50%, transparent);
}

tbody tr:hover td.h-sembol {
  background: color-mix(in oklch, var(--muted) 50%, var(--card));
}

tbody tr.odakta,
tbody tr.odakta td.h-sembol {
  background: var(--accent);
}

tbody tr.sabit td.h-sembol {
  box-shadow: inset 3px 0 0 0 var(--poz);
}

tbody tr.oto td.h-sembol {
  box-shadow: inset 3px 0 0 0 var(--muted-foreground);
}

.h-sayi {
  white-space: nowrap;
}

.h-sembol .sembol-ad {
  font-weight: 600;
  letter-spacing: 0.02em;
}

.h-sembol .mini {
  display: block;
  color: var(--muted-foreground);
  font-size: 11px;
}

.pin {
  height: 1.25rem;
  min-width: 1.25rem;
  padding: 0 0.25rem;
  margin-right: 0.4rem;
  border-radius: var(--radius-sm);
  background: transparent;
  border-color: transparent;
  box-shadow: none;
  color: var(--muted-foreground);
  font-size: 12px;
}

.pin-acik {
  color: var(--poz);
  border-color: var(--poz);
}

/* ---------------------------------------------------------------------------
 * W-E MADDE 1 — KIMLIK ISARETLERI
 * ------------------------------------------------------------------------ */
.kimlik-rozetler {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  margin-top: 0.2rem;
}

.kimlik-rozetler:empty {
  display: none;
}

.k-rozet {
  font-size: 11px;
  padding: 0 0.45rem;
}

/* MOTORUN HUKMU - IDENTITY_MISMATCH: en agir. */
.k-mismatch {
  background: color-mix(in oklch, var(--destructive) 22%, transparent);
  color: color-mix(in oklch, var(--destructive) 80%, var(--foreground));
  border-color: color-mix(in oklch, var(--destructive) 55%, transparent);
}

/* MOTORUN HUKMU - IDENTITY_UNCERTAIN. */
.k-uncertain {
  background: color-mix(in oklch, var(--riskli) 22%, transparent);
  color: var(--riskli);
  border-color: color-mix(in oklch, var(--riskli) 50%, transparent);
}

/* HUKUM YOK (tur kosmadi) - notr; "temiz" izlenimi VERMEZ. */
.k-bekliyor {
  background: transparent;
  border-color: var(--border);
  color: var(--muted-foreground);
}

/* EKRANDAKI GOZLEM - hukum DEGIL: bu yuzden DOLU degil CIZGILI kenarlik.
 * Cizgili kenarlik bilerek secildi: dolu rozet "karar verildi" gibi okunur,
 * oysa bu bir OLCUMdur. */
.k-ayrisma {
  background: transparent;
  border: 1px dashed color-mix(in oklch, var(--riskli) 70%, transparent);
  color: var(--riskli);
}

/* MOTORUN HUKMU - VERIFIED_CONTRACT / VERIFIED_NATIVE.
 * 🔴 YESIL DEGIL: yesil bu depoda YALNIZ EXECUTABLE demektir; kimligin
 * dogrulanmis olmasi rotanin uygulanabilir oldugu ANLAMINA GELMEZ. */
.k-dogrulandi {
  background: transparent;
  border-color: var(--border);
  color: var(--muted-foreground);
}

/*
 * Fiyatlari ayrisan satir: "en ucuz / en pahali" DOLGUSU kalkar. Dolgu, iki
 * fiyatin KARSILASTIRILABILIR oldugunu ima ediyordu; ima kalkar, METIN KALIR.
 * Fiyatlar okunabilir kalir (opaklik dusurulmez) - sayilar dogrudur, yalan
 * olan onlarin ayni varliga ait oldugu imasiydi.
 */
tr[data-kimlik="ayrisik"] td.ex-ucuz,
tr[data-kimlik="ayrisik"] td.ex-pahali {
  background: transparent;
  box-shadow: inset 0 -2px 0 0 color-mix(in oklch, var(--riskli) 45%, transparent);
}

tr[data-kimlik="ayrisik"] td.h-sembol {
  box-shadow: inset 3px 0 0 0 color-mix(in oklch, var(--riskli) 70%, transparent);
}

/* TAM METIN — sembol blogunda, KIRPILMAMIS. */
.kimlik-not {
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  margin: 0 0 0.6rem;
}

.kimlik-not:empty {
  display: none;
}

.kimlik-not-satir {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: flex-start;
  padding: 0.5rem 0.7rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  background: var(--background);
}

.kimlik-not-satir.k-mismatch {
  border-color: color-mix(in oklch, var(--destructive) 45%, transparent);
  background: color-mix(in oklch, var(--destructive) 8%, var(--background));
}

.kimlik-not-satir.k-uncertain,
.kimlik-not-satir.k-ayrisma {
  border-color: color-mix(in oklch, var(--riskli) 40%, transparent);
  background: color-mix(in oklch, var(--riskli) 7%, var(--background));
}

.kimlik-not-metin {
  flex: 1 1 18rem;
  color: var(--muted-foreground);
  font-size: 12px;
  white-space: pre-wrap;
  overflow-wrap: anywhere; /* KIRPILMAZ - sarilir */
}

/* ---- V1: matris hucreleri ---- */
.h-ex {
  min-width: 7.5rem;
}

.ex-fiyat {
  display: block;
}

.ex-etiket {
  display: block;
  font-size: 12px;
  color: var(--muted-foreground);
  white-space: nowrap;
}

/* Anahtar HIC gelmedi: o borsada sembol YOK. */
.ex-yok {
  color: var(--muted-foreground);
  opacity: 0.6;
}

/* Anahtar var, deger null: veri gelmedi. AYRI bir sey. */
.ex-null {
  color: var(--riskli);
  font-style: italic;
}

/* NOTR vurgu - yesil DEGIL. Isaretli olmak uygulanabilir olmak degildir. */
.ex-ucuz {
  background: var(--vurgu-ucuz);
}

.ex-pahali {
  background: var(--vurgu-pahali);
}

.ex-ucuz .ex-etiket,
.ex-pahali .ex-etiket {
  color: var(--foreground);
}

/*
 * V5 - borsanin islem sayfasi linki.
 * Renk notr/mavi - YESIL DEGIL, cunku bu projede yesil "kar" demek ve bir
 * linkin karla ilgisi yok. href'i OLMAYAN <a> link degildir.
 */
.ex-link {
  color: inherit;
  text-decoration: none;
  border-radius: var(--radius-sm);
}

/*
 * 🔴 KUSUR 1 — FIYAT METNI LINK GIBI BOYANMAZ.
 *
 * Olculdu: ekranda /^[0-9.]+$/ metinli 347 <a> vardi ve HEPSI parlak mor +
 * noktali altcizgi idi (`--poz` karanlik temada `--chart-4` =
 * oklch(0.627 0.265 303.9)). Iki ayri kusur:
 *   a) OKUNABILIRLIK - yogun bir sayi tablosunda her sayiyi renklendirip
 *      altini cizmek gurultuyu artirir; mor+altcizgi tarayici kulturunde
 *      "ziyaret edilmis link" okunur, "fiyat" okunmaz.
 *   b) ANLAM CAKISMASI - `--poz` bu depoda "pozitif" demektir; onu
 *      "tiklanabilir" icin kullanmak iki anlami birbirine karistirir.
 *
 * KARAR: fiyat VARSAYILAN OLARAK govde renginde ve ALTI CIZILI DEGIL.
 * Linklik yalniz :hover ve :focus-visible'da ortaya cikar.
 * ⚠ ERISILEBILIRLIK: `:focus-visible` AYRI BIR SECICI olarak duruyor - link
 * "yalnizca fareyle kesfedilebilir" DEGIL; klavyeyle gezilince de gorunur
 * (ayrica genel odak halkasi kurali da <a>'yi kapsiyor).
 * href / title / target=_blank / rel=noopener / stopPropagation ve `ex-yok`
 * hucresinde link OLMAMASI: hicbiri degismedi, hepsi app.js'te ve testli.
 */
.ex-link.link-acik {
  color: inherit;
  text-decoration: none;
  cursor: pointer;
}

.ex-link.link-acik:hover,
.ex-link.link-acik:focus-visible {
  color: var(--accent-foreground);
  text-decoration: underline solid;
  text-underline-offset: 2px;
}

.rota-ok {
  color: var(--muted-foreground);
}

/* ---------------------------------------------------------------------------
 * EN IYI YON sutunu — W-E MADDE 3, GURULTU AZALTMA.
 *
 * ONCE: rota + tepe/boyut + BUYUK HARFLI KIRMIZI CUMLE + uzun aciklama = satir
 * basina 3 satir metin, 30 satirda metin duvari.
 * SIMDI: birincil bilgi (rota, sayilar) one cikar; durum bir ROZETtir; kod ve
 * aciklama `text-xs` + `muted-foreground` ile geri cekilir. Tam gerekce hucre
 * `title`inda ve sembol blogunda kirpilmamis durur - hicbir sey silinmedi.
 * ------------------------------------------------------------------------ */
.h-yon {
  min-width: 21rem;
}

.yon-rota {
  color: var(--foreground);
  font-weight: 500;
  white-space: nowrap;
}

.yon-sayilar {
  font-size: 12px;
  white-space: nowrap;
  margin-top: 0.1rem;
}

.yon-durum {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  align-items: baseline;
  margin-top: 0.25rem;
}

.yon-kod {
  font-family: var(--yazi-mono);
  font-size: 11px;
  color: var(--muted-foreground);
  letter-spacing: 0.02em;
}

.yon-aciklama {
  flex: 1 1 12rem;
  font-size: 11px;
  color: var(--muted-foreground);
  overflow-wrap: anywhere;
}

/* boyut isaretine gore - yine YESIL DEGIL. */
.s-pozitif {
  color: var(--poz);
}

.s-negatif {
  color: var(--neg);
}

.s-yok {
  color: var(--muted-foreground);
}

/* ===========================================================================
 * TAZELIK (yas/esik) ve DERINLIK (kademe) — "elendi" demek YETMEZ.
 *
 * OLCULDU (canli): asama 2'deki 1655 elemenin 1019'u (%62) `STALE_QUOTE`, kok
 * sebep 2 000 ms'lik ORTAK defter penceresi. Ve ayri bir olcumde: $1000'lik
 * hicbir rota karli cikmadi, baskin sebep cekim ucreti DEGIL DERINLIKTI.
 * Iki sutun da bu iki olcumu ekrana getirir.
 *
 * 🔴 YESIL YOK — L2 SOZLESMESI. "Esik icinde" olmak KARLI olmak DEGILDIR;
 * `var(--ok)` bu blokta gecmez ve `yesil-yalniz-executable.test.ts` zaten
 * kizartirdi. Taze olan NOTR (`--foreground`) kalir, ovulmez.
 *
 * 🔴 RENK TEK AYIRT EDICI DEGIL (erisilebilirlik). Metin zaten ayrisik
 * ("1413 ms / 2000 ms" · "OLCULEMEDI" · "ALAN YOK") ve KORUNUR; renk yalniz
 * o ayrimi HIZLANDIRIR. Ayrica "olculemedi" KESIKLI cizgi tasir — `.t-bilinmiyor`
 * ile AYNI gorsel dil (dolu/duz = karar verildi, kesikli = olculmedi), yeni bir
 * dil ICAT EDILMEDI.
 * ======================================================================== */
/* 🔴 `.h-yas` DEGIL: o ad FIYAT tablosuna ait (`tr.izlenmiyor .h-yas`, asagida)
   ve BASKA bir olcumu anlatir. Iki kavram, iki ad. */
.h-tazelik,
.h-kademe {
  font-family: var(--yazi-mono);
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  white-space: nowrap;
}

/* Olculdu ve esik ICINDE: notr govde rengi. Ovgu YOK. */
.y-taze {
  color: var(--foreground);
}

/* Olculdu ve esik ASILDI — satirin ELENME sebebi. `.d-hayir` ile ayni token. */
.y-bayat {
  color: var(--hayir);
  font-weight: 500;
}

/* Sayi var ama kiyaslanacak esik YOK: hukum verilemez -> uyari tonu. */
.y-kiyassiz {
  color: var(--riskli);
}

/* OLCULEMEDI: kesikli cizgi = "olculmedi", `.t-bilinmiyor`un dili. */
.y-olculemedi,
.k-olculemedi {
  color: var(--muted-foreground);
  border-bottom: 1px dashed var(--ring);
}

/* ALAN YOK: olcum DENENMEDI bile - kesikli cizgi YOK, cunku o "olcum vardi,
   sonuc yok" derdi. Italik sans, sayi olmadigini BICIMLE de soyler. */
.y-alanyok,
.k-alanyok {
  color: var(--muted-foreground);
  font-family: var(--yazi-sans);
  font-style: italic;
}

/* Iki bacak AYNI derinlikten okundu - soylenecek ekstra bir sey yok. */
.k-esit {
  color: var(--muted-foreground);
}

/* 🔴 IKI BACAK AYRI DERINLIKTEN okundu: VWAP'i SIG olan bacak belirler.
   Bir ariza degil ama DIKKAT gerektirir -> `.y-kiyassiz` ile ayni uyari tonu. */
.k-ayrisik {
  color: var(--riskli);
}

/* Eleme ozetindeki UYGULANAN ESIKLER cumlesi. `.h-sebep` ile ayni olcek:
   gerekce metni govde metni degildir, sayilarin yanindaki aciklamadir. */
.eleme-esik {
  color: var(--muted-foreground);
  font-size: 12px;
  overflow-wrap: anywhere;
}

/*
 * ELEME OZETI (payda) — DORT CUMLE, DORT AYRI SEY. `app.js` bunlari `<p>` olarak
 * basiyordu ve DORDU DE TANIMSIZDI: ekranda ayni duz paragraf olarak, birbirinden
 * ayrisMADAN cikiyorlardi. En agiri `.eleme-uyari` idi (asagida).
 *
 * 🔴 RENK TEK AYIRT EDICI DEGIL (erisilebilirlik): dordunun her biri renge EK
 * OLARAK bir bicim isareti tasir — kalinlik · monospace · kesikli kenar+italik ·
 * dolu sol cubuk. Renk gorulemese bile dordu birbirinden ayrilir.
 * 🔴 YESIL YOK: bu depoda yesil YALNIZ EXECUTABLE demektir
 * (`tests/guards/yesil-yalniz-executable.test.ts` tutar).
 */

/* [1] BASLIK CUMLESI: `aday · degerlendirilen · eleme` sayilari — ya da "ELEME
   OLCUMU YOK". Ozetin en ust satiri, o yuzden NOTR ama KALIN. Ovgu ya da hukum
   tasimaz; `--foreground` bilerek secildi. Ikinci isaret: font-weight. */
.eleme-cumle {
  color: var(--foreground);
  font-weight: 500;
  font-size: 12px;
  font-variant-numeric: tabular-nums;
  overflow-wrap: anywhere;
}

/*
 * [2] KORUNUM DENKLEMI: `aday = degerlendirilen + asama-2 elemesi`. Bu bir
 * ARITMETIK OZDESLIKTIR, bir hukum degil — o yuzden monospace + tabular-nums:
 * bicim, okuyucuya "burada bir denklem var, iki tarafi karsilastir" der.
 *
 * 🔴 BU SINIF NOTR KALIR — ve notr kalmasi artik bir EKSIK DEGIL, bir KARAR:
 * `korunum TUTUYOR` dogrulanmis bir KAR degildir, ovulmez (yesil zaten yasak).
 * TUTMUYOR hali ise `app.js` `korunumSinifi()` tarafindan EK OLARAK
 * `.eleme-uyari` alir — ayrim cumlenin metninden degil, `elemeOzeti`nin
 * `korunumTutuyor` BAYRAGINDAN gelir (metne bakan bir ayrim, cumle degistigi
 * an sessizce kaybolurdu).
 *
 * ⚠ SIRA ONEMLI: `.eleme-uyari` bu kuraldan SONRA gelir, iki secici de ayni
 * ozgullukte (0,1,0) — yani cakisan `color` uyaridan gelir, `font-family`/
 * `tabular-nums` ise buradan gelmeye devam eder. Denklem dizgisi kaybolmaz.
 */
.eleme-korunum {
  color: var(--muted-foreground);
  font-family: var(--yazi-mono);
  font-variant-numeric: tabular-nums;
  font-size: 12px;
  overflow-wrap: anywhere;
}

/*
 * [3] ASAMA-1 NOTU: "asama 1 elemesi `aday` ile TOPLANMAZ — birimler ayni
 * degil". Bir ariza degil, bir OLCUM SINIRIDIR: okuyucuyu yanlis bir toplamdan
 * alikoyar. Depodaki "olculemez / hukum degil" dili KESIKLI cizgidir
 * (`.t-bilinmiyor`, `.y-olculemedi`); ayni dil burada sol kenara tasindi.
 * Italik (`.y-alanyok` ile ayni) "bu bir sayi degil, bir kayittir" der.
 * Ikinci isaret: kesikli kenar + italik.
 */
.eleme-not {
  color: var(--muted-foreground);
  font-style: italic;
  font-size: 12px;
  border-left: 2px dashed var(--ring);
  padding-left: 0.5rem;
  overflow-wrap: anywhere;
}

/*
 * [4] 🔴 PAYDA YALAN SOYLUYOR. Sebep dagiliminin toplami eleme sayisini
 * TUTMUYORSA ekrandaki sayilarin kendisi guvenilmezdir. Bu, bu deponun merkez
 * ilkesinin ("kanitlanamayani gosterme ama NEDEN kanitlanamadigini SOYLE") tam
 * karsiligidir — ve bugune kadar STILSIZ bir <p> olarak, hicbir vurgu olmadan
 * cikiyordu.
 *
 * `--hayir` secildi (`.y-bayat` / `.d-hayir` ile AYNI token): bu bir belirsizlik
 * degil, bir TUTARSIZLIK. `--riskli` "dikkat" der, oysa burada soylenen sey
 * "bu sayilar kendileriyle celisiyor"dur.
 *
 * Ikinci ve ucuncu isaret: DOLU sol cubuk (kesikli DEGIL — kesikli bu depoda
 * "olculmedi" demektir, oysa burada olculdu ve TUTMADI) + kalin yazi. Metin
 * zaten "UYARI:" ile basliyor, yani renk korlugunde de mesaj tamdir.
 */
.eleme-uyari {
  color: color-mix(in oklch, var(--hayir) 80%, var(--foreground));
  background: color-mix(in oklch, var(--hayir) 10%, transparent);
  border-left: 3px solid var(--hayir);
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  padding: 0.4rem 0.6rem;
  margin: 0.5rem 0;
  font-weight: 600;
  font-size: 12px;
  overflow-wrap: anywhere;
}

/* DURUM METIN RENGI: yesil YALNIZ burada. */
.d-ok {
  color: var(--ok);
}

.d-riskli {
  color: var(--riskli);
}

.d-hayir {
  color: var(--hayir);
}

.d-yok {
  color: var(--yok);
}

.h-veri.eksik {
  color: var(--riskli);
}

.ingress-float {
  color: var(--riskli);
}

.ingress-string {
  color: var(--muted-foreground);
}

/* gerekce: TAM METIN sarilir, ASLA kirpilmaz (L6). */
.h-sebep {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  max-width: 42rem;
  color: var(--muted-foreground);
  font-size: 12px;
}

/*
 * 🔴 `display: flex` BILEREK KULLANILMADI: `.h-durum` bir <td>'dir ve bir
 * tablo hucresine flex vermek onu sutun hizalama algoritmasindan cikarir
 * (anonim hucre sarmalayicisi olusur). Ayni gorsel sonuc satir-ici
 * elemanlarla ve margin ile aliniyor. `.yon-durum` ise bir <div>'dir, orada
 * flex serbest.
 */
.h-durum {
  min-width: 14rem;
}

.h-durum .rozet {
  margin-right: 0.35rem;
  vertical-align: middle;
}

.h-durum .yon-kod,
.h-durum .yon-aciklama {
  margin-right: 0.35rem;
}

/* ---- V2: sembol blogu ---- */
#detay h2 {
  display: flex;
  gap: 0.75rem;
  align-items: baseline;
  flex-wrap: wrap;
}

#detay-baslik {
  font-size: 15px;
  font-weight: 600;
  color: var(--foreground);
  letter-spacing: 0.06em;
}

.blok-satir {
  display: flex;
  gap: 0.75rem;
  align-items: baseline;
  flex-wrap: wrap;
  padding: 0.35rem 0.4rem;
  border-bottom: 1px solid var(--border);
  font-size: 13px;
}

.blok-satir:last-child {
  border-bottom: 0;
}

.blok-borsa {
  min-width: 7rem;
  color: var(--foreground);
  font-weight: 500;
}

.blok-fiyat {
  min-width: 9rem;
}

.blok-alis {
  min-width: 11rem;
  color: var(--muted-foreground);
}

.blok-isaret {
  padding: 0 0.45rem;
  border-radius: 9999px;
  font-size: 11px;
  font-weight: 500;
}

.blok-isaret.ex-ucuz {
  background: var(--vurgu-ucuz);
}

.blok-isaret.ex-pahali {
  background: var(--vurgu-pahali);
}

.blok-not {
  color: var(--muted-foreground);
  font-size: 11px;
}

.blok-yok {
  opacity: 0.6;
}

/* ---- ROTALAR (catal) ---- */
.rota {
  margin-top: 0.5rem;
  padding: 0.6rem 0.75rem;
  border: 1px solid var(--border);
  border-left: 3px solid var(--yok);
  border-radius: var(--radius-lg);
  background: var(--background);
}

.rota.d-ok {
  border-left-color: var(--ok);
}

.rota.d-riskli {
  border-left-color: var(--riskli);
}

.rota.d-hayir {
  border-left-color: var(--hayir);
}

.rota-ust {
  display: flex;
  gap: 0.9rem;
  flex-wrap: wrap;
  align-items: baseline;
}

.rota-yon {
  min-width: 14rem;
  color: var(--foreground);
  font-weight: 500;
}

.rota-tepe,
.rota-net {
  color: var(--muted-foreground);
  font-size: 12px;
}

.rota-boyut {
  font-size: 12px;
}

/* V4(a): kodun insan dilindeki karsiligi. */
.rota-aciklama {
  margin-top: 0.3rem;
  color: var(--muted-foreground);
  font-size: 12px;
  overflow-wrap: anywhere;
}

.rota-kimlik {
  margin-top: 0.15rem;
  color: var(--muted-foreground);
  font-size: 11px;
  opacity: 0.85;
}

.rota-ac {
  margin-top: 0.4rem;
  height: 1.5rem;
  font-size: 11px;
  padding: 0 0.5rem;
}

/* KUSUR 2: matristen indirilen rakamin yanindaki uyari. */
.rota-supheli {
  margin-top: 0.35rem;
  padding: 0.35rem 0.55rem;
  border: 1px dashed color-mix(in oklch, var(--riskli) 60%, transparent);
  border-radius: var(--radius-md);
  color: var(--riskli);
  font-size: 11px;
  overflow-wrap: anywhere;
}

/* 1256 karakterlik gerekce KIRPILMAZ - sarilir. */
.rota-sebep {
  margin: 0.4rem 0 0;
  color: var(--muted-foreground);
  font-size: 12px;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  border-left: 2px solid var(--border);
  padding-left: 0.6rem;
}

.kanit-yok {
  color: var(--yok);
}

#evidence-histogram h3 {
  margin: 1rem 0 0.4rem;
  font-size: 12px;
  font-weight: 600;
  color: var(--foreground);
  letter-spacing: 0.06em;
}

#evidence-histogram ul {
  margin: 0;
  padding-left: 1.2rem;
  color: var(--muted-foreground);
  font-size: 12px;
}

/* ---- yas soluklugu (L3/L7) ---- */
[data-yas="gec"] {
  opacity: 0.72;
}

[data-yas="bayat"] {
  opacity: 0.45;
}

[data-yas="bilinmiyor"] {
  opacity: 0.45;
  color: var(--muted-foreground);
}

tr[data-yas="gec"] td {
  opacity: 0.85;
}

tr[data-yas="bayat"] td {
  opacity: 0.55;
}

/*
 * R2 - "artik izlenmiyor" BAYAT DEGILDIR.
 * Bayat = veri geldi, eskidi. Izlenmiyor = abonelik dustu, YENI VERI GELMEYECEK.
 */
tr.izlenmiyor td {
  opacity: 0.32;
}

tr.izlenmiyor td.h-sembol {
  box-shadow: inset 3px 0 0 0 var(--muted-foreground);
}

tr.izlenmiyor .h-yas {
  opacity: 1;
  color: var(--muted-foreground);
  font-style: italic;
  white-space: nowrap;
}

[data-yas="izlenmiyor"] {
  color: var(--muted-foreground);
}

/* Kopukken TUM veri solar - eski sayi taze gibi gosterilmez. */
body[data-baglanti="kopuk"] #prices,
body[data-baglanti="kopuk"] #evidence,
body[data-baglanti="kopuk"] #detay,
body[data-baglanti="kopuk"] #feeds {
  opacity: 0.5;
  filter: grayscale(0.4);
}

/* ---- vurgu (L5) ----
 * Titresim/yanip sonme YOK: tek bir sonme. prefers-reduced-motion acikken
 * animasyon hic calismaz; hucre 600ms sabit arka plan alir, JS sinifi kaldirir.
 */
.flash {
  background: var(--flash);
  animation: sonme 600ms ease-out 1;
}

@keyframes sonme {
  from {
    background: var(--flash);
  }
  to {
    background: transparent;
  }
}

@media (prefers-reduced-motion: reduce) {
  .flash {
    animation: none;
  }
  * {
    transition: none !important;
  }
}

/* ---- dar ekran ---- */
@media (max-width: 760px) {
  section {
    margin: 0.5rem;
    padding: 0.85rem;
  }
  .serit,
  #notlar,
  #kontroller {
    margin: 0.4rem 0.4rem 0;
  }
  th {
    height: 2.1rem;
    padding: 0 0.3rem;
  }
  td {
    padding: 0.3rem;
  }
  .h-yon {
    min-width: 14rem;
  }
  .blok-borsa,
  .blok-fiyat,
  .blok-alis,
  .rota-yon {
    min-width: 0;
  }
  #k-filtre {
    width: 100%;
  }
}

/*
 * MALIYET DOKUMU SATIRI — kanit satirinin HEMEN ALTINDA, tam genislikte.
 *
 * 🔴 KIRPILMAZ. `.h-sebep` ile AYNI gerekce ve AYNI iki bildirim
 * (`white-space: pre-wrap` + `overflow-wrap: anywhere`): dokum cumlesi bir
 * OZET degil bir KANIT dizisidir; kirpilan kalem, denetlenemeyen kalemdir.
 *
 * 🔴 YESIL YOK (`tests/guards/yesil-yalniz-executable.test.ts`): bu satirda
 * "kar edersin" yaziyor olabilir ama o bir OLASILIKTIR, `EXECUTABLE` degil.
 * Zemin notr: var olan `--muted` ailesinden, ayirt edici ama bastirmayan.
 * Sol cubuk KESIKLI degil DOLU ama SOLUK — satirin devami oldugunu soyler.
 */
.kanit-dokum {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-size: 12px;
  padding: 0.35rem 0.6rem;
}

/*
 * AYNI DOKUM, BASKA TABLO — ROTA LISTESI (`#t-rotalar`).
 *
 * 🔴 `.kanit-dokum` ILE SINIF PAYLASILMAZ. Iki tablo, iki baglam: kanit tablosu
 * 12 sutunlu bir DENETIM dokumudur, rota listesi 6 sutunlu bir KARAR
 * listesidir. `h-yas` / `h-tazelik` ayriminin gerekcesiyle ayni gerekce
 * (`app.js` `guncelleRotaSatiri` civari): paylasilan bir sinif, bir tabloya
 * yapilan ayari otekine SESSIZCE tasir.
 *
 * 🔴 KIRPILMAZ. `.h-sebep` ve `.kanit-dokum` ile AYNI iki bildirim
 * (`white-space: pre-wrap` + `overflow-wrap: anywhere`) — dokum bir OZET degil
 * bir KANIT dizisidir; kirpilan kalem, denetlenemeyen kalemdir.
 * `ellipsis` / `line-clamp` / `overflow: hidden` YOK.
 *
 * 🔴 ARKA PLAN BURADA GEREKMIYOR — OLCULDU, VARSAYILMADI. Bu hucre 6 sutunu
 * birden kapliyor ve yatay kaydirmada sticky `td.r-sembol` (z-index 3) ile
 * `td.r-spread` (z-index 2) USTUNDEN gecer. Ikisi de `background: var(--card)`
 * ile OPAK (yukaridaki sticky bloklari), yani dokum metni altlarindan SIZMAZ.
 * Zeminin kendisi `dokumCumlesi`nin verdigi ton sinifindan gelir (`.dokum` /
 * `.dokum-kanitlanamadi`, hemen asagida) — yerlesim burada, TON orada.
 *
 * SOLDAN GIRINTI: bu satir bir ONCEKI satirin DEVAMIDIR, yeni bir rota degil.
 */
.rota-dokum {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-size: 12px;
  padding: 0.3rem 0.6rem 0.45rem 1rem;
}

/*
 * NOTR TABAN. `dokumCumlesi` her ozete bu sinifi verir; `kanit-dokum` hucrenin
 * YERLESIMINI, `dokum` ise TONUNU tasir. Ayri tutulmalari sebepsiz degil: ton
 * `dokum-kanitlanamadi` ile DEGISIR, yerlesim DEGISMEZ.
 *
 * 🔴 SINIF TANIMSIZ BIRAKILMAZ. `app.js` bu adi URETIYOR; karsiligi olmayan bir
 * sinif, ekranda hicbir sey soylemeyen ama okuyana "stillenmis" izlenimi veren
 * olu bir isarettir.
 */
.dokum {
  color: var(--muted-foreground);
  background: color-mix(in oklch, var(--muted) 45%, transparent);
  border-left: 3px solid color-mix(in oklch, var(--muted-foreground) 35%, transparent);
}

/*
 * KANITLANAMAYAN BIR PARCA VARSA. `--hayir`, `.eleme-uyari` ve `.y-bayat` ile
 * AYNI token — ayni sebeple: burada soylenen sey "dikkat et" degil, "bu
 * satirdaki bir kalem KANITLANAMADI"dir. Renk korlugunde de mesaj tamdir:
 * cumlenin kendisinde `KANITLANAMADI` / `kanitlanamadi` kelimesi YAZILI.
 */
.dokum-kanitlanamadi {
  color: color-mix(in oklch, var(--hayir) 75%, var(--foreground));
  border-left-color: var(--hayir);
  background: color-mix(in oklch, var(--hayir) 8%, transparent);
}

/* ==========================================================================
 * BAKIYE YOLCULUGU — ODAKTAKI ROTADA PARANIN ADIM ADIM NEREDE OLDUGU
 * (`app.js` `bakiyeYolculugu` / `cizYolculukHucresi`)
 *
 * Dokum satirinin ALTINDAKI ucuncu `<tr>`; ayni 6 sutunu kaplar. Bu kutunun
 * ICERIGI degisti (seviye seviye emir defteri -> paranin yolculugu); YERI ve
 * ACILMA KURALI degismedi.
 *
 * 🔴 OPAK ZEMIN SART — VE BU, `.rota-dokum`DEN AYRILDIGI TEK YER. Dokum
 * hucresinin kendi ton sinifi (`.dokum` / `.dokum-kanitlanamadi`) bir zemin
 * getiriyor; yolculugun ton sinifi YOK. Zeminsiz birakilirsa yatay kaydirmada
 * sticky `td.r-sembol` (z-index 3) ve `td.r-spread` (z-index 2) ALTINDAN gecen
 * metin sizar. `var(--card)` ikisiyle AYNI zemindir.
 *
 * 🔴 KIRPMA YOK — `.rota-dokum` ile AYNI iki bildirim. Kirpilan bir bakiye
 * satiri, denetlenemeyen bir bakiyedir. `ellipsis` / `line-clamp` /
 * `overflow: hidden` YOK.
 *
 * 🔴 YESIL TOKEN YOK (L2). Burada gorunen hicbir sey "kazanabilirsin" demez;
 * bakiye bir OLCUMDUR, bir hukum degil.
 * ======================================================================== */
.rota-yolculuk {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
  font-size: 12px;
  padding: 0.35rem 0.6rem 0.55rem 1rem;
  background: var(--card);
  color: var(--muted-foreground);
  border-left: 3px solid color-mix(in oklch, var(--muted-foreground) 35%, transparent);
}

/* "$500.00 koyarsan" — yolculugun BASLIGI. Buyukluk VERIDEN gelir. */
.yol-baslik {
  color: var(--foreground);
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  margin-bottom: 0.35rem;
}

/* Her adim (ALIS / CEKIM / SATIS) kendi blogunda, ALT ALTA. */
.yol-adim {
  margin-bottom: 0.4rem;
  padding-left: 0.6rem;
  border-left: 2px solid color-mix(in oklch, var(--muted-foreground) 25%, transparent);
}

.yol-adim:last-child {
  margin-bottom: 0;
}

/* ADIMIN ADI ve YERI: "ALIS  gate" — hangi bacak, hangi borsa. */
.yol-ad {
  color: var(--foreground);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: 0.04em;
}

/* O adimin ANA sayisi — bakiyenin gorunur oldugu satir. */
.yol-ana {
  font-family: var(--yazi-mono);
  font-variant-numeric: tabular-nums;
  color: var(--foreground);
}

/* Kalemler (komisyon / kayma / defter tavani) ve gerekceler. */
.yol-alt {
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}

/* TEK YON SONUC — elinde ne kaldi. Cizgiyle ayrilir, RENKLE degil. */
.yol-sonuc {
  margin-top: 0.4rem;
  padding-top: 0.35rem;
  border-top: 1px solid color-mix(in oklch, var(--muted-foreground) 30%, transparent);
  font-family: var(--yazi-mono);
  font-variant-numeric: tabular-nums;
  color: var(--foreground);
  font-weight: 600;
}

/* DONUS satiri — kanitlandiysa notr. */
.yol-donus {
  margin-top: 0.3rem;
  font-variant-numeric: tabular-nums;
}

/*
 * KANITLANAMAYAN DONUS. `--hayir`, `.dokum-kanitlanamadi` ve `.eleme-uyari`
 * ile AYNI token, ayni sebeple. Renk korlugunde de mesaj tamdir: cumlenin
 * kendisinde `KANITLANAMADI` kelimesi YAZILI.
 */
.yol-uyari {
  color: color-mix(in oklch, var(--hayir) 75%, var(--foreground));
}

/*
 * DORT YOKLUK DURUMUNUN HEPSI (kayit-yok / basamak-yok / ret / bozuk). Ayni
 * sinif, cunku DORDU DE bir YOKLUK cumlesidir; AYIRT EDEN sey METINDIR ve
 * metin `app.js` `bakiyeYolculugu`nda uretilir — renk degil, KELIME ayirir.
 */
.yol-bos {
  color: color-mix(in oklch, var(--hayir) 75%, var(--foreground));
  font-style: italic;
}

/*
 * ABSURT BRUT SUPHESI (`brutRatioSuspect`) — SPREAD % hucresinin yanindaki
 * isaret. Geometri `.d-rozet`ten GELIR (yeni bir gorsel dil ICAT EDILMEDI);
 * burada yalnizca renk ve agirlik tanimlanir.
 *
 * 🔴 YESIL (`--ok`) KULLANILMAZ: bu depoda yesil YALNIZ `EXECUTABLE`in ve depo
 * emir GONDERMEZ. Ayni gerekce `.d-all-green` ve `.d-blocker` yaninda da yazili,
 * ve `tests/guards/yesil-yalniz-executable.test.ts` bunu mekanik kolluyor.
 *
 * IKI SINIF, IKI AYRI OLGU — tek kovaya toplanmadi:
 *   birim  = AYNI varlik, FARKLI olcek (1 vs 1000)   -> --riskli (belirsizlik)
 *   kimlik = FARKLI varlik, AYNI sembol              -> --destructive (celiski)
 * Ayni iki-basamakli ayrim `.d-rozet-kimlik`/`.d-rozet-celiski` ikilisinde de
 * var; bu onun SPREAD % sutunundaki karsiligidir, IKINCI bir kural degil.
 */
.defter-tablo td.d-spread .d-brut-suspect {
  display: inline-block;
  margin-left: 0.3rem;
  font-size: 10px;
  font-weight: 600;
  line-height: 1;
  white-space: nowrap;
  cursor: help;
}

.defter-tablo td.d-spread .d-brut-suspect-birim {
  color: var(--riskli);
}

.defter-tablo td.d-spread .d-brut-suspect-kimlik {
  color: var(--destructive);
}

/*
 * 🔴 UCUNCU SINIF — `OUTLIER_VENUE_SUSPECT`. Renk `--destructive`, cunku bu
 * sinif BELIRSIZLIK degil KANIT tasir: iki BAGIMSIZ karsi taraf birbirini
 * dogruluyor ve sapan taraf TEK. Ayni "belirsizlik vs celiski" ayrimi
 * `.d-rozet-kimlik`/`.d-rozet-celiski` ikilisinde de var; bu UCUNCU bir gorsel
 * dil DEGIL, o ayrimin ayni tarafi.
 */
.defter-tablo td.d-spread .d-brut-suspect-aykiri {
  color: var(--destructive);
}
