/* ============================================================
   HYPNOSHUB — Clash Royale Analiz Platformu
   Shared stylesheet. Clean white base, blue + gold accents.
   Light/Dark theme via [data-theme] on <html>.
   ============================================================ */

:root {
  /* Accent (blue) — used sparingly on a neutral base */
  --blue-900: #1f2937;   /* dark charcoal for footer / dark strips (neutral, not navy) */
  --blue-700: #1d4ed8;
  --blue-600: #2563eb;
  --blue-500: #3b82f6;
  --blue-100: #eaf1fe;
  /* Muted amber — only for trophies / #1 medal, never as a theme color */
  --gold-600: #9a7b2e;
  --gold-500: #c99a3a;
  --gold-400: #e2c079;
  --gold-100: #f4eede;
  --green-600: #12885a;
  --green-500: #1ea567;
  --green-400: #4cc487;

  /* Surfaces (açık / nötr)

     Eskiden zemin #f6f8fb, kart yüzeyi ise saf #ffffff idi. Sayfanın
     çoğunu kartlar kapladığı için ekran neredeyse bembeyaz oluyordu:
     hem göz alıyor, hem de yüzey/zemin farkı 2-3 birime düştüğü için
     kartların kenarı seçilmiyordu. Artık hiçbir yüzey saf beyaz değil
     ve basamaklar arasında görünür fark var. */
  --bg: #e9edf3;          /* sayfa zemini — en koyu basamak */
  --bg-soft: #e1e7ef;
  --surface: #f8fafc;     /* kart yüzeyi — beyaza yakın ama beyaz değil */
  --surface-2: #edf1f6;   /* girdi/ikincil yüzey */
  --border: #d4dbe5;
  --border-strong: #bcc6d4;
  --text: #1b232e;
  --text-soft: #505a68;
  --text-muted: #7d8695;
  --link: var(--blue-600);
  --shadow: 0 8px 28px rgba(30, 40, 60, 0.07);
  --shadow-sm: 0 2px 10px rgba(30, 40, 60, 0.05);
  --radius: 16px;
  --radius-sm: 10px;
  /* Content column. 1180px left ~340px of dead margin on each side of a
     1861px viewport, which read as the page sitting off to one side; 1360
     uses the width without letting text lines get uncomfortably long. */
  --maxw: 1360px;

  /* Rarity */
  --r-common: #9aa7bd;
  --r-rare: #c99a3a;
  --r-epic: #9a6fe0;
  --r-legendary: linear-gradient(135deg,#8be9ff,#c58bff,#ffb0e6);
  --r-champion: #d9a441;
}

[data-theme="dark"] {
  --bg: #0f141c;
  --bg-soft: #131a24;
  --surface: #171e28;
  --surface-2: #1c2530;
  --border: #2a333f;
  --border-strong: #384250;
  --text: #e9edf3;
  --text-soft: #aab3c0;
  --text-muted: #7a838f;
  --link: #6ea0ff;
  --blue-100: #1a2740;
  --gold-100: #241f12;
  --shadow: 0 10px 34px rgba(0, 0, 0, 0.5);
  --shadow-sm: 0 2px 12px rgba(0, 0, 0, 0.4);
}

* { box-sizing: border-box; }

/* `hidden` niteliği HER ZAMAN gizlesin.

   Tarayıcı bunu kendi stil dosyasındaki [hidden]{display:none} ile yapar,
   ama yazar kuralları tarayıcınınkini her koşulda ezer. Yani .collection
   gibi `display:grid` verilmiş bir öğeye hidden koymak hiçbir işe
   yaramıyordu: nitelik duruyor, öğe ekranda kalıyordu (ölçüldü — kart
   koleksiyonu hidden olmasına rağmen 2810 piksel yer kaplıyordu).
   Bu satır, hidden kullanan her yeri de baştan güvenceye alıyor. */
[hidden] { display: none !important; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: "Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
  background: var(--bg);
  color: var(--text);
  line-height: 1.55;
  -webkit-font-smoothing: antialiased;
  transition: background .3s ease, color .3s ease;
}

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

.container { max-width: var(--maxw); margin: 0 auto; padding: 0 20px; }
.section { padding: 46px 0; }
.section-tight { padding: 28px 0; }

h1,h2,h3 { line-height: 1.15; margin: 0 0 .5em; letter-spacing: -.01em; }
.eyebrow {
  text-transform: uppercase; letter-spacing: .16em; font-size: .72rem;
  font-weight: 800; color: var(--gold-600);
}
.section-title { font-size: 1.5rem; font-weight: 900; }
.section-title .accent { color: var(--blue-600); }
.muted { color: var(--text-muted); }
.soft { color: var(--text-soft); }

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex; align-items: center; gap: 8px;
  border: none; cursor: pointer; font-weight: 800;
  padding: 11px 18px; border-radius: 12px; font-size: .92rem;
  transition: transform .12s ease, box-shadow .2s ease, background .2s;
  font-family: inherit;
}
.btn:hover { transform: translateY(-1px); text-decoration: none; }
.btn-primary { background: var(--blue-600); color: #fff; box-shadow: 0 6px 16px rgba(37,99,235,.25); }
.btn-primary:hover { background: var(--blue-700); }
.btn-gold { background: var(--surface); color: var(--blue-700); border: 1px solid var(--border-strong); box-shadow: var(--shadow-sm); }
.btn-gold:hover { border-color: var(--blue-500); }
.btn-ghost { background: var(--surface-2); color: var(--text); border: 1px solid var(--border); }
.btn-lg { padding: 16px 26px; font-size: 1.05rem; border-radius: 14px; }

/* ---------- Header ---------- */
.site-header {
  position: sticky; top: 0; z-index: 50;
  background: color-mix(in srgb, var(--surface) 88%, transparent);
  backdrop-filter: saturate(140%) blur(10px);
  border-bottom: 1px solid var(--border);
}
.header-inner {
  max-width: var(--maxw); margin: 0 auto; padding: 12px 20px;
  /* Aradaki boşluk 20px'ken menü satırı 1360px'e sığmıyordu ve EĞLENCE
     kırpılıyordu. Boşluğu kısmak 24px kazandırdı. */
  display: flex; align-items: center; gap: 12px;
}
.brand { display: flex; align-items: center; gap: 11px; }
.brand-logo {
  width: 46px; height: 46px; flex: none;
  display: grid; place-items: center; border-radius: 12px; overflow: hidden;
}
.brand-logo img { width: 100%; height: 100%; object-fit: contain; }
.brand-logo svg { width: 28px; height: 28px; }
@media (max-width: 620px){ .brand-logo { width: 38px; height: 38px; } }
.brand-text { line-height: 1; }
.brand-name {
  font-size: 1.32rem; font-weight: 900; letter-spacing: .02em; white-space: nowrap;
}
/* HYPNOS = white (outlined so it stays readable on light header), COUT = blue */
.brand-name .w { color: #ffffff; -webkit-text-stroke: 0.8px #22304a; text-stroke: 0.8px #22304a; text-shadow: 0 1px 1px rgba(0,0,0,.18); }
.brand-name .b { color: var(--blue-600); }
[data-theme="dark"] .brand-name .w { -webkit-text-stroke: 0.6px rgba(0,0,0,.4); }
/* On dark footer the white needs no strong outline */
.site-footer .brand-name .w { -webkit-text-stroke: 0; text-shadow: none; }
.brand-sub { font-size: .58rem; font-weight: 800; letter-spacing: .18em; color: var(--text-muted); text-transform: uppercase; margin-top: 3px; }
.brand:hover { text-decoration: none; }

.main-nav { display: flex; gap: 2px; margin-left: 4px; }
.main-nav a {
  padding: 9px 10px; border-radius: 10px; color: var(--text-soft);
  font-weight: 800; font-size: .82rem; letter-spacing: .02em; text-transform: uppercase;
  /* Two-word labels ("ANA SAYFA", "SON MAÇLAR") were breaking onto a second
     line and making the header look ragged. */
  white-space: nowrap;
}
.main-nav a:hover { background: var(--blue-100); color: var(--blue-700); text-decoration: none; }
.main-nav a.active { color: var(--blue-700); background: var(--blue-100); }

/* Eğlence opens a submenu instead of spilling each game into the top bar.
   The wrapper keeps no gap between the link and the panel, so the pointer can
   travel from one to the other without the menu closing under it. */
.nav-item.has-sub { position: relative; display: inline-flex; }
.nav-sub {
  display: none; position: absolute; top: 100%; left: 0; z-index: 70; min-width: 232px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 12px;
  box-shadow: 0 16px 40px rgba(15,30,60,.20); padding: 6px; margin-top: 6px;
}
/* An invisible bridge across the 6px gap. */
.nav-sub::before { content: ""; position: absolute; left: 0; right: 0; top: -8px; height: 8px; }
.nav-item.has-sub:hover .nav-sub, .nav-item.has-sub:focus-within .nav-sub { display: block; }
.main-nav .nav-sub a {
  display: flex; align-items: center; gap: 9px; padding: 9px 11px; border-radius: 9px;
  text-transform: none; letter-spacing: 0; font-size: .84rem; font-weight: 700; white-space: nowrap;
}
.nav-sub .ns-ic { font-size: 1rem; width: 20px; text-align: center; }

/* The header is a single non-wrapping row, so everything in it has to be
   allowed to shrink — otherwise the last item (the account button) is pushed
   past the right edge and clipped. The search box gives up width first. */
/* `flex-wrap: wrap` bir kırılma noktasına bağlı DEĞİL: arama kutusuna
   240 piksellik bir taban verildiği için, satıra sığmadığı anda kutu
   kendiliğinden alt satıra iniyor. Eskiden tek satıra zorlanıyordu ve
   sığmayınca kutunun çocukları (metin alanı, büyüteç) dışarı taşıp
   yandaki düğmelerin üstüne biniyordu — 768 pikselde ölçüldü. */
.header-tools { margin-left: auto; display: flex; align-items: center; gap: 8px; min-width: 0;
                flex-wrap: wrap; row-gap: 8px; }
.header-tools .search-box { flex: 1 1 240px; min-width: 0; max-width: 380px; }
/* Yazı alanının genişliği `width` ile veriliyor, `min-width` ile DEĞİL.

   Fark önemli: boş bir metin kutusunun doğal genişliği sıfıra yakındır, o
   yüzden başlık ona hiç yer ayırmıyordu (ölçtük: 94 piksel kalıyor, yer
   tutucu yarıda kesiliyordu). `min-width` vermek de çözmedi, tersine
   bozdu — kutu daralabildiği hâlde çocuklar daralamayınca düğme kutunun
   çerçevesinin DIŞINA taşıyordu; büyütecin kopuk görünmesinin sebebi buydu
   (1500 pikselde bile 58 piksel dışarı çıkıyordu).

   `width` doğal genişliği tanımlı kılıyor: başlık 160 piksel yer ayırıyor,
   `min-width:0` sayesinde yer yoksa daralabiliyor, yani taşma imkânsız. */
   (`overflow:hidden` ile kırpmak akla geliyor ama olmaz: kutunun altından
   açılan öneri listesini de keser — bkz. yukarıdaki not.) */
.header-tools .search-box input { width: 160px; min-width: 0; flex: 1 1 auto; }
.header-tools .icon-btn { flex: none; }
.header-inner { min-width: 0; }
/* Menü ASLA kısalmaz: kısalınca son sıradaki EĞLENCE kırpılıyordu ve
   sağ üstte hiç görünmüyordu. Baskıyı arama kutusu emiyor (o da 1180px
   altında zaten menüyle birlikte gizleniyor).
   `overflow: hidden` de kalktı — Eğlence'nin alt menüsü aşağı sarktığı
   için o kutu tarafından kesiliyordu. */
.main-nav { min-width: 0; flex-shrink: 0; }
/* The menu button moved out of header-tools and into the empty space on the
   far left, which also relieved the crowded right-hand side. */
.header-inner > .menu-btn { flex: none; margin-right: 2px; }

/* NOTE: no `overflow: hidden` here. It used to clip the select/button into the
   rounded corner, but it also clipped the type-ahead dropdown that hangs below
   the box, so the corners are rounded on the children instead. */
.search-box {
  display: flex; align-items: stretch; background: var(--surface-2);
  border: 1px solid var(--border-strong); border-radius: 12px; position: relative;
}
.search-box > select, .search-box > input:first-child { border-radius: 11px 0 0 11px; }
.search-box > .search-go { border-radius: 0 11px 11px 0; }
.search-box select {
  border: none; background: var(--blue-100); color: var(--blue-700);
  font-weight: 800; font-size: .8rem; padding: 0 10px; cursor: pointer;
  font-family: inherit; outline: none;
}
.search-box input {
  border: none; background: transparent; padding: 9px 12px; min-width: 210px;
  color: var(--text); font-size: .88rem; font-family: inherit; outline: none;
}
.search-box input::placeholder { color: var(--text-muted); }
.search-box .search-go {
  border: none; background: var(--blue-600); color: #fff; padding: 0 14px; cursor: pointer;
  display: grid; place-items: center;
}
/* Büyütecin boyutu. Bu kural yoktu: SVG'nin kendi ölçüsü olmadığı için
   düğmenin içinde 0×0 çiziliyordu — yani buton bomboş bir mavi kutu gibi
   görünüyordu. Sayfadaki diğer simgelerin hepsinde böyle bir kural var
   (.icon-btn svg, .social-link svg …), atlanan tek yer burasıydı. */
.search-box .search-go svg { width: 17px; height: 17px; flex: none; }
.search-box .search-go:hover { background: var(--blue-700); }

.icon-btn {
  width: 40px; height: 40px; border-radius: 11px; border: 1px solid var(--border);
  background: var(--surface-2); color: var(--text-soft); cursor: pointer;
  display: grid; place-items: center; font-weight: 800; font-size: .8rem;
  transition: .15s;
}
.icon-btn:hover { color: var(--blue-700); border-color: var(--blue-500); }
.icon-btn svg { width: 18px; height: 18px; }

/* mobile nav toggle */
.nav-toggle { display: none; }

/* ---------- Hero (light / neutral) ---------- */
.hero {
  position: relative; overflow: hidden;
  /* Sabit #ffffff yerine yüzey rengi: tema değişince kendiliğinden uyuyor. */
  background:
    radial-gradient(900px 340px at 82% -20%, rgba(37,99,235,.08), transparent 60%),
    linear-gradient(180deg, var(--surface), var(--bg));
  color: var(--text); padding: 54px 0 44px;
  border-bottom: 1px solid var(--border);
}
.hero .container { position: relative; z-index: 2; }
.hero .eyebrow { color: var(--blue-600); }
.hero h1 { font-size: clamp(1.8rem, 4vw, 2.8rem); font-weight: 900; max-width: 18ch; color: var(--text); }
.hero h1 .b { color: var(--blue-600); }
.hero p { font-size: 1.04rem; color: var(--text-soft); max-width: 60ch; }
.hero-cta { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 22px; }
/* Filigran tokmak. %7 opaklık koyu zeminde iş görüyordu ama açık temada
   neredeyse beyaz üstünde beyaz kalıyordu — görünmüyordu. Açık temada
   daha belirgin, koyu temada eski değerinde. */
.hero-watermark {
  position: absolute; right: -30px; top: 50%; transform: translateY(-50%) rotate(-8deg);
  opacity: .16; z-index: 1; pointer-events: none;
}
[data-theme="dark"] .hero-watermark { opacity: .10; }
.hero-watermark img, .hero-watermark svg { width: 380px; height: 380px; object-fit: contain; }
/* Tokmakçılar tablosu tek sütuna düşünce (≤1100px) sağdaki alan bomboş
   kalıyordu. Filigranı gizlemek yerine oraya, arama kartlarının hizasına
   çekiyoruz — boşluğu o dolduruyor. */
@media (max-width: 1100px) {
  .hero-watermark { right: -40px; top: auto; bottom: 0; transform: rotate(-8deg); }
  .hero-watermark img, .hero-watermark svg { width: 320px; height: 320px; }
}
.hero-stats { display: flex; gap: 30px; margin-top: 28px; flex-wrap: wrap; }
.hero-stat b { display: block; font-size: 1.6rem; font-weight: 900; color: var(--blue-600); }
.hero-stat span { font-size: .82rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .08em; }

/* ---------- Cards / grid ---------- */
.grid { display: grid; gap: 20px; }
.grid-2 { grid-template-columns: repeat(2, 1fr); }
.grid-3 { grid-template-columns: repeat(3, 1fr); }
.grid-4 { grid-template-columns: repeat(4, 1fr); }

.card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); box-shadow: var(--shadow-sm); padding: 20px;
}
.card.hoverable { transition: transform .16s ease, box-shadow .2s ease; }
.card.hoverable:hover { transform: translateY(-3px); box-shadow: var(--shadow); }
.card-head { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.card-head .dot { width: 34px; height: 34px; border-radius: 9px; display: grid; place-items: center; background: var(--blue-100); color: var(--blue-700); }
.card-head h3 { margin: 0; font-size: 1.05rem; font-weight: 900; }
.card-head .badge { margin-left: auto; }

.badge {
  font-size: .68rem; font-weight: 800; text-transform: uppercase; letter-spacing: .06em;
  padding: 3px 8px; border-radius: 999px; background: var(--blue-100); color: var(--blue-700);
}
.badge.gold { background: var(--gold-100); color: var(--gold-600); }
.badge.green { background: rgba(47,191,106,.15); color: var(--green-600); }
.badge.max { background: linear-gradient(135deg,var(--gold-500),var(--gold-600)); color:#2a1e00; }

/* ---------- Cards (game cards) ---------- */
.card-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.card-grid.eight { grid-template-columns: repeat(4, 1fr); }
/* Tüm kartlar ızgarası (Kartlar sayfası). Sütun sayısı ekrana göre iniyor;
   ölçüldü: sabit sekiz sütunda 390 piksellik ekranda kart 33×40 piksele
   düşüyor ve resim iksir rozetinin altında kayboluyor. */
.card-grid.tumu { grid-template-columns: repeat(8, 1fr); }
@media (max-width: 1180px){ .card-grid.tumu { grid-template-columns: repeat(6, 1fr); } }
@media (max-width: 900px) { .card-grid.tumu { grid-template-columns: repeat(5, 1fr); } }
@media (max-width: 620px) {
  .card-grid.tumu { grid-template-columns: repeat(4, 1fr); }
  .card-grid { gap: 8px; }
  /* Küçük kartta 22 piksellik rozet resmi yutuyor — onunla birlikte küçülsün. */
  .cr-card .elixir { width: 19px; height: 19px; font-size: .6rem; top: 3px; right: 3px; }
}
@media (max-width: 400px) { .card-grid.tumu { grid-template-columns: repeat(3, 1fr); } }
.cr-card {
  position: relative; border-radius: 12px; overflow: hidden;
  background: var(--surface-2); border: 1px solid var(--border);
  aspect-ratio: 5 / 6; display: flex; flex-direction: column;
}
.cr-card .art { flex: 1; display: grid; place-items: center; overflow: hidden; position: relative; }
.cr-card .art img { width: 100%; height: 100%; object-fit: contain; }
.cr-card .art .fallback {
  width: 100%; height: 100%; display: grid; place-items: center; text-align: center;
  font-weight: 900; font-size: .8rem; padding: 6px; color: var(--text-soft);
  background: linear-gradient(160deg,var(--blue-100),var(--surface-2));
}
.cr-card .lvl {
  text-align: center; font-size: .72rem; font-weight: 900; padding: 4px;
  background: var(--blue-900); color: #fff;
}
.cr-card .lvl.max { background: linear-gradient(135deg,var(--gold-500),var(--gold-600)); color:#2a1e00; }
.cr-card.evo { border: 2px solid transparent; background:
  linear-gradient(var(--surface-2),var(--surface-2)) padding-box,
  linear-gradient(135deg,#8be9ff,#c58bff,#ff9ce4) border-box; }
/* NOTE: the champion modifier is ".champ", never ".hero" — ".hero" is already
   the landing-page banner section (padding: 54px 0 44px), and a card carrying
   that class inherits the padding and clips its own artwork. */
.cr-card.champ:not(.evo) { border: 2px solid transparent; background:
  linear-gradient(var(--surface-2),var(--surface-2)) padding-box,
  linear-gradient(135deg,var(--gold-400),var(--gold-600)) border-box; }
.cr-card .evo-tag, .cr-card .hero-tag, .cr-card .heroslot-tag {
  position: absolute; top: 5px; left: 5px; z-index: 2;
  font-size: .58rem; font-weight: 900; letter-spacing: .04em;
  padding: 2px 6px; border-radius: 6px; text-transform: uppercase;
}
/* Evolution and champion must never read as the same thing. Evolution keeps
   the game's purple; champion is gold. Nothing else uses either colour. */
.cr-card .evo-tag { background: linear-gradient(135deg,#8b5cf6,#6d28d9); color:#fff; }
.cr-card .hero-tag { background: linear-gradient(135deg,var(--gold-400),var(--gold-600)); color:#2a1e00; }

/* An evolution whose artwork was never published: the plain card is shown, so
   the purple outline is dashed to say "this picture is not the evolved one".
   The tooltip spells it out. */
.cr-card.no-evo-art { outline: 2px dashed rgba(139,92,246,.75); outline-offset: -2px; }

/* A HERO slot: the game's gold, clearly not the evolution purple. */
.cr-card .heroslot-tag {
  background: linear-gradient(135deg,#ffd75e,#e0a800); color:#3a2a00;
}
.cr-card.heroslot { box-shadow: 0 0 0 2px #e0a800 inset; }
.di.heroslot { box-shadow: 0 0 0 2px #e0a800 inset; border-radius: 8px; }
.cr-card .elixir {
  position: absolute; top: 5px; right: 5px; z-index: 2; width: 22px; height: 22px;
  border-radius: 50%; background: radial-gradient(circle at 35% 30%,#e884ff,#a01bd6);
  color:#fff; font-size: .7rem; font-weight: 900; display: grid; place-items: center;
  box-shadow: 0 2px 6px rgba(160,27,214,.5);
}

/* ---------- Kart rozetleri kartla birlikte ölçeklenir ----------
   Rozetlerin boyu SABİTTİ (iksir 22px, seviye .72rem) ama kart her yerde
   aynı boyda değil. Ölçüldü — 390 piksellik telefonda:

       anti listesi     kart  33px → iksir rozeti kartın  %67'si
       meta destesi     kart  73px → evrim etiketi        %44'ü
       koleksiyon       kart  71px → seviye çubuğu        %30'u

   Yani küçük kartlarda rozet kartın kendisini örtüyordu; ekranda kart
   sanatı değil mor bir daire görünüyordu.

   Çözüm kapsayıcı sorgusu (container query): rozetler artık kartın
   GENİŞLİĞİNE göre ölçekleniyor (cqw). clamp() ile alt/üst sınır var —
   büyük kartta rozet devleşmesin, küçük kartta okunmaz hâle gelmesin.

   Çok küçük kartlarda (≤44px, ör. yan yana sekiz kart) rozetler tamamen
   gizleniyor: o boyutta kartı tanıtan şey sanatıdır, üstündeki rakam
   değil. Evrim/kahraman bilgisi yine görünür kalıyor çünkü onu çerçeve
   taşıyor (evrimde renkli kenarlık, kahramanda altın iç gölge). */
.cr-card { container-type: inline-size; }

.cr-card .elixir {
  width: clamp(10px, 26cqw, 22px); height: clamp(10px, 26cqw, 22px);
  font-size: clamp(.4rem, 15cqw, .7rem);
  top: clamp(2px, 5cqw, 5px); right: clamp(2px, 5cqw, 5px);
}
.cr-card .lvl {
  font-size: clamp(.4rem, 14cqw, .72rem);
  padding: clamp(1px, 3cqw, 4px) 2px;
}
.cr-card .evo-tag, .cr-card .hero-tag, .cr-card .heroslot-tag {
  /* "KAHRAMAN" sekiz harf ve dar kartta sığmayıp "KAHR…" diye kesiliyordu.
     Harf aralığı da kartla birlikte küçülünce tam sığıyor; kesme yalnızca
     son çare olarak duruyor. */
  font-size: clamp(.28rem, 9.5cqw, .58rem);
  letter-spacing: clamp(0em, .6cqw, .04em);
  padding: clamp(0px, 1.5cqw, 2px) clamp(2px, 4cqw, 6px);
  top: clamp(2px, 5cqw, 5px); left: clamp(2px, 5cqw, 5px);
  /* Sağdan ayrılan pay = iksir rozetinin yeri, o da kartla ölçekleniyor. */
  max-width: calc(100% - clamp(12px, 30cqw, 30px));
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
@container (max-width: 44px) {
  .cr-card .elixir, .cr-card .evo-tag, .cr-card .hero-tag, .cr-card .heroslot-tag { display: none; }
}
/* Kapsayıcı sorgusunu tanımayan eski tarayıcı: rozetler eski sabit
   boyutlarında kalır — kötü görünür ama hiçbir şey kırılmaz. */

/* ---------- Tables ---------- */
/* Tablo sarmalayıcısı. `overflow:hidden` idi ve mobilde asıl sorun buydu:
   375 piksellik ekranda 721 piksellik sıralama tablosu kırpılıyor, sağdaki
   sütunlar (MADALYON, DESTE) hiç görülemiyordu — kaydırmak da mümkün
   değildi çünkü hidden kaydırmayı kapatıyor. `auto` ile artık parmakla
   yana kaydırılıyor; köşe yuvarlaklığı da korunuyor.
   `overscroll-behavior-x` yatay kaydırma bitince hareketin sayfaya (ve
   tarayıcının "geri" hareketine) sıçramasını engelliyor. */
.table-wrap {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); box-shadow: var(--shadow-sm);
  overflow-x: auto; overflow-y: hidden;
  overscroll-behavior-x: contain; -webkit-overflow-scrolling: touch;
}
table.data { width: 100%; border-collapse: collapse; font-size: .9rem; }
table.data thead th {
  text-align: left; font-size: .72rem; text-transform: uppercase; letter-spacing: .08em;
  color: var(--text-soft); background: var(--surface-2); padding: 13px 16px;
  border-bottom: 1px solid var(--border); font-weight: 800; white-space: nowrap;
}
table.data tbody td { padding: 12px 16px; border-bottom: 1px solid var(--border); }
table.data tbody tr:last-child td { border-bottom: none; }
table.data tbody tr:hover { background: var(--surface-2); }
table.data .rank { font-weight: 900; color: var(--text-muted); width: 54px; }
table.data .rank.top1 { color: var(--gold-500); }
table.data .rank.top2 { color: #9fb0c9; }
table.data .rank.top3 { color: #c98a3f; }
.player-link { font-weight: 800; }
.tag { font-size: .78rem; color: var(--text-muted); font-weight: 700; }
.trophy { font-weight: 900; color: var(--gold-600); }
.trophy::before { content: "🏆"; margin-right: 5px; font-size: .8em; }
.clan-chip { display: inline-flex; align-items: center; gap: 8px; }
.clan-crest { width: 22px; height: 26px; flex: none; }

/* rank medal for leaderboard top 3 */
.rank-badge { display:inline-grid; place-items:center; width:30px; height:30px; border-radius:8px; font-weight:900; font-size:.85rem; }
.rank-badge.g1{ background:linear-gradient(135deg,#ffe08a,#f2b807); color:#4a3400; }
.rank-badge.g2{ background:linear-gradient(135deg,#e9eef6,#b7c3d6); color:#39485e; }
.rank-badge.g3{ background:linear-gradient(135deg,#f4c58a,#cd8a3f); color:#4a2c07; }

/* ---------- Wheel / deck generator ---------- */
.generator {
  background:
    radial-gradient(700px 260px at 15% -10%, rgba(47,191,106,.16), transparent 60%),
    var(--surface);
  border: 1px solid var(--border); border-radius: 22px; padding: 30px;
  box-shadow: var(--shadow);
}
.gen-layout { display: grid; grid-template-columns: 1.1fr 1fr; gap: 34px; align-items: center; }
.wheel-wrap { position: relative; display: grid; place-items: center; }
.wheel-pointer {
  position: absolute; top: -6px; left: 50%; transform: translateX(-50%);
  width: 0; height: 0; border-left: 14px solid transparent; border-right: 14px solid transparent;
  border-top: 24px solid var(--gold-500); z-index: 5; filter: drop-shadow(0 2px 3px rgba(0,0,0,.3));
}
.wheel {
  width: 300px; height: 300px; border-radius: 50%;
  border: 10px solid var(--blue-900);
  box-shadow: 0 12px 40px rgba(11,31,77,.35), inset 0 0 0 6px var(--gold-500);
  transition: transform 4.6s cubic-bezier(.15,.9,.2,1);
}
.wheel-hub {
  position: absolute; width: 60px; height: 60px; border-radius: 50%;
  background: linear-gradient(135deg,var(--gold-400),var(--gold-600));
  display: grid; place-items: center; box-shadow: 0 4px 14px rgba(0,0,0,.3);
  border: 4px solid #fff;
}
.wheel-hub svg { width: 30px; height: 30px; }
.gen-btn-col { display: flex; flex-direction: column; gap: 16px; align-items: flex-start; }
.big-green-btn {
  width: 100%;
  background: linear-gradient(180deg,#3fd47b,#1f9d4d);
  color: #06340f; font-weight: 900; font-size: 1.15rem; letter-spacing: .01em;
  border: none; border-radius: 16px; padding: 20px 22px; cursor: pointer;
  box-shadow: 0 8px 0 #14712f, 0 14px 24px rgba(31,157,77,.4);
  text-transform: uppercase; position: relative; top: 0;
  transition: top .08s, box-shadow .08s;
  background-image:
    linear-gradient(180deg,#3fd47b,#1f9d4d),
    repeating-linear-gradient(45deg, rgba(255,255,255,.06) 0 6px, transparent 6px 12px);
}
.big-green-btn:hover { filter: brightness(1.04); }
.big-green-btn:active { top: 6px; box-shadow: 0 2px 0 #14712f, 0 6px 12px rgba(31,157,77,.4); }
.big-green-btn:disabled { opacity: .7; cursor: wait; }

.deck-result { margin-top: 26px; border-top: 1px dashed var(--border-strong); padding-top: 24px; display: none; }
.deck-result.show { display: block; animation: fadeUp .4s ease; }
.deck-result h3 { font-size: 1.25rem; font-weight: 900; }
.deck-result h3 .name { color: var(--blue-600); }
.deck-meta { display: flex; gap: 18px; flex-wrap: wrap; margin: 6px 0 18px; font-size: .85rem; color: var(--text-soft); }
.deck-meta b { color: var(--text); }

@keyframes fadeUp { from { opacity: 0; transform: translateY(10px);} to {opacity:1; transform:none;} }

/* ---------- Player dashboard sample ---------- */
.dash { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.stat-tile { background: var(--surface-2); border: 1px solid var(--border); border-radius: 12px; padding: 14px; }
.stat-tile .k { font-size: .72rem; text-transform: uppercase; letter-spacing: .07em; color: var(--text-muted); font-weight: 800; }
.stat-tile .v { font-size: 1.5rem; font-weight: 900; margin-top: 2px; }
.battle-row { display: flex; align-items: center; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--border); }
.battle-row:last-child { border-bottom: none; }
.result-pill { font-size: .72rem; font-weight: 900; padding: 3px 10px; border-radius: 999px; }
.result-pill.win { background: rgba(47,191,106,.16); color: var(--green-600); }
.result-pill.loss { background: rgba(224,60,60,.14); color: #d23c3c; }
.result-pill.draw { background: var(--surface-2); color: var(--text-muted); }

/* ---------- ANTİ DESTE  🛡️ ----------
   Tasarımın tek kuralı: sekiz kart TEK SIRADA.

   Önce yatay kaydırmalı bir ray vardı ve her deste iki satır hâlinde
   çiziliyordu. Telefonda iki sorun birden çıkıyordu: listeye ancak iki
   deste sığıyordu ve "hangi desteler var" sorusunun cevabı için parmakla
   savurmak gerekiyordu. Sekiz kartı tek sıraya alınca bir deste ~90 piksel
   tutuyor, sekiz deste tek ekrana giriyor ve seçim tek dokunuş oluyor.

   390 px ekranda kart genişliği ~37 px; oyunun kendi deste ekranıyla aynı
   mertebe, kart sanatı bu boyutta tanınıyor.
   ---------------------------------------------------------------- */
.anti-liste { display:flex; flex-direction:column; gap:8px; }

.anti-satir { display:block; width:100%; text-align:left; cursor:pointer; font:inherit;
  color:inherit; background:var(--surface); border:2px solid var(--border);
  border-radius:14px; padding:10px 12px; transition:border-color .15s, background .15s; }
.anti-satir:hover { border-color:var(--blue-600); }
.anti-satir.secili { border-color:var(--blue-600); background:rgba(30,90,224,.06); }
.anti-satir .as-ust { display:flex; align-items:baseline; gap:10px; margin-bottom:8px; }
.anti-satir .as-ad { font-weight:900; font-size:.86rem; line-height:1.25;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; min-width:0; }
.anti-satir .as-bilgi { margin-left:auto; font-size:.74rem; color:var(--text-muted);
  font-weight:700; white-space:nowrap; }

/* Sekiz kartlık sıra. `.mini-cards` ızgarası her kullanıldığı yerde AYRI
   tanımlı (`.metadeck`, `.modal-box`, …) — ortak kural yok, o yüzden burada
   kendi ızgaramızı yazıyoruz. Yazmayı atlarsak kartlar alt alta diziliyor. */
/* max-width ŞART: geniş ekranda sekiz kart 1/8'er pay alınca her biri
   160 pikselin üstüne çıkıyor ve tek bir deste satırı 241 piksel oluyordu —
   listenin kompakt olması bütün tasarımın amacıydı. Üst sınır kartı ~62
   piksele sabitliyor; telefonda zaten sınırın altında kalıyor. */
.as-kartlar { display:grid; grid-template-columns:repeat(8,1fr); gap:4px; max-width:540px; }
.as-kartlar .cr-card { aspect-ratio:4/5; width:100%; }
/* Evrim/kahraman etiketleri kart 37 piksele inince kartın yüzünü kaplıyor. */
.as-kartlar .cr-card .evo-tag,
.as-kartlar .cr-card .hero-tag,
.as-kartlar .cr-card .heroslot-tag { font-size:.4rem; padding:0 2px; }
/* Aynı sebeple seviye/iksir rozetleri de küçülüyor. */
.as-kartlar .cr-card .lvl, .as-kartlar .cr-card .cost { font-size:.5rem; }

/* Arketip çipleri tek satırda yana kayıyor: 24 çip sarınca telefonda sekiz
   satır tutuyor ve asıl deste listesini ekranın dışına itiyor. */
.anti-koclar { display:flex; gap:7px; overflow-x:auto; padding-bottom:10px;
  margin-bottom:4px; scrollbar-width:thin; }
.anti-koc { flex:0 0 auto; font:inherit; font-size:.75rem; font-weight:800; cursor:pointer;
  padding:5px 11px; border-radius:999px; border:1px solid var(--border);
  background:var(--surface-2); color:var(--text-soft); }
.anti-koc:hover { border-color:var(--blue-600); color:var(--blue-600); }
.anti-koc.secili { background:var(--blue-600); border-color:var(--blue-600); color:#fff; }

/* ---- sonuç ---- */
.anti-bas-kart { margin-bottom:14px; }
.anti-sonuc { margin-bottom:12px; }
.anti-sonuc .as-ust { display:flex; align-items:center; gap:10px; }
.anti-sonuc .as-sira { flex:0 0 auto; width:22px; height:22px; border-radius:50%;
  background:var(--surface-2); color:var(--text-muted); font-size:.72rem; font-weight:900;
  display:grid; place-items:center; }
.anti-sonuc .as-yuzde { font-size:1.6rem; font-weight:900; color:var(--green-600);
  font-variant-numeric:tabular-nums; line-height:1; }
.anti-sonuc .as-ad { display:flex; flex-direction:column; line-height:1.3;
  font-weight:900; font-size:.92rem; min-width:0; }
.anti-sonuc .as-ad .muted { font-weight:600; font-size:.75rem; }
/* Oranı GÖZLE okutuyor: %66 ile %56 farkı sayıdan çok buradan anlaşılıyor.
   Boş kalan kısım rakibin payı, o yüzden zemin şeffaf değil kırmızıya çalıyor. */
.anti-cubuk { height:7px; border-radius:999px; background:rgba(224,60,60,.2);
  overflow:hidden; margin:10px 0 12px; }
.anti-cubuk span { display:block; height:100%; border-radius:999px; background:var(--green-600); }
.anti-sonuc .as-alt { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:12px;
  font-size:.78rem; }
.as-kopya { margin-left:auto; display:inline-flex; align-items:center; gap:6px;
  font-size:.8rem; padding:8px 14px; }
.as-kopya svg { width:15px; height:15px; }

.anti-kisa { display:flex; align-items:center; gap:10px; padding:8px 0;
  border-bottom:1px solid var(--border); font-size:.86rem; }
.anti-kisa:last-child { border-bottom:none; }
.anti-kisa-p { font-weight:900; font-variant-numeric:tabular-nums;
  color:var(--text-muted); min-width:44px; }
.anti-kisa-p.iyi { color:var(--green-600); }

@media (max-width: 560px){
  .anti-satir { padding:9px 10px; }
  .as-kartlar { gap:3px; }
  .anti-sonuc .as-yuzde { font-size:1.35rem; }
  /* Kopyala düğmesi tam genişliğe geçiyor: asıl eylem o, köşede küçük
     kalmamalı ve başparmakla rahat basılmalı. */
  .as-kopya { margin-left:0; flex-basis:100%; justify-content:center; padding:11px 14px; }
}

/* ---------- Eşleşme rozeti  ⚔️ ----------
   "Bu karşılaşmada kim kazanıyor?" — savaş günlüğünde ve Son Maçlar
   akışında görünüyor. Dört hâli var: oyuncu favori (up), rakip favori
   (down), başabaş/ayna (even) ve örneklem yetersiz (thin).

   `thin` bilerek soluk ve çerçevesiz: "60 maçtan az veri" bir sonuç
   değil, sonucun HENÜZ olmadığının bildirimi — diğer üçüyle aynı
   görsel ağırlıkta durursa okuyan onu da bir oran sanıyor.

   Renkler yalnız arka planı taşıyor, metin her iki temada da kendi
   belirteciyle yazılıyor; alfa'lı zeminler koyu temada da okunur. */
.mu-chip { display:inline-flex; align-items:center; gap:5px; max-width:100%;
  font-size:.72rem; font-weight:800; line-height:1.35; padding:3px 9px; border-radius:999px;
  background:var(--surface-2); color:var(--text-soft); border:1px solid transparent;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.mu-chip b { font-weight:900; }
.mu-chip.up   { background:rgba(47,191,106,.16); color:var(--green-600); }
.mu-chip.down { background:rgba(224,60,60,.14);  color:#d23c3c; }
.mu-chip.even { background:var(--surface-2); color:var(--text-soft); border-color:var(--border); }
.mu-chip.thin { background:transparent; color:var(--text-muted); font-weight:700;
  border-color:var(--border); }
/* Günlükte kendi satırında durur: taç/lig etiketlerinin arasına
   sıkışınca dar ekranda okunmuyordu. */
.bl-mu { margin:0 0 10px; }
/* Akışta maç türü ile zaman damgasının arasında. `mago` zaten
   margin-left:auto ile sağa yaslı, yani rozet ortada kalıyor. */
.match-top .mu-chip { flex:0 1 auto; min-width:0; }
@media (max-width: 560px){
  /* Dar ekranda iki kart adı + iki yüzde tek satıra sığmıyor; rozet
     tam genişliğe geçiyor ve kısaltma yerine sarmalıyor. */
  .mu-chip { white-space:normal; font-size:.7rem; }
  .match-top .mu-chip { order:3; flex-basis:100%; }
  .match-top .mago { order:2; }
}

/* Profile battle log */
.bl-row { border-bottom: 1px solid var(--border); padding: 14px 0; }
.bl-row:last-child { border-bottom: none; }
.bl-lbl { font-size: .72rem; font-weight: 800; margin-bottom: 4px; color: var(--text-muted); }

/* trophy chart */
.spark { width: 100%; height: 90px; display: block; }
.trophy-graph { width: 100%; height: 180px; display:block; }

/* ---------- Profile header ---------- */
.profile-hero { background: linear-gradient(135deg,var(--blue-900),var(--blue-700)); color:#fff; border-radius: 20px; padding: 26px; display:flex; gap:20px; align-items:center; flex-wrap:wrap; }
.profile-hero .avatar { width:76px; height:76px; border-radius:18px; background:linear-gradient(135deg,var(--gold-400),var(--gold-600)); display:grid; place-items:center; font-size:2rem; flex:none; }
/* Lig rozeti taşındığında altın kare fazlalık — görsel kendi zemininde durur. */
.profile-hero .avatar.lig { background:rgba(255,255,255,.10); border:1px solid rgba(255,255,255,.18); }
.profile-hero .avatar.lig img { width:60px; height:60px; object-fit:contain; display:block; }
.profile-hero .ph-body { min-width:0; flex:1 1 240px; }
.profile-hero h1 { margin:0; font-size:1.7rem; }
/* Etiket satırı esnek bir sıra. Eskiden düz metindi ve içindeki klan arması
   (22×26 blok) satır hizasından yukarı kaçıyordu; şimdi hepsi ortadan hizalı
   ve dar ekranda temiz sarıyor. */
.profile-hero .tag { color:#cdd9f2; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.profile-hero .tag i { font-style:normal; opacity:.45; }
.profile-hero .tag .clan-chip { gap:6px; }
.profile-hero .tag .clan-badge { width:22px; height:22px; display:block; }
.profile-hero .p-stats { margin-left:auto; display:flex; gap:26px; flex-wrap:wrap; }
/* Sayaçlar alttan hizalı. Lig sayacının değeri yazı olduğu için (ASİL
   ŞAMPİYON) ötekilerden küçük punto; üstten hizalıyken alt satır 13 piksel
   yukarıda kalıyordu, yani "LİG" ile "KUPA YOLU" aynı çizgide değildi.
   Alttan hizalayınca etiket satırı hepsinde aynı yere düşüyor ve değerlerin
   alt kenarları da kendiliğinden çakışıyor. */
.profile-hero .p-stats > div { display:flex; flex-direction:column; justify-content:flex-end; }
.profile-hero .p-stats b { display:block; font-size:1.5rem; color:var(--gold-400); }
/* Sayı yerine lig adı yazınca 1.5rem taşıyordu. */
.profile-hero .p-stats b.sm { font-size:1.05rem; line-height:1.45; }
.profile-hero .p-stats span { font-size:.72rem; text-transform:uppercase; letter-spacing:.08em; color:#c3d1ee; }

/* ---------- Lig geçmişi ---------- */
.lg-strip { display:flex; gap:6px; margin-bottom:16px; flex-wrap:wrap; }
.lg-step {
  width:26px; height:26px; border-radius:8px; display:grid; place-items:center;
  font-size:.72rem; font-weight:900; background:var(--surface-2);
  border:1px solid var(--border); color:var(--text-muted);
}
.lg-step.on { background:var(--blue-100); border-color:var(--blue-500); color:var(--blue-600); }
.lg-step.now { background:var(--blue-600); border-color:var(--blue-600); color:#fff; }
.lg-bars { display:flex; flex-direction:column; gap:14px; }
/* ÜÇÜNCÜ SÜTUN SABİT OLMAK ZORUNDA. `auto` iken sütunun genişliği yazının
   uzunluğuna göre değişiyordu: "NİHAİ ŞAMPİYON ESKİ ÖLÇEK" satırında yazı
   geniş olduğu için çubuk rayı daralıyor, dolayısıyla DAHA YÜKSEK madalyonlu
   satırın çubuğu daha kısa görünüyordu. Ray artık her satırda aynı
   genişlikte, yani çubuklar gerçekten karşılaştırılabilir. */
.lg-row { display:grid; grid-template-columns:96px minmax(0,1fr) 184px; align-items:center; gap:12px; }
.lg-note { margin:14px 0 0; font-size:.76rem; color:var(--text-muted); }
.lg-lbl { font-size:.76rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em; color:var(--text-muted); }
.lg-track { position:relative; height:26px; border-radius:8px; background:var(--surface-2); overflow:hidden; }
.lg-fill { height:100%; border-radius:8px; background:linear-gradient(90deg,var(--blue-500),var(--blue-700)); }
.lg-row.best .lg-fill { background:linear-gradient(90deg,var(--gold-400),var(--gold-600)); }
.lg-ic { position:absolute; right:4px; top:50%; transform:translateY(-50%); object-fit:contain; }
.lg-val { text-align:right; line-height:1.35; }
.lg-val b { display:block; font-size:.9rem; }
.lg-val span { font-size:.76rem; color:var(--text-soft); }
.lg-old {
  font-size:.62rem; font-weight:800; letter-spacing:.04em; text-transform:uppercase;
  padding:1px 5px; border-radius:5px; background:var(--surface-2);
  border:1px solid var(--border); color:var(--text-muted); vertical-align:2px;
}
/* Dönemi okunamayan kayıt işareti. Uydurulmuş bir lig adını sessizce
   göstermek yerine belirsizliği görünür kılıyor; ipucu iki okumayı da yazar. */
.lg-quest {
  display:inline-grid; place-items:center; width:16px; height:16px; margin-left:5px;
  border-radius:50%; font-size:.62rem; font-weight:900; cursor:help; vertical-align:2px;
  background:var(--surface-2); border:1px solid var(--border); color:var(--text-muted);
}
@media (max-width: 620px) {
  .lg-row { grid-template-columns:1fr; gap:4px; }
  .lg-val { text-align:left; }
}

/* ---------- Meta deck cards ---------- */
.metadeck { }
.metadeck .mini-cards { display:grid; grid-template-columns:repeat(4,1fr); gap:6px; margin:12px 0; }
.metadeck .mini-cards .cr-card { aspect-ratio: 4/5; }
.metadeck .foot { display:flex; align-items:center; gap:14px; font-size:.82rem; color:var(--text-soft); }
.metadeck .foot .wr { color: var(--green-600); font-weight:900; }
.elixir-badge { display:inline-flex; align-items:center; gap:4px; font-weight:800; color:#a01bd6; }

/* ---------- Notice / API status ---------- */
.api-status {
  display: inline-flex; align-items: center; gap: 8px; font-size: .78rem; font-weight: 800;
  padding: 6px 12px; border-radius: 999px; border: 1px solid var(--border);
  background: var(--surface-2); color: var(--text-soft);
}
.api-status .led { width: 9px; height: 9px; border-radius: 50%; background: var(--gold-500); box-shadow: 0 0 0 3px rgba(242,184,7,.2); }
.api-status.live .led { background: var(--green-500); box-shadow: 0 0 0 3px rgba(47,191,106,.2); }

.notice {
  background: var(--gold-100); border: 1px solid #f0dca0; color: #7a5c05;
  padding: 12px 16px; border-radius: 12px; font-size: .86rem; display:flex; gap:10px; align-items:flex-start;
}
[data-theme="dark"] .notice { border-color:#5a4a12; color: var(--gold-400); }

/* ---------- Resmi hesap tiki ----------
   Rozet mavi, içindeki onay beyaz. Adın hemen yanında durur. */
.vtick { display:inline-flex; width:1em; height:1em; vertical-align:-0.12em; margin-left:.28em; color:var(--blue-600); flex:none; }
.vtick svg { width:100%; height:100%; display:block; }
h1 .vtick { width:.82em; height:.82em; }
/* Resmi hesap satırı listede hafifçe öne çıksın. */
.res-row.vf { border-color: var(--blue-500); background: color-mix(in srgb, var(--blue-600) 6%, var(--surface)); }

/* PRO — Nihai Kademe dünya ilk 100. Tikten ayrı dursun diye altın rozet. */
.protag {
  display:inline-block; margin-left:.3em; padding:1px 6px; border-radius:6px;
  background:linear-gradient(135deg,var(--gold-500),var(--gold-600)); color:#fff;
  font-size:.62em; font-weight:900; letter-spacing:.06em; vertical-align:middle;
  line-height:1.5; white-space:nowrap;
}

/* ---------- PRO başvurusu (oyuncu formu) ---------- */
.pro-form { display:flex; gap:8px; flex-wrap:wrap; align-items:center; }
.pro-form input, .pro-form select {
  font-family:inherit; font-size:.88rem; padding:9px 11px; border-radius:11px;
  border:1px solid var(--border-strong); background:var(--surface-2); color:var(--text);
}
.pro-form #paTag { width:150px; font-weight:800; letter-spacing:.04em; text-transform:uppercase; }
.pro-form #paNote { flex:1; min-width:200px; }

/* ---------- PRO başvuruları (yönetici paneli) ---------- */
.pa-list { display:flex; flex-direction:column; gap:10px; max-height:56vh; overflow-y:auto; }
.pa-row { border:1px solid var(--border); border-radius:12px; padding:11px 13px; background:var(--surface-2); }
.pa-head { display:flex; align-items:center; gap:8px; flex-wrap:wrap; font-size:.92rem; }
.pa-stats { display:flex; gap:14px; flex-wrap:wrap; margin-top:6px; }
.pa-stat { font-size:.79rem; color:var(--text-soft); }
.pa-note { margin-top:7px; font-size:.83rem; background:var(--surface); border-radius:9px; padding:7px 10px; }
.pa-foot { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-top:9px; font-size:.78rem; }
.pa-foot .btn { padding:5px 12px; font-size:.8rem; margin-left:0; }
.pa-foot .btn-primary { margin-left:auto; }
.pa-manual { display:flex; gap:8px; flex-wrap:wrap; margin:10px 0; padding:10px; border:1px dashed var(--border-strong); border-radius:12px; }
.pa-manual input, .pa-manual select {
  font-family:inherit; font-size:.85rem; padding:7px 10px; border-radius:10px;
  border:1px solid var(--border-strong); background:var(--surface); color:var(--text);
}
.pa-manual #pgTag { width:140px; font-weight:800; text-transform:uppercase; }
.pa-manual #uaQ { flex:1; min-width:160px; }
.pa-manual .btn { padding:6px 12px; font-size:.82rem; }

/* ---------- Kullanıcı yönetimi (yasaklama) ---------- */
.ua-row {
  display:flex; align-items:center; gap:11px;
  border:1px solid var(--border); border-radius:12px; padding:9px 12px; background:var(--surface-2);
}
.ua-row.banned { border-color:rgba(224,67,95,.45); background:rgba(224,67,95,.06); }
.ua-av {
  width:32px; height:32px; border-radius:9px; flex:none; display:grid; place-items:center;
  background:var(--blue-600); color:#fff; font-weight:900; font-size:.9rem;
}
.ua-tx { display:flex; align-items:center; gap:7px; flex-wrap:wrap; min-width:0; flex:1; }
.ua-tx b { font-size:.92rem; }
.ua-sub { width:100%; font-size:.75rem; color:var(--text-muted); }
.ua-row .btn { padding:5px 11px; font-size:.8rem; flex:none; }
.ua-row .ua-ban:hover { border-color:#e0435f; color:#e0435f; }

/* ---------- Özel mesajlar ----------
   Sohbet iki taraflı: "me" sağda mavi, karşı taraf solda nötr. */
.msg-list { display:flex; flex-direction:column; gap:8px; max-height:46vh; overflow-y:auto; padding:4px 2px; }
#msgBox { max-height:46vh; overflow-y:auto; }
.msg-b { max-width:78%; padding:9px 12px; border-radius:14px; display:flex; flex-direction:column; gap:3px; }
.msg-b .msg-t { font-size:.88rem; line-height:1.4; white-space:pre-wrap; word-break:break-word; }
.msg-b .msg-at { font-size:.68rem; opacity:.7; }
.msg-b.me   { align-self:flex-end; background:var(--blue-600); color:#fff; border-bottom-right-radius:5px; }
.msg-b.them { align-self:flex-start; background:var(--surface-2); border:1px solid var(--border); border-bottom-left-radius:5px; }
.msg-send { display:flex; gap:8px; align-items:flex-end; margin-top:12px; }
.msg-send textarea {
  flex:1; min-width:0; resize:vertical; font-family:inherit; font-size:.88rem; padding:9px 11px;
  border-radius:12px; border:1px solid var(--border-strong); background:var(--surface-2); color:var(--text);
}
.msg-threads { display:flex; flex-direction:column; gap:6px; max-height:52vh; overflow-y:auto; }
.msg-row {
  display:flex; align-items:center; gap:10px; width:100%; text-align:left;
  background:var(--surface-2); border:1px solid var(--border); border-radius:12px;
  padding:9px 12px; cursor:pointer; font-family:inherit; color:inherit;
}
.msg-row:hover { border-color:var(--blue-500); }
.msg-av { width:30px; height:30px; border-radius:9px; background:var(--blue-600); color:#fff;
          display:grid; place-items:center; font-weight:900; font-size:.82rem; flex:none; }
.msg-main { display:flex; flex-direction:column; gap:2px; min-width:0; flex:1; }
.msg-u { font-weight:800; font-size:.88rem; }
.msg-last { font-size:.78rem; color:var(--text-muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.msg-badge { background:#e0435f; color:#fff; font-size:.72rem; font-weight:900; padding:2px 7px; border-radius:999px; flex:none; }

/* Tokmakçılar tablosunda yönetici yasaklama düğmesi */
.board-ban {
  border:none; background:transparent; cursor:pointer; font-size:.9rem; line-height:1;
  padding:3px 5px; border-radius:7px; opacity:.5; flex:none;
}
.board-ban:hover { opacity:1; background:rgba(224,67,95,.14); }

/* ---------- Açılır kapanır kart başlığı ----------
   Başlık <button> olduğu için klavyeyle de açılabiliyor. */
.card.collapsible .as-toggle {
  display:flex; align-items:center; gap:10px; width:100%;
  background:none; border:none; padding:0; margin:0 0 2px;
  font-family:inherit; color:inherit; cursor:pointer; text-align:left;
}
.card.collapsible .as-toggle:hover h3 { color:var(--blue-600); }
.card.collapsible .chev { display:inline-flex; width:18px; height:18px; color:var(--text-muted); transition:transform .18s; }
.card.collapsible .chev svg { width:100%; height:100%; }
.card.collapsible.open .chev { transform:rotate(180deg); }
.card.collapsible .collection { margin-top:12px; }

/* ---------- Kart Kapışması ----------
   İki kart yan yana, ortada VS. Dar ekranda alt alta geçiyor ama
   VS ortada kalıyor, yoksa hangi kartın kime karşı olduğu kayboluyor. */
.quiz-top.kapisma { background: linear-gradient(135deg, #7c2d12, #b45309); }
.kp-head { display:flex; justify-content:space-between; align-items:center; margin-bottom:10px; font-size:.8rem; font-weight:800; }
.kp-step { color:var(--text-soft); letter-spacing:.06em; }
.kp-score { color:var(--blue-600); }
.kp-arena { display:grid; grid-template-columns:1fr auto 1fr; align-items:center; gap:12px; margin-bottom:14px; }
.kp-vs { font-weight:900; font-size:1.05rem; color:var(--text-soft); letter-spacing:.06em; }
.kp-card {
  display:flex; flex-direction:column; align-items:center; gap:6px;
  background:var(--surface); border:2px solid var(--border); border-radius:16px;
  padding:16px 12px; cursor:pointer; font-family:inherit; color:inherit;
  transition:border-color .12s, transform .12s;
}
.kp-card:hover:not(:disabled) { border-color:var(--blue-500); transform:translateY(-2px); }
.kp-card:disabled { cursor:default; }
.kp-card img { width:96px; max-width:100%; height:auto; display:block; }
.kp-n { font-weight:800; font-size:.9rem; text-align:center; line-height:1.2; }
.kp-el { font-size:.78rem; color:var(--text-soft); }
.kp-v { font-weight:900; font-size:1rem; min-height:1.2em; color:var(--blue-600); }
.kp-card.right { border-color:#12885a; background:rgba(18,136,90,.08); }
.kp-card.right .kp-v { color:#12885a; }
.kp-card.wrong { border-color:#c0392b; background:rgba(192,57,43,.08); }
.kp-card.wrong .kp-v { color:#c0392b; }
@media (max-width:560px){
  .kp-arena { grid-template-columns:1fr; }
  .kp-vs { justify-self:center; }
  .kp-card img { width:78px; }
}

/* ---------- Deste Jeneratörü ---------- */
.quiz-top.deste { background: linear-gradient(135deg, #4c1d95, #7c3aed); }
/* Yuva şeridi: dolan yuvaya seçilen kartın küçük resmi oturuyor. */
.dj-strip { display:flex; gap:6px; flex-wrap:wrap; margin-bottom:16px; }
.dj-step {
  width:38px; height:38px; border-radius:10px; display:grid; place-items:center;
  background:var(--surface-2); border:1px solid var(--border);
  font-size:1rem; overflow:hidden; flex:none;
}
.dj-step.ok { border-color:var(--blue-500); background:var(--blue-100); }
.dj-step.now { border-color:var(--gold-500); box-shadow:0 0 0 3px rgba(242,184,7,.18); }
.dj-step img { width:100%; height:100%; object-fit:cover; display:block; }
.dj-head { display:flex; align-items:baseline; gap:12px; flex-wrap:wrap; margin-bottom:14px; }
.dj-step-no { font-size:.76rem; font-weight:800; letter-spacing:.06em; color:var(--text-muted); text-transform:uppercase; }
.dj-slot { display:flex; flex-direction:column; gap:2px; }
.dj-slot b { font-size:1.05rem; }
.dj-slot span { font-size:.8rem; color:var(--text-soft); }
.dj-choices { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; }
.dj-pick {
  display:flex; flex-direction:column; align-items:center; gap:8px;
  background:var(--surface); border:2px solid var(--border); border-radius:16px;
  padding:14px 10px; cursor:pointer; font-family:inherit; color:inherit;
  transition:border-color .12s, transform .12s;
}
.dj-pick:hover { border-color:var(--blue-500); transform:translateY(-2px); }
.dj-pick .cr-card { width:100%; max-width:120px; }
.dj-name { font-weight:800; font-size:.86rem; text-align:center; line-height:1.2; }
.dj-acts { display:flex; gap:10px; flex-wrap:wrap; justify-content:center; margin-top:18px; }
.dj-done { text-align:center; }
.dj-done h3 { margin:0 0 16px; font-size:1.2rem; }
.dj-deck { display:grid; grid-template-columns:repeat(4,1fr); gap:10px; margin-bottom:16px; }
.dj-meta { display:flex; gap:8px; flex-wrap:wrap; justify-content:center; margin-bottom:6px; }
.dj-tag {
  font-size:.76rem; font-weight:700; padding:3px 9px; border-radius:999px;
  background:var(--surface-2); border:1px solid var(--border); color:var(--text-soft);
}
@media (max-width:640px){
  .dj-choices { grid-template-columns:1fr; }
  .dj-pick { flex-direction:row; gap:14px; }
  .dj-pick .cr-card { max-width:88px; }
  .dj-deck { grid-template-columns:repeat(2,1fr); }
}

/* Veri alınamadı uyarısı: bilgi notundan ayrılsın diye kırmızı.
   Örnek veri basmayı bıraktığımız için bu kutu artık boş kalan
   tabloların/ızgaraların yerini tutuyor, o yüzden ortalanıyor. */
.notice.warn { background:#fdeaea; border-color:#f0b4b4; color:#8c2b2b; }
[data-theme="dark"] .notice.warn { background:rgba(140,43,43,.16); border-color:#7a3535; color:#f3b9b9; }
.notice.warn .btn { display:inline-flex; margin-top:10px; padding:7px 14px; font-size:.82rem; }
td > .notice.warn, .lb-body > .notice.warn { margin:6px 0; }

/* ---------- Footer ---------- */
.site-footer { background: var(--blue-900); color: #cdd9f2; margin-top: 50px; }
.site-footer a { color: #cdd9f2; }
.footer-inner { max-width: var(--maxw); margin: 0 auto; padding: 40px 20px 26px; }
.footer-top { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr; gap: 26px; }
.footer-brand .brand-name .w { color:#fff; }
.footer-brand .brand-name .b { color: var(--blue-500); }
.footer-col h4 { color:#fff; font-size:.82rem; text-transform:uppercase; letter-spacing:.1em; margin-bottom:12px; }
.footer-col a { display:block; padding:4px 0; font-size:.88rem; opacity:.85; }
.footer-col a:hover { opacity:1; }
.footer-disclaimer {
  margin-top: 26px; padding-top: 20px; border-top: 1px solid rgba(255,255,255,.12);
  display:flex; gap:14px; align-items:center; flex-wrap:wrap; font-size:.82rem; opacity:.8;
}
.api-lock { display:inline-flex; align-items:center; gap:6px; background:rgba(255,255,255,.08); padding:5px 10px; border-radius:8px; font-weight:800; font-size:.72rem; }
.api-lock svg { width:14px; height:14px; }
.footer-credit { margin-top:14px; padding-top:14px; border-top:1px solid rgba(255,255,255,.12); font-size:.84rem; opacity:.85; text-align:center; }
.footer-credit b { color:#fff; }
.social-icons { margin-left:auto; display:flex; gap:10px; }
.social-icons a { width:34px; height:34px; border-radius:9px; background:rgba(255,255,255,.08); display:grid; place-items:center; }
.social-icons a:hover { background:var(--blue-600); }
.social-icons svg { width:17px; height:17px; }
/* DİKKAT: seçicideki `.footer-col` şart. Yalnızca `.social-link` yazınca
   `.footer-col a { display:block }` (özgüllüğü daha yüksek) bunu eziyordu;
   satır flex olmadığı için ikon ile yazı arasında boşluk kalmıyor ve simge
   yazının hizasından kayıyordu. */
.social-link,
.footer-col a.social-link { display:flex; align-items:center; gap:9px; padding:6px 0; font-size:.88rem; opacity:.85; }
.social-link:hover { opacity:1; }
.social-link svg { width:18px; height:18px; flex:none; }

/* ---------- Latest videos ---------- */
.video-grid { display:grid; grid-template-columns:repeat(4,1fr); gap:16px; }
.video-card { background:var(--surface); border:1px solid var(--border); border-radius:14px; overflow:hidden; box-shadow:var(--shadow-sm); transition:transform .16s, box-shadow .2s; text-decoration:none; color:inherit; display:block; }
.video-card:hover { transform:translateY(-3px); box-shadow:var(--shadow); text-decoration:none; }
.video-thumb { position:relative; aspect-ratio:16/9; background:var(--surface-2); overflow:hidden; }
.video-thumb img { width:100%; height:100%; object-fit:cover; display:block; }
.video-thumb .play { position:absolute; inset:0; display:grid; place-items:center; }
.video-thumb .play span { width:46px; height:46px; border-radius:50%; background:rgba(214,15,15,.92); display:grid; place-items:center; box-shadow:0 4px 14px rgba(0,0,0,.4); }
.video-thumb .play svg { width:20px; height:20px; fill:#fff; margin-left:2px; }
.video-thumb .thumb-fb { width:100%;height:100%; display:grid; place-items:center; background:linear-gradient(160deg,var(--blue-100),var(--surface-2)); color:var(--text-soft); font-weight:900; }
.video-meta { padding:12px 14px; }
.video-meta .vt { font-weight:800; font-size:.9rem; line-height:1.3; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.video-meta .va { font-size:.78rem; color:var(--text-muted); margin-top:6px; display:flex; align-items:center; gap:6px; }
.yt-dot { width:7px;height:7px;border-radius:50%;background:#d60f0f;display:inline-block; }
@media (max-width:1020px){ .video-grid{ grid-template-columns:repeat(2,1fr);} }
@media (max-width:620px){ .video-grid{ grid-template-columns:1fr;} }

/* ---------- Page header strip (light) ---------- */
/* Üst band. `relative` + `overflow:hidden` filigran için: ana sayfadaki
   tokmakla aynı düzen — resim bandın sağ boşluğuna oturuyor ve taşan kısmı
   kırpılıyor. Filigranı sayfanın geneline koymayı denedik, işe yaramıyor:
   içerik kutuları (tablo, kart ızgarası) opak zeminli, filigran onların
   ardında kalıyor ve hiç görünmüyor. Boş alan yalnızca burada. */
/* Zemin sabit #ffffff idi: karanlık temada band beyazdan siyaha inen bir
   şerit gibi duruyordu. Aynı hata .hero'da düzeltilmiş, burası atlanmış —
   yüzey rengi tema değişince kendiliğinden uyuyor. */
.page-strip { position:relative; overflow:hidden; background: linear-gradient(180deg,var(--surface),var(--bg)); color:var(--text); padding: 34px 0; border-bottom:1px solid var(--border); }
/* Yazı filigranın üstünde kalsın. */
.page-strip > .container { position:relative; z-index:1; }
/* Filigranlı bandı biraz yükseltiyoruz: 130 pikselde resimden yalnızca ince
   bir şerit görünüyordu, tanınmıyordu bile. */
.page-strip.filigranli { padding: 44px 0; }
.page-watermark {
  position:absolute; right:-24px; top:50%; transform:translateY(-50%) rotate(-7deg);
  z-index:0; pointer-events:none; user-select:none; opacity:.17;
}
[data-theme="dark"] .page-watermark { opacity:.11; }
.page-watermark img { width:230px; height:230px; object-fit:contain; display:block; }
/* Dar ekranda başlığın üstüne biniyor: küçült, soluklaştır, en darda kaldır. */
@media (max-width: 900px) {
  .page-watermark { right:-40px; opacity:.10; }
  [data-theme="dark"] .page-watermark { opacity:.07; }
  .page-watermark img { width:180px; height:180px; }
}
/* Dar ekranda gizlenmiyor, KÜÇÜLÜP KÖŞEYE çekiliyor. Önce `display:none`
   yapılmıştı çünkü büyük hâli başlığın üstüne biniyordu; ama o zaman da
   telefonda hiç görünmüyorlardı. Sağ alt köşeye sığdırıp iyice soluklaştırmak
   ikisini birden çözüyor: yazının okunduğu sol tarafa hiç girmiyor. */
@media (max-width: 620px) {
  .page-watermark { right:-22px; top:50%; transform:translateY(-50%) rotate(-7deg); opacity:.17; }
  [data-theme="dark"] .page-watermark { opacity:.11; }
  .page-watermark img { width:120px; height:120px; }
}
.page-strip h1 { font-size: clamp(1.5rem,3.2vw,2.2rem); font-weight:900; margin:0; }
.page-strip p { color:var(--text-soft); margin:.4rem 0 0; }
.page-strip .eyebrow { color: var(--blue-600); }
/* page-strip API status pill on light bg */
.page-strip .api-status { background:var(--surface)!important; border-color:var(--border)!important; color:var(--text-soft)!important; }

/* ---------- Anlık kullanıcı sayacı (yönetici) ----------
   Rakamlar tek bakışta okunmalı: büyük punto, tabular rakam (sayı
   değişince sütun kaymasın), toplam en belirgin. */
.cn-izgara { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; }
.cn-kutu {
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: 12px; padding: 12px 10px; text-align: center;
}
.cn-kutu .cn-sayi {
  display: block; font-size: 1.5rem; font-weight: 800; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; color: var(--text); line-height: 1.15;
}
.cn-kutu .cn-et {
  font-size: .7rem; text-transform: uppercase; letter-spacing: .06em;
  color: var(--text-muted); font-weight: 700;
}
.cn-kutu.buyuk { background: var(--blue-100); border-color: transparent; }
.cn-kutu.buyuk .cn-sayi { color: var(--blue-700); font-size: 1.8rem; }
[data-theme="dark"] .cn-kutu.buyuk .cn-sayi { color: var(--blue-500); }
.cn-kutu.aktif .cn-sayi { color: var(--green-600); }
[data-theme="dark"] .cn-kutu.aktif .cn-sayi { color: var(--green-400); }

.cn-liste { margin-top: 16px; }
.cn-baslik {
  display: block; font-size: .7rem; letter-spacing: .1em; text-transform: uppercase;
  color: var(--text-muted); font-weight: 700; margin-bottom: 8px;
}
.cn-uye {
  display: inline-flex; align-items: baseline; gap: 6px; margin: 0 6px 6px 0;
  padding: 5px 10px; border-radius: 999px;
  background: var(--surface-2); border: 1px solid var(--border);
  font-size: .84rem; font-weight: 700;
}
.cn-uye i { font-style: normal; font-weight: 400; font-size: .74rem; color: var(--text-muted); }
@media (max-width: 560px) { .cn-izgara { grid-template-columns: repeat(2, 1fr); } }

/* ---------- KVKK onay kutusu (kayıt formu) ----------
   Onay bilinçli bir eylem olmalı: kutu belirgin, yazı okunur, bağlantı
   yeni sekmede açılıyor ki form kaybolmasın. */
.auth-kvkk {
  display: flex; gap: 10px; align-items: flex-start;
  margin: 4px 0 2px; padding: 11px 13px;
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: 10px; font-size: .84rem; line-height: 1.5;
  color: var(--text-soft); cursor: pointer;
}
.auth-kvkk input { flex: none; width: 17px; height: 17px; margin-top: 2px; cursor: pointer; }
.auth-kvkk a { font-weight: 700; }

/* ---------- Hesap panelindeki KVKK hakları ---------- */
.kvkk-haklar {
  display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border);
}
.kvkk-haklar .kh-baslik {
  font-size: .72rem; letter-spacing: .1em; text-transform: uppercase;
  color: var(--text-muted); font-weight: 700; margin-right: 2px;
}
.kvkk-haklar .btn { font-size: .82rem; padding: 7px 11px; }
/* Silme yıkıcı bir işlem; rengiyle de ayrılıyor ama varsayılan olarak
   bağırmıyor — yanlışlıkla basılmasını zorlaştıran asıl şey onay ekranı. */
.kvkk-haklar .kh-sil { color: #c0392b; border-color: rgba(192,57,43,.35); }
[data-theme="dark"] .kvkk-haklar .kh-sil { color: #f0897a; border-color: rgba(240,137,122,.3); }
.kh-sil-onay { background: #c0392b !important; border-color: #c0392b !important; }
.kh-sil-onay:hover { background: #a83226 !important; }

/* ---------- Yasal metin sayfası (gizlilik.html) ----------
   Okunması gereken bir metin, taranan bir arayüz değil: satır uzunluğu
   sınırlı, başlıklar arası nefes payı geniş. */
.yasal { max-width: 74ch; }
.yasal h2 {
  font-size: 1.18rem; font-weight: 800; letter-spacing: -.01em;
  margin: 38px 0 10px; padding-top: 18px; border-top: 1px solid var(--border);
}
.yasal h2:first-of-type { border-top: 0; padding-top: 0; }
.yasal h3 { font-size: 1rem; font-weight: 700; margin: 24px 0 8px; }
.yasal p { margin: 0 0 12px; line-height: 1.7; }
.yasal ul.madde { margin: 0 0 14px; padding-left: 22px; }
.yasal ul.madde li { margin-bottom: 8px; line-height: 1.65; }
.yasal .tabloKap { margin: 14px 0 18px; }
.yasal table td, .yasal table th { font-size: .88rem; }
.yasal .son-guncelleme { color: var(--text-muted); font-size: .85rem; margin-bottom: 20px; }
/* Görünürlük sütunu: "herkese açık" ile "yalnızca site sahibi" arasındaki
   fark bu sayfanın en önemli bilgisi, renkle de ayrılıyor. */
.yasal td.acik  { color: var(--gold-600); font-weight: 700; }
.yasal td.gizli { color: var(--green-600); font-weight: 700; }
/* Koyu temada bu iki ton okunmuyor; belirteçler tema başına yeniden
   tanımlanmadığı için burada açıkça daha açık basamağa geçiliyor. */
[data-theme="dark"] .yasal td.acik  { color: var(--gold-400); }
[data-theme="dark"] .yasal td.gizli { color: var(--green-400); }

/* ---------- Utilities ---------- */
.flex { display:flex; } .between{ justify-content:space-between; } .center{ align-items:center; }
.gap-8{ gap:8px;} .gap-12{ gap:12px;} .gap-16{gap:16px;} .wrap{ flex-wrap:wrap; }
.mt-0{margin-top:0;} .mt-8{margin-top:8px;} .mt-16{margin-top:16px;} .mt-24{margin-top:24px;} .mb-0{margin-bottom:0;}
.text-center{ text-align:center; }
.hidden{ display:none !important; }
.spinner { width:16px;height:16px;border:2px solid rgba(255,255,255,.4);border-top-color:#fff;border-radius:50%;animation:spin .7s linear infinite;display:inline-block;}
@keyframes spin{to{transform:rotate(360deg);}}

/* ---------- Responsive ---------- */
/* Menü artık kısalmadığı için, sığmadığı genişlikte tamamen hamburgere
   geçiyor. Yoksa baskıyı arama kutusu emiyor ve 1300px civarında kutu
   kullanılamayacak kadar (82px) eziliyordu. */
@media (max-width: 1340px) {
  .main-nav { display: none; }
  .nav-toggle { display: grid; }
}

@media (max-width: 1180px) {
  .main-nav { display: none; }
  .nav-toggle { display: grid; }
  .search-box input { min-width: 130px; }
  .gen-layout { grid-template-columns: 1fr; }
  .footer-top { grid-template-columns: 1fr 1fr; }
  .grid-4 { grid-template-columns: repeat(2,1fr); }
  .grid-3 { grid-template-columns: 1fr; }
  .dash { grid-template-columns: 1fr; }
}
@media (max-width: 620px) {
  /* Dar ekranda filigran metnin üstüne biniyor — orada kapatıyoruz. */
  /* Tokmak gizlenmiyor, küçülüp sağ ÜSTE çekiliyor. Alta koymak denendi ve
     görünmedi: mobilde hero'nun altında arama kartları var, onların zemini
     opak, filigran arkalarında kayboluyor. Üstte ise yalnızca başlık metni
     var — metnin zemini saydam olduğu için filigran gerçekten görünüyor. */
  .hero-watermark { right:-26px; top:14px; bottom:auto; transform:rotate(-8deg) translateY(0); opacity:.17; }
  [data-theme="dark"] .hero-watermark { opacity:.11; }
  .hero-watermark img, .hero-watermark svg { width:160px; height:160px; }
  .header-inner { flex-wrap: wrap; row-gap: 8px; }
  /* Araçlar kendi satırında ve İÇİNDE de sarıyor: arama kutusu tam
     genişlikte tek başına, düğmeler altına. Eskiden hepsi tek satıra
     sıkıştırılıyordu; kutu daralabildiği hâlde çocukları daralamayınca
     büyüteç ve "TR" düğmesi metin alanının ÜSTÜNE biniyordu. */
  .header-tools { width:100%; order:3; flex-wrap: wrap; row-gap: 8px; }
  .header-tools .search-box { flex: 1 0 100%; }
  .header-tools .search-box input { width: auto; flex: 1 1 auto; }
  .grid-2, .grid-4 { grid-template-columns: 1fr; }
  .footer-top { grid-template-columns: 1fr; }
  .profile-hero .p-stats { margin-left:0; width:100%; }
  .wheel { width: 240px; height:240px; }
}

/* ---------- Dokunma hedefleri ----------
   Parmakla kullanılan bir ekranda küçük hedefe isabet ettirmek zor. Ölçtük:
   giriş/kayıt düğmeleri 30-32 px, sekmeler 34 px, tablodaki oyuncu adı
   20 px, deste kopyalama düğmesi 28 px, alt bilgi bağlantıları 30 px.

   İki kademe kullanıyoruz, çünkü her şeyi 44 pikselte zorlamak yoğun
   satırları dağıtıyor:
     · Gerçek denetimler (düğme, sekme, liste satırındaki ana bağlantı) 44 px.
     · Yoğun üstveri satırlarındaki küçük bağlantılar (profil başlığındaki
       etiket/klan zinciri gibi) 32 px — satırı bozmadan parmakla tutulur.
   Kural yalnızca dokunmatik cihazlarda: fareyle kullanılan dar bir pencerede
   düğmeleri şişirmenin anlamı yok. */
@media (max-width: 1020px) and (pointer: coarse) {
  .btn, .auth-btn, .tabs button, .icon-btn, .search-go, .fav-btn,
  .card-head, .deck-copy, .social-link, .brand, .pg {
    min-height: 44px;
  }
  .pg { min-width: 44px; }
  .btn, .auth-btn { padding-top: 10px; padding-bottom: 10px; }
  .tabs button { padding-left: 14px; padding-right: 14px; }
  .deck-copy { width: 44px; }
  .social-link, .card-head { display: flex; align-items: center; }
  /* Alt bilgi bağlantıları blok — kutuyu büyütmek düzeni bozmuyor. */
  .footer-col a { display: flex; align-items: center; min-height: 44px; }

  /* Tablo satırındaki bağlantılar BAŞKA türlü çözülüyor. `min-height` vermek
     denendi ve satırları üç katına çıkardı: oyuncu adı, PRO rozeti ve etiket
     ayrı satırlara düşüp sıralama okunamaz hâle geldi. Onun yerine görünmez
     bir vuruş alanı seriyoruz — düzende hiç yer kaplamıyor, ama parmak
     satırın herhangi bir yerine bassa bağlantı çalışıyor. */
  .player-link, .tag a, .foot .wr { position: relative; }
  .player-link::after, .tag a::after, .foot .wr::after {
    content: ""; position: absolute; left: 0; right: 0;
    top: 50%; transform: translateY(-50%); height: 44px;
  }
  /* Klan rozeti `inline-flex`, yani negatif dikey kenar boşluğu ONDA
     çalışıyor: dolgu kutuyu 44 piksele çıkarıyor, negatif boşluk da bu
     büyümenin satır yüksekliğine yansımasını geri alıyor. Görünmez katman
     yerine bunu kullanmak gerekti — tablo sarmalayıcısı artık yatay
     kaydırma için `overflow-y:hidden` taşıyor ve ilk/son satırdaki
     görünmez katmanı kırpıyordu. */
  .clan-chip { padding-top: 9px; padding-bottom: 9px; margin-top: -9px; margin-bottom: -9px; }
}

/* mobile nav drawer */
.mobile-nav { display:none; flex-direction:column; padding: 8px 20px 16px; border-top:1px solid var(--border); background:var(--surface); }
.mobile-nav.open { display:flex; }
.mobile-nav a { padding:10px 6px; font-weight:800; color:var(--text-soft); border-bottom:1px solid var(--border); text-transform:uppercase; font-size:.85rem; }

/* ---------- Deck icon row ---------- */
/* Profil başlığındaki kısayol düğmeleri (Son Savaşlar gibi). */
.hero-acts { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.hero-acts .btn { padding: 7px 12px; font-size: .8rem; }

/* Kısayolla gidilen kart bir an vurgulanıyor ki göz nereye geldiğini bulsun. */
@keyframes hs-flash {
  0%   { box-shadow: 0 0 0 0 rgba(30,90,224,.45); }
  100% { box-shadow: 0 0 0 14px rgba(30,90,224,0); }
}
.card.flash { animation: hs-flash 1.2s ease-out; }

/* Arama kutusunun altındaki "etiketini yapıştır" notu. Bir ipucu, uyarı
   değil — o yüzden kutu/çerçeve yok, sadece hafif bir renk farkı. */
.search-tip {
  display: block; font-size: .74rem; line-height: 1.45; margin-top: 3px;
  color: var(--text-muted); opacity: .92;
}
.search-tip b { color: var(--text-soft); font-weight: 800; }

.deck-icons { display:inline-flex; gap:3px; align-items:center; }
/* Sıralama tablosunda destenin yanındaki "oyunda aç" düğmesi.
   Kartların yüksekliğine oturuyor, satırı büyütmüyor. */
.deck-cell { display: inline-flex; align-items: center; vertical-align: middle; }
.deck-copy {
  margin-left: 8px; vertical-align: middle;
  display: inline-grid; place-items: center; width: 28px; height: 28px;
  border: 1px solid var(--border); border-radius: 9px; background: var(--surface-2);
  color: var(--text-muted); cursor: pointer; flex: none;
  transition: background .12s, color .12s, border-color .12s;
}
.deck-copy svg { width: 15px; height: 15px; }
.deck-copy:hover { background: var(--blue-100); color: var(--blue-700); border-color: var(--blue-100); }
.deck-copy.ok { background: rgba(34,160,110,.16); color: #22a06e; border-color: transparent; }
.deck-icons.lg .di { width:34px; height:41px; }
.di {
  width:26px; height:31px; border-radius:5px; overflow:hidden; flex:none;
  background:var(--surface-2); border:1px solid var(--border);
  display:grid; place-items:center; font-size:.55rem; font-weight:800; color:var(--text-soft);
}
.di img { width:100%; height:100%; object-fit:contain; }
.di.evo { border:1.5px solid transparent; background:
  linear-gradient(var(--surface-2),var(--surface-2)) padding-box,
  linear-gradient(135deg,#39c6ff,#a25bff) border-box; }
/* Champions get a gold frame so they stand out in the small deck rows,
   where there is no room for the "Kahraman" tag used on full cards.
   ".champ", not ".hero" — see the note on .cr-card.champ above. */
.di.champ { border:1.5px solid transparent; background:
  linear-gradient(var(--surface-2),var(--surface-2)) padding-box,
  linear-gradient(135deg,var(--gold-400),var(--gold-600)) border-box; }
.di.evo.champ { background:
  linear-gradient(var(--surface-2),var(--surface-2)) padding-box,
  linear-gradient(135deg,#39c6ff,var(--gold-500)) border-box; }
.di.di-fb { background:linear-gradient(160deg,var(--blue-100),var(--surface-2)); }

/* ---------- Bottom nav (mobile) ----------
   Çubuk artık <body>'nin doğrudan çocuğu (bkz. app.js/mountBottomNav):
   `position:fixed` bir öğe, atalarından biri backdrop-filter taşıyorsa
   ekrana değil o ataya göre konumlanıyor ve kaydırınca yerinden ayrılıyor.
   .site-header'da backdrop-filter var.

   `env(safe-area-inset-bottom)` ancak viewport etiketinde `viewport-fit=cover`
   varsa sıfırdan farklı döner — o eksikti, on HTML dosyasına da eklendi.
   Zemin `backdrop-filter` yerine TAM opak: yarı saydam bir çubuğun altından
   içerik okunuyor ve çubuk "havada duruyor" gibi görünüyordu. */
.bottom-nav { display:none; }
@media (max-width: 1020px){
  .bottom-nav {
    display:flex; position:fixed; bottom:0; left:0; right:0; z-index:60;
    background:var(--surface); border-top:1px solid var(--border);
    padding:5px 2px; padding-bottom:max(5px, env(safe-area-inset-bottom));
    box-shadow:0 -2px 14px rgba(0,0,0,.10);
  }
  .bottom-nav a {
    flex:1 1 0; min-width:0;            /* altı eşit paya bölünsün */
    display:flex; flex-direction:column; align-items:center; justify-content:center; gap:3px;
    font-weight:800; color:var(--text-muted); padding:5px 1px; text-decoration:none;
    min-height:46px;                    /* rahat dokunulacak yükseklik */
  }
  /* Etiketler tek satır. Eskiden sarıyordu ("ANA SAYFA", "SON MAÇLAR" iki
     satıra düşüp çubuğu şişiriyor ve alt satıra taşıyordu). */
  .bottom-nav .bn-tx {
    font-size:.58rem; text-transform:uppercase; letter-spacing:0; line-height:1;
    white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
    max-width:100%; text-align:center;
  }
  .bottom-nav a.active { color:var(--blue-600); }
  .bottom-nav a.active .bn-ic { transform:scale(1.08); }
  .bottom-nav .bn-ic { font-size:1.1rem; line-height:1; transition:transform .12s; }
  /* İçeriğin son satırı çubuğun altında kalmasın; güvenli alan da dahil. */
  body { padding-bottom:calc(60px + env(safe-area-inset-bottom)); }
  .nav-toggle { display:none; }   /* bottom nav replaces the hamburger */
}
@media (max-width: 360px){
  .bottom-nav .bn-tx { font-size:.53rem; }
  .bottom-nav .bn-ic { font-size:1rem; }
}

/* ---------- Drawer (hamburger) ---------- */
.menu-btn { display: grid !important; }
.drawer-overlay {
  position: fixed; inset: 0; z-index: 120; display: none;
  background: rgba(12,18,28,.5); backdrop-filter: blur(3px);
}
.drawer-overlay.open { display: block; }
/* Opens from the LEFT, because that is where the menu button sits. Sliding
   in from the opposite side of the button it belongs to reads as a glitch. */
.drawer {
  position: absolute; top: 0; left: 0; height: 100%; width: 340px; max-width: 88vw;
  background: var(--surface); border-right: 1px solid var(--border);
  box-shadow: 12px 0 40px rgba(0,0,0,.18); padding: 16px 16px calc(20px + env(safe-area-inset-bottom));
  display: flex; flex-direction: column; overflow-y: auto;
  transform: translateX(-100%); transition: transform .26s cubic-bezier(.3,.8,.3,1);
}
.drawer-overlay.open .drawer { transform: translateX(0); }
.dr-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 14px; }
.dr-search { margin-bottom: 12px; }
.dr-hint { display: block; font-size: .74rem; color: var(--text-muted); margin-top: 6px; padding-left: 2px; }
.dr-sec { font-size: .68rem; font-weight: 800; letter-spacing: .12em; color: var(--text-muted); text-transform: uppercase; margin: 16px 4px 6px; }
.dr-sec.fun { color: var(--blue-600); }
/* Also applied to <button> (Favori Oyuncular), which otherwise keeps the
   browser default colour and font — invisible on a dark drawer. */
.dr-link { display: flex; align-items: center; gap: 12px; padding: 11px 12px; border-radius: 11px;
  font-weight: 700; color: var(--text); font-size: .94rem;
  width: 100%; text-align: left; background: none; border: none;
  font-family: inherit; cursor: pointer; }
.dr-link:hover { background: var(--surface-2); text-decoration: none; color: var(--blue-700); }
.dr-ic { width: 26px; text-align: center; font-size: 1.05rem; }
.dr-link.soon { color: var(--text-muted); cursor: default; }
.dr-link.soon:hover { background: transparent; }
.soon-badge { margin-left: auto; font-size: .64rem; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; padding: 3px 8px; border-radius: 999px; background: var(--blue-100); color: var(--blue-700); }
.dr-foot { padding-top: 16px; display: flex; gap: 10px; border-top: 1px solid var(--border); margin-top: 20px; }

/* ---------- Quick-access tiles (home) ---------- */
.tile-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.tile {
  display: flex; align-items: center; gap: 12px; padding: 16px; border-radius: 14px;
  background: var(--surface); border: 1px solid var(--border); box-shadow: var(--shadow-sm);
  color: var(--text); font-weight: 800; transition: transform .15s, box-shadow .2s, border-color .2s;
}
.tile:hover { transform: translateY(-2px); box-shadow: var(--shadow); text-decoration: none; border-color: var(--blue-500); }
.tile .t-ic { width: 40px; height: 40px; border-radius: 11px; display: grid; place-items: center; font-size: 1.2rem; background: var(--blue-100); color: var(--blue-700); flex: none; }
/* Title and subtitle are two inline <span>s; without an explicit column they
   flow onto the same line and read as one run-on word ("Deste DüellosuYakında"). */
.tile .t-tx { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.tile .t-tx .tt { font-size: .95rem; line-height: 1.25; }
.tile .t-tx .ts { font-size: .76rem; color: var(--text-muted); font-weight: 600; line-height: 1.25; }
/* "Puanlı" altyazısı sırıtmasın ama gözden de kaçmasın: aynı boyut,
   yalnızca renk ve önündeki küçük tokmak farklı. */
.tile .t-tx .ts.pts { color: var(--gold-600, #a67c00); font-weight: 800; }
.tile .t-tx .ts.pts::before { content: "🔨"; margin-right: 4px; font-size: .72rem; }
:root[data-theme="dark"] .tile .t-tx .ts.pts { color: var(--gold-400, #f2b807); }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .tile .t-tx .ts.pts { color: var(--gold-400, #f2b807); }
}
.tile.soon { border-style: dashed; opacity: .8; }
.tile.soon .t-ic { background: var(--surface-2); color: var(--text-muted); }
.tile.fun .t-ic { background: #eafaf1; color: var(--green-600); }
@media (max-width:1020px){ .tile-grid { grid-template-columns: repeat(2,1fr); } }
@media (max-width:620px){ .tile-grid { grid-template-columns: 1fr; } }

/* ---------- Season bar ---------- */
.season { display:flex; align-items:center; gap:18px; flex-wrap:wrap; background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:16px 20px; box-shadow:var(--shadow-sm); }
.season .s-label { font-weight:900; letter-spacing:.02em; }
.season .s-bar { flex:1; min-width:180px; height:10px; border-radius:999px; background:var(--surface-2); overflow:hidden; border:1px solid var(--border); }
.season .s-fill { height:100%; background:var(--blue-600); border-radius:999px; }
.season .s-right { text-align:right; }
.season .s-right b { color:var(--blue-600); font-size:1.15rem; }
.season .s-right span { display:block; font-size:.78rem; color:var(--text-muted); }

/* ---------- Card ranking game ---------- */
/* The game column used to be 720px inside a 1180px container, so the games sat
   as a thin strip with a wide empty gutter beside them. */
.game-wrap { max-width: 980px; margin: 0 auto; }
.scenario-bar { display:flex; align-items:center; gap:12px; flex-wrap:wrap; background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:16px 18px; box-shadow:var(--shadow-sm); margin-bottom:18px; }
.scenario-bar .lbl { font-size:.72rem; font-weight:800; letter-spacing:.08em; color:var(--text-muted); text-transform:uppercase; }
.scenario-bar .txt { font-weight:900; font-size:1.15rem; color:var(--blue-700); flex:1; min-width:200px; }
.game-current { text-align:center; margin:8px 0 20px; }
.game-current .draw-card { width:130px; margin:0 auto; }
.game-current .draw-card .cr-card { aspect-ratio:5/6; }
.game-current .hint { color:var(--text-soft); font-size:.9rem; margin-top:10px; }
.game-current .remain { font-size:.8rem; color:var(--text-muted); margin-top:4px; }
.rank-list { display:flex; flex-direction:column; gap:8px; }
.rank-slot { display:flex; align-items:center; gap:14px; background:var(--surface); border:1.5px dashed var(--border-strong); border-radius:12px; padding:8px 12px; min-height:64px; transition:.15s; }
.rank-slot.empty { cursor:pointer; }
.rank-slot.empty:hover { border-color:var(--blue-500); background:var(--blue-100); }
.rank-slot.filled { border-style:solid; }
.rank-slot .pos { width:34px; height:34px; border-radius:9px; display:grid; place-items:center; font-weight:900; background:var(--surface-2); color:var(--text-muted); flex:none; }
.rank-slot.filled .pos { background:var(--blue-600); color:#fff; }
.rank-slot .slot-card { width:46px; flex:none; }
.rank-slot .slot-card .cr-card { aspect-ratio:5/6; }
.rank-slot .slot-name { font-weight:800; }
.rank-slot .slot-empty-txt { color:var(--text-muted); font-weight:700; font-size:.9rem; }
.game-actions { display:flex; gap:10px; flex-wrap:wrap; justify-content:center; margin-top:20px; }

/* ---------- Modal ---------- */
.modal-overlay {
  position:fixed; inset:0; z-index:100; display:none; align-items:center; justify-content:center;
  background:rgba(6,12,26,.62); backdrop-filter:blur(4px); padding:20px;
}
.modal-overlay.open { display:flex; animation:fadeUp .2s ease; }
.modal-box {
  background:var(--surface); border:1px solid var(--border); border-radius:20px;
  box-shadow:var(--shadow); max-width:560px; width:100%; max-height:90vh; overflow:auto; padding:24px;
}
.modal-box h3 { font-size:1.3rem; font-weight:900; margin:0; }
.modal-box .name { color:var(--blue-600); }
.modal-close { float:right; margin:-6px -6px 0 0; }
.modal-tip {
  background:var(--blue-100); border:1px solid var(--border-strong); border-radius:12px;
  padding:12px 14px; font-size:.9rem; margin-top:16px; color:var(--text);
}
[data-theme="dark"] .modal-tip { border-color:var(--border); }
.modal-tip b { color:var(--blue-600); }

/* ---------- Live matches ---------- */
.match-card { background:var(--surface); border:1px solid var(--border); border-radius:16px; box-shadow:var(--shadow-sm); padding:16px 18px; margin-bottom:14px; }
.match-top { display:flex; align-items:center; gap:12px; margin-bottom:12px; flex-wrap:wrap; }
.match-top .mtype { font-size:.68rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em; padding:3px 9px; border-radius:999px; background:var(--blue-100); color:var(--blue-700); }
.match-top .mago { margin-left:auto; font-size:.78rem; color:var(--text-muted); font-weight:700; }
.match-grid { display:grid; grid-template-columns:1fr auto 1fr; gap:14px; align-items:center; }
.match-side { min-width:0; }
.match-side.right { text-align:right; }
.match-side .pn { font-weight:900; font-size:1rem; }
.match-side .pc { font-size:.78rem; color:var(--text-muted); }
/* Deste satırı + kopyalama düğmesi yan yana dursun (düğme eklendi). */
.match-side .decks { margin-top:8px; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.match-side.right .decks { justify-content:flex-end; }
/* Profildeki savaş geçmişinde deste ile düğmenin hizası. */
.bl-row .deck-cell + .deck-copy { margin-left:6px; }
.match-score { text-align:center; }
.match-score .sc { font-size:1.6rem; font-weight:900; }
.match-score .sc .l { color:var(--text-muted); }
.match-score .vs { font-size:.66rem; font-weight:900; letter-spacing:.1em; color:var(--text-muted); }
.win-badge { display:inline-block; font-size:.62rem; font-weight:900; padding:2px 7px; border-radius:999px; background:rgba(47,191,106,.16); color:var(--green-600); margin-top:4px; }

/* ---------- Pager ---------- */
.pager { display:flex; gap:6px; justify-content:center; flex-wrap:wrap; margin-top:18px; }
.pager .pg {
  min-width:38px; height:38px; padding:0 10px; border-radius:10px; cursor:pointer;
  border:1px solid var(--border); background:var(--surface); color:var(--text);
  font-family:inherit; font-weight:800; font-size:.9rem; transition:.15s;
}
.pager .pg:hover:not(.dis):not(.active){ border-color:var(--blue-500); color:var(--blue-700); }
.pager .pg.active { background:var(--blue-600); color:#fff; border-color:var(--blue-600); box-shadow:0 4px 12px rgba(30,90,224,.3); }
.pager .pg.dis { opacity:.4; cursor:not-allowed; }
.pager .pg-dots { display:grid; place-items:center; min-width:24px; color:var(--text-muted); font-weight:800; }

/* ---------- Leaderboard preview cards (home) ---------- */
.lb-card { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow-sm); overflow:hidden; }
.lb-head { display:flex; align-items:center; gap:10px; padding:16px 18px; border-bottom:1px solid var(--border); }
.lb-head .ic { font-size:1.1rem; }
.lb-head h3 { margin:0; font-size:.92rem; font-weight:900; text-transform:uppercase; letter-spacing:.05em; }
.lb-row { display:flex; align-items:center; gap:12px; padding:12px 18px; border-bottom:1px solid var(--border); }
.lb-row:last-of-type { border-bottom:none; }
.lb-row:hover { background:var(--surface-2); }
.lb-medal { width:34px; height:34px; border-radius:9px; display:grid; place-items:center; font-weight:900; font-size:.9rem; flex:none; background:var(--surface-2); color:var(--text-muted); border:1px solid var(--border); }
.lb-medal.g1 { background:linear-gradient(135deg,#ffe08a,#f2b807); color:#4a3400; border:none; }
.lb-medal.g2 { background:linear-gradient(135deg,#e9eef6,#b7c3d6); color:#39485e; border:none; }
.lb-medal.g3 { background:linear-gradient(135deg,#f4c58a,#cd8a3f); color:#4a2c07; border:none; }
.lb-main { min-width:0; flex:1; }
.lb-main .n { font-weight:900; font-size:.98rem; display:flex; align-items:center; gap:6px; }
.lb-main .s { font-size:.8rem; color:var(--text-muted); display:flex; align-items:center; gap:6px; margin-top:1px; }
.lb-main .s .crest { width:16px; height:19px; }
.lb-val { font-weight:900; display:flex; align-items:center; gap:5px; white-space:nowrap; }
.lb-val.medalv { color:#a24bff; }
.lb-val.trophyv { color:var(--gold-600); }
.lb-foot { padding:12px 18px; }
.lb-foot .btn { width:100%; justify-content:center; }
.flag { font-size:1rem; line-height:1; }

/* ---------- Ranking tabs ---------- */
.tabs { display:inline-flex; background:var(--surface-2); border:1px solid var(--border); border-radius:12px; padding:4px; gap:4px; margin-bottom:18px; }
.tabs button { border:none; background:transparent; font-family:inherit; font-weight:800; font-size:.86rem; padding:8px 16px; border-radius:9px; cursor:pointer; color:var(--text-soft); }
.tabs button.active { background:var(--blue-600); color:#fff; box-shadow:0 4px 12px rgba(30,90,224,.3); }

/* collection grid */
.collection { display:grid; grid-template-columns:repeat(8,1fr); gap:8px; }
@media (max-width:1020px){ .collection { grid-template-columns:repeat(6,1fr);} .match-grid{ grid-template-columns:1fr; text-align:left;} .match-side.right{ text-align:left;} .match-side.right .decks{ justify-content:flex-start;} .match-score{ order:3;} }
@media (max-width:620px){ .collection { grid-template-columns:repeat(4,1fr);} .deck-icons .di{ width:22px; height:27px;} }

/* ---------- Search results (oyuncu.html / klan.html) ----------
   Player and clan searches both answer with a *list*; these are its rows. */
.res-list { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow-sm); overflow:hidden; }
.res-head { display:flex; align-items:center; gap:10px; flex-wrap:wrap; padding:14px 18px; border-bottom:1px solid var(--border); background:var(--surface-2); font-size:.86rem; }
.res-head b { font-size:.95rem; }
.res-row { display:flex; align-items:center; gap:14px; padding:12px 18px; border-bottom:1px solid var(--border); text-decoration:none; color:inherit; }
.res-row:last-child { border-bottom:none; }
.res-row:hover { background:var(--surface-2); }
.res-ic { width:38px; height:38px; flex:none; display:grid; place-items:center; font-size:1.15rem; border-radius:10px; background:var(--surface-2); border:1px solid var(--border); }
.res-main { min-width:0; flex:1; }
.res-main .n { font-weight:900; font-size:1rem; display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
.res-main .s { font-size:.8rem; color:var(--text-muted); display:flex; align-items:center; gap:6px; margin-top:2px; flex-wrap:wrap; }
.res-val { text-align:right; font-weight:900; color:var(--gold-600); white-space:nowrap; flex:none; }
.res-val .s { display:block; font-size:.74rem; font-weight:700; color:var(--text-muted); }

/* Real clan badge from the API (badgeId → RoyaleAPI artwork). Sits where the
   generic .clan-crest SVG used to, and falls back to it if the image 404s. */
.clan-badge { object-fit:contain; flex:none; vertical-align:middle; }

@media (max-width: 560px) {
  .res-row { gap:10px; padding:11px 13px; }
  .res-ic { width:32px; height:32px; font-size:1rem; }
  .res-main .n { font-size:.92rem; }
  .res-val { font-size:.85rem; }
}

/* ---------- Path of Legends medal ----------
   Ranked play scores in medals, not Trophy Road trophies, so ranked numbers
   carry the purple PoL medal instead of the 🏆 emoji. */
.pol-medal { vertical-align:-.18em; object-fit:contain; flex:none; }
.medal-delta { display:inline-flex; align-items:center; gap:3px; font-weight:900; font-size:.82rem; color:var(--text-muted); }
.medal-delta.up { color:var(--green-600); }
.medal-delta.down { color:#d23c3c; }
.match-side .pdelta { margin-top:2px; }
.match-side.right .pdelta { display:flex; justify-content:flex-end; }
@media (max-width:1020px){ .match-side.right .pdelta { justify-content:flex-start; } }

/* Rank movement since the previous clan-war ladder snapshot (previousRank). */
.rank-move { font-size:.68rem; font-weight:900; margin-left:4px; vertical-align:middle; }
.rank-move.up { color:var(--green-600); }
.rank-move.down { color:#d23c3c; }

/* Win-rate pill on a meta deck: green above 55%, red below 45%. */
.wr-badge.good { background:rgba(47,191,106,.16); color:var(--green-600); border-color:transparent; }
.wr-badge.bad  { background:rgba(210,60,60,.14); color:#d23c3c; border-color:transparent; }
.metadeck .foot .muted { font-size:.76rem; }
/* Numbered rank chip reuses the result-row icon slot in the deck-pilots modal. */
.modal-box .res-ic { font-weight:900; font-size:.95rem; }

/* NOT: burada eskiden bağlam bağlam ELLE yazılmış boyutlar vardı
   (.metadeck için .46rem, .modal-box için ayrı…). Kart rozetleri artık
   kapsayıcı sorgusuyla kendiliğinden ölçekleniyor (bkz. yukarıdaki
   "Kart rozetleri kartla birlikte ölçeklenir" bölümü), o yüzden bu
   elle listeler kaldırıldı — ikisi birbiriyle çakışıyor ve elle yazılan
   daha spesifik olduğu için ölçeklemeyi eziyordu.

   "KAHRAMAN" etiketi "EVRİM"den çok daha uzun; iksir rozetine yer
   bırakmak için sağdan pay ayrılıyor ve bu pay da kartla ölçekleniyor. */
/* The 4-across mini deck grid was scoped to .metadeck only, so the same markup
   inside the deck-pilots modal fell back to full-width stacked cards. */
.modal-box .mini-cards { display:grid; grid-template-columns:repeat(4,1fr); gap:6px; margin:10px 0; }
.modal-box .mini-cards .cr-card { aspect-ratio: 4/5; }

/* ---------- Kahramanlar: character renders ----------
   The unit itself rather than the card frame, so these are transparent PNGs
   on a plain tile instead of framed card art. */
.hero-sec { font-size:.95rem; font-weight:900; text-transform:uppercase; letter-spacing:.05em; margin:22px 0 12px; display:flex; align-items:center; gap:8px; }
.hero-sec:first-child { margin-top:0; }
.hero-sec .muted { font-weight:700; font-size:.8rem; }
/* Guessing game answers: one row of choices, wrapping, never squeezed. */
.guess-opts { display:flex; flex-wrap:wrap; gap:10px; justify-content:center; max-width:640px; margin:0 auto; }
.guess-opts .btn { min-width:118px; justify-content:center; }

/* Final shortlist: the player points at the card instead of answering a
   question about its English name. */
/* Liste artık uzun olabiliyor (körlemesine tahmin yerine hep bu gösteriliyor),
   o yüzden kendi içinde kayıyor. */
.guess-picks {
  display:flex; flex-wrap:wrap; gap:12px; justify-content:center;
  max-width:680px; margin:0 auto; max-height:46vh; overflow-y:auto; padding:4px;
}
.guess-pick {
  width:96px; background:none; border:none; padding:0; cursor:pointer; font-family:inherit; color:inherit;
  display:flex; flex-direction:column; gap:6px; align-items:center;
  transition:transform .12s ease;
}
.guess-pick:hover { transform:translateY(-4px); }
.guess-pick .gp-art { display:block; width:100%; }
.guess-pick .gp-name { font-size:.76rem; font-weight:800; line-height:1.2; }

/* Cenabet deals its eight cards one at a time. */
.cen-deal { animation: cenIn .34s cubic-bezier(.2,.8,.3,1.2) both; }
@keyframes cenIn {
  from { opacity:0; transform:translateY(-18px) scale(.82) rotate(-6deg); }
  to   { opacity:1; transform:none; }
}
@media (prefers-reduced-motion: reduce){ .cen-deal { animation:none; } }

/* Roomier than the old 128px: these are the real card portraits and they are
   the point of the section, so they get the space to read properly. */
.hero-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(152px,1fr)); gap:14px; }
.hero-tile {
  position:relative; display:flex; flex-direction:column; align-items:center; gap:4px;
  background:var(--surface); border:1px solid var(--border); border-radius:14px;
  padding:12px 8px 10px; cursor:pointer; font-family:inherit; color:inherit;
  box-shadow:var(--shadow-sm); transition:transform .12s ease, box-shadow .12s ease;
}
.hero-tile:hover { transform:translateY(-3px); box-shadow:0 10px 24px rgba(15,30,60,.14); }
.hero-tile.champ { border:2px solid transparent; background:
  linear-gradient(var(--surface),var(--surface)) padding-box,
  linear-gradient(135deg,var(--gold-400),var(--gold-600)) border-box; }
.hero-art { display:grid; place-items:center; width:100%; height:104px; }
.hero-art img { max-width:100%; max-height:104px; object-fit:contain; filter:drop-shadow(0 6px 10px rgba(15,30,60,.22)); }
.hero-name { font-weight:800; font-size:.82rem; text-align:center; line-height:1.2; }
.hero-cost { font-size:.74rem; color:var(--text-muted); font-weight:800; }

/* ---------- Real hero portrait ----------
   The image already has the game's gold frame, gem and name plate baked in, so
   the tile adds nothing around it: no border, no background, no second frame.
   Elixir stays as a small chip in the corner. */
.hero-tile.hero-real {
  padding: 0; border: none; background: none; box-shadow: none; overflow: visible;
}
/* The portraits are screenshots, so their aspect ratios differ slightly
   (measured 0.708–0.83). Letting each set its own height made the grid ragged.
   A fixed 3:4 box with `contain` lines every tile up without cropping any of
   the gold frames — the small letterbox is invisible on a transparent tile. */
.hero-tile.hero-real .hero-shot {
  display: block; width: 100%; aspect-ratio: 3 / 4; line-height: 0;
}
.hero-tile.hero-real .hero-shot img {
  width: 100%; height: 100%; object-fit: contain; display: block; border-radius: 10px;
  filter: drop-shadow(0 6px 14px rgba(15,30,60,.28));
}
.hero-tile.hero-real:hover { transform: translateY(-4px); }
.hero-tile.hero-real .hero-cost {
  position: absolute; top: 6px; right: 6px; z-index: 2;
  background: rgba(12,20,40,.72); color: #fff; border-radius: 999px;
  padding: 2px 7px; font-size: .7rem; font-weight: 800; backdrop-filter: blur(2px);
}
/* If the file is there but unreadable, fall back to a plain frame rather than
   an empty box. */
.hero-tile.hero-real.broken { border: 1px solid var(--border); background: var(--surface); padding: 10px; }

/* ---------- Hero portrait (fallback) ----------
   The in-game hero card: a gold frame, a gold-blue plaque behind the unit and
   a head-and-shoulders crop rather than the full standing render. Supercell
   does not publish these portraits (they sit inside packed .sc assets), so the
   look is rebuilt here on top of the character render we do have. */
.hero-tile.hero-gold {
  border: 2px solid #d9a521;
  background:
    radial-gradient(120% 80% at 50% 0%, #fff3cf 0%, #ffe08a 42%, #f3c245 100%);
  box-shadow: 0 0 0 2px #fff inset, 0 6px 16px rgba(150,100,10,.28);
  padding-top: 16px;
}
:root[data-theme="dark"] .hero-tile.hero-gold {
  background: radial-gradient(120% 80% at 50% 0%, #6b5426 0%, #4a3a1a 55%, #33280f 100%);
  box-shadow: 0 0 0 2px #7c6320 inset, 0 6px 16px rgba(0,0,0,.45);
}
.hero-tile.hero-gold .hero-name { color:#4a3308; text-shadow:0 1px 0 rgba(255,255,255,.55); }
.hero-tile.hero-gold .hero-cost { color:#6d4f10; }
:root[data-theme="dark"] .hero-tile.hero-gold .hero-name { color:#ffe9b0; text-shadow:0 1px 2px rgba(0,0,0,.6); }
:root[data-theme="dark"] .hero-tile.hero-gold .hero-cost { color:#e2c47a; }

/* The gem the game stamps at the top of an unlocked hero. */
.hero-crown {
  position:absolute; top:-9px; left:50%; transform:translateX(-50%) rotate(45deg);
  width:16px; height:16px; border-radius:3px; background:linear-gradient(135deg,#ffe9a8,#e0a800);
  border:2px solid #fff; box-shadow:0 2px 5px rgba(120,80,0,.4);
}

/* Portrait crop: scale the render up and pull it down so the frame lands on
   the head, the way the game's card does. object-position sits high because
   these renders put the figure's head in the top third. */
.hero-tile.hero-gold .hero-art {
  height:96px; width:100%; overflow:hidden; border-radius:10px;
  background:linear-gradient(180deg, rgba(255,255,255,.45), rgba(255,255,255,0));
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.6);
}
:root[data-theme="dark"] .hero-tile.hero-gold .hero-art {
  background:linear-gradient(180deg, rgba(255,255,255,.10), rgba(255,255,255,0));
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.18);
}
.hero-tile.hero-gold .hero-art.portrait img {
  width:100%; height:100%; max-width:none; max-height:none;
  object-fit:cover; object-position:50% 12%; transform:scale(1.55); transform-origin:50% 18%;
}
.hero-flag {
  position:absolute; top:6px; left:6px; z-index:2; font-size:.5rem; font-weight:900;
  letter-spacing:.04em; padding:2px 5px; border-radius:6px;
  background:linear-gradient(135deg,var(--gold-400),var(--gold-600)); color:#2a1e00;
}
@media (max-width:560px){
  .hero-grid { grid-template-columns:repeat(auto-fill,minmax(100px,1fr)); gap:9px; }
  .hero-art { height:78px; } .hero-art img { max-height:78px; }
}

/* ---------- Oyun seçici ---------- */
.pick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }
.pick-card {
  display: flex; align-items: flex-start; gap: 14px; text-align: left; cursor: pointer;
  background: var(--surface); border: 1px solid var(--border); border-radius: 16px;
  padding: 16px; font-family: inherit; color: inherit; box-shadow: var(--shadow-sm);
  transition: transform .12s, border-color .12s, box-shadow .16s;
}
.pick-card:hover { transform: translateY(-3px); border-color: var(--blue-600); box-shadow: var(--shadow); }
/* Puan veren oyunlar hafifçe öne çıksın — bağırmadan. */
.pick-card.scored { border-left: 3px solid var(--gold-400); }
.pick-ic {
  width: 46px; height: 46px; flex: none; display: grid; place-items: center; font-size: 1.5rem;
  border-radius: 13px; background: var(--surface-2);
}
.pick-tx { min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.pick-n { font-weight: 900; font-size: .98rem; display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.pick-d { font-size: .82rem; color: var(--text-soft); line-height: 1.4; }
.pick-p { font-size: .72rem; color: var(--gold-600); font-weight: 800; margin-top: 2px; }
:root[data-theme="dark"] .pick-p { color: var(--gold-400); }

/* "puanlı" rozeti — küçük, soluk, satırın akışını bozmayan. */
.pts-badge {
  font-size: .6rem; font-weight: 900; letter-spacing: .04em; text-transform: uppercase;
  padding: 2px 6px; border-radius: 999px; white-space: nowrap;
  background: rgba(242,184,7,.18); color: var(--gold-600);
}
:root[data-theme="dark"] .pts-badge { background: rgba(242,184,7,.16); color: var(--gold-400); }
.dr-link .pts-badge { margin-left: auto; }
.main-nav .nav-sub a .pts-badge { margin-left: auto; }

/* Bir oyun açıkken üstte duran geri çubuğu. */
.game-bar { border-bottom: 1px solid var(--border); background: var(--surface); position: sticky; top: 0; z-index: 40; }
.game-bar .container { display: flex; align-items: center; gap: 14px; padding-top: 10px; padding-bottom: 10px; }
.game-bar b { font-size: .95rem; }

/* ---------- Şikayet & Öneri ---------- */
/* Başlıkta iki düğme var (bildirim + tümünü okundu yap); dar kalınca
   başlığı kırmak yerine düğmeler alt satıra insin. */
.fb-head { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; flex-wrap: wrap; }
.fb-head h3 { margin: 0; white-space: nowrap; }
.fb-head button { white-space: nowrap; }
.fb-ic { font-size: 1.4rem; }
.fb-kinds { display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
.fb-kind {
  flex: 1; min-width: 90px; padding: 9px; border-radius: 11px; cursor: pointer;
  border: 1px solid var(--border); background: var(--surface-2);
  font-family: inherit; font-weight: 800; font-size: .84rem; color: var(--text-soft);
}
.fb-kind.on { background: var(--blue-600); border-color: var(--blue-700); color: #fff; }
.fb-text {
  width: 100%; padding: 12px; border-radius: 12px; resize: vertical;
  border: 1px solid var(--border-strong); background: var(--surface);
  color: var(--text); font-family: inherit; font-size: .92rem; line-height: 1.5;
}
.fb-text:focus { outline: none; border-color: var(--blue-600); box-shadow: 0 0 0 3px var(--blue-100); }
.fb-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-top: 10px; }
.fb-row .muted { font-size: .76rem; }

/* ---------- Gelen Mesajlar (yönetim) ---------- */
.auth-dot {
  min-width: 17px; height: 17px; padding: 0 4px; border-radius: 999px;
  background: #e0435f; color: #fff; font-size: .64rem; font-weight: 900;
  display: grid; place-items: center;
}
.inbox { max-height: min(58vh, 520px); overflow-y: auto; display: flex; flex-direction: column; gap: 8px; }
.inbox-row {
  border: 1px solid var(--border); border-radius: 12px; padding: 11px 13px; background: var(--surface);
}
/* Okunmamışlar solda kırmızı bir şeritle ayrılıyor. */
.inbox-row.new { border-left: 3px solid #e0435f; background: var(--surface-2); }
.inbox-top { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; font-size: .8rem; margin-bottom: 6px; }
.inbox-kind { font-weight: 800; }
.inbox-top .muted { font-size: .74rem; }
.inbox-acts { margin-left: auto; display: flex; gap: 4px; }
.inbox-acts button {
  border: none; background: none; cursor: pointer; font-size: .95rem;
  padding: 2px 5px; border-radius: 7px; color: var(--text-muted);
}
.inbox-acts button:hover { background: var(--surface-2); color: var(--text); }
.inbox-acts button.danger:hover { background: rgba(224,67,95,.14); color: #e0435f; }
.inbox-acts button.ok:hover     { background: rgba(34,160,110,.14); color: #22a06e; }
/* Gönderen şu an yasaklıysa adının yanında görünür. */
.inbox-ban {
  font-size: .64rem; font-weight: 800; letter-spacing: .5px; padding: 2px 7px;
  border-radius: 999px; background: rgba(224,67,95,.16); color: #e0435f;
}
/* Kullanıcı metni: satır sonları korunur ama HTML olarak yorumlanmaz. */
.inbox-text { margin: 0; font-size: .9rem; line-height: 1.5; white-space: pre-wrap; word-break: break-word; }
.inbox-page { font-size: .7rem; color: var(--text-muted); font-family: ui-monospace, monospace; }

/* ---------- Günün Kartı / Düello / Kimin ---------- */
.quiz-top.gunun  { background: linear-gradient(135deg,#0f766e,#14b8a6); }
.quiz-top.duello { background: linear-gradient(135deg,#7c2d12,#ea580c); }
.quiz-top.eksik  { background: linear-gradient(135deg,#0c4a6e,#0ea5e9); }

/* ---------- Eksik Kartı Bul ---------- */
.ek-deck { max-width: 340px; margin: 0 auto 14px; }
.ek-deck .mini-cards { display: grid; grid-template-columns: repeat(4,1fr); gap: 6px; margin-bottom: 6px; }
/* Sekizinci kartın yeri: boş bırakmak yerine soru işaretiyle duruyor,
   böylece "hangi kart eksik" sorusu görsel olarak da anlaşılıyor. */
.ek-slot {
  display: grid; place-items: center; aspect-ratio: 5 / 6; border-radius: 8px;
  border: 2px dashed var(--border-strong); background: var(--surface-2);
  color: var(--text-muted); font-size: 1.6rem; font-weight: 900;
}
.ek-opts { display: grid; grid-template-columns: repeat(4,1fr); gap: 10px; max-width: 460px; margin: 0 auto; }
.ek-opt {
  display: flex; flex-direction: column; align-items: center; gap: 6px; padding: 8px 6px;
  border: 2px solid var(--border); border-radius: 12px; background: var(--surface);
  font-family: inherit; color: inherit; cursor: pointer; transition: border-color .12s, background .12s;
}
.ek-opt:hover:not(:disabled) { border-color: var(--blue-600); }
.ek-opt:disabled { cursor: default; }
.ek-opt.right { border-color: var(--green-600); background: rgba(47,191,106,.14); }
.ek-opt.wrong { border-color: #d23c3c; background: rgba(224,60,60,.12); }
.ek-name { font-size: .7rem; font-weight: 800; line-height: 1.2; text-align: center; }
@media (max-width: 560px){ .ek-opts { grid-template-columns: repeat(2,1fr); } }

/* Hakkın bittiğinde çıkan geri sayım satırı. */
.cd-line { font-size: .92rem; margin: 6px 0 2px; }
.cd-line b { color: var(--blue-700); }
.quiz-top .quiz-ic { font-size: 1.5rem; }

.gn-wrap { display: flex; flex-direction: column; gap: 12px; align-items: center; }
.gn-tries { display: flex; align-items: center; gap: 6px; }
.gn-dot { width: 12px; height: 12px; border-radius: 50%; background: var(--border-strong); }
.gn-dot.used { background: #d23c3c; }
.gn-left { font-size: .76rem; font-weight: 800; color: var(--text-muted); margin-left: 6px; }
.gn-hints { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }
.gn-hint {
  font-size: .78rem; font-weight: 700; padding: 5px 11px; border-radius: 999px;
  background: var(--surface-2); border: 1px solid var(--border);
}
.gn-hint b { color: var(--text-muted); font-weight: 800; }
.gn-msg { margin: 0; font-size: .86rem; font-weight: 700; }
.gn-msg .bad { color: #d23c3c; }
.gn-box { max-width: 420px; width: 100%; }
.gn-ok { color: var(--green-600); font-weight: 800; margin: 0; }
.gn-no { color: #d23c3c; font-weight: 800; margin: 0; }

.du-q { text-align: center; font-size: 1.02rem; font-weight: 800; margin: 0 0 16px; }
.du-row { display: flex; align-items: center; gap: 12px; justify-content: center; flex-wrap: wrap; }
.du-vs { font-weight: 900; color: var(--text-muted); font-size: .9rem; }
.du-deck {
  flex: 1 1 240px; max-width: 300px; cursor: pointer; text-align: left;
  background: var(--surface); border: 2px solid var(--border-strong); border-radius: 14px;
  padding: 12px; font-family: inherit; color: inherit;
  transition: border-color .12s, transform .1s;
}
.du-deck:hover:not(:disabled) { border-color: var(--blue-600); transform: translateY(-2px); }
.du-deck:disabled { cursor: default; }
.du-deck.right { border-color: var(--green-600); background: rgba(47,191,106,.10); }
.du-deck.lost { opacity: .65; }
.du-name { font-weight: 900; font-size: .88rem; margin-bottom: 8px; }
.du-meta { font-size: .74rem; color: var(--text-muted); font-weight: 700; margin-top: 8px; }
.du-deck .mini-cards { display: grid; grid-template-columns: repeat(4,1fr); gap: 5px; margin-bottom: 5px; }


/* ---------- Tokmak Yarışması ---------- */
.quiz-top {
  display: flex; align-items: center; gap: 12px; padding: 16px 18px;
  background: linear-gradient(135deg, var(--blue-700), var(--blue-600)); color: #fff;
}
.quiz-ic {
  width: 44px; height: 44px; flex: none; border-radius: 12px; overflow: hidden; background: #fff;
  display: grid; place-items: center; box-shadow: 0 2px 8px rgba(0,0,0,.2);
}
.quiz-ic img { width: 100%; height: 100%; object-fit: contain; }
.quiz-t { flex: 1; min-width: 0; }
.quiz-t h2 { margin: 0; font-size: 1.05rem; letter-spacing: .04em; color: #fff; }
.quiz-t span { font-size: .74rem; opacity: .85; font-weight: 700; }
.quiz-left {
  flex: none; font-size: .74rem; font-weight: 900; padding: 5px 10px; border-radius: 999px;
  background: rgba(255,255,255,.18); white-space: nowrap;
}

.quiz-body { padding: 22px 20px; }
.quiz-mid { text-align: center; display: flex; flex-direction: column; align-items: center; gap: 10px; }
.quiz-mid p { margin: 0; font-size: .92rem; max-width: 52ch; }
.quiz-start { padding: 12px 26px; font-size: 1rem; margin-top: 6px; }

.quiz-meta { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 12px; }
.quiz-step { font-weight: 900; font-size: .82rem; color: var(--text-muted); }
.quiz-worth {
  font-size: .72rem; font-weight: 900; padding: 3px 9px; border-radius: 999px;
  background: var(--gold-400); color: #3a2a00;
}
.quiz-cp { font-size: .72rem; font-weight: 900; padding: 3px 9px; border-radius: 999px;
  background: rgba(47,191,106,.18); color: var(--green-600); }
.quiz-safe { font-size: .72rem; font-weight: 800; color: var(--text-muted); margin-left: auto; }
.quiz-text { font-size: 1.12rem; font-weight: 800; margin: 0 0 16px; line-height: 1.4; }

.quiz-opts { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.quiz-opt {
  display: flex; align-items: center; gap: 10px; text-align: left; cursor: pointer;
  padding: 12px 14px; border-radius: 12px; border: 1px solid var(--border-strong);
  background: var(--surface); color: var(--text); font-family: inherit;
  font-weight: 700; font-size: .92rem; transition: border-color .12s, background .12s, transform .1s;
}
.quiz-opt:hover:not(:disabled) { border-color: var(--blue-600); transform: translateY(-1px); }
.quiz-opt:disabled { cursor: default; }
/* Yeni soru çizilince şıklar çok kısa bir an kapalı gelir (bot koruması,
   bkz. quiz.js). Sertçe kaybolup belirmesin diye yalnızca soluk açılıyor —
   kullanıcı bunu "gecikme" değil, sorunun belirmesi olarak görüyor. */
.quiz-opts.locked .quiz-opt { opacity: .45; }
.quiz-opts .quiz-opt { transition: border-color .12s, background .12s, transform .1s, opacity .18s; }
.qo-l {
  width: 26px; height: 26px; flex: none; border-radius: 8px; display: grid; place-items: center;
  background: var(--surface-2); font-weight: 900; font-size: .8rem; color: var(--text-muted);
}
.quiz-opt.picked { border-color: var(--blue-600); }
.quiz-opt.right { border-color: var(--green-600); background: rgba(47,191,106,.14); }
.quiz-opt.right .qo-l { background: var(--green-600); color: #fff; }
.quiz-opt.wrong { border-color: #d23c3c; background: rgba(224,60,60,.12); }
.quiz-opt.wrong .qo-l { background: #d23c3c; color: #fff; }
.quiz-quit { margin-top: 14px; width: 100%; justify-content: center; }

.quiz-end { font-size: 2.6rem; font-weight: 900; line-height: 1; }
.quiz-end span { font-size: .9rem; font-weight: 800; }
.quiz-end.good { color: var(--green-600); }
.quiz-end.bad { color: var(--text-muted); }

/* Puan merdiveni — 13'ten 1'e, barajlar işaretli. */
.quiz-ladder:empty { display: none; }
.quiz-ladder { border-top: 1px solid var(--border); padding: 10px 14px; background: var(--surface-2); }
.ql-row { display: flex; flex-direction: row-reverse; justify-content: center; gap: 4px; flex-wrap: wrap; }
.ql {
  min-width: 26px; padding: 3px 6px; border-radius: 7px; text-align: center;
  font-size: .7rem; font-weight: 900; color: var(--text-muted); background: var(--surface);
  border: 1px solid var(--border);
}
.ql.done { background: var(--blue-100); color: var(--blue-700); border-color: var(--blue-100); }
.ql.now { background: var(--blue-600); color: #fff; border-color: var(--blue-700); }
.ql.cp { border-color: var(--green-600); }

@media (max-width: 560px){ .quiz-opts { grid-template-columns: 1fr; } }

/* ---------- TOKMAKÇILAR — weekly board ----------
   Fills the empty right-hand half of the hero. Two columns while there is
   room; below 1100px the board drops under the search cards rather than
   squeezing both into unreadable widths. */
/* İçerik filigranın ÜSTÜNDE kalsın. Filigran konumlandırılmış bir öğe
   olduğu için, akıştaki metnin üzerine boyanıyordu; masaüstünde sağda
   durduğu için fark edilmiyordu ama mobilde başlığın üstüne biniyor. */
.hero-split { display: grid; grid-template-columns: minmax(0,1fr) 360px; gap: 34px; align-items: start;
              position: relative; z-index: 2; }
.hero-left { min-width: 0; }

.board {
  background: var(--surface); border: 1px solid var(--border); border-radius: 18px;
  box-shadow: var(--shadow); overflow: hidden; position: relative;
}
/* A thin gold seam along the top — the hammer's colour, not the site blue,
   so the board reads as its own thing. */
.board::before {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 3px;
  background: linear-gradient(90deg, var(--gold-400), var(--gold-600), var(--gold-400));
}
.board-head {
  display: flex; align-items: center; gap: 11px; padding: 16px 16px 12px;
  border-bottom: 1px solid var(--border);
}
/* The site's own hammer mark rather than an emoji. The artwork carries its
   own white ground and black outline, so it sits on a white tile in both
   themes — a gold gradient behind it just muddied the outline. */
.board-ic {
  width: 42px; height: 42px; flex: none; display: grid; place-items: center; font-size: 1.3rem;
  border-radius: 12px; overflow: hidden; background: #fff;
  box-shadow: inset 0 0 0 1px rgba(180,130,0,.35), 0 2px 6px rgba(120,90,0,.15);
}
.board-ic img { width: 100%; height: 100%; object-fit: contain; display: block; }
.board-t { min-width: 0; flex: 1; }
.board-t h2 { margin: 0; font-size: 1.02rem; letter-spacing: .04em; }
.board-sub { font-size: .72rem; color: var(--text-muted); font-weight: 700; }
.board-badge {
  flex: none; font-size: .7rem; font-weight: 900; padding: 4px 9px; border-radius: 999px;
  background: var(--blue-100); color: var(--blue-700); white-space: nowrap;
}

.board-list { padding: 6px; }
.board-list.sep { border-top: 1px dashed var(--border); }
.board-row {
  display: grid; grid-template-columns: 26px 28px minmax(0,1fr) auto auto;
  align-items: center; gap: 9px; padding: 8px 10px; border-radius: 11px;
}
.board-row:hover { background: var(--surface-2); }
.board-row.me { background: var(--blue-100); }
.board-rank { font-weight: 900; font-size: .84rem; color: var(--text-muted); text-align: center; }
.board-rank.m1 { color: #c9971a; } .board-rank.m2 { color: #8c98a8; } .board-rank.m3 { color: #b0713a; }
.board-av {
  width: 28px; height: 28px; border-radius: 9px; display: grid; place-items: center;
  background: linear-gradient(135deg, var(--blue-600), var(--blue-700));
  color: #fff; font-weight: 900; font-size: .82rem;
}
.board-n { font-weight: 800; font-size: .88rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.board-g { font-size: .7rem; color: var(--text-muted); font-weight: 700; white-space: nowrap; }
.board-p { font-weight: 900; font-size: .95rem; color: var(--gold-600); min-width: 3ch; text-align: right; }
:root[data-theme="dark"] .board-p { color: var(--gold-400); }

.board-empty { padding: 20px 18px; font-size: .84rem; color: var(--text-soft); line-height: 1.55; margin: 0; }
.board-note { padding: 0 18px 16px; font-size: .76rem; color: var(--text-muted); margin: 0; }
.board-foot {
  padding: 9px 16px; border-top: 1px solid var(--border);
  font-size: .74rem; color: var(--text-muted); font-weight: 700; text-align: center;
}

/* Ödül duyurusu — tablonun tepesinde, altın şeritle. Tablonun kendi
   altın dikişiyle aynı dilde dursun diye mavi değil altın. */
.board-prize {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 11px 16px; border-bottom: 1px solid var(--border);
  background: linear-gradient(90deg, var(--gold-100), transparent);
}
.board-prize .bp-ic { font-size: 1.1rem; line-height: 1.3; flex: none; }
.board-prize .bp-tx { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.board-prize .bp-tx b {
  font-size: .74rem; text-transform: uppercase; letter-spacing: .07em; color: var(--gold-600);
}
.board-prize .bp-tx span { font-size: .8rem; color: var(--text-soft); line-height: 1.45; }
.board-prize .bp-tx span b { text-transform: none; letter-spacing: 0; font-size: inherit; color: var(--text); }

@media (max-width: 1100px){
  .hero-split { grid-template-columns: 1fr; gap: 24px; }
  .board { max-width: 520px; }
}

/* ---------- Favourite players ---------- */
/* The header heart fills in once there is something in the list. */
#favBtn svg { width: 20px; height: 20px; }
#favBtn.has { color: #e0435f; }
#favBtn.has svg { fill: #e0435f; }

.fav-btn {
  display: inline-flex; align-items: center; gap: 6px; vertical-align: middle;
  margin-left: 10px; padding: 5px 11px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--border-strong); background: var(--surface);
  color: var(--text-soft); font-family: inherit; font-weight: 800; font-size: .78rem;
  transition: color .12s, border-color .12s, background .12s;
}
.fav-btn svg { width: 16px; height: 16px; }
.fav-btn:hover { color: #e0435f; border-color: #e0435f; }
.fav-btn.on { color: #e0435f; border-color: #e0435f; background: rgba(224,67,95,.08); }
.fav-btn.on svg { fill: #e0435f; }

.fav-ic { display: grid; place-items: center; color: #e0435f; }
.fav-ic svg { width: 20px; height: 20px; fill: #e0435f; }
.fav-row { padding: 0; }
.fav-go { display: flex; align-items: center; gap: 10px; flex: 1; min-width: 0;
  padding: 9px 12px; text-decoration: none; color: inherit; }
.fav-x {
  border: none; background: none; cursor: pointer; color: var(--text-muted);
  padding: 8px 12px; display: grid; place-items: center;
}
.fav-x svg { width: 16px; height: 16px; }
.fav-x:hover { color: #d23c3c; }

/* ---------- Account (register / log in) ---------- */
.auth-btn { padding: 8px 12px; font-size: .8rem; white-space: nowrap; }
.auth-me { display: inline-flex; }
.auth-name {
  display: inline-flex; align-items: center; gap: 8px; cursor: pointer;
  background: var(--surface-2); border: 1px solid var(--border-strong); border-radius: 11px;
  padding: 5px 11px 5px 5px; font-family: inherit; color: inherit; font-weight: 800; font-size: .84rem;
}
.auth-name:hover { border-color: var(--blue-600); }
.auth-av {
  width: 28px; height: 28px; border-radius: 8px; flex: none; display: grid; place-items: center;
  background: linear-gradient(135deg, var(--blue-600), var(--blue-700)); color: #fff;
  font-weight: 900; font-size: .9rem;
}
.auth-av.big { width: 46px; height: 46px; border-radius: 12px; font-size: 1.3rem; }
.auth-u { max-width: 12ch; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.auth-tabs { display: flex; gap: 6px; margin: 0 0 16px; }
.auth-tabs button {
  flex: 1; padding: 10px; border-radius: 11px; border: 1px solid var(--border);
  background: var(--surface-2); font-family: inherit; font-weight: 800; font-size: .88rem;
  color: var(--text-soft); cursor: pointer;
}
.auth-tabs button.on { background: var(--blue-600); border-color: var(--blue-700); color: #fff; }

.auth-form { display: flex; flex-direction: column; gap: 12px; }
.auth-l { display: block; font-size: .78rem; font-weight: 800; color: var(--text-muted); }
.auth-l input {
  display: block; width: 100%; margin-top: 5px; padding: 10px 12px;
  border: 1px solid var(--border-strong); border-radius: 11px; background: var(--surface);
  color: var(--text); font-family: inherit; font-size: .92rem; font-weight: 600;
}
.auth-l input:focus { outline: none; border-color: var(--blue-600); box-shadow: 0 0 0 3px var(--blue-100); }
.auth-go { justify-content: center; padding: 11px; font-size: .95rem; }
.auth-msg { font-size: .82rem; font-weight: 700; min-height: 1em; }
.auth-msg.bad { color: #d23c3c; }
.auth-note { font-size: .74rem; color: var(--text-muted); margin: 0; text-align: center; }

/* Toast: says what happened after the modal closes. */
.toast {
  position: fixed; left: 50%; bottom: 26px; transform: translateX(-50%) translateY(16px);
  background: var(--text); color: var(--surface); padding: 11px 18px; border-radius: 999px;
  font-weight: 800; font-size: .86rem; box-shadow: 0 10px 30px rgba(15,30,60,.28);
  opacity: 0; pointer-events: none; transition: opacity .18s, transform .18s; z-index: 200;
}
.toast.show { opacity: 1; transform: translateX(-50%) translateY(0); }

/* Yeni mesaj uyarısı: normal toast'ın biraz üstünde durur ve tıklanabilir. */
.toast-click {
  bottom: 82px; cursor: pointer; border: none; font-family: inherit;
  border-radius: 14px; padding: 12px 18px; letter-spacing: .1px;
}
.toast-click.show { pointer-events: auto; }
.toast-click:hover { filter: brightness(1.12); }

@media (max-width: 620px){
  .auth-btn { padding: 7px 9px; font-size: .74rem; }
  .auth-u { display: none; }
}

/* ---------- Type-ahead suggestions ----------
   Dropdown under a search box; the host gets position:relative in JS. */
.sug-box { display:none; position:absolute; top:calc(100% + 6px); left:0; right:0; z-index:60;
  background:var(--surface); border:1px solid var(--border); border-radius:12px;
  box-shadow:0 16px 40px rgba(15,30,60,.20); overflow:hidden; max-height:min(70vh,420px); overflow-y:auto; }
.sug-box.open { display:block; }
.sug-row { display:flex; align-items:center; gap:10px; padding:9px 12px; text-decoration:none;
  color:inherit; border-bottom:1px solid var(--border); }
.sug-row:last-child { border-bottom:none; }
.sug-row:hover, .sug-row.on { background:var(--surface-2); }
.sug-ic { width:28px; height:28px; flex:none; display:grid; place-items:center; font-size:.95rem; }
.sug-main { min-width:0; flex:1; }
.sug-main .n { font-weight:800; font-size:.9rem; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.sug-main .n .tag { font-size:.72rem; }
.sug-main .s { font-size:.75rem; color:var(--text-muted); display:flex; align-items:center; gap:5px; margin-top:1px; }
.sug-val { font-size:.78rem; font-weight:900; color:var(--gold-600); white-space:nowrap; flex:none; }

/* Ranked medal cell: same weight as .trophy but with the PoL medal, no 🏆. */
.medals { font-weight:900; color:var(--gold-600); white-space:nowrap; }

/* ---------- Match card: rank chip + medal ledger ----------
   The three lines (name+rank, clan, medals) are stacked rather than crammed
   onto one row, which is what made them collide on narrow screens. */
.rank-chip { display:inline-block; font-size:.68rem; font-weight:900; padding:2px 6px; border-radius:7px;
  background:var(--blue-100); color:var(--blue-700); margin:0 6px 0 0; vertical-align:middle; }
.match-side.right .rank-chip { margin:0 0 0 6px; }
.match-side .pn { display:flex; align-items:center; gap:2px; flex-wrap:wrap; line-height:1.3; }
.match-side.right .pn { justify-content:flex-end; }
.pc-clan { color:var(--text-muted); text-decoration:none; }
.pc-clan:hover { text-decoration:underline; }
.mledger { display:inline-flex; align-items:center; gap:4px; font-size:.8rem; color:var(--text-soft); white-space:nowrap; }
.mledger .arw { color:var(--text-muted); }
.match-side .pdelta { display:flex; align-items:center; gap:10px; flex-wrap:wrap; margin-top:3px; }
.match-side.right .pdelta { justify-content:flex-end; }

/* Below the match-grid breakpoint the two sides stack, so the right-hand side
   left-aligns like the left one — including the flex rows added for the rank
   chip and the medal ledger, which otherwise stayed pinned to the right. */
@media (max-width:1020px){
  .match-side.right .pn, .match-side.right .pdelta { justify-content: flex-start; }
}

/* Çarkın yanındaki ses düğmesi. Yeşil düğme flex:1 ile yayıldığı için
   bunun küçülmemesi gerekiyor; ayrıca dokunma hedefi 44 pikselin altına
   düşmesin diye boyut sabit. */
.ses-btn { flex:0 0 auto; width:46px; height:46px; font-size:1.15rem; line-height:1; }
.ses-btn[aria-pressed="false"] { opacity:.55; }
