/* HuzurAstro tanıtım sitesi v2 — sayfaya özel katman.
   Nocturne token/bileşen kütüphanesi _ds/nocturne-.../styles.css'ten gelir (link, index.html
   <head>); burası yalnız o kütüphanenin kapsamadığı sayfa düzeni (hero, bölümler, interaktif
   demo, fiyat kartları, form) içindir. Renkler mümkün olduğunca var(--color-*) token'larından
   okunur — düz renk kodu yalnız token setinde karşılığı olmayan, sayfaya özel koyu/açık
   yüzeyler için (aşağıdaki ek :root bloğu) kullanılır. */

:root {
  /* dc.html taslağındaki koyu-yüzey/tarayıcı-çerçevesi tonları — nocturne token setinde
     karşılığı yok, burada sayfaya özel ek olarak tanımlanır. */
  --dc-dark-card: #1b1d2b;
  --dc-dark-card-2: #202233;
  --dc-dark-border: #292b31;
  --dc-dark-border-2: #3f424d;
  --dc-dark-border-3: #595d6c;
  --dc-section-glow: radial-gradient(900px 420px at 14% -20%, #2b2741, transparent 60%);
  --max: 1180px;
}

*, *::before, *::after { box-sizing: border-box; }
html {
  scroll-behavior: smooth;
  /* Lightbox açılırken `body`ye `overflow: hidden` biniyor ve KLASİK kaydırma
     çubuğu olan platformlarda (Windows, "kaydırma çubuklarını her zaman
     göster" seçili macOS) çubuk kaybolup sayfa 15px genişliyor — görsel
     büyütülürken altındaki her şey bir sıçrıyor. Şerit kalıcı olarak
     ayrılıyor. Üst üste binen kaydırma çubuğu olan platformlarda etkisiz. */
  scrollbar-gutter: stable;
}
body {
  margin: 0;
  background: var(--color-neutral-200);
  color: var(--color-neutral-900);
  font-family: var(--font-body);
  font-size: 15px;
  line-height: 1.55;
}
img { display: block; max-width: 100%; }
.container { max-width: var(--max); margin: 0 auto; padding: 0 28px; }
.skip-link {
  position: absolute; left: -999px; top: 0; z-index: 100;
  background: var(--color-accent-400); color: var(--color-accent-900);
  padding: 10px 16px; border-radius: 0 0 8px 0; font-weight: 600;
}
.skip-link:focus { left: 0; }

section { position: relative; }
.section-dark {
  background: var(--dc-section-glow), var(--color-bg);
  color: var(--color-text);
  border-bottom: 1px solid var(--color-divider);
}
.section-light { background: var(--color-neutral-200); color: var(--color-neutral-900); }
.section-pad { padding: 68px 0; }
.section-pad-sm { padding: 44px 0; }

.eyebrow {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 13px; border-radius: 999px; font-size: 11.5px;
  letter-spacing: 0.05em;
}
.section-dark .eyebrow { border: 1px solid var(--color-accent-800); color: var(--color-accent-300); }
.section-light .eyebrow { border: 1px solid var(--color-accent-400); color: var(--color-accent-700); }

.section-head { max-width: 640px; margin-bottom: 40px; }
.section-head h2 { font-size: 32px; margin: 16px 0 10px; letter-spacing: -0.02em; }
.section-head .lede { margin: 0; font-size: 14.5px; color: var(--color-neutral-600); }
.section-dark .section-head .lede { color: color-mix(in srgb, var(--color-text) 62%, transparent); }
.section-light .section-head h2 .accent { color: var(--color-accent-700); }
.section-dark .section-head h2 .accent { color: var(--color-accent-400); }

/* ── header / nav ───────────────────────────────────────────────────── */
.site-header {
  position: sticky; top: 0; z-index: 40;
  background: color-mix(in srgb, var(--color-bg) 88%, transparent);
  backdrop-filter: blur(12px);
  border-bottom: 1px solid var(--color-divider);
}
.nav-inner {
  display: flex; align-items: center; gap: 36px;
  /* `padding` KISAYOLU YASAK: bu eleman aynı zamanda `.container` ve kısayol
     onun yatay dolgusunu (28px, ≤640'ta 18px) SIFIRLIYOR. Sonucu ölçüldü:
     başlık şeridinin içeriği sayfanın geri kalanından 56px genişti — 1280'de
     marka gövde metninden 28px solda, CTA 28px sağda duruyor; 1180'in altında
     ise marka pencerenin sol kenarına, "Demo Talep Et" ile hamburger sağ
     kenarına sıfır boşlukla yapışıyordu. Yalnız dikey eksene yazılıyor. */
  padding-block: 13px;
}
/* MARKA SIKIŞAN TARAFTIR — `flex: none` DEĞİL.
   2026-09-10'da canlıda hamburger'ın viewport'un DIŞINA çıkmasının yapısal
   nedeni buydu: marka hiç küçülmediği için satıra sığmayan her piksel, flex
   sırasının SONUNDAKİ `.nav-cta`ya (yani hamburger'a) yıkılıyordu. Ölçüm:
   386px pencerede `.hamburger` sol=398 sağ=436 — tamamen ekran dışında,
   görünmez ve DOKUNULAMAZ; menüyü açmanın tek yolu kalmıyordu.
   Kırılım aritmetiği (1080/900/640/420 kademeleri) doğru hesaplandığında
   sorun görünmez, ama tek bir yanlış varsayım (yazı tipi, daha uzun marka
   metni, unutulan bir kademe) yine hamburger'ı dışarı iter. Bu yüzden
   düzeltme kademelere değil, sıkışma YÖNÜNE yazılıyor: yer varken görüntü
   birebir aynı, yer yokken kısalan taraf marka. */
.brand {
  display: flex; align-items: center; gap: 10px; color: var(--color-text); text-decoration: none;
  flex: 0 1 auto; min-width: 0;
}
.brand-mark {
  width: 36px; height: 36px; border-radius: 8px; flex: none;
  background: linear-gradient(150deg, var(--color-accent-800), var(--color-accent-900));
  border: 1px solid var(--color-accent-600);
  display: grid; place-items: center; color: var(--color-accent-400);
}
.brand-mark svg { width: 19px; height: 19px; }
/* Marka sıkışınca metin ÜÇ NOKTAYLA kısalır, taşmaz. `.brand-name` ile
   `.brand-sub` aynı satırda duran iki inline span (ölçüldü: 1280'de
   name 124-210.8, sub 214.8-352.8), bu yüzden kırpma tek bir blok olan
   `.brand-text` üzerinden yapılıyor. Logo `.brand-mark`'ta `flex: none`
   olduğu için en dar hâlde bile duruyor. */
.brand-text { line-height: 1.15; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.brand-name { font-size: 16.5px; font-weight: 600; letter-spacing: -0.01em; }
.brand-sub { font-size: 10.5px; letter-spacing: 0.04em; color: color-mix(in srgb, var(--color-text) 55%, transparent); }

.nav-links { display: flex; align-items: center; gap: 24px; margin-left: 12px; font-size: 13.5px; flex: none; }
.nav-links a {
  color: color-mix(in srgb, var(--color-text) 68%, transparent);
  text-decoration: none; padding-bottom: 3px; border-bottom: 1.5px solid transparent;
  /* Menü başlıkları ASLA iki satıra kırılmaz: "Sistemi / İncele", "Mobil /
     Uygulama" kırılması şeridi iki katına çıkarıyordu. Artık sıkışma marka
     tarafına gidiyor (yukarı bak), menü olduğu gibi kalıyor. */
  white-space: nowrap;
}
.nav-links a:hover { color: var(--color-text); }

/* `flex: none` BURADA zorunlu: menüyü açan tek düğme bu kutunun içinde ve
   sıkışmanın bedelini asla o ödemez. */
.nav-cta { margin-left: auto; display: flex; align-items: center; gap: 10px; flex: none; }
.nav-cta .btn-primary { flex: none; }
.hamburger {
  /* 42px HER genişlikte: hamburger yalnız ≤900'de görünür, yani hep dokunmatik
     bir bağlamda — 38px'lik hedef parmakla ıskalanıyordu. Eskiden yalnız
     ≤640'ta 42'ye çıkıyordu, 641-900 bandı 38'de kalmıştı. */
  display: none; width: 42px; height: 42px; border-radius: 8px; flex: none;
  border: 1px solid var(--color-divider); background: transparent; color: var(--color-text);
  align-items: center; justify-content: center; cursor: pointer;
}
.mobile-menu {
  display: none; flex-direction: column; gap: 2px;
  border-top: 1px solid var(--color-divider);
  padding: 8px 0 14px;
}
.mobile-menu.open { display: flex; }
.mobile-menu a {
  color: var(--color-text); text-decoration: none; font-size: 14px;
  padding: 10px 28px;
}
.mobile-menu a:hover { background: color-mix(in srgb, var(--color-text) 6%, transparent); }

/* CTA'nın ikonu masaüstünde GİZLİ: dar ekranda yazının yerini alması için
   var, geniş ekranda düğmenin görüntüsünü değiştirmesin. */
.nav-cta .btn-primary svg { display: none; }

/* ── başlık şeridinin iki kademesi ──────────────────────────────────────
   Ölçüm (Chrome, 15px taban): tam menü satırı marka 275 + 12 (nav-links
   margin) + 36 + menü 462 + 36 + CTA 137 = 958px yer istiyor. Yatay dolgu
   geri geldiğine göre bu ancak 1014px'ten geniş pencerede sığıyor; oysa
   hamburger kırılımı 900'dü. Aradaki 901-1013 bandında satır sığmadığı için
   flex maddeleri EZİYORDU: "Sistemi / İncele", "Mobil / Uygulama",
   "Demo Talep / Et" ikişer satıra kırılıp şerit iki katına çıkıyordu —
   kullanıcının "menü responsive değil" dediği hâl tam olarak buydu.
   Boşluk 1080'de bir kademe daraltılıp marka alt satırı feda ediliyor:
   133 + 24 + menü 438 + 24 + 137 = 756px, 901'de bile 89px payla sığıyor. */
@media (max-width: 1080px) {
  .brand-sub { display: none; }
  .nav-inner { gap: 24px; }
  .nav-links { gap: 18px; margin-left: 0; }
}

@media (max-width: 900px) {
  .nav-links { display: none; }
  .hamburger { display: inline-flex; }
}

/* Yazı 420px'e kadar duruyor. Eskiden 900px'in altında yazı gizleniyor ve
   geriye İÇİ BOŞ bir mor hap kalıyordu — sağ üstte hiçbir şey söylemeyen bir
   boşluk. Yazının gerçekten sığmadığı yerde (marka 133 + 14 + hap 137 + 10 +
   hamburger 42 = 336px, 420'nin dolgusundan sonra kalan 384'e sığar; 360'ta
   kalan 324'e sığmaz) hap boş kalmasın diye yerini takvim ikonu alıyor. */
@media (max-width: 420px) {
  .nav-cta .btn-primary span { display: none; }
  .nav-cta .btn-primary svg { display: block; }
}

/* ── buttons (extends _ds .btn with a couple of page-only variants) ─── */
.btn { font-size: 14px; padding: 12px 20px; border-radius: 8px; }
.btn svg { width: 17px; height: 17px; }
.btn-on-dark { border: 1px solid var(--color-divider); color: var(--color-text); }
.btn-on-dark:hover { border-color: color-mix(in srgb, var(--color-text) 45%, transparent); }
.btn-lg { padding: 13px 22px; font-size: 14.5px; }
.btn-block-mobile { width: 100%; justify-content: center; }

/* ── hero ───────────────────────────────────────────────────────────── */
.hero { padding: 60px 0 68px; }
.hero-inner { display: grid; grid-template-columns: 0.86fr 1.14fr; gap: 44px; align-items: start; }
.hero-copy { max-width: 460px; }
.hero h1 { font-size: 48px; line-height: 1.1; letter-spacing: -0.025em; margin: 18px 0 0; font-weight: 500; }
.hero h1 .accent { color: var(--color-accent-400); }
.hero-lede { margin: 18px 0 0; max-width: 460px; font-size: 15.5px; color: color-mix(in srgb, var(--color-text) 65%, transparent); }
.hero-actions { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 28px; }
.hero-note {
  display: flex; align-items: center; gap: 8px; margin-top: 20px; font-size: 12px;
  color: color-mix(in srgb, var(--color-text) 50%, transparent);
}
.hero-note svg { width: 15px; height: 15px; flex: none; }

.trust-row {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-top: 40px; max-width: 420px;
}
.trust-item { text-align: center; }
.trust-icon {
  width: 44px; height: 44px; margin: 0 auto 8px; border-radius: 10px;
  border: 1px solid var(--dc-dark-border-2); background: var(--dc-dark-card);
  display: grid; place-items: center; color: var(--color-accent-400);
}
.trust-icon svg { width: 19px; height: 19px; }
.trust-label { font-size: 11px; color: color-mix(in srgb, var(--color-text) 62%, transparent); }

/* ── hero panel screenshots (stacked, offset) ──────────────────────────
   Üç ekran bir boyut merdiveni oluşturuyor: dashboard en büyük, kabul
   listesi ondan küçük, vital raporu en küçük. Merdiven ilgi sırasını
   veriyor — üçü aynı boyutta olsaydı göz nereye bakacağını bilemezdi.
   Her biri bir <button>: tıklanınca lightbox açılıyor (klavye desteği
   div + tabindex yerine gerçek button'dan bedava geliyor).            */
.hero-visual { display: flex; flex-direction: column; gap: 16px; align-items: stretch; }
.hero-shot {
  position: relative; display: block; width: 100%;
  font: inherit; color: inherit; text-align: left; cursor: zoom-in;
  border-radius: 16px; border: 1px solid var(--dc-dark-border-2); background: var(--dc-dark-card);
  padding: 8px; box-shadow: 0 0 0 1px var(--dc-dark-border-3), 0 24px 60px rgba(0,0,0,0.55);
  overflow: hidden;
  transition: transform 0.22s ease, box-shadow 0.22s ease, border-color 0.22s ease;
}
.hero-shot img { display: block; width: 100%; height: auto; border-radius: 10px; }
.hero-shot:hover, .hero-shot:focus-visible {
  transform: translateY(-3px); border-color: var(--color-accent-400);
  box-shadow: 0 0 0 1px var(--color-accent-400), 0 28px 68px rgba(0,0,0,0.62);
}
.hero-shot:focus-visible { outline: 2px solid var(--color-accent-400); outline-offset: 3px; }
.hero-shot-zoom {
  position: absolute; right: 16px; bottom: 16px; width: 34px; height: 34px;
  border-radius: 9px; display: grid; place-items: center;
  background: rgba(27,29,43,0.82); border: 1px solid var(--dc-dark-border-3);
  color: var(--color-accent-400); opacity: 0; transition: opacity 0.22s ease;
  -webkit-backdrop-filter: blur(4px); backdrop-filter: blur(4px);
}
.hero-shot-zoom svg { width: 17px; height: 17px; }
.hero-shot:hover .hero-shot-zoom, .hero-shot:focus-visible .hero-shot-zoom { opacity: 1; }

/* ── hero karuseli ────────────────────────────────────────────────────
   Üç ekran ARTIK ÜST ÜSTE DEĞİL: eski boyut merdiveni (%100/%90/%81,
   negatif margin'lerle basamak) kaldırıldı — slaytta üç görsel aynı
   çerçevede, aynı ölçüde döndüğü için merdivenin anlatacağı bir şey
   kalmıyordu. Geçiş display + kısa bir fade ile; slaytlar akışta
   durduğu için çerçeve yüksekliği aktif görselden geliyor, sabit bir
   aspect-ratio uydurmaya gerek yok. */
.hero-carousel { position: relative; }
.hero-carousel:focus-visible { outline: 2px solid var(--color-accent-400); outline-offset: 6px; border-radius: 18px; }
.hero-slide { display: none; }
.hero-slide.is-active { display: block; animation: heroSlideIn 0.32s ease; }
/* Üç slaytın KAYNAK ORANI aynı değil: panel-dashboard 2556×1322 (1,933),
   diğer ikisi 1512×801 (1,888). Slaytlar akışta olduğu için çerçevenin
   yüksekliğini aktif görsel belirliyordu ve her dönüşte ~8px uzayıp
   kısalıyordu — otomatik dönme 5,5 saniyede bir sayfayı zıplatıyordu
   (kullanıcının "ilk açılışta kayma" dediği ikinci kaynak). Kutu çoğunluğun
   oranına sabitlendi; `contain` hiçbir ekran görüntüsünü KIRPMIYOR, oranı
   tutmayan tek slayt 4'er piksel koyu bantla ortalanıyor.
   Görsel değişirse bu oran da gözden geçirilmeli. */
.hero-slide .hero-shot img { aspect-ratio: 1512 / 801; object-fit: contain; }
@keyframes heroSlideIn { from { opacity: 0; } to { opacity: 1; } }

/* Slayt açıklaması — HTML'de slaytın İÇİNDE durur, bu yüzden görselle
   birlikte görünüp kaybolur: metnin bir slayt geride kalması mümkün değil
   ve ekran okuyucu görselle metni tek parça olarak okur. min-height, üç
   metnin en uzunu kadar yer ayırır ki slayt değişince karusel zıplamasın. */
.hero-slide-caption { margin-top: 14px; min-height: 62px; }
.hero-slide-caption h3 {
  margin: 0 0 4px; font-size: 14.5px; font-weight: 500; color: var(--color-text);
}
.hero-slide-caption p {
  margin: 0; font-size: 12.5px; line-height: 1.55;
  color: color-mix(in srgb, var(--color-text) 58%, transparent);
}

.hero-carousel-controls {
  display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 16px;
}
.hero-nav {
  flex: none; width: 30px; height: 30px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--dc-dark-border-2); background: var(--dc-dark-card);
  color: var(--color-accent-400); display: grid; place-items: center;
  transition: background-color .15s ease, border-color .15s ease, transform .15s ease;
}
.hero-nav svg { width: 14px; height: 14px; }
.hero-nav:hover { border-color: var(--color-accent-400); }
.hero-nav:active { transform: scale(0.94); }
.hero-nav:focus-visible { outline: 2px solid var(--color-accent-400); outline-offset: 2px; }
.hero-dots { display: flex; align-items: center; gap: 7px; }
.hero-dot {
  width: 6px; height: 6px; padding: 0; border: none; border-radius: 999px; cursor: pointer;
  background: var(--dc-dark-border-3); transition: background-color .15s ease, transform .15s ease;
}
.hero-dot.is-active { background: var(--color-accent-400); transform: scale(1.4); }
.hero-dot:focus-visible { outline: 2px solid var(--color-accent-400); outline-offset: 3px; }

/* ── tıklanınca büyüyen ekran görüntüleri (galeri, canlı sistem, telefon)
   Tek kalıp: her biri gerçek bir <button data-zoom>, hover/odakta aynı
   "Büyüt" rozeti. initLightbox zaten [data-zoom] taşıyan HER öğeyi
   bağlıyor — yeni görsel eklemek için JS'e dokunmak gerekmiyor. */
.shot-btn {
  position: relative; display: block; width: 100%; margin: 0; padding: 0;
  border: 0; background: none; font: inherit; color: inherit; cursor: zoom-in;
}
.shot-zoom {
  position: absolute; right: 10px; bottom: 10px;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 10px; border-radius: 999px;
  background: rgba(16, 17, 26, 0.82); border: 1px solid var(--dc-dark-border-3);
  color: #f2f2f7; font-size: 11.5px; letter-spacing: 0.02em;
  opacity: 0; transition: opacity 0.15s ease; pointer-events: none;
}
.shot-zoom svg { width: 13px; height: 13px; }
.shot-btn:hover .shot-zoom, .shot-btn:focus-visible .shot-zoom { opacity: 1; }
.shot-btn:focus-visible { outline: 2px solid var(--color-accent-700); outline-offset: 3px; }
@media (hover: none) { .shot-zoom { opacity: 1; } }
/* Telefon çerçevesi içinde rozet küçülür — 222px'lik ekranda normal boyu
   görselin yarısını kaplıyordu. */
.phone-shot-btn { position: absolute; inset: 0; height: 100%; }
.phone-shot-btn .shot-zoom { right: 6px; bottom: 6px; padding: 3px 7px; font-size: 9.5px; gap: 4px; }
.phone-shot-btn .shot-zoom svg { width: 10px; height: 10px; }

/* ── lightbox (hero ekran görüntüleri için tam ekran önizleme) ────────
   Harici kütüphane yok; ESC ve dışına tıklama ile kapanıyor.          */
.lightbox {
  position: fixed; inset: 0; z-index: 200;
  display: grid; place-items: center; padding: 32px;
  background: rgba(10,11,18,0.88);
  -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  animation: lightbox-in 0.18s ease;
}
/* `display: grid` tarayıcının [hidden] kuralını (display:none) EZER —
   kapalı hâli açıkça yazılmazsa katman sayfa açılır açılmaz görünür. */
.lightbox[hidden] { display: none; }
@keyframes lightbox-in { from { opacity: 0; } to { opacity: 1; } }
.lightbox-figure { margin: 0; max-width: 100%; max-height: 100%; display: flex; flex-direction: column; gap: 12px; }
.lightbox-img {
  display: block; max-width: 100%;
  /* Mobil tarayıcıda 100vh adres çubuğunu saymaz ve büyütülen görselin alt
     kenarı ekranın dışında kalır; dvh gerçek görünür yüksekliği verir.
     vh satırı, dvh desteklemeyen eski tarayıcılar için önce yazıldı. */
  max-height: calc(100vh - 116px);
  max-height: calc(100dvh - 116px);
  width: auto; height: auto; object-fit: contain;
  border-radius: 12px; border: 1px solid var(--dc-dark-border-3);
  box-shadow: 0 30px 80px rgba(0,0,0,0.6); background: var(--dc-dark-card);
}
.lightbox-caption {
  text-align: center; font-size: 13px; line-height: 1.5;
  color: color-mix(in srgb, var(--color-text) 74%, transparent);
}
.lightbox-close {
  position: absolute; top: 20px; right: 22px; width: 42px; height: 42px;
  display: grid; place-items: center; cursor: pointer;
  border-radius: 11px; border: 1px solid var(--dc-dark-border-3);
  background: var(--dc-dark-card); color: var(--color-text);
  transition: border-color 0.2s ease, color 0.2s ease;
}
.lightbox-close svg { width: 20px; height: 20px; }
.lightbox-close:hover, .lightbox-close:focus-visible { border-color: var(--color-accent-400); color: var(--color-accent-400); }
body.lightbox-open { overflow: hidden; }
@media (prefers-reduced-motion: reduce) {
  .hero-shot { transition: none; }
  .hero-shot:hover, .hero-shot:focus-visible { transform: none; }
  /* Otomatik dönme JS tarafında da hiç başlamıyor (script.js: prefersReducedMotion). */
  .hero-slide.is-active { animation: none; }
  .lightbox { animation: none; }
}

/* ── screen gallery (real panel screens — vardiya planı, izin akışı) ── */
.screen-gallery { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin-top: 40px; }
.screen-gallery-item { margin: 0; }
.screen-gallery-item img {
  display: block; width: 100%; height: auto; border-radius: 10px;
  border: 1px solid var(--color-neutral-300); box-shadow: 0 10px 24px rgba(41,43,49,0.12);
}
.screen-gallery-item figcaption { margin-top: 10px; font-size: 12.5px; color: var(--color-neutral-600); text-align: center; }

/* ── security box (boxed, sits inside the "canlı sistem" section) ──── */
.security-box {
  margin-top: 34px; border-radius: 14px; border: 1px solid #4c5397;
  background: linear-gradient(110deg, #22254a, #1e2038);
  color: var(--color-text); padding: 26px 30px;
}
.security-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 26px; }
.security-item { display: flex; gap: 13px; }
.security-item svg { width: 25px; height: 25px; flex: none; color: var(--color-accent-400); }
.security-item h4 { margin: 0 0 4px; font-size: 14px; font-weight: 500; }
.security-item p { margin: 0; font-size: 12.5px; color: color-mix(in srgb, var(--color-text) 58%, transparent); }

/* ── module cards ───────────────────────────────────────────────────── */
.card-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; margin-top: 8px; }
.module-card {
  position: relative; border-radius: 14px; border: 1px solid var(--color-neutral-300);
  background: var(--color-neutral-100); padding: 22px; transition: border-color .15s ease;
}
.module-card:hover { border-color: var(--color-accent-400); }
.module-card .icon {
  width: 44px; height: 44px; border-radius: 10px;
  background: color-mix(in srgb, var(--color-accent-500) 12%, transparent);
  border: 1px solid var(--color-accent-400);
  display: grid; place-items: center; color: var(--color-accent-700);
}
.module-card .icon svg { width: 21px; height: 21px; }
.module-card h3 { margin: 16px 0 8px; font-size: 17px; }
.module-card p { margin: 0 0 16px; font-size: 13px; color: var(--color-neutral-700); }
.card-arrow { display: flex; justify-content: flex-end; color: var(--color-accent-700); }
.card-arrow svg { width: 16px; height: 16px; }

