/* ==========================================================================
 * TurnuvaGo — ortak bileşen temeli (docs/DESIGN_SYSTEM.md §10)
 *
 * v6.171.0 — UX/IA Faz 4E. tokens.css'ten hemen sonra, HER kabukta
 * (turnuva v3, hesap/platform Bootstrap, legacy page_header, public) yüklenir.
 * Yalnız semantik token tüketir; hardcoded renk YOKTUR.
 *
 * Aileler: .tg-btn (primary/secondary/ghost/danger/icon) · .tg-card ·
 * .tg-status (success/warning/danger/info/neutral) · .tg-note (kalıcı not)
 * · .tg-toast (geçici mesaj) · .tg-input/.tg-field/.tg-form-actions ·
 * .tg-page-header · .tg-icon.
 *
 * Eski sınıflar (v3-primary-button, platform-primary-button, .btn, .badge,
 * .v3-panel, .platform-card, .platform-status…) kendi dosyalarında aynı
 * token'lara bağlandı; burada YENİDEN tanımlanmaz (DS-044: additive).
 * Mobil 44px / 16px tabanı bu ailelerde yapısal olarak sağlanır (DS-010);
 * tema bu değerleri DEĞİŞTİREMEZ.
 * ========================================================================== */

/* ---------- Buttons ---------- */
.tg-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--tg-control-height);padding:10px 16px;border:1px solid transparent;border-radius:var(--tg-radius-md);font:inherit;font-size:var(--tg-font-md);font-weight:var(--tg-font-weight-black);line-height:1.2;text-decoration:none;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease,transform .15s ease;-webkit-tap-highlight-color:transparent}
.tg-btn:focus-visible{outline:3px solid var(--tg-focus-ring);outline-offset:2px}
.tg-btn:disabled,.tg-btn[aria-disabled="true"]{opacity:.55;cursor:not-allowed;transform:none;box-shadow:none}
.tg-btn svg{flex:0 0 auto}
.tg-btn-primary{background:var(--tg-action-primary);color:var(--tg-action-primary-text);box-shadow:0 6px 16px color-mix(in srgb,var(--tg-action-primary) 22%,transparent)}
.tg-btn-primary:hover{background:var(--tg-action-primary-hover);color:var(--tg-action-primary-text)}
.tg-btn-secondary{background:var(--tg-action-secondary-bg);border-color:var(--tg-action-secondary-border);color:var(--tg-action-secondary-text)}
.tg-btn-secondary:hover{background:var(--tg-surface-soft);color:var(--tg-action-secondary-text)}
.tg-btn-ghost{background:transparent;color:var(--tg-action-primary)}
.tg-btn-ghost:hover{background:var(--tg-action-primary-soft);color:var(--tg-action-primary)}
.tg-btn-danger{background:var(--tg-action-danger);color:var(--tg-action-danger-text)}
.tg-btn-danger:hover{background:color-mix(in srgb,var(--tg-action-danger) 86%,black 14%);color:var(--tg-action-danger-text)}
.tg-btn-danger-soft{background:var(--tg-action-danger-soft);color:var(--tg-action-danger)}
.tg-btn-icon{width:var(--tg-touch-min);min-width:var(--tg-touch-min);padding:0;border-color:var(--tg-border);background:var(--tg-surface);color:var(--tg-text)}
.tg-btn-icon:hover{background:var(--tg-surface-soft)}
/*
 * button.compact — LAB-BTN-H (Wave 2 ürün kararı).
 *
 * Kullanıcı "Sıkışık / küçük" adayını seçti: düşük yükseklik, sıkı harf
 * aralığı, küçük radius. Aday değerleri (34/7-13/12.5px/7px radius) KÖR
 * KOPYALANMADI; canonical ölçeğe oturtuldu — punto `--tg-font-xs`, radius
 * `--tg-radius-sm`, yükseklik yeni `--tg-control-height-compact` token'ı.
 * PARALEL bir compact sınıfı açılmadı: mevcut `.tg-btn-sm` standardın
 * kendisi oldu (tek production kullanımı vardı, bkz. tournament.php).
 */
.tg-btn-sm{min-height:var(--tg-control-height-compact);padding:6px 13px;
  border-radius:var(--tg-radius-sm);font-size:var(--tg-font-xs);letter-spacing:.01em}
.tg-btn-block{width:100%}

/*
 * ── CANONICAL DOKUNMA HEDEFİ ────────────────────────────────────────
 *
 * Wave 2. 44px kuralı bugüne kadar accessibility.css'teki ELLE YAZILMIŞ
 * eski sınıf listesine bağlıydı; bir buton canonical'a taşındığında
 * listeden düşüp sessizce 44px altına inebiliyordu. Üstelik o dosya
 * Platform Yönetimi kabuğunda hiç YÜKLENMİYOR (platform/app/platform.php)
 * — yani platform butonları hiçbir zaman bu güvenceyi almadı.
 *
 * Garanti bu yüzden canonical sınıfın KENDİSİNE, HER kabukta yüklenen bu
 * dosyaya taşındı. Yeni bir erişilebilirlik katmanı kurulmadı; eşik
 * Bootstrap kabuğuyla aynı (767.98) ve accessibility.css'in 760px
 * bandının üst kümesidir.
 */
@media (max-width: 767.98px) {
  .tg-btn{min-height:var(--tg-touch-min);display:inline-flex;align-items:center;justify-content:center}
  /* Kompakt buton dar ekranda 40px GÖRÜNÜR (yoğunluk korunur) ama
     tıklanabilir alan 44px'tir. Desen yeni DEĞİL: fixtures.css'teki
     "Planla / Maçı Aç" bandının aynısı — şerit butonun KENDİ kutusunun
     genişliğindedir (left/right:0), bu yüzden komşu aksiyonun isabetini
     çalamaz; yatayda 44px'i butonun gerçek genişliği sağlar. */
  .tg-btn-sm{position:relative;min-height:var(--tg-control-height-compact-mobile);
    /* YATAY eksen şeritle DEĞİL gerçek kutuyla çözülür: "Sil" gibi kısa
       etiketli kompakt buton 42px genişliğinde kalıyordu (ölçüldü) ve
       şerit `left/right:0` olduğu için yatayda 44px'e ulaşamıyordu.
       Şeridi yanlara taşırmak komşu aksiyonun isabetini çalma riski
       üretir; bu yüzden kutu büyür — accessibility.css'teki üst bar
       bağlantılarıyla AYNI gerekçe. */
    min-width:var(--tg-touch-min)}
  .tg-btn-sm::after{content:'';position:absolute;left:0;right:0;top:50%;
    height:var(--tg-touch-min);transform:translateY(-50%)}
}

/* ---------- Cards / panels ---------- */
.tg-card{background:var(--tg-surface);border:1px solid var(--tg-border);border-radius:var(--tg-radius-lg);padding:var(--tg-space-4);box-shadow:var(--tg-shadow-card);color:var(--tg-text)}
.tg-card-soft{background:var(--tg-surface-soft);box-shadow:none}
.tg-card-title{margin:0 0 var(--tg-space-2);font-size:var(--tg-font-lg);font-weight:var(--tg-font-weight-black);color:var(--tg-text)}
.tg-card-muted{margin:0;color:var(--tg-text-muted);font-size:var(--tg-font-sm)}

/*
 * ── card.sectioned — BÖLÜMLÜ KART (Wave 4 canonical) ────────────────
 *
 * Kullanıcının seçtiği aday LAB-CARD-J ("Üst bilgi satırlı"). Aday
 * değerleri KÖR KOPYALANMADI, Wave 2'deki LAB-BTN-H kararıyla aynı
 * yöntemle canonical ölçeğe oturtuldu: 10.5px → `--tg-font-xs`,
 * 800 ağırlık → `--tg-font-weight-black`, aksan noktası
 * `--tg-action-primary`. Tek bir raw renk/px YOKTUR.
 *
 * Neden ayrı bir sınıf DEĞİL de `.tg-card` üstünde modifier: bölümlü
 * kart farklı bir KART değildir, aynı kartın iç düzenidir. Paralel bir
 * primitive (`.card`, `.ui-card`, `.platform-card` gibi) açılmaz.
 *
 * Yapı:
 *   .tg-card.tg-card-sectioned
 *     > .tg-card-head   (isteğe bağlı .tg-card-eyebrow + başlık + açıklama)
 *     > .tg-card-body
 *     > .tg-card-foot   (isteğe bağlı)
 *
 * Gövde dolgusu BURADAN gelir. Daha önce `platform/views/competition-engine.php`
 * karşılığı olmayan bir `.platform-card-body` yazıyordu ve içerik kart
 * kenarına yapışıyordu; çözüm o sınıfa yeni bir legacy kural eklemek
 * DEĞİL, yüzeyi bu canonical gövdeye taşımak oldu.
 */
