/* ============================================================================
 * TEMA "YENİ" — 3DPM Operasyon Paneli · SENTEZ KATMANI
 * Sürüm 1.1 · 10.08.2026  (denetim turu sonrası — bkz. IYILESTIRME-RAPORU.md)
 *
 * ---------------------------------------------------------------------------
 * SÜRÜM 1.1'DE NE DEĞİŞTİ (üç heyet raporu + canlı doğrulama)
 *   🔴 20 ÖLÜMCÜL GLİF ÇAKIŞMASI kapatıldı. Kök sebep tek bir metot hatasıydı:
 *      content: ekleyen kurallar, hedef metnin CANLIDA NE BASTIĞI
 *      doğrulanmadan yazılmıştı. JS zaten ▲/▼, 🚚✓, ⚠️, ⏳, ✅, ❌, ⛔, 🔴,
 *      ⏸️, &#10003;, &#10007;, &#8677;, &#9203; ve "—" basıyordu; tema
 *      üstlerine ikinci glif koyuyordu ("▲ ▲ %12,4" · "✓ 🚚 ✓" · "– —").
 *      YENİ KURAL: hiçbir ::before/::after content'i, hedefin canlı metni
 *      okunmadan eklenmez.
 *   🔴 TABLO KUTUSUNDAN TAŞIYORDU (Siparişler açılır açılmaz bozuktu):
 *      tema max-height'ı geri koyuyor ama overflow'a dokunmuyordu. Kaydırıcı
 *      artık .op-table-wrap; yapışkan başlık top:0'a döndü.
 *   🔴 ÖLÇÜLEN SATIR REGRESYONU: telefonlu satır 49,25 → 60,09px olmuştu;
 *      kökü tema'nın kendi 32px'lik .op-cust-msg butonuydu. Negatif dikey
 *      marjla satır kutusundan çıkarıldı (görsel boyut + hedef aynı kaldı).
 *   🔴 ÜST ÜSTE BİNEN HEDEF: telefon linkinin son pikselleri "ara" yerine
 *      "mesaj panelini aç" oluyordu. Genişleme tek yönlü yapıldı.
 *   🔴 §14 (dokunmatik) §13'ü (mobil) sessizce eziyordu — dosyanın kendi
 *      övündüğü "beraberlik-ezmesi" arızası dosya İÇİNDE tekrar üretilmişti.
 *      §14 artık min-width:769px kapısında.
 *   · ~90 satır ÖLÜ kural silindi (hero-* · tbl ailesi · qa-btn · panel-card ·
 *     ws-indicator · ws-pill.offline · status-pill · fc-actions · table-link ·
 *     radio · th[data-sort] · alert-info · activity-empty), 9 !important
 *     birlikte kalktı: 36 → 27 satır.
 *   · Kontrast: --line, --ctl-border, --text-tertiary, --neutral-soft,
 *     --surface-hover ölçülerek yeniden ayarlandı (hepsi 0px maliyetli).
 *   · Bordo bütçesi 8 dolu alandan 1'e indi: DOLU BORDO = TAAHHÜT ETTİĞİN
 *     EYLEM; "seçili olan" tint + çerçeve ile anlatılır.
 *   · .dhl-bd.bad.hit SİLİNMEDİ — "ölü" diye işaretlenmişti, canlıdan
 *     doğrulandı: className ataması ile geliyor (hata sayacı > 0 vurgusu).
 *   · .fc-bal-tutar ölüydü ama kural silinmedi, gerçek sınıfa (.fc-bal-v)
 *     bağlandı — aksi halde kargo bakiyesi biçimsiz kalacaktı.
 * ---------------------------------------------------------------------------
 * ----------------------------------------------------------------------------
 * NE BU DOSYA
 *   Üç aday temanın (A "yoğun" · B "dokunmatik" · C "sakin") beş kişilik heyet
 *   raporlarıyla birlikte tartılmasından çıkan TEK uygulanabilir katman.
 *   Omurga = A (toplam 38/50, 5 mercekten 3'ünde birinci).
 *   B'den dokunma sözleşmesi + durum yedekliliği, C'den tipografi merdiveni +
 *   kısıtlı bordo + doğru dokunmatik kapısı aşılandı. Ayrıntı: SENTEZ-RAPORU.md
 *
 * NASIL AKTİFLEŞİR
 *   Dosya HER ZAMAN yüklenir; tek bir kural bile <html data-tema="yeni"> yoksa
 *   eşleşmez. Kapsam sızıntısı riski sıfırdır.
 *     1) index.html <head> — EN SON <link> (mobile.css'ten de SONRA):
 *          <link rel="stylesheet" href="/css/tema-yeni.css?v=1">
 *     2) Aktifleştirme (HTML/JS'e dokunmadan, tek satır bootstrap):
 *          if (new URLSearchParams(location.search).get('tema') === 'yeni')
 *            document.documentElement.dataset.tema = 'yeni';
 *   ?tema=yeni yoksa normal kullanıcının ekranı bitten etkilenmez.
 *
 *   SIRA ŞART: html[data-tema="yeni"] .X = (0,2,1) özgüllüğü, mobile.css'in
 *   body[data-page="y"] .X = (0,2,1) kurallarıyla BERABEREDİR; berabere kaynak
 *   sırasıyla çözülür. Sona konmazsa mobil kurallar temayı ezer. Sona konduğu
 *   için de mobil ölçüleri EZER — bu yüzden 13. bölümde mobil hedefler tek tek
 *   geri verildi (heyet: ekran-uyum, "beraberlik-ezmesi" bulgusu).
 *
 * KAPSAM
 *   kabuk (sidebar/topbar/main) · butonlar · formlar/filtre · tablolar ·
 *   kartlar/KPI · durum göstergeleri · fc-* şeritleri · dhl-* diyalog ailesi ·
 *   bk-* barkod koşusu · legacy köprü (hero-card/status-pill/qa-btn/tbl) ·
 *   @media 1366x768 · mobil · dokunmatik · reduced-motion · prefers-contrast ·
 *   forced-colors · print
 *
 * DEĞİŞMEYENLER
 *   · Hiçbir class/id adı değiştirilmedi (~30 JS dosyası bu adları üretiyor).
 *   · Marka bordosu #681620 SABİT; yalnız tonları türetildi.
 *   · Dış bağımlılık YOK: yeni font yok, CDN yok, ikon kütüphanesi yok,
 *     dosya içe aktarma yok, gömülü veya uzak varlık adresi yok.
 *     Inter design-system.css:4'te zaten indiriliyor (main.css:17 body'yi
 *     sistem fontuna düşürdüğü için kullanılmıyordu) — burada geri bağlandı.
 *     Durum glifleri düz Unicode: ✓ ✕ ! → ● ■ ◆ –  (Inter kapsamında).
 *   · Bilgi yoğunluğu DÜŞMEDİ — v1.1'de ARTTI. Sürüm 1.0'ın "49,75 → 36,6px"
 *     iddiası ÖLÇÜMLE yalanlanmıştı (telefonlu satırda gerçek sonuç 60,09px).
 *     v1.1 kazançları: .op-cust-msg satır kutusundan çıktı · rozet
 *     line-height 1,6 → 1,35 (satır başına 5-6 çipi şişiriyordu) · kargo
 *     hücresi 3 satırdan 1-2 satıra indi · dokunmatik --row-pad-y 7 → 6px.
 *     Maliyetler: sayfa başlığı +2px (rezerve yazıldı) · filtre çubuğu
 *     dokunmatikte +4px (hizalama + 44px hedef karşılığında), ikisi de
 *     sayfa başına BİR KEZ. Net etki satır başına EKSİ.
 *
 * YOĞUNLUK ↔ DOKUNMA GERİLİMİ NASIL ÇÖZÜLDÜ
 *   Satır KISA kalır, HEDEF büyür. Küçük kare kontroller görsel olarak
 *   24-36px'te bırakılıp ::after hit-expander ile 40-44px dokunma alanına
 *   çıkarıldı; genişleme yalnız hücre/komşu boşluğu kadar, ASLA komşu satıra
 *   taşmayacak şekilde ölçüldü (yanlış satıra basmak = yanlış siparişe barkod).
 *   Bu, medya sorgusuna BAĞLI DEĞİLDİR: cihaz ne raporlarsa raporlasın hedef
 *   40px'in altına inmez (heyet: dokunmatik-erişim, A'nın tek ölümcül riski).
 *
 * !important BÜTÇESİ — v1.0'da "16" deniyordu, gerçek sayı 36 SATIRDI.
 *   v1.1'de 27'ye indi. Kalanların tamamı karşı taraftaki GERÇEK bir
 *   !important'ı yenmek için ve her birinin yanında dosya:satır gerekçesi var:
 *     · th.sortable padding-right      → design-system.css:197
 *     · .status / .pill (3 bildirim)   → app-shell.css:284
 *     · >=769px form puntosu           → app-shell.css:293
 *     · prefers-reduced-motion (6)     → kullanıcı tercihi her şeyin üstünde
 *   Silinen 9: .qa-btn (4) · .hero-card ailesi (3) · .panel-card (2) —
 *   üçünün de sınıfı canlıda hiç render edilmiyordu.
 *   ÖZGÜLLÜK YÖNTEMİ: v1.1'de eklenen hiçbir düzeltme !important kullanmadı;
 *   hepsi SEÇİCİ ZİNCİRİ UZATILARAK çözüldü (.fc-page ön eki, #fc-q, #dhl-btn-halt).
 * ==========================================================================*/


/* ==========================================================================
 * 1) TOKEN KATMANI
 * ':root' yerine html[data-tema="yeni"] (0,1,1): hem kapsam güvenliği, hem
 * main.css:132'deki ikinci :root bloğunu (0,1,0) yenmek için.
 * Bu blok tek başına 3 sessiz üretim arızasını kapatır:
 *   · --transition main.css:136'da 'all 0.18s ease' shorthand'ine çevrildiği
 *     için "transition: all var(--transition)" yazan 16 bildirim düşüyordu.
 *   · --text-primary hiçbir dosyada tanımlı değildi (orders-page.css:61/247/260).
 *   · --brand-primary main.css:133'te #671520 (bir hane sapmış) yazıyordu.
 * ==========================================================================*/
html[data-tema="yeni"] {
  color-scheme: light;

  /* --- Marka: ANA RENK SABİT, tonlar türetildi --- */
  --primary: #681620;              /* DEĞİŞMEZ */
  --primary-hover: #7d1a27;
  --primary-press: #4f111a;
  --primary-dark: #4c1017;
  --primary-soft: rgba(104, 22, 32, .08);
  --primary-soft-2: rgba(104, 22, 32, .16);
  --primary-line: rgba(104, 22, 32, .34);
  --brand-primary: #681620;
  --bordo: #681620;

  /* --- Zemin --- */
  --bg: #f2f3f5;
  --surface: #ffffff;
  /* 10.08 ÖLÇÜM: eski #f1f2f5 beyazda 1,12:1 / zebrada 1,03:1 idi — hover
     çift satırlarda FİİLEN GÖRÜNMÜYORDU. Satır hover'ı ayrıca --surface-active
     kullanır (aşağıda); buton hover'ı burada kalır. */
  --surface-hover: #e9ecf1;
  --surface-active: #e6e8ec;
  --surface-sunken: #f7f8fa;
  --zebra: #f4f6f8;                /* ~%3 fark: A'nın #fafafb'si (~%1) görünmüyordu */
  --thead-bg: #f1f3f6;

  /* --- Çizgi: üç rol AYRI --- */
  /* 10.08 ÖLÇÜM: eski #eef0f3 beyazda 1,14:1 / zebrada 1,05:1 = görünmezlik
     eşiğinin ALTI. "yanlış satır = yanlış siparişe barkod" gerekçesini ölçüm
     desteklemiyordu → 1,31 / 1,21'e çıkarıldı. Maliyet 0px. */
  --line: #dde1e7;                 /* satır ayırıcı — sessiz ama GÖRÜNÜR */
  --border: #dfe2e7;               /* kap kenarlığı */
  --border-strong: #c3c9d2;        /* vurgulu ayırıcı (thead altı) */
  /* 10.08 ÖLÇÜM: eski #8b95a1 yalnız BEYAZ içte 3,04 geçiyordu; filtre çubuğu
     saydam olduğu için dış komşu --bg'de 2,74 / zebrada 2,80 = 1.4.11 FAIL.
     #78828f: beyaz 3,90 · bg 3,51 · zebra 3,60 · surface-active 3,18 ✓ */
  --ctl-border: #78828f;           /* kontrol kenarlığı — WCAG 1.4.11 her zeminde ≥3:1 */
  --border-focus: var(--primary);

  /* --- Metin: 3 kademe, en soluğu bile AA --- */
  --text: #16181c;                 /* 15,7:1 */
  --text-primary: #16181c;
  --text-secondary: #4d5560;       /*  7,6:1 */
  /* 10.08 ÖLÇÜM: #656e7b beyazda 5,16 ✓ ama SEÇİLİ satırda 4,43 / zebra+seçili
     4,11 = AA altı. #5f6875 → beyaz ≈5,7 · seçili ≈4,6 ✓ */
  --text-tertiary: #5f6875;
  --text-inverse: #ffffff;
  --muted: #4d5560;

  /* --- Durum: mürekkep / yumuşak zemin / çizgi --- */
  --success: #15803d;  --success-soft: #eef7f1;  --success-line: #b6d8c3;  --success-ink: #0f5f2e;
  --danger:  #b42318;  --danger-soft:  #fdf1f0;  --danger-line:  #eebfba;  --danger-ink:  #8c1a12;
  --warning: #9a5608;  --warning-soft: #fdf5e9;  --warning-line: #e8cb9e;  --warning-ink: #7d4406;
  --info:    #1d4ed8;  --info-soft:    #eef2fd;  --info-line:    #bcccf3;  --info-ink:    #183fa8;
  /* 10.08: --neutral-soft, --line ile BİREBİR AYNI hex idi (#eef0f3) — iki rol
     tek değerde; taşıyıcı rozeti (.op-kg) çift satırda 1,054:1 ile kayboluyordu.
     Ayrıldı ve --surface-active ile hizalandı. */
  --neutral-soft: #e6e8ec;  --neutral-ink: #4d5560;
  --green: #15803d; --red: #b42318; --yellow: #9a5608; --blue: #1d4ed8;

  /* --- Boşluk: 2px YARIM ADIMLI tek skala (dürüst beyan) ---
   *     2 / 4 / 6 / 8 / 10 / 12 / 16 / 20 / 24. "4px tabanlı" iddiası 10.08
   *     denetiminde 24 ızgara dışı bildirimle (3/5/7/9px) yalanlandı; ızgara
   *     gerçek kullanıma göre yeniden BEYAN edildi ve aykırılar oturtuldu.
   *     --space-6/--space-8 design-system.css değerlerine İADE EDİLDİ: tema
   *     onları hiç kullanmıyordu ama design-system .card / muhasebe / fiyat
   *     sayfalarını sessizce daraltıyorlardı (token sızıntısı). */
  --d1: 4px;  --d2: 8px;  --d3: 12px;  --d4: 16px;  --d5: 20px;  --d6: 24px;
  --space-1: 4px;  --space-2: 8px;  --space-3: 12px; --space-4: 16px;
  --space-5: 20px; --space-6: 24px; --space-8: 32px;

  /* --- Tipografi: TEK merdiven. Yarım piksel YOK, 10px'in altı YOK,
   *     yüklü olmayan ağırlık (650/900) YOK.
   *     Inter yüklü kesitler: 400 / 500 / 600 / 700 / 800.
   *     10.08: --fs-cap 11px ile --fs-sm 12px aynı ağırlıkta ayırt edilemiyordu
   *     (merdiven değil kalınlaşmış tek basamak) → cap 12px'e birleşti; 11px
   *     yalnız DAR takip/barkod numarası için --fs-mono olarak kaldı.
   *     --fs-lg 18 → 20: 17px (--fs-num) ile 18px aynı görsel ağırlıktaydı. --- */
  --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  --font-mono: ui-monospace, 'SF Mono', 'Cascadia Mono', Consolas, monospace;
  --fs-micro: 10px;   /* BÜYÜK HARF etiket, tablo başlığı — TABAN, altına inilmez */
  --fs-mono:  11px;   /* YALNIZ dar mono veri: takip no, barkod                 */
  --fs-cap:   12px;   /* üçüncül not, ipucu                                     */
  --fs-sm:    12px;   /* rozet, çip, meta                                       */
  --fs-base:  13px;   /* gövde, tablo verisi, buton, form — en çok kullanılan   */
  --fs-md:    15px;   /* panel/bölüm/diyalog başlığı                            */
  --fs-lg:    20px;   /* sayfa başlığı — sayfada TEK yüksek ses                 */
  --fs-num:   17px;   /* KPI / sayaç değeri                                     */
  --ls-cap: .08em;    /* BÜYÜK HARF etiketlerde TEK harf aralığı                */
  --ls-title: -.015em;
  --lh-tight: 1.2;
  --lh-data: 1.3;
  --lh-text: 1.45;

  /* --- Köşe: operasyon işi, keskin. İç içe azalma: 10 → 8 → 6 → 4 → 3 --- */
  --radius-xs: 3px;   /* nokta/kare glif kabı — 10.08'de 6 yerde elle 3px yazılıydı */
  --radius-sm: 4px;
  --radius: 6px;
  --radius-md: 6px;   /* --radius alias'ı (ölü kademe; geriye dönük ad) */
  --radius-lg: 8px;
  --radius-xl: 10px;
  --radius-full: 9999px;

  /* --- Vurgu şeridi: bu temanın ANA durum dili, kalınlığı TOKENLE beyan edilir.
   *     --rail      satır/liste/sekme içi şerit (sidebar, satır, dhl-row, fc-tab)
   *     --rail-bar  tam genişlikli bant (uyarı şeridi, toplu seçim çubuğu)
   *     10.08 öncesi 2px/3px/4px karışıktı → dil olmaktan çıkıyordu. --- */
  --rail: 3px;
  --rail-bar: 4px;

  /* --- Gölge: neredeyse yok; ayrım tonla kurulur --- */
  --shadow-sm: 0 1px 2px rgba(16, 18, 24, .05);
  --shadow: 0 1px 2px rgba(16, 18, 24, .05);
  --shadow-md: 0 4px 12px rgba(16, 18, 24, .08);
  --shadow-lg: 0 22px 46px -18px rgba(16, 18, 24, .28);

  /* --- Geçiş: 200ms'i ASLA geçmez --- */
  --transition: 140ms cubic-bezier(.2, .6, .3, 1);
  --transition-slow: 190ms cubic-bezier(.2, .6, .3, 1);

  /* --- Kontrol geometrisi --- */
  --ctl-h: 34px;        /* buton/input görsel yüksekliği (coarse'ta 40/44px)   */
  --ctl-h-sm: 28px;
  --ctl-pad-x: 12px;
  --icon-h: 36px;       /* topbar ikon butonu (::after ile 44px hedef)          */
  --row-pad-y: 4px;     /* tablo hücresi dikey dolgu                            */
  --row-pad-x: 10px;
  --kpi-pad: 6px 10px;
  /* Tablo kapağı: bugünkü 245px rezervinden, filtre çubuğunun karttan
   * çıkarılmasıyla kazanılan 22px + çip marjından kazanılan 8px düşüldü.
   * Kazanılan boşluk doğrudan SATIRA çevrildi.
   * 10.08: sayfa başlığı 18 → 20px oldu, +2px rezerve yazıldı (215 → 217). */
  --tbl-reserve: 217px;

  /* --- Kabuk ölçüleri (app-shell.css:9 ile aynı kaynak) --- */
  --shell-side-w: 150px;
  --shell-top-h: 52px;
  --nav-row-h: 28px;
  --nav-font: 13px;
  --nav-icon: 16px;
  --main-pad-y: 12px;
  --main-pad-x: 16px;
}


/* ==========================================================================
 * 2) TABAN — gövde · bağlantı · odak · seçim · kaydırma çubuğu
 * ==========================================================================*/
html[data-tema="yeni"] body {
  font-family: var(--font-sans);   /* main.css:17 Inter'i çöpe atıyordu */
  font-size: var(--fs-base);
  line-height: var(--lh-text);
  color: var(--text);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  -webkit-tap-highlight-color: transparent;
}
html[data-tema="yeni"] button,
html[data-tema="yeni"] input,
html[data-tema="yeni"] select,
html[data-tema="yeni"] textarea { font-family: var(--font-sans); }

/* Rakamlar her yerde aynı genişlikte — kolonlar titremesin.
   10.08: .hero-value listeden ÇIKARILDI — .hero-* ailesi canlıda 0 kullanım
   (29 js + index.html tarandı); app-shell.css'ten kopyalanmış ölü köprüydü. */
