/* ==================================================================
   takvim.css — ÖSYM SINAV TARİHLERİ (yeni tema)          2026-09-03
   ==================================================================
   views/yeni/sinav_tarihleri.php ile yükleniyor.
   Sıra: ortak.css → kurs.css → vitrin.css → takvim.css → tw.css
   (head.php `$nk_sayfa_css = array('kurs','vitrin','takvim')`).

   ⚠️ Bu dosya BİLEREK KÜÇÜK (ana.css deseni): hero iskeleti, arama +
   çipler, lede, butonlar, hero geri sayım paneli vitrin.css +
   kurs.css'ten MİRAS. Burada yalnız:
     1. Sayfanın RENK İMZASI (YEŞİL — kullanıcı kararı 2026-09-03;
        eski sayfanın yeşil sayaç kimliğinin devamı)
     2. Dönem kartları + kart içi geri sayım + durum rozetleri +
        açık zemin tarih listesi (zaman çizgisi noktalarıyla)
     3. Kart içi geçmiş dönem akordiyonu, CTA şeridi, kaynak dipnotu

   ♻️ 2. TUR (kullanıcı, staging incelemesi 2026-09-03):
     · "cevap bloğunda her yönde çok boşluk" → bölüm üst boşluğu ve
       cevap kutusunun iç/dış boşlukları sıkılaştı, kutu tam genişlik
     · "takvimler beyaz ve sade" → karta üst gradyan şerit + alan
       ikonu + tarih satırlarına zaman çizgisi noktası + hover cila
     · "geri sayım yok" → HER KARTTA gün/saat/dk/sn (eski temadaki
       26 ayrı setInterval yerine tek motor — view betiği)
     · geçmiş dönemler kendi sınav kartının altında akordiyon
       (.tkv-donem-gecmis); sayfa dibindeki blok yalnız gelecek kartı
       olmayan sınavlar için duruyor

   TUZAK NOTLARI (tasarim-tuzaklari.md):
   §A  Element seçicisi yok; her kural `.tkv-` öneki ya da `.tkv-sayfa`
       kancası altında.
   §A  Reset `p{margin:0}` — gereken boşluk açıkça geri veriliyor.
   §K  Grid'lerde açık sütun tanımı + `min-width:0` (min-content tuzağı).
   ================================================================== */


/* ==================================================================
   0. İMZA TONLARI — yalnız bu dosyada kullanılan yerel değerler.
   Koyu hero üstünde açık yeşil (#4ADE80), açık zeminde koyu yeşil
   (#0E9F6E) — kontrast iki zeminde de AA üstü.
   ================================================================== */
.tkv-sayfa{
  --tkv-yesil:      #0E9F6E;             /* açık zeminde metin/ikon  */
  --tkv-yesil-k:    #0B7A55;             /* hover / koyu hâl         */
  --tkv-yesil-a:    #4ADE80;             /* koyu hero üstünde        */
  --tkv-yesil-w:    rgb(14 159 110 / .10);  /* açık zemin dolgusu    */
  --tkv-yesil-w2:   rgb(14 159 110 / .06);  /* daha fısıltı dolgu    */
  --tkv-amber:      #B45309;
  --tkv-amber-w:    rgb(180 83 9 / .10);
}

/* Hero'nun ikincil ışığı yeşile döner (vitrin turkuaz, ana sayfa altın
   basıyordu — aynı fısıltı deseni). Ana marka ışığı aynen duruyor. */
.tkv-sayfa .vit-hero::before{
  background:
    radial-gradient(65% 85% at 8% 0%,  rgb(47 107 208 / .30), transparent 60%),
    radial-gradient(55% 80% at 92% 12%, rgb(74 222 128 / .10), transparent 62%);
}
.tkv-sayfa .vit-kicker{ color:var(--tkv-yesil-a) }

/* Kurs detayın geri sayım paneli bu sayfada yeşil aksanla: "sıradaki
   adım" satırı kırmızı yerine yeşil (kurs.css .sirada kırmızı ailede). */