/* ── interactive demo ──────────────────────────────────────────────── */
/* Gezginin kendi başlığı — "Canlı Sistem Görünümü" ibaresi metin bloğundan
   BURAYA taşındı: koyu kutunun etiketi gibi dursun diye. Sayfadaki iki
   "Canlı Sistemi İncele" düğmesi de #demo-shell'e, yani bu sarmalayıcıya
   iniyor — ziyaretçi metni değil doğrudan gezgini görsün. */
.demo-explorer { scroll-margin-top: 90px; }
.demo-explorer > .eyebrow { margin-bottom: 14px; }

.demo-shell {
  display: grid; grid-template-columns: 250px 1fr; gap: 0;
  border-radius: 16px; overflow: hidden;
  border: 1px solid var(--dc-dark-border-2);
  box-shadow: 0 0 0 1px #595d6c, 0 24px 60px rgba(0,0,0,0.55);
}
.demo-tabs {
  list-style: none; margin: 0; padding: 10px; background: var(--dc-dark-card-2);
  border-right: 1px solid var(--dc-dark-border);
  display: flex; flex-direction: column; gap: 3px;
}
.demo-tab {
  display: flex; align-items: center; gap: 10px; width: 100%;
  padding: 8px 11px; border-radius: 8px; border: 1px solid transparent;
  background: transparent; color: color-mix(in srgb, var(--color-text) 65%, transparent);
  font: inherit; font-size: 12.5px; line-height: 1.25; text-align: left; cursor: pointer;
}
.demo-tab svg { width: 16px; height: 16px; flex: none; }
.demo-tab:hover { background: color-mix(in srgb, var(--color-text) 6%, transparent); color: var(--color-text); }
.demo-tab[aria-selected="true"] {
  background: color-mix(in srgb, var(--color-accent-800) 55%, transparent);
  border-color: var(--color-accent-700); color: var(--color-text);
}
.demo-stage { background: var(--dc-dark-card); padding: 22px 24px 26px; min-height: 480px; min-width: 0; }
.demo-stage-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 16px; gap: 12px; flex-wrap: wrap; }
.demo-stage-head h3 { margin: 0; font-size: 18px; color: var(--color-text); }
.demo-module-tag {
  font-size: 10.5px; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--color-accent-300); border: 1px solid var(--color-accent-800);
  border-radius: 999px; padding: 3px 10px;
}
.demo-screen { color: var(--color-text); }
.demo-mobile-select { display: none; }

