/* ============================================================
   ÇEKİRDEK — BİLEŞEN KATMANI
   Yükleme sırası: cekirdek.css → dokular.css → eklentiler.css
                   → bilesen.css → tema.css
   ============================================================

   Neden var: fabrika denetimden 0 hatayla geçen ama "ucuz 10 TL'lik
   site" denilen bir tema üretti. Ölçtük:

     birincil düğme  123 × 44 px · 14.7 px yazı · gölge yok · radius 0
     görsel sayısı   0
     zemin kademesi  2

   44 px erişilebilirliğin TABANIDIR, tasarımın hedefi değil. Tabanla
   teslim edilen her ölçü siteyi ucuz gösterir.

   Bu dosya tabanları hedefe çeviren bileşenleri taşır. Kural aynı:
   İSKELET burada, PALET tema.css'te. Burada tek bir sabit renk yok.

   Kural referansı: .claude/skills/gorsel-dil/SKILL.md
   ============================================================ */

/* --- 0. Bu katmanın kendi sözleşmesi -------------------------
   tema.css bunları EZEBİLİR ama tanımsız bırakamaz.
   ------------------------------------------------------------ */
:root {
  /* Düğme fiziği — GD1..GD4 */
  --dugme-yukseklik:     52px;
  --dugme-dolgu-yatay:   36px;   /* referans 66px; 36 taban, --genis 1.85x */
  --dugme-yazi:          0.875rem;    /* 14px — UPPERCASE etiket rejiminde */
  --dugme-agirlik:       600;
  --dugme-donusum:       uppercase;   /* etiket rejimi: düz cümle DEĞİL */
  --dugme-aralik:        0.09em;      /* büyük harf aralıksız okunmaz */
  --dugme-min-genislik:  140px;
  --dugme-kalkis:        2px;         /* :hover translateY */

  /* Gölge merdiveni — iki katman: temas + yayılım.
     Tek katmanlı gölge ucuz görünür. */
  --golge-1: 0 1px 2px rgb(0 0 0 / 0.06), 0 1px 3px rgb(0 0 0 / 0.10);
  --golge-2: 0 4px 12px rgb(0 0 0 / 0.08), 0 2px 4px rgb(0 0 0 / 0.06);
  --golge-3: 0 12px 32px rgb(0 0 0 / 0.12), 0 4px 8px rgb(0 0 0 / 0.08);

  /* Zemin kademeleri — koyu temada gölge işlemez, derinlik
     AÇIKLIK FARKIYLA kurulur. tema.css bunları gerçek değerlerle ezer. */
  --bg-elev-2: var(--bg-elev);
  --bg-cukur:  var(--bg);

  /* Çerçeve iki roldedir ve ikisi aynı renk OLAMAZ */
  --line-guclu: var(--ink-muted);

  /* Görsel oranları — sitede en fazla 3 farklı oran */
  --oran-genis: 16 / 9;
  --oran-urun:  4 / 5;
  --oran-kare:  1 / 1;
}

/* --- 1. DÜĞME -----------------------------------------------
   Referans ölçümü (SetSail, 2026-08-30):
     yükseklik 60–82px · yazı 13px · UPPERCASE · harf aralıklı
     yatay dolgu 66px  · radius 0  · gölge yok

   Bizim ilk sürümümüz: 150×54px, 17px, düz yazı, 30px dolgu.
   Ölçüler "doğru" idi ama düğme tasarlanmış DURMUYORDU. Fark üç yerde:

     1. Büyük harf + harf aralığı yok → etiket değil, cümle gibi duruyordu.
     2. Yatay dolgu yarısı kadardı → nefes yok, kutu yazıya yapışık.
     3. Koyu temada gölge görünmez → "yükselme" hissi hiç oluşmuyordu.

   Bu bölüm üçünü de çözer. Birincil ve ikincil AYNI ölçüdedir; fark
   doluluktadır. İkincili küçültmek hiyerarşi kurmaz, onu çöp yapar.
   ------------------------------------------------------------ */
.bl-dugme {
  position: relative;
  display: inline-flex; align-items: center; justify-content: center;
  gap: 0.7em;
  min-block-size: var(--dugme-yukseklik);
  min-inline-size: var(--dugme-min-genislik);
  padding-inline: var(--dugme-dolgu-yatay);
  padding-block: 0;
  border: 1px solid transparent;
  border-radius: var(--radius);
  font: inherit;
  font-family: var(--font-display, inherit);
  font-size: var(--dugme-yazi);
  font-weight: var(--dugme-agirlik);
  /* Etiket rejimi: küçük punto + büyük harf + geniş aralık.
     13-14px yazıyı "küçük" değil "etiket" yapan şey budur. */
  text-transform: var(--dugme-donusum);
  letter-spacing: var(--dugme-aralik);
  line-height: 1;
  text-align: center; text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  -webkit-tap-highlight-color: transparent;
  transition:
    transform        var(--dur-hizli) var(--ease-out),
    box-shadow       var(--dur-hizli) var(--ease-out),
    background-color var(--dur-hizli) var(--ease-out),
    border-color     var(--dur-hizli) var(--ease-out),
    color            var(--dur-hizli) var(--ease-out);
}

