/* ===========================================================================
   Cesam Hidrolik — cesamhidrolik.com

   🔴 BÜTÜN RENKLER `:root`TAN. Tek tek kodlanmış renk yok. Sebep ölçülmüş
   bir hata: Proweb'in /tanitim sayfasına başka bir temadan ikinci bir mavi
   taşınmıştı; rengi tek tek kurcalamak çözmedi, 16 renk `:root`a bağlanınca
   çözüldü (runbook §1 Ö11).

   PALET eski siteden çıkarıldı: ana sayfanın başlık rengi `#00315c`, afiş
   ve menü gradyanları endüstriyel mavi. Buna iki şey eklendi:

     --parlak  (camgöbeği)  — başlık altı çizgisi, sayılar, rozetler
     --turuncu (güvenlik)   — çağrı düğmeleri

   🔴 YAYLALAR'DAN AYRIŞMASI KASITLI (AGENTS.md kural 3: siteler birbirine
   benzemez). Orada lacivert+KIRMIZI ve başlığın SOLUNDA çubuk vardı;
   burada lacivert+CAMGÖBEĞİ ve başlığın ALTINDA çizgi var, kahramanın arka
   planı iki renk lekesi değil TEKNİK IZGARA.

   🔴 HAREKET: bu repoda Framer Motion YOK (PHP, React yok, AGENTS.md kural
   3). Karşılığı CSS geçişleri ve `@keyframes`. Hepsi dosyanın sonundaki
   `prefers-reduced-motion` bloğuyla kapanıyor — hareket bir süs,
   erişilebilirliğin önüne geçmez (runbook §1 Ö11, Ö12).
   =========================================================================== */

:root {
  --gece:        #031d3a;
  --lacivert:    #00315c;   /* eski sitenin başlık rengi, birebir */
  --lacivert-ac: #0a4e8c;
  --mavi:        #0d6cbd;
  --parlak:      #19aed6;   /* camgöbeği vurgu */
  --parlak-koy:  #0d8bae;
  --turuncu:     #e4700e;   /* çağrı düğmesi */
  --turuncu-koy: #bd5a06;
  --murekkep:    #11202f;
  --duman:       #5c7084;
  --cizgi:       #d9e3ee;
  --buz:         #f1f6fb;
  --kagit:       #ffffff;

  --golge:       0 1px 2px rgba(0, 49, 92, .07), 0 10px 28px rgba(0, 49, 92, .09);
  --golge-kalk:  0 3px 8px rgba(0, 49, 92, .13), 0 22px 52px rgba(0, 49, 92, .20);
  --yuvarlak:    12px;
  --yuvarlak-s:  8px;
  --kapsa:       1280px;
}

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--kagit);
  color: var(--murekkep);
  font: 16px/1.65 system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;   /* kayan şeritler taşmasın */
}

img { max-width: 100%; height: auto; display: block; }
a { color: var(--mavi); text-decoration: none; }
a:hover { text-decoration: underline; }

h1, h2, h3, h4 { color: var(--lacivert); line-height: 1.16; margin: 0 0 .5em; letter-spacing: -.02em; }
h1 { font-size: clamp(1.95rem, 1.25rem + 3vw, 3.25rem); font-weight: 800; }
h2 { font-size: clamp(1.42rem, 1.1rem + 1.5vw, 2.15rem); font-weight: 800; }
h3 { font-size: 1.1rem; font-weight: 700; }
p  { margin: 0 0 1em; }

svg { fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }

/* 🔴 Klavye odağı GÖRÜNÜR kalmalı. `outline:none` erişilebilirliği sessizce bozar. */
:focus-visible { outline: 3px solid var(--parlak); outline-offset: 3px; border-radius: 4px; }

