/* WEST veri paneli — tek bicim dosyasi.
   Kural: satir ici bicim yok, !important yok. Renkler degiskenden gelir. */

/* ==========================================================================
   RENK SİSTEMİ — okunabilirlik kuralı

   Her renk çiftinin kontrastı ölçülerek seçildi (WCAG AA):
     · gövde ve rozet yazısı  → en az 4.5:1
     · çizgi, çerçeve, çubuk  → en az 3:1

   İKİ AYRI VURGU vardır, karıştırılmaz:
     --vurgu       DOLGU rengidir. Üstüne beyaz yazı biner (düğme, etkin sekme).
                   Bu yüzden koyu modda da KOYU kalır; açılırsa beyaz yazı silinir.
     --vurgu-yazi  YAZI ve ÇİZGİ rengidir (bağlantı, odak halkası, çubuk dolgusu).
                   Koyu modda AÇILIR; koyu kalırsa koyu zeminde okunmaz.

   Aynı ayrım anlam renklerinde de geçerli: --iyi / --bekle / --kotu / --aksiyon
   / --mor yalnızca YAZI ve çizgi rengidir, koyu modda açık tona döner.
   Beyaz yazı binen tek dolgu --kotu-dolgu'dur ve iki modda da sabittir.

   MARKA PALETİ (Cooper 10-07: "logo renkleri marka paletimiz, her yerde" — GOVERNANCE/marka/MARKA-PALETI.md).
   Açık: vurgu = Lacivert #143C72 (beyaz yazı 10.94) · tehlike = Magenta #DA1C5C (kartta 4.88, dolguda beyaz 4.88).
   Koyu: vurgu = Camgöbeği #00AFD1 (üstüne KOYU yazı #0F1A2E 6.67 → --vurgu-ustu) · bekle/vurgu = Sarı #FAC753.
   Eşiği bozan kullanım YOK (ölçüldü): Magenta pembe uyarı zemininde 4.00 → uyarı metni --kotu koyu kırmızıda
   kalır; koyu temada Magenta yazı 3.39 → yalnız dolgu/çerçeve, yazısı Magenta'nın açık tonu #F57FA5 (6.67).
   ========================================================================== */
:root {
  color-scheme: light;
  --lacivert: #0f1e33;
  --lacivert-acik: #1b3050;
  /* Görsel yenileme (onaylı tasarım 10-07): zemin/yüzey/çizgi/metin tasarım değerleri. */
  --zemin: #f3f5f9;
  --matrix-fg: rgba(20, 33, 58, .10);   /* s76 (J) arka plan yağmuru — açık temada koyu mürekkep, düşük alfa */
  --kart: #ffffff;           /* yüzey */
  --cizgi: #e2e7ef;          /* saç teli ayraç: satır, tablo, bölüm */
  --cerceve: #7c889d;        /* tıklanan öğenin sınırı: input, select (≥3:1 — tasarımın açık çizgisi bunu sağlamaz) */
  --yazi: #14213a;
  --yazi-soluk: #5a6a82;
  --vurgu: #143c72;          /* DOLGU (marka Lacivert) — üstüne --vurgu-ustu biner */
  --vurgu-koyu: #0e2d57;     /* üzerine gelince */
  --vurgu-yazi: #143c72;     /* YAZI ve çizgi (bağlantı, odak halkası) */
  --vurgu-ustu: #ffffff;     /* --vurgu dolgusunun üstündeki yazı */
  --vurgu-hafif: #e7edf6;    /* seçili menü / cip zemini */
  --tehlike: #da1c5c;        /* marka Magenta — tehlike düğmesi yazı/çerçeve (kart üstünde) */
  --marka-cizgi: #00afd1;    /* Camgöbeği çizgi */
  --gecis: linear-gradient(90deg, #f1890f, #e13333 34%, #ae5071 66%, #3992ff);   /* logodaki WEST geçişi */
  --iyi: #166534;
  --iyi-zemin: #e3f4ec;
  --bekle: #92400e;
  --bekle-zemin: #fff3d6;
  --kotu: #991b1b;
  --kotu-zemin: #fce8ef;
  --kotu-dolgu: #da1c5c;     /* DOLGU (marka Magenta) — üstüne beyaz yazı biner, iki modda da sabit */
  --aksiyon: #9a3412;
  --aksiyon-zemin: #ffedd5;
  --mor: #5b21b6;
  --mor-zemin: #ede9fe;
  --notr-zemin: #f1f4f9;
  --whatsapp: #128a43;
  --golge: 0 1px 2px rgba(20, 33, 58, .06), 0 4px 16px rgba(20, 33, 58, .05);
  --yuvarlak: 10px;
  --yuvarlak-buyuk: 14px;    /* bölüm/kart */
  /* ARALIK ÖLÇEĞİ — boşluklar bundan seçilir (envanter: önceden hiç yoktu). */
  --a1: 4px; --a2: 8px; --a3: 12px; --a4: 16px; --a5: 24px; --a6: 32px;
  --yazi-baslik: "Cormorant Garamond", Georgia, "Times New Roman", serif;
  --yazi-govde: Figtree, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --logo-acik: block;
  --logo-koyu: none;
  --balon-ben: #143c72;      /* kendi mesaj balonu */
  --balon-ben-yazi: #ffffff;
  --balon-ad: #ae5071;       /* balondaki gönderen adı: marka Gül (beyazda 5.02) */
  --etiket-zemin: #e3eeff;   /* s54 @etiket rozeti: marka Mavi #3992FF açık tonu */
  --etiket-yazi: #143c72;    /* Lacivert */
  --kime-zemin: #dff5fa;     /* s54 akış kartı KİME rozeti: Camgöbeği açık tonu */
}

/* D46 (10-07): koyu tema YALNIZ EKRANDA — baskı her zaman açık tema (beyaz kâğıda beyaz yazı olmasın).
   Görsel yenileme: kullanıcı menüdeki düğmeyle temayı seçebilir (html[data-theme]); seçim yoksa cihaz teması. */
@media screen and (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;      /* takvim, kaydırma çubuğu, açılır liste de koyu gelsin */
    --zemin: #0b1322;
    --matrix-fg: rgba(127, 224, 255, .15);   /* s76 (J) koyu temada camgöbeği ≤ .15 (Cooper brief'i) */
    --kart: #111c30;
    --cizgi: #22324c;
    --cerceve: #61759a;
    --yazi: #e7edf6;
    --yazi-soluk: #9aa9bf;
    --vurgu: #00afd1;          /* marka Camgöbeği dolgu — üstüne KOYU yazı */
    --vurgu-koyu: #33c1dd;
    --vurgu-yazi: #00afd1;
    --vurgu-ustu: #071423;
    --vurgu-hafif: #0e2b3e;
    --tehlike: #f57fa5;        /* Magenta açık tonu: Magenta yazı koyu zeminde 3.39, eşik altı */
    --notr-zemin: #16233a;
    --iyi: #4cc38a;
    --iyi-zemin: #123227;
    --bekle: #fac753;          /* marka Sarı */
    --bekle-zemin: #3a2e10;
    --kotu: #f87171;
    --kotu-zemin: #3a1424;
    --aksiyon: #fb923c;
    --aksiyon-zemin: #37210f;
    --mor: #a78bfa;
    --mor-zemin: #241a44;
    --whatsapp: #25d366;
    --golge: 0 1px 2px rgba(0, 0, 0, .3);
    --logo-acik: none;
    --logo-koyu: block;
    --balon-ben: #0e4c68;
    --balon-ben-yazi: #eaf7fb;
    --balon-ad: #f1890f;       /* koyu zeminde Gül 3.47 — Turuncu (palet kuralı: koyuda Turuncu) */
    --etiket-zemin: #14305a;
    --etiket-yazi: #8cc0ff;    /* marka Mavi açık tonu */
    --kime-zemin: #0e2b3e;
  }
}
@media screen {
  :root[data-theme="dark"] {
    color-scheme: dark;      /* takvim, kaydırma çubuğu, açılır liste de koyu gelsin */
    --zemin: #0b1322;
    --matrix-fg: rgba(127, 224, 255, .15);   /* s76 (J) koyu temada camgöbeği ≤ .15 (Cooper brief'i) */
    --kart: #111c30;
    --cizgi: #22324c;
    --cerceve: #61759a;
    --yazi: #e7edf6;
    --yazi-soluk: #9aa9bf;
    --vurgu: #00afd1;          /* marka Camgöbeği dolgu — üstüne KOYU yazı */
    --vurgu-koyu: #33c1dd;
    --vurgu-yazi: #00afd1;
    --vurgu-ustu: #071423;
    --vurgu-hafif: #0e2b3e;
    --tehlike: #f57fa5;        /* Magenta açık tonu: Magenta yazı koyu zeminde 3.39, eşik altı */
    --notr-zemin: #16233a;
    --iyi: #4cc38a;
    --iyi-zemin: #123227;
    --bekle: #fac753;          /* marka Sarı */
    --bekle-zemin: #3a2e10;
    --kotu: #f87171;
    --kotu-zemin: #3a1424;
    --aksiyon: #fb923c;
    --aksiyon-zemin: #37210f;
    --mor: #a78bfa;
    --mor-zemin: #241a44;
    --whatsapp: #25d366;
    --golge: 0 1px 2px rgba(0, 0, 0, .3);
    --logo-acik: none;
    --logo-koyu: block;
    --balon-ben: #0e4c68;
    --balon-ben-yazi: #eaf7fb;
    --balon-ad: #f1890f;       /* koyu zeminde Gül 3.47 — Turuncu (palet kuralı: koyuda Turuncu) */
    --etiket-zemin: #14305a;
    --etiket-yazi: #8cc0ff;    /* marka Mavi açık tonu */
    --kime-zemin: #0e2b3e;
  }
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
  background: var(--zemin);
  color: var(--yazi);
  font: 15px/1.5 var(--yazi-govde);
  /* Bölünemeyen uzun metin (e-posta, bağlantı, uzun ünvan) kartı yarıp
     taşmasın; sığmıyorsa alt satıra iner. Dar telefonda asıl taşma sebebi. */
  overflow-wrap: break-word;
}

a { color: var(--vurgu-yazi); text-decoration: none; }
a:hover { text-decoration: underline; }

/* Klavyeyle gezinirken odağın NEREDE olduğu her iki modda da görünsün.
   Fare ile tıklamada çıkmaz (:focus-visible), yalnızca klavye/Tab'da. */
a:focus-visible, button:focus-visible, .dugme:focus-visible,
summary:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--vurgu-yazi);
  outline-offset: 2px;
}
h1, h2, h3 { margin: 0 0 .6rem; line-height: 1.25; }
/* Sayfa başlığı: marka başlık yazısı (Cormorant Garamond 600). Alt başlıklar gövde yazısıyla. */
h1 { font-family: var(--yazi-baslik); font-weight: 600; letter-spacing: .01em; }
h1 { font-size: 1.75rem; line-height: 1.1; }
h2 { font-size: 1.05rem; }
h3 { font-size: .98rem; }
h1 small, h2 small, h3 small { font-weight: 400; color: var(--yazi-soluk); font-size: .8em; margin-left: .5rem; }
/* Grup 5: panelde kod yazısı (eş aralıklı) görünmez — dosya adı/anahtar da gövde yazısıyla, hafif zeminli
   (kabul protokolü §2 · denetle.js monospace). Rakamlar eş genişlikte kalsın diye tabular-nums. */
code, .kod {
  font-family: var(--yazi-govde);
  font-variant-numeric: tabular-nums;
  font-size: .92em;
  background: var(--notr-zemin);
  padding: .15rem .35rem;
  border-radius: 4px;
}
.kod { display: block; padding: .6rem .8rem; word-break: break-word; }

h1 small { font-family: var(--yazi-govde); }

/* ==========================================================================
   KABUK — onaylı tasarım (Cooper 10-07). Geniş ekranda SOL SABİT MENÜ + üst şerit;
   ≤860 px'te menü gizlenir, ALT 5 SEKME gelir (Daha → menü panel olarak açılır).
   Sınıf adları öneklidir (yan-, ust-, alt-sekme, mo) — eski/başka sınıfla çakışmasın
   (taslakta .av çakışması avatarı ovalleştirmişti).
   ========================================================================== */
.uygulama { display: grid; grid-template-columns: 232px minmax(0, 1fr); min-height: 100vh; min-height: 100dvh;
  /* Sol sütun zemini sayfa boyunca sürer: yapışkan menü ekran boyu kadar; uzun sayfanın altında sütun boş kalmasın. */
  background: linear-gradient(to right, var(--kart) 231px, var(--cizgi) 231px 232px, transparent 232px); }

/* --- sol menü --- */
.yan-menu {
  position: sticky; top: 0; height: 100vh; height: 100dvh; overflow-y: auto;
  background: var(--kart); border-right: 1px solid var(--cizgi);
  display: flex; flex-direction: column; gap: 2px;
  padding: calc(var(--a4) + env(safe-area-inset-top, 0px)) var(--a3) var(--a4);
  z-index: 30;
}
.yan-menu::before { content: ""; position: absolute; inset: 0 0 auto 0; height: 3px; background: var(--gecis); }
.yan-logo { display: block; padding: var(--a1) 10px var(--a4); }
.yan-logo img, .ust-logo img { width: 150px; height: auto; }
.logo-acik { display: var(--logo-acik); }
.logo-koyu { display: var(--logo-koyu); }
.yan-baslik { font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--yazi-soluk);
  padding: var(--a3) var(--a3) var(--a1); }
.mo {
  display: flex; align-items: center; gap: var(--a3); padding: 9px var(--a3); border-radius: var(--yuvarlak);
  color: var(--yazi-soluk); font-weight: 500; text-decoration: none;
}
.mo .ikon { width: 19px; height: 19px; }
/* s57 (M-16361): menüdeki Sohbet okunmamış rozeti — liste rozetiyle (.ko .ok) aynı dolgu (Magenta, beyaz yazı 4.88). */
.sohbet-rozet { margin-left: auto; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; background: var(--kotu-dolgu);
  color: #fff; font-size: 11px; font-weight: 700; line-height: 20px; text-align: center; font-variant-numeric: tabular-nums; box-sizing: border-box; }
.sohbet-rozet[hidden] { display: none; }
.mo:hover { background: var(--notr-zemin); color: var(--yazi); text-decoration: none; }
.mo[aria-current="page"] { background: var(--vurgu-hafif); color: var(--vurgu-yazi); font-weight: 600; }
/* Alt girişler yalnız grup açıkken (o grubun sayfasındayken) görünür. */
.mo-alt { display: none; flex-direction: column; margin: 2px 0 var(--a1) 31px; border-left: 1px solid var(--cizgi); }
.yan-grup.acik .mo-alt { display: flex; }
.mo-alt a { color: var(--yazi-soluk); font-size: .88rem; padding: 6px var(--a3); border-radius: 0 8px 8px 0; margin-left: -1px;
  border-left: 2px solid transparent; }
.mo-alt a:hover { color: var(--yazi); background: var(--notr-zemin); text-decoration: none; }
.mo-alt a[aria-current="page"] { color: var(--vurgu-yazi); font-weight: 600; border-left-color: var(--vurgu-yazi); }
/* Alt: kişi tam genişlik (ad + rol kesilmesin), tema/çıkış altında sağa yaslı. */
.yan-alt { margin-top: auto; border-top: 1px solid var(--cizgi); padding-top: var(--a3); display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.yan-alt .yan-kisi { flex: 1 1 100%; }
.yan-alt [data-tema] { margin-left: auto; }
.yan-kisi { display: flex; align-items: center; gap: 10px; padding: 6px; flex: 1; min-width: 0; color: var(--yazi); border-radius: var(--yuvarlak); }
.yan-kisi:hover { background: var(--notr-zemin); text-decoration: none; }
.yan-kisi b { display: block; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.yan-kisi small { display: block; color: var(--yazi-soluk); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.yan-kisi > span { min-width: 0; }
.yan-kisi .si-avatar { width: 34px; height: 34px; font-size: 13px; }
.cikis-form { display: contents; }

/* Kare simge düğmesi (tema, çıkış, zil) — genel düğme kuralının istisna listesinde. */
.ikon-d {
  border: 1px solid var(--cizgi); background: var(--kart); color: var(--yazi-soluk);
  width: 40px; height: 40px; min-height: 0; padding: 0; border-radius: var(--yuvarlak);   /* dokunma hedefi ≥40 (kabul protokolü) */
  display: inline-grid; place-items: center; position: relative; cursor: pointer; flex: none;
}
.ikon-d:hover { color: var(--yazi); border-color: var(--cerceve); }
.ikon-d .ikon { width: 18px; height: 18px; }

/* --- üst şerit --- */
.ana { min-width: 0; display: flex; flex-direction: column; }
.ust-serit {
  position: sticky; top: 0; z-index: 20;
  display: flex; align-items: center; gap: var(--a4);
  padding: calc(var(--a3) + env(safe-area-inset-top, 0px)) var(--a5) var(--a3);
  background: var(--kart); border-bottom: 1px solid var(--cizgi);
}
.ust-logo { display: none; }
.ust-tarih { color: var(--yazi-soluk); font-size: 13px; }
.ust-sag { margin-left: auto; display: flex; align-items: center; gap: var(--a2); }

/* --- bildirim zili ve açılır listesi (JS: data-zil-*) --- */
.zil-sarmal { position: relative; }
.zil-sarmal[hidden] { display: none; }
.zil-sayi[hidden] { display: none; }   /* okununca kırmızı sayı kaybolur (zil görünür kalır) */
.zil-sayi {
  position: absolute; top: -6px; right: -6px; min-width: 18px; height: 18px; padding: 0 4px;
  border-radius: 999px; background: var(--kotu-dolgu); color: #fff; border: 2px solid var(--kart);
  font-size: .68rem; font-weight: 700; display: flex; align-items: center; justify-content: center; box-sizing: content-box;
}
.zil-kutu {
  position: absolute; top: calc(100% + .5rem); right: 0; width: 320px; max-width: calc(100vw - 1.2rem);
  background: var(--kart); color: var(--yazi); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk);
  box-shadow: 0 12px 32px rgba(0, 0, 0, .18); z-index: 40; overflow: hidden auto; overscroll-behavior: contain;   /* s54: yükseklik JS'te (kutuBoyutla) */
}
.zil-kutu[hidden] { display: none; }
.zil-baslik { padding: .6rem .9rem; font-size: .78rem; font-weight: 600; color: var(--yazi-soluk);
  border-bottom: 1px solid var(--cizgi); background: var(--notr-zemin); }
.zil-kutu a { color: var(--yazi); }
.zil-kutu .zil-dip { color: var(--vurgu-yazi); display: block; padding: .6rem .9rem; font-size: .85rem; }
.zil-satir { display: flex; align-items: center; gap: .6rem; padding: .6rem .9rem; border-bottom: 1px solid var(--cizgi); color: var(--yazi); }
.zil-satir:last-child { border-bottom: 0; }
.zil-satir:hover { background: var(--notr-zemin); text-decoration: none; }
.zil-ad { flex: 1; font-size: .87rem; line-height: 1.3; }
.zil-adet { min-width: 22px; height: 22px; padding: 0 6px; border-radius: 999px; background: var(--kotu-zemin);
  color: var(--kotu); font-size: .75rem; font-weight: 700; display: flex; align-items: center; justify-content: center; }
.zil-bos { padding: .9rem .9rem; font-size: .85rem; color: var(--yazi-soluk); }
.zil-ara-baslik { padding: .4rem .9rem .25rem; font-size: .7rem; font-weight: 700; letter-spacing: .4px;
  text-transform: uppercase; color: var(--yazi-soluk); background: var(--notr-zemin); border-bottom: 1px solid var(--cizgi); }
.kurulum-ipucu { border-top: 1px solid var(--cizgi); padding-top: .6rem; margin-top: .8rem; }

/* --- alt sekme (yalnız telefon) + menü perdesi --- */
.alt-sekme { display: none; }
.menu-perde { display: none; }
.menu-dugme .ikon, .alt-sekme .ikon { width: 22px; height: 22px; }

/* ---------------- simgeler ----------------
   Satır içi SVG; rengi bulunduğu yazıdan alır, her ölçüde net kalır. */
.ikon {
  width: 1.15em;
  height: 1.15em;
  flex: 0 0 auto;
  vertical-align: -.18em;
}
.ikon-buyuk { width: 1.5em; height: 1.5em; }
.hizli-whatsapp { color: var(--whatsapp); }

.govde { padding: var(--a5) var(--a5) var(--a6); width: 100%; max-width: 1280px; margin: 0 auto; flex: 1; }
.dip { text-align: center; color: var(--yazi-soluk); font-size: .78rem; padding: var(--a4) 0 var(--a5); }

/* ---------------- baslik satiri ---------------- */
.baslik-satir {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--a3);
  margin-bottom: var(--a5);
}
.baslik-satir h1 { margin: 0; }
.baslik-aksiyon { margin-left: auto; display: flex; gap: .4rem; flex-wrap: wrap; }
.dugme-dizisi { display: flex; gap: .4rem; flex-wrap: wrap; }

/* ---------------- dugmeler ----------------
   TEK ÖLÇEK: her düğme aynı yükseklikte. Üç boy vardır ve yalnızca bunlar kullanılır:
     .dugme         → standart (40 px)
     .dugme.buyuk   → sayfanın ana eylemi (46 px)
     .dugme.mini    → satır içi küçük eylem (40 px, s64)
   Bunun dışında elle boyut verilmez; böylece yan yana duran düğmeler eşit görünür. */
/* Kendi biçimi olan düğmeler (zil, hamburger, büyüteç kapatma) bu kurala GİRMEZ.
   Girdiklerinde özgüllük hesabı bu seçicinin lehine çıkıyor ve zil, lacivert
   şeridin ortasında beyaz bir kutu olarak çiziliyordu. Yeni bir özel düğme
   eklerken buraya da yazılmalı, yoksa aynı hata tekrar eder.
   :not(.dugme) — S10 (Cooper onayı 10-07): <button class="dugme birincil|tehlike|sade"> taban biçimi
   zaten ".dugme"den alır; genel button kolu (özgüllük 0,5,3) ona da girince değiştiricileri (0,2,0)
   eziyor, birincil/tehlike düğmeler beyaz kalıyordu (<a class="dugme birincil"> mavi — tutarsız). */
.dugme,
button:not(.dugme):not(.is-hizli-dugme):not(.satir-ici button):not(.kart-hizli button):not(.zil):not(.menu-dugme):not(.buyutec-kapat):not(.si-menu-ac):not(.si-menu button):not(.ko-menu-kutu button):not(.ikon-d):not(.ko):not(.sl-filtre button):not(.daha-tehlike):not(.parola-goster) {
  font: inherit;
  font-size: .9rem;
  line-height: 1.2;
  cursor: pointer;
  border: 1px solid var(--cerceve);
  background: var(--kart);
  color: var(--yazi);
  min-height: 40px;
  padding: 0 1rem;
  border-radius: var(--yuvarlak);
  font-weight: 500;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .4rem;
  white-space: nowrap;
}
.dugme:hover,
button:not(.dugme):not(.is-hizli-dugme):not(.satir-ici button):not(.kart-hizli button):not(.parola-goster):hover {
  border-color: var(--vurgu-yazi);
  text-decoration: none;
}
/* Kapalı düğme soluklaşır ama YOK OLMAZ: .5 opaklıkta yazı zeminle karışıyordu. */
.dugme:disabled, button:disabled { opacity: .65; cursor: not-allowed; }
.dugme:disabled:hover, button:disabled:hover { border-color: var(--cerceve); color: var(--yazi); }

.dugme.birincil { background: var(--vurgu); border-color: var(--vurgu); color: var(--vurgu-ustu); font-weight: 600; }
.dugme.birincil:hover { background: var(--vurgu-koyu); border-color: var(--vurgu-koyu); }
.dugme.sade { background: transparent; }
.dugme.buyuk { min-height: 46px; padding: 0 1.5rem; font-size: .95rem; font-weight: 600; }
.dugme.mini { min-height: 40px; padding: 0 .7rem; font-size: .82rem; }   /* s64 M3: her genişlikte ≥40 (önceden masaüstünde 32; telefonda zaten 40) */
.dugme.tehlike { border-color: var(--tehlike); color: var(--tehlike); background: var(--kart); }   /* şeffaf zeminde (sayfa zemini) Magenta 4.47 — beyaz yüzeyde 4.88 */
/* Dolgu --kotu-dolgu: beyaz yazı biner, bu yüzden koyu modda da koyu kalır. */
.dugme.tehlike:hover { background: var(--kotu-dolgu); color: #fff; border-color: var(--kotu-dolgu); }

/* Düğme kümeleri: aynı satırdakiler eşit hizada dursun. */
.baslik-aksiyon, .dugme-dizisi, .form-alt, .rapor-dugmeler {
  display: flex;
  align-items: center;
  gap: .5rem;
  flex-wrap: wrap;
}
/* Form içindeki gönder düğmeleri satır boyu kaplamasın. */
.satir-form .dugme, .satir-form button { min-height: 40px; }

.yuzen {
  position: fixed;
  right: 1rem;
  bottom: 1rem;
  background: var(--vurgu);
  color: var(--vurgu-ustu);
  padding: .7rem 1.1rem;
  border-radius: 999px;
  box-shadow: var(--golge);
  z-index: 15;
}
.yuzen:hover { background: var(--vurgu-koyu); text-decoration: none; }
/* Başlıkta aynı eylem düğmesi varsa yüzen kopyası gösterilmez (Müşteriler, Görevler); Bugün'de tek eylem o. */
main:has(.baslik-aksiyon .dugme) .yuzen { display: none; }
/* Yüzen düğme sayfanın son satırını örtmesin: altında düğme yüksekliği + pay kadar boşluk. */
main:has(.yuzen) { padding-bottom: calc(var(--a6) + 56px); }

/* ---------------- bildirimler ---------------- */
.bildirim {
  padding: .65rem .95rem;
  border-radius: var(--yuvarlak);
  margin-bottom: var(--a3);
  border: 0;
  border-left: 3px solid transparent;
}
.bildirim.iyi   { background: var(--iyi-zemin);   border-color: var(--iyi);   color: var(--iyi); }
.bildirim.bekle { background: var(--bekle-zemin); border-color: var(--bekle); color: var(--bekle); }
.bildirim.kotu  { background: var(--kotu-zemin);  border-color: var(--kotu);  color: var(--kotu); }
/* s53: telefon bildirimi şeridi — metin solda, düğmeler sağda; dar ekranda alt alta. */
.push-serit { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; }
.push-serit p { margin: 0; flex: 1 1 260px; }
.push-serit .dugme-dizisi { margin: 0; flex: 0 0 auto; }
/* s53 PRİM: satış formunda pay satırları — personel + oran + kaldır; dar ekranda alt alta. */
.prim-pay .prim-ic { margin-top: .6rem; }
.prim-satir { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) auto; gap: .5rem; align-items: end; margin: .4rem 0; }
.prim-satir label { margin: 0; }
.prim-toplam { margin: .5rem 0; }
.prim-satir [data-prim-sil] { align-self: center; justify-self: end; }
@media (max-width: 560px) { .prim-satir { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); } .prim-satir [data-prim-sil] { grid-column: 1 / -1; margin-top: -.2rem; } }

/* Durum etiketi (cip) — onaylı tasarım: renkli zemin + aynı ton yazı, yuvarlak. */
.rozet {
  display: inline-block;
  font-size: 12px;
  font-weight: 600;
  line-height: 1.35;
  padding: 3px 9px;
  border-radius: 999px;
  background: var(--notr-zemin);
  color: var(--yazi-soluk);
  white-space: nowrap;
}
.rozet.iyi      { background: var(--iyi-zemin);      color: var(--iyi); }
.rozet.bekle    { background: var(--bekle-zemin);    color: var(--bekle); }
.rozet.kotu     { background: var(--kotu-zemin);     color: var(--kotu); }
.rozet.aksiyon  { background: var(--aksiyon-zemin);  color: var(--aksiyon); }
.rozet.mor      { background: var(--mor-zemin);      color: var(--mor); }
/* s53 (M-16116): personel kartı özetinde kapsamın kaynağı (kişiye özel / rol ayarı / varsayılan) — değerin altında küçük. */
.ozet-serit .kapsam-kaynak { display: block; font-size: 12px; color: var(--yazi-soluk); font-weight: 400; }

.vurgu-iyi  { color: var(--iyi); }
.vurgu-kotu { color: var(--kotu); }
.vurgu-bekle { color: var(--bekle); }   /* s58 B3: 'yazılmadı' */
.soluk      { color: var(--yazi-soluk); }
.ipucu      { color: var(--yazi-soluk); font-size: .84rem; margin: .35rem 0; }
/* Boş durum: kutu DEĞİL — ortalanmış sade bilgi (tasarım: "her şey çerçeveli kutu olmayacak"). */
.bos-satir  { color: var(--yazi-soluk); padding: var(--a5) var(--a4); text-align: center; }
.ust-bosluk { margin-top: 1.4rem; }
.sag        { text-align: right; }

/* ---------------- pano kutulari ---------------- */
.selam { margin-bottom: 1rem; display: grid; grid-template-columns: 1fr auto; column-gap: var(--a3); }
.selam > h1, .selam > p { grid-column: 1; }
.selam > .baslik-aksiyon { grid-column: 2; grid-row: 1 / span 2; align-self: center; margin: 0; }
@media (max-width: 640px) {
  .selam { grid-template-columns: 1fr; }
  .selam > .baslik-aksiyon { grid-column: 1; grid-row: auto; order: 3; margin-top: var(--a3); }
}
.selam h1 { margin-bottom: .1rem; }
.selam p { margin: 0; color: var(--yazi-soluk); }

.kutular {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
  gap: .6rem;
  margin-bottom: 1.2rem;
}
.kutu {
  background: var(--kart);
  border: 1px solid var(--cizgi);
  border-left: 4px solid var(--cizgi);
  border-radius: var(--yuvarlak-buyuk);
  padding: .75rem .95rem;
  display: block;
  color: var(--yazi);
  box-shadow: var(--golge);
}
.kutu:hover { text-decoration: none; border-color: var(--vurgu-yazi); }
.k-etiket { display: block; font-size: .76rem; color: var(--yazi-soluk); }
.k-deger  { display: block; font-size: 1.35rem; font-weight: 600; margin-top: .15rem; font-variant-numeric: tabular-nums; }
.kutu.iyi     { border-left-color: var(--iyi); }
.kutu.bekle   { border-left-color: var(--bekle); }
.kutu.kotu    { border-left-color: var(--kotu); }
.kutu.aksiyon { border-left-color: var(--aksiyon); }
.kutu.mor     { border-left-color: var(--mor); }

/* BUGÜN panosu — 3 büyük eylem kutusu (Geciken · Bugün yapılacak · Onay bekleyen). */
.kutular.bugun-3 { grid-template-columns: repeat(3, 1fr); margin-bottom: 1.4rem; }
.bugun-3 .kutu { border-left-width: 4px; padding: 1rem 1.1rem; }
/* Kimlik şeritleri (onaylı tasarım KPI): Geciken = Magenta · Bugün = birincil · Onay = Sarı — değerden bağımsız. */
.bugun-3 .kutu.k-gecik { border-left-color: var(--kotu-dolgu); }
.bugun-3 .kutu.k-bugun { border-left-color: var(--vurgu); }
.bugun-3 .kutu.k-onay  { border-left-color: #fac753; }
.bugun-3 .k-etiket { font-size: .85rem; }
.bugun-3 .k-deger { font-size: 2.1rem; margin-top: .3rem; line-height: 1; }

/* ---------------- bloklar ---------------- */
/* Bölüm (onaylı tasarım .bolum): yüzey + ince çizgi + yumuşak gölge, 14 px köşe. */
.blok {
  background: var(--kart);
  border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak-buyuk);
  padding: var(--a4) 18px;
  margin-bottom: 18px;
  box-shadow: var(--golge);
}
.blok > h2:first-child { font-size: 15px; margin: 0 0 var(--a3); display: flex; align-items: baseline; gap: var(--a2); flex-wrap: wrap; }
.blok > h2 small { font-size: 13px; }
.blok > h2 small a { font-weight: 600; }   /* "tümünü görüntüle" gibi bağlantılar bağlantı olduğu belli olsun */
.ikili { display: grid; grid-template-columns: 1fr; gap: 1rem; align-items: start; }   /* kart içeriği kadar — yan kartın boyuna uzamasın */
@media (min-width: 900px) {
  .ikili { grid-template-columns: 1fr 1fr; }
  .ikili .genis-blok { grid-column: 1 / -1; }
}

/* Özet şeridi: kutusuz rakam satırı (etiket üstte küçük, rakam altta büyük). */
.ozet-serit {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: var(--a3) var(--a5);
  padding: var(--a1) 0 var(--a4);
  margin-bottom: var(--a4);
  border-bottom: 1px solid var(--cizgi);
}
.ozet-serit span { display: block; font-size: 12.5px; color: var(--yazi-soluk); }
.ozet-serit strong { font-size: 1.3rem; font-variant-numeric: tabular-nums; }

/* ---------------- satir listeleri ---------------- */
.satir {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .55rem .2rem;
  border-bottom: 1px solid var(--cizgi);
  color: var(--yazi);
}
.satir:last-child { border-bottom: 0; }
.satir:hover { text-decoration: none; background: var(--notr-zemin); }
.satir.kotu .s-tarih { color: var(--kotu); font-weight: 600; }
.s-tarih { min-width: 84px; font-size: .85rem; color: var(--yazi-soluk); }
.s-ad { flex: 1; font-weight: 500; }
.s-ad small { display: block; font-weight: 400; color: var(--yazi-soluk); font-size: .78rem; }
.s-kim { font-size: .8rem; color: var(--yazi-soluk); }

/* ---------------- kartlar ---------------- */
.kart-listesi {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(290px, 1fr));
  gap: .7rem;
}
.kart {
  background: var(--kart);
  border: 1px solid var(--cizgi);
  border-left: 3px solid var(--cizgi);
  border-radius: var(--yuvarlak-buyuk);
  display: flex;
  overflow: hidden;
  box-shadow: var(--golge);
}
.kart.iyi     { border-left-color: var(--iyi); }
.kart.bekle   { border-left-color: var(--bekle); }
.kart.kotu    { border-left-color: var(--kotu); }
.kart.aksiyon { border-left-color: var(--aksiyon); }
.kart-ana { flex: 1; padding: .7rem .85rem; color: var(--yazi); min-width: 0; }
.kart-ana:hover { text-decoration: none; }
.kart-alt  { margin: .1rem 0; font-size: .82rem; color: var(--yazi-soluk); }
.kart-kisi { margin: .1rem 0 .35rem; font-size: .85rem; }
.rozetler { display: flex; flex-wrap: wrap; gap: .25rem; }
.kart-hizli {
  display: flex;
  flex-direction: column;
  border-left: 1px solid var(--cizgi);
}
.kart-hizli a, .kart-hizli button {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 .7rem;
  font-size: 1.05rem;
  color: var(--yazi-soluk);
  border: 0;
  background: transparent;
  border-radius: 0;
}
.kart-hizli a:hover, .kart-hizli button:hover { background: var(--notr-zemin); color: var(--vurgu-yazi); text-decoration: none; }