.tg-card-sectioned{padding:0;overflow:hidden}
.tg-card-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--tg-space-3);
  padding:var(--tg-space-3) var(--tg-space-4);border-bottom:1px solid var(--tg-border);
  background:var(--tg-surface-soft)}
/* Başlık bölmesi daralabilmeli: flex çocuğun varsayılan `min-width:auto`
   değeri uzun turnuva/bölüm adında kartı dışarı taşırır (Wave 4'te
   gerçek tarayıcı ölçümüyle doğrulandı). */
.tg-card-head>div{min-width:0}
.tg-card-head h2,.tg-card-head h3{margin:0;font-size:var(--tg-font-md);
  font-weight:var(--tg-font-weight-black);line-height:1.3;color:var(--tg-text);overflow-wrap:anywhere}
.tg-card-head p,.tg-card-head small{display:block;margin:4px 0 0;color:var(--tg-text-muted);
  font-size:var(--tg-font-xs);line-height:var(--tg-line-height);overflow-wrap:anywhere}
.tg-card-head-actions{display:flex;align-items:center;gap:var(--tg-space-2);flex-wrap:wrap;flex:0 0 auto}
/* LAB-CARD-J'nin ayırt edici öğesi: başlıktan ÖNCE gelen bağlam satırı. */
.tg-card-eyebrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 6px;
  font-size:var(--tg-font-xs);font-weight:var(--tg-font-weight-black);letter-spacing:.07em;
  line-height:1.2;text-transform:uppercase;color:var(--tg-text-muted)}
.tg-card-eyebrow::before{content:'';flex:0 0 auto;width:6px;height:6px;border-radius:50%;
  background:var(--tg-action-primary)}
.tg-card-body{padding:var(--tg-space-4);color:var(--tg-text)}
.tg-card-foot{display:flex;align-items:center;gap:var(--tg-space-2);flex-wrap:wrap;
  padding:var(--tg-space-3) var(--tg-space-4);border-top:1px solid var(--tg-border);
  background:var(--tg-surface-soft)}

/*
 * card.compact — YOĞUN BÖLÜMLÜ KART (Wave 4B).
 *
 * İkinci yoğunluk ihtiyacı VARSAYILMADI, ölçüldü: Platform Yönetimi'nin
 * 46 bölümlü kartı yıllardır kendi `.platform-card-header` ölçüsüyle
 * çiziliyordu (68px başlık kutusu, 13px başlık, 10px açıklama, dikey
 * ortalı satır). Canonical aileye taşınırken bu ölçü KAYBOLMAMALI —
 * yoksa göç sessizce 17 platform ekranını yeniden tasarlamış olurdu.
 *
 * Çözüm, `button.compact` (.tg-btn-sm) ve `input.compact` (.tg-input-sm)
 * ile AYNI kalıptır: ayrı bir `platform-*` sistemi değil, canonical
 * ailenin yoğunluk varyantı. Değerler platformun BUGÜNKÜ gerçek
 * değerleridir; yeni bir tasarım kararı verilmedi ve punto ölçeği
 * "iyileştirilmedi" — 10px açıklama bilinçli olarak korundu (erişilebilirlik
 * borcu olarak ayrıca raporlanır, bu göçün işi değildir).
 *
 * Renkler token'dan gelir; burada yalnız GEOMETRİ vardır.
 */
.tg-card-compact>.tg-card-head{min-height:68px;align-items:center;gap:14px;padding:14px 17px}
.tg-card-compact>.tg-card-head h2,.tg-card-compact>.tg-card-head h3{font-size:13px;letter-spacing:-.15px}
.tg-card-compact>.tg-card-head p,.tg-card-compact>.tg-card-head small{font-size:10px}

/* ---------- Status pills ---------- */
.tg-status{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:var(--tg-radius-pill);font-size:var(--tg-font-xs);font-weight:var(--tg-font-weight-black);line-height:1.3;white-space:nowrap;background:var(--tg-status-neutral-soft);color:var(--tg-status-neutral)}
/* v6.326.0 — İSTEĞE BAĞLI ÖNCÜ NOKTA. `.platform-status` ailesi rozetin
   başında boş bir <i> ile küçük bir daire basıyordu; canonical aileye
   taşınırken o gösterge kaybolmasın diye slot BURAYA taşındı. Kural
   yalnız gerçekten <i> yazılmış rozetlere uygular, mevcut canonical
   kullanımların hiçbirinde <i> yok — davranışları değişmez. */
.tg-status>i{flex:0 0 auto;width:5px;height:5px;border-radius:50%;background:currentColor}
.tg-status-success{background:var(--tg-status-success-soft);color:var(--tg-status-success)}
.tg-status-warning{background:var(--tg-status-warning-soft);color:var(--tg-status-warning)}
.tg-status-danger{background:var(--tg-status-danger-soft);color:var(--tg-status-danger)}
.tg-status-info{background:var(--tg-status-info-soft);color:var(--tg-status-info)}
.tg-status-neutral{background:var(--tg-status-neutral-soft);color:var(--tg-status-neutral)}
.tg-status-special{background:var(--tg-status-special-soft);color:var(--tg-status-special)}
.tg-status-solid{color:var(--tg-text-inverse)}
.tg-status-solid.tg-status-success{background:var(--tg-status-success)}
.tg-status-solid.tg-status-warning{background:var(--tg-status-warning)}
.tg-status-solid.tg-status-danger{background:var(--tg-status-danger)}
.tg-status-solid.tg-status-info{background:var(--tg-status-info)}

/* ---------- Persistent note vs toast (DS-031: iki ayrı anlam) ---------- */
.tg-note{display:block;margin:var(--tg-space-3) 0 0;padding:10px 14px;border:1px solid color-mix(in srgb,var(--tg-status-info) 25%,transparent);border-left-width:4px;border-radius:var(--tg-radius-sm);background:var(--tg-status-info-soft);color:var(--tg-text);font-size:var(--tg-font-sm);line-height:var(--tg-line-height)}
.tg-note a{color:var(--tg-action-primary);font-weight:var(--tg-font-weight-black)}
.tg-note-warning,.tg-note-locked{border-color:color-mix(in srgb,var(--tg-status-warning) 35%,transparent);background:var(--tg-status-warning-soft)}
.tg-note-danger{border-color:color-mix(in srgb,var(--tg-status-danger) 35%,transparent);background:var(--tg-status-danger-soft)}
.tg-note-success{border-color:color-mix(in srgb,var(--tg-status-success) 35%,transparent);background:var(--tg-status-success-soft)}
.tg-note-neutral{border-color:var(--tg-border);background:var(--tg-surface-soft);color:var(--tg-text-muted)}
/* v6.173.0 — Faz 6A (DS-075): BİLGİ notu aksiyon gibi görünmez. Kompakt
   varyant ikon + metni tek satırda hizalar, dikey hacmi düşürür. */
.tg-note-compact{display:flex;align-items:flex-start;gap:8px;margin:0 0 var(--tg-space-3);padding:8px 12px;font-size:var(--tg-font-sm);line-height:1.4}
.tg-note-compact svg{flex:0 0 auto;margin-top:1px;color:var(--tg-status-info)}
.tg-note-compact>span{min-width:0}
/* R5 (2026-10-18) — bakım duyuru bandı: kalıcı notun uyarı tonu, akış içinde (sticky / fixed YOK).
   Kabuğun içerik alanının başında; gövde düzeyindeki sayfalarda (landing, yardım, kod / kampanya) kenar boşluğu.
   Kapatma düğmesi canonical .tg-btn-icon (44px); `hidden` özniteliği .tg-note / .tg-btn display'ini ezer. */
