/* =========================================================================
   Olay Yönetim Sistemi — tasarım sistemi
   Sakin, kurumsal, okunaklı. Renk tek ayırt edici değil: ikon ve etiket de var.
   ========================================================================= */

:root {
  /* Tipografi — 4px'lik ölçek */
  --yz-12: 12px; --yz-13: 13px; --yz-15: 15px; --yz-17: 17px; --yz-20: 20px; --yz-24: 24px;

  /* Boşluk */
  --b1: 4px; --b2: 8px; --b3: 12px; --b4: 16px; --b5: 24px; --b6: 32px; --b7: 48px;

  --yaricap: 12px;
  --yaricap-kucuk: 8px;

  /* -----------------------------------------------------------------
     Freelance Group marka paleti
       lacivert #0C0C89 · krem #FFFEF0 · siyah #161616
     Krem zemin sıcak olduğu için griler de sıcak tonda seçildi;
     nötr gri krem üzerinde kirli görünüyor.
     ----------------------------------------------------------------- */
  --marka-lacivert: #0C0C89;
  --marka-krem:     #FFFEF0;
  --marka-siyah:    #161616;

  /* Açık tema — beyaz (varsayılan) */
  --zemin:       #F4F5F7;
  --yuzey:       #FFFFFF;
  --yuzey-2:     #F8F9FA;
  --metin:       #161616;
  --metin-soluk: #5C6470;
  --cizgi:       #E5E7EB;
  --cizgi-koyu:  #D0D4DA;

  --vurgu:       #0C0C89;
  --vurgu-koyu:  #08085F;
  --vurgu-metin: #FFFFFF;
  --vurgu-zemin: #ECECF8;

  --iyi:       #15803D;  --iyi-zemin:  #E7F4EC;
  --uyari:     #B45309;  --uyari-zemin:#FDF3E3;
  --kotu:      #B91C1C;  --kotu-zemin: #FDECEB;

  /* -----------------------------------------------------------------
     Yapay zekâ risk ölçeği — neon yeşil → neon turuncu → neon pembe.

     Raporun kendi paleti (kurumsal kırmızı/turuncu/yeşil) insanın SEÇTİĞİ
     önem seviyesini anlatıyor; bu üçlü ise makinenin biçtiği riski. Aynı
     ölçeği paylaşmıyorlar: doygunluk ve parlaklık farkı ikisini yan yana
     duran grafiklerde ayırıyor.
     ----------------------------------------------------------------- */
  --ai-dusuk:  #39FF88;
  --ai-orta:   #FFB000;
  --ai-yuksek: #FF2E63;

  /* Çubuk kenarı. Açık temada dolgudan KOYU: neon tonlar beyaz zeminde
     kenarsız kalınca sınırları eriyor, özellikle yeşil. */
  --ai-dusuk-kenar:  #12A85A;
  --ai-orta-kenar:   #C77F00;
  --ai-yuksek-kenar: #C4003F;

  /* Metin için ayrı ton: #FF2E63 beyaz üzerinde 3.6:1 kalıyor, küçük yazıya
     yetmiyor. Dolgu neon kalıyor, yazı okunur tonu kullanıyor. */
  --ai-yuksek-metin: #C4003F;

  --golge:    0 1px 2px rgb(22 22 22 / .05), 0 1px 3px rgb(22 22 22 / .08);
  --golge-yuksek: 0 4px 12px rgb(22 22 22 / .10), 0 12px 32px rgb(22 22 22 / .14);

  --kenar-cubugu: 260px;
  --ust-cubuk: 56px;
  --alt-cubuk: 64px;
}

/* -------------------------------------------------------------------------
   İsteğe bağlı krem tema — markanın #FFFEF0 tonu.
   Açmak için: <html data-tema="krem">
   ------------------------------------------------------------------------- */
[data-tema="krem"] {
  --zemin:       #F5F3E3;
  --yuzey:       #FFFEF0;
  --yuzey-2:     #FAF8E9;
  --metin:       #161616;
  --metin-soluk: #63614F;
  --cizgi:       #E4E1CB;
  --cizgi-koyu:  #CFCBAE;

  --vurgu-metin: #FFFEF0;
  --vurgu-zemin: #E6E6F2;

  --iyi-zemin:  #E4F0E3;
  --uyari-zemin:#F8EED7;
  --kotu-zemin: #F8E4DF;
}

@media (prefers-color-scheme: dark) {
  :root {

    /* Karanlıkta marka laciverti okunmayacak kadar koyu kalıyor;
       aynı renk ailesinden açılmış bir ton kullanılıyor. */
    --zemin:       #121211;
    --yuzey:       #1A1A19;
    --yuzey-2:     #212120;
    --metin:       #FFFEF0;
    --metin-soluk: #A3A192;
    --cizgi:       #2C2C2A;
    --cizgi-koyu:  #3D3D3A;

    --vurgu:       #8A8AF5;
    --vurgu-koyu:  #A3A3FF;
    --vurgu-metin: #0A0A2E;
    --vurgu-zemin: #1C1C3D;

    --iyi:   #5FCB86;  --iyi-zemin:   #13251A;
    --uyari: #E0A93F;  --uyari-zemin: #2A2110;
    --kotu:  #EF7A6E;  --kotu-zemin:  #2C1715;

    /* Neon asıl yerini karanlıkta buluyor: dolgular olduğu gibi kalıyor,
       kenar ise koyu zeminde ayrışsın diye dolgudan AÇIK seçiliyor —
       açık temadakinin tersi. */
    --ai-dusuk-kenar:  #8CFFC0;
    --ai-orta-kenar:   #FFD166;
    --ai-yuksek-kenar: #FF7A9E;

    /* Koyu zeminde neon pembe zaten yüksek kontrastlı; yazı da dolguyla
       aynı tonu kullanabiliyor. */
    --ai-yuksek-metin: #FF2E63;

    --golge: 0 1px 2px rgb(0 0 0 / .4), 0 1px 3px rgb(0 0 0 / .3);
    --golge-yuksek: 0 4px 12px rgb(0 0 0 / .5), 0 12px 32px rgb(0 0 0 / .45);
  }
}

* { box-sizing: border-box; }

html, body { height: 100%; }

body {
  margin: 0;
  background: var(--zemin);
  color: var(--metin);
  font: var(--yz-15)/1.55 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
        "Helvetica Neue", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  overscroll-behavior-y: none;
}

