/* Hey Re — uygulamaya özel stiller (Redev UI token'ları üzerine)
   Kurallar (STACK.md § Kesin kurallar):
   - Raw hex renk yok, her şey var(--…)
   - Yüzey rengiyle karışımlarda color-mix(in srgb …) — in oklch akromatik
     hue yüzünden brand rengini kaydırıyor (camp dersi)
   - [hidden] reset'i şart: display taşıyan sınıflar UA kuralını eziyor        */

* { box-sizing: border-box; }

/* ── İçerik kolonu gutter'ı — TEK KAYNAK ────────────────────────────────
   Başlık bloğu, içerik kolonu ve `re-scroll-x`'in bleed telafisi aynı değeri
   okur. Ayrı ayrı yazıldığında kırılım noktasında (1024px) kapsayıcı 30px'e
   geçerken şeridin telafisi 20px'te kalıyordu → şerit ne başlıkla ne kartla
   hizalıydı (ölçüm: 900 / 880 / 840 px). */
:root { --re-gutter: var(--re-space-4); }
@media (min-width: 1024px) { :root { --re-gutter: var(--re-space-6); } }

[hidden] { display: none !important; }
body {
  margin: 0;
  font-family: var(--font-sans, system-ui, sans-serif);
  color: var(--foreground);
  background: var(--background);
  -webkit-font-smoothing: antialiased;
}
button, input, textarea { font-family: inherit; }

/* ── Sayfa iskeleti ───────────────────────────────────────────────────── */
/* ✅ GEÇİCİ OVERRIDE KALDIRILDI (2026-08-19). Eskiden burada
   `#app { display:flex; height:100dvh; overflow:hidden }` +
   `.re-shell.hey-shell { flex:1 1 auto }` vardı; Redev UI'de banner slot'u
   olmadığı için yazılmıştı. DS artık `.re-app` ile aynı geometriyi veriyor
   (üstelik `:has(> .re-banner)` ile çentik dolgusunu da çözüyor), banner da
   `.re-banner` component'i. index.html'de `<div id="app" class="re-app">`.
   İstenen kabul kriteri sağlandı: banner varken/yokken tabbar konumu değişmiyor. */


/* Breadcrumb kuralları SİLİNDİ (v0.19.0): markup'ta `re-breadcrumb` HİÇ YOK —
   `_labs/scripts/olu-kural.mjs` ölçtü. Gerekçe yorumu duruyordu ama gerekçe bir
   İHTİYACI değil bir NİYETİ anlatıyor; kural hiç eşleşmiyordu. */


@media (min-width: 640px) {  }

/* Sayfa-geneli bildirim şeridi → DS `.re-banner` + `.re-c-{role}` (2026-08-19).
   Yerel `.hey-banner` bloğu silindi. Görsel fark bilinçli: DS şeridi **dolu**
   renk kullanıyor (eskisi soluk tonlu bir şeritti) — çevrimdışı/yeniden-bağlan
   gibi eyleme çağıran durumlarda daha görünür olması doğru davranış.
   Kullanım: `app.js § bannerHtml`. */

/* Sayfa künyesi — içerik kolonuyla aynı genişlik/padding */




/* ── Görünüm kolonu ───────────────────────────────────────────────────── */

/* MOBİLDE ÜST ÇUBUK GERİ GELDİ — ama yalnız MARKA + AVATAR (2026-09-17 kullanıcı
   kararı, aile standardı: "tüm uygulamalarda sağ üst köşede user avatar var").
   2026-08-20'de tamamen kaldırılmıştı; o karar avatarı da götürünce telefonda
   `Hesabım`a giden yol kalmamıştı (ölçüldü: hesap menüsü tetiği 390px'te 0×0).
   Gezinme linkleri burada DEĞİL: DS zaten gizliyor
   (`@media (max-width:1023px){.re-app:has(.re-tabbar) .re-navbar-nav{display:none}}`),
   gezinme ada çubuğunda kalıyor.
   ⚠ Çentik payı yeniden NAVBAR'ın: DS `.re-app .re-navbar{padding-top:
   env(safe-area-inset-top)}` yazıyor, künyedeki devir kuralı kalktı — ikisi birden
   kalırsa pay İKİ KEZ uygulanıyor. */
