/* MAYTRAS — Modül Kabuğu v2 (WP-H3-TEK-01-R · manifest cc-module-shell-002)
 *
 * ================================================================== *
 * NEDEN "-R" (YENİDEN TASARIM) — Yasin'in reddi, 16.09.2026 sabah:
 *   "Bununla bizim şu anda olanı kıyaslayınca dağlar kadar fark var.
 *    Bizim şu anki bundan çok daha güzel ama tek tipleşelim dedim,
 *    sen bunu komple basitleştirmişsin."
 * İlk sürüm 24 modülü ORTAK bir dile bağlarken zenginliği de düzleştirdi
 * (hero banner yok, tek tip gri kart, MAVİ birincil düğme, renk kodu yok).
 * Bu sürümün referansı: `docs/DESIGN/module-shell-v2/ref/*.png` —
 * yani MEVCUT modüllerin kendi zenginliği (A01 banner + turkuaz KPI +
 * sıcak krem eyebrow + altın sekme; A08 altı renkli KPI + altın stepper;
 * B04 modül-içi işlem menüsü + renkli hızlı işlem karoları) + Command
 * Center'ın (cc-v5) dili: ALTIN vurgu, turkuaz, cam paneller, derinlik.
 * "Tek tipleşme" = ortak dile bağlamak; DÜZLEŞTİRMEK DEĞİL.
 * ================================================================== *
 *
 * Stil grameri kaynakları (okundu, taşındı — sıfırdan icat edilmedi):
 *   · `dashboard/styles/gtos-module-premium.css` (.gtos-mp__banner hero,
 *     ::before gradyan çizgi, .gtos-mp-tab aktif sekme, panel hover glow)
 *   · `dashboard/styles/unified.css` (.module-workspace-agent-chip —
 *     "BU ALANIN UZMANI" çipi; yalnız OKUNDU, dosyaya dokunulmadı)
 *   · `dashboard/styles/cc-v5.css` (altın/lacivert cam dili — CC sahnesi)
 *
 * ------------------------------------------------------------------ *
 * BU DOSYA BUGÜN HİÇBİR YERE BAĞLI DEĞİL.
 * `dashboard/index.html`'e EKLENMEDİ; hiçbir modül henüz kullanmıyor.
 * Bağlama işi WP-H3-TEK-A/B/C dalgalarına aittir.
 * ------------------------------------------------------------------ *
 *
 * SABİT RENK YOK — TEK ÇEVİRME NOKTASI
 * Dosyada tek bir hex/rgb/rgba/hsl/`white`/`black` değeri yoktur. Saydamlık
 * her yerde `color-mix(in srgb, var(--…) N%, transparent)` ile üretilir.
 * `scripts/check-module-shell-v2.js` + `scripts/check-theme-contrast.js` ölçer.
 *
 * İKİ TEMA — TEK KURAL AĞACI:
 * Burada tek bir `html[data-theme='dark']` dalı YOKTUR. Tema çevrimi token
 * katmanında olur: `--gtos-c-*` hem `:root` (açık) hem `html[data-theme='dark']`
 * bloklarında AYRI tanımlıdır. Bu sürümde eklenen zenginlik tokenları da aynı
 * kuralı izler (WP-H3-TEK-01-R, `gtos-tokens.css` (4) bloğu):
 *   --gtos-c-brand         turkuaz vurgu   (açık: teal-700 · koyu: teal-300)
 *   --gtos-c-brand-soft    turkuaz zemin
 *   --gtos-c-surface-warm  SICAK KREM yüzey (koyu: altın çalımlı lacivert)
 *   --gtos-c-surface-glass CAM panel        (açık: düz yüzey · koyu: yarı saydam lacivert)
 *   --gtos-c-tone-violet / -purple / -orange  KPI renk kodları (A08 deseni)
 * Böylece açık tema sıcak krem/altın karakterini, koyu tema CC'nin
 * lacivert-cam-altın karakterini TEK bildirimden alır.
 *
 * `prefers-color-scheme` BİLEREK KULLANILMADI (tema = `data-theme`). Tek
 * istisna aşağıdaki `prefers-reduced-motion` bloğudur (erişilebilirlik).
 *
 * AD ALANI: `ms2-` / `.ms2`. Eski `gtos-mp*` katmanı SİLİNMEDİ ve bu dosya
 * onu override ETMEZ — dalga sırasında modül modül devralınır.
 */

/* ================================================================== *
 * KÖK — yerel takma adlar (tek çevirme noktası)
 * ================================================================== */

.ms2 {
  /* --- yüzey / metin (iki temada da doğru: --gtos-c-* tema duyarlıdır) --- */
  --ms2-bg: var(--gtos-c-bg);
  --ms2-surface: var(--gtos-c-surface);
  --ms2-surface-2: var(--gtos-c-surface-2);
  --ms2-glass: var(--gtos-c-surface-glass);
  --ms2-warm: var(--gtos-c-surface-warm);
  --ms2-ink: var(--gtos-c-text);
  --ms2-muted: var(--gtos-c-text-muted);
  --ms2-line: var(--gtos-c-border);
  --ms2-line-input: var(--gtos-c-border-input);

  /* --- vurgu / eylem ---
     BİRİNCİL EYLEM ALTINDIR (--ms2-accent-bg), mavi değil. Ref'lerdeki
     "Ara" düğmesi, aktif sekme ve aktif adım altın; mavi yalnız bilgi
     amaçlı "Nasıl Çalışır?" pilinde kalır (--ms2-action). */
  --ms2-accent: var(--gtos-c-accent);
  --ms2-accent-bg: var(--gtos-c-accent-bg);
  --ms2-on-accent: var(--gtos-c-on-accent);
  --ms2-accent-soft: var(--gtos-c-accent-soft);
  --ms2-brand: var(--gtos-c-brand);
  --ms2-brand-soft: var(--gtos-c-brand-soft);
  --ms2-action: var(--gtos-c-action);
  --ms2-action-bg: var(--gtos-c-action-bg);
  --ms2-on-action: var(--gtos-c-on-action);
  /* Odak halkasi bilerek ALTIN: acik temada --gtos-c-focus MAVI, o da
     birincil eylem rengiyle (altin) yarisiyordu. Kontrast korunur:
     bronze-700 zemin uzerinde 6,08 · gold-500 koyuda 9,42. */
  --ms2-focus: var(--gtos-c-accent);

  /* --- anlam (PSP-001 §5: anlam sabittir, dekorasyon değil) --- */
  --ms2-ok: var(--gtos-c-success);
  --ms2-warn: var(--gtos-c-warn);
  --ms2-bad: var(--gtos-c-danger);
  --ms2-info: var(--gtos-c-info);
  --ms2-ok-soft: var(--gtos-c-success-soft);
  --ms2-warn-soft: var(--gtos-c-warn-soft);
  --ms2-bad-soft: var(--gtos-c-danger-soft);
  --ms2-info-soft: var(--gtos-c-info-soft);

  /* --- renk kodu ailesi (A08 deseni: her KPI kartı farklı üst kenar) ---
     Anlam TAŞIMAZ, KİMLİK taşır: aynı kart her zaman aynı rengi alır.
     `--ms2-tone` her `--tone-*` sınıfında yeniden bağlanır; kartın üst
     kenarı, ikon çipi ve karo zemini TEK değişkenden beslenir. */
  --ms2-tone: var(--ms2-brand);
  --ms2-violet: var(--gtos-c-tone-violet);
  --ms2-purple: var(--gtos-c-tone-purple);
  --ms2-orange: var(--gtos-c-tone-orange);

  /* --- türetilmiş yüzeyler (yalnız color-mix; ham renk yok) --- */
  /* --- premium malzeme (WP-H3-TEK-01-P) — hepsi token, hepsi iki temali --- */
  --ms2-elev-1: var(--gtos-c-elev-1);
  --ms2-elev-2: var(--gtos-c-elev-2);
  --ms2-inner: var(--gtos-c-inner-highlight);
  --ms2-gold-grad: var(--gtos-c-gold-gradient);
  --ms2-sheen: var(--gtos-c-gold-sheen);
  /* Cam bulanikligi TEMA BASINA token'dan gelir: acik temada `none`
     (sifir maliyet), koyu temada blur(12px). Bilesen tek bildirim yazar. */
  --ms2-blur: var(--gtos-c-glass-blur);

  --ms2-hairline: color-mix(in srgb, var(--ms2-line) 86%, transparent);
  --ms2-zebra: color-mix(in srgb, var(--ms2-surface-2) 42%, transparent);
  --ms2-hover: color-mix(in srgb, var(--ms2-accent) 8%, transparent);
  --ms2-accent-line: color-mix(in srgb, var(--ms2-accent) 34%, transparent);
  --ms2-gold-edge: color-mix(in srgb, var(--ms2-accent) 26%, var(--ms2-line));
  --ms2-gold-glow: var(--gtos-c-glow-gold);
  /* DİKKAT — ton TÜREVLERİ burada TANIMLANMAZ.
     CSS Variables: bir özel özelliğin içindeki var() TANIMLANDIĞI elemanda
     çözülür, sonuç aşağı miras kalır. Kökte ton turkuaz olduğu için burada
     tanımlanacak bir "yumuşak ton" değişkeni, .ms2-kpi--violet üzerinde
     --ms2-tone yeniden bağlansa bile TURKUAZ kalırdı ve A08 renk kodlaması
     görsel olarak tek renge düşerdi. Türevler KULLANIM YERİNDE color-mix
     ile üretilir; orada --ms2-tone doğru değeri taşır. */

  /* --- tipografi (SSOT: gtos-tokens.css:303-304 — Inter + Space Grotesk) --- */
  --ms2-display: var(--gtos-font-display);
  --ms2-body: var(--gtos-font-sans);
  --ms2-mono: var(--gtos-font-mono);

  /* --- ölçüler --- */
  --ms2-aside: 340px;
  --ms2-ops: 232px;
  --ms2-gap: var(--gtos-space-5);
  --ms2-pad: var(--gtos-space-5);
  --ms2-radius: var(--gtos-radius-lg);

  /* Kabuk KENDI genisligine gore karar verir, viewporta gore degil.
     Kusur (v2-demo-sample-dark.png): 4. bolumdeki uc durum kabugu ~300-450px
     sutunlarda duruyordu; viewport 1440 oldugu icin medya sorgusu genis
     sanip ICERIK + YAN PANEL iki sutun kurdu ve kartlar ince-uzun serde
     cokup A06 hata karti ~3000px uzunluga cikti. Kapsayici sorgusu bunu
     yapisal olarak imkansiz kilar. */
  container-type: inline-size;
  container-name: ms2;

  display: flex;
  flex-direction: column;
  gap: var(--gtos-space-3);
  min-width: 0;
  color: var(--ms2-ink);
  font-family: var(--ms2-body);
  font-size: var(--gtos-text-sm);
  line-height: var(--gtos-leading);
}

.ms2 *,
.ms2 *::before,
.ms2 *::after {
  box-sizing: border-box;
}

/* Odak halkası TEK yerden gelir — her bileşende ayrı ayrı tanımlanmaz. */
.ms2 :focus-visible {
  outline: 2px solid var(--ms2-focus);
  outline-offset: 2px;
  border-radius: var(--gtos-radius-xs);
  box-shadow: 0 0 0 4px var(--ms2-gold-glow);
}

.ms2 [hidden] {
  display: none !important;
}

.ms2-visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* ================================================================== *
 * 0. DÜRÜSTLÜK ŞERİDİ — CANLI / ÖRNEK VERİ (en üstte, banner'dan ÖNCE)
 * `gtos-surface-honesty.js` ile aynı görünüm sözleşmesi: rozet + tek
 * cümle. Kaynak verilmediyse şerit HİÇ basılmaz — "canlı" varsayılmaz.
 * ================================================================== */

.ms2-honesty {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-3);
  padding: var(--gtos-space-2) var(--gtos-space-4);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--ms2-radius);
  background: var(--ms2-glass);
  box-shadow: var(--ms2-elev-1), inset 0 1px 0 var(--ms2-inner);
  backdrop-filter: var(--ms2-blur);
  min-width: 0;
}

.ms2-honesty__text {
  margin: 0;
  min-width: 0;
  font-size: var(--gtos-text-xs);
  line-height: var(--gtos-leading-tight);
  color: var(--ms2-muted);
}

.ms2-honesty--live {
  border-color: color-mix(in srgb, var(--ms2-ok) 30%, var(--ms2-line));
}

/* ÖRNEK VERİ şeridi bilerek daha yüksek sesle konuşur (A08/B04 ref'i):
   amber çerçeve + amber zemin — müşteri "bu rakam gerçek mi" sorusunu
   sormak zorunda kalmasın. */
.ms2-honesty--sample {
  border-color: color-mix(in srgb, var(--ms2-warn) 52%, transparent);
  background: var(--ms2-warn-soft);
}

.ms2-honesty--sample .ms2-honesty__text {
  color: var(--ms2-warn);
}

.ms2-honesty--gap {
  border-style: dashed;
}

/* ================================================================== *
 * 0b. GELIS BAGLAMI PILI — CC den module gelindiyse (WP-H3-TEK-02)
 * Banner in hemen USTUNDE ince bir serit; iki yonlu bagin DONUS ucu.
 * `from` verilmedikce HIC basilmaz: modul kendi basina acildiginda
 * kullaniciya "CC den geldiniz" denmez.
 * ================================================================== */

.ms2-from {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  align-self: flex-start;
  max-width: 100%;
  min-width: 0;
  padding: var(--gtos-space-1) var(--gtos-space-3);
  border: 1px solid var(--ms2-gold-edge);
  border-radius: var(--gtos-radius-pill);
  background: var(--ms2-glass);
  box-shadow: inset 0 1px 0 var(--ms2-inner);
  backdrop-filter: var(--ms2-blur);
  color: var(--ms2-muted);
  font-size: var(--gtos-text-xs);
  text-decoration: none;
  transition: border-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    color var(--gtos-duration-fast) var(--gtos-ease-standard);
}

a.ms2-from:hover {
  border-color: var(--ms2-accent);
  color: var(--ms2-ink);
}

.ms2-from__mark {
  color: var(--ms2-accent);
  font-size: var(--gtos-text-sm);
  line-height: 1;
}

.ms2-from__text {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ms2-from__who {
  font-weight: var(--gtos-weight-semibold);
  color: var(--ms2-ink);
}

.ms2-from__cta {
  padding-left: var(--gtos-space-2);
  border-left: 1px solid var(--ms2-hairline);
  font-weight: var(--gtos-weight-semibold);
  color: var(--ms2-accent);
  white-space: nowrap;
}

/* ================================================================== *
 * 1. BANNER (hero) — ikon illüstrasyonu · kod·başlık · "← Genel bakış" ·
 *    "Nasıl Çalışır?" pili · "BU ALANIN UZMANI" çipi · gradyan çizgi
 * Kaynak gramer: gtos-module-premium.css `.gtos-mp__banner`.
 * ================================================================== */

.ms2__banner {
  position: relative;
  display: block;
  padding: var(--gtos-space-5) var(--ms2-pad) calc(var(--gtos-space-5) + 3px);
  border: 1px solid var(--ms2-gold-edge);
  border-radius: var(--ms2-radius);
  /* İki temada da doğru derinlik: açık temada sıcak krem→fildişi düşüşü,
     koyu temada altın çalımlı lacivert cam. Tek bildirim, iki karakter. */
  background: linear-gradient(180deg, var(--ms2-warm) 0%, var(--ms2-glass) 78%);
  box-shadow: var(--ms2-elev-1), inset 0 1px 0 var(--ms2-inner);
  backdrop-filter: var(--ms2-blur);
  overflow: hidden;
  min-width: 0;
}

/* İkonun ARKASINDA yumuşak radyal altın parıltı — dramatik ama sakin ışık.
   Çok düşük opaklık ve YALNIZ banner'da; kart/panel/tabloya taşınmaz
   (kitsch riski: her yüzeyde parıltı = ucuz gradyan hissi). */
.ms2__banner::before {
  content: '';
  position: absolute;
  top: -40%;
  left: -2%;
  width: 320px;
  height: 200%;
  pointer-events: none;
  background: radial-gradient(
    closest-side,
    var(--ms2-gold-glow) 0%,
    color-mix(in srgb, var(--ms2-accent) 6%, transparent) 46%,
    transparent 78%
  );
}

.ms2__banner-inner {
  /* Parıltı katmanının ÜSTÜNDE kalır (::before mutlak konumlu). */
  position: relative;
  display: flex;
  align-items: flex-start;
  /* Satırlar sarıldığında dikeyde GERİLMESİN: varsayılan `stretch`,
     banner beklenmedik bir yükseklik aldığında boşluğu satırlara dağıtır.
     Banner her zaman içeriği kadar yüksektir. */
  align-content: flex-start;
  gap: var(--gtos-space-4);
  flex-wrap: wrap;
  min-width: 0;
}

/* --- gradyan çizgi (banner'ın ALTINDA, tam genişlik) ---
   Ref'te A01 açık temada turkuaz→mavi; CC diline çevrildi: ALTIN→TURKUAZ.
   Aynı görsel ağırlık (3px, tam genişlik, uçlarda sönüm). */
.ms2__banner-rule {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 3px;
  /* İki katman: altta altın→turkuaz geçiş, üstte STATİK parlama bandı
     (--ms2-sheen). Shimmer ANİMASYONLU DEĞİL — "sakin" istendi ve
     sürekli hareket eden bir çizgi okuma yüzeyinde yorucu olurdu. */
  background-image: var(--ms2-sheen),
    linear-gradient(
      90deg,
      transparent 0%,
      var(--ms2-accent) 16%,
      var(--ms2-brand) 62%,
      color-mix(in srgb, var(--ms2-brand) 30%, transparent) 88%,
      transparent 100%
    );
}

/* --- "← Genel bakış" --- */
.ms2__back {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  flex: 0 0 auto;
  height: 34px;
  padding: 0 var(--gtos-space-4);
  border: 1px solid var(--ms2-line-input);
  border-radius: var(--gtos-radius-pill);
  background: var(--ms2-surface);
  color: var(--ms2-ink);
  font: var(--gtos-weight-semibold) var(--gtos-text-xs) / 1 var(--ms2-body);
  white-space: nowrap;
  cursor: pointer;
  transition: border-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    background-color var(--gtos-duration-fast) var(--gtos-ease-standard);
}

.ms2__back:hover {
  border-color: var(--ms2-accent-line);
  background: var(--ms2-hover);
}

.ms2__back-arrow {
  font-size: var(--gtos-text-md);
  line-height: 1;
}

/* --- modül ikon illüstrasyonu ---
   Gerçek varlık: `assets/24_modules_images/*.png` (unified-platform.js
   getModuleCoverPath()). Kabuk yolu PARAMETRE olarak alır (header.iconSrc),
   kendi listesini tutmaz — kaynak SSOT tek yerde kalsın. */
.ms2__icon {
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  width: 46px;
  height: 46px;
  border-radius: var(--gtos-radius-md);
  background: var(--ms2-accent-soft);
  color: var(--ms2-accent);
  font: var(--gtos-weight-bold) var(--gtos-text-sm) / 1 var(--ms2-display);
  box-shadow: 0 0 0 1px var(--ms2-accent-line), 0 6px 22px var(--ms2-gold-glow);
  overflow: hidden;
}

.ms2__icon img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  /* Ref'teki illüstrasyonlar kendi zeminlerini taşır; kabuk onları
     kırpmaz, yalnız hizalar. */
}

.ms2__titles {
  flex: 1 1 26rem;
  min-width: 0;
}

.ms2__eyebrow {
  margin: 0 0 var(--gtos-space-1);
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 1.3 var(--ms2-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ms2-muted);
}

.ms2__title {
  margin: 0;
  font: var(--gtos-weight-bold) var(--gtos-text-xl) / 1.2 var(--ms2-display);
  letter-spacing: -0.01em;
  /* Uzun modül adları son satırda tek kelime bırakmasın. Desteklenmeyen
     tarayıcıda sessizce yok sayılır (progressive enhancement). */
  text-wrap: balance;
  color: var(--ms2-ink);
}

/* Modül kodu (A01 · …) başlığın içinde ALTIN kalır — ref'teki
   "A01 · GTİP Sınıflandırma" ritmi. */
.ms2__code {
  color: var(--ms2-accent);
}

.ms2__code-sep {
  margin: 0 var(--gtos-space-2);
  color: var(--ms2-muted);
}

.ms2__sub {
  margin: var(--gtos-space-1) 0 0;
  max-width: 62ch;
  font-size: var(--gtos-text-xs);
  line-height: var(--gtos-leading);
  color: var(--ms2-muted);
}

.ms2__banner-side {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-2);
  flex-wrap: wrap;
  margin-left: auto;
  min-width: 0;
}

/* --- "Nasıl Çalışır?" pili ---
   Ref'te MAVİ: bilgi/yardım affordance'ı, birincil eylem DEĞİL. Altın
   birincil düğmeyle karışmasın diye bilerek mavi bırakıldı. */
.ms2__help {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  height: 34px;
  padding: 0 var(--gtos-space-4);
  border: 1px solid color-mix(in srgb, var(--ms2-action) 45%, transparent);
  border-radius: var(--gtos-radius-pill);
  background: color-mix(in srgb, var(--ms2-action) 12%, transparent);
  color: var(--ms2-action);
  font: var(--gtos-weight-semibold) var(--gtos-text-xs) / 1 var(--ms2-body);
  white-space: nowrap;
  cursor: pointer;
  transition: background-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    border-color var(--gtos-duration-fast) var(--gtos-ease-standard);
}

.ms2__help:hover {
  background: color-mix(in srgb, var(--ms2-action) 20%, transparent);
  border-color: var(--ms2-action);
}

.ms2__help-mark {
  display: grid;
  place-items: center;
  width: 16px;
  height: 16px;
  border-radius: var(--gtos-radius-pill);
  background: color-mix(in srgb, var(--ms2-action) 24%, transparent);
  font-size: var(--gtos-text-2xs);
  font-weight: var(--gtos-weight-bold);
}

/* --- "BU ALANIN UZMANI <ad> <kod>" çipi ---
   Görsel gramer kaynağı: unified.css `.module-workspace-agent-chip`
   (yalnız okundu). Eşleme uydurulmaz: ad/kod PARAMETREdir, gerçek kaynak
   `c01-agent-module-authority.js` / `c01-module-catalog.js`. */
/* --- UZMAN ŞERİDİ (WP-H3-TEK-02) ---
   Yasin: "her modüldeki agent detayını vurgulayalım, CC ile bağ daha
   hissedilebilir olsun." Eski iki satırlık çip yerine: yuvarlak PORTRE
   (CC nin altın halka dili) + ad/ünvan + CANLI DURUM noktası + derin
   bağlantılı sor düğmesi. Görsel gramer kaynağı unified.css
   .module-workspace-agent-chip ve cc-v5 avatar halkası (ikisi de yalnız
   OKUNDU, dosyalarına dokunulmadı). */