h1, h2, h3 { margin: 0; font-weight: 650; line-height: 1.3; }
h1 { font-size: var(--yz-24); letter-spacing: -.01em; }
h2 { font-size: var(--yz-20); }
h3 { font-size: var(--yz-17); }
p  { margin: 0; }

a { color: var(--vurgu); text-decoration: none; }
a:hover { text-decoration: underline; }

:focus-visible {
  outline: 2px solid var(--vurgu);
  outline-offset: 2px;
  border-radius: var(--yaricap-kucuk);
}

.gizli { display: none !important; }
.sr {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ---------------------------------------------------------------- ikonlar */

.ikon { width: 20px; height: 20px; flex: none; stroke-width: 1.75; }
.ikon-kucuk { width: 16px; height: 16px; }
.ikon-buyuk { width: 24px; height: 24px; }

/* ---------------------------------------------------------------- düzen */

.uygulama { min-height: 100dvh; display: flex; flex-direction: column; }

/* Üst çubuk (mobil) */
.ust-cubuk {
  position: sticky; top: 0; z-index: 20;
  height: var(--ust-cubuk);
  display: flex; align-items: center; gap: var(--b3);
  padding: 0 var(--b4);
  background: color-mix(in srgb, var(--yuzey) 88%, transparent);
  backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--cizgi);
}
.ust-cubuk h1 { font-size: var(--yz-17); }
.ust-cubuk .sag { margin-left: auto; display: flex; align-items: center; gap: var(--b2); }

/* Kenar çubuğu (masaüstü) */
.kenar { display: none; }

.icerik {
  flex: 1;
  padding: var(--b4);
  padding-bottom: calc(var(--alt-cubuk) + env(safe-area-inset-bottom) + var(--b5));
  max-width: 1180px;
  width: 100%;
  margin: 0 auto;
}

/* Alt sekme çubuğu (mobil) */
.alt-cubuk {
  position: fixed; inset: auto 0 0 0; z-index: 30;
  height: calc(var(--alt-cubuk) + env(safe-area-inset-bottom));
  padding-bottom: env(safe-area-inset-bottom);
  display: grid; grid-auto-flow: column; grid-auto-columns: 1fr;
  background: color-mix(in srgb, var(--yuzey) 92%, transparent);
  backdrop-filter: blur(12px);
  border-top: 1px solid var(--cizgi);
}
.alt-cubuk a {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 2px; font-size: var(--yz-12); color: var(--metin-soluk);
  text-decoration: none; min-height: 44px;
}
.alt-cubuk a.etkin { color: var(--vurgu); font-weight: 600; }
.alt-cubuk a.orta .yuvarlak {
  width: 46px; height: 46px; border-radius: 50%;
  background: var(--vurgu); color: var(--vurgu-metin);
  display: grid; place-items: center; margin-top: -18px;
  box-shadow: var(--golge-yuksek);
}
.alt-cubuk a.orta { font-size: var(--yz-12); }

/* ------------------------------------------------------------------ kart */

.kart {
  background: var(--yuzey);
  border: 1px solid var(--cizgi);
  border-radius: var(--yaricap);
  box-shadow: var(--golge);
}
.kart-ic { padding: var(--b4); }
.kart + .kart { margin-top: var(--b3); }

.kart-baslik {
  display: flex; align-items: center; gap: var(--b2);
  padding: var(--b4); border-bottom: 1px solid var(--cizgi);
}
.kart-baslik h2, .kart-baslik h3 { margin-right: auto; }

/* ---------------------------------------------------------------- rozet */

.rozet {
  display: inline-flex; align-items: center; gap: var(--b1);
  padding: 2px var(--b2); border-radius: 999px;
  font-size: var(--yz-12); font-weight: 600; line-height: 1.6;
  background: var(--yuzey-2); color: var(--metin-soluk);
  border: 1px solid var(--cizgi);
  white-space: nowrap;
}
.rozet.iyi   { background: var(--iyi-zemin);   color: var(--iyi);   border-color: transparent; }
.rozet.uyari { background: var(--uyari-zemin); color: var(--uyari); border-color: transparent; }
.rozet.kotu  { background: var(--kotu-zemin);  color: var(--kotu);  border-color: transparent; }
.rozet.vurgu { background: var(--vurgu-zemin); color: var(--vurgu); border-color: transparent; }
/* Menü satırındaki "Deneme" rozeti — sayacın soluna sığması gerekiyor */
.rozet.mini { font-size: 10px; padding: 1px 5px; margin-left: auto; }

/* Önem noktası — renk tek başına ayırt edici değil, yanında etiket var */
.onem-nokta {
  width: 8px; height: 8px; border-radius: 50%; flex: none;
  box-shadow: 0 0 0 2px color-mix(in srgb, currentColor 20%, transparent);
}

/* ----------------------------------------------------------------- düğme */

.dugme {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--b2);
  min-height: 44px; padding: 0 var(--b4);
  font: inherit; font-weight: 600; font-size: var(--yz-15);
  border-radius: var(--yaricap-kucuk); border: 1px solid transparent;
  background: var(--vurgu); color: var(--vurgu-metin);
  cursor: pointer; white-space: nowrap;
  transition: background .12s ease, opacity .12s ease;
}
.dugme:hover { background: var(--vurgu-koyu); }
.dugme:disabled { opacity: .55; cursor: not-allowed; }
.dugme.tam { width: 100%; }