html[data-tema="yeni"] table,
html[data-tema="yeni"] .kpi-value,
html[data-tema="yeni"] .op-total,
html[data-tema="yeni"] .op-date,
html[data-tema="yeni"] .op-pagination,
html[data-tema="yeni"] .op-total-row,
html[data-tema="yeni"] .op-profit-row,
html[data-tema="yeni"] .dhl-bd .v,
html[data-tema="yeni"] .bk-money .v,
html[data-tema="yeni"] .tb-seg b,
html[data-tema="yeni"] .fc-tab .cnt { font-variant-numeric: tabular-nums; }

/* Takip/barkod/sipariş numarası: tek dokunuşta tamamı seçilsin */
html[data-tema="yeni"] .op-id,
html[data-tema="yeni"] .op-kg-no,
html[data-tema="yeni"] .op-kv-r code,
html[data-tema="yeni"] .dhl-rb code { -webkit-user-select: all; user-select: all; }

/* Bağlantı: opacity hover'ı dokunmatikte "yapışıp" kalıyordu → renk değişimi.
   Tablo içi bağlantı ALTI ÇİZİLİ doğar: dokunmatikte hover gelmediği için
   eskiden yalnız renkle ayırt ediliyordu (WCAG 1.4.1 ihlali). */
/* design-system.css:90 bagi fare ustundeyken %75 opakliga dusuruyor;
   dokunmatikte "yapiskan hover" yuzunden bag SOLUK KALIYORDU. v1.0 bunu bir
   HOVER kuraliyla notrluyordu — ama hover kuralinda tam opaklik gormek,
   denetimde "hover'a bagli islev" imzasiyla birebir ayni goruntuyu veriyor.
   Yapisal cozum: notrleme TABAN kurala tasindi.
   'html[data-tema="yeni"] a' = (0,1,2) > design-system'in (0,1,1) kuralini
   HOVER HALINDE DE yener. Tema'da artik tek bir hover kurali bile bir seyi
   gostermiyor, gizlemiyor veya soluklastirmiyor. */
html[data-tema="yeni"] a { color: var(--primary); opacity: 1; text-decoration: none; transition: color var(--transition); }
/* -webkit-tap-highlight-color:transparent (body) karşılıksız kalmasın:
   yedeği olmayan kontrollere görünür basma geri bildirimi. */
html[data-tema="yeni"] a:active { color: var(--primary-press); }
/* 10.08: .table-link canlıda 0 kullanım → gruptan çıkarıldı. */
html[data-tema="yeni"] .op-lnk,
html[data-tema="yeni"] .op-cust-tel,
html[data-tema="yeni"] .op-customer-meta a {
  color: var(--primary);
  text-decoration: underline;
  text-underline-offset: 2px;
  text-decoration-color: var(--primary-line);
  font-weight: 600;
}

/* --- ODAK: tek dil, her yerde aynı ---
 * B'nin modeli (kalın bordo halka + beyaz iç halka: bordo buton üstünde
 * halka kaybolmasın) alındı; B'nin position/z-index/border-radius bildirimleri
 * ÇIKARILDI — hap biçimli çipi odakta kareleştiriyor, absolute konumlu
 * .fc-search-x'i akışa düşürüyordu (heyet: dokunmatik + estetik).
 * Hiçbir yerde outline:none yok; mevcut 3 outline:none kuralı geri alınır. */
html[data-tema="yeni"] :focus-visible {
  outline: 3px solid var(--primary);
  outline-offset: 2px;
  box-shadow: 0 0 0 2px #ffffff;
}
html[data-tema="yeni"] :focus:not(:focus-visible) { outline: none; }

html[data-tema="yeni"] ::selection { background: var(--primary-soft-2); }

html[data-tema="yeni"] ::-webkit-scrollbar { width: 10px; height: 10px; }
html[data-tema="yeni"] ::-webkit-scrollbar-thumb {
  background: #c2c7d0; border-radius: 8px;
  border: 3px solid transparent; background-clip: content-box;
}
html[data-tema="yeni"] ::-webkit-scrollbar-track { background: transparent; }


/* ==========================================================================
 * 3) KABUK — sidebar · topbar · main · sayfa başlığı
 *
 * 1366x768 SIDEBAR BÜTÇESİ (viewport ~648px, yer imi çubuğuyla ~617px):
 *   marka 37 + nav dolgu 12 + 4 grup başlığı 64 + 3 grup boşluğu 12
 *   + 14 satır x 26 = 364 + kullanıcı bloğu 43  ==  532px  → 116px pay ✓
 *   Yorumdaki 2 arşiv link geri açılırsa (16 satır): 584px → 64px pay ✓
 * KURAL: sidebar satırı DOKUNMATİKTE BÜYÜMEZ. B (38px) ve C (44px) burada
 * 8. kısıtı kırıyordu; masaüstünde satır 150px genişliğinde TAM SATIR hedeftir,
 * 26-28px yeterlidir. Büyütme yalnız mobil çekmecede (13. bölüm).
 * ==========================================================================*/
html[data-tema="yeni"] #sidebar {
  background: var(--surface);
  border-right: 1px solid var(--border);
  /* iOS Safari: top+bottom+height aşırı kısıtta height kazanıyor ve alt
     kullanıcı bloğu kırpılıyordu. dvh gerçek görünür yüksekliği verir. */
  height: 100vh;
  height: 100dvh;
}
html[data-tema="yeni"] .sidebar-brand { padding: 8px 12px; border-bottom: 1px solid var(--line); }
html[data-tema="yeni"] .sidebar-brand a {
  font-size: var(--fs-lg); font-weight: 800;
  letter-spacing: var(--ls-title); gap: var(--d2); line-height: var(--lh-tight);
}
html[data-tema="yeni"] .sidebar-brand-dot { width: 10px; height: 10px; background: var(--primary); }

/* Taşma güvenlik ağı: app-shell.css:32-33 kaydırma çubuğunu TAMAMEN gizliyordu,
   taşan menü maddesi SESSİZCE kayboluyordu. İnce çubuk sığdıkça yer kaplamaz. */
html[data-tema="yeni"] .sidebar-nav { padding: 6px; scrollbar-width: thin; scrollbar-color: #c2c7d0 transparent; }
html[data-tema="yeni"] .sidebar-nav::-webkit-scrollbar { width: 6px; }
html[data-tema="yeni"] .sidebar-nav::-webkit-scrollbar-thumb { background: #c2c7d0; border-radius: 3px; }

html[data-tema="yeni"] .nav-section { margin-top: var(--d1); }
/* 10px BÜYÜK HARF etiket: 700 → 600. Inter'de 10-12px'te 700↔800 gözle
   ayrılmaz; 79 ağırlık bildiriminin 66'sı ≥700 iken "kalın" bilgi taşımıyordu.
   Gerçek üç ses: 400 gövde / 600 etiket / 700 başlık+sayı. */
html[data-tema="yeni"] .nav-section-title {
  font-size: var(--fs-micro); font-weight: 600; letter-spacing: var(--ls-cap);
  color: var(--text-tertiary); padding: 4px 8px; line-height: 1;
}
/* margin-bottom: bitişik 26px hedefler yanlış dokunma üretiyordu.
   Bütçe: 14x28 = 392 + kabuk 168 = 560px → 648px viewport'ta 88px pay ✓
   (16 satırda 616 → 32px pay ✓). Sidebar satırı hâlâ BÜYÜMÜYOR. */
html[data-tema="yeni"] .sidebar-nav a {
  height: var(--nav-row-h);
  gap: var(--d2); padding: 0 8px; margin-bottom: 2px; border-radius: var(--radius-sm);
  font-size: var(--nav-font); font-weight: 500; color: var(--text-secondary);
  -webkit-user-select: none; user-select: none; touch-action: manipulation;
}
/* İkon opaklığı 0.7'de kalıp yalnız hover ile 1'e çıkıyordu → dokunmatikte
   kalıcı düşük kontrast. Sabit 1, ayrım renk tonuyla. */
html[data-tema="yeni"] .sidebar-nav a svg { width: var(--nav-icon); height: var(--nav-icon); opacity: 1; color: var(--text-tertiary); }
/* Aktif satır: renk + SOL ŞERİT + kalın yazı = üç kanal (BORDO KULLANIMI 1) */
html[data-tema="yeni"] .sidebar-nav a.active {
  background: var(--primary-soft); color: var(--primary); font-weight: 700;
  box-shadow: inset var(--rail) 0 0 var(--primary);
}
html[data-tema="yeni"] .sidebar-nav a.active svg { color: var(--primary); }
html[data-tema="yeni"] .sidebar-nav a:active { background: var(--surface-active); }

html[data-tema="yeni"] .sidebar-user { padding: 6px; border-top: 1px solid var(--line); }
html[data-tema="yeni"] .sidebar-user-btn { padding: 4px 6px; border-radius: var(--radius-sm); touch-action: manipulation; }
html[data-tema="yeni"] .sidebar-user-btn:active { background: var(--surface-active); }
html[data-tema="yeni"] .sidebar-avatar { width: 24px; height: 24px; font-size: var(--fs-micro); background: var(--primary); }
html[data-tema="yeni"] .sidebar-user-name { font-size: var(--fs-sm); font-weight: 600; }
html[data-tema="yeni"] .sidebar-user-role { font-size: var(--fs-micro); color: var(--text-tertiary); }
html[data-tema="yeni"] .sidebar-user-menu { border-radius: var(--radius); box-shadow: var(--shadow-md); }
html[data-tema="yeni"] .sidebar-user-menu a,
html[data-tema="yeni"] .sidebar-user-menu button { font-size: var(--fs-base); padding: 8px 10px; min-height: 40px; }
html[data-tema="yeni"] .sidebar-user-menu .menu-label {
  font-size: var(--fs-micro); font-weight: 700; letter-spacing: var(--ls-cap); color: var(--text-tertiary);
}

/* --- Topbar --- */
html[data-tema="yeni"] #topbar { background: var(--surface); border-bottom: 1px solid var(--border); padding: 0 var(--d3); gap: var(--d2); }
/* Topbar başlığı ile sayfa başlığı aynı adı İKİ KEZ bağırıyordu.
   Topbar'daki küçük bir konum etiketine indirildi (C'nin kararı). */
/* 10.08: dosyadaki TEK 11px BÜYÜK HARF etiketiydi — diğer ~12 etiketin hepsi
   10px/600/.08em. Merdivene oturtuldu. */
html[data-tema="yeni"] .topbar-title h1 {
  font-size: var(--fs-micro); font-weight: 600; text-transform: uppercase;
  letter-spacing: var(--ls-cap); color: var(--text-tertiary); line-height: var(--lh-tight);
}
html[data-tema="yeni"] .topbar-subtitle { font-size: var(--fs-cap); color: var(--text-tertiary); }
html[data-tema="yeni"] .topbar-right { gap: var(--d2); }

/* #topbar ÖNEKİ ŞART: app-shell.css:135 (1,1,0) bu üç öğeye 30px dayatıyor;
   öneksiz (0,2,1) kural KAYBEDER (heyet: dokunmatik-erişim bulgusu). */
html[data-tema="yeni"] #topbar .tb-pend,
html[data-tema="yeni"] #topbar .sys-stats-chip,
html[data-tema="yeni"] #topbar .ws-pill { height: 40px; border-radius: var(--radius); }
html[data-tema="yeni"] .tb-pend { border-color: var(--border); padding: 0 4px 0 10px; }
html[data-tema="yeni"] .tb-pend-label { font-size: var(--fs-micro); letter-spacing: var(--ls-cap); color: var(--text-tertiary); }
/* opacity .55 → .7: tema'nın a{color:primary} kuralı app-shell'in .tb-pend
   rengini yeniyordu → bordo@%55 = 3,43:1 (AA altı). %70'te ≈4,6:1 ✓ */
html[data-tema="yeni"] .tb-seg { border-radius: var(--radius-sm); font-size: var(--fs-sm); opacity: .7; height: 26px; }
html[data-tema="yeni"] .tb-seg.on { opacity: 1; color: var(--text); background: var(--surface-active); }
html[data-tema="yeni"] .tb-pend-total { font-size: var(--fs-sm); border-radius: var(--radius-sm); height: 26px; min-width: 26px; }
/* BORDO BÜTÇESİ (10.08): dolu bordo = TAAHHÜT ETTİĞİN EYLEM (yalnız birincil
   buton). "Seçili/açık olan" = tint + çerçeve + kalın yazı. Sayfada 8 dolu
   bordo alan vardı — bordo vurgu olmaktan çıkıp dokuya dönüşmüştü. */
html[data-tema="yeni"] .tb-pend-total.on {
  background: var(--primary-soft-2); color: var(--primary); font-weight: 700;
  box-shadow: inset 0 0 0 1px var(--primary);
}

/* WS durumu: renk + NOKTA + kelime = üç kanal.
   app-shell.css:466'daki 2 sn'lik SONSUZ nabız kaldırıldı: operasyon
   ekranında sürekli hareket dikkat çalar ve 200ms sınırını aşar.
   10.08 SİLME: .ws-pill.offline üç kuralı ÖLÜ — "offline" dizgesi canlı js +
   index.html'de 0 kez geçiyor; app.js yalnız 'online' EKLİYOR, kaldıran yol yok.
   :not(.offline) kuralı KORUNDU: hiçbir zaman offline gelmediği için o kural
   HER ZAMAN eşleşir — çevrimiçi ✓ işaretini fiilen o çiziyor. */
html[data-tema="yeni"] .ws-pill {
  font-size: var(--fs-sm); font-weight: 600; padding: 0 10px;
  background: var(--success-soft); color: var(--success-ink); border-color: var(--success-line);
}
html[data-tema="yeni"] .ws-pill .ws-dot { width: 8px; height: 8px; background: var(--success); box-shadow: none; animation: none; }
html[data-tema="yeni"] .ws-pill:not(.offline)::after { content: '✓'; font-weight: 800; margin-left: 2px; }

html[data-tema="yeni"] #main { padding: var(--main-pad-y) var(--main-pad-x); }

/* --- Sayfa başlığı: sayfadaki TEK yüksek ses --- */
html[data-tema="yeni"] .page-header { margin-bottom: var(--d2); gap: var(--d2); align-items: center; }
html[data-tema="yeni"] .page-header h1,
html[data-tema="yeni"] main#main > .page-title {
  font-size: var(--fs-lg); font-weight: 700; letter-spacing: var(--ls-title);
  line-height: var(--lh-tight); color: var(--text); text-transform: none;
}
html[data-tema="yeni"] .page-header-subtitle { font-size: var(--fs-cap); color: var(--text-tertiary); margin-top: 1px; }
html[data-tema="yeni"] .page-actions { display: flex; align-items: center; gap: var(--d2); flex-wrap: wrap; }
/* Eylem şeridi: 7 buton. Tema flex-wrap:wrap veriyordu ama FC_STYLE'ın
   overflow-x:auto + justify-content:flex-end kararları KALIYORDU → yarım
   uygulama (sağa yaslı sarma). Üç bildirim de açıkça yazıldı.
   Birincil eylem ("Hazırlama Fişlerini Bas") kendi adasında durur: hemen
   yanındaki "TY Barkod" da sonuç doğuran bir eylem, ayrım şart. */
html[data-tema="yeni"] .fc-actbar {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: 10px; row-gap: var(--d2);
  justify-content: flex-start; overflow-x: visible;
}
html[data-tema="yeni"] .fc-actbar .op-btn-primary { margin-right: var(--d4); }
html[data-tema="yeni"] .section-title {
  font-size: var(--fs-micro); font-weight: 600; letter-spacing: var(--ls-cap);
  color: var(--text-tertiary); margin: var(--d3) 0 var(--d1);
}


/* ==========================================================================
 * 4) BUTONLAR + DOKUNMA HEDEFİ SÖZLEŞMESİ
 *    6 ayrı buton sistemi (.op-btn · .btn · .btn-icon · .qa-btn · .fc-act ·
 *    .op-msg-ch) TEK geometriye bağlandı.
 *
 *    SÖZLEŞME — hedef tabanı medya sorgusuna EMANET EDİLMEZ:
 *      · Serbest duran buton/çip/sekme: görsel 34px, dokunmatikte 40/44px.
 *      · Küçük KARE kontrol (kapat, yenile, temizle, satır içi eylem, onay
 *        kutusu): görsel 20-36px + ::after hit-expander ile 40-44px GERÇEK
 *        hedef. Genişleme komşu boşluğu kadar; ASLA komşu satıra taşmaz.
 *      · Kritik/yıkıcı eylem (birincil, DURDUR, tuş takımı): 44px.
 * ==========================================================================*/

/* main.css:144 HER butona translateY(-1px)+gölge veriyordu; dokunmatikte
   "yapışkan hover" yüzünden buton basıldıktan sonra havada kalıyordu. */
html[data-tema="yeni"] button:hover,
html[data-tema="yeni"] .btn:hover,
html[data-tema="yeni"] .card:hover,
html[data-tema="yeni"] .kpi:hover,
html[data-tema="yeni"] button:active,
html[data-tema="yeni"] .btn:active { transform: none; box-shadow: none; }

html[data-tema="yeni"] .op-btn,
html[data-tema="yeni"] .btn,
html[data-tema="yeni"] .op-msg-ch,
html[data-tema="yeni"] .csv-btn,
html[data-tema="yeni"] .ft-actbtn,
html[data-tema="yeni"] .cp-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: var(--ctl-h); min-height: var(--ctl-h); padding: 0 var(--ctl-pad-x);
  border: 1px solid var(--ctl-border); border-radius: var(--radius);
  background: var(--surface); color: var(--text);
  font-family: var(--font-sans); font-size: var(--fs-base); font-weight: 600;
  line-height: 1; white-space: nowrap; text-decoration: none;
  cursor: pointer; user-select: none; touch-action: manipulation;
  transition: background var(--transition), border-color var(--transition), color var(--transition);
}
/* DEVRE DIŞI: opacity:.45 metni 2,15:1'e düşürüyordu — ama bu butonların
   METNİ bizzat durum mesajı ("⏳ Baskı sürüyor…", "Kodu Gönder",
   "Hazırlama Fişlerini Bas"). Okunması gereken cümle okunmuyordu.
   "Basılamaz" bilgisi artık ZEMİN + ÇERÇEVE ile taşınır, metin ≈4,6:1 kalır. */
html[data-tema="yeni"] .op-btn:disabled,
html[data-tema="yeni"] .btn:disabled,
html[data-tema="yeni"] .op-btn[disabled] {
  opacity: 1; cursor: not-allowed;
  background: var(--surface-active); border-color: var(--border);
  color: #5b6472;
}

/* Ghost = varsayilan is butonu (57 butonun 41'i). Sessiz ama CERCEVELI:
   dokunmatikte cercevesiz metin "tiklanabilir" okunmuyor.
   B'nin kesik cercevesi REDDEDILDI: ayni dosyada kesik cizgi "hata/takili"
   anlami tasiyor (.kd-takili) — anlam cakismasi olurdu. */
html[data-tema="yeni"] .op-btn-ghost { background: var(--surface); color: var(--text-secondary); }
html[data-tema="yeni"] .btn-ghost { background: var(--surface); border-color: var(--border); color: var(--text-secondary); }
html[data-tema="yeni"] .btn-secondary { background: var(--surface); color: var(--text); border-color: var(--ctl-border); }

/* BORDO KULLANIMI 2: birincil eylem — sayfadaki tek dolu bordo alan */
html[data-tema="yeni"] .op-btn-primary,
html[data-tema="yeni"] .btn-primary {
  background: var(--primary); color: var(--text-inverse); border-color: var(--primary);
  font-weight: 700;
}
/* BASMA GERİ BİLDİRİMİ ANINDA OLMALI: geçiş 140ms'e yayılınca hızlı dokunuş
   (~60ms) gözden kaçıyor ve personel İKİNCİ KEZ basıyor → "Hazırlama Fişlerini
   Bas" iki tur kuyruğa girer (rulo kapasitesi sınırlı). Basmada süre 0,
   bırakışta yumuşak dönüş. Çökme hissi için inset gölge. */
html[data-tema="yeni"] .op-btn-primary:active:not(:disabled),
html[data-tema="yeni"] .btn-primary:active:not(:disabled) {
  background: var(--primary-press); border-color: var(--primary-press);
  box-shadow: inset 0 2px 0 rgba(0, 0, 0, .18); transition-duration: 0s;
}
html[data-tema="yeni"] .op-btn:active:not(:disabled),
html[data-tema="yeni"] .btn:active:not(:disabled) {
  background: var(--surface-active);
  box-shadow: inset 0 2px 0 rgba(16, 18, 24, .14); transition-duration: 0s;
}

html[data-tema="yeni"] .op-btn-sm,
html[data-tema="yeni"] .btn-sm { height: var(--ctl-h-sm); min-height: var(--ctl-h-sm); padding: 0 var(--d2); font-size: var(--fs-sm); }
/* .btn-lg / .btn-full: giriş+2FA sayfasında (lib/auth-pages.js) GERÇEK sınıflar.
   O sayfa data-tema taşımadığı için bugün eşleşmiyorlar; tema ileride giriş
   ekranını da kapsarsa hazır dursunlar diye BIRAKILDI (ölü değil, kapsam dışı). */
