:root {
  /* Task225 — GÜVENLİ ALAN (çentik / ev göstergesi / yan kulaklıklar).
     Değerler tek yerden okunur: hem tüm kullanımlar tutarlı olur hem de headless
     doğrulamada gerçek cihaz taklit edilebilir (`env()` masaüstünde hep 0'dır).
     DİKKAT: `viewport-fit=cover` olmadan iOS bu değerleri SIFIR döndürür — etiket
     index/legal/admin sayfalarında var. */
  /* Task229 — İZLEME listesi şeridi (favori altın; bu farklı olsun — kullanıcı isteği) */
  --watch: #a06cf0;
  /* Task431 — HAREKET SÖZLÜĞÜ (Faz 1). Ton SAKİN (kullanıcı kararı): kısa süreler,
     yumuşak çıkış. Yeni hareket yazan her yer bu değerleri okur; bileşene sabit süre
     yazılmaz. Erişilebilirlik kapısı aşağıda TEK yerde. */
  --dur-tap: 120ms; /* dokunma geri bildirimi */
  --dur-sm: 200ms; /* küçük giriş/çıkış (çip, rozet, açılır) */
  --dur-md: 560ms; /* panel/pop-up girişi — kullanıcı "az daha uzat" dedi */
  --dur-view: 560ms; /* menüden görünüm değişimi (kullanıcı: net hissedilmiyor) */
  --dur-pane: 520ms; /* sekme/bölme değişimi — kullanıcı iki kez uzatmak istedi */
  --dur-exit: 340ms; /* kapanış: girişten hızlı ama görülür */
  --dur-rip: 450ms; /* dokunma halkası: kullanıcı iki kez "daha belirgin" dedi */
  --ease-out: cubic-bezier(0.2, 0.8, 0.2, 1); /* içeri gelen */
  --ease-in: cubic-bezier(0.4, 0, 1, 1); /* dışarı giden */
  --ease-std: cubic-bezier(0.4, 0, 0.2, 1); /* yerinde değişen */
  --vvb: 0px; /* Task416 — görünür alan ile düzen alanı arasındaki alt fark (JS yazar) */
  --sat: env(safe-area-inset-top, 0px);
  --sab: env(safe-area-inset-bottom, 0px);
  --sal: env(safe-area-inset-left, 0px);
  --sar: env(safe-area-inset-right, 0px);
  --bg: #07140e;
  --bg2: #0b1f17;
  --panel: #0f2a1f;
  --panel2: #123528;
  --line: #1d4434;
  --line2: #275a45;
  --text: #eaf5ef;
  --muted: #8fb3a3;
  --green: #18c07a;
  --green-d: #0f9a60;
  --gold: #f4c542;
  --gold-d: #c99a1e;
  --red: #ff5a5f;
  --accent: #19e08a;
  /* Task514 (kullanıcı: "açık temada seçili butonların yazısı siyah kalıyor, beyaz
     olanlar daha güzel duruyor") — VURGU ZEMİNİNİN ÜSTÜNDEKİ YAZI tek yerden gelir.
     Koyu temalarda accent parlak yeşil: siyah yazı doğru. Açık temada accent doygun
     mavi: yazı zemin rengine (beyaza yakın) döner. Mono'da accent beyaz: siyah kalır. */
  --on-accent: #04140c;
  /* Task514 rev (kullanıcı: "anasayfadaki butonların mavisi güzel ama başka ekranlarda
     daha koyu maviler var") — DOLGU tek yerden: koyu temalarda degrade, açık temada
     anasayfadaki düz aksan rengi (degrade açık temada koyu duruyordu). */
  --accent-fill: linear-gradient(180deg, var(--green), var(--green-d));
  --accent-fill-h: linear-gradient(90deg, var(--green-d), var(--accent));
  /* Altın rozetlerde yazı: kullanıcı "gri gibi daha soft" istedi (kömür siyahı sertti) */
  --on-gold: #4a4436;
  --shadow: 0 10px 30px rgba(0, 0, 0, 0.45);
  --radius: 16px;
  /* Temalanan yüzeyler (varsayılan = koyu yeşil) */
  --glow1: #11422f;
  --glow2: #0c2c1f;
  --topbar-bg: rgba(7, 20, 14, 0.82);
  --input-bg: #08180f;
  --input-text: #fff;
  --title-a: #fff;
  --title-b: #b9f3d6;
  --pts: #fff;
  --head-a: #14422f; /* grup başlığı degrade */
  --head-b: #0e2c20;
  --chip-bg: #0a1f16; /* boş bayrak kutusu / sıra rozeti */
  --fav-name: #ffd9dc; /* favori satırı takım adı */
  --fav: #ff5a5f; /* favori maç vurgusu (temaya uyumlu) */
  --fav-bg: rgba(255, 90, 95, 0.16);
  --fav-glow: rgba(255, 90, 95, 0.32);
}

/* ===== CAM (glass) TEMASI — Task563 =====================================================
   Kullanıcı: "statslook renklerine benzeyen ama dark ile light arası, bir de LIQUID GLASS
   premium tema." Anlaşılan tanım: cam bir MALZEMEDİR (arkasını bulanıklaştırıp
   doygunlaştırır), derinlik gölgeyle değil IŞIKLA gelir (üstte ince parlak kenar), yüzey
   kaydırmada tonlanır, okunabilirlik her şeyin önündedir.

   Palet statslook ölçümünden (docs/design/statslook-analiz.md): marka `#2d5bff → #00c2d1`,
   saç teli kenarlık, ayrı veri paleti. Zemin KOYU DEĞİL: arduvaz orta ton (#1b2130) —
   kullanıcının istediği "dark ile light arası".

   Cam YALNIZ çerçeve ve panellerde (banner, şerit, alt menü, pop-up, panel başlığı).
   Maç satırları camlaşmaz: uzun listede hem okunabilirlik hem akıcılık bozulur. */
:root[data-theme='glass'] {
  /* Task563 rev (kullanıcı: "zemin ve ağırlıklı renk çok soluk geldi, statslook'tan
     esinlen") — ilk palet gri-arduvazdı (#232b3d) ve doygunluğu düşüktü. statslook'un
     ÖLÇÜLEN zeminleri çok daha derin ve MAVİ: #070b16 / #0f1626 / #1a2338. Buradaki taban
     o aileye çekildi ama tamamen siyaha inilmedi (kullanıcı "dark ile light arası" dedi):
     lacivert-mavi, doygun, camın altında renk veren bir zemin.

     Task564 (kullanıcı: "pop-up'lardan maç detayının background'ını beğendim; tema ve
     panel background'larını bu rengin etrafında döndür") — maç detayı yüzeyinin EKRANDAN
     ÖLÇÜLEN baskın rengi #263b63 = hsl(219 44% 27%). Bütün basamaklar o tonun adımları.

     Task565 (kullanıcı: "maç kartları ile background rengi sanki yer değiştirmeli; sayfanın
     asıl background'u daha AÇIK, kartlar ondan bir tık daha KOYU olmalı") — ilişki tersine
     çevrildi: zemin beğenilen tonun kendisi, kartlar bir basamak altı. Cam malzemenin
     beyaz dolgusu da bu yüzden KOYU dolguya döndü (`--glass-d`) — beyazla kart zeminden
     açık kalıyordu. Ölçüm: zemin/kart farkı 1.37, metin 9.5 (zemin) / 13.0 (kart). */
  --bg: #2b4169;
  --bg2: #25385b;
  --panel: #1d2c49;
  --panel2: #24375c;
  --line: #3c5686;
  --line2: #4a6aa5;
  --text: #f4f7ff;
  --muted: #a6b2c9;
  --green: #00c2d1;
  --green-d: #0090a2;
  --gold: #eab308;
  --gold-d: #b8890a;
  --red: #f4456b;
  --accent: #4d78ff;
  --on-accent: #071227;
  --accent-fill: linear-gradient(120deg, #2d5bff, #00c2d1);
  --accent-fill-h: linear-gradient(120deg, #4d78ff, #22d3e0);
  --on-gold: #3a3212;
  /* Gölge yerine IŞIK: cam kenarında ince parlaklık + çok yumuşak derinlik */
  --shadow: 0 18px 40px rgba(6, 10, 22, 0.38);
  --radius: 18px;
  --glow1: #2d5bff33;
  --glow2: #00c2d122;
  --topbar-bg: rgba(43, 65, 105, 0.55);
  --input-bg: rgba(0, 0, 0, 0.16);
  --input-text: #eef2fb;
  --title-a: #ffffff;
  --title-b: #9fd7ff;
  --pts: #ffffff;
  --head-a: rgba(255, 255, 255, 0.08);
  --head-b: rgba(255, 255, 255, 0.03);
  --chip-bg: rgba(255, 255, 255, 0.08);
  --fav-name: #ffd9dc;
  --fav: #f4456b;
  --fav-bg: rgba(244, 69, 107, 0.16);
  --fav-glow: rgba(244, 69, 107, 0.3);
  --watch: #a06cf0;
  /* Cam malzeme değişkenleri: tek yerden ayarlanır */
  --glass-blur: 18px;
  --glass-sat: 165%;
  --glass-a: 0.1; /* cam yüzeyin beyaz payı (kenar ışığı ve denetimlerde kullanılır) */
  /* Task565 — yüzey dolgusu KOYU: zemin açıldı, kartlar ondan bir tık koyu duracak */
  --glass-d: 0.16;
  --glass-edge: rgba(255, 255, 255, 0.18);
  --glass-sheen: rgba(255, 255, 255, 0.42);
  /* Ton: takım rengi varsa JS `--glass-tint`i yazar; yoksa marka mavisi */
  --glass-tint: rgba(45, 91, 255, 0.28);
}

/* --- Cam malzeme (yalnız `glass` temasında) ------------------------------------------
   Kural: cam ÇERÇEVEDE ve PANELDE; satırda değil. Her yüzey üç katmandan oluşur:
   1) `backdrop-filter` ile arkasını bulanıklaştırıp doygunlaştırır,
   2) çok ince beyaz gradyan (yüzeyin kendi ışığı) + takım tonundan gelen renk payı,
   3) üst kenarda 1 px iç parlaklık (specular) ve alt kenarda koyu çizgi.
   Bunlar TEK yerde tanımlanır; yüzeyler `--glass-*` değişkenleriyle ayarlanır. */
[data-theme='glass'] .topbar.banner,
[data-theme='glass'] #competition-nav,
[data-theme='glass'] .bottom-nav,
[data-theme='glass'] .modal-card,
[data-theme='glass'] .page-view,
[data-theme='glass'] .live-cards:not(.lb-empty),
[data-theme='glass'] .gmatches,
[data-theme='glass'] .skorio-promo,
[data-theme='glass'] .pg-sw-btn,
[data-theme='glass'] .cal-head {
  /* Yüzey NÖTR kalır (beyaz cam); takım rengi yalnız ÜST KENARDAN sızan bir ışık olarak
     girer. İlk denemede ton yüzeyin tamamına verilmişti: sarı takımda cam zeytin yeşiline
     dönüyordu (ölçüldü, kullanıcı da "fazla renkli olabilir" demişti). */
  background:
    radial-gradient(120% 80% at 50% -20%, var(--glass-tint), transparent 60%),
    linear-gradient(
      180deg,
      rgba(0, 0, 0, calc(var(--glass-d) - 0.05)),
      rgba(0, 0, 0, calc(var(--glass-d) + 0.05))
    );
  backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-sat));
  -webkit-backdrop-filter: blur(var(--glass-blur)) saturate(var(--glass-sat));
  border: 1px solid var(--glass-edge);
  box-shadow:
    inset 0 1px 0 var(--glass-sheen),
    inset 0 -1px 0 rgba(0, 0, 0, 0.22),
    var(--shadow);
}
/* Şerit: kenarlık yerine yalnız alt çizgi (satır ritmi bozulmasın) */
[data-theme='glass'] .cal-head {
  border: 0;
  border-bottom: 1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 var(--glass-sheen);
}
/* Panel başlığı camlaşmaz: ana sayfada bant zaten çerçevesiz (Task147) — yalnız yazı ve
   ince çizgi kalır; cam tabaka LİSTENİN kendisindedir. Yapışkan başlığın opak zemini
   (Task533) camda pencereyi kapatıyordu: burada da saydamlaşır, altından liste geçer. */
[data-theme='glass'] main#content #live-section > .group-head,
[data-theme='glass'] main#content #fav-section > .group-head,
[data-theme='glass'] main#content #watch-section > .group-head,
[data-theme='glass'] main#content #today-section > .group-head,
[data-theme='glass'] main#content .group-head {
  /* Yapışkan başlık: altından liste geçerken yazı kaybolmasın diye HAFİF cam (perde),
     ama panel gibi kenarlıklı bir kutu değil. */
  background: linear-gradient(180deg, rgba(0, 0, 0, 0.12), rgba(0, 0, 0, 0.06));
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  border: 0;
  box-shadow: none;
}
/* Liste tabakası: satırlar değil KAPSAYICI cam — tek katman, akıcı kaydırma. */
[data-theme='glass'] .live-cards:not(.lb-empty),
[data-theme='glass'] .gmatches {
  border-radius: var(--radius);
  padding: 4px 6px;
}
/* Task566 (kullanıcı: "panellerin en altındaki düz çizgi sondaki maçın çizgisiyle
   çakışıyor; bu çizgiyi oradan alalım, panel başlığının altına koyalım — sadece yeni
   temada") — ölçüldü: panelin alt kenarı (cam saç teli) ile son satırın ayracı 1px arayla
   iki çizgi oluyordu. Alt kenar kalkar, aynı çizgi PANEL BAŞLIĞININ altına geçer: bant
   nerede başlıyor bilgisi orada zaten aranıyor. */
[data-theme='glass'] .live-cards:not(.lb-empty),
[data-theme='glass'] .gmatches {
  border-bottom: 0;
}
/* Task566 rev (kullanıcı: "en alttan yukarıya taşıdığın ince çizgileri oradan da
   kaldıralım") — başlığın altına konan çizgi de kalktı: bant başlığı zaten harf aralığı ve
   rengiyle ayrılıyor, camda ek çizgi gürültü yapıyordu. */
/* Panelin İÇİNDEKİ maç satırları CAM DEĞİL: uzun listede okunabilirlik ve akıcılık. */
[data-theme='glass'] .live-card,
[data-theme='glass'] .gmatch {
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
/* Task563 rev-2 (kullanıcı: "butonlara bayıldım ama liglerde ve ana sayfada hâlâ eskisi
   gibi görünen tab ve butonlar var") — ölçüldü: yalnız `.pg-sw-btn` camlaşmıştı; lig
   şeridi düğmeleri, sekmeler, hayalet düğmeler ve takvim okları düz kalıyordu. Orta boy
   DENETİMLERİN tamamı aynı cam kabuğu alır; satır içindeki küçük ikon düğmeleri (göz,
   paylaş, takvim, yıldız) SAYDAM kalır — her ikonun arkasına çip koymak listeyi
   gürültüye boğar. */
/* Task581 (kullanıcı: "lig ve hafta butonlarının üst ve alt çizgileri yokmuş, sayfa
   yüklenince çiziliyormuş gibi bir şey oluyor") — KÜÇÜK DENETİMLERDE BULANIKLIK YOK.
   Neden: `backdrop-filter` taşıyan 30 px'lik bir çip, arkasındaki içerik her
   değiştiğinde yeniden rasterleniyor; animasyon boyunca kenarları titriyor, animasyon
   bitince "beliriyor" gibi görünüyordu (kullanıcı iki ayrı biçimde bildirdi). Cam hissi
   bulanıklıktan değil IŞIKTAN geliyor: saydam koyu dolgu + saç teli kenar + iç parlaklık.
   Büyük yüzeylerde (panel, pop-up, çerçeve) bulanıklık aynen duruyor. */
[data-theme='glass'] .day-btn,
[data-theme='glass'] .dt-tab,
[data-theme='glass'] .cal-btn,
[data-theme='glass'] .cal-nav,
[data-theme='glass'] .btn.btn-ghost,
[data-theme='glass'] .lg-btn,
[data-theme='glass'] .pick-btn,
[data-theme='glass'] .st-scope,
[data-theme='glass'] .st-cat {
  /* Task583 (kullanıcı ekran görüntüsüyle: "sade ve takvim butonuna basıldığında lig ve
     hafta butonu çizgileri kaybolup tekrar görünüyor") — kalan sebep SAYDAMLIKTI: kenar
     beyaz %18 ve dolgu %72 saydam olduğu için görünen kontrast ARKADAKİ içeriğe bağlıydı;
     geçiş sırasında arkadaki şerit/satır kayınca çizgi sönüp geri geliyordu. Denetimler
     artık OPAK: taban `--bg2`, kenar `--line2`. Cam hissi üstteki ince ışıkla kalır. */
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.02)), var(--bg2);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border: 1px solid var(--line2);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22);
  color: var(--text);
}
/* Seçili denetim: marka gradyanı (statslook dili) — cam kabuk yerini ışığa bırakır */
[data-theme='glass'] .day-btn.active,
/* Lig sekmeleri kendi medya kuralında düz `--accent` yazıyor (özgüllük: 0,3,0) — camda
   marka gradyanı kazansın diye aynı bağlamda yazılır. */
[data-theme='glass'] .league-tabs .dt-tab.active,
[data-theme='glass'] .dt-tab.active,
[data-theme='glass'] .cal-btn.active,
[data-theme='glass'] .st-scope.active,
[data-theme='glass'] .st-cat.active,
[data-theme='glass'] .btn.btn-primary {
  background: var(--accent-fill);
  color: var(--on-accent);
  border-color: transparent;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.35),
    0 6px 18px rgba(45, 91, 255, 0.28);
}
/* Task582 — Görünüm panelindeki sürüm satırı: sessiz ama OKUNUR (alt bilgideki etiket
   Task170 kararıyla görünmez; sürümü doğrulamak isteyen buraya bakar). */
.set-ver {
  margin-top: 10px;
  text-align: center;
  font-size: 11px;
  letter-spacing: 0.3px;
  color: var(--muted);
  opacity: 0.75;
  user-select: text;
}

/* Task580 (kullanıcı: "görünüm menüsünden açılan pop-up'ta butonlar yeni temaya uyumlu
   değil") — dil çipleri, saat dilimi seçicisi ve tema düğmeleri de cam dile geçer; seçili
   olan marka gradyanına döner (uygulamanın geri kalanıyla aynı kural). */
[data-theme='glass'] .lang-chip,
[data-theme='glass'] .lang-select,
[data-theme='glass'] .theme-btn {
  /* Task581 — küçük denetimlerde bulanıklık yok (aynı ilke). */
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.025)),
    color-mix(in srgb, var(--bg2) 55%, transparent);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border: 1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18);
  color: var(--text);
}
[data-theme='glass'] .lang-chip.active,
[data-theme='glass'] .theme-btn.active {
  background: var(--accent-fill);
  color: var(--on-accent);
  border-color: transparent;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.35),
    0 6px 16px rgba(45, 91, 255, 0.28);
}
[data-theme='glass'] .theme-btn.active .ic {
  opacity: 1;
  color: var(--on-accent);
}

/* Task580 (kullanıcı: "karşılaştırma ekranlarında arama ve takım/oyuncu fotoğraflarının
   bulunduğu alanlar yeni temaya uyumlu değil") — sütun başlıkları (fotoğraf + ad) ve avatar
   halkası düz panel rengindeydi; kart içi ince cam dile geçer. Kapatma düğmesi de aynı. */
[data-theme='glass'] .cmp-cell.cmp-pl,
[data-theme='glass'] .tm-close {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.03));
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  border: 1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.16);
}
[data-theme='glass'] .cmp-av {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.04));
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  border: 2px solid var(--glass-edge);
}

/* Task576 (kullanıcı: "maç detayda kadro tabındaki butonlar ve oyuncuya tıklanınca gelen
   küçük pop-up'taki butonlar yeni temaya uygun değil") — kadro denetimleri (takım anahtarı,
   nitelik çipleri, ilk 11 / paylaş düğmeleri) ve oyuncu şeridi sekmeleri cam dili konuşur;
   seçili olan marka gradyanına döner. */
[data-theme='glass'] .lu-team-btn,
[data-theme='glass'] .lu-chip,
[data-theme='glass'] .lu-11,
[data-theme='glass'] .lu-share,
[data-theme='glass'] .pm-tab,
[data-theme='glass'] .pm-close {
  /* Task581 — küçük denetimlerde bulanıklık yok (kenar titremesi); ışık + saydam dolgu. */
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.025)),
    color-mix(in srgb, var(--bg2) 55%, transparent);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border: 1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18);
  color: var(--text);
}
/* Task589 (kullanıcı: "seçili takımda diziliş zor okunuyor") — `.lu-form` `--muted` gri
   kalıyordu; parlak gradyanın üstünde okunmuyordu. Seçilide diziliş de koyu mürekkep. */
[data-theme='glass'] .lu-team-btn.active .lu-form {
  color: var(--on-accent);
  opacity: 0.85;
}

[data-theme='glass'] .lu-team-btn.active,
[data-theme='glass'] .lu-chip.active,
[data-theme='glass'] .pm-tab.active {
  background: var(--accent-fill);
  color: var(--on-accent);
  border-color: transparent;
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.35),
    0 6px 16px rgba(45, 91, 255, 0.28);
}

/* Task571 (kullanıcı: "maç detay kartının background rengini biraz aç ve oyuncu kartı,
   takım kartı, karşılaştırma ve diğer TÜM pop-up'larda bu rengi kullan; opaklığını bir tık
   azalt, cam hissi biraz daha fazla olsun") — pop-up yüzeyi sayfadaki kartlardan AYRILIR:
   koyu dolgu yerine beyaz ışık dolgusu (bir tık açık), daha derin bulanıklık ve doygunluk.
   Tek kural: `.modal-card` bütün pop-up'ların gövdesi, `.page-view` takım/oyuncu kartı. */
/* rev (kullanıcı: "ben maç detayın background'ının rengini diğerlerine uygula dedim, sen
   diğerlerini maç detaya uyguladın") — DOĞRU YÖN: maç detayı pop-up'ı kendi haliyle kalır
   (beyaz ışık + karartılmış zeminin bulanığı); TABAN TON yalnız arkasında karartma OLMAYAN
   yüzeylere (kart sayfaları, oyuncu şeridi) verilir ki onlar da aynı renge otursun. */
[data-theme='glass'] .modal-card {
  background:
    radial-gradient(120% 80% at 50% -20%, var(--glass-tint), transparent 60%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.045));
  backdrop-filter: blur(26px) saturate(180%);
  -webkit-backdrop-filter: blur(26px) saturate(180%);
}
/* Task579 rev (kullanıcı: "maç detay pop-up'ının background'ını — SİYAH TONLU, hafif
   transparan, cam efektli — neden oyuncu ve takım kartına uygulayamıyorsun?") — çünkü
   pop-up'ın o tonu KENDİ KARARTMASINDAN geliyor: `.modal` zemini `rgba(0,0,0,0.6)`.
   Kart sayfalarının arkasında öyle bir karartma yok; aynı katman yüzeyin İÇİNE konur:
   beyaz ışık + siyah karartma + bulanıklık = pop-up ile aynı his. */
[data-theme='glass'] .page-view,
[data-theme='glass'] .pm-strip {
  background:
    radial-gradient(120% 80% at 50% -20%, var(--glass-tint), transparent 60%),
    linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.045)),
    rgba(0, 0, 0, 0.42);
  backdrop-filter: blur(26px) saturate(180%);
  -webkit-backdrop-filter: blur(26px) saturate(180%);
}
/* Skorinho sayfasının bölmeli sekmeleri kendi kuralıyla yazılmış (`#skorio-body`, 1,1,0) ve
   camın sekme kuralını eziyordu (kullanıcı: "Skorinho menüsünden girince gelen tabların
   yeni temaya uyumlu hale gelmesi lazım"). Aynı bağlamda cam dili yazılır. */
[data-theme='glass'] #skorio-body .dt-tabs {
  background: linear-gradient(180deg, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.18));
  backdrop-filter: blur(12px) saturate(150%);
  -webkit-backdrop-filter: blur(12px) saturate(150%);
  border: 1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.16);
}
[data-theme='glass'] #skorio-body .dt-tab.active {
  background: var(--accent-fill);
  color: var(--on-accent);
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.35),
    0 6px 16px rgba(45, 91, 255, 0.28);
}

/* Task569 (kullanıcı: "arama ve içinde veri gösterilen etiket kartlarında da gözü rahatsız
   etmeyecek bir glass ya da liquid efekt olmalı") — bu yüzeyler KART İÇİNDE durur; kart
   zaten koyu olduğu için buradaki cam İNCE BİR IŞIK: beyaz payı düşük gradyan + kısa
   bulanıklık + saç teli kenar. Ölçü bilinçli olarak panelden hafif: göz yormasın. */
[data-theme='glass'] .search-box,
[data-theme='glass'] .search-results,
[data-theme='glass'] .search-field,
[data-theme='glass'] .tp-row,
[data-theme='glass'] .pc-card,
[data-theme='glass'] .ss-card {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.07), rgba(255, 255, 255, 0.025));
  backdrop-filter: blur(10px) saturate(140%);
  -webkit-backdrop-filter: blur(10px) saturate(140%);
  border: 1px solid var(--glass-edge);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.16);
}
/* Arama YÜZEYLERİ sayfanın ÜSTÜNE düşüyor: cam saydamlığı burada okumayı bozuyordu
   (ölçüldü: sonuç listesinin altından e-posta doğrulama bandı okunuyordu). Beyaz ışık
   katmanı KOYU PANEL zemininin üstüne bindirilir — cam hissi kalır, metin okunur. */
[data-theme='glass'] .search-box,
[data-theme='glass'] .search-results,
[data-theme='glass'] .search-field {
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.03)),
    color-mix(in srgb, var(--panel) 92%, transparent);
}
[data-theme='glass'] .search-results {
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.16),
    var(--shadow);
}
/* Task569 (kullanıcı: "ligler seçilince görülen efekt aşağıdaki menüler seçiliyken de
   olsun") — seçili lig düğmesindeki marka gradyanı alt gezinmede de: aktif sekmenin
   ikonunun ARKASINDA gradyan hap. Üstteki ince çizgi camda kalkar (iki işaret gürültü). */
@media (max-width: 640px) {
  [data-theme='glass'] .tab-btn.active::before {
    display: none;
  }
  /* Task570 (kullanıcı: "menülerin yazıları seçili olduğunda renklenen yere teğet gibi
     görünüyor, biraz aşağıya alınabilir") — ölçüldü: hap 5–35px, etiket 33px'te başlıyordu.
     Camda ikon ile etiketin arası açılır ve hap bir tık yukarı/kısa olur. */
  [data-theme='glass'] .tab-btn {
    gap: 6px;
    padding-top: 6px;
  }
  [data-theme='glass'] .tab-btn.active::after {
    content: '';
    position: absolute;
    top: 3px;
    left: 50%;
    transform: translateX(-50%);
    width: 46px;
    height: 28px;
    border-radius: 999px;
    background: var(--accent-fill);
    box-shadow:
      inset 0 1px 0 rgba(255, 255, 255, 0.35),
      0 6px 16px rgba(45, 91, 255, 0.3);
    z-index: -1;
  }
  [data-theme='glass'] .tab-btn.active {
    color: var(--text);
  }
  [data-theme='glass'] .tab-btn.active svg,
  [data-theme='glass'] .tab-btn.active .ic {
    color: var(--on-accent);
  }
}

/* Satır içi küçük ikon düğmeleri: cam YOK, yalnız dokunulunca hafif ışık */
[data-theme='glass'] .wstar,
[data-theme='glass'] .share-mini,
[data-theme='glass'] .cal-mini,
[data-theme='glass'] .fav-star {
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
/* Task564 (kullanıcı: "Skorinho yazısı maç kartından taşmış, compact'ta ikon satırda
   normal görünmüyor — çerçeveye gerek var mı?") — GEREK YOK. Satır içi Skorinho düğmesi
   kardeş ikonlarla aynı dile döner: çerçevesiz, zeminsiz.
   NEDEN ÇIKMIŞTI: düğmenin sınıfları `btn btn-ghost pick-btn`; camın `.btn.btn-ghost`
   kuralı (0,3,0) satır kuralını (`.m-acts .pick-btn`, 0,2,0) eziyordu. Ayrıca dokunma
   kutusu mobilde 19px YUKARI büyüyor (`padding: 19px 9px 4px`) — görünmez olduğu sürece
   sorun değil, çerçeveliyken kartın üst kenarını kesiyordu (ölçüldü: 5px taşma). */
[data-theme='glass'] .m-acts .pick-btn {
  background: none;
  border: 0;
  box-shadow: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
/* Task564 (kullanıcı: "favori ya da başlamış maçın solundaki kırmızı/sarı çizgi compact
   mobil görünümde panele oturmuyor") — camda liste paneli 1px kenarlık + 18px köşe aldı;
   satırın sol kenarına yapışan şerit o köşeyi kesiyordu. Camda şerit satırın İÇİNE oturan
   bir hap olur: köşeyle kesişmez, anlamı (altın/mor/kırmızı) aynı kalır. */
[data-theme='glass'] .live-card.lc-rail::before {
  inset: 5px auto 5px 6px;
  width: 3px;
  border-radius: 999px;
}
/* Task568 (kullanıcı: "maç satırlarının başı en üstteki maç ile ortadaki maçlarda farklı
   olduğu için (kıvrımlı) aynı kırmızı çizgi tüm satırlarda kullanılamaz") — HAKLI: panelin
   18px köşesi yalnız İLK satırın solunu kıvırıyor, ortadakiler düz başlıyordu; içeri
   çekilmiş hap iki durumda iki türlü görünüyor. Dar ekranda panel zaten kenardan kenara
   uzanıyor — orada YAPRAK haline gelir (köşe ve yan kenar yok), böylece HER satır aynı
   yerden başlar ve şerit satırın soluna TAM oturur. Geniş ekranda panel ortalanmış bir
   kart olduğu için hap biçimi korunur. */
@media (max-width: 700px) {
  [data-theme='glass'] .live-cards:not(.lb-empty),
  [data-theme='glass'] .gmatches {
    border-radius: 0;
    border-left: 0;
    border-right: 0;
    /* Task575 (kullanıcı: "panellerdeki maçların en üsttekinin üst çizgisi olmamalı, diğer
       temalarda olduğu gibi") — panelin üst kenarı ilk satırın üstünde çizgi gibi
       görünüyordu; dar ekranda panelin dış çerçevesi tamamen kalkar. */
    border-top: 0;
    /* Task578 (kullanıcı: "up next altındaki çizgi duruyor") — ÖLÇÜLDÜ: kalan çizgi cam
       malzemenin İÇ IŞIĞIYDI (`inset 0 1px 0 var(--glass-sheen)`, panelin üst kenarında
       parlak 1px). Çerçevesi olmayan yaprakta iç ışık da anlamsız: kalkar. */
    box-shadow: none;
  }
  [data-theme='glass'] .live-card.lc-rail::before {
    inset: 0 auto 0 0;
    width: 4px;
    border-radius: 0;
  }
}

/* Düğmeler: cam kabuk + seçiliyken marka gradyanı (statslook dili) */
[data-theme='glass'] .pg-sw-btn.active,
[data-theme='glass'] .day-btn.active {
  background: var(--accent-fill);
  color: var(--on-accent);
  border-color: transparent;
}
/* Kaydırınca yapışkan yüzey derinleşir: hareket sözlüğüne (Task431) bağlı, süresi kısa */
[data-theme='glass'] .topbar.banner,
[data-theme='glass'] #competition-nav {
  transition:
    background-color var(--dur-sm) var(--ease-std),
    backdrop-filter var(--dur-sm) var(--ease-std);
}
/* Saydamlığı azaltılmış cihaz/tercih: cam KATILAŞIR (okunabilirlik önce gelir) */
@media (prefers-reduced-transparency: reduce) {
  [data-theme='glass'] .topbar.banner,
  [data-theme='glass'] #competition-nav,
  [data-theme='glass'] .bottom-nav,
  [data-theme='glass'] .modal-card,
  [data-theme='glass'] .page-view,
  [data-theme='glass'] .live-cards:not(.lb-empty),
  [data-theme='glass'] .gmatches,
  [data-theme='glass'] .skorio-promo,
  [data-theme='glass'] .pg-sw-btn,
  [data-theme='glass'] .cal-head,
  [data-theme='glass'] main#content .group-head {
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    background: var(--panel);
  }
}

/* ===== Lacivert (navy) tema ===== */
:root[data-theme='navy'] {
  --bg: #060d1f;
  --bg2: #0a1530;
  --panel: #0f1f42;
  --panel2: #14264f;
  --line: #243a66;
  --line2: #324c80;
  --text: #e8eefc;
  --muted: #93a6cf;
  --green: #3b82f6;
  --green-d: #2563eb;
  --accent: #4f8cff;
  --glow1: #16306b;
  --glow2: #0c1c44;
  --topbar-bg: rgba(6, 13, 31, 0.82);
  --input-bg: #0a1428;
  --title-b: #a9c7ff;
  --head-a: #16335f;
  --head-b: #0e2147;
  --chip-bg: #0e1d3a;
  --fav: #ff7a8a;
  --fav-bg: rgba(255, 122, 138, 0.15);
  --fav-glow: rgba(255, 122, 138, 0.3);
}

/* ===== Açık (light) tema ===== */
:root[data-theme='light'] {
  --bg: #eef2f0;
  --bg2: #f7faf8;
  --panel: #ffffff;
  --panel2: #f1f5f3;
  --line: #d4e0da;
  --line2: #b9ccc3;
  --text: #0f2018;
  --muted: #5a7064;
  --green: #12a766;
  --green-d: #0d8a52;
  --accent: #10b070;
  --on-accent: var(--bg); /* Task514 — açık temada vurgu üstü yazı AÇIK renktir */
  --accent-fill: var(--accent); /* Task514 rev — açık temada tek ton mavi */
  --accent-fill-h: var(--accent);
  --glow1: #cfeede;
  --glow2: #dff3e8;
  --topbar-bg: rgba(247, 250, 248, 0.85);
  --input-bg: #ffffff;
  --input-text: #0f2018;
  --title-a: #0f6b46;
  --title-b: #12a766;
  --pts: #0f2018;
  --shadow: 0 10px 30px rgba(0, 0, 0, 0.12);
  --head-a: #dceee5;
  --head-b: #eaf5ef;
  --chip-bg: #e6efe9;
  --fav-name: #a30713;
  --fav: #e23744;
  --fav-bg: rgba(226, 55, 68, 0.1);
  --fav-glow: rgba(226, 55, 68, 0.22);
}

* {
  box-sizing: border-box;
}
html {
  -webkit-text-size-adjust: 100%;
}
body {
  margin: 0;
  font-family:
    'Segoe UI',
    system-ui,
    -apple-system,
    Roboto,
    Arial,
    sans-serif;
  color: var(--text);
  background:
    radial-gradient(1200px 700px at 80% -10%, var(--glow1) 0%, transparent 60%),
    radial-gradient(1000px 600px at -10% 10%, var(--glow2) 0%, transparent 55%),
    linear-gradient(180deg, var(--bg2), var(--bg));
  background-attachment: fixed;
  min-height: 100vh;
}
/* Sağdaki sabit Haberler ikonu içeriği kapatmasın — boşluk sadece içerik alanında,
   banner (sticky topbar) tam genişlikte kalsın */
#app {
  padding-right: 42px;
}

/* ---------- Üst bar ---------- */
/* Masaüstü (geniş): eski yatay düzen — marka solda, kontroller sağda */
.topbar {
  position: sticky;
  top: 0;
  z-index: 90; /* lig şeridinin (z-80) ÜSTÜNDE — hesap menüsü altında kalmasın */
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 12px clamp(12px, 3vw, 28px);
  background: var(--topbar-bg);
  backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--line);
}
.tb-brand {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  min-width: 0;
}
.tb-row {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  max-width: 100%;
}
.tb-auth {
  flex: none;
}
.brand-ball {
  font-size: 28px;
  filter: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.5));
  animation: spin 9s linear infinite;
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
}
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}
.tb-title h1 {
  margin: 0;
  font-size: clamp(18px, 3.4vw, 26px);
  font-weight: 800;
  letter-spacing: 0.3px;
  white-space: nowrap;
  background: linear-gradient(90deg, var(--title-a), var(--title-b));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.brand-sub {
  font-size: 12px;
  color: var(--muted);
}
.mode-badge {
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  padding: 5px 10px;
  border-radius: 999px;
  border: 1px solid var(--line2);
}
.lang-select {
  background: var(--panel2);
  color: var(--text);
  border: 1px solid var(--line2);
  border-radius: 8px;
  padding: 5px 6px;
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
}
.lang-select:hover {
  border-color: var(--green);
}
.lang-select:focus {
  outline: none;
  border-color: var(--accent);
}
.tz-select {
  max-width: 150px;
}
.online-pill {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 12px;
  font-weight: 700;
  color: var(--text);
  padding: 5px 10px;
  border-radius: 999px;
  border: 1px solid var(--line2);
  background: rgba(25, 224, 138, 0.08);
  white-space: nowrap;
  flex: none;
}
.online-label {
  margin-left: 1px;
}
.online-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 8px var(--accent);
  animation: onlinePulse 2s ease-in-out infinite;
}
@keyframes onlinePulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.35;
  }
}
.mode-badge.readonly {
  color: var(--muted);
}
.mode-badge.edit {
  color: #06140d;
  background: var(--accent);
  border-color: var(--accent);
}

/* ---------- Tema seçici ---------- */
.theme-switch {
  display: inline-flex;
  gap: 2px;
  padding: 3px;
  border-radius: 999px;
  border: 1px solid var(--line2);
  background: var(--panel2);
  flex: none;
}
.theme-btn {
  cursor: pointer;
  border: 0;
  background: transparent;
  font-size: 14px;
  line-height: 1;
  padding: 5px 8px;
  border-radius: 999px;
  color: var(--muted);
  transition: 0.15s;
  -webkit-appearance: none;
  display: inline-flex;
  align-items: center;
}
/* SVG tema ikonları currentColor — koyu temada NET görünmeli (opacity ile soldurulmaz) */
.theme-btn .ic {
  opacity: 0.65;
}
.theme-btn:hover {
  color: var(--text);
}
.theme-btn:hover .ic {
  opacity: 1;
}
/* Seçili: aksan renkli ikon + halka (koyu temalarda ayırt edilir) */
.theme-btn.active {
  color: var(--accent);
  background: var(--bg2);
  box-shadow: inset 0 0 0 1.5px var(--accent);
}
.theme-btn.active .ic {
  opacity: 1;
}

/* ---------- Butonlar ---------- */
.btn {
  cursor: pointer;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--text);
  padding: 8px 14px;
  border-radius: 10px;
  font-weight: 700;
  font-size: 14px;
  transition: 0.15s;
}
.btn:hover {
  transform: translateY(-1px);
  border-color: var(--green);
}
.btn-primary {
  background: var(--accent-fill);
  border-color: var(--green-d);
  color: var(--on-accent);
}
.btn-login {
  background: var(--accent-fill);
  border-color: var(--green-d);
  color: var(--on-accent);
}
.btn-ghost {
  background: transparent;
}

/* ---------- Modal ---------- */
.modal {
  position: fixed;
  inset: 0;
  z-index: 200; /* sticky banner/nav ve pick-counter'ın ÜSTÜNDE (howto menü altında kalmasın) */
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 0, 0, 0.6);
  backdrop-filter: blur(3px);
  overflow-y: auto; /* uzun içerik (howto/tören) taşarsa modal içinde kaydırılır */
  /* Task383b (kullanıcı: "maç detayı açıkken bazı noktalarda popup değil ALTINDAKİ sayfa
     kayıyor") — kaydırma ZİNCİRİ kesilir: pencere sonuna gelince hareket arkadaki sayfaya
     geçmez. Gövde kilidi (position: fixed) yerine bu seçildi; kilit kaydırma konumunu
     zıplatıyor ve başka ekranları bozma riski taşıyor. */
  overscroll-behavior: contain;
  /* Task225 — pencere kartı çentiğe ve ev göstergesine oturmaz */
  padding: calc(16px + var(--sat)) var(--sar) calc(16px + var(--sab)) var(--sal);
}
/* İç kaydırılabilir bölgeler de zinciri kesmeli (kadro/istatistik panelleri, uzun listeler) */
.modal .tm-body,
.modal .dt-pane,
.modal .modal-card,
#detail-inline {
  overscroll-behavior: contain;
}
/* Task102 — Maç detayı MOBİLDE hep en üstten açılır. `align-items: center` kısa içerikte
   kartı ekranın ortasına koyuyordu; kullanıcı bunu "kartın orta noktasında açılıyor"
   diye bildirdi ve her açılışta aynı yerden başlamasını istedi. Yalnız maç detayı
   (`#detail-modal`) hedeflenir: doğrulama/e-posta gibi kısa diyaloglar ortada kalır. */
@media (max-width: 860px) {
  #detail-modal {
    align-items: flex-start;
    /* Task225 — 10px'ti; çentikli telefonda kartın üstü çentiğin altında kalıyordu
       (ölçüldü: kart 10px'ten başlıyor, çentik 47px). Güvenli alan payı eklendi. */
    padding-top: calc(10px + var(--sat));
  }
}
/* Tema-uyumlu satır-içi ikonlar (currentColor SVG) metinle hizalı */
.ic {
  vertical-align: -2px;
  flex: none;
}
/* Takım popup'ı izleme/diğer listelerden açıldığında onların üstünde görünsün */
#team-modal {
  z-index: 70;
}
.modal-card {
  width: min(92vw, 360px);
  background: var(--panel);
  border: 1px solid var(--line2);
  border-radius: var(--radius);
  padding: 22px;
  box-shadow: var(--shadow);
  max-height: 90vh; /* uzun içerik kart İÇİNDE kaydırılır (kapatma hep erişilir) */
  overflow-y: auto;
}
.modal-card h3 {
  margin: 0 0 6px;
}
.modal-card p {
  margin: 0 0 14px;
  color: var(--muted);
  font-size: 14px;
}
.modal-card input {
  width: 100%;
  padding: 11px 12px;
  border-radius: 10px;
  border: 1px solid var(--line2);
  background: var(--input-bg);
  color: var(--text);
  font-size: 15px;
}
.modal-actions {
  display: flex;
  gap: 10px;
  justify-content: flex-end;
  margin-top: 16px;
}
.login-error {
  color: var(--red);
  font-size: 13px;
  margin-top: 8px;
}
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* ---------- Bölümler ---------- */
.section {
  padding: clamp(18px, 3vw, 34px) clamp(12px, 3vw, 28px) 4px;
  max-width: 1500px;
  margin: 0 auto;
}
.section-title {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: clamp(18px, 2.6vw, 24px);
  margin: 0 0 4px;
}
.section-title .dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 12px var(--accent);
}
/* Eleme haritası indirme butonları (bölüm başlığının sağında: ağaç + çember) */
.bracket-dl-group {
  margin-left: auto;
  display: inline-flex;
  gap: 6px;
}
.bracket-dl {
  font-size: 12px;
  font-weight: 700;
  padding: 5px 10px;
  border-radius: 999px;
  background: var(--panel2);
  color: var(--text);
  border: 1px solid var(--line2);
  cursor: pointer;
  white-space: nowrap;
}
.bracket-dl:hover {
  border-color: var(--accent);
  color: var(--accent);
}
/* Şampiyon tahmini bandı: "Kupayı kim kaldırır?" — Bugün bölümüyle aynı genişlik, içerik ortalı */
.champ-band {
  background: linear-gradient(135deg, rgba(244, 197, 66, 0.08), transparent);
  border: 1px solid var(--gold-d);
  border-radius: var(--radius);
  padding: 12px 14px 16px;
  max-width: 760px;
  margin: 14px auto 0;
  text-align: center;
}
.champ-band .section-title {
  justify-content: center;
}
.cb-hint,
.cb-note {
  font-size: 13px;
  color: var(--muted);
  margin: 4px 0 10px;
}
.cb-note {
  color: var(--gold);
  font-weight: 700;
}
.cb-opts {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: center;
}
.cb-opt {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 7px 12px;
  border-radius: 999px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  color: var(--text);
  font-weight: 700;
  font-size: 13px;
  cursor: pointer;
}
.cb-opt img {
  width: 22px;
  height: 15px;
  border-radius: 2px;
  object-fit: cover;
}
.cb-opt:hover,
.cb-opt.on {
  border-color: var(--gold);
  color: var(--gold);
}
.cb-res {
  max-width: 540px;
  margin: 0 auto;
  text-align: left;
}
.cb-res .eg-tot {
  text-align: center;
}
.cb-acts {
  margin-top: 10px;
  display: flex;
  justify-content: center;
}
.cb-change {
  margin-top: 8px;
  background: none;
  border: none;
  color: var(--muted);
  font-size: 12px;
  text-decoration: underline;
  cursor: pointer;
}
/* Eleme haritası önizleme katmanı: görsel ekranda, köşede İndir + kapat */
.bracket-view {
  position: fixed;
  inset: 0;
  z-index: 300;
  background: rgba(4, 10, 18, 0.84);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 18px;
}
.bracket-view.hidden {
  display: none;
}
.bv-box {
  position: relative;
  max-width: 96vw;
  max-height: 90vh;
}
.bv-box img {
  display: block;
  max-width: 96vw;
  max-height: 90vh;
  object-fit: contain;
  border-radius: 12px;
  border: 1px solid var(--line2);
  background: #0b1220;
  box-shadow: 0 18px 60px rgba(0, 0, 0, 0.55);
}
.bv-acts {
  position: absolute;
  top: 10px;
  right: 10px;
  display: flex;
  gap: 8px;
}
.bv-acts .bracket-dl {
  background: rgba(10, 18, 30, 0.88);
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
/* Mobil: butonlar görselin ÜSTÜNDE ayrı satırda (başlık yazısını kapatmasın) ve daha ufak */
@media (max-width: 640px) {
  .bv-box {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 6px;
  }
  .bv-box img {
    max-height: 82vh;
  }
  .bv-acts {
    position: static;
  }
  .bv-acts .bracket-dl {
    padding: 3px 8px;
    font-size: 11px;
  }
}
.section-hint {
  margin: 0 0 18px;
  color: var(--muted);
  font-size: 13px;
}
/* "Yarın →" butonu (Bugün başlığı sağında) + yarının programı satırları */
.tomorrow-btn {
  margin-left: auto;
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
  flex: none;
  background: var(--panel2);
  color: var(--accent);
  border: 1px solid var(--line2);
  border-radius: 999px;
  padding: 5px 12px;
}
.tomorrow-btn:hover {
  border-color: var(--green);
}
/* Gün değiştirici (Dün / Bugün / Yarın) — Bugün başlığı sağında segment */
.section-title {
  flex-wrap: wrap;
}
.day-switch {
  margin-left: auto;
  display: inline-flex;
  flex: none;
  gap: 0;
  padding: 2px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 999px;
}
.day-btn {
  cursor: pointer;
  border: 0;
  background: transparent;
  color: var(--muted);
  font-size: 12.5px;
  font-weight: 800;
  padding: 5px 13px;
  border-radius: 999px;
  transition: 0.15s;
  white-space: nowrap;
}
.day-btn:hover {
  color: var(--text);
}
.day-btn.active {
  background: var(--accent-fill);
  color: var(--on-accent);
}
/* Mobilde: segment kendi satırına, 3 buton eşit genişlik -> uzun dillerde (EN/DE/FR) taşmaz */
@media (max-width: 560px) {
  .day-switch {
    margin-left: 0;
    width: 100%;
    box-sizing: border-box;
    margin-top: 6px;
  }
  .day-btn {
    flex: 1 1 0;
    text-align: center;
    padding: 7px 4px;
    font-size: 12.5px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
}

/* Hızlı gezinme çubuğu (yapışkan, topbar'ın hemen altında) */
.quicknav {
  position: sticky;
  top: var(--tbh, 0);
  z-index: 38;
  display: flex;
  gap: 6px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  padding: 7px 12px;
  background: color-mix(in srgb, var(--bg) 88%, transparent);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--line);
  scrollbar-width: none;
}
.quicknav::-webkit-scrollbar {
  display: none;
}
/* Webde çipler sayfaya ortalı; mobilde soldan başlar ve kaydırılır */
@media (min-width: 761px) {
  .quicknav {
    justify-content: center;
  }
}
/* Grup bölümü başındaki harf şeridi (A–L) */
.group-letters {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 6px;
  margin: 2px 0 14px;
}
.qn-chip {
  flex: 0 0 auto;
  cursor: pointer;
  white-space: nowrap;
  min-width: 30px;
  background: var(--chip-bg, rgba(255, 255, 255, 0.05));
  color: var(--text);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 12.5px;
  font-weight: 800;
  transition: 0.15s;
}
.qn-chip:hover {
  border-color: var(--accent);
}
.qn-chip.qn-active {
  color: var(--accent);
  border-color: rgba(46, 160, 204, 0.4);
}
.qn-chip.qn-ko {
  color: var(--gold);
  border-color: rgba(244, 197, 66, 0.4);
}
.qn-chip.qn-stats {
  color: var(--accent);
  border-color: rgba(46, 160, 204, 0.4);
}
.qn-chip.qn-grp {
  color: var(--accent);
  border-color: rgba(46, 160, 204, 0.4);
}

/* ---------- İstatistikler ---------- */
#stats-body {
  max-width: 760px;
  margin: 0 auto;
}
.st-controls {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 12px;
}
.st-seg {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
  justify-content: center;
}
.st-mchip,
.st-schip {
  cursor: pointer;
  white-space: nowrap;
  background: var(--chip-bg, rgba(255, 255, 255, 0.05));
  color: var(--text);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 6px 13px;
  font-size: 12.5px;
  font-weight: 700;
  transition: 0.15s;
}
.st-mchip:hover,
.st-schip:hover {
  border-color: var(--accent);
}
.st-mchip.active {
  background: var(--accent-fill);
  color: var(--on-accent);
  border-color: var(--green-d);
}
.st-schip.active {
  background: var(--accent);
  color: var(--on-accent);
  border-color: var(--accent);
}
.st-hint {
  font-size: 12px;
  color: var(--muted);
  margin: -4px 0 10px;
}
/* Faul alt seçimi: yaptığı / yapılan */
.st-foulmode {
  margin: -2px 0 10px;
}
.st-fchip {
  cursor: pointer;
  background: var(--panel2);
  color: var(--muted);
  border: 1px solid var(--line2);
  border-radius: 999px;
  padding: 5px 14px;
  font-size: 12.5px;
  font-weight: 700;
}
.st-fchip.active {
  background: var(--accent);
  color: var(--on-accent);
  border-color: var(--accent);
}
/* Turnuva maç-başı ortalama kartları */
.st-avg-title {
  font-size: 12px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--muted);
  margin: 2px 0 8px;
}
.st-avg-title small {
  font-weight: 600;
  text-transform: none;
}
.st-avg-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(92px, 1fr));
  gap: 8px;
  margin-bottom: 16px;
}
.st-avg-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  padding: 9px 6px;
  background: var(--chip-bg, rgba(255, 255, 255, 0.05));
  border: 1px solid var(--line);
  border-radius: 10px;
}
.st-avg-ic {
  font-size: 16px;
}
.st-avg-card b {
  font-size: 18px;
  font-variant-numeric: tabular-nums;
  color: var(--gold);
}
.st-avg-lbl {
  font-size: 10.5px;
  color: var(--muted);
  text-align: center;
  line-height: 1.1;
}
/* İçerik alanı sabit min-yükseklik: kapsam/metrik değişince sayfa hoplamaz */
.st-content {
  min-height: 380px;
}
.st-list {
  display: flex;
  flex-direction: column;
}
.st-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 8px 6px;
  border-bottom: 1px solid var(--line);
}
.st-row:last-child {
  border-bottom: none;
}
.st-rank {
  width: 24px;
  text-align: center;
  font-weight: 800;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.st-name {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.st-name img {
  width: 24px;
  height: 16px;
  object-fit: cover;
  border-radius: 2px;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
  flex: none;
}
.st-name b {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.st-count {
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  color: var(--gold);
  min-width: 28px;
  text-align: right;
  white-space: nowrap;
}
.st-avg {
  font-weight: 700;
  font-size: 11px;
  color: var(--muted);
  margin-left: 4px;
}
.st-avg::before {
  content: '(';
}
.st-avg::after {
  content: ')';
}
.st-all {
  margin-top: 10px;
  width: 100%;
  cursor: pointer;
  background: var(--panel2);
  color: var(--accent);
  border: 1px solid var(--line2);
  border-radius: 10px;
  padding: 9px;
  font-weight: 800;
  font-size: 13px;
}
.st-all:hover {
  border-color: var(--green);
}
.tmr-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 10px;
  padding: 9px 10px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.tmr-time {
  font-weight: 900;
  color: var(--gold);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  font-size: 14px;
}
.tmr-teams {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  font-size: 14px;
  font-weight: 700;
}
.tmr-teams .fb-vs {
  color: var(--muted);
  font-weight: 800;
}
.tmr-meta {
  font-size: 10px;
  font-weight: 800;
  color: var(--muted);
  text-transform: uppercase;
  white-space: nowrap;
}

/* ---------- Canlı maçlar (en üst bant) ---------- */
.live-section {
  background: linear-gradient(180deg, rgba(25, 224, 138, 0.05), transparent);
  border: 1px solid var(--line2);
  border-radius: var(--radius);
  margin: 14px auto 0;
  padding-bottom: 16px;
  max-width: 760px; /* sayaç + favori bandı ile aynı genişlik, ortalı */
}
.dot.live-dot {
  background: var(--red);
  box-shadow: 0 0 12px var(--red);
  animation: livePulse 2.2s ease-in-out infinite;
}
/* Task064 — kullanıcı "çok hızlı yanıp sönüyor" dedi: süre 1,1-1,3 sn'den 2,2 sn'ye çıkarıldı
   ve sönme derinliği azaltıldı (0,3 → 0,45) — dikkat çeker ama rahatsız etmez. */
@keyframes livePulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.45;
  }
}
/* Tek sütun: her maç tam genişlik kart -> isimler kırpılmaz, ortada dengeli durur */
.live-cards {
  display: grid;
  gap: 12px;
  grid-template-columns: 1fr;
  margin-top: 14px;
}
.live-card {
  background: linear-gradient(180deg, var(--panel), var(--bg2));
  border: 1px solid var(--line2);
  border-radius: 14px;
  /* Task064: alt boşluk üstten fazla — üstte rozet satırı tampon görevi görüyor, altta ise
     takım adları doğrudan kenara dayanıp kart çizgisi yakın duruyordu (CLAUDE.md ilke 4). */
  padding: 12px 14px 18px;
  box-shadow: var(--shadow);
  min-width: 0;
  /* Mobilde Skorinho markası geri sayım satırına konumlanıyor (aşağıda) — bağlam burada. */
  position: relative;
} /* grid öğesi içeriğe göre büyüyüp section'ı taşmasın */
.live-card.live {
  border-color: rgba(255, 90, 95, 0.55);
  box-shadow: 0 0 22px rgba(255, 90, 95, 0.18);
}
.live-card.soon {
  border-color: rgba(244, 197, 66, 0.45);
}
.live-card.upcoming {
  border-color: var(--line2);
}
.live-card.done {
  opacity: 0.72;
}
/* Task133 — Üç yuva: solda saat (+ sayaç yoksa lig çipi), ORTADA tarih, sağda ikonlar.
   Yan yuvalar eşit (1fr) olduğu için tarih kartın tam merkezinde durur. Mutlak konumlama
   denendi ve `.lc-top`a `position: relative` eklemek Skorinho markasının (mutlak, karta
   göre konumlu) yerini bozdu — ölçümde marka ikon satırının altına düştü. */
.lc-top {
  display: grid;
  /* Task382 — orta sütun KARTIN ORTASINDA kalmalı (canlı dakika/MS rozeti oraya oturuyor),
     ama sağ sütun içeriğinden dar olmamalı: `1fr` iken ikon şeridi sütuna sığmayıp
     `justify-self: end` ile sola taşıyor ve saatin üstüne biniyordu (ölçüldü: 17px).
     `minmax(max-content, 1fr)` ikisini birden verir: yan sütunlar eşit esner, sağdaki
     içeriğinin altına DÜŞMEZ. */
  grid-template-columns: minmax(0, 1fr) auto minmax(max-content, 1fr);
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
}
.lc-side {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
/* Sütunlar AÇIKÇA verilir: takvim görünümünde tarih gizlendiği için (`.hc-cards .lc-meta`)
   ızgara otomatik yerleşimi ikon şeridini ORTA sütuna alıyordu — kullanıcı bildirdi:
   "ikonlar takvim görünümünde ortada görünüyor". */
.lc-top > .lc-side:first-child {
  grid-column: 1;
}
.lc-top .lc-meta {
  grid-column: 2;
  justify-self: center;
}
/* Task382 (kullanıcı, ekran görüntüsü: kadro ikonu saatin üstüne binmişti) — ikon şeridi
   KENDİ İÇERİĞİ KADAR yer alır ve aralığı 8→6 daralır. Sütun `1fr` iken şerit içeriğinden
   dar kalıyor, `justify-self: end` ile sola taşıyor ve saatin üstüne biniyordu
   (ölçüldü: saat 188-238, kadro ikonu 221-250 → 17px çakışma). */
.lc-side-r {
  grid-column: 3;
  justify-self: end;
  gap: 6px;
}
.lc-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 900;
  letter-spacing: 0.6px;
  padding: 3px 9px;
  border-radius: 999px;
  flex: none;
  white-space: nowrap;
}
/* Task305 (kullanıcı) — dolu kırmızı "çok göze batıyordu": pastel zemin + yumuşak
   kırmızı metin, soon/İY rozetleriyle aynı dil (saydam zemin + ince kenarlık). */
.lc-badge.live {
  background: color-mix(in srgb, var(--red) 16%, transparent);
  color: color-mix(in srgb, var(--red) 72%, var(--text));
  border: 1px solid color-mix(in srgb, var(--red) 38%, transparent);
}
/* Nokta rozet rengini izler (pastel zeminde beyaz nokta kayboluyordu) */
.lc-badge.live .lc-dot {
  background: currentColor;
}
.lc-badge.soon {
  background: rgba(244, 197, 66, 0.18);
  color: var(--gold);
  border: 1px solid var(--gold-d);
}
.lc-badge.ht {
  background: var(--gold);
  color: #1a1206;
} /* devre arası (İY) */
.lc-badge.upcoming {
  background: var(--panel2);
  color: var(--text);
  border: 1px solid var(--line2);
}
/* Mobil: geri sayım kendi satırında (saatin altında), ortada */
/* Task125 — Üç yuva: solda lig + hafta, ORTADA geri sayım, sağda denge boşluğu.
   Grid sayesinde geri sayım lig adı uzasa da tam ortada kalır. */
/* Task125 — Solda lig + hafta, ardından geri sayım. Grid (1fr auto 1fr) denendi ve
   390px'te yan sütunlar lig çipini eziyordu (logo ince bir şerite dönüyordu — ölçüldü);
   flex + `margin:auto` ile sayaç kalan alanda ortalanır, çip kendi genişliğini korur. */
.lc-cd-wrap {
  display: flex;
  align-items: center;
  gap: 10px;
  text-align: center;
  margin: 2px 0 8px;
  line-height: 1;
}
.lc-cd-lig {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  flex: none;
}
/* Task133 — Sayaç (varsa KALBİYLE BİRLİKTE) kartın TAM ORTASINDA durur; lig çipi solda
   kalır. Akışta ortalamak çipin genişliğine göre kayıyordu (ölçüm: mobilde 34px sola,
   webde 84px sağa). Mutlak %50 + geri kaydırma, çip ne kadar genişlerse genişlesin
   sayacı kartın merkezinde tutar. */
.lc-cd-wrap {
  position: relative;
}
.lc-cd-mid {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
}
/* Birim ekleri küçük ve soluk: rakam öne çıksın, kart ölçüsü değişmesin */
.lc-cd small {
  font-size: 0.62em;
  font-weight: 800;
  margin-left: 1px;
  opacity: 0.75;
  letter-spacing: 0;
}
.lc-cd-date {
  font-size: 14px;
  color: var(--muted);
  letter-spacing: 0;
}
.lc-cd {
  color: var(--gold);
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  /* Task068 — kullanıcı isteğiyle küçültüldü (22px kart içinde skorla yarışıyordu). */
  font-size: 17px;
  letter-spacing: 0.4px;
}
/* Türkiye maçında geri sayım başındaki atan kalp (geri sayım fontu büyüklüğünde) */
.beat-heart {
  display: inline-flex;
  align-items: center;
  line-height: 1;
  transform-origin: center;
  color: var(--accent); /* tema-aksanı (team temada takım rengi) — sabit kırmızı değil */
  animation: heartBeat 1.1s ease-in-out infinite;
}
.beat-heart svg {
  width: 15px;
  height: 15px;
}
.lc-cd-wrap .beat-heart {
  vertical-align: -1px;
  margin-right: 5px;
} /* Bugün kartı */
.lc-cd-wrap .beat-heart svg {
  width: 19px;
  height: 19px;
}
.fb-info .beat-heart {
  margin-right: 3px;
  vertical-align: -1px;
} /* favori/izleme bandı */
@keyframes heartBeat {
  0%,
  40%,
  100% {
    transform: scale(1);
  }
  12% {
    transform: scale(1.28);
  }
  26% {
    transform: scale(1.12);
  }
}
/* Task133 — Web'e özel "sayaç üst satıra mutlak konumlanır" düzeni KALDIRILDI: kullanıcı
   webin mobil düzenle aynı olmasını istedi (kart içinde üç satır: lig+sayaç · saat/tarih/
   ikonlar · takımlar). Kart yine konumlandırıcı ata olarak kalır (marka mutlak). */
.live-card {
  position: relative;
}
.lc-badge.done {
  background: rgba(143, 179, 163, 0.14);
  color: var(--muted);
  border: 1px solid var(--line2);
}
/* Task541 (kullanıcı: "compact görünümde penaltı skorunu göremiyorum") — skorun yanındaki
   küçük penaltı rakamı. VARSAYILAN GİZLİ: zengin kartta penaltı kendi satırında yazılı,
   iki kez görünmesin. Sade satırda görünür; kutu genişliği değişmediği için sütun hizası
   ve satır yüksekliği bozulmaz. */
.sc-pen {
  display: none;
  margin-left: 1px;
  font-size: 9.5px;
  font-style: normal;
  font-weight: 800;
  line-height: 1;
  vertical-align: super;
  color: var(--muted);
}
.sc-pen-win {
  color: var(--gold);
}
.cd-compact .sc-pen {
  display: inline;
}
/* Fikstür satırında her kipte görünür: orada penaltının yazıldığı başka bir yer yok. */
.sc-pen.g-pen {
  display: inline;
}

/* Maç detayında penaltı ROZETİ: künye satırındaki düz metnin yerine (kullanıcı). */
.dt-pen {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin: 6px auto 0;
  padding: 3px 10px;
  border: 1px solid color-mix(in srgb, var(--gold) 45%, transparent);
  border-radius: 999px;
  background: color-mix(in srgb, var(--gold) 12%, transparent);
  font-size: 12.5px;
  font-weight: 800;
  letter-spacing: 0.3px;
  color: var(--muted);
}
.dt-pen svg {
  width: 14px;
  height: 14px;
}
.dt-pen b {
  font-size: 14px;
  color: var(--text);
}
.dt-pen b.dt-pen-win {
  color: var(--gold);
}
.dt-pen i {
  font-style: normal;
  opacity: 0.6;
}

/* Günlük kartta penaltı sonucu satırı (eleme; skor berabere görünür, tur atlayan burada) */
.lc-pen {
  margin-top: 4px;
  font-size: 12px;
  color: var(--muted);
  text-align: center;
}
.lc-pen b {
  color: var(--gold);
}
/* Task304 — çift maçlı eleme: rövanşta "İlk maç x-y · Toplam a-b · <takım> tur atladı"
   satırı (WC deseninin taşınması). Kompakt fikstür satırında tam genişlik alt bant. */
.lc-agg {
  margin-top: 4px;
  font-size: 12px;
  color: var(--muted);
  text-align: center;
}
.lc-agg b {
  color: var(--text);
}
/* Tur atlayan/elenen: cümle yerine GÖRSEL vurgu (Sofascore/FotMob kalıbı) — atlayan
   takımın adı kalın ve tam renkte, elenen taraf soluk. Sınıf taraf kapsayıcısına gelir. */
.agg-adv .sn,
.agg-adv .lc-nm,
.dt-tm.agg-adv span {
  font-weight: 700;
  color: var(--text);
}
.agg-out {
  opacity: 0.5;
}
/* Task304 rev (kullanıcı: "satırı aşağıya ve yana genişletmeyecek") — kompakt satırda
   agregat AKIŞA GİRMEZ: skor hücresinin altına bindirilen mini rozet. Satır yüksekliği
   ve sütun genişlikleri değişmez; rozet alt padding'in içine oturur. */
.gscore {
  position: relative;
}
.g-agg {
  position: absolute;
  top: 100%;
  left: 50%;
  transform: translate(-50%, -2px);
  /* Skor fontunun bir küçüğü, italik değil (kullanıcı) — sayı tabular otursun */
  font-size: 11px;
  font-style: normal;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  white-space: nowrap;
  color: var(--muted);
}
/* Task307 (kullanıcı) — mobil compact'ta canlı bandın başlık altı ve son satır altı
   gereksiz boşluk bırakıyordu: başlık dolgusu kısılır, liste karta yapışır. */
@media (max-width: 759px) {
  .cd-compact .live-band .group-head {
    padding: 8px 14px 4px;
  }
  .cd-compact .live-band .live-cards {
    padding-bottom: 0;
  }
  .cd-compact .live-band .live-card:last-child {
    border-bottom: 0;
  }
}
/* Task305 (kullanıcı) — canlı dakika / İY / MS rozetinin NORMAL karttaki yeri: skorun
   hemen üstünde ve ortada. Soldaki kopya normal modda gizlenir; compact satır sol
   sütunundaki rozetiyle yaşamaya devam eder (aşağıdaki compact kuralları). */
.lc-status {
  display: flex;
  justify-content: center;
  margin-bottom: 2px;
}
.live-card.has-status .lc-top .lc-side:not(.lc-side-r) > .lc-badge {
  display: none;
}
.cd-compact .live-card .lc-status {
  display: none;
}
.cd-compact .live-card.has-status .lc-top .lc-side:not(.lc-side-r) > .lc-badge {
  display: inline-flex;
}
.dt-status {
  margin: 4px 0 2px;
}
/* Task308 rev — "Yakında" SAATİ ayrı bir upcoming-hapıdır.
   Task314 (kullanıcı) — hap HER görünümde sözün sağında durur: normal görünümde soon
   penceresine girince saat kayboluyordu (upcoming rozeti soon'a dönüşüyor, saat hapı
   yalnız compact'ta görünüyordu). Maç başlayana dek saat kalır. */
i.soon-time {
  display: inline-flex;
  font-style: normal;
}
.lc-badge.soon .soon-word {
  font-style: normal;
}
/* Task306 — uzatma dakikası: normalde tam biçim ("90'+2'"), mobil compact'ta toplam */
.lc-badge.live .min-a,
.lc-badge.live .min-b {
  font-style: normal;
}
.lc-badge.live .min-b {
  display: none;
}
@media (max-width: 759px) {
  .cd-compact .lc-badge.live .min-b {
    display: inline;
  }
  /* Toplam varyantı varsa tam biçim gizlenir (işaretlemede min-a önce gelir) */
  .cd-compact .lc-badge.live .min-a:has(+ .min-b) {
    display: none;
  }
}
/* Task308 rev (kullanıcı) — web compact'ta "Yakında" rozeti NORMAL görünümle birebir
   aynıdır (sarı hap + kum saati + söz): compact ikon-gizleme kuralı bu rozet için geri
   açılır; saat AYRI hapta yanında durur. Mobilde rozet KABUĞU görünmez (boş sarı hap
   kalmasın): kum saati kartın soluna yapışır, ortada yalnız saat hapı kalır. */
.cd-compact .lc-badge.soon svg {
  display: inline;
}
@media (max-width: 759px) {
  /* Task315 rev (kullanıcı) — MOBİLDE "Yakında" SÖZÜ hiç yazılmaz (normal + compact):
     kum saati + saat yeter. Web'de söz durur. */
  .lc-badge.soon .soon-word {
    display: none;
  }
  /* Task316 (kullanıcı) — mobil NORMAL görünümde pil (kum saati/saat) HEP çiplerin
     ALTINDA. Geri sayımlı kartta zaten öyle; kickoff geçip kaynak henüz canlı demeden
     önce cd düşer ve çipler pille aynı satıra yazılıyordu (tutarsızlık penceresi).
     Çip taşıyan sol yuva sarılır: çipler order 0 ilk satır, ::after kırılımı, pil order 2. */
  .live-card.scheduled .lc-top .lc-side:not(.lc-side-r):has(.lc-comp) {
    flex-wrap: wrap;
    row-gap: 4px;
  }
  .live-card.scheduled .lc-top .lc-side:not(.lc-side-r):has(.lc-comp)::after {
    content: '';
    flex-basis: 100%;
    height: 0;
    order: 1;
  }
  .live-card.scheduled .lc-top .lc-side:not(.lc-side-r):has(.lc-comp) > .lc-badge {
    order: 2;
  }
  /* Task343 (kullanıcı, not 10) — GERİ SAYIMLI normal kartta (mobil) saat hapı sayacın
     hemen altında KARTI ORTALAR; tarih sola geçer. Soon'da kum saati saatin solunda
     (soon-word mobilde zaten gizli). Compact aşağıdaki geri almalarla etkilenmez. */
  .live-card.scheduled:has(.lc-cd-wrap) .lc-top .lc-side:not(.lc-side-r) {
    grid-column: 2;
    grid-row: 1;
    justify-self: center;
  }
  .live-card.scheduled:has(.lc-cd-wrap) .lc-top .lc-meta {
    grid-column: 1;
    grid-row: 1;
    justify-self: start;
  }
  /* Task361 (kullanıcı) — SAAT ile TARİH yer değiştirdi: saat orta sütunda (takım
     adlarının arasında), tarih solda. Bu kural `:has(.lc-cd-wrap)` özgüllüğüyle
     aşağıdaki genel kuralları ezdiği için swap BURADA yapılır. */
  .cd-compact .live-card.scheduled:has(.lc-cd-wrap) .lc-top .lc-side:not(.lc-side-r) {
    grid-column: 2;
    justify-self: center;
  }
  /* Task362 (kullanıcı: "tarih biraz sola kaysın") — bu kural `:has(.lc-cd-wrap)`
     özgüllüğüyle aşağıdaki genel kuralı ezdiği için hizalama BURADA da yazılır;
     yoksa geri sayımlı (yani tüm yaklaşan) satırlarda tarih ortalı kalıyordu. */
  .cd-compact .live-card.scheduled:has(.lc-cd-wrap) .lc-top .lc-meta {
    grid-column: 1;
    justify-self: start;
  }
  /* Compact bu kurala girmez: tek satır düzeni aynen kalır */
  .cd-compact .live-card.scheduled .lc-top .lc-side:not(.lc-side-r):has(.lc-comp) {
    flex-wrap: nowrap;
    row-gap: 0;
  }
  .cd-compact .live-card.scheduled .lc-top .lc-side:not(.lc-side-r):has(.lc-comp)::after {
    content: none;
  }
  .cd-compact .live-card.scheduled .lc-top .lc-side:not(.lc-side-r):has(.lc-comp) > .lc-badge {
    order: 0;
  }
  /* "Yakında" satırı: mobil compact'ta söz rozeti yazısızdır ve kum saati sol raya
     mutlak konumlanırdı — TARİH sola geçince ikisi ÜST ÜSTE bindi. Dar satırda ikisi
     yan yana sığmıyor (46px kolonun tamamını yer, kart kenarına teğet olurdu). Yakında
     bilgisi burada RENKLE taşınır: saat altın olur, sol vurgu şeridi zaten yanar.
     Kum saati ikonu geniş/normal görünümlerde aynen durur. */
  .cd-compact .live-card.scheduled .lc-badge.soon {
    display: none;
  }
}
i.agg-lbl {
  font-style: normal;
}
/* Ana sayfa kompakt listesinde kart varyantındaki tam satır da bindirmeye döner */
.cd-compact .live-card {
  position: relative;
}
.cd-compact .lc-agg {
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  margin: 0;
  /* Task362 (kullanıcı: "fontu da 1 size büyüsün") — satır artık YALIN SKOR okuyor,
     yer açıldı: 8.5px → 10px, başlamamış rövanştaki ölçüyle aynı (tek ritim).
     Task362 rev (kullanıcı: "eleme maçlarında önceki maçın skoru bold görünsün") —
     kalınlık BAŞLAMIŞ/BAŞLAMAMIŞ ayrımı yapmaz; 10px ince gövde okunmuyordu. */
  font-size: 10px;
  font-weight: 800;
  line-height: 1;
}
/* Task362 — SADE görünümde bu satırda yalnız SKOR kalır: etiketler ("İlk maç",
   "· Toplam") gizlenir; rövanş oynandıysa TOPLAM tek başına okunur, ilk maç parçası
   düşer. Normal görünümde satır tam metniyle durur. */
.cd-compact .lc-agg .agg-lbl {
  display: none;
}
.cd-compact .lc-agg:has(.agg-tot) .agg-fl {
  display: none;
}
/* Task362 rev (kullanıcı) — BAŞLAMIŞ elemeli maçta alt satır ayrıca TAM RENKTE: canlı
   skorun hemen altında durduğu için soluk gri okunmuyordu. Kalınlık her iki durumda da
   yukarıdaki temel kuraldan gelir. */
.cd-compact .live-card:not(.scheduled) .lc-agg {
  color: var(--text);
}
/* Task362 — Satır içindeki lig nişanları YALNIZ sade görünümde ve takvim GÜNE göre
   gruplandığında çizilir; başka her yerde gizlidir.
   Seçici `.lc-comp` ile birlikte yazılır: çipin kendi `display` kuralları kaynakta DAHA
   SONRA geliyor ve tek sınıflı gizleme kuralını eziyordu — normal görünümde bitmiş maçta
   "MS"nin yanında ikinci bir lig logosu belirmişti (kullanıcı bildirdi). */
.lc-comp.lc-meta-lig,
.lc-comp.lc-side-lig {
  display: none;
}
/* Task332 (kullanıcı) — başlamamış rövanşta İLK MAÇ satırı saat hapına biniyordu
   (ölçüldü: hap y17-34, ilk maç y29-37). Hap negatif margin ile 4px yukarı alınır
   (transform DEĞİL — hapın merkezleme transform'unu ezmesin), ilk maç en dipte.
   Satır yükselmez (Task304 kuralı). */
/* Task360 — Task332'nin -5px kaldırması ARTIK GEREKSİZ: hap dikeyde ortalanıyor
   (align-self: center) ve ilk-maç satırı zaten mutlak konumla dipte. Nudge kalınca hap
   5px yukarı kayıyordu (ölçüldü: hapΔ -5). Rövanşlı satırda adlar ORTADA kalır ki
   dipteki ilk-maç satırıyla çakışmasın (ölçüldü: 5px bindirme). */
.cd-compact .live-card.scheduled:has(.lc-agg) .lc-row {
  align-self: center;
}
/* Task361 — Rövanşlı BAŞLAMAMIŞ satırda tarih SOL sütunda ortalıdır (saatle yer
   değiştirdi); orta sütunda saat üstte, ilk maç skoru altında durur. Tarihi alt şeride
   indiren eski deneme KALDIRILDI (dikey ortalamayı bozuyordu — ölçüldü: 14px aşağıda). */
.cd-compact .live-card.scheduled:has(.lc-agg) .lc-agg {
  font-size: 8px;
}
.lc-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: #fff;
  animation: livePulse 2.2s ease-in-out infinite;
}
/* Task453 — HAREKET İPUCU balonu: "sola kaydır" öğretisi. Küçük, ekranın altında,
   kendiliğinden kalkar. El/ok sola kayarak hareketi taklit eder. */
.hint-swipe {
  /* Task453 rev (kullanıcı: "ekranlarda dolaştım ama kapatma animasyonuna rastlayamadım")
     — balon `absolute` iken kabın KAYDIRILABİLİR içerik kutusuna yapışıyordu: uzun bir maç
     detayında ekranın çok altında, görünmez bir yerde doğuyordu (`.modal` fixed + overflow
     auto, `.page-view` uzun). Artık GÖRÜNÜM ALANINA sabit: nerede olursa olsun görünür. */
  /* Task453 rev-2 (kullanıcı: "çok altta kalmış, ekranın orta kısmında görünebilir") —
     ekranın ortasında: gözün zaten olduğu yer. */
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 240; /* modalın (200) üstünde */
  display: inline-flex;
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
  padding: 10px 18px 8px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--panel2) 92%, transparent);
  border: 1px solid var(--line2);
  color: var(--text);
  font-size: 12px;
  font-weight: 700;
  white-space: nowrap;
  pointer-events: none;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.35);
  animation:
    hintIn var(--dur-sm) var(--ease-out),
    hintOut var(--dur-exit) var(--ease-in) 2.8s forwards;
}
.hint-text {
  text-align: center;
}
/* Task453 rev-2 — nokta METNİN ALTINDA kendi şeridinde, YAZI BOYUNCA sağdan sola gider;
   yolu JS şeridin genişliğinden ölçüp `--hint-travel` olarak yazar (metin dile göre
   uzayıp kısalıyor). İlk denemede nokta yazının üstünden geçiyordu, okunmuyordu. */
.hint-track {
  position: relative;
  height: 12px;
}
.hint-hand {
  position: absolute;
  left: 0;
  top: 1px;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 28%, transparent);
  animation: hintSwipeMove 1.9s ease-in-out infinite;
}
@keyframes hintSwipeMove {
  0% {
    transform: translateX(var(--hint-travel, 40px));
    opacity: 0;
  }
  15% {
    opacity: 1;
  }
  75% {
    transform: translateX(0);
    opacity: 1;
  }
  100% {
    transform: translateX(0);
    opacity: 0;
  }
}
@keyframes hintIn {
  from {
    opacity: 0;
    transform: translate(-50%, calc(-50% + 10px));
  }
  to {
    opacity: 1;
    transform: translate(-50%, -50%);
  }
}
@keyframes hintOut {
  to {
    opacity: 0;
  }
}

/* Task446 — turnuva göster/gizle düğmesi (lig başlığında, favori yıldızının yanında).
   Gizliyken üstü çizili göz ve sönük renk: durum tek bakışta okunur. */
.comp-vis-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  padding: 0;
  margin-left: 2px;
  border: 0;
  border-radius: 999px;
  background: none;
  color: var(--muted);
  cursor: pointer;
  flex: none;
}
.comp-vis-btn svg {
  width: 17px;
  height: 17px;
}
/* Task448 — AÇIK: işaretli (vurgu rengi + hafif hâle). Yanındaki favori yıldızı ALTIN
   olduğu için burada vurgu rengi kullanıldı; iki düğme birbirine karışmasın. */
.comp-vis-btn.on {
  color: var(--accent);
  filter: drop-shadow(0 0 5px color-mix(in srgb, var(--accent) 45%, transparent));
}
.comp-vis-btn.off {
  color: var(--red, #e0524d);
}
@media (hover: hover) {
  .comp-vis-btn:hover {
    color: var(--accent);
  }
}

/* Task445 — ÖN PLANA DÖNÜŞ tazelemesi sürerken canlı rozet "bekliyor" görünümüne geçer.
   Kullanıcı: "75. dakikada bıraktım, sabah açtığımda 75'te takılmış gibi göründü…
   refresh saniyesine kadar skorlar takılmış hissi veriyor." Eski dakika CANLI gibi
   durmasın: nabız durur, rozet soluklaşır. Veri gelince kendiliğinden normale döner. */
.veri-tazeleniyor .lc-badge.live,
.veri-tazeleniyor .lc-badge.ht {
  opacity: 0.55;
  filter: saturate(0.6);
  transition: opacity var(--dur-sm) var(--ease-out);
}
.veri-tazeleniyor .lc-dot {
  animation-play-state: paused;
}

.lc-meta {
  font-size: 11px;
  color: var(--muted);
  text-align: right;
  min-width: 0;
  flex: 0 1 auto;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.lc-stage {
  color: var(--accent);
  cursor: pointer;
  font-weight: 700;
  text-decoration: underline dotted;
  text-underline-offset: 2px;
}
@media (hover: hover) {
  .lc-stage:hover {
    color: var(--gold);
  }
}
.lc-row {
  display: flex;
  align-items: center;
  gap: 8px;
  justify-content: center;
  min-width: 0;
}
/* Düzen: isim 🏴 skor : skor 🏴 isim -> orta küme (bayrak+skor) skora yaslı, her maçta hizalı.
   Ev/deplasman yarısı eşit alan; isimler dışa taşar (ev sağa, deplasman sola yaslı). */
.lc-half {
  display: flex;
  align-items: center;
  gap: 7px;
  flex: 1 1 0;
  min-width: 0;
}
.lc-half.home {
  justify-content: flex-end;
}
.lc-half.away {
  justify-content: flex-start;
}
.lc-half img {
  width: 30px;
  height: 21px;
  border-radius: 3px;
  object-fit: cover;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
  flex: none;
}
/* display:block -> team-link'in inline-flex'ini ez ki ellipsis çalışsın (yoksa uzun isim taşar) */
.lc-half .lc-nm {
  display: block;
  font-weight: 800;
  font-size: 14px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
  flex: 0 1 auto;
}
.lc-half.home .lc-nm {
  text-align: right;
}
.lc-half.away .lc-nm {
  text-align: left;
}
.lc-x {
  color: var(--muted);
  font-weight: 800;
  flex: none;
}
/* Task180 — Kullanıcı: "Favori takımların kırmızı çerçevesi hoş durmuyor, tema ile uyumlu
   da değil; onun yerine takvim görünümündeki soldaki sarı çizgi kalsın ve liste görünümüne
   de uygulansın." Kırmızı çerçeve+parıltı (WC'den devralınan kural) kalktı; her iki
   görünümde de takvimdeki ALTIN SOL ŞERİT kullanılır. */
.live-card.fav-match,
.live-card.watch-match {
  position: relative;
  overflow: hidden;
}
.live-card.fav-match::before,
.live-card.watch-match::before {
  content: '';
  position: absolute;
  inset: 0 auto 0 0;
  width: 4px;
  border-radius: 4px 0 0 4px;
  background: var(--gold);
}
/* Task229 — İZLEME listesi: favoriyle aynı dil, FARKLI renk (kullanıcı isteği).
   Mor seçildi: altın (favori), kırmızı (canlı) ve yeşil/mavi (vurgu) ile karışmaz.
   Favori önceliklidir — aynı maç ikisindeyse altın kalır (kural aşağıda). */
.live-card.watch-match::before {
  background: var(--watch, #a06cf0);
}
.live-card.fav-match.watch-match::before {
  background: var(--gold);
}

/* ---------- Grup kartları ---------- */
.groups-grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(auto-fill, minmax(330px, 1fr));
}
.group-card {
  background: linear-gradient(180deg, var(--panel), var(--bg2));
  border: 1px solid var(--line);
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow);
}
.group-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 12px 14px;
  background: linear-gradient(90deg, var(--head-a), var(--head-b));
  border-bottom: 1px solid var(--line);
}
.group-head h3 {
  margin: 0;
  font-size: 16px;
  letter-spacing: 0.5px;
}
.group-head .grp-letter {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 8px;
  background: var(--accent);
  color: #05130c;
  font-weight: 900;
  margin-right: 8px;
}
.group-head .grp-status {
  font-size: 11px;
  color: var(--muted);
}

/* Puan cetveli */
.table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13px;
  table-layout: fixed;
} /* sabit yerleşim: uzun isim puan sütunlarını taşırmaz */
/* İstatistik sütunları DAR sabit genişlik (asla taşmaz); kalan tüm alan isim sütununa kalır, sığmazsa "…" ile kısalır */
.table th:not(.team-col),
.table td:not(.team-col) {
  width: 20px;
  padding-left: 1px;
  padding-right: 1px;
}
.table th.gcol,
.table td.gcol {
  width: 34px;
}
.table th:last-child,
.table td:last-child {
  width: 26px;
} /* Pts: 'Pts' başlığı sığsın (fark isim sütunundan) */
/* Task072 — sayı sütunları içeriğine göre: 20px'te üç haneli değerler (AV "-41", OA "100")
   hücreyi tam dolduruyor ve komşu sütuna değiyordu. Genişlik farkı yalnız isim
   sütunundan alınır (table-layout: fixed) — toplam tablo genişliği değişmez. */
/* Task601 (kullanıcı: "haftalık değişim okları favori yıldızının altında kalmış") — sıra
   sütunu 20px'ti; rozet (18px) yanına ▲/▼ sığmıyor, ok hücreden taşıp komşu hücredeki
   yıldızın altına giriyordu (ölçüldü: ok 30–46, yıldız 27–49). Sütun rozet + ok kadar;
   fark isim sütunundan (table-layout: fixed). */
.table th.c-rank,
.table td.c-rank {
  /* rev (kullanıcı: "oklar beklediğimden çok yer kaplıyor" + "oku olmayan satırlarda sıra
     numaraları kaymış") — sütun 34px (rozet 18 + ok ~12), SOLA yaslı: rozet her satırda aynı
     x'te, ok yalnız sağına eklenir. */
  /* rev-3 (kullanıcı: "oklar sıralamaya yanaşsın, yıldızla arası armayla arası kadar olsun")
     — hücre içeriği kadar: 2 + rozet 18 + 1 + ok 16 = 37px; ok taşmaz, yıldıza değmez. */
  width: 37px;
  text-align: left;
  padding-left: 2px;
  padding-right: 0;
}
.table th.c-n,
.table td.c-n {
  width: 24px;
}
.table th.c-g,
.table td.c-g {
  width: 27px;
}
.table th.c-gd,
.table td.c-gd {
  width: 32px;
}
.table th.c-pts,
.table td.c-pts {
  width: 30px;
}
/* Dar ekranda artış daha ölçülü: genişlik farkı isim sütunundan geliyor ve 360px'te ad
   "Ars…"a kadar iniyordu. Sayılar yine komşusuna değmez (en dar boşluk ölçüldü). */
@media (max-width: 560px) {
  /* Sayılar 1 punto küçülür: aynı görsel boşluk daha dar hücreyle sağlanır ve kazanılan
     yer takım adına gider (kullanıcı: "mobilde takım adına çok az yer kaldı"). */
  #standings .table tbody td.c-n,
  #standings .table tbody td.c-g,
  #standings .table tbody td.c-gd {
    font-size: 12px;
  }
  .table th.c-n,
  .table td.c-n {
    width: 21px;
  }
  .table th.c-g,
  .table td.c-g {
    width: 23px;
  }
  .table th.c-gd,
  .table td.c-gd {
    width: 27px;
  }
  .table th.c-pts,
  .table td.c-pts {
    width: 25px;
  }
  #standings td.team-col,
  #standings th.team-col {
    padding-right: 6px;
    padding-left: 7px; /* Task601 rev-3 — ok→yıldız arası = yıldız→arma arası (6px) */
  }
  /* Ad dışındaki her şey (sıra, yıldız, arma, boşluklar) biraz kısılır — hepsi ada eklenir */
  #standings td.team-col .tc-inner {
    gap: 4px;
  }
  #standings td.team-col img.crest {
    width: 19px;
    height: 19px;
  }
  #standings .team-col .star {
    font-size: 15px; /* Task601 rev-3 — bir tık büyük (13 → 15) */
    padding: 0 1px;
  }
}
.table thead th {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--muted);
  font-weight: 700;
  padding: 8px 4px;
  text-align: center;
  border-bottom: 1px solid var(--line);
}
.table thead th.team-col {
  text-align: left;
  padding-left: 12px;
}
.table tbody td {
  padding: 7px 4px;
  text-align: center;
  border-bottom: 1px solid var(--line);
}
.table tbody td.team-col {
  text-align: left;
  padding-left: 10px;
}
.table tbody tr:last-child td {
  border-bottom: none;
}
.team-cell {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
} /* min-width:0 -> isim sabit sütunda kısalabilsin */
.team-cell img {
  width: 22px;
  height: 16px;
  border-radius: 3px;
  object-fit: cover;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
  flex: none;
}
.team-cell .tn {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
  flex: 1;
  font-weight: 600;
}
.pts {
  font-weight: 800;
  color: var(--pts);
}
.rank-badge {
  display: inline-flex;
  width: 18px;
  height: 18px;
  align-items: center;
  justify-content: center;
  border-radius: 5px;
  font-size: 11px;
  font-weight: 800;
  margin-right: 6px;
  background: var(--chip-bg);
  color: var(--muted);
  border: 1px solid var(--line);
}
/* Task601 rev-3 — puan cetveli sıra hücresinde rozetin sağ marjı yok: ok rozete YANAŞIK
   (kullanıcı); hücre 2 + 18 + 1 + 16 = 37px, taşma yok. */
.table td.c-rank .rank-badge {
  margin-right: 0;
}
tr.qual-1 .rank-badge,
tr.qual-2 .rank-badge {
  background: var(--green);
  color: var(--on-accent);
  border-color: var(--green);
}
tr.qual-1,
tr.qual-2 {
  background: linear-gradient(90deg, rgba(24, 192, 122, 0.16), transparent);
}
tr.qual-3 .rank-badge {
  background: var(--gold);
  color: var(--on-gold);
  border-color: var(--gold);
}
tr.qual-3 {
  background: linear-gradient(90deg, rgba(244, 197, 66, 0.14), transparent);
}
tr.qual-3.third-out {
  background: transparent;
}
tr.qual-3.third-out .rank-badge {
  background: var(--chip-bg);
  color: var(--muted);
  border-color: var(--line);
}

/* Grup maçları */
.gmatches {
  padding: 6px 10px 12px;
}
.gmatch {
  display: grid;
  /* Task322 (kullanıcı) — SOL sütun sabit tabanlı: canlı dakika rozeti ("32'"→"90'+4'")
     genişledikçe satırlar farklı hizaya kayıyordu. 84px en geniş canlı rozeti karşılar;
     tarih de aynı kutuda ortalanır — tüm satırlarda takım/skor aynı x'te. Sağdaki ikon
     kümesi de AÇIK 5. sütundur (örtük sütun satır başına değişebiliyordu). */
  grid-template-columns: minmax(84px, auto) 1fr minmax(56px, auto) 1fr auto;
  align-items: center;
  gap: 6px;
  /* Sol padding TÜM satırlarda eşit (favori maç kaymasın — inset vurgu 4px içeride) */
  padding: 6px 2px 6px 12px;
  border-bottom: 1px dashed var(--line);
}
/* Grup satırı baş sütunu: yatay ikon kümesi ÜSTTE, tarih ALTTA */
.g-lead {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
}
.gmatch:last-child {
  border-bottom: none;
}
.gmatch .gdate {
  font-size: 10px;
  color: var(--muted);
  line-height: 1.1;
}
/* Düzen: isim 🏴 skor : skor 🏴 isim -> orta küme (bayrak+skor) skora yaslı, hizalı */
.side {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}
.side.home {
  justify-content: flex-end;
}
.side.away {
  justify-content: flex-start;
}
.side img {
  width: 20px;
  height: 14px;
  border-radius: 2px;
  object-fit: cover;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
  flex: none;
}
.side .sn {
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
  flex: 0 1 auto;
}
.gmatch > .colon {
  color: var(--muted);
  font-weight: 800;
  flex: none;
  text-align: center;
}
.score-box {
  display: flex;
  align-items: center;
  gap: 4px;
}
.score-box input {
  width: 30px;
  height: 28px;
  text-align: center;
  border-radius: 7px;
  border: 1px solid var(--line2);
  background: var(--input-bg);
  color: var(--input-text);
  font-size: 15px;
  font-weight: 800;
  -moz-appearance: textfield;
}
.score-box input::-webkit-outer-spin-button,
.score-box input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
.score-box input:disabled {
  opacity: 0.85;
  cursor: default;
}
.score-box .colon {
  color: var(--muted);
  font-weight: 800;
}
.score-box input:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 2px rgba(25, 224, 138, 0.25);
}

/* ---------- Eleme bracket (org-chart ağacı) ---------- */
.bracket-scroll {
  overflow-x: auto;
  padding-bottom: 14px;
  -webkit-overflow-scrolling: touch;
}
.bracket {
  min-width: max-content;
  padding: 6px 2px 10px;
}

/* Ağaç: kök (final) sağda, dallar sola. row-reverse ile kart sağda, çocuklar solda. */
.btree {
  display: flex;
}
.bnode {
  display: flex;
  flex-direction: row-reverse;
  align-items: center;
}
.bcard {
  display: flex;
  flex-direction: column;
  margin-left: 30px;
}
.bkids {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

/* Bağlantı çizgileri: her çocuk, kartına doğru bir dirsek çizer */
.bkids > .bnode {
  position: relative;
}
.bkids > .bnode::before {
  /* yatay çizgi (ebeveyne doğru, sağa) */
  content: '';
  position: absolute;
  right: -30px;
  top: 50%;
  width: 30px;
  height: 2px;
  background: var(--line2);
}
.bkids > .bnode::after {
  /* dikey çizgi (kardeşe doğru, ebeveyn ortasına kadar) */
  content: '';
  position: absolute;
  right: -30px;
  width: 2px;
  height: 50%;
  background: var(--line2);
}
.bkids > .bnode:first-child::after {
  top: 50%;
}
.bkids > .bnode:last-child::after {
  top: 0;
}
.bnode > .bcard {
  position: relative;
}

.bround {
  font-size: 10px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: var(--muted);
  text-align: center;
  margin-bottom: 4px;
}
.bround.fn {
  color: var(--gold);
  font-size: 12px;
}

/* 3.lük maçı — ağacın altında ortada */
.thirdplace {
  margin: 24px auto 0;
  width: 240px;
}
.tp-label {
  font-size: 11px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: var(--muted);
  text-align: center;
  margin-bottom: 4px;
}

/* Task355 — Eleme sekmesi geniş ekranda tam genişlik: ağaç dar sütuna sıkışmasın */
.league-grid.brk-wide {
  grid-template-columns: 1fr;
}
.league-grid.brk-wide #standings-section {
  display: none;
}

/* Task355 — Eşleşme kartı (iki ayak tek düğüm): ağaçta ve mobil listede ORTAK.
   Kart kenarına teğet içerik yok; kazanan vurgulu, elenen soluk (advCls dili). */
.bt-card {
  width: 236px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 12px;
  padding: 9px 11px;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.bt-card.bt-done {
  border-color: color-mix(in srgb, var(--gold) 35%, var(--line2));
}
.bt-row {
  display: flex;
  align-items: center;
  gap: 8px;
  min-height: 22px;
}
.bt-team {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
  flex: 1;
  font-size: 13px;
}
.bt-team b {
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bt-team.agg-adv b {
  font-weight: 900;
  color: var(--text);
}
.bt-team.agg-out {
  opacity: 0.55;
}
.bt-crest {
  width: 18px;
  height: 18px;
  object-fit: contain;
  flex: none;
}
.bt-crest-ph {
  border-radius: 50%;
  background: var(--chip-bg);
}
.bt-agg {
  font-weight: 900;
  font-size: 15px;
  color: var(--gold);
  font-variant-numeric: tabular-nums;
  display: inline-flex;
  align-items: baseline;
  gap: 1px;
  flex: none;
}
.bt-agg i {
  font-style: normal;
  opacity: 0.6;
  padding: 0 1px;
}
.bt-agg em {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 800;
  color: var(--muted);
  margin-left: 5px;
}
.bt-agg-tbd {
  color: var(--muted);
}
.bt-legs {
  font-size: 11px;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
/* Şampiyon şeridi: panelin üstünde, altın vurgulu */
.bt-champ {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 12px;
  padding: 8px 12px;
  border-radius: 12px;
  background: color-mix(in srgb, var(--gold) 10%, transparent);
  border: 1px solid color-mix(in srgb, var(--gold) 40%, transparent);
  color: var(--gold);
  font-size: 13px;
  font-weight: 800;
}
.bt-champ svg {
  width: 17px;
  height: 17px;
}
.bt-champ b {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--text);
  font-weight: 900;
}
/* Mobil tur sekmeleri: yatay ağaç telefona sığmaz.
   Task357 rev (kullanıcı: "sağdan taşmış gibi") — önce SIĞDIRMA denenir (dar ekranda
   punto/padding küçülür), sığmazsa uygulamanın KENAR SOLMA standardı (board-scopes ile
   aynı maske) devreye girer: taşma olduğu kenar flulaşır, kaydırılabilirlik anlaşılır. */
.bt-steps {
  display: flex;
  gap: 6px;
  overflow-x: auto;
  padding-bottom: 8px;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.bt-steps::-webkit-scrollbar {
  display: none;
}
.bt-steps.has-more {
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
  mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
}
.bt-steps.has-prev {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 40px);
  mask-image: linear-gradient(90deg, transparent, #000 40px);
}
.bt-steps.has-prev.has-more {
  -webkit-mask-image: linear-gradient(
    90deg,
    transparent,
    #000 40px,
    #000 calc(100% - 40px),
    transparent
  );
  mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent);
}
.bt-step {
  flex: none;
  padding: 6px 12px;
  border-radius: 999px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  color: var(--muted);
  font-size: 12.5px;
  font-weight: 800;
  cursor: pointer;
  white-space: nowrap;
}
/* Dar telefonda (≤430px) beş tur çoğu dilde tek ekrana sığar: punto ve iç boşluk kısılır */
@media (max-width: 460px) {
  .bt-steps {
    gap: 4px;
  }
  .bt-step {
    padding: 6px 9px;
    font-size: 11.5px;
    letter-spacing: -0.1px;
  }
}
.bt-step.on {
  color: var(--accent);
  border-color: var(--accent);
}
.bt-list {
  display: grid;
  gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(236px, 1fr));
}
.bt-list .bt-card {
  width: auto;
}
/* Görsel butonları: başlığın sağında, ikon + metin */
.bracket-dl svg {
  width: 14px;
  height: 14px;
  vertical-align: -2px;
  margin-right: 4px;
}

/* ---------- Bildirim (zil) ---------- */
/* Dil/timezone select'leriyle aynı boy ve stil */
.notif-btn {
  cursor: pointer;
  background: var(--panel2);
  color: var(--muted);
  border: 1px solid var(--line2);
  border-radius: 8px;
  padding: 4px 7px;
  line-height: 0;
  display: inline-flex;
  align-items: center;
}
.notif-btn svg {
  width: 16px;
  height: 16px;
  display: block;
}
.notif-btn:hover {
  border-color: var(--green);
  color: var(--text);
}
.notif-btn.on {
  color: var(--accent);
  border-color: var(--accent);
} /* bildirim açıkken vurgulu */
.notif-panel {
  position: fixed;
  /* Task225 — üst bar çentik payıyla uzuyor; panel de o kadar aşağıdan başlamalı */
  top: calc(58px + var(--sat));
  right: calc(12px + var(--sar));
  z-index: 62;
  width: 250px;
  max-width: 92vw;
  background: var(--card, #121a2b);
  border: 1px solid var(--line2);
  border-radius: 12px;
  padding: 12px 14px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
}
.notif-panel.hidden {
  display: none;
}
.np-head {
  font-weight: 800;
  font-size: 14px;
  margin-bottom: 4px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.np-close {
  cursor: pointer;
  background: transparent;
  border: 0;
  color: var(--muted);
  font-size: 16px;
  line-height: 1;
  padding: 2px 4px;
  border-radius: 6px;
}
.np-close:hover {
  color: var(--text);
  background: rgba(255, 255, 255, 0.06);
}
/* Maç kartı üstü "takip et" zili — izleme (göz) ikonuyla aynı renkler */
.follow-bell {
  cursor: pointer;
  background: transparent;
  border: 0;
  color: var(--line2);
  padding: 4px 7px;
  line-height: 0;
  display: inline-flex;
  align-items: center;
  vertical-align: middle;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}
@media (hover: hover) {
  .follow-bell:hover {
    color: var(--gold);
    transform: scale(1.12);
  }
} /* dokunmatikte yapışkan hover olmasın (göz/wStar gibi) */
.follow-bell.on {
  color: var(--gold);
}
.follow-bell.on svg path {
  fill: currentColor;
  fill-opacity: 0.16;
}
.share-mini {
  cursor: pointer;
  background: transparent;
  border: 0;
  color: var(--line2);
  padding: 4px 7px;
  line-height: 0;
  display: inline-flex;
  align-items: center;
  vertical-align: middle;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}
@media (hover: hover) {
  .share-mini:hover {
    color: var(--gold);
    transform: scale(1.12);
  }
}
/* Detay modal başlığındaki aksiyonlar (zil + paylaş) — sağ üst, kapat (✕) butonunun solunda; taşma yok */
.dt-acts {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 2px;
  /* Task102 — Alt boşluk 2px değil 10px: haber/izleme ikonları takım adı satırının hemen
     üstündeydi ve mobilde deplasman adına yapılan dokunuş haber ekranını açıyordu. */
  margin: 0 38px 10px 0;
  min-height: 22px;
}
.dt-refresh {
  margin-top: 10px;
  background: var(--chip-bg);
  color: var(--text);
  border: 1px solid var(--line2);
  border-radius: 8px;
  padding: 7px 12px;
  font-size: 13px;
  font-weight: 700;
  cursor: pointer;
}
.dt-refresh:hover {
  border-color: var(--green);
}
.dt-refresh:disabled {
  opacity: 0.6;
  cursor: default;
}
.np-desc {
  font-size: 12px;
  color: var(--muted);
  margin-bottom: 8px;
}
.np-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 7px 0;
  border-bottom: 1px solid var(--line);
  font-size: 13.5px;
  font-weight: 600;
  cursor: pointer;
}
.np-row:last-of-type {
  border-bottom: none;
}
.np-cb {
  width: 18px;
  height: 18px;
  accent-color: var(--green);
  cursor: pointer;
}
.np-note {
  font-size: 11px;
  color: var(--muted);
  margin-top: 8px;
  line-height: 1.4;
}

/* ---------- Mobil eleme: tur sekmeleri + kaydırma ---------- */
.kostep {
  width: 100%;
}
.kostep-tabs {
  display: flex;
  gap: 6px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  justify-content: safe center;
  padding: 2px 2px 10px;
  scrollbar-width: none;
}
.kostep-tabs::-webkit-scrollbar {
  display: none;
}
.kostep-tab {
  flex: 0 0 auto;
  cursor: pointer;
  white-space: nowrap;
  background: var(--chip-bg, rgba(255, 255, 255, 0.05));
  color: var(--muted);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 7px 15px;
  font-size: 12.5px;
  font-weight: 700;
  transition: 0.15s;
}
.kostep-tab.active {
  background: var(--accent-fill);
  color: var(--on-accent);
  border-color: var(--green-d);
  box-shadow: 0 3px 12px rgba(24, 192, 122, 0.3);
}
.kostep-viewport {
  overflow: hidden;
}
.kostep-track {
  display: flex;
  transition: transform 0.32s cubic-bezier(0.3, 1, 0.4, 1);
}
.kostep-pane {
  flex: 0 0 100%;
  min-width: 100%;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 2px;
}
.kostep-pane .tie {
  width: 100%;
}
.kostep-pane .tie-team .tt {
  max-width: none;
}
/* Stepper modunda yatay org-chart genişliğini (min-width:max-content) sıfırla */
@media (max-width: 760px) {
  .bracket-scroll {
    overflow-x: hidden;
  }
  .bracket {
    min-width: 0;
    width: 100%;
  }
}

.tie {
  position: relative;
  background: linear-gradient(180deg, var(--panel), var(--bg2));
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 7px;
  box-shadow: var(--shadow);
}
.tie.live {
  border-color: var(--line2);
}
.tie.decided {
  border-color: var(--green-d);
}
.tie.final {
  border-color: var(--gold);
  box-shadow: 0 0 24px rgba(244, 197, 66, 0.25);
}
/* Şu an oynanan eleme maçı: kırmızı çerçeve + parıltı (final dahil; diğer kartlardan ayırt edilir) */
.tie.playing {
  border-color: var(--red);
  box-shadow: 0 0 16px rgba(255, 90, 95, 0.3);
}
.tie-head .tie-live {
  font-size: 10px;
  padding: 2px 7px;
  letter-spacing: 0.4px;
}
.tie-head .tie-live .lc-dot {
  width: 6px;
  height: 6px;
}
.tie-head {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-bottom: 5px;
}
.tie-date {
  flex: 1;
  min-width: 0;
  font-size: 10px;
  color: var(--muted);
  text-align: center;
}
.tie-head .m-acts {
  flex: none;
}
.tie-row {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
  gap: 6px;
  padding: 5px 6px;
  border-radius: 8px;
}
.tie-row + .tie-row {
  margin-top: 4px;
}
.tie-row.win {
  background: linear-gradient(90deg, rgba(24, 192, 122, 0.18), transparent);
}
.tie-row.lose {
  opacity: 0.6;
}
.tie-team {
  display: flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
}
.tie-team img {
  width: 22px;
  height: 15px;
  border-radius: 2px;
  object-fit: cover;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
  flex: none;
}
.tie-team .tt {
  font-size: 13px;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 150px;
}
.tie-team .tt.placeholder {
  color: var(--muted);
  font-style: italic;
  font-weight: 500;
}
.tie-team .flag-ph {
  width: 22px;
  height: 15px;
  border-radius: 2px;
  background: var(--chip-bg);
  border: 1px dashed var(--line2);
  flex: none;
}
.tie-score input {
  width: 30px;
  height: 26px;
  text-align: center;
  border-radius: 6px;
  border: 1px solid var(--line2);
  background: var(--input-bg);
  color: var(--input-text);
  font-weight: 800;
  -moz-appearance: textfield;
}
.tie-score input::-webkit-outer-spin-button,
.tie-score input::-webkit-inner-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
.tie-score input:disabled {
  opacity: 0.85;
}
.tie-score input:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 2px rgba(25, 224, 138, 0.25);
}
.pen-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  margin-top: 6px;
  font-size: 11px;
  color: var(--muted);
}
.pen-row .pen-btn {
  cursor: pointer;
  border: 1px solid var(--line2);
  background: var(--input-bg);
  color: var(--text);
  border-radius: 6px;
  padding: 2px 7px;
  font-size: 11px;
  font-weight: 700;
}
.pen-btn.active {
  background: var(--gold);
  color: #2a1f00;
  border-color: var(--gold);
}
.pen-btn[disabled] {
  cursor: default;
}
.pen-badge {
  font-size: 10px;
  color: var(--gold);
  font-weight: 700;
}
/* Penaltı atış skoru (ESPN) — "Pen: 4 - 3", kazanan kalın/altın */
.pen-row.pen-score {
  color: var(--muted);
  font-weight: 700;
}
.pen-row.pen-score b {
  font-size: 13px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  min-width: 12px;
  text-align: center;
}
.pen-row.pen-score b.pw {
  color: var(--gold);
}
.pen-row.pen-score .pen-dash {
  color: var(--muted);
}
.lc-badge.live.pen {
  background: var(--gold);
  color: #2a1f00;
} /* seri penaltı: altın rozet */
.tie.champ-seed {
  border-color: var(--gold);
}

/* ---------- Topluluk: emoji reaksiyon + anket (eleme) ---------- */
.engage {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid rgba(127, 127, 127, 0.16);
}
.eg-q {
  font-size: 11px;
  font-weight: 700;
  color: var(--muted);
  margin-bottom: 5px;
  text-align: center;
}
.eg-opts {
  display: flex;
  gap: 6px;
}
.eg-opt {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  cursor: pointer;
  border: 1px solid var(--line2);
  background: var(--input-bg);
  color: var(--text);
  border-radius: 8px;
  padding: 6px 8px;
  font-size: 12px;
  font-weight: 700;
  min-width: 0;
}
.eg-opt:hover {
  border-color: var(--gold);
}
.eg-opt img {
  width: 18px;
  height: 13px;
  object-fit: cover;
  border-radius: 2px;
  flex: none;
}
.eg-opt span,
.eg-opt {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.eg-res {
  display: grid;
  grid-template-columns: 1fr 64px 34px;
  align-items: center;
  gap: 7px;
  margin: 3px 0;
  font-size: 11.5px;
}
.eg-res-t {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.eg-res-t img {
  width: 16px;
  height: 12px;
  object-fit: cover;
  border-radius: 2px;
}
.eg-bar {
  height: 7px;
  background: rgba(127, 127, 127, 0.18);
  border-radius: 4px;
  overflow: hidden;
}
.eg-bar i {
  display: block;
  height: 100%;
  background: #5a6273;
  border-radius: 4px;
  transition: width 0.3s;
}
.eg-res.mine .eg-bar i {
  background: var(--gold);
}
.eg-res.mine .eg-res-t {
  color: var(--gold);
  font-weight: 800;
}
.eg-pct {
  text-align: right;
  font-variant-numeric: tabular-nums;
  font-weight: 700;
  color: var(--muted);
}
.eg-tot {
  text-align: center;
  font-size: 10.5px;
  color: var(--muted);
  margin-top: 2px;
}
.eg-emojis {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  justify-content: center;
  margin-top: 8px;
}
.eg-emoji {
  cursor: pointer;
  border: 1px solid transparent;
  background: rgba(127, 127, 127, 0.1);
  border-radius: 10px;
  padding: 3px 4px 2px;
  line-height: 1;
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  min-width: 26px;
}
.eg-emoji:hover {
  background: rgba(127, 127, 127, 0.2);
}
.eg-emoji.on {
  border-color: var(--gold);
  background: rgba(244, 197, 66, 0.16);
}
.eg-emoji .eg-e {
  font-size: 16px;
}
.eg-emoji .eg-c {
  height: 11px;
  line-height: 11px;
  font-size: 10px;
  font-style: normal;
  font-weight: 800;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.eg-emoji.on .eg-c {
  color: var(--gold);
}
/* ＋ ekle butonu + açılır emoji listesi (kart genişlemesin: yalnız eklenenler görünür) */
.eg-add {
  cursor: pointer;
  border: 1px dashed var(--line2);
  background: transparent;
  color: var(--muted);
  border-radius: 999px;
  min-width: 26px;
  height: 24px;
  padding: 0 6px;
  font-size: 16px;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.eg-add:hover {
  border-color: var(--gold);
  color: var(--gold);
}
.eg-picker {
  flex-basis: 100%;
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  justify-content: center;
  margin-top: 6px;
  padding-top: 6px;
  border-top: 1px dashed rgba(127, 127, 127, 0.2);
}
.eg-picker.hidden {
  display: none;
}
.eg-pick {
  font-size: 16px;
  padding: 4px 8px;
}

/* ---------- Seri penaltı takip animasyonu (ekran ortası, 2×, SABİT genişlik) ---------- */
.pk-overlay {
  position: fixed;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
  z-index: 80;
}
.pk-overlay.hidden {
  display: none;
}
.pk-card {
  position: relative;
  box-sizing: border-box;
  width: min(400px, 94vw); /* SABİT: içerikle değişmez */
  background: rgba(12, 22, 38, 0.98);
  border: 2px solid var(--line2);
  border-radius: 22px;
  padding: 24px 28px 22px;
  box-shadow: 0 24px 70px rgba(0, 0, 0, 0.6);
  max-height: 92vh;
  overflow: auto;
}
.pk-card.done {
  border-color: var(--gold);
  box-shadow:
    0 0 0 2px var(--gold),
    0 24px 70px rgba(0, 0, 0, 0.6);
}
.pk-close {
  position: absolute;
  top: 6px;
  right: 12px;
  background: transparent;
  border: 0;
  color: #9fb0c8;
  font-size: 36px;
  line-height: 1;
  cursor: pointer;
  padding: 2px 10px;
}
.pk-close:hover {
  color: #fff;
}
.pk-title {
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 19px;
  font-weight: 900;
  letter-spacing: 0.04em;
  color: var(--gold);
  margin: 0 40px 16px;
}
.pk-team {
  display: grid;
  grid-template-columns: 44px 1fr auto;
  align-items: center;
  column-gap: 12px;
  padding: 8px 0;
}
.pk-flag {
  width: 44px;
  height: 32px;
  object-fit: cover;
  border-radius: 4px;
}
.pk-mid {
  display: flex;
  align-items: baseline;
  gap: 7px;
  min-width: 0;
} /* isim kısalır, etiket tam kalır */
.pk-name {
  font-size: 24px;
  font-weight: 700;
  color: #e8eef7;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}
.pk-kick {
  flex: none;
  white-space: nowrap;
  font-weight: 600;
  font-size: 16px;
  color: var(--gold);
}
.pk-num {
  font-size: 34px;
  font-weight: 900;
  color: #fff;
  font-variant-numeric: tabular-nums;
  min-width: 30px;
  text-align: center;
}
.pk-slots {
  grid-column: 1 / -1;
  display: flex;
  flex-wrap: wrap;
  gap: 9px;
  margin: 7px 0 4px;
}
.pk-slot {
  width: 44px;
  height: 44px;
  flex: none;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 22px;
  border: 2.5px solid #2a3a55;
  background: #0d1626;
  color: #6b7c95;
}
.pk-slot.sc {
  background: #16361f;
  border-color: #2bb24c;
  animation: pkPlop 0.35s ease;
}
.pk-slot.ms {
  background: #3a1414;
  border-color: #e23;
  animation: pkPlop 0.35s ease;
}
.pk-slot.up {
  opacity: 0.5;
}
.pk-slot.cur {
  border-color: var(--gold);
  color: var(--gold);
  animation: pkBlink 0.7s ease-in-out infinite;
}
@keyframes pkPlop {
  0% {
    transform: scale(0.4);
  }
  60% {
    transform: scale(1.25);
  }
  100% {
    transform: scale(1);
  }
}
@keyframes pkBlink {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(244, 197, 66, 0.6);
    background: #0d1626;
  }
  50% {
    box-shadow: 0 0 0 11px rgba(244, 197, 66, 0);
    background: #2a2310;
  }
}
/* GOL/KAÇTI flaşı — body'e eklenir, JS kartın HEMEN ÜSTÜNE konumlar (kartı kapatmaz) */
.pk-flash {
  position: fixed;
  z-index: 90;
  font-size: 40px;
  font-weight: 900;
  padding: 12px 32px;
  border-radius: 16px;
  white-space: nowrap;
  pointer-events: none;
  box-shadow: 0 12px 44px rgba(0, 0, 0, 0.55);
  animation: pkPop 1.4s ease forwards;
  transform: translate(-50%, -100%);
} /* left/top JS ile = kart üst-orta; -100% tam üstte */
.pk-flash.goal {
  background: #16361f;
  color: #4ade80;
  border: 2px solid #2bb24c;
}
.pk-flash.miss {
  background: #3a1414;
  color: #f87171;
  border: 2px solid #e23;
}
@keyframes pkPop {
  0% {
    transform: translate(-50%, -100%) scale(0.5);
    opacity: 0;
  }
  18% {
    transform: translate(-50%, -100%) scale(1.12);
    opacity: 1;
  }
  72% {
    transform: translate(-50%, -100%) scale(1);
    opacity: 1;
  }
  100% {
    transform: translate(-50%, -130%) scale(1);
    opacity: 0;
  }
}
/* Mobil: kart yine SABİT genişlik (94vw), biraz küçük yazı/yuva */
@media (max-width: 560px) {
  .pk-card {
    padding: 18px 18px 16px;
  }
  .pk-title {
    font-size: 15.5px;
    letter-spacing: 0.02em;
    margin: 0 32px 14px;
  }
  .pk-team {
    grid-template-columns: 38px 1fr auto;
    column-gap: 9px;
  }
  .pk-flag {
    width: 38px;
    height: 27px;
  }
  .pk-name {
    font-size: 19px;
  }
  .pk-num {
    font-size: 27px;
    min-width: 26px;
  }
  .pk-slot {
    width: 38px;
    height: 38px;
    font-size: 19px;
    border-width: 2px;
  }
  .pk-slots {
    gap: 7px;
  }
  .pk-flash {
    font-size: 30px;
    padding: 11px 26px;
  }
  .pk-close {
    font-size: 32px;
  }
}

/* ---------- Şampiyon overlay ---------- */
.champion-overlay {
  position: fixed;
  inset: 0;
  z-index: 80;
  display: flex;
  align-items: center;
  justify-content: center;
  background: radial-gradient(circle at 50% 40%, rgba(20, 66, 47, 0.96), rgba(5, 16, 11, 0.98));
}
.champion-overlay.hidden {
  display: none;
}
#confetti {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
.champion-card {
  position: relative;
  text-align: center;
  padding: 30px 40px;
  animation: pop 0.6s cubic-bezier(0.2, 1.4, 0.4, 1);
}
@keyframes pop {
  from {
    transform: scale(0.6);
    opacity: 0;
  }
  to {
    transform: scale(1);
    opacity: 1;
  }
}
/* Türkiye golü kutlaması */
.goal-overlay {
  --goal-color: var(--accent);
  position: fixed;
  inset: 0;
  z-index: 85;
  display: flex;
  align-items: center;
  justify-content: center;
  /* Task225 — kutlama kartı ve Kapat düğmesi sistem alanlarına taşmaz */
  padding: var(--sat) var(--sar) var(--sab) var(--sal);
  box-sizing: border-box;
  /* Takım renginde parıltı (turnuva-agnostik) — JS --goal-color'ı ayarlar */
  background: radial-gradient(
    circle at 50% 38%,
    color-mix(in srgb, var(--goal-color) 42%, transparent),
    rgba(5, 10, 20, 0.93)
  );
}
.goal-overlay.hidden {
  display: none;
}
#goal-balls {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
/* Arkaya ülkeye özgü görsel (emoji) — büyük/soluk, gol yazısı üstünden büyür */
.goal-bg {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  padding-bottom: 5vh;
  font-size: 44vmin;
  line-height: 1;
  opacity: 0.3;
  pointer-events: none;
  transform-origin: 50% 100%;
  filter: drop-shadow(0 0 28px rgba(0, 0, 0, 0.55));
} /* emoji de görseller gibi alt bölgede */
.goal-overlay:not(.hidden) .goal-bg {
  animation: goalBgIn 1s ease-out both;
}
@keyframes goalBgIn {
  from {
    transform: scale(0.5);
  }
  to {
    transform: scale(1);
  }
}
/* Silüet görseli: zemini şeffaf + krem renge boyanmış (PIL ile) -> kutu yok, sayfanın parçası; altta ufuk gibi, soluk */
/* Task305 (kullanıcı) — kutlamanın arkasındaki takım ARMASI ekranı kaplamasın: boyutu
   sınırlı, alt-orta, yarı saydam (emoji varyantının 44vmin'i armaya uygulanmaz). */
.goal-bg img.crest {
  width: min(38vmin, 220px);
  height: min(38vmin, 220px);
  object-fit: contain;
  opacity: 0.85;
}
.goal-bg.has-img {
  opacity: 1;
  font-size: 0;
  filter: none;
}
.goal-bg.has-img img {
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  width: min(100%, 1200px);
  max-height: 60%;
  object-fit: contain;
  object-position: bottom;
  opacity: 0.7;
}
/* Renkli fotoğraf: altta, küçültülmüş; kenarlar back color'a doğru erir (radyal mask) -> kutu yok, sahneye karışır */
.goal-bg.has-photo {
  opacity: 1;
  font-size: 0;
  filter: none;
}
.goal-bg.has-photo img {
  position: absolute;
  left: 50%;
  bottom: 0;
  transform: translateX(-50%);
  width: min(100%, 1050px);
  max-height: 48%;
  object-fit: contain;
  object-position: bottom;
  opacity: 0.8;
  -webkit-mask-image: radial-gradient(135% 115% at 50% 100%, #000 48%, transparent 100%);
  mask-image: radial-gradient(135% 115% at 50% 100%, #000 48%, transparent 100%);
}
.goal-flag {
  height: 0.8em;
  vertical-align: -1px;
  border-radius: 2px;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
  margin-right: 4px;
}
.goal-card {
  position: relative;
  z-index: 1;
  text-align: center;
  padding: 16px 24px;
}
.goal-flames {
  font-size: clamp(38px, 9vw, 78px);
  line-height: 1;
  animation: flameFlick 0.45s ease-in-out infinite alternate;
}
.goal-text {
  font-size: clamp(54px, 16vw, 150px);
  font-weight: 900;
  letter-spacing: 2px;
  line-height: 1;
  margin-top: 4px;
  background: linear-gradient(180deg, #ffe66a 10%, #ff7a1f 55%, #e0140d 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  filter: drop-shadow(0 0 26px rgba(255, 90, 31, 0.65));
  animation: goalPop 0.7s cubic-bezier(0.2, 1.5, 0.4, 1) both;
}
.goal-sub {
  color: #fff;
  font-size: clamp(26px, 6.6vw, 50px);
  font-weight: 800;
  margin-top: 10px;
}
.goal-scorer {
  display: flex;
  gap: 12px;
  justify-content: center;
  align-items: baseline;
  flex-wrap: wrap;
  color: #ffe66a;
  font-size: clamp(24px, 5.6vw, 42px);
  font-weight: 800;
  margin-top: 16px;
}
@keyframes goalPop {
  0% {
    transform: scale(0.15);
    opacity: 0;
  }
  55% {
    transform: scale(1.18);
    opacity: 1;
  }
  100% {
    transform: scale(1);
  }
}
@keyframes flameFlick {
  from {
    transform: scale(1) rotate(-4deg);
    filter: brightness(1);
  }
  to {
    transform: scale(1.14) rotate(4deg);
    filter: brightness(1.3);
  }
}
.champion-trophy {
  font-size: clamp(70px, 16vw, 130px);
  filter: drop-shadow(0 8px 30px rgba(244, 197, 66, 0.6));
  animation: trophy 2.4s ease-in-out infinite;
}
@keyframes trophy {
  0%,
  100% {
    transform: translateY(0) rotate(-3deg);
  }
  50% {
    transform: translateY(-10px) rotate(3deg);
  }
}
.champion-label {
  letter-spacing: 5px;
  font-weight: 800;
  color: var(--gold);
  margin-top: 8px;
  font-size: clamp(13px, 2.6vw, 18px);
}
.champion-flag {
  width: clamp(120px, 26vw, 200px);
  border-radius: 8px;
  margin: 18px auto 10px;
  display: block;
  box-shadow:
    0 10px 40px rgba(0, 0, 0, 0.6),
    0 0 0 3px var(--gold);
  animation: wave 3s ease-in-out infinite;
}
@keyframes wave {
  0%,
  100% {
    transform: rotate(-1.5deg);
  }
  50% {
    transform: rotate(1.5deg);
  }
}
.champion-name {
  font-size: clamp(34px, 9vw, 76px);
  font-weight: 900;
  line-height: 1;
  background: linear-gradient(90deg, #fff, var(--gold));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  text-shadow: 0 6px 30px rgba(244, 197, 66, 0.3);
}
.champion-stars {
  color: var(--gold);
  letter-spacing: 6px;
  margin-top: 12px;
  font-weight: 800;
}
.champion-close {
  margin-top: 26px;
  background: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.25);
  color: #fff;
  padding: 9px 22px;
  border-radius: 10px;
  cursor: pointer;
  font-weight: 700;
}
.champion-close:hover {
  background: rgba(255, 255, 255, 0.2);
}

/* ---------- Açılış seremonisi (geçit töreni) ---------- */
.ceremony-overlay {
  position: fixed;
  inset: 0;
  z-index: 82;
  display: flex;
  align-items: center;
  justify-content: center;
  background: radial-gradient(circle at 50% 35%, rgba(20, 66, 47, 0.97), rgba(5, 16, 11, 0.99));
}
.ceremony-overlay.hidden {
  display: none;
}
#confetti3 {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
.ceremony-card {
  position: relative;
  text-align: center;
  width: min(960px, 98vw);
  padding: 10px;
  animation: pop 0.6s cubic-bezier(0.2, 1.4, 0.4, 1);
}
.ceremony-emoji {
  font-size: clamp(40px, 8vw, 64px);
  filter: drop-shadow(0 6px 20px rgba(244, 197, 66, 0.45));
  animation: trophy 2.4s ease-in-out infinite;
}
.ceremony-title {
  font-size: clamp(24px, 5.5vw, 44px);
  font-weight: 900;
  letter-spacing: 1px;
  margin-top: 4px;
  background: linear-gradient(90deg, #fff, var(--gold));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  text-shadow: 0 6px 30px rgba(244, 197, 66, 0.3);
}
.ceremony-sub {
  color: #cfeede;
  font-size: clamp(13px, 2.6vw, 18px);
  margin-top: 6px;
  font-weight: 600;
}
.ceremony-parade {
  position: relative;
  overflow: hidden;
  width: 100%;
  margin: 22px 0 14px;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.parade-track {
  display: flex;
  gap: 26px;
  width: max-content;
  animation: paradeMarch 45s linear infinite;
}
.ceremony-parade:hover .parade-track {
  animation-play-state: paused;
}
@keyframes paradeMarch {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(-50%);
  }
}
.parade-flag {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  width: 92px;
  flex: none;
}
.parade-flag img {
  width: 74px;
  height: 50px;
  object-fit: cover;
  border-radius: 5px;
  box-shadow:
    0 6px 18px rgba(0, 0, 0, 0.5),
    0 0 0 2px var(--gold);
  animation: wave 3s ease-in-out infinite;
}
.parade-flag span {
  font-size: 12px;
  font-weight: 700;
  color: #eaf5ef;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 92px;
}
.ceremony-count {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 18px;
  justify-content: center;
  align-items: center;
  color: #eaf5ef;
  font-size: clamp(13px, 2.6vw, 17px);
  margin-top: 4px;
}
.ceremony-count b {
  color: var(--gold);
}
.cer-left b {
  font-variant-numeric: tabular-nums;
}

/* ---------- Kupa başlangıç geri sayımı ---------- */
.countdown {
  margin: 14px auto 6px;
  max-width: 760px;
  text-align: center;
  background: linear-gradient(180deg, var(--panel), var(--bg2));
  border: 1px solid var(--line2);
  border-radius: var(--radius);
  padding: 16px 14px;
  box-shadow: var(--shadow);
  animation: cdIn 0.6s cubic-bezier(0.2, 1, 0.3, 1);
}
.countdown.hidden {
  display: none;
}
@keyframes cdIn {
  from {
    opacity: 0;
    transform: translateY(-10px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.cd-head {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  font-weight: 800;
  font-size: clamp(13px, 3vw, 17px);
  color: var(--text);
  letter-spacing: 0.5px;
  text-transform: uppercase;
}
.cd-trophy {
  font-size: 1.35em;
  filter: drop-shadow(0 3px 8px rgba(244, 197, 66, 0.4));
  animation: trophy 2.6s ease-in-out infinite;
}
.cd-boxes {
  display: flex;
  justify-content: center;
  gap: clamp(8px, 2.4vw, 18px);
  margin-top: 12px;
}
.cd-box {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 5px;
  min-width: clamp(56px, 16vw, 88px);
  padding: 12px 6px;
  border-radius: 12px;
  background: var(--input-bg);
  border: 1px solid var(--line);
}
.cd-box b {
  font-size: clamp(28px, 8.5vw, 48px);
  font-weight: 900;
  line-height: 1;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
  text-shadow: 0 3px 16px rgba(0, 0, 0, 0.35);
}
.cd-box span {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--muted);
}
.cd-when {
  margin-top: 11px;
  font-size: 12px;
  color: var(--muted);
}
.cd-d-sep {
  display: none;
}

/* ---------- Favori takım bandı ---------- */
.fav-band {
  display: flex;
  flex-direction: column;
  gap: 8px;
  position: relative;
  max-width: 760px;
  margin: 10px auto 4px;
  padding: 10px 14px;
  background: linear-gradient(90deg, rgba(25, 224, 138, 0.12), var(--panel));
  border: 1px solid var(--line2);
  border-radius: 12px;
  box-shadow: var(--shadow);
}
.fav-band.hidden {
  display: none;
}
.fb-title {
  display: flex;
  align-items: center;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--muted);
  padding-bottom: 9px;
  margin-bottom: 4px;
  border-bottom: 1px solid var(--line);
}
/* Favori bandı: tek tuşla tüm maçları takvime ekle (başlık satırında, sağda; alttaki satırlara yapışmaz) */
.fb-calall {
  margin-left: auto;
  margin-right: 28px;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  background: var(--panel2);
  color: var(--accent);
  border: 1px solid var(--line2);
  border-radius: 999px;
  padding: 4px 11px;
  font-size: 11.5px;
  font-weight: 800;
  line-height: 1.4;
  white-space: nowrap;
}
.fb-calall:hover {
  border-color: var(--green);
  transform: translateY(-1px);
}
@media (max-width: 560px) {
  .fb-calall span {
    display: none;
  }
  .fb-calall {
    padding: 5px 9px;
  }
}
/* Favori bandı köşesi: favori takım seçim ekranını açan ikon */
.fb-edit {
  position: absolute;
  top: 8px;
  right: 10px;
  background: transparent;
  border: 0;
  color: var(--muted);
  cursor: pointer;
  padding: 4px;
  line-height: 0;
  border-radius: 6px;
}
.fb-edit:hover {
  color: var(--accent);
  background: rgba(255, 255, 255, 0.05);
}
.fb-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px 12px;
}
.fb-row + .fb-row {
  border-top: 1px solid var(--line);
  padding-top: 8px;
}
.fb-star {
  font-size: 18px;
}
.fb-team {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 15px;
}
.fb-team img {
  width: 26px;
  height: 18px;
  object-fit: cover;
  border-radius: 3px;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.35);
}
.fb-info {
  color: var(--text);
  font-size: 13px;
}
.fb-info b {
  color: var(--accent);
}
.fb-left {
  font-variant-numeric: tabular-nums;
  color: var(--gold);
  font-weight: 800;
}
.fb-ics {
  margin-left: auto;
  cursor: pointer;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--text);
  border-radius: 9px;
  padding: 6px 12px;
  font-weight: 700;
  font-size: 13px;
  transition: 0.15s;
  white-space: nowrap;
}
.fb-ics:hover {
  border-color: var(--accent);
  transform: translateY(-1px);
}
.fb-ics.added {
  color: var(--accent);
  border-color: var(--accent);
  background: rgba(25, 224, 138, 0.1);
}
.fb-pick {
  cursor: pointer;
  background: transparent;
  border: 0;
  color: var(--accent);
  font-weight: 800;
  font-size: 14px;
  padding: 2px 0;
  text-decoration: underline;
}
.fb-empty {
  color: var(--muted);
  font-size: 13px;
  padding: 2px 2px;
}
.fb-all {
  display: block;
  width: fit-content;
  margin: 4px auto 0;
  cursor: pointer;
  background: var(--panel2);
  border: 1px solid var(--line2);
  color: var(--accent);
  border-radius: 999px;
  padding: 5px 14px;
  font-weight: 700;
  font-size: 12px;
  transition: 0.12s;
}
.fb-all:hover {
  border-color: var(--accent);
}
.wm-row {
  display: flex;
  flex-direction: column;
  gap: 5px;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.wm-stage {
  font-size: 10px;
  font-weight: 800;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.3px;
}
.wm-main {
  display: flex;
  align-items: center;
  gap: 10px;
}
.wm-teams {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 13.5px;
}
.wm-main .tm-right {
  white-space: nowrap;
}
.watch-clear {
  display: block;
  margin: 0 0 10px auto;
  cursor: pointer;
  background: transparent;
  border: 1px solid var(--line2);
  color: var(--red);
  border-radius: 999px;
  padding: 4px 12px;
  font-size: 12px;
  font-weight: 700;
}
.watch-clear:hover {
  border-color: var(--red);
}

/* ---------- İlk ziyaret: favori takım seçici ---------- */
.fav-card {
  width: min(94vw, 470px);
}
.fav-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(96px, 1fr));
  gap: 8px;
  max-height: 52vh;
  overflow-y: auto;
  margin: 6px 0;
  padding: 2px;
}
.fav-chip {
  display: flex;
  align-items: center;
  gap: 7px;
  cursor: pointer;
  text-align: left;
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 10px;
  padding: 7px 8px;
  color: var(--text);
  font-size: 12px;
  font-weight: 600;
  transition: 0.12s;
}
.fav-chip img {
  width: 22px;
  height: 15px;
  object-fit: cover;
  border-radius: 3px;
  flex: none;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.35);
}
.fav-chip span {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fav-chip:hover {
  border-color: var(--green);
}
.fav-chip.on {
  border-color: var(--accent);
  background: rgba(25, 224, 138, 0.16);
  box-shadow: inset 0 0 0 1px var(--accent);
}

/* ---------- Takım turnuva programı popup ---------- */
.team-link {
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}
/* Puan durumu / grup / eleme takım adları tıklanabilir (takım popup'ı) — display değişmez, ellipsis korunur */
.tn-link {
  cursor: pointer;
}
@media (hover: hover) {
  .tn-link:hover {
    text-decoration: underline;
  }
}
.team-link:hover b {
  text-decoration: underline;
}
.team-link img {
  width: 24px;
  height: 16px;
  object-fit: cover;
  border-radius: 3px;
  flex: none;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.35);
}
.team-link b {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.team-card {
  width: min(94vw, 480px);
  max-height: 86vh;
  overflow-y: auto;
  position: relative;
}
.tm-close {
  position: sticky; /* kart içinde kaydırılsa da hep görünür (üst-sağ) */
  top: -6px;
  z-index: 5;
  width: 36px;
  height: 36px;
  display: flex;
  align-items: center;
  justify-content: center;
  /* float DEĞİL: float:right içeriği sağdan daraltıp ortalamayı bozuyordu. Blok + margin-left:auto
     ile X sağa yaslanır, içerik tam genişlikte ortalı kalır; negatif alt margin ile aşağıdaki
     içerik X'in altından başlar (X üst-sağ köşede içeriğin üstüne biner, kaydırmada sabit kalır). */
  margin: -10px -8px -32px auto;
  background: var(--panel2);
  border: 1px solid var(--line);
  border-radius: 50%;
  color: var(--muted);
  font-size: 19px;
  cursor: pointer;
  line-height: 1;
}
.tm-close:hover {
  color: var(--text);
  border-color: var(--accent);
}
.tm-head {
  display: flex;
  align-items: center;
  gap: 12px;
  margin: 2px 0 14px;
}
.tm-head img {
  width: 46px;
  height: 31px;
  object-fit: cover;
  border-radius: 4px;
  flex: none;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
}
.tm-name {
  font-size: 20px;
  font-weight: 900;
  line-height: 1.1;
}
.tm-sub {
  font-size: 12px;
  color: var(--muted);
  margin-top: 2px;
}
.tm-body {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.tm-row {
  display: grid;
  grid-template-columns: auto 1fr auto auto;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.tm-stage {
  font-size: 10px;
  font-weight: 800;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.3px;
  white-space: nowrap;
}
.tm-opp {
  display: flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
}
.tm-opp img {
  width: 22px;
  height: 15px;
  object-fit: cover;
  border-radius: 3px;
  flex: none;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.35);
}
.tm-opp span {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-weight: 600;
  font-size: 13px;
}
.tm-right {
  text-align: right;
  white-space: nowrap;
}
.tm-when {
  font-size: 10px;
  color: var(--muted);
  margin-right: 8px;
}
.tm-score {
  font-weight: 900;
  font-size: 15px;
}
.tm-score.win {
  color: var(--green);
}
.tm-score.loss {
  color: var(--red);
}
.tm-score.draw {
  color: var(--gold);
}
/* Sonuç harf rozeti: G/B/M (W/D/L) — renge ek net gösterge */
.tm-res {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  border-radius: 5px;
  font-size: 11px;
  font-weight: 900;
  color: #fff;
  margin-right: 7px;
  flex: none;
}
.tm-res.win {
  background: var(--green);
}
.tm-res.loss {
  background: var(--red);
}
.tm-res.draw {
  background: var(--gold);
  color: #1a1206;
}
.tm-time {
  font-size: 11px;
  color: var(--muted);
}
.tm-tbd {
  color: var(--muted);
  font-style: italic;
  font-size: 13px;
}

/* ---------- Maç detayı (gol/kart) popup'ı + işaretler ---------- */
.dt-i {
  cursor: pointer;
  color: var(--accent);
  font-size: 11px;
  margin-left: 3px;
  opacity: 0.8;
}
.dt-i:hover {
  opacity: 1;
}
.gmatch.has-detail,
.tie.has-detail,
.live-card.has-detail {
  cursor: pointer;
}
.has-detail .team-link,
.has-detail .wstar {
  cursor: pointer;
} /* kendi tıklanabilirlikleri */
/* Kırmızı kart işareti: bayrağın altında küçük kart + ×N rozeti */
.flag-wrap {
  position: relative;
  display: inline-flex;
  flex: none;
  line-height: 0;
}
/* Bayrağın tam ÜSTÜNDE, opak zeminli okunaklı rozet — bayrağı kapatmaz */
.rc-badge {
  position: absolute;
  left: 50%;
  bottom: 100%;
  transform: translateX(-50%);
  margin-bottom: -4px; /* logonun üst kısmına birkaç px binsin (kullanıcı isteği) */
  display: inline-flex;
  align-items: center;
  gap: 2px;
  background: #0e1626;
  border: 1px solid rgba(255, 255, 255, 0.3);
  border-radius: 4px;
  padding: 0 3px 0 2px;
  font-size: 9px;
  font-weight: 800;
  color: #fff;
  line-height: 1.4;
  white-space: nowrap;
  pointer-events: none;
  z-index: 3;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.55);
}
.rc-badge .rc {
  width: 5px;
  height: 8px;
  border-radius: 1.5px;
  background: #e0322f;
  box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.5);
  display: inline-block;
}
/* Task306 (kullanıcı) — compact satırda kırmızı kart ADIN YANINDA: normal görünümde
   arma üstü rozet kalır (lc-rc gizli), compact'ta tersine döner. Tek kartta sayı yok. */
.lc-rc {
  display: none;
  align-items: center;
  gap: 1px;
  font-size: 9px;
  font-weight: 800;
  color: var(--muted);
  white-space: nowrap;
  flex: none;
}
.lc-rc .rc {
  width: 6px;
  height: 9px;
  border-radius: 1.5px;
  background: #e0322f;
  box-shadow: 0 0 0 0.5px rgba(0, 0, 0, 0.5);
  display: inline-block;
}
.cd-compact .live-card .lc-rc {
  display: inline-flex;
}
.cd-compact .live-card .rc-badge {
  display: none;
}

/* ---------- Canlı skor vurgusu (WC deseni, 15 sn) — gol olan maç yeşil ince çizgi ----- */
.gmatch.just-updated,
.tie.just-updated,
.live-card.just-updated {
  border-radius: 10px;
  box-shadow:
    0 0 0 2px rgba(25, 224, 138, 0.55),
    0 0 16px rgba(25, 224, 138, 0.35);
  animation: upd-pulse 1.1s ease-in-out 2;
}
/* Task309 (kullanıcı) — gol vurgusunda SKORUN KENDİSİ de renklenir: canlı maç gösterimi
   olan her yerde (kart, kompakt satır, fikstür satırı, canlı bant, takvim) 15 sn'lik
   vurgu penceresi boyunca rakamlar aksan renginde parlar. */
.gmatch.just-updated .gscore b,
.gmatch.just-updated .gscore .colon,
.live-card.just-updated .score-box b,
.live-card.just-updated .lc-x,
.tie.just-updated .score b {
  color: var(--accent);
  text-shadow: 0 0 10px rgba(25, 224, 138, 0.45);
  /* Task319 (kullanıcı) — rakamlar kenar çizgisiyle AYNI ritimde yanıp söner
     (upd-pulse ile eş süre/sayı); nabızlar bitince renk vurgusu 15 sn sürer. */
  animation: skor-pulse 1.1s ease-in-out 2;
}
@keyframes skor-pulse {
  0%,
  100% {
    opacity: 1;
    text-shadow: 0 0 8px rgba(25, 224, 138, 0.35);
  }
  50% {
    opacity: 0.45;
    text-shadow: 0 0 18px rgba(25, 224, 138, 0.95);
  }
}
@media (prefers-reduced-motion: reduce) {
  .gmatch.just-updated .gscore b,
  .gmatch.just-updated .gscore .colon,
  .live-card.just-updated .score-box b,
  .live-card.just-updated .lc-x,
  .tie.just-updated .score b {
    animation: none;
  }
}
@keyframes upd-pulse {
  0%,
  100% {
    box-shadow:
      0 0 0 2px rgba(25, 224, 138, 0.5),
      0 0 14px rgba(25, 224, 138, 0.3);
  }
  50% {
    box-shadow:
      0 0 0 3px rgba(25, 224, 138, 0.95),
      0 0 28px rgba(25, 224, 138, 0.75);
  }
}
/* Puan durumu satır vurgusu (içe parıltı; mevcut zemini bozmaz) */
tr.just-updated-row td {
  box-shadow: inset 0 0 12px rgba(25, 224, 138, 0.25);
  animation: row-pulse 1.1s ease-in-out 2;
}
tr.just-updated-row td:first-child {
  box-shadow:
    inset 3px 0 0 var(--accent),
    inset 0 0 12px rgba(25, 224, 138, 0.25);
}
@keyframes row-pulse {
  0%,
  100% {
    box-shadow: inset 0 0 12px rgba(25, 224, 138, 0.25);
  }
  50% {
    box-shadow: inset 0 0 26px rgba(25, 224, 138, 0.6);
  }
}
@media (prefers-reduced-motion: reduce) {
  .gmatch.just-updated,
  .tie.just-updated,
  .live-card.just-updated,
  tr.just-updated-row td {
    animation: none;
  }
}
/* Salt-okunur skor input'u dokunuşu yutmasın -> kart dokunma hedefi güvenilir olsun */
.stepper.ro input {
  pointer-events: none;
}
.dt-head {
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
  margin-top: 20px;
} /* ✕'e yapışmasın */
/* Skor satırı, sağ-üstteki mutlak ✕ ile 2. takım logosu çakışmasın diye içeri alınır
   (simetrik boşluk → ortalama korunur; skorio-head ayrı, etkilenmez). */
.dt-head .dt-score {
  padding: 0 34px;
}
.dt-score {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
}
.dt-score b {
  font-size: 22px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  flex: none;
}
.dt-tm {
  display: flex;
  align-items: center;
  gap: 7px;
  font-weight: 700;
  font-size: 14px;
  min-width: 0;
  flex: 1;
}
.dt-tm.away {
  justify-content: flex-end;
}
.dt-tm img {
  width: 26px;
  height: 18px;
  object-fit: cover;
  border-radius: 3px;
  flex: none;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.35);
}
.dt-tm span {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Task062: yukarıdaki kural takım ADINI kısaltmak için; ama .flag-wrap de bir <span> olduğundan
   kırmızı kart rozetinin logo üstüne taşan kısmını da kırpıyordu (özgüllüğü .flag-wrap'ten
   yüksek). Rozet maç kartlarındakiyle aynı şekilde tam görünsün. */
.dt-tm .flag-wrap {
  overflow: visible;
}
.dt-head .tm-sub {
  text-align: center;
}
.dt-row {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 7px 6px;
  border-bottom: 1px solid var(--line);
  font-size: 14px;
}
.dt-row:last-child {
  border-bottom: none;
}
.dt-row.a {
  flex-direction: row-reverse;
  text-align: right;
}
.dt-ic {
  flex: none;
  width: 20px;
  text-align: center;
}
.dt-min {
  color: var(--muted);
  font-variant-numeric: tabular-nums;
  min-width: 38px;
  flex: none;
}
.dt-row.a .dt-min {
  text-align: right;
}
.dt-pl {
  flex: 1;
  min-width: 0;
}
/* Değişiklik satırı: giren/çıkan alt alta (taşmaz), biraz küçük font */
.dt-subwrap {
  display: inline-flex;
  flex-direction: column;
  gap: 1px;
  line-height: 1.18;
  font-size: 13px;
}
.dt-row.a .dt-subwrap {
  align-items: flex-end;
}
.dt-subin {
  color: #2ecc71;
  white-space: nowrap;
}
.dt-subout {
  color: #e0584f;
  white-space: nowrap;
}

/* ---------- Kadro / diziliş (Detaylar | Kadro sekmeleri) ---------- */
/* Task064: zemin/kenarlık sabit yeşil yazılmıştı ama renk `--green` token'ından geliyordu;
   takım-renkleri temasında token maviye döndüğü için MAVİ ikon + YEŞİL hap çıkıyordu.
   Üçü de aynı token'dan türetiliyor → her temada tutarlı. */
.lu-sign {
  cursor: pointer;
  color: var(--green);
  font-size: 11px;
  font-weight: 700;
  margin-left: 5px;
  background: color-mix(in srgb, var(--green) 14%, transparent);
  border: 1px solid color-mix(in srgb, var(--green) 35%, transparent);
  border-radius: 999px;
  padding: 1px 7px;
  white-space: nowrap;
}
.lu-sign:hover {
  background: color-mix(in srgb, var(--green) 24%, transparent);
}
/* Task064 — WC'de bu işaret 👥 emojisiydi; CupDaily'de tema-uyumlu SVG (CLAUDE.md ilke 3).
   Hap tasarımı korunuyor, yalnız SVG'nin hizası/boyutu ayarlanıyor. */
.lu-sign svg {
  width: 13px;
  height: 13px;
  vertical-align: -2px;
}
.dt-tabs {
  display: flex;
  gap: 6px;
  margin-bottom: 10px;
}
.dt-tab {
  flex: 1;
  cursor: pointer;
  background: var(--card-2, rgba(255, 255, 255, 0.04));
  color: var(--muted);
  border: 1px solid var(--line);
  border-radius: 9px;
  padding: 8px;
  font-weight: 700;
  font-size: 13px;
  white-space: nowrap; /* etiket ikinci satıra sarkmasın (Skorinho: Puan Durumu/Tahminlerim…) */
  transition: 0.15s;
}
@media (max-width: 460px) {
  .dt-tab {
    font-size: 11.5px;
    padding: 8px 4px;
  }
}
.dt-tab.active {
  background: var(--accent-fill);
  color: var(--on-accent);
  border-color: var(--green-d);
}
.dt-pane.hidden {
  display: none;
}
/* Sekmeli detay popup'ı: panel sabit yükseklik + iç kaydırma -> boyut sabit kalır */
.modal-card.dt-fixed .dt-pane {
  height: 58vh;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
}
/* Maç istatistikleri: ev–deplasman karşılaştırmalı çubuklar */
.ms-row {
  padding: 8px 2px;
}
.ms-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 5px;
}
.ms-label {
  font-size: 12px;
  color: var(--muted);
  font-weight: 700;
  text-align: center;
  flex: 1;
}
.ms-h,
.ms-a {
  font-size: 14px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  min-width: 40px;
}
.ms-h {
  text-align: left;
}
.ms-a {
  text-align: right;
}
.ms-bar {
  display: flex;
  height: 7px;
  border-radius: 4px;
  overflow: hidden;
  background: var(--line);
}
/* Ev/deplasman için tema-bağımsız kontrast renkler (navy'de --green ve --accent ikisi de mavi) */
.ms-bh {
  background: #2ecc71;
  height: 100%;
}
.ms-ba {
  background: #f5a524;
  height: 100%;
}
.ms-h {
  color: #2ecc71;
}
.ms-a {
  color: #f5a524;
}
/* Oyuncu değişiklikleri */
.ms-subs-h {
  margin: 14px 0 6px;
  font-size: 12px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--muted);
}
.ms-subs {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px 14px;
}
.ms-sub {
  display: flex;
  gap: 6px;
  font-size: 12px;
  padding: 3px 0;
  align-items: baseline;
}
.ms-min {
  color: var(--muted);
  font-variant-numeric: tabular-nums;
  min-width: 28px;
  flex: none;
}
.ms-io {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 0;
}
.ms-in {
  color: #2ecc71;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ms-out {
  color: #e0584f;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.lu-switch {
  display: flex;
  gap: 6px;
  margin-bottom: 12px;
}
.lu-team-btn {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  cursor: pointer;
  background: var(--card-2, rgba(255, 255, 255, 0.04));
  color: var(--text);
  border: 1px solid var(--line);
  border-radius: 9px;
  padding: 7px 8px;
  font-weight: 700;
  font-size: 12px;
  min-width: 0;
}
/* Task154 — Kullanıcı: "diziliş yanındaki takım logoları bazen taşıyor, logo yüksekliğe
   göre ayarlanmalı." Kutu 22x15 (bayrak/lig logosu ölçüsü) ve `cover` idi: kare armalar
   KIRPILIYOR, geniş olanlar kutuyu zorluyordu. Artık YÜKSEKLİK sabit, genişlik oranla
   gelir ve `contain` ile hiçbir arma kırpılmaz. */
.lu-team-btn img {
  width: auto;
  height: 18px;
  max-width: 26px;
  object-fit: contain;
  border-radius: 0;
  flex: none;
  box-shadow: none;
}
.lu-team-btn.active {
  border-color: var(--green);
  box-shadow: 0 0 0 1px var(--green) inset;
}
.lu-form {
  color: var(--muted);
  font-variant-numeric: tabular-nums;
  font-size: 11px;
  white-space: nowrap; /* "4-2-3-1*" düğme içinde satır atlıyordu */
}
/* Task116 — Diziliş bu maçtan DEĞİL (en yakın maçtan ya da varsayılan): yıldızlı ve
   kesikli altı çizili; açıklaması ipucunda. Türetilmiş bilgi kaynak veri gibi durmaz. */
.lu-form-approx {
  text-decoration: underline dotted;
  text-underline-offset: 3px;
  cursor: help;
}
/* Task317 (kullanıcı) — saha sağ üstünde paylaş: zemin her temada YEŞİL olduğundan
   düğme yarı saydam koyu daire + beyaz ikondur (tema değişkenine bağlanmaz). */
.lu-share {
  position: absolute;
  top: 8px;
  right: 8px;
  z-index: 6;
  width: 30px;
  height: 30px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.35);
  background: rgba(0, 0, 0, 0.35);
  color: #fff;
  cursor: pointer;
  padding: 0;
}
.lu-share:hover {
  background: rgba(0, 0, 0, 0.55);
}
/* Paylaşım penceresi: yalnız saha görseli — klon ETKİLEŞİMSİZ (oyuncu tıklanmaz) */
.lushare-card {
  max-width: 440px;
}
#lushare-head h2 {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0;
}
#lushare-head {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding-right: 44px; /* ✕ ile çakışmasın (ilke 4) */
}
.lushare-pitch {
  pointer-events: none;
}
.lushare-pitch .lu-pitch {
  margin: 0;
}
.lushare-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  margin: 12px auto 2px;
}
.lu-pitch {
  position: relative;
  background: repeating-linear-gradient(0deg, #1f8a4c 0 38px, #1c7f46 38px 76px);
  border: 2px solid rgba(255, 255, 255, 0.25);
  border-radius: 12px;
  padding: 14px 8px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: 6px;
  min-height: 460px;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
  overflow: hidden;
}
.lu-pitch::before {
  content: '';
  position: absolute;
  left: 8%;
  right: 8%;
  top: 50%;
  border-top: 2px solid rgba(255, 255, 255, 0.22);
}
.lu-pitch::after {
  content: '';
  position: absolute;
  left: 50%;
  top: 50%;
  width: 64px;
  height: 64px;
  transform: translate(-50%, -50%);
  border: 2px solid rgba(255, 255, 255, 0.22);
  border-radius: 50%;
}
.lu-line {
  display: flex;
  justify-content: center;
  align-items: flex-start;
  position: relative;
  z-index: 1;
}
.lu-pl {
  width: calc(100% / var(--cols, 4));
  box-sizing: border-box;
  /* Task405 rev — oyuncu (ve reyting rozeti) saha üstündeki anahtarın ÜSTÜNDE kalır */
  position: relative;
  z-index: 2;
  padding: 0 2px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
} /* eşit slot -> dar satırlar geniş satırın orta slotlarıyla hizalanır */
.lu-num {
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #fff;
  color: #06120b;
  font-weight: 800;
  font-size: 12px;
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4);
}
.lu-nm {
  font-size: 10px;
  font-weight: 700;
  color: #fff;
  text-align: center;
  line-height: 1.1;
  text-shadow: 0 1px 3px rgba(0, 0, 0, 0.8);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 76px;
}
/* Task434 (kullanıcı: "ortalama yaş yazıları bile okunamıyor") — hazırlık maçlarında
   bir hat BEŞ kişiye çıkabiliyor; slot daralınca isim ve nitelik rozeti okunmaz oluyordu.
   Geniş satırda yazı küçülür ve rozet oyuncunun altına toplanır. */
.lu-pitch[style*='--cols:5'] .lu-nm,
.lu-pitch[style*='--cols:6'] .lu-nm,
.lu-pitch[style*='--cols:7'] .lu-nm {
  font-size: 9px;
  max-width: 100%;
}
.lu-pitch[style*='--cols:5'] .lu-av-meta,
.lu-pitch[style*='--cols:6'] .lu-av-meta,
.lu-pitch[style*='--cols:7'] .lu-av-meta {
  left: 50%;
  transform: translateX(-50%);
  max-width: 100%;
  font-size: 8px;
}

.lu-bench {
  margin-top: 12px;
}
.lu-bench-h {
  font-size: 12px;
  font-weight: 800;
  color: var(--muted);
  margin-bottom: 6px;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.lu-bench-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.lu-bp {
  font-size: 11px;
  background: var(--card-2, rgba(255, 255, 255, 0.05));
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 3px 8px;
  white-space: nowrap;
}
.lu-bp b {
  color: var(--green);
}

/* ---------- Sol alt: Paylaş / Yükle ---------- */
.fab-stack {
  position: fixed;
  left: 14px;
  /* Task416 — alta yapışan yüzen öğeler görünür alanın dibinden ölçülür (uygulama-içi
     tarayıcıda düzen alanı daha yüksek; normal tarayıcıda --vvb sıfırdır). */
  bottom: calc(14px + var(--vvb, 0px));
  z-index: 56;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.fab-btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  cursor: pointer;
  background: var(--accent-fill);
  color: var(--on-accent);
  border: 1px solid var(--green-d);
  border-radius: 999px;
  padding: 9px 15px;
  font-weight: 800;
  font-size: 13px;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.4);
  transition: 0.15s;
}
.fab-btn:hover {
  transform: translateY(-2px);
}
.fab-btn.hidden {
  display: none;
}
.fab-lbl {
  font-size: 13px;
}
@media (max-width: 520px) {
  .fab-lbl {
    display: none;
  }
  .fab-btn {
    padding: 11px;
    font-size: 16px;
  }
}

/* ---------- iPhone kurulum ipucu ---------- */
.ios-install {
  position: fixed;
  right: 10px;
  left: auto;
  /* Task416 — alta yapışan yüzen öğeler görünür alanın dibinden ölçülür (uygulama-içi
     tarayıcıda düzen alanı daha yüksek; normal tarayıcıda --vvb sıfırdır). */
  bottom: calc(37px + var(--vvb, 0px));
  z-index: 60;
  max-width: min(92vw, 440px);
  display: flex;
  align-items: center;
  gap: 10px;
  background: var(--panel);
  color: var(--text);
  border: 1px solid var(--accent);
  border-radius: 14px;
  padding: 12px 34px 12px 14px;
  box-shadow: 0 12px 34px rgba(0, 0, 0, 0.5);
  font-size: 13px;
  font-weight: 600;
  line-height: 1.35;
  animation: cdIn 0.5s ease;
}
.ios-install.hidden {
  display: none;
}
.ios-x {
  position: absolute;
  top: 5px;
  right: 8px;
  background: transparent;
  border: 0;
  color: var(--muted);
  font-size: 14px;
  cursor: pointer;
  line-height: 1;
}
.ios-share-ico {
  color: var(--accent);
  flex: none;
  display: inline-flex;
  align-items: center;
}
/* Aşağı bakan zıplayan ok — Safari Paylaş düğmesini gösterir (ekranın sağ-altı, ~7/8 genişlik) */
.ios-arrow {
  position: fixed;
  left: 84.4%;
  bottom: 6px;
  transform: translateX(-50%);
  color: var(--accent);
  font-size: 42px;
  line-height: 1;
  font-weight: 900;
  text-shadow: 0 2px 8px rgba(0, 0, 0, 0.55);
  pointer-events: none;
  animation: iosBounce 1.2s ease-in-out infinite;
}
@keyframes iosBounce {
  0%,
  100% {
    transform: translateX(-50%) translateY(0);
  }
  50% {
    transform: translateX(-50%) translateY(8px);
  }
}

/* ---------- Haberler: ikon + sağ çekmece ---------- */
.news-btn {
  position: fixed;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
  z-index: 55;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  background: var(--accent-fill);
  color: var(--on-accent);
  border: 1px solid var(--green-d);
  border-right: none;
  border-radius: 12px 0 0 12px;
  padding: 12px 8px;
  cursor: pointer;
  box-shadow: -4px 4px 18px rgba(0, 0, 0, 0.4);
  font-weight: 800;
}
.news-btn {
  transition: opacity 0.25s ease;
}
body.detail-open .news-btn {
  opacity: 0;
  pointer-events: none;
} /* maç detayı açıkken Haberler butonu gizli (X'i kapatmasın) */
.news-btn:hover {
  padding-right: 12px;
}
.news-ico {
  font-size: 20px;
}
.news-lbl {
  font-size: 11px;
  writing-mode: vertical-rl;
  text-orientation: mixed;
  letter-spacing: 1px;
}
.news-overlay {
  position: fixed;
  inset: 0;
  z-index: 73;
  background: rgba(0, 0, 0, 0.5);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.3s;
}
.news-overlay.show {
  opacity: 1;
  pointer-events: auto;
}
.news-drawer {
  position: fixed;
  top: 0;
  right: 0;
  z-index: 74;
  height: 100%;
  width: min(380px, 92vw);
  background: linear-gradient(180deg, var(--panel), var(--bg));
  border-left: 1px solid var(--line2);
  box-shadow: -10px 0 40px rgba(0, 0, 0, 0.5);
  transform: translateX(100%);
  transition: transform 0.32s cubic-bezier(0.3, 1, 0.4, 1);
  display: flex;
  flex-direction: column;
}
.news-drawer.open {
  transform: translateX(0);
}
.nd-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 16px 18px;
  border-bottom: 1px solid var(--line);
}
.nd-title {
  font-size: 17px;
  font-weight: 800;
}
.nd-close {
  background: transparent;
  border: 1px solid var(--line2);
  color: var(--text);
  width: 32px;
  height: 32px;
  border-radius: 8px;
  cursor: pointer;
  font-size: 15px;
}
.nd-close:hover {
  border-color: var(--green);
}
.nd-body {
  flex: 1;
  overflow-y: auto;
  padding: 8px 14px 14px;
}
.nd-foot {
  padding: 10px 16px;
  border-top: 1px solid var(--line);
  color: var(--muted);
  font-size: 11px;
}
.nd-sec {
  border-bottom: 1px solid var(--line);
}
.nd-sec > summary {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 4px;
  font-size: 15px;
  font-weight: 800;
}
.nd-sec > summary::-webkit-details-marker {
  display: none;
}
.nd-sec > summary::before {
  content: '▸';
  margin-right: 8px;
  color: var(--accent);
  transition: transform 0.2s;
}
.nd-sec[open] > summary::before {
  transform: rotate(90deg);
}
.nd-count {
  font-size: 11px;
  font-weight: 700;
  color: var(--muted);
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 999px;
  padding: 2px 9px;
}
.nd-list {
  padding-bottom: 10px;
}
.nd-empty {
  color: var(--muted);
  font-size: 13px;
  padding: 6px 6px 14px;
}
.news-match {
  background: var(--panel2);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 10px 12px;
  margin-bottom: 10px;
}
.nm-teams {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 14px;
  flex-wrap: wrap;
}
.nm-teams img {
  width: 22px;
  height: 15px;
  border-radius: 2px;
  object-fit: cover;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
}
.nm-vs {
  color: var(--muted);
}
.nm-meta {
  font-size: 11px;
  color: var(--muted);
  margin: 4px 0 8px;
}
.nm-links {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.nm-links a {
  display: flex;
  align-items: center;
  gap: 8px;
  text-decoration: none;
  color: var(--text);
  background: var(--input-bg);
  border: 1px solid var(--line2);
  border-radius: 8px;
  padding: 7px 10px;
  font-size: 13px;
  font-weight: 600;
}
.nm-links a:hover {
  border-color: var(--green);
  background: #0a2016;
}
.lang {
  font-size: 10px;
  font-weight: 900;
  color: #fff;
  padding: 1px 6px;
  border-radius: 4px;
  flex: none;
}
.lang.tr {
  background: var(--tr);
}
.lang.en {
  background: #2f6fed;
}
.lang.local {
  background: var(--green-d);
}

/* ---------- Tur kutlaması overlay'i ---------- */
.stage-overlay {
  position: fixed;
  inset: 0;
  z-index: 78;
  display: flex;
  align-items: center;
  justify-content: center;
  background: radial-gradient(circle at 50% 35%, rgba(15, 58, 42, 0.97), rgba(5, 16, 11, 0.98));
  padding: 16px;
}
.stage-overlay.hidden {
  display: none;
}
#confetti2 {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
.stage-card {
  position: relative;
  text-align: center;
  width: min(720px, 96vw);
  max-height: 90vh;
  display: flex;
  flex-direction: column;
  animation: pop 0.5s cubic-bezier(0.2, 1.4, 0.4, 1);
}
.stage-emoji {
  font-size: clamp(44px, 9vw, 72px);
  filter: drop-shadow(0 6px 20px rgba(244, 197, 66, 0.4));
}
.stage-title {
  font-size: clamp(22px, 5vw, 38px);
  font-weight: 900;
  letter-spacing: 1px;
  margin-top: 6px;
  background: linear-gradient(90deg, #fff, var(--gold));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.stage-sub {
  color: var(--accent);
  font-weight: 700;
  font-size: clamp(13px, 2.4vw, 16px);
  margin: 4px 0 14px;
}
.stage-list {
  overflow-y: auto;
  padding: 4px 6px;
}
.qsec-title {
  text-align: left;
  font-size: 12px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 1px;
  color: var(--muted);
  margin: 12px 0 8px;
}
.qgrid {
  display: grid;
  gap: 8px;
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
}
.qchip {
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 10px;
  padding: 7px 10px;
}
.qchip img {
  width: 26px;
  height: 18px;
  border-radius: 3px;
  object-fit: cover;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
  flex: none;
}
.qchip .qg {
  font-size: 10px;
  font-weight: 900;
  width: 18px;
  height: 18px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 5px;
  background: var(--chip-bg);
  color: var(--muted);
  border: 1px solid var(--line);
  flex: none;
}
.qchip .qn {
  font-weight: 700;
  font-size: 13px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  flex: 1;
  text-align: left;
}
.qchip .qr {
  font-size: 11px;
  font-weight: 900;
  flex: none;
}
.qchip.r1 {
  border-color: var(--green);
}
.qchip.r1 .qr {
  color: var(--green);
}
.qchip.r2 {
  border-color: var(--green-d);
}
.qchip.r2 .qr {
  color: var(--green);
}
.qchip.r3 {
  border-color: var(--gold-d);
}
.qchip.r3 .qr {
  color: var(--gold);
}
.qpairs {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  justify-content: center;
}
.qpair {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 12px;
  padding: 12px 14px;
  flex: 1 1 280px;
  max-width: 460px;
}
.qpair .qside {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: 1;
  min-width: 0;
}
.qpair .qside:first-child {
  justify-content: flex-end;
}
.qpair .qside img {
  width: 28px;
  height: 20px;
  border-radius: 3px;
  object-fit: cover;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4);
  flex: none;
}
.qpair .qside b {
  font-size: 14px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.qpair .qvs {
  color: var(--muted);
  font-weight: 800;
  flex: none;
}

/* ---------- Çeşitli ---------- */
/* Task211 — Kullanıcı: "𝕏 / İletişim / Bilgi'nin altındaki boşluğu biraz daralt."
   Ölçüldü: bağlantıların altında 32px (20px dolgu + kutu), mobilde ayrıca 60px kenar
   boşluğu vardı; alt gezinme çubuğuyla arası 39px'ti. Dolgu 20 → 10px. */
.foot {
  text-align: center;
  color: var(--muted);
  font-size: 12px;
  padding: 30px 12px 10px;
}
.disclaimer-btn {
  display: inline-block;
  margin: 0 auto 12px;
  cursor: pointer;
  background: transparent;
  color: var(--muted);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 4px 12px;
  font-size: 11px;
  font-weight: 700;
  opacity: 0.8;
}
.disclaimer-btn:hover {
  opacity: 1;
  border-color: var(--accent);
  color: var(--accent);
}
.disclaimer-bar {
  margin: 0 auto 16px;
  padding: 0 16px;
  max-width: 620px;
  text-align: center;
  font-size: 11px;
  line-height: 1.4;
  color: var(--muted);
  opacity: 0.7;
  text-wrap: pretty;
}
.disclaimer-bar.hidden {
  display: none;
}
.hitstats {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 999px;
  padding: 6px 14px;
}
.hit-item {
  font-size: 12px;
  color: var(--muted);
}
.hit-item b {
  color: var(--accent);
  font-weight: 800;
}
.hit-sep {
  color: var(--line2);
}
.foot-contact {
  margin-bottom: 8px;
  display: flex;
  gap: 8px;
  justify-content: center;
  flex-wrap: wrap;
}
.contact-link,
.x-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  text-decoration: none;
  color: var(--text);
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
}
.contact-link:hover,
.x-link:hover {
  border-color: var(--green);
  color: var(--accent);
}
.toast {
  position: fixed;
  /* Task416 — alta yapışan yüzen öğeler görünür alanın dibinden ölçülür (uygulama-içi
     tarayıcıda düzen alanı daha yüksek; normal tarayıcıda --vvb sıfırdır). */
  bottom: calc(18px + var(--vvb, 0px));
  left: 50%;
  transform: translateX(-50%);
  z-index: 70;
  background: var(--panel2);
  border: 1px solid var(--line2);
  color: var(--text);
  padding: 10px 16px;
  border-radius: 10px;
  font-size: 13px;
  box-shadow: var(--shadow);
  transition: opacity 0.2s;
}
.hidden {
  display: none !important;
}

/* Yerel depolama bilgilendirme çubuğu (alt) */
.consent-bar {
  position: fixed;
  left: 50%;
  /* Task416 — alta yapışan yüzen öğeler görünür alanın dibinden ölçülür (uygulama-içi
     tarayıcıda düzen alanı daha yüksek; normal tarayıcıda --vvb sıfırdır). */
  bottom: calc(12px + var(--vvb, 0px));
  transform: translateX(-50%);
  z-index: 85;
  width: min(680px, 94vw);
  display: flex;
  align-items: center;
  gap: 12px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  border-radius: 12px;
  padding: 10px 14px;
  box-shadow: var(--shadow);
}
.consent-txt {
  font-size: 12px;
  color: var(--text);
  line-height: 1.4;
}
.consent-ok {
  flex: none;
  cursor: pointer;
  border: 1px solid var(--green-d);
  border-radius: 8px;
  background: var(--accent-fill);
  color: var(--on-accent);
  font-weight: 800;
  font-size: 13px;
  padding: 7px 16px;
}
.consent-ok:hover {
  transform: translateY(-1px);
}
@media (max-width: 560px) {
  .consent-bar {
    flex-direction: column;
    align-items: stretch;
    text-align: center;
    bottom: 8px;
  }
}

/* ---------- Skor kutusu (rakam-only + spinner) ---------- */
.stepper {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.stepper input {
  width: 34px;
  height: 30px;
  text-align: center;
  border-radius: 7px;
  border: 1px solid var(--line2);
  background: var(--input-bg);
  color: var(--input-text);
  font-size: 15px;
  font-weight: 800;
  padding: 0;
}
.stepper input:focus {
  outline: none;
  border-color: var(--accent);
  box-shadow: 0 0 0 2px rgba(25, 224, 138, 0.25);
}
.stepper input:disabled {
  opacity: 0.9;
}
.stepper.ro input {
  width: 26px;
  border-color: transparent;
  background: transparent;
}
.spin {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.spin button {
  width: 18px;
  height: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 8px;
  line-height: 1;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--muted);
  border-radius: 4px;
  cursor: pointer;
  padding: 0;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
}
.spin button:hover {
  border-color: var(--green);
  color: var(--text);
}
.spin button:active {
  background: var(--green);
  color: var(--on-accent);
}
.tie .stepper input {
  width: 32px;
  height: 28px;
}

/* ---------- Favori takım vurgusu (ziyaretçiye özel, ⭐) ---------- */
:root {
  --tr: #e30a17;
}
.gmatch.fav-match {
  position: relative;
  border-radius: 9px;
  background: linear-gradient(90deg, var(--fav-bg), transparent);
  box-shadow: inset 4px 0 0 var(--fav);
}
/* Task229 — İzleme listesindeki maç fikstür satırında da belli olur (mor şerit). */
.gmatch.watch-match {
  position: relative;
  border-radius: 9px;
  box-shadow: inset 4px 0 0 var(--watch, #a06cf0);
}
.gmatch.fav-match.watch-match {
  box-shadow: inset 4px 0 0 var(--fav); /* favori kazanır */
}
.fav-tag {
  position: absolute;
  top: 2px;
  right: 4px;
  font-size: 12px;
  line-height: 1;
  color: var(--gold);
  text-shadow: 0 0 6px rgba(244, 197, 66, 0.7);
}
.fav-row td {
  background: linear-gradient(90deg, var(--fav-bg), transparent) !important;
}
.fav-row .tn {
  color: var(--fav-name);
}
.tie.fav-match {
  border-color: var(--fav);
  box-shadow:
    0 0 0 1px var(--fav),
    0 0 18px var(--fav-glow);
}
/* Puan cetvelindeki favori yıldız düğmesi */
.fav-star {
  margin-left: auto;
  background: none;
  border: none;
  cursor: pointer;
  padding: 0 2px;
  font-size: 15px;
  line-height: 1;
  color: var(--line2);
  transition:
    transform 0.1s,
    color 0.15s;
  flex: none;
}
.fav-star:hover {
  color: var(--gold);
  transform: scale(1.2);
}
.fav-star.on {
  color: var(--gold);
  text-shadow: 0 0 8px rgba(244, 197, 66, 0.65);
}
.live-card.fav-match {
  position: relative;
}

/* ---------- İzleme listesi göz ikonu (tek renk: kapalı soluk, açık altın) ---------- */
.wstar {
  background: transparent;
  border: 0;
  cursor: pointer;
  color: var(--line2);
  padding: 2px;
  display: inline-flex;
  align-items: center;
  line-height: 0;
  transition:
    color 0.12s,
    transform 0.1s;
  flex: none;
  touch-action: manipulation;
}
/* Hover rengi yalnızca gerçek hover (fare) cihazlarda — mobilde "yapışkan hover" rengi kalmasın */
@media (hover: hover) {
  .wstar:hover {
    color: var(--gold);
    transform: scale(1.12);
  }
}
.wstar.on {
  color: var(--gold);
}
.wstar.on svg circle {
  fill: currentColor;
} /* eklendiğinde göz "dolu" */
.wstar.on svg path {
  fill: currentColor;
  fill-opacity: 0.18;
}
:root[data-theme='light'] .wstar.on {
  color: var(--gold-d);
} /* light'ta daha belirgin koyu altın */
.tie > .wstar {
  position: absolute;
  top: 5px;
  right: 6px;
  z-index: 3;
}
/* Maç satırı aksiyon kümesi (zil + göz/haber + paylaş) — kompakt; grup gridinde dar sütun, eleme kartında sağ üst */
.m-acts {
  display: inline-flex;
  align-items: center;
  gap: 0;
}
.m-acts .follow-bell,
.m-acts .share-mini,
.m-acts .wstar,
.m-acts .news-ico,
.m-acts .cal-mini {
  padding: 2px 3px;
}
/* Tahmin butonu da kardeş ikonlar gibi kompakt/çerçevesiz olsun — büyük .btn kutusu
   fikstürde (sağ üstte absolute) altındaki deplasman takım adına değiyordu. */
.m-acts .pick-btn {
  padding: 2px 3px;
  border: 0;
  background: none;
  min-width: 0;
  min-height: 0;
  /* kardeş ikonlarla (wstar/share-mini) AYNI kutu metriği → SVG'ler tam hizalı (2px kayma yoktu) */
  display: inline-flex;
  align-items: center;
  line-height: 0;
  vertical-align: middle;
}
.m-acts .follow-bell svg,
.m-acts .share-mini svg,
.m-acts .wstar svg,
.m-acts .pick-btn svg,
.m-acts .cal-mini svg {
  width: 17px;
  height: 17px;
}
/* Task092 — İzleme/paylaşım/takvim ikonları Skorinho ikonuyla AYNI açık renkte.
   Eskiden `--line2` (çizgi rengi) ile çiziliyorlardı ve koyu temada zor seçiliyorlardı
   (kullanıcı bildirdi). Dokunma kutusu da büyütüldü: mobilde parmakla ıskalanıyordu. */
.m-acts {
  display: inline-flex;
  align-items: center;
  gap: 2px;
}
/* DİKKAT: `:not(.on)` — işaretli durumun kendi rengi var (izleme listesi ALTIN,
   takvim YEŞİL). Bu kural onları ezince kullanıcı bildirdi: "işaretlendiğindeki rengi
   de değişti, önceden sarı oluyordu". */
.m-acts .share-mini:not(.on),
.m-acts .wstar:not(.on),
.m-acts .cal-mini:not(.on),
.m-acts .news-ico:not(.on),
.m-acts .follow-bell:not(.on) {
  color: color-mix(in srgb, var(--text) 74%, transparent);
}
@media (hover: hover) {
  .m-acts .wstar:hover,
  .m-acts .cal-mini:hover,
  .m-acts .news-ico:hover,
  .m-acts .follow-bell:hover {
    color: var(--gold);
  }
}
/* Dokunmatikte ≥40 px kutu: yükseklik satırı büyütmesin diye dikey padding kadar
   negatif dış boşluk verilir (ikonun kapladığı yer aynı kalır, dokunma alanı büyür).

   Task102 — Kutu YUKARI büyür, aşağı neredeyse hiç taşmaz. Simetrik 11px'te görünmez
   kutunun alt kenarı DEPLASMAN takım adının 5px üstünde bitiyordu: kullanıcı adı
   hedefleyip biraz yukarı dokununca izleme listesi/paylaşım/haber tetikleniyordu
   (kullanıcı bildirdi: "deplasman takımına tıkladığımdan eminim"). Ev sahibi solda
   olduğu için hiç etkilenmiyordu — belirtinin tek tarafta çıkması da bunu söylüyordu.
   İkonların ÜSTÜ kart boşluğu; orada tıklanacak nesne yok, kutu oraya büyüyebilir. */
@media (max-width: 860px) {
  .m-acts {
    gap: 6px;
  }
  .m-acts .share-mini,
  .m-acts .wstar,
  .m-acts .cal-mini,
  .m-acts .news-ico,
  .m-acts .follow-bell,
  .m-acts .pick-btn {
    /* 19 + 17 (ikon) + 4 = 40px dokunma yüksekliği; büyüme YUKARI, taşma aşağı 4px */
    padding: 19px 9px 4px;
    margin: -19px 0 -4px;
  }
  /* FİKSTÜR SATIRI istisnası: burada ikonlar satırın üst-sağında `absolute` duruyor ve
     YUKARISI ÖNCEKİ SATIR (satırlar bitişik, ölçüm: aralık 0px). Yukarı büyüyen kutu bu
     kez üstteki maçın takım adının dokunuşunu çalıyordu (ölçüldü: 13px taşma). Satırın
     üst boşluğu (40px) zaten ayrılmış olduğu için burada kutu AŞAĞI büyür. */
  main#content .gmatch .m-acts .share-mini,
  main#content .gmatch .m-acts .wstar,
  main#content .gmatch .m-acts .cal-mini,
  main#content .gmatch .m-acts .news-ico,
  main#content .gmatch .m-acts .follow-bell,
  main#content .gmatch .m-acts .pick-btn {
    /* Ölçüm: 15px aşağı büyüyen kutu (0-38px) takım adının dokunma alanıyla çakışıyordu.
       8px'e indirildi: ikon kutusu 0-31px, ada 35px'ten sonrası kaldı. */
    padding: 6px 9px 8px;
    margin: -6px 0 -8px;
  }
}
/* Task102 — Hale yalnız logoda (yazının etrafında ışık istenmedi) */
.m-acts .pick-btn.on {
  background: none;
}
.m-acts .pick-btn.on .skorio-logo {
  border-radius: 50%;
  background: radial-gradient(
    circle,
    color-mix(in srgb, var(--gold) 22%, transparent),
    transparent 70%
  );
}
.tie > .m-acts {
  position: absolute;
  top: 5px;
  right: 6px;
  z-index: 3;
}
/* Grup satırı: ikonlar tarihin üstünde yatay; kompakt */
.g-lead .m-acts .follow-bell,
.g-lead .m-acts .share-mini,
.g-lead .m-acts .wstar,
.g-lead .m-acts .news-ico {
  padding: 1px 3px;
}
.g-lead .m-acts .follow-bell svg,
.g-lead .m-acts .share-mini svg,
.g-lead .m-acts .wstar svg {
  width: 14px;
  height: 14px;
}
.live-card .lc-meta {
  margin-left: auto;
} /* meta sağa, göz en sağa */
/* Haber ikonu (tamamlanan maçta) — Google News yeni sekmede */
.news-ico {
  color: var(--line2);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 2px;
  cursor: pointer;
  text-decoration: none;
  line-height: 0;
  flex: none;
  touch-action: manipulation;
  transition:
    color 0.12s,
    transform 0.1s;
}
@media (hover: hover) {
  .news-ico:hover {
    color: var(--accent);
    transform: scale(1.12);
  }
}
.tie > .news-ico {
  position: absolute;
  top: 5px;
  right: 6px;
  z-index: 3;
} /* gözle aynı yer (biri veya öteki) */
/* Haberler butonundaki 📰 emoji: maç-haber .news-ico kuralının line-height:0/padding'inden etkilenmesin */
.news-btn .news-ico {
  font-size: 20px;
  line-height: 1;
  padding: 0;
  color: inherit;
  display: block;
}
.fb-vs {
  color: var(--muted);
  margin: 0 5px;
  font-weight: 700;
}
/* Favori takım ismi yanı ★ göstergesi (grup + eleme) */
.fav-mark {
  color: var(--gold);
  font-size: 0.82em;
  margin-left: 3px;
  flex: none;
  text-shadow: 0 0 6px rgba(244, 197, 66, 0.5);
}

/* ---------- Canlı güncelleme vurguları (15 sn) ---------- */
.gmatch.just-updated,
.tie.just-updated,
.live-card.just-updated {
  background: linear-gradient(90deg, rgba(25, 224, 138, 0.22), rgba(25, 224, 138, 0.04));
  border-radius: 10px;
  box-shadow:
    0 0 0 2px rgba(25, 224, 138, 0.55),
    0 0 16px rgba(25, 224, 138, 0.35);
  animation: upd-pulse 1.1s ease-in-out 2;
}
@keyframes upd-pulse {
  0%,
  100% {
    box-shadow:
      0 0 0 2px rgba(25, 224, 138, 0.5),
      0 0 14px rgba(25, 224, 138, 0.3);
  }
  50% {
    box-shadow:
      0 0 0 3px rgba(25, 224, 138, 0.95),
      0 0 28px rgba(25, 224, 138, 0.75);
  }
}
/* Cetvel satırı vurgusu (içe parıltı; mevcut arka planı bozmaz) */
tr.just-updated-row td {
  box-shadow: inset 0 0 12px rgba(25, 224, 138, 0.25);
  animation: row-pulse 1.1s ease-in-out 2;
}
tr.just-updated-row td:first-child {
  box-shadow:
    inset 3px 0 0 var(--accent),
    inset 0 0 12px rgba(25, 224, 138, 0.25);
}
@keyframes row-pulse {
  0%,
  100% {
    box-shadow: inset 0 0 12px rgba(25, 224, 138, 0.25);
  }
  50% {
    box-shadow: inset 0 0 26px rgba(25, 224, 138, 0.6);
  }
}

/* ---------- Üstten çıkan floating bildirim ---------- */
.livebar {
  position: fixed;
  top: 0;
  left: 50%;
  transform: translate(-50%, -150%);
  z-index: 39;
  padding: 10px 18px;
  border-radius: 0 0 16px 16px;
  background: linear-gradient(180deg, #0f3a2a, #0b2a1e);
  color: #eafff5;
  border: 1px solid var(--line2);
  border-top: none;
  box-shadow:
    0 10px 30px rgba(0, 0, 0, 0.5),
    0 0 24px rgba(25, 224, 138, 0.25);
  transition: transform 0.4s cubic-bezier(0.2, 1.3, 0.3, 1);
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-width: 94vw;
}
.livebar.show {
  transform: translate(-50%, 0);
}
/* Açılışta bir kez: X takip çağrısı bandı (link + kapat) */
.follow-bar {
  position: fixed;
  top: 0;
  left: 50%;
  transform: translate(-50%, -150%);
  z-index: 41;
  padding: 9px 12px 9px 16px;
  border-radius: 0 0 16px 16px;
  background: linear-gradient(180deg, #0e1626, #0a1018);
  border: 1px solid var(--line2);
  border-top: none;
  box-shadow:
    0 10px 30px rgba(0, 0, 0, 0.5),
    0 0 24px rgba(29, 155, 240, 0.25);
  transition: transform 0.4s cubic-bezier(0.2, 1.3, 0.3, 1);
  display: flex;
  align-items: center;
  gap: 8px;
  max-width: 94vw;
}
.follow-bar.show {
  transform: translate(-50%, 0);
}
/* Task019 — e-posta doğrulama nazik bandı (#content grid item → tam genişlik) */
.verify-bar {
  justify-self: stretch;
  width: 100%;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 12px;
  padding: 10px 14px;
  border-radius: 12px;
  background: color-mix(in srgb, var(--gold, #eab308) 12%, var(--panel2));
  border: 1px solid color-mix(in srgb, var(--gold, #eab308) 35%, var(--line));
  color: var(--text);
  font-size: 13.5px;
}
.verify-bar[hidden] {
  display: none;
}
.vb-msg {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-weight: 700;
  flex: 1 1 200px;
}
.vb-msg svg {
  width: 16px;
  height: 16px;
  vertical-align: -3px;
}
.vb-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.vb-code {
  width: 96px;
  padding: 6px 10px;
  border-radius: 8px;
  border: 1px solid var(--line);
  background: var(--panel);
  color: var(--text);
  font-size: 15px;
  letter-spacing: 2px;
  text-align: center;
  font-variant-numeric: tabular-nums;
}
.vb-verify,
.vb-resend {
  padding: 6px 12px;
  font-size: 13px;
}
.vb-close {
  background: none;
  border: 0;
  color: var(--muted);
  font-size: 16px;
  cursor: pointer;
  padding: 2px 6px;
  flex: none;
}
.vb-close:hover {
  color: var(--text);
}
.contact-textarea {
  resize: vertical;
  min-height: 100px;
  font-family: inherit;
}
/* Standart iletişim formu — etiketli alanlar */
.cf-intro {
  margin: 0 0 14px;
}
.cf-field {
  display: block;
  margin-bottom: 12px;
}
.cf-label {
  display: block;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--muted);
  margin-bottom: 5px;
}
.cf-field .auth-input {
  margin: 0;
  width: 100%;
}
.auth-forgot {
  font-size: 13px;
  color: var(--muted);
}
.auth-forgot:hover {
  color: var(--accent);
}
.fbar-body {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
  flex: 1;
}
/* Doğal metin akışı: logo + cümle + handle birlikte sarar (handle yer yoksa alt satıra iner) */
.fbar-link {
  display: block;
  text-decoration: none;
  color: #e7e9ea;
  font-size: 13px;
  font-weight: 700;
  line-height: 1.4;
}
.x-logo {
  vertical-align: -2px;
  margin: 0 1px;
}
.fbar-handle {
  color: #1d9bf0;
  font-weight: 800;
  white-space: nowrap;
  margin-left: 6px;
}
.fbar-bell {
  font-size: 11px;
  color: #9fb3ad;
  line-height: 1.2;
}
/* Mobil: bar tam genişlik; @handle kendi alt satırına insin (taşmasın) */
@media (max-width: 560px) {
  .follow-bar {
    width: 92vw;
  }
  .fbar-handle {
    display: block;
    margin-left: 0;
  }
}
.fbar-close {
  flex: none;
  background: transparent;
  border: 0;
  color: var(--muted);
  cursor: pointer;
  font-size: 15px;
  padding: 2px 4px;
  line-height: 1;
}
.fbar-close:hover {
  color: #e7e9ea;
}
.lb-row {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 14px;
  white-space: nowrap;
}
.lb-ball {
  font-size: 16px;
  animation: spin 4s linear infinite;
}
.lb-flag {
  width: 24px;
  height: 16px;
  border-radius: 3px;
  object-fit: cover;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.5);
  flex: none;
}
.lb-name {
  font-weight: 800;
}
.lb-score {
  font-weight: 900;
  font-size: 16px;
  color: var(--accent);
  padding: 0 4px;
  background: rgba(25, 224, 138, 0.14);
  border-radius: 6px;
}
.lb-dash {
  margin: 0 3px;
  color: #bfe;
}
.lb-more {
  font-size: 12px;
  color: var(--muted);
  text-align: center;
}
@media (max-width: 560px) {
  .lb-name {
    max-width: 26vw;
    overflow: hidden;
    text-overflow: ellipsis;
  }
}

@media (max-width: 560px) {
  .groups-grid {
    grid-template-columns: 1fr;
  }
  /* Mobil banner TEK SATIR (kullanıcı kararı): marka solda, ⚙️ + hesap sağda.
     Ayarlar artık ⚙️ menüsünde olduğu için tek satıra sığar. */
  .topbar.banner {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    text-align: left;
    gap: 8px;
    padding: 8px 12px;
    flex-wrap: nowrap;
  }
  .topbar.banner .brand {
    font-size: 17px;
  }
  .topbar.banner .top-actions {
    gap: 6px;
    flex-wrap: nowrap;
  }
  .topbar {
    flex-direction: column;
    align-items: center;
    text-align: center;
    gap: 4px;
    padding: 8px 12px;
  }
  .tb-brand {
    align-items: center;
  }
  .tb-row {
    justify-content: center;
  }
  .tb-auth {
    margin-top: 2px;
  }
  .brand-ball {
    font-size: 22px;
  }
  .tb-title h1 {
    white-space: normal;
  }
  .tb-sub .brand-sub {
    font-size: 11px;
    line-height: 1.3;
  }
  .mode-badge {
    padding: 5px 9px;
    font-size: 11px;
  }
  /* Haberler ikonu mobilde sağ ÜST köşede; sağ boşluk yok -> simetri korunur */
  #app {
    padding-right: 0;
  }
  .news-lbl {
    display: none;
  }
  .news-btn {
    top: 9px;
    right: 9px;
    bottom: auto;
    transform: none;
    flex-direction: row;
    border-radius: 10px;
    border: 1px solid var(--green-d);
    padding: 7px 9px;
    z-index: 60;
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.4);
  }
  .news-ico {
    font-size: 18px;
  }
  /* Üst bar kalabalığını azalt: tema seçici + timezone + dil daha küçük */
  .tb-auth.tb-row {
    gap: 6px;
  }
  /* Tema seçici artık ⚙️ menüsünde — eski mobil collapse kaldırıldı; 4 buton inline */
  .lang-select {
    padding: 4px 5px;
    font-size: 11px;
  }
  .tz-select {
    max-width: none;
    font-size: 11px;
    padding: 4px 4px;
  } /* genişliği JS (fitTzWidth) ayarlar */
  .online-pill {
    padding: 4px 8px;
    font-size: 11px;
  }
  /* Takvime ekle: mobilde sadece 📅 ikon */
  .fb-ics span {
    display: none;
  }
  .fb-ics {
    padding: 7px 11px;
    font-size: 17px;
  }
  .fav-grid {
    grid-template-columns: repeat(auto-fill, minmax(84px, 1fr));
  }
  /* Favori bandı mobilde 2 satır: 1) ⭐ takım + 📅  2) sıradaki maç bilgisi */
  .fav-band {
    gap: 7px;
    padding: 9px 12px;
  }
  .fb-row {
    gap: 6px 8px;
  }
  .fb-star {
    order: 0;
  }
  .fb-team {
    order: 1;
    font-size: 14px;
  }
  .fb-ics {
    order: 2;
  }
  .fb-info {
    order: 3;
    flex-basis: 100%;
    font-size: 11.5px;
    line-height: 1.3;
  }
  /* "Bugün" kartı rozet/meta mobilde taşmasın */
  .lc-top {
    gap: 6px;
    /* Task102 — İkon şeridi ile takım satırı arasında GERÇEK boşluk: ikonun büyütülmüş
       dokunma kutusu (yukarı doğru) takım adına komşu kalmasın. */
    margin-bottom: 14px;
  }
  .lc-badge {
    font-size: 10px;
    padding: 3px 7px;
    letter-spacing: 0.3px;
  }
  .lc-meta {
    font-size: 10px;
  }
}

/* ---------- Dokunmatik cihazlarda büyük skor kutusu + spinner ---------- */
@media (pointer: coarse) {
  .stepper input,
  .spin button {
    touch-action: manipulation;
  }
  .stepper input {
    width: 40px;
    height: 46px;
    font-size: 19px;
  }
  .tie .stepper input {
    width: 38px;
    height: 44px;
  }
  .spin {
    gap: 4px;
  }
  .spin button {
    width: 28px;
    height: 21px;
    font-size: 13px;
    border-radius: 6px;
  }
  .tie .spin button {
    height: 20px;
  }
  /* Grup maçı satırında skora daha çok yer ver */
  .gmatch {
    grid-template-columns: auto 1fr auto 1fr;
    gap: 4px;
  }
  .side .sn {
    font-size: 12px;
  }
}

/* Mobil fikstür: maçı 2 satıra böl — üstte tarih + aksiyon butonları, altta
   takımlar (adlara çok daha fazla yer). (pointer:coarse bloğundan SONRA gelir → kazanır) */
@media (max-width: 560px) {
  /* main#content ile specificity artırıldı: base .gmatch (kaynakta daha sonra gelen)
     kuralını yenmek için — aksi halde tek-kolon grid geri gelir. */
  main#content .gmatch {
    /* Tarih + aksiyonlar ABSOLUTE (üst satır) → grid kolonlarını ETKİLEMEZ; teams
       satırı yalnız 3 eşit kolondan oluşur, skor tüm satırlarda AYNI x'te (WC hizası).
       padding-top üst şeride yeterli yükseklik verir → aksiyonlar isimle çakışmaz. */
    position: relative;
    /* `1fr` (asgarisi içerik): sütunlar eşit → orta küme tam ortada; hücre içeriğinden
       dar olamadığı için düğmeler ÜST ÜSTE BİNEMEZ. */
    grid-template-columns: 1fr auto 1fr;
    /* Task362 — dar ekranda ad alanı kıymetli: kolon boşluğu 8 → 6px (skor hücresinin
       kendi iç boşluğu zaten var, iki ölçü üst üste binince araya 26px giriyordu). */
    column-gap: 6px;
    padding: 40px 10px 10px 12px;
  }
  main#content .gmatch .g-lead {
    position: absolute;
    top: 10px;
    left: 12px;
  }
  main#content .gmatch .m-acts {
    position: absolute;
    top: 6px;
    right: 10px;
  }
  main#content .gmatch .side.home {
    grid-column: 1;
    justify-content: flex-end;
    min-width: 0;
  }
  main#content .gmatch .gscore {
    grid-column: 2;
    justify-self: center;
  }
  main#content .gmatch .side.away {
    grid-column: 3;
    justify-content: flex-start;
    min-width: 0;
  }
  /* Alt satırda yer açıldı → takım adları büyür ama TEK SATIR (ellipsis) kalır ki
     satırlar tek tipli olsun ve logo/skor hizası bozulmasın (WC grup maçı deseni) */
  main#content .gmatch .side .sn {
    font-size: 13.5px;
    white-space: nowrap;
  }
  main#content .gmatch .side.home .sn {
    text-align: right;
  }
  /* Kare takım logoları landscape'e sıkışmasın (fikstür satırında) */
  main#content .gmatch .side img {
    width: 18px;
    height: 18px;
    object-fit: contain;
    border-radius: 3px;
  }
  main#content .gmatch .gdate {
    font-size: 12px;
  }
}

/* ===== X otomatik paylaşım ayarları paneli (edit mode) ===== */
.xset-note {
  font-size: 13px;
  color: var(--muted, #93a4bd);
  margin: 0 0 12px;
  line-height: 1.45;
}
.xset-list {
  display: flex;
  flex-direction: column;
  gap: 0;
  max-height: 56vh;
  overflow-y: auto;
  margin-bottom: 14px;
}
.xset-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 4px;
  cursor: pointer;
  border-bottom: 1px solid rgba(127, 127, 127, 0.12);
}
.xset-row .xset-lbl {
  flex: 1;
  font-size: 14px;
}
.xset-row.master {
  font-weight: 700;
  border-bottom: 2px solid rgba(127, 127, 127, 0.28);
  margin-bottom: 4px;
}
.xset-row.round .xset-lbl {
  padding-left: 14px;
  font-size: 13px;
  opacity: 0.9;
}
.xset-cb {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
  pointer-events: none;
}
.xset-sw {
  width: 40px;
  height: 23px;
  border-radius: 12px;
  background: #5a6273;
  position: relative;
  transition: background 0.15s;
  flex: none;
}
.xset-sw::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 19px;
  height: 19px;
  border-radius: 50%;
  background: #fff;
  transition: transform 0.15s;
}
.xset-cb:checked + .xset-sw {
  background: #2bb24c;
}
.xset-cb:checked + .xset-sw::after {
  transform: translateX(17px);
}
.xset-cb:disabled + .xset-sw {
  opacity: 0.5;
}
.xset-msg {
  padding: 16px;
  text-align: center;
  color: var(--muted, #93a4bd);
  font-size: 14px;
}
.xset-msg.warn {
  color: #e88;
}

/* ===================== CupDaily eklentisi (Task009) =====================
   WC styles.css'e dokunulmaz; CupDaily'ye özgü kurallar yalnız bu bölümde. */

/* Kare takım logosu (WC bayrak stilinden bağımsız — yalnız .crest) */
.side img.crest,
.team-col img.crest {
  width: 20px;
  height: 20px;
  border-radius: 4px;
  object-fit: contain;
  box-shadow: none;
  background: transparent;
  flex: none;
  vertical-align: -4px;
}

/* Maç satırı orta küme: saat ya da skor */
.gmatch .gscore {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
  min-width: 56px;
  font-size: 13px;
  font-weight: 700;
}

/* Topbar sağ küme (arşiv linki + dil + tema) */
.top-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex: none;
}

/* Task298 — cetvel altı bölge lejantı: renk noktaları satır rozetleriyle aynı dil */
.st-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  padding: 10px 12px 4px;
  font-size: 11.5px;
  color: var(--muted);
}
.st-lg {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.st-legend .lg-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex: none;
}
.st-legend .lg-ucl,
.st-legend .lg-r16_direct {
  background: var(--green);
}
.st-legend .lg-uel {
  background: var(--gold);
}
.st-legend .lg-uecl {
  background: var(--accent);
}
.st-legend .lg-playoff {
  background: var(--gold-d);
}
.st-legend .lg-relegation,
.st-legend .lg-eliminated {
  background: var(--red);
}
/* Task300 — lejantın altında eşitlik kuralları satırı */
.st-tiebreak {
  margin: 2px 0 0;
  padding: 0 12px 8px;
  font-size: 11.5px;
  color: var(--muted);
}

/* Puan durumu zone satırları (rules.zones -> tr.zone-*) — sunum, veri değil */
tr.zone-ucl,
tr.zone-r16_direct {
  background: linear-gradient(90deg, rgba(24, 192, 122, 0.16), transparent);
}
tr.zone-ucl .rank-badge,
tr.zone-r16_direct .rank-badge {
  background: var(--green);
  color: var(--on-accent);
  border-color: var(--green);
}
tr.zone-uel {
  background: linear-gradient(90deg, rgba(244, 197, 66, 0.14), transparent);
}
tr.zone-uel .rank-badge {
  background: var(--gold);
  color: var(--on-gold);
  border-color: var(--gold);
}
tr.zone-uecl {
  background: linear-gradient(90deg, rgba(25, 224, 138, 0.1), transparent);
}
tr.zone-uecl .rank-badge {
  background: var(--accent);
  color: var(--on-accent);
  border-color: var(--accent);
}
tr.zone-playoff {
  background: linear-gradient(90deg, rgba(201, 154, 30, 0.12), transparent);
}
tr.zone-playoff .rank-badge {
  background: var(--gold-d);
  color: #fff;
  border-color: var(--gold-d);
}
tr.zone-relegation,
tr.zone-eliminated {
  background: linear-gradient(90deg, rgba(255, 90, 95, 0.14), transparent);
}
tr.zone-relegation .rank-badge,
tr.zone-eliminated .rank-badge {
  background: var(--red);
  color: #fff;
  border-color: var(--red);
}

/* Marka logosu (kullanıcı tasarımı — emoji yerine gerçek logo, Task010) */
.brand-logo {
  width: 28px;
  height: 28px;
  border-radius: 6px;
  vertical-align: -7px;
  margin-right: 2px;
}

/* Task010: yıldız sütunu, hafta gezinme, yan yana yerleşim, bant turnuva etiketi
   Task322 — şablon ÜSTTEKİ kuralla birebir aynı tutulur (bu geç kural kazanıyor):
   sol/skor sütunları sabit tabanlı ki canlı rozet genişleyince satırlar kaymasın. */
.gmatch {
  grid-template-columns: minmax(84px, auto) 1fr minmax(56px, auto) 1fr auto;
}
.star {
  background: none;
  border: none;
  color: var(--muted);
  font-size: 17px; /* Task601 rev-3 — bir tık büyük (15 → 17) */
  cursor: pointer;
  padding: 2px 0;
  line-height: 1;
  /* ★ ve ☆ AYNI yeri kaplasın — favori satırında yazı sağa kaymaz (hiza korunur) */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  text-align: center;
  font-variant-emoji: text;
}
.star.on {
  color: var(--gold);
}
.star:hover {
  color: var(--gold);
}
.week-nav {
  display: flex;
  align-items: center;
  gap: 8px;
  font-weight: 800;
}
.week-nav .btn {
  padding: 2px 10px;
}
.week-nav .btn:disabled {
  opacity: 0.35;
  cursor: default;
}
.comp-tag {
  font-size: 9px;
  color: var(--muted);
  text-transform: uppercase;
  letter-spacing: 0.4px;
}
/* Task304 (kullanıcı) — Takım kartı maç listesi: turnuva adının genişliği satırdan satıra
   değişince ilk sütun (her .gmatch kendi grid'i) farklı genişliyor ve skorlar alt alta
   hizalanmıyordu (Red Star örneği). Turnuvalı satırlarda öncü sütun SABİT genişliktedir,
   uzun turnuva adı tek satırda kısaltılır. */
.g-lead-comp {
  width: 92px;
  min-width: 92px;
}
.g-lead-comp .comp-tag {
  display: block;
  max-width: 92px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.league-grid {
  display: grid;
  gap: 16px;
}
@media (min-width: 980px) {
  .league-grid {
    grid-template-columns: minmax(360px, 5fr) 4fr;
    align-items: start;
  }
}

/* Task010 — Açık tema CupDaily yorumu (kullanıcı kararı): yeşil değil,
   logoya uygun ÇOK AÇIK MAVİ yüzeyler. WC'nin light değişkenleri burada ezilir. */
:root[data-theme='light'] {
  --bg: #eef5fc;
  --bg2: #f6fafe;
  --panel: #ffffff;
  --panel2: #eaf2fb;
  --line: #d3e2f2;
  --line2: #b9d0e8;
  --text: #12263a;
  --muted: #5b7590;
  --green: #2e6fe0; /* aksan mavisi (zone-ucl da UCL mavisine döner) */
  --green-d: #1f56b8;
  --accent: #3b82f6;
  --on-accent: var(--bg); /* Task514 — açık temada vurgu üstü yazı AÇIK renktir */
  --accent-fill: var(--accent); /* Task514 rev — açık temada tek ton mavi */
  --accent-fill-h: var(--accent);
  --topbar-bg: rgba(238, 245, 252, 0.92);
  --input-bg: #ffffff;
  --input-text: #12263a;
  --title-a: #12263a;
  --title-b: #2e6fe0;
  --pts: #12263a;
  --head-a: #dcebfa;
  --head-b: #eef5fc;
  --chip-bg: #e3eefa;
  --glow1: #dcebfa;
  --glow2: #eef5fc;
  --shadow: 0 10px 30px rgba(30, 64, 120, 0.12);
}

/* Yuvarlatılmış köşeler ve hizalama incelikleri */
.brand-logo {
  border-radius: 8px;
}
.side img.crest,
.team-col img.crest {
  border-radius: 6px;
}
.gmatch .gdate {
  min-width: 44px;
}
.table td,
.table th {
  vertical-align: middle;
}
.team-col .star {
  vertical-align: -1px;
}

/* Task011: kapsayıcı ve panel genişlikleri — hiçbir kart tam ekrana YAYILMAZ
   (kullanıcı kararı: en makul görünümde sınırlı) */
main#content {
  max-width: 1400px;
  margin: 0 auto;
  padding: clamp(10px, 1.6vw, 16px) clamp(12px, 3vw, 28px) 40px;
  display: grid;
  /* Task545 — SÜTUN İÇERİĞE GÖRE BÜYÜMEZ. Izgara sütununun varsayılan alt sınırı
     `min-content`: içerideki tek bir geniş satır (ölçüldü: İtalyanca ana sayfada 420 px)
     sütunu şişiriyor, TÜM kardeşler o genişliğe uzuyordu — sağa yaslı "Sade" düğmesi
     ekranın dışında (406 px) kalıyordu. `minmax(0, 1fr)` ile sütun görünür genişliği
     aşmaz; geniş içerik kendi kutusunda kırpılır/sarar. */
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
  justify-items: center;
}
main#content > section,
main#content > .league-grid {
  width: 100%;
}
/* Bantlar (bugün/favori/izleme/canlı): dar ve ortalı — Task308 rev: canlı bant diğer
   bantlarla BİREBİR aynı dilde (kullanıcı) */
#today-section,
#fav-section,
#watch-section,
#live-section,
#home-calendar {
  max-width: 860px;
}
/* Tablo + fikstür: sınırlı sütunlar, ortalanmış */
.league-grid {
  justify-content: center;
}
.league-grid > section {
  width: 100%;
  max-width: 720px;
  justify-self: center;
}
@media (min-width: 980px) {
  .league-grid {
    grid-template-columns: minmax(360px, 700px) minmax(320px, 600px);
  }
}

/* Task011: banner + ayrı gezinme şeridi */
.topbar.banner {
  padding-top: 14px;
  padding-bottom: 14px;
}
.topbar.banner .brand {
  font-size: clamp(20px, 3vw, 26px);
  font-weight: 900;
}
.subnav {
  position: sticky;
  top: 0;
  z-index: 30;
  display: flex;
  gap: 8px;
  overflow-x: auto;
  padding: 10px clamp(12px, 3vw, 28px);
  background: var(--topbar-bg);
  border-bottom: 1px solid var(--line);
  backdrop-filter: blur(8px);
}
.subnav .day-btn {
  flex: none;
}

/* hidden özniteliği her zaman kazanır (display:grid'li kapsayıcılar dahil) */
.league-grid[hidden],
main#content [hidden] {
  display: none !important;
}

/* Task011: logo taşması düzeltmesi + logosuz takım için baş harf rozeti */
.flag-wrap .crest,
.lc-half .crest {
  width: 24px;
  height: 24px;
  border-radius: 6px;
  object-fit: contain;
  box-shadow: none;
  background: transparent;
}
.crest-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  border-radius: 6px;
  background: var(--chip-bg);
  border: 1px solid var(--line2);
  color: var(--muted);
  font-size: 9px;
  font-weight: 800;
  flex: none;
  vertical-align: -5px;
}
.flag-wrap {
  overflow: visible;
}

/* Task080 — Banner WEB'DE DE YAPIŞKAN (kullanıcı isteği: "mobildeki gibi sabit kalsın").
   Task011'de bilinçli olarak `relative` yapılmıştı; karar değişti. z-index 90 korunuyor:
   açılan menüler lig şeridinin (z-80) üstünde kalmalı. */
.topbar.banner {
  position: -webkit-sticky;
  position: sticky;
  top: 0;
  z-index: 90;
}

/* Task011: maç kartında lig adı öne çıkar (kullanıcı geri bildirimi) */
.lc-comp {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--chip-bg);
  border: 1px solid var(--line2);
  color: var(--accent);
  font-weight: 800;
  font-size: 11px;
  letter-spacing: 0.3px;
}

/* Task011: banner ile gezinme şeridi GÖRSEL olarak ayrışsın (kullanıcı testi) */
.topbar.banner {
  border-bottom: 1px solid var(--line2);
  background: linear-gradient(180deg, var(--glow1), var(--topbar-bg));
}
.subnav {
  background: var(--bg2);
  border-bottom: 1px solid var(--line);
  box-shadow: 0 6px 16px rgba(0, 0, 0, 0.18);
  padding-top: 8px;
  padding-bottom: 8px;
}

/* Task011: panel başlıkları kompakt ve zarif (kullanıcı geri bildirimi) */
main#content .group-head {
  padding: 6px 4px 8px;
  margin-bottom: 6px;
  background: none;
  border-bottom: 1px solid var(--line);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
main#content .group-head h2 {
  margin: 0;
  font-size: 14px;
  /* Task551 rev (kullanıcı: "başlıklar kayarak geldikten sonra 1-2 piksel aşağı kayıyor")
     — `normal` satır yüksekliği 14 px puntoda 16,94 px veriyor; başlığın kutusu ve METİN
     TABANI kesirli kalıyor. Giriş animasyonu composite katmanda çalışıp bittiğinde metin
     yeniden rasterize ediliyor ve bu kesir görünür bir "oturma" olarak okunuyor. Tam sayı
     satır yüksekliği zinciri kırar. */
  line-height: 18px;
  font-weight: 800;
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--muted);
}

/* Bant başlıkları ortalı (kullanıcı isteği) */
#today-section .group-head,
#fav-section .group-head,
#watch-section .group-head,
#live-section .group-head {
  justify-content: center;
}

/* Gün değiştirici (Bugün kartı, WC deseni) */
.lc-days {
  justify-content: center;
  margin: 0 auto 4px;
}

/* Gezinme şeridi ortalı (kullanıcı isteği); dar ekranda kaydırma bozulmaz */
.subnav {
  justify-content: safe center;
}

/* Lig logoları: gezinme butonları ve rozetlerde */
.day-btn .comp-logo {
  width: auto;
  height: 20px;
  max-width: 44px;
  object-fit: contain;
  vertical-align: -3px;
  margin-right: 5px;
  border-radius: 3px;
}

/* Panel başlıkları her yerde ortalı (kullanıcı isteği — güçlü kural) */
main#content .group-head {
  justify-content: center;
  text-align: center;
  position: relative;
}
main#content .group-head h2 {
  margin: 0 auto;
}
/* Fikstürde hafta gezinme sağda kalır, başlık yine ortada */
#fixtures-section .group-head .week-nav {
  position: absolute;
  right: 4px;
  top: 50%;
  transform: translateY(-50%);
}
/* Mobilde: absolute week-nav (sezon combo) ortalı başlığa biner → akışa al, başlık
   sola; sığmazsa week-nav alt satıra sarar (ID specificity ile merkez kuralını yener) */
@media (max-width: 560px) {
  #fixtures-section .group-head {
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 4px 8px;
    text-align: left;
  }
  #fixtures-section .group-head h2 {
    margin: 0;
  }
  #fixtures-section .group-head .week-nav {
    position: static;
    transform: none;
  }
}

/* Logolar her temada görünür: beyaz mini rozet zemini (koyu armalar kaybolmaz) */
.side img.crest,
.team-col img.crest,
.lc-half .crest,
.flag-wrap .crest,
.day-btn .comp-logo {
  /* Zemin/halka yok; koyu detaylar için silüeti izleyen hafif ışık gölgesi */
  padding: 0;
  background: none;
  box-shadow: none;
  backdrop-filter: none;
  filter: drop-shadow(0 0 1.5px rgba(255, 255, 255, 0.5));
}
/* Task514 rev (kullanıcı: "açık temada ligler menüsünde seçili lig logosu çok karanlıkta
   kalıyor, seçili durumu çok silik olmalı") — LOGOLU şeritlerde seçili hap açık temada
   DOLU mavi değil, hafif tonlu zemin + aksan halkası: arma kendi renkleriyle okunur.
   Yazılı şeritler (gün, kapsam) dolu vurgulu kalır — orada beyaz yazı zaten iyi. */
:root[data-theme='light'] #competition-nav .day-btn.active,
:root[data-theme='light'] .day-btn.scope-comp.active {
  background: color-mix(in srgb, var(--accent) 12%, var(--panel));
  color: var(--title-b);
  border-color: color-mix(in srgb, var(--accent) 45%, transparent);
  box-shadow: inset 0 0 0 1.5px color-mix(in srgb, var(--accent) 55%, transparent);
}
:root[data-theme='light'] .side img.crest,
:root[data-theme='light'] .team-col img.crest,
:root[data-theme='light'] .lc-half .crest,
:root[data-theme='light'] .flag-wrap .crest,
:root[data-theme='light'] .day-btn .comp-logo {
  background: none;
  box-shadow: none;
  filter: drop-shadow(0 0 1.5px rgba(18, 38, 58, 0.35));
}
.crest-ph {
  background: rgba(255, 255, 255, 0.18);
  color: var(--muted);
}

/* Maç kartındaki lig rozetinde logo */
.lc-comp .comp-logo {
  width: auto;
  height: 16px;
  max-width: 36px;
  object-fit: contain;
  vertical-align: -3px;
  margin-right: 4px;
  border-radius: 3px;
}

/* Satır-içi maç detayı (lig görünümü, geniş ekran) */
.dt-inline {
  position: relative;
  margin-top: 12px;
  padding: 12px;
  border: 1px solid var(--line2);
  border-radius: var(--radius);
  background: linear-gradient(180deg, var(--panel), var(--bg2));
}
/* Task062: taban .tm-close kuralı akış içinde konumlanmak için negatif margin kullanıyor
   (margin: -10px -8px -32px auto). Satır-içi panelde konum `absolute`'a çevrildiğinde bu
   negatif değerler top/right offset'ini birebir yiyordu → buton panel çizgisine değiyor,
   hatta üst kenardan dışarı taşıyordu (ölçüm: sağ 1px, üst -1px). Margin sıfırlanır ki
   offset gerçekten uygulansın (CLAUDE.md ilke 4: hiçbir nesne panel kenarına teğet olmaz). */
/* `.group-card` yuvarlak köşeleri kırpmak için `overflow: hidden` taşıyor; bu, içindeki
   `position: sticky` ✕ butonunu ölü hâle getiriyor (hidden bir kaydırma bağlamı yaratır).
   `clip` aynı kırpmayı yapar ama kaydırma bağlamı YARATMAZ → sticky yaşar. Desteklemeyen
   tarayıcıda bildirim yok sayılır, buton eski (yapışmayan) davranışına döner. */
#fixtures-section {
  overflow: clip;
}
/* Task102 — AYNI tuzak takım/oyuncu/profil kartında: `.group-card`'ın `overflow: hidden`i
   yapışkan geri şeridini (`.pv-bar`) ölü hâle getiriyordu (ölçüldü: 800px kaydırınca şerit
   -582px'e gidiyor, yani hiç yapışmıyor). `clip` kırpar ama kaydırma bağlamı yaratmaz. */
#team-page,
#player-page,
#profile-page {
  overflow: clip;
}
.dt-inline .tm-close {
  /* Task073 — `absolute` iken uzun detayda ✕ panelin tepesinde kalıyor, kullanıcı kapatmak
     için yukarı kaydırmak zorundaydı. `sticky` ile panel okunurken de ekranda kalır;
     yapışma noktası yapışkan üst başlığın altı (`--sticky-top` JS'ten gelir, sabit değil). */
  position: sticky;
  top: calc(var(--sticky-top, 114px) + 10px);
  /* sağa yaslanır (blok + auto sol marj); negatif alt marj ile altındaki başlık ✕'in
     altından değil, aynı hizadan başlar — panel kenarına değmez (ilke 4) */
  margin: 0 0 -36px auto;
  z-index: 6;
}

/* Tema düğmeleri: emoji yerine gerçek tema renkleri */
.tdot {
  display: inline-block;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.35);
  vertical-align: -2px;
}
.tdot-green {
  background: #18c07a;
}
.tdot-navy {
  background: #274b8f;
}
.tdot-light {
  background: #eef5fc;
}

/* Nav butonlarında logo + lig adı dikey ortalı */
.subnav .day-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  line-height: 1;
}
.subnav .day-btn .comp-logo {
  vertical-align: middle;
  margin-right: 0;
}
.lc-comp {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.lc-comp .comp-logo {
  vertical-align: middle;
  margin-right: 0;
}

/* Dar ekranda üst menü kaydırma yerine satır sarar, kendini genişliğe uydurur */
.subnav {
  flex-wrap: wrap;
  overflow-x: visible;
  row-gap: 6px;
}
@media (max-width: 640px) {
  .subnav .day-btn {
    padding: 4px 9px;
    font-size: 11px;
  }
  .subnav .day-btn .comp-logo {
    height: 16px;
    max-width: 34px;
  }
}

/* Üst menü: sarma yerine tek satır, GÖRÜNMEZ kaydırma çubuğu (dar ekranda kaydır) */
.subnav {
  flex-wrap: nowrap;
  overflow-x: auto;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.subnav::-webkit-scrollbar {
  display: none;
}

/* WC 2026 linki: alt çizgi yok */
.top-actions a.btn,
#wc-link {
  text-decoration: none;
}

/* Takım kartı: tn-link imleci */
.tn-link {
  cursor: pointer;
}
.tn-link:hover {
  text-decoration: underline;
}

/* Kart üst satırı: lig rozeti + tarih dikey hizalı */
.lc-meta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

/* Favori şeridi (4px) tarihe binmesin */
/* (fav-match ekstra sol padding kaldırıldı — base .gmatch zaten 12px; hiza korunur) */

/* Task014: sayfa görünümleri + tema uyumlu satırlar (takım kartı ilk 2 sekme düzeltmesi) */
.page-view {
  position: relative;
  max-width: 860px;
  margin: 0 auto;
  width: 100%;
  /* Izgara öğesinin otomatik en küçük boyu (`min-width: auto`) İÇERİĞİN min-content'i
     kadardır: uzun bir stadyum adı sayfayı 390px ekranda 597px'e çıkarıyordu (ölçüldü).
     0 verilince uzun metin kısalır, sayfa taşmaz. */
  min-width: 0;
}
/* Task102 — Kart sayfalarının (takım/oyuncu/profil) kapatma butonu.
   DÖRT kural birlikte sağlanmalı; önceki denemeler hep birini bozuyordu:
   (1) aşağı kaydırınca kaybolmasın, (2) hiçbir görselin üstünü örtmesin,
   (3) yapışkan banner'ın altında kalmasın, (4) kendine bir SATIR ayırmasın.
   `absolute` → logonun üstüne biniyordu. `fixed` (Task094) → banner (z-90) butonu
   (z-70) örtüyordu; mobilde buton "yok olmuş" görünüyordu (ölçüldü: elementFromPoint
   banner logosunu döndürüyor). Akış içinde yapışkan ŞERİT → bu kez bir satır yer
   kaplıyordu (kullanıcı bildirdi: "bir satırı kapatıyor gibi"). Son hâl maç detayı
   popup'ındaki ✕ deseninin aynısı: yapışkan + negatif alt boşluk. */
.page-back {
  /* Maç detayı/profil popup'ındaki ✕ ile AYNI desen (kullanıcı isteği): yapışkan ama
     SATIR KAPLAMAZ — negatif alt boşluk kadar aşağıdaki içerik yukarı gelir, buton
     üst köşeye biner. Başlık kendi iç boşluğuyla butona yer açtığı için ilk açılışta
     hiçbir görselin üstünde durmaz. */
  position: sticky;
  /* Banner + (varsa) lig şeridi: `--sticky-top` ikisinin toplamı. Yalnız `--banner-h`
     kullanılınca webde buton kaydırmada lig şeridinin ALTINDA kalıyordu (ölçüldü:
     elementFromPoint "day-btn skorio-btn" döndürdü). */
  top: var(--sticky-top, 66px);
  z-index: 40;
  /* Task208 — Kullanıcı: "✕ bütün ekranlarda sağda, sadece takım ve oyuncu kartında
     solda; mobilde sağ daha avantajlı." Buton sağa alınır; `margin-left: auto` onu satırın
     sonuna iter, yapışkan davranış (kaydırınca hep aynı yerde) AYNEN korunur. */
  margin: 0 8px -34px auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  padding: 0;
  font-size: 15px;
  line-height: 1;
  border-radius: 50%;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--muted);
  cursor: pointer;
}
.page-back:hover,
.page-back:focus-visible {
  color: var(--text);
  border-color: var(--accent);
}
.page-view {
  position: relative;
}
.pl-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 4px;
  border-bottom: 1px dashed var(--line);
  color: var(--text);
  font-size: 13px;
}
.pl-row:last-child {
  border-bottom: none;
}
.pl-min {
  flex: none;
  min-width: 34px;
  text-align: center;
  font-weight: 800;
  color: var(--muted);
  background: var(--chip-bg);
  border-radius: 8px;
  padding: 2px 6px;
  font-size: 11px;
}
.pl-main {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pl-side {
  flex: none;
  color: var(--muted);
  font-size: 12px;
}
.pl-season {
  cursor: pointer;
}
.pl-detail td {
  font-size: 11px;
  color: var(--muted);
}
.pl-cat {
  padding: 3px 0;
  border-bottom: 1px dotted var(--line);
  white-space: normal;
}
.pl-seasons td,
.pl-seasons th {
  text-align: center;
}

/* Mobil: üst menü yalnız lig logoları (daha büyük); metin gizli (kullanıcı kararı) */
@media (max-width: 640px) {
  .subnav .day-btn {
    font-size: 0;
    gap: 0;
    padding: 6px 8px;
  }
  /* Task329 — ad SPAN'ı yapısal gizlenir: font-size:0 iOS Safari'de birkaç px hayalet
     genişlik bırakıp logoyu aktif hapta SOLA itiyordu (ekran görüntüsüyle ölçüldü). */
  .subnav .day-btn .comp-name {
    display: none;
  }
  .subnav .day-btn .comp-logo {
    height: 26px;
    max-width: 48px;
  }
  .subnav .day-btn svg {
    width: 20px;
    height: 20px;
  }
}

/* Marka tıklanabilir: ana sayfaya döner */
#brand-home {
  cursor: pointer;
}

/* Oyuncu/takım sayfası ince ayarları (kullanıcı geri bildirimi) */
.page-view {
  padding-top: 16px;
}
.page-view .tm-head {
  margin-top: 6px;
  border-top: none;
}
.tm-body .pl-row,
.tm-body .pl-main {
  color: var(--text);
}
.tm-body .pl-row .sn {
  color: var(--text);
}
/* Sekme geçişinde panel boyu OYNAMAZ */
.page-view .dt-pane {
  min-height: 340px;
}
.pl-photo {
  width: 56px;
  height: 56px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--chip-bg);
  flex: none;
}

/* Takım sayfası Durum: tam tablo, takım satırı vurgulu */
tr.me-row {
  outline: 2px solid var(--accent);
  outline-offset: -2px;
}
.team-standing {
  margin-bottom: 14px;
}

/* Oyuncu sayfası başlığı: kendi temiz düzeni (WC modal sınıflarından bağımsız) */
.pp-head {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 6px 2px 14px;
  border-bottom: 1px solid var(--line);
}
/* Task503 (kullanıcı: "oyuncu kartında oyuncu adı ve fotosu biraz daha aşağıdan
   başlayabilir, bu sayede ikonlarla çakışma engellenir") — yapışkan yıldız/paylaş/✕
   sırası başlığın ÜSTÜNE biniyordu: ölçüldü (390 px) "Metehan Altunbas" yazısı yıldızla
   300 px² çakışıyordu (360 px'te "Romelu Lukaku" da). Telefonda başlık ikon sırasının
   altından başlar; geniş ekranda ad zaten ikonlara ulaşmıyor, orada boşluk eklenmez. */
@media (max-width: 759px) {
  .pp-head {
    padding-top: 30px;
  }
}
/* Task502 rev (kullanıcı: "karşılaştır butonu fotonun altında, foto genişliğinde olsun") */
.pp-photo-col {
  display: flex;
  flex: none;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}
.pp-cmp {
  width: 100%;
  gap: 4px;
  padding: 4px 6px;
  font-size: 11px;
  line-height: 1.2;
}
.pp-cmp svg {
  width: 13px;
  height: 13px;
}
/* Oyuncu kartındaki fotoğraf belirgin/büyük görünsün */
.pp-head .pl-photo {
  width: 88px;
  height: 88px;
  box-shadow: 0 0 0 1px var(--line);
}
.pp-head .pl-photo-ph {
  font-size: 40px;
}
.pp-head .pl-photo-ph .ic {
  width: 46px;
  height: 46px;
}
.pp-name {
  font-size: 20px;
  font-weight: 900;
  color: var(--text);
  line-height: 1.2;
  padding-right: 34px; /* sağ üstteki favori yıldızının yeri */
}
/* Favori yıldızı başlığın SAĞ ÜSTÜNDE sabit (uzun adda satır atlamaz) */
.pp-head {
  position: relative;
}
/* Task492 (kullanıcı: "web görünümünde oyuncu kartında favori yıldızı ile paylaş ikonu
   üst üste biniyor") — ölçüldü: paylaş düğmesi 640 px'in üstünde başlığın YANINA geçiyor
   (390/560'ta üstte, ayrı satırda) ve yıldızla 15×30 px çakışıyordu. Geniş ekranda yıldız
   paylaş düğmesinin SOLUNA alınır; dar ekranda eski yeri korunur. */
/* Task492 rev (kullanıcı: "favori, paylaş ve kapatma butonu aynı hizada görünmüyor") —
   ölçüldü: yıldız başlığın içinde MUTLAK konumluydu, paylaş/✕ ise yapışkan satırda;
   hizası ve boşluğu genişliğe göre kayıyordu (1280'de merkez 234'e 230, 700'de yıldız
   paylaşın 13 px ÜSTÜNE biniyordu). Yıldız artık AYNI SATIRDA ve aynı desende: sağdan
   96 px (paylaşın 52 + düğme 34 + boşluk 10). Tek kaynak = tek hiza, her genişlikte. */
.page-fav {
  position: sticky;
  top: var(--sticky-top, 66px);
  z-index: 40;
  margin: 0 96px -34px auto;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
}
.page-fav .fav-star {
  margin: 0;
  padding: 0;
}
.pp-bio {
  color: var(--muted);
  font-size: 12px;
  margin-top: 3px;
}
.pp-club {
  margin-top: 5px;
  font-size: 13px;
  color: var(--text);
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.pl-photo-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  color: var(--muted);
}
/* Takım sayfası başlık logosu: kırpılmadan sığdır */
.tm-head img.crest,
.dt-tm img.crest {
  width: 30px;
  height: 30px;
  object-fit: contain;
  border-radius: 6px;
}

/* Oyuncu sezon tablosu: sezon sütunu net ve okunur genişlikte */
.pl-seasons th.season-col,
.pl-seasons td.season-col {
  width: 74px;
  white-space: nowrap;
}

/* Task015: istatistik blokları */
.stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 12px;
  padding: 8px 0;
}
.stat-cat h4 {
  margin: 0 0 6px;
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--muted);
  border-bottom: 1px solid var(--line);
  padding-bottom: 4px;
}
.stat-row {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  font-size: 12px;
  color: var(--text);
  padding: 2px 0;
}
.ts-year {
  margin: 8px 0 4px;
}

/* Kupalarda (tablo gizliyken) fikstür paneli ortalanır */
@media (min-width: 980px) {
  .league-grid:has(#standings-section[hidden]) {
    grid-template-columns: minmax(360px, 720px);
  }
}

/* Sezon seçici (Task016; yeri Task073) — lig sayfasının genel tercihi. Web'de fikstür
   panelinin SOL BAŞINDA, mobilde lig adının sağında (sekmelerin üstünde) durur; eleman
   JS ile taşınır, kopyalanmaz. */
.season-select {
  max-width: 96px;
}
/* Web: seçici solda, başlık onun yanında, hafta gezinme sağda kalsın */
#fixtures-section .group-head > .season-select {
  margin-right: 10px;
}
/* Not: panel başlığı ortalı kalır ("başlıklar her yerde ortalı" güçlü kuralı); seçici
   akışta ilk öğe olduğu ve başlık `margin: 0 auto` taşıdığı için sola yaslanır. */
/* Mobil: lig adı solda, seçici satırın sağ ucunda */
.league-name > .season-select {
  margin-left: auto;
  flex: none;
}
.league-name .ln-text {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Mobil banner: TEK SATIR + native gibi SABİT (fixed) üstte (kullanıcı kararı).
   (Ayarlar/dil/TZ artık ⚙️ menüsünde olduğu için ikinci satıra gerek yok.) */
@media (max-width: 640px) {
  .topbar.banner {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    flex-wrap: nowrap;
    z-index: 200;
    padding-top: max(8px, var(--sat));
  }
  .topbar.banner .top-actions {
    width: auto;
    justify-content: flex-end;
    flex-wrap: nowrap;
  }
  /* Sabit banner + hemen altında lig şeridi: içerik onların altından başlasın */
  /* Task225 (kullanıcı düzeltmesi: "sayfaların üst kısmı banner'ın altında kalmış gibi")
     — ÜST BAR çentik payı kadar UZUYOR; sabit 54/56px değerleri o uzamayı hesaba
     katmıyordu ve içerik barın altına giriyordu. Paylar artık payı da içeriyor. */
  #competition-nav {
    position: sticky;
    top: calc(54px + var(--sat));
  }
  body {
    padding-top: calc(56px + var(--sat));
  }
}

/* Oyuncu Sezonlar: tablo yerine dengeli satır düzeni (kullanıcı geri bildirimi) */
.ps-head,
.ps-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 8px 6px;
}
.ps-head {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--muted);
  border-bottom: 1px solid var(--line);
}
.ps-row {
  border-bottom: 1px dashed var(--line);
  cursor: pointer;
  font-size: 13px;
  color: var(--text);
}
.ps-row:hover {
  background: var(--panel2);
}
.ps-year {
  flex: none;
  /* Task328 rev — madalya+ok için 44px yeter; 72px sıra-oyuncu arasında boşluk okunuyordu */
  width: 44px;
  font-weight: 800;
  font-size: 12px;
  color: var(--muted);
}
.ps-team {
  flex: 1;
  min-width: 0;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  overflow: hidden;
}
.ps-team b {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ps-nums {
  flex: none;
  font-variant-numeric: tabular-nums;
  color: var(--text);
  font-size: 12.5px;
  min-width: 86px;
  text-align: right;
}
.ps-detail {
  padding: 10px 8px 14px;
  background: var(--panel2);
  border-radius: 10px;
  margin: 4px 0 10px;
}
.ps-detail .stat-row {
  font-size: 12.5px;
  padding: 3px 0;
  border-bottom: 1px dotted var(--line);
}

/* Kupa görünümünde fikstür paneli her koşulda ortalı (sola dayanmaz) */
.league-grid > section {
  margin-left: auto;
  margin-right: auto;
}

/* Üst menü kaydırmada da yukarıda SABİT (yapışkanlık güçlendirildi) */
nav.subnav {
  position: -webkit-sticky;
  position: sticky;
  /* Banner artık yapışkan → şerit onun ALTINA yapışır, üstüne binmez. Yükseklik JS'ten
     gelir (`--banner-h`); yedek değer ölçülen masaüstü yüksekliğidir. */
  top: var(--banner-h, 66px);
  z-index: 80;
}
/* Kart üst satırı TEK YERDE tanımlıdır (yukarıdaki `.lc-top` grid kuralı). Burada ikinci
   bir `display: flex` kopyası vardı ve daha sonra geldiği için grid'i eziyordu: tarih
   ortalanmıyordu (ölçüm: webde 305px sağa kaçık). Kopya kaldırıldı. */

.build-line {
  text-align: center;
  /* Task170 — Kullanıcı: "En alttaki sürüm bilgisi sayfa arka planıyla aynı renk olsun,
     kullanıcı göremesin." Yazı SİLİNMEZ: hata ayıklarken (ve JS hata mesajı bu etikete
     yazıldığı için) gerekiyor; yalnız zeminle aynı renge alınır ve seçilebilir kalır. */
  color: var(--bg);
  font-size: 10px;
  /* Task171 — Etiket görünmez olduğu için DİKEY YER de kaplamamalı: alt bilgi
     bağlantıları sayfanın dibinden 26px yukarıda kalıyordu (ölçüldü). Kutu sıfırlanır ama
     düğüm DOM'da durur — JS hata mesajı hâlâ buraya yazılıyor. */
  height: 0;
  overflow: hidden;
  padding: 0;
  opacity: 1;
}

/* Boş bant ipucu (favori/izleme nasıl eklenir) */
.band-hint {
  margin: 4px 0;
  padding: 12px 14px;
  border: 1px dashed var(--line2);
  border-radius: 12px;
  color: var(--muted);
  font-size: 13px;
  line-height: 1.5;
  text-align: center;
}
/* Task285 — boş favori bandındaki "favori ekle" düğmesi: ipucu metninin altında
   ortalı, kenarlara teğet değil (panel ilkesi). */
.band-hint .band-cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-top: 10px;
  border: 1px solid var(--line2);
  border-radius: 10px;
  padding: 7px 14px;
  color: var(--accent);
  font-weight: 700;
}
/* Task285 (revizyon) — bant içi takım arama: kutu + sonuç listesi. Kenarlardan payla
   durur (panel ilkesi), sonuçlar kendi içinde kayar. */
.fav-search {
  padding: 2px;
}
.fs-row {
  display: flex;
  gap: 8px;
}
.fs-row input {
  flex: 1;
  min-width: 0;
  background: var(--panel);
  border: 1px solid var(--line2);
  border-radius: 10px;
  padding: 9px 12px;
  color: var(--text);
  font-size: 14px;
}
.fs-close {
  flex: none;
}
.fs-results {
  margin-top: 8px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  max-height: 262px;
  overflow-y: auto;
}
.fs-item {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  background: transparent;
  border: 1px solid var(--line2);
  border-radius: 10px;
  color: var(--text);
  cursor: pointer;
  text-align: left;
}
.fs-item img {
  width: 20px;
  height: 20px;
  flex: none;
}
.fs-item .fs-name {
  font-weight: 700;
}
.fs-item .fs-comp {
  color: var(--muted);
  font-size: 12px;
}
.fs-item .fs-star {
  margin-left: auto;
  color: var(--line2);
  font-size: 16px;
  flex: none;
}
.fs-item.on .fs-star {
  color: var(--gold);
}

.hint-eye {
  display: inline-block;
  vertical-align: -3px;
  /* Favori ipucundaki ☆ ile AYNI renk = çevresindeki metin rengi (kullanıcı: "yıldızın
     rengi daha iyi, göz de aynı olsun"). Altın değil — altın "izleniyor" demek. */
  color: inherit;
}

/* Not: Eski basit .lu-grid/.ms-head/.ms-row (Task017) kaldırıldı — maç detayı artık
   WC pitch dizilişi + karşılaştırmalı çubuk istatistiği kullanıyor (üstteki .lu-pitch /
   .ms-bar blokları). */

/* (Eski tema-collapse z-index kuralı kaldırıldı — tema artık ⚙️ menüsünde;
   mobil banner position:fixed ile native gibi sabit, kendi z-index'ini taşır.) */

/* Puan durumu: uzun takım adı alt satıra İNMEZ — tek satır + "…" (mobil dahil) */
.table td.team-col,
.table th.team-col {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 0; /* fixed layout'ta esnek sütunun taşmasını kırpar */
}
.table td.team-col .sn {
  display: inline;
  white-space: nowrap;
}

/* Açılan tema listesi kendi kapsayıcısına tutunur (kayma düzeltmesi) */
.theme-switch {
  position: relative;
}

/* Yeni sürüm çubuğu */
.update-bar {
  position: fixed;
  /* Task416 — alta yapışan yüzen öğeler görünür alanın dibinden ölçülür.
     Task427 — mobilde alt gezinme çubuğunun ÜSTÜNDE durur: eskiden onun üzerine biniyordu. */
  bottom: calc(14px + var(--vvb, 0px));
  left: 50%;
  transform: translateX(-50%);
  z-index: 200;
  display: flex;
  align-items: center;
  gap: 10px;
  max-width: min(440px, calc(100vw - 24px));
  padding: 10px 10px 10px 14px;
  border-radius: 14px;
  /* Task427 — UYARI değil bilgi: vurgu çerçevesi yerine panelin kendi dili. */
  background: var(--panel);
  border: 1px solid var(--line);
  color: var(--text);
  font-size: 13.5px;
  box-shadow: var(--shadow);
  animation: updIn 0.22s ease-out;
}
@media (prefers-reduced-motion: reduce) {
  .update-bar {
    animation: none;
  }
}
@keyframes updIn {
  from {
    opacity: 0;
    transform: translate(-50%, 12px);
  }
  to {
    opacity: 1;
    transform: translate(-50%, 0);
  }
}
@media (max-width: 640px) {
  .update-bar {
    bottom: calc(72px + var(--sab) + var(--vvb, 0px));
  }
}
.upd-ico {
  display: inline-flex;
  color: var(--accent);
  flex: none;
}
.upd-ico svg {
  width: 17px;
  height: 17px;
}
.upd-txt {
  /* Tek satırda kalır: iki kelimelik cümle kırılınca çubuk "bozuk" görünüyordu (ölçüldü). */
  flex: 0 1 auto;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.3;
}
.update-bar .upd-go {
  flex: none;
  font-size: 12.5px;
  padding: 7px 13px;
}
.upd-x {
  flex: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 28px;
  height: 28px;
  border: 0;
  border-radius: 8px;
  background: none;
  color: var(--muted);
  cursor: pointer;
}
.upd-x:hover {
  color: var(--text);
  background: var(--panel2);
}
.upd-x svg {
  width: 15px;
  height: 15px;
}

/* Mobil: liste açılınca kap KAPALI boyutunu korur — ikon yerinden oynamaz */
@media (max-width: 560px) {
  .theme-switch {
    height: 29px;
    box-sizing: border-box;
  }
  .theme-switch.open {
    height: 29px;
    width: 40px;
  }
  .theme-switch.open .theme-btn:nth-child(1) {
    top: -3px;
  }
  .theme-switch.open .theme-btn:nth-child(2) {
    top: 35px;
  }
  .theme-switch.open .theme-btn:nth-child(3) {
    top: 73px;
  }
}

/* Mobil: liste açıkken kapalı pill zemini tamamen gizlenir (taşma görünmez) */
@media (max-width: 560px) {
  .theme-switch.open {
    background: transparent !important;
    border-color: transparent !important;
  }
  .theme-switch.open .theme-btn:nth-child(1) {
    top: -2px;
  }
}

/* Task294 — üst şeridin MASAÜSTÜ ok düğmeleri: sıfır genişlikli yapışkan tutucular
   kaydırma kabının içinde kenara yapışır (yer kaplamaz, düzen kaymaz); yalnız
   fare/imleçli cihazlarda ve o yönde taşma varken görünürler. */
.nav-ar-hold {
  position: sticky;
  flex: 0 0 0;
  width: 0;
  align-self: center;
  z-index: 6;
  display: none;
}
.nav-ar-hold-l {
  left: 0;
}
.nav-ar-hold-r {
  right: 0;
}
@media (hover: hover) and (pointer: fine) {
  #competition-nav.can-left .nav-ar-hold-l,
  #competition-nav.can-right .nav-ar-hold-r {
    display: block;
  }
}
.nav-ar {
  position: absolute;
  top: 50%;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  border: 1px solid var(--line2);
  background: var(--panel);
  color: var(--text);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 2px 8px rgb(0 0 0 / 25%);
}
/* chev aşağı bakar: sağ ok -90°, sol ok 90° döner */
.nav-ar-hold-l .nav-ar {
  left: 4px;
  transform: translateY(-50%) rotate(90deg);
}
.nav-ar-hold-r .nav-ar {
  right: 4px;
  transform: translateY(-50%) rotate(-90deg);
}
.nav-ar svg {
  width: 15px;
  height: 15px;
}
.nav-ar:hover {
  color: var(--accent);
  border-color: var(--accent);
}

/* Kaydırılabilir menü ipucu: kenarlarda içerik solması (devamı var sinyali) */
.subnav.can-right {
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 44px), transparent);
  mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 44px), transparent);
}
.subnav.can-left {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 44px, #000 100%);
  mask-image: linear-gradient(90deg, transparent, #000 44px, #000 100%);
}
.subnav.can-left.can-right {
  -webkit-mask-image: linear-gradient(
    90deg,
    transparent,
    #000 44px,
    #000 calc(100% - 44px),
    transparent
  );
  mask-image: linear-gradient(90deg, transparent, #000 44px, #000 calc(100% - 44px), transparent);
}

/* (kaldırıldı: 3-ikon-yan-yana denemesi — WC katlanır tasarım geri, v76) */

/* Mobil: menü ikon/logoları vurgulu butonun TAM ortasında */
@media (max-width: 640px) {
  .subnav .day-btn svg,
  .subnav .day-btn .comp-logo {
    margin: 0 !important;
  }
  .subnav .day-btn {
    justify-content: center;
  }
}

/* Mobil kapalı tema seçici: TEK çember (dış pill yok, ikonun kendi yuvarlağı var) */
@media (max-width: 560px) {
  .theme-switch:not(.open) {
    background: transparent !important;
    border-color: transparent !important;
    padding: 0 !important;
  }
  .theme-switch:not(.open) .theme-btn.active {
    background: var(--panel2) !important;
    box-shadow: inset 0 0 0 1px var(--line2) !important;
    border-radius: 999px;
    opacity: 1;
    filter: none;
  }
  /* Task580 — kapalı tema anahtarındaki seçili düğme camda da cam kabuk taşır
     (kural `!important` yazdığı için aynı bağlamda ezilir). */
  [data-theme='glass'] .theme-switch:not(.open) .theme-btn.active {
    background: linear-gradient(
      180deg,
      rgba(255, 255, 255, 0.1),
      rgba(255, 255, 255, 0.04)
    ) !important;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.22) !important;
  }
}

/* Giriş/kayıt formu (Task018) */
.auth-card {
  max-width: 380px;
}
.auth-input {
  display: block;
  width: 100%;
  margin: 8px 0;
  padding: 10px 12px;
  font-size: 14px;
  border-radius: 10px;
  box-sizing: border-box;
}
#auth-form .btn {
  width: 100%;
  margin-top: 8px;
}
/* Tarayıcı autofill'i (kayıtlı e-posta/şifre) zemini beyaz/sarı yapıyordu — tema
   zeminini inset box-shadow ile zorla; metin rengi de tema. Tüm form input'larında. */
input:-webkit-autofill,
input:-webkit-autofill:hover,
input:-webkit-autofill:focus,
input:-webkit-autofill:active {
  -webkit-text-fill-color: var(--text);
  -webkit-box-shadow: 0 0 0 1000px var(--panel2) inset;
  box-shadow: 0 0 0 1000px var(--panel2) inset;
  caret-color: var(--text);
  transition: background-color 9999s ease-out 0s;
}

/* Bant kartlarının çizgileri panel çizgisine binmesin (iç boşluk) */
main#content .live-cards {
  padding: 4px 6px 10px;
}
/* Geri butonu hafif sağa (kullanıcı isteği) — şerit içinde de aynı boşluk korunur */
/* Task208 — ✕ SAĞA alındı: bu geç kural eskiden sol kenarı zorluyordu (ölçüldü: buton
   sağa gitmedi, takım logosunun üstünde kaldı). */
.page-back {
  margin-left: auto;
  margin-right: 8px;
}

/* Hesap mini menüsü */
.auth-wrap {
  position: relative;
  display: inline-flex;
}
.auth-menu {
  position: absolute;
  top: calc(100% + 8px);
  right: 0;
  z-index: 320;
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 12px;
  min-width: 200px;
  background: var(--panel);
  border: 1px solid var(--line2);
  border-radius: 12px;
  box-shadow: var(--shadow);
}
/* Menü öğeleri aynı hizada ortalı (admin <a> de <button>'lar gibi) */
.auth-menu .btn {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  text-decoration: none;
}

/* Tahmin (Task020) */
.pick-counter {
  text-align: center;
  font-size: 12px;
  font-weight: 800;
  color: var(--accent);
  padding: 6px 0 0;
}
/* Tahmin edilmiş maç: Skorio ikonu premium altın-aksan + hafif hale (kullanıcı önerisi).
   Task102 — Hale BUTONUN tamamına uygulanıyordu; buton "Skorinho" yazısını da kapsadığı
   için yazının etrafında sarı bir ışık oluşuyordu (kullanıcı bildirdi: "logo sarı olsun
   ama yazı etrafındaki ışığımsı tona gerek yok"). Hale artık YALNIZ logoda. */
.pick-btn.on {
  color: var(--gold);
}
.pick-btn.on .skorio-logo {
  border-radius: 50%;
  background: radial-gradient(
    circle,
    color-mix(in srgb, var(--gold) 22%, transparent),
    transparent 70%
  );
}
.pick-btn.on svg {
  filter: drop-shadow(0 0 3px color-mix(in srgb, var(--gold) 60%, transparent));
}
/* Tahmin edilmiş maç: yalnız Skorio ikonu renklenir (kullanıcı kararı — çerçeve yok) */
.pick-q {
  margin: 10px 0;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 12px;
  transition:
    border-color 0.15s ease,
    background 0.15s ease;
}
/* Yanıtlanmış soru: accent kenarlık; boş kalan: sönük; kayıt eksik uyarısı: kırmızı */
.pick-q.answered {
  border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
  background: color-mix(in srgb, var(--accent) 6%, transparent);
}
.pick-q.missing {
  border-color: var(--bad, #ef4444);
  animation: pick-nudge 0.35s ease;
}
@keyframes pick-nudge {
  0%,
  100% {
    transform: translateX(0);
  }
  25% {
    transform: translateX(-4px);
  }
  75% {
    transform: translateX(4px);
  }
}
/* "seç" rozeti — soru yanıtlanınca gizlenir, yanıtlanınca ✓ görünür */
.pq-status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.pq-need {
  font-size: 10.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--bad, #ef4444);
  background: color-mix(in srgb, var(--bad, #ef4444) 14%, transparent);
  border-radius: 999px;
  padding: 1px 8px;
}
.pick-q.answered .pq-need {
  display: none;
}
/* Üst yönlendirme + ilerleme sayacı */
.pick-guide {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin: 2px 0 12px;
  padding: 8px 12px;
  border-radius: 10px;
  background: var(--chip-bg);
  color: var(--muted);
  font-size: 12.5px;
  font-weight: 600;
  text-align: left;
}
.pick-progress {
  flex: none;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  color: var(--muted);
  background: var(--panel);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 2px 10px;
}
.pick-progress.done {
  color: #fff;
  background: var(--good, #22c55e);
  border-color: transparent;
}
.pick-opts {
  display: flex;
  gap: 6px;
  flex-wrap: nowrap;
  margin-top: 6px;
}
#pick-save {
  width: 100%;
  margin-top: 10px;
}

/* Skorio menü butonu ve sayfası */
.skorio-btn {
  font-weight: 900;
  color: var(--accent);
}
/* Üst menüdeki Skorinho: renk geçişli wordmark (davet paneliyle aynı) — kompakt boyut */
.nav-brand {
  gap: 5px;
  font-size: 14px;
  line-height: 1;
}
.nav-brand .skorio-logo {
  margin-right: 0;
  font-size: 0; /* svg'yi tam sarsın, hizayı bozmasın */
}
.nav-brand .skorio-logo svg {
  width: 17px;
  height: 17px;
}
/* Lig logosu emoji seçici (premium tile'lar + net seçim göstergesi) */
.icon-picker {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 2px 0 4px;
}
.icon-pick {
  position: relative;
  width: 46px;
  height: 46px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 23px;
  line-height: 1;
  border-radius: 13px;
  background: linear-gradient(
    160deg,
    var(--panel2),
    color-mix(in srgb, var(--panel) 70%, var(--panel2))
  );
  border: 1px solid var(--line);
  cursor: pointer;
  transition:
    transform 0.12s ease,
    border-color 0.12s ease,
    box-shadow 0.12s ease,
    background 0.12s ease;
}
.icon-pick:hover {
  transform: translateY(-2px);
  border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.28);
}
.icon-pick.active {
  border-color: var(--accent);
  background: linear-gradient(
    160deg,
    color-mix(in srgb, var(--accent) 22%, var(--panel2)),
    var(--panel2)
  );
  box-shadow:
    0 0 0 2px color-mix(in srgb, var(--accent) 60%, transparent),
    0 6px 16px rgba(0, 0, 0, 0.35);
  transform: translateY(-1px);
}
/* Seçili rozeti — sağ üstte accent daire + beyaz tik */
.icon-pick.active::after {
  content: '';
  position: absolute;
  top: -6px;
  right: -6px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: var(--accent)
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E")
    center / 12px 12px no-repeat;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);
}
/* Logo yükleme kutucuğu da aynı tile dilinde */
.icon-pick.lg-logo-btn {
  color: var(--muted);
}
.skorio-logo {
  font-size: 22px;
  margin-right: 8px;
}
/* Skorio marka bloğu her yerde: davet paneli + widget + skorio ekranı (gradient yazı).
   Task068 — logo ile yazı arası TEK yerden yönetilir. Eskiden `gap` kuralın kendisinden,
   ek boşluk ise `.skorio-logo`'nun eski `margin-right`'ından geliyordu; ikisi toplanınca
   bağlama göre 6-13px arası değişen dağınık bir aralık çıkıyordu (kullanıcı bildirdi).
   Marj burada sıfırlanır, aralık yalnız `gap` ile belirlenir. */
.skorio-title {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-weight: 900;
}
.skorio-title .skorio-logo {
  margin-right: 0;
}
/* Animasyonlu logo (davet panelindeki nabız) marka bloğunun her kullanımında */
.skorio-title .skorio-logo svg {
  animation: promo-pulse 2.4s ease-in-out infinite;
}
/* Widget başlığı: kompakt boyut */
.sw-brand {
  font-size: 15px;
  line-height: 1;
}
/* Logo span'i svg'yi tam sarsın (font-size kaynaklı uzama hizayı bozmasın) */
.sw-brand .skorio-logo {
  /* Task068 — aralık artık YALNIZ `.skorio-title`'ın gap'inden gelir; buradaki eski marj
     onun üstüne binip widget'ta 11px'lik dağınık boşluk yapıyordu. */
  margin-right: 0;
  font-size: 0;
  line-height: 0;
  display: inline-flex;
  align-items: center;
}
.sw-brand .skorio-logo svg {
  width: 20px;
  height: 20px;
  vertical-align: 0;
}
/* Davet panelinde marka: logo üstte, gradient "Skorio" altta (dikey blok) */
.promo-icon.skorio-title {
  flex-direction: column;
  gap: 2px;
  font-size: 14px;
}

/* Skorio ikonu hizaları */
.skorio-btn svg,
.pick-counter svg {
  vertical-align: -2px;
}
.skorio-logo svg {
  width: 24px;
  height: 24px;
  vertical-align: -4px;
}
.pick-btn svg {
  width: 16px;
  height: 16px;
}

.skorio-how {
  font-size: 13px;
  line-height: 1.6;
  color: var(--text);
  padding: 6px 2px 10px;
}

/* Skorio davet paneli (menünün altında) */
.skorio-promo {
  position: relative;
  max-width: 860px;
  margin: 0 auto;
  width: 100%;
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 14px 44px 14px 16px;
  border-radius: var(--radius);
  border: 1px solid var(--accent);
  background: linear-gradient(135deg, var(--glow1), var(--panel));
  box-shadow: 0 0 24px rgba(25, 224, 138, 0.08);
}
.promo-icon svg {
  width: 34px;
  height: 34px;
  color: var(--accent);
}
.promo-text {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.promo-text b {
  font-size: 15px;
  color: var(--text);
}
.promo-text span {
  font-size: 12.5px;
  color: var(--muted);
  /* Task551 (kullanıcı: "panel başlıkları kayarak geldikten sonra 1-2 piksel aşağı
     kayıyor") — oransal satır yüksekliği KESİRLİ piksel üretiyordu (12,5 × 1,4 = 17,5;
     sade modda 11,5 × 1,35 = 15,525). Kart yüksekliği 97,55 px olunca ALTINDAKİ tüm
     bölümler yarım piksel konumda kalıyor; giriş animasyonu bitince tarayıcı piksel
     ızgarasına oturtuyor ve "sonradan kayma" görünüyor. Tam sayı satır yüksekliği bu
     zinciri kırar. */
  line-height: 18px;
}
/* Task315 (kullanıcı) — davet kapatma ✕ kaldırıldı (.promo-close): "yanlışlıkla
   kapattım, bir daha gelmiyor". Davet artık kalıcı; kapatma tercihi de yok sayılır. */
/* Nasıl Oynanır */
/* Haftalık hak doldu bilgilendirme popup'ı (Skorio temalı, ortalanmış) */
.quota-card {
  text-align: center;
  max-width: 360px;
}
.quota-hero .skorio-logo {
  display: inline-flex;
}
.quota-hero .skorio-title {
  font-size: 24px;
  gap: 9px;
}
.quota-hero .skorio-logo svg {
  width: 34px;
  height: 34px;
  animation: promo-pulse 2.4s ease-in-out infinite; /* davet panelindeki nabız */
}
/* Bildirimler modalı (Task036) */
.notif-desc {
  font-size: 13.5px;
  color: var(--muted);
  line-height: 1.5;
  margin: 0 0 12px;
}
.notif-types {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 14px;
}
.notif-type {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 11px 14px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
  font-size: 14px;
  font-weight: 600;
  color: var(--text);
  cursor: pointer;
}
/* Task043 — ana anahtar (abonelik) belirgin; tip anahtarları alt grup, abone değilken soluk */
.notif-master {
  background: color-mix(in srgb, var(--accent) 10%, var(--panel2));
  border-color: color-mix(in srgb, var(--accent) 35%, var(--line));
  font-weight: 800;
}
.notif-sub-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 8px;
  padding-left: 10px;
  border-left: 2px solid var(--line);
}
.notif-sub-list.notif-sub-off {
  opacity: 0.5;
}
.notif-sub-list.notif-sub-off .notif-type {
  cursor: default;
}
/* Tema-uyumlu aç/kapa anahtarı (admin Turnuvalar switch'iyle aynı dil) */
.notif-switch {
  position: relative;
  width: 42px;
  height: 24px;
  flex: none;
}
.notif-switch input {
  position: absolute;
  opacity: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  cursor: pointer;
}
.ns-slider {
  position: absolute;
  inset: 0;
  border-radius: 999px;
  background: var(--line);
  transition: background 0.15s;
}
.ns-slider::after {
  content: '';
  position: absolute;
  top: 3px;
  left: 3px;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  background: #fff;
  transition: transform 0.15s;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
}
.notif-switch input:checked + .ns-slider {
  background: var(--accent);
}
.notif-switch input:checked + .ns-slider::after {
  transform: translateX(18px);
}
#notif-toggle {
  width: 100%;
}
/* Yeni haklar tarih kutusu — popup'ın vurgu öğesi (göze görünür) */
.quota-when-box {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  margin: 4px auto 14px;
  max-width: 260px;
  padding: 11px 16px;
  border-radius: 12px;
  background: color-mix(in srgb, var(--accent) 12%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--line));
}
.quota-when-label {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--muted);
}
.quota-when-label svg {
  width: 13px;
  height: 13px;
}
.quota-when-date {
  font-size: 19px;
  font-weight: 900;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}
.quota-badge {
  display: inline-block;
  margin: 10px 0 4px;
  padding: 3px 14px;
  border-radius: 999px;
  font-weight: 900;
  font-size: 15px;
  letter-spacing: 0.5px;
  color: var(--gold, #f5c542);
  background: color-mix(in srgb, var(--gold, #f5c542) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--gold, #f5c542) 40%, transparent);
  font-variant-numeric: tabular-nums;
}
.quota-title {
  margin: 8px 0 6px;
  font-size: 19px;
}
.quota-text {
  margin: 0 auto 8px;
  max-width: 300px;
  font-size: 13.5px;
  line-height: 1.5;
  color: var(--text);
}
.quota-sub {
  margin: 0 auto 14px;
  max-width: 300px;
  font-size: 12.5px;
  line-height: 1.45;
  color: var(--muted);
}
.quota-card #quota-ok {
  min-width: 140px;
}
.howto-hero {
  text-align: center;
  padding: 6px 0 14px;
}
.howto-hero svg {
  width: 40px;
  height: 40px;
  color: var(--accent);
}
.howto-hero h2 {
  margin: 6px 0 0;
  font-size: 22px;
}
.howto-step {
  display: flex;
  gap: 14px;
  align-items: flex-start;
  padding: 12px;
  margin: 8px 0;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.howto-emoji {
  font-size: 28px;
  flex: none;
}
.howto-step p {
  margin: 4px 0 0;
  font-size: 12.5px;
  color: var(--muted);
  line-height: 1.5;
}
.howto-cta {
  width: 100%;
  margin-top: 10px;
}
@media (max-width: 640px) {
  .skorio-promo {
    flex-direction: column;
    text-align: center;
    padding: 16px;
  }
}

.pick-counter {
  cursor: pointer;
}
.pick-counter:hover {
  text-decoration: underline;
}

/* ===== Skorio oyun görünümü: kurumsal değil, DAVETKAR ===== */
/* Skorio başlıkları: altın-aksan gradyan metin */
.skorio-logo + span,
.howto-hero h2 {
  background: linear-gradient(90deg, var(--gold), var(--accent));
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  font-weight: 900;
}
/* Davet paneli: canlı gradyan + nazikçe nabız atan hedef */
.skorio-promo {
  border: 1px solid transparent;
  background:
    linear-gradient(135deg, var(--glow1), var(--panel)) padding-box,
    linear-gradient(90deg, var(--gold), var(--accent)) border-box;
}
.promo-icon svg {
  animation: promo-pulse 2.4s ease-in-out infinite;
}
@keyframes promo-pulse {
  0%,
  100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.15);
  }
}
.skorio-promo .btn-primary,
.howto-cta,
#pick-save {
  background: var(--accent-fill-h);
  border: none;
  color: var(--on-accent);
  font-weight: 900;
  letter-spacing: 0.3px;
  transition: transform 0.12s ease;
}
.skorio-promo .btn-primary:hover,
.howto-cta:hover,
#pick-save:hover {
  transform: translateY(-1px) scale(1.02);
}
/* Sayaç: gradyan çerçeveli hap */
.pick-counter {
  display: inline-block;
  margin: 8px auto 0;
  padding: 5px 14px;
  border-radius: 999px;
  border: 1px solid transparent;
  background:
    linear-gradient(var(--panel), var(--panel)) padding-box,
    linear-gradient(90deg, var(--gold), var(--accent)) border-box;
  color: var(--text);
}
main#content:has(#pick-counter) {
  text-align: inherit;
}
.pick-counter {
  position: relative;
  left: 50%;
  transform: translateX(-50%);
}
/* Tahmin seçenekleri: oyunsu haplar */
.pick-opts .day-btn {
  font-size: 14px;
  padding: 8px 10px;
  transition: transform 0.1s ease;
  /* Tek satırda eşit paylaş — uzun TR etiketleri (Ev sahibi/Beraberlik/Deplasman)
     alt satıra taşmasın; dar ekranda font biraz küçülür */
  flex: 1 1 0;
  min-width: 0;
  white-space: nowrap;
  text-align: center;
}
/* Task092 — Dar ekranda etiket KIRPILMAZ, alt satıra iner ("Deplasman" → "Deplas…"
   oluyordu ve satır hizasız görünüyordu — kullanıcı bildirdi). Butonlar eşit genişlik
   ve eşit yükseklikte kalır. DİKKAT: bu kural yukarıdaki `.pick-opts .day-btn`
   bloğundan SONRA gelmeli, aynı özgüllükte son yazan kazanıyor. */
@media (max-width: 430px) {
  .pick-opts {
    gap: 5px;
    align-items: stretch;
  }
  .pick-opts .day-btn {
    padding-left: 4px;
    padding-right: 4px;
    font-size: 12.5px;
    line-height: 1.2;
    letter-spacing: -0.2px;
    white-space: normal;
    overflow-wrap: anywhere;
  }
}
.pick-opts .day-btn:hover {
  transform: scale(1.06);
}
.pick-opts .day-btn.active {
  background: var(--accent-fill-h);
  color: var(--on-accent);
  font-weight: 900;
}
/* Liderlik: ilk 3 madalyalı, puanlar altın */
.board-row .ps-year {
  font-size: 16px;
  /* Task603 (kullanıcı: "oklar bazen sıra numarasının altına kayıyor") — madalya/sıra ile ok
     tek satırda, sarmaz; genişlik içeriğe göre (taban 44px). */
  display: inline-flex;
  align-items: center;
  justify-content: space-between; /* sıra solda, ok SAĞ kenarda → ok→yıldız arası sabit */
  gap: 2px;
  white-space: nowrap;
  /* rev-2 (kullanıcı: "sıra çift haneye geçince alan genişliyor, yıldız hizası bozuluyor")
     — SABİT genişlik: iki haneli sıra (18) + 2 + iki haneli ok (22) = 42 → 44px; içerik ne
     olursa olsun yıldızlar aynı x'te. Ok sağa yaslı olduğu için ok→yıldız arası her satırda
     aynı (8px, yıldız→avatar ile eşit). */
  width: 44px;
  min-width: 44px;
  margin-right: 0; /* ölçüldü: sağa yaslı okla arası 8px (yıldız→avatar ile eşit) */
}
/* rev-3 (kullanıcı: "ilk 3 madalyadan sonra gelen sıra numaraları madalyalarla aynı hizada
   değil") — madalya emojisi ile rakamın sol kenarı farklıydı (emoji 2px içeride, 20px;
   "10" 28px). Sıra/madalya SABİT 24px kutuda ORTALI: hepsi aynı eksende. Yalnız Skorinho
   cetveli satırları (`.board-row`) — diğer `.ps-row` klonlarına dokunulmaz. */
.board-row .ps-rank {
  display: inline-flex;
  justify-content: center;
  width: 24px;
  flex: none;
  font-style: normal;
}
.board-row .ps-team .fav-star {
  margin: 0; /* yıldız avatarın solunda, ligdeki gibi; aralar ps-team gap'i (8px) */
}
.board-row .fav-star-ph {
  width: 23px; /* gerçek yıldız düğmesiyle aynı kutu: kendi satırında ad kaymaz */
  height: 1px;
  flex: none;
}
.board-row.top1 {
  background: linear-gradient(90deg, rgba(244, 197, 66, 0.14), transparent);
}
.board-row.top2 {
  background: linear-gradient(90deg, rgba(200, 200, 210, 0.1), transparent);
}
.board-row.top3 {
  background: linear-gradient(90deg, rgba(205, 127, 50, 0.1), transparent);
}
.board-pts {
  color: var(--gold);
  font-size: 14px;
}
/* Nasıl Oynanır adımları: renkli kenar şeridi */
.howto-step {
  border-left: 3px solid var(--accent);
}
.howto-step:nth-child(3) {
  border-left-color: var(--gold);
}
.howto-step:nth-child(4) {
  border-left-color: var(--red);
}
/* Skorio menü butonu: her zaman hafif parlar */
.skorio-btn {
  background: linear-gradient(90deg, rgba(25, 224, 138, 0.12), rgba(244, 197, 66, 0.1));
  border: 1px solid var(--accent);
}

/* Kurallar: havuz kutusu + bonus açıklamaları */
.pool-box {
  margin: 10px 0 14px;
  padding: 12px 14px;
  border-radius: 12px;
  border-left: 3px solid var(--gold);
  background: var(--panel2);
}
.pool-box h4 {
  margin: 0 0 8px;
  font-size: 13px;
  color: var(--gold);
}
.pool-box p {
  margin: 0;
  font-size: 12.5px;
  line-height: 1.65;
  color: var(--text);
}
/* Task612 — havuz sınırları satırı: kutunun içinde, ana metinden ince bir ayraçla */
.pool-box p.pool-limits {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid var(--line2);
  font-size: 12px;
  color: var(--muted);
}
.bonus-desc {
  margin: -4px 0 8px;
  font-size: 11.5px;
  color: var(--muted);
  line-height: 1.4;
}

.howto-rules {
  width: 100%;
  margin-top: 8px;
}

/* Skorio sayfa başlığı: logo içeriden başlasın */
#skorio-head .dt-score {
  padding-left: 16px;
  justify-content: flex-start;
}
#skorio-head .tm-sub {
  padding-left: 16px;
}

/* Skorio sekmeleri: panel kenarlarına değmesin */
/* Skorio sekmeleri: zarif segmented control (kaba bloklar yerine) */
/* Task150 — Skorinho sekmeleri LİG SEKMELERİYLE aynı dilde (kullanıcı kararı: "liglerdekini
   skorinho menüsüne uygula"). Fark, seçili sekmedeydi: ligde dolu accent zemin + beyaz yazı,
   Skorinho'da soluk panel + accent yazı. Ölçüler de eşitlendi (aralık 4, yarıçap 13/9,
   eşit genişlikte sekmeler). */
#skorio-body .dt-tabs {
  margin: 0 12px 14px;
  gap: 4px;
  padding: 4px;
  background: var(--panel2);
  border: 1px solid var(--line);
  border-radius: 13px;
}
#skorio-body .dt-tab {
  flex: 1;
  text-align: center;
  background: transparent;
  border: 0;
  border-radius: 9px;
  color: var(--muted);
  font-size: 12.5px;
  font-weight: 800;
  padding: 10px 4px;
  white-space: nowrap;
  transition: background 0.15s ease;
}
#skorio-body .dt-tab:hover {
  color: var(--text);
}
#skorio-body .dt-tab.active {
  background: var(--accent);
  color: #fff;
  border: 0;
  box-shadow: none;
}
#skorio-body .dt-pane {
  padding: 0 12px;
}

/* Kurallar: kart düzeni (çizgi karmaşası yerine) */
.rules-cap {
  margin: 16px 0 8px;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--muted);
}
.rule-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 8px;
}
@media (min-width: 640px) {
  .rule-grid {
    grid-template-columns: 1fr 1fr;
  }
}
.rule-card {
  padding: 10px 12px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.rule-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.rule-name {
  font-size: 13px;
  font-weight: 800;
  color: var(--text);
}
.rule-badges {
  display: flex;
  gap: 6px;
  margin-top: 6px;
}
.rule-badge {
  font-size: 11px;
  font-weight: 800;
  padding: 2px 9px;
  border-radius: 999px;
  background: var(--chip-bg);
  border: 1px solid var(--line2);
  color: var(--accent);
  white-space: nowrap;
}
.rule-badge.gold {
  color: var(--gold);
  border-color: var(--gold-d);
}
/* Task297 — TOKEN rozetleri puan rozetinden ayrışır: elmas ikonu kimliktir, sayı nötr.
   (Kullanıcı: "−1/−2 altın olunca puan sanılıyor".) */
.rule-badge.tok {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: var(--text);
  border-color: var(--line2);
}
.rule-badge.tok .tok-gem {
  flex: none;
}
.rule-desc {
  margin: 5px 0 0;
  font-size: 11.5px;
  color: var(--muted);
  line-height: 1.45;
}

/* Tahmin popup'ı: soru başlığı + kural rozetleri; seçenekler ORTALI (kullanıcı kararı) */
.pick-q-head {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  flex-wrap: wrap;
  text-align: center;
}
.pick-q-head h4 {
  margin: 0;
}
.pick-opts {
  justify-content: center;
}

/* Davet paneli: ilk 3 mini liderlik + Skorio CTA (yarış ana sayfada görünür) */
.skorio-promo {
  flex-wrap: wrap;
}
/* Ana sayfa kişisel Skorio widget'ı (Task034): sıra+puan+hafta+hak, tıklayınca Skorio */
.skorio-widget {
  flex-basis: 100%;
}
.sw-inner {
  cursor: pointer;
  border-radius: 12px;
  transition:
    background 0.15s ease,
    transform 0.1s ease;
}
.sw-inner:hover {
  transform: translateY(-1px);
}
/* Sayfa widget'ı (statik): tıklanamaz, hover'da oynamaz */
.sw-inner.sw-static {
  cursor: default;
}
.sw-inner.sw-static:hover {
  transform: none;
}
.sw-inner:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.sw-head {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
  /* Task312 — kompakt widget: başlık altı boşluk kısıldı (10 → 6) */
  margin-bottom: 6px;
}
/* Task312 — dönem kapanış çipi (hafta çipinin solunda): süre + aciliyet rengi */
.sw-cd {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
}
.sw-cd b {
  font-weight: 800;
  color: var(--text);
}
.sw-cd svg {
  width: 11px;
  height: 11px;
}
.sw-cd.skr-warm b {
  color: var(--gold);
}
.sw-cd.skr-hot b {
  color: var(--red);
}
.sw-cd.skr-off {
  opacity: 0.6;
}
/* Widget hafta rozeti (sağ üst) — başlıktaki W31 ile aynı bilgi, home widget'ında */
.sw-week {
  margin-left: auto;
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 11.5px;
  font-weight: 800;
  color: var(--muted);
  background: var(--chip-bg);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 2px 9px;
  font-variant-numeric: tabular-nums;
}
/* Skorinho SAYFASINDA widget başlığı gizli (başlık zaten üstte var) */
.sw-page .sw-head {
  display: none;
}
/* Sayfa widget'ı alttaki sekme menüsüyle aynı genişlikte (12px inset) — panel kenarına değmesin */
.sw-page {
  margin: 0 12px 8px;
}
/* Task312 (kullanıcı) — Skorinho sayfası DİKEY SIKILAŞTIRMA: cetvel mobilde ekranın
   %80'inden sonra başlıyordu. Başlık/sekme boşlukları kısıldı; dönem kartı KALDI ama
   yanlardan 12px içeride durur (panel kenarına değmez — ilke 4). */
#skorio-page {
  padding-top: 10px;
}
#skorio-head.tm-head {
  padding-top: 4px;
  padding-bottom: 4px;
}
#skorio-page .sk-round {
  margin: 4px 12px 8px;
}
#skorio-page .dt-tabs {
  margin-bottom: 8px;
}
#skorio-page .board-scopes {
  margin-bottom: 6px;
}
#skorio-page .ps-head,
#skorio-page .ps-row {
  padding-top: 6px;
  padding-bottom: 6px;
}
.sw-head .sw-go {
  margin-left: auto;
  font-size: 12px;
  font-weight: 700;
  color: var(--accent);
}
.sw-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
}
.sw-stat {
  display: flex;
  flex-direction: column;
  /* Task128 — Değer etiketin ALTINDA ORTALI (kullanıcı isteği: "veriler etiketi
     ortalasın"); eskiden ikisi de sola dayalıydı ve rakam etiketten kayık duruyordu. */
  align-items: center;
  text-align: center;
  gap: 1px;
  background: var(--panel2);
  border: 1px solid var(--line);
  border-radius: 10px;
  /* Task312 — puan kartları kompakt: 8x10 → 5x8 dolgu (veri aynı, kabuk küçüldü) */
  padding: 5px 8px;
  min-width: 0;
}
.sw-k {
  /* Task286 — etikete ikon eklendi (SK_STAT_IC): satır içi hizalı, accent renkte */
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  white-space: nowrap;
}

.sw-k svg {
  width: 12px;
  height: 12px;
  color: var(--accent);
  flex: none;
}
/* Task286 — profil popup: marka satırı (✕ ile aynı hizada, solda).
   Task290 — sağında Kurallar düğmesi; ✕'e çarpmasın diye sağ pay bırakılır. */
.entry-brand {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin: 0 0 10px;
  padding-right: 46px;
}
.entry-rules {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 12.5px;
  padding: 5px 10px;
}
/* Task600 (kullanıcı: "favori yıldızı Kurallar'ın solunda, ✕ sağında, üçü aynı hizada;
   yıldız oyuncu kartındaki gibi çıplak") — üst satırdaki eylem grubu. ✕ yapışkan ve
   negatif marjla köşede durur; satır yüksekliği ✕ ile aynı (36px) tutulur ki merkezler
   hizalansın. */
.entry-acts {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  height: 36px;
}
.entry-acts .fav-star {
  margin: 0;
  padding: 0;
}
/* Task290 — widget başlığındaki kurallar düğmesi: hafta çipiyle aynı satırda, sade */
.sw-rules {
  background: transparent;
  border: 0;
  cursor: pointer;
  color: var(--muted);
  padding: 2px 0 2px 6px;
  display: inline-flex;
  align-items: center;
  line-height: 0;
}
.sw-rules svg {
  width: 14px;
  height: 14px;
}
@media (hover: hover) {
  .sw-rules:hover {
    color: var(--accent);
  }
}
.entry-brand .skorio-title {
  font-size: 17px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
.entry-brand .skorio-logo {
  font-size: 0;
  margin-right: 0;
}
.entry-brand .skorio-logo svg {
  width: 19px;
  height: 19px;
}
.sw-v {
  font-size: 17px;
  font-weight: 900;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 4px;
}
/* Kalan hak: doluyken yeşil, tükendikçe kırmızı (hue JS'ten --left-hue) */
.sw-v.sw-left {
  color: hsl(var(--left-hue, 120) 72% 52%);
}
.sw-v .mv {
  font-size: 11px;
}
@media (max-width: 520px) {
  .sw-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
.promo-board {
  flex-basis: 100%;
  display: flex;
  align-items: center;
  gap: 8px 12px;
  flex-wrap: wrap;
  padding-top: 10px;
  margin-top: 2px;
  border-top: 1px solid var(--line);
  font-size: 12.5px;
}
/* Task315 (kullanıcı) — Hafta+Genel mini lider tablosu MOBİLDE varsayılan KAPALI;
   üstteki widget/davet görünür kalır, ortadaki küçük aşağı-ok eski görünüme genişletir.
   Web'de ok görünmez, tablo hep açık. */
.pb-fold {
  display: none;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 18px;
  padding: 0;
  border: 0;
  background: none;
  color: var(--muted);
  cursor: pointer;
}
.pb-fold svg {
  transition: transform 0.2s;
}
@media (max-width: 759px) {
  /* Ok AKIŞTAN çıkar (mutlak, alt padding'in içinde): kendi satırı + flex gap'leriyle
     ~45px boş yükseklik üretiyordu (kullanıcı: "ok çok fazla boş alan oluşturuyor"). */
  /* Task497 (kullanıcı: "minimize konumdayken puan kartlarının altında gereksiz bir
     boşluk") — ok panelin ALT ÇİZGİSİNE OTURUYORDU (bottom: -1px, kural #4) ve altında
     18px'lik bir bant tutuyordu. Ok kısalır, çizgiden 2px uzakta durur. */
  .pb-fold {
    display: inline-flex;
    position: absolute;
    left: 50%;
    bottom: 2px;
    height: 14px;
    transform: translateX(-50%);
    margin: 0;
  }
  /* Kapalıyken okun oturduğu alt boşluk daralır; açıkken tablo zaten ayırıyor.
     Task497 — kapalı tabloyu (0 yükseklik) ayıran satır boşluğu da SIFIRLANIR: 10px'i
     görünmeyen bir öğe için harcıyordu. Ölçüldü (390 px): kartların altındaki boşluk
     27 → 19 px. */
  #skorio-promo:not(.pb-open) {
    row-gap: 0;
    padding-bottom: 18px;
  }
  /* Task433 rev (kullanıcı: "Skorinho widget'ının aşağıya doğru genişleme ve daralması
     animasyonlu olsun") — `display: none` anlık gizliyordu; tablo artık yüksekliğiyle
     birlikte açılıp kapanıyor. Kapak `max-height` üzerinden çalışır: içerik yüksekliği
     önceden bilinmiyor, ölçüp JS'e yazmak yeniden çizimlerde titreme üretirdi. */
  #skorio-promo #promo-board {
    overflow: hidden;
    transition:
      max-height var(--dur-md) var(--ease-out),
      opacity var(--dur-sm) var(--ease-out),
      padding-top var(--dur-md) var(--ease-out);
  }
  #skorio-promo:not(.pb-open) #promo-board {
    max-height: 0;
    opacity: 0;
    padding-top: 0;
    border-top-width: 0;
  }
  #skorio-promo.pb-open .pb-fold svg {
    transform: rotate(180deg);
  }
  /* Tablo verisi henüz yokken (hidden) ok anlamsız — o da gizli */
  #skorio-promo:has(> #promo-board[hidden]) .pb-fold {
    display: none;
  }
}
@media (prefers-reduced-motion: reduce) {
  .hint-hand {
    animation: none;
  }
  .veri-tazeleniyor .lc-badge.live,
  .veri-tazeleniyor .lc-badge.ht {
    transition: none;
  }
  #skorio-promo #promo-board {
    transition: none;
  }
  .pb-fold svg {
    transition: none;
  }
}
/* Task315 (kullanıcı) — davetin son cümlesi mobilde gizli */
.promo-tail {
  font-style: normal;
}
@media (max-width: 759px) {
  .promo-tail {
    display: none;
  }
}
.promo-board-title {
  color: var(--gold);
  font-size: 12.5px;
}
.promo-board-row {
  color: var(--muted);
  white-space: nowrap;
}
.promo-board-row b {
  color: var(--gold);
}
.promo-go {
  margin-left: auto;
  padding: 4px 12px;
  font-size: 12.5px;
}
@media (max-width: 640px) {
  .promo-go {
    margin-left: 0;
  }
  .promo-board {
    justify-content: center;
  }
}

/* Task022 — Liderlik kapsam çubuğu + lig yönetimi */
.board-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-bottom: 10px;
}
.board-scope {
  min-width: 160px;
}
#league-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.lg-btn {
  font-size: 12.5px;
  padding: 5px 10px;
}
.league-code {
  font-weight: 900;
  letter-spacing: 1.5px;
  color: var(--gold);
  padding: 4px 10px;
  border-radius: 8px;
  border: 1px dashed var(--gold);
}
/* Zarif bilgi kartı (turnuva görünümü notu vb.) */
.board-note {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: 2px 0 12px;
  padding: 9px 12px;
  border-radius: 10px;
  border: 1px solid color-mix(in srgb, var(--accent) 28%, var(--line));
  background: color-mix(in srgb, var(--accent) 8%, transparent);
  color: var(--muted);
  font-size: 12px;
  line-height: 1.45;
}
.board-note .info-ic {
  flex: none;
  color: var(--accent);
  margin-top: 1px;
}
.board-note .info-ic .ic {
  width: 16px;
  height: 16px;
}

/* Skorio başlık meta rozetleri (dönem + hak) — başlıkla AYNI hizada, tek satır */
#skorio-head {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  justify-content: space-between; /* week rozeti sağ üstte (başlık solda) */
}
.skorio-meta {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}
.skorio-meta .rule-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  white-space: nowrap;
}
.skorio-meta .rule-badge svg {
  flex: none;
  margin: 0;
}

/* Liderlik kapsam pill'leri + Liglerim yönetimi (Task022 revizyon)
   Task378 (kullanıcı) — HER genişlikte tek satır: şerit uzayınca alt satıra dönmez,
   yatay kaydırılır ve taşan kenar flulaşır (mobildeki deneyimin aynısı). `.day-switch`
   tabanı `inline-flex` olduğu için kap içeriğe göre büyüyordu ve masaüstünde TAŞMA hiç
   oluşmuyordu — genişlik burada sınırlanır, yoksa kaydırma da solma da devreye girmez. */
.board-scopes {
  display: flex;
  width: 100%;
  box-sizing: border-box;
  justify-content: flex-start;
  flex-wrap: nowrap;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
  gap: 6px;
  margin-bottom: 10px;
}
.board-scopes::-webkit-scrollbar {
  display: none;
}
.board-scopes .day-btn,
.board-scopes .scope-comp {
  flex: none;
  white-space: nowrap;
}
/* Task598 (kullanıcı: "Genel ve Hafta düğmelerini çok az büyüt, ikon ve yazı zor sığmış
   gibi") — ölçüldü: yan dolgu 4px'ti; 12px'e çıktı, boy 32 → 34px. */
.board-scopes .day-btn:not(.scope-comp) {
  padding: 8px 12px;
  gap: 6px;
}
.board-scopes .scope-comp {
  padding: 7px 9px;
}
.board-scopes .comp-logo {
  margin: 0;
}
.lg-card {
  cursor: pointer;
}
.lg-card-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 8px;
}
.lg-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 12px;
}
.lg-form {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  margin-top: 10px;
}
.lg-form .auth-input {
  flex: 1;
  min-width: 180px;
}
.lg-form.hidden {
  display: none;
}
.lg-code-input {
  text-transform: uppercase;
  letter-spacing: 2px;
}
.past-round {
  margin-top: 12px;
  font-weight: 700;
}
/* Geçmiş dönem seçici (Tahminlerim): başlık + dönem dropdown'ı tek satırda */
.hist-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
  margin-top: 16px;
}
.hist-head .rules-cap {
  margin: 0;
}
.hist-round {
  min-width: 120px;
  max-width: 200px;
}

/* Tahminlerim: premium tahmin kartları (rule-card diliyle uyumlu) */
.pk-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin: 4px 0 6px;
}
.pk-card {
  background: var(--panel2);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 12px 14px;
  /* İçeriğe göre şişip container'ı taşırmasın (mobil): genişlik container'a sabit,
     iç metinler (takım adı) ellipsis ile kırpılır */
  width: 100%;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
  transition:
    border-color 0.15s ease,
    transform 0.1s ease;
}
.pk-card.tn-link {
  cursor: pointer;
}
/* Kart tıklanabilir ama İÇERİK altı çizilmez — hover geri bildirimi kenar+yükselme */
.pk-card.tn-link:hover,
.pk-card.tn-link:hover * {
  text-decoration: none;
}
.pk-card.tn-link:hover {
  border-color: color-mix(in srgb, var(--accent) 55%, var(--line));
  transform: translateY(-1px);
}
.pk-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 6px;
}
.pk-when {
  display: inline-flex;
  align-items: center;
  font-size: 11.5px;
  font-weight: 700;
  color: var(--muted);
  letter-spacing: 0.2px;
}
/* Task312 — başlıktaki küçük skor rozeti (.pk-final) kalktı: skor artık maç satırında
   normal düzende (.pk-score). */
.pk-edit {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 8px;
  color: var(--accent);
  background: color-mix(in srgb, var(--accent) 12%, transparent);
}
.pk-match[data-pkmac] {
  cursor: pointer;
}
.pk-match[data-pkmac]:hover {
  filter: brightness(1.12);
}
.pk-match {
  display: flex;
  align-items: center;
  justify-content: center; /* takımlar ortada toplansın — kenarlara yapışmasın (web'de geniş boşluk gitti) */
  gap: 12px;
  font-size: 14.5px;
  font-weight: 700;
  color: var(--text);
  margin-bottom: 9px;
  line-height: 1.25;
}
.pk-team {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  flex: 0 1 auto; /* içeriğe göre; büyüyerek kenarlara itmez, gerekirse kısalır (ellipsis) */
  max-width: 42%;
  overflow: hidden;
}
/* Ev takımı "–"nin soluna, deplasman sağına yaslansın (ortadan dışa) */
.pk-team:first-of-type {
  justify-content: flex-end;
}
/* İsim taşarsa ellipsis — uzun takım adları (Trabzonspor/Çaykur Rizespor) mobilde kartı taşırmasın */
.pk-tn {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.pk-team:last-of-type {
  justify-content: flex-end;
}
.pk-team .crest {
  width: 20px;
  height: 20px;
  flex: none;
}
.pk-vs {
  color: var(--muted);
  font-weight: 600;
  flex: none;
}
/* Task325 (kullanıcı) — puan rozetine dokununca KIRILIM: +taban tahmin · +fark havuz +
   maç bonusları. Blok karta gömülü gelir, rozete dokununca açılır. */
.pk-pts {
  cursor: pointer;
}
.pk-brk {
  display: none;
  flex-wrap: wrap;
  justify-content: center;
  gap: 4px 10px;
  margin-top: 7px;
  padding: 6px 10px;
  border-radius: 8px;
  background: var(--chip-bg);
  font-size: 11.5px;
  color: var(--muted);
}
.pk-brk.open {
  display: flex;
}
.pk-brk-line b {
  color: var(--text);
  font-size: 10px;
  letter-spacing: 0.3px;
  margin-right: 3px;
}
.pk-brk-bonus {
  color: var(--gold);
  font-weight: 700;
}
.pk-brk-miss {
  opacity: 0.75;
}
/* Task312 — bitmiş maçta tahmin kartı skoru NORMAL maç düzeninde ortada:
   ad logo SKOR : SKOR logo ad (başlıktaki küçük skor rozeti kalktı). */
.pk-score {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  flex: none;
  font-size: 16px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  color: var(--text);
}
.pk-score .pk-x {
  color: var(--muted);
  font-weight: 700;
}
.pk-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 7px;
  justify-content: center;
}
.pk-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--chip-bg);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 4px 12px 4px 4px; /* seçim değeri (sağ) kenara yapışmasın — nefes payı */
  font-size: 12.5px;
  color: var(--text);
}
.pk-chip-q {
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--muted);
  background: var(--panel);
  border-radius: 999px;
  padding: 2px 7px;
}
.pk-chip b {
  font-weight: 800;
  padding: 0 2px; /* seçim değeri kendi alanında dengeli dursun */
}
.pk-pts {
  font-size: 11px;
  font-weight: 800;
  border-radius: 999px;
  padding: 1px 7px;
  background: color-mix(in srgb, var(--muted) 22%, transparent);
  color: var(--muted);
}
.pk-chip.won {
  border-color: color-mix(in srgb, var(--good, #22c55e) 55%, var(--line));
}
.pk-chip.won .pk-pts {
  background: color-mix(in srgb, var(--good, #22c55e) 90%, transparent);
  color: #fff;
}
.pk-chip.miss {
  opacity: 0.72;
}
/* Task347 — CANLI geçici renklendirme: KESİKLİ kontur + puan rozeti yok ("maç böyle
   biterse" ipucu); kesin won/miss düz konturlu ve +puanlıdır, ikisi karışmaz. */
.pk-chip.won-now {
  border: 1px dashed color-mix(in srgb, var(--good, #22c55e) 70%, var(--line));
  background: color-mix(in srgb, var(--good, #22c55e) 10%, var(--chip-bg));
}
.pk-chip.miss-now {
  border: 1px dashed color-mix(in srgb, var(--bad, #ef4444) 55%, var(--line));
  opacity: 0.78;
}
/* Canlı dakika rozeti (kart başlığı, sağda) — nabız atan nokta + dakika/İY */
.pk-dk {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 11px;
  font-weight: 800;
  color: var(--bad, #ef4444);
  font-variant-numeric: tabular-nums;
}
.pk-dk i {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--bad, #ef4444);
  animation: pkDkNabiz 1.6s ease-in-out infinite;
}
@keyframes pkDkNabiz {
  50% {
    opacity: 0.25;
  }
}
@media (prefers-reduced-motion: reduce) {
  .pk-dk i {
    animation: none;
  }
}
/* Bitmiş maç rozeti — kesin sonuç bir bakışta ayırt edilir (Task347) */
.pk-ms {
  font-size: 10.5px;
  font-weight: 800;
  color: var(--muted);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: 1px 8px;
}
/* İade edilen tahmin (iptal/ertelenen maç) — sönük + nötr rozet, puan yok */
.pk-card.pk-voided {
  opacity: 0.66;
}
.pk-refunded {
  font-size: 11px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--muted);
  background: var(--chip-bg);
  border: 1px dashed var(--line);
  border-radius: 999px;
  padding: 2px 10px;
}
/* N/C şeffaflığı (Task029): soru başına kaç oynadı/bildi + havuz — kesinleşmiş maçta */
.pk-stats {
  display: flex;
  flex-direction: column;
  gap: 3px;
  margin-top: 9px;
  padding-top: 8px;
  border-top: 1px dashed var(--line);
}
.pk-stat {
  font-size: 11.5px;
  color: var(--muted);
}
/* Task042 — "boz & yenile": bitmiş pick'in altında token aksiyonu */
.pk-foot {
  margin-top: 9px;
  padding-top: 8px;
  border-top: 1px dashed var(--line);
  display: flex;
  justify-content: flex-end;
}
.pk-scrap {
  font-size: 12px;
  font-weight: 700;
  padding: 5px 11px;
  color: var(--muted);
  border-color: var(--line);
}
.pk-scrap:hover {
  color: var(--text);
  border-color: var(--accent);
}
.pk-scrap.pk-scrap-confirm {
  color: var(--gold, #eab308);
  border-color: var(--gold, #eab308);
}
.pk-scrap svg {
  vertical-align: -2px;
  margin-right: 3px;
}
.pk-stat b {
  color: var(--text);
  font-weight: 700;
}
.pk-stat b:first-child {
  display: inline-block;
  min-width: 34px;
  color: var(--muted);
}
.past-round-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-top: 14px;
}
.pk-round-pts {
  font-size: 12px;
  font-weight: 800;
  color: var(--gold);
  background: color-mix(in srgb, var(--gold) 15%, transparent);
  border-radius: 999px;
  padding: 2px 10px;
}

/* Lig logoları: yüklenen görsel her yerde LOGO boyutunda (yuvarlak kırpım) */
.lg-logo {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  object-fit: cover;
  vertical-align: -5px;
}
.board-scopes .lg-logo {
  width: 18px;
  height: 18px;
  vertical-align: -4px;
}
.lg-icon {
  font-size: 16px;
}
.lg-start-note {
  flex-basis: 100%;
  margin: 4px 0 0;
  color: var(--gold);
}
.lg-confirm-note {
  color: var(--gold);
  font-size: 12.5px;
}

/* Sıra değişim okları (önceki haftaya göre) */
/* Task437 — fikstür satırında oynanmayan maçın durumu (skor/saat yerine). Kart
   rozetiyle aynı sessiz dil: sönük, küçük, tek satır. */
.g-off {
  font-size: 10.5px;
  font-weight: 800;
  color: var(--muted);
  white-space: nowrap;
  letter-spacing: 0.01em;
}

/* Task436 — sıra rozeti ile ok AYNI satırda kalır: dar hücrede alt satıra kayınca
   satır yüksekliği artıyordu (kullanıcı bildirdi). */
.table td:first-child,
.st-rank-cell {
  white-space: nowrap;
}
.mv {
  display: inline-flex;
  align-items: center;
  gap: 1px;
  font-size: 10.5px;
  font-weight: 900;
  margin-left: 1px; /* rozete yanaşık */
  vertical-align: 1px;
}
/* Ok = CSS üçgeni: eski ▲ görünürlüğünde, yazı glifinin yarısı genişlikte */
.mv::before {
  content: '';
  width: 0;
  height: 0;
  border-left: 4.5px solid transparent;
  border-right: 4.5px solid transparent;
}
.mv.up {
  color: var(--green-d, #19e08a);
}
.mv.up::before {
  border-bottom: 7px solid currentColor;
}
.mv.down {
  color: #e0524d;
}
.mv.down::before {
  border-top: 7px solid currentColor;
}

/* ===== Siyah-Beyaz (mono) tema — kullanıcı isteği: siyah/beyaz/gri ağırlıklı ===== */
:root[data-theme='mono'] {
  --bg: #0a0a0a;
  --bg2: #111111;
  --panel: #161616;
  --panel2: #1e1e1e;
  --line: #2c2c2c;
  --line2: #3a3a3a;
  --text: #f2f2f2;
  --muted: #9a9a9a;
  --green: #d4d4d4;
  --green-d: #a3a3a3;
  --gold: #cfcfcf;
  --gold-d: #9e9e9e;
  --accent: #ffffff;
  --on-accent: #0a0a0a; /* Task514 — mono'da accent beyaz: yazı siyah kalır */
  --glow1: #1c1c1c;
  --glow2: #101010;
  --topbar-bg: rgba(8, 8, 8, 0.85);
  --input-bg: #101010;
  --input-text: #ffffff;
  --title-a: #ffffff;
  --title-b: #bdbdbd;
  --pts: #ffffff;
  --shadow: 0 10px 30px rgba(0, 0, 0, 0.6);
  --head-a: #202020;
  --head-b: #141414;
  --chip-bg: #1a1a1a;
  --fav-name: #ffffff;
  --fav: #e8e8e8;
  --fav-bg: rgba(255, 255, 255, 0.08);
  --fav-glow: rgba(255, 255, 255, 0.22);
}
/* Mono: aktif hap/butonlarda beyaz zemin + siyah metin (accent beyaz olduğundan) */
:root[data-theme='mono'] .pick-opts .day-btn.active,
:root[data-theme='mono'] .skorio-promo .btn-primary,
:root[data-theme='mono'] .howto-cta,
:root[data-theme='mono'] #pick-save {
  color: #0a0a0a;
}
/* Mono: lig kimlik renkleri gri tona çekilir (siyah-beyaz bütünlüğü) */
:root[data-theme='mono'] .lc-comp,
:root[data-theme='mono'] .comp-tag {
  filter: grayscale(1);
}

/* Profil sayfası (Task024) */
.profile-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 50%;
  border: 1px solid transparent;
  background:
    linear-gradient(var(--panel2), var(--panel2)) padding-box,
    linear-gradient(90deg, var(--gold), var(--accent)) border-box;
  font-weight: 900;
  margin-right: 8px;
}
.my-team-card .band-hint {
  margin: 0 0 8px;
}
#mt-results {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-top: 8px;
}
.mt-result {
  text-align: left;
}
.profile-skorio {
  margin-top: 4px;
}
.fav-team-card .rule-name {
  cursor: pointer;
}

/* Profil kartlarındaki armalar sabit boyutlu kalır (dev logo taşması düzeltmesi) */
.my-team-card img.crest,
.fav-team-card img.crest,
.mt-result img.crest {
  width: 24px;
  height: 24px;
  object-fit: contain;
  vertical-align: -6px;
}
.my-team-card .rule-name b {
  font-size: 16px;
}

/* Mobil: Skorio davet paneli KOMPAKT (kullanıcı geri bildirimi: çok büyüktü) */
@media (max-width: 640px) {
  .skorio-promo {
    flex-direction: row;
    text-align: left;
    align-items: center;
    padding: 10px 34px 10px 12px;
    gap: 10px;
  }
  .promo-icon svg {
    width: 22px;
    height: 22px;
  }
  .promo-text b {
    font-size: 13.5px;
  }
  .promo-text span {
    font-size: 11.5px;
    line-height: 16px; /* Task551 — tam sayı: kesirli yükseklik alttaki bölümleri kaydırıyordu */
  }
  .skorio-promo .btn-primary {
    flex: none;
    padding: 6px 10px;
    font-size: 12px;
  }
  .promo-board {
    gap: 6px 10px;
    padding-top: 8px;
    font-size: 11.5px;
  }
}

/* Mobil: kaydırma kuralları Task378'de TABANA taşındı; burada yalnız mobile özgü dolgu
   kalır (parmakla kaydırırken hap kenarı ekranın altına yapışmasın). */
@media (max-width: 640px) {
  .board-scopes {
    padding-bottom: 4px;
  }
}
/* Profil başlığı: uzun e-posta taşmasın */
#profile-head .tm-sub {
  overflow-wrap: anywhere;
}

/* Kapsam şeridi: iki yönlü kenar solması (kaydırma ipucu — üst menü gibi) */
.board-scopes.has-more {
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
  mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
}
.board-scopes.has-prev {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 40px);
  mask-image: linear-gradient(90deg, transparent, #000 40px);
}
.board-scopes.has-prev.has-more {
  -webkit-mask-image: linear-gradient(
    90deg,
    transparent,
    #000 40px,
    #000 calc(100% - 40px),
    transparent
  );
  mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent);
}
/* Liderlik puan/doğru kolonları: değere göre kaymasın — sabit hücreler.
   Genişlikler tek yerde (aşağıdaki Task328 bloğu) — burada yalnız yerleşim. */
.ps-nums {
  display: inline-flex;
  align-items: baseline;
  justify-content: flex-end;
  gap: 8px;
}

/* Haftalık özet töreni (Task025) — kademeli reveal + kutlama dili */
.recap-card {
  max-width: 460px;
  text-align: center;
}
.recap-hero {
  padding: 8px 0 4px;
}
.recap-hero svg {
  width: 40px;
  height: 40px;
  color: var(--accent);
  animation: promo-pulse 2.4s ease-in-out infinite;
}
.recap-hero h2 {
  margin: 6px 0 0;
  font-size: 22px;
  background: linear-gradient(90deg, var(--gold), var(--accent));
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  font-weight: 900;
}
.recap-cap {
  text-align: left;
}
.recap-rows {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.recap-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
  opacity: 0;
  transform: translateY(8px);
  animation: recap-in 0.45s ease forwards;
}
/* N/C şeffaflık satırı (Task029): kart altında tam genişlik, sönük */
.recap-nc {
  flex-basis: 100%;
  font-size: 11px;
  color: var(--muted);
  padding-top: 4px;
  border-top: 1px dashed var(--line);
}
.recap-row.ok {
  border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
}
.recap-match {
  flex: 1;
  text-align: left;
  font-size: 13px;
}
.recap-tick {
  font-size: 15px;
}
.rule-badge.muted {
  color: var(--muted);
  opacity: 0.7;
}
.recap-bonuses {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  justify-content: center;
  margin-top: 10px;
}
.recap-bonus {
  padding: 5px 10px;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--glow1), var(--panel2));
  border: 1px solid var(--gold);
  font-size: 12.5px;
  opacity: 0;
  transform: scale(0.8);
  animation: recap-pop 0.4s ease forwards;
}
.recap-bonus b {
  color: var(--gold);
}
.recap-total {
  margin: 16px 0 6px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
}
.recap-total-num {
  font-size: 44px;
  font-weight: 900;
  line-height: 1;
  background: linear-gradient(90deg, var(--gold), var(--accent));
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.recap-rank {
  font-size: 13px;
  color: var(--gold);
  font-weight: 700;
}
.recap-podium {
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.recap-pod-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 12px;
  border-radius: 10px;
  background: var(--panel2);
}
.recap-pod-row b {
  flex: 1;
  text-align: left;
}
.recap-pod-row.me {
  background: linear-gradient(90deg, rgba(244, 197, 66, 0.16), transparent);
  border: 1px solid var(--gold);
}
.recap-pod-pts {
  font-weight: 900;
  color: var(--gold);
}
.recap-cta {
  width: 100%;
  margin-top: 16px;
}
@keyframes recap-in {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
@keyframes recap-pop {
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* Liderlik: kendi satırın vurgulu + özet ayraç + genişlet butonu */
.board-row.me {
  background: linear-gradient(90deg, rgba(79, 140, 255, 0.16), transparent);
  /* Layout'u kaydırmayan sol vurgu (border yerine inset shadow — hiza korunur) */
  box-shadow: inset 3px 0 0 var(--accent);
}
.board-gap {
  text-align: center;
  color: var(--muted);
  letter-spacing: 4px;
  padding: 2px 0;
  font-size: 14px;
}
.board-expand {
  width: 100%;
  margin-top: 8px;
}
/* Task328 rev (kullanıcı) — yıldız KULLANICI ADININ yanında durur: .fav-star'ın genel
   margin-left:auto kuralı liderlik satırında yıldızı kolonun ta sağına itiyordu.
   Kazanılan alan sayı kolonlarına verildi. */
.ps-row .fav-star,
.ps-head .fav-star {
  margin-left: 0;
  padding: 4px;
}
/* Puan/doğru/oynanan kolonları: sağa hizalı sabit hücreler + tabular (kayma yok).
   Task328 (kullanıcı) — hücreler başlık + 4-5 haneyi RAHAT sığdırır; rev ile sıra/yıldız
   boşluklarından kazanılan alan buraya eklendi. */
.col-pts,
.col-correct,
.col-total {
  font-variant-numeric: tabular-nums;
  text-align: right;
  display: inline-block;
}
.col-correct,
.col-total {
  color: var(--muted);
}
.col-correct {
  width: 46px;
}
.col-total {
  width: 52px;
}
.col-pts {
  width: auto;
  min-width: 48px;
  /* PUAN rengi .board-pts'ten gelir (altın) — burada ezme */
}
.ps-nums {
  min-width: 186px;
  gap: 16px; /* kolonlar arası nefes (bitişik durmasın) */
}
/* Mobil: sıra sütunu daralır, puan/doğru sığar (taşma/kayma olmaz) */
@media (max-width: 560px) {
  .ps-head,
  .ps-row {
    gap: 8px;
    padding: 8px 4px;
  }
  .ps-year {
    /* Task328 rev — madalya 34px'e sığar; kazanılan alan sayı kolonlarında */
    width: 34px;
    font-size: 11px;
  }
  .board-row .ps-year {
    font-size: 15px;
  }
  .ps-nums {
    min-width: 148px;
    gap: 8px;
  }
  .col-pts {
    min-width: 46px;
  }
  .col-correct {
    width: 44px;
  }
  .col-total {
    width: 50px;
  }
  .col-correct,
  .col-total {
    font-size: 12px;
  }
  .ps-head .col-correct,
  .ps-head .col-total,
  .ps-head .col-pts {
    font-size: 10px;
    letter-spacing: -0.2px;
  }
  .ps-team b {
    font-size: 13px;
  }
}

/* Lig kurulum formunda logo ekleme butonu (emoji seçicinin yanında) */
.lg-logo-btn {
  border-style: dashed !important;
}
.lg-create-logo-name {
  margin: 4px 0 0;
  color: var(--gold);
}

/* Maç kartı lig etiketi: tıklanınca lige gider; mobilde yalnız logo */
.lc-comp-link {
  cursor: pointer;
}
@media (max-width: 560px) {
  /* Task125 — Lig çipi artık geri sayım satırında da olabiliyor; kural İKİ bağlamı da
     kapsar, yoksa mobilde ad açılıp sayacın üstüne biniyordu (ölçüldü). */
  .lc-top .lc-comp-name,
  .lc-cd-lig .lc-comp-name {
    display: none; /* mobil: yalnız lig logosu (kullanıcı kararı) */
  }
  .lc-top .lc-comp,
  .lc-cd-lig .lc-comp {
    padding: 2px 4px;
  }
}
/* Lig adı hiçbir bağlamda satır atlamaz (iki satıra bölünüp sayaca binmişti) */
.lc-comp-name {
  white-space: nowrap;
}

/* Admin: engellenen kullanıcı satırı */
.user-blocked {
  opacity: 0.55;
}
.user-blocked td {
  text-decoration: line-through;
}
.user-blocked .admin-block {
  text-decoration: none;
}

/* Profil avatarı: yüklenen görsel yuvarlak; üzerine kamera ikonu (değiştir) */
.avatar-edit {
  position: relative;
  cursor: pointer;
  overflow: visible; /* kamera rozeti kırpılmasın (img zaten border-radius ile yuvarlak) */
}
.avatar-edit.has-img {
  padding: 0;
}
.avatar-edit img {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}
.avatar-cam {
  position: absolute;
  right: -2px;
  bottom: -2px;
  width: 15px;
  height: 15px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--accent);
  color: var(--on-accent);
  border-radius: 50%;
}
.avatar-cam .ic {
  width: 10px;
  height: 10px;
}
/* Admin toast: sayfayı kaydırmadan yanıp söner */
.toast-flash {
  color: var(--accent);
  font-weight: 700;
}

/* Profil + admin: içerik panel kenarlarına DEĞMESİN (teğet geçme düzeltmesi) */
#profile-body {
  padding: 6px 14px 16px;
}
main.admin .group-card > :not(.group-head) {
  padding-left: 14px;
  padding-right: 14px;
}
main.admin .group-card > .overflow {
  padding-left: 14px;
  padding-right: 14px;
}
main.admin .group-card {
  padding-bottom: 14px;
}
main.admin .group-head {
  margin-bottom: 6px;
}

/* ⚙️ Ayarlar menüsü (banner dropdown) — tema/dil/saat dilimi tek yerde */
.settings-wrap {
  position: relative;
  display: inline-flex;
}
.settings-btn .ic {
  width: 18px;
  height: 18px;
}
/* Task473 (kullanıcı: "Skorinhom ve Bildirimler popup şeklinde açılırken neden Görünüm
   menü içerisinde açılıyor?") — Görünüm ayarları artık AÇILIR LİSTE değil, diğerleriyle
   aynı PENCERE. Dar sütun matematiği ve alt sayfa kuralları bu yüzden kaldırıldı; pencere
   her telefonda kendi kaydırmasıyla sığar. */
#settings-modal .modal-card {
  max-width: 460px;
}
#settings-modal .settings-panel {
  display: flex;
  flex-direction: column;
  gap: 12px;
}
/* ✕ kendi satırında durur (Task269'daki tahmin penceresi çözümü): kaydırırken hiçbir
   ayar satırının üstüne binmez. */
#settings-modal .tm-close {
  top: 0;
  margin: 0 0 0 auto;
}

.set-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.set-label {
  font-size: 12.5px;
  color: var(--muted);
  font-weight: 600;
}
/* Task224 — Ayar satırında birden çok denetim (Dinle düğmesi + anahtar) yan yana durur;
   dar ekranda alta sarar, hiçbir öğe panel kenarına teğet olmaz. */
.set-actions {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.sound-test {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-height: 30px; /* panelin kendi anahtarı 18px; dokunma payı biraz genişletildi */
  padding: 5px 11px;
  font-size: 12px;
  white-space: nowrap;
}
#settings-modal-body .theme-switch,
#profile-settings .theme-switch {
  display: inline-flex;
  gap: 4px;
  padding: 2px;
}
#settings-modal-body .theme-btn .ic,
#profile-settings .theme-btn .ic {
  width: 16px;
  height: 16px;
}
/* Profil görünüm ayarları bölümü (banner ile aynı panel) */
#profile-settings {
  display: flex;
  flex-direction: column;
  gap: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
  border-radius: 12px;
  padding: 12px;
}
#profile-settings .set-tz,
#profile-settings .set-lang {
  min-width: 130px;
}

/* Profil kimlik başlığı: büyük avatar + okunur bilgi (web + mobil) */
.profile-id {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 4px 0 8px;
}
.profile-id .profile-avatar {
  width: 64px;
  height: 64px;
  font-size: 26px;
  flex: none;
}
.profile-id .profile-avatar img {
  width: 64px;
  height: 64px;
}
.profile-id .avatar-cam {
  width: 20px;
  height: 20px;
  right: 0;
  bottom: 0;
}
.profile-id .avatar-cam .ic {
  width: 12px;
  height: 12px;
}
.profile-id-text {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.profile-name {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 20px;
  font-weight: 800;
  color: var(--text);
}
.profile-email {
  font-size: 13.5px;
  color: var(--text);
  overflow-wrap: anywhere;
}
.profile-since {
  font-size: 12px;
}
.profile-av-clear {
  padding: 2px 7px;
  font-size: 11px;
}
/* Task045 — görünen ad düzenle: kalem + satır-içi input */
.profile-name-edit {
  padding: 3px 6px;
  color: var(--muted);
}
.profile-name-edit:hover {
  color: var(--accent);
}
.profile-name-edit svg {
  width: 16px;
  height: 16px;
}
.profile-name-input {
  flex: 1 1 160px;
  min-width: 0;
  max-width: 240px;
  margin: 0;
  padding: 6px 10px;
  font-size: 16px;
  font-weight: 700;
}
.profile-name .lg-btn {
  flex: none;
}
@media (max-width: 480px) {
  .profile-id .profile-avatar,
  .profile-id .profile-avatar img {
    width: 52px;
    height: 52px;
  }
  .profile-name {
    font-size: 17px;
  }
}

/* Profil başlığı da panel kenarına değmesin (avatar solda teğet düzeltmesi) */
#profile-head {
  padding: 0 14px;
}

/* Banner hesap butonunda avatar (küçük yuvarlak) + ad */
#auth-btn {
  display: inline-flex;
  align-items: center;
  gap: 7px;
}
.auth-av {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  object-fit: cover;
  display: block;
}
.auth-av-ph {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--panel2);
  border: 1px solid var(--line2);
  font-size: 11px;
  font-weight: 800;
}
@media (max-width: 560px) {
  .auth-name {
    display: none;
  } /* mobil banner tek satır: yalnız avatar */
}

/* Takım-teması: renk noktası (profil butonu + settings 5. tema) */
.mt-color-dot {
  display: inline-block;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  border: 1px solid rgba(255, 255, 255, 0.4);
  vertical-align: -2px;
  margin-right: 6px;
}
.theme-btn-team .mt-color-dot {
  margin: 0;
  width: 16px;
  height: 16px;
}
.mt-theme-btn {
  margin-top: 8px;
  display: inline-flex;
  align-items: center;
}

/* Liderlikte kullanıcı avatarları */
.board-av {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  object-fit: cover;
  flex: none;
}
.board-av-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--panel2);
  border: 1px solid var(--line);
  font-size: 10px;
  font-weight: 800;
  color: var(--muted);
}
.ps-team {
  gap: 8px;
}

/* Admin panel input/checkbox teması (varsayılan tarayıcı stili yerine) */
main.admin input[type='number'],
main.admin input[type='text'],
main.admin input[type='email'] {
  background: var(--input-bg);
  color: var(--input-text, var(--text));
  border: 1px solid var(--line2);
  border-radius: 8px;
  padding: 6px 8px;
  font: inherit;
}
main.admin input[type='number']:focus,
main.admin input[type='text']:focus {
  outline: none;
  border-color: var(--accent);
}
/* Admin: çıplak checkbox → Turnuvalar dilinde aç/kapa switch'i.
   (Bu selector en spesifik olduğu için switch stili BURADA tanımlanır.) */
main.admin input[type='checkbox'] {
  appearance: none;
  -webkit-appearance: none;
  position: relative;
  width: 38px;
  height: 21px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--text) 22%, transparent);
  border: none;
  cursor: pointer;
  flex: none;
  transition: background 0.15s ease;
  vertical-align: middle;
}
main.admin input[type='checkbox']::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 17px;
  height: 17px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
  transition: transform 0.15s ease;
}
main.admin input[type='checkbox']:checked {
  background: var(--accent);
}
main.admin input[type='checkbox']:checked::after {
  transform: translateX(17px);
}
/* İstisnalar — kendi slider'ı olan switch'ler (Turnuvalar toggle, master toggle) ve
   çoklu-seçim gün chip'leri blanket switch'ten muaftır: gizli input olarak kalır. */
main.admin .ac-switch input[type='checkbox'],
main.admin .notif-switch input[type='checkbox'],
main.admin .day-chip input[type='checkbox'] {
  appearance: auto;
  -webkit-appearance: auto;
  width: 1px;
  height: 1px;
  background: none;
  position: absolute;
  opacity: 0;
  pointer-events: none;
}
main.admin .ac-switch input[type='checkbox']::after,
main.admin .notif-switch input[type='checkbox']::after,
main.admin .day-chip input[type='checkbox']::after {
  content: none;
}
main.admin .admin-table th {
  color: var(--muted);
  font-weight: 700;
}
main.admin label {
  cursor: pointer;
}

/* Panel içeriği kenara teğet olmasın: buton/form/details margin ile içeri alınır
   (padding butonu büyütür — CLAUDE.md kuralı: teğet nesne yasak) */
main.admin .group-card > button,
main.admin .group-card > details,
main.admin .group-card > .lg-form,
main.admin .group-card > h3 {
  padding-left: 0;
  padding-right: 0;
  margin-left: 14px;
  margin-right: 14px;
}

/* İzleme listesi maç satırında takım logoları */
.watch-main img.crest {
  width: 18px;
  height: 18px;
  object-fit: contain;
  vertical-align: -4px;
}

/* ===== Mobil alt toolbar (native tab bar) — Task027 ===== */
.tabbar {
  display: none;
}
@media (max-width: 640px) {
  .tabbar {
    display: flex;
    position: fixed;
    left: 0;
    right: 0;
    /* Task416 — GÖRÜNÜR alanın dibi. Uygulama-içi tarayıcıda (X, Instagram) düzen alanı
       daha yüksek oluyor ve `bottom: 0` çubuğu ekranın ortasında bırakıyordu; fark
       `--vvb` ile ölçülüp buraya yazılır (normal tarayıcıda 0). */
    bottom: var(--vvb, 0px);
    z-index: 150;
    background: var(--topbar-bg);
    backdrop-filter: blur(12px);
    border-top: 1px solid var(--line);
    /* Task225 — düğmeler ev göstergesinin ÜSTÜNDE kalır; yatayda yan çentik payı */
    padding-bottom: var(--sab);
    padding-left: var(--sal);
    padding-right: var(--sar);
  }
  .tab-btn {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 3px;
    padding: 8px 2px 7px;
    background: none;
    border: 0;
    color: var(--muted);
    font-size: 10.5px;
    font-weight: 600;
    cursor: pointer;
    position: relative;
    transition: color 0.15s;
  }
  .tab-btn .ic,
  .tab-btn svg {
    width: 22px;
    height: 22px;
  }
  .tab-btn.active {
    color: var(--accent);
  }
  /* Aktif sekmede üstte ince premium çizgi */
  .tab-btn.active::before {
    content: '';
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 28px;
    height: 2.5px;
    border-radius: 0 0 3px 3px;
    background: linear-gradient(90deg, var(--gold), var(--accent));
  }
  /* İçerik alt bara denk gelmesin + footer üstünde boşluk */
  main#content {
    padding-bottom: calc(68px + var(--sab));
    padding-left: var(--sal);
    padding-right: var(--sar);
  }
  .foot {
    /* 60px'ti; bağlantılarla alt çubuk arası 39px kalıyordu. 44px'te 13px'e düşüyor —
       dokunma için fazla dar. 52px: arada 21px kalıyor (ölçüldü). */
    margin-bottom: calc(52px + var(--sab));
  }
}

/* Task594 — bağlamlı bildirim izni kartı: ALTTAN gelir, alt menünün üstünde durur, kenara
   teğet değil (ilke 4). Tema jetonlarıyla; camda panel yüzeyi. */
.notif-nudge {
  position: fixed;
  left: 50%;
  transform: translateX(-50%);
  bottom: calc(16px + var(--vvb, 0px) + var(--sab, 0px));
  z-index: 390;
  width: min(560px, calc(100% - 24px));
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 6px 12px;
  align-items: center;
  padding: 12px 14px;
  border: 1px solid var(--line2);
  border-radius: 14px;
  background: var(--panel);
  box-shadow: var(--shadow);
  animation: nudgeIn var(--dur-md, 0.26s) var(--ease-out, ease-out);
}
.notif-nudge.nn-out {
  animation: nudgeOut 0.24s var(--ease-in, ease-in) forwards;
}
.notif-nudge .nn-ic {
  display: inline-flex;
  width: 34px;
  height: 34px;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: color-mix(in srgb, var(--accent) 18%, transparent);
  color: var(--accent);
}
.notif-nudge .nn-ic svg {
  width: 18px;
  height: 18px;
}
.notif-nudge .nn-text {
  font-size: 13.5px;
  line-height: 1.35;
  font-weight: 600;
}
.notif-nudge .nn-acts {
  grid-column: 2;
  display: flex;
  gap: 8px;
}
.notif-nudge .nn-on,
.notif-nudge .nn-later {
  padding: 7px 14px;
  font-size: 13px;
}
@media (max-width: 640px) {
  .notif-nudge {
    bottom: calc(72px + var(--vvb, 0px) + var(--sab, 0px)); /* alt menünün üstü */
  }
}
@keyframes nudgeIn {
  from {
    opacity: 0;
    transform: translate(-50%, 12px);
  }
  to {
    opacity: 1;
    transform: translate(-50%, 0);
  }
}
@keyframes nudgeOut {
  to {
    opacity: 0;
    transform: translate(-50%, 12px);
  }
}
[data-theme='glass'] .notif-nudge {
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.1), rgba(255, 255, 255, 0.045)),
    rgba(0, 0, 0, 0.42);
  backdrop-filter: blur(22px) saturate(170%);
  -webkit-backdrop-filter: blur(22px) saturate(170%);
  border-color: var(--glass-edge);
}

/* X takip çağrısı bandı (WC deseni taşındı) — üstten iner, tema-uyumlu premium */
.follow-bar {
  display: none;
}
.follow-bar.show {
  display: flex;
  align-items: center;
  gap: 8px;
  /* EN ÜSTTEN iner ve TAM ORTALI (translateX — scrollbar'dan etkilenmez) */
  position: fixed;
  top: 0;
  left: 50%;
  transform: translateX(-50%);
  z-index: 400;
  width: min(640px, calc(100% - 20px));
  padding: 10px 40px 10px 14px;
  border-radius: 0 0 14px 14px;
  border-top: 0;
  border: 1px solid transparent;
  background:
    linear-gradient(135deg, var(--glow1), var(--panel)) padding-box,
    linear-gradient(90deg, var(--gold), var(--accent)) border-box;
  animation: fbar-in 0.35s ease;
}
.fbar-body {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  flex: 1;
  font-size: 13px;
}
.fbar-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--text);
  text-decoration: none;
  font-weight: 700;
}
.fbar-link .x-logo {
  vertical-align: -2px;
}
.fbar-handle {
  color: var(--accent);
}
.fbar-bell {
  color: var(--muted);
  font-size: 12px;
}
.fbar-close {
  position: absolute;
  top: 6px;
  right: 10px;
  background: none;
  border: 0;
  color: var(--muted);
  cursor: pointer;
  font-size: 14px;
}
@keyframes fbar-in {
  from {
    opacity: 0;
    transform: translate(-50%, -8px);
  }
  to {
    opacity: 1;
    transform: translate(-50%, 0);
  }
}
@media (max-width: 640px) {
  .follow-bar.show {
    width: calc(100% - 16px);
  }
}

/* Kayıt sonrası takım onboarding */
.onb-results {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin: 8px 0;
}
.onb-pick {
  text-align: left;
}
.onb-picked {
  padding: 8px;
  font-size: 15px;
}
.onb-skip {
  width: 100%;
  margin-top: 6px;
}
.onb-theme-btn {
  width: 100%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Mobil nav düzeni (kullanıcı kararı): Ana Sayfa/Skorio alt tab bar'da olduğu için
   üst şeritten kaldırılır; lig şeridi yalnız lig görünümünde görünür */
@media (max-width: 640px) {
  #competition-nav .day-btn[data-view] {
    display: none;
  }
  #competition-nav {
    display: none;
  }
  #competition-nav.mobile-show {
    display: flex;
  }
}

/* Onboarding: arama sonucu/​seçili takım armaları küçük (dev logo taşması) */
.onb-results img.crest,
.onb-picked img.crest {
  width: 22px;
  height: 22px;
  object-fit: contain;
  vertical-align: -6px;
}

/* Skorio başlığı mobilde TEK SATIR: back(sol) + logo + Skorio + dönem + hak rozetleri */
@media (max-width: 640px) {
  #skorio-head {
    flex-wrap: nowrap;
    gap: 8px;
    align-items: center;
    min-height: 40px;
    padding-right: 12px; /* sağdaki hak rozeti panel çizgisine değmesin (kural #4) */
  }
  #skorio-head .skorio-title {
    flex: none;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-weight: 900;
    font-size: 16px;
  }
  #skorio-head .skorio-meta {
    flex: 1;
    flex-wrap: nowrap;
    gap: 6px;
    justify-content: flex-end;
    min-width: 0;
  }
  #skorio-head .skorio-meta .rule-badge {
    padding: 3px 8px;
    font-size: 11px;
    white-space: nowrap;
  }
  .page-view#skorio-page .tm-head {
    padding-left: 12px; /* back butonu yok — logo panel çizgisine değmesin */
  }
  /* Skorinho sekmeleri mobilde tek satır (2. satıra taşmasın) — sığması için kompakt */
  #skorio-body .dt-tabs {
    flex-wrap: nowrap;
    gap: 4px;
  }
  #skorio-body .dt-tab {
    padding: 8px 3px;
    font-size: 11.5px;
    min-width: 0;
    flex: 1 1 auto; /* Task358 — "Tahminlerim" kırpılmasın; kısa etiket az yer kaplasın */
    text-overflow: clip;
  }
}

/* Skorio başlığındaki back butonu akış içinde (ilk öğe); standalone olanı gizle */
#skorio-page > .page-back:not(.head-back) {
  display: none;
}
#skorio-head {
  padding-left: 12px; /* back butonu kalktı — logo panel çizgisine değmesin (kural #4) */
  padding-right: 12px; /* week rozeti de sağ panel çizgisine değmesin (kural #4) */
}
.head-back {
  position: static;
  flex: none;
  width: 34px;
  height: 34px;
  padding: 0;
  border-radius: 50%;
}

/* Tahmin sonrası kompakt promo: yalnız Haftanın Liderleri paneli (davet/how-to yok) */
.skorio-promo.promo-compact {
  padding: 12px 16px;
}
.skorio-promo.promo-compact .promo-board {
  border-top: 0;
  padding-top: 0;
  margin-top: 0;
}

/* Admin yüzen bildirim (snackbar) — kaydırmadan bağımsız görünür */
.admin-toast {
  position: fixed;
  left: 50%;
  bottom: 24px;
  transform: translateX(-50%);
  z-index: 500;
  padding: 10px 18px;
  border-radius: 999px;
  background: var(--panel);
  color: var(--text);
  border: 1px solid transparent;
  background:
    linear-gradient(var(--panel), var(--panel)) padding-box,
    linear-gradient(90deg, var(--gold), var(--accent)) border-box;
  box-shadow: var(--shadow);
  font-weight: 700;
  font-size: 13.5px;
  animation: fbar-in 0.3s ease;
}

/* Admin: öne çıkan takımlar — logolu arama + kart grid */
.feat-add-row {
  display: flex;
  gap: 8px;
  align-items: center; /* kontrolleri dikey ortala (input/combo/buton aynı hizada) */
  flex-wrap: wrap;
  margin: 0 14px 12px;
}
/* Satırdaki tüm kontroller aynı yükseklik (input, combo, buton hizasız durmasın) */
.feat-add-row .auth-input,
.feat-add-row .lang-select,
.feat-add-row > .btn {
  height: 42px;
  margin: 0;
  box-sizing: border-box;
  font-size: 14px;
}
.feat-add-row select.lang-select {
  padding: 0 12px;
} /* yalnız combo'lar — arama input'u (lang-select) ikon boşluğunu korur */
.feat-add-row > .btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.feat-search-wrap {
  position: relative;
  flex: 1;
  min-width: 180px;
}
.feat-search-wrap #feat-team {
  width: 100%;
}
.feat-results {
  position: absolute;
  left: 0;
  right: 0;
  top: calc(100% + 4px);
  z-index: 20;
  display: flex;
  flex-direction: column;
  gap: 2px;
  max-height: 260px;
  overflow-y: auto;
  background: var(--panel);
  border: 1px solid var(--line2);
  border-radius: 10px;
  padding: 4px;
}
.feat-results:empty {
  display: none;
}
.feat-pick {
  display: flex;
  align-items: center;
  gap: 8px;
  text-align: left;
  justify-content: flex-start;
}
.feat-crest {
  width: 22px;
  height: 22px;
  object-fit: contain;
  flex: none;
}
.feat-crest-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--panel2);
  border: 1px solid var(--line);
  font-size: 10px;
  font-weight: 800;
}
.feat-grid {
  display: grid;
  gap: 8px;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  margin: 0 14px 6px;
}
.feat-card {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.feat-card .feat-crest {
  width: 30px;
  height: 30px;
}
.feat-card-info {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}
.feat-card-info b {
  font-size: 14px;
}
.feat-card-info span {
  font-size: 12px;
  color: var(--muted);
}
.feat-remove {
  padding: 4px 9px;
  flex: none;
}

/* Admin sekmeli yapı (uzun kaydırma yerine) */
.admin-tabbar {
  display: flex;
  gap: 4px;
  flex-wrap: wrap;
  padding: 5px;
  margin-bottom: 4px;
  background: var(--panel2);
  border: 1px solid var(--line);
  border-radius: 12px;
  position: sticky;
  top: 8px;
  z-index: 10;
}
.admin-tab {
  /* Task409 — temel `flex: 1` (=1 1 0%) tüm sekmelere EŞİT genişlik veriyordu; rozet
     eklenince içerik düğmenin dışına taşıp komşu sekmenin üstüne biniyordu (ölçüldü:
     13 px). İçerik tabanlı esneme ile rozetli sekme kendine yer açar. */
  flex: 1 1 auto;
  min-width: 90px;
  cursor: pointer;
  background: none;
  border: 0;
  border-radius: 9px;
  color: var(--muted);
  font-size: 13px;
  font-weight: 700;
  padding: 9px 8px;
}
.admin-tab:hover {
  color: var(--text);
}
.admin-tab.active {
  background: var(--panel);
  color: var(--accent);
  box-shadow:
    0 1px 3px rgba(0, 0, 0, 0.35),
    inset 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent);
}
.admin-pane {
  display: none;
}
.admin-pane.active-pane {
  display: block;
}
.admin-tab .ic {
  vertical-align: -3px;
  margin-right: 2px;
}
/* Arama alanı: sol içeride tema-uyumlu SVG ikon + input (emoji placeholder yerine) */
.search-field {
  position: relative;
}
.search-field .ic {
  position: absolute;
  left: 12px;
  top: 50%;
  transform: translateY(-50%);
  color: var(--muted);
  pointer-events: none;
  z-index: 1;
}
.search-field input {
  padding-left: 34px;
}
/* Kayıt KVKK/koşul onayı satırı (Task030) — block layout: checkbox float, metin akışta
   (flex'te metin span'i 0 genişliğe collapse oluyordu → her kelime alt satıra kayıyordu) */
.auth-terms {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 8px;
  align-items: start;
  width: 100%;
  font-size: 12.5px;
  line-height: 1.45;
  color: var(--muted);
  margin: 4px 2px 2px;
  text-align: left;
  cursor: pointer;
}
.auth-terms input {
  margin-top: 2px;
}
.auth-terms a {
  color: var(--accent);
  text-decoration: underline;
}

/* Task044 — sosyal giriş (Google) */
.auth-social {
  display: flex;
  flex-direction: column;
  gap: 10px;
  width: 100%;
  margin-top: 2px;
}
.auth-or {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--muted);
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 0.06em;
}
.auth-or::before,
.auth-or::after {
  content: '';
  flex: 1;
  height: 1px;
  background: var(--line);
}
.btn-google {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  width: 100%;
}
.btn-google:hover {
  border-color: var(--accent);
}
.btn-google .g-logo {
  flex: none;
  display: block;
}

/* Hesap silme tehlikeli bölge (Task030) — kırmızı vurgulu, kenardan boşluklu */
/* Sayfa içi temalı onay diyaloğu (native confirm yerine) */
.admin-confirm-overlay {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(3, 8, 18, 0.62);
  backdrop-filter: blur(3px);
  animation: acf-in 0.14s ease;
}
@keyframes acf-in {
  from {
    opacity: 0;
  }
}
.admin-confirm-card {
  width: 100%;
  max-width: 380px;
  background: var(--panel2, #0e1626);
  border: 1px solid var(--line);
  border-radius: 14px;
  padding: 20px 20px 16px;
  box-shadow: 0 18px 50px rgba(0, 0, 0, 0.5);
}
.admin-confirm-msg {
  margin: 0 0 16px;
  font-size: 14px;
  line-height: 1.55;
  color: var(--text);
}
.admin-confirm-acts {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}
.admin-confirm-acts .ac-danger {
  background: var(--bad, #ef4444);
  color: #fff;
  border-color: transparent;
  font-weight: 800;
}
.admin-confirm-acts .ac-danger:hover {
  filter: brightness(1.08);
}

/* ---------- Admin kart listeleri (Kullanıcılar + Dönemler) ---------- */
.admin-empty {
  padding: 18px 4px;
  text-align: center;
  color: var(--muted);
}
.admin-user-list,
.admin-round-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-top: 4px;
}
.admin-user-card {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px 14px;
  padding: 12px 14px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.admin-user-card.au-blocked {
  opacity: 0.62;
  border-color: color-mix(in srgb, var(--bad, #ef4444) 40%, var(--line));
}
.au-main {
  display: flex;
  align-items: center;
  gap: 11px;
  min-width: 200px;
  flex: 1;
}
.au-av {
  width: 42px;
  height: 42px;
  border-radius: 50%;
  object-fit: cover;
  flex: none;
  background: var(--chip-bg);
}
.au-av-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  font-size: 17px;
  color: #fff;
  background: linear-gradient(150deg, var(--accent), color-mix(in srgb, var(--accent) 55%, #000));
}
.au-id {
  min-width: 0;
}
.au-name {
  display: flex;
  align-items: center;
  gap: 7px;
  font-weight: 800;
  font-size: 14px;
  color: var(--text);
}
.au-email {
  font-size: 12px;
  color: var(--muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.au-pill {
  font-size: 10px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  border-radius: 999px;
  padding: 1px 7px;
}
.au-admin {
  color: var(--gold, #f5c542);
  background: color-mix(in srgb, var(--gold, #f5c542) 16%, transparent);
}
.au-block {
  color: var(--bad, #ef4444);
  background: color-mix(in srgb, var(--bad, #ef4444) 16%, transparent);
}
.au-meta {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}
.au-stat {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 13px;
  color: var(--muted);
}
.au-stat svg {
  width: 14px;
  height: 14px;
}
.au-stat b {
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.au-dates {
  font-size: 11px;
  color: var(--muted);
}
.au-acts {
  display: flex;
  gap: 6px;
  margin-left: auto;
}
.au-acts .btn {
  font-size: 12px;
  padding: 6px 10px;
}
.admin-block.au-unblock {
  color: var(--bad, #ef4444);
  border-color: color-mix(in srgb, var(--bad, #ef4444) 40%, var(--line));
}
/* Dönem kartları */
.admin-round-card {
  padding: 12px 14px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.admin-round-card.ar-final {
  opacity: 0.82;
}
.ar-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 10px;
}
.ar-label {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-weight: 900;
  font-size: 15px;
  color: var(--text);
}
.ar-label svg {
  width: 16px;
  height: 16px;
  color: var(--accent);
}
/* Task310 — arşiv paneli şerit satırları: ad · canlılık · neden · son sinyal */
.bf-lane {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  padding: 6px 2px;
  border-bottom: 1px dashed var(--line);
}
.bf-lane:last-of-type {
  border-bottom: 0;
}
.bf-lane-ad {
  font-weight: 800;
  min-width: 104px;
}
.bf-lane-durum {
  color: var(--muted);
  flex: 1;
  min-width: 140px;
}
.bf-lane-yas {
  font-size: 11.5px;
  color: var(--muted);
  white-space: nowrap;
}
.ar-pill {
  font-size: 10.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  border-radius: 999px;
  padding: 2px 9px;
}
.ar-open {
  color: var(--green, #22c55e);
  background: color-mix(in srgb, var(--green, #22c55e) 15%, transparent);
}
.ar-done {
  color: var(--muted);
  background: var(--chip-bg);
}
/* Kapandı ama maçlar puanlanmadı → kehribar (açık yeşilden farklı, kesinleşmiş griden farklı) */
.ar-pending {
  color: var(--gold, #eab308);
  background: color-mix(in srgb, var(--gold, #eab308) 16%, transparent);
}
.ar-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
}
.ar-stat {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 7px 9px;
  border-radius: 9px;
  background: color-mix(in srgb, var(--line) 30%, transparent);
}
.ar-k {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  font-weight: 700;
}
.ar-v {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.ar-fin {
  margin-top: 10px;
}
/* Task047 — dönem yönetimi: "şu an" rozeti, aksiyonlar, düzenleme/ekleme grid'i */
.admin-round-card.ar-current {
  border-color: var(--accent);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 40%, transparent);
}
.ar-now {
  font-size: 10px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--accent);
  background: color-mix(in srgb, var(--accent) 16%, transparent);
  border-radius: 999px;
  padding: 1px 7px;
  margin-left: 6px;
}
.ar-acts {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 10px;
}
.ar-acts .lg-btn {
  font-size: 12.5px;
}
.ar-acts .ar-del {
  color: var(--fav, #ff7a8a);
}
.ar-edit-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 10px;
}
.ar-edit-grid .admin-field span,
.admin-round-new .admin-field span {
  font-size: 12px;
  font-weight: 700;
  color: var(--muted);
}
.ar-editing {
  border-color: var(--accent);
}
.admin-round-new {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 6px;
}
.admin-round-new .ar-edit-grid {
  margin-top: 0;
}
.admin-round-new #rnew-add {
  align-self: flex-start;
}
/* Task049 — Canlı takip durum kartı */
.live-status-card {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 14px 16px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.live-status-card.lsc-paused {
  border-color: var(--gold, #eab308);
}
.lsc-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.lsc-title {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-weight: 900;
  font-size: 15px;
  color: var(--text);
}
.lsc-title svg {
  width: 17px;
  height: 17px;
  color: var(--accent);
}
.ls-up {
  color: var(--green, #22c55e);
  background: color-mix(in srgb, var(--green, #22c55e) 15%, transparent);
}
.ls-lag {
  color: var(--gold, #eab308);
  background: color-mix(in srgb, var(--gold, #eab308) 16%, transparent);
}
.ls-down {
  color: var(--fav, #ff7a8a);
  background: color-mix(in srgb, var(--fav, #ff7a8a) 16%, transparent);
}
.lsc-warn {
  color: var(--gold, #eab308);
}
.lsc-warn code {
  color: var(--text);
  background: var(--chip-bg);
  padding: 1px 6px;
  border-radius: 6px;
  font-size: 12px;
}
.lsc-switch {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  align-self: flex-start;
  cursor: pointer;
}
.lsc-sw-label {
  font-weight: 800;
  font-size: 13.5px;
  color: var(--text);
  white-space: nowrap;
}
/* Sekme etiketleri kelime ortasından kırılmasın; çubuk sekme sınırından sarsın */
.admin-tab {
  white-space: nowrap;
}
/* Task050 — canlı takip zamanlama ayarları */
.live-timing-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 10px;
  margin-bottom: 12px;
}
.lt-field {
  gap: 7px;
}
.lt-label {
  font-size: 13px;
  font-weight: 800;
  color: var(--text);
}
.lt-input-row {
  display: flex;
  align-items: center;
  gap: 8px;
}
.lt-input-row input {
  width: 92px;
  flex: none;
}
.lt-unit {
  font-size: 12.5px;
  font-weight: 700;
  color: var(--muted);
}
.lt-range {
  font-size: 11.5px;
  font-weight: 700;
  color: var(--accent);
}
.lt-desc {
  font-size: 12px;
  line-height: 1.45;
  color: var(--muted);
}
.live-fixed-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 4px;
}
.lf-row {
  display: grid;
  grid-template-columns: minmax(120px, 1fr) auto;
  gap: 4px 12px;
  padding: 9px 12px;
  border-radius: 10px;
  background: color-mix(in srgb, var(--line) 26%, transparent);
}
.lf-k {
  font-size: 13px;
  font-weight: 800;
  color: var(--text);
}
.lf-v {
  font-size: 12.5px;
  font-weight: 800;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
  text-align: right;
}
.lf-d {
  grid-column: 1 / -1;
  font-size: 12px;
  line-height: 1.45;
  color: var(--muted);
}
/* Genel bakış stat kartları */
.admin-stat-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 10px;
}
.admin-stat {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 14px 16px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.as-ic {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: 10px;
  color: var(--accent);
  background: color-mix(in srgb, var(--accent) 14%, transparent);
  flex: none;
}
.as-ic svg {
  width: 20px;
  height: 20px;
}
.as-body {
  display: flex;
  flex-direction: column;
}
.as-k {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  font-weight: 700;
}
.as-v {
  font-size: 24px;
  font-weight: 900;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}
/* Turnuva kartları + toggle */
.admin-comp-list {
  display: grid;
  /* Task417 rev (kullanıcı: "katman seçici turnuva adının üstünde görünüyor") — kartta
     artık dört öğe var (logo, ad, katman seçici, anahtar); 240px'lik sütun onları üst
     üste bindiriyordu. Sütun genişledi, kart da gerekirse ALT SATIRA taşar. */
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: 10px;
}
.admin-comp-card {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 11px;
  padding: 11px 13px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.admin-comp-card.ac-off {
  opacity: 0.55;
}
.ac-logo {
  width: 30px;
  height: 30px;
  object-fit: contain;
  flex: none;
}
.ac-id {
  display: flex;
  flex-direction: column;
  min-width: 0;
  /* Ad ve kod kendi satırında tam genişlik alır; seçici ve anahtar alta iner. */
  flex: 1 1 140px;
}
.ac-name {
  font-weight: 800;
  font-size: 13.5px;
  color: var(--text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ac-code {
  font-size: 11px;
  color: var(--muted);
}
.ac-switch {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  cursor: pointer;
  flex: none;
}
.ac-switch input {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}
.ac-slider {
  width: 34px;
  height: 19px;
  border-radius: 999px;
  background: var(--line);
  position: relative;
  transition: background 0.15s;
  flex: none;
}
.ac-slider::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #fff;
  transition: transform 0.15s;
}
.ac-switch input:checked + .ac-slider {
  background: var(--green, #22c55e);
}
.ac-switch input:checked + .ac-slider::after {
  transform: translateX(15px);
}
.ac-state {
  font-size: 11px;
  font-weight: 700;
  color: var(--muted);
  min-width: 38px;
}
/* Oyun ayar formu + konfig kartları */
.admin-form-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 20px;
  align-items: stretch; /* iki alan da aynı yüksekliğe uzar → alttaki kontroller hizalı */
  margin: 4px 0 12px;
}
.admin-field {
  display: flex;
  flex-direction: column;
  justify-content: flex-end; /* etiket üstte, kontrol altta — kontroller alt hizada buluşur */
  gap: 5px;
  padding: 10px 12px;
  border-radius: 11px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.admin-field .af-k {
  font-size: 12px;
  font-weight: 700;
  color: var(--muted);
}
.admin-field input[type='number'] {
  width: 120px;
}
.admin-field.af-check {
  flex-direction: row;
  align-items: center;
  gap: 9px;
}
.admin-field.af-check input {
  flex: none;
}
.admin-cfg-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.admin-cfg-card {
  padding: 11px 13px;
  border-radius: 11px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.acf-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.acf-name {
  font-weight: 700;
  font-size: 13.5px;
  color: var(--text);
}
.acf-code {
  font-size: 11px;
  color: var(--muted);
  font-weight: 600;
}
.acf-toggle {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--muted);
  white-space: nowrap;
}
.acf-fields {
  display: flex;
  gap: 10px;
  margin-top: 8px;
  flex-wrap: wrap;
}
.acf-field {
  display: flex;
  flex-direction: column;
  gap: 3px;
  flex: 1;
  min-width: 90px;
}
.acf-field > span {
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  font-weight: 700;
}
.acf-narrow {
  flex: 0 0 96px;
}
.acf-wide {
  flex: 3;
  min-width: 180px;
}
/* X_AUTO durum bandı */
.admin-status-bar {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
  padding: 10px 14px;
  border-radius: 11px;
  border: 1px solid var(--line);
  margin-bottom: 6px;
  font-size: 13px;
}
.admin-status-bar.asb-on {
  border-color: color-mix(in srgb, var(--green, #22c55e) 40%, var(--line));
  background: color-mix(in srgb, var(--green, #22c55e) 8%, transparent);
}
.admin-status-bar.asb-off {
  border-color: color-mix(in srgb, var(--bad, #ef4444) 34%, var(--line));
  background: color-mix(in srgb, var(--bad, #ef4444) 7%, transparent);
}
.asb-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex: none;
}
.asb-on .asb-dot {
  background: var(--green, #22c55e);
  box-shadow: 0 0 8px var(--green, #22c55e);
}
.asb-off .asb-dot {
  background: var(--bad, #ef4444);
}
.asb-accs {
  margin-left: auto;
  color: var(--muted);
  font-size: 12px;
}
/* X olay ayar kartları — olay adı üstte, toggle'lar altta (yazılar sığsın) */
.admin-xset-list {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 8px;
}
.admin-xset-card {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 10px 12px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.xs-event {
  font-weight: 800;
  font-size: 13px;
  color: var(--text);
  text-transform: capitalize;
}
.xs-toggles {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.xs-chip {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  width: 100%;
  font-size: 12px;
  color: var(--muted);
  white-space: nowrap;
  cursor: pointer;
}
/* Yeniden puanla maç listesi */
.admin-match-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.admin-match-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 12px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.amr-score {
  flex: none;
  min-width: 42px;
  text-align: center;
  font-weight: 900;
  font-size: 14px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  padding: 4px 8px;
  border-radius: 8px;
  background: var(--chip-bg);
}
.amr-main {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 1px;
  overflow: hidden;
}
.amr-main b {
  font-size: 13.5px;
  color: var(--text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.amr-teams {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}
.amr-teams .feat-crest {
  width: 18px;
  height: 18px;
  flex: none;
}
.amr-tn {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.amr-vs {
  color: var(--muted);
  flex: none;
}
.amr-btn {
  flex: none;
  font-size: 12px;
  padding: 7px 11px;
}
/* "Maç arayıp elle puanla" — hep açık panel (eski <details> zor tıklanıyordu) */
.admin-manual-panel {
  margin: 12px 14px 0;
  padding: 12px 14px;
  border-radius: 12px;
  background: color-mix(in srgb, var(--accent) 6%, var(--panel2));
  border: 1px solid color-mix(in srgb, var(--accent) 26%, var(--line));
}
.amp-title {
  display: flex;
  align-items: center;
  gap: 7px;
  margin: 0 0 3px;
  font-size: 14px;
  color: var(--text);
}
.amp-title svg {
  width: 16px;
  height: 16px;
  color: var(--accent);
}
.amp-row {
  margin: 8px 0 0;
}
@media (max-width: 560px) {
  /* Maç satırı mobilde: skor+takımlar üst satır (tam genişlik, okunur), buton alta sarar */
  .admin-match-row {
    flex-wrap: wrap;
    gap: 8px 10px;
  }
  .amr-main {
    flex: 1 1 auto;
    order: 1;
  }
  .amr-score {
    order: 0;
  }
  .amr-main b {
    font-size: 13px;
    white-space: normal; /* takım adları kırpılmasın, gerekirse alt satıra insin */
  }
  .amr-teams {
    flex-wrap: wrap;
  }
  .amr-tn {
    white-space: normal;
  }
  .amr-btn {
    order: 2;
    flex: 1 1 100%; /* buton tam satır, kolay tıklanır */
    justify-content: center;
  }
  .amr-btn span {
    display: inline;
  }
}
/* Paylaşım log listesi */
.admin-log-list {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.admin-log-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 7px 11px;
  border-radius: 9px;
  background: var(--panel2);
  border: 1px solid var(--line);
  font-size: 12.5px;
}
.al-status {
  flex: none;
  font-size: 10.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.2px;
  border-radius: 6px;
  padding: 2px 7px;
}
.al-ok {
  color: #fff;
  background: var(--green, #22c55e);
}
.al-dry {
  color: var(--muted);
  background: var(--chip-bg);
}
.al-err {
  color: #fff;
  background: var(--bad, #ef4444);
}
.al-main {
  flex: 1;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.al-time {
  flex: none;
  color: var(--muted);
  font-size: 11px;
  font-variant-numeric: tabular-nums;
}
/* Tanıtım (Task035) admin paneli */
.promo-master {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  cursor: pointer;
}
.promo-sched {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 18px;
  align-items: stretch;
  margin: 4px 0 8px;
}
.day-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.day-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  color: var(--muted);
  cursor: pointer;
  padding: 4px 8px;
  border-radius: 8px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.promo-sched input[type='time'] {
  width: 130px;
}
/* Native time input + checkbox'lar admin koyu temasına uysun (açık native yerine) */
.admin-pane input[type='time'] {
  background: var(--panel2);
  color: var(--text);
  border: 1px solid var(--line2);
  border-radius: 8px;
  padding: 7px 10px;
  font-size: 14px;
  font-variant-numeric: tabular-nums;
  color-scheme: dark;
}
/* (Admin switch stili merkezi olarak `main.admin input[type='checkbox']`de —
   en spesifik selector orası; burada tekrar tanımlanmaz.) */
.day-chip:has(input:checked) {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
/* Varyant seçimi görünür switch'tir; seçiliyken etiket accent olur. */
.pv-sel:has(input:checked) {
  color: var(--accent);
  font-weight: 800;
}
.promo-var-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
  gap: 12px;
  margin-top: 4px;
}
.promo-var-card {
  display: flex;
  gap: 12px;
  padding: 10px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.promo-var-card.pv-on {
  border-color: var(--accent);
  box-shadow: 0 0 0 1px var(--accent) inset;
  background: color-mix(in srgb, var(--accent) 8%, var(--panel2));
}
/* Task260 — Tanıtım görselini büyük gösteren katman */
.admin-lightbox {
  position: fixed;
  inset: 0;
  z-index: 400;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  background: rgba(4, 8, 18, 0.88);
  backdrop-filter: blur(2px);
}
.admin-lightbox img {
  max-width: min(1200px, 94vw);
  max-height: 90vh;
  width: auto;
  height: auto;
  border-radius: 12px;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.55);
}
.al-close {
  position: absolute;
  top: 14px;
  right: 16px;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  border: 1px solid var(--line2);
  background: var(--panel);
  color: var(--text);
  font-size: 16px;
  cursor: pointer;
}
.al-close:hover {
  border-color: var(--accent);
  color: var(--accent);
}
.pv-thumb {
  cursor: zoom-in;
  width: 132px;
  height: 74px;
  object-fit: cover;
  border-radius: 8px;
  flex: none;
  background: var(--bg2);
}
.pv-thumb-lg {
  width: 220px;
  height: 124px;
}
.pv-body {
  display: flex;
  flex-direction: column;
  gap: 5px;
  min-width: 0;
  flex: 1;
}
.pv-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}
.pv-sel {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 12px;
  font-weight: 700;
  color: var(--muted);
  cursor: pointer;
}
.pv-key {
  font-size: 11px;
  color: var(--muted);
}
.pv-title {
  font-size: 13px;
  font-weight: 700;
  color: var(--text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pv-acts {
  display: flex;
  gap: 5px;
  margin-top: auto;
}
.pv-acts .btn {
  font-size: 11.5px;
  padding: 5px 8px;
}
.pv-up,
.pv-down {
  min-width: 32px;
}
.promo-leaders-row {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
  margin: 4px 0 10px;
}
@media (max-width: 560px) {
  .au-acts {
    margin-left: 0;
    width: 100%;
  }
  .au-acts .btn {
    flex: 1;
  }
}
.danger-cap {
  color: var(--bad, #ef4444) !important;
}
.danger-zone {
  border: 1px solid color-mix(in srgb, var(--bad, #ef4444) 40%, var(--line));
  border-radius: 12px;
  padding: 12px 14px;
  margin: 6px 2px 4px;
  background: color-mix(in srgb, var(--bad, #ef4444) 6%, transparent);
}
.danger-btn {
  color: var(--bad, #ef4444);
  border-color: color-mix(in srgb, var(--bad, #ef4444) 45%, var(--line));
}
.danger-solid {
  background: var(--bad, #ef4444);
  color: #fff;
  border-color: transparent;
}
.del-confirm {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
  margin-top: 10px;
}
.del-confirm input {
  flex: 1;
  min-width: 160px;
}

/* Admin kart önizleme görseli — panel içinde boşluklu, taşmadan */
.card-preview-img {
  display: block;
  width: 100%;
  max-width: 560px;
  height: auto;
  margin: 10px 2px 4px;
  border-radius: 12px;
  border: 1px solid var(--line);
}
/* Admin alt başlıkları (h3) daha belirgin — başlık oldukları anlaşılsın */
main.admin .tm-sub {
  font-size: 13px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: var(--accent);
  margin: 16px 14px 8px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--line);
}

/* ── Task038: Token ekonomisi UI ─────────────────────────────────────────── */
/* Banner token rozeti + animasyonlu gradient elmas (marka öğesi). */
.token-wrap {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 10px;
  border-radius: 999px;
  background: var(--panel2);
  border: 1px solid var(--line);
  cursor: pointer;
  font-weight: 800;
  color: var(--text);
  line-height: 1;
}
.token-wrap.hidden {
  display: none;
}
.token-wrap:hover {
  border-color: var(--accent);
}
.token-wrap .tok-count {
  font-variant-numeric: tabular-nums;
  font-size: 14px;
}
.tok-gem {
  display: inline-block;
  vertical-align: -3px;
  flex: none;
}
.token-wrap .tok-gem {
  filter: drop-shadow(0 0 1px rgba(120, 190, 255, 0.4));
  animation: tok-shimmer 2.8s ease-in-out infinite;
}
@keyframes tok-shimmer {
  0%,
  100% {
    filter: drop-shadow(0 0 1px rgba(120, 190, 255, 0.3)) brightness(1);
  }
  50% {
    filter: drop-shadow(0 0 4px rgba(160, 120, 255, 0.7)) brightness(1.15);
  }
}
@media (prefers-reduced-motion: reduce) {
  .token-wrap .tok-gem {
    animation: none;
  }
}

/* Profil popup: başlık + istatistik şeridi + tahmin kartları. */
/* Task366 rev (kullanıcı) — Skorinho profilinde ✕ 25px AŞAĞIDA dursun: başlıktaki
   "Skorinho + Kurallar" şeridiyle aynı hizada kalıyordu. Yalnız bu pop-up'ta. */
/* Task600 (kullanıcı: "✕ Kurallar'ın sağında, Kurallar ile hizalı") — Task366'nın 25px
   aşağı kaydırması kalktı; ✕ üst satırda, yıldız ve Kurallar ile aynı merkezde. Kalan
   4px fark ölçülüp marjla alındı. */
#entry-modal .tm-close {
  top: -6px;
  transform: none; /* ölçüldü: marjsız/dönüşümsüz hâlde üç merkez de aynı satırda */
}
.pf-head {
  display: flex;
  align-items: center;
  /* 12px'ti; iki boşluktan 4px kısılınca ad sütunu 128px'e çıkıp tek satıra sığıyor. */
  gap: 10px;
  margin-bottom: 12px;
  /* Task366 — sayılar adın SAĞINDA kalır: satır sarmaz, yer gerekirse AD sütunu daralır
     (kullanıcı "adın hemen sağ tarafında" dedi; sardığında alt satıra düşüyordu). */
  flex-wrap: nowrap;
}
/* Task366 (kullanıcı) — takipçi/takip: Instagram dili, büyük sayı + küçük etiket.
   Ad kümesinden sonra gelir, kalan yeri alır ve SOLA yaslı durur ki adla arasında
   boşluk sabit kalsın. */
.pf-social {
  display: flex;
  /* Kullanıcı: "takipçi ile takip arasını biraz aç ve biraz sağa kaydır" */
  gap: 22px;
  align-items: center;
  /* Kullanıcı: "sağa çok kaydı, biraz sola al, boşluğu ortalasınlar". Başlık satırında
     BOŞ PAY YOK (ölçüldü: 52+12+160+12+84 = 320 ≈ 321), bu yüzden `auto` payların
     dağıtacağı bir şey kalmıyordu; blok sabit bir payla sola alınır — ad sütunu esnek
     olduğu için kendisi daralır. */
  margin-left: auto;
  /* ✕ 25px aşağı alındığı için (kullanıcı isteği) sayı bandına giriyor: blok, ✕'in
     SOLUNDA kalacak paya çekilir (✕ 36px + 12px açıklık + kartın 23px dolgusu). */
  /* 36px = ✕ genişliği; sayılarla arasında 8px açıklık kalır (40px'te ad tek satıra
     sığmıyordu — ölçüldü: ad 128px, kalan 120px). */
  margin-right: 36px;
  flex: none;
}
.pf-soc {
  display: flex;
  flex-direction: column;
  align-items: center;
  line-height: 1.1;
}
.pf-soc b {
  font-size: 15px;
  font-weight: 800;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.pf-soc i {
  font-style: normal;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.2px;
  color: var(--muted);
}
@media (max-width: 480px) {
  /* Dar ekranda da SAĞA yaslı kalır (ölçüldü: sığıyor, sarmaya gerek yok); yalnız
     aradaki boşluk bir tık kısılır. */
  .pf-social {
    gap: 18px;
  }
}
/* Task366 — uzun ad sayıların ALTINA giremez: ad kümesi daralabilir, taşan kısım kesilir. */
.pf-id {
  min-width: 0;
  overflow: hidden;
}
.pf-av {
  width: 52px;
  height: 52px;
  border-radius: 50%;
  object-fit: cover;
  flex: none;
}
.pf-av-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--accent);
  color: #fff;
  font-weight: 800;
  font-size: 22px;
}
.pf-id {
  display: flex;
  flex-direction: column;
  gap: 3px;
  min-width: 0;
}
.pf-name {
  font-weight: 800;
  font-size: 18px;
  color: var(--text);
}
/* Task366 rev — takip yıldızı AD satırından takım satırına indi: ✕ 25px aşağı alınınca
   ad satırında 34px'lik yıldızla birlikte yer kalmıyor ve kısa adlar bile ikiye
   bölünüyordu (ölçüldü: ad 128px + yıldız 34px = 162px, kalan 144px). */
.pf-idrow {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.pf-fav {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 12.5px;
  color: var(--muted);
}
.pf-fav img {
  width: 16px;
  height: 16px;
  object-fit: contain;
}
.pstats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 8px;
  margin-bottom: 14px;
}
.pstat {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 10px 6px;
  border-radius: 11px;
  /* Task286 — tema parıltı dili: üst köşeden hafif accent süzülmesi */
  background: linear-gradient(150deg, var(--glow1), var(--panel2) 58%);
  border: 1px solid var(--line2);
  overflow: hidden;
}
/* Task286 — kart ikonu (widget'la ortak SK_STAT_IC dili) */
.pstat-ic {
  color: var(--accent);
  line-height: 0;
}
.pstat-ic svg {
  width: 15px;
  height: 15px;
}
/* İsabet kartı: alttaki yüzde barına yer aç */
.pstat-hasbar {
  padding-bottom: 14px;
}
.pstat-bar {
  position: absolute;
  left: 9%;
  right: 9%;
  bottom: 6px;
  height: 3px;
  border-radius: 2px;
  background: var(--line);
}
.pstat-bar::after {
  content: '';
  position: absolute;
  inset: 0 auto 0 0;
  width: var(--p, 0%);
  border-radius: 2px;
  background: linear-gradient(90deg, var(--gold), var(--accent));
}
.pstat-v {
  font-weight: 800;
  font-size: 16px;
  color: var(--text);
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.pstat-v svg {
  flex: none;
}
.pstat-k {
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  font-weight: 700;
}
.pf-sub {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin: 6px 0 8px;
}
.pf-sub .rules-cap {
  margin: 0;
}
.pf-picks {
  display: flex;
  flex-direction: column;
  gap: 9px;
}
.pk-gated {
  display: flex;
  justify-content: center;
  padding: 4px 0 2px;
}
.pk-reveal {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  padding: 6px 12px;
}
.pk-reveal-confirm {
  background: var(--accent);
  color: #fff;
}
.pk-locked {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--muted);
}

/* ── Task039: ekstre + token anlatımı + iki-kolon mini-board ───────────────── */
/* Tema-uyumlu scrollbar (modal içerikleri kaydığında). */
.modal-card,
.tm-body,
.lg-list,
.pf-picks {
  scrollbar-width: thin;
  scrollbar-color: var(--line2) transparent;
}
.modal-card::-webkit-scrollbar,
.tm-body::-webkit-scrollbar,
.lg-list::-webkit-scrollbar,
.pf-picks::-webkit-scrollbar {
  width: 9px;
  height: 9px;
}
.modal-card::-webkit-scrollbar-track,
.tm-body::-webkit-scrollbar-track,
.lg-list::-webkit-scrollbar-track,
.pf-picks::-webkit-scrollbar-track {
  background: transparent;
}
.modal-card::-webkit-scrollbar-thumb,
.tm-body::-webkit-scrollbar-thumb,
.lg-list::-webkit-scrollbar-thumb,
.pf-picks::-webkit-scrollbar-thumb {
  background: var(--line2);
  border-radius: 999px;
  border: 2px solid transparent;
  background-clip: padding-box;
}
.modal-card::-webkit-scrollbar-thumb:hover,
.tm-body::-webkit-scrollbar-thumb:hover,
.lg-list::-webkit-scrollbar-thumb:hover {
  background: var(--muted);
  background-clip: padding-box;
}

/* Ekstre modalı */
.lg-bal {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 20px;
  font-weight: 800;
  color: var(--text);
  margin: 2px 0 10px;
}
.lg-bal .tm-sub {
  font-size: 12px;
  font-weight: 600;
}
.lg-list {
  display: flex;
  flex-direction: column;
  gap: 7px;
  max-height: 60vh;
  overflow-y: auto;
  padding-right: 4px;
}
.lg-row {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 9px 11px;
  border-radius: 11px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
/* Task334 (kullanıcı) — ekstre MAÇ satırı yeniden: skorlu tek satır (ad logo 2:1 logo ad),
   altında soru+tarih; mobilde isimler ellipsis ile sığar; satır maç detayına tıklanır. */
.lg-row.lg-clk {
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-areas:
    'mac yan'
    'alt yan';
  row-gap: 2px;
  cursor: pointer;
}
.lg-row.lg-clk:hover {
  border-color: color-mix(in srgb, var(--accent) 55%, var(--line));
}
.lg-line {
  grid-area: mac;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  min-width: 0;
}
.lg-team {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  flex: 0 1 auto;
  max-width: 42%;
  overflow: hidden;
  justify-content: flex-end;
}
.lg-team .lg-tn {
  font-style: normal;
  font-weight: 700;
  font-size: 12.5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.lg-team .crest {
  width: 18px;
  height: 18px;
  flex: none;
}
.lg-skor {
  flex: none;
  font-variant-numeric: tabular-nums;
  font-size: 13.5px;
}
.lg-skor i {
  font-style: normal;
  color: var(--muted);
  margin: 0 2px;
}
.lg-skor-yok {
  color: var(--muted);
}
.lg-sub2 {
  grid-area: alt;
  text-align: center;
  font-size: 10.5px;
  color: var(--muted);
}
.lg-row.lg-clk .lg-side {
  grid-area: yan;
  align-self: center;
}
.lg-match {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  flex: none;
}
.lg-match img {
  width: 22px;
  height: 22px;
  object-fit: contain;
}
.lg-vs {
  color: var(--muted);
  font-weight: 700;
  margin: 0 2px;
}
.lg-ico {
  display: inline-flex;
  color: var(--muted);
  flex: none;
}
.lg-desc {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 0;
  font-size: 13px;
  color: var(--text);
  flex: 1;
}
.lg-sub {
  font-size: 11px;
  color: var(--muted);
  font-weight: 600;
}
/* Ekstre satırında tarih·saat (kullanıcı istedi) — ayrı satır, hafif silik */
.lg-when {
  display: block;
  font-size: 10.5px;
  color: var(--muted);
  font-weight: 600;
  opacity: 0.8;
  font-variant-numeric: tabular-nums;
  margin-top: 1px;
}
/* "Daha fazla" — liste sonunda, ortalı; eski kayıtları getirir */
.lg-more {
  display: block;
  width: 100%;
  margin: 10px 0 2px;
  font-weight: 700;
}
.lg-side {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  flex: none;
}
.lg-wk {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--muted);
  background: var(--chip-bg);
  padding: 2px 7px;
  border-radius: 999px;
}
.lg-amt {
  font-weight: 800;
  font-size: 14px;
  font-variant-numeric: tabular-nums;
}
.lg-amt.pos {
  color: var(--green, #22c55e);
}
.lg-amt.neg {
  color: var(--red, #ef4444);
}

/* Tıklanabilir stat tile'ları (profil + widget) */
.pstat-link,
.sw-link {
  cursor: pointer;
  transition: border-color 0.12s ease;
}
/* Hover geri bildirimi HER İKİ yerde de kart border'ı (kullanıcı kararı — profildeki gibi). */
.pstat-link:hover,
.sw-link:hover {
  border-color: var(--accent);
}
.sw-tok-v {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
/* Task089 — Widget dört stat kartı (token rozete taşındı). MOBİLDE tek satırda kalır:
   iki sütuna kırılınca widget ekranın yarısını yiyor ve maçlar görünmüyordu (kullanıcı
   bildirdi). Bilgi çıkarılmadan sıkıştırılır: küçük tipografi + dar iç boşluk. */
.sw-grid.sw-grid-4 {
  grid-template-columns: repeat(4, 1fr);
}
@media (max-width: 560px) {
  .sw-grid.sw-grid-4 {
    grid-template-columns: repeat(4, 1fr);
    gap: 5px;
  }
  .sw-inner .sw-stat {
    padding: 5px 6px;
    gap: 0;
  }
  .sw-inner .sw-k {
    font-size: 9px;
    letter-spacing: 0;
  }
  .sw-inner .sw-v {
    font-size: 14px;
  }
  .sw-inner .sw-head {
    margin-bottom: 6px;
    font-size: 13px;
  }
  .sw-inner .sw-week {
    font-size: 10.5px;
    padding: 1px 7px;
  }
}

/* Widget token rozeti */
.sw-head-right {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-left: auto; /* week bilgisi sağ üstte kalsın */
}
.sw-tok {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 12.5px;
  font-weight: 800;
  color: var(--text);
  cursor: pointer;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--chip-bg);
}
.sw-tok:hover {
  color: var(--accent);
}

/* Ana sayfa mini-board: iki kolon */
.promo-board.pb-two {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px 18px;
  align-items: baseline;
}
/* Her grup YATAY: başlık + madalyalı isimler aynı satırda (sarabilir) — kompakt,
   web'de tek satıra yakın; iki grup yan yana. */
.pb-col {
  display: flex;
  align-items: center;
  /* Task117 — SARMAZ: dar ekranda üçüncü isim alt satıra düşüyordu (ölçüm: sütun 18px
     yerine 40px). Yerine ad kısalıyor (`.pbr-nm`). */
  flex-wrap: nowrap;
  gap: 4px 10px;
  min-width: 0;
}
.pb-col .promo-board-title {
  flex: none;
}
.pb-col .promo-board-row {
  white-space: nowrap;
}
@media (max-width: 520px) {
  .promo-board.pb-two {
    grid-template-columns: 1fr;
    gap: 6px;
  }
}

/* Howto Token bölümü */
.howto-token {
  margin: 6px 0 4px;
  padding: 13px 15px;
  border-radius: 13px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.howto-token-head {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 15px;
  font-weight: 800;
  color: var(--text);
  margin-bottom: 5px;
}
.howto-token p {
  margin: 0 0 8px;
  font-size: 13px;
  color: var(--muted);
  line-height: 1.5;
}
.howto-token-list {
  margin: 0;
  padding-left: 18px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12.5px;
  color: var(--text);
}

/* Task269 — TOKEN BAŞLIĞI. Kullanıcı: "Bu metinlerin görsel dili zayıf, her şey düz
   metin gibi; ilgi çekici olsun ama temaya uyumlu kalsın." Bakiye + ilerleme tek kart;
   token'ın iki kullanımı ikonlu kart; kazanma kuralı altta ipucu satırı. */
.tok-hero {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 14px;
  margin: 2px 0 10px;
  padding: 10px 12px;
  border: 1px solid color-mix(in srgb, var(--accent) 20%, var(--line));
  border-radius: 14px;
  background: linear-gradient(
    135deg,
    color-mix(in srgb, var(--accent) 10%, transparent),
    transparent 70%
  );
}
.tok-hero .lg-bal {
  margin: 0;
}
.tok-hero .lg-next {
  flex: 1 1 220px;
  margin: 0;
}
.tok-hero .lg-next-bar {
  min-width: 70px;
}
/* Dar ekranda ilerleme çubuğu KENDİ satırına iner: bakiyenin yanında 30px'lik bir
   kütük gibi görünüyordu (ölçüldü), çubuk okunmuyordu. */
@media (max-width: 480px) {
  .tok-hero {
    gap: 8px;
  }
  .tok-hero .lg-bal,
  .tok-hero .lg-next {
    flex: 1 0 100%;
  }
}
.tok-uses {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 8px;
  margin: 0 0 10px;
}
.tok-use {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 9px 10px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--chip-bg);
}
.tu-ic {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  flex: none;
  border-radius: 10px;
  background: color-mix(in srgb, var(--accent) 14%, transparent);
  color: var(--accent);
}
.tu-ic svg {
  width: 17px;
  height: 17px;
}
.tu-txt {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}
.tu-txt b {
  font-size: 12.5px;
  line-height: 1.25;
}
.tu-cost {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 11px;
  font-weight: 700;
  color: var(--muted);
}
.lg-note svg {
  width: 13px;
  height: 13px;
  vertical-align: -2px;
  margin-right: 4px;
  opacity: 0.8;
}
.lg-next {
  display: flex;
  align-items: center;
  gap: 9px;
  margin: 0 0 12px;
}
.lg-next-bar {
  flex: 1;
  height: 7px;
  border-radius: 999px;
  background: var(--line);
  overflow: hidden;
}
.lg-next-bar > span {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: linear-gradient(90deg, #4aa8ff, #b06bff);
}
.lg-next .tm-sub {
  flex: none;
  font-weight: 700;
}
/* Peek puanları token'a sayılmaz açıklaması (kullanıcı bilmezse "50 vs 47" kafa karıştırır) */
.lg-note {
  margin: -6px 0 12px;
  font-size: 11.5px;
  line-height: 1.4;
  opacity: 0.85;
}

/* ── Task040: Admin Genel dashboard ────────────────────────────────────────── */
.as-sub {
  font-size: 10.5px;
  font-weight: 700;
  color: var(--muted);
}
.adash-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
  margin-top: 12px;
}
@media (max-width: 720px) {
  .adash-cols {
    grid-template-columns: 1fr;
  }
}
.adash-panel {
  background: var(--panel2);
  border: 1px solid var(--line);
  border-radius: 13px;
  padding: 13px 15px;
  min-width: 0;
}
.adash-panel .tm-sub {
  display: flex;
  align-items: center;
  gap: 6px;
  font-weight: 800;
  color: var(--text);
  margin: 0 0 9px;
}
.adash-sub2 {
  margin-top: 14px !important;
}
.adash-chip {
  font-size: 11px;
  font-weight: 800;
  color: var(--accent);
  background: var(--chip-bg);
  padding: 2px 8px;
  border-radius: 999px;
  margin-left: auto;
}
.adash-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 7px 0;
  border-bottom: 1px solid var(--line);
  font-size: 13px;
  color: var(--muted);
}
.adash-row:last-child {
  border-bottom: 0;
}
.adash-row b {
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.adash-badge {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel);
  border: 1px solid var(--line);
  margin-bottom: 7px;
  font-size: 13px;
}
.adash-badge:last-child {
  margin-bottom: 0;
}
.ab-dot {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex: none;
}
.ab-on .ab-dot {
  background: var(--green, #22c55e);
  box-shadow: 0 0 6px var(--green, #22c55e);
}
.ab-off .ab-dot {
  background: var(--red, #ef4444);
}
.ab-l {
  font-weight: 700;
  color: var(--text);
}
.ab-x {
  margin-left: auto;
  font-size: 11.5px;
  color: var(--muted);
  font-weight: 600;
  text-align: right;
}
.adash-act {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 6px 0;
  border-bottom: 1px solid var(--line);
  font-size: 12.5px;
}
.adash-act:last-child {
  border-bottom: 0;
}
.adash-act-main {
  display: flex;
  flex-direction: column;
  gap: 1px;
  min-width: 0;
  color: var(--text);
  font-weight: 700;
}
.adash-act-sub {
  font-size: 11px;
  color: var(--muted);
  font-weight: 600;
}
.adash-act-t {
  flex: none;
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
}
.adash-match {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 7px 0;
  border-bottom: 1px solid var(--line);
  font-size: 12.5px;
}
.adash-match:last-child {
  border-bottom: 0;
}
.adash-m-teams {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  color: var(--text);
}
.adash-m-teams .feat-crest {
  width: 18px;
  height: 18px;
}
.adash-vs {
  color: var(--muted);
  margin: 0 2px;
}
.adash-m-t {
  flex: none;
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
}

/* Mini-board lider isimleri tıklanabilir (profil aç) */
.pbr-link {
  cursor: pointer;
}
.pbr-link:hover {
  color: var(--accent);
}
/* Mini-board başlıkları (Hafta/Genel) tıklanabilir → puan durumu */
.pbt-link {
  cursor: pointer;
}
.pbt-link:hover {
  text-decoration: underline;
}

/* Avatar menüsü "Görünüm" alt paneli (tema/dil/saat) — banner ⚙️ giriş yapınca oraya taşınır */
.auth-set-panel {
  display: flex;
  flex-direction: column;
  gap: 9px;
  padding: 10px 6px 4px;
  margin-top: 4px;
  border-top: 1px solid var(--line);
}
.auth-set-panel .set-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.auth-set-panel .set-label {
  font-size: 12px;
  color: var(--muted);
  font-weight: 700;
}
.auth-set-panel .theme-switch {
  display: inline-flex;
  gap: 4px;
}
.auth-set-panel .lang-select {
  max-width: 130px;
}

/* Skorinho lig scope: HER GENİŞLİKTE yalnız logo; seçili ligin adı board üstünde başlık
   olur (kullanıcı isteği — mobildeki davranış webde de geçerli). Turnuva çipleri zaten
   logo-only olduğu için başlık webde "hangi lig seçili?" sorusunu da cevaplıyor. */
.day-btn-lg .lg-scope-name {
  display: none;
}
/* Task592 — haftalık puan durumunun üstünde dönem seçici: ‹ [aralık · Bu hafta] › */
.board-week {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  margin: 2px 12px 10px;
}
.board-wk-label {
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  min-width: 0;
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.board-wk-label b {
  font-weight: 800;
}
.board-wk-code {
  font-size: 15px;
  letter-spacing: 0.3px;
  white-space: nowrap;
}
/* İçinde bulunulan hafta: rozet yerine kodun rengi (mobilde rozet satırı kırıyordu) */
.board-wk-code.is-now {
  color: var(--accent);
}
.board-wk-range,
.board-wk-n {
  font-style: normal;
  color: var(--muted);
  white-space: nowrap;
}
.board-wk-range {
  font-size: 12px;
}
.board-wk-n {
  font-size: 11px;
}
.board-wk-nav:disabled {
  opacity: 0.35;
  cursor: default;
}

.board-scope-title {
  display: flex;
  align-items: center;
  gap: 8px;
  font-weight: 800;
  font-size: 15px;
  color: var(--text);
  padding: 9px 2px 3px;
}
.board-scope-title .lg-logo {
  width: 22px;
  height: 22px;
  object-fit: contain;
  border-radius: 5px;
}
.board-scope-title .lg-icon {
  font-size: 18px;
}
.board-scope-title .comp-logo {
  width: 22px;
  height: 22px;
  object-fit: contain;
  margin: 0;
}

/* ── Task041: sekmeli lig görünümü + turnuva istatistikleri ────────────────── */
.league-tabs {
  display: none;
} /* desktop: sekme yok, standings|fixtures yan yana */
.league-name {
  display: none;
} /* desktop: her panelin kendi başlığı var */
@media (max-width: 979px) {
  /* Seçili ligin adı (logodan seçildi) — sekmelerin hemen üstünde */
  .league-name {
    display: flex;
    align-items: center;
    gap: 8px;
    /* main#content grid gap:16px zaten boşluğu verir — ekstra margin fazla boşluk yapıyordu */
    margin: 0;
    /* grid justify-items:center'ı ez → adı + tab + paneller aynı genişlik/hizada */
    justify-self: stretch;
    width: 100%;
    font-size: 16px;
    font-weight: 800;
    color: var(--text);
  }
  .league-name[hidden] {
    display: none;
  }
  .league-name .comp-logo {
    width: 22px;
    height: 22px;
    object-fit: contain;
  }
  /* Segmented control: net aktif durum, tek satır, üst menüden ayrık */
  .league-tabs {
    display: flex;
    gap: 4px;
    margin: 0;
    padding: 4px;
    /* alttaki panellerle aynı genişlik (grid justify-items:center'ı ez) */
    justify-self: stretch;
    width: 100%;
    background: var(--panel2);
    border: 1px solid var(--line);
    border-radius: 13px;
  }
  .league-tabs .dt-tab {
    flex: 1 1 auto; /* Task358 — Eleme sekmesi eklenince "Puan Duru..." oluyordu */
    text-overflow: clip;
    text-align: center;
    padding: 10px 4px;
    border: 0;
    border-radius: 9px;
    background: transparent;
    color: var(--muted);
    font-size: 12.5px;
    font-weight: 800;
    white-space: nowrap;
    transition: background 0.15s ease;
  }
  .league-tabs .dt-tab.active {
    background: var(--accent);
    color: #fff;
  }
  .league-tabs .dt-tab.hidden {
    display: none;
  }
  .league-grid {
    display: block;
    /* main#content bir grid; .league-grid grid-item. min-width:auto olduğundan İstatistik
       metrik çipleri (nowrap) max-content genişliğini track'e taşırıp sayfayı yatay
       taşırıyordu — min-width:0 ile çipler kendi kutusunda kayar, sayfa taşmaz. */
    min-width: 0;
  }
  .league-pane {
    display: none;
  }
  .league-pane.lp-active {
    display: block;
  }
  .league-pane[hidden] {
    display: none !important;
  }
}
@media (min-width: 980px) {
  #stats-section {
    grid-column: 1 / -1;
  } /* stats iki kolonun altında full genişlik */
}

/* İstatistik ekranı — kapsam + metrik çipleri + sıralı liste */
.st-scopes,
.st-metrics {
  display: flex;
  gap: 7px;
  flex-wrap: wrap;
  /* `safe center`: sığdığında ortalı, TAŞTIĞINDA soldan başlar. Düz `center` taşan şeridi
     iki yana taşırıyor ve SOLDAKİ çipler kaydırmayla bile erişilemiyordu (kullanıcı:
     "bazı butonlara tıklayamıyorum"). Tarayıcı hallediyor — JS sınıfına gerek yok. */
  justify-content: safe center;
  margin-bottom: 10px;
}
.st-metrics {
  overflow-x: auto;
  flex-wrap: nowrap;
  padding-bottom: 3px;
  position: relative; /* aktif çip offsetLeft'i bu şeride göre olsun (ortalama hesabı) */
  scrollbar-width: none; /* kaydırma ipucu = kenar solması (board-scopes gibi), scrollbar gizli */
}
.st-metrics::-webkit-scrollbar {
  display: none;
}
/* İki yönlü kenar solması — kaydırılabilirlik ipucu (Skorinho kapsam şeridiyle aynı desen) */
.st-metrics.has-more {
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
  mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
}
.st-metrics.has-prev {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 40px);
  mask-image: linear-gradient(90deg, transparent, #000 40px);
}
.st-metrics.has-prev.has-more {
  -webkit-mask-image: linear-gradient(
    90deg,
    transparent,
    #000 40px,
    #000 calc(100% - 40px),
    transparent
  );
  mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent);
}
/* Taşınca soldan başlasın (ortalı olsaydı en sol çip erişilemezdi); sığınca ortalı kalır.
   ÖNEMLİ: justify-content'i scroll KONUMUNA (has-more/has-prev) DEĞİL, taşma durumuna bağla —
   aksi halde fade toggle'ları sırasında justify bir an center'a dönüp scrollLeft'i sıfırlıyordu. */
.st-metrics.scrollable {
  justify-content: flex-start;
}
/* Task068 — İstatistik çipleri. Eskiden hepsi tek düz stildeydi (kullanıcı: "WC'dekiler daha
   güzeldi, buradakiler çok düz"). WC deseni geri getirildi:
     · pasif çip okunur metin rengiyle (soluk değil) — tıklanabilir olduğu belli olsun
     · hover'da vurgu kenarlığı + geçiş
     · KAPSAM (oyuncu/takım/turnuva) aktifken düz vurgu rengi
     · METRİK aktifken gradyan — iki seviye görsel olarak ayrışsın
   Renkler token'dan gelir, dolayısıyla dört temada da çalışır. */
.st-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 6px 13px;
  border-radius: 999px;
  background: var(--chip-bg);
  border: 1px solid var(--line2);
  color: var(--text);
  font-size: 12.5px;
  font-weight: 700;
  white-space: nowrap;
  cursor: pointer;
  transition:
    border-color 0.15s ease,
    background 0.15s ease,
    transform 0.1s ease;
}
.st-chip:hover {
  border-color: var(--accent);
}
.st-chip:active {
  transform: translateY(1px);
}
.st-chip:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
/* Kapsam: üst seviye seçim → düz vurgu */
.st-scope.active {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--on-accent);
}
/* Kategori (orta sıra): seçiliyken vurgu — kullanıcı bildirdi, tıklanınca renk almıyordu.
   Kapsamla aynı düz vurgu, metrikle karışmaması için hafif saydam kenar. */
.st-cat.active {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--on-accent);
}
/* Task501 rev (kullanıcı: "mevki süzgecinde seçilen diğer katmanlardaki gibi
   işaretlenmeli") — hat süzgeci de bir SEÇİMDİR: kapsam ve kategoriyle aynı düz vurgu.
   Metrikten (gradyan) ayrı kalır, böylece üç seviye birbirine karışmaz. */
.st-poschip.active {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--on-accent);
}
/* Metrik: alt seviye seçim → gradyan (kapsamla karışmasın) */
.st-metric.active {
  background: var(--accent-fill);
  border-color: var(--green-d);
  color: var(--on-accent);
}
@media (prefers-reduced-motion: reduce) {
  .st-chip {
    transition: none;
  }
}
/* Turnuva ortalama kartları (mevcut .st-avg bileşeniyle ÇAKIŞMASIN diye .tourn-*) */
.tourn-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
  gap: 9px;
  margin-bottom: 6px;
}
.tourn-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 2px;
  padding: 13px 8px;
  border-radius: 14px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.tourn-ic {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  margin-bottom: 4px;
  font-size: 20px;
  line-height: 1;
  background: color-mix(in srgb, var(--accent) 16%, transparent);
}
.tourn-ic svg {
  width: 21px;
  height: 21px;
  color: var(--accent);
}
.tourn-v {
  font-size: 23px;
  font-weight: 900;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.tourn-k {
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  font-weight: 700;
}
/* Sekmeler yalnız lig görünümünde (diğer sayfalarda hidden kazanır) */
.league-tabs[hidden] {
  display: none !important;
}
/* Mobil: istatistik içeriği sayfayı yatay taşırmasın (metrik çipleri kendi içinde kayar) */
#comp-stats {
  min-width: 0;
  /* Task068 — içerik panel kenar çizgisine dayanıyordu: satırlar kenardan 1px, iç boşluk 6px
     (CLAUDE.md ilke 4 ihlali, kullanıcı bildirdi). Fikstür listesindeki (.gmatches) boşluk
     diliyle hizalandı. */
  padding: 6px 10px 12px;
}
.st-scopes,
.tourn-grid,
.st-list {
  max-width: 100%;
}
@media (max-width: 979px) {
  .league-pane {
    overflow-x: hidden;
  }
  .st-metrics {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}
.st-list {
  display: flex;
  flex-direction: column;
}
.st-row {
  display: flex;
  align-items: center;
  gap: 11px;
  padding: 9px 6px;
  border-bottom: 1px solid var(--line);
}
.st-row:last-child {
  border-bottom: 0;
}
.st-rank {
  width: 22px;
  text-align: center;
  font-weight: 800;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
  flex: none;
}
.st-crest {
  width: 26px;
  height: 26px;
  object-fit: contain;
  flex: none;
}
/* Task602 — oyuncu liderlik satırı: fotoğraf başta (yuvarlak), arma takım adının yanında küçük */
.st-photo {
  position: relative;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  overflow: hidden;
  flex: none;
  background: var(--panel2);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--muted);
}
.st-photo > svg {
  width: 18px;
  height: 18px;
}
.st-photo > img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
/* `.st-name img` (24×16, cover — bayrak kalıbı) bu armayı eziyordu: kullanıcı "takım
   logoları kalıbın dışına taşıyor" dedi. Aynı özgüllükte ve sonra: 13px, contain, kırpma yok. */
.st-name img.st-sub-crest,
.st-sub-crest {
  width: 13px;
  height: 13px;
  object-fit: contain;
  border-radius: 0;
  box-shadow: none;
  vertical-align: -2px;
  margin-right: 4px;
}
.st-crest-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--accent);
  color: #fff;
  font-weight: 800;
  font-size: 12px;
}
.st-name {
  flex: 1;
  min-width: 0;
  font-weight: 700;
  color: var(--text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Takım adı ad kolonuyla birlikte kısalır ve "…" ile biter: eskiden kelime ortasından
   kesiliyordu ("Manchester", "Brighton & Hov"). */
.st-name .st-sub {
  font-size: 11px;
  color: var(--muted);
  font-weight: 600;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Dar ekranda ÖNCE takım adı kısalır: oyuncunun adı daha önemli */
.st-name b {
  flex: 0 1 auto;
}
.st-name .st-sub {
  flex-shrink: 4;
}
.st-val {
  flex: none;
  font-weight: 900;
  font-size: 16px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.st-val .st-avgn {
  display: block;
  font-size: 11px;
  color: var(--muted);
  font-weight: 700;
  text-align: right;
}
.st-seeall {
  margin-top: 8px;
}
.st-empty {
  padding: 20px 0;
  text-align: center;
  color: var(--muted);
}

/* Task052 — kodda uygulanmayan bonus: panel yanlış bilgi vermesin */
.admin-cfg-card.acf-unimpl {
  opacity: 0.75;
  border-color: var(--gold, #eab308);
}
.acf-warn {
  font-size: 10px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--gold, #eab308);
  background: color-mix(in srgb, var(--gold, #eab308) 16%, transparent);
  border-radius: 999px;
  padding: 1px 7px;
  margin-left: 4px;
}

/* Task061 — Puan durumunda maçı SÜREN takımın satırı. Canlı skor puana dahil olduğu için
   kullanıcı hangi satırların "geçici" olduğunu görebilmeli. Renkler mevcut canlı semantiğinden
   gelir (.lc-badge.live = --red, .lc-badge.ht = --gold) — yeni token uydurulmaz, temalar çalışır. */
tr.st-live {
  background: color-mix(in srgb, var(--red) 8%, transparent);
}
tr.st-live .pts {
  color: var(--red);
}
/* Task616 — o anki sonucun kolonu (G/B/M) da puanla aynı canlı renkte */
tr.st-live td.st-now {
  color: var(--red);
  font-weight: 800;
}
.st-live-tag {
  margin-left: 6px;
  padding: 1px 6px;
  border-radius: 999px;
  font-size: 9px;
  font-weight: 900;
  letter-spacing: 0.5px;
  color: #fff;
  background: var(--red);
  vertical-align: 1px;
  white-space: nowrap;
  flex: none; /* esnek satırda kısalıp "CANL" gibi kırpılmasın */
}
/* Task476 (kullanıcı: "mobilde ligler puan cetvelinde takım adı yanında CANLI yazısı çok
   alan kaplıyor, mobil görünüme özel daha küçük bir görsel çözüm bulalım") — ölçüldü:
   360 px'te etiket 45 px, takım hücresinin %29'u; canlı satırlarda takım adı tamamen
   dışarı itiliyordu (ölçülen ad genişliği 0 px). Telefonda etiket NOKTAYA iner: renk dili
   uygulamanın canlı dilinin aynısı (canlı kırmızı ve nefes alır, devre arası altın ve
   durur), yazı DOM'da kalır — `title` ve ekran okuyucu için erişilebilirlik kaybı yok. */
@media (max-width: 560px) {
  .st-live-tag {
    width: 8px;
    height: 8px;
    padding: 0;
    font-size: 0;
    letter-spacing: 0;
    vertical-align: middle;
  }
}
/* Devre arası: maç sürüyor ama top oynamıyor — mevcut İY rozetiyle aynı renk dili. */
tr.st-live.st-ht {
  background: color-mix(in srgb, var(--gold) 10%, transparent);
}
tr.st-live.st-ht .pts {
  color: var(--gold);
}
tr.st-live.st-ht td.st-now {
  color: var(--gold);
}
.st-live-tag.ht {
  background: var(--gold);
  color: #1a1206;
}

/* Task063 — Fikstür satırında canlı durum, TARİHİN yerinde (satır başı). Tarih yalnız
   bitmiş/başlamamış maçta kalır. Renk dili mevcut canlı rozetiyle aynı:
   .lc-badge.live = --red, .lc-badge.ht = --gold. */
.gmatch .g-live {
  display: block;
  font-size: 11px;
  font-weight: 900;
  letter-spacing: 0.3px;
  line-height: 1.1;
  color: var(--red);
  white-space: nowrap;
}
.gmatch .g-live.ht {
  color: var(--gold);
}

/* Task064 — Canlı göstergelerde hareket. Nabız, Up Next rozetindeki `livePulse` ile AYNI
   animasyon; ayrı bir hareket dili üretilmez. */
.gmatch .g-live {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  justify-content: center;
}
.gmatch .g-live .lc-dot {
  width: 6px;
  height: 6px;
  background: var(--red);
}
/* Puan durumundaki CANLI etiketi de nefes alsın (kullanıcı isteği) — dikkat çeker ama
   satır okunurluğunu bozmayacak kadar hafif. */
.st-live-tag {
  animation: stLivePulse 2.6s ease-in-out infinite;
}
.st-live-tag.ht {
  animation: none; /* devre arasında oyun durdu — hareket yanıltıcı olur */
}
@keyframes stLivePulse {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.55;
  }
}
/* Hareket azaltma isteğine HER canlı nokta uyar — kural yalnız fikstürdeki noktayı
   kapsıyordu, rozetlerdeki ve takvimlerdeki noktalar yanıp sönmeye devam ediyordu. */
@media (prefers-reduced-motion: reduce) {
  .lc-dot,
  .st-live-tag {
    animation: none;
  }
}

/* Task064 — Fikstürde satır başı hizası. Her `.gmatch` KENDİ grid'i ve ilk sütun `auto`
   olduğundan, içerik değişince (tarih "Jul 27" ~44px, "HT" ~17px) sütun genişliği satırdan
   satıra değişiyor ve takım adları/skor kayıyordu (ölçüldü: ev sahibi 574-601 px arası).
   Sabit genişlik → dakika gelse de gitse de sütun aynı yerde durur. */
.gmatch .g-lead {
  min-width: 48px;
  text-align: center;
  justify-content: center;
}

/* Task064 — Puan durumunda CANLI rozeti takım adının hemen ardında duruyordu; ad uzunluğu
   satırdan satıra değiştiği için rozetler basamak basamak kayıyordu (kullanıcı fark etti).
   Hücrenin KENDİSİ flex yapılamaz (display:flex, table-cell'i ezip sütun genişliğini bozuyor —
   denendi, başlık 16px'e çöktü), bu yüzden içerik bir sarmalayıcıya alındı. */
#standings td.team-col .tc-inner {
  display: flex;
  align-items: center;
  gap: 6px;
}
/* Rozet hizası — KULLANICI KARARI (2026-07-27), üç yaklaşım da denendikten sonra:
   1) Adın hemen ardında, serbest: kısa adlarda dağınık.
   2) Ada sabit `min-width`: kısa adlarda hizalı, uzun adlarda (Wolverhampton Wanderers 164px)
      rozet sağa kayıyor.  ← SEÇİLEN
   3) Hücrenin sağına yaslama: her adda hizalı ama kısa adlarda ~116px boşluk kalıyor.
   Kullanıcı 2 ve 3'ü ekranda görüp 2'yi seçti: "uzun adlarda sağa kayabilir" — rozetin takım
   adının YANINDA durması, her satırda tıpatıp hizalı olmasından daha önemli. */
#standings td.team-col .sn {
  min-width: 84px;
  /* Task072 — ad sığmadığında SERT kesilmesin: "Manche" yerine "Manche…". Sütun daraldıkça
     (mobil) taban genişlik kalkar, yoksa min-width taşmayı kilitliyordu. */
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
#standings td.team-col .tc-inner {
  min-width: 0;
}
/* Ad ile ilk sayı sütunu arasında nefes (CLAUDE.md ilke 4: hiçbir nesne komşusuna değmez) */
#standings td.team-col,
#standings th.team-col {
  padding-right: 10px;
  /* Task601 rev-3 — ok→yıldız arası = yıldız→arma arası (6px); ölçüldü */
  padding-left: 7px;
}
@media (max-width: 560px) {
  #standings td.team-col .sn {
    min-width: 0;
  }
}
/* Fikstür: skor hücresi SABİT genişlik — içerik (saat ya da skor) satırdan satıra
   değişse de skor sütunu kaymaz.
   Task362 (kullanıcı: "skor ile takım logoları arası çok açık, isimler sığmıyor") —
   74px, 12 saatlik biçim ("11:42 PM") için konmuştu; Task110'dan beri saat HER dilde
   24 saatliktir ve ölçülen doğal genişlik 36-39px. Değer iki haneli skoru ("10 : 12")
   karşılayan en küçük ölçüye çekildi; kazanılan ~22px takım adlarına gitti. */
.gmatch .gscore {
  min-width: 52px;
}

/* Task064 — Fikstürde aksiyon sütunu satırdan satıra değişiyordu: canlı/bitmiş maçta 2 ikon,
   oynanabilir maçta 3 (tahmin butonu eklenir) → 42px'e karşı 63px, bu da takım/skor sütunlarını
   10px kaydırıyordu (ölçüldü). Sabit genişlik → buton sayısından bağımsız hiza.
   Task295 — takvim ikonu (withCal) katılınca en geniş küme 4 ikon = 98 px oldu; 66 px
   yetmeyip hiza yeniden bozulmuştu (kullanıcı: takım kartı Maçlar sekmesi). Değer en
   geniş kümeye çekildi. */
.gmatch .m-acts {
  min-width: 98px;
  justify-content: flex-end;
}

/* Task065 — Arşiv doldurma paneli: sezon listesinde durum bir bakışta anlaşılsın
   (kullanıcı isteği). Renkler mevcut anlam diliyle: dolu=yeşil, eksik=altın,
   veri yok=soluk, işleniyor=vurgu. */
.bf-leagues {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  margin: 6px 0 10px;
}
.bf-tag {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 999px;
  font-size: 10px;
  font-weight: 800;
  white-space: nowrap;
}
.bf-full {
  background: color-mix(in srgb, var(--green) 18%, transparent);
  color: var(--green);
}
.bf-partial {
  background: color-mix(in srgb, var(--gold) 18%, transparent);
  color: var(--gold);
}
.bf-empty {
  background: var(--chip-bg);
  color: var(--muted);
}
.bf-queued {
  background: color-mix(in srgb, var(--accent) 18%, transparent);
  color: var(--accent);
}
.bf-run {
  background: color-mix(in srgb, var(--red) 18%, transparent);
  color: var(--red);
}
.bf-table td {
  vertical-align: middle;
}
/* Task103 — O AN dolan hücre: rakamlar vurgu renginde ve kalın (kullanıcı isteği).
   Renk `--accent`; "dolu/eksik" anlamındaki yeşil/altınla karışmasın diye ayrı seçildi.
   Satır zemini de hafifçe vurgulanır ama hücre asıl işareti taşır (iki şerit farklı
   sezonlarda çalışabildiği için işaret satırda değil HÜCREDE anlamlı). */
.bf-table td.bf-live {
  color: var(--accent);
  font-weight: 800;
  background: color-mix(in srgb, var(--accent) 12%, transparent);
  border-radius: 8px;
}
.bf-table tr.bf-row-live td:first-child {
  box-shadow: inset 3px 0 0 var(--accent);
}
.bf-table .bf-act {
  text-align: right;
}
.bf-err {
  color: var(--red);
  font-size: 11px;
}

/* Task067 — Görünüm panelinde kişisel lig görünürlüğü. Liste uzun olabildiği için kendi
   satırında (sütun) durur; onay kutuları dokunma hedefi olacak kadar geniş. */
.set-row-col {
  flex-direction: column;
  align-items: stretch;
  gap: 6px;
}
/* Task472 — İÇ kaydırma kaldırıldı: menünün KENDİSİ kaydırılıyor (küçük ekranda iç içe
   iki kaydırma alanı, kullanıcıyı listenin ortasında bırakıyordu). Tek kaydırma daha
   öngörülebilir. */
.comp-vis-list {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
/* Anahtar görünümü — admin panelindeki aç/kapa düğmesiyle AYNI dil (kullanıcı isteği). */
.comp-toggle {
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 5px 6px;
  border-radius: 8px;
  cursor: pointer;
  font-size: 12px;
}
.comp-toggle:hover {
  background: var(--chip-bg);
}
.comp-toggle input {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}
.comp-slider {
  position: relative;
  flex: none;
  width: 34px;
  height: 18px;
  border-radius: 999px;
  background: var(--line2);
  transition:
    background 0.15s ease,
    box-shadow 0.15s ease;
}
.comp-slider::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background: #fff;
  transition: transform 0.15s ease;
}
.comp-toggle input:checked + .comp-slider {
  background: var(--accent);
}
.comp-toggle input:checked + .comp-slider::after {
  transform: translateX(16px);
}
.comp-toggle input:focus-visible + .comp-slider {
  box-shadow: 0 0 0 2px var(--accent);
}
.comp-name {
  display: flex;
  align-items: center;
  gap: 7px;
  min-width: 0;
}
/* Task525 (kullanıcı: "açık temada bazı lig logoları banner altındaki menüde çok zor
   görünüyor") — ölçüldü (açık tema, beyaz panel): Ligue 1 kontrast 2,6 · LaLiga 3,0 ·
   Süper Lig 4,0 — 16 px'te ince markalar okunmuyordu. Logo BÜYÜR ve açık temada altına
   nötr jeton gelir; koyu temada zaten okunuyor, orada jeton yok. */
.comp-toggle .comp-logo {
  width: 22px;
  height: 22px;
  object-fit: contain;
  flex: none;
}
:root[data-theme='light'] .comp-toggle .comp-logo,
:root[data-theme='light'] #competition-nav .day-btn .comp-logo {
  padding: 2px;
  border-radius: 6px;
  background: #eef2f7;
  box-shadow: inset 0 0 0 1px rgba(18, 38, 58, 0.08);
}
/* Seçili hapta jeton yok: orada zaten tonlu zemin var (Task514) */
:root[data-theme='light'] #competition-nav .day-btn.active .comp-logo {
  background: none;
  box-shadow: none;
}

/* Task068 — Up Next kartında Skorinho markası: logo + gradyan yazı, tamamı tıklanabilir.
   Gradyan `.skorio-logo + span` kuralından gelir (widget başlığıyla aynı). Dar fikstür
   satırında yazı gizlenir — orada yer yok, ikon yeterli. */
.pick-btn {
  /* 3px gap + logo sarmalayıcısının marjı sıfırlanır: `.skorio-logo` genelde 8px sağ marj
     taşıyor, bu da toplamda 13px'lik fazla boşluk yapıyordu (kullanıcı bildirdi). */
  gap: 3px;
}
.pick-btn .pick-word {
  display: none;
  font-size: 12px;
  line-height: 1;
  letter-spacing: 0.2px;
  white-space: nowrap;
}
.live-card .pick-btn .pick-word {
  display: inline;
}
/* Logo sarmalayıcısı svg'yi tam sarsın (hizayı bozmasın) */
.pick-btn .skorio-logo {
  font-size: 0;
  line-height: 0;
  display: inline-flex;
  align-items: center;
  margin-right: 0;
}

/* Task068 — metrik çipindeki ikon: emoji ve SVG aynı kutuda hizalı dursun. */
.st-chip .st-ic {
  display: inline-flex;
  align-items: center;
  line-height: 0;
  font-size: 12px;
}
.st-chip .st-ic svg {
  width: 13px;
  height: 13px;
}

/* Task069 — Turnuva: 15 dakikalık dilim dağılımı. Çubuk uzunluğu en yoğun dilime göre
   ölçeklenir; sayı sağda tabular hizalı durur. */
.slot-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 4px 0 6px;
}
.slot-row {
  display: grid;
  grid-template-columns: 64px 1fr 42px;
  align-items: center;
  gap: 10px;
}
.slot-k {
  font-size: 12px;
  font-weight: 700;
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.slot-bar {
  height: 10px;
  border-radius: 999px;
  background: var(--chip-bg);
  overflow: hidden;
}
.slot-bar i {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--green), var(--accent));
}
.slot-v {
  text-align: right;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}

/* Task070 — Mobil Up Next kartı: Skorinho markası geri sayımla AYNI SATIRDA, izleme/paylaş
   ikonlarının tam üstünde durur (kullanıcı isteği). Marka `.m-acts` içinde kalır — tıklama
   işleyicisi ve kardeş ikon metrikleri değişmesin diye yalnız konumu alınır.
   Web'de (>=561px) geri sayım zaten üst satıra mutlak konumlanıyor ve marka sağda; orada
   değişiklik yok. */
/* Task125/133 — TEK DÜZEN (mobil ve web aynı): solda lig + hafta, ortada sayaç, sağda
   Skorinho markası (mutlak). Sağdaki 92px markanın payıdır. */
.live-card .lc-cd-wrap {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  gap: 8px;
  padding: 0 92px 0 0;
}
.live-card .m-acts .pick-btn {
  position: absolute;
  /* kart üst dolgusu (12) + cd-wrap üst marjı (2) − buton/satır yükseklik farkı */
  top: 13px;
  right: 14px;
}

/* ── Task074: Dönem özeti gösterisi ─────────────────────────────────────────────
   Kutlama diliyle aynı iskelet (tam ekran radial parıltı + gradyan başlık + kapat
   butonu); fark, sahnelerin sırayla belirmesi. Sıra `animation-delay` ile kurulur,
   zamanlayıcı zinciriyle değil — kapatma anında yarım kalan zamanlayıcı olmaz. */
.recap-show {
  position: fixed;
  inset: 0;
  /* Gol kutlaması 85'te ve sabit banner/tab bar'ın ALTINDA kalıyor; bu gösteri ise
     tam ekran bir diyalog (aria-modal) — üst banner ve alt tab bar dahil her şeyi örter,
     yoksa sahnenin ortasında site kabuğu duruyor. */
  z-index: 210;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px 16px;
  overflow-y: auto;
  /* İKİ KATMAN: üstte marka parıltısı, altta NEREDEYSE OPAK zemin. Tek katmanlı radial
     gradyanda merkez saydam kalıyor ve arkadaki sayfa metinleri gösteriyle çakışıyordu. */
  background:
    radial-gradient(
      circle at 50% 30%,
      color-mix(in srgb, var(--accent) 34%, transparent),
      transparent 62%
    ),
    rgba(4, 9, 18, 0.975);
  /* Sahne HER TEMADA koyu: metin renkleri tema değişkenlerinden GELMEZ, yoksa açık temada
     koyu metin koyu zemine düşüyordu (ölçüldü: rgb(18,38,58)). Gol/şampiyon kutlamaları da
     aynı mantıkla sabit açık renk kullanır. */
  color: #fff;
}
.recap-show.hidden {
  display: none;
}
#recap-confetti {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
.recap-show-card {
  position: relative;
  z-index: 1;
  width: min(560px, 100%);
  text-align: center;
  /* panel değil sahne: kenarlık yok ama içerik kenara dayanmasın (ilke 4) */
  padding: 8px 14px 4px;
}
.rs-scenes {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 14px;
}
.rs-scene {
  opacity: 0;
  animation: rsIn 0.55s cubic-bezier(0.2, 0.9, 0.3, 1) both;
}
@keyframes rsIn {
  from {
    opacity: 0;
    transform: translateY(14px) scale(0.97);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.rs-mark {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  font-size: 20px;
  font-weight: 900;
}
.rs-mark .skorio-logo {
  /* Marka yazısının gradyanı `.skorio-logo + span` kuralından gelir (widget/Up Next ile
     aynı kaynak) — sarmalayıcı bu yüzden gerekli. Sarmalayıcının genel 8px sağ marjı
     burada sıfırlanır, gösteride logo ile yazı bitişik durur. */
  display: inline-flex;
  align-items: center;
  margin-right: 0;
  font-size: 0;
  line-height: 0;
}
.rs-mark svg {
  width: 26px;
  height: 26px;
}
.rs-round {
  margin-top: 2px;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.66);
}
.rs-tier {
  font-size: clamp(22px, 5.4vw, 34px);
  font-weight: 900;
  line-height: 1.15;
  text-wrap: balance;
  background: linear-gradient(180deg, #ffe66a 10%, #ffb648 55%, #ff7a1f 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}
.rs-points {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
}
.rs-num {
  font-size: clamp(56px, 17vw, 110px);
  font-weight: 900;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  color: var(--gold);
  text-shadow: 0 0 32px rgba(244, 197, 66, 0.35);
}
.rs-cap {
  font-size: 13px;
  font-weight: 700;
  color: rgba(255, 255, 255, 0.72);
}
.rs-chip {
  margin-top: 6px;
  padding: 3px 10px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 800;
  border: 1px solid rgba(255, 255, 255, 0.22);
}
.rs-chip.up {
  color: var(--green);
  border-color: color-mix(in srgb, var(--green) 45%, transparent);
  background: color-mix(in srgb, var(--green) 14%, transparent);
}
.rs-rank {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 16px;
  font-weight: 800;
}
.rs-medal {
  font-size: 26px;
  line-height: 1;
}
.rs-best {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.rs-best-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 8px 12px;
  border-radius: 12px;
  /* Konfeti arkadan geçtiği için satır zemini yeterince opak: metin her karede net kalsın */
  background: rgba(9, 16, 30, 0.72);
  border: 1px solid rgba(255, 255, 255, 0.16);
  opacity: 0;
  animation: rsSlide 0.5s cubic-bezier(0.2, 0.9, 0.3, 1) both;
}
@keyframes rsSlide {
  from {
    opacity: 0;
    transform: translateX(-26px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.rs-best-mt {
  font-size: 13.5px;
  font-weight: 700;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rs-best-pt {
  flex: none;
  color: var(--gold);
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.rs-note {
  font-size: 13px;
  font-weight: 700;
  color: rgba(255, 255, 255, 0.92);
  max-width: 42ch;
  text-wrap: balance;
}
.rs-actions {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  margin-top: 18px;
}
.rs-cta {
  min-width: 240px;
  opacity: 0;
  /* Gecikme JS'ten gelir: son sahneden SONRA belirsin (sabit değer sahne sayısına göre
     bazen erken kalıyordu). */
  animation: rsIn 0.5s ease-out both;
}
/* Kapat her sahnede görünür (gol animasyonundaki gibi) — gecikmesi yok */
.recap-show .champion-close {
  opacity: 1;
  animation: none;
}
/* Hareket azaltma tercihi: sahneler beklemeden, tek seferde görünür */
@media (prefers-reduced-motion: reduce) {
  .rs-scene,
  .rs-best-row,
  .rs-cta {
    animation: none !important;
    opacity: 1 !important;
  }
}

/* Task076 — Hoş geldin gösterisi: ortak sahne motorunun (Task074) üstüne yalnız birkaç
   içerik kuralı. Ayrı overlay/CSS seti YOK. */
.rs-app-logo {
  width: 30px;
  height: 30px;
  border-radius: 8px;
}
.rs-brand {
  gap: 8px;
  font-size: 22px;
}
/* Tanıtım maddeleri: ikon + metin, satır metni tek satıra sıkışmasın */
.rs-wc-row {
  justify-content: flex-start;
  gap: 10px;
  text-align: left;
}
.rs-wc-ic {
  flex: none;
  display: inline-flex;
  color: var(--gold);
}
.rs-wc-ic svg {
  width: 18px;
  height: 18px;
}
.rs-wc-tx {
  white-space: normal;
  overflow: visible;
  line-height: 1.3;
}
/* Skorinho tanıtım sahnesi: marka büyük, altındaki cümle nefes alsın */
.rs-wc-brand .rs-mark {
  font-size: 26px;
}
.rs-wc-brand .rs-cap {
  margin-top: 4px;
  max-width: 34ch;
  line-height: 1.35;
}

/* Task352 — AÇIK DÖNEM rozeti: altın hap içinde Skorinho hedefi + "H1 başladı";
   altında davet cümlesi. Gösterinin tek altın vurgusu burasıdır (CTA dışında). */
.rs-wc-live {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}
.rs-wc-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 7px 16px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--gold) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--gold) 55%, transparent);
  color: var(--gold);
  font-weight: 900;
  font-size: 17px;
  letter-spacing: 0.3px;
}
.rs-wc-chip .skorio-logo svg,
.rs-wc-chip svg {
  width: 18px;
  height: 18px;
}
.rs-wc-live .rs-cap {
  max-width: 34ch;
  line-height: 1.35;
}
/* "2 dakikada oyna · ücretsiz · bahis yok" — CTA'nın hemen üstünde sakin bir güven satırı */
.rs-wc-easy {
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.2px;
  color: var(--muted);
}

/* Task078 — Takvime ekle butonu: kardeş aksiyon ikonlarıyla AYNI kutu metriği
   (yıldız/paylaş ile hizası kaymasın), eklendiğinde yeşil onay. */
.m-acts .cal-mini {
  border: 0;
  background: none;
  min-width: 0;
  min-height: 0;
  display: inline-flex;
  align-items: center;
  line-height: 0;
  /* Task092 — Kardeş ikonlarla aynı AÇIK renk. Task078'de `--line2` seçilmişti (o zaman
     "sürekli parlak" görünüyordu); kullanıcı bu kez tersini bildirdi: "ikonlar zor
     görünüyor, Skorinho ikonu gibi açık renk olsun". İşaretli hâl (`.on`) YEŞİL kalır. */
  color: color-mix(in srgb, var(--text) 74%, transparent);
  cursor: pointer;
  transition:
    color 0.12s,
    transform 0.1s;
  touch-action: manipulation;
}
/* Hover ALTIN: kardeş ikonların (yıldız/paylaş) hover dili bu; takvim tek başına beyaza
   dönseydi farklı bir kontrol gibi okunurdu. Hover yalnız fare cihazlarda — mobilde
   "yapışkan hover" rengi kalmasın (wstar deseni). */
@media (hover: hover) {
  .m-acts .cal-mini:hover {
    color: var(--gold);
    transform: scale(1.12);
  }
}
/* İşaretli takvim de kardeş ikonlarla AYNI altın (kullanıcı: "tıklandığında hepsi aynı
   renk olmalı"); eskiden tek başına yeşile dönüyordu. */
.m-acts .cal-mini.on {
  color: var(--gold);
}

/* Task083 — Kadroda oyuncu fotoğrafı. Forma numarası KAYBOLMAZ: avatarın sağ altında
   rozet olur (kullanıcı şartı). Fotoğrafı olmayan oyuncuda eski numaralı daire kalır,
   böylece kapsam %100 olmadan da düzen bozulmaz. */
.lu-av {
  position: relative;
  width: 38px;
  height: 38px;
  display: inline-flex;
}
.lu-av img {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--panel2);
  border: 1.5px solid rgba(255, 255, 255, 0.85);
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4);
}
.lu-mk {
  position: relative;
}
.lu-mk-gol {
  z-index: 4;
}
.lu-mk-as {
  z-index: 3;
}
.lu-mk-red,
.lu-mk-yellow,
.lu-mk-yr {
  z-index: 2;
}
.lu-av-num.lu-forma {
  z-index: 1;
}
/* Task336 (kullanıcı) — numara FORMA görseli üzerinde: yuvarlak zemin kalkar,
   takım rengindeki tee (SVG) + ortasında numara. Renk yoksa beyaz forma. */
.lu-av-num.lu-forma {
  background: none;
  padding: 0;
  min-width: 0;
  /* Task336 rev (kullanıcı) — SABİT genişlik: 1-2 hane aynı formada; 2 haneden de
     geniş ki rakam gövde çizgisine dayanmasın. Gölge YOK (şeffaf kutuda kare iz
     bırakıyordu — "silik dış çerçeve"). */
  /* rev 2-4 (kullanıcı ince ayarları): genişlik 27→29→31, boy 24→22, 2px aşağı+sağa,
     sonra "az sağa kayabilir" → 3px daha sağa */
  width: 31px;
  height: 22px;
  bottom: -7px;
  right: -16px;
  border-radius: 0;
  box-shadow: none;
  border: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}
.lu-av-num.lu-forma svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}
.lu-av-num.lu-forma i {
  position: relative;
  font-style: normal;
  font-weight: 900;
  font-size: 9px;
  line-height: 1;
  color: var(--fi);
  margin-top: 3px; /* numara formanın gövdesine oturur (yaka payı) */
}
.lu-av-num {
  position: absolute;
  /* Rozet dairenin DIŞINA taşındı: eski yerinde oyuncunun çenesini/yüzünü kapatıyordu
     (kullanıcı bildirdi). Artık yalnız köşesi daireye değiyor, o da omuz hizası. */
  /* Task089 — numara ve işaretler hafif SAĞA kaydırıldı (kullanıcı ayarı) */
  right: -11px;
  bottom: -5px;
  min-width: 17px;
  height: 17px;
  padding: 0 4px;
  border-radius: 999px;
  background: #fff;
  color: #06120b;
  font-size: 10.5px;
  font-weight: 900;
  line-height: 17px;
  text-align: center;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
}
/* Fotoğrafı olmayan oyuncu: aynı dairede siluet — düzen tek tip kalsın */

/* Yedek listesi: küçük avatar, numara ve ad aynı satırda */
.lu-bp-av {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  object-fit: cover;
  vertical-align: -4px;
  margin-right: 4px;
  background: var(--panel2);
}

/* Task083 — Fotoğrafı olmayan oyuncu: aynı dairede siluet (kullanıcı isteği). Düzen tek
   tip kalır; numara rozeti fotoğraflıdaki gibi korunur. */
.lu-av-ph {
  width: 38px;
  height: 38px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: var(--panel2);
  border: 1.5px solid rgba(255, 255, 255, 0.85);
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.4);
  color: var(--line2);
  overflow: hidden;
}
.lu-av-ph .lu-sil {
  width: 28px;
  height: 28px;
  margin-bottom: -3px; /* omuzlar daireye otursun, kırpılmasın */
}
.lu-bp-av.lu-av-ph {
  width: 18px;
  height: 18px;
  border-width: 1px;
}
.lu-bp-av.lu-av-ph .lu-sil {
  width: 13px;
  height: 13px;
  margin-bottom: -2px;
}

/* ================= Task086 — Maç detayı: künye, reyting, xG, momentum, şut haritası ====
   İlke 4 (kenar boşluğu): buradaki her kutu panel kenarından padding'le durur.
   Renkler CSS değişkeninden gelir — dört temada da (koyu yeşil / lacivert / açık / mono)
   doğru okunur. Grafikler bağımlılıksız inline SVG'dir. */

/* --- Künye şeridi: stadyum · hakem · seyirci · hava ---
   Task309 (kullanıcı) — stad ve hakem YAN YANA: iki sütunlu ızgara; uzun ad kendi
   hücresinde kısaltılır, satır israfı biter. */
.dt-info {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px 8px;
  justify-items: stretch;
  margin: 8px 12px 2px;
  font-size: 12.5px;
  color: var(--muted);
}
.dt-info .mi-chip,
.dt-info .mi-it {
  min-width: 0;
  justify-content: center;
}
.dt-info .mi-chip b,
.dt-info .mi-chip span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dt-info .mi-it {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  white-space: nowrap;
}
.dt-info .ic {
  width: 14px;
  height: 14px;
  opacity: 0.85;
}
.dt-info .mi-sub {
  font-style: normal;
  opacity: 0.75;
}

/* --- Kadroda reyting rozeti: avatarın SOL ÜSTÜ (numara sağ altta, çakışmaz) --- */
.lu-rt {
  position: absolute;
  /* Task089 — rozet oyuncunun yüzünü kapatıyordu; dairenin dışına, omuz hizasının
     üstüne alındı (kullanıcı bildirdi). Task345 rev — "çok az yukarı" (kullanıcı). */
  left: -9px;
  top: -12px;
  min-width: 22px;
  height: 17px;
  padding: 0 4px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 900;
  line-height: 17px;
  text-align: center;
  font-variant-numeric: tabular-nums;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
}
.rt-good {
  background: var(--green);
  color: var(--on-accent);
}
.rt-mid {
  background: var(--panel2);
  color: var(--text);
  box-shadow:
    inset 0 0 0 1px var(--line2),
    0 1px 3px rgba(0, 0, 0, 0.5);
}
.rt-low {
  background: #b4535a;
  color: #fff;
}
/* Maçın en yüksek reytingi: altın çerçeve */
.lu-best .lu-av img,
.lu-best .lu-av-ph {
  border-color: var(--gold);
  box-shadow: 0 0 0 2px var(--gold-d);
}
.lu-clk {
  cursor: pointer;
}
.lu-clk:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
  border-radius: 10px;
}
.lu-open .lu-nm {
  color: var(--accent);
  font-weight: 800;
}
.lu-bp-rt {
  margin-left: 6px;
  padding: 0 5px;
  border-radius: 999px;
  font-style: normal;
  font-size: 10.5px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}

/* --- Maç içi performans şeridi (oyuncuya tıklayınca) --- */
/* Task105 — Performans kartı AKIŞTA değil, oyuncunun ÜSTÜNDE yüzer: akışa eklendiğinde
   altındaki diziliş satırlarını aşağı itiyordu (kullanıcı bildirdi). Konumu JS hesaplar
   ve kapsayıcıya kırpar; kenarlara değmez. */
.lu-view {
  position: relative;
}
.pm-strip {
  position: absolute;
  z-index: 20;
  width: min(300px, 92%);
  padding: 12px 14px;
  border: 1px solid var(--line2);
  border-radius: 12px;
  background: var(--panel2);
  box-shadow: 0 10px 26px rgba(0, 0, 0, 0.42);
  /* Task237 (kullanıcı bildirdi: "en alta inemedim") — Kartın TAMAMI görünür alana sığar:
     yükseklik ekranla sınırlı, başlık ve alttaki düğme sabit, ORTADAKİ gövde kaydırılır.
     Eskiden gövdenin kendi sabit penceresi (340px) vardı ve kart o pencerenin dışında
     büyüyordu; profil grafiği eklenince alt kısım ekranın dışında kalıyordu. */
  display: flex;
  flex-direction: column;
  max-height: min(82vh, 660px);
}
.pm-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(96px, 1fr));
  gap: 8px 12px;
}
/* Task105 — Zenginleştirilmiş performans kartı: başlık (fotoğraf + ad + reyting + ✕),
   oranlı çubuklar ve bölümlere ayrılmış ölçümler. */
.pm-head {
  flex: none;
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
}
.pm-av {
  width: 34px;
  height: 34px;
  flex: none;
  border-radius: 50%;
  object-fit: cover;
  background: var(--panel);
  border: 1px solid var(--line2);
}
.pm-av-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--muted);
}
.pm-av-ph svg {
  width: 22px;
  height: 22px;
}
.pm-id {
  display: flex;
  flex-direction: column;
  min-width: 0;
  flex: 1;
}
.pm-nm {
  font-size: 13px;
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pm-min {
  font-size: 11px;
  color: var(--muted);
}
.pm-rt {
  flex: none;
  padding: 3px 7px;
  border-radius: 8px;
  font-size: 12.5px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.pm-close {
  flex: none;
  width: 26px;
  height: 26px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border-radius: 50%;
  border: 1px solid var(--line2);
  background: var(--panel);
  color: var(--muted);
  font-size: 12px;
  cursor: pointer;
}
.pm-close:hover {
  color: var(--text);
  border-color: var(--accent);
}
/* Task236 — Oran çubuğu ait olduğu BÖLÜMÜN içinde durur ve tüm genişliği kaplar;
   çipler ızgara sütunlarında kalır. Tepedeki ayrı çubuk bloğu kaldırıldı (aynı ölçüm
   iki kez görünmesin). */
/* Task236 — Oran çubukları bölümün sonunda TEK ızgarada toplanır: satırlar `display:
   contents` ile üst ızgaraya katılır, böylece etiket/çubuk/sayı sütunları satırlar
   arasında hizalanır. Tepedeki ayrı çubuk bloğu kaldırıldı (aynı ölçüm iki kez
   görünmesin). */
.pm-sec-bars {
  grid-column: 1 / -1;
  display: grid;
  gap: 8px;
  margin-top: 4px;
}
.pm-bar-top {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px;
}
.pm-bar-row {
  display: grid;
  gap: 3px;
  font-size: 11px;
}
.pm-bar-lbl {
  color: var(--muted);
}
.pm-bar {
  height: 6px;
  border-radius: 4px;
  background: var(--line);
  overflow: hidden;
}
.pm-bar i {
  display: block;
  height: 100%;
  background: var(--accent);
}
.pm-bar-v {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
  font-variant-numeric: tabular-nums;
  font-size: 11px;
  white-space: nowrap;
}
.pm-bar-v b {
  font-size: 12.5px;
  font-weight: 800;
  color: var(--text);
}
.pm-bar-v i {
  font-style: normal;
  color: var(--muted);
}
.pm-body {
  display: grid;
  gap: 10px;
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
}
/* Task238 — Kart içi sekmeler: maç içi ölçümler / oyun profili */
.pm-tabs {
  display: flex;
  gap: 6px;
  flex: none;
  margin: 2px 0 8px;
}
.pm-tab {
  flex: 1 1 0;
  height: 28px;
  border: 1px solid var(--line2);
  background: var(--panel);
  color: var(--muted);
  font-size: 11.5px;
  font-weight: 800;
  border-radius: 999px;
  cursor: pointer;
}
.pm-tab.active {
  background: var(--accent);
  border-color: var(--accent);
  color: #fff;
}
.pm-tab:hover {
  border-color: var(--accent);
}
.pm-pane {
  display: grid;
  gap: 10px;
}
.pm-pane.hidden {
  display: none;
}
/* Fotoğraf + ad: oyuncu kartını açar */
.pm-idlink {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  flex: 1 1 auto;
  cursor: pointer;
}
.pm-idlink:hover .pm-nm {
  color: var(--accent);
}
/* Task105 — Renk ANLAM taşır: gol/asist altın, savunma mavi, disiplin kırmızı, kurtarış
   yeşil. Nötr ölçümler renklendirilmez — her şey renkli olursa hiçbiri öne çıkmaz. */
.pm-it.pm-gold b {
  color: var(--gold);
}
.pm-it.pm-blue b {
  color: var(--accent);
}
.pm-it.pm-red b {
  color: var(--red);
}
.pm-it.pm-green b {
  color: var(--green);
}
.pm-sub {
  display: flex;
  align-items: center;
  gap: 6px;
}
.pm-evs {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.pm-ev {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  font-size: 11px;
  font-style: normal;
}
.pm-ev svg {
  width: 12px;
  height: 12px;
}
.pm-ev b {
  font-size: 10px;
  font-weight: 900;
}
/* Kart rozetleri EMOJİ DEĞİL, CSS ile çizilir (emoji kare ve platforma göre değişiyor) */
.pm-card {
  width: 9px;
  height: 13px;
  border-radius: 2px;
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.35);
}
.pm-card-y {
  background: #f2c94c;
  color: #3a2c00;
}
.pm-card-r {
  background: var(--red);
}
.pm-card b {
  position: relative;
  left: 11px;
  color: var(--text);
}
.pm-sec {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(84px, 1fr));
  gap: 6px 10px;
}
.pm-sec-h {
  grid-column: 1 / -1;
  margin: 0;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--muted);
}
/* Kadro sekmesi nitelik çipleri + teknik direktör satırı */
.lu-chips {
  display: flex;
  gap: 6px;
  justify-content: safe center;
  flex-wrap: wrap;
  margin: 8px 10px 2px;
}
.lu-chip {
  padding: 4px 10px;
  border-radius: 999px;
  border: 1px solid var(--line2);
  background: var(--chip-bg, var(--panel2));
  color: var(--muted);
  font-size: 11.5px;
  font-weight: 700;
  cursor: pointer;
}
/* Task499 — BEŞİNCİ çip (Boy) eklenince uzun dilli ekranlarda satır ikiye çıkıyordu
   (ölçüldü, 390 px İngilizce: 309 px gerekiyor, 301 px yer var). Dar ekranda çipler
   biraz daralır; beşi tek satırda kalır, sahanın üstündeki yükseklik değişmez. */
@media (max-width: 430px) {
  .lu-chips {
    gap: 5px;
  }
  .lu-chip {
    padding: 4px 8px;
  }
}
.lu-chip.active {
  color: var(--bg);
  background: var(--accent);
  border-color: var(--accent);
}
.lu-coach {
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 8px 10px 0;
  font-size: 12px;
  color: var(--text);
  /* Task165 — Kullanıcı: "Teknik direktör altında çok az boşluk olsun, sahaya yapışık
     görünüyor." Saha ile TD satırı arasında nefes payı. */
  margin-bottom: 10px;
}
.lu-coach svg {
  width: 15px;
  height: 15px;
  color: var(--muted);
}
.lu-coach-k {
  color: var(--muted);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
}
/* Nitelik rozeti: forma numarası sağ altta KALICI, seçilen nitelik SOL ALTTA.
   Kullanıcı ölçütü: "3 görsel de sol alttan resme TEMAS etmeli, fotoğrafı KAPATMAMALI" —
   bu yüzden rozet dairenin dışına taşar (sol-alt köşe zaten boş), küçük punto ve tek
   satır; uzun değer (€190.9mn) taşmasın diye genişlik sınırlı. */
.lu-av-meta {
  position: absolute;
  /* Yaş ve bayrak dar rozetler: köşeye YAKIN dursun (kullanıcı bunları geri istedi) */
  left: -11px;
  bottom: -5px;
  max-width: 54px;
  padding: 0 4px;
  border-radius: 6px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  font-size: 8.5px;
  font-weight: 800;
  line-height: 14px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Bayrak rakamlardan daha büyük görünmeli (kullanıcı isteği) */
.lu-av-meta.lu-av-flag {
  font-size: 12px;
  line-height: 15px;
  padding: 0 3px;
}
/* Değer rozeti EN GENİŞ olan (€190mn): yalnız o daha sola kaydırılır ki fotoğrafın
   üstünde kalmasın. Yaş/bayrak yerinde durur — kullanıcı üçünü ayrı ayrı istedi. */
.lu-av-meta.lu-av-money {
  left: -31px;
}
.pm-it {
  display: flex;
  flex-direction: column;
  font-size: 11.5px;
  color: var(--muted);
  line-height: 1.25;
}
.pm-it b {
  font-size: 15px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.pm-go {
  margin-top: 10px;
  flex: none;
}

/* --- xG karşılaştırması --- */
.xg-card,
.mo-card,
.sm-card {
  margin: 12px;
  padding: 12px 14px 14px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--panel);
}
.xg-h {
  display: block;
  margin-bottom: 8px;
}
.xg-row {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 8px;
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.xg-row b {
  font-size: 16px;
}
.xg-side.xg-a {
  text-align: right;
}
.xg-sub {
  color: var(--muted);
  font-size: 11.5px;
}
.xg-note {
  margin: 8px 0 0;
  font-size: 11.5px;
  color: var(--muted);
}
.xg-note-sm {
  margin-top: 5px;
  font-size: 10.5px;
  opacity: 0.8;
}

/* --- Momentum grafiği --- */
/* Momentum grafiği yanlardan biraz GENİŞLER ama panele/kart kenarına DEĞMEZ
   (kullanıcı: "sağdan soldan biraz genişlet ama panele değmesin"). */
/* Task309 (kullanıcı) — momentum daha kompakt: yükseklik ve dikey boşluklar kısıldı,
   ekran canlı maçta daha verimli kullanılır. */
.mo-card.mo-flat {
  margin: 6px 8px 4px;
  padding: 4px 6px 4px;
}
.mo-wrap {
  position: relative;
}
/* Takım adları grafiğin DIŞINDA (işaretler adı kapatmasın): ev sahibi üstte solda,
   deplasman altta sağda — hangi yarının kimin olduğu yine bir bakışta okunur. */
.mo-tm {
  font-size: 11px;
  font-weight: 800;
  color: var(--muted);
  line-height: 1.3;
}
.mo-tm-h {
  text-align: left;
  margin-bottom: 1px;
}
.mo-tm-a {
  text-align: right;
  margin-top: 1px;
}
.mo-svg {
  display: block;
  width: 100%;
  /* Task309 — 120px çok yer kaplıyordu (kullanıcı); okunurluğu bozmayan en kısa boy */
  height: 84px;
}
.mo-axis {
  stroke: var(--line2);
  stroke-width: 0.5;
}
.mo-area {
  fill-opacity: 0.34;
  stroke-width: 0.7;
  vector-effect: non-scaling-stroke;
}
/* Sıfır çizgisinin üstü ev sahibi, altı deplasman — iki taraf bir bakışta ayrılsın */
.mo-home {
  fill: var(--accent);
  stroke: var(--accent);
}
.mo-away {
  fill: var(--gold);
  stroke: var(--gold-d);
}
/* Gol işareti: dakikayı gösteren ince çizgi + ucunda TOP (ne olduğu anlaşılsın) */
.mo-goal {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 0;
  border-left: 1.5px solid var(--gold);
  opacity: 0.9;
  pointer-events: auto;
}
.mo-goal i {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  font-size: 12px;
  line-height: 1;
  font-style: normal;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.6));
}
/* Çizgi SADECE golün olduğu tarafa uzanır: ev sahibinin golünde üst yarı, deplasmanın
   golünde alt yarı (kullanıcı ayarı — tam boy çizgi hangi taraf olduğunu gizliyordu). */
.mo-goal-h {
  bottom: 50%;
}
.mo-goal-a {
  top: 50%;
}
.mo-goal-h i {
  top: -2px;
}
.mo-goal-a i {
  bottom: -2px;
}
/* Kırmızı kart işareti: golle AYNI dikey çizgi deseni, kırmızı renkte (kullanıcı istedi) */
.mo-red {
  border-left-color: var(--red);
  border-left-width: 2px;
  opacity: 1;
}
.mo-red i {
  font-size: 9px;
}
/* Devre arası çizgisi */
.mo-ht {
  position: absolute;
  top: 0;
  bottom: 0;
  width: 0;
  border-left: 1px dashed var(--line2);
}
.mo-ht i {
  position: absolute;
  top: 50%;
  left: 3px;
  transform: translateY(-50%);
  font-style: normal;
  font-size: 9.5px;
  font-weight: 700;
  color: var(--muted);
  background: var(--panel);
  padding: 0 2px;
  border-radius: 3px;
}
.mo-legend {
  display: flex;
  justify-content: space-between;
  font-size: 11.5px;
  color: var(--muted);
  margin-top: 4px;
}

/* --- Şut haritası --- */
.sm-svg {
  display: block;
  width: 100%;
  max-width: 520px;
  margin: 4px auto 0;
  /* Task089 — TAM saha (105 × 68 m): iki takım ayrı yarı sahada çizilir */
  aspect-ratio: 109 / 72;
}
/* Hangi takım hangi kaleye hücum ediyor — saha ÜSTÜNDE, renk lekesiyle eşleşir */
/* Task335 (kullanıcı) — başlık iki SÜTUN: üstte nokta+isim, altında yön; her genişlikte
   aynı (eski tek satır webde isimleri "Beşi…"ye kırpıyor, yönler ortayı yutuyordu). */
.sm-sides {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 2px 16px;
  margin: 2px 2px 6px;
  font-size: 11px;
  color: var(--muted);
}
.sm-side {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1px;
  min-width: 0;
}
.sm-side-h {
  align-items: flex-end;
  text-align: right;
}
.sm-side-nm {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  max-width: 100%;
}
.sm-side b {
  color: var(--text);
  font-size: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  min-width: 0;
}
.sm-side small {
  font-size: 10.5px;
}
.sm-sw {
  width: 9px;
  height: 9px;
  border-radius: 50%;
  flex: 0 0 auto;
}
.sm-sw-h {
  background: var(--accent);
}
.sm-sw-a {
  background: var(--gold);
}
/* Yarı sahalar takım rengiyle çok hafif boyanır (şut ↔ takım eşleşmesi) */
.sm-half-h {
  fill: var(--accent);
  fill-opacity: 0.05;
}
.sm-half-a {
  fill: var(--gold);
  fill-opacity: 0.05;
}
/* Task335 — başlık yapısı her genişlikte aynı: eski 480px order/justify hilesi kalktı */
/* Takım ayrımı: ev sahibi vurgu rengi, deplasman altın (gol/isabet/blok ŞEKİLLE ayrılır) */
circle.sm-away.sm-on {
  stroke: var(--gold);
}
circle.sm-away.sm-off {
  fill: var(--gold);
  fill-opacity: 0.3;
}
circle.sm-away.sm-block {
  stroke: var(--gold);
  fill: var(--gold);
  fill-opacity: 0.14;
}
.sm-spot {
  fill: var(--muted);
}
.sm-pitch {
  fill: none;
  stroke: var(--line2);
  stroke-width: 0.8;
}
.sm-box {
  fill: none;
  stroke: var(--line2);
  stroke-width: 0.6;
}
.sm-goalline {
  stroke: var(--text);
  stroke-width: 0.9;
  opacity: 0.75;
}
.sm-dot {
  stroke-width: 0.6;
  /* Üst üste binen şutlar birbirinden ayrılsın (35 şutluk maçlar oluyor) */
  paint-order: stroke;
}
/* Gol: TAKIM RENGİ + açık halka. Eskiden iki takımın golü de altındı ve altın aynı
   zamanda "deplasman" demekti — hangi golün kimin olduğu karışıyordu. */
/* Task330 rev (kullanıcı) — GOL ayrımı RENKLE: iki takımda da YEŞİL (uygulamanın gol
   dili — skor vurgusuyla aynı #19e08a); boyut xG'yi izler, çizim sırası golleri üste
   alır. Takım ayrımı konumdan (herkes kendi hücum kalesine) ve tooltip'ten okunur. */
circle.sm-goal {
  fill: #19e08a;
  stroke: #fff;
  stroke-width: 1.1;
  stroke-opacity: 0.95;
  filter: drop-shadow(0 0 1.4px rgba(25, 224, 138, 0.9));
}
circle.sm-away.sm-goal {
  fill: #19e08a;
}
circle.sm-on {
  fill: none;
  stroke: var(--accent);
  stroke-width: 1;
}
/* Task330 — bitişik noktalar birleşmesin: dolgulu noktalara zemin renkli ince kenar */
circle.sm-off {
  fill: var(--muted);
  fill-opacity: 0.35;
  stroke: rgba(8, 16, 34, 0.8);
  stroke-width: 0.4;
}
/* Bloklanan şut: kesik çizgi bu ölçekte karalama gibi görünüyordu → dolu, soluk halka */
circle.sm-block {
  fill: var(--muted);
  fill-opacity: 0.18;
  stroke: var(--muted);
  stroke-width: 0.5;
}
.sm-card .xg-note {
  text-align: center; /* Task335 (kullanıcı) — "nokta büyüklüğü…" notu paneli ortalar */
}
.sm-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 14px;
  justify-content: center;
  margin-top: 8px;
  font-size: 11.5px;
  color: var(--muted);
}
.sm-lg {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
/* Efsanedeki nokta örnekleri (SVG değil, kutu) */
.sm-lg i.sm-dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  display: inline-block;
}
.sm-lg i.sm-goal {
  background: #19e08a;
  box-shadow: 0 0 0 1.5px rgba(255, 255, 255, 0.8);
}
.sm-lg i.sm-on {
  border: 1.5px solid var(--accent);
}
.sm-lg i.sm-off {
  background: var(--muted);
  opacity: 0.45;
}
.sm-lg i.sm-block {
  border: 1.5px solid var(--muted);
  background: rgba(143, 179, 163, 0.18);
}

/* --- Olay akışında tıklanabilir oyuncu adı --- */
.dt-plink {
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  color: inherit;
  cursor: pointer;
  border-bottom: 1px dotted var(--line2);
}
.dt-plink:hover,
.dt-plink:focus-visible {
  color: var(--accent);
  border-bottom-color: var(--accent);
}

@media (max-width: 560px) {
  .pm-grid {
    grid-template-columns: repeat(auto-fit, minmax(84px, 1fr));
  }
  .mo-svg {
    height: 72px;
  }
}

/* ================= Task087 — Oyuncu kartı ==========================================
   Bölümler kart kutularında durur (ilke 4: içerik kenara teğet olmaz). Grafikler
   bağımlılıksız inline SVG; renkler tema değişkenlerinden gelir. */

.pp-name .pp-badge {
  margin-left: 8px;
  padding: 2px 8px;
  border-radius: 999px;
  font-size: 11px;
  font-weight: 800;
  vertical-align: middle;
}
.pp-cap {
  background: var(--gold);
  color: #1a1200;
}
.pp-inj {
  background: var(--red);
  color: #fff;
}
.pp-mv {
  margin-top: 4px;
  font-size: 13px;
  color: var(--muted);
}
.pp-mv b {
  color: var(--text);
}

.pc-card,
.ss-card {
  margin: 12px;
  padding: 12px 14px 14px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--panel);
}
.pc-note {
  margin: 0 12px 12px;
}

/* --- Sezon şeridi --- */
.ss-head {
  font-size: 12.5px;
  color: var(--muted);
  margin-bottom: 10px;
  text-align: center;
}
/* Task243 — Sezon satırındaki takım: ligin sağında, armasıyla; başlık tek satır kalır. */
.ss-team {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-left: 8px;
  color: var(--muted);
  font-weight: 700;
}
.ss-team-crest {
  width: 16px;
  height: 16px;
  object-fit: contain;
}
.ss-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(84px, 1fr));
  gap: 10px 12px;
}
.ss-cell {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  font-size: 11.5px;
  color: var(--muted);
}
.ss-cell b {
  font-size: 19px;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  line-height: 1.15;
}
.ss-rank {
  font-style: normal;
  font-size: 10.5px;
  color: var(--gold);
  margin-top: 2px;
}

/* --- Traits radarı --- */
.rd-svg {
  display: block;
  width: 100%;
  max-width: 340px;
  margin: 6px auto 0;
  /* Eksen etiketleri çemberin DIŞINDA duruyor; viewBox onlara yer bırakacak kadar geniş
     (ilke 4: içerik panel kenarına teğet olmaz — mobilde etiketler kenara değiyordu). */
  aspect-ratio: 140 / 120;
}
.rd-ring {
  fill: none;
  stroke: var(--line);
  stroke-width: 0.4;
}
.rd-axis {
  stroke: var(--line2);
  stroke-width: 0.4;
}
.rd-area {
  fill: var(--accent);
  fill-opacity: 0.3;
  stroke: var(--accent);
  stroke-width: 1;
}
.rd-lbl {
  font-size: 5px;
  fill: var(--muted);
}

/* Task237 — Maç içi kartın altındaki profil karşılaştırması: SEZON çokgeni soluk dolgu
   (arka plan), BU MAÇ çokgeni vurgulu çizgi (önde). İki çokgen de aynı eksenlerde. */
.pr-card {
  margin-top: 12px;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}
.pr-legend {
  display: flex;
  gap: 12px;
  margin-top: 4px;
  font-size: 10.5px;
  color: var(--muted);
}
.pr-key::before {
  content: '';
  display: inline-block;
  width: 10px;
  height: 3px;
  border-radius: 2px;
  margin-right: 5px;
  vertical-align: 3px;
}
.pr-key-m::before {
  background: var(--accent);
}
.pr-key-s::before {
  background: var(--muted);
  opacity: 0.55;
}
.pr-svg {
  max-width: 280px;
  aspect-ratio: 164 / 124;
}
.pr-area-s {
  fill: var(--muted);
  fill-opacity: 0.16;
  stroke: var(--muted);
  stroke-opacity: 0.5;
  stroke-width: 0.7;
}
.pr-area-m {
  fill: var(--accent);
  fill-opacity: 0.18;
  stroke: var(--accent);
  stroke-width: 1.3;
}
.pr-head,
.pr-row {
  display: grid;
  grid-template-columns: 1fr 46px 46px;
  align-items: baseline;
  gap: 6px;
  font-size: 11.5px;
}
.pr-head {
  margin-top: 6px;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  color: var(--muted);
}
.pr-head b,
.pr-head span:last-child,
.pr-m,
.pr-s {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.pr-list {
  display: grid;
  gap: 3px;
  margin-top: 3px;
}
.pr-nm {
  color: var(--muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pr-m {
  color: var(--text);
  font-weight: 800;
}
/* Task238 — Bu maç, oyuncunun SEZON değerinin üstündeyse yeşil, altındaysa kırmızı.
   Fark 5 puandan azsa renk verilmez: yuvarlama gürültüsü renge dönüşmesin. */
.pr-m.pr-up {
  color: var(--green);
}
.pr-m.pr-down {
  color: var(--red);
}
.pr-s {
  color: var(--muted);
}
.pr-scope,
.pr-note {
  margin: 6px 0 0;
  font-size: 10.5px;
  color: var(--muted);
}

/* --- Form: reyting trendi + maç listesi --- */
/* Task092 — Son 10 maç reyting grafiği. Gerilmiş SVG içine daire/yazı KONMAZ (Task089'un
   dersi): alan+çizgi SVG'de, noktalar ve etiketler HTML katmanında yüzde konumla durur. */
.pf-chart {
  position: relative;
  height: 116px;
  /* Üstte 14 px pay: en iyi maçın değeri "Son 10 maç" başlığının altında kalıyordu
     (kullanıcı bildirdi). */
  margin: 14px 4px 10px;
}
.pf-svg {
  display: block;
  width: 100%;
  height: 100%;
}
.pf-line {
  fill: none;
  stroke: var(--accent);
  stroke-width: 2;
  stroke-linejoin: round;
  stroke-linecap: round;
  vector-effect: non-scaling-stroke;
}
.pf-area {
  fill: var(--accent);
  fill-opacity: 0.13;
  stroke: none;
}
.pf-avg {
  stroke: var(--line2);
  stroke-width: 1;
  stroke-dasharray: 3 3;
  vector-effect: non-scaling-stroke;
}
/* Ortalama reyting başlık satırında (grafiğin içinde nokta ile çakışıyordu) ve
   BELİRGİN: rakam rozet gibi, reyting bandının renginde (kullanıcı isteği). */
.pf-ort {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  margin-left: 10px;
  vertical-align: middle;
}
.pf-ort i {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  color: var(--muted);
}
.pf-ort b {
  font-size: 15px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  padding: 2px 8px;
  border-radius: 8px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  color: var(--text);
}
.pf-ort b.rt-good {
  color: var(--on-accent);
  background: var(--green);
  border-color: var(--green);
}
.pf-ort b.rt-mid {
  color: var(--text);
}
.pf-ort b.rt-low {
  color: var(--red);
  border-color: var(--red);
}
.pf-pt {
  position: absolute;
  width: 9px;
  height: 9px;
  margin: -4.5px 0 0 -4.5px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 0 2px var(--panel);
}
.pf-pt.rt-good {
  background: var(--green);
}
.pf-pt.rt-mid {
  background: var(--muted);
}
.pf-pt.rt-low {
  background: var(--red);
}
.pf-pt.pf-best,
.pf-pt.pf-worst {
  width: 11px;
  height: 11px;
  margin: -5.5px 0 0 -5.5px;
}
/* En iyi/en kötü maçın değeri noktanın yanında yazar — eksen olmadan ölçek okunur */
.pf-lab {
  position: absolute;
  left: 50%;
  bottom: 130%;
  transform: translateX(-50%);
  font-size: 11px;
  font-weight: 800;
  color: var(--text);
  white-space: nowrap;
}
.pf-lab-alt {
  bottom: auto;
  top: 130%;
}
/* İlk ve son noktanın etiketi kenardan taşmasın */
.pf-pt[style*='left:3.00%'] .pf-lab {
  left: 0;
  transform: none;
}
.pf-pt[style*='left:97.00%'] .pf-lab {
  left: auto;
  right: 0;
  transform: none;
}
.pf-list {
  display: flex;
  flex-direction: column;
}
.pf-row {
  display: grid;
  grid-template-columns: 88px 1fr auto 44px;
  gap: 8px;
  align-items: center;
  padding: 7px 2px;
  border-top: 1px solid var(--line);
  cursor: pointer;
  font-size: 13px;
}
.pf-row:first-child {
  border-top: 0;
}
.pf-row:hover {
  background: var(--panel2);
}
.pf-dt {
  color: var(--muted);
  font-size: 11.5px;
}
.pf-mk {
  font-size: 12px;
}
.pf-rt {
  justify-self: end;
  min-width: 40px;
  text-align: center;
  padding: 2px 0;
  border-radius: 6px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

/* --- Piyasa değeri --- */
/* Task511 — değer grafiğinin özeti: bugün · en yüksek (ay yıl) · 12 ay değişimi */
.mv-sum {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 16px;
  margin: 2px 0 4px;
  font-size: 12px;
}
.mv-sum-i {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
}
.mv-sum-i i {
  color: var(--muted);
  font-style: normal;
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
}
.mv-sum-i b {
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.mv-sum-i small {
  margin-left: 4px;
  color: var(--muted);
  font-size: 10.5px;
  font-weight: 600;
}
.mv-up {
  color: var(--green);
}
.mv-down {
  color: var(--red);
}
/* Kariyer satırında kulüp arması adın solunda */
.rec-main img.crest {
  width: 16px;
  height: 16px;
  margin-right: 5px;
  vertical-align: -3px;
}
.mv-wrap {
  position: relative;
  /* Zirve etiketi grafiğin üstünde durur — kutunun dışına taşıp kırpılmasın diye üstte
     yer bırakılır (kullanıcı: "bazı değerler birbirini kapatıyor"). Task094: 16 → 26 px,
     etiket "Piyasa değeri" BAŞLIĞININ üstüne biniyordu (ölçüldü). */
  padding-top: 26px;
}
/* Noktalar/etiketler yüzdeyle SVG'nin KENDİ kutusuna göre oturur: sarmalayıcının üst
   padding'i (26/34px) yüzde hesabına karışırsa noktalar çizgiden yukarı kayıyordu
   (kullanıcı bildirdi — katkı grafiğindeki Task302 kaymasının ikizi). */
.mv-plot {
  position: relative;
}
.mv-svg {
  display: block;
  width: 100%;
  /* Etiketler grafiğin üstünde/altında durduğu için kutu biraz yüksek: yazı taşmasın */
  height: 96px;
}
/* Task089 — Değerler grafiğin ÜZERİNDE, kendi noktalarında. Alttaki "zirve/güncel"
   satırı eksenin uç değerleri sanılıyordu (kullanıcı bildirdi). */
.mv-pt {
  position: absolute;
  width: 8px;
  height: 8px;
  margin: -4px 0 0 -4px;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 0 2px var(--panel);
}
.mv-pt.mv-now {
  background: var(--accent);
}
.mv-tag {
  position: absolute;
  transform: translate(-50%, -140%);
  padding: 2px 7px;
  border-radius: 8px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  font-size: 11px;
  line-height: 1.25;
  white-space: nowrap;
  text-align: center;
  font-variant-numeric: tabular-nums;
}
/* Uçlardaki etiket kutunun dışına taşmasın (hesaplanmış sınıfla — style eşleşmesi
   kırılgandı ve yalnız bazı değerlerde tutuyordu) */
.mv-tag.mv-tag-l {
  transform: translate(-8%, -140%);
}
.mv-tag.mv-tag-r {
  transform: translate(-92%, -140%);
}
/* İki etiket yan yana düşerse biri NOKTANIN ALTINA iner — üst üste binmesinler */
.mv-tag.mv-tag-below {
  transform: translate(-50%, 34%);
}
.mv-tag.mv-tag-below.mv-tag-l {
  transform: translate(-8%, 34%);
}
.mv-tag.mv-tag-below.mv-tag-r {
  transform: translate(-92%, 34%);
}
.mv-tag b {
  display: block;
  font-size: 12.5px;
}
.mv-tag i {
  font-style: normal;
  font-size: 9.5px;
  color: var(--muted);
}
.mv-tag.mv-now {
  border-color: var(--accent);
}
/* Grafik üzerinde şeffaf ipucu alanları: üzerine gelince yıl + değer (native title) */
.mv-hit {
  position: absolute;
  top: 0;
  bottom: 0;
}
.mv-hit:hover {
  background: rgba(255, 255, 255, 0.06);
  cursor: crosshair;
}
/* Fare gezdirme okuması: grafiğin üstünde, noktanın hizasında */
.mv-read {
  position: absolute;
  top: -2px;
  transform: translateX(-50%);
  padding: 2px 8px;
  border-radius: 8px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  font-size: 11px;
  font-weight: 700;
  white-space: nowrap;
  pointer-events: none;
  z-index: 2;
}
.mv-axis {
  display: flex;
  justify-content: space-between;
  margin-top: 4px;
  font-size: 10.5px;
  color: var(--muted);
}
.mv-area {
  fill: var(--gold);
  fill-opacity: 0.22;
}
.mv-line {
  fill: none;
  stroke: var(--gold);
  stroke-width: 1.6;
  vector-effect: non-scaling-stroke;
}

/* --- Kariyer tablosu --- */
.pc-tbl td {
  padding: 7px 10px;
  font-variant-numeric: tabular-nums;
}
.ps-sep {
  height: 1px;
  background: var(--line);
  margin: 14px 12px;
}

@media (max-width: 560px) {
  .pf-row {
    grid-template-columns: 72px 1fr auto 40px;
    font-size: 12.5px;
  }
  .ss-grid {
    grid-template-columns: repeat(auto-fit, minmax(72px, 1fr));
  }
}
/* Asist rozeti: emoji yerine tema uyumlu harf rozeti (ilke 3) */
.pf-as {
  display: inline-block;
  min-width: 15px;
  height: 15px;
  margin-left: 3px;
  border-radius: 4px;
  background: var(--accent);
  color: var(--on-accent);
  font-style: normal;
  font-size: 10px;
  font-weight: 900;
  line-height: 15px;
  text-align: center;
}

/* ================= Task088 — Takım kartı ========================================== */

/* --- Son 5 form noktaları --- */
.tf-wrap {
  display: flex;
  align-items: center;
  justify-content: center;
  /* 6px'te son maçın altın çerçevesi komşu noktaya 2px kalıyordu (ölçüldü) */
  gap: 8px;
  margin: 8px 12px 0;
  /* Beş nokta ALT SATIRA KAÇMAZ: form tek bakışta okunan bir şerittir */
  flex-wrap: nowrap;
}
.tf-lbl {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 12px;
  color: var(--muted);
  margin-right: 2px;
}
/* Task539 (kullanıcı: "mobilde son 5 maç paneli ortalasın, okun yanında 'son 5 maç'
   yazsın") — Task507'de metin telefonda gizlenmişti: o sırada şeridin solunda "Karşılaştır"
   düğmesi vardı ve dar satırda yer kalmıyordu. Task532 düğmeyi şeritten aldığı için yer
   açıldı; etiket her genişlikte okunur. */
.tf-dot {
  /* Task507 rev (kullanıcı: "son 5 maç yuvarlakları yumurta gibi görünmeye başladı") —
     şeride "Karşılaştır" düğmesi eklenince esnek satırda daireler yatayda eziliyordu.
     Daire ARTIK EZİLMEZ: küçülme kapalı. */
  flex: none;
  width: 24px;
  height: 24px;
  border: 0;
  border-radius: 50%;
  font-size: 11px;
  font-weight: 900;
  color: var(--on-accent);
  cursor: pointer;
}
.tf-W {
  background: var(--green);
}
.tf-D {
  background: var(--muted);
}
.tf-L {
  background: var(--red);
  color: #fff;
}
.tf-x {
  background: var(--panel2);
  color: var(--muted);
}
/* EN SON maç altın çerçevede — maç detayındaki `.fm-last` ile AYNI vurgu (kullanıcı
   isteği: "son maçın ayrıca sarı çerçeve içerisinde olması"). Çerçeve `box-shadow` ile
   çizilir: `border` noktanın çapını büyütür ve şerit hizası kayardı. */
.tf-dot.tf-last {
  box-shadow:
    0 0 0 2px var(--panel),
    0 0 0 4px var(--gold);
}

/* --- Maç başına ölçümler + lig ortalaması --- */
.tm-h {
  display: block;
  margin-bottom: 6px;
}
.tm-metric {
  margin-top: 12px;
}
.tm-val {
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.tm-val b {
  font-size: 15px;
}
.tm-val i {
  display: block;
  font-style: normal;
  font-size: 11px;
  color: var(--muted);
}
.tm-bar {
  position: relative;
  height: 8px;
  margin-top: 5px;
  border-radius: 999px;
  background: var(--panel2);
  overflow: hidden;
}
.tm-bar i {
  display: block;
  height: 100%;
  background: var(--accent);
  border-radius: 999px;
}
/* Task220 — Ölçümün YÖNÜ çubuğun renginde: ortalamanın iyi tarafı yeşil, kötü tarafı
   kırmızı, eşik bandındaki (fark %5'in altında) satır nötr vurgu renginde kalır.
   Renk TEK gösterge değildir — satırda sapma yüzdesi ve "önde/geride" metni de yazılı. */
.tm-bar.is-up i {
  background: var(--green);
}
.tm-bar.is-down i {
  background: var(--red);
}
/* Sapma rozeti: sayı üstte, "önde/geride" altında (zayıf yönler panelindeki dille aynı) */
.tm-gap {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  line-height: 1.1;
  min-width: 52px;
  margin-left: 10px;
  text-align: right;
}
.tm-gap.is-up {
  color: var(--green);
}
.tm-gap.is-down {
  color: var(--red);
}
.tm-gap b {
  font-size: 12px;
  font-weight: 700;
}
.tm-gap i {
  font-style: normal;
  font-size: 9px;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--muted);
}
/* Lig ortalaması işareti: çubuğun ortası (takım değeri buradan sağdaysa ligin üstünde) */
.tm-bar u {
  position: absolute;
  top: -2px;
  width: 2px;
  height: 12px;
  background: var(--gold);
  text-decoration: none;
}

/* --- Gol dakika dağılımı --- */
.gb-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 8px;
  align-items: end;
  height: 120px;
  margin-top: 8px;
}
.gb-col {
  display: flex;
  flex-direction: column;
  align-items: center;
  height: 100%;
  justify-content: flex-end;
}
/* Task176 — adetler çubukların üstünde, çubuk renkleriyle (kullanıcı: "gol adetleri
   anlaşılamıyor"). Sabit yükseklikli satır: çubuk alanı sayı yüzünden zıplamaz. */
.gb-n {
  /* Çubuklarla AYNI ızgara: 42% + 42% ve 3px boşluk → her sayı kendi çubuğunun üstünde */
  display: grid;
  grid-template-columns: 42% 42%;
  gap: 3px;
  justify-content: center;
  width: 100%;
  height: 13px;
  align-items: center;
  font-size: 10.5px;
  font-weight: 900;
  line-height: 1;
  text-align: center;
}
.gb-nf {
  font-style: normal;
  color: var(--accent);
}
.gb-na {
  font-style: normal;
  color: var(--red);
}
.gb-bars {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  gap: 3px;
  flex: 1;
  min-height: 0;
  width: 100%;
}
.gb-bars i {
  width: 42%;
  min-height: 2px;
  border-radius: 3px 3px 0 0;
}
.gb-for {
  background: var(--accent);
}
.gb-ag {
  background: var(--red);
  opacity: 0.75;
}
.gb-lbl {
  margin-top: 6px;
  font-size: 10.5px;
  color: var(--muted);
}
.gb-key {
  width: 10px;
  height: 10px;
  border-radius: 3px;
  display: inline-block;
}

/* --- Kupalar --- */
.tr-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 7px 0;
  border-top: 1px solid var(--line);
  font-size: 13px;
}
.tr-row:first-of-type {
  border-top: 0;
}
.tr-cnt {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--gold);
  font-variant-numeric: tabular-nums;
}
.tr-cnt .ic {
  width: 15px;
  height: 15px;
}

/* --- Sezon istatistikli kadro --- */
.sq-row {
  display: grid;
  grid-template-columns: 34px 26px 1fr repeat(3, 42px) 44px;
  gap: 8px;
  align-items: center;
  padding: 7px 12px;
  border-top: 1px solid var(--line);
  cursor: pointer;
}
.sq-row:hover {
  background: var(--panel2);
}
.sq-av {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--panel2);
}
.sq-av-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  color: var(--muted);
}
.sq-av-ph svg {
  width: 22px;
  height: 22px;
}
.sq-no {
  color: var(--muted);
  font-variant-numeric: tabular-nums;
  text-align: center;
}
.sq-nm {
  font-weight: 700;
  font-size: 13.5px;
  min-width: 0;
}
.sq-nm .sq-sub {
  display: block;
  font-style: normal;
  font-weight: 400;
  font-size: 11px;
  color: var(--muted);
}
.sq-badge {
  display: inline-block;
  margin-left: 5px;
  min-width: 15px;
  height: 15px;
  border-radius: 4px;
  font-style: normal;
  font-size: 10px;
  font-weight: 900;
  line-height: 15px;
  text-align: center;
}
.sq-cap {
  background: var(--gold);
  color: #1a1200;
}
.sq-inj {
  background: var(--red);
  color: #fff;
}
.sq-st {
  text-align: center;
  font-size: 13px;
  font-variant-numeric: tabular-nums;
}
.sq-st i {
  display: block;
  font-style: normal;
  font-size: 10px;
  color: var(--muted);
}
.sq-rt {
  justify-self: end;
  min-width: 40px;
  text-align: center;
  padding: 3px 0;
  border-radius: 6px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}

@media (max-width: 560px) {
  /* Task494 (kullanıcı: "mobilde alan sınırlı; oyuncu adlarına yeteri yer kalacak şekilde
     fontlarla oyna ama oyuncuların değerleri de listede görünsün") — sayı sütunları bir
     tık daralır ve küçülür, kazanılan yer ADA gider; değer adın ALTINDA durduğu için
     yatayda hiç yer harcamaz. */
  .sq-row {
    grid-template-columns: 30px 20px 1fr repeat(3, 30px) 34px;
    gap: 4px;
    padding: 7px 10px;
  }
  .sq-st {
    font-size: 12px;
  }
  .sq-st i {
    font-size: 9px;
  }
  .sq-nm {
    font-size: 12.5px;
  }
  .sq-nm .sq-sub {
    font-size: 10.5px;
  }
  .gb-grid {
    height: 96px;
  }
}
/* Task088 — Takım künyesi başlığı: geniş ekranda tek satır, dar ekranda ALT ALTA.
   Yan yana zorlanınca stadyum ve TD adı panelin sağından taşıyordu (ilke 4). */
#team-head {
  flex-wrap: wrap;
  justify-content: center;
}
#team-head .dt-score,
#team-head .dt-info,
#team-head .cc,
/* Task507 rev (kullanıcı: "webde karşılaştır butonu detay butonu ile hizalı ve en solda
   görünsün") — şerit ortalıydı; artık soldan başlar, düğme sekme satırıyla aynı hizada.
   Telefonda da aynı: "son 5"i sağa itmesi sorun değil (kullanıcı). */
#team-head .tf-wrap {
  /* Task539 — TELEFONDA ORTALI (kullanıcı). Eski `space-between`, şeridin solunda
     "Karşılaştır" düğmesi varken iki ucu ayırmak içindi; düğme Task532 ile yapışkan ikon
     sırasına taşınınca şerit tek başına sağa yaslı kalmıştı.
     Negatif sağ boşluk KALIR: başlık ✕/ikon sırası için sağda 52 px, solda 12 px dolgu
     taşıyor; -40 px bu farkı kapatır ve şerit KARTIN ortasına oturur (ölçüldü: merkez
     175 → 195 = 390/2). Sıfırlanırsa şerit 20 px sola kaçık görünüyor. */
  justify-content: center;
  margin-left: 0;
  margin-right: -40px;
  flex: 1 1 auto;
  min-width: 0;
}
/* TD kartı kardeşleriyle aynı genişlik kuralına girer; yoksa içerik kadar kalıp panelde
   kayık duruyordu (ölçüm: 366px panelde 276px, soldan 65 / sağdan 25). */
#team-head .cc {
  margin-inline: 0;
}
@media (min-width: 721px) {
  /* Sekme şeridi (Detay… Maçlar) 12 px içeriden başlar ve biter: geniş ekranda şerit de
     aynı iç boşluğu kullanır (ölçüldü: 223 ↔ 235). */
  #team-head .tf-wrap {
    /* Geniş ekranda sekme şeridi hem soldan hem sağdan 12 px + kendi iç boşluğu kadar
       içeride: ölçülen fark 24 px (1069 → 1045). Hiza Task507'deki gibi korunur. */
    justify-content: space-between;
    margin-left: 12px;
    margin-right: -28px;
  }
}
/* Etiket + beş nokta TEK GRUP: aradaki boşluk esnerken şerit dağılmaz */
.tf-line {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}
@media (max-width: 720px) {
  #team-head {
    flex-direction: column;
    align-items: stretch;
    gap: 8px;
  }
  #team-head .dt-info,
  #team-head .cc {
    margin-inline: 0;
  }
  #team-head .dt-info .mi-it {
    white-space: normal;
  }
}

/* Task089 — Kadroda oyuncu işaretleri: gol/asist/kırmızı kart avatarın SAĞ ÜSTÜNDE.
   Altta dururken oyuncunun ADINI kapatıyordu (kullanıcı bildirdi). Çoklu işaretler
   birbirinin üstüne biraz binerek yer kaplamaz; üçten fazlası "×N" ile gösterilir. */
/* Task342 — işaret KATMAN SIRASI (kullanıcı): önde GOL → asist → kart; forma numarası
   hepsinin arkasında. Küme numaranın da önünde durur. */
.lu-marks {
  z-index: 5;
  position: absolute;
  /* İşaret fotoğrafa DEĞER: dairenin dışında havada durmuyor, sağ üst köşesine oturuyor
     (kullanıcı bildirdi: "resmin dışında kaldı, sağ üstte resme dokunmalı"). */
  /* Dairenin 45° köşesi: işaretler fotoğrafa DEĞER ama üstüne binmez — kullanıcı ayarı
     (biraz daha dışarı alındı). Task342 rev — çok işaret birikince (2 gol + kart)
     fotoğrafı kapatıyordu: küme biraz daha SAĞA alındı. */
  right: -13px;
  top: -4px;
  display: inline-flex;
  align-items: flex-end;
  /* Task091 — İki işaret (gol + asist) yan yana dizilince SOLA taşıp reyting rozetini
     kapatıyordu (kullanıcı bildirdi). Artık ALT ALTA, sağ kenarda kalıyorlar. */
  flex-direction: column;
  gap: 2px;
  font-size: 13.5px;
  line-height: 1;
  white-space: nowrap;
  pointer-events: none;
}
/* Task089 — Üç işaret de AYNI kutuda, AYNI ağırlıkta ve AYNI konumda durur (kullanıcı
   dengelenmesini istedi; referans TOP'un yerleşimi). */
.lu-mk {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 18px;
  height: 18px;
  font-style: normal;
  font-size: 16px;
  line-height: 1;
  /* Aynı türden çoklu işaretler (2-3 gol) hafifçe üst üste biner */
  margin-bottom: -6px;
  filter: drop-shadow(0 1px 2px rgba(0, 0, 0, 0.6));
}
/* Asist: topla aynı görsel ağırlıkta DOLU rozet. İnce çizgili ikon yeşil sahada hiç
   görünmüyordu (kullanıcı bildirdi: "hem renk hem büyüklük olarak görünmüyor"). */
/* Asist: yeşil sahada ince çizgi kayboluyordu → beyaz daire zemin, topla aynı kutuda */
.lu-mk-as {
  border-radius: 50%;
  background: #fff;
  color: #0a7d4e;
}
.lu-mk-as svg {
  width: 12px;
  height: 12px;
}
/* Kırmızı kart: emoji değil, gerçek kart oranında CSS dikdörtgen (aynı kutu içinde) */
.lu-mk-red::before {
  content: '';
  width: 11px;
  height: 15px;
  border-radius: 2px;
  background: #e0393e;
  box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.35);
}
/* Task337 (kullanıcı) — SARI kart işareti (kırmızıyla aynı dil) */
.lu-mk-yellow::before {
  content: '';
  width: 11px;
  height: 15px;
  border-radius: 2px;
  background: #f4c542;
  box-shadow: inset 0 0 0 1px rgba(120, 90, 0, 0.35);
}
/* Task337 — İKİNCİ SARIDAN kırmızı: altta sarı, üstte sağa/yukarı kaymış kırmızı */
.lu-mk-yr {
  position: relative;
  width: 17px;
  height: 17px;
}
.lu-mk-yr::before {
  content: '';
  position: absolute;
  left: 0;
  bottom: 0;
  width: 11px;
  height: 15px;
  border-radius: 2px;
  background: #f4c542;
  box-shadow: inset 0 0 0 1px rgba(120, 90, 0, 0.35);
}
.lu-mk-yr::after {
  content: '';
  position: absolute;
  left: 5px;
  bottom: 3px;
  width: 11px;
  height: 15px;
  border-radius: 2px;
  background: #e0393e;
  box-shadow:
    inset 0 0 0 1px rgba(255, 255, 255, 0.35),
    -1px 1px 2px rgba(0, 0, 0, 0.35);
}

.lu-mk-n {
  margin-left: 1px;
  font-weight: 900;
  font-size: 9.5px;
  color: var(--text);
}
/* İşaretler üstte olduğu için ada değil DİZİLİŞE yer açılır; ad biraz aşağı iner */
.lu-pl .lu-nm {
  margin-top: 3px;
}

/* ================= Task089 — Sekme görselleri ve mobil sıkıştırma ================= */

/* Kart içindeki tam genişlik tablolar/satırlar (iç boşluk tabloya bırakılır) */
.pc-card-flush {
  padding: 0;
  overflow: hidden;
}
.pc-card-flush .ps-head,
.pc-card-flush .ps-row {
  padding-inline: 14px;
}

/* Oyuncu "Maçlar" tablosu */
.pm-tbl {
  width: 100%;
  font-size: 13px;
}
.pm-tbl th {
  font-size: 10.5px;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  font-weight: 700;
  text-align: left;
  padding: 8px 10px;
}
.pm-tbl td {
  padding: 8px 10px;
  border-top: 1px solid var(--line);
}
.pm-row {
  cursor: pointer;
}
.pm-row:hover td {
  background: var(--panel2);
}
.pm-dt,
.pm-cp {
  color: var(--muted);
  font-size: 11.5px;
  white-space: nowrap;
}
.pm-op {
  font-weight: 700;
}
.pm-sc {
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
/* Sonuç rozeti: renk + HARF (yalnız renk anlaşılmıyordu) */
.pm-res {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 15px;
  height: 15px;
  padding: 0 3px;
  border-radius: 4px;
  margin-right: 6px;
  vertical-align: middle;
  font-style: normal;
  font-size: 9.5px;
  font-weight: 900;
  color: var(--on-accent);
}
.pm-res.tf-L {
  color: #fff;
}
.pm-res.tf-x {
  display: none;
}
.pm-rt {
  text-align: right;
}

/* Takım kartı istatistik sekmesi: her sezon kendi kutusunda */
.team-season-stat {
  margin: 12px;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--panel);
  overflow: hidden;
}
.team-season-stat .ts-year {
  width: 100%;
  justify-content: space-between;
  border: 0;
  border-radius: 0;
  padding: 11px 14px;
  font-weight: 800;
}
.team-season-stat .ts-body {
  padding: 0 14px 12px;
}

/* Program: iki yönlü yükleme butonları */
.pg-more {
  display: flex;
  justify-content: center;
  padding: 8px 12px;
}

/* MOBİL: takım adlarına daha çok yer — maç detayı başlığı ve tahmin ekranı */
@media (max-width: 560px) {
  /* Takım adına yer açan üç değişiklik: başlığın iç boşluğu küçülür, armalar incelir,
     ad İKİ SATIRA sarabilir. Eskiden "Liverp…" / "Brentf…" diye kesiliyordu. */
  .dt-head .dt-score {
    padding: 0 8px;
  }
  .dt-score {
    gap: 6px;
  }
  .dt-score .dt-tm {
    min-width: 0;
    flex: 1 1 0;
    gap: 6px;
  }
  .dt-score .dt-tm > span:not(.rc-wrap) {
    min-width: 0;
    font-size: 13.5px;
    line-height: 1.15;
    white-space: normal;
    overflow-wrap: anywhere;
  }
  .dt-score .dt-tm img,
  .dt-score .dt-tm .crest {
    width: 24px;
    height: 24px;
  }
  .dt-score b {
    padding-inline: 2px;
    font-size: 19px;
  }
  /* Task089 — Dar ekranda düşen kolon: BAŞLIK ve HÜCRE birlikte gizlenir. Eskiden yalnız
     hücre gizleniyordu ve başlık satırı bir kolon fazla kalıp tabloyu KAYDIRIYORDU
     (kullanıcı bildirdi: "sezonlar tabı mobil görünümde kaydı"). */
  .tbl-hide-mob {
    display: none;
  }
  .pm-tbl th,
  .pm-tbl td {
    padding: 7px 5px;
    font-size: 12px;
  }
  /* Kenar sütunları panel çizgisine TEĞET olmaz (ilke 4): ilk/son hücreye iç boşluk */
  .pm-tbl th:first-child,
  .pm-tbl td:first-child {
    padding-left: 12px;
  }
  .pm-tbl th:last-child,
  .pm-tbl td:last-child {
    padding-right: 12px;
  }
  /* Reyting rozeti dar ekranda kolonu taşırıyordu */
  .pm-tbl .sq-rt,
  .pm-tbl .ps-n .sq-rt {
    min-width: 34px;
    padding: 2px 4px;
    font-size: 11.5px;
  }
  .pm-tbl .pm-op {
    /* Takım adı sarabilir ama satırı gereksiz uzatmasın */
    line-height: 1.15;
  }
}
/* Takım istatistik akordiyonu: başlık satırı + ok göstergesi */
.team-season-stat .ts-year {
  display: flex;
  align-items: center;
}
.ts-chev {
  display: inline-flex;
  margin-left: auto;
  transition: transform 0.15s ease;
  color: var(--muted);
}
.ts-chev svg {
  width: 16px;
  height: 16px;
}
.ts-year.ts-open .ts-chev {
  transform: rotate(180deg);
}
.ts-year.ts-open {
  border-bottom: 1px solid var(--line);
}
/* Maç satırlarında ev/deplasman işareti (@ yerine) */
.vn-mk {
  font-style: normal;
  margin-right: 5px;
  font-size: 11px;
  opacity: 0.9;
}

/* Sezon tablosu: sayı kolonları dar ve sağa hizalı (iç içe geçme biterdi) */
.pm-tbl .ps-n {
  text-align: right;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}
.pm-tbl th.ps-n {
  text-align: right;
}
.pm-tbl .ps-n .sq-rt {
  display: inline-block;
  min-width: 42px;
}
/* Task089 — `.ps-row` eskiden DIV'di ve `display:flex` alıyordu; artık tablo satırı da
   olabiliyor. Tablo bağlamında esnek düzen hücreleri üst üste bindiriyordu. */
tr.ps-row,
tr.ps-detail {
  display: table-row;
  padding: 0;
  gap: 0;
}
tr.ps-row > td {
  padding: 8px 10px;
  border-top: 1px solid var(--line);
}
tr.ps-detail > td {
  padding: 0 10px 10px;
}
tr.ps-detail.hidden {
  display: none;
}

/* ================= Task089 — Kart tabloları puan durumu ölçülerini MİRAS ALMAZ =======
   `.table` puan cetveli için yazılmıştır: `table-layout: fixed` ve her sütuna 20 px
   (son sütuna 26 px) dayatır. Oyuncu/takım kartındaki tablolar bu sınıfı paylaşınca
   sütunlar 20 px'e sıkışıp içerik üst üste biniyordu (kullanıcı: "veriler iç içe geçiyor",
   "sezonlar tabı mobilde kaydı"). Kart tabloları içeriğe göre genişler. */
.table.pc-tbl {
  table-layout: auto;
}
.table.pc-tbl th:not(.team-col),
.table.pc-tbl td:not(.team-col) {
  width: auto;
  padding-left: 10px;
  padding-right: 10px;
}
.table.pc-tbl th:last-child,
.table.pc-tbl td:last-child {
  width: auto;
}
/* Uzun rakip/takım adı kendi hücresinde sarar, komşu sütuna taşmaz */
.table.pc-tbl .pm-op,
.table.pc-tbl .pm-cp {
  overflow-wrap: anywhere;
}
.table.pc-tbl .pm-dt {
  white-space: nowrap;
}
/* Kart tablosu dar ekranda KENDİ İÇİNDE yatay kayar (sayfa yana kaymaz) */
.pc-card .admin-table-wrap {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* ================= Task089 — MOBİLDE kart tabloları LİSTE olur ======================
   Dar ekranda altı sütunlu tablo kaçınılmaz olarak sıkışıyor ve "Brighton & Hove Albion"
   beş satıra kırılıyordu (kullanıcı: "veriler birbirinin içine geçmiş, mobile özgü bir
   çözüm düşün"). Çözüm: satır TABLO OLMAKTAN ÇIKAR, iki satırlık bir kayda dönüşür —
   üstte rakip/sezon, altta etiketli sayılar, sağda reyting rozeti. */
@media (max-width: 560px) {
  .table.pc-tbl,
  .table.pc-tbl tbody,
  .table.pc-tbl tr,
  .table.pc-tbl td {
    display: block;
    width: auto;
  }
  .table.pc-tbl thead {
    display: none; /* başlık satırı liste düzeninde anlamsız — etiketler hücrede */
  }
  .table.pc-tbl tr {
    position: relative;
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    column-gap: 0;
    padding: 9px 58px 9px 12px; /* sağda reyting rozetine yer */
    border-top: 1px solid var(--line);
  }
  /* İki satır: üstte rakip/sezon, altta tarih · turnuva · skor · dakika · işaretler */
  .table.pc-tbl .pm-op {
    order: 1;
    flex: 1 0 100%;
  }
  .table.pc-tbl .pm-dt {
    order: 2;
  }
  .table.pc-tbl .pm-cp {
    order: 3;
  }
  .table.pc-tbl .pm-sc {
    order: 4;
  }
  .table.pc-tbl .pm-mn {
    order: 5;
  }
  .table.pc-tbl .pm-mk {
    order: 6;
  }
  /* Tarih MOBİLDE kısalır: "24 May 2026" → "24 May" (yıl sezondan zaten belli).
     Kullanıcı isteği: yana kaydırmak yerine biçim sadeleşsin. */
  .table.pc-tbl .pm-dt[data-short] {
    font-size: 0;
  }
  .table.pc-tbl .pm-dt[data-short]::before {
    content: attr(data-short);
    font-size: 12px;
  }
  .table.pc-tbl tbody tr:first-child {
    border-top: 0;
  }
  .table.pc-tbl td {
    padding: 0;
    border: 0;
    font-size: 12px;
    color: var(--muted);
  }
  /* 1. satır: rakip / takım adı */
  .table.pc-tbl .pm-op {
    font-size: 13.5px;
    font-weight: 800;
    color: var(--text);
    margin-bottom: 2px;
    overflow-wrap: normal;
    text-align: left;
  }
  /* 2. satır: tarih · turnuva · skor · dakika · işaretler — hepsi yan yana akar */
  .table.pc-tbl .pm-dt,
  .table.pc-tbl .pm-cp,
  .table.pc-tbl .pm-sc,
  .table.pc-tbl .pm-mn,
  .table.pc-tbl .pm-mk,
  .table.pc-tbl .ps-n {
    display: inline-block;
    vertical-align: middle;
    text-align: left;
  }
  /* Ayraç: ilk parçadan sonrakilerin önüne nokta konur */
  .table.pc-tbl .pm-sc::before,
  .table.pc-tbl .pm-mn::before,
  .table.pc-tbl .pm-cp::before {
    content: '·';
    margin: 0 5px;
    opacity: 0.6;
  }
  .table.pc-tbl .pm-mk {
    margin-left: 6px;
  }
  /* Sayı hücreleri etiketleriyle okunur: "38 maç · 1 ⚽ · 1 A" */
  .table.pc-tbl .ps-n::after {
    content: ' ' attr(data-lbl);
    margin-left: 3px;
  }
  .table.pc-tbl .ps-n + .ps-n::before {
    content: '·';
    margin: 0 5px;
    opacity: 0.6;
  }
  /* Reyting rozeti satırın sağında sabit. NOT: "son kolon" varsayımı YANLIŞTI —
     sezonlar tablosunda son kolon ASİST ve sağa uçuyordu (kullanıcı bildirdi).
     Artık yalnız gerçekten rozet taşıyan hücre sabitlenir. */
  .table.pc-tbl .pm-rt,
  .table.pc-tbl .ps-n:has(.sq-rt) {
    position: absolute;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
    text-align: right;
  }
  .table.pc-tbl .ps-n:has(.sq-rt)::after,
  .table.pc-tbl .ps-n:has(.sq-rt)::before {
    content: none; /* reyting rozetinde etiket/ayraç olmaz */
  }
  /* Detay satırı (arşiv sezon istatistiği) tam genişlik kalır */
  .table.pc-tbl tr.ps-detail {
    padding: 0 12px 10px;
  }
  /* Dar ekranda düşen kolon kuralı liste düzeninde de geçerli olmalı: yukarıdaki
     `display:inline-block` kuralları daha yüksek özgüllükte olduğu için burada yeniden
     yazılır (aksi hâlde turnuva adı satırı ÜÇÜNCÜ satıra taşıyordu). */
  .table.pc-tbl .tbl-hide-mob {
    display: none;
  }
}
/* Task089 — Takım bağlantısı dokunma alanı: mobilde ad çok küçük bir hedefti ve dokunuş
   maç kartına gidiyordu. Arma da bağlantı; ikisinde de dokunma gecikmesi kapatıldı. */
.tn-link {
  touch-action: manipulation;
}
.tn-crest {
  display: inline-flex;
  align-items: center;
  cursor: pointer;
}
/* Task496 — SADE satırda takım kartına giden tek yol ARMADIR (ad maç detayını açar).
   Arma görseli 17 px; dokunma alanı görüntüyü büyütmeden genişletilir (negatif boşlukla
   yerleşim hiç kaymaz) — parmakla 17 px hedefe basmak kabul edilemez. */
.cd-compact .live-card .tn-crest {
  padding: 6px;
  margin: -6px;
  border-radius: 50%;
}
@media (hover: hover) {
  .cd-compact .live-card .tn-crest:hover {
    background: var(--panel2);
  }
}
/* Task089 — Takım programında SIRADAKİ maç: vurgulu çerçeve + etiket */
.pg-next {
  position: relative;
  border: 1px solid var(--accent);
  border-radius: 12px;
  background: color-mix(in srgb, var(--accent) 8%, transparent);
  margin: 18px 2px 8px;
  padding-top: 6px;
}
.pg-next-lbl {
  position: absolute;
  top: -9px;
  left: 12px;
  padding: 1px 8px;
  border-radius: 999px;
  background: var(--accent);
  color: var(--on-accent);
  font-size: 10px;
  font-weight: 900;
  letter-spacing: 0.2px;
}
.pg-next .gmatch {
  background: transparent;
}

/* ================= Task090 — Web lig düzeni: solda cetvel, sağda sekmeli sütun ======= */
#league-right {
  display: flex;
  flex-direction: column;
  gap: 12px;
  min-width: 0;
}
/* Sağ sütun sekme çubuğu yalnız GENİŞ ekranda; dar ekranda üstteki üçlü sekme yönetir */
.lr-tabs {
  display: none;
}
@media (min-width: 980px) {
  .lr-tabs {
    display: flex;
    gap: 4px;
    padding: 4px;
    background: var(--panel2);
    border: 1px solid var(--line);
    border-radius: 13px;
  }
  .lr-tabs .dt-tab {
    flex: 1;
    text-align: center;
    padding: 9px 4px;
    border: 0;
    border-radius: 9px;
  }
  /* Geniş ekranda görünürlüğü .lp-active belirler (sol cetvel her zaman açık) */
  .league-pane {
    display: none;
  }
  .league-pane.lp-active {
    display: block;
  }
  /* Task301 (kullanıcı) — cetvel kendi içinde KAYDIRMAZ: yapışkanlık + yükseklik sınırı
     kaldırıldı, uzun tablo sayfayla akar (20 takım + lejant + eşitlik satırı tam görünür). */
}
/* Task091 — Sağ sütun başlığı: lig logosu + adı + sezon seçimi (yalnız geniş ekran) */
.lr-head {
  display: none;
}
@media (min-width: 980px) {
  .lr-head {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 0 4px;
  }
  .lr-head .lr-name {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-size: 17px;
    font-weight: 900;
  }
  .lr-head .comp-logo {
    width: 22px;
    height: 22px;
  }
  /* Sezon seçimi lig adının HEMEN SAĞINDA (sağa yaslanmaz — kullanıcı kararı) */
  .lr-head .season-select {
    margin-left: 4px;
  }
  /* Fikstür başlığındaki hafta gezinmesi sezon seçimi gidince sağa yaslanır */
  #fixtures-section .week-nav {
    margin-left: auto;
  }
}

/* ================= Task091 — İstatistik paneli: kategori + metrik + değer çubuğu ===== */
/* Kategori şeridi METRİK ŞERİDİYLE aynı görünür ve aynı davranır (kullanıcı kararı):
   aynı çip stili, aynı kaydırma ipucu. Ayrı bir görsel dil icat edilmez. */
.st-cats {
  display: flex;
  gap: 6px;
  overflow-x: auto;
  padding: 2px 0 6px;
  scrollbar-width: none;
}
.st-cats::-webkit-scrollbar {
  display: none;
}
.st-cats.scrollable {
  justify-content: flex-start;
}
.st-chip.st-per90 {
  margin-left: 6px;
  border-color: var(--gold);
  color: var(--gold);
}
.st-chip.st-per90.active {
  background: var(--gold);
  color: #1a1200;
}
.st-season {
  margin: 2px 0 8px;
  font-size: 11px;
  color: var(--muted);
}
/* Değer çubuğu: sayı tek başına anlamsız, listedeki en yüksek değere göre bağlam verir */
.st-row .st-bar {
  flex: 1 1 auto;
  min-width: 24px;
  height: 5px;
  margin: 0 8px;
  border-radius: 999px;
  background: var(--panel2);
  overflow: hidden;
}
.st-row .st-bar i {
  display: block;
  height: 100%;
  background: var(--accent);
  border-radius: 999px;
}
@media (max-width: 560px) {
  .st-row .st-bar {
    display: none; /* dar ekranda ad ve değere yer aç */
  }
}
/* 90 dk anahtarı + sezon notu aynı satırda (metrik şeridi kaydırınca kaybolmasın) */
/* Task501 — mevki hattı süzgeci: metrik şeridinin altında, aynı çip dili, tek satır.
   Dar ekranda yatay kaydırılır (beş çip 390 px'e sığmayabilir). */
.st-pos {
  display: flex;
  gap: 6px;
  margin: 6px 0 0;
  overflow-x: auto;
  scrollbar-width: none;
}
.st-pos::-webkit-scrollbar {
  display: none;
}
.st-poschip {
  flex: none;
}
/* Dar ekranda beş hat çipi tek satırda kalsın (ölçüldü: 390 px'te 9 px taşıyordu) */
@media (max-width: 430px) {
  .st-pos {
    gap: 5px;
  }
  .st-poschip {
    padding: 4px 8px;
  }
}
.st-note {
  color: var(--muted);
  font-size: 11px;
}
.st-subrow {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 6px 0 4px;
}
.st-subrow .st-season {
  margin: 0;
}
.st-subrow .st-per90 {
  margin-left: auto;
}
/* Kategori şeridi: metrik şeridiyle AYNI kenar solması (aynı desen, tek kaynak) */
.st-cats.has-more {
  -webkit-mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
  mask-image: linear-gradient(90deg, #000 0, #000 calc(100% - 40px), transparent);
}
.st-cats.has-prev {
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 40px);
  mask-image: linear-gradient(90deg, transparent, #000 40px);
}
.st-cats.has-prev.has-more {
  -webkit-mask-image: linear-gradient(
    90deg,
    transparent,
    #000 40px,
    #000 calc(100% - 40px),
    transparent
  );
  mask-image: linear-gradient(90deg, transparent, #000 40px, #000 calc(100% - 40px), transparent);
}
.st-cats {
  justify-content: safe center;
}
/* Task091 — GENİŞ ekranda metrik/kategori şeritleri KAYDIRMAZ, satır atlar: kaydırmalı
   şeritte kenardaki çipler erişilemiyordu (kullanıcı bildirdi: "3. sıra butonların
   bazılarına tıklayamıyorum"). Mobilde kaydırma korunur — orada parmakla kaydırmak doğal. */
@media (min-width: 980px) {
  .st-metrics,
  .st-cats {
    flex-wrap: wrap;
    overflow-x: visible;
    justify-content: center;
    -webkit-mask-image: none;
    mask-image: none;
    row-gap: 6px;
  }
}
/* Task091 — İstatistik satırı tıklanabilir: oyuncu/takım kartını açar (kullanıcı istedi) */
.st-row-link {
  cursor: pointer;
  border-radius: 8px;
}
.st-row-link:hover,
.st-row-link:focus-visible {
  background: color-mix(in srgb, var(--accent) 12%, transparent);
  outline: none;
}
.st-row-link:focus-visible {
  box-shadow: 0 0 0 2px var(--accent);
}

/* ==========================================================================
   Task093 — Banner araması + Favoriler merkezi
   ========================================================================== */
/* Arama: webde banner içinde kutu; MOBİLDE büyüteç → tam genişlik katman
   (banner dar, kutu sığmıyor — kullanıcı uyarısı). */
.search-wrap {
  position: relative;
  display: flex;
  align-items: center;
  margin-left: auto;
  margin-right: 6px;
}
.search-ico {
  width: 17px;
  height: 17px;
  flex: none;
  display: inline-block;
  background: currentColor;
  -webkit-mask: var(--search-mask) center / contain no-repeat;
  mask: var(--search-mask) center / contain no-repeat;
}
:root {
  --search-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round'><circle cx='11' cy='11' r='7'/><path d='M20 20l-3.5-3.5'/></svg>");
}
.search-open {
  display: none;
  padding: 7px 9px;
  color: var(--text);
}
.search-box {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  min-width: 210px;
  border: 1px solid var(--line2);
  border-radius: 999px;
  background: color-mix(in srgb, var(--panel) 70%, transparent);
  color: var(--muted);
}
.search-box:focus-within {
  border-color: var(--accent);
  color: var(--text);
}
.search-input {
  flex: 1;
  min-width: 0;
  border: 0;
  background: none;
  color: var(--text);
  font: inherit;
  font-size: 13px;
  outline: none;
}
.search-input::-webkit-search-cancel-button {
  display: none;
}
.search-close {
  display: none;
  border: 0;
  background: none;
  color: var(--muted);
  cursor: pointer;
  font-size: 15px;
  line-height: 1;
}
.search-results {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  width: min(380px, calc(100vw - 24px));
  max-height: min(70vh, 520px);
  overflow-y: auto;
  z-index: 60;
  padding: 6px;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--panel);
  box-shadow: 0 18px 44px rgba(0, 0, 0, 0.45);
}
.sr-head {
  padding: 8px 8px 4px;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--muted);
}
.sr-item {
  display: flex;
  align-items: center;
  gap: 4px;
  padding-right: 4px;
  border-radius: 10px;
}
.sr-item:hover {
  background: color-mix(in srgb, var(--accent) 10%, transparent);
}
.adv-row,
/* Task502 — karşılaştırma arama satırı ANA ARAMAYLA aynı görsel dili paylaşır; sınıf adı
   ayrıdır (ana aramanın tıklama yakalayıcısına yakalanmasın diye). */
.sr-row,
.cmp-sr {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 9px;
  padding: 8px;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
  border-radius: 10px;
}
.sr-row.active {
  background: color-mix(in srgb, var(--accent) 16%, transparent);
}
.sr-img {
  width: 26px;
  height: 26px;
  object-fit: contain;
  flex: none;
}
.sr-av {
  border-radius: 50%;
  object-fit: cover;
}
.sr-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--panel2);
  font-weight: 800;
  font-size: 12px;
  color: var(--muted);
}
.sr-txt {
  min-width: 0;
  display: flex;
  flex-direction: column;
  line-height: 1.25;
}
.sr-txt b {
  font-size: 13.5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sr-txt span {
  font-size: 11.5px;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.sr-empty {
  margin: 0;
  padding: 14px 10px;
  text-align: center;
  color: var(--muted);
  font-size: 12.5px;
}
/* Favori yıldızı — üç tipte de aynı düğme */
.fav-star {
  border: 0;
  background: none;
  color: color-mix(in srgb, var(--text) 55%, transparent);
  cursor: pointer;
  padding: 7px;
  line-height: 0;
  border-radius: 50%;
  transition:
    color 0.12s,
    transform 0.1s;
}
.fav-star.on {
  color: var(--gold);
}
.fav-star.on svg {
  fill: currentColor;
}
@media (hover: hover) {
  .fav-star:hover {
    color: var(--gold);
    transform: scale(1.1);
  }
}
.fav-star.fav-lg svg {
  width: 20px;
  height: 20px;
}
/* Mobil: banner'da yalnız büyüteç, açılınca tam genişlik katman */
@media (max-width: 720px) {
  .search-open {
    display: inline-flex;
  }
  .search-box {
    display: none;
  }
  .search-wrap.open {
    position: static;
  }
  .search-wrap.open .search-box {
    position: fixed;
    /* Task225 — `viewport-fit=cover` sayfayı durum çubuğunun altına yayıyor; sabit 8px
       kutuyu çentiğin arkasına sokuyordu (kullanıcı: "yarısı kameranın arkasında").
       Task518 (kullanıcı: "arama kutucuğu açıldığında alttan logolar görünüyor, açılmış
       hali biraz yukarı alınabilirse daha estetik durur") — kutu ve liste yukarı çekildi,
       aradaki 16 px'lik şerit 8 px'e indi: arkadaki banner sızmıyor.
       rev (kullanıcı: "çok az daha yukarı alınabilir") — 5 → 2 px. Çentikli cihazda
       güvenli alan (`--sat`) hâlâ ekleniyor, kutu durum çubuğunun altına girmiyor. */
    top: calc(2px + var(--sat));
    left: calc(10px + var(--sal));
    right: calc(10px + var(--sar));
    z-index: 80;
    display: flex;
    min-width: 0;
    background: var(--panel);
    border-color: var(--accent);
    padding: 9px 12px;
  }
  .search-wrap.open .search-close {
    display: inline-block;
  }
  .search-wrap.open .search-results {
    position: fixed;
    top: calc(44px + var(--sat));
    left: calc(10px + var(--sal));
    right: calc(10px + var(--sar));
    width: auto;
    /* Sonuç listesi alt menüye ve ev göstergesine de girmesin */
    max-height: calc(100vh - 66px - var(--sat) - var(--sab));
  }
  .search-wrap.open .search-open {
    visibility: hidden;
  }
}
/* --- Favoriler merkezi --- */
#favs-page {
  display: block;
}
.fv-top {
  padding: 4px 4px 10px;
}
.fv-title {
  margin: 0;
  font-size: 19px;
  letter-spacing: -0.2px;
}
.fv-group {
  margin-bottom: 12px;
}
.fv-group .group-head h2 {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 14px;
}
.fv-count {
  margin-left: auto;
  font-size: 12px;
  font-weight: 800;
  color: var(--muted);
  background: var(--panel2);
  border-radius: 999px;
  padding: 2px 9px;
}
.fv-list {
  display: flex;
  flex-direction: column;
  padding: 4px 10px 10px;
}
.fv-row {
  position: relative;
  display: flex;
  align-items: center;
  gap: 6px;
  flex-wrap: wrap;
  padding: 6px 0;
  border-bottom: 1px solid var(--line);
}
.fv-row:last-child {
  border-bottom: 0;
}
.fv-main {
  flex: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 4px 6px;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
  border-radius: 10px;
}
.fv-main:hover {
  background: color-mix(in srgb, var(--accent) 10%, transparent);
}
.fv-img {
  width: 30px;
  height: 30px;
  object-fit: contain;
  flex: none;
}
.fv-av {
  border-radius: 50%;
  object-fit: cover;
}
.fv-txt {
  min-width: 0;
  display: flex;
  flex-direction: column;
  line-height: 1.25;
}
.fv-txt b {
  font-size: 14px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.fv-txt span {
  font-size: 11.5px;
  color: var(--muted);
}
.fv-acts {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  flex: none;
}
.fv-bell {
  position: relative;
  border: 0;
  background: none;
  color: color-mix(in srgb, var(--text) 62%, transparent);
  cursor: pointer;
  padding: 7px;
  line-height: 0;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.fv-bell i {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 800;
  line-height: 1;
}
/* Hover YALNIZ fare cihazlarında: dokunmatikte "yapışkan hover" rengi kalıyor ve
   kullanıcı bildirimi hâlâ açık sanıyordu (kullanıcı bildirdi). Aynı ders `wstar`da
   Task043'te öğrenilmişti — burada tekrarlanmış. */
@media (hover: hover) {
  .fv-bell:hover {
    color: var(--gold);
  }
}
/* Anlamlı durumlar: panel AÇIK (vurgu rengi) · özel bildirim seçimi var (altın) */
.fv-bell.acik {
  color: var(--accent);
}
.fv-bell.ozel {
  color: var(--gold);
}
.fv-notify {
  flex-basis: 100%;
  padding: 6px 2px 8px;
}
.fn-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.fn-chip {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 11px;
  border: 1px solid var(--line2);
  border-radius: 999px;
  font-size: 12px;
  font-weight: 700;
  color: var(--muted);
  cursor: pointer;
}
.fn-chip.on {
  border-color: var(--accent);
  color: var(--text);
  background: color-mix(in srgb, var(--accent) 14%, transparent);
}
/* Task094 — Kutucuk TEMA UYUMLU çizilir: yerel (native) onay kutusu koyu temada
   bembeyaz görünüyordu (kullanıcı bildirdi). `accent-color` yalnız işaretli hâli
   boyuyor, kutunun zeminini değil — bu yüzden kutu tamamen kendimiz çiziliyor. */
.fn-chip input {
  appearance: none;
  -webkit-appearance: none;
  margin: 0;
  width: 15px;
  height: 15px;
  flex: none;
  position: relative;
  border: 1.5px solid var(--line2);
  border-radius: 4px;
  background: color-mix(in srgb, var(--panel2) 80%, transparent);
  cursor: pointer;
  transition:
    background 0.12s,
    border-color 0.12s;
}
.fn-chip input:checked {
  background: var(--accent);
  border-color: var(--accent);
}
.fn-chip input:checked::after {
  content: '';
  position: absolute;
  left: 4.5px;
  top: 1px;
  width: 3.5px;
  height: 8px;
  border: solid var(--bg);
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.fn-chip input:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}
.fn-hint {
  margin: 6px 2px 0;
  font-size: 11px;
  color: var(--muted);
}
.fv-empty p,
.fv-hint {
  margin: 0;
  padding: 16px;
  color: var(--muted);
  font-size: 13px;
  text-align: center;
}

/* ==========================================================================
   Task094 — Mobilde odaklanınca sayfa BÜYÜMESİN
   ==========================================================================
   iOS Safari, yazı boyutu 16 px'in ALTINDA olan bir alana odaklanınca sayfayı otomatik
   yakınlaştırır; büyüyen sayfa ekrandan taşar ve parmakla sağa sola kayar (kullanıcı
   bildirdi: "aramaya tıklayınca sayfa büyüyor, ekrandan taşıyor"). Ölçüldü — bütün
   alanlar 16 px altındaydı (arama 13, giriş 15, iletişim 14, sezon 11 px).
   İSTİSNA YOK: kural tüm alanları kapsar ki sonradan eklenen alan da korunsun.
   Kutu ölçüsü padding ile korunur; `maximum-scale` ile yakınlaştırmayı kapatmak
   erişilebilirliği bozacağı için TERCİH EDİLMEDİ. */
/* Task597 (kullanıcı kararı: "zoom engellemeyi yapalım") — uygulama-benzeri deneyim:
   pinch ve çift dokunuş yakınlaştırması kapalı. Viewport'ta `maximum-scale=1,
   user-scalable=no` (Android/TWA); `touch-action: manipulation` çift dokunuşu her yerde
   keser (iOS dahil). Bilinçli takas: WCAG 1.4.4 (büyütememe). Girdi odak zoom'u zaten
   aşağıdaki 16px kuralıyla engelli. */
html,
body {
  touch-action: manipulation;
}

@media (max-width: 860px) {
  /* `!important`: bu bir ERİŞİLEBİLİRLİK/kullanılabilirlik güvenlik ağı — her bileşenin
     kendi `font-size`'ı (`.search-input` 13 px, `.season-select` 11 px…) bu kuralı
     eziyordu ve yakınlaştırma geri geliyordu (ölçüldü). Kural tek yerde, istisnasız. */
  input,
  select,
  textarea {
    font-size: 16px !important;
  }
  .search-input {
    padding: 2px 0;
  }
  /* Task102 — Mobilde yazı tipi 16px'e çıkıyor (iOS yakınlaştırma önlemi) ama kutu 96px
     kalıyordu: "2026-27" + tarayıcının ok simgesi sığmıyor, metin kırpılıyordu
     (kullanıcı bildirdi). Kutu metin + ok kadar genişletildi. */
  .season-select {
    padding: 3px 8px;
    max-width: 124px;
  }
  .pick-opts .day-btn,
  .day-btn {
    font-size: 12.5px; /* butonlar kuralın dışında — yalnız form alanları büyür */
  }
}
/* Yatay taşma güvenlik ağı: `hidden` DEĞİL `clip` — `hidden` sticky başlıkları bozuyor
   (puan durumu ve lig sekmeleri sticky). Kasıtlı yatay şeritler etkilenmez. */
html {
  overscroll-behavior-x: none;
}
body {
  overflow-x: clip;
  max-width: 100%;
}

/* Task094 — Yetenek puanları (100 üzerinden): radar "ne kadar"ı göz kararı bırakıyordu */
.rd-list {
  display: flex;
  flex-direction: column;
  gap: 5px;
  margin: 6px 6px 2px;
}
.rd-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 90px 30px;
  align-items: center;
  gap: 8px;
  font-size: 12.5px;
}
.rd-name {
  color: var(--muted);
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rd-bar {
  height: 6px;
  border-radius: 999px;
  background: var(--panel2);
  overflow: hidden;
}
.rd-bar i {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: var(--accent);
}
.rd-val {
  text-align: right;
  font-variant-numeric: tabular-nums;
  font-weight: 900;
}
/* KENDİ sınıfları — `rt-*` reyting ROZETİ stilleri (zeminli kutu) buraya sızıyordu ve
   sayı barın üstünde kutu gibi görünüyordu (ölçüldü). */
.rd-val.rd-good {
  color: var(--green);
}
.rd-val.rd-mid {
  color: var(--text);
}
.rd-val.rd-low {
  color: var(--muted);
}
@media (max-width: 430px) {
  .rd-row {
    grid-template-columns: minmax(0, 1fr) 64px 28px;
  }
}

/* Task094 — Alt bilgi: üç bağlantı TEK satırda, aynı görsel dilde (kullanıcı isteği:
   "iki satır görünmesin, yanyana olabilir, X'te hesap adı gerekmez"). */
.foot-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 8px;
  margin-bottom: 12px;
}
.foot-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  /* Üçü AYNI yükseklikte: 𝕏 glifinin metrikleri farklı olduğu için pill'ler kayıyordu
     (kullanıcı bildirdi). Yükseklik sabit, içerik dikeyde ortalı. */
  height: 30px;
  box-sizing: border-box;
  line-height: 1;
  padding: 0 14px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: transparent;
  color: var(--muted);
  font-size: 11.5px;
  font-weight: 700;
  text-decoration: none;
  cursor: pointer;
  transition:
    color 0.14s,
    border-color 0.14s;
}
/* Task233 — Bilgi düğmesi metinsiz ve X bağlantısıyla AYNI ölçüde: yuvarlak, sabit
   genişlik (X 30px yüksekliğinde bir pill; burada da 30×30 kare/daire). */
#disclaimer-btn {
  /* 34px: X bağlantısının ÖLÇÜLEN genişliği (30px'te 4px dar kalıyordu). */
  width: 34px;
  padding: 0;
  gap: 0;
}
.foot-link svg {
  width: 14px;
  height: 14px;
  flex: none;
}
/* Etiket tek bir span içinde (ikon + metin): boşluk ORADA kurulmalı, yoksa yapışıyor */
.foot-link > span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}
/* X pill'i simge kadar: yuvarlak ve dar */
#x-link {
  width: 34px;
  padding: 0;
  font-size: 14px;
}
.foot-link:hover,
.foot-link:focus-visible {
  color: var(--accent);
  border-color: var(--accent);
}

/* Task094'te buradaki `position: fixed` çözümü vardı; Task102'de KALDIRILDI: banner
   (z-90) butonu (z-70) örtüyordu, mobilde buton hiç görünmüyordu. Yerine akış içinde
   yapışkan `.pv-bar` geldi (bkz. yukarısı). Mobilde dokunma kutusu biraz büyür. */
@media (max-width: 860px) {
  #player-page .page-back,
  #team-page .page-back,
  #profile-page .page-back {
    width: 38px;
    height: 38px;
    /* Negatif alt boşluk BUTON YÜKSEKLİĞİ kadar olmalı; yoksa satır kapatır */
    margin-bottom: -38px;
  }
}

/* Task094 — Oyuncu/takım kartındaki sekme şeridi panel çizgisine DAYANMASIN (ilke 4).
   Kart içi bölümler kenardan aynı boşlukta dursun diye şeride yatay padding verilir;
   `.tm-head`/`.tm-body` de kartın kenarına yapışmaz. */
#player-page .dt-tabs,
#team-page .dt-tabs,
#player-page .tm-head,
#team-page .tm-head,
#player-page .tm-body,
#team-page .tm-body {
  padding-inline: 12px;
}
/* Task102 — Kapatma butonu (✕) satır kaplamıyor, köşeye biniyor: BAŞLIK ona yer açar,
   yoksa logo/fotoğraf butonun altında kalır (web'de tam bu olmuştu — bu kural Task094'te
   `padding-inline` ile sessizce eziliyordu, o yüzden ayrı ve sonra).
   Task208 — buton SAĞA alındı; ayrılan yer de sağa geçti (kullanıcı: "sağa kayınca bir
   nesneyi kapatmamalı"). */
#team-page .tm-head,
#player-page .tm-head,
#profile-page .tm-head {
  padding-right: 52px;
}
/* Kart içindeki bölümler (pc-card) zaten kendi kenar boşluğunu taşıyor: iki kez
   uygulanmasın diye yatay kenar boşlukları sıfırlanır. */
#player-page .tm-body > .pc-card,
#team-page .tm-body > .pc-card,
#player-page .tm-body > .ss-card,
#team-page .tm-body > .ss-card,
#player-page .dt-pane > .pc-card,
#team-page .dt-pane > .pc-card {
  margin-inline: 0;
}

/* ==========================================================================
   Task094 — Kart künyeleri ve mobil liste satırları
   ========================================================================== */
/* Künye: her bilgi KENDİ kutusunda, aralarında nokta. Düz metin " · " ile
   birleştirilince mobilde satır bilginin ORTASINDAN bölünüyordu ("🎂 26 yaş · 21 Tem" /
   "2000 · 🇳🇴 Norveç"). Kutular sarar, kendi içinde bölünmez. Web görünümü değişmez:
   aynı satırda, aynı ayraçla. */
.pp-bio {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  column-gap: 6px;
  row-gap: 3px;
}
/* Task309 — .dt-info bu listeden ÇIKTI: künye artık iki sütunlu ızgara (stad ve hakem
   yan yana — kullanıcı isteği); buradaki flex kuralı ızgarayı eziyordu (ölçüldü). */
.pp-bio .bio-i,
.dt-info .mi-it {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  white-space: nowrap;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
}
/* Ayraç noktası YOK: sarılan satır "·" ile başlıyordu (ölçüldü, kötü görünüyor).
   Kutular arası boşluk ve emoji ön eki zaten ayırıyor. */
.pp-bio,
.dt-info {
  column-gap: 12px;
}
@media (max-width: 560px) {
  /* Uzun künyelerde (stadyum + kapasite) kutu sarabilsin, taşmasın */
  .dt-info .mi-it {
    white-space: normal;
    overflow-wrap: anywhere;
  }
}

/* --- Mobil liste satırı: İKİ SATIRLIK sabit düzen ---------------------------
   Eskiden hücreler yan yana akıyordu ve nereye sarılacağı içeriğe kalıyordu:
   "36 Maç · 27 ⚽ · 8 A 2025-26" / "· Premier League" gibi dağınık sonuçlar çıkıyordu
   (kullanıcı bildirdi). Artık düzen sabit:
     1. satır → BAĞLAM (sezon/tarih + lig/rakip), sağda rozet
     2. satır → SAYILAR (etiketli, aynı sırada)                                */
@media (max-width: 700px) {
  .table.pc-tbl tbody tr.ps-row,
  .table.pc-tbl tbody tr.pm-row,
  .table.pc-tbl tbody tr.mrow {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    column-gap: 8px;
    row-gap: 2px;
    padding: 9px 58px 9px 12px; /* sağda rozet için yer */
  }
  /* 1. satır */
  .table.pc-tbl tbody tr.ps-row > .pm-dt,
  .table.pc-tbl tbody tr.pm-row > .pm-dt,
  .table.pc-tbl tbody tr.mrow > .pm-dt {
    order: 1;
    flex: none;
    font-weight: 800;
    color: var(--text);
  }
  .table.pc-tbl tbody tr.ps-row > .pm-cp,
  .table.pc-tbl tbody tr.pm-row > .pm-cp,
  .table.pc-tbl tbody tr.pm-row > .pm-op,
  .table.pc-tbl tbody tr.ps-row > .pm-op,
  .table.pc-tbl tbody tr.mrow > .pm-cp,
  .table.pc-tbl tbody tr.mrow > .pm-op {
    order: 2;
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .table.pc-tbl tbody tr.pm-row > .pm-sc {
    order: 3;
    flex: none;
    font-weight: 700;
  }
  /* satır kırma: sayılar HER ZAMAN ikinci satırda başlar */
  .table.pc-tbl tbody tr.ps-row::after,
  .table.pc-tbl tbody tr.pm-row::after,
  .table.pc-tbl tbody tr.mrow::after {
    content: '';
    order: 4;
    flex-basis: 100%;
    height: 0;
  }
  /* 2. satır: etiketli sayılar */
  .table.pc-tbl tbody tr.ps-row > .ps-n,
  .table.pc-tbl tbody tr.pm-row > .ps-n,
  .table.pc-tbl tbody tr.mrow > .ps-n,
  .table.pc-tbl tbody tr.pm-row > .pm-mn,
  .table.pc-tbl tbody tr.pm-row > .pm-mk {
    order: 5;
    flex: none;
    color: var(--muted);
    font-size: 11.5px;
  }
  .table.pc-tbl tbody tr.ps-row > .ps-n::after,
  .table.pc-tbl tbody tr.pm-row > .ps-n::after,
  .table.pc-tbl tbody tr.mrow > .ps-n::after {
    content: ' ' attr(data-lbl);
    margin-left: 3px;
    opacity: 0.85;
  }
  /* Ayraç noktaları KALDIRILDI: iki satırlı düzende gereksiz gürültü yapıyordu */
  .table.pc-tbl tbody tr .ps-n + .ps-n::before,
  .table.pc-tbl tbody tr .pm-sc::before,
  .table.pc-tbl tbody tr .pm-mn::before,
  .table.pc-tbl tbody tr .pm-cp::before {
    content: none;
    margin: 0;
  }
  /* Rozet (reyting) sağda dikeyde ortalı — iki satırın hizasında */
  /* YALNIZ reyting rozeti sağa sabitlenir. "son kolon" kuralı asistleri de sağa
     uçuruyordu (ölçüldü: sezonlar tablosunda son kolon asist). */
  .table.pc-tbl tbody tr > .pm-rt,
  .table.pc-tbl tbody tr > .ps-n:has(.sq-rt) {
    position: absolute;
    right: 12px;
    top: 50%;
    transform: translateY(-50%);
    order: 0;
  }
  .table.pc-tbl tbody tr.ps-row,
  .table.pc-tbl tbody tr.pm-row,
  .table.pc-tbl tbody tr.mrow {
    position: relative;
  }
}

/* Task094 — Profildeki favori kartlarında görsel boyutu SABİT: oyuncu fotoğrafı ve lig
   logosu stilsiz kalınca kartı taşırıyordu (ölçüldü). Takım armasıyla aynı ölçü. */
.fav-team-card .rule-name {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.fav-team-card .rule-name > img,
.fav-team-card .rule-name .comp-logo,
.fav-team-card .rule-name .crest,
.fav-team-card .fav-av {
  width: 26px;
  height: 26px;
  flex: none;
  object-fit: contain;
}
.fav-team-card .fav-av {
  border-radius: 50%;
  object-fit: cover;
}

/* Task094 — Takım sezon paneli: ham döküm yerine anlamlı bölümler */
.ts-panel {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding: 4px 2px 2px;
}
.ts-sec > h4 {
  margin: 0 0 8px;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: var(--muted);
}
.ts-wdl {
  display: flex;
  gap: 8px;
  margin-bottom: 10px;
}
.ts-wdl span {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 8px 4px;
  border-radius: 10px;
  font-size: 19px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.ts-wdl i {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--muted);
}
.ts-wdl .ts-w {
  color: var(--green);
  border-color: color-mix(in srgb, var(--green) 45%, transparent);
}
.ts-wdl .ts-d {
  color: var(--text);
}
.ts-wdl .ts-l {
  color: var(--red);
  border-color: color-mix(in srgb, var(--red) 40%, transparent);
}
.ts-split {
  margin-top: 10px;
}
.ts-split-bar {
  height: 8px;
  border-radius: 999px;
  overflow: hidden;
  background: var(--gold);
}
.ts-split-bar i {
  display: block;
  height: 100%;
  background: var(--accent);
}
.ts-split-lbl {
  display: flex;
  justify-content: space-between;
  margin-top: 4px;
  font-size: 11.5px;
  color: var(--muted);
}
.ts-split-lbl b {
  color: var(--text);
  font-variant-numeric: tabular-nums;
}

/* Task094 — Maç detayında takım adlarının altında "maça girerken form" (son 5).
   Rozetler küçük ve sabit ölçüde: mobilde skor satırını ve takım adlarını bozmaz. */
.dt-form {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin: 2px 10px 6px;
}
.fm-side {
  display: inline-flex;
  gap: 3px;
  flex: 1;
}
.fm-side.fm-right {
  justify-content: flex-end;
}
/* Task102 — Şerit yönünü anlatan tek yer burası; 9,5px + %80 opaklıkta okunmuyordu
   (kullanıcı yönü göremeyip vurgulu rozeti sordu). Punto ve kontrast artırıldı. */
.fm-cap {
  flex: none;
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  color: var(--muted);
  white-space: nowrap;
}
.fm-dot {
  width: 16px;
  height: 16px;
  border-radius: 5px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-style: normal;
  font-size: 9.5px;
  font-weight: 900;
  color: var(--on-accent);
  background: var(--muted);
}
.fm-dot.fm-w {
  background: var(--green);
}
.fm-dot.fm-d {
  background: var(--line2);
  color: var(--text);
}
.fm-dot.fm-l {
  background: var(--red);
  color: #2a0508;
}
/* EN YENİ maç vurgulu: dizinin hangi ucunun güncel olduğu bir bakışta anlaşılsın.
   Task102 — BÜYÜTME kaldırıldı (kullanıcı "biri daha büyük, bu ne demek?" diye sordu:
   boy farkı rastgele bir kusur gibi okunuyordu). Vurgu artık ALTIN HALKA — işaretlenmiş
   olduğu belli, boyut aynı; anlamı ipucunda/aria etiketinde yazıyor. */
.fm-dot.fm-last {
  box-shadow:
    0 0 0 2px var(--panel),
    0 0 0 3.5px var(--gold);
}
@media (max-width: 420px) {
  .fm-dot {
    width: 14px;
    height: 14px;
    font-size: 9px;
  }
  .dt-form {
    margin-inline: 6px;
  }
}

/* Task094 — Uzun stadyum/teknik direktör adı künyeyi taşırıyordu (Fenerbahçe:
   "Ülker Stadyumu Fenerbahçe Şükrü Saracoğlu Spor Kompleksi"). Mobilde künye kutusu
   iki satıra kadar sarar, sonrasında "…" ile biter — panel dışına ASLA taşmaz. */
@media (max-width: 560px) {
  .dt-info .mi-it {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    line-height: 1.3;
  }
  .dt-info .mi-sub {
    display: block;
  }
}

/* ==========================================================================
   Task094 — Kayıt satırı (oyuncu/takım kartlarındaki TÜM listeler)
   ==========================================================================
   Tablo hücrelerini mobilde akıtmak, satırın nerede sarılacağını içeriğe bırakıyordu:
   uzun takım adı ya da iki haneli gol sayısı düzeni bozuyordu. Izgara SABİT:
     geniş ekran → tek satır, kolonlar hizalı
     dar ekran   → 1. satır bağlam + rozet · 2. satır etiketli sayılar               */
.rec-list {
  display: flex;
  flex-direction: column;
}
.rec {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr) auto 58px;
  align-items: center;
  gap: 4px 12px;
  padding: 10px 12px;
  border-bottom: 1px solid var(--line);
}
.rec:last-child {
  border-bottom: 0;
}
.rec-link {
  cursor: pointer;
  border-radius: 10px;
}
.rec-link:hover {
  background: color-mix(in srgb, var(--accent) 9%, transparent);
}
.rec-lead {
  display: flex;
  flex-direction: column;
  line-height: 1.15;
  font-size: 12.5px;
  font-weight: 800;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.rec-lead i {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 700;
  color: var(--muted);
}
.rec-main {
  min-width: 0;
  display: flex;
  flex-direction: column;
  line-height: 1.2;
}
.rec-main b {
  font-size: 13.5px;
  font-weight: 800;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rec-main span {
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.rec-stats {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  flex-wrap: nowrap;
}
.rec-st {
  display: inline-flex;
  align-items: baseline;
  gap: 3px;
  font-style: normal;
  font-size: 11px;
  color: var(--muted);
  white-space: nowrap;
}
.rec-st b {
  font-size: 13px;
  font-weight: 800;
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
.rec-st.rec-score b {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.rec-st.rec-marks b {
  font-size: 12px;
  letter-spacing: 1px;
}
.rec-badge {
  justify-self: end;
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
}
.rec-ratio {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-end;
  line-height: 1.1;
  font-size: 13px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  color: var(--text);
}
.rec-ratio i {
  font-style: normal;
  font-size: 9.5px;
  font-weight: 700;
  color: var(--muted);
}
.rec-chev {
  font-style: normal;
  color: var(--muted);
  opacity: 0.7;
}
.ps-detail {
  padding: 4px 12px 14px;
}
/* Dar ekran: iki satır — rozet sağda dikeyde ortalı, sayılar ikinci satırda */
@media (max-width: 700px) {
  .rec {
    grid-template-columns: auto minmax(0, 1fr) auto;
    row-gap: 3px;
    padding: 9px 10px;
  }
  .rec-lead {
    grid-column: 1;
    grid-row: 1;
    flex-direction: row;
    align-items: baseline;
    gap: 4px;
  }
  .rec-main {
    grid-column: 2;
    grid-row: 1;
  }
  .rec-badge {
    grid-column: 3;
    grid-row: 1 / span 2;
    align-self: center;
  }
  .rec-stats {
    grid-column: 1 / 3;
    grid-row: 2;
    gap: 12px;
  }
  .rec-main span {
    display: none; /* alt bağlam dar ekranda gizlenir: ad + sayılar öncelikli */
  }
}
@media (max-width: 380px) {
  .rec-st {
    font-size: 10.5px;
  }
  .rec-st b {
    font-size: 12px;
  }
}

/* Asist işareti: emoji değil tema-uyumlu SVG krampon (ilke 3) */
.rec-as {
  display: inline-flex;
  color: var(--gold);
  vertical-align: -1px;
}
.rec-st .rec-as svg {
  width: 12px;
  height: 12px;
}

/* Task094 — Skorinho tahmin penceresinde ✕ mobilde SAĞDAKİ TAKIMIN logosunun üstüne
   biniyordu (kullanıcı bildirdi): `.tm-close` negatif alt boşlukla içeriği kendi altına
   çekiyor. Dar ekranda bu pencerede X kendi satırında durur — çakışma imkânsız. */
/* Task269 (kullanıcı) — "Skorinho logosu ve yazısı üstten yukarı taşmış gibi görünüyor."
   Sebep ölçüldü: ✕'in negatif ALT boşluğu (-32) marka satırını yukarı çekiyordu, marka da
   kendi negatif ÜST boşluğuyla bir kez daha çekilince kart kenarına biniyordu (webde ölçüm:
   marka üstü 1 px, kart iç boşluğu 22 px). Negatif boşluk matematiği KALDIRILDI: ✕ kendi
   satırında durur, marka o satırın üzerine KONUMLANDIRILIR — ikisi de kart iç boşluğundan
   başlar, hangi ölçüde olursa olsun. */
#pick-modal .tm-close {
  top: 0;
  margin: 0 0 0 auto;
}
/* Task269 (kullanıcı) — "Takım isimleri daha iyi görünsün: logoları biraz yana aç,
   aradaki boşlukları daralt." Satır ÜÇ SÜTUNLU ızgara olur: iki takım eşit ve tam yeri
   alır, arma dış kenara yaslanır, ad armanın hemen yanında başlar. Webde ad kırpılıyordu
   (ölçüldü: "Gençlerbirliği" 93 px gerekiyor, 72 px yer vardı). */
#pick-modal .dt-score {
  /* `.dt-head .dt-score` maç detayında ✕ ile çakışmasın diye 34 px içeri alınmıştı; tahmin
     penceresinde ✕ kendi satırında olduğu için bu boşluk yalnız ismi kısaltıyordu. 34 px
     yerine küçük bir iç boşluk: armalar dışa açılır ama kenara dayanmaz (kullanıcı: "çok
     yanlara açılmış, çok az içeri kaysın"). */
  padding-inline: 8px;
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 8px;
}
#pick-modal .dt-tm {
  gap: 6px;
  min-width: 0;
  justify-content: flex-start;
}
#pick-modal .dt-tm.away {
  justify-content: flex-end;
}
/* Uzun ad KIRPILMAZ, iki satıra sarar: "Borussia Mönchengladbach" gibi adlar tahmin
   ekranında "Borussia Mönch…" diye kesiliyordu. */
#pick-modal .dt-tm > span:not(.rc-wrap):not(.flag-wrap) {
  white-space: normal;
  overflow-wrap: anywhere;
  line-height: 1.18;
}
/* "vs" skor değil ayraç: küçülünce isme yer açılır. */
#pick-modal .dt-score b {
  font-size: 14px;
  opacity: 0.7;
  letter-spacing: 0.5px;
}
#pick-modal .pick-brand {
  position: absolute;
  top: var(--pk-pt);
  left: var(--pk-px);
  height: var(--tm-close-h, 36px);
  margin: 0;
}
@media (max-width: 560px) {
  #pick-modal .tm-head {
    margin-top: 10px;
  }
}

/* ==========================================================================
   Task106 — Oyuncu kartı: mevki haritası (küçük dikey saha) + maç kaptanı rozeti
   ========================================================================== */
/* Saha: tema renkleriyle çizilir (sabit yeşil değil) — dört temada da okunur kalsın. */
.pp-pitch {
  display: block;
  width: min(230px, 78%);
  margin: 6px auto 2px;
}
.pp-turf {
  fill: color-mix(in srgb, var(--green) 22%, transparent);
  stroke: var(--line2);
  stroke-width: 0.8;
}
.pp-pitch .pp-line {
  fill: none;
  stroke: color-mix(in srgb, var(--text) 22%, transparent);
  stroke-width: 0.8;
}
.pp-pos circle {
  fill: color-mix(in srgb, var(--accent) 28%, transparent);
  stroke: color-mix(in srgb, var(--accent) 60%, transparent);
  stroke-width: 0.8;
}
.pp-pos text {
  fill: var(--text);
  font-size: 6px;
  font-weight: 800;
  opacity: 0.85;
}
/* Ana mevki: dolu ve net — "asıl yeri neresi" bir bakışta anlaşılsın */
.pp-pos-main circle {
  fill: var(--accent);
  stroke: var(--accent);
}
.pp-pos-main text {
  fill: var(--bg);
  opacity: 1;
  font-size: 6.5px;
}
.pp-pos-extra {
  margin-top: 4px;
  text-align: center;
  font-size: 11px;
  color: var(--muted);
}
/* Maçın kaptanı: kadro çipinde avatarın SAĞ ÜST köşesinde (reyting sol üstte) */
/* Task138 — Kaptan rozeti ADIN ALTINDA (eskiden avatarın sağ üst köşesindeydi ve gol
   işaretiyle aynı köşeye düşünce altta kalıyordu). Ad satırının altı boştu; rozet orada
   hiçbir şeyi kapatmıyor. */
.lu-cap {
  display: block;
  /* Tek harf "C": yuvarlak ve küçük (kullanıcı kararı — "C harfi ile gösterilse yeterli") */
  margin: 2px auto 0;
  width: 13px;
  height: 13px;
  border-radius: 50%;
  background: var(--gold);
  color: #221800;
  font-style: normal;
  font-size: 9px;
  font-weight: 900;
  line-height: 13px;
  text-align: center;
}

/* Task106 — Sözleşme künye kutusu: ikonu ALTIN (kardeşleri renkli emoji; tek gri kutu
   sırıtıyordu) ve MOBİLDE kendi satırında (kullanıcı isteği: "bir altta görünse şık"). */
.pp-bio .bio-i .bio-contract {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.pp-bio .bio-contract svg {
  width: 14px;
  height: 14px;
  color: var(--gold);
}
@media (max-width: 860px) {
  .pp-bio .bio-i:has(.bio-contract) {
    flex-basis: 100%;
  }
}

/* ==========================================================================
   Task108 — Kurulum: iOS bandı + adım adım rehber
   ========================================================================== */
/* Bant ALTTAN çıkar: iOS'ta Paylaş düğmesi de altta, göz oraya gidecek.
   Mobil alt menünün üstünde durur, onu kapatmaz. */
.install-bar {
  position: fixed;
  left: 50%;
  /* Task416 — alta yapışan yüzen öğeler görünür alanın dibinden ölçülür (uygulama-içi
     tarayıcıda düzen alanı daha yüksek; normal tarayıcıda --vvb sıfırdır). */
  bottom: calc(calc(var(--sab) + 72px) + var(--vvb, 0px));
  transform: translate(-50%, 160%);
  z-index: 95;
  display: flex;
  align-items: center;
  gap: 10px;
  width: min(94vw, 460px);
  padding: 10px 12px;
  border-radius: 14px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  box-shadow: 0 14px 34px rgba(0, 0, 0, 0.45);
  transition: transform 0.4s cubic-bezier(0.2, 1.2, 0.3, 1);
}
.install-bar.show {
  transform: translate(-50%, 0);
}
.ib-ico {
  flex: none;
  display: inline-flex;
  color: var(--accent);
}
.ib-ico svg {
  width: 22px;
  height: 22px;
}
.ib-tx {
  display: flex;
  flex-direction: column;
  min-width: 0;
  flex: 1;
}
.ib-tx b {
  font-size: 12.5px;
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ib-tx i {
  font-style: normal;
  font-size: 11px;
  color: var(--muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ib-go {
  flex: none;
  padding: 7px 12px;
  font-size: 12.5px;
}
.ib-x {
  flex: none;
  width: 26px;
  height: 26px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  border-radius: 50%;
  border: 1px solid var(--line2);
  background: var(--panel);
  color: var(--muted);
  font-size: 11px;
  cursor: pointer;
}
/* Rehber adımları */
.ins-steps {
  display: grid;
  gap: 10px;
  margin: 12px 0;
}
.ins-step {
  display: grid;
  grid-template-columns: 22px auto 1fr;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  border-radius: 12px;
  border: 1px solid var(--line);
  background: var(--panel2);
}
.ins-n {
  width: 22px;
  height: 22px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--accent);
  color: var(--bg);
  font-size: 11px;
  font-weight: 900;
}
.ins-ico {
  display: inline-flex;
  color: var(--accent);
}
.ins-ico svg {
  width: 20px;
  height: 20px;
}
.ins-tx {
  font-size: 13px;
  line-height: 1.45;
}
.ins-tx b {
  font-weight: 800;
}

/* ==========================================================================
   Task109 — Takım programı: liste / takvim anahtarı + aylık ızgara
   ========================================================================== */
.pg-switch {
  display: flex;
  gap: 6px;
  justify-content: safe center;
  margin: 8px 10px;
}
.pg-sw-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 12px;
  border-radius: 999px;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--muted);
  font-size: 12.5px;
  font-weight: 700;
  cursor: pointer;
}
.pg-sw-btn.active {
  color: var(--bg);
  background: var(--accent);
  border-color: var(--accent);
}
.pg-sw-btn svg {
  width: 15px;
  height: 15px;
}
/* Kart içeriği zaten 12px iç boşlukta; buraya bir 10px daha eklenince takvim ızgarası
   sekmelerden daha içeride başlıyor ve "ortalanmamış" görünüyordu (kullanıcı bildirdi).
   Yatay boşluk kartın kendi kuralına bırakıldı. */
.pg-calendar {
  padding: 0 0 10px;
}
.cal-head {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 14px;
  margin: 4px 0 10px;
}
/* Task230 — Ana sayfa takviminde başlık ÜÇ SÜTUN: boş · (oklar+tarih) · anahtar.
   Yan sütunlar eşit (1fr) olduğu için ortadaki grup, anahtarın etiketi "Gün"↔"Hafta"
   diye uzayıp kısalsa bile KIPIRDAMAZ (kullanıcı: "seçince takvim oynamasın"). */
#home-calendar .cal-head {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  gap: 8px;
  /* Task533 (kullanıcı: "takvimde aşağı kaydırınca yukarıdaki tarih kaybolmasın") —
     araç çubuğu banner + lig şeridinin altına YAPIŞIR; kartlar altından geçer. */
  position: sticky;
  top: var(--sticky-top, 66px);
  z-index: 25;
  margin: 0 -8px 10px;
  padding: 6px 8px;
  background: var(--bg2);
  border-bottom: 1px solid var(--line);
}
/* Task230 — Oklar SABİT yerde durur: grup içerikle birlikte büyüyünce tarih uzayıp
   kısaldıkça oklar kayıyordu (kullanıcı: "hep aynı yerde sabit olmalı ve ekranı
   ortalamalı"). Grup GENİŞLİĞİ sabit, tarih aradaki boşluğu doldurur ve gerekirse
   kesilir; grup ızgaranın orta sütununda olduğu için ekranın merkezinde kalır. */
.cal-head-mid {
  display: flex;
  align-items: center;
  gap: 6px; /* 14px'ti: oklarla tarih arasındaki boşluk fazlaydı (kullanıcı) */
  justify-self: center;
  width: min(230px, 66vw);
}
.cal-head-mid .cal-title-btn {
  flex: 1;
  justify-content: center;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
}
/* Task230 — Anahtar, üstteki COMPACT düğmesiyle sağdan HİZALI durur (kullanıcı isteği).
   Ölçüldü: compact düğmesinin sağ kenarı kapsayıcıdan 6px içeride. */
#home-calendar .hc-scope-toggle {
  justify-self: end;
  margin-right: 6px;
}
/* Task232 — Tahmin penceresinin SOL ÜSTÜNDE Skorinho markası (widget'takiyle aynı
   bileşen). Kapatma düğmesi sağ üstte olduğu için marka solda kalır ve ona değmez. */
/* Task232 (kullanıcı düzeltmesi) — "Üst kısımda gereksiz boşluk var; ✕ Skorinho
   yazısının hizasına inmeli." Sebep ölçüldü: `✕` yapışkan (sticky) olduğu için AKIŞTA
   yer kaplıyor ve başlığı kendi yüksekliği kadar (36px) aşağı itiyordu. Marka satırı
   ✕'in satırına ÇEKİLİR: yükseklik ilişkisi değişkenle kurulur, sihirli sayı yok. */
#pick-modal .modal-card {
  --tm-close-h: 36px;
  --pk-pt: 22px;
  --pk-px: 22px;
  position: relative;
  padding: var(--pk-pt) var(--pk-px) var(--pk-px);
}
#pick-modal .tm-close {
  height: var(--tm-close-h);
}
.pick-brand {
  display: flex;
  align-items: center;
  justify-content: flex-start;
  height: var(--tm-close-h, 36px);
  margin: calc(-1 * var(--tm-close-h, 36px)) 44px 6px 0;
}
.pick-brand .skorio-title {
  font-size: 14px;
  font-weight: 800;
}

/* Task234 — Takvim başlığındaki iki düğme AYNI ölçüdedir ve etiket değişince boyu
   DEĞİŞMEZ: görünmez kopyalar (`.cb-ghost`) düğmeyi en uzun etiket kadar genişletir,
   hepsi tek ızgara hücresinde üst üste durur. Dile bağlı sabit genişlik yok. */
.cal-btn {
  display: inline-grid;
  place-items: center;
}
.cal-btn .cb-lbl,
.cal-btn .cb-ghost {
  grid-area: 1 / 1;
}
.cal-btn .cb-ghost {
  visibility: hidden;
  pointer-events: none;
}

/* Task231 — LİG düğmesi: kapsam anahtarının SOL aynası. Aynı ölçü ve biçim, solda;
   aktifken vurgulu. Şeridin üstündeki liste/takvim düğmesiyle soldan hizalıdır. */
.hc-group-btn {
  justify-self: start;
  margin-left: 6px;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--muted);
  font-size: 11.5px;
  font-weight: 800;
  height: 26px;
  padding: 0 10px;
  border-radius: 999px;
  cursor: pointer;
  white-space: nowrap;
}
.hc-group-btn.active {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--bg);
}
/* Task433 rev (kullanıcı: "lig ve hafta butonları işaretli değilse yukarıdaki Listem gibi
   görünsün; bazen beyaz bazen mavi çizgili görüyorum") — vurgu YALNIZ fareyle gezilen
   cihazlarda. Dokunmatikte `:hover` dokunuştan sonra ÜZERİNDE KALIYOR ve düğme seçili
   olmadığı hâlde mavi çerçeveli duruyordu. */
@media (hover: hover) {
  .hc-group-btn:hover,
  .hc-scope-toggle:hover {
    border-color: var(--accent);
    color: var(--accent);
  }
  /* Task479 (kullanıcı: "webde takvim ve lig seçiliyken Lig düğmesinin üstüne gelince
     lig yazısı ve düğme aynı renge dönüyor") — ölçüldü: aktif düğmenin zemini
     rgb(79,140,255), üstündeyken yazı da rgb(79,140,255) oluyordu (karşıtlık 1:1, yazı
     kayboluyor). Kural Hafta düğmesi için vardı, LİG düğmesi için yoktu. İkisi de aynı
     basılı-kalan düğme dilini kullanıyor: istisna ortak. */
  .hc-group-btn.active:hover,
  .hc-scope-toggle.active:hover {
    color: var(--bg);
  }
}
/* Lig kutusunun başlığında logo */
/* Task362 — Grup başlığındaki lig logosu tıklanabilir (lig sayfası). `.lc-comp` çip
   görünümü burada istenmez: yalnız logo görünür, imleç işaretçi olur. */
.hc-lig-link {
  padding: 0;
  border: 0;
  background: none;
  cursor: pointer;
}
/* Task362 rev (kullanıcı) — SADE görünümde `.cd-compact .lc-comp { display: none }`
   kuralı satırdaki lig çipini gizler; grup başlığındaki logo o kurala TAKILMAMALI:
   lige göre gruplandığında ligi gösteren tek görsel odur ve tıklanabilir. */
.cd-compact .hc-dh .hc-lig-link {
  display: inline-flex;
  align-items: center;
}
.hc-lig-logo {
  width: 16px;
  height: 16px;
  object-fit: contain;
  vertical-align: -3px;
  margin-right: 5px;
}
.cal-title {
  font-size: 14px;
  font-weight: 800;
  text-transform: capitalize;
}
.cal-nav {
  /* Task230 — 30px'ti; ok simgesi ortada küçük kalıp çevresi boş duruyordu (kullanıcı:
     "kaydırma butonlarının içinde gereksiz boşluk var"). */
  width: 26px;
  height: 26px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--text);
  font-size: 16px;
  cursor: pointer;
}
.cal-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
}
.cal-dow {
  margin-bottom: 4px;
}
.cal-dow span {
  text-align: center;
  font-size: 10px;
  font-weight: 800;
  text-transform: uppercase;
  color: var(--muted);
}
.cal-cell {
  min-height: 56px;
  padding: 3px;
  border-radius: 8px;
  border: 1px solid var(--line);
  background: var(--panel2);
  display: flex;
  flex-direction: column;
  gap: 2px;
  overflow: hidden;
}
/* Diğer ayın günleri soluk: ızgara tam haftalarla çizilir ama ay sınırı belli olsun */
.cal-out {
  opacity: 0.35;
}
.cal-today {
  border-color: var(--accent);
}
.cal-d {
  width: 100%;
  text-align: center;
  font-size: 10px;
  font-weight: 800;
  color: var(--muted);
  line-height: 1;
}
.cal-cell.cal-has .cal-d {
  color: var(--text);
}
/* Maç kutucuğu: rakip arması + saat/skor + ev/dep etiketi */
.cal-m {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  padding: 2px 1px;
  border-radius: 6px;
  background: color-mix(in srgb, var(--accent) 10%, transparent);
  cursor: pointer;
}
/* Kullanıcı kararı: arma BÜYÜK, altında ev/dep ikonu + saat (bitmişse skor) */
.cal-m img,
.cal-m .crest {
  width: 24px;
  height: 24px;
  object-fit: contain;
}
/* TARİH SATIRI: ev/dep ikonu · GÜN · sonuç harfi. Ölçüm: bu üçlü hücre gövdesinde 47px
   istiyordu, mobil hücrenin içi 35px — taşıyordu. Tarih satırında boş yer var, işaretler
   oraya taşındı (kullanıcı önerisi); gövdede yalnız arma + skor kaldı. */
.cal-drow {
  display: grid;
  grid-template-columns: 11px 1fr 11px;
  align-items: center;
  width: 100%;
}
.cal-drow .cal-ha {
  justify-self: start;
}
/* Aynı günde iki maç varsa işaretler kutucuğun içine küçük olarak döner */
.cal-inline {
  display: inline-flex;
  align-items: center;
  gap: 2px;
}
/* Sonuç harfi (G/B/M): renk körü ya da tema farkı gözetmeksizin okunur. Sağ sütunda
   durur ve skoru tam ortada tutar (sol sütundaki ikonun dengesi). */
.cal-res {
  text-align: right;
  width: 11px;
  font-style: normal;
  font-size: 8.5px;
  font-weight: 900;
  line-height: 1;
}
.cal-res.cal-w {
  color: var(--green);
}
.cal-res.cal-d {
  color: var(--gold);
}
.cal-res.cal-l {
  color: var(--red);
}
.cal-m b {
  font-size: 9.5px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}
.cal-ha {
  display: inline-flex;
  width: 11px;
  color: var(--muted);
}
.cal-ha svg {
  width: 9px;
  height: 9px;
}
/* Bitmiş maçta sonuç rengi (yeşil/altın/kırmızı) — bir bakışta okunsun */
/* Kazandı mı kaybetti mi ANLAŞILSIN: soluk zemin yetmiyordu (kullanıcı bildirdi) —
   zemin koyulaştı, renkli kenarlık ve RENKLİ SKOR eklendi. */
.cal-m.cal-w {
  background: color-mix(in srgb, var(--green) 30%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--green) 65%, transparent);
}
.cal-m.cal-w b {
  color: var(--green);
}
.cal-m.cal-d {
  background: color-mix(in srgb, var(--gold) 26%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--gold) 60%, transparent);
}
.cal-m.cal-d b {
  color: var(--gold);
}
.cal-m.cal-l {
  background: color-mix(in srgb, var(--red) 26%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--red) 60%, transparent);
}
.cal-m.cal-l b {
  color: var(--red);
}
@media (max-width: 420px) {
  .cal-cell {
    min-height: 58px;
  }
  .cal-m img,
  .cal-m .crest {
    width: 21px;
    height: 21px;
  }
}

/* ==========================================================================
   Task110 — Lig fikstürü: haftalık takvim (mobilde günler alt alta, geniş ekranda 7 sütun)
   ========================================================================== */
.fx-calendar {
  padding: 0 0 10px;
}
.fx-week {
  display: grid;
  gap: 6px;
  grid-template-columns: 1fr; /* mobil: günler alt alta — bir güne çok maç düşebilir */
}
/* Task111 — Geniş ekranda da günler ALT ALTA. 7 sütunda gün sütunu 78px kalıyor; canlı
   maçta dakika + skor + iki arma + ikonlar oraya sığmıyordu (ölçüm: kutu 64px, içerik
   taşıyor). Kullanıcı kararı: "böyle sıkıştırmaktansa webi de mobildeki gibi alt alta". */
@media (min-width: 760px) {
  .fx-week {
    grid-template-columns: 1fr;
  }
}
.fx-day {
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel2);
  padding: 6px;
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-height: 46px;
}
.fx-today {
  border-color: var(--accent);
}
.fx-dh {
  font-size: 10.5px;
  font-weight: 800;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
}
.fx-day.fx-has .fx-dh {
  color: var(--text);
}
.fx-bos {
  font-size: 11px;
  color: var(--muted);
  opacity: 0.6;
}
/* Maç kutucuğu: ev arma · saat/skor · deplasman arma + lig haftası rozeti */
.fx-m {
  display: grid;
  grid-template-columns: 20px 1fr 20px;
  align-items: center;
  gap: 6px;
  padding: 5px 6px;
  border-radius: 8px;
  background: color-mix(in srgb, var(--accent) 9%, transparent);
  cursor: pointer;
}
.fx-m img,
.fx-m .crest {
  width: 20px;
  height: 20px;
  object-fit: contain;
}
.fx-m b {
  text-align: center;
  font-size: 11.5px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}
.fx-mw {
  grid-column: 1 / -1;
  text-align: center;
  font-style: normal;
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.2px;
  color: var(--muted);
}
@media (min-width: 760px) {
  .fx-m {
    grid-template-columns: 18px 1fr 18px;
    gap: 4px;
    padding: 4px;
  }
  .fx-m img,
  .fx-m .crest {
    width: 18px;
    height: 18px;
  }
  .fx-m b {
    font-size: 10.5px;
  }
}

/* ==========================================================================
   Task111 — Takvimde takım adları, aksiyon ikonları ve CANLI maç görünümü
   ========================================================================== */
/* Maç satırı: ev (arma+ad) · orta (saat/skor/canlı) · deplasman (ad+arma), altında
   lig haftası ve aksiyon ikonları. Ad MOBİLDE görünür; geniş ekranda sütun dar (7 sütun
   düzeni korunuyor — kullanıcı kararı) ve yalnız arma kalır. */
.fx-m {
  grid-template-columns: 1fr auto 1fr;
}
.fx-t {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  cursor: pointer;
}
.fx-t-r {
  justify-content: flex-end;
}
.fx-nm {
  font-size: 11.5px;
  font-weight: 700;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.fx-mid {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  min-width: 46px;
}
/* Canlı dakika/İY: TAM GENİŞLİKTE kendi satırı (skorla aynı sütuna sığmıyordu) */
.fx-live {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 3px;
  font-style: normal;
  font-size: 9.5px;
  font-weight: 900;
  letter-spacing: 0.2px;
  color: var(--red);
}
.fx-sc {
  font-size: 12px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.fx-m-live {
  background: color-mix(in srgb, var(--red) 12%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--red) 45%, transparent);
}
/* Aksiyon ikonları (tahmin/izleme/paylaşım/takvim) — listedekiyle aynı bileşen */
.fx-acts {
  grid-column: 1 / -1;
  display: flex;
  justify-content: center;
  min-width: 0;
  overflow: hidden;
}
/* Takım kartı takviminde canlı maç: skorun solunda yanıp sönen nokta */
.cal-m-live {
  background: color-mix(in srgb, var(--red) 22%, transparent);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--red) 55%, transparent);
}
.cal-m-live b .lc-dot {
  margin-right: 2px;
}
/* 7 sütun düzeni bırakıldığı için buradaki KÜÇÜLTMELERE gerek kalmadı: geniş ekranda da
   takım adı ve TAM BOY ikonlar görünür (kullanıcı: "ikonlar eskisi gibi sıkışık kaldı"). */
@media (min-width: 760px) {
  .fx-nm {
    font-size: 12.5px;
  }
  .fx-acts .m-acts {
    gap: 6px;
  }
  .fx-acts .m-acts svg {
    width: 17px;
    height: 17px;
  }
  .fx-mid {
    min-width: 60px;
  }
}

/* Task111 — Fikstür satırında TAKIM ADI dokunma alanı. Ölçüm: ad yalnız 16px yüksek ve
   12px altında bir sonraki satırın paylaşım ikonu başlıyor; ada nişan alan parmak alttaki
   satırın ikonuna basıyordu (kullanıcı bildirdi). Kutu dikeyde büyür, DÜZEN DEĞİŞMEZ
   (negatif dış boşluk) — Task102'deki ikon çözümünün aynısı, bu kez ad için. */
@media (max-width: 860px) {
  main#content .gmatch .side .sn {
    /* Yukarı 4 (kendi satırının ikon kutusu 31'de biter), aşağı 8 (bir sonraki satırın
       ikonları 69'da başlar) → ad kutusu 16px değil 28px, hiçbir komşuya değmiyor. */
    padding: 4px 2px 8px;
    margin: -4px 0 -8px;
  }
}

/* Task111 — Takım takviminde canlı işareti TARİH SATIRINDA (sonuç harfiyle aynı yuva):
   maç canlıyken nokta, devre arasında "İY", bitince G/B/M — hepsi aynı yerde olduğu için
   maç kutusu kaymıyor (kullanıcı kararı). */
.cal-res-live {
  color: var(--red);
  font-size: 7.5px;
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
}
/* Ölçüm (kullanıcı sorusu: "o beyaz nokta yanıp sönecek mi?"): `.lc-dot`un beyazı KIRMIZI
   ROZET İÇİ içindir. Takvimde nokta tek başına, kart zemininde duruyor; açık temada zemin
   #eaf2fb, nokta beyaz → kontrast 1,1:1, yani görünmüyordu. Rozetsiz bağlamda nokta canlı
   rengini alır (`.gmatch .g-live .lc-dot` ile aynı dil). */
.cal-res-live .lc-dot,
.fx-live .lc-dot {
  background: var(--red);
}
.cal-res-live .lc-dot {
  width: 6px;
  height: 6px;
}

/* --- Task114 — ANA SAYFA: Liste | Takvim ------------------------------------------
   Kullanıcı: "uygulamanın ön yüzü burası, en premium hissiyat burada olmalı." Bu yüzden
   takvimde yeni bir kart dili üretilmez — bantlardaki zengin kartın AYNISI çizilir; takvim
   yalnız GÜN ÇERÇEVESİ ve hafta gezinmesi ekler. */
/* Ölçüm (kullanıcı: "butonların üstünde altında çok fazla boşluk var, özellikle mobilde
   kullanım alanını daraltıyor"): 29px'lik düğme için dikey ayak izi 91px'ti — üstte 20px,
   altta 26px boşluk ve `.pg-switch`in kendi 8px'lik dış boşluğu üst üste biniyordu.
   Anahtarın kendi payı kısıldı, iç dış boşluk sıfırlandı: ayak izi ~53px. */
.home-switch {
  /* `#content` bir grid ve satır aralığı 16px; anahtar bu aralığın İKİ katını (üstte 16,
     altta 16) kendi payına ekliyordu. Negatif pay aralığı geri alır: 29px'lik düğmenin
     ayak izi 91px → 45px. */
  margin: -8px auto;
  /* Task168 — Sağa yaslanan düğme MAÇ LİSTESİYLE aynı hizada bitsin: satır, kartlarla
     aynı rayda (860px, ortalı). Pencerenin sağ ucuna gitse listeden kopuk dururdu
     (ölçüm: kart sağ kenarı 1070, pencere 1280). */
  max-width: 860px;
}
.home-switch .pg-switch {
  margin: 0;
}
/* Kart genişliği LİSTEDEKİYLE birebir aynı olsun (kullanıcı isteği): panel sınırı da
   860px, yan iç boşluk da TEK katman. `.live-cards` zaten 6px yan boşluk taşıyor; panele
   ikinci bir katman eklenirse kart 12px dar kalıyordu (ölçüldü: 834 vs 846). */
.hc-wrap {
  padding: 10px 0 14px;
}
.hc-week {
  display: grid;
  grid-template-columns: 1fr; /* günler alt alta: bir güne çok maç düşüyor (çok ligli) */
  gap: 12px;
  margin-top: 8px;
}
/* Gün KUTUSU değil, gün BAŞLIĞI: panel içinde üçüncü bir çerçeve katmanı görüntüyü
   ağırlaştırıyordu. Başlık ince bir çizgiyle ayrılır, kartlar doğrudan altında durur. */
.hc-day {
  padding: 0;
  /* Task586 (kullanıcı: "tarih değiştiğinde her ligin son maçının alt çizgisi sayfa
     yüklendikten sonra geliyor") — ölçüldü: animasyon alan `.hc-day` katmanının alt kenarı
     son satırın 1px çizgisiyle TAM çakışıyor (fark 0.00); iOS katman kenarındaki çizgiyi
     animasyon bitene dek kırpıyor. 1px alt dolgu çizgiyi katmanın İÇİNE alır. */
  padding-bottom: 1px;
}
.hc-dh {
  display: flex;
  align-items: center;
  gap: 8px;
  /* Gün başlığı panel kenarına teğet olmaz; kartlarla aynı hizada başlar */
  margin: 0 8px 10px;
  padding-bottom: 6px;
  border-bottom: 1px solid var(--line2);
  /* Task533 — hangi güne (lig gruplamasında hangi lige) bakıldığı hep okunsun: başlık
     araç çubuğunun HEMEN ALTINA yapışır. Çubuk yüksekliği dile/genişliğe göre değişiyor,
     bu yüzden JS ölçüp `--cal-head-h` simgesine yazıyor (sabit sayı kayma üretirdi). */
  position: sticky;
  top: calc(var(--sticky-top, 66px) + var(--cal-head-h, 46px));
  z-index: 20;
  padding-top: 8px;
  background: var(--bg2);
  font-size: 13px;
  line-height: 18px; /* Task551 rev — tam sayı: kesirli taban animasyon sonunda oynuyordu */
  letter-spacing: 0.2px;
  color: var(--muted);
  text-transform: capitalize;
}
/* Task609 — başlık metni kutusu TAM SAYI konumda dursun: `<b>` içindeki 16px logo
   (`vertical-align: -3px`) satır kutusunu 19.078px'e çıkarıp kutuyu .453px kaydırıyordu
   (WebKit'te ölçüldü). Flex ile logo ve metin ortalanır, kutu boyu sayaç rozetiyle aynı
   (20px) tam sayı olur. */
.hc-dh > b {
  display: flex;
  align-items: center;
  min-height: 20px;
}
.hc-today .hc-dh {
  color: var(--accent);
  border-bottom-color: color-mix(in srgb, var(--accent) 45%, var(--line2));
}
/* Bugünün başlığında küçük bir işaret — hangi günde olduğumuz renkten bağımsız da okunsun */
.hc-today .hc-dh b::before {
  content: '';
  display: inline-block;
  width: 6px;
  height: 6px;
  margin-right: 6px;
  border-radius: 50%;
  background: var(--accent);
  vertical-align: middle;
}
.hc-cnt {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 900;
  padding: 1px 7px;
  border-radius: 999px;
  background: var(--chip-bg);
  border: 1px solid var(--line2);
  color: var(--muted);
}
/* Boş hafta yazısı panelde ORTALI (sola dayalı duruyordu — kullanıcı bildirdi) */
.hc-bos {
  margin: 6px 12px 2px;
  padding: 18px 8px;
  font-size: 12.5px;
  text-align: center;
}
.hc-cards {
  display: grid;
  gap: 10px;
}

/* Lig haftası rozeti: hem klasik ana sayfada hem takvimde, lig logosunun yanında.
   `matchweek` boşsa (kupa turu) hiç çizilmez — uydurma hafta numarası üretilmez. */
.lc-mw {
  flex: none;
  font-style: normal;
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: 0.2px;
  padding: 1px 7px;
  border-radius: 999px;
  background: var(--chip-bg);
  border: 1px solid var(--line2);
  color: var(--muted);
  white-space: nowrap;
}

/* Takvimde maçın hangi listeden geldiği bir bakışta ayrılsın (listede bunu panel başlığı
   söylüyordu). Şerit kartın SOL kenarında; kart zaten iç boşluklu olduğu için hiçbir
   içerik şeride teğet olmaz. */
.live-card.lc-rail {
  position: relative;
  overflow: hidden;
}
.live-card.lc-rail::before {
  content: '';
  position: absolute;
  inset: 0 auto 0 0;
  width: 4px;
  border-radius: 4px 0 0 4px;
}
.live-card.lc-rail-fav::before {
  background: var(--gold);
}
/* --- Task230: takvim kapsamı + tarih seçici ---------------------------------- */
.cal-title-btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  font-weight: 800;
  cursor: pointer;
  padding: 4px 6px;
  border-radius: 8px;
  min-width: 0;
}
.cal-title-btn:hover {
  background: var(--panel2);
}
.hc-pick-chev {
  display: inline-flex;
  opacity: 0.7;
}
/* Task230 — Kapsam anahtarı: TEK düğme, okların DIŞINDA (satırın en sağında).
   Bir dokunuş gün, bir dokunuş hafta (kullanıcı isteği). */
.hc-scope-toggle {
  flex: none;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--muted);
  font-size: 11.5px;
  font-weight: 800;
  height: 26px;
  padding: 0 10px;
  border-radius: 999px;
  cursor: pointer;
  white-space: nowrap;
}
/* Task235 — Anahtar BASILI KALIR: etiket her zaman "Hafta", basılıyken hafta kapsamı.
   Görsel dil soldaki LİG düğmesiyle birebir aynı (ikisi de basılı-kalan düğme). */
.hc-scope-toggle.active {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--bg);
}
/* Tarih seçici: ekranın üstünde ortalanan küçük panel (yardımcı diyalog — yığına girmez) */
.date-picker {
  position: fixed;
  z-index: 210;
  top: calc(64px + var(--sat));
  left: 50%;
  transform: translateX(-50%);
  width: min(320px, calc(100vw - 24px));
  background: var(--panel);
  border: 1px solid var(--line2);
  border-radius: 14px;
  box-shadow: var(--shadow);
  padding: 10px 12px 12px;
}
.date-picker.hidden {
  display: none;
}
.dp-head {
  display: flex;
  align-items: center;
  gap: 4px;
  margin-bottom: 6px;
}
.dp-title {
  flex: 1;
  text-align: center;
  font-size: 13.5px;
}
.dp-week,
.dp-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 2px;
}
.dp-week i {
  font-style: normal;
  text-align: center;
  font-size: 10px;
  color: var(--muted);
  text-transform: uppercase;
}
.dp-gun,
.dp-bos {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 32px;
  border: 0;
  border-radius: 8px;
  background: none;
  color: var(--text);
  font-size: 12.5px;
  font-weight: 700;
  cursor: pointer;
}
.dp-disay {
  opacity: 0.35;
}
.dp-hafta {
  background: var(--panel2);
}
.dp-bugun {
  box-shadow: inset 0 0 0 1px var(--gold);
}
.dp-secili,
.dp-gun:hover {
  background: var(--accent);
  color: #fff;
}
.dp-foot {
  margin-top: 8px;
  text-align: center;
}

/* Task229 — İzleme şeridi MOR: eskiden `--accent` idi ve tema vurgusuyla karışıyordu
   (kullanıcı: "favorilerdeki gibi ayırt edebileyim ama FARKLI renk"). Uygulamada tek
   anlam-tek renk: altın = favori, mor = izleme, kırmızı = yaklaşan/canlı. */
.live-card.lc-rail-watch::before {
  background: var(--watch);
}
.live-card.lc-rail-soon::before {
  background: var(--red);
}

/* Hafta rozeti üst satıra 55px ekliyor; 390px'te tarih ("Aug 14") kırpılıyordu (ölçüldü:
   33px gerekiyor, 20px kalıyordu). Dar ekranda boşluk ve rozet ölçüsü kısılır — tarih tam
   görünsün. */
@media (max-width: 430px) {
  .lc-top {
    gap: 5px;
  }
  .lc-mw {
    font-size: 10px;
    padding: 1px 6px;
  }
  /* Tarih EN SON kısalsın: rozet ve ikonlar sabit, tarih tam yazılabilsin */
  .lc-top .lc-meta {
    flex: none;
  }
}
/* Takvimde tarihi GÜN BAŞLIĞI söylüyor; kartta tekrar etmez ve yer açar. */
.hc-cards .lc-meta {
  display: none;
}
/* Task308 rev (kullanıcı) — canlı dk/İY/MS rozeti üst satırın ORTASINDA (turnuva+tur
   çipleri ile sağdaki ikonların arasında; lc-top ızgarasının orta sütunu). Sağ itme
   kuralı (margin-left:auto) bu kipte geçersizdir. */
.lc-meta.lc-meta-status {
  margin: 0;
  display: inline-flex;
  justify-content: center;
}
/* Task309 rev 3 (kullanıcı) — TAKVİMDE de rozet ORTADA, skorun üstünde: sol-kopya
   istisnası kaldırıldı. Temel kurallar yeter: has-status sol kopyayı gizler,
   `.lc-meta.lc-meta-status` (dosyada takvim meta-gizleme kuralından SONRA gelir)
   ortadaki rozeti gösterir; tarih taşıyan meta takvimde gizli kalır (gün başlığı var).
   NOT: buraya yeniden sol-kopya istisnası eklemek rozeti ÇİFTLER (yaşandı). */

/* --- Task115 — Reyting rengi SÜREKLİ ölçekte --------------------------------------
   Kullanıcı: "8,5 ve üzeri en iyi renk, 5,5 ve altı en kötü renk, arası puana göre kendi
   renklensin; ideali yeşilden kırmızıya." Renk `--rt` değişkeniyle geliyor (JS'te tek
   fonksiyon: `ratingColor`), CSS yalnız onu kullanır. Değişken yoksa (veri yok) eski
   kova sınıfları devrede kalır — "veri yok" ile "düşük puan" karışmaz.
   Yazı rengi de veriyle geliyor (`--rt-ink`): her ton için beyaz/koyu arasından kontrastı
   yüksek olan seçiliyor — yeşil uçta beyaz 3,3:1'de kalıyordu (ölçüldü). */
.lu-rt[style*='--rt'],
.lu-bp-rt[style*='--rt'],
.pm-rt[style*='--rt'],
.sq-rt[style*='--rt'],
.pf-ort b[style*='--rt'],
.ss-rt[style*='--rt'] {
  background: var(--rt);
  color: var(--rt-ink);
  border-color: transparent;
}
/* Form grafiğindeki noktalar da aynı ölçekte */
.pf-pt[style*='--rt'] {
  background: var(--rt);
}
/* Sezon şeridindeki reyting hücresi rozet gibi durur (diğer hücreler düz metin) */
.ss-rt[style*='--rt'] {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 999px;
}
/* En iyi/en kötü maç etiketi de aynı ölçekte (grafiğin üstünde duruyor: rozet biçimi
   verilerek arka plandan ayrılır) */
.pf-lab[style*='--rt'] {
  background: var(--rt);
  color: var(--rt-ink);
  padding: 0 5px;
  border-radius: 999px;
}
/* Liderlik listesinde metrik REYTİNG ise değer rozet gibi renklenir */
.st-val-rt[style*='--rt'] {
  background: var(--rt);
  color: var(--rt-ink);
  padding: 1px 7px;
  border-radius: 999px;
}

/* --- Task121/122 — Yedek etiketi: gol/kart işareti ve nitelik çipi ------------------
   Kullanıcı: "yedeklerden birisi gol attıysa top ikonu yok, kimin attığı anlaşılamıyor;
   hem gol hem kırmızı kartta yazıları kapamayacak şekilde köşesinde görünsün" ve
   "yaş/ülke/değer seçildiğinde yedeklerde de doğrudan oyuncu etiketinde görünmeli". */
.lu-bp {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
/* İşaret sağ ÜST köşede; kutuya yer ayrıldığı için ada binmez */
.lu-bp-mk {
  padding-right: 20px;
}
/* Task342 — işaret KATMAN SIRASI (kullanıcı): önde GOL → asist → kart; forma numarası
   hepsinin arkasında. Küme numaranın da önünde durur. */
.lu-bp .lu-marks {
  z-index: 5;
  position: absolute;
  top: -6px;
  right: -3px;
  display: inline-flex;
  gap: 1px;
}
.lu-bp .lu-mk {
  width: 15px;
  height: 15px;
  font-size: 9px;
  line-height: 15px;
}
/* Nitelik çipi (yaş / bayrak / değer) adın hemen ardında */
.lu-bp-meta {
  font-style: normal;
  font-size: 10px;
  font-weight: 800;
  padding: 0 5px;
  border-radius: 999px;
  background: var(--chip-bg);
  border: 1px solid var(--line2);
  color: var(--muted);
  font-variant-numeric: tabular-nums;
}
.lu-bp-flag {
  font-size: 12px;
  padding: 0 3px;
}

/* --- Task117 — Skorinho widget'ında hafta/genel satırı ALT SATIRA KAYMASIN --------
   Ölçüm (kullanıcı bildirimi): 320-390px'te ve iki sütunun yan yana durduğu 768px'te
   üçüncü isim alt satıra düşüyordu (sütun 40px'e çıkıyor). Çözüm: satır sarmıyor, yerine
   AD kısalıyor — madalya ve puan her zaman görünür. */
.pb-col .promo-board-row {
  display: inline-flex;
  align-items: baseline;
  gap: 3px;
  min-width: 0;
  flex: 0 1 auto;
}
.pbr-nm {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  min-width: 0;
}
.pb-col .promo-board-row b {
  flex: none;
}
@media (max-width: 400px) {
  .pb-col {
    gap: 4px 7px;
  }
}
/* Ad hiçbir zaman bir-iki harfe düşmesin: 320px'te üç isim sığmadığı için ÜÇÜNCÜ sıra
   gizlenir (ilk iki isim tam okunur). 360px üstünde üçü de görünür. */
.pbr-nm {
  min-width: 5ch;
}
@media (max-width: 360px) {
  .pb-col .promo-board-row:nth-of-type(3) {
    display: none;
  }
}

/* --- Task118 — Maç detayı: lig kimliği SOL ÜSTTE ---------------------------------
   Kullanıcı: "maç detayında sol üstte lig logosu, adı ve ligin kaçıncı haftası olduğu
   görünsün." Aksiyon ikonları aynı satırın sağında kalır; ✕ butonu sağ üstte mutlak
   konumlu olduğu için satır sağdan içeri alınır (çakışma yok). */
.dt-topline {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin: 0 38px 10px 0;
}
.dt-topline .dt-acts {
  margin: 0;
}
.dt-comp {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  /* Task168 — Kullanıcı: "Lig ve haftayı çizgiyle çevirmesine gerek yok, sadece week
     olduğu gibi kalabilir." DIŞ çerçeve (kenarlık + zemin) kaldırıldı; iç içe iki çizgi
     yerine tek çizgi kaldı. Logo + ad zaten accent renkte, tıklanabilirliği taşıyor.
     Dolgu korunur: dokunma alanı küçülmesin ve yazı kenara teğet durmasın (ilke 4). */
  padding: 4px 2px;
  color: var(--accent);
  /* Ölçüm (kullanıcı: "çok büyük olmuş"): logo boyutsuzdu ve 46x31px çiziliyordu; künye
     satırı 12px, takım adı 13.5px olan bir başlıkta kutu tek başına öne çıkıyordu.
     Maç kartındaki lig çipiyle (11px) aynı ölçeğe indirildi. */
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.2px;
}
.dt-comp .comp-logo {
  width: auto;
  height: 14px;
  flex: none;
}
.dt-comp b {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dt-mw {
  flex: none;
  font-style: normal;
  font-weight: 800;
  font-size: 10px;
  padding: 0 6px;
  border-radius: 999px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  color: var(--muted);
  white-space: nowrap;
}
/* Ad sığdığı sürece yazar; ÇOK dar ekranda (≤360px) logo + hafta kalır — kullanıcı
   kararı: "ad sığmıyorsa logo ve hafta kalabilir". 390px'te ad rahat sığıyor (ölçüldü). */
@media (max-width: 360px) {
  .dt-comp b {
    display: none;
  }
}
/* Task126 — Nitelik verisi olmayan oyuncu: rozet dar rozet konumunda ve soluk. "–"
   uydurma değer değil "veri yok" demektir; para rozetinin sola kaydırması uygulanmaz. */
.lu-av-meta.lu-av-empty {
  left: -8px;
  color: var(--muted);
  opacity: 0.75;
}

/* --- Task125 — Lig + hafta kartın SOL ÜSTÜNDE (GERİ SAYIMI OLMAYAN maçta) ----------
   Geri sayımlı maçta çip zaten geri sayım satırında (`.lc-cd-lig`). Canlı/bitmiş maçta
   geri sayım yok, çip üst satırda kalıyor; mobilde oranın da başına alınır. DOM sırası
   değişmez → okuma ve odak sırası korunur. */
@media (max-width: 640px) {
  .live-card .lc-comp {
    order: -2;
  }
  .live-card .lc-mw {
    order: -1;
  }
}

/* --- Task129 — PWA'da çift dokunuş YAKINLAŞTIRMASI ---------------------------------
   Kullanıcı: "PWA'dan açtığımda, ana sayfa takvim görünümü gibi ok ile ileriki haftalara
   geçtiğim ekranlarda tıklayınca bazen sayfa birden zoom yapıyor gibi oluyor, özellikle
   mobilde." Neden: hafta okları gibi ARDIŞIK hızlı dokunulan düğmelerde tarayıcı ikinci
   dokunuşu "çift dokunuş = yakınlaştır" sayıyor. `touch-action: manipulation` yalnız çift
   dokunuş yakınlaştırmasını kapatır; PARMAKLA YAKINLAŞTIRMA (pinch) çalışmaya devam eder,
   yani erişilebilirlik kaybı yok. Tek tek eklenmiş yerler vardı; kural artık tüm
   etkileşimli öğeleri kapsıyor. */
button,
a,
select,
label,
summary,
[role='button'],
[data-calnav],
[data-fxnav],
[data-hcnav] {
  touch-action: manipulation;
}

/* --- Task134 — Sahanın alt köşelerinde yaş ortalaması --------------------------------
   Kullanıcı: "Kadro tabında yeşil sahanın alt köşelerinde oynayan oyuncuların yaş
   ortalaması ve maç kadrosunun yaş ortalaması görünmeli; kalecinin sağı ve solundaki boş
   alan kullanılabilir." Kaleci satırı ortada olduğu için iki köşe boş duruyordu. */
.lu-yas {
  position: absolute;
  bottom: 8px;
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  padding: 4px 8px;
  border-radius: 10px;
  background: rgba(0, 0, 0, 0.32);
  border: 1px solid rgba(255, 255, 255, 0.22);
  color: #fff;
  line-height: 1.1;
  text-align: center;
  max-width: 40%;
}
.lu-yas i {
  font-style: normal;
  font-size: 8.5px;
  font-weight: 700;
  letter-spacing: 0.2px;
  opacity: 0.85;
}
.lu-yas b {
  font-size: 13px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.lu-yas-sol {
  left: 8px;
}
.lu-yas-sag {
  right: 8px;
}
@media (max-width: 430px) {
  /* Task499 — beşinci nitelik (Boy) uzun dilli etiketlerle köşe kutularını 122 px'e
     çıkarıyordu: ortada kaleciye 56 px kalıyor ve adı kutuların altında kırpılıyordu
     (ölçüldü, 390 px İngilizce; kaleci 76 px). Kutu dar ekranda %34 ile sınırlı —
     etiket satıra bölünür, ORTA BOŞLUK korunur. */
  .lu-yas {
    max-width: 34%;
    padding: 3px 6px;
  }
  .lu-yas i {
    font-size: 8px;
  }
  .lu-yas b {
    font-size: 12px;
  }
}

/* --- Task137 — Teknik direktör kartı --------------------------------------------------
   Kullanıcı: "Takım kartında teknik direktörün galibiyet yüzdesi çok güzel bir bilgi ama
   görseli çok zayıf, orası yeniden tasarlanmalı." Eskiden künye şeridinde soluk bir alt
   metindi ("2.61 puan/maç · %82 galibiyet"). Artık: solda galibiyet HALKASI, sağda G/B/M
   oran şeridi + sayıları ve iki ölçü kutusu. */
.cc {
  display: grid;
  grid-template-columns: auto 1fr auto;
  grid-template-areas:
    'ico id ring'
    'body body ring';
  align-items: center;
  gap: 6px 10px;
  margin: 10px 12px 0;
  padding: 12px 14px;
  border-radius: 14px;
  background: var(--panel2);
  border: 1px solid var(--line2);
}
.cc-ico {
  grid-area: ico;
  display: inline-flex;
  color: var(--muted);
}
.cc-ico svg {
  width: 18px;
  height: 18px;
}
.cc-id {
  grid-area: id;
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.cc-name {
  font-size: 14px;
  font-weight: 900;
  letter-spacing: 0.2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Task590 — istatistiksiz TD kartındaki not (sessiz, ikincil renk). */
.cc-nostats {
  display: block;
  padding: 4px 0 2px;
  font-size: 13px;
  color: var(--muted);
}

.cc-since {
  font-style: normal;
  font-size: 10.5px;
  color: var(--muted);
}
/* Galibiyet halkası: conic-gradient ile dolan yay, ortasında yüzde. Derece JS'ten
   (`--deg`) gelir — hesap `coach-stats.js` içinde, testli. */
.cc-ring {
  grid-area: ring;
  position: relative;
  width: 66px;
  height: 66px;
  border-radius: 50%;
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  background: conic-gradient(var(--green) var(--deg, 0deg), var(--line2) 0);
  color: var(--text);
}
.cc-ring::before {
  content: '';
  position: absolute;
  inset: 6px;
  border-radius: 50%;
  background: var(--panel2);
}
/* Task145 — Halkanın içinde YALNIZ yüzde durur; etiket sığmıyordu. Rakam büyütüldü. */
.cc-ring b {
  position: relative;
  line-height: 1;
  font-size: 18px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.cc-body {
  grid-area: body;
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}
/* G/B/M oran şeridi: üç renkli tek çubuk (takım kartındaki sonuç renkleriyle aynı dil) */
.cc-bar {
  display: flex;
  height: 7px;
  border-radius: 999px;
  overflow: hidden;
  background: var(--line2);
}
.cc-seg {
  display: block;
  height: 100%;
}
/* Renkler YALNIZ şerit parçalarına: aynı sınıflar alttaki G/B/M sayılarında da geçiyor ve
   oralarda zemin boyuyordu (ölçüm: sayılar renkli kutuların içinde kayboldu). */
.cc-seg.cc-w {
  background: var(--green);
}
.cc-seg.cc-d {
  background: var(--gold);
}
.cc-seg.cc-l {
  background: var(--red);
}
.cc-wdl {
  display: flex;
  gap: 12px;
  font-size: 11px;
  color: var(--muted);
}
.cc-wdl-i {
  display: inline-flex;
  align-items: baseline;
  gap: 3px;
}
.cc-wdl-i b {
  font-size: 13px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  color: var(--text);
}
.cc-wdl-i.cc-w b {
  color: var(--green);
}
.cc-wdl-i.cc-d b {
  color: var(--gold);
}
.cc-wdl-i.cc-l b {
  color: var(--red);
}
.cc-stats {
  display: flex;
  gap: 14px;
}
.cc-stat {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
}
.cc-stat b {
  font-size: 13px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.cc-stat i {
  font-style: normal;
  font-size: 10.5px;
  color: var(--muted);
}
@media (max-width: 420px) {
  .cc {
    gap: 6px 8px;
    padding: 10px 12px;
  }
  .cc-ring {
    width: 58px;
    height: 58px;
  }
  .cc-ring b {
    font-size: 13.5px;
  }
}

/* --- Task139 — "Sıram" kutusunda SIRA ortada, hareket oku yanında -------------------
   Kullanıcı: "#3 şeklindeki sıra ortalansın, yükselme/düşme ifadesi onun yanında dursun."
   Ok akışta dururken ikisi birlikte ortalanıyor ve sıra sola kayıyordu; ok artık sıranın
   sağına MUTLAK konumlanır — rakam kutunun tam ortasında kalır. */
.sw-v-rank {
  position: relative;
}
.sw-v-rank .mv {
  position: absolute;
  left: 100%;
  /* Kullanıcı: "ok sıra numarasına biraz yaklaşabilir" — 5px → 2px */
  margin-left: 2px;
  white-space: nowrap;
}

/* --- Task141 — Künyede kompakt TD çipi; tam kart pencerede -------------------------
   Kullanıcı: "panel çok iyi oldu ama orada büyük durdu; o alanda sadece adı ve yanında
   renkli kısa bir istatistik özeti olsun, tıklanınca Teknik Direktör kartı açılsın." */
.ccm {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin: 8px 12px 0;
  padding: 5px 10px;
  border-radius: 999px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  min-width: 0;
}
.ccm-link {
  cursor: pointer;
}
@media (hover: hover) {
  .ccm-link:hover {
    border-color: color-mix(in srgb, var(--accent) 55%, var(--line2));
  }
}
.ccm-ico {
  display: inline-flex;
  color: var(--muted);
}
.ccm-ico svg {
  width: 15px;
  height: 15px;
}
.ccm-name {
  font-size: 12.5px;
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ccm-chip {
  flex: none;
  font-style: normal;
  font-size: 11px;
  font-weight: 900;
  padding: 1px 7px;
  border-radius: 999px;
  font-variant-numeric: tabular-nums;
}
/* Galibiyet yüzdesi yeşil, puan/maç altın: renk bilgi taşır (nötr rozet değil) */
.ccm-win {
  background: color-mix(in srgb, var(--green) 22%, transparent);
  border: 1px solid color-mix(in srgb, var(--green) 55%, transparent);
  color: var(--green);
}
.ccm-ppg {
  background: color-mix(in srgb, var(--gold) 20%, transparent);
  border: 1px solid color-mix(in srgb, var(--gold) 50%, transparent);
  color: var(--gold);
}
.ccm-chev {
  font-style: normal;
  color: var(--muted);
  display: inline-flex;
}
.ccm-chev svg {
  width: 14px;
  height: 14px;
}
/* Pencere içindeki tam kart: künyedeki dar alanın kısıtı yok */
.cc-modal {
  margin: 4px 0 0;
}
/* Sezon sezon geçmiş listesi */
.cch {
  display: grid;
  gap: 6px;
  margin: 6px 0 2px;
}
.cch-row {
  display: grid;
  gap: 6px;
  padding: 9px 11px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  font-size: 11.5px;
}
.cch-head {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}
.cch-s {
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.cch-l {
  flex: 1 1 auto;
  color: var(--muted);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
/* Sezon satırındaki çipler ana panelin diliyle aynı: yüzde yeşil, puan/maç altın */
.cch-chip {
  flex: none;
  font-style: normal;
  font-size: 10.5px;
  font-weight: 900;
  padding: 0 6px;
  border-radius: 999px;
  font-variant-numeric: tabular-nums;
}
.cch-win {
  background: color-mix(in srgb, var(--green) 22%, transparent);
  border: 1px solid color-mix(in srgb, var(--green) 50%, transparent);
  color: var(--green);
}
.cch-ppg {
  background: color-mix(in srgb, var(--gold) 20%, transparent);
  border: 1px solid color-mix(in srgb, var(--gold) 45%, transparent);
  color: var(--gold);
}
.cch-bar {
  height: 6px;
}
.cch-foot {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.cch-wdl {
  display: inline-flex;
  gap: 8px;
  font-variant-numeric: tabular-nums;
}
.cch-wdl b {
  font-weight: 900;
  background: none;
}
.cch-wdl b.cc-w {
  color: var(--green);
}
.cch-wdl b.cc-d {
  color: var(--gold);
}
.cch-wdl b.cc-l {
  color: var(--red);
}
.cch-m {
  color: var(--muted);
  white-space: nowrap;
}

/* --- Task143 — Teknik direktör görseli ---------------------------------------------
   Kullanıcı sordu: "TD fotoğraflarını bir yerden bulabilir miyiz?" Ölçüm: FotMob'un
   oyuncu görseli adresi TD kimlikleriyle de çalışıyor (151 TD'nin 148'i indirildi).
   Görseller yerelde (`/logos/coaches/`), hotlink yok. */
/* `.tm-head img` (46x31 arma ölçüsü) bu görseli de yakalıyordu — ölçüm: çipteki fotoğraf
   46x31 çiziliyordu. Kart başlığı bağlamında da kendi ölçüsünde kalsın diye seçici
   güçlendirildi. */
#team-head .ccm-av,
.ccm-av {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--panel);
  border: 1px solid var(--line2);
  flex: none;
}
#coach-modal .cc-av,
.cc-av {
  grid-area: ico;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--panel);
  border: 1px solid var(--line2);
}
/* Fotoğraflı kartta ad sütunu daha rahat: satır yüksekliği fotoğrafa göre kurulur */
.cc-has-av {
  gap: 8px 12px;
  align-items: center;
}

/* --- Task146 — Kadro sekmesinin başında yaş ortalaması ------------------------------
   Kullanıcı: "Takım kartında kadro tabının üst kısmında görseli güzel bir şekilde kadro yaş
   ortalaması görünmeli." Büyük ortalama + mevki kırılımı; eksik doğum tarihi sayısı yazılı
   (uydurma ortalama yok). */
.sa {
  display: grid;
  grid-template-columns: auto 1fr;
  grid-template-areas:
    'main groups'
    'note note';
  align-items: center;
  gap: 4px 12px;
  /* Task495 rev (kullanıcı: "önceki gösterimdeki kartların yüksekliklerini daralt,
     böylece üç kart çok yer tutmaz") — üç şerit (yaş · değer · boy) alt alta geldiği için
     dolgu ve dış boşluk kısıldı; alttaki mevki başlığının nefes payı (Task146) korunur. */
  margin: 8px 12px 8px;
  padding: 8px 12px;
  border-radius: 14px /* kadro listesiyle aynı dil: panel içi kart */;
  background: linear-gradient(
    135deg,
    color-mix(in srgb, var(--accent) 12%, var(--panel2)),
    var(--panel2)
  );
  border: 1px solid var(--line2);
}
.sa-main {
  grid-area: main;
  display: inline-flex;
  align-items: baseline;
  gap: 7px;
  min-width: 0;
}
.sa + .sa {
  margin-top: -2px; /* ardışık şeritler arasında tek boşluk kalsın */
}
.sa-val {
  font-size: 21px;
  font-weight: 900;
  line-height: 1;
  font-variant-numeric: tabular-nums;
  color: var(--accent);
}
.sa-lbl {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  max-width: 96px;
  line-height: 1.15;
}
.sa-groups {
  grid-area: groups;
  display: flex;
  justify-content: flex-end;
  gap: 6px;
  flex-wrap: wrap;
}
.sa-g {
  display: inline-flex;
  align-items: baseline;
  gap: 4px;
  padding: 2px 7px;
  border-radius: 999px;
  background: var(--panel);
  border: 1px solid var(--line2);
}
.sa-g i {
  font-style: normal;
  font-size: 9.5px;
  font-weight: 900;
  color: var(--muted);
}
.sa-g b {
  font-size: 12px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  /* Task495 rev-2 — çip içeriği ASLA sarmaz: dar ekranda "€118,4 mn" iki satıra düşüp
     kartı büyütüyordu (kullanıcı bildirdi). Çipte yalın sayı var, sığmazsa çip daralır. */
  white-space: nowrap;
}
.sa-g {
  white-space: nowrap;
  min-width: 0;
}
.sa-note {
  grid-area: note;
  font-size: 10.5px;
  color: var(--muted);
}
.sa-miss {
  font-style: normal;
}
/* Dar ekranda mevki çipleri kendi satırında ve tek sıra: sağ sütuna sıkışınca alt alta
   diziliyordu (ölçüm: dört çip dört satır). */
@media (max-width: 560px) {
  .sa {
    grid-template-columns: 1fr;
    grid-template-areas:
      'main'
      'groups'
      'note';
    gap: 6px;
    margin: 8px 10px;
  }
  .sa-groups {
    justify-content: space-between;
    flex-wrap: nowrap;
  }
  .sa-g {
    flex: 1 1 0;
    justify-content: center;
    padding: 3px 4px;
  }
  .sa-lbl {
    max-width: none;
  }
}
/* Task148 — Tıklanabilir form rozeti: imleç ve dokunma davranışı belli olsun. */
.fm-dot.fm-clk {
  cursor: pointer;
  touch-action: manipulation;
}

/* --- Task147 — Ana sayfada İÇ İÇE PANEL görüntüsü kaldırıldı -------------------------
   Kullanıcı: "Favori, izleme ve yaklaşan panelleri maç kartlarını da düşününce iç içe
   paneller gibi görünüyor, çok fazla çizgi gözü yorabiliyor; ayrıca aradaki boşluklardan
   özellikle mobilde yer kaybı oluyor. Maç kartı olduğu gibi kalmalı ama dış panele ne
   yapılabilir?"
   Ölçüm (390px): içerik 390 → panel 366 → kart 352, yani 38px kayıp ve İKİ çerçeve.
   Karar: dış panelin çerçevesi/zemini kalkar, başlık hafif bir bölüm etiketi olur; kartlar
   doğrudan sayfa zemininde durur. Kartın kendi tasarımı değişmez. */
#fav-section,
#watch-section,
#today-section,
#live-section {
  background: none;
  border: 0;
  box-shadow: none;
  border-radius: 0;
  overflow: visible;
}
#fav-section .group-head,
#watch-section .group-head,
#today-section .group-head {
  background: none;
  border: 0;
  padding: 0 2px 2px;
}
#fav-section .group-head h2,
#watch-section .group-head h2,
#today-section .group-head h2 {
  font-size: 12.5px;
  letter-spacing: 0.6px;
  color: var(--muted);
}
/* `main#content .live-cards` (0,1,1,1) bu kuralı yeniyordu — ölçüldü. Aynı bağlamda
   yazılır ki dolgu gerçekten sıfırlansın. */
main#content #fav-band,
main#content #watch-band,
main#content #today {
  padding: 0;
  margin-top: 8px;
}
main#content #fav-section .group-head,
main#content #watch-section .group-head,
main#content #today-section .group-head {
  padding: 0 2px 2px;
}

/* Task548 — Canlı paneli TAKVİM görünümünde şeridin altında, kartın içinde durur: kart
   zaten yan boşluk taşıyor, panelin kendi 860 px sınırı ve dış boşlukları burada gereksiz.
   Kenarlara teğet olmaz (ilke 4): kartın iç boşluğu korunur. */
#live-section.live-band-cal {
  max-width: none;
  margin: 0 0 10px;
}

/* Task533 rev (kullanıcı: "Aynı şekilde Listem butonuna basılıyken de başlıklar aşağı
   kaydırdıkça yukarıda görünür olsun") — LİSTE görünümünde bant başlıkları yapışır:
   kaydırırken hangi bantta olunduğu ("Canlı", "Favoriler", "İzleme listem", "Sıradaki
   program") üstte okunur; başlık kendi bandının sonunda onunla birlikte kayar.
   Özgüllük: `main#content .group-head` (1,1,1) `position: relative` yazıyor — kural aynı
   bağlamda yazılmazsa yapışma ölür (ölçüldü: position `relative` kalıyordu).
   Zemin şart: altından geçen kartlar yazının içinden görünmesin. */
main#content #live-section > .group-head,
main#content #fav-section > .group-head,
main#content #watch-section > .group-head,
main#content #today-section > .group-head {
  position: sticky;
  top: var(--sticky-top, 66px);
  z-index: 20;
  padding: 8px 2px 4px;
  margin-bottom: 0;
  background: var(--bg2);
}

/* Task575 (kullanıcı: "mobilde live/mylist/calendar/compact butonları ile tarih alanı
   arasında bir çizgi var, bu kalkmalı; tarih alanı background'ı ile uyumlu olmalı, renk
   geçişi olmamalı") — takvim şeridi AKIŞTA sayfa zeminiyle aynı olur (cam yüzey ve alt
   çizgi kalkar); YAPIŞINCA cam geri gelir, çünkü altından liste geçiyor. */
/* Özgüllük: `#home-calendar .cal-head` (1,1,1) zemini ve alt çizgiyi yazıyor — aynı
   bağlamda yazılır ki akışta gerçekten kaybolsun. */
[data-theme='glass'] .cal-head:not(.is-stuck),
[data-theme='glass'] #home-calendar .cal-head:not(.is-stuck) {
  background: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
  border-bottom-color: transparent;
  box-shadow: none;
}
/* Yapışınca opak: altından maç listesi geçiyor (okunabilirlik önce gelir). */
[data-theme='glass'] #home-calendar .cal-head.is-stuck {
  background: var(--bg2);
  border-bottom-color: var(--line);
}
/* Task577 (kullanıcı: "live/my list/calendar/compact mobil görünümde Skorinho widget'a çok
   yaklaştı") — ölçüldü: anahtar satırı davetin 2px altındaydı (negatif üst marj). Mobilde
   nefes payı verilir. */
@media (max-width: 640px) {
  main#content .home-switch {
    margin-top: 6px;
  }
}

/* Task576 (kullanıcı: "tema bağımsız, web ve mobil bağımsız yesterday/today/tomorrow tabı
   up next yazısının altına gelmeli; butonların üstünde görünen çizgi de alttaki maçın üst
   çizgisi gibi görünmeli") — gün şeridi bant başlığının ALTINA yapışır (başlık boyu JS ile
   ölçülür), üstündeki çizgi kalkar; çizgi ilk maç satırının kendi üst kenarı olur. */
/* rev (kullanıcı: "yesterday/today/tomorrow aşağı kaydırırken yukarıda sabitlenmesin,
   sadece up next sabitlensin") — şerit AKIŞTA kalır; yalnız bant başlığı yapışır. */
main#content #today > .day-switch.lc-days {
  border-top: 0;
  border-bottom: 0;
  /* Task587 (kullanıcı: "Bugün butonu içinde olduğu kartı dikeyde ortalamamış" ve
     "üçlü buton grubunun üstündeki çizgi gruba temas ediyor") — dolgu SİMETRİK (4/4) ve
     şerit üstten 4px nefes alır: düğmelerin çizgilere uzaklığı iki yönde de 8px olur
     (üst: 4 marj + 4 dolgu; alt: 4 dolgu + 4 marj). */
  padding-top: 4px;
  padding-bottom: 4px;
  margin-top: 4px;
}
/* Task581 — `anim-busy` kancası KALDIRILDI: titremenin kaynağı küçük denetimlerdeki
   `backdrop-filter`di, o da kaldırıldı (yukarıdaki denetim kuralı). Animasyon sırasında
   yüzeyleri değiştirmek "animasyon bitince çizgi çiziliyor" hissi üretiyordu. */

/* Task579 (kullanıcı: "butonları çevreleyen çizgi üstte ve altta silinmiş gibi görünüyor")
   — şeridin soluklaşan bant zemini buton kenarlarının kontrastını üst/alt uçlarda
   düşürüyordu; şerit sayfa zeminiyle aynı kalır, kenarlar her yerde eşit okunur. */
[data-theme='glass'] main#content .day-switch.lc-days {
  background: none;
}
main#content #today > .day-switch + .live-card,
main#content #today > .live-card:first-child {
  border-top: 1px solid var(--line2);
}

/* Task575 rev (kullanıcı: "my list seçiliyken up next altında görünen çizgi aşağıdaki ilk
   maçın üst çizgisi olmalı, up next altında çizgi olmamalı") — gün düğmeleri şeridinin alt
   ve üst çizgileri kalkar; çizgi ilk maç satırının kendi üst kenarı olur. */
@media (max-width: 640px) {
  [data-theme='glass'] main#content.cd-compact .day-switch.lc-days {
    border-top: 0;
    border-bottom: 0;
  }
  /* İlk satır: panelde gün düğmeleri şeridi varsa onun HEMEN ALTINDAKİ satır ilk sayılır.
     Task579 (kullanıcı: "favori takımlar ve izleme listesinin en üstteki maç satırının üst
     çizgisi yok") — kural TÜM bantlara genişletildi. */
  main#content.cd-compact .live-cards:not(.lb-empty) > .live-card:first-child,
  main#content.cd-compact #today > .day-switch + .live-card,
  main#content.cd-compact .gmatches > .gmatch:first-child {
    border-top: 1px solid var(--line2);
  }
}

/* Task573 (kullanıcı: "yeni temada avatar alanında görsel avatar alanını ortalamıyor, hoş
   görünmüyor") — ölçüldü: düğme 36×34, avatar 30 px ve SOLA yaslı (sağda 6 px dolgu);
   camda `.btn.btn-ghost` kabuğunun iç ışığı ve bulanıklığı bu kutuda kalıyor, ışık şeridi
   avatarın ortasına denk gelmiyordu. Avatar düğmesi camda kabuk almaz, dolgu simetrik. */
[data-theme='glass'] .topbar #auth-btn:has(.auth-av),
[data-theme='glass'] .topbar #auth-btn:has(.auth-av-ph) {
  box-shadow: none;
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* Task574 rev-2 (kullanıcı: "live now altında görünecek çizgiyi birebir turnuva ya da tarih
   altında görünen çizginin davranışı gibi yap") — takvimdeki gün/lig başlığının (`.hc-dh`)
   çizgisi neyse aynısı: 1px `--line2`, akışta 8px içeride, yapışıkken ekranı kaplar ve yazı
   yerinde kalır (Task565 kuralının aynısı). */
/* Task578 rev (kullanıcı: "live now altındaki çizgi altındaki maçın üst çizgisi gibi
   görünmüyor; diğer panellerde üst çizgi gibi görünüyor, live now'da da görünmeli") —
   çizgi BAŞLIKTAN alınır, ilk maç satırının ÜST KENARI olur (Task576'daki `#today`
   deseninin aynısı). */
@media (max-width: 640px) {
  main#content.cd-compact #live-section > .group-head {
    border-bottom: 0;
  }
  main#content.cd-compact #live-section .live-cards > .live-card:first-child {
    border-top: 1px solid var(--line2);
  }
}

/* Task574 (kullanıcı: "sayfa aşağı kayarken live now da kendi paneli bitene kadar yukarıda
   sabitlensin") — ölçüldü: takvim görünümünde canlı başlığı `--sticky-top`'a yapışıyor ama
   orası TAKVİM ŞERİDİNİN altı; başlık şeridin arkasında kalıyordu. Takvim kipinde yapışma
   noktası şeridin altı olur (gün başlığıyla aynı kural). */
main#content #live-section.live-band-cal > .group-head {
  top: calc(var(--sticky-top, 66px) + var(--cal-head-h, 46px));
}

/* Task572 (kullanıcı: "mobil görünümde TEMA BAĞIMSIZ ana sayfadaki başlık alanlarının
   yükseklikleri biraz daraltılabilir mi, ekranda çok geniş yer kaplıyorlar; birbirlerinden
   farklı yükseklikte olan varsa onlar da uyumlu hale gelsin") — ölçüldü: başlık bandı 31px
   (8/4 dolgu + 18px satır), bantlar arası 16px ızgara boşluğu ve CANLI panelinin başlıkla
   arası fazladan 14px'ti (diğerlerinde 0). Üçü de tek elden: bant 24px, boşluk 10px, canlı
   paneli diğerleriyle aynı hizada. Tema bağımsız — mobil ölçü kuralı. */
@media (max-width: 640px) {
  main#content {
    row-gap: 10px;
  }
  /* Özgüllük: bant başlıkları `main#content #fav-section > .group-head` (2,1,1) ile
     yazılmış — dolgu gerçekten kısılsın diye aynı bağlamda tekrarlanır. */
  main#content #live-section > .group-head,
  main#content #fav-section > .group-head,
  main#content #watch-section > .group-head,
  main#content #today-section > .group-head,
  main#content .group-head {
    padding: 5px 2px 3px;
  }
  main#content .group-head h2 {
    line-height: 16px; /* tam sayı (Task551 dersi: kesirli taban 1px oynatıyor) */
  }
  /* Takvim görünümündeki gün/lig başlığı da aynı ölçüye gelir (bantlarla uyumlu olsun) */
  main#content .hc-dh {
    padding-top: 5px;
    padding-bottom: 5px;
    line-height: 16px;
  }
  main#content #live-section .live-cards {
    margin-top: 0;
  }
  /* Canlı panelinde satır ayracı diğer panellerle aynı: kullanıcı "canlı panelinde neden
     diğer panellerdeki gibi maçların üst ve alt kısmında çizgi görmüyorum" dedi — ölçüldü:
     `:last-child` kuralı tek maçlık panelde çizginin TAMAMINI siliyordu. */
  .cd-compact .live-band .live-card:last-child {
    border-bottom: 1px solid var(--line2);
  }
  /* rev (kullanıcı: "live now altında görünen ince çizgiyi kaldır") — başlığın hemen
     altındaki çizgi kalktı; satır ayracı (altta) diğer panellerdeki gibi kalır. */
  /* rev-2 (kullanıcı: "live now maç satırlarının üst ve altındaki çizgiler diğer
     maçlardaki gibi ekranın sağ ve soluna yaslansın") — ölçüldü: canlı paneli 6px yan
     dolgu taşıyordu, satır 6–384 arasındaydı; diğer paneller 0–390. Dolgu kalkar. */
  /* Özgüllük: `main#content .live-cards` (1,1,1) yan dolguyu yazıyor — aynı bağlamda. */
  main#content.cd-compact .live-band .live-cards {
    padding-left: 0;
    padding-right: 0;
    /* Task575 (kullanıcı: "live now panelinde en alttaki maçın alt çizgisinin altına panel
       taşıyor gibi görünüyor; panel son maçın alt çizgisiyle bitmeli") — ölçüldü: 10px alt
       dolgu paneli satırın çizgisinden aşağı uzatıyordu. */
    padding-bottom: 0;
  }
}

/* Task570 (kullanıcı: "başlık ve üzerinde buton bulunan alanların background'ları en
   alttaki background üzerinde net ayrılıyor; arkadaki background'a biraz geçişli olsun, net
   ayrım çizgisi o kadar belli olmasın") — AKIŞTA duran bantlar artık düz dikdörtgen değil:
   üstte ve altta zemine karışan dikey gradyan. YAPIŞIKKEN opak kalır (altından kayan
   satırlar okunmasın — Task565 kuralı). */
[data-theme='glass'] main#content #live-section > .group-head:not(.is-stuck),
[data-theme='glass'] main#content #fav-section > .group-head:not(.is-stuck),
[data-theme='glass'] main#content #watch-section > .group-head:not(.is-stuck),
[data-theme='glass'] main#content #today-section > .group-head:not(.is-stuck),
[data-theme='glass'] main#content .group-head:not(.is-stuck),
[data-theme='glass'] main#content .hc-dh:not(.is-stuck) {
  background: linear-gradient(
    180deg,
    color-mix(in srgb, var(--bg2) 0%, transparent),
    var(--bg2) 38%,
    var(--bg2) 62%,
    color-mix(in srgb, var(--bg2) 0%, transparent)
  );
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}

/* Task565 — YAPIŞAN başlık ekranı kaplar. Kullanıcı: "sabitlenen başlığın sağında solunda
   boşluk kalmasın ekranı kaplasın ama başlığın başlangıç yeri iyi, o sola ya da sağa
   kaymasın" → yan boşluk MARJDAN dolguya geçer: zemin kenara kadar gider, yazı yerinde
   kalır. Yalnız yapışıkken; akışta duran başlıkta alt çizgi kartlarla hizalı kalmalı.
   Sınıf JS'ten gelir (CSS'te "yapıştı mı" seçicisi yok). */
main#content .hc-dh.is-stuck {
  margin-inline: 0;
  padding-inline: 8px;
}
/* Yapışıkken zemin OPAK ve üst kenar ÇUBUĞA SIFIR: kullanıcı "üstünde çok küçük bir açıklık
   var, alttan kaydırılan kayıtların geçtiği anlaşılıyor, onu da banner'a sıfırla" dedi.
   Camda perde saydamdı — yapışıkken kapanır. */
/* Özgüllük notu: camın başlık kuralı bölüm kimliğiyle yazılmış (`#content #fav-section`),
   yani (2,2,2). Yapışık kural onu yenmeli — aynı bağlamda ve `.is-stuck` ile yazılır. */
main#content #live-section > .group-head.is-stuck,
main#content #fav-section > .group-head.is-stuck,
main#content #watch-section > .group-head.is-stuck,
main#content #today-section > .group-head.is-stuck,
main#content .hc-dh.is-stuck,
main#content .group-head.is-stuck {
  background: var(--bg2);
  backdrop-filter: none;
  -webkit-backdrop-filter: none;
}
main#content #live-section > .group-head.is-stuck::before,
main#content #fav-section > .group-head.is-stuck::before,
main#content #watch-section > .group-head.is-stuck::before,
main#content #today-section > .group-head.is-stuck::before,
main#content .hc-dh.is-stuck::before,
main#content .group-head.is-stuck::before {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  bottom: 100%;
  height: 12px;
  background: var(--bg2);
  pointer-events: none;
}

/* Task151 — Aynı sadeleştirme ANA SAYFA TAKVİM görünümünde de: kullanıcı "listedeki dış
   paneli sadeleştirme takvim tabında da yapılabilir" dedi. Takvim paneli de çerçevesiz;
   gün başlıkları bölüm etiketi gibi kalır, kartlar doğrudan sayfa zemininde. */
#home-calendar {
  background: none;
  border: 0;
  box-shadow: none;
  border-radius: 0;
  overflow: visible;
}
main#content #home-calendar.hc-wrap {
  padding: 0;
}
/* Kart genişliği listedekiyle aynı olsun: `main#content .live-cards` dolgusu burada da
   sıfırlanır (ölçüm: 354 vs 366). */
main#content #home-calendar .hc-cards {
  /* Task586 rev (kullanıcı: "en üstteki çizgilerde arada bir dalgalanma") — ilk satırın
     üst çizgisi cam panelin (kalıcı katman) üst kenarıyla çakışıyordu (0.00); 1px üst
     dolgu çizgiyi katmanın içine alır. */
  padding: 1px 0 0;
}

/* --- Task142 — Stadyum kartı ---------------------------------------------------------
   Kullanıcı: "Takımların stadları da üzerine tıklanabilir olsun; stada tıklanınca stad
   kartı açılsın, son 10 maç doluluk oranları, genel doluluk ortalaması ve stada özgü
   detaylar görseli kuvvetli bir şekilde verilsin." */
.mi-venue {
  cursor: pointer;
  touch-action: manipulation;
}
@media (hover: hover) {
  .mi-venue:hover {
    color: var(--accent);
  }
}
.vn-head {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 10px;
  /* Task166 — Sağ dolgu KAPAT düğmesi kadar: hakem kartında "0.14" ortalaması ✕ ile
     15px çakışıyordu (ölçüldü). Panel kenarına teğet içerik olmaz (ilke 4). */
  padding: 10px 42px 10px 12px;
  border-radius: 14px;
  background: var(--panel2);
  border: 1px solid var(--line2);
}
.vn-ico {
  font-size: 20px;
}
/* Task205 — stad/hakem başlık ikonu artık SVG (emoji değil): boyut punto ile değil
   doğrudan verilir, `currentColor` sayesinde her temada doğru renkte çizilir. */
.vn-ico svg {
  width: 20px;
  height: 20px;
}
.mi-it svg,
.mi-chip svg {
  width: 15px;
  height: 15px;
  flex: none;
}
.vn-id {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
/* Task176 — Kullanıcı: "Takım kartında, maç detayında ve stad kartında stadın adı çok
   uzunsa ikinci satıra inmesine izin verme, ... ile kes." (Ör. Fenerbahçe'nin stadı:
   "Ülker Stadyumu Fenerbahçe Şükrü Saracoğlu Spor Kompleksi") */
.vn-name {
  font-size: 14px;
  font-weight: 900;
  line-height: 1.2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.vn-sub {
  font-style: normal;
  font-size: 11px;
  color: var(--muted);
}
/* Task197 — Halka `.cc-ring` üzerinden geliyor ve orada `grid-area: ring` tanımlı (TD
   kartının ızgarası için). Stadyum başlığında öyle bir ALAN YOK: tarayıcı örtük satır/sütun
   açıyordu — ölçüldü: ızgara 5 sütun × 2 satıra çıkıyor, halka alt satıra düşüyor ve başlık
   120px'e uzayıp boş alan bırakıyordu (kullanıcı "kaymış, hoş görünmüyor" dedi). */
.vn-head .cc-ring {
  grid-area: auto;
}
.vn-ring {
  width: 58px;
  height: 58px;
}
.vn-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  margin: 10px 4px 0;
}
/* Rekor satırı: en yüksek seyirci — altın vurgulu */
.vn-rec {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  gap: 6px 8px;
  margin: 10px 0 0;
  padding: 8px 11px;
  border-radius: 12px;
  background: color-mix(in srgb, var(--gold) 12%, var(--panel2));
  border: 1px solid color-mix(in srgb, var(--gold) 35%, var(--line2));
  font-size: 11.5px;
}
.vn-rec-k {
  font-style: normal;
  font-weight: 900;
  color: var(--gold);
  text-transform: uppercase;
  letter-spacing: 0.4px;
  font-size: 10px;
}
.vn-rec b {
  font-size: 15px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.vn-rec-m {
  color: var(--muted);
}
.vn-chip {
  font-style: normal;
  font-weight: 900;
  font-size: 10.5px;
  padding: 0 6px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--gold) 22%, transparent);
  border: 1px solid color-mix(in srgb, var(--gold) 45%, transparent);
  color: var(--gold);
}
.vn-list {
  display: grid;
  gap: 6px;
}
.vn-row {
  display: grid;
  /* Task155 — Sütunlar: tarih · rakip · sonuç+skor · doluluk şeridi · seyirci.
     Seyirci sütunu "37.407 %70" için 78px'ti ve SOLDAN TAŞIYORDU (kullanıcı bildirdi). */
  grid-template-columns: 62px 1fr auto minmax(70px, 96px) auto;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  font-size: 11.5px;
  cursor: pointer;
  touch-action: manipulation;
}
.vn-d {
  color: var(--muted);
  white-space: nowrap;
}
.vn-o {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}
.vn-o b {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.vn-o img,
.vn-o .crest {
  width: 18px;
  height: 18px;
  flex: none;
}
.vn-sc {
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  text-align: center;
}
/* Doluluk şeridi: satır satır karşılaştırma tek bakışta okunsun */
.vn-bar {
  height: 7px;
  border-radius: 999px;
  background: var(--line2);
  overflow: hidden;
}
.vn-bar i {
  display: block;
  height: 100%;
  background: var(--accent);
}
.vn-at {
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  gap: 5px;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.vn-at b {
  font-weight: 900;
}
/* Yüzde artık düz metin değil, kendi çipinde (kullanıcı: "çok düz metin gibi") */
.vn-pct {
  font-style: normal;
  font-size: 10px;
  font-weight: 900;
  padding: 1px 6px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--accent) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent) 42%, transparent);
  color: var(--accent);
}
/* Sonuç rozeti skorun solunda; sıralamada kayma olmasın diye sabit genişlik */
.vn-sc {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  white-space: nowrap;
}
@media (max-width: 520px) {
  .vn-row {
    grid-template-columns: 52px 1fr auto;
    row-gap: 6px;
  }
  .vn-bar {
    grid-column: 1 / 3;
  }
  .vn-at {
    grid-column: 3;
  }
}
/* Seyirci verisi olmayan maç: boş şerit çizilmez ("%0" gibi okunmasın), yalnız "–" kalır */
.vn-row.vn-nodata .vn-bar {
  background: none;
}

/* --- Task153 — Stadyum künyesi çipi ---------------------------------------------------
   Kullanıcı: "Stadyuma tıklanabilir olduğu anlaşılamıyor ve kapasite çok düz metin gibi
   belirtilmiş." Teknik direktör çipiyle AYNI dil: ikon + ad + renkli kapasite çipi + ok.
   İkon emoji değil, tema uyumlu SVG (ilke 3). */
.vnm {
  /* `inline-flex` iken uzun stadyum adı kutuyu taşırıyordu (ölçüldü: kapasite çipi ve ok
     ekran dışında kaldı). Blok akışında durunca ad kısalır, çip ve ok hep görünür. */
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 8px 12px 0;
  padding: 5px 10px 5px 9px;
  border-radius: 999px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  min-width: 0;
}
/* Uzun stadyum adı kutuyu değil, ADI kısaltmalı: flex çocukların varsayılan
   `min-width: auto` değeri küçülmeyi engelliyordu ve BAŞLIK ŞERİDİ 390px ekranda 595px'e
   çıkıyordu (ölçüldü). Zincirin her halkasına `min-width: 0` verilir. */
#team-head {
  min-width: 0;
}
#team-head .vnm {
  flex: 1 1 auto;
  min-width: 0;
  max-width: 100%;
  margin-inline: 12px;
}
.vnm-id {
  min-width: 0;
}
@media (max-width: 720px) {
  #team-head .vnm {
    margin-inline: 0;
  }
}
.vnm-ico {
  display: inline-flex;
  color: var(--muted);
  flex: none;
}
.vnm-ico svg {
  width: 16px;
  height: 16px;
}
.vnm-id {
  display: flex;
  flex-direction: column;
  min-width: 0;
  line-height: 1.15;
}
.vnm-name {
  font-size: 12.5px;
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.vnm-city {
  font-style: normal;
  font-size: 10.5px;
  color: var(--muted);
}
/* Kapasite artık düz metin değil: rakam öne çıkar, birim küçük ve soluk */
.vnm-chip {
  flex: none;
  display: inline-flex;
  align-items: baseline;
  gap: 3px;
  font-style: normal;
  font-size: 12px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  padding: 1px 8px;
  border-radius: 999px;
  background: color-mix(in srgb, var(--accent) 16%, transparent);
  border: 1px solid color-mix(in srgb, var(--accent) 45%, transparent);
  color: var(--accent);
}
.vnm-chip span {
  font-size: 9px;
  font-weight: 700;
  opacity: 0.85;
}
@media (max-width: 400px) {
  .vnm-chip span {
    display: none; /* dar ekranda yalnız rakam (birim ipucunda) */
  }
}

/* --- Task156 — Doluluk çubuğu YÜZDEYE GÖRE renk ---------------------------------------
   Kullanıcı: "Stadyum kartındaki seyirci datası belirli yüzdelere göre grafik rengi
   değişsin, progressbar gibi olan." Kuşaklar `occupancyBand` içinde (adlandırılmış eşik):
   %85+ dolu tribün (yeşil) · %65+ yüksek (accent) · %40+ orta (altın) · altı düşük (kırmızı). */
.vn-bar i.vn-b-full {
  background: var(--green);
}
.vn-bar i.vn-b-high {
  background: var(--accent);
}
.vn-bar i.vn-b-mid {
  background: var(--gold);
}
.vn-bar i.vn-b-low {
  background: var(--red);
}
/* Ortalama doluluk HALKASI da aynı kuşak rengini kullanır (tek görsel dil) */
.cc-ring.vn-b-full {
  background: conic-gradient(var(--green) var(--deg, 0deg), var(--line2) 0);
}
.cc-ring.vn-b-high {
  background: conic-gradient(var(--accent) var(--deg, 0deg), var(--line2) 0);
}
.cc-ring.vn-b-mid {
  background: conic-gradient(var(--gold) var(--deg, 0deg), var(--line2) 0);
}
.cc-ring.vn-b-low {
  background: conic-gradient(var(--red) var(--deg, 0deg), var(--line2) 0);
}
/* Task158 — Maç detayı künyesinde TIKLANABİLİR satır (stadyum / teknik direktör) */
.mi-link {
  cursor: pointer;
  touch-action: manipulation;
}
.mi-chev {
  display: inline-flex;
  color: var(--muted);
  vertical-align: -3px;
}
.mi-chev svg {
  width: 13px;
  height: 13px;
}
@media (hover: hover) {
  .mi-link:hover {
    color: var(--accent);
  }
}

/* --- Task157 — Kadro değeri karşılaştırma şeridi ------------------------------------
   Kullanıcı: "Kadro tabında iki takımın kadro değerlerini görmek istiyorum, bu alan çok
   dolu, en uygun yeri sen öner." Seçilen yer: TAKIM ANAHTARININ HEMEN ALTI — iki takım
   zaten orada yan yana ve saha/yedek listesine dokunulmuyor. Dil, maç istatistiklerindeki
   karşılaştırma çubuklarının aynısı. */
.lsv {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 4px 10px;
  margin: 8px 12px 0;
}
.lsv-v {
  font-size: 13px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.lsv-h {
  text-align: left;
  color: var(--accent);
}
.lsv-a {
  text-align: right;
  color: var(--gold);
}
.lsv-k {
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.4px;
  color: var(--muted);
  white-space: nowrap;
}
.lsv-bar {
  grid-column: 1 / -1;
  display: flex;
  gap: 3px;
  height: 6px;
}
.lsv-bar i {
  display: block;
  height: 100%;
  border-radius: 999px;
}
.lsv-bh {
  background: var(--accent);
}
.lsv-ba {
  background: var(--gold);
  margin-left: auto;
}

/* --- Task160 — Künyede TIKLANABİLİR parça: çip görünümü ------------------------------
   Kullanıcı: "Stada tıklanabildiği anlaşılmıyor, TD'ye tıklayamadım; ikisi de tıklanabilir
   ve tıklanabildiği anlaşılır olmalı AMA çok genişleyip dikkati dağıtmamalı (ekran dolu)."
   Çözüm: satır yüksekliği AYNI kalır; yalnız ince kenarlık, hafif zemin ve küçük bir ok
   eklenir — göz "bu bir düğme" der, alan büyümez. */
.mi-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  /* Task166 — Şerit tümüyle `--muted`; TIKLANABİLİR çip bu soluk rengi MİRAS ALIYORDU
     (kullanıcı: "stad ve hakem neden silik görünüyor?"). Çipin kendi rengi vardır. */
  color: var(--text);
  padding: 3px 8px 3px 7px;
  border-radius: 999px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  cursor: pointer;
  touch-action: manipulation;
}
@media (hover: hover) {
  .mi-chip:hover {
    border-color: color-mix(in srgb, var(--accent) 55%, var(--line2));
    color: var(--accent);
  }
}
.lu-coach.mi-chip {
  width: fit-content;
  margin-inline: auto;
}
.cc-note {
  margin: 8px 2px 0;
  font-size: 11.5px;
}

/* --- Task161 — Hakem kartı ------------------------------------------------------------
   Kartlar/goller kendi olay verimizden sayılıyor; kart dili stadyum kartıyla aynı.

   Task166 — Kullanıcı: "Hakem kartında hakemin maç başına kırmızı ve sarı kart ortalaması
   da görünsün." Künyedeki tek ortalama (eski `.rf-big`) yerini SARI+KIRMIZI ikilisine
   bıraktı; kart renkleri ANLAMSAL renktir (ilke 3 istisnası) ve sayının ne olduğunu
   etiketsiz anlatır. Eski `.rf-big` kuralları kullanılmadığı için silindi. */
.rf-avg {
  display: grid;
  padding: 5px 10px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  grid-template-columns: auto auto;
  justify-items: center;
  align-items: center;
  gap: 2px 10px;
}
.rf-avg-p {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.rf-avg-p b {
  font-size: 16px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.rf-cd {
  width: 9px;
  height: 13px;
  border-radius: 2px;
  display: inline-block;
}
.rf-cd-y {
  background: #f5c518;
}
.rf-cd-r {
  background: var(--red);
}
.rf-avg-k {
  grid-column: 1 / -1;
  font-style: normal;
  font-size: 9.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
  white-space: nowrap;
}
.rf-row {
  display: grid;
  grid-template-columns: 56px 1fr auto;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  font-size: 11.5px;
  cursor: pointer;
  touch-action: manipulation;
}
.rf-m {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
}
.rf-m b {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rf-m img,
.rf-m .crest {
  width: 18px;
  height: 18px;
  flex: none;
}
.rf-sc {
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.rf-cards {
  display: inline-flex;
  gap: 4px;
}
.rf-cards i {
  font-style: normal;
  font-size: 10.5px;
  font-weight: 900;
  min-width: 18px;
  text-align: center;
  border-radius: 4px;
  padding: 1px 4px;
}
.rf-y {
  background: var(--gold);
  color: #241a00;
}
.rf-r {
  background: var(--red);
  color: #fff;
}
/* Task275 — penaltı çipi: kart çipleriyle aynı biçim, nokta rengi accent (anlam: penaltı
   kart değil; sarı/kırmızıyla karışmasın). */
.rf-p {
  background: color-mix(in srgb, var(--accent) 22%, transparent);
  color: var(--accent);
  border: 1px solid color-mix(in srgb, var(--accent) 45%, transparent);
}
.rf-note {
  margin: 8px 2px 0;
  font-size: 11px;
}

/* --- Task163 — COMPACT MOD: maç kartı tek satırda ------------------------------------
   Kullanıcı: "Ana sayfada liste/takvim satırına bir compact mode aç-kapa ekleyelim; maç
   kartlarını 1 satırda gösterip etrafındaki çizgileri yeniden düzenleyen ya da kaldıran
   bir özellik, hem listede hem takvimde geçerli. İlk sürümde tarih, saat ve takımlar
   olsun; sonra ne ekleyeceğimize bakarız."

   İlk sürüm: kart çerçevesi kalkar, satırlar arasında ince ayraç kalır; üst satırın
   TAMAMI (lig çipi, geri sayım, tarih, ikonlar, marka) gizlenir, geriye SAAT + takımlar +
   skor kalır. İşaretleme değişmez — yalnız görünüm; böylece tıklama/tazeleme yolları aynı. */
.cd-compact .live-card {
  background: none;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  padding: 7px 6px;
  border-bottom: 1px solid var(--line2);
  /* Task164 — Satır aralıkları EŞİT: içeriğe göre (rozet var/yok, ad iki satıra düşer)
     yükseklik değişiyordu; sabit taban yükseklik satırları hizalar. */
  min-height: 38px;
}
.cd-compact .live-cards {
  gap: 0;
}
/* Üst satırlar gizlenir: geri sayım/lig/tarih/ikonlar compact modda yer kaplamasın */
.cd-compact .lc-cd-wrap,
.cd-compact .lc-pen {
  display: none;
}
/* Task230 — Sağ sütun MOBİLDE de görünür: kullanıcı "compact görünümde en sağda Skorinho
   ikonları görünsün" dedi. Eskiden yer olmadığı için gizliydi; adlar artık kesildiği için
   (Task228) yer açıldı. İkonlar sıkışmasın diye mobilde yalnız Skorinho + izleme kalır. */
.cd-compact .lc-side-r {
  display: inline-flex;
  align-items: center;
  flex: none;
  gap: 4px;
  max-width: 100%;
  /* DİKKAT: burada `overflow: hidden` YOKTUR. Vardı ve Skorinho ikonunu kırpıyordu:
     `.m-acts` fikstür bağlamından gelen kurallarla 2px yüksekliğe çöküyor, kırpma da
     17px'lik ikonu 2px'lik bir ŞERİDE indiriyordu — kullanıcı bunu "logo tire olarak
     görünüyor" diye bildirdi (piksel ölçümüyle doğrulandı). */
}
/* İkon grubunun kendi yüksekliği olsun: çökmüş kapta ikon hizasız/kırpık kalıyordu.
   Task299 — sabit TABAN genişlik: bitmiş satırda 2 ikon (46 px), başlamamışta 4 ikon
   (98 px) olunca takım sütunu satırdan satıra kayıyordu (kullanıcı bildirdi; Task295
   deseninin live-card karşılığı). En geniş küme esas, ikonlar sağa yaslı. */
.cd-compact .lc-side-r .m-acts {
  display: inline-flex;
  align-items: center;
  justify-content: flex-end;
  min-height: 24px;
  min-width: 98px;
}
/* Task304 (kullanıcı) — kadro ikonu (.lu-sign) m-acts'ın DIŞINDA: ikonlu satırda sağ
   küme genişleyip takım+skoru sola itiyordu. Küme genişliği ikon payıyla sabitlenir
   (ölçüldü: kadrolu küme 138px — 36px ikon + 4px gap + 98px m-acts). */
.cd-compact .lc-side-r {
  justify-content: flex-end;
  min-width: 138px;
}
/* Task230 (düzeltme) — Mobilde YALNIZ SKORİNHO düğmesi kalır. Önce `m-acts` toptan
   gizlenmişti ama Skorinho düğmesi (`.pick-btn`) TAM ONUN İÇİNDE: ekranda kalan
   `lu-sign` KADRO ikonuydu, kullanıcının istediği değil (ölçümle görüldü).
   Kadro ikonu, paylaş, takvim ve haber/izle ikonları mobilde gizlenir. */
@media (max-width: 759px) {
  /* Task509 — lig nişanı tahmin düğmesinin YUVASINDA durur; o yüzden bu gizlemenin
     dışında kalır (başlamış maçta düğme yok, yerini nişan alır). */
  .cd-compact .lc-side-r .lu-sign,
  .cd-compact .lc-side-r .m-acts > *:not(.pick-btn):not(.lc-acts-lig) {
    display: none;
  }
  /* Dokunma alanı tahmin düğmesiyle aynı (17 + 2×8 = 33 px) */
  .cd-compact .lc-side-r .lc-acts-lig {
    padding: 8px 6px;
    margin: -8px 0;
  }
  /* Task299 — mobilde küme yalnız Skorinho düğmesi; bitmiş maçta düğme hiç yok (0 px)
     ve satır 29 px sola kayıyordu. Dokunma kutusu kadar yer her satırda ayrılır.
     Task304 — geniş ekrandaki 138px kadro-ikonu payı mobilde geçersizdir (ikon gizli). */
  .cd-compact .lc-side-r,
  .cd-compact .lc-side-r .m-acts {
    min-width: 33px;
  }
  /* Skorinho düğmesi dar ekranda yalnız İKON: "Skorinho" yazısı yer kaplamasın */
  .cd-compact .lc-side-r .pick-btn .pick-word {
    display: none;
  }
  /* Dokunma alanı SİMETRİK büyür. Devralınan kural kutuyu yalnız YUKARI büyütüyordu
     (`padding: 19px 9px 4px; margin: -19px 0 -4px`) ve ikon satırın 8px yukarısına
     kayıyordu (ölçüldü; kullanıcı bildirdi). Simetrik pay hem hizayı düzeltir hem de
     dokunma yüksekliğini korur (17 + 2×8 = 33px). */
  .cd-compact .lc-side-r .pick-btn {
    padding: 8px 6px;
    margin: -8px 0;
  }
}
@media (min-width: 760px) {
  .cd-compact .m-acts {
    display: inline-flex;
  }
  /* Task509 — BAŞLAMIŞ satırda takvim düğmesi yok; yeri boş bırakılır ki ikon SÜTUNLARI
     satırdan satıra kaymasın (ölçüldü: lig nişanı 23 px sağa kayıyordu). */
  .cd-compact .live-card:not(.scheduled) .lc-side-r .m-acts::after {
    content: '';
    width: 25px; /* ölçüldü: 23 px'te 2 px fark kalıyordu (91 ↔ 93) */
  }
}
/* Task164 (kullanıcı düzeltmesi) — "Compact modda listede tarih+saat solda çok yer
   kaplamış." Tarih GİZLENİR, solda yalnız saat/dakika rozeti kalır. Bu aynı zamanda üst
   satırdaki öğe sayısını üçe indirip ızgaranın tek satıra oturmasını sağlar (dört öğe
   varken kart iki satıra düşüyordu: 35 → 64px ölçüldü). */
.cd-compact .lc-top .lc-meta {
  display: none;
}
/* Saat rozeti ve takımlar TEK SATIRDA: saat solda, takımlar ortada */
.cd-compact .lc-top {
  display: contents;
}
/* Task164 — SKOR sayfanın tam ortasında olmalı (kullanıcı bildirdi: 50px sağa kayıktı).
   Kart üç sütun: SOL (saat+tarih) · ORTA (takımlar+skor) · SAĞ (ikonlar). Yan sütunlar
   eşit (1fr) olduğu için orta sütun sayfanın merkezine oturur; `.lc-row` de kendi içinde
   üç sütun olduğu için skor ortanın da tam ortasında kalır. */
.cd-compact .live-card {
  display: grid;
  /* Task228 — Orta sütun (takım adları) küçülebilir olmalı: varsayılan `min-width: auto`
     uzun deplasman adında ("Wolverhampton Wanderers") sayfayı 41px sağa itiyordu.
     YAN sütunlar ise `auto` alt sınırını KORUR: aksi hâlde orta sütun onlardan yer çalıyor
     ve ad soldaki "MS" rozetinin üstüne biniyordu (ölçüldü: 6 kartta 24,7px'e kadar). */
  /* Yan sütunlara TABAN: uzun adlarda orta sütun yanlardan yer çalıp ızgarayı
     "0px 362px 0px" hâline getiriyordu ve ad soldaki "MS" rozetinin üstüne biniyordu
     (ölçüldü). 38px rozetin (33px) sığdığı en küçük değer. */
  /* Task305 (kullanıcı) — ":" ve saat HER ZAMAN satırın TAM ORTASINDA: yan sütunlar
     içerik-genişliğindeyken (auto) sol rozetin/sağ ikonların değişen genişliği orta
     sütunu itiyordu. Yanlar EŞİT SABİT (en geniş içerik esas: sağ küme 138px, webde
     "⏳ Yakında + tarih" de sığar); mobil karşılığı aşağıdaki media bloğunda 44px. */
  grid-template-columns: 138px minmax(0, 1fr) 138px;
  align-items: center;
  gap: 8px;
}
@media (max-width: 759px) {
  /* Task360 (kullanıcı: "takım adı uzun olunca solda saate dokunmuş") — saat hapı 49px
     genişliğinde ve 40px'lik sütundan TAŞIYORDU; uzun adda orta sütun sola yaklaşınca
     hapın üstüne biniyordu (ölçüldü: hap 10-59, ad 58'de başlıyor). Sütunlar hapın
     sığdığı en küçük ölçüye çıkar; iki yan sütun EŞİT kalır ki skor tam ortada dursun. */
  .cd-compact .live-card {
    /* Task361 — sol sütunda artık TARİH var (~32px), sağda Skorinho ikonu (33px):
       52px gereksiz genişti, 46px'e inince kazanılan 12px takım adlarına gitti.
       Task362 rev (kullanıcı: "ad alanını 15px genişlet") — ÖLÇÜLEN tabanlar: sol
       hücrede en geniş içerik 34px (tarih "07 Ağu"; rozet 33px, lig logosu 20px),
       sağ ikon kümesi 33px. Sütun 36px'e inince ikisinde de en az 2px pay kalır ve
       kazanılan 20px takım adlarına gider. */
    grid-template-columns: 36px minmax(0, 1fr) 36px;
  }

  /* Task362 rev — ad alanı için kalan paylar toplanır. Bu ölçülerin SADE görünüm için
     genel bir değeri var ve o kurallar kaynakta DAHA SONRA geliyor; medya sorgusu
     özgüllük eklemediği için burada `main#content` ile özgüllük artırılır (aksi hâlde
     kural yazılır ama uygulanmaz — ölçüldü). Geniş ekran etkilenmez. */
  main#content.cd-compact .crest,
  main#content.cd-compact .lc-row img {
    width: 18px;
    height: 18px;
  }
  main#content.cd-compact .lc-half {
    gap: 1px;
  }
  main#content.cd-compact .lc-row {
    column-gap: 2px;
  }
  /* Şerit 4px; 8px dolgu içeriği şeritten uzak tutmaya yeter (10px'ti). */
  main#content.cd-compact .live-card,
  main#content.cd-compact .live-card.fav-match,
  main#content.cd-compact .live-card.watch-match {
    padding-left: 8px;
  }
  /* ---- Task362 rev-2 (kullanıcı: "5px daha genişlet; beğenmezsem geri alırım") ----
     Kalan payların tamamı toplanır. TEK BLOK: geri alınmak istenirse buradan sonraki
     kurallar silinir, önceki denge (ad alanı 106px @390) aynen döner. */
  main#content.cd-compact .live-card {
    /* Tarih punto 9 → 8.5px olduğu için sol hücrenin tabanı 34 → 32px'e indi. */
    grid-template-columns: 34px minmax(0, 1fr) 34px;
  }
  main#content.cd-compact .live-card.scheduled .lc-top .lc-meta {
    font-size: 8.5px;
  }
  /* Arma 16px'te KALIR: sütun/dolgu/boşluk payları hedefi zaten karşıladı, armayı
     daha da küçültmek tanınırlığı gereksiz yere düşürürdü (ölçüm: 15px ile +6px). */
  /* Kullanıcı: "sığmazsa ... değil de .. görünsün". CSS'in dizge biçimi (`text-overflow:
     '..'`) YALNIZ Firefox'ta var; Chrome 151 ve Safari desteklemiyor (ölçüldü:
     `CSS.supports('text-overflow', '\'..\'')` → false), o tarayıcılar `ellipsis`e düşer.
     Bildirim yine de yazılır: destekleyen tarayıcıda iki nokta çizilir, ötekilerde
     davranış değişmez. Kazanç zaten ~1px'tir; asıl yer aşağıdaki ölçülerden geldi. */
  main#content.cd-compact .lc-half .lc-nm {
    text-overflow: ellipsis;
    text-overflow: '..';
  }
  /* Arma 16 → 15px: kalan tek pay buydu (sütun 32px, saat hapı 37px, tarih 8px ve rozet
     dolgusu ölçülen tabanlarında). 15px'te arma hâlâ tanınıyor.
     Task469 — ad 12,5 → 11,5 px'e inince yatay pay açıldı: arma 15 → 17 px (kullanıcı
     denemesi: "adları 1 font küçültüp logoları bir tık büyütelim"). */
  main#content.cd-compact .crest,
  main#content.cd-compact .lc-row img {
    width: 17px;
    height: 17px;
  }
  /* Sol hücrenin tabanı: tarih 8px'te 30px, durum rozeti dar dolguyla 31px → sütun 32px
     (en az 2px pay korunur, hiza kuralları bozulmaz). */
  main#content.cd-compact .live-card {
    grid-template-columns: 32px minmax(0, 1fr) 32px;
  }
  main#content.cd-compact .live-card.scheduled .lc-top .lc-meta {
    font-size: 8px;
  }
  main#content.cd-compact .lc-meta.lc-meta-status .lc-badge {
    padding-left: 3px;
    padding-right: 3px;
  }
  main#content.cd-compact .live-card,
  main#content.cd-compact .live-card.fav-match,
  main#content.cd-compact .live-card.watch-match {
    padding-left: 4px;
    padding-right: 4px;
  }
  /* Saat 12 → 11.5px: hap 39 → 37px, orta boşluk da daralır (adlara +1px).
     TABULAR rakam ŞART: hap genişliği yazılan rakamlara göre değişiyordu ("13:34" ile
     "21:00" farklı ölçüyor); orta boşluk 1px payla kalınca denetleyici bir turda 24
     kusur bulup sonrakinde temiz dönüyordu. Sabit genişlikli rakamla ölçü belirlenimli. */
  main#content.cd-compact
    .live-card.scheduled
    .lc-top
    .lc-side:not(.lc-side-r)
    > .lc-badge.upcoming {
    font-size: 11.5px;
    font-variant-numeric: tabular-nums;
  }
  main#content.cd-compact .live-card.scheduled .lc-x,
  main#content.cd-compact .live-card.scheduled:has(.lc-agg) .lc-x {
    /* Pay hesabı: (orta boşluk − saat hapı) / 2 + satır boşluğu ≥ 2px olmalı.
       Hap tabular rakamla 37.4px; 38px + 2px boşluk → 2.3px pay (36 ve 37 denendi,
       ikisi de 1px'te kalıp denetleyiciye takıldı). */
    min-width: 38px;
  }
  main#content.cd-compact .live-card,
  main#content.cd-compact .live-card.fav-match,
  main#content.cd-compact .live-card.watch-match {
    padding-left: 6px;
    padding-right: 5px;
  }
  /* ---- Task362 rev-2 sonu ---- */
}
/* DİKKAT: sağ grup da `lc-side` sınıfını taşıyor (`class="lc-side lc-side-r"`), bu yüzden
   sol kural DIŞLAYICI yazılır — yoksa sağ grup da 1. sütuna itiliyor ve kart İKİ SATIRA
   düşüyordu (ölçüm: webde 64px, ızgara "21px 20px"). */
.cd-compact .lc-side:not(.lc-side-r) {
  grid-column: 1;
  grid-row: 1;
  justify-self: start;
}
/* Satır AÇIKÇA verilir: seyrek (sparse) yerleşimde 3. sütuna yerleşen sağ gruptan sonra
   imleç ilerlediği için `.lc-row` İKİNCİ SATIRA düşüyordu (ölçüm: ızgara "21px 20px"). */
.cd-compact .lc-row {
  grid-column: 2;
  grid-row: 1;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  align-items: center;
  justify-items: center;
  min-width: 0;
  /* Task228 — "logo skor : skor logo" fazla boşluklu duruyordu (kullanıcı). 8px → 5px,
     kullanıcı "hâlâ açık" deyince 5px → 3px. */
  column-gap: 3px;
}
/* Takım adı sığmıyorsa KESİLİR (…), satırı itmez — kullanıcı kuralı. */
.cd-compact .lc-half {
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
  gap: 2px; /* logo ile ad arası da sıkılaşır (temel 7px) */
}
.cd-compact .lc-half.home {
  justify-self: end;
}
.cd-compact .lc-half.away {
  justify-self: start;
}
.cd-compact .lc-side-r {
  grid-column: 3;
  grid-row: 1;
  justify-self: end;
}
/* Task179 — FAVORİ maç sade modda da belli olsun: solda altın ince şerit (kullanıcı:
   "liste compact görünümde favori takım belli olmuyor, takvim compactta belli oluyor").
   Canlı şerit AŞAĞIDA tanımlı: canlı maçta kırmızı kazanır (o an daha önemli bilgi). */
/* Sade modda da AYNI şerit (yukarıdaki `::before`) çizilir; burada yalnız içeriğin şeride
   binmemesi için sol boşluk verilir.
   Task307 (kullanıcı) — şeritli satır (favori/izleme/canlı) 10px, şeritsiz 6px başlıyordu:
   MS/dk rozetleri satırdan satıra 4px kayıyordu. Sol dolgu TÜM compact satırlarda eşit —
   şerit olsun olmasın içerik aynı eksende durur. */
.cd-compact .live-card {
  padding-left: 10px;
}
.cd-compact .live-card.fav-match,
.cd-compact .live-card.watch-match {
  padding-left: 10px;
}
/* CANLI maç compact modda da belli olsun: solda kırmızı ince şerit + canlı rozet zaten
   dakikayı gösteriyor (kullanıcı sordu: "canlı maç görünümü compact modda nasıl olacak?").
   Task305 rev — nokta compact'ta gizlenince canlılık hissi kayboldu (kullanıcı): şerit
   pseudo-elemente taşındı ve noktanın nabız animasyonunu O alır — genişlik maliyeti yok. */
.cd-compact .live-card.live {
  padding-left: 10px;
}
.cd-compact .live-card.live::before {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 3px;
  background: var(--red);
  animation: livePulse 2.2s ease-in-out infinite;
}
/* Task305 — compact rozet de pastel dille aynı (üstteki genel kuralın kopyası) */
.cd-compact .live-card.live .lc-badge.live {
  background: color-mix(in srgb, var(--red) 16%, transparent);
  color: color-mix(in srgb, var(--red) 72%, var(--text));
  border: 1px solid color-mix(in srgb, var(--red) 38%, transparent);
}
.cd-compact .lc-side {
  gap: 6px;
}
/* Saat rozeti compact modda sadeleşir: ikon gizlenir, dolgu küçülür — kazanılan yer
   takım ADLARINA gider (390px'te adlar kırpılıyordu). */
.cd-compact .lc-badge {
  font-size: 11px;
  padding: 1px 6px;
  gap: 0;
}
/* Task305 (kullanıcı: "ev sahibine daha fazla yer") — canlı rozetteki nokta compact'ta
   gizlenir, dolgu sıkılaşır: rozet ~10px inceldi, yan sütunlar 44→40px'e indi ve
   kazanılan genişlik orta sütundaki takım adlarına gitti. */
.cd-compact .lc-badge.live .lc-dot {
  display: none;
}
.cd-compact .lc-badge.live {
  padding: 1px 4px;
}
/* Task615 rev — DAKİKASIZ canlı (kaynak dakika vermiyor; durdurulup sürme, bayat akış):
   mobil sade satırda "CANLI" sözcüğü yerine yalnız yanıp sönen kırmızı nokta (kullanıcı
   kararı). Web ve normal görünümde sözcük kalır. */
@media (max-width: 759px) {
  .cd-compact .lc-badge.live.lc-noclock {
    background: none;
    border: 0;
    padding: 0;
  }
  .cd-compact .lc-badge.live.lc-noclock .min-a {
    display: none;
  }
  .cd-compact .lc-badge.live.lc-noclock .lc-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    background: var(--red);
  }
}
.cd-compact .lc-badge svg {
  display: none;
}
.cd-compact .lc-comp,
.cd-compact .lc-mw {
  display: none;
}
/* Task509 — istisna: tahmin düğmesinin yuvasındaki LİG NİŞANI sade görünümde de çizilir
   (kullanıcı isteği). Sınıfı `lc-comp` olduğu için yukarıdaki toplu gizlemeye takılıyordu. */
.cd-compact .m-acts .lc-acts-lig {
  display: inline-flex;
}
/* Takvim LİGE göre gruplandığında başlık zaten ligi söyler: nişan tekrar etmez */
main#content.cd-compact .hc-lig .m-acts .lc-acts-lig {
  display: none;
}
.cd-compact .lc-row {
  margin: 0;
  /* Task299 ek (kullanıcı: "rakamlarla : arası açık, satır compact ama veriler ayrık") —
     büyük karttaki 8px gap kompakt satırda skoru dağıtıyordu; sıkılaştırıldı. */
  gap: 3px;
}
/* Task469 (kullanıcı denemesi: "compact görünümde takım adlarını 1 font küçültüp takım
   logolarını bir tık büyütüp deneyebilir miyiz") — ad 12,5 → 11,5 px, arma 18 → 20 px.
   Kazanılan yatay pay adın kısalmasından geliyor; iki değer birlikte ayarlanır. */
.cd-compact .lc-nm {
  font-size: 11.5px;
}
/* Task228 — Rakam kutunun İÇİNDE ORTALANIR. Sola yaslıyken soldaki skorun rakamı ile
   ":" arası 18px, sağdaki 8px ölçülüyordu; kullanıcı "iki nokta uzaklıkları eşit değil"
   dedi. Sabit genişlik korunur (skor 1→10 olunca satır oynamasın). */
.cd-compact .score-box {
  /* 18px'ti; kutu daraldıkça rakam iki noktaya yaklaşır. Sabit genişlik KORUNUR ki
     skor 1→10 olunca satır oynamasın. */
  min-width: 14px;
  justify-content: center;
  text-align: center;
}
/* Task228 — Arma 20→18px: kazanılan yer takım ADINA gider (kullanıcı: "iki harf daha
   görünebilir"). 18px'te arma hâlâ tanınıyor (ölçüldü). */
.cd-compact .crest,
.cd-compact .lc-row img {
  width: 20px;
  height: 20px;
}
/* Takvimde gün başlığı da sadeleşir, kartlar bitişik akar */
.cd-compact .hc-day {
  margin-bottom: 6px;
}
.cd-compact .hc-dh {
  margin-bottom: 4px;
  padding-bottom: 4px;
}
/* Compact düğmesi: seçili değilken nötr, seçiliyken accent (görünüm düğmeleriyle aynı dil) */
/* Task164 — Kullanıcı: "Compact butonu sağa ya da sola yaslı olsun; liste/takvimle
   alakası yok, onlar sayfayı ortalamalı." Düğme akıştan çıkarılır (mutlak, sağda), böylece
   Liste|Takvim ikilisi sayfanın TAM ORTASINDA kalır.
   Task168 — Kullanıcı: "Compact butonunu EN SAĞA yasla." Konumlandırıcı ata artık
   anahtar kümesi değil SATIRIN KENDİSİ (`.home-switch`); düğme kümenin sağına değil
   satırın sağ ucuna oturur. 6px'lik iç boşluk maç kartlarının yan boşluğuyla aynı —
   düğme sayfa kenarına teğet durmaz (ilke 4). */
.home-switch {
  position: relative;
  /* `#content` ızgarası öğeleri ORTALIYOR; anahtar satırı içeriği kadar dardı (160px), bu
     yüzden "sağa yaslı" düğme kümenin hemen sağında kalıyordu. Satır tam genişlik olur ki
     düğme gerçekten EN SAĞA gitsin; Liste|Takvim içeride ortalanır. */
  justify-self: stretch;
  width: 100%;
}
.home-switch .pg-switch {
  width: fit-content;
  margin-inline: auto;
}
.hc-compact-btn {
  position: absolute;
  right: 6px;
  top: 50%;
  transform: translateY(-50%);
}
/* Task315 rev (kullanıcı) — compact düğmesi artık METİNLİ: "Sade" (eski "sadece ikon"
   kararı kullanıcı isteğiyle geri çevrildi; Canlı düğmesiyle aynı dil). */
.hc-compact-btn {
  padding: 6px 9px;
}
.hc-compact-btn-label {
  white-space: nowrap;
}

/* Task545 — DAR EKRANDA BOŞLUK KISILIR (kullanıcı: "takvim ikonu ile yazı arasındaki
   boşluk gibi boşlukları azaltarak da yer kazanılabilir"). Ölçüldü (390 px): Almanca/
   İspanyolca/İtalyanca'da Takvim ile Sade düğmeleri 262–289 px² üst üste biniyordu; kısa
   metinlerle birlikte bu kısma çakışmayı sıfırlıyor. Yükseklik değişmez (Task171). */
@media (max-width: 560px) {
  .home-switch .pg-sw-btn {
    gap: 4px;
    padding-inline: 9px;
  }
  .home-switch .hc-compact-btn {
    padding-inline: 8px;
  }
}
/* Task545 — ÇOK DAR EKRANDA (≤400 px) satır AKIŞA döner: "Canlı" ve "Sade" mutlak
   konumdan çıkar, üçlü küme yan yana dizilir. Mutlak konumda uzun sözcükler birbirinin
   ÜSTÜNE biniyordu (ölçüldü: 360 px'te İspanyolca 205 px², İtalyanca 109 px²); akışta
   çakışma FİZİKSEL OLARAK mümkün değil. Task164/168'in "Sade en sağda, Liste|Takvim
   ortada" düzeni geniş ekranlarda aynen korunur. */
@media (max-width: 400px) {
  /* Task550 rev (kullanıcı: "Listem + Takvim paneli ortalıyordu, o bozulmuş") — Task545'te
     satır `space-between` yapılmıştı; çakışma bitmişti ama ORTA KÜME sayfanın ortasından
     kaymıştı. Üç sütunlu ızgara ikisini birden verir: yan sütunlar EŞİT (`minmax(0,1fr)`)
     olduğu için orta küme sayfanın TAM ORTASINDA kalır, düğmeler ayrı sütunlarda
     olduğu için üst üste binemez. */
  .home-switch {
    display: grid;
    /* `1fr` (asgarisi içerik): yan sütunlar eşit → orta küme tam ortada; hücre
       içeriğinden dar olamadığı için düğmeler ÜST ÜSTE BİNEMEZ. */
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 6px;
    /* Mutlak düzendeki `left/right: 6px` payının karşılığı: düğmeler ekran kenarına
       teğet durmaz (ilke 4). */
    padding-inline: 6px;
  }
  .home-switch .hc-live-btn,
  .home-switch .hc-compact-btn {
    position: static;
    transform: none;
  }
  .home-switch .hc-live-btn {
    justify-self: start;
  }
  .home-switch .hc-compact-btn {
    justify-self: end;
  }
  .home-switch .pg-switch {
    margin-inline: 0;
    justify-self: center;
  }
  .home-switch .pg-sw-btn {
    padding-inline: 8px;
  }
}
/* Task550 rev — 360 px sınıfı telefonlarda İspanyolca/İtalyanca hâlâ 4-5 px taşıyordu
   (ölçüldü: 137 ve 41 px² çakışma). Son pay boşluklardan alınır; ortalama bozulmaz. */
@media (max-width: 380px) {
  .home-switch .pg-sw-btn {
    gap: 3px;
    padding-inline: 6px;
  }
  .home-switch {
    gap: 4px;
  }
}

/* --- Task166 — Künye çipinin okunurluğu + kapasite değeri ----------------------------
   Kullanıcı: "Maç detayındaki stad ve hakem neden silik görünüyor? Stadın kapasitesi düz
   text gibi görünmüş, adı altında renkli görünsün."
   NEDEN SİLİKTİ: `.dt-info { color: var(--muted) }` — şeridin tamamı soluk renkteydi ve
   TIKLANABİLİR çipler bu rengi miras alıyordu; tıklanabilir bir öğe, yanındaki pasif
   bilgiyle (seyirci, hava) aynı tonda kalıyordu. */
.mi-chip .mi-tx {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  min-width: 0;
  line-height: 1.15;
}
.mi-nm {
  font-weight: 800;
  font-size: 12.5px;
  /* Task176 — Uzun stadyum/hakem adı İKİNCİ SATIRA inmez, "…" ile kesilir (kullanıcı
     isteği). Task094'ün iki satırlık mobil kırpması aşağıda geçersiz kılınır. */
  display: block;
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.dt-info .mi-sub {
  font-style: normal;
  font-size: 10.5px;
  opacity: 1;
  color: var(--muted);
}
/* Kapasite artık "düz metin" değil: kendi renginde, tabular rakamlarla, adın ALTINDA. */
.dt-info .mi-cap {
  color: var(--accent);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
}
@media (hover: hover) {
  .mi-chip:hover .mi-nm {
    color: var(--accent);
  }
}
/* Task094'teki iki satır kırpması ÇİPLERE UYGULANMAZ: çip zaten iki satırlık bir yığın;
   `-webkit-box` onu tek sütuna çevirip alt değeri gizliyordu (ölçüldü). */
@media (max-width: 560px) {
  .dt-info .mi-chip {
    display: inline-flex;
    -webkit-line-clamp: none;
  }
  .dt-info .mi-chip .mi-nm {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }
}

/* --- Task168 — Sade modun kullanıcı düzeltmeleri ------------------------------------- */

/* 1) "Webde sağdaki ikonlar ve Skorinho üst üste binmiş; Skorinho'nun yazısı compact'ta
      olmasın, sadece ikonu olsun."
      NEDEN BİNİYORDU: `.live-card .m-acts .pick-btn` zengin kartta `position: absolute`
      (top 13 / right 14) — kartın sağ üstünde ayrı bir yerde duruyor. Sade satırda ikonlar
      da sağda olduğu için ikisi aynı yere düşüyordu (ölçüm: 65px çakışma). Sade modda
      buton AKIŞA döner, kardeş ikonlarla aynı sırada durur. */
.cd-compact .live-card .m-acts .pick-btn {
  position: static;
}
.cd-compact .live-card .pick-btn .pick-word {
  display: none;
}
/* Zengin kartta sağ dolgu, mutlak konumlu butona yer açıyordu; sade satırda buton akışta
   olduğu için o boşluk gereksiz (ölçüm: sağda 92px ölü alan). */
.cd-compact .live-card .m-acts {
  padding-right: 0;
}

/* 2) "Mobilde saat bilgisi skorun orada görünsün."
      Yaklaşan maçta orta hücre zaten BOŞ ("– : –"); saat oraya alınır, sol sütun boşalır
      ve takım adlarına yer açılır. Canlı/bitmiş maçta ortada GERÇEK skor var — orada
      rozet (dakika / MS) solda kalır, kırmızı şeridiyle birlikte. */
@media (max-width: 759px) {
  .cd-compact .live-card.scheduled .lc-side:not(.lc-side-r) {
    grid-column: 2;
    justify-self: center;
  }
  /* Boş skor kutuları gizlenir; ayraç YER TUTAR (görünmez) — saat rozeti tam bu boşluğa
     oturur, takım adları rozetin üstüne binmez. */
  .cd-compact .live-card.scheduled .lc-row .score-box {
    display: none;
  }
  .cd-compact .live-card.scheduled .lc-x {
    visibility: hidden;
    min-width: 54px;
  }
  /* Kullanıcı: "Compact mobil listede ay-gün detayını kaybettik; saatin fontunu küçültüp
     YÜKSEKLİĞİ BOZMAYACAK şekilde saatin üstünde gösterebilir miyiz?"
     Tarih, saatle AYNI hücreye (orta) yığılır: tarih üstte küçük, saat altta. Satır
     yüksekliği `min-height: 38px` ile sabit; içerik 38'i aşmasın diye bu satırlarda dikey
     dolgu 7 → 3px (ölçüm: tarih 11 + rozet 17 = 28px, dolguyla 34 < 38). */
  .cd-compact .live-card.scheduled {
    padding-top: 3px;
    padding-bottom: 3px;
  }
  /* Task361 — tarih artık SOL sütunda ve dikeyde ORTALI (saatle yer değiştirdi;
     eskiden orta sütunda üstte duruyordu). */
  .cd-compact .live-card.scheduled .lc-top .lc-meta {
    display: block;
    grid-column: 1;
    grid-row: 1;
    align-self: center;
    justify-self: stretch;
    width: fit-content;
    margin-inline: auto;
    text-align: center;
    font-size: 9px;
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: 0.2px;
    color: var(--muted);
    white-space: nowrap;
  }
  /* Task360 (kullanıcı) — saat hapı satırı DİKEYDE ORTALAR. Eskiden `end` idi (tarih
     solda, saat altındaydı); tarih orta sütuna taşınınca hap 6-7px aşağıda kalıyordu. */
  .cd-compact .live-card.scheduled .lc-side:not(.lc-side-r) {
    align-self: center;
  }
  /* Task360 rev (kullanıcı) — BAŞLAMAMIŞ maçta TARİH takım adlarının ARASINDA (skorun
     geleceği boşlukta) ve satırı dikeyde ortalar. Rövanşsa tarih üstte, ilk maç skoru
     hemen altında; ikisi BİRLİKTE ortalanır. Maç başladıktan sonra düzen değişmez.

     DİKKAT — denenip GERİ ALINAN yol: ad paylarını `auto` raylara ya da JS ile piksel
     paya bırakmak. İkisi de satırlar arası HİZAYI bozdu (her satır kendi içinde
     ortalanıyor) ve JS'te ölçüm-yazım geri beslemesi titremeye yol açtı. Raylar EŞİT
     (1fr) kalır: sade listede saat, orta sütun ve ikonlar her satırda aynı x'tedir. */
  /* Task361 (kullanıcı) — BAŞLAMAMIŞ maçta TARİH ile SAAT yer değiştirir: saat takım
     adlarının arasında (dikeyde ortalı), tarih solda saatin eski yerinde. Rövanşta saat
     üstte, ilk maç skoru altında; ikisi birlikte ortalanır. Dikey hizalama kuralları
     korunur; raylar EŞİT kalır (satırlar arası hiza bozulmaz). */
  .cd-compact .live-card.scheduled .lc-row {
    align-self: center;
  }
  /* Ortadaki saat ÇERÇEVESİZ: hap gövdesi hem 12px fazla yer kaplayıp logo hizasını
     kaydırıyordu (kullanıcı bildirdi) hem de altındaki ilk maç skoru çizgisine değiyordu.
     Metin olarak durunca orta boşluk tarih dönemindeki ölçüye geri döner. */
  .cd-compact .live-card.scheduled .lc-top .lc-side:not(.lc-side-r) > .lc-badge.upcoming {
    background: none;
    border: 0;
    padding: 0;
    font-size: 12px;
    font-weight: 800;
    color: var(--text);
  }
  /* "Yakında" penceresinde kum saati ikonu bu görünümde kaldırıldı (tarih ile
     çakışıyordu); bilgi saatin ALTIN rengiyle taşınır. */
  .cd-compact .live-card.scheduled .lc-top .lc-side:not(.lc-side-r) > .lc-badge.upcoming.soon-time {
    color: var(--gold);
  }
  /* Orta boşluk BAŞLAMIŞ satırdaki doğal genişliğe eşitlenir (skor rakamları + ":"
     ölçüldü: 44px) → arma ve ad hizası satır türünden bağımsız olur. */
  .cd-compact .live-card.scheduled .lc-x,
  .cd-compact .live-card.scheduled:has(.lc-agg) .lc-x {
    min-width: 38px;
  }
  /* Task534 — OYNANMAYAN satır: durum sözcüğü sol hücrede 82px yer istiyordu (hücre 34px),
     orta sütuna taşıp ev sahibi adının üstüne biniyordu. Sözcük artık ayracın YERİNDE,
     adların ARASINDA: ızgaranın gerçek bir çocuğu olduğu için adlar kendiliğinden kısalır
     (kesişim 0). Sol hücrede rozetin yerini TARİH alır — başlamamış satırla aynı bilgi.
     Ayraç gizlenir: skor yok, iki nokta bilgi taşımıyor. */
  .cd-compact .live-card.has-off .lc-top .lc-side:not(.lc-side-r) > .lc-badge.off {
    display: none;
  }
  .cd-compact .live-card.has-off .lc-top .lc-side-date {
    display: inline-flex;
    font-style: normal;
    font-size: 8.5px;
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: 0.2px;
    color: var(--muted);
    white-space: nowrap;
  }
  /* Takvim GÜNE göre gruplandığında tarih gereksiz (gün başlığı söylüyor) — başlamamış
     satırdaki kuralın aynısı; lig nişanı zaten satırın sağ ucunda. */
  .cd-compact .hc-day:not(.hc-lig) .live-card.has-off .lc-top .lc-side-date {
    display: none;
  }
  /* Boş skor kutuları ("—") gizlenir: oynanmayan maçta skor YOKTUR (Task419) ve kazanılan
     yer takım adlarına gider — başlamamış satırdaki kuralın aynısı. */
  .cd-compact .live-card.has-off .lc-row .score-box {
    display: none;
  }
  .cd-compact .live-card.has-off .lc-x {
    display: none;
  }
  .cd-compact .live-card.has-off .lc-x-off {
    display: inline-flex;
    flex: none;
    margin: 0 4px;
    padding: 1px 5px;
    border-radius: 999px;
    font-size: 9.5px;
    font-weight: 800;
    letter-spacing: 0.04em;
    white-space: nowrap;
    color: var(--muted);
    background: color-mix(in srgb, var(--muted) 18%, transparent);
    border: 1px solid color-mix(in srgb, var(--muted) 45%, transparent);
  }
  /* Saat: orta sütunda, adların arasında, dikeyde ortalı */
  .cd-compact .live-card.scheduled .lc-top .lc-side:not(.lc-side-r) {
    grid-column: 2;
    grid-row: 1;
    justify-self: center;
    align-self: center;
  }
  /* Tarih: solda (saatin eski yeri), dikeyde ortalı, küçük künye.
     Task362 (kullanıcı: "tarih biraz sola kaysın") — hücrede ORTALANMIŞTI, bu yüzden
     canlı/bitmiş satırın sol hücre içeriğinden (rozet, hücrenin başında) ~6px içeride
     duruyordu. Başa yaslanınca sol hücrenin tüm içerikleri aynı x'ten başlar; kartın
     kendi 6px'lik dolgusu kenar boşluğunu korur (ilke 4). */
  .cd-compact .live-card.scheduled .lc-top .lc-meta {
    display: block;
    grid-column: 1;
    grid-row: 1;
    justify-self: start;
    align-self: center;
    margin: 0;
    text-align: left;
    font-size: 9px;
    font-weight: 700;
    line-height: 1.1;
    letter-spacing: 0.2px;
    color: var(--muted);
    white-space: nowrap;
  }
  /* Lig logosu tarihin yerine geçtiğinde: dokunma alanı satır yüksekliğince, görsel
     ölçü 20px. Kart kenarına teğet olmaz (kartın 6px dolgusu). */
  .cd-compact .live-card .lc-top .lc-meta > .lc-meta-lig {
    padding: 0;
    border: 0;
    background: none;
    cursor: pointer;
  }
  .cd-compact .live-card .lc-top .lc-meta > .lc-meta-lig .comp-logo {
    width: 20px;
    height: 20px;
    object-fit: contain;
  }
  /* Rövanş: saat merkezin ÜSTÜNDE, ilk maç skoru ALTINDA; ikisi birlikte ortalanır */
  .cd-compact .live-card.scheduled:has(.lc-agg) .lc-top .lc-side:not(.lc-side-r) {
    position: relative;
    top: -7px;
  }
  .cd-compact .live-card.scheduled:has(.lc-agg) .lc-agg {
    top: 50%;
    bottom: auto;
    /* Kullanıcı: "2 punto büyüt, saatle arasına küçük boşluk koy" */
    font-size: 10px;
    transform: translate(-50%, calc(-50% + 9px));
  }
  /* Task362 — Sol hücrede TARİH yerine LİG LOGOSU: yalnız takvimin GÜNE göre
     gruplandığı kutuda (`.hc-day`, lig kutusu `.hc-lig` sınıfını da taşır). Gün
     başlığı tarihi zaten söylüyor; burada asıl bilgi ligdir. Canlı/bitmiş satırda bu
     hücrede rozet vardır (`.lc-meta-date` hiç üretilmez), kural onlara dokunmaz. */
  .cd-compact .hc-day:not(.hc-lig) .live-card .lc-top .lc-meta > .lc-meta-date {
    display: none;
  }
  .cd-compact .hc-day:not(.hc-lig) .live-card .lc-top .lc-meta > .lc-meta-lig {
    display: inline-flex;
  }
  /* Task362 rev-3 (kullanıcı) — BAŞLAMIŞ/BİTMİŞ satırda sol hücre rozete ait; lig logosu
     satırın SAĞ ucunda, tahmin düğmesinin boşalttığı yerde durur. Yalnız takvim GÜNE göre
     gruplandığında (grup başlığı ligi söylemiyorsa) çizilir. */
  /* Task509 — ESKİ kural kaldırıldı: lig nişanı artık her sade satırda TAHMİN
     DÜĞMESİNİN YUVASINDA çiziliyor (tek mekanizma). Bu kural ikinci bir işaret koyup
     sağ yuva içeriğini satırdan satıra 9 px oynatıyordu (compact-check bildirdi). */
  /* Kullanıcı: "sağa eklediklerin küçük ve silik duruyor, soldakiler gibi olmalı" —
     ölçü SOLDAKİYLE aynı: 20px. (Kaynak, opaklık ve filtre zaten aynıydı; fark
     yalnızca 18px'lik boyuttan geliyordu.) */
  main#content.cd-compact .live-card .lc-side-r > .lc-side-lig .comp-logo {
    width: 20px;
    height: 20px;
    object-fit: contain;
  }
  /* Başlamış satırda aksiyon kümesi BOŞTUR (çocukları gizli) ama hiza için 33px'lik pay
     tutuyordu; logo o payın üstüne biniyordu (ölçüldü: logo 328-346, deplasman adı 345'te
     bitiyor). Pay sıfırlanır, yerini logo alır — sağ kenar hizası korunur. */
  main#content.cd-compact .hc-day:not(.hc-lig) .live-card:not(.scheduled) .lc-side-r > .m-acts {
    min-width: 0;
  }
}

/* 3) "Başlık çizgisi ile altındaki maç arası, iki maç çizgisi arasıyla eşit değil; sade
      modda hepsi aynı yükseklikte olsun."
      ÖLÇÜM: başlık çizgisinden ilk kart çizgisine 8 + 38 = 46px, kart çizgisinden kart
      çizgisine 38px. Fark, başlığın alt boşluğuydu — sade modda sıfırlanır ve ritim tek
      olur: her çizgi arası TAM BİR SATIR. Başlık yazısı çizgiye yapışmasın diye başlığın
      KENDİ alt dolgusu korunur (ilke 4). */
main#content.cd-compact .group-head {
  margin-bottom: 0;
}
/* Boşluk aslında BANDIN üst payından geliyordu (`main#content #today { margin-top: 8px }`);
   sade modda aynı bağlamda (ve daha yüksek özgüllükle) sıfırlanır. */
main#content.cd-compact #fav-band,
main#content.cd-compact #watch-band,
main#content.cd-compact #today,
main#content.cd-compact #home-calendar .hc-cards {
  margin-top: 0;
}
.cd-compact .hc-dh {
  margin-bottom: 0;
}
.cd-compact .hc-day {
  margin-bottom: 10px;
}

/* --- Task169 — MAÇ ÖNCESİ ANALİZ -------------------------------------------------------
   Kullanıcı: "Tasarım dili mevcut maç detayı gibi dolu dolu ve renkli olsun, düz yazı gibi
   istatistik ve veriler olmasın."
   Bu yüzden karşılaştırmalar maç içi istatistik sekmesinin AYNI çubuklarıyla (`ms-*`)
   çizilir; buradaki kurallar yalnız ÇEVRE öğeleri (rozet, künye kutusu, histogram, H2H
   çubuğu, oyuncu künyesi) tanımlar. */
.pv-h {
  display: flex;
  align-items: baseline;
  justify-content: center;
  gap: 8px;
  margin: 14px 12px 8px;
  font-size: 12px;
  font-weight: 900;
  letter-spacing: 0.6px;
  text-transform: uppercase;
  color: var(--muted);
}
.pv-h-sub {
  font-style: normal;
  font-size: 10px;
  font-weight: 700;
  letter-spacing: 0.2px;
  text-transform: none;
  color: var(--accent);
}
.pv-bars {
  margin: 0 12px;
}
.pv-empty {
  margin: 14px 12px;
  text-align: center;
}

/* Öne çıkan yönler: iki takım yan yana, rozetler tonlu */
.pv-hl {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin: 10px 12px 0;
}
.pv-hl-col {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
  padding: 8px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line2);
}
.pv-hl-team {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 11.5px;
  font-weight: 800;
  min-width: 0;
}
.pv-hl-team img {
  width: 18px;
  height: 18px;
  object-fit: contain;
  flex: none;
}
.pv-hl-team b {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pv-hl-list {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}
.pv-chip {
  display: inline-flex;
  align-items: center;
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
  line-height: 1.25;
  border: 1px solid transparent;
}
.pv-good {
  background: color-mix(in srgb, var(--green, #2ecc71) 16%, var(--panel));
  border-color: color-mix(in srgb, var(--green, #2ecc71) 45%, var(--line2));
  color: color-mix(in srgb, var(--green, #2ecc71) 75%, var(--text));
}
.pv-bad {
  background: color-mix(in srgb, var(--red) 14%, var(--panel));
  border-color: color-mix(in srgb, var(--red) 42%, var(--line2));
  color: color-mix(in srgb, var(--red) 75%, var(--text));
}
.pv-info {
  background: color-mix(in srgb, var(--accent) 14%, var(--panel));
  border-color: color-mix(in srgb, var(--accent) 40%, var(--line2));
  color: color-mix(in srgb, var(--accent) 80%, var(--text));
}
.pv-warn {
  color: var(--gold);
}

/* Takım künye kutuları */
.pv-sides {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin: 10px 12px 0;
}
.pv-sides-col {
  grid-template-columns: 1fr;
}
.pv-side {
  padding: 8px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  min-width: 0;
}
/* Task177 — Takım başlığı ARMALI (Genel sekmesindeki rozet başlığıyla aynı dil) */
.pv-side-nm {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: 0.3px;
  color: var(--muted);
  margin-bottom: 6px;
  min-width: 0;
}
.pv-side-nm img {
  width: 16px;
  height: 16px;
  object-fit: contain;
  flex: none;
}
.pv-side-nm b {
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pv-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.pv-stats-mid {
  justify-content: center;
  margin: 8px 12px 0;
}
.pv-stat {
  display: inline-flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  padding: 4px 8px;
  border-radius: 10px;
  background: var(--panel);
  border: 1px solid var(--line2);
}
.pv-stat b {
  font-size: 13px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.pv-stat i {
  font-style: normal;
  font-size: 9px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.2px;
  color: var(--muted);
  text-align: center;
}
.pv-stat.pv-accent b {
  color: var(--accent);
}
.pv-stat.pv-good b {
  color: color-mix(in srgb, var(--green, #2ecc71) 80%, var(--text));
}
.pv-stat.pv-bad b {
  color: var(--red);
}
.pv-stat.pv-warn b {
  color: var(--gold);
}

/* Gol dakikası histogramı */
.pv-tms {
  display: grid;
  gap: 10px;
  margin: 0 12px;
}
.pv-tm {
  padding: 8px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line2);
}
.pv-tm-nm {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 10.5px;
  font-weight: 800;
  color: var(--muted);
  margin-bottom: 6px;
  min-width: 0;
}
.pv-tm-nm img {
  width: 16px;
  height: 16px;
  object-fit: contain;
  flex: none;
}
.pv-tm-nm b {
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pv-tm-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 6px;
  align-items: stretch;
  height: 92px;
}
/* Task174 — Kullanıcı: "Goller dakika dağılımı grafiğindeki adetler anlaşılmıyor."
   Sayılar artık çubukların ÜSTÜNDE, kendi renkleriyle yazılı (sıfır yazılmaz — gürültü). */
.pv-tm-col {
  display: flex;
  flex-direction: column;
  align-items: center;
  height: 100%;
}
.pv-tm-n {
  /* Çubuklarla aynı ızgara (8px + 8px, 2px boşluk): sayı kendi çubuğunun üstünde durur */
  display: grid;
  grid-template-columns: 8px 8px;
  gap: 2px;
  justify-content: center;
  height: 12px;
  align-items: center;
  font-size: 9.5px;
  font-weight: 900;
  line-height: 1;
  text-align: center;
}
.pv-tm-nf {
  font-style: normal;
  color: var(--accent);
}
.pv-tm-na {
  font-style: normal;
  color: var(--gold);
}
.pv-tm-bars {
  display: flex;
  align-items: flex-end;
  justify-content: center;
  gap: 2px;
  flex: 1;
  width: 100%;
  min-height: 0;
}
.pv-tm-bars i {
  display: block;
  width: 8px;
  min-height: 2px;
  border-radius: 3px 3px 0 0;
}
.pv-tm-for {
  background: var(--accent);
}
.pv-tm-ag {
  background: var(--gold);
}
.pv-tm-x {
  margin-top: 3px;
  font-size: 8.5px;
  font-weight: 700;
  color: var(--muted);
  white-space: nowrap;
}
.pv-legend {
  display: flex;
  justify-content: center;
  gap: 12px;
  margin: 6px 12px 0;
}
.pv-lg {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 10px;
  font-weight: 700;
  color: var(--muted);
}
.pv-lg::before {
  content: '';
  width: 9px;
  height: 9px;
  border-radius: 3px;
}
.pv-lg-for::before {
  background: var(--accent);
}
.pv-lg-ag::before {
  background: var(--gold);
}

/* H2H üçlü çubuğu */
.pv-h2h-bar {
  display: flex;
  height: 20px;
  margin: 0 12px;
  border-radius: 999px;
  overflow: hidden;
  background: var(--panel2);
}
.pv-h2h-bar i {
  display: flex;
  align-items: center;
  justify-content: center;
  font-style: normal;
  font-size: 10.5px;
  font-weight: 900;
  color: #fff;
  min-width: 0;
}
.pv-h2h-h {
  background: var(--accent);
}
.pv-h2h-d {
  background: color-mix(in srgb, var(--muted) 55%, var(--panel2));
}
.pv-h2h-a {
  background: var(--gold);
  color: #1a1300;
}
.pv-h2h-key {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  margin: 4px 12px 0;
  font-size: 10px;
  font-weight: 700;
  color: var(--muted);
}
.pv-h2h-key span:nth-child(2) {
  text-align: center;
}
.pv-h2h-key span:last-child {
  text-align: right;
}

/* Karşılaşma listesi */
.pv-list {
  display: grid;
  gap: 6px;
  margin: 10px 12px 0;
}
/* Task175 — Karşılaşma satırı: adlar KIRPILMAZ (mobilde "…" oluyordu), armalar var,
   tarih/turnuva alt satırda. Satır iki takım + skor olarak sarabilir. */
.pv-row {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 3px;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  cursor: pointer;
  touch-action: manipulation;
  min-width: 0;
}
@media (hover: hover) {
  .pv-row:hover {
    border-color: color-mix(in srgb, var(--accent) 50%, var(--line2));
  }
}
.pv-row-m {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 8px;
  width: 100%;
  font-size: 12px;
  min-width: 0;
}
.pv-row-t {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  min-width: 0;
  text-align: right;
}
.pv-row-t-r {
  flex-direction: row-reverse;
  justify-content: flex-end;
  text-align: left;
}
.pv-row-t img {
  width: 18px;
  height: 18px;
  object-fit: contain;
  flex: none;
}
.pv-row-t b {
  font-weight: 700;
  /* Sarsın, KIRPILMASIN (kullanıcı: "gerekirse birden fazla satır görünsünler").
     `anywhere` DEĞİL `break-word`: `anywhere` min-content'i tek karaktere indirip sütunu
     daraltıyor ve adı ortadan bölüyordu ("Internazional/e" — ölçüldü). */
  overflow-wrap: break-word;
  line-height: 1.2;
}
.pv-row-sub {
  font-size: 10px;
  color: var(--muted);
  text-align: center;
}
.pv-row-sc {
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  padding: 1px 7px;
  border-radius: 999px;
  background: var(--panel);
  border: 1px solid var(--line2);
  white-space: nowrap;
}

/* Oyuncu künyeleri */
.pv-players {
  display: grid;
  gap: 6px;
}
.pv-pl {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 8px;
  padding: 6px 10px;
  border-radius: 10px;
  background: var(--panel);
  border: 1px solid var(--line2);
  cursor: pointer;
  touch-action: manipulation;
  min-width: 0;
}
.pv-pl-av {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--panel2);
  flex: none;
}
.pv-pl-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  font-weight: 900;
  color: var(--muted);
}
.pv-pl-id {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.pv-pl-id b {
  font-size: 12px;
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pv-pl-id i {
  font-style: normal;
  font-size: 9px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.2px;
  color: var(--muted);
}
.pv-pl-v {
  font-size: 14px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  color: var(--accent);
}

/* Kadro değeri satırı */
.pv-money {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 8px;
  margin: 0 12px 8px;
}
.pv-money b {
  font-size: 15px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.pv-money b:first-child {
  text-align: left;
  color: var(--accent);
}
.pv-money b:last-child {
  text-align: right;
  color: var(--gold);
}
.pv-money i {
  font-style: normal;
  font-size: 9.5px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.3px;
  color: var(--muted);
}

/* Dar ekranda iki sütun sığmıyorsa alt alta */
@media (max-width: 460px) {
  .pv-hl,
  .pv-sides {
    grid-template-columns: 1fr;
  }
}

/* Task170 — "Canlı" düğmesi satırın EN SOLUNDA (compact en sağda): kullanıcı "en solda da
   canlı butonu olsun, seçilirse canlı maçlar listenin başında görünsün" dedi. Aynı mutlak
   yerleşim deseni; Liste|Takvim ortada kalır. */
.hc-live-btn {
  position: absolute;
  left: 6px;
  top: 50%;
  transform: translateY(-50%);
  gap: 6px;
  padding: 6px 10px;
}
.hc-live-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--muted);
  flex: none;
}
.hc-live-btn.active .hc-live-dot {
  background: var(--red);
  animation: hc-live-pulse 1.6s ease-in-out infinite;
}
@keyframes hc-live-pulse {
  0%,
  100% {
    opacity: 1;
    box-shadow: 0 0 0 0 color-mix(in srgb, var(--red) 55%, transparent);
  }
  50% {
    opacity: 0.65;
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--red) 0%, transparent);
  }
}
@media (prefers-reduced-motion: reduce) {
  .hc-live-btn.active .hc-live-dot {
    animation: none;
  }
}
/* Task315 (kullanıcı) — Canlı ve Sade düğmelerinin METNİ mobilde de görünür (eskiden
   dar ekranda ikisi de kare/ikon-only idi; iki karar da kullanıcı isteğiyle çevrildi). */

/* Task171 — Kullanıcı: "Ana sayfa web görünümü listede tarih datası şu an yok, saatin
   yanına ekle." Sade modda ortadaki tarih gizli (Task164, mobilde yer açmak için);
   WEB'de yer bol olduğu için tarih saat rozetinin YANINDA gösterilir. Varsayılan gizli:
   zengin kartta tarih zaten kendi yerinde, mobil sade satırda ise saatin ÜSTÜNDE. */
.lc-side-date {
  display: none;
}
@media (min-width: 760px) {
  .cd-compact .lc-side-date {
    display: inline;
    font-style: normal;
    font-size: 11px;
    font-weight: 700;
    color: var(--muted);
    white-space: nowrap;
  }
}

/* Task171 — Kullanıcı: "𝕏, İletişim ve Bilgi hep sayfanın EN ALTINDA olmalı; sayfa boşsa
   bile yukarı gelmemeli (ana sayfa takvimi boşken ortada göründüler)."
   Gövde tam yükseklikte bir sütun olur ve alt bilgi kalan boşluğu yiyerek dibe iner
   (`margin-top: auto`). İçerik uzunsa davranış değişmez — alt bilgi yine akışın sonunda. */
body {
  display: flex;
  flex-direction: column;
  min-height: 100dvh;
}
.foot {
  margin-top: auto;
}
/* Mobil alt gezinme çubuğu sabit (fixed) duruyor; alt bilgi onun ALTINDA kalmasın diye
   çubuk yüksekliği kadar pay bırakılır (ölçüm: 64px + güvenli alan). */
/* NOT: mobilde alt gezinme çubuğu için AYRI pay verilmez — gövde zaten çubuk kadar alt
   dolgu taşıyor (ölçüldü: alt bilgi kutusu 840'ta bitiyor, çubuk 847'de başlıyor).
   İkinci bir pay eklemek bağlantıları 83px yukarıda bırakıyordu. */

/* --- Task171 — Banner denetimleri TEK ÖLÇÜ -------------------------------------------
   Kullanıcı: "Banner'da bulunan arama, token ve avatar; webde ve mobilde yükseklikler
   BİREBİR aynı olmalı ve hizalı görünmeleri gerekir. Avatar etrafında çizgiye gerek yok.
   Arama da çerçeve şekli olarak token'inki gibi daha yuvarlatılmış olmalı."
   ÖLÇÜLDÜ (öncesi): arama 30px, avatar 34px, ayarlar 37px (webde); mobilde 33/34/37.
   Artık tek değişken: yükseklik ve yuvarlaklık tek yerden gelir. */
:root {
  --hdr-ctl: 34px;
}
/* DİKKAT: burada `display` ATANMAZ — arama kutusu webde, büyüteç düğmesi mobilde
   görünüyor ve bu ayrım kendi kurallarında. Blanket bir `display` ikisini birden açıp
   banner'da iki arama öğesi bırakıyordu (ölçümle yakalandı). */
.topbar .search-box,
.topbar .search-open,
.topbar .token-wrap,
.topbar #auth-btn,
.topbar .settings-btn {
  height: var(--hdr-ctl);
  min-height: var(--hdr-ctl);
  box-sizing: border-box;
  border-radius: 999px;
  align-items: center;
  justify-content: center;
  padding-top: 0;
  padding-bottom: 0;
}
/* Avatar düğmesinde çerçeve YOK (kullanıcı isteği); yalnız giriş yapılmamışken "Giriş"
   yazısı bir düğme gibi görünsün diye kenarlık kalır. */
.topbar #auth-btn:has(.auth-av),
.topbar #auth-btn:has(.auth-av-ph) {
  border: 0;
  background: none;
  /* Task573 (kullanıcı: "avatar alanında görsel avatar alanını ortalamıyor") — dolgu
     simetrik: avatar dokunma kutusunun ortasında durur (eskiden solda yaslıydı). */
  padding-left: 3px;
  padding-right: 3px;
}
.topbar .auth-av,
.topbar .auth-av-ph {
  width: calc(var(--hdr-ctl) - 4px);
  height: calc(var(--hdr-ctl) - 4px);
  border-radius: 50%;
  object-fit: cover;
  flex: none;
  /* "Avatar etrafında çizgiye gerek yok": baş harf rozetinin de kenarlığı kalkar, şekli
     dolgu rengiyle okunur (fotoğraflı avatarda zaten kenarlık yoktu). */
  border: 0;
  background: color-mix(in srgb, var(--accent) 22%, var(--panel2));
  font-size: 13px;
}
/* Üst satırdaki her şey aynı çizgide dursun */
.topbar .top-actions,
.topbar .search-wrap {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* --- Task171 — Ana sayfa anahtar satırı da TEK ÖLÇÜ ----------------------------------
   Kullanıcı: "Ana sayfa compact, live, liste, takvim butonları yükseklikler birebir aynı
   olmalı ve hizalı görünmeleri gerekir." Dört düğme de aynı yükseklikte ve aynı dikey
   merkezde (mutlak konumlu ikisi zaten `translateY(-50%)` ile ortalanıyor). */
.home-switch .pg-sw-btn {
  height: var(--hdr-ctl);
  min-height: var(--hdr-ctl);
  box-sizing: border-box;
  padding-top: 0;
  padding-bottom: 0;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Task172 — Kullanıcı: "Mobilde maç öncesi tablar sığmıyor, sağdan taşıyor."
   Sekme şeridi artık SARAR (taşma yok) ve dar ekranda punto/dolgu kısılır. Sekme sayısı
   da azaldı (Gol ve Disiplin birleşti) ama şerit yine de içeriğe göre esner: dil değişince
   (ör. Almanca uzun sözcükler) yine taşmasın. */
.dt-tabs {
  flex-wrap: wrap;
}
@media (max-width: 560px) {
  /* Task196 — sekmeler içerik genişliğinde ve şerit ortalı (alt satıra düşen sekme
     paneli kaplamasın). Task202 — kullanıcı: "Tüm tab butonları TEK SATIRDA görünsün."
     Ölçüldü: 5 sekme 311px + boşluklar = 331px, kullanılabilir 316px → sarıyordu.
     Şerit artık sarmıyor; punto/dolgu kısılır ve gerekirse etiket kısaltılır (uzun
     Almanca/Türkçe etiketlerde de tek satır garanti). */
  .dt-tabs {
    gap: 4px;
    justify-content: center;
    flex-wrap: nowrap;
  }
  /* Maç detayında panellerin 12px iç boşluğu var; şerit onlarla AYNI hizada başlasın
     (ölçüldü: şerit panelden 12px dışarı taşıyordu). */
  #detail-body .dt-tabs,
  #detail-inline-body .dt-tabs {
    padding-inline: 12px;
  }
  /* Takım/oyuncu kartında ise şeridin 12px yatay dolgusu (Task094) sekmeleri panelden
     İÇERİ kaydırıyordu (ölçüldü: 12px). Dar ekranda sıfırlanır — sekmeler alttaki
     panelle aynı hizada başlar ve biter. */
  #team-page .dt-tabs,
  #player-page .dt-tabs {
    padding-inline: 0;
  }
  /* Task205 — Kullanıcı: "Tab butonlarının genişlikleri EŞİT olsun ve alttaki panel
     genişliğine göre sağ/sol konum ayarlansın" + "bazı butonlar okunmuyor, ... görünüyor".
     Eşit paylaşım (`flex: 1 1 0`) şeridi panelin iki ucuna yaslar; etiketler de kısaltıldı
     (Karşılaşmalar → Geçmiş, Gol & Kart → Gol/Kart) ki kırpma gerekmesin. */
  /* Task358 (kullanıcı: "tablarda ... görünmesin, boşlukları kullan") — EŞİT genişlik
     (flex 1 1 0) uzun etiketi kırpıp kısa etiketin yanında boşluk bırakıyordu
     (ölçüldü 360px: "Puan Durumu" 90px gerekiyor, 85px veriliyordu). Artık taban
     İÇERİK genişliği, büyüme eşit: şerit yine iki uca yaslanır ama kimse kırpılmaz. */
  .dt-tab {
    flex: 1 1 auto;
    min-width: 0;
    padding: 7px 4px;
    font-size: 11.5px;
    overflow: hidden;
    text-overflow: clip; /* "..." YASAK */
  }
  /* Çok dar telefonda (≤380px) punto ve iç boşluk bir tık daha kısılır */
  @media (max-width: 380px) {
    .dt-tab {
      font-size: 11px;
      padding: 7px 3px;
      letter-spacing: -0.2px;
    }
  }
}
/* Oyuncu künyesinde takım logosu: adın hemen yanında, küçük ve hizalı */
.pv-pl-team {
  display: inline-flex;
  align-items: center;
  margin-left: 5px;
  vertical-align: -2px;
}
.pv-pl-team img {
  width: 14px;
  height: 14px;
  object-fit: contain;
}

/* --- Task173 — Hakem kartının üst bloğu: bu maçın iki takımının karnesi ----------------
   Kullanıcı: "Grafikler, yüzdeler, sayılarla kolay anlaşılır şekilde zenginleştir; hakem
   kartının üst kısmında olsun." G/B/M çubuğu H2H çubuğuyla AYNI dili konuşur. */
.rft-h {
  margin-top: 12px;
}
.rft-wrap {
  display: grid;
  gap: 8px;
  margin: 0 12px;
}
.rft {
  padding: 10px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line2);
}
.rft-head {
  display: flex;
  align-items: center;
  gap: 7px;
  margin-bottom: 8px;
  min-width: 0;
}
.rft-head img {
  width: 20px;
  height: 20px;
  object-fit: contain;
  flex: none;
}
.rft-head b {
  font-size: 13px;
  font-weight: 800;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.rft-n {
  margin-left: auto;
  font-style: normal;
  font-size: 10.5px;
  font-weight: 700;
  color: var(--muted);
  white-space: nowrap;
}
.rft-bar {
  margin: 0;
}
/* Sonuç renkleri form rozetleriyle aynı: G yeşil, B nötr, M kırmızı */
.rft-w {
  background: var(--green);
}
.rft-d {
  background: var(--line2);
}
.rft-l {
  background: var(--red);
}
.rft-bar i {
  color: #fff;
}
.rft-key {
  margin: 4px 0 8px;
}
/* Üç ölçüm (puan · sarı · kırmızı) HEP aynı satırda: sarma ile üçüncüsü tek başına alta
   düşüyordu (ölçüldü). Penaltı ikilisi kendi ızgarasında, hemen altında. */
.rft-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 6px;
}
.rft-stats .pv-stat {
  min-width: 0;
}
.rft-card {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.rft-note,
.rft-empty {
  margin: 8px 0 0;
  font-size: 11px;
}

/* Task173 — Maç öncesi analizde hakem bloğu: hakem kartındaki blokla AYNI görünüm, üstünde
   hakem adı ve "karta git" ipucu. Blok tıklanabilir (hakem kartını maç bağlamıyla açar). */
.pv-ref {
  cursor: pointer;
  touch-action: manipulation;
}
.pv-ref .rft-h {
  display: none; /* başlık bir üstte zaten yazıyor */
}
@media (hover: hover) {
  .pv-ref:hover .rft {
    border-color: color-mix(in srgb, var(--accent) 45%, var(--line2));
  }
}

/* Task174 — "Düşük olan daha iyi" işareti: çubuk artık sayıyla orantılı olduğu için
   (kullanıcı: "yediği gol daha az olan takımın grafiği neden daha uzun?") ölçümün yönü
   etikette küçük bir okla belirtilir. */
.ms-inv {
  font-style: normal;
  font-size: 10px;
  font-weight: 900;
  margin-left: 4px;
  color: var(--muted);
  vertical-align: 1px;
}

/* Task175 — Kullanıcı: "Mobilde 'bu hakem yönetiminde' alanında lehine ve aleyhine verilen
   penaltı kartları alt satıra inmiş, yan yana görünsünler." İkisi kendi ızgarasında: dar
   ekranda da hep aynı satırda ve eşit genişlikte. */
.rft-pen {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 6px;
  width: 100%;
  margin-top: 6px;
}
.rft-pen .pv-stat {
  min-width: 0;
}
.rft-pen .pv-stat i {
  overflow-wrap: break-word;
}
/* Oran kendi satırında: etiketle tek akış olunca ortadan bölünüyordu (kullanıcı bildirdi) */
.rft-pen-rate {
  margin-top: 1px;
  font-variant-numeric: tabular-nums;
  opacity: 0.85;
  white-space: nowrap;
}

/* Task175 — TEK KELİMELİK takım adı bölünmez: sığmazsa "…" ile kısalır (kullanıcı:
   "kelime bölünüp sadece 1-2 harf alt satıra inebiliyor, bu durumda ... gelsin").
   Boşluklu adlar (Nottingham Forest) kelime sonundan sarmaya devam eder. */
.pv-nm-one {
  display: block;
  min-width: 0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

@media (max-width: 560px) {
  .dt-info .mi-chip .mi-nm {
    display: block;
    -webkit-line-clamp: none;
    white-space: nowrap;
  }
}

/* Task178 — Admin log ekranı: satırlar tek biçimli, seviye rengiyle okunur. */
.log-controls {
  margin-bottom: 8px;
}
.log-auto {
  margin-left: 10px;
}
.log-box {
  margin-top: 10px;
  max-height: 60vh;
  overflow: auto;
  border: 1px solid var(--line2);
  border-radius: 10px;
  background: var(--panel2);
  font-size: 12px;
  line-height: 1.45;
}
.log-line {
  display: flex;
  gap: 8px;
  padding: 3px 8px;
  border-bottom: 1px solid color-mix(in srgb, var(--line2) 45%, transparent);
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
}
.log-n {
  flex: none;
  min-width: 46px;
  text-align: right;
  color: var(--muted);
  opacity: 0.7;
}
.log-t {
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}
.log-error {
  background: color-mix(in srgb, var(--red) 12%, transparent);
}
.log-error .log-t {
  color: color-mix(in srgb, var(--red) 75%, var(--text));
}
.log-warn .log-t {
  color: var(--gold);
}

/* --- Task181 — Admin log ekranı: tema uyumu ve genişlik ------------------------------
   Kullanıcı: "Kaynak/seviye/ara kutuları temaya uygun değil; aşağıdaki log getiren alan
   hem çok dar hem de panelden taşıyor."
   ÖLÇÜLDÜ: `select` ve `input[type=search]` tarayıcı varsayılanıyla çiziliyordu (beyaz
   zemin, siyah yazı, köşesiz); sayı kutusu zaten temalıydı. Log alanı ise 980px'lik admin
   panelinin içinde 906px kalıyordu — ekranın yarısı boşken satırlar sıkışıyordu. */
.admin-field select,
.admin-field input[type='search'],
.admin-field input[type='text'],
.admin-field input[type='number'] {
  appearance: none;
  -webkit-appearance: none;
  width: 100%;
  box-sizing: border-box;
  padding: 7px 10px;
  border-radius: 8px;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--text);
  font: inherit;
  font-size: 13px;
}
.admin-field select {
  /* Ok işareti kendi çizilir: `appearance:none` sonrası tarayıcı oku kaybolur */
  background-image:
    linear-gradient(45deg, transparent 50%, var(--muted) 50%),
    linear-gradient(135deg, var(--muted) 50%, transparent 50%);
  background-position:
    calc(100% - 16px) 52%,
    calc(100% - 11px) 52%;
  background-size:
    5px 5px,
    5px 5px;
  background-repeat: no-repeat;
  padding-right: 28px;
}
.admin-field select:focus,
.admin-field input:focus {
  outline: none;
  border-color: var(--accent);
}
/* Log ekranı açıkken KABIN KENDİSİ genişler (negatif pay YOK: negatif payla yatay taşma
   oluşuyor ve gövde zemini boyanmayan beyaz bir şerit kalıyordu — ölçüldü). */
main.admin:has(.admin-pane[data-pane='logs'].active-pane) {
  max-width: min(1600px, calc(100vw - 32px));
}

.log-box {
  width: 100%;
  box-sizing: border-box;
}

/* --- Task181 — Gövde SÜTUN FLEX düzeninin genel kuralı --------------------------------
   Task171'de alt bilgiyi sayfanın dibine indirmek için gövde sütun flex yapıldı. Flex
   öğesi `margin: 0 auto` taşıyorsa (ya da yatay kaydırma kabıysa) esnemeyi ALMAZ ve
   İÇERİĞİ KADAR daralır. Bu, üç yerde ayrı ayrı kusur olarak çıktı (ölçüldü, 1280px):
     · menü şeridi  → sol 190 / genişlik 1090 (95px sağa kayık)
     · admin kabı   → max-width 1248 hesaplanıyor ama kutu 940 kalıyor
     · favoriler sayfası → içerik 430px (ana sayfada 916)
   Tek kural hepsini kapatır ve yeni sayfalarda tekrar etmesini önler. */
body > header,
body > nav,
body > main,
body > footer {
  width: 100%;
}

/* --- Task183 — Formu yükselen oyuncu kartı -------------------------------------------
   Kullanıcı: "Son 10 maçta performansını arttıran birer oyuncuyu xG, xA, A, G, şut ve
   diğer verimlilik değerleriyle analiz edip artan formuyla birer grafik koyalım." */
.pvr-wrap {
  display: grid;
  gap: 8px;
  margin: 0 12px;
}
.pvr {
  padding: 10px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  cursor: pointer;
  touch-action: manipulation;
}
@media (hover: hover) {
  .pvr:hover {
    border-color: color-mix(in srgb, var(--accent) 45%, var(--line2));
  }
}
.pvr-head {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 9px;
  min-width: 0;
}
.pvr-av {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  object-fit: cover;
  background: var(--panel);
  flex: none;
}
.pvr-id {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.pvr-id b {
  font-size: 14px;
  font-weight: 900;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.pvr-id i {
  display: flex;
  align-items: center;
  gap: 5px;
  font-style: normal;
  font-size: 10.5px;
  color: var(--muted);
  min-width: 0;
}
.pvr-id i img {
  width: 14px;
  height: 14px;
  object-fit: contain;
  flex: none;
}
.pvr-rise {
  flex: none;
  padding: 3px 9px;
  border-radius: 999px;
  font-size: 12px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
  color: color-mix(in srgb, var(--green, #2ecc71) 80%, var(--text));
  background: color-mix(in srgb, var(--green, #2ecc71) 15%, var(--panel));
  border: 1px solid color-mix(in srgb, var(--green, #2ecc71) 40%, var(--line2));
}
.pvr-chart {
  display: block;
  width: 100%;
  height: 46px;
  margin: 8px 0 2px;
}
.pvr-fill {
  fill: color-mix(in srgb, var(--accent) 22%, transparent);
  stroke: none;
}
.pvr-line {
  fill: none;
  stroke: var(--accent);
  stroke-width: 1.6;
  vector-effect: non-scaling-stroke;
}
.pvr-cap {
  font-size: 9.5px;
  color: var(--muted);
  text-align: center;
  margin-bottom: 6px;
}
.pvr-stats {
  justify-content: center;
}

/* Task186 — Oyuncu kartındaki katkı bloğu: form rakamı üstte, grafik ölçekli, çipler altta.
   Kullanıcı: "Grafik okunamıyor, üstündeki form rakamını göremedim, alttaki kartlar yok." */
.pcf-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-bottom: 6px;
}
.pcf-title {
  margin: 0;
}
.pcf-now {
  display: inline-flex;
  align-items: baseline;
  gap: 6px;
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--panel);
  border: 1px solid var(--line2);
}
.pcf-now b {
  font-size: 16px;
  font-weight: 900;
  font-variant-numeric: tabular-nums;
}
.pcf-now i {
  font-style: normal;
  font-size: 11px;
  font-weight: 800;
  color: var(--muted);
}
.pcf-now.pcf-up i {
  color: color-mix(in srgb, var(--green, #2ecc71) 80%, var(--text));
}
.pcf-now.pcf-down i {
  color: var(--red);
}
/* Ölçek: grafiğin en yüksek ve en düşük değeri kenarda yazılı — rakamsız eğri okunmuyordu.
   Task302 — SVG kabın TAMAMINA yayılır: sağdaki 34 px'lik etiket dolgusu armaların
   yüzde konumunu çizgiden kaydırıyordu (uçta +34 px ölçüldü). Rakamlar köşeye bindirilir. */
.pcf-chart-wrap {
  position: relative;
  padding: 2px 0;
}
.pcf-chart {
  display: block;
  width: 100%;
  height: 88px;
}
.pcf-max,
.pcf-min {
  position: absolute;
  right: 2px;
  z-index: 3;
  padding: 0 3px;
  border-radius: 4px;
  background: color-mix(in srgb, var(--panel) 82%, transparent);
  font-size: 10px;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  color: var(--muted);
}
.pcf-max {
  top: 0;
}
.pcf-min {
  bottom: 0;
}

/* Task189 — Tek taraflı veri uyarısı: sekmelerin ÜSTÜNDE, dikkat çeken ama bağırmayan ton.
   Kullanıcı: "Bir takımın istatistiği yoksa karşılaştırmalar boş çıkıyor; tek tarafın
   datası olduğuna dair bir uyarı görünsün." */
.dt-warn {
  display: flex;
  align-items: center;
  gap: 7px;
  margin: 0 12px 10px;
  padding: 8px 10px;
  border-radius: 10px;
  font-size: 11.5px;
  line-height: 1.35;
  color: var(--gold);
  background: color-mix(in srgb, var(--gold) 12%, var(--panel2));
  border: 1px solid color-mix(in srgb, var(--gold) 35%, var(--line2));
}
.dt-warn svg {
  width: 15px;
  height: 15px;
  flex: none;
}

/* Task187 — Dış kaynak paneli */
.ext-src {
  margin-bottom: 10px;
}
.ext-src .admin-status-bar {
  margin-bottom: 6px;
}
.ext-err {
  color: var(--red);
}
.ext-review .xs-toggles {
  display: flex;
  gap: 8px;
  margin-top: 6px;
}
/* Task192 — onay kartı: "bizde ne var / kaynakta ne var" yan yana okunur */
.ext-cmp {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
  margin: 8px 0 6px;
}
.ext-side {
  display: flex;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
  padding: 8px 10px;
  border-radius: 10px;
  background: var(--panel-2, rgba(127, 127, 127, 0.08));
}
.ext-side b {
  overflow-wrap: anywhere;
}
.ext-lbl {
  font-size: 11px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--muted);
}
.ext-side .admin-note {
  margin: 0;
}
@media (max-width: 560px) {
  .ext-cmp {
    grid-template-columns: 1fr;
  }
}
.ext-hint {
  color: var(--accent);
}

/* Task194 — TV yayını satırı: tarih/saatin hemen altında, künye çiplerinin üstünde */
.dt-tv {
  display: flex;
  align-items: center;
  justify-content: center;
  flex-wrap: wrap;
  gap: 6px;
  margin: 4px 0 2px;
  color: var(--muted);
}
.dt-tv svg {
  width: 15px;
  height: 15px;
  flex: none;
}
.tv-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  min-width: 0;
}
/* Task460 — bildirim tipi ikonu: etiketin başında, sönük ve küçük (satırı boğmasın). */
.nt-ico {
  display: inline-flex;
  align-items: center;
  margin-right: 8px;
  color: var(--muted);
  vertical-align: -3px;
}
.nt-ico svg {
  width: 15px;
  height: 15px;
}
.notif-type input:checked ~ .ns-slider ~ .nt-ico,
.notif-subtype:has(input:checked) .nt-ico {
  color: var(--accent);
}

/* Task459 — AÇILIŞ SAYFASI: açılır liste yerine LOGOLU çipler (kullanıcı isteği).
   Izgara: dar ekranda iki sütun, genişte akışkan. */
.landing-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.landing-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 4px 9px 4px 5px;
  font-size: 11.5px;
  border-radius: 999px;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--muted);
  font-size: 12.5px;
  font-weight: 700;
  cursor: pointer;
  max-width: 100%;
}
.landing-chip span {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.landing-chip svg {
  width: 15px;
  height: 15px;
  flex: none;
}
.landing-logo {
  width: 16px;
  height: 16px;
  object-fit: contain;
  flex: none;
}
.landing-chip.active {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--bg);
}
@media (hover: hover) {
  .landing-chip:hover:not(.active) {
    border-color: var(--accent);
    color: var(--text);
  }
}

/* Task458 — DİL SEÇİMİ: açılır liste yerine bayrak + dil adı çipleri (kullanıcı: "daha
   estetik bir görünümde olabilir"). Tema düğmeleriyle aynı görsel dil. */
.lang-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.lang-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 5px 10px;
  border-radius: 999px;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--muted);
  font-size: 12.5px;
  font-weight: 700;
  cursor: pointer;
}
.lang-chip.active {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--bg);
}
.lang-flag {
  font-size: 15px;
  line-height: 1;
}
@media (hover: hover) {
  .lang-chip:hover:not(.active) {
    border-color: var(--accent);
    color: var(--text);
  }
}

/* Task456 — "+N" düğmesi kanal çipiyle aynı görünür (ayrı bir öğe gibi durmasın). */
.tv-more {
  border: 1px dashed var(--line2);
  cursor: pointer;
  font-weight: 800;
}
.tv-rest {
  display: contents;
}
.tv-ch {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 2px 9px;
  border-radius: 999px;
  background: var(--panel-2, rgba(127, 127, 127, 0.1));
  color: var(--fg);
  font-size: 12px;
  font-weight: 600;
}
.tv-live {
  font-style: normal;
  font-size: 10px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--red);
}

/* Task197 — Stadyum kartı genel bilgiler bloğu (kartın üstü) */
.vn-info {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-bottom: 12px;
}
.vn-photo {
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  border-radius: 12px;
  border: 1px solid var(--line);
  background: var(--panel-2, rgba(127, 127, 127, 0.08));
}
.vn-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.vn-chip {
  padding: 3px 10px;
  border-radius: 999px;
  background: var(--panel-2, rgba(127, 127, 127, 0.1));
  color: var(--fg);
  font-size: 12px;
  font-weight: 600;
}
.vn-alt,
.vn-desc {
  margin: 0;
  color: var(--muted);
  font-size: 13px;
  line-height: 1.5;
}
.vn-alt b {
  color: var(--fg);
}

/* Task199 — Kadro sekmesinin dibindeki "son güncelleme" notu: küçük ve silik */
.tm-updated {
  margin: 14px 4px 2px;
  text-align: right;
  font-size: 11px;
  color: var(--muted);
  opacity: 0.65;
}

/* Task200 — Kulüp künyesi: banner şeridi, forma görseli ve künye çipleri */
/* Task202 — Banner KALDIRILDI (kullanıcı: "vazgeçtim, hepsi aynı düzen ve kalitede
   değil"). Kaynak adresi veritabanında duruyor; istenirse tek betikle geri gelir. */
/* Task202 — Kullanıcı: "Forma görselinin olduğu panel, aşağıdaki maç başına panelle aynı
   genişlikte olmalı." Ölçüldü: künye 300px (soldan 53), alttaki panel 340px (soldan 13) —
   fark `#team-head`in ✕ için ayırdığı 52px sol dolgudan geliyor; negatif kenarla iptal
   edilir (kapatma düğmesinin yeri BOZULMAZ: künye satırı adın ALTINDA duruyor). */
.tp-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  /* Task208 — ✕ SAĞA geçtiği için başlıkta ayrılan yer de sağa geçti: telafi de sağdan
     yapılır. (Sol negatif kenar kalsaydı panel ekrandan dışarı taşardı — kullanıcı
     bildirdi.) */
  margin: 0 -40px 10px 0;
  width: calc(100% + 40px);
  border-radius: 14px;
  background: var(--panel2);
  border: 1px solid var(--line2);
}
/* ÖLÇÜLDÜ: forma 46×31px'e KIRPILIYORDU — `.tm-head img { width:46px; height:31px;
   object-fit: cover }` (arma için yazılmış kural) daha özgül olduğu için kazanıyor ve
   420×420 görseli üstten/alttan kesiyordu (kullanıcı bildirdi). Seçici onu aşar ve
   görsel KIRPILMADAN sığar. */
/* Task507 rev (kullanıcı: "forma görseli bulunan kart ilk açılışta ✕ ile çakışmasın,
   biraz aşağıya alınabilir") — ölçüldü (390 px): kart ✕'in bittiği yerde başlıyordu
   (239/239). Künye satırı artık ikon sırasının altından başlar. */
.tm-head .tp-row {
  margin-top: 14px;
}
.tm-head img.tp-kit,
.tp-kit {
  width: 54px;
  height: 54px;
  object-fit: contain;
  border-radius: 8px;
  background: #fff;
  flex: none;
  box-shadow: none;
}
.tp-facts {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.tp-chip {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 6px;
  min-width: 0;
}
.tp-chip i {
  font-style: normal;
  font-size: 11px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--muted);
}
.tp-chip b {
  font-size: 13px;
  overflow-wrap: anywhere;
}

/* Task203 — Kullanıcı: "Mobil görünümde takım kartında stad ve teknik direktör bilgisi
   AYNI HİZADAN başlamalı ve etraflarındaki çizgi kaldırılmalı."
   Ölçüldü: ikisi de soldan 53px'te ve 300px genişlikteydi (kart içindeki ✕ dolgusu
   yüzünden), künye satırı ve alttaki paneller ise soldan 13px / 340px. Dar ekranda üçü de
   aynı hizada ve aynı genişlikte durur; kenar çizgisi kalkar, zemin kalır. */
@media (max-width: 560px) {
  #team-head .vnm,
  #team-head .ccm {
    /* Yüzde genişlik yerine BÜYÜME: kapsayıcı genişliği iki çipte farklı hesaplanıyordu
       (ölçüldü: 300 / 340). Negatif sol kenar ✕ dolgusunu iptal eder, `flex-grow` satırı
       doldurur — ikisi de künye paneliyle aynı hizada ve aynı genişlikte. */
    flex: 1 1 100%;
    width: auto;
    /* `max-width: 100%` negatif kenarla genişlemeyi kesiyordu (ölçüldü: 300 / 340), ama
       `none` da uzun adlarda ÇİPİ ŞİŞİRİYORDU: Fenerbahçe'nin stad adı 391px olduğu için
       çip 531px'e çıkıp karttan 178px dışarı taşıyordu (kullanıcı bildirdi). Doğrusu ikisi
       birden: sınır +40px'i kapsar, `min-width: 0` ile de esnek kutu içeriğin min
       genişliğinin ALTINA inebilir — böylece uzun ad "…" ile kesilir. */
    max-width: calc(100% + 40px);
    min-width: 0;
    /* Task208 — telafi SAĞDAN (ayrılan yer sağa geçti) */
    margin-left: 0;
    margin-right: -40px;
    border-color: transparent;
  }
}

/* Task205 — Kullanıcı: "Maç detayında stad, hakem ve teknik direktörün etrafındaki
   çizgileri kaldır." Zemin kalır, çerçeve gider — takım kartındaki çiplerle aynı dil. */
.mi-chip,
.dt-info .mi-it,
.lu-coach {
  border-color: transparent;
}

/* Task205 — Kullanıcı: "Oyuncu kartında piyasa değerinin üstündeki panel biraz dar, onu da
   piyasa değeri ile aynı genişliğe getir." Ölçüldü: sezon şeridi 316px (12px yatay kenar
   boşluğu), piyasa değeri kartı 340px. Yatay kenar sıfırlanır — dikey boşluk korunur. */
.ss-card {
  margin-inline: 0;
}
/* Maç detayında sekmeler dış panele YAKLAŞSIN ama teğet olmasın (kullanıcı isteği):
   ölçüldü, kart dolgusu 22px + şerit dolgusu 12px = 35px boşluk kalıyordu. Şerit dışa
   çekilir, kenarda ~12px nefes payı kalır. */
@media (max-width: 560px) {
  #detail-body .dt-tabs,
  #detail-inline-body .dt-tabs {
    padding-inline: 0;
    margin-inline: -10px;
  }
}

/* Task205 — Kullanıcı: "Takım kartında ✕ logonun hemen solunda olmalı, biraz aşağıda
   görünüyor; aynı durum oyuncu kartında da var, ikisinde de aynı yerde görünmeli."
   ÖLÇÜLDÜ: takım kartında logo 89px'te ve ✕ ile hizalı (fark 1px); oyuncu kartında
   fotoğraf 127px'te, çünkü favori yıldızı BAŞLI BAŞINA bir satır kaplıyor (34px) ve
   fotoğrafı 38px aşağı itiyor. Yıldız akıştan çıkarılır (sağ üst köşe), fotoğraf takım
   logosuyla aynı yükseklikten başlar. */
@media (max-width: 560px) {
  .pp-head {
    position: relative;
  }
  /* Fotoğraf satırın ORTASINA hizalıydı (yanındaki künye bloğu 151px): fotoğrafın üstü
     127px'e düşüyor ve ✕ (83px) çok yukarıda kalıyordu. Üste hizalanınca fotoğraf takım
     kartındaki logo gibi başlığın en üstünden başlar. */
  .pp-head {
    align-items: flex-start;
  }
}

/* Task208 — Kullanıcı: "Oyuncu kartında ✕ sağa geçince üstteki bilgiler biraz sola kayıp
   sağda alan açabilir." Ölçüldü: künye bloğunun sağ kenarı 323px, butonun sol kenarı
   331px — arada yalnız 8px kalıyordu. Dar ekranda başlık soldan sıfır dolguyla başlar,
   sağda butonun tam boyu kadar (58px) boşluk kalır. */
@media (max-width: 560px) {
  /* Sol dolgu SIFIRLANMAZ: fotoğraf panel çizgisine dayanıyordu (ölçüldü: 1px — ilke 4'e
     aykırı). Diğer panellerle aynı 12px kalır; sağda butona 58px ayrılır. */
  #player-page .tm-head {
    padding-left: 12px;
    /* Buton 38px + 8px kenar: 52px yeter. 58px'te oyuncu adı iki satıra düşüyordu. */
    padding-right: 52px;
  }
}

/* Task213 — Kart paylaş düğmesi: ✕'in HEMEN SOLUNDA, aynı yapışkan davranışla (kaydırınca
   ekranda kalır). Modal ve kart sayfalarında aynı yer: kullanıcı "tüm ekranlarda kartta
   yaklaşık aynı yerde olsun" dedi. */
/* Task215 — Kullanıcı: "Paylaşım butonunu içinde bulunduğu kartın SAĞ ALT kısmına koy."
   Öğe kartın son çocuğu; `sticky bottom` sayesinde uzun kartta ekranın sağ altında kalır,
   kart sonunda kendi yerine oturur. Negatif üst kenar boşluğu satır AÇMAZ (kartı uzatmaz). */
.card-share {
  position: sticky;
  z-index: 6;
  /* `display: flex` ŞART: `.share-mini` inline-flex; `margin-left: auto` inline öğede
     çalışmıyor ve düğme sol üstte, armanın üstünde kalıyordu (ölçüldü). */
  display: flex;
  width: 34px;
  height: 34px;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  color: var(--muted);
  padding: 0;
}
.card-share.hidden {
  display: none;
}
.card-share svg {
  width: 17px;
  height: 17px;
}
/* Task215 (kullanıcı düzeltmesi) — YALNIZ stad ve hakem kartında düğme, ADIN bulunduğu
   küçük panelin sağ alt köşesinde durur (en dış kart değil). Takım, oyuncu ve TD kartında
   düğme eski yerinde: ✕'in hemen solunda, yapışkan. */
/* Task309 rev 2 (kullanıcı) — STAD kartında paylaşım ✕ İLE AYNI HİZADA, hafif solunda
   (araya belirgin boşluk: yanlış dokunma şikâyetinin çözümü mesafe, köşe değişimi değil).
   HAKEM kartına dokunulmaz: Task215'teki yeri (ad panelinin sağ altı) iyiydi — sol-alt
   denemesi yazıların arasında kayboldu, geri alındı. */
#venue-share {
  position: absolute;
  right: 64px;
  top: 1px; /* ✕ ile dikey merkez hizası (ölçüldü: 203/203) */
  bottom: auto;
  left: auto;
  margin: 0;
}
/* Uzun stad adı paylaş+✕ kümesinin altına girmesin: metne sağ güvenlik payı */
#venue-body .vn-head {
  padding-right: 104px;
}
#ref-share {
  position: absolute;
  right: 8px;
  bottom: 6px;
  top: auto;
  margin: 0;
}
#venue-body .vn-head,
#ref-body .vn-head {
  position: relative;
}
/* Modal (TD) ve kart sayfaları: ✕'in solunda, yapışkan */
#coach-share {
  top: -6px;
  bottom: auto;
  margin: -10px 34px -34px auto;
}
.page-share {
  top: var(--sticky-top, 66px);
  bottom: auto;
  margin: 0 52px -34px auto;
}
@media (hover: hover) {
  .card-share:hover {
    color: var(--gold);
  }
}

/* Task214 — Zayıf yönler paneli: mevcut "maç başına" panelinin dili (aynı satır/çubuk
   yapısı), yalnız çubuk rengi uyarı tonunda ve sağda fark yüzdesi var. */
.wk-note {
  margin-bottom: 8px;
}
.wk-row {
  align-items: center;
}
/* Task219/221 — Oyuncu nitelik çubuğu: renk PANELE göre değil DEĞERE göre (kullanıcı:
   "grafik renkleri değerlere göre değişmeli, takım maç başınayı referans alabilir").
   Eşikler sunucudakilerle aynı: 0.65 üstü iyi, 0.35 altı zayıf, arası nötr. */
.pw-fill {
  display: block;
  height: 100%;
  border-radius: inherit;
  opacity: 0.75;
  background: var(--accent);
}
.pw-fill.is-up {
  background: var(--green);
}
.pw-fill.is-down {
  background: var(--red);
}
.pw-fill.is-mid {
  background: var(--gold);
}
.wk-row.is-up .wk-gap {
  color: var(--green);
}
.wk-row.is-down .wk-gap {
  color: var(--red);
}
.wk-row.is-mid .wk-gap {
  color: var(--gold);
}
/* Task221 — Satır altı künyesi: solda akran sırası rozeti, sağda "iyi/kötü" kıyası.
   Düz yazı olmasın diye sıra ROZET: büyük sıra + /toplam + mevki. */
.wk-item {
  margin-bottom: 14px;
}
.wk-item .wk-gap {
  flex-direction: row;
  align-items: baseline;
  gap: 4px;
  min-width: 0;
}
.wk-sub {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  flex-wrap: wrap;
  margin-top: 3px;
}
.wk-rank {
  display: inline-flex;
  align-items: baseline;
  gap: 3px;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--panel2);
  font-variant-numeric: tabular-nums;
}
.wk-rank b {
  font-size: 12px;
  font-weight: 700;
}
.wk-rank i,
.wk-rank em {
  font-style: normal;
  font-size: 10px;
  color: var(--muted);
}
.wk-rank em {
  margin-left: 3px;
  text-transform: uppercase;
  letter-spacing: 0.02em;
}
.wk-cmp {
  font-size: 10px;
  color: var(--muted);
}
/* Task214 (kullanıcı düzeltmesi) — "%19 yazıyor ama neyin %19'u anlaşılmıyor": sayının
   ALTINA ne olduğu yazılır (takımda "geride", oyuncuda "dilim"), ipucunda tam cümle var. */
.wk-gap {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  line-height: 1.1;
  min-width: 56px;
  text-align: right;
  color: var(--red);
}
.wk-gap b {
  font-size: 12px;
  font-weight: 700;
}
.wk-gap i {
  font-style: normal;
  font-size: 9px;
  letter-spacing: 0.02em;
  text-transform: uppercase;
  color: var(--muted);
}

/* Task215 — Paylaş düğmesi kartın SAĞ ALTINA taşındığı için başlıkta ek paya gerek kalmadı:
   Task215'teki 84px geri alındı, doluluk halkası ESKİ yerinde (kullanıcı isteği). */

/* Task215 — iOS/Safari VERİ ALGILAYICISI güvencesi. `format-detection` etiketi çoğu
   durumda yeter ama WebKit bazı sürümlerde skoru/tarihi yine bağlantıya çeviriyor
   (kullanıcı: "skorların altı noktalı çizili, tıklayınca harita açılıyor"). Algılanan
   bağlantı görsel olarak nötrlenir ve TIKLAMA GEÇİRİR: maç detayını açan kendi
   işleyicimiz çalışır. */
[x-apple-data-detectors],
a[href^='maps:'],
a[href^='tel:']:not(.foot-link) {
  color: inherit !important;
  text-decoration: none !important;
  pointer-events: none !important;
}

/* Task215 — Kullanıcı: "Hakem kartında mobilde hakem adı okunmamaya başlamış." Ölçüldü:
   başlık ızgarası 20px | 105px | 120px — sağdaki kart ortalaması bloğu (`rf-avg`) 120px
   alınca ada 105px kalıyor ve "🇹🇷 Gürcan Hasova" kesiliyor. Dar ekranda ortalama ALT
   SATIRA iner; ad tam satırı kullanır. */
@media (max-width: 560px) {
  #ref-body .vn-head {
    grid-template-columns: auto 1fr;
  }
  #ref-body .rf-avg {
    grid-column: 1 / -1;
    justify-content: flex-start;
    margin-top: 2px;
  }
}

/* --- Task252/253 — Detaylı arama paneli ---
   Task253 (kullanıcı): "Ekran mobilde çok uzuyor, kullanıcı dostu değil; premium bir
   istatistik sitesi burası." Alanlar KATLANIR gruplara ayrıldı, aksiyonlar alta yapıştı,
   sonuçlar formun yerine geçen ikinci bölmede. */
.search-adv {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 30px;
  height: 30px;
  border: 0;
  background: none;
  color: var(--muted);
  cursor: pointer;
  padding: 0;
}
.search-adv svg {
  width: 18px;
  height: 18px;
}
.search-adv:hover {
  color: var(--accent);
}
.adv-card {
  width: min(720px, 96vw);
  max-height: min(86vh, 900px);
  display: flex;
  flex-direction: column;
  padding: 14px 14px 0;
  overflow: hidden;
}
.adv-title {
  margin: 0 44px 10px 0;
  font-size: 16px;
  flex: none;
}
/* Bölmeler ve şerit `#adv-body` içindedir: esnek sütun ORADA kurulmalı, yoksa kart
   sınırlı olsa bile içerik taşar ve alt şerit ekranın dışında kalır (ölçüldü: şerit
   1757px'te, ekran 844px). */
#adv-body {
  flex: 1 1 auto;
  min-height: 0;
  display: flex;
  flex-direction: column;
}
.adv-pane {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding-bottom: 6px;
}
.adv-pane.hidden {
  display: none;
}
/* Katlanır grup: başlık bir satır, içerik iki sütun */
.adv-g {
  border: 1px solid var(--line);
  border-radius: 12px;
  margin-bottom: 8px;
  background: var(--panel);
}
.adv-g > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 10px 12px;
  cursor: pointer;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  color: var(--muted);
  list-style: none;
}
.adv-g > summary::-webkit-details-marker {
  display: none;
}
.adv-g[open] > summary {
  color: var(--text);
  border-bottom: 1px solid var(--line);
}
.adv-chev {
  display: inline-flex;
  transition: transform 0.15s ease;
}
.adv-g[open] .adv-chev {
  transform: rotate(180deg);
}
.adv-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 10px;
  padding: 10px 12px 12px;
}
.adv-f {
  display: grid;
  gap: 4px;
  min-width: 0;
}
.adv-k {
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.2px;
  color: var(--muted);
}
.adv-f input,
.adv-f select,
.adv-tr input {
  width: 100%;
  height: 36px;
  padding: 0 9px;
  border: 1px solid var(--line2);
  border-radius: 9px;
  background: var(--panel2);
  color: var(--text);
  font-size: 13px;
}
.adv-f input:focus,
.adv-f select:focus,
.adv-tr input:focus {
  outline: none;
  border-color: var(--accent);
}
/* Task255 — Oyuncu kartındaki bilgi notu: tam genişlik, sarmalanır (künye çipi gibi
   nowrap DEĞİL — orada ekranı taşırıyordu). */
.pc-lastnote {
  display: block;
  margin: 0 0 10px;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  background: var(--panel);
  color: var(--text);
  font-size: 12px;
  line-height: 1.45;
}
.pc-lastnote svg {
  width: 14px;
  height: 14px;
  vertical-align: -2px;
  color: var(--muted);
}
.pc-lastnote i {
  color: var(--muted);
  font-style: normal;
  font-size: 11px;
}
.adv-hint {
  font-size: 10.5px;
  line-height: 1.35;
  color: var(--muted);
}
.adv-range {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 6px;
}
.adv-range i {
  color: var(--muted);
  font-style: normal;
}
.adv-traits {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 8px;
  padding: 10px 12px 12px;
}
.adv-tr {
  display: grid;
  grid-template-columns: 1fr 62px;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: var(--muted);
}
/* Alta YAPIŞIK aksiyon şeridi: kaydırma nerede olursa olsun "Ara" elin altında */
.adv-bar {
  flex: none;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 0 calc(10px + var(--sab));
  border-top: 1px solid var(--line);
  background: var(--panel2);
}
.adv-bar .btn {
  height: 38px;
}
.adv-bar .btn-primary {
  margin-left: auto;
  min-width: 96px;
}
.adv-badge {
  font-size: 11.5px;
  color: var(--muted);
  font-weight: 700;
}
.adv-back {
  height: 32px;
  margin-bottom: 8px;
}
.adv-results {
  display: grid;
  gap: 4px;
}
.adv-count {
  margin: 2px 0 8px;
  font-size: 12px;
  color: var(--muted);
}

/* Task257 — Liderler paylaşımı İKİ kart: haftalık ve genel yan yana. */
.promo-leaders-one {
  display: grid;
  gap: 8px;
  justify-items: start;
  margin: 0;
}
.promo-leaders-one figcaption {
  font-size: 12px;
  font-weight: 800;
  color: var(--muted);
}

/* Task266 — Skorinho sekme ikonları: metinle aynı hizada, temayla aynı renkte. */
#skorio-body .dt-tab svg {
  width: 15px;
  height: 15px;
  vertical-align: -3px;
  margin-right: 4px;
}

/* Task267/268 — DÖNEM KARTI: aralık + kota + geri sayım (+ tahmin penceresinde havuz).
   Kullanıcı: "Dönem: ... bilgisinin görseli çok zayıf, bir elden geçir." Şerit düz metin
   yerine kart oldu; geri sayımın ARDINDAKİ dolgu ölçü taşır: dönemin geçen kısmı.
   Renk anlamlıdır: normalde accent, son 24 saatte altın, son 3 saatte kırmızı. */
.sk-round {
  --skr-p: 0%;
  display: grid;
  gap: 6px;
  margin: 8px 0 10px;
  padding: 8px 10px;
  border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--line));
  border-radius: 12px;
  background: color-mix(in srgb, var(--accent) 5%, transparent);
}
/* Task289 — kompakt varyant (widget + profil popup): yalnız geri sayım satırı */
.sk-round.skr-compact {
  margin: 8px 0 0;
  padding: 5px 8px;
}
.skr-top {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px 8px;
  font-size: 12px;
  line-height: 1.2;
}
.skr-tag {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 0.6px;
  text-transform: uppercase;
  color: var(--muted);
}
.skr-tag svg {
  width: 13px;
  height: 13px;
  opacity: 0.8;
}
.skr-win {
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
/* Kota rozeti (yalnız tahmin penceresinde) sağa yaslanır; dar ekranda alt satıra düşer. */
.skr-quota {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin-left: auto;
  padding: 2px 8px;
  border-radius: 999px;
  background: var(--chip-bg);
  color: var(--muted);
  font-size: 11px;
  font-weight: 700;
  white-space: nowrap;
}
.skr-quota svg {
  width: 13px;
  height: 13px;
}
.skr-quota b {
  color: var(--text);
  font-variant-numeric: tabular-nums;
}
/* Geri sayım çubuğu: dolgu = geçen süre, metin dolgunun ÜSTÜNDE okunur. */
.skr-cd {
  position: relative;
  overflow: hidden;
  border-radius: 999px;
  padding: 5px 10px;
  background: color-mix(in srgb, var(--accent) 12%, transparent);
  color: var(--accent);
  font-size: 11.5px;
  font-weight: 700;
  line-height: 1.25;
}
.skr-cd::before {
  content: '';
  position: absolute;
  inset: 0 auto 0 0;
  width: var(--skr-p);
  background: color-mix(in srgb, var(--accent) 24%, transparent);
}
.skr-txt {
  position: relative;
}
.skr-cd b {
  font-variant-numeric: tabular-nums;
  font-size: 12.5px;
}
.skr-cd small {
  font-size: 10px;
  opacity: 0.85;
  margin-left: 1px;
}
.skr-warm .skr-cd {
  background: color-mix(in srgb, var(--gold) 14%, transparent);
  color: var(--gold);
}
.skr-warm .skr-cd::before {
  background: color-mix(in srgb, var(--gold) 26%, transparent);
}
.skr-hot .skr-cd {
  background: color-mix(in srgb, var(--red) 14%, transparent);
  color: var(--red);
}
.skr-hot .skr-cd::before {
  background: color-mix(in srgb, var(--red) 26%, transparent);
}
.skr-off {
  border-color: var(--line);
  background: transparent;
}
.skr-off .skr-cd {
  background: var(--chip-bg);
  color: var(--muted);
}
.skr-off .skr-cd::before {
  display: none;
}
.pick-pool {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.pp-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 700;
  white-space: nowrap;
  border: 1px solid transparent;
}
.pp-chip svg {
  width: 14px;
  height: 14px;
}
.pp-players {
  background: color-mix(in srgb, var(--accent) 14%, transparent);
  border-color: color-mix(in srgb, var(--accent) 40%, transparent);
  color: var(--accent);
}
/* Task612 — "havuz için en az N kişi" çipi: nötr, bilgi tonunda */
.pp-min {
  background: color-mix(in srgb, var(--muted) 12%, transparent);
  border-color: color-mix(in srgb, var(--muted) 35%, transparent);
  color: var(--muted);
}
.pp-pool {
  background: color-mix(in srgb, var(--gold) 16%, transparent);
  border-color: color-mix(in srgb, var(--gold) 45%, transparent);
  color: var(--gold);
}

/* Task268 — TAHMİN PENCERESİ KAYDIRMASIZ. Kullanıcı: "Yeni eklenen alanlar popup'ta
   scroll çıkardı; hem webde hem mobilde çıkmasın." Ölçüldü (390x664): pencere 686px,
   sığan 569px. Bilgi KALDIRILMADAN sıkıştırıldı: kota/havuz dönem kartına girdi,
   düğmeler tek satıra alındı, alçak ekranda boşluklar daraltıldı. */
.pick-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: stretch;
}
/* Etiketler SATIR KIRMAZ ("Tahmini Sil" ikinci satıra iniyordu — kullanıcı bildirdi):
   kaydet düğmesi kalan yeri alır, sil düğmesi kendi metni kadar yer kaplar. Sığmazsa
   metin kırılmaz, düğme alt satıra iner. */
.pick-actions .btn {
  margin: 0;
  white-space: nowrap;
}
/* `#pick-save { width: 100%; margin-top: 10px }` KİMLİK seçicisi olduğu için sınıf kuralı
   onu yenemiyordu: kaydet düğmesi satırı tek başına kaplayıp "Tahmini Sil"i alt satıra
   itiyordu (ölçüldü: 337 px genişlik, iki düğme iki satır). Sıra içinde genişlik esnekliğe
   bırakılır. */
.pick-actions #pick-save {
  width: auto;
  margin: 0;
}
.pick-actions .btn-primary {
  flex: 1 1 auto;
}
.pick-actions .btn-ghost {
  flex: 0 0 auto;
}
.pick-guide {
  padding: 5px 10px;
  margin: 0 0 8px;
  font-size: 11.5px;
}
#pick-modal .pick-q {
  margin: 8px 0;
  padding: 8px 10px;
}
/* Alçak ekran (mobil tarayıcı çubukları düştükten sonra ~660px): daha da sıkı. */
@media (max-height: 720px) {
  /* Alçak ekranda pencere daha çok yer kullanır: içeriği kısmak yerine kartı büyüt. */
  #pick-modal .modal-card {
    max-height: 95vh;
    /* Yan/alt boşluk daralır ama ÜST boşluk korunur: marka satırı (Skorinho logosu)
       kenara yapışıp taşmış gibi görünüyordu (kullanıcı bildirdi — ilke 4). */
    --pk-pt: 20px;
    --pk-px: 14px;
  }
  #pick-modal .sk-round {
    gap: 5px;
    padding: 7px 9px;
    margin: 6px 0 8px;
  }
  #pick-modal .pick-guide {
    padding: 4px 9px;
    margin-bottom: 6px;
    font-size: 11px;
  }
  #pick-modal .pick-q {
    margin: 6px 0;
    padding: 7px 9px;
  }
  #pick-modal .pick-q-head h4 {
    font-size: 12px;
  }
  #pick-modal .day-btn {
    padding: 5px 10px;
  }
  #pick-modal .pick-brand {
    margin-bottom: 2px;
  }
  /* Marka satırı ✕ ile aynı yükseklikte: alçak ekranda ikisi de kısalır. */
  #pick-modal .modal-card {
    --tm-close-h: 30px;
  }
  #pick-modal .dt-score {
    margin-bottom: 2px;
  }
  #pick-modal .pick-q-head {
    gap: 6px;
  }
}

/* Dar ekran: "DÖNEM" sözcüğü düşer (takvim ikonu ve tarihler zaten anlatıyor), çipler
   incelir — dönem kartı TEK satırda kalsın, kart iki satıra çıkıp pencereyi uzatmasın. */
@media (max-width: 400px) {
  #pick-modal .skr-tag-t {
    display: none;
  }
  .skr-win {
    font-size: 11.5px;
  }
  .pp-chip {
    font-size: 10px;
    padding: 2px 7px;
    gap: 3px;
  }
  .pp-chip svg {
    width: 12px;
    height: 12px;
  }
}
/* Çok alçak ekran (~600px): bilgi yine tam, yalnız nefes payı azalır. */
@media (max-height: 640px) {
  #pick-modal .modal-card {
    --tm-close-h: 30px;
    --pk-pt: 18px;
    --pk-px: 12px;
  }
  #pick-modal .pick-guide span:first-child {
    display: none;
  }
  #pick-modal .pick-guide {
    justify-content: flex-end;
    padding: 3px 8px;
  }
  #pick-modal .pick-q {
    margin: 5px 0;
    padding: 6px 8px;
  }
  #pick-modal .day-btn {
    padding: 4px 9px;
    font-size: 12px;
  }
  #pick-modal .pick-actions .btn {
    padding: 7px 10px;
  }
}

/* Task269 — "Dönem nedir?" kartı: kurallar sekmesinin ilk bloğu. Maddeler ikonla
   ayrışır (SVG, emoji değil); değerler veriden gelir. */
.round-card .rule-top {
  align-items: flex-start;
}
.round-card .rule-name {
  font-weight: 700;
  line-height: 1.35;
}
.round-facts {
  list-style: none;
  margin: 8px 0 0;
  padding: 0;
  display: grid;
  gap: 7px;
}
.round-facts li {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  font-size: 12.5px;
  line-height: 1.35;
  color: var(--muted);
}
.round-facts li svg {
  width: 15px;
  height: 15px;
  flex: none;
  /* Takvim ikonu genel kuralda sağ boşluk taşıyor: burada hizayı ızgara veriyor. */
  margin: 1px 0 0;
  vertical-align: baseline;
  color: var(--accent);
}
.round-facts li span {
  min-width: 0;
}

/* Task269 — Tahmin penceresindeki KURALLAR düğmesi marka satırında durur: ekrana yeni
   satır EKLEMEZ (pencere kaydırmasız kalmalı), ✕ ile arasında boşluk bırakır. */
.pick-rules-btn {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  margin-left: 10px;
  padding: 3px 10px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--chip-bg);
  color: var(--muted);
  font: inherit;
  font-size: 11.5px;
  font-weight: 700;
  cursor: pointer;
  transition: 0.15s;
}
.pick-rules-btn:hover {
  color: var(--text);
  border-color: var(--accent);
}
.pick-rules-btn svg {
  width: 14px;
  height: 14px;
}
/* Kurallar penceresi: içerik uzun, kart İÇİNDE kaydırılır; ✕ her zaman erişilebilir. */
#rules-modal .modal-card {
  width: min(94vw, 520px);
  max-height: 90vh;
}
#rules-modal .tm-head h2 {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 0;
  font-size: 17px;
}
#rules-modal .tm-head h2 svg {
  width: 18px;
  height: 18px;
  color: var(--accent);
}

/* Task273 — Maç detayı puan durumu sekmesi + kapsam anahtarı.
   Karşılaşan iki takımın satırı ayırt edilir: ev sahibi accent, deplasman altın —
   maç başlığındaki taraf renkleriyle aynı dil. */
.dt-standings {
  display: grid;
  gap: 8px;
}
/* `.day-switch` sağa yaslanmak için `margin-left: auto` taşıyor (ana sayfa şeridi öyle
   kuruldu); puan durumu panelinde anahtar ORTALANIR (kullanıcı bildirdi: sola yaslanmıştı).
   Ad `tbl-scope`: `st-scope` istatistik çiplerinin sınıfı — çakışma çipleri alt alta
   yığmıştı (kullanıcı bildirdi). */
.tbl-scope {
  display: flex;
  width: fit-content;
  margin: 0 auto 8px;
}
/* Mobilde anahtar panel genişliğine yayılır (kullanıcı isteği): üç düğme eşit paylaşır. */
@media (max-width: 560px) {
  .tbl-scope {
    width: 100%;
  }
  .tbl-scope .day-btn {
    flex: 1 1 0;
    text-align: center;
  }
}
.tbl-scope .day-btn {
  font-size: 12.5px;
}
/* Task303 — aşama şeridi kapsam anahtarının üstünde, arada nefes */
.tbl-stage {
  margin-bottom: 6px;
}
tr.st-hl-home td {
  background: color-mix(in srgb, var(--accent) 14%, transparent);
}
tr.st-hl-away td {
  background: color-mix(in srgb, var(--gold) 14%, transparent);
}
tr.st-hl-home td:first-child {
  box-shadow: inset 3px 0 0 var(--accent);
}
tr.st-hl-away td:first-child {
  box-shadow: inset 3px 0 0 var(--gold);
}
tr.st-hl-home .sn,
tr.st-hl-away .sn {
  font-weight: 800;
}
/* Sekme içindeki tablo dar ekranda taşmasın: kendi kutusunda kayar (sayfa gövdesi kaymaz). */
.dt-standings .table {
  width: 100%;
}
.dt-pane[data-pane='standings'] {
  overflow-x: auto;
}

/* Task273 — xG kartında takım xA satırı (kullanıcı: "xA'yı maçta göremiyor muyum?"). */
.xg-row-xa {
  margin-top: 2px;
  font-size: 13px;
  opacity: 0.9;
}

/* Task273 — ÇOK DAR ekran (≤340 px): kısa adı olmayan etiket de sığsın (ör. "Oyuncu").
   Bu kural dosyanın SONUNDA durmalı: yukarıdaki `@media (max-width: 560px) .dt-tab`
   bloğu aynı özgüllükte ve sonra geldiği için önceki konumda eziliyordu (ölçüldü). */
@media (max-width: 340px) {
  .dt-tab {
    font-size: 10.5px;
    padding: 7px 3px;
  }
}

/* Task277 — Piyasa değeri grafiğinde transfer işaretleri: gidilen kulübün arması + bedel,
   transfer anında dikey kesik çizgi. İşaretli grafik üstten nefes alır. */
.mv-wrap-tx {
  padding-top: 34px;
}
/* Task428 — çoklu küme rozeti ("+3"): tek işaret gibi durur, ipucunda hepsi yazar. */
.mv-tx-multi b {
  color: var(--text);
  border: 1px solid var(--line);
}
.mv-tx {
  position: absolute;
  top: 0;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 1px;
  z-index: 2;
  pointer-events: auto;
}
.mv-tx img,
.mv-tx .crest-letter {
  width: 16px;
  height: 16px;
  border-radius: 4px;
}
.mv-tx b {
  font-size: 8.5px;
  font-weight: 800;
  white-space: nowrap;
  color: var(--muted);
  background: var(--panel);
  padding: 0 3px;
  border-radius: 4px;
  /* Dar ekranda etiket komşusunun üstüne taşmaz: kendi genişliğinde kırpılır. */
  max-width: 74px;
  overflow: hidden;
  text-overflow: ellipsis;
}
@media (max-width: 560px) {
  .mv-tx b {
    max-width: 54px;
  }
}
.mv-tx-line {
  position: absolute;
  top: 30px;
  bottom: -40px;
  width: 0;
  border-left: 1px dashed color-mix(in srgb, var(--muted) 45%, transparent);
  z-index: -1;
}
/* İkinci sıra: yakın komşu işaret alta kayar, çizgisi kısalır. Sıkışık kümede alt
   sıranın BEDEL etiketi gizlenir (bilgi ipucunda durur) — mobilde etiketler üst üste
   biniyordu (ölçüldü: 390 px'te üç işaret 95 px'e sıkışınca). */
.mv-tx-alt {
  /* Task428 — satır aralığı arma yüksekliğinden (16px) BÜYÜK: aynı x'teki iki işaret
     birbirine değmiyor (ölçüldü: 15px'te değiyordu). */
  top: 22px;
}
.mv-tx-alt b {
  display: none;
}
.mv-tx-alt .mv-tx-line {
  bottom: -25px;
}

/* Task278 (revizyon) — Rakip armaları GRAFİK ÇİZGİSİNİN üzerinde, noktaya oturur;
   tarihler grafiğin altında seyrek eksende. Uçlardaki işaret içeri kırpılır (ilke 4). */
.pcf-dot {
  position: absolute;
  transform: translate(-50%, -50%);
  z-index: 2;
  line-height: 0;
}
.pcf-dot img,
.pcf-dot .crest-letter {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: var(--panel);
  box-shadow: 0 0 0 2px var(--panel);
}
.pcf-dot:first-of-type {
  transform: translate(-20%, -50%);
}
.pcf-dot:last-of-type {
  transform: translate(-80%, -50%);
}
.pcf-dates {
  position: relative;
  height: 12px;
  margin-top: 2px;
}
.pcf-dates b {
  position: absolute;
  transform: translateX(-50%);
  font-size: 8px;
  font-weight: 700;
  color: var(--muted);
  white-space: nowrap;
}
.pcf-dates b:first-child {
  transform: translateX(-10%);
}
.pcf-dates b:last-child {
  transform: translateX(-90%);
}
.pcf-gol {
  position: absolute;
  top: -4px;
  right: -6px;
  font-style: normal;
  font-size: 8px;
  font-weight: 900;
  background: var(--gold);
  color: #241a00;
  border-radius: 999px;
  padding: 0 3px;
  line-height: 1.35;
}

/* Task279 — forma görseli tıklanabilir: imleç + hafif büyüme geri bildirimi. */
.tp-kit[data-zoom] {
  cursor: zoom-in;
  transition: transform 0.15s ease;
}
.tp-kit[data-zoom]:hover,
.tp-kit[data-zoom]:focus-visible {
  transform: scale(1.06);
}
/* Büyütülen forma: kaynak görsel küçük (~150 px) — tam ekrana YAYILMAZ, keskin kalsın. */
#img-zoom img {
  max-width: min(420px, 90vw);
  image-rendering: -webkit-optimize-contrast;
  background: var(--panel);
  padding: 18px;
}

/* Task280 — Reyting grafiğinde nokta yanı bilgiler: rakip arması + değer. En iyi/en kötü
   mevcut büyük etiketiyle ÖNE ÇIKMAYA devam eder; arma onlarda etiketin karşı tarafında.
   Sıradan noktada değer, nokta ALÇAKTAYSA üstte (grafik tabanından taşmasın). */
.pf-crest {
  position: absolute;
  left: 50%;
  bottom: calc(100% + 3px);
  transform: translateX(-50%);
  line-height: 0;
}
.pf-crest-alt {
  bottom: auto;
  top: calc(100% + 3px);
}
.pf-crest img,
.pf-crest .crest-letter {
  width: 13px;
  height: 13px;
  border-radius: 50%;
  background: var(--panel);
  box-shadow: 0 0 0 1.5px var(--panel);
}
.pf-val {
  position: absolute;
  left: 50%;
  top: calc(100% + 2px);
  transform: translateX(-50%);
  font-style: normal;
  font-size: 8px;
  font-weight: 700;
  color: var(--muted);
  white-space: nowrap;
}
.pf-val-ust {
  top: auto;
  bottom: calc(100% + 17px);
}
/* Değerli noktalarda armaya yer kalsın: değer üstteyse arma değerin ALTINA girmesin diye
   arma her zaman noktaya EN YAKIN katmandır; çakışmayı önlemek için değer üste alınan
   noktada arma alta iner. */
.pf-val-ust ~ .pf-crest,
.pf-pt:has(.pf-val-ust) .pf-crest {
  bottom: auto;
  top: calc(100% + 3px);
}

/* Kadro işaretinin SOL kopyası yalnız mobil normal görünümde açılır (Task385) */
.lu-sign-date {
  display: none;
}

/* Task382 rev-2 (kullanıcı) — BAŞLAMAMIŞ maç, mobil NORMAL görünüm:
   "tarih ortaya gelmesin, solda lig logosunun altında olsun; başlangıç saati kartı
   ortalasın." Saat hapı işaretlemede sol hücrede duruyor (compact düzeni buna dayanıyor),
   bu yüzden sol hücre `display: contents` ile çözülür ve çocukları DOĞRUDAN ızgaraya
   yerleşir: kum saati 1. sütunun sağına, saat 2. sütunun ORTASINA. Tarih orta sütundan
   çıkar, geri sayım satırında lig çipinin altına iner. */
.lc-cd-date {
  display: none;
}
@media (max-width: 759px) {
  #content:not(.cd-compact) .live-card.scheduled .lc-top > .lc-side:not(.lc-side-r) {
    display: contents;
  }
  #content:not(.cd-compact) .live-card.scheduled .lc-top .lc-badge.soon {
    grid-column: 1;
    grid-row: 1;
    justify-self: end;
  }
  /* SATIR SABİT: `display: contents` sonrası otomatik yerleşim tarihi ikinci satıra
     atıyordu (ölçüldü: saat 474, tarih 497 → 23px kayma). Üç öğe de 1. satırda. */
  #content:not(.cd-compact) .live-card.scheduled .lc-top .lc-badge.upcoming {
    grid-column: 2;
    grid-row: 1;
    justify-self: center;
  }
  /* Orta sütundaki tarih kalkar (saat oraya oturuyor); TARİH üst satırın SOL hücresinde
     kalır — kullanıcı: "tarihin alta inmesi ve sağdaki başlangıç saati ve onun sağındaki
     izleme/paylaşma ikonları AYNI HİZADA görünmesi gerekiyor". Geri sayım satırı
     (logo · tur · geri sayım · Skorinho) tek satır olarak korunur. */
  #content:not(.cd-compact) .live-card.scheduled .lc-top .lc-meta {
    display: none;
  }
  /* Task385 — kadro işareti varsa TARİHİN YERİNİ alır (işaret maça ~1 saat kala çıkıyor;
     o noktada tarih bilgi taşımıyor). Sağ şeritteki kopya bu görünümde gizlenir. */
  #content:not(.cd-compact) .live-card.scheduled .lc-top .lu-sign-date {
    display: inline-flex;
    grid-column: 1;
    grid-row: 1;
    justify-self: start;
  }
  #content:not(.cd-compact) .live-card.scheduled .lc-top:has(.lu-sign-date) .lc-side-date {
    display: none;
  }
  #content:not(.cd-compact) .live-card.scheduled .lc-side-r .lu-sign:not(.lu-sign-date) {
    display: none;
  }
  #content:not(.cd-compact) .live-card.scheduled .lc-top .lc-side-date {
    display: inline-flex;
    grid-column: 1;
    grid-row: 1;
    justify-self: start;
    font-style: normal;
    font-size: 11.5px;
    font-weight: 700;
    color: var(--muted);
  }
}

/* Task386 (kullanıcı) — oyuna GİRİŞ / ÇIKIŞ işareti: ok + dakika. Ad satırında durur;
   avatarın köşeleri dolu (reyting, forma numarası, gol/kart) — kullanıcı "diğer ikonlarla
   çakışmasın" dedi. Renk ANLAM taşır: giriş yeşil, çıkış kırmızı. */
.lu-sub {
  display: inline-flex;
  align-items: center;
  gap: 2px;
  font-style: normal;
  font-size: 10px;
  font-weight: 800;
  line-height: 1;
  padding: 1px 4px 1px 2px;
  border-radius: 999px;
  background: var(--panel2);
  border: 1px solid var(--line2);
  white-space: nowrap;
}
.lu-sub + .lu-sub {
  margin-left: 3px;
}
.lu-sub-in {
  color: var(--ok, #3ddc84);
}
.lu-sub-out {
  color: var(--bad, #ff6b6b);
}
.lu-pl .lu-sub {
  margin-top: 2px;
}
.lu-bp .lu-sub {
  margin-left: 4px;
}

/* Task387 (kullanıcı) — tarih seçicide TUTTUĞU TAKIMIN maçı olan günler takım renginde.
   Renk ANLAM taşıdığı için (kulüp kimliği) inline değişkenden gelir; iki renkli
   takımlarda köşegen geçiş. Gün SAYISI okunur kalsın diye metin gölgeli ve kalın. */
.dp-gun.dp-takim {
  /* Kullanıcı: "renk tonları çok parlak, rakamları rahat okuyamadım — daha pastel olsun
     ve tarih rakamları hangi renk olursa olsun rahat okunsun."
     Takım rengi ZEMİNLE KARIŞTIRILIR (%30): kulüp kimliği anlaşılır ama ton pastelleşir ve
     rakam temanın kendi metin rengiyle okunur kalır. Kimliği güçlendiren asıl işaret alt
     çizgi: orada renk TAM doygunlukta, okunurluğu etkilemiyor. */
  background: linear-gradient(
    135deg,
    color-mix(in srgb, var(--tk1) 30%, var(--panel2)) 0%,
    color-mix(in srgb, var(--tk1) 30%, var(--panel2)) 50%,
    color-mix(in srgb, var(--tk2) 30%, var(--panel2)) 50%
  );
  color: var(--text);
  font-weight: 800;
  border-color: color-mix(in srgb, var(--tk1) 45%, var(--line2));
  box-shadow: inset 0 -3px 0 0 var(--tk1);
}
.dp-gun.dp-takim.dp-secili,
.dp-gun.dp-takim.dp-bugun {
  outline: 2px solid var(--accent);
  outline-offset: -2px;
}

/* Task389 — Maç detayında Skorinho tahmini: sekmelerin hemen üstünde, panel diliyle. */
/* TEK SATIR: marka (logo + renkli "Skorinho") solda, tahminler yanında, puan sağda.
   Dar ekranda çipler kendi içinde yatay kayar — satır kırılmaz (kullanıcı isteği). */
/* GÖZE BATSIN ama tema diliyle: vurgu rengi zeminle karıştırılır (her temada çalışır),
   sol kenarda altın şerit — Skorinho'nun rengi. Kullanıcı isteği. */
.dt-pick {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  row-gap: 6px;
  gap: 6px;
  margin: 0 0 10px;
  padding: 9px 10px;
  background: linear-gradient(
    90deg,
    color-mix(in srgb, var(--gold) 14%, var(--panel2)) 0%,
    var(--panel2) 60%
  );
  border: 1px solid color-mix(in srgb, var(--gold) 35%, var(--line2));
  border-left: 3px solid var(--gold);
  border-radius: var(--radius);
}
.dt-pick-word {
  flex: none;
  font-style: normal;
  font-size: 12.5px;
  font-weight: 800;
  color: var(--text);
}
/* Kullanıcı: "tahminin yazısı rahat okunuyordu, şimdi yok oldu." Söz GİZLENMEZ; dar
   ekranda ÇİPLER alt satıra iner. Böylece hem yazı hem soru etiketleri (1X2 / GOL) tam
   okunur kalır — hiçbir şey kırpılmaz. Sığdığı genişlikte satır yine tek. */
/* Marka: logo ile yazı ARASI dar (kullanıcı isteği), dış aralık çiplere kalır.
   `.skorio-logo`nun genel `margin-right: 8px`i burada sıfırlanır — aralık yalnız `gap`. */
.dt-pick-mark {
  flex: none;
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.dt-pick .skorio-logo {
  flex: none;
  display: inline-flex;
  margin-right: 0;
}
.dt-pick .skorio-logo svg {
  width: 16px;
  height: 16px;
}
.dt-pick-brand {
  flex: none;
  font-weight: 900;
  font-size: 12.5px;
}
.dt-pick .pk-chips {
  display: flex;
  flex-wrap: nowrap;
  gap: 4px;
  min-width: 0;
  overflow-x: auto;
  scrollbar-width: none;
  overscroll-behavior: contain;
}
.dt-pick .pk-chips::-webkit-scrollbar {
  display: none;
}
.dt-pick .pk-chip {
  flex: none;
}
/* Dar ekranda iki çip de sığsın: bu blokta çipler biraz daha derli toplu. */
.dt-pick .pk-chip {
  padding: 4px 6px;
  gap: 3px;
  font-size: 12px;
}
.dt-pick .pk-chip-q {
  font-size: 10px;
}

/* ===== Task390 — Karşılama turu (ilk girişten sonra beş adım) =====
   Kullanıcı: "Pop-up gibi gelsin, altta '…' ile yandaki sayfalara geçilsin."
   İlke 4: hiçbir içerik kart kenarına teğet değil — kartın kendi padding'i (22px)
   korunur, adım gövdesi ile alt şerit arasında ayrı boşluk bırakılır. */
.wz-card {
  /* Task396 — adımın KİMLİK RENGİ: app.js `--wz-accent` yazar, yoksa tema aksanı.
     Renk yalnız buradan dallanır; alttaki kurallar hep bu değişkeni okur. */
  --wz-accent: var(--accent);
  /* Kontrast güvencesi: adım rengi ÇOK KOYU olabilir (takım rengi kayıtlıysa onun rengi
     kullanılıyor — ölçüldü: #0a3d91 lacivert temada kayboluyordu). İkon ve nokta bu
     karışımı kullanır: koyu temada açılır, açık temada koyulaşır, ton korunur. */
  --wz-ink: color-mix(in srgb, var(--wz-accent) 72%, var(--text));
  width: min(94vw, 400px);
  display: flex;
  flex-direction: column;
  gap: 14px;
  position: relative;
  /* Üst yıkama: adım rengi panele KARIŞTIRILARAK (en fazla %16) — Task387 dersi:
     doygun renk metni okunmaz kılıyor. */
  background:
    linear-gradient(
      180deg,
      color-mix(in srgb, var(--wz-accent) 20%, var(--panel)) 0,
      var(--panel) 190px
    ),
    var(--panel);
  border-color: color-mix(in srgb, var(--wz-accent) 30%, var(--line2));
}
.wz-body {
  /* Uzun adım (ligler) kart İÇİNDE kayar; kapatma ve nokta göstergesi hep erişilir. */
  max-height: min(58vh, 460px);
  overflow-y: auto;
  overscroll-behavior: contain;
  padding-right: 2px; /* kaydırma çubuğu metne yapışmasın */
}
.wz-head {
  display: flex;
  align-items: center;
  gap: 11px;
  margin: 0 0 10px;
  padding: 12px 44px 12px 12px; /* sağda ✕ payı: başlık düğmenin altına girmez */
  border-radius: 14px;
  /* Task396 — başlık kendi RENKLİ bloğunda: kart artık "kurumsal gri panel" gibi
     durmuyor. Köşeden gelen ışık + ince kenar; metin rengi temadan gelir. */
  background:
    radial-gradient(
      120% 140% at 0% 0%,
      color-mix(in srgb, var(--wz-accent) 42%, var(--panel2)),
      color-mix(in srgb, var(--wz-accent) 10%, var(--panel2)) 70%
    ),
    var(--panel2);
  border: 1px solid color-mix(in srgb, var(--wz-accent) 38%, var(--line2));
}
.wz-head h2 {
  margin: 0;
  font-size: 19px;
  line-height: 1.25;
  color: var(--text);
  text-wrap: balance;
}
.wz-head .wz-ic {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  flex: none;
  border-radius: 12px;
  /* Rozet adımın rengini taşır: dolgu solmuş, ikon tam güçte (kontrast korunur) */
  background: color-mix(in srgb, var(--wz-accent) 20%, var(--panel));
  border: 1px solid color-mix(in srgb, var(--wz-accent) 50%, var(--line2));
  color: var(--wz-ink);
  box-shadow: 0 6px 16px color-mix(in srgb, var(--wz-accent) 26%, transparent);
}
.wz-head-brand h2 {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.wz-head-brand h2 i {
  font-style: normal;
  font-size: 13px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--muted);
}
.wz-app-logo {
  width: 34px;
  height: 34px;
  border-radius: 9px;
  flex: none;
}
.wz-head-brand .skorio-logo {
  color: var(--gold);
}
.wz-sub {
  margin: 0 0 10px;
  color: var(--muted);
  font-size: 14px;
  line-height: 1.45;
}
.wz-note {
  margin: 0 0 10px;
  color: var(--text);
  font-size: 13px;
  line-height: 1.45;
  opacity: 0.9;
}
.wz-note.wz-ok {
  display: flex;
  align-items: center;
  gap: 6px;
  color: var(--green);
}
.wz-easy {
  margin: 10px 0 0;
  color: var(--muted);
  font-size: 12px;
  text-align: center;
}
.wz-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.wz-row {
  /* Satır kendi rengini taşıyorsa mürekkep de ONDAN türer: `--wz-ink` karttan miras
     kalsaydı bütün ikonlar adım rengine boyanırdı (ölçüldü: altın satırın ikonu turkuaz). */
  --wz-ink: color-mix(in srgb, var(--wz-accent) 72%, var(--text));
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 10px 12px;
  border-radius: 12px;
  background: color-mix(in srgb, var(--wz-accent) 7%, var(--panel2));
  border: 1px solid color-mix(in srgb, var(--wz-accent) 22%, var(--line));
  border-left: 3px solid color-mix(in srgb, var(--wz-accent) 65%, var(--line2));
}
.wz-row-ic {
  display: inline-flex;
  flex: none;
  color: var(--wz-ink);
  margin-top: 1px;
}
.wz-row-tx {
  font-size: 13.5px;
  line-height: 1.45;
  color: var(--text);
}
.wz-wide {
  width: 100%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  margin-bottom: 10px;
}
.wz-comps {
  max-height: 260px;
  padding: 6px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
/* Alt şerit: geri oku · nokta göstergesi · birincil düğme */
.wz-foot {
  display: flex;
  align-items: center;
  gap: 10px;
  padding-top: 12px;
  border-top: 1px solid color-mix(in srgb, var(--wz-accent) 24%, var(--line));
}
.wz-arrow {
  flex: none;
  width: 38px;
  height: 38px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 11px;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--text);
  cursor: pointer;
  transform: rotate(90deg); /* chevron aşağı bakıyor → sola çevrilir */
}
.wz-arrow:disabled {
  opacity: 0.35;
  cursor: default;
}
.wz-dots {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  flex: 1 1 auto;
  min-width: 0;
}
.wz-dot {
  position: relative;
  width: 8px;
  height: 8px;
  padding: 0;
  border-radius: 50%;
  border: 0;
  background: var(--line2);
  cursor: pointer;
  transition:
    width 0.18s ease,
    background 0.18s ease;
}
/* Nokta 8px görünür ama dokunma kutusu ~34px: parmakla adım seçimi kaçmasın (Task092 kuralı) */
.wz-dot::after {
  content: '';
  position: absolute;
  inset: -13px -6px;
}
.wz-dot.active {
  width: 20px;
  border-radius: 5px;
  background: var(--wz-ink);
}
.wz-cta {
  flex: none;
  min-width: 96px;
  /* Düğmenin kendi rengi tema birincilidir (kontrast garantili); adım rengi HALKA olur */
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--wz-accent) 42%, transparent);
}
.wz-arrow {
  border-color: color-mix(in srgb, var(--wz-accent) 28%, var(--line2));
}
/* Skorinho ve marka logoları adım renginden BAĞIMSIZ (marka rengi korunur) */
.wz-head-brand .skorio-logo {
  color: var(--gold);
}
@media (prefers-reduced-motion: reduce) {
  .wz-dot {
    transition: none;
  }
}
@media (max-width: 380px) {
  .wz-cta {
    min-width: 78px;
  }
  .wz-head h2 {
    font-size: 17px;
  }
}

/* Task392 — Bildirim ayarlarında grup başlığı (Maç · Skorinho). Anahtar satırlarından
   ayrılsın diye küçük, seyrek harf aralıklı; ilk başlıkta üst boşluk yok. */
.notif-group-head {
  display: flex;
  align-items: center;
  gap: 6px;
  margin: 12px 0 2px;
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--muted);
}
.notif-group-head:first-child {
  margin-top: 0;
}
.notif-group-head .skorio-logo {
  color: var(--gold);
  display: inline-flex;
}

/* ===== Task391 — Üyelik kapısı =====
   Ton korkutmaz: içerikten bir tat (arma/ad) üstte, kazanımlar altta, iki yol en altta.
   İlke 4: içerik kart padding'inin içinde durur, hiçbir şey kenara teğet değil. */
.gate-card {
  width: min(94vw, 400px);
}
.gate-body {
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.gate-peek {
  display: flex;
  align-items: center;
  gap: 10px;
  margin: 0 34px 4px 0; /* ✕ ile çakışmaz */
  min-width: 0;
}
.gate-peek img.crest,
.gate-peek .gate-peek-photo {
  width: 34px;
  height: 34px;
  object-fit: contain;
  flex: none;
}
.gate-peek .gate-peek-photo {
  border-radius: 50%;
  object-fit: cover;
}
.gate-peek-duo {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  flex: none;
}
.gate-peek-duo img.crest {
  width: 26px;
  height: 26px;
}
.gate-peek-tx {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.gate-peek-tx i {
  font-style: normal;
  font-size: 11px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--muted);
}
.gate-peek-tx b {
  font-size: 15px;
  color: var(--text);
  overflow-wrap: anywhere;
}
.gate-title {
  margin: 0;
  font-size: 20px;
  line-height: 1.2;
  color: var(--text);
  text-wrap: balance;
}
.gate-sub {
  margin: 0;
  color: var(--muted);
  font-size: 14px;
  line-height: 1.45;
}
.gate-perks {
  display: flex;
  flex-direction: column;
  gap: 7px;
  padding: 10px 12px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.gate-perk {
  display: flex;
  align-items: flex-start;
  gap: 9px;
  font-size: 13px;
  line-height: 1.4;
  color: var(--text);
}
.gate-perk-ic {
  display: inline-flex;
  flex: none;
  color: var(--accent);
  margin-top: 1px;
}
.gate-perk-ic .skorio-logo {
  color: var(--gold);
  display: inline-flex;
  margin-right: 0; /* madde ikonları aynı hizada başlasın (logonun kendi payı düşer) */
}
.gate-free {
  align-self: center;
  font-size: 12px;
  color: var(--muted);
}
.gate-go {
  width: 100%;
  justify-content: center;
}

/* Task395 — "spam klasörüne bak" hatırlatması: kod alanının altında, sakin ton.
   İkon ile metin aynı hizada başlar, metin kart kenarına teğet değil. */
.spam-hint {
  display: flex;
  align-items: flex-start;
  gap: 7px;
  margin: 10px 0 12px;
  padding: 9px 11px;
  border-radius: 10px;
  background: var(--panel2);
  border: 1px solid var(--line);
  color: var(--muted);
  font-size: 12.5px;
  line-height: 1.45;
}
.spam-hint svg {
  flex: none;
  margin-top: 1px;
  color: var(--accent);
}
.spam-hint[hidden] {
  display: none;
}

/* Task401 — ölçümü olmayan oyuncunun kartındaki not: sakin ton, kart kenarına teğet değil */
.pm-empty {
  margin: 0;
  padding: 10px 2px 4px;
  color: var(--muted);
  font-size: 13px;
  line-height: 1.45;
}

/* Task402 — maç bildirimleri başlığının altındaki kapsam notu (takımlar + izleme listesi) */
.notif-group-head .nt-group-hint {
  display: block;
  margin-top: 3px;
  font-size: 10.5px;
  letter-spacing: 0.02em;
  text-transform: none;
  font-style: normal;
  opacity: 0.85;
}
.notif-group-head:has(.nt-group-hint) {
  display: block;
}

/* ===== Task403 — Sade görünümde son bir saatte saat yerine dk:sn =====
   Kullanıcı: "1 saatten az kalınca saat bilgisinin olduğu yerde geri sayım çıksın."
   İki biçim de basılır (Task306 deseni), seçimi CSS yapar: sayaç DOLUYSA ve görünüm
   SADE ise saat gizlenir. Zengin kartta sayaç hiç görünmez — orada kendi satırı var. */
.lc-mmss {
  display: none;
}
#content.cd-compact .lc-mmss:not(:empty) {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  /* Genişlik saniyede oynamasın: rakamlar tabular ve metin HEP 5 hane ("00:00"), bu
     yüzden ayrıca `min-width` VERİLMEZ — verilince hap saatten geniş kalıyor ve orta
     boşluk daralıyordu (ölçüldü: compact denetimi 24 kusur, "saat ada değiyor 1px"). */
  font-variant-numeric: tabular-nums;
  /* Task403 rev (kullanıcı) — iki düzeltme: renk "Yakında" rozetinin ALTINI olur ve
     ÇERÇEVE KALKAR (mobil ve web sade görünümün ikisinde de). Hap gövdesi burada 12px
     fazla yer kaplayıp arma hizasını kaydırıyordu — sade satırdaki saat de tam bu yüzden
     çerçevesiz duruyor (Task361 dersi); ölçüldü: çerçeveli sürüm compact denetiminde
     24 kusur veriyordu, çerçevesizde 0. */
  background: none;
  border: 0;
  padding: 0;
  /* Task604 (kullanıcı: "1 saat kala dk:sn geri sayım maç dakikasının kırmızısı olsun") —
     altın yerine canlı dakika rengi (`--live`). */
  color: color-mix(in srgb, var(--red) 72%, var(--text)); /* = canlı dakika rozeti metni */
  font-weight: 800;
}
#content.cd-compact .soon-time:has(+ .lc-mmss:not(:empty)) {
  display: none;
}
/* Task614 — BAŞLAMA BEKLENİYOR: saat geçti, canlı veri yok → düdük yanıp söner (kullanıcı:
   "başlıyor yazmasın, mobilde sığmaz; sadece tema uyumlu düdük ikonu yanıp sönsün").
   Sade satırda saat yuvasında (sayaç rengi), zengin kartta kum saatinin yerinde. */
@keyframes whistleBlink {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0.25;
  }
}
/* Task614 rev (kullanıcı: "düdük biraz daha büyük olabilir ve çok hızlı yanıp sönüyor") —
   2,2 s (canlı noktanın nabzıyla aynı tempo), ikon 12 → 16px / yuvada 14 → 19px. */
.lc-wait svg {
  width: 16px;
  height: 16px;
  animation: whistleBlink 2.2s ease-in-out infinite;
}
/* `.cd-compact .lc-badge svg { display: none }` genel kuralını aşar: saat yuvasındaki düdük
   sade satırda görünmek ZORUNDA (ölçüldü: ilk sürümde yuva boş kaldı). */
#content.cd-compact .lc-mmss.lc-wait svg {
  display: inline;
  width: 19px;
  height: 19px;
}
@media (prefers-reduced-motion: reduce) {
  .lc-wait svg {
    animation: none;
  }
}

/* Anahtar VARKEN saha bir tık aşağı başlar: ölçüldü, düğme ilk satırdaki oyuncunun
   reyting rozetinin üstüne biniyordu. Düğme yoksa düzen aynen kalır. */
.lu-pitch:has(.lu-11) {
  /* Ölçüldü: 26px'te düğmenin sağ alt köşesi ilk satırdaki oyuncuyla 5px kesişiyordu
     (düğme 528-551, oyuncu 546'da başlıyordu). 40px'te ilk satır düğmenin altında kalır. */
  padding-top: 40px;
}
/* Task405 — sahanın SOL ÜSTÜNDE anlık/maç başı 11 anahtarı (paylaş düğmesi sağ üstte).
   Saha üstünde okunur kalsın diye koyu yarı saydam zemin + ince kenar. */
.lu-11 {
  position: absolute;
  top: 8px;
  left: 8px;
  /* Task405 rev (kullanıcı: "oyuncu ratingi daha önde olmalı") — anahtar oyuncuların
     ALTINDA boyanır: reyting rozeti dairenin dışına taştığı için üst satırda düğmeyle
     kesişebiliyor; öncelik oyuncunun. */
  z-index: 1;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 9px;
  border-radius: 999px;
  border: 1px solid rgba(255, 255, 255, 0.35);
  background: rgba(6, 36, 26, 0.72);
  color: #fff;
  font-size: 11.5px;
  font-weight: 700;
  cursor: pointer;
}
.lu-11 svg {
  width: 13px;
  height: 13px;
}
.lu-11:hover {
  background: rgba(6, 36, 26, 0.88);
}
@media (max-width: 430px) {
  .lu-11 {
    font-size: 10.5px;
    padding: 4px 7px;
  }
}

/* Task408 rev (kullanıcı: "hâlâ buton gibi görünüyor") — etiket DÜĞME KABUĞUNU bırakır:
   hap zemini, kenarı ve dolgusu kalkar; büyük harf + geniş harf aralığıyla BAŞLIK gibi
   okunur. Yeşil saha üstünde okunurluk gölgeyle sağlanır (oyuncu adlarındaki dil). */
.lu-11-tag {
  cursor: default;
  pointer-events: none;
  background: none;
  border: 0;
  padding: 0;
  gap: 0;
  color: rgba(255, 255, 255, 0.95);
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-shadow:
    0 1px 3px rgba(0, 0, 0, 0.8),
    0 0 2px rgba(0, 0, 0, 0.9);
}
.lu-11-tag svg {
  display: none; /* etiket ikon taşımaz: düğme çağrışımı yapıyordu */
}

/* Task409 — ADAY TURNUVALAR (admin > Turnuvalar). Kart, kapsamdaki turnuva kartlarıyla
   aynı dili konuşur; kanıt (takımlarımız + maç sayısı) ikinci satırda durur. İçerik panel
   kenarına TEĞET geçmez: kart kendi dolgusunu taşır (proje ilkesi 4). */
.admin-disc {
  margin-bottom: 18px;
}
.admin-disc-list {
  display: grid;
  gap: 10px;
  margin-bottom: 12px;
}
.admin-disc-card {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 10px 14px;
  padding: 12px 14px;
  border-radius: 12px;
  background: var(--panel2);
  border: 1px solid var(--line);
}
.admin-disc-card.ad-done {
  opacity: 0.6;
}
.ad-id {
  display: flex;
  flex-direction: column;
  min-width: 150px;
  flex: 1 1 190px;
}
.ad-name {
  font-weight: 800;
  font-size: 13.5px;
  color: var(--text);
}
.ad-code {
  font-size: 11px;
  color: var(--muted);
}
.ad-eviz {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 1 1 220px;
  min-width: 0;
}
.ad-teams {
  font-size: 12px;
  color: var(--text);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ad-meta {
  font-size: 11px;
  color: var(--muted);
}
.ad-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
}
.ad-actions .ad-code-in {
  width: 150px;
  font-size: 12px;
}
.ad-actions .ad-template {
  font-size: 12px;
}
.ad-actions .btn {
  font-size: 12px;
  padding: 7px 12px;
}
.ad-badge {
  font-size: 11.5px;
  font-weight: 700;
  color: var(--ok, #3fb27f);
}
/* Sekme rozeti: kaç yeni aday bekliyor (yönetici sekmeye girmeden görsün). */
.atab-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 17px;
  height: 17px;
  margin-left: 6px;
  padding: 0 5px;
  border-radius: 9px;
  background: var(--accent, #d9a441);
  color: #14161c;
  font-size: 11px;
  font-weight: 800;
}

/* Task410 (kullanıcı: "logo gelmeyecekse logo alanı düzgün görünmeli") — logosu olmayan
   turnuvanın nötr rozeti: logonun kapladığı yeri aynen kaplar, baş harfleri taşır.
   Boyut/konum logo sınıfından (comp-logo vb.) gelir; burada yalnız görünüm tanımlanır. */
.comp-ph {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  border-radius: 6px;
  background: var(--panel2);
  border: 1px solid var(--line);
  color: var(--muted);
  font-size: 9px;
  font-weight: 800;
  letter-spacing: 0.02em;
  line-height: 1;
  overflow: hidden;
}

/* Task410 — bonus kapsamı notu: başlıkla kart ızgarası arasında, kart kenarına teğet
   geçmeyen tek satır. */
.bonus-scope {
  margin: -2px 0 10px;
  font-size: 12.5px;
  color: var(--muted);
}
/* Admin turnuva kartındaki katman seçici, anahtarla aynı satırda dar durur. */
.ac-tier {
  font-size: 11.5px;
  padding: 4px 6px;
  flex: 0 1 auto;
  max-width: 100%;
}

/* Task412 — canlı bandı boşken bilgi satırı. Uyarı DEĞİL, durum bilgisi: altın/kalın
   `.cb-note` yerine sakin ton. Kart kutusunun kendi dolgusu yok, bu yüzden satır kendi
   iç boşluğunu taşır — panel kenarına teğet geçmez (proje ilkesi 4). */
.live-empty {
  margin: 0;
  /* Task412 rev — satır kendi yan boşluğunu taşır (kenara teğet değil) ama dikeyde
     yalnız nefes payı kadar: bölüm tek satırlık yer kaplar. */
  padding: 2px 16px 6px;
  font-size: 13.5px;
  color: var(--muted);
  text-align: center;
}
/* Boş durumda kart kutusunun kart aralıkları için taşıdığı üst boşluk ve dolgu gereksiz.
   Seçici `main#content .live-cards` (0,1,1,1) ile aynı bağlamda yazılır — yoksa o kural
   dolguyu geri koyuyordu (ölçüldü). */
main#content .live-cards.lb-empty,
.live-cards.lb-empty {
  margin-top: 0;
  padding: 0;
  gap: 0;
}

/* Task419 — oynanmayan maç rozeti (iptal/ertelendi/yarıda kaldı): canlı kırmızısı ve
   bitmiş grisiyle karışmayan sakin uyarı tonu; compact satırda canlı rozetiyle aynı yuvada. */
.lc-badge.off {
  background: color-mix(in srgb, var(--muted) 18%, transparent);
  border: 1px solid color-mix(in srgb, var(--muted) 45%, transparent);
  color: var(--muted);
  font-weight: 800;
  letter-spacing: 0.04em;
  white-space: nowrap;
}

/* Task534 (kullanıcı: "mobil compact görünümde ERTELENDİ yazısı takım adının üstüne
   geliyor") — ölçüldü: rozet 82px (EN'de 90px), sol hücre 34px → orta sütuna 50px taşıyor,
   ev sahibi adıyla kesişim 180px². Sade satırda durum sözcüğü ORTA YUVAYA geçer (saatin /
   skorun yeri); adlar kalan alanı paylaşır ve gerekirse kırpılır. Sözcük KISALTILMAZ.
   Varsayılan: orta yuvadaki kopya gizli, sol hücredeki tarih gizli (zengin kart eskisi
   gibi: rozet skorun üstünde). Sade satır kuralları aşağıda bağlamı çevirir. */
.lc-x-off {
  display: none;
}

/* Task424 rev — turnuva adı diyaloğu (kartın içinde değil, sayfa üstünde). */
.cn-card {
  max-width: 560px;
  width: min(560px, 92vw);
  text-align: left;
}
.cn-head {
  display: flex;
  align-items: baseline;
  gap: 8px;
  margin-bottom: 4px;
}
.cn-head b {
  font-size: 15px;
}
.cn-note {
  margin: 0 0 10px;
}
.cn-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 10px;
  margin-bottom: 14px;
}
.ac-names-btn {
  font-size: 11.5px;
  padding: 5px 9px;
  flex: none;
}

/* Task431 — DOKUNMA GERİ BİLDİRİMİ. Halka dokunulan noktadan doğar, sönerek büyür.
   Yalnız dokunmatik girdide çizilir (JS karar verir); masaüstünde hover/:active yeterli. */
/* Halka katmanı: yalnız KONUM taşır, kırpmaz. Task431 rev3 (kullanıcı: "menüye tıklarken
   iç içe kareler görünüyor; parmakla dokunulduğu için yuvarlak görünebilir mi?") — kutuya
   kırpınca köşeli düğmede dalga kare gibi kesiliyordu. Halka artık serbest bir daire. */
.rip-host {
  position: fixed;
  overflow: visible;
  pointer-events: none;
  z-index: 300;
}
.rip {
  position: absolute;
  transform: translate(-50%, -50%) scale(0);
  border-radius: 50%;
  background: currentColor;
  /* Task431 rev2 (kullanıcı: "çok ufak bir animasyon var, biraz daha artır") — halka
     kendi süresini alır (320 ms), daha belirgin başlar ve yayılırken söner. Ton hâlâ
     sakin: tek dalga, sıçrama yok. */
  opacity: 0.45;
  pointer-events: none;
  animation: ripOut var(--dur-rip) var(--ease-out) forwards;
}
@keyframes ripOut {
  from {
    /* Nokta gibi değil, küçük bir daire olarak başlar: dalga daha okunur. */
    transform: translate(-50%, -50%) scale(0.25);
    opacity: 0.45;
  }
  60% {
    opacity: 0.3;
  }
  to {
    transform: translate(-50%, -50%) scale(1);
    opacity: 0;
  }
}
/* Yoğun (sade) görünümde daha sönük: bilgi yoğunluğu yüksek, hareket öne çıkmasın. */
.cd-compact .rip {
  opacity: 0.24;
}
/* Basılı tutulan gezinme düğmesi: parmak kalkmadan da geri bildirim (halkayla birlikte). */
/* Basılı düğme: KÖŞELİ zemin yerine yalnız hafif küçülme (kare his vermesin). */
.tab-btn:active {
  transform: scale(0.9);
  transition: transform var(--dur-tap) var(--ease-out);
}

/* Task431 — ERİŞİLEBİLİRLİK TEK KAPI: "hareketi azalt" açıkken süreler sıfırlanır.
   Dosyadaki eski `prefers-reduced-motion` blokları yerinde kalır; bu kural hepsinin
   üstünde son sözü söyler ve yeni yazılan her hareketi de kapsar. */
@media (prefers-reduced-motion: reduce) {
  :root {
    --dur-tap: 0.01ms;
    --dur-sm: 0.01ms;
    --dur-md: 0.01ms;
  }
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* Task432 — PANEL VE POP-UP GEÇİŞLERİ (Faz 2). Kullanıcı kararı: paneller SAĞDAN gelir
   (maç detayı, takım kartı, oyuncu kartı); pop-up'lar yerinde belirir. Ton sakin: tek
   yönlü kayma + solma, sıçrama yok. Süreler hareket sözlüğünden. */
@keyframes panelIn {
  from {
    opacity: 0;
    transform: translateX(32%);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
@keyframes panelOut {
  from {
    opacity: 1;
    transform: none;
  }
  to {
    opacity: 0;
    transform: translateX(28%);
  }
}
@keyframes overlayIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
@keyframes cardIn {
  from {
    opacity: 0;
    transform: translateY(40px) scale(0.93);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* Modal: karartma solarak gelir, kart hafifçe yükselir. */
.modal:not(.hidden) {
  animation: overlayIn var(--dur-md) var(--ease-out);
}
.modal:not(.hidden) > .modal-card,
.modal:not(.hidden) > .dt-wrap,
.modal:not(.hidden) > .pop-card {
  animation: cardIn var(--dur-md) var(--ease-out);
}
/* Maç detayı ve kart sayfaları SAĞDAN girer (kullanıcı kararı). */
/* Task434 rev (kullanıcı: "maç detayından takım kartına girdiğimde kart İKİ DEFA
   animasyon yapıyor… oyuncu kartında da oluyor, bütün projede önlem al") — bir öğe
   YALNIZ BİR giriş animasyonu alır. Kart sayfalarının tamamı (takım, oyuncu, profil,
   Skorinho, favoriler) kendi panel girişini kullanır; kapsayıcının `view-in` kuralı
   `.page-view`'ı DIŞARIDA bırakır, yoksa panelIn'in üstüne viewIn biniyordu. */
#detail-modal.dt-in > .dt-wrap,
#detail-modal.dt-in > .modal-card,
/* Task439 — kart sayfası girişi SINIFLA sürülür: yığından geri dönüşte öge yeniden
   görünür olduğunda animasyon kendiliğinden oynamasın (kullanıcı: "alttaki zaten orada
   duruyor gibi çalışamaz mı?"). */
.page-view.page-in:not([hidden]) {
  animation: panelIn var(--dur-md) var(--ease-out);
}
/* Task439 rev (kullanıcı: "maç detay pop-up'ı hâlâ yeniden yükleniyor gibi oluyor" ve
   "açılırken iki kez ekrana geliyor gibi davranıyor") — detay GENEL modal girişinden
   muaftır: yığından dönüşte hiçbir giriş oynamaz, yeni açılışta yalnız `dt-in` oynar.
   Bu kural olmadan dönüşte genel `cardIn` devreye giriyordu. */
#detail-modal:not(.dt-in),
#detail-modal:not(.dt-in) > .modal-card,
#detail-modal:not(.dt-in) > .dt-wrap {
  animation: none;
}
/* Kullanıcı: "maç detay açılırken iki kez ekrana geliyor gibi davranıyor" — ölçüldü:
   kart `panelIn` ile gelirken İÇİNDEKİ sekme bölmesi de aynı anda `paneIn` oynuyordu,
   yani iki ayrı hareket üst üste biniyordu. Açılış karesinde bölme sessizdir; sekme
   değiştirildiğinde (kart artık yerinde) yine animasyonlu gelir. */

/* Kapanış: JS sınıfı ekler, animasyon bitince gizlenir.
   Task433 (kullanıcı: "popup dışında kalan blur alan netleşsin, sadece popup animasyonla
   ekrandan çıksın") — KARARTMA yalnız SOLAR (yer değiştirmez), KART kayarak çıkar. Eskiden
   ikisi birden kayıyordu ve arka plan da hareket ediyormuş gibi görünüyordu. */
.anim-out {
  animation: overlayOut var(--dur-exit) var(--ease-in) forwards !important;
  pointer-events: none;
}
.anim-out > .modal-card,
.anim-out > .dt-wrap,
.anim-out > .pop-card,
.anim-out > .gate-card,
.anim-out > .admin-confirm-card {
  animation: cardOut var(--dur-exit) var(--ease-in) forwards !important;
}
@keyframes overlayOut {
  from {
    opacity: 1;
  }
  to {
    opacity: 0;
  }
}
/* Task438 — SOLA kaydırarak kapatma: içerik sola kayıp solar. Karartma yine yalnız
   SOLAR (Task433 kuralı: pop-up dışındaki alan hareket etmez). */
@keyframes cardOutLeft {
  from {
    opacity: 1;
    transform: none;
  }
  to {
    opacity: 0;
    transform: translateX(-38%);
  }
}
.sw-left .anim-out > .modal-card,
.sw-left .anim-out > .dt-wrap,
.sw-left .anim-out > .pop-card,
.sw-left .anim-out > .gate-card,
.sw-left .anim-out > .admin-confirm-card {
  animation-name: cardOutLeft !important;
}
.page-view.sw-out:not([hidden]) {
  animation: cardOutLeft var(--dur-exit) var(--ease-in) forwards;
}

@keyframes cardOut {
  from {
    opacity: 1;
    transform: none;
  }
  to {
    opacity: 0;
    transform: translateY(24px) scale(0.96);
  }
}

/* Task433 — SEKME GEÇİŞLERİ. Açılan bölme yerinde belirir: hafif yükselip solmadan gelir.
   Yalnız GÖRÜNEN bölme animasyonlanır; gizli olanlar `display:none` olduğu için sekme
   değişince animasyon kendiliğinden yeniden tetiklenir. */
@keyframes paneIn {
  from {
    opacity: 0;
    transform: translateX(var(--slide, 34px));
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* Task551 rev-2 (kullanıcı üçüncü kez: "başlıklar kayarak geldikten hemen sonra ufak bir
   aşağı kayma yapıyor") — ölçüm: başlığın KONUMU animasyon boyunca sabit (rAF, iki ondalık);
   piksel analizinde görünen kayma, metnin OPAKLIK rampasının parlaklık merkezini aşağı
   çekmesiydi. Yani başlık kaymıyor, SOLUKTAN GELİRKEN kayıyormuş gibi görünüyor.
   Başlıklar artık opaklık rampasız girer: yalnız kayar, metin baştan sona tam opak. */
@keyframes paneSlide {
  from {
    transform: translateX(var(--slide, 34px));
  }
  to {
    transform: none;
  }
}
.group-head.pane-in > :not([hidden]),
.hc-dh.pane-in > :not([hidden]) {
  animation-name: paneSlide;
}

/* Aynı hareketin SOLDAN gelen eşi: takvimde geri kaydırınca içerik soldan girer. */
@keyframes paneInLeft {
  from {
    opacity: 0;
    transform: translateX(calc(var(--slide, 34px) * -1));
  }
  to {
    opacity: 1;
    transform: none;
  }
}
/* Task609 (kullanıcı, iki kez: "takvimde Lig seçiliyken 22↔23 Ağustos geçişinde Premier
   League başlığı animasyonla geldikten sonra y'de aşağı yukarı kayıyor") — WebKit'te
   (iPhone UA, 3x) ölçüldü: başlık metninin kutusu KESİRLİ konumda (b: y=.453, boy 19.078;
   metin y=.885). Transform animasyonu başlığı ayrı katmana rasterliyor; katman kalkınca
   metin kesirli konumdan yeniden çiziliyor → cihazda 1–2 fiziksel piksel dikey sıçrama
   (Task551'deki "kesirli taban animasyon sonunda oynuyordu" notuyla aynı mekanizma).
   Kalıcı çözüm: BAŞLIK HİÇ ANİMASYON ALMAZ (Task551 rev-2 kararı: başlıklar yerinde durur,
   hareket yalnız maç listesinde) — katman yok, yeniden rasterleme yok. Yalnız `.hc-cards`
   solup kayar. Tüm ligler/günler, ileri/geri, kaydırma ve Lig/Gün geçişi için geçerli. */
#home-calendar .hc-week.pane-in > .hc-day,
#home-calendar .hc-week.pane-in > .hc-day > .hc-dh,
#home-calendar .hc-week.pane-in > .hc-day > .hc-dh > * {
  animation: none;
}
#home-calendar .hc-week.pane-in > .hc-day > .hc-cards {
  animation: paneIn var(--dur-pane) var(--ease-out);
}
#home-calendar .hc-week.pane-in.anim-left > .hc-day > .hc-cards {
  animation-name: paneInLeft;
}

/* Task439 rev — maç detayı/Skorinho bölmesi SINIFLA gelir: kart açılırken içerideki
   bölme de aynı anda belirince iki hareket üst üste biniyordu (kullanıcı: "iki kez
   ekrana geliyor gibi davranıyor"). Sekme değiştirildiğinde `dtp-in` verilir. */
.dt-pane.dtp-in,
.admin-pane.active-pane,
.pc-pane:not(.hidden),
/* Task433 rev (kullanıcı: "ligler sayfasındaki tablarda gezinirken veriler animasyonlu
   gelmiyor") — lig sayfasının bölmeleri `.lp-active` ile açılıyor, `.hidden` ile değil. */
.league-pane.lp-active {
  animation: paneIn var(--dur-pane) var(--ease-out);
}

/* Task433 — YIĞINDAN GERİ DÖNÜŞ: üstteki pop-up kapanınca alttaki yeniden çiziliyor ama
   "yeni açılıyor" gibi görünmemeli. Bu sınıf bir kare boyunca girişleri kapatır. */
.anim-skip .modal:not(.hidden),
.anim-skip .modal:not(.hidden) > *,
.anim-skip .dt-pane.dtp-in,
/* Task439 — yığından geri dönüşte KART SAYFALARI da olduğu yerde belirir. */
.anim-skip .page-view.page-in {
  animation: none !important;
}

/* Task433 — GÖRÜNÜM GEÇİŞİ: menüden gelen ekran (Ana Sayfa, Ligler, Skorinho, Favoriler,
   Profil) yumuşakça belirir. Yalnız görünüm DEĞİŞTİĞİNDE oynar; canlı turun yeniden
   çizimleri animasyon üretmez. */
@keyframes viewIn {
  from {
    opacity: 0;
    transform: translateX(34px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}

/* Task433 rev (kullanıcı: "mobilde sayfanın sağında ince bir beyaz çizgi görünmeye
   başladı") — sağdan gelen içerik bir an için sayfayı GENİŞLETİYOR ve tarayıcı yatay
   kaydırma çubuğu/şerit gösteriyordu. Taşan yol kırpılır; `clip` (hidden değil) seçildi
   çünkü hidden yatayda kırparken dikeyde kaydırma kabı yaratır ve yapışkan başlıkları
   bozar. */
/* Task474 (kullanıcı: "canlı, listem, takvim ve sade düğmelerine basınca her şey önce
   küçülüp sonra büyüyor gibi bir efekt oluyor") — sağdan gelen içerik animasyon boyunca
   sayfayı 34 px genişletiyor. Web'de bu `body { overflow-x: clip }` ile yutuluyor, ama
   gövdeden GÖRÜNÜM ALANINA yayılma `clip` değeri için iOS'ta çalışmıyor: sayfa geniş
   sayılıp ekrana sığdırmak için ~%92'ye küçülüyor, animasyon bitince geri büyüyor.
   Kırpma artık yayılmaya değil, GERÇEK bir kaba bağlı: içerik kabı her zaman kırpar
   (yalnız animasyon sırasında değil). `clip` seçildi çünkü `hidden` dikeyde kaydırma kabı
   yaratıp yapışkan başlıkları bozuyor. */
main#content {
  overflow-x: clip;
}
/* Task475 (kullanıcı: "mobilde Skorinho widget'ının üstünde gereksiz bir boşluk
   görüyorum") — ölçüldü: üst çubuğun altı 57 px, bölüm 66 px'te başlıyordu; aradaki 9 px
   ile bölümün kendi 10 px'i üst üste binip marka yazısına kadar 19 px boşluk yapıyordu.
   Telefonda üst çubuk zaten kendi çizgisiyle ayrılıyor, ikinci bir hava payına gerek yok:
   sayfa üst boşluğu 4 px'e iner (geniş ekranda eskisi gibi). */
@media (max-width: 640px) {
  main#content {
    padding-top: 4px;
  }
}
.pane-in:not(.gmatches):not(.live-cards) {
  overflow-x: clip;
}

/* Task433 rev (kullanıcı: "animasyon sadece maç ya da veri alanında olmalı") — hareket
   KAPSAYICIYA değil, kapsayıcının VERİ çocuklarına verilir. Denetim şeritleri (görünüm
   anahtarı, sekmeler, gün düğmeleri, istatistik çipleri, takvim başlığı) yerinde durur:
   kullanıcı dokunduğu düğmenin altından kayıp gitmesini istemedi. */
#content.view-in
  > :not(
    #verify-bar,
    #home-switch,
    #league-tabs,
    #league-name,
    .modal,
    .page-view,
    #home-calendar,
    [hidden]
  ) {
  animation: viewIn var(--dur-view) var(--ease-out);
}
/* Task607 (kullanıcı: "takvim işaretliyse anasayfa menüsüne tıklandığında animasyon
   görünmüyor, listem işaretliyse görünüyor") — ölçüldü: masaüstünde her iki kipte de
   `viewIn` oynuyor; fark cihazda. Takvim kipinde animasyon 2,5–10 bin px boyundaki TEK
   kaba (#home-calendar) veriliyordu; liste kipinde küçük bölümlere ayrı ayrı. Cihaz dev
   katmanı bileştiremeyince animasyon ana iş parçacığına düşüyor, o an meşgul olduğundan
   (liste eşitleme, komşu hafta ön yükleme) kareler atlanıyor ve giriş görünmüyor. Takvimde
   de hareket artık liste kipindeki gibi KÜÇÜK PARÇALARA (gün/lig grupları, canlı bant)
   verilir; başlık şeridi yerinde durur (Task585 ilkesi: şerit animasyon almaz). */
#content.view-in > #home-calendar:not([hidden]) > .hc-week > .hc-day:not([hidden]) > .hc-cards,
#content.view-in > #home-calendar:not([hidden]) > .live-band:not(.hidden, [hidden]) {
  animation: viewIn var(--dur-view) var(--ease-out);
}
/* Task609 — menüden girişte de gün/lig başlığı yerinde durur (katmanlaşmasın). */

.pane-in > :not(.day-switch, .cal-head, .st-scopes, .st-cats, .st-metrics, [hidden]) {
  animation: paneIn var(--dur-pane) var(--ease-out);
}
/* Task493 (kullanıcı: "mobilde Skorinho menüsüne tıklayınca sanki ekran İKİ KEZ
   yükleniyormuş gibi oluyor") — ölçüldü: sayfanın kendisi +31 ms'te `panelIn` ile
   giriyor, İÇİNDEKİ bölmeler +50 ms'te `paneIn` ile bir kez daha giriyordu. İki giriş üst
   üste binince ekran iki kez kuruluyor gibi görünüyor. Sayfa girerken iç bölmeler
   HAREKETSİZDİR; sekme değiştirmede (sayfa girmiyorken) kendi animasyonları sürer. */
.page-view.page-in .pane-in > *,
.page-view.page-in.pane-in > * {
  animation: none;
}
/* Task585 — `pane-all` bile ŞERİTLERİ animasyona katmaz (kullanıcı beş kez bildirdi:
   "lig/hafta çizgileri kaybolup geliyor"). Transform animasyonu şeridi cihazda ayrı
   katmana rasterliyor ve 1px kenarlar animasyon boyunca yutuluyor; masaüstünde
   yeniden üretilemedi (kare kare ölçüldü). Şerit yerinde durur, içerik animasyonlu. */
.pane-in.pane-all > :not(.day-switch, .cal-head, .st-scopes, .st-cats, .st-metrics, [hidden]) {
  animation: paneIn var(--dur-pane) var(--ease-out);
}
.pane-in.anim-left > :not(.day-switch, .cal-head, .st-scopes, .st-cats, .st-metrics, [hidden]),
.pane-in.anim-left.pane-all
  > :not(.day-switch, .cal-head, .st-scopes, .st-cats, .st-metrics, [hidden]) {
  animation-name: paneInLeft;
}

/* Task433 rev — AVATAR/AYARLAR MENÜSÜ de animasyonlu açılır (kullanıcı isteği): üst
   köşeden düşerek belirir. Kapanış `hidden` ile anında olur; menü küçük, çıkışta bekletmek
   dokunuşu ağırlaştırırdı. */
@keyframes menuIn {
  from {
    opacity: 0;
    transform: translateY(-8px) scale(0.96);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.auth-menu:not(.hidden) {
  transform-origin: top right;
  animation: menuIn var(--dur-sm) var(--ease-out);
}
/* Task573 — avatar menüsü animasyonlu GELİR ve GİDER (kullanıcı: "menü animasyonlu gelmeli
   ve gitmeli"). Kural giriş kuralından SONRA yazılır: aynı özgüllükte, çıkış kazansın. */
@keyframes menuOut {
  from {
    opacity: 1;
    transform: none;
  }
  to {
    opacity: 0;
    transform: translateY(-8px) scale(0.96);
  }
}
.auth-menu.menu-out {
  transform-origin: top right;
  animation: menuOut var(--dur-sm) var(--ease-std) forwards;
}

/* Task486 — Kaynak sağlığı tablosu (yönetim). Kesintideki satır kırmızı zeminle ayrışır;
   ölçü küçük ama okunur — panelde altı sütun yan yana duruyor. */
.sh-table {
  font-size: 12.5px;
}
.sh-table td,
.sh-table th {
  padding: 6px 10px;
  white-space: nowrap;
}
.sh-table tr.sh-out {
  background: color-mix(in srgb, var(--red) 12%, transparent);
}

/* Task488 — Ayak ikonu yöne uyar: SOL ayak, sağ ayak çiziminin aynasıdır (tek yol,
   bakımı tek yerde). "Her iki ayak" değerinde iki ikon yan yana durur, üst üste binmez. */
.ic-flip {
  display: inline-flex;
  transform: scaleX(-1);
}
.ic-feet {
  display: inline-flex;
  gap: 1px;
  vertical-align: -2px;
}

/* Task490 — "Golleri nasıl attı?" dökümü: ikon + etiket, çubuk, sayı + yüzde. Çubuk
   ölçüsü satırın PAYINI anlatır; sayılar sağda hizalı durur (tabular). */
.gt-card .gt-row {
  display: grid;
  grid-template-columns: minmax(96px, auto) 1fr auto;
  align-items: center;
  gap: 10px;
  margin-top: 8px;
}
.gt-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 12.5px;
  font-weight: 700;
  color: var(--text);
  white-space: nowrap;
}
.gt-bar {
  display: block;
  height: 8px;
  border-radius: 999px;
  background: var(--panel2);
  overflow: hidden;
}
.gt-bar i {
  display: block;
  height: 100%;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--accent), var(--accent2, var(--accent)));
}
.gt-val {
  display: inline-flex;
  align-items: baseline;
  gap: 5px;
  font-variant-numeric: tabular-nums;
}
.gt-val b {
  font-size: 14px;
}
.gt-val i {
  font-size: 11.5px;
  color: var(--muted);
  font-style: normal;
}
.gt-win {
  font-size: 11.5px;
  color: var(--muted);
  white-space: nowrap;
}

/* Task494 — Kadro DEĞER şeridi yaş şeridiyle aynı dil; oyuncu satırındaki değer adın
   altında, soluk ama okunur (ad her zaman baskın kalır). */
.sa-val-strip .sa-val {
  font-size: 20px;
}
.sq-mv {
  font-weight: 700;
  color: var(--gold);
  font-variant-numeric: tabular-nums;
}

/* Task494 rev — Kadro satırında ülke bayrağı adın hemen önünde: tek karakterlik yer
   kaplar, ad alanını daraltmaz. Bayrağı olmayan ülkede kod yazıldığı için ölçü sabit. */
.sq-flag {
  font-style: normal;
  margin-right: 5px;
  font-size: 12px;
}

/* --- Task502: Oyuncu karşılaştırma ---------------------------------------------------
   Kullanıcı: "Mobilde de tüm veriler en üstte foto, aşağıya doğru bilgiler uzar ve
   ekranda tuhaf durmaz." Bu yüzden ölçü ADI telefonda satırın ÜSTÜNDE tam genişlikte
   durur, değerler altında yan yana; 700 px üstünde ad solda, değerler sağda. Satırlar
   `display: contents` ile TEK ızgarayı paylaşır — sütunlar satırdan satıra kaymaz. */
.modal-card.compare-card {
  position: relative;
  /* Beş sütun için geniş ekranda daha çok yer: 480 px'lik kartta değerler sıkışıyor ve
     1280'de 2 px taşıyordu (ölçüldü). `.modal-card` GENİŞLİK veriyor, bu yüzden ikisi de
     yazılır. */
  width: min(94vw, 900px);
  max-width: min(94vw, 900px);
}
.cmp-grid {
  display: grid;
  grid-template-columns: repeat(var(--cmp-n), minmax(0, 1fr));
  align-items: center;
  gap: 2px 6px;
  margin-top: 6px;
}
.cmp-row {
  display: contents;
}
.cmp-lbl {
  grid-column: 1 / -1;
  margin-top: 8px;
  color: var(--muted);
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.3px;
  text-transform: uppercase;
}
/* Task512 rev-2 (kullanıcı: "anahtar içime sinmedi; bu gösterimi doğru tarifleyecek
   anahtar nasıl olmalı?") — İKİ SEÇENEK DE YAZILI segment: seçili olan dolu, öteki boş.
   Görsel dil istatistik merkezinin kapsam çipleriyle aynı. */
.cmp-seg {
  display: inline-flex;
  gap: 4px;
  margin-left: auto;
}
.cmp-seg-b {
  padding: 3px 9px;
  font-size: 10.5px;
  font-weight: 700;
  text-transform: none;
  letter-spacing: 0;
}
.cmp-seg-b.active {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--on-accent);
}
@media (max-width: 430px) {
  .cmp-seg-b {
    padding: 3px 7px;
    font-size: 10px;
  }
}
.cmp-group {
  display: flex;
  align-items: center;
  gap: 4px;
  grid-column: 1 / -1;
  margin: 12px 0 2px;
  padding-top: 8px;
  border-top: 1px solid var(--line);
  color: var(--gold);
  font-size: 12px;
  font-weight: 800;
}
/* Task513 B — grup başlığında ad + seçimler: telefonda seçimler ALT SATIRA iner, hiçbir
   çip panel kenarına dayanmaz (başlıkta iki segment birden olabiliyor: sezon + kip). */
.cmp-gname {
  min-width: 0;
}
/* Task517 rev (kullanıcı: "Toplam/90 dk başına düğmeleri, Bu sezon/Geçen sezon
   düğmelerinin ALTINA alınsın" + "karşılaştırma popuplarındaki butonlar popup'ı
   ortalasın") — her segment KENDİ SATIRINDA ve ORTALI; grup adı üstte solda kalır. */
.cmp-group {
  flex-wrap: wrap;
}
.cmp-group .cmp-seg {
  flex: 1 0 100%;
  justify-content: center;
  margin-left: 0;
}
@media (max-width: 699px) {
  .cmp-group {
    flex-wrap: wrap;
    row-gap: 6px;
  }
  .cmp-gname {
    flex: 1 1 100%;
  }
  .cmp-group .cmp-seg {
    margin-left: 0;
  }
}
/* Task516 (kullanıcı: "sayfa aşağıya uzadığında hangi kolonun kim olduğu anlaşılamıyor —
   üstteki foto/logo/takım/mevki ekranın üstünde kalabilir mi?") — BAŞLIK YAPIŞIR.
   Satırlar `display: contents` olduğu için yapışacak olan HÜCRELERDİR; hepsi aynı `top`
   ile yapışınca satır bütün olarak durur. Zemin şart: değerler altından geçmeli. */
.cmp-headrow .cmp-cell,
.cmp-headrow .cmp-lbl {
  position: sticky;
  /* Kapatma ✕ de yapışık (kart içinde hep görünür): başlık onun ALTINA yapışır, yoksa
     son sütunun fotoğrafı ✕'in altında kalıyordu (ölçüldü: 840 px² çakışma). */
  top: var(--cmp-stick-top);
  z-index: 4;
  background: var(--panel);
  /* Sütun aralıkları (6 px) ŞEFFAFTI: altından kayan çipler aradan görünüyordu
     (kullanıcı ekran görüntüsünde yakalandı). Yayılan gölge aralıkları da kapatır. */
  box-shadow: 0 0 0 3px var(--panel);
}
.cmp-headrow .cmp-pl {
  border-bottom: 1px solid var(--line);
}
.cmp-grid {
  --cmp-stick-top: 30px;
}
/* Task516 rev (kullanıcı: "en üste çıkınca künyenin üstünde iki çizgi var gibi görünüyor,
   kesintisiz olan kaldırılsın") — başlığın altındaki ince çizgi zaten ayırıyor; hemen
   altındaki İLK grup başlığının kesintisiz üst çizgisi kalkar. Diğer gruplar ayrımını
   korur. */
.cmp-headrow + .cmp-group {
  border-top: 0;
  padding-top: 2px;
}
/* Yapışıkken ✕ şeridi de panel rengiyle örtülür (içerik oradan görünmesin) */
.cmp-grid.cmp-stuck .cmp-headrow .cmp-cell,
.cmp-grid.cmp-stuck .cmp-headrow .cmp-lbl {
  box-shadow:
    0 calc(-1 * var(--cmp-stick-top)) 0 3px var(--panel),
    0 0 0 3px var(--panel);
}
/* Yapışıkken KÜÇÜLÜR: telefonda 130 px'lik başlık ekranın yarısını yemesin. Kimlik için
   gereken kalır (foto/arma + ad + takım), mevki satırı ve ✕ gizlenir. */
.cmp-grid.cmp-stuck .cmp-headrow .cmp-pl {
  padding-top: 6px;
  padding-bottom: 4px;
}
.cmp-grid.cmp-stuck .cmp-headrow .cmp-av {
  width: 30px;
  height: 30px;
}
.cmp-grid.cmp-stuck .cmp-headrow .cmp-av b {
  font-size: 13px;
}
.cmp-grid.cmp-stuck .cmp-headrow .cmp-pos,
.cmp-grid.cmp-stuck .cmp-headrow .cmp-x {
  display: none;
}
/* Task522 (kullanıcı: "takımı olmayan oyuncu, sayfa aşağı kaydırılınca kayıyor") —
   yapışık başlıkta arma satırı SIFIRLANMAZ: takımsız sütunda satır çöküyor, o sütunun
   yüksekliği kısalıyor ve fotoğraflar kayıyordu (ölçüldü). Yapışıkken ad gizlenir ama
   satırın yüksekliği SABİT kalır — boş sütun da aynı yeri kaplar. */
.cmp-grid.cmp-stuck .cmp-headrow .cmp-tm {
  min-height: 16px;
}
.cmp-grid.cmp-stuck .cmp-headrow .cmp-tmn {
  display: none;
}
.cmp-headrow .cmp-av {
  transition:
    width var(--dur-sm) var(--ease-out),
    height var(--dur-sm) var(--ease-out);
}
.cmp-cell {
  min-width: 0;
  text-align: center;
}
.cmp-val {
  padding: 3px 2px;
  /* Sütun sayısı arttıkça punto küçülür: 5 oyuncuda "€67,5 mn" iki satıra bölünüyordu
     (kullanıcı ekran görüntüsü). Değer ASLA satır kırmaz. */
  font-size: calc(14px - (var(--cmp-n) - 2) * 0.8px);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.cmp-best {
  color: var(--accent);
}
.cmp-headrow .cmp-pl {
  /* Task516 — YAPIŞIK başlık: `sticky` aynı zamanda ✕ için konumlanma bağlamı kurar,
     bu yüzden ayrıca `relative` YAZILMAZ (iki kural çakışıyordu, ölçüldü: başlık
     kaydırmada yukarı kaçıyordu). */
  position: sticky;
  top: var(--cmp-stick-top);
  z-index: 4;
  background: var(--panel);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  /* Task512 rev-7 (kullanıcı: "kaldırma ✕ oyuncu fotoğrafının üzerine geldi, gelmemeli") —
     ✕ için ÜSTTE kendi şeridi var: beş sütunda sütun 59 px'e inince köşedeki düğme
     kaçınılmaz olarak fotoğrafın üstüne biniyordu (ölçüldü). */
  padding: 26px 2px 8px;
  cursor: pointer;
}
.cmp-av {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 54px;
  height: 54px;
  border-radius: 50%;
  overflow: hidden;
  background: var(--panel2);
  border: 2px solid var(--cmp-c, var(--accent));
  font-size: 20px;
  font-weight: 800;
}
/* Task507 — takım karşılaştırmasında ARMA kırpılmaz: daire zeminde ortalanır */
.cmp-av-team {
  background: var(--panel2);
  border-color: var(--line2);
  padding: 6px;
}
.cmp-av-team img {
  object-fit: contain;
}
/* Takım kartındaki "Karşılaştır" düğmesi: ad satırının yanında, aynı çip dili.
   Task507 rev (kullanıcı: "buton favori ve paylaşım ikonlarının tam üstüne denk geliyor,
   onların solunda yer alabilir") — ad satırı yapışkan ikon kümesine YER AYIRIR; sığmazsa
   düğme alt satıra düşer, asla ikonların altında kalmaz. */
#team-head .dt-score {
  flex-wrap: wrap;
}
/* Ad satırı yapışkan ikon kümesine (yıldız · paylaş · ✕) yer ayırır */
#team-head .dt-score .dt-tm {
  /* Ad satırı yapışkan ikon kümesine (yıldız · paylaş · ✕) yer ayırır */
  padding-right: 132px;
}
/* Düğme KENDİ satırında: adın altında, solda — ikonların altına hiç girmez ve uzun
   takım adını dar bir kutuya sıkıştırmaz (ölçüldü: sıkıştırınca ad iki satıra düşüyordu). */
/* Karşılaştır düğmesi FORM ŞERİDİNİN solunda (kullanıcı kararı): yapışkan ikonların
   altına hiç girmez, "son 5 maç" sağa kayar. */
/* Task532 (kullanıcı: "mobilde Karşılaştır'a basarken Detay sekmesine de basılıyor";
   ölçüldü: düğme 91×23 px, sekme şeridi 15 px altta) — düğme artık yapışkan ikon
   sırasında: ⭐/paylaş/✕ ile AYNI `top`, AYNI 34 px yükseklik, aynı yuvarlak kabuk.
   Telefonda yalnız ikon (34×34 — diğerleriyle birebir aynı kutu), geniş ekranda yazı da
   görünür; iki durumda da dikey hiza değişmez. */
.page-cmp {
  position: sticky;
  top: var(--sticky-top, 66px);
  z-index: 40;
  /* ⭐ 96 px, paylaş 52 px, ✕ 8 px sağdan; bu düğme onların solunda (96 + 34 + 8) */
  margin: 0 138px -34px auto;
  /* `inline-flex` DEĞİL: satır içi kutuda `margin-left: auto` işlemiyor ve öğe kendi
     satırını açtığı için diğer üç ikonun 28 px üstünde kalıyordu (ölçüldü). */
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: 34px;
  min-width: 34px;
  padding: 0 12px;
  border-radius: 999px;
  border: 1px solid var(--line2);
  background: var(--panel2);
  color: var(--text);
  font-size: 12px;
  font-weight: 800;
  white-space: nowrap;
  cursor: pointer;
}
.page-cmp svg {
  width: 15px;
  height: 15px;
}
.page-cmp:hover {
  border-color: color-mix(in srgb, var(--accent) 45%, var(--line2));
}
@media (max-width: 560px) {
  /* Telefon: yalnız ikon — ad satırıyla çakışmasın ve dört kutu birebir aynı olsun */
  .page-cmp {
    width: 34px;
    padding: 0;
  }
  .page-cmp-tx {
    display: none;
  }
}
.cmp-av img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.cmp-nm {
  /* Ad KELİME ORTASINDAN bölünmez ("R.Lukak / u" görünüyordu); sığmazsa … ile kırpılır. */
  font-size: calc(13px - (var(--cmp-n) - 2) * 0.7px);
  line-height: 1.15;
  text-align: center;
  overflow-wrap: normal;
  /* Task502 rev (kullanıcı: "5 oyuncuda takım isimleri alta sarktı, fotoğrafların hizası
     bozuldu") — ad en çok İKİ satır; sütunların yüksekliği eşit kalır. */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  min-height: 2.3em;
}
/* Task512 rev-8 (kullanıcı: "takım adı takım logosu ALTINDA yazsın, böylece daha çok alan
   olur") — arma üstte, ad altında: ad artık sütunun TAMAMINI kullanıyor, daha az kırpılıyor. */
.cmp-tm {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  gap: 1px;
  max-width: 100%;
  color: var(--muted);
  font-size: 10.5px;
  font-style: normal;
  /* Task512 rev-3 — veri boş gelse de sütunlar kaymaz: satırın yüksekliği sabit */
  min-height: 28px;
}
.cmp-tm img {
  flex: none;
}
/* Mevki: takım satırının altında (kullanıcı: "mevkiler hiçbir yerde yazmıyor") */
.cmp-pos {
  display: block;
  min-height: 14px;
  color: var(--muted);
  font-size: 10px;
  font-style: normal;
  line-height: 1.2;
  text-align: center;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  max-width: 100%;
}
.cmp-tm img {
  width: 13px;
  height: 13px;
}
/* Task512 rev-6 (kullanıcı: "takım logosu altına takım adı da yazsın ama uzunsa … olsun,
   aşağıya sarkmasın") — ad HER genişlikte görünür; TEK SATIR, taşan kısım "…" ile kırpılır.
   (Önceki sürümde telefonda tamamen gizliydi: adlar alta sarkıp fotoğraf hizasını
   bozduğu için. Kırpma hem adı gösterir hem hizayı korur.) */
.cmp-tmn {
  max-width: 100%;
  line-height: 1.25;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
@media (max-width: 699px) {
  .cmp-tm img {
    width: 13px;
    height: 13px;
  }
}
.cmp-x {
  position: absolute;
  top: 0;
  right: 0;
  /* Task512 rev-5 (kullanıcı: "kaldırma ✕ butonu mobilde zor tıklanıyor") — GÖRSEL ölçü
     20 px kalır, DOKUNMA kutusu 34 px'e çıkar: iç boşluk büyür, negatif dış boşluk
     yerleşimi korur (satır ve sütun kaymaz). */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: content-box; /* iç boşluk kutuyu BÜYÜTSÜN (dokunma alanı) */
  width: 20px;
  height: 20px;
  padding: 5px;
  margin: 0;
  border: 0;
  border-radius: 50%;
  background: var(--panel2);
  background-clip: content-box; /* zemin yalnız görünen 20 px dairede */
  color: var(--muted);
  font-size: 11px;
  line-height: 1;
  cursor: pointer;
}
.cmp-x:hover {
  color: var(--red);
}
.cmp-warn {
  margin: 8px 0 0;
  color: var(--muted);
  font-size: 12px;
}
/* Task502 rev — arama EN ÜSTTE; sonuçlar ana aramanın satır diliyle (kocaman fotoğraf
   yerine 26 px avatar + ad + takım). */
.cmp-add {
  position: relative;
  margin: 0 0 12px;
}
.cmp-results {
  max-height: 260px;
  overflow-y: auto;
  margin-top: 6px;
}
.cmp-results .cmp-sr {
  width: 100%;
}
.cmp-results .cmp-sr:hover,
.cmp-results .cmp-sr:focus-visible {
  background: color-mix(in srgb, var(--accent) 14%, transparent);
}
/* Paylaş ✕ ile AYNI hizada (oyuncu kartı deseni): küçük, soluk, ✕'in solunda */
.cmp-share {
  position: absolute;
  top: 16px;
  right: 62px;
  z-index: 6;
}
/* Task513 (kullanıcı: "oyun profili grafiğini künyenin altına taşı") — radar ızgaranın
   İÇİNDE, tam genişlikte: sütunlar tek ızgarayı paylaşmaya devam eder, hiza kaymaz. */
.cmp-radar {
  grid-column: 1 / -1;
  margin-top: 14px;
  margin-bottom: 4px;
}
/* Task513 — örneklemi zayıf sütun: veri saklanmaz, SOLUK yazılır */
/* Task517 B — emsal yüzdeliği: değerin ALTINDA küçük, sessiz bir satır. Yüksek yüzdelik
   (≥ %80) vurguyla yazılır; sayı asıl değerin önüne geçmez. */
.cmp-pct {
  display: block;
  margin-top: 1px;
  color: var(--muted);
  font-size: 9.5px;
  font-style: normal;
  font-weight: 700;
  letter-spacing: 0.2px;
}
.cmp-pct-hi {
  color: var(--accent);
}
.cmp-val.cmp-thin {
  opacity: 0.45;
}
.cmp-note {
  grid-column: 1 / -1;
  margin: 2px 0 0;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.35;
}
.cmp-legend {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 4px 12px;
  margin-top: 6px;
  font-size: 11.5px;
}
.cmp-leg {
  display: inline-flex;
  align-items: center;
  gap: 5px;
}
.cmp-leg i {
  width: 10px;
  height: 10px;
  border-radius: 3px;
}
@media (min-width: 700px) {
  .cmp-grid {
    grid-template-columns: minmax(96px, 150px) repeat(var(--cmp-n), minmax(0, 1fr));
  }
  .cmp-lbl {
    grid-column: auto;
    margin-top: 0;
    text-align: left;
  }
  .cmp-val {
    font-size: 14.5px;
  }
}

/* Task509 (kullanıcı: "sade görünümde canlı butonuna basınca canlı panelindeki maçların
   lig logoları, başlamamış maçtaki Skorinho ikonunun bulunduğu yerde ve boyutta görünsün,
   tıklanınca lige gitsin") — nişan, tahmin düğmesinin YUVASINDA çizilir (bkz. matchActs):
   hiza hesapla değil yapıyla gelir. Ölçü Skorinho ikonuyla aynı: 17 px. */
.lc-acts-lig {
  /* Task540 (kullanıcı: "tamamlanan maçların maç detayında 2 tane lig logosu görünüyor")
     — `matchActs` sade satırın yanında ZENGİN kartta ve MAÇ DETAYI başlığında da
     kullanılıyor; oralarda lig zaten kendi çipinde yazılı olduğu için nişan tekrar
     ediyordu (ölçüldü: detayda aynı logo 14 px + 17 px, iki kez). Nişan VARSAYILAN
     GİZLİDİR; yalnız sade satır bağlamı onu açar (aşağıdaki `.cd-compact .m-acts` kuralı
     — Task509'un istediği yer). */
  display: none;
  align-items: center;
  justify-content: center;
  /* Kardeş ikonlarla (ve tahmin düğmesiyle) AYNI kutu: nişan onun yuvasına oturur */
  padding: 2px 3px;
  border: 0;
  background: none;
  cursor: pointer;
}
.lc-acts-lig .comp-logo {
  width: 17px;
  height: 17px;
  object-fit: contain;
}

/* --- Task524: Fikstürüm (takımın ay programı) ------------------------------
   Popup posterin düzenini EKRAN diliyle tekrarlar: tarih+gün · ev · saat · deplasman ·
   lig. Renkler temadan gelir (Task514 simgeleri), poster ise kendi koyu dilinde kalır. */
/* Geniş ekranda kart daralınca adlar kırpılıyordu (ölçüldü: 480 px kartta "Trabzo…") */
.modal-card.month-card {
  width: min(94vw, 720px);
  max-width: min(94vw, 720px);
}
/* Task530 — takım arama alanı hesap alanı gibi görünmesin diye kendi sınıfı var
   (görünüm `auth-input` ile aynı, ama parola yöneticileri için sinyal vermiyor). */
.mt-input {
  display: block;
  width: 100%;
  margin: 8px 0;
  padding: 10px 12px;
  font-size: 14px;
  border-radius: 10px;
  box-sizing: border-box;
  background: var(--input-bg);
  color: var(--input-text);
  border: 1px solid var(--line2);
}
.mt-input::-webkit-search-cancel-button {
  filter: grayscale(1);
  opacity: 0.6;
}
.mf-list {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 4px;
}
.mf-row {
  display: grid;
  /* Sütunlar: tarih · ev · saat/skor · deplasman · lig. Ad sütunları `min-width: 0`
     olmadan taşıyordu (ölçüldü: tarihin ve lig logosunun üstüne biniyordu). */
  grid-template-columns: 78px minmax(0, 1fr) auto minmax(0, 1fr) 30px;
  align-items: center;
  gap: 12px;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: var(--panel2);
  cursor: pointer;
}
.mf-row:hover {
  border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
}
.mf-date {
  display: flex;
  flex-direction: column;
  line-height: 1.15;
}
.mf-date b {
  font-size: 13.5px;
  font-weight: 800;
}
.mf-date i {
  color: var(--muted);
  font-size: 11px;
  font-style: normal;
}
.mf-team {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
  font-weight: 800;
  font-size: 13.5px;
}
.mf-home {
  justify-content: flex-end;
  text-align: right;
}
.mf-away {
  justify-content: flex-start;
}
.mf-team img {
  width: 26px;
  height: 26px;
  flex: none;
  object-fit: contain;
}
.mf-nm {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.mf-time,
.mf-score {
  min-width: 58px;
  text-align: center;
  color: var(--gold);
  font-size: 15px;
  font-variant-numeric: tabular-nums;
}
.mf-score {
  color: var(--text);
}
.mf-comp {
  display: flex;
  justify-content: flex-end;
}
.mf-comp-logo {
  width: 26px;
  height: 26px;
  object-fit: contain;
  opacity: 0.9;
}
.mf-acts {
  display: flex;
  justify-content: center;
  gap: 10px;
  margin: 14px 0 2px;
}
.mf-acts .st-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 14px;
  font-size: 12.5px;
}
.mf-acts .st-chip svg {
  width: 15px;
  height: 15px;
}
@media (max-width: 560px) {
  /* Telefonda satır İKİ SATIRA açılır: üstte tarih + lig, altta maç. Tek satırda ad
     sütunlarına 83 px kalıyordu ve her ad kırpılıyordu (ölçüldü). */
  .mf-row {
    grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
    grid-template-areas:
      'd d c'
      'h t a';
    row-gap: 8px;
    column-gap: 8px;
    padding: 10px 10px;
  }
  .mf-date {
    grid-area: d;
    flex-direction: row;
    align-items: baseline;
    gap: 6px;
  }
  .mf-comp {
    grid-area: c;
  }
  .mf-home {
    grid-area: h;
  }
  .mf-time,
  .mf-score {
    grid-area: t;
  }
  .mf-away {
    grid-area: a;
  }
  .mf-date b {
    font-size: 12.5px;
  }
  .mf-date i {
    font-size: 11px;
  }
  .mf-team {
    font-size: 12px;
    gap: 6px;
  }
  .mf-team img {
    width: 22px;
    height: 22px;
  }
  .mf-time,
  .mf-score {
    min-width: 46px;
    font-size: 13.5px;
  }
  .mf-comp-logo {
    width: 20px;
    height: 20px;
  }
}

/* ===== Task619 — Admin trafik grafiği ===== */
/* İçerik panel kenarına teğet olmaz (ilke 4): sarmalayıcı iç boşluk verir. */
.traffic-wrap {
  padding: 8px 14px 4px;
}
.traffic-ranges {
  margin: 4px 0 12px;
}
.traffic-chart {
  width: 100%;
  height: auto;
  display: block;
  margin-top: 6px;
}
.traffic-chart .tc-bar {
  fill: color-mix(in srgb, var(--accent) 55%, transparent);
}
.traffic-chart .tc-line {
  stroke: var(--gold);
  stroke-width: 2;
  stroke-linejoin: round;
}
.traffic-chart .tc-dot {
  fill: var(--gold);
}
.traffic-chart .tc-grid {
  stroke: var(--line2);
  stroke-width: 1;
}
.traffic-chart .tc-ax {
  fill: var(--muted);
  font-size: 10px;
}
.traffic-legend {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 10px;
  font-size: 11.5px;
  color: var(--muted);
}
.traffic-legend .tl-bar {
  width: 12px;
  height: 10px;
  border-radius: 2px;
  background: color-mix(in srgb, var(--accent) 55%, transparent);
}
.traffic-legend .tl-line {
  width: 14px;
  height: 2px;
  margin-left: 8px;
  background: var(--gold);
}
