@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap');

:root {
  /* Renk paleti — modern, koyu tema */
  --bg: #0b0d12;
  --bg-elevated: #12151c;
  --card: #171b23;
  --card-hover: #1d2230;
  --border: #262b36;
  --accent: #f5a524;
  --accent2: #d9662a;
  /* Butonların arka plan rengi — Genel Ayarlar > Görünüm'den özel bir buton
     rengi seçilmemişse varsayılan olarak ana renklerin (--accent/--accent2)
     AYNISINI takip eder (bkz. js/branding.js applyButtonColor()); özel bir
     renk seçilirse JS bu ikisini AYNI hex değerine ayarlayıp butonları düz
     renge çevirir. */
  --btn-color: var(--accent);
  --btn-color2: var(--accent2);
  /* Sistem genelinde arka plan fotoğrafı — Genel Ayarlar > Görünüm'den
     yüklenir (bkz. js/branding.js applyBackgroundImage()). Varsayılan 'none'
     — hiçbir görsel yüklenmemişse düz koyu tema arka planı (--bg) aynen
     kalır, aşağıdaki body kuralı hiçbir şeyi değiştirmez. */
  --bg-image: none;
  --teal: #2dd4bf;
  --text: #f5f6f8;
  --text-muted: #9099ac;
  --danger: #f2495c;
  --success: #22c55e;
  /* KULLANICI İSTEĞİ: kasa ekranındaki (#posScreen) kategori butonlarının
     renklendirmesi masa/garson ekranındaki (#orderScreen .category-tab) ile
     AYNI olsun — seçili yeşil, seçili olmayan turuncu/sarı gradyan. Garson
     tarafı bu yeşili SADECE #orderScreen kapsamında tanımlı --gl-green
     (garson.css) olarak kullanıyor; kasa ekranı #orderScreen içine girmediği
     için aynı tonu kök (:root) seviyesinde de tanımlıyoruz — TEK kaynak,
     iki yerden erişilebilir (bkz. aşağıdaki .category-tab.active). */
  --accent-green: #1f7a34;

  /* Ölçek */
  --radius-sm: 10px;
  --radius-md: 14px;
  --radius-lg: 20px;
  --radius-xl: 28px;
  --shadow-sm: 0 2px 8px rgba(0,0,0,.25);
  --shadow-md: 0 8px 24px rgba(0,0,0,.35);
  --shadow-lg: 0 16px 48px rgba(0,0,0,.45);
}

/* Genel Ayarlar > Köşe Stili: "Keskin" seçilirse js/branding.js <html> öğesine bu
   class'ı ekler — tüm var(--radius-*)/var(--shadow-*) kullanan elemanlar otomatik
   olarak köşesiz/gölgesiz olur (yeni bir seçici eklemeye gerek yok). */
html.theme-sharp {
  --radius-sm: 0px;
  --radius-md: 0px;
  --radius-lg: 0px;
  --radius-xl: 0px;
  --shadow-sm: none;
  --shadow-md: none;
  --shadow-lg: none;
}

/* Genel Ayarlar > Görünüm: Koyu/Açık Mod anahtarı "Aydınlık" seçilirse
   js/branding.js <html> öğesine bu class'ı ekler (bkz. applyThemeMode()).
   Aynı --bg/--card/--text vb. değişken mekanizması (theme-sharp yukarıdaki
   gibi) kullanılıyor — paralel bir tema sistemi DEĞİL. Not: garson.html'in
   sipariş ekranı kendi sabit --gl-* değişkenleriyle çalıştığı için bu
   moddan etkilenmez (bilerek); fiş/adisyon yazdırma yüzeyleri de yazıcı
   çıktısı için bilerek siyah-beyaz sabit kalır. */
html.theme-light {
  --bg: #f4f5f7;
  --bg-elevated: #ffffff;
  --card: #ffffff;
  --card-hover: #eef0f3;
  --border: #dde1e7;
  --text: #14161a;
  --text-muted: #5b6270;
}

* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
body {
  margin: 0;
  font-family: 'Inter', -apple-system, "Segoe UI", Roboto, sans-serif;
  -webkit-font-smoothing: antialiased;
  background: var(--bg); color: var(--text); height: 100vh; overflow: hidden;
  letter-spacing: -0.01em;
}
/* Genel Ayarlar > Görünüm'den bir arka plan fotoğrafı yüklenmişse (bkz.
   js/branding.js applyBackgroundImage()) <html> öğesine 'has-bg-image' class'ı
   eklenir ve body'nin arkasına, okunabilirlik için koyu bir yarı-saydam katman
   (scrim) ile birlikte bu fotoğraf uygulanır. Görsel yoksa bu kural hiç
   devreye girmez, body yukarıdaki düz --bg rengini kullanmaya devam eder. */
html.has-bg-image body {
  background-image: linear-gradient(rgba(11,13,18,.78), rgba(11,13,18,.78)), var(--bg-image);
  background-size: cover;
  background-position: center;
  background-attachment: fixed;
  background-color: var(--bg);
}
.hidden { display: none !important; }
.screen { height: 100vh; width: 100vw; }

/* GENEL FORM ETİKETİ — VARSAYILAN DAVRANIŞ
   Tarayıcının varsayılanı <label> öğesini SATIR İÇİ (inline) gösterir; bu proje
   genelinde form alanları hep "<label>Metin <input></label>" şeklinde yazıldığı
   için (bkz. örn. Merkez Bağlantı Sihirbazı), bu varsayılan bırakılırsa etiket
   metni ile giriş kutusu YAN YANA/İÇ İÇE görünüp okunaksız hale geliyordu. Daha
   önce bazı ekranlarda (.form-block label, .filter-bar label, #mergeModal label
   vb.) bu tek tek elle düzeltilmişti; burada TÜM sayfalarda geçerli genel bir
   varsayılan tanımlıyoruz ki yeni eklenecek hiçbir form bu hatayı BİR DAHA
   yaşamasın. Düşük özgüllüğü (sadece etiket seçici) sayesinde, satır düzeninde
   yan yana durması gereken özel durumlar (ör. onay kutusu etiketleri) kendi
   daha özgül kurallarıyla (class/id veya inline style) sorunsuz üstüne yazmaya
   devam eder — hiçbiri bozulmaz. */
label { display: flex; flex-direction: column; gap: 6px; }

/* KAYDIRMA ÇUBUĞU — koyu temada varsayılan (açık renkli) işletim sistemi
   kaydırma çubukları göze batıyordu; temayla uyumlu, ince bir görünüm. */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--border); border-radius: 10px; border: 2px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background: var(--card-hover); background-clip: padding-box; }
* { scrollbar-width: thin; scrollbar-color: var(--border) transparent; }

/* ODAK (focus) HALKASI — klavye/erişilebilirlik ve genel cila için TÜM giriş
   alanlarında tutarlı bir vurgu; fare tıklamasında değil sadece klavye/gerçek
   odaklanmada belirir (:focus-visible), böylece tıklamalarda gereksiz halka
   çıkmaz. */
input:focus-visible, select:focus-visible, textarea:focus-visible, button:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 2px;
}
input, select, textarea { accent-color: var(--accent); }

/* GENEL FORM ALANI GÖRÜNÜMÜ — VARSAYILAN
   Bazı ekranlardaki form alanları (bkz. yukarıdaki <label> notu) hiçbir kapsayıcı
   sınıfa (.form-block, .filter-bar vb.) sahip olmadığı için tarayıcının çıplak
   beyaz giriş kutusu görünümünde kalıyor, koyu temanın ortasında göze batıyordu.
   Burada TÜM metin/sayı/şifre/tarih girişlerine, seçim kutularına ve çok satırlı
   alanlara temayla uyumlu bir varsayılan tanımlıyoruz; daha özgül kurallar
   (.login-box input, .form-block input vb.) her zaman olduğu gibi bunun üzerine
   yazmaya devam eder. */
