/* ─────────────────────────────────────────────────────────────
   tennizy.com — ortak tasarım katmanı
   Kararların GEREKÇESİ: docs/TASARIM_DEFTERI.md
   Buradaki değerler tek kaynaktır; sayfalara hex yazılmaz.
   ───────────────────────────────────────────────────────────── */

@font-face{
  /* Kendi sunucumuzdan: Google Fonts CDN'i ziyaretçi IP'sini üçüncü tarafa gönderir. */
  font-family:'Outfit';
  src:url('/assets/Outfit.ttf') format('truetype-variations');
  font-weight:100 900; font-display:swap;
}

:root{
  /* marka */
  --mint:#00F5A0;          /* ana vurgu — SADECE zemin/dolgu olarak */
  --mint-deep:#007A52;     /* aydınlık zeminde okunan nane (metin için) */
  --cyan:#00D9F5;          /* veri / ilerleme */

  /* aydınlık yüzey */
  --ink:#0A0E12;
  --ink-2:#39454F;
  --ink-3:#6B7685;
  --paper:#FFFFFF;
  --paper-2:#F2F6F7;
  --line:#E2E9EB;

  /* koyu yüzey */
  --night:#0A0E12;
  --night-2:#151C25;
  --night-line:#26313C;
  --night-ink:#EAF0F2;
  --night-ink-2:#AFBCC4;

  /* yarıçap ritmi */
  --r-chip:8px; --r-ctl:12px; --r-card:20px; --r-full:999px;

  /* ölçü */
  --w-page:1120px; --w-doc:780px; --pad:24px;
}

*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  font-family:'Outfit',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  background:var(--paper); color:var(--ink); line-height:1.6;
  font-weight:400; overflow-x:clip; -webkit-font-smoothing:antialiased;
}
a{color:inherit}
/* height:auto ŞART: <img> üzerindeki height niteliği yüksekliği sabitler,
   genişlik max-width ile daralınca görsel yanlardan ezilir. */
img{max-width:100%;height:auto;display:block}

h1,h2,h3{letter-spacing:-.03em;line-height:1.2;font-weight:800}
h1{font-size:clamp(38px,6.6vw,68px)}
h2{font-size:clamp(28px,4.4vw,46px)}
h3{font-size:20px;letter-spacing:-.02em;line-height:1.3}
.lead{color:var(--ink-2);font-size:clamp(17px,2.1vw,21px);line-height:1.5;max-width:58ch}
.sm{color:var(--ink-3);font-size:15px}

/* Fosforlu vurgu — anahtar ifadenin arkasına. Metin KOYU kalır:
   beyaz yazı #00F5A0 üstünde kontrast bırakmıyor. */
.mark{background:linear-gradient(var(--mint),var(--mint)) no-repeat 0 0/100% 100%;
      padding:.02em .16em;border-radius:.1em;
      box-decoration-break:clone;-webkit-box-decoration-break:clone}

/* Bölüm etiketi — emoji başlık yerine: nane çubuk + versal + geniş aralık */
.kicker{display:inline-flex;align-items:center;gap:10px;font-size:13px;font-weight:800;
        letter-spacing:.14em;text-transform:uppercase;color:var(--mint-deep)}
.kicker::before{content:"";width:7px;height:22px;border-radius:3px;background:var(--mint-deep)}

.wrap{max-width:var(--w-page);margin:0 auto;padding:0 var(--pad)}
.brand{display:flex;align-items:center;gap:11px;font-weight:800;font-size:20px;
       letter-spacing:-.03em;text-decoration:none;color:inherit}
.brand img{height:34px;width:34px;border-radius:10px}
/* Yatay logo: adı zaten taşır, yanına metin yazılmaz. Oran sabit, yalnız yükseklik verilir.
   Kurallar: docs/marka/Tennizy_Logo_Manifestosu.pdf */
.brand img.logo{height:56px;width:auto;border-radius:0}

.lang{display:flex;gap:2px;border:1px solid var(--line);border-radius:var(--r-full);
      padding:3px;background:var(--paper-2)}
.lang button{background:none;border:0;color:var(--ink-3);font:inherit;font-size:13px;
             font-weight:700;padding:6px 13px;border-radius:var(--r-full);cursor:pointer}