@media (max-width: 1023px) {
  .re-navbar .re-chip { display: none; }   /* sıradaki-etkinlik çipi dar ekranda yer kaplıyor */
}



@media (max-width: 520px) {
    }



/* ── Yakalanan işler ──────────────────────────────────────────────────── */
.hey-mail-snippet {
  margin: 0;
  font-size: calc(0.8125rem * var(--font-scale));
  line-height: 1.4;
  color: var(--muted-foreground);
  /* İki satırda kes: önizleme uzunlukları çok değişken, kart yüksekliği zıplamasın */
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden;
}
/* Okunmamış mail satırı: başlık kalın (satır artık DS'in `re-row`u). */
.re-row.unread .re-row-title { font-weight: 650; }
.hey-unread-dot {
  width: 7px; height: 7px; border-radius: 999px; flex-shrink: 0;
  margin: 7px 2px 0;
  background: var(--brand);
}

/* Google Tasks satırı: tik atılamıyor (readonly), o yüzden checkbox değil nokta */
.hey-task-dot {
  width: 8px; height: 8px; border-radius: 999px; flex-shrink: 0;
  margin: 7px 5px 0;
  background: color-mix(in srgb, var(--success) 60%, transparent);
}

/* Katlanır "N tamamlanmış / N mail daha" — YERELDE KALIYOR (2026-09-09 sync kararı).
   DS'in `re-accordion`ı kenarlıklı, çok kalemli, `<button>` tabanlı bir KAP
   (`re-ac-item` + `re-ac-trigger`) ve açma/kapama JS istiyor. Bizimki mevcut bir
   kartın İÇİNDE tek satırlık bir açılır özet ve `<details>` ile JS'siz çalışıyor.
   Zorlamak rolü bükmek + JS eklemek olurdu. Gap raporunda: DS'te satır içi
   açılır özet yok. */
.hey-done > summary {
  cursor: pointer; list-style: none;
  padding: 6px 2px; font-size: calc(0.75rem * var(--font-scale));
  font-weight: 550; color: var(--muted-foreground);
}
.hey-done > summary::-webkit-details-marker { display: none; }
.hey-done > summary:hover { color: var(--foreground); }
.hey-done[open] > summary { margin-bottom: 6px; }






/* ── Masaüstü ─────────────────────────────────────────────────────────── */
/* `.re-tabbar { display:none }` kuralı kaldırıldı — DS `.re-app .re-tabbar`
   ile aynı takası yapıyor (varsayılan none, ≤1023px'te flex). Yerel kural
   DS'ten daha genişti (`re-app` dışındaki tabbar'ları da gizliyordu). */

/* Yapay zekânın mail/mesajdan yakaladığı görev satırı — tek listede sağlayıcı
   görevlerinden ayrışsın diye sol kenarda marka şeridi. Ayrı bölüm yapmak yerine
   vurgu: kullanıcı aynı işi iki yerde aramasın (2026-08-20). */


/* Hafıza satırının kategori etiketi — referans tasarımdaki "FACT" satırı.
   (Ölü kural temizliğinde `\.hey-mem\b` deseni bunu da yuttu: `\b` tire ile
   eşleşiyor. Ad tabanlı silmede sınır olarak `[ ,.:{]` kullan.) */
.hey-mem-kind {
  text-transform: uppercase; letter-spacing: 0.06em;
  font-size: calc(0.625rem * var(--font-scale)); font-weight: 650;
  color: var(--brand);
}


/* Açılış göstergesi — `#app` kolonunun tamamını kaplayıp ortalar.
   `flex: 1` çünkü `#app` (re-app) bir kolon: kalan yüksekliği alıp içeriği
   iki eksende ortalıyor. Kabuk henüz basılmadığı için burada `re-shell` yok. */
.hey-boot {
  flex: 1 1 auto; min-height: 0;
  display: flex; align-items: center; justify-content: center; gap: 10px;
  color: var(--muted-foreground);
  font-size: calc(0.875rem * var(--font-scale));
}

/* Hafıza notu NORMAL ağırlıkta. `re-row-title` DS'te 600 — hafıza ekranında her
   satırın ana metni o olduğu için ekran baştan sona kalın görünüyordu (Ersin,
   2026-08-20). Ağırlık düşüyor, RENK düşmüyor: metin hâlâ birincil içerik, o
   yüzden `re-row-sub`a çevirmek yanlış olurdu (küçülür ve soluklaşır).
   DS sınıfını EZMİYOR, yanına ek sınıf: çakışma denetimi property bazlı ve
   `.hey-mem-note` ayrı bir sınıf — kaynak sırası gereği bu kural kazanıyor. */
