/* =====================================================================
   EKsistem Konsol — paylaşılan premium tasarım sistemi (dual-tema).
   Çekirdek: public/_tokens.css (marka vurgusu + anlam renkleri + tipografi
   + radius) — HTML'de _app.css'ten ÖNCE yüklenir. Bekçi: verify_design_tokens.
   Bu dosya YALNIZ sahne token'larını tutar (zemin/yüzey/çizgi/sidebar/gölge).
   Platform / Bayi / Distribütör panelleri + Reception ekranı bunu paylaşır.
   ===================================================================== */
:root{
  --ground:#FBFBFD; --surface:#FFFFFF; --surface-2:#F1F3F7; --surface-3:#E9ECF2;
  --ink:#14181F; --ink-soft:#3A424E; --muted:#5A6472; --line:#E2E6EC; --line-2:#D3D9E2;
  --shadow:0 22px 60px -32px rgba(15,23,45,.35); --shadow-sm:0 4px 14px -6px rgba(15,23,45,.18);
  --sidebar:#0C0F16; --sidebar-ink:#F3F5FA; --sidebar-muted:rgba(233,238,247,.60);
  --sidebar-line:rgba(255,255,255,.10); --sidebar-active:rgba(125,151,255,.16);
  /* --- Tipografi Tek Kaynak (EK-1) --- */
  /* K277 İş 2 (Emir · 11 Ağu "yazılar her yerde çok küçük"): EK-1 ölçeği BİR KADEME büyüdü.
     K273'ün "font SABİT kalır" maddesi YALNIZ bu noktada geçersiz — canvas/buton yüksekliği/sidebar/topbar
     maddeleri AYNEN geçerli. tx-h1 (24) DEĞİŞMEDİ; bigNum 22 / stateNum 18 / .stat .v 30 de (K274'te ayarlandı). */
  --tx-h1: 24px; --tx-h2: 16px; --tx-body: 14.5px; --tx-sec: 13.5px; --tx-micro: 12px;
}
@media (prefers-color-scheme: dark){:root{
  --ground:#0A0C11; --surface:#111520; --surface-2:#161B27; --surface-3:#1D2330;
  --ink:#EEF1F7; --ink-soft:#C4CBD8; --muted:#96A0B2; --line:rgba(255,255,255,.09); --line-2:rgba(255,255,255,.15);
  --shadow:0 22px 60px -30px rgba(0,0,0,.7); --shadow-sm:0 6px 18px -8px rgba(0,0,0,.6);
  --sidebar:#080A0F; --sidebar-line:rgba(255,255,255,.08); --sidebar-active:rgba(125,151,255,.2);
}}
:root[data-theme="light"]{
  --ground:#FBFBFD; --surface:#FFFFFF; --surface-2:#F1F3F7; --surface-3:#E9ECF2;
  --ink:#14181F; --ink-soft:#3A424E; --muted:#5A6472; --line:#E2E6EC; --line-2:#D3D9E2;
  --shadow:0 22px 60px -32px rgba(15,23,45,.35); --shadow-sm:0 4px 14px -6px rgba(15,23,45,.18);
  --sidebar:#0C0F16; --sidebar-line:rgba(255,255,255,.10);
}
:root[data-theme="dark"]{
  --ground:#0A0C11; --surface:#111520; --surface-2:#161B27; --surface-3:#1D2330;
  --ink:#EEF1F7; --ink-soft:#C4CBD8; --muted:#96A0B2; --line:rgba(255,255,255,.09); --line-2:rgba(255,255,255,.15);
  --shadow:0 22px 60px -30px rgba(0,0,0,.7); --shadow-sm:0 6px 18px -8px rgba(0,0,0,.6);
  --sidebar:#080A0F; --sidebar-line:rgba(255,255,255,.08);
}
*{box-sizing:border-box;margin:0;padding:0}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
/* PWA standalone GÜVENLİ ALAN (iOS notch/durum çubuğu/ana-ekran çubuğu): viewport-fit=cover içerik kenarlara taşar →
   üst bar durum çubuğunun ALTINDA kalmalı (yoksa ☰ menü butonu saatin altında, tıklanamaz → sidebar açılmaz). Tarayıcıda 0. */
:root{--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px);--safe-left:env(safe-area-inset-left,0px);--safe-right:env(safe-area-inset-right,0px)}
body{font-family:var(--sans);background:var(--ground);color:var(--ink);line-height:1.55;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  transition:background .3s ease,color .3s ease}
a{color:inherit;text-decoration:none}
h1,h2,h3{letter-spacing:-.02em;font-weight:700;line-height:1.12}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
/* --- TİPOGRAFİ TEK KAYNAK (EK-1) --- */
.tx-h1{font-size:24px;font-weight:700;letter-spacing:-0.02em}
.tx-h2{font-size:16px;font-weight:600}
.tx-body{font-size:14.5px}
.tx-sec{font-size:13.5px}
.tx-micro{font-size:12px;letter-spacing:0.02em}
.tx-mono{font-family:var(--mono);font-size:13px;letter-spacing:1px}
.eyebrow{font-family:var(--mono);font-size:12px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted)}
.hidden{display:none!important}
.muted{color:var(--muted)}

/* ---------- Butonlar ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;font-family:var(--sans);
  font-size:14.5px;font-weight:600;padding:9px 17px;border-radius:9px;border:1px solid transparent;
  cursor:pointer;transition:.15s ease;white-space:nowrap;color:var(--ink);background:var(--surface-2)}
.btn:hover{background:var(--surface-3)}
.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}
.btn-primary:hover{background:var(--accent-strong);transform:translateY(-1px)}
.btn-ghost{background:transparent;border-color:var(--line-2)}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent-ink);background:transparent}
.btn-danger{background:transparent;color:var(--warn);border-color:var(--warn)}
.btn-danger:hover{background:var(--warn-soft)}
.btn-sm{padding:5.5px 12px;font-size:14.5px;border-radius:8px}
.btn-xs{padding:4px 10px;font-size:12px;border-radius:7px;font-weight:600}
.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}
.btn-block{width:100%}

/* ---------- Formlar ---------- */
label{display:block;font-size:12px;color:var(--muted);margin:0 0 5px;font-weight:500}
/* FAZ 2 doktrini — form yüzeyleri sistem yazıtipine DÜŞMEZ. ⚠ Çıplak <button> (.btn sınıfı OLMAYAN: ikon
   düğmeleri · segment · sekme · sohbet launcher…) tarayıcı varsayılanını (Arial) kullanıyordu — gerçek
   tarayıcıda ölçülerek bulundu. Yalnız AİLE verilir (boyut/padding/genişlik dokunulmaz → düzen aynı kalır). */
button,option{font-family:var(--sans)}
input,select,textarea{width:100%;padding:10px 12px;border:1px solid var(--line-2);border-radius:9px;
  font-size:14.5px;background:var(--surface);color:var(--ink);font-family:var(--sans);transition:.15s}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
input[type=checkbox]{width:auto}
input:disabled,select:disabled,textarea:disabled{background:var(--surface-2);color:var(--muted);cursor:not-allowed;opacity:.85}
.field{margin-bottom:13px}
.grid{display:grid;gap:13px}
.grid-2{grid-template-columns:1fr 1fr}
.grid-3{grid-template-columns:repeat(3,1fr)}
/* Ekspertiz v2 katalog kademeli seçimi: dört kutu. Esnek kolonun TABANI yazılır — minmax(0,1fr)
   olmadan uzun donanım adı kolonu taşırır (K359 düzen maddesi). */
.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}
/* ---- EKSPERTİZ v2 · dosya paneli EYLEM ŞERİDİ ------------------------------------------------
   K359: dokunma hedefi ≥44×44. Uygulamanın genel `.btn-sm` yüksekliği 375px'te ÖLÇÜLDÜ: 29px —
   masaüstünde sorun değil ama bu şerit MOBİLDE kullanılır (spec §7: "okuma + kısa yazım ÇALIŞIR").
   ⚠ Global `.btn-sm` YÜKSELTİLMEDİ bilinçli olarak: tüm ekranları etkileyen görsel bir değişiklik
   Emir onayı ister ve bu işin kapsamı dışındadır (genel bulgu HATALAR.md'ye yazıldı). Burada YALNIZ
   bu şerit dar ekranda dokunulabilir yapılır. */
.ek-akis{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
@media(max-width:640px){.ek-akis .btn{min-height:44px;padding-top:8px;padding-bottom:8px}}

@media(max-width:640px){.grid-2,.grid-3{grid-template-columns:1fr}.grid-4{grid-template-columns:1fr 1fr}}

/* ---------- Kart ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:22px;margin-bottom:18px;box-shadow:var(--shadow-sm)}
.card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px;flex-wrap:wrap}  /* KÖK (Emir F/T ?debugfit: sw 451 = +88px "Sırala:" seçici): sarmazsa dar ekranda başlık+kontrol tek satıra sıkışıp seçici kutusundan taşıyordu → SAR (kontrol 2. satıra iner, sığar). Maskeleme değil, GERÇEKTEN sığdır. */
.card-h h2{font-size:16px;font-weight:600}
.card-h .sub{font-size:13.5px;color:var(--muted);margin-top:2px}
.section-title{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);margin:0 0 12px}
.card-sec{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  color:var(--muted);margin:16px 0 12px;padding-top:14px;border-top:1px solid var(--line)}

/* ---------- KPI istatistik kutuları ---------- */
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px;margin-bottom:20px}
.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;
  box-shadow:var(--shadow-sm)}
.stat .k{font-size:12px;color:var(--muted);font-weight:500;display:flex;align-items:center;gap:6px}
.stat .v{font-size:30px;font-weight:700;letter-spacing:-.02em;margin-top:6px;font-variant-numeric:tabular-nums}
.stat .v small{font-size:16px;font-weight:600;color:var(--muted)}
.stat .foot{font-size:12px;color:var(--muted);margin-top:4px}
.stat.accent{background:linear-gradient(155deg,var(--accent-soft),transparent)}

/* ---------- Tablo ---------- */
.tbl{width:100%;border-collapse:collapse}
.tbl th{text-align:left;padding:9px 12px;font-size:12px;font-weight:600;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line)}
.tbl td{padding:11px 12px;border-bottom:1px solid var(--line);font-size:14.5px;vertical-align:middle}
.tbl tr:last-child td{border-bottom:0}
.tbl tbody tr{transition:background .12s}
.tbl tbody tr:nth-child(even){background:color-mix(in srgb,var(--surface-2) 50%,transparent)}
.tbl tbody tr:hover{background:var(--surface-2)}
/* SAYI kolonu: ORTALANMIŞ + tabular (eşit genişlik). TEK kural — hücre hücre hizalama yazma. */
.tbl .num{text-align:center;font-variant-numeric:tabular-nums}
.tbl-wrap{overflow-x:auto}

/* ---------- Chip / rozet ---------- */
.chip{display:inline-flex;align-items:center;gap:5px;background:var(--surface-3);border-radius:20px;
  padding:3px 11px;font-size:12px;color:var(--ink-soft);font-weight:500;white-space:nowrap}
.chip.dot::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.chip-ok{background:rgba(30,158,99,.12);color:var(--ok)}
.chip-trial{background:var(--amber-soft);color:var(--amber)}
.chip-warn{background:var(--warn-soft);color:var(--warn)}
.chip-accent{background:var(--accent-soft);color:var(--accent-ink)}
.chip-mut{background:var(--surface-3);color:var(--muted)}

/* ---------- Konsol kabuğu: üst bar + açılır/kapanır kenar çubuğu ---------- */
.shell{display:flex;flex-direction:column;min-height:100vh}
/* Taklit (impersonation) şeridi — superadmin firma gözünden bakarken */
.imp-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--amber);color:#fff;
  padding:8px 18px;font-size:13px;font-weight:600}
.imp-bar b{font-weight:700}
.imp-bar .btn{margin-left:auto;background:rgba(255,255,255,.2);color:#fff;border-color:transparent}
.imp-bar .btn:hover{background:rgba(255,255,255,.32)}

/* Üst bar — kimlik, tema ve çıkış burada (her zaman görünür, okunur zemin) */
.topbar{position:sticky;top:0;z-index:50;display:flex;align-items:center;gap:14px;
  height:calc(60px + var(--safe-top));padding:var(--safe-top) calc(18px + var(--safe-right)) 0 calc(18px + var(--safe-left));
  background:var(--surface);border-bottom:1px solid var(--line);box-shadow:var(--shadow-sm)}
.topbar .tb-ek{opacity:.8;padding-right:12px;border-right:1px solid var(--line);flex:none}
.topbar .tb-ek:hover{opacity:1}
.topbar .tb-brand{display:flex;align-items:center;gap:11px;min-width:0}
.topbar .tb-brand .mark{width:30px;height:30px;border-radius:8px;background:var(--accent);display:grid;
  place-items:center;color:#fff;font-weight:700;font-size:16px;font-family:var(--mono);flex:none}
.topbar .tb-titles{min-width:0;line-height:1.2}
.topbar .tb-titles b{display:block;font-size:16px;font-weight:600;letter-spacing:-.02em;color:var(--ink);
  white-space:nowrap;text-overflow:ellipsis;overflow:hidden;max-width:38vw}
.topbar .tb-slogan{display:block;font-size:12px;font-weight:400;color:var(--muted);white-space:nowrap;
  text-overflow:ellipsis;overflow:hidden;max-width:38vw}
.topbar .role{font-size:12px;font-weight:600;color:var(--muted);font-family:var(--mono);letter-spacing:.1em;
  text-transform:uppercase;padding:4px 11px;background:var(--surface-2);border-radius:20px;white-space:nowrap;
  max-width:26vw;overflow:hidden;text-overflow:ellipsis;margin-right:6px}
.brand-logo{display:inline-flex;align-items:center;flex:none}
.brand-logo svg{display:block}
.topbar .tb-right{margin-left:auto;display:flex;align-items:center;gap:12px}
.topbar .tb-clock{font-size:13.5px;font-weight:400;color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
@media(max-width:860px){.topbar .tb-clock{display:none}}
.topbar .who{text-align:right;line-height:1.25;max-width:200px;overflow:hidden}
.topbar .who b{display:block;font-size:14.5px;font-weight:600;color:var(--ink);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}
/* Ad-altı span'ı — AVATAR baş-harf span'ı (.avtr) HARİÇ. ⚠ Eski `.who span` avatar span'ını da vuruyordu → display:block
   flex merkezlemeyi EZİYOR → "EK/ZY" daire içinde yukarı kayık. `:not(.avtr)` avatar'ı NEREDE olursa olsun DIŞLAR
   (doğrudan çocuk = TAKLİT/impersonation dalı · buton içi = normal dal) → baş harf HER İKİ dalda da flex ile TAM ortalı.
   (Not: `> span` yetmedi — taklitte avatar doğrudan çocuk olduğu için tekrar bozuluyordu — Emir yakaladı.) */
.topbar .who span:not(.avtr){font-size:12px;font-weight:400;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block}
/* K278 §5: topbar aksiyonları (Şifre/Çıkış) T4 13.5/600 — global .btn (14.5) topbar'da KÜÇÜLTÜLÜR.
   ⚠ K273 BUTON YÜKSEKLİĞİ KİLİDİ: punto 14.5→13.5 düşünce yükseklik 31→30px OLDU (ÖLÇÜLDÜ, varsayılmadı) →
   padding 9→9.5px ile telafi edildi, yükseklik 31'e geri döndü. "Punto düşerse yükseklik değişmez" YANLIŞTI. */
.topbar .btn{font-size:13.5px;font-weight:600}
.topbar .btn:not(.btn-sm){padding-top:9.5px;padding-bottom:9.5px}
.topbar .btn.btn-sm{padding-top:6px;padding-bottom:6px}   /* btn-sm tabanı 5.5 — telafi ONA göre (tek longhand İKİSİNİ de ezip +8px şişirmişti · ölçüldü) */
.sb-toggle{background:transparent;border:1px solid var(--line-2);border-radius:8px;width:38px;height:38px;
  display:grid;place-items:center;cursor:pointer;color:var(--ink-soft);font-size:16px;transition:.15s;flex:none}
.sb-toggle:hover{border-color:var(--accent);color:var(--accent-ink)}

.body{display:flex;flex:1;min-height:0;position:relative}
.side{width:230px;flex:none;background:var(--sidebar);color:var(--sidebar-ink);display:flex;flex-direction:column;
  padding:18px 14px;position:sticky;top:var(--topbar-h,60px);height:calc(100vh - var(--topbar-h,60px));height:calc(100dvh - var(--topbar-h,60px));overflow-y:auto;
  transition:width .2s ease,padding .2s ease}
.shell.nav-hidden .side{width:0;padding-left:0;padding-right:0;overflow:hidden}
.nav-item{display:flex;align-items:center;gap:11px;padding:10px 12px;border-radius:9px;
  /* K277-b (Emir · 11 Ağu): sidebar punto K273'ten AYRI — K273'ün koruduğu şey sidebar GENİŞLİĞİYDİ
     (.side 230px), punto DEĞİL; genişlik DEĞİŞMEDİ (bekçi ölçer).
     K278 §6/§23: sidebar 14px ana ölçeğin BİLİNÇLİ İSTİSNASIDIR (14.5 gövde kademesi DEĞİL) — nav 14/500,
     aktif 14/600, grup başlığı 12/600. Bu tartışma burada yeniden AÇILMAZ (Emir). */
  /* K303 (ÖLÇÜLDÜ · 12 Ağu): "Özel Koşullu Otomobiller" 230px'lik sidebar'da 213px yer istiyor, 202px var —
     11px KISA. Genişlik (K273) ve punto (K278 §6/§23) KİLİTLİ, etiket de Emir'in verdiği ad → tek dürüst
     çıkış SARMA: metin KIRPILMAZ, ikinci satıra iner (sığan tüm etiketler tek satırda KALIR, görünüm değişmez).
     ⛔ Etiketi kısaltmak (metin kaybı) ya da bekçiyi gevşetmek DEĞİL. */
  color:var(--sidebar-muted);font-size:14px;font-weight:500;cursor:pointer;transition:.14s;margin-bottom:3px;
  white-space:normal;line-height:1.35}
.nav-item:hover{background:rgba(255,255,255,.05);color:var(--sidebar-ink)}
.nav-item.on{background:var(--sidebar-active);color:#fff;font-weight:600}
.nav-item .ic{width:18px;height:18px;flex:none;opacity:.85}
.side .spacer{flex:1}
.side .ver{margin-top:12px;padding-top:12px;border-top:1px solid var(--sidebar-line);
  font-size:12px;color:var(--sidebar-muted);line-height:1.7;white-space:nowrap}
.side .ver .k{color:var(--sidebar-muted);opacity:.75}
.side .ver .mono{color:var(--sidebar-ink);font-family:var(--mono)}
.backdrop{display:none}
/* min-width:0 kritik: .main bir flex çocuğu; varsayılan min-width:auto ile en geniş
   sarılamayan içeriğe (geniş tablo) göre şişer ve yatay taşma yaratır. 0 → viewport'ta kalır,
   içteki .tbl-wrap kendi içinde kayar. */
/* margin-inline:auto → geniş (2K) ekranda içerik ortalanır; sağda kocaman ölü
   alan kalmaz. Sidebar gizliyken de tam ekranda ortalı durur. */
.main{padding:26px var(--app-content-gutter);max-width:var(--app-content-max);width:100%;min-width:0;margin-inline:auto}
.page-h{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:22px;flex-wrap:wrap}
.page-h h1{font-size:24px;font-weight:700}
.page-h p{color:var(--muted);font-size:14.5px;margin-top:3px}
.topbar-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:flex-end}
/* Toolbar dikey ayraç (Şube ▾ | aksiyonlar) — sarınca gizlenmez ama nötr durur. */
.tb-sep{width:1px;align-self:center;height:22px;background:var(--line-2);flex:none}

@media(max-width:860px){
  /* iOS/WebKit YATAY TAŞMA KÖKÜ (Emir ?debugfit ölçümü · 28 Tem — tek taşan: aside.side + nav, hero DEĞİL): mobilde KAPALI kenar
     çubuğu (drawer) position:fixed + translateX(-100%) ile ekran-dışı SOLDA durur (x∈[-236,0]). iOS Safari bu ekran-dışı
     fixed/transform kutusunu belge scrollWidth'ine KATAR (Chromium KIRPAR → Chromium'da görünmezdi, iOS-only taşma buydu).
     KÖK ÇÖZÜM: kapalı drawer'ı `display:none` yap → iOS DAHİL hiçbir tarayıcıda scroll bölgesine katkı VERMEZ. Kök overflow-x:hidden
     KULLANMADIK bilerek — o gerçek içerik taşmasını da MASKELER (hero fazla genişse kırpardı, F/T yük-testi kör kalırdı); tek
     suçlu drawer, onu kaldır. Mobilde transform geçişi zaten YOK (base transition transform içermez) → animasyon kaybı YOK. */
  /* C2 grup 3 (15 Ağu · Emir ONAYLI · BUG FIX) — `calc(60px + var(--safe-top))` SABİTİ KALKTI. B3'te
     ÖLÇÜLDÜ: topbar 1280'de 78px, 768/414'te 120px, 375'te 153px (flex-wrap). Sabit, mobilde 93px'e
     kadar EKSİK kalıyordu → çekmece ve karartma topbar'ın ALTINA giriyordu. Artık sidebar · backdrop ·
     sohbet sheet'i AYNI geometri kaynağını (`--topbar-h`) okur — ⛔ ikinci hesap/paralel değişken YOK.
     ⚠ `--safe-top` ayrıca eklenmez: ölçülen yükseklik onu ZATEN içerir (topbar'ın kendi padding'i). */
  .side{position:fixed;left:0;top:var(--topbar-h,60px);height:calc(100vh - var(--topbar-h,60px));height:calc(100dvh - var(--topbar-h,60px));z-index:60;width:236px;
    padding-bottom:calc(18px + var(--safe-bottom));box-shadow:var(--shadow);transform:translateX(0)}
  .shell.nav-hidden .side{display:none}
  .shell:not(.nav-hidden) .backdrop{display:block;position:fixed;inset:var(--topbar-h,60px) 0 0 0;background:rgba(0,0,0,.4);z-index:55}
  .topbar .who span:not(.avtr){display:none}   /* dar ekranda ad-altı gizlenir; avatar baş-harf span'ı (.avtr · taklitte doğrudan çocuk) DOKUNULMAZ → daire kaybolmaz */
  /* Emir: avatar mobilde de GÖRÜNSÜN. tb-right taşarsa (dar telefon · margin-left:auto) sol öğeler (zil+avatar)
     ekran dışına itilirdi → SARMALA: öğeler taşmadan alt satıra iner, avatar HER ZAMAN ekran içinde kalır. */
  .topbar .tb-right{flex-wrap:wrap;justify-content:flex-end;row-gap:8px}
  .main{padding:20px 16px}
}

/* ---------- Bildirim paneli (mobilde ekrana sığar) ---------- */
.notif-dd{position:absolute;right:0;top:44px;width:320px;max-height:400px;overflow:auto;
  background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);z-index:100}
@media(max-width:640px){
  .notif-dd{position:fixed;top:64px;right:8px;left:8px;width:auto;max-height:calc(100vh - 84px);max-height:calc(100dvh - 84px)}
}
/* A2 (13 Ağu · Emir) — MOBİLDE "KAPATMA" YOKTU: panel ekranın ~%90'ını kaplıyor, başlıktaki tek kontrol
   `Tercihler`di → "kapatmak" isteyen kullanıcı KALICI BİLDİRİM AYARINA çıkıyordu (geçici niyet → kalıcı ayar).
   Kapatma yolları çoğaldı (× · karartma · Esc · zil · geri tuşu) ve hepsi TEK fonksiyondan geçer. */
.notif-x{width:44px;height:44px;min-width:44px;display:flex;align-items:center;justify-content:center;
  border:0;background:transparent;color:var(--muted);font-size:22px;line-height:1;cursor:pointer;border-radius:8px;padding:0}
.notif-x:hover{background:var(--hover,rgba(0,0,0,.05));color:var(--ink)}
.notif-x:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.notif-allread{border:0;background:transparent;color:var(--accent);font-size:12px;font-weight:600;cursor:pointer;padding:6px 8px;border-radius:8px}
.notif-allread:hover{background:var(--accent-soft)}
/* Zaman ayracı — mevcut bölüm etiketi biçimi (küçük · harf aralıklı · muted). BOŞ GRUP BASILMAZ. */
.notif-grp{padding:8px 12px 4px;font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);background:var(--surface-2,transparent)}
/* FAZ 2 — OKUNDU AYRIMI (şemada `read` ZATEN VAR · migration yok): okunmamış → nokta + koyu/kalın başlık.
   Okunmuş → nokta YOK (yeri KORUNUR, hizalama bozulmaz), başlık nötr ağırlıkta ve muted.
   ⛔ Okunmuş satır SİLİNMEZ/GİZLENMEZ — geçmiş erişilebilir kalır. */
.notif-row{display:flex;gap:8px;align-items:flex-start;padding:10px 12px;border-bottom:1px solid var(--line);cursor:pointer}
.notif-row:hover{background:var(--hover,rgba(0,0,0,.03))}
.notif-dot{flex:0 0 auto;width:7px;height:7px;border-radius:50%;background:var(--accent);margin-top:6px}
.notif-row.is-read .notif-dot{background:transparent}
.notif-t{font-size:13px;font-weight:600;color:var(--ink)}
.notif-row.is-read .notif-t{font-weight:400;color:var(--muted)}
.notif-s{font-size:11.5px;color:var(--muted)}
/* K476: altlık STICKY BOTTOM — başlığın (`baslik` position:sticky;top:0) simetriği. Panel (.notif-dd)
   tek overflow:auto kutusu; liste 30 bildirimle dolunca altlık (Bildirim tercihleri) listenin parçası
   gibi aşağı kayıp GÖMÜLÜYORDU → Emir "tercihler gitti" sandı. ⛔ K329 kararı (nötr, başlıktan çıktı)
   GERİ ALINMIYOR: renk/boyut/metin/hiza AYNI — yalnız kaydırırken sabitlenir. background zorunlu:
   sticky olunca ALTINDAN kayan satırları örtmesi için opak olmalı (yoksa yazı üst üste biner). */
.notif-prefs{padding:10px 12px;border-top:1px solid var(--line);text-align:center;
  position:sticky;bottom:0;background:var(--surface)}
/* Karartma katmanı YALNIZ mobilde: masaüstünde tıklanabilir dış alan zaten yeterli ve şeffaf bir katman
   arkadaki düğmeye giden tıklamayı YUTARDI (regresyon).
   ⚠ Z-INDEX TUZAĞI (bekçi yakaladı · kaynak grep'i ASLA göremezdi): `.notif-dd` z-index:100 yazıyor ama
   panel `.topbar`ın İÇİNDE ve `.topbar` `position:sticky; z-index:50` ile KENDİ YIĞIN BAĞLAMINI açıyor →
   panelin 100'ü kök bağlamda 50'ye SIKIŞIR. Karartmayı 99 yapmak paneli ÖRTÜYORDU (× tıklanamıyordu).
   Doğrusu: karartma topbar'ın ALTINDA (40) → panel üstte kalır VE zil dokunulabilir kalır (kapatma yolu 4/5). */
.notif-backdrop{display:none}
@media(max-width:640px){
  body.notif-open .notif-backdrop{display:block;position:fixed;inset:0;background:rgba(15,23,42,.38);z-index:40}
}
/* Panel açıkken arka plan kaydırması kilitli (kapanınca AYNI konuma dönülür — konum JS'te saklanır). */
body.notif-lock{position:fixed;left:0;right:0;width:100%;overflow:hidden}
/* Destek sohbeti FAB'ı panelin üstünde duruyordu: "kapatmaya" çalışan başparmağın ilk denediği boş nokta
   orasıydı → yanlış dokunuş destek sohbetini açıyordu. Panel açıkken gizlenir. */
body.notif-open .cf-root{display:none}

/* ---------- Karşılama sayfası (giriş sonrası) ---------- */
/* İŞ 3 FAZ A — SAKİN başlık: marka görünür ama BAĞIRMAZ. Gradyan yok; düz yüzey + ince kenar. */
/* İŞ 1a — büyük hero kartı KALKTI (firma/slogan/tarih üst barda). TEK SATIR selamlama kaldı. */
.welcome-greet{font-size:16px;font-weight:600;color:var(--ink);margin:2px 2px 16px}
/* K274/D3 (CONSTRAIN): Yemek Menüsü KARTI tam genişlik kalır (kardeşleriyle aynı sağ kenar — hiza bozulmaz),
   ama menü satırları bir metre boyunca YAYILMAZ: okuma genişliğinde sabitlenir. Geniş canvas'ta sağ yarının
   boş kalması "kart dar" değil "metin çok uzun" sorunuydu. */
.menu-body{max-width:680px}
/* ---- YEMEK MENÜSÜ — TEK KOLON AKIŞ + SALATA BARI DISCLOSURE (K478 · K383 "iki kolon" EZİLDİ) ------
   K383 geniş-tuvalde Salata Barı'nı SAĞ KOLONA (aside .menu-salat-genis) alıyordu → dashboard
   hiyerarşisi bozuluyordu (alt-sağ büyük boşluk · kart ~yarım ekran). YENİ DOKTRİN: Yemek Menüsü
   TEK KOLONLU içerik akışıdır; Salata Barı TÜM breakpoint'lerde TEK, varsayılan KAPALI bir
   disclosure olarak render edilir (native <button> · aria-expanded/aria-controls). ⛔ Desktop/mobil
   için AYRI (duplicate) responsive DOM üretilmez — yerleşim yalnız akış içinde. Kapalı panel `hidden`
   ile HİÇ yükseklik tüketmez (yapay min-height yok). K274/D3 okuma genişliği (.menu-body 680) DURUR.
   K478-QC (görsel cila · davranış AYNI): kart KOMPAKT ikincil yüzey (.menu-card max-width) → yönetim
   katmanıyla rekabet etmez, sağ yarı "sebepsiz boş" görünmez (1250/1440 QC · sağ boşluk 557px→~23px).
   Gün sekmeleri (sol) + hafta gezinme (sağ) TEK toolbar (eksen kırılmaz). Salata Barı DİPNOT DEĞİL,
   hafif yüzey satırı (mevcut token: surface-2 + line + radius-xs · ⛔ yeni dekoratif renk/gölge YOK).
   K478-QC2 (ÜÇÜNCÜ mikro-pas · yalnız görsel cila · dört nokta): (1) kart 720→780 (dashboard ölçeğine
   yaklaşır · ⛔ full-width DEĞİL · satırlar 680 okunabilirliğinin altına düşmez) · (2) toolbar TEK kontrol
   kümesi (space-between YERİNE kontrollü gap → hafta tarihi günlere YAKIN) · (3) Salata Barı GERÇEK
   disclosure: açık gövde başlığa BAĞLI (başlık alt köşeleri düzleşir + gövde aynı surface-2/line'ı sürdürür ·
   ⛔ kutu-içinde-kutu ağırlığı yok) + desktop ÇOK-KOLON compact grid (7 madde → 3 · salatalar
   karşılaştırılan veri değil) · (4) reaksiyon = YAPISAL KAPANIŞ (ince separator + boşluk).
   ⚠ `display:grid` YALNIZ `:not([hidden])` ile — aksi hâlde author stili UA'nın `[hidden]{display:none}`
   kuralını EZER ve varsayılan-KAPALI disclosure sessizce AÇILIR (K478 sözleşmesi kırılırdı). */
.menu-card{max-width:780px}
.menu-toolbar{display:flex;align-items:center;justify-content:flex-start;gap:8px 18px;flex-wrap:wrap;margin-top:12px}
.menu-toolbar .pill-row{margin:0}
.menu-week{display:flex;align-items:center;gap:4px;flex-shrink:0}
.menu-salat{margin-top:14px}
.menu-salat-tog{display:flex;width:100%;align-items:center;gap:8px;text-align:left;font-size:13px;font-weight:600;color:var(--ink-soft);
  background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-xs);padding:9px 12px;cursor:pointer}
.menu-salat-tog:hover{border-color:var(--muted)}
.menu-salat-n{margin-left:auto;color:var(--muted);font-weight:500}   /* adet SAĞDA muted — kapalı satır ana yemekten baskın değil */
.menu-salat-chev{font-size:11px;color:var(--muted);line-height:1}
.menu-salat-tog[aria-expanded="true"]{border-radius:var(--radius-xs) var(--radius-xs) 0 0}
.menu-salat-panel:not([hidden]){display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:0 18px;
  background:var(--surface-2);border:1px solid var(--line);border-top:none;border-radius:0 0 var(--radius-xs) var(--radius-xs);
  padding:8px 12px 10px}
.menu-salat-it{font-size:13.5px;padding:2px 0;color:var(--ink-soft)}
.menu-body>.rx-row{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}   /* K478-QC2 (4): YAPISAL KAPANIŞ — "Salata bitti → tüm menüyü değerlendir" (⛔ düğme büyütülmedi) */
.welcome-sec{font-size:12px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:4px 2px 12px}   /* K278 T5-etiket: bölüm ETİKETİ 12/600 (700 = "güçlü küçük", etiket değil) */
/* İŞ 3 FAZ E — TEK reaksiyon bileşeni (DRY): duyuru + yemek aynı stil. */
.rx-btn{display:inline-flex;align-items:center;gap:7px;font-size:13px;font-weight:600;color:var(--ink-soft);
  background:var(--surface);border:1px solid var(--line);border-radius:20px;padding:5px 13px;cursor:pointer;transition:background .12s,border-color .12s,color .12s}