input[type="text"], input[type="password"], input[type="number"], input[type="date"],
input[type="email"], input[type="search"], input[type="tel"], input[type="time"],
input:not([type]), select, textarea {
  font-family: inherit; color: var(--text); background: var(--bg-elevated);
  border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 10px 12px;
  font-size: 14px; transition: border-color .15s ease;
}
input[type="text"]:focus, input[type="password"]:focus, input[type="number"]:focus,
input[type="date"]:focus, input[type="email"]:focus, input[type="search"]:focus,
input[type="tel"]:focus, input[type="time"]:focus, input:not([type]):focus, select:focus, textarea:focus {
  outline: none; border-color: var(--accent);
}

/* LOGIN */
#loginScreen {
  display: flex; align-items: center; justify-content: center;
  background:
    radial-gradient(circle at 15% 20%, rgba(245,165,36,.08), transparent 40%),
    radial-gradient(circle at 85% 80%, rgba(45,212,191,.06), transparent 40%),
    var(--bg);
}
/* Kullanıcı isteği: logo solda, giriş formu sağda, tüm blok sayfada ortalı.
   #loginScreen zaten flex+center ile bu satırı (.login-wrap) sayfada ortalıyor;
   burada sadece iki sütunu yan yana, dikeyde hizalı ve aralarında boşluklu
   yerleştiriyoruz. */
.login-wrap { display: flex; align-items: center; gap: 64px; }
/* Sol sütun: SADECE logo (varsa) — kullanıcı isteği üzerine "Loren's POS" yazısı
   artık burada değil, sağdaki .login-box içinde (.login-wordmark, aşağıda).
   Logo yüklenmemişse (varsayılan, img hâlâ .hidden) bu sütun tamamen boş kalır;
   içeriksiz bir flex kolonu genişlik almadığı için .login-wrap görsel olarak
   sadece .login-box'u ortalar — sol tarafta boşluk/kırık görünüm OLUŞMAZ. */
.login-brand-col { display: flex; flex-direction: column; align-items: center; justify-content: center; }
.login-box {
  background: var(--card); padding: 44px 40px; border-radius: var(--radius-xl); width: 380px; max-width: 92vw;
  text-align: center; box-shadow: var(--shadow-lg); border: 1px solid var(--border);
}
/* KULLANICI İSTEĞİ (DEĞİŞİKLİK GEÇMİŞİ): "LOREN'S" siyah + "POS" (boşluksuz,
   bkz. index.html "LOREN'SPOS") Genel Ayarlar'daki ana renkle (var(--btn-color),
   admin özelleştirmezse turuncu) eşleşiyor — tıpkı diğer ekranların üst
   çubuğundaki ".brand span" vurgusu gibi. Eskiden "LOREN'S" kısmı Cinzel (ayrı
   bir Google Font, index.html'de koşulsuz link ediliyordu) kullanıyordu; kullanıcı
   "iki kelime AYNI font olsun, Cinzel olmasın" istedi — font-family/font-weight
   override'ları TAMAMEN KALDIRILDI, artık ".login-wordmark"ın kendi gövde
   fontunu/800 kalınlığını miras alıyor. SADECE renk (#14161a, siyah) hâlâ farklı
   — kullanıcı "renklerini değiştirme" dedi, bu yüzden color ÖZELLİKLE KORUNDU.
   NOT: "LOREN'S" span'i BİLEREK ".brand-name" DEĞİL ".login-fixed-name" sınıfını
   kullanıyor — ".brand-name" js/branding.js tarafından admin'in Genel Ayarlar'da
   girdiği (değişebilir) işletme adıyla dolduruluyor; bu başlık ise "Loren's POS"
   ÜRÜN adı, işletme adından bağımsız sabit kalmalı (bkz. index.html'deki not). */
.login-box .login-wordmark {
  margin: 0 0 6px; font-size: 28px; font-weight: 800; letter-spacing: -0.01em; color: var(--btn-color);
}
.login-box .login-wordmark .login-fixed-name {
  color: #14161a;
}
.login-box .sub { color: var(--text-muted); margin-bottom: 26px; font-size: 14px; }
.login-box input {
  width: 100%; padding: 14px 16px; margin-bottom: 12px; border-radius: var(--radius-sm); border: 1px solid var(--border);
  background: var(--bg-elevated); color: var(--text); font-size: 15px; font-family: inherit;
  transition: border-color .15s ease;
}
.login-box input:focus { outline: none; border-color: var(--accent); }
.hint { margin-top: 18px; font-size: 12px; color: var(--text-muted); }
.error-text { color: var(--danger); min-height: 18px; font-size: 13px; margin-top: 6px; }

/* Genel amaçlı "bilgi/uyarı" kutusu — ör. Patron Paneli'nde masasız bekleyen
   Lorens App siparişi uyarısı gibi, hatadan farklı ama dikkat çekmesi gereken
   kısa notlar için. */
.hint-box {
  background: color-mix(in srgb, var(--accent) 14%, var(--card));
  border: 1px solid color-mix(in srgb, var(--accent) 40%, transparent);
  color: var(--text);
  border-radius: var(--radius-sm);
  padding: 10px 14px;
  font-size: 13px;
  line-height: 1.5;
}

/* Dar/tablet ekranlarda iki sütun alt alta yığılsın (bkz. garson.css'teki
   aynı 720px kırılım noktası deseni) — logo/başlık üstte, giriş kutusu altta. */
@media (max-width: 720px) {
  .login-wrap { flex-direction: column; gap: 28px; }
}

/* KULLANICI İSTEĞİ: "telefon ekranından girişte logoyu kaldır giriş ekranını
   ortala ... ama sadece telefon için logoyu kaldır." — SADECE telefon
   genişliğinde (720px kırılımından daha dar) logo/başlık sütunu tamamen
   gizlenir, giriş kutusu tek başına ortalanmış kalır. 720-480px arası
   (küçük tablet) davranışı DEĞİŞMEDİ — orada logo/başlık üstte, kutu altta
   göstermeye devam ediyor.  */
@media (max-width: 480px) {
  .login-brand-col { display: none; }
  .login-wrap { gap: 0; }
}

/* KULLANICI İSTEĞİ (GERİ ALMA): giriş ekranı Müzik/Hava Durumu/Personel
   Notları widget sütunu ("rezalet görünüyor, eski hali çok daha iyi")
   kaldırıldı — ilgili tüm .login-widget* kuralları buradan silindi, giriş
   ekranı önceki (widget'sız) haline döndü. */

/* Kullanıcı isteği: PC'deki native uygulamadan (LorensPOS.exe) çıkmak için —
   bkz. index.html #loginExitBtn (js/app.js SADECE native app'te .hidden'ı
   kaldırır) ve bin/sube-kurulum/LorensPOSApp/MainForm.cs (WebMessageReceived).
   Sağ üst köşede, dikkat çekmeyen ama fark edilir küçük bir buton — yıkıcı bir
   işlem olduğu için (uygulamayı tamamen kapatır) btn-primary/accent renginde
   DEĞİL, nötr/ghost tonda. */
.login-exit-btn {
  position: fixed; top: 18px; right: 18px; z-index: 5;
  background: transparent; border: 1px solid var(--border); color: var(--text-muted);
  padding: 9px 16px; border-radius: var(--radius-sm); font-size: 13px; font-weight: 600;
  cursor: pointer; font-family: inherit; transition: border-color .15s ease, color .15s ease, background .15s ease;
}
.login-exit-btn:hover { border-color: var(--danger); color: var(--danger); background: var(--card-hover); }

/* KULLANICI İSTEĞİ (DÜZELTME): giriş ekranındaki "🟢 Bağlandı" göstergesi
   tamamen kaldırıldı (bkz. index.html) — .login-conn-status kuralı artık
   kullanılmıyor, temizlendi. */