.hey-mem-note {
  font-weight: 400;
}

/* ── Sabit prompt bar (dock) ──────────────────────────────────────────────
   Ersin, 2026-08-21: bar üç ekranda (Bugün/Sohbet/Hafıza) görünsün, sayfanın
   altına sabitlensin, masaüstünde 20px alt payı olsun; mobilde tab bar'ın
   ÜSTÜNDE dursun. Kenarlık brief box ile aynı olsun.

   Kenarlık tarihçesi: (1) nötr-koyu deneme `border 65% + muted-foreground 35%`
   → webde fazla koyu (#B6B8BE); (2) marka tonu `brand 28%` → brief box ile aynı
   dil ama kontrast 1.53:1; (3) YÜRÜRLÜKTE: DS `--border-elevated` (1.75:1) —
   DS ada tabbar'a da bunu verdiği için iki yüzen çubuk aynı kenarlığı konuşuyor.
   Gölge kalıyor: yüzen eleman içerikten ayrılmalı. */
/* ⚠ `#app`, `.re-app` DEĞİL (O2, 2026-10-02): yeni kabukta `#app` `re-app` sınıfını TAŞIMIYOR ve
   değişkenler `.re-app`teyken orada TANIMSIZ kalıyordu — dock konumu ve `--re-main-clear` geçersiz düştü,
   içerik çubuğun altına girdi (shell-check ölçtü). Değerler iki kipte de aynı; telefondaki sekme çubuğu
   payı (aşağıdaki @media) YALNIZ klasik kipte, çünkü yeni kabukta sekme çubuğu yok. */
#app {
  --hey-bar-h: 54px;    /* ÖLÇÜLDÜ (dokunmatik girdi 16px tabanıyla). Tahmin 50 idi ve
                           içerik payı 4px eksik kalıyordu. */
  --hey-bar-gap: 12px;  /* bar ↔ ada tabbar — ölçülen görünür aralık ~10px (çubuğun
                           kenarlığı yüksekliğe ekleniyor) */
  --hey-dock-bottom: 20px;
  /* Ada tabbar'ın alt payı YARIYA indi (Ersin: "mobilde çok fazla boşluk var").
     DS: `calc(inset + env(safe-area-inset-bottom))` = 12 + 34 = 46px iPhone'da.
     Yarısı: 6 + 17 = 23px. Güvenli alan payı SIFIRLANMIYOR, yarılanıyor —
     tamamen kaldırmak çubuğu ana ekran göstergesinin üstüne bindiriyor. */
  /* `max(10px, …)` tabanı: headless ölçümde güvenli alan payı 0 ve formül 6px'e
     düşüyor — çentiksiz cihazlarda (Android jest çubuğu olmayan, masaüstü dar
     pencere) 6px fazla sıkı. iPhone'da env ≈ 34px → 6 + 17 = 23px, yani istenen
     yarı değer; tabandan etkilenmiyor. */
  --hey-tabbar-bottom: max(10px, calc(var(--re-tabbar-inset) / 2 + env(safe-area-inset-bottom) / 2));
}

/* Ada tabbar `fixed` — DS'te `absolute`. Ersin, 2026-08-21: *"içerik kısayken
   ekranı scroll edersem prompt bar sabit kalıyor ama tab bar ekranla birlikte
   kayıyor"*. Sebep ölçüldü: DS `position:absolute` veriyor (konumu
   `.re-shell-body`ye göre), benim dock ise `fixed` (viewport'a göre). Kabuk
   yüksekliği viewport'a eşit olduğu için DURAĞAN hâlde üst üste geliyorlar; ama
   doküman esnediğinde (iOS rubber-band) `absolute` olan dokümanla birlikte
   kayıyor, `fixed` olan kalıyor → iki çubuk farklı davranıyor.
   İkisi de `fixed`: aynı refleks. DS'e bildirildi (gaps § 9). */
