/*
    dsaihub — Silent Launch sayfası özel stilleri.

    Kaynak: NWAcademy_MVP2/wwwroot/landing/css/custom.css (Claude Code, 2026-09-08).
    Hocam'ın isteğiyle açılış sayfası NWAcademy'nin görüntüsüne çevrildi; bu dosya da
    onunla hizalandı. Asıl görünümü theme.css + utilities.css (Landberg teması) veriyor,
    burada yalnızca onların üstüne binen küçük eklemeler var.

    NOT: Cowork'ün ilk sürümündeki .landing-hero / .landing-brand / .landing-kicker /
    .landing-subtitle kuralları KALDIRILDI — markup artık NWAcademy'nin overlay +
    intro-content yapısını kullanıyor, o sınıfların karşılığı kalmadı.
*/

:root {
    /* Hata/hız sınırı sayfalarının koyu zemini ve KVKK kutusu için. */
    --dsa-bg-start: #0b1220;
    --dsa-bg-end: #131b2e;
}

/*------------------------------------------------------
[Slogan Slider]

Hero'daki dönen slogan alanı. Bootstrap 5 Carousel (carousel-fade)
üzerine kurulu; ayrı bir JS/CSS bağımlılığı yok.

⚠️ Şu an tek slot var (dsaihub'ın slogan metinleri henüz yazılmadı,
uydurulmadı). Tek slotta carousel dönmez ama stiller aynen geçerli —
slogan gelince Index.cshtml'e slot eklemek yetiyor.

Not: Sloganların satır sayısı ekran genişliğine göre 2-3 arasında
değişiyor. Konteynere sabit bir min-height verilmezse her geçişte
altındaki form yukarı/aşağı zıplar (CLS).
------------------------------------------------------*/

.slogan-slider {
    margin-top: 0.5rem;
    margin-bottom: 2.5rem;

    /* Geçiş süresini tek yerden ayarlamak için. 1s yumuşak ama uyuşuk
       değil; 1.4s'e kadar çıkılabilir, ötesi ağır hissettiriyor. */
    --slogan-fade: 1s;
}

/*
Yumuşak geçiş — Bootstrap'in varsayılan crossfade'inin üzerine yazıyoruz.

Bootstrap varsayılanında giden slide sönmüyor: `opacity 0s .6s` ile tam
opaklıkta arkada bekleyip 0.6sn sonra anlık kesiliyor. Süre uzatılınca iki
slogan uzun süre üst üste okunur hâle geliyor.

Çözüm: giden slide'ı gerçekten söndürüyoruz ve iki tarafa birbirini
tamamlayan easing veriyoruz. İki tarafın süresi eşit tutuldu; Bootstrap'in
slide-bitti callback'i transition süresini elementten okuduğu için farklı
süreler vermek carousel'in iç zamanlamasını bozardı.
*/

/* Gelen slide: geç başlar, yumuşakça belirir */
.slogan-slider.carousel-fade .carousel-item {
    transition-property: opacity;
    transition-duration: var(--slogan-fade);
    transition-timing-function: cubic-bezier(0.7, 0, 1, 1);
}

/* Giden slide: hemen sönmeye başlar, sona doğru yavaşlar */
.slogan-slider.carousel-fade .active.carousel-item-start,
.slogan-slider.carousel-fade .active.carousel-item-end {
    opacity: 0;
    transition: opacity var(--slogan-fade) cubic-bezier(0, 0, 0.3, 1);
}

/* Aktif olmayan slide'lar Bootstrap tarafından display:none yapılıyor,
   bu yüzden min-height'ı hem inner'a hem metne veriyoruz. */
.slogan-slider .carousel-inner {
    min-height: clamp(5.5rem, 12vw, 7rem);
}

.slogan-slider .slogan-text {
    min-height: clamp(5.5rem, 12vw, 7rem);
    margin: 0;
    padding: 0 0.5rem;

    /* Metni kendi alanı içinde dikey ortala. Flex'i .carousel-item'a
       değil <p>'ye veriyoruz — carousel-item'ın display'ini ezersek
       Bootstrap'in slide gösterme/gizleme mantığı bozulur. */
    display: flex;
    align-items: center;
    justify-content: center;

    font-family: "Nunito", Helvetica, sans-serif;
    font-weight: 700;
    line-height: 1.3;
    font-size: clamp(1.35rem, 3.6vw, 2.5rem);
    text-shadow: 0 2px 12px rgba(0, 0, 0, 0.35);
}

.slogan-teaser {
    margin-bottom: 0;
    opacity: 0.85;
}

/*------------------------------------------------------
[KVKK modali — koyu tema]
------------------------------------------------------*/

.kvkk-box {
    background: rgba(255, 255, 255, 0.06);
    border-radius: 0.5rem;
}

/*------------------------------------------------------
[Hata / hız sınırı sayfaları]

Bu sayfalarda fotoğraf slaytı yok (Vegas yalnızca .overlay-intro'ya
bağlanıyor), o yüzden kendi koyu zeminlerini taşıyorlar.
------------------------------------------------------*/

.landing-error {
    background: linear-gradient(160deg, var(--dsa-bg-start) 0%, var(--dsa-bg-end) 100%);
}

/*------------------------------------------------------
[Footer — altta yapışık tek satır]  (2026-10-18, DEC0002 · TD0002)

Markup: Views/Shared/_LandingLayout.cshtml → <footer class="lw-ftr">.
--lw-ftr-h: footer'ın gerçek yüksekliği; layout'taki küçük betik ölçüp
yazıyor. Betik çalışmazsa aşağıdaki varsayılan (tek satır) geçerli.
------------------------------------------------------*/