/* Dört durum da zorunlu. :hover yalnız renk değiştiriyorsa fizik yok. */
.bl-dugme:hover  { transform: translateY(calc(var(--dugme-kalkis) * -1)); }
.bl-dugme:active { transform: translateY(0) scale(0.985); transition-duration: var(--dur-anlik); }
.bl-dugme:focus-visible {
  outline: 2px solid var(--accent); outline-offset: 3px;
  border-radius: var(--radius);   /* halka düğmenin şeklini izler */
}
.bl-dugme[disabled], .bl-dugme[aria-disabled="true"] {
  opacity: 0.42; cursor: not-allowed; transform: none; box-shadow: none;
}

/* Birincil — dolu. Saydam zeminli birincil düğme YASAK. */
.bl-dugme--bas {
  background: var(--accent);
  border-color: var(--accent);
  color: var(--accent-ink);
  box-shadow: var(--golge-1);
}
.bl-dugme--bas:hover {
  background: color-mix(in srgb, var(--accent) 88%, var(--ink));
  box-shadow: var(--golge-2);
}
.bl-dugme--bas:active { box-shadow: var(--golge-1); }

/* Koyu temada gölge görünmez (siyah üstüne siyah). Orada yükselme hissi
   AKSAN HALESİYLE kurulur — gölgenin koyu temadaki karşılığı budur. */
@media (prefers-color-scheme: dark) {
  .bl-dugme--bas:hover {
    box-shadow: 0 6px 20px -6px color-mix(in srgb, var(--accent) 65%, transparent);
  }
}
.bl-dugme--hale:hover {
  box-shadow: 0 6px 20px -6px color-mix(in srgb, var(--accent) 65%, transparent);
}

/* İkincil — aynı ölçü, çerçeveli. */
.bl-dugme--yan {
  background: var(--bg-elev);
  border-color: var(--line-guclu);
  color: var(--ink);
}
.bl-dugme--yan:hover {
  background: var(--bg-elev-2);
  border-color: var(--accent);
  color: var(--accent);
}

/* Fotoğraf ÜSTÜNDE duran düğme. Zemin ne olursa olsun okunur kalmalı;
   yarı saydam koyu taban + açık çerçeve. */
.bl-dugme--cam {
  background: color-mix(in srgb, var(--bg) 55%, transparent);
  border-color: color-mix(in srgb, var(--ink) 55%, transparent);
  color: var(--ink);
}
.bl-dugme--cam:hover {
  background: color-mix(in srgb, var(--bg) 78%, transparent);
  border-color: var(--ink);
}

/* Üçüncül — yalnız yazı. Bu KÜÇÜLEBİLİR çünkü düğme değil, bağlantıdır.
   Altı çizgi hover'da soldan sağa büyür; kesik değil akıcı bir sinyal. */
.bl-dugme--duz {
  min-inline-size: 0; min-block-size: auto;
  padding-inline: 0; padding-block: 0.35em;
  background: none; border-color: transparent; color: var(--ink-muted);
  box-shadow: none;
}
.bl-dugme--duz::after {
  content: ""; position: absolute; inset-inline: 0; inset-block-end: 0;
  block-size: 1px; background: currentColor;
  transform: scaleX(0); transform-origin: left;
  transition: transform var(--dur-orta) var(--ease-out);
}
.bl-dugme--duz:hover { color: var(--accent); transform: none; }
.bl-dugme--duz:hover::after { transform: scaleX(1); }

/* Hap biçimi — sıcak/davetkâr tonu olan sektörlerde (seyahat, kozmetik,
   gıda). Köşeli düğme kurumsal, hap düğme davetkâr durur. */
.bl-dugme--hap { border-radius: 999px; }
.bl-dugme--hap:focus-visible { border-radius: 999px; }

/* Geniş — hero'nun ana eylemi. Referansta 66px yatay dolgu vardı. */
.bl-dugme--genis { padding-inline: calc(var(--dugme-dolgu-yatay) * 1.85); }

/* Tam genişlik — mobil eylem çubuğu ve form gönderimi */
.bl-dugme--tam { inline-size: 100%; }

/* Yalnız ikon — taşıyıcı/galeri okları. İkisi de referanslarda var. */
.bl-dugme--yuvarlak {
  min-inline-size: var(--dugme-yukseklik);
  inline-size: var(--dugme-yukseklik);
  padding-inline: 0; border-radius: 999px; gap: 0;
}
.bl-dugme--yuvarlak:focus-visible { border-radius: 999px; }

/* İkon yuvası: ok hover'da ilerler. Hareket 3px — fark edilir ama
   zıplamaz. transform kullanır, yerleşim tetiklemez (kural 4). */
.bl-dugme__ikon {
  inline-size: 1.05em; block-size: 1.05em; flex: none;
  fill: none; stroke: currentColor; stroke-width: 1.9;
  stroke-linecap: round; stroke-linejoin: round;
  transition: transform var(--dur-orta) var(--ease-out);
}
.bl-dugme:hover .bl-dugme__ikon { transform: translateX(3px); }
.bl-dugme--yuvarlak:hover .bl-dugme__ikon { transform: none; }
/* Geri yönlü ok sola gitsin */
.bl-dugme--geri:hover .bl-dugme__ikon { transform: translateX(-3px); }