/* `position: fixed` KALDIRILDI (2026-08-21): DS `gap-v6`de `.re-app .re-tabbar-float`
   olarak geldi. Bağımsız ada `absolute` kalıyor (docs'un telefon çerçevesi demosunda
   `fixed` transform'lu ataya kaçıyor) — biz `re-app` kullandığımız için DS'ten
   alıyoruz. Tarihçe: gaps § 9.
   `bottom` KALIYOR: alt boşluğun yarıya indirilmesi bir DS hatası değil, ürün
   kararı (Ersin, 2026-08-21). DS varsayılanı 12px + tam güvenli alan payı. */
.re-tabbar-float {
  bottom: var(--hey-tabbar-bottom);
  /* Sekme sayısı — DS'in tüketiciye bıraktığı TEK knob. Beşinci sekme eklenirse
     BURASI değişir; eskiden aynı sayı iki formülde elle yazılıydı. */
  --re-tabbar-count: 4;
}

/* Doküman esnemesi (rubber-band) KAPALI. Sabit çubuklar viewport'a çakılı olduğu
   için arka planın kayması yalnız sürüklenme hissi veriyordu, hiçbir işe
   yaramıyordu. Kaydırma zaten `.re-main` içinde. Aşağı çekme jesti artık
   uygulamanın kendi tazeleme jesti (hey-ptr). */
html,
body {
  overscroll-behavior: none;
  /* Çift dokunuşla yakınlaştırma. `manipulation` = "auto eksi çift-dokunuş":
     kaydırma ve İKİ PARMAKLA yakınlaştırma çalışmaya devam eder.
     ⚠ `maximum-scale`/`user-scalable=no` YAZILMAZ — onlar pinch'i de öldürür ve
     kullanıcının açıkça korumak istediği şey o (DS v6 §V6-8 de yasaklıyor).

     ⚠ BU KURAL BİR KEZ SİLİNDİ VE GERİLEME OLDU (89dd866, 2026-08-21). Gerekçem
     "DS'e geçti: `.re-app{touch-action:manipulation}`" idi. Yanlıştı: DS property'yi
     KABUĞA verdi, doküman öğesine değil — ve `touch-action` miras alınmayan bir
     property, yani `html`/`body` `auto` kalıyor. Ölçüldü (2026-08-23, silindikten
     iki gün sonra): html auto · body auto · .re-main auto · tabbar auto · dock auto,
     yalnız `.re-app` manipulation. İçerik `.re-main` içinde olduğu için çift dokunma
     fiilen açıktı. `html` en dışta olduğu için jesti orada kesmek gerekiyor.
     Kullanıcının kalıcı kuralı: `_labs/STACK.md § Arayüz tutarlılığı`. */
  touch-action: manipulation;
}

/* MOBİLDE dock ada tabbar'ın ÜSTÜNDE: onun alt payı + yüksekliği + aralık.
   ⚠ Bu blok bir kez silindi (2026-08-21, PTR CSS'ini temizlerken aralığı fazla
   geniş kestim) ve dock masaüstü değerinde (20px) kalıp tabbar'ın ARKASINA düştü —
   tabbar z-index 30, dock 25. Proje sınıfı denetimi bunu YAKALAMADI çünkü kural
   yalnız custom property yazıyor, sınıf kaybolmuyor. Doğrulaması ölçümde:
   `scripts/probes/dock-tabbar.js`. */
@media (max-width: 1023px) {
  /* `#app.re-app`: yukarıdaki `#app` tanımını EZEBİLMESİ için (1,1,0) — `.re-app` tek başına (0,1,0) kalıp
     klasik kipte de telefonda çubuğu sekme çubuğunun ARKASINA düşürürdü. */
  #app.re-app {
    --hey-dock-bottom: calc(var(--hey-tabbar-bottom) + var(--re-tabbar-h) + var(--hey-bar-gap));
  }
}

/* YENİ KABUK (O2): dock `re-shell-body`ye göre konumlanıyor, viewport'a göre DEĞİL. `fixed; left:0; right:0`
   kenar menüsünü de kapsıyor ve `container-md` VIEWPORT'ta ortalanıyordu — masaüstünde çubuk içerik
   sütunuyla hizasız kalırdı. `re-shell-body` DS'te `position:relative` ve yüksekliği viewport'a eşit
   (`re-shell` 100dvh), yani alt kenar aynı yer. */
