/* Master veri sayfası */
.add-row { display: flex; gap: 8px; margin-bottom: 12px; }
.add-row input { flex: 1; border: 1px solid var(--line); border-radius: var(--radius); padding: 8px 10px; }
.master-list { list-style: none; margin: 0; padding: 0; }
.master-list { display: flex; flex-direction: column; gap: 6px; }
.master-list > li { padding: 8px 4px; border-bottom: 1px solid var(--line); }
.metod-satir { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.metod-ad { font-weight: 700; }
.master-list .metod-input { flex: 1; border: 1px solid var(--brand); border-radius: 6px; padding: 6px 8px; }
.master-list .metod-acts { display: flex; gap: 6px; flex-shrink: 0; }
/* Alt işlemler */
.alt-list { list-style: none; margin: 4px 0 4px 14px; padding: 0; }
.alt-list li { display: flex; align-items: center; justify-content: space-between; padding: 3px 0; font-size: var(--yazi-md); color: var(--ink); }
.alt-list .alt-del { line-height: 1; padding: 1px 7px; }
.alt-ekle { display: flex; gap: 6px; margin-left: 14px; margin-top: 4px; }
.alt-ekle .alt-input { flex: 1; border: 1px solid var(--line); border-radius: 6px; padding: 5px 8px; font-size: var(--yazi-md); }
.muted { color: var(--muted); }
.parca-import, .uf-arac { display: flex; align-items: center; gap: 12px; margin: 8px 0 12px; flex-wrap: wrap; }
.parca-import .btn, .uf-arac .btn { cursor: pointer; }
.sablon-link { color: var(--brand); font-size: var(--yazi-md); text-decoration: none; font-weight: 700; }
.sablon-link:hover { text-decoration: underline; }

/* BOM Excel içe aktarma — önizleme kutusu */
.bom-onizleme { border: 1px solid var(--brand); border-radius: var(--radius); background: var(--panel); padding: 12px 14px; margin: 4px 0 14px; }
.bom-ozet { font-size: var(--yazi-md); margin-bottom: 8px; }
.bom-uyari { font-size: var(--yazi-sm); color: var(--brand-dark); background: #eef3f3; border-left: 3px solid var(--brand); padding: 6px 10px; margin: 6px 0; }
.bom-tablo { max-height: 320px; overflow: auto; }
.bom-tablo table { font-size: var(--yazi-sm); }
.bom-tablo th { position: sticky; top: 0; background: var(--panel); z-index: 1; }
.bom-aksiyon { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.bom-et { display: inline-block; padding: 1px 7px; border-radius: 999px; font-size: var(--yazi-xs); font-weight: 700; border: 1px solid var(--line-strong); }
.bom-et.ok { border-color: var(--brand); color: var(--brand-dark); background: #eef3f3; }
.bom-et.sa { border-color: var(--amber-line); color: var(--amber-ink); background: var(--amber-bg); }
.bom-et.uyari { border-color: var(--red); color: var(--red); background: #fee2e2; }
.bom-et.bos { color: var(--muted); }
.bom-ana > td { background: #eef3f3; border-top: 2px solid var(--brand); border-bottom: 1px solid var(--brand); }
/* `.bilesen-gorsel` KALDIRILDI (KDE-0078): BOM ağacındaki parça küçük
   görseline aitti. Alt bileşen satırı artık görseli `kodGorseli` →
   `listeGorsel` ile basıyor, yani aşağıdaki `.liste-gorsel` ölçüsünü
   kullanıyor — iki ayrı küçük-görsel ölçüsü tutmanın sebebi kalmadı.
   Ölçüleri ZATEN AYRIYDI: `.bilesen-gorsel` 34×34 kare, `.liste-gorsel`
   40×28 yatay. Aynı parçanın resmi Ürün Listesi'nde ve bileşen satırında
   farklı en-boy oranında duruyordu; tek ölçüye inince bu da kapandı. */
/* Ürün Listesi satır görseli — görsel yoksa aynı boyutta boş kutu (hiza sabit kalır) */
.liste-gorsel {
  display: inline-block; vertical-align: middle; width: 40px; height: 28px; object-fit: contain;
  border: 1px solid var(--line); border-radius: var(--radius); background: #fff;
}
/* Görselsiz kutu SAKİN: kesikli çerçeve "buraya bırak / tıkla" gibi bir düğme
   izlenimi veriyordu (Selim 2026-09-29, ekran notu [34]). Düz ince çerçeve ve
   tablo başlığı zemini — görsel olan satırdaki kutuyla aynı ölçüde, boş. */
.liste-gorsel.gorselsiz { border-style: solid; border-color: var(--line); background: var(--panel-2); }
/* Ürün Listesi'nde görselsiz kutu GERÇEK DÜĞME (Selim 2026-09-29, KD-0059:
   "daha anlaşılır, güzel bir buton"). Aynı 40×28 ölçü — hiza bozulmasın;
   ortada "resim + artı" simgesi (`ik-resim-ekle`, ikonlar.css), ipucu
   "Resim ekle". Tıklanınca ürünün/parçanın sayfasındaki görsel yükleme
   açılıyor. Üç sekmede de var (Mamül · Yarı Mamül · Satın Alma). */
button.liste-gorsel.gorsel-ekle {
  box-sizing: border-box; padding: 0; margin: 0; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--muted); font-size: var(--yazi-lg); line-height: 1;
  border-color: var(--line-strong);
}
button.liste-gorsel.gorsel-ekle:hover { border-color: var(--brand); color: var(--brand); background: var(--brand-soft); }
button.liste-gorsel.gorsel-ekle:focus-visible { outline: none; box-shadow: var(--odak); }
body.salt-okuma button.liste-gorsel.gorsel-ekle { pointer-events: none; color: transparent; border-color: var(--line); }
/* SİLME KİPİNDE PASİF (denetçi 2026-09-29): tıklanınca seçim yarıda kalıp
   sayfadan çıkılıyordu. Tıklama işleyicisi de kipteki tabloda susuyor
   (klavyeyle basılırsa). */
.ts-kip button.liste-gorsel.gorsel-ekle { pointer-events: none; cursor: default; color: var(--line-strong); border-color: var(--line); background: var(--panel-2); }
/* Görsel + metin tek hizada.
   HÜCREYE `display: flex` VERİLMEZ: `td` flex kutuya dönünce tablo satırının
   yükseklik paylaşımından çıkıyor, kendi içeriği kadar (34px) kalıp diğer
   hücrelerin 50px'inden farklı bir üst konuma oturuyordu — satır ayırıcıları
   ilk sütunda kayık görünüyor, görsel satırdan taşmış gibi duruyordu.
   Hücre `table-cell` kalıyor, hizalama satır içi öğelerle yapılıyor. */
/* `:first-child` DEĞİL, görseli taşıyan hücre: silme kipinde en başa tik sütunu
   giriyor ve kural o hücreye kayıyordu — görsel ile ürün no arasındaki boşluk
   kayboluyor, kod kutuya yapışıyordu (ölçüldü 2026-09-29). */
#urunListeTablo tbody td:has(> .liste-gorsel),
#yariMamulTablo tbody td:has(> .liste-gorsel),
#satinAlmaTablo tbody td:has(> .liste-gorsel) { white-space: nowrap; }
/* ARAÇ ÇUBUĞU: SÜZGEÇLER SOLDA, EYLEMLER SAĞDA (Selim 2026-09-29, ekran notu [36]).
   İnce dikey çizgi iki grubu ayırıyor — dar ekranda aradaki boşluk kapanınca
   da hangi düğmenin süzgeç hangisinin eylem olduğu okunsun. Arama kutusu
   daralabiliyor (esnek taban 160px, en çok 320px): silme kipinde "Vazgeç" ve
   "Seçilenleri Sil (n)" gelince eylem grubu alt satıra kayıp tabloyu aşağı
   itmesin.
   Yer tutucu kısa ("Ara", KD-0057) → kutu 120px'e kadar daralabiliyor;
   uzun yer tutucu 1440'ta silme kipinde, 1280'de normalde kesiliyordu.
   SİLME KİPİNDE yalnız kipin iki düğmesi kalıyor ("Seçilenleri Sil (n)" ·
   "Vazgeç"): Yeni Ürün ve Excel'e Aktar seçimle ilgisiz, dördü birden 1280'de
   (ölçüldü: içerik 960px, süzgeçler 410 + eylemler 513) sığmıyor ve eylem
   grubu alt satıra kayıyordu. Kipten çıkınca geri geliyorlar. */
#view-takip .toolbar input[type="search"] { flex: 1 1 160px; min-width: 120px; max-width: 320px; }
#view-takip .toolbar .sag { padding-left: var(--bosluk-3); border-left: 1px solid var(--line); }
#view-takip:has(#urunListeTablo.ts-kip) .toolbar #yeniUrun,
#view-takip:has(#urunListeTablo.ts-kip) .toolbar #urunExcel { display: none; }
/* SÜTUN GENİŞLİKLERİ SABİT (Selim 2026-09-29, ekran notu [32]: "sütunlar arası
   mesafeler"). Otomatik yerleşim boşluğu içeriğe göre dağıtıyordu: kısa ürün
   numarası geniş bir sütunda, müşteri adı tanımın uzağında kalıyordu. Uzun
   metni taşıyan tek sütun Ürün Tanımı — kalan genişliği o alıyor. */
#urunListeTablo th.ul-no { width: 230px; }
#urunListeTablo th.ul-rev { width: 64px; }
/* Yarı Mamül / Satın Alma: revizyon kodun ALTINDA, kodla aynı hizada (görsel
   kutusu 40px + 10px boşluk). Ayrı sütun ya da kodun yanı tabloyu genişletiyordu. */
.liste-rev { display: block; margin-left: 50px; color: var(--muted); line-height: 1.2; }
#urunListeTablo th.ul-musteri { width: 180px; }
#urunListeTablo th.tanim-col { width: 110px; }
/* GÖRSEL İLE METİN ARASINDAKİ BOŞLUK — KAPSAMSIZ (KDE-0019, 2026-10-09).

   Eski hâli üç TABLO KİMLİĞİNE bağlıydı (`#urunListeTablo`,
   `#yariMamulTablo`, `#satinAlmaTablo`). Ölçüldü 2026-10-09: aynı kalıp
   dördüncü bir tabloda (Stok Düzenle sayfası) kullanılınca boşluk HİÇ
   uygulanmadı ve ürün kodu 40px'lik kutuya YAPIŞTI. Şartname §4.5: sınıf
   bir sözleşmedir; kapsamı bir kaba bağlamak, o kabın dışında sessizce
   çıplak kalan ekranlar üretir. Aynı kusur sınıfı bugün `.pgt-soru`
   (KDE-0011) ve `.ks-elle` (KDE-0018) ile birlikte üçüncü kez çıktı.

   `:not(:only-child)` ŞART: sipariş tablosunda hücre YALNIZ görseli
   taşıyor (`.sip-td-gorsel`) ve orada sağ boşluk hücreyi genişletip
   taşmaya yol açardı — o hücrenin kendi notu bunu anlatıyor
   (`06-stok-siparis-olustur.css`). Boşluk ancak görselin YANINDA bir şey
   varsa gerekli.

   10px bir sistem ölçüsü: `.liste-rev` hizası da "40px kutu + 10px
   boşluk" varsayımına dayanıyor (yukarıdaki `margin-left: 50px`). */
td > .liste-gorsel:not(:only-child) { margin-right: 10px; }
/* Kod hücresi: uzun numara komşu sütunu itmesin, kırpılsın. Mamül tablosunda
   kod `.ml-ad` sarmalayıcısında, yarı mamül/satın almada doğrudan bağlantıda —
   ikisi de aynı davranmalı. */
/* KAPSAM DÜZELTİLDİ (KDE-0030, 2026-10-10): seçici `#yariMamulTablo tbody
   td:first-child > .ym-link` idi — hem bir KABA bağlıydı (§4.5) hem de kod
   bağlantısının `<td>`nin DOĞRUDAN çocuğu olmasına dayanıyordu. Kod hücresi
   artık `.kod-gorsel` sarmalayıcısında; eski seçici hiç eşleşmez ve kırpma
   SESSİZCE kalkardı — uzun parça adı komşu sütunu iterdi.

   `max-width: calc(100% - 54px)` KALKTI: o sayı "40px görsel + 10px boşluk +
   pay" varsayımıydı, yani aynı ölçüyü iki yere birden yazmak demekti; görsel
   52px olunca yanlışa döndü. Flex kutusunda görselin yeri ayrı
   (`flex: 0 0 auto`), metin kalanı alıyor; üç noktayı `min-width: 0`
   çalıştırıyor. */
.ml-ad,
.kod-gorsel > .kg-metin.ym-link {
  display: block; min-width: 0; max-width: 100%;
  overflow: hidden; text-overflow: ellipsis;
  /* NOWRAP ŞART. `text-overflow: ellipsis` yalnız tek satırda çalışır;
     olmayınca metin sarıyor, üç nokta hiç çıkmıyor ve satır kabından 3-4 px
     taşıyordu (ölçüldü 2026-09-23, Ürün Listesi ▸ Yarı Mamül, 133 satır).
     Kırpma zaten `overflow: hidden` ile oluyordu — görünen şey, kesildiği
     söylenmeden kesilmiş bir parça adıydı. */
  white-space: nowrap;
}

/* Yarı Mamül düzenleme sayfası bölümleri */
.ym-bolum { margin: 18px 0; padding-top: 14px; border-top: 1px solid var(--line); }
.ym-bolum h4 { margin: 0 0 10px; font-size: var(--yazi-lg); }
.rota-bolum.tekli { grid-template-columns: minmax(0, 520px); }
/* .ym-link'in ayrı renk tanımı kaldırıldı — kod bağlantılarının ortak
   kuralına bağlandı (bkz. ".urun-link, .ie-link, .ym-link"). */

/* Tedarikçi haftalık kapasitesi — seçim listesinden AYRI, yalnız seçili operasyonlar */
.ted-kapasite { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--line); }
.ted-kapasite h4 { margin: 0 0 10px; font-size: var(--yazi-lg); }
.ted-kapasite h4 small { font-weight: 400; }
.tk-tablo { font-size: var(--yazi-md); max-width: 640px; }
.tk-tablo .op-no {
  display: inline-block; min-width: 20px; margin-right: 7px; padding: 0 5px;
  background: #ededed; border-radius: var(--radius); color: var(--muted); font-size: var(--yazi-xs); font-weight: 700; text-align: center;
}
.tk-sonuc { font-weight: 700; color: var(--brand-dark); }

/* Operasyon süreleri — mamülde katlanır bölüm, yarı mamülde düz */
.sure-bolum { margin: 16px 0 4px; padding-top: 14px; border-top: 1px solid var(--line); }
.sure-bolum h5 { margin: 0 0 10px; font-size: var(--yazi-md); }
details.sure-bolum > summary { cursor: pointer; font-size: var(--yazi-md); padding: 4px 0; user-select: none; }
details.sure-bolum > summary::marker { color: var(--brand); }
details.sure-bolum[open] > summary { margin-bottom: 10px; }
.sa-grup > td { background: #f4f6f6; font-size: var(--yazi-sm); border-top: 1px solid var(--line-strong); }
.sa-carpan { color: var(--brand-dark); font-weight: 700; }
.sa-op { padding-left: 18px; }
.sa-op .op-no {
  display: inline-block; min-width: 20px; margin-right: 7px; padding: 0 5px;
  background: #ededed; border-radius: var(--radius); color: var(--muted); font-size: var(--yazi-xs); font-weight: 700; text-align: center;
}
.sa-varsayilan { font-size: var(--yazi-xs); }
/* Ön Hazırlık / Teslimat: adım başına gün — adım satırının içinde (2026-10-01) */
.rota-adimlar li.ra-gunlu { align-items: center; }
.rota-adimlar .ra-ad { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.rota-adimlar .ra-gunlu .mini-num { width: 58px; flex-shrink: 0; background: var(--panel); }
.rota-adimlar .ra-gunlu small { flex-shrink: 0; }
.sure-ozet {
  display: flex; flex-wrap: wrap; align-items: center; gap: 18px;
  background: #eef3f3; border-left: 3px solid var(--brand);
  padding: 9px 14px; margin-bottom: 10px; font-size: var(--yazi-md);
}
.sure-tablo { max-width: 620px; }
.sure-tablo table { font-size: var(--yazi-md); }
.sure-tablo th { font-weight: 700; }
.sure-tablo small { font-weight: 400; margin-left: 6px; }
.sure-not { font-size: var(--yazi-sm); margin: 8px 0 0; }
/* Metod listesi penceresindeki süre tablosu */
.pm-not { font-size: var(--yazi-sm); margin: 0 0 10px; }
.pm-tablo { max-height: 55vh; overflow: auto; }
.pm-tablo table { font-size: var(--yazi-md); }
.pm-tablo th { position: sticky; top: 0; background: var(--panel); z-index: 1; }
.pm-alt { display: flex; align-items: center; gap: 10px; margin-top: 12px; }

/* Ürün Listesi sekmeleri: Mamül · Yarı Mamül · Satın Alma */
.sekme-bar { display: flex; gap: 2px; border-bottom: 1px solid var(--line); margin: -4px -4px 14px; }
.sekme {
  border: 0; background: transparent; cursor: pointer; font: inherit; font-weight: 700;
  color: var(--muted); padding: 9px 16px; border-bottom: 2px solid transparent; margin-bottom: -1px;
  display: inline-flex; align-items: center; gap: 7px; transition: color .12s, border-color .12s;
}
.sekme:hover { color: var(--ink); }
.sekme.aktif { color: var(--brand-dark); border-bottom-color: var(--brand); }
.sekme-say {
  min-width: 20px; padding: 0 6px; border-radius: 999px; background: #ededed;
  color: var(--muted); font-size: var(--yazi-xs); font-weight: 700; text-align: center;
}
.sekme.aktif .sekme-say { background: #dbe9e9; color: var(--brand-dark); }
/* Master Veri sekmeleri panel içinde değil doğrudan sayfada duruyor → negatif kenarı iptal et */
.sekme-bar.master-sekmeler { margin: 0 0 20px; border-bottom-width: 1.5px; border-bottom-color: var(--line-strong); }
.sekme-bar.master-sekmeler .sekme { padding: 10px 18px; }

/* "Nerede Kullanıldı?" sütunu ve açılır penceresi */
.kullanim-col { width: 130px; }
.kullanim-btn {
  border: 1px solid var(--line-strong); border-radius: var(--radius); background: var(--panel);
  color: var(--brand-dark); font: inherit; font-weight: 700; padding: 2px 12px; cursor: pointer;
  transition: border-color .12s, background .12s;
}
.kullanim-btn:hover { border-color: var(--brand); background: #eef3f3; }
.kullanim-liste { display: flex; flex-direction: column; gap: 8px; max-height: 60vh; overflow: auto; }
.kullanim-kart {
  display: flex; align-items: center; gap: 12px;
  border: 1px solid var(--line); border-radius: var(--radius); padding: 8px 12px; background: var(--panel);
}
.kullanim-kart:hover { border-color: var(--brand); }
.kk-bilgi { flex: 1; min-width: 0; }
.kk-kod { font-weight: 700; }
.kk-ad { font-size: var(--yazi-sm); }
.kk-adet { font-weight: 700; color: var(--brand-dark); font-size: var(--yazi-lg); }

/* Tanımlama durumu sütunu */
.tanim-col { width: 96px; text-align: center; }
/* "Tamam" — "N eksik" ile aynı boy ve ağırlıkta düz yazı, yalnız rengi yeşil (KD-0058). */
.tanim-ok { white-space: nowrap; cursor: help; color: var(--green); }
/* "2 eksik" — düz kırmızı yazı; tıklanınca eksik listesi açılıyor. Düğme
   görünümünü bilesenler.css `button.tanim-eksik` sıfırlıyor; burada yalnız
   renk ve satır kırılmaması. */
.tanim-eksik { white-space: nowrap; color: var(--red); }
tr:hover .liste-gorsel:not(.gorselsiz) { border-color: var(--brand); }
.ayar-satir { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: var(--yazi-lg); }
.ayar-satir input { border: 1px solid var(--line); border-radius: 6px; padding: 6px 8px; }
.ayar-durum { color: var(--green); font-size: var(--yazi-md); }


/* ===== ROTA ADIM NUMARALARI SINIFA GÖRE RENKLİ (KDE-0059) =====
   Kullanıcı 2026-10-10, renkleri paletten kendisi seçti:
     Ön Hazırlık #9B2226 · Üretim #EE9B00 · Sevkiyat #0A9696
   Rakam beyaz.

   ÜÇ ROTA YAN YANA DURUYOR ve üçünün de adımları "1 2 3" diye başlıyordu;
   ekranda hangi numaranın hangi rotaya ait olduğu ancak sütun başlığı
   okunarak anlaşılıyordu. Renk o bağı satır düzeyinde kuruyor.

   RENK TEK BAŞINA ANLAM TAŞIMIYOR: rotanın adı sütun başlığında yazılı
   duruyor, renk onu pekiştiriyor — renk körü bir okuyucu bilgiyi
   kaybetmiyor. */
.rota-kolon[data-tur="onhazirlik"] .ra-no { background: #9b2226; color: #fff; }
.rota-kolon[data-tur="uretim"]     .ra-no { background: #ee9b00; color: #fff; }
.rota-kolon[data-tur="teslimat"]   .ra-no { background: #0a9696; color: #fff; }

/* ===== TANIM SAYFASI: KUTULAR DEĞİL, DEĞERLER (KDE-0059) =====
   Kullanıcı: "Alt bileşenler ve Rota sekmelerinde hâlâ gün ve adet girişi
   kutucukları aktif. Tanım sayfasında gerek yok. Veri giremiyoruz ama görsel
   olarak var ve hissiyat olarak izin veriyor."

   DEĞER DURUYOR, KUTU GİDİYOR: adet ve gün okunması gereken bilgi; alanı
   gizlemek veriyi de gizlerdi. Kalkan şey yalnız "buraya yazabilirsin"
   diyen çerçeve. `.mini-num` kendi çerçevesini iki ayrı dosyada tanımlıyor,
   bu yüzden sınıf burada açıkça geçersiz kılınıyor. */
.uk-goruntule .mini-num,
.uk-goruntule input[type="number"],
.uk-goruntule input[type="date"] {
  background: transparent; border-color: transparent; box-shadow: none;
  padding-left: 0; padding-right: 0; width: auto; min-width: 2ch; cursor: default;
}
/* Karakteristik EKLEME yok, tanımlananlar görünüyor (kullanıcı): boş "— seç —"
   satırı da kalkıyor — doldurulamayacak bir satır, doldurulacakmış gibi
   duruyordu. */
.uk-goruntule .kkc-ekle,
.uk-goruntule .kkc-satir-yeni,
.uk-goruntule .kkc-sil { display: none !important; }