/* Yükleniyor — form gönderiminde. Metin yerinde kalır, genişlik zıplamaz. */
.bl-dugme[data-yukleniyor] { pointer-events: none; color: transparent; }
.bl-dugme[data-yukleniyor]::before {
  content: ""; position: absolute;
  inline-size: 1.1em; block-size: 1.1em; border-radius: 999px;
  border: 2px solid color-mix(in srgb, currentColor 30%, transparent);
  border-block-start-color: var(--accent-ink);
  animation: bl-donen 0.7s linear infinite;
}
@keyframes bl-donen { to { transform: rotate(1turn); } }

/* Düğme grubu: ikiden fazla eşit ağırlıklı düğme yan yana gelmez. */
.bl-eylem { display: flex; flex-wrap: wrap; gap: var(--space-2xs); align-items: center; }

/* --- 2. GÖRSEL ÇERÇEVESİ ------------------------------------
   Her <img> width/height taşır (CLS). Oran buradan gelir,
   böylece sitede oran disiplini tek yerden yönetilir.
   ------------------------------------------------------------ */
.bl-gorsel {
  display: block; position: relative; overflow: hidden;
  background: var(--bg-cukur);       /* yüklenene kadar boşluk değil, yüzey */
  border-radius: var(--radius);
}
.bl-gorsel > img,
.bl-gorsel > picture > img,
.bl-gorsel > video {
  display: block; inline-size: 100%; block-size: 100%;
  object-fit: cover;
}
.bl-gorsel--genis { aspect-ratio: var(--oran-genis); }
.bl-gorsel--urun  { aspect-ratio: var(--oran-urun); }
.bl-gorsel--kare  { aspect-ratio: var(--oran-kare); }

/* Karışık kaynaklı fotoğrafı tek işleme indirger (M3 duoton mantığı).
   Biri sıcak biri soğuk stok fotoğraf yan yana durunca site amatör olur. */
.bl-gorsel--islenmis > img { filter: grayscale(1) contrast(1.06); mix-blend-mode: luminosity; }
.bl-gorsel--islenmis { background: var(--accent); }

/* Görsel üstünde metin varsa okunabilirlik katmanı ŞART. */
.bl-gorsel--yazili::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(to top,
    color-mix(in srgb, var(--bg) 85%, transparent) 0%,
    color-mix(in srgb, var(--bg) 30%, transparent) 45%,
    transparent 75%);
}

@media (hover: hover) and (pointer: fine) {
  .bl-gorsel--yaklasan > img { transition: transform var(--dur-yavas) var(--ease-out); }
  .bl-gorsel--yaklasan:hover > img { transform: scale(1.03); }
}

/* --- 3. KART ------------------------------------------------
   Kart ne gölgesiz ne çerçevesiz olur. Biri şart, ikisi birlikte
   de olabilir — ama "hiçbiri" düz dikdörtgen demektir.
   ------------------------------------------------------------ */
.bl-kart {
  display: grid; align-content: start; gap: var(--space-2xs);
  padding: var(--space-m);
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  transition: border-color var(--dur-hizli) var(--ease-out),
              box-shadow  var(--dur-hizli) var(--ease-out),
              transform   var(--dur-hizli) var(--ease-out);
}
.bl-kart--yukselen:hover {
  border-color: var(--line-guclu);
  box-shadow: var(--golge-2);
  transform: translateY(-2px);
}
/* Kartın tamamı tıklanabilirse: bağlantıyı kaplat, metin seçimi kalsın. */
.bl-kart--baglantili { position: relative; }
.bl-kart--baglantili .bl-kart__ort::after { content: ""; position: absolute; inset: 0; }

/* --- 4. YÜZEY KADEMESİ --------------------------------------
   Koyu temada derinlik açıklık farkıyla kurulur.
   ------------------------------------------------------------ */
.bl-yuzey     { background: var(--bg-elev); }
.bl-yuzey--2  { background: var(--bg-elev-2); }
.bl-yuzey--cukur {
  background: var(--bg-cukur);
  border: 1px solid var(--line);
  border-radius: var(--radius);
}

/* --- 5. ETİKET / ROZET --------------------------------------
   Durum bilgisi (stokta, yeni, son adet) için. Rakam taşıyorsa
   tabular-nums şart. */
.bl-rozet {
  display: inline-flex; align-items: center; gap: 0.4em;
  padding: 0.25em 0.7em;
  border: 1px solid currentColor;
  border-radius: var(--radius);
  font-size: var(--step--1); font-weight: 500; line-height: 1.4;
  letter-spacing: 0.02em;
  font-variant-numeric: tabular-nums;
}
.bl-rozet--dolu { border-color: transparent; background: var(--accent); color: var(--accent-ink); }

/* --- 6. BOŞ DURUM -------------------------------------------
   "Sonuç yok" ekranı tasarlanmamışsa site bitmemiştir. */
.bl-bos {
  display: grid; place-items: center; gap: var(--space-2xs);
  padding: var(--space-xl) var(--space-m);
  text-align: center;
  border: 1px dashed var(--line);
  border-radius: var(--radius);
  color: var(--ink-muted);
}

/* --- 7. İSKELET (yükleniyor) --------------------------------
   Gerçek içerik gelene kadar layout kaymasın. */