.dugme.ikincil { background: var(--yuzey); color: var(--metin); border-color: var(--cizgi-koyu); }
.dugme.ikincil:hover { background: var(--yuzey-2); }
.dugme.sessiz { background: transparent; color: var(--metin-soluk); }
.dugme.sessiz:hover { background: var(--yuzey-2); color: var(--metin); }
.dugme.tehlike { background: var(--kotu); color: #fff; }
.dugme.kucuk { min-height: 34px; padding: 0 var(--b3); font-size: var(--yz-13); }
.dugme.ikon-dugme { min-height: 40px; width: 40px; padding: 0; }

/* ------------------------------------------------------------------ form */

.alan { margin-bottom: var(--b4); }
.alan > label {
  display: block; margin-bottom: var(--b1);
  font-size: var(--yz-13); font-weight: 550; color: var(--metin-soluk);
}
.alan .ipucu { margin-top: var(--b1); font-size: var(--yz-12); color: var(--metin-soluk); }
.alan .hata-metni { margin-top: var(--b1); font-size: var(--yz-12); color: var(--kotu); }

input[type=text], input[type=tel], input[type=password], input[type=number],
input[type=date], input[type=search], input[type=email], input[type=time],
input[type=datetime-local], input[type=month], select, textarea {
  width: 100%; min-height: 44px; padding: var(--b2) var(--b3);
  font: inherit; color: var(--metin);
  background: var(--yuzey); border: 1px solid var(--cizgi-koyu);
  border-radius: var(--yaricap-kucuk);
  appearance: none;
}
textarea { min-height: 120px; resize: vertical; line-height: 1.55; padding-top: var(--b3); }
select {
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%235b6472' stroke-width='2'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat: no-repeat; background-position: right var(--b3) center; padding-right: var(--b6);
}
input:focus, select:focus, textarea:focus { outline: 2px solid var(--vurgu); outline-offset: 0; border-color: transparent; }
input.hatali, textarea.hatali, select.hatali { border-color: var(--kotu); }
input::placeholder, textarea::placeholder { color: var(--metin-soluk); opacity: .7; }

.onay { display: flex; align-items: center; gap: var(--b2); min-height: 44px; cursor: pointer; }
.onay input { width: 20px; height: 20px; min-height: 0; accent-color: var(--vurgu); }

.form-satir { display: grid; gap: var(--b3); }
@media (min-width: 640px) { .form-satir.iki { grid-template-columns: 1fr 1fr; } }

/* Çip seçici (şablon / önem / kategori) */
.cipler { display: flex; flex-wrap: wrap; gap: var(--b2); }
.cip {
  display: inline-flex; align-items: center; gap: var(--b2);
  min-height: 40px; padding: 0 var(--b3);
  border: 1px solid var(--cizgi-koyu); border-radius: 999px;
  background: var(--yuzey); color: var(--metin);
  font-size: var(--yz-13); font-weight: 550; cursor: pointer;
}
.cip:hover { background: var(--yuzey-2); }
.cip.secili { background: var(--vurgu-zemin); border-color: var(--vurgu); color: var(--vurgu); }

/* ----------------------------------------------------------------- tablo */

.tablo-sarmal { overflow-x: auto; border-radius: var(--yaricap); }
table.tablo { width: 100%; border-collapse: collapse; font-size: var(--yz-13); }
table.tablo th, table.tablo td {
  padding: var(--b3); text-align: right; border-bottom: 1px solid var(--cizgi);
  vertical-align: middle;
}
table.tablo th:first-child, table.tablo td:first-child,
table.tablo th, table.tablo td { text-align: left; }
table.tablo th {
  font-weight: 600; color: var(--metin-soluk); font-size: var(--yz-12);
  text-transform: uppercase; letter-spacing: .03em;
  background: var(--yuzey-2); position: sticky; top: 0;
}
table.tablo tbody tr:hover { background: var(--yuzey-2); }
table.tablo tbody tr { cursor: pointer; }
table.tablo td.sag, table.tablo th.sag { text-align: right; }

/* ----------------------------------------------------------- yetki matrisi
   Altı rol sütunu dar ekrana sığmıyor. Tablo yana kaydırılabilir
   (.tablo-sarmal zaten overflow-x veriyor); eylem adı sütunu yapışık
   kalıyor, yoksa kaydırınca hangi satırda olduğun kayboluyor. */

.yetki-tablo { min-width: 620px; }
.yetki-tablo td, .yetki-tablo th { vertical-align: top; }
.yetki-tablo tbody tr { cursor: default; }

.yetki-tablo .yetki-ad {
  position: sticky; left: 0; z-index: 1;
  background: var(--yuzey); min-width: 190px; max-width: 320px;
}

/* Tek role süzülmüşse tabloyu geniş tutmanın anlamı yok: telefonda yapışık
   ad sütunu tüm ekranı kaplıyor ve TEK değer sütunu görünmez oluyordu —
   yani süzgeç, sorunu çözmek yerine büyütüyordu. */
.yetki-tablo.tek-rol { min-width: 0; }
.yetki-tablo.tek-rol .yetki-ad { position: static; min-width: 0; }
.yetki-tablo thead .yetki-ad { background: var(--yuzey-2); z-index: 2; }
.yetki-tablo tbody tr:hover .yetki-ad { background: var(--yuzey-2); }

.yetki-hucre {
  display: inline-flex; flex-direction: column; align-items: center; gap: 2px;
  position: relative; min-width: 62px; padding: var(--b2);
  border: 1px solid var(--cizgi); border-radius: var(--yaricap);
  background: var(--yuzey); color: var(--metin-soluk);
  font: inherit; font-size: var(--yz-12); cursor: pointer;
}
.yetki-hucre:hover:not(.kilitli) { border-color: var(--cizgi-koyu); background: var(--yuzey-2); }
.yetki-hucre:disabled { opacity: .55; cursor: progress; }
.yetki-hucre.acik { background: var(--iyi-zemin); color: var(--iyi); border-color: transparent; }
.yetki-hucre.kilitli { cursor: not-allowed; opacity: .7; background: transparent; }

/* Varsayılandan sapmış hücre. Renk tek başına yetmiyor: açık/kapalı zaten
   renkle anlatılıyor, bu ondan farklı bir bilgi — "burada bilinçli bir
   değişiklik var" diyor. O yüzden ayrı bir işaret. */
.yetki-hucre.degisik { border-color: var(--vurgu); border-style: dashed; }
.yetki-nokta {
  position: absolute; top: -3px; right: -3px;
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--vurgu); border: 1px solid var(--yuzey);
}

/* ------------------------------------------------------------ talep türleri
   Alan blokları ve onay zinciri. Zincir yatay okunuyor: sıra görsel olarak
   da sıra gibi dursun, numaralı liste gibi değil. */

.alan-blok {
  padding: var(--b3);
  border: 1px solid var(--cizgi);
  border-radius: var(--yaricap-kucuk);
  margin-bottom: var(--b2);
  background: var(--yuzey-2);
}

.zincir { display: flex; flex-wrap: wrap; align-items: center; gap: var(--b2); }
.zincir-adim {
  display: inline-flex; align-items: center; gap: 4px;
  padding: var(--b1) var(--b3);
  border: 1px solid var(--cizgi-koyu); border-radius: var(--yaricap-kucuk);
  background: var(--yuzey); font-size: var(--yz-13);
}
.zincir-ok { color: var(--metin-soluk); display: inline-flex; }

/* Talep detayındaki dikey zincir. Atlanan adım da görünüyor: "bu neden bana
   gelmedi" sorusu ekrandan yanıtlanabilsin. */