.ms2__expert {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-3);
  min-width: 0;
  padding: var(--gtos-space-2) var(--gtos-space-3);
  border: 1px solid color-mix(in srgb, var(--ms2-brand) 32%, var(--ms2-line));
  border-radius: var(--gtos-radius-pill);
  background: var(--ms2-brand-soft);
  box-shadow: var(--gtos-shadow-xs), inset 0 1px 0 var(--ms2-inner);
  color: var(--ms2-ink);
  font-family: var(--ms2-body);
  text-align: left;
}

/* Portre: ALTIN ince cerceve (CC dili) + DISTA durum rengi halkasi.
   Halka rengi --ms2-presence uzerinden gelir ve [data-ms2-presence] YOKKEN
   seffaftir: durum bilinmiyorsa renk IDDIA EDILMEZ (uydurma hazir yesili
   yok — KPI kuralinin uzman seridindeki karsiligi). */
.ms2__expert-avatar {
  --ms2-presence: transparent;
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  width: 48px;
  height: 48px;
  border-radius: var(--gtos-radius-pill);
  background: var(--ms2-surface-2);
  color: var(--ms2-accent);
  font: var(--gtos-weight-bold) var(--gtos-text-md) / 1 var(--ms2-display);
  overflow: hidden;
  box-shadow: 0 0 0 1px var(--ms2-accent-line), 0 0 0 3px var(--ms2-presence),
    0 4px 14px var(--ms2-gold-glow);
}

.ms2__expert-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.ms2__expert-body {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 0;
}

.ms2__expert-label {
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 1.2 var(--ms2-body);
  letter-spacing: var(--gtos-tracking-wide);
  text-transform: uppercase;
  color: var(--ms2-muted);
}

.ms2__expert-row {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
}

.ms2__expert-name {
  font: var(--gtos-weight-bold) var(--gtos-text-sm) / 1.3 var(--ms2-body);
  color: var(--ms2-ink);
}

.ms2__expert-code {
  padding: 0 var(--gtos-space-2);
  border: 1px solid color-mix(in srgb, var(--ms2-brand) 40%, transparent);
  border-radius: var(--gtos-radius-pill);
  background: color-mix(in srgb, var(--ms2-brand) 14%, transparent);
  /* W5-CSS (01.10): 10 px + --ms2-brand metni kendi %14 tintinde acik temada
     3,95 idi (B06/B07 canli olcumu). Rozet 11 px; metin ayni ailenin tint
     ustu murekkebi (--gtos-c-brand-ink: acikta teal-800, koyuda teal-300). */
  font: var(--gtos-weight-semibold) var(--gtos-text-micro) / 16px var(--ms2-mono);
  color: var(--gtos-c-brand-ink);
}

/* WP-H3-TEK-A-A01c (16.09 Yasin karari): tek satir + 22ch + ellipsis EN'de
   uzun unvanlari ("Regulatory and Customs Co…") kesiyordu. Rozet TR
   gorunumunu bozmadan (kisa TR unvanlar zaten tek satira siyar) iki satira
   kadar sarabiliyor; 2 satirdan uzunu yine ellipsis ile keser. */
.ms2__expert-title {
  max-width: 30ch;
  overflow: hidden;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  white-space: normal;
  font-size: var(--gtos-text-2xs);
  line-height: var(--gtos-leading-tight);
  color: var(--ms2-muted);
}

/* Canli durum: nokta + kucuk etiket. JS bu blogu durum SOZLUKTE varsa
   basar; bilinmiyorsa hic yoktur. */
.ms2__expert-presence {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-1);
  font-size: var(--gtos-text-2xs);
  font-weight: var(--gtos-weight-semibold);
  color: var(--ms2-presence-ink, var(--ms2-muted));
}

.ms2__expert-dot {
  width: 7px;
  height: 7px;
  flex: 0 0 auto;
  border-radius: var(--gtos-radius-pill);
  background: currentColor;
  box-shadow: 0 0 8px currentColor;
}

/* Durum -> renk. Satir ici stil YOK: esleme data-ms2-presence niteligi
   uzerinden CSS te kurulur (sozluk cc-v5 PRESENCE_TR ile ayni). */
.ms2__expert[data-ms2-presence='idle'] {
  --ms2-presence-ink: var(--ms2-muted);
}

.ms2__expert[data-ms2-presence='listening'],
.ms2__expert[data-ms2-presence='thinking'] {
  --ms2-presence-ink: var(--ms2-info);
}

.ms2__expert[data-ms2-presence='working'],
.ms2__expert[data-ms2-presence='expert-running'] {
  --ms2-presence-ink: var(--ms2-accent);
}

.ms2__expert[data-ms2-presence='synthesizing'] {
  --ms2-presence-ink: var(--ms2-brand);
}

.ms2__expert[data-ms2-presence='answering'],
.ms2__expert[data-ms2-presence='speaking'],
.ms2__expert[data-ms2-presence='done'] {
  --ms2-presence-ink: var(--ms2-ok);
}

/* Portre halkasi da ayni durum rengini alir (CC deki halka dili). */
.ms2__expert[data-ms2-presence] .ms2__expert-avatar {
  --ms2-presence: color-mix(in srgb, var(--ms2-presence-ink) 45%, transparent);
}

/* Sor dugmesi — CC odasina derin baglanti (#cc/room/<slug>). */
.ms2__expert-ask {
  flex: 0 0 auto;
  margin-left: var(--gtos-space-1);
}

.ms2__status-slot {
  display: flex;
  align-items: center;
}

.ms2__actions {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-2);
  flex-wrap: wrap;
}

/* --- kırıntı (breadcrumb) --- */

.ms2-crumbs {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-1);
  flex-wrap: wrap;
  margin: var(--gtos-space-2) 0 0;
  padding: 0;
  list-style: none;
  min-width: 0;
}

.ms2-crumbs__item {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-1);
  min-width: 0;
}

.ms2-crumbs__sep {
  color: var(--ms2-muted);
  font-size: var(--gtos-text-xs);
  user-select: none;
}

.ms2-crumb {
  max-width: 14rem;
  padding: 0 var(--gtos-space-2);
  height: 22px;
  border: 0;
  border-radius: var(--gtos-radius-pill);
  background: transparent;
  color: var(--ms2-muted);
  font: var(--gtos-weight-semibold) var(--gtos-text-xs) / 22px var(--ms2-body);
  text-decoration: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
  transition: color var(--gtos-duration-fast) var(--gtos-ease-standard),
    background-color var(--gtos-duration-fast) var(--gtos-ease-standard);
}

.ms2-crumb:hover:not([disabled]):not([aria-current='page']) {
  color: var(--ms2-ink);
  background: var(--ms2-hover);
}

.ms2-crumb[disabled] {
  cursor: default;
}

.ms2-crumb[aria-current='page'] {
  color: var(--ms2-ink);
  cursor: default;
}

/* --- durum rozeti: canlı / yükleniyor / hata / boş --- */

.ms2-status {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  height: 26px;
  padding: 0 var(--gtos-space-3);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--gtos-radius-pill);
  background: var(--ms2-surface-2);
  color: var(--ms2-muted);
  font-size: var(--gtos-text-xs);
  font-weight: var(--gtos-weight-semibold);
  white-space: nowrap;
}

.ms2-status__dot {
  width: 7px;
  height: 7px;
  flex: 0 0 auto;
  border-radius: var(--gtos-radius-pill);
  background: currentColor;
}

.ms2-status--live {
  color: var(--ms2-ok);
  border-color: color-mix(in srgb, var(--ms2-ok) 42%, transparent);
  background: var(--ms2-ok-soft);
}

.ms2-status--live .ms2-status__dot {
  box-shadow: 0 0 8px color-mix(in srgb, var(--ms2-ok) 70%, transparent);
  animation: ms2-live-glow 2.6s var(--gtos-ease-standard) infinite;
}

/* "Canlı" rozetinin nabzı BİLEREK yavaş ve düşük genlikli: dikkat çeker
   ama okuma yüzeyinde titreşim yaratmaz. prefers-reduced-motion'da kapalı. */
@keyframes ms2-live-glow {
  0%,
  100% {
    box-shadow: 0 0 6px color-mix(in srgb, var(--ms2-ok) 50%, transparent);
  }
  50% {
    box-shadow: 0 0 12px color-mix(in srgb, var(--ms2-ok) 85%, transparent);
  }
}

.ms2-status--loading {
  color: var(--ms2-info);
  border-color: color-mix(in srgb, var(--ms2-info) 42%, transparent);
  background: var(--ms2-info-soft);
}

.ms2-status--loading .ms2-status__dot {
  animation: ms2-pulse 1.2s var(--gtos-ease-standard) infinite;
}

.ms2-status--warn {
  color: var(--ms2-warn);
  border-color: color-mix(in srgb, var(--ms2-warn) 42%, transparent);
  background: var(--ms2-warn-soft);
}

.ms2-status--error {
  color: var(--ms2-bad);
  border-color: color-mix(in srgb, var(--ms2-bad) 42%, transparent);
  background: var(--ms2-bad-soft);
}

@keyframes ms2-pulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.25;
  }
}

/* --- veri kaynağı dürüstlük rozeti (gtos-surface-honesty deseni) --- */
.ms2-src {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-1);
  padding: 0 var(--gtos-space-2);
  height: 18px;
  border-radius: var(--gtos-radius-xs);
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 18px var(--ms2-mono);
  letter-spacing: var(--gtos-tracking-wide);
  text-transform: uppercase;
  white-space: nowrap;
}

.ms2-src--live {
  color: var(--ms2-ok);
  background: var(--ms2-ok-soft);
}

.ms2-src--sample {
  color: var(--ms2-warn);
  background: var(--ms2-warn-soft);
}

.ms2-src--gap {
  color: var(--ms2-muted);
  background: color-mix(in srgb, var(--ms2-muted) 12%, transparent);
}

/* WP-H3-TEK-A-A03: gtos-surface-honesty.js'teki KALAN kind'ler. Renkler
   TOKEN'dan gelir (cıplak hex yok): "gerçek ama tam canlı değil" aile
   (havuz/besleme/gösterge/kısmi) marka turkuazının soluk tonunda,
   "yerel/katalog" nötr. Kind eklendiğinde rozet sessizce düşmesin diye
   liste module-shell-v2.js SOURCE_TONES ile aynı anahtarları taşır. */
/* WP-CILA-C-01 madde 1 (kontrast) — ZEMIN TINTI %12 -> %10.
   HESAPLANDI (token degerlerinden, iki tema): acik temada metin
   `--gtos-c-brand` = teal-700 (#0f766e), zemin ise AYNI rengin %12'si
   `--gtos-c-surface-glass` uzerine binince kontrast 4,47:1 — AA'nin normal
   metin esiginin (4,5) ALTINDA. Tint %10'a inince 4,60:1 olur (esigin
   uzeri) ve koyu temada da IYILESIR (8,81 -> 9,28). %10, `--gtos-c-success-
   soft` / `--gtos-c-warn-soft` ailesiyle de AYNI orandir, yani rozet ailesi
   tek bir tint oranina hizalanir. Renk token'lari DEGISMEDI, yalniz
   saydamlik orani. Etkilenen rozetler: HAVUZ / BESLEME / GOSTERGE / KISMI
   (A03, A05, A08). */
.ms2-src--pool,
.ms2-src--feed,
.ms2-src--indicative,
.ms2-src--partial {
  color: var(--ms2-brand);
  background: color-mix(in srgb, var(--ms2-brand) 10%, transparent);
}

.ms2-src--local,
.ms2-src--catalog {
  color: var(--ms2-ink);
  background: color-mix(in srgb, var(--ms2-ink) 10%, transparent);
}

/* ================================================================== *
 * 2. KPI ŞERİDİ — A08 deseni: her kartın RENK KODLU üst kenarı +
 *    renkli ikon çipi. Yalnız GERÇEK ölçüm varsa basılır.
 * ================================================================== */

.ms2__kpis {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: var(--gtos-space-3);
  margin: 0;
  padding: 0;
  list-style: none;
}

.ms2__kpis > li {
  display: flex;
  min-width: 0;
  /* Kart kendi KAPSAYICISI olur: değer punto'su viewport'a değil KART
     genişliğine göre ölçeklenir. 3 kartlık şeritte (A01) kart geniştir ve
     değer büyür; 6 kartlık şeritte (A08) kart dardır ve değer küçülür —
     sabit 3xl dayatmak "124.860 TRY"yi kartın dışına taşırıyordu. */
  container-type: inline-size;
}

.ms2-kpi {
  position: relative;
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  gap: var(--gtos-space-2);
  min-width: 0;
  padding: calc(var(--gtos-space-5) + 2px) var(--gtos-space-5) var(--gtos-space-5);
  background: var(--ms2-glass);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--gtos-radius-md);
  box-shadow: var(--ms2-elev-1), inset 0 1px 0 var(--ms2-inner);
  backdrop-filter: var(--ms2-blur);
  color: inherit;
  text-decoration: none;
  overflow: hidden;
  transition: transform 160ms var(--gtos-ease-standard),
    box-shadow 160ms var(--gtos-ease-standard),
    border-color 160ms var(--gtos-ease-standard);
}

/* RENK KODLU ÜST KENAR — A08'deki altı farklı renkli kartın taşıyıcısı.
   `border-top` yerine ::before: köşe yarıçapı bozulmadan 3px tam genişlik. */
.ms2-kpi::before {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 2px;
  background: linear-gradient(
    90deg,
    var(--ms2-tone) 0%,
    color-mix(in srgb, var(--ms2-tone) 45%, transparent) 100%
  );
}

/* Üst satır: ikon çipi (sol) + kaynak rozeti (sağ). Etiket bu satırda
   DEĞİLDİR — bkz. module-shell-v2.js buildKpi(). */
.ms2-kpi__top {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-2);
  min-width: 0;
}

/* WP-CILA-C-01 madde 1 — KPI KARTINDA ROZET HIZASI (C08'de goruldu, tum
   rozetli modulleri kapsar).

   ESKI KURAL: `.ms2-kpi__top .ms2-src { margin-left: auto }` — "rozet tek
   basinayken de saga yaslanir". Saga yaslama IKON CIPI VARKEN anlamlidir
   (ikon sol, rozet sag; A08 referansindaki duzen). Ama `buildKpi()`e bugun
   HICBIR modul `icon` vermiyor (olculdu: unified-platform.js icindeki KPI
   spec'lerinin hicbirinde `icon:` alani yok; `.ms2-kpi__icon` uretimde hic
   basilmiyor), yani `.ms2-kpi__top` tek cocuklu kaliyor ve `margin-left:auto`
   rozeti kartin SAG kenarina itiyordu: kartin geri kalani (etiket + deger +
   ipucu) sol hizaliyken tek basina saga kacmis, baglamsiz duran bir cip.
   C08'de musteri gozuyle "rozet kartta duzgun oturmuyor" diye isaretlenen
   sey budur.

   KURAL ARTIK KOSULLU: ikon cipi VARSA eski davranis (saga yasli) BIREBIR
   surer — A08 referans duzeni ileride ikon verildiginde bozulmaz. Ikon YOKSA
   rozet kartin sol rayina, etiketle AYNI hizaya oturur (banner'daki eyebrow
   grameriyle ayni). Renk, punto, yukseklik, bosluk DEGISMEDI; yalniz yatay
   hiza degisti. Kontrast bu kuraldan ETKILENMEZ; rozet ailesinin olculen
   degerleri (token degerlerinden hesap, acik/koyu): CANLI 4,60 / 6,80 ·
   ORNEK VERI 5,86 / 7,71 · KATALOG-YEREL 14,03 / 12,07 · HAVUZ ailesi
   yukaridaki %10 duzeltmesinden sonra 4,60 / 9,28 — hepsi AA (4,5) uzeri. */
.ms2-kpi__top:has(.ms2-kpi__icon) .ms2-src {
  margin-left: auto;
}

.ms2-kpi__top .ms2-src {
  flex: 0 0 auto;
}

/* Renkli ikon çipi (A08: mor/menekşe/mavi/turuncu/yeşil/kırmızı). */
.ms2-kpi__icon {
  display: grid;
  place-items: center;
  flex: 0 0 auto;
  width: 34px;
  height: 34px;
  border-radius: var(--gtos-radius-md);
  border: 1px solid color-mix(in srgb, var(--ms2-tone) 46%, transparent);
  background: color-mix(in srgb, var(--ms2-tone) 14%, transparent);
  color: var(--ms2-tone);
  font: var(--gtos-weight-bold) var(--gtos-text-sm) / 1 var(--ms2-display);
  /* Renk kodunun kendi yumuşak parıltısı — renk kimliğini kart içinde
     tek bir odak noktasına toplar. */
  box-shadow: 0 0 16px color-mix(in srgb, var(--ms2-tone) 26%, transparent),
    inset 0 1px 0 var(--ms2-inner);
}

.ms2-kpi__label {
  margin: 0;
  min-width: 0;
  /* SARMA, kırpma DEĞİL. `text-overflow: ellipsis` burada kelime kelime
     "TOP… MAL… (LA…" üretiyordu çünkü etiket dar bir flex hücresindeydi.
     Artık tam genişlikte, en fazla iki satır; ikiden uzunsa satır sonunda
     tek bir kesme olur, kelimelerin ortasında değil. */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
  overflow-wrap: break-word;
  line-height: var(--gtos-leading-tight);
  font-size: var(--gtos-text-xs);
  font-weight: var(--gtos-weight-semibold);
  letter-spacing: var(--gtos-tracking-wide);
  text-transform: uppercase;
  color: var(--ms2-muted);
}

.ms2-kpi__value {
  font: var(--gtos-weight-bold) var(--gtos-text-2xl) / 1.1 var(--ms2-display);
  /* İkinci bildirim: kapsayıcı sorgusu destekleniyorsa punto KART genişliğine
     göre ölçeklenir; desteklenmiyorsa bu satır geçersiz sayılır ve yukarıdaki
     2xl yürürlükte kalır (kasıtlı progressive enhancement).

     WP-H3-TEK-A-CILA-04 — KATSAYI 13cqi → 11cqi, ALT SINIR xl → lg.
     Ölçüldü (kabul-kanitlari/20260917-cila04/once/facts.json): A08 hesabından
     sonra "7.339.961,38" + "TRY" 1024'te `scrollWidth 177 / clientWidth 127`,
     375'te `260 / 228` — yani değer+birim kabı kartı aşıyor ve kartın
     `overflow: hidden` sınırında "7.339.961,38 T" diye kırpılıyordu. Gerekli
     üst sınır kart genişliğinden türer: 12 haneli bir sayı ≈ 6,2em yer kaplar,
     kart içi genişlik (kart − 2×24px dolgu) bunu taşıyacaksa katsayı
     ≈ 14,6·(1 − 48/kart) altında kalmalı; en dar kart (168px kapsayıcı
     eşiği) için bu 10,4'tür, 11cqi + birim sarması ile ölçülen tüm
     genişliklerde (1680/1440/1024/375) kap taşması 0'a iner. Alt sınırın
     `lg`ye inmesi yalnız 164px'ten dar kartta devreye girer (bugün yok);
     amacı gelecekte daha dar bir kapsayıcıda kırpma yerine küçülme. */
  font-size: clamp(var(--gtos-text-lg), 11cqi, var(--gtos-text-3xl));
  /* DEĞER + BİRİM = İKİ AYRI SATIR OLABİLİR. Değer metin düğümü ile
     `.ms2-kpi__unit` arasında BOŞLUK KARAKTERİ YOK (buildKpi() birimi
     doğrudan appendChild ediyor), bu yüzden satır sonu algoritması ikisini
     tek bir "kelime" sayıyor ve hiçbir kırılma noktası bulamıyordu. Flex
     kabında ikisi ayrı öğedir: dar kartta birim ALT SATIRA geçer, geniş
     kartta eskisi gibi yan yana kalır. `baseline` hizası sayının ve birimin
     taban çizgisini korur (üst üste binme/zıplama yok). */
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  column-gap: var(--gtos-space-1);
  row-gap: 2px;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.01em;
  color: var(--ms2-ink);
  /* `overflow-wrap: anywhere` KALDIRILDI: "124.860 TRY" değerini
     "124.860 TR" + "Y" diye ortadan bölüyordu. Değer ve birimi tek parçadır.
     WP-H3-TEK-A-CILA-01: `white-space: nowrap` de kalktı — A05 "Yaklaşan
     fuar" gibi METİN değerler (tarih + uzun ad) 1024'te kartın
     `overflow: hidden` sınırında KIRPILIYORDU. Yeni davranış: kırılma
     YALNIZ boşlukta olur (`overflow-wrap: normal` = kelime ortasından
     bölme yok), yani "124.860 TR|Y" regresyonu yeniden oluşamaz; sayısal
     kısa değerler eskisi gibi tek satırda kalır. */
  min-width: 0;
  max-width: 100%;
  white-space: normal;
  overflow-wrap: normal;
  word-break: normal;
}

.ms2-kpi__unit {
  /* Boşluk artık kabın `column-gap`inden gelir; `margin-left` alt satıra
     geçen birimi de içeriden iterek hizayı bozuyordu (WP-H3-TEK-A-CILA-04). */
  margin-left: 0;
  font: var(--gtos-weight-semibold) var(--gtos-text-sm) / 1 var(--ms2-body);
  white-space: nowrap;
  color: var(--ms2-muted);
}

.ms2-kpi__delta {
  font-size: var(--gtos-text-xs);
  font-weight: var(--gtos-weight-bold);
  font-variant-numeric: tabular-nums;
  color: var(--ms2-muted);
}

.ms2-kpi__delta--up {
  color: var(--ms2-ok);
}

.ms2-kpi__delta--down {
  color: var(--ms2-bad);
}

.ms2-kpi__hint {
  margin: 0;
  /* Uzun alt satır (A05: fuar adı) kartın içinde SARAR; kırpılmaz.
     WP-H3-TEK-A-CILA-01. */
  min-width: 0;
  max-width: 100%;
  overflow-wrap: anywhere;
  font-size: var(--gtos-text-2xs);
  line-height: var(--gtos-leading-tight);
  color: var(--ms2-muted);
}

.ms2-kpi--link:hover {
  transform: translateY(-1px);
  border-color: color-mix(in srgb, var(--ms2-tone) 46%, transparent);
  box-shadow: var(--ms2-elev-2), inset 0 1px 0 var(--ms2-inner);
}

/* Renk kodu sınıfları — TEK değişken (`--ms2-tone`) yeniden bağlanır. */
.ms2-kpi--brand {
  --ms2-tone: var(--ms2-brand);
}

.ms2-kpi--accent {
  --ms2-tone: var(--ms2-accent);
}

.ms2-kpi--info {
  --ms2-tone: var(--ms2-info);
}

.ms2-kpi--violet {
  --ms2-tone: var(--ms2-violet);
}

.ms2-kpi--purple {
  --ms2-tone: var(--ms2-purple);
}

.ms2-kpi--orange {
  --ms2-tone: var(--ms2-orange);
}

.ms2-kpi--ok {
  --ms2-tone: var(--ms2-ok);
}

.ms2-kpi--warn {
  --ms2-tone: var(--ms2-warn);
}

.ms2-kpi--danger {
  --ms2-tone: var(--ms2-bad);
}

/* ================================================================== *
 * 3. EYEBROW PANELİ — sıcak krem tanıtım bloğu (A01 ref'i)
 * ================================================================== */