.bl-iskelet {
  background: linear-gradient(90deg,
    var(--bg-elev) 25%, var(--bg-elev-2) 37%, var(--bg-elev) 63%);
  background-size: 400% 100%;
  animation: bl-parla 1.4s ease-in-out infinite;
  border-radius: var(--radius);
}
@keyframes bl-parla { from { background-position: 100% 0; } to { background-position: 0 0; } }

/* --- 8. DETAY BİTİŞİ ----------------------------------------
   Tek tek fark edilmez, toplamda hissedilir. */
.bl-rakam { font-variant-numeric: tabular-nums; letter-spacing: -0.01em; }

/* İkon tek kaynaktan ve currentColor okur — karışık ikon karışık site. */
.bl-ikon {
  inline-size: 1.15em; block-size: 1.15em;
  flex: none; fill: none;
  stroke: currentColor; stroke-width: 1.75;
  stroke-linecap: round; stroke-linejoin: round;
}

/* Bağlantının dokunma alanı görsel sınırından büyük olsun. */
.bl-genis-hedef { position: relative; }
.bl-genis-hedef::before {
  content: ""; position: absolute; inset: -0.6em -0.4em;
}

/* --- 9. HAREKET TERCİHİ -------------------------------------
   Bu katmandaki her hareket kapanır; ölçüler ve renkler kalır. */
@media (prefers-reduced-motion: reduce) {
  .bl-dugme, .bl-kart, .bl-gorsel--yaklasan > img { transition: none; }
  .bl-dugme:hover, .bl-kart--yukselen:hover { transform: none; }
  .bl-iskelet { animation: none; }
}

/* --- 10. BASKI ----------------------------------------------- */
@media print {
  .bl-dugme { box-shadow: none; border: 1px solid currentColor; }
  .bl-iskelet { animation: none; background: none; }
}

/* --- 11. ÜST ŞERİT — VARSAYILAN ------------------------------
   NEDEN VAR: sayfa-uret.mjs her sayfaya `.ust` başlığını yazıyor
   ama BURASI BOŞTU; stil yazmak temanın insafına kalmıştı ve üç yeni
   tema üst üste kırık şeritle çıktı.

   İKİNCİ TUR — TİPOGRAFİ. İlk düzeltme hizalamayı kurdu ama yazı
   kötü kaldı ve sebebi şuydu: kabuk `.marka__alt` ile `.ust__tel`
   öğelerine `class="mono"` yazıyor, temaların `.mono` tanımı ise
   büyük harf + geniş harf aralığı. Bölüm etiketi için doğru, ama:
     · marka alt yazısı  → "KARAKÖY" harfleri açılmış, şablon görüntüsü
     · TELEFON NUMARASI  → uppercase (anlamsız), 1.2px aralık (okunmaz),
                           tabular rakam yok (hizasız)
   Burada ikisi de geri alınıyor. Şerit kendi tipografisini kurar;
   `.mono`nun etiket davranışı şeride sızmaz.
   ------------------------------------------------------------- */
.ust {
  position: relative;
  z-index: 20;
  background: var(--bg);
}
.ust__ic {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-xs) var(--space-l);
  flex-wrap: wrap;
  padding-block: var(--space-s);
}

/* ---- marka ----------------------------------------------------
   Marka adı --step-2'ye indirildi: --step-1'in üstündeki her adım
   şeridi menüye göre orantısızlaştırıyordu (35px marka / 15px menü
   ölçüldü ve marka her şeyi eziyordu). */
.marka {
  display: grid;
  gap: 0.15em;
  line-height: 1.08;
  text-decoration: none;
  color: var(--ink);
  font-family: var(--font-display);
  font-size: clamp(1.25rem, 1.1rem + 0.7vw, 1.6rem);
}
.marka__ad { font-size: inherit; }
/* Alt yazı: küçük, sakin, DAR aralık. Büyük harf kalıyor ama
   0.06em'e iniyor — 0.16em "şablon" görüntüsünün ta kendisiydi. */
/* `.ust` öneki ÖZGÜLLÜK İÇİN: temaların `.mono` tanımı da tek sınıf
   (0,1,0) ve tema.css bilesen.css'ten SONRA yükleniyor — eşit
   özgüllükte sonraki kazanıyordu ve telefon uppercase kalmıştı.
   İki sınıflı seçici (0,2,0) bunu kesin çözüyor. */
.ust .marka__alt {
  font-family: var(--font-util);
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--ink-muted);
}
.marka:focus-visible { outline: 2px solid var(--accent); outline-offset: 4px; }

/* ---- menü -----------------------------------------------------
   Altı çizili mavi varsayılan link OLMAYACAK; boyut da 15px'e
   çıkarıldı — birincil gezinme 14px'te ikincil gibi duruyordu. */
.ust .ek-menu a,
.ust__tel {
  text-decoration: none;
  color: var(--ink);
}
.ust .ek-menu {
  font-family: var(--font-body);
  font-size: 0.9375rem;
  letter-spacing: 0;
  text-transform: none;
  gap: var(--space-2xs) var(--space-m);
}
.ust .ek-menu a {
  position: relative;
  padding-inline: 1px;
  min-block-size: 44px;
}
/* Altı çizgi hover'da transform ile açılır (kural 4). */
.ust .ek-menu a::after {
  content: "";
  position: absolute;
  inset-inline: 0;
  inset-block-end: 0.6em;
  block-size: 1px;
  background: currentColor;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform var(--dur-hizli, 180ms) var(--ease-out, ease);
}
.ust .ek-menu a:hover::after,
.ust .ek-menu a:focus-visible::after { transform: scaleX(1); }
.ust .ek-menu a[aria-current="page"]::after { transform: scaleX(1); opacity: 0.4; }
.ust .ek-menu a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