.zincir-satir {
  display: flex; align-items: flex-start; gap: var(--b3);
  padding: var(--b3); border-bottom: 1px solid var(--cizgi);
}
.zincir-satir:last-child { border-bottom: 0; }
.zincir-no {
  flex: none; width: 24px; height: 24px; border-radius: 50%;
  display: grid; place-items: center; font-size: var(--yz-12);
  background: var(--yuzey-2); color: var(--metin-soluk);
  border: 1px solid var(--cizgi);
}
.zincir-satir.gecti  .zincir-no { background: var(--iyi-zemin); color: var(--iyi); border-color: transparent; }
.zincir-satir.sirada .zincir-no { background: var(--vurgu); color: var(--vurgu-metin); border-color: transparent; }
.zincir-satir.atlandi { opacity: .5; }
.zincir-satir.atlandi .zincir-no { text-decoration: line-through; }

/* ------------------------------------------------------------- olay kartı */

.olay-kart { display: block; width: 100%; text-align: left; border: 0; background: none; padding: 0; font: inherit; color: inherit; cursor: pointer; }
.olay-kart + .olay-kart { margin-top: var(--b3); }
.olay-kart .kart { transition: border-color .12s ease; }
.olay-kart:hover .kart { border-color: var(--cizgi-koyu); }

.olay-ust { display: flex; align-items: center; gap: var(--b2); margin-bottom: var(--b2); flex-wrap: wrap; }
.olay-metin {
  font-size: var(--yz-15); line-height: 1.55;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
  white-space: pre-wrap;
}
.olay-alt {
  display: flex; align-items: center; gap: var(--b3); flex-wrap: wrap;
  margin-top: var(--b3); font-size: var(--yz-12); color: var(--metin-soluk);
}
.olay-alt .parca { display: inline-flex; align-items: center; gap: var(--b1); }

/* Marka şeridi */
.marka-serit { width: 3px; border-radius: 3px 0 0 3px; flex: none; align-self: stretch; }
.kart.seritli { display: flex; overflow: hidden; }
.kart.seritli > .kart-ic { flex: 1; min-width: 0; }

/* ------------------------------------------------------------- boş durum */

.bos {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: var(--b3); padding: var(--b7) var(--b4); text-align: center; color: var(--metin-soluk);
}
.bos .ikon { width: 40px; height: 40px; opacity: .5; }
.bos h3 { color: var(--metin); }
.bos p { max-width: 380px; }

/* --------------------------------------------------------------- iskelet */

.iskelet {
  background: linear-gradient(90deg, var(--yuzey-2) 25%, var(--cizgi) 37%, var(--yuzey-2) 63%);
  background-size: 400% 100%;
  animation: iskelet-kay 1.4s ease infinite;
  border-radius: var(--yaricap-kucuk);
}
@keyframes iskelet-kay { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce) { .iskelet { animation: none; } }
.iskelet-satir { height: 14px; margin-bottom: var(--b2); }
.iskelet-satir.kisa { width: 40%; }

/* --------------------------------------------------------- ölçü kutuları
   Rapor sayfalarının üstündeki özet: sayı büyük, etiket küçük. Dar ekranda
   iki, geniş ekranda dört sütun — sayılar tek bakışta okunsun. */
.olcu-izgara {
  display: grid; gap: var(--b3);
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
}
.olcu .kart-ic { padding: var(--b3) var(--b4); }
.olcu-sayi {
  font-size: var(--yz-24); font-weight: 700; line-height: 1.2;
  font-variant-numeric: tabular-nums;
}
.olcu-etiket { font-size: var(--yz-13); font-weight: 550; margin-top: 2px; }

/* ------------------------------------------------- mobil tam menü
   Kenar çubuğu yalnızca masaüstünde çizildiği için mobilde menü çekmece
   olarak açılıyor. `.kenar .menu` kuralı hem `.kenar` içinde hem de
   ≥1024px medya sorgusunda tanımlı, o yüzden buraya ayrı yazılıyor. */
.kenar-menu { display: flex; flex-direction: column; gap: 2px; }
.kenar-menu .menu {
  display: flex; align-items: center; gap: var(--b3);
  padding: var(--b2) var(--b3); border-radius: var(--yaricap-kucuk);
  color: var(--metin); font-size: var(--yz-15); font-weight: 550;
  text-decoration: none; min-height: 44px;
}
.kenar-menu .menu:hover { background: var(--yuzey-2); }
.kenar-menu .menu.etkin { background: var(--vurgu-zemin); color: var(--vurgu); }
.kenar-menu .sayac {
  margin-left: auto; font-size: var(--yz-12); font-weight: 700;
  background: var(--vurgu); color: var(--vurgu-metin);
  border-radius: 999px; padding: 0 6px; min-width: 20px; text-align: center;
}
.kenar-menu .bolum-baslik {
  font-size: var(--yz-12); text-transform: uppercase; letter-spacing: .04em;
  color: var(--metin-soluk); padding: 0 var(--b3); margin-bottom: 4px;
}

/* ------------------------------------------------------------ asistan
   Cevap iki karta bölünüyor: sayılar model beklenmeden düşen sessiz kart,
   anlatı ise akan asıl cevap. Eskiden tek kartta çizilip akan metin
   sayıların üstüne biniyordu. */

.asistan-veri {
  background: var(--yuzey-2);
  border-style: dashed;
}
.asistan-veri .kart-ic { padding: 10px 14px; }
.asistan-veri-etiket {
  display: flex; align-items: center; gap: 6px;
  font-size: var(--yz-12); color: var(--metin-soluk);
  margin-bottom: 6px;
}
.asistan-veri-govde {
  white-space: pre-wrap;
  font-size: var(--yz-13);
  color: var(--metin);
}

/* Kapalı açılır: dağılım her cevapta ekranın yarısını kaplıyordu.
   <details> kullanılıyor — klavye ve ekran okuyucu desteği hazır geliyor. */
.asistan-veri-detay > summary {
  display: flex; align-items: center; gap: 8px;
  cursor: pointer; list-style: none;
  font-size: var(--yz-13); color: var(--metin);
  padding: 2px 0;
}
.asistan-veri-detay > summary::-webkit-details-marker { display: none; }
.asistan-veri-detay > summary:focus-visible {
  outline: 2px solid var(--vurgu); outline-offset: 2px; border-radius: var(--yaricap-kucuk);
}
.asistan-veri-ozet { flex: 1; min-width: 0; }
.asistan-veri-ok {
  display: inline-flex; color: var(--metin-soluk);
  transition: transform .18s ease;
}
.asistan-veri-detay[open] > summary .asistan-veri-ok { transform: rotate(90deg); }
.asistan-veri-detay > .asistan-veri-govde {
  margin-top: 8px; padding-top: 8px;
  border-top: 1px dashed var(--cizgi);
  color: var(--metin-soluk);
}
@media (prefers-reduced-motion: reduce) { .asistan-veri-ok { transition: none; } }