.lang button.on{background:var(--ink);color:#fff}

.btn{display:inline-flex;align-items:center;gap:9px;font-weight:800;font-size:16px;
     padding:15px 28px;border-radius:var(--r-full);text-decoration:none;border:1px solid transparent}
.btn.solid{background:var(--ink);color:#fff}
.btn.ghost{border-color:var(--line);color:var(--ink);background:var(--paper)}

.note{border-left:3px solid var(--line);padding:4px 0 4px 18px;color:var(--ink-3);
      font-size:14.5px;max-width:70ch}

/* dil anahtarı */
.en{display:none}
html[lang="en"] .tr{display:none}
html[lang="en"] .en{display:revert}

/* ───────────────── pazarlama sayfaları ───────────────── */

header{position:sticky;top:0;z-index:30;backdrop-filter:blur(14px);
  background:rgba(255,255,255,.82);border-bottom:1px solid var(--line)}
.nav{display:flex;align-items:center;justify-content:space-between;height:68px;gap:16px}

.hero{position:relative;overflow:hidden;background:
    radial-gradient(90% 70% at 88% 6%,rgba(0,217,245,.16),transparent 62%),
    radial-gradient(70% 60% at 4% 0%,rgba(0,245,160,.18),transparent 60%)}
.hero .wrap{display:grid;grid-template-columns:1.06fr .94fr;gap:44px;align-items:center;
  padding:76px var(--pad) 64px}
.hero h1{margin:20px 0}
/* düğme satırı ve "çok yakında" notu her bölümde aynı: yalnız hero'da tanımlıyken
   Android bölümünde düğme metne yapışıktı */
.cta-row{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}
.soon{margin-top:18px;font-size:14px;color:var(--ink-3)}
.shot{filter:drop-shadow(0 34px 60px rgba(10,14,18,.22))}

.section{padding:84px 0}
.section.tight{padding:60px 0}
.paper2{background:var(--paper-2)}
.night{background:var(--night);color:#fff}
.night.photo{position:relative;background:var(--night);isolation:isolate}
.night.photo::before{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(90deg,rgba(10,14,18,.94) 0%,rgba(10,14,18,.86) 46%,rgba(10,14,18,.58) 100%),
             var(--photo) center/cover no-repeat}
.night h2,.night h3{color:#fff}
.night .lead{color:var(--night-ink-2)}
.night .kicker{color:var(--mint)}
.night .kicker::before{background:var(--mint)}
.night .card{background:var(--night-2);border-color:var(--night-line)}
.night .card p{color:var(--night-ink-2)}
.night .fact{border-color:var(--night-line);color:var(--night-ink-2)}

.strip{height:clamp(200px,26vw,320px);background:var(--strip) center 62%/cover no-repeat;
  position:relative;display:flex;align-items:center}
.strip::after{content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,rgba(255,255,255,.92),rgba(255,255,255,.35) 52%,rgba(255,255,255,0))}
.strip .wrap{position:relative;z-index:1}
.strip p{font-size:clamp(20px,3vw,32px);font-weight:800;letter-spacing:-.03em;
  line-height:1.12;max-width:17ch;color:var(--ink)}

/* boşluk ekranla büyür: arka telefonlar ve süzülme payı metne yaslanmasın */
.split{display:grid;grid-template-columns:1fr 1fr;gap:clamp(56px,7vw,96px);align-items:center}
/* min-width:0 olmadan grid hücresi küçülmeyi reddeder → dar ekranda yatay taşma */
.split>*,.hero .wrap>*{min-width:0}
.split.rev .col-img{order:-1}

.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:20px;margin-top:44px}
.card{background:var(--paper);border:1px solid var(--line);border-radius:var(--r-card);padding:26px}
.card h3{margin-bottom:8px}
.card p{color:var(--ink-2);font-size:15.5px}

.steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:26px;margin-top:46px}
.step .n{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;
  border-radius:var(--r-ctl);font-weight:800;background:var(--mint);color:var(--ink);margin-bottom:14px}
.step h3{margin-bottom:6px}
.step p{color:var(--ink-2);font-size:15.5px}

.tiers{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px}
.tier{border:1px solid var(--night-line);border-radius:14px;padding:14px 18px;min-width:132px;flex:1}
.tier b{display:block;font-size:17px;letter-spacing:-.02em}
/* > şart: .tier span, kademe adının içindeki TR/EN span'lerini de yakalayıp adı 13px griye çeviriyordu */
.tier>span{font-size:13px;color:#8A99A3;font-variant-numeric:tabular-nums}

.facts{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px}
.fact{border:1px solid var(--line);border-radius:var(--r-full);padding:10px 18px;
  font-size:14.5px;font-weight:600;color:var(--ink-2);text-decoration:none}

footer{border-top:1px solid var(--line);padding:46px 0;color:var(--ink-3);font-size:14.5px}
.fcols{display:flex;flex-wrap:wrap;gap:22px;justify-content:space-between;align-items:center}
footer a{color:var(--ink-2);text-decoration:none;margin-right:20px}
footer a:hover{color:var(--mint-deep)}

/* ───────────────── medya kiti ───────────────── */
.shots{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:16px;margin-top:20px}
.shots a{border:1px solid var(--line);border-radius:14px;overflow:hidden;display:block}
.wide{border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-top:20px;max-width:620px}
.panel{background:var(--paper-2);border:1px solid var(--line);border-radius:16px;
       padding:22px;margin-top:20px;max-width:74ch}
code{background:var(--paper-2);padding:2px 7px;border-radius:6px;font-size:14px}

/* medya kiti (body.press). Sınıfsız h1/h2 kullanıyor; global margin:0 onları
   birbirine yapıştırıyordu (2026-09-26'da fark edildi). */
body.press main.wrap{padding-top:56px;padding-bottom:96px}
body.press main h1{font-size:clamp(40px,6vw,60px);margin-bottom:14px}
body.press main h2{font-size:clamp(24px,3.2vw,32px);margin:64px 0 16px;padding-top:30px;border-top:1px solid var(--line)}
body.press main .sm{margin-top:12px}
body.press main table{border-collapse:collapse;width:100%;margin-top:6px;font-size:15.5px}
body.press main th,body.press main td{text-align:left;vertical-align:top;padding:14px 18px 14px 0;
  border-bottom:1px solid var(--line);overflow-wrap:anywhere}
body.press main th{width:220px;color:var(--ink);font-weight:700}
body.press main td{color:var(--ink-2)}
body.press main .shots a{transition:transform .35s var(--ease),box-shadow .35s}
@media(hover:hover){ body.press main .shots a:hover{transform:translateY(-4px);box-shadow:0 18px 40px -22px rgba(10,14,18,.35)} }
@media(max-width:600px){ body.press main th{width:38%} body.press main h2{margin-top:48px} }

/* ───────────────── belge sayfaları (yasal) ─────────────────
   body.doc ile kapsanıyor: .box / .card gibi adlar pazarlama
   sayfalarındakilerle çakışmasın. */

body.doc{background:var(--paper);color:var(--ink);line-height:1.7}
body.doc .wrap{max-width:var(--w-doc);padding:28px 22px 80px}
body.doc .top{display:flex;align-items:center;justify-content:space-between;margin-bottom:26px}
body.doc .brand{font-size:17px}
body.doc .brand img{height:28px;width:28px;border-radius:8px}
body.doc .brand img.logo{height:54px;width:auto;border-radius:0}
body.doc h1{font-size:clamp(26px,4.4vw,36px);margin:10px 0 6px}
body.doc h2{font-size:clamp(19px,2.6vw,23px);margin:34px 0 10px}
body.doc h3{font-size:16px;margin:22px 0 6px}
body.doc p,body.doc li{color:var(--ink-2);font-size:16px}
body.doc ul{margin:10px 0 10px 22px}
body.doc li{margin-bottom:4px}
body.doc a{color:var(--mint-deep);font-weight:600}
body.doc b{color:var(--ink)}
body.doc .meta{color:var(--ink-3);font-size:13.5px;margin-bottom:10px}
body.doc table{border-collapse:collapse;width:100%;margin:16px 0;font-size:15px}
/* 3 sütunlu tablo 360 px'te 18 px taşıyordu: uzun sözcük min-content'i şişiriyor.
   anywhere, min-content hesabına da girer (break-word girmez). */
body.doc td,body.doc th{border:1px solid var(--line);padding:10px 12px;text-align:left;
                        vertical-align:top;color:var(--ink-2);overflow-wrap:anywhere;hyphens:auto}
body.doc th{color:var(--ink);font-weight:700;background:var(--paper-2)}
body.doc hr{border:0;border-top:1px solid var(--line);margin:34px 0}
body.doc .box{background:var(--paper-2);border:1px solid var(--line);
  border-left:3px solid var(--mint-deep);border-radius:0 var(--r-ctl) var(--r-ctl) 0;
  padding:16px 18px;margin:18px 0}
body.doc .box b{color:var(--ink)}
body.doc .card{background:var(--paper);border:1px solid var(--line);
  border-radius:var(--r-card);padding:24px;margin:20px 0}

/* ───────────────── dar ekran ───────────────── */
@media(max-width:880px){
  .hero .wrap{grid-template-columns:1fr;gap:34px;padding:56px var(--pad) 48px}
  .hero .col-img{max-width:min(380px,100%);margin:0 auto}
  .split{grid-template-columns:1fr;gap:34px}
  .split.rev .col-img{order:0}
  /* sabit piksel tavan viewport'u aşabilir → min() */
  .col-img img{max-width:min(400px,100%);margin:0 auto}
  .section{padding:64px 0}
}

/* ─────────────────────────────────────────────────────────────
   Ana sayfa · manifesto mimarisi bileşenleri (2026-09-25)
   Gerekçe: docs/claude-memory/marka_manifestosu_sunum.md
   ───────────────────────────────────────────────────────────── */
.grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:18px;margin-top:40px}
.grid4 .card{padding:22px}
.grid4 .card h3{margin-bottom:7px;font-size:18px}
.grid4 .card p{font-size:14.5px}

/* gelişim döngüsü: altı adım, alt kenarda ilerleme çizgisi (camgöbeği = ilerleme) */
.loop{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-top:38px}
.lp{border:1px solid var(--line);border-radius:16px;padding:18px 18px 20px;background:var(--paper);position:relative}
.lp b{display:block;font-size:13px;font-weight:800;letter-spacing:.1em;color:var(--mint-deep);margin-bottom:6px}
.lp span{font-size:14px;color:var(--ink-2);line-height:1.45}
.lp::after{content:"";position:absolute;left:18px;right:18px;bottom:0;height:3px;
           border-radius:3px 3px 0 0;background:linear-gradient(90deg,var(--line),var(--cyan))}
.loop-end{margin-top:22px;font-size:17px;font-weight:800;letter-spacing:-.02em}

/* SSS akordeonu */
.faq{margin-top:38px;max-width:76ch}
.faq details{border-top:1px solid var(--line);padding:18px 0}
.faq details:last-child{border-bottom:1px solid var(--line)}
.faq summary{font-size:17px;font-weight:700;letter-spacing:-.02em;cursor:pointer;list-style:none;
             display:flex;justify-content:space-between;gap:16px;align-items:flex-start}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";color:var(--mint-deep);font-weight:800;font-size:21px;line-height:1;flex:0 0 auto;
             transition:transform .35s var(--ease)}
