/* 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.
   KALDIRMAYIN. (Önceki üründen 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 kolonu vakası; 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 (19.60/D ruhu). */
.dxbl-grid-focused-row .dxbl-checkbox .dxbl-image {
    color: inherit;
    fill: currentColor;
}

/* GÖMÜLÜ LİSTELİ FORM SEKMESİ (19.109 devamı — 26-27 Tem geri bildirimi): form içine gömülen
   grid popup gövdesini UZATMAZ — sekme içeriği popup boyundan türeyen SABİT yükseklik alır,
   grid KENDİ scroll'unu kullanır (TFS/TemmuzFlowService dersi: grid'e yükseklik form layout
   zincirinden DEĞİL, kaptan verilir — DxFormLayout kimlik şeridiyle sekmeleri AYNI sarmal
   .dxbl-row'da tuttuğundan flex büyütme satır aralarına boşluk dağıtır, o yol ÇIKMAZ).
   Hesap: popup calc(100vh - 100px) + başlık/kimlik şeridi/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 ÇİZGİ DİLİYLE çerçevelenir (27 Tem): sekmeli formda alanlar,
   gruplu düz formdaki gibi çerçeve içinde durur — RecordForm gövde çerçevesinin sekme ikizi. */
/* Seçicideki .dxbl-fl basamağı ŞART: tema kuralı (.dxbl-fl .dxbl-fl-tab-content, 14px padding)
   sonra yüklendiğinden eşit spesifiklikte kazanıyordu (27 Tem ölçümü). */
.recordform-body .dxbl-fl .dxbl-fl-tab-content {
    border: 1px solid var(--nun-border, #dcdbd9);
    border-radius: 4px;
    margin-top: 10px;
    padding: 10px;
}

/* ÇERÇEVE BOŞLUK NORMALİZASYONU (27 Tem 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 şeridi
   alanlarıyla AYNI 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 nefes 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;
}

.recordform-body .dxbl-fl-tab-content:has(.dxbl-grid) {
    /* Pay canlı ölçümle: popup calc(100vh-100px) − başlık/kimlik şeridi/sekme başlığı/footer
       + 10px'lik nefesler (27 Tem — 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 kipinin
   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 ölçüm turu); grid'li sekmede sıfırlanır.
   Alt 10px nefes komponent 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 {
    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) > * {
    flex: 1 1 auto;
    min-height: 0;
}

/* Kabın içindeki DevExpress halkaları (canlı DOM ölçümüyle bulundu — 27 Tem): 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 doğ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 {
    min-height: 0;
    height: 100%;
}

.recordform-body .dxbl-fl-tab-content:has(.dxbl-grid) .dxbl-fl-tab-item > .dxbl-fl-ctrl {
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
}

/* 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 DIŞINDA) çizildiğinden scoped .razor.css işlemez — evi 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 sarmalayıcısı (19.85 — P9): 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 — birleşik basımda içerik
       taşıyor, scrollbar yoktu; viewer'ın iç scroll zinciri kendini kurmadığında son savunma). */
    overflow: auto;
}

.nun-report-viewer > * {
    flex: 1 1 auto;
    min-height: 0;
}

/* Pivot sarmalayıcısı (19.96/E): viewer sarmalayıcısı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;
}