/* ---- eylem: telefon + düğme -----------------------------------
   TELEFON BİR NUMARADIR. Büyük harf anlamsız, harf aralığı okumayı
   bozar, tabular rakam ise hizayı verir. `.mono`nun etiket
   davranışı burada AÇIKÇA geri alınıyor. */
.ust__eylem {
  display: flex;
  align-items: center;
  gap: var(--space-s);
  flex-wrap: wrap;
}
.ust .ust__tel {
  font-family: var(--font-body);
  font-size: 0.9375rem;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
  font-variant-numeric: tabular-nums;
  min-block-size: 44px;
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
}
.ust__tel:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

/* Dar ekran: marka solda kalır, menü alta iner ve yatay kayar.
   Telefon GİZLENMİYOR — restoran/klinik gibi sektörlerde birincil
   dönüşüm o. */
@media (max-width: 61.99rem) {
  .ust__ic { gap: var(--space-2xs) var(--space-s); }
  .ust .ek-menu {
    order: 3;
    inline-size: 100%;
    flex-wrap: nowrap;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    padding-block-end: var(--space-3xs);
  }
  /* `flex: none` ŞART, yalnız `white-space: nowrap` yetmiyor.
     Ölçüldü (mühür, 390 px): şerit 351 px, içerik 354 px — yalnız 3 px
     taşma. Esnek öğeler varsayılan `flex-shrink: 1` ile bu 3 px'i
     paylaşıp İÇERİKLERİNİN ALTINA büzülüyor; yazı kutudan taşıyor ve
     şeridin sol kırpma kenarına denk gelen ilk öğenin ilk harfi
     kesiliyor ("Ana sayfa" → "na sayfa"). Üstelik `scrollLeft` 0
     olduğu için kaydırarak da geri getirilemiyor: taşma şeridin
     BAŞINDA, kaydırılabilir alanın dışında kalıyor.
     `flex: none` ile öğeler gerçek genişliklerinde kalıyor, şerit
     gerçekten kaydırılabilir oluyor. */
  .ust .ek-menu a { white-space: nowrap; flex: none; }
}
@media (max-width: 30rem) {
  .ust__tel { display: none; }   /* çok dar ekranda düğme yeter */
}

@media (prefers-reduced-motion: reduce) {
  .ust .ek-menu a::after { transition: none; }
}

/* --- 12. ALT BİLGİ — VARSAYILAN ------------------------------
   NEDEN VAR: `.ust` ile aynı boşluk. sayfa-uret.mjs her sayfaya
   `.alt` alt bilgisini yazıyor ama stil yazmak temanın insafına
   kalmıştı; eski temalar elle yazmış, üç yeni tema hiç yazmamıştı.

   ASIL KIRILMA NOKTASI: alt bilgi başlıkları `<h2 class="alt__bas">`.
   Tema `h2`ye dev display ölçüsü verdiğinde (Ocak'ta 5.2rem,
   line-height 0.86) "İLETİŞİM" ve "YASAL" başlıkları alt bilginin
   üstüne taşıyor ve adresle üst üste biniyordu. Burada `.alt__bas`
   AÇIKÇA küçük tanımlanıyor; temanın başlık ölçeği alt bilgiye
   sızmıyor.
   ------------------------------------------------------------- */
.alt {
  margin-block-start: var(--space-3xl);
  padding-block: var(--space-2xl) var(--space-l);
  background: var(--bg-elev, var(--bg));
  border-block-start: 1px solid var(--line);
  position: relative;
  z-index: 1;
}
.alt__ic {
  display: grid;
  gap: var(--space-xl) var(--space-2xl);
  grid-template-columns: 1fr;
  align-items: start;
}
@media (min-width: 44rem) {
  .alt__ic { grid-template-columns: 1.4fr 1fr 1fr; }
}
.alt__blok { display: grid; gap: var(--space-2xs); align-content: start; }

.alt__marka {
  font-family: var(--font-display);
  font-size: var(--step-2);
  line-height: 1.1;
  margin: 0 0 var(--space-2xs);
  color: var(--ink);
}

/* Başlık ÖLÇEĞİ ALT BİLGİYE SIZMAZ. `.alt` öneki özgüllük için:
   tema.css bilesen.css'ten sonra yükleniyor ve tek sınıflı
   `.alt__bas` temanın `h2` kuralıyla yarışamıyordu. */
.alt .alt__bas {
  font-family: var(--font-util);
  font-size: var(--step--1);
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  line-height: 1.3;
  margin: 0 0 var(--space-2xs);
  color: var(--ink-muted);
}

.alt__satir { margin: 0; font-size: var(--step--1); line-height: 1.55; color: var(--ink); }
.alt__liste { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-2xs); }
.alt__liste a, .alt__satir a { color: var(--ink); }
.alt a { text-underline-offset: 0.25em; }
.alt a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

