/* Nun.UiKit.Web global stilleri — host App.razor'da
   _content/Nun.UiKit.Web/nun-uikit.css olarak eklenir. */

/* DevExpress'in kendi CSS'i bu iç flex container'lara min-height: 0 vermez;
   klasik "flex item içerik boyutunun altına küçülmez" tuzağı. Bu olmadan
   DxPopup içindeki DxGrid tüm satırlara göre büyür, scrollbar çıkmaz.
   Kaldırmayın (önceki deneyimden edinilmiş ders). */
.dxbl-modal-content {
    min-height: 0 !important;
}

.dxbl-modal-body {
    min-height: 0 !important;
}

.dxbl-grid {
    min-height: 0 !important;
}

/* Odaklı grid satırında salt-okunur (display-view) checkbox tiki temada accent renginde
   kalır; odaklı satırın bandı da aynı accent ailesinden olduğundan tik bandın içinde
   kaybolur (2 Ağu 2026 — Cari listesindeki Aktif kolonunda yaşanan gerçek hata; canlıda iki
   renk birebir aynı ölçüldü). Satır metni gibi ikonu da satırın kendi metin rengine bağlarız —
   accent'ten bağımsız işlevsel düzeltme, tema görünümü ezmesi değil. */
.dxbl-grid-focused-row .dxbl-checkbox .dxbl-image {
    color: inherit;
    fill: currentColor;
}

/* Gömülü listeli form sekmesi (26-27 Tem 2026 geri bildirimi): form içine gömülen
   grid popup gövdesini uzatmaz — sekme içeriği popup boyundan türeyen sabit yükseklik alır,
   grid kendi scroll'unu kullanır (önceki deneyimden ders: grid'e yükseklik form layout
   zincirinden değil, kaptan verilir — DxFormLayout kimlik alanıyla sekmeleri aynı sarmal
   .dxbl-row'da tuttuğundan flex büyütme satır aralarına boşluk dağıtır, o yol çıkmaz).
   Hesap: popup calc(100vh - 100px) + başlık/kimlik alanı/sekme başlığı/footer payları ≈ 400px.
   Yalnız içinde DxGrid olan sekme içeriğini etkiler (:has) — alan sekmeleri ve gridsiz formlar
   eski davranışında, belge editörü etkilenmez (satır tablosu DxGrid değil). */
/* Sekme içeriği de grupların çizgi görünümüyle çerçevelenir: sekmeli formda alanlar,
   gruplu düz formdaki gibi çerçeve içinde durur — RecordForm gövde çerçevesinin sekme karşılığı. */
/* Seçicideki .dxbl-fl + .dxbl-fl-gt basamakları şart: tema kuralı (.dxbl-fl .dxbl-fl-gt
   .dxbl-fl-tab-content — 14px padding, display:block) bizimle eşit özgüllükte olursa sonra
   yüklenen kazanır. Tema sayfa açılışında bizden önce yüklenir ama şirket rengi (19.415)
   girişten sonra temayı yeniden yükler ve tema bu kez sonda durur (24 Eyl 2026 canlı ölçümü —
   renkli şirkette sekme çerçevesi boşluğu ve listeli sekmenin flex'i kayboluyordu). Tema
   kuralıyla çakışan seçici ondan bir basamak daha özgül yazılır; sıraya güvenilmez. */