/* BUTONLAR */
.btn-primary {
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2)); color: #171200;
  border: none; padding: 14px 20px; border-radius: var(--radius-sm); font-weight: 700; font-size: 15px;
  cursor: pointer; width: 100%; margin-top: 6px; font-family: inherit;
  transition: transform .1s ease, box-shadow .15s ease, filter .15s ease; box-shadow: var(--shadow-sm);
}
.btn-primary:hover { filter: brightness(1.08); box-shadow: var(--shadow-md); }
.btn-primary:active { transform: scale(.98); filter: brightness(.97); }
.btn-primary:disabled, .btn-ghost:disabled {
  opacity: .5; cursor: not-allowed; filter: none; transform: none; box-shadow: none;
}
.btn-large { padding: 18px; font-size: 17px; }
.btn-ghost {
  background: transparent; color: var(--text-muted); border: 1px solid var(--border);
  padding: 10px 16px; border-radius: var(--radius-sm); cursor: pointer; width: 100%; margin-top: 8px;
  font-family: inherit; font-size: 14px; transition: border-color .15s ease, color .15s ease, background .15s ease;
}
.btn-ghost:hover { border-color: var(--text-muted); color: var(--text); background: var(--card-hover); }

/* Kullanıcı isteği: kasa üst çubuğundaki "Masalar" + "Vardiya" + "Çıkış"
   butonları, kasadaki kategori butonlarıyla (bkz. .category-tab) EŞİT ölçüde
   büyütülüp belirginleştirildi. NOT: selector bilerek ".staff-info .btn-ghost.
   topbar-btn-lg" (aşağıdaki ".staff-info .btn-ghost" kuralıyla AYNI özgüllük
   seviyesinde ama ONDAN SONRA tanımlı değil, üstelik iki sınıflı) — sadece
   ".topbar-btn-lg" yazılsaydı ".staff-info .btn-ghost" kuralı (iki sınıf +
   üst öge, daha yüksek CSS özgüllüğü) padding'i sessizce EZERDİ (test
   sırasında gerçekten böyle olduğu tespit edildi). */
.staff-info .btn-ghost.topbar-btn-lg { padding: 13px 22px; font-size: 15px; font-weight: 600; border-radius: 999px; }
/* En az bir dolu masa varken js/app.js tarafından eklenir (bkz.
   refreshTablesState()) — Genel Ayarlar'daki ana/ikincil renk gradyanını alır
   (tıpkı .btn-primary gibi); dolu masa yoksa bu class hiç eklenmez, buton
   yukarıdaki .btn-ghost'un mevcut renksiz haliyle kalır. */
#openTablesBtn.tables-btn-has-open {
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2)); color: #171200;
  border-color: transparent; font-weight: 700;
}
#openTablesBtn.tables-btn-has-open:hover { filter: brightness(1.08); border-color: transparent; color: #171200; }
/* KULLANICI İSTEĞİ (2026-08-21, aynı gün 2. tur): "rezervasyon gelince masa
   butonu gibi renk değiştirsin masa açılınca renk değişiyor ya onun gibi
   olsun" — #openTablesBtn.tables-btn-has-open İLE BİREBİR AYNI idiom, işlem
   bekleyen (local_action='none' ve Lorens App'te iptal edilmemiş) bir
   rezervasyon varken "Rezervasyonlar" butonuna uygulanır (bkz. js/app.js
   refreshReservationsBadge()). */
#lorensReservationsBtn.lorens-res-btn-has-pending {
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2)); color: #171200;
  border-color: transparent; font-weight: 700;
}
#lorensReservationsBtn.lorens-res-btn-has-pending:hover { filter: brightness(1.08); border-color: transparent; color: #171200; }
/* KULLANICI İSTEĞİ (2026-08-25, madde 4): "Garson ekranına ad soyad yazan
   yerin yanına vardiya aç vardiya kapat butonu koy." — #openTablesBtn.
   tables-btn-has-open İLE BİREBİR AYNI idiom, vardiya AÇIKKEN (personel
   "Vardiya Aç"a basmış, henüz kapatmamış) #vardiyaToggleBtn'e uygulanır
   (bkz. js/garson.js renderVardiyaButton()) — mesai açık olduğu tek bakışta
   fark edilsin diye. */
#vardiyaToggleBtn.vardiya-open {
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2)); color: #171200;
  border-color: transparent; font-weight: 700;
}
#vardiyaToggleBtn.vardiya-open:hover { filter: brightness(1.08); border-color: transparent; color: #171200; }
/* Kullanıcı isteği: kasa ekranında masalara erişip oradan "Kasaya Dön"e
   basılacağı an belli olsun diye bu buton da (yukarıdaki #openTablesBtn ile
   AYNI iki renkli/gradyan idiom'u) çift renkli/belirgin yapıldı — normal
   .btn-ghost görünümünden ayrışsın diye. */
#openTablesBackBtn {
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2)); color: #171200;
  border-color: transparent; font-weight: 700;
}
#openTablesBackBtn:hover { filter: brightness(1.08); border-color: transparent; color: #171200; background: linear-gradient(135deg, var(--btn-color), var(--btn-color2)); }
.qty-btn { width: 44px; padding: 8px; font-size: 20px; margin: 0 8px; }

/* Merkez Bağlantı Sihirbazı'ndaki "Otomatik Kaydol / Elle Gir" mod seçici (bkz.
   public/yonetim.html #hqSetupWizardModal, public/js/yonetim.js initHqSetupWizard()) */
.hq-wizard-mode-toggle { display: flex; gap: 8px; margin-bottom: 14px; }
.hq-wizard-mode-toggle .btn-tab {
  flex: 1; background: transparent; color: var(--text-muted); border: 1px solid var(--border);
  padding: 10px 12px; border-radius: var(--radius-sm); cursor: pointer; font-family: inherit;
  font-size: 13px; font-weight: 600; transition: border-color .15s ease, color .15s ease, background .15s ease;
}
.hq-wizard-mode-toggle .btn-tab:hover:not(.active) { border-color: var(--text-muted); color: var(--text); }
.hq-wizard-mode-toggle .btn-tab.active {
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2)); color: #171200; border-color: transparent;
}

/* TOPBAR */
/* Kullanıcı isteği: "sığmayan içerik sağa sola kaydırınca çıkmasın... pc ekran
   optimizasyonunu tekrar yap" — dar pencerelerde/uzun işletme adlarında sağ
   taraftaki butonlar (Masalar/Vardiya/Çıkış) marka adıyla çakışıp yatay taşmaya
   sebep olabiliyordu. flex-wrap ile gerektiğinde ikinci satıra sarılıyor, sayfa
   genelinde yatay kaydırma çubuğu hiç çıkmıyor. */
/* KULLANICI İSTEĞİ: "en üst bar sabit kalsın ... sayfa aşağı indiği zaman" —
   üst çubuk artık sayfa kaydırıldığında ekranın en üstünde SABİT kalıyor
   (position: sticky). Bu SADECE body'nin kendisi kayan sayfalarda (bkz.
   patron.css .patron-body — yonetim/reçete/merkez/patron/patron-hub/
   muhasebe/depo/personel-patron) görsel bir etkisi olur; kasa/garson/mutfak
   gibi sabit tam-ekran (body{height:100vh;overflow:hidden}) sayfalarda zaten
   sayfa hiç kaymadığı için zararsız bir no-op'tur. z-index, mobil ☰ rapor
   menüsünün arka planı/panelinden (bkz. patron.css .report-nav-backdrop/
   .report-tabs, z-index 29/30) BİLEREK DAHA DÜŞÜK tutuldu — menü açıldığında
   üst çubuk da (sayfanın geri kalanıyla birlikte) arka plan örtüsünün altında
   kalıp hafifçe kararır, tutarlı bir "modal açık" hissi verir. Bu çubuğun
   GERÇEK yüksekliği js/branding.js applyTopbarHeightVar() ile ölçülüp
   --topbar-h CSS değişkenine yazılır — .report-tabs/.yonetim-sidebar gibi
   sayfanın kendi sticky kenar çubukları bu değişkeni kullanarak üst çubuğun
   ALTINDAN başlar (bkz. patron.css/yonetim.css). */