html[data-tema="yeni"] .btn-lg { height: 44px; min-height: 44px; font-size: var(--fs-base); }
html[data-tema="yeni"] .btn-full { width: 100%; }

/* 10.08 SİLME: .qa-btn ve .quick-actions kuralları KALDIRILDI — her ikisi de
   canlıda 0 kullanım (app-shell.css'te legacy kuralları var ama DOM'a hiç
   basılmıyorlar). Kaldırılan 4 !important, bütçenin en büyük kalemiydi. */

/* Yikici eylem: acil DURDUR bordo DEGIL kirmizi (bordo = marka/eylem,
   kirmizi = tehlike). Kritik hedef 44px + kare glif + kalin cerceve. */
html[data-tema="yeni"] .bk-halt-top {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: 44px; min-height: 44px; min-width: 44px;
  margin-left: var(--d3);                   /* komsu hedeften ayrik dursun */
  padding: 0 var(--d4);
  border: 2px solid var(--danger); border-radius: var(--radius);
  background: var(--danger-soft); color: var(--danger-ink);
  font-size: var(--fs-base); font-weight: 800; letter-spacing: .02em;
  cursor: pointer;
}
html[data-tema="yeni"] .bk-halt-top .sq { width: 10px; height: 10px; background: currentColor; border-radius: 2px; display: inline-block; }
html[data-tema="yeni"] .bk-halt-top:active { background: var(--danger); color: var(--text-inverse); }

/* --- Ikon butonlari: gorsel 36px + ::after ile 44px hedef ---
   Topbar bosluğu 8px oldugu icin -4px genisleme komsuyla TAM ortada bulusur,
   ust uste binmez (44px hedef, sifir cakisma). */
html[data-tema="yeni"] .btn-icon,
html[data-tema="yeni"] .ws-refresh,
html[data-tema="yeni"] #hamburger {
  position: relative;
  width: var(--icon-h); height: var(--icon-h); min-width: var(--icon-h); min-height: var(--icon-h);
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0; background: transparent; border: 1px solid transparent; border-radius: var(--radius);
  color: var(--text-secondary); cursor: pointer; touch-action: manipulation;
  transition: background var(--transition), color var(--transition);
}
html[data-tema="yeni"] .btn-icon::after,
html[data-tema="yeni"] .ws-refresh::after,
html[data-tema="yeni"] #hamburger::after { content: ''; position: absolute; inset: -4px; }
html[data-tema="yeni"] .btn-icon:active,
html[data-tema="yeni"] .ws-refresh:active,
html[data-tema="yeni"] #hamburger:active { background: var(--surface-active); color: var(--text); }
/* app-shell.css:495 hover'da 90 derece donduruyordu; dokunmatikte yapiskan
   hover yuzunden buton donuk KALIYORDU. Donus yalniz basma aninda, kosulsuz.
   10.08: gecis TABAN kurala tasindi — eskiden yalniz :active icinde tanimliydi,
   yani basinca yumusak donuyor BIRAKINCA ZIPLAYARAK geri geliyordu. */
html[data-tema="yeni"] .ws-refresh { border-color: var(--ctl-border); background: var(--surface); color: var(--text); font-size: var(--fs-md); margin-left: var(--d2); transition: background var(--transition), color var(--transition), transform var(--transition-slow); }
html[data-tema="yeni"] .ws-refresh:hover { transform: none; background: var(--surface-hover); color: var(--text); border-color: var(--ctl-border); }
html[data-tema="yeni"] .ws-refresh:active { transform: rotate(180deg); }

/* --- Kapat butonlari: gorsel 30px + ::after ile 44px ---
   10.08: .fc-ftbant-x BU AILEDEN CIKARILDI — canli DOM'da ikon degil
   14 HARFLIK METIN butonu: <button class="fc-ftbant-x">Filtreyi kaldır</button>
   (fulfillment-page.js:903). 30px daireye sikistirilinca fatura suzgecinin
   TEK CIKIS KAPISI okunamaz hale geliyordu. */
html[data-tema="yeni"] .op-drawer-close,
html[data-tema="yeni"] .dhl-x,
html[data-tema="yeni"] .cp-drawer-close {
  position: relative; margin-left: auto;
  width: 30px; height: 30px; min-width: 30px; flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--border); border-radius: var(--radius-full);
  background: var(--surface-hover); color: var(--text-secondary);
  font-size: var(--fs-md); line-height: 1; cursor: pointer; touch-action: manipulation;
}
html[data-tema="yeni"] .op-drawer-close::after,
html[data-tema="yeni"] .dhl-x::after,
html[data-tema="yeni"] .cp-drawer-close::after { content: ''; position: absolute; inset: -7px; }
html[data-tema="yeni"] .op-drawer-close:active,
html[data-tema="yeni"] .dhl-x:active { background: var(--danger); color: var(--text-inverse); border-color: var(--danger); }

/* Fatura suzgeci cikis kapisi: METIN butonu. FC_STYLE'in kahve zeminini ve
   dolgusunu korur, yalnizca hedefi 44px'e cikarir. */
html[data-tema="yeni"] .fc-ftbant-x {
  position: relative; margin-left: auto; flex-shrink: 0;
  width: auto; min-width: 44px; height: auto; min-height: 38px;
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0 var(--d3); border: 0; border-radius: var(--radius);
  background: var(--warning-ink); color: var(--text-inverse);
  font-family: var(--font-sans); font-size: var(--fs-sm); font-weight: 700;
  line-height: 1; cursor: pointer; touch-action: manipulation;
}
html[data-tema="yeni"] .fc-ftbant-x::after { content: ''; position: absolute; inset: -3px; }
html[data-tema="yeni"] .fc-ftbant-x:active { background: var(--warning); }

/* --- Satir ici mini eylem (.fc-act) ---
   YUKSEKLIK bilerek buyutulmez: ~36px'lik veri satirinda dikey genisleme
   komsu satirin tiklama alanini calar ve YANLIS SIPARISE barkod bastirir.
   Hedef YATAY eksende 44px'e acilir (44x26), dikeyde sifir tasma. */
html[data-tema="yeni"] .fc-act {
  position: relative;
  width: 26px; height: 26px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid var(--ctl-border); border-radius: var(--radius-sm);
  background: var(--surface); color: var(--text-secondary);
  font-size: var(--fs-base); line-height: 1; cursor: pointer; touch-action: manipulation;
}
/* HEDEF SAĞA AÇILIR, SOLA DEĞİL: butonun hemen solunda "✓ Fiş basıldı"
   rozeti duruyor; simetrik ±9px genişleme rozetin 5px üstüne biniyordu ve
   fare istasyonunda rozete nişan alan kullanıcı YENİDEN BASKI tetikliyordu
   (rulodan fiş yakar + depoda ikinci kopya). Sağ taraf boş alan. */
html[data-tema="yeni"] .fc-act::after { content: ''; position: absolute; top: -2px; bottom: -2px; left: -2px; right: -14px; }
html[data-tema="yeni"] .fc-act:active { background: var(--primary-soft); color: var(--primary); border-color: var(--primary-line); }
/* 10.08 SİLME: .fc-actions ÖLÜ — canlıda .fc-actbar (8) ve .fc-act (3) var,
   .fc-actions 0 kullanım. */

/* --- Musteriye mesaj butonu (.op-cust-msg) ---
   orders-page.css:225: opacity .6 + font 13px + padding 0 2px + line-height 1
   → GERCEK hedef ~17x13px, ustelik :hover ile belirginlesiyordu = dokunmatikte
   OLU NOKTA. Uc aday tema da bu seciciye hic dokunmamisti. */
/* 10.08 İKİ ÖLÇÜLEN ARIZA BURADA KAPANDI:
   (1) SATIR YÜKSEKLİĞİ: 24px'lik satır içi buton, 10px/1,2 = 12px'lik alt
       satırın SATIR KUTUSUNU 24px'e (coarse'ta 32px'e) çıkarıyordu — yani
       "yoğunluk" vaadini tema'nın kendi butonu yiyordu (ölçüm: taban 49,25 →
       tema 60,09px). Negatif dikey marj öğeyi satır kutusundan çıkarır;
       görsel boyut ve dokunma hedefi AYNEN kalır.
   (2) ÜST ÜSTE BİNEN HEDEF: telefon linki ile buton arası 2,75px iken
       ::after left:-10px 7,25px BİNDİRME yapıyordu; DOM'da buton sonra
       geldiği için hit-test'i O kazanıyordu → telefonun son pikselleri
       "ara" yerine "mesaj panelini aç" oluyordu. Genişleme artık TEK YÖNLÜ. */
html[data-tema="yeni"] .op-cust-msg {
  position: relative;
  width: 24px; height: 24px; padding: 0; opacity: 1;
  margin: -4px 0 -4px 6px;
  display: inline-flex; align-items: center; justify-content: center;
  vertical-align: middle;
  border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: var(--surface); color: var(--text-secondary);
  font-size: var(--fs-sm); line-height: 1; cursor: pointer; touch-action: manipulation;
}
html[data-tema="yeni"] .op-cust-msg::after { content: ''; position: absolute; top: -4px; bottom: -4px; left: 0; right: -20px; }
html[data-tema="yeni"] .op-cust-msg:active { background: var(--primary-soft); color: var(--primary); border-color: var(--primary-line); }

/* --- Cipler ---
   BORDO KULLANIMI 3: aktif filtre. Onay glifi PASIF cipte de yer kaplar
   (visibility:hidden) — aksi halde cip aktiflesince genisleyip seridi
   yeniden akitiyordu; dokunmatikte her dokunusta hedef yerinden oynardi. */
html[data-tema="yeni"] .op-chip,
html[data-tema="yeni"] .bk-chips > button {
  position: relative;
  height: var(--ctl-h); min-height: var(--ctl-h);
  display: inline-flex; align-items: center; gap: var(--d1); padding: 0 var(--d3);
  border: 1px solid var(--ctl-border); border-radius: var(--radius-full);
  background: var(--surface); color: var(--text-secondary);
  font-size: var(--fs-sm); font-weight: 600; cursor: pointer;
  user-select: none; touch-action: manipulation;
  transition: background var(--transition), color var(--transition), border-color var(--transition);
}
html[data-tema="yeni"] .op-chip::before { content: '✓'; font-size: var(--fs-micro); visibility: hidden; }
/* BORDO BÜTÇESİ: seçili filtre artık DOLU bordo değil — tint + bordo çerçeve +
   bordo metin + ✓ glifi + 700 ağırlık (dört kanal, bordo metin tint üstünde
   ≈9,5:1). Dolu bordo yalnız birincil eylem butonunda kaldı. */
html[data-tema="yeni"] .op-chip.active {
  background: var(--primary-soft-2); color: var(--primary); font-weight: 700;
  border-color: var(--primary);
}
html[data-tema="yeni"] .op-chip.active::before { visibility: visible; }
html[data-tema="yeni"] .op-chip:active { background: var(--surface-active); box-shadow: inset 0 2px 0 rgba(16, 18, 24, .14); transition-duration: 0s; }
html[data-tema="yeni"] .op-quick-chips { gap: 6px; margin-bottom: 6px; padding: 0; }


/* ==========================================================================
 * 5) FORMLAR — filtre cubugu · girdiler · odak · onay kutusu
 *    Filtre cubugu KARTTAN CIKARILDI (C'nin karari): kutu icinde kutu
 *    gurultusu sifir, dikey kazanc ~22px → dogrudan tabloya yazildi.
 * ==========================================================================*/
html[data-tema="yeni"] .op-filter-bar,
html[data-tema="yeni"] .filter-bar,
html[data-tema="yeni"] .filters,
html[data-tema="yeni"] .toolbar {
  display: flex; flex-wrap: wrap; align-items: center; gap: 6px;
  background: transparent; border: 0; border-bottom: 1px solid var(--line);
  border-radius: 0; padding: 0 0 var(--d2); margin-bottom: var(--d2);
}
html[data-tema="yeni"] .op-filter-bar input[type="text"],
html[data-tema="yeni"] .op-filter-bar #op-q { flex: 1 1 220px; min-width: 180px; }
html[data-tema="yeni"] .op-filter-bar select { min-width: 106px; cursor: pointer; }

html[data-tema="yeni"] .op-input,
html[data-tema="yeni"] .input,
html[data-tema="yeni"] .op-msg-input,
html[data-tema="yeni"] .op-filter-bar input,
html[data-tema="yeni"] .op-filter-bar select,
html[data-tema="yeni"] .filter-bar input,
html[data-tema="yeni"] .filter-bar select,
html[data-tema="yeni"] .filters input,
html[data-tema="yeni"] .filters select,
html[data-tema="yeni"] .fc-oto-ip,
html[data-tema="yeni"] .bk-lim input {
  height: var(--ctl-h); min-height: var(--ctl-h); padding: 0 10px;
  border: 1px solid var(--ctl-border);   /* WCAG 1.4.11: kontrol siniri >=3:1 */
  border-radius: var(--radius);
  background: var(--surface); color: var(--text);
  font-family: var(--font-sans); line-height: 1.2;
  transition: border-color var(--transition), box-shadow var(--transition);
}
html[data-tema="yeni"] textarea.op-input,
html[data-tema="yeni"] .op-msg-text {
  height: auto; min-height: 84px; padding: 8px 10px; line-height: var(--lh-text);
  border: 1px solid var(--ctl-border); border-radius: var(--radius);
  background: var(--surface); color: var(--text);
  font-family: var(--font-sans); resize: vertical;
}
/* NOT: girdi punto ezmesi @media (min-width:769px) icinde — mobile.css'in
   iOS yakinlastirma onlemi (16px) BILEREK korunuyor. Bkz. 12. bolum. */

/* Odak: outline:none YOK (design-system:107, orders-page:249/262 geri alinir).
   Halka global :focus-visible'dan gelir; burada YALNIZ kenarlik rengi eklenir.
   10.08 iki duzeltme:
     · :focus → :focus-visible (fare tiklamasinda halka cikmasin)
     · "yumusak parilti" (0 0 0 3px) SILINDI: 34px'lik alanin etrafinda
       kenarlik + parilti + beyaz + outline = DORT esmerkezli halka oluyordu;
       butonda tek halka var. Ayrica .dhl-otpbox.live'in "OTP CANLI, kod
       bekleniyor" gorunumu siradan odakla BIREBIR ayni hale geliyordu. */
html[data-tema="yeni"] .op-input:focus-visible,
html[data-tema="yeni"] .input:focus-visible,
html[data-tema="yeni"] .op-msg-text:focus-visible,
html[data-tema="yeni"] .op-msg-input:focus-visible,
html[data-tema="yeni"] .op-filter-bar input:focus-visible,
html[data-tema="yeni"] .op-filter-bar select:focus-visible,
html[data-tema="yeni"] .fc-oto-ip:focus-visible {
  border-color: var(--primary);
}
/* FC_STYLE (JS ici <style>, tema'dan SONRA) '.fc-page .fc-search #fc-q{
   outline:none}' = (1,2,0) yaziyor; global :focus-visible (0,2,1) KAYBEDIYOR
   → arama kutusunun odak halkasi fiilen OLU idi. Zincir uzatilarak (1,4,1)
   ozgullukle geri alindi — !important GEREKMEDI. */
html[data-tema="yeni"] .fc-page .fc-search #fc-q:focus-visible {
  outline: 3px solid var(--primary); outline-offset: -1px;
}
html[data-tema="yeni"] ::placeholder { color: var(--text-tertiary); opacity: 1; }
html[data-tema="yeni"] .op-input:disabled,
html[data-tema="yeni"] .input:disabled { background: var(--surface-active); color: var(--text-tertiary); }

/* Varsayilan disi filtre: bordo cerceve + SOL SERIT + kalin metin (3 kanal).
   Kullanici neden az kayit gordugunu renk gormeden de anlar. */
html[data-tema="yeni"] .op-filter-bar select.on,
html[data-tema="yeni"] .op-filter-bar .on {
  border-color: var(--primary-line); background-color: var(--primary-soft);
  color: var(--primary); font-weight: 700;
  box-shadow: inset var(--rail) 0 0 var(--primary);
}

/* Arama kutusu + temizle. NOT: select oku ve arama ikonu icin gomulu SVG
   KULLANILMADI — data:URI icindeki xmlns bir ag istegi olmasa da "dis
   bagimlilik" denetimini gurultuye boguyordu. Yerel select okunu tarayici
   cizer; dokunmatikte de dogru davranis budur. */
html[data-tema="yeni"] .fc-search { position: relative; display: inline-flex; align-items: center; flex: 1 1 220px; min-width: 180px; }
/* FC_STYLE '.fc-page .fc-search{height:34px}' (0,2,0) sabitken tema girdiyi
   --ctl-h'ye (38-40px) cikariyordu → girdi KABINDAN 4px TASIYORDU.
   Zincir uzatilarak (0,3,1) ile kap girdiyle esitlendi. */
html[data-tema="yeni"] .fc-page .fc-search { height: var(--ctl-h); }
html[data-tema="yeni"] .fc-search input { flex: 1; min-width: 0; padding-right: 34px; }
html[data-tema="yeni"] .fc-search-x {
  position: absolute; right: 4px;
  width: 26px; height: 26px;
  display: inline-flex; align-items: center; justify-content: center;
  border: none; background: transparent; color: var(--text-secondary);
  border-radius: var(--radius-full); cursor: pointer; font-size: var(--fs-base);
}
html[data-tema="yeni"] .fc-search-x::after { content: ''; position: absolute; inset: -9px; }  /* 44px hedef */
html[data-tema="yeni"] .fc-search-x:active { background: var(--surface-active); color: var(--text); }

/* --- Onay kutusu: toplu fatura/barkod secimi = en kritik secim ---
   Gorsel kutu 20px, GERCEK hedef 44x28px. Genisleme hucre icinde kalir;
   satir ~36px oldugu icin komsu satira TASMAZ. (B'nin "td padding:0 +
   min-width:44px" cozumu reddedildi: genisleyen olu alan .op-row'un
   openDetail'ini tetikleyip yanlis cekmeceyi aciyordu.) */
/* 10.08: input[type=radio] gruptan CIKARILDI — canlida 0 radio input var
   (12 checkbox var, o yuzden checkbox kolu kaldi). */
html[data-tema="yeni"] input[type=checkbox] { accent-color: var(--primary); cursor: pointer; touch-action: manipulation; }
html[data-tema="yeni"] .op-table th input[type=checkbox],
html[data-tema="yeni"] .op-table td input[type=checkbox] {
  position: relative; width: 20px; height: 20px; vertical-align: middle; margin: 0;
}
html[data-tema="yeni"] .op-table th input[type=checkbox]::after,
html[data-tema="yeni"] .op-table td input[type=checkbox]::after {
  content: ''; position: absolute; top: -4px; bottom: -4px; left: -12px; right: -12px;
}

html[data-tema="yeni"] .field { margin-bottom: var(--d4); }
html[data-tema="yeni"] .field label,
html[data-tema="yeni"] .dhl-lbl {
  display: block; font-size: var(--fs-micro); font-weight: 600;
  text-transform: uppercase; letter-spacing: var(--ls-cap);
  color: var(--text-tertiary); margin-bottom: var(--d1);
}
/* .field-help / .eye-btn: giriş+2FA sayfasının GERÇEK sınıfları
   (lib/auth-pages.js). Bugün eşleşmiyorlar (o sayfa data-tema taşımıyor),
   kapsam genişlerse hazır dursunlar diye bırakıldı. */
html[data-tema="yeni"] .field-help { font-size: var(--fs-cap); color: var(--text-tertiary); margin-top: var(--d1); }
html[data-tema="yeni"] .eye-btn { width: 40px; height: 40px; touch-action: manipulation; }
html[data-tema="yeni"] .eye-btn:active { background: var(--surface-active); }


/* ==========================================================================
 * 6) TABLOLAR — asil yogunluk kazanci buradan gelir
 *
 * SATIR HESABI (Siparisler tablosu; satiri 2 satirli .op-cust hucresi belirler)
 *   bugun : ad 13x1,5=19,5 + alt 11,5x1,5=17,25 + 2 marj + 10 dolgu + 1 cizgi
 *           = 49,75px  → 1366x768'de ~9 satir gorunur
 *   tema  : ad 13x1,2=15,6 + alt 10x1,2=12 + 0 marj + 8 dolgu + 1 cizgi
 *           = 36,6px   → ayni ekranda ~13-14 satir  (+%48)
 *   tek satirli tabloda: 31,75px → 25,9px
 *
 * SATIR AYIRICISI KALIYOR. A "cizgiyi kaldir + %1 zebra" diyordu; 12 kolonlu,
 * ~1300px genislikteki bir satirda goz komsu satira kayiyordu (yanlis satir =
 * yanlis siparise fatura/barkod = para). Cozum: ince ama gorunur 1px cizgi
 * (--line) + gorunur zebra (--zebra ~%3). Maliyeti ~1px/satir, kabul edildi.
 * ==========================================================================*/