.re-shell .hey-prompt-dock {
  position: absolute;
}

/* SF1: the new shell's footer is a pinned 44px bar at the bottom of `re-shell-body` (DS `re-footer`) — the
   dock's own bottom edge. The dock rides ABOVE it: `re-main` already ends above the footer (flex column),
   so lifting the dock by the footer's height keeps the content ↔ dock gap (PB1, `--re-main-clear`) as is.
   ⚠ `44px * --density-mult` is the DS's `.re-footer { height }`, repeated here; `scripts/shell-check.mjs`
   measures the footer ↔ dock gap so a DS change shows. The footer is hidden ≤ 860px (DS: drawer shell). */
@media (min-width: 861px) {
  .re-shell-body:has(> .re-footer) > .hey-prompt-dock {
    bottom: calc(var(--hey-dock-bottom) + 44px * var(--density-mult, 1));
  }
}

.hey-prompt-dock {
  position: fixed;
  left: 0; right: 0;
  bottom: var(--hey-dock-bottom);
  /* Tabbar z-index 30 — dock ONUN ALTINDA kalmalı, yoksa ada çubuğun üstüne biner. */
  z-index: 25;
  /* Şeridin boş kalan yanları tıklamayı YEMESİN: altındaki içerik tıklanabilir
     kalıyor, yalnız barın kendisi olayları alıyor. */
  pointer-events: none;
}
.hey-prompt-dock > .container { pointer-events: auto; }

.hey-prompt-dock [data-composer] {
  border-color: var(--border-elevated);
  box-shadow: var(--shadow-lg);
}

/* İçerik dock'un ALTINA girmesin — pay DS'in (`--re-main-clear`, Redev UI v0.80.1, PB1).
   Biz yalnız dock'un alt kenardan ÜST kenarına olan mesafesini veriyoruz (çentik payı dahil,
   `--hey-dock-bottom` telefonda sekme çubuğunu da içeriyor). DS üstüne 16px koyup sayfa sonu
   payıyla, sekme çubuğu ve FAB payıyla `max` alıyor — +20px YAZILMAZ.
   ⚠ Önceki hâli `re-main`in `padding-bottom`unu doğrudan yazıyordu ve katmansız olduğu için DS'i
   eziyordu (`ds-inventory` saymıyordu: seçici DS'inkinden farklı). v0.80.0'da DS'in tabbar/FAB
   kuralı bu değişkeni formüle katmıyordu ve tarif etkisizdi (içerik dock'un altına giriyordu);
   v0.80.1 düzeltti. Değişmez ölçümle korunuyor: `scripts/probes/dock-clearance.js`. */
.re-shell-body:has(> .hey-prompt-dock) {
  --re-main-clear: calc(var(--hey-dock-bottom) + var(--hey-bar-h));
}

/* Araç durumu — akış sırasında "neden bekliyorum"un cevabı. Baloncuk DEĞİL:
   geçici bir durum satırı, sohbet geçmişine girmiyor. */
.hey-tool-status {
  align-self: flex-start;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 10px; border-radius: var(--radius-full, 999px);
  background: color-mix(in srgb, var(--brand) 10%, var(--card));
  color: var(--brand);
  font-size: calc(0.75rem * var(--font-scale));
}

/* `.re-pull { z-index: 21 }` KALDIRILDI (2026-08-21): DS v0.9.2'de `re-pull`
   z-index 30 oldu — `re-tabbar-float`ın da bulunduğu "uygulama kabuğu overlay"
   katmanı. Teşhis doğruydu (20/20 eşitliği + başlığın DOM'da sonra gelmesi +
   opak zemin) ama sayıyı DS seçti. gaps § 11 kapandı. */