/* DÜZELTME (KULLANICI İSTEĞİ, 2026-08-12): "panel butonu varsa sayfa üstlerinde
   çıkan onun altındaki çizgiyi sil" — üst çubuğun (Panel/Patron/Masalar/Çıkış
   butonlarının bulunduğu bar) altındaki ince ayırıcı çizgi (border-bottom)
   kaldırıldı. Ekran görüntüsüyle doğrulandı (index.html/garson.html/hub.html —
   Playwright), üst çubuk artık arka planla (background: var(--card)) aynı
   yükseklikte kesintisiz bitiyor, altında görünür bir çizgi yok. */
.topbar {
  display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; row-gap: 8px;
  padding: 14px 22px; background: var(--card);
  position: sticky; top: 0; z-index: 25;
}
.brand { font-size: 18px; font-weight: 800; letter-spacing: -0.01em; display: flex; align-items: center; }
.brand span { color: var(--accent); }
/* Genel Ayarlar'da işletme adı özelleştirilirse bile "LOREN'S" kısmı normal metin
   rengi kalır — sadece ekran adını (POS/GARSON/...) vurgulayan span turuncu olmalı
   (bkz. js/branding.js — .brand-name, .brand span kuralından ayrı tutuluyor). */
.brand .brand-name { color: var(--text); }
/* Logo — Genel Ayarlar'dan yüklenirse js/branding.js bu img'i gösterir (varsayılan
   olarak .hidden ile gizli). Topbar'daki küçük ikon; login ekranındaki ayrı boyut
   için .brand-logo-login kullanılır. */
.brand-logo { height: 28px; width: auto; max-width: 140px; margin-right: 10px; object-fit: contain; }
/* Varsayılan 140px — Yönetim Panelinden (Genel Ayarlar > Görünüm) 60-400px
   aralığında ayarlanabilir; js/branding.js applyLoginLogoSize() bu CSS
   değişkenini günceller (bkz. rakip referans görsel: büyük dairesel logo). */
.login-brand-col .brand-logo-login { height: var(--login-logo-size, 140px); width: auto; max-width: 100%; margin: 0 auto 16px; display: block; object-fit: contain; }
.staff-info { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; row-gap: 6px; }
.staff-info .btn-ghost { width: auto; margin: 0; padding: 8px 14px; }
/* YENİ (Faz Z) — kullanıcı isteği: "panel butonu... onu renkli buton yap" —
   üst çubuğa (Faz Y) enjekte edilen "Panel"/"Patron Merkezi" bağlantısı
   (bkz. js/session.js maybeInjectAdminPanelLink/maybeInjectPatronPanelLink)
   artık diğer nötr/ghost butonlardan (Çıkış vb.) görsel olarak ayrışan,
   .btn-primary/#openTablesBtn.tables-btn-has-open ile AYNI vurgu rengi
   gradyanını kullanan belirgin bir buton — kullanıcının "Panel"e tek
   bakışta fark edip ulaşabilmesi için. */
/* DÜZELTME (KULLANICI İSTEĞİ, Faz X): eskiden ".staff-info .btn-panel-link" idi
   — SADECE .staff-info içindeyken uygulanıyordu. js/remote-relay.js
   injectRemoteBackLink() bu düğmeyi uzaktan erişim giriş kapısında (henüz
   .staff-info yokken, bkz. ensureRemoteLoginUI()) da kullandığı için kural
   .staff-info şartı OLMADAN, HER YERDE aynı görünümü versin diye genelleştirildi. */
.btn-panel-link {
  width: auto; margin: 0; padding: 8px 16px; border: none; font-weight: 700;
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2)); color: #171200;
  /* DÜZELTME (KULLANICI İSTEĞİ): "patron merkezi yazısındaki alt çizgiyi
     kaldır" — bu bir <a> etiketi olduğundan (bkz. js/session.js
     maybeInjectAdminPanelLink/maybeInjectPatronPanelLink, js/remote-relay.js
     injectRemoteBackLink) tarayıcı varsayılanı olarak altı çizili görünüyordu,
     hiçbir kural bunu ezmiyordu. */
  text-decoration: none; display: inline-block; cursor: pointer;
  /* DÜZELTME (KULLANICI İSTEĞİ, #216 — "buton hizaladın ama üzerine mouse
     gelince oluşan gölge efektleri eklememişsin"): bu buton AYNI vurgu
     gradyanını kullanan .btn-primary/#openTablesBtn.tables-btn-has-open ile
     görsel dilde eşleşsin isteniyordu (bkz. yukarıdaki eski not) ama SADECE
     rengi kopyalanmış, .btn-primary'nin taban box-shadow'u VE geçiş
     (transition) tanımı hiç eklenmemişti — bu yüzden hover'da filter
     değişikliği ani/sert oluyordu ve gölge derinleşmesi (box-shadow:
     var(--shadow-md)) hiç görünmüyordu. Artık ikisi de .btn-primary ile
     BİREBİR aynı. */
  box-shadow: var(--shadow-sm);
  transition: transform .1s ease, box-shadow .15s ease, filter .15s ease;
}
/* DÜZELTME (#216, İKİNCİ TUR — "üzerine gelince beyaz yapmışsın, diğer
   butonlar hafif açık turuncu olup arkasında gölge efekti oluyor onlar
   gibi yap"): kök neden — bu link'in gerçek class listesi
   `btn-ghost btn-panel-link` (bkz. js/session.js maybeInjectAdminPanelLink/
   maybeInjectPatronPanelLink, js/remote-relay.js injectRemoteBackLink).
   `.btn-ghost:hover` (yukarıda) `background: var(--card-hover)` set
   ediyor; `.btn-panel-link:hover` bu satıra kadar `background`'ı HİÇ
   yeniden tanımlamıyordu, bu yüzden aynı özgüllükteki (class+:hover) İKİ
   kuralda "son tanımlayan kazanır" kuralı `background` özelinde
   `.btn-ghost:hover`'ı öne çıkarıyordu — `--card-hover` AÇIK temada
   neredeyse beyaz (#eef0f3), bu da turuncu gradyanın hover'da BEYAZA
   dönüşmüş gibi görünmesine yol açıyordu (koyu temada bu daha az fark
   ediliyordu, `--card-hover` koyu bir ton olduğundan). Diğer AYNI-ailedeki
   butonlar (.btn-primary vb.) `.btn-ghost` class'ını hiç taşımadığından bu
   çakışmaya maruz kalmıyor, bu yüzden onlarda hover doğru şekilde
   "hafif açık turuncu" (brightness(1.08) uygulanmış gradyan) görünüyordu.
   Çözüm: gradyanı burada AÇIKÇA yeniden tanımlayıp `.btn-ghost:hover`'ın
   ezmesini engelle. */
.btn-panel-link:hover {
  filter: brightness(1.08); color: #171200; text-decoration: none; box-shadow: var(--shadow-md);
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2));
}
.btn-panel-link:active { transform: scale(.98); filter: brightness(.97); }
.branch-switcher {
  padding: 8px 12px; border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--bg-elevated);
  color: var(--text); font-size: 13px; font-weight: 600; font-family: inherit;
}

/* MAIN LAYOUT */
/* KULLANICI İSTEĞİ (DEĞİŞİKLİK GEÇMİŞİ, ESKİ HAL): kategori çubuğu üstte yatay
   bir şerit olarak dururdu (ürün grid'inin üzerinde, "auto 1fr" satırlarıyla),
   sepet paneli sağda 300px sabitti — bkz. bir önceki turdaki not (kategoriler
   3 satırdan 2 satıra indirilmişti). KULLANICI YENİ İSTEĞİ: "kasa ekranındaki
   katagori listesini sepet panelinin soluna dikey yap" — yani kategoriler artık
   YATAY/üstte değil, DİKEY bir sütun olarak sepetin HEMEN SOLUNDA duruyor
   (garson.html'deki adisyon ekranının #orderScreen .category-tabs'ında zaten
   kanıtlanmış aynı "dikey kategori sütunu" deseni burada da kullanıldı — bkz.
   garson.css). Düzen artık 3 sütunlu TEK satır: [ürünler 1fr] [kategoriler dar
   sütun] [sepet 300px]. Kategori sütununun genişliği garson.css'teki
   #orderScreen ile AYNI clamp(110px, 11vw, 150px) değeri — o ekranda zaten
   Playwright ile doğrulanmış, uzun kategori adlarının (ör. "İçecekler",
   "Ana Yemekler") sarılarak sığdığı bir değer, burada da aynen kullanılıyor. */