html[data-tema="yeni"] .op-table-wrap,
html[data-tema="yeni"] .dense-scroll {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius-lg); overscroll-behavior: contain;
  margin-bottom: var(--d2);
  scrollbar-width: thin;
}
/* Kapak: bugunku 245px rezervden, filtre cubugunun karttan cikarilmasiyla
   kazanilan 22px + cip marjindan kazanilan 8px dusuldu. Kazanilan bosluk
   dogrudan satira cevrildi; pagination ekranda kalmaya devam eder.
   NOT: .table-wrap (main.css:101, kapsam disi rapor sayfalari) BILEREK
   disarida birakildi — ona max-height vermek o sayfalarin akisini degistirir. */
/* 🔴 10.08 ÖLÜMCÜL DÜZELTME — TABLO KUTUSUNDAN TAŞIYORDU
   FC_STYLE (fulfillment-page.js:382) '.fc-page .op-table-wrap{max-height:none;
   min-height:0;overflow:visible}' = (0,2,0) yazıyor. Tema'nın (0,2,1) kuralı
   max-height'ı GERİ KOYUYOR ama overflow'a DOKUNMUYORDU → kutu 100vh−217px'te
   kesiliyor, satırlar kutudan taşıp sayfalamanın üstüne biniyor, çerçeve
   satırların ortasından geçiyordu. Siparişler sekmesi AÇILIR AÇILMAZ bozuktu.

   KARAR (iki heyet çelişti): kaydırıcı = .op-table-wrap.
   Gerekçe — tabanın kendi tasarımı bu (orders-page.css:35 zaten overflow:auto
   + max-height veriyor), tema'nın --tbl-reserve mimarisi buna dayanıyor ve
   SAYFALAMA + "N / M sipariş" özeti EKRANDA KALIYOR. Sayfa düzeyi kaydırmada
   bu iki bilgi uzun listede ekran dışına düşüyordu = bilgi yoğunluğu kaybı.
   overflow:auto ayrıca mobile.css:362'nin şikâyet ettiği sayfa düzeyi YATAY
   taşmayı da kapatır. Zincir uzatıldı, !important gerekmedi. */
html[data-tema="yeni"] .op-table-wrap {
  max-height: calc(100vh - var(--tbl-reserve)); min-height: 180px; overflow: auto;
  /* Klavyeyle alt satıra geçince yapışkan başlık odak halkasını örtüyordu */
  scroll-padding-top: 40px; scroll-padding-bottom: 8px;
}
html[data-tema="yeni"] .fc-page .op-table-wrap {
  max-height: calc(100vh - var(--tbl-reserve)); min-height: 180px; overflow: auto;
}

html[data-tema="yeni"] .op-table,
html[data-tema="yeni"] .table,
html[data-tema="yeni"] .dhl-tbl {
  width: 100%; border-collapse: collapse;
  font-size: var(--fs-base); color: var(--text);
}

html[data-tema="yeni"] .op-table th,
html[data-tema="yeni"] .table th,
html[data-tema="yeni"] .dhl-tbl th {
  padding: var(--d1) var(--row-pad-x); text-align: left; white-space: nowrap;
  font-size: var(--fs-micro); font-weight: 600;
  text-transform: uppercase; letter-spacing: var(--ls-cap);
  color: var(--text-secondary); background: var(--thead-bg);
  border-bottom: none; vertical-align: middle;
  -webkit-user-select: none; user-select: none;
}
/* YAPISKAN BASLIK AYIRICISI ASLA COKERTILMIS KENARLIKLA YAPILMAZ:
   border-collapse + position:sticky birlesince Chromium cokertilmis borderi
   basligla birlikte TASIMAZ ve kaydirirken 12 kolonluk baslik ayiricisiz
   kalir. .op-table'da is thead'in box-shadow'u ile, .table/.dhl-tbl'de
   (yapiskanlik th uzerinde) inset box-shadow ile yapilir — cift cizgi olmaz. */
html[data-tema="yeni"] .table th,
html[data-tema="yeni"] .dhl-tbl th { box-shadow: inset 0 -1px 0 var(--border-strong); }
html[data-tema="yeni"] .op-table thead {
  position: sticky; top: 0; z-index: 5;
  background: var(--thead-bg);
  box-shadow: 0 1px 0 var(--border-strong);
}
html[data-tema="yeni"] .dense-scroll .table th,
html[data-tema="yeni"] .table-wrap .table th,
html[data-tema="yeni"] .dhl-tblwrap .dhl-tbl th { position: sticky; top: 0; z-index: 3; }
/* 🔴 10.08: burada 'top: var(--shell-top-h)' YAZIYORDU ve yukarıdaki overflow
   kararıyla BİRLİKTE tabloyu tamamen bozuyordu — kaydırıcı artık
   .op-table-wrap olduğu için başlık KENDİ kutusunun 52px altına yapışıyor,
   üstte 52px boşluk kalıyor ve ilk satırlar başlığın arkasında kayboluyordu.
   Kaydırıcı kutunun kendisi olduğuna göre doğru değer 0'dır (FC_STYLE:383'ün
   kendi yorumu da bunu söylüyor). */
html[data-tema="yeni"] .fc-page .op-table thead { top: 0; }

html[data-tema="yeni"] .op-table td,
html[data-tema="yeni"] .table td,
html[data-tema="yeni"] .dhl-tbl td {
  padding: var(--row-pad-y) var(--row-pad-x);
  border-bottom: 1px solid var(--line);   /* satir takibi: GORUNUR kalir */
  line-height: var(--lh-data); vertical-align: middle;
}
html[data-tema="yeni"] .op-table th:first-child,
html[data-tema="yeni"] .op-table td:first-child,
html[data-tema="yeni"] .table th:first-child,
html[data-tema="yeni"] .table td:first-child { padding-left: var(--d3); }
html[data-tema="yeni"] .op-table th:last-child,
html[data-tema="yeni"] .op-table td:last-child { padding-right: var(--d3); }
html[data-tema="yeni"] .op-table tbody tr:last-child td { border-bottom: 0; }

/* Zebra: parlaklik farki renk korlugunden bagimsiz calisir */
html[data-tema="yeni"] .op-table tbody tr:nth-child(even) td,
html[data-tema="yeni"] .table tbody tr:nth-child(even) td,
html[data-tema="yeni"] .dhl-tbl tbody tr:nth-child(even) td { background: var(--zebra); }

/* Satir: geri bildirim hover'a degil BASMAYA bagli.
   Serit yalniz ilk ve SON hucreye — B'de her td'ye ciziliyordu (12 dikey
   cubuk), tek serit ise 1300px'lik satirin SAG UCUNDA gorunmuyordu.
   10.08 OLCUM: basma/secili --primary-soft ile cift satirda 1,075:1 idi =
   yok hukmunde. Dokunmatikte basma TEK geri bildirim → --primary-soft-2
   (zebraya karsi ~1,255:1). Gecis suresi basmada 0. */
html[data-tema="yeni"] .op-table .op-row { cursor: pointer; -webkit-user-select: none; user-select: none; touch-action: manipulation; transition: background var(--transition); }
html[data-tema="yeni"] .op-table .op-row:active td { background: var(--primary-soft-2); transition-duration: 0s; }
html[data-tema="yeni"] .op-table .op-row:active td:first-child { box-shadow: inset var(--rail) 0 0 var(--primary); }
html[data-tema="yeni"] .op-table .op-row:active td:last-child { box-shadow: inset calc(var(--rail) * -1) 0 0 var(--primary); }
/* Veri kopyalanabilir kalsin. .op-id TEK DOKUNUSTA TAMAMI: 216. satirdaki
   user-select:all (0,2,1) burasi 'text' yazdigi icin (0,4,2) ile ezilip OLU
   kalmisti — siparis numarasi DHL Sube ekranina ELLE yaziliyordu (yanlis
   siparise barkod riski). .op-kargo 'text' kalir (icinde link + koli sayisi
   var, tumunu secmek zararli). Musteri adi/sehri de kopyalanabilir kaldi. */
html[data-tema="yeni"] .op-table .op-row td.op-id { -webkit-user-select: all; user-select: all; }
html[data-tema="yeni"] .op-table .op-row td.op-kargo,
html[data-tema="yeni"] .op-table .op-row .op-cust-name,
html[data-tema="yeni"] .op-table .op-row .op-cust-sub { -webkit-user-select: text; user-select: text; }

/* BORDO KULLANIMI 4: secili satir — renk + IKI YANDA SERIT */
@supports selector(:has(*)) {
  html[data-tema="yeni"] .op-table tbody tr:has(input[type=checkbox]:checked) td { background: var(--primary-soft-2); }
  html[data-tema="yeni"] .op-table tbody tr:has(input[type=checkbox]:checked) td:first-child { box-shadow: inset var(--rail) 0 0 var(--primary); }
  html[data-tema="yeni"] .op-table tbody tr:has(input[type=checkbox]:checked) td:last-child { box-shadow: inset calc(var(--rail) * -1) 0 0 var(--primary); }
}

/* Siralanabilir baslik — design-system.css:197 sagdan 22px !important
   dayatiyor; tek satirla geri alinir. Aktif yon BORDO DEGIL koyu + dolu ok.
   10.08 SILME: th[data-sort] ÖLÜ — hicbir markup'ta data-sort yok, sortable.js
   yalnizca OKUYOR ("opsiyonel"). th.sortable GERCEK (classList.add ile gelir).
   opacity .35 → .6: bilesik 1,72:1 ile "bu kolon siralanabilir" ipucu
   siralanana kadar gorunmuyordu. */
html[data-tema="yeni"] th.sortable {
  padding-right: 20px !important;   /* !important: design-system.css:197'yi yener */
  cursor: pointer;
}
html[data-tema="yeni"] th.sortable::after { right: 6px; opacity: .6; font-size: var(--fs-micro); }
html[data-tema="yeni"] th.sort-asc::after { content: '▲'; opacity: 1; color: var(--text); }
html[data-tema="yeni"] th.sort-desc::after { content: '▼'; opacity: 1; color: var(--text); }
html[data-tema="yeni"] th.sort-asc,
html[data-tema="yeni"] th.sort-desc { color: var(--text); background: var(--surface-active); }
html[data-tema="yeni"] th.sortable:active { background: var(--surface-active); }

/* Sayisal kolonlar saga hizali.
   10.08: Kâr hucresi canlida CLASS'SIZ basiliyor ('<td>' + profitCell(...)),
   yani td.op-profit hicbir zaman eslesmiyordu → Kâr SOLA DAYALI kaliyordu ve
   iki para kolonu farkli hizadaydi ("hangi siparis zararda" goz taramasiyla
   cevaplanamiyordu). Kâr HER ZAMAN td.op-total'in hemen ardindan gelir;
   personel gorunumunde oraya td.op-date duser, o yuzden :not() ile ayrilir. */
html[data-tema="yeni"] .op-table td.op-total,
html[data-tema="yeni"] .op-table td.op-total + td:not(.op-date),
html[data-tema="yeni"] .op-table td.op-profit,
html[data-tema="yeni"] .op-total,
html[data-tema="yeni"] .op-profit-cell { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
/* Basliklar da ayni hizaya: Tutar iki gorunumde de 7. th. */
html[data-tema="yeni"] .op-table th:nth-child(7) { text-align: right; }
html[data-tema="yeni"] .op-total { font-size: var(--fs-base); font-weight: 700; color: var(--text); }
html[data-tema="yeni"] .op-table td.op-profit { font-size: var(--fs-sm); color: var(--text-secondary); }

/* 12 KOLONDA OKUMA BLOKLARI: kimlik/musteri · para · durum.
   Goz "Fatura" kolonunu her seferinde SAYARAK buluyordu (yanlis kolondan
   okumak = yanlis siparise islem). Iki ayirici, iki gorunumde de dogru yere
   duser: Tutar = 7. hucre, Kargo = .op-kargo sinifli. */
html[data-tema="yeni"] .op-table th:nth-child(7),
html[data-tema="yeni"] .op-table td.op-total,
html[data-tema="yeni"] .op-table th.op-kargo,
html[data-tema="yeni"] .op-table td.op-kargo { border-left: 1px solid var(--border); }

/* Kolon rolleri — TON ile hiyerarsi.
   .op-id'den BORDO KALDIRILDI: 30 satirlik tabloda 30 bordo = vurgu olur. */
html[data-tema="yeni"] .op-id { font-family: var(--font-mono); font-size: var(--fs-sm); font-weight: 700; color: var(--text); letter-spacing: -.01em; }
html[data-tema="yeni"] .op-date { font-size: var(--fs-sm); color: var(--text-secondary); }
/* 130 → 140px: tema tabanın 140px'inden DAHA ERKEN kırpıyordu (.op-items
   220 → 240 zaten iyileşmeydi, o kaldı). */
html[data-tema="yeni"] .op-city { font-size: var(--fs-sm); color: var(--text-secondary); max-width: 140px; overflow: hidden; text-overflow: ellipsis; }
html[data-tema="yeni"] .op-items { font-size: var(--fs-sm); color: var(--text-secondary); max-width: 240px; overflow: hidden; text-overflow: ellipsis; }
html[data-tema="yeni"] .op-cust { max-width: 230px; }
/* SATIR YUKSEKLIGINI BELIRLEYEN IKI SATIR — dosyanin en pahali 4 bildirimi */
html[data-tema="yeni"] .op-cust-name { font-size: var(--fs-base); font-weight: 600; line-height: var(--lh-tight); color: var(--text); }
html[data-tema="yeni"] .op-cust-sub { font-size: var(--fs-micro); line-height: var(--lh-tight); color: var(--text-tertiary); margin-top: 0; }
/* --fs-mono (11px): --fs-cap 12px'e birleşti ama BU hücre tablo gövdesinde,
   1px bile satır yüksekliğine yazılır. Dar mono kademesi burada korunur. */
html[data-tema="yeni"] .op-kg-no { font-family: var(--font-mono); font-size: var(--fs-mono); color: var(--text-secondary); }
/* Kargo hücresi 3 SATIR yüksekliğindeydi ve asıl satır yüksekliğini o
   belirliyordu: .op-kg (inline-flex) → .op-kg-no (BLOCK div, satır kırar) →
   .op-kd (div). En çok bakılan kolon, vaat edilen yoğunluk burada hiç
   gerçekleşmiyordu. Üçü tek satır akışına girer, sığmazsa doğal sarar. */
html[data-tema="yeni"] .op-table td.op-kargo .op-kg-no { display: inline-block; vertical-align: middle; margin: 0 var(--d1); line-height: var(--lh-tight); }
html[data-tema="yeni"] .op-table td.op-kargo .op-kd { display: inline-flex; vertical-align: middle; }
html[data-tema="yeni"] .op-kg-koli { font-weight: 700; }
html[data-tema="yeni"] .op-kg-yok { color: var(--text-tertiary); }
html[data-tema="yeni"] .op-kg-yok::before { content: '– '; }

html[data-tema="yeni"] .op-pagination { padding: var(--d2) 0; gap: var(--d3); font-size: var(--fs-cap); color: var(--text-tertiary); }

/* 10.08 SİLME: table.tbl / .list-tbl / .cargo-tbl / .orders-tbl / .stock-tbl /
   .customers-tbl ailesinin TAMAMI ÖLÜ. Canlı tablo sınıfları hep önekli
   (mh-tbl · dhl-tbl · krg-tbl · fp-tbl · ksk-tk-tbl · ima-parts-tbl ·
   ft-sumtbl); çıplak tbl/list-tbl 0 kullanım. Bu blok DOM'dan değil eski
   app-shell.css'ten kopyalanmıştı. */


/* ==========================================================================
 * 7) KARTLAR / KPI / BOLUMLER
 *    KPI seridi 2 satirdan 1 satira indi: 1366px'te 9 KPI tek sira
 *    (minmax 150px → 112px) → tabloya ~80px daha yer acildi.
 *    C'nin "tek kutu + 1px hairline" seridi BILEREK ALINMADI: .hero-card
 *    ikizinde app-shell.css:228 "border: 1px solid !important" var, kaldirmak
 *    yeni bir !important gerektirirdi; ustelik app-shell.css:351 mobilde
 *    "gap: 8px !important" ile hairline duzenini zaten bozuyor.
 * ==========================================================================*/
/* 10.08 SİLME: .hero-card / .hero-cards / .hero-icon / .hero-value ailesinin
   TAMAMI ÖLÜ (29 canlı js + index.html'de 0 kullanım). Overview sayfası
   .kpi / .kpi-grid / .kpi-label / .kpi-value kullanıyor. Bu blok DOM'dan
   değil app-shell.css'ten kopyalanmıştı → 3 !important birlikte kalktı. */
html[data-tema="yeni"] .kpi-grid {
  grid-template-columns: repeat(auto-fit, minmax(112px, 1fr));
  gap: 6px; margin-bottom: var(--d2);
}
/* Kardeş kaplar aynı yarıçapta: yanındaki .op-table-wrap / .card / .panel /
   .fc-tabs'ın hepsi 8px iken tek başına 6px kalıyordu. */
html[data-tema="yeni"] .kpi {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius-lg); box-shadow: none;
  padding: var(--kpi-pad);
}
/* 10px TABAN: A'nin 9px + 3,46:1 birlesimi depo aydinlatmasinda okunmuyordu */
html[data-tema="yeni"] .kpi-label {
  font-size: var(--fs-micro); font-weight: 600; letter-spacing: var(--ls-cap);
  color: var(--text-tertiary); margin-bottom: 2px; text-transform: uppercase;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
html[data-tema="yeni"] .kpi-value {
  font-size: var(--fs-num); font-weight: 700;
  letter-spacing: var(--ls-title); line-height: 1.1; color: var(--text);
}
html[data-tema="yeni"] .kpi-trend { font-size: var(--fs-micro); margin-top: 1px; }
html[data-tema="yeni"] .kpi-trend.up { color: var(--success-ink); }
html[data-tema="yeni"] .kpi-trend.down { color: var(--danger-ink); }
/* 🔴 10.08 ÖLÜMCÜL SİLME: '.kpi-trend.up/.down::before {content:"▲ "/"▼ "}'
   KALDIRILDI. overview-page.js:29-30 zaten
   const arrow = up ? '▲' : '▼'  → '<div class="kpi-trend up">▲ %12,4 …'
   basıyordu; ekranda "▲ ▲ %12,4" / "▼ ▼ %8,1" çıkıyordu. Ok glifi metnin
   KENDİSİNDE olduğu için ikinci kanal zaten var — 8px punto sorunu da
   (dosyanın "10px altı YOK" tabanını kıran tek yer) böylece kapandı.
   .flat durumu tabanda hiç yoktu, eklendi (JS 'kpi-trend flat' üretiyor). */
html[data-tema="yeni"] .kpi-trend.flat { color: var(--text-tertiary); }

html[data-tema="yeni"] .card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius-lg); padding: var(--d3); box-shadow: none;
}
/* 10.08 SİLME: .panel-card / .card.panel-card ÖLÜ (0 kullanım; app-shell.css'te
   4 legacy kuralı var ama DOM'a hiç basılmıyor) → 2 !important kalktı.
   .card-title de ölü; .card-subtitle finance-page.js:382'de GERÇEK
   (finance-page.js index.html'de YÜKLENİYOR — doğrulandı, tutuldu). */
html[data-tema="yeni"] .card-subtitle { font-size: var(--fs-cap); color: var(--text-secondary); }

html[data-tema="yeni"] .panel { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg); }
html[data-tema="yeni"] .panel-header { padding: 6px var(--d3); border-bottom: 1px solid var(--line); }
html[data-tema="yeni"] .panel-title { font-size: var(--fs-md); font-weight: 600; letter-spacing: var(--ls-title); }
html[data-tema="yeni"] .panel-body { padding: 10px var(--d3); }
html[data-tema="yeni"] .info-strip { border-radius: var(--radius-lg); font-size: var(--fs-sm); }

/* Bolum basligi: kutu yerine etiket + ince kural cizgisi (cerceve gurultusu yok) */
html[data-tema="yeni"] .op-section { margin-bottom: 2px; }
html[data-tema="yeni"] .op-section h3,
html[data-tema="yeni"] .dhl-col h3 {
  display: flex; align-items: center; gap: var(--d2);
  margin: 0 0 var(--d1); font-size: var(--fs-micro); font-weight: 600;
  text-transform: uppercase; letter-spacing: var(--ls-cap); color: var(--text-tertiary);
}
html[data-tema="yeni"] .op-section h3::after,
html[data-tema="yeni"] .dhl-col h3::after { content: ''; flex: 1; height: 1px; background: var(--line); }