.site-announcement{display:flex;align-items:flex-start;gap:8px;margin:0 0 var(--tg-space-3);padding:6px 6px 6px 12px}
.site-announcement[hidden],.site-announcement [hidden]{display:none!important}
.site-announcement-text{flex:1 1 auto;min-width:0;margin:0;padding:6px 0;overflow-wrap:anywhere}
.site-announcement-time{white-space:normal;color:var(--tg-text-muted)}
.site-announcement-close{flex:0 0 auto;min-height:var(--tg-touch-min);border-color:transparent;background:transparent}
body>.site-announcement{margin:var(--tg-space-3) var(--tg-space-4) 0}
.site-announcement-slot{padding-top:var(--tg-space-3)}
.tg-toast{padding:12px 16px;border-radius:var(--tg-radius-md);background:var(--tg-status-info-soft);color:var(--tg-status-info);font-size:var(--tg-font-md);font-weight:var(--tg-font-weight-bold);box-shadow:var(--tg-shadow-overlay)}
.tg-toast.success{background:var(--tg-status-success-soft);color:var(--tg-status-success)}
.tg-toast.error,.tg-toast.danger{background:var(--tg-status-danger-soft);color:var(--tg-status-danger)}
.tg-toast.warning{background:var(--tg-status-warning-soft);color:var(--tg-status-warning)}

/* ---------- Form baseline ---------- */
.tg-field{display:grid;gap:6px;margin:0 0 var(--tg-space-3)}
.tg-label{font-size:var(--tg-font-sm);font-weight:var(--tg-font-weight-black);color:var(--tg-text)}
.tg-input,.tg-select,.tg-textarea{width:100%;min-height:var(--tg-control-height);padding:10px 12px;border:1px solid var(--tg-border-strong);border-radius:var(--tg-radius-sm);background:var(--tg-surface);color:var(--tg-text);font:inherit;font-size:var(--tg-font-md);line-height:1.3;box-sizing:border-box}
.tg-textarea{min-height:96px;resize:vertical}
.tg-input:focus,.tg-select:focus,.tg-textarea:focus{outline:3px solid color-mix(in srgb,var(--tg-focus-ring) 45%,transparent);outline-offset:0;border-color:var(--tg-action-primary)}
.tg-input:disabled,.tg-select:disabled,.tg-textarea:disabled{background:var(--tg-surface-soft);color:var(--tg-text-muted)}
/*
 * input.compact — Wave 3B ürün kararı.
 *
 * İkinci bir yoğunluk ihtiyacı ÖLÇÜLDÜ (Wave 3): Platform Yönetimi'nin
 * tamamı canonical ölçeğin altında çiziliyordu — Bootstrap tabanı 33.1px,
 * ekran override'ları 37–42px. Bu premature abstraction DEĞİL, gerçek bir
 * ikinci ölçek. Ayrı bir `platform-input-*` sistemi AÇILMADI.
 *
 * Hedef ~36px idi; mevcut ölçeğe oturtuldu ve `--tg-control-height-compact`
 * (34px) yeniden kullanıldı — yani kompakt girdi, kompakt BUTONLA aynı
 * yükseklikte. Yeni bir yükseklik token'ı açmak ölçeği ikiye bölerdi.
 * Adlandırma da mevcut modifier desenini izler (`-sm`), ürün belgesindeki
 * "input.compact" adı SEMANTİK kayıttır, runtime sınıfı değil.
 */
.tg-input-sm,.tg-select-sm{min-height:var(--tg-control-height-compact);padding:6px 10px;font-size:var(--tg-font-sm)}
/* Kompakt textarea YALNIZ yoğunluk alır: çok satırlı doğal yüksekliği
   sıkıştırmak metni okunamaz kılardı. */
.tg-textarea-sm{padding:6px 10px;font-size:var(--tg-font-sm)}
/*
 * ── CANONICAL ALAN DOĞRULAMA DURUMU ─────────────────────────────────
 *
 * Sözleşme `aria-invalid="true"`dur — yani önce ERİŞİLEBİLİRLİK, sonra
 * görünüm. Bootstrap'ın `.is-invalid` sınıfı source of truth DEĞİLDİR;
 * yalnızca mevcut JS akışlarını kırmamak için aynı görünümü alır
 * (geçiş uyumluluğu). Canonical stil tek başına `aria-invalid` ile
 * çalışır, legacy sınıf olmadan da tamdır.
 *
 * Anlam yalnız RENKLE verilmez: alanın altındaki `.tg-field-error`
 * metni ve `aria-describedby` bağı asıl taşıyıcıdır. Kırmızı zemin
 * kullanılmaz — metin okunabilirliği bozulmasın.
 */
.tg-input[aria-invalid="true"],.tg-select[aria-invalid="true"],.tg-textarea[aria-invalid="true"],
.tg-input.is-invalid,.tg-select.is-invalid,.tg-textarea.is-invalid,
.was-validated .tg-input:invalid,.was-validated .tg-select:invalid,.was-validated .tg-textarea:invalid{
  border-color:var(--tg-action-danger)}
.tg-input[aria-invalid="true"]:focus,.tg-select[aria-invalid="true"]:focus,.tg-textarea[aria-invalid="true"]:focus,
.tg-input.is-invalid:focus,.tg-select.is-invalid:focus,.tg-textarea.is-invalid:focus,
.was-validated .tg-input:invalid:focus,.was-validated .tg-select:invalid:focus,.was-validated .tg-textarea:invalid:focus{
  outline:3px solid color-mix(in srgb,var(--tg-action-danger) 40%,transparent);border-color:var(--tg-action-danger)}
.tg-field-error{color:var(--tg-action-danger);font-size:var(--tg-font-xs);font-weight:var(--tg-font-weight-bold);line-height:1.4}
.tg-help{color:var(--tg-text-muted);font-size:var(--tg-font-xs);line-height:1.4}
.tg-error{color:var(--tg-status-danger);font-size:var(--tg-font-xs);font-weight:var(--tg-font-weight-bold)}
.tg-form-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--tg-space-2);margin-top:var(--tg-space-4)}

/* ---------- Page header (DS-020 / DS-021: en fazla 1 primary CTA) ---------- */
.tg-page-header{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--tg-space-5);margin-bottom:var(--tg-space-4)}
.tg-page-header-copy{min-width:0;flex:1 1 auto}
.tg-page-header-eyebrow{display:block;margin-bottom:2px;color:var(--tg-action-primary);font-size:var(--tg-font-xs);font-weight:var(--tg-font-weight-black);text-transform:uppercase;letter-spacing:.06em}
.tg-page-header h1{margin:0 0 4px;font-size:var(--tg-font-2xl);font-weight:var(--tg-font-weight-black);line-height:1.15;color:var(--tg-text);overflow-wrap:anywhere}
.tg-page-header-desc{margin:0;color:var(--tg-text-muted);font-size:var(--tg-font-sm);line-height:var(--tg-line-height)}
.tg-page-header-actions{display:flex;flex:0 0 auto;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--tg-space-2)}
/* ── v6.357.0 — SADE SAYFA BAĞLAM BAŞLIĞI (PD-51) ──
   Turnuva İÇ yönetim ekranlarının (Takımlar, Kura, Fikstür, Puan
   Durumu, Turnuva Formatı / Gelişmiş Format) üstü artık KART DEĞİL:
   normal sayfa zemini üzerinde turnuva adı (eyebrow) + başlık + kısa
   açıklama + gerekiyorsa küçük bağlam chip'leri — Raporlar (PDF/Excel)
   ekranının `.v3-section-head` diliyle aynı. Yüzey, çerçeve, gölge ve
   iç boşluk YOK; bileşen ve markup DEĞİŞMEDİ (`tg_page_summary()`).
   Genel Bakış'ın özel turnuva banner'ı bu kuraldan ayrıdır.
   SUPERSEDED: PD-UX10/PD-UX13 "MAVİ VE KOMPAKT ÖZET KARTI" — marka
   mavisi (`--tg-surface-context`) dolgulu, ters renkli kart. */
.tg-page-summary{--summary-ink:var(--tg-text);
  --summary-line:var(--tg-border);
  --summary-layer:var(--tg-surface-soft);
  margin:0 0 var(--tg-space-3);padding:0;border:0;border-radius:0;
  background:transparent;color:var(--summary-ink);box-shadow:none}