.faq details[open] summary::after{transform:rotate(45deg)}
.faq p{margin-top:12px;color:var(--ink-2);font-size:15.5px;line-height:1.55}
.faq a{color:var(--mint-deep);font-weight:700}

/* marka manifestosu (gece bölümü) */
.mfo{font-size:clamp(24px,3.4vw,34px);font-weight:800;letter-spacing:-.03em;line-height:1.25;
     color:#fff;margin-bottom:24px;max-width:24ch}
.mf{font-size:16.5px;line-height:1.75;color:var(--night-ink);margin-bottom:5px;max-width:60ch}
.mf.hi{color:#fff;font-weight:700}
.mf-gap{margin-top:18px}
.mfc{margin-top:28px;padding-top:24px;border-top:1px solid var(--night-line);
     font-size:clamp(20px,2.6vw,26px);font-weight:800;letter-spacing:-.025em;color:#fff;line-height:1.3}
.mfc em{display:block;font-style:normal;color:var(--mint);font-size:17px;margin-top:10px}
.mf-cols{display:grid;grid-template-columns:1fr 1fr;gap:44px;align-items:start}
@media(max-width:880px){ .mf-cols{grid-template-columns:1fr;gap:6px} }

/* ─────────────────────────────────────────────────────────────
   Ana sayfa · hareket ve derinlik katmanı (2026-09-26)
   İlkeler:
   · İçerik JS olmadan da tam görünür: gizleme yalnız html.js altında.
   · prefers-reduced-motion'da hareket tamamen kapanır.
   · Yalnız dikey kayma ve eş ölçek: yatay kayma dar ekranda taşma üretir.
   · Telefon cephe durur (eğim/perspektif 2026-09-22'de reddedildi);
     derinlik ışıktan ve hafif süzülmeden gelir.
   ───────────────────────────────────────────────────────────── */
:root{ --ease:cubic-bezier(.2,.7,.2,1); interpolate-size:allow-keywords }
section[id]{scroll-margin-top:84px}

/* okuma ilerlemesi: camgöbeği = ilerleme (renk anlamı defterde) */
.progress{display:none}
@supports (animation-timeline:scroll()){
  .progress{display:block;position:fixed;top:0;left:0;right:0;height:3px;z-index:40;
    transform-origin:0 50%;background:linear-gradient(90deg,var(--mint),var(--cyan));
    animation:grow linear both;animation-timeline:scroll(root)}
  @keyframes grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
}

/* başlık: kaydırınca yoğunlaşır, geniş ekranda bölüm bağlantıları */
header{transition:box-shadow .3s,background .3s}
header.scrolled{background:rgba(255,255,255,.92);box-shadow:0 8px 30px -18px rgba(10,14,18,.35)}
.nav-links{display:flex;gap:4px;margin-left:auto;margin-right:12px}
.nav-links a{font-size:14.5px;font-weight:600;color:var(--ink-2);text-decoration:none;
  padding:8px 13px;border-radius:var(--r-full);transition:background .2s,color .2s}
.nav-links a:hover{background:var(--paper-2);color:var(--ink)}
.nav-links a.on{background:var(--ink);color:#fff}
/* dar ekran davranışı aşağıda, "menü" bloğunda */

/* hero: sürüklenen ışık lekesi + film greni (grensiz gradyan bantlaşır) */
.hero .wrap{position:relative;z-index:1}
.hero::before{content:"";position:absolute;z-index:0;width:62vmax;height:62vmax;right:-18vmax;top:-26vmax;
  border-radius:50%;background:radial-gradient(closest-side,rgba(0,245,160,.30),rgba(0,217,245,.14) 55%,transparent);
  filter:blur(30px);animation:drift 18s ease-in-out infinite alternate}
.hero::after{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;opacity:.07;mix-blend-mode:multiply;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
@keyframes drift{from{transform:translate3d(0,0,0) scale(1)}to{transform:translate3d(-9vmax,7vmax,0) scale(1.12)}}

/* telefon: arkasında nefes alan hale, kendisi hafifçe süzülür */
.col-img{position:relative;isolation:isolate}
.col-img::before{content:"";position:absolute;z-index:-1;inset:14% 10% 8%;border-radius:40%;
  background:radial-gradient(closest-side,rgba(0,245,160,.50),rgba(0,217,245,.24) 60%,transparent);
  filter:blur(38px);opacity:.75;animation:breathe 6s ease-in-out infinite}
@keyframes breathe{50%{transform:scale(1.07);opacity:1}}
.hero .shot{animation:float 7s ease-in-out infinite}
@keyframes float{50%{transform:translateY(-12px)}}

/* ekrana giriş: yukarı kayarak belirme, kardeşler sırayla */
html.js .rv{opacity:0;transform:translateY(26px);
  transition:opacity .8s var(--ease),transform .9s var(--ease);
  transition-delay:calc(var(--i,0) * 90ms)}
html.js .rv.in{opacity:1;transform:none}
/* giriş bitince öğe kendi geçişine döner; yoksa hover da sıra gecikmesiyle çalışır */
html.js .rv.done{transition-delay:0s}
html.js .grid4 .card.rv.done{transition:transform .4s var(--ease),box-shadow .4s var(--ease),border-color .3s}
html.js .rv-img{opacity:0;transform:translateY(46px) scale(.94);filter:blur(10px);
  transition:opacity 1s var(--ease),transform 1.2s var(--ease),filter 1s var(--ease)}
html.js .rv-img.in{opacity:1;transform:none;filter:none}

/* bölüm içi görsel ve fotoğraflar: sayfayla hafif paralaks (destekleyen tarayıcıda) */
@supports (animation-timeline:view()){
  .split .col-img .shot{animation:par linear both;animation-timeline:view();animation-range:cover}
  @keyframes par{from{transform:translateY(34px)}to{transform:translateY(-34px)}}
  .strip{animation:pan linear both;animation-timeline:view();animation-range:cover}
  @keyframes pan{from{background-position:center 30%}to{background-position:center 85%}}
  .night.photo::before{animation:pan2 linear both;animation-timeline:view();animation-range:cover}
  @keyframes pan2{from{background-position:0 0,center 20%}to{background-position:0 0,center 80%}}
}

/* ikon: 24px kafes, 1.7 kontur, ikon başına tek nane vurgu (manifesto seti) */
.ico{width:24px;height:24px;flex:0 0 auto;color:var(--ink);--acc:var(--mint-deep);
  fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.ibox{width:48px;height:48px;border-radius:14px;background:var(--paper-2);border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;margin-bottom:18px;
  transition:background .3s,border-color .3s,transform .4s var(--ease)}
.paper2 .ibox{background:var(--paper)}

/* kartlar: üst kenarda nane→camgöbeği çizgi */
.grid4 .card{position:relative;overflow:hidden;
  transition:transform .4s var(--ease),box-shadow .4s var(--ease),border-color .3s}
.grid4 .card::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;
  background:linear-gradient(90deg,var(--mint),var(--cyan));transform:scaleX(0);transform-origin:0 50%;
  transition:transform .5s var(--ease)}
.btn .arr{display:inline-block;transition:transform .3s var(--ease)}
@media(hover:hover){
  .grid4 .card:hover{transform:translateY(-4px);border-color:transparent;
    box-shadow:0 22px 48px -24px rgba(10,14,18,.28),0 0 0 1px rgba(0,245,160,.35)}
  .grid4 .card:hover::before{transform:scaleX(1)}
  .grid4 .card:hover .ibox{background:var(--mint);border-color:var(--mint);transform:rotate(-6deg)}
  .grid4 .card:hover .ico{--acc:var(--ink)}
  .btn{transition:transform .25s var(--ease),box-shadow .25s,border-color .25s,background .25s}
  .btn.solid:hover{transform:translateY(-2px);box-shadow:0 14px 30px -12px rgba(0,245,160,.75)}
  .btn.ghost:hover{border-color:var(--ink);transform:translateY(-2px)}
  .btn:hover .arr{transform:translateY(3px)}
  .fact{transition:border-color .25s,color .25s}
  a.fact:hover{border-color:var(--mint-deep);color:var(--ink)}
}

/* gelişim döngüsü: numaralı, alt çizgi sırayla dolar */
.loop{counter-reset:lp}
.lp b::before{counter-increment:lp;content:counter(lp,decimal-leading-zero);display:block;
  font-size:26px;letter-spacing:-.03em;color:var(--ink);opacity:.16;margin-bottom:6px}
html.js .loop .lp::after{transform:scaleX(0);transform-origin:0 50%;
  transition:transform .9s var(--ease);transition-delay:calc(var(--i,0) * 140ms + .3s)}
html.js .loop .lp.in::after{transform:scaleX(1)}

/* SSS: açılış yükseklik geçişiyle (destekleyen tarayıcıda) */
.faq details::details-content{block-size:0;overflow:hidden;
  transition:block-size .45s var(--ease),content-visibility .45s allow-discrete}
.faq details[open]::details-content{block-size:auto}
.faq summary{transition:color .2s}
.faq summary:hover{color:var(--mint-deep)}

/* final çağrı: yumuşak ışık */
.cta-final{position:relative;overflow:hidden;isolation:isolate}
.cta-final::before{content:"";position:absolute;z-index:-1;left:50%;top:40%;width:min(900px,120vw);height:520px;
  transform:translate(-50%,-50%);border-radius:50%;
  background:radial-gradient(closest-side,rgba(0,245,160,.22),rgba(0,217,245,.10) 60%,transparent)}

/* kademe kutuları fotoğrafın açık yanında kayboluyordu: buzlu cam zemin.
   Tıklanmıyorlar: kalıcı vurgu ya da hover kalkışı yok (ilk kutu seçili düğme gibi
   duruyordu, Evrim basmak istedi, 2026-09-26). Vurgu aşağıda bir kerelik sırayla yanma. */
.night .tier{background:rgba(10,14,18,.42);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}


/* dar ekran: kart yatay dizilir (ikon solda), dört kart alt alta daha az yer kaplar */
@media(max-width:560px){
  .grid4 .card{display:grid;grid-template-columns:48px minmax(0,1fr);column-gap:16px;align-items:start}
  .grid4 .card .ibox{grid-row:span 2;margin:0}
  .grid4 .card h3{margin-top:2px}
}

@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none!important;transition:none!important}
  html.js .rv,html.js .rv-img{opacity:1;transform:none;filter:none}
  html.js .rv .mark{background-size:100% 100%}
  html.js .loop .lp::after{transform:none}
  .progress{display:none}
}

/* ─────────────────────────────────────────────────────────────
   Menü (2026-09-26): bağlantılar sayfa akışı sırasında, telefonda açılır panel
   ───────────────────────────────────────────────────────────── */
.nav .ico{width:18px;height:18px;color:#fff;--acc:var(--mint)}
.nav-cta{display:inline-flex!important;align-items:center;gap:8px;margin-left:8px;
  background:var(--ink);color:#fff!important;padding:9px 16px 9px 13px!important}
.nav-links a.nav-cta:hover{background:var(--ink);box-shadow:0 10px 24px -12px rgba(0,245,160,.8)}
.menu-btn{display:none}
@media(max-width:1180px){ .nav-links .nav-cta{display:none!important} }
@media(max-width:960px){
  .nav .lang{margin-left:auto}
  .menu-btn{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;
    border-radius:var(--r-ctl);border:1px solid var(--line);background:var(--paper);cursor:pointer}
  .menu-btn .ico{width:22px;height:22px;color:var(--ink);--acc:var(--mint-deep)}
  .nav-links{position:fixed;top:68px;left:0;right:0;margin:0;flex-direction:column;align-items:stretch;gap:2px;
    padding:12px var(--pad) 24px;background:var(--paper);border-bottom:1px solid var(--line);
    box-shadow:0 34px 60px -34px rgba(10,14,18,.4);
    visibility:hidden;clip-path:inset(0 0 100% 0);
    transition:clip-path .45s var(--ease),visibility 0s linear .45s}
  header.menu-open .nav-links{visibility:visible;clip-path:inset(0 0 -60px 0);
    transition:clip-path .45s var(--ease)}
  .nav-links a{font-size:20px;font-weight:700;letter-spacing:-.02em;color:var(--ink);padding:13px 8px;
    border-radius:var(--r-ctl);opacity:0;translate:0 -10px;transition:opacity .3s,translate .45s var(--ease),background .2s}
  header.menu-open .nav-links a{opacity:1;translate:0 0}
  header.menu-open .nav-links a:nth-child(2){transition-delay:40ms}
  header.menu-open .nav-links a:nth-child(3){transition-delay:80ms}
  header.menu-open .nav-links a:nth-child(4){transition-delay:120ms}
  header.menu-open .nav-links a:nth-child(5){transition-delay:160ms}
  header.menu-open .nav-links a:nth-child(6){transition-delay:200ms}
  .nav-links a.on{background:var(--paper-2);color:var(--ink)}
  .nav-links .nav-cta{display:flex!important;justify-content:center;margin:12px 0 0;padding:15px!important;font-size:17px}
}

/* ─────────────────────────────────────────────────────────────
   İkon: kendini çizerek belirme (set: brand/ikon-seti, sprite'ta pathLength=1)
   Kalıtılan özelliklerle kurulur: <use> gölge DOM'una sınıf seçicisi geçmez.
   ───────────────────────────────────────────────────────────── */
.fact{display:inline-flex;align-items:center;gap:9px}
.ico.sm{width:18px;height:18px}
.fact .ico{color:var(--ink)}
.night .fact .ico{color:#fff;--acc:var(--mint)}
.btn .ico{width:20px;height:20px;color:#fff;--acc:var(--mint)}
.lp-ico{position:absolute;top:18px;right:18px}
html.js .rv .ico{stroke-dasharray:1;stroke-dashoffset:1;fill-opacity:0;
  transition:stroke-dashoffset 1.1s var(--ease),fill-opacity .5s var(--ease);
  transition-delay:calc(var(--i,0) * 90ms + .25s),calc(var(--i,0) * 90ms + .95s)}
html.js .rv.in .ico{stroke-dashoffset:0;fill-opacity:1}
@keyframes redraw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
@media(hover:hover){ .grid4 .card.done:hover .ico,.lp:hover .ico{animation:redraw .9s var(--ease)} }

/* ═════════════════════════════════════════════════════════════
   BÖLÜM SAHNELERİ (2026-09-26)
   Her bölüm kendi girişini yapıyor: maske, yandan giriş, iris, yelpaze, halka.
   Önce yalnız İngilizcede deney olarak kuruldu; Evrim hepsini beğendi, aynı gün
   iki dile açıldı. Bölüm bölüm liste: docs/TASARIM_DEFTERI.md "Bölüm sahneleri".
   Üstteki genel kurallar (.rv / .rv-img) sahnesi olmayan öğeler için geçerli.
   ═════════════════════════════════════════════════════════════ */
.section,.strip{overflow-x:clip}   /* yandan girenler taşmasın */

/* ek telefonlar: arkada, küçük, yana kayık (eğim yok).
   KURAL: arka telefon hep sayfanın DIŞ kenarına açılır, metin sütununa doğru asla.
   Topluluk'ta metne doğru açıldığında yazıya yaslanıyordu (Evrim, iPad, 2026-09-26). */
.col-img .back{position:absolute;top:7%;left:0;width:100%;z-index:-1;pointer-events:none;opacity:.95}
.col-img .back-r{translate:18% 0;scale:.8}
.col-img .back-l{translate:-18% 0;scale:.8}
.hero .col-img .back-r{translate:36% 0}
#topluluk .col-img .back-l{translate:-22% 0}
#android .col-img .back-r{translate:18% 0;scale:.8;top:8%}
#android .col-img .back-r2{translate:36% 0;scale:.66;top:16%}

/* büyük çizgi grafik (5, 8) */
.has-big .wrap{position:relative}
.big-ico{position:absolute;right:var(--pad);top:50%;translate:0 -50%;width:clamp(170px,19vw,230px);
  aspect-ratio:1;pointer-events:none}
.big-ico .ico{width:100%;height:100%;stroke-width:.7;color:var(--ink);--acc:var(--mint)}
@media(max-width:1060px){ .big-ico{display:none!important} }

/* fosforlu şerit: blok göründüğünde alt çizgiden yukarı dolar */
html.js .rv .mark{background-size:100% 14%;background-position:0 100%;
  transition:background-size .8s var(--ease) calc(var(--i,0) * 90ms + .45s)}
html.js .rv.in .mark{background-size:100% 100%}

/* 1 · hero: başlık perde gibi açılır; telefon yuvadan yükselir, ikincisi sağdan gelip arkaya oturur */
html.js .hero h1.rv{opacity:1;transform:translateY(.45em);clip-path:inset(0 -10% 100% -10%);
  transition:transform 1s var(--ease) .1s,clip-path 1s var(--ease) .1s}
html.js .hero h1.rv.in{transform:none;clip-path:inset(-25% -10% -25% -10%)}
html.js .hero .col-img.rv-img{opacity:1;transform:none;filter:none;clip-path:inset(-40% -80% 0 -80%)}
html.js .hero .col-img.rv-img.done{clip-path:none}
html.js .hero .col-img>.shot:not(.back){translate:0 105%;transition:translate 1.3s cubic-bezier(.16,1,.3,1) .2s}
html.js .hero .col-img.in>.shot:not(.back){translate:0 0}
html.js .hero .col-img .back{translate:95% 0;opacity:0;
  transition:translate 1.5s cubic-bezier(.16,1,.3,1) .75s,opacity .8s .75s}
html.js .hero .col-img.in .back{translate:36% 0;opacity:.95}

/* 3 · ne yapar: kartlar alttan maskeyle açılır */
html.js #ozellikler .card.rv{opacity:1;transform:none;clip-path:inset(100% 0 0 0 round var(--r-card));
  transition:clip-path .9s cubic-bezier(.7,0,.2,1) calc(var(--i,0) * 110ms)}
html.js #ozellikler .card.rv.in{clip-path:inset(0 0 0 0 round var(--r-card))}
html.js #ozellikler .card.rv.done{clip-path:none}

/* 4 · vuruş analizi: telefon sol kenardan kadraja girer */
html.js #nasil-calisir .col-img.rv-img{opacity:1;transform:none;filter:none}
html.js #nasil-calisir .col-img .shot{translate:-120% 0;transition:translate 1.4s cubic-bezier(.16,1,.3,1)}
html.js #nasil-calisir .col-img.in .shot{translate:0 0}

/* 5 · teknik gelişim: başlık soldan silinerek yazılır, hedef çizilir */
html.js #teknik h2.rv{opacity:1;transform:none;clip-path:inset(-25% 100% -25% 0);
  transition:clip-path 1.2s cubic-bezier(.7,0,.2,1)}
html.js #teknik h2.rv.in{clip-path:inset(-25% -5% -25% 0)}
html.js .big-ico.rv .ico{transition-duration:2.2s,.6s}
html.js .big-ico.rv{transform:scale(.85) rotate(-20deg)}
html.js .big-ico.rv.in{transform:none;transition:opacity 1s,transform 2s var(--ease)}

/* 6 · seviye: fotoğraf iris gibi açılır, kademeler basamak basamak yükselir, altları dolar */
html.js #seviye::before{clip-path:circle(0% at 82% 45%);transition:clip-path 1.9s cubic-bezier(.6,.05,.2,1)}
html.js #seviye.seen::before{clip-path:circle(150% at 82% 45%)}
html .tier{position:relative;overflow:hidden}
html.js .tier.rv{transform:translateY(calc(20px + var(--n) * 12px));transition-delay:calc(var(--n) * 160ms)}
html.js .tier.rv.in{transform:none}
html.js .tier::after{content:"";position:absolute;left:0;right:0;bottom:0;height:3px;
  background:linear-gradient(90deg,var(--mint),var(--cyan));transform:scaleX(0);transform-origin:0 50%;
  transition:transform .7s var(--ease) calc(var(--i,0) * 160ms + .5s)}
html.js .tier.in::after{transform:scaleX(1)}
/* bir kez, soldan sağa sırayla yanıp söner; tekrar etmez. Gecikme kutunun kendi sırasından:
   --i ekrana birlikte giren başlık ve paragrafları da saydığı için son kutular aynı anda yanıyordu */
html.js .tier.rv.in{animation:kademe 1.2s var(--ease) both;animation-delay:var(--yan)}
html.js .tier::after{transition-delay:calc(var(--yan) + .15s)}
.tier:nth-child(1){--n:0;--yan:.55s} .tier:nth-child(2){--n:1;--yan:.8s} .tier:nth-child(3){--n:2;--yan:1.05s}
.tier:nth-child(4){--n:3;--yan:1.3s} .tier:nth-child(5){--n:4;--yan:1.55s}
@keyframes kademe{0%,100%{border-color:var(--night-line);background:rgba(10,14,18,.42);box-shadow:0 0 0 0 rgba(0,245,160,0)}
  35%{border-color:var(--mint);background:rgba(0,245,160,.12);box-shadow:0 0 0 4px rgba(0,245,160,.14)}}

/* 7 · antrenman: perde yukarıdan iner, görüntü içeride yavaşça geri çekilir */
html.js #antrenman .col-img.rv-img{opacity:1;transform:none;filter:none;
  clip-path:inset(0 -40% 100% -40%);transition:clip-path 1.3s cubic-bezier(.7,0,.2,1)}
html.js #antrenman .col-img.rv-img.in{clip-path:inset(-30% -40% -30% -40%)}
html.js #antrenman .col-img.rv-img.done{clip-path:none}
html.js #antrenman .col-img .shot{scale:1.16;transition:scale 2s var(--ease) .1s}
html.js #antrenman .col-img.in .shot{scale:1}

/* 8 · gelişim takibi: başlık bulanıktan netleşir, grafik çizilir */
html.js #takip h2.rv{filter:blur(10px);transform:scale(.97);transform-origin:0 50%;
  transition:opacity .9s,transform 1.1s var(--ease),filter 1.1s var(--ease)}
html.js #takip h2.rv.in{filter:none;transform:none}

/* 9 · topluluk: telefon sol kenardan girer, ikincisi arkasında alttan yükselir */
html.js #topluluk .col-img.rv-img{opacity:1;transform:none;filter:none}
html.js #topluluk .col-img>.shot:not(.back){translate:-120% 0;transition:translate 1.3s cubic-bezier(.16,1,.3,1)}
html.js #topluluk .col-img.in>.shot:not(.back){translate:0 0}
html.js #topluluk .col-img .back{translate:-22% 45%;opacity:0;
  transition:translate 1.5s cubic-bezier(.16,1,.3,1) .25s,opacity .6s .25s}
html.js #topluluk .col-img.in .back{translate:-22% 0;opacity:.95}
html #topluluk .col-img .back{top:13%}

/* 9b · takas (2026-09-30, Evrim): kort bulma önce gelir, sonra arkadaş listesi öne geçer.
   Deste kartı gibi: ikisi zıt yönlere açılır, tam ortada katman değiştirir, yerine oturur.
   Arka telefonun yeri: top 13% + translate -22% + scale .8; öndeki bu yere, arkadaki öne gider.
   Yalnız translate/scale/z-index canlanır. Bu iki telefonda paralaks kapalı: animation
   kısaltması onu sıfırlıyor, iki hareket üst üste binince takas bulanıklaşıyordu. */
#topluluk .col-img>.shot:not(.back){position:relative;z-index:1}
html.js #topluluk .col-img.in>.shot:not(.back){animation:takas-on 1.6s cubic-bezier(.65,0,.25,1) 2.2s forwards}
html.js #topluluk .col-img.in .back{animation:takas-arka 1.6s cubic-bezier(.65,0,.25,1) 2.2s forwards}
@keyframes takas-on{
  0%{translate:0 0;scale:1;z-index:1;opacity:1}
  46%{translate:9% 6%;scale:.88;z-index:1}   /* metne doğru az açılır: kural telefon yazıya yaslanmaz */
  50%{z-index:-1}
  100%{translate:-22% 13%;scale:.8;z-index:-1;opacity:.95}}
@keyframes takas-arka{
  0%{translate:-22% 0;scale:.8;z-index:-1;opacity:.95}
  46%{translate:-48% -5%;scale:.87;z-index:-1}
  50%{z-index:2}
  100%{translate:0 -13%;scale:1;z-index:2;opacity:1}}
/* hareket kapalıysa doğrudan son hâl: arkadaş listesi önde */
@media(prefers-reduced-motion:reduce){
  html.js #topluluk .col-img.in>.shot:not(.back){translate:-22% 13%;scale:.8;z-index:-1;opacity:.95}
  html.js #topluluk .col-img.in .back{translate:0 -13%;scale:1;z-index:2;opacity:1}
}

/* 10 · döngü: üstten bir çizgi akar, geçtiği kart bir an yanar */
html .loop{position:relative}
html.js .loop::before{content:"";position:absolute;left:0;right:0;top:-16px;height:2px;border-radius:2px;
  background:linear-gradient(90deg,var(--mint),var(--cyan));transform:scaleX(0);transform-origin:0 50%;
  transition:transform 1.8s cubic-bezier(.6,0,.2,1) .2s}
html.js #dongu.seen .loop::before{transform:scaleX(1)}
html.js .loop .lp.rv{transform:translateY(12px) scale(.96)}
html.js .loop .lp.rv.in{transform:none;animation:yan 1.3s var(--ease) calc(var(--i,0) * 250ms + .3s) both}
@keyframes yan{0%{border-color:var(--line)}40%{border-color:var(--mint);box-shadow:0 0 0 5px rgba(0,245,160,.18)}
  100%{border-color:var(--line);box-shadow:0 0 0 0 rgba(0,245,160,0)}}

/* 11 · kimler için: kart, ikonunun merkezinden daire olarak açılır */
html.js #kimler-icin .card.rv{opacity:1;transform:none;clip-path:circle(0% at 47px 47px);
  transition:clip-path 1.1s cubic-bezier(.6,.05,.2,1) calc(var(--i,0) * 120ms)}
html.js #kimler-icin .card.rv.in{clip-path:circle(150% at 47px 47px)}
html.js #kimler-icin .card.rv.done{clip-path:none}

/* 12 · android: üç telefon üst üste gelir, sonra dış kenara doğru basamak basamak açılır */
html.js #android .col-img.rv-img{opacity:1;transform:none;filter:none}
html.js #android .col-img>.shot:not(.back){translate:0 70px;opacity:0;transition:translate 1s var(--ease),opacity .7s}
html.js #android .col-img.in>.shot:not(.back){translate:0 0;opacity:1}
html.js #android .col-img .back{translate:0 0;opacity:0;
  transition:translate 1.3s cubic-bezier(.16,1,.3,1) .55s,opacity .5s .55s}