/* Ekran görüntüsü çerçevesi — gezginin sağ tarafı.
   Tıklanınca sayfanın kendi lightbox'ı açılıyor (script.js: initLightbox),
   o yüzden gerçek bir <button>: klavyeyle de açılabilsin. */
.demo-shot {
  display: block; width: 100%; margin: 0; padding: 0;
  border: 1px solid var(--dc-dark-border-2); border-radius: 10px;
  background: var(--dc-dark-card-2); overflow: hidden;
  position: relative; cursor: zoom-in;
}
/* `hidden` tek başına yetiyor ama ileride .demo-shot'a display verilirse
   sessizce ezilmesin. */
.demo-shot[hidden] { display: none; }
.demo-shot img { display: block; width: 100%; height: auto; }
.demo-shot:focus-visible { outline: 2px solid var(--color-accent-400); outline-offset: 3px; }
.demo-shot-zoom {
  position: absolute; right: 10px; bottom: 10px;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 10px; border-radius: 999px;
  background: rgba(16, 17, 26, 0.82); border: 1px solid var(--dc-dark-border-3);
  color: var(--color-text); font-size: 11.5px; letter-spacing: 0.02em;
  opacity: 0; transition: opacity 0.15s ease;
}
.demo-shot-zoom svg { width: 13px; height: 13px; }
.demo-shot:hover .demo-shot-zoom,
.demo-shot:focus-visible .demo-shot-zoom { opacity: 1; }
@media (hover: none) { .demo-shot-zoom { opacity: 1; } }

