/* ============================================================================
   Lunovia Records — polish.css
   Additive görsel cila katmanı. LAYOUT'A DOKUNMAZ — yalnızca görsel rötuş.
   Tüm sayfaların <head>'ine eklenir. Hem koyu (varsayılan) hem açık temada
   ([data-theme="light"]) çalışacak şekilde renkten bağımsız tutulmuştur.
   ============================================================================ */

/* ── Mobil dokunma + taşma güvenliği ─────────────────────────────────────── */
* {
  -webkit-tap-highlight-color: transparent;
}
html {
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
img, svg, video, canvas {
  max-width: 100%;
}

/* ── Metin seçim rengi (markaya uygun mor) ───────────────────────────────── */
::selection {
  background: rgba(157, 78, 221, 0.32);
  color: #fff;
}

/* ── Erişilebilir + şık odak halkası (yalnızca klavye ile gezerken) ──────── */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
[tabindex]:focus-visible,
[role="button"]:focus-visible {
  outline: 2px solid #9d4edd;
  outline-offset: 2px;
  border-radius: 6px;
}
/* Fare ile tıklamada outline gösterme (yalnızca :focus-visible) */
a:focus:not(:focus-visible),
button:focus:not(:focus-visible) {
  outline: none;
}

/* ── Genel yumuşak geçişler (renk/gölge/transform) ───────────────────────── */
a,
button,
.btn,
[role="button"],
input,
select,
textarea {
  transition: color .18s ease, background-color .18s ease, border-color .18s ease,
              box-shadow .18s ease, transform .12s ease, opacity .18s ease, filter .18s ease;
}

/* ── Buton mikro-etkileşimleri (renkleri sayfa stili belirler) ───────────── */
.btn { will-change: transform; }
.btn:hover:not(:disabled):not([disabled]) {
  transform: translateY(-1px);
  filter: brightness(1.06);
}
.btn:active:not(:disabled):not([disabled]) {
  transform: translateY(0);
  filter: brightness(.97);
}
.btn:disabled,
.btn[disabled],
button:disabled,
button[disabled] {
  opacity: .55;
  cursor: not-allowed !important;
  transform: none !important;
  filter: none !important;
}

/* ── Kart hover derinliği (yalnızca .card sınıfı; layout değişmez) ────────── */
.card,
.settings-card,
.stat-card {
  transition: box-shadow .22s ease, transform .22s ease, border-color .22s ease;
}
.card:hover,
.settings-card:hover {
  box-shadow: 0 12px 36px rgba(157, 78, 221, 0.10), 0 4px 12px rgba(0, 0, 0, .30);
  border-color: rgba(157, 78, 221, 0.18);
}
.stat-card:hover {
  box-shadow: 0 8px 24px rgba(157, 78, 221, 0.08);
  transform: translateY(-1px);
}

/* ── Glassmorphism ────────────────────────────────────────────────────────── */
.stat-card,
.cta-box {
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

/* ── Tablo satırı hover okunabilirliği ───────────────────────────────────── */
.data-table tbody tr {
  transition: background-color .15s ease;
}
.data-table tbody tr:hover {
  background: rgba(157, 78, 221, 0.06);
}

/* ── Buton tutarlılığı ───────────────────────────────────────────────────── */
.btn,
.btn-primary,
.cta-btn,
.hero-cta,
.submit-btn,
.event-ticket,
.event-landing-ticket {
  font-family: 'DM Sans', 'Inter', sans-serif;
  letter-spacing: 0.2px;
  transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}

/* ── Tipografi hiyerarşisi ──────────────────────────────────────────────── */
.section-title {
  letter-spacing: -0.5px;
}

/* ── Staggered fade-up animasyonları ────────────────────────────────────── */
.fade-up-delay-1 { transition-delay: 0.1s; }
.fade-up-delay-2 { transition-delay: 0.2s; }
.fade-up-delay-3 { transition-delay: 0.3s; }

/* ── Özel scrollbar (markaya uygun, ince) ────────────────────────────────── */
* {
  scrollbar-width: thin;
  scrollbar-color: rgba(157, 78, 221, 0.45) transparent;
}
::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}
::-webkit-scrollbar-track {
  background: transparent;
}
::-webkit-scrollbar-thumb {
  background: rgba(157, 78, 221, 0.40);
  border-radius: 8px;
  border: 2px solid transparent;
  background-clip: padding-box;
}
::-webkit-scrollbar-thumb:hover {
  background: rgba(157, 78, 221, 0.65);
  background-clip: padding-box;
}

/* ── Görsel yüklenirken bozulmayı azalt ──────────────────────────────────── */
img {
  font-size: 12px;
}

/* ── Gelişmiş glassmorphism kart efekti ──────────────────────────────────── */
.card,
.settings-card {
  background: rgba(255, 255, 255, 0.02);
  border: 1px solid rgba(255, 255, 255, 0.06);
}
[data-theme="light"] .card,
[data-theme="light"] .settings-card {
  background: rgba(255, 255, 255, 0.85);
  border: 1px solid rgba(0, 0, 0, 0.08);
}

/* ── Stat kartları shimmer ──────────────────────────────────────────────── */
.stat-card {
  position: relative;
  overflow: hidden;
}
.stat-card::before {
  content: '';
  position: absolute;
  top: 0; left: -100%;
  width: 50%;
  height: 100%;
  background: linear-gradient(90deg, transparent, rgba(157, 78, 221, 0.04), transparent);
  transition: left 0.5s;
  pointer-events: none;
}
.stat-card:hover::before {
  left: 100%;
}

/* ── Input alanları — daha belirgin focus ─────────────────────────────── */
.form-input:focus,
.form-select:focus,
.form-textarea:focus,
input[type="text"]:focus,
input[type="email"]:focus,
input[type="password"]:focus,
input[type="number"]:focus,
input[type="url"]:focus,
input[type="date"]:focus,
input[type="month"]:focus,
input[type="datetime-local"]:focus,
textarea:focus,
select:focus {
  border-color: rgba(157, 78, 221, 0.5);
  box-shadow: 0 0 0 3px rgba(157, 78, 221, 0.08), 0 2px 8px rgba(0, 0, 0, 0.15);
}

/* ── Badge parlaklık ──────────────────────────────────────────────────── */
.badge {
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.badge:hover {
  transform: scale(1.04);
}

/* ── Link alt çizgi animasyonu ────────────────────────────────────────── */
.nav-links a,
.footer-links a {
  position: relative;
}
.nav-links a::after,
.footer-links a::after {
  content: '';
  position: absolute;
  bottom: -2px;
  left: 0;
  width: 0;
  height: 1.5px;
  background: #9d4edd;
  transition: width 0.25s cubic-bezier(0.4, 0, 0.2, 1);
}
.nav-links a:hover::after,
.footer-links a:hover::after {
  width: 100%;
}

/* ── Daha iyi alert/toast kutuları ───────────────────────────────────── */
.alert {
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  animation: alertSlideIn 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
@keyframes alertSlideIn {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ── Empty state ikon pulse ──────────────────────────────────────────────────
   ⚠️ DOĞRUDAN ÇOCUK (`>`) ZORUNLU — v4.26.4'te düzeltildi.
   Torun-eşleşen `.empty-state i` yazımı, boş-durumun İÇİNDEKİ `.empty-cta`
   butonunun ikonunu da yakalıyordu: buton ikonu nabız atıyor ve (aşağıdaki
   `body.lv-space` kuralıyla birlikte) 2.5rem BLOK öğeye dönüşüp butonu
   şişiriyordu. 8 sayfada 12 butonu etkiliyordu.
   Boş-durum ikonu her zaman doğrudan çocuk, buton ikonu torundur → `>` ikisini
   temiz ayırır. Yeni bir boş-durum yazarken ikonu SARMALAMA. */
.empty-state > i,
.empty-state > .empty-icon {
  animation: emptyPulse 2.5s ease-in-out infinite;
}
@keyframes emptyPulse {
  0%, 100% { opacity: 0.4; transform: scale(1); }
  50%      { opacity: 0.6; transform: scale(1.06); }
}
/* Kompakt varyant (kanban kolonları, kart içi tablolar) */
.empty-state.sm {
  padding: 18px 12px;
}
.empty-state.sm > i,
.empty-state.sm > .empty-icon {
  font-size: 20px;
  margin-bottom: 6px;
}
.empty-state.sm p {
  font-size: 12px;
  margin: 0;
}

/* ── Tablo header sınırı ─────────────────────────────────────────────── */
.data-table thead th,
table thead th {
  border-bottom: 2px solid rgba(157, 78, 221, 0.12);
  font-weight: 700;
  letter-spacing: 0.3px;
}

/* ── Kart başlık çizgisi ─────────────────────────────────────────────── */
.card-title,
.card-header {
  position: relative;
  padding-bottom: 12px;
}
.card-title::after,
.card-header::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 40px;
  height: 2px;
  background: linear-gradient(90deg, #9d4edd, transparent);
  border-radius: 2px;
}

/* ── Sayfa geçiş animasyonu ──────────────────────────────────────────── */
body {
  animation: pageIn 0.35s ease-out;
}
@keyframes pageIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* ── Skeleton shimmer için yardımcı ──────────────────────────────────── */
.shimmer {
  background: linear-gradient(110deg, transparent 33%, rgba(157, 78, 221, 0.05) 50%, transparent 66%);
  background-size: 300% 100%;
  animation: shimmer 1.8s linear infinite;
}
@keyframes shimmer {
  0%   { background-position: 200% 0; }
  100% { background-position: -100% 0; }
}

/* ── Dokunmatik hedef minimum boyutu (mobil) ─────────────────────────────── */
@media (hover: none) and (pointer: coarse) {
  .btn,
  button,
  .nav-link,
  [role="button"] {
    min-height: 42px;
  }
  /* mobilde hover lift'i kapat (yapışkan hover'ı önler) */
  .btn:hover:not(:disabled) {
    transform: none;
    filter: none;
  }
  .card:hover { box-shadow: none; }
}

/* ── Hareket azaltma tercihi (erişilebilirlik) ───────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ============================================================================
   MOBİL GÜVENLİK KATMANI — telefonlarda sorun çıkmasın diye genel kurallar.
   Layout'u bozmaz; yalnızca taşmayı engeller ve okunabilirliği artırır.
   ============================================================================ */
@media (max-width: 600px) {
  /* Yatay kaydırmayı (taşmayı) engelle */
  html, body {
    overflow-x: hidden;
    max-width: 100%;
  }

  /* Aşırı yan boşlukları telefonda makul seviyeye çek (üst/alt korunur) */
  .container {
    padding-left: 16px !important;
    padding-right: 16px !important;
  }

  /* Tüm veri tablolarını telefonda yatay kaydırılabilir yap (kırpılmaz) */
  .data-table {
    display: block;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    white-space: nowrap;
    max-width: 100%;
  }

  /* Uzun kelimeler/linkler taşmasın */
  p, a, span, td, th, li, h1, h2, h3, label, code {
    overflow-wrap: break-word;
    word-wrap: break-word;
  }

  /* Modal/overlay içerikleri ekrana sığsın */
  .modal-content,
  .modal-box {
    max-width: 95vw !important;
  }
}

/* ── Events/Merch landing responsive ────────────────────────────────────── */
@media (max-width: 600px) {
  .events-landing-grid .event-landing-card {
    padding: 14px 14px;
    gap: 12px;
  }
  .merch-landing-grid {
    grid-template-columns: 1fr 1fr !important;
    gap: 12px !important;
  }
  .merch-landing-info {
    padding: 12px 12px !important;
  }
  .earnings-breakdown-grid {
    grid-template-columns: repeat(2, 1fr) !important;
  }
}

/* Çok küçük telefonlar (≤380px): metin ölçeğini biraz küçült */
@media (max-width: 380px) {
  .container {
    padding-left: 12px !important;
    padding-right: 12px !important;
  }
}

/* Admin panel: tab içindeki çok kolonlu inline grid formlar telefonda dikey yığılır.
   (Stylesheet !important, inline style="display:grid" kuralını ezer.) */
@media (max-width: 640px) {
  .tab-panel form [style*="grid-template-columns"] {
    display: flex !important;
    flex-direction: column !important;
    align-items: stretch !important;
    gap: 10px !important;
  }
  .tab-panel form [style*="grid-template-columns"] > * {
    width: 100% !important;
  }
}

/* ── Track card hover lift + shadow ───────────────────────────────────── */
.track-card {
  transition: transform 0.22s cubic-bezier(0.4,0,0.2,1),
              box-shadow 0.22s ease,
              border-color 0.22s ease;
}
.track-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 8px 24px rgba(157,78,221,0.12), 0 2px 8px rgba(0,0,0,0.3);
}

/* Not: burada `.wall-cover` için MOR bir hover ışıması vardı — v4.34'te
   kaldırıldı. Son Çıkışlar rafı derinliğini artık ay ışığı/siyahtan alıyor
   (mor-yalnız-vurguda disiplini) ve kuralın tamamı tek tüketicisiyle birlikte
   index.php'nin sayfa-kapsamlı bloğunda duruyor. Burada tutmak, açık temalı
   sanatçı panelinin de yüklediği ortak katmanı gereksiz kirletiyordu. */

/* ── Roster card hover accent ─────────────────────────────────────────── */
.roster-card .roster-tracks {
  transition: color 0.2s ease;
}
.roster-card:hover .roster-tracks {
  color: rgba(157,78,221,0.7);
}

/* ── Dil seçici (lang_switcher.php) — JS'siz <details> dropdown cilası ── */
/* Açılır üçgen işaretini gizle (saf görünüm) */
.lunovia-lang-switch > summary { list-style: none; }
.lunovia-lang-switch > summary::-webkit-details-marker { display: none; }
.lunovia-lang-switch > summary::marker { content: ""; }
/* Summary hover */
.lunovia-lang-summary:hover {
  border-color: rgba(157,78,221,0.55) !important;
  background: rgba(157,78,221,0.10) !important;
}
.lunovia-lang-summary:hover .lunovia-lang-globe { opacity: 1; }
/* Açıkken caret döner */
.lunovia-lang-caret { transition: transform .2s ease; }
.lunovia-lang-switch[open] .lunovia-lang-caret { transform: rotate(180deg); }
/* Menü seçenek hover */
.lunovia-lang-opt:hover { background: rgba(157,78,221,0.14) !important; color: #fff !important; }

/* ══════════════════════════════════════════════════════════════════════
   Ortak public navbar + footer (v4.16 — TÜM public sayfalarda tek tasarım)
   Eskiden core/public_nav.php içindeki inline <style> guard'daydı; buraya
   taşındı → footer nav olmadan da stilli (smart-link sayfaları bağımsız
   kullanır), per-sayfa CSS bağımlılığı biter.
   ══════════════════════════════════════════════════════════════════════ */
.pnav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; height: 70px; display: flex; align-items: center; justify-content: space-between; padding: 0 40px; background: var(--pnav-bg, rgba(3,3,3,0.8)); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); border-bottom: 1px solid rgba(255,255,255,0.06); }
.pnav-logo { font-family: 'Syne', sans-serif; font-weight: 700; font-size: 1.25rem; letter-spacing: -0.5px; color: var(--text, #fff); text-decoration: none; }
.pnav-links { display: flex; align-items: center; gap: 20px; flex-wrap: nowrap; }
.pnav-links a { color: rgba(255,255,255,0.6); text-decoration: none; font-size: 0.9rem; font-weight: 500; transition: color 0.2s; display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
.pnav-links a:hover, .pnav-links a.is-active { color: #fff; }
.pnav-links a i { font-size: 0.9rem; }
.pnav-login i { font-size: 1rem; }
.pnav-cta { background: linear-gradient(135deg, #9d4edd, #7b2cbf) !important; color: #fff !important; padding: 8px 18px; border-radius: 8px; font-weight: 600; font-size: 0.85rem; box-shadow: 0 4px 14px rgba(157,78,221,0.3); transition: all 0.25s cubic-bezier(0.4,0,0.2,1); }
.pnav-cta:hover { background: linear-gradient(135deg, #b366f0, #9d4edd) !important; transform: translateY(-1px); box-shadow: 0 6px 20px rgba(157,78,221,0.4); }

.pfooter { border-top: 1px solid rgba(255,255,255,0.06); padding: 60px 0 40px; margin-top: 80px; }
/* ⚠️ KOLON SAYISI MARKUP İLE BAĞLI: `core/public_footer.php` şu an 7 kolon basıyor
   (Marka · Kurumsal · Keşfet · Bilgi · Hesap · Hukuk · Demo).
   v4.43: "Hukuk" ARTIK "Bilgi"nin altındaki 2. `<h4>` DEĞİL, KENDİ KOLONU —
   kullanıcı ekran görüntüsüyle bildirdi: *"hukuk tarafı aşağıda kalıyor, onu
   diğerleriyle aynı seviyeye çıkar"*. Bu yüzden v4.42'nin 6 kolonlu
   `1.5fr 1fr 1fr 1fr 0.8fr 1.3fr` şablonu GİTTİ.
   ⚠️ MARKA KOLONU `minmax(215px, …)` — SABİT TABAN ŞART VE SEBEBİ ÖLÇÜLDÜ:
      "Lunovia Records" 24px Syne-700 ile ~220px yer kaplıyor. Saf `fr` ile 7
      kolonda markanın payı ~195px'e düşüyor ve yazı "Lunovia / Records" diye
      İKİ SATIRA bölünüyordu (kullanıcının bildirdiği ikinci hata tam bu).
      `minmax(215px, 1.5fr)` markaya taban genişlik garantiler; grid kalan yeri
      diğer kolonlara paylaştırır → `white-space:nowrap` ile birlikte tek satır
      DETERMİNİSTİK olur, gap'e taşmaz.
   ⚠️ DİĞER KOLONLARDA `minmax(0, …)` ZORUNLU, çıplak `fr` DEĞİL: `1fr` =
      `minmax(auto,1fr)` ve `auto` = min-content; bölünemeyen uzun bir Almanca
      kelime (ör. `Nutzungsbedingungen` ~141px) track'i BÜYÜTÜP gridi 1200px'in
      dışına taşırır ve sayfada yatay kaydırma çubuğu açar.
   ⚠️ `gap: 32px 22px` — 7 kolonda 6 yatay boşluk var; 32px'te sütunlar
      "Marka Varlıkları" için fazla daralıyordu. Dikey boşluk 32px kalır.
   ÖLÇÜLEN GENİŞLİKLER (içerik kutusu 1200−80=1120px): marka 215 · Kurumsal 127 ·
      Keşfet 127 · Bilgi 120 · Hesap 89 · Hukuk 139 · Demo 171.
      Hukuk'ta "KVKK Aydınlatma Metni" (~148px) ve "Demo Gönderim Şartları"
      (~150px) İKİ SATIRA sarar — bu KABUL EDİLMİŞ bir durum, v4.42'de de aynen
      böyle sarıyordu (ekran görüntüsünde görünüyor), yani gerileme değil.
   ⚠️ Kolon ekleyen/çıkaran kişi BU BLOĞU, aşağıdaki track listesini VE ≤1100px
      bloğundaki `repeat(3,…)` değerini de güncellemeli. */
.pfooter-inner { max-width: 1200px; margin: 0 auto; padding: 0 40px; display: grid; grid-template-columns: minmax(215px, 1.5fr) minmax(0, 1fr) minmax(0, 1fr) minmax(0, 0.95fr) minmax(0, 0.7fr) minmax(0, 1.1fr) minmax(0, 1.35fr); gap: 32px 22px; align-items: start; }
/* ⚠️ `white-space:nowrap` = kullanıcının bildirdiği "Lunovia / Records" iki satır
      hatasının doğrudan düzeltmesi. ≤480px'te GERİ ALINIR (aşağıda): tek kolonlu
      telefon düzeninde uzun bir `brandName` yatay taşma yapmasın.
   ⚠️ `letter-spacing:-0.5px` bir cila değil TUTARLILIK düzeltmesi: `.pnav-logo`
      (aşağıda) ve 404 sayfasının `.e404-brand`'i AYNI wordmark için bunu zaten
      kullanıyor; `.pfooter-brand` tek istisnaydı. Yan fayda ~7px pay. */
.pfooter-brand { font-family: 'Syne', sans-serif; font-weight: 700; font-size: 1.5rem; letter-spacing: -0.5px; color: var(--text, #fff); margin-bottom: 8px; white-space: nowrap; }
.pfooter-tagline { font-size: 0.85rem; color: rgba(255,255,255,0.4); font-style: italic; margin-bottom: 20px; }
.pfooter-socials { display: flex; gap: 14px; margin-bottom: 20px; flex-wrap: wrap; }
.pfooter-socials a { width: 36px; height: 36px; border-radius: 50%; border: 1px solid rgba(255,255,255,0.1); display: flex; align-items: center; justify-content: center; font-size: 0.9rem; color: rgba(255,255,255,0.5); text-decoration: none; transition: all 0.25s cubic-bezier(0.4,0,0.2,1); }
.pfooter-socials a:hover { color: #fff; border-color: rgba(157,78,221,0.4); background: rgba(157,78,221,0.1); transform: translateY(-2px); }
.pfooter-copy { font-size: 0.75rem; color: rgba(255,255,255,0.28); line-height: 1.6; }
.pfooter-col h4 { font-family: 'Syne', sans-serif; font-size: 0.9rem; font-weight: 600; margin-bottom: 14px; color: rgba(255,255,255,0.7); }
.pfooter-col ul { list-style: none; margin: 0; padding: 0; }
.pfooter-col li { margin-bottom: 10px; }
.pfooter-col a { font-size: 0.85rem; color: rgba(255,255,255,0.45); text-decoration: none; transition: color 0.2s; }
.pfooter-col a:hover { color: #fff; }
.pfooter-demo p { font-size: 0.8rem; color: rgba(255,255,255,0.35); line-height: 1.6; margin-bottom: 14px; }
.pfooter-demo a.pfooter-apply { font-size: 0.85rem; color: #9d4edd; font-weight: 500; text-decoration: none; transition: color 0.2s; }
.pfooter-demo a.pfooter-apply:hover { color: #b366f0; }
/* Emniyet ağı: sığmayan bölünemez bir kelime (Almanca/Rusça) kolonu TAŞIRMAK
   yerine kırılır. Bugünkü görünümü DEĞİŞTİRMEZ — mevcut etiketlerin hiçbiri
   kolon genişliğini aşmıyor; yalnızca gelecekteki bir taşmayı kapsar. */
.pfooter-col a, .pfooter-col h4 { overflow-wrap: break-word; }

/* Sabit navbar altına kaçan anchor'ları düzelt */
[id] { scroll-margin-top: 84px; }

@media (max-width: 1100px) {
    /* Laptop/tablet: etiketleri gizle → ikon-nav.
       ⚠️ EŞİK LİNK SAYISINA BAĞLI ve 1100px tam "5 link + CTA + dil + login"
          hesabıyla seçilmiştir. v4.40'ta Ekip 6. link olarak eklenince en dar
          kritik bant 1100–1200px'e kaydığı için eşik geçici olarak 1200px'e
          çıkarılmıştı; v4.42'de Ekip footer'daki "Kurumsal" kolonuna taşındı ve
          nav yine 5 linke döndü → eşik 1100px'e GERİ ALINDI.
       ⚠️ Bunu geri almak bir cila değil DÜZELTME: 1200px'te bırakılsaydı
          1100–1200px bandındaki kullanıcılar hiçbir sebep yokken etiket yerine
          ikon görmeye devam ederdi.
       ⚠️ `core/public_nav.php`'ye 6. link eklenirse bu eşik YİNE yükseltilmeli. */
    .pnav-links a .pnav-label { display: none; }
    .pnav-links a i { font-size: 1.05rem; }
    .pnav-links { gap: 18px; }
}
/* ── FOOTER ARA BANT (v4.43) — NAV EŞİĞİNDEN AYRI BLOK, BİLİNÇLİ ─────────────
   ⚠️ Bu blok yukarıdaki nav bloğuyla AYNI genişlikte ama AYRI tutuluyor: nav
      eşiği LİNK SAYISINA bağlı ve ileride değişebilir, footer onunla birlikte
      oynamamalı (v4.40 → v4.42'de o eşik iki kez değişti).
   🔴 MEVCUT (v4.43'te OLUŞMAYAN) BİR HATAYI DA KAPATIYOR: `.pfooter-inner` için
      768px ile SONSUZ arasında hiçbir kırılım YOKTU, yani masaüstü track listesi
      769px'ten itibaren geçerliydi. Ölçüldü: 1024px'te içerik kutusu 944px ve
      v4.42'nin `1fr` kolonu 118.8px'e düşüyordu — Almanca `Änderungsprotokoll`
      (~124px) o kolonu BUGÜN DE taşırıyor. 900px'te daha kötü.
      3 kolon: 1100px'te ~325px, 769px'te ~215px → en uzun bölünemez token
      (de `Nutzungsbedingungen` ~141px) rahat sığar. */
@media (max-width: 1100px) {
    .pfooter-inner { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 768px) {
    .pnav { padding: 0 20px; height: 60px; }
    .pnav-links { gap: 14px; }
    .pfooter-inner { grid-template-columns: 1fr 1fr; gap: 28px 20px; padding: 0 20px; }
    .pfooter-brand-col { grid-column: 1 / -1; }
}
@media (max-width: 480px) {
    .pnav-links { gap: 11px; }
    .pnav-cta .pnav-cta-label { display: none; }
    .pfooter-inner { grid-template-columns: 1fr; }
    /* ⚠️ nowrap GERİ ALINIR: tek kolonlu telefon düzeninde 24px Syne ile
       "Lunovia Records" (~220px) 320px viewport'ta sığar, AMA admin ileride
       `settings.json → brandName`'i uzatırsa nowrap yatay kaydırma çubuğu
       açardı. Masaüstündeki tek-satır garantisi korunur (asıl şikâyet oradaydı). */
    .pfooter-brand { white-space: normal; }
}

/* Boş-durum CTA butonu (v4.16 — public events/merch/press boş ekranları davetkâr) */
.empty-cta { display: inline-flex; align-items: center; gap: 8px; background: linear-gradient(135deg, #9d4edd, #7b2cbf); color: #fff; text-decoration: none; padding: 11px 24px; border-radius: 10px; font-weight: 600; font-size: 0.9rem; transition: transform .2s, box-shadow .2s; box-shadow: 0 4px 14px rgba(157,78,221,0.3); }
.empty-cta:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(157,78,221,0.42); color: #fff; }

/* ═════════════════════════════════════════════════════════════════════════════
   GÖKSEL ZEMİN (v4.25) — "uzay hissi" tek kaynak
   ─────────────────────────────────────────────────────────────────────────────
   NEDEN: v4.24'te ana sayfa göksel kimliğe geçti (koyu uzay + yıldız + nebula)
   ama diğer 7 public sayfa düz `#030303` ile kaldı — her biri bu rengi kendi
   <style> bloğunda AYRI AYRI tanımlıyordu (7 kopya, tek kaynak yok). Sonuç:
   ana sayfa "bitmiş", gezinilen her sayfa "taslak" görünüyordu.

   ÇÖZÜM: aynı görünüm burada, JAVASCRIPT'SİZ. Ana sayfanın hero'sundaki canvas
   yıldız alanı ORADA KALIR (hareketli, hero'ya özel); buradaki katman onun
   durağan CSS ikizidir — ekran görüntüsünde ayırt edilemez, ama sıfır JS,
   sıfır CPU ve sayfa uzunluğundan bağımsız (position:fixed).

   ⚠️ `body`'ye DEĞİL `.lv-space` sınıfına bağlı: polish.css sanatçı panelinde de
   yükleniyor ve panelin AÇIK TEMASI var — global bir koyu zemin onu bozardı.
   Public sayfalar <body class="lv-space"> yazar, panel yazmaz.
   ═════════════════════════════════════════════════════════════════════════════ */
:root {
    /* index.php'deki palet ile BİREBİR aynı değerler (tek kaynak).
       Panelin kendi değişkenleriyle (--bg3/--border/--text2/--accent) ad çakışması YOK. */
    --space:     #05050a;               /* derin uzay zemini — saf siyah değil */
    --space-2:   #0a0a14;               /* yüzey */
    --nova:      #9d4edd;               /* marka moru — SEYREK, yalnız vurgu */
    --nova-soft: rgba(157,78,221,.14);
    --moon:      #cfd3ff;               /* ay ışığı — ikincil metin */
    --moon-dim:  rgba(207,211,255,.55);
    --hairline:  rgba(207,211,255,.10); /* çizgiler mordan değil ay ışığından */
}

body.lv-space {
    background: var(--space);
    color: #fff;
}
/* Katman 1 — NEBULA: hero'daki radial gradient reçetesinin sayfa geneli hâli.
   Sayfanın üst üçte birinde yoğun, aşağı doğru sönüyor (içerik okunur kalsın). */
body.lv-space::before {
    content: '';
    position: fixed;
    inset: 0;
    z-index: -2;
    pointer-events: none;
    background:
        radial-gradient(ellipse 60% 42% at 50% 12%, rgba(157,78,221,0.15) 0%, transparent 70%),
        radial-gradient(ellipse 85% 55% at 50% -8%, rgba(120,160,255,0.07) 0%, transparent 70%),
        radial-gradient(ellipse 45% 38% at 82% 34%, rgba(199,125,255,0.06) 0%, transparent 72%);
}
/* Katman 2 — YILDIZLAR: üç farklı yoğunlukta döşenmiş nokta katmanı = derinlik.
   Her katmanın kendi tile boyutu var; asal-sayıya yakın ofsetler düzenli ızgara
   hissini kırıyor (aksi hâlde göz "duvar kâğıdı" olduğunu anlıyor). */
body.lv-space::after {
    content: '';
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background-image:
        /* yakın/parlak */
        radial-gradient(1.4px 1.4px at  38px  61px, rgba(255,255,255,.85), transparent),
        radial-gradient(1.4px 1.4px at 187px 133px, rgba(207,211,255,.75), transparent),
        radial-gradient(1.2px 1.2px at 291px  47px, rgba(255,255,255,.70), transparent),
        /* orta */
        radial-gradient(1px 1px at  93px 211px, rgba(255,255,255,.55), transparent),
        radial-gradient(1px 1px at 233px 297px, rgba(207,211,255,.50), transparent),
        radial-gradient(1px 1px at 341px 179px, rgba(255,255,255,.45), transparent),
        /* uzak/soluk — toz */
        radial-gradient(1px 1px at  17px 349px, rgba(255,255,255,.28), transparent),
        radial-gradient(1px 1px at 149px  23px, rgba(255,255,255,.24), transparent),
        radial-gradient(1px 1px at 383px 331px, rgba(207,211,255,.26), transparent);
    background-size: 420px 400px;
    background-repeat: repeat;
    /* Üstte yoğun, sayfanın altına doğru seyrelir: içerik alanı sakin kalsın. */
    -webkit-mask-image: linear-gradient(180deg, #000 0%, rgba(0,0,0,.55) 55%, rgba(0,0,0,.25) 100%);
            mask-image: linear-gradient(180deg, #000 0%, rgba(0,0,0,.55) 55%, rgba(0,0,0,.25) 100%);
}
/* NOT: bir zamanlar burada `body.lv-space > * { position: relative }` vardı —
   KALDIRILDI. Özgüllüğü (0,1,1) `.pnav`'ınkini (0,1,0) geçtiği için sabit
   navbar'ı `position:relative`'e çevirip sayfayla birlikte kaydırıyordu.
   Gerek de yok: katmanlar `position:fixed` + negatif z-index ve `body`
   stacking context açmıyor (transform/opacity/filter yok) → içerik zaten üstte. */

/* Ortak sayfa başlığı — ay ışığı gradienti (v4.24 hero'daki reçete).
   Daha önce SADECE about.php'de vardı, diğer 6 sayfa düz beyazdı. */
body.lv-space .page-hero h1 {
    background: linear-gradient(180deg, #ffffff 30%, var(--moon) 100%);
    -webkit-background-clip: text;
            background-clip: text;
    -webkit-text-fill-color: transparent;
}
body.lv-space .page-hero p { color: var(--moon-dim); }

/* ── Kapanış CTA'sı: ince sayfaların dibi (v4.25) ───────────────────────────
   6 public sayfa tek bölümlükti; liste bitince doğrudan footer başlıyordu.
   Bu blok sayfayı kapatır ve ziyaretçiye bir sonraki adımı verir. */
.page-outro {
    max-width: 720px;
    margin: 88px auto 0;
    text-align: center;
    background: linear-gradient(135deg, rgba(157,78,221,0.10), rgba(157,78,221,0.02));
    border: 1px solid var(--hairline);
    border-radius: 20px;
    padding: 44px 32px;
}
.page-outro h2 {
    font-family: 'Syne', sans-serif;
    font-size: 1.45rem; font-weight: 800;
    margin-bottom: 10px; color: #fff;
}
.page-outro p { color: var(--moon-dim); font-size: .97rem; margin-bottom: 24px; }
.page-outro-btns { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }
.outro-ghost {
    display: inline-flex; align-items: center; gap: 8px;
    background: rgba(255,255,255,0.04);
    border: 1px solid var(--hairline);
    color: #fff; text-decoration: none;
    padding: 11px 24px; border-radius: 10px;
    font-weight: 600; font-size: 0.9rem;
    transition: background .2s, border-color .2s, transform .2s;
}
.outro-ghost:hover {
    background: rgba(255,255,255,0.08);
    border-color: rgba(207,211,255,0.26);
    transform: translateY(-2px);
    color: #fff;
}
@media (max-width: 768px) { .page-outro { margin-top: 56px; padding: 34px 22px; } }

/* Boş durum: ikonu ve metni göksel palete bağla (önceden sayfa-içi gri). */
body.lv-space .empty-state { color: var(--moon-dim); }

/* ═════════════════════════════════════════════════════════════════════════════
   PREMIUM KATMAN (v4.26) — "enterprise" vitrin bileşenleri
   ─────────────────────────────────────────────────────────────────────────────
   NEDEN: v4.24-25'te göksel KİMLİK kuruldu ama sayfaların İÇİ sıradan kaldı
   (tek-listelik sayfalar, tablo yığınları). Buradaki bileşenler 8 public sayfada
   ortak kullanılır; her sayfa kendi <style>'ında tekrar tanımlamaz.

   ⚠️ HEPSİ `.lv-space` ALTINDA DEĞİL — bir kısmı (`.glass`, `.stat-tile`, `.chip`,
   `.timeline`) sanatçı panelinde de kullanılabilsin diye serbest bırakıldı. Panelin
   AÇIK teması olduğu için renk-bağımlı olanlar `body.lv-space` ile kapsandı.
   ═════════════════════════════════════════════════════════════════════════════ */

/* ── Ortak sayfa başlığı + boş durum ─────────────────────────────────────────
   ⚠️ `.container` BİLEREK BURADA TANIMLANMADI: genişliği sayfaya göre değişiyor
   (presave 460px · epk/kvkk/resources 800px · press 900px · about 1100px ·
   roster/events/merch/changelog 1200px). polish.css sayfa-içi <style>'dan SONRA
   yüklendiği için `body.lv-space .container` (0,2,1) hepsini ezip düzeni bozardı.
   Sayfalar kendi `.container` genişliğini korur — merkezileştirmenin kazancı yok.

   `.page-hero` ve `.empty-state` 7 sayfada neredeyse aynı değerlerle
   tekrarlanıyordu; burada VARSAYILAN olarak birleştirildi.

   ⚠️ `:where()` KULLANIMI KASITLI — SİLME. (v4.26.4'te düzeltildi.)
   İlk sürüm `body.lv-space .page-hero` (özgüllük 0,2,1) yazıyordu ve bu, sayfaların
   kendi `.page-hero` (0,1,0) kurallarını EZİYORDU. Sonuç: sayfaların bilinçli
   tasarım kararları sessizce ölü koda dönüşmüştü —
     • `kvkk.php` başlığını bilerek küçük tutuyordu (clamp maks 2.8rem) → 3.5rem oluyordu
     • `about.php` hero'yu bilerek kompakt yapıyordu (alt boşluk 20px) → 56px oluyordu
     • `about.php`'nin mor başlık gradienti eziliyordu
   `:where()` özgüllüğe SIFIR katkı yapar → bu blok artık gerçek bir "varsayılan":
   kendi kuralı olmayan sayfa bunu alır, kuralı olan sayfa kendi değerini KORUR.
   Kapsam (`body.lv-space`) yine çalışır, yalnız özgüllük katkısı yoktur. */
:where(body.lv-space .page-hero) { padding: 140px 0 56px; text-align: center; position: relative; }
:where(body.lv-space .page-hero h1) {
    font-family: 'Syne', sans-serif;
    font-size: clamp(2rem, 5vw, 3.5rem);
    font-weight: 800; letter-spacing: -1px; margin-bottom: 14px;
}
:where(body.lv-space .page-hero p) { font-size: 1.05rem; max-width: 620px; margin: 0 auto; }
:where(body.lv-space .empty-state) { text-align: center; padding: 60px 20px; }
/* ⚠️ `>` ZORUNLU: torun-eşleşen yazım `.empty-cta` butonunun ikonunu da yakalayıp
   40px BLOK öğeye çeviriyordu (buton şişmesinin kök nedeni, v4.26.4'te düzeltildi).
   Bu kural `:where()` DIŞINDA bırakıldı: sayfa-içi hatalı kopyalar silindi ve
   ikon boyutunun varsayılanı burada kesin olmalı (aksi halde ileride bir sayfa
   yanlışlıkla torun-eşleşen kural yazarsa hata geri döner). */
/* ⚠️ ALFA .32 DEĞİL .75 (v4.28): bu renk, aşağıdaki `emptyPulse` animasyonuyla
   ÇARPILIYOR (opacity .4 → .6) → efektif alfa 0.128–0.192, yani #030303 üstünde
   neredeyse görünmez. Boş-durum ikonu `/awards` ve `/hall-of-fame`'in varsayılan
   hâlindeki tek görsel çapa olduğu için bu fiilen "ikon yok" demekti.
   .75 × [.4,.6] = efektif 0.30–0.45 → hâlâ sade, ama görünür.
   NOT: `emptyPulse` kuralına DOKUNULMADI — o kapsamsız ve admin (16 yer) +
   artist panelini de sürüyor; `body.lv-space` kapısı bu düzeltmeyi public'e
   sınırlıyor (artist/dashboard.php `<body>`'sinde lv-space YOK). */
body.lv-space .empty-state > i { font-size: 2.5rem; margin-bottom: 14px; display: block; color: rgba(157,78,221,.75); }
@media (max-width: 768px) { :where(body.lv-space .page-hero) { padding: 110px 0 40px; } }

/* ── Scroll reveal (JS: core/scroll_reveal.php) ──────────────────────────────
   Daha önce yalnız index.php + roster.php'de (bağımsız kopyalar) vardı.
   ⚠️ Yukarıdaki `.fade-up-delay-1/2/3` tek başına işe yaramaz; asıl tanım BURASI. */
.fade-up, .fade-up-item { opacity: 0; transform: translateY(24px); }
.fade-up { transition: opacity .7s ease, transform .7s ease; }
.fade-up-item { transition: opacity .5s ease, transform .5s ease; }
.fade-up.visible, .fade-up-item.visible { opacity: 1; transform: none; }
/* JS kapalıysa içerik gizli kalmasın (gözlemci hiç kurulmaz) */
@media (prefers-reduced-motion: reduce) {
    .fade-up, .fade-up-item { opacity: 1; transform: none; transition: none; }
}

/* ── Cam panel ── */
.glass {
    background: linear-gradient(160deg, rgba(255,255,255,0.045), rgba(255,255,255,0.015));
    border: 1px solid var(--hairline);
    border-radius: 16px;
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    transition: border-color .3s, transform .3s, box-shadow .3s, background .3s;
}
body.lv-space .glass:hover {
    border-color: rgba(207,211,255,0.24);
    background: linear-gradient(160deg, rgba(255,255,255,0.07), rgba(255,255,255,0.02));
    transform: translateY(-3px);
    box-shadow: 0 18px 50px rgba(0,0,0,.42), 0 0 0 1px rgba(157,78,221,.10);
}

/* ── Sayaç kutusu (JS: core/counters.php) ── */
/* ⚠️ GRID DEĞİL FLEX (v4.28): `repeat(auto-fit, minmax(150px, 1fr))` 1000px'lik
   kapta 6 track açıyor, `auto-fit` dolu olmayanları ÇÖKERTİYOR ve hayatta kalan
   `1fr` boşluğun tamamını yutuyordu → TEK tile 1000px genişliğe yayılıp içinde
   minicik bir "1" duruyordu. Bu, ilk ödül eklendikten SONRAKİ VARSAYILAN hâldi
   (admin formunda Seviye "- Yok -" ön seçili → üç seviye tile'ı da >0 kapısında
   düşüyor, geriye yalnız "Toplam" kalıyor).
   Flex seçildi çünkü auto-fit'te çökmüş track'lerle `justify-content` güvenilmez;
   flex her sayıda deterministik. 4/5/6 tile'da ölçüler ESKİSİYLE BİREBİR AYNI
   (239.5 / 188.8 / 155px — `max-width:260px` o sayılarda bağlamaz), yalnız 1-3
   tile değişir. Sayfa-içi tanım YOK, polish.css tek sahip → `:where()` gerekmez. */
.stat-strip {
    display: flex; flex-wrap: wrap; justify-content: center;
    gap: 14px; margin: 8px auto 0; max-width: 1000px;
}
.stat-tile { flex: 1 1 150px; max-width: 260px; padding: 22px 18px; text-align: center; }
.stat-tile .stat-number {
    display: block;
    font-family: 'Syne', sans-serif; font-weight: 800;
    font-size: clamp(1.5rem, 3.4vw, 2.2rem);
    line-height: 1.1;
    background: linear-gradient(180deg, #fff 35%, var(--moon) 100%);
    -webkit-background-clip: text; background-clip: text;
    -webkit-text-fill-color: transparent;
}
.stat-tile .stat-label {
    display: block; margin-top: 7px;
    font-size: .7rem; font-weight: 700; letter-spacing: 1.3px;
    text-transform: uppercase; color: rgba(207,211,255,.42);
}

/* ── Bölüm başlığı ── */
.section-label {
    font-family: 'Syne', sans-serif; font-size: 1.35rem; font-weight: 700;
    display: flex; align-items: center; gap: 10px;
    margin: 0 0 22px; position: relative; padding-bottom: 12px;
}
.section-label i { color: var(--nova); font-size: 1.05rem; }
.section-label::after {
    content: ''; position: absolute; left: 0; bottom: 0;
    width: 44px; height: 2px; border-radius: 2px;
    background: linear-gradient(90deg, var(--nova), transparent);
}
.section-label .sl-count {
    margin-left: auto; font-family: 'Inter', sans-serif;
    font-size: .78rem; font-weight: 600; color: var(--moon-dim);
    padding-bottom: 2px;
}

/* ── Filtre çipi ── */
.chip {
    display: inline-flex; align-items: center; gap: 6px;
    background: rgba(255,255,255,0.04);
    border: 1px solid var(--hairline);
    color: var(--moon-dim);
    padding: 8px 16px; border-radius: 20px;
    font: inherit; font-size: .8rem; font-weight: 600;
    cursor: pointer; text-decoration: none;
    transition: background .2s, border-color .2s, color .2s;
}
.chip:hover { background: rgba(255,255,255,0.07); color: #fff; }
.chip.is-active {
    background: var(--nova-soft);
    border-color: rgba(157,78,221,.42);
    color: #c9a4f5;
}
.chip-row { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }

/* ── Arama kutusu ── */
.lv-search { position: relative; max-width: 420px; margin: 0 auto 22px; }
.lv-search input {
    width: 100%; box-sizing: border-box;
    background: rgba(255,255,255,0.04);
    border: 1px solid var(--hairline);
    border-radius: 12px; color: #fff;
    padding: 12px 16px 12px 42px;
    font: inherit; font-size: .92rem;
    transition: border-color .2s, background .2s;
}
.lv-search input::placeholder { color: rgba(207,211,255,.38); }
.lv-search input:focus {
    outline: none; background: rgba(255,255,255,0.06);
    border-color: rgba(157,78,221,.45);
}
.lv-search i {
    position: absolute; left: 15px; top: 50%; transform: translateY(-50%);
    color: rgba(207,211,255,.4); font-size: .9rem; pointer-events: none;
}

/* ── "Lunovia Onaylı" rozeti ────────────────────────────────────────────────
   Kullanıcı isteği: "Lunovia Onayı yap güzel olsun, şuanki yeşil onayımız gibi".
   Temel: artist/profile.php'deki `.verified-tag` (#1DB954 + fa-circle-check).
   ⚠️ YALNIZ `users.is_verified = 1` olan sanatçıda basılır — eskiden profil
   sayfasında KOŞULSUZ basılıyordu (DB'de kolon bile yoktu, yani sahte sinyaldi). */
.lv-verified {
    display: inline-flex; align-items: center; gap: 6px;
    background: rgba(29,185,84,0.10);
    border: 1px solid rgba(29,185,84,0.30);
    color: #4ade80;
    padding: 4px 11px; border-radius: 20px;
    font-size: .72rem; font-weight: 700; letter-spacing: .2px;
    white-space: nowrap; vertical-align: middle;
}
.lv-verified i { color: #1DB954; font-size: .85rem; }
/* Kompakt varyant: yalnız tik (roster kartı gibi yer darsa) */
.lv-verified.sm { padding: 0; border: 0; background: none; gap: 0; }
.lv-verified.sm span { display: none; }
.lv-verified.sm i { font-size: .95rem; filter: drop-shadow(0 0 6px rgba(29,185,84,.45)); }

/* ═════════════════════════════════════════════════════════════════════════════
   HUKUKİ BELGELER (v4.27) — /terms /privacy /cookies /kvkk /demo-terms
   ─────────────────────────────────────────────────────────────────────────────
   `pages/kvkk.php` bu stilleri kendi <style>'ında taşıyordu; 5 belge olunca
   5 kopya olacaktı. Tek kaynağa alındı, kvkk.php'nin inline kopyası kaldırıldı.

   ⚠️ `:where()` KASITLI (v4.26.4 dersi): ortak katman VARSAYILAN verir, bir sayfa
   kendi değerini yazmak isterse ezebilir. Özgüllüğe sıfır katkı.
   `.container` bilerek YOK — genişlik sayfaya özgü (hukuki sayfalar 800px).
   ═════════════════════════════════════════════════════════════════════════════ */
:where(body.lv-space .legal-content h2) {
    font-family: 'Syne', sans-serif; font-size: 1.15rem; color: #c77dff;
    margin: 32px 0 12px; padding-top: 20px;
    border-top: 1px solid rgba(157,78,221,0.1);
}
:where(body.lv-space .legal-content h2:first-of-type) { border-top: none; padding-top: 0; }
:where(body.lv-space .legal-content h3) {
    font-family: 'Syne', sans-serif; font-size: .95rem; color: var(--moon);
    margin: 20px 0 8px;
}
:where(body.lv-space .legal-content p),
:where(body.lv-space .legal-content li) { font-size: .88rem; color: rgba(255,255,255,0.6); }
:where(body.lv-space .legal-content ul) { padding-left: 20px; margin-bottom: 12px; }
:where(body.lv-space .legal-content li) { margin-bottom: 6px; }
:where(body.lv-space .legal-content strong) { color: rgba(255,255,255,0.85); }
:where(body.lv-space .legal-content a) { color: var(--nova); }
:where(body.lv-space .legal-content a:hover) { color: #c77dff; }
/* Vurgulu bilgi bloğu (ör. "bu belge bilgilendirme amaçlıdır") */
:where(body.lv-space .legal-callout) {
    background: var(--nova-soft); border: 1px solid rgba(157,78,221,.22);
    border-radius: 10px; padding: 14px 16px; margin: 18px 0;
    font-size: .84rem; color: var(--moon-dim);
}
/* Çerez tablosu (/cookies) — mobilde yatay kaydırır */
:where(body.lv-space .legal-table-wrap) { overflow-x: auto; margin: 14px 0 18px; }
:where(body.lv-space .legal-table) { width: 100%; border-collapse: collapse; font-size: .8rem; min-width: 520px; }
:where(body.lv-space .legal-table th) {
    text-align: left; padding: 9px 12px; color: var(--moon);
    border-bottom: 1px solid var(--hairline); font-weight: 600; white-space: nowrap;
}
:where(body.lv-space .legal-table td) {
    padding: 9px 12px; color: rgba(255,255,255,.58);
    border-bottom: 1px solid rgba(255,255,255,.04); vertical-align: top;
}
:where(body.lv-space .legal-table code) {
    font-size: .76rem; color: #c9a4f5; background: rgba(157,78,221,.10);
    padding: 1px 5px; border-radius: 4px;
}
/* Kardeş belge gezinmesi (core/legal_nav.php) */
.legal-nav { margin: 40px 0 8px; padding-top: 22px; border-top: 1px solid var(--hairline); }
.legal-nav-label {
    font-size: .68rem; font-weight: 700; letter-spacing: 1.2px; text-transform: uppercase;
    color: rgba(207,211,255,.38); margin-bottom: 12px; text-align: center;
}

/* ── Çerez bilgilendirme şeridi (core/cookie_notice.php, v4.27) ──────────────
   ⚠️ ONAY DEĞİL BİLGİLENDİRME: platform yalnız zorunlu birinci-taraf çerez
   kullanıyor (takip çerezi yok) → KVKK ve GDPR'da zorunlu çerezler onaydan
   muaftır. KVKK 2022 Çerez Rehberi yine de ilk ziyarette bilgilendirme öneriyor. */
.lv-cookie {
    position: fixed; left: 16px; right: 16px; bottom: 16px; z-index: 9000;
    display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
    max-width: 720px; margin: 0 auto;
    background: linear-gradient(160deg, rgba(10,10,20,.96), rgba(5,5,10,.96));
    border: 1px solid var(--hairline); border-radius: 14px;
    padding: 14px 18px; box-shadow: 0 18px 50px rgba(0,0,0,.55);
    backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
    animation: lvCookieIn .35s ease both;
}
@keyframes lvCookieIn { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .lv-cookie { animation: none; } }
.lv-cookie p { flex: 1; min-width: 220px; font-size: .82rem; line-height: 1.6; color: var(--moon-dim); margin: 0; }
.lv-cookie a { color: #c9a4f5; }
.lv-cookie button {
    flex: none; cursor: pointer; font: inherit; font-size: .84rem; font-weight: 600;
    color: #fff; background: linear-gradient(135deg, var(--nova), #7b2cbf);
    border: 0; border-radius: 9px; padding: 9px 22px;
    transition: transform .2s, box-shadow .2s;
}
.lv-cookie button:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(157,78,221,.36); }
/* "Anladım"a basınca: kısa çıkış, sonra JS DOM'dan siler (320ms sonra). */
.lv-cookie.is-gone { opacity: 0; transform: translateY(14px); transition: opacity .3s, transform .3s; pointer-events: none; }
@media (prefers-reduced-motion: reduce) { .lv-cookie.is-gone { transition: none; } }
@media (max-width: 480px) {
    .lv-cookie { left: 10px; right: 10px; bottom: 10px; padding: 13px 15px; }
    .lv-cookie button { width: 100%; }
}

/* ── "Yakında" etiketi (v4.26.3) — yayın tarihi gelmemiş parça ──────────────
   Bu parçalarda public taraf yalnız 30 sn önizleme çalar; etiket bunu görünür
   kılar (aksi halde ziyaretçi şarkının yarım kesilmesini arıza sanar). */
.soon-tag {
    display: inline-block; margin-left: 7px; vertical-align: middle;
    font-size: .58rem; font-weight: 800; letter-spacing: .7px; text-transform: uppercase;
    padding: 2px 7px; border-radius: 5px; white-space: nowrap;
    background: rgba(255,214,10,.14); border: 1px solid rgba(255,214,10,.32); color: #ffd60a;
}

/* ── Trend oku (yalnız GERÇEK karşılaştırma varsa basılır) ── */
.trend { display: inline-flex; align-items: center; gap: 4px; font-size: .76rem; font-weight: 700; }
.trend-up   { color: #4ade80; }
.trend-down { color: #f87171; }
.trend-flat { color: var(--moon-dim); }

/* ── Zaman çizelgesi (events / awards / press) ── */
.timeline { position: relative; padding-left: 26px; }
.timeline::before {
    content: ''; position: absolute; left: 7px; top: 6px; bottom: 6px; width: 2px;
    background: linear-gradient(180deg, rgba(157,78,221,.45), rgba(157,78,221,.04));
}
.timeline-year {
    font-family: 'Syne', sans-serif; font-weight: 800;
    font-size: 1.6rem; margin: 34px 0 14px; position: relative;
}
.timeline-year:first-child { margin-top: 0; }
.timeline-year::before {
    content: ''; position: absolute; left: -26px; top: 50%; transform: translateY(-50%);
    width: 16px; height: 16px; border-radius: 50%;
    background: var(--space-2); border: 2px solid rgba(157,78,221,.55);
}
.timeline-month {
    font-size: .72rem; font-weight: 700; letter-spacing: 1.4px; text-transform: uppercase;
    color: rgba(207,211,255,.4); margin: 22px 0 10px;
}
.timeline-item { position: relative; margin-bottom: 14px; }
.timeline-item::before {
    content: ''; position: absolute; left: -23px; top: 24px;
    width: 8px; height: 8px; border-radius: 50%;
    background: var(--nova); box-shadow: 0 0 0 3px rgba(157,78,221,.16);
}
/* ⚠️ `.timeline-year::before` DE kaydırılmalı (v4.28): bu sorgu `padding-left`i
   26→20px çekiyor ve item noktasını -23→-17px ayarlıyordu, ama YIL noktası
   -26px'te kalıyordu → 16px'lik (border-box) nokta X=-6…10'a düşüyor, merkezi
   X=2 oluyor; ray merkezi ise X=8 (left:7px + 2px/2). 6px kayma + noktanın
   YARISI `.timeline`in sol kenarının DIŞINA taşıyor. -20px → X=0…16, merkez 8 ✓
   NOT: masaüstündeki -26px/-23px değerlerine DOKUNULMADI. Tüketici sayfalar
   `*::before`a `box-sizing:border-box` verdiği için yıl noktası masaüstünde
   hizalı; item noktasının 1px'i ise /hall-of-fame'de `.glass`ın 1px kenarıyla
   DOĞRU çıkıyor → düzeltmek bir 1px hatayı başka bir 1px hatayla değişmek olurdu. */
@media (max-width: 480px) { .timeline { padding-left: 20px; } .timeline-year::before { left: -20px; } .timeline-item::before { left: -17px; } }

/* ── Ürün kartı (merch) ── */
.product-card { overflow: hidden; display: flex; flex-direction: column; }
.product-media { position: relative; aspect-ratio: 1/1; overflow: hidden; background: var(--space-2); }
.product-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s cubic-bezier(.2,.8,.2,1); }
.product-card:hover .product-media img { transform: scale(1.07); }
.product-flags { position: absolute; top: 10px; left: 10px; display: flex; flex-direction: column; gap: 6px; }
.flag {
    font-size: .65rem; font-weight: 800; letter-spacing: .8px; text-transform: uppercase;
    padding: 4px 9px; border-radius: 6px; backdrop-filter: blur(4px);
}
.flag-new     { background: rgba(29,185,84,.18);  border: 1px solid rgba(29,185,84,.4);  color: #4ade80; }
.flag-limited { background: rgba(157,78,221,.20); border: 1px solid rgba(157,78,221,.45); color: #c9a4f5; }
.flag-sold    { background: rgba(0,0,0,.55);      border: 1px solid rgba(255,255,255,.18); color: rgba(255,255,255,.7); }

/* ── Varlık kartı (press / brand-assets) ── */
.asset-card { padding: 26px 22px; display: flex; flex-direction: column; gap: 12px; text-decoration: none; color: inherit; }
.asset-icon {
    width: 44px; height: 44px; border-radius: 12px;
    display: flex; align-items: center; justify-content: center;
    background: var(--nova-soft); color: #c9a4f5; font-size: 1.05rem;
}
.asset-card h3 { font-family: 'Syne', sans-serif; font-size: 1.02rem; font-weight: 700; }
.asset-card p { font-size: .875rem; line-height: 1.6; color: var(--moon-dim); }

/* ── Güven şeridi (merch alt bandı vb.) ── */
.trust-row {
    display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
    gap: 12px; margin-top: 40px;
}
.trust-item { padding: 18px 16px; text-align: center; font-size: .82rem; color: var(--moon-dim); }
.trust-item i { display: block; font-size: 1.1rem; color: #c9a4f5; margin-bottom: 8px; }

/* ── Hareketli yıldız canvas'ı (JS: core/hero_stars.php) ── */
.hero-stars {
    position: absolute; inset: 0; width: 100%; height: 100%;
    pointer-events: none; z-index: 0; opacity: .85;
}
/* Hero içeriği canvas'ın üstünde kalsın */
.page-hero > *:not(.hero-stars) { position: relative; z-index: 1; }

/* ─────────────────────────────────────────────────────────────────────────────
   Sanatçı paneli kenar çubuğu kullanıcı kartı (core/artist_nav.php) — v4.22
   NEDEN BURADA: bu class'lar ortak partial tarafından basılıyor ama stilleri
   HER dahil eden sayfanın kendi <style> bloğunda tekrarlanıyordu. Bir sayfada
   eksik kalırsa öğe stilsiz görünüyor (geçmişte .user-role settings.php'de
   yoktu ve "Lunovia Records" bozuk görünüyordu). Tek kaynak = burası; sayfa-içi
   tanımlar aynı değerleri taşıdığı için kaldırılmaları GEREKMEZ (cascade'de
   sonra gelen kazanır, görsel fark yok) — yeni eklenen sayfalar artık
   otomatik olarak doğru görünür.
   ───────────────────────────────────────────────────────────────────────────── */
.user-role { font-size: 11px; color: var(--text2); }
.user-join { font-size: 10px; color: var(--text2); margin-top: 1px; }
.user-badge { display: inline-block; font-size: 10px; background: rgba(157,78,221,.18); color: var(--accent); padding: 2px 8px; border-radius: 20px; margin-top: 4px; font-weight: 600; border: 1px solid rgba(157,78,221,.3); }

/* ─────────────────────────────────────────────────────────────────────────────
   DEMO GÖNDERİM FORMU (core/demo_form.php) — v4.28
   ═════════════════════════════════════════════════════════════════════════════
   ⚠️ ÖZGÜLLÜK, BU BLOĞUN VAR OLMA SEBEBİDİR.
   Partial iki host'tan dahil ediliyor (index.php modal + pages/demo.php) ve
   `index.php:639-655` ÇIPLAK element seçicileri tanımlıyor:
       label                          → (0,0,1)  display:block; text-transform:uppercase
       input[type=text] / textarea …  → (0,1,1)  bg/border/padding/radius/font
       input:focus                    → (0,1,1)
   Partial-kapsamlı bir `.lvdemo-input` (0,1,0) bunlara KAYBEDERDİ. Bu yüzden
   HER kural `.lvdemo-form .lvdemo-*` = (0,2,0) yazıldı ve miras alınan her
   özellik (text-transform / letter-spacing / margin / bg / border) AÇIKÇA
   sıfırlandı. polish.css iki host'ta da sayfa <style>'ından SONRA yükleniyor
   (index.php:851, pages/resources.php:98) → eşit özgüllükte de biz kazanırız.
   Bu blok `:where()` KULLANMAZ: burada "varsayılan" değil KESİN değer gerekiyor.
   ───────────────────────────────────────────────────────────────────────────── */
.lvdemo-form { display: block; }
.lvdemo-sr {
    position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ── Bölüm (fieldset) ── */
.lvdemo-form .lvdemo-sec { border: 0; margin: 0 0 22px; padding: 0; min-width: 0; }
.lvdemo-form .lvdemo-legend {
    display: flex; align-items: center; gap: 9px;
    font-family: 'Syne', sans-serif; font-size: .82rem; font-weight: 800;
    letter-spacing: .6px; text-transform: uppercase;
    color: var(--moon, #cfd3ff); padding: 0; margin: 0 0 12px; float: none; width: auto;
}
.lvdemo-form .lvdemo-step {
    flex: 0 0 auto; width: 20px; height: 20px; border-radius: 50%;
    display: inline-flex; align-items: center; justify-content: center;
    font-size: .68rem; font-weight: 800; letter-spacing: 0;
    background: var(--nova-soft, rgba(157,78,221,.16)); color: #c9a4f5;
    border: 1px solid rgba(157,78,221,.32);
}

/* ── Alan + etiket ── */
.lvdemo-form .lvdemo-row { display: flex; gap: 14px; }
.lvdemo-form .lvdemo-row > .lvdemo-fld { flex: 1 1 0; min-width: 0; }
.lvdemo-form .lvdemo-fld { margin-bottom: 14px; }
.lvdemo-form .lvdemo-label {
    display: block; margin: 0 0 6px; padding: 0;
    font-size: .78rem; font-weight: 600; line-height: 1.4;
    color: rgba(255,255,255,.62);
    text-transform: none; letter-spacing: 0;   /* index.php:644-645 sıfırlanır */
}
.lvdemo-form .lvdemo-opt {
    font-weight: 400; font-size: .72rem; color: var(--moon-dim, rgba(207,211,255,.42));
}
.lvdemo-form .lvdemo-input {
    display: block; width: 100%; box-sizing: border-box;
    background: rgba(255,255,255,.04);
    border: 1px solid var(--hairline, rgba(255,255,255,.10));
    border-radius: 10px; padding: 12px 14px; margin: 0;
    color: #fff; font-size: .9rem; font-family: 'Inter', sans-serif; line-height: 1.5;
    transition: border-color .2s, background .2s, box-shadow .2s;
}
.lvdemo-form .lvdemo-input::placeholder { color: rgba(255,255,255,.30); }
.lvdemo-form .lvdemo-input:hover { border-color: rgba(255,255,255,.18); }
.lvdemo-form .lvdemo-input:focus {
    outline: none; border-color: rgba(157,78,221,.60);
    background: rgba(255,255,255,.055); box-shadow: 0 0 0 3px rgba(157,78,221,.14);
}
.lvdemo-form .lvdemo-textarea { resize: vertical; min-height: 84px; }
.lvdemo-form .lvdemo-count {
    display: block; text-align: right; margin-top: 4px;
    font-size: .68rem; color: var(--moon-dim, rgba(207,211,255,.35));
}
/* Seçiciler — koyu popup. index.php:661-682 ile AYNI tuzak: `color-scheme` yoksa
   tarayıcı açılır listeyi SİSTEM (beyaz) zemininde çizer, #fff metin okunamaz. */
.lvdemo-form .lvdemo-select {
    cursor: pointer; color-scheme: dark; background-color: #0d0d16;
    appearance: none; -webkit-appearance: none; padding-right: 36px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8'%3E%3Cpath fill='%23ffffff' fill-opacity='0.55' d='M1 1.5 6 6.5l5-5'/%3E%3C/svg%3E");
    background-repeat: no-repeat; background-position: right 14px center; background-size: 11px 7px;
}
.lvdemo-form .lvdemo-select > option { background-color: #0d0d16; color: #fff; }
.lvdemo-form .lvdemo-select > option:disabled { color: rgba(255,255,255,.45); }

/* ── Hata durumu ── */
.lvdemo-form .lvdemo-input.is-invalid {
    border-color: var(--red, #ff3366);
    box-shadow: 0 0 0 3px rgba(255,51,102,.12);
    animation: lvdemoShake .24s ease;
}
@keyframes lvdemoShake {
    0%,100% { transform: translateX(0); }
    25%     { transform: translateX(-3px); }
    75%     { transform: translateX(3px); }
}
.lvdemo-form .lvdemo-err,
.lvdemo-form .lvdemo-formerr {
    margin: 5px 0 0; font-size: .74rem; line-height: 1.45; color: var(--red, #ff3366);
}
.lvdemo-form .lvdemo-err:empty,
.lvdemo-form .lvdemo-formerr:empty { display: none; }
.lvdemo-form .lvdemo-formerr { margin-top: 10px; font-size: .8rem; }

/* ── Sürükle-bırak bölgesi ── */
.lvdemo-form .lvdemo-drop {
    display: flex; flex-direction: column; align-items: center; text-align: center;
    gap: 7px; padding: 34px 20px; cursor: pointer;
    border: 2px dashed var(--hairline, rgba(255,255,255,.12)); border-radius: 16px;
    background: linear-gradient(160deg, rgba(255,255,255,.03), rgba(255,255,255,.01));
    transition: border-color .2s, background .2s, transform .2s;
}
.lvdemo-form .lvdemo-drop:hover,
.lvdemo-form .lvdemo-drop:focus-visible { border-color: rgba(157,78,221,.42); outline: none; }
.lvdemo-form .lvdemo-drop.is-drag {
    border-color: rgba(157,78,221,.70);
    background: var(--nova-soft, rgba(157,78,221,.14)); transform: scale(1.01);
}
.lvdemo-form .lvdemo-drop.has-file { padding: 16px 20px; gap: 4px; }
.lvdemo-form .lvdemo-drop.has-file .lvdemo-drop-ico,
.lvdemo-form .lvdemo-drop.has-file .lvdemo-drop-sub { display: none; }
.lvdemo-form .lvdemo-drop-ico { font-size: 1.9rem; color: rgba(157,78,221,.55); }
.lvdemo-form .lvdemo-drop-title { font-size: .92rem; font-weight: 600; color: #fff; }
.lvdemo-form .lvdemo-drop-sub { font-size: .76rem; color: var(--moon-dim, rgba(207,211,255,.42)); }
.lvdemo-form .lvdemo-drop-btn { margin-top: 6px; pointer-events: none; }

/* ── Dosya çipi + gerçek ilerleme ── */
.lvdemo-form .lvdemo-chip {
    position: relative; display: flex; align-items: center; gap: 11px;
    margin-top: 10px; padding: 12px 14px; overflow: hidden;
    border: 1px solid var(--hairline, rgba(255,255,255,.10)); border-radius: 12px;
    background: linear-gradient(160deg, rgba(255,255,255,.045), rgba(255,255,255,.015));
}
.lvdemo-form .lvdemo-chip[hidden] { display: none; }
.lvdemo-form .lvdemo-chip-ico { flex: 0 0 auto; font-size: 1.05rem; color: #c9a4f5; }
.lvdemo-form .lvdemo-chip.is-done  { border-color: rgba(52,211,153,.34); }
.lvdemo-form .lvdemo-chip.is-done  .lvdemo-chip-ico { color: var(--green, #34d399); }
.lvdemo-form .lvdemo-chip.is-error { border-color: rgba(255,51,102,.36); }
.lvdemo-form .lvdemo-chip.is-error .lvdemo-chip-ico { color: var(--red, #ff3366); }
.lvdemo-form .lvdemo-chip-body { flex: 1 1 auto; min-width: 0; }
.lvdemo-form .lvdemo-chip-name {
    display: block; font-size: .86rem; font-weight: 600; color: #fff;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.lvdemo-form .lvdemo-chip-meta {
    display: block; margin-top: 2px; font-size: .74rem;
    color: var(--moon-dim, rgba(207,211,255,.45));
}
.lvdemo-form .lvdemo-chip-act { flex: 0 0 auto; display: flex; gap: 6px; flex-wrap: wrap; }
.lvdemo-form .lvdemo-chip-btn {
    background: rgba(255,255,255,.05); border: 1px solid var(--hairline, rgba(255,255,255,.12));
    color: rgba(255,255,255,.72); border-radius: 8px; padding: 5px 10px;
    font-size: .72rem; font-weight: 600; cursor: pointer;
    font-family: 'Inter', sans-serif; transition: border-color .2s, color .2s;
}
.lvdemo-form .lvdemo-chip-btn:hover { border-color: rgba(255,255,255,.26); color: #fff; }
.lvdemo-form .lvdemo-chip-btn.is-danger { color: rgba(255,51,102,.85); }
.lvdemo-form .lvdemo-chip-btn.is-danger:hover { border-color: rgba(255,51,102,.4); color: #ff6b8f; }
.lvdemo-form .lvdemo-bar {
    position: absolute; left: 0; right: 0; bottom: 0; height: 3px; background: rgba(255,255,255,.06);
}
.lvdemo-form .lvdemo-bar[hidden] { display: none; }
.lvdemo-form .lvdemo-bar-fill {
    display: block; height: 100%; width: 0;
    background: linear-gradient(90deg, #7b2cbf, #9d4edd, #c77dff);
    transition: width .2s linear;
}

/* ── Onay + gönder ── */
.lvdemo-form .lvdemo-consent { display: flex; gap: 10px; align-items: flex-start; }
.lvdemo-form .lvdemo-consent > input[type="checkbox"] {
    width: auto; margin: 2px 0 0; cursor: pointer; accent-color: #9d4edd; flex: 0 0 auto;
}
.lvdemo-form .lvdemo-consent > label {
    margin: 0; font-size: .8rem; line-height: 1.55; cursor: pointer; display: inline;
    text-transform: none; letter-spacing: 0;   /* index.php:644-645 sıfırlanır */
    color: rgba(255,255,255,.58);
}
.lvdemo-form .lvdemo-terms-link { margin: 6px 0 16px 26px; }
.lvdemo-form .lvdemo-terms-link > a {
    font-size: .76rem; color: #9d4edd; text-decoration: none;
    display: inline-flex; align-items: center; gap: 6px;
}
.lvdemo-form .lvdemo-terms-link > a:hover { color: #c77dff; text-decoration: underline; }
.lvdemo-form .lvdemo-terms-link > a > i { font-size: .66rem; }
.lvdemo-form .lvdemo-submit,
.lvdemo-success .lvdemo-submit {
    position: relative; display: block; width: 100%; margin: 0;
    background: linear-gradient(135deg, #9d4edd, #7b2cbf); color: #fff;
    border: none; border-radius: 10px; padding: 15px;
    font-weight: 700; font-size: .95rem; font-family: 'Inter', sans-serif;
    cursor: pointer; transition: transform .2s, box-shadow .2s, opacity .2s;
}
.lvdemo-form .lvdemo-submit:hover,
.lvdemo-success .lvdemo-submit:hover {
    transform: translateY(-1px); box-shadow: 0 8px 24px rgba(157,78,221,.28);
}
.lvdemo-form .lvdemo-submit:disabled { opacity: .45; cursor: wait; transform: none; box-shadow: none; }
.lvdemo-form .lvdemo-submit.is-busy .lvdemo-submit-txt { visibility: hidden; }
.lvdemo-form .lvdemo-submit.is-busy::after {
    content: ''; position: absolute; top: 50%; left: 50%;
    width: 17px; height: 17px; margin: -9px 0 0 -9px;
    border: 2px solid rgba(255,255,255,.35); border-top-color: #fff; border-radius: 50%;
    animation: lunoviaSpin .6s linear infinite;
}
.lvdemo-form .lvdemo-note {
    margin: 10px 0 0; font-size: .72rem; line-height: 1.5;
    color: var(--moon-dim, rgba(207,211,255,.38));
}

/* ── Başarı paneli (form YERİNE geçer — navigasyon YOK, URL değişmez) ── */
.lvdemo-success { text-align: center; padding: 8px 0 4px; }
.lvdemo-success[hidden] { display: none; }
.lvdemo-success-ico {
    width: 62px; height: 62px; margin: 0 auto 16px; border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    font-size: 1.7rem; color: #c9a4f5;
    background: var(--nova-soft, rgba(157,78,221,.14));
    border: 1px solid rgba(157,78,221,.34); box-shadow: 0 0 0 8px rgba(157,78,221,.05);
}
.lvdemo-success > h3 {
    font-family: 'Syne', sans-serif; font-size: 1.3rem; font-weight: 800;
    margin: 0 0 10px; color: #fff;
}
.lvdemo-success > p {
    font-size: .87rem; line-height: 1.7; margin: 0 auto 18px; max-width: 430px;
    color: var(--moon-dim, rgba(207,211,255,.55));
}
.lvdemo-success .lvdemo-ref {
    display: flex; align-items: center; justify-content: center; gap: 9px;
    flex-wrap: wrap; margin: 0 0 20px;
}
.lvdemo-success .lvdemo-ref-lbl {
    font-size: .72rem; text-transform: uppercase; letter-spacing: .7px;
    color: var(--moon-dim, rgba(207,211,255,.42));
}
.lvdemo-success .lvdemo-ref-code { font-family: monospace; letter-spacing: .5px; }
.lvdemo-success .lvdemo-copy {
    background: none; border: 0; color: #9d4edd; cursor: pointer;
    font-size: .74rem; font-weight: 600; font-family: 'Inter', sans-serif; padding: 2px 4px;
}
.lvdemo-success .lvdemo-copy:hover { color: #c77dff; text-decoration: underline; }
.lvdemo-success-btns { display: flex; flex-direction: column; gap: 10px; }
.lvdemo-success .lvdemo-ghost {
    display: block; padding: 13px; border-radius: 10px; text-decoration: none;
    font-size: .88rem; font-weight: 600; color: rgba(255,255,255,.72);
    border: 1px solid var(--hairline, rgba(255,255,255,.12));
    transition: border-color .2s, color .2s;
}
.lvdemo-success .lvdemo-ghost:hover { border-color: rgba(255,255,255,.26); color: #fff; }
.lvdemo-nojs {
    margin: 14px 0 0; padding: 12px 14px; border-radius: 10px; font-size: .8rem; line-height: 1.6;
    background: rgba(255,214,10,.08); border: 1px solid rgba(255,214,10,.24); color: #ffd60a;
}

@media (max-width: 560px) {
    .lvdemo-form .lvdemo-row { flex-direction: column; gap: 0; }
    .lvdemo-form .lvdemo-drop { padding: 22px 16px; }
    .lvdemo-form .lvdemo-chip { flex-wrap: wrap; }
    .lvdemo-form .lvdemo-chip-act { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
    .lvdemo-form .lvdemo-input.is-invalid { animation: none; }
    .lvdemo-form .lvdemo-drop.is-drag { transform: none; }
    .lvdemo-form .lvdemo-submit:hover { transform: none; }
    .lvdemo-form .lvdemo-bar-fill { transition: none; }
}

/* ─────────────────────────────────────────────────────────────────────────────
   MOBİL / iOS + ANDROID KATMANI — v4.41
   ─────────────────────────────────────────────────────────────────────────────
   NEDEN BURADA: `polish.css` HTML basan 35 dosyanın hepsinde yükleniyor (yalnız
   yönlendirme yapan 3 auth dosyası ile 404 hariç) VE her sayfada sayfa-içi
   `<style>` bloğundan SONRA geliyor → eşit özgüllükte bu katman kazanır.
   Aynı düzeltmeyi 12 dosyaya tek tek yazmak yerine tek yerde duruyor.

   ⚠️ HEPSİ `@media` İÇİNDE: masaüstü görünümü bayt-birebir aynı kalır.

   ⚠️ `viewport-fit=cover` BİLEREK EKLENMEDİ ve bu bir eksiklik değil: o
      olmadan iOS, ana çubuk (home indicator) alanını layout viewport'una hiç
      katmıyor → alttaki sabit çalar ve sihirbaz çubuğu ŞU AN DOĞRU konumda.
      Eklemek içeriği o alanın altına sokar ve ayrıca her sabit öğeye
      `env(safe-area-inset-bottom)` dolgusu + yatay insetler gerektirir; yani
      "çentik desteği" diye eklenen şey burada YENİ bir hata üretirdi.
   ───────────────────────────────────────────────────────────────────────────*/
@media (max-width: 768px) {
    /* ── iOS Safari ZORLA YAKINLAŞTIRMA düzeltmesi ──────────────────────────
       Safari, `font-size` 16px'in ALTINDA olan bir alana odaklanınca sayfayı
       kendiliğinden yakınlaştırır ve GERİ DÖNDÜRMEZ; kullanıcı formun geri
       kalanını yatay kaydırarak doldurmak zorunda kalır. Giriş, kayıt, şifre
       sıfırlama, ayarlar, 8 adımlı sihirbaz, demo formu ve presave hepsi
       14px kullanıyordu.
       ⚠️ Seçiciler eleman+öznitelik biçiminde: `input:not([type=...])` (0,3,1)
          olduğu için sayfa-içi `.form-input` (0,1,0) kurallarını yükleme
          sırasından BAĞIMSIZ olarak yener — polish.css bir gün önce yüklenirse
          düzeltme sessizce kaybolmasın.
       ⚠️ checkbox/radio/range HARİÇ: onlarda `font-size` görünümü etkilemez
          ama bazı tarayıcılarda kutu boyutunu değiştirir. */
    input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="hidden"]),
    select:not([hidden]),
    textarea:not([hidden]) {
        font-size: 16px;
    }

    /* ── Dokunma hedefleri ──────────────────────────────────────────────────
       Apple HIG 44×44pt, Android Material 48×48dp önerir. Aşağıdakiler 34-38px
       ile geliyordu. `min-width`/`min-height` kullanılıyor çünkü hepsinin açık
       `width`/`height` değeri var ve `min-*` onları KENETLER — özgüllük ya da
       sıra tartışması olmadan çalışır. */
    .player-btn,
    .nav-btn,
    .social-btn,
    .topbar-btn,
    .pfooter-socials a,
    .back-btn,
    /* Sanatçı profili: parça satırındaki DSP ikonları (26px), çal düğmesi (36px)
       ve çalar kontrolleri (32px) — hepsi parmakla en çok dokunulan öğeler. */
    .trk-dsp a,
    .track-play-btn,
    .player-controls button,
    /* Roster kartlarındaki sosyal ikonlar (30px). */
    .artist-socials a {
        min-width: 44px;
        min-height: 44px;
    }

    /* ── Dokunma cilası ─────────────────────────────────────────────────────
       Android Chrome bağlantılara dokununca gri bir dikdörtgen çiziyor; koyu
       temada bu kirli görünüyor. Odak halkası KALDIRILMIYOR (erişilebilirlik). */
    a, button, .btn, [role="button"] {
        -webkit-tap-highlight-color: rgba(157, 78, 221, .18);
    }

    /* Uzun jetonlar (ISRC, UPC, IBAN, paylaşım linki, oturum kimliği) 375px'te
       satır sonu bulamayıp sayfayı YATAY kaydırıyordu. */
    body {
        overflow-wrap: break-word;
    }
}