.recordform-body .dxbl-fl .dxbl-fl-gt .dxbl-fl-tab-content {
    border: 1px solid var(--nun-border, #dcdbd9);
    border-radius: 4px;
    margin-top: 10px;
    padding: 10px;
}

/* Çerçeve boşluk normalizasyonu (27 Tem 2026 canlı ölçüm turu): iç içe çizgiler arasında her
   yönde 10px — popup gövdesi ↔ form çerçevesi ↔ sekme çerçevesi ↔ grid çizgisi. Tema üç farklı
   boşluk kullanıyordu (modal 6/24/24, sekme içi 14, tab item gutter'ı 16 ≠ satırın -12'si → +4
   kayma); !important yalnız modal'da (tema kuralı spesifiklikle yenilemedi — min-height ailesi
   gibi işlevsel istisna). Tab item gutter'ı satırla eşitlenir ki sekme çizgisi kimlik alanının
   alanlarıyla aynı hattan başlasın. */
.dxbl-modal .dxbl-modal-body:has(.recordform-container) {
    padding: 10px !important;
}

.recordform-body .dxbl-fl > .dxbl-row > .dxbl-fl-gt {
    padding-left: 12px;
    padding-right: 12px;
    /* Son satır olan sekme kabının 12px alt marjı form gövdesini görünmez taşırıyordu
       (scrollbar'ın kaynağı) — alt boşluk zaten gövde padding'inden gelir. */
    margin-bottom: 0;
}

.recordform-body .dxbl-fl-tab-content .listlayout-toolbar-container {
    margin: 0 0 10px 0;
}

.recordform-body .dxbl-fl-tab-content .listlayout-component-container {
    padding: 0;
}

/* .dxbl-fl-gt basamağı display:flex içindir (yukarıdaki not — renkli şirkette temanın
   display:block'u kazanıyor, zincir kopuyor ve gömülü liste 0 yüksekliğe iniyordu). */
.recordform-body .dxbl-fl-gt .dxbl-fl-tab-content:has(.dxbl-grid),
.recordform-body .dxbl-fl-gt .dxbl-fl-tab-content:has(.dxbl-fl-tab-item:only-child .nun-sheet) {
    /* Pay canlı ölçümle: popup calc(100vh-100px) − başlık/kimlik alanı/sekme başlığı/footer
       + 10px'lik boşluklar (27 Tem 2026 — gövde taşması 0 hedefi). */
    height: calc(100vh - 382px);
    min-height: 240px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

/* Gömülü listenin kabı sekme içinde saf flex çocuğudur: kendi height:100%'ü (tam sayfa modunun
   kuralı) burada padding'i yutuyordu — grid alt çizgisi sekme çizgisine yapışıyordu. */
.recordform-body .dxbl-fl-tab-content:has(.dxbl-grid) > .listlayout-container {
    height: auto !important;
    flex: 1 1 0;
    min-height: 0;
}

/* Sekme içeriğinin iç sarmalı (.dxbl-row) tepeden -12px marj taşır — %100 zincirini 12px
   şişirip grid'i alt çizgiye bindiriyordu (27 Tem 2026 ölçüm turu); grid'li sekmede sıfırlanır.
   Alt 10px boşluk bileşen kabından verilir (kırpılmadan görünen tek yer — .listlayout-container
   basamağı scoped bundle'ı spesifiklikle yenmek için). */
.recordform-body .dxbl-fl-tab-content:has(.dxbl-grid) > .dxbl-row,
.recordform-body .dxbl-fl-tab-content:has(.dxbl-fl-tab-item:only-child .nun-sheet) > .dxbl-row {
    margin-top: 0;
}

.recordform-body .dxbl-fl-tab-content:has(.dxbl-grid) .listlayout-container .listlayout-component-container {
    padding-bottom: 10px;
}

.recordform-body .dxbl-fl-tab-content:has(.dxbl-grid) > *,
.recordform-body .dxbl-fl-tab-content:has(.dxbl-fl-tab-item:only-child .nun-sheet) > * {
    flex: 1 1 auto;
    min-height: 0;
}

/* Kabın içindeki DevExpress katmanları (canlı DOM ölçümüyle bulundu — 27 Tem 2026): sekme
   içeriği item'ı ayrı bir .dxbl-row + .dxbl-fl-tab-item + .dxbl-fl-ctrl zinciriyle sarar; item
   flex 0 0 auto / min-height auto olduğundan kaptan taşıyordu (993px > 905px kap — grid
   kırpılıyor, scroll oluşmuyordu). height: 100% + min-height: 0 zinciri boyu kaba bağlar;
   ctrl flex kolona döner ki listlayout-container (flex: 1) kalanı doldursun. */
.recordform-body .dxbl-fl-tab-content:has(.dxbl-grid) .dxbl-fl-tab-item,
.recordform-body .dxbl-fl-tab-content:has(.dxbl-fl-tab-item:only-child .nun-sheet) .dxbl-fl-tab-item {
    min-height: 0;
    height: 100%;
}

.recordform-body .dxbl-fl-tab-content:has(.dxbl-grid) .dxbl-fl-tab-item > .dxbl-fl-ctrl,
.recordform-body .dxbl-fl-tab-content:has(.dxbl-fl-tab-item:only-child .nun-sheet) .dxbl-fl-tab-item > .dxbl-fl-ctrl {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

/* Sheet'li sekme de boyu doldurur (19.344 eki 6 — canlı bakış: Reçete/Rota kalemleri 15 satırda
   bitiyor, altı boş kalıyordu). Yukarıdaki grid'li sekme zinciri Sheet'e de açıldı; Sheet'i saran
   ekran kutusu (recipeedit-lines gibi) kalan boyu alır, Sheet'in height:100%'ü ona oturur ve
   satırlar Sheet'in kendi kaydırmasında akar. Yalnız Sheet sekmenin TEK öğesiyse (only-child):
   yanında alan taşıyan sekmede (aktarım hedefinin Alan Eşlemeleri) öğeler aynı sarmal satırı
   paylaşır, yüzde yükseklik Sheet'i kırpardı — o sekme içerik boyunda kalır. */
.recordform-body .dxbl-fl-tab-content:has(.dxbl-fl-tab-item:only-child .nun-sheet) .dxbl-fl-tab-item > .dxbl-fl-ctrl > * {
    flex: 1 1 0;
    min-height: 0;
}

/* Küçük ekranda (mobil) popup'lar tam ekran. CssClass, popup'ın dialog elemanına
   (<dxbl-modal-dialog>) uygulanır; DevExpress bu elemana varsayılan 28px margin verip
   viewport'un ortasına yerleştirir. Genişlik/yükseklik zaten 100vw/100vh (inline) olduğundan
   tek yapmamız gereken margin'i sıfırlayıp taşmayı önlemek. */
.nun-popup-fullscreen {
    margin: 0 !important;
    width: 100vw !important;
    height: 100vh !important;
    max-width: 100vw !important;
    max-height: 100vh !important;
    border-radius: 0 !important;
}

/* ListLayout küçük-ekran menü popup'ı (alt yapışık tam genişlik "bottom sheet"). Kurallar
   DxPopup'ın CssClass/HeaderCssClass/BodyCssClass API'sinden bağlanır; popup portal DOM'unda
   (bileşen ağacının dışında) çizildiğinden scoped .razor.css işlemez — tanımlandığı yer bu
   global dosyadır (ListLayout.razor'daki inline <style> bloğundan taşındı; inline style
   yasağı, 22 Tem 2026). */
.listlayout-popupmenu-container {
    width: 100vw !important;
    min-width: 100vw !important;
    max-width: 100vw !important;
    height: 70vh;
    margin: 0px !important;
    padding: 0px !important;
    left: 0px !important;
    bottom: 0px !important;
    position: absolute !important;
}

.listlayout-popupmenu-header-container {
    margin: 0px !important;
    padding: 10px !important;
}

.listlayout-popupmenu-body-container {
    padding: 0px 10px 10px 10px !important;
    border-bottom-left-radius: 0 !important;
    border-bottom-right-radius: 0 !important;
}

/* ReportViewer wrapper'ı: native viewer yüksekliğini kabından alır; kap,
   bulunduğu gövdeyi (popup body / sayfa) doldurur. min-height: 0 flex tuzağı kuralıyla aynı
   aile — viewer'ın iç scroll'u kabı taşmasın. */
.nun-report-viewer {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    /* Çok sayfalı belgede viewer kabı aşarsa kap kaydırır (26 Tem 2026 — birleşik basımda içerik
       taşıyor, scrollbar yoktu; viewer'ın iç scroll zinciri kendini kurmadığında son güvence). */
    overflow: auto;
}

.nun-report-viewer > * {
    flex: 1 1 auto;
    min-height: 0;
}

/* Pivot wrapper'ı: viewer wrapper'ıyla aynı aile — pivot yüksekliğini
   kabından alır, iç scroll kabı taşmaz. */
.nun-pivot {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: auto;
}

.nun-pivot > * {
    flex: 1 1 auto;
    min-height: 0;
}

/* Grafik wrapper'ı (Chart / PieChart): pivot wrapper'ıyla aynı aile — grafik
   yüksekliğini kabından alır (kap yüksekliksizse grafik de yüksekliksiz kalır;
   kabın yüksekliğini ekranın .razor.css'i verir). */
.nun-chart {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

.nun-chart > * {
    flex: 1 1 auto;
    min-height: 0;
}

/* Grafik ipucunun içeriği (bizim şablonumuz — kutunun kendisi DevExpress'in). */
.nun-chart-tooltip {
    padding: 0.5rem 0.75rem;
}

.nun-chart-tooltip-series {
    font-weight: 600;
}

/* Dinamik grid wrapper'ı (Grid tipi rapor çalıştırması): pivot wrapper'ıyla
   aynı aile — grid yüksekliğini kabından alır, iç scroll kabı taşmaz. */
.nun-dynamicgrid {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: auto;
}

.nun-dynamicgrid > * {
    flex: 1 1 auto;
    min-height: 0;
}