/* DÜZELTME: kullanıcı isteği: "ödeme al ve sepeti temizle butonlarını biraz
   yukarı al, sepeti temizle butonu aşağıda ezilmiş". Kök sebep: grid-template-rows
   "1fr" değil "minmax(0, 1fr)" olmalıydı — "1fr" tek başına satırın minimum
   boyutunu içeriğe göre (auto) belirliyor, yani sepette çok satır olduğunda
   satır (ve içindeki .cart-panel) .main'in kendi height:calc(100vh - 58px)
   sınırını aşıp büyüyebiliyordu — bu da Toplam/Ödeme Al/Sepeti Temizle'yi
   ekranın görünür alanının dışına itiyordu. minmax(0, 1fr) satırı gerçekten
   .main'in yüksekliğine sabitliyor, .cart-items'teki (min-height:0 ile
   birlikte, aşağıda) overflow-y:auto artık gerçekten devreye giriyor. */
/* DÜZELTME (KULLANICI İSTEĞİ): "kasa ekranında katagori listesi tam ekranda
   aşağı geçiyor ekran altına, onun alt kısmını sepeti temizle butonunun alt
   kısmı gibi hizala". Kök sebep: buradaki "58px" sabit bir TAHMİNDİ — gerçek
   .topbar yüksekliği (padding + staff-info buton boyutları zamanla büyüdüğü
   için, ör. .topbar-btn-lg) artık 58px'in ÜZERİNDE (ör. 74px). .main bu yanlış
   sabitle .screen'in (100vh) gerçekte kalan yüksekliğinden BÜYÜK
   hesaplanıyordu, bu yüzden hem kategori sütunu HEM sepet paneli aynı miktarda
   ekranın altından TAŞIYORDU — ama sepet panelinin en alt kısmı (Sepeti
   Temizle butonu) içerik olarak panelin üst kısmına yakın durduğundan bu
   taşma orada sadece boş bir alanı kırpıyordu (gözle fark edilmiyordu),
   kategori sütununda ise taşan kısım TAM DA son kategori butonunun ortasından
   geçtiği için görünüşte "kategori listesi ekranın altına taşıyor" gibi
   duruyordu. Artık --topbar-h, js/app.js'te .topbar'ın GERÇEK render edilmiş
   yüksekliği ölçülüp (ve pencere yeniden boyutlanınca/staff-info sarınca
   güncellenip) yazılıyor (bkz. syncPosTopbarHeightVar()) — .main artık HER
   ZAMAN gerçek kalan yüksekliği kullanıyor, kategori sütunu da sepet paneli
   ile birebir AYNI alt sınırda bitiyor (her ikisi de aynı grid satırında).
   --topbar-h JS henüz çalışmadıysa (ör. çok ilk boyama) 58px'e düşer.
   DÜZELTME (KULLANICI İSTEĞİ, TEKRAR BİLDİRİLDİ — "yine sonsuz aşağı
   iniyor"): yukarıdaki --topbar-h tabanlı yaklaşım TEORİDE doğru olsa da
   (birçok ekran boyutunda/rolde test edildi, taşma bulunamadı) JS'in DOĞRU
   ZAMANDA çalıştığına (topbar'a admin/patron "Panel" linki enjekte
   edilmeden ÖNCE ölçüm yapılmışsa, ya da mobil tarayıcılarda 100vh'ın
   adres çubuğu görünür/gizliyken FARKLI değerler dönmesi gibi durumlarda)
   HER ZAMAN güvenilir değil — JS'e hiç bağımlı olmayan bir çözüm daha
   sağlam: #posScreen artık flex sütun (bkz. aşağıdaki #posScreen kuralı),
   `.main` ARTIK "100vh eksi tahmini topbar" HESAPLAMIYOR, bunun yerine
   flex kapsayıcısında kalan TÜM alanı `flex:1; min-height:0` ile dolduruyor
   — bu, tarayıcının kendi layout motoruna bırakılan, topbar'ın GERÇEK
   yüksekliği ne olursa olsun (kaç satıra sardığı, ne zaman değiştiği önemli
   değil) HER ZAMAN doğru sonucu veren bir yöntem (#orderScreen/garson.css
   zaten aynı deseni kullanıyor, orada hiç taşma bildirilmedi). --topbar-h
   burada ARTIK KULLANILMIYOR (başka sayfalarda/CSS'lerde hâlâ kullanılan
   GENEL bir değişken olduğu için silinmedi, sadece BURADA referans
   edilmiyor). */
#posScreen { display: flex; flex-direction: column; }
.main { display: grid; grid-template-columns: 1fr clamp(110px, 11vw, 150px) 300px; grid-template-rows: minmax(0, 1fr); flex: 1; min-height: 0; }
/* Kategoriler artık DİKEY tek sütun — flex-wrap KAPALI (nowrap), max-height
   YOK (sütun kendi grid hücresinin tam yüksekliğini kaplayıp taşarsa
   overflow-y:auto ile kayar). white-space artık "normal" (nowrap DEĞİL) —
   dar bir dikey sütunda uzun kategori adlarının satıra sığmayıp kırpılması
   yerine buton içinde alt satıra sarması gerekiyor (aynı gerekçeyle
   #orderScreen .category-tab da "white-space: normal" kullanıyor). */
.category-tabs {
  grid-column: 2 / 3; grid-row: 1;
  display: flex; flex-direction: column; flex-wrap: nowrap; gap: 8px; padding: 10px;
  max-height: none; overflow-y: auto; overflow-x: hidden; position: relative;
  border-left: 1px solid var(--border); border-right: 1px solid var(--border);
  background: var(--bg-elevated);
}
/* KULLANICI İSTEĞİ (#214, ÜÇÜNCÜ TUR) — bkz. js/app.js setupCategoryScrollHint()
   notu: bu dar/koyu sütunda genel kaydırma çubuğu (::-webkit-scrollbar-thumb,
   var(--border) — bg-elevated'a çok yakın bir ton) neredeyse fark edilmiyordu.
   Burada SADECE bu sütuna özel daha belirgin bir renk kullanılıyor. */
.category-tabs::-webkit-scrollbar-thumb { background: var(--text-muted); }
/* Liste gerçekten taştığında (JS ölçüyor) görünen, alt kenara yapışık (sticky)
   "daha var" çizgisi — en alta kaydırılınca JS bu class'ı kaldırır.
   DÜZELTME (#214, DÖRDÜNCÜ TUR — "alt kısımda gölgeli beyaz birşey görünüyor
   çok kötü görünüyor"): eski gradyan+"▾" karakteri AÇIK temada çirkin bir
   beyaz leke gibi görünüyordu (`--bg-elevated` açık temada #fff). Kullanıcının
   önerisiyle (garson.css .garson-bottombar'ın Ödeme/Kapat butonlarının hemen
   ÜSTÜNDEKİ ince `border-top` çizgisiyle AYNI fikir) gradyan tamamen
   kaldırıldı — artık tek renkli, ince, vurgu renginde sade bir çizgi; hem
   koyu hem açık temada net görünür, tema-bağımlı bir arkaplan rengi
   OLMADIĞINDAN "leke" görünümü yapısal olarak imkansız. */