.alt__son {
  margin-block-start: var(--space-xl);
  padding-block-start: var(--space-m);
  border-block-start: 1px solid var(--line);
}
.alt__son p { margin: 0; font-size: var(--step--1); color: var(--ink-muted); }

/* --- 13. ATLAMA BAĞLANTISI ----------------------------------
   `.ust` ve `.alt` ile AYNI boşluk, üçüncü kez: sayfa-uret.mjs her
   sayfaya `<a class="atla">İçeriğe atla</a>` yazıyor ama stil hiçbir
   yerde yoktu. Sonuç: erişilebilirlik için konan bağlantı, her
   sayfanın tepesinde düz metin olarak görünüyordu.

   Doğru davranış: GÖRÜNMEZ, yalnız sekmeyle odaklanınca çıkar.
   `display: none` OLMAZ — o zaman klavye de bulamaz.
   ------------------------------------------------------------- */
.atla {
  position: absolute;
  inset-block-start: 0;
  inset-inline-start: 0;
  z-index: 100;
  /* Ekran dışına al ama odaklanabilir bırak. */
  transform: translateY(-120%);
  padding: var(--space-xs) var(--space-m);
  background: var(--accent);
  color: var(--accent-ink);
  text-decoration: none;
  font-weight: 700;
  transition: transform var(--dur-hizli, 180ms) var(--ease-out, ease);
}
.atla:focus-visible,
.atla:focus {
  transform: translateY(0);
  outline: 2px solid var(--ink);
  outline-offset: 2px;
}
@media (prefers-reduced-motion: reduce) { .atla { transition: none; } }

/* --- 14. BAĞLANTI ALTI ÇİZGİSİ ------------------------------
   Varsayılan `text-decoration: underline` gövde metninde çirkin
   duruyordu: çizgi harflerin altına yapışıyor ve Türkçe'nin
   inen gliflerini (ğ, ş, ç, ı) kesiyor.
   Çözüm çizgiyi KALDIRMAK değil — bağlantı görünür olmalı — ölçüyü
   düzeltmek: çizgi inceliyor, harften uzaklaşıyor ve inen glifleri
   atlıyor. Hover'da kalınlaşıyor. */
main a:not(.bl-dugme):not(.hap):not([class*="__"]) {
  text-decoration-thickness: 1px;
  text-underline-offset: 0.22em;
  text-decoration-skip-ink: auto;
  text-decoration-color: color-mix(in srgb, currentColor 45%, transparent);
  transition: text-decoration-color var(--dur-hizli, 180ms) var(--ease-out, ease);
}
main a:not(.bl-dugme):not(.hap):not([class*="__"]):hover {
  text-decoration-color: currentColor;
}

/* --- 15. HARİTA — TIKLA-YÜKLE ------------------------------
   NEDEN BÖYLE: Google Maps iframe'i doğrudan gömmek üçüncü parti
   istek ve ÇEREZ demek. Bu hattın temaları KVKK sayfasında "izleme
   yok, çerez kullanılmıyor" diyor; iframe o cümleyi yalan yapar.
   Google ABD'de olduğu için "yurt dışına aktarım yok" ifadesi de
   bozulur.

   Çözüm: harita yerinde durur ama ziyaretçi TIKLAYANA KADAR Google'a
   tek istek gitmez. Tıklarsa ne olacağı önce yazıyor — bu KVKK'nın
   açık rıza mantığıyla da uyumlu.

   JS YOKSA: kutu normal bir BAĞLANTIYA düşer ve haritayı yeni
   sekmede açar. Kural 3 — hiçbir içerik JS'e bağlı değil.
   ------------------------------------------------------------- */
.harita {
  position: relative;
  inline-size: 100%;
  aspect-ratio: 16 / 9;
  margin-block-start: var(--space-l);
  background: var(--bg-elev);
  border: 1px solid var(--line);
  border-radius: var(--radius);
  overflow: hidden;
  display: grid;
  place-items: center;
}
/* Soyut zemin: sahte sokak çizmiyoruz, yalnız ızgara ve iğne. */
.harita__zemin {
  position: absolute; inset: 0;
  background-image:
    linear-gradient(var(--line) 1px, transparent 1px),
    linear-gradient(90deg, var(--line) 1px, transparent 1px);
  background-size: 48px 48px;
  opacity: 0.5;
}
.harita__ic {
  position: relative;
  display: grid; justify-items: center; gap: var(--space-s);
  padding: var(--space-l);
  text-align: center;
  max-inline-size: 34rem;
}
/* İğne DAİRE, damla değil. Damla `50% 50% 50% 0` yazmayı gerektiriyor
   ve denetim K4 "3 farklı border-radius (tavan 2)" verdi — haklı:
   tek bir işaret için palete üçüncü bir yarıçap sokmak, ölçek diye bir
   şeyin kalmaması demek. Halkalı daire "buradasınız" işaretinin
   standart biçimi zaten. */