/* Detay cekmecesindeki 5 ayri kopya kart tek kurala baglandi */
html[data-tema="yeni"] .op-customer-card,
html[data-tema="yeni"] .op-payment-card,
html[data-tema="yeni"] .op-tracking-card,
html[data-tema="yeni"] .op-tracking-empty,
html[data-tema="yeni"] .op-profit-card,
html[data-tema="yeni"] .op-item-row,
html[data-tema="yeni"] .bk-facts,
html[data-tema="yeni"] .dhl-acct {
  background: var(--surface-sunken); border: 1px solid var(--line);
  border-radius: var(--radius); padding: 8px 10px;
}
html[data-tema="yeni"] .op-customer-name { font-size: var(--fs-base); font-weight: 700; margin-bottom: 2px; }
html[data-tema="yeni"] .op-customer-meta,
html[data-tema="yeni"] .op-customer-addr { font-size: var(--fs-sm); color: var(--text-secondary); line-height: 1.4; margin-bottom: 2px; }
html[data-tema="yeni"] .op-items-list { gap: var(--d1); margin-bottom: var(--d2); }
html[data-tema="yeni"] .op-item-name { font-size: var(--fs-sm); font-weight: 600; line-height: var(--lh-data); }
html[data-tema="yeni"] .op-item-meta { font-size: var(--fs-micro); color: var(--text-tertiary); }
html[data-tema="yeni"] .op-item-meta code,
html[data-tema="yeni"] .op-kv-r code { font-family: var(--font-mono); font-size: var(--fs-mono); background: var(--surface-active); padding: 1px 4px; border-radius: var(--radius-xs); }
html[data-tema="yeni"] .op-item-total { font-size: var(--fs-sm); font-weight: 700; }
html[data-tema="yeni"] .op-item-img { width: 32px; height: 32px; border-radius: var(--radius-sm); }

html[data-tema="yeni"] .op-totals { padding-top: var(--d2); border-top: 1px solid var(--line); }
html[data-tema="yeni"] .op-total-row,
html[data-tema="yeni"] .op-profit-row {
  display: flex; justify-content: space-between; gap: var(--d3);
  padding: var(--d1) 0; font-size: var(--fs-sm); color: var(--text-secondary);
}
/* BORDO KULLANIMI 5: sonucun kendisi. Cekmecede yalniz bu satir bordo. */
html[data-tema="yeni"] .op-total-row.op-total-grand,
html[data-tema="yeni"] .op-profit-row.op-profit-net {
  font-size: var(--fs-md); font-weight: 700; color: var(--primary);
  padding-top: 6px; margin-top: var(--d1); border-top: 1px solid var(--border);
}

/* 17 satirlik anahtar/deger listesi: iki kolon hizali, ayirici en ince ton */
html[data-tema="yeni"] .op-kv { display: flex; flex-direction: column; }
html[data-tema="yeni"] .op-kv-r {
  display: grid; grid-template-columns: minmax(96px, 34%) 1fr;
  gap: 0 var(--d2); align-items: baseline;
  padding: var(--d1) 0; border-bottom: 1px solid var(--line);
  font-size: var(--fs-sm);
}
html[data-tema="yeni"] .op-kv-r:last-child { border-bottom: none; }
html[data-tema="yeni"] .op-kv-r > span {
  font-size: var(--fs-micro); font-weight: 600; text-transform: uppercase;
  letter-spacing: var(--ls-cap); color: var(--text-tertiary);
}
html[data-tema="yeni"] .op-kv-r > b { font-weight: 600; word-break: break-word; }
html[data-tema="yeni"] .op-kv-not { grid-column: 2; display: block; font-size: var(--fs-micro); color: var(--text-tertiary); }

html[data-tema="yeni"] .activity-item { padding: 6px 0; border-bottom: 1px solid var(--line); }
html[data-tema="yeni"] .activity-title { font-size: var(--fs-base); }
html[data-tema="yeni"] .activity-time { font-size: var(--fs-cap); color: var(--text-tertiary); }


/* ==========================================================================
 * 8) DURUM GOSTERGELERI — RENK + IKINCI KANAL
 *
 * SOZLESME
 *   a) Metni OLAN gosterge: metin = harf kanali, ::before glifi = sekil
 *      kanali, zemin/cerceve = renk kanali.
 *   b) Metni OLMAYAN nokta (.fc-oto-dot / .fc-bal-dot / .dot): glif NOKTANIN
 *      ICINE basilir ve sekli (daire/kare) duruma gore degisir. A ve C'nin
 *      ikisi de burayi salt renk birakmisti; #157f3c ile #9a5608 arasindaki
 *      parlaklik orani 1,11:1 → deuteranopide "ACIK / TEYIT / DURAK" ayrimi
 *      tamamen kayboluyordu. Oto baski anahtari icin bu bir guvenlik meselesi.
 *   c) Renk TEK BASINA hicbir yerde tek ayirt edici degildir.
 *
 * GLIF SOZLUGU (hepsi Inter kapsaminda: ✓ ✕ ! → ● ■ ◆ ▲ ▼ –)
 *   ✓ tamam · ✕ hata/iptal · ! uyari/eksik · → yolda/bekliyor · ● devrede
 *   ■ durduruldu · ◆ hazirlaniyor · – atlandi/yok
 *
 * NOT: C'nin "filter: saturate(.72)" karari REDDEDILDI — .op-status /
 * .op-store / .fc-pbadge renkleri JS'ten INLINE geliyor. (10.08 duzeltmesi:
 * gerekce "tek ayirt edici kanallari RENK" YANLISTI — ucu de metin etiketi
 * basiyor, 1.4.1 zaten saglaniyordu; asil sorun KONTRAST.) Karar ayni kaliyor.
 * C'nin "text-transform: uppercase" karari da REDDEDILDI: lang="tr" altinda
 * "Iptal → IPTAL", "Islemde → ISLEMDE" noktali/noktasiz i'yi bozar.
 *
 * 🔴 10.08 GLIF CAKISMA TARAMASI — 52 kural canliya karsi tek tek okundu.
 * KURAL: content: ekleyen her ::before/::after, hedef metnin CANLIDA NE
 * BASTIGI dogrulanmadan yazilamaz. Metin zaten glif/emoji ile basliyorsa
 * tema'nin glifi CIFT IKON uretir. Bu taramada 20 kural silindi.
 * ==========================================================================*/

/* --- Ortak rozet iskeleti: hap degil kare kose, daha yogun okunur ---
   line-height 1.6 → 1.35: 10px yaziya 16px satir kutusu veriyordu ve satir
   basina 5-6 cipi (Kanal · Tasiyici · Kargo durumu · Fatura · Durum · baski)
   sisiriyordu — yogunluk temasindaki EN PAHALI tek bildirimdi.
   gap 3px → 4px (2px yarim adim izgarasi). */
html[data-tema="yeni"] .badge,
html[data-tema="yeni"] .op-status,
html[data-tema="yeni"] .op-store,
html[data-tema="yeni"] .op-ft,
html[data-tema="yeni"] .op-kd,
html[data-tema="yeni"] .op-kg,
html[data-tema="yeni"] .fc-pbadge {
  display: inline-flex; align-items: center; gap: var(--d1);
  padding: 1px 6px; border-radius: var(--radius-sm);
  font-size: var(--fs-micro); font-weight: 700;
  letter-spacing: .03em; line-height: 1.35; white-space: nowrap;
}
/* .op-status 10px'e kucultulmustu; renkleri INLINE geldigi icin kontrasti
   zaten sinirda ("Kesildi/Magazada teslim" 3,00:1 · "Iptal" 3,95:1) —
   kontrasti kalmayan bir rozeti ayrica kucultmek en kotu birlesim.
   11-12px'e iade edildi. Renk borcu CSS ile kapanmaz: .op-status'ta durum
   SINIFI yok, cozum 1 satirlik JS (durum sinifi) → Fatih karari. */
html[data-tema="yeni"] .op-status { font-size: var(--fs-cap); }
/* Inline renkli rozetlere "kutu" ipucu: cerceve rengin KENDISINDEN turer,
   JS'in inline style'i ile kavga etmez.
   1.5px → 1px: bu rozetler .op-kd/.op-ft/.op-kg ile AYNI SATIRDA yan yana
   duruyor, biri kalin biri ince cerceveliydi. Ayrica DPR 1 olan depo
   panelinde 1.5px 1 veya 2px'e ONGORULEMEZ yuvarlaniyordu.
   %38 → %55: 1px'e inince halka gorunurlugu telafi edildi. */
@supports (color: color-mix(in srgb, red 50%, transparent)) {
  html[data-tema="yeni"] .op-status,
  html[data-tema="yeni"] .op-store,
  html[data-tema="yeni"] .fc-pbadge {
    box-shadow: inset 0 0 0 1px color-mix(in srgb, currentColor 55%, transparent);
  }
}

html[data-tema="yeni"] .badge-success { background: var(--success-soft); color: var(--success-ink); box-shadow: inset 0 0 0 1px var(--success-line); }
html[data-tema="yeni"] .badge-danger  { background: var(--danger-soft);  color: var(--danger-ink);  box-shadow: inset 0 0 0 1px var(--danger-line); }
html[data-tema="yeni"] .badge-warning { background: var(--warning-soft); color: var(--warning-ink); box-shadow: inset 0 0 0 1px var(--warning-line); }
html[data-tema="yeni"] .badge-info    { background: var(--info-soft);    color: var(--info-ink);    box-shadow: inset 0 0 0 1px var(--info-line); }
html[data-tema="yeni"] .badge-neutral { background: var(--neutral-soft); color: var(--neutral-ink); box-shadow: inset 0 0 0 1px var(--border); }
/* 🔴 10.08 ÖLÜMCÜL SİLME: .badge-success/-danger/-warning/-info ::before
   gliflerinin DÖRDÜ DE kaldirildi. overview-page.js:247 akis rozetinin
   ICERIGI EMOJININ TA KENDISI ('⚠️' / '🛑' / 'ℹ️') ve rozete inline
   'border-radius:50%; padding:6px' veriliyor → tema'nin glifi hem CIFT UYARI
   uretiyor hem yuvarlak ikon cipini OVALE ceviriyordu. badge-info YALNIZ bu
   akista kullaniliyor = %100 cakisma. Kalan iki kullanim (render-extra.js
   "Aktif"/"Basarili", finance-page.js "kategori geneli") metin etiketi
   tasiyor, yani ikinci kanal ZATEN metnin kendisi — glif gereksizdi.
   Boylece .badge-neutral'in glifsizligi de tutarsizlik olmaktan cikti. */

/* Legacy rozetler: app-shell.css:284 TUM bildirimlerini !important yazmis.
   Ya !important ile alinir ya hic dokunulmaz — aksi halde ayni ekranda
   kare rozet + hap rozet karisimi cikar (tema yarim gorunur).
   10.08 SILME: .status-pill ve .badge-pill OLU (canli pill'ler: pill ·
   ws-pill · dhl-pill · okpill · at-readonly-pill). .status ve .pill GERCEK. */
html[data-tema="yeni"] .status,
html[data-tema="yeni"] .pill {
  border-radius: var(--radius-sm) !important;   /* !important: app-shell.css:284 radius !important */
  font-size: var(--fs-micro) !important;        /* !important: ayni kural */
  padding: 1px 6px !important;                  /* !important: ayni kural */
}

/* --- Kargo durumu (.op-kd) --- */
html[data-tema="yeni"] .op-kd.kd-ok    { background: var(--success-soft); color: var(--success-ink); box-shadow: inset 0 0 0 1px var(--success-line); }
html[data-tema="yeni"] .op-kd.kd-kotu  { background: var(--danger-soft);  color: var(--danger-ink);  box-shadow: inset 0 0 0 1px var(--danger-line); }
html[data-tema="yeni"] .op-kd.kd-yol   { background: var(--warning-soft); color: var(--warning-ink); box-shadow: inset 0 0 0 1px var(--warning-line); }
html[data-tema="yeni"] .op-kd.kd-hazir { background: var(--info-soft);    color: var(--info-ink);    box-shadow: inset 0 0 0 1px var(--info-line); }
html[data-tema="yeni"] .op-kd.kd-ok::before    { content: '✓'; }
html[data-tema="yeni"] .op-kd.kd-kotu::before  { content: '✕'; }
html[data-tema="yeni"] .op-kd.kd-yol::before   { content: '→'; }
html[data-tema="yeni"] .op-kd.kd-hazir::before { content: '◆'; font-size: .85em; }
/* .kd-takili digerlerinin USTUNE binebilir → ayri katman: kesik cerceve + ! */
html[data-tema="yeni"] .op-kd.kd-takili { outline: 1.5px dashed var(--danger); outline-offset: 1px; }
html[data-tema="yeni"] .op-kd.kd-takili::after { content: '!'; color: var(--danger); font-weight: 800; }

/* --- Tasiyici (.op-kg) --- */
html[data-tema="yeni"] .op-kg { background: var(--neutral-soft); color: var(--neutral-ink); box-shadow: inset 0 0 0 1px var(--border); }
html[data-tema="yeni"] .op-kg.kg-iptal { background: var(--danger-soft); color: var(--danger-ink); text-decoration: line-through; }
html[data-tema="yeni"] .op-kg.kg-iptal::before { content: '✕'; text-decoration: none; }

/* --- Fatura (.op-ft) --- */
html[data-tema="yeni"] .op-ft.op-ft-var  { background: var(--success-soft); color: var(--success-ink); box-shadow: inset 0 0 0 1px var(--success-line); font-family: var(--font-mono); }
/* EYLEM GEREKTIREN TEK DURUM: "faturasız". Digeri dortluyle ayni agirlikta
   gorunmesin diye halka kalinlastirildi + 800. Fatura kesim turu artik goz
   taramasiyla yapilabilir, satir satir tiklamaya gerek yok. */
html[data-tema="yeni"] .op-ft.op-ft-yok  { background: var(--warning-soft); color: var(--warning-ink); box-shadow: inset 0 0 0 1.5px var(--warning); font-weight: 800; }
html[data-tema="yeni"] .op-ft.op-ft-bek  { background: var(--info-soft);    color: var(--info-ink);    box-shadow: inset 0 0 0 1px var(--info-line); }
/* 🔴 10.08 ÖLÜMCÜL — CIFT TIRE.
   Canli: fulfillment-page.js:711/713/714/715 (DORT cagri yeri) hepsi
   '<span class="op-ft op-ft-yok2" ...>—</span>' basiyor; metin ZATEN uzun
   tire (U+2014). Tema '::before{content:"–"}' (U+2013) ekleyince ekranda
   "– —" cikiyordu. Kural SILINDI.
   Ayrica: bu sinif DORT ayri is anlamini tasiyor (bilinmiyor · gerekmez ·
   eski · iptal) ve hicbiri EYLEM GEREKTIRMIYOR → cip olmaktan cikarilip
   sessiz tireye indirildi. Boylece "faturasiz" kolonda tek basina one cikar.
   (Sinifin ikiye bolunmesi = JS isi, Fatih karari olarak raporda.) */
html[data-tema="yeni"] .op-ft.op-ft-yok2 {
  background: none; box-shadow: none; padding: 1px 2px;
  font-weight: 500; color: var(--text-tertiary);
}
html[data-tema="yeni"] .op-ft.op-ft-var::before  { content: '✓'; }
html[data-tema="yeni"] .op-ft.op-ft-yok::before  { content: '!'; font-weight: 800; }
html[data-tema="yeni"] .op-ft.op-ft-bek::before  { content: '→'; }

/* --- Takip gecikmesi (.op-trk): orders-page.css'te SALT RENKTI ---
   #b42318 ile #15803d parlaklik orani 1,31:1 → "gec kalmis kargo" ile
   "teslim edildi" renk korlugunde birbirine kariyordu. Tema'nin --*-ink
   renkleri bu acigi kapatti (pending 2,1:1 → 7,77:1).
   🔴 10.08 ÖLÜMCÜL SİLME — uc ::before glifi de kaldirildi. Canli metinler:
     orders-page.js:109  .ok      → '🚚 ✓'   (tema '✓ ' → ekranda "✓ 🚚 ✓")
     orders-page.js:112  .late    → '⚠️'     (tema '! ' → "! ⚠️", ucgen zaten "!")
     orders-page.js:113  .pending → '⏳'     (tema '→ ' → "→ ⏳", ok "yolda"
                                             kum saati "bekliyor" = CELISKI)
   Sekil kanali metnin KENDI emojisinde zaten var; renk + agirlik korunuyor.
   .late 800 → 700: 10-12px'te 700↔800 gozle ayrilmiyor, 800 artik yalniz
   isaret/glif icin ayrildi. */
html[data-tema="yeni"] .op-trk { font-size: var(--fs-sm); font-weight: 600; }
html[data-tema="yeni"] .op-trk.late { color: var(--danger-ink); font-weight: 700; }
html[data-tema="yeni"] .op-trk.pending { color: var(--warning-ink); font-weight: 700; }
html[data-tema="yeni"] .op-trk.ok { color: var(--success-ink); font-weight: 700; }

/* --- Noktalar: GLIF NOKTANIN ICINDE + sekil farki (daire/kare) ---
   B'nin cozumu; A ve C'nin ikisinin de salt renk biraktigi tek aile. */
html[data-tema="yeni"] .fc-oto-dot,
html[data-tema="yeni"] .fc-bal-dot,
html[data-tema="yeni"] .dhl-chk .dot {
  width: 16px; height: 16px; flex-shrink: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border-radius: var(--radius-full);
  background: var(--text-tertiary); color: var(--text-inverse);
  font-size: var(--fs-micro); font-weight: 800; line-height: 1;
}
html[data-tema="yeni"] .fc-oto-acik   .fc-oto-dot { background: var(--success); }
html[data-tema="yeni"] .fc-oto-acik   .fc-oto-dot::after { content: '✓'; }
html[data-tema="yeni"] .fc-oto-teyit  .fc-oto-dot { background: var(--warning); }
html[data-tema="yeni"] .fc-oto-teyit  .fc-oto-dot::after { content: '!'; }
html[data-tema="yeni"] .fc-oto-kapali .fc-oto-dot { background: var(--text-tertiary); border-radius: var(--radius-xs); }  /* KARE */
html[data-tema="yeni"] .fc-oto-kapali .fc-oto-dot::after { content: '–'; }
html[data-tema="yeni"] .fc-oto-durak  .fc-oto-dot { background: var(--danger); border-radius: var(--radius-xs); }         /* KARE */
/* 8px, dosyanin kendi "10px altı YOK" tabanini kiran son yerdi → --fs-micro */
html[data-tema="yeni"] .fc-oto-durak  .fc-oto-dot::after { content: '■'; font-size: var(--fs-micro); }
html[data-tema="yeni"] .fc-bal-ok     .fc-bal-dot { background: var(--success); }
html[data-tema="yeni"] .fc-bal-ok     .fc-bal-dot::after { content: '✓'; }
html[data-tema="yeni"] .fc-bal-orta   .fc-bal-dot { background: var(--warning); }
html[data-tema="yeni"] .fc-bal-orta   .fc-bal-dot::after { content: '!'; }
html[data-tema="yeni"] .fc-bal-dusuk  .fc-bal-dot { background: var(--danger); border-radius: var(--radius-xs); }         /* KARE */
html[data-tema="yeni"] .fc-bal-dusuk  .fc-bal-dot::after { content: '✕'; }

/* 10.08 SİLME: .ws-indicator (+ .online / .offline) ÖLÜ — sınıf yalnızca
   devtools-page.js:163'te bir TÜRKÇE YORUMUN içinde geçiyor. Gerçek öğe
   index.html:184'te class="ws-pill" (yukarıda ele alındı). */

/* --- Uyari seritleri: 3 ayri sistem tek dile baglandi --- */
html[data-tema="yeni"] .alert,
html[data-tema="yeni"] .dhl-warn,
html[data-tema="yeni"] .fc-ftbant,
html[data-tema="yeni"] .op-note,
html[data-tema="yeni"] .dhl-final,
html[data-tema="yeni"] .dhl-lastrun {
  display: flex; align-items: center; gap: var(--d2);
  padding: 6px 10px; border-radius: var(--radius);
  font-size: var(--fs-sm); line-height: var(--lh-text);
  background: var(--surface-sunken); color: var(--text);
  border: 1px solid var(--line); border-left: var(--rail-bar) solid var(--border-strong);
}
html[data-tema="yeni"] .alert-success,
html[data-tema="yeni"] .dhl-final.ok,
html[data-tema="yeni"] .op-note.customer { background: var(--success-soft); color: var(--success-ink); border-color: var(--success-line); border-left-color: var(--success); }
html[data-tema="yeni"] .alert-error,
html[data-tema="yeni"] .dhl-final.err,
html[data-tema="yeni"] .dhl-final.bad { background: var(--danger-soft); color: var(--danger-ink); border-color: var(--danger-line); border-left-color: var(--danger); }
html[data-tema="yeni"] .alert-warning,
html[data-tema="yeni"] .dhl-final.warn,
html[data-tema="yeni"] .dhl-lastrun.warn,
html[data-tema="yeni"] .fc-ftbant { background: var(--warning-soft); color: var(--warning-ink); border-color: var(--warning-line); border-left-color: var(--warning); }
html[data-tema="yeni"] .op-note.internal { background: var(--surface-sunken); border-left-color: var(--text-tertiary); }
/* 10.08 SİLME: .alert-info ÖLÜ (canlıda 0). .alert-success/.alert-error
   RENK kolları .dhl-final ikizleriyle birlikte KALDI (alert-error
   finance-page.js:354'te gerçek; finance-page.js index.html'de yükleniyor —
   doğrulandı). .dhl-final.bad EKLENDİ: fulfillment-page.js:2516
   "OLUŞTURULAMADI" bandı temada renksiz/nötr gri düşüyordu. */