.category-tabs-more-hint {
  display: none; position: sticky; bottom: 0; left: 0; right: 0; height: 3px;
  margin-top: -3px; background: var(--accent); border-radius: 2px; pointer-events: none;
}
.category-tabs-more-hint.visible { display: block; }
.category-tab {
  /* KULLANICI İSTEĞİ: masa/garson ekranındaki (#orderScreen .category-tab,
     bkz. garson.css) çift renkli (seçili yeşil / seçili değil turuncu-sarı
     gradyan) şema kasa ekranına da uygulandı — önceden nötr kart rengi
     (--card) / vurgu rengi (--btn-color) ayrımıydı. */
  flex: 0 0 auto; padding: 12px 8px; border-radius: 12px;
  background: linear-gradient(135deg, var(--btn-color), var(--btn-color2));
  color: #171200; cursor: pointer; font-size: 13px; font-weight: 600; white-space: normal;
  text-align: center; border: 1px solid var(--border); transition: all .15s ease;
}
.category-tab.active {
  background: var(--accent-green); color: #fff; font-weight: 700;
  border-color: var(--accent-green); box-shadow: 0 3px 10px rgba(31,122,52,.35);
}

.product-grid {
  /* Kullanıcı isteği: "kasa ekranındaki ürün butonlarını biraz daha küçült
     yazıları küçültme" — kutu boyutu (grid hücresi/padding/aralık) küçültüldü,
     ama .name/.price font-size'ı BİLEREK aynı bırakıldı (aşağıda değişmedi). */
  grid-column: 1 / 2; grid-row: 1; padding: 14px; overflow-y: auto; align-content: start;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(128px, 1fr)); gap: 10px;
}
.product-card {
  background: var(--card); border-radius: var(--radius-md); padding: 12px 10px; cursor: pointer;
  text-align: center; border: 1px solid var(--border); user-select: none;
  box-shadow: var(--shadow-sm); transition: transform .1s ease, background .1s ease, box-shadow .1s ease, border-color .15s ease;
}
/* Kullanıcı isteği: kasa ürün kutularına da masa kartlarındaki (.table-card:hover,
   bkz. garson.css) AYNI hover efekti — kart hafifçe yukarı kalkar, gölge
   derinleşir, kenarlık vurgu rengine döner. Dokunmatik ekranlarda etkisiz,
   sadece fare ile gezinen masaüstü kullanıcıları için. */
.product-card:hover { background: var(--card-hover); transform: translateY(-4px); box-shadow: var(--shadow-md); border-color: var(--accent); }
.product-card:active { background: var(--card-hover); transform: scale(.97); }
.product-card .name { font-weight: 600; font-size: 14px; margin-bottom: 6px; min-height: 36px; letter-spacing: -0.01em; }
.product-card .price { color: var(--accent); font-weight: 700; font-size: 15px; }

/* CART */
.cart-panel {
  grid-column: 3 / 4; grid-row: 1; background: var(--card); border-left: 1px solid var(--border);
  padding: 18px; display: flex; flex-direction: column; min-height: 0; overflow: hidden;
}
.cart-panel h2 { margin: 0 0 14px; font-size: 16px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; color: var(--text-muted); }
/* DÜZELTME: kullanıcı isteği: "ödeme al ve sepeti temizle butonlarını biraz
   yukarı al, sepeti temizle butonu aşağıda ezilmiş". Kök sebep: .cart-items
   flex:1 idi ama min-height:0 EKSİKTİ — flex öğelerinin varsayılan
   min-height:auto değeri, sepette çok satır olduğunda .cart-items'in kendi
   İÇERİK yüksekliği kadar büyümesine (overflow-y:auto'yu devre dışı
   bırakarak) izin veriyordu, bu da altındaki toplam/butonları .cart-panel'in
   dışına, ekranın en altına doğru sıkıştırıyordu. min-height:0 ile
   .cart-items artık gerçekten kendi içinde kaydırılıyor, alttaki butonlar
   sabit kalıyor. Ayrıca iki buton arasına ve altına biraz boşluk eklendi —
   önceden boşluksuz gerçekten "ezilmiş" görünüyordu. */
.cart-items { flex: 1; overflow-y: auto; min-height: 0; }
.cart-line { border-bottom: 1px solid var(--border); padding: 12px 0; }
.cart-line .line-top { display: flex; justify-content: space-between; font-weight: 600; font-size: 14px; }
.cart-line .line-opts { font-size: 12px; color: var(--text-muted); margin-top: 3px; }
/* KULLANICI İSTEĞİ: "masaya ürün eklendiğinde katagori başlığınıda ekle" — sepet
   (garson.js refreshOrder() / app.js ktRefreshOrder()) artık kategoriye göre
   gruplanıyor, her grubun üstünde bu başlık gösteriliyor. İlk başlıktan önceki
   fazla üst boşluğu kırpmak için ilk çocuk (:first-child) margin-top sıfırlanıyor. */
.cart-category-header {
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em;
  color: var(--text-muted); margin: 14px 0 2px; padding-bottom: 4px;
  border-bottom: 1px solid var(--border);
}
.cart-category-header:first-child { margin-top: 0; }
.cart-total {
  display: flex; justify-content: space-between; align-items: center; padding: 16px 0 4px;
  border-top: 1px solid var(--border); font-size: 15px; color: var(--text-muted);
}
.cart-total strong { color: var(--accent); font-size: 24px; font-weight: 800; }
#checkoutBtn { margin-top: 4px; }
/* KULLANICI İSTEĞİ: "kasadaki sepeti temizleyi biraz daha yukarı al" — üstteki
   boşluk (eskiden 10px) küçültülerek buton "Ödeme Al" butonuna daha yakın,
   yukarı çekildi. */
#clearCartBtn { margin-top: 4px; margin-bottom: 6px; }

/* Paket Servisi raporu (bkz. api/report_paket_servisi.php) — kasa ekranındaki
   sepet panelindeki "Sipariş Türü" seçici. */
.order-type-label { font-size: 12px; color: var(--text-muted); margin-top: 10px; }
.order-type-label select {
  padding: 10px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg-elevated);
  color: var(--text); font-size: 14px;
}

/* Kullanıcı isteği: "sığmayan içerik sağa sola kaydırınca çıkmasın... pc ekran
   optimizasyonunu tekrar yap" — .main'in 1fr/kategori-sütunu/300px sepet
   düzeni daha önce hiçbir media query'ye sahip değildi; dar bir PC penceresinde
   (ör. yan yana iki pencere) sepet + kategori sütunu toplamı ürün alanını
   ezip yatay taşmaya sebep olabiliyordu. garson.css'teki #orderScreen için
   zaten kanıtlanmış aynı kırılım noktaları (900px/600px) burada da kullanıldı —
   sepet ve kategori sütunu kademeli olarak daralıyor, hiçbir öğe kaybolmuyor. */
@media (max-width: 900px) {
  .main { grid-template-columns: 1fr clamp(90px, 10vw, 120px) 240px; }
  .cart-panel { padding: 14px; }
  .product-grid { grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); gap: 8px; padding: 10px; }
}
@media (max-width: 600px) {
  .main { grid-template-columns: 1fr 84px 200px; }
  .cart-panel { padding: 10px; }
  .product-grid { grid-template-columns: repeat(auto-fill, minmax(96px, 1fr)); }
}

/* MODAL */
.modal {
  position: fixed; inset: 0; background: rgba(5,6,9,.7); backdrop-filter: blur(2px); display: flex;
  align-items: center; justify-content: center; z-index: 50; padding: 20px;
  animation: modal-fade-in .15s ease;
}
@keyframes modal-fade-in { from { opacity: 0; } to { opacity: 1; } }
.modal-box {
  background: var(--card); border-radius: var(--radius-lg); padding: 28px; width: 90%; max-width: 440px;
  max-height: 85vh; overflow-y: auto; border: 1px solid var(--border); box-shadow: var(--shadow-lg);
  animation: modal-pop-in .15s ease;
}
@keyframes modal-pop-in { from { opacity: 0; transform: translateY(6px) scale(.98); } to { opacity: 1; transform: none; } }
/* Alanı çok olan sihirbaz/form tipi pencereler (ör. Merkez Bağlantı Sihirbazı) için
   biraz daha geniş bir varyant — dar 440px'te uzun etiket/metinler sıkışıyordu. */