/* Yazıyor göstergesi — üç nokta sırayla yanıp söner */
.yaziyor { display: inline-flex; gap: 4px; align-items: center; padding: 2px 0; }
.yaziyor span {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--metin-soluk);
  animation: yaziyor-nokta 1.2s ease-in-out infinite;
}
.yaziyor span:nth-child(2) { animation-delay: .18s; }
.yaziyor span:nth-child(3) { animation-delay: .36s; }
@keyframes yaziyor-nokta {
  0%, 60%, 100% { opacity: .25; transform: translateY(0); }
  30%           { opacity: 1;   transform: translateY(-3px); }
}

/* Akış sürerken metnin sonunda yanıp sönen imleç */
.akiyor::after {
  content: '';
  display: inline-block;
  width: 2px; height: 1em;
  margin-left: 2px;
  vertical-align: text-bottom;
  background: var(--vurgu);
  animation: imlec-yanip-son 1s step-end infinite;
}
@keyframes imlec-yanip-son { 0%, 50% { opacity: 1; } 50.01%, 100% { opacity: 0; } }

@media (prefers-reduced-motion: reduce) {
  .yaziyor span { animation: none; opacity: .5; }
  .akiyor::after { animation: none; }
}

/* ---------------------------------------------------------- çekmece/modal */

.perde {
  position: fixed; inset: 0; z-index: 50;
  background: rgb(16 24 40 / .45);
  opacity: 0; pointer-events: none; transition: opacity .18s ease;
}
.perde.acik { opacity: 1; pointer-events: auto; }

.cekmece {
  position: fixed; z-index: 60; background: var(--yuzey);
  display: flex; flex-direction: column;
  box-shadow: var(--golge-yuksek);
  transition: transform .22s cubic-bezier(.32,.72,0,1);
}
/* Mobil: alttan açılır */
.cekmece {
  inset: auto 0 0 0; max-height: 92dvh;
  border-radius: var(--yaricap) var(--yaricap) 0 0;
  transform: translateY(102%);
  padding-bottom: env(safe-area-inset-bottom);
}
.cekmece.acik { transform: translateY(0); }

.cekmece-baslik {
  display: flex; align-items: center; gap: var(--b3);
  padding: var(--b4); border-bottom: 1px solid var(--cizgi);
}
.cekmece-baslik h2 { margin-right: auto; font-size: var(--yz-17); }
.cekmece-govde { padding: var(--b4); overflow-y: auto; flex: 1; -webkit-overflow-scrolling: touch; }
.cekmece-alt {
  padding: var(--b4); border-top: 1px solid var(--cizgi);
  display: flex; gap: var(--b2); justify-content: flex-end;
}
.cekmece-alt .dugme { flex: 1; }

/* --------------------------------------------------------------- bildirim */

#bildirimler {
  position: fixed; z-index: 90; left: 50%; transform: translateX(-50%);
  bottom: calc(var(--alt-cubuk) + var(--b4) + env(safe-area-inset-bottom));
  display: flex; flex-direction: column; gap: var(--b2); width: min(420px, calc(100vw - 32px));
}
.tost {
  padding: var(--b3) var(--b4); border-radius: var(--yaricap-kucuk);
  background: #1f2937; color: #fff; font-size: var(--yz-13);
  box-shadow: var(--golge-yuksek);
  display: flex; align-items: center; gap: var(--b2);
  animation: tost-gir .18s ease;
}
.tost.iyi  { background: var(--iyi); color: #fff; }
.tost.kotu { background: var(--kotu); color: #fff; }
@keyframes tost-gir { from { opacity: 0; transform: translateY(8px); } }

/* ----------------------------------------------------------- diğer parçalar */

.satirlar > * + * { margin-top: var(--b3); }
.yatay { display: flex; align-items: center; gap: var(--b2); flex-wrap: wrap; }
.yatay.aralikli { justify-content: space-between; }
.soluk { color: var(--metin-soluk); }
.kucuk-yazi { font-size: var(--yz-13); }
.mini-yazi { font-size: var(--yz-12); }
.sayi { font-variant-numeric: tabular-nums; }

.sayfa-baslik { display: flex; align-items: center; gap: var(--b3); margin-bottom: var(--b4); flex-wrap: wrap; }
.sayfa-baslik h1 { margin-right: auto; }

.suzgecler { display: flex; gap: var(--b2); flex-wrap: wrap; margin-bottom: var(--b4); }
.suzgecler select, .suzgecler input { min-height: 40px; width: auto; min-width: 130px; }
/* Onay kutusu bu kuraldan muaf: min-width 130px onu kocaman boş bir kareye
   çeviriyordu. Kural metin ve tarih girdileri için yazılmış. */
.suzgecler input[type="checkbox"] { min-width: 0; width: auto; min-height: 0; }

.sayfalama { display: flex; align-items: center; justify-content: center; gap: var(--b3); margin-top: var(--b4); }

.tanim { display: grid; grid-template-columns: auto 1fr; gap: var(--b2) var(--b4); font-size: var(--yz-13); }
.tanim dt { color: var(--metin-soluk); }
.tanim dd { margin: 0; }

.versiyon-satir { padding: var(--b3); border-left: 2px solid var(--cizgi); }
.versiyon-satir + .versiyon-satir { margin-top: var(--b2); }
.versiyon-metin { white-space: pre-wrap; font-size: var(--yz-13); margin-top: var(--b1); }

.foto-izgara { display: grid; grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); gap: var(--b2); }
.foto-izgara img { width: 100%; aspect-ratio: 1; object-fit: cover; border-radius: var(--yaricap-kucuk); border: 1px solid var(--cizgi); }

.uyari-serit {
  display: flex; gap: var(--b2); align-items: flex-start;
  padding: var(--b3); border-radius: var(--yaricap-kucuk);
  background: var(--uyari-zemin); color: var(--uyari); font-size: var(--yz-13);
}
.uyari-serit.kotu { background: var(--kotu-zemin); color: var(--kotu); }
.uyari-serit.vurgu { background: var(--vurgu-zemin); color: var(--vurgu); }

/* Giriş / kurulum ekranı */
.giris-sayfa { min-height: 100dvh; display: grid; place-items: center; padding: var(--b4); }
.giris-kutu { width: 100%; max-width: 400px; }
.giris-logo {
  width: 48px; height: 48px; border-radius: var(--yaricap); background: var(--vurgu);
  color: var(--vurgu-metin); display: grid; place-items: center; margin-bottom: var(--b4);
}
.pin-girdi { letter-spacing: .5em; font-size: var(--yz-20); text-align: center; }

/* Yeni sürüm şeridi */
#surum-serit {
  position: fixed; z-index: 95; left: 50%; transform: translateX(-50%);
  top: calc(var(--b3) + env(safe-area-inset-top));
  display: flex; align-items: center; gap: var(--b3);
  padding: var(--b2) var(--b3); border-radius: 999px;
  background: var(--metin); color: var(--yuzey); font-size: var(--yz-13);
  box-shadow: var(--golge-yuksek);
}