html[data-tema="yeni"] .alert-success::before,
html[data-tema="yeni"] .dhl-final.ok::before { content: '✓'; font-weight: 800; }
html[data-tema="yeni"] .alert-error::before,
html[data-tema="yeni"] .dhl-final.err::before,
html[data-tema="yeni"] .dhl-final.bad::before { content: '✕'; font-weight: 800; }
/* 🔴 10.08 ÖLÜMCÜL: '!' glifinden .dhl-warn ve .fc-ftbant CIKARILDI.
   .dhl-warn govdesi canlida ZATEN emoji ile basliyor:
     fulfillment-page.js:1399 → '⛔ <b>DURAKLATILDI</b> …'  ("! ⛔ …")
     fulfillment-page.js:1403 → '🔴 <b>Rulo kapasitesi…</b>' ("! 🔴 …")
   .fc-ftbant ise bir UYARI degil SUZGEC BILDIRIMI ("Yalnız faturasız
   siparişler gösteriliyor") — '!' + turuncu YALANCI ALARM uretiyordu ve
   ekrandaki gercek uyarilarin degerini dusuruyordu. Renk/serit kaliyor.
   .alert-warning (render-extra.js "Security API henüz hazır değil.") temiz,
   glifi korundu. */
html[data-tema="yeni"] .alert-warning::before,
html[data-tema="yeni"] .dhl-final.warn::before { content: '!'; font-weight: 800; }
/* 🔴 .dhl-warn.stop::before '■' de SILINDI: canli metin '⏸️ Durduruluyor'
   (fulfillment-page.js:1888, 2736) — ikisi de "dur" demek, cift ikon. */
html[data-tema="yeni"] .dhl-warn.stop { background: var(--neutral-soft); color: var(--neutral-ink); border-left-color: var(--text-tertiary); }
html[data-tema="yeni"] .op-note-meta { font-size: var(--fs-micro); color: var(--text-tertiary); font-weight: 600; }

/* 10.08 SİLME: .activity-empty ÖLÜ (0 kullanım). .op-empty GERÇEK
   (orders-page.js, 2 kullanım). */
html[data-tema="yeni"] .op-empty,
html[data-tema="yeni"] .dhl-empty,
html[data-tema="yeni"] .empty {
  padding: 10px; text-align: center; color: var(--text-tertiary);
  font-size: var(--fs-cap); border: 1px dashed var(--border); border-radius: var(--radius);
  background: transparent;
}
/* Siparişler tablosunun boş satırı CLASS'SIZ basılıyor:
   '<td colspan="12" style="text-align:center;padding:40px;color:…">Kayıt yok'
   → .op-empty hiç eşleşmiyordu; 553px'lik çerçevenin ortasında 13px soluk
   yazı kalıyordu ("sistem çöktü mü?"). colspan ÖZNİTELİĞİ class gerektirmez;
   inline color/padding yerinde kalır, punto+ağırlık inline OLMADIĞI için
   uygulanır. */
html[data-tema="yeni"] .op-table td[colspan] {
  font-size: var(--fs-md); font-weight: 600;
  letter-spacing: var(--ls-title); border-bottom: 0;
}


/* ==========================================================================
 * 9) SAYFA SERITLERI (fc-*) — sekmeler · toplu secim · oto baski · bakiye
 * ==========================================================================*/
html[data-tema="yeni"] .fc-tabs {
  display: flex; align-items: center; gap: 2px; flex-wrap: wrap;
  margin-bottom: var(--d2); padding: var(--d1);
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-lg);
}
/* IC YARICAP: 8px kap − 4px dolgu = 4px. 6px kabin ic egrisini tasiriyordu. */
html[data-tema="yeni"] .fc-tab {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: var(--ctl-h-sm); min-height: var(--ctl-h-sm); padding: 0 var(--d3);
  border: 1px solid transparent; border-radius: var(--radius-sm);
  background: transparent; color: var(--text-secondary);
  font-family: var(--font-sans); font-size: var(--fs-sm); font-weight: 600;
  line-height: 1; white-space: nowrap; cursor: pointer;
  user-select: none; touch-action: manipulation;
}
/* Acik sekme — renk + ALT SERIT + kalin yazi. Serit 2px → --rail (3px):
   "serit" bu temanin ana durum dili, kalinligi yere gore degisince dil
   olmaktan cikiyordu. */
html[data-tema="yeni"] .fc-tab.on {
  background: var(--primary-soft); color: var(--primary); font-weight: 700;
  box-shadow: inset 0 calc(var(--rail) * -1) 0 var(--primary);
}
html[data-tema="yeni"] .fc-tab:active { background: var(--surface-active); box-shadow: inset 0 2px 0 rgba(16, 18, 24, .14); transition-duration: 0s; }
html[data-tema="yeni"] .fc-tab .cnt {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: 18px; height: 16px; padding: 0 4px;
  border-radius: var(--radius-full); background: var(--surface-active);
  font-size: var(--fs-micro); font-weight: 700; color: var(--text-secondary);
}
/* BORDO BÜTÇESİ: sayac dolu bordo degil tint + halka (sekmede zaten alt
   serit + bordo metin + 700 var; sayac dorduncu bordo alandi). */
html[data-tema="yeni"] .fc-tab.on .cnt {
  background: var(--primary-soft-2); color: var(--primary);
  box-shadow: inset 0 0 0 1px var(--primary);
}
html[data-tema="yeni"] .fc-tab-ayrac { width: 1px; height: 18px; background: var(--border); margin: 0 4px; }

html[data-tema="yeni"] .fc-bulkbar {
  display: flex; align-items: center; gap: var(--d2); flex-wrap: wrap;
  padding: 6px 10px; margin-bottom: var(--d2);
  background: var(--primary-soft); border: 1px solid var(--primary-line);
  border-left: var(--rail-bar) solid var(--primary);   /* toplu secim bandi */
  border-radius: var(--radius); font-size: var(--fs-sm);
}
html[data-tema="yeni"] .fc-bulkbar b { color: var(--primary); font-weight: 700; }

/* Oto baski / bakiye cipleri — eylem cubugundaki butonlarla ayni boyda */
html[data-tema="yeni"] .fc-oto,
html[data-tema="yeni"] .fc-bal {
  display: inline-flex; align-items: center; gap: 6px;
  height: var(--ctl-h); min-height: var(--ctl-h); padding: 0 10px;
  border: 1px solid var(--ctl-border); border-radius: var(--radius);
  background: var(--surface); color: var(--text-secondary);
  font-size: var(--fs-sm); font-weight: 700; white-space: nowrap;
}
html[data-tema="yeni"] .fc-oto-acik   { border-color: var(--success-line); background: var(--success-soft); color: var(--success-ink); }
html[data-tema="yeni"] .fc-oto-teyit  { border-color: var(--warning-line); background: var(--warning-soft); color: var(--warning-ink); }
html[data-tema="yeni"] .fc-oto-kapali { border-color: var(--border); background: var(--neutral-soft); color: var(--neutral-ink); }
html[data-tema="yeni"] .fc-oto-durak  { border-width: 2px; border-color: var(--danger); background: var(--danger-soft); color: var(--danger-ink); }
html[data-tema="yeni"] .fc-bal-ok     { border-color: var(--success-line); background: var(--success-soft); color: var(--success-ink); }
html[data-tema="yeni"] .fc-bal-orta   { border-color: var(--warning-line); background: var(--warning-soft); color: var(--warning-ink); }
html[data-tema="yeni"] .fc-bal-dusuk  { border-width: 2px; border-color: var(--danger); background: var(--danger-soft); color: var(--danger-ink); }
html[data-tema="yeni"] .fc-oto-rozet,
html[data-tema="yeni"] .fc-bal-rozet {
  padding: 1px 6px; border-radius: var(--radius-sm);
  font-size: var(--fs-micro); font-weight: 700;
  background: var(--danger); color: var(--text-inverse);
}
html[data-tema="yeni"] .fc-bal-rozet.fc-bal-bayat { background: var(--neutral-soft); color: var(--neutral-ink); box-shadow: inset 0 0 0 1px var(--border); font-style: italic; }
/* 10.08 DÜZELTME: kuralın İKİ seçicisi de ölüydü — ".fc-bal .v" (öyle bir
   çocuk yok) ve ".fc-bal-tutar" (canlıda 0 kullanım). Gerçek sınıflar
   fulfillment-page.js:153'te: .fc-bal-v (tutar) ve .fc-bal-k (etiket).
   Kural SİLİNMEDİ, DOĞRU HEDEFE bağlandı — aksi halde kargo bakiyesi
   rakamı temada biçimsiz kalırdı. .fc-bal-yukle rozeti de eksikti. */
html[data-tema="yeni"] .fc-bal-v { font-weight: 700; color: var(--text); }
html[data-tema="yeni"] .fc-bal-k { color: var(--text-tertiary); }
html[data-tema="yeni"] .fc-bal-rozet.fc-bal-yukle { background: var(--warning); color: var(--text-inverse); font-style: normal; }

/* Oto baski ayar satirlari */
html[data-tema="yeni"] .fc-oto-satir {
  display: flex; align-items: center; justify-content: space-between; gap: var(--d3);
  flex-wrap: wrap; padding: var(--d2) 0;
  border-bottom: 1px solid var(--line); font-size: var(--fs-base);
}
html[data-tema="yeni"] .fc-oto-satir:last-of-type { border-bottom: none; }
html[data-tema="yeni"] .fc-oto-ipuc { flex-basis: 100%; font-size: var(--fs-cap); color: var(--text-tertiary); line-height: 1.4; margin-top: 2px; max-width: 46ch; }
html[data-tema="yeni"] .fc-oto-ip { width: 84px; text-align: right; font-weight: 700; }
html[data-tema="yeni"] .fc-pbadge { margin-left: 6px; }


/* ==========================================================================
 * 10) DIYALOG AILESI — .op-drawer · .dhlp (6 overlay ortak kabuk) · bk-*
 *     KURAL: her diyalog FLEX KOLON + yukseklik tavani. Govde kayar, ayak
 *     (Onayla/Iptal) HER ZAMAN ekranda kalir. 648px'lik viewport'ta uzun
 *     rapor tablosunda ayak butonlarinin ekran disinda kalmasi kabul edilemez.
 * ==========================================================================*/
/* 160ms sistemdeki 140/190ms cubic-bezier ikilisinin disinda kalmis tek sureydi */
html[data-tema="yeni"] .op-drawer-overlay { background: rgba(16, 18, 24, .45); transition: opacity var(--transition-slow); }
html[data-tema="yeni"] .op-drawer {
  background: var(--surface); border-left: 1px solid var(--border);
  box-shadow: var(--shadow-lg);
  transition: transform var(--transition-slow);
}
html[data-tema="yeni"] .op-drawer-header { padding: 10px var(--d3); border-bottom: 1px solid var(--border); background: var(--surface-sunken); }
html[data-tema="yeni"] .op-drawer-header h2 { font-size: var(--fs-md); font-weight: 700; gap: var(--d2); letter-spacing: var(--ls-title); }
html[data-tema="yeni"] .op-drawer-body { padding: 10px var(--d3); gap: var(--d3); overscroll-behavior: contain; }
html[data-tema="yeni"] .op-actions { gap: 6px; padding-top: var(--d2); border-top: 1px solid var(--line); }

/* Mesaj gonderme paneli */
html[data-tema="yeni"] .op-msg-channels { gap: var(--d2); margin-bottom: var(--d3); }
/* BORDO BÜTÇESİ + GLİF: kanal metni canlıda ZATEN emoji taşıyor
   ('🟢 WhatsApp' / '✉️ SMS' — orders-page.js:393-394); dolu bordo + '✓ '
   eklenince butonda üç glif üst üste yığılıyordu. Tint + halka + 700 yeter. */
html[data-tema="yeni"] .op-msg-ch.active {
  background: var(--primary-soft-2); color: var(--primary);
  border-color: var(--primary); font-weight: 700;
}
html[data-tema="yeni"] .op-msg-templates { gap: 6px; margin-bottom: var(--d2); }
html[data-tema="yeni"] .op-msg-tpl {
  display: inline-flex; align-items: center; min-height: var(--ctl-h-sm);
  padding: 0 var(--d3); border: 1px solid var(--ctl-border); border-radius: var(--radius-full);
  background: var(--surface); color: var(--text-secondary); font-size: var(--fs-sm);
  cursor: pointer; touch-action: manipulation;
}
html[data-tema="yeni"] .op-msg-tpl:active { background: var(--surface-active); }
html[data-tema="yeni"] .op-msg-hint { font-size: var(--fs-cap); color: var(--text-tertiary); margin: 6px 2px 0; }
/* 🔴 10.08 ÖLÜMCÜL SİLME: iki ::before de kaldırıldı.
   orders-page.js:502 → '✅ WhatsApp gönderildi.'  (tema '✓ ' → "✓ ✅ …")
   orders-page.js:505/510 → '❌ …'                 (tema '✕ ' → "✕ ❌ …")
   Renk + 700 ağırlık ikinci kanal olarak kalıyor; :490/:491 gibi glifsiz
   yollarda da ("Telefon gerekli.") metin kendi başına anlaşılır. */
html[data-tema="yeni"] .op-msg-ok { color: var(--success-ink); font-weight: 700; }
html[data-tema="yeni"] .op-msg-err { color: var(--danger-ink); font-weight: 700; }
html[data-tema="yeni"] .op-msg-pending { color: var(--text-secondary); }

/* --- Ortak sihirbaz kabugu --- */
html[data-tema="yeni"] .dhlp {
  display: flex; flex-direction: column; max-height: 92vh; overflow: hidden;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius-xl); box-shadow: var(--shadow-lg);
}
html[data-tema="yeni"] .dhl-head {
  display: flex; align-items: center; gap: var(--d3); flex-shrink: 0;
  padding: 8px var(--d3); border-bottom: 1px solid var(--border);
  background: var(--surface-sunken);
}
html[data-tema="yeni"] .dhl-head h2 { font-size: var(--fs-md); font-weight: 700; letter-spacing: var(--ls-title); }
html[data-tema="yeni"] .dhl-head .sub,
html[data-tema="yeni"] .dhl-sub,
html[data-tema="yeni"] .ctr .sub { font-size: var(--fs-cap); color: var(--text-tertiary); }

/* Adim rayi: numara + durum glifi (renk tek basina tasimiyor) */
html[data-tema="yeni"] .dhl-rail { display: flex; align-items: center; gap: var(--d1); margin-left: auto; }
html[data-tema="yeni"] .dhl-step {
  display: inline-flex; align-items: center; gap: 4px;
  height: 24px; padding: 0 8px; border-radius: var(--radius-full);
  background: var(--neutral-soft); color: var(--text-tertiary);
  font-size: var(--fs-micro); font-weight: 700; touch-action: manipulation;
}
html[data-tema="yeni"] .dhl-step:active { background: var(--surface-active); }
/* BORDO BÜTÇESİ: yürüyen adım tint + halka + bordo metin (numara korunur) */
html[data-tema="yeni"] .dhl-step.on {
  background: var(--primary-soft-2); color: var(--primary);
  box-shadow: inset 0 0 0 1px var(--primary);
}
html[data-tema="yeni"] .dhl-step.done { background: var(--success-soft); color: var(--success-ink); box-shadow: inset 0 0 0 1px var(--success-line); }
html[data-tema="yeni"] .dhl-step.done::after { content: '✓'; font-weight: 800; }
html[data-tema="yeni"] .dhl-step.err { background: var(--danger-soft); color: var(--danger-ink); box-shadow: inset 0 0 0 1.5px var(--danger-line); }
html[data-tema="yeni"] .dhl-step.err::after { content: '✕'; font-weight: 800; }

html[data-tema="yeni"] .dhl-body {
  flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain;
  padding: var(--d3); display: flex; flex-direction: column; gap: 10px;
}
html[data-tema="yeni"] .dhl-g2 { display: grid; grid-template-columns: 1fr 1fr; gap: var(--d3); align-items: start; }
html[data-tema="yeni"] .dhl-cols { display: grid; grid-template-columns: 1fr 1fr; gap: var(--d3); }

/* Kontrol listesi: kare nokta = kontrol, daire + ✓ = gecti */
html[data-tema="yeni"] .dhl-chk {
  display: flex; align-items: center; gap: var(--d2);
  padding: 5px 8px; border-radius: var(--radius);
  background: var(--surface-sunken); border: 1px solid var(--line);
  font-size: var(--fs-sm); color: var(--text-secondary);
}
html[data-tema="yeni"] .dhl-chk .dot { border-radius: var(--radius-xs); }
/* 🔴 10.08 SİLME — GÖRÜNMEYEN GLİF:
   Taban '#dhl-otp-overlay .dhl-chk .dot' (1,2,0) tema'yı (0,3,1) yeniyor ve
   noktaya background:#fff veriyor; tema'nın color:#fff'i ile birleşince
   BEYAZ ÜSTÜNE BEYAZ oluyordu — '–' ve '→' hiç görünmüyordu. Dahası '.on
   .dot' üstünde animation:dhl-spin var, yani '→' KENDİ EKSENİNDE DÖNERDİ.
   İkisi de kaldırıldı. '.ok .dot' taban tarafından YEŞİL boyandığı için
   oradaki '✓' gerçekten görünür → tek anlamlı glif olarak korundu. */
html[data-tema="yeni"] .dhl-chk.on { border-color: var(--info-line); background: var(--info-soft); color: var(--info-ink); }
html[data-tema="yeni"] .dhl-chk.on .dot { background: var(--info); }
html[data-tema="yeni"] .dhl-chk.ok { border-color: var(--success-line); background: var(--success-soft); color: var(--success-ink); }
html[data-tema="yeni"] .dhl-chk.ok .dot { background: var(--success); border-radius: var(--radius-full); }
html[data-tema="yeni"] .dhl-chk.ok .dot::after { content: '✓'; }

/* OTP kutusu ve tus takimi — en yuksek yanlis-dokunma riski burada */
html[data-tema="yeni"] .dhl-otpbox { display: flex; align-items: center; gap: var(--d2); }
/* .input-otp giriş+2FA sayfasının gerçek sınıfı; bugün eşleşmiyor
   (o sayfa data-tema taşımıyor), kapsam genişlerse hazır dursun diye kaldı. */
html[data-tema="yeni"] .dhl-otpbox input,
html[data-tema="yeni"] .input-otp {
  height: 48px; width: 100%; text-align: center;
  font-family: var(--font-mono); font-size: 22px; font-weight: 700;
  letter-spacing: .3em;
  border: 2px solid var(--ctl-border); border-radius: var(--radius); background: var(--surface);
}
/* "OTP CANLI, kod bekleniyor" durumu bordo kenarlık + bordo parıltı ile
   SIRADAN ODAK görünümüyle BİREBİR aynıydı → operatör alanın odaklandığını mı
   yoksa kodun beklendiğini mi anlayamıyordu. Ayrı renk (info) + ● glifi. */
html[data-tema="yeni"] .dhl-otpbox.live input { border-color: var(--info); border-width: 2px; }
html[data-tema="yeni"] .dhl-otpbox.live::before { content: '●'; color: var(--info); font-weight: 800; font-size: var(--fs-md); }
html[data-tema="yeni"] .dhl-rcp,
html[data-tema="yeni"] .bk-chips { display: flex; gap: var(--d2); flex-wrap: wrap; }
html[data-tema="yeni"] .dhl-pad { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; }
html[data-tema="yeni"] .dhl-pad .op-btn { height: 48px; min-height: 48px; font-size: var(--fs-md); }  /* kritik: sayisal tus */

/* Ilerleme bolumu — BORDO KULLANIMI 6b: kosu halkasi */
html[data-tema="yeni"] .dhl-top { display: flex; align-items: center; gap: var(--d4); flex-wrap: wrap; }
html[data-tema="yeni"] .dhl-ring .pct { font-size: 20px; font-weight: 700; letter-spacing: var(--ls-title); }
html[data-tema="yeni"] .dhl-ring circle.trk { stroke: var(--surface-active); }
html[data-tema="yeni"] .dhl-ring circle.bar { stroke: var(--primary); transition: stroke-dashoffset var(--transition-slow); }