.demo-disclaimer {
  margin-top: 18px; font-size: 11.5px; color: color-mix(in srgb, var(--color-text) 45%, transparent);
  display: flex; gap: 7px; align-items: flex-start;
}
.demo-disclaimer svg { width: 13px; height: 13px; flex: none; margin-top: 2px; }

@media (max-width: 760px) {
  .demo-shell { grid-template-columns: 1fr; }
  .demo-tabs { display: none; }
  .demo-mobile-select { display: block; padding: 12px; background: var(--dc-dark-card-2); border-bottom: 1px solid var(--dc-dark-border); }
  .demo-mobile-select select {
    width: 100%; padding: 10px 12px; border-radius: 8px; border: 1px solid var(--dc-dark-border-2);
    background: var(--dc-dark-card); color: var(--color-text); font: inherit; font-size: 13.5px;
  }
  /* Sekme listesi kalkınca sahnenin yüksekliğini yalnız görsel belirlesin —
     480px'lik taban dar ekranda görselin altında koca bir boşluk bırakıyordu. */
  .demo-stage { min-height: 0; padding: 16px 16px 20px; }
}

/* ── mobile / PWA section ──────────────────────────────────────────── */
.mobile-section { background: var(--color-neutral-200); }
.mobile-layout { display: grid; grid-template-columns: 1fr auto; gap: 44px; align-items: center; }
.pwa-badge {
  display: inline-flex; align-items: center; gap: 8px; padding: 5px 13px; border-radius: 999px;
  border: 1px solid var(--color-accent-400); font-size: 11.5px; color: var(--color-accent-700);
}
.pwa-badge svg { width: 14px; height: 14px; }
.mobile-copy h2 { font-size: 30px; margin: 16px 0 10px; letter-spacing: -0.02em; }
.mobile-copy .lede { color: var(--color-neutral-600); font-size: 14.5px; margin: 0 0 20px; }
.mobile-copy ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.mobile-copy li { display: flex; gap: 11px; align-items: flex-start; font-size: 13.5px; color: var(--color-neutral-800); }
.mobile-copy li svg { width: 18px; height: 18px; flex: none; color: var(--color-accent-700); margin-top: 1px; }

.phone-mock {
  --phone-screen-w: 222px;
  --phone-screen-h: 372px;
  --phone-bezel: 14px;
  display: flex; flex-direction: column; align-items: center; gap: 16px;
  margin: 0 auto;
}

/* iPhone shell pinned to a fixed 250×400 outer size (222×372 screen in a
   14px bezel) — a deliberate, non-responsive footprint, not the true
   390:844 device ratio. Drawn in CSS — no product photo, no telif riski.
   Each screen is DRAWN (not a scaled screenshot, see .pwa-screen below) so
   it fills the 222×372 viewport exactly — bottom nav sits flush at the
   frame's bottom edge with no residual gap. */