.ms2-eyebrow-panel {
  padding: var(--gtos-space-3) var(--ms2-pad);
  border: 1px solid var(--ms2-gold-edge);
  border-radius: var(--ms2-radius);
  background: var(--ms2-warm);
  min-width: 0;
}

.ms2-eyebrow-panel__kicker {
  margin: 0;
  font: var(--gtos-weight-bold) var(--gtos-text-2xs) / 1.4 var(--ms2-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ms2-accent);
}

.ms2-eyebrow-panel__code {
  margin: 0 0 var(--gtos-space-2);
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 1.4 var(--ms2-mono);
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ms2-muted);
}

.ms2-eyebrow-panel__text {
  margin: 0;
  max-width: 88ch;
  font-size: var(--gtos-text-sm);
  line-height: var(--gtos-leading);
  color: var(--ms2-ink);
}

/* WP-H3-TEK-A-A01c (16.09 Yasin karari): kicker/code verilmedigi zaman
   (bkz. module-shell-v2.js setEyebrowPanel) panel bir KART degil, sekmelerin
   ustunde kenarliksiz/arkaplansiz ince bir yardimci metin satiridir — A01'in
   eski "ucuncu baslik karti" (banner basligini tekrar eden kicker+code)
   kalkti, aciklama cumlesi burada YARDIMCI METIN olarak kalir. */
.ms2-eyebrow-panel--plain {
  padding: 0 var(--ms2-pad) var(--gtos-space-2);
  border: 0;
  border-radius: 0;
  background: transparent;
  box-shadow: none;
}

.ms2-eyebrow-panel--plain .ms2-eyebrow-panel__text {
  font-size: var(--gtos-text-xs);
  color: var(--ms2-muted);
}

/* ================================================================== *
 * 4. SEKME ŞERİDİ (A01) — AKTİF SEKME ALTIN
 * Kaynak gramer: gtos-module-premium.css `.gtos-mp-tab.is-active`
 * (orada turkuaz; burada CC diline çevrildi: altın).
 * ================================================================== */

.ms2-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: var(--gtos-space-2);
  min-width: 0;
}

.ms2-tab {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  height: 34px;
  padding: 0 var(--gtos-space-4);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--gtos-radius-md);
  background: var(--ms2-surface);
  color: var(--ms2-muted);
  font: var(--gtos-weight-semibold) var(--gtos-text-xs) / 1 var(--ms2-body);
  white-space: nowrap;
  cursor: pointer;
  transition: border-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    color var(--gtos-duration-fast) var(--gtos-ease-standard),
    background-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    transform var(--gtos-duration-fast) var(--gtos-ease-standard);
}

.ms2-tab:hover:not([aria-selected='true']) {
  color: var(--ms2-ink);
  border-color: var(--ms2-accent-line);
  transform: translateY(-1px);
}

/* ALTIN HAIRLINE ÇERÇEVE YALNIZ AKTİF/SEÇİLİ ÖĞEDE. Pasif sekmeler nötr
   kalır — her düğmeye altın kenar çekmek "her şey vurgulu = hiçbir şey
   vurgulu değil" sonucunu verirdi. */
.ms2-tab[aria-selected='true'] {
  border-color: var(--ms2-accent);
  background-color: color-mix(in srgb, var(--ms2-accent) 14%, var(--ms2-surface));
  background-image: var(--ms2-sheen);
  color: var(--ms2-accent);
  box-shadow: 0 0 0 1px var(--ms2-gold-glow), var(--gtos-shadow-xs);
  cursor: default;
}

.ms2-tab__count {
  padding: 0 var(--gtos-space-2);
  border-radius: var(--gtos-radius-pill);
  background: color-mix(in srgb, var(--ms2-muted) 14%, transparent);
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 16px var(--ms2-mono);
}

/* ================================================================== *
 * 5. ADIM ÇUBUĞU / STEPPER (A08) — AKTİF ADIM ALTIN
 * ================================================================== */

.ms2-steps {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--gtos-space-2);
  margin: 0;
  padding: 0;
  list-style: none;
  min-width: 0;
}

.ms2-steps__item {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  min-width: 0;
}

/* Adımlar arası bağlantı çizgisi (ref'teki "—"). */
.ms2-steps__link {
  width: 22px;
  height: 1px;
  flex: 0 0 auto;
  background: var(--ms2-line-input);
}

.ms2-step {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  height: 32px;
  padding: 0 var(--gtos-space-4) 0 var(--gtos-space-2);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--gtos-radius-pill);
  background: var(--ms2-surface);
  color: var(--ms2-muted);
  font: var(--gtos-weight-semibold) var(--gtos-text-xs) / 1 var(--ms2-body);
  white-space: nowrap;
  cursor: pointer;
  transition: border-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    color var(--gtos-duration-fast) var(--gtos-ease-standard);
}

.ms2-step[disabled] {
  cursor: default;
}

.ms2-step__no {
  display: grid;
  place-items: center;
  width: 22px;
  height: 22px;
  border-radius: var(--gtos-radius-pill);
  background: var(--ms2-surface-2);
  color: var(--ms2-muted);
  font: var(--gtos-weight-bold) var(--gtos-text-2xs) / 1 var(--ms2-mono);
}

.ms2-step--active {
  border-color: var(--ms2-accent);
  background-color: color-mix(in srgb, var(--ms2-accent) 12%, var(--ms2-surface));
  background-image: var(--ms2-sheen);
  color: var(--ms2-accent);
  box-shadow: 0 0 0 1px var(--ms2-gold-glow), var(--gtos-shadow-xs);
}

.ms2-step--active .ms2-step__no {
  background-color: var(--ms2-accent-bg);
  background-image: var(--ms2-gold-grad);
  color: var(--ms2-on-accent);
  box-shadow: 0 0 12px var(--ms2-gold-glow);
}

.ms2-step--done {
  border-color: color-mix(in srgb, var(--ms2-ok) 40%, transparent);
  color: var(--ms2-ok);
}

.ms2-step--done .ms2-step__no {
  background: var(--ms2-ok-soft);
  color: var(--ms2-ok);
}

/* ================================================================== *
 * 6. DURUM ŞERİDİ (A01: "Veri hazır · Tarife: 18.367 satır · …")
 * ================================================================== */

.ms2-statusbar {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--gtos-space-2) var(--gtos-space-4);
  padding: var(--gtos-space-2) var(--gtos-space-4);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--gtos-radius-md);
  background: var(--ms2-surface);
  font-size: var(--gtos-text-xs);
  color: var(--ms2-muted);
  min-width: 0;
}

.ms2-statusbar__item {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  min-width: 0;
}

.ms2-statusbar__item + .ms2-statusbar__item::before {
  content: '';
  width: 4px;
  height: 4px;
  border-radius: var(--gtos-radius-pill);
  background: color-mix(in srgb, var(--ms2-accent) 60%, transparent);
}

/* ================================================================== *
 * 7. GÖVDE — [modül-içi işlem menüsü] · içerik · yan panel
 * ================================================================== */

.ms2__body {
  display: grid;
  grid-template-columns: minmax(0, 1fr) var(--ms2-aside);
  gap: var(--ms2-gap);
  align-items: start;
  min-width: 0;
}

.ms2__body--no-aside {
  grid-template-columns: minmax(0, 1fr);
}

/* Modül-içi işlem menüsü AÇIKSA en sola bir sütun daha girer. */
.ms2__body--with-ops {
  grid-template-columns: var(--ms2-ops) minmax(0, 1fr) var(--ms2-aside);
}

.ms2__body--with-ops.ms2__body--no-aside {
  grid-template-columns: var(--ms2-ops) minmax(0, 1fr);
}

.ms2__main {
  display: flex;
  flex-direction: column;
  gap: var(--ms2-gap);
  min-width: 0;
}

.ms2__content {
  display: flex;
  flex-direction: column;
  gap: var(--ms2-gap);
  min-width: 0;
  /* GT3-YERLESIM-CSS KOK-2/3 (02.10): icerik ızgarasi KENDI kutusunu olcer.
     `ms2` kapsayicisi kabugun TAMAMIDIR (yan panel 340 px + islem menusu
     232 px dahil); 1440 acik kenar cubugunda kabuk ~950 px iken icerik
     kolonu ~590 px, islem menulu modulde ~340 px'e iner ama ms2 sorgusu
     bunu "genis" sanar. `ms2c` yalniz icerik kolonunu verir (bkz. bolum
     14b). Kutu ebeveyn izgaranin minmax(0,1fr) izinden genislik alir;
     satir-boyu kisitlamasi onu icerikten bagimsiz yapar (cokme riski yok). */
  container-type: inline-size;
  container-name: ms2c;
  /* Satir-boyu kisitlamasi icerik kolonunu ayri bir YIGIN BAGLAMI yapar;
     DOM'da ondan SONRA gelen yan panel (.ms2__aside, backdrop-filter → o da
     yigin baglami, katman 0) icerikten tasan acilir liste / ipucu uzerine
     boyanirdi (<=760 px kabukta yan panel icerigin ALTINA iner). Icerik
     kolonu flex ogesi oldugu icin z-index konumlandirma olmadan uygulanir:
     icerik katmani yan panelin ustunde kalir. Banner balonu (z dropdown)
     ve kabuk disi katmanlar (ust toolbar, cekmece, toast) etkilenmez. */
  z-index: 1;
}

/* GT3-YERLESIM-CSS HIGH-1 (02.10, bagimsiz inceleme) — SABIT KATMAN ACIKKEN
   KAPSAYICI DUSER.
   Satir-boyu kisitlamasi (container-type) `position: fixed` torunlar icin
   ICERIK BLOGU olusturur. `.ms2` koku zaten kapsayici oldugu icin bu
   katmanlar bugun de kabuga bagli (onceki hal); `ms2c` bu blogu kabuktan
   icerik kolonuna DARALTIYORDU (banner / KPI / sekmeler / yan panel disarida
   kalir, perde onlari ortmez). Kabugun icerik izgarasina TASINAN ve
   `position: fixed` olan katmanlar (envanter: GT3 raporu) ACIKKEN icerik
   kolonu kapsayici olmaktan cikar → sabit katman eski `.ms2` davranisina
   doner. Kapaliyken (hepsi `.hidden` sinifi / acik-sinifi ile kapanir)
   kural uygulanmaz, ms2c yerlesimi aynen. Acikken arka plandaki ms2c
   kurallari (span sifirlama, tek sutun) devre disi kalir — perdenin
   ARKASINDA, kullanici etkileyemez. Gorunurluk mekanizmalari kodda
   dogrulandi: B04 fis modali `classList.remove('hidden')`
   (openB04VoucherModal), B05/B08 `.b08-kb-modal` (`#b08-confirm-dialog`,
   `#b05-lead-convert-dialog`, `#b05-opportunity-dialog`) `.hidden`,
   C01 bilgi paneli `classList.toggle('hidden')`, C01 nexus tam ekran
   yalniz acikken `.c01-nexus-host--fullscreen` tasir. */
.ms2__content:has(
    .b04-ebs-modal:not(.hidden),
    .b08-kb-modal:not(.hidden),
    .c01-info-panel:not(.hidden),
    .c01-nexus-host--fullscreen
  ) {
  container-type: normal;
}

/* B08 ofis cekmecesi yalniz <=960 px'te `position: fixed` (unified.css);
   genis ekranda akista durdugu icin acik-sinifi orada kapsayiciyi
   dusurmez. */
@media (max-width: 960px) {
  .ms2__content:has(.b08-kb-ofis-frame.b08-ofis-sidebar-open) {
    container-type: normal;
  }
}

.ms2__state-slot {
  min-width: 0;
}

.ms2-grid {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  gap: var(--ms2-gap);
  min-width: 0;
}

.ms2-grid > * {
  grid-column: span 12;
  min-width: 0;
}

.ms2-grid > [data-ms2-span='3'] {
  grid-column: span 3;
}

.ms2-grid > [data-ms2-span='4'] {
  grid-column: span 4;
}

.ms2-grid > [data-ms2-span='6'] {
  grid-column: span 6;
}

.ms2-grid > [data-ms2-span='8'] {
  grid-column: span 8;
}

.ms2-grid > [data-ms2-span='9'] {
  grid-column: span 9;
}

/* ------------------------------------------------------------------ *
 * 7a. MODÜL-İÇİ İŞLEM MENÜSÜ (B04 ref'i · `.ms2-ops`)
 *
 * DİKKAT — BU UYGULAMANIN GLOBAL SIDEBAR'I DEĞİLDİR.
 * Global sidebar (`.sidebar-module-link`, 24 modül listesi, CC-SIDEBAR-UX-LOCK)
 * kabuğun DIŞINDA, `#maytras-app` seviyesindedir ve bu bileşen ona
 * DOKUNMAZ. `.ms2-ops` yalnız AÇIK OLAN modülün kendi iş akışı menüsüdür
 * (B04'te "İŞLEMLER MENÜSÜ": Depo-Stok → Özet panel / Ürün Tanımı / …).
 * Bu yüzden adı "sidebar" değil "ops"tur ve kabuğun kendi ızgarasında
 * bir sütun olarak yaşar — sayfa düzeyinde sabitlenmez, position:fixed almaz.
 * ------------------------------------------------------------------ */

.ms2-ops {
  display: flex;
  flex-direction: column;
  min-width: 0;
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--ms2-radius);
  background: var(--ms2-glass);
  box-shadow: var(--ms2-elev-1), inset 0 1px 0 var(--ms2-inner);
  backdrop-filter: var(--ms2-blur);
  overflow: hidden;
}

.ms2-ops__intro {
  padding: var(--gtos-space-3) var(--gtos-space-4);
  border-bottom: 1px solid var(--ms2-hairline);
}

.ms2-ops__title {
  margin: 0 0 var(--gtos-space-2);
  font: var(--gtos-weight-bold) var(--gtos-text-2xs) / 1.3 var(--ms2-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ms2-muted);
}

.ms2-ops__note {
  margin: 0;
  font-size: var(--gtos-text-2xs);
  line-height: var(--gtos-leading);
  color: var(--ms2-muted);
}

.ms2-ops__group {
  border-bottom: 1px solid var(--ms2-hairline);
}

.ms2-ops__group:last-child {
  border-bottom: 0;
}

.ms2-ops__group-head {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-2);
  width: 100%;
  padding: var(--gtos-space-3) var(--gtos-space-4);
  border: 0;
  background: transparent;
  color: var(--ms2-ink);
  font: var(--gtos-weight-semibold) var(--gtos-text-xs) / 1.3 var(--ms2-body);
  text-align: left;
  cursor: pointer;
}

.ms2-ops__group-head:hover {
  background: var(--ms2-hover);
}

.ms2-ops__group-meta {
  margin-left: auto;
  font-size: var(--gtos-text-2xs);
  font-weight: var(--gtos-weight-normal);
  color: var(--ms2-muted);
}

.ms2-ops__list {
  margin: 0;
  padding: 0 0 var(--gtos-space-2);
  list-style: none;
}

.ms2-ops__item {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-2);
  width: 100%;
  padding: var(--gtos-space-2) var(--gtos-space-4) var(--gtos-space-2) var(--gtos-space-6);
  border: 0;
  border-left: 2px solid transparent;
  background: transparent;
  color: var(--ms2-muted);
  font: var(--gtos-weight-medium) var(--gtos-text-xs) / 1.3 var(--ms2-body);
  text-align: left;
  cursor: pointer;
  transition: color var(--gtos-duration-fast) var(--gtos-ease-standard),
    background-color var(--gtos-duration-fast) var(--gtos-ease-standard);
}

.ms2-ops__dot {
  width: 6px;
  height: 6px;
  flex: 0 0 auto;
  border-radius: var(--gtos-radius-pill);
  border: 1px solid var(--ms2-brand);
}

.ms2-ops__item:hover {
  color: var(--ms2-ink);
  background: var(--ms2-hover);
}

.ms2-ops__item[aria-current='true'] {
  border-left-color: var(--ms2-accent);
  background-image: linear-gradient(
    90deg,
    color-mix(in srgb, var(--ms2-accent) 14%, transparent) 0%,
    transparent 72%
  );
  color: var(--ms2-accent);
  font-weight: var(--gtos-weight-semibold);
  cursor: default;
}

.ms2-ops__item[aria-current='true'] .ms2-ops__dot {
  background: var(--ms2-accent);
  border-color: var(--ms2-accent);
}

/* ------------------------------------------------------------------ *
 * 7b. HIZLI İŞLEM KAROLARI (B04 ref'i)
 *
 * BİLİNÇLİ SAPMA: ref'te karolar DOLU doygun renk + beyaz yazıdır.
 * Dolu doygun zemin iki temada AA kontrastı garanti edemez (aynı yeşil
 * hem açık hem koyu temada beyaz yazıyla ölçülmek zorunda kalırdı).
 * Bunun yerine renk kodu KORUNUR ama okunabilirlik yüzeye devredilir:
 * tonlu zemin + tonlu kenar + tonlu ikon çipi + gövde metni rengi.
 * Renk kimliği (yeşil giriş / kırmızı çıkış / mor transfer …) aynen durur.
 * ------------------------------------------------------------------ */

.ms2-tiles {
  display: grid;
  /* SABİT 4 sütun, `auto-fit` DEĞİL. auto-fit mevcut genişliğe göre 7 sütun
     seçip 8. karoyu tek başına ikinci satıra düşürüyordu (B04 "Depo-Stok
     Raporu" yetim kalıyordu). Sabit 4 sütunda 8 karo 4+4 olur; sütun sayısı
     yalnız ekran daraldıkça 2 ve 1e iner. Modül yazarına kural: karo sayısını
     4ün katı tut. */
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--gtos-space-3);
  margin: 0;
  padding: 0;
  list-style: none;
  min-width: 0;
}

.ms2-tile {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--gtos-space-2);
  width: 100%;
  min-width: 0;
  padding: var(--gtos-space-3);
  border: 1px solid color-mix(in srgb, var(--ms2-tone) 46%, transparent);
  border-radius: var(--gtos-radius-md);
  background: linear-gradient(
    160deg,
    color-mix(in srgb, var(--ms2-tone) 14%, transparent),
    var(--ms2-surface) 92%
  );
  color: var(--ms2-ink);
  font: var(--gtos-weight-semibold) var(--gtos-text-xs) / 1.3 var(--ms2-body);
  text-align: left;
  text-decoration: none;
  cursor: pointer;
  transition: transform var(--gtos-duration-fast) var(--gtos-ease-standard),
    box-shadow var(--gtos-duration-base) var(--gtos-ease-standard);
}

.ms2-tile:hover {
  transform: translateY(-1px);
  box-shadow: var(--ms2-elev-1), inset 0 1px 0 var(--ms2-inner);
}

.ms2-tile__icon {
  display: grid;
  place-items: center;
  width: 30px;
  height: 30px;
  border-radius: var(--gtos-radius-sm);
  background: color-mix(in srgb, var(--ms2-tone) 22%, transparent);
  color: var(--ms2-tone);
  font: var(--gtos-weight-bold) var(--gtos-text-sm) / 1 var(--ms2-display);
}

.ms2-tile__label {
  min-width: 0;
  overflow-wrap: anywhere;
}

.ms2-tile--brand {
  --ms2-tone: var(--ms2-brand);
}

.ms2-tile--accent {
  --ms2-tone: var(--ms2-accent);
}

.ms2-tile--info {
  --ms2-tone: var(--ms2-info);
}

.ms2-tile--violet {
  --ms2-tone: var(--ms2-violet);
}

.ms2-tile--purple {
  --ms2-tone: var(--ms2-purple);
}

.ms2-tile--orange {
  --ms2-tone: var(--ms2-orange);
}

.ms2-tile--ok {
  --ms2-tone: var(--ms2-ok);
}

.ms2-tile--warn {
  --ms2-tone: var(--ms2-warn);
}

.ms2-tile--danger {
  --ms2-tone: var(--ms2-bad);
}

/* --- yan panel --- */

.ms2__aside {
  display: flex;
  flex-direction: column;
  min-width: 0;
  background: var(--ms2-glass);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--ms2-radius);
  box-shadow: var(--ms2-elev-1), inset 0 1px 0 var(--ms2-inner);
  backdrop-filter: var(--ms2-blur);
  overflow: hidden;
}

.ms2-sec {
  padding: var(--gtos-space-3) var(--gtos-space-4);
  border-bottom: 1px solid var(--ms2-hairline);
  min-width: 0;
}

.ms2-sec:last-child {
  border-bottom: 0;
}

.ms2-sec__title {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--gtos-space-2);
  margin: 0 0 var(--gtos-space-2);
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 1.3 var(--ms2-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ms2-muted);
}

.ms2-sec__title > span {
  letter-spacing: var(--gtos-tracking-wide);
  text-transform: none;
  color: var(--ms2-accent);
}

.ms2-sec__body {
  font-size: var(--gtos-text-xs);
  line-height: var(--gtos-leading);
  color: var(--ms2-ink);
}

.ms2-sec__body p {
  margin: 0 0 var(--gtos-space-2);
}

.ms2-sec__body p:last-child {
  margin-bottom: 0;
}

/* --- Uzman blokları (WP-H3-TEK-02b): "Bu modüldeki yetenekleri" ve
   "Son işleri". Satırlar GERÇEK kaynaktan gelir (agent-profiles.json
   capabilities + maytrasPlatform.c01.conversations); veri yoksa blok hiç
   basılmaz, bölüm başlığındaki kaynak rozeti CANLI/ÖRNEK/EKSİK der. --- */
.ms2-skill,
.ms2-work {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--gtos-space-2);
  margin: 0 0 var(--gtos-space-2);
  min-width: 0;
}

.ms2-skill:last-child,
.ms2-work:last-child {
  margin-bottom: 0;
}

.ms2-skill__label,
.ms2-work__title {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: var(--ms2-ink);
}

/* WP-MS2-SKILL-LINK-01: modülde gerçek paneli olan yetenek düğme olarak basılır
   (module-shell-v2.js SKILL_TOOL_TARGETS) — görünüm etiketle aynı, yalnız alt
   çizgi + imleç ile tıklanabilir olduğu anlaşılır; odak halkası görünür. */
.ms2-skill__label--link {
  appearance: none;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  font: inherit;
  text-align: start;
  cursor: pointer;
  text-decoration: underline;
  text-decoration-color: color-mix(in srgb, var(--ms2-brand) 45%, transparent);
  text-underline-offset: 3px;
}

.ms2-skill__label--link:hover {
  color: var(--ms2-brand);
  text-decoration-color: currentColor;
}

.ms2-skill__label--link:focus-visible {
  outline: 2px solid var(--ms2-accent);
  outline-offset: 2px;
  border-radius: 4px;
}

.ms2-skill__state {
  flex: 0 0 auto;
  padding: 0 var(--gtos-space-2);
  border-radius: var(--gtos-radius-pill);
  border: 1px solid var(--ms2-hairline);
  background: var(--ms2-surface-2);
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 16px var(--ms2-body);
  color: var(--ms2-muted);
  white-space: nowrap;
}

/* "şu an koşuyor" ALTIN, "bu turda koştu" turkuaz, "hazır" nötr —
   c01-constellation.js skillTree() state sözlüğüyle birebir. */