:root {
    --lw-ftr-h: 2.25rem;
}

/* theme.css html/body'ye overflow-x: hidden veriyor. Bu, body'yi kaydırma
   kutusu yapar ve position: sticky çalışmaz. `clip` yatay taşmayı aynı
   şekilde gizler ama kaydırma kutusu oluşturmaz (MVP1'de aynı sorun, DEC0012 §2). */
html,
body {
    overflow-x: clip;
}

/* Sayfa kısa olsa bile footer ekranın en altında dursun: body dikey bir
   sütun, içerik alanı boş yeri dolduruyor, footer en sona itiliyor.
   Koyu zemin: footer bir an fotoğrafın dışına düşerse beyaz şerit görünmesin. */
body {
    min-height: 100dvh;
    display: flex;
    flex-direction: column;
    background-color: var(--dsa-bg-start);
}

body > .w-100 {
    flex: 1 0 auto;
}

.lw-ftr {
    position: sticky;
    bottom: 0;
    /* Bootstrap modal'ı 1055 (zemini 1050) → footer her zaman pencerelerin ALTINDA. */
    z-index: 1020;

    /* Footer, giriş bölümünün (fotoğraf slaytı) son şeridinin üstüne biner.
       Böylece fotoğraf arkada dönmeye devam eder ve sayfa footer kadar
       gereksiz yere kaymaz. */
    margin-top: calc(-1 * var(--lw-ftr-h));

    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    gap: 0.25rem 1rem;
    padding: 0.5rem 1.25rem;

    background: rgba(0, 0, 0, 0.55);
    color: #fff;
    font-family: "Open Sans", "Nunito", Helvetica, sans-serif;
    font-size: 13px;
    line-height: 1.4;
}

.lw-ftr a {
    color: #fff;
    text-decoration: none;
}

.lw-ftr a:hover,
.lw-ftr a:focus-visible {
    text-decoration: underline;
}

.lw-ftr-sep {
    margin: 0 0.35rem;
    opacity: 0.6;
}

/* Footer'ın binme payı kadar içerikte boşluk: "Çok Yakında", e-posta kutusu
   ve gönder butonu footer'ın altında kalmasın.
   Neden üstte de aynı boşluk: içerik dikey ortalı. Yalnızca alta dolgu
   verilirse her şey yarım footer kadar yukarı kayıyor ve küçük telefonda
   başlık sol üstteki videoya biniyordu. Simetrik dolguyla ortalama aynen
   kalıyor; içerik ekrana sığmayıp sayfa uzarsa alt dolgu footer'ı karşılıyor. */
.intro-content-inner {
    padding-top: var(--lw-ftr-h);
    padding-bottom: var(--lw-ftr-h);
}

.landing-error {
    padding-bottom: var(--lw-ftr-h);
}

/* Sol alttaki LinkedIn düğmesi Bootstrap'in `bottom-0` sınıfıyla (!important)
   en alta yapışık; footer'ın üstünde kalsın diye yukarı alıyoruz. Düğmenin
   kendi alt boşluğu (mb-4 = 1.5rem) zaten var; footer kadar değil, 1.25rem
   eksiği kadar kaldırmak yetiyor: footer'ın ~4px üstünde durur, küçük
   telefonda (360x640) "Kişisel verileriniz KVKK..." satırına binmez. */
.intro-content > .list-inline.position-absolute.bottom-0 {
    bottom: calc(var(--lw-ftr-h) - 1.25rem) !important;
}

/* Küçük + alçak telefon (ör. 360x640): içerik ekranı tam dolduruyor, footer'ın
   üstünde LinkedIn düğmesine yer kalmıyor ve "Kişisel verileriniz KVKK..."
   satırına biniyordu. Bu ekranlarda düğme boş olan sağ üst köşeye geçiyor.
   (Bootstrap konum sınıfları !important olduğu için burada da gerekiyor.) */
@media (max-width: 575.98px) and (max-height: 700px) {
    .intro-content > .list-inline.position-absolute.bottom-0 {
        top: 0 !important;
        bottom: auto !important;
        left: auto !important;
        right: 0 !important;
        margin: 0.75rem 0.75rem 0 0 !important;
    }
}

/* Telefon (≤575px): iki parça sığmazsa alt alta, ortalı → en fazla 2 satır. */
@media (max-width: 575.98px) {
    .lw-ftr {
        justify-content: center;
        text-align: center;
        padding: 0.4rem 0.75rem;
    }
}

/* Yatay telefon / açık klavye: ekran çok alçak, yapışık footer içeriğin
   büyük kısmını kaplardı → normal akışa dönüyor, en altta duruyor. */
@media (max-height: 500px) {
    .lw-ftr {
        position: static;
        margin-top: 0;
    }

    .intro-content-inner {
        padding-top: 0;
        padding-bottom: 0;
    }

    .landing-error {
        padding-bottom: 0;
    }

    .intro-content > .list-inline.position-absolute.bottom-0 {
        bottom: 0 !important;
    }
}

/* Bootstrap'in kendi reduced-motion kuralları var ama yukarıdaki
   override'larımız onlardan daha spesifik olduğu için burada aynı
   spesifiklikle tekrar susturuyoruz. Bu blok dosyanın sonunda kalmalı. */
@media (prefers-reduced-motion: reduce) {
    .slogan-slider.carousel-fade .carousel-item,
    .slogan-slider.carousel-fade .active.carousel-item-start,
    .slogan-slider.carousel-fade .active.carousel-item-end {
        transition: none;
    }
}