.tg-page-summary .tg-page-header{margin-bottom:0;gap:var(--tg-space-3);align-items:center}
.tg-page-summary .tg-page-header-eyebrow{margin-bottom:0}
.tg-page-summary .tg-page-header h1,.tg-page-summary .tg-page-header h2{margin:0;color:var(--summary-ink);font-size:var(--tg-font-xl)}
/* PD-UX14 — açıklama TEK SATIRA ZORLANMAZ. Sığarsa bir satır, sığmazsa
   iki satır, iki satırı da aşarsa clamp. Tek satır + ellipsis kuralı
   uzun locale'lerde (de/ru) cümlenin ilk yarısını yutuyordu. */
.tg-page-summary .tg-page-header-desc{margin:2px 0 0;color:var(--tg-text-muted);
  font-size:var(--tg-font-xs);line-height:1.35;display:-webkit-box;-webkit-box-orient:vertical;
  -webkit-line-clamp:2;line-clamp:2;overflow:hidden;white-space:normal;text-overflow:clip}
/* Yardım: tam genişlik buton DEĞİL, küçük ghost giriş — kartın kendi
   yüzeyinde sakin durur ve satır yüksekliğini büyütmez. */
.tg-page-summary .help-contextual-link{display:inline-flex;align-items:center;gap:5px;
  min-height:28px;padding:3px 10px;border:1px solid var(--summary-line);
  border-radius:var(--tg-radius-pill,999px);background:var(--summary-layer);
  color:var(--summary-ink);font-size:11px;font-weight:800;line-height:1.2;text-decoration:none}
.tg-page-summary .help-contextual-link:hover{background:var(--summary-ink);
  border-color:var(--summary-ink);color:var(--tg-surface)}
.tg-page-summary .help-contextual-link svg{width:13px;height:13px}
/* Başlıktaki ikincil aksiyonlar (ör. "Gelişmiş Formata Geç") kompakt
   kalır ve canonical ikincil buton rengini kullanır (ters renk yok —
   zemin artık sayfa zeminidir). */
.tg-page-summary .tg-page-header-actions{gap:6px}
.tg-page-summary .tg-page-header-actions .tg-btn{min-height:28px;padding:3px 12px;font-size:11px}
/* v6.386.0 — MODÜL AYARLARI ÇARKI (UX_ARCHITECTURE §15.6 MS-UX). Yeni
   bileşen DEĞİL: canonical `.tg-btn.tg-btn-icon` (44px, canonical focus).
   Burada yalnız iki mevcut başlık davranışına karşı korunur: özet kartı
   aksiyonları 28px'e sıkıştırır, mobil başlık aksiyonları tam genişliğe
   yayar — ikon aksiyonu ne ezilir ne esner. İkincil tonda kalır (ana CTA
   gibi görünmez). `v3-section-head` başlıklarında çark sağ üst köşeye
   oturur; başlık metni ve varsa mevcut aksiyon (ör. Maç Planlarını
   Yenile) yerinde kalır, yalnız sağda çark kadar boşluk bırakılır.
   v6.387.0 — GÖRSEL POLISH (beş modülde ortak, yalnız bu sınıf): çark
   çerçevesiz, şeffaf zeminli tek ikondur; dokunma alanı 44×44 KALIR.
   İkon (20px) başlığın ilk satırıyla hizalansın diye alan (44−20)/2 = 12px
   yukarı alınır — görsel olarak çıplak ikon, işlevsel olarak tam hedef.
   Geri bildirim yalnız etkileşimde: hover çok hafif nötr-mavi ton, active
   biraz daha koyu; odak halkası canonical `.tg-btn:focus-visible`. */
.tg-page-header-actions .tg-btn.tg-module-settings-action{flex:0 0 auto;min-height:var(--tg-touch-min);padding:0;font-size:inherit}
.tg-btn.tg-module-settings-action{margin-top:calc((20px - var(--tg-touch-min)) / 2);border-color:transparent;background:transparent;box-shadow:none;color:var(--tg-text-muted)}
.tg-btn.tg-module-settings-action:hover{background:color-mix(in srgb,var(--tg-action-primary) 7%,transparent);color:var(--tg-text)}
.tg-btn.tg-module-settings-action:active{background:color-mix(in srgb,var(--tg-action-primary) 13%,transparent)}
/* Özet kartı (Takımlar) aksiyonları dikeyde ortalar; çarkı taşıyan aksiyon
   alanı diğer modüllerdeki gibi başlığın ÜSTÜNE hizalanır. */
.tg-page-header-actions:has(>.tg-module-settings-action){align-self:flex-start}
/* Mobil sınır (≤760px) aşağıdaki ana "Mobile" bloğundadır. */
.v3-section-head.has-module-settings{position:relative;padding-right:calc(var(--tg-touch-min) + var(--tg-space-2))}
.v3-section-head.has-module-settings>.tg-module-settings-action{position:absolute;top:0;right:0;width:var(--tg-touch-min)}
.tg-module-settings-back{margin:0 0 var(--tg-space-2);padding-left:0;padding-right:0}
.tg-summary-chips{display:flex;flex-wrap:wrap;align-items:center;gap:6px;
  margin:8px 0 0;padding:0}
.tg-summary-chip{display:inline-flex;align-items:center;gap:5px;padding:2px 9px;
  border:1px solid var(--summary-line);border-radius:var(--tg-radius-pill,999px);
  background:var(--summary-layer);color:var(--summary-ink);
  font-size:11px;font-weight:700;line-height:1.5;white-space:nowrap}
.tg-summary-chip-label{color:var(--tg-text-muted);font-weight:900;
  font-size:9.5px;letter-spacing:.05em;text-transform:uppercase}
.tg-summary-chip--muted{color:var(--tg-text-muted);font-weight:600}

/* ── PD-UX14 — ÜST BAR AKSİYON KUTUSU ──
   Sayfa yardımı, bildirim ve profil AYNI kareyi paylaşır: aynı ölçü,
   aynı radius, aynı dokunma alanı. Yeni bir bileşen çerçevesi değildir —
   mevcut `.notification-topbar-link` ve `.tg-profile-avatar` kuralları
   bu tek ölçü kaynağını tüketir. Rozet kutunun DIŞINA taşar; kutunun
   gerçek boyutunu büyütmez, layout kaydırmaz. */
.tg-topbar-action{position:relative;display:grid;place-items:center;
  width:var(--tg-topbar-action-size);height:var(--tg-topbar-action-size);
  flex:0 0 var(--tg-topbar-action-size);border-radius:var(--tg-topbar-action-radius);
  box-sizing:border-box}
/* PD-UX15 — GÖRÜNÜR KARE KÜÇÜK, DOKUNMA ALANI TAM.
   Kutunun kendisi 33px; tıklanabilir yüzey görünmez bir katmanla
   dokunma tabanına (44px) genişletilir. Rozet ve ikon yerleşimi
   etkilenmez, komşu aksiyonların arası da değişmez (katman yalnız
   isabet alanıdır, yerleşim kutusu değil). */
/* v6.325.0 (F-06) — KATMAN 44px'E TAM ULAŞMIYORDU ve KOMŞUYA TAŞIYORDU.
   `inset` yüzdesiz de olsa PADDING kutusuna göre çözülür; kutunun 1px
   kenarlığı düşüldüğü için gerçek band 44 değil 42.4px oluyordu (ölçüm).
   Ayrıca yatayda her iki yana 5.5px taşarken komşu aksiyonun arası yalnız
   6px: iki katman üst üste biniyor ve kenar bölgede YANLIŞ aksiyon
   tetiklenebiliyordu. Geometri artık kenarlıktan bağımsız TAM
   `--tg-topbar-action-hit` yüksekliği verir ve yatay taşmayı
   `--tg-topbar-action-gap` ile sınırlar.

   İKİ ORTAM, İKİ ÇÖZÜM — ve bu bilinçlidir:
     - MASAÜSTÜ: kare 33px kalır, eksik alan bu görünmez katmanla
       kapatılır (imleç hedefi küçük olabilir, yoğunluk korunur).
     - DOKUNMA (≤760px): katmanla yatayda 44px'e ulaşmak komşuyla
       çakışmayı gerektiriyordu; bu yüzden orada KUTUNUN KENDİSİ dokunma
       tabanına çıkar ve taşma payı sıfırlanır (bkz. tokens.css mobil
       blok). Böylece dar ekranda bu katman kutunun İÇİNDE kalır,
       çakışma yapısal olarak imkânsızdır. */
.tg-topbar-action::after{content:"";position:absolute;
  left:calc(-1 * var(--tg-topbar-action-gap));right:calc(-1 * var(--tg-topbar-action-gap));
  top:50%;height:var(--tg-topbar-action-hit);transform:translateY(-50%)}