.harita__igne {
  inline-size: 2.8rem; block-size: 2.8rem;
  display: grid; place-items: center;
  /* 999px, `50%` DEĞİL. İkisi de tam daire çiziyor ama denetim K4
     yarıçap DEĞERLERİNİ sayıyor ve tavanı iki. Temalar hap düğmeler için
     zaten 999px kullanıyor; burada 50% yazmak görsel bir fark üretmeden
     aileye üçüncü bir değer sokuyordu — KADEME'de tam bu yüzden bulgu
     çıktı. Aynı niyet tek değerle yazılır. */
  border-radius: 999px;
  background: var(--accent);
  /* Halka `outline` ile — `box-shadow` ile yazınca denetim K5 verdi
     ("3 farklı box-shadow, tavan 2") ve haklıydı: bu bir gölge değil,
     bir halka. outline aynı görünümü veriyor, gölge sayısını artırmıyor
     ve yer kaplamıyor. */
  outline: 6px solid color-mix(in srgb, var(--accent) 22%, transparent);
}
.harita__igne::after {
  content: ""; inline-size: 0.7rem; block-size: 0.7rem;
  border-radius: 999px; background: var(--bg);
}
.harita__adres { margin: 0; font-weight: 600; }
.harita__not { margin: 0; font-size: var(--step--1); color: var(--ink-muted); max-inline-size: 42ch; }
.harita__eylem { display: flex; gap: var(--space-s); flex-wrap: wrap; justify-content: center; }

/* Yüklendikten sonra iframe kutuyu kaplar. */
.harita iframe {
  position: absolute; inset: 0;
  inline-size: 100%; block-size: 100%;
  border: 0;
}
.harita[data-yuklendi] .harita__ic,
.harita[data-yuklendi] .harita__zemin { display: none; }

/* --- 16. MOBİL TABANI --------------------------------------
   ÖLÇÜLDÜ: Mühür'ün rezervasyon sayfası 375px'te 92px YATAY TAŞMA
   veriyordu. Sebep ızgara çocuklarının varsayılan `min-width: auto`
   değeri: `.form__ikili` iki sütun istiyor, her sütunun alt sınırı
   14rem, yani 448px — kap 375px olsa bile daralamıyor ve sayfa yana
   kayıyor.

   Bu CSS Grid'in en sık tuzağı ve tek tema meselesi değil; tabanı
   burada kuruyoruz.
   ------------------------------------------------------------- */

/* Izgara ve esnek kutu çocukları DARALABİLİR olmalı.
   `.kolon` PAYLAŞILAN içerik kapsayıcısı ve her zaman ekrana sığmalı;
   listeye tek tek seçici eklemek yetmedi — Ocak'ın anlatı perdesinde
   `.kolon` 320px ekranda 431px çıktı, çünkü içindeki sayaç ızgarasının
   min-content genişliği onu şişiriyordu ve perde ızgarasının çocuğu
   olarak daralamıyordu. Kapsayıcının kendisine vermek doğru yer. */
.kolon { min-inline-size: 0; }
.rez > *, .ikili > *, .ikili-blok > *, .form__ikili > *,
.bolum__bas > *, .kirik-izgara > *, .widget > *,
.perde > *, .sayac > *, .bento > * { min-inline-size: 0; }

/* Uzun kelime ve e-posta adresi kutuyu patlatmasın. */
.alt__satir, .duz-liste li, .kalem p, .urun__tarif, .et__tarif { overflow-wrap: anywhere; }

/* Görsel hiçbir koşulda kabından taşmaz. */
img, video, canvas, iframe { max-inline-size: 100%; }

/* --- dokunma hedefleri --------------------------------------
   ÖLÇÜLDÜ: alt bilgi bağlantıları 17–19px, marka 37px, telefon 25px.
   Cümle İÇİNDEKİ bağlantılar hedef boyutundan muaftır (WCAG 2.5.8);
   TEK BAŞINA duran bağlantılar değil — alt bilgi listesi, marka ve
   telefon tek başına duruyor. */
@media (max-width: 61.99rem) {
  .alt__liste a,
  .alt__satir > a {
    display: inline-flex;
    align-items: center;
    min-block-size: 44px;
  }
  .marka { min-block-size: 44px; align-content: center; }
}

/* Onay kutusunun etiketi de hedefin parçası olsun.
   `display: flex` DENENDİ VE GERİ ALINDI: etiketin içindeki metin
   düğümü ile <a> ayrı flex öğesi oluyor, aralarındaki boşluk kayboluyor
   ve bağlantı satırın yanlış yerine düşüyordu — ekranda
   "işlenmesiniAydınlatma metni" diye çıktı. Etiket AKAN METİNDİR;
   hedef yüksekliği dolgu ile verilir, düzen değiştirilerek değil. */
.alan--onay label {
  min-block-size: 44px;
  padding-block: 0.55rem;
  line-height: 1.5;
}