/* ── Aşağı çekip tazele → DS'E GEÇTİ (2026-08-21, gap-v6 §V6-11) ──────────
   `re-pull-host` / `re-pull` / `re-pull-badge` / `re-pull-icon` + durum sınıfları
   DS'te. Yerel CSS'in tamamı (~40 satır) silindi.
   İlk raporumda "DS bu davranışı ifade edemiyor" demiştim; yarısı BAYAT VENDOR
   kopyasından kaynaklıydı (açı knob'ı zaten vardı, ben eski dosyayı okuyordum),
   yarısı gerçek boşluktu (bırakınca kaldığı yerden devam) ve DS onu da kapattı.
   Ders: "DS'te yok" iddiası ancak TAZE vendor kopyasıyla kurulabilir.

   Bize kalan yalnız jest (`app.js § bindPullToRefresh`) — @redevme/ui hiç runtime
   JS yayınlamıyor, davranışı tüketici sürüyor. Sürülen knob'lar:
   `--_pull-y` (mesafe) · `--_pull-o` (opaklık) · `--re-pull-rotate` (açı=mesafe) ·
   `--re-pull-spin-dur` + `--re-pull-spin-delay` (bırakınca kaldığı yerden).
   `prefers-reduced-motion` DS'te bedava geldi — bizde hiç yoktu. */

/* ── Hafıza: konuya göre gruplanmış kart ─────────────────────────────────
   Aynı konuya ait satırlar tek kartta. VERİDE birleşmiyorlar (her satırın kendi
   zamanı, kaynağı, "unut" düğmesi var) — birleştirmek tarihçeyi ve tek tek silme
   imkânını öldürürdü. Ersin, 2026-08-21: "tek satır görünse daha iyi olmaz mı
   diye düşündüm ama neyi ne zaman öğrendiğini logladığı için bir history oluyor". */
.hey-mem-group .hey-mem-fact {
  display: flex; align-items: flex-start; gap: var(--re-space-2);
  padding-top: 2px;
}
/* İkinci ve sonraki satırlar arasında ince ayırıcı: aynı konunun kaç ayrı
   bilgisi olduğu görünsün, ama kart bölünmüş gibi durmasın. */
.hey-mem-group .hey-mem-fact + .hey-mem-fact {
  margin-top: 6px; padding-top: 8px;
  border-top: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
}
.hey-mem-fact-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }

/* AI mührü DS'e geçti: `re-ai-mark` (v0.57.0). Yerel `hey-ai-mark` silindi —
   DS'inki `em` tabanlı, yoğunluk ve font ölçeğini kendisi takip ediyor. */


/* AI kartının şeridi · ambient ışığı · mührü ve içerik düzlemi: HEPSİ DS'te
   (v0.58.0 `re-edge` + `re-glow` + `re-ai-mark`, v0.57.0 AI provenance yüzeyi).
   Buradaki dört yerel kural ve `.hey-ai-card > :not(.re-glow)` z-index borcu
   (gap v35 §2) silindi — DS `.re-glow ~ *` ile aynı işi bir kez yapıyor. */
/* Hafta kartındaki alt grup ayırıcısı — üst çizgi + üst dolgu. DS'in
   `re-divider`ı `<hr>` için, bu ise bir bloğun ÜSTÜNE çizgi koyuyor. Tek property
   çifti olduğu için component talebi değil. */
.hey-week-items { border-top: 1px solid var(--border); padding-top: var(--re-space-3); }

/* Gün şeridi — gövde DS'in `re-cal-wday`ı. Yerelde KALAN iki şey ve sebepleri:
   · `.sel` SEÇİLİ GÜN: DS'te `re-cal-wday.today` var (bugünün tarihini pill yapıyor)
     ama SEÇİLİ gün diye bir durum yok — hafta şeridinde gezinen bir tüketici için
     gerekli, gap raporunda.
   · `.hey-wday` konumlandırma: çakışma uyarısı köşeye mutlak yerleşiyor, o yüzden
     kabın `position: relative` olması gerekiyor; DS `re-cal-wday`e onu yazmıyor. */
.hey-wday { position: relative; border: 1px solid transparent; border-radius: var(--radius); text-decoration: none; }
.hey-wday.today { border-color: color-mix(in srgb, var(--primary) 45%, transparent); }
.hey-wday.sel { background: color-mix(in srgb, var(--primary) 12%, var(--card)); border-color: var(--primary); }
.hey-wday-warn { position: absolute; top: 3px; right: 3px; color: var(--danger, var(--destructive)); }

/* Giriş kapısının tema düğmesi — kapı kabuğun DIŞINDA, yani künyedeki tema düğmesi yok.
   Sabit köşe; çentik payı elle, çünkü navbar yok (kanonik `contacts` `ct-gate-theme`). */
.hey-gate-theme { position: fixed; top: calc(10px + env(safe-area-inset-top)); right: 12px; z-index: 10; }