.tkv-sayfa .khero-takvim .sirada dt{ color:#A7F3D0 }


/* ==================================================================
   1. HERO EK PARÇALARI
   ================================================================== */
/* Son güncelleme çipi — cam yüzey, koyu hero üstünde. Tazelik sinyali
   ekranda; aynı değer şemada dateModified. */
.tkv-guncel{
  display:inline-flex; align-items:center; gap:8px;
  padding:7px 14px; border-radius:999px;
  background:rgb(255 255 255 / .07);
  border:1px solid rgb(255 255 255 / .14);
  font-size:13.5px; font-weight:700; color:#D9E4F2;
}
.tkv-guncel .icon{ width:15px; height:15px; color:var(--tkv-yesil-a) }
.tkv-guncel b{ color:#fff; font-weight:800 }

/* Sağ paneldeki "kursuna göz at" köprüsü — panelin altında, yeşil. */
.tkv-yan-kurs{
  display:inline-flex; align-items:center; gap:6px;
  font-size:14.5px; font-weight:800; color:var(--tkv-yesil-a);
  border-bottom:2px solid rgb(74 222 128 / .35); padding-bottom:2px;
  justify-self:start;
}
.tkv-yan-kurs:hover{ color:#fff; border-color:#fff }
.tkv-yan-kurs .icon{ width:15px; height:15px }

/* ==================================================================
   1b. HERO MİNİ TAKVİMİ (2026-09-04)
   Kullanıcı: "takvimi hero sağ tarafa koyacağız; şu an sağdaki sayaç
   sadece en yakın tarihi gösteriyor, kaldıracağız."
   Panel koyu hero üstünde cam kart: üstte ay gezinme, ortada ızgara,
   altta O AYIN sınav listesi. Izgara görsel, liste erişilebilir
   karşılığı (view'daki gerekçeye bak).
   ⛔ Kütüphane yok — ızgara CSS grid, ay değişimi 60 satırlık betik.
   ================================================================== */
/* ♻️ PANEL BOYU BURADA SABİTLENİYOR (2026-09-05) — eskiden liste kabı
   4 satırlık sabitlenerek yapılıyordu, o da az sınavlı ayda ORTADA
   ölü alan bırakıyordu (kullanıcı: "notun üstünde altında kocaman
   boşluk"). Artık kutular içeriği kadar; artan boşluk panelin DİBİNDE
   toplanıyor. Panelin görünür bir çerçevesi/zemini olmadığı için dipte
   kalan boşluk hero'nun kendi nefesinden ayırt edilmiyor — ortadaki
   delik ise göze batıyordu.
   Değer = EN KALABALIK ayın boyu (4 satır + akordiyon düğmesi), canlı
   ölçümle bulundu. ⚠️ Panele satır/başlık eklenirse bu sayı yeniden
   ölçülmeli, yoksa ay geçişinde hero yine oynar. */
.tkv-mini{ gap:10px; min-height:536px }
@media (max-width:1023px){ .tkv-mini{ min-height:0 } }

.tkv-mini-bas{
  display:flex; align-items:center; gap:8px;
  padding:4px 0 2px;
}
.tkv-mini-ay{
  margin:0; flex:1; text-align:center;
  font-size:1.02rem; font-weight:800; color:#fff; letter-spacing:-.01em;
}
.tkv-mini-ok{
  flex:0 0 auto; width:36px; height:36px;
  display:grid; place-items:center;
  border-radius:11px; cursor:pointer;
  background:rgb(255 255 255 / .07);
  border:1px solid rgb(255 255 255 / .14);
  color:#D9E4F2;
  transition:background .15s ease, color .15s ease, border-color .15s ease;
}
.tkv-mini-ok svg{ width:17px; height:17px }
.tkv-mini-ok:hover:not(:disabled){
  background:rgb(74 222 128 / .16); border-color:rgb(74 222 128 / .4); color:#fff;
}
/* Sınırdaki ay: düğme duruyor ama tıklanamaz olduğu görünüyor —
   kaybolsaydı başlık her ay sağa sola kayardı. */
.tkv-mini-ok:disabled{ opacity:.32; cursor:default }
@media (prefers-reduced-motion:reduce){ .tkv-mini-ok{ transition:none } }

.tkv-mini-hafta,
.tkv-mini-izgara{
  display:grid;
  grid-template-columns:repeat(7, minmax(0,1fr));   /* açık sütun — min-content tuzağı (§K) */
  gap:3px;
}
/* ♻️ Kullanıcı (2026-09-04): "sağ taraf sola oranla uzun olmuş".
   Kök neden hücrelerdeki `aspect-ratio:1/1` idi: panel 1024px+'te
   ~400px geniş, sütun ~55px → KARE hücre 55px yüksek → 6 satır ~350px.
   Yükseklik sabitlendi (34px), ızgara ~220px'e indi.
   Ayrıca `min-height` 6 SATIRLIK: ay değişince 5/6 haftalık aylar
   arasında panel boyu zıplamıyor (hero'da sıçrama olurdu). */
/* ♻️ Canlı ölçüm (2026-09-04, CDP): `min-height` + `grid-auto-rows:30px`
   ile 5 haftalık aylarda ALTTA 6. satırlık boş bant kalıyordu (390px
   ekran görüntüsünde göze çarpıyor). Kutu boyu SABİT, satırlar `1fr`
   ile aralarında paylaşıyor: 5 haftalık ayda satır ~36px, 6 haftalıkta
   30px — toplam hep 195px, boş bant yok. */
.tkv-mini-izgara{ height:195px; grid-auto-rows:1fr }
.tkv-mini-hafta{
  padding-bottom:2px; margin-bottom:2px;
  border-bottom:1px solid rgb(255 255 255 / .1);
}
.tkv-mini-hafta span{
  text-align:center; font-size:.66rem; font-weight:800;
  letter-spacing:.06em; text-transform:uppercase; color:#8FA6C6;
}
.tkv-mini-gun{
  min-width:0;
  /* ⛔ `aspect-ratio:1/1` DENENDİ — panel genişledikçe hücre yükseliyordu.
     ⛔ Sabit `height:30px` de DENENDİ: kutu 195px'e sabitlenince 5 haftalık
        aylarda altta 6. satırlık boş bant kalıyordu (canlıda görüldü).
     Şimdi yükseklik YOK — satır izi (`grid-auto-rows:1fr`) belirliyor:
     4 haftalık ayda 47px, 5'te 37px, 6'da 30px. Kutu hep 195px. */
  display:grid; place-items:center;
  border-radius:9px;
  font-size:.82rem; font-weight:700; color:#B9C9DF;
  font-variant-numeric:tabular-nums;
}
/* Sınav olan gün — imza yeşili, dolu zemin. */
.tkv-mini-gun.dolu{
  background:rgb(74 222 128 / .18);
  border:1px solid rgb(74 222 128 / .45);
  color:#fff; font-weight:900;
}
/* Bugün — yalnız çerçeve; dolu günle çakışırsa ikisi birden okunur. */
.tkv-mini-gun.bugun{ box-shadow:inset 0 0 0 1.5px rgb(255 255 255 / .55) }

/* ♻️ Kullanıcı (2026-09-04, ikinci geri bildirim): "aylar arasında
   gezerken alt kısım boşsa takvim uzayıp kısalıyor, hero boyunu
   değiştiriyor."
   Kök neden: liste kaç sınav varsa o kadar uzuyordu (0→4 satır ≈ 140px
   fark) ve boş ayda listenin yerine geçen not FARKLI yükseklikteydi.
   ⛔ `min-height` YETMEDİ (ilk denemem): taban veriyor ama tavan yok.
   Çözüm: liste + boş notu SABİT yükseklikli tek kapta. Ayda 1 sınav da
   olsa 4 sınav da olsa panel aynı boyda; 5+ sınavlı ay çıkarsa kap
   kendi içinde kayar, hero yine zıplamaz.
   `overscroll-behavior:contain` — kap sonuna gelince kaydırma sayfaya
   sıçramasın (mobilde rahatsız ederdi). */
/* ♻️ 3. DENEME (kullanıcı, 2026-09-05): "notun üstünde altında kocaman
   boşluk; sol tarafın altında da boşluğa sebep oluyor."
   ⛔ SABİT `height:152px` BIRAKILDI. Ölçüm: Eylül'de 3 sınav var,
      kutu 4 satırlık → içeride **38px ölü alan**, slotun notu ortalaması
      +13px, panel boşluğu +10 → liste ile not arası **61px**. 1 sınavlı
      ayda bu 110px'e çıkıyordu.
   ✅ Kutu artık İÇERİĞİ KADAR (`max-height` tavan): 3 sınav = 3 satır,
      ölü alan yok. 4'ten fazlasında yine tavana dayanıp akordiyon
      düğmesi çıkıyor.
   Panelin boyu nasıl sabit kalıyor? Kutu değil PANEL sabitleniyor
   (`.tkv-mini{min-height}` aşağıda) — artan boşluk ortada delik
   açmak yerine panelin DİBİNDE toplanıyor. */
.tkv-mini-alt{
  max-height:152px;                    /* 4 satır × 35px + 3 × 4px boşluk */
  margin-top:6px;
  display:flex; flex-direction:column;
  overflow-y:auto; overscroll-behavior:contain;
  scrollbar-width:thin;
}
/* ♻️ Kullanıcı (2026-09-04): "akordiyon yap, 4'ü görünsün, tıklarsa
   6 ya da daha fazlası görünebilsin." Açıkken kap kendi boyuna
   uzuyor — kaydırma çubuğu yerine tam liste. */
.tkv-mini-alt.acik{ height:auto; overflow:visible }

.tkv-mini-liste{
  list-style:none; margin:0; padding:0;
  display:grid; gap:4px; align-content:start;
}

/* ⛔ SLOT ARTIK YER AYIRMIYOR (2026-09-05). Eskiden `min-height:50px`
   ile hep dolu tutuluyordu (düğme yoksa takvim notu) — panelin boyu
   böyle sabitleniyordu ama notun çevresinde ölü alan kalıyordu.
   Artık boy sabitliği `.tkv-mini{min-height}` ile sağlanıyor; slot
   yalnız akordiyon düğmesi varken yer kaplıyor.
   Not markup'ı view'da yoruma alındı — geri isterse orada duruyor.
   ⚠️ Boşluk SLOTA değil DÜĞMEYE veriliyor: düğme gizlendiğinde
   (`display:none`) marjı da gitsin — `:has()` gibi yeni bir seçiciye
   ihtiyaç kalmıyor. */
.tkv-mini-slot{ display:flex; align-items:center }

/* Akordiyon düğmesi — slotun içinde, tam genişlik. Ayda 4'ten çok
   sınav yoksa view/JS `hidden` koyuyor. */
.tkv-mini-daha{
  margin-top:6px; width:100%;
  display:flex; align-items:center; justify-content:center; gap:7px;
  padding:9px 12px; border-radius:10px; cursor:pointer;
  background:rgb(255 255 255 / .05);
  border:1px dashed rgb(255 255 255 / .18);
  font:inherit; font-size:.82rem; font-weight:800; color:#B9C9DF;
  transition:background .15s ease, border-color .15s ease, color .15s ease;
}
.tkv-mini-daha:hover{
  background:rgb(74 222 128 / .12); border-color:rgb(74 222 128 / .38); color:#fff;
}
.tkv-mini-daha .icon{ width:14px; height:14px; transition:transform .18s ease }
.tkv-mini-daha[aria-expanded="true"] .icon{ transform:rotate(180deg) }
.tkv-mini-daha[hidden]{ display:none }   /* flex kuralı [hidden]'ı ezmesin */
@media (prefers-reduced-motion:reduce){
  .tkv-mini-daha, .tkv-mini-daha .icon{ transition:none }
}
.tkv-mini-liste a{
  display:flex; align-items:baseline; gap:8px;
  padding:6px 10px; border-radius:10px;   /* satır ~33px — kap hesabı buna göre */
  background:rgb(255 255 255 / .05);
  border:1px solid rgb(255 255 255 / .08);
  font-size:.86rem; line-height:1.35; color:#E4EDF8;
  transition:background .15s ease, border-color .15s ease;
}
.tkv-mini-liste a:hover{
  background:rgb(74 222 128 / .14); border-color:rgb(74 222 128 / .35); color:#fff;
}
@media (prefers-reduced-motion:reduce){ .tkv-mini-liste a{ transition:none } }
.tkv-mini-liste b{
  flex:0 0 auto; font-size:1rem; font-weight:900; color:var(--tkv-yesil-a);
}
.tkv-mini-gunad{ flex:0 0 auto; font-size:.72rem; font-weight:700; color:#8FA6C6 }
.tkv-mini-ad{
  min-width:0; font-weight:700;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
/* Sabit kabın içinde dikey ortada — listenin yerine geçtiği için
   yukarı yapışık durmasın. */
.tkv-mini-bos{
  margin:auto 0; padding:10px;
  border-radius:10px; border:1px dashed rgb(255 255 255 / .14);
  text-align:center; font-size:.83rem; color:#9DB3D0;
}

/* 🔒 "TAKVİME EKLE" KUTUSU — ICS (2026-09-04, geliştirme kapısında).
   ⛔ ÖNCE HERO PANELİNDEYDİ; kullanıcı aldırdı ("hero'yu uzattı, bir
      önceki hâli iyiydi"). Artık takvim bölümünde, "1 Gün Ücretsiz
      Dene" şeridinin hemen altında kendi kutusunda.
   ⚠️ Buranın zemini AÇIK (bölüm arka planı) — hero'daki koyu zemin
      renkleri kullanılamaz; kutu açık yüzey dilinde. */
.tkv-ics-kutu{
  margin:0 0 clamp(16px,2.4vw,24px);
  padding:clamp(14px,2.2vw,20px) clamp(16px,2.6vw,24px);
  background:var(--surface);
  border:1px solid var(--line-2);
  border-left:4px solid var(--tkv-yesil);
  border-radius:var(--r-l); box-shadow:var(--sh-1);
  display:flex; flex-wrap:wrap; align-items:center; gap:12px 24px;
}
.tkv-ics-metin{ flex:1 1 22rem; min-width:0 }
.tkv-ics-metin b{
  display:block; font-size:1.02rem; font-weight:800; color:var(--ink);
  letter-spacing:-.01em; margin-bottom:3px;
}
.tkv-ics-metin span{ font-size:.88rem; line-height:1.6; color:var(--ink-2) }
/* İki düğme = iki cihaz ailesi. Kişi "hangi dosya, hangi adres" diye
   düşünmüyor, telefonunun adına basıyor (kullanıcı: "teknoloji özürlü
   kitlenin de kolayca yapabileceği hâle getirmeliyiz"). */
.tkv-ics-dugmeler{
  flex:none; display:flex; flex-wrap:wrap; align-items:center; gap:10px;
}
.tkv-ics-dugmeler .btn{ display:inline-flex; align-items:center; gap:8px }
.tkv-ics-dugmeler .icon{ width:17px; height:17px }

/* "Nasıl eklenir?" — kutunun tam genişliğinde, kapalı akordiyon.
   Cihaz cihaz yönerge; ziyaretçi "ics/abonelik" kelimelerini görmüyor. */
.tkv-ics-nasil{ flex:1 1 100%; border-top:1px solid var(--line-2); padding-top:10px }
.tkv-ics-nasil summary{
  list-style:none; cursor:pointer;
  display:inline-flex; align-items:center; gap:7px;
  font-size:.84rem; font-weight:800; color:var(--brand-d);
}
.tkv-ics-nasil summary::-webkit-details-marker{ display:none }
.tkv-ics-nasil summary .icon{ width:14px; height:14px; transition:transform .18s ease }
.tkv-ics-nasil[open] summary .icon{ transform:rotate(180deg) }
.tkv-ics-nasil ul{
  margin:12px 0 0; padding-left:18px;
  display:grid; gap:7px;
  font-size:.86rem; line-height:1.6; color:var(--ink-2);
}
.tkv-ics-nasil b{ color:var(--ink) }

/* --- KOPYALANABİLİR TAKVİM ADRESİ ---------------------------------
   Önceki metin "yukarıdaki adresi yapıştır" diyordu ama ekranda adres
   YOKTU (kullanıcı yakaladı). Adres artık görünür ve tek dokunuşla
   kopyalanıyor. */
.tkv-ics-adres-bas{
  margin:10px 0 6px; font-size:.82rem; font-weight:700; color:var(--ink-2);
}
.tkv-ics-adres{
  display:flex; flex-wrap:wrap; align-items:stretch; gap:8px;
}
.tkv-ics-adres code{
  flex:1 1 16rem; min-width:0;
  padding:9px 12px; border-radius:9px;
  background:var(--tint); border:1px solid var(--line-2);
  font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size:.8rem; color:var(--ink-2);
  overflow-x:auto; white-space:nowrap;      /* uzun adres kutuyu taşırmasın */
  overscroll-behavior-x:contain;
}
.tkv-ics-kopya{
  flex:0 0 auto; cursor:pointer;
  display:inline-flex; align-items:center; gap:7px;
  padding:9px 14px; border-radius:9px;
  background:var(--tkv-yesil-w); border:1px solid rgb(14 159 110 / .35);
  font:inherit; font-size:.82rem; font-weight:800; color:var(--tkv-yesil-k);
  transition:background .15s ease, border-color .15s ease;
}
.tkv-ics-kopya:hover{ background:rgb(14 159 110 / .16); border-color:var(--tkv-yesil) }
.tkv-ics-kopya.tamam{ background:var(--tkv-yesil); border-color:var(--tkv-yesil); color:#fff }
.tkv-ics-kopya .icon{ width:15px; height:15px }
@media (prefers-reduced-motion:reduce){ .tkv-ics-kopya{ transition:none } }
/* Dar ekranda kopyala düğmesi tam satır — 44px dokunma hedefi. */
@media (max-width:479px){
  .tkv-ics-adres code{ flex:1 1 100% }
  .tkv-ics-kopya{ flex:1 1 100%; justify-content:center; padding:12px 14px }
}
@media (prefers-reduced-motion:reduce){
  .tkv-ics-nasil summary .icon{ transition:none }
}
/* Dar ekranda düğmeler tam satır — uzun etiketli düğme taşmasın. */
@media (max-width:479px){
  .tkv-ics-dugmeler{ width:100% }
  .tkv-ics-dugmeler .btn{ flex:1 1 100%; justify-content:center; white-space:normal }
}

/* --- MOBİL DOKUNMA HEDEFLERİ (yayın öncesi denetim, 2026-09-04)
   Masaüstü ölçüleri (36px ok, 33px liste satırı) fare için yeterli ama
   dokunmatikte 44px kuralının altında kalıyor — çerez düğmelerinde
   (39px) ve vitrin çiplerinde (43px) aynı hata iki kez yaşandı.
   Hero 1024px altında tek sütuna indiği için burada yer bol; satır ve
   düğme büyütülüyor, sabit kap da 4 satıra göre yeniden hesaplanıyor
   (190px = 4 × 44,5px + 3 × 4px) — ay değişince yine zıplamıyor. */
@media (max-width:1023px){
  .tkv-mini-ok{ width:44px; height:44px }
  .tkv-mini-liste a{ padding:12px }
  .tkv-mini-alt{ max-height:204px }   /* canlı ölçüm: mobilde satır 47px → 4×47+12
                                         ⛔ `height` DEĞİL: sabit yükseklik az
                                         sınavlı ayda 105-152px ölü alan
                                         bırakıyordu (masaüstündeki hatanın eşi) */
  .tkv-mini-daha{ padding:13px 12px }   /* 44px dokunma hedefi */
}

/* --- İKİ SÜTUNUN HİZASI
   ⛔ 1. DENEME (2026-09-04) — `align-items:stretch` + sol sütunda
      `.vit-hero-cta{margin-top:auto}` ile ALT HİZALARI eşitlemek:
      kullanıcı reddetti. Panel metin sütunundan ~160px uzun olduğu
      için boşluk sütunun ORTASINDA toplanıyordu: "solda devasa bir
      boşluk oluştu, kapalı hâlinde de var." Alt hizalar eşitti ama
      görüntü bozuktu. Kaldırıldı (yorumda duruyor):
        .tkv-sayfa .vit-hero-ust{ align-items:stretch }
        .tkv-sayfa .vit-hero-metin{ display:flex; flex-direction:column }
        .tkv-sayfa .vit-hero-metin .vit-hero-cta{ margin-top:auto; padding-top:20px }
        .tkv-mini{ display:flex; flex-direction:column }
        .tkv-mini .vit-yan-alt{ margin-top:auto }
   ✅ 2. YOL: metin sütunu panele göre DİKEY ORTALANIYOR. Artık sütunun
      içinde delik yok; artan yükseklik üstte ve altta eşit paylaşılıyor,
      hero'nun kendi nefesi gibi okunuyor.
   ⚠️ vitrin.css'e DOKUNULMADI: o dosyayı /online vitrini de kullanıyor;
      kural burada `.tkv-sayfa` altında dar kapsamla eziliyor.
   Yalnız ≥1024px — altında hero zaten tek sütuna iniyor. */
@media (min-width:1024px){
  .tkv-sayfa .vit-hero-ust{ align-items:center }
}

/* Panel altı nottaki çıpa linki — koyu zeminde düz metinden ayrışsın. */
.tkv-sayfa .vit-yan-alt a{
  color:#D9E4F2; font-weight:800;
  text-decoration:underline; text-underline-offset:3px;
}
.tkv-sayfa .vit-yan-alt a:hover{ color:#fff }


/* ==================================================================
   2. BÖLÜM BOŞLUĞU + AEO CEVAP BLOĞU
   ♻️ 2. tur: ortak.css'in `section` clamp'i hero'nun altında büyük
   ölü bant bırakıyordu; üst boşluk sıkıldı. Cevap kutusu dar ada gibi
   ortada yüzüyordu — tam genişliğe alındı, iç boşluk kısıldı.
   ================================================================== */
.tkv-liste{ padding-block:clamp(30px,4vw,52px) clamp(56px,7vw,96px) }

.tkv-cevap{
  margin:0 0 clamp(18px,2.6vw,28px);
  padding:14px 18px;
  background:var(--surface);
  border:1px solid var(--line-2); border-left:4px solid var(--tkv-yesil);
  border-radius:var(--r-l); box-shadow:var(--sh-1);
  font-size:16.5px; line-height:1.7; color:var(--ink-2);
}
.tkv-cevap strong{ color:var(--ink) }
.tkv-cevap a{ color:var(--brand-d); font-weight:800 }
.tkv-cevap a:hover{ text-decoration:underline }

/* sec-head bu sayfada daha derli — vitrindeki geniş nefes burada
   kartların önünü kesiyordu. */
.tkv-liste .sec-head{ margin-bottom:clamp(16px,2.4vw,26px) }

/* 🐞 11. tur — ARAMA ÇIPASI (#takvim-ara).
   Hero'daki "Sınavını Bul" düğmesinin hedefi. Yüksekliği 0: yerleşimi
   hiç etkilemiyor, yalnız kaydırma hedefi.
   scroll-margin-top ortak.css'teki `[id]{86px}` yerine 96px — yapışkan
   başlığın altında arama kutusuna nefes payı bırakıyor, kutu barın
   dibine yapışmıyor. (Aynı değer puan sayfasının çıpalarında da var.) */
.tkv-capa{ display:block; height:0; scroll-margin-top:96px }


/* ==================================================================
   3. AY AYRAÇLARI + DÖNEM KARTLARI
   ================================================================== */
/* Ay etiketi: küçük, büyük harfli, yanına uzayan kıl payı çizgi. */
.tkv-ay-bas{
  display:flex; align-items:center; gap:14px;
  margin:clamp(20px,3vw,30px) 0 12px;
  font-size:.78rem; font-weight:900; letter-spacing:.14em;
  text-transform:uppercase; color:var(--tkv-yesil);
}
.tkv-ay-bas::after{ content:''; flex:1; height:1px; background:var(--line) }

.tkv-donemler{
  list-style:none; margin:0; padding:0;
  display:grid; gap:14px;
  grid-template-columns:minmax(0,1fr);   /* tek sütun: kart geniş, içi iki kolon */
}

/* Dönem kartı: solda kimlik + geri sayım + köprü, sağda 5 tarihlik
   liste; kart içi geçmiş akordiyonu tam genişlikte en altta.
   ♻️ 2. tur cilası: üstte yeşil gradyan kıl payı şerit + hover'da
   kıl payı yeşil çerçeve ve yumuşak yükselme. */
.tkv-donem{
  min-width:0; position:relative; overflow:hidden;
  display:grid; gap:14px 28px;
  grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);
  padding:clamp(14px,2.2vw,20px) clamp(16px,2.6vw,26px) clamp(14px,2.2vw,18px);
  background:var(--surface);
  border:1px solid var(--line); border-radius:var(--r-l);
  box-shadow:var(--sh-1);
  transition:border-color .18s ease, box-shadow .18s ease, transform .18s ease;
}
.tkv-donem::before{
  content:''; position:absolute; inset:0 0 auto 0; height:3px;
  background:linear-gradient(90deg, var(--tkv-yesil) 0%, rgb(14 159 110 / .25) 45%, transparent 80%);
}
.tkv-donem:hover{
  border-color:rgb(14 159 110 / .35);
  box-shadow:var(--sh-2);
  transform:translateY(-2px);
}
@media (prefers-reduced-motion:reduce){
  .tkv-donem{ transition:none }
  .tkv-donem:hover{ transform:none }
}
@media (max-width:859px){
  .tkv-donem{ grid-template-columns:minmax(0,1fr) }
}

.tkv-donem-sol{ min-width:0; display:flex; flex-direction:column; gap:12px }

.tkv-donem-bas{ display:flex; flex-wrap:wrap; align-items:center; gap:10px }
.tkv-donem-bas h3{
  font-size:clamp(1.05rem,1.6vw,1.22rem); line-height:1.25;
  letter-spacing:-.01em; margin:0; min-width:0;
}

/* Alan ikonu — menü/vitrin grubunun ikonuyla aynı çizim dili;
   kart bir bakışta hangi aileden, renk yeşil imza. */
.tkv-donem-iko{
  flex:0 0 auto; width:38px; height:38px;
  display:grid; place-items:center; border-radius:11px;
  background:var(--tkv-yesil-w); color:var(--tkv-yesil);
}
.tkv-donem-iko svg{ width:20px; height:20px }

/* Durum rozetleri — metin durumu SÖYLÜYOR, renk tek başına taşımıyor. */
.tkv-rozet{
  display:inline-flex; align-items:center; gap:6px;
  padding:4px 12px; border-radius:999px;
  font-size:12.5px; font-weight:800; white-space:nowrap;
}
.tkv-rozet--acik{    background:var(--tkv-yesil-w); color:var(--tkv-yesil-k) }
.tkv-rozet--yakinda{ background:var(--brand-w);     color:var(--brand-d) }
.tkv-rozet--gec{     background:var(--tkv-amber-w); color:var(--tkv-amber) }
.tkv-rozet--gun{     background:var(--tint);        color:var(--ink-2) }
/* Başvurusu süren dönemde küçük sabit nokta (yanıp sönme YOK —
   WCAG 2.3.1, ana sayfadaki canlı nokta kararının aynısı). */
.tkv-rozet--acik::before{
  content:''; width:7px; height:7px; border-radius:50%;
  background:var(--tkv-yesil);
}

/* ⛔ .tkv-gun ÇİPİ 2. TURDA KALKTI ("N gün kaldı" → tam geri sayım).
   Kural gereği silinmedi, yoruma alındı (kod-silme-yerine-yorum):
.tkv-gun{
  margin-left:auto;
  display:inline-flex; align-items:baseline; gap:5px;
  font-size:13px; font-weight:700; color:var(--ink-3); white-space:nowrap;
}
.tkv-gun b{ font-size:19px; font-weight:900; color:var(--ink) }
@media (max-width:479px){ .tkv-gun{ margin-left:0; width:100% } }
*/

/* --- KART İÇİ GERİ SAYIM (♻️ 2. tur — kullanıcı: "eski temadaki gibi
   geri sayım ekleyelim"). Eski sayfada 26 ayrı setInterval vardı;
   burada hücreleri view'daki TEK motor tazeliyor. Hücre dili kurs
   detay hero'sunun açık zemin karşılığı. */
.tkv-gs{ display:grid; gap:6px }
.tkv-gs-etiket{
  font-size:.68rem; font-weight:800; letter-spacing:.12em;
  text-transform:uppercase; color:var(--ink-3);
}
.tkv-gs-hucreler{ display:flex; flex-wrap:wrap; gap:7px }
.tkv-gs-hucre{
  min-width:56px; padding:7px 8px 6px;
  display:grid; justify-items:center; gap:1px;
  background:linear-gradient(180deg, var(--tkv-yesil-w2), var(--tkv-yesil-w));
  border:1px solid rgb(14 159 110 / .18); border-radius:12px;
}
.tkv-gs-hucre b{
  font-size:19px; font-weight:900; line-height:1.1;
  color:var(--tkv-yesil-k); font-variant-numeric:tabular-nums;
}
.tkv-gs-hucre span{
  font-size:10.5px; font-weight:800; letter-spacing:.08em;
  text-transform:uppercase; color:var(--ink-3);
}
@media (max-width:479px){
  .tkv-gs-hucre{ min-width:0; flex:1 1 0 }
}

/* Kurs köprüleri — hap görünümlü, kartın sol sütununun dibinde
   (♻️ 2. tur: düz linkten dokunulur yüzeye — 44px hedefe yaklaşsın).
   ♻️ 8. tur: bir kartta BİRDEN ÇOK köprü olabiliyor (TUS + SAHU —
   admin aynı sınavı kategori başına kopyalıyor, tekleşen kartta
   hepsinin linki duruyor); dibe yaslama artık sarmalayıcıda. */
.tkv-kurs-linkler{
  margin-top:auto;
  display:flex; flex-wrap:wrap; align-items:center; gap:8px;
}
.tkv-kurs-link{
  display:inline-flex; align-items:center; gap:7px;
  padding:9px 16px;
  border:1.5px solid rgb(14 159 110 / .35); border-radius:999px;
  font-size:14px; font-weight:800; color:var(--tkv-yesil-k);
  transition:background .15s ease, border-color .15s ease;
  /* margin-top:auto + justify/align-self start → .tkv-kurs-linkler'e taşındı (8. tur) */
}
.tkv-kurs-link:hover{
  background:var(--tkv-yesil-w); border-color:var(--tkv-yesil);
  color:var(--tkv-yesil-k);
}
@media (prefers-reduced-motion:reduce){ .tkv-kurs-link{ transition:none } }
.tkv-kurs-link .icon{ width:15px; height:15px }

/* 🔒 "Takvime ekle" — kart içi ICS köprüsü (2026-09-04, geliştirme
   kapısında). Ek kategori köprüsüyle aynı sessiz dil; ayırt edici
   olan yalnız takvim ikonu. */
.tkv-kurs-link--ics{
  padding:7px 13px; font-size:13px;
  border-color:var(--line); color:var(--ink-3);
  border-style:dashed;
}
.tkv-kurs-link--ics:hover{
  border-style:solid; border-color:rgb(14 159 110 / .45);
  background:var(--tkv-yesil-w); color:var(--tkv-yesil-k);
}

/* Ek kategori köprüsü — birincilden sessiz: nötr çerçeve, hover'da
   yeşile ısınır. */
.tkv-kurs-link--ek{
  padding:7px 13px; font-size:13px;
  border-color:var(--line); color:var(--ink-2);
}
.tkv-kurs-link--ek:hover{
  border-color:rgb(14 159 110 / .45);
  background:var(--tkv-yesil-w); color:var(--tkv-yesil-k);
}

/* --- 5 tarihlik liste — zaman çizgisi: her satırın başında durum
   noktası, solda ince bağlantı çizgisi (♻️ 2. tur "beyaz ve sade
   kalmış" cilası). Geçen adım soluk, sıradaki yeşil zeminli. */
.tkv-takvim{
  margin:0; display:grid; gap:2px; align-content:start;
  position:relative; padding-left:2px;
}
.tkv-takvim > div{
  position:relative;
  display:flex; align-items:baseline; justify-content:space-between;
  gap:12px; padding:7px 10px 7px 26px; border-radius:10px;
}
/* bağlantı çizgisi: ilk noktadan son noktaya */
.tkv-takvim > div::after{
  content:''; position:absolute; left:12px; top:0; bottom:0;
  width:2px; background:var(--line-2);
}
.tkv-takvim > div:first-child::after{ top:50% }
.tkv-takvim > div:last-child::after{ bottom:50% }
/* durum noktası */
.tkv-takvim > div::before{
  content:''; position:absolute; left:8px; top:50%; margin-top:-5px;
  width:10px; height:10px; border-radius:50%; z-index:1;
  background:var(--surface); border:2.5px solid var(--ink-3);
}
.tkv-takvim .gecti::before{ background:var(--ink-3); border-color:var(--ink-3) }
.tkv-takvim .sirada{ background:var(--tkv-yesil-w2) }
.tkv-takvim .sirada::before{ background:var(--tkv-yesil); border-color:var(--tkv-yesil) }
.tkv-takvim dt{ font-size:13.5px; font-weight:700; line-height:1.4; color:var(--ink-2); min-width:0 }
.tkv-takvim dd{ margin:0; font-size:13.5px; font-weight:800; line-height:1.4; color:var(--ink); white-space:nowrap; flex:0 0 auto }
.tkv-takvim dd time{ color:inherit; font:inherit }
.tkv-takvim dd.bos{ font-size:12px; font-weight:700; color:var(--ink-3) }
.tkv-takvim .gecti dt{ color:var(--ink-3) }
.tkv-takvim .gecti dd{ color:var(--ink-3); font-weight:700 }
.tkv-takvim .sirada dt{ color:var(--tkv-yesil-k) }
.tkv-takvim .sirada dd{ color:var(--tkv-yesil-k) }

/* --- KART İÇİ GEÇMİŞ DÖNEMLER (♻️ 2. tur — kullanıcı: "geçmiş
   dönemler kendi sınav bloklarında olsun"). Kartın tam genişliğinde,
   kapalı <details>; sonuç bekleyen dönem rozetle vurgulu — sonuç
   açıklanana kadar bu hâlâ aktif takip edilen bilgi. */
.tkv-donem-gecmis{
  grid-column:1 / -1;
  margin:2px calc(-1 * clamp(16px,2.6vw,26px)) calc(-1 * clamp(14px,2.2vw,18px));
  border-top:1px solid var(--line-2);
  background:linear-gradient(180deg, transparent, rgb(23 43 76 / .022));
}
.tkv-donem-gecmis summary{
  list-style:none; cursor:pointer;
  display:flex; flex-wrap:wrap; align-items:center; gap:8px;
  padding:11px clamp(16px,2.6vw,26px);
  font-size:13.5px; font-weight:800; color:var(--ink-2);
}
.tkv-donem-gecmis summary::-webkit-details-marker{ display:none }
.tkv-donem-gecmis summary .icon{
  width:15px; height:15px; color:var(--ink-3);
  transition:transform .18s ease;
}
.tkv-donem-gecmis[open] summary .icon{ transform:rotate(180deg) }
@media (prefers-reduced-motion:reduce){
  .tkv-donem-gecmis summary .icon{ transition:none }
}
.tkv-donem-gecmis summary:hover{ color:var(--ink) }
.tkv-gecmis-liste{
  list-style:none; margin:0; padding:2px clamp(16px,2.6vw,26px) 14px;
  display:grid; gap:8px;
}
.tkv-gecmis-liste li{
  display:block;
  padding-top:8px; border-top:1px solid var(--line-2);
  font-size:13.5px; line-height:1.6; color:var(--ink-3);
}
.tkv-gecmis-liste b{ color:var(--ink-2); font-weight:800 }
.tkv-gecmis-liste a{ color:var(--tkv-yesil-k); font-weight:800 }
.tkv-gecmis-liste a:hover{ text-decoration:underline }

/* "Sonuç bekleniyor" rozeti — geçmiş ama hâlâ takip edilen dönem. */
.tkv-bekle{
  display:inline-flex; align-items:center; gap:5px;
  margin-left:4px; padding:2px 9px; border-radius:999px;
  background:var(--tkv-amber-w); color:var(--tkv-amber);
  font-size:11.5px; font-weight:800; font-style:normal; white-space:nowrap;
}
.tkv-bekle::before{
  content:''; width:6px; height:6px; border-radius:50%;
  background:var(--tkv-amber);
}
/* Özetteki bekleyen sayısı da aynı dilde. */
.tkv-donem-gecmis summary .tkv-bekle{ margin-left:0 }


/* ==================================================================
   4. CTA ŞERİDİ — "Sınavına Nettekurs'la hazırlan"
   Koyu lacivert panel + marka ışığı; kurs detay hero dili.
   ================================================================== */
.tkv-cta{
  position:relative; overflow:hidden;
  margin-top:clamp(26px,4vw,44px);
  padding:clamp(24px,3.6vw,40px) clamp(20px,3.4vw,44px);
  border-radius:var(--r-x);
  background:linear-gradient(135deg, var(--navy-d), var(--navy-t));
  box-shadow:var(--sh-2);
  display:grid; gap:18px 32px;
  grid-template-columns:minmax(0,1fr) auto;
  align-items:center;
}
.tkv-cta::before{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(60% 90% at 10% 0%,  rgb(47 107 208 / .35), transparent 60%),
    radial-gradient(50% 80% at 95% 100%, rgb(74 222 128 / .10), transparent 62%);
}
@media (max-width:759px){ .tkv-cta{ grid-template-columns:minmax(0,1fr) } }
.tkv-cta-metin{ position:relative; min-width:0 }
.tkv-cta-metin h2{ color:#fff; font-size:clamp(1.25rem,2.4vw,1.6rem); margin:0 0 8px }
.tkv-cta-metin p{ color:#C7D4E6; font-size:15.5px; line-height:1.65; margin:0 }
.tkv-cta-metin p b{ color:#fff }
.tkv-cta-dugme{
  position:relative; display:flex; flex-wrap:wrap; gap:12px; align-items:center;
}


/* --- ARA DÖNÜŞÜM ŞERİDİ (♻️ 5. tur — patron yönergesi 4. madde):
   dipteki büyük .tkv-cta'nın kompakt kardeşi — aynı lacivert dil.
   ♻️ 10. tur (kullanıcı): konum ARAMANIN ÜSTÜ — başlığın hemen altında,
   süzgeçten tamamen bağımsız. Üst boşluk sec-head'den geliyor; altına
   kendi boşluğunu veriyor. */
.tkv-orta{
  position:relative; overflow:hidden;
  margin:0 0 clamp(16px,2.4vw,24px);
  display:flex; flex-wrap:wrap; align-items:center; gap:12px 24px;
  padding:clamp(16px,2.4vw,22px) clamp(16px,2.6vw,26px);
  border-radius:var(--r-l);
  background:linear-gradient(135deg, var(--navy-d), var(--navy-t));
  box-shadow:var(--sh-2);
  color:#C7D4E6;
}
.tkv-orta::before{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(55% 95% at 8% 0%,  rgb(47 107 208 / .32), transparent 60%),
    radial-gradient(45% 85% at 95% 100%, rgb(74 222 128 / .10), transparent 62%);
}
.tkv-orta-metin{ position:relative; flex:1 1 22rem; min-width:0 }
.tkv-orta-metin b{
  display:block; color:#fff; font-size:1.02rem; font-weight:800;
  letter-spacing:-.01em; margin-bottom:3px;
}
.tkv-orta-metin span{ font-size:.85rem; line-height:1.55 }
.tkv-orta .btn{ position:relative; flex:none }
/* Dar ekranda düğme tam satır; min-width:0 + sarma izni birlikte
   (uzun etiketli düğme taşması — puan.css §7'deki tuzağın aynısı). */
@media (max-width:479px){
  .tkv-orta .btn{ flex:1 1 100%; justify-content:center; min-width:0; white-space:normal; text-align:center }
}


/* ==================================================================
   5. DİĞER GEÇMİŞ DÖNEMLER — yalnız takvimde GELECEK KARTI OLMAYAN
   sınavların geçmişi (♻️ 2. tur: geçmişin asıl yeri artık kartın içi).
   ================================================================== */
.tkv-gecmis{
  margin-top:clamp(22px,3.4vw,36px);
  background:var(--surface);
  border:1px solid var(--line-2); border-radius:var(--r-l);
}
.tkv-gecmis summary{
  list-style:none; cursor:pointer;
  display:flex; align-items:center; gap:10px;
  padding:16px 20px;
  font-size:15.5px; font-weight:800; color:var(--ink-2);
}
.tkv-gecmis summary::-webkit-details-marker{ display:none }
.tkv-gecmis summary .icon{
  width:16px; height:16px; color:var(--ink-3);
  transition:transform .18s ease;
}
.tkv-gecmis[open] summary .icon{ transform:rotate(180deg) }
@media (prefers-reduced-motion:reduce){
  .tkv-gecmis summary .icon{ transition:none }
}
.tkv-gecmis > .tkv-gecmis-liste{ padding:4px 20px 16px }


/* ==================================================================
   6. KAYNAK DİPNOTU
   ================================================================== */
.tkv-kaynak{
  margin:clamp(20px,3vw,32px) auto 0;
  max-width:760px; text-align:center;
  font-size:13.5px; line-height:1.7; color:var(--ink-3);
}
.tkv-kaynak a{ color:var(--brand-d); font-weight:800 }
.tkv-kaynak a:hover{ text-decoration:underline }


/* ==================================================================
   7. SINAVA ÖZEL TAKVİM SAYFALARI                        2026-09-06
   ==================================================================
   /tus-sinav-tarihleri gibi tek sınav sayfalarında beliren üç blok.
   Ebeveyn /osym-sinav-tarihleri bu kuralların hiçbirini KULLANMAZ
   (markup basılmıyor) — tek istisna .tkv-hub, ebeveyndeki "sınava
   göre takvimler" ızgarası .tkv-capraz'ı yeniden kullanıyor.
   Plan: memory-bank/sinav-takvimi-varyasyonlari-plan.md §6
   Kullanıcı kuralı: *"Tasarım aynı kalır."* — yeni renk/ölçü imzası
   YOK; hepsi mevcut belirteçlerden (surface/line-2/r-l/tkv-yesil).
   ================================================================== */

/* ── 7.1 BİR BAKIŞTA künyesi ────────────────────────────────────────
   Cevap bloğunun hemen altında; sayfanın "başka hiçbir yerde olmayan
   veri" iddiasını taşıyan blok.
   §K: sütunlar açıkça tanımlı + min-width:0 (min-content tuzağı). */
.tkv-kunye{
  margin:0 0 clamp(18px,2.6vw,28px);
  padding:clamp(14px,2.2vw,20px) clamp(16px,2.6vw,22px);
  background:var(--surface);
  border:1px solid var(--line-2); border-radius:var(--r-l);
  box-shadow:var(--sh-1);
}
.tkv-kunye-bas{
  margin:0 0 12px;
  font-size:12.5px; font-weight:800; letter-spacing:.08em;
  text-transform:uppercase; color:var(--tkv-yesil);
}
.tkv-kunye dl{
  margin:0; display:grid; gap:12px 18px;
  grid-template-columns:repeat(auto-fit, minmax(150px, 1fr));
}
.tkv-kunye dl > div{
  min-width:0;
  padding:10px 14px;
  background:var(--tkv-yesil-w2); border-radius:var(--r-m, 12px);
}
.tkv-kunye dt{
  margin:0 0 2px;
  font-size:clamp(19px,2.4vw,23px); font-weight:900; line-height:1.2;
  color:var(--ink);
}
.tkv-kunye dd{
  margin:0; font-size:13.5px; line-height:1.5; color:var(--ink-3);
}
.tkv-kunye-not{
  margin:12px 0 0; padding-top:10px;
  border-top:1px solid var(--line-2);
  font-size:13.5px; line-height:1.6; color:var(--ink-3);
}

/* ── 7.2 Takvimde nelere dikkat etmeli ──────────────────────────────
   Sınava özel operasyonel notlar. `.sec-head` mirası; yalnız üst
   boşluğu bu sayfada büyütülüyor (kartlardan sonra nefes). */
.tkv-notlar-bas{ margin-top:clamp(26px,4vw,42px) }
.tkv-notlar{
  margin:0 0 clamp(18px,2.6vw,28px); padding:0; list-style:none;
  display:grid; gap:10px;
}
.tkv-notlar li{
  padding:14px 18px;
  background:var(--surface);
  border:1px solid var(--line-2); border-left:4px solid var(--tkv-yesil);
  border-radius:var(--r-l);
}
.tkv-notlar b{
  display:block; margin-bottom:4px;
  font-size:15.5px; font-weight:800; line-height:1.45; color:var(--ink);
}
.tkv-notlar span{
  display:block; font-size:14.5px; line-height:1.7; color:var(--ink-2);
}

/* ── 7.3 Çapraz köprüler + ebeveyn hub ızgarası ─────────────────────
   Sınav sayfasında "aynı sınavın diğer sayfaları", ebeveynde "sınava
   göre takvimler". Aynı görsel dil, tek kural takımı. */
.tkv-capraz{
  margin:0 0 clamp(18px,2.6vw,28px); padding:0; list-style:none;
  display:grid; gap:10px;
  grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));
}
.tkv-capraz li{ min-width:0 }
.tkv-capraz a{
  display:block; height:100%;
  padding:14px 18px;
  background:var(--surface);
  border:1px solid var(--line-2); border-radius:var(--r-l);
  text-decoration:none;
  transition:border-color .18s ease, box-shadow .18s ease, transform .18s ease;
}
.tkv-capraz a:hover{
  border-color:var(--tkv-yesil);
  box-shadow:var(--sh-1);
  transform:translateY(-1px);
}
.tkv-capraz b{
  display:block; margin-bottom:3px;
  font-size:15.5px; font-weight:800; line-height:1.4; color:var(--brand-d);
}
.tkv-capraz span{
  display:block; font-size:13.5px; line-height:1.6; color:var(--ink-3);
}
@media (prefers-reduced-motion:reduce){
  .tkv-capraz a{ transition:none }
  .tkv-capraz a:hover{ transform:none }
}

/* Ebeveyndeki hub ızgarası `auto-fill`: sınavlar tek tek yayına
   alındığı için başlangıçta 1-2 kart olacak. `auto-fit` boş izleri
   çökertip tek kartı tam genişliğe yayardı (bir link kartı için
   garip); `auto-fill` izleri koruyor, kartlar soldan diziliyor. */
.tkv-hub{ grid-template-columns:repeat(auto-fill, minmax(240px, 1fr)) }