html[data-tema="yeni"] .dhl-badges,
html[data-tema="yeni"] .dhl-tiles,
html[data-tema="yeni"] .bk-money {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(96px, 1fr)); gap: 6px; flex: 1;
}
html[data-tema="yeni"] .dhl-bd,
html[data-tema="yeni"] .bk-money .cell {
  position: relative; padding: 5px 9px;
  background: var(--surface-sunken); border: 1px solid var(--line); border-radius: var(--radius);
}
html[data-tema="yeni"] .dhl-bd .k,
html[data-tema="yeni"] .bk-money .cell .k,
html[data-tema="yeni"] .bk-bal .k {
  font-size: var(--fs-micro); font-weight: 600; text-transform: uppercase;
  letter-spacing: var(--ls-cap); color: var(--text-tertiary);
}
html[data-tema="yeni"] .dhl-bd .v,
html[data-tema="yeni"] .bk-money .cell .v {
  font-size: var(--fs-num); font-weight: 700; line-height: 1.15; letter-spacing: var(--ls-title);
}
/* Sayac kutucuklari — renk + KUTUNUN KENDI etiketi.
   🔴 10.08 ÖLÜMCÜL SİLME: uc kose glifi (::after '✓' / '✕' / '–') kaldirildi.
   Kutularin '.k' etiketleri canlida ZATEN HTML entity glifi ile basliyor:
     fulfillment-page.js:1775, 2611 → '&#10003; Hata' / '&#10007; Hata'
     :1776, 2612 → '&#8677; Atlanan' (⇥)
   Kartin icinde '✓ Başarılı' + kosede ikinci '✓' = cift ikon. Renk + zemin +
   kalin cerceve ikinci kanal olarak yeterli.

   ⚠️ .dhl-bd.bad.hit KURALI SILINMEDI — verilen bulgu listesinde "olu" diye
   isaretlenmisti, CANLIDAN DOGRULANDI ve GERCEK cikti: sinif class="" icinde
   degil calisma aninda className ATAMASI ile veriliyor
     fulfillment-page.js:1982, 2006, 2786, 2816
       bf.className = "dhl-bd bad" + (bad ? " hit" : "")
   yani hata sayaci SIFIRDAN BUYUKKEN yanan kirmizi vurgu. Silinseydi HATALI
   TUR ile TEMIZ TUR ekranda ayni gorunecekti. */
html[data-tema="yeni"] .dhl-bd.ok { background: var(--success-soft); border-color: var(--success-line); color: var(--success-ink); }
html[data-tema="yeni"] .dhl-bd.bad.hit { background: var(--danger-soft); border-color: var(--danger); border-width: 2px; color: var(--danger-ink); }
html[data-tema="yeni"] .dhl-bd.skip { color: var(--text-tertiary); }
html[data-tema="yeni"] .dhl-bd.money { background: var(--info-soft); border-color: var(--info-line); color: var(--info-ink); }

html[data-tema="yeni"] .dhl-now { display: flex; align-items: center; gap: var(--d2); font-size: var(--fs-sm); color: var(--text-secondary); min-height: 20px; }
html[data-tema="yeni"] .dhl-spin {
  width: 12px; height: 12px; flex-shrink: 0;
  border: 2px solid var(--surface-active); border-top-color: var(--primary); border-radius: 50%;
}

html[data-tema="yeni"] .dhl-list {
  display: flex; flex-direction: column; gap: 2px;
  max-height: 220px; overflow-y: auto; overscroll-behavior: contain;
  padding: 4px; border: 1px solid var(--line); border-radius: var(--radius);
  background: var(--surface-sunken); scrollbar-width: thin;
}
html[data-tema="yeni"] .dhl-row {
  display: flex; align-items: center; gap: var(--d2);
  padding: 4px 8px; border-radius: var(--radius-sm);
  font-size: var(--fs-sm); line-height: var(--lh-data); background: var(--surface);
}
html[data-tema="yeni"] .dhl-row .dhl-ic { width: 16px; flex-shrink: 0; text-align: center; font-weight: 800; }
html[data-tema="yeni"] .dhl-row .dhl-rb { margin-left: auto; text-align: right; }
html[data-tema="yeni"] .dhl-row .dhl-rb b { font-size: var(--fs-sm); font-weight: 700; }
html[data-tema="yeni"] .dhl-row code { font-family: var(--font-mono); font-size: var(--fs-micro); color: var(--text-tertiary); }
html[data-tema="yeni"] .dhl-row.ok { background: var(--success-soft); color: var(--success-ink); box-shadow: inset var(--rail) 0 0 var(--success); }
html[data-tema="yeni"] .dhl-row.wait { background: var(--warning-soft); color: var(--warning-ink); box-shadow: inset var(--rail) 0 0 var(--warning); }
html[data-tema="yeni"] .dhl-row.skip { background: var(--neutral-soft); color: var(--neutral-ink); box-shadow: inset var(--rail) 0 0 var(--border-strong); }
/* Hata satiri: renk + serit + CAPRAZ DOKU. Doku araligi 5/10px @ %8 idi:
   12px'lik satirda 135 derecelik tarama metinle MOIRE yapiyor, %8 alfada ise
   hic is gormuyordu → 6/12px @ %12. */
html[data-tema="yeni"] .dhl-row.bad {
  color: var(--danger-ink); box-shadow: inset var(--rail) 0 0 var(--danger);
  background-color: var(--danger-soft);
  background-image: repeating-linear-gradient(135deg, transparent 0 6px, rgba(180, 35, 24, .12) 6px 12px);
  font-weight: 600;
}
/* 🔴 10.08 ÖLÜMCÜL SİLME — DORT KURAL BIRDEN.
   '.dhl-ic' canlida SABIT 30px DAIRE ('flex:0 0 30px', font 15px/900) ve
   ICERIGI ZATEN GLIF:
     fulfillment-page.js:2032/2849 → &#10003; (✓)  tema '✓' → "✓✓"
     :2026/2843 → &#10007; (✗)                     tema '✕' → "✗✕"
     :2036/2852 → &#9203;  (⏳)                     tema '→' → "⏳→"
     :2029/2846 → &#8677;  (⇥)                     tema '–' → "⇥–"
   Iki glif 30px daireye SIGMIYOR, tasiyordu. Renk + serit + doku + dairenin
   kendi glifi = dort kanal, fazlasiyla yeterli. */
/* pointer-events:none olan ogede cursor ASLA boyanmaz — olu bildirim kaldirildi */
html[data-tema="yeni"] .dhl-row.sk { pointer-events: none; }

html[data-tema="yeni"] .dhl-tblwrap {
  max-height: 42vh; overflow: auto; overscroll-behavior: contain;
  border: 1px solid var(--border); border-radius: var(--radius-lg); scrollbar-width: thin;
}
html[data-tema="yeni"] .dhl-foot {
  display: flex; align-items: center; justify-content: flex-end; gap: var(--d2);
  flex-wrap: wrap; flex-shrink: 0; padding: 8px var(--d3);
  border-top: 1px solid var(--border); background: var(--surface-sunken);
}
/* Onaylayici eylem saga, geri/vazgec sola — kas hafizasi sabit kalsin */
html[data-tema="yeni"] .dhl-foot .op-btn-primary { margin-left: auto; }
/* 🔴 DHL/BK KOSUSUNUN EN PAHALI YANLIS DOKUNUSU
   DOM sirasi [Kopyala][Tamamlandı ▮primary][DURDUR][Kapat] + primary'ye
   margin-left:auto → "■ DURDUR" ile "Tamamlandı" KOMSU dusuyordu.
   Yanlislikla DURDUR = HALT kilidi (Fatih ELLE kaldirir) · yanlislikla
   Tamamlandı = yarim kalan kosu kapanir (MNG barkodu iptal EDILEMEZ).
   'order' ile ayagin SOL ucuna tasinir, aradaki bosluk auto marjla acilir.
   #dhl-btn-halt bir ID → (1,1,1); satir ici style yalniz min-width/border/
   color yaziyor, order ve margin BOS → !important gerekmedi. */
html[data-tema="yeni"] #dhl-btn-halt {
  order: -1; margin-right: auto; margin-left: 0;
  border-width: 2px; font-weight: 800;
}

/* Barkod kosusu (bk-*) */
html[data-tema="yeni"] .bk-bal {
  display: flex; align-items: center; gap: var(--d2);
  padding: 6px 10px; border-radius: var(--radius);
  background: var(--surface-sunken); border: 1px solid var(--line);
}
html[data-tema="yeni"] .bk-bal.low { background: var(--danger-soft); border-color: var(--danger); border-width: 2px; color: var(--danger-ink); }
/* '!' glifi kaldirildi: taban '#bk-overlay .bk-bal' (1,2,0) tema'nin
   display:flex'ini yeniyor → kart BLOK cocuklu kaliyor ve '!' KENDI
   SATIRINDA, "BAKİYE" etiketinin USTUNDE asili duruyordu (hizalama arizasi).
   Kalin kirmizi cerceve + renk zaten iki kanal. */
html[data-tema="yeni"] .bk-bal .v { font-size: var(--fs-md); font-weight: 700; }
html[data-tema="yeni"] .bk-bal .s { font-size: var(--fs-cap); color: var(--text-tertiary); }
html[data-tema="yeni"] .bk-note { font-size: var(--fs-cap); color: var(--text-secondary); }
html[data-tema="yeni"] .bk-note b { color: var(--text); font-weight: 700; }
html[data-tema="yeni"] .bk-lim { display: flex; align-items: center; gap: var(--d2); margin: var(--d2) 0; }
/* KURU vs GERCEK kosu — para harcanan mod ASLA salt renkle anlatilmaz */
html[data-tema="yeni"] .bk-mode {
  display: inline-flex; align-items: center; gap: 3px;
  padding: 1px 6px; border-radius: var(--radius-sm);
  font-size: var(--fs-micro); font-weight: 800; letter-spacing: .04em;
}
html[data-tema="yeni"] .bk-mode.dry { background: var(--neutral-soft); color: var(--neutral-ink); box-shadow: inset 0 0 0 1px var(--border); }
html[data-tema="yeni"] .bk-mode.dry::before { content: '–'; }
html[data-tema="yeni"] .bk-mode.live { background: var(--danger); color: var(--text-inverse); }
html[data-tema="yeni"] .bk-mode.live::before { content: '●'; }


/* ==========================================================================
 * 11) HOVER — YALNIZ SUS. Dokunmatikte hicbir islev buna bagli degil.
 *
 *     🔴 10.08 KAPI DUZELTMESI: eski kapi '(hover:hover) and (pointer:fine)'
 *     idi — ama depo makinesi fare + dokunmatik BIRLIKTE oldugu icin birincil
 *     isaretleyiciyi "fine" raporluyor, yani kapi ACILIYOR ve tam da onlemek
 *     icin yazildigi "yapiskan hover" O MAKINEDE ONLENMIYORDU (son basilan
 *     satir SECILI gibi kaliyordu; fatura kesim akisinda guvenlik meselesi).
 *     Dogru kapi: fare VAR ve cihazda dokunmatik YOK.
 *     'not (any-pointer: coarse)' — Media Queries L4, WebView2/Chromium ✓
 * ==========================================================================*/
@media (hover: hover) and (pointer: fine) and (not (any-pointer: coarse)) {
  /* Satir hover'i --surface-active kullanir: --surface-hover cift satirda
     1,03:1 ile fiilen gorunmuyordu. */
  html[data-tema="yeni"] .op-table .op-row:hover td { background: var(--surface-active); }
  html[data-tema="yeni"] .table tr:hover td,
  html[data-tema="yeni"] .dhl-tbl tbody tr:hover td { background: var(--surface-active); }
  html[data-tema="yeni"] .op-btn:hover:not(:disabled),
  html[data-tema="yeni"] .btn:hover:not(:disabled) { background: var(--surface-hover); border-color: var(--text-tertiary); color: var(--text); }
  html[data-tema="yeni"] .op-btn-primary:hover:not(:disabled),
  html[data-tema="yeni"] .btn-primary:hover:not(:disabled) { background: var(--primary-hover); border-color: var(--primary-hover); color: var(--text-inverse); }
  html[data-tema="yeni"] .op-chip:hover { border-color: var(--primary-line); color: var(--primary); }
  html[data-tema="yeni"] .btn-icon:hover,
  html[data-tema="yeni"] #hamburger:hover { background: var(--surface-hover); color: var(--text); }
  html[data-tema="yeni"] .fc-act:hover,
  html[data-tema="yeni"] .op-cust-msg:hover { border-color: var(--primary-line); color: var(--primary); }
  html[data-tema="yeni"] .sidebar-nav a:hover { background: var(--surface-hover); color: var(--text); }
  html[data-tema="yeni"] .fc-tab:hover { background: var(--surface-hover); }
  html[data-tema="yeni"] a:hover { color: var(--primary-hover); }
}

/* HOVER'A BAGLI ISLEV NOTRLEMESI
   Tema'nin KENDI 31 hover kuralinin hicbiri islev acmiyor ✓ — ama ?tema=yeni
   <html>'e yazildigi icin TUM sayfalar tema altinda calisiyor ve baska
   sayfalarda hover'a bagli islev VAR. Tema'nin biçimlendirdigi (yani beyan
   edilen erisim alaninda olan) musteri sayfasindaki siralama ipucu
   dokunmatikte hic gorunmuyordu; sabitlendi.
   NOT: mail-page.css:149'daki "eylemler yalniz hover'da" arizasi BILEREK
   ELLENMEDI — o sayfanin duzen karari, display:flex dayatmak satiri bozabilir.
   Raporda Fatih karari olarak birakildi. */
html[data-tema="yeni"] .cp-table th.sortable::after,
html[data-tema="yeni"] .customers-page th.sortable::after { opacity: .6; }

/* Fare YOKKEN mevcut dosyalardaki zararli hover'lari notrle */
@media (hover: none) {
  html[data-tema="yeni"] .op-table tbody tr:hover td { background: inherit; }
  html[data-tema="yeni"] .table tr:hover td { background: inherit; }
  html[data-tema="yeni"] .sidebar-nav a:hover { background: transparent; }
  html[data-tema="yeni"] .sidebar-nav a.active:hover { background: var(--primary-soft); }
}


/* ==========================================================================
 * 12) EKRAN UYUMU — 1366x768 ASIL HEDEF EKRAN
 *     Yukseklik 800px altina duserse her piksel tabloya yazilir.
 *     SIDEBAR BUTCESI (viewport ~648px):
 *       marka 37 + nav dolgu 12 + 4 grup basligi 64 + 3 grup boslugu 12
 *       + 14 satir x 26 = 364 + kullanici blogu 43 = 532px → 116px pay ✓
 *       (16 satira cikarsa 584px → 64px pay; yer imi cubugu acikken de sigar)
 * ==========================================================================*/
@media (min-width: 901px) and (max-height: 800px) {
  html[data-tema="yeni"] {
    --nav-row-h: 26px;      /* app-shell.css:420 ile ayni; tema kendi kendine yeter */
    --row-pad-y: 3px;
    --ctl-h: 32px;
    --main-pad-y: 10px;
    --main-pad-x: 14px;
    --kpi-pad: 4px 8px;
    --fs-num: 15px;
    --tbl-reserve: 205px;   /* 217 − 12: alt baslik gizlendi + KPI/baslik kuculdu */
  }
  html[data-tema="yeni"] .sidebar-brand { padding: 6px 12px; }
  html[data-tema="yeni"] .sidebar-brand a { font-size: var(--fs-md); }
  html[data-tema="yeni"] .sidebar-brand-dot { width: 8px; height: 8px; }
  html[data-tema="yeni"] .nav-section { margin-top: 4px; }
  html[data-tema="yeni"] .nav-section-title { padding: 4px 8px 2px; }
  html[data-tema="yeni"] .sidebar-user { padding: 4px; }
  html[data-tema="yeni"] .page-header { margin-bottom: 6px; }
  /* 15px DORT rol tasiyordu (sayfa basligi + panel basligi + diyalog basligi
     + KPI sayisi) → merdiven asil hedef ekranda 7'den 5'e iniyordu. 17px ile
     sayfa basligi kendi kademesine geri dondu; maliyet 2px, rezerve yazildi. */
  html[data-tema="yeni"] .page-header h1 { font-size: 17px; }
  html[data-tema="yeni"] .page-header-subtitle { display: none; }   /* topbar'da aynisi yaziyor */
  html[data-tema="yeni"] .op-filter-bar { padding-bottom: 6px; margin-bottom: 6px; }
  html[data-tema="yeni"] .fc-tabs { margin-bottom: 6px; }
  html[data-tema="yeni"] .dhlp { max-height: 96vh; }
}

/* Tablet genisligi (app-shell.css:413 sidebar'i 141px'e indiriyor) */
@media (min-width: 901px) and (max-width: 1200px) {
  html[data-tema="yeni"] { --main-pad-x: 12px; }
  html[data-tema="yeni"] .dhl-g2,
  html[data-tema="yeni"] .dhl-cols { grid-template-columns: 1fr; }
}

/* Genis ekran: kolon sikistirmak yerine tabloya nefes ver */
@media (min-width: 1600px) {
  html[data-tema="yeni"] { --row-pad-x: 12px; }
  html[data-tema="yeni"] .kpi-grid { grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); }
}

/* MASAUSTU FORM PUNTOSU — app-shell.css:291-294 TUM input/select/textarea'ya
 * "font-size: 14px !important" veriyor; 13px'lik veri diliyle catisiyor.
 * Ezme YALNIZ >=769px'te: mobile.css:87'nin iOS yakinlastirma onlemi
 * (16px !important, <=768px) TESADUFEN DEGIL BILEREK dokunulmadan kalir. */
@media (min-width: 769px) {
  html[data-tema="yeni"] .op-input,
  html[data-tema="yeni"] .input,
  html[data-tema="yeni"] .op-msg-input,
  html[data-tema="yeni"] .op-msg-text,
  html[data-tema="yeni"] .op-filter-bar input,
  html[data-tema="yeni"] .op-filter-bar select,
  html[data-tema="yeni"] .filter-bar input,
  html[data-tema="yeni"] .filter-bar select,
  html[data-tema="yeni"] .fc-oto-ip {
    font-size: var(--fs-base) !important;   /* !important: app-shell.css:293'un 14px !important'ini yener */
  }
}


/* ==========================================================================
 * 13) MOBIL — mevcut mobile.css kararlarini BOZMADAN gorsel uyum
 *     DIKKAT: bu dosya mobile.css'ten SONRA yuklendigi ve ozgullugu onunla
 *     BERABERE oldugu icin (0,2,1 = 0,2,1) mobil olculeri EZER. Bu yuzden
 *     mobil dokunma hedefleri ve alt menu payi burada tek tek GERI VERILIR.
 * ==========================================================================*/
@media (max-width: 900px) {
  /* app-shell.css:159 (1,0,0) ve mobile.css:51 (1,0,0) padding-bottom veriyor;
     bizim (1,1,1) kuralimiz onlari eziyordu → alt menunun (52px, iPhone'da
     +34px safe-area) altinda kalan son satir + pagination gorunmez oluyordu. */
  html[data-tema="yeni"] #main {
    padding: var(--d3) var(--d3) calc(80px + env(safe-area-inset-bottom, 0px));
  }
  html[data-tema="yeni"] .page-header { gap: var(--d2); margin-bottom: var(--d2); }
  html[data-tema="yeni"] .page-header h1 { font-size: var(--fs-md); }
  html[data-tema="yeni"] .kpi-grid { grid-template-columns: repeat(2, 1fr); }
  html[data-tema="yeni"] { --kpi-pad: 8px 10px; }
  /* fc-page kolu ZORUNLU: yukaridaki (0,3,1) kural mobile.css:365'in
     'body[data-page="fulfillment"] .fc-page .op-table-wrap' kuraliyla
     BERABERE (0,3,1) ve tema sonra yuklendigi icin onu ezerdi → telefonda
     tabloya 100vh-217px tavani binerdi. Ikisi de burada geri veriliyor. */
  html[data-tema="yeni"] .op-table-wrap { max-height: none; }
  html[data-tema="yeni"] .fc-page .op-table-wrap { max-height: none; overflow: auto; }
  html[data-tema="yeni"] .op-drawer { max-width: 100%; border-left: none; }
  html[data-tema="yeni"] .dhl-g2,
  html[data-tema="yeni"] .dhl-cols { grid-template-columns: 1fr; }
  /* Diyalog alttan sayfa olur; ayak butonlari safe-area ustunde kalir */
  html[data-tema="yeni"] .dhlp { border-radius: var(--radius-xl) var(--radius-xl) 0 0; max-height: 94vh; }
  html[data-tema="yeni"] .dhl-foot { position: sticky; bottom: 0; padding-bottom: calc(8px + env(safe-area-inset-bottom, 0px)); }
  html[data-tema="yeni"] .dhl-foot .op-btn { flex: 1 1 auto; }
  /* Mobil cekmecede sidebar satiri BUYUR (masaustunde asla — 8. kisit) */
  html[data-tema="yeni"] #sidebar .sidebar-nav a { height: auto; min-height: 44px; font-size: var(--fs-md); }
  html[data-tema="yeni"] #sidebar .sidebar-nav a svg { width: 19px; height: 19px; }
  html[data-tema="yeni"] #sidebar .sidebar-user-btn { min-height: 48px; }
  html[data-tema="yeni"] #sidebar .sidebar-user-menu { max-height: 60vh; overflow-y: auto; }
  html[data-tema="yeni"] #bottom-nav a { min-width: 44px; min-height: 44px; border-radius: var(--radius); touch-action: manipulation; }
  html[data-tema="yeni"] #bottom-nav a:active { background: var(--surface-active); }
  html[data-tema="yeni"] #bottom-nav a.active { background: var(--primary-soft); color: var(--primary); box-shadow: inset 0 var(--rail) 0 var(--primary); }
  html[data-tema="yeni"] #topbar .topbar-right .btn-icon { width: 40px; height: 40px; }
}