.phone-showcase { display: flex; align-items: center; gap: 12px; }
.phone-nav {
  flex: none; width: 26px; height: 26px; border-radius: 999px; cursor: pointer;
  border: 1px solid var(--color-neutral-300); background: var(--color-neutral-100);
  color: var(--color-accent-700); display: grid; place-items: center;
  transition: background-color .15s ease, border-color .15s ease, transform .15s ease;
}
.phone-nav svg { width: 12px; height: 12px; }
.phone-nav:hover { border-color: var(--color-accent-400); background: var(--color-neutral-200); }
.phone-nav:active { transform: scale(0.94); }
.phone-nav:focus-visible { outline: 2px solid var(--color-accent-700); outline-offset: 2px; }

.phone-frame {
  position: relative; flex: none;
  width: calc(var(--phone-screen-w) + var(--phone-bezel) * 2);
  height: calc(var(--phone-screen-h) + var(--phone-bezel) * 2);
  height: 500px;
  border-radius: 41px;
  background: var(--dc-dark-border);
  border: 1px solid var(--dc-dark-border-2);
  box-shadow: var(--shadow-lg);
  padding: var(--phone-bezel);
}
.phone-frame-screen {
  position: relative; width: 100%; height: 100%; overflow: hidden;
  border-radius: 30px;
  background: var(--color-neutral-100);
}
.phone-frame-screen:focus-visible { outline: 2px solid var(--color-accent-400); outline-offset: -2px; }
.phone-frame-notch {
  position: absolute; top: var(--phone-bezel); left: 50%; transform: translateX(-50%);
  width: 25%; height: 22px; max-height: 26px;
  background: var(--dc-dark-border); border-radius: 0 0 15px 15px; z-index: 2;
}
.phone-frame-btn { position: absolute; background: var(--dc-dark-border-2); z-index: 1; }
.phone-frame-btn-mute { left: -2px; top: 21%; width: 2px; height: 5%; border-radius: 2px 0 0 2px; }
.phone-frame-btn-vol-up { left: -2px; top: 29%; width: 2px; height: 8%; border-radius: 2px 0 0 2px; }
.phone-frame-btn-vol-down { left: -2px; top: 40%; width: 2px; height: 8%; border-radius: 2px 0 0 2px; }
.phone-frame-btn-power { right: -2px; top: 27%; width: 2px; height: 11%; border-radius: 0 2px 2px 0; }

.phone-slide {
  position: absolute; inset: 0; display: flex; align-items: stretch; justify-content: center;
  opacity: 0; visibility: hidden; transition: opacity .28s ease;
}
.phone-slide.is-active { opacity: 1; visibility: visible; }

/* Gerçek PWA ekran görüntüsü taşıyan slaytlar (2026-08-31) — ÇİZİM .pwa-screen
   yerine gerçek cihaz karesi. Kare oranı (231:500) çerçevenin iç alanına
   (222:472) çok yakın olduğu için object-fit:cover kırpması minimaldir. */
.phone-slide-img {
  width: 100%; height: 100%; object-fit: cover; display: block;
}

.phone-caption { margin: 0; font-size: 13px; font-weight: 500; color: var(--color-neutral-800); min-height: 18px; }

.phone-dots {
  display: flex; flex-wrap: wrap; gap: 6px; justify-content: center;
  max-width: 236px;
}
.phone-dot {
  width: 5px; height: 5px; padding: 0; border-radius: 999px; cursor: pointer;
  border: none; background: var(--color-neutral-300);
  transition: background-color .15s ease, transform .15s ease;
}
.phone-dot.is-active { background: var(--color-accent-700); transform: scale(1.2); }
.phone-dot:focus-visible { outline: 2px solid var(--color-accent-700); outline-offset: 2px; }

/* ── PWA ekranları — koyu temada, telefon ekranı oranında ÇİZİLİR ─────────
   Eskiden buradaki her .phone-slide ~908×1298 (0.70 oran) bir pwa-*.png
   RASTER görseli taşıyordu; 250×400 çerçevenin ekranı 222×372'de (0.60 oran)
   `object-fit: contain` görseli dikeyde ortalıyor, alt navigasyon çubuğunun
   altında boşluk kalıyor, üst menü yukarı kayıyordu. Çözüm görsel değil:
   her ekran HTML/CSS ile, doğrudan 222×372 viewport'u dolduracak şekilde
   ÇİZİLİR (bu sayfanın interaktif panel demosuyla aynı teknik) — böylece
   .pwa-bottomnav her zaman çerçevenin dibinde durur, aspect-ratio uyuşmazlığı
   hiç oluşmaz. Palet public/mobil/mobil.css'in KOYU tema token'larının
   birebir kopyasıdır (mobil kabuğun varsayılan teması zaten koyu — panelin
   Nocturne token'larıyla KARIŞTIRILMAZ, iki ayrı token seti). Ölçek gerçek
   cihazdan çok daha küçük olduğu için yazı tipi boyutları (6.5–9.5px) yalnız
   bu minyatür çizim içindir; gerçek mobil uygulamada böyle küçük değildir. */
.pwa-screen {
  --pwa-bg: #161826;
  --pwa-surface: #232532;
  --pwa-surface-2: #2b2e40;
  --pwa-text: #e9e9ed;
  --pwa-text-dim: #9397ab;
  --pwa-text-dim-2: #75798c;
  --pwa-divider: rgba(233, 233, 237, 0.14);
  --pwa-accent: #9184d9;
  --pwa-accent-soft: rgba(145, 132, 217, 0.18);
  --pwa-accent-text: #cec9f6;
  --pwa-ok: #6fd6a8;
  --pwa-ok-soft: rgba(111, 214, 168, 0.16);
  --pwa-warn: #e0b95c;
  --pwa-warn-soft: rgba(224, 185, 92, 0.16);
  --pwa-crit: #ef7f66;
  --pwa-crit-soft: rgba(239, 127, 102, 0.16);
  width: 100%; height: 100%;
  display: flex; flex-direction: column;
  background: var(--pwa-bg); color: var(--pwa-text);
  font-family: var(--font-body, "Inter", system-ui, sans-serif);
  overflow: hidden;
}