.rx-btn:hover{border-color:var(--accent)}
.rx-btn .rx-count{font-variant-numeric:tabular-nums;font-size:12px;color:var(--muted);min-width:10px;text-align:center}
.rx-btn.rx-on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}
.rx-btn.rx-on .rx-count{color:var(--accent-ink)}
.rx-btn.rx-danger.rx-on{background:color-mix(in srgb,var(--warn,#e11d48) 12%,transparent);border-color:var(--warn,#e11d48);color:var(--warn,#e11d48)}
.rx-btn[disabled]{opacity:.55;cursor:default}
.rx-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
/* Karşılama DUYURU FEED (K246 · yalnız görsel revizyon) — kopuk büyük kartlar/yatay şerit YERİNE aynı
   "announcement feed" ailesi: dikey yığın · ince kenar + ince sol accent · küçük kategori etiketi (dolu
   arka plan YOK — yalnız çok hafif surface farkı) · reaksiyon sağda kompakt. İçerik/ton/yetki DEĞİŞMEZ. */
.ann-feed{display:flex;flex-direction:column;gap:8px}
.ann-card{border:1px solid var(--line);border-left:3px solid var(--line-2);border-radius:12px;padding:11px 15px;background:var(--surface)}
.ann-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.ann-kick{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.ann-title{font-weight:700;font-size:14px;color:var(--ink)}
.ann-person{display:inline-flex;align-items:center;gap:7px}
.ann-body{font-size:13.5px;color:var(--ink-soft);margin-top:5px;white-space:pre-wrap;line-height:1.45}
.ann-img{width:100%;max-height:170px;object-fit:cover;border-radius:8px;margin-top:9px}
.ann-meta{font-size:10.5px;color:var(--muted);margin-top:6px}
.ann-rx{margin-left:auto}
.ann-actions{display:flex;gap:4px}
.ann-empty{border:1px dashed var(--line-2);border-radius:10px;padding:9px 14px;color:var(--muted);font-size:13.5px;display:flex;justify-content:space-between;align-items:center}
/* ONUR KARTI (K248 · Onur Motoru) — ayın birincisi HERO. Bakır (--copper) YALNIZ ince doz (kicker + madalya +
   sol şerit); kart zemini NÖTR. ⛔ bakır ile kehribar (--amber) aynı kartta buluşmaz (kutlama rengi kilidi). */
.onur{background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--copper);border-radius:14px;padding:15px 17px;display:flex;align-items:center;gap:15px;flex-wrap:wrap}
.onur .medal{width:48px;height:48px;border-radius:50%;background:color-mix(in srgb,var(--copper) 12%,transparent);color:var(--copper);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:16px;flex:none;border:1px solid color-mix(in srgb,var(--copper) 30%,transparent)}
.onur .kick{font-size:10.5px;font-weight:700;letter-spacing:.07em;color:var(--copper);text-transform:uppercase}
.onur .nm{font-size:18px;font-weight:700;margin-top:1px;color:var(--ink)}
.onur .why{font-size:13.5px;color:var(--muted);margin-top:2px}
.onur .right{margin-left:auto;display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.onur .meta{font-size:10.5px;color:var(--muted)}
.welcome-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px}
.welcome-card{display:flex;flex-direction:column;align-items:flex-start;gap:12px;padding:18px;border:1px solid var(--line);
  border-radius:14px;background:var(--surface);cursor:pointer;text-align:left;transition:transform .12s,box-shadow .12s,border-color .12s}
.welcome-card:hover{transform:translateY(-2px);box-shadow:var(--shadow);border-color:var(--accent)}
/* Ana sayfa KARAR kartları (menü değil): rol'e göre, tek ekrana sığar, ≤180px. */
/* İş 3c: auto-fit (auto-fill DEĞİL) → kartlar boş track bırakmadan tüm genişliğe YAYILIR (ortalanmaz). */
.home-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:14px}
.home-card{padding:14px 16px;max-height:180px;overflow:hidden}
/* Kişisel alan (danışman "Benim ayım") — operasyon kartlarıyla aynı ailede ama HAFİF accent surface farkı (gradyan yok). */
.home-card-me{background:var(--accent-soft);border-color:color-mix(in srgb,var(--accent) 20%,var(--line))}
@media(max-width:700px){.home-grid{grid-template-columns:1fr}}
/* GÜNÜN AKIŞI şeridi — full-width band (BUGÜN başında), kanal sayaçları yatay. Sıfırlar soluk (inline opacity). */
/* K274: grid DIŞINA alındı → `grid-column:1/-1` GEREKSİZ (span, auto-fit'in boş track çökertmesini engelliyordu).
   Blok eleman olarak zaten tam genişlik; alt boşluk grid'in gap'i yerine kendi margin'iyle korunur. */
.home-flow{max-height:none;display:flex;gap:22px;align-items:center;flex-wrap:wrap;padding:10px 16px;margin-bottom:14px}
/* EK-1 straggler → tx-micro kademesi (10.5 → 11px · yeni sayı icat edilmedi) */
.home-flow-h{font-size:12px;font-weight:600;letter-spacing:.06em;color:var(--muted)}
.home-flow-i{font-size:13.5px;font-variant-numeric:tabular-nums;display:inline-flex;gap:5px;align-items:baseline}
.home-flow-note{margin-left:auto;font-size:12px;color:var(--muted)}
.welcome-card .wc-ic{font-size:26px;color:var(--accent)}   /* K278 §23: İKON glifi — metin kademesi DEĞİL (ölçek uygulanmaz) */
.welcome-card .wc-lbl{font-size:14.5px;font-weight:600;color:var(--ink)}
@media(max-width:640px){
  .welcome-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px}}

/* ---------- Sevkiyat durum şeridi (stepper) ---------- */
.ds-stepper-wrap{overflow-x:auto}
.ds-stepper{display:flex;align-items:center;gap:6px;min-width:min-content}
.ds-step{display:flex;align-items:center;gap:7px;padding:6px 12px;border:1px solid var(--line);border-radius:999px;
  white-space:nowrap;opacity:.5;background:var(--surface)}
.ds-step .ds-dot{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:12px;font-weight:700;background:var(--surface-2);color:var(--muted);border:1px solid var(--line)}
.ds-step .ds-lbl{font-size:13.5px;font-weight:600;color:var(--ink)}
.ds-step.done{opacity:1;border-color:var(--ok)}
.ds-step.done .ds-dot{background:var(--ok);color:#fff;border-color:var(--ok)}
.ds-step.on{opacity:1;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.ds-step.on .ds-dot{background:var(--accent);color:#fff;border-color:var(--accent)}

/* ---------- Markalı giriş: firma logosu ---------- */
.brand-firm-logo{max-height:56px;max-width:180px;object-fit:contain;display:block;margin-bottom:12px}
.h-firm-logo{max-height:64px;max-width:220px;object-fit:contain;display:block;margin-bottom:16px;
  background:rgba(255,255,255,.92);border-radius:10px;padding:8px 12px}
.logo-preview{max-height:52px;max-width:150px;object-fit:contain;border:1px solid var(--line);border-radius:8px;padding:4px;background:var(--surface-2)}
.tb-firm-logo{height:32px;max-width:120px;object-fit:contain;border-radius:6px;display:block}

/* ---------- Aşağı-çek yenile göstergesi (standalone/PWA) ---------- */
.ptr-ind{position:fixed;top:6px;left:50%;transform:translateX(-50%) translateY(0);z-index:200;
  width:38px;height:38px;border-radius:50%;background:var(--surface);border:1px solid var(--line);
  box-shadow:var(--shadow);display:flex;align-items:center;justify-content:center;font-size:19px;
  color:var(--accent);opacity:0;transition:opacity .15s;pointer-events:none}
.ptr-ind.ready{color:var(--ok);font-weight:700}
.ptr-ind.spin{animation:ptr-spin .6s linear infinite}
@keyframes ptr-spin{to{transform:translateX(-50%) translateY(70px) rotate(360deg)}}

/* ---------- Giriş ekranı (iki panel: marka + form) ---------- */
.auth{min-height:100vh;display:grid;grid-template-columns:1.05fr .95fr;background:var(--ground)}
.auth-hero{position:relative;overflow:hidden;display:flex;flex-direction:column;justify-content:space-between;
  padding:52px 56px;color:#fff;background:linear-gradient(150deg,var(--accent) 0%,var(--accent-strong) 62%,#0C1D6E 100%)}
.auth-hero::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(680px 420px at 84% 8%,rgba(255,255,255,.16),transparent 60%),
             radial-gradient(560px 380px at 6% 100%,rgba(255,255,255,.10),transparent 55%)}
.auth-hero>*{position:relative;z-index:1}
.auth-hero .h-brand{display:flex;align-items:center;gap:12px;font-weight:700;font-size:21px;letter-spacing:-.02em}
.auth-hero .h-brand .mark{width:34px;height:34px;border-radius:9px;background:rgba(255,255,255,.16);
  backdrop-filter:blur(6px);display:grid;place-items:center;font-weight:700;font-family:var(--mono);font-size:17px}
.auth-hero .h-title{font-size:34px;font-weight:700;letter-spacing:-.03em;line-height:1.1;max-width:15ch;margin-bottom:16px}
.auth-hero .h-sub{font-size:16px;line-height:1.6;color:rgba(255,255,255,.82);max-width:42ch}
.auth-hero .h-foot{font-size:12px;color:rgba(255,255,255,.6);font-family:var(--mono);letter-spacing:.04em}
.auth-hero .h-list{display:flex;flex-direction:column;gap:11px;margin-top:22px}
.auth-hero .h-list div{display:flex;align-items:center;gap:10px;font-size:14px;color:rgba(255,255,255,.9)}
.auth-hero .h-list span{width:22px;height:22px;border-radius:6px;background:rgba(255,255,255,.16);
  display:grid;place-items:center;font-size:12px;flex:none}
.auth-form{display:grid;place-items:center;padding:32px 24px}
.auth .box{width:100%;max-width:392px}
.auth .box-top{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:4px}
.auth .brand{display:flex;align-items:center;gap:11px;font-weight:700;font-size:19px}
.auth .brand .mark{width:30px;height:30px;border-radius:8px;background:var(--accent);display:grid;
  place-items:center;color:#fff;font-weight:700;font-family:var(--mono)}
.auth .lead{color:var(--muted);font-size:14.5px;margin-bottom:24px}
@media(max-width:820px){.auth{grid-template-columns:1fr}.auth-hero{display:none}}
.seg{display:flex;background:var(--surface-2);border-radius:10px;padding:4px;margin-bottom:18px;gap:4px}
.seg button{flex:1;background:transparent;border:0;border-radius:7px;padding:8px;font-size:13px;
  font-weight:600;color:var(--muted);cursor:pointer;transition:.14s}
.seg button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}
.pick-wrap{margin-top:16px;padding-top:16px;border-top:1px solid var(--line)}
.pick-h{font-size:13px;color:var(--muted);margin-bottom:10px}
.pick-btn{margin-bottom:8px;justify-content:flex-start;font-weight:600}

/* ---------- Bildirim ---------- */
.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);
  background:var(--ink);color:var(--ground);padding:12px 20px;border-radius:10px;font-size:14.5px;
  font-weight:500;box-shadow:var(--shadow);opacity:0;pointer-events:none;transition:.25s;z-index:400;max-width:90vw}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
/* İŞ 3 — "Yeni sürüm hazır" şeridi. z-index 150: modal (300)/toast (400) ALTINDA → açık modalın
   düğmelerini ASLA örtmez (iş kesmez). Manuel — kendi kendine reload YOK. */
.update-bar{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:150;display:flex;
  align-items:center;gap:10px;background:var(--ink);color:var(--ground);padding:9px 12px 9px 16px;
  border-radius:12px;box-shadow:var(--shadow);font-size:13px;font-weight:500;max-width:92vw}
.update-bar .ub-txt{white-space:nowrap}
@media(max-width:640px){.update-bar{left:8px;right:8px;bottom:calc(8px + env(safe-area-inset-bottom,0px));transform:none;justify-content:space-between}}
/* SINIF: toast modalın ÜSTÜNDE (z-index 400 > overlay 300). Mobilde modal alta yaslı → toast'ı
   ÜSTE al ki alt-sabit modal onu ÖRTMESİN (Onur'un 403'ünü gizleyen sessizliğin ikinci hattı). */
@media(max-width:640px){.toast{bottom:auto;top:calc(12px + env(safe-area-inset-top, 0px));transform:translateX(-50%) translateY(-20px)}
  .toast.show{transform:translateX(-50%) translateY(0)}}
.toast.err{background:var(--warn);color:#fff}
.toast.ok{background:var(--ok);color:#fff}
.toast.warn{background:var(--amber);color:#fff}

/* ---------- Modal ---------- */
.modal-overlay{position:fixed;inset:0;background:rgba(8,10,15,.55);display:grid;place-items:center;
  z-index:300;padding:20px;backdrop-filter:blur(2px)}
/* Mobil: uzun içerik kaydırılabilsin — modal flex sütun; ortadaki gövde scroll,
   başlık + butonlar sabit. (Eski hali max-height'siz olduğu için taşan pencere tıkanıyordu.) */
/* TEK KAYNAK modal genişliği: eski 420px SABİT dardı (tablolu içerik + butonlar kırpılıyordu). Artık RESPONSIVE:
   varsayılan min(92vw,920px) · geniş varyant (.modal-wide) min(95vw,1100px). Küçük ekran → viewport'un çoğu (92/95vw).
   Header + footer SABİT (flex:0 0 auto), gövde scroll (dikey + yatay) → butonlar HER ZAMAN görünür, içerik kırpılmaz. */
.modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  width:100%;max-width:min(92vw, 920px);box-shadow:var(--shadow);
  display:flex;flex-direction:column;max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);overflow:hidden}
.modal-wide{max-width:min(95vw, 1100px)}
.modal-h{display:flex;justify-content:space-between;align-items:center;padding:20px 24px 0;flex:0 0 auto}
.modal-h h2{font-size:16px;font-weight:700}
.modal-body{padding:14px 24px;overflow-y:auto;overflow-x:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;flex:1 1 auto;min-height:0}
.modal-f{display:flex;gap:10px;justify-content:flex-end;padding:14px 24px 20px;flex:0 0 auto;border-top:1px solid var(--line)}
/* SINIF: eylem hatası modal İÇİNDE (footer üstünde) — toast DEĞİL (mobilde modal arkasında kayboluyordu).
   Boşken tamamen gizli (yer kaplamaz); metin gelince amber blok. .btn-sending: gönderim geri bildirimi. */
.modal-err{margin:0 24px;padding:9px 12px;border-radius:8px;background:var(--warn-soft);color:var(--warn);border:1px solid var(--warn);font-size:13.5px;font-weight:600;flex:0 0 auto}
.modal-err:empty{display:none;padding:0;margin:0;border:0}
.btn-sending{opacity:.7;cursor:progress;pointer-events:none}
@media(max-width:640px){
  /* ⛔ SINIF DÜZELTMESİ (mobil tıklanamayan modal): alt-sabit modalın butonları iOS home-indicator /
     Safari alt çubuğu ALTINDA kalıyordu → basılamıyordu (her modal, "Ayı kapat" onayı dahil).
     env(safe-area-inset-bottom) ile modal güvenli alanın ÜSTÜNE kalkar. (viewport-fit=cover şart — app.html meta.) */
  .modal-overlay{padding:10px 10px calc(10px + env(safe-area-inset-bottom, 0px));place-items:end center}
  .modal{max-height:calc(100vh - 20px);max-height:calc(100dvh - 20px - env(safe-area-inset-bottom, 0px))}
  /* Footer de güvenli alanı hesaba katsın (tam yükseklik modalda buton ekranın en altına dayanmasın). */
  .modal-f{padding-bottom:max(20px, calc(14px + env(safe-area-inset-bottom, 0px)))}
  /* iOS odakta otomatik zoom'u önle (16px altı input yakınlaştırır → jank) */
  .modal input,.modal select,.modal textarea{font-size:16px}
}
.x-btn{background:transparent;border:0;color:var(--muted);font-size:16px;cursor:pointer;line-height:1;padding:4px}
.x-btn:hover{color:var(--ink)}
.form-err{color:var(--warn);font-size:13.5px;min-height:16px;margin-top:8px}

/* ---------- Müşteri listesi uzlaştırma (İş B3) — geniş salt-okunur önizleme ---------- */
.rec-panel{max-width:760px}                     /* modal geniş varyantı (4 grup yan yana sığsın) */
.rec-sayim{margin:10px 0;padding:10px 12px;border:1px solid var(--line);border-radius:9px;background:var(--surface-2)}
.rec-sayim-h{font-weight:700;font-size:13px;margin-bottom:6px}
.rec-sayim .rec-tbl{width:auto}
.rec-counts{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 6px}
.rec-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;
  font-size:13.5px;font-weight:600;border:1px solid var(--line)}
.rec-chip b{font-variant-numeric:tabular-nums}
.rec-chip.ok{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.rec-chip.amber{background:var(--amber-soft);color:var(--amber);border-color:transparent}
.rec-chip.warn{background:var(--warn-soft);color:var(--warn);border-color:transparent}
.rec-chip.mut{background:var(--surface-2);color:var(--muted)}
.rec-note{font-size:12px;color:var(--muted);line-height:1.5;margin:8px 0}
.rec-grp{border:1px solid var(--line);border-radius:8px;margin-top:12px;overflow:hidden}
.rec-grp-h{padding:9px 12px;font-weight:700;font-size:13px;cursor:pointer;user-select:none;
  display:flex;align-items:center;justify-content:space-between;background:var(--surface-2)}
.rec-grp-b{padding:0 12px 8px}
.rec-tbl{width:100%;border-collapse:collapse;font-size:13.5px}
.rec-tbl th,.rec-tbl td{text-align:left;padding:5px 8px;border-bottom:1px solid var(--line)}
.rec-tbl th{font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);font-weight:600}
.rec-tbl tr:last-child td{border-bottom:0}
.rec-tbl .phone{color:var(--muted);font-size:11.5px}

/* ---------- Dijital imza pad'i ---------- */
.sig-pad{border:1px dashed var(--line-2);border-radius:8px;background:#fff;touch-action:none;
  cursor:crosshair;width:100%;max-width:440px;height:150px;display:block}

/* ---------- Hasar fotoğraf ızgarası ---------- */
.photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px}
.photo-item{position:relative;border:1px solid var(--line);border-radius:8px;overflow:hidden;
  aspect-ratio:1;display:grid;place-items:center;background:var(--surface-2)}
.photo-item img{width:100%;height:100%;object-fit:cover;display:block}
.photo-link{padding:12px;font-size:12px;color:var(--accent-ink);text-align:center;text-decoration:underline}
.photo-del{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:6px;border:0;
  background:rgba(0,0,0,.55);color:#fff;cursor:pointer;font-size:14px;line-height:1;display:grid;place-items:center}
.photo-del:hover{background:var(--warn)}

/* ---------- Sekme çubuğu (Firma ayar hub'ı) ---------- */
.sm-tabs-wrap{margin-bottom:16px}
.sm-tabs{display:flex;gap:8px;flex-wrap:wrap}
.sm-bulk{display:flex;align-items:center;gap:16px;flex-wrap:wrap;padding:12px 16px;margin-bottom:14px}
.sm-bulk-grp{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.sm-bulk-lbl{font-weight:600;font-size:13.5px;white-space:nowrap}
.sm-bulk select{min-width:180px}

/* ---------- Satış Adet Girişleri (#1) ---------- */
.sm-picker{height:34px;padding:0 10px;border:1px solid var(--line-2);border-radius:8px;background:var(--surface);
  color:var(--ink);font-size:13px;max-width:220px;cursor:pointer}
.brand-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 10px;
  border:1px solid var(--line);border-radius:8px;margin-bottom:6px;font-size:14px}
.sm-filter{padding:12px 16px;margin-bottom:16px}
.sm-filter-row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.sm-filter select{width:100%}
/* Task 3 — TEK ŞERİT toolbar: başlık+alt tek satırda · filtreler INLINE (ayrı kart yok) · eylemler sağda.
   1280px'te kart üst kenardan ~120px içinde başlar (üç şerit → bir şerit). */
.sm-toolbar{display:flex;align-items:center;gap:14px 18px;flex-wrap:wrap;margin-bottom:14px}
.sm-toolbar-title{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;min-width:0}
.sm-toolbar-title h1{font-size:24px;font-weight:700}
.sm-toolbar-sub{color:var(--muted);font-size:13.5px}
.sm-toolbar-filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.sm-toolbar-filters select{width:100%}
.sm-toolbar-actions{display:flex;gap:8px;align-items:center;margin-left:auto;flex-wrap:wrap;justify-content:flex-end}
.sm-save-area{display:flex;gap:8px;align-items:center}
.sm-save-note{font-size:12px;font-weight:600;white-space:nowrap}
.sm-save-note.warn{color:var(--warn)}
.sm-save-note.ok{color:#16a34a}
.sm-dd-wrap{position:relative}
/* z-index topbar'ın (50) ÜSTÜNDE — menü sticky başlık tarafından ASLA örtülmez (mobilde tap hedefleri yenmez) */
.sm-dd{position:absolute;right:0;top:38px;z-index:70;min-width:230px;padding:6px;
  background:var(--surface);border:1px solid var(--line-2);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.14)}
.sm-dd-item{display:block;width:100%;text-align:left;padding:9px 12px;border:0;border-radius:7px;
  background:transparent;color:var(--ink);font-size:14.5px;cursor:pointer}
.sm-dd-item:hover{background:var(--line)}
/* Menü içi bölüm ayırıcı + başlık (ör. "Ay") — yapıştırma işlemleri ile ay işlemini ayırır. */
.sm-dd-sep{padding:6px 12px 3px;margin-top:4px;border-top:1px solid var(--line);font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.sm-dd-note{padding:8px 12px 4px;border-top:1px solid var(--line);margin-top:4px}
/* Mobilde menü SABİT konumlanır; topbar'ın (spill'li) ALTINDA açılır + z-index 70 ile üstte kalır → hiçbir item örtülmez. */
@media(max-width:700px){.sm-dd{position:fixed;right:8px;left:8px;top:66px;min-width:0;max-height:calc(100dvh - 78px);overflow-y:auto}}
/* Anchor-scroll hedefleri sticky topbar altına gizlenmesin (araç raporu satır linkleri dahil). */
.main [id]{scroll-margin-top:72px}
.sm-tbl td{vertical-align:middle}
/* K278 §10 — F/T tempo tablosu WEIGHT doktrini (§4): numeric T3 14.5/500 (default veri) · Danışman T3 14.5/600
   (entity) · ŞUBE toplam satırı 600. Punto ZATEN 14.5 (.tbl td) — yalnız AĞIRLIK ayrışıyor: "her bold görüneni
   700 yapma" kuralı gereği 700 KULLANILMADI. K175 kilidi (bar 115px · .num-sm 44px) DIŞARIDA, dokunulmadı. */
.sm-tbl td.num{font-weight:500}
.sm-tbl tbody td:first-child{font-weight:600}
/* ŞUBE (tfoot) satırı KALIN kalır (doktrin: "ŞUBE en altta kalın"). Ağırlık tr'de INLINE 700 ile geliyordu;
   yeni `.sm-tbl td.num{font-weight:500}` kuralı TD'ye DOĞRUDAN yazdığı için kalıtımı EZİYORDU (ölçüm: 700→500).
   Bu yüzden tfoot AÇIKÇA + td.num'dan daha spesifik yazılır. */
.sm-tbl tfoot td,.sm-tbl tfoot th,.sm-tbl tfoot td.num{font-weight:700}
/* FAZ B Part 2 — düzeltme aracı: sayaç hücresi TÜRETİLİR (elle sayı yazılmaz), tıkla → araçlar. */
.sm-correctable{cursor:pointer;position:relative}
.sm-correctable:hover{background:var(--line);outline:1px dashed var(--line-2)}
.sm-ov-badge{white-space:nowrap}
.sm-name{max-width:220px}
.sm-stepper{display:inline-flex;align-items:center;gap:4px}
.sm-stepper .sm-num{width:64px;text-align:center;padding:6px 4px}
.sm-step{width:28px;padding:0;font-size:16px;line-height:1}
input.sm-num::-webkit-outer-spin-button,input.sm-num::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
input.sm-num{-moz-appearance:textfield}
/* Düz sayı kutusu: ~64px, ORTALANMIŞ, tabular. Yerleşik ▲▼ okları KALIR (artırmalı iş akışı:
   satış +1 / presold iptal −1). Özel −/+ düğmeleri YOK (hücre başına ~90px yiyordu). */
.sm-num2{width:64px;text-align:center;font-variant-numeric:tabular-nums;padding:6px 6px}
/* Boşluk toparlama (04 Ağu 2026): dar kolon (Takas) girişi — TEK KAYNAK .sm-num2 tanımı DEĞİŞMEDİ (64px kilidi
   sürer), bu YALNIZ EK bir modifier (kombinasyon .sm-num2.sm-num2-sm). Yerleşik ▲▼ KALIR (spinner gizlenmedi). */
.sm-num2.sm-num2-sm{width:44px;padding:6px 2px}
.tbl td.num input{text-align:center}
/* Satış tabloları: sayısal kolonlar SABİT ~64px, Danışman kalan genişliği alır (esner) — tablo TAM
   GENİŞLİK (04 Ağu 2026 · Emir: sağda boşluk kalmaz artık — bkz. CLAUDE.md "Tablo hizalama" revize notu). */
.sm-tbl{table-layout:fixed;width:100%;min-width:min(100%,720px)}
/* ⚠ K453 (Emir · 22 Ağu · canlıda "PRESOL/D") — TEMEL 64px KİLİDİ DEĞİŞMEDİ (CLAUDE.md).
   Başlık kelimelerinin GERÇEK genişliği ölçüldü (Chromium · `.tbl th` 12px/600/.05em/uppercase):
     PRESOLD 60,9 · (TESLİM) 59,5 · TOPLAM 56,1 · SARKAN 54,3 · HEDEF 44,3 · PUAN 35,7 px
   64px kolonun içerik kutusu ise 44px'ti (2×10px başlık boşluğu) → K369'un `overflow-wrap:anywhere`
   kuralıyla birlikte 1024px'te ALTI başlık kelime ORTASINDAN kırılıyordu. İki kat düzeltme:
     (a) başlık boşluğu 6px → kutu 52px (aşağıda) · (b) 52px'e de sığmayan İKİ kolon `.num-h` (76px).
   ⛔ İLK DENEMEM TEMELİ 84px YAPMAKTI — KAPI REDDETTİ: 1024px'te tablo kendi kabını 144px aşıyordu.
      "Hepsini genişlet" doğru görünen ama REGRESYON üreten çözümdü.
   ⇒ İhtiyacı olan kolon modifier alır (`.num-sm` dar boşluk / `.num-wide` 148px ile AYNI desen).
   Ölçüldü (10 kolonlu açık ay): 252 + 2×76 + 6×64 + 210 = 998 → 1024px'te kap taşması YOK. */
.sm-tbl th.num,.sm-tbl td.num{width:64px}
/* ⭐ K453 — BAŞLIK YATAY BOŞLUĞU 10px → 6px (YALNIZ `th.num`; veri hücresi `.sm-tbl td{padding:8px 10px}`
   AYNEN kalır). Emsal AYNI tabloda zaten var: `.sm-tbl th.num-sm{padding:0 4px}` (04 Ağu · "TAKAS %").
   Gerekçe ÖLÇÜMDÜR: 64px kolonun içerik kutusu 44px'ti; başlık kelimeleri (Chromium · 12px/600/.05em/
   uppercase) SARKAN 54,3 · TOPLAM 56,1 · PRESOLD 60,9 · (TESLİM) 59,5 · HEDEF 44,3 · PUAN 35,7 →
   yarısı kutuya sığmıyordu. Kırma yasağıyla birlikte bu, kelimeyi KOMŞUYA DOĞRU taşırıyordu
   (ölçüldü: SARKAN +10px · TOPLAM +12px — Chromium ortalı satırı taşarken SAĞA yayar).
   6px'te kutu 52px olur → taşma 2-4px'e düşer, kolon sayısı/genişliği DEĞİŞMEDEN. */
.sm-tbl th.num{padding-left:6px;padding-right:6px}
/* Başlığı 52px'lik içerik kutusuna sığmayan kolon (PRESOLD 60,9 · (TESLİM) 59,5): 76px → 64px içerik.
   ⚠ Veri/hizalama DEĞİŞMEZ, yalnız genişlik. ⛔ 84px denendi ve GERİ ALINDI: gereğinden 8px geniş,
   bedeli doğrudan Danışman kolonundan çıkıyordu (aşağıdaki tavan hesabı). */
.sm-tbl th.num.num-h,.sm-tbl td.num.num-h{width:76px}
/* K367 BUG 3 — SCOPED istisna (CLAUDE.md'nin kendi `.num-sm` deseninin TERS yönü): temel 64px kilidi
   DEĞİŞMEZ; yalnız içeriği HER ZAMAN TAM TL TUTARI olan kolonlar (Araç Koruma > Performans: "Ürün satışı",
   "Araç başı") daha geniş bir modifier alır. ⚠ Sayı ÖLÇÜLDÜ, kör yazılmadı (Chromium · .sm-tbl td.num
   tipografisi + 10px yatay padding): "1.700.333,00 TL"→130px · "12.469.920,00 TL"→138px ·
   "999.999.999,00 TL"→146px · başlık "Ürün satışı"→96px. 64px'te metin İKİ SATIRA sarıp komşu hücreyle
   çakışıyordu (satır 66px). 148px = 9 haneli tutar bile TEK SATIR. nowrap sarmayı İMKÂNSIZ kılar;
   taşma riski tablonun mevcut `overflow-x:auto` sarmalayıcısında karşılanır (yeni yatay taşma YOK). */
.sm-tbl th.num.num-wide,.sm-tbl td.num.num-wide{width:148px;white-space:nowrap}
/* K369 — BAŞLIK KOMŞU HÜCREYE TAŞMAZ (ölçüldü · Chromium 375/1024/1280): `table-layout:fixed` + 64px'lik
   `.num` kolonunda TEK KELİMELİK uzun başlık ("Penetrasyon" ≈ 75px) kutusunu AŞIP komşunun üstüne biniyordu
   — K367'nin düzelttiği TL çakışmasının başlık hâli. Sınıfın kendisi (64px) DEĞİŞMEZ; yalnız sarma noktası
   serbest bırakılır: kutudan uzun kelime kırılır, taşma yerine YÜKSEKLİK artar. ⚠ Yalnız BAŞLIK (th) —
   sayı hücresi (td) etkilenmez (tabular-nums hizası bozulmasın). */
/* ⚠⚠ K453 — K369'UN `anywhere` KARARI ARTIK HER YERDE TERSİNE ÇEVRİLDİ (silinmedi, gerekçesi üstte).
   K403 bunu YALNIZ `.ak-tbl` için yapmıştı; temel kural yerinde kaldığı için AYNI KUSUR komşu tabloda
   (Danışman Tempo) yaşamaya devam etti — Emir canlıda "PRESOL/D" gördü. Bir düzeltme yalnız gördüğü
   yüzeyi düzeltir: kural TEMELE taşındı, `.ak-tbl` kopyası KALKTI (TEK KAYNAK).
   ⛔ Kelime ORTASINDAN kırılma yasak; kelime SINIRINDAN sarma serbest ("FATURA" / "(TESLİM)" iki satır
      sorun değil — üç parçaya bölünmüş kelime sorundur). Kutuya sığma işi GENİŞLİĞİN (`.num-h` 76px). */
.sm-tbl th.num{overflow-wrap:normal;word-break:normal;hyphens:none}
/* Aynı ölçümün ikinci bulgusu: `.num-wide`in `nowrap`ı DEĞER içindir (K367: TL asla sarmasın). Kanonik
   terminoloji uzun olduğu için BAŞLIK 148px'i aşıyordu ("Koruma ürünü satışı" = 153px) → yalnız `th`de
   sarma serbest. Değer hücresi (`td`) nowrap KALIR — K367 kilidi aynen ayakta. */
.sm-tbl th.num.num-wide{white-space:normal}
/* K369 — ESNEK KOLONUN TABANI (Yeni Yüzey Kontrol Listesi: "sabit + esnek karışımında esnek kolonun TABANI
   yazılır"). `.sm-tbl`in `min-width:min(100%,720px)` kuralı dar ekranda tabanı 100%'e düşürür → Araç
   Koruma'nın 6-7 kolonlu tablolarında ad kolonu ~35px'e eziliyordu (375px'te ölçüldü: "Gökhan Koçak"
   kutusunu taşıyordu). Bu modül-scoped modifier gerçek bir taban verir; taşma tablonun KENDİ
   `overflow-x:auto` kabında karşılanır (sayfa yatay kaymaz · ⛔ `overflow:hidden` maskelemesi YOK). */
/* ⚠ 660px TABAN YETMİYORDU: kolonların TOPLAM tanımlı genişliği (ad 300 + sayısallar) tabanı aşınca
   `table-layout:fixed` hepsini ORANTILI BÜZÜYOR → 96px'lik kolon 60px'e düşüp başlık 4-6 satıra
   kırılıyordu (ölçüldü). Taban gerçek toplama çekildi; artan genişlik tablonun KENDİ `overflow-x` kabında
   karşılanır (sayfa kaymaz · mobilde zaten kart düzeni devrede). */
.sm-tbl.ak-tbl{min-width:900px}
/* ⭐ K422 — İLK KOLON 300px DEĞİL 200px (YALNIZ bu modülde). Paylaşılan `.sm-tbl th:first-child{width:300px}`
   Danışman Tempo için ölçülmüştü: orada ilk kolon ad + rozet + alt satır taşır. Araç Koruma tablolarında
   ilk kolon YALIN'dır — danışman adı, ay adı ya da tarih (ölçüldü: "Abdullah Uğur" 12px'te ~95px).
   Boşa duran 100px, tablonun KENDİ kabına sığmasını engelliyordu (K403 kapısı: 1024'te taşma).
   ⛔ Genel 300px kuralı DEĞİŞMEDİ — istisna `.sm-tbl.ak-tbl` ile sınırlı; `min-width:180px` tabanı korunur. */
.sm-tbl.ak-tbl th:first-child,.sm-tbl.ak-tbl td:first-child{width:200px;min-width:160px}
/* ═══ K403 (Emir · 17 Ağu) — ARAÇ KORUMA TABLOSU: BAŞLIK KIRILMAZ · SAYI SAĞA DAYALI · MOBİLDE KART ═══
   ⚠⚠ K369'UN KARARI BU TABLO İÇİN TERSİNE ÇEVRİLDİ (silinmedi — gerekçesi hâlâ okunuyor, yukarıda).
   K369 `th.num{overflow-wrap:anywhere}` ile "taşma yerine yükseklik" demişti; sonucu canlıda
   "Pene/trasy/on" ve "Koru/ma/ürünü" oldu — kelime ORTASINDAN üç satıra kırılan başlık okunamıyor.
   Emir: "Kelime kelime dikey kırılma YASAK — başlık kısalır ya da kolon genişir." Burada KOLON GENİŞLER
   (terminoloji kanonik, kısaltmak iş dilini bozardı).
   ⛔ Kelime ORTASINDAN kırılma yasak (`overflow-wrap:normal`); kelime SINIRINDAN sarma serbest
      (iki satır sorun değil, üç parçaya bölünmüş kelime sorun). */
/* (K403'ün `.ak-tbl` kopyası K453'te KALKTI — temel kural artık aynısını söylüyor · TEK KAYNAK.) */
/* Tek kelimelik en uzun başlık "Penetrasyon" 64px'e SIĞMIYOR (K369 ölçümü: ~75px + 2×10px padding).
   Taban 96px → tek satır. `.num-wide` (148px) TL kolonları için AYNEN kalır. */
.sm-tbl.ak-tbl th.num:not(.num-wide),.sm-tbl.ak-tbl td.num:not(.num-wide){width:96px}
/* ⭐ K453-b (Emir · 22 Ağu · TOLERANS BÜTÇESİ) — "taşabilir ama komşuya değmesin" ZAYIF bir invariant;
   sayılı bütçe kondu (≤4px) ve ÖLÇÜM üç kolonun bütçeyi aştığını gösterdi:
     "Penetrasyon" 97px > 84px kutu (96px kolon) → +13px · "Güncellenen" 99px → +15px.
   `.num-h`in ak-tbl karşılığı: başlığı sığmayan kolon 110px alır (97/99 + 2×6px boşluk + pay).
   ⛔ TEMEL 96px KİLİDİ DEĞİŞMEDİ — tek tek kolon modifier alır (K367/K453 deseniyle AYNI). */
.sm-tbl.ak-tbl th.num.num-h,.sm-tbl.ak-tbl td.num.num-h{width:110px}
/* Aynı bütçenin METİN kolonu karşılığı: genişliği TANIMSIZ metin kolonları kalan yeri paylaşır ve
   komşu kolon genişleyince BAŞLIKLARININ ALTINA düşerler (ölçüldü: "Aktaran" 64px kelime, 76px kolon
   → +8px taşma). Tabana bağlanır: 96px ⇒ 84px içerik kutusu ≥ 64px. ⛔ Esnek kolon (Dosya) esnek KALIR. */
.sm-tbl.ak-tbl th.txt-h,.sm-tbl.ak-tbl td.txt-h{width:96px}
/* ⚠ ÖZGÜLLÜK TUZAĞI (bekçi yakaladı): `.sm-tbl th.num.num-wide{width:148px}` ile taban kuralım AYNI
   özgüllükte (0,3,1); sonra geldiği için 96px KAZANIYOR ve TL kolonu 148px'ini KAYBEDİYORDU (başlık 5
   satıra kırılıyordu). Taban `:not(.num-wide)` ile daraltıldı + geniş kolon AÇIKÇA yazıldı. */
.sm-tbl.ak-tbl th.num.num-wide,.sm-tbl.ak-tbl td.num.num-wide{width:160px}
/* ⚠ SCOPED İSTİSNA — CLAUDE.md "Tablo hizalama (kalıcı — istisnasız): SAYI ORTALANMIŞ" kuralına Emir'in
   AÇIK kararıyla verilen, YALNIZ bu modülü kapsayan istisna (aynı bölümdeki `.num-sm` istisnasının deseni).
   Gerekçe: bu tablonun sayıları TUTAR ağırlıklı ve basamak sayıları çok farklı (1.500 ₺ ↔ 12.469.920 ₺);
   ortalı hizada basamaklar birbirini tutmuyor, göz kolonu tarayamıyor. Sağa dayama + tabular-nums
   basamakları hizalar. ⛔ Genel kural DEĞİŞMEDİ — diğer tablolar ortalı kalır. */
.sm-tbl.ak-tbl td.num,.sm-tbl.ak-tbl th.num{text-align:right;font-variant-numeric:tabular-nums}
/* TUTAR TEK SATIR (Emir: "tutar 2 satıra düşüp işlem tarihiyle iç içe giriyor"). Değer hücresi ASLA sarmaz. */
.sm-tbl.ak-tbl td.num{white-space:nowrap}
/* ── MOBİL (≤700px): tablo KÜÇÜLTÜLMEZ → SATIR KARTI (Danışman Tempo `.sm-cards` deseninin aynısı).
   ⛔ Yatay kaydırma "çözüm" değil teslimiyettir (CLAUDE.md); ⛔ `overflow-x:hidden` maskelemedir. */
.ak-cards{display:none}
.ak-card{border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin-bottom:7px}
.ak-card-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.ak-card-nm{font-weight:700;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ak-card-hero{flex:none;white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:700}
.ak-card-det{font-size:12px;color:var(--muted);margin-top:3px;display:flex;flex-wrap:wrap;gap:4px 12px}
.ak-card-det span{white-space:nowrap;font-variant-numeric:tabular-nums}
@media(max-width:700px){
  .ak-cards{display:block}
  .ak-tbl-wrap{display:none}   /* mobilde tablo GİZLİ — kart listesi görünür (taşma yapısal olarak biter) */
}
/* K281 İş1 — ANLAM GRUBU AYIRICISI: sekiz eşit sayı kolonu "duvar" gibi okunuyordu. Üç grubun sınırında
   (TOPLAM ve TAKAS'ın SOLU) 1px dikey çizgi. Emsal .team-tbl'daki grup ayrımıyla AYNI teknik/token.
   ⚠ `border-collapse:collapse` → kenarlık kolon GENİŞLİĞİNİ DEĞİŞTİRMEZ (ölçüldü: 76px → 76px). */
.sm-tbl th.sm-grp,.sm-tbl td.sm-grp{border-left:1px solid var(--line)}
/* Danışman Tempo boşluk toparlama (04 Ağu 2026 · Emir): Takas/Takas% içeriği HER ZAMAN kısa ("0"·"—"·"%0")
   — ~64px'in çoğu boş kalıyordu ("havadar"). TEK CSS sınıfı (.num-sm), TEK KAYNAK'ta tanımlı — hücre hücre
   hizalama YAZILMADI. Veri/kolon GİZLENMEZ, yalnız genişlik daralır (sessiz sıfır kilidi aynen geçerli). */
.sm-tbl th.num.num-sm,.sm-tbl td.num.num-sm{width:64px}
/* Başlık sıkışması (04 Ağu 2026 · Emir ekran görüntüsü — toparlama-2): "TAKAS %" 56px'te DE iki satıra
   kırılıyordu (kanıt: gerçek Chromium render, Range.getClientRects() metin-sarma ölçümü — 56px/60px→2
   satır, 64px→1 satır, TEK satıra geçtiği İLK genişlik). BAŞLIK padding'i daraltıldı (veri hücresi
   .sm-tbl td{padding:8px 10px} AYNEN kalır). */
.sm-tbl th.num-sm{padding-left:4px;padding-right:4px}
/* D8 (11 Ağu · Emir "isimden sonra dev boşluk") — DANIŞMAN KOLONUNA TAVAN. `table-layout:fixed` + `width:100%`
   iken genişliği TANIMSIZ tek kolon fazlanın TAMAMINI yutar: Danışman 382px@1440 → 492px@1920 (ölçüm), yani
   K273'ün 1120→1320 büyümesi tek bir boşluğa gidiyordu. Tavan konunca fazla, tanımlı TÜM kolonlara orantılı
   dağılır (kolonlar arası nefes dengelenir; veri sağa yığılmaz). Referans: Resepsiyon roster'ının 290px'lik
   Danışman kolonu (birebir eşitlik ZORUNLU değil — bu tablo performans tablosu, roster değil).
   ⛔ K175 KİLİDİ KORUNUR: tempoBar kendi `flex:0 0 115px` track'ini taşır (hücre genişlese de bar 115px),
   Takas/Takas% giriş kutusu .sm-num2-sm 44px. Bu üçüne DOKUNULMADI. */
/* ⚠⚠ K453 (Emir · 22 Ağu) — TAVAN 300px → 252px. D8'İN KARARI DEĞİŞMEDİ, SAYISI ÖLÇÜLDÜ.
   Kapı yeni yüzeyi (Danışman Tempo) görünce ÖNCEDEN VAR OLAN bir taşmayı ortaya çıkardı: açık ayın
   10 kolonu 1024px'te kabına SIĞMIYORDU (300 + 8×64 + 210 = 1022 > 998 → 24px taşma). K453'ün iki
   `num-h` kolonu bunu 64px'e çıkardı. `table-layout:fixed` KÜÇÜLTMEZ: tanımlı toplam kabı aşarsa
   tablo taşar ve kullanıcı YATAY KAYDIRIR ("çözüm değil, teslimiyet" — CLAUDE.md).
   ⛔ ESNEK TAVAN DENENDİ VE ÖLÇÜMLE ELENDİ: `clamp(180px, calc(100% - 762px), 300px)` — Chromium
      fixed-layout kolonunda yüzde içeren genişliğin ÜST SINIRINI UYGULAMIYOR (1920'de ad kolonu
      1132px ölçüldü) → D8'in şikâyeti geri gelirdi. Yani "esner ama tavanlı" CSS'te yok.
   ⇒ Tavan, en dar masaüstünde ARTAN yere eşitlendi: 998 − (2×76 + 6×64 + 210) = 252px.
   Ölçüldü (Chromium · 1024/1280/1440/1920 · açık VE kapalı ay): taşma 0 · ad hücresi TEK SATIR
   (en uzun gerçek ad + 22px avatar = 198px ≤ 232px içerik kutusu) · fazla yine TÜM kolonlara
   orantılı dağılır (ad 252→~350@1440; D8'in 399'undan DAHA dar, sayısal kolonlar nefes alır).
   ⛔ K175 KİLİDİ KORUNUR: tempoBar 115px · .sm-num2-sm 44px · min-width tabanı 180px. */
.sm-tbl th:first-child,.sm-tbl td:first-child{min-width:180px;width:252px}
/* Sağ boşluk kapatma (04 Ağu 2026 · Emir): Hedefe Ulaşma kolonu SABİT (bar 115px + boşluk + etiket) —
   width:100%'in artan alanı yalnız Danışman'a gitsin diye TEK diğer genişliksiz kolon bu olurdu, önlendi.
   Bar boyutu DEĞİŞMEDİ (tempoBar kendi 115px'ini korur) — yalnız kolon taşması engellendi. */
.sm-tbl th.hedefe,.sm-tbl td.hedefe{width:210px}
/* Genel hücre boşluğu sıkılaştırma (04 Ağu 2026): global .tbl padding'inden BİRKAÇ PİKSEL az — yalnız bu
   tabloya özgü override (kaynak sırası: bu blok .sm-tbl temel kuralından SONRA gelir → kazanır). */
.sm-tbl th{padding:7px 10px}
.sm-tbl td{padding:8px 10px}
/* Satır-kaldır (×) kolonu: dar, sağa. Sayı DEĞİL — .num almaz. */
.sm-tbl th.sm-x,.sm-tbl td.sm-x{width:40px;text-align:right}
/* K235 DÜZELTME (Emir): STICKY DANIŞMAN hücresi zebra ile TUTARLI opak arka plan — satırın devamıyla AYNI ton (kopuk beyaz
   sütun bitti). Sticky altından içerik sızmaması için OPAK zorunlu → tek satır surface · çift satır zebra tonunun OPAK karşılığı
   (color-mix ... surface · .tbl kuralı transparent kullanıyor, beyaz kart üstünde AYNI render) · hover satır tonuyla eşleşir. */
.sm-tbl tbody td:first-child{background:var(--surface)}
.sm-tbl tbody tr:nth-child(even) td:first-child{background:color-mix(in srgb,var(--surface-2) 50%,var(--surface))}
.sm-tbl tbody tr:hover td:first-child{background:var(--surface-2)}
/* K235 DÜZELTME-2 madde 2 (Emir · TEŞHİS: sticky DANIŞMAN th surface-2, diğer th'ler transparent → header'da kopuk seam):
   başlık satırının TAMAMI aynı opak zemin (mockup'ta da header tek renk) → DANIŞMAN header sütunu artık kopuk durmuyor. */
.sm-tbl thead th{background:var(--surface-2)}
/* ŞUBE (tfoot) satırı: DANIŞMAN hücresi (STICKY surface-2) ile veri hücreleri AYNI opak zeminde (özet satır · zebra dışı). */
.sm-tbl tfoot td,.sm-tbl tfoot th{background:var(--surface-2)}
/* Web görünümü (motivasyon tablosu) */
.sm-web th.sm-col,.sm-web td.sm-col{text-align:center;width:34px;padding:6px 2px}
/* Özet kolonları (Satış Adt/Hdf · Hedefe Ulaşma · Takas) başlık+hücre ORTALI */
.sm-web th.sm-sum,.sm-web td.sm-sum{text-align:center;white-space:nowrap}
.sm-web td.sm-pct-ok b{color:var(--ok)}
.sm-web td.sm-pct-low b{color:var(--amber)}
.sm-mark{display:inline-block;width:16px;height:16px;border-radius:50%;border:1.5px solid var(--line-2);background:transparent}
.sm-mark.on{background:var(--accent);border-color:var(--accent)}
/* ═══ DURUM SÖZLÜĞÜ — TEK KAYNAK işaret renkleri (statusMark). Beş durum, fazlası yok. ═══
   0=ölçüldü sıfır (ink) · —=veri yok (gri) · ⚠=okunamadı · bilinmiyor · bayat = AMBER.
   ⚠ AMBER, kırmızı DEĞİL: kırmızı "aksiyon al" der; okunamama/bekleme sistemsel duraklamadır. */
.sm-mk{font-weight:600}
.sm-mk-val{color:var(--ink)}
.sm-mk-none{color:var(--muted)}
.sm-mk-warn{color:var(--amber)}
.sm-mk-warn[title]{cursor:help}
.sm-tot{margin-top:12px;font-size:14px;color:var(--ink)}
.sm-tot b{font-weight:700}

/* ---------- Özet kartı (İş 1): ÜÇ SATIR — ADET · PUAN · GKL. Kesin KALIN · tahmin soluk/italik · /hedef ---------- */
.sm-proj{display:flex;align-items:baseline;gap:6px;margin:2px 0 10px;font-size:16px;font-variant-numeric:tabular-nums}
.sm-proj b{font-size:16px;font-weight:700}
.sm-proj-sep{color:var(--muted)}
.sm-metrics{display:flex;flex-direction:column;gap:8px;margin-top:2px}
.sm-metric-row{display:grid;grid-template-columns:78px minmax(120px,auto) 1fr auto;align-items:center;gap:12px;border-radius:8px;padding:2px 4px;margin:0 -4px}  /* FAZ C: etiket sütunu "PAZAR PAYI" için genişledi · UYUM: 4. sütun = kuyruk (% + geride çipi) */
.sm-metric-tail{display:flex;align-items:center;justify-content:flex-end;gap:10px;white-space:nowrap}  /* UYUM: % + TEK "geride" çipi sağ uçta (satır başına bir kırmızı) */
.sm-metric-clickable{cursor:pointer}
.sm-metric-clickable:hover{background:var(--line)}
.sm-metric-lbl{font-weight:600;font-size:12px;color:var(--muted);letter-spacing:.03em;white-space:nowrap}
.sm-metric-val{font-size:16px;font-variant-numeric:tabular-nums;white-space:nowrap}
.sm-metric-kesin{font-size:24px;font-weight:700;line-height:1}                 /* KESİN = büyük + KALIN */
.sm-metric-tahmin{font-size:13.5px;font-style:italic;color:var(--muted);opacity:.75;font-weight:400}  /* TAHMİN = soluk/italik, ASLA kalın */
.sm-metric-hedef{font-size:13.5px;color:var(--muted);font-weight:400}
.sm-metric-gap{font-size:13.5px;font-weight:600}  /* İŞ 2: şube tempo açığı "N geride/önde" (paceGap tek kaynak) */
.sm-metric-err{font-size:24px;font-weight:700;color:var(--warn)}
.sm-metric-bar{position:relative;height:14px;background:var(--line);border-radius:7px;min-width:100px;overflow:visible}
.sm-metric-fill{position:absolute;top:0;bottom:0;border-radius:7px}
.sm-fill-presold{opacity:.42}   /* AÇIK = presold+sarkan (henüz fatura yok) — tüm dolum, soluk zemin */
.sm-fill-fatura{}                /* KOYU = faturalandı (kesinleşti) — üstte tam renk */
.sm-metric-tick{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink)}
.sm-metric-pct{font-size:13.5px;font-weight:600;text-align:right;font-variant-numeric:tabular-nums}
.sm-verdict{font-size:13.5px;font-weight:600;margin-top:8px;color:var(--warn)}
/* UYUM §2c: başlık yanı "?" yardım simgesi (doktrin paragrafı tooltip'e taşınır — kart sadeleşir). */
.qico{display:inline-flex;width:17px;height:17px;border-radius:50%;border:1px solid var(--line-2);color:var(--muted);
  font-size:12px;font-weight:700;align-items:center;justify-content:center;cursor:help;vertical-align:-2px;margin-left:6px}
/* UYUM §2c: eksik veri EYLEM ŞERİDİ (kompakt amber band) — doktrin paragrafı DEĞİL, tek satır + düğme. */
.sm-act{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;margin-top:6px;
  background:var(--amber-soft);border:1px solid color-mix(in srgb,var(--amber) 25%,transparent);border-radius:var(--radius-s);font-size:13px}
.sm-act b{color:var(--amber)}
/* UYUM: MEKANİK SATIR — kart içi üçüncü katman (gri, tek satır, ayraçlı). Kapanış tahmini · günlük gereken · GKL · pazar notu.
   Yardımcı bilgi NÖTR (kırmızı YOK — kırmızı yalnız hüküm çipinde). */
.sm-mek{color:var(--muted);font-size:13.5px;border-top:1px dashed var(--line);margin-top:10px;padding-top:9px;display:flex;gap:8px 22px;flex-wrap:wrap;font-variant-numeric:tabular-nums}
.sm-mek b{color:var(--ink-soft);font-weight:600}
.sm-mek .sm-mek-clk{cursor:pointer;border-radius:5px;margin:-2px -4px;padding:2px 4px}
.sm-mek .sm-mek-clk:hover{background:var(--line)}
/* GÖRÜNÜM ANAHTARI — TEK kayan switch (mockup .switch/.knob): aktif taraf mavi dolu + beyaz metin, knob kayar. */
.sm-switch{position:relative;display:inline-flex;align-items:center;border:1px solid var(--line);background:var(--surface-2);border-radius:999px;padding:3px;cursor:pointer;flex:none;user-select:none}
.sm-switch .sm-switch-knob{position:absolute;top:3px;bottom:3px;left:3px;width:calc(50% - 3px);border-radius:999px;background:var(--accent);transition:left .18s ease}
.sm-switch.oto .sm-switch-knob{left:calc(50% + 0px)}
.sm-switch .sm-switch-lbl{position:relative;z-index:1;min-width:58px;text-align:center;padding:5px 6px;font-size:13.5px;font-weight:600;color:var(--muted);transition:color .18s}
.sm-switch.ic .sm-switch-lbl.l{color:#fff}
.sm-switch.oto .sm-switch-lbl.r{color:#fff}
/* İKİ KAHRAMAN — bağlayıcı ince başlık (üst, ortalı) + heroFoot (alt, ortalı, üst çizgili) (mockup .heroHead/.heroFoot). */
/* K202 — AY SONU ARA DURUM rozeti: takvim bitti AMA kilitlenmedi. Gerçek kilitli aydan (gri "kapalı")
   GÖRSEL OLARAK AYRI — amber, nabız-nokta, tıklanabilir CTA. Hardcode renk YOK (tema değişkenleri). */
.sm-aybitti{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;cursor:pointer;
  color:var(--amber-ink,#a76a12);background:var(--amber-soft,#fbf3e3);border:1px solid var(--amber,#a76a12);
  border-radius:999px;padding:3px 11px;font-family:inherit;line-height:1.3}
.sm-aybitti:hover{filter:brightness(.97)}
.sm-aybitti:disabled{cursor:default;opacity:.85}
.sm-aybitti-dot{width:7px;height:7px;border-radius:50%;background:var(--amber,#a76a12);flex:0 0 auto;
  box-shadow:0 0 0 0 var(--amber,#a76a12);animation:sm-aybitti-pulse 1.8s ease-out infinite}
@keyframes sm-aybitti-pulse{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--amber,#a76a12) 55%,transparent)}
  70%{box-shadow:0 0 0 6px transparent}100%{box-shadow:0 0 0 0 transparent}}
@media (prefers-reduced-motion:reduce){.sm-aybitti-dot{animation:none}}
/* K235 madde 3 — ANLIK DURUM (context) satırı: mockup .context (ortalı · ince border · muted zemin · bir kademe güçlü font). */
.sm-hero-connect{font-size:13.5px;color:var(--ink-soft);font-weight:600;text-align:center;padding:9px 12px;margin:2px 4px 8px;
  border:1px solid var(--line);background:var(--surface-2);border-radius:8px;font-variant-numeric:tabular-nums}
.sm-hero-connect b{color:var(--ink);font-weight:700}
.sm-hero-foot{border-top:1px solid var(--line);margin-top:8px;padding:9px 8px 3px;font-size:12px;color:var(--muted);text-align:center;font-variant-numeric:tabular-nums}
.sm-hero-foot b{color:var(--ink);font-weight:600}
/* ALT MODÜL kartları (BMW Yetişecek · Bekleyen · Takas/Ekspertiz) — TEK KAYNAK kompakt ritim (09 Ağu · Emir
   "bu alt kısmı da böyle toparlasak"). 03 Ağu'da yalnız Takas kartı 12px'e çekilmişti; Yetişecek/Bekleyen 22px
   kalmıştı → üçünün boşluk oranı tutarsızdı. Aynı değeri (12px dikey padding + başlık-içerik 4px) tek sınıfta
   toplayıp üçüne de uyguladık (yeni px İCAT EDİLMEDİ). Ana tempo tablosu kartı (.card 22px) DEĞİŞMEZ. */
.card.sm-alt{padding-top:12px;padding-bottom:12px}
.card.sm-alt .card-h{margin-bottom:4px}
/* UYUM: YIL GİDİŞATI — karttan ÇIKTI, ayrı ince YATAY şerit (tek satır, ayraçlı). */
.sm-ytd{margin-top:12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-s);padding:9px 16px;
  display:flex;gap:8px 20px;align-items:center;color:var(--muted);font-size:13.5px;flex-wrap:wrap;font-variant-numeric:tabular-nums}
.sm-ytd b{color:var(--ink);font-weight:600}
.sm-ytd-lbl{font-weight:600;color:var(--muted);letter-spacing:.04em;font-size:12px;text-transform:uppercase}
/* K235 madde 4/5 + DÜZELTME-2 madde 1 — KAPANIŞ TAHMİNİ ve YIL GİDİŞATI: İKİSİ de aynı desen — BAŞLIK sola sabit (aynı X) ·
   VERİ kalan alanda ORTALI. İki şerit BİREBİR aynı davranış (Emir: "başlıklar sol, veriler ortalanmış olsun"). */
.sm-ytd .sm-ytd-body,.sm-kapanis .sm-kapanis-body{flex:1;display:flex;align-items:center;justify-content:center;gap:8px 20px;flex-wrap:wrap;min-width:0}
/* K235 madde 7 — FATURA (TESLİM) parantez (teslim edilen) SOLUK ikincil (ana=fatura kalın) · açıklama notu (mockup .note). */
.sm-tbl td .sm-tes-paren{color:var(--muted);font-weight:500}
.sm-tbl-note{font-size:12px;color:var(--muted);margin-top:8px;line-height:1.5}
/* F/T MOBİL-FİT: Takas/Ekspertiz İKİ-KAHRAMAN grid'i mobilde TEK KOLON (390'a sığar) · bar+çip satırı SARAR (chip
   "tempoya göre N geride" nowrap iken dar kolonda taşıyordu → wrap). İŞ 3 doktrini: küçültme/scale YOK. */
.tk-heroes{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.tk-barrow{display:flex;align-items:center;gap:8px;margin-top:4px;flex-wrap:wrap}
@media(max-width:700px){.tk-heroes{grid-template-columns:1fr}}
/* İş 3 — ADET/PUAN KAHRAMAN (büyük) · GKL KÜÇÜK (tek satır) · GÜNLÜK AÇIK (iş günü) · projeksiyon İKİNCİL */
.sm-metric-hero{padding-top:3px;padding-bottom:3px}
.sm-metric-hero .sm-metric-kesin{font-size:24px}                                 /* kahraman rakam — GKL'den büyük */
.sm-metric-val-hero{font-size:16px}
.sm-gkl-line{display:flex;align-items:baseline;gap:4px;font-size:13.5px;font-variant-numeric:tabular-nums;margin:4px 0 0;padding:3px 4px;border-radius:6px}
.sm-gkl-line b{font-size:16px;font-weight:700}                                   /* GKL rakamı kahramandan KÜÇÜK (koca bar yok) */
.sm-gkl-lbl{font-weight:700;font-size:12px;color:var(--muted);letter-spacing:.03em;margin-right:2px}
.sm-daily{margin:8px 0 4px;font-size:13.5px;line-height:1.5;padding:6px 9px;border-radius:6px;background:var(--bg-soft)}
.sm-daily.warn,.sm-daily.warn b{color:var(--warn)}                               /* geride → uyarı rengi (manşet açığı) */
.sm-daily.ok{color:var(--muted)}
.sm-daily.ok b{color:#16a34a}
.sm-proj-sec{margin:2px 0 10px;font-size:12px;font-variant-numeric:tabular-nums}  /* "bugün kapansa" — İKİNCİL (manşet değil) */
.sm-proj-sec b{font-size:14.5px;font-weight:700}
/* İŞ 1 — Ay durumu ÖZET KARTI BAŞLIĞINDA (ayrı band yok). Açılmıştı ikincil satırı + bekleyen adımlar. */
.sm-status-sub{margin-top:3px;font-size:12px;color:var(--muted);opacity:.85}  /* açılmıştı: geçmiş, SOLUK, alarm değil */
.sm-pending{margin:2px 0 10px;font-size:13.5px;display:flex;align-items:center;gap:4px;flex-wrap:wrap}  /* bekleyen adımlar: yalnız varsa */
/* mobil: bar gizli · hero satırı FLEX-WRAP → sayı grubu (nowrap · min-content ~212px) satır 1'de kalır, pace çipi (kuyruk)
   SIĞMAZSA 2. satıra SARAR → 390'a sığar (Emir iOS: grid 70+212+115=398 taşıyordu · içerik-boyutlu kolon daralmıyordu · ⛔ scale/zoom yok). */
@media(max-width:700px){
  .sm-metric-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px}
  .sm-metric-bar{display:none}
  .sm-metric-val{flex:0 1 auto;min-width:0}
  .sm-metric-tail{margin-left:auto;flex:0 0 auto}   /* kuyruk sağa · sığmazsa alt satıra sarar */
  .sm-mek{gap:6px 14px}
}

/* ---------- Danışman tempo: MOBİLDE satır kartı (9 kolonluk tablo telefona sığmaz) ---------- */
.sm-cards{display:none}
/* MOBİL kart (madde 7): ~%15 daha kompakt (10/12→8/12 · margin 8→7) — dokunma alanı korunur, kartlar yapışmaz. */
.sm-card{border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin-bottom:7px}
.sm-card-branch{border-color:var(--line-2);background:var(--surface-2);font-weight:700}
.sm-card-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
/* AD/AVATAR TEK SATIR (madde 6): FLEX satır → avatar (blok .avtr-ini olsa bile) + ad hep aynı satırda; ad flex:1 + ellipsis · hero sağda sabit. */
.sm-card-name{display:flex;align-items:center;gap:7px;min-width:0;flex:1;font-weight:700}
.sm-card-name .sm-card-nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.sm-card-hero{flex:none;white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:700;display:inline-flex;align-items:center;gap:6px}
.sm-card-det{font-size:13.5px;color:var(--muted);margin-top:2px}
/* İNCE HEDEFE ULAŞMA BARI (madde 5): 3px · sessiz/işlevsel · renk paceTone (dotColor · desktop bar ile AYNI kaynak). */
.sm-card-bar{height:3px;background:var(--line);border-radius:2px;margin-top:7px;overflow:hidden}
.sm-card-bar span{display:block;height:100%;border-radius:2px}

.sm-mobile-note{display:none}
@media(max-width:700px){
  .sm-cards{display:block}
  .sm-tbl-wrap{display:none}         /* mobilde tablo GİZLİ — kart listesi görünür */
  .sm-desktop-only{display:none!important}   /* veri girişi / yapıştırma düğmeleri mobilde GİZLİ */
  .sm-mobile-note{display:block;font-size:13.5px;color:var(--muted);margin-top:8px}
}

/* ---------- Resepsiyon mod şeridi (basit/gelişmiş) ---------- */
.mode-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:var(--surface-2);
  border:1px solid var(--line);border-radius:var(--radius-s);padding:10px 16px;margin-bottom:16px;font-size:13px}
.mode-bar b{font-weight:700;color:var(--ink)}

/* ---------- Danışman öz-durum şeridi (Resepsiyon) ---------- */
.selfbar{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:14px 18px;margin-bottom:16px;box-shadow:var(--shadow-sm);flex-wrap:wrap}
.selfbar .sb-label{font-size:13px;color:var(--muted)}
.selfbar .sb-label b{color:var(--ink);font-weight:600}
.selfbar .sb-btns{display:flex;gap:8px;margin-left:auto}
.selfbar .sb-btns .btn{min-width:96px}
.st-on-musait,.st-on-mesgul,.st-on-izinli{border:1px solid transparent}

/* ---------- Rapor uyarı satırı (düşük/yüksek) ---------- */
tr.flag-low td{background:var(--amber-soft)!important}
tr.flag-low:hover td{background:var(--amber-soft)!important}
.warn-box{padding:11px 14px;border-radius:var(--radius-s);font-size:13px;margin:12px 0;line-height:1.5}
.warn-box.bad{background:var(--warn-soft);border:1px solid color-mix(in srgb,var(--warn) 30%,transparent);color:var(--warn)}
.warn-box.ok{background:rgba(30,158,99,.10);border:1px solid color-mix(in srgb,var(--ok) 30%,transparent);color:var(--ok)}

/* ---------- Rapor triyajı (hüküm-önce): tek satır [nokta] Soru — hüküm — [chevron] ---------- */
.rep-cat-title{font-size:12px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);
  margin:22px 0 8px;padding-bottom:6px;border-bottom:1px solid var(--line)}
.rep-cat-title:first-child{margin-top:4px}
.rep-cat-sub{font-size:11.5px;font-weight:400;text-transform:none;letter-spacing:0;color:var(--muted);margin-top:2px}
.rep-cat-soon{margin-top:20px;font-size:13.5px;color:var(--muted);opacity:.7}
.rep-row{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-s);margin-bottom:8px;overflow:hidden}
.rep-head{display:flex;align-items:center;gap:10px;padding:12px 14px;cursor:pointer;user-select:none}
.rep-head:hover{background:var(--surface-2)}
.rep-dot{flex:none;width:10px;height:10px;border-radius:50%}
.rep-dot-kirmizi{background:var(--warn)}
.rep-dot-amber{background:var(--amber)}
.rep-dot-yesil{background:var(--ok)}
.rep-dot-gri{background:var(--muted);opacity:.55}
.rep-q{font-weight:700;font-size:14px;flex:none}
.rep-verdict{font-size:13px;color:var(--ink-soft);flex:1 1 auto;min-width:0;line-height:1.4}
.rep-verdict.mut{color:var(--muted);font-style:italic}
/* FAZ A+ (Sorun 1a) — "Detay" ince link DEĞİL, belirgin ikincil düğme (sağda) + tüm satır tıklanabilir kart. */
.rep-chev{flex:none;color:var(--ink-soft);font-size:12px;font-weight:700;transition:.15s;border:1px solid var(--line-2);
  border-radius:999px;padding:3px 11px;background:var(--surface-2);white-space:nowrap}
.rep-head:hover .rep-chev{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}
.rep-body{padding:2px 14px 14px;border-top:1px solid var(--line)}
@media(max-width:640px){.rep-head{flex-wrap:wrap}.rep-q{flex:1 1 100%}.rep-verdict{flex:1 1 100%}}
/* FAZ 2 — dönem seçici (segmented) + gidişat sparkline */
/* DÖNEM seçici — AYRI sınıf (.pdseg): global ".seg button" (satır 299) çakışmasını önler. */
.pdseg{display:inline-flex;border:1px solid var(--line-2);border-radius:9px;overflow:hidden;background:var(--surface-2)}
.pdseg-btn{border:0;background:transparent;padding:7px 16px;font-size:13px;font-weight:600;color:var(--muted);cursor:pointer;
  border-right:1px solid var(--line-2);transition:.12s}
.pdseg-btn:last-child{border-right:0}
.pdseg-btn:hover:not(.pdseg-on){color:var(--ink);background:var(--surface-3)}
/* AKTİF segment BELİRGİN: dolu accent + beyaz kalın metin (bir bakışta hangi moddasın belli) */
.pdseg-on{background:var(--accent);color:#fff;font-weight:600;box-shadow:inset 0 0 0 1px var(--accent-strong)}
.rep-gidisat{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:6px 0 12px;padding:8px 12px;
  border-radius:8px;background:var(--surface-2)}
.rep-spark{display:inline-flex;align-items:center;color:var(--ink-soft)}
/* Redesign v2 — KPI ÖZET ŞERİDİ (4 manşet metrik · renkli sol şerit = durum) */
.rep-kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:2px 0 16px}
.rep-kpi-tile{background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--muted);
  border-radius:var(--radius-s);padding:10px 12px;min-width:0}
.rep-kpi-kirmizi{border-left-color:var(--warn)}
.rep-kpi-amber{border-left-color:var(--amber)}
.rep-kpi-yesil{border-left-color:var(--ok)}
.rep-kpi-gri{border-left-color:var(--muted)}
.rep-kpi-lbl{font-size:12px;font-weight:600;letter-spacing:.02em;color:var(--muted);text-transform:uppercase;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rep-kpi-val{font-size:22px;font-weight:700;line-height:1.15;margin:3px 0 1px;color:var(--ink)}
.rep-kpi-sub{font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* FAZ A+ (Sorun 2 · çıplak sayı yasak) — KPI kutusu MİNİ GÖRSEL (bar/işaret · aralık şeridi · hafta barları).
   Fatura/Teslimat tempo mini-barının AYNI dili (dolu + işaret çizgisi). */
.rep-kpi-viz{margin-top:7px}
.rep-mb{position:relative;height:7px;border-radius:999px;background:var(--surface-3);overflow:visible}
.rep-mb-fill{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:var(--accent)}
.rep-mb-kirmizi .rep-mb-fill{background:var(--warn)} .rep-mb-amber .rep-mb-fill{background:var(--amber)}
.rep-mb-yesil .rep-mb-fill{background:var(--ok)} .rep-mb-gri .rep-mb-fill{background:var(--muted)}
.rep-mb-mark{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--ink);opacity:.6}
/* aralık şeridi (p25–p75 + medyan işareti) — dönüş süresi tek-değer anlamsızlığını kapar */
.rep-range{position:relative;height:7px;border-radius:999px;background:var(--surface-3)}
.rep-range-band{position:absolute;top:0;bottom:0;border-radius:999px;background:var(--accent-soft)}
.rep-range-med{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--accent)}
/* 4 haftalık mini bar (yoğunluk deseni) */
.rep-wk{display:flex;align-items:flex-end;gap:3px;height:22px}
.rep-wk-b{flex:1;min-width:0;background:var(--surface-3);border-radius:2px 2px 0 0;position:relative}
.rep-wk-b.on{background:var(--accent)}
/* satır içi mini bar (Eksik nerede? AÇIK kolonu) */
.rep-cellbar{display:inline-block;vertical-align:middle;width:44px;height:6px;border-radius:999px;background:var(--surface-3);margin-left:6px;position:relative;overflow:hidden}
.rep-cellbar>span{position:absolute;left:0;top:0;bottom:0;border-radius:999px;background:var(--warn)}
/* FAZ B (K208) — GÖRSEL KALIPLAR: eşleşme çubukları (talep-stok) · gün×saat ısı haritası · çift-bar · aralık şeridi (2 dönem) */
.rep-match{display:grid;grid-template-columns:120px 1fr 1fr 92px;gap:6px 12px;align-items:center;margin-top:10px;font-size:12px;overflow-x:auto}
.rep-match .mh{font-size:10px;font-weight:700;letter-spacing:.05em;color:var(--muted);text-transform:uppercase}
.rep-mbar{position:relative;height:10px;border-radius:0 3px 3px 0;background:var(--surface-3)}
.rep-mbar i{position:absolute;left:0;top:0;bottom:0;border-radius:0 3px 3px 0;display:block}
.rep-dlt{font-size:11.5px;font-weight:700}
.rep-dlt.iyi{color:var(--ok)} .rep-dlt.kotu{color:var(--warn)} .rep-dlt.notr{color:var(--muted)}
/* ısı haritası */
.rep-heat{border-collapse:separate;border-spacing:2px;font-size:12px;margin-top:8px}
.rep-heat th{font-size:10px;color:var(--muted);font-weight:700;padding:2px 4px}
.rep-heat td{width:26px;height:20px;text-align:center;border-radius:4px;color:var(--ink);font-variant-numeric:tabular-nums}
.rep-heat td.hz{color:var(--muted);opacity:.5}
.rep-heat .hlbl{color:var(--muted);font-weight:600;text-align:right;padding-right:6px}
/* çift-bar (bu dönem accent · önceki soluk) — değer etiketleri ZORUNLU (açık ton kontrastı düşük) */
.rep-grp{display:grid;grid-template-columns:64px 1fr;gap:6px 12px;align-items:center;margin-top:8px}
.rep-glabel{font-size:11.5px;color:var(--muted);text-align:right}
.rep-bars{display:flex;flex-direction:column;gap:2px}
.rep-bar{position:relative;height:12px;border-radius:0 4px 4px 0;background:var(--accent);min-width:2px}
.rep-bar.prev{background:var(--prev,#8FA3EA)}
.rep-bar span{position:absolute;left:calc(100% + 7px);top:-2px;font-size:12px;color:var(--ink-soft);font-weight:600;white-space:nowrap;font-variant-numeric:tabular-nums}
.rep-chlegend{display:flex;gap:16px;font-size:11.5px;color:var(--muted);margin-bottom:6px}
.rep-swb{display:inline-block;width:12px;height:12px;border-radius:3px;vertical-align:-2px;margin-right:5px}
/* aralık şeridi — 2 dönem alt alta (bant p25–p75 · çizgi medyan) */
.rep-range2{display:grid;grid-template-columns:80px 1fr;gap:8px 12px;align-items:center;margin-top:10px;max-width:640px}
.rep-range2 .rlabel{font-size:11.5px;color:var(--muted);text-align:right}
.rep-rtrack{position:relative;height:18px}
.rep-rline{position:absolute;top:8px;left:0;right:0;height:2px;background:var(--surface-3)}
.rep-rband{position:absolute;top:5px;height:8px;border-radius:4px;background:var(--accent-soft);border:1px solid var(--prev,#8FA3EA)}
.rep-rband.prevb{background:var(--surface-2);border-color:var(--line-2)}
.rep-rmed{position:absolute;top:2px;width:3px;height:14px;border-radius:2px;background:var(--accent)}
.rep-rmed.prevm{background:var(--prev,#8FA3EA)}
.rep-rval{position:absolute;top:-3px;font-size:10.5px;color:var(--ink-soft);font-weight:600;font-variant-numeric:tabular-nums}
@media(max-width:720px){.rep-kpi{grid-template-columns:repeat(2,1fr)}}
@media(max-width:420px){.rep-kpi{grid-template-columns:1fr}}
/* Redesign v2 — KATEGORİ SEKMELERİ (yalnız aktif sekmenin kartları görünür) */
.rep-tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin:0 0 14px;overflow-x:auto}
.rep-tab{display:inline-flex;align-items:center;gap:7px;border:0;background:transparent;cursor:pointer;
  padding:9px 15px;font-size:14.5px;font-weight:600;color:var(--muted);border-bottom:2px solid transparent;
  white-space:nowrap;transition:.12s;margin-bottom:-1px}
.rep-tab:hover{color:var(--ink)}
.rep-tab-on{color:var(--ink);border-bottom-color:var(--accent);font-weight:600}
.rep-tab-dot{flex:none;width:8px;height:8px;border-radius:50%}
/* Redesign v2 — ikinci düzey "Ham liste" (şasi dökümü kart gövdesinde DEĞİL) */
.rep-raw{margin-top:10px;border-top:1px dashed var(--line)}
.rep-raw-tog{display:flex;align-items:center;gap:6px;cursor:pointer;user-select:none;
  padding:8px 0 4px;font-size:12px;font-weight:600;color:var(--muted)}
.rep-raw-tog:hover{color:var(--ink)}
.rep-raw-body{padding:2px 0 4px}
.rep-raw-line{font-size:12px;padding:2px 0;border-bottom:1px solid var(--line);color:var(--ink-soft)}

/* İŞ 3 — Stoktaki Otomobiller: tek liste, durum çipi, hüküm + model çipleri (tıkla → BMW nibul) */
.stock-hukum-card{margin-bottom:14px}
.stock-hukum b{font-size:16px}
.stock-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:6px}
.stock-fchips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
/* İş B — hafif küçük pill: ince kenar, yuvarlak, adet MUTED; aktif dolu. */
.stock-fchip{cursor:pointer;border:1px solid var(--line);background:var(--surface);font-weight:600;font-size:13.5px;
  padding:3px 11px;border-radius:999px;transition:.12s}
.stock-fchip:hover{border-color:var(--accent)}
.stock-fchip.on{background:var(--accent);color:#fff;border-color:var(--accent)}
.stock-fchip .sfc-n{margin-left:5px;font-weight:500;color:var(--muted);font-variant-numeric:tabular-nums}
.stock-fchip.on .sfc-n{color:rgba(255,255,255,.75)}
.stock-fchip-more{cursor:pointer;border:1px dashed var(--line-2);background:transparent;color:var(--muted);
  font-weight:600;font-size:12px;padding:3px 11px;border-radius:999px;transition:.12s}
.stock-fchip-more:hover{color:var(--accent);border-color:var(--accent)}
.stock-list{display:flex;flex-direction:column;gap:6px;margin-top:6px}
/* İş 4 — KOMPAKT SATIR (liste): swatch + model/alt + en düşük fiyat + chevron. Satır TIKLA → fiyat detayı modalı.
   Satır yüksekliği sabit-düşük; tüm ayrıntı (senaryolar/iç değerler) DETAYDA. Tablo hizalama: sayı sağda, tabular-nums. */
.stok2-row{display:flex;align-items:center;gap:10px;padding:9px 12px;border:1px solid var(--line);border-radius:9px;
  background:var(--surface);cursor:pointer;transition:.12s}
.stok2-row:hover{border-color:var(--accent);background:var(--surface-2)}
.stok2-row-flat{cursor:default}   /* BAYRAK kapalı: fiyat/detay yok → satır tıklanmaz (hover vurgusu da yok) */
.stok2-row-flat:hover{border-color:var(--line);background:var(--surface)}
.stok2-mid{min-width:0;flex:1}
.stok2-model{font-weight:600;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stok2-sub{font-size:12px;font-weight:400;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stok2-pr{flex:none;text-align:right;font-size:14.5px;display:flex;flex-direction:column;align-items:flex-end;gap:1px}
.stok2-pr b{font-variant-numeric:tabular-nums}
.stok2-pr-x{font-size:12px}
.stok2-pr-tk{font-size:12px;color:var(--ok,#16a34a);font-weight:600}
.stok2-chev{flex:none;color:var(--muted);font-size:18px;line-height:1}   /* K278 §23: chevron glifi — metin değil */
/* İş 4 — SAYFA-İÇİ FİYAT DETAYI: Sunum modu anahtarı artık BAŞLIK TOOLBAR'ında (.topbar-actions) + "← Listeye dön" + kimlik + 3 senaryo + ... + danışman bloğu. */
/* HAT 4 — TEK "Sunum modu" anahtarı (iki düğme yerine). Açık = müşteriyle paylaşılan görünüm (iç bilgiler gizli). */
.stok2-sunum{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line-2);background:var(--surface);color:var(--muted);
  font-size:12px;font-weight:600;padding:4px 11px;border-radius:999px;cursor:pointer;transition:.12s}
.stok2-sunum:hover{color:var(--fg)}
.stok2-sunum.on{background:var(--accent);border-color:var(--accent);color:#fff}
.stok2-sunum-knob{width:26px;height:15px;border-radius:999px;background:var(--line-2);position:relative;transition:.12s;flex:none}
.stok2-sunum-knob::after{content:'';position:absolute;top:1.5px;left:1.5px;width:12px;height:12px;border-radius:50%;background:#fff;transition:.12s}
.stok2-sunum.on .stok2-sunum-knob{background:rgba(255,255,255,.5)}
.stok2-sunum.on .stok2-sunum-knob::after{left:12.5px}
/* HAT 4 — ◆ marj işareti (marjlı araç · yalnız danışman · ETİKETSİZ). accent renk, küçük. */
.stok2-marj-mark{color:var(--accent,#2563eb);font-size:12px;line-height:1;flex:none}

/* ==== İLAN GÖRÜNÜMÜ (bmwnibul uyarlaması) — KART GRID + DETAY specs/CTA. Sunum-dostu; yönetici alanları mod'a bağlı. ==== */
.stk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(238px,1fr));gap:14px;margin-top:8px}
.stk-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden;cursor:pointer;transition:box-shadow .15s,transform .15s,border-color .15s}
.stk-card:hover{box-shadow:0 6px 22px rgba(0,0,0,.09);transform:translateY(-2px);border-color:var(--accent)}
.stk-card-flat,.stk-card-flat:hover{cursor:default;box-shadow:none;transform:none;border-color:var(--line)}
.stk-ph{height:148px;display:flex;align-items:center;justify-content:center;position:relative;background:radial-gradient(ellipse at 50% 65%,var(--surface),var(--surface-2))}
.stk-ph .stk-silh{font-size:42px;opacity:.32}   /* K278 §23: siluet glifi — metin değil */
.stk-cover{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:block}
/* HOVER-SCRUB — kapak 4 bölge (imleç → açı) · konum çubukları · açı etiketi */
.stk-ph-scrub{cursor:crosshair}
.stk-zones{position:absolute;inset:0;display:flex}.stk-zones>div{flex:1}
.stk-dots{position:absolute;bottom:9px;left:50%;transform:translateX(-50%);display:flex;gap:5px;pointer-events:none}
.stk-dots span{width:14px;height:3px;border-radius:2px;background:rgba(0,0,0,.18)}
.stk-dots span.on{background:var(--fg)}
.stk-caplbl{position:absolute;bottom:8px;right:10px;font-size:12px;color:var(--muted);background:var(--surface);opacity:.9;padding:2px 7px;border-radius:10px;pointer-events:none}
/* SWATCH ATTR SATIRLARI (renk/döşeme dikey · sabit swatch → kırpma yok) */
.stk-attrs{display:flex;flex-direction:column;gap:5px;margin:8px 0 9px}
.stk-attr{display:flex;align-items:center;gap:7px;font-size:13.5px;font-weight:500;min-width:0}
.stk-sw{width:13px;height:13px;border-radius:50%;flex-shrink:0;border:1px solid rgba(0,0,0,.15);background:var(--surface-2)}
.stk-sw-miss{background:repeating-linear-gradient(45deg,var(--surface-2),var(--surface-2) 2px,var(--line) 2px,var(--line) 4px)}
.stk-attr-l{color:var(--muted);width:46px;flex-shrink:0}
.stk-attr-n{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--fg)}
.stk-b360{position:absolute;top:9px;left:9px;font-size:12px;background:var(--fg);color:var(--surface);padding:2px 8px;border-radius:999px;display:inline-flex;gap:4px;align-items:center;font-weight:600}
.stk-bst{position:absolute;top:9px;right:9px;font-size:12px;padding:2px 8px;border-radius:999px;font-weight:500}
.stk-st-stok{background:rgba(16,159,110,.14);color:var(--ok,#0b7a52)}
.stk-st-yol{background:rgba(184,121,26,.16);color:var(--amber,#8a5a12)}
.stk-st-gum{background:rgba(42,80,228,.14);color:var(--accent,#1e40af)}   /* Gümrükte (pre-transit/BND) — badge=detay TEK KAYNAK */
/* Stok redesign: durum rozetinin HEMEN ALTINDA küçük BMW lojistik kodu (BND/STC/SLD1) — sağ üst, rozetle hizalı. */
.stk-bkod{position:absolute;top:28px;right:9px;font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--muted);background:rgba(255,255,255,.86);border-radius:5px;padding:1px 6px;letter-spacing:.02em}
/* K350 — Satışlar SATIRINDA ham BMW lojistik kodu (BND/STC/SLD1…). `.stk-bkod`'un TİPOGRAFİ/RENK oranı
   örnek alındı ama sınıf REUSE EDİLMEDİ: oradaki `position:absolute` Stok'un foto kartına göredir, burada
   satır AKIŞI içinde bir rozet gerekiyor. Ölçek kardeş rozetlerle (.pb 12px · .ithb 10px) uyumlu (11px). */
.rbkod{font-family:var(--mono);font-variant-numeric:tabular-nums;font-size:11px;font-weight:700;letter-spacing:.02em;color:var(--muted);background:var(--surface-2);border-radius:6px;padding:3px 8px;white-space:nowrap}
/* Stok YAŞI çipi — SOL ÜST · triyaj rengi (eşik TEK KAYNAK STOK_YAS_ESIK · 90+ amber · 120+ kırmızı). Yaşlıdan sıralanır ama yaş görünmüyordu. */
.stk-age{position:absolute;top:9px;left:9px;font-size:12px;font-weight:600;padding:2px 8px;border-radius:999px;font-variant-numeric:tabular-nums}
/* K281 İş2 — YALNIZ KONTRAST (eşikler/sınıflar/boyut DEĞİŞMEDİ · STOK_YAS_ESIK TEK KAYNAK'a DOKUNULMADI).
   Üç zeminin alfası da çok düşüktü (.14/.16/.14) → KRİTİK, normalden ayrışmıyordu; kullanıcı SAYIYI okumadan
   kademeyi anlayamıyordu. Yeni denge: normal DAHA GERİ · uyarı fark edilir ama alarm değil · kritik BELİRGİN.
   ⚠ SCOPE: `.stk-age-ok` PAYLAŞIMLI (model yılı rozeti de kullanıyor, app.html:9777) → nötr kademeye
   DOKUNULMADI; yalnız amber/red güçlendirildi. Model yılı rozetinin computed style'ı DEĞİŞMEZ (ölçüldü). */
.stk-age-ok{background:rgba(90,100,114,.14);color:var(--muted)}
/*  UYARI: zemin alfası .16 → .30 (fark edilir ama alarm değil) · ön plan TOKEN (--amber) — sabit renk YOK,
    tema değişince birlikte döner. KRİTİK: tint DEĞİL DOLU zemin (--warn) + --surface yazı → tek bakışta
    ayrışır ve TEMA GÜVENLİ (koyu temada --warn açılır, --surface koyulaşır → kontrast korunur; sabit #fff
    koyu temada 2.6:1'e düşerdi). ⛔ Rozet boyutu/punto/ağırlık/padding/radius/konum DEĞİŞMEDİ (ölçüldü). */
/*  B1a (13 Ağu · D1a ONAYLI) — UYARI kademesi ARTIK GÜÇLENDİ. Önceki tur burada DURMUŞTU çünkü zemin ile
    yazı AYNI HUE: alfayı yükseltmek metin kontrastını DÜŞÜRÜYORDU (.16→3.64 · .22→3.48 · .30→3.16 ölçüldü)
    ve daha koyu bir amber token ailesinde YOKTU → "TOKEN KARARI, Emir'e sorulur" notu bırakılmıştı.
    Emir onayladı → `--amber-strong` (zemin) + `--amber-ink` (yazı) AÇILDI: ikisi AYRI değiştiği için zemin
    güçlenirken kontrast DÜŞMÜYOR, ARTIYOR. ÖLÇÜM: 3.64 → **6.41:1** (koyu temada 6.49:1).
    ⛔ Sabit hex YOK — her iki kademe de TOKEN (tema değişince birlikte döner).
    ⛔ Eşikler/sınıflar/boyut/konum DEĞİŞMEDİ · `STOK_YAS_ESIK` TEK KAYNAK'a DOKUNULMADI.
    Üçlü ritim korunuyor: tint(nötr) → GÜÇLÜ tint(amber) → DOLU(kırmızı). */
.stk-age-amber{background:var(--amber-strong);color:var(--amber-ink)}
.stk-age-red{background:var(--warn,#c23636);color:var(--surface,#fff)}
.stk-b360.stk-b360-shift{left:auto;right:9px;top:auto;bottom:9px}   /* yaş çipi sol üstü aldı → 360 rozeti sağ alta kayar (çakışma yok) */
/* Kart alt KİMLİK satırı: solda çıplak ekipman no · sağda şasi kuyruğu (tıkla → TAM VIN panoya). Teslim penceresi/tarih kartta YAZILMAZ. */
.stk-idrow{display:flex;justify-content:space-between;gap:8px;align-items:center;margin-top:6px;font-size:12px;font-weight:400;font-variant-numeric:tabular-nums;letter-spacing:.02em;color:var(--muted)}
.stk-idrow .stk-vin{cursor:copy;color:var(--fg)}
/* B3 (13 Ağu · D3 onaylı) — STOK DETAY HERO'DA TAM ŞASİ. Kimlik KISALTILMAZ; okunaklılık KIRPMAYLA değil
   TİPOGRAFİYLE korunur: kendi SATIRINDA · `--mono` (rakam/harf karışmaz) · hafif harf aralığı · `break-all`
   (dar sütunda taşmadan sarar — ellipsis YOK, çünkü ellipsis yine kırpmaktır). */
.stok2-sasi{display:block;margin-top:5px;line-height:1.5}
.stok2-sasi-tam{font-family:var(--mono);font-weight:600;letter-spacing:.04em;word-break:break-all;color:var(--fg)}
/* A1 (15 Ağu · Emir · canlı) — ⚠ B4'ün "küçük ve kenarda" kararı GERİ ALINDI. O hâl (opacity .72 +
   sağa itilmiş, açıklamasız) ekranda KAYBOLMUŞ gibi okunuyordu: Emir'in canlı bulgusu "sunuma geçince
   kayboluyor" tam olarak bunu tarif ediyor. Kutu artık danışmandaki gibi TAM GÖRÜNÜR (soluklaştırma YOK).
   ⛔ Sınır aynen sürer: bu kutu yalnız SERBEST önizlemedir; tanımlı indirim/kırılım/marj tavanı/son
   tanımlayan sunum PAYLOAD'ında hiç yoktur (sunucu allowlist'i — istemcide gizleme değil). */
.stok2-sunum-ind{font-size:12.5px}
.stk-idrow .stk-vin:hover{color:var(--accent)}
/* Plaka (TEK KAYNAK vehicles.plaka) — ekipman ile şasi arası; yoksa hiç basılmaz. */
.stk-idrow .stk-plaka{color:var(--fg);letter-spacing:.02em}
/* Görsel yükleme shimmer — YÜKLENMEDEN önce placeholder (foto render yolu DEĞİŞMEZ; yalnız yükleme-öncesi). */
.stk-shimmer{position:absolute;inset:0;background:linear-gradient(100deg,var(--surface-2) 40%,rgba(255,255,255,.55) 50%,var(--surface-2) 60%);background-size:200% 100%;animation:stkSh 1.2s infinite;z-index:1}
@keyframes stkSh{to{background-position:-200% 0}}
.stk-cover.stk-cover-ready{animation:stkFade .25s ease}
@keyframes stkFade{from{opacity:.3}to{opacity:1}}
/* Detay redesign: TEK gizlilik etiketi "MÜŞTERİYE KAPALI" (danışman kutusu + lojistik + iç notlar) — sunum modu hepsini gizler. */
.kapali{display:inline-block;font-size:9.5px;font-weight:700;letter-spacing:.05em;color:var(--amber,#a76a12);background:rgba(167,106,18,.12);padding:2px 8px;border-radius:5px;vertical-align:1px}
/* Detay AÇILIŞ İSKELETİ ("Hesaplanıyor…" yerine) — başlık/kimlik ilk gelir hissi; sayfa hiç "boş" durmaz. */
.stk-skel{display:flex;gap:16px;align-items:flex-start;margin-top:10px;flex-wrap:wrap}
.stk-skel-box{border-radius:8px;background:var(--surface-2);position:relative;overflow:hidden}
.stk-cb{padding:14px 15px 15px}   /* K225: sıkışıklık hissini azalt (ölçülü · 12/14→14/15) — bilgi/satır sayısı AYNI */
.stk-cb .stk-m{font-size:16px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stk-cb .stk-v{font-size:12px;font-weight:500;color:var(--muted);margin:3px 0 9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stk-cb .stk-pr{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:3px}   /* K225: fiyat renk/attrs'ten hafif ayrışır · K278 T2-KRİTİK FİNANSAL: 16/700 (fiyat 600 DEĞİL — para 700 istisnası) */
.stk-cb .stk-pr small{font-size:12px;color:var(--muted);font-weight:400}
.stk-cb .stk-pr .stk-tk{font-size:13.5px;color:var(--ok,#16a34a);font-weight:600;margin-left:5px}
.stk-cb .stk-tesl{font-size:12px;color:var(--muted);margin-top:3px;font-variant-numeric:tabular-nums;letter-spacing:.02em}
.stk-tag{display:inline-block;font-size:12px;padding:1px 7px;border-radius:6px;background:var(--surface-2);color:var(--fg);margin-right:5px}
.stk-marj{color:var(--accent);font-size:12px;margin-left:4px}
.stk-specs{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:14px 0}
.stk-spec{background:var(--surface);border:1px solid var(--line);border-radius:11px;padding:10px 13px}
.stk-spec .k{font-size:12px;font-weight:600;letter-spacing:.5px;color:var(--muted);text-transform:uppercase}
.stk-spec .val{font-size:16px;font-weight:600;margin-top:2px}
.stk-cta{display:flex;gap:8px;margin-top:14px;flex-wrap:wrap}
@media(max-width:560px){.stk-specs{grid-template-columns:repeat(2,1fr)}}
/* İLAN DETAY — bmwnibul HERO: SOL 360 viewer · SAĞ kampanya+kimlik+3 senaryo+takas. "fiyat sonra görsel" dağınıklığı biter. */
/* HERO: SOL 360 minmax(0,1.35fr) · SAĞ bilgi minmax(360px,1fr) — sağ kolon 360px ALTINA düşmez (başlık kırılmasın · asıl sorun buydu). */
.stk-hero{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(360px,1fr);gap:0;background:var(--surface);border:1px solid var(--line);border-radius:16px;overflow:hidden;margin-top:8px}
/* Stok detay açıkken içerik alanını genişlet (bmwnibul geniş düzen · sağda büyük boşluk kalmasın). */
.stk-hero-1col{grid-template-columns:1fr}
.stk-hero-media{position:relative;overflow:hidden;min-width:0;border-right:1px solid var(--line);padding:16px}
.stk-hero-media>.card{position:relative;z-index:1;border:0;margin:0;border-radius:0;padding:0;background:transparent}
/* SAHNE (paylaşım kartı v4 dili · 07 Ağu · Emir "detay sayfasında da böyle yapalım") — hero medya arka planı. ⛔ YENİ RENK
   İCAT YOK: spot/vurgu mevcut --accent/--ok token'larından color-mix ile saydam türetilir (tema otomatik) · gölge her temada
   siyah rgba (--ink DEĞİL: koyu temada --ink AÇIKtır, ters etki yapar). pointer-events:none → viewer'a karışmaz. ⚠ COSY kareleri
   SAYDAM DEĞİL + viewer kendi opak radyalini basar → sahne fiilen padding'de yumuşak ÇERÇEVE HALESİ olarak görünür (dürüst). */
.stk-scene-glow{position:absolute;inset:-15%;pointer-events:none;background:radial-gradient(ellipse 62% 55% at 68% 20%,color-mix(in srgb,var(--accent) 38%,transparent),color-mix(in srgb,var(--accent) 12%,transparent) 45%,transparent 72%)}
.stk-scene-glow2{position:absolute;inset:-15%;pointer-events:none;background:radial-gradient(ellipse 45% 40% at 16% 84%,color-mix(in srgb,var(--ok) 9%,transparent),transparent 68%)}
.stk-scene-floor{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 55% 16% at 50% 94%,rgba(0,0,0,.28),transparent 72%)}
.stk-scene-vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 118% 100% at 50% 45%,transparent 62%,rgba(0,0,0,.05) 100%)}
/* Koyu tema: gölge/vinyet belirginleşir — HEM sistem-karanlık (data-theme yoksa) HEM açık seçim (data-theme=dark). */
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .stk-scene-floor{background:radial-gradient(ellipse 55% 16% at 50% 94%,rgba(0,0,0,.55),transparent 72%)}
  :root:not([data-theme="light"]) .stk-scene-vignette{background:radial-gradient(ellipse 118% 100% at 50% 45%,transparent 58%,rgba(0,0,0,.35) 100%)}
}
:root[data-theme="dark"] .stk-scene-floor{background:radial-gradient(ellipse 55% 16% at 50% 94%,rgba(0,0,0,.55),transparent 72%)}
:root[data-theme="dark"] .stk-scene-vignette{background:radial-gradient(ellipse 118% 100% at 50% 45%,transparent 58%,rgba(0,0,0,.35) 100%)}
.stk-hero-info{padding:18px 20px;display:flex;flex-direction:column;gap:10px;min-width:0}
.stk-camp{align-self:flex-start;font-size:12px;font-weight:600;background:#eef4ff;color:#1b44b0;border:1px solid #dbe4ff;padding:4px 11px;border-radius:8px}
/* Paylaşım kartı tema toggle (K224 v3 — Koyu/Açık; danışman paylaşmadan seçer) */
.stk-tema-btn{padding:4px 12px;border-radius:16px}
.stk-tema-btn.active{background:var(--ink);color:#fff;border-color:var(--ink)}
/* SUNUM: eski SABİT açık radyal (#fff→#eef1f5) KALDIRILDI (07 Ağu) — koyu temada beyaz kutu yanlışını da düzeltir. Artık
   sunum modu da danışman moduyla AYNI token-tabanlı sahneyi kullanır (yukarıdaki .stk-scene-* katmanları · tema otomatik). */
@media(max-width:820px){.stk-hero{grid-template-columns:1fr}.stk-hero-media{border-right:none;border-bottom:1px solid var(--line)}}
/* HAT 4 — 🔑 Anahtar teslim · Tescil dahil şeridi (üç senaryonun altında; hepsi tescil dahil). */
.stok2-turnkey{font-size:12px;font-weight:400;color:var(--muted);background:var(--surface-2);border:1px solid var(--line);
  border-radius:8px;padding:6px 10px;margin-bottom:8px;text-align:center}
.stok2-back{display:inline-block;font-size:13.5px;font-weight:600;color:var(--accent);text-decoration:none;margin-bottom:10px}
.stok2-back:hover{text-decoration:underline}
.stok2-detay{max-width:1240px}   /* GENİŞ hero (bmwnibul): sağda boşluk kalmasın · dar ekranda responsive */
.stok2-kimlik{display:flex;align-items:flex-start;gap:10px;margin-bottom:10px}
.stok2-scenler{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.stok2-scen{flex:1 1 130px;min-width:120px;border:1px solid var(--line);border-radius:9px;padding:8px 10px;background:var(--surface-2);cursor:pointer;transition:border-color .12s,background .12s}
.stok2-scen:hover{border-color:var(--accent)}
/* K227: SEÇİLİ durumu (border+bg+✓) EN AVANTAJLI rozetinden AYRI kavram — ikisi aynı kartta üst üste binebilir. */
.stok2-scen.sel{border-color:var(--accent);background:var(--accent-soft)}
.stok2-scen.sel .stok2-scen-p{color:var(--accent)}
.stok2-scen-chk{position:absolute;top:7px;right:7px;width:15px;height:15px;border-radius:50%;border:2px solid var(--line-2);box-sizing:border-box;display:flex;align-items:center;justify-content:center}
.stok2-scen.sel .stok2-scen-chk{border-color:var(--accent);background:var(--accent)}
.stok2-scen.sel .stok2-scen-chk::after{content:'';width:4px;height:7px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg) translate(-.5px,-1px)}
.stok2-scen-h{font-size:12px;color:var(--muted);font-weight:600}
.stok2-scen-p{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;margin:2px 0}
.stok2-anahtar .meth{color:var(--accent);font-weight:700}
/* K228: İçe Aktarma HUB — tek yüzey kaynak seçici (kart ızgarası + rozetler) */
.imp-grp{margin-bottom:14px}
.imp-grp-h{font-size:12px;font-weight:700;letter-spacing:.03em;color:var(--muted);margin-bottom:6px}
.imp-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:8px}
.imp-card{text-align:left;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:var(--surface);cursor:pointer;transition:border-color .12s,box-shadow .12s;display:flex;flex-direction:column;gap:4px}
.imp-card:hover{border-color:var(--accent);box-shadow:0 4px 14px rgba(0,0,0,.06)}
.imp-card-t{font-size:14.5px;font-weight:700;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
/* .imp-card-d (kart alt açıklaması) KALDIRILDI — kartlar artık yalnız başlık + rozet taşıyor; kuralın son
   kullanıcısı da gitti (grep: sıfır). Yük taşıyan üç uyarı rozete geçti (imp-b-warn / imp-b-ayri). */
.imp-badge{font-size:9.5px;font-weight:700;padding:1px 7px;border-radius:999px;white-space:nowrap}
.imp-b-pii{background:var(--warn-soft,rgba(194,54,54,.12));color:var(--warn,#c23636)}
/* DİKKAT tonu (amber) — "tarih YAZAR": bir hata değil, yazma KAPSAMI uyarısı (doktrin: kırmızı = aksiyon al,
   amber = dikkat). PII rozetinin kırmızısıyla karışmasın diye ayrı sınıf; mekanizma (.imp-badge) AYNI. */
.imp-b-warn{background:var(--amber-soft);color:var(--amber)}
.imp-b-tpl{background:var(--accent-soft);color:var(--accent)}
.imp-b-ayri{background:var(--surface-2);color:var(--muted)}
@media(max-width:640px){.imp-cards{grid-template-columns:1fr}}
/* K229: nav görsel bölüm etiketi (OTOMOBİLLER · gerçek katlanır menü değil) + havuz kartı ek bilgi (kalem/toplam/puan/not) */
.nav-section{font-size:12px;font-weight:600;letter-spacing:.08em;color:var(--muted);padding:12px 14px 4px;text-transform:uppercase;opacity:.75}
/* K242 — İK WORKSPACE girişi (domain) + "Ana operasyona dön" + ince ayraç. Sidebar diliyle uyumlu, SAKİN (dev hero DEĞİL ·
   spec madde 7/10) — normal item'dan bir miktar ayrışır ("başka çalışma alanı" hissi) ama bağırmaz. */
.nav-rule{height:1px;background:var(--sidebar-line);margin:10px 8px}
/* K252 FAZ1: gelecekteki faz kalemi — soluk + etiket + tıklanamaz (İK mockup .soon deseni). */
.nav-soon{opacity:.45;cursor:default}
.nav-tag{margin-left:auto;font-size:12px;font-weight:700;letter-spacing:.04em;background:rgba(255,255,255,.08);padding:2px 6px;border-radius:6px}
.nav-domain{width:100%;display:flex;align-items:center;gap:11px;padding:11px 12px;margin-top:2px;border-radius:9px;cursor:pointer;background:rgba(255,255,255,.03);border:1px solid var(--sidebar-line);color:var(--sidebar-ink);font:inherit;font-size:14.5px;font-weight:600;text-align:left}
.nav-domain:hover{background:rgba(255,255,255,.06)}
.nav-domain .nav-domain-lbl{flex:1}
.nav-domain .nav-domain-caret{color:var(--sidebar-muted);font-size:16px;line-height:1}
.nav-domain .ic{width:18px;height:18px;flex:none;opacity:.85;text-align:center}
.nav-back{width:100%;display:flex;align-items:center;gap:10px;padding:9px 12px;margin-bottom:4px;border-radius:9px;cursor:pointer;background:transparent;border:0;color:var(--sidebar-muted);font:inherit;font-size:14px;font-weight:600;text-align:left}
.nav-back:hover{background:rgba(255,255,255,.05);color:var(--sidebar-ink)}
.nav-back .ic{width:18px;flex:none;font-size:16px;text-align:center}
.hv-kalemler{display:flex;flex-wrap:wrap;gap:4px;margin:8px 0 6px}
.hv-kalem{font-size:10.5px;font-weight:600;background:var(--surface-2);color:var(--ink,#14181f);border:1px solid var(--line);padding:2px 8px;border-radius:999px;white-space:nowrap}
.hv-toplam{font-size:13px;font-weight:700;margin-top:2px}
.hv-toplam b{color:var(--accent);font-variant-numeric:tabular-nums}
.hv-puan{font-size:11.5px;color:var(--muted);margin-top:4px}
/* K298 → K304: Dış renk · İç renk · Paket (tek satır · üçü de boşsa satır yok). Swatch noktaları .hw-swatch (REUSE). */
.hv-renk{font-size:11.5px;margin-top:2px;color:var(--muted);display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.hv-not{font-size:12px;font-weight:600;color:var(--amber,#a76a12);background:rgba(167,106,18,.10);border:1px solid rgba(167,106,18,.22);border-radius:6px;padding:4px 8px;margin-top:6px;line-height:1.35}
/* K244 — havuz FİYAT bloğu (Liste/İndirimli/Tescil ham+türetilmiş · Anahtar Teslim en vurgulu). Fiyatsız → dürüst boş. */
.hv-fiyat{margin-top:8px;padding-top:8px;border-top:1px solid var(--line);display:flex;flex-direction:column;gap:2px}
.hv-fr{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;color:var(--muted)}
.hv-fr b{color:var(--ink);font-weight:600;font-variant-numeric:tabular-nums}
.hv-fr-key{margin-top:3px;padding-top:5px;border-top:1px dashed var(--line);font-size:13px;color:var(--ink);font-weight:700}
.hv-fr-key b{color:var(--accent);font-size:14px}
.hv-fiyat-bos{margin-top:8px;padding-top:8px;border-top:1px solid var(--line);font-size:11.5px;font-style:italic}
/* K245 — ŞUBE KIYASI (bayi roll-up + sıralı şube kartları). Renkler durumdan (inline) · çubuk sm-* diliyle uyumlu. */
.cmp-hero{display:flex;align-items:center;gap:12px;margin:4px 0}
.cmp-hero-num{font-size:26px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}
.cmp-hero-den{font-size:16px;font-weight:600;color:var(--muted)}
.cmp-hero-pct{font-size:14px;font-weight:600;color:var(--muted)}
.cmp-chip{display:inline-flex;align-items:center;font-size:11.5px;font-weight:700;border:1px solid;border-radius:999px;padding:1px 9px;white-space:nowrap}
.cmp-bar{position:relative;height:8px;background:var(--surface-2);border-radius:5px;margin:8px 0 2px}
.cmp-bar>span{position:absolute;left:0;top:0;bottom:0;border-radius:5px}
.cmp-tick{position:absolute;top:-2px;bottom:-2px;width:2px;background:var(--ink)}
.cmp-alert{font-size:13px;font-weight:700;margin-top:8px;line-height:1.4}
.cmp-list{display:flex;flex-direction:column;gap:10px;margin-top:14px}
.cmp-branch{display:flex;align-items:flex-start;gap:12px}
.cmp-rank{flex:none;width:26px;height:26px;border-radius:50%;background:var(--surface-2);color:var(--muted);font-weight:700;font-size:13.5px;display:flex;align-items:center;justify-content:center}
.cmp-bmain{flex:1;min-width:0}
.cmp-bname{font-size:14px;font-weight:700;color:var(--ink)}
.cmp-bnums{font-size:12px;margin-top:1px}
.cmp-hukum{font-size:12px;font-weight:600;margin-top:3px}
.cmp-bright{flex:none;display:flex;flex-direction:column;align-items:flex-end;gap:5px;min-width:130px}
.cmp-bpct{font-size:14px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}
@media(max-width:640px){.cmp-branch{flex-wrap:wrap}.cmp-bright{min-width:0;width:100%;flex-direction:row;justify-content:space-between;align-items:center;margin-top:6px}}
.stok2-takasav{border-radius:8px;padding:7px 11px;font-weight:600;font-size:13.5px;margin-bottom:8px}
/* A1: pozitif → yeşil (takas avantajlı) · nötr → gri (nakit daha uygun ama takas fiyatı yine görünür). */
.stok2-takasav.pos{background:color-mix(in srgb,var(--ok,#16a34a) 10%,transparent);border:1px solid color-mix(in srgb,var(--ok,#16a34a) 30%,transparent);color:var(--ok,#15803d)}
.stok2-takasav.neu{background:var(--surface-2);border:1px solid var(--line);color:var(--muted)}
.stok2-sec{margin-bottom:8px}
.stok2-sec-h{font-size:12px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.03em;margin-bottom:4px}
.stok2-anahtar{font-size:13.5px;padding:6px 0;border-top:1px dashed var(--line);margin-top:2px}
/* BMW proforma "Fiyat Bilgileri" kırılımı — Genel Toplam → Tescil Masrafları → Azami / İndirimli Azami Anahtar Teslim. */
.stok2-fiyatbilgi{margin-top:6px}
.stok2-fiyatbilgi .stok2-anahtar{display:flex;justify-content:space-between;gap:12px;border-top:0;padding:3px 0}
.stok2-bmw-strong b{font-size:16px}
.stok2-bmw-strong{font-weight:600}
/* Yalnız danışman bloğu — SUNUM MODUNDA sunucu bu alanları HİÇ göndermez → blok çizilmez (DOM'da bile yok). */
.stok2-dan{margin-top:10px;padding:10px 11px;border:1px solid var(--amber,#d97706);border-radius:9px;
  background:var(--amber-soft,rgba(217,119,6,.07))}
.stok2-dan-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px 14px;font-size:13.5px;margin-bottom:6px}
.stok2-dan-line{font-size:13.5px;margin-top:4px}
/* TANIMLI İNDİRİMLER (mockup birebir) — iki sabit kaynak listesi + toplam + ekleme formu + boş durum. */
.stok2-tanim{margin-top:14px;border-top:1px dashed #DEC9A0;padding-top:12px}
.stok2-tanim-h{font-size:12px;font-weight:600;letter-spacing:.07em;color:var(--muted);margin-bottom:8px}
.stok2-trow{display:grid;grid-template-columns:190px 1fr 250px auto;gap:12px;align-items:center;padding:8px 10px;background:rgba(255,255,255,.65);border:1px solid #EAD9B8;border-radius:10px;margin-bottom:6px}
.stok2-tr-kaynak{font-size:12px;font-weight:700;letter-spacing:.05em;color:var(--ink-soft);background:var(--surface-2);border-radius:6px;padding:3px 9px;text-align:center;white-space:nowrap}
.stok2-tr-deger{font-size:14.5px}
.stok2-tr-not{color:var(--muted);font-size:13.5px}
.stok2-tr-son{font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.stok2-tr-acts{display:flex;gap:6px}
.stok2-tanim-toplam{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:9px 10px;margin-top:4px;font-size:14.5px}
.stok2-tanim-pay{color:var(--accent);font-weight:700}
.stok2-tanim-bos{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:14.5px;padding:4px 0}
.stok2-ekle{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:10px;padding:10px;border:1px dashed var(--line-2);border-radius:10px;font-size:13.5px;background:rgba(255,255,255,.4)}
.stok2-ekle input{font:inherit;font-size:13.5px;padding:6px 9px;border:1px solid var(--line-2);border-radius:8px;background:var(--surface)}
.stok2-ekle-puan{width:84px}
.stok2-ekle-not{width:220px;max-width:100%}
.stok2-yalniz-yon{font-size:12px;font-weight:700;letter-spacing:.03em;padding:2px 9px;border-radius:999px;color:var(--muted);background:var(--surface-2)}
.stok2-hedef-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
/* KULLANMA bölümü başlığı — tanımlama (yukarı) ile canlı deneme (aşağı) görsel AYRIMI (Emir: karışıyordu). */
.stok2-kullan-h{margin-top:14px;border-top:1px dashed #DEC9A0;padding-top:12px;font-size:12px;font-weight:600;letter-spacing:.07em;color:var(--muted)}
.stok2-kullan-h + .stok2-dan-line{margin-top:8px}
@media(max-width:640px){.stok2-dan-grid{grid-template-columns:1fr}
  .stok2-trow{grid-template-columns:1fr auto;gap:6px 10px}.stok2-tr-son{grid-column:1/-1;order:3}.stok2-tr-acts{grid-column:2;justify-self:end}
  .stok2-ekle-not{width:100%}}
/* SATTIĞIM OTOMOBİLLER (Görev A/B, 05 Ağu 2026) — modal → sayfa-içi görünüm (Stok'un .stok2-back reuse eder).
   Kart hiyerarşisi: model BİRİNCİL/koyu, VIN İKİNCİL/mono/soluk — sevkiyat listesiyle TUTARLI. */
.mv-page{max-width:900px}
.mv-nav{margin-bottom:6px}
.mv-pagehead{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap}
.mv-h1{font-size:24px;margin:0 0 3px;font-weight:700;letter-spacing:-.01em}   /* v5.4 (K219) görsel sıklık: 20→22 */
.mv-sub{font-size:13.5px;color:var(--muted)}   /* v5.4: 12.5→13 */
/* Kredi Yetkilisi (Faz B · K205) — branch-scope salt-görüntüleme uyarı şeridi (ekran amacını açıkça yazar). */
.mv-scope-note{font-size:12px;color:var(--amber);background:var(--amber-soft);border:1px solid var(--amber-soft);border-radius:9px;padding:8px 12px;margin-bottom:10px;font-weight:600}
/* K207 — Kart "İşlemler" menüsü (op talepleri: octet iade · boşa al · isim değişikliği) */
.mvop{position:relative;display:inline-block}
.mvop-menu{position:absolute;left:0;top:calc(100% + 4px);z-index:40;background:var(--surface);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 30px rgba(10,20,40,.14);min-width:210px;padding:5px}
.mvop-item{padding:8px 12px;font-size:13.5px;font-weight:600;color:var(--ink);border-radius:7px;cursor:pointer;white-space:nowrap}
.mvop-item:hover{background:var(--surface-2)}
.mvop-sep{height:1px;background:var(--surface-2);margin:4px 6px}
/* Danışman filtresi (yönetici) — gömülü küçük <select> değil, belirgin etiketli kontrol (mockup .advfilter). */
.mv-advfilter{display:flex;align-items:center;gap:9px;background:var(--surface);border:1px solid var(--line);border-radius:11px;padding:7px 8px 7px 14px}
.mv-advfilter-lbl{font-size:12px;letter-spacing:.04em;color:var(--muted);font-weight:700;white-space:nowrap}
.mv-advfilter select{border:1px solid var(--line);background:var(--surface-2);border-radius:8px;padding:8px 12px;font-size:14.5px;font-weight:700;color:var(--fg);font-family:inherit;cursor:pointer;min-width:170px}   /* v5.4: çerçeve eklendi (belirgin) · 13→13.5 */
/* Sekmeler — v5.1: ALT ÇİZGİLİ stil (pill DEĞİL · mockup v5 .tabs). Yapı/davranış AYNI, yalnız görünüm. */
.mv-tabs{display:flex;gap:2px;margin:12px 0 12px;flex-wrap:wrap;border-bottom:1px solid var(--line)}
.mv-tab{background:none;border:none;border-bottom:2px solid transparent;border-radius:0;padding:9px 15px;font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;user-select:none}   /* v5.4: 12.5→13.5 · padding 8/13→9/15 */
.mv-tab-n{color:var(--muted);font-weight:700}
.mv-tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.mv-tab.active .mv-tab-n{color:var(--accent)}
.mv-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media(max-width:760px){.mv-grid{grid-template-columns:1fr}}
.vcard{background:var(--surface);border:1px solid var(--line);border-radius:13px;padding:14px 16px}
.vtop{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:3px}
.vmodel{font-size:14.5px;font-weight:700;color:var(--fg)}
.vvin{font-variant-numeric:tabular-nums;letter-spacing:.02em;font-size:12px;color:var(--muted);margin-top:2px}
.vdate{font-size:12px;color:var(--muted);margin:7px 0 9px}
.vchips{display:flex;flex-wrap:wrap;gap:6px}
.vchip{font-size:13.5px;font-weight:500;color:var(--muted);background:var(--surface-2);border:1px solid var(--line);border-radius:6px;padding:3px 8px}
/* KİMLİK SATIRI (Emir · 10 Ağu · mockup satislar-arac-bilgisi): aracın DEĞİŞMEZ kimliği (ekipman · renk · döşeme).
   Üstteki .vchip'ler operasyonel DURUM taşır (karar değiştirir, renkli); kimlik bir durum DEĞİL → pill/çerçeve/zemin
   YOK, sessiz tek satır. Etiket ("Ekipman:"/"Renk:") YAZILMAZ — değer kendini anlatır. İnce ayraç çizgi iki katmanı
   görsel olarak ayırır. Kimlik gösterimi olduğu için FAZ 3 kuralı geçerli: tabular-nums (ekipman no hizalı). */
/* ⚠ K281 İş3 (Emir · 11 Ağu · BİLİNÇLİ GERİ ALMA, kaza değil): gri zemin K271'de "stilsiz görünüyor"
   şikâyeti üzerine eklenmişti; tipografi K277/K278'de değişince bağlam değişti → zemin/padding/radius KALKTI.
   Satır artık modelin hemen ALTINDA (çiplerin üstünde) duruyor; dikey ritim margin ile korunur (zemin
   giderken kaybolan 6px iç boşluk margin'e taşındı → model↔çip aralığı ÖLÇÜLDÜ, değişmedi). */
.vid-line{margin:6px 0 8px;font-size:12px;color:var(--muted);
  font-variant-numeric:tabular-nums;letter-spacing:.02em;line-height:1.55;display:flex;flex-wrap:wrap;align-items:center;gap:6px}
/* Ekipman = kimlik ANAHTARI (aranır/kopyalanır) → hafif vurgulu; renk/döşeme tanımlayıcı detay → muted kalır.
   ⛔ Satır SARAR (flex-wrap) — dar sütunda kısaltma/ellipsis YOK: yarım kimlik numarası kopyalanamaz (K269 kararı). */
.vid-line b{color:var(--ink-soft);font-weight:600}
.vid-line .vid-sep{color:var(--line-2);font-weight:400}
.vfoot{display:flex;justify-content:flex-start;align-items:center;gap:8px;margin-top:11px}
/* Durum rozeti — kilitli palet: siparis nötr · presold accent · fatura amber · teslim ok · iptal warn (DURUM SÖZLÜĞÜ). */
.st{font-size:12px;font-weight:600;letter-spacing:.02em;padding:4px 9px;border-radius:999px;white-space:nowrap;background:var(--surface-2);color:var(--muted)}
.st.presold{background:var(--accent-soft);color:var(--accent)}
.st.fatura{background:var(--amber-soft);color:var(--amber)}
.st.teslim{background:var(--ok-soft);color:var(--ok)}
.st.iptal{background:var(--warn-soft);color:var(--warn)}
/* Not + Evrak — KATLANMIŞ varsayılan (Görev B: her zaman açık textarea/yükleme "çirkin menü" hissinin kaynağıydı). */
.mv-panel{margin-top:9px}
.mv-panel summary{cursor:pointer;font-size:12px;font-weight:600;color:var(--muted);list-style:none;display:flex;align-items:center;gap:6px;user-select:none}
.mv-panel summary::-webkit-details-marker{display:none}
.mv-panel summary .car{transition:transform .15s;font-size:9px;display:inline-block}   /* K278 §23: aç/kapa oku — metin değil */
.mv-panel[open] summary .car{transform:rotate(90deg)}
.mv-panel .inner{margin-top:9px;padding:11px 12px;background:var(--surface-2);border-radius:9px}
.mv-panel .inner textarea{width:100%;border:1px solid var(--line);border-radius:7px;padding:8px;font-size:12px;font-family:inherit;resize:vertical}
.mv-panel .inner .row2{display:flex;gap:8px;margin-top:7px;align-items:center;flex-wrap:wrap}
/* EK-3 (05 Ağu 2026) — Sevkiyat aynası: kompakt 5-adım mini-ray (talep·teslim_alındı·yolda·williams'ta·teslim_edildi). */
.sevk-ray{display:flex;align-items:center;gap:8px;margin-top:8px}
.sevk-ray-dots{display:flex;align-items:center;gap:3px}
.sevk-ray-dot{width:7px;height:7px;border-radius:50%;background:var(--surface-2);border:1px solid var(--line)}
.sevk-ray-dot.on{background:var(--teal,var(--accent));border-color:transparent}
.sevk-ray-lbl{font-size:10.5px;font-weight:700;color:var(--muted)}
/* İş 6 (05 Ağu 2026) — ŞUBE MESAİ SAATLERİ satırı: masaüstünde TEK SATIR (eskisiyle birebir), dar
   ekranda GERÇEKTEN sarar. ⛔ overflow-x:hidden ile KIRPMA YOK (F/T mobil dersi — erişilemez içerik
   yaratır); gün adı kendi satırına iner, saat girişleri esner. Ölçülen kök: 100px+kapalı+2×130px≈450px. */
.hours-row{display:flex;align-items:center;gap:12px;padding:7px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.hours-row .hr-day{width:100px;font-weight:600;font-size:13px}
.hours-row .hr-closed{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted);white-space:nowrap}
.hours-row .hr-times{display:flex;align-items:center;gap:6px;min-width:0}
.hours-row .hr-times input[type=time]{max-width:130px;min-width:0}
@media (max-width:430px){
  .hours-row .hr-day{width:auto;flex:1 0 100%}   /* gün adı kendi satırına iner → saatlere yer açılır */
}
/* İş 3 EK-2 (05 Ağu 2026) — ÖDEME ŞEKLİ segmented + KREDİ PANELİ (mockup v2 .paysel/.kpanel birebir). */
.paysel{display:flex;gap:4px;margin:9px 0;background:var(--surface-2);border-radius:8px;padding:3px}
.paysel button{flex:1;border:none;background:none;border-radius:6px;padding:6px 4px;font-size:12px;font-weight:700;color:var(--muted);cursor:pointer}
.paysel button.on{background:var(--surface);color:var(--ink);box-shadow:0 1px 3px rgba(10,20,40,.12)}
.kpanel{margin-top:2px;padding:11px 12px;background:var(--teal-soft,var(--accent-soft));border-radius:9px;border:1px solid var(--line)}
.kpanel .khead{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:9px}
.kpanel .khead b{font-size:11.5px;color:var(--teal,var(--accent));letter-spacing:.02em}
.kdurum{font-size:10.5px;font-weight:700;padding:3px 9px;border-radius:999px}
.kdurum.basvurulmadi{background:var(--surface-3);color:var(--muted)}
.kdurum.basvuruldu{background:var(--amber-soft);color:var(--amber)}
.kdurum.onaylandi{background:var(--ok-soft);color:var(--ok)}
.kdurum.reddedildi{background:var(--warn-soft);color:var(--warn)}
.kpanel .kgrid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:9px}
.kpanel .kfield label{display:block;font-size:10px;color:var(--muted);font-weight:700;margin-bottom:3px}
.kpanel .kfield input,.kpanel .kfield select{width:100%;border:1px solid var(--line);border-radius:6px;padding:6px 8px;font-size:12px;font-family:inherit;background:var(--surface)}
.kpanel .knote{font-size:10.5px;color:var(--muted);margin-top:2px}
.kpanel .row2{display:flex;gap:8px;margin-top:7px;align-items:center;flex-wrap:wrap}
/* ====================================================================
   v4 (06 Ağu 2026, K199) — HAT GÖRÜNÜMÜ: kart gridi yerine TAM GENİŞLİK satır;
   zaman çizelgesi ("omurga") satırın merkezinde. Mockup: sattigim-otomobiller-v4.
   ⛔ HARDCODE RENK YOK — hepsi mevcut tema değişkenleri (İş 6: yeni toggle YAZILMAZ,
   topbar'daki data-theme mekanizması olduğu gibi geçerli, bileşenler ona UYAR).
   ==================================================================== */
.mv-page.v4{max-width:1060px}
.mv-grid.hat{display:block}                      /* grid → dikey akan satırlar */
.mv-grid.hat .vcard{margin-bottom:12px;padding:16px 18px;border-radius:14px}
/* K203 — "Önceki aylardan devir" katlanabilir grubu (eski faturalı-teslimatsız · GİZLENMEZ, güncelden AYRI). */
.mv-eski{margin-top:6px;border-top:1px dashed var(--line);padding-top:10px}
.mv-eski>summary{cursor:pointer;font-size:13.5px;font-weight:700;color:var(--muted);list-style:none;user-select:none;padding:4px 0}
.mv-eski>summary::-webkit-details-marker{display:none}
.mv-eski>summary::before{content:'▸';display:inline-block;margin-right:6px;color:var(--muted)}
.mv-eski[open]>summary::before{content:'▾'}
.mv-eski-hint{display:block;font-weight:400;font-size:12px;color:var(--muted);margin:2px 0 0 18px}
.mv-eski-inner{margin-top:10px}
.mv-rtop{display:flex;justify-content:space-between;gap:14px;align-items:flex-start;flex-wrap:wrap}
.mv-rbadges{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
/* OMURGA — 5 adım SIRA KİLİTLİ: Sipariş → Takas teslim → Hesap kapama → Fatura → Teslimat */
/* K281 İş4 — KATMAN: bağlantı çizgisi HER DURUMDA noktaların ALTINDA kalır.
   KÖK NEDEN (ölçümle doğrulandı): `.sp` position:relative + z-index:auto → yığın bağlamı KURMAZ; ama
   `.sp.off{opacity:.35}` KURAR. O yüzden `off` bir adımın `.dot{z-index:1}`'i KENDİ `.sp`'sine hapsolur ve
   SONRAKİ kardeşin `::before`'u (left:-50% ile önceki noktanın tam üstünden geçer) DOM sırası gereği onun
   ÜZERİNE boyanır → halka "kesik/kırık" görünür. Emir'in ekran görüntüsündeki durum tam buydu.
   ÇÖZÜM: çizgiyi NEGATİF katmana al (`::before{z-index:-1}`) + negatif katmanı `.spine`'da HAPSET
   (`position:relative;z-index:0` → yığın bağlamı). Böylece çizgi tüm `.sp` kutularının (off dahil) ALTINDA
   kalır; `.spine`'ın kendi zemini olmadığı için çizgi görünürlüğünü KAYBETMEZ (klasik z-index:-1 tuzağı
   burada kapalı — bağlam kartın değil, .spine'ın kendisi). ⛔ Nokta boyutu/renk/durum semantiği DEĞİŞMEDİ. */
.spine{display:flex;align-items:flex-start;margin:16px 0 4px;position:relative;z-index:0}
.spine .sp{flex:1;text-align:center;position:relative;min-width:0}
/* ⚠ ZAMAN ÇİZELGESİ (Emir · 10 Ağu): eski hâlde PLAN noktaları 16px daire üzerinde 3px DASHED kenarlıkla
   çiziliyordu → tırtıklı, "kesik kesik ve anlamsız" görünüyordu. Dashed hiçbir EK bilgi taşımıyordu: plan
   olduğunu zaten RENK (accent) ve altındaki metin ("20.08 plan") söylüyor → gürültüydü, KALKTI (Rozet gürültü
   yapmaz doktrini). Yeni dil, tek eksende okunur: DOLU=gerçekleşti · HALKA=planlandı · SOLUK HALKA=veri yok.
   Bağlantı çizgisi de aynı dili konuşur (tamamlanan segment yeşil, gelecek segment soluk) ve 3px→2px inceldi. */
/* BAĞLANTI ÇİZGİSİ = "oraya nasıl gidiliyor" — hedef adımın DURUMUNU yansıtır. Eskiden yalnız İKİ hâli vardı
   (gri / done yeşil); plan ve late için karşılık HİÇ TANIMLI DEĞİLDİ → nokta mavi/kırmızıyken ona giden yol
   nötr gri kalıyordu (eksik özellik, kesinti değil). Dil: GERÇEKLEŞEN YOL = düz · PLANLANAN YOL = KESİKLİ.
   ⚠ K269'da plan NOKTASINDAN dashed kaldırılmıştı (16px dairede tırtık olup gürültü yapıyordu) — çizgide
   dashed ise ANLAM taşır (henüz yürünmemiş yol), ikisi çelişmez. */
/* K281 İş4 — GEOMETRİ: çizgi artık merkez→merkez DEĞİL, KENAR→KENAR (her iki uçtan nokta yarıçapı kadar
   kısa: 16px nokta → 8px). Yalnız z-index yetmedi (ÖLÇÜLDÜ): `.sp.off` %35 saydam, `.late` noktasının zemini
   `--warn-soft` = rgba(...,.10) → çizgi ALTTA olsa bile saydam noktanın İÇİNDEN görünüyordu ("nokta çizgiyle
   kesik" görüntüsünün ikinci kaynağı). Çizgi hiçbir noktanın altına GİRMEZ → saydamlık artık önemsiz.
   ⛔ Nokta boyutu · renk · `.sp.off` opaklığı · kesikli desen DEĞİŞMEDİ — yalnız çizginin iki ucu kısaldı. */
.spine .sp::before{content:'';position:absolute;top:9px;left:calc(-50% + 8px);width:calc(100% - 16px);height:2px;background:var(--line-2,var(--line));border-radius:2px;z-index:-1}
.spine .sp:first-child::before{display:none}
.spine .sp.done::before{background:var(--ok)}
/* plan/late: KESİKLİ çizgi. ⚠ `border-top:dashed` KULLANILMADI — 2px kalınlıkta tarayıcının kendi dash deseni
   çok sık çıkıp ekranda DÜZ çizgi gibi okunuyordu (gerçek render ile doğrulandı). repeating-linear-gradient
   dash/boşluk uzunluğunu DETERMİNİSTİK verir (7px çizgi + 5px boşluk · tarayıcıdan bağımsız, aynı 2px kalınlık). */
.spine .sp.plan::before{background:repeating-linear-gradient(90deg,var(--accent) 0 7px,transparent 7px 12px)}
.spine .sp.late::before{background:repeating-linear-gradient(90deg,var(--warn) 0 7px,transparent 7px 12px)}
.spine .sp .dot{width:16px;height:16px;border-radius:50%;margin:0 auto 5px;position:relative;z-index:1;background:var(--surface);border:2px solid var(--line-2,var(--line));transition:.15s}
.spine .sp.done .dot{background:var(--ok);border-color:var(--ok)}
/* PLAN: içi boş DÜZ halka + accent (dashed DEĞİL) · hafif accent halesiyle "beklenen an" hissi. */
.spine .sp.plan .dot{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.spine .sp.late .dot{border-color:var(--warn);background:var(--warn-soft);box-shadow:0 0 0 3px var(--warn-soft)}
.spine .sp .l{font-size:12px;font-weight:600;letter-spacing:.06em;color:var(--muted);text-transform:uppercase}
.spine .sp .d{font-size:12px;font-weight:600;margin-top:1px;color:var(--ink)}
.spine .sp.plan .d{color:var(--accent)}
.spine .sp.late .d{color:var(--warn)}
.spine .sp.off{opacity:.35}
@media(max-width:640px){ .spine .sp .l{font-size:8px} .spine .sp .d{font-size:10px} }
/* Tarih planı düzenleyici (katlanmış) */
.mv-dgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}
@media(max-width:640px){ .mv-dgrid{grid-template-columns:1fr} }
.mv-dgrid label{display:block;font-size:12px;color:var(--muted);font-weight:600;letter-spacing:.03em;margin-bottom:3px}
.mv-dgrid input{width:100%;border:1px solid var(--line);border-radius:7px;padding:7px 9px;font-size:12px;font-family:inherit;background:var(--surface);color:var(--ink)}
/* İTHALAT satırı + aşama rayı (Stok'un 0–4 tanımını REUSE eder — ikinci sayaç YOK) */
.impline{display:flex;align-items:center;gap:10px;margin-top:12px;padding:10px 13px;background:var(--surface-2);border:1px solid var(--line);border-radius:10px;flex-wrap:wrap}
.impline b{font-size:10px;letter-spacing:.06em;color:var(--muted)}
.ist{font-size:13.5px;font-weight:500;padding:3px 10px;border-radius:999px}
.ist.yok{background:var(--surface-3,var(--surface));color:var(--muted)}
.ist.talep{background:var(--amber-soft);color:var(--amber)}
.ist.islemde{background:var(--teal-soft,var(--accent-soft));color:var(--teal,var(--accent))}
.ist.tamam{background:var(--ok-soft);color:var(--ok)}
.iray{display:flex;gap:4px;align-items:center;flex:1;min-width:130px}
.iray .seg{flex:1;height:7px;border-radius:4px;background:var(--line)}
.iray .seg.f{background:var(--ok)}
.iray .cap{font-size:10px;font-weight:700;color:var(--muted);white-space:nowrap;margin-left:5px}
/* ZAMAN FİLTRESİ çubuğu */
.timebar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:16px}   /* v5.4: 10→12 dikey pad */
.timebar .lbl{font-size:12px;letter-spacing:.07em;color:var(--muted);font-weight:600}
.timebar select,.timebar input{border:1px solid var(--line-2);background:var(--surface);color:var(--ink);border-radius:8px;padding:6px 10px;font-size:14.5px;font-weight:400;font-family:inherit}   /* v5.4: çizgi belirginleşti (line→line-2) · zemin surface (tarih alanı "gri/belli değil" düzeltmesi) */
.tchip{border:1px solid var(--line);background:none;border-radius:999px;padding:5px 13px;font-size:13.5px;font-weight:600;color:var(--muted);cursor:pointer;font-family:inherit}
.tchip.on{background:var(--accent);border-color:var(--accent);color:#fff}   /* v5.4: solid accent (emsal .btn-primary/.nav-item.on) — seçili çip belirgin */
.tchip.warnc{color:var(--warn)}
.tchip.tealc{color:var(--teal,var(--accent))}
.timebar .latesum{margin-left:auto;font-size:12px;font-weight:700;color:var(--warn)}   /* v5.1: sağda geciken özeti (Geciken çipiyle AYNI türetme) */
/* v5.4 (K219) TARİH ARALIĞI grubu (.drange): beyaz zemin + çerçeve · iki alt-blok (BAŞLANGIÇ/BİTİŞ etiket + çerçevesiz input) + ince ayraç. */
.drange{display:inline-flex;align-items:stretch;background:var(--surface);border:1px solid var(--line-2);border-radius:9px;overflow:hidden}
.drange .df{display:flex;flex-direction:column;justify-content:center;padding:4px 10px;gap:1px}
.drange .dfl{font-size:9px;letter-spacing:.06em;color:var(--muted);font-weight:700}
.drange .df input{border:none;background:transparent;padding:0;font-size:13.5px;font-weight:700;color:var(--ink);font-family:inherit}
.drange .df input:focus{outline:none;box-shadow:none}
.drange .sep{width:1px;background:var(--line-2);align-self:stretch;margin:5px 0}
/* ====================================================================
   v5.1 (07 Ağu 2026) — KOMPAKT SATIR + TIKLA-GENİŞLET (mockup: sattigim-otomobiller-v5).
   Kapalı satır ~54px yalnız KARAR bilgisi (mini çizelge + SIRADAKİ + rozet); satıra tık → detay.
   ⛔ HARDCODE RENK YOK — mevcut tema değişkenleri; iki temada Chromium kontrolü (bekçi).
   ==================================================================== */
.mv-list{background:var(--surface);border:1px solid var(--line);border-radius:13px;overflow:hidden}
.mv-list .vrow{border-top:1px solid var(--surface-2)}
.mv-list .vrow:first-child{border-top:none}
/* v5.4 (K219) ACİLİYET ŞERİDİ (3px sol kenar) — YENİ sinyal İCAT ETMEZ: rowCard'da .next.late (SIRADAKİ gecikti)
   → urg-late (warn) · .oct (octet iade bekliyor) → urg-imp (teal). İkisi de doğruysa urg-late öncelikli. */
.vrow{border-left:3px solid transparent}
.vrow.urg-late{border-left-color:var(--warn)}
.vrow.urg-imp{border-left-color:var(--teal,var(--accent))}
.vhead{display:grid;grid-template-columns:minmax(210px,1.2fr) minmax(220px,1.5fr) auto 30px;gap:12px;align-items:center;padding:12px 16px;cursor:pointer}   /* v5.4: kolonlar+padding büyüdü (görsel sıklık; satır ~54→~64-68px) */
.vhead:hover{background:var(--surface-2)}
.vid{display:flex;align-items:center;gap:10px;min-width:0}   /* v5.4: 9→10 */
.vidtxt{min-width:0}
/* v5.2 (K213) — danışman avatar rozeti (baş harfler · deterministik). */
.avd{flex-shrink:0;width:28px;height:28px;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center}   /* v5.4: 24→28 · 10→11 */
/* K278 ROL ÇATIŞMASI ÇÖZÜMÜ (Emir · 11 Ağu · BLOCKER kararı (b)):
   Spec §9 sol master liste için "Araç adı 16/600" yazıyordu; spec §3 ise T3'ü "araç/entity adı İKİNCİL
   BAĞLAMDA = 14.5/600" diye tanımlıyor. Satışlar sol master listesi İKİNCİL bağlamdır — aracın ODAK sunumu
   SAĞ INSPECTOR'dadır (ana hüküm .dnext-banner .next = 16/600). Dolayısıyla §9'un 16/600'ü SAĞ inspector'da
   uygulanır, sol listede UYGULANMAZ. Bu bir spec SAPMASI değil, §3 ile §9 çatışmasının bağlama göre çözümüdür.
   ⚠ ÖLÇÜM DAYANAĞI: 16px'te marka öneki ZATEN gizliyken bile "X5 xDrive40i M Sport Pro" 178px alanda 11px
   taşıyordu (sıradan bir donanım adı, uç örnek değil). Bekçi kapsamı DARALTILMADI, punto bağlamına döndü. */
.vid .model{font-size:14.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}   /* K233: dar split sütununda model sarmasın → tek satır ellipsis */
.vid .vin{font-variant-numeric:tabular-nums;letter-spacing:.02em;font-size:12px;font-weight:400;color:var(--muted);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}   /* v5.4: 10→11.5 · K232: sarma(break-all)→ellipsis (dar sütunda kelime ortadan bölünmesin) */
/* K232 (K231 madde 8A tamamlandı): danışman adı .vin'in İÇİNDE değil, .vidtxt'in ÜÇÜNCÜ satırı — kendi bloğunda, ellipsis'li. */
.vid .vidtxt .advn{display:block;font-family:var(--sans);font-size:13.5px;font-weight:600;color:var(--ink);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}   /* K249 Görev B: 10.5→11 (bir kademe güçlü · modelden (15px) hâlâ belirgin düşük · öncelik sırası korunur) */
/* v5.2 — detay üstü "Danışman: ad · şube" satırı. */
.advline{font-size:13.5px;color:var(--muted);font-weight:500;margin-bottom:8px}
.advline b{color:var(--ink)}
.vhead .mid{display:flex;align-items:center;gap:10px;min-width:0}
.minitl{display:flex;align-items:center;flex-shrink:0}
.minitl .md{width:9px;height:9px;border-radius:50%;background:var(--surface);border:2px solid var(--line)}
.minitl .md.done{background:var(--ok);border-color:var(--ok)}
/* K284 (Emir · 11 Ağu · ekran görüntüsü "mavi halka düzgün değil, sağ tarafta düzgün"): `border-style:dashed`
   KALKTI. ÖLÇÜM: 9px daire + 2px kesikli kenarlıkta halkanın 360°'sinin **150°'si BOŞ** (%42) → halka tırtıklı/
   kopuk görünüyor; solid olan `done`/`off` 360/360 tam. Bu, K269'un BÜYÜK omurgada (16px nokta) zaten
   kaldırdığı kusurun AYNISI — mini çizelgeye hiç uygulanmamıştı ("sağ taraf düzgün"ün sebebi buydu).
   ⛔ Bilgi KAYBI YOK: plan durumu zaten RENK (accent) + İÇİ BOŞ HALKA ile anlatılıyor (K269 dili:
   DOLU=gerçekleşti · HALKA=planlandı · SOLUK=veri yok); dashed hiçbir ek anlam taşımıyordu. */
.minitl .md.plan{border-color:var(--accent)}
.minitl .md.late{border-color:var(--warn);background:var(--warn-soft)}
/* K285 (Emir · 11 Ağu · onaylı): KAPALI adım (ör. takası olmayan araçta "Takas teslim") artık HALKA DEĞİL,
   MİNİK TİRE. Kök sorun: `off` (uygulanamaz = kalıcı yokluk "—") ile sırası-gelmemiş adım (bekliyor) mini
   çizelgede AYNI görünüyordu — ikisi de soluk gri halka, tek fark opaklık; 9px'te göz ayırt edemiyor. Bu,
   DURUM SÖZLÜĞÜ ihlali ("—" ≠ "bekliyor", biri diğerinin yerine geçemez). Emir: çizgi de belirsiz kalır, TİRE kesin okunur.
   ⛔ SLOT KORUNUR (9px · box-sizing:border-box + yatay padding ile 5px tire ORTALANIR): mini çizelge bir
   İLERLEME CETVELİDİR — bazı satırda 4, bazısında 5 nokta olursa 3. pozisyon her satırda başka şey anlatır,
   satırlar arası kıyas ÖLÜR. Yani halka gider, YERİ gitmez.
   ⚠ BÜYÜK omurgada (.sp.off) halka KALIR — orada ETİKET + "—" zaten yazıyor, belirsizlik yok (Emir "sol tarafta diyorum"). */
.minitl .md.off{width:9px;height:2px;padding:0 2px;border:0;border-radius:1px;background:var(--muted) content-box;opacity:.55}
.minitl .ln{width:12px;height:2px;background:var(--line)}
.minitl .ln.done{background:var(--ok)}
.next{font-size:12px;font-weight:600;padding:4px 11px;border-radius:999px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}   /* v5.4: 10.5→11.5 · padding 3/9→4/11 */
.next.plan{background:var(--accent-soft);color:var(--accent)}
.next.late{background:var(--warn-soft);color:var(--warn)}
.next.none{background:var(--surface-2);color:var(--muted)}
.vhead .rb{display:flex;gap:5px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.pb{font-size:12px;font-weight:600;padding:3px 9px;border-radius:6px;background:var(--accent-soft);border:1px solid var(--accent-soft);color:var(--accent)}   /* v5.4: 9.5→10.5 · padding 2/8→3/9 · radius 5→6 */
/* v5.2 (K213) — "Kredi" rozeti kredi_durum alt-durumu (açmadan triyaj · basvurulmadi=düz accent). */
.pb.k-basvuruldu{background:var(--amber-soft);border-color:var(--amber-soft);color:var(--amber)}
.pb.k-onaylandi{background:var(--ok-soft);border-color:var(--ok-soft);color:var(--ok)}
.pb.k-reddedildi{background:var(--warn-soft);border-color:var(--warn-soft);color:var(--warn)}
.oct,.ithb{font-size:10px;font-weight:700;padding:3px 9px;border-radius:999px;background:var(--amber-soft);color:var(--amber);white-space:nowrap}   /* v5.4: 9.5→10 · padding 2/8→3/9 · K289: .ithb AYNI kuralı paylaşır (yeni değer icat edilmez) */
.vrow .car{color:var(--muted);font-size:12px;text-align:center;transition:transform .15s}
.vrow.open .car{transform:rotate(90deg)}
.vdetail{display:none;background:var(--surface-2);border-top:1px solid var(--surface-2);padding:14px 16px}
.vrow.open .vdetail{display:block}
/* ── K231 MASTER/DETAIL — desktop (≥980px) sol liste + sağ SABİT detay paneli · mobil accordion (setC tek kolon) KORUNUR ── */
/* A0 (13 Ağu) — ⚠ SPEC "bu kural ÖLÜ, kaldır" diyordu; ÖLÇÜM AKSİNİ GÖSTERDİ, kaldırılınca REGRESYON çıktı.
   Eski hâli: `@media(min-width:980px){.mv-page.v4{max-width:1440px}}`. Spec'in gerekçesi "1440 > 1320 (`.main`
   `--app-content-max`) → ulaşılamaz" idi. Doğru ama EKSİK: kuralın İŞLEVİ 1440'a çıkarmak değil, `.mv-page.v4`'ün
   KENDİ 1060px TABANINI (satır 1301) EZMEKTİ. Kaldırınca sayfa masaüstünde 1260 → 1060'a DÜŞTÜ (ölçüldü:
   `verify_split_fit` C her viewport'ta 1060'a çakıldı, süpürme tek taraflı kaldı → assertion kırıldı).
   ÇÖZÜM: kural KALIYOR ama YANILTICI 1440 SAYISI GİDİYOR → `none`. Genişliği artık TEK KAYNAK `.main` belirler
   (`--app-content-max` · K273). Davranış AYNEN korunur, ölü sayı kalmaz.
   ⚠ DERS: "şu sayı erişilemez" ≠ "şu kural etkisiz". Kuralın NE YAPTIĞI ölçülmeden silinmez. */
@media(min-width:980px){ .mv-page.v4{max-width:none} }
.mv-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,40%);gap:18px;align-items:start}   /* K249 Görev A: %63/%37 → ~%60/%40 (sağ panel nefes alır · liste hâlâ verimli) */
/* A0 EMNİYET AĞI — kapı yanılsa bile KIRPMA olmaz. `.mv-listcol` bir KAPSAYICI (container query): genişliği
   `.vhead`'in asgarisinin (634px) altına düşerse rozet kolonu ALT SATIRA SARAR — satır uzar, içerik KAYBOLMAZ.
   ⛔ `overflow-x:hidden` YASAK (F/T iOS taşmasında bir kez denendi, içeriği erişilemez yaptı — HATALAR.md).
   Maskeleme değil SIĞDIRMA. ⛔ `.vhead` track değerleri (220/180/170/28) DEĞİŞMEDİ — D6 kararı geçerli;
   sorun track'lerde değil, kabın tabansızlığındaydı. */
.mv-listcol{min-width:0;container-type:inline-size;container-name:mvlist}
@container mvlist (max-width:633px){
  .mv-split .vhead{grid-template-columns:minmax(0,1.2fr) minmax(0,1.4fr) 28px}
  .mv-split .vhead .rb{grid-column:1 / -1;grid-row:2}
  .mv-split .vhead .car{grid-column:3;grid-row:1}
}
.mv-detail-panel{position:sticky;top:16px;max-height:calc(100vh - 96px);max-height:calc(100dvh - 96px);overflow:auto;background:var(--surface);border:1px solid var(--line);border-radius:13px}
.mv-detail-panel .vdetail{display:block;border-top:none;background:transparent;padding:16px}
.mv-detail-panel .dgrid3{grid-template-columns:1fr}   /* dar panelde kartlar dikey (3-kolon sığmaz) */
.mv-detail-empty{padding:44px 20px;text-align:center;color:var(--muted);font-size:13.5px}
/* K233 İş 2: SIRADAKİ (.next) için daha yatay alan — YALNIZ split-view (≥980px) bağlamında (mobil accordion tam
   genişlik, dokunulmaz). vid kolonu artık ellipsis'li (K232) → daralabilir; pay mid'e (mini çizelge + SIRADAKİ) aktarılır.
   Satır yüksekliği DEĞİŞMEZ (yalnız fr yeniden dengeleme, dikey yığma yok). */
/* D6 (11 Ağu · Emir "sol liste yamuk") — ROZET KOLONU DETERMİNİSTİK. Son track eskiden `auto` idi: genişliği
   O SATIRDAKİ rozet sayısına göre değişiyordu (ölçüm: 59 · 110 · 111 · 171 · 171 px) ve satır genişliği sabit
   olduğu için önündeki iki fr kolon da SATIR SATIR kayıyordu → dikey kolon sınırları yamuk görünüyordu.
   Artık SABİT 170px (ölçülen en geniş gerçek kombinasyon "Kredi · Reddedildi + Nakit + Takas + durum" 171px'e
   kadar çıkıyordu; .rb zaten flex-wrap, taşan rozet ALT SATIRA sarar). Kaç rozet olursa olsun ilk iki kolon
   TÜM satırlarda AYNI genişlikte → hizalar düz.
   ⚠ ESKİ KANIT CÜMLESİ SİLİNDİ (A0 · 13 Ağu): "1440'ta panel dar (≈635px): 635−36−28−170 = 401 ≥ 400 → taşma yok
   (ölçümle doğrulandı)". İKİ sorunu vardı: (a) marj 1 PİKSEL — 1px slack kanıt değil, kıl payı kurtuluştur;
   (b) o 1440 K273'ten beri ERİŞİLEMİYOR (`.main` 1320'de kapanıyor) → tek doğrulama ölü bir genişlikte yapılmıştı.
   YENİDEN ÖLÇÜLDÜ (`test/verify_split_fit.mjs` · gerçek Chromium): viewport {1024·1280·1366·1440·1600·1920} ×
   kenar çubuğu {açık·kapalı} = 12 kombinasyon; her birinde `.vhead` scrollWidth ≤ clientWidth ve sayfa yatay
   kaymıyor. **KALICI KURAL: TEK genişlikte ölçmek ÖLÇMEK DEĞİLDİR; 1px marj bir geçiş notu değildir.** */
.mv-split .vhead{grid-template-columns:minmax(220px,1.2fr) minmax(180px,1.4fr) 170px 28px}   /* K249 Görev C: vid min 180→220 (uzun model adı erken kırpılmasın · ölçüm: model alanı ~158→~178px) */
/* K249 Görev D — SIRADAKİ kırpılma KÖK NEDENİ: .mid içinde mini omurga + SIRADAKİ AYNI yatay satırı paylaşıyordu
   (grid oranından bağımSIZ). Split görünümde İSTİF DİKEY (alt alta) → yatay yarış tamamen kalkar; uzun SIRADAKİ
   ("… GECİKTİ") banner'la AYNI desende SARAR (kırpılmaz — Emir madde 5). Satır yüksekliğini .vid'in 3 metin satırı
   belirlemeye devam eder (~96px · DEĞİŞMEDİ — istif vid'den kısa). Mobil (≤720px) kendi wrap kuralını korur. */
.mv-split .vhead .mid{flex-direction:column;align-items:flex-start;gap:3px}
.mv-split .vhead .next{max-width:100%;white-space:normal;overflow:visible;text-overflow:clip}
/* K233 İş 1: sağ panel "SIRADAKİ aksiyon" banner'ı — nextChip REUSE (çip kendi late/plan/none rengini taşır); banner
   tam-metin gösterir (kırpma yok · satırdaki 240px ellipsis'ten farklı, burası özet). Buton YOK. */
.dnext-banner{display:flex;align-items:center;gap:10px;padding:10px 12px;margin-bottom:11px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line)}
.dnext-banner .next{font-size:16px;font-weight:600;max-width:none;overflow:visible;white-space:normal}   /* K249 Görev I: 12.5→13.5 (yalnız tipografik güç · backend metni AYNEN · hero değil) */
/* K233 İş 4: TARİH PLANI kartında PLANLANAN / GERÇEKLEŞEN görsel ayrımı (hafif başlık + ikinci grup dashed ayraç). */
.plangrp-h{font-size:12px;font-weight:700;letter-spacing:.05em;color:var(--muted);margin:0 0 7px}   /* K249 Görev K: 9/6→9.5/7 (label-alan ritmi · alanlar/save DEĞİŞMEDİ) */
.plangrp+.plangrp{margin-top:10px;padding-top:10px;border-top:1px dashed var(--line)}
/* SEÇİLİ satır (madde 9): hafif tint + 2px sol accent · hover'dan ayrık · aşırı mavi border yok */
/* K233 İş 3: dolgu HAFİFLETİLDİ — eski var(--accent-soft) tüm .vhead'i belirgin maviye boyuyordu; sol accent çizgi
   asıl sinyal, dolgu çok soluk bir tint (mockup #f7f9ff ilkesi · color-mix ile tema-duyarlı). */
.vrow.selected{border-left-color:var(--accent)}
.mv-list .vrow.selected .vhead{background:color-mix(in srgb, var(--accent) 7%, var(--surface))}
@media(max-width:979px){ .mv-split{display:block} .mv-detail-panel{display:none} }
.dgrid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:12px;margin:12px 0}   /* K249 Görev H: 10→12 (kartlar arası nefes · tutarlı ölçek) */
@media(max-width:860px){ .dgrid3{grid-template-columns:1fr} }
.dcard{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:12px 13px}   /* K249 Görev H: 10/12→12/13 */
.dcard>.t{font-size:12px;font-weight:600;letter-spacing:.05em;color:var(--muted);margin-bottom:8px}   /* K249 Görev H: 7→8 */
/* K306b — KART İÇİ BÖLÜM başlığı (kartın kendi .t'sinden daha küçük/soluk). Üç kaynak (BMW · İthalat ·
   bayi içi sevkiyat) TEK kartta ayrışsın diye; iç içe kart/accordion/tab YOK — düz metin + ince ayraç. */
.dcard-sect{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);
  margin:10px 0 4px;padding-top:8px;border-top:1px dashed var(--line)}
/* ⚠ :first-of-type KULLANILMADI: bölümlerin ÜSTÜNDE de div'ler var (model adı · kimlik satırı) → kural
   yanlış elemana düşerdi (sessiz ölü CSS). İlk bölüm AÇIKÇA işaretlenir. */
.dcard-sect-1{border-top:none;padding-top:0;margin-top:2px}
.dfields{display:grid;gap:8px}   /* K249 Görev H: 7→8 */
.dfields label{display:block;font-size:12px;color:var(--muted);font-weight:700;letter-spacing:.03em;margin-bottom:2px}
.dfields input{width:100%;border:1px solid var(--line);border-radius:6px;padding:5px 7px;font-size:11.5px;font-family:inherit;background:var(--surface);color:var(--ink)}
.mv-actions{display:flex;gap:7px;align-items:center;flex-wrap:wrap;position:relative;margin-top:2px}
/* v5.1 — Not/Evrak artık <details> DEĞİL; aksiyon düğmesiyle açılan inline panel. */
.mv-inline-panel{margin-top:9px;padding:11px 12px;background:var(--surface);border:1px solid var(--line);border-radius:9px}
.mv-inline-panel textarea{width:100%;border:1px solid var(--line);border-radius:7px;padding:8px;font-size:12px;font-family:inherit;resize:vertical;background:var(--surface);color:var(--ink)}
.mv-inline-panel .row2{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
@media(max-width:720px){ .vhead{grid-template-columns:1fr auto 26px} .vhead .mid{grid-column:1/-1;order:3;margin-top:2px;flex-wrap:wrap} }
/* EVRAK ALICILARI — tip bazlı satırlar (Firma Ayarları > Bildirimler kartı) */
.rrow{display:flex;align-items:flex-start;gap:12px;padding:10px 0;border-top:1px solid var(--line)}
.rrow .tip{width:130px;flex-shrink:0}
.rrow .tip b{font-size:12px}
.rrow .tip .mini{font-size:10px;color:var(--muted);margin-top:2px}
.rrow .who{flex:1;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.rrow .miss{font-size:12px;color:var(--amber);font-weight:700;background:var(--amber-soft);border-radius:7px;padding:4px 11px}
/* TOAST — v4 İş 3: ⛔ İKİNCİ TOAST AÇILMADI. Mevcut TEK genel `toast(text, kind)`
   (app.html:325 · .toast alt-orta · 2,6sn) OLDUĞU GİBİ kullanılır; v4 kayıtları da onu çağırır. */
/* İş A/F: donanım swatch — üstü açık altı koyu (BMW geçişli). Detay modalı + liste satırı doğrudan kullanır. */
.hw-swatch{width:13px;height:13px;border-radius:50%;flex:0 0 auto;border:1px solid rgba(0,0,0,.22);
  background-image:linear-gradient(180deg,rgba(255,255,255,.38),rgba(0,0,0,.28))}
.hw-swatch-empty{width:13px;height:13px;border-radius:50%;flex:0 0 auto;border:1px dashed var(--line-2);
  background:var(--surface-2)}   /* sözlükte yok → nötr daire (renk UYDURMA yok) */
.hw-missing-box{background:var(--amber-soft);border:1px solid var(--amber);border-radius:8px;padding:8px 10px;font-size:12px;margin:8px 0}
.hw-sw-lg{width:20px;height:20px;border-radius:5px;flex:0 0 auto;border:1px solid rgba(0,0,0,.22);
  background-image:linear-gradient(180deg,rgba(255,255,255,.38),rgba(0,0,0,.28))}
/* İş B — ÇİFT SWATCH (dış renk + döşeme yan yana): büyütülmüş ~20px, ince kenarlık, hover title ile ayrım. */
.hw-sw-duo{display:inline-flex;align-items:center;gap:3px;flex:0 0 auto}
.hw-sw-pair{width:20px !important;height:20px !important;border-radius:5px !important}
.hw-swatch-miss{width:20px;height:20px;border-radius:5px;flex:0 0 auto;border:1px dashed var(--line-2);
  background-image:repeating-linear-gradient(45deg,var(--line-2) 0 2px,transparent 2px 6px);background-color:var(--surface-2)}   /* değer VAR sözlükte YOK → çizgili "yok" (sessiz boş daire değil) */
/* İŞ 5 — arama + filtre: arama kutusu (tam genişlik) · filtre dropdown'ları · aktif filtre çipleri + Temizle */
.stock-search{width:100%;padding:9px 12px;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:var(--fg);font-size:14px;margin-bottom:10px}
.stock-search:focus{outline:none;border-color:var(--accent)}
/* K225: arama+model-çipleri bloğu ile dropdown-filtre bloğu arasında NET ayraç (yalnız görsel · filtre SAYISI/davranışı DEĞİŞMEZ) */
.stock-filters{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:2px;padding-top:12px;border-top:1px solid var(--line)}
.stock-fsel{max-width:200px}
.stock-sort{display:flex;align-items:center;gap:8px;margin-left:auto}
.stock-removed{margin-top:8px;font-size:13.5px;color:var(--amber,#c98a1e);background:color-mix(in srgb,var(--amber,#c98a1e) 8%,transparent);border:1px solid color-mix(in srgb,var(--amber,#c98a1e) 26%,transparent);border-radius:8px;padding:7px 11px;display:flex;flex-direction:column;gap:2px}
.stock-active{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:8px}
.stock-active-chip{display:inline-flex;align-items:center;gap:4px;font-size:12px;font-weight:600;padding:3px 6px 3px 10px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2)}
.stock-x{border:0;background:none;cursor:pointer;color:var(--muted);font-size:16px;line-height:1;padding:0 2px}
.stock-x:hover{color:var(--warn)}
@media(max-width:700px){  /* FAZ F/5d: dar ekranda filtre satırı dikey yığılır · arama tam genişlik */
  .stock-filters{flex-direction:column;align-items:stretch}
  .stock-fsel{max-width:none;width:100%}
  .stock-sort{margin-left:0;justify-content:space-between}
}

/* ---------- Tema toggle ---------- */
.theme-tg{background:transparent;border:1px solid var(--line-2);border-radius:8px;width:36px;height:36px;
  display:grid;place-items:center;cursor:pointer;color:var(--muted);transition:.15s;flex:none}
.theme-tg:hover{border-color:var(--accent);color:var(--accent-ink)}

/* ---------- İnce yardımcılar ---------- */
.inline-form{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end}
.inline-form .field{margin:0;flex:1;min-width:150px}
.divider{height:1px;background:var(--line);margin:16px 0}
.empty{text-align:center;color:var(--muted);font-size:13px;padding:26px}
.bar-track{height:7px;background:var(--surface-3);border-radius:20px;overflow:hidden}
.bar-fill{height:100%;background:var(--accent);border-radius:20px;transition:width .4s}
.pill-row{display:flex;gap:8px;flex-wrap:wrap}
.link{color:var(--accent-ink);cursor:pointer;font-weight:600}
.link:hover{text-decoration:underline}

/* ---------- Reception operasyon ekranı ---------- */
.rc-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:18px}
/* Grid çocukları min-width:auto olduğundan nowrap içerik ızgara track'ini şişirir → 0'la. */
.rc-grid>*{min-width:0}
@media(max-width:640px){.rc-grid{grid-template-columns:1fr}}
.ch-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:20px 22px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:14px}
.ch-card .ch-h{display:flex;align-items:center;gap:10px;font-size:13px;font-weight:600;color:var(--muted);
  text-transform:uppercase;letter-spacing:.06em}
.ch-card .ch-ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;font-size:17px;
  background:var(--accent-soft);color:var(--accent-ink)}
.ch-card .next{font-size:12px;color:var(--muted)}
.ch-card .next b{display:block;font-size:22px;font-weight:700;color:var(--ink);letter-spacing:-.01em;margin-top:2px}
.ch-card .next.none b{color:var(--muted);font-weight:600;font-size:17px}
.advisor-row{display:flex;align-items:center;gap:12px;padding:12px 4px;border-bottom:1px solid var(--line)}
.advisor-row:last-child{border-bottom:0}
.advisor-row .nm{font-weight:600;flex:1;min-width:120px}
.advisor-row .nm small{display:block;font-weight:400;color:var(--muted);font-size:12px}
.advisor-row .acts{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.st-pill{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:20px;font-size:13.5px;
  font-weight:600;white-space:nowrap}
.st-pill::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor}
/* Durum renkleri (bir renk = bir anlam): Müsait=yeşil (yalnız burada), Meşgul=amber,
   İzinli=nötr slate (rutin durum, alarm değil). Kırmızı yalnız yıkıcı/hata içindir. */
.st-musait{background:rgba(30,158,99,.13);color:var(--ok)}
.st-mesgul{background:var(--amber-soft);color:var(--amber)}
.st-izinli{background:var(--slate-soft);color:var(--slate)}
.st-pasif{background:var(--surface-3);color:var(--muted);opacity:.7}
.reminder{background:var(--amber-soft);border:1px solid color-mix(in srgb,var(--amber) 30%,transparent);
  color:var(--amber);border-radius:var(--radius-s);padding:12px 16px;margin-bottom:16px;font-size:14.5px;
  display:flex;align-items:center;gap:10px}
.reminder b{font-weight:700}
.busy-time{font-family:var(--mono);font-size:12px;color:var(--warn)}

/* ---------- Premium kuyruk kartı (Tel-in / Walk-in) ---------- */
.q-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px 20px;box-shadow:var(--shadow-sm);display:flex;flex-direction:column;gap:11px}
.q-head{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--muted);flex-wrap:wrap}
.q-head b{color:var(--ink);font-size:14px;min-width:0}
.q-ic{width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-size:16px;
  background:var(--accent-soft);color:var(--accent-ink)}
/* Kanal rengi durumdan AYRI: Tel-in = mavi (accent), Walk-in = teal. Yeşil DEĞİL
   (yeşil yalnız "müsait" durumu). Renk üstte ince şerit + ikon + öneri vurgusunda. */
.q-card{border-top:3px solid var(--accent)}
.q-card.ch-walk{border-top-color:var(--teal)}
.q-card.ch-walk .q-ic{background:var(--teal-soft);color:var(--teal)}
.q-card.ch-walk .next-chip b{color:var(--teal)}
.q-big{font-size:26px;font-weight:700;letter-spacing:-.01em;line-height:1.1;text-align:center;padding:6px 0 0}
.q-big.none{color:var(--muted);font-weight:600;font-size:20px}
.q-meta{text-align:center;font-size:13.5px;color:var(--muted);margin-top:-4px}
.q-avail{margin-left:auto;font-size:12px;color:var(--muted);background:var(--surface-2);
  border-radius:20px;padding:4px 11px;font-weight:600;white-space:nowrap}
.next-chip{text-align:center;font-size:13px;color:var(--muted);background:var(--surface-2);
  border-radius:9px;padding:8px}
.next-chip b{color:var(--accent-ink)}
.chip-teal{background:var(--teal-soft);color:var(--teal)}

/* ---------- Üst-bar kişisel durum rozeti (yalnız danışman) ----------
   Üst barın TAM ORTASINDA, büyük ve dokunulur. Danışmanın en sık kullandığı
   kontrol → en görünür yerde. */
.tb-status{position:absolute;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:10px;z-index:1}
.tb-status .tb-st-lbl{font-size:13.5px;font-weight:400;color:var(--muted);white-space:nowrap;margin-right:2px}
.tb-status .tb-st-btn{border:1px solid var(--line-2);background:transparent;color:var(--ink-soft);
  border-radius:11px;padding:12px 26px;font-size:14.5px;font-weight:600;cursor:pointer;transition:.15s;white-space:nowrap}
.tb-status .tb-st-btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.tb-status .tb-st-btn.on-musait{background:var(--ok);color:#fff;border-color:transparent;box-shadow:var(--shadow-sm)}
.tb-status .tb-st-btn.on-mesgul{background:var(--amber);color:#fff;border-color:transparent;box-shadow:var(--shadow-sm)}
.tb-status .tb-st-btn.on-izinli{background:var(--slate);color:#fff;border-color:transparent;box-shadow:var(--shadow-sm)}
/* Ortada mutlak konumlu rozet, dar/orta ekranda ünvan çipiyle ÇAKIŞMASIN diye
   erken (≤1300px) kendi satırına iner; üstünde geniş ekranda ortada büyük durur.
   Rozet artık meşgul süresini de gösterebildiği için pay bırakmak gerekiyor. */
@media(max-width:1300px){
  .tb-status{position:static;transform:none;order:9;flex-basis:100%;justify-content:center;
    border-top:1px solid var(--line);padding-top:10px;margin-top:2px}
  .topbar{flex-wrap:wrap;height:auto;padding:calc(10px + var(--safe-top)) calc(16px + var(--safe-right)) 10px calc(16px + var(--safe-left));row-gap:6px}  /* KÖK (Emir PWA standalone: ☰ durum çubuğu altında kalıyordu): mobil override masaüstünün safe-top padding'ini EZİYORDU → status bar (~47px) ☰'yi örtüyordu. safe-top/left/right burada da EKLENİR (yoksa çentik altında tıklanamaz). */
  .tb-status .tb-st-btn{flex:1;max-width:200px;text-align:center}
}
/* KÖK — DURUM ŞERİDİ MOBİLDE TAŞIYORDU (Emir iPhone ?debugfit: Meşgul'de sw 463 > clientW 402 → "Meşgul" butonu SAĞDA
   KESİLİYORDU). Sebep: [Durumum:] + [Meşgul · N dk çipi] + [Müsait] + [Meşgul] tek satırda, butonlar min-width:auto (içerik)
   yüzünden yeterince küçülemiyordu. Çözüm (MASKELEME DEĞİL — GERÇEKTEN SIĞDIR): şerit SARAR (flex-wrap) → sığmazsa butonlar
   alt satıra iner; butonlar min-width:0 ile küçülebilir; çip sarınca tek başına satır olur. Yatay taşma YAPISAL olarak imkânsız. */
@media(max-width:860px){
  .tb-status{flex-wrap:wrap;gap:8px 10px}
  .tb-status .tb-busy{flex-basis:100%;justify-content:center}   /* meşgul çipi kendi satırında (butonları daraltmaz) */
  .tb-status .tb-st-btn{flex:1 1 120px;min-width:0;max-width:none}
}

/* ---------- Kademeli meşgul hatırlatması (pasif → görünür → zorlayıcı) ----------
   Eşik 1 (pasif): üst-bar çipinde amber ton + süre. Kesinti yok. */
.tb-busy{display:inline-flex;align-items:center;gap:6px;font-size:14.5px;font-weight:700;white-space:nowrap;
  color:var(--amber);background:var(--amber-soft);border:1px solid color-mix(in srgb,var(--amber) 26%,transparent);
  border-radius:11px;padding:8px 13px}
.tb-busy .tb-busy-dot{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none}

/* Eşik 2/3 (görünür, ENGELLEMEYEN): ekran köşesinde kalıcı şerit. Kendiliğinden
   kaybolmaz; işi durdurmaz. Eşik 3'te tonu koyulaşır, süre büyür. */
.busy-nudge{position:fixed;right:18px;bottom:18px;z-index:250;max-width:340px;width:calc(100vw - 36px);
  background:var(--surface);border:1px solid color-mix(in srgb,var(--amber) 34%,var(--line));
  border-left:4px solid var(--amber);border-radius:var(--radius-s);box-shadow:var(--shadow);
  padding:14px 16px;display:flex;flex-direction:column;gap:11px;animation:nudge-in .2s ease}
@keyframes nudge-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.busy-nudge .bn-txt{font-size:14.5px;color:var(--ink);line-height:1.45}
.busy-nudge .bn-txt b{font-weight:700}
.busy-nudge .bn-acts{display:flex;gap:8px}
.busy-nudge .bn-acts .btn{flex:1}
/* Eşik 3: güçlendirilmiş — amber zemin, daha belirgin, süre büyür (hâlâ modal yok). */
.busy-nudge.strong{background:var(--amber-soft);border-color:var(--amber);border-width:1px;
  box-shadow:0 22px 60px -24px color-mix(in srgb,var(--amber) 60%,transparent)}
.busy-nudge.strong .bn-txt{font-size:16px}
.busy-nudge.strong .bn-txt .bn-min{font-size:18px}
.busy-nudge .bn-min{font-weight:700;font-variant-numeric:tabular-nums}
/* Mobil: köşe şeridi de güvenli alanın ÜSTÜNDE (butonları home-indicator örtmesin). */
@media(max-width:640px){.busy-nudge{right:8px;left:8px;bottom:calc(8px + env(safe-area-inset-bottom, 0px));width:auto;max-width:none}}

/* Eşik 4 (MODAL): iki seçenek EŞİT görsel ağırlıkta — kullanıcıyı "Müsait"e itme
   (varsayılan/otomatik seçili buton yok). Renk anlamı: Müsait=yeşil, Meşgul=amber. */
.busy-modal-acts{display:flex;gap:10px;margin-top:6px}
.busy-modal-acts .btn{flex:1;padding:13px;font-size:16px}
.btn-ok{background:var(--ok);color:#fff;border-color:var(--ok)}
.btn-ok:hover{background:#188a54;color:#fff}
.btn-amber{background:var(--amber);color:#fff;border-color:var(--amber)}
.btn-amber:hover{filter:brightness(.94);color:#fff}
/* Resepsiyon/yönetici tarafında 90+ dk uzun meşgul vurgusu (satır). */
tr.flag-verylong td,.advisor-row.flag-verylong{background:var(--warn-soft)!important}
.busy-badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:700;
  padding:2px 8px;border-radius:20px;background:var(--amber-soft);color:var(--amber);white-space:nowrap}
.busy-badge.long{background:var(--warn-soft);color:var(--warn)}

/* ---------- Danışman ekibi tablosu ---------- */
.team-tbl td{vertical-align:middle}
/* D5 (11 Ağu · Emir "otoban gibi boşluk") — KOLON GEOMETRİSİ TEK KAYNAK. Eskiden colgroup satır-içi width
   taşıyordu ve ARA kolon STİLSİZ ("auto") idi: genişliği TANIMSIZ tek kolon fazlanın TAMAMINI yutar →
   K273 canvas'ı 1120→1320 olunca o boş hücre 285→395px'e çıkıp segmented butonlarla Sıfır/Mevcut sayıları
   arasında dev bir boşluk açıyordu.
   ⚠ İLK DENEMEDE (aynı gün, Emir yakaladı) yalnız spacer'a tavan konmuş, fazlanın dağılımı TARAYICIYA
   bırakılmıştı: tarayıcı fazlayı tanımlı kolonlara ORANTILI dağıtınca Danışman kolonu da 290→395px büyüdü ve
   ŞİKÂYETİN KENDİSİ (isimden sonraki ölü alan) 15→121px'e ÇIKTI — otoban kaldırılmadı, YER DEĞİŞTİRDİ.
   ÖLÇÜM (1920 · en uzun ad "Mehmet Alparslan Karabağlıoğlu" · isim sonu → Durum başı):
     öncesi 15px · orantılı dağıtım 121px · aşağıdaki çözüm 15px.
   ÇÖZÜM: Danışman/spacer/işlem kolonları PİKSEL SABİT; artan alan yalnız Durum + sayı kolonlarına, calc ile
   AÇIKÇA paylaştırılır (payların toplamı %100 → tarayıcıya dağıtacak fazla KALMAZ, Danışman büyüyemez).
   Pay: Durum %50 · dört sayı kolonu %50 (her biri %12,5). 878px = 290+72+52+240+4×56 (tüm tabanlar). */
.team-tbl col.tt-name{width:290px}
.team-tbl col.tt-gap{width:72px}
.team-tbl col.tt-act{width:52px}
.team-tbl col.tt-n{width:calc(56px + (100% - 878px) * 0.125)}
.team-tbl col.tt-durum{width:calc(240px + (100% - 878px) * 0.5)}
/* D5 devamı: Durum kolonu genişleyince segmented kontrol SOLDA dar kalıp arkasında ikinci bir boşluk
   bırakıyordu (ölçüm: hücre 327px, kontrol 190px → 137px kuyruk). Kontrol artık HÜCREYİ DOLDURUR —
   "segmented butonlar biraz nefes alsın" (buton başına ~65px → ~100px). ⛔ YALNIZ tablo hücresi:
   .stseg SF barında da kullanılıyor (2b), orada inline-flex davranışı AYNEN kalır. Boyut/renk/font DEĞİŞMEDİ. */
.team-tbl td .stseg{display:flex;width:100%}
.team-tbl td .stseg button{flex:1}
/* İŞ 2a — mockup-exact yenileme: iki katlı başlık · segmented durum (DOLGULU) · Mevcut "+" · satır ⋯ menüsü.
   Başlık kendi içerik bloğunun üstüne ortalı; metin kolonları SABİT (Danışman/Durum), artan boşluk tek ara kolonda. */
.team-tbl thead th{text-align:center}                   /* Karar: başlık kendi içerik bloğunun üstüne ortalı (metin kolonu dahil) */
.team-tbl th.grp{text-align:center;border-bottom:0;padding-bottom:2px;color:var(--ink-soft);text-transform:none;letter-spacing:0;font-size:12px;white-space:nowrap}   /* K278 T5-etiket: 11.5 ölçek DIŞIYDI */
.team-tbl th.sub{text-align:center;padding-top:2px}
.team-tbl td.num{font-weight:500}                       /* K278 T3-veri: sayı hücresi 14.5/500 (F/T .sm-tbl td.num ile AYNI rol — 400 gövde-metni kademesiydi) */
.team-tbl .z{color:var(--line-2)}                       /* sönük sıfır ("0" ama vurgusuz — göz sayıya değil dolu hücreye gider) */
.subline{font-size:12px;color:var(--muted);margin-top:3px;line-height:1.25}   /* Meşgul süresi / İzinde dönüş alt-satırı · K278 T5-metadata: 10.5 ölçeğin ALTINDAYDI (taban 12) */
.team-tbl td.actc{white-space:nowrap}
/* Segmented durum — üç seçenek tek kontrol, SEÇİLİ DOLGULU (anlam renkleri · temalanmaz). SF çipi de kullanır (2b). */
.stseg{display:inline-flex;border:1px solid var(--line-2);border-radius:9px;overflow:hidden}
.stseg button{border:0;background:transparent;font:inherit;font-size:13.5px;font-weight:600;color:var(--muted);padding:6px 13px;cursor:pointer}
.stseg button:disabled{cursor:default;opacity:.65}
.stseg button.on.musait{background:var(--ok);color:#fff}
.stseg button.on.mesgul{background:var(--amber);color:#fff}
.stseg button.on.izinli{background:var(--slate);color:#fff}
/* Mevcut müşteri hızlı atama — HER (çalışan) satırda "+"; danışman Müsait ise otomatik Meşgul, sıra yeri değişmez. */
.rteam-plus{margin-left:6px;width:22px;height:22px;border-radius:6px;border:1px solid var(--line-2);background:var(--surface);color:var(--accent);font-weight:700;font-size:13px;cursor:pointer;line-height:1;vertical-align:middle}
.rteam-plus:hover{border-color:var(--accent);background:var(--accent-soft)}
.rteam-plus:disabled{opacity:.4;cursor:default;border-color:var(--line);color:var(--muted)}
/* Satır sonu ⋯ menüsü (kırmızı × yerine): "Son kaydını geri al" + kırmızı "Rotasyondan çıkar…". */
.rteam-dots{width:30px;height:30px;border:1px solid var(--line-2);border-radius:8px;background:var(--surface);color:var(--muted);font-weight:700;cursor:pointer;font-size:16px;line-height:1}
.rteam-dots:hover{border-color:var(--accent);color:var(--accent-ink)}
.rteam-menu{position:absolute;right:10px;top:calc(100% - 4px);background:var(--surface);border:1px solid var(--line-2);border-radius:9px;box-shadow:0 12px 34px -18px rgba(15,23,45,.4);padding:5px;width:236px;z-index:5;font-size:13px;text-align:left}
.rteam-menu button.mi{display:block;width:100%;text-align:left;border:0;background:transparent;font:inherit;font-size:13px;padding:8px 10px;border-radius:6px;cursor:pointer;color:var(--ink)}
.rteam-menu button.mi:hover:not(:disabled){background:var(--surface-2)}
.rteam-menu button.mi:disabled{color:var(--muted);cursor:default}
.rteam-menu button.mi.danger{color:var(--warn)}
.rteam-menu .msep{height:1px;background:var(--line);margin:4px 6px}
/* İŞ 2b — SF GÖREVLİSİ satırı (sfbar · SF'in tek giriş noktası · rosterin üstünde). Mor rol çipi + kimlik + durum + ver.
   HOTFIX (HATA 1): flex-wrap → SABİT IZGARA. Kolonlar SABİT (kimlik 290px = Danışman kolonu · durum 240px = Durum
   kolonu · değiştirme kümesi sağa yaslı 1fr). Asenkron "Sıradakine ver → ad" gelince satır ARTIK reflow/wrap OLMAZ
   (flicker biter) — sabit-genişlik hücrelerde içerik oynar, ızgara oynamaz. Durum segmented danışman satırlarındaki
   Durum kolonuyla AYNI hizada. */
.sfbar{display:grid;grid-template-columns:290px 240px minmax(0,1fr);align-items:center;column-gap:12px;
  border:1px solid var(--line);border-radius:var(--radius-s);padding:9px 14px;margin-bottom:12px;background:var(--surface)}
.sfbar .sf-ident{display:flex;align-items:center;gap:10px;min-width:0}   /* mor çip + kimlik — Danışman kolonu (290px) */
.sfbar .sf-role{font-size:10.5px;font-weight:700;letter-spacing:.05em;color:#7c34c6;background:rgba(124,52,198,.10);border-radius:999px;padding:3px 10px;flex:none;white-space:nowrap}
.sfbar .sf-who{display:flex;align-items:center;gap:9px;font-weight:700;min-width:0}
.sfbar .sf-who b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}   /* uzun ad taşmaz → ızgarayı itmez */
.sfbar .sf-dot{width:8px;height:8px;border-radius:50%;flex:none;display:inline-block}
.sfbar .sf-status{display:flex;align-items:center;min-width:0}   /* durum segmented — Durum kolonuyla (240px) hizalı */
.sfbar .sf-status-none{color:var(--muted)}
.sfbar .sf-chg{justify-self:end;display:flex;align-items:center;gap:8px}   /* değiştirme kümesi — sağa yaslı sabit kolon */
.sfbar .sf-chg .btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.sfbar .sf-chg .btn:disabled{opacity:.5;cursor:default}
/* "Sıradakine ver" + alt satır "→ ad" — İKİ SATIR. ⚠ .btn display:inline-flex (satır ekseni) olduğu için metin ve
   span AYNI satıra düşüp adı taşırıp KIRPIYORDU (Emir: "sıradaki danışmanın adı olmalı" ama görünmüyordu). Sütun
   ekseni (flex-direction:column) iki satırı ALT ALTA yığar → ad görünür. Ad KISALTILIR ("Umut K.") → sabit ~158px'e sığar. */
.sfbar .sf-give-fair{display:flex;flex-direction:column;align-items:stretch;justify-content:center;gap:1px;
  width:158px;padding-top:5px;padding-bottom:5px;text-align:left;line-height:1.2}
.sfbar .sf-give-fair .sf-fair-line{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;font-weight:700}
/* <900px: iki satıra kır (kimlik+durum üstte · değiştirme altta) — SABİT ızgara, flex-wrap flicker'ı YOK. */
@media(max-width:900px){
  .sfbar{grid-template-columns:minmax(0,1fr) auto;row-gap:10px}
  .sfbar .sf-ident{grid-column:1}
  .sfbar .sf-status{grid-column:2;justify-self:end}
  .sfbar .sf-chg{grid-column:1 / -1;justify-self:stretch;flex-wrap:wrap}
}
.chip-sf{color:#7c34c6;background:rgba(124,52,198,.10)}   /* SF kanalı — mor (tek sözlük · kayıt tablosunda da "SF") */
/* İŞ 6 (mobil ≤640px): resepsiyon ekip tablosu → KART düzeni (İŞ 3 desen 2). Masaüstünde kartlar gizli. */
.rteam-cards{display:none}
.rteam-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin-bottom:8px}
.rteam-card .cr1{display:flex;align-items:center;gap:9px}
.rteam-card .cr1 .adv-name{flex:1;min-width:0}
.rteam-card .cr2{margin-top:8px}
.rteam-card .cr2 .stseg{display:flex;width:100%}
.rteam-card .cr2 .stseg button{flex:1;text-align:center}
.rteam-card .cr3{display:flex;align-items:center;gap:6px;margin-top:8px}
.rteam-card .cnt{flex:1;display:flex;align-items:center;justify-content:space-between;background:var(--surface-2);border-radius:8px;padding:6px 9px;gap:4px;min-width:0}
.rteam-card .cnt .l{font-size:10px;font-weight:700;letter-spacing:.04em;color:var(--muted);white-space:nowrap}
.rteam-card .cnt span:not(.l){font-size:14px;font-weight:700;font-variant-numeric:tabular-nums}
.rteam-card .cnt .z{color:var(--line-2)}
.rteam-card .cnt .rteam-plus{margin-left:0}
@media(max-width:640px){
  .team-tbl{display:none}                 /* mobilde tablo YOK → kart düzeni (taşma biter) */
  .rteam-cards{display:block}
  .team-desc{display:none}                /* açıklama paragrafı "?" tooltip'ine girer */
  /* SF görevlisi satırı tek kolona iner: kimlik üstte · Kaynak(tam) + ver butonları altta. Durum → üst-bar çipinden (owner). */
  .sfbar{grid-template-columns:1fr;row-gap:8px}
  .sfbar .sf-ident,.sfbar .sf-status,.sfbar .sf-chg{grid-column:1;justify-self:stretch}
  .sfbar .sf-status{display:none}   /* mobilde durum segmented gizli — owner üst-bar çipinden yönetir */
  .sfbar .sf-chg{flex-wrap:wrap;gap:8px}
  .sfbar .sf-give-fair{width:auto;flex:1;min-width:0}
  .sfbar .sf-chg select{flex:1 0 100%}
  .sfbar .sf-chg .btn{flex:1;min-width:0}
}
/* Dar ekranda ikincil "Dün" kolonlarını gizle → tablo yatay kaymadan sığar. */
@media(max-width:640px){.team-tbl .col-dun{display:none}}
.adv-name{display:flex;align-items:center;gap:8px;font-weight:600}
/* K278 §8/§4: danışman adı T3 14.5/600. ⚠ <b> için AÇIK weight ŞART — UA varsayılanı `bolder`, 600'lük
   ebeveynde 700, 700'lük ebeveynde 900 üretir (ölçüldü: 900). 900 K268 kilidinin (400/500/600/700) DIŞINDA. */
.adv-name-row b{font-size:14.5px;font-weight:600}
/* Adil Sıra: ad + süre alt-satırı ([durum noktası][avatar]'ın sağında dikey blok). Süre sol raydan çıktı. */
.adv-name-block{display:flex;flex-direction:column;gap:1px;min-width:0}
.adv-name-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.adv-sub{font-size:12px;font-weight:400;color:var(--muted);line-height:1.2;white-space:nowrap}   /* yalnız zaman ("5 sa önce"); yoksa satır render edilmez */
/* AVATAR — tek bileşen (baş harf dairesi / foto). Durum noktası BASKIN; avatar ikincil (küçük, nötr). Foto+harf AYNI boyut/şekil → hiza bozulmaz. */
.avtr{border-radius:50%;flex:0 0 auto;object-fit:cover;display:inline-flex;align-items:center;justify-content:center;line-height:1;text-align:center;vertical-align:middle;box-shadow:0 0 0 1px rgba(0,0,0,.06) inset;overflow:hidden}
/* Baş harf dairede TAM ORTALI (dikey+yatay); tek satır, taşma/kırpılma yok ("yamuk" görünümü biter). TEK KAYNAK → roster/tempo/raporlar hepsinde geçerli. */
.avtr-ini{font-weight:700;line-height:1;letter-spacing:0;text-transform:none;user-select:none;white-space:nowrap;display:flex;align-items:center;justify-content:center;width:100%;height:100%}
.mwmt{display:inline-flex;gap:4px;margin-left:2px}
.st-group{display:inline-flex;gap:5px;flex-wrap:wrap}
.st-on-musait{background:rgba(30,158,99,.15);color:var(--ok);border:1px solid transparent;font-weight:600}
.st-on-mesgul{background:var(--amber-soft);color:var(--amber);border:1px solid transparent;font-weight:600}
.st-on-izinli{background:var(--slate-soft);color:var(--slate);border:1px solid transparent;font-weight:600}

/* ---- SF (Satış Fırsatı) açılır panel — overlay (sayfayı İTMEZ); kalıcı kart YOK ---- */
.sf-pop-backdrop{position:fixed;inset:0;background:rgba(15,23,42,.38);z-index:1000;display:flex;align-items:center;justify-content:center;padding:16px}
.sf-pop{background:var(--card,#fff);border:1px solid var(--line);border-radius:14px;box-shadow:0 18px 48px rgba(15,23,42,.25);width:100%;max-width:360px;padding:16px 18px}
.sf-pop-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.sf-pop-h b{font-size:16px}
.sf-pop-x{border:none;background:transparent;font-size:22px;line-height:1;cursor:pointer;color:var(--muted);padding:0 4px}
.sf-pop-next{background:var(--bg,#f6f7f9);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:4px 0 12px}
.sf-pop-btns{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.sf-pop-btns .btn{width:100%;justify-content:center}
/* Mobil: alt sayfa (bottom sheet) — butonlar YİNE yan yana */
@media (max-width:640px){
  .sf-pop-backdrop{align-items:flex-end;padding:0}
  .sf-pop{max-width:none;border-radius:16px 16px 0 0;padding:18px 18px calc(18px + env(safe-area-inset-bottom,0))}
}

/* Part 1.3: team tablosu mobilde 4 sayı kolonu (ST/SW/MT/MW) — dar padding, yatay kaydırma OLMASIN */
@media(max-width:640px){.team-tbl td.num,.team-tbl th.num{padding-left:5px;padding-right:5px}.team-tbl td,.team-tbl th{padding-left:8px;padding-right:8px}}

/* İş 5: kompakt segmentli akış geçişi (kart üst şeridinde, dar — tam genişlik değil) */
.pdseg-sm{border-radius:7px}
.pdseg-sm .pdseg-btn{padding:3px 10px;font-size:11.5px;font-weight:700}

/* Çevrimiçilik göstergesi (danışman sırası GÜVENİLİRLİĞİ) — satır içi, yükseklik ARTIRMAZ. ⛔ KIRMIZI YOK. */
.pres{display:inline-flex;align-items:center;gap:3px;font-size:10.5px;color:var(--muted);vertical-align:middle;margin-right:2px}
.pres-dot{width:7px;height:7px;border-radius:50%;background:#9ca3af;flex:0 0 auto}
.pres-active .pres-dot{background:#16a34a}     /* yeşil — taze */
.pres-idle .pres-dot{background:var(--amber)}  /* sarı/amber — bir süredir sessiz */
.pres-offline .pres-dot,.pres-unknown .pres-dot{background:#9ca3af}  /* gri — çevrimdışı / veri yok (KIRMIZI DEĞİL) */
.pres-txt{font-size:10px;color:var(--muted)}

/* ===================================================================== *
 * SEVKİYAT — düz aksiyon-sıralı liste (A3 · Emir 31 Tem)                 *
 * Renk sistemi KİLİTLİ (bir renk = bir anlam · _tokens.css):            *
 *  talep=accent · islemde=nötr · alındı=ok · yolda/2.sevk=teal ·        *
 *  williams=amber · KIRMIZI(warn) YALNIZ hasarlı + gerçekleşen gecikme. *
 * ===================================================================== */
.sd-strip{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.sd-stat{display:flex;align-items:baseline;gap:6px;border:1px solid var(--line);background:var(--surface);
  border-radius:999px;padding:6px 14px;font-size:13.5px;font-weight:700;color:var(--ink);cursor:pointer;transition:.15s}
.sd-stat:hover{border-color:var(--line-2)}
.sd-stat b{font-size:16px;font-variant-numeric:tabular-nums}
.sd-stat.warn{border-color:var(--warn);background:var(--warn-soft);color:var(--warn)}
.sd-stat.amb{border-color:var(--amber);background:var(--amber-soft);color:var(--amber)}
.sd-stat.teal{border-color:var(--teal);background:var(--teal-soft);color:var(--teal)}
.sd-stat.on{outline:2px solid var(--accent);outline-offset:1px}
.sd-tabs{display:flex;gap:4px;border-bottom:2px solid var(--line);margin-bottom:10px;align-items:center;flex-wrap:wrap}
.sd-tab{padding:9px 16px;font-weight:700;font-size:14.5px;color:var(--muted);cursor:pointer;
  border:none;background:none;border-bottom:2px solid transparent;margin-bottom:-2px}
.sd-tab.on{color:var(--accent);border-bottom-color:var(--accent)}
.sd-tab .n{font-size:12px;background:var(--surface-2);border-radius:999px;padding:1px 8px;margin-left:5px;color:var(--muted)}
.sd-tab-ay{margin-left:auto;margin-bottom:6px}
.sd-tab-ay select{width:auto;padding:5px 10px;font-size:12px}
.sd-fbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:12px}
/* K274/D10 (EXPAND): arama en sık kullanılan filtre — geniş canvas'ta 360px'de kalması dar kalıyordu.
   Üst sınır yükseldi; flex:1 zaten mevcut alanı paylaşıyor, dar ekranda min-width korur. */
.sd-fbar .sd-search{flex:1;min-width:220px;max-width:560px}
/* K274/D10 (CONSTRAIN): filtre select'i canvas büyüdükçe gereksizce uzuyordu — kendi optimum genişliğinde kalır. */
.sd-fbar select,.sd-strip select,select.sd-target-pick{max-width:320px}   /* K276 D10: .sd-target-pick topbar-actions'ta duruyor — K274'ün 320px NİYETİ ona da uygulandı */
.sd-fbar .sd-search input{padding:8px 12px;font-size:13px}
.sd-chip{border:1px solid var(--line);background:var(--surface);border-radius:999px;padding:6px 13px;
  font-size:12px;font-weight:700;color:var(--muted);cursor:pointer;transition:.15s}
.sd-chip.on{background:var(--accent-soft);border-color:var(--accent);color:var(--accent-ink)}
.sd-sortnote{margin-left:auto;color:var(--muted);font-size:12px}
/* EK-4 madde 4: AYRI KARTLAR (mockup v3 .list/.card birebir) — tek kutu + border-bottom ayracı DEĞİL.
   Mockup: .list{gap:12px} · .card{border-radius:14px; box-shadow:0 3px 14px rgba(10,20,40,.06); padding:16px 18px}. */
.sd-list{display:flex;flex-direction:column;gap:12px}
.sd-row{position:relative;display:grid;grid-template-columns:122px minmax(0,1fr) 196px 76px;gap:14px;
  /* K277 İş 2: EK-1 +1 kademe .sd-route'u 12.5→13.5 yaptı → kart 96→99px (+3). K274 D6 kuralı "font büyütme
     satırı +2px'ten fazla şişirmesin" diyor → dikey padding 16→15 ile dengelendi (net +1px). Font/badge/yatay
     padding DEĞİŞMEDİ; D9'un iki-sütun reflow'u aynen. */
  align-items:center;padding:15px 18px 15px 22px;cursor:pointer;transition:background .12s,box-shadow .12s;
  background:var(--surface);border:1px solid var(--line);border-radius:14px;box-shadow:0 3px 14px rgba(10,20,40,.06);
  overflow:hidden}
.sd-row:hover{background:var(--surface-2)}
.sd-serit{position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--muted)}
.sd-serit.talep{background:var(--accent)} .sd-serit.islemde{background:var(--muted)}
.sd-serit.alindi{background:var(--ok)} .sd-serit.yolda{background:var(--teal)}
.sd-serit.williams{background:var(--amber)} .sd-serit.iptal{background:var(--line-2)} .sd-serit.iade{background:var(--warn)}
.sd-st{font-size:10px;font-weight:700;letter-spacing:.03em;padding:5px 6px;border-radius:999px;text-align:center;white-space:nowrap}
.sd-st.talep{background:var(--accent-soft);color:var(--accent-ink)}
.sd-st.islemde{background:var(--surface-2);color:var(--muted)}
.sd-st.alindi{background:var(--ok-soft);color:var(--ok)}
.sd-st.yolda{background:var(--teal-soft);color:var(--teal)}
.sd-st.williams{background:var(--amber-soft);color:var(--amber)}
.sd-st.iptal{background:var(--surface-2);color:var(--muted)}
.sd-st.iade{background:var(--warn-soft);color:var(--warn)}
/* EK-4 madde 1 — LİSTE hiyerarşisi: MODEL çapa (büyük/koyu/üstte) · VIN ikinci planda (soluk mono/altta).
   ⚠ K282 (Emir · 11 Ağu): eski "DETAY ekranı BUNUN TERSİ ve o DOĞRU · iki ekran KASITLI farklı" notu
   GEÇERSİZ. Emir detayda da MODELİ çapa yaptı (`.sd-band-model` 16/600 üstte · `.sd-band-vin` 13.5/600 soluk
   altta) → iki ekran artık AYNI hiyerarşiyi konuşuyor. Bilinçli revizyon, kaza değil (Karar Günlüğü K282).
   Değerler mockup v3'ten: .model{15.5px/800} · .vin{12px/600 mono, --faint}. */
.sd-vin{font-variant-numeric:tabular-nums;font-weight:600;font-size:12px;color:var(--faint,var(--muted));
  letter-spacing:.02em;word-break:break-all}
.sd-eq{font-size:12px;font-weight:600;color:var(--muted);background:var(--surface-2);border-radius:5px;
  padding:1px 6px;margin-left:7px;letter-spacing:.02em;white-space:nowrap}
.sd-mdl{color:var(--ink);font-size:15.5px;font-weight:700;line-height:1.25}
.sd-vinrow{margin-top:3px;display:flex;align-items:center;flex-wrap:wrap;gap:0}
.sd-plate{font-variant-numeric:tabular-nums;letter-spacing:.02em;font-size:10.5px;font-weight:700;color:var(--muted);
  background:var(--surface-2);border-radius:5px;padding:1px 6px;margin-left:7px}
.sd-route{font-size:13.5px;margin-top:3px;color:var(--ink-soft)}
.sd-route b{font-weight:700}
.sd-route .sd-dis{font-weight:700;color:var(--teal)}
.sd-route .sd-kaynak-bos{font-weight:700;color:var(--amber)}
.sd-meta{color:var(--muted);font-size:11.5px;margin-top:2px}
/* D9 (11 Ağu · Emir "kartlar sıkışık, orta bölüm boş") — KART REFLOW (yeni bilgi YOK, yalnız yerleşim).
   Ölçüm (öncesi): kart yüksekliği 135px sabit; orta blok 782px genişlikte ama İÇİ 5 satır DİKEY yığılmıştı
   (model · şasi · güzergâh · meta · ray) — her satır 782px'lik alanın ~%30'unu kullanıp geri kalanı boş
   bırakıyordu. Geniş canvas'ta bu blok İKİ SÜTUNA açılır: SOL = kimlik (model/plaka + şasi/ekipman) ·
   SAĞ = güzergâh + talep/son işlem meta'sı · RAY tam genişlikte altta. 5 satır → 3 satır.
   ⛔ Font/badge/buton boyutu DEĞİŞMEDİ · alan EKLENMEDİ/ÇIKARILMADI · ≤1199px'te eski dikey yığın AYNEN. */
@media(min-width:1200px){
  .sd-main{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);column-gap:26px;align-items:start}
  .sd-main>.sd-idline{grid-column:1;grid-row:1}
  .sd-main>.sd-vinrow{grid-column:1;grid-row:2}
  .sd-main>.sd-route{grid-column:2;grid-row:1;margin-top:1px}
  .sd-main>.sd-meta{grid-column:2;grid-row:2;margin-top:4px}
  .sd-main>.sd-rail{grid-column:1/-1;grid-row:3}
}
.sd-rail{display:flex;gap:3px;margin-top:8px;max-width:280px}
.sd-rail span{height:4px;flex:1;border-radius:2px;background:var(--line)}
.sd-due{text-align:right}
.sd-due .d1{font-size:13.5px;font-weight:700;font-variant-numeric:tabular-nums}
.sd-due .d2{font-size:12px;color:var(--muted);margin-top:1px}
.sd-due.late .d1{color:var(--warn)}
.sd-due.soon .d1{color:var(--amber)}
.sd-badges{display:flex;gap:5px;margin-top:6px;justify-content:flex-end;flex-wrap:wrap}
.sd-b{font-size:9.5px;font-weight:700;padding:2px 7px;border-radius:5px;white-space:nowrap;letter-spacing:.02em}
.sd-b.dmg{background:var(--warn-soft);color:var(--warn)}
.sd-b.wil{background:var(--amber-soft);color:var(--amber)}
.sd-b.foto{background:var(--surface-2);color:var(--muted)}
.sd-b.risk{background:var(--amber-soft);color:var(--amber)}
.sd-b.sevk2{background:var(--teal-soft);color:var(--teal)}
.sd-b.fiyat{background:var(--teal-soft);color:var(--teal)}
.sd-go{text-align:right;font-weight:700;color:var(--accent);font-size:13px;white-space:nowrap}
.sd-empty{padding:44px 18px;text-align:center;color:var(--muted);font-size:14.5px;
  background:var(--surface);border:1px dashed var(--line);border-radius:var(--radius)}
.sd-countline{color:var(--muted);font-size:11.5px;margin:0 0 8px}
.sd-more{width:100%;margin-top:10px}
@media (max-width:720px){
  .sd-row{grid-template-columns:1fr;gap:7px;padding:13px 15px 13px 19px}
  .sd-due{text-align:left}
  .sd-badges{justify-content:flex-start}
  .sd-go{text-align:left}
  .sd-rail{max-width:none}
  .sd-fbar .sd-search{max-width:none}
}

/* ---- Sevkiyat DETAY (A3) — yapışkan nav · üst bant · büyük yaşam döngüsü rayı · aksiyonlar ---- */
.sd-detail-nav{position:sticky;top:0;z-index:15;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:8px 0;margin-bottom:8px;background:var(--ground)}
.sd-band{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:16px;align-items:center;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm);
  padding:16px 18px 16px 22px;overflow:hidden;margin-bottom:16px}
.sd-band-tags{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:8px}
.sd-band-vin{font-weight:600;font-size:13.5px;word-break:break-all;color:var(--muted);font-variant-numeric:tabular-nums;
  letter-spacing:.02em}   /* K312: mono sınıfı KALKTI (sans miras) — FAZ 3'ün kimlik kalıbıyla AYNI */
/* K312 — silinen talep/fotoğraf tablolarındaki ŞASİ hücresi (kimlik gösterimi · ham veri DEĞİL). */
.vin-id{font-variant-numeric:tabular-nums;letter-spacing:.02em}
.sd-band-model{font-size:16px;font-weight:600;margin-top:0}
.sd-band-sub{font-size:12px;margin-top:3px}
.sd-band-due{text-align:right;white-space:nowrap}
.sd-band-due-lbl{font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.sd-band-due-num{font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;margin-top:2px}
.sd-band-due.late .sd-band-due-num{color:var(--warn)}
.sd-band-due.soon .sd-band-due-num{color:var(--amber)}
.sd-band-due-sub{font-size:12px;margin-top:2px}
.sd-band-hasar{grid-column:1/-1;margin:12px -18px -16px -22px;padding:10px 22px;background:var(--warn-soft);
  color:var(--warn);font-size:12px;font-weight:700;border-top:1px solid var(--warn)}
.sd-railcard{padding:16px 18px;margin-bottom:16px}
.sd-railcard-lbl{font-size:12px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted);margin-bottom:12px}
.sd-bigrail{display:grid;grid-template-columns:repeat(auto-fit,minmax(88px,1fr));gap:12px;list-style:none;padding:0;margin:0}
.sd-bigrail-bar{display:block;height:6px;border-radius:3px;background:var(--line)}
.sd-bigrail-name{font-size:13.5px;font-weight:600;margin-top:7px}
.sd-bigrail-name.on{font-weight:600}
.sd-bigrail-name.fut{color:var(--muted)}
.sd-bigrail-when{font-size:12px;font-weight:400;margin-top:1px}
.sd-wnote{margin-top:12px;background:var(--amber-soft);color:var(--amber);border-radius:var(--radius-s);padding:9px 12px;font-size:12px;font-weight:600}
/* K282 (Emir · "aksiyon kartının yüksekliğini CİDDİ azalt"): kart 4 düğme için ~110px yer kaplıyordu —
   22px kart dolgusu (üst+alt 44px) + İKİ ayrı düğme satırı. Artık TEK saran satır (app.html) + kart-özel
   dolgu. ⛔ Düğme SAYISI/sırası/yetkisi DEĞİŞMEDİ · yıkıcı eylem (İptal et) hâlâ ikincil ve sonda.
   ⚠ K273 BUTON YÜKSEKLİĞİ KİLİDİ: ikincil punto 14.5→13.5 düşünce yükseklik düşer → .btn-sm tabanı
   5.5px'ten 6px'e çıkarılarak TELAFİ edildi (K278 topbar dersi: shorthand'i longhand'le telafi ederken
   varyantı unutma). Yükseklik ölçülür, varsayılmaz. */
.sd-actions{margin-bottom:16px;padding:12px 18px}
.sd-actions .btn-ghost{font-size:13.5px;font-weight:600;padding-top:6px;padding-bottom:6px}
@media (max-width:720px){
  .sd-band{grid-template-columns:1fr}
  .sd-band-due{text-align:left}
  .sd-actions{position:sticky;bottom:8px;z-index:12;box-shadow:var(--shadow)}
}

/* ===== TEST OTOMOBİLLERİ (test_drive · K216) — HAVUZ kartları ===== */
.form-grid > label{display:block;margin-bottom:12px;font-size:13.5px;color:var(--ink-soft);font-weight:600}
.form-grid > label > input,.form-grid > label > textarea{display:block;width:100%;margin-top:5px;font-weight:400}
.td-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px}
.td-card{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:13px 15px}
.td-main{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}
.td-info{min-width:0}
.td-plaka{font-size:16px;font-weight:700;letter-spacing:.02em;display:flex;align-items:center;flex-wrap:wrap}
.td-model{font-size:13px;margin-top:1px}
.td-holder{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}
.td-acts{display:flex;gap:6px;flex-wrap:wrap;align-items:flex-start}
.td-loglist{display:flex;flex-direction:column;gap:2px}
.td-logrow{padding:9px 2px;border-bottom:1px solid var(--line)}
.td-logrow:last-child{border-bottom:none}
@media (max-width:560px){ .td-grid{grid-template-columns:1fr} .td-main{flex-direction:column} }

/* ===== EKSPERTİZ KÖPRÜSÜ (K218) — satış bağı aday satırları ===== */
.ek-cand{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:8px 10px;border:1px solid var(--line);border-radius:8px;margin-bottom:6px}
.ek-cand-match{border-color:var(--ok);background:rgba(30,158,99,.06)}

/* ═══════════════ GLOBAL FLOATING SOHBET KATMANI (Faz 1) ═══════════════
   Launcher (sağ alt) + panel. z-index 260: busy-nudge (250) ÜSTÜNDE (görünür) · modal-overlay (300)
   ALTINDA (modal paneli bloklar — doğru). Panel MODAL DEĞİL: backdrop yok, body-scroll kilidi yok,
   arka sayfa kullanılmaya devam eder (spec md.20). Token'lar _tokens.css'ten (accent/radius/accent-soft). */
.cf-root{position:fixed;right:20px;bottom:20px;z-index:260;display:flex;flex-direction:column;align-items:flex-end;gap:12px;pointer-events:none}
.cf-root>*{pointer-events:auto}
.cf-launcher{width:52px;height:52px;border-radius:50%;border:1px solid var(--line);background:var(--accent);color:#fff;box-shadow:var(--shadow);cursor:pointer;display:flex;align-items:center;justify-content:center;position:relative;transition:transform .12s ease}
.cf-launcher:hover{transform:translateY(-1px)}
.cf-launcher:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.cf-launcher svg{width:24px;height:24px}
.cf-badge{display:none;position:absolute;top:-3px;right:-3px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--danger,#dc2626);color:#fff;font-size:10.5px;font-weight:700;line-height:18px;text-align:center;border:2px solid var(--surface);font-variant-numeric:tabular-nums}
.cf-badge.on{display:block}
/* Panel — launcher'ın üstünde, sağ-alta bağlı. Kapalıyken gizli. */
.cf-panel{display:none;flex-direction:column;width:380px;max-width:calc(100vw - 32px);height:560px;max-height:calc(100vh - 120px);max-height:calc(100dvh - 120px);background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.cf-root.cf-open .cf-panel{display:flex;animation:cf-in .16s ease}
@keyframes cf-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.cf-header{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--line);flex-shrink:0}
.cf-h-left{display:flex;align-items:center;gap:8px;min-width:0}
.cf-h-title{font-size:16px;font-weight:700;color:var(--ink)}
.cf-h-ctx{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cf-h-name{font-size:14px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cf-h-acts{display:flex;align-items:center;gap:2px;flex-shrink:0}
.cf-ic-btn{width:30px;height:30px;border-radius:8px;border:0;background:transparent;color:var(--muted);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:16px;line-height:1}
.cf-ic-btn:hover{background:var(--surface-2);color:var(--ink)}
.cf-ic-btn:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
/* Body — iki state: liste (varsayılan) ↔ konuşma (.cf-conv-on) — AYNI panelde client-side geçiş (md.6) */
.cf-body{flex:1;min-height:0;position:relative}
.cf-list{position:absolute;inset:0;overflow-y:auto;padding:6px 8px;display:flex;flex-direction:column}
.cf-conv{position:absolute;inset:0;display:none;flex-direction:column;min-height:0}
.cf-panel.cf-conv-on .cf-list{display:none}
.cf-panel.cf-conv-on .cf-conv{display:flex}
.cf-grp{display:flex;align-items:center;justify-content:space-between;padding:10px 8px 3px;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.cf-grp-add{width:20px;height:20px;border-radius:6px;border:1px solid var(--line);background:transparent;color:var(--muted);cursor:pointer;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center}
.cf-grp-add:hover{background:var(--surface-2);color:var(--ink)}
.cf-empty{font-size:12px;color:var(--muted);padding:2px 10px 6px}
.cf-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:8px;border:0;background:transparent;border-radius:10px;cursor:pointer}
.cf-row:hover{background:var(--surface-2)}
.cf-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
/* B1 — ÖNİZLEME İKİ SATIRLI YAPAR: üst satır ad+saat, alt satır önizleme. Önizleme YOKSA öğe hiç
   eklenmez → satır tek satır kalır (⛔ boş yer tutucu/"—" yok). */
.cf-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.cf-row-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cf-row-prev{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cf-row-name{font-size:14.5px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cf-row-time{font-size:12px;color:var(--muted);flex-shrink:0}
.cf-row-badge{min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--danger,#dc2626);color:#fff;font-size:10.5px;font-weight:700;line-height:18px;text-align:center;flex-shrink:0;font-variant-numeric:tabular-nums}
.cf-openall{margin:8px;padding:9px;border:1px solid var(--line);border-radius:10px;background:transparent;color:var(--accent);font-size:13.5px;font-weight:600;cursor:pointer}
.cf-openall:hover{background:var(--surface-2)}
.cf-msgs{flex:1;min-height:0;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:8px}
.cf-msg{max-width:82%;align-self:flex-start;background:var(--surface-2);border:1px solid var(--line);border-radius:12px;padding:6px 10px}
.cf-msg.mine{align-self:flex-end;background:var(--accent-soft);border-color:transparent}
.cf-msg-meta{font-size:10.5px;color:var(--muted);margin-bottom:2px}
.cf-msg-txt{font-size:13px;color:var(--ink);white-space:pre-wrap;word-break:break-word;line-height:1.4}
.cf-msg-img{max-width:200px;max-height:180px;border-radius:8px;margin-top:4px;display:block}
.cf-msg-file{font-size:12px;display:inline-block;margin-top:4px;color:var(--accent)}
.cf-info{font-size:12px;color:var(--muted);padding:2px 12px}
.cf-filenote{font-size:12px;color:var(--muted);padding:2px 12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cf-composer{display:flex;gap:8px;align-items:flex-end;padding:10px 12px;border-top:1px solid var(--line);flex-shrink:0}
.cf-ta{flex:1;resize:none;font-size:13px;font-family:inherit;border:1px solid var(--line);border-radius:10px;padding:8px 10px;background:var(--surface);color:var(--ink);max-height:96px;line-height:1.4}
.cf-ta:focus{outline:none;border-color:var(--accent)}
/* busy-nudge (right:18 bottom:18) ile ÇAKIŞMA: nudge varken KAPALI launcher yukarı kayar (panel açıkken
   z-index panel>nudge zaten nudge'ı örter → yalnız :not(.cf-open) kaydırılır, panel zıplamaz). */
body:has(.busy-nudge) .cf-root:not(.cf-open){bottom:calc(20px + 172px)}
/* Mobil (≤640px): kapalı = köşe launcher · açık = neredeyse tam ekran sheet (iki-state korunur, yatay overflow YOK) */
@media(max-width:640px){
  .cf-root{right:14px;bottom:14px;gap:10px}
  body:has(.busy-nudge) .cf-root:not(.cf-open){bottom:calc(14px + env(safe-area-inset-bottom,0px) + 150px)}
  /* B3 (15 Ağu · D3 ONAYLI · Emir: "sheet topbar'ı örtmesin") — sohbet bir UYGULAMA değil, bir MODÜL:
     tam ekran mod kullanıcıyı modül gezinmesinden, Müsait/Meşgul anahtarından ve Çıkış'tan koparıyordu.
     Sheet artık topbar'ın ALTINDAN başlar. ⚠ Yükseklik ÖLÇÜLDÜ, varsayılmadı: topbar 1280'de 78px,
     768/414'te 120px, 375'te 153px (flex-wrap). `.side`in `calc(60px + var(--safe-top))` sabiti
     KOPYALANMADI — dar ekranda 93px eksik kalırdı. `--topbar-h` app.html'de ResizeObserver ile yazılır;
     değişken yoksa (JS gelmeden) 60px'e düşer (yalnız ilk boyamada, güvenli taraf). */
  .cf-root.cf-open{right:0;left:0;top:var(--topbar-h,60px);bottom:0;align-items:stretch}
  .cf-root.cf-open .cf-launcher{display:none}
  /* A2/Bulgu 2 (15 Ağu) — K363'ün düzeltmesi bu sheet'e UĞRAMAMIŞTI: çıplak `100vh` mobil tarayıcı/PWA
     çubuklarını saymaz → gönder çubuğu klavyenin altında kalır, başlık durum çubuğuna girer. Desen İCAT
     EDİLMEDİ, `.modal`ınki (satır 446/462) ve `.sh-wrap`ınki (K363) AYNEN kopyalandı: `vh` yedek + `dvh`
     üstüne + safe-area dolgusu. `box-sizing:border-box` şart — dolgu yüksekliği taşırmasın. */
  /* ⚠ B3: yükseklik artık TAM EKRAN değil, topbar'ın altındaki alan. `padding-top:env(safe-area-inset-top)`
     KALKTI — üst güvenli alanı ARTIK TOPBAR kaplıyor (sheet onun altında başlıyor), ikinci kez dolgu
     eklemek boşluk üretirdi. Alt safe-area dolgusu DURUYOR (gönder çubuğu ev göstergesinin altına girmesin). */
  .cf-panel{width:100vw;max-width:100vw;
    height:calc(100vh - var(--topbar-h,60px));height:calc(100dvh - var(--topbar-h,60px));
    max-height:calc(100vh - var(--topbar-h,60px));max-height:calc(100dvh - var(--topbar-h,60px));
    border-radius:0;border:0;box-sizing:border-box;padding-bottom:env(safe-area-inset-bottom,0px)}
  /* Dokunma hedefi ≥44 (Yeni Yüzey Kontrol Listesi) — sheet'te başlık ikonları ve grup + düğmesi
     masaüstündeki 30/20px'te kalıyordu; parmak için yetersiz. Masaüstü ölçüleri DEĞİŞMEDİ (media içi). */
  .cf-ic-btn{width:44px;height:44px}
  .cf-grp-add{width:44px;height:44px}
}

/* ── SOHBET FAZ 3 (K363) — PARÇA 4: düzen CSS'e taşındı (satır-içi stile media query YAZILAMAZ; eski
   düzen teknik olarak duyarlı hâle getirilemezdi). Eşik KAPSAYICIYA bağlı (@container · mvlist emsali) —
   kenar çubuğu açıkken 1000px pencere de dar sayılır (A0 dersi). ⛔ overflow-x:hidden YOK. */
.sh-host{min-width:0;container-type:inline-size;container-name:sohbet}
/* ---- SOHBET INBOX (K384 · A-2/A-3/K-8) ---------------------------------------------------------
   Inbox üstü: başlık + ad araması + üç sekme. Dokunma hedefi ≥44 (mobilde de kullanılır).
   ⛔ Yeni tipografi ölçeği icat edilmedi — EK-1 değişkenleri. */
.sh-inbox-h{padding:10px 12px 6px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px;position:sticky;top:0;background:var(--surface);z-index:1}
.sh-inbox-t{font-weight:700;font-size:var(--tx-h2)}
.sh-ara{width:100%;min-width:0;min-height:36px;padding:7px 9px;border:1px solid var(--line);border-radius:var(--radius-xs);
  background:var(--ground);color:var(--ink);font:inherit;font-size:var(--tx-sec)}
.sh-tabs{display:flex;gap:6px;flex-wrap:wrap}
.sh-grp{font-size:var(--tx-micro);text-transform:uppercase;letter-spacing:.04em;color:var(--muted);
  padding:10px 12px 2px;display:flex;justify-content:space-between;align-items:center}
.sh-bos{font-size:var(--tx-sec);color:var(--muted);padding:14px 12px}
/* "N yeni mesaj ↓" — konuşmanın DİBİNDE yüzer; ⛔ global unread rozetiyle karıştırılmaz (F-2). */
.sh-yeni-kap{position:relative;height:0}
.sh-yeni{position:absolute;right:14px;bottom:6px;z-index:2;min-height:36px;box-shadow:0 2px 10px rgba(0,0,0,.14)}
/* Dar kapsayıcıda arama VE sekmeler dokunma hedefi (≥44) — 36px "görsel olarak yeter" sanılmıştı,
   ölçüm (verify_sohbet_mobile 375px) aksini gösterdi. Sekme bir DÜĞMEDİR, etiket değil. */
@container sohbet (max-width:640px){ .sh-ara{min-height:44px} .sh-tabs .btn{min-height:44px;padding-inline:12px} }

.sh-wrap{display:flex;gap:0;padding:0;overflow:hidden;min-height:380px;height:calc(100vh - 150px);height:calc(100dvh - 150px)}
.sh-side{width:230px;border-right:1px solid var(--line);display:flex;flex-direction:column;overflow-y:auto;flex-shrink:0}
/* ⚠ A-1 ÇEKMECE: `position:relative` ŞART — çekmece OVERLAY olarak BUNUN İÇİNDE konumlanır.
   Üçüncü bir kolon açılsaydı çekmece açılınca konuşma DARALIR, mesajlar yeniden akardı (satır kayması). */
.sh-pane{flex:1;display:flex;flex-direction:column;min-width:0;position:relative}

/* ═══ A-1 ÇEKMECE (drawer) — OVERLAY, GRID KOLONU DEĞİL ═══════════════════════════════════
   ⛔ `.sh-list` genişliği çekmece açılınca DEĞİŞMEZ (bekçi üç genişlikte ÖLÇER).
   Varsayılan KAPALI: `.sh-drawer` yalnız `.on` ile görünür (⛔ görünmezliği opacity ile taklit YOK —
   kapalıyken tarayıcı için de YOKTUR: `visibility:hidden` + pointer-events:none). */
/* ⛔ ÇEKMECE TAM GENİŞLİK OLAMAZ — "dışarı tık" bir ÇIKIŞ YOLUDUR, süs değil.
   İlk hâli dar ekranda `width:100%` idi: çekmece paneli TAMAMEN kaplıyordu → tıklanacak "dışarısı"
   KALMIYORDU (bekçi bunu yakaladı: tık `.sh-drawer-h`'ye çarpıyor). Kabul kriteri "Esc + dışarı tık
   kapatır" ise, dışarısı HER GENİŞLİKTE var olmak ZORUNDADIR. Bu yüzden çekmece daima
   `--sh-cikis` kadar (≥44px · K359 dokunma hedefi) yer BIRAKIR — o şerit arka katmandır (kapatır).
   ⛔ Şeridi 44'ün altına indirme: dokunma hedefi ölçülüyor (bekçi üç genişlikte sayıyla sınıyor). */
.sh-drawer{--sh-cikis:44px;
  position:absolute;top:0;right:0;bottom:0;width:min(320px,calc(100% - var(--sh-cikis)));z-index:3;
  background:var(--surface);border-left:1px solid var(--line);display:flex;flex-direction:column;
  transform:translateX(100%);visibility:hidden;pointer-events:none;transition:transform .16s ease}
.sh-drawer.on{transform:translateX(0);visibility:visible;pointer-events:auto}
.sh-drawer-h{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:10px 12px;border-bottom:1px solid var(--line)}
.sh-drawer-body{padding:12px;overflow-y:auto;flex:1;min-height:0}
.sh-drawer-satir{display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:7px 0;border-top:1px solid var(--line);font-size:13px}
.sh-drawer-ara{width:100%;box-sizing:border-box}
.sh-drawer-sonuc{margin-top:8px;display:flex;flex-direction:column;gap:8px}
.sh-drawer-hit{border:1px solid var(--line);border-radius:8px;padding:6px 8px;background:var(--surface-2)}
/* DIŞARI TIK yakalayıcı — çekmece açıkken konuşmanın üstünde şeffaf katman. */
.sh-drawer-arka{position:absolute;inset:0;z-index:2;background:transparent}
.sh-info-btn{flex-shrink:0}
@container sohbet (max-width:640px){
  /* Dar ekranda çekmece kalan genişliği kaplar AMA çıkış şeridini BIRAKIR (yukarıdaki gerekçe).
     ⛔ `width:100%` DEĞİL — dışarı tık yolu kapanırdı. Yatay kaydırma yine ÜRETİLMEZ. */
  .sh-drawer{width:calc(100% - var(--sh-cikis));border-left:none}
  .sh-drawer-h .btn,.sh-info-btn{min-height:44px;min-width:44px}
  .sh-drawer-ara{min-height:44px}
}
/* ═══ K417 (C1) — SOHBET ARAÇ KARTI. TEK TANIM, İKİ YÜZEY (tam sayfa Sohbet + kayan panel). ═══
   Baloncuğun İÇİNDE durur → kendi arka planını `--surface`tan alır (baloncuk zemini değişkendir:
   kendi mesajı accent-soft, karşı taraf surface-2 — kart ikisinde de okunur kalmalı).
   ⛔ px tipografi EK-1 ölçeği dışına çıkmaz · ağırlık yalnız 400/500/600/700 (verify_font_lock). */
.sh-arac{margin-top:5px;border:1px solid var(--line);border-radius:8px;padding:6px 9px;
  background:var(--surface);display:flex;flex-direction:column;gap:1px;min-width:0}
.sh-arac-bas{font-size:13px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sh-arac-alt{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis}
/* Fiyat NÖTR tonda — ⛔ anlam rengi (yeşil/kırmızı) YOK: fiyat iyi/kötü bir olgu değildir. */
.sh-arac-fiyat{font-size:13px;font-weight:600;font-variant-numeric:tabular-nums;margin-top:2px}
.sh-arac-yok{color:var(--muted)}
/* ═══ A-7 KONUŞMA SÜTUNU GENİŞLİĞİ (19 Ağu · Emir) — max-width + ORTALANMIŞ ══════════════════
   ⛔ Öncesi SINIRSIZDI: 1440px'lik ekranda balon `78%` × ~1120px kap = ~874px genişliğe kadar
   uzuyordu → 13.5px gövdede satır başına ~130 karakter. Rahat okuma ölçüsü 45–90 karakterdir;
   göz satır sonundan satır başına dönerken SATIRI KAYBEDER (uzun satır = okuma hatası).
   ⚠⚠ ÖLÇÜM VARSAYIMI DÜZELTTİ (`verify_sohbet_mobile` · gerçek Chromium · dört genişlik):
   sütunun kabı VİEWPORT DEĞİL, `.sh-pane`dir — kenar çubuğu + inbox kolonu payı düşülür:
     viewport → KAP(.sh-pane) → SÜTUN(.sh-list) → balon(78%) → ~karakter (13.5px)
       375    →  341          →  341 (sınır ETKİSİZ) →  266 →  ~42
      1024    →  502          →  502 (sınır ETKİSİZ) →  392 →  ~61
      1440    →  918          →  900 (SINIR DEVREDE) →  702 → ~110   (kırpma 18px)
      1920    → 1028          →  900 (SINIR DEVREDE) →  702 → ~110   (kırpma 128px)
   Yani sınır ancak ~1440'tan itibaren devreye giriyor ve asıl işini ULTRA GENİŞ ekranda yapıyor:
   sınırsız hâlde 1920'de balon ~802px → ~125 karakter olurdu (rahat okuma ölçüsü 45–90).
   SEÇİM 900: Emir'in bandı 850–950'nin MERKEZİ (850 → balon ~663px ~104 kr · 950 → ~741px ~116 kr);
   bandın içinde kalırken en geniş ekranda en çok kırpan uç.
   ⚠ AÇIK KALAN (Emir'e): 900'de bile balon ~110 karakter — asıl kaldıraç SÜTUN DEĞİL, balonun
     `78%`idir. Onu daraltmak mesaj hizalamasını (ben sağda / karşı taraf solda) ve baloncuk
     oranlarını değiştirir → BU TURUN KAPSAMI DIŞI, ayrı karar. */
.sh-list{flex:1;overflow-y:auto;padding:8px 12px;display:flex;flex-direction:column;gap:8px;
  width:100%;max-width:900px;margin-inline:auto;box-sizing:border-box}
/* ═══ GÜN AYRACI (19 Ağu · Emir) — İKİ YÜZEYDE de aynı olgu, ayrı geometri (K-6 sınırı) ═══════
   ⛔ Ayraç YOKKEN saat GERİYE gidiyordu (15:02'nin altında 13:59) ve kullanıcı farklı günleri TEK
   AKIŞ sanıyordu. Nötr çizgi + ortada etiket; ⛔ anlam rengi YOK (gün bir uyarı değildir). */
.sh-gun,.cf-gun{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:12px;
  align-self:stretch;margin:2px 0}
.sh-gun::before,.sh-gun::after,.cf-gun::before,.cf-gun::after{content:"";flex:1;height:1px;background:var(--line)}
.sh-gun span,.cf-gun span{white-space:nowrap}
/* A-5 — inbox satırı: son mesaj saati (sağda, sabit) + yapısal kanal işareti (# · emoji DEĞİL). */
.sh-row-time{font-size:11px;color:var(--muted);flex-shrink:0;font-variant-numeric:tabular-nums}
.sh-row-mark{color:var(--muted);flex-shrink:0}
/* K-6 — kayan panelde reaksiyon + okundu: ALAN mantığı ORTAK, geometri BURADA (daha dar panel). */
.cf-reak{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}
.cf-reak button{border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:1px 6px;font-size:12px;cursor:pointer;line-height:1.5}
.cf-reak button.mine{border-color:var(--accent);background:var(--accent-soft,#e0ecff)}
.cf-okundu{font-size:11px;color:var(--muted);align-self:flex-end;margin-top:2px}
.sh-bar{display:flex;gap:8px;align-items:flex-end;padding:8px 12px;border-top:1px solid var(--line)}
.sh-bar textarea{flex:1;resize:none;font-size:13px}
.sh-back{display:none}
.sh-row{padding:7px 12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:6px}
/* B1 — ad + önizleme dikey istif. `min-width:0` ŞART: esnek kolonun TABANI yazılmazsa içerik kabı taşırır (K359). */
.sh-row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.sh-row-prev{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sh-row.on{background:var(--surface-2);font-weight:600}
.sh-reak{display:flex;gap:4px;flex-wrap:wrap;margin-top:4px}
.sh-reak button{border:1px solid var(--line);background:var(--surface);border-radius:10px;padding:1px 7px;font-size:12px;cursor:pointer;line-height:1.5}
.sh-reak button.mine{border-color:var(--accent);background:var(--accent-soft,#e0ecff)}
.sh-okundu{font-size:11px;color:var(--muted);align-self:flex-end;margin-top:2px}
@container sohbet (max-width:640px){
  /* TEK PANEL: liste ↔ konuşma (Satışlar mobil deseniyle aynı dil — aynı anda ikisi değil). */
  .sh-side{width:100%;border-right:none}
  .sh-pane{display:none}
  .sh-wrap.sh-conv-on .sh-side{display:none}
  .sh-wrap.sh-conv-on .sh-pane{display:flex}
  .sh-back{display:inline-flex}
  /* Dokunma hedefleri ≥44px (kanal satırı · gönder/dosya · reaksiyon). */
  .sh-row{min-height:44px}
  .sh-bar .btn{min-height:44px;min-width:44px}
  .sh-reak button{min-height:32px;min-width:40px}
  /* A-7: dar ekranda sütun sınırı ETKİSİZ kalır (kap zaten 900'ün altında) — kural yine de burada
     yazılı DEĞİL: `max-width` doğal olarak devre dışı. Ek kural yazmak ölü CSS olurdu. */
}
/* Kayan panelde reaksiyon dokunma hedefi (panel dar · dokunmatik) — ⛔ 44 altına inen tek yer değil,
   tam sayfadaki `.sh-reak button` ile AYNI ölçü (32×40): reaksiyon çipi metin değil düğmedir. */
@media (max-width:640px){ .cf-reak button{min-height:32px;min-width:40px} }

/* ═══ VARDİYA PLANLAMA — takvim ızgarası + mobil satır kartı (K377 · İş 4) ═══════════════
   ⛔ YATAY KAYDIRMA ÇÖZÜM DEĞİL, TESLİMİYETTİR (mobil doktrini): 7 gün × sabit hücre + isim
   kolonu telefona SIĞMAZ → ölçüldü (375px'te ızgara ~608px isterdi) → dar ekranda ızgara
   BIRAKILIR, SATIR KARTI'na geçilir (kişi başına bir kart, günler içinde çip olarak).
   Eşik VIEWPORT'a değil KAPSAYICIYA bağlı olamaz (CSS media query yok container query yok
   bu projede) → app.html ölçtüğü genişliğe göre iki desenden BİRİNİ çizer; CSS ikisini de tanır. */
.vp-grid{display:grid;gap:3px;align-items:stretch}
.vp-h{font-size:12px;font-weight:600;color:var(--muted);text-align:center;padding:4px 2px;
  line-height:1.2;overflow-wrap:anywhere}
.vp-h .vp-d{display:block;font-size:14.5px;color:var(--ink);font-variant-numeric:tabular-nums}
/* Kadro ihlali GÜN BAŞLIĞINDA işaretlenir — ⛔ KIRMIZI YALNIZ GERÇEK OLUMSUZLUK (kadro açığı),
   durumların hiçbiri kırmızı değildir (izin bir kusur değil). */
.vp-h.vp-ihlal{color:var(--warn)}
.vp-h.vp-ihlal .vp-d{color:var(--warn)}
.vp-name{display:flex;align-items:center;gap:8px;min-width:0;padding:6px 8px 6px 0;font-size:13.5px}
.vp-name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vp-cell{border:1px solid var(--line);border-radius:var(--radius-xs);min-height:44px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
  font-size:12px;line-height:1.15;text-align:center;padding:3px 2px;background:var(--surface);
  color:var(--ink);cursor:default;overflow-wrap:anywhere}
button.vp-cell{cursor:pointer;font-family:inherit}
button.vp-cell:hover{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent-soft) inset}
.vp-cell .vp-k{font-size:12px;color:var(--muted)}          /* kaynak rozeti (elle/takas) */
/* Altı durum — RENK ANLAMDIR, süs değil: çalışma nötr, izinler ayrı tonlar, kırmızı YOK. */
.vp-s-calisiyor{background:var(--surface);border-color:var(--line-2);font-weight:600}
.vp-s-hafta_tatili{background:var(--surface-2);color:var(--muted)}
.vp-s-yillik_izin{background:var(--accent-soft);color:var(--accent-ink);border-color:transparent}
.vp-s-resmi_tatil{background:var(--teal-soft);color:var(--teal);border-color:transparent}
.vp-s-raporlu{background:var(--amber-soft);color:var(--amber-ink);border-color:transparent}
.vp-s-diger_izin{background:var(--slate-soft);color:var(--slate);border-color:transparent}
/* MOBİL SATIR KARTI — ızgara sığmadığında (yatay kaydırma yerine yapısal çözüm). */
.vp-card{border:1px solid var(--line);border-radius:var(--radius-s);padding:10px 12px;margin-bottom:8px;
  background:var(--surface)}
.vp-card-h{display:flex;align-items:center;gap:8px;margin-bottom:8px;min-width:0}
.vp-card-h .vp-nm{font-size:14.5px;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vp-days{display:flex;flex-wrap:wrap;gap:6px}
.vp-day{border:1px solid var(--line);border-radius:var(--radius-xs);padding:6px 8px;min-width:44px;min-height:44px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:12px;
  line-height:1.15;background:var(--surface);color:var(--ink);font-family:inherit}
button.vp-day{cursor:pointer}
.vp-day b{font-size:12px;font-weight:600;font-variant-numeric:tabular-nums}
.vp-lgnd{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.vp-lgnd span{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--muted)}
.vp-lgnd i{width:12px;height:12px;border-radius:3px;border:1px solid var(--line);display:inline-block}
/* K404 — EKSİK araç vurgusu: aksiyon gerektiren hücre. ⛔ Kırmızı DEĞİL (gerçek olumsuzluk değil,
   yapılacak iş); kehribar "dikkat" der. 0 eksik hiçbir vurgu almaz (nötr hâl uyarı rengine düşmez). */
.sm-tbl.ak-tbl td.ak-eksik{color:var(--amber);font-weight:600}
.ak-card-det .ak-eksik{color:var(--amber);font-weight:600}
/* K406 — KAÇAN ARAÇ: sayıdan araca gitmenin bağlantısı. Buton görünümü DEĞİL, metin bağlantısı
   (tablo hücresi içinde düğme gürültü yapar); kehribar = aksiyon gerektiren, ⛔ kırmızı değil. */
.ak-link{background:none;border:0;padding:0;font:inherit;color:var(--amber);font-weight:600;
  cursor:pointer;text-decoration:underline;text-underline-offset:2px;font-variant-numeric:tabular-nums}
.ak-link:hover{color:var(--ink)}
/* ═══ K419 — TABAN ROZETİ + TABAN BAŞLIĞI. "Her sayacın tabanı ekranda" (Görev 3): aynı ada sahip
   iki farklı sayı olmasın diye her öbek hangi eksende ölçüldüğünü YAZAR.
   ⛔ ANLAM RENGİ YOK — taban iyi/kötü bir olgu değildir; rozet nötr (muted) kalır, kırmızı/yeşil
   yalnız gerçek olumsuzluk/başarı içindir (K359 renk kilidi).
   ⛔ EK-1 ölçeği dışına çıkılmaz · ağırlık yalnız 400/500/600/700 (verify_font_lock). */
.ak-rozet{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:999px;
  border:1px solid var(--line);background:var(--surface-2);color:var(--muted);
  font-size:12px;font-weight:500;white-space:nowrap;vertical-align:middle}
.ak-taban-bas{display:flex;align-items:center;gap:2px;flex-wrap:wrap;font-size:13px;margin:2px 0 6px}
.sm-tbl.ak-tbl td.ak-kacan{font-weight:600}
.ak-card-det .ak-kacan{color:var(--amber);font-weight:600}
/* K407 — KATALOG DÜRÜSTLÜK ŞERİDİ. Kehribar: "bu ekranın ürün kırılımı şu oranda eksik" der; bu bir
   VERİ KALİTESİ uyarısıdır, gerçek olumsuzluk değil → ⛔ kırmızı DEĞİL. Eşleşmeyen satır yoksa şerit
   hiç çizilmez (bu sınıf da kullanılmaz) — "her şey yolunda" kutusu basılmaz. */
.ak-kat{display:flex;gap:10px;align-items:flex-start;flex-wrap:wrap;padding:10px 12px;margin-bottom:12px;
  background:var(--amber-soft);border:1px solid color-mix(in srgb,var(--amber) 25%,transparent);
  border-radius:var(--radius-s);font-size:12px;line-height:1.6}
.ak-kat-tx{flex:1 1 260px;min-width:0}
.ak-kat b{color:var(--amber)}
.ak-kat .btn{flex:none}
/* K407 — ŞUBE ÜRÜN KARMASI. Ad esner, sayılar sabit ve sağa dayalı (ak-tbl ile aynı hizalama
   istisnası: tutar basamak sayıları çok farklı). ⛔ minmax(0,1fr) — esnek kolonun TABANI yazılır,
   yoksa uzun ürün adı kabı taşırır (K359 düzen maddesi). */
.ak-mix-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;align-items:baseline;
  padding:6px 0;border-bottom:1px solid var(--line);font-size:12px}
.ak-mix-nm{min-width:0;display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}
.ak-mix-nm span{min-width:0;overflow-wrap:anywhere}
.ak-mix-val{white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right}
.ak-mix-bar{grid-column:1/-1;height:4px;border-radius:2px;background:var(--line);overflow:hidden}
.ak-mix-bar i{display:block;height:100%;background:var(--accent)}
.ak-mix-kuyruk{color:var(--muted)}
/* ⚠⚠ K443 (§8 ÇELİŞKİ · envanterde bulundu) — BURADA `.ak-rozet` İKİNCİ KEZ TANIMLIYDI ve kehribar
   boyuyordu. Sonuç: K419'un NÖTR olması gereken TABAN ROZETİ ile "yalnız kendi araçlarım" kapsam
   rozeti de canlıda KEHRİBAR çiziliyordu → "anlam renkleri kilitli" ihlali (taban bir olumsuzluk
   DEĞİLDİR; kapsam bildirimi de öyle). ⛔ İkinci tanım bir MODIFIER'a çevrildi: taban/kapsam rozeti
   nötr kalır, YALNIZ veri kalitesi işareti (katalog dışı · Eşleşmemiş) kehribar taşır. */
.ak-rozet-uy{background:var(--amber-soft);color:var(--amber);border-color:transparent;font-weight:600}
/* ═══ K443 (§2) — ÜÇ KADEMELİ HİYERARŞİ: 1A > 1B > ikincil şerit ═══════════════════════════════
   ⛔ Eskiden yedi KPI kutusu AYNI puntodaydı (20/700): "aynı gerçeği iki kez ilan etmek" (§2.1).
   Ölçek EK-1'den gelir — ⛔ yeni değer üretilmedi: 24 (sayfa başlığı kademesi) · 20 (mevcut kpiKut
   değeri) · 14.5 (body). Üç kademe böylece MEVCUT ölçekten okunur. */
.ak-hero{padding:14px 16px;margin-bottom:10px}
.ak-hero-num{font-size:24px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.15}
.ak-hero2-num{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;line-height:1.15}
.ak-hero-alt{font-size:13.5px;color:var(--muted);margin-top:2px;line-height:1.5}
/* İkincil şerit — kahramanla YARIŞMAZ (14.5/600). ⛔ Bilgi kaybolmaz, yalnız kademe düşer. */
.ak-mini{display:flex;gap:8px 18px;flex-wrap:wrap;padding:10px 12px;margin-bottom:12px}
.ak-mini-i{min-width:0}
.ak-mini-lab{font-size:12px;color:var(--muted);white-space:nowrap}
.ak-mini-val{font-size:14.5px;font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
/* §6 — İÇE AKTARIM ÜÇ AŞAMA ŞERİDİ. ⛔ Dekoratif renk yok: aktif adım marka mavisi (aksiyon/seçim),
   diğerleri nötr. Adım numarası bir DURUM değil, bir SIRA — semantik renk almaz. */
.ak-adim{display:flex;gap:8px;flex-wrap:wrap;align-items:center;font-size:12px;margin-bottom:10px}
.ak-adim-i{display:inline-flex;align-items:center;gap:6px;color:var(--muted)}
.ak-adim-n{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;
  border-radius:999px;border:1px solid var(--line);font-weight:600;font-size:12px;flex:none}
.ak-adim-on{color:var(--ink);font-weight:600}
.ak-adim-on .ak-adim-n{border-color:var(--accent);color:var(--accent)}
/* Dosya adı iki satırı geçmez (§6.3) — tam ad `title` ile erişilir. */
.ak-dosya{display:block;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ═══ K452 — ARAÇ KORUMA ÇALIŞMA LİSTESİ (müşteri kolonu + 375 kartı · Emir mockup'ı 21 Ağu) ═══ */
/* ⭐ MÜŞTERİ TEK SATIR: kurumsal adlar uzun ("Cansuca Tekstil Ticaret Ltd. Şti.") → ellipsis +
   `title` ile tam ad. ⛔ İki satıra SARMAZ; satır yüksekliği SABİT kalır (mockup kilidi).
   ⚠ `min-width:0` ZORUNLU: esnek/tablo hücresinde taban yazılmazsa ellipsis ÇALIŞMAZ ve içerik
   kolonu TAŞIRIR (K359 "esnek kolonun TABANI yazılır" maddesi). */
.ak-cust{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:100%;font-size:12px;font-weight:600}
.ak-adv{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
/* "kayıt bekliyor" İKİNCİ ROZET DEĞİL: satış durumu ile AYNI görsel ağırlıkta olamaz (iki ayrı eksen).
   Nokta + metin — çip değil. Renk kehribar: gerçek bir eksiklik ama "aksiyon al" kırmızısı değil. */
.ak-flag{display:inline-flex;align-items:center;gap:4px;margin-left:6px;font-size:12px;color:var(--amber)}
.ak-flag::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--amber);flex:0 0 auto}
/* ⭐ "+ Ürün" 36 satırda tekrar etmez: masaüstünde satır HOVER'ında belirir.
   ⚠ `visibility` kullanılır (⛔ `display:none` DEĞİL): hücre genişliği sabit kalır, satır zıplamaz.
   ⚠ `:focus-within` ŞART — klavyeyle gezen kullanıcı hover üretemez; düğme odakta GÖRÜNÜR olmalı. */
@media (hover:hover){
  .ak-tbl .ak-rowact{visibility:hidden}
  .ak-tbl tr.ak-row:hover .ak-rowact,.ak-tbl tr.ak-row:focus-within .ak-rowact{visibility:visible}
}
/* ── 375 KART GÖRÜNÜMÜ (bu ekranda YOKTU — dar ekranda tablo yatay kayıyordu) ──
   ⛔ "Yatay kaydırma çözüm değil, teslimiyettir" (CLAUDE.md). Kart, tablonun AYNI yardımcılarını
   çağırır → iki yüzey ayrışamaz. `+ Ürün` kartta HER ZAMAN görünür (dokunmada hover YOKTUR). */
/* ⚠⚠ SINIF ADI AYRI (`ak-vcard*`): `.ak-card*` ZATEN Performans kartlarında kullanılıyor
   (_app.css:678-683). Aynı adı yeniden tanımlamak O YÜZEYİ SESSİZCE değiştirirdi — iki farklı
   kart, iki farklı sınıf ailesi. (Kap `.ak-cards` ORTAK kalır: mobil/masaüstü anahtarı TEK yerde.) */
.ak-vcard{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin-bottom:8px;background:var(--surface-1)}
.ak-vcard-top{display:flex;gap:10px;justify-content:space-between;align-items:flex-start}
.ak-vcard-meta{display:flex;gap:10px;justify-content:space-between;align-items:center;
  border-top:1px solid var(--line);margin-top:8px;padding-top:8px;font-size:12px;flex-wrap:wrap}