.olcum { display: flex; flex-wrap: wrap; gap: .8rem; margin-top: .5rem; }
.olcum span { font-size: .72rem; color: var(--yazi-soluk); text-align: center; }
.olcum b { display: block; font-size: .95rem; color: var(--yazi); }

/* ---------------- gecmis ---------------- */
.gecmis-satir { padding: .55rem 0; border-bottom: 1px solid var(--cizgi); }
.gecmis-satir:last-child { border-bottom: 0; }
.g-tarih { font-size: .82rem; color: var(--yazi-soluk); margin-right: .5rem; }
.g-kim   { font-size: .82rem; color: var(--yazi-soluk); margin-left: .5rem; }
.g-not   { margin: .3rem 0 0; font-size: .88rem; }

/* ---------------- cubuklar ---------------- */
.cubuk-satir { display: flex; align-items: center; gap: .6rem; margin-bottom: .35rem; font-size: .85rem; }
/* s58 B8: "Ekip bugün" üst özeti (Rapor x/n · Geciken işi olan y). */
.ekip-ozet { margin: 0; padding: 10px 18px; border-bottom: 1px solid var(--cizgi); font-size: .85rem; color: var(--yazi-soluk); }
/* s58 B2a/B3: selamın altındaki ek satırlar (ekip geciken · gün raporu durumu). */
.selam-ek { margin: .2rem 0 0; font-size: .9rem; color: var(--yazi-soluk); }
.selam-ek a { font-weight: 600; }
.ekip-ozet b { color: var(--yazi); font-variant-numeric: tabular-nums; }
.ekip-ozet b.vurgu-kotu { color: var(--kotu); }
a.cubuk-satir { color: var(--yazi); border-radius: 6px; padding: .15rem .3rem; margin-left: -.3rem; }
a.cubuk-satir:hover { background: var(--notr-zemin); text-decoration: none; }
a.cubuk-satir:hover .c-ad { color: var(--vurgu-yazi); }
.c-ad   { min-width: 130px; color: var(--yazi-soluk); }
.c-adet { min-width: 34px; text-align: right; }
/* Çubuk yazı değil şekildir: yuvası ile dolgusu arasında en az 3:1 ister. */
.cubuk  { flex: 1; height: 8px; background: var(--notr-zemin); border-radius: 999px; overflow: hidden;
          border: 1px solid var(--cizgi); }
.cubuk i { display: block; height: 100%; background: var(--vurgu-yazi); border-radius: 999px; width: 0; }
.cubuk.iyi i     { background: var(--iyi); }
.cubuk.bekle i   { background: var(--bekle); }
.cubuk.kotu i    { background: var(--kotu); }
.cubuk.aksiyon i { background: var(--aksiyon); }
.cubuk.vurgu i   { background: var(--vurgu); }          /* huni: Ziyaret */
.cubuk.cam i     { background: var(--marka-cizgi); }    /* huni: Teklif (Camgöbeği) */
.cubuk.magenta i { background: var(--kotu-dolgu); }     /* huni: Kaybedilen (Magenta) */

/* ---------------- formlar ---------------- */
label { display: block; font-size: .82rem; color: var(--yazi-soluk); margin-bottom: .1rem; }
input, select, textarea {
  font: inherit;
  width: 100%;
  padding: .45rem .6rem;
  /* Çerçeve --cizgi değil --cerceve: koyu modda ince ayraç rengi zeminle
     neredeyse aynı tondaydı, kutunun nerede bittiği seçilmiyordu. */
  border: 1px solid var(--cerceve);
  border-radius: var(--yuvarlak);
  background: var(--kart);
  color: var(--yazi);
  margin-top: .2rem;
}
/* Onay kutusu ve radyo KENDİ boyutunda (≈18 px); dokunma alanını kutu değil ETİKET (.onay) büyütür. */
input[type=checkbox], input[type=radio] { width: 18px; height: 18px; min-width: 0; min-height: 0; padding: 0; margin: 0; flex: 0 0 auto; accent-color: var(--vurgu); }
/* Dokunma hedefi ≥40 px (kabul protokolü): tek satırlık alanlar 44 px — telefonda parmakla rahat basılır. */
input:not([type=checkbox]):not([type=radio]):not([type=hidden]), select { min-height: 44px; }
input:focus, select:focus, textarea:focus { outline: 2px solid var(--vurgu-yazi); outline-offset: -1px; }
input:disabled, select:disabled, textarea:disabled {
  background: var(--notr-zemin);
  color: var(--yazi-soluk);
  border-color: var(--cizgi);
  -webkit-text-fill-color: var(--yazi-soluk);   /* iOS kapalı alanı soluklaştırmasın */
  opacity: 1;
}
textarea { resize: vertical; }
/* Tek satırlık değer için büyüyen kutu (ad, ünvan): kısa değerde tek satır, uzun değer kesilmeden alt satıra iner. */
textarea.tek-satir { field-sizing: content; resize: none; overflow-wrap: anywhere; }

/* Yer tutucu yazı: tarayıcının varsayılanı koyu zeminde çok siliktir. */
input::placeholder, textarea::placeholder { color: var(--yazi-soluk); opacity: 1; }

/* Açılır listenin İÇİ ayrı bir yüzeydir; rengini select'ten miras almaz. */
option, optgroup { background: var(--kart); color: var(--yazi); }

.kayit-form {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: .7rem;
  margin-bottom: 1rem;
}
.kayit-form.dar { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.kayit-form .genis { grid-column: 1 / -1; }
.dikey-form { display: grid; gap: .7rem; }
/* s67 G1: parolayı göster/gizle — her parola alanında (uygulama.js sarar). Düğme kutunun içinde sağda, ≥40 px; genel
   button:not(…) kuralının istisna listesinde (.parola-goster) — !important yok. */
.parola-kap { position: relative; display: block; }
.parola-kap > input { width: 100%; padding-right: 5.4rem; }
.parola-goster { position: absolute; right: 3px; top: 50%; transform: translateY(-50%); min-height: 40px; min-width: 40px; padding: 0 .7rem;
  border: 0; border-radius: var(--yuvarlak); background: transparent; color: var(--vurgu-yazi); font: inherit; font-size: .85rem; font-weight: 600; cursor: pointer; }
.parola-goster:hover { background: var(--notr-zemin); }

.grup {
  grid-column: 1 / -1;
  border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak);
  padding: var(--a4) 18px 18px;
  background: var(--kart);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: .7rem;
  margin: 0 0 .3rem;
}
.grup legend { grid-column: 1 / -1; font-size: .82rem; font-weight: 600; color: var(--yazi-soluk); padding: 0 .3rem; }
.grup .genis { grid-column: 1 / -1; }

/* Katlanır alan grubu (details) — ör. müşteri kartında Vergi bilgileri. */
.grup.katlanir { display: block; }
.grup.katlanir > summary {
  cursor: pointer; list-style: none; user-select: none;
  font-size: .82rem; font-weight: 600; color: var(--yazi-soluk); padding: .1rem .2rem;
  /* s63 Mü5: dokunma alanı ≥40 px (önceden 21 px). FLEX KULLANMA: başlıkta metin + <span> + metin var (satış formu prim
     özeti); flex onları ayrı öğe yapıp aradaki boşlukları düşürüyordu ('Prim:TEST…'). Blok + dikey dolgu ile 40 px. */
  display: block; box-sizing: border-box; min-height: 40px; padding-top: .62rem; padding-bottom: .62rem;
}
.grup.katlanir > summary::-webkit-details-marker { display: none; }
.grup.katlanir > summary::before { content: '▸'; display: inline-block; width: 1em; opacity: .7; }
.grup.katlanir[open] > summary::before { content: '▾'; }
.grup.katlanir .katlanir-ic {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: .7rem; margin-top: .7rem;
}
.grup.katlanir .katlanir-ic .genis { grid-column: 1 / -1; }

/* --- Müşteri kartı GÖRÜNTÜLEME kipi --- */
.oku-kart { background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak);
  padding: .7rem .9rem; margin-bottom: .6rem; box-shadow: var(--golge); }
.oku-h { font-size: .92rem; margin: 0 0 .4rem; }
.oku-h small { color: var(--yazi-soluk); font-weight: 400; }
.oku-satir { display: flex; gap: .6rem; padding: .32rem 0; border-bottom: 1px solid var(--cizgi); }
.oku-satir:last-child { border-bottom: 0; }
.oku-et { flex: 0 0 36%; color: var(--yazi-soluk); font-size: .85rem; }
.oku-dg { flex: 1; word-break: break-word; }
.oku-hizli { margin-bottom: .6rem; }
.oku-hizli a span { margin-left: .35rem; }
/* s53 (M-16118 taşma denetimi, müşteri kartı 320px'te +64): dört hızlı eylem yan yana sığmıyordu. Dar ekranda simge üstte
   yazı altta (alt menü düzeni), sütunlar eşit ve küçülebilir; sığmayan yazı üç noktayla kısalır. */
@media (max-width: 420px) {
  .kart-hizli.oku-hizli a { flex-direction: column; gap: 2px; min-width: 0; font-size: .8rem; padding: .35rem .25rem; }
  .kart-hizli.oku-hizli a span { margin-left: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}

/* --- Katlanır blok (details.blok) — görseller / görüşme / satış-tahsilat --- */
.blok-katlanir > summary { cursor: pointer; list-style: none; user-select: none;
  font-size: 1rem; font-weight: 600; padding: .2rem 0; min-height: 44px; display: flex; align-items: center; flex-wrap: wrap; gap: 0 .35rem; }
.blok-katlanir > summary::-webkit-details-marker { display: none; }
.blok-katlanir > summary::before { content: '▸'; display: inline-block; width: 1.1em; opacity: .6; }
.blok-katlanir[open] > summary::before { content: '▾'; }
.blok-katlanir > summary small { font-weight: 400; color: var(--yazi-soluk); }
.ekle-ipuc { color: var(--vurgu-yazi); font-weight: 600; }

.form-alt { grid-column: 1 / -1; display: flex; gap: .5rem; flex-wrap: wrap; }
.rapor-dugmeler { margin: .3rem 0 1rem; }

.onay { display: flex; align-items: center; gap: .45rem; font-size: .88rem; color: var(--yazi);
  min-height: 40px; min-width: 40px; cursor: pointer; }   /* dokunma alanı etikette (kutu 18 px kalır) */
.onay input { min-width: 0; margin: 0; flex: none; }   /* süzgeçteki input min-width:130px onay kutusuna uygulanmasın */

.satir-form { display: flex; gap: .35rem; align-items: flex-end; margin-top: .4rem; }
.satir-form input { margin: 0; }
.satir-ici { display: inline-flex; }
.satir-ici button {
  border: 0;
  background: transparent;
  color: var(--yazi-soluk);
  padding: 0 .35rem;
  min-height: 40px;   /* dokunma hedefi ≥40 (kabul protokolü) — önceden 32 */
  min-width: 40px;
  font: inherit;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 6px;
}
.satir-ici button:hover { color: var(--kotu); background: var(--notr-zemin); }

/* Doğrulama ekranındaki eylem satırı */
.dogrulama-satiri {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .5rem;
  margin: .6rem 0;
  font-size: .85rem;
}
.dogrulama-satiri .dugme { min-height: 34px; font-size: .82rem; padding: 0 .7rem; }
.ziyaret-kayit.supheli { border-left: 3px solid var(--kotu); }   /* Grup 3: pembe dolgu kaldırıldı — her kart kırmızı zeminde ağırdı; sol çizgi + kırmızı etiketler yeter */
.satir-etiket { display: flex; flex-direction: column; }

/* Süzgeç: kutusuz araç satırı. */
.suzgec {
  display: flex;
  flex-wrap: wrap;
  gap: var(--a2);
  align-items: flex-end;
  margin-bottom: var(--a4);
}
.suzgec select, .suzgec input:not([type=checkbox]):not([type=radio]) { width: auto; min-width: 130px; margin: 0; }
.suzgec .onay { align-self: center; min-height: 44px; }
.suzgec .ara-alan { flex: 1; min-width: 200px; }

.serit-suzgec { display: flex; gap: .3rem; flex-wrap: wrap; margin-bottom: .9rem; }
.serit-suzgec a {
  display: inline-flex; align-items: center; min-height: 40px;   /* Grup 3: dokunma ≥40 (önce 30 px) */
  padding: 0 .9rem; white-space: nowrap;
  border-radius: 999px;
  background: var(--kart);
  border: 1px solid var(--cerceve);
  color: var(--yazi);
  font-size: .85rem;
}
.serit-suzgec a.etkin { background: var(--vurgu); border-color: var(--vurgu); color: var(--vurgu-ustu); font-weight: 600; }
.serit-suzgec a:hover { text-decoration: none; border-color: var(--vurgu-yazi); }

.tehlike-alan {
  margin-top: 1.5rem;
  padding-top: 1rem;
  border-top: 1px dashed var(--cizgi);
}

/* Enter tuşunun hangi düğmeyi çalıştıracağını sabitleyen görünmez gönder düğmesi.
   Formun EN BAŞINDA durur; böylece Enter, tablodaki "Sil" düğmesini değil
   formun kendi kaydetme işlemini tetikler. display:none OLMAZ — gizlenen
   düğme tarayıcıda varsayılan gönderici sayılmaz. */
.gizli-gonder {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  border: 0;
  min-height: 0;
  opacity: 0;
  overflow: hidden;
  pointer-events: none;
}

/* ---------------- tablolar ---------------- */
.tablo-sarmal { overflow-x: auto; }
.tablo { width: 100%; border-collapse: collapse; font-size: .9rem; font-variant-numeric: tabular-nums; }
.tablo th, .tablo td { padding: .6rem .7rem; border-bottom: 1px solid var(--cizgi); text-align: left; }
.tablo th { font-size: 11.5px; letter-spacing: .05em; text-transform: uppercase; color: var(--yazi-soluk); font-weight: 600; white-space: nowrap; }
.tablo th.sag, .tablo td.sag { text-align: right; }
.tablo tbody tr:hover { background: var(--notr-zemin); }
.tablo tfoot th { border-top: 2px solid var(--cizgi); border-bottom: 0; color: var(--yazi); }
/* Onay kutusu / radyo HARİÇ (M-15734: K1'de tablo içindeki onay kutusu 90×40 px'e şişiyordu). */
.tablo input:not([type=checkbox]):not([type=radio]), .tablo select { margin: 0; padding: .3rem .45rem; min-width: 90px; min-height: 40px; }
.mini-bag { font-size: .8rem; }

/* ---------------- yetki matrisi ----------------
   Eskiden her seviye bir tablo hücresindeki minik yuvarlak düğmeydi:
   telefonda tablo yana kayıyor, düğmeler parmakla tutulamıyordu.
   Şimdi üç kademeli seçim şeridi — geniş ekranda satır, dar ekranda alt alta. */
.seviye-liste {
  border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak);
  overflow: hidden;
  margin: .4rem 0 1rem;
}
.seviye-satir {
  display: flex;
  align-items: center;
  gap: .8rem;
  padding: .55rem .75rem;
  border-bottom: 1px solid var(--cizgi);
}
.seviye-satir:last-child { border-bottom: 0; }
.seviye-ad { flex: 1; font-size: .9rem; min-width: 0; }