.ms2-skill__state--now {
  border-color: var(--ms2-accent);
  background: color-mix(in srgb, var(--ms2-accent) 14%, transparent);
  color: var(--ms2-accent);
}

.ms2-skill__state--on {
  border-color: color-mix(in srgb, var(--ms2-brand) 40%, transparent);
  background: var(--ms2-brand-soft);
  color: var(--ms2-brand);
}

.ms2-work__meta {
  flex: 0 0 auto;
  font-variant-numeric: tabular-nums;
  font-size: var(--gtos-text-2xs);
  color: var(--ms2-muted);
}

.ms2-kv {
  display: grid;
  grid-template-columns: minmax(0, auto) minmax(0, 1fr);
  gap: var(--gtos-space-1) var(--gtos-space-3);
  margin: 0;
  font-size: var(--gtos-text-xs);
}

.ms2-kv dt {
  color: var(--ms2-muted);
  white-space: nowrap;
}

.ms2-kv dd {
  margin: 0;
  min-width: 0;
  text-align: right;
  font-weight: var(--gtos-weight-semibold);
  font-variant-numeric: tabular-nums;
  overflow-wrap: anywhere;
}

/* ================================================================== *
 * 8. DURUMLAR — boş / yükleniyor / hata
 * Dürüstlük ilkesi: veri yoksa sahte içerik BASILMAZ.
 * ================================================================== */

.ms2-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--gtos-space-2);
  padding: var(--gtos-space-8) var(--ms2-pad);
  text-align: center;
  background: var(--ms2-glass);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--ms2-radius);
  box-shadow: var(--ms2-elev-1), inset 0 1px 0 var(--ms2-inner);
  backdrop-filter: var(--ms2-blur);
}

.ms2-state__icon {
  display: grid;
  place-items: center;
  width: 52px;
  height: 52px;
  border-radius: var(--gtos-radius-pill);
  border: 1px solid var(--ms2-hairline);
  background: var(--ms2-surface-2);
  color: var(--ms2-muted);
  font-size: var(--gtos-text-xl);
}

.ms2-state__title {
  margin: 0;
  font: var(--gtos-weight-semibold) var(--gtos-text-md) / 1.3 var(--ms2-display);
  color: var(--ms2-ink);
}

.ms2-state__hint {
  margin: 0;
  max-width: 48ch;
  font-size: var(--gtos-text-xs);
  line-height: var(--gtos-leading);
  color: var(--ms2-muted);
}

.ms2-state__skel {
  width: 100%;
  max-width: 34rem;
  margin-top: var(--gtos-space-3);
}

.ms2-state__actions {
  display: flex;
  gap: var(--gtos-space-2);
  flex-wrap: wrap;
  justify-content: center;
  margin-top: var(--gtos-space-2);
}

/* Boş durum bilerek NÖTR kalır ama ölü değil: turkuaz halka "burası
   çalışıyor, yalnız veri yok" der (A01 ref'indeki dürüst boş durum). */
.ms2-state--empty .ms2-state__icon {
  border-color: color-mix(in srgb, var(--ms2-brand) 40%, transparent);
  background: var(--ms2-brand-soft);
  color: var(--ms2-brand);
}

.ms2-state--error .ms2-state__icon {
  color: var(--ms2-bad);
  border-color: color-mix(in srgb, var(--ms2-bad) 40%, transparent);
  background: var(--ms2-bad-soft);
}

.ms2-state--error .ms2-state__title {
  color: var(--ms2-bad);
}

.ms2-state--loading .ms2-state__icon {
  color: var(--ms2-info);
  border-color: color-mix(in srgb, var(--ms2-info) 40%, transparent);
  background: var(--ms2-info-soft);
}

.ms2-state__detail {
  max-width: 100%;
  margin: var(--gtos-space-2) 0 0;
  padding: var(--gtos-space-2) var(--gtos-space-3);
  border-radius: var(--gtos-radius-sm);
  background: var(--ms2-surface-2);
  color: var(--ms2-muted);
  font: var(--gtos-weight-normal) var(--gtos-text-2xs) / var(--gtos-leading) var(--ms2-mono);
  text-align: left;
  overflow-wrap: anywhere;
  white-space: pre-wrap;
}

/* --- iskelet (yükleniyor) --- */

.ms2-skel {
  display: block;
  height: 12px;
  border-radius: var(--gtos-radius-xs);
  background: linear-gradient(
    90deg,
    var(--ms2-surface-2) 0%,
    color-mix(in srgb, var(--ms2-accent) 16%, var(--ms2-surface-2)) 50%,
    var(--ms2-surface-2) 100%
  );
  background-size: 200% 100%;
  animation: ms2-skel 1.8s var(--gtos-ease-standard) infinite;
}

.ms2-skel + .ms2-skel {
  margin-top: var(--gtos-space-2);
}

.ms2-skel--title {
  height: 18px;
  width: 42%;
}

.ms2-skel--row {
  width: 100%;
}

.ms2-skel--short {
  width: 64%;
}

@keyframes ms2-skel {
  0% {
    background-position: 100% 0;
  }
  100% {
    background-position: -100% 0;
  }
}

/* ================================================================== *
 * 9. ALT DESEN — KART (derinlik + hover glow; gtos-mp__panel grameri)
 * ================================================================== */

.ms2-card {
  display: flex;
  flex-direction: column;
  min-width: 0;
  background: var(--ms2-glass);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--ms2-radius);
  /* İKİ KATMANLI gölge (yakın-keskin temas + uzak-yumuşak hacim) + 1px iç
     highlight: açıkta beyaz kırılma, koyuda altın hairline. Malzeme hissi
     buradan gelir, gradyandan değil. */
  box-shadow: var(--ms2-elev-1), inset 0 1px 0 var(--ms2-inner);
  /* Cam YALNIZ koyu temada gerçek maliyet üretir (--gtos-c-glass-blur açık
     temada `none`). Anayasa "Performance Before Effects": açık temada
     onlarca kart için sıfır blur katmanı açılır. */
  backdrop-filter: var(--ms2-blur);
  overflow: hidden;
  transition: border-color 160ms var(--gtos-ease-standard),
    box-shadow 160ms var(--gtos-ease-standard),
    transform 160ms var(--gtos-ease-standard);
}

.ms2-card:hover {
  transform: translateY(-1px);
  border-color: var(--ms2-accent-line);
  box-shadow: var(--ms2-elev-2), inset 0 1px 0 var(--ms2-inner);
}

.ms2-card__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--gtos-space-3);
  padding: var(--gtos-space-4) var(--gtos-space-5);
  border-bottom: 1px solid var(--ms2-hairline);
  background: color-mix(in srgb, var(--ms2-accent) 5%, transparent);
  min-width: 0;
}

.ms2-card__titles {
  min-width: 0;
}

/* Eyebrow'un solundaki altın çubuk — `gtos-mp__panel-title::before`
   grameri (orada turkuaz), CC diline çevrildi. */
.ms2-card__eyebrow {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-2);
  margin: 0 0 var(--gtos-space-1);
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 1.3 var(--ms2-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--ms2-muted);
}

.ms2-card__eyebrow::before {
  content: '';
  width: 3px;
  height: 0.9em;
  flex: 0 0 auto;
  border-radius: var(--gtos-radius-xs);
  background: linear-gradient(
    180deg,
    var(--ms2-accent),
    color-mix(in srgb, var(--ms2-brand) 60%, transparent)
  );
}

.ms2-card__title {
  margin: 0;
  font: var(--gtos-weight-semibold) var(--gtos-text-md) / 1.25 var(--ms2-display);
  color: var(--ms2-ink);
}

.ms2-card__tools {
  display: flex;
  align-items: center;
  gap: var(--gtos-space-2);
  flex: 0 0 auto;
}

.ms2-card__body {
  padding: var(--gtos-space-5);
  min-width: 0;
  font-size: var(--gtos-text-sm);
  line-height: var(--gtos-leading);
}

.ms2-card__body > :first-child {
  margin-top: 0;
}

.ms2-card__body > :last-child {
  margin-bottom: 0;
}

.ms2-card__body--flush {
  padding: 0;
}

.ms2-card__foot {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--gtos-space-2);
  flex-wrap: wrap;
  padding: var(--gtos-space-3) var(--gtos-space-4);
  border-top: 1px solid var(--ms2-hairline);
  background: var(--ms2-surface-2);
}

.ms2-card--accent {
  border-color: var(--ms2-accent-line);
}

.ms2-card--brand {
  border-color: color-mix(in srgb, var(--ms2-brand) 40%, transparent);
}

.ms2-card--danger {
  border-color: color-mix(in srgb, var(--ms2-bad) 42%, transparent);
}

/* ================================================================== *
 * 10. ALT DESEN — TABLO
 * ================================================================== */

.ms2-table-wrap {
  width: 100%;
  min-width: 0;
  overflow-x: auto;
  scrollbar-width: thin;
}

.ms2-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--gtos-text-xs);
  line-height: var(--gtos-leading-tight);
}

.ms2-table caption {
  padding: var(--gtos-space-2) var(--gtos-space-4);
  text-align: left;
  font-size: var(--gtos-text-2xs);
  color: var(--ms2-muted);
}

.ms2-table th,
.ms2-table td {
  padding: var(--gtos-space-2) var(--gtos-space-3);
  text-align: left;
  border-bottom: 1px solid var(--ms2-hairline);
  vertical-align: top;
}

.ms2-table thead th {
  position: sticky;
  top: 0;
  z-index: var(--gtos-z-sticky);
  background: var(--ms2-surface-2);
  color: var(--ms2-muted);
  font: var(--gtos-weight-semibold) var(--gtos-text-2xs) / 1.3 var(--ms2-body);
  letter-spacing: var(--gtos-tracking-wide);
  text-transform: uppercase;
  white-space: nowrap;
}

.ms2-table tbody tr:nth-child(even) {
  background: var(--ms2-zebra);
}

.ms2-table tbody tr:hover {
  background: var(--ms2-hover);
}

.ms2-table tbody tr:last-child td {
  border-bottom: 0;
}

.ms2-table [data-ms2-num],
.ms2-table th[data-ms2-num] {
  text-align: right;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.ms2-table [data-ms2-code] {
  font-family: var(--ms2-mono);
  white-space: nowrap;
}

.ms2-table tfoot td {
  background: var(--ms2-surface-2);
  font-weight: var(--gtos-weight-semibold);
}

.ms2-table__empty td {
  padding: var(--gtos-space-6) var(--gtos-space-4);
  text-align: center;
  color: var(--ms2-muted);
}

/* ================================================================== *
 * 11. ALT DESEN — FORM
 * ================================================================== */

.ms2-form {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--gtos-space-3) var(--gtos-space-4);
  min-width: 0;
  margin: 0;
  padding: 0;
  border: 0;
}

.ms2-form__legend {
  padding: 0;
  margin: 0 0 var(--gtos-space-1);
  grid-column: 1 / -1;
  font: var(--gtos-weight-semibold) var(--gtos-text-sm) / 1.3 var(--ms2-display);
  color: var(--ms2-ink);
}

.ms2-field {
  display: flex;
  flex-direction: column;
  gap: var(--gtos-space-1);
  min-width: 0;
}

.ms2-field--wide {
  grid-column: 1 / -1;
}

.ms2-field__label {
  font-size: var(--gtos-text-xs);
  font-weight: var(--gtos-weight-semibold);
  color: var(--ms2-muted);
}

.ms2-field__req {
  margin-left: var(--gtos-space-1);
  color: var(--ms2-bad);
}

.ms2-input,
.ms2-select,
.ms2-textarea {
  width: 100%;
  min-width: 0;
  padding: var(--gtos-space-2) var(--gtos-space-3);
  border: 1px solid var(--ms2-line-input);
  border-radius: var(--gtos-radius-sm);
  background: var(--ms2-surface);
  color: var(--ms2-ink);
  font-family: inherit;
  font-size: var(--gtos-text-sm);
  line-height: var(--gtos-leading-tight);
  transition: border-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    box-shadow var(--gtos-duration-fast) var(--gtos-ease-standard);
}

.ms2-textarea {
  min-height: 84px;
  resize: vertical;
}

.ms2-input::placeholder,
.ms2-textarea::placeholder {
  color: var(--ms2-muted);
  opacity: 1;
}

.ms2-input:hover,
.ms2-select:hover,
.ms2-textarea:hover {
  border-color: var(--ms2-accent-line);
}

.ms2-input:focus,
.ms2-select:focus,
.ms2-textarea:focus {
  border-color: var(--ms2-accent);
  box-shadow: 0 0 0 3px var(--ms2-gold-glow);
}

.ms2-input:disabled,
.ms2-select:disabled,
.ms2-textarea:disabled {
  background: var(--ms2-surface-2);
  color: var(--ms2-muted);
  cursor: not-allowed;
}

.ms2-field--invalid .ms2-input,
.ms2-field--invalid .ms2-select,
.ms2-field--invalid .ms2-textarea {
  border-color: var(--ms2-bad);
}

.ms2-field__hint {
  margin: 0;
  font-size: var(--gtos-text-2xs);
  line-height: var(--gtos-leading-tight);
  color: var(--ms2-muted);
}

.ms2-field__error {
  margin: 0;
  font-size: var(--gtos-text-2xs);
  font-weight: var(--gtos-weight-semibold);
  line-height: var(--gtos-leading-tight);
  color: var(--ms2-bad);
}

.ms2-check {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-2);
  font-size: var(--gtos-text-xs);
  color: var(--ms2-ink);
  cursor: pointer;
}

.ms2-form__actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--gtos-space-2);
  flex-wrap: wrap;
  grid-column: 1 / -1;
}

/* ================================================================== *
 * 12. DÜĞMELER / ÇİPLER — BİRİNCİL DÜĞME ALTIN
 * Yasin'in reddinin somut maddesi: v1'de birincil düğme MAVİYDİ
 * (--ms2-action-bg). Ref'lerdeki "Ara" düğmesi altındır. Birincil eylem
 * artık --ms2-accent-bg (açık: bronze-600 · koyu: gold-500) + üstünde
 * garanti okunur --ms2-on-accent.
 * ================================================================== */

.ms2-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--gtos-space-2);
  height: 34px;
  padding: 0 var(--gtos-space-4);
  border: 1px solid transparent;
  border-radius: var(--gtos-radius-sm);
  background: var(--ms2-surface-2);
  color: var(--ms2-ink);
  font: var(--gtos-weight-semibold) var(--gtos-text-xs) / 1 var(--ms2-body);
  white-space: nowrap;
  text-decoration: none;
  cursor: pointer;
  transition: background-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    border-color var(--gtos-duration-fast) var(--gtos-ease-standard),
    box-shadow var(--gtos-duration-fast) var(--gtos-ease-standard),
    color var(--gtos-duration-fast) var(--gtos-ease-standard);
}

.ms2-btn[disabled],
.ms2-btn[aria-disabled='true'] {
  opacity: 0.55;
  cursor: not-allowed;
}

/* METAL ALTIN: düz renk yerine ince gradyan (açık altından bronza) +
   statik sheen + iç highlight. `background-color` KASITLI olarak
   --ms2-accent-bg kalır: hem gradyan desteklenmeyen yerde yedek, hem de
   kapının (check:module-shell-v2 · gold-primary-action) ölçtüğü bildirim. */
.ms2-btn--primary {
  background-color: var(--ms2-accent-bg);
  background-image: var(--ms2-sheen), var(--ms2-gold-grad);
  border-color: var(--ms2-accent-bg);
  color: var(--ms2-on-accent);
  box-shadow: var(--gtos-shadow-xs), inset 0 1px 0 var(--ms2-inner);
}

.ms2-btn--primary:hover:not([disabled]) {
  box-shadow: 0 0 0 4px var(--ms2-gold-glow), var(--ms2-elev-1),
    inset 0 1px 0 var(--ms2-inner);
}

/* Geriye dönük ad: `variant:'accent'` da altın birincildir (v1'de ayrı
   bir stildi; artık ikisi de aynı altın eylemi gösterir). */
.ms2-btn--accent {
  background-color: var(--ms2-accent-bg);
  background-image: var(--ms2-sheen), var(--ms2-gold-grad);
  border-color: var(--ms2-accent-bg);
  color: var(--ms2-on-accent);
}

.ms2-btn--ghost {
  background: transparent;
  border-color: var(--ms2-line-input);
  color: var(--ms2-ink);
}

.ms2-btn--ghost:hover:not([disabled]) {
  background: var(--ms2-hover);
  border-color: var(--ms2-accent-line);
}

/* Bilgi/yardım eylemi — mavi bilerek burada kalır (birincil değil). */
.ms2-btn--info {
  background: color-mix(in srgb, var(--ms2-action) 12%, transparent);
  border-color: color-mix(in srgb, var(--ms2-action) 45%, transparent);
  color: var(--ms2-action);
}

.ms2-btn--danger {
  background: var(--ms2-bad-soft);
  border-color: color-mix(in srgb, var(--ms2-bad) 42%, transparent);
  color: var(--ms2-bad);
}

/* YAN PANEL DÜĞMESİ ("İlgili modüller") — SARAR, TAŞMAZ, KIRPILMAZ.
   WP-H3-TEK-A-CILA-01 ölçümü (20260916-dalgaA-premium-denetim/facts.json
   `relatedButtonsOverflow`): A05'te "A03 · Potansiyel Müşteri & Tedarikçi
   Tespiti" düğmesi kartın sağ kenarını 1440'ta 3px, 375'te 68px aşıyordu
   (`.ms2-btn` tek satır + `white-space: nowrap` + içerik genişliği).
   EN'de aynı düğme "A01 · HS Code Classification (GTİP determina…" diye
   kırpılıyordu. Çözüm SARMA'dır: düğme bölüm genişliğini aşamaz, metin
   satıra bölünür, hiçbir etiket kesilmez. Yükseklik sabit 34px yerine
   `min-height` olur — iki satırlık etiket kutunun dışına taşmaz. */
.ms2__aside .ms2-btn,
.ms2-sec__body .ms2-btn {
  display: flex;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  height: auto;
  min-height: 34px;
  padding-block: var(--gtos-space-2);
  justify-content: flex-start;
  text-align: left;
  white-space: normal;
  overflow-wrap: anywhere;
  line-height: var(--gtos-leading-tight);
}

.ms2-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--gtos-space-1);
  height: 22px;
  padding: 0 var(--gtos-space-2);
  border: 1px solid var(--ms2-hairline);
  border-radius: var(--gtos-radius-pill);
  background: var(--ms2-surface-2);
  color: var(--ms2-muted);
  font-size: var(--gtos-text-2xs);
  font-weight: var(--gtos-weight-semibold);
  white-space: nowrap;
}

.ms2-chip--ok {
  color: var(--ms2-ok);
  background: var(--ms2-ok-soft);
  border-color: color-mix(in srgb, var(--ms2-ok) 34%, transparent);
}

.ms2-chip--warn {
  color: var(--ms2-warn);
  background: var(--ms2-warn-soft);
  border-color: color-mix(in srgb, var(--ms2-warn) 34%, transparent);
}

.ms2-chip--danger {
  color: var(--ms2-bad);
  background: var(--ms2-bad-soft);
  border-color: color-mix(in srgb, var(--ms2-bad) 34%, transparent);
}

.ms2-chip--info {
  color: var(--ms2-info);
  background: var(--ms2-info-soft);
  border-color: color-mix(in srgb, var(--ms2-info) 34%, transparent);
}

.ms2-chip--accent {
  color: var(--ms2-accent);
  background: var(--ms2-accent-soft);
  border-color: var(--ms2-accent-line);
}

.ms2-chip--brand {
  color: var(--ms2-brand);
  background: var(--ms2-brand-soft);
  border-color: color-mix(in srgb, var(--ms2-brand) 34%, transparent);
}

/* --- DURUM-YALNIZ KABUK (yükleniyor / boş / hata) ---
   İçerik gizliyken iki sütun kurmanın anlamı yok: durum kartı zaten tek
   bir mesajdır, yanına daraltılmış bir panel koymak ikisini birden
   okunmaz yapar. Uzman blokları durum kartının ALTINDA tam genişlikte
   basılır. (Kanca: setState() kökte data-ms2-content-state kurar.) */
.ms2[data-ms2-content-state] .ms2__body,
.ms2[data-ms2-content-state] .ms2__body--with-ops {
  grid-template-columns: minmax(0, 1fr);
}

/* ================================================================== *
 * 13. DUYARLI DAVRANIŞ
 * ================================================================== */

@media (max-width: 1440px) {
  .ms2 {
    --ms2-ops: 208px;
  }
}

@media (max-width: 1280px) {
  .ms2 {
    --ms2-aside: 300px;
  }

  /* Üç sütun 1280'de taşıyor: işlem menüsü kalır, yan panel içeriğin
     altına iner (B04 ref'inde okunurluğu taşıyan sütun işlem menüsü). */
  .ms2__body--with-ops {
    grid-template-columns: var(--ms2-ops) minmax(0, 1fr);
  }
}