/* Çevrimdışı rozeti */
.cevrimdisi-rozet { background: var(--uyari-zemin); color: var(--uyari); }

/* =========================================================================
   Masaüstü — yönetim odaklı düzen
   ========================================================================= */

@media (min-width: 1024px) {
  .uygulama { flex-direction: row; }

  .ust-cubuk { display: none; }
  .alt-cubuk { display: none; }

  .kenar {
    display: flex; flex-direction: column;
    width: var(--kenar-cubugu); flex: none;
    height: 100dvh; position: sticky; top: 0;
    background: var(--yuzey); border-right: 1px solid var(--cizgi);
    padding: var(--b4); gap: var(--b1);
    overflow-y: auto;
  }
  .kenar .marka-alani { display: flex; align-items: center; gap: var(--b2); padding: var(--b2) var(--b2) var(--b4); }
  .kenar .marka-alani .logo {
    width: 32px; height: 32px; border-radius: var(--yaricap-kucuk);
    background: var(--vurgu); color: var(--vurgu-metin); display: grid; place-items: center;
  }
  .kenar .marka-alani strong { font-size: var(--yz-15); }

  /* Seçici öğeye değil sınıfa bakar: geri bildirim öğesi <button>, bir
     yere gitmiyor bir çekmece açıyor. `a.menu` yazılıydı ve buton hiçbir
     stil almadan tarayıcı varsayılanıyla, hizasız duruyordu. */
  .kenar .menu {
    display: flex; align-items: center; gap: var(--b3);
    padding: var(--b2) var(--b3); border-radius: var(--yaricap-kucuk);
    color: var(--metin-soluk); font-size: var(--yz-15); font-weight: 550;
    text-decoration: none; min-height: 40px;
  }
  .kenar .menu:hover { background: var(--yuzey-2); color: var(--metin); }
  .kenar .menu.etkin { background: var(--vurgu-zemin); color: var(--vurgu); }
  .kenar .menu .sayac {
    margin-left: auto; font-size: var(--yz-12); font-weight: 700;
    background: var(--vurgu); color: var(--vurgu-metin);
    border-radius: 999px; padding: 0 6px; min-width: 20px; text-align: center;
  }
  .kenar .bolum-baslik {
    font-size: var(--yz-12); text-transform: uppercase; letter-spacing: .04em;
    color: var(--metin-soluk); font-weight: 600; padding: var(--b4) var(--b3) var(--b1);
  }
  .kenar .kenar-alt { margin-top: auto; padding-top: var(--b4); border-top: 1px solid var(--cizgi); }

  .icerik { padding: var(--b5); padding-bottom: var(--b6); }

  /* Masaüstünde çekmece sağdan açılır */
  .cekmece {
    inset: 0 0 0 auto; width: min(560px, 100vw); max-height: none;
    border-radius: 0; transform: translateX(102%);
    padding-bottom: 0;
  }
  .cekmece.acik { transform: translateX(0); }

  #bildirimler { bottom: var(--b5); left: auto; right: var(--b5); transform: none; }

  .iki-kolon { display: grid; grid-template-columns: 1fr 380px; gap: var(--b4); align-items: start; }
}

@media (min-width: 1024px) {
  .sadece-mobil { display: none !important; }
}
@media (max-width: 1023px) {
  .sadece-masaustu { display: none !important; }
}


/* ---------------------------------------------------------- yazı logosu
   SVG içindeki currentColor, dosya <img> ile yüklendiğinde CSS bağlamı
   olmadığı için siyaha düşüyor ve karanlık modda okunmuyordu. Maske
   kullanınca renk her zaman metin renginden gelir; ikinci bir varlık
   dosyası tutmaya ve iki dosyanın birbirinden ayrı düşmesine gerek kalmaz. */
.logo-yazi {
  display: inline-block;
  height: 20px;
  width: 138px;                 /* 954.8 x 138.3 en-boy oranı */
  background-color: var(--metin);
  -webkit-mask: url("/assets/logo-yazi.svg?v=8") no-repeat center / contain;
          mask: url("/assets/logo-yazi.svg?v=8") no-repeat center / contain;
}


/* ------------------------------------------------------- fotoğraf kutusu */
.foto-ac {
  display: block; padding: 0; border: 0; background: none;
  cursor: zoom-in; width: 100%;
}
.foto-ac img { display: block; width: 100%; }

/* Ortalama grid yerine flex ile yapılıyor: grid alanı boyutunu görselden
   aldığı için img'deki max-height:100% dairesel kalıyor, tarayıcı kuralı
   yok sayıp uzun fotoğrafı aşağı taşırıyordu. Flex'te min-height:0 ile
   yüzdelik sınır düzgün çözülür ve görsel her zaman tam ortada durur. */
.foto-kutu {
  position: fixed; inset: 0; z-index: 200;
  display: flex; align-items: center; justify-content: center;
  background: rgb(0 0 0 / .92);
  padding: max(16px, env(safe-area-inset-top)) 16px max(16px, env(safe-area-inset-bottom));
}
.foto-kutu img {
  max-width: 100%; max-height: 100%;
  min-width: 0; min-height: 0;
  object-fit: contain; border-radius: 8px;
  /* Kaynak atanana kadar kutu boyutu sıçramasın */
  opacity: 0; transition: opacity .15s ease-out;
}
.foto-kutu img.yuklendi { opacity: 1; }
.foto-kapat, .foto-gez {
  position: absolute; z-index: 1;
  background: rgb(255 255 255 / .12); color: #fff;
  border: 0; border-radius: 999px;
  width: 44px; height: 44px;          /* dokunma hedefi en az 44px */
  font-size: 26px; line-height: 1; cursor: pointer;
}
.foto-kapat { top: max(12px, env(safe-area-inset-top)); right: 12px; }
.foto-gez.sol { left: 12px; top: 50%; transform: translateY(-50%); }
.foto-gez.sag { right: 12px; top: 50%; transform: translateY(-50%); }
.foto-sayac {
  position: absolute; bottom: max(16px, env(safe-area-inset-bottom));
  color: #fff; opacity: .75; font-size: 13px;
}