.seviye-secim {
  display: flex;
  flex: 0 0 auto;
  position: relative;          /* gizlenen radyo dışarı kaçmasın */
  border: 1px solid var(--cerceve);
  border-radius: 8px;
  overflow: hidden;
}
/* Radyo düğmesi gizlenir ama ODAK İZİ korunur: klavyeyle gezen kaybolmasın. */
.seviye-secim input {
  position: absolute;
  opacity: 0;
  width: 1px;
  height: 1px;
  margin: 0;
  pointer-events: none;
}
.seviye-secim label {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 34px;
  padding: 0 .7rem;
  margin: 0;
  font-size: .82rem;
  color: var(--yazi);
  background: var(--kart);
  border-left: 1px solid var(--cerceve);
  cursor: pointer;
  white-space: nowrap;
  user-select: none;
}
.seviye-secim label:first-of-type { border-left: 0; }
.seviye-secim label:hover { background: var(--notr-zemin); }
.seviye-secim input:checked + label { background: var(--vurgu); color: var(--vurgu-ustu); font-weight: 600; }
.seviye-secim input:focus-visible + label { outline: 2px solid var(--vurgu-yazi); outline-offset: -2px; }
.seviye-secim input:disabled + label { opacity: .55; cursor: not-allowed; }
/* Seçili "kapalı/gizli" kademesi mavi değil, nötr koyu görünsün: bir şeyin
   KAPALI olması olumlu bir vurgu değildir. */
.seviye-secim input:checked + label.sv-yok { background: var(--yazi-soluk); }

/* ---------------- ürün seçimi ----------------
   Açılır menü yerine görünür liste: seçenek metni sayfanın kendi çizimiyle
   basılır, işletim sisteminin menü çizimine bağımlı kalmaz. Fiyatlar da
   menü açmadan okunur. */
/* Kutu başlığı — <label> yerine kullanılır, görünümü aynıdır. */
.alan-basligi { display: block; font-size: .82rem; color: var(--yazi-soluk); margin-bottom: .1rem; }

.urun-secim {
  display: flex;
  flex-wrap: wrap;
  gap: .35rem;
  margin-top: .2rem;
}
.urun-secim input[type="radio"] {
  position: absolute;
  opacity: 0;
  width: 1px;
  height: 1px;
  margin: 0;
  pointer-events: none;
}
.urun-secim label {
  display: inline-flex;
  align-items: center;
  min-height: 38px;
  margin: 0;
  padding: 0 .8rem;
  font-size: .88rem;
  color: var(--yazi);
  background: var(--kart);
  border: 1px solid var(--cerceve);
  border-radius: 999px;
  cursor: pointer;
  white-space: nowrap;
}
/* Uzun listeler (satış seçimi) için dikey, kaydırılabilir hâli. */
.secim-liste {
  display: flex;
  flex-direction: column;
  gap: 0;
  margin-top: .2rem;
  max-height: 232px;
  overflow-y: auto;
  border: 1px solid var(--cerceve);
  border-radius: 8px;
}
.secim-liste input[type="radio"] {
  position: absolute;
  opacity: 0;
  width: 1px;
  height: 1px;
  margin: 0;
  pointer-events: none;
}
.secim-liste label {
  display: block;
  margin: 0;
  padding: .6rem .8rem;
  font-size: .88rem;
  color: var(--yazi);
  border-bottom: 1px solid var(--cizgi);
  cursor: pointer;
}
.secim-liste label:last-of-type { border-bottom: 0; }
/* Sektör başlığı: paketler kendi grubunun altında toplanır. */
.secim-grup {
  padding: .35rem .8rem .25rem;
  background: var(--notr-zemin);
  border-bottom: 1px solid var(--cizgi);
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .4px;
  text-transform: uppercase;
  color: var(--yazi-soluk);
  position: sticky;
  top: 0;
}
.secim-grup[hidden] { display: none; }
/* Uzun listelerde süzme kutusu — JS varsa görünür. */
.secim-ara { margin: .2rem 0 .35rem; }
.secim-liste label:hover { background: var(--notr-zemin); }
.secim-liste input:checked + label {
  background: var(--vurgu);
  color: var(--vurgu-ustu);
  font-weight: 600;
}
.secim-liste input:focus-visible + label { outline: 2px solid var(--vurgu-yazi); outline-offset: -2px; }

.urun-secim label:hover { border-color: var(--vurgu-yazi); }
.urun-secim input:checked + label {
  background: var(--vurgu);
  border-color: var(--vurgu);
  color: var(--vurgu-ustu);
  font-weight: 600;
}
.urun-secim input:focus-visible + label { outline: 2px solid var(--vurgu-yazi); outline-offset: 2px; }

.kapsam-aciklama { list-style: none; margin: .3rem 0 0; padding: 0; }
.kapsam-aciklama li { margin-bottom: .15rem; }
.izin-kutusu {
  border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak);
  padding: .7rem .9rem;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: .4rem;
  margin: .5rem 0 .8rem;
}
.rol-satir { max-width: 320px; }

/* ---------------- rapor tasarimi ---------------- */
.rapor-tasarim { display: grid; gap: .8rem; }
.alan-izgara {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
  gap: .3rem;
}
.suzgec-satir {
  display: grid;
  grid-template-columns: 1.3fr 1fr 1fr 1fr;
  gap: .35rem;
  margin-bottom: .35rem;
}
@media (max-width: 700px) { .suzgec-satir { grid-template-columns: 1fr 1fr; } }
.hesap-onizleme {
  display: flex;
  flex-wrap: wrap;
  gap: 1.2rem;
  background: var(--notr-zemin);
  border-radius: 8px;
  padding: .55rem .8rem;
  font-size: .85rem;
  color: var(--yazi-soluk);
}
.hesap-onizleme b { color: var(--yazi); font-size: 1rem; margin-left: .3rem; }

.liste-izgara { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: .8rem; }
.liste-kutu { border: 1px solid var(--cizgi); border-radius: var(--yuvarlak); padding: .6rem .75rem; }
.liste-kutu ul { list-style: none; margin: 0 0 .4rem; padding: 0; }
.liste-kutu li {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: .2rem 0;
  font-size: .87rem;
  border-bottom: 1px solid var(--cizgi);
}
.liste-kutu li:last-child { border-bottom: 0; }

/* Etiket listesi — çok sayıda kısa değer (ilçeler) için. Alt alta liste
   yerine sarmalayan rozetler: 30 ilçe bir ekrana sığar, taramak kolaydır. */
.etiket-listesi {
  list-style: none;
  margin: .5rem 0 .8rem;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
}
.etiket-listesi li {
  display: flex;
  align-items: center;
  gap: .1rem;
  background: var(--notr-zemin);
  border: 1px solid var(--cizgi);
  border-radius: 999px;
  padding: .18rem .28rem .18rem .75rem;
  font-size: .87rem;
}
.etiket-listesi li small { margin-left: .35rem; font-size: .74rem; }
.etiket-listesi .satir-ici button {
  min-height: 40px; min-width: 40px; padding: 0; border-radius: 999px;   /* s67 A4: her genişlikte ≥40 (önceden masaüstünde 26; telefonda zaten 40) */
}
.etiket-listesi li { padding-top: 0; padding-bottom: 0; min-height: 42px; }   /* s67 A4: telefon kuralı tabana — rozet 40 px × ile şişmez */

.sayfalama { display: flex; flex-wrap: wrap; gap: .25rem; margin: 1rem 0; }
.sayfalama a {
  /* s63 Mü4: dokunma alanı her genişlikte ≥40 px (önceden yalnız telefon kuralında; 768/1366'da 30 px). */
  display: inline-flex; align-items: center; justify-content: center; min-width: 40px; min-height: 40px;
  padding: .3rem .65rem;
  border: 1px solid var(--cerceve);
  border-radius: 6px;
  background: var(--kart);
  color: var(--yazi);
  font-size: .85rem;
}
.sayfalama a.etkin { background: var(--vurgu); border-color: var(--vurgu); color: var(--vurgu-ustu); font-weight: 600; }

/* ---------------- giris ekrani ---------------- */
.giris-govde {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  background: var(--lacivert);
  padding: calc(1rem + env(safe-area-inset-top, 0px))
           calc(1rem + env(safe-area-inset-right, 0px))
           calc(1rem + env(safe-area-inset-bottom, 0px))
           calc(1rem + env(safe-area-inset-left, 0px));
}
.giris-kart {
  background: var(--kart);
  /* Koyu modda kart ile lacivert zemin neredeyse aynı tondadır; gölge de iş
     görmez. Kartın nerede başladığı yalnızca bu çerçeveden anlaşılır — bu
     yüzden saç teli --cizgi değil, 3:1 tutan --cerceve kullanılır. */
  border: 1px solid var(--cerceve);
  border-radius: 14px;
  padding: 1.6rem 1.5rem;
  width: 100%;
  max-width: 380px;
  box-shadow: 0 10px 40px rgba(0, 0, 0, .3);
}
.giris-marka { display: flex; align-items: center; gap: .5rem; font-weight: 600; color: var(--yazi-soluk); margin-bottom: .8rem; }
.giris-kart h1 { margin-bottom: 1rem; }
.giris-kart .dugme { width: 100%; justify-content: center; }

/* ---------------- s76 (B) gün raporu OKUMA GÖRÜNÜMÜ (sayfa/gunraporu.php rapor_okuma) ----------------
   Brif düzeni: düz yazı rahat punto, satır en çok ~65 karakter, bölüm başlıkları sade; kart zemini temadan. */
.rapor-oku { max-width: 44rem; background: var(--kart);   /* metin sütunu 47ch — geniş ekranda kart boş kalmasın */  border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk);
             padding: 1.25rem 1.5rem; margin: 0 0 1rem; }