@media (max-width: 1024px) {
  .ms2__body,
  .ms2__body--with-ops {
    grid-template-columns: minmax(0, 1fr);
  }

  /* 8 karo 2+2+2+2; yine yetim yok. */
  .ms2-tiles {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .ms2-grid > [data-ms2-span='3'],
  .ms2-grid > [data-ms2-span='4'],
  .ms2-grid > [data-ms2-span='8'],
  .ms2-grid > [data-ms2-span='9'] {
    grid-column: span 6;
  }
}

@media (max-width: 768px) {
  .ms2 {
    --ms2-pad: var(--gtos-space-4);
  }

  .ms2__banner-inner {
    flex-direction: column;
    align-items: stretch;
    /* KIRPILMANIN KÖKÜ (WP-H3-TEK-A-CILA-02 ölçümü).
       Taban kural `.ms2__banner-inner`'a `flex-wrap: wrap` veriyor. Burada
       `flex-direction: column` eklenince kap ÇOK SATIRLI bir kolon olur ve
       CSS Flexbox §9.4'e göre çok satırlı bir kapta SATIRIN ÇAPRAZ BOYUTU
       kabın kendi genişliği DEĞİL, en geniş öğenin max-content genişliğidir;
       `align-items: stretch` de bütün çocukları o genişliğe uzatır.
       375'te ölçülen sonuç (cila02-before/facts.json, A05 açık tema):
       kabın iç genişliği 241px, çocukların hepsi 271,3px — yani başlık,
       açıklama, uzman şeridi ve "…'ya sor" düğmesi 12–16px sağdan
       kartın dışına taşıyordu. `.ms2__banner` `overflow: hidden` taşıdığı
       için taşma SAYFAYA yansımıyor, sessizce KIRPILIYORDU; bu yüzden
       `scrollWidth` bakan önceki taramalar bulguyu hiç görmedi.
       `nowrap` kabı tek satırlı yapar → satırın çapraz boyutu yeniden
       kabın kesin genişliği olur → stretch artık taşırmaz. */
    flex-wrap: nowrap;
  }

  /* Dikey akışta ana eksen YÜKSEKLİK olur: satır düzenindeki
     `flex: 1 1 26rem` burada 416px taban YÜKSEKLİK + grow anlamına gelir.
     Sıkı akışa döndürülür — satır yüksekliği `auto`. */
  .ms2__titles {
    flex: 0 1 auto;
  }

  .ms2__banner-side {
    margin-left: 0;
  }

  /* Banner yan sütunundaki her yuva KENDİ SATIRINI alır ve daralabilir.
     `min-width: 0` olmadan yuvanın min-content genişliği (uzman şeridi +
     düğme) taban alınır ve satır yine kartın dışına çıkar. */
  .ms2__banner-side,
  .ms2__help-slot,
  .ms2__expert-slot,
  .ms2__status-slot,
  .ms2__actions {
    min-width: 0;
  }

  .ms2__help-slot,
  .ms2__expert-slot,
  .ms2__status-slot {
    width: 100%;
  }

  /* Dar ekranda uzman seridi alt satira iner ve portre 40px e duser. */
  .ms2__expert {
    width: 100%;
    /* Portre + ad/ünvan bir satır, "…'ya sor" düğmesi ALT satır: şerit
       artık tek satıra sığmayı zorlamıyor. Hap yarıçapı iki satırlık bir
       kutuda devasa bir kavise dönüştüğü için mobilde kart yarıçapına
       (`--ms2-radius`, banner ile aynı token) düşürülür — masaüstünde hap
       aynen kalır. */
    flex-wrap: wrap;
    row-gap: var(--gtos-space-2);
    border-radius: var(--ms2-radius);
  }

  .ms2__expert-body {
    /* Kalan genişliği alır ama 7rem'in altına da inebilir (min-width: 0
       taban kuralda zaten var) — ünvan uzunsa iki satıra sarar. */
    flex: 1 1 7rem;
  }

  .ms2__expert-row {
    flex-wrap: wrap;
    min-width: 0;
  }

  .ms2__expert-avatar {
    width: 40px;
    height: 40px;
  }

  /* `margin-left: auto` düğmeyi AYNI satırda sağa itiyordu; 375'te bu,
     şeridin min-content genişliğini kartın ötesine taşıyan bileşendi.
     Kendi satırında tam genişlik: hem kırpılma biter hem dokunma hedefi
     büyür (44px min-height kuralı aşağıda zaten geçerli). */
  .ms2__expert-ask {
    flex: 1 0 100%;
    margin-left: 0;
    width: 100%;
  }

  /* Durum çipi (`.ms2__status-slot .ms2-status`) taban kuralda
     `white-space: nowrap` + sabit `height: 26px` taşıyor. A05'in hata
     metni ("Fuar takvimi şu anda yüklenemedi…") 375'te tek satırda
     kartın dışına çıkıyordu. Mobilde sarar ve yüksekliği içeriğe göre
     büyür; masaüstü tek satırlık hap görünümü DEĞİŞMEZ. */
  .ms2__status-slot .ms2-status {
    height: auto;
    min-height: 26px;
    padding-top: var(--gtos-space-1);
    padding-bottom: var(--gtos-space-1);
    white-space: normal;
    text-align: left;
  }

  .ms2__status-slot .ms2-status__dot {
    align-self: flex-start;
    margin-top: 5px;
  }

  .ms2-grid > * {
    grid-column: span 12 !important;
  }

  .ms2-tiles {
    grid-template-columns: minmax(0, 1fr);
  }

  /* Dar ekranda kart DARALMAZ, şerit daha çok SATIRA bölünür — daralma
     kırpmaya, kırpma da okunmayan etikete dönüyordu. */
  .ms2__kpis {
    grid-template-columns: repeat(auto-fit, minmax(168px, 1fr));
  }

  /* DOKUNMA HEDEFİ — dar ekranda en az 44px.
     WP-H3-TEK-A-CILA-01 ölçümü (facts.json `touchTargets`): 375'te hem
     sekmeler hem yan panel düğmeleri 34px yüksekliğindeydi; parmakla
     isabet için kabul edilen alt sınır 44px'tir (Apple HIG / WCAG 2.5.8
     hedef boyutu). Masaüstünde görünüm DEĞİŞMEZ: bu kural yalnız
     ≤768px'te çalışır, sabit `height` yerine `min-height` kullanır. */
  /* SEKME ŞERİDİ — ölçüm (cila02-before/facts.json `tabInfo`): A01 4 sekme,
     A03 3 sekme, `?a05mp=1` 2 sekme, `?a04dev=1` 3 sekme → 375'te HEPSİ
     `flex-wrap: wrap` sayesinde sarıyor, `overRight` 0, `textClipped` false.
     Yani bugün kırpılma YOK ve yatay kaydırmaya gerek yok. Kalan tek risk
     ŞERİTTEN GENİŞ TEK BİR SEKME: `.ms2-tab` taban kuralda
     `white-space: nowrap` taşıdığı için böyle bir etiket sarmak yerine
     kırpılırdı. Mobilde etiket sekmenin İÇİNDE sarar — bugünkü etiketlerin
     hiçbiri şerit genişliğini aşmadığı için mevcut görünüm değişmez
     (AFTER ölçümünde sekme genişlik/yükseklikleri birebir aynı). */
  .ms2-tabs .ms2-tab {
    max-width: 100%;
    white-space: normal;
    text-align: center;
  }

  .ms2-tab,
  .ms2-btn,
  .ms2-step,
  /* Yan panel düğmesinin kendi `min-height: 34px` kuralı DAHA SPESİFİKTİR
     (iki sınıf); medya sorgusu özgüllük eklemediği için burada aynı
     seçicinin tekrar edilmesi ZORUNLU — 375 ölçümünde düğme 37px'te
     kalmıştı, bu satır olmadan kural sessizce eziliyor. */
  .ms2__aside .ms2-btn,
  .ms2-sec__body .ms2-btn {
    height: auto;
    min-height: 44px;
  }
}

/* Premium cilanın HAREKETLİ olan her parçası burada kapanır: iskelet
   shimmer'ı statik zemine düşer, "canlı" nabzı ve yükleniyor noktası
   durur, hover yükselmeleri iptal olur. (Bu blok tema değil ERİŞİLEBİLİRLİK
   sorgusudur — prefers-color-scheme yasağının tek istisnası.) */
@media (prefers-reduced-motion: reduce) {
  .ms2-skel,
  .ms2-status--loading .ms2-status__dot,
  .ms2-status--live .ms2-status__dot {
    animation: none;
  }

  .ms2 * {
    transition-duration: 0ms !important;
  }

  .ms2-kpi--link:hover,
  .ms2-card:hover,
  .ms2-tab:hover:not([aria-selected='true']),
  .ms2-tile:hover {
    transform: none;
  }
}

/* ================================================================== *
 * 14. KAPSAYICI SORGUSU — kabuk DAR BIR KAPSAYICIDA da doğru davranır
 * Medya sorgularından SONRA gelir: aynı özgüllükte olduğu için sonraki
 * kural kazanır ve viewport geniş olsa bile dar kapsayıcıda tek sütuna
 * iner. Desteklenmeyen tarayıcıda blok yok sayılır ve yukarıdaki medya
 * sorguları yürürlükte kalır (bilinçli progressive enhancement).
 * ================================================================== */

@container ms2 (max-width: 760px) {
  .ms2__body,
  .ms2__body--with-ops {
    grid-template-columns: minmax(0, 1fr);
  }

  .ms2-grid > * {
    grid-column: span 12;
  }

  .ms2-tiles {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .ms2__kpis {
    grid-template-columns: repeat(auto-fit, minmax(168px, 1fr));
  }
}

@container ms2 (max-width: 480px) {
  .ms2__banner-inner {
    flex-direction: column;
    align-items: stretch;
  }

  /* Dikey akışta ana eksen YÜKSEKLİK olur: satır düzenindeki
     `flex: 1 1 26rem` burada 416px taban YÜKSEKLİK + grow anlamına gelir.
     Sıkı akışa döndürülür — satır yüksekliği `auto`. */
  .ms2__titles {
    flex: 0 1 auto;
  }

  .ms2__banner-side {
    margin-left: 0;
  }

  .ms2-tiles {
    grid-template-columns: minmax(0, 1fr);
  }

  /* WP-H3-TEK-B-CILA-04 (madde 2, KAPSAYICI karşılığı) — aşağıdaki
     `@media (max-width: 640px)` kuralının kapsayıcı-tabanlı ikizi. Kabuk
     GENİŞ bir viewport'ta DAR bir sütuna gömülebilir (`shell-is-container`
     ilkesi); o durumda medya sorgusu hiç eşleşmez ama 264px eşiği yine
     aşılır. Satır aralığı (`row-gap`) DEĞİŞMEZ. */
  .ms2-grid {
    column-gap: 0;
  }
}

/* ------------------------------------------------------------------ *
 * WP-H3-TEK-B-CILA-04 · madde 2 — DAR EKRANDA SÜTUN ARALIĞI (GENEL)
 *
 * ÖLÇÜLDÜ (`kabul-kanitlari/20260917-cila-b04-css/facts-once.json`,
 * 375px, 14 modül): `.ms2-grid` 12 sütunu `repeat(12, minmax(0,1fr))` +
 * 24px `--ms2-gap` ile kuruluyor. Kap 264px'ten (11 × 24px boşluk) darsa
 * TÜM track'ler 0'a çöker ve 12 sütun kaplayan tek içerik düğümü yine
 * 11 boşluğu taşıdığı için 264px'te takılır. Ölçümde B05 tam bu hâldeydi:
 * kap 244,2px · altı içerik düğümü 264px → her biri 19,78px taşma
 * (B07 9,8px ve B04 daha önce KENDİ kapsamlı kurallarıyla kapatılmıştı).
 *
 * B07/B04'ün yerel `column-gap: 0` kuralları SİLİNMEDİ: bu genel kural
 * geldikten sonra onlar zararsız tekrardır (aynı değer, daha dar kapsam)
 * ve kabuk bileşeni yüklenmese bile o iki modülde davranış aynı kalır.
 * ------------------------------------------------------------------ */
@media (max-width: 640px) {
  .ms2-grid {
    column-gap: 0;
  }
}

/* ------------------------------------------------------------------ *
 * WP-H3-TEK-B-CILA-04 · madde 3 — 4 KPI KARTI DAR KAPTA 2×2
 *
 * ÖLÇÜLDÜ (`facts4-once.json`, 1024px viewport → kap 530-556px; a01/b04/
 * b08/b07 dördünde de aynı): kap <=760px olduğunda şerit
 * `repeat(auto-fit, minmax(168px, 1fr))` ile kuruluyor ve 168px+12px
 * aritmetiği 3 sütun veriyor → 4 kart "3+1" kırılıyor, dördüncü kart
 * yetim kalıyor (B07 1024 koyu kanıt ekranında görülen hâl).
 *
 * Kural YALNIZ TAM DÖRT kartlı şeride uygular (`:nth-child(4):last-child`):
 * 3 kartlı (B04/B08) ve 5/6 kartlı (A08) şeritler DEĞİŞMEZ.
 * Alt sınır 348px = 2 × 168 + 12: bunun altında iki sütun sığmadığı için
 * kural devreye girmez ve 375'teki tek sütunlu yığın korunur (ölçüldü:
 * 375 kap 280px → 4 satır × 1 kart, aynen kalır).
 * Üst sınır 707px = 4 × 168 + 3 × 12 - 1: 708px'ten geniş kapta dört kart
 * TEK satıra zaten sığıyor, 2×2'ye düşürmek gerileme olurdu.
 * ------------------------------------------------------------------ */
@container ms2 (min-width: 348px) and (max-width: 707px) {
  .ms2__kpis:has(> li:nth-child(4):last-child) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* ================================================================== *
 * 14b. ICERIK KOLONU SORGUSU (ms2c) — GT3-YERLESIM-CSS KOK-3 (02.10)
 *
 * OLCULDU (canli tarama, 24 modul x 1440/1280/1024/375 x kenar cubugu
 * acik/dar): `.ms2-grid` 12 sutun + sabit `data-ms2-span` (3/4/6/8/9) dar
 * icerik kolonunda tablolari ezer — B06 tablo sarmalayici 224 px / tablo
 * 431 px, A04 206'ya 786, A03 503'e 1236, C06 537'ye 641; "Islem" sutunu
 * yalniz yatay kaydirmayla ulasilabilir.
 *
 * IKI KOK: (1) ustteki `@container ms2 (max-width: 760px) { .ms2-grid > * }`
 * kurali (0,1,0) ozgulluktedir; `.ms2-grid > [data-ms2-span='N']` (0,2,0)
 * onu HER ZAMAN yener — dar kabukta span'lar hic sifirlanmiyordu.
 * (2) ms2 kapsayicisi kabugun tamamini olcer, icerik kolonunu degil.
 *
 * COZUM: icerik kolonu (`.ms2__content`, ms2c) uzerinden, span ozniteligi
 * TASIYAN cocuklara (0,2,0) — dosyada daha SONRA geldigi icin hem taban
 * span kurallarini hem `@media (max-width: 1024px)` 6'ya-indirme kuralini
 * yener. Kabuk yoksa ms2c yoktur, hicbir sey degismez.
 *   < 720 px  : her parca tam genislik (tek sutun)
 *   720-959 px: 3 → 6 (ikili), 4/8/9 → 12 (dar ray tablosu olusmaz), 6 kalir
 *   >= 960 px : ref ızgarasi aynen.
 * ================================================================== */
@container ms2c (max-width: 719px) {
  .ms2-grid > [data-ms2-span] {
    grid-column: span 12;
  }

  .ms2-grid {
    column-gap: 0;
  }
}

@container ms2c (min-width: 720px) and (max-width: 959px) {
  .ms2-grid > [data-ms2-span='3'] {
    grid-column: span 6;
  }

  .ms2-grid > [data-ms2-span='4'],
  .ms2-grid > [data-ms2-span='8'],
  .ms2-grid > [data-ms2-span='9'] {
    grid-column: span 12;
  }
}

/* Tablo kaydiricisi: kaydirilabilir oldugu GORUNSUN ve klavyeyle
   ulasilabilsin. Chrome kaydirma kaplarini klavyeyle odaklanabilir yapar
   (tabindex'siz); odak halkasi burada gorunur kilinir. Kaydirma cubugu
   iki temada kenar tokeniyla (form siniri, 3:1 esigi) boyanir — ince
   cubuk koyu temada zemine karisiyordu. */
.ms2-table-wrap {
  scrollbar-color: var(--ms2-line-input) transparent;
}

.ms2-table-wrap:focus-visible {
  outline: 2px solid var(--gtos-c-focus);
  outline-offset: 2px;
  border-radius: var(--gtos-radius-sm);
}

/* Yazdırma: kabuk kromu düşer, veri kalır. */
@media print {
  .ms2__aside,
  .ms2__actions,
  .ms2-ops,
  .ms2-tiles,
  .ms2-form__actions {
    display: none;
  }

  .ms2__banner,
  .ms2-card,
  .ms2-kpi,
  .ms2-state {
    box-shadow: none;
  }
}

/* ================================================================== *
 * WP-H3-TEK-A-A01 — DALGA A DEVİR KURALI (yalnız kabuk KURULUYKEN)
 *
 * Bir modül kabuğa taşındığında kabuk, o modülün üst kromunu (geri
 * bağlantısı, başlık/alt başlık, uzman şeridi, dürüstlük şeridi)
 * DEVRALIR. Eski workspace çubuğu aynı bilgiyi ikinci kez basmasın
 * diye burada — yalnız kabuk gerçekten sayfadaysa — gizlenir.
 *
 * KOŞULLU ve GERİ ALINABİLİR: seçici `:has(.ms2[data-ms2-module])`
 * ile bağlı — yani kural yalnız AÇIK OLAN workspace'in içinde GERÇEKTEN
 * bir kabuk kuruluysa eşleşir. Kabuk script'i yüklenmezse (404/hata) veya
 * modül henüz taşınmadıysa kural HİÇ eşleşmez ve modül bugünkü eski
 * kromuyla çalışmaya devam eder.
 *
 * KAPSAM (WP-H3-TEK-A-A03 ile genelleşti): önce yalnız `a01` yazılıydı;
 * dalga A her modül için aynı satırı kopyalamak yerine "kabuk kurulu mu"
 * koşuluna bağlandı. Kapı hâlâ modül başına: `boundModules[]`'a yazılmamış
 * bir modül kabuğu zaten monte etmez, dolayısıyla seçici de eşleşmez.
 *
 * NOT (kilit): cc-module-shell-001 (CC-MODULE-SHELL-UX-LOCK) A01'i
 * referans modül alır. Bu kural o kilidin HİÇBİR dosyasını, marker'ını
 * veya CSS bildirimini DEĞİŞTİRMEZ (`npm run check:cc-module-shell-ux`
 * PASS); yalnız A01 kabuğa taşındığında çift kromu önler. Kapsam
 * genişletilmeden önce onay netleştirilmelidir.
 * ================================================================== */
/* Kilit CSS (gtos-customer-surface.css) çubuğa `display:grid !important`
   verir; bu kural ancak aynı önek + !important ile üstün gelir (16.09 canlı
   kanıt: kural vardı ama çubuk hâlâ görünüyordu — çift başlık). */
html[data-gtos-cc='on'] #module-workspace-root:has(.ms2[data-ms2-module]) > .module-workspace-bar {
  display: none !important;
}

/* Dürüstlük şeridi AYIRT EDİCİ koşulla gizlenir: yalnız kabuk şeridi
   GERÇEKTEN basılmışsa (.ms2-honesty var). Kaynak sözlüğü okunamazsa kabuk
   şerit basmaz — o durumda eski şerit YERİNDE KALIR, ekran şeritsiz kalmaz. */
#module-workspace-root:has(.ms2[data-ms2-module] .ms2-honesty) > #gtos-surface-honesty {
  display: none;
}

/* WP-H3-TEK-A-CILA-04 — TEK "ÖRNEK VERİ" ROZETİ (kabuğunki kalır).
 *
 * ÖLÇÜM (kabul-kanitlari/20260917-cila04 marker taraması, taze oturum):
 * A08 açıkken ekranda ÜÇ rozet vardı —
 *   (a) `#module-workspace-root > span.gtos-sample-data-badge`
 *   (b) `.module-card[data-module='a08'] > span.gtos-sample-data-badge`
 *   (c) kabuk şeridinin kendi rozeti (`.ms2-honesty .ms2-src--sample`)
 * (a) ve (b) `gtos-empty-cta.js` → `ensureSampleBadge()` çıktısıdır: kök
 * düğümün `textContent`i SAMPLE_MARKERS'tan birini içeriyorsa rozet basar ve
 * işaretçilerden biri "ÖRNEK VERİ" dizgisinin KENDİSİDİR. Kabuk şeridi bu
 * cümleyi bastığı an tarayıcı kendi kendini tetikliyor: bir rozet iki kopya
 * daha doğuruyor. Taze oturumda ölçüldü — eşleşen TEK işaretçi "ÖRNEK VERİ"
 * dizgisiydi (Shandong Wanshan / ÖRNEK-IMP-2026-001 / SAMPLE_DATA_PILOT_DEMO
 * gibi GERÇEK örnek-veri işaretçilerinden hiçbiri yok), yani gizlenen iki
 * rozet hiçbir bilgi taşımıyor.
 *
 * AYRICA SIZINTIYI DA KAPATIR: (a) `#module-workspace-root`un ilk çocuğudur
 * ve modül değişince SİLİNMEZ. Ölçüm (once/facts.json sweep): A08'i bir kez
 * açtıktan sonra A01…A07'nin hepsinde bu rozet görünür kalıyordu — CANLI/
 * HAVUZ verisi gösteren modüllerde ekranın tepesinde "ÖRNEK VERİ" yazıyordu.
 * Taze oturumda (A08'e hiç girilmeden) A01-A07'de rozet sayısı 0'dı.
 *
 * DOM SİLİNMEZ, KOŞULLUDUR: kural yalnız o workspace'te GERÇEKTEN bir kabuk
 * kuruluyken eşleşir; kabuk yüklenmezse rozetler eskisi gibi görünür.
 * Kabuğun KENDİ rozeti (`.ms2-src--sample`) bu kuralın DIŞINDADIR ve A08'de
 * hesap yapılana kadar görünür kalır; hesaptan sonra modülün kendisi
 * `paintA08SampleBadge(false)` ile kaldırır, kabuk da `indicative` rozetine
 * geçer (davranış değişmedi). */
#module-workspace-root:has(.ms2[data-ms2-module]) > [data-gtos-sample-badge='1'],
#module-workspace-root .module-card:has(.ms2[data-ms2-module]) > [data-gtos-sample-badge='1'] {
  display: none;
}

/* WP-H3-TEK-A-A07 — A07'nin kendi "Güncelleme durumu" bandı (#a07-auto-status)
   kabuk durum şeridiyle AYNI cümleleri basar (aynı `a07.update.*` anahtarları,
   aynı sayılar, tek kaynak feed-health/auto-status yanıtı). Kabuk şeridi
   GERÇEKTEN basılmışsa aynı bilgi ekranda iki kez durmasın diye band gizlenir.
   AYIRT EDİCİ ve GERİ ALINABİLİR: `.ms2-statusbar` düğümü yalnız en az bir
   madde basıldığında var olur (module-shell-v2.js setStatusBar) — şerit boşsa
   veya kabuk hiç kurulmadıysa kural eşleşmez ve band yerinde kalır. DOM
   silinmez, yalnız çift gösterim önlenir. */
#module-workspace-root:has(.ms2[data-ms2-module='a07'] .ms2-statusbar) #a07-auto-status {
  display: none;
}

/* WP-H3-TEK-A-A06 — A06'nın "sektör nabzı" bandı (#a06-dashboard-pulse) ile
   kabuk KPI şeridi AYNI sayıları basar: ikisi de tek kaynaktan
   (`computeA06AllSectorsAggregate()` + katalog uzunluğu) beslenir. Kabuk
   şeridi GERÇEKTEN bir kart bastıysa (`.ms2__kpis li` var — setKpis değeri
   olmayan kartı hiç basmaz) aynı sayılar ekranda iki kez durmasın.
   ARAMA CHIP'İ KORUNUR: band ayrıca "{n}/{total} eşleşme" geri bildirimi de
   basıyor (.a06-pulse-chip--search) ve bunun kabukta karşılığı YOK — bu
   yüzden yalnız TEKRAR EDEN chip'ler gizlenir; arama chip'i yoksa band
   tamamen gizlenir (boş kutu kalmasın). Kabuk kurulmadıysa veya hiç KPI
   basılmadıysa kural eşleşmez, band olduğu gibi kalır. DOM silinmez. */
#module-workspace-root:has(.ms2[data-ms2-module='a06'] .ms2__kpis li)
  #a06-dashboard-pulse:not(:has(.a06-pulse-chip--search)) {
  display: none;
}

#module-workspace-root:has(.ms2[data-ms2-module='a06'] .ms2__kpis li)
  #a06-dashboard-pulse
  .a06-pulse-chip:not(.a06-pulse-chip--search) {
  display: none;
}