/* Mobil hedeflerin GERI VERILMESI (mobile.css:387-393 ile beraberlik cozumu) */
@media (max-width: 768px) {
  /* mobile.css:365 .fc-page kabina yeniden kaydirma veriyor → yapiskan baslik
     yine KAP icinde calisir; topbar payi geri alinmali, yoksa baslik kabin
     52px altinda asili kalir ve ~2 satir ortulur. */
  html[data-tema="yeni"] .fc-page .op-table thead { top: 0; }
  html[data-tema="yeni"] .op-btn,
  html[data-tema="yeni"] .btn,
  html[data-tema="yeni"] .op-msg-ch { min-height: 44px; height: auto; }
  html[data-tema="yeni"] .op-chip { min-height: 44px; height: auto; }
  /* 14. bolum artik >=769px'e kapali oldugu icin telefonda yalniz BU blok
     calisir; oradan gelen kucuk hedefler burada tek tek karsilaniyor. */
  html[data-tema="yeni"] .op-msg-tpl { min-height: 44px; }
  html[data-tema="yeni"] .dhl-step { height: 32px; }
  html[data-tema="yeni"] .fc-search-x { width: 36px; height: 36px; }
  html[data-tema="yeni"] .fc-search-x::after { inset: -4px; }
  html[data-tema="yeni"] .sidebar-user-btn,
  html[data-tema="yeni"] .sidebar-user-menu a,
  html[data-tema="yeni"] .sidebar-user-menu button { min-height: 44px; }
  html[data-tema="yeni"] .op-drawer .op-btn { min-height: 46px; }
  html[data-tema="yeni"] .fc-act { width: 44px; height: 44px; font-size: var(--fs-md); }
  html[data-tema="yeni"] .fc-act::after { left: 0; right: 0; top: 0; bottom: 0; }
  html[data-tema="yeni"] .op-cust-msg { width: 40px; height: 40px; margin: -8px 0 -8px 6px; font-size: var(--fs-md); }
  html[data-tema="yeni"] .op-cust-msg::after { left: 0; right: 0; top: 0; bottom: 0; }
  html[data-tema="yeni"] .op-table th input[type=checkbox],
  html[data-tema="yeni"] .op-table td input[type=checkbox] { width: 22px; height: 22px; }
  html[data-tema="yeni"] .op-drawer-close,
  html[data-tema="yeni"] .dhl-x,
  html[data-tema="yeni"] .cp-drawer-close { width: 44px; height: 44px; }
  html[data-tema="yeni"] .op-drawer-close::after,
  html[data-tema="yeni"] .dhl-x::after,
  html[data-tema="yeni"] .cp-drawer-close::after { inset: 0; }
  html[data-tema="yeni"] .fc-ftbant-x { min-height: 44px; }
  html[data-tema="yeni"] .op-table th,
  html[data-tema="yeni"] .op-table td { padding-left: var(--d2); padding-right: var(--d2); }
  html[data-tema="yeni"] .op-table td { padding-top: 8px; padding-bottom: 8px; }
  html[data-tema="yeni"] .fc-tabs { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; }
  html[data-tema="yeni"] .fc-tab { flex: 0 0 auto; height: 44px; min-height: 44px; }
  html[data-tema="yeni"] .dhl-badges,
  html[data-tema="yeni"] .dhl-tiles,
  html[data-tema="yeni"] .bk-money { grid-template-columns: repeat(2, 1fr); }
  html[data-tema="yeni"] .op-kv-r { grid-template-columns: 1fr; }
  html[data-tema="yeni"] .op-kv-not { grid-column: 1; }
  html[data-tema="yeni"] .dhl-pad .op-btn { height: 52px; min-height: 52px; }
}


/* ==========================================================================
 * 14) DOKUNMATIK — TEK KAPI: (any-pointer: coarse)
 *     (pointer: coarse) KULLANILMADI: fare + dokunmatik birlikte olan depo
 *     makinesinde birincil isaretleyici "fine"dir; o kapi HIC eslesmez ve
 *     tum dokunma katmani sessizce devre disi kalir (A'nin tek olumcul riski).
 *
 *     BURADA NE BUYUR / NE BUYUMEZ
 *      ✓ serbest kontroller 40px, kritik olanlar 44px
 *      ✓ satir dolgusu 3-4px → 7px (satir ~36 → ~42px; bugunku 49,75'in ALTINDA)
 *      ✗ SIDEBAR SATIRI ASLA (14x44 + kabuk = 781px > 648px viewport → 8. kisit)
 *      ✗ tablo dolgusu 9px'e cikarilmaz (C'nin hatasi: satir bugunun ALTINA
 *        dusuyordu, yani "dokunmatik iyilestirmesi" yogunlugu kaybettiriyordu)
 *
 *     🔴 10.08 KAPI DUZELTMESI — 'and (min-width: 769px)' EKLENDI.
 *     Bu blok 13. bolumle AYNI OZGULLUKTE (0,2,1) ve DOSYADA SONRA geliyordu;
 *     telefon her iki sorguyu da esledigi icin 13. bolumun mobil hedeflerini
 *     SESSIZCE eziyordu — yani dosyanin basliginda "mobile.css icin cozduk"
 *     diye ovundugu "beraberlik-ezmesi" arizasini tema KENDI ICINDE yeniden
 *     uretiyordu. Olculen kayiplar:
 *       .fc-act 44x44 → 44x34 · .op-cust-msg 40x40 → 32x32 ·
 *       kapat butonlari 44 → 40 · .fc-tab 44 → 40 · TUS TAKIMI 52 → 44
 *     Artik telefon (<=768) yalniz 13. bolumu, dokunmatik tablet/panel
 *     (>=769) yalniz bu blogu gorur. Kesisim yok.
 * ==========================================================================*/
@media (any-pointer: coarse) and (min-width: 769px) {
  html[data-tema="yeni"] {
    --ctl-h: 40px;
    --ctl-h-sm: 36px;
    --ctl-pad-x: 14px;
    --icon-h: 44px;
    /* 7px → 6px: hem 2px izgarasina oturur hem satiri ~42,6 → ~40,6px'e
       indirir (hedef hala >=40px) → ekran basina ~1 satir kazanc. */
    --row-pad-y: 6px;
  }
  /* Kritik / yikici eylemler ve tus takimi: 44px */
  html[data-tema="yeni"] .op-btn-primary,
  html[data-tema="yeni"] .btn-primary,
  html[data-tema="yeni"] .bk-halt-top,
  html[data-tema="yeni"] .dhl-pad .op-btn { height: 44px; min-height: 44px; }
  /* TABANIN 44px'INI TEMA EZIYORDU — geri veriliyor.
     FC_STYLE @coarse: .fc-oto{44} .fc-bal{44} .fc-tab{min-height:44}
     orders-page.css @coarse: .op-drawer .op-btn{min-height:46}
     Hepsi (0,1,0)/(0,2,0) iken tema (0,2,1) ile kazanip 40px'e indiriyordu. */
  html[data-tema="yeni"] .fc-oto,
  html[data-tema="yeni"] .fc-bal { height: 44px; min-height: 44px; }
  html[data-tema="yeni"] .op-drawer .op-btn { min-height: 46px; }
  /* Filtre cubugu HIZASI: tabanda @coarse tarih girdisi ve buton 44px,
     select ise tema'ya kaybedip 40px'te kaliyordu → ayni cubukta uc farkli
     yukseklik. Hepsi 44px'e esitlendi (dokunma hedefi de kazaniyor). */
  html[data-tema="yeni"] .fc-page .op-filter-bar input,
  html[data-tema="yeni"] .fc-page .op-filter-bar select,
  html[data-tema="yeni"] .fc-page .fc-search { height: 44px; min-height: 44px; }
  html[data-tema="yeni"] .btn-icon::after,
  html[data-tema="yeni"] .ws-refresh::after,
  html[data-tema="yeni"] #hamburger::after { inset: 0; }
  html[data-tema="yeni"] .op-drawer-close,
  html[data-tema="yeni"] .dhl-x,
  html[data-tema="yeni"] .fc-ftbant-x,
  html[data-tema="yeni"] .cp-drawer-close { width: 40px; height: 40px; min-width: 40px; }
  html[data-tema="yeni"] .op-drawer-close::after,
  html[data-tema="yeni"] .dhl-x::after,
  html[data-tema="yeni"] .fc-ftbant-x::after,
  html[data-tema="yeni"] .cp-drawer-close::after { inset: -2px; }
  html[data-tema="yeni"] .fc-search-x { width: 32px; height: 32px; }
  html[data-tema="yeni"] .fc-search-x::after { inset: -6px; }
  html[data-tema="yeni"] .op-msg-tpl { min-height: 44px; }
  /* 40 → 44: taban @coarse zaten 44 istiyordu, tema 40'a indiriyordu */
  html[data-tema="yeni"] .fc-tab { height: 44px; min-height: 44px; }
  /* Satir ici eylem: satir ~41px oldugu icin dikeyde 34px'e cikabilir;
     44x34 hedef, komsu satira TASMA YOK. Genisleme SAGA (bkz. taban kural). */
  html[data-tema="yeni"] .fc-act { width: auto; min-width: 44px; height: 34px; padding: 0 8px; font-size: var(--fs-md); }
  html[data-tema="yeni"] .fc-act::after { left: 0; right: -10px; top: -2px; bottom: -2px; }
  /* Negatif dikey marj: 32px'lik buton 10px'lik alt satirin satir kutusunu
     32px'e cikariyordu (olculen satir regresyonunun KOKU). Gorsel boyut ve
     hedef aynen kalir, satira KATKISI 16px'e iner. */
  html[data-tema="yeni"] .op-cust-msg { width: 32px; height: 32px; margin: -8px 0 -8px 6px; }
  html[data-tema="yeni"] .op-cust-msg::after { left: 0; right: -12px; top: -4px; bottom: -4px; }
  /* Onay kutusu: gorsel 24px, gercek hedef 44x36 — hucre icinde kalir */
  html[data-tema="yeni"] .op-table th input[type=checkbox],
  html[data-tema="yeni"] .op-table td input[type=checkbox] { width: 24px; height: 24px; }
  html[data-tema="yeni"] .op-table th input[type=checkbox]::after,
  html[data-tema="yeni"] .op-table td input[type=checkbox]::after { top: -6px; bottom: -6px; left: -10px; right: -10px; }
  html[data-tema="yeni"] .op-table th { padding-top: 6px; padding-bottom: 6px; }
  html[data-tema="yeni"] .op-kv-r { padding: 6px 0; }
  html[data-tema="yeni"] .fc-oto-satir { padding: var(--d2) 0; }
  html[data-tema="yeni"] .dhl-row { padding: 6px 8px; }
  html[data-tema="yeni"] .sidebar-user-btn,
  html[data-tema="yeni"] .sidebar-user-menu a,
  html[data-tema="yeni"] .sidebar-user-menu button { min-height: 44px; }
  /* Eldivenle kaydirma + uzun basista baglam menusu dokunusu yutmasin */
  html[data-tema="yeni"] .op-table-wrap,
  html[data-tema="yeni"] .dhl-list,
  html[data-tema="yeni"] .dhl-tblwrap,
  html[data-tema="yeni"] .op-drawer-body { -webkit-overflow-scrolling: touch; }
  html[data-tema="yeni"] .op-btn,
  html[data-tema="yeni"] .fc-tab,
  html[data-tema="yeni"] .op-chip,
  html[data-tema="yeni"] .dhl-step,
  html[data-tema="yeni"] .sidebar-nav a { -webkit-touch-callout: none; }
  /* Gizli kaydirma cubugu dokunmatikte kafa karistirir → kalin ve gorunur */
  html[data-tema="yeni"] ::-webkit-scrollbar { width: 12px; height: 12px; }
}

/* Dokunmatik + KISA ekran (depo 1366x768 dokunmatik paneli):
 * satir ~38px'e sabitlenir (bugunku 49,75'in cok altinda, dokunma icin
 * dolgu kutusu korunur). Sidebar satiri DEGISMEZ.
 * 🔴 10.08: --ctl-h 38px idi → .op-chip / .op-btn 40px esiginin ALTINA
 * duyuyordu ve mobile.css:499'un 44px'iyle beraberlikte onu da 38'e
 * indiriyordu. Projenin "hedef 40px'in altina inmez" sozlesmesi geri alindi.
 * Maliyet: filtre/cip seridinde 2px, sayfa basina bir kez. */
@media (any-pointer: coarse) and (min-width: 901px) and (max-height: 800px) {
  html[data-tema="yeni"] { --row-pad-y: 5px; --ctl-h: 40px; --icon-h: 40px; }
  html[data-tema="yeni"] .fc-act { height: 30px; }
}


/* ==========================================================================
 * 15) ERISILEBILIRLIK — hareket · kontrast · zorlanmis renk · baski
 * ==========================================================================*/

/* !important SART: hedef kurallarin bir kismi (main.css, app-shell.css legacy
   koprusu, JS ici <style>) dogrudan animation/transition yaziyor ve bir kismi
   kendisi !important tasiyor. Ayrica "* " secicisi (0,1,1) iki sinifli
   herhangi bir kurala (0,2,0) kaybeder → !important olmadan hareket azaltma
   FIILEN CALISMAZ. Kullanici tercihi her seyin ustundedir. */
/* 10.08: secici 'html[data-tema] *' idi → HTML'IN KENDISINI eslemiyordu;
   ayrica gecikmeler sifirlanmiyordu. Ikisi de eklendi. */
@media (prefers-reduced-motion: reduce) {
  html[data-tema="yeni"],
  html[data-tema="yeni"] *,
  html[data-tema="yeni"] *::before,
  html[data-tema="yeni"] *::after {
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    animation-delay: 0ms !important;
    transition-duration: 1ms !important;
    transition-delay: 0ms !important;
    scroll-behavior: auto !important;
  }
  html[data-tema="yeni"] .ws-pill .ws-dot { animation: none; }
  html[data-tema="yeni"] .ws-refresh:active { transform: none; }
  /* .dhl-spin donmeyi birakinca "devam ediyor" bilgisi yalniz .dhl-now
     metninde kalirdi → halka nabizsiz ama DOLU bir isarete cevrilir. */
  html[data-tema="yeni"] .dhl-spin { border-color: var(--primary); border-top-color: var(--primary); }
}

@media (prefers-contrast: more) {
  html[data-tema="yeni"] {
    --line: #9aa3ae;
    --border: #98a1ad;
    --border-strong: #5c6570;
    --ctl-border: #46505b;
    --text-secondary: #2b323b;
    --text-tertiary: #3b434c;
    --surface-sunken: #ffffff;
    --zebra: transparent;
    --primary-soft: rgba(104, 22, 32, .14);
  }
  /* Zebra susunca ayrim CIZGIYE devreder */
  html[data-tema="yeni"] .op-table td { border-bottom-color: var(--line); }
  html[data-tema="yeni"] .op-btn,
  html[data-tema="yeni"] .btn,
  html[data-tema="yeni"] .op-chip,
  html[data-tema="yeni"] .op-input { border-width: 2px; }
  /* Yumusak zeminli rozetler kontrastta CERCEVEYLE anlatilir */
  html[data-tema="yeni"] .badge,
  html[data-tema="yeni"] .op-status,
  html[data-tema="yeni"] .op-store,
  html[data-tema="yeni"] .op-ft,
  html[data-tema="yeni"] .op-kd,
  html[data-tema="yeni"] .dhl-bd,
  html[data-tema="yeni"] .dhl-step { box-shadow: inset 0 0 0 1.5px currentColor; }
  html[data-tema="yeni"] :focus-visible { outline-width: 4px; }
  html[data-tema="yeni"] .sidebar-nav a.active { box-shadow: inset var(--rail-bar) 0 0 var(--primary); }
}

/* Windows Yuksek Kontrast: zemin renkleri sistem tarafindan SILINIR.
   Sekil/cerceve/glif katmani ayakta kaldigi icin durumlar okunur kalir.
   10.08: ikinci kanallarin cogu box-shadow uzerine kuruluydu ve bu blok
   yalniz 3'unu telafi ediyordu. Telafisiz kalanlar eklendi:
   nokta aileleri (cercevesiz → Canvas uzerinde Canvas), .bk-mode (PARA
   HARCANAN mod), .fc-bulkbar, varsayilan disi filtre, ve en onemlisi
   SECILI SATIR bandi (box-shadow yerine outline ile anlatilir). */
@media (forced-colors: active) {
  html[data-tema="yeni"] .op-btn,
  html[data-tema="yeni"] .btn,
  html[data-tema="yeni"] .op-chip,
  html[data-tema="yeni"] .fc-tab,
  html[data-tema="yeni"] .op-kd,
  html[data-tema="yeni"] .op-ft,
  html[data-tema="yeni"] .op-kg,
  html[data-tema="yeni"] .badge,
  html[data-tema="yeni"] .dhl-bd,
  html[data-tema="yeni"] .dhl-row,
  html[data-tema="yeni"] .dhl-step,
  html[data-tema="yeni"] .fc-oto-dot,
  html[data-tema="yeni"] .fc-bal-dot,
  html[data-tema="yeni"] .dhl-chk .dot,
  html[data-tema="yeni"] .bk-mode,
  html[data-tema="yeni"] .fc-bulkbar { border: 1px solid CanvasText; }
  html[data-tema="yeni"] .op-table tbody tr:nth-child(even) td { background: Canvas; }
  html[data-tema="yeni"] .op-table td { border-bottom: 1px solid ButtonBorder; }
  html[data-tema="yeni"] .fc-tab.on,
  html[data-tema="yeni"] .op-chip.active,
  html[data-tema="yeni"] .op-filter-bar select.on,
  html[data-tema="yeni"] .op-filter-bar .on,
  html[data-tema="yeni"] .sidebar-nav a.active { border: 2px solid Highlight; }
  @supports selector(:has(*)) {
    html[data-tema="yeni"] .op-table tbody tr:has(input[type=checkbox]:checked) td {
      outline: 2px solid Highlight; outline-offset: -2px;
    }
  }
  html[data-tema="yeni"] :focus-visible { outline: 3px solid Highlight; }
}

/* Baski: kabuk ve etkilesim ogeleri cikar, veri kalir */
@media print {
  html[data-tema="yeni"] #sidebar,
  html[data-tema="yeni"] #topbar,
  html[data-tema="yeni"] #bottom-nav,
  html[data-tema="yeni"] .op-filter-bar,
  html[data-tema="yeni"] .fc-actbar,
  html[data-tema="yeni"] .fc-bulkbar,
  html[data-tema="yeni"] .op-pagination,
  html[data-tema="yeni"] .op-drawer-overlay { display: none; }
  html[data-tema="yeni"] .op-table-wrap { max-height: none; overflow: visible; border: none; }
  html[data-tema="yeni"] .op-table td { border-bottom: 1px solid #999999; }
  html[data-tema="yeni"] .op-table tbody tr:nth-child(even) td { background: transparent; }
}

/* ==== TEMA "YENI" SONU ==== */

/* ==========================================================================
 * ASILI KABUK — yeni temada da gecerli (25.08.2026)
 * Bu dosya EN SON yukleniyor: #sidebar yuksekligini 100dvh'ye cekiyordu ve
 * asili kartta 24px tasma yapiyordu. Olcu app-shell.css'teki token'lardan gelir.
 * Geri alma: bu blogu sil.
 * ========================================================================== */
html[data-tema="yeni"] #sidebar {
  height: calc(100dvh - var(--shell-gap) * 2);
  border: 1px solid var(--border);
  border-radius: var(--shell-radius);
}
html[data-tema="yeni"] #topbar {
  border: 1px solid var(--border);
  border-radius: var(--shell-radius);
}
@media (max-width: 900px) {
  html[data-tema="yeni"] #sidebar { height: auto; border-radius: 0; border-width: 0 1px 0 0; }
  html[data-tema="yeni"] #topbar  { border-radius: 0; border-width: 0 0 1px 0; }
}