.pwa-topbar {
  flex: none; display: flex; align-items: center; gap: 6px;
  height: 28px; padding: 0 9px; border-bottom: 1px solid var(--pwa-divider);
}
.pwa-topbar__brand {
  flex: none; width: 15px; height: 15px; border-radius: 999px;
  background: var(--pwa-accent-soft); color: var(--pwa-accent-text);
  display: grid; place-items: center;
}
.pwa-topbar__brand svg { width: 9px; height: 9px; }
.pwa-topbar__text { flex: 1; min-width: 0; line-height: 1.2; }
.pwa-topbar__name { font-size: 9px; font-weight: 700; letter-spacing: -0.01em; }
.pwa-topbar__sub {
  font-size: 7px; color: var(--pwa-text-dim);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pwa-topbar__action {
  flex: none; width: 16px; height: 16px; border-radius: 999px;
  border: 1px solid var(--pwa-divider); color: var(--pwa-text-dim);
  display: grid; place-items: center;
}
.pwa-topbar__action svg { width: 9px; height: 9px; }

.pwa-subhead { flex: none; display: flex; align-items: center; gap: 6px; padding: 7px 9px 0; }
.pwa-subhead__back {
  flex: none; width: 15px; height: 15px; border-radius: 999px;
  border: 1px solid var(--pwa-divider); color: var(--pwa-text-dim);
  display: grid; place-items: center;
}
.pwa-subhead__back svg { width: 9px; height: 9px; }
.pwa-subhead__text { flex: 1; min-width: 0; line-height: 1.2; }
.pwa-subhead__title { font-size: 8.5px; font-weight: 700; }
.pwa-subhead__sub { font-size: 6.5px; color: var(--pwa-text-dim); }
.pwa-subhead__icon {
  flex: none; width: 15px; height: 15px; border-radius: 999px;
  border: 1px solid var(--pwa-divider); color: var(--pwa-text-dim);
  display: grid; place-items: center;
}
.pwa-subhead__icon svg { width: 8px; height: 8px; }

.pwa-body {
  flex: 1; min-height: 0; padding: 7px 9px 9px;
  display: flex; flex-direction: column; gap: 6px; overflow: hidden;
}

.pwa-bottomnav {
  flex: none; height: 34px; display: flex; align-items: center; justify-content: space-around;
  border-top: 1px solid var(--pwa-divider); position: relative;
}
.pwa-navitem { display: flex; flex-direction: column; align-items: center; gap: 1px; color: var(--pwa-text-dim); }
.pwa-navitem svg { width: 12px; height: 12px; }
.pwa-navitem span { font-size: 5.6px; font-weight: 600; letter-spacing: 0.01em; }
.pwa-navitem.is-active { color: var(--pwa-accent-text); }
.pwa-navitem--fab {
  position: relative; top: -10px; width: 22px; height: 22px; border-radius: 999px;
  background: var(--pwa-accent); color: #fff; display: grid; place-items: center;
  box-shadow: 0 3px 8px rgba(145, 132, 217, .55);
}
.pwa-navitem--fab svg { width: 11px; height: 11px; }

.pwa-card { background: var(--pwa-surface); border: 1px solid var(--pwa-divider); border-radius: 8px; padding: 6px 7px; }
.pwa-section-title {
  margin: 0; font-size: 6.3px; font-weight: 700; letter-spacing: .05em;
  text-transform: uppercase; color: var(--pwa-text-dim-2);
}
.pwa-row { display: flex; align-items: center; gap: 6px; min-width: 0; }
.pwa-row--between { justify-content: space-between; }
.pwa-avatar {
  flex: none; width: 18px; height: 18px; border-radius: 999px;
  background: var(--pwa-accent-soft); color: var(--pwa-accent-text);
  font-size: 6.8px; font-weight: 700; display: grid; place-items: center;
}
.pwa-avatar--lg { width: 30px; height: 30px; font-size: 10px; }
.pwa-name { font-size: 8px; font-weight: 650; color: var(--pwa-text); }
.pwa-meta { font-size: 6.6px; color: var(--pwa-text-dim); }
.pwa-progress { height: 4px; border-radius: 999px; background: var(--pwa-divider); overflow: hidden; }
.pwa-progress__fill { height: 100%; border-radius: 999px; background: var(--pwa-accent); }

.pwa-chip {
  display: inline-flex; align-items: center; gap: 3px; flex: none;
  padding: 2px 6px; border-radius: 999px; font-size: 6.2px; font-weight: 650;
  white-space: nowrap;
}
.pwa-chip svg { width: 7px; height: 7px; }
.pwa-chip--ok { background: var(--pwa-ok-soft); color: var(--pwa-ok); }
.pwa-chip--warn { background: var(--pwa-warn-soft); color: var(--pwa-warn); }
.pwa-chip--crit { background: var(--pwa-crit-soft); color: var(--pwa-crit); }
.pwa-chip--accent { background: var(--pwa-accent-soft); color: var(--pwa-accent-text); }
.pwa-chip--neutral { background: rgba(233, 233, 237, .08); color: var(--pwa-text-dim); border: 1px solid var(--pwa-divider); }

.pwa-list { display: flex; flex-direction: column; gap: 4px; min-height: 0; }
.pwa-item {
  display: flex; align-items: center; gap: 6px; padding: 5px 6px;
  border-radius: 7px; background: var(--pwa-surface); border: 1px solid var(--pwa-divider);
}
.pwa-item__icon {
  flex: none; width: 15px; height: 15px; border-radius: 999px;
  background: var(--pwa-accent-soft); color: var(--pwa-accent-text);
  display: grid; place-items: center;
}
.pwa-item__icon svg { width: 8px; height: 8px; }
.pwa-item__body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.pwa-item__title {
  font-size: 7.2px; font-weight: 650; color: var(--pwa-text);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pwa-item__sub {
  font-size: 6.2px; color: var(--pwa-text-dim);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.pwa-item__end { flex: none; color: var(--pwa-text-dim-2); display: grid; place-items: center; }
.pwa-item__end svg { width: 8px; height: 8px; }

.pwa-checkbox {
  flex: none; width: 12px; height: 12px; border-radius: 4px;
  border: 1.4px solid var(--pwa-divider); color: transparent;
  display: grid; place-items: center;
}
.pwa-checkbox.is-done { background: var(--pwa-ok); border-color: var(--pwa-ok); color: var(--pwa-bg); }
.pwa-checkbox svg { width: 7px; height: 7px; }

.pwa-btn {
  display: inline-flex; align-items: center; gap: 3px; flex: none;
  padding: 3.5px 7px; border-radius: 999px; font-size: 6.4px; font-weight: 650;
  border: 1px solid var(--pwa-divider); color: var(--pwa-text); background: transparent;
}
.pwa-btn svg { width: 7.5px; height: 7.5px; }
.pwa-btn--accent { background: var(--pwa-accent); border-color: var(--pwa-accent); color: #fff; }
.pwa-btn--block { width: 100%; justify-content: center; padding: 6px 7px; font-size: 7.2px; }
.pwa-btn--crit { border-color: var(--pwa-crit); color: var(--pwa-crit); }

.pwa-search {
  display: flex; align-items: center; gap: 5px; padding: 5px 7px; border-radius: 999px;
  background: var(--pwa-surface); border: 1px solid var(--pwa-divider); color: var(--pwa-text-dim);
  font-size: 6.8px;
}
.pwa-search svg { width: 8px; height: 8px; flex: none; }

.pwa-stepper { display: flex; align-items: center; gap: 3px; }
.pwa-stepper__dot {
  flex: none; width: 13px; height: 13px; border-radius: 999px; font-size: 6px; font-weight: 700;
  display: grid; place-items: center; color: var(--pwa-text-dim); background: var(--pwa-surface-2);
  border: 1px solid var(--pwa-divider);
}
.pwa-stepper__dot.is-done { background: var(--pwa-ok); border-color: var(--pwa-ok); color: var(--pwa-bg); }
.pwa-stepper__dot.is-active { background: var(--pwa-accent); border-color: var(--pwa-accent); color: #fff; }
.pwa-stepper__dot svg { width: 7px; height: 7px; }
.pwa-stepper__line { flex: 1; height: 1px; background: var(--pwa-divider); }

.pwa-field {
  border: 1px dashed var(--pwa-divider); border-radius: 7px; padding: 6px 7px;
  font-size: 6.6px; color: var(--pwa-text-dim-2); min-height: 22px;
}
.pwa-chiprow { display: flex; flex-wrap: wrap; gap: 4px; }

.pwa-tedavi-grid { display: flex; flex-direction: column; gap: 5px; }
.pwa-tedavi-row { background: var(--pwa-surface); border: 1px solid var(--pwa-divider); border-radius: 7px; padding: 5px 6px; }
.pwa-tedavi-row__name { font-size: 7px; font-weight: 650; margin-bottom: 3px; }
.pwa-tedavi-slots { display: grid; grid-template-columns: repeat(4, 1fr); gap: 3px; }
.pwa-tedavi-slot { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.pwa-tedavi-slot__label { font-size: 5.4px; color: var(--pwa-text-dim-2); letter-spacing: .03em; }
.pwa-tedavi-slot__dot { width: 8px; height: 8px; border-radius: 999px; background: var(--pwa-divider); }
.pwa-tedavi-slot__dot.is-on { background: var(--pwa-accent); }

/* ── QR tarama — full-bleed, kabuk barları (üst/alt) gerçek uygulamada da
   bu ekranda gizlenir (`:root[data-ekran="tarama"] .hz-ust,.hz-alt { display:none }`). */
.pwa-scan {
  /* --pwa-accent-text is normally scoped to .pwa-screen; .pwa-scan is a
     SIBLING scope (full-bleed, no .pwa-screen wrapper — see the "tarama"
     slide markup), so it needs its own copy or var(--pwa-accent-text) below
     resolves to nothing and the whole border/background shorthand is
     dropped (verified in-browser: corner brackets and scan line were
     invisible until this was added). */
  --pwa-accent-text: #cec9f6;
  position: relative; width: 100%; height: 100%;
  background: radial-gradient(130% 90% at 50% 18%, #262a40, #12131c 72%);
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px;
  color: #fff;
}
.pwa-scan__back {
  position: absolute; top: 10px; left: 10px; width: 18px; height: 18px; border-radius: 999px;
  background: rgba(255, 255, 255, .12); display: grid; place-items: center; color: #fff;
}
.pwa-scan__back svg { width: 9px; height: 9px; }
.pwa-scan__label {
  /* top:32px clears the phone-frame-notch (sits at the screen's own top edge,
     ~26px tall) — at top:12px the label sat directly under the notch and
     read as truncated ("Oo. …un"), verified in-browser. */
  position: absolute; top: 32px; left: 12px; right: 12px; text-align: center;
  font-size: 7.5px; font-weight: 650; letter-spacing: .03em; color: rgba(255, 255, 255, .85);
}
.pwa-scan__frame { width: 108px; height: 108px; position: relative; }
.pwa-scan__corner { position: absolute; width: 18px; height: 18px; border: 2px solid var(--pwa-accent-text); }
.pwa-scan__corner--tl { top: 0; left: 0; border-right: none; border-bottom: none; border-radius: 4px 0 0 0; }
.pwa-scan__corner--tr { top: 0; right: 0; border-left: none; border-bottom: none; border-radius: 0 4px 0 0; }
.pwa-scan__corner--bl { bottom: 0; left: 0; border-right: none; border-top: none; border-radius: 0 0 0 4px; }
.pwa-scan__corner--br { bottom: 0; right: 0; border-left: none; border-top: none; border-radius: 0 0 4px 0; }
.pwa-scan__line {
  position: absolute; left: 4px; right: 4px; top: 50%; height: 1.5px;
  background: var(--pwa-accent-text); box-shadow: 0 0 8px var(--pwa-accent-text);
}
.pwa-scan__text { font-size: 7.5px; color: rgba(255, 255, 255, .72); text-align: center; max-width: 150px; line-height: 1.5; }
.pwa-scan__torch {
  width: 24px; height: 24px; border-radius: 999px; background: rgba(255, 255, 255, .12);
  display: grid; place-items: center; color: #fff;
}
.pwa-scan__torch svg { width: 11px; height: 11px; }

/* ── how it works (centered, horizontal icon steps) ─────────────────── */
.how-head { max-width: 640px; margin-left: auto; margin-right: auto; text-align: center; }
.how-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 22px; margin-top: 46px; text-align: center; }
.how-box-top { display: flex; align-items: center; justify-content: center; gap: 10px; }
.how-box-num {
  width: 30px; height: 30px; border-radius: 999px; border: 1px solid var(--color-accent-400);
  color: var(--color-accent-700); display: grid; place-items: center; font-size: 11.5px; font-weight: 600;
}
.how-box-icon {
  width: 58px; height: 58px; border-radius: 14px; border: 1px solid var(--color-neutral-300);
  background: var(--color-neutral-100); display: grid; place-items: center; color: var(--color-accent-700);
}
.how-box-icon svg { width: 24px; height: 24px; }
.how-box-title { margin-top: 16px; font-size: 15px; font-weight: 500; }
.how-box-desc { margin-top: 6px; font-size: 12.5px; color: var(--color-neutral-600); }

/* ── FAQ (standalone, centered card) ─────────────────────────────────── */
.faq-card { border-radius: 14px; border: 1px solid var(--color-neutral-300); background: var(--color-neutral-100); padding: 24px; }
.faq-card h4 { margin: 0 0 4px; font-size: 18px; }
.faq-card > p { margin: 0 0 16px; font-size: 12.5px; color: var(--color-neutral-600); }
.faq-item { border-top: 1px solid var(--color-neutral-300); padding-top: 13px; margin-top: 13px; }
.faq-item:first-of-type { border-top: none; margin-top: 0; padding-top: 0; }
.faq-item .q { font-size: 13.5px; font-weight: 500; margin-bottom: 4px; }
.faq-item .a { margin: 0; font-size: 12.5px; color: var(--color-neutral-600); }
.faq-card-wide {
  max-width: 900px; margin: 40px auto 0; padding: 30px;
  display: grid; grid-template-columns: 1fr 1fr; gap: 8px 40px;
}
.faq-card-wide .faq-item:nth-child(2) { border-top: none; margin-top: 0; padding-top: 0; }
@media (max-width: 700px) {
  .faq-card-wide { grid-template-columns: 1fr; }
  .faq-card-wide .faq-item:nth-child(2) { border-top: 1px solid var(--color-neutral-300); margin-top: 13px; padding-top: 13px; }
}

/* ── CTA banner ─────────────────────────────────────────────────────── */
.cta-banner {
  border-radius: 16px; border: 1px solid #4c5397; background: linear-gradient(105deg, #262a60, #1e2145);
  color: var(--color-text); padding: 34px 36px; display: grid; grid-template-columns: 1.15fr auto; gap: 30px; align-items: center;
}
.cta-banner h2 { font-size: 27px; margin: 0 0 8px; }
.cta-banner p { margin: 0; font-size: 13.5px; color: color-mix(in srgb, var(--color-text) 68%, transparent); max-width: 440px; }
.cta-actions { display: flex; gap: 12px; flex-wrap: wrap; }

/* ── contact / demo form ───────────────────────────────────────────── */
.contact-layout { display: grid; grid-template-columns: 1.2fr 0.8fr; gap: 28px; align-items: start; }
.contact-form-card { border-radius: 14px; border: 1px solid var(--color-neutral-300); background: var(--color-neutral-100); padding: 28px; }
.contact-form-card h3 { margin: 0 0 4px; font-size: 20px; }
.contact-form-card > p.lede { margin: 0 0 18px; font-size: 13px; color: var(--color-neutral-600); }
.form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.form-row { display: flex; flex-direction: column; gap: 6px; }
.form-row.span-2 { grid-column: 1 / -1; }
.form-row label { font-size: 12.5px; color: var(--color-neutral-700); }
.form-row .req { color: #b8493f; }
.form-row input, .form-row textarea, .form-row select {
  padding: 11px 12px; border-radius: 8px; border: 1px solid var(--color-neutral-300);
  background: var(--color-neutral-200); color: var(--color-neutral-900); font: inherit; font-size: 13.5px;
}
.form-row textarea { resize: vertical; min-height: 90px; }
.form-row input:focus-visible, .form-row textarea:focus-visible, .form-row select:focus-visible {
  outline: 2px solid var(--color-accent-500); outline-offset: 1px; border-color: var(--color-accent-500);
}
.form-row.invalid input, .form-row.invalid select { border-color: #b8493f; }
.field-error { display: none; margin: 0; font-size: 11.5px; color: #b8493f; }
.form-row.invalid .field-error { display: block; }
.kvkk-row { display: flex; align-items: flex-start; gap: 9px; margin-top: 16px; font-size: 12px; color: var(--color-neutral-600); }
.kvkk-row input { margin-top: 2px; accent-color: var(--color-accent-500); width: 15px; height: 15px; flex: none; }
.form-status { margin-top: 12px; font-size: 12.5px; min-height: 1em; }
.form-status.ok { color: var(--color-accent-700); }
.form-status.err { color: #b8493f; }
.form-submit-note { margin-top: 12px; font-size: 11.5px; color: var(--color-neutral-500); }

/* honeypot — visually and structurally hidden, not just off-screen text */
.honey-field { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.contact-side { display: flex; flex-direction: column; gap: 16px; }
.contact-card { border-radius: 14px; border: 1px solid var(--color-neutral-300); background: var(--color-neutral-100); padding: 22px; }
.contact-card h4 { margin: 0 0 14px; font-size: 16px; }
.contact-line { display: flex; gap: 11px; align-items: center; font-size: 13px; margin-bottom: 12px; }
.contact-line:last-child { margin-bottom: 0; }
.contact-line svg { width: 18px; height: 18px; flex: none; color: var(--color-accent-700); }
.contact-line .k { display: block; font-size: 11px; color: var(--color-neutral-600); }
.contact-line a { color: inherit; text-decoration: none; }
.contact-line a:hover { text-decoration: underline; }
.contact-card.dark {
  background: linear-gradient(140deg, #262a60, #1e2145); color: var(--color-text);
  border-color: #4c5397;
}
.contact-card.dark > svg { width: 24px; height: 24px; color: var(--color-accent-300); }
.contact-card.dark h4 { margin: 10px 0 6px; }
.contact-card.dark p { margin: 0; font-size: 12.5px; color: color-mix(in srgb, var(--color-text) 68%, transparent); }

/* ── footer ─────────────────────────────────────────────────────────── */
.site-footer { border-top: 1px solid var(--color-neutral-300); background: var(--color-neutral-200); }
/* padding-block — `.nav-inner`'daki ile aynı gerekçe: bu da bir `.container`
   ve `padding` kısayolu yatay dolgusunu sıfırlayıp alt şeridi sayfanın geri
   kalanından 56px geniş bırakıyordu. */
.footer-inner { display: flex; align-items: center; gap: 24px; padding-block: 24px; font-size: 12.5px; color: var(--color-neutral-600); flex-wrap: wrap; }
.footer-brand { display: flex; align-items: center; gap: 10px; }
.footer-brand-mark {
  width: 30px; height: 30px; border-radius: 8px; border: 1px solid var(--color-accent-400);
  background: color-mix(in srgb, var(--color-accent-800) 40%, transparent);
  display: grid; place-items: center; color: var(--color-accent-700);
}
.footer-brand-mark svg { width: 16px; height: 16px; }
.footer-brand-text { line-height: 1.2; }
.footer-brand-name { display: block; color: var(--color-neutral-900); font-size: 13.5px; font-weight: 600; }
.footer-tagline { margin: 0 auto; }

/* ── responsive ─────────────────────────────────────────────────────── */
@media (max-width: 980px) {
  .hero-inner { grid-template-columns: 1fr; }
  .hero-copy { max-width: 100%; }
  .hero-lede { max-width: 100%; }
  .hero-visual { margin-top: 8px; max-width: 480px; }
  .card-grid { grid-template-columns: repeat(2, 1fr); }
  .mobile-layout { grid-template-columns: 1fr; }
  .phone-mock { order: -1; }
  .screen-gallery { grid-template-columns: repeat(2, 1fr); }
  .how-row { grid-template-columns: repeat(2, 1fr); row-gap: 34px; }
  .contact-layout { grid-template-columns: 1fr; }
  .cta-banner { grid-template-columns: 1fr; text-align: left; }
  .security-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 640px) {
  /* `padding` KISAYOLU YASAK — `.nav-inner`daki gerekçenin AYNISI, kısayolun
     medya sorgusundaki kopyası. Bu kural dosyada sonra geldiği için
     `.nav-inner`ın `padding-block: 13px`ini ve `.footer-inner`ın 24px'ini
     SIFIRLIYORDU: ölçüldü, 386px'te ikisinde de padding-top/bottom 0px, üst
     şerit 68.8 yerine 43px. 42px'lik hamburger 43px'lik şeride sıkışıyor,
     alt şeritte de yazı kenarlara yapışıyordu. Yalnız yatay eksene yazılır. */
  .container { padding-inline: 18px; }
  /* Açılır menü `.container`ın içinde değil, kendi 28px'ini taşıyor — kenar
     dolgusu daralınca markanın 10px sağında kalıyordu. */
  .mobile-menu a { padding-inline: 18px; }
  /* Başlık şeridi 375px'te taşıyordu: marka + "Demo Talep Et" + hamburger
     36px'lik boşluklarla yan yana sığmıyor, sayfa yatay kayıyordu. Boşluk bir
     kademe daha daraltılıyor. (`brand-sub`ı gizleme işi artık 1080px'teki
     kademede yapılıyor; buradaki satır o karardan ÖNCE yazıldı ve etkisiz
     olsa da kalması zararsız — alt satırın dar ekranda ~150px yediği gerekçe
     ikisinde de aynı.) */
  .nav-inner { gap: 14px; }
  .brand-sub { display: none; }
  /* DOKUNMA HEDEFLERİ — masaüstünde fareyle rahat tutulan 26-30px'lik
     düğmeler ve 5-8px'lik noktalar parmakla ıskalanıyor. Nokta göstergeleri
     GÖRSEL olarak aynı boyutta kalıyor: kutu büyüyor, dolgu artıyor ve
     `background-clip: content-box` boyayı yalnız iç alana bırakıyor. */
  /* (`.hamburger` artık taban kuralında 42px — buradaki kademe kaldırıldı.) */
  .hero-nav, .phone-nav { width: 40px; height: 40px; }
  .hero-nav svg { width: 16px; height: 16px; }
  .phone-nav svg { width: 14px; height: 14px; }
  .hero-dot {
    width: 24px; height: 24px; padding: 9px; box-sizing: border-box;
    background-clip: content-box;
  }
  .phone-dot {
    width: 21px; height: 21px; padding: 8px; box-sizing: border-box;
    background-clip: content-box;
  }
  .phone-dots { max-width: 100%; gap: 0; }
  .hero h1 { font-size: 34px; }
  /* Dar ekranda metin sarınca uzuyor — sabit yer ayırmak boşluk bırakırdı. */
  .hero-slide-caption { min-height: 0; }
  .lightbox { padding: 16px; }
  .lightbox-img { max-height: calc(100vh - 96px); max-height: calc(100dvh - 96px); }
  .lightbox-close { top: 12px; right: 14px; width: 38px; height: 38px; }
  .card-grid { grid-template-columns: 1fr; }
  .trust-row { grid-template-columns: repeat(2, 1fr); }
  .screen-gallery { grid-template-columns: 1fr; }
  .how-row { grid-template-columns: 1fr; }
  .security-grid { grid-template-columns: 1fr; }
  .form-grid { grid-template-columns: 1fr; }
}

/* iOS Safari, font-size 16px'in ALTINDAKİ bir alana odaklanınca sayfayı
   kendiliğinden yakınlaştırıp kaydırıyor; ziyaretçi formu doldururken
   sayfayı kaybediyor. Çözüm alanı büyütmektir — `maximum-scale=1` bunu
   susturur ama yakınlaştırmayı tümden kapatıp erişilebilirliği kırar.
   Genişlik VE işaretçi türü birlikte sorgulanıyor: telefonlar ilk koşulu,
   tablet gibi geniş ama dokunmatik cihazlar ikincisini karşılıyor. */
/* 360px sınıfı cihazlar (Galaxy S, eski Android): telefon çerçevesi 250px +
   iki yanında 40px'lik oklar + boşluklar = 354px, kenar dolgusundan sonra
   kalan 324px'e sığmıyordu. Çerçeve kendi değişkenleriyle küçülüyor —
   ekran görüntüleri object-fit ile ölçekli olduğu için oran korunuyor.
   Tek taşan yer burasıydı: 375px ve üstünde ölçüm sıfır taşma veriyor. */
@media (max-width: 400px) {
  .phone-mock { --phone-screen-w: 190px; --phone-screen-h: 318px; --phone-bezel: 12px; }
  .phone-showcase { gap: 8px; }
  .hero-nav, .phone-nav { width: 36px; height: 36px; }
}

/* 320px (iPhone SE 1. nesil sınıfı) — aynı satır bir kez daha daralıyor. */
@media (max-width: 340px) {
  .phone-mock { --phone-screen-w: 168px; --phone-screen-h: 281px; }
  .phone-showcase { gap: 6px; }
  .hero-nav, .phone-nav { width: 32px; height: 32px; }
}

@media (max-width: 900px), (pointer: coarse) {
  .form-row input, .form-row select, .form-row textarea,
  .demo-mobile-select select { font-size: 16px; }
}