/* --------------------------------------------------------- PWA davranışı
   Ayrı pencere kipinde (standalone) sayfa yatayda lastik bant gibi
   oynuyordu: kaydırma zincirlemesi tarayıcının geri/ileri hareketini
   tetikliyor ve içerik sağa sola kayıyordu. Yatay kaydırma yalnızca
   bunu isteyen kapsayıcılarda (tablolar) kalmalı. */
html {
  overscroll-behavior: none;
  -webkit-text-size-adjust: 100%;
  /* Kaydırma çubuğunun yeri her sayfada ayrılı kalır. Yoksa uzun sayfadan
     (Olaylar) kısa sayfaya (Bildirimler) geçerken kullanılabilir genişlik
     360 ↔ 375 arasında zıplıyor ve içerik yatayda görünür biçimde kayıyordu.
     Üst üste kaydırma çubuğu olan platformlarda kural zaten etkisiz. */
  scrollbar-gutter: stable;
}
body {
  /* `hidden` değil `clip`: hidden yatayda kaydırılabilir bir kutu yaratıyor
     ve o kutu dokunma jestinin panlama hedefi olabiliyor. clip taşmayı
     keser ama kaydırma kutusu yaratmaz — panlanacak bir şey kalmaz. */
  overflow-x: clip;
  overscroll-behavior-y: contain;
}

/* Grafik hiçbir koşulda kapsayıcısını genişletmesin. Chart.js tuvale piksel
   cinsinden genişlik yazıyor; ölçüm yerleşim oturmadan yapılırsa yazılan
   değer ekrandan geniş kalabiliyor. */
canvas { max-width: 100%; }

/* Dokunmatik cihazda form alanları en az 16px.
 *
 * iOS Safari, odaklanan alanın yazısı 16px'in ALTINDAysa sayfayı kendiliğinden
 * yakınlaştırıyor. Yakınlaşınca görsel alan yerleşim alanından dar kalıyor ve
 * sayfa yatayda panlanabilir hale geliyor — "metin kutusuna dokununca sağa
 * sola kayma kilidi bozuluyor" bundan. Bu kayma belge kaydırması değil GÖRSEL
 * ALAN kaydırması; overflow, touch-action ve overscroll-behavior'ın hiçbiri
 * erişemiyor. Tek çözüm yakınlaştırmayı hiç tetiklememek.
 *
 * Alanlar `font: inherit` ile gövdeden 15px alıyordu.
 *
 * Seçici tür saymıyor: `input[type=text], input[type=email], …` biçiminde bir
 * liste, ileride eklenen ya da `type` yazılmayan bir alanı sessizce dışarıda
 * bırakırdı.
 *
 * `:not([type=hidden])` özgüllük içindir, süzgeç için değil: yukarıdaki temel
 * kural `input[type=text]` yazdığı için (0,1,1) düz `input` (0,0,1) onu
 * geçemiyor ve yalnızca select/textarea etkileniyordu. `:not()` argümanının
 * özgüllüğünü aldığından ikisi eşitleniyor, sonra gelen bu kural kazanıyor.
 *
 * `maximum-scale=1` / `user-scalable=no` bilerek kullanılmadı: iOS bunu 10'dan
 * beri yok sayıyor ve parmakla yakınlaştırmayı öldürerek erişilebilirliği
 * bozuyor. */
@media (pointer: coarse), (max-width: 1023px) {
  input:not([type=hidden]), select, textarea { font-size: 16px; }
}
/* Dokunma yalnızca dikey kaydırsın; yatay kaydırmayı isteyen kapsayıcılar
   kendi kuralıyla geri açar.

   Listede eskiden .cipler ve .suzgecler de vardı. İkisi de flex-wrap ile
   sarmalıyor, yani ASLA yatay kaymıyor (ölçüldü: scrollWidth == clientWidth).
   Kaymayan bir öğeye pan-x vermek yatay jesti üst kapsayıcıya zincirletiyor
   ve belge sağa sola kayıyordu. Raporlar sayfası bunu en çok gösteriyordu:
   üstte bir .suzgecler, her rapor kartında ayrı bir .cipler var, yani
   ekranın büyük kısmı panlamaya açıktı. */
#kok { touch-action: pan-y; }
.tablo-sarmal { touch-action: pan-x pan-y; }


/* ------------------------------------------------- yerleşik denetim teması
   color-scheme bildirilmediğinde iOS Safari, input[type=date] gibi yerleşik
   denetimleri her zaman açık temada çiziyordu: karanlık zeminde tarih metni
   siyah kalıyor, ancak seçiciyi bir kez açıp kapatınca beyaza dönüyordu.
   Bildirim, denetimin ilk çizimde de doğru temada gelmesini sağlıyor. */
:root { color-scheme: light dark; }

/* Safari tarih alanının rengini color'dan değil text-fill-color'dan alıyor */
input[type=date], input[type=time], input[type=datetime-local] {
  color: var(--metin);
  -webkit-text-fill-color: var(--metin);
}
input[type=date]::-webkit-date-and-time-value { text-align: left; }

/* ------------------------------------------------------ bildirim teklifi
   Native izin kutusundan önce gösterilen açıklama. Alttan girer ki
   gezinme çubuğunu kapatmasın ve reddedilmesi kolay olsun. */
.push-teklif {
  position: fixed; left: 0; right: 0;
  bottom: calc(var(--alt-gezinme-yuksekligi, 64px) + env(safe-area-inset-bottom));
  z-index: 150;
  padding: 12px;
  animation: push-teklif-gir .22s ease-out;
}
.push-teklif .kart { box-shadow: var(--golge-yuksek); max-width: 520px; margin: 0 auto; }
@keyframes push-teklif-gir {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) { .push-teklif { animation: none; } }

/* ------------------------------------------------------ geri bildirim butonu
   Eskiden sağ altta yüzüyordu ve dar ekranda gönderme düğmesinin üstüne
   biniyordu. Artık kabuğun içinde duruyor: mobilde üst çubukta zilin
   solunda, masaüstünde kenar çubuğunun altında. Kenar çubuğundaki hâli
   <button> olduğu için tarayıcı varsayılanları .menu'ye göre sıfırlanıyor. */