/* ── PD-UX13 — NOTICE SEMANTİK STANDARDI ──
   Aynı anlam her ekranda AYNI renkle anlatılır:
     info    → nötr bilgi, hiçbir aksiyonu kısıtlamaz
     warning → dikkat gerektirir / mevcut aksiyonu etkiler (hata değil)
     danger  → hata, başarısız işlem, gerçek engel
     success → tamamlanan durum
   `special` (mor) bir NOTICE anlamı DEĞİLDİR; mod/özellik kimliğidir.
   Yeni bir alert çatısı KURULMADI: bu sınıflar mevcut token ailelerini
   tüketen ince modifier'lardır ve gövde/ikon/markup şartı getirmez. */
.tg-notice{display:flex;flex-wrap:wrap;align-items:center;gap:var(--tg-space-2);
  margin:0 0 var(--tg-space-3);padding:10px 14px;border:1px solid var(--tg-border);
  border-inline-start-width:4px;border-radius:var(--tg-radius-sm);
  background:var(--tg-surface-soft);color:var(--tg-text);font-size:var(--tg-font-sm);line-height:var(--tg-line-height)}
.tg-notice--info{border-color:color-mix(in srgb,var(--tg-status-info) 30%,transparent);
  border-inline-start-color:var(--tg-status-info);background:var(--tg-status-info-soft)}
.tg-notice--warning{border-color:color-mix(in srgb,var(--tg-status-warning) 30%,transparent);
  border-inline-start-color:var(--tg-status-warning);background:var(--tg-status-warning-soft)}
.tg-notice--danger{border-color:color-mix(in srgb,var(--tg-status-danger) 30%,transparent);
  border-inline-start-color:var(--tg-status-danger);background:var(--tg-status-danger-soft)}
.tg-notice--success{border-color:color-mix(in srgb,var(--tg-status-success) 30%,transparent);
  border-inline-start-color:var(--tg-status-success);background:var(--tg-status-success-soft)}
.tg-notice-badge{display:inline-flex;align-items:center;padding:2px 8px;border-radius:var(--tg-radius-pill);
  background:var(--tg-surface);font-size:var(--tg-font-xs);font-weight:var(--tg-font-weight-black)}
/* ---------- Export menu (DS-074: tek ikincil aksiyon + açılır liste) ----------
   Kabuk native <details>; JS kapalıyken de açılır. Yeni bir dropdown
   çatısı YOKTUR — panel mutlak konumlu bir kutudur, öğeler gerçek
   <a>/<button>. Renkler yalnız semantik token'lardan gelir. */
.tg-export-menu{position:relative;display:inline-block}
.tg-export-menu>summary{list-style:none;cursor:pointer}
.tg-export-menu>summary::-webkit-details-marker{display:none}
.tg-export-menu-trigger{width:100%}
.tg-export-menu-caret{transition:transform .15s ease}
.tg-export-menu[open]>summary .tg-export-menu-caret{transform:rotate(180deg)}
.tg-export-menu-panel{position:absolute;right:0;top:calc(100% + 6px);z-index:40;display:grid;gap:2px;min-width:230px;max-width:min(320px,calc(100vw - 32px));padding:6px;border:1px solid var(--tg-border);border-radius:var(--tg-radius-md);background:var(--tg-surface);box-shadow:var(--tg-shadow-overlay)}
.tg-export-menu-panel form{margin:0}
.tg-export-menu-item{display:flex;align-items:center;gap:10px;width:100%;min-height:var(--tg-touch-min);padding:8px 10px;border:0;border-radius:var(--tg-radius-sm);background:transparent;color:var(--tg-text);font:inherit;font-size:var(--tg-font-sm);font-weight:var(--tg-font-weight-bold);text-align:left;text-decoration:none;cursor:pointer}
.tg-export-menu-item:hover{background:var(--tg-surface-soft);color:var(--tg-text)}
.tg-export-menu-item:focus-visible{outline:3px solid var(--tg-focus-ring);outline-offset:-2px}
.tg-export-menu-item svg{flex:0 0 auto;color:var(--tg-action-primary)}

/* ---------- Onay penceresi (DS-150 / UXA-264: kaldırma ve kalıcı silme) ----------
   Native <dialog> + showModal(): odak tuzağı, Escape ve arka plan tarayıcıdan
   (assets/js/tg-confirm.js yalnız açar, doldurur, odağı geri verir, çift
   gönderimi kilitler). Masaüstünde ortada kart, ≤760px'te alt sayfa (tam
   genişlik, sticky aksiyon çubuğu + safe-area). Hedef adı uzun olabilir:
   `.tg-confirm-target` her yerden kırılır. Yalnız semantik token. */
.tg-confirm{width:min(480px,calc(100vw - 24px));max-width:none;max-height:min(86vh,680px);padding:0;border:1px solid var(--tg-border);border-radius:var(--tg-radius-lg);background:var(--tg-surface);color:var(--tg-text);box-shadow:var(--tg-shadow-overlay)}
.tg-confirm::backdrop{background:color-mix(in srgb,var(--tg-text) 55%,transparent)}
.tg-confirm-inner{display:flex;flex-direction:column;max-height:inherit;min-height:0;margin:0}
.tg-confirm-head{padding:var(--tg-space-4) var(--tg-space-4) 0}
.tg-confirm-title{margin:0;font-size:var(--tg-font-lg);font-weight:var(--tg-font-weight-black);line-height:1.25;overflow-wrap:anywhere}
.tg-confirm-step{margin:0 0 4px;color:var(--tg-text-muted);font-size:var(--tg-font-xs);font-weight:var(--tg-font-weight-bold);letter-spacing:.04em;text-transform:uppercase}
.tg-confirm-body{display:grid;gap:var(--tg-space-3);padding:var(--tg-space-3) var(--tg-space-4);overflow-y:auto;min-height:0;flex:1 1 auto;font-size:var(--tg-font-md);line-height:1.45}
.tg-confirm-body p,.tg-confirm-body ul{margin:0}
.tg-confirm-body ul{padding-left:1.2em;display:grid;gap:2px}
.tg-confirm-body .tg-note{margin:0}
.tg-confirm-target{display:block;padding:10px 12px;border:1px solid var(--tg-border);border-radius:var(--tg-radius-md);background:var(--tg-surface-soft);font-weight:var(--tg-font-weight-black);overflow-wrap:anywhere}
.tg-confirm-target small{display:block;margin-top:2px;color:var(--tg-text-muted);font-size:var(--tg-font-sm);font-weight:var(--tg-font-weight-bold)}
.tg-confirm-irreversible{font-weight:var(--tg-font-weight-black)}
.tg-confirm-body label{display:grid;gap:6px;font-weight:var(--tg-font-weight-bold)}
.tg-confirm-body textarea{width:100%;min-height:88px;font-size:16px}
.tg-confirm-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--tg-space-2);padding:var(--tg-space-3) var(--tg-space-4);border-top:1px solid var(--tg-border);background:var(--tg-surface)}
.tg-confirm-actions .tg-btn{min-height:var(--tg-touch-min)}
.tg-confirm[aria-busy="true"] .tg-confirm-actions .tg-btn{opacity:.6;pointer-events:none}
html:has(.tg-confirm[open]),html:has(.tg-confirm[open]) body{overflow:hidden}
/* ≤760px alt sayfa kuralları ana mobil bloğundadır (aşağıda, "Mobile"). */

/* ---------- Icons ---------- */
.tg-icon{display:inline-block;flex:0 0 auto;vertical-align:middle;width:20px;height:20px}
.tg-icon-sm{width:16px;height:16px}.tg-icon-lg{width:24px;height:24px}

/* ---------- Maç olayı ikonları (Canlı Maç UX · LM-1) ----------
   TEK sözlük: app/match_event_presentation_helpers.php `match_event_icon()`.
   Yönetim hızlı olay girişi, yönetim olay geçmişi ve public Maç Akışı aynı
   SVG'yi ve aynı kuralları kullanır. Renk anlamı destekleyicidir; olay
   türünü her zaman metin etiketi + ikon BİÇİMİ anlatır (kendi kalesine oku,
   kale içi/dışı top, tek/çift kart). Renkler semantik tokenlardan. */
