/* Sevkora brand palette
   -------------------------------------------------------------------------
   Primary: deep teal (#0F6E6B) — reads as "logistics / trust / calm control",
   distinct from the previous Radzen default indigo-violet and from typical
   "generic SaaS purple". Accent: amber-orange (#E8862E) — the classic
   warehouse/shipping "attention" color (hazard stripes, pallet labels,
   dispatch stamps), used for calls to action and highlights, never for body
   text (see contrast note below).

   These override Radzen's CSS custom properties directly, so they apply on
   top of *every* Radzen theme (Material, Standard, Software, Humanistic —
   light and dark) selectable from Ayarlar > Görünüm: only the skin's shape
   language/typography changes with the theme, the brand colors stay put.
   Deliberately NOT touching surface tokens (--rz-base-background-color,
   --rz-text-color, --rz-sidebar-background-color, ...) — those keep coming
   from whichever theme (and light/dark variant) is active, which is what
   keeps dark mode correct instead of fighting it with fixed hex values.

   Accessibility: --rz-on-secondary* is repointed to a dark ink instead of
   Radzen's default white, because amber is too light for white text to
   clear WCAG AA (2.66:1) — dark ink on amber clears 6.24:1. --rz-link-color is
   repointed to the primary teal instead of the (now amber) secondary, for
   the same reason: link text needs 4.5:1 and teal-on-white clears 6.06:1.

   Ratios here were computed and verified 2026-07-22. That pass also found three
   -light/-dark variant pairs sitting between 3:1 and 4.5:1 — enough for large
   text and UI components, short of normal body text. In Radzen these tokens all
   end up as *label text* (.rz-button/.rz-badge/.rz-chip .rz-shade-* and the
   outlined/text secondary hover states), and no screen currently renders those
   combinations, so nothing was visibly broken. They were fixed anyway rather
   than documented as a caveat, because the trap only springs later, silently,
   the first time someone writes Shade.Lighter on a secondary button:

     --rz-on-primary-light on --rz-primary-light   3.73:1 -> 4.58:1
     --rz-on-secondary-dark on --rz-secondary-dark 4.21:1 -> 4.75:1
     --rz-on-secondary-lighter on amber-lighter    3.53:1 -> 5.14:1

   The first one was fixed by darkening the *background* (--sevkora-primary-light),
   not the text: that teal sat in the middle-luminance dead zone where neither
   white nor any usable dark ink clears 4.5:1 (near-black only reached 4.39:1). */
:root {
    --sevkora-primary: #0F6E6B;
    /* Lightest teal that still clears 4.5:1 against white label text (4.58:1);
       the previous #3C918D only reached 3.73:1. Still clearly lighter than
       --sevkora-primary, which is all this variant is for. */
    --sevkora-primary-light: #34817D;
    --sevkora-primary-lighter: rgba(15, 110, 107, 0.12);
    --sevkora-primary-dark: #0B5250;
    --sevkora-primary-darker: #073B39;

    --sevkora-accent: #E8862E;
    --sevkora-accent-light: #EFA35C;
    --sevkora-accent-lighter: rgba(232, 134, 46, 0.14);
    --sevkora-accent-dark: #C06A1B;
    --sevkora-accent-darker: #9A5414;
    --sevkora-accent-ink: #2B1B0A;
    /* Deeper ink used only on --sevkora-accent-dark, where the regular ink lands
       at 4.21:1; this reaches 4.75:1. */
    --sevkora-accent-ink-deep: #1A1005;

    --rz-primary: var(--sevkora-primary);
    --rz-primary-light: var(--sevkora-primary-light);
    --rz-primary-lighter: var(--sevkora-primary-lighter);
    --rz-primary-dark: var(--sevkora-primary-dark);
    --rz-primary-darker: var(--sevkora-primary-darker);
    --rz-on-primary: #ffffff;
    --rz-on-primary-light: #ffffff;
    --rz-on-primary-dark: #ffffff;
    --rz-on-primary-darker: #ffffff;

    --rz-secondary: var(--sevkora-accent);
    --rz-secondary-light: var(--sevkora-accent-light);
    --rz-secondary-lighter: var(--sevkora-accent-lighter);
    --rz-secondary-dark: var(--sevkora-accent-dark);
    --rz-secondary-darker: var(--sevkora-accent-darker);
    --rz-on-secondary: var(--sevkora-accent-ink);
    --rz-on-secondary-light: var(--sevkora-accent-ink);
    --rz-on-secondary-dark: var(--sevkora-accent-ink-deep);
    /* The darker amber, not --sevkora-accent-dark: on the 14%-alpha amber tint the
       latter only reaches 3.53:1, this one 5.14:1. */
    --rz-on-secondary-lighter: var(--sevkora-accent-darker);

    --rz-link-color: var(--rz-primary);
    --rz-link-hover-color: var(--rz-primary-dark);
}