.kenar-alt button.menu {
  background: none;
  border: 0;
  font: inherit;
  cursor: pointer;
  width: 100%;
  text-align: left;
}

/* Kenar çubuğunun altındaki derleme damgası — hangi sürümün canlıda
   olduğunu görmek için; dikkat çekmemeli, yer kaplamamalı. */
.surum-satiri {
  padding: 6px var(--b3) 0;
  font-size: 11px;
  color: var(--metin-soluk);
  opacity: .65;
  font-variant-numeric: tabular-nums;
}
.surum-satiri:empty { display: none; }

/* =========================================================================
   Yönetim raporu (analiz.js)
   Ekran düzeni. Yazdırma düzeni ayrı dosyada: rapor-print.css
   ========================================================================= */

.rapor-bolum { margin-bottom: var(--b5); }
.rapor-bolum > h2 { margin-bottom: var(--b3); }
.rapor-bolum h3 { font-size: var(--yz-15); }

/* Çıktının künyesi. Ekranda sade duruyor, kâğıtta ilk sayfayı açıyor. */
.rapor-kunye { border-left: 3px solid var(--vurgu); }

/* Ölçü kutuları — dönemin sayısal künyesi */
.olcu-satir {
  display: grid; gap: var(--b3);
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
}
.olcu-kutu {
  padding: var(--b3); background: var(--yuzey-2);
  border-radius: var(--yaricap-kucuk); border: 1px solid var(--cizgi);
}
.olcu-deger { font-size: var(--yz-24); font-weight: 700; line-height: 1.2; }

.iyi-yazi  { color: var(--iyi); }
.kotu-yazi { color: var(--kotu); }
/* Yapay zekâ ölçeğinden gelen vurgu — insanın seçtiği önemle karışmasın.
   Dolgu değil yazı olduğu için okunur tonu kullanıyor. */
.ai-yuksek-yazi { color: var(--ai-yuksek-metin); }

/* İki sütunlu bölümler; dar ekranda kendiliğinden tek sütuna iniyor */
.ikili-izgara {
  display: grid; gap: var(--b3);
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
}

.grafik-kutu { position: relative; height: 260px; }
.grafik-kutu.kisa { height: 160px; }

/* Oran çubuğu — Chart.js yüklenemese de dağılım görünür kalsın diye
   dağılımların çoğu grafik değil, düz CSS çubuğu. */
.oran-yol {
  height: 6px; background: var(--yuzey-2); border-radius: 3px;
  overflow: hidden; margin-top: 2px;
}
.oran-dolgu { height: 100%; background: var(--vurgu); border-radius: 3px; }

/* Kategori × şube ısı haritası */
table.tablo.isi-tablo th, table.tablo.isi-tablo td { padding: var(--b2); text-align: center; }
table.tablo.isi-tablo th.isi-satir-basi { text-align: left; white-space: nowrap; font-weight: 500; }
.isi-hucre { font-variant-numeric: tabular-nums; font-size: var(--yz-12); }
.dik-baslik { font-size: var(--yz-12); white-space: nowrap; }

/* Metin içine gömülü düğme — hazır tarih aralıkları */
.bag-dugme {
  background: none; border: 0; padding: 0; font: inherit; cursor: pointer;
  color: var(--vurgu); text-decoration: underline;
}
.bag-dugme:hover { color: var(--vurgu-koyu); }

/* JSON önizlemesi — ham kayıt metinleri bloğu. Uzun içerik kendi kutusunda
   kayar; sayfa gövdesi asla yana kaymaz. */
.json-onizleme {
  margin-top: var(--b2);
  max-height: 240px;
  overflow: auto;
  padding: var(--b2);
  background: var(--yuzey-2);
  border: 1px solid var(--cizgi);
  border-radius: var(--yaricap-kucuk);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px;
  line-height: 1.5;
  white-space: pre;
  color: var(--metin-soluk);
}

/* Vardiya ızgarası — kişi × gün.
   Sütun operasyon günü, takvim günü değil: gece vardiyası "+1" ile ertesi
   sabaha taştığını söylüyor (bkz. public/js/vardiya.js). */
table.vardiya-izgara th { text-align: center; }
table.vardiya-izgara th:first-child,
table.vardiya-izgara td:first-child {
  text-align: left;
  position: sticky;
  left: 0;
  background: var(--yuzey);
  z-index: 1;
  min-width: 140px;
}
table.vardiya-izgara th.bugun { color: var(--vurgu); }
table.vardiya-izgara tbody tr { cursor: default; }
.vardiya-hucre { text-align: center; vertical-align: middle; min-width: 96px; }
.vardiya-hucre:hover { background: var(--yuzey-2); }
.vardiya-etiket {
  display: inline-block;
  padding: 4px 8px;
  border-radius: var(--yaricap-kucuk);
  background: var(--yuzey-2);
  font-size: var(--yz-12);
  line-height: 1.3;
  white-space: nowrap;
}

/* -------------------------------------------------------- özlük eksik tablosu
   Excel gibi okunmalı: kişi sütunu yapışık, hücre durumu renkle ve kısa
   metinle. Şube başlığı ayrı satır, tablo yana kaydırılabilir. */

.matris { min-width: 720px; }
.matris tbody tr { cursor: default; }
.matris th, .matris td { white-space: nowrap; }
.matris th.kalem { text-align: center; font-weight: 600; max-width: 120px; white-space: normal; }
.matris .kisi-sutun {
  position: sticky; left: 0; z-index: 1;
  background: var(--yuzey); min-width: 170px;
}
.matris thead .kisi-sutun { background: var(--yuzey-2); z-index: 2; }
.matris tr.sube-satir td { background: var(--yuzey-2); font-weight: 600; }
/* colspan'lı hücre yapışık olamıyor; içindeki etiket yapışık duruyor ki
   tablo yana kaydırılınca şube adı görünür kalsın. */
.matris tr.sube-satir .sube-ad { position: sticky; left: 12px; display: inline-block; }
.matris td.hucre { text-align: center; font-size: var(--yz-12); }
.matris td.h-eksik     { background: var(--kotu-zemin);  color: var(--kotu); font-weight: 600; }
.matris td.h-beklemede { background: var(--uyari-zemin); color: var(--uyari); }
.matris td.h-reddedildi{ background: var(--kotu-zemin);  color: var(--kotu); }
.matris td.h-var,
.matris td.h-onaylandi,
.matris td.h-elden     { color: var(--iyi); }
.matris td.h-istenmiyor{ background: var(--yuzey-2); }