.modal-box.modal-box-wide { max-width: 560px; }
/* KULLANICI İSTEĞİ: "varyasyon sorgusu ekranını tam sığdır, bara gönder
   butonu aşağı indirince çıkıyor." Kök neden: genel `.modal-box` kuralı
   TÜM içeriği (başlık+varyasyon grupları+ekstra+adet+butonlar) TEK bir
   `overflow-y:auto` bloğu olarak sarıyordu — çok sayıda varyasyon/ekstra
   seçeneği olan bir üründe içerik 85vh'yi aşınca "Sepete/Mutfağa/Bara
   Gönder" butonu görünür alanın DIŞINA düşüyordu. #optionModal'a ÖZEL
   olarak (diğer modalları etkilemeden) modal-box'ı flex-column yapıp SADECE
   `.option-modal-scroll` kısmını kaydırılabilir yapıyoruz — butonlar her
   zaman modal-box'ın SABİT alt kısmında, görünür kalıyor. */
#optionModal .modal-box {
  display: flex; flex-direction: column; overflow-y: hidden;
}
#optionModal .option-modal-scroll {
  overflow-y: auto; min-height: 0; margin: 0 -4px; padding: 0 4px;
}
#optionModal #addToCartBtn,
#optionModal #cancelOptionBtn {
  flex-shrink: 0;
}
.modal-box h3 {
  margin: 0 0 6px; font-weight: 800; letter-spacing: -0.01em; font-size: 20px;
}
.modal-box .form-block:first-of-type,
.modal-box label:first-of-type { margin-top: 4px; }
/* UYGULAMA İÇİ MESAJ PENCERELERİ (appAlert/appConfirm/appPrompt — bkz. app-dialog.js).
   Tarayıcının native alert/confirm/prompt penceresi yerine geçer, mevcut
   .modal/.modal-box ile aynı temayı kullanır — z-index'i diğer modallardan da
   yüksek tutuyoruz ki bir modalın İÇİNDEN açılan bir onay penceresi (ör. bir
   ayarlar penceresindeki "silmek istediğinize emin misiniz?") her zaman en üstte
   görünsün. */
.app-dialog-modal { z-index: 200; }
.app-dialog-box { max-width: 420px; text-align: center; }
.app-dialog-text { font-size: 16px; line-height: 1.5; margin: 4px 0 20px; color: var(--text); white-space: pre-line; }
.app-dialog-input {
  width: 100%; box-sizing: border-box; padding: 12px 14px; border-radius: var(--radius-sm);
  border: 1px solid var(--border); background: var(--bg-elevated); color: var(--text);
  font-size: 15px; margin-bottom: 20px;
}
.app-dialog-actions { display: flex; gap: 12px; }
.app-dialog-actions button { flex: 1; }
/* appChoice() — appConfirm'in sabit-seçenekli varyantı (bkz. app-dialog.js
   "kind: 'choice'"): seçenekler dikey, tam genişlikte buton listesi olarak
   dizilir; alttaki tek "Vazgeç" butonu (.app-dialog-actions içinde) ayrı kalır. */
