:root {
    /* Tek kaynak: Marka rengi (kullanıcı isteği, 16.08.2026 — "10/10" tema geçişinde
       site.css'teki çakışan #2453ff ikinci :root bloğu kaldırıldı, tüm marka rengi
       artık yalnızca burada tanımlı). */
    --hw-primary: #3a63e0;
    --hw-primary-light: #5c81ea;
    --hw-primary-dark: #2949b0;
    --hw-primary-grad: linear-gradient(135deg, #3a63e0, #2949b0);
    --hw-sidebar-bg: #10192b;
    --hw-sidebar-bg-2: #16223a;
    --hw-sidebar-hover: #1c2b46;
    --hw-sidebar-active: #3a63e0;
    --hw-bg: #f5f6f9;
    --hw-text: #1d2939;
    --hw-card-bg: #ffffff;
    --hw-border: #e7eaf1;
    --hw-card-radius: 0.75rem;
    --hw-radius: 0.75rem;
    /* Kullanıcı isteği, 27.08.2026: "sol menüyü biraz daralt" — 232px'ten 208px'e
       indirildi (~%10 daha dar). */
    --hw-sidebar-width: 208px;
    --hw-shadow-sm: 0 1px 2px rgba(16, 24, 40, .04), 0 1px 3px rgba(16, 24, 40, .05);
    --hw-shadow-md: 0 6px 16px rgba(16, 24, 40, .07);
    --hw-card-shadow: 0 2px 10px rgba(16, 24, 40, .04), 0 1px 2px rgba(16, 24, 40, .04);
    --hw-card-shadow-hover: 0 10px 26px rgba(16, 24, 40, .08);
}

[data-theme='dark'] {
    --hw-bg: #0b1120;
    --hw-text: #e5e9f0;
    --hw-card-bg: #131b2c;
    --hw-border: #263349;
    --hw-sidebar-bg: #030712;
    --hw-sidebar-hover: #111827;
    /* Koyu temada marka rengi biraz aydınlatılır — düşük parlaklıklı zeminde daha
       iyi kontrast/okunabilirlik sağlar (kullanıcı isteği, 16.08.2026: "koyu tema
       kart görünümlerini düzenle"). */
    --hw-primary: #6b8ef2;
    --hw-primary-light: #8aa6f5;
    --hw-primary-dark: #4a6fe0;
    --hw-primary-grad: linear-gradient(135deg, #6b8ef2, #4a6fe0);
    --hw-card-shadow: 0 4px 18px rgba(0, 0, 0, .38), 0 1px 3px rgba(0, 0, 0, .3);
    --hw-card-shadow-hover: 0 16px 38px rgba(0, 0, 0, .5);
}

/* html'e ayrıca overflow:hidden verilmediğinde, body'nin kendi overflow:hidden'ı
   viewport'a "propagate" OLMAZ (CSS spec: yalnızca body'nin overflow'u varsayılan
   'visible' iken propagate eder) — bu durumda html kendi başına, kutusundan taşan
   herhangi bir içerik (ör. bir flex çocuğun min-height:0 zincirinin bir yerde
   kırılması) için KENDİ kaydırma çubuğunu açar. Sonuç: .hw-nav + .hw-content'in
   KENDİ scrollbar'larının YANINA üçüncü, istenmeyen bir tarayıcı/doküman scrollbar'ı
   daha eklenir (kullanıcı bildirimi, 29.08.2026: "3 tane scroll olmuş"). html'i de
   sabitleyerek tüm kaydırmayı yalnızca bu iki iç konteynere hapsediyoruz. */
html {
    height: 100%;
    overflow: hidden;
}

body {
    background-color: var(--hw-bg);
    color: var(--hw-text);
    font-family: "Inter", "Segoe UI", system-ui, -apple-system, sans-serif;
    font-size: .85rem;
    line-height: 1.5;
    transition: background-color 0.3s ease, color 0.3s ease;
    -webkit-font-smoothing: antialiased;
    height: 100vh;
    overflow: hidden;
}

/* HideChrome sayfaları (Login/Register + popup=true ile açılan Stok/Cari Düzenle gibi
   iframe içerikleri) .hw-sidebar/.hw-content SARMALAYICISI OLMADAN doğrudan <body>'ye
   render edilir — yukarıdaki genel overflow:hidden bu sayfalarda kaydırmayı TAMAMEN
   engelleyip formun alt kısmını (ör. Kaydet butonunu) erişilemez kılıyordu (kullanıcı
   bildirimi, 12.09.2026: "Satış ekranında satış kalemindeki stok kartını güncellerken
   kaydet butonu görünmüyor" — /Stok/Edit/{id}?popup=true iframe'i içinde). Bu sayfalarda
   body'nin kendi scroll'unu açıyoruz. */
body.hw-hidechrome-body {
    height: auto;
    min-height: 100vh;
    overflow-y: auto;
}
html:has(body.hw-hidechrome-body) {
    overflow: auto;
}

/* Satış Kalemleri satır avatarı — sadece mobil kart görünümünde (bkz. .hw-kalem-card,
   767.98px altı) gösterilir, masaüstünde gizli (kullanıcı isteği, 13.09.2026). */
.hw-kalem-avatar { display: none; }

/* Okunaklılık: başlıklar biraz daha sıkı, gövde metni ferah */
h1, h2, h3, h4, h5, h6 { letter-spacing: -.01em; }
.text-muted { color: #667085 !important; }

/* İkonlar: bi ikonlarını çevredeki metinle hizalar, "yeni tip" hissi için hafif kalınlaştırır */
i.bi { vertical-align: -0.09em; }
.btn i.bi, .hw-nav-link i.bi { font-size: 1rem; }

/* Sidebar */
.hw-sidebar {
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    width: var(--hw-sidebar-width);
    background: linear-gradient(180deg, var(--hw-sidebar-bg), var(--hw-sidebar-bg-2, var(--hw-sidebar-bg)));
    color: #cbd5e1;
    z-index: 1030;
    display: flex;
    flex-direction: column;
    box-shadow: 2px 0 12px rgba(16, 24, 40, .12);
    transition: transform .2s ease, background-color 0.3s ease;
}

.hw-sidebar .hw-brand {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: 1rem 1.25rem;
    color: #fff;
    font-weight: 700;
    font-size: 1rem;
    border-bottom: 1px solid rgba(255,255,255,.08);
    text-decoration: none;
    transition: background-color .15s ease;
}
/* Marka alanı artık Panel'e giden bir link — kullanıcı isteği, 15.08.2026:
   "Genel ve Panel menüsünü kaldırıp panel sayfa içeriği logo veya şirket
   yazısına tıklanınca ekrana gelsin". */
.hw-sidebar .hw-brand:hover { background-color: rgba(255,255,255,.06); color: #fff; }

.hw-sidebar .hw-brand .badge {
    background: var(--hw-primary);
}

.hw-nav {
    padding: .75rem .6rem;
    overflow-y: auto;
    flex: 1;
}

/* Modern renkli ikon rayı (kullanıcı isteği, 22.08.2026: "soldaki ana ve alt
   menülerde renkli ikonlar olsun ... yeni modern görünüm olsun"; 23.08.2026:
   referans görsele göre — dolu renkli ikon rozetleri, büyük yuvarlatılmış
   satırlar, aktif satırda tam genişlik mor/indigo vurgu — birebir eşleştirildi).
   Her grup kendi vurgu rengini `--grp-accent` CSS değişkeniyle taşır (bkz.
   _Sidebar.cshtml grupGorselleri sözlüğü); alt menü ikonları da aynı değişkeni
   miras alır, böylece grup ile alt öğeleri görsel olarak aynı renk ailesinden
   okunur. */
.hw-nav .hw-nav-section {
    font-size: .93rem;
    font-weight: 700;
    letter-spacing: .01em;
    color: #cbd5e1;
    /* Kullanıcı isteği, 29.08.2026: "menü yükseklikleri fazla ... çerçeveler
       birbirine değiyor" — dikey padding düşürüldü (.7rem -> .42rem). Sol padding
       de ayrıca düşürüldü (.75rem -> .5rem) — "ana menü ikonları biraz daha solda
       olsun. alt menü ile karışıyor": ana grup ikonu ile onun altındaki alt menü
       ikonu (bkz. .hw-nav-link, margin-left .35rem + padding-left .6rem) arasındaki
       yatay boşluk artırılarak iki seviye görsel olarak netçe ayrıştırıldı. */
    padding: .42rem .75rem .42rem .5rem;
    margin-top: .15rem;
    border-radius: .75rem;
}
.hw-nav button.hw-nav-section-toggle:hover {
    color: #fff;
    background: rgba(255,255,255,.06);
}

.hw-nav button.hw-nav-section-toggle {
    display: flex;
    align-items: center;
    gap: .75rem;
    width: 100%;
    /* `background: none` BİLEREK yok — bu buton `[aria-expanded="true"]` haliyle
       aynı özgüllükte bir `background` kısayolu bildiriyordu ve 23.08.2026'daki
       canlı testte (özgüllük hesabına göre KAZANMAMASI gerekirken) aktif satır
       vurgusunu eziyordu; native <button> zemini varsayılan olarak zaten
       transparent, bu bildirim gereksizdi. */
    border: none;
    background-color: transparent;
    cursor: pointer;
    transition: background-color .15s ease;
}

.hw-nav button.hw-nav-section-toggle[aria-expanded="true"] {
    color: #fff;
    /* Referans görseldeki aktif satır vurgusu: tam genişlik, yumuşak mor/indigo
       zemin (grubun kendi rengiyle uyumlu, sabit bir mor değil). `--grp-bg-aktif`/
       `--grp-border-aktif` C# tarafında ÖNCEDEN hesaplanmış rgba() değerleridir
       (bkz. _Sidebar.cshtml'deki Rgba() — CSS `color-mix()` yerine tercih edildi,
       daha geniş tarayıcı desteği için). `background-color` LONGHAND kullanılıyor;
       yukarıdaki temel kural da aynı longhand'ı kullanıyor artık, bu yüzden
       kısayol/longhand karışıklığı olmadan doğrudan aynı kategoride yarışıyorlar. */
    background-color: var(--grp-bg-aktif, rgba(99,102,241,.3));
    box-shadow: inset 0 0 0 1px var(--grp-border-aktif, rgba(99,102,241,.45));
}

.hw-nav-section-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* Kullanıcı isteği, 29.08.2026: "ikonları biraz küçült" — 1.4rem/.72rem'den
       1.2rem/.65rem'e indirildi (bkz. önceki not, 27.08.2026: 1.65rem'den 1.4rem'e). */
    width: 1.2rem;
    height: 1.2rem;
    flex-shrink: 0;
    border-radius: .45rem;
    /* Referans görselde ikon rozeti her zaman DOLU renk (yalnızca hover/aktifte
       değil) — grup satırı pasifken bile kendi rengiyle tanınır. */
    background: var(--grp-accent, #64748b);
    color: #fff;
    font-size: .65rem;
    box-shadow: 0 2px 6px var(--grp-border-aktif, rgba(100,116,139,.45));
    transition: transform .15s ease;
}
.hw-nav button.hw-nav-section-toggle:hover .hw-nav-section-icon,
.hw-nav button.hw-nav-section-toggle[aria-expanded="true"] .hw-nav-section-icon {
    transform: scale(1.05);
}

.hw-nav-section-label {
    flex: 1;
    text-align: left;
}

.hw-nav .hw-nav-chevron {
    font-size: .7rem;
    color: #9fb0c9;
    transition: transform .15s ease, color .15s ease;
    flex-shrink: 0;
}

.hw-nav button.hw-nav-section-toggle[aria-expanded="true"] .hw-nav-chevron {
    transform: rotate(180deg);
    color: #fff;
}

.hw-nav a.hw-nav-link,
.hw-sidebar-footer .hw-nav-link {
    display: flex;
    align-items: center;
    gap: .65rem;
    /* Kullanıcı isteği, 29.08.2026: "menü yükseklikleri fazla ... çerçeveler
       birbirine değiyor" — dikey padding düşürüldü (.45rem -> .32rem). */
    padding: .32rem .6rem;
    border-radius: .6rem;
    color: #cbd5e1;
    text-decoration: none;
    /* Kullanıcı isteği, 16.08.2026: "soldaki alt menüler okunmuyor, bir iki
       birim fontu büyük olsun" — .82rem çok küçük kalmıştı. */
    font-size: .95rem;
    margin-bottom: .1rem;
    margin-left: .35rem;
    transition: background .15s ease, color .15s ease, transform .15s ease;
}

.hw-nav-link-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    /* Kullanıcı isteği, 29.08.2026: "ikonları biraz küçült" — 1.15rem/.6rem'den
       1.0rem/.55rem'e indirildi. */
    width: 1rem;
    height: 1rem;
    flex-shrink: 0;
    border-radius: .35rem;
    background: var(--grp-link-icon, #475569);
    color: #fff;
    font-size: .55rem;
    transition: background .15s ease, color .15s ease;
}
.hw-nav a.hw-nav-link:hover .hw-nav-link-icon {
    background: var(--grp-accent, #64748b);
}
.hw-nav a.hw-nav-link.active .hw-nav-link-icon {
    background: #fff;
    color: var(--grp-accent, var(--hw-primary));
}

/* Sidebar altı: Ayarlar / Çıkış kısayolları — kullanıcı isteği, 16.08.2026
   ("ayarlar çıkış sol alt olabilir"). Normal nav-link ile aynı görünüm; buton
   olarak render edilen Çıkış için varsayılan buton stilleri sıfırlanır. */
.hw-sidebar-footer {
    padding: .6rem .6rem 0;
}
.hw-sidebar-footer .hw-nav-link {
    font: inherit;
    cursor: pointer;
}
.hw-sidebar-footer .hw-nav-link:hover {
    background: var(--hw-sidebar-hover);
    color: #fff;
}

.hw-nav a.hw-nav-link:hover {
    background: var(--hw-sidebar-hover);
    color: #fff;
    transform: translateX(2px);
}

.hw-nav a.hw-nav-link.active {
    background: var(--hw-primary-grad, var(--hw-primary));
    color: #fff;
    box-shadow: 0 3px 8px rgba(43, 90, 168, .22);
}

.hw-nav a.hw-nav-link i {
    width: 1.1rem;
    text-align: center;
}

/* Main area */
.hw-main {
    margin-left: var(--hw-sidebar-width);
    height: 100vh;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    transition: margin-left .2s ease;
}

/* Masaüstü göster/gizle: sidebar sayfa yüklendiğinde her zaman AÇIK başlar
   (kullanıcı isteği, 06.08.2026), body.hw-sidebar-hidden ile topbar'daki
   ikon üzerinden manuel olarak gizlenip tekrar gösterilebilir — tercih
   localStorage'da tutulur (bkz. _Layout.cshtml script). Mobildeki
   .show/.hw-sidebar-backdrop akışından bağımsız, sadece >=992px'te aktif. */
@media (min-width: 992px) {
    body.hw-sidebar-hidden .hw-sidebar { transform: translateX(-100%); }
    body.hw-sidebar-hidden .hw-main { margin-left: 0; }
}

.hw-topbar {
    background: color-mix(in srgb, var(--hw-card-bg) 85%, transparent);
    backdrop-filter: blur(10px);
    border-bottom: 1px solid var(--hw-border);
    padding: .65rem 1.5rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    position: sticky;
    top: 0;
    z-index: 1020;
    transition: background-color 0.3s ease;
}

.hw-content {
    padding: 0;
    background-color: #f8f9fc;
    flex: 1;
    overflow-y: auto;
    min-height: 0;
    animation: hwFadeIn .35s ease both;
}

/* Sayfa içeriği için standart padding - Header bandından sonrakiler için.
   `.modal` hariç tutulur: Bootstrap modal'ları `position: fixed; left:0; right:0`
   ile tüm viewport'u kaplayacak şekilde tasarlanmıştır. Bazı sayfalarda modal
   `.hw-content`'in doğrudan çocuğu olarak (bir `.hw-card`'ın kardeşi olarak)
   duruyor; bu genel margin kuralı modal'a da uygulanınca fixed kutunun
   sol/sağ kenarları kayıyor, modal görsel olarak (yanlış konumda) duruyor
   ama gerçek tıklama/klavye hedefi artık modal-backdrop'un altında kalıyor
   — kullanıcı bunu "ekran donuyor" olarak görüyordu (kullanıcı bildirimi,
   17.08.2026 — Ödeme Türleri sayfasındaki "Yeni Grup"/"Yeni Tür" modalları). */
.hw-content > *:not(.hw-header-band):not(.designer-topbar):not(.modal) {
    margin-left: 1rem; /* Kenar boşlukları daraltıldı */
    margin-right: 1rem;
}
/* Container, row ve cardlar için istisna */
.hw-content > .row, .hw-content > .hw-card:not(.hw-header-band):not(.designer-topbar) {
    margin-left: 0.25rem;
    margin-right: 0.25rem;
}

[data-theme='dark'] .hw-content {
    background-color: var(--hw-bg);
}

/* GERÇEK KÖK NEDEN (11.08.2026): Bu animasyon `.hw-content`'e uygulanıyor ve
   `animation-fill-mode: both` (bkz. `.hw-content { animation: hwFadeIn .35s ease both; }`)
   sayesinde animasyon bittikten SONRA bile `to` keyframe'indeki `transform: translateY(0)`
   kalıcı olarak elemente yapışık kalıyordu. `translateY(0)` görsel olarak "transform yok"
   ile birebir aynı görünse de, CSS spesifikasyonuna göre `transform: none` OLMAYAN her
   değer (translateY(0) dahil) bir ataya uygulandığında, o atanın İÇİNDEKİ TÜM
   `position: fixed` torunlar için (Bootstrap modal'ları dahil) yeni bir "containing
   block" oluşturur — artık gerçek viewport'a değil, bu atanın kendisine göre
   konumlanır/z-index'lenirler. Bootstrap'in modal backdrop'u ise HER ZAMAN
   `document.body`'ye (yani gerçek viewport bağlamına) ekleniyor. Sonuç: `.hw-content`
   içindeki HER modal (bu yüzden aslında SİTE GENELİNDEKİ TÜM modallar), kendi z-index'i
   ne olursa olsun, ayrı/daha düşük bir stacking context'e hapsoluyor ve body-seviyeli
   backdrop onun ÜSTÜNE biniyor — modal görsel olarak ekranda duruyor ama backdrop tüm
   tıklama/klavye etkileşimini yutuyor (kullanıcı bildirimi: "modal açıldığında sistem
   donuyor", `document.elementFromPoint()` ile modal içindeki bir input'un TAM
   koordinatında `.modal-backdrop`'un döndüğü canlı tarayıcıda doğrulandı). Düzeltme:
   `transform` tamamen kaldırıldı, geçiş sadece `opacity` ile yapılıyor — görsel efekt
   neredeyse aynı kalıyor (hafif kayma efekti gitti) ama artık HİÇBİR ataya kalıcı
   transform yapışmıyor, position:fixed modallar doğru şekilde gerçek viewport'a göre
   konumlanıyor. */
@keyframes hwFadeIn {
    from { opacity: 0; }
    to { opacity: 1; }
}

/* Cards */
.hw-card, .hw-stat-card {
    background: var(--hw-card-bg);
    border-radius: var(--hw-card-radius);
    border: 1px solid var(--hw-border);
    box-shadow: var(--hw-card-shadow);
    transition: background-color 0.3s ease, border-color 0.3s ease, box-shadow .25s ease, transform .25s ease;
    margin-bottom: 1rem; /* Boşluk azaltıldı (2rem -> 1rem) */
}

.hw-card:hover, .hw-stat-card:hover {
    box-shadow: var(--hw-card-shadow-hover);
    transform: translateY(-2px);
}

/* Kart içinde açık bir dropdown ("Diğer" menüsü vb.) varken hover-kaldırma transformu
   TAMAMEN devre dışı bırakılır (hover durumundan bağımsız) — kullanıcı isteği,
   30.08.2026: "bazen diğer menüsü tutarsızlık yapıyor". Bootstrap/Popper dropdown-menu'yü
   açılış anındaki .hw-card konumuna göre hesaplıyor; fare kart üzerinden menünün
   üzerine geçerken kart hover'dan çıkıp translateY(-2px) kalkıyor (veya tam tersi),
   kartın konumu aniden 2px kayıyor ama zaten konumlanmış menü kaymıyor — menü
   kart/butondan kopuk/kırpılmış görünüyor. Sadece :hover'da değil her durumda
   engellemek gerekiyor çünkü sorun asıl hover durumu DEĞİŞTİĞİNDE ortaya çıkıyor. */
.hw-card:has(.dropdown-menu.show),
.hw-stat-card:has(.dropdown-menu.show) {
    transform: none !important;
}

/* Tablo satırlarında hafif hover — hangi satırda olunduğunu okumayı kolaylaştırır */
.hw-table tbody tr { transition: background-color .1s ease; }
.hw-table tbody tr:hover { background-color: rgba(43, 90, 168, .04); }
[data-theme='dark'] .hw-table tbody tr:hover { background-color: rgba(68, 114, 189, .08); }

/* Butonlar: köşeler biraz daha yumuşak, tıklama hissi net */
.btn { border-radius: .55rem; font-weight: 500; transition: transform .15s ease, box-shadow .15s ease; }
.btn-sm { border-radius: .45rem; }
.badge { font-weight: 600; letter-spacing: .01em; }

.btn-primary {
    background: var(--hw-primary-grad, var(--hw-primary));
    border-color: transparent;
    box-shadow: 0 2px 6px rgba(43, 90, 168, .18);
}
.btn-primary:hover, .btn-primary:focus {
    background: var(--hw-primary-grad, var(--hw-primary));
    border-color: transparent;
    transform: translateY(-1px);
    box-shadow: 0 4px 10px rgba(43, 90, 168, .24);
}
.btn-outline-primary {
    color: var(--hw-primary);
    border-color: var(--hw-primary);
}
.btn-outline-primary:hover {
    background: var(--hw-primary);
    border-color: var(--hw-primary);
}

/* DataTables (2.x) alt araç çubuğu (sayfa başına kayıt + toplam bilgi + sayfalama) —
   sınıf adları .dt-length / .dt-info / .dt-paging (eski 1.x'teki dataTables_* değil). */
.hw-dt-footer { font-size: .84rem; color: #667085; }
.hw-dt-footer .dt-length select { display: inline-block; width: auto; margin: 0 .35rem; }
.dt-paging .pagination { margin: 0; gap: .15rem; }
.dt-paging .page-link {
    border-radius: .45rem !important;
    border-color: var(--hw-border);
    color: var(--hw-text);
    margin: 0 !important;
    min-width: 2.1rem;
    text-align: center;
}
.dt-paging .page-item.active .page-link {
    background: var(--hw-primary);
    border-color: var(--hw-primary);
}
.dt-paging .page-item.disabled .page-link { opacity: .4; }
/* "X kayıt gösteriliyor" / "Sayfa başına kayıt" alanı ve sayfa numaraları koyu
   temada okunmuyordu (kullanıcı bildirimi, 11.08.2026) — sabit gri renk (#667085)
   ve tema-farkında olmayan native <select> nedeniyle. Zıt renk garantisi. */
[data-theme='dark'] .hw-dt-footer { color: #94a3b8 !important; }
[data-theme='dark'] .hw-dt-footer .dt-length select {
    background-color: #1f2937 !important;
    color: #f1f5f9 !important;
    border-color: #374151 !important;
}
[data-theme='dark'] .dt-paging .page-link {
    background: #111827 !important;
    color: #f1f5f9 !important;
    border-color: #374151 !important;
}
[data-theme='dark'] .dt-paging .page-item.active .page-link {
    background: var(--hw-primary) !important;
    color: #fff !important;
}

/* Kullanıcı geri bildirimi: bu kartlar (Toplam Cari/Alacak/Borç vb. — düzinelerce
   liste sayfasında kullanılıyor) sayfayı gereksiz uzatıyordu. Padding ve başlık/
   değer yazı boyutları küçültüldü — tek yerden değişince tüm sayfalara yayılıyor. */
/* Yükseklik kullanıcı isteği, 04.09.2026: "bu menüler çok yer kaplıyor. yüksekliğini
   azalt" (Panel'deki Toplam Cari/Ürün/Kritik Stok/Kasa Bakiyesi kartları örnek
   gösterildi) — padding ve ikon boyutu küçültüldü, tek yerden değişince .hw-stat-card
   kullanan tüm sayfalara (liste sayfalarındaki özet kutucukları dahil) yayılıyor. */
.hw-stat-card {
    border-radius: 12px;
    padding: 0.55rem 0.9rem;
    color: #fff;
    background: #fff;
    border: 1px solid #eef1f7;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
    transition: all 0.25s ease;
    display: flex;
    flex-direction: column;
    justify-content: center;
    position: relative;
    overflow: hidden;
}

.hw-stat-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}

.hw-stat-card .small {
    font-size: 0.63rem;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    color: #64748b;
    margin-bottom: 0.15rem;
}

.hw-stat-card .fs-2, .hw-stat-card .fs-4 {
    font-weight: 800 !important;
    color: #1e293b;
    margin: 0;
    font-size: 1.5rem !important;
}

/* Glass Card - Dashboard özel varyantı */
.glass-card {
    background: #ffffff !important;
    border-color: #eef1f7 !important;
}
/* .glass-card her zaman beyaz zorluyordu (koyu tema varyantı yoktu) ama içindeki
   .text-dark genel kuralla koyu temada AÇIK renge dönüyordu — beyaz kart üstünde
   neredeyse beyaz yazı (kullanıcı bildirimi, 12.08.2026: Panel'deki Toplam Cari/
   Toplam Ürün/Kritik Stok/Kasa Bakiyesi kartları okunmuyor). */
[data-theme='dark'] .glass-card {
    background: #111827 !important;
    border-color: #1f2937 !important;
}
[data-theme='dark'] .hw-stat-card .fs-2,
[data-theme='dark'] .hw-stat-card .fs-4 {
    color: #f1f5f9;
}
/* Bootstrap'in .bg-white sınıfı da aynı sorunu yaşıyordu (Rapor sayfalarındaki
   "BEKLEMEDE"/"BEKLEYEN" gibi hızlı istatistik kutucukları) — hep beyaz kalıp
   içindeki .text-dark koyu temada açık renge dönünce okunmaz hale geliyordu
   (kullanıcı bildirimi, 12.08.2026). */
[data-theme='dark'] .bg-white {
    background-color: #111827 !important;
}

.stat-icon-bg {
    width: 34px;
    height: 34px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 1rem;
}

/* Renkli Kenar Göstergeleri (L-Border) */
.hw-stat-card::after {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 4px;
    background: var(--hw-primary);
}

/* Tüm sayfa başlıklarını (breadcrumb + başlık + aksiyon butonu) tek bir
   şerit içine alır. Modern Pro tasarım: en üst sınıra yapışık,
   kompakt ve profesyonel (09.08.2026). */
/* Modern Pro tasarım: en üst sınıra yapışık,
   kompakt ve profesyonel (09.08.2026). */
.hw-header-band {
    background: #ffffff;
    border-bottom: 1px solid var(--hw-border);
    padding: 0.75rem 2rem;
    margin: 0 !important;
    margin-bottom: 0.75rem !important; /* Alt boşluk azaltıldı (1.5rem -> 0.75rem) */
    box-shadow: 0 2px 10px rgba(16, 24, 40, .05);
    position: sticky;
    top: 0;
    z-index: 1020; /* Üst Bar ile aynı seviye */
    border-radius: 0;
}

/* Dropdown menülerin z-index çakışmalarını önler (09.08.2026) */
.dropdown-menu {
    z-index: 3000 !important; /* Tüm sticky elemanların (1020) üstünde olmalı */
    box-shadow: 0 10px 30px rgba(16, 24, 40, .15);
    background-color: var(--hw-card-bg);
    border: 1px solid var(--hw-border);
    border-radius: 14px;
    padding: .4rem;
    min-width: 15rem;
}
/* "Diğer" ve benzeri tüm açılır menüler: ikon+etiket satırları, ikonlar renkli
   yuvarlatılmış "chip" içinde (kullanıcı isteği, 16.08.2026 — referans görsele
   göre: Yeni/Yazdır/PDF İndir/Excel'e Aktar/Sütunlar tarzı kart görünümü). Alt
   menü içerikleri sayfaya göre değiştiği için burada sadece GENEL görünüm
   standardize ediliyor — her sayfa kendi ikon/metnini ViewData üzerinden verir. */
.dropdown-item {
    display: flex;
    align-items: center;
    gap: .7rem;
    color: var(--hw-text);
    font-size: .82rem;
    font-weight: 500;
    padding: .5rem .6rem;
    border-radius: .65rem;
    transition: background-color .12s ease, transform .12s ease;
}
.dropdown-item:hover, .dropdown-item:focus {
    background-color: var(--hw-bg);
    color: var(--hw-text);
    transform: translateX(1px);
}
.dropdown-item:active { background-color: var(--hw-primary) !important; color: #fff !important; }

.dropdown-item i.bi {
    flex-shrink: 0;
    width: 1.9rem;
    height: 1.9rem;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: .55rem;
    font-size: .95rem;
    background: color-mix(in srgb, var(--hw-primary) 12%, transparent);
    color: var(--hw-primary);
}

/* Sık kullanılan ikon türleri için ayırt edici renkler — "renkler değişebilir"
   (kullanıcı), tam bire bir eşleşme şart değil, amaç görsel tarama kolaylığı. */
.dropdown-item i.bi-printer { background: color-mix(in srgb, #64748b 16%, transparent); color: #475569; }
.dropdown-item i.bi-file-earmark-excel, .dropdown-item i.bi-file-earmark-excel-fill { background: color-mix(in srgb, #16a34a 15%, transparent); color: #16a34a; }
.dropdown-item i.bi-file-earmark-pdf, .dropdown-item i.bi-file-earmark-pdf-fill, .dropdown-item i.bi-file-earmark-arrow-down { background: color-mix(in srgb, #dc2626 13%, transparent); color: #dc2626; }
.dropdown-item i.bi-funnel { background: color-mix(in srgb, #d97706 15%, transparent); color: #d97706; }
.dropdown-item i.bi-upload, .dropdown-item i.bi-send { background: color-mix(in srgb, #4f46e5 14%, transparent); color: #4f46e5; }
.dropdown-item i.bi-table, .dropdown-item i.bi-list-columns, .dropdown-item i.bi-columns-gap { background: color-mix(in srgb, #7c3aed 14%, transparent); color: #7c3aed; }
.dropdown-item i.bi-arrow-repeat { background: color-mix(in srgb, #0891b2 14%, transparent); color: #0891b2; }
.dropdown-item i.bi-pencil { background: color-mix(in srgb, #d97706 15%, transparent); color: #d97706; }
.dropdown-item.text-danger i.bi { background: color-mix(in srgb, #dc2626 13%, transparent); color: #dc2626; }

/* Alt menüsü olan satırlar (ör. "Sütunlar >") için sağa yaslı ok — ileride
   eklenecek dropdown-submenu yapıları bu class'ı kullanabilir. */
.dropdown-item .dropdown-item-chevron { margin-left: auto; opacity: .5; font-size: .75rem; }

.dropdown-divider { border-color: var(--hw-border); margin: .3rem .2rem; }

/* "Diğer" tetikleyici butonu: metin + dikey ayırıcı çizgi + dikey üç nokta ikonu
   (kullanıcı isteği, 16.08.2026 — referans görsel: "Diğer" yazısının yanında
   üst üste 3 nokta olsun). */
.hw-diger-btn {
    display: inline-flex;
    align-items: center;
    gap: .55rem;
    padding-left: .7rem;
    padding-right: .55rem;
}
.hw-diger-btn .hw-diger-sep {
    width: 1px;
    align-self: stretch;
    background: var(--hw-border);
}
.hw-diger-btn i.bi-three-dots-vertical { font-size: .95rem; }
.hw-diger-btn::after { display: none; } /* Bootstrap'in varsayılan dropdown-toggle okunu kaldır */
.dropdown-header { font-size: .68rem; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: #94a3b8; padding: .5rem .75rem .25rem; }

/* Fiş Tasarımcısı ve benzeri araç çubukları için standardizasyon */
.designer-topbar, .hw-toolbar-sticky {
    background: #ffffff;
    border-bottom: 1px solid var(--hw-border);
    padding: 0.5rem 2rem;
    margin-bottom: 1.25rem;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
    position: sticky;
    top: 0;
    z-index: 1010;
    display: flex;
    align-items: center;
    gap: 1rem;
    border-radius: 0; /* Üste tam yapışması için radius kaldırıldı */
}

.hw-header-badge {
    padding: 0.5rem 1.25rem;
    background: #fff;
    border: 1px solid #eef1f7;
    border-radius: 14px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    box-shadow: 0 2px 4px rgba(31, 41, 55, 0.04), 0 1px 2px rgba(31, 41, 55, 0.02);
    transition: all 0.2s ease;
    position: relative;
    overflow: hidden;
}

.hw-header-badge:hover {
    transform: translateY(-2px);
    box-shadow: 0 8px 12px -1px rgba(0, 0, 0, 0.08), 0 4px 6px -1px rgba(0, 0, 0, 0.04);
    border-color: #e2e8f0;
}

.hw-header-badge::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 4px;
    background: #cbd5e1;
}

.hw-header-badge-label {
    font-size: 0.65rem;
    font-weight: 800;
    color: #64748b;
    text-transform: uppercase;
    line-height: 1.1;
    margin-bottom: 6px;
    letter-spacing: 0.05em;
}

.hw-header-badge-value {
    font-size: 1.2rem;
    font-weight: 800;
    color: #0f172a;
    line-height: 1;
}

/* Renk Varyasyonları - Modern Yumuşak Tonlar */
.hw-header-badge.primary { background: #f8faff; border-color: #e0e7ff; }
.hw-header-badge.primary::before { background: var(--hw-primary); }
.hw-header-badge.primary .hw-header-badge-label { color: #6366f1; }
.hw-header-badge.primary .hw-header-badge-value { color: var(--hw-primary); }

.hw-header-badge.success { background: #f0fdf4; border-color: #dcfce7; }
.hw-header-badge.success::before { background: #10b981; }
.hw-header-badge.success .hw-header-badge-label { color: #15803d; }
.hw-header-badge.success .hw-header-badge-value { color: #10b981; }

.hw-header-badge.warning { background: #fffbeb; border-color: #fef3c7; }
.hw-header-badge.warning::before { background: #f59e0b; }
.hw-header-badge.warning .hw-header-badge-label { color: #b45309; }
.hw-header-badge.warning .hw-header-badge-value { color: #f59e0b; }

.hw-header-badge.danger { background: #fef2f2; border-color: #fee2e2; }
.hw-header-badge.danger::before { background: #ef4444; }
.hw-header-badge.danger .hw-header-badge-label { color: #b91c1c; }
.hw-header-badge.danger .hw-header-badge-value { color: #ef4444; }

.hw-header-badge.info { background: #f0f9ff; border-color: #e0f2fe; }
.hw-header-badge.info::before { background: #0ea5e9; }
.hw-header-badge.info .hw-header-badge-label { color: #0369a1; }
.hw-header-badge.info .hw-header-badge-value { color: #0ea5e9; }

[data-theme='dark'] .hw-header-band {
    background: var(--hw-card-bg);
    border-bottom-color: var(--hw-border);
}

[data-theme='dark'] .hw-header-badge {
    background: #182338;
    border-color: var(--hw-border);
}

[data-theme='dark'] .dropdown-menu {
    background-color: var(--hw-card-bg);
    border-color: var(--hw-border);
}
[data-theme='dark'] .dropdown-item { color: var(--hw-text); }
[data-theme='dark'] .dropdown-item:hover, [data-theme='dark'] .dropdown-item:focus {
    background-color: var(--hw-sidebar-hover);
    color: #fff;
}

.hw-page-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 0;
}
.hw-page-header h5 { font-size: .98rem; }
.hw-page-header small { font-size: .68rem !important; }

/* Header İstatistik Konumlandırma */
.hw-header-stats-container {
    flex: 1;
    display: flex;
    justify-content: center;
    gap: 0.75rem;
    padding: 0 1rem;
    margin: 0 auto;
}

@media (max-width: 1200px) {
    .hw-header-stats-container { justify-content: flex-start; padding-left: 0; }
}

@media (max-width: 767.98px) {
    /* Eskiden tamamen gizleniyordu (kullanıcı: "mobil görünüm pro modern olsun" — bir
       bilgiyi tamamen gizlemek yerine önce yatay kaydırmalı bir "chip" şeridi denendi.
       flex: 1 + flex-wrap birlikteyken bu konteyner, kardeşleri (başlık/aksiyon butonu,
       ikisi de flex-shrink-0) satır sonuna sarmak yerine flex-shrink ile aralarına
       sıkışarak daralıyordu (kullanıcı ekran görüntüsü #1, 10.08.2026: Rapor sayfalarında
       başlığın sağında birkaç harfe sıkışmış, kesilmiş bir KPI rozeti) — flex-basis:100%
       ile satırın tamamını isteyip kendi satırına sarmaya zorlandı. Ama yatay kaydırma da
       kendi başına bir sorun yarattı: rozetlerin çoğu görünür alanın dışında kalıp yarım
       kesik görünüyordu, kaydırılabilir olduğuna dair bir ipucu da yoktu (kullanıcı ekran
       görüntüsü #2: Panel'de "BE..." diye kesilen Bekleyen Kargo rozeti) — kullanıcı isteği
       üzerine ("gerekiyorsa mobilde çoklu satır yap") yatay kaydırma yerine gerçek çoklu
       satıra (flex-wrap) geçildi; artık her rozet tam görünür, hiçbir şey kesilmiyor. */
    .hw-header-stats-container {
        display: flex;
        flex: 1 1 100%;
        order: 3;
        flex-wrap: wrap;
        justify-content: flex-start;
        width: 100%;
        padding: 0.15rem 0.1rem;
        margin: 0.5rem 0 0;
        gap: 0.5rem;
    }
    .hw-header-stats-container .hw-header-badge {
        flex: 1 1 calc(50% - 0.25rem);
        min-width: 118px;
        padding: 0.45rem 0.85rem;
    }

    /* "Yeni Depo" / "Yeni Kasa" / "Yeni Banka Kartı" / "Yeni Demirbaş" gibi ana mavi
       aksiyon butonları, başlık bloğuyla aynı satırda ikisi de min-width:180px olduğu
       için mobilde sıkışıp garip bir şekilde satır kayıyordu (kullanıcı bildirimi,
       11.08.2026). İkisini de kendi tam-genişlik satırına düzgünce sarmaya zorluyoruz;
       buton da tam genişlik + biraz daha küçük yazı ile taşmadan sığıyor. */
    .hw-page-header .flex-shrink-0[style*="min-width: 180px"] {
        min-width: 0 !important;
        flex: 1 1 100% !important;
    }
    .hw-page-header a.btn-primary,
    .hw-page-header button.btn-primary {
        width: 100%;
        font-size: 0.8rem;
        white-space: nowrap;
    }
}

.hw-table thead th {
    background: rgba(0,0,0,0.02);
    font-size: .78rem;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: #667085;
    border-bottom: 1px solid var(--hw-border);
}

[data-theme='dark'] .hw-table thead th {
    background: rgba(255,255,255,0.02);
    color: #94a3b8;
}

/* Satır yüksekliği masaüstünde site genelinde (raporlar, listeler, DataTables) çok
   fazlaydı — kullanıcı isteği, 30.08.2026: "yükseklikleri fazla. azalat. daha
   profesyonel tasarım olsun. çok yer kaplıyor. diğer sayfalardaki benzer listeleme
   alanlarını da profesyonelleştir." .hw-table TÜM tablolarda (DataTables dahil, bkz.
   hw-datatable.css'in table.dataTable.hw-table seçicisi de aynı sınıfı paylaşıyor)
   ortak kullanıldığından burada tek bir değişiklik her yere yansıyor. Bootstrap'ın
   varsayılan hücre dolgusu (0.5rem = 8px üst/alt) daraltılıyor, yazı boyutu da bir
   tık küçültülüyor — mobil (.hw-table-mobile kart görünümü) etkilenmiyor, o ayrı
   bir seçici altında tanımlı.
   NOT: Yalnızca masaüstünde uygulanır (min-width: 768px) — mobildeki kart görünümü
   zaten dokunmatik hedefler için yeterli boşluğa ihtiyaç duyuyor. */
@media (min-width: 768px) {
    .hw-table:not(.hw-table-nocompact) > :not(caption) > * > * {
        padding-top: .32rem;
        padding-bottom: .32rem;
        font-size: .83rem;
    }
    .hw-table:not(.hw-table-nocompact) thead th {
        padding-top: .45rem;
        padding-bottom: .45rem;
        font-size: .72rem;
    }
    /* Satır içi aksiyon butonları (Detay/Düzenle/Fatura vb. ikon butonları) satırı
       yükselten asıl etken oluyordu — küçültülüyor. */
    .hw-table:not(.hw-table-nocompact) tbody .btn-sm {
        padding: .18rem .45rem;
        font-size: .78rem;
    }
    .hw-table:not(.hw-table-nocompact) tbody .badge {
        font-size: .7rem;
        padding: .3rem .5rem;
    }
}

[data-theme='dark'] .text-muted { color: #94a3b8 !important; }
[data-theme='dark'] .text-dark { color: #f1f5f9 !important; }
[data-theme='dark'] .form-control, [data-theme='dark'] .form-select {
    background-color: #1f2937;
    border-color: #374151;
    color: #f1f5f9;
}
[data-theme='dark'] .form-control:focus, [data-theme='dark'] .form-select:focus {
    background-color: #1f2937;
    color: #fff;
    border-color: var(--hw-primary);
}
[data-theme='dark'] .table { color: #f1f5f9; }
[data-theme='dark'] .modal-content { background-color: #111827; color: #f1f5f9; }
[data-theme='dark'] .modal-header, [data-theme='dark'] .modal-footer { border-color: #1f2937; }
[data-theme='dark'] .bg-light { background-color: #1f2937 !important; }
[data-theme='dark'] .alert-light { background-color: #111827; border-color: #1f2937; color: #f1f5f9; }

/* Bootstrap'in varsayılan breadcrumb/btn-outline-* renkleri koyu temada
   koyu metin + koyu arka plan üstünde okunmuyordu (mobilde fark edildi). */
[data-theme='dark'] .breadcrumb-item,
[data-theme='dark'] .breadcrumb-item.active,
[data-theme='dark'] .breadcrumb-item + .breadcrumb-item::before {
    color: #94a3b8 !important;
}
[data-theme='dark'] .breadcrumb-item a { color: #cbd5e1; }
/* "Sık Kullanılanlar" (üst bar) ve "Geri Dön" (sayfa başlığı) butonları .btn-light /
   .btn-white kullanıyor — bu Bootstrap sınıfları koyu temada da hep açık renk kalıyor
   ama bazı tarayıcılarda ikon rengi bozuluyordu (kullanıcı bildirimi, 11.08.2026:
   "mobilde genelde koyu temada okunmuyor"). Zıt renk garantisi için burada da tanımlı. */
[data-theme='dark'] .btn-light,
[data-theme='dark'] .btn-white {
    background-color: #1f2937 !important;
    border-color: #374151 !important;
    color: #f1f5f9 !important;
}
[data-theme='dark'] .btn-light:hover,
[data-theme='dark'] .btn-white:hover {
    background-color: #374151 !important;
    color: #fff !important;
}
[data-theme='dark'] .btn-outline-secondary {
    color: #cbd5e1;
    border-color: #475569;
    background-color: transparent;
}
[data-theme='dark'] .btn-outline-secondary:hover,
[data-theme='dark'] .btn-outline-secondary:not(:disabled):not(.disabled).active {
    color: #fff;
    background-color: #374151;
    border-color: #475569;
}
[data-theme='dark'] .form-control::placeholder { color: #64748b; opacity: 1; }
/* DataTables "Diğer" toplu menü butonu (.hw-dt-more-btn) hw-datatable.css'teki
   kendi koyu tema kuralına rağmen bazı sayfalarda uygulanmıyordu (muhtemelen
   uzun süredir çalışan işlem, o dosyanın eski bir sürümünü önbelleklemiş
   oluyordu) — buraya da aynı kuralı ekleyip garantiye alıyoruz. */
[data-theme='dark'] button.hw-dt-more-btn,
[data-theme='dark'] .dt-buttons button.hw-dt-more-btn {
    background: var(--hw-card-bg) !important;
    border-color: var(--hw-border) !important;
    color: var(--hw-text) !important;
}
@media (max-width: 991.98px) {
    .hw-sidebar { transform: translateX(-100%); }
    .hw-sidebar.show { transform: translateX(0); }
    .hw-main { margin-left: 0; }

    /* .hw-mobile-nav (alt navigasyon çubuğu) yarı saydam (rgba(255,255,255,.9)
       + backdrop-filter blur) olduğundan, sidebar tam yükseklikte (bottom:0)
       kalırsa en alttaki menü grupları (ör. SİSTEM) alt bar'ın ARDINDA görünüp
       metinler birbirine karışıyordu. Sidebar'ı alt bar kadar kısaltıyoruz ki
       kaydırılabilir menü listesi (.hw-nav, overflow-y:auto) alt bar'ın
       ÜSTÜNDE bitsin, hiç örtüşme olmasın. */
    .hw-sidebar {
        bottom: calc(64px + env(safe-area-inset-bottom, 0px));
    }

    .hw-sidebar-backdrop {
        position: fixed;
        inset: 0;
        background: rgba(16, 24, 40, .45);
        z-index: 1025; /* .hw-sidebar (1030) altında, içerik üstünde */
        opacity: 0;
        visibility: hidden;
        transition: opacity .2s ease;
    }
    .hw-sidebar-backdrop.show {
        opacity: 1;
        visibility: visible;
    }
}

/* Mobil Tablo Kart Görünümü */
@media (max-width: 767.98px) {
    /* Genel sığdırma güvencesi: içerik alanı hiçbir zaman kendi içinde yatay
       kaydırmalı olmasın — tek tek sayfa başlıkları/araç çubukları tek tek
       düzeltilmek yerine burada toptan sarmalanıyor. .hw-content'in üst
       elementi (.hw-main/body) zaten overflow:hidden; asıl sorun buradaki
       satır-içi (flex/row) grupların sarmadan tek satırda kalıp genişliği
       zorlamasıydı. */
    .hw-content { padding: 1rem; max-width: 100vw; overflow-x: hidden; }

    .hw-page-header {
        flex-wrap: wrap;
        row-gap: .6rem;
    }
    .hw-page-header > * { min-width: 0; }
    .hw-page-header h1, .hw-page-header h2, .hw-page-header h3,
    .hw-page-header h4, .hw-page-header h5 {
        font-size: 1.15rem;
        word-break: break-word;
    }

    /* Filtre/araç çubuğu satırları (d-flex + gap ile yazılmış, sarmayan
       gruplar) — Bootstrap'in .row/.col yapısı zaten sarıyor, ama çıplak
       .d-flex grupları sarmıyordu. */
    .hw-content .d-flex.gap-2:not(.flex-column),
    .hw-content .d-flex.gap-3:not(.flex-column) {
        flex-wrap: wrap;
        row-gap: .5rem;
    }

    .hw-stat-card { padding: .6rem .8rem; }

    /* .hw-table dışında kalan (data-label eklenmemiş) düz tablolar için son
       çare: sayfa gövdesini itmesin diye kendi içinde yatay kaysın. FullCalendar
       (.fc) kendi iç tablolarını grid/layout hesaplaması için "table" display'ine
       muhtaç — bu kural onları da yakalayınca Takvim sayfasında grid'in yüksekliği
       1px'e çöküyordu (kullanıcı bildirimi, 16.08.2026: "mobilde takvim düzgün
       görünmüyor"), bu yüzden .fc içindekiler hariç tutulur. */
    table:not(.hw-table):not(.fc *):not(.fc) { display: block; max-width: 100%; overflow-x: auto; }
    table:not(.hw-table):not(.fc *):not(.fc) thead,
    table:not(.hw-table):not(.fc *):not(.fc) tbody,
    table:not(.hw-table):not(.fc *):not(.fc) tr { display: revert; }

    /* .hw-table-mobile artık her .hw-table'a otomatik uygulanır (opt-in class beklemeye gerek yok) —
       data-label'lar yoksa site.js'teki hwEnhanceTables() sayfa yüklenince otomatik ekler,
       bkz. "Mobil tablo kart görünümü" notu site.js'te.
       .hw-table-noflatten — bu otomatik kart dönüşümünden ÇIKIŞ (opt-out): satır içi
       düzenlenebilir input'lar barındıran tablolarda (ör. Satış Kalemleri) her alanın ayrı
       ayrı üst üste dizilmesi kullanışsız oluyordu — bunun yerine normal tablo olarak kalıp
       kendi içinde yatay kayar (kullanıcı isteği, 09.09.2026: "Mobilde satış listesi panel
       şeklinde değil liste şeklinde olmalı. Scroll olabilir liste içinde"). */
    .hw-table-mobile thead, .hw-table:not(.hw-table-noflatten) thead {
        display: none;
    }
    .hw-table-mobile tr, .hw-table:not(.hw-table-noflatten) tbody tr {
        display: block;
        border: 1px solid #eef1f7;
        border-radius: var(--hw-card-radius);
        margin-bottom: 1rem;
        padding: 0.5rem;
        background: #fff;
    }
    .hw-table-mobile td, .hw-table:not(.hw-table-noflatten) tbody td {
        display: flex;
        flex-wrap: wrap;
        justify-content: space-between;
        align-items: center;
        gap: 0.5rem 0.75rem;
        text-align: right;
        border-bottom: 1px solid #f8f9fc;
        padding: 0.5rem 0.75rem;
        min-width: 0;
        max-width: 100%;
    }
    /* Birden fazla rozet/etiket içeren hücreler (Durum, Senaryo/Tip vb.) sabit
       genişlik istediği için satırı taşırıp tüm sayfayı sağa kaydırtıyordu
       (kullanıcı bildirimi, 11.08.2026). */
    .hw-table-mobile td > *, .hw-table:not(.hw-table-noflatten) tbody td > * { min-width: 0; }
    .hw-table-mobile td:empty, .hw-table:not(.hw-table-noflatten) tbody td:empty,
    .hw-table-mobile td:last-child, .hw-table:not(.hw-table-noflatten) tbody td:last-child {
        border-bottom: 0;
    }
    .hw-table-mobile td::before, .hw-table:not(.hw-table-noflatten) tbody td::before {
        content: attr(data-label);
        font-weight: 600;
        text-align: left;
        font-size: 0.8rem;
        color: #667085;
        text-transform: uppercase;
        flex-shrink: 0;
    }
    .hw-table-mobile td:not([data-label])::before, .hw-table:not(.hw-table-noflatten) tbody td:not([data-label])::before {
        content: none;
    }
    /* "İşlemler"/Diğer aksiyon hücresi mobil kart görünümünde tam sağa
       yaslanır, "İŞLEMLER" etiketi gösterilmez (kullanıcı isteği, 30.08.2026:
       "diğer menüsü mobilde en sağda olsun"). */
    .hw-table-mobile td[data-label="İşlemler"], .hw-table:not(.hw-table-noflatten) tbody td[data-label="İşlemler"],
    .hw-table-mobile td[data-label="İşlem"], .hw-table:not(.hw-table-noflatten) tbody td[data-label="İşlem"] {
        justify-content: flex-end;
    }
    .hw-table-mobile td[data-label="İşlemler"]::before, .hw-table:not(.hw-table-noflatten) tbody td[data-label="İşlemler"]::before,
    .hw-table-mobile td[data-label="İşlem"]::before, .hw-table:not(.hw-table-noflatten) tbody td[data-label="İşlem"]::before {
        content: none;
    }

    [data-theme='dark'] .hw-table-mobile tr, [data-theme='dark'] .hw-table:not(.hw-table-noflatten) tbody tr {
        background: #1f2937;
        border-color: #374151;
    }
    [data-theme='dark'] .hw-table-mobile td, [data-theme='dark'] .hw-table:not(.hw-table-noflatten) tbody td {
        border-bottom-color: #111827;
    }
    [data-theme='dark'] .hw-table-mobile td::before, [data-theme='dark'] .hw-table:not(.hw-table-noflatten) tbody td::before {
        color: #94a3b8;
    }

    /* .hw-table-noflatten: normal tablo görünümünü koru, sadece kendi içinde yatay kaydır. */
    .hw-table.hw-table-noflatten {
        display: block;
        max-width: 100%;
        overflow-x: auto;
        white-space: nowrap;
    }
    .hw-table.hw-table-noflatten thead,
    .hw-table.hw-table-noflatten tbody,
    .hw-table.hw-table-noflatten tr { display: revert; }
    /* Son sütun (Düzenle/Sil) yatay kaydırmada sabit kalır — kullanıcı isteği, 09.09.2026:
       "düzenle ve sil sabit kalmalı". */
    .hw-table.hw-table-noflatten thead th:last-child,
    .hw-table.hw-table-noflatten tbody td:last-child {
        position: sticky;
        right: 0;
        z-index: 2;
        background: #fff;
        box-shadow: -3px 0 6px rgba(16, 24, 40, .06);
    }
    [data-theme='dark'] .hw-table.hw-table-noflatten thead th:last-child,
    [data-theme='dark'] .hw-table.hw-table-noflatten tbody td:last-child {
        background: #1f2937;
    }

    /* Satış Kalemleri mobil kart görünümü — kullanıcı isteği, 13.09.2026: "Stok/Hizmet
       Listesi"ndeki mobil kart tasarımı (renkli baş harf rozeti, ürün adı, sağda tutar,
       sağ üstte aksiyon ikonları) referans alınarak. .hw-table-noflatten'ın basit yatay-
       kaydırmalı liste hâlinden daha okunaklı: üst satırda rozet+ad+Toplam+işlemler,
       altında geri kalan alanlar (Depo/Miktar/Fiyat/İskonto/Net Birim/KDV) etiketli
       olarak sarılıp diziliyor. Düzenlenebilir input'lar aynen kalıyor, sadece dizilim
       değişiyor. */
    .hw-table.hw-kalem-card thead { display: none; }
    .hw-table.hw-kalem-card tbody tr {
        display: flex;
        flex-wrap: wrap;
        align-items: flex-start;
        column-gap: .6rem;
        row-gap: .4rem;
        border: 1px solid #eef1f7;
        border-radius: var(--hw-card-radius);
        padding: .65rem .75rem;
        margin-bottom: .75rem;
        background: #fff;
    }
    .hw-table.hw-kalem-card tbody td {
        border: 0;
        padding: 0;
        min-width: 0;
    }
    .hw-table.hw-kalem-card tbody td:nth-child(1) {
        order: 1;
        flex: 1 1 100%;
        display: flex;
        align-items: center;
        gap: .55rem;
    }
    .hw-table.hw-kalem-card tbody td:nth-child(1) .hw-kalem-avatar {
        width: 34px;
        height: 34px;
        border-radius: 9px;
        flex-shrink: 0;
        display: flex !important;
        align-items: center;
        justify-content: center;
        background: var(--hw-primary);
        color: #fff;
        font-weight: 700;
        font-size: .85rem;
    }
    .hw-table.hw-kalem-card tbody td:nth-child(1) > div.satir-barkod { display: none; }
    /* Toplam/işlemler hücreleri Create.cshtml (9 kolon, Net Birim dahil) ile Edit.cshtml
       (8 kolon, Net Birim yok) arasında farklı sırada — sabit nth-child yerine içerik
       bazlı :has() seçici kullanılarak iki ekranda da aynı CSS çalışıyor. */
    .hw-table.hw-kalem-card tbody td:has(.satir-toplam) {
        order: 2;
        flex: 0 0 auto;
        margin-left: auto;
        font-weight: 700;
        color: var(--hw-primary);
        align-self: center;
        white-space: nowrap;
    }
    .hw-table.hw-kalem-card tbody td:has(.satir-sil) {
        order: 3;
        flex: 0 0 auto;
        align-self: center;
    }
    .hw-table.hw-kalem-card tbody td:not(:first-child):not(:has(.satir-toplam)):not(:has(.satir-sil)) {
        order: 4;
        flex: 1 1 45%;
    }
    .hw-table.hw-kalem-card tbody td:not(:first-child):not(:has(.satir-toplam)):not(:has(.satir-sil))::before {
        content: attr(data-label);
        display: block;
        font-size: .68rem;
        font-weight: 700;
        text-transform: uppercase;
        color: #8a94a6;
        margin-bottom: .15rem;
    }
    .hw-table.hw-kalem-card tbody td.col-depo { flex-basis: 100%; }
    [data-theme='dark'] .hw-table.hw-kalem-card tbody tr { background: #1f2937; border-color: #374151; }
    [data-theme='dark'] .hw-table.hw-kalem-card tbody td:not(:first-child):not(:has(.satir-toplam)):not(:has(.satir-sil))::before { color: #94a3b8; }

    /* Cari listesi mobil kompakt liste görünümü — kullanıcı isteği, 29.08.2026:
       "mobilde cari listesi görünümü liste şekline daha portatif göster". Tablo-
       satır-kartı yerine (9 alan, her biri ayrı label:value satırı) tek satırlık,
       kişi listesi tarzı kompakt kartlar. */
    .hw-cari-mobile-item {
        display: flex;
        align-items: center;
        gap: 0.6rem;
        padding: 0.6rem 0.5rem;
        border-bottom: 1px solid #f0f2f7;
        text-decoration: none;
        color: inherit;
    }
    .hw-cari-mobile-item:last-child { border-bottom: 0; }
    .hw-cari-mobile-item:active { background: #f8f9fc; }
    .hw-cari-mobile-avatar {
        width: 38px;
        height: 38px;
        border-radius: 50%;
        flex-shrink: 0;
        object-fit: cover;
    }
    .hw-cari-mobile-avatar-fallback {
        display: flex;
        align-items: center;
        justify-content: center;
        background: var(--hw-primary);
        color: #fff;
        font-weight: 700;
        font-size: 0.95rem;
    }
    .hw-cari-mobile-body { min-width: 0; flex: 1 1 auto; }
    .hw-cari-mobile-name {
        font-weight: 700;
        font-size: 0.9rem;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    .hw-cari-mobile-sub {
        display: flex;
        align-items: center;
        gap: 0.4rem;
        font-size: 0.72rem;
        color: #667085;
        margin-top: 2px;
        overflow: hidden;
    }
    .hw-cari-mobile-end {
        flex-shrink: 0;
        text-align: right;
        display: flex;
        align-items: center;
        gap: 0.35rem;
        font-size: 0.85rem;
    }
    [data-theme='dark'] .hw-cari-mobile-item { border-bottom-color: #374151; }
    [data-theme='dark'] .hw-cari-mobile-item:active { background: #1f2937; }
    [data-theme='dark'] .hw-cari-mobile-sub { color: #94a3b8; }

    /* Genel mobil akordiyon-liste deseni — Cari Bakiye Raporu ve Stok/Hizmet Listesi
       için (kullanıcı isteği, 30.08.2026: "cari hesaplar listesi gibi olsun. mobilde
       akordiyon olsun. full genişlik olsun. tıklanınca açılsın. mobilde diğer menüsü
       en sağda olsun"). Yukarıdaki .hw-cari-mobile-* görsel diliyle aynı (avatar/fallback,
       isim, alt satır), farkı: satır bir <a> linki değil, tıklanınca içeriği aşağı
       açan bir akordiyon başlığı; "Diğer" (...) aksiyon menüsü her zaman başlığın en
       sağında, ayrı bir öğe olarak durur (tıklaması akordiyonu açıp kapatmaz).
       Herhangi bir listeleme sayfası aynı sınıfları kullanarak bu görünümü alabilir. */
    .hw-mob-acc { width: 100%; }
    .hw-mob-acc-item { border-bottom: 1px solid #f0f2f7; }
    .hw-mob-acc-item:last-child { border-bottom: 0; }
    .hw-mob-acc-row { width: 100%; display: flex; align-items: center; }
    .hw-mob-acc-head {
        flex: 1 1 auto;
        min-width: 0;
        display: flex;
        align-items: center;
        gap: 0.6rem;
        padding: 0.6rem 0.5rem;
        background: none;
        border: 0;
        text-align: left;
        color: inherit;
    }
    .hw-mob-acc-head:active { background: #f8f9fc; }
    .hw-mob-acc-avatar {
        width: 38px;
        height: 38px;
        border-radius: 10px;
        flex-shrink: 0;
        object-fit: cover;
        display: flex;
        align-items: center;
        justify-content: center;
        background: var(--hw-primary);
        color: #fff;
        font-weight: 700;
        font-size: 0.95rem;
    }
    .hw-mob-acc-body { min-width: 0; flex: 1 1 auto; }
    .hw-mob-acc-name {
        font-weight: 700;
        font-size: 0.9rem;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }
    .hw-mob-acc-sub {
        display: flex;
        align-items: center;
        gap: 0.4rem;
        font-size: 0.72rem;
        color: #667085;
        margin-top: 2px;
        overflow: hidden;
    }
    .hw-mob-acc-end { flex-shrink: 0; text-align: right; font-size: 0.85rem; font-weight: 700; }
    .hw-mob-acc-actions { flex-shrink: 0; display: flex; align-items: center; gap: 0.35rem; padding-right: 0.5rem; }
    .hw-mob-acc-chevron { flex-shrink: 0; color: #98a2b3; transition: transform 0.2s ease; padding-right: 0.25rem; }
    .hw-mob-acc-head[aria-expanded="true"] .hw-mob-acc-chevron { transform: rotate(180deg); }
    .hw-mob-acc-detail {
        padding: 0.1rem 0.9rem 0.75rem 3.1rem;
        font-size: 0.78rem;
    }
    .hw-mob-acc-detail-row {
        display: flex;
        justify-content: space-between;
        gap: 0.75rem;
        padding: 0.28rem 0;
        border-bottom: 1px dashed #eef1f7;
    }
    .hw-mob-acc-detail-row:last-child { border-bottom: 0; }
    .hw-mob-acc-detail-label { color: #667085; }
    .hw-mob-acc-detail-value { font-weight: 600; text-align: right; }
    [data-theme='dark'] .hw-mob-acc-item { border-bottom-color: #374151; }
    [data-theme='dark'] .hw-mob-acc-head:active { background: #1f2937; }
    [data-theme='dark'] .hw-mob-acc-sub { color: #94a3b8; }
    [data-theme='dark'] .hw-mob-acc-detail-row { border-bottom-color: #374151; }
    [data-theme='dark'] .hw-mob-acc-detail-label { color: #94a3b8; }

    /* Giden/Taslak/Gelen/Arşivlenmiş Gelen Fatura sayfalarındaki Senaryo/Fatura
       Tipi/Yıl/Durum filtre kartları mobilde kaldırılıyor (kullanıcı isteği,
       30.08.2026: "mobilde seneryo/fatura tipi/yıl kartları görünmesin" /
       "arşivlenmiş gelen faturalarda mobilde durum/yıl kartı olmasın") —
       masaüstünde değişiklik yok, sadece bu breakpoint altında gizleniyor. */
    .inbox-sidebar { display: none; }
    .inbox-layout {
        flex-direction: column;
    }

    /* Mobil Alt Navigasyon Barı */
    .hw-mobile-nav {
        position: fixed;
        bottom: 0;
        left: 0;
        right: 0;
        background: rgba(255, 255, 255, 0.9);
        backdrop-filter: blur(10px);
        display: flex;
        justify-content: space-around;
        padding: 0.5rem 0;
        padding-bottom: env(safe-area-inset-bottom);
        border-top: 1px solid rgba(0,0,0,0.05);
        box-shadow: 0 -4px 15px rgba(0,0,0,0.05);
        z-index: 1050;
    }

    .hw-mobile-nav-link {
        display: flex;
        flex-direction: column;
        align-items: center;
        text-decoration: none;
        color: #64748b;
        font-size: 0.65rem;
        font-weight: 600;
        width: 20%;
        transition: all 0.2s;
    }

    .hw-mobile-nav-link i {
        font-size: 1.4rem;
        margin-bottom: 1px;
    }

    .hw-mobile-nav-link.active {
        color: var(--hw-primary);
    }

    .hw-mobile-nav-link.main-action {
        margin-top: -1.5rem;
        background: var(--hw-primary);
        color: #fff;
        width: 3.5rem;
        height: 3.5rem;
        border-radius: 50%;
        justify-content: center;
        box-shadow: 0 4px 12px rgba(43, 90, 168, 0.28);
        border: 4px solid #fff;
    }

    .hw-mobile-nav-link.main-action i {
        font-size: 1.5rem;
        margin-bottom: 0;
    }

    /* Yüzen Aksiyon Butonu (FAB) */
    .hw-fab {
        position: fixed;
        bottom: 5rem;
        right: 1.5rem;
        width: 3.5rem;
        height: 3.5rem;
        border-radius: 50%;
        background: var(--hw-primary);
        color: #fff;
        display: flex;
        align-items: center;
        justify-content: center;
        box-shadow: 0 4px 12px rgba(43, 90, 168, 0.3);
        z-index: 1040;
        border: none;
        font-size: 1.5rem;
        transition: transform 0.2s;
    }

    .hw-fab:active {
        transform: scale(0.9);
    }

    .hw-main {
        padding-bottom: calc(4.5rem + env(safe-area-inset-bottom, 0px)); /* Alt bar yüksekliği + güvenli alan */
    }

    /* İçerik alanının son öğesinin alt barın/FAB'ın altında kalmasını önlemek için
       ekstra boşluk (08.08.2026: Kaydet butonunun görünmeme sorunu fix) */
    .hw-content::after {
        content: "";
        display: block;
        height: 6rem; /* FAB yüksekliği ve ekstra boşluk */
        width: 100%;
    }

    .hw-table-mobile tr, .hw-table tbody tr {
        box-shadow: 0 2px 8px rgba(0,0,0,0.04);
        border: 1px solid #eef1f7;
        margin-bottom: 1.25rem;
    }
    [data-theme='dark'] .hw-table-mobile tr, [data-theme='dark'] .hw-table tbody tr {
        box-shadow: 0 2px 8px rgba(0,0,0,0.2);
    }
}

/* Birleştirilmiş Toolbar (Filtre, Arama, İşlemler) */
.hw-toolbar {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    gap: 0.75rem;
    flex-wrap: nowrap; /* Masaüstünde zorunlu tek satır */
}

.hw-toolbar .col-search {
    flex: 1;
    min-width: 200px;
}

@media (max-width: 991.98px) {
    .hw-toolbar { flex-wrap: wrap; }
    .hw-toolbar .col-search { width: 100%; order: 3; }
}
.ui-autocomplete {
    border-radius: 0.5rem;
    box-shadow: 0 10px 25px rgba(0,0,0,0.1);
    border: 1px solid #eef1f7;
    padding: 0.5rem 0;
    z-index: 1100 !important;
}

.ui-menu-item-wrapper {
    padding: 0.5rem 1rem !important;
    font-size: 0.9rem;
    color: #444;
}

.ui-state-active, .ui-widget-content .ui-state-active {
    background: var(--hw-primary) !important;
    border: none !important;
    color: #fff !important;
}

/* Advanced Autocomplete Table Style */
.ui-autocomplete-row-header {
    font-weight: 700;
    font-size: 0.75rem;
    text-transform: uppercase;
    color: #667085;
    background: #f8f9fc !important;
    border-bottom: 2px solid #eef1f7;
    padding: 0.5rem 1rem !important;
    display: flex;
}

.ui-autocomplete-row {
    display: flex;
    width: 100%;
    border-bottom: 1px solid #f1f5f9;
}

.ui-autocomplete-col {
    padding: 2px 5px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ui-autocomplete-col-kod { width: 120px; }
.ui-autocomplete-col-ad { flex-grow: 1; min-width: 200px; }
.ui-autocomplete-col-fiyat { width: 100px; text-align: right; }
.ui-autocomplete-col-kdv { width: 70px; text-align: center; }
.ui-autocomplete-col-grup { width: 120px; }

[data-theme='dark'] .ui-autocomplete-row-header {
    background: #1f2937 !important;
    color: #94a3b8;
    border-bottom-color: #374151;
}

[data-theme='dark'] .ui-autocomplete-row {
    border-bottom-color: #1f2937;
}

/* Skeleton Loading */
.skeleton {
    background: #e2e8f0;
    background: linear-gradient(110deg, #ececec 8%, #f5f5f5 18%, #ececec 33%);
    border-radius: 5px;
    background-size: 200% 100%;
    animation: 1.5s shine linear infinite;
}

[data-theme='dark'] .skeleton {
    background: #1f2937;
    background: linear-gradient(110deg, #1f2937 8%, #374151 18%, #1f2937 33%);
    background-size: 200% 100%;
}

@keyframes shine {
    to {
        background-position-x: -200%;
    }
}

/* Birleştirilmiş Master Toolbar (Tarih Aralığı, Arama, Sütunlar, Excel, PDF, Yazdır) */
.hw-master-toolbar {
    display: flex;
    align-items: center; /* Merkeze hizala */
    gap: 1.25rem;
    padding: 0.85rem 1.5rem; /* Daha kompakt dikey boşluk */
    border-bottom: 1px solid var(--hw-border);
    flex-wrap: nowrap;
    position: relative;
    /* ÖNEMLİ: sticky .hw-header-band'ın (z-index:1020) ALTINDA kalmalı — kullanıcı
       bildirimi, 01.09.2026: "yukarı aşağı yaptığımda Yeni ürün butonunun üzerine
       gelince Diğer menüsü çıkıyor". Kök neden: bu z-index önceden 1030'du (header-
       band'dan YÜKSEK), bu yüzden sayfa kaydırılırken toolbar sticky header'ın
       ALTINA değil ÜSTÜNE biniyordu (canlı ölçümle doğrulandı: scrollTop 80-120
       aralığında iki kutu fiilen çakışıyordu). Toolbar içindeki dropdown/tarih
       seçici menüleri zaten kendi yüksek z-index'leriyle (bkz. .dropdown-menu:
       3000) açılıyor, bu değer için 1030'a gerek yoktu.
    */
    z-index: 1010;
}

.hw-master-toolbar-item {
    display: flex;
    flex-direction: row; /* Yan yana */
    align-items: center;
    gap: 0.75rem;
}

.hw-master-toolbar-label {
    font-size: 0.65rem;
    font-weight: 800;
    color: #8a94a6;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 0; /* Artık yan yana */
}

.hw-master-toolbar .col-search {
    flex: 1;
    max-width: 320px;
}

.hw-master-toolbar .dt-buttons {
    margin-left: auto;
    display: flex;
    gap: 0.5rem;
}

/* DataTables Buton Renk Fix (Global Outline Style - Kesin Çözüm) */
.hw-master-toolbar button.dt-button,
.hw-master-toolbar .dt-buttons button,
.hw-master-toolbar .btn-group button[class*="buttons-"],
.dt-buttons button,
button.buttons-colvis,
button.buttons-excel,
button.buttons-pdf,
button.buttons-print {
    background: #fff !important;
    background-color: #fff !important;
    background-image: none !important;
    border-width: 1px !important;
    border-style: solid !important;
    box-shadow: none !important;
    opacity: 1 !important;
    filter: none !important;
}

/* Renkler */
.buttons-colvis, .dt-button.buttons-colvis { color: #475467 !important; border-color: #dfe3ea !important; }
.buttons-excel, .dt-button.buttons-excel { color: #16a34a !important; border-color: #16a34a !important; }
.buttons-pdf, .dt-button.buttons-pdf { color: #dc2626 !important; border-color: #dc2626 !important; }
.buttons-print, .dt-button.buttons-print { color: var(--hw-primary, #2b5aa8) !important; border-color: var(--hw-primary, #2b5aa8) !important; }

/* Hover Durumları */
.hw-master-toolbar .dt-buttons button:hover,
.hw-master-toolbar .btn-group button[class*="buttons-"]:hover,
.dt-buttons button:hover,
button.dt-button:hover {
    background-color: #f8f9fc !important;
    filter: brightness(0.98) !important;
}

@media (max-width: 1300px) {
    .hw-master-toolbar { flex-wrap: wrap; gap: 0.75rem; }
    .hw-master-toolbar .ms-auto { margin-left: 0 !important; width: 100%; justify-content: flex-end; }
}

@media (max-width: 767.98px) {
    /* Mobilde başlık kartı (breadcrumb + sayfa başlığı) sabit kalıp ekranın
       önemli bir kısmını kaplıyordu — aşağı kaydırıldığında ekranda yer açılması
       için sticky kaldırıldı (kullanıcı isteği, 10.08.2026). Masaüstünde .hw-header-band
       sticky kalmaya devam ediyor. */
    .hw-header-band { position: static; box-shadow: none; }

    .hw-master-toolbar { padding: 1rem; }
    .hw-master-toolbar .col-search { max-width: none; width: 100%; }

    /* hw-datatable.js, DataTables butonlarını (Sütunlar/Excel/PDF/Yazdır) sayfaya özel
       butonlarla (Sihirbaz/Gruplar/Toplu Fiyat gibi) AYNI Bootstrap .btn-group'una
       taşıyor (bkz. hw-datatable.js "Master Toolbar Entegrasyonu") — görsel bütünlük
       için doğru bir yaklaşım, ama Bootstrap'in .btn-group'u varsayılan olarak asla
       sarmıyor (kullanıcı ekran görüntüsü, 10.08.2026: Stok sayfasında 7 buton tek
       satırda sıkışıp soldan ekran dışına taşıyordu — konteyner x:-160px ölçüldü).
       Mobilde bu grubu çoklu satıra sarmaya zorluyoruz; sarıldığında butonlar artık
       "bitişik" görünmediğinden köşe yuvarlaklığı da sıfırlanıyor. */
    .hw-master-toolbar-item.ms-auto .btn-group {
        flex-wrap: wrap;
        row-gap: 0.4rem;
        width: 100%;
        justify-content: flex-end;
    }
    /* DataTables'ın .dt-button'a verdiği "flex:1 1 auto" mobilde tek buton (Diğer)
       kaldığında tüm satırı dolduruyordu — buton sağa yaslı, kompakt kalmalı
       (kullanıcı isteği, 26.08.2026: "görseldeki diğer menüsü en sağda olsun"). */
    .hw-master-toolbar-item.ms-auto .btn-group > .btn {
        flex: 0 0 auto !important;
        border-radius: 0.45rem !important;
    }
}

/* Quick Preview Sidebar */
.hw-quick-preview {
    position: fixed;
    top: 0;
    right: -420px;
    width: 400px;
    height: 100vh;
    background: #fff;
    z-index: 1060;
    transition: right 0.3s ease-in-out;
    display: flex;
    flex-direction: column;
}

.hw-quick-preview.show {
    right: 0;
}

.hw-quick-preview .preview-body {
    flex: 1;
    overflow-y: auto;
    background: #f1f2f8;
    padding: 1rem;
}

.hw-quick-preview iframe, .hw-quick-preview img {
    width: 100%;
    height: 100%;
    border-radius: 8px;
    box-shadow: 0 4px 12px rgba(0,0,0,0.05);
}

[data-theme='dark'] .hw-quick-preview {
    background: #111827;
    border-color: #1f2937 !important;
}

[data-theme='dark'] .hw-quick-preview .preview-body {
    background: #090e1a;
}

/* Sesli giriş (mikrofon) butonu — hw-mic-input.js tarafından Açıklama/Not ve
   tabloda ara alanlarının yanına dinamik eklenir (kullanıcı isteği, 11.08.2026).
   Wrapper içinde mutlak konumlu: tek satırlık input'larda dikeyde ortalanır,
   textarea'larda sağ-alt köşeye oturur — böylece akışı bozup alt satıra kaymaz. */
.hw-mic-wrap { position: relative; }
/* (12.08.2026) input-group içinde .hw-mic-wrap, input'un yerini alan bir div
   olduğu için flex-child özelliklerini (flex-grow, min-width) devralmıyordu —
   dar toolbar'larda (ör. "Tabloda Ara" etiketli sayfalar: Teklifler, Ürün
   Bazında Satış/Ayrıntı, Gelen Faturalar, e-İrsaliye Listesi, Personel) bu
   yüzden input-group flex-wrap ile alt satıra kayıyordu (kullanıcı bildirimi). */
.hw-master-toolbar-item.col-search .input-group { flex: 1 1 auto; flex-wrap: nowrap; min-width: 0; }
.input-group > .hw-mic-wrap { flex: 1 1 auto; min-width: 0; display: flex; }
.hw-mic-wrap input, .hw-mic-wrap textarea { padding-right: 34px !important; min-width: 0; }
/* (12.08.2026) Sidebar menü araması (.hw-sidebar-search) ve benzer mic'li
   input-group'lar için genel kural — Bootstrap'in .input-group varsayılan
   flex-wrap:wrap'ı, dar konteynerlerde ikon/arama kutusunun alt satıra
   kaymasına sebep oluyordu (kullanıcı bildirimi: sidebar "Menüde ara"). */
.input-group:has(> .hw-mic-wrap) { flex-wrap: nowrap; }
.hw-mic-wrap .hw-mic-btn {
    position: absolute;
    top: 50%;
    right: 4px;
    transform: translateY(-50%);
    margin-left: 0;
}
.hw-mic-wrap-textarea .hw-mic-btn {
    top: auto;
    bottom: 6px;
    transform: none;
}
.hw-mic-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: 1px solid #dde1ec;
    background: #fff;
    color: #6b7280;
    padding: 0;
    line-height: 1;
    cursor: pointer;
}
.hw-mic-btn:hover {
    background: #f0f1fb;
    color: var(--hw-primary, #4f46e5);
}
.hw-mic-btn.hw-mic-active {
    background: #fee2e2;
    border-color: #fca5a5;
    color: #dc2626;
    animation: hwMicPulse 1.1s infinite;
}
@keyframes hwMicPulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(220,38,38,.35); }
    50% { box-shadow: 0 0 0 6px rgba(220,38,38,0); }
}
[data-theme='dark'] .hw-mic-btn {
    background: #111827;
    border-color: #1f2937;
    color: #9aa4bf;
}

/* Tarayıcının varsayılan (açık renk) kaydırma çubukları koyu temada hiç
   uyarlanmıyordu — Takvim (FullCalendar) gibi kendi içinde kaydırılan
   alanlarda göze batan beyaz bir şerit olarak görünüyordu (kullanıcı
   bildirimi, 12.08.2026). Firefox + Chrome/Edge için genel koyu tema
   kaydırma çubuğu tanımı. */
[data-theme='dark'] { scrollbar-color: #374151 #111827; }
[data-theme='dark'] ::-webkit-scrollbar { width: 10px; height: 10px; }
[data-theme='dark'] ::-webkit-scrollbar-track { background: #111827; }
[data-theme='dark'] ::-webkit-scrollbar-thumb { background: #374151; border-radius: 6px; }
[data-theme='dark'] ::-webkit-scrollbar-thumb:hover { background: #4b5563; }

/* "Keşfet: Yeni Entegrasyonlar" kartlarındaki (hepsiburada/amazon vb.) logo
   görselleri hiç boyut sınırı olmadığı için kendi doğal (büyük) genişliğinde
   render olup kart dışına taşıyordu (kullanıcı bildirimi, 11.08.2026). */
.hw-ent-card { overflow: hidden; }
.hw-ent-logo-lg {
    max-width: 100%;
    width: 100%;
    height: 56px;
    object-fit: contain;
    border-radius: 8px;
}

/* ---------------------------------------------------------------- Giriş sayfası
   Vista Yönetim'in login ekranıyla aynı "pro" görünüme kavuşturuldu
   (kullanıcı isteği): koyu radial-gradient arka plan, yüzen beyaz kart,
   ikonlu input grupları, gradient buton. */
.hw-auth-body {
    margin: 0;
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background:
        radial-gradient(circle at 15% 15%, #1e3a6f 0%, transparent 55%),
        radial-gradient(circle at 85% 85%, #1f2a5f 0%, transparent 55%),
        linear-gradient(135deg, #0c1420 0%, #10192b 55%, #16223a 100%);
    background-attachment: fixed;
    overflow: hidden;
}
.hw-auth-wrap { width: 100%; display: flex; align-items: center; justify-content: center; padding: 20px; }
.hw-auth-card {
    width: 100%;
    max-width: 400px;
    background: rgba(255, 255, 255, 0.97);
    border-radius: 20px;
    padding: 36px 32px;
    box-shadow: 0 30px 80px rgba(0, 0, 0, 0.45);
    animation: hwAuthFadeIn 0.4s ease both;
}
@keyframes hwAuthFadeIn {
    from { opacity: 0; transform: translateY(8px); }
    to { opacity: 1; transform: translateY(0); }
}

/* ---------------------------------------------------- Giriş ekranı: iki panelli tasarım */
/* Vista Yönetim'in admin girişindeki profesyonel iki panelli görünümle aynı desen
   (kullanıcı isteği: "vista müşteri paneli de Vista yönetim paneli gibi görünümü
   profesyonel giriş olsun. yan tarafta yazı olsun") — sol tarafta marka/tanıtım
   paneli, sağda form. Mobilde ("sol yazı bulunan alan mobilde olmasın") sol panel
   tamamen gizlenir, sadece form kartı kalır (bkz. altdaki @media). */
.hw-auth-split {
    width: 100%;
    max-width: 1120px;
    min-height: 620px;
    display: flex;
    border-radius: 24px;
    overflow: hidden;
    box-shadow: 0 30px 80px rgba(0, 0, 0, 0.45);
    animation: hwAuthFadeIn 0.4s ease both;
}
.hw-auth-left {
    flex: 1 1 50%;
    background:
        radial-gradient(circle at 15% 15%, #1e3a6f 0%, transparent 55%),
        radial-gradient(circle at 85% 85%, #1f2a5f 0%, transparent 55%),
        linear-gradient(135deg, #0c1420 0%, #10192b 55%, #16223a 100%);
    color: #fff;
    padding: 44px 40px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 28px;
    position: relative;
}
.hw-auth-left-brand { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.hw-auth-left-badge {
    font-size: 11px;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.16);
    color: #cfd3ec;
    padding: 6px 12px;
    border-radius: 999px;
}
.hw-auth-left h1 { font-size: 32px; font-weight: 800; line-height: 1.2; margin: 0; color: #fff; }
.hw-auth-left p.hw-auth-left-lead { font-size: 14.5px; color: #b7c3e0; line-height: 1.6; margin: 0; max-width: 420px; }
.hw-auth-left-features { display: flex; flex-direction: column; gap: 12px; }
.hw-auth-left-feature {
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 10px;
    padding: 14px 16px;
}
.hw-auth-left-feature strong { display: block; font-size: 13.5px; font-weight: 700; margin-bottom: 3px; color: #fff; }
.hw-auth-left-feature span { font-size: 12.5px; color: #a9b4cf; line-height: 1.5; }
.hw-auth-right {
    flex: 1 1 50%;
    background: rgba(255, 255, 255, 0.97);
    padding: 48px 44px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    overflow-y: auto;
}
.hw-auth-right-eyebrow { font-size: 11.5px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: var(--hw-primary, #2b5aa8); margin-bottom: 10px; }
.hw-auth-right h2 { font-size: 26px; font-weight: 800; margin: 0 0 6px; color: #1d2939; }
.hw-auth-right-sub { font-size: 13.5px; color: #6b7290; margin: 0 0 26px; }

/* Küçük ekranlarda (dar tarayıcı penceresi dahil) üstteki "Vista Web" tanıtım kartı
   (.hw-auth-left) artık gizleniyor, sadece Giriş formu görünüyor — kullanıcı isteği,
   13.09.2026: "küçük ekranlarda üstteki Vista web yazı kartı olmasın. sadece giriş
   olsun". Eşik önceden 640px'de gizliyordu; 860-640px arasındaki (ör. dar bir masaüstü
   penceresi) genişliklerde kart hâlâ görünüyor ama sıkışmış hâlde kalıyordu — eşik
   860px'e çıkarılıp iki media query birleştirildi. */
@media (max-width: 860px) {
    .hw-auth-left { display: none; }
    .hw-auth-split { flex-direction: column; max-width: 460px; min-height: 0; border-radius: 20px; box-shadow: none; }
    .hw-auth-right { padding: 36px 28px; border-radius: 20px; box-shadow: 0 30px 80px rgba(0, 0, 0, 0.45); }
}
.hw-auth-brand { display: flex; align-items: center; gap: 14px; margin-bottom: 24px; }
.hw-auth-brand-mark {
    width: 38px;
    height: 38px;
    border-radius: 12px;
    background: var(--hw-primary-grad, linear-gradient(135deg, #2b5aa8, #1e4a8f));
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    color: #fff;
    box-shadow: 0 6px 16px rgba(43, 90, 168, 0.45);
    flex-shrink: 0;
    padding: 6px;
}
.hw-auth-brand-mark img {
    width: 100%;
    height: 100%;
    object-fit: contain;
}
.hw-auth-title { font-size: 20px; font-weight: 800; color: #1d2939; }
.hw-auth-subtitle {
    font-size: 12.5px;
    color: #6b7290;
    font-weight: 600;
    letter-spacing: 0.03em;
    text-transform: uppercase;
}
.hw-auth-alert {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    border-radius: 10px;
    padding: 10px 14px;
    margin-bottom: 16px;
}
.hw-auth-alert-success { background: #ecfdf5; color: #15803d; }
.hw-auth-alert-danger { background: #fef2f2; color: #b91c1c; }
.hw-auth-form { display: flex; flex-direction: column; gap: 16px; }
.hw-auth-field label {
    display: block;
    font-size: 12.5px;
    font-weight: 700;
    color: #6b7290;
    margin-bottom: 6px;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}
.hw-auth-field-error { display: block; color: #dc2626; font-size: 12px; margin-top: 4px; }
.hw-auth-input-group {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    gap: 10px;
    border: 1.5px solid #e7eaf1;
    border-radius: 10px;
    padding: 11px 14px;
    transition: border-color 0.15s ease, box-shadow 0.15s ease;
    background: #fafaff;
}
.hw-auth-input-group:focus-within {
    border-color: var(--hw-primary-light, #4472bd);
    box-shadow: 0 0 0 3px rgba(43, 90, 168, 0.15);
    background: #fff;
}
.hw-auth-input-group i { color: #6b7290; font-size: 16px; flex-shrink: 0; }
.hw-auth-input-group input {
    border: none;
    outline: none;
    background: transparent;
    flex: 1 1 auto;
    min-width: 0;
    font-size: 14.5px;
    font-family: inherit;
}
/* Tarayıcıların yerleşik şifre göster/gizle simgesi (Edge'in göz ikonu vb.) tutarsız
   davranıyordu — bazı tarayıcılarda hiç yok, Edge'de sadece dolu alanda/hover'da
   belirsiz şekilde görünüyordu (kullanıcı bildirimi, 13.08.2026: "mouse üzerine gelince
   görünmüyor"). Kendi göz ikonlu butonumuzla değiştirip yerleşik olanları kapatıyoruz —
   böylece tüm tarayıcılarda aynı, her zaman görünür simge kullanılır. */
.hw-auth-input-group input[type="password"]::-ms-reveal,
.hw-auth-input-group input[type="password"]::-ms-clear { display: none; }
/* Vista Yönetim'deki .vy-password-toggle ile aynı, kanıtlanmış desen — buton input-group'un
   sıradan bir flex öğesi (mutlak konumlandırma/negatif margin YOK, ilk denemede bunlar
   butonu kutunun dışına taşırıp kendi varsayılan tarayıcı çerçevesiyle görünmesine
   sebep olmuştu, kullanıcı ekran görüntüsüyle bildirdi, 15.08.2026). */
.hw-auth-input-group .hw-password-toggle {
    background: none !important;
    border: none !important;
    outline: none;
    padding: 0;
    margin: 0;
    color: #6b7290;
    font-size: 16px;
    line-height: 1;
    cursor: pointer;
    flex-shrink: 0;
}
.hw-auth-input-group .hw-password-toggle:hover { color: var(--hw-primary-light, #4472bd); }
.hw-auth-check { display: flex; align-items: center; gap: 8px; font-size: 13.5px; color: #6b7290; }
.hw-auth-check-row { justify-content: space-between; }
.hw-auth-forgot-link { font-size: 13px; font-weight: 600; color: var(--hw-primary, #2b5aa8); text-decoration: none; }
.hw-auth-forgot-link:hover { text-decoration: underline; }
.hw-auth-back-link { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 600; color: #6b7290; text-decoration: none; margin-bottom: 18px; }
.hw-auth-back-link:hover { color: var(--hw-primary-light, #4472bd); }
.hw-auth-lead { font-size: 13.5px; color: #6b7290; line-height: 1.55; margin: -6px 0 20px; }
/* Şifremi Unuttum gönderim sonrası ve Şifre Sıfırlama başarı ekranları için —
   büyük, sakinleştirici bir ikon rozeti + ortalanmış metin (kullanıcı isteği,
   16.08.2026: "daha profesyonel yeni yöntemlerle modern yapı ve görünüm"). */
.hw-auth-result { text-align: center; padding: 8px 0 4px; }
.hw-auth-result-icon {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 28px;
    margin: 0 auto 18px;
}
.hw-auth-result-icon.is-success { background: #ecfdf5; color: #15803d; }
.hw-auth-result-title { font-size: 17px; font-weight: 800; color: #1d2939; margin-bottom: 8px; }
.hw-auth-result-text { font-size: 13.5px; color: #6b7290; line-height: 1.6; margin-bottom: 4px; }
.hw-auth-result-text strong { color: #1d2939; }
/* Yeni şifre gücü çubuğu — statik bir minimum uzunluk kuralı yerine kullanıcıya
   anlık geri bildirim verir, form gönderilmeden önce zayıf şifreleri caydırır. */
.hw-auth-strength { display: flex; gap: 4px; margin-top: 8px; }
.hw-auth-strength span { flex: 1; height: 4px; border-radius: 2px; background: #e7eaf1; transition: background-color .15s ease; }
.hw-auth-strength-label { font-size: 11.5px; color: #94a3b8; margin-top: 4px; display: block; }
.hw-auth-btn-primary {
    background: var(--hw-primary-grad, linear-gradient(135deg, #2b5aa8, #1e4a8f));
    border: none;
    font-weight: 600;
    border-radius: 10px;
    padding: 12px 18px;
    box-shadow: 0 6px 16px rgba(43, 90, 168, 0.3);
    transition: transform 0.15s ease, box-shadow 0.15s ease;
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    cursor: pointer;
}
.hw-auth-btn-primary:hover {
    transform: translateY(-1px);
    box-shadow: 0 10px 22px rgba(43, 90, 168, 0.4);
    color: #fff;
}
.hw-auth-footer-link {
    text-align: center;
    font-size: 13.5px;
    color: var(--hw-primary, #2b5aa8);
    font-weight: 600;
    text-decoration: none;
}
.hw-auth-footer-link:hover { text-decoration: underline; }
.hw-auth-meta {
    text-align: center;
    margin-top: 24px;
    padding-top: 16px;
    border-top: 1px solid #e7eaf1;
    font-size: 11px;
    color: #94a3b8;
    display: flex;
    justify-content: center;
    gap: 6px;
}

/* Portatif/kompakt form deseni — uzun kayıt kartlarında (Cari, Stok vb.) alanlar
   arasındaki boşluk ve kutu boyutları göz yoruyordu (kullanıcı isteği, 30.08.2026:
   "yeni cari alanları çok yer kaplıyor. üst alt boşlukları fazla. ayrıca metin kutu
   genişlikleri fazla. portatif göz yormayan modern profesyonel tasarım yap."). Bir
   <form> veya sarmalayıcıya .hw-compact-form eklemek, formun İÇİNDEKİ tüm etiket/
   input/select'leri tek seferde daraltır — her satırı elle değiştirmeye gerek kalmaz,
   ileride aynı sınıf başka kayıt formlarına da eklenebilir.
   - Dikey satır arası boşluk (row g-3'ün gutter-y'si) daraltıldı.
   - Etiketler küçültüldü, gövdeyle arası daraltıldı.
   - Input/select yüksekliği ve iç dolgusu daraltıldı (form-control-sm benzeri ama
     Select2/GİB butonu gibi bileşik alanlarla da uyumlu genel bir kural). */
.hw-compact-form .row.g-3 { --bs-gutter-y: .85rem; }
.hw-compact-form .form-label {
    margin-bottom: .28rem;
    font-size: .78rem;
    font-weight: 600;
    color: #4b5468;
}
.hw-compact-form .form-control,
.hw-compact-form .form-select,
.hw-compact-form .input-group-text {
    padding: .38rem .65rem;
    font-size: .85rem;
    min-height: 34px;
}
.hw-compact-form .select2-container .select2-selection--single {
    height: 34px !important;
}
.hw-compact-form .select2-container .select2-selection--single .select2-selection__rendered {
    line-height: 32px !important;
    font-size: .85rem;
}
.hw-compact-form .select2-container .select2-selection--single .select2-selection__arrow {
    height: 32px !important;
}
.hw-compact-form .form-text { font-size: .72rem; margin-top: .15rem; }
.hw-compact-form .form-check { margin-top: .15rem; }