html, body {
    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
}

h1:focus {
    outline: none;
}

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "Beklenmeyen bir hata oluştu."
    }

/* Printable document pages (/print/sales-order/{id}, /print/shipment/{id} — PrintLayout.razor and
   Components/Pages/Print/*). Global (not component-scoped CSS) on purpose: PrintLayout's own
   screen-only status text and each print page's own screen-only "Yazdır / Kapat" buttons all share
   this one .no-print utility, and Blazor's CSS isolation would otherwise scope a component's rules
   to only that component's own markup. */
@media print {
    .no-print {
        display: none !important;
    }
}


/* ADR-0027 firma bağlamına geçiş.
   Şerit KAPATILAMAZ ve dikkat çekici olmak zorundadır: kullanıcının başka bir firmanın verisine
   baktığını bir an bile unutmaması gerekir. Uyarı rengi bilinçli — bilgi (mavi) yeterince
   ayırt edici değil, hata (kırmızı) ise "bir şey bozuldu" izlenimi verirdi. */
.sevkora-impersonation-bar {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.35rem 0.75rem;
    border-radius: 0.375rem;
    background: var(--rz-warning-lighter, #fff4e5);
    color: var(--rz-warning-darker, #663c00);
    border: 1px solid var(--rz-warning-light, #ffb547);
    white-space: nowrap;
}

.sevkora-impersonation-picker {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

/* Bağlam aktifken şerit hem metni hem seçiciyi hem Çık'ı taşır; dar ekranda başlığı taşırmasın
   diye metin kısalabilir ama seçici ve Çık daralmaz. */
.sevkora-impersonation {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    min-width: 0;
}

.sevkora-impersonation-bar .rz-dropdown,
.sevkora-impersonation-bar button {
    flex: 0 0 auto;
}

.sevkora-impersonation-bar .rz-text-body2 {
    overflow: hidden;
    text-overflow: ellipsis;
}

/* =========================================================================
   G25 mobil uyum (2026-07-30) — SADECE medya sorgusu eklemeleri.
   Masaüstü görünümü bilinçli olarak değişmez: aşağıdaki her kural yalnız
   max-width kırılımı altında devreye girer; kırılım üstünde hiçbir seçici
   eşleşmez. Kırılım 768px — Radzen'in kendi rz-sidebar-responsive kırılımı
   ve MainLayout'taki RadzenMediaQuery sorgusuyla bire bir aynı tutuldu.
   ========================================================================= */
@media (max-width: 768px) {
    /* 1) Kenar menü off-canvas: RadzenLayout grid'inde kenar menü normalde
       gövdeyi sıkıştıran bir kolondur; 360-420px ekranda 250px'lik menü
       açıldığında gövdeye yer kalmaz. position:absolute + grid-area sayesinde
       menü akıştan çıkar (kolonu 0'a düşer), açıldığında gövdenin ÜZERİNE
       biner. Genişlik yönetimi Radzen'in kendi rz-sidebar-expanded /
       rz-sidebar-collapsed sınıflarında kalır — burada genişlik ezilmez.
       :not(...) — sağa konumlu bir kenar menü eklenirse bu kural ona bulaşmaz. */
    .rz-layout {
        position: relative;
    }

    .rz-layout .rz-sidebar:not(.rz-sidebar-end):not(.rz-sidebar-right) {
        position: absolute;
        top: 0;
        bottom: 0;
        left: 0;
        height: auto;
        max-width: 85vw;
        z-index: 3; /* gövdenin üzerinde; dialog/dropdown katmanlarının (1000+) çok altında */
        box-shadow: 0 0 24px rgba(0, 0, 0, 0.25);
    }

    /* 2) SAYFA gövdesi asla yatay kaydırmaz (CLAUDE.md grid kuralının mobil
       karşılığı). Grid'ler zaten kendi kabında kaydırır (Radzen
       .rz-data-grid-data overflow-x:scroll); dokunmatik atalet eklenir. */
    /* .rz-body.rz-body: özgüllüğü Radzen temasının kendi ".rz-layout .rz-body
       {overflow:auto}" kuralının üzerine çıkarır — stylesheet sıralaması ileride
       değişse bile bu kural kazanır. */
    .rz-layout .rz-body.rz-body {
        overflow-x: hidden;
    }

    .rz-data-grid-data {
        -webkit-overflow-scrolling: touch;
    }

    /* 3) Sayfa kenar boşluğu ve ana başlık dar ekranda makul küçülür.
       (.rz-p-4 Radzen'de !important taşıdığı için burada da gerekir; seçici
       yalnız gövdenin kök sarmalayıcısını hedefler, kart içi rz-p-4'leri değil.) */
    .rz-layout .rz-body > .rz-p-4 {
        padding: 0.75rem !important;
    }

    .rz-layout .rz-body .rz-text-h3 {
        font-size: 1.5rem;
    }

    /* 4) Toolbar satırları (arama + anahtarlar + butonlar) sığmadığında alt
       satıra sarar. RadzenStack flex-wrap'i inline stil olarak bastığı için
       !important zorunlu. Yalnız yatay stack'ler hedeflenir; taşma yerine
       sarma her durumda daha iyi bir bozulma biçimidir. */
    .rz-layout .rz-body .rz-stack.rz-flex-row {
        flex-wrap: wrap !important;
    }

    /* 5) Sabit genişlikli arama/metin kutuları (ör. liste arama kutusu 16rem)
       kendi kabından taşamaz. */
    .rz-layout .rz-body input.rz-textbox {
        max-width: 100%;
    }

    /* 6) Üst çubuk: arama kutusu sarmalayıcısının yan boşluğu daralır
       (inline padding'i ezmek için !important). */
    .sevkora-header-search {
        padding: 0 0.5rem !important;
    }

    /* 7) Dokunmatik hedef: kenar menü bağlantıları en az ~44px yüksekliğe
       çekilir (yalnız dar ekranda; masaüstü menü metrikleri değişmez). */
    .rz-layout .rz-sidebar .rz-navigation-item-link {
        min-height: 2.75rem;
    }

    /* =====================================================================
       G28 mobil üst çubuk (2026-07-30) — yalnız bu 768px bloğu içinde.
       Firma-bağlamı (ImpersonationBar) dar ekranda tek ikona iner; dropdown
       (inline min-width:14rem — telefondaki yatay taşmanın ve logo yanındaki
       "bozuk beyaz kutu"nun kökü) üst çubukta hiç render edilmez, dokununca
       açılan panelde durur. Aşağıdaki sınıflar yalnız ImpersonationBar'ın
       dar-ekran dalında basılır; masaüstü işaretlemesinde geçmezler.
       ===================================================================== */

    /* 8) Kompakt firma-bağlamı ikonu. Dokunmatik hedef ≥44px (2.75rem = 44px).
       Bağlam AKTİFKEN masaüstündeki kalıcı şeridin renkleriyle (amber/uyarı)
       boyanır — kullanıcı başka firmaya baktığını üst çubuktan her an görür. */
    .sevkora-impersonation-mobile {
        position: relative;
        flex: 0 0 auto;
        display: flex;
        align-items: center;
    }

    .sevkora-impersonation-toggle {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        min-width: 2.75rem;
        min-height: 2.75rem;
        padding: 0;
        border: none;
        border-radius: 0.375rem;
        background: transparent;
        color: inherit;
        cursor: pointer;
    }

    .sevkora-impersonation-toggle-active {
        background: var(--rz-warning-lighter, #fff4e5);
        color: var(--rz-warning-darker, #663c00);
        border: 1px solid var(--rz-warning-light, #ffb547);
    }

    /* 9) Panel dışına dokunuş paneli kapatır (GlobalSearchBox'taki gsb-overlay
       deseni — JS interop yok). z-index'ler de aynı katmanlar: 1040/1041. */
    .sevkora-impersonation-overlay {
        position: fixed;
        inset: 0;
        z-index: 1040;
        background: transparent;
    }

    /* 10) Açılan panel: üst çubuğun hemen altında, viewport'a sığar (fixed +
       yan boşluk; ikona çapa yapılsaydı 22rem'lik panel 360px ekranda sol
       kenardan taşardı). İçerik masaüstündekiyle aynı: aktif bağlam metni,
       firma seçici, Çık. */
    .sevkora-impersonation-panel {
        position: fixed;
        top: calc(var(--rz-header-min-height, 3.125rem) + 0.375rem);
        left: 0.75rem;
        right: 0.75rem;
        z-index: 1041;
        display: flex;
        flex-direction: column;
        gap: 0.75rem;
        padding: 0.75rem;
        background: var(--rz-base-background-color, #fff);
        border: 1px solid var(--rz-border, #e0e0e0);
        border-radius: 0.375rem;
        box-shadow: 0 4px 16px rgba(0, 0, 0, 0.18);
    }

    /* Bağlam aktifken panel, masaüstü şeridiyle aynı uyarı görünümünü taşır. */
    .sevkora-impersonation-panel-active {
        background: var(--rz-warning-lighter, #fff4e5);
        color: var(--rz-warning-darker, #663c00);
        border-color: var(--rz-warning-light, #ffb547);
    }

    /* Çık butonu panelin sağ altında (CLAUDE.md buton yerleşimi kuralı). */
    .sevkora-impersonation-panel > .rz-button {
        align-self: flex-end;
    }

    /* 11) Üst çubuktaki diğer dokunmatik hedefler de ≥44px'e çekilir
       (yalnız dar ekranda; masaüstü üst çubuk metrikleri değişmez). */
    .rz-layout .rz-header .rz-sidebar-toggle {
        min-width: 2.75rem;
        min-height: 2.75rem;
    }

    .rz-layout .rz-header .rz-profile-menu .rz-menu-toggle {
        min-height: 2.75rem;
        align-items: center;
    }

    /* =====================================================================
       G30 mobil rötuş (2026-07-30) — yalnız bu 768px bloğu içinde.
       ===================================================================== */

    /* 12) Sekme şeridi (RadzenTabs) dar ekranda TEK SATIR kalır ve yatay
       kaydırılır. Radzen'in .rz-tabview-nav'ı flex'tir ama taşma yönetimi
       yoktur: sekmeler ya min-content'e ezilir (başlık 3 satıra kırılır —
       375px'te Stok Listesi'nde görüldü) ya da görünmez taşar (Ayarlar'da
       6 sekmenin scrollWidth'i 606px, görünür alan 303px ölçüldü). Sayfa
       ve dialog içindeki bütün tabview'ları kapsar. */
    .rz-tabview-nav {
        flex-wrap: nowrap;
        overflow-x: auto;
        overflow-y: hidden;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: thin;
    }

    .rz-tabview-nav li {
        flex: 0 0 auto; /* sekme ezilmez; şerit kayar */
    }

    .rz-tabview-nav li .rz-tabview-title {
        white-space: nowrap; /* başlık daima tek satır */
    }

    /* 13) Dialoglar dar ekranda viewport'u aşamaz; içerik dışarı taşmaz.
       KÖK NEDEN NOTU (2026-07-30 incelemesi): "Sipariş detayı 375px'te
       188px açıldı" bulgusu genişlik hatası değil ölçüm anı hatasıydı —
       Radzen'in rz-dialog-open-scale animasyonu scale(.5)'ten başlar
       (375 x 0.5 = 187.5px) ve tarama animasyon bitmeden ölçmüş. Kalıcı
       genişliği zaten Radzen teması yönetiyor: material.css ≤768px'te
       .rz-dialog'a width:100%!important verir (inline min(96vw,80rem)'i
       ezer, tam genişlik açar). Bu yüzden burada genişlik EZİLMEZ; yalnız
       güvenlik sınırı + içerik taşma kaynakları kapatılır. */
    .rz-dialog-wrapper .rz-dialog {
        max-width: 100vw;
    }

    /* Kural 4-5'in dialog karşılığı: dialoglar .rz-layout DIŞINDA render
       edildiği için yukarıdaki .rz-layout kapsamlı kurallar onlara işlemez.
       Yatay stack'ler sarar, sabit genişlikli girişler kabından taşamaz. */
    .rz-dialog .rz-stack.rz-flex-row {
        flex-wrap: wrap !important;
    }

    .rz-dialog input.rz-textbox,
    .rz-dialog .rz-numeric,
    .rz-dialog .rz-dropdown {
        max-width: 100%;
    }

    .rz-dialog .rz-data-grid-data {
        -webkit-overflow-scrolling: touch; /* grid kendi kabında kayar */
    }

    /* 14) Grid içi dokunmatik hedefler ≥44px (2.75rem). Satır eylem
       butonları ButtonSize.Small/ExtraSmall ile 1.75rem (28px) çiziliyor —
       telefonda ıskalanıyor. Yalnız ikon butonlar hedeflenir; metinli
       butonların yerleşimi değişmez. */
    .rz-data-grid .rz-button-icon-only {
        min-width: 2.75rem;
        min-height: 2.75rem;
    }

    /* Filtre satırı: giriş kutusu + içine gömülü operatör düğmesi
       (.rz-filter-button yüksekliğini --rz-input-height'tan türetir) ve
       huni ikonu birlikte 44px'e çıkar. Değişken hem kapta (operatör
       düğmesi okusun diye) hem girişte (.rz-input-sm/md kendi üzerinde
       yeniden bildirdiği için) ezilir. */
    .rz-data-grid .rz-cell-filter-content,
    .rz-data-grid .rz-cell-filter-content .rz-input-sm,
    .rz-data-grid .rz-cell-filter-content .rz-input-md {
        --rz-input-height: 2.75rem;
    }

    .rz-data-grid .rz-grid-filter-icon {
        min-width: 2.75rem;
        min-height: 2.75rem;
    }

    /* 15) Sayfalayıcı dokunmatik hedefleri ≥44px (G47, 31 Temmuz 2026).
       Radzen'in varsayılanı sayfa numarası düğmelerinde 2.25rem (36px)
       min-width, ileri/geri/ilk/son düğmelerinde 0.25rem padding — ikisi de
       44px eşiğinin altında ve telefonda yanlış sayfaya basılıyor. Sınıf
       öneki `rz-pager`; `rz-paginator` DEĞİL (Radzen 11'de öyle bir sınıf yok,
       yazan not alsın). inline-flex, min-height verildiğinde rakamın üste
       yapışmasını engeller — varsayılan inline-block + text-align:center
       yalnız yatayda ortalıyor. Yalnız bu media query içinde: masaüstü
       görünümü birebir aynı kalır. */
    .rz-pager .rz-pager-element,
    .rz-pager .rz-pager-page {
        min-width: 2.75rem;
        min-height: 2.75rem;
        display: inline-flex;
        align-items: center;
        justify-content: center;
    }
}

/* Açılır liste popup'ları içeriğe göre genişler (G33, 2026-07-30 — kullanıcı isteği:
   "en uzun kelimeyi de kapsayacak şekilde açılsın, taşıyor gibi görünüyor").
   Radzen, popup'u açarken panele INLINE width/min-width = kapalı kutu genişliği yazar
   (Radzen.Blazor.js openPopup) ve RadzenDropDown'ın PopupStyle'ı panele hiç ulaşmıyor —
   EnumFilterDropdown'daki "min-width: max-content" denemesi bu yüzden etkisizdi. Inline
   stili yalnız !important ezer. min-width'e DOKUNULMAZ: inline değer (kutu genişliği)
   taban kalır, panel yalnız içerik daha genişse büyür. Tavan, uzun seçeneklerin ekranı
   kaplamaması ve dar ekranda viewport'tan taşmaması içindir. */
.rz-popup.rz-dropdown-panel,
.rz-popup.rz-multiselect-panel {
    width: max-content !important;
    max-width: min(24rem, calc(100vw - 2rem));
}

/* Seçenek metni sarılmaz: sarılırsa max-content dar hesaplanır ve iki satırlı seçenek
   görünümü geri gelir. Tavana takılan istisna metin panel içinde yatay kayar. */
.rz-popup.rz-dropdown-panel .rz-dropdown-item,
.rz-popup.rz-multiselect-panel .rz-multiselect-item {
    white-space: nowrap;
}

/* Kapalı filtre kutusu ezilmesin (G33'ün ikinci yarısı): tablo, kolonların Width
   önerilerinden daha dar bir alana sıkışınca açılır liste filtreli kolonlar da küçülür ve
   "Tümü" yer tutucusu "Tü..." diye kırpılırdı. Açılır liste filtresi taşıyan kolon bu
   tabanın altına inemez — tablo bunun yerine kendi kabında yatay kayar (grid standardı:
   sığmayan tablo kolon ezmek yerine kaydırır). */
.rz-data-grid th:has(.rz-cell-filter-content .rz-dropdown),
.rz-data-grid th:has(.rz-cell-filter-content .rz-multiselect) {
    min-width: 8rem;
}

/* Aynı sorunun ikinci bileşeni: tema, etikete temizle (X) + çevron ikonları için 3rem sağ
   boşluk ayırır; oysa yer tutucu ("Tümü") görünürken temizle ikonu HİÇ yoktur — 8rem'lik
   kutuda bile metne 32px kalır ve "Tümü" → "Tü..." kırpılırdı. Yer tutucu durumunda boşluk
   yalnız çevronu (≈31px) karşılar; değer seçilince Radzen rz-placeholder'ı kaldırır ve
   temizle ikonlu geniş boşluk geri gelir. */
.rz-dropdown .rz-dropdown-label.rz-placeholder {
    padding-right: 2rem;
}

@media (max-width: 640px) {
    /* Üst çubukta yer açma: marka METNİ ve profil adının metni gizlenir —
       logo ve hesap ikonu kalır, işlev kaybolmaz. Arama kutusu ile profil
       menüsünün taşmadan sığmasını sağlayan ana kazanım budur. */
    .sevkora-header-title {
        display: none;
    }

    .sevkora-profile-name {
        display: none;
    }
}