.tg-event-icon{display:inline-block;flex:0 0 auto;vertical-align:middle}
.tg-event-icon.is-goal,.tg-event-icon.is-penalty-goal{color:var(--tg-status-success)}
.tg-event-icon.is-own-goal{color:var(--tg-status-warning)}
.tg-event-icon.is-penalty-missed{color:var(--tg-status-danger)}
.tg-event-icon .tg-event-card-shape{stroke:color-mix(in srgb,var(--tg-color-text) 26%,transparent);stroke-width:1}
.tg-event-icon .tg-event-card-shape.is-yellow{fill:var(--tg-card-yellow)}
.tg-event-icon .tg-event-card-shape.is-red{fill:var(--tg-card-red)}

/* ---------- Mobile ---------- */
@media (max-width: 760px) {
  /* DS-150 / UXA-264 — onay penceresi alt sayfa: tam genişlik, alta yaslı, yapışkan aksiyon çubuğu + safe-area. */
  .tg-confirm{width:100%;max-width:100%;max-height:88vh;max-height:88dvh;margin:auto auto 0;border-radius:var(--tg-radius-lg) var(--tg-radius-lg) 0 0;border-bottom:0}
  .tg-confirm-actions{position:sticky;bottom:0;padding-bottom:calc(var(--tg-space-3) + env(safe-area-inset-bottom))}
  .tg-confirm-actions .tg-btn{flex:1 1 0}
  .tg-page-header{flex-direction:column;gap:var(--tg-space-3);margin-bottom:var(--tg-space-3)}
  .tg-page-header h1{font-size:var(--tg-font-xl)}
  .tg-page-header-actions{width:100%;justify-content:stretch}
  .tg-page-header-actions>*{flex:1 1 auto}
  /* PD-UX10 — özet kartı mobilde DAHA DA alçalır: başlık satırı kolona
     düşmez (yardım aksiyonu kendine ayrı satır açmaz), boşluklar
     sıkışır. Bilgi kaybı yok — yalnız yoğunluk artar. */
  .tg-page-summary{padding:0;margin-bottom:var(--tg-space-2)}
  .tg-page-summary .tg-page-header{flex-direction:row;align-items:flex-start;gap:8px}
  .tg-page-summary .tg-page-header-actions{width:auto;flex:0 0 auto;justify-content:flex-end}
  .tg-page-summary .tg-page-header-actions>*{flex:0 0 auto}
  /* v6.387.x — Modül ayarları çarkı: üst bar ile başlık arasında yalnız ~6px
     var; 12px yukarı almak dokunma alanının üstünü üst bardaki profil
     düğmesinin altına sokardı (ölçüldü). Alan en fazla 4px yükselir; ikon
     kutu içinde 4px daha yukarı oturur (alt iç boşluk) — hedef 44×44 kalır. */
  .tg-btn.tg-module-settings-action,.tg-page-header-actions .tg-btn.tg-module-settings-action,
  .tg-page-summary .tg-page-header-actions .tg-btn.tg-module-settings-action{margin-top:-4px;padding:0 0 8px}
  .tg-page-summary .tg-summary-chips{gap:5px;margin-top:6px}
  .tg-page-summary .tg-summary-chip{padding:2px 8px;font-size:10.5px}
  /* Dar ekranda yardım/ikincil aksiyon daha da küçülür ki başlık ve
     açıklama sütunu nefes alsın (metin DEĞİŞMEZ, yalnız ölçek). */
  .tg-page-summary .help-contextual-link{padding:3px 8px;font-size:10px;gap:4px}
  .tg-page-summary .help-contextual-link svg{width:12px;height:12px}
  .tg-page-summary .tg-page-header-actions .tg-btn{padding:3px 9px;font-size:10px}
  /* İki aksiyonlu sayfalarda (ör. Turnuva Formatı: Gelişmiş + Yardım)
     aksiyonlar KENDİ sütununda alt alta iner; başlık sütunu asla
     sıfırlanmaz — turnuva adı ve açıklama görünür kalır. */
  .tg-page-summary .tg-page-header-copy{flex:1 1 45%;min-width:0}
  .tg-page-summary .tg-page-header-actions{flex:0 1 auto;max-width:55%;flex-wrap:wrap;align-items:flex-end}
  .tg-form-actions{display:grid;grid-template-columns:1fr}
  .tg-input,.tg-select,.tg-textarea{font-size:var(--tg-input-font-mobile)}
  /*
   * KOMPAKT VARYANT DAR EKRANDA ETKİSİZDİR (Wave 3B kararı).
   *
   * Yoğunluk masaüstünün işidir. Dar ekranda kontrol 44px'in ve 16px'in
   * altına İNEMEZ: 16px altı bir girdiye odaklanınca iOS sayfayı
   * yakınlaştırır ve kullanıcı düzeni kaybeder — Wave 3'te ölçülen
   * gerçek risk buydu. `-sm` modifier'ı burada tabanı geri alır, ayrı
   * bir mobil sınıf gerektirmez.
   */
  .tg-input-sm,.tg-select-sm{min-height:var(--tg-control-height);padding:10px 12px;font-size:var(--tg-input-font-mobile)}
  .tg-textarea-sm{padding:10px 12px;font-size:var(--tg-input-font-mobile)}
  .tg-card{padding:var(--tg-space-3);border-radius:var(--tg-radius-md)}
  /* Bölümlü kartın dolgusu BÖLMELERİNDEDİR. Yukarıdaki mobil kural
     `.tg-card-sectioned{padding:0}` ile aynı özgüllükte ve dosyada ondan
     SONRA geldiği için dar ekranda kartı yeniden dolduruyordu: gövde
     iki kez içeri giriyor, başlık ayracı kenara ulaşamıyordu (gerçek
     tarayıcı ölçümü, 390px). Sıfırlama burada TEKRARLANIR. */
  .tg-card-sectioned{padding:0}
  .tg-card-head,.tg-card-foot{padding:var(--tg-space-3)}
  .tg-card-body{padding:var(--tg-space-3)}
  /* Yoğun varyantın dar ekran ölçüsü de platformun bugünkü değeridir
     (61px kutu, 12px dolgu, 12px başlık — platform-admin.css'ten birebir). */
  .tg-card-compact>.tg-card-head{min-height:61px;padding:12px}
  .tg-card-compact>.tg-card-head h2,.tg-card-compact>.tg-card-head h3{font-size:12px}
  /* Menü mobilde tetikleyicinin altında tam genişlik açılır; sağa
     hizalı dar panel dar ekranda taşardı. */
  .tg-export-menu{display:block}
  .tg-export-menu-panel{left:0;right:0;min-width:0;max-width:none}
}
/* Platform/hesap kabuğu (Bootstrap): mobil form kontrolleri ≥16px, ≥44px.
   Bootstrap'ın kendi eşiği (767.98) kullanılır; modül CSS'lerindeki
   (0,1,1) özgüllüklü 12–13px kuralları (0,1,2) ile ezilir, !important yok. */
@media (max-width: 767.98px) {
  body.platform-body input:not([type="checkbox"]):not([type="radio"]):not([type="hidden"]):not([type="range"]),
  body.platform-body select,
  body.platform-body textarea{font-size:var(--tg-input-font-mobile);min-height:var(--tg-control-height)}
  /* Wave 2: buton satırı KALDIRILDI. Platform aksiyonları artık canonical
     `.tg-btn` ailesindedir ve dokunma hedefini bu dosyanın yukarısındaki
     canonical banttan alır — kabuğa özel ikinci bir buton kuralı yok. */
}

/* ═══ TURNUVAGO CANONICAL TABS (PD-59) — PRESENTATION ONLY ═════════
   Üst seviye sekmeli navigasyonlar ortak bir segmented/tab stili kullanır:
   tek kapsayıcı yüzey (`.tg-tabbar`) içinde aktif sekme yükseltilmiş kart
   gibi, pasif sekmeler sade görünür. Yalnız gerçek bölüm/alt sayfa
   navigasyonunda kullanılır; filtre, durum, CTA ve seçim kontrolü yerine
   KULLANILMAZ. Active state adı (`is-active` / `active`), ARIA/JS ve panel
   davranışı kullanan sayfanın kendi sözleşmesidir — burada yalnız görünüm.
   Eşit genişlik: 2–4 sekme %'ye bölünür (`flex:1 1 0`), metin sığmazsa
   `min-width:max-content` ile sekme küçülmez, çubuk yatay kayar; 5+
   sekmede eşitlik zorlanmaz (`flex:0 0 auto`). Semantik (kırmızı/yeşil)
   ya da bölüm aksan renkleri aktif sekmede KULLANILMAZ. */