.atla { position: absolute; left: -9999px; top: 0; z-index: 99;
        background: var(--turuncu); color: #fff; padding: 10px 16px; border-radius: 0 0 8px 0; }
.atla:focus { left: 0; }

.kapsa { max-width: var(--kapsa); margin: 0 auto; padding: 0 16px; }

/* ------------------------------------------------------------------ üst bant */

.ustbant { background: var(--gece); color: #9fbedd; font-size: 13.5px; padding: 8px 0; }
.ustbant .kapsa { display: flex; gap: 18px; justify-content: space-between; align-items: center; flex-wrap: wrap; }
.ustbant .oge { display: inline-flex; gap: 7px; align-items: center; }
.ustbant svg { width: 15px; height: 15px; flex: 0 0 auto; color: var(--parlak); }
.ustbant a { color: #fff; font-weight: 700; }
.ustbant .rozet { color: var(--gece); background: var(--parlak); font-weight: 700;
                  border-radius: 999px; padding: 2px 11px; font-size: 12.5px; }
@media (max-width: 880px) { .ustbant .gizle { display: none; } }

/* ------------------------------------------------------------------ başlık */

.baslik { position: sticky; top: 0; z-index: 40;
          background: rgba(255, 255, 255, .95);
          backdrop-filter: saturate(170%) blur(10px);
          border-bottom: 1px solid var(--cizgi); }
.baslik .kapsa { display: flex; align-items: center; gap: 18px; min-height: 76px; }

/* 🔴 MARKA YAZIYLA BASILIYOR, LOGOYLA DEĞİL. Eski sitenin logo dosyası
   (`ss/rsmlr/logo/logo2.png`) 1x1 PİKSEL, 110 bayt — bozuk. Firmadan
   gerçek logo gelince buraya bir `<img>` girer; yer hazır. */
.marka { display: inline-flex; align-items: center; gap: 11px; text-decoration: none; }
.marka:hover { text-decoration: none; }
.marka .im { width: 38px; height: 38px; flex: 0 0 auto; border-radius: 9px;
             background: linear-gradient(145deg, var(--lacivert), var(--mavi));
             display: grid; place-items: center; color: #fff; }
.marka .im svg { width: 21px; height: 21px; stroke-width: 2; }
.marka .ad { display: flex; flex-direction: column; line-height: 1; }
.marka .ad b { font-size: 1.3rem; letter-spacing: .02em; color: var(--lacivert); font-weight: 800; }
.marka .ad i { font-style: normal; font-size: .67rem; letter-spacing: .22em;
               color: var(--parlak-koy); font-weight: 700; margin-top: 5px; }

.menu { margin-left: auto; display: flex; align-items: center; gap: 14px; }
.menu ul { display: flex; gap: 2px; list-style: none; margin: 0; padding: 0; }

/* 🔴 SEÇİCİ `.menu ul a`, `.menu a` DEĞİL. WhatsApp düğmesi de `.menu`
   içinde durabiliyor; `.menu a { display:block }` yazılınca o kural (0,1,1)
   aşağıdaki `.wa-mobil` kuralını (0,1,0) yener ve ikon İKİ KEZ görünür.
   proweb'de CANLIDA, medikalde ve yaylalarda yerelde yaşandı. */
.menu ul a { display: block; padding: 9px 12px; border-radius: var(--yuvarlak-s);
             color: var(--murekkep); font-weight: 600; font-size: 14.5px; position: relative; }
.menu ul a::after { content: ""; position: absolute; left: 12px; right: 12px; bottom: 4px;
                    height: 2px; border-radius: 2px; background: var(--parlak);
                    transform: scaleX(0); transform-origin: left;
                    transition: transform .22s ease; }
.menu ul a:hover { text-decoration: none; }
.menu ul a:hover::after { transform: scaleX(1); }
.menu ul a.acik { color: var(--lacivert); }
.menu ul a.acik::after { transform: scaleX(1); }

.menu-dugme { display: none; margin-left: auto; background: none;
              border: 1px solid var(--cizgi); border-radius: var(--yuvarlak-s);
              padding: 9px; color: var(--lacivert); cursor: pointer; }
.menu-dugme svg { width: 22px; height: 22px; }

@media (max-width: 1080px) {
  .menu-dugme { display: inline-flex; }
  .menu { position: absolute; inset: 76px 0 auto; margin: 0; display: none;
          flex-direction: column; align-items: stretch; gap: 10px;
          background: var(--kagit); border-bottom: 1px solid var(--cizgi);
          padding: 12px 16px 18px; box-shadow: var(--golge); }
  .menu.goster { display: flex; }
  .menu ul { flex-direction: column; gap: 2px; }
  .menu ul a { padding: 12px; font-size: 16px; }
  .menu ul a::after { display: none; }
  .menu ul a.acik { background: var(--buz); }
}

/* ------------------------------------------------------------------ düğmeler */

.dugme { display: inline-flex; align-items: center; justify-content: center; gap: 8px;
         padding: 13px 24px; border-radius: 999px; border: 1px solid transparent;
         background: var(--turuncu); color: #fff; font-weight: 700; font-size: 15px;
         text-decoration: none; cursor: pointer;
         transition: background .16s ease, box-shadow .16s ease, transform .16s ease; }
.dugme:hover { background: var(--turuncu-koy); text-decoration: none; box-shadow: var(--golge); }
.dugme:active { transform: translateY(1px); }
.dugme .ikon, .dugme .ikon-wa { width: 18px; height: 18px; flex: 0 0 auto; }

.dugme-ana     { background: var(--lacivert); }
.dugme-ana:hover { background: var(--gece); }
.dugme-wa      { background: #1b8a4b; }
.dugme-wa:hover { background: #15693a; }
.dugme-wa .ikon-wa { fill: currentColor; stroke: none; }
.dugme-hayalet { background: transparent; color: var(--lacivert); border-color: var(--cizgi); }
.dugme-hayalet:hover { background: var(--buz); color: var(--gece); }
.dugme-ters    { background: rgba(255, 255, 255, .13); color: #fff; border-color: rgba(255, 255, 255, .42); }
.dugme-ters:hover { background: rgba(255, 255, 255, .24); }
.dugme-kucuk   { padding: 9px 16px; font-size: 14px; }

/* 🔴 WHATSAPP İKİ MOD — `ortak/whatsapp.php` iki bağlantı birden basıyor,
   hangisinin görüneceğine BU BLOK karar veriyor. Sunucuda cihaz tahmini
   yapılmıyor (sayfalar önbellekli olabilir, ilk isteği yapanın modu herkese
   kilitlenirdi). Eşik 601px: mobiweb7'nin `min-[601px]` değeriyle birebir.

   🔴 SINIF ADI İKİ KEZ YAZILI, YAZIM HATASI DEĞİL. `.wa-mobil.wa-mobil`
   seçiciyi (0,2,0) yapıyor ve "element + sınıf" biçimindeki HER kuralı
   (0,1,1) yeniyor. Sebep ölçülmüş ve ÜÇ KEZ tekrarlanmış bir hata:

     proweb.com.tr  `.menu a { display:block }`  → WhatsApp ikonu CANLIDA iki kez
     medikal        `.menu a { display:block }`  → aynısı, yerelde yakalandı
     yaylalar       `.yuzen a { display:grid }`  → aynısı, yine yerelde

   🔴 BU SİTEDE WHATSAPP NUMARASI YOK (eski sitede hiç geçmiyor), yani şu
   an hiçbir WhatsApp düğmesi basılmıyor. Kural yine de duruyor: firma
   numara verdiği gün `config.php`ye bir satır yazılacak ve düğmeler
   kendiliğinden doğru modda çıkacak. Kuralı o gün yazmaya kalkmak,
   yukarıdaki üç hatayı dördüncü kez yapmak demek olurdu. */
.wa-mobil.wa-mobil { display: inline-flex; }
.wa-masaustu.wa-masaustu { display: none; }
@media (min-width: 601px) {
  .wa-mobil.wa-mobil { display: none; }
  .wa-masaustu.wa-masaustu { display: inline-flex; }
}
.yuzen .wa-mobil.wa-mobil, .yuzen .wa-masaustu.wa-masaustu { display: none; }
.yuzen .wa-mobil.wa-mobil { display: grid; }
@media (min-width: 601px) {
  .yuzen .wa-mobil.wa-mobil { display: none; }
  .yuzen .wa-masaustu.wa-masaustu { display: grid; }
}

/* ------------------------------------------------------------------ bölümler */

.bolum { padding: 74px 0; }
.bolum-buz { background: var(--buz); }
.bolum-koyu { background: var(--lacivert); color: #c6dcf1; }
.bolum-koyu h2, .bolum-koyu h3 { color: #fff; }
.bolum-giris { color: var(--duman); max-width: 76ch; margin: 0 0 34px; font-size: 17px; }
.bolum-koyu .bolum-giris { color: #a2c2e2; }

/* 🔴 BAŞLIK ÇİZGİSİ BAŞLIĞIN ALTINDA, SOLUNDA DEĞİL. Yaylalar'da soldaki
   kırmızı çubuk eski sitenin imzasıydı; burada öyle bir imza yoktu ve
   aynı deseni kopyalamak iki siteyi birbirine benzetirdi (kural 3).
   Çizgi ayrıca görünüşe girerken SOLDAN SAĞA açılıyor — `.bel` ile aynı
   anda, bölüm başlığına küçük bir hareket veriyor. */
.bolum-baslik { margin-bottom: 14px; position: relative; padding-bottom: 14px; }
.bolum-baslik::after { content: ""; position: absolute; left: 0; bottom: 0;
                       width: 62px; height: 4px; border-radius: 3px;
                       background: linear-gradient(90deg, var(--parlak), var(--mavi)); }
.bolum-koyu .bolum-baslik::after { background: linear-gradient(90deg, var(--parlak), #fff); }

.sayfabasi { background: var(--lacivert); color: #c6dcf1; padding: 32px 0 42px;
             position: relative; overflow: hidden; }
.sayfabasi::before { content: ""; position: absolute; inset: 0; opacity: .5;
                     background-image:
                       linear-gradient(rgba(255,255,255,.055) 1px, transparent 1px),
                       linear-gradient(90deg, rgba(255,255,255,.055) 1px, transparent 1px);
                     background-size: 46px 46px; }
.sayfabasi .kapsa { position: relative; z-index: 2; }
.sayfabasi h1 { color: #fff; margin: 12px 0 8px; }
.sayfabasi .altbaslik { color: #a2c2e2; max-width: 80ch; margin: 0; font-size: 17px; }
.kirinti { font-size: 13.5px; color: #86a9cc; display: flex; flex-wrap: wrap; gap: 7px; align-items: center; }
.kirinti a { color: #c6dcf1; }
.kirinti em { font-style: normal; color: #86a9cc; }

.bos-uyari { background: var(--buz); border: 1px dashed var(--cizgi);
             border-radius: var(--yuvarlak); padding: 18px 20px; color: var(--duman); }

/* ===========================================================================
   KAHRAMAN BÖLÜMÜ

   🔴 TAM EKRAN FOTOĞRAF KULLANILMADI, ölçüme dayanarak. Elimizdeki en büyük
   saha fotoğrafı 800x600; tam ekranda retina ekranda bulanıklaşıyor. Eldeki
   tek geniş görsel (926x362) ise YAZISI GÖMÜLÜ bir afiş — üstüne başlık
   basılamaz (§9.32).

   Onun yerine koyu zemin + TEKNİK IZGARA + ALTTA KAYAN ŞERİT: fotoğraflar
   kendi ölçülerinde, keskin duruyor ve görsel güç büyüklükten değil
   AKIŞTAN geliyor. Firmadan yüksek çözünürlüklü fotoğraf gelirse
   `.kahraman` bir arka plan görseli alır; düzen buna hazır.
   =========================================================================== */

.kahraman { position: relative; background: var(--lacivert); color: #c6dcf1; overflow: hidden; }

/* Teknik ızgara — hidrolik şema kâğıdı hissi. Görsel indirmiyor. */
.kahraman::after {
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background-image:
    linear-gradient(rgba(255,255,255,.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.06) 1px, transparent 1px);
  background-size: 52px 52px;
  mask-image: radial-gradient(70% 70% at 30% 35%, #000 20%, transparent 85%);
  -webkit-mask-image: radial-gradient(70% 70% at 30% 35%, #000 20%, transparent 85%);
}

/* Arkadaki yavaş dönen basınç lekesi — tek bir degrade, GPU'da dönüyor. */
.kahraman::before {
  content: ""; position: absolute; inset: -45% -15%; z-index: 0;
  background:
    radial-gradient(40% 44% at 20% 30%, rgba(25, 174, 214, .40), transparent 62%),
    radial-gradient(46% 50% at 80% 70%, rgba(13, 108, 189, .70), transparent 64%),
    radial-gradient(34% 36% at 62% 18%, rgba(228, 112, 14, .22), transparent 64%);
  animation: basinc 30s ease-in-out infinite alternate;
}
@keyframes basinc {
  from { transform: translate3d(-3%, -2%, 0) scale(1) rotate(0deg); }
  to   { transform: translate3d(3%, 2%, 0) scale(1.14) rotate(6deg); }
}

.kahraman-ic { position: relative; z-index: 2; padding: 78px 0 56px; max-width: 74ch; }
.kahraman h1 { color: #fff; }
.kahraman .slogan { font-size: 1.16rem; color: #c6dcf1; margin-top: 14px; }
.kahraman-dugmeler { display: flex; flex-wrap: wrap; gap: 11px; margin-top: 30px; }

.kahraman .bayilik { display: inline-flex; align-items: center; gap: 9px;
                     background: rgba(25, 174, 214, .16); border: 1px solid rgba(25, 174, 214, .5);
                     color: #bdeaf7; border-radius: 999px; padding: 7px 16px;
                     font-size: 13.5px; font-weight: 700; margin-bottom: 20px; }
.kahraman .bayilik svg { width: 15px; height: 15px; color: var(--parlak); }

/* Ölçü satırı — sayılar site.js ile sayılıyor, GERÇEK DEĞER HTML'DE. */
.olcu { display: flex; flex-wrap: wrap; gap: 34px; margin: 38px 0 0; padding: 26px 0 0;
        border-top: 1px solid rgba(255, 255, 255, .2); list-style: none; }
.olcu b { display: block; font-size: 2.1rem; line-height: 1; color: #fff; font-weight: 800;
          font-variant-numeric: tabular-nums; }
.olcu b::after { content: ""; display: block; width: 26px; height: 3px; border-radius: 2px;
                 background: var(--parlak); margin-top: 9px; }
.olcu span { display: block; font-size: 13.5px; color: #93b6da; margin-top: 8px; }

@media (max-width: 900px) { .kahraman-ic { padding: 50px 0 36px; } }

/* ===========================================================================
   KAYAN ŞERİT — sonsuz yatay akış  (Ö12 / 2)

   🔴 LİSTE İKİ KEZ BASILIR (PHP tarafında), CSS yarısı kadar kaydırır.
   Kopya olmadan akış sonunda boşluk görünür ve her turda "zıplar".

   🔴 ŞERİTTE `loading="lazy"` KULLANILMAZ. Tembel yükleme ögenin DÜZEN
   konumuna bakıyor; şeritteki kareler yan yana dizildiği için çoğu ekranın
   sağında, görüş alanının dışında başlıyor ve tarayıcı onları hiç
   indirmiyor. Animasyon onları içeri getirdiğinde karar yeniden
   verilmiyor — şeridin büyük kısmı BOŞ KUTU olarak akıyor (yaylalarda
   ölçüldü). Bu yüzden kare sayısı bilerek az: 12.

   🔴 Fareyle üzerine gelince ve klavye odağında DURUYOR: bir fotoğrafa
   bakmak isteyen ziyaretçinin akışı kovalaması gerekmesin.
   =========================================================================== */

.serit { position: relative; overflow: hidden;
         -webkit-mask-image: linear-gradient(to right, transparent, #000 7%, #000 93%, transparent);
         mask-image: linear-gradient(to right, transparent, #000 7%, #000 93%, transparent); }
.serit-ic { display: flex; gap: 14px; width: max-content;
            animation: kay var(--sure, 60s) linear infinite; }
.serit:hover .serit-ic,
.serit:focus-within .serit-ic { animation-play-state: paused; }
@keyframes kay { from { transform: translate3d(0, 0, 0); } to { transform: translate3d(-50%, 0, 0); } }

.serit figure { margin: 0; flex: 0 0 auto; width: 280px; border-radius: var(--yuvarlak);
                overflow: hidden; background: #072c52; box-shadow: var(--golge); }
.serit img { width: 280px; height: 210px; object-fit: cover;
             transition: transform .4s ease, filter .4s ease; }
.serit figure:hover img { transform: scale(1.07); filter: saturate(1.18); }

.kahraman .serit { padding-bottom: 54px; }

/* ---------------------------------------------------------------------------
   YAZI ŞERİDİ — 35 kategori adı akıyor  (aynı `kay` kareleri)

   🔴 AYNI MOTOR, İKİNCİ KULLANIM. Kategori listesi zaten sayfada var;
   burada ikinci kez, okunacak bir liste olarak değil SAYFAYA RİTİM VEREN
   bir bant olarak akıyor. Bu yüzden tamamı `aria-hidden`: ekran okuyucu
   35 adı ikinci kez okumak zorunda değil.
   --------------------------------------------------------------------------- */

.yazi-serit { background: var(--gece); color: #8fb4d8; padding: 14px 0; overflow: hidden;
              border-top: 1px solid rgba(255,255,255,.08); border-bottom: 1px solid rgba(255,255,255,.08); }
.yazi-serit-ic { display: flex; width: max-content; gap: 0;
                 animation: kay var(--sure, 90s) linear infinite; }
.yazi-serit:hover .yazi-serit-ic { animation-play-state: paused; }
.yazi-serit span { display: inline-flex; align-items: center; gap: 26px;
                   padding: 0 13px; font-size: 14px; font-weight: 600; white-space: nowrap; }
.yazi-serit span::after { content: ""; width: 5px; height: 5px; border-radius: 50%;
                          background: var(--parlak); flex: 0 0 auto; }

/* ===========================================================================
   KAYDIRINCA BELİRME — TAMAMEN CSS, JAVASCRIPT YOK  (Ö12 / 1)

   🔴 BU KURGU YAYLALARDA ÖNCE JAVASCRIPT'LE YAZILDI VE YANLIŞTI. `.bel`
   ögeleri `opacity: 0` ile başlıyor, bir betik `.gor` sınıfını ekliyordu.
   Üç ayrı emniyet katmanına rağmen sayfa BEMBEYAZ kaldı: çizim hattı
   aralıklı çalışınca ne IntersectionObserver, ne `requestAnimationFrame`,
   ne kaydırma olayı güvenilir geldi. Katman eklemek çözüm değildi —
   kurgunun kendisi yanlıştı (runbook §9.31).

   🔴 DOĞRU KURAL: İÇERİĞİN GÖRÜNÜRLÜĞÜ ASLA BETİĞE BAĞLANMAZ. Süs olan
   şey (belirme) betiğe bağlanabilir, görünürlük bağlanamaz.

   Burada içerik VARSAYILAN OLARAK GÖRÜNÜR. `opacity: 0` yalnızca
   keyframe'in `from` adımında geçiyor, taban kural olarak DEĞİL.
   Belirme yalnızca `animation-timeline: view()` destekleyen tarayıcıda
   çalışıyor; desteklemeyen tarayıcı içeriği doğrudan görüyor. Takılabilecek
   bir yer yok çünkü ortada betik yok.

   🔴 `--gec` KADEMELİ GECİKMESİ YOK. `view()` ile her öge KENDİ konumuna
   göre belirdiği için ızgaradaki kartlar zaten sırayla giriyor; işlevsiz
   görünen ama işlev vaat eden kod, hiç olmayan koddan kötüdür (§9.32).
   =========================================================================== */

@keyframes belir {
  from { opacity: 0; transform: translate3d(0, 26px, 0); }
  to   { opacity: 1; transform: none; }
}

/* Başlık altı çizgisinin soldan açılması — aynı zamanlama hattı. */
@keyframes cizgi-ac {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}

@supports (animation-timeline: view()) {
  @media (prefers-reduced-motion: no-preference) {
    .bel {
      animation: belir linear both;
      animation-timeline: view();
      /* Öge ekranın altından girerken başlar, üçte birini geçmeden biter. */
      animation-range: entry 0% cover 22%;
    }
    .bolum-baslik.bel::after {
      transform-origin: left;
      animation: cizgi-ac linear both;
      animation-timeline: view();
      animation-range: entry 0% cover 26%;
    }
  }
}

/* ===========================================================================
   ÜRÜN KATEGORİLERİ  (Ö12 / 6 — kartlarda derinlik)
   =========================================================================== */

.kat-izgara { display: grid; gap: 20px; grid-template-columns: repeat(auto-fill, minmax(258px, 1fr)); }

.kat-kart { position: relative; display: flex; flex-direction: column; overflow: hidden;
            background: var(--kagit); border: 1px solid var(--cizgi);
            border-radius: var(--yuvarlak);
            transition: box-shadow .22s ease, transform .22s ease, border-color .22s ease; }
.kat-kart:hover { box-shadow: var(--golge-kalk); transform: translateY(-4px); border-color: #bcd2e8; }
.kat-kapak { display: block; aspect-ratio: 4 / 3; overflow: hidden; background: var(--buz); position: relative; }
.kat-kapak img { width: 100%; height: 100%; object-fit: cover; transition: transform .45s ease; }
.kat-kart:hover .kat-kapak img { transform: scale(1.07); }

/* Üstten geçen ışık — yalnız fareyle gelince, tek seferlik bir parıltı. */
.kat-kapak::after { content: ""; position: absolute; inset: 0; pointer-events: none;
                    background: linear-gradient(105deg, transparent 38%,
                                rgba(255,255,255,.42) 50%, transparent 62%);
                    transform: translateX(-120%); }
.kat-kart:hover .kat-kapak::after { animation: parilti .75s ease-out; }
@keyframes parilti { to { transform: translateX(120%); } }

.kat-govde { padding: 16px 18px 18px; display: flex; flex-direction: column; gap: 7px; flex: 1; }
.kat-govde h3 { margin: 0; font-size: 1.02rem; }
.kat-adet { font-size: 13px; color: var(--duman); display: inline-flex; align-items: center; gap: 7px; }
.kat-adet b { color: var(--parlak-koy); font-variant-numeric: tabular-nums; }
.kat-git { margin-top: auto; padding-top: 8px; font-size: 13.5px; font-weight: 700;
           color: var(--turuncu); display: inline-flex; align-items: center; gap: 6px; }
.kat-git svg { width: 15px; height: 15px; transition: transform .2s ease; }
.kat-kart:hover .kat-git svg { transform: translateX(4px); }
/* Kartın tamamı tıklanabilir ama metin yine seçilebilir. */
.ortu { position: absolute; inset: 0; }

/* Boş kategori — "Kızak"ta ürün fotoğrafı yok, kart bunu SÖYLÜYOR. */
.kat-kart.bos .kat-adet b { color: var(--duman); }

/* ------------------------------------------------------------------ ürün kartı */

.urun-izgara { display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(206px, 1fr)); }
.urun-kart { position: relative; margin: 0; border-radius: var(--yuvarlak); overflow: hidden;
             background: var(--murekkep); box-shadow: var(--golge); display: block;
             transition: box-shadow .22s ease, transform .22s ease; }
.urun-kart:hover { box-shadow: var(--golge-kalk); transform: translateY(-4px); }
.urun-kart img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover;
                 transition: transform .45s ease, opacity .3s ease; opacity: .94; }
.urun-kart:hover img { transform: scale(1.08); opacity: 1; }
.urun-kart figcaption { position: absolute; inset: auto 0 0; padding: 28px 13px 12px;
                        background: linear-gradient(to top, rgba(3, 29, 58, .94), rgba(3, 29, 58, 0));
                        color: #fff; font-weight: 700; font-size: 14.5px; }
a.urun-kart:hover { text-decoration: none; }

/* ------------------------------------------------------------------ kategori yan menüsü */

/* 🔴 SOL ÜRÜN MENÜSÜ ESKİ SİTENİN İMZASIYDI. Her ürün sayfasında 36
   kategorinin listesi solda duruyordu ve ziyaretçi ona alışkın. Korundu —
   ama yapışkan ve kendi içinde kaydırılabilir, 35 satır sayfayı uzatmasın. */
.kat-duzen { display: grid; grid-template-columns: 268px minmax(0, 1fr); gap: 34px; align-items: start; }
.kat-yan { position: sticky; top: 92px; background: var(--kagit);
           border: 1px solid var(--cizgi); border-radius: var(--yuvarlak); overflow: hidden; }
.kat-yan h2 { font-size: .82rem; letter-spacing: .13em; text-transform: uppercase;
              color: #fff; background: var(--lacivert); margin: 0; padding: 14px 18px; }
.kat-yan ul { list-style: none; margin: 0; padding: 6px; display: grid; gap: 1px;
              max-height: 62vh; overflow: auto; }
.kat-yan a { display: flex; justify-content: space-between; gap: 10px; align-items: center;
             padding: 9px 12px; border-radius: var(--yuvarlak-s); color: var(--murekkep);
             font-size: 14px; font-weight: 600; transition: background .15s ease, padding-left .15s ease; }
.kat-yan a:hover { background: var(--buz); text-decoration: none; padding-left: 17px; }
.kat-yan a.acik { background: var(--lacivert); color: #fff; }
.kat-yan a small { color: var(--duman); font-size: 12px; font-variant-numeric: tabular-nums; }
.kat-yan a.acik small { color: #9fc6ea; }
@media (max-width: 1000px) {
  .kat-duzen { grid-template-columns: 1fr; }
  .kat-yan { position: static; }
  .kat-yan ul { max-height: 320px; }
}

/* ===========================================================================
   MOZAİK GALERİ  (Ö12 / 3)

   🔴 MOZAİK, EŞİT IZGARA DEĞİL. Fotoğrafların hepsi aynı ölçüde basılınca
   katalog gibi duruyor; birkaç karenin iki kat yer kaplaması sayfaya ritim
   veriyor. Hangi karelerin büyüyeceği `:nth-child` ile SABİT — rastgele
   olsaydı her yüklemede düzen değişir, sayfa huzursuz olurdu (§9.32).
   =========================================================================== */

/* 🔴 SÜTUN SAYISI SABİT, `auto-fill` DEĞİL. Geniş kareler (2×2) ancak
   sütun sayısı bilinirse tam bölen bir blok oluşturuyor; `auto-fill` ile
   sütun sayısı ekrana göre değişince `:nth-child` kuralı rastgele yerlere
   düşüyor ve ızgarada delikler kalıyordu (Karayaka'da ölçüldü,
   runbook §9.34-f).
   🔴 `grid-auto-flow: dense` KALDIRILDI: delikleri doldurmak için kareleri
   geriye tıkıştırıyor, fotoğraf sırasını bozuyordu. Blok tam böldüğü için
   artık doldurulacak delik de yok.
   Hangi karenin genişleyeceğine PHP karar veriyor: son blok eksikse geniş
   kare verilmiyor — CSS kaç kare olduğunu bilmiyor. */
.mozaik { display: grid; gap: 12px; grid-template-columns: repeat(4, 1fr);
          grid-auto-rows: 168px; }
.mozaik a { position: relative; display: block; border-radius: var(--yuvarlak-s);
            overflow: hidden; background: var(--buz); }
.mozaik img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s ease; }
.mozaik a:hover img { transform: scale(1.08); }
.mozaik a::after { content: ""; position: absolute; inset: 0;
                   background: linear-gradient(to top, rgba(0, 49, 92, .58), transparent 55%);
                   opacity: 0; transition: opacity .25s ease; }
.mozaik a:hover::after { opacity: 1; }
.mozaik a::before { content: ""; position: absolute; z-index: 2; right: 11px; bottom: 11px;
                    width: 30px; height: 30px; border-radius: 50%; opacity: 0;
                    background: var(--parlak) url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M20 20l-3.5-3.5M11 8v6M8 11h6'/%3E%3C/svg%3E") center / 17px no-repeat;
                    transform: translateY(6px); transition: opacity .22s ease, transform .22s ease; }
.mozaik a:hover::before { opacity: 1; transform: none; }
/* Geniş kare — yalnız DÖRT sütunda. Üç ve iki sütunda beşli blok tam
   bölmüyor; orada ızgara düpedüz eşit kalıyor. */
.mozaik a.genis { grid-column: span 2; grid-row: span 2; }
@media (max-width: 1100px) {
  .mozaik { grid-template-columns: repeat(3, 1fr); }
  .mozaik a.genis { grid-column: auto; grid-row: auto; }
}
@media (max-width: 760px) {
  .mozaik { grid-template-columns: repeat(2, 1fr); grid-auto-rows: 132px; }
}

/* ===========================================================================
   PARALAKS BANT  (Ö12 / 5)

   🔴 GERÇEK PARALAKS DEĞİL, `background-attachment: fixed`. JS ile
   kaydırmaya bağlı bir paralaks her kaydırma karesinde yeniden düzen
   hesaplatıyor ve orta sınıf telefonda takılıyor.

   🔴 ARKA PLAN YAZISI GÖMÜLÜ AFİŞ OLAMAZ (§9.32). Eldeki tek geniş görsel
   "biz üretiyoruz…" yazısını taşıyor; bandın kendi başlığıyla çakışırdı.
   Bantlar bu yüzden YAZISIZ ürün/saha fotoğrafı kullanıyor — 800x600 tam
   genişlikte büyüyor, `blur` bunu KASITLI gösteriyor ve koyu örtü beyaz
   başlığın kontrastını garantiliyor.
   =========================================================================== */

.bant { position: relative; min-height: 330px; display: grid; place-items: center;
        background-size: cover; background-position: center; background-attachment: fixed;
        color: #fff; text-align: center; }
.bant::before { content: ""; position: absolute; inset: 0;
                background: rgba(0, 28, 56, .80); backdrop-filter: blur(3px); }
.bant .kapsa { position: relative; z-index: 2; padding: 54px 16px; }
.bant h2 { color: #fff; }
.bant p { color: #cadff2; max-width: 62ch; margin: 0 auto 22px; font-size: 17px; }
/* iOS'ta `fixed` arka plan tutarsız çiziliyor — küçük ekranda normale dön. */
@media (max-width: 900px) { .bant { background-attachment: scroll; min-height: 270px; } }

/* ------------------------------------------------------------------ etiket sayfaları */

.etiket-kume { margin-bottom: 38px; }
.etiket-kume h3 { display: inline-flex; align-items: center; gap: 9px; margin-bottom: 16px; }
.etiket-kume h3 .adet { font-size: 12.5px; font-weight: 700; color: var(--parlak-koy);
                        background: #e3f5fa; border-radius: 999px; padding: 3px 10px; }
.etiket-izgara { display: grid; gap: 14px; grid-template-columns: repeat(auto-fill, minmax(318px, 1fr)); }
.etiket-kart { position: relative; display: block; padding: 19px 22px;
               background: var(--kagit); border: 1px solid var(--cizgi);
               border-left: 4px solid var(--parlak); border-radius: var(--yuvarlak-s);
               transition: box-shadow .2s ease, transform .2s ease, border-left-color .2s ease; }
.etiket-kart:hover { box-shadow: var(--golge); transform: translateX(4px);
                     border-left-color: var(--turuncu); text-decoration: none; }
.etiket-kart b { display: block; color: var(--lacivert); font-size: 15.5px; line-height: 1.35; margin-bottom: 7px; }
.etiket-kart span { display: block; color: var(--duman); font-size: 14px; }

.yazi { max-width: 76ch; }
.yazi p { font-size: 17.5px; line-height: 1.78; }

/* ------------------------------------------------------------------ haberler */

.haber-izgara { display: grid; gap: 22px; grid-template-columns: repeat(auto-fill, minmax(308px, 1fr)); }
.haber-kart { position: relative; display: flex; flex-direction: column; overflow: hidden;
              background: var(--kagit); border: 1px solid var(--cizgi); border-radius: var(--yuvarlak);
              transition: box-shadow .22s ease, transform .22s ease; }
.haber-kart:hover { box-shadow: var(--golge-kalk); transform: translateY(-4px); }
.haber-kapak { aspect-ratio: 16 / 10; overflow: hidden; background: var(--buz); }
.haber-kapak img { width: 100%; height: 100%; object-fit: cover; transition: transform .45s ease; }
.haber-kart:hover .haber-kapak img { transform: scale(1.06); }
.haber-govde { padding: 17px 20px 20px; display: flex; flex-direction: column; gap: 9px; flex: 1; }
.haber-govde h3 { margin: 0; font-size: 1.05rem; }
.haber-govde p { margin: 0; font-size: 14.5px; color: var(--duman); flex: 1; }
.haber-tarih { font-size: 12.5px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
               color: var(--parlak-koy); }

/* ------------------------------------------------------------------ SSS */

.sss { display: grid; gap: 10px; max-width: 88ch; }
.sss details { background: var(--kagit); border: 1px solid var(--cizgi);
               border-radius: var(--yuvarlak); padding: 2px 20px; }
.sss summary { cursor: pointer; padding: 16px 0; font-weight: 700; color: var(--lacivert);
               list-style: none; display: flex; justify-content: space-between; gap: 14px; align-items: center; }
.sss summary::-webkit-details-marker { display: none; }
.sss summary::after { content: ""; width: 10px; height: 10px; flex: 0 0 auto;
                      border-right: 2px solid var(--parlak); border-bottom: 2px solid var(--parlak);
                      transform: rotate(45deg) translateY(-2px); transition: transform .18s ease; }
.sss details[open] summary::after { transform: rotate(-135deg) translateY(-2px); }
.sss details p { margin: 0 0 16px; color: var(--duman); }

/* ------------------------------------------------------------------ iletişim */

.iletisim-izgara { display: grid; gap: 18px; grid-template-columns: repeat(auto-fit, minmax(234px, 1fr)); }
.iletisim-kart { background: var(--kagit); border: 1px solid var(--cizgi);
                 border-radius: var(--yuvarlak); padding: 22px;
                 transition: box-shadow .2s ease, transform .2s ease; }
.iletisim-kart:hover { box-shadow: var(--golge); transform: translateY(-3px); }
.iletisim-kart h3 { display: flex; align-items: center; gap: 10px; font-size: 1rem; }
.iletisim-kart h3 svg { width: 19px; height: 19px; color: var(--parlak); }
.iletisim-kart p { margin: 0; color: var(--duman); font-size: 15px; }
.iletisim-kart a { font-weight: 700; }
.harita { border: 0; width: 100%; height: 400px; border-radius: var(--yuvarlak); background: var(--buz); }

/* ------------------------------------------------------------------ form */

.form-duzen { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 380px); gap: 40px; align-items: start; }
.form { display: grid; gap: 15px; }
.form label { display: grid; gap: 6px; font-size: 14px; font-weight: 700; color: var(--lacivert); }
.form input, .form textarea, .form select {
  font: inherit; padding: 12px 14px; border: 1px solid var(--cizgi);
  border-radius: var(--yuvarlak-s); background: var(--kagit); color: var(--murekkep); }
.form input:focus, .form textarea:focus, .form select:focus { border-color: var(--parlak); }
.form textarea { min-height: 140px; resize: vertical; }
.form .ikili { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }
.form-not { font-size: 13px; color: var(--duman); margin: 0; font-weight: 400; }
.uyari { padding: 13px 16px; border-radius: var(--yuvarlak-s); margin: 0 0 16px; }
.uyari-iyi  { background: #e7f6ef; color: #0f5e42; border: 1px solid #b9e3d0; }
.uyari-kotu { background: #fdeceb; color: #8d2f1d; border: 1px solid #f6cdc7; }
@media (max-width: 900px) { .form-duzen { grid-template-columns: 1fr; } .form .ikili { grid-template-columns: 1fr; } }

/* ------------------------------------------------------------------ çağrı bandı */

.bolum-cagri { background: linear-gradient(120deg, var(--lacivert), var(--mavi)); color: #fff; }
.cagri { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 32px; align-items: center; }
.cagri h2 { color: #fff; margin-bottom: .3em; }
.cagri p { color: #d6e8f8; margin: 0; max-width: 60ch; }
.cagri-dugmeler { display: flex; flex-wrap: wrap; gap: 11px; }
.bolum-cagri .dugme-ters { border-color: rgba(255, 255, 255, .55); }
@media (max-width: 860px) { .cagri { grid-template-columns: 1fr; } }

/* ------------------------------------------------------------------ yüzen düğmeler */

/* 🔴 SOL ŞERİT GENİŞ EKRANA KİLİTLİ. `position: fixed; left: 0` bir şerit,
   içerik kapsayıcısı ekranın kenarına dayandığı anda metnin ÜSTÜNE biniyor
   (yaylalarda 1024px'te ölçüldü). Eşik: kapsayıcı + iki yanda şerit payı =
   1280 + 2*56 ≈ 1392. Altındaki her genişlikte şerit sağ alta, yatay bir
   pile dönüyor — orada hiçbir metnin üstüne binmiyor. */
.yuzen { position: fixed; z-index: 50; display: grid;
         left: auto; right: 14px; bottom: 14px; top: auto; transform: none;
         grid-auto-flow: column; gap: 8px; }
.yuzen a { width: 48px; height: 48px; display: grid; place-items: center; color: #fff;
           border-radius: 50%; box-shadow: var(--golge-kalk);
           transition: transform .18s ease, background .18s ease; }
.yuzen a:hover { transform: translateY(-3px); }
.yuzen svg { width: 21px; height: 21px; }
.yuzen .y-wa { background: #1b8a4b; }
.yuzen .y-wa:hover { background: #15693a; }
.yuzen .y-tel { background: var(--turuncu); }
.yuzen .y-tel:hover { background: var(--turuncu-koy); }
.yuzen .y-mail { background: var(--lacivert); }
.yuzen .y-mail:hover { background: var(--gece); }
.yuzen .ikon-wa { fill: currentColor; stroke: none; }

@media (min-width: 1392px) {
  .yuzen { left: 0; right: auto; top: 50%; bottom: auto; transform: translateY(-50%);
           grid-auto-flow: row; gap: 2px; }
  .yuzen a { width: 44px; height: 44px; border-radius: 0 var(--yuvarlak-s) var(--yuvarlak-s) 0;
             box-shadow: none; transition: width .18s ease, background .18s ease; }
  .yuzen a:hover { width: 52px; transform: none; }
}

/* ===========================================================================
   BÜYÜTEÇ  (Ö12 / 7)
   =========================================================================== */

.buyutec { position: fixed; inset: 0; z-index: 90; display: none; place-items: center;
           padding: 24px; background: rgba(1, 20, 41, .95); }
.buyutec.acik { display: grid; }
.buyutec img { max-width: min(1300px, 95vw); max-height: 88vh; width: auto;
               border-radius: 10px; margin: 0 auto; }
.buyutec-kapat { position: absolute; top: 16px; right: 18px; width: 46px; height: 46px;
                 border-radius: 50%; cursor: pointer; background: rgba(255, 255, 255, .14);
                 border: 1px solid rgba(255, 255, 255, .35); color: #fff; font-size: 27px; line-height: 1; }
.buyutec-kapat:hover { background: rgba(255, 255, 255, .26); }
.buyutec-gez { position: absolute; top: 50%; transform: translateY(-50%);
               width: 50px; height: 50px; border-radius: 50%; cursor: pointer;
               background: rgba(255, 255, 255, .14); border: 1px solid rgba(255, 255, 255, .35);
               color: #fff; display: grid; place-items: center; }
.buyutec-gez:hover { background: rgba(255, 255, 255, .26); }
.buyutec-gez svg { width: 22px; height: 22px; }
.buyutec-onceki { left: 16px; }
.buyutec-sonraki { right: 16px; }
.buyutec-sayac { position: absolute; bottom: 18px; left: 0; right: 0; text-align: center;
                 color: #93b6da; font-size: 14px; font-variant-numeric: tabular-nums; }

/* ------------------------------------------------------------------ altbilgi */

.altbilgi { background: var(--gece); color: #9fbedd; padding: 54px 0 20px; font-size: 14.5px; }
.altbilgi .duzen { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1.3fr; gap: 36px; }
.altbilgi h4 { color: #fff; font-size: .95rem; margin-bottom: .9em; }
.altbilgi ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 9px; }
.altbilgi a { color: #c6dcf1; }
.altbilgi a:hover { color: #fff; }
.altbilgi .marka .ad b { color: #fff; }
.altbilgi .marka .ad i { color: var(--parlak); }
.altbilgi .tanit { margin: 16px 0 0; max-width: 46ch; line-height: 1.65; }
.kapanis { margin-top: 36px; padding-top: 18px; border-top: 1px solid rgba(255, 255, 255, .14);
           display: flex; flex-wrap: wrap; gap: 12px; justify-content: space-between;
           font-size: 13.5px; color: #759abe; }
@media (max-width: 1000px) { .altbilgi .duzen { grid-template-columns: 1fr 1fr; } }
@media (max-width: 620px) { .altbilgi .duzen { grid-template-columns: 1fr; gap: 28px; } }

/* 🔴 ALTBİLGİNİN SONUNA PAY. Dar ekranda yüzen düğmeler sağ altta duruyor;
   pay olmazsa sayfanın EN SON satırı (telif ve Proweb imzası) kalıcı olarak
   düğmelerin altında kalır — kaydırarak da kurtulamazsınız (ölçüldü).

   🔴 BU KURAL `.altbilgi`NİN TANIMINDAN SONRA DURMAK ZORUNDA. Önce
   yazıldığında `.altbilgi { padding: 54px 0 20px }` onu ezer: iki kural da
   (0,1,0) ve eşitlikte SONRAKİ kazanır. Medya sorgusu özgüllük
   kazandırmaz — sık yapılan hata. */
@media (max-width: 1391px) { .altbilgi { padding-bottom: 86px; } }

/* ===========================================================================
   HAREKETİ AZALT

   🔴 BU BLOK PAZARLIK KONUSU DEĞİL. Vestibüler rahatsızlığı olan ziyaretçi
   için kayan şerit ve beliren kartlar rahatsız edici — işletim sisteminde
   "hareketi azalt" seçiliyse HEPSİ kapanıyor ve içerik olduğu gibi duruyor.
   Kayan şeritler `animation: none` ile İLK KAREDE DONUYOR, gizlenmiyor.
   =========================================================================== */

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important;
    transition-duration: .01ms !important; }
  .kahraman::before { animation: none; }
  .serit-ic { animation: none; flex-wrap: wrap; width: auto; justify-content: center; }
  .yazi-serit-ic { animation: none; width: auto; flex-wrap: wrap; justify-content: center; }
  .bel { animation: none; opacity: 1; transform: none; }
  .bolum-baslik::after { animation: none; transform: none; }
  .bant { background-attachment: scroll; }
  .kat-kart:hover, .urun-kart:hover, .haber-kart:hover,
  .etiket-kart:hover, .iletisim-kart:hover { transform: none; }
  .mozaik a:hover img, .serit figure:hover img, .urun-kart:hover img,
  .kat-kart:hover .kat-kapak img, .haber-kart:hover .haber-kapak img { transform: none; }
  .kat-kart:hover .kat-kapak::after { animation: none; }
}

/* ------------------------------------------------------------------ yazdırma */

@media print {
  .ustbant, .baslik, .yuzen, .bolum-cagri, .serit, .yazi-serit, .buyutec, .kat-yan { display: none; }
  body { font-size: 12pt; }
  .kahraman, .sayfabasi, .bolum-koyu, .bant { background: none; color: #000; }
  .kahraman::before, .kahraman::after, .sayfabasi::before, .bant::before { display: none; }
  .kahraman h1, .sayfabasi h1, .bolum-koyu h2, .bant h2 { color: #000; }
  .kat-duzen { grid-template-columns: 1fr; }
  .altbilgi { background: none; color: #000; border-top: 1px solid #999; }
  .altbilgi a, .altbilgi h4, .altbilgi .marka .ad b { color: #000; }
}