.rapor-oku-bolum + .rapor-oku-bolum { margin-top: 1.4rem; padding-top: 1.2rem; border-top: 1px solid var(--cizgi); }
.rapor-oku h2 { font-size: 1rem; margin: 0 0 .6rem; display: flex; align-items: center; gap: .5rem; }
.rapor-oku-metin { max-width: 47ch;   /* ölçüldü: bu yazı tipinde 65ch = satırda 90 harf; 47ch ≈ 65 harf */ font-size: 1.05rem; line-height: 1.65; color: var(--yazi); overflow-wrap: anywhere; }
.rapor-oku-metin.kucuk { font-size: .95rem; line-height: 1.55; margin-top: .3rem; }
.rapor-oku-liste { margin: 0; padding-left: 1.4rem; }
.rapor-oku-liste > li { margin: 0 0 .9rem; padding-left: .2rem; }
.rapor-oku-liste > li:last-child { margin-bottom: 0; }
.rapor-oku-liste.duz > li { margin-bottom: .35rem; }
.rapor-oku-satir { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .6rem; }
.rapor-oku-satir strong { font-size: 1.02rem; overflow-wrap: anywhere; }
.rapor-oku-alt { margin: .15rem 0 0; color: var(--yazi-soluk); font-size: .9rem; overflow-wrap: anywhere; }
.rapor-oku-dl { margin: 0; }
.rapor-oku-dl dt { font-size: .85rem; color: var(--yazi-soluk); margin: .9rem 0 .2rem; }
.rapor-oku-dl dt:first-child { margin-top: 0; }
.rapor-oku-dl dd { margin: 0; }
.rapor-oku-duzenle { margin: 0 0 1rem; }
@media (max-width: 640px) { .rapor-oku { padding: 1rem; } .rapor-oku-metin { font-size: 1rem; } }
@media print {
  /* Koyu temada --yazi açık gri olur; kâğıtta okunur kalsın. Ctrl+P kilidi (body.yazdirma-yok) aşağıda aynen geçerli. */
  .rapor-oku { border: 0; padding: 0; background: none; }
  .rapor-oku, .rapor-oku-metin, .rapor-oku h2, .rapor-oku-satir strong { color: #111; }
  .rapor-oku-alt, .rapor-oku-dl dt { color: #444; }
  .rapor-oku-liste > li { page-break-inside: avoid; }
  .rapor-oku-duzenle { display: none; }
}

/* s76 (J) ARKA PLAN YAĞMURU (Cooper 10-11 brief'i, deneme — Hesabım'dan aç/kapa): TEK tuval, içeriğin ARKASINDA (z-index -1, kök zemini
   üstünde), tıklamayı engellemez. Kartlar/tablolar/balonlar dolu zeminli kalır; yağmur yalnız boşlukta. Baskıda yok. */
canvas.matrix-bg { position: fixed; inset: 0; z-index: -1; pointer-events: none; }
/* Ölçüldü (10-11): html VE body kendi zeminini boyuyor (stil.css:160) ⇒ body zemini -1 katmanındaki tuvalin ÜSTÜNE boyanıp yağmuru
   örtüyordu. Yağmur açıkken body saydam; html zemini tuvalin altında kalır, tuval zemini kendisi boyar. */
html.matrix-acik body { background: transparent; }
@media print { canvas.matrix-bg { display: none; } }

/* s76 (H) ziyaret planı önerisi — sıkı liste: ad + soluk durum/atanan solda, Planla sağda; satır ≥44 px. */
.oneri-liste { list-style: none; margin: .4rem 0 0; padding: 0; }
.oneri-liste li { display: flex; align-items: center; justify-content: space-between; gap: .75rem; min-height: 52px; padding: .35rem 0; border-bottom: 1px solid var(--cizgi); }
.oneri-liste li:last-child { border-bottom: 0; }
.oneri-ad { min-width: 0; display: grid; }
.oneri-ad a { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.oneri-ad small { color: var(--yazi-soluk); font-size: .82rem; }
.oneri-form { margin: 0; flex: 0 0 auto; }

/* ---------------- yazdirma ---------------- */
.yazdir-govde { background: #e9edf3; padding: 1rem; }
/* Koyu temada (yalnız ekran) dış zemin de koyu: düğme yazısı açık renk olduğundan
   açık gri zeminde "← Geri" görünmüyordu (10-07). Kâğıt (.a4) yine beyaz. */
@media screen and (prefers-color-scheme: dark) {
  .yazdir-govde { background: var(--zemin); }
}
.yazdir-arac { max-width: 800px; margin: 0 auto .8rem; display: flex; gap: .4rem; }
.a4 {
  background: #fff;
  color: #111;
  max-width: 800px;
  margin: 0 auto;
  padding: 26mm 18mm;
  box-shadow: 0 4px 20px rgba(0, 0, 0, .15);
}
/* Belgenin zemini HER ZAMAN beyaz kâğıttır. Bu yüzden içindeki hiçbir renk
   değişkenden gelmez: koyu modda --yazi açık gri olur ve kâğıtta kaybolur. */
.a4 { color-scheme: light; }
.a4 .tablo th, .a4 .tablo td { border-bottom: 1px solid #d5dae2; }
.a4 .tablo th { color: #333; }
.a4 .tablo td { color: #111; }
.a4 .tablo tfoot th { color: #111; border-top-color: #111; }
.a4 .soluk, .a4 .ipucu { color: #555; }
/* s76 (Ender Bey 10-10 17:5x, MURPH M-17326): satırın üzerine gelince zemin değişmez. Genel kural (.tablo tbody tr:hover,
   --notr-zemin) koyu temada kâğıda LACİVERT basıyordu, #111 yazı kayboluyordu (kontrast 1,20; gün raporu, kurulum formu, cari,
   kasa). Kâğıt her temada kâğıt gibi davranır. */
.a4 .tablo tbody tr:hover, .a4 .satir:hover { background: transparent; }
.belge-ust { border-bottom: 2px solid #111; padding-bottom: .6rem; margin-bottom: 1.2rem; }
.belge-ust h1 { font-size: 1.2rem; letter-spacing: 1px; }
.belge-ust p { margin: 0; color: #555; font-size: .85rem; }
.belge-kutu { display: flex; gap: 2rem; flex-wrap: wrap; margin-bottom: 1rem; }
.belge-kutu span { display: block; font-size: .75rem; color: #666; }
.belge-alan { display: flex; gap: .8rem; padding: .35rem 0; border-bottom: 1px dotted #bbb; }
.belge-alan span { min-width: 190px; color: #555; font-size: .85rem; }
.belge-alan em { font-style: normal; flex: 1; }
.makbuz-tutar {
  display: flex;
  justify-content: space-between;
  align-items: center;
  border: 2px solid #111;
  padding: .8rem 1rem;
  margin: 1.2rem 0;
}
.makbuz-tutar strong { font-size: 1.4rem; }
.imza-alani { display: flex; gap: 2rem; margin-top: 2.5rem; }
.imza-alani div { flex: 1; border-top: 1px solid #111; padding-top: .3rem; font-size: .8rem; color: #555; }
.imza-alani em { font-style: normal; display: block; color: #111; min-height: 1.2rem; }
.belge-not { margin-top: 1.5rem; font-size: .75rem; color: #666; }

/* --- eksik bilgi uyarısı --- */
.eksik-uyari {
  display: flex;
  align-items: center;
  gap: .45rem;
  flex-wrap: wrap;
  background: var(--bekle-zemin);
  color: var(--bekle);
  border: 1px solid var(--bekle);
  border-radius: var(--yuvarlak);
  padding: .55rem .8rem;
  margin-bottom: .8rem;
}
.eksik-uyari a { color: inherit; text-decoration: underline; }

/* --- görevin yapılacaklar listesi --- */
.madde-listesi { list-style: none; margin: .5rem 0; padding: 0; }
.madde-listesi li {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .4rem .2rem;
  border-bottom: 1px solid var(--cizgi);
  font-size: .9rem;
}
.madde-listesi li:last-child { border-bottom: 0; }
.madde-listesi li.tamam .madde-metin { text-decoration: line-through; color: var(--yazi-soluk); }
.madde-metin { flex: 1; }

/* --- hareket kaydı --- */
.gun-basligi {
  font-size: .8rem;
  color: var(--yazi-soluk);
  text-transform: uppercase;
  letter-spacing: .5px;
  margin: 1rem 0 .35rem;
  padding-bottom: .25rem;
  border-bottom: 1px solid var(--cizgi);
}
.gun-basligi:first-child { margin-top: 0; }
/* Grup 5: sabit sütunlu ızgara (saat | ikon | metin | kişi | bağlantı) — esnek kutuda kişi adı ve bağlantı
   genişliğe göre kayıyor, telefonda kimi satır tek kimi iki satır oluyordu (MURPH M-15766 b). */
.hareket-satiri {
  display: grid;
  grid-template-columns: 44px 20px minmax(0, 1fr) auto auto;
  align-items: center;
  gap: .25rem .7rem;
  padding: .55rem .2rem;
  border-bottom: 1px solid var(--cizgi);
  font-size: .88rem;
}
.hareket-satiri:last-child { border-bottom: 0; }
.hareket-saat { min-width: 42px; color: var(--yazi-soluk); font-variant-numeric: tabular-nums; }
.hareket-ikon { color: var(--yazi-soluk); display: inline-flex; }
.hareket-metin { flex: 1; min-width: 0; }
.hareket-metin > strong { display: block; }
.hareket-detay { display: block; color: var(--yazi-soluk); font-size: .82rem; overflow-wrap: anywhere; }
.suz-ozet-satir { display: flex; align-items: center; gap: 8px; margin: 0 0 var(--a3); font-weight: 600; font-variant-numeric: tabular-nums; }
.suz-ozet-satir .ikon { width: 16px; height: 16px; color: var(--yazi-soluk); }
@media (max-width: 860px) {
  .hareket-satiri { grid-template-columns: 44px 20px minmax(0, 1fr); align-items: start; }
  .hareket-satiri > .hareket-kim, .hareket-satiri > .dugme { grid-column: 3; justify-self: start; }
}
.hareket-kim { color: var(--yazi-soluk); font-size: .82rem; white-space: nowrap; }

.zil-dip {
  display: block;
  padding: .55rem .8rem;
  text-align: center;
  font-size: .82rem;
  border-top: 1px solid var(--cizgi);
  background: var(--notr-zemin);
  color: var(--vurgu-yazi);
  font-weight: 600;
}
.zil-dip:hover { text-decoration: none; background: var(--kart); }

/* Blok içinde blok — önizleme kutuları */
.ic-blok { background: var(--notr-zemin); box-shadow: none; margin-top: .8rem; }

/* --- ziyaret konum kutusu --- */
.konum-kutu {
  border: 1px solid var(--cizgi);
  border-left: 3px solid var(--yazi-soluk);
  border-radius: var(--yuvarlak);
  padding: .7rem .85rem;
  background: var(--kart);
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .6rem;
}
.konum-kutu.iyi   { border-left-color: var(--iyi);   background: var(--iyi-zemin); }
.konum-kutu.bekle { border-left-color: var(--bekle); background: var(--bekle-zemin); }
.konum-kutu.kotu  { border-left-color: var(--kotu);  background: var(--kotu-zemin); }
.konum-durum { flex: 1; min-width: 200px; font-size: .87rem; line-height: 1.4; }

/* --- kaydedilmis ziyaret kartlari ve gorselleri --- */
.ziyaret-kayit {
  border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak);
  padding: .7rem .85rem;
  margin-bottom: .7rem;
}
.ziyaret-ust { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; }
.ziyaret-saat { font-variant-numeric: tabular-nums; color: var(--yazi-soluk); font-size: .85rem; }
.ziyaret-ad { flex: 1 1 auto; min-width: 140px; }

.gorsel-serit { display: flex; flex-wrap: wrap; gap: .5rem; margin: .6rem 0; }
.gorsel-kutu {
  position: relative;
  margin: 0;
  width: 104px;
  border: 1px solid var(--cizgi);
  border-radius: 8px;
  overflow: hidden;
  background: var(--notr-zemin);
}
.gorsel-kutu img { display: block; width: 100%; height: 84px; object-fit: cover; }
.gorsel-kutu figcaption {
  font-size: .7rem;
  color: var(--yazi-soluk);
  padding: .2rem .35rem;
  text-align: center;
}
.gorsel-kutu .satir-ici { position: absolute; top: 2px; right: 2px; }
.gorsel-kutu .satir-ici button {
  background: rgba(0, 0, 0, .55);
  color: #fff;
  border-radius: 999px;
  width: 22px;
  height: 22px;
  min-height: 0;
  padding: 0;
  line-height: 1;
  display: flex;
  align-items: center;
  justify-content: center;
}
.konum-satiri { display: flex; align-items: center; gap: .4rem; flex-wrap: wrap; }

/* --- görsel büyüteci ---
   Sayfanın üstünde tam ekran katman. z-index her şeyin üstünde: üst şerit 20,
   menü perdesi 19, zil listesi 40 — büyüteç 60. */
.buyutec {
  position: fixed;
  inset: 0;
  z-index: 60;
  background: rgba(8, 12, 20, .94);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: .7rem;
  padding: calc(4.2rem + env(safe-area-inset-top, 0px)) 1rem
           calc(1rem + env(safe-area-inset-bottom, 0px));
}
.buyutec[hidden] { display: none; }
.buyutec-resim {
  max-width: 100%;
  max-height: 100%;
  object-fit: contain;
  border-radius: 6px;
}
.buyutec-yazi {
  margin: 0;
  color: #cbd5e1;
  font-size: .85rem;
  text-align: center;
  max-width: 40rem;
}
.buyutec-yazi[hidden] { display: none; }
/* Kapatma düğmesi: sağ üstte, çentiğin altında, parmak ölçüsünde. */
.buyutec-kapat {
  position: absolute;
  top: calc(.7rem + env(safe-area-inset-top, 0px));
  right: calc(.7rem + env(safe-area-inset-right, 0px));
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  min-height: 44px;
  padding: 0 .9rem;
  border: 1px solid rgba(255, 255, 255, .35);
  border-radius: 999px;
  background: rgba(255, 255, 255, .12);
  color: #fff;
  font-size: .9rem;
  cursor: pointer;
}
.buyutec-kapat:hover { background: rgba(255, 255, 255, .22); border-color: rgba(255, 255, 255, .55); }
.buyutec-kapat:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }

/* --- gunluk rapor: katlanir satirlar --- */
details.ziyaret-grup { display: block; padding: 0; margin-bottom: .5rem; }
details.ziyaret-grup > summary {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .65rem .85rem;
  cursor: pointer;
  list-style: none;
  font-size: .9rem;
  background: var(--notr-zemin);
  border-radius: var(--yuvarlak);
}
details.ziyaret-grup > summary::-webkit-details-marker { display: none; }
details.ziyaret-grup > summary::before {
  content: '▸';
  color: var(--yazi-soluk);
  font-size: .85rem;
  transition: transform .15s;
}
details.ziyaret-grup[open] > summary::before { content: '▾'; }
details.ziyaret-grup[open] > summary { border-radius: var(--yuvarlak) var(--yuvarlak) 0 0; }
details.ziyaret-grup[open] {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: .7rem;
  padding: 0 .85rem .85rem;
  border: 1px solid var(--cizgi);
}
details.ziyaret-grup[open] > summary { grid-column: 1 / -1; margin: 0 -.85rem; }
.satir-no { font-weight: 600; color: var(--yazi-soluk); white-space: nowrap; }
.satir-ozet { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* --- matbu form ciktilari (saha raporu, kurulum formu) --- */
.belge-baslik {
  font-size: .95rem;
  letter-spacing: .5px;
  border-bottom: 1.5px solid #111;
  padding-bottom: .25rem;
  margin: 1.6rem 0 .7rem;
  page-break-after: avoid;
}
.belge-baslik small { font-weight: 400; color: #666; letter-spacing: 0; }
.belge-arabaslik {
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .5px;
  color: #333;
  margin: 1rem 0 .35rem;
}
.belge-kutu-yazi {
  border: 1px solid #ccc;
  background: #f7f8fa;
  padding: .55rem .75rem;
  margin: .6rem 0 .9rem;
  font-size: .8rem;
}
.belge-kutu-yazi strong { display: block; margin-bottom: .2rem; }
.belge-kutu-yazi p { margin: 0; color: #444; }
.secenek { margin: .18rem 0; font-size: .85rem; }
.secenek-alt { margin: 0 0 .5rem 1.4rem; font-size: .78rem; color: #555; }
.belge-alan.buyuk { min-height: 3.2rem; align-items: flex-start; }
.bos-form-satir td { height: 1.5rem; }
.kategori-tablo th { width: 2rem; text-align: center; }
.kategori-tablo td { height: 1.4rem; }
.ziyaret-basligi {
  font-size: .8rem;
  letter-spacing: .5px;
  background: #eef1f5;
  padding: .25rem .5rem;
  margin: 1rem 0 .3rem;
  page-break-after: avoid;
}
.a4 h2.belge-baslik, .a4 h3.ziyaret-basligi { color: #111; }

/* --- ekranda doldurulabilir matbu belge --- */
.belge-ipucu {
  max-width: 800px;
  margin: 0 auto .8rem;
  font-size: .85rem;
  color: var(--yazi-soluk);
}
.form-kaydedildi {
  max-width: 800px;
  margin: 0 auto .8rem;
  padding: .6rem .9rem;
  border-radius: var(--yuvarlak);
  background: var(--iyi-zemin);
  color: var(--iyi);
  border: 1px solid var(--iyi);
}
/* Giriş alanı kâğıt görünümünü bozmaz: alt çizgi üstünde yazı gibi durur. */
.belge-giris {
  width: 100%;
  margin: 0;
  padding: .1rem .2rem;
  border: 0;
  border-bottom: 1px solid #c9cfda;
  border-radius: 0;
  background: #fbfcfe;
  color: #111;
  font: inherit;
  font-size: .85rem;
}
.belge-giris:focus { outline: 2px solid #143c72; outline-offset: 0; background: #fff; }
textarea.belge-giris { min-height: 3.2rem; resize: vertical; }
.belge-secenek { display: flex; align-items: center; gap: .45rem; font-size: .85rem; color: #111; margin: 0; }
.belge-secenek input { margin: 0; }

@media print {
  /* Baskıda düzenleme izleri kaybolur: çerçeve, zemin ve araç çubuğu gitsin,
     yazılan metin kâğıda doğrudan yazılmış gibi çıksın. */
  .belge-giris {
    border-bottom: 1px solid #999;
    background: transparent;
    padding: 0;
    -webkit-print-color-adjust: exact;
  }
  .belge-ipucu, .form-kaydedildi { display: none; }
  .yazdir-arac, .yan-menu, .ust-serit, .alt-sekme, .dip, .yuzen { display: none; }
  .uygulama { display: block; background: none; }
  /* D50: süzgeç formu, başlık düğmeleri ve form altı düğmeleri kâğıda basılmaz; baskı logosu görünür. */
  .suzgec, .suz, .suz-cipler, .baslik-aksiyon, .form-alt, .menu-perde, .zil-kutu, .bildirim.bekle { display: none; }
  .baski-baslik { display: block; margin: 0 0 .5rem; }
  .yazdir-govde { background: #fff; padding: 0; }
  .a4 { box-shadow: none; margin: 0; max-width: none; padding: 0; }
  .tablo { font-size: 10pt; }
  .tablo tbody tr { page-break-inside: avoid; }
  /* GÜVENLİK (Cooper 10-07): yazdırma izni olmayan kullanıcıda tarayıcı yazdırması (Ctrl+P / PDF'e kaydet)
     sayfa içeriğini basmaz; yalnız uyarı çıkar. Sınıfı sunucu koyar (gorunum.php, yazdirabilir()). */
  body.yazdirma-yok > * { display: none; }
  body.yazdirma-yok::before { content: "Yazdırma yetkiniz yok. Bu sayfanın çıktısı yalnız yönetici izniyle alınabilir.";
    display: block; padding: 2rem; font: 600 14pt/1.4 sans-serif; color: #000; }
}

/* ---------------- hata sayfasi ---------------- */
.bos-durum {
  background: var(--kart);
  border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak);
  padding: 2rem;
  text-align: center;
  max-width: 520px;
  margin: 2rem auto;
}

/* ==========================================================================
   MASAÜSTÜ — geniş ekranda kart yığmak yer israfıdır.
   Aynı HTML, farklı yerleşim: kartlar tek sütunda YATAY SATIR olur,
   bilgiler sütun sütun hizalanır. Tablo yoğunluğu, kart esnekliği.
   ========================================================================== */
@media (min-width: 901px) {
  /* Liste = TEK yüzey, satırlar ince çizgiyle ayrılır (her satır ayrı kutu değil — onaylı tasarım). */
  .kart-listesi { grid-template-columns: 1fr; gap: 0; background: var(--kart); border: 1px solid var(--cizgi);
    border-radius: var(--yuvarlak-buyuk); box-shadow: var(--golge); overflow: hidden; }
  .kart-listesi > .kart { border: 0; border-left: 3px solid transparent; border-bottom: 1px solid var(--cizgi);
    border-radius: 0; box-shadow: none; }
  .kart-listesi > .kart:last-child { border-bottom: 0; }
  .kart-listesi > .kart.iyi { border-left-color: var(--iyi); }
  .kart-listesi > .kart.bekle { border-left-color: var(--bekle); }
  .kart-listesi > .kart.kotu { border-left-color: var(--kotu); }
  .kart-listesi > .kart.aksiyon { border-left-color: var(--aksiyon); }
  .kart-listesi > .kart:hover { background: var(--notr-zemin); }

  .kart { align-items: stretch; }
  .kart-ana {
    display: flex;
    align-items: center;
    gap: 1.1rem;
    padding: .6rem .9rem;
    min-height: 52px;
  }
  /* Ad sütunu — rozet başlığın içinde kaldığı için biraz geniş. */
  .kart-ana h3 {
    flex: 0 0 230px;
    margin: 0;
    font-size: .95rem;
    display: flex;
    align-items: center;
    gap: .4rem;
    min-width: 0;
  }
  .kart-ana h3 > span:first-child,
  .kart-ana h3 { overflow: hidden; }
  /* Uzun ünvan üç nokta ile kesilir, satır kaymaz. */
  .kart-ana h3 { white-space: nowrap; text-overflow: ellipsis; }

  .kart-alt,
  .kart-kisi {
    margin: 0;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  /* K1 iade: sütunlar SABİT genişlik — yüzde, satırın hızlı-eylem alanı (1-3 simge) değişince her satırda
     farklı x'e düşüyordu. Ad / konum / yetkili aynı hizada. */
  .kart-alt  { flex: 0 0 190px; }
  .kart-kisi { flex: 0 0 170px; }

  /* Etiketler satıra sığmazsa ALT SATIRA iner — önceden taşan etiketler soldan kesiliyordu ("k: adres"). */
  .rozetler  { flex: 1 1 auto; justify-content: flex-end; flex-wrap: wrap; row-gap: .25rem; }

  /* Ölçümler: her hücre eşit genişlikte, sağa yaslı, sıkışmadan. */
  .olcum {
    flex: 0 0 auto;
    margin: 0;
    gap: 0;
    justify-content: flex-end;
  }
  .olcum span {
    min-width: 74px;
    padding: 0 .1rem;
    border-left: 1px solid var(--cizgi);
    line-height: 1.25;
  }
  .olcum span:first-child { border-left: 0; }
  .olcum b { font-size: .9rem; }

  .kart-hizli { flex-direction: row; border-left: 1px solid var(--cizgi); flex: 0 0 auto; }
  .kart-listesi > .kart .kart-hizli { width: 132px; justify-content: flex-end; }   /* 3 simge yeri sabit: satırlar aynı genişlikte */
  .kart-hizli a, .kart-hizli button { padding: 0 .75rem; }

  /* Rapor ve ayar sayfalarındaki tanıtım kartları eski hâlinde kalsın:
     bunlar liste değil, seçim kutularıdır. */
  .kart-listesi.kutu-listesi { grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: var(--a3);
    background: none; border: 0; box-shadow: none; overflow: visible; }
  .kart-listesi.kutu-listesi > .kart { border-top: 1px solid var(--cizgi); border-right: 1px solid var(--cizgi);
    border-bottom: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk); box-shadow: var(--golge); }
  /* sol şerit: durum rengi (.kart.iyi vb.) varsa o, yoksa çizgi rengi */
  .kart-listesi.kutu-listesi > .kart:not(.iyi):not(.bekle):not(.kotu):not(.aksiyon) { border-left-color: var(--cizgi); }
  .kart-listesi.kutu-listesi > .kart:last-child { border-bottom: 1px solid var(--cizgi); }
  .kutu-listesi .kart-ana { display: block; padding: .7rem .85rem; }
  .kutu-listesi .kart-ana h3 { flex: none; white-space: normal; margin-bottom: .3rem; }
  .kutu-listesi .kart-alt, .kutu-listesi .kart-kisi { flex: none; white-space: normal; }
  .kutu-listesi .rozetler { justify-content: flex-start; margin-top: .35rem; }
}

/* ==========================================================================
   MOBİL — saha ekibinin asıl kullandığı cihaz. Tek sütun, büyük dokunma alanı,
   yatay kayan tek yer tablolar; hiçbir yerde sayfanın kendisi yana kaymaz.
   ========================================================================== */

/* KABUK — telefon/tablet (≤860 px): sol menü gizlenir, ALT 5 SEKME gelir.
   "Daha" sekmesi (data-menu) sol menüyü alttan açılan panel olarak gösterir (data-acik). */
@media (max-width: 860px) {
  .uygulama { grid-template-columns: minmax(0, 1fr); background: none; }
  .yan-menu {
    display: none; position: fixed; left: 0; right: 0; bottom: 0; top: auto; height: auto;
    max-height: 82vh; max-height: 82dvh; border-right: 0; border-top: 1px solid var(--cizgi);
    border-radius: var(--yuvarlak-buyuk) var(--yuvarlak-buyuk) 0 0; box-shadow: 0 -12px 32px rgba(0, 0, 0, .25);
    padding-bottom: calc(var(--a4) + 64px + env(safe-area-inset-bottom, 0px)); z-index: 45; overscroll-behavior: contain;
  }
  .yan-menu[data-acik] { display: flex; }
  .yan-menu .yan-logo { display: none; }
  .yan-grup .mo-alt { display: flex; }   /* panelde tüm alt girişler açık */
  .menu-perde { display: block; position: fixed; inset: 0; background: rgba(0, 0, 0, .45); z-index: 44; }
  .menu-perde[hidden] { display: none; }
  .ust-serit { padding: calc(var(--a2) + env(safe-area-inset-top, 0px)) var(--a4) var(--a2); }
  .ust-logo { display: inline-flex; align-items: center; min-height: 40px; }   /* dokunma ≥40 (taban: üst şerit marka 22px) */
  .ust-logo img { width: 140px; }   /* Cooper 10-08: telefonda büyüt (112 → 140) — açık/koyu aynı */
  .ust-tarih { display: none; }
  /* s53 (Cooper 10-08 saha: "bazı cihazlarda Sohbet görünmüyor"): repeat(5, 1fr) sütunun alt sınırı ETİKETİN genişliğiydi
     (1fr = minmax(auto, 1fr)); dar ekran + büyük yazıda (Android "Ekran boyutu"/"Yazı boyutu") ızgara ekrandan taşıyor,
     Sohbet ve Menü sağda görünmez/tıklanamaz kalıyordu (overflow-x: clip taşmayı sessizce kesiyor). minmax(0, 1fr):
     5 sütun her koşulda eşit ve ekranda; uzun etiket üç noktayla kısalır, simge ve dokunma alanı kalır. */
  .alt-sekme {
    display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); position: fixed; left: 0; right: 0; bottom: 0; z-index: 46;
    background: var(--kart); border-top: 1px solid var(--cizgi);
    padding: 6px 4px calc(6px + env(safe-area-inset-bottom, 0px));
  }
  .alt-sekme a, .alt-sekme button {
    display: grid; justify-items: center; gap: 2px; font-size: 11px; color: var(--yazi-soluk);
    padding: 4px 0; border: 0; background: none; min-height: 0; text-decoration: none; cursor: pointer; font-family: inherit;
    /* 'Me nü': kalın 11px etikette harfler tam piksele yuvarlanınca e–n arası açılıyordu (başsız Chromium'da ölçüldü 2/8/5 → 3/3/3) */
    text-rendering: geometricPrecision;
    min-width: 0;
  }
  .alt-sekme a > span, .alt-sekme button > span { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .alt-sekme [aria-current="page"], .alt-sekme [aria-expanded="true"] { color: var(--vurgu-yazi); font-weight: 700; }
  /* s57: telefonda rozet simgenin sağ üstünde (akıştan çıkar; etiket satırı kaymaz). */
  .alt-sekme a { position: relative; }
  .alt-sekme a > .sohbet-rozet { position: absolute; top: 0; left: calc(50% + 4px); margin: 0; max-width: none; overflow: visible;
    min-width: 18px; height: 18px; line-height: 14px; font-size: 10.5px; padding: 0 4px; border: 2px solid var(--kart); }
  body { padding-bottom: calc(64px + env(safe-area-inset-bottom, 0px)); }
}

/* Tablet ve altı */
@media (max-width: 900px) {
  .ikili { grid-template-columns: 1fr; }
  .kart-listesi { grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
}

@media (max-width: 640px) {
  /* D45 (10-07): "hidden" gövdeyi kaydırma kabına çeviriyor, .ust-blok'un sticky'si çalışmıyordu
     (telefonda zil/menü şeridi sayfayla kayıp gidiyordu). "clip" yatay taşmayı yine keser ama kap
     oluşturmaz. clip bilmeyen eski tarayıcı (Safari <16) önceki satırdaki hidden'da kalır. */
  html, body { overflow-x: hidden; overflow-x: clip; }
  .govde {
    padding: var(--a4) calc(var(--a4) + env(safe-area-inset-right, 0px))
             var(--a5) calc(var(--a4) + env(safe-area-inset-left, 0px));
  }

  /* --- başlık ve düğmeler ---
     Mobilde bütün eylem düğmeleri EŞİT genişlikte ve tam satır kaplar;
     yan yana biri büyük biri küçük durmaz. */
  .baslik-satir { gap: .5rem; }
  .baslik-satir h1 { font-size: 1.5rem; width: 100%; }
  .baslik-aksiyon { width: 100%; margin-left: 0; }
  .baslik-aksiyon .dugme { flex: 1 1 calc(50% - .25rem); }
  .baslik-aksiyon .dugme:only-child { flex: 1 1 100%; }

  .dugme, button:not(.satir-ici button):not(.kart-hizli button):not(.ikon-d):not(.menu-dugme):not(.ko):not(.sl-filtre button):not(.daha-tehlike) { min-height: 44px; }
  .dugme.buyuk { min-height: 48px; width: 100%; }
  .dugme.mini { min-height: 40px; }   /* dokunma ≥40 (taban: a.dugme.mini 36px) */
  .sayfalama { gap: .375rem; }
  .sayfalama a { display: inline-flex; align-items: center; justify-content: center; min-width: 40px; min-height: 40px; }

  .form-alt .dugme, .rapor-dugmeler .dugme { flex: 1 1 100%; }
  .dugme-dizisi .dugme { flex: 1 1 calc(50% - .25rem); }
  /* s53 (M-16118 taşma denetimi): uzun etiketli düğme telefonda satıra kırılır — nowrap 320px + büyük yazıda Hesabım'da +80 taşıyordu. */
  .dugme { white-space: normal; text-align: center; padding-top: .4rem; padding-bottom: .4rem; }
  .satir-form { flex-wrap: wrap; }
  .satir-form .dugme, .satir-form button { flex: 1 1 100%; }

  /* --- kutular ve kartlar --- */
  .kutular { grid-template-columns: 1fr 1fr; gap: .5rem; }
  /* s58 B7 (M-16367): 3 eylem kutusu telefonda TEK SATIR kompakt — alt alta 258 px kaplıyor, "Bugün ve geciken"
     listesi ilk ekranın altında kalıyordu (390'da ölçüldü). Dokunma alanı ≥ 40 px korunur. */
  .kutular.bugun-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: .4rem; margin-bottom: 1rem; }
  .bugun-3 .kutu { padding: .5rem .55rem; min-height: 56px; border-left-width: 3px; }
  .bugun-3 .k-etiket { font-size: .72rem; line-height: 1.2; }
  .bugun-3 .k-deger { font-size: 1.45rem; margin-top: .2rem; }
  /* s58 B6: dağılım çubuk bağlantıları telefonda parmakla basılır yükseklikte (24 → 40 px). */
  a.cubuk-satir { min-height: 40px; margin-bottom: .1rem; }
  .k-deger { font-size: 1.1rem; }
  .kart-listesi { grid-template-columns: 1fr; }
  .ozet-serit { grid-template-columns: 1fr 1fr; }
  .blok { padding: .8rem .75rem; }

  /* Kart: bilgi üstte, hızlı eylemler ALTTA tam satır.
     Sağdaki dikey simge şeridi parmakla zor tutuluyordu (24 px'lik hedef);
     alta alınınca her düğme 46 px yükseklikte ve eşit genişlikte olur. */
  .kart { flex-direction: column; }
  .kart-hizli {
    flex-direction: row;
    border-left: 0;
    border-top: 1px solid var(--cizgi);
  }
  .kart-hizli a, .kart-hizli button { flex: 1; min-height: 46px; padding: 0 .5rem; }
  .kart-hizli a + a, .kart-hizli a + button, .kart-hizli button + button,
  .kart-hizli button + a { border-left: 1px solid var(--cizgi); }
  /* s64 Mü7 (Cooper 'Ekle', MURPH M-16663; Tur 2 G7 emsali): müşteri listesi telefonda SIKI SATIR — ad + tek bilgi satırı,
     hızlı işlemler sağda. Yalnız .musteri-liste (diğer kart listeleri aynen). Hedef: 390'da ilk ekranda ≥5 müşteri. */
  .kart-listesi.musteri-liste { gap: 0; background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk);
    box-shadow: var(--golge); overflow: hidden; }   /* tek yüzey, satırlar çizgiyle (masaüstü listesiyle aynı dil) — kart arası 11 px boşluk yok */
  .musteri-liste > .kart { flex-direction: row; align-items: stretch; border: 0; border-left: 3px solid transparent;
    border-bottom: 1px solid var(--cizgi); border-radius: 0; box-shadow: none; }
  .musteri-liste > .kart:last-child { border-bottom: 0; }
  .musteri-liste > .kart.iyi { border-left-color: var(--iyi); } .musteri-liste > .kart.bekle { border-left-color: var(--bekle); }
  .musteri-liste > .kart.kotu { border-left-color: var(--kotu); } .musteri-liste > .kart.aksiyon { border-left-color: var(--aksiyon); }
  .musteri-liste .kart-ana { padding: .5rem .75rem; display: flex; flex-direction: column; justify-content: center; }
  .musteri-liste .kart-ana h3 { margin: 0; font-size: .97rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .musteri-liste .kart-ana > .kart-alt, .musteri-liste .kart-ana > .kart-kisi,
  .musteri-liste .kart-ana > .kart-meta, .musteri-liste .kart-ana > .rozetler { display: none; }
  .musteri-liste .kart-tel { display: block; margin: .1rem 0 0; font-size: .8rem; color: var(--yazi-soluk);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .musteri-liste .kart-hizli { flex-direction: row; border-top: 0; border-left: 1px solid var(--cizgi); flex: 0 0 auto; }
  .musteri-liste .kart-hizli a { flex: 0 0 44px; width: 44px; min-width: 44px; min-height: 44px; padding: 0; }
  /* Telefon satırında yalnız Ara + WhatsApp: bilgi satırına yer kalsın (konum müşteri kartında ilk ekranda). */
  .musteri-liste .kart-hizli a[href^="https://maps."] { display: none; }
  /* s66 E2 (MURPH M-16715, Mü7 deseni): Ekip listesi telefonda SIKI SATIR — ad + tek bilgi satırı (görev · müşteri · açık görev);
     rozetler ve 7 ölçü kartta. Yalnız .ekip-liste (diğer kart listeleri aynen). */
  .kart-listesi.ekip-liste { gap: 0; background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk);
    box-shadow: var(--golge); overflow: hidden; }
  .ekip-liste > .kart { border: 0; border-left: 3px solid transparent; border-bottom: 1px solid var(--cizgi); border-radius: 0; box-shadow: none; }
  .ekip-liste > .kart:last-child { border-bottom: 0; }
  .ekip-liste > .kart.kotu { border-left-color: var(--kotu); }
  .ekip-liste .kart-ana { padding: .55rem .75rem; min-height: 48px; display: flex; flex-direction: column; justify-content: center; }
  .ekip-liste .kart-ana h3 { margin: 0; font-size: .97rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .ekip-liste .kart-ana > .kart-alt, .ekip-liste .kart-ana > .rozetler, .ekip-liste .kart-ana > .olcum { display: none; }
  .ekip-liste .kart-tel { display: block; margin: .1rem 0 0; font-size: .8rem; color: var(--yazi-soluk);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

  /* Ölçüm hücreleri eşit paylaşsın, tek tek kaymasın. */
  .olcum { gap: .4rem; justify-content: flex-start; }
  .olcum span { flex: 1 1 0; min-width: 68px; }

  /* Ürün seçenekleri dar ekranda alt alta, tam genişlik ve parmak ölçüsünde;
     uzun ürün adı tek satıra sıkışıp taşmasın. */
  .urun-secim label { flex: 1 1 100%; min-height: 46px; white-space: normal; }

  /* Yetki şeridi: ad üstte, üç kademe altta TAM GENİŞLİK ve eşit paylı.
     Yan yana sıkıştırılırsa kademeler 30 px'e düşüyor, parmakla seçilemiyor. */
  .seviye-satir { flex-wrap: wrap; gap: .4rem; padding: .6rem .6rem .7rem; }
  .seviye-ad { flex: 1 1 100%; font-weight: 500; }
  .seviye-secim { flex: 1 1 100%; }
  .seviye-secim label { flex: 1; min-height: 42px; padding: 0 .4rem; font-size: .85rem; }

  /* Satır içi küçük düğmeler (× sil) parmak ölçüsüne çıkar. */
  .satir-ici button { min-height: 40px; min-width: 40px; }
  .dogrulama-satiri .dugme { min-height: 40px; }
  /* Rozet listesindeki × parmakla tutulabilsin ama rozeti şişirmesin. */
  .etiket-listesi li { padding: .28rem .3rem .28rem .8rem; font-size: .92rem; }
  /* Grup 5 (c): × 40 px — rozet dikey payı sıfırlanır ki rozet şişmesin. */
  .etiket-listesi li { padding-top: 0; padding-bottom: 0; min-height: 42px; }   /* × olmayan (kullanımda) rozet de aynı boyda */
  .etiket-listesi .satir-ici button { min-height: 40px; min-width: 40px; }
  .gorsel-kutu .satir-ici button { min-height: 26px; min-width: 26px; width: 26px; height: 26px; }

  /* Zil listesi: telefonda neredeyse tam genişlik, ama ekranı taşırmadan
     (çentikli cihazın kenar payı da hesaba katılır). Sabit 300 px dar
     ekranda hem taşıyor hem satırları iki-üç satıra kırıyordu. */
  .zil-kutu {
    width: calc(100vw - 1.4rem - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px));
    max-width: 340px;
  }

  /* Yüzen "yeni kayıt" düğmesi mobilde KALDIRILDI: sayfanın altındaki
     yazının üstüne biniyordu. Aynı eylem sayfa başında tam genişlikte
     düğme olarak zaten duruyor, ikinci bir kopyaya gerek yok. */
  .yuzen { display: none; }

  /* --- formlar: tek sütun --- */
  .kayit-form, .kayit-form.dar, .grup, .izin-kutusu, .alan-izgara, .liste-izgara {
    grid-template-columns: 1fr;
  }
  .suzgec-satir { grid-template-columns: 1fr; }
  /* iOS'ta 16px altı yazı alanına dokununca sayfa zumlar — engelle */
  input, select, textarea { font-size: 16px; padding: .55rem .65rem; }
  label { font-size: .85rem; }

  /* --- süzgeç çubuğu: alt alta, tam genişlik --- */
  .suzgec { padding: .6rem; gap: .5rem; }
  .suzgec select, .suzgec input:not([type=checkbox]):not([type=radio]), .suzgec .ara-alan { width: 100%; min-width: 0; flex: 1 1 100%; }
  .suzgec .onay { flex: 1 1 auto; min-height: 44px; }   /* onay kutusu + metni yan yana, satırı doldurur */
  .suzgec .dugme { flex: 1 1 auto; justify-content: center; }
  .satir-etiket { width: 100%; }

  /* --- tablolar: tek yatay kayan alan, kenarda ipucu gölgesi --- */
  .tablo-sarmal {
    -webkit-overflow-scrolling: touch;
    margin: 0 -.6rem;                 /* ekranın kenarına kadar kaysın */
    padding: 0 .6rem;
  }
  .tablo { font-size: .82rem; }
  .tablo th, .tablo td { padding: .5rem .45rem; }
  .tablo input:not([type=checkbox]):not([type=radio]), .tablo select { min-width: 120px; }

  /* --- satır listeleri --- */
  .satir { flex-wrap: wrap; padding: .6rem .1rem; }
  .s-tarih { min-width: 72px; }
  .s-ad { flex: 1 1 60%; }

  /* --- günlük rapor: ziyaret blokları katlanır --- */
  .ziyaret-grup { padding: .7rem .75rem .8rem; }
  .ziyaret-grup legend { font-size: .8rem; }

  /* --- yazdırma önizlemesi ---
     Belge tablosu kâğıt genişliğine göre kurulur; telefonda sığmaz.
     html'de overflow-x gizli olduğu için sütunlar KESİLİYORDU — kâğıdın
     kendisi yatay kaysın ki rapor eksiksiz okunabilsin. */
  .yazdir-govde { padding: .5rem; }
  .a4 { padding: 12mm 8mm; overflow-x: auto; }
  .belge-alan { flex-direction: column; gap: .15rem; }
  .belge-alan span { min-width: 0; }
  .imza-alani { flex-direction: column; gap: 1.2rem; }
}

/* Çok dar telefonlar.
   NOT: menü artık açılır panel olduğu için başlıklar GİZLENMEZ — eskiden
   şerit sığmadığından yalnız simge bırakılıyordu, panelde buna gerek yok. */
@media (max-width: 380px) {
  .kutular { grid-template-columns: 1fr 1fr; gap: .4rem; }
  .kutu { padding: .55rem .6rem; }
  .k-etiket { font-size: .72rem; }
  .k-deger { font-size: 1rem; }
  .ozet-serit { grid-template-columns: 1fr 1fr; }
  .baslik-satir h1 { font-size: 1.35rem; }   /* Grup 3: 1.08rem Cormorant başlığı 360'ta 16 px'e düşürüyordu */
}

/* Dokunmatik cihazlarda üzerine gelme etkisi yanıltmasın */
@media (hover: none) {
  .satir:hover, .tablo tbody tr:hover { background: transparent; }
}

/* Dar ekranda tablolar KART SATIRINA döner — yatay taşma olmaz (yan kaydırma yerine
   her satır bir kart, her hücre "etiket: değer"). data-label hücreden gelir. */
/* D18 (10-07): yalnız ETİKETLİ tablo (td[data-label] — sunucudan ya da uygulama.js tabloEtiketle'den)
   karta döner. Etiketsiz tablo (JS kapalı / eski tarayıcı :has yok) başlıklı, yatay kaydırmalı kalır —
   önceden her tablo karta dönüp başlık gizleniyor, etiketsiz sayfalarda sayılar anlamsız kalıyordu. */
@media (max-width: 640px) {
  .tablo-sarmal:has(td[data-label]) { overflow-x: visible; }
  /* tfoot/th da kart-satır: "Toplam" satırı dar+başlıksız kalmasın (O-5 cila). */
  .tablo:has(td[data-label]), .tablo:has(td[data-label]) tbody, .tablo:has(td[data-label]) tfoot,
  .tablo:has(td[data-label]) tr, .tablo:has(td[data-label]) td, .tablo:has(td[data-label]) tfoot th { display: block; width: auto; }
  .tablo:has(td[data-label]) thead { display: none; }
  .tablo:has(td[data-label]) tr { border: 1px solid var(--cizgi); border-radius: var(--yuvarlak); margin-bottom: .5rem; padding: .25rem .6rem; }
  .tablo:has(td[data-label]) tfoot tr { background: var(--notr-zemin); font-weight: 600; }
  .tablo:has(td[data-label]) td, .tablo:has(td[data-label]) tfoot th { border: 0; padding: .35rem 0; display: flex; justify-content: space-between; gap: 1rem; align-items: baseline; text-align: right; }
  .tablo:has(td[data-label]) td::before, .tablo:has(td[data-label]) tfoot th::before { content: attr(data-label); color: var(--yazi-soluk); font-size: .8rem; font-weight: 400; text-align: left; white-space: nowrap; }
  .tablo:has(td[data-label]) td[data-label=""]:empty, .tablo:has(td[data-label]) tfoot th[data-label=""]:empty { display: none; }
  .tablo:has(td[data-label]) td[data-label=""], .tablo:has(td[data-label]) tfoot th[data-label=""] { justify-content: flex-end; }
  /* Grup 4 (Stripe mobil tablo): boş hücre kartta yer kaplamaz; rapor tablosunda ilk sütun kartın başlığıdır. */
  .tablo:has(td[data-label]) td.bos-hucre { display: none; }
  .rapor-tablo:has(td[data-label]) tbody td:first-child { justify-content: flex-start; text-align: left; font-weight: 700; font-size: .95rem; }
  .rapor-tablo:has(td[data-label]) tbody td:first-child::before { content: none; }
  /* İki sütunlu özet (Hesabım → Yetkilerim): telefonda kart değil tek satır — solda ad, sağda değer. */
  .yetki-ozet:has(td[data-label]) tr { display: flex; justify-content: space-between; align-items: center; gap: 12px;
    border: 0; border-bottom: 1px solid var(--cizgi); border-radius: 0; margin: 0; padding: .55rem 0; }
  .yetki-ozet:has(td[data-label]) td { padding: 0; }
  .yetki-ozet:has(td[data-label]) td::before { content: none; }
  .yetki-ozet:has(td[data-label]) td:first-child { justify-content: flex-start; text-align: left; }
  /* s53 (M-16118 taşma denetimi, 320px'te +47): genel .yetki-ozet nowrap'ı uzun adı tek satırda tutup sağdaki rozeti
     ekran dışına itiyordu (kart kipinde kap kaydırmaz). Ad kırılır, değer küçülmez. */
  .yetki-ozet:has(td[data-label]) td:first-child { white-space: normal; min-width: 0; flex: 1 1 auto; display: block; }
  .yetki-ozet:has(td[data-label]) td:last-child { flex: 0 1 auto; white-space: normal; text-align: right; }
  /* Grup 5: Modül × eylem özeti (6 sütun) telefonda 7×6 kart yığınıydı (~1.500 px).
     Gerçek tablo olarak kalır: ad solda kırılır, 5 işaret sütunu dar ve ortalı. */
  .tablo.yetki-matris:has(td[data-label]) { display: table; width: 100%; table-layout: fixed; }
  .tablo.yetki-matris:has(td[data-label]) thead { display: table-header-group; }
  .tablo.yetki-matris:has(td[data-label]) tbody { display: table-row-group; }
  .tablo.yetki-matris:has(td[data-label]) tr { display: table-row; border: 0; border-radius: 0; margin: 0; padding: 0; }
  .tablo.yetki-matris:has(td[data-label]) td, .tablo.yetki-matris th { display: table-cell; padding: .45rem .15rem; border-bottom: 1px solid var(--cizgi); }
  .tablo.yetki-matris:has(td[data-label]) td::before { content: none; }
  .tablo.yetki-matris th { font-size: .72rem; font-weight: 600; text-transform: none; letter-spacing: 0; }
  .tablo.yetki-matris th.orta { padding-left: 0; padding-right: 0; }   /* 360 px: "Düzenler" 46 px sütuna sığsın */
  .tablo.yetki-matris th:first-child { width: 25%; text-align: left; }
  .tablo.yetki-matris:has(td[data-label]) td:first-child { white-space: normal; text-align: left; font-size: .8rem; line-height: 1.3; }
}

/* ===== SOHBET — Grup 2 (onaylı tasarım 10-07) =====
   Esin: WhatsApp Web / Slack — solda aranabilir konuşma listesi, sağda oda; telefonda liste ve oda ayrı ekran.
   Panel tek yüzey: liste + oda aynı çerçevede, sayfa yüksekliğini doldurur (mesajlar kendi içinde kayar). */
.sohbet { display: grid; grid-template-columns: 320px minmax(0, 1fr); background: var(--kart); border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak-buyuk); box-shadow: var(--golge); overflow: hidden;
  flex: 1 1 auto; min-height: 420px; }
/* Sohbet sayfası ekranı DOLDURUR: sabit yükseklik hesabı yerine esnek sütun — üstte uyarı şeridi gibi bir öğe
   çıksa da yazma alanı ekranın içinde kalır (önce 100dvh-150px idi; şerit çıkınca yazma alanı kesiliyordu). */
body:has(.sohbet) .ana { height: 100vh; height: 100dvh; }
body:has(.sohbet) .govde { display: flex; flex-direction: column; min-height: 0; padding-bottom: var(--a4); }
body:has(.sohbet) .dip { display: none; }
.sohbet-liste { border-right: 1px solid var(--cizgi); display: flex; flex-direction: column; min-height: 0; min-width: 0; }
.sl-ust { padding: 14px 14px 10px; display: grid; gap: 10px; border-bottom: 1px solid var(--cizgi); }
.sl-baslik { display: flex; align-items: center; gap: 8px; }
.sl-baslik h1 { font-size: 1.6rem; margin: 0; flex: 1; min-width: 0; white-space: nowrap; }
/* s72: okunmamış sayısı başlıkta rozet (önceden "5 okunmamış" metni 1366'da başlığı iki satıra kırıyordu). */
.sl-baslik .sl-sayi { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 24px; padding: 0 7px;
  margin-left: 4px; border-radius: 999px; background: var(--kotu-dolgu); color: #fff; font: 700 .8rem/1 var(--yazi-govde, inherit);
  vertical-align: middle; font-variant-numeric: tabular-nums; }
.sl-baslik .sl-sayi[hidden] { display: none; }
.sl-arac { position: relative; }
.sl-arac > summary { list-style: none; }
.sl-arac > summary::-webkit-details-marker { display: none; }
.sl-arac-kutu { position: absolute; right: 0; top: 46px; width: 300px; max-width: calc(100vw - 32px); max-height: 70vh; overflow: auto;
  background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk);
  box-shadow: 0 12px 32px rgba(0, 0, 0, .18); padding: 12px; z-index: 30; }
.sl-ara { display: flex; align-items: center; gap: 8px; margin: 0; background: var(--notr-zemin); border: 1px solid var(--cerceve);
  border-radius: var(--yuvarlak); padding: 0 12px; color: var(--yazi-soluk); }
.sl-ara:focus-within { outline: 2px solid var(--vurgu-yazi); outline-offset: -1px; }
.sl-ara .ikon { width: 16px; height: 16px; }
.sl-ara input { border: 0; background: none; margin: 0; padding: 0; min-height: 42px; outline: none; flex: 1; min-width: 0; font-size: 16px; }
.sl-yildiz[aria-current] { color: var(--vurgu-yazi); border-color: var(--vurgu-yazi); }
.sl-filtre { display: flex; gap: 6px; flex-wrap: wrap; }
.sl-filtre button, .sl-filtre a { border: 1px solid var(--cizgi); background: var(--kart); border-radius: 999px; padding: 0 10px;
  min-height: 40px; font: inherit; font-size: 13px; color: var(--yazi-soluk); display: inline-flex; align-items: center; gap: 4px;   /* s64 M4: masaüstünde de ≥40 (önceden 34) */
  cursor: pointer; text-decoration: none; }
.sl-filtre .ikon { width: 13px; height: 13px; }
.sl-filtre [aria-pressed="true"], .sl-filtre [aria-current] { background: var(--vurgu); border-color: var(--vurgu); color: var(--vurgu-ustu); font-weight: 600; }
.sl-liste { overflow-y: auto; flex: 1; min-height: 0; }
.ko { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 2px 12px; align-items: center; width: 100%;
  min-height: 66px; padding: 11px 14px; border: 0; border-left: 3px solid transparent; border-radius: 0; background: none;
  text-align: left; color: var(--yazi); font: inherit; cursor: pointer; text-decoration: none; }
.ko:hover { background: var(--notr-zemin); text-decoration: none; }
.ko[aria-current="true"] { background: var(--vurgu-hafif); border-left-color: var(--vurgu); }
.ko .ko-av { grid-row: span 2; width: 44px; height: 44px; font-size: 15px; }
.ko b { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ko time { font-size: 12px; color: var(--yazi-soluk); font-variant-numeric: tabular-nums; }
.ko .son { grid-column: 2; color: var(--yazi-soluk); font-size: 13.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ko .ok { grid-column: 3; justify-self: end; background: var(--kotu-dolgu); color: #fff; font-size: 11px; font-weight: 700;
  border-radius: 999px; min-width: 20px; text-align: center; padding: 1px 6px; }
.ko.yeni b { font-weight: 700; }
.ko.yeni time { color: var(--yazi); font-weight: 700; }
.ko-form { display: block; margin: 0; }
/* s76 (I) oda sabitleme: satır + ⋮ menüsü yan yana; sabit satırda iğne. ⋮ dokunma alanı 44 px (görünen 28). */
.ko-sar { position: relative; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; }
.ko-sar[hidden] { display: none; }
.ko-igne .ikon { width: 13px; height: 13px; margin-right: 4px; vertical-align: -1px; color: var(--vurgu-yazi); }
.ko-menu { position: static; }
.ko-menu > summary { list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: center; width: 44px; min-height: 44px;
  margin-right: 4px; border-radius: 8px; color: var(--yazi-soluk); font-size: 1.15rem; line-height: 1; user-select: none; }
.ko-menu > summary::-webkit-details-marker { display: none; }
.ko-menu > summary:hover, .ko-menu[open] > summary { background: var(--notr-zemin); color: var(--yazi); }
.ko-menu-kutu { position: absolute; right: 8px; top: calc(100% - 6px); z-index: 40; min-width: 190px; display: grid; padding: 6px;
  background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk); box-shadow: 0 12px 28px rgba(0, 0, 0, .18); }
.ko-menu-kutu form { margin: 0; }
.ko-menu-kutu button { width: 100%; min-height: 44px; text-align: left; padding: 0 12px; border: 0; background: none; color: var(--yazi);
  border-radius: 8px; cursor: pointer; font: inherit; }
.ko-menu-kutu button:hover, .ko-menu-kutu button:focus-visible { background: var(--notr-zemin); }
.ko-sar.sabit + .ko-sar:not(.sabit) { border-top: 1px solid var(--cizgi); }   /* sabitlenenlerle ötekiler arası ince çizgi */
.ko-menu-baslik { display: none; }
/* Telefonda menü ALT SAYFA: ekrana sabit, alt menünün üstünde (--ko-menu-alt sohbet.php'de ölçülür). Liste örtüldüğü için
   başta konuşmanın adı yazar. */
@media (max-width: 860px) {
  .ko-menu-baslik { display: block; margin: 4px 12px 6px; font-size: .85rem; color: var(--yazi-soluk); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .ko-menu-kutu { position: fixed; left: 12px; right: 12px; top: auto; bottom: var(--ko-menu-alt, 80px); min-width: 0; z-index: 60;
                  box-shadow: 0 -8px 32px rgba(0, 0, 0, .22); }
}
.sl-ara-baslik { padding: 12px 14px 4px; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: var(--yazi-soluk); }
/* s66 S1: konuşması olmayan kişiye tek satır yönlendirme — kişiler hemen altında ilk ekranda görünsün (.bos-satir dolgusu kişileri ekran dışına itiyordu). */
.sl-ilk-bos { margin: 0; padding: 14px 14px 2px; font-size: 14px; color: var(--yazi-soluk); }
.sohbet-yonet { margin-top: .4rem; }
.sohbet-yonet summary { cursor: pointer; padding: .4rem 0; color: var(--yazi-soluk); min-height: 40px; display: flex; align-items: center; }
/* s52 İŞ5a-2: üye listesinde iç kaydırma YOK (160px'te işaretliler gözden kaçıyordu); üyeler üstte, sayı başlıkta. */
.sohbet-uyeler, .sohbet-ai-akis { border: 1px solid var(--cizgi); border-radius: 8px; padding: .4rem .6rem; margin: .4rem 0; min-width: 0; }
.sohbet-uyeler legend small { color: var(--yazi-soluk); font-weight: 400; }
.sohbet-uyeler .uye-pasif { color: var(--yazi-soluk); }
/* s52 İŞ5a-1: AI akış alanı kendi sınıfında — yükseklik sınırı yok, açıklama metni tam okunur. */
.sohbet-ai-akis label.onay { display: flex; flex-direction: row; justify-content: flex-start; gap: .4rem; align-items: center; padding: .15rem 0; }
.sohbet-ai-akis .ipucu { display: block; overflow-wrap: anywhere; }
.sohbet-uyeler label.onay { display: flex; flex-direction: row; justify-content: flex-start; gap: .4rem; align-items: center; padding: .15rem 0; }   /* oda ayar formunda .oda-ayar-form label'ın column yönü sızmasın (D28) */
/* s53 (M-16145): personel kartı "WEST AI'ye sor" bölümü — tek sütun, okunur genişlik; izin cümlesi tek parça. */
.ai-izin-form { display: grid; gap: var(--a3); max-width: 560px; }
/* s53 EK-3 (M-16180): personel kartı "Görünürlük ve yetkiler" — tek seçim + çipler + özet + kapalı Gelişmiş. */
.gorunum-form { display: grid; gap: var(--a3); }
.gorunum-secim { border: 0; padding: 0; margin: 0; display: grid; gap: var(--a2); max-width: 640px; }
.gorunum-secim legend { font-weight: 700; margin-bottom: var(--a2); padding: 0; }
.gorunum-secim > label.onay { display: flex; gap: var(--a2); align-items: center; min-height: 40px; }
.gorunum-kisiler { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 var(--a2) 28px; }
.gorunum-kisiler[hidden] { display: none; }
.cip-secim { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--cizgi); border-radius: 999px;
  padding: 0 12px 0 8px; min-height: 36px; font-size: .9rem; cursor: pointer; background: var(--kart); max-width: 100%; }
.cip-secim span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
.cip-secim:has(input:checked) { border-color: var(--vurgu); background: var(--vurgu-hafif); color: var(--vurgu-yazi); font-weight: 600; }
.gorunum-ozet { margin: 0; padding: .55rem .8rem; border-radius: var(--yuvarlak); background: var(--notr-zemin); color: var(--yazi); font-size: .92rem; }
details.gelismis { border: 1px solid var(--cizgi); border-radius: var(--yuvarlak); padding: 0 var(--a3); }
details.gelismis > summary { cursor: pointer; min-height: 44px; display: flex; align-items: center; gap: var(--a2); font-weight: 600; }
details.gelismis > summary small { font-weight: 400; color: var(--yazi-soluk); }
details.gelismis[open] { padding-bottom: var(--a3); }
@media (max-width: 640px) { .gorunum-kisiler { margin-left: 0; } }
.ai-izin-form > label.onay { display: flex; gap: var(--a2); align-items: flex-start; }
.ai-izin-form > label.onay input { margin-top: .2rem; flex: 0 0 auto; }
.ai-izin-form .sohbet-uyeler { margin: 0; }
.ai-izin-form .form-alt { margin: 0; }
/* s62 Görev ve yetkiler (Cooper 10-09, onaylı taslak NOTLAR/S62-TASLAK) */
.s62-form { gap: 18px; padding: 4px 0; }
.s62-form .gorunum-secim { border-top: 1px solid var(--cizgi); padding-top: 14px; max-width: none; }
.s62-form .gorunum-secim:first-of-type { border-top: 0; padding-top: 0; }
.s62-gorev { display: flex; flex-wrap: wrap; gap: 8px; }
.s62-gorev-sec { display: inline-flex; align-items: center; gap: 8px; min-height: 44px; padding: 0 16px; border: 1px solid var(--cerceve); border-radius: 999px; font-weight: 600; cursor: pointer; }
.s62-gorev-sec:has(input:checked) { border-color: var(--vurgu-yazi); background: var(--vurgu-hafif); color: var(--vurgu-yazi); }
.s62-kutular { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 2px 18px; }
.gorunum-secim > label.s62-kutu, .gorunum-secim > label.s62-alt, .s62-kutular > label.s62-kutu { display: flex; gap: var(--a2); min-height: 40px; align-items: center; }
.gorunum-secim > label.s62-alt { border-top: 1px dashed var(--cizgi); padding-top: 8px; }
.gorunum-secim > label.s62-alt[hidden] { display: none; }
.gorunum-secim > label.s62-sec { align-items: flex-start; padding: 4px 0; }
.s62-sec > span { display: grid; gap: 2px; }
.s62-sec small.ipucu { margin: 0; font-weight: 400; }
.s62-sec input { margin-top: 3px; }
.s62-kisiler.gorunum-kisiler { gap: 8px; margin: 0 0 6px 28px; }
.s62-kisiler .cip-secim { min-height: 40px; padding: 0 14px; }
.yetki-ozet { margin-bottom: var(--a3); }
@media (max-width: 640px) { .s62-kisiler.gorunum-kisiler { margin-left: 0; } }

.sohbet-akis { display: flex; flex-direction: column; min-width: 0; min-height: 0; background: var(--zemin); }
.sohbet-ust { display: flex; align-items: center; gap: 12px; padding: 10px 18px; background: var(--kart);
  border-bottom: 1px solid var(--cizgi); color: var(--yazi); }
.sohbet-ust .sohbet-ust-bas { flex: 1; }
.sohbet-geri { display: none; }
.sohbet-iletiler { flex: 1; overflow-y: auto; padding: 16px 22px; display: flex; flex-direction: column; gap: 6px; }
.si-gun { align-self: center; margin: 8px 0 4px; }
.si-gun span { font-size: 12px; color: var(--yazi-soluk); background: var(--kart); border: 1px solid var(--cizgi);
  padding: 3px 12px; border-radius: 999px; }
.si-satir { display: flex; align-items: flex-end; gap: 8px; }
.si-satir.benim { justify-content: flex-end; }
.si-av { width: 30px; height: 30px; font-size: 12px; margin-bottom: 2px; }
.si-av-bos { visibility: hidden; }
.si-blok { display: flex; flex-direction: column; align-items: flex-start; max-width: min(560px, 78%); min-width: 0; }
.si-satir.benim .si-blok { align-items: flex-end; }
/* Balon: karşı = yüzey + ince çizgi; kendi = --balon-ben (açık: Lacivert/beyaz 10.94 · koyu: #0E4C68/#EAF7FB). */
.si-balon { max-width: 100%; background: var(--kart); color: var(--yazi); border: 1px solid var(--cizgi);
  border-radius: 14px 14px 14px 4px; padding: 7px 12px 6px; display: flex; flex-direction: column; gap: 2px; box-shadow: var(--golge); }
.si-satir.benim .si-balon { background: var(--balon-ben); color: var(--balon-ben-yazi); border-color: transparent; border-radius: 14px 14px 4px 14px; }
.si-kim { font-size: 12.5px; font-weight: 700; color: var(--balon-ad); }
/* Sıkı satır aralığı: satır sonları nl2br'den gelir; pre-wrap ikinci bir boş satır üretiyordu (envanter §4). */
.si-govde { white-space: normal; line-height: 1.42; word-break: break-word; }
.si-saat { font-size: 11px; color: var(--yazi-soluk); align-self: flex-end; font-variant-numeric: tabular-nums; }
.si-satir.benim .si-saat { color: var(--balon-ben-yazi); }
.si-foto { max-width: 240px; max-height: 240px; border-radius: 10px; display: block; margin: 2px 0 4px; }
.sohbet-yaz { display: flex; gap: 10px; align-items: flex-end; padding: 10px 18px; background: var(--kart); border-top: 1px solid var(--cizgi); position: relative; }
/* s54 (M-16187): @ kişi öneri listesi — yazma çubuğunun HEMEN ÜSTÜNDE (klavyenin üstü; alt menüyü örtmez), en çok 6 satır görünür. */
.etiket-liste { position: absolute; left: 8px; right: 8px; bottom: calc(100% + 4px); z-index: 30; max-height: min(320px, 45vh);
  overflow-y: auto; overscroll-behavior: contain; background: var(--kart); border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak-buyuk); box-shadow: 0 10px 28px rgba(0, 0, 0, .18); padding: 4px; }
.etiket-liste[hidden] { display: none; }
/* s56 (M-16320): hatırlatma "Düzenle" bağlantısı formun başına (#duzenle) iner — yapışkan üst şeridin altında kalmasın. */
.hz-yeni { scroll-margin-top: calc(84px + env(safe-area-inset-top, 0px)); }
.etiket-herkes-av { background: var(--vurgu); color: var(--vurgu-ustu); }   /* s55 @herkes satırı: marka dolgusu */
@media (min-width: 861px) { .etiket-liste { right: auto; width: 420px; max-width: calc(100% - 16px); } }   /* masaüstünde dar öneri kutusu */
.etiket-oge { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 6px 10px; border-radius: var(--yuvarlak); cursor: pointer; }
.etiket-oge:hover, .etiket-oge.aktif { background: var(--vurgu-hafif); }
.etiket-oge .etiket-av .si-avatar { width: 32px; height: 32px; font-size: 13px; }
.etiket-metin { display: flex; flex-direction: column; min-width: 0; line-height: 1.25; }
.etiket-metin b { font-weight: 600; color: var(--yazi); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.etiket-metin small { color: var(--yazi-soluk); font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sohbet-yaz textarea { flex: 1; resize: none; min-height: 44px; max-height: 140px; margin: 0; border-radius: 12px; background: var(--notr-zemin); }
.sohbet-ek { cursor: pointer; user-select: none; }
.sohbet-yaz .sohbet-ek.ikon-d, .sohbet-yaz .sohbet-gonder { width: 44px; height: 44px; margin: 0; }
.sohbet-ek.dolu { color: var(--vurgu-yazi); border-color: var(--vurgu-yazi); }
/* s63 çoklu fotoğraf: seçili adet rozeti + gönderim durumu/ilerleme satırı (sayfa/sohbet.php). */
.sohbet-yaz .sohbet-ek { position: relative; }
.sohbet-ek[data-adet]::after { content: attr(data-adet); position: absolute; top: -6px; right: -6px; min-width: 20px; height: 20px; padding: 0 5px;
  border-radius: 999px; background: var(--vurgu); color: var(--vurgu-ustu); font-size: .72rem; font-weight: 700; line-height: 20px; text-align: center; }
.sohbet-foto-durum { margin: 0; padding: 4px 18px 6px; background: var(--kart); color: var(--yazi-soluk); font-size: .8rem; }
.sohbet-foto-durum[hidden] { display: none; }
@media (max-width: 860px) { .sohbet-foto-durum { padding: 4px 10px 6px; } }
.sohbet-gonder.ikon-d { border-radius: 50%; background: var(--vurgu); border-color: var(--vurgu); color: var(--vurgu-ustu); }
.sohbet-gonder.ikon-d:hover { background: var(--vurgu-koyu); border-color: var(--vurgu-koyu); color: var(--vurgu-ustu); }
/* s52 EK: Enter ipucu yalnız ince işaretçide (JS aynı ölçütle gönderir); dokunmatikte gizli. */
.sohbet-enter-ipucu { display: none; }
@media (pointer: fine) {
  .sohbet-akis > .sohbet-enter-ipucu { display: block; margin: 0; padding: 0 18px 8px; background: var(--kart); font-size: .75rem; }
  .si-ilet-kutu .sohbet-enter-ipucu { display: block; margin: 0; font-size: .75rem; }
}
@media (pointer: fine) and (max-width: 860px) { .sohbet-akis > .sohbet-enter-ipucu { padding: 0 10px 6px; } }

@media (max-width: 860px) {
  /* Telefon: liste YA DA oda (WhatsApp gibi). Oda seçiliyse oda, değilse liste; odadan "geri" ile listeye. */
  .sohbet { grid-template-columns: minmax(0, 1fr); min-height: 0; }
  /* s53 (Cooper 10-08 saha): yükseklik alt menünün ÖLÇÜLEN üst kenarından (uygulama.js "SOHBET YÜKSEKLİĞİ").
     Ana ekrandan açılan uygulamada 100dvh görünür alanla uyuşmuyordu, yazma çubuğu menünün altında kalıyordu.
     İlk iki kural yalnız betik çalışmazsa yedek. dvh satırı @supports içinde: env() içeren değer ayrıştırmada geçerli
     sayılır, dvh tanımayan tarayıcıda ancak hesapta düşer (yükseklik sınırsız kalıyordu, vh yedeği hiç devreye girmiyordu). */
  body:has(.sohbet) .ana { height: calc(100vh - 64px - env(safe-area-inset-bottom, 0px)); }
  @supports (height: 100dvh) {
    body:has(.sohbet) .ana { height: calc(100dvh - 64px - env(safe-area-inset-bottom, 0px)); }
  }
  html[style*="--alt-sekme-ust"] body:has(.sohbet) .ana { height: var(--alt-sekme-ust); }
  /* Klavye açıkken (dokunmatik, yazma alanı odakta) alt menü ve bildirim şeridi yer kaplamasın. */
  body.sohbet-yaziyor .alt-sekme, body.sohbet-yaziyor [data-push-serit] { display: none; }
  /* s62b: klavye açıkken oda sütunu görünür alana sabit (uygulama.js "SOHBET YÜKSEKLİĞİ" — --klavye-ust/--klavye-yuk). */
  body.sohbet-klavye .sohbet.oda-secili .sohbet-akis { position: fixed; left: 0; right: 0; top: var(--klavye-ust, 0px);
    height: var(--klavye-yuk, 100%); z-index: 60; }
  /* Kaynak deseni (MURPH M-16586: ios-chat, rider-comms PR 179, Apple forum 800125): sütun görünür alana hizalı iken belge
     kaydırması kilitli; alt güvenli alan uygulanmaz (klavye ev göstergesini örter, yükseklik zaten visualViewport). */
  body.sohbet-klavye { overflow: hidden; overscroll-behavior: none; }
  /* Oda açıkken telefon bildirimi şeridi gösterilmez (liste ve diğer sayfalarda çıkar): iPhone'da "Ana Ekrana Ekle"
     yönergesi 217px tutuyor, 320px ekranda büyük yazıyla yazma çubuğunu menünün altına itiyordu (ölçüldü). */
  body:has(.sohbet.oda-secili) [data-push-serit] { display: none; }
  body:has(.sohbet) { padding-bottom: 0; }                 /* alt sekme payını .ana yüksekliği zaten bırakıyor */
  body:has(.sohbet) .uygulama { min-height: 0; }
  body:has(.sohbet) .govde { padding-bottom: var(--a2); }
  .sl-filtre { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin: 0 -14px; padding: 0 14px; }
  .sl-filtre > * { flex: 0 0 auto; }
  .sohbet .sohbet-akis { display: none; }
  .sohbet.oda-secili .sohbet-liste { display: none; }
  .sohbet.oda-secili .sohbet-akis { display: flex; }
  .sohbet-geri { display: inline-grid; }
  .sohbet-ust { padding: 8px 12px; gap: 10px; }
  .sohbet-iletiler { padding: 12px; }
  .si-blok { max-width: 86%; }
  .sohbet-yaz { padding: 8px 10px; gap: 8px; }
  .sl-filtre button, .sl-filtre a { min-height: 40px; }
}
/* s71 (Zehra Hanım P1, iPad YATAY, MURPH M-16964/M-16968): klavye kipi (uygulama.js "SOHBET YÜKSEKLİĞİ") her genişlikte
   devreye giriyordu (dokunmatik + yazma alanı odakta) ama sütunu görünür alana sabitleyen kural yalnız ≤860 px'teydi.
   iPad yatayda (1180/1366 px, iki bölmeli düzen) sınıf ekleniyor, sütun sabitlenmiyor, betik iOS'un yazma alanını göstermek
   için yaptığı kaydırmayı scrollTo(0,0) ile geri alıyordu ⇒ yazma çubuğu ve iletiler klavyenin altında kalıyordu.
   Geniş dokunmatik ekranda da klavye açıkken oda sütunu görünür alanı kaplar (liste klavye kapanınca geri gelir). */
@media (min-width: 861px) {
  body.sohbet-klavye .sohbet .sohbet-akis { position: fixed; left: 0; right: 0; top: var(--klavye-ust, 0px);
    height: var(--klavye-yuk, 100%); z-index: 60; }
  body.sohbet-klavye { overflow: hidden; overscroll-behavior: none; }
}

/* yardımcı: ortalanmış hücre (yetki özeti vb.) */
.orta { text-align: center; }
.tablo th.orta, .tablo td.orta { text-align: center; }   /* .tablo th sola hizası .orta’yı eziyordu */
.yetki-ozet td, .yetki-ozet th { white-space: nowrap; }

/* ===== SOHBET ⑤b — mesaj menüsü, tepki, yanıt, filigran ===== */
.sohbet-govde-sar { position: relative; flex: 1; display: flex; min-height: 0;
  overflow: hidden; }   /* s55 (M-16274): sıkışınca iletiler kutusunun dolgusu taşıp yazma alanının ÜSTÜNE biniyordu (z-index 1) */
.sohbet-govde-sar .sohbet-iletiler { flex: 1; width: 100%; position: relative; z-index: 1; }
/* Filigran kaldırıldı (Cooper 10-06). Kopya/kaydet/ekran bildirimleri sürer. */
.si-satir { position: relative; }
.si-balon { position: relative; padding-right: 1.9rem; }   /* ⋮ düğmesine yer: metni örtmesin */
/* ⋮ düğmesi kompakt 22px: padding-right 1.7rem'lik şerit yetsin, kısa mesajda gönderen adına BİNMESİN.
   Genel düğme kuralının (stil.css "dugmeler") istisna listesinde — önceden o kurala giriyor,
   44px + inline-flex alıp bu ayarları eziyordu (eski "UA boyutu" yorumu yanlış teşhisti). */
.si-menu-ac { position: absolute; top: 2px; right: 2px;
  width: 22px; height: 22px; min-width: 0; padding: 0;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; background: transparent; color: inherit;
  opacity: .5; cursor: pointer; font-size: 1.1rem; line-height: 1; border-radius: 6px; z-index: 2; }
.si-balon:hover .si-menu-ac, .si-menu-ac:focus { opacity: 1; background: rgba(127,127,127,.18); }
/* D34: görünen düğme 22px kalır (gönderen adına binmesin) ama DOKUNMA alanı ~42px — görünmez katman. */
.si-menu-ac::after { content: ''; position: absolute; inset: -10px; }
/* Fareli ekranda katman yalnız sola/yukarı büyür: sağa/alta taşan katman balonun kaydırma genişliğini büyütüyordu (denetim: tasan-metin 32>22). */
@media (min-width: 861px) { .si-menu-ac::after { inset: -10px 0 0 -10px; } }
.si-satir.benim .si-menu-ac { color: var(--balon-ben-yazi); }
/* s76 #80/#82: dokunmatikte menünün TEK girişi ⋮ — daha belirgin ve dokunma alanı 44 px (22 + 2×11). Uzun basış metin seçimine kaldı. */
@media (pointer: coarse) { .si-menu-ac { opacity: .8; } }
@media (pointer: coarse) and (max-width: 860px) { .si-menu-ac::after { inset: -11px; } }
/* Geniş dokunmatik (iPad yatay): katman yine yalnız sola/yukarı büyür (yukarıdaki 861 px kuralının nedeni), 44 px = 22 + 22. */
@media (pointer: coarse) and (min-width: 861px) { .si-menu-ac::after { inset: -22px 0 0 -22px; } }
/* s76 #80: iletideki bağlantı — balonun yazı rengi (kendi/karşı balonda kontrast aynı) + alt çizgi; uzun adres balonu taşırmaz. */
.si-govde a.si-bag { color: inherit; text-decoration: underline; text-underline-offset: 2px; overflow-wrap: anywhere; word-break: break-word; }
/* Menünün kendisi seçilemez: iOS uzun basış seçimi menü yazısına düşmesin (Zehra Hanım #80 görseli: "Yanıtla" seçiliydi). */
.si-menu { -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }
/* Alıntı: Camgöbeği kenar, TEK satır + … (onaylı tasarım). */
.si-yanit { display: block; border-left: 3px solid var(--marka-cizgi); background: rgba(0, 175, 209, .12);
  border-radius: 6px; padding: 4px 8px; margin: 2px 0 4px; font-size: 13px; text-decoration: none; color: inherit; max-width: 100%; }
.si-yanit-kim { display: block; font-weight: 700; font-size: 12px; }
.si-yanit-govde { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 320px; }
.si-iletildi { display: block; font-size: .7rem; font-style: italic; opacity: .7; }
/* s52 İŞ12b: Genel akışında başka odanın iletisi — kaynak oda rozeti (tıklayınca o odada o iletiye gider). */
/* Balon dikey flex: rozet balon genişliğine uzamasın, içeriği kadar kalsın. */
.si-kaynak { display: inline-block; align-self: flex-start; max-width: 100%; margin: 0 0 3px; padding: 1px 8px; border-radius: 999px;
  background: var(--vurgu-hafif); color: var(--vurgu-yazi); font-size: 12px; font-weight: 600; line-height: 1.5;
  text-decoration: none; overflow-wrap: anywhere; }
.si-kaynak:hover { text-decoration: underline; }
.si-satir.benim .si-kaynak { background: rgba(255,255,255,.18); color: inherit; }
.si-silindi { font-style: italic; opacity: .7; }
/* s54 (M-16206) AKIŞ KARTI — MURPH'ün kanal akışı: KİM (Turuncu ailesi) → KİME (Camgöbeği ailesi) oda rozetleri, gövde düz,
   M-n küçük soluk. Rozet yazıları zeminleri üstünde ≥4.5 (ölçüldü, teslim notu). */
.si-akis-bas { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin: 1px 0 3px; }
.si-oda { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 12px; font-weight: 700; line-height: 1.5;
  letter-spacing: .02em; overflow-wrap: anywhere; }
.si-oda-kim { background: var(--aksiyon-zemin); color: var(--aksiyon); }
.si-oda-kime { background: var(--kime-zemin); color: var(--vurgu-yazi); }
.si-ok { font-size: 12px; color: var(--yazi-soluk); }
.si-akis-m { font-size: 11px; color: var(--yazi-soluk); font-variant-numeric: tabular-nums; }
.si-satir.benim .si-oda { background: rgba(255,255,255,.18); color: inherit; }
.si-satir.benim .si-ok, .si-satir.benim .si-akis-m { color: var(--balon-ben-yazi); }
/* s54 (M-16206) ETİKET GÖRÜNÜMÜ — çözülmüş @etiket mavi rozet (ad soyad); etiketlenenin ekranında balon Gül/Turuncu kenarlı. */
.si-etiket { display: inline; padding: 0 5px; border-radius: 6px; background: var(--etiket-zemin); color: var(--etiket-yazi);
  font-weight: 600; box-decoration-break: clone; -webkit-box-decoration-break: clone; }
.si-satir.benim .si-etiket { background: rgba(255,255,255,.2); color: inherit; }
.si-satir.beni-andi .si-balon { border-color: var(--balon-ad); box-shadow: inset 4px 0 0 var(--balon-ad), var(--golge); padding-left: 14px; }
/* T#30: silinen mesajın aslı — yalnız yöneticide, kesik çerçeveli soluk kutu. */
.si-sil-asil { display: block; border: 1px dashed currentColor; border-radius: 6px; padding: .2rem .45rem;
  font-size: .82rem; opacity: .8; white-space: pre-wrap; word-break: break-word; }
.si-sil-asil a { color: inherit; }
.si-satir.vurgulu .si-balon { outline: 2px solid var(--vurgu); outline-offset: 2px; }   /* "Mesaja git" hedefi */
.sohbet-eski { align-self: center; margin-bottom: .3rem; }
.sohbet-arsiv-not { padding: .6rem .9rem; border-top: 1px solid var(--cizgi); margin: 0; }
/* T#30: Yıldızlılar listesi */
.yildiz-kart { border: 1px solid var(--cizgi); border-radius: 10px; padding: .55rem .7rem; background: var(--kart);
  display: flex; flex-direction: column; gap: .3rem; }
.yildiz-ust { font-size: .82rem; display: flex; flex-wrap: wrap; gap: .3rem; align-items: baseline; }
.yildiz-govde { word-break: break-word; }   /* satır sonları nl2br ile; pre-wrap şablon boşluğunu girinti yapıyordu */
.yildiz-alt { display: flex; gap: .8rem; flex-wrap: wrap; align-items: center; }
/* Tepki hapı: balonun ALT kenarına binen küçük şerit (WhatsApp gibi). */
.si-tepkiler { display: inline-flex; flex-wrap: wrap; gap: 3px; margin-top: -9px; margin-left: 10px;
  position: relative; z-index: 2; max-width: 100%; }
.si-satir.benim .si-tepkiler { margin-left: 0; margin-right: 10px; }
.si-tepki { background: var(--kart); border: 1px solid var(--cizgi); border-radius: 999px;
  padding: 1px 7px; font-size: .76rem; line-height: 1.4; box-shadow: var(--golge); }
.sohbet-sabit-serit { display: block; background: var(--bekle-zemin); color: var(--bekle);
  padding: .4rem .7rem; border-bottom: 1px solid var(--cizgi); font-size: .82rem; text-decoration: none; position: sticky; top: 0; z-index: 3; }
.sohbet-yanit-onizleme { display: flex; align-items: center; gap: .5rem; padding: .4rem .9rem;
  background: var(--notr-zemin); border-top: 1px solid var(--cizgi); font-size: .85rem; }
.sohbet-yanit-onizleme [data-yanit-metin] { flex: 1; opacity: .8; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.si-menu { position: fixed; z-index: 60; background: var(--kart); border: 1px solid var(--cizgi);
  border-radius: 10px; box-shadow: var(--golge); min-width: 190px; padding: .25rem; display: flex; flex-direction: column; }
.si-menu[hidden], .si-ilet-kutu[hidden] { display: none; }
.si-menu > button { border: 0; background: transparent; color: var(--yazi); text-align: left;
  padding: .5rem .6rem; border-radius: 7px; cursor: pointer; font: inherit;
  display: flex; align-items: center; gap: .55rem; }
.si-menu > button svg { width: 17px; height: 17px; flex: 0 0 auto; }
.si-menu > button:hover { background: var(--notr-zemin); }
.si-menu > button.tehlike { color: var(--tehlike); }
.si-menu > button.tehlike svg { stroke: var(--tehlike); }
.si-menu-tepki { display: flex; gap: 2px; justify-content: space-between; padding: .2rem .2rem .35rem; border-bottom: 1px solid var(--cizgi); margin-bottom: .2rem; }
.si-menu-tepki button { font-size: 1.15rem; padding: .25rem; flex: 1; text-align: center; }
.si-ilet-kutu { position: fixed; z-index: 61; left: 50%; top: 50%; transform: translate(-50%,-50%);
  background: var(--kart); border: 1px solid var(--cizgi); border-radius: 12px; box-shadow: var(--golge);
  padding: 1rem; min-width: 260px; max-width: 90vw; max-height: 80vh; overflow: auto; }
.si-ilet-bas { font-weight: 700; margin-bottom: .6rem; }
.si-ilet-kutu form { display: flex; flex-direction: column; gap: .3rem; }

/* ===== SOHBET EK-2 — avatar, oda yönetimi, profil foto ===== */
/* AVATAR KURALI (Cooper 10-07): her zaman TAM YUVARLAK — asla oval/uzamış (aspect-ratio + overflow). */
.si-avatar { width: 24px; height: 24px; border-radius: 50%; aspect-ratio: 1; overflow: hidden; object-fit: cover; flex: 0 0 auto; display: inline-flex;
  align-items: center; justify-content: center; font-size: .72rem; font-weight: 700; color: #fff; vertical-align: middle; }
.si-avatar.oda { width: 34px; height: 34px; font-size: .95rem; }
.si-avatar.buyuk { width: 72px; height: 72px; font-size: 1.8rem; }
.sohbet-ust-bas { display: flex; align-items: center; gap: 10px; min-width: 0; }
.sohbet-ust-bas strong { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sohbet-ust-bas > div { min-width: 0; }
.sohbet-ust-bas small { color: var(--yazi-soluk); display: block; font-size: 12.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.profil-foto-satir { display: flex; align-items: center; gap: .8rem; margin-bottom: .6rem; }
/* s66 E3: personel kartı fotoğraf seçicisi düğme görünümünde ≥40 px (önceden 67×19 düz yazı). Blok + satır yüksekliği —
   flex değil (metin tek parça kalsın, s63 dersi). Yalnız bu kullanım; sohbetteki .sohbet-ek'ler aynen. */
.profil-foto-satir .sohbet-ek { display: inline-block; min-height: 40px; line-height: 38px; padding: 0 .9rem; border: 1px solid var(--cerceve);
  border-radius: var(--yuvarlak); background: var(--kart); font-size: .9rem; white-space: nowrap; }

/* ===== SOHBET EK-2 iade — oda ayarları paneli (başlık altı tam genişlik) + arşiv ===== */
/* s55 (Cooper 10-08 canlı ekran, MURPH M-16274): oda sütunu ekran yüksekliğine kilitli (s53 SOHBET YÜKSEKLİĞİ) ve taşanı
   gizliyor — uzun üye listesinde alttaki üyeler ve "Üyeleri kaydet" kesiliyor, kaydırılamıyordu. Panel sütunda kalan
   yüksekliği alır ve KENDİ İÇİNDE kayar (liste tek parça kalır; s52 İŞ5a-2 "listenin ayrı iç kaydırması yok" kararı aynen). */
.sohbet-oda-ayar { padding: .7rem .9rem; border-bottom: 1px solid var(--cizgi); background: var(--notr-zemin);
  flex: 0 1 auto; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.sohbet-oda-ayar[hidden] { display: none; }
.oda-ayar-form { display: flex; flex-direction: column; gap: .5rem; }
.oda-ayar-form label { display: flex; flex-direction: column; gap: .2rem; font-size: .85rem; }
.oda-ayar-form .sohbet-ek { flex-direction: row; align-items: center; cursor: pointer; }
.oda-ayar-tehlike { margin-top: .7rem; padding-top: .7rem; border-top: 1px dashed var(--cizgi);
  display: flex; flex-direction: column; gap: .5rem; }
.oda-sil summary.tehlike-yazi { color: var(--tehlike); cursor: pointer; list-style: none; }
.oda-sil form { display: flex; flex-direction: column; gap: .4rem; margin-top: .4rem; }
/* Yalnız geri dönüşsüz "Yedekle ve kalıcı sil" onayı dolgulu kırmızı; panelin diğer tehlike
   düğmeleri tasarımdaki gibi çerçeveli kalır (önceden bu kural globaldi — S10 gözden geçirme). */
.oda-sil .dugme.tehlike { background: var(--kotu-dolgu); color: #fff; border-color: var(--kotu-dolgu); }
.sohbet-arsiv .arsiv-satir { display: flex; align-items: center; justify-content: space-between; gap: .5rem; padding: .3rem 0; font-size: .85rem; }

/* ===== ⑦b RESMİ LOGO ===== */
.giris-logo { height: 54px; width: auto; max-width: 100%; display: block; }
.giris-marka { justify-content: center; margin-bottom: 1.1rem; }
.yazdir-logo { margin: 0 0 .6rem; }
.yazdir-logo img { height: 38px; width: auto; }
/* D50: sayfa baskısındaki logo — ekranda gizli (yalnız @media print gösterir). */
.baski-baslik img { height: 34px; width: auto; }
@media screen { .baski-baslik { display: none; } }

/* ===== SOHBET ⑤b Seç (çoklu) ===== */
.sohbet-secim-cubuk { display: flex; align-items: center; gap: .6rem; padding: .5rem .9rem;
  background: var(--vurgu); color: var(--vurgu-ustu); }
.sohbet-secim-cubuk[hidden] { display: none; }
.sohbet-secim-cubuk .mini-bag { color: var(--vurgu-ustu); border-color: currentColor; }
.secim-modu .si-satir { cursor: pointer; }
.secim-modu .si-menu-ac { display: none; }   /* seçim modunda ⋮ gizli */
.si-satir.secili .si-balon { outline: 2px solid var(--vurgu); outline-offset: 1px; }

/* ===== GRUP 2 — BUGÜN (onaylı tasarım: saat sıralı iş listesi + ekip + huni) =====
   Esin: Linear "My issues" (satır = saat · başlık+alt · durum cipi), Todoist "Today" (geciken üstte). */
.bugun-izgara { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 18px; align-items: start; margin-bottom: 18px; }
.bugun-sol, .bugun-sag { display: grid; gap: 18px; min-width: 0; }
.bolum { background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk); box-shadow: var(--golge); overflow: hidden; }
.bolum > h2 { font-size: 15px; margin: 0; padding: 14px 18px; border-bottom: 1px solid var(--cizgi);
  display: flex; align-items: center; gap: 10px; }
.bolum > h2 .say { color: var(--yazi-soluk); font-weight: 500; font-size: 13.5px; }
.bolum-bag { margin: -8px 0 -8px auto; font-size: 13px; font-weight: 600; color: var(--vurgu-yazi);
  display: inline-flex; align-items: center; justify-content: flex-end; min-height: 40px; min-width: 40px; }   /* dokunma ≥40, başlık yüksekliği aynı */
.bolum > .bos-satir, .bolum > .ipucu, .bolum-dip { padding-left: 18px; padding-right: 18px; }
.bolum-dip { margin: 0; padding-top: 10px; padding-bottom: 12px; font-size: 13px; color: var(--yazi-soluk); }
.bolum > .cubuk-satir { margin: 0; padding: 6px 18px; }
.bolum > .cubuk-satir:first-of-type { padding-top: 16px; }
.bolum > .ipucu { margin: 6px 0 16px; }
.is-satir, .ekip-satir { display: grid; grid-template-columns: 54px minmax(0, 1fr) auto; gap: 12px; align-items: center;
  padding: 11px 18px; border-bottom: 1px solid var(--cizgi); color: var(--yazi); min-height: 56px; }
.bolum > .is-satir:last-of-type, .bolum > .ekip-satir:last-of-type { border-bottom: 0; }
/* s58 B4: Bugün satırı + satır içi işlemler (✓ Tamamla · Ertele). Çizgi sarmalayıcıda; bağlantı ve düğmeler yan yana. */
.is-satir-sar { display: flex; align-items: center; border-bottom: 1px solid var(--cizgi); position: relative; }
.bolum > .is-satir-sar:last-of-type { border-bottom: 0; }
.is-satir-sar > .is-satir { flex: 1 1 auto; min-width: 0; border-bottom: 0; }
.is-hizli { display: flex; align-items: center; gap: 2px; padding-right: 10px; flex: 0 0 auto; }
.is-hizli form { margin: 0; }
.is-hizli-dugme { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: 10px;
  border: 1px solid var(--cizgi); background: var(--kart); color: var(--yazi-soluk); cursor: pointer; padding: 0; list-style: none; }
.is-hizli-dugme::-webkit-details-marker { display: none; }
.is-hizli-dugme:hover { color: var(--vurgu-yazi); border-color: var(--vurgu-yazi); text-decoration: none; }
.is-hizli-dugme .ikon { width: 18px; height: 18px; }
.is-ertele { position: relative; }
.is-ertele[open] > .is-hizli-dugme { color: var(--vurgu-yazi); border-color: var(--vurgu-yazi); }
.is-ertele-kutu { position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; width: 240px; display: grid; gap: 8px; padding: 10px;
  background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk); box-shadow: 0 12px 28px rgba(0, 0, 0, .18); }
.is-ertele-kutu .dugme { width: 100%; min-height: 40px; }
.is-ertele-kutu { scroll-margin-top: calc(84px + env(safe-area-inset-top, 0px)); scroll-margin-bottom: calc(80px + env(safe-area-inset-bottom, 0px)); }
/* s76 #85 (Zehra Hanım iPhone, MURPH M-17324): grup kartı (.bolum overflow:hidden — köşe yuvarlaklığı için) açık erteleme
   kutusunu kesiyordu; kutu açıkken kart taşırır (Görevler grupları + Bugün). Ölçüm: s76-ertele.js. */
.bolum:has(.is-ertele[open]) { overflow: visible; }
.is-ertele-tarih { display: grid; gap: 6px; }
.is-ertele-tarih label { display: grid; gap: 4px; font-size: .8rem; color: var(--yazi-soluk); }
a.is-satir:hover { background: var(--notr-zemin); text-decoration: none; }
.is-saat { font-variant-numeric: tabular-nums; color: var(--yazi-soluk); font-size: 13px; font-weight: 600; }
.is-ic { min-width: 0; }
.is-ic b { display: block; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.is-ic small { display: block; color: var(--yazi-soluk); font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ekip-satir { grid-template-columns: 34px minmax(0, 1fr) auto; }
.ekip-satir .si-avatar { width: 34px; height: 34px; font-size: 13px; }
/* Durum cipleri (tasarım): görev · ziyaret · hatırlatma · gecikme */
.rozet.gorev   { background: var(--vurgu-hafif);  color: var(--vurgu-yazi); }
.rozet.ziyaret { background: var(--iyi-zemin);    color: var(--iyi); }
.rozet.hatir   { background: var(--bekle-zemin);  color: var(--bekle); }
.rozet.gecik   { background: var(--kotu-zemin);   color: var(--kotu); }
.bos-durum-kucuk { padding: 22px 18px; text-align: center; color: var(--yazi-soluk); }
.bos-durum-kucuk p { margin: 0 0 12px; }
.bos-durum-kucuk .dugme { margin: 0 4px; }
details.dagilim { margin-top: 0; }
@media (max-width: 900px) {
  .bugun-izgara { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  .is-satir, .ekip-satir { padding: 10px 14px; gap: 10px; grid-template-columns: 46px minmax(0, 1fr) auto; }
  /* s58 B4: satır içi düğmeler varken rozet başlığın ALTINA iner — başlık 76 px'e sıkışıyordu (390'da ölçüldü). */
  .is-satir-sar > .is-satir { grid-template-columns: 46px minmax(0, 1fr); row-gap: 4px; padding-right: 6px; }
  .is-satir-sar > .is-satir > .rozet { grid-column: 2; justify-self: start; }
  .is-hizli { padding-right: 8px; }
  .ekip-ozet { padding: 8px 14px; }
  .ekip-satir { grid-template-columns: 34px minmax(0, 1fr) auto; }
  .bolum > h2 { padding: 12px 14px; }
}

/* ===== hidden ÖZNİTELİĞİ — DOSYANIN EN SONUNDA KALMALI (D21, 10-07) =====
   Tarayıcının [hidden]{display:none} kuralı yazar kurallarına yenilir: display veren her sınıf
   (.sohbet-yanit-onizleme, label vb.) gizli öğeyi GÖSTERİYORDU (boş "↩ ×" yanıt şeridi, TL'de
   "Kur" alanı). Özgüllük (0,1,0) + en sonda olduğu için tek-sınıflı ve etiket kurallarını yener.
   Daha özgül (ör. ".x .y") display kuralı olan öğeye kendi [hidden] kuralı yazılır (.si-menu[hidden] gibi). */
/* ==========================================================================
   GRUP 3 — Görevler + Müşteriler (esinlenme: HubSpot / Pipedrive mobil).
   Liste üstü: arama + "Süz" düğmesi; süzgeçler telefonda açılır panelde, geniş ekranda satırda.
   Seçili süzgeçler çip (tek dokunuşla kaldırılır). Kart: renkli etiket yalnız durum + tek uyarı.
   ========================================================================== */
.suz { margin-bottom: var(--a3); }
.suz-ust { display: flex; gap: var(--a2); align-items: center; min-width: 0; }
.suz-ara { flex: 1 1 auto; display: flex; align-items: center; gap: 8px; margin: 0; min-width: 0;
  background: var(--kart); border: 1px solid var(--cerceve); border-radius: var(--yuvarlak); padding: 0 12px; color: var(--yazi-soluk); }
.suz-ara:focus-within { outline: 2px solid var(--vurgu-yazi); outline-offset: -1px; }
.suz-ara .ikon { width: 16px; height: 16px; flex: none; }
.suz-ara input { border: 0; background: none; margin: 0; padding: 0; min-height: 42px; outline: none; flex: 1; min-width: 0; font-size: 16px; }
.suz-ac { display: inline-flex; align-items: center; gap: 6px; flex: none; }
.suz-ac .ikon { width: 18px; height: 18px; }
.suz-say { min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; background: var(--vurgu); color: var(--vurgu-ustu);
  font-size: 12px; font-weight: 700; display: inline-flex; align-items: center; justify-content: center; font-variant-numeric: tabular-nums; }
.suz-panel { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px 14px; align-items: end; margin-top: var(--a2);
  padding: 14px 16px; background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk); box-shadow: var(--golge); }
.suz[data-js]:not([data-acik]) .suz-panel { display: none; }
/* Türkçe dosya seçme kutusu (uygulama.js): gerçek <input type=file> erişilebilir ama görünmez. */
.dosya-sec { position: relative; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; min-width: 0; }
.dosya-sec .dosya-gizli { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; pointer-events: none; margin: 0; padding: 0; min-height: 0; }
.dosya-ad { font-size: 13px; color: var(--yazi-soluk); min-width: 0; overflow-wrap: anywhere; }
.suz-baslik { grid-column: 1 / -1; margin: 0; font-size: 13px; font-weight: 700; color: var(--yazi); }
.suz-panel > label:not(.onay) { display: flex; flex-direction: column; gap: 4px; margin: 0; font-size: 12.5px; color: var(--yazi-soluk); }
.suz-panel select { width: 100%; min-width: 0; margin: 0; }
.suz-panel .onay { grid-column: span 2; }
.suz-alt { grid-column: -3 / -1; justify-content: flex-end; }
.suz-alt { display: flex; gap: var(--a2); }
.suz-cipler { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 0 0 var(--a3); }
.suz-cip { display: inline-flex; align-items: center; gap: 6px; min-height: 40px; padding: 0 10px 0 14px; border-radius: 999px;
  background: var(--vurgu-hafif); color: var(--vurgu-yazi); font-size: 13px; font-weight: 600; }
.suz-cip:hover { text-decoration: none; }
.suz-cip .ikon { width: 14px; height: 14px; }
.suz-temizle { display: inline-flex; align-items: center; min-height: 40px; padding: 0 6px; font-size: 13px; color: var(--yazi-soluk); text-decoration: underline; }

/* Kart bilgi satırı: renkli etiket yerine soluk tek satır; dikkat isteyen parça renkli YAZI. */
.kart-tel { display: none; }   /* s64 Mü7: yalnız telefonda (musteri-liste, @media 640) */
.kart-meta { margin: .15rem 0 .4rem; font-size: .8rem; color: var(--yazi-soluk); }
.kart-meta > span { white-space: nowrap; }   /* parça kendi içinde bölünmez ("Kalan 600,00 ₺") */
.kart-meta > .uyari-yazi { white-space: normal; }   /* uzun eksik alan listesi dar ekranda kırılabilir */
/* Tür (Görev / Hatırlatma / Ziyaret): renkli nokta + yazı — etiket kalabalığı yerine. Renkler Bugün'deki
   tür etiketleriyle AYNI (görev = vurgu, ziyaret = iyi, hatırlatma = bekle). */
.tur-nokta { display: inline-flex; align-items: center; gap: 5px; font-weight: 600; color: var(--yazi); }
.tur-nokta::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: var(--yazi-soluk); }
.tur-nokta.gorev::before { background: var(--vurgu-yazi); }
.tur-nokta.hatir::before { background: var(--bekle); }
.tur-nokta.ziyaret::before { background: var(--iyi); }
.uyari-yazi { color: var(--bekle); }
.kotu-yazi { color: var(--kotu); font-weight: 600; }

/* Eksik bilgi uyarısı TEK satır: ikon + tek metin parçası + bağlantı (önceden parçalar ayrı kırılıyordu). */
.eksik-uyari > span { flex: 1 1 auto; min-width: 0; }
.eksik-uyari > a { font-weight: 600; white-space: nowrap; display: inline-flex; align-items: center; min-height: 40px; }

@media (min-width: 901px) {
  /* MURPH (Grup 3 kabul): ikincil bilgi adın ALTINDA tek satır; orta sütunlar yalnız konum / yetkili. */
  .kart-ana:has(> .kart-meta) { display: grid; grid-template-columns: minmax(0, 340px) 170px 160px minmax(0, 1fr);
    grid-template-areas: "ad alt kisi rozet" "meta alt kisi rozet"; column-gap: 1.1rem; row-gap: 2px; align-items: center; }
  .kart-ana:has(> .kart-meta) > h3 { grid-area: ad; }
  .kart-ana:has(> .kart-meta) > .kart-alt { grid-area: alt; }
  .kart-ana:has(> .kart-meta) > .kart-kisi { grid-area: kisi; }
  /* Yetkili sütunu olmayan kartta (görevler) konum/kişi satırı iki sütunu birden kullanır — boş sütun kalmaz. */
  .kart-ana:has(> .kart-meta):not(:has(> .kart-kisi)) > .kart-alt { grid-area: auto; grid-column: 2 / span 2; grid-row: 1 / span 2; }
  .kart-ana:has(> .kart-meta) > .kart-meta { grid-area: meta; margin: 0; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .kart-ana:has(> .kart-meta) > .rozetler { grid-area: rozet; justify-content: flex-end; }
}
@media (max-width: 860px) {
  .suz-ac { min-height: 44px; }
  .suz-panel { grid-template-columns: 1fr 1fr; gap: 10px; padding: 12px; }
  .suz-panel .onay, .suz-alt { grid-column: 1 / -1; }
  .suz-alt .dugme { flex: 1 1 0; justify-content: center; }
  .eksik-uyari .soluk-ek { display: none; }
  /* Şerit süzgeç telefonda TEK satır, yatay kaydırılır (sohbet süzgeci gibi) — iki satıra kırılmaz. */
  .serit-suzgec { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin-left: calc(-1 * var(--a4)); margin-right: calc(-1 * var(--a4));
    padding: 0 var(--a4); }
  .serit-suzgec > a { flex: 0 0 auto; }
  /* Tablo karta döndüğünde hücredeki bağlantı (müşteri adı, "Düzenle", "Ekstre") parmakla basılır: ≥40 px. */
  .tablo td > a { display: inline-flex; align-items: center; min-height: 40px; }
}
/* Liste kartında "aç" yönlendirmesi: tekrar eden renkli etiket yerine sade bağlantı yazısı. */
.kart-git { display: inline-flex; align-items: center; gap: 4px; font-size: .82rem; font-weight: 600; color: var(--vurgu-yazi); }
.kart-git .ikon { width: 14px; height: 14px; transform: rotate(180deg); }
.ziyaret-kayit .kart-git { min-height: 40px; }
.suz-ozet { flex: 1 1 auto; display: inline-flex; align-items: center; gap: 8px; min-height: 44px; font-weight: 600; font-variant-numeric: tabular-nums; }
.suz-ozet .ikon { width: 16px; height: 16px; color: var(--yazi-soluk); }
.suz-panel input[type=date] { margin: 0; }
/* Hızlı ekleme kutusu (hatırlatma): '+' ikonu katlanır okun yerini alır, vurgu renginde. */
.hz-yeni > summary { display: flex; align-items: center; gap: 8px; color: var(--vurgu-yazi); }
.hz-yeni > summary::before { content: none; }
.hz-yeni > summary .ikon { width: 16px; height: 16px; }

/* --- Müşteri kartı (HubSpot kayıt düzeni) --- */
.mk-baslik { align-items: flex-start; }
.mk-kimlik { min-width: 0; flex: 1 1 auto; }
.mk-kimlik h1 { margin: 0; }
.mk-alt { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin: 6px 0 0; font-size: 13.5px; color: var(--yazi-soluk); }
.mk-atanan { display: inline-flex; align-items: center; gap: 4px; }
.mk-atanan .ikon { width: 14px; height: 14px; }
.mk-alt a { min-height: 40px; }   /* başlıktaki bağlantı (bağlı müşteri) parmakla basılır */
.ziyaret-ad a { display: inline-flex; align-items: center; min-height: 40px; }
.mk-baslik .baslik-aksiyon { align-items: center; }
.mk-baslik .baslik-aksiyon .dugme .ikon { width: 16px; height: 16px; }

/* ⋯ menüsü (genel): açılır kutu, bağlantı ve tek tehlikeli eylem. */
.daha-menu { position: relative; }
.daha-menu > summary { list-style: none; cursor: pointer; }
.daha-menu > summary::-webkit-details-marker { display: none; }
.daha-kutu { position: absolute; right: 0; top: calc(100% + 6px); z-index: 30; min-width: 230px; padding: 6px;
  display: flex; flex-direction: column; background: var(--kart); border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak-buyuk); box-shadow: 0 12px 32px rgba(0, 0, 0, .18); }
.daha-kutu a, .daha-tehlike { display: flex; align-items: center; min-height: 44px; padding: 0 12px; border-radius: 8px;
  color: var(--yazi); font: inherit; font-size: 14px; text-align: left; width: 100%; background: none; border: 0; cursor: pointer; }
.daha-kutu a:hover, .daha-tehlike:hover { background: var(--notr-zemin); text-decoration: none; }
.daha-kutu form { margin: 4px 0 0; padding-top: 4px; border-top: 1px solid var(--cizgi); }
.daha-tehlike { color: var(--tehlike); font-weight: 600; }

/* Kayıt gövdesi: solda zaman çizelgesi, sağda "Hakkında" + açık görevler + görseller. */
.mk-izgara { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 18px; align-items: start; }
.mk-yan { display: flex; flex-direction: column; gap: 18px; min-width: 0; }
.mk-yan .blok-katlanir { margin: 0; }
.mk-hakkinda { padding: 6px 18px 10px; }
.mk-hakkinda .oku-dg { white-space: pre-line; }   /* çok satırlı not satırlarını korur */
/* Hızlı eylemler her genişlikte YAN YANA (768'de .kart-hizli'nin dikey varsayılanına düşüp alt alta diziliyordu). */
.kart-hizli.oku-hizli { flex-direction: row; border-left: 0; }
.oku-hizli > a { flex: 1 1 0; min-height: 44px; }
/* s67 H1: hatırlatma kartı — görünür adlı iki eylem her genişlikte yan yana, ≥44 px (önceden yalnız simge; 768'de Düzenle 31 px). */
.kart-hizli.hz-eylem { flex-direction: row; }
/* Telefon ve tablette eylemler içeriğin ALTINDA (768'de yanda 205 px'lik sütun oluyor, başlık daralıyordu); masaüstünde sağda, s66 gibi. */
@media (max-width: 1023px) {
  .kart.hz-kart { flex-direction: column; }
  .kart-hizli.hz-eylem { border-left: 0; border-top: 1px solid var(--cizgi); }
}
.kart-listesi > .kart .kart-hizli.hz-eylem { width: auto; }
.hz-eylem > form + a { border-left: 1px solid var(--cizgi); }
.hz-eylem > form { flex: 1 1 0; display: flex; }
/* H2: başlık bağlantısının dokunma alanı ≥40 — dolgu + negatif kenar, satır düzeni değişmez. */
.hz-kaynak { display: inline-block; padding: .8rem 0; margin: -.8rem 0; }
.hz-eylem > form > button, .hz-eylem > a { flex: 1 1 0; min-height: 44px; gap: .35rem; font-size: .88rem; white-space: nowrap; }
.mk-gorusme { border-bottom: 1px solid var(--cizgi); }
.mk-gorusme > summary { display: flex; align-items: center; gap: 8px; min-height: 48px; padding: 0 18px; cursor: pointer;
  font-weight: 600; color: var(--vurgu-yazi); list-style: none; }
.mk-gorusme > summary::-webkit-details-marker { display: none; }
.mk-gorusme > summary .ikon { width: 16px; height: 16px; }
.mk-gorusme[open] > summary { border-bottom: 1px solid var(--cizgi); }
.mk-gorusme > form { padding: 14px 18px; margin: 0; }

/* Zaman çizelgesi: ikon sütunu + ince dikey çizgi; her kaydın tarihi sağda. */
.zc { list-style: none; margin: 0; padding: 8px 18px 14px; }
.zc-oge { position: relative; display: grid; grid-template-columns: 32px minmax(0, 1fr); gap: 12px; padding: 10px 0; }
.zc-oge:not(:last-child)::before { content: ""; position: absolute; left: 15px; top: 42px; bottom: -10px; width: 2px; background: var(--cizgi); }
.zc-ikon { width: 32px; height: 32px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
  background: var(--notr-zemin); color: var(--yazi-soluk); }
.zc-ikon .ikon { width: 16px; height: 16px; }
.zc-gorusme .zc-ikon { background: var(--vurgu-hafif); color: var(--vurgu-yazi); }
.zc-satis .zc-ikon, .zc-tahsilat .zc-ikon { background: var(--iyi-zemin); color: var(--iyi); }
.zc-gorev .zc-ikon { background: var(--mor-zemin); color: var(--mor); }
.zc-ic { min-width: 0; }
.zc-ust { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.zc-ust b { font-size: 14px; min-width: 0; overflow-wrap: anywhere; }
.zc-ust time { flex: none; font-size: 12.5px; color: var(--yazi-soluk); font-variant-numeric: tabular-nums; }
.zc-alt { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; margin-top: 4px; font-size: 13px; color: var(--yazi-soluk); }
.zc-not { margin: 6px 0 0; font-size: 13.5px; white-space: pre-line; overflow-wrap: anywhere; }
.zc-bag { margin: 4px 0 0; display: flex; gap: 14px; }
.zc-bag a { display: inline-flex; align-items: center; min-height: 40px; min-width: 40px; font-size: 13px; font-weight: 600; }
/* s52 İŞ5 (a): görev formunda seçili müşterinin tam adı kendi satırında (yanındaki ipucuyla aynı satıra akmasın). */
.ipucu[data-secili-musteri] { display: block; margin-top: 4px; overflow-wrap: anywhere; }
.ipucu[data-secili-musteri][hidden] { display: none; }
/* s52 İŞ4: yöneticide kayıt başına '⋯' menüsü (Düzenle / Sil) — tarihin yanında; 40px dokunma hedefi. */
.zc-ust { align-items: center; }
.zc-sag { display: inline-flex; align-items: center; gap: 6px; flex: none; }
.zc-menu .daha-kutu { min-width: 190px; }
.zc-menu > summary.ikon-d { width: 40px; height: 40px; border-color: transparent; background: transparent; }
.zc-menu > summary.ikon-d:hover, .zc-menu[open] > summary.ikon-d { background: var(--notr-zemin); }
/* Görüşme düzeltme formu (kart içinde) + "Sonraki randevu" kısayolu. */
.mk-gorusme-duzelt { padding: 14px 18px 0; }
.mk-gorusme-duzelt h3 { margin: 0 0 8px; font-size: 15px; }
.mk-gorusme-duzelt h3 small { color: var(--yazi-soluk); font-weight: 400; }
.mk-gorusme-duzelt > form { padding: 0 0 14px; margin: 0; }
.mk-randevu { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px; padding: .5rem 0; border-bottom: 1px solid var(--cizgi); }
.mk-randevu label { display: flex; flex-direction: column; gap: 4px; flex: 1 1 160px; min-width: 0; margin: 0; }
.mk-randevu .oku-et { flex: none; }

/* Görev kartı (Linear): solda yapılacaklar + geçmiş, sağda bilgiler formu (tek sütun). */
.gk-izgara { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); gap: 18px; align-items: start; }
.gk-izgara > .gk-yan { grid-column: 2; grid-row: 1; min-width: 0; }
.gk-izgara > .gk-ana { grid-column: 1; grid-row: 1; min-width: 0; }
.gk-ana > .blok:first-child { margin-top: 0; }
.gk-yan .grup { grid-template-columns: minmax(0, 1fr); }
@media (max-width: 900px) {
  .mk-izgara { grid-template-columns: minmax(0, 1fr); }
  .gk-izgara { grid-template-columns: minmax(0, 1fr); }
  .gk-izgara > .gk-yan, .gk-izgara > .gk-ana { grid-column: 1; grid-row: auto; }
  .mk-yan { order: -1; }   /* telefonda önce "Hakkında" (kim, nerede), sonra zaman çizelgesi */
}
@media (max-width: 860px) {
  .mk-baslik { flex-direction: row; flex-wrap: nowrap; }
  .mk-baslik .baslik-aksiyon { width: auto; flex: none; }
  .mk-baslik .baslik-aksiyon .dugme { flex: none; }
  .mk-hakkinda { padding: 4px 14px 8px; }
  .zc { padding: 6px 14px 12px; }
  .mk-gorusme > summary, .mk-gorusme > form { padding-left: 14px; padding-right: 14px; }
}

/* ==========================================================================
   GRUP 4 — Raporlar (esinlenme: Stripe Reports / Notion veritabanı listesi).
   Rapor dizini: arama + gruplu sade satırlar (ad, açıklama, soluk özellik, ok); masaüstünde iki sütun.
   ========================================================================== */
.rapor-izgara { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; align-items: start; }
.rapor-izgara > .bolum { margin: 0; }
/* Günlük rapor: personel seçimi uzun adı sığdırır (masaüstünde 126 px'te "Görsel Denetim Yönetici" kesiliyordu). */
.gun-sec select { min-width: 240px; }
/* Bugünkü görüşmeler: katlanır satırın özeti parmakla basılır (önce 22 px). */
details.temas-grup > summary { display: flex; align-items: center; gap: 8px; min-height: 44px; cursor: pointer; }
/* <details> içeriği tarayıcıda TEK iç kutuya sarılır; details'e verilen ızgara alanları dağıtmıyordu (hepsi 245 px'lik
   tek hücrede alt alta). Izgara içerik kutusuna verilir; desteklemeyen tarayıcıda alanlar tam genişlikte alt alta. */
details.grup.temas-grup { display: block; }
details.grup.temas-grup::details-content { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: .7rem; }
details.grup.temas-grup .genis { grid-column: 1 / -1; }
.rapor-satir { display: grid; grid-template-columns: minmax(0, 1fr) auto 16px; gap: 4px 12px; align-items: center;
  padding: 12px 18px; border-bottom: 1px solid var(--cizgi); color: var(--yazi); min-height: 56px; flex: 1 1 auto; min-width: 0; }
.rapor-satir:last-child { border-bottom: 0; }
.rapor-satir:hover { background: var(--notr-zemin); text-decoration: none; }
.rs-ic { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.rs-ic b { font-size: 14.5px; }
.rs-ic small { font-size: 13px; color: var(--yazi-soluk); line-height: 1.4; }
.rs-meta { font-size: 12px; color: var(--yazi-soluk); white-space: nowrap; }
.rs-ok { color: var(--yazi-soluk); display: inline-flex; }
.rs-ok .ikon { width: 16px; height: 16px; transform: rotate(180deg); }
.rapor-sablon { display: flex; align-items: center; border-bottom: 1px solid var(--cizgi); }
.rapor-sablon:last-child { border-bottom: 0; }
.rapor-sablon > .rapor-satir { border-bottom: 0; }
.rapor-sablon > form { padding-right: 12px; }
@media (max-width: 900px) {
  .rapor-izgara { grid-template-columns: minmax(0, 1fr); }
}
/* Günlük rapor: gün / personel seçici telefonda iki sütun + düğme (önce üç tam genişlik satırdı). */
@media (max-width: 860px) {
  /* Üst satır: Gün + Görüntüle; personel (uzun ad) alt satırda tam genişlik — seçili ad kesilmez. */
  .suzgec.gun-sec { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; padding: 0; align-items: end; }
  .suzgec.gun-sec > label { min-width: 0; }
  .suzgec.gun-sec > label:first-of-type { grid-column: 1; grid-row: 1; }
  .suzgec.gun-sec > .dugme { grid-column: 2; grid-row: 1; flex: none; }
  .suzgec.gun-sec > label:nth-of-type(2) { grid-column: 1 / -1; grid-row: 2; }
  /* Rapor kurucusu: 25 alanlık onay listesi telefonda iki sütun (önce tek sütun, ekranı uzatıyordu). */
  .grup .alan-izgara { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 8px; }
}
@media (max-width: 860px) {
  .rapor-satir { grid-template-columns: minmax(0, 1fr) 16px; padding: 12px 14px; }
  .rs-meta { grid-column: 1; grid-row: 2; white-space: normal; }
  .rs-ok { grid-column: 2; grid-row: 1 / span 2; }
}

/* ==========================================================================
   GRUP 5 — Ekip + Ayarlar.
   ========================================================================== */
.bolum-ipucu { margin: 0; padding: 8px 18px 14px; }
/* Yeni API anahtarı: tek dokunuşla tamamı seçilir, uzun dize satıra sığar (önce satır içi style idi). */
.anahtar-deger { user-select: all; word-break: break-all; }
/* Ekip listesi masaüstü: rol etiketi adın ALTINDA, ölçümler sağda; dar masaüstünde ölçümler alt satırda.
   (Önce tek esnek satırda 7×74px ölçüm + ad + rozet sığmıyor, son ölçüm sağdan kesiliyordu.) */
@media (min-width: 901px) {
  .kart-ana:has(> .olcum) { display: grid; grid-template-columns: minmax(0, 260px) minmax(0, 1fr) auto;
    grid-template-areas: "ad alt olcum" "rozet alt olcum"; column-gap: 1.1rem; row-gap: 4px; align-items: center; }
  .kart-ana:has(> .olcum) > h3 { grid-area: ad; }
  .kart-ana:has(> .olcum) > .kart-alt { grid-area: alt; }
  .kart-ana:has(> .olcum) > .rozetler { grid-area: rozet; justify-content: flex-start; }
  .kart-ana:has(> .olcum) > .olcum { grid-area: olcum; }
}
@media (min-width: 901px) and (max-width: 1260px) {
  .kart-ana:has(> .olcum) { grid-template-columns: minmax(0, 260px) minmax(0, 1fr);
    grid-template-areas: "ad alt" "rozet alt" "olcum olcum"; }
  .kart-ana:has(> .olcum) > .olcum { justify-content: flex-start; margin-top: 6px; }
}
.cevrimici-devam > summary { display: flex; align-items: center; min-height: 44px; padding: 0 18px; cursor: pointer;
  font-weight: 600; color: var(--vurgu-yazi); border-bottom: 1px solid var(--cizgi); }

/* s52 gözlem (MURPH): büyük tutarlı para kutularında simge alt satıra düşmesin — daha geniş kutu, tutar tek satır. */
.kutular.genis-deger { grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); }
.kutular.genis-deger .k-deger { white-space: nowrap; }

/* s52 İŞ 10: seçilemeyen satır soluk (temizlik önizlemesi) — hücrenin kendi rengini de soldurur. */
.tablo tr.soluk td, .tablo tr.soluk td .onay { color: var(--yazi-soluk); }

/* s52 İŞ 9: parola şartları — yazdıkça işaretlenir (uygulama.js); JS yoksa düz liste. */
.parola-sart { list-style: none; margin: .35rem 0 0; padding: 0; font-size: .82rem; color: var(--yazi-soluk); display: grid; gap: .15rem; }
.parola-sart li::before { content: "○ "; }
.parola-sart li[data-tamam] { color: var(--iyi); }
.parola-sart li[data-tamam]::before { content: "✓ "; }

[hidden] { display: none; }

/* İŞ 8 — benzer kayıt kutusu (elle kayıt + rapor onayı) ve rapor formundaki ad önerisi.
   Kutu genel .bildirim.bekle; burada yalnız satır düzeni. Tam genişlik formdaki hazır .genis ile. */
.benzer-kutu strong { display: block; }
.benzer-kutu > span { display: block; margin-top: .15rem; }
.benzer-kutu ul { list-style: none; margin: .6rem 0 0; padding: 0; display: grid; gap: .45rem; }
.benzer-kutu li { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .6rem; }
.benzer-kutu li > a:first-child, .benzer-kutu li > label { font-weight: 600; }
.benzer-kutu .benzer-tel { color: var(--yazi-soluk); font-variant-numeric: tabular-nums; white-space: nowrap; }
.benzer-kutu li > .dugme { margin-left: auto; }
.benzer-satir { margin-bottom: var(--a3); }
.benzer-oneri { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .5rem; margin-top: .35rem; font-size: .85rem; color: var(--yazi-soluk); }
.benzer-oneri:empty { display: none; }


/* ===== s59 MÜŞTERİ BİRLEŞTİR (sayfa/musteribirlestir.php · musteri.php bant + benzer kayıtlar) ===== */
/* .bolum'un kendi iç boşluğu yok (çocuklar tek tek alır, bkz. .bolum > .ipucu) — s59 öğeleri aynı 18px çizgiye oturur. */
.mb-b { margin-bottom: 16px; }
.mk-yan .mb-b { margin-bottom: 0; }
.mb-b > .mb-adaylar, .mb-b > .mb-secim, .mb-b > .mb-ekle, .mb-b > .satir-form, .mb-b > .bos-durum-kucuk,
.mb-b > .ozet-serit, .mb-b > p:not(.ipucu), .mb-b > .mb-liste, .mb-b > form { margin-left: 18px; margin-right: 18px; }
.mb-b > .mb-adaylar, .mb-b > .satir-form { margin-top: 4px; margin-bottom: 8px; }
.mb-b > .mb-secim:last-child, .mb-b > .mb-ekle:last-child, .mb-b > form:last-child { margin-bottom: 16px; }
.mb-b > p:not(.ipucu):first-child { margin-top: 16px; }
.mb-b > .ozet-serit { margin-bottom: 14px; }
.mb-onay { margin-top: 8px; }
.mb-adaylar { list-style: none; margin: 0; padding: 0; }
.mb-aday { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--cizgi); }
.mb-aday:last-child { border-bottom: 0; }
.mb-aday-ic { min-width: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.mb-aday-ic b { overflow-wrap: anywhere; }
.mb-aday-ic small:last-child { flex-basis: 100%; color: var(--yazi-soluk); }
.mb-aday .dugme.mini { flex: 0 0 auto; min-height: 40px; }
.mb-kartlar { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); gap: 12px; align-items: stretch; margin: 0 0 18px; }
.mb-kart { display: flex; flex-direction: column; gap: 4px; padding: 14px 16px; border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk); background: var(--kart); min-width: 0; }
.mb-kart b { font-size: 1.05rem; overflow-wrap: anywhere; }
.mb-kart small { color: var(--yazi-soluk); }
.mb-kart a { align-self: flex-start; display: inline-flex; align-items: center; min-height: 40px; }
.mb-kalan { border-color: var(--iyi); box-shadow: inset 4px 0 0 var(--iyi); }
.mb-giden { border-color: var(--cerceve); box-shadow: inset 4px 0 0 var(--cerceve); }
.mb-et { font-size: .78rem; font-weight: 600; letter-spacing: .02em; text-transform: uppercase; color: var(--yazi-soluk); }
.mb-takas { align-self: center; white-space: nowrap; }
.mb-secim { border: 1px solid var(--cizgi); border-radius: var(--yuvarlak); padding: 10px 14px; margin: 0 0 10px; display: flex; flex-direction: column; gap: 6px; }
.mb-secim legend { font-weight: 600; padding: 0 4px; }
.mb-secim label.onay { overflow-wrap: anywhere; min-height: 40px; display: flex; align-items: center; gap: 8px; }
.mb-ekle { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 6px 16px; margin: 0; }
.mb-ekle dt { color: var(--yazi-soluk); }
.mb-ekle dd { margin: 0; overflow-wrap: anywhere; }
.mb-onay { justify-content: flex-end; }
.mb-liste { margin: 8px 0 16px; padding-left: 1.2rem; display: grid; gap: 6px; }
.mb-bant { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 14px; }
.mb-bant-dugme { display: flex; flex-wrap: wrap; gap: 8px; }
.mb-bant-dugme .dugme.mini { min-height: 40px; }
@media (max-width: 640px) {
  .mb-b > .mb-adaylar, .mb-b > .mb-secim, .mb-b > .mb-ekle, .mb-b > .satir-form, .mb-b > .bos-durum-kucuk,
  .mb-b > .ozet-serit, .mb-b > p:not(.ipucu), .mb-b > .mb-liste, .mb-b > form { margin-left: 14px; margin-right: 14px; }
  .mb-kartlar { grid-template-columns: minmax(0, 1fr); }
  .mb-takas { justify-self: center; }
  .mb-ekle { grid-template-columns: minmax(0, 1fr); gap: 2px; }
  .mb-ekle dd { margin-bottom: 8px; }
}

/* s60 G10: boş durumdaki eylem bağlantısı (ör. "Yeni görev açın") — dokunma alanı en az 40px */
.bos-satir a { display: inline-flex; align-items: center; min-height: 40px; padding: 0 4px; }

/* s60 G8: görev listesi tarih grupları — Bugün listesinin satır bileşeni (.is-satir-sar) bölüm başına */
.gorev-grup { margin-bottom: 16px; }
.gorev-grup .is-ic small .tur-nokta { font-size: inherit; }

/* s60 G6: görev sayfası görüntüleme kipi — telefonda not ekleme (geçmiş) maddelerden önce; özet kutusu yan sütunda */
.gk-ozet { margin-bottom: 0; }
@media (max-width: 900px) {
  .gk-ana { display: flex; flex-direction: column; }
  .gk-ana > .gk-gecmis { order: -1; margin-top: 0; }
}

/* s60 G11: Görevler listesinde tek satır hızlı ekleme (başlık · kişi · tarih · Ekle · Ayrıntılı) */
.hizli-ekle { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 0 0 16px; padding: 10px 12px;
  background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk); }
.hizli-ekle label { margin: 0; }
.hizli-ekle-baslik { flex: 1 1 260px; min-width: 0; }
.hizli-ekle input, .hizli-ekle select, .hizli-ekle .dugme { min-height: 40px; }
.hizli-ekle-baslik input { width: 100%; }
.hizli-ekle-ayrinti { display: inline-flex; align-items: center; min-height: 40px; padding: 0 6px; font-size: 13.5px; }
.hizli-ekle-alan { display: inline-flex; align-items: center; gap: 6px; }
.hizli-ekle-et { font-size: 12.5px; color: var(--yazi-soluk); white-space: nowrap; }
@media (max-width: 640px) {
  .hizli-ekle-alan { flex: 1 1 40%; min-width: 0; }
  .hizli-ekle-alan select, .hizli-ekle-alan input { flex: 1 1 auto; min-width: 0; width: 100%; }
  .hizli-ekle .dugme { flex: 1 1 auto; }
}

/* s60 görsel denetim düzeltmeleri (t3: 4 genişlik × 2 tema) */
/* Görev sayfası telefonda: Tamamla + Düzenle + ⋯ başlığı 70-93px'e sıkıştırıyordu → düğmeler başlığın altında tam satır. */
@media (max-width: 640px) {
  .mk-baslik.gk-baslik { flex-wrap: wrap; }
  .mk-baslik.gk-baslik .mk-kimlik { flex: 1 1 100%; }
  .mk-baslik.gk-baslik .baslik-aksiyon { flex: 1 1 100%; width: 100%; justify-content: flex-start; }
  /* Görevler listesi telefonda: hızlı ekleme 'Yeni görev'in işini görür (Ayrıntılı bağlantısı içinde) — başlık düğmesi gizli;
     hızlı ekleme dokunulana kadar tek satır (başlık + Ekle), Kime / Hedef / Ayrıntılı odakta açılır. */
  .gorevler-yeni { display: none; }
  .hizli-ekle:not(:focus-within) .hizli-ekle-alan, .hizli-ekle:not(:focus-within) .hizli-ekle-ayrinti { display: none; }
  .hizli-ekle:not(:focus-within) .hizli-ekle-baslik { flex: 1 1 0; }
  .hizli-ekle:not(:focus-within) .dugme { flex: none; }
}
/* Dokunma alanı ≥40px: özet içi bağlantı (müşteri), selam satırı bağlantıları (Günü kapat, Ekipte N geciken). */
.gk-ozet .oku-dg a, .selam-ek a { display: inline-flex; align-items: center; min-height: 40px; }
/* s58 B6 tablet: müşteri dağılımı çubuk bağlantısı dokunmatik tablette de 40px (masaüstü fare: aynen). */
@media (max-width: 1024px) { a.cubuk-satir { min-height: 40px; } }
/* s60 G5: görev başlığındaki Tamamla formu — .satir-ici düğmesi ikon kalıbına (stil.css:752) düşmesin, .dugme görünür */
.gk-tamamla { display: inline-flex; margin: 0; }
/* s71 belge eki (sohbet balonu): kart balonun yazı rengini alır (kendi balonunda beyaz, karşıdakinde koyu); 44px dokunma. */
.si-belge { display: flex; align-items: center; gap: 10px; max-width: 280px; min-height: 44px; margin: 2px 0 4px; padding: 8px 10px;
            border-radius: 10px; background: rgba(127, 127, 127, .14); color: inherit; text-decoration: none; }
.si-belge:hover { text-decoration: none; background: rgba(127, 127, 127, .22); }
.si-belge-tur { flex: none; display: inline-flex; align-items: center; justify-content: center; width: 42px; height: 42px; border-radius: 8px;
                border: 1.5px solid currentColor; font-size: 11px; font-weight: 700; letter-spacing: .02em; }
.si-belge-bilgi { display: flex; flex-direction: column; min-width: 0; }
.si-belge-bilgi b { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.si-belge-bilgi small { opacity: .8; }
.si-dosya-yok { display: block; margin: 2px 0 4px; font-style: italic; opacity: .8; }
/* s71 Dosyalar sayfası */
.dosya-gosterge .dosya-gosterge-ust { display: flex; flex-wrap: wrap; align-items: baseline; gap: .6rem; margin-bottom: .5rem; font-size: 1.05rem; }
.dosya-gosterge .cubuk { display: block; height: 10px; margin-bottom: 1rem; }
.dosya-gosterge .ozet-serit small { display: block; }
.dosya-arac { position: sticky; top: 0; z-index: 2; display: flex; flex-wrap: wrap; align-items: center; gap: .6rem 1rem; padding: .6rem 0;
              background: var(--zemin, var(--kart)); border-bottom: 1px solid var(--cizgi); }
.dosya-arac .dugme { margin-left: auto; }
.dosya-liste { list-style: none; margin: 0; padding: 0; }
.dosya-satir { display: grid; grid-template-columns: 44px 64px minmax(0, 1fr); align-items: center; gap: .8rem; padding: .6rem 0; border-bottom: 1px solid var(--cizgi); }
/* s75: yalnız Dosyalar satırı. Önce genel `.dosya-sec` idi ve dosya seçici sarmalayıcısının (uygulama.js, 2359. satırdaki kural)
   adıyla çakışıp İçe aktar / Hesabım / müşteri / ziyaret dosya seçicilerini 44 px kutuya sıkıştırıyordu (denetle.sh 'ortulu'). */
.dosya-satir .dosya-sec { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; cursor: pointer; }
.dosya-satir .dosya-sec input { width: 20px; height: 20px; margin: 0; }
.dosya-onizleme { display: flex; align-items: center; justify-content: center; width: 64px; height: 64px; border-radius: 8px; overflow: hidden;
                  background: var(--notr-zemin); color: var(--yazi); text-decoration: none; }
.dosya-onizleme img { width: 100%; height: 100%; object-fit: cover; }
.dosya-bilgi { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dosya-bilgi .dosya-ad { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dosya-bilgi small { color: var(--yazi-soluk); overflow-wrap: anywhere; }
.sayfalama { display: flex; align-items: center; justify-content: center; gap: 1rem; margin: 1rem 0; }
/* s72 #1 aylık hedef ilerlemesi (Bugün): kişinin kendi satırı selamın altında; yönetici bölümünde kişi başına satır (≥44px dokunma). */
.hedef-satir { margin-top: .4rem; max-width: 520px; }
.hedef-satir .cubuk { display: block; height: 8px; margin-top: .35rem; }
.hedef-kisi { display: flex; flex-direction: column; gap: .35rem; min-height: 44px; padding: .45rem .3rem; margin: 0 -.3rem; border-radius: 8px;
              color: var(--yazi); text-decoration: none; }
/* s76: kart içinde (.bolum) satır kenar boşluğu kartın başlığıyla aynı 18 px — adlar kart kenarına yapışıyordu (s72'den beri; s76 (5) ile tablo yöneticilere de açıldı). */
.bolum > .hedef-kisi { margin: 0; padding: .45rem 18px; border-radius: 0; }
a.hedef-kisi:hover { background: var(--notr-zemin); text-decoration: none; }
.hedef-kisi-ust { display: flex; flex-wrap: wrap; justify-content: space-between; gap: .2rem .6rem; }
.hedef-kisi-ust small { color: var(--yazi-soluk); font-variant-numeric: tabular-nums; }
.hedef-kisi .cubuk { display: block; height: 8px; }
/* s72 #3 rota bağlantısı (Bugün + Ziyaret planı) */
.rota-satir { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .7rem; margin: 0 0 .6rem; }
.rota-satir .dugme { display: inline-flex; align-items: center; gap: .35rem; min-height: 40px; }
.rota-tek { display: inline-flex; align-items: center; gap: .25rem; min-height: 40px; margin-left: .3rem; }
/* s72 #5 R6/E5 (Cooper 10-10 'devam go'): tablette ve iPad yatayda (641–1199 px) kutusuna SIĞMAYAN etiketli tablo kart satırına
   döner (telefon kuralıyla aynı görünüm). Sığmayı uygulama.js ölçer ve .tablo-kart verir — sığan tablo aynen tablo kalır. */
@media (min-width: 641px) and (max-width: 1199px) {
  .tablo-sarmal:has(.tablo-kart) { overflow-x: visible; }
  .tablo.tablo-kart, .tablo.tablo-kart tbody, .tablo.tablo-kart tfoot, .tablo.tablo-kart tr, .tablo.tablo-kart td, .tablo.tablo-kart tfoot th { display: block; width: auto; }
  .tablo.tablo-kart thead { display: none; }
  .tablo.tablo-kart tr { border: 1px solid var(--cizgi); border-radius: var(--yuvarlak); margin-bottom: .5rem; padding: .25rem .6rem; }
  .tablo.tablo-kart tfoot tr { background: var(--notr-zemin); font-weight: 600; }
  .tablo.tablo-kart td, .tablo.tablo-kart tfoot th { border: 0; padding: .35rem 0; display: flex; justify-content: space-between; gap: 1rem; align-items: baseline; text-align: right; }
  .tablo.tablo-kart td::before, .tablo.tablo-kart tfoot th::before { content: attr(data-label); color: var(--yazi-soluk); font-size: .8rem; font-weight: 400; text-align: left; white-space: nowrap; }
  .tablo.tablo-kart td[data-label=""]:empty, .tablo.tablo-kart td.bos-hucre { display: none; }
  .tablo.tablo-kart td[data-label=""] { justify-content: flex-end; }
  .rapor-tablo.tablo-kart tbody td:first-child { justify-content: flex-start; text-align: left; font-weight: 700; font-size: .95rem; }
  .rapor-tablo.tablo-kart tbody td:first-child::before { content: none; }
}
/* s73 Ayarlar → Bildirim saatleri: Hatırlatma günleri kutusuyla aynı çerçeve (.izin-kutusu); her saat başlık + girdi + son gönderim, aralı. */
.bildirim-saatleri { gap: .9rem 1.2rem; }
.bildirim-saatleri label { display: grid; gap: .3rem; align-content: start; }
.bildirim-saatleri label .ipucu { margin: 0; }
/* s75 yeni müşteri zorunlu alan yıldızı */
.zorunlu { color: var(--kotu); margin-left: .15rem; }
.wa-ayni { align-self: end; }
/* s76 toplu atama (müşteri listesi): çubuk, kart başı seçim kutusu (≥44 px dokunma), önizleme listesi. */
.toplu-cubuk { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem 1rem; margin: 0 0 .7rem; padding: .6rem .8rem;
               background: var(--kart); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-buyuk); }
.toplu-cubuk .toplu-hedef { display: flex; align-items: center; gap: .5rem; font-size: .88rem; }
.toplu-cubuk .toplu-hedef { white-space: nowrap; max-width: 100%; }   /* "Atanacak kişi" iki satıra kırılmasın; seçici daralır */
.toplu-cubuk .toplu-hedef select { min-width: 0; width: 180px; flex: 1 1 auto; }
.toplu-sec { display: flex; align-items: center; justify-content: center; flex: 0 0 44px; min-height: 44px; cursor: pointer;
             border-right: 1px solid var(--cizgi); }
.toplu-sec input { width: 18px; height: 18px; margin: 0; }
/* Katlanır kap (details.gelismis.toplu-ac): kapalıyken kart kutuları gizli; açıkken çubuk çerçevesiz (kap çerçeveli). */
details.toplu-ac { margin: 0 0 .7rem; }
details.toplu-ac .toplu-cubuk { margin: 0; padding: 0; border: 0; background: none; }
main:has(details.toplu-ac:not([open])) .toplu-sec { display: none; }
.toplu-liste { margin: .4rem 0 .8rem; padding-left: 1.2rem; }
.toplu-liste li { margin: .15rem 0; }

/* s77 ÖDEME PLANI (maket kuralları, NOTLAR/S77-ALACAK-PLAN/TASARIM.md §9): (1) fieldset ve tablo kabı küçülebilsin — yoksa tablo telefonda
   formu 721 px'e genişletiyordu · (2) çek/senet alanları etiketli 2×2 ızgara · (3) vade hatırlatması ⋯ dokunma hedefi 44 px. */
.plan-grup, .plan-grup > .tablo-sarmal { min-width: 0; }
.plan-belge { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 6px; min-width: 0; }
.plan-belge label { display: flex; flex-direction: column; gap: 2px; }
.plan-uretec { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: .75rem; align-items: end; }
.plan-denetim:empty { display: none; }
.vade-menu > summary { min-width: 44px; min-height: 44px; display: inline-flex; align-items: center; justify-content: center; }
.is-satir-sar > .vade-menu { flex: 0 0 auto; padding-right: 6px; }
.bolum:has(.vade-menu[open]) { overflow: visible; }
.vade-menu .daha-kutu { scroll-margin-top: calc(84px + env(safe-area-inset-top, 0px)); scroll-margin-bottom: calc(80px + env(safe-area-inset-bottom, 0px)); }   /* açılınca görünür alana (alt menü payı, .is-ertele-kutu ile aynı) */   /* menü kartın kenarında kesilmesin (s76 #85 dersi, .is-ertele ile aynı) */
.vade-islem { margin-bottom: 1rem; }
.vade-islem h2 { font-size: 1rem; margin: 0 0 .4rem; overflow-wrap: anywhere; }
.vade-islem form + form { margin-top: .6rem; padding-top: .6rem; border-top: 1px solid var(--cizgi); }
.plan-baslik { display: flex; flex-wrap: wrap; align-items: baseline; gap: .35rem .6rem; margin: .9rem 0 .4rem; font-size: 1rem; }
.plan-baslik small { color: var(--yazi-soluk); font-weight: 400; }
.plan-baslik .mini-bag { margin-left: auto; }