.tg-tabbar{display:flex;align-items:stretch;gap:0;box-sizing:border-box;max-width:100%;
  height:var(--tg-tabbar-height);margin:0 0 var(--tg-tab-section-gap);padding:2px;
  border:0;border-radius:var(--tg-tabbar-radius);background:var(--tg-tabbar-bg);
  box-shadow:inset 0 0 0 1px var(--tg-tabbar-border);overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}
/* 1px çizgi GERÇEK kenarlık değil içe halkadır: kaydırılan çubuk çocuklarını
   dolgu kutusunda kırpar; gerçek kenarlıkla sekmenin dokunma alanı 42px'e
   düşerdi. Görünüm aynıdır (1px çizgi + 1px boşluk + 40px sekme = 44px). */
.tg-tabbar::-webkit-scrollbar{display:none}
/* Başlık/açıklamadan sonra gelen çubuk 16px aralıkla ayrılır (blok akışta
   başlığın kendi alt boşluğuyla çöker → tam 16px). */
.tg-tabbar:not(:first-child){margin-top:var(--tg-tab-section-gap)}
.tg-tabbar>.tg-canonical-tab{position:relative;display:inline-flex;align-items:center;justify-content:center;
  flex:1 1 0;min-width:max-content;box-sizing:border-box;height:var(--tg-tab-height);min-height:var(--tg-tab-height);margin:auto 0;
  padding:0 var(--tg-tab-padding-x);border:none;border-radius:var(--tg-tab-radius);background:transparent;
  box-shadow:none;color:var(--tg-tab-text);font-size:var(--tg-tab-font-size);font-weight:600;line-height:1.2;
  white-space:nowrap;text-decoration:none;cursor:pointer}
/* Dokunma hedefi: görsel sekme 40px, tıklanabilir alan çubuğun tam 44px
   yüksekliği (şeffaf, bağlantının kendisine ait → tıklama/odak aynı öğede). */
.tg-tabbar>.tg-canonical-tab::before{content:"";position:absolute;left:0;right:0;
  top:calc((var(--tg-tab-height) - var(--tg-tabbar-height)) / 2);bottom:calc((var(--tg-tab-height) - var(--tg-tabbar-height)) / 2)}
.tg-tabbar:has(>.tg-canonical-tab:nth-child(5))>.tg-canonical-tab{flex:0 0 auto}
/* SEKME-TEMA-YONETIMI (2026-10-30) — Seçili sekme: Tema Yönetimi → Sekmeler'deki
   görünümün (Yükseltilmiş · Dolgulu · Hap · Alt çizgili · Üst çizgili · Çerçeveli)
   TEK bildirimi. Görünümler ayrı sistem değil, aynı katmanların farklı token
   değerleridir; kullanılmayan katman `transparent`:
     arka plan  = seçili zemin + (Alt / Üst çizgili) iç dolgu genişliğinde 3px çizgi
                  (köşe yuvarlaklığını izlemez; konum token'dan);
     gölge      = 1px iç kenar (Yükseltilmiş) + 2px iç çerçeve (Çerçeveli) +
                  kart gölgesi (Yükseltilmiş) — hepsi İÇE / dışa taşmadan, 40px kutu
                  ve 44px dokunma alanı değişmez.
   Renkler yalnız `--tg-tab*` token'larındadır (global marka / yüzey token'ı
   okunmaz → turnuva paleti etkilemez, önizleme kabında satır içi token'lar doğru
   çözülür). SUPERSEDED: beyaz yüzey + %32 marka kenarı + `--tg-brand-primary` metin
   (PD-75). Takım masaüstü kopyası: app.css `.team-detail-layout.is-players-active`. */
.tg-tabbar>.tg-canonical-tab:is(.is-active,.active){border:none;
  background:linear-gradient(var(--tg-tab-active-line),var(--tg-tab-active-line)) center var(--tg-tab-active-line-position)/calc(100% - 2 * var(--tg-tab-padding-x)) var(--tg-tab-active-line-width) no-repeat,var(--tg-tab-active-bg);
  box-shadow:inset 0 0 0 1px var(--tg-tab-active-border),inset 0 0 0 2px var(--tg-tab-active-border-strong),0 4px 14px var(--tg-tab-active-elevation);
  color:var(--tg-tab-active-text);font-weight:var(--tg-font-weight-bold)}
@media (hover:hover){
  .tg-tabbar>.tg-canonical-tab:not(.is-active):not(.active):not([aria-disabled="true"]):hover{
    background:var(--tg-tab-hover-bg);color:var(--tg-tab-hover-text)}
}
/* Kapsayıcı dar iç boşluk taşıdığı ve yatay kaydırdığı için halka İÇE çizilir (kırpılmaz).
   Odak rengi zemine göre türetilir (≥ 3 : 1; ortak odak rengi yetmezse açık / koyu). */
.tg-tabbar>.tg-canonical-tab:focus-visible{outline:2px solid var(--tg-tab-focus);outline-offset:-2px}
.tg-tabbar>.tg-canonical-tab:is(.is-active,.active):focus-visible{outline-color:var(--tg-tab-active-focus)}
/* ANA-ALT-SEKME-AYRIMI (2026-10-30) — ALT SEVİYE: `.tg-tabbar.tg-tabbar-sub` AÇIK işarettir
   (DOM'da iç içe olmaya bakan seçici yok). Bir sayfanın içinde aşama / içerik türü seçen gezinme:
   Fikstür ve Puan Durumu aşamaları, İstatistikler Takım / Oyuncu (yönetim + public). Ana gezinmeyle
   aynı ağırlıkta olmaz: ortak şerit YOK (çubuk şeffaf; yalnız Alt çizgili'de ince iz çizgisi),
   seçili sekmede hafif vurgu + belirgin seçim işareti. Yukarıdaki kurallar aynen geçerlidir;
   yalnız `--tg-tab*` token'ları seçilen tasarımın alt karşılığına (`--tg-subtab-*`,
   theme_tab_tokens()) bağlanır. 44px çubuk / dokunma alanı, yatay kaydırma, yazı boyutu, yatay
   iç boşluk, odak ve seçili bildirimi DEĞİŞMEZ; yazı opaklıkla soldurulmaz.
   ISTATISTIK-KAPSAM-ALT-SEKME-INCELTME (2026-10-30): GÖRÜNEN sekme 32px (`--tg-subtab-height`,
   ana 40px), seçili çizgi 2px; sekme 44px çubukta ortalanır, şeffaf `::before` üst / alt 6px uzanarak
   dokunma alanını çubuğun iç boşluğu dahil 44px'te tutar (çubuk taşanı kırpmaz). Alt çizgili'nin ince iz
   çizgisi 32px sekmenin alt kenarına hizalı arka plan çizgisidir (44px çubuğun en altında asılı kalmaz).
   SUPERSEDED: alt seviyede 40px görsel sekme ve çubuk altında `box-shadow` iz çizgisi. */
.tg-tabbar.tg-tabbar-sub{border-radius:0;box-shadow:none;
  background:linear-gradient(var(--tg-subtab-track),var(--tg-subtab-track)) 0 calc((var(--tg-tabbar-height) + var(--tg-subtab-height)) / 2 - 1px)/100% 1px no-repeat transparent;
  --tg-tab-height:var(--tg-subtab-height);--tg-tab-active-line-width:var(--tg-subtab-active-line-width);
  --tg-tab-radius:var(--tg-subtab-radius);--tg-tab-text:var(--tg-subtab-text);
  --tg-tab-hover-bg:var(--tg-subtab-hover-bg);--tg-tab-hover-text:var(--tg-subtab-hover-text);
  --tg-tab-active-bg:var(--tg-subtab-active-bg);--tg-tab-active-text:var(--tg-subtab-active-text);
  --tg-tab-active-border:var(--tg-subtab-active-border);--tg-tab-active-border-strong:transparent;
  --tg-tab-active-line:var(--tg-subtab-active-line);--tg-tab-active-line-position:var(--tg-subtab-active-line-position);
  --tg-tab-active-elevation:var(--tg-subtab-active-elevation);
  --tg-tab-focus:var(--tg-subtab-focus);--tg-tab-active-focus:var(--tg-subtab-active-focus)}