html.js #android .col-img.in .back-r{translate:18% 0;opacity:.95}
html.js #android .col-img.in .back-r2{translate:36% 0;opacity:.95}

/* 13 · manifesto: satırlar odak çeker gibi bulanıktan netleşir */
html.js #manifesto .rv{transform:none;filter:blur(9px);
  transition:opacity 1s var(--ease),filter 1.2s var(--ease);transition-delay:calc(var(--i,0) * 110ms)}
html.js #manifesto .rv.in{filter:none}
html.js #manifesto .mf.rv{letter-spacing:.05em;transition:opacity 1s var(--ease),filter 1.2s var(--ease),letter-spacing 1.4s var(--ease)}
html.js #manifesto .mf.rv.in{letter-spacing:0}

/* 15 · SSS: sorular soldan sırayla kayar */
html.js .faq details.rv{transform:translateX(-36px)}
html.js .faq details.rv.in{transform:none}

/* şerit fotoğraf: soldan sağa silinerek açılır */
html.js .strip{clip-path:inset(0 100% 0 0);transition:clip-path 1.5s cubic-bezier(.7,0,.2,1)}
html.js .strip.seen{clip-path:inset(0)}

/* 16 · final: başlık ölçekle gelir, arkasından iki halka yayılır */
html.js #basla h2.rv{transform:scale(.88);filter:blur(6px);
  transition:opacity .9s,transform 1.1s var(--ease),filter 1s var(--ease)}
html.js #basla h2.rv.in{transform:none;filter:none}
html .cta-final::after{content:"";position:absolute;z-index:-1;left:50%;top:40%;width:280px;height:280px;
  margin:-140px 0 0 -140px;border-radius:50%;border:2px solid var(--mint);opacity:0;pointer-events:none}
html.js #basla.seen::after{animation:halka 2.6s var(--ease) .4s 2}
@keyframes halka{0%{opacity:.85;transform:scale(.3)}100%{opacity:0;transform:scale(3.2)}}

@media(prefers-reduced-motion:reduce){
  html.js .rv .ico{stroke-dashoffset:0;fill-opacity:1}
  html.js *{clip-path:none!important}
  html.js .col-img>.shot:not(.back){translate:none!important;opacity:1!important;scale:none!important}
  html.js .col-img .back{opacity:.95!important}
  html.js .rv{filter:none!important;letter-spacing:normal}
}