/* WP-H3-TEK-A-A05 — A05'in kendi alt görünüm şeridi (#a05-seg-tabs) ile kabuk
   sekme şeridi AYNI iki görünümü açar (ikisi de `setA05Segment()`e gider).
   Kabuk GERÇEKTEN sekme bastıysa (`.ms2-tabs .ms2-tab` var) aynı şerit ekranda
   iki kez durmasın. Bayrak kapalıyken (`?a05mp=1` yok) kabuk hiç sekme basmaz,
   kural eşleşmez ve modülün kendi şeridi zaten `hidden` olarak kalır — yani bu
   kural bayrağı DOLAYLI olarak da olsa doğru şekilde izler. DOM silinmez;
   applyA05FairFirstLayout() ve setA05Segment() hâlâ bu düğümü bulur. */
#module-workspace-root:has(.ms2[data-ms2-module='a05'] .ms2-tabs .ms2-tab) #a05-seg-tabs {
  display: none;
}

/* WP-H3-TEK-A-A05 — fuar tablosunun üstündeki eski özet kartı (#fairs) kabuk
   KPI şeridiyle AYNI sayıları basar (eşleşen satır + kaynak sayısı; ikisi de
   `computeA05FairShellStats()` / aynı `_a05FairRows` kümesinden gelir). Kabuk
   şeridi GERÇEKTEN bir kart bastıysa (`.ms2__kpis li` var) kart gizlenir.
   BENZERSİZ BİLGİ KAYBOLMAZ: kartın yalnız kendisinde olan sayfa ve satır
   aralığı bilgisi kabuk DURUM ŞERİDİNE taşındı (paintA05ModuleShellStatus,
   aynı `a05.fair.kpiPageOf` / `a05.fair.kpiRowsRange` anahtarları). Kabuk
   kurulmadıysa veya hiç KPI basılmadıysa kural eşleşmez, kart olduğu gibi
   kalır. Koşullu, geri alınabilir, DOM silinmez. */
#module-workspace-root:has(.ms2[data-ms2-module='a05'] .ms2__kpis li) #fairs {
  display: none;
}

/* WP-H3-TEK-A-A04 — A04'ün kendi tablo şeridi (.a04-db-tab-strip, `?a04dev=1`
   arkasında) ile kabuk sekme şeridi AYNI üç görünümü açar (ikisi de
   `setA04DbActiveTab()`e gider). Kabuk GERÇEKTEN sekme bastıysa
   (`.ms2-tabs .ms2-tab` var) aynı şerit ekranda iki kez durmasın. Bayrak
   kapalıyken (müşteri yüzeyi) kabuk hiç sekme basmaz, kural eşleşmez ve
   modülün kendi şeridi zaten `hidden` kalır — kural bayrağı dolaylı olarak
   doğru şekilde izler. DOM silinmez; applyA04CustomerLayout() ve
   setA04DbActiveTab() hâlâ bu düğümleri bulur. */
#module-workspace-root:has(.ms2[data-ms2-module='a04'] .ms2-tabs .ms2-tab) .a04-db-tab-strip {
  display: none;
}

/* WP-H3-TEK-A-A02 — ESKİ TİCARET KROMU BANNER'I (kabuk kuruluysa gizlenir)
   `#trade-analytics-chrome` kendi banner'ını taşır (eyebrow + "A02 — Ticaret
   İstihbaratı" + açıklama). Kabuk aynı başlığı ve açıklamayı zaten basıyor;
   ikisi birlikte ÜÇ başlık üst üste gelirdi.
   NEDEN SİLİNMİYOR (A05 `#a05-seg-tabs` ile aynı gerekçe): banner'ın
   `.gtos-mp__sub` düğümü `applyA02CustomerChromeMode()` tarafından hâlâ
   bulunuyor (müşteri/staff cümlesi orada değiştiriliyor) ve kabuk eyebrow'u
   AYNI anahtarı okuyor. Kural koşulludur — kabuk gerçekten kurulmadıysa
   (bileşen yüklenmediyse) banner eskisi gibi görünür kalır, yani yedek yol
   bozulmaz. */
#module-workspace-root:has(.ms2[data-ms2-module='a02'])
  #trade-analytics-chrome
  > header.gtos-mp__banner {
  display: none;
}

/* WP-H3-TEK-A-A02 — ÇİFT KART ÖNLENİR. `.trade-analytics-chrome` kendi
   kenarlık + gölge + dolgusunu taşıyan bir KART; kabuk (`.ms2`) de karttır.
   Kabuk chrome'un İÇİNE kurulduğu için (bkz. `a02ModuleShellHost()`) ikisi
   iç içe iki çerçeve olurdu. Kural KOŞULLUdur: kabuk kurulmadıysa chrome
   eski görünümünü aynen korur. Yalnız kap süsü sıfırlanır — hiçbir düğüm
   gizlenmez, hiçbir renk ham değerle yeniden tanımlanmaz. */
#module-workspace-root:has(.ms2[data-ms2-module='a02']) #trade-analytics-chrome {
  border: 0;
  padding: 0;
  background: none;
  box-shadow: none;
}

/* «Nasıl Çalışır?» kabı kabuk banner'ına taşındığında (adoptA01HowShell…)
   kendi `margin-left: auto` kuralı eylem şeridini bozmasın. */
.ms2__actions > .module-workspace-how-shell {
  margin-left: 0;
}

/* ================================================================== *
 * KARAR-35 — BOŞ "AI İÇGÖRÜ" KUTUSU KUTU OLARAK BASILMAZ
 *
 * Bulgu (16.09 premium denetim, dört modülde): içgörü HENÜZ üretilmemişken
 * ekranda başlıklı, çerçeveli, "Henüz içgörü üretilmedi" yazan boş bir kutu
 * duruyordu — müşteri gözünde "bitmemiş özellik" hissi. Yasin kararı: boşken
 * kutu YOK, yerine tek satır CTA ("İçgörü üret"); içgörü/hata VARSA kutu
 * eskisi gibi tam açılır.
 *
 * NEDEN CSS: düğmenin kendisi, tıklama bağı ve ÜCRETLİ çağrı yolu
 * (requestModuleAgentInsight) HİÇ DEĞİŞMEZ — yalnız boş durumun görünümü
 * sadeleşir. DOM silinmez, hiçbir düğüm kaldırılmaz; JS tarafında tek
 * değişiklik düğme ETİKETİDİR (i18n moduleInsight.getComment).
 *
 * AYIRT EDİCİ: koşul `:has(.module-agent-insight-body.is-empty)` — yanıt,
 * hata veya "yorumlanıyor" durumunda `is-empty` sınıfı basılmaz, kural
 * eşleşmez ve kutu tam haliyle görünür. Kapsam yalnız KABUK modülleri
 * (`.module-content:has(.ms2[data-ms2-module])`): kabuğa taşınmamış 18
 * modülün görünümü bu turda DEĞİŞMEZ.
 * ================================================================== */
#maytras-app
  .module-content:has(.ms2[data-ms2-module])
  .module-agent-insight:has(.module-agent-insight-body.is-empty) {
  border: 0;
  background: none;
  box-shadow: none;
  padding: 0;
  margin-top: var(--gtos-space-2);
}

/* Başlık satırı, ajan seçici ve boş gövde metni CTA'ya indirgenir. */
#maytras-app
  .module-content:has(.ms2[data-ms2-module])
  .module-agent-insight:has(.module-agent-insight-body.is-empty)
  .module-agent-insight-top,
#maytras-app
  .module-content:has(.ms2[data-ms2-module])
  .module-agent-insight:has(.module-agent-insight-body.is-empty)
  .module-agent-insight-select,
#maytras-app
  .module-content:has(.ms2[data-ms2-module])
  .module-agent-insight:has(.module-agent-insight-body.is-empty)
  .module-agent-insight-body.is-empty {
  display: none;
}

/* Tek satır CTA: kabuk düğme grameri (ghost) — ızgara değil, sola yaslı. */
#maytras-app
  .module-content:has(.ms2[data-ms2-module])
  .module-agent-insight:has(.module-agent-insight-body.is-empty)
  .module-agent-insight-controls {
  display: flex;
  justify-content: flex-start;
}

#maytras-app
  .module-content:has(.ms2[data-ms2-module])
  .module-agent-insight:has(.module-agent-insight-body.is-empty)
  .module-agent-insight-btn {
  min-height: 34px;
  padding: 0 var(--gtos-space-4);
  border-radius: var(--gtos-radius-sm);
  /* --ms2-* değişkenleri `.ms2` kapsamında tanımlıdır; içgörü kutusu kabuğun
     DIŞINDA (kart seviyesi parça) olduğu için burada TOKEN katmanının kendisi
     kullanılır — iki temada da (gtos-tokens.css :root + [data-theme='dark'])
     tanımlıdır, ham renk yok. */
  border: 1px solid var(--gtos-c-border-input);
  background: var(--gtos-c-surface-2);
  color: var(--gtos-c-text);
  font-size: var(--gtos-text-xs);
}

@media (max-width: 768px) {
  #maytras-app
    .module-content:has(.ms2[data-ms2-module])
    .module-agent-insight:has(.module-agent-insight-body.is-empty)
    .module-agent-insight-btn {
    min-height: 44px;
  }
}

/* ================================================================== *
 * WP-H3-TEK-A-A08 — A08'İN KENDİ ŞERİTLERİ (kabuk kuruluysa gizlenir)
 *
 * A08'de index.html'de banner YOK; onun yerine iki şerit var ve İKİSİ DE
 * kabuk şeridiyle AYNI bilgiyi basar:
 *   1. `.a08-executive-strip` — beş KPI (landed / vergi / lojistik / ton başına
 *      / net kâr). Kabuk KPI'ları aynı sayıları AYNI değişkenlerden alıyor
 *      (`fillA08ExecutiveKpisFromResult()` → `setA08ShellKpis()`), yani ekranda
 *      iki kez aynı beş kart duruyordu.
 *   2. `.a08-dash-toolbar--subnav` (içinde `.a08-tablist`) — dört sekme. Kabuk
 *      sekmeleri aynı `switchA08Tab()`e gidiyor, yani iki şerit aynı panelleri
 *      açıyordu.
 *
 * NEDEN SİLİNMİYOR (A04/A05 `#a05-seg-tabs` ile aynı gerekçe): her iki düğüm
 * çalışma zamanında hâlâ YAZILIYOR ve OKUNUYOR —
 * `fillA08ExecutiveKpisFromResult()`/`clearA08ExecutiveKpis()` `a08-kpi-*`
 * düğümlerine değer basar, `switchA08Tab()` `[data-a08-tab]` düğmelerinin
 * `is-active`/`aria-selected` durumunu günceller, `ensureA08MustShowHost()`
 * «örnek senaryo» satırını şeridin HEMEN ARDINA ekler. Kural KOŞULLUdur:
 * kabuk gerçekten kurulmadıysa (bileşen yüklenmediyse) her iki şerit eskisi
 * gibi görünür kalır — yedek yol bozulmaz, DOM silinmez, geri alınabilir.
 *
 * SİHİRBAZ ÇUBUĞU (`.a08-wizard-progress`) GİZLENMEZ: Adım 1-3 form panelinin
 * İÇİNDEKİ alt adımları değiştirir (`setA08WizardStep`), sekmelerin yaptığı işi
 * yapmaz — kabuk şeridinin kopyası değildir.
 *
 * NEDEN `.ms2__kpis li` KOŞULU YOK (A05 `#fairs` kuralından bilinçli sapma):
 * canlı ölçüldü (facts 01-acilis) — hesap yapılmadan ÖNCE kabuk hiç kart
 * basmıyor (dürüstlük kuralı: veri yoksa kart yok), ama A08'in kendi şeridi o
 * anda beş kartı da "—" ile basıyordu. Koşul KPI'ya bağlı kalsaydı müşteri
 * açılışta beş boş kart görür, hesaptan sonra onlar kaybolup kabuk kartları
 * belirirdi (yerleşim zıplaması + "bitmemiş özellik" hissi). Bilgi KAYBOLMAZ:
 * boş durumu `#a08-kpi-empty-hint` ("İlk hesabınız için Adım 1'den başlayın",
 * tıklanabilir) ve kabuk durum rozeti aynı cümleyle söylüyor; risk skoru
 * kartı da kabuk şeridine taşındı (paintA08ModuleShellStatus, `risk` kartı).
 * Koşul hâlâ kabuğun GERÇEKTEN kurulmuş olmasına bağlı — bileşen yüklenmezse
 * eski şerit aynen görünür.
 */
#module-workspace-root:has(.ms2[data-ms2-module='a08']) .a08-executive-strip {
  display: none;
}

#module-workspace-root:has(.ms2[data-ms2-module='a08'] .ms2-tabs .ms2-tab)
  .a08-dash-toolbar--subnav {
  display: none;
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-B-B06 (cc-module-shell-014) — DALGA B BAŞLANGICI
 *
 * Her iki kural da KOŞULLU (`:has(.ms2[data-ms2-module='b06'])`) ve geri
 * alınabilir: kabuk bileşeni yüklenmezse B06 eski kromuyla aynen çalışır.
 * Hiçbir düğüm silinmez, hiçbir renk ham değerle yeniden tanımlanmaz.
 * ---------------------------------------------------------------- */

/* 1) HOST BLOK AKIŞINA DÖNER. `.gtos-mp--b06` iki sütunlu bir ızgaraydı
   (`grid-template-areas: banner / ops rail / form rail`) ve bu alanlar
   host'un DOĞRUDAN çocuklarına atanıyordu. Taşımadan sonra host'un tek
   görünür çocuğu kabuk kökü (`.ms2`) kalır; ızgara sürseydi kabuk iki
   sütunun yalnız BİRİNE (soldaki `minmax(0,1fr)`) yerleşip sağda 280-360px
   boşluk bırakırdı. Kokpit iki sütunu kaybolmaz: kabuğun kendi 12'lik
   ızgarasında `data-ms2-span` (dosya kabuğu 8 / ray 4) ile yeniden kurulur
   ve dar ekranda CILA-02'nin tek sütun kuralı devralır. */
#module-workspace-root:has(.ms2[data-ms2-module='b06']) .gtos-mp--b06 {
  display: block;
}

/* 2) ESKİ BANNER GİZLENİR (SİLİNMEZ). Kabuk başlığı zaten `mod.b06.title` +
   `mod.b06.desc` basıyor; banner'ın kendi başlık/alt cümlesi ikinci bir
   başlık kartı oluşturuyordu. Banner'ın İÇİNDEKİ iki bilgi düğümü (kapsam
   cümlesi ve katlanır "Kapsam ve pilot notları") ekrandan kaybolmasın diye
   `moduleShellV2Specs().b06.panels()` tarafından içeriğin başına TAŞINIR —
   gizlenen şey yalnız tekrar eden başlık kabuğudur. */
#module-workspace-root:has(.ms2[data-ms2-module='b06'])
  .gtos-mp--b06
  > header.gtos-mp__banner {
  display: none;
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-B-B03 (cc-module-shell-015) — DALGA B 2/8
 *
 * Dört kural da KOŞULLU (:has(.ms2[data-ms2-module='b03'])) ve geri
 * alınabilir: kabuk bileşeni yüklenmezse B03 eski kromuyla aynen çalışır.
 * Hiçbir düğüm silinmez, hiçbir renk ham değerle yeniden tanımlanmaz.
 * ---------------------------------------------------------------- */

/* 1) ESKİ HEADER GİZLENİR (SİLİNMEZ). B03'te gtos-mp__banner yok; başlık
   işini .b03-hub-top yapıyordu (kicker + lead + gösterge bandı). Kabuk
   başlığı zaten mod.b03.title + mod.b03.desc basıyor, eyebrow satırı
   b03.shell.sub cümlesini, dürüstlük şeridi de gösterge rozetini taşıyor —
   header kalsaydı üç bilgi de iki kez görünürdü. İçindeki İKİ çalışan parça
   (3 adımlı rehber ve araç çubuğu) moduleShellV2Specs().b03.panels()
   tarafından içeriğe TAŞINIR; ensureB03IndicativeLockBand() ve setApiPill
   hâlâ bu düğümleri bulup yazmaya devam eder. */
#module-workspace-root:has(.ms2[data-ms2-module='b03'])
  .gtos-mp--b03
  > .b03-hub-top {
  display: none;
}

/* 2) KAYNAK PİLİ GİZLENİR (SİLİNMEZ). #b03-api-status araç çubuğunun içinde
   olduğu için kabuğa TAŞINIR; metni sekmeye göre yazılmaya devam eder ve
   kabuğun durum şeridi tam o metni okur (paintB03ModuleShellStatus). Görsel
   olarak iki kez basılmaması için yalnız pil gizlenir. */
#module-workspace-root:has(.ms2[data-ms2-module='b03'])
  .gtos-mp--b03
  #b03-api-status {
  display: none;
}

/* 3) İKİNCİ BAĞLAYICILIK PARAGRAFI GİZLENİR (SİLİNMEZ). .b03-panelDisclaimer
   (hem index.html'deki sabit paragraf hem karşılaştırma sonucuna basılan
   .b03-compare-disclaimer) kabuk dürüstlük şeridiyle AYNI cümleyi söylüyor
   («bağlayıcı teklif değil»). CILA-04 dersi: tek rozet, ikinci şerit 0. */
#module-workspace-root:has(.ms2[data-ms2-module='b03'])
  .gtos-mp--b03
  .b03-panelDisclaimer {
  display: none;
}

/* 4) ESKİ SEKME ŞERİDİ GİZLENİR (SİLİNMEZ). .b03-hub-tabs kabuğa TAŞINIR —
   düğümleri duruyor, setB03Tab hâlâ is-active/aria-selected yazıyor ve
   B05 devri onu okuyabiliyor — ama görünen şerit kabuğunkidir. Görünürlük
   bayrağı AYNI: b03-customer-advanced-only kuralı kabuk şeridinde
   b03ShellTabsOrNull() ile yeniden kurulur. */
#module-workspace-root:has(.ms2[data-ms2-module='b03'])
  .gtos-mp--b03
  .b03-hub-tabs {
  display: none;
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-B-B02 (cc-module-shell-017) — DALGA B 3/8
 *
 * Üç kural da KOŞULLU (`:has(.ms2[data-ms2-module='b02'])`) ve geri
 * alınabilir: kabuk bileşeni yüklenmezse B02 eski kromuyla aynen çalışır.
 * Hiçbir düğüm silinmez, hiçbir renk ham değerle yeniden tanımlanmaz.
 *
 * B02'de eski header (`.b02-hub-top`) BÜTÜN OLARAK GİZLENMEZ — B03'ten
 * ayrılan nokta budur: header'ın içinde iki ÇALIŞAN parça var
 * (`#b02-customer-onboarding` 3 adımlı ilk-takip rehberi ve
 * `.b02-hub-toolbar` «Gelişmiş alanlar» / «Senkronize et» / «Uyarıları
 * yenile» / arama düğmeleri). Bunlar B03'teki gibi içeriğe TAŞINAMAZ, çünkü
 * B02'de taşınan düğüm TEK: `.b02-data-shell` (modülün sekme/panel kökü —
 * `b02-customer-hub.js` sorgularını yalnız onun altında yapıyor). Bu yüzden
 * gizlenen şey header'ın SADECE tekrar eden başlık satırlarıdır.
 * ---------------------------------------------------------------- */

/* 1) BAŞLIK SATIRI + «CANLI» PİLİ GİZLENİR (SİLİNMEZ). Kabuk başlığı zaten
   `mod.b02.title` basıyor ve dürüstlük şeridi tek bir CANLI rozeti taşıyor
   (`gtos-surface-honesty.js` → b02: live). Header'daki `.b02-hub-title`
   («Konteynerler») + `.b02-live-pill` («Canlı») ikinci bir başlık ve İKİNCİ
   bir canlılık rozeti üretiyordu (CILA-04 dersi: tek rozet). */
#module-workspace-root:has(.ms2[data-ms2-module='b02'])
  .gtos-mp--b02
  .b02-hub-top
  .b02-hub-heading-row {
  display: none;
}

/* 2) KIRINTI + LEAD SATIRI GİZLENİR (SİLİNMEZ). `.b02-hub-crumb`
   («Ocean / Konteynerler») kabuk başlığının altındaki modül adını tekrar
   ediyor; `.b02-hub-lead` ise `b02.customer.lead` cümlesinin ta kendisi ve o
   cümle artık kabuğun eyebrow satırında duruyor (aynı anahtar, tek yer).
   Düğümler duruyor — `MaytrasI18n.apply()` onları çevirmeye devam eder. */
#module-workspace-root:has(.ms2[data-ms2-module='b02'])
  .gtos-mp--b02
  .b02-hub-top
  .b02-hub-crumb,
#module-workspace-root:has(.ms2[data-ms2-module='b02'])
  .gtos-mp--b02
  .b02-hub-top
  .b02-hub-lead {
  display: none;
}

/* 3) İÇERİK-İÇİ KPI ŞERİDİ GİZLENİR (SİLİNMEZ) — ama YALNIZ kabuk gerçekten
   KPI bastıysa. Koşul `.ms2__kpis > li` varlığıdır: `setKpis()` değeri
   olmayan kartı hiç basmadığı için (kabuk kuralı A) bu seçici, kabuk şeridi
   BOŞken eşleşmez ve `#b02-kpi-mount` görünür kalır. Böylece "aynı sayı iki
   kez" de olmaz, "hiç sayı yok" da olmaz. */
#module-workspace-root:has(.ms2[data-ms2-module='b02'] .ms2__kpis > li)
  .gtos-mp--b02
  #b02-kpi-mount {
  display: none;
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-B-B05 (cc-module-shell-018) — DALGA B 4/8
 *
 * Kural KOSULLU (:has(.ms2[data-ms2-module='b05'])) ve geri alinabilir:
 * kabuk bileseni yuklenmezse B05 eski kromuyla aynen calisir. Hicbir dugum
 * silinmez, hicbir renk ham degerle yeniden tanimlanmaz.
 *
 * B05'te B02/B03'ten FARKLI olarak gizlenecek TEKRAR EDEN BASLIK YOK:
 * .b05-cops-hero bir baslik degil ARAC CUBUGU (arama kutusu + «+ Yeni
 * Musteri» / «+ Yeni Entegrasyon» / «Pipeline Olustur» / «Senkronizasyon
 * Merkezi»). Gizlenseydi calisan dort CTA ekrandan kalkardi. 14'lu sekme
 * seridi de govdede KALIR (kabuk tabs: null) — tek serit, tekrar yok.
 * ---------------------------------------------------------------- */

/* ICERIK-ICI KPI SERIDI GIZLENIR (SILINMEZ) — ama YALNIZ kabuk gercekten
   KPI bastiysa. Kosul .ms2__kpis > li varligidir: setKpis() degeri olmayan
   karti hic basmadigi icin (kabuk kurali A) bu secici, kabuk seridi BOSken
   eslesmez ve .b05-cops-kpi-strip gorunur kalir. Boylece "ayni sayi iki kez"
   de olmaz, "hic sayi yok" da olmaz. Entegrasyon durum seridi
   (.b05-cops-status-strip, KPI SINIFI OLMAYAN) ayri bir olcum kumesidir ve
   dokunulmaz. */