.app-dialog-choices { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
.app-dialog-choice-btn { width: 100%; text-align: center; }

.opt-group { margin-bottom: 18px; }
.opt-group-title { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; color: var(--text-muted); margin-bottom: 10px; }
.opt-choice, .addon-choice {
  display: flex; justify-content: space-between; padding: 12px 14px; border-radius: var(--radius-sm);
  background: var(--bg-elevated); margin-bottom: 6px; cursor: pointer; border: 1px solid transparent;
  transition: all .12s ease; font-size: 14px;
}
.opt-choice.selected, .addon-choice.selected { border-color: var(--accent); background: var(--card-hover); }
.qty-row { display: flex; align-items: center; justify-content: center; margin: 18px 0; }

/* KULLANICI İSTEĞİ: "müşteri ürünün aynı şurubundan daha fazla ekstra olarak
   varyasyon da ekleyebilir buna ek olarak farklı bir şurup da ekleyebilir" —
   ekstralar (addon) artık tek tıkla açık/kapalı bir satır DEĞİL, her satırda
   kendi +/- adet düğmesi olan bir liste (bkz. js/app.js, js/garson.js
   openItemModal()). Seçili değilken (count=0) satır .addon-choice ile aynı
   görünür, count>0 olunca .selected ile aynı vurgulanır — eski görünümle
   tutarlı, sadece "tıkla-aç/kapa" yerine "+/- ile adet" var. */
.addon-choice { cursor: default; align-items: center; gap: 10px; }
.addon-choice-name { flex: 1 1 auto; }
.addon-choice-controls { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.addon-qty-btn {
  width: 26px; height: 26px; border-radius: 50%; border: 1px solid var(--border);
  background: var(--bg); color: var(--text); font-size: 15px; font-weight: 700;
  display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0;
}
.addon-qty-btn:active { background: var(--btn-color); color: #171200; border-color: var(--btn-color); }
.addon-qty-count { min-width: 16px; text-align: center; font-weight: 700; font-size: 14px; }

.pay-total { text-align: center; font-size: 15px; color: var(--text-muted); margin-bottom: 18px; }
.pay-total strong { color: var(--accent); font-size: 22px; font-weight: 800; display: block; margin-top: 4px; }
.pay-methods { display: flex; flex-direction: column; gap: 10px; }
.pay-method-btn {
  padding: 16px; border-radius: var(--radius-sm); border: 1px solid var(--border); background: var(--bg-elevated);
  color: var(--text); font-size: 15px; font-weight: 500; cursor: pointer; font-family: inherit;
  transition: all .12s ease;
}
.pay-method-btn:active { background: var(--btn-color); color: #171200; border-color: var(--btn-color); }
#paymentResult { min-height: 20px; text-align: center; margin-top: 10px; color: var(--danger); font-size: 13px; }
#receiptDetails { text-align: center; margin: 16px 0; line-height: 1.8; }
#receiptDetails .big { font-size: 26px; color: var(--accent); font-weight: 800; }

/* ORTAK: split ödeme bileşeni (bkz. split-payment.js) — index.html ve garson.html paylaşır */
.split-pay-lines { display: flex; flex-direction: column; gap: 8px; margin: 14px 0; }
.split-pay-line {
  display: flex; gap: 8px; align-items: center; background: var(--bg-elevated); border: 1px solid var(--border);
  border-radius: var(--radius-sm); padding: 8px 10px;
}
.split-pay-line select {
  flex: 0 0 128px; padding: 10px 8px; border-radius: 8px; border: 1px solid var(--border);
  background: var(--card); color: var(--text); font-family: inherit; font-size: 13px;
}
.split-pay-line input[type=number] {
  flex: 1; min-width: 0; padding: 10px 8px; border-radius: 8px; border: 1px solid var(--border);
  background: var(--card); color: var(--text); font-family: inherit; font-size: 15px; font-weight: 600;
}
.split-pay-line .split-remove-btn {
  flex: 0 0 auto; background: transparent; border: none; color: var(--text-muted); cursor: pointer;
  font-size: 18px; padding: 4px 8px; line-height: 1;
}
.split-pay-line .split-remove-btn:hover { color: var(--danger); }
.split-pay-toolbar { display: flex; gap: 8px; margin-bottom: 4px; }
.split-pay-toolbar button {
  flex: 1; padding: 10px; border-radius: var(--radius-sm); border: 1px dashed var(--border);
  background: transparent; color: var(--text-muted); font-family: inherit; font-size: 12px; cursor: pointer;
}
.split-pay-toolbar button:hover { border-color: var(--accent); color: var(--accent); }
.split-pay-remaining {
  display: flex; justify-content: space-between; align-items: center; padding: 12px 14px;
  border-radius: var(--radius-sm); background: var(--bg-elevated); margin: 10px 0; font-size: 14px;
}
.split-pay-remaining strong { font-size: 17px; }
.split-pay-remaining.ok { background: rgba(34,197,94,.12); }
.split-pay-remaining.ok strong { color: var(--success); }
.split-pay-remaining.warn strong { color: var(--danger); }
.split-mode-tabs { display: flex; gap: 8px; margin-bottom: 16px; }
.split-mode-tab {
  flex: 1; padding: 10px; text-align: center; border-radius: var(--radius-sm); border: 1px solid var(--border);
  background: var(--bg-elevated); color: var(--text-muted); cursor: pointer; font-size: 13px; font-weight: 600;
}
.split-mode-tab.active { background: var(--btn-color); color: #171200; border-color: var(--btn-color); }
.person-tabs { display: flex; gap: 6px; margin-bottom: 14px; flex-wrap: wrap; }
.person-tab {
  padding: 8px 14px; border-radius: 999px; border: 1px solid var(--border); background: var(--bg-elevated);
  color: var(--text-muted); cursor: pointer; font-size: 13px; font-weight: 600;
}
.person-tab.active { background: var(--teal); color: #062622; border-color: var(--teal); }
.assign-item-row {
  display: flex; justify-content: space-between; align-items: center; padding: 10px 12px;
  border-radius: var(--radius-sm); background: var(--bg-elevated); margin-bottom: 6px; font-size: 14px;
}
.assign-item-row .assign-chips { display: flex; gap: 4px; flex-wrap: wrap; }
.assign-chip {
  padding: 5px 10px; border-radius: 999px; border: 1px solid var(--border); background: var(--card);
  color: var(--text-muted); font-size: 12px; cursor: pointer;
}
.assign-chip.assigned { background: var(--teal); color: #062622; border-color: var(--teal); }

/* CANLI SAAT/TARİH (bkz. js/branding.js injectLiveClock) — kullanıcı isteği:
   "bütün sisteme aktif saat ve tarih ekle, köşede şık duran, görsel olarak
   rahatsız etmeyen küçük olsun". Sol-alt köşede — sistemdeki diğer sabit
   konumlu elemanlar (#notifBannerRoot, .login-exit-btn) sağda/üstte olduğu
   için hiçbir ekranda çakışma olmaz (eski "🏠 Panel" sağ-alt butonu artık üst
   çubuğa taşındı, bkz. aşağıdaki not).
   KULLANICI İSTEĞİ (sonraki tur): "saat/tarih göstergesi soluk/düşük
   kontrastlı duruyor, belirgin/kalın yapılmalı" — eskiden var(--text-muted)
   + opacity:.85 kombinasyonu (soluk gri üstüne bir de saydamlık) okumayı
   zorlaştırıyordu. Artık tam kontrastlı var(--text) + font-weight:700 +
   opacity:1 kullanılıyor; "rahatsız etmeyen küçük" isteğini korumak için
   boyut/köşe/konum aynı kaldı, SADECE metin rengi/kalınlığı güçlendirildi. */
#globalLiveClock {
  position: fixed; left: 14px; bottom: 14px; z-index: 20;
  background: var(--card); border: 1px solid var(--border); border-radius: 999px;
  padding: 6px 14px; font-size: 12px; font-weight: 700; color: var(--text); box-shadow: var(--shadow-sm);
  pointer-events: none; user-select: none; opacity: 1; white-space: nowrap; letter-spacing: .2px;
}
@media (max-width: 640px) {
  /* Küçük ekranlarda (garson/mutfak tableti, telefon) yer kaplamasın diye
     sadece saat gösterilir — tarih/gün adı kısaltılmadan sığmaz. */
  #globalLiveClock { font-size: 11px; padding: 5px 10px; }
}

/* TAM EKRAN GEÇİŞ BUTONU (bkz. js/fullscreen.js) — her sayfada sağ altta, admin
   panel bağlantısının (varsa) üstünde kalacak şekilde konumlanır. */
/* KULLANICI İSTEĞİ: "tam ekran yapma kutusunu tüm sistemden kaldır" — eski
   .fs-toggle-btn (sağ alt köşedeki "⛶" butonu) kaldırıldı, bkz.
   js/fullscreen.js (injectToggleButton() silindi). */

/* ÖZEL SAĞ TIK MENÜSÜ (bkz. js/fullscreen.js initContextMenuGuard) — tarayıcının
   normal sağ tık menüsü yerine gösterilen, sadece "Yenile" içeren küçük menü. */
.pos-context-menu {
  position: fixed; z-index: 10000; min-width: 132px;
  background: var(--card); border: 1px solid var(--border); border-radius: var(--radius-md, 8px);
  box-shadow: var(--shadow-md); padding: 4px; animation: modal-fade-in .1s ease;
}
.pos-context-menu button {
  display: flex; align-items: center; gap: 8px; width: 100%;
  padding: 9px 12px; border: none; background: transparent; color: var(--text);
  font-size: 14px; text-align: left; cursor: pointer; border-radius: var(--radius-sm, 6px);
}
.pos-context-menu button:hover { background: var(--bg-elevated); }

/* ESKİ "🏠 Panel"/"🏠 Patron Merkezi" SAĞ-ALT SABİT BUTONU (.admin-panel-link)
   KALDIRILDI (KULLANICI İSTEĞİ — düzeltme): "patron merkezine dönmek için
   koyduğun butonu sağ üst köşeye kullanıcı adının soluna koy" — bkz.
   js/session.js maybeInjectAdminPanelLink()/maybeInjectPatronPanelLink():
   bağlantı artık .staff-info içine (üst çubuğa) enjekte ediliyor, diğer üst
   çubuk butonlarıyla AYNI .btn-ghost sınıfını kullanıyor — ayrı bir CSS
   kuralına gerek kalmadı. */

/* BİLDİRİM BANNER (Faz L: Merkez/şube -> kasa (PC)/garson (tablet) bildirimleri)
   — bkz. js/app.js ve js/garson.js initNotificationPolling(). Kalıcı DEĞİL —
   sayfa yenilenince/kapanınca kaybolur (bkz. api/notification_poll.php'deki
   "since_id imleç" gerekçesi).
   KULLANICI İSTEĞİ (DÜZELTME): "Bildirim mesajları da ekranın üst orta
   kısmında büyük olarak çıksın" — önceden sağ üstte, küçük punto ile
   gösteriliyordu; artık ekranın ÜST-ORTA noktasına (left:50% + translateX
   ile) taşındı ve punto/dolgu/genişlik belirgin şekilde büyütüldü. */
#notifBannerRoot {
  position: fixed; top: 16px; left: 50%; transform: translateX(-50%); z-index: 10000;
  display: flex; flex-direction: column; align-items: center; gap: 10px;
  width: 100%; max-width: 560px; padding: 0 12px; box-sizing: border-box;
}
.notif-banner {
  background: var(--card, #1c1f26); border: 1px solid var(--accent, #f5a524);
  border-left: 5px solid var(--accent, #f5a524); border-radius: var(--radius-md, 10px);
  padding: 18px 22px; box-shadow: var(--shadow-md, 0 8px 24px rgba(0,0,0,.4));
  color: var(--text, #fff); font-size: 17px; font-weight: 600; line-height: 1.45;
  display: flex; align-items: flex-start; gap: 14px; width: 100%;
  animation: notifBannerIn .18s ease-out;
}
@keyframes notifBannerIn { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }
.notif-banner .notif-banner-text { flex: 1 1 auto; word-break: break-word; }
.notif-banner .notif-banner-close {
  background: transparent; border: none; color: var(--text-muted, #aaa); cursor: pointer;
  font-size: 20px; line-height: 1; padding: 0 2px; flex: 0 0 auto;
}
.notif-banner .notif-banner-close:hover { color: var(--text, #fff); }