/* Alt seviyede sekmeler içerik genişliğindedir (2–4 sekmede eşit bölme YOK): iki aşamalı çubukta seçili
   kart sayfa genişliğinin yarısına yayılıp ana gezinmeden ağır görünmesin (tarayıcı ölçümü 2026-10-30:
   1280 px'te 545 px'lik seçili kart). Görünen 32 / dokunma 44 px; yatay kaydırma aynı. */
.tg-tabbar.tg-tabbar-sub>.tg-canonical-tab{flex:0 0 auto}
/* ═══ HELP CENTER — BAĞLAMSAL YARDIM BAĞLANTISI ══════════════════
   Help Center V1. Uygulama ekranlarına (Turnuva Formatı, Kura…) konan
   "Bu sayfa hakkında yardım" bağlantısı. Ortak bileşen olduğu için
   help-center.css'te DEĞİL burada durur: o dosya yalnız herkese açık
   Yardım Merkezi sayfasında yüklenir, bu bağlantı ise uygulama
   kabuklarında basılır. Dokunma hedefi ve odak halkası DS-010'a uyar. */
.help-contextual-link{display:inline-flex;align-items:center;gap:6px;min-height:36px;color:var(--tg-action-primary);text-decoration:none;font-size:var(--tg-font-sm);font-weight:var(--tg-font-weight-bold)}
.help-contextual-link:hover{text-decoration:underline}
.help-contextual-link:focus-visible{outline:3px solid var(--tg-focus-ring);outline-offset:2px;border-radius:var(--tg-radius-sm)}
.help-contextual-link svg{flex:0 0 auto}

/*
 * v6.274.5 (UX-REV4 §5) — TAKIM GÖRSEL KİMLİĞİ, ORTAK TABAN.
 * Fikstür ve Kura AYNI markup'ı üretir (app/ui_helpers.php ·
 * team_identity_html); ölçü/yuvarlaklık her yüzeyin KENDİ sınıfındadır.
 * Burada yalnız, gerçek logo yerine <span> çizildiğinde geometrinin
 * korunmasını sağlayan taban durur.
 */
.tg-team-identity{flex:0 0 auto}
.tg-team-identity.is-colors,.tg-team-identity.is-empty{display:block}

/*
 * 2026-10-19 — YERLEŞİK TURNUVAGO İŞARETİ (şeffaf yatay TGO). Yalnız
 * `turnuvago_brand_markup()` çıktısındaki `.tg-brand-mark--tgo` hedeflenir;
 * platform / turnuva özel logosu bu sınıfı TAŞIMAZ, etkilenmez. İşaret eski
 * kare kupa yuvasına sıkıştırılmaz: yükseklik sabit, genişlik oranla gelir.
 * 2026-11-01 (TGO-RENK-ZEMIN, kullanıcı kararı): işaret HER yüzeyde zeminsizdir.
 * Açık yüzeyler (Platform Yönetimi, Yardım, landing, plakalı giriş başlığı, kod
 * kullanma) açık zemin varyantını (lacivert T) alır, koyu yüzeyler (çekmece,
 * giriş ailesi başlığı) beyaz T'li varyantı — seçim `turnuvago_brand_markup()`
 * çağıranındadır. Önceki "açık yüzeyde `--tg-brand-primary` sade zemin" SUPERSEDED.
 * `!important` yalnız yüzey dosyalarındaki eski kare-yuva ölçülerini (shell.css
 * `.tg-brand-mark img{…!important}` dahil) aşmak için.
 */
.tg-brand-mark.tg-brand-mark--tgo{display:inline-flex!important;width:auto!important;height:auto!important;flex:0 0 auto!important;
  align-items:center;justify-content:center}
.tg-brand-mark.tg-brand-mark--tgo picture{display:block!important;width:auto!important;height:auto!important}
/* İkinci seçici: landing.css `.lp-brand.tg-brand-lockup .tg-brand-mark img{width/height:100%!important}`
   aynı özgüllükte ve sonra yüklendiği için yükseklik 39px'e şişiyordu (gerçek tarayıcıda ölçüldü). */
.tg-brand-mark.tg-brand-mark--tgo img,.tg-brand-lockup .tg-brand-mark.tg-brand-mark--tgo picture img{display:block!important;width:auto!important;
  height:var(--tg-brand-tgo-height,22px)!important;max-width:none!important;max-height:none!important;object-fit:contain!important;filter:none!important}
/* "TurnuvaGo" yazısındaki "Go": temadan bağımsız marka turuncusu (logodaki GO). Tek kural, her
   sayfada yüklenen bu dosyada — Yardım Merkezi ve kod kullanma sayfası shell.css yüklemediği için
   "Go" önceden bağlantı / metin rengini miras alıyordu; çekmece ve Platform Yönetimi tema
   vurgusunu okuyordu. Yüzey dosyaları "Go" rengini ayrıca TANIMLAMAZ. */
.tg-brand-copy.tg-brand-copy--tgo strong>span{color:var(--tg-brand-tgo-accent)}
@media (max-width:620px){
  .tg-brand-mark.tg-brand-mark--tgo img,.tg-brand-lockup .tg-brand-mark.tg-brand-mark--tgo picture img{height:var(--tg-brand-tgo-height-compact,18px)!important}}

/*
 * v6.394.166 — PLATFORM ANA SAYFA KAPAĞI (UX_ARCHITECTURE §15.55, UXA-274).
 * `.tg-hero` kabuğunun (Üye Ana Sayfası karşılama alanı + turnuva kimlik kartı)
 * TAM ALAN arka planı; markup `branding_cover_markup()` (app/branding_helpers.php).
 * Kurallar BURADADIR çünkü Marka Yönetimi önizlemesi (platform kabuğu app.css
 * yüklemez) gerçek sayfayla AYNI kırpma ve katmanı kullanmalıdır.
 *   - Görsel alanı doldurur, oranı bozulmaz (`object-fit: cover`, ortadan);
 *     kart yüksekliği içerikle değiştiği için kesit render anında belirlenir.
 *   - Katman `.tg-hero`'nun `isolation` yığınında z −1: başlık, bilgiler, logo
 *     ve düğmeler gerçek arayüz öğeleri olarak ÜSTTE kalır; düzene yer tutmaz,
 *     kart yüksekliği değişmez.
 *   - Karartma YOK (v6.394.168, §15.55 md. 3): görsel masaüstünde ve dar kartta
 *     olduğu gibi görünür; `.tg-hero-cover-shade` öğesi markup'ta kalır, zemini
 *     `none`. Kapaklı alanda kart metni beyazdır; okunabilirlik yüklenen görsele
 *     bağlıdır ve her görsel için garanti edilmez — yerine gizli bir katman eklenmez.
 *   - Kapak yokken bu sınıflar hiç basılmaz; yerleşik gradyan + dekor aynen.
 */
/* Kapaklı alan değişkenleri (Marka Yönetimi önizleme sahnesine de, kapak görünürken, uygulanır):
 * kart metni beyaz; `--tg-hero-cover-tint` (marka renginin %30 tonu + siyah) kapak zemini DEĞİLDİR,
 * yalnız kapaklı alandaki aksiyon hapları kullanır (dashboard-overview.css Paylaş,
 * platform-branding-admin.css önizleme örneği). v6.394.167'deki ≥ 4,5 : 1 ölçümü kaldırılan
 * karartmalı görünüme aittir; bu görünüme aktarılmaz. Kapaksız görünüm değişmez. */
.tg-hero.tg-hero--cover,.tg-hero-cover,[data-cover-stage]:has(>.tg-hero-cover:not([hidden])){--tg-hero-cover-tint:color-mix(in srgb,var(--tg-brand-primary) 30%,black)}
.tg-hero.tg-hero--cover,[data-cover-stage]:has(>.tg-hero-cover:not([hidden])){--tg-hero-decor-reserve:0px;--tg-brand-primary-text:white;--tg-hero-text:white}
.tg-hero-cover{position:absolute;inset:0;z-index:-1;display:block;overflow:hidden;border-radius:inherit;pointer-events:none}
.tg-hero-cover[hidden]{display:none}
.tg-hero-cover .tg-hero-cover-img{position:absolute;inset:0;display:block;width:100%;height:100%;max-width:none;max-height:none;
  object-fit:cover;object-position:50% 50%}
.tg-hero-cover .tg-hero-cover-shade{position:absolute;inset:0;display:block;background:none}