#module-workspace-root:has(.ms2[data-ms2-module='b05'] .ms2__kpis > li)
  .gtos-mp--b05
  .b05-cops-kpi-strip {
  display: none;
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-B-B01 (cc-module-shell-019) — DALGA B 5/8
 *
 * BU BOLUMDE KURAL YOK — ve bu OLCULMUS bir karardir, unutulmus bir
 * adim degil. B02/B03/B05'te kabuk kurulunca eski kromda TEKRAR EDEN
 * bir baslik/rozet/KPI seridi kaliyordu ve kosullu `:has()` kurallariyla
 * gizlenmesi gerekmisti. B01'de gizlenecek boyle bir tekrar YOK:
 *
 *   · `index.html`de `gtos-mp__banner` hic yok; B01'in kendi basligi
 *     (`.b01-wg-hero > h2`) `visually-hidden`, `.b01-wg-brand` ve
 *     `.b01-wg-tagline` ise uretim konfigurasyonunda zaten gorunmez
 *     (olculdu: `b01-facts-kabul.json` → wgBrandVisible/wgTaglineVisible
 *     false). `.b01-wg-hero` GIZLENEMEZ cunku portal karti/iframe'i
 *     tasiyan tek kap odur.
 *   · Kart seviyesindeki KPI seridi (`.module-kpi-strip`) kabuk kuruluyken
 *     `renderModuleKpiStrip()` tarafindan ZATEN basilmiyor; `dropLegacy`
 *     yalniz daha once basilmis olani kaldirir. Bu yuzden B02/B05'teki
 *     `:has(.ms2__kpis > li)` tipi bir gizleme kuralina gerek kalmadi.
 *   · Miya portalinin KENDI KPI satiri (`#b01-portal-kpi-row`) BILEREK
 *     gizlenmedi: o `/business/customs/portal/snapshot` (Miya tarafi)
 *     ucundan beslenir, kabuk seridi ise MAYTRAS tenant veritabanindan —
 *     ayni olcum degiller. Birini otekinin "kopyasi" sayip gizlemek bilgi
 *     gizlerdi. (Iki yuzeyde de gercek sayi olan bir tenantla karsilasinca
 *     bu madde yeniden olculmeli.)
 *
 * Tasma olcumu (uretim konfigurasyonu, `b01-sweep.json`): 375/1024/1440 x
 * acik/koyu -> ihlal 0, `documentElement.scrollWidth == clientWidth`.
 * Yani kabuk icerik sutunu B01'in eski `.module-content` genisliginden
 * 0px dar (375'te ikisi de 278,2px) — yeni bir mobil tasma uretmedi.
 * ---------------------------------------------------------------- */

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-B-B07 (cc-module-shell-020) — DALGA B 6/8
 *
 * Iki kural da KOSULLU (`:has(.ms2[data-ms2-module='b07'])`) ve geri
 * alinabilir: kabuk bileseni yuklenmezse B07 eski kromuyla aynen calisir.
 * Hicbir dugum silinmez, hicbir renk ham degerle yeniden tanimlanmaz.
 *
 * TAM GENISLIK (full-bleed) MEKANIZMASINA DOKUNULMADI: `b07-workspace-
 * fullbleed` sinifi `#maytras-app` uzerinde, `setB07WorkspaceFullBleed()`
 * tarafindan yonetilir (`_isGtosCcShellAligned()` — CC-MODULE-SHELL-LOCK
 * cc-module-shell-001). Buradaki kurallarin hicbiri `#maytras-app`,
 * `#module-workspace-root` veya `.module-workspace-body` seviyesine
 * yazmaz; kapsam yalniz `.gtos-mp--b07` ICIDIR.
 * ---------------------------------------------------------------- */

/* 1) TEKRAR EDEN BASLIK SATIRI GIZLENIR (SILINMEZ). `.b07-dash-head__title`
   `mod.b07.title`, `.b07-dash-head__sub` ise `mod.b07.desc` anahtarini
   basar — ikisi de kabuk basliginda ZATEN var (birebir ayni anahtar).
   `.b07-dash-head`in KENDISI gizlenmez: icinde calisan parcalar var
   (global arama kutusu + veri kaynagi/senkron saati rozeti). Kapsam
   cumlesi (`.b07-gap-banner`) da BILEREK gizlenmedi: kabugun durustluk
   seridi `honestyLead()` ile ilk cumleye kirpilir ("Sevkiyat kaydi ve
   ticari fatura calisir."), yani "canli kargo/pazaryeri senkronu yok"
   bilgisi orada GORUNMEZ — gizlenseydi ekrandan bilgi kaybolurdu.
   (Musteri yuzeyinde `gtos-customer-surface.css` zaten `.b07-dash-head__left`i
   tumuyle gizliyor; bu kural staff/legacy yolunda ayni tekrari kaldirir.) */
#module-workspace-root:has(.ms2[data-ms2-module='b07'])
  .gtos-mp--b07
  .b07-dash-head__title,
#module-workspace-root:has(.ms2[data-ms2-module='b07'])
  .gtos-mp--b07
  .b07-dash-head__sub {
  display: none;
}

/* 2) ICERIK-ICI KPI IZGARASI GIZLENIR (SILINMEZ) — ama YALNIZ kabuk
   gercekten KPI bastiysa. Kosul `.ms2__kpis > li` varligidir: `setKpis()`
   degeri olmayan karti hic basmadigi icin (kabuk kurali A) bu secici, kabuk
   seridi BOSken eslesmez ve `.b07-kpi-grid` gorunur kalir. Boylece "ayni
   sayi iki kez" de olmaz, "hic sayi yok" da olmaz — B02/B05 ile ayni kural. */
#module-workspace-root:has(.ms2[data-ms2-module='b07'] .ms2__kpis > li)
  .gtos-mp--b07
  .b07-kpi-grid {
  display: none;
}

/* 3) DAR EKRANDA SUTUN ARALIGI SIFIRLANIR (yalniz B07, yalniz <=640px).
   OLCULDU (375px, `b07-facts-kabul.json` → `ihlaller['375-light']` ve
   `_diag375b`): `.ms2-grid` 12 sutunu `repeat(12, minmax(0,1fr))` + 24px
   `--ms2-gap` ile kuruluyor; kap 264px'ten (11 x 24px bosluk) darsa tum
   TRACK'ler 0px'e cokuyor ve 12 sutun kaplayan tek icerik dugumu yine
   11 boslugu tasidigi icin 264px kaliyor — 375'te kap 254,2px oldugundan
   B07'nin panosu kabini 9,8px asiyordu. Bu KABUGUN GENEL davranisi (modul
   fark etmez, `--ms2-gap`in dar ekran karsiligi yok); burada YALNIZ B07
   kapsaminda ve yalniz dar ekranda `column-gap` sifirlanarak kapatildi —
   satir araligi (`row-gap`) DEGISMEZ, dikey ritim ayni kalir.

   GUNCELLEME (WP-H3-TEK-B-CILA-04 madde 2): GENEL KURAL GELDI — yerlesim
   bolumunde `@media (max-width: 640px) { .ms2-grid { column-gap: 0 } }` +
   `@container ms2 (max-width: 480px)` ikizi. Asagidaki kural artik ZARARSIZ
   TEKRAR (ayni deger, daha dar kapsam); bilerek SILINMEDI: B07'nin kabul
   kaniti bu satira bagli ve kaldirilmasi davranis degistirmeden kanit izini
   kopartirdi. */
@media (max-width: 640px) {
  #module-workspace-root:has(.ms2[data-ms2-module='b07'])
    .gtos-mp--b07
    .ms2-grid {
    column-gap: 0;
  }
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-B-B04 (cc-module-shell-021) — DALGA B 7/8
 *
 * Dort kural da KOSULLU (`:has(.ms2[data-ms2-module='b04'])`) ve geri
 * alinabilir: kabuk bileseni yuklenmezse B04 eski kromuyla aynen calisir.
 * Hicbir dugum silinmez, hicbir renk ham degerle yeniden tanimlanmaz.
 *
 * TAM GENISLIK (full-bleed) MEKANIZMASINA DOKUNULMADI: `b04-workspace-fullbleed`
 * sinifi `#maytras-app` uzerinde, `setB04WorkspaceFullBleed()` tarafindan
 * yonetilir (`_isGtosCcShellAligned()` — CC-MODULE-SHELL-LOCK cc-module-shell-001).
 * Buradaki kurallarin hicbiri `#maytras-app`, `#module-workspace-root` veya
 * `.module-workspace-body` seviyesine yazmaz; kapsam yalniz `.gtos-mp--b04` ICIDIR.
 * ---------------------------------------------------------------- */

/* 1) TEKRAR EDEN EKRAN ADI GIZLENIR (SILINMEZ). `.b04-ebs-brand` «B04 Depo-Stok
   Yonetim» basar; kabuk basligi `mod.b04.title` («B04 · Stok ve Depo Yonetimi»)
   ile ayni bilgiyi ZATEN tasiyor. `.b04-ebs-pagehead`in KENDISI gizlenmez:
   icinde calisan «Geri bildirim gonder» baglantisi var. */
#module-workspace-root:has(.ms2[data-ms2-module='b04'])
  .gtos-mp--b04
  .b04-ebs-brand {
  display: none;
}

/* 2) ICERIK-ICI KPI IZGARASI GIZLENIR (SILINMEZ) — ama YALNIZ kabuk gercekten
   KPI bastiysa. Kosul `.ms2__kpis > li` varligidir: `setKpis()` degeri olmayan
   karti hic basmadigi icin (kabuk kurali A) bu secici, kabuk seridi BOSken
   eslesmez ve `.b04-ebs-kpis` gorunur kalir. Boylece «ayni sayi iki kez» de
   olmaz, «hic sayi yok» da olmaz — B02/B05/B07 ile ayni kural.
   WMS KOMUTA SERIDI (`[data-b04-wms-komuta]`) BU KURALIN DISINDADIR: oradaki
   dort cip (bekleyen kabul / bekleyen pick / dusuk stok / toplam miktar)
   kabukta TEKRAR ETMEZ, ayri bilgidir; `.b04-ebs-kpis`in KARDESI oldugu icin
   (b04-wms-f2.js `insertAdjacentElement('afterend')` ile basar) gizlenmez. */
#module-workspace-root:has(.ms2[data-ms2-module='b04'] .ms2__kpis > li)
  .gtos-mp--b04
  .b04-ebs-kpis {
  display: none;
}

/* 3) ORTA GENISLIKTE (769-1200px) EBS DUZENI KENDI KUTUSUNDA KAYAR.
   OLCULDU, KABUKTAN ONCE (`b04-facts-kesif.json` -> `ihlaller['1024-light']`):
   1024px'te `.b04-ebs-root` kabini 40,9px asiyor ve SAYFA yatay kayiyordu
   (`documentElement.scrollWidth` 1123 > `clientWidth` 1024; 21 ihlal).
   Sebep: sol menu `width: 230px; flex-shrink: 0`, `.b04-ebs-root`un `min-width`i
   serbest ve B04'un kendi tek-sutun kirilimi yalniz <=768px'te devreye giriyor
   (unified.css). Kabuk kap genisligini bir miktar daha daralttigi icin bu
   ONCEDEN VAR OLAN tasma orada da surerdi. Cozum KIRPMA DEGIL: ERP izgarasi
   KENDI kutusu icinde yatay kayar, boylece sayfa govdesi kaymaz ve hicbir
   sutun gizlenmez. <=768px'teki mevcut tek-sutun davranisi DEGISMEZ (alt sinir
   769px). */
@media (min-width: 769px) and (max-width: 1200px) {
  #module-workspace-root:has(.ms2[data-ms2-module='b04'])
    .gtos-mp--b04
    .b04-ebs-root {
    min-width: 0;
    max-width: 100%;
    overflow-x: auto;
  }
}

/* 4) DAR EKRANDA SUTUN ARALIGI SIFIRLANIR (yalniz B04, yalniz <=640px).
   B07'de (cc-module-shell-020) olculen AYNI kabuk davranisi: `.ms2-grid` 12
   sutunu `repeat(12, minmax(0,1fr))` + 24px `--ms2-gap` ile kuruluyor; kap
   264px'ten darsa track'ler 0'a cokuyor ve 12 sutun kaplayan tek icerik dugumu
   yine 11 boslugu tasidigi icin 264px kaliyor. 375px'te B04'un kabuk ici kolonu
   bu esigin altina indigi icin ayni kosullu cozum burada da uygulanir; satir
   araligi (`row-gap`) DEGISMEZ.

   GUNCELLEME (WP-H3-TEK-B-CILA-04 madde 2): GENEL KURAL GELDI (yerlesim
   bolumu, `@media (max-width: 640px)` + `@container ms2 (max-width: 480px)`).
   Asagidaki kural ZARARSIZ TEKRAR; B04'un kabul kaniti bu satira bagli
   oldugu icin bilerek SILINMEDI. */
@media (max-width: 640px) {
  #module-workspace-root:has(.ms2[data-ms2-module='b04'])
    .gtos-mp--b04
    .ms2-grid {
    column-gap: 0;
  }
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-B-B08 (cc-module-shell-022) — DALGA B 8/8
 *
 * Kurallarin hepsi KOSULLU (`:has(.ms2[data-ms2-module='b08'])`) ve geri
 * alinabilir: kabuk bileseni yuklenmezse B08 eski kromuyla aynen calisir.
 * Hicbir dugum silinmez, hicbir renk ham degerle yeniden tanimlanmaz.
 *
 * KILIDE DOKUNULMADI (CC-MODULE-SHELL-LOCK cc-module-shell-001): B08'in tam
 * genislik/immersive mekanizmasi `#maytras-app.b08-workspace-fullbleed` +
 * `.b08-workspace-immersive` siniflari uzerinden `setB08WorkspaceFullBleed()`
 * tarafindan yonetilir ve `_isGtosCcShellAligned()`e baglidir; `.main-header`
 * gorunurlugunu `gtos-customer-surface.css` icindeki kilitli kural belirler.
 * Buradaki kurallarin hicbiri `#maytras-app`, `#module-workspace-root`,
 * `.module-workspace-body` veya `.main-header` seviyesine yazmaz; kapsam
 * yalniz `.gtos-mp--b08` ICIDIR.
 *
 * NEDEN ILK IKI KURAL URETIMDE HIC ESLESMEZ (olculdu, `_diag-b08-legacy-out.json`):
 * uretim yapilandirmasinda `b08-v2-commercial-shell.js` `hideLegacy()` ile
 * `.b08-kb-ofis-frame`i satir-ici `display:none` yapar ve karta
 * `data-b08-v2-only="1"` yazar; eski defter yuzeyi (hero, KPI izgarasi, dort
 * ledger sekmesi, 13 satirlik sol nav) GORUNMEZ — bunu elle geri almaya
 * calisan zorlanmis olcumde v2 kabugun MutationObserver'i 160 ms icinde
 * gizlemeyi geri koydu. Kurallar bu yuzden YEDEK YOL icindir: v2 zinciri
 * (`b08-confidence-ui.js` -> `b08-v2-api-client.js` -> `b08-v2-commercial-shell.js`)
 * dinamik `<script>` ile yuklendigi icin yuklenemezse eski defter yuzeyi
 * musterinin gordugu yuzey olur ve o zaman kabukla TEKRAR eder.
 * ---------------------------------------------------------------- */

/* 1) TEKRAR EDEN EKRAN ADI GIZLENIR (SILINMEZ). `.b08-kb-hero-title` ve
   `.b08-kb-hero-kicker` kabuk basligiyla AYNI bilgiyi tasiyor: hero basligi
   `mod.b08.title` anahtarini kullaniyor — kabuk basliginin ta kendisi (olculdu:
   ikisi de "B08 · Ön muhasebe"). `.b08-kb-hero`in KENDISI gizlenmez: icinde
   calisan iki dugum var (`[data-b08-context-label]` aktif bolum adi — CC'de
   zaten gizli — ve `[data-b08-hero-updated]` son tazeleme saati). */
#module-workspace-root:has(.ms2[data-ms2-module='b08'])
  .gtos-mp--b08
  .b08-kb-hero-title,
#module-workspace-root:has(.ms2[data-ms2-module='b08'])
  .gtos-mp--b08
  .b08-kb-hero-kicker {
  display: none;
}

/* 2) ICERIK-ICI KPI IZGARASI GIZLENIR (SILINMEZ) — ama YALNIZ kabuk gercekten
   KPI bastiysa. Kosul `.ms2__kpis > li` varligidir: `setKpis()` degeri olmayan
   karti hic basmadigi icin (kabuk kurali A) bu secici, kabuk seridi BOSken
   eslesmez ve `.b08-kb-kpi-row` gorunur kalir. Boylece «ayni sayi iki kez» de
   olmaz, «hic sayi yok» da olmaz — B02/B05/B07/B04 ile ayni kural.
   NOT: `.b08-kb-kpi-row` kartlari AYNI ZAMANDA sekme dugmesidir
   (`[data-b08-kpi-tab]`); gizlendiginde ayni gecisi dort ledger sekmesi
   (`[data-b08-tab]`) yapmaya devam eder — ikisi de `setB08LedgerTab()` TEK
   karar noktasina gider, yani hicbir islev kaybolmaz. */
#module-workspace-root:has(.ms2[data-ms2-module='b08'] .ms2__kpis > li)
  .gtos-mp--b08
  .b08-kb-kpi-row {
  display: none;
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-C-C08 (cc-module-shell-023) — DALGA C 1/8
 *
 * KURAL EKLENMEDI — OLCULMUS KARAR (kanit: kabul-kanitlari/20260918-c08-shell/
 * c08-facts-kesif.json + c08-facts-kabul.json):
 *
 * 1) GIZLENECEK TEKRAR YOK. C08'in eski kromunda `gtos-mp__banner` hic yok ve
 *    `.module-kpi-strip` uretilmiyor (`setModuleKpiStrip('c08')` cagrisi
 *    kodda yok; olculdu: kart KPI seridi gorunur = false, hem kesifte hem
 *    kabulde). Govdedeki tek baslik `.c08-catalog-heading` ("Kurs katalogu")
 *    bir BOLUM basligidir; kabuk basligi (`mod.c08.title` = "C08 · Dis Ticaret
 *    E-Akademi") ile ayni bilgiyi tasimaz — gizlenseydi katalog bolumu
 *    isimsiz kalirdi. `.c08-catalog-banner` (kurs sayisi + sinir cumlesi) da
 *    gizlenmedi: kabuk seridi kurs SAYISINI durum rozetinde soyluyor ama
 *    banner'in ikinci yarisi (sertifika sinirini soyleyen cumle) baska hicbir
 *    yerde YOK; gizlemek o bilgiyi silerdi (B08'in gap-banner karariyla ayni
 *    gerekce).
 *
 * 2) MOBIL TASMA KABUGUN KENDISIYLE COZULDU, YENI KURAL GEREKMEDI. Kesifte
 *    375px'te `.gtos-mp--c08` kokune gore 115 ihlal olculmustu (acik ve koyu
 *    temada ayni; en buyugu `.c-academy-card` ve `.c08-catalog-shell` 106,6px,
 *    kok genisligi 278,2px) — yani rol dersi karti ve butun katalog bolumu
 *    sessizce kirpiliyordu. Tasima sonrasi AYNI olcum 375/1024/1440 x acik/koyu
 *    = 6 olcumun 6'sinda 0 ihlal: kabugun `.ms2-grid` sutunlari min-width:0
 *    tasidigi ve CILA-02'nin <=768px tek-sutun kurallari devraldigi icin
 *    icerik kok genisligine sigiyor. Bu yuzden C08 icin ek bir kosullu kural
 *    YAZILMADI (uydurma duzeltme yok) ve hicbir ham renk eklenmedi.
 * ---------------------------------------------------------------- */

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-C-C02 (cc-module-shell-024) — DALGA C 2/8
 *
 * KURAL EKLENMEDI — OLCULMUS KARAR (kanit: kabul-kanitlari/20260918-c02-shell/
 * c02-facts-kesif.json + c02-facts-kabul.json):
 *
 * 1) GIZLENECEK TEKRAR YOK. C02'nin eski kromunda `gtos-mp__banner` hic yok ve
 *    `.module-kpi-strip` uretilmiyor (`setModuleKpiStrip('c02')` cagrisi kodda
 *    yok; olculdu: kart KPI seridi gorunur = false, hem kesifte hem kabulde).
 *    Govdedeki uc aday da bilerek GIZLENMEDI:
 *      · `.c02-module-identity` — kabuk basligi modulun ADINI soyler, bu bant
 *        ise SINIRI soyler ("maliyet hesabi A08'de; burasi yalniz evrak okuma
 *        ve aktarim"). Bu cumle baska hicbir yerde yok; gizlemek musteriyi
 *        yanlis modulde tutan bir bilgiyi silerdi (B08 gap-banner karariyla
 *        ayni gerekce).
 *      · `.c02-queue-summary` — kabuk seridi AYNI sayilari gosterir ama
 *        SEC(IL)MEZ bir farkla: kart kurali A geregi 0 olan sayi kabukta HIC
 *        basilmaz; uc sayacin sifir hali yalniz burada gorunur. Gizlenseydi
 *        "hepsi 0" durumunda ekranda hicbir sayi kalmazdi.
 *      · `#c02-provider-banner` — canli OCR saglayicisinin bagli olup
 *        olmadigini soyler; kabuk seridi bunu TEKRAR ETMEZ (setStatusBar bos
 *        birakildi), dolayisiyla tekrar degil TEK kaynaktir.
 *
 * 2) MOBIL TASMA ZATEN YOKTU, KABUK DA URETMEDI. Kesifte 375/1024/1440 x
 *    acik/koyu = 6 olcumun 6'sinda 0 ihlal olculmustu; kabulde AYNI olcum yine
 *    6/6 sifir (dosya girdisi 375px'te 244,2 px genisligiyle kok icinde kaliyor).
 *    Bu yuzden C02 icin ek bir kosullu kural YAZILMADI (uydurma duzeltme yok)
 *    ve hicbir ham renk eklenmedi.
 * ---------------------------------------------------------------- */

/* ------------------------------------------------------------------
 * WP-CILA-C-01 madde 2 (C02) — GOVDEDEKI SAYAC TEKRARI
 *
 * YUKARIDAKI "1) GIZLENECEK TEKRAR YOK" karari `.c02-queue-summary` icin
 * GOZDEN GECIRILDI (18.09 gece turu, musteri gozu): kabuk seridi
 * (`paintC02ModuleShellStatus`, unified-platform.js:22041-22073) bekleyen /
 * incelemede / onayli sayilarini KPI kartlarina basiyor, govdenin en ustundeki
 * `.c02-queue-summary` ise AYNI uc sayiyi (`[data-c02-queue-pending|review|
 * done]`, index.html:6108-6120) ikinci kez gosteriyor. Ikisi de TEK kaynaktan
 * (`c02-workspace-panel.js` `updateQueueSummary()` -> `bucketJobs()`) beslenir,
 * yani veri ayni; ekranda gereksiz TEKRAR var.
 *
 * KURAL B07/B04/B08 ILE AYNI ("kural 2" deseni) ve AYNI GEREKCEYLE KOSULLU:
 * kosul `.ms2__kpis > li` varligidir. `setKpis()` degeri 0 olan karti HIC
 * basmaz (kabuk kurali A), yani uc sayacin UCU DE 0 iken kabuk serit BOS olur,
 * bu secici ESLESMEZ ve `.c02-queue-summary` GORUNUR kalir — "hepsi 0"
 * durumunda ekranda hicbir sayi kalmamasi riski (ilk C02 turunun bu bolumu
 * yazmama gerekcesi) boylece kapanir. Hicbir dugum SILINMEZ; kabuk bileseni
 * yuklenmezse (veya `setKpis([])` doner donmez) eski kromla birebir ayni ekran
 * geri gelir.
 *
 * KALAN VE BILEREK KABUL EDILEN FARK: kismi durumda (orn. bekleyen 2,
 * incelemede 0, onayli 0) kabuk yalniz "Bekleyen 2" kartini basar; sifir olan
 * iki sayac ekrandan kalkar. Bu, B02/B04/B05/B07/B08'de zaten uygulanan ayni
 * sozlesmedir (0 kart basilmaz) — C02'ye ozel bir kayip degil, sistem geneli
 * kural. Farkli karar verilirse tek yapilacak sey bu blogu kaldirmaktir.
 *
 * NOT: `.c02-module-identity` (modulun SINIRINI soyleyen bant) ve
 * `#c02-provider-banner` (canli OCR saglayicisi bagli mi) BU KURALIN DISINDA
 * kalir — ikisi de kabukta tekrar ETMEYEN, baska hicbir yerde olmayan bilgi.
 * ---------------------------------------------------------------- */
#module-workspace-root:has(.ms2[data-ms2-module='c02'] .ms2__kpis > li)
  .gtos-mp--c02
  .c02-queue-summary {
  display: none;
}

/* ---------------------------------------------------------------- *
 * WP-H3-TEK-C-C03 (cc-module-shell-025) — DALGA C 3/8
 *
 * IKI kural da KOSULLU (`:has(.ms2[data-ms2-module='c03'])`) ve geri
 * alinabilir: kabuk bilesen yuklenmezse C03 eski kromuyla aynen calisir.
 * Hicbir dugum silinmez, hicbir renk ham degerle yeniden tanimlanmaz —
 * yalnizca IKI yerlesim (layout) esigi kaldirilir.
 *
 * NEDEN: kabuk govdesi icerik kolonunu daraltir (olculdu, 1024 px goruntu
 * genisliginde `.ms2` kok genisligi 554,0 px; kabuk oncesi modul govdesi
 * 610,7 px idi). `.query-screen-row` uc sutunlu bir izgara ve sutun
 * TABANLARI sabit piksel: `minmax(260px,1.4fr) minmax(170px,1fr)
 * minmax(170px,1fr)` + 2 x 0,55rem bosluk = 617,6 px min-icerik. Bu taban
 * 554 px'lik kolona sigmiyor; izgara hucresi min-icerik genisligine
 * buyudugu icin `.query-screen` KABI da onunla birlikte tasiyor ve
 * icindeki `#c03-query-meta` + `#c03-alert-context-strip` de disari
 * tasiyordu (kabulde 9 ihlal: hepsi bu tek koke bagli).
 *
 * TASMA KABUKTAN ONCE DE VARDI (kesif olcumu, `c03-facts-kesif.json`):
 * 1024 px'te 101 ihlal ve SAYFA duzeyinde yatay tasma
 * (`docScrollWidth` 1081 > `clientWidth` 1024). Kabuk sayfa tasmasini
 * zaten kapatti (1024 = 1024); asagidaki iki kural kalan hucre tasmasini
 * da kapatir.
 *
 * NEDEN MEDYA SORGUSU DEGIL: `minmax(0, …)` fr oranlarini (1,4 / 1 / 1)
 * AYNEN korur — 1440 px'te sutun genislikleri bugunkuyle BIREBIR ayni
 * kalir (964,8 px kolonda 1,4fr zaten 260 px tabanin uzerinde), yalniz
 * dar kolonda izgara kuculebilir hale gelir. 768 px ve altinda zaten
 * mevcut `.module-card[data-module='c03'] .query-screen-row` kurali
 * (unified.css, flex/tek sutun) devrede ve o kural DEGISMEDI.
 * ---------------------------------------------------------------- */

/* 1) IZGARA TABANI KALDIRILIR (oran korunur). */
#module-workspace-root:has(.ms2[data-ms2-module='c03'])
  .gtos-mp--c03
  .query-screen-row {
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr) minmax(0, 1fr);
}

/* 2) ARAMA KUTUSUNUN SABIT GENISLIGI KALDIRILIR. `.search-box input`
   unified.css'te `width: 300px` tasiyor; daralan ilk sutunda bu sabit
   genislik izgaradan bagimsiz olarak tasar. Kabuk icinde kutu kendi
   sutununu doldurur (gorsel olarak ayni, yalnizca esnek). */
#module-workspace-root:has(.ms2[data-ms2-module='c03'])
  .gtos-mp--c03
  .query-screen-row .search-box input {
  width: 100%;
  min-width: 0;
}

/* ------------------------------------------------------------------
 * WP-H3-TEK-C-C06 (cc-module-shell-029) — SENARYO LABORATUVARI IZGARA
 * TABANI (yalniz kabuk icinde, 375 px olcumune dayali)
 *
 * KOSULLU ve GERI ALINABILIR (`:has(.ms2[data-ms2-module='c06'])`): kabuk
 * bilesen yuklenmezse C06 eski kromuyla aynen calisir. Hicbir dugum
 * silinmez, hicbir renk/olcu ham degerle yeniden tanimlanmaz — yalnizca
 * izgara hucrelerinin MIN-ICERIK TABANI kaldirilir.
 *
 * NEDEN: `.c06-mid-grid` / `.c06-bottom-grid` genis ekranda
 * `repeat(3, minmax(0, 1fr))` ile taniml, ama <=1100 px medya sorgusunda
 * `grid-template-columns: 1fr` oluyor (unified.css:32345 ve :32358).
 * `1fr` = `minmax(auto, 1fr)`, yani hucrenin OTOMATIK MINIMUMU icerigin
 * min-icerik genisligidir; hucre o tabanin altina INEMEZ. 375 px'te kabuk
 * kolonu 278,2 px'e daraliyor ve senaryo laboratuvarinin panelleri
 * (`.c06-ai-panel`, `.c06-doc-hub`) 345 px min-icerik tabanina oturup
 * kolonu 55-67 px asiyordu (olculdu: kabul turu 375-light/dark, kirpilmis
 * listenin TAMAMI (12/12 kayit — probe `violations`i `slice(0, 12)` ile
 * kirpar ve toplami saklamaz, yani gercek sayi >=12) bu iki koke bagli:
 * `c06-facts-kabul.json` → `ihlaller['375-light'].violations`).
 *
 * KABUKTAN ONCE DE VARDI ve DAHA KOTUYDU (kesif olcumu,
 * `c06-facts-kesif.json`): 375 px VE 1024 px'te ihlal listesi yine dolu
 * (>=12, kirpma sinirinda) VE 1024'te SAYFA duzeyinde yatay tasma
 * (`docScrollW` 1105 > `docClientW` 1024). Kabuk 1024'teki SAYFA
 * tasmasini ZATEN kapatti (1024 = 1024, ihlal >=12 -> 1); asagidaki
 * kural 375'te kalan hucre tasmasini kapatir (duzeltme sonrasi olcum,
 * `c06-facts-kabul-yazmasiz.json`: 375-light/dark 2, 1024 ve 1440'ta 1 —
 * kalan kayitlarin hepsi `div.c06-ai-panel__glow` / `.c06-sustain-badge`,
 * yani KESIFTE DE VAR OLAN dekoratif dugumler, kabuk kromunda degil;
 * kabuk kromu olcumu ayri: sweep 375/1024/1440/1680 x 2 tema 8/8 ihlal 0).
 *
 * NEDEN `grid-template-columns` DEGIL, `min-width`: sutun sayisini/oranini
 * hicbir genislikte DEGISTIRMEMEK icin. `grid-template-columns` ezilirse
 * genis ekrandaki UC sutunlu duzen de bozulurdu; `min-width: 0` yalnizca
 * hucrenin kuculebilmesini saglar, 1440/1024'teki sutun sayisi ve
 * genislikleri BIREBIR ayni kalir (olculdu: kpiSutun 4 / formSutun 2
 * degerleri degismiyor). 768 px ve altindaki mevcut C06 mobil parite
 * kurallari (unified.css:15858-15874) DEGISMEDI.
 * ---------------------------------------------------------------- */
#module-workspace-root:has(.ms2[data-ms2-module='c06'])
  .gtos-mp--c06
  .c06-mid-grid > *,
#module-workspace-root:has(.ms2[data-ms2-module='c06'])
  .gtos-mp--c06
  .c06-bottom-grid > * {
  min-width: 0;
}

/* ------------------------------------------------------------------
 * WP-CILA-C-01 madde 4 (C04) — SATIR-ICI AKIS FORMUNDA YETIM ETIKET
 *
 * BULGU (18.09 gece turu, 1440 px): kabuk icerik kolonu daralinca C04'un
 * filtre formunda "Ulke" etiketi satir sonunda YALNIZ kaliyor, ait oldugu
 * girdi bir alt satira dusuyor.
 *
 * KOK NEDEN (olculdu, kod): `.c04-filters` (index.html:6324) ve `.c04-actions`
 * (index.html:6357) icin GENIS EKRANDA hicbir yerlesim kurali YOK. Tek
 * tanimlar `unified.css:15817-15845` icindeki `@media (max-width: 768px)`
 * blogunda (mobil parite S24) — yani 769 px ve uzerinde iki kap da DUZ SATIR-
 * ICI AKIS. Cocuk `<label>`lar `display: inline` oldugu icin etiket `<span>`i
 * ile `<input>`/`<select>` AYRI satir-ici kutulardir ve aralarindaki bosluk
 * gecerli bir SATIR KIRMA FIRSATIDIR; kap daralinca kirma tam oraya dusuyor.
 * B02 (`.b02-live-form--customer`, b02-customer-hub.css:696 grid) ve B08
 * (`.b08-filter-row`, unified.css:3862 flex-wrap) ayni HTML kalibini
 * kullaniyor ama ikisinin de kendi yerlesimi VAR — kardes varyant taramasinda
 * satir-ici akista kalan TEK kap C04'unkilerdi.
 *
 * COZUM — KAP DEGIL ETIKET: `<label>` atomik bir satir-ici kutuya
 * (`inline-flex`) cevrilir, boylece etiket ile girdisi arasinda kirma
 * firsati KALMAZ ve etiket+girdi ikilisi birlikte alt satira gecer. Kabin
 * kendi akisi (`display` degeri, sarma noktalari, dikey ritim) DEGISMEZ —
 * kaba `display:flex` verilseydi `.c04-actions` icindeki blok `<p>`
 * uyari notu da dugmelerin yanina girerdi; bilerek yapilmadi.
 *
 * KOSULLU ve GERI ALINABILIR (`:has(.ms2[data-ms2-module='c04'])`): kabuk
 * bilesen yuklenmezse C04 eski davranisiyla aynen calisir. `min-width: 0` +
 * `max-width: 100%` etiketin dar kolonda kabi TASIRMAMASINI garanti eder.
 *
 * NEDEN `min-width: 769px`: 768 px ve altindaki mevcut mobil parite kurallari
 * (tek sutun + `width: 100%` + 44 px dokunma hedefi) DEGISMEZ; yetim etiket
 * zaten yalniz cok-sutunlu satir-ici akista olusan bir genis-ekran kusuru.
 * Hicbir renk/punto/bosluk ham degerle yazilmadi (yalniz `--gtos-space-2`).
 * ---------------------------------------------------------------- */
@media (min-width: 769px) {
  #module-workspace-root:has(.ms2[data-ms2-module='c04'])
    .gtos-mp--c04
    .c04-filters > label,
  #module-workspace-root:has(.ms2[data-ms2-module='c04'])
    .gtos-mp--c04
    .c04-actions > label {
    display: inline-flex;
    align-items: center;
    gap: var(--gtos-space-2);
    min-width: 0;
    max-width: 100%;
    vertical-align: middle;
  }
}

/* ------------------------------------------------------------------
 * WP-H3-TEK-C-C01 (cc-module-shell-030) — SOHBET KUTUSU YUKSEKLIK
 * SOZLESMESI (yalniz kabuk icinde, canli olcume dayali) — DALGA C 8/8
 *
 * KOSULLU ve GERI ALINABILIR (:has(.ms2[data-ms2-module='c01'])): kabuk
 * bilesen yuklenmezse C01 eski kromuyla BIREBIR ayni calisir. Hicbir dugum
 * silinmez, hicbir renk ham degerle yeniden tanimlanmaz — yalnizca
 * GORUNTU ALANINA KILITLI yukseklik, OLCULEN bir degerle degistirilir.
 *
 * NEDEN (kesif olcumu; kabuktan ONCE de vardi, c01-facts-kesif.json ->
 * ihlaller): unified.css:9326-9333 .c01-whatsapp kutusuna
 *   height: min(calc(100vh - 210px), 780px); min-height: 520px;
 * veriyor, >1320 px'te ayrica unified.css:40108 :has(.c01-main--agent-room)
 * kurali min-height: calc(100dvh - 7.25rem) ekliyor. Ucu de "modulun
 * ustunde ~210 px krom var" VARSAYAR. Gercek olcum (1440x900, kabuk YOK):
 * kutu ustu 327,8 px + yukseklik 774 px -> kutu ALTI goruntu alaninin
 * 201,8 px ALTINDA; #chat-input 398,2 px asagida (1024'te 941,8 px,
 * 375'te 1061,9 px). Yani MUSTERI MESAJ KUTUSUNU GORMEK ICIN SAYFAYI
 * KAYDIRMAK ZORUNDAYDI. Kabuk kromu (baslik + eyebrow + durustluk seridi +
 * KPI) ust boslugu daha da buyuttugu icin bu SABIT bir piksel
 * duzeltmesiyle kapatilamaz.
 *
 * COZUM: yukseklik SABIT YAZILMAZ, JS OLCER — syncC01ModuleShellChatHeight()
 * kutunun sayfa basina gore konumunu (rect.top + scrollTop, kaydirmadan
 * BAGIMSIZ) okuyup kalan goruntu yuksekligini --c01-ms2-chat-h ozel
 * ozelligine yazar. Deger MODULUN KENDI araliğina kenetlenir (taban 520 px,
 * tavan 780 px — ikisi de unified.css:9330-9331den gelir), yani kabuk kutuyu
 * ne 520nin altina indirir ne 780in ustune cikarir. Degisken yazilmadiysa (kabuk yok / JS calismadi)
 * var() yedegi ESKI davranisa doner: min(calc(100vh - 210px), 780px).
 *
 * NEDEN height + min-height + max-height UCU BIRDEN: uc ayri yerden
 * yukseklige mudahale var. Yalniz height ezilseydi min-height:
 * calc(100dvh - 7.25rem) 1440'ta kutuyu yine buyuturdu (olculdu: kesifte
 * cssHeight VE cssMinHeight 774 px). Ucu ayni degere baglanir, yani kutu
 * TAM olculen yuksekliktedir.
 *
 * SUTUN SAYISI/ORANI DEGISMEZ: grid-template-columns bu bolumde HIC
 * ezilmez (1440'ta ray 216 px + ana sutun 1fr aynen kalir). 1320 px ve
 * altindaki mevcut tek-sutun kurallari (unified.css:34528, :38482,
 * :15723) DEGISMEDI.
 * ---------------------------------------------------------------- */
#module-workspace-root:not(.hidden):has(.ms2[data-ms2-module='c01'])
  .module-card[data-module='c01']
  .gtos-mp--c01
  .c01-whatsapp {
  height: var(--c01-ms2-chat-h, min(calc(100vh - 210px), 780px));
  min-height: var(--c01-ms2-chat-h, 0px);
  max-height: var(--c01-ms2-chat-h, none);
}

/* IZGARA HUCRELERI KUCULEBILSIN. 1fr = minmax(auto, 1fr), yani hucrenin
   otomatik minimumu ICERIGIN min-icerik yuksekligidir; kutu olculen
   yuksekligine inerken ray ve ana sutun bu tabana takilip kutudan
   TASARDI (kesif 375: composer kutunun 722 px ALTINDA kaliyordu ve
   .c01-main--map-first { overflow: hidden } yuzunden KIRPILIYORDU).
   min-height: 0 yalnizca kuculmeye izin verir; gorunum/oran aynidir.
   Ray zaten kendi icinde kayabiliyor (.c01-conversation-list max-height
   kurallari), ana sutunda da #c01-agent-room kendi kaydirmasini yapiyor
   (olculdu: roomScrollOverflow 270 px). */
#module-workspace-root:not(.hidden):has(.ms2[data-ms2-module='c01'])
  .module-card[data-module='c01']
  .gtos-mp--c01
  .c01-whatsapp > * {
  min-height: 0;
}

/* TEK SUTUNA DUSEN (<=1320 px) DUZENDE IKI SATIR TABANI: ray ve ana sutun
   kutunun ICINDE paylasilir (ray en fazla ~%29, kalani ana sutun alir).
   Sabit piksel YOK; minmax(0, ...fr) oranlari her genislikte ayni kalir.
   Bu kural olmadan tek sutunlu duzende ray dogal yuksekligiyle (12 uzman
   + sohbet listesi) kutunun tamamini yiyordu. */
@media (max-width: 1320px) {
  #module-workspace-root:not(.hidden):has(.ms2[data-ms2-module='c01'])
    .module-card[data-module='c01']
    .gtos-mp--c01
    .c01-whatsapp {
    grid-template-rows: minmax(0, 0.4fr) minmax(0, 1fr);
  }

  #module-workspace-root:not(.hidden):has(.ms2[data-ms2-module='c01'])
    .module-card[data-module='c01']
    .gtos-mp--c01
    .c01-sidebar--map-rail {
    overflow-y: auto;
  }
}

/* SOHBET DOKU KENDI ICINDE KAYABILSIN — MUSTERININ MESAJ KUTUSUNA
 * ULASABILMESI ICIN (olculmus, kabuktan ONCE de vardi).
 *
 * OLCUM (1440x900, kabuk YOK, sayfa sonuna kaydirilmis):
 * `.c01-chat-dock__body` (= `#c01-agent-room`) `overflow: hidden` ve
 * `display: flex` kolon; icerigin min-icerik yuksekligi ~1000 px, kutu ise
 * 731 px -> `#chat-input` kutunun 196 px ALTINDA kaliyor ve `overflow:
 * hidden` yuzunden BOYANMIYOR. Fare tekerleginde de kaydirilamiyordu
 * (`overflow:hidden` kullanici kaydirmasini kapatir; yalniz programatik
 * `scrollTop` calisiyor — olculdu: `roomScrollable:true`, oda sonuna
 * kaydirilinca composer 568-612 px'te GORUNUR hale geliyor). Yani mesaj
 * kutusuna erisim, uygulamanin kendi otomatik kaydirmasina bagliydi.
 *
 * `overflow-y: auto` YALNIZ KABUK ICINDE verilir: dok govdesi artik
 * kullanicinin kendi kaydirmasiyla da sonuna gidebilir, composer her
 * durumda ERISILEBILIR. Duzen/oran degismez, hicbir dugum gizlenmez veya
 * silinmez; `#chat-messages` kendi kaydirmasini korur. Kabuk yoksa kural
 * hic uygulanmaz (eski davranis aynen kalir).
 */
#module-workspace-root:not(.hidden):has(.ms2[data-ms2-module='c01'])
  .module-card[data-module='c01']
  .gtos-mp--c01
  .c01-chat-dock__body {
  overflow-y: auto;
}

/* ------------------------------------------------------------------
 * GT3-YERLESIM-CSS KOK-5 (02.10) — «NASIL CALISIR?» BALONU 24 MODULDE
 * KIRPILMAZ (A05-A08 yamasinin genellemesi)
 *
 * OLCULDU (canli tarama): balon 20 modulde her viewport'ta kesiliyordu
 * (149-336 px alt kisim kayip, yalniz "Nasil kullanilir" basligi
 * gorunuyordu). Kok: `.ms2__banner { overflow: hidden }` (bolum 1) +
 * balon `position: absolute; top: calc(100% + .42rem); right: 0;
 * width: min(360px, 82vw)` (unified.css) — banner'i asan kisim kirpiliyor;
 * `right: 0` tetikleyicinin kabina bagli oldugu icin tetikleyici solda
 * kalinca balon banner'in SOLUNA tasiyordu (A07 175, B03 200 px).
 * gtos-module-premium.css G2-A05-08 yamasi bunu yalniz A05-A08 icin
 * kapatmisti; o kurallar (0,5,0) yerinde kalir, burasi kalan moduller.
 *
 * COZUM (KOSULLU — balon KAPALIYKEN banner birebir eski):
 *  1) Balon acikken banner tasmaya izin verir ve ust katmana cikar;
 *     parilti (::before) ve alt cizgi banner kutusuna KENDILERI kirpilir —
 *     tasma izni yalniz balonu disari birakir.
 *  2) >= 769 px: balonun kabi `position: static` → balon artik banner'in
 *     ic satirina (`.ms2__banner-inner`, position: relative) gore konumlanir:
 *     sag kenara hizali, genisligi `min(360px, 100%)` — banner'in ne soluna
 *     ne sagina tasabilir, tetikleyici hangi satira sarilirsa sarilsin.
 *  3) <= 768 px: balon akista acilir (banner'i asagi iter) — 375'te de tam.
 * Kabuk katmanlari (oval kabuk, ust toolbar, CC-MODULE-SHELL-LOCK) ve
 * renk/punto DEGISMEZ; yalniz konum/kirpma. Ham renk yok.
 * ---------------------------------------------------------------- */
.ms2__banner:has(.module-how-popover:not(.hidden)) {
  overflow: visible;
  z-index: var(--gtos-z-dropdown);
}

.ms2__banner:has(.module-how-popover:not(.hidden))::before {
  /* ::before top:-40% / height:200% → gorunur dilim %20..%70 (kendi boyuna gore). */
  left: 0;
  width: min(320px, 100%);
  clip-path: inset(20% 0 30% 0 round var(--ms2-radius));
}

.ms2__banner:has(.module-how-popover:not(.hidden)) .ms2__banner-rule {
  left: var(--ms2-radius);
  right: var(--ms2-radius);
}

@media (min-width: 769px) {
  .ms2__banner .ms2__actions > .module-workspace-how-shell {
    position: static;
  }

  .ms2__banner .ms2__actions > .module-workspace-how-shell .module-how-popover {
    right: 0;
    left: auto;
    width: min(360px, 100%);
    max-width: 100%;
    box-sizing: border-box;
  }
}

@media (max-width: 768px) {
  .ms2__banner .ms2__actions > .module-workspace-how-shell {
    flex: 1 1 100%;
    min-width: 0;
  }

  .ms2__banner .ms2__actions > .module-workspace-how-shell .module-how-popover {
    position: relative;
    top: auto;
    right: auto;
    width: auto;
    max-width: 100%;
    margin-top: 0.5rem;
    box-sizing: border-box;
  }

  .ms2__banner .ms2__actions > .module-workspace-how-shell .module-how-popover::before {
    right: auto;
    left: 1rem;
  }
}