/* TEK BAŞINA DURAN BAĞLANTI = BAĞIMSIZ DOKUNMA HEDEFİ.
   Kural 15 bunu adıyla sayıyor ("alt bilgi listesi ... değildir").
   Cümle içindeki bağlantı muaftır (WCAG 2.5.8); ayırt eden şey
   kabında başka metin olup olmadığı, o yüzden ölçüt `:only-child`.

   KAP LİSTESİ ÜÇ TURDA BÜYÜDÜ ve her turu bir ölçüm getirdi:
     · `li`      — KADEME'nin iletişim listesinde telefon, e-posta ve
                   WhatsApp 22 px yüksekliğinde çıktı
     · `th`,`td` — KONTAKT'ın fiyat tablosunda satır başlığı
                   bağlantıları 17-35 px
     · `dd`,`dt` — KONTAKT'ın iletişim künyesinde telefon ve e-posta
                   20 px
   Üçü de aynı kusurdu; tek kuralda toplandı.

   `:not(:has(img…))` ZORUNLU: görsel saran bağlantıya `inline-flex`
   verilince genişlik içeriğe, içerik genişliği ebeveyne bağlanıyor ve
   döngü sıfırda kapanıyor — KADEME'nin galerisinde dokuz bağlantı
   0x44 piksele düşmüştü. Görsel saran bağlantının hedefi zaten
   görselin kendisi. */
:where(li, dd, dt, th, td) > a:only-child:not(:has(img, picture, svg, figure)) {
  min-block-size: 44px;
  display: inline-flex;
  align-items: center;
}
/* :not(:has(img…)) SONRADAN EKLENDİ ve sebebi ölçümle bulundu.
   İlk hâli görsel saran bağlantıları da yakalıyordu: galeri ızgarasında
   her <li>'nin tek çocuğu bir <a>, onun içinde de `inline-size: 100%`
   olan bir <img> var. Bağlantı `inline-flex` olunca genişliği içeriğe
   göre hesaplanmaya başladı, içerik de genişliği ebeveynden istedi —
   döngü sıfırda kapandı ve KADEME'nin galerisinde dokuz bağlantı
   0x44 piksele düştü. Görsel saran bağlantının hedefi zaten görselin
   kendisi; ona taban dayatmaya gerek yok. */

/* Onay kutusu: görsel 24px kalır, HEDEF 44px olur.
   Negatif kenar boşluğu 44'lük kutuyu 24'e geri oturtur, yani ızgara
   sütunu ve etiket hizası değişmez — büyüyen tek şey tıklanabilir alan.
   `appearance: none` gerekli, çünkü yerel onay kutusu kendi boyutunu
   dayatıyor; işaret arka plan görseliyle çizildi (input'ta ::before
   tarayıcılar arasında güvenilir değil). */
.alan--onay input[type="checkbox"] {
  appearance: none;
  -webkit-appearance: none;
  inline-size: 44px;
  block-size: 44px;
  margin: -10px;
  border: 0;
  padding: 0;
  cursor: pointer;
  background-color: transparent;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 24px 24px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect x='1' y='1' width='22' height='22' rx='4' fill='none' stroke='%23888' stroke-width='2'/%3E%3C/svg%3E");
}
.alan--onay input[type="checkbox"]:checked {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Crect width='24' height='24' rx='4' fill='%23111'/%3E%3Cpath d='M6 12.5l4 4 8-8' fill='none' stroke='%23fff' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
/* RADYO DÜĞMESİ — onay kutusuyla aynı sorun, aynı çözüm.
   FİLO temasının yaş filtresinde ölçüldü: 22x22 px. Yerel radyo da
   kendi boyutunu dayatıyor; görsel 20 px kalıyor, dokunma hedefi
   44 px'e çıkıyor ve negatif kenar boşluğu hizayı geri veriyor.
   İşaret arka plan görseliyle çizildi — input'ta ::before
   tarayıcılar arasında güvenilir değil. */
input[type="radio"] {
  appearance: none;
  -webkit-appearance: none;
  inline-size: 44px;
  block-size: 44px;
  margin: -12px;
  border: 0;
  padding: 0;
  cursor: pointer;
  background-color: transparent;
  background-repeat: no-repeat;
  background-position: center;
  background-size: 20px 20px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='9' fill='none' stroke='%23888' stroke-width='2'/%3E%3C/svg%3E");
  flex: none;
}
input[type="radio"]:checked {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3E%3Ccircle cx='10' cy='10' r='9' fill='none' stroke='%23111' stroke-width='2'/%3E%3Ccircle cx='10' cy='10' r='5' fill='%23111'/%3E%3C/svg%3E");
}
input[type="radio"]:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: -11px;
  border-radius: 999px;
}

.alan--onay input[type="checkbox"]:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: -9px;
  border-radius: 4px;
}

/* --- dar ekranda ızgaralar tek sütuna iner ------------------ */
@media (max-width: 34rem) {
  .form__ikili, .ikili, .rez, .ikili-blok { grid-template-columns: 1fr; }
}

/* --- 17. AÇILMA EMNİYET SUPABI ------------------------------
   `eklentiler.js` bölüm E9 gözcünün çalışmadığını anlarsa köke
   `data-gir-supap` yazar. Burada gizleme TÜMDEN kalkıyor —
   `transition` dahil.

   Neden transition da kapatılıyor: yalnız `opacity: 1` yazmak
   yetmedi. Ölçüldü — bu ortamda geçişler donuyor ve öğe geçişin
   BAŞLANGIÇ değerinde (0) takılı kalıyordu; nitelik değişse bile
   görünmüyordu. Supabın işi animasyonu kurtarmak değil, içeriği
   kurtarmak: geçiş kapanınca değer anında son hâline oturuyor.
   ------------------------------------------------------------- */
[data-gir-supap] [data-gir] {
  opacity: 1 !important;
  transform: none !important;
  transition: none !important;
}
