/* RSD Lisans Portalı tasarım sistemi — koyu yan menü + açık içerik.

   TEK KURAL: renk, yarıçap, gölge ve yazı boyutu :root dışında SABİT yazılmaz, jetondan gelir.
   (MarkupTests.SiteCss_HasNoBareHexOutsideRoot bunu kilitler.) Bir jetonun değerini değiştiren,
   yanındaki kontrast oranını da yeniden hesaplasın — oranlar burada yazılı olduğu için
   "acaba geçiyor mu" sorusu dosyadan yanıtlanabiliyor.

   Karanlık mod bu turda YOK: 30 jetonu tek katmanda oturtmadan ikinci tema açmak iki dağınık sistem demek. */
:root {
  /* ---- Renk: birincil ---- */
  --rsd-primary:        #2468c9;   /* beyaz 5.39 · zemin 4.98 — AA (eski #2c7be5 = 4.14, geçmiyordu) */
  --rsd-primary-hover:  #1d55a5;   /* beyaz 7.25 */
  --rsd-primary-active: #17458a;   /* beyaz 9.31 */
  --rsd-primary-rgb:    36,104,201;

  /* ---- Renk: lacivert yüzeyler ---- */
  --rsd-navy-900: #16283c;
  --rsd-navy-800: #1f3a57;
  --rsd-navy-700: #21374f;
  --rsd-navy-950: #132235;   /* yan menü gradyanının dibi */

  /* ---- Renk: metin ---- */
  --rsd-text:               #1b2a3b;  /* beyaz 14.57 */
  --rsd-text-muted:         #5a6a7d;  /* beyaz 5.54 */
  --rsd-text-on-dark:       #cfd9e4;  /* lacivert 10.48 */
  --rsd-text-on-dark-muted: #8fa3b8;  /* lacivert 5.77 */

  /* ---- Renk: yüzey ---- */
  --rsd-bg:            #f4f6f9;
  --rsd-surface:       #ffffff;
  --rsd-surface-hover: #f0f4f9;

  /* ---- Renk: kenarlık — İKİ AYRI JETON, karıştırma ----
     border = dekoratif çizgi (kart, tablo ayracı), kontrast kuralına girmez.
     border-input = kullanıcının denetimin sınırını görmesi gereken yer, 3:1 ZORUNLU. */
  --rsd-border:       #e6eaef;
  --rsd-border-input: #7d8b9b;   /* beyaz 3.48 — 1.4.11 geçer (eski değer 2.68 veriyordu) */
  --rsd-border-strong: #d3dbe3;  /* açık rozetin kenarı: dekoratif çizgiden koyu, girdi sınırından açık */

  /* ---- Renk: odak — iki yüzey, iki jeton ----
     Birincil renk koyu yan menüde 2.78 veriyor; orada beyaz halka kullanılır. */
  --rsd-focus:         #2468c9;
  --rsd-focus-on-dark: #ffffff;  /* lacivert 14.97 */

  /* ---- Renk: durum (hepsi beyaz üstünde metin olarak AA) ---- */
  --rsd-danger:  #b32d2a;   /* 6.31 */
  --rsd-success: #157347;   /* 5.87 */
  --rsd-warning: #6b4a00;         /* 8.06 — METİN rengi (eski değer 4.31 veriyordu) */
  --rsd-warning-border: #d9a406;  /* sarı çerçeve — dekoratif */
  --rsd-warning-bg: #f5b301;      /* üstüne gelince dolgu */
  --rsd-on-warning: #212529;      /* sarı dolgu üstündeki metin: 11.4 */

  /* ---- Renk: durum yüzeyleri (uyarı bandı, açık zemin) ----
     bg = bandın zemini, border = çerçevesi (dekoratif), strong = üstündeki metin. Oran strong/bg.
     Uyarıda adlar farklı: --rsd-warning-bg ve --rsd-warning-border yukarıda DOLGU sarısı olarak dolu. */
  --rsd-success-bg:     #e8f1ed;
  --rsd-success-border: #b9d5c8;
  --rsd-success-strong: #0f5132;   /* 8.13 */
  --rsd-danger-bg:      #f7eaea;
  --rsd-danger-border:  #e8c0bf;
  --rsd-danger-strong:  #7c1f1d;   /* 8.65 */
  --rsd-warning-subtle: #fff4d6;
  --rsd-warning-line:   #f0d27f;
  --rsd-warning-strong: #5a3e00;   /* 9.02 */
  --rsd-info-bg:        #e7eef2;
  --rsd-info-border:    #b6ced7;
  --rsd-info-strong:    #083f56;   /* 9.65 */

  /* ---- 3E kurumsal üçlü ---- */
  --rsd-brand-1: #f7ce34;
  --rsd-brand-2: #269ed3;
  --rsd-brand-3: #f57b3c;
  /* Giriş düğmesi sarısı: üstündeki lacivert-900 metin 9.9 (hover 8.4, basılı 7.1) */
  --rsd-brand-1-hover:  #e9bd1c;
  --rsd-brand-1-active: #d6aa0f;
  --rsd-tricolor: linear-gradient(90deg,
      var(--rsd-brand-1) 0 33.4%, var(--rsd-brand-2) 33.4% 66.7%, var(--rsd-brand-3) 66.7% 100%);

  /* ---- Yarıçap: dört basamak (eskiden altı farklı değer serbestçe yazılıyordu) ---- */
  --rsd-r-sm: 6px;    /* düğme, form denetimi, rozet */
  --rsd-r-md: 8px;    /* menü bağlantısı, uyarı bandı, izgara */
  --rsd-r-lg: 12px;   /* kart, lisans kartı, modal */
  --rsd-r-xl: 16px;   /* tek tüketici: giriş kartı */

  /* ---- Yükselti ---- */
  --rsd-elev-1: 0 1px 2px rgba(22,40,60,.05), 0 10px 24px -14px rgba(22,40,60,.28);
  --rsd-elev-2: 0 2px 4px rgba(22,40,60,.06), 0 18px 40px -18px rgba(22,40,60,.38);
  --rsd-elev-3: 0 12px 40px -12px rgba(22,40,60,.45);

  /* ---- Tipografi ----
     html{font-size} 14px (<768) / 15px (≥768) olduğu için her rem İKİ piksele çözülür;
     yorumdaki ilk sayı mobil, ikincisi masaüstü. */
  --rsd-font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --rsd-fs-xs: .8rem;     /* 11.2 / 12.0 — büyük harf etiket, tablo başlığı */
  --rsd-fs-sm: .875rem;   /* 12.3 / 13.1 — yardımcı metin, izgara gövdesi */
  --rsd-fs-md: 1rem;      /* 14.0 / 15.0 — gövde */
  --rsd-fs-lg: 1.25rem;   /* 17.5 / 18.8 */
  --rsd-fs-xl: 1.5rem;    /* 21.0 / 22.5 — sayfa başlığı, durum kartı başlığı */
  --rsd-fs-2xl: 1.75rem;  /* 24.5 / 26.3 — istatistik sayısı (sayfa başlığıyla aynı boyda durmasın) */
  --rsd-fw-medium:   500;
  --rsd-fw-semibold: 600;
  --rsd-fw-bold:     700;
  --rsd-ls-caps: .06em;   /* büyük harf etiketlerin TEK harf aralığı (eskiden yedi farklı değer) */

  /* ---- Dokunma hedefi (WCAG 2.5.8) ---- */
  --rsd-hit: 24px;

  /* ==== Bootstrap eşlemesi ====
     ÖLÇÜLDÜ: bootstrap.min.css içinde var(--bs-primary) hiç kullanılmıyor, yani tek başına
     --bs-primary yazmak bileşen renklerini DEĞİŞTİRMEZ. Çalışanlar aşağıdakiler; bileşen renkleri
     ayrıca --bs-btn-* ile veriliyor. Bu yüzden --bs-primary BİLEREK verilmez; Bootstrap sürümü
     yükseltilirse yeniden ölçülmeli. */
  --bs-font-sans-serif:      var(--rsd-font);
  /* --bs-body-bg BİLEREK verilmiyor: Bootstrap --bs-card-bg ve --bs-modal-bg'yi ELEMANIN KENDİ
     üzerinde ondan türetir, yani :root'tan verilen değer kaybeder ve kartlar sayfa zeminiyle aynı griye
     düşer — kart/sayfa ayrımı yok olur. Sayfa zemini body kuralından geliyor, kart zemini aşağıda. */
  --bs-body-color:           var(--rsd-text);
  /* Form ve düğme odak halkası da marka rengine bağlanır; yoksa Bootstrap'in kendi mavisi (#0d6efd)
     basılır ve klavyede iki farklı mavi iç içe görünür. */
  --bs-btn-focus-shadow-rgb: var(--rsd-primary-rgb);
  --bs-border-color:         var(--rsd-border);
  --bs-border-radius:        var(--rsd-r-sm);
  --bs-border-radius-sm:     var(--rsd-r-sm);
  --bs-border-radius-lg:     var(--rsd-r-md);
  --bs-primary-rgb:          var(--rsd-primary-rgb);
  --bs-link-color-rgb:       var(--rsd-primary-rgb);
  --bs-link-hover-color-rgb: 29,85,165;

  /* Durum renkleri: rozet (.text-bg-*), metin (.text-*) ve kenarlık (.border-*) rgb üçlüsünden,
     uyarı bandı (.alert-*) text-emphasis/bg-subtle/border-subtle üçlüsünden okur. Verilmezse Bootstrap'in
     kendi paleti basılır ve yukarıdaki durum jetonları hiçbir yere ulaşmaz. Üçlüler jetonlarla AYNI renk. */
  --bs-success-rgb:   21,115,71;    /* --rsd-success */
  --bs-danger-rgb:    179,45,42;    /* --rsd-danger */
  --bs-warning-rgb:   245,179,1;    /* --rsd-warning-bg: rozet/dolgu sarısı; METİN rengi aşağıda .text-warning */
  --bs-info-rgb:      11,90,122;    /* #0b5a7a — beyaz üstünde metin olarak 7.61 */
  --bs-secondary-rgb: 90,106,125;   /* #5a6a7d — rozet zemini: üstündeki beyaz 5.54 */
  --bs-dark-rgb:      22,40,60;     /* --rsd-navy-900 */
  --bs-success-text-emphasis:  var(--rsd-success-strong);
  --bs-success-bg-subtle:      var(--rsd-success-bg);
  --bs-success-border-subtle:  var(--rsd-success-border);
  --bs-danger-text-emphasis:   var(--rsd-danger-strong);
  --bs-danger-bg-subtle:       var(--rsd-danger-bg);
  --bs-danger-border-subtle:   var(--rsd-danger-border);
  --bs-warning-text-emphasis:  var(--rsd-warning-strong);
  --bs-warning-bg-subtle:      var(--rsd-warning-subtle);
  --bs-warning-border-subtle:  var(--rsd-warning-line);
  --bs-info-text-emphasis:     var(--rsd-info-strong);
  --bs-info-bg-subtle:         var(--rsd-info-bg);
  --bs-info-border-subtle:     var(--rsd-info-border);
}

html { font-size: 14px; }
@media (min-width: 768px) { html { font-size: 15px; } }

body {
  background: var(--rsd-bg);
  min-height: 100vh;
}

/* ---- Odak ----
   Tek kural, her yerde. Eski gölge halkası (rgba(...,.25)) beyaz üstünde 1.37 veriyordu, yani fiilen
   görünmüyordu. Opak 2px outline tek hamlede 2.4.7 + 1.4.11'i karşılar. :focus değil :focus-visible:
   fareyle tıklayanın karşısına halka çıkmaz, klavyeyle gezenin karşısına çıkar. */
:focus-visible {
  outline: 2px solid var(--rsd-focus);
  outline-offset: 2px;
}
/* ÖLÇÜLDÜ: yukarıdaki kural (0,1,0) Bootstrap bileşenlerinde KAYBEDİYOR — bootstrap.min.css .btn:focus-visible,
   .nav-link:focus-visible, .form-control:focus, .form-select:focus, .form-check-input:focus ve .btn-close:focus
   (0,2,0) outline:0 yazıyor. Düğmelerde yalnız %50 saydam hale kalıyordu (beyaz üstünde ~1.9), form denetiminde
   yalnız 1px sınır rengi. Aynı özgüllükte ve SONRA gelerek halka geri verilir. */
.btn:focus-visible,
.nav-link:focus-visible,
.form-control:focus-visible,
.form-select:focus-visible,
.form-check-input:focus-visible,
.btn-close:focus-visible {
  outline: 2px solid var(--rsd-focus);
  outline-offset: 2px;
}
/* Koyu yüzeyler: yalnız RENK değişir (longhand); yukarıdaki kurallarla aynı özgüllükte ve sonra geldiği için kazanır */
.rsd-sidebar :focus-visible,
.rsd-topbar :focus-visible,
.rsd-license-card :focus-visible,
/* Giriş sayfasında KOYU ZEMİN ÜSTÜNDE duran odaklanabilir şeyler kartın dışındaki bağlantılar ve dil seçicidir.
   Kabuğun tamamına (.rsd-auth) beyaz halka verilmesi, BEYAZ KART üstündeki alanlara da beyaz halka
   çiziyordu: klavyeyle gezen kullanıcı nerede olduğunu hiç göremiyordu.
   Kart dışındaki bağlantı, sayfa gövdesinin (_AuthLayout: .rsd-auth-body) DOĞRUDAN çocuğu olan paragraftadır (ör.
   Activate'in "Portal girişi (3E)"). Eski seçici (.rsd-auth > * > p a) gövde kabı gelince hiçbir öğeye denk gelmez
   olmuştu ve bağlantı lacivert üstünde ≈2.78:1'lik halkayla kaldı — AuthFocusRingTests çizilmiş sayfada sınar. */
.rsd-auth-body > p a:focus-visible,
.rsd-auth-lang :focus-visible {
  outline-color: var(--rsd-focus-on-dark);
}

/* ---- Yerleşim: sol menü + içerik ----
   992px ve üstü: kenar menü + içerik yan yana. Altı: üst çubuk + tam genişlik içerik, menü Bootstrap offcanvas'ı
   (_Layout: offcanvas-lg). Menüde TEK kopya var; iki kırılım yalnız CSS'le ayrılır. */
.rsd-shell { display: flex; flex-direction: column; min-height: 100vh; }

.rsd-sidebar {
  /* Offcanvas genişliği (992 altı): Bootstrap'in 400px'i tablette içeriğin yarısını örterdi; telefonda
     Bootstrap zaten max-width:100% ile ekrana sığdırır */
  --bs-offcanvas-width: 280px;
  background: linear-gradient(180deg, var(--rsd-navy-800) 0%, var(--rsd-navy-900) 60%, var(--rsd-navy-950) 100%);
  box-shadow: inset -1px 0 0 rgba(255,255,255,.06), 8px 0 24px -18px rgba(0,0,0,.5);
  color: var(--rsd-text-on-dark);
  display: flex;
  flex-direction: column;
  /* Kısa ekranda (yatay telefon, %250 yakınlaştırma, açık offcanvas) menünün sonu ve Çıkış kırpılmasın:
     menü kendi içinde kayar */
  overflow-y: auto;
}
/* Sabit kenar menü YALNIZ geniş ekranda. Bu kurallar genel yazılsaydı site.css (Bootstrap'ten sonra, aynı
   özgüllük) offcanvas'ın position:fixed'ini ve z-index 1045'ini ezerdi: panel perdenin (1040) altında kalır,
   tıklanamazdı; Bootstrap da konumu fixed olmayan açık offcanvas'ı yeniden boyutlamada kendiliğinden kapatır. */
@media (min-width: 992px) {
  .rsd-shell { flex-direction: row; }
  .rsd-sidebar {
    width: 225px;
    flex-shrink: 0;
    position: sticky;
    top: 0;
    height: 100vh;
    z-index: 1;
  }
}
@media (max-width: 991.98px) {
  /* Yapışkan üst çubuk klavyeyle odaklanan öğenin üstünü örtmesin (2.4.11): kaydırma çubuğun altında durur */
  html { scroll-padding-top: 4.5rem; }
}

/* Üst çubuk (yalnız 992 altı, d-lg-none): menü düğmesi + marka */
.rsd-topbar {
  position: sticky; top: 0; z-index: 1020;
  display: flex; align-items: center; gap: .35rem;
  padding: .3rem .75rem .3rem .4rem;
  background: var(--rsd-navy-900);
  color: var(--rsd-surface);
  box-shadow: inset 0 -1px 0 rgba(255,255,255,.08), 0 6px 16px -12px rgba(0,0,0,.55);
}
/* Menü düğmesi: 44×44 (dokunma hedefinin önerilen ölçüsü; 24 alt sınır) */
.rsd-topbar-toggle {
  --bs-btn-color: var(--rsd-text-on-dark);
  --bs-btn-border-color: transparent;
  --bs-btn-hover-color: var(--rsd-surface);
  --bs-btn-hover-bg: var(--rsd-navy-700);
  --bs-btn-hover-border-color: transparent;
  --bs-btn-active-color: var(--rsd-surface);
  --bs-btn-active-bg: var(--rsd-navy-700);
  --bs-btn-active-border-color: transparent;
  --bs-btn-focus-shadow-rgb: 255,255,255;
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; padding: 0;
}
.rsd-topbar-toggle .rsd-icon { width: 22px; height: 22px; }
.rsd-topbar-brand {
  display: flex; align-items: center; gap: .5rem; min-width: 0; min-height: 44px;
  color: var(--rsd-surface); text-decoration: none; font-size: var(--rsd-fs-md);
}
.rsd-topbar-brand:hover { color: var(--rsd-surface); }
.rsd-topbar-logo { height: 28px; width: auto; }

/* Menü başlığı: marka + (992 altı) kapat düğmesi. 3E şeridi başlığın alt kenarında */
.rsd-sidebar-head {
  position: relative;
  display: flex;
  align-items: center;
  border-bottom: 1px solid rgba(255,255,255,.08);
}
.rsd-sidebar-head::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 3px;
  background: var(--rsd-tricolor);
}
/* .btn-close kendi başına ~21px: dolgu dokunma hedefini 24'ün üstüne çıkarır */
.rsd-sidebar-close { flex-shrink: 0; padding: .6rem; margin-right: .6rem; }

.rsd-brand {
  display: flex;
  flex: 1;
  min-width: 0;
  align-items: center;
  gap: .6rem;
  padding: 1rem 1.1rem;
  color: var(--rsd-surface);
  text-decoration: none;
}
.rsd-brand:hover { color: var(--rsd-surface); }
/* Marka bağlantısı menünün kenarına dayalı ve menü kaydırma kabı (overflow-y): dışarı çizilen halka kırpılırdı */
.rsd-sidebar .rsd-brand:focus-visible { outline-offset: -4px; }
.rsd-logo { height: 38px; width: auto; }
.rsd-brand .title { line-height: 1.15; }
.rsd-brand .title strong { display: block; font-size: var(--rsd-fs-md); }
.rsd-brand .title span { font-size: var(--rsd-fs-xs); color: var(--rsd-text-on-dark-muted); }

.rsd-nav { flex: 1; padding: .8rem .6rem; }
.rsd-nav a {
  display: flex; align-items: center; gap: .65rem;
  padding: .55rem .8rem; margin-bottom: .15rem;
  border-radius: var(--rsd-r-md);
  color: var(--rsd-text-on-dark); text-decoration: none; font-size: var(--rsd-fs-sm);
}
.rsd-nav a .rsd-icon { width: 17px; height: 17px; opacity: .8; flex-shrink: 0; }
.rsd-nav a:hover { background: var(--rsd-navy-700); color: var(--rsd-surface); }
.rsd-nav a.active {
  background: var(--rsd-primary); color: var(--rsd-surface);
  /* kabartı: bağlantı menünün yüzeyinden kalkmış görünür */
  box-shadow: 0 8px 18px -10px rgba(var(--rsd-primary-rgb), .95), inset 0 1px 0 rgba(255,255,255,.18);
}
.rsd-nav a.active .rsd-icon { opacity: 1; }

/* Kullanıcı bloğu: dil, e-posta, rol, çıkış — alt alta. Satırlar SARAR (flex-wrap) ve uzun kurumsal e-posta
   her yerden bölünür: eskiden tek satırda bölünemeyen adres Çıkış düğmesini ekran dışına itiyordu. */
.rsd-user {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0 .75rem;
  padding: .9rem 1.1rem;
  border-top: 1px solid rgba(255,255,255,.08);
  font-size: var(--rsd-fs-sm);
}
.rsd-user > .rsd-lang, .rsd-user-email, .rsd-role { flex-basis: 100%; min-width: 0; }
.rsd-user-email { color: var(--rsd-text-on-dark); text-decoration: none; margin-bottom: .5rem; overflow-wrap: anywhere; }
.rsd-user-email:hover { color: var(--rsd-surface); text-decoration: underline; }
/* Adın altında rolü: "ne yapabiliyorum?" sorusu her ekranda bir bakışta yanıtlansın */
.rsd-role { display: block; color: var(--rsd-text-on-dark-muted); font-size: var(--rsd-fs-xs); margin: -.3rem 0 .5rem; }

/* İçerik sütunu = <main> + alt bilgi. Sütun flex: kısa sayfada da alt bilgi (.rsd-footer, margin-top:auto)
   ekranın dibine iner. 992 altında üst çubuk da kabukta olduğundan yükseklik flex:1 ile kalan alandan gelir;
   100vh verilseydi her sayfa çubuk boyu kadar boşuna kayardı. */
.rsd-content { flex: 1 0 auto; min-width: 0; display: flex; flex-direction: column; }
@media (min-width: 992px) { .rsd-content { flex: 1 1 0; min-height: 100vh; } }
/* main de sütun flex: sayfalar buna dayanıyor (Licenses/Index align-self-start, .rsd-status width:100%) */
.rsd-main { flex: 1 0 auto; min-width: 0; display: flex; flex-direction: column; padding: 1.4rem 1.8rem 1rem; }
/* Odak programatik (atlama bağlantısı): <main>'in tamamına halka çizilmesin */
#main:focus { outline: none; }
@media (max-width: 575.98px) { .rsd-main { padding: 1rem 1rem .5rem; } }

/* Atlama bağlantısı: odaklanınca sol üstte sabit kutu. Akışta dursaydı kabuğu bir satır aşağı iterdi.
   Üst çubuğun (1020) ve açık offcanvas'ın (1045) da üstünde */
.rsd-skip:focus {
  position: fixed; top: .5rem; left: .5rem; z-index: 1100;
  padding: .5rem .9rem;
  background: var(--rsd-surface); color: var(--rsd-primary);
  border-radius: var(--rsd-r-sm); box-shadow: var(--rsd-elev-2);
  font-weight: var(--rsd-fw-semibold); text-decoration: none;
}

/* ---- Alt bilgi (_Footer): kabukta içerik sütununun dibinde, girişsiz sayfalarda kartın altında ---- */
.rsd-footer {
  display: flex; flex-wrap: wrap; justify-content: space-between; gap: .25rem 1rem;
  margin-top: auto; padding-top: 1.5rem;
  font-size: var(--rsd-fs-xs); color: var(--rsd-text-muted);
}
/* Kabukta alt bilgi <main> dışında: yan boşluğu içerikle hizalı */
.rsd-content > .rsd-footer { padding: 1.5rem 1.8rem 1.5rem; }
@media (max-width: 575.98px) { .rsd-content > .rsd-footer { padding: 1rem 1rem 1rem; } }
/* Oturumsuz hata sayfası: kabuk (ve .rsd-main dolgusu) yok, alt bilgi doğrudan body'de — kenara yapışmasın */
body > .rsd-footer { padding: 1.5rem 1rem 1rem; }
/* Koyu gradyan üstünde soluk metin (--rsd-text-on-dark-muted) ÖLÇÜLDÜ: lacivert-800'de 4.50, kartın altına
   denk gelen bölgede birincil renge kayan gradyanda 3.2–3.9 — küçük yazıda AA'yı geçmiyor.
   --rsd-text-on-dark aynı bölgede en kötü 5.12. */
.rsd-footer--on-dark {
  justify-content: center; margin-top: 1rem; padding-top: 0;
  color: var(--rsd-text-on-dark);
}

/* Form denetiminin sınırı 3:1 (1.4.11): Bootstrap --bs-border-color'dan okuyor, o da dekoratif --rsd-border
   (beyaz üstünde 1.2) — kullanıcı kutunun nerede başladığını göremiyordu. Geçersiz alan kuralı
   (.input-validation-error) aynı özgüllükte ve bundan SONRA gelir. */
.form-control, .form-select { border-color: var(--rsd-border-input); }

/* Form denetimlerinde odak: Bootstrap'in kendi mavi halesi kapatılır, sınır marka rengine döner.
   Halkanın kendisi yukarıdaki .form-control:focus-visible kuralından gelir — iki ayrı halka üst üste binmesin. */
.form-control:focus, .form-select:focus, .form-check-input:focus {
  border-color: var(--rsd-primary);
  box-shadow: none;
}

/* ---- İkonlar ----
   Sprite'tan gelen her ikon metnin kendi boyutuna uyar; dokunma hedefi AYRI iştir (bkz. .btn). */
.rsd-icon { width: 1em; height: 1em; vertical-align: -.125em; flex-shrink: 0; }

/* ---- Kartlar / tablolar ---- */
.card {
  --bs-card-bg: var(--rsd-surface);   /* kartın KENDİ üzerinde: :root'tan verilen değer Bootstrap'e yenilir */
  border: 1px solid var(--rsd-border);
  border-radius: var(--rsd-r-lg);
  box-shadow: var(--rsd-elev-1);
}
.modal-content { --bs-modal-bg: var(--rsd-surface); }

/* ---- Ekleme çekmecesi (.rsd-drawer = Bootstrap offcanvas offcanvas-end) ----
   Liste sayfalarının ekleme formu sağdan açılır, sayfa başlığındaki birincil düğme açar (kenar menünün offcanvas-lg'si
   ayrı bileşen: o yalnız 992 altında çekmece). Yüzey kart ve modalla aynı jetonlardan. Genişlik formun tek sütunu
   için; telefonda tam ekran — yanda kalan dar perde şeridi yalnız yanlışlıkla kapatmaya yarardı. */
.rsd-drawer {
  --bs-offcanvas-width: 420px;
  --bs-offcanvas-padding-x: 1.25rem;
  --bs-offcanvas-padding-y: 1rem;
  --bs-offcanvas-bg: var(--rsd-surface);
  --bs-offcanvas-color: var(--rsd-text);
  --bs-offcanvas-border-color: var(--rsd-border);
  box-shadow: var(--rsd-elev-3);
}
.rsd-drawer .offcanvas-header { border-bottom: 1px solid var(--rsd-border); }
/* Başlık h2 (sayfanın tek h1'i değişmez); kart başlığından bir basamak iri: çekmecenin tamamının başlığı */
.rsd-drawer .offcanvas-title { font-size: var(--rsd-fs-lg); font-weight: var(--rsd-fw-semibold); line-height: 1.3; }
@media (max-width: 575.98px) { .rsd-drawer { --bs-offcanvas-width: 100%; } }

/* ---- Lisans bildirimi: kategoriler yalnız ana anahtar AÇIKKEN görünür (Furkan 2026-09-23) ----
   Kap .rsd-notify, anahtar [data-notify-master] (Hesap güvenliği, Users/Edit, firma sayfasının çekmecesi). Gizlenen
   kutular forma YİNE girer — display:none gönderimi etkilemez (disabled etkilerdi): kayıtlı seçim korunur, anahtar
   açılınca aynen geri gelir; çekmecede betiğin işaretlediği anahtar da kuralı anında tetikler. :has() desteklemeyen
   eski tarayıcıda kutular hep görünür (önceki davranış) — bozulan bir şey olmaz. */
.rsd-notify:has([data-notify-master]:not(:checked)) .rsd-notify-categories { display: none; }

/* ---- Başlık ölçeği: sayfada TEK h1 (sayfa başlığı), kart/bölüm başlığı h2, kart içi alt etiket h3 ----
   Boyut etiketten değil sınıftan gelir: Bootstrap'in h1–h3 boyları (2.5/2/1.75rem) portalın yoğunluğuna
   göre çok iri, sınıf olmadan başlık yazılmaz. */
.rsd-crumbs { font-size: var(--rsd-fs-sm); margin-bottom: .35rem; color: var(--rsd-text-muted); }
.rsd-crumbs a { color: var(--rsd-primary); }

/* <rsd-page-header> (TagHelpers/PageHeaderTagHelper.cs) */
.rsd-page-header {
  display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: space-between;
  gap: .75rem 1rem; margin-bottom: 1.25rem;
}
.rsd-eyebrow {
  margin: 0 0 .2rem;
  font-size: var(--rsd-fs-xs); font-weight: var(--rsd-fw-semibold);
  letter-spacing: .12em; text-transform: uppercase; color: var(--rsd-text-muted);
}
.rsd-page-title {
  margin: 0;
  font-size: var(--rsd-fs-xl); font-weight: var(--rsd-fw-bold); line-height: 1.2;
  color: var(--rsd-text); text-wrap: balance;
}
.rsd-page-actions { display: flex; flex-wrap: wrap; gap: .5rem; }

.card-title { font-size: var(--rsd-fs-md); font-weight: var(--rsd-fw-semibold); line-height: 1.3; }
/* Kart içi alt etiket (eski h6.text-muted ve h6.rsd-form-section tek sınıfta) */
.rsd-subhead {
  font-size: var(--rsd-fs-xs); font-weight: var(--rsd-fw-semibold);
  letter-spacing: var(--rsd-ls-caps); text-transform: uppercase;
  color: var(--rsd-text-muted); margin-bottom: .5rem;
}

.rsd-stat { display: flex; align-items: center; gap: .9rem; }
.rsd-stat .ico {
  width: 42px; height: 42px; border-radius: var(--rsd-r-md);
  display: grid; place-items: center; flex-shrink: 0;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.75), 0 6px 14px -8px rgba(22,40,60,.45);
}
.rsd-stat .ico .rsd-icon { width: 20px; height: 20px; }
.rsd-stat .num { font-size: var(--rsd-fs-2xl); font-weight: var(--rsd-fw-bold); line-height: 1.1; }
.rsd-stat .lbl { font-size: var(--rsd-fs-xs); color: var(--rsd-text-muted); }
/* Panel > sayı kartı bağlantısı: kartın tamamı tıklanır (içinde ikinci bir bağlantı yok). Metin rengi ve altı
   çizgisiz görünüm kartın kendisiyle aynı kalır; tıklanabilir olduğunu üstüne gelince kenarlık/gölge söyler.
   Odak halkası için ayrı kural YOK: genel :focus-visible kuralı burada kazanıyor (ÖLÇÜLDÜ — Bootstrap outline:0'ı
   yalnız .btn/.nav-link/.form-* için yazar, düz bir .card bağlantısına dokunmaz). */
.rsd-stat-card { display: block; color: inherit; text-decoration: none; transition: border-color .12s, box-shadow .12s; }
.rsd-stat-card:hover { border-color: var(--rsd-primary); box-shadow: var(--rsd-elev-2); }
/* Uyarı tonu Bootstrap'in kenarlık yardımcılarıyla verilemez: onlar border-color'ı !important yazar ve yukarıdaki
   hover kuralı ÖLÇÜLDÜ — paneldeki en çok tıklanan kartta kenarlık hiç değişmiyordu. Kendi jetonumuz aynı işi
   !important olmadan yapar (0,1,0 → hover 0,2,0 ile kazanır). */
.rsd-stat-card--warn { border-color: var(--rsd-warning-border); }
.rsd-stat-card--danger { border-color: var(--rsd-danger); }

/* Lisanslar > açık süzgeç şeridi (panel kartından gelen kullanıcı listenin neden kısa olduğunu burada okur) */
.rsd-filter-strip {
  display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .75rem;
  margin: 0 0 1rem; font-size: var(--rsd-fs-sm); color: var(--rsd-text-muted);
}

.table { --bs-table-hover-bg: var(--rsd-surface-hover); }
.table thead th {
  font-size: var(--rsd-fs-xs); text-transform: uppercase; letter-spacing: var(--rsd-ls-caps);
  color: var(--rsd-text-muted); font-weight: var(--rsd-fw-semibold);
  border-bottom-width: 1px;
}
.table > :not(caption) > * > * { padding-top: .5rem; padding-bottom: .5rem; }
/* Görsel olarak gizli sütun başlıkları (Panel akışları): başlık metni ekran okuyucuya sütun bağlamını verir,
   satır görünmez. thead'in kendisi .visually-hidden (position:absolute) yapılmaz — bazı tarayıcılarda tablo
   anlamı düşüyor; satır yerinde kalır, yalnız dolgusu ve çizgisi sıfırlanır, metin th içinde gizlidir. */
.table thead.rsd-sr-thead th { padding: 0; border-bottom-width: 0; }

/* Boş durum: _Empty partial'ı ve DevExtreme izgarasının "veri yok" satırı AYNI görünür */
.rsd-empty {
  text-align: center; color: var(--rsd-text-muted);
  padding: 2rem 1rem; font-size: var(--rsd-fs-sm);
}
.rsd-empty-text { margin: 0; }
.rsd-empty .rsd-icon,
.rsd-grid .dx-datagrid-nodata .rsd-icon { width: 34px; height: 34px; opacity: .35; margin-bottom: .5rem; }

/* ---- Girişsiz sayfalar (giriş, davet, aktivasyon) ---- */
.rsd-auth {
  position: relative;
  min-height: 100vh;
  display: grid; place-items: center;
  background: linear-gradient(160deg, var(--rsd-navy-900) 0%, var(--rsd-navy-800) 55%, var(--rsd-primary) 130%);
  padding: 1.5rem;
}
.rsd-auth .card { width: 100%; box-shadow: var(--rsd-elev-3); border: 0; overflow: hidden; }
/* 3E şeridi kartın ALT kenarında — lisans kartı, giriş kartının kimlik paneli ve menü başlığıyla aynı yerde (üstte
   tek başına kalıyordu). Kart flex sütunu: son öğe olarak dibe oturur, margin-top:auto uzayan kartta da en altta tutar */
.rsd-auth .card::after {
  content: "";
  display: block;
  flex-shrink: 0;
  height: 3px;
  margin-top: auto;
  background: var(--rsd-tricolor);
}
.rsd-auth-brand { text-align: center; margin-bottom: 1rem; }
/* Logo beyaz yazılı olduğundan yalnızca koyu gradyan zemin üstünde (kartın dışında) durur */
.rsd-auth-brand .rsd-auth-logo { height: 52px; width: auto; margin-bottom: .6rem; }
/* Tek işlik girişsiz sayfaların (davet, sıfırlama, ikinci adım) dar kartı */
.rsd-auth-card { max-width: 420px; }
/* Yarıçap sarmalayıcıya değil KARTA verilir: sarmalayıcı saydamdır, hiçbir şey boyamaz */
.rsd-auth-card .card { border-radius: var(--rsd-r-xl); }
.rsd-auth-narrow { max-width: 560px; width: 100%; }

/* Beyaz kart üzerinde okunurluk */
.text-muted { color: var(--rsd-text-muted) !important; }
.form-check-input { border-color: var(--rsd-border-input); }
input[type="checkbox"] { accent-color: var(--rsd-primary); }
/* Doğrulama: jquery-unobtrusive geçersiz alana .input-validation-error koyar; Bootstrap'te karşılığı yok,
   sınır kırmızıya dönmezse hata yalnız alttaki metinden anlaşılırdı. Odakta da kırmızı kalır
   (yukarıdaki form odak kuralı sınırı birincil renge çeviriyor; bu kural ondan SONRA gelmeli). */
.input-validation-error,
.input-validation-error:focus { border-color: var(--rsd-danger); }

/* ---- Durum renkli düğmeler ----
   Bootstrap bu düğmelerin renklerini --bs-btn-* içine SABİT yazar (--bs-*-rgb'den okumaz), yani :root'taki
   durum eşlemesi bunlara ulaşmaz; her biri jetonlara tek tek bağlanır. */
.btn-outline-warning {
  --bs-btn-color: var(--rsd-warning);
  --bs-btn-border-color: var(--rsd-warning-border);
  --bs-btn-hover-bg: var(--rsd-warning-bg);
  --bs-btn-hover-border-color: var(--rsd-warning-bg);
  --bs-btn-hover-color: var(--rsd-on-warning);
  --bs-btn-focus-shadow-rgb: var(--bs-warning-rgb);
  --bs-btn-active-bg: var(--rsd-warning-border);
  --bs-btn-active-border-color: var(--rsd-warning-border);
  --bs-btn-active-color: var(--rsd-on-warning);        /* 6.80 */
  --bs-btn-disabled-color: var(--rsd-warning);
  --bs-btn-disabled-border-color: var(--rsd-warning-border);
}
.btn-warning {
  --bs-btn-bg: var(--rsd-warning-bg);
  --bs-btn-border-color: var(--rsd-warning-bg);
  --bs-btn-color: var(--rsd-on-warning);               /* 8.32 */
  --bs-btn-hover-bg: var(--rsd-warning-border);
  --bs-btn-hover-border-color: var(--rsd-warning-border);
  --bs-btn-hover-color: var(--rsd-on-warning);         /* 6.80 */
  --bs-btn-focus-shadow-rgb: var(--bs-warning-rgb);
  --bs-btn-active-bg: var(--rsd-warning-border);
  --bs-btn-active-border-color: var(--rsd-warning-border);
  --bs-btn-active-color: var(--rsd-on-warning);
  --bs-btn-disabled-bg: var(--rsd-warning-bg);
  --bs-btn-disabled-border-color: var(--rsd-warning-bg);
  --bs-btn-disabled-color: var(--rsd-on-warning);
}
.btn-outline-danger {
  --bs-btn-color: var(--rsd-danger);                   /* 6.31 */
  --bs-btn-border-color: var(--rsd-danger);
  --bs-btn-hover-bg: var(--rsd-danger);
  --bs-btn-hover-border-color: var(--rsd-danger);
  --bs-btn-hover-color: var(--rsd-surface);            /* 6.31 */
  --bs-btn-focus-shadow-rgb: var(--bs-danger-rgb);
  --bs-btn-active-bg: var(--rsd-danger-strong);
  --bs-btn-active-border-color: var(--rsd-danger-strong);
  --bs-btn-active-color: var(--rsd-surface);           /* 10.14 */
  --bs-btn-disabled-color: var(--rsd-danger);
  --bs-btn-disabled-border-color: var(--rsd-danger);
}
.btn-outline-success {
  --bs-btn-color: var(--rsd-success);                  /* 5.87 */
  --bs-btn-border-color: var(--rsd-success);
  --bs-btn-hover-bg: var(--rsd-success);
  --bs-btn-hover-border-color: var(--rsd-success);
  --bs-btn-hover-color: var(--rsd-surface);            /* 5.87 */
  --bs-btn-focus-shadow-rgb: var(--bs-success-rgb);
  --bs-btn-active-bg: var(--rsd-success-strong);
  --bs-btn-active-border-color: var(--rsd-success-strong);
  --bs-btn-active-color: var(--rsd-surface);           /* 9.36 */
  --bs-btn-disabled-color: var(--rsd-success);
  --bs-btn-disabled-border-color: var(--rsd-success);
}
/* Yalnız koyu yan menüde (Çıkış): lacivert zemin üstünde */
.btn-outline-light {
  --bs-btn-color: var(--rsd-text-on-dark);             /* 10.48 */
  --bs-btn-border-color: var(--rsd-text-on-dark-muted);
  --bs-btn-hover-bg: var(--rsd-surface);
  --bs-btn-hover-border-color: var(--rsd-surface);
  --bs-btn-hover-color: var(--rsd-navy-900);           /* 14.97 */
  --bs-btn-focus-shadow-rgb: 255,255,255;
  --bs-btn-active-bg: var(--rsd-text-on-dark);
  --bs-btn-active-border-color: var(--rsd-text-on-dark);
  --bs-btn-active-color: var(--rsd-navy-900);          /* 10.48 */
  --bs-btn-disabled-color: var(--rsd-text-on-dark-muted);
  --bs-btn-disabled-border-color: var(--rsd-text-on-dark-muted);
}

/* ---- Durum rozetleri ve metinleri ----
   .text-bg-* metin rengini !important ile sabit basar (info/warning'de siyah, ötekilerde beyaz). */
.text-bg-info { color: var(--rsd-surface) !important; }        /* koyu teal üstünde beyaz 7.61 (siyah okunmazdı) */
.text-bg-warning { color: var(--rsd-on-warning) !important; }  /* sarı dolgu üstünde 8.32 */
/* --bs-warning-rgb artık DOLGU sarısı; metin olarak beyaz üstünde okunmaz, metin rengi ayrı jetondan */
.text-warning { color: var(--rsd-warning) !important; }
.badge.text-bg-light { border: 1px solid var(--rsd-border-strong); color: var(--rsd-text) !important; }

/* Kopyala geri bildirimi (site.js rsdCopy): lisans kartındaki beyaz düğmede de okunur (5.87 / 6.31) */
.is-copied { color: var(--rsd-success) !important; }
.is-copy-failed { color: var(--rsd-danger) !important; }

/* Dil seçimi (_LanguageSwitch): yan menüde ve girişsiz sayfaların sağ üstünde, ikisi de koyu zeminde.
   Seçili olmayan dilde yalnız BAYRAK soluklaşır; kod metni okunur kalır (soluk metin 4.5'in altına düşerdi). */
.rsd-lang { display: flex; gap: .4rem; }
.rsd-user .rsd-lang { margin-bottom: .7rem; }
.rsd-lang a {
  display: inline-flex; align-items: center; gap: .35rem;
  min-width: var(--rsd-hit); min-height: var(--rsd-hit);   /* WCAG 2.5.8: bayrak 22×15'ti */
  margin-bottom: 0; padding: .1rem .35rem; border-radius: var(--rsd-r-sm);
  color: var(--rsd-text-on-dark-muted); text-decoration: none;
  font-size: var(--rsd-fs-xs); font-weight: var(--rsd-fw-semibold); letter-spacing: var(--rsd-ls-caps);
}
.rsd-lang a:hover { color: var(--rsd-surface); text-decoration: none; }
.rsd-lang a.active { color: var(--rsd-surface); }
.rsd-lang svg { width: 22px; height: 15px; border-radius: 2.5px; display: block; opacity: .45; }
.rsd-lang a:hover svg, .rsd-lang a.active svg { opacity: 1; }
.rsd-lang a.active svg { outline: 2px solid rgba(255,255,255,.55); outline-offset: 1px; }
.rsd-auth > .rsd-auth-lang { position: absolute; top: 1rem; right: 1rem; z-index: 2; }

/* Lisanslar > firma kırılımı kartları */
.rsd-firm-card { color: inherit; transition: border-color .12s, box-shadow .12s, transform .12s; }
.rsd-firm-card:hover {
  border-color: var(--rsd-primary);
  transform: translateY(-3px);
  box-shadow: var(--rsd-elev-2);
}

/* ---- DevExtreme izgaraları (dx.light teması üstüne portal tipografisi) ----
   NOT: dx.light.css renkleri SABİT yazar (var(--dx-*) tanımlı değil), bu yüzden tema değişkenle
   değil, aşağıdaki hedefli kurallarla portal kimliğine çekiliyor. */
.rsd-grid .dx-widget { font-family: inherit; font-size: var(--rsd-fs-sm); color: inherit; }
.rsd-grid .dx-datagrid-headers .dx-header-row > td {
  font-size: var(--rsd-fs-xs); text-transform: uppercase; letter-spacing: var(--rsd-ls-caps);
  color: var(--rsd-text-muted); font-weight: var(--rsd-fw-semibold);
}
.rsd-grid .dx-datagrid .dx-row > td { vertical-align: middle; }
.rsd-grid .dx-datagrid-rowsview .dx-row:hover > td { background: var(--rsd-surface-hover); }
.rsd-grid .dx-datagrid-headers, .rsd-grid .dx-datagrid-rowsview { border-color: var(--rsd-border); }
.rsd-grid .dx-datagrid-borders > .dx-datagrid-headers, .rsd-grid .dx-datagrid { border: 0; }
.rsd-grid .dx-toolbar { padding: .3rem .4rem; background: transparent; }
.rsd-grid .dx-datagrid-pager { border-top: 1px solid var(--rsd-border); padding: .35rem .4rem; }
.rsd-grid a { color: var(--rsd-primary); text-decoration: none; }
.rsd-grid a:hover { text-decoration: underline; }
/* "Veri yok" satırı .rsd-empty gibi görünür; ikonu rsd-grid.js ekler. dx.light'ın opacity:.7'si kaldırılır:
   soluk metnin üstüne bir de saydamlık binince 4.5'in altına düşerdi. */
.rsd-grid .dx-datagrid-nodata { color: var(--rsd-text-muted); font-size: var(--rsd-fs-sm); opacity: 1; }
.rsd-grid .dx-datagrid-nodata .rsd-icon { display: block; margin-inline: auto; }
/* Sayfalayıcı bilgisi ("Sayfa 1 / 3 (60 öğe)"): dx.light'ın opacity:.7'si soluk metni 4.5'in altına itiyordu */
.rsd-grid .dx-pager .dx-pages .dx-info { opacity: 1; }
/* Dar ekranda gizlenen sütunların "…" açıcısı dx.light'ta 21×21: dokunma hedefi --rsd-hit'e büyür, ikon ortada */
.rsd-grid .dx-datagrid-adaptive-more {
  display: inline-flex; align-items: center; justify-content: center;
  min-width: var(--rsd-hit); min-height: var(--rsd-hit);
}
/* Odak: dx.light satır, hücre, başlık ve sayfalayıcıda outline:0 yazıyor (genel :focus-visible'dan özgül) ve
   kendi halkası 3.1:1 açık mavi. Aynı jetonla geri verilir. Hücre halkası İÇERİ çizilir: dışarı taşan kısmı
   kaydırma kabı kırpıyordu. Metin kutuları (arama, süzgeç satırı, sayfa no) odağı kabın durum sınıfıyla
   gösterir; iç girdinin kendi halkası kapatılır ki iki halka üst üste binmesin. */
.rsd-grid .dx-datagrid-rowsview:focus-visible,
.rsd-grid .dx-datagrid-rowsview .dx-row:focus-visible,
.rsd-grid .dx-datagrid-rowsview .dx-row > td:focus-visible,
.rsd-grid .dx-datagrid-headers .dx-header-row > td:focus-visible {
  outline: 2px solid var(--rsd-focus); outline-offset: -2px;
}
.rsd-grid .dx-pager .dx-page:focus-visible,
.rsd-grid .dx-pager .dx-page-size:focus-visible,
.rsd-grid .dx-pager .dx-navigate-button:focus-visible {
  outline: 2px solid var(--rsd-focus); outline-offset: 2px;
}
.rsd-grid .dx-datagrid-focus-overlay { border-color: var(--rsd-focus); }
.rsd-grid .dx-texteditor.dx-state-focused { outline: 2px solid var(--rsd-focus); outline-offset: 1px; }
.rsd-grid .dx-texteditor-input:focus-visible { outline: 0; }
/* İşlemler sütunu (rsdCols.actions): düğmeler dar sütunda alt satıra sarar */
.rsd-grid-actions-list { display: inline-flex; flex-wrap: wrap; align-items: center; gap: .25rem; vertical-align: middle; }
/* Lisans izgarasındaki kopyala düğmesi yalnız ikon (p-0): genişliği de dokunma hedefine çıkar */
.rsd-grid .rsd-grid-copy { min-width: var(--rsd-hit); }

/* ---- Düğmeler ---- */
.btn { border-radius: var(--rsd-r-sm); }
/* Dokunma hedefi: ikon-only küçük düğmeler 24×24'ün altına düşmesin (WCAG 2.5.8) */
.btn-sm { min-height: var(--rsd-hit); }
/* Birincil düğme DÜZ renk: gradyanın üst durağı beyaz metinle 3.38 veriyordu ve
   taban rengi ne olursa olsun AA'yı geçmiyordu. Hacim hissi kartlarda --rsd-elev-* ile zaten var. */
.btn-primary {
  --bs-btn-bg: var(--rsd-primary);
  --bs-btn-border-color: var(--rsd-primary);
  --bs-btn-hover-bg: var(--rsd-primary-hover);
  --bs-btn-hover-border-color: var(--rsd-primary-hover);
  --bs-btn-active-bg: var(--rsd-primary-active);
  --bs-btn-active-border-color: var(--rsd-primary-active);
  --bs-btn-disabled-bg: var(--rsd-primary);
  --bs-btn-disabled-border-color: var(--rsd-primary);
}
.badge { font-weight: var(--rsd-fw-medium); }
.alert { border-radius: var(--rsd-r-md); }
.font-monospace { font-size: .92em; }

/* --- Çevrilebilir kart (3D flip) — İŞLEVSEL: ön ve arka yüz gerçek içerik taşır (lisans kartı ⇄ paket
   ayrıntıları). İki yüz aynı ızgara hücresinde durur: yükseklik uzun olana göre, sabit ölçü yok.
   Görünmeyen yüz JS ile inert yapılır (rsdFlip): klavye ve ekran okuyucu arkadaki forma düşmez. --- */
.rsd-flip { perspective: 1400px; }
.rsd-flip-inner { display: grid; transform-style: preserve-3d; transition: transform .7s cubic-bezier(.2,.8,.2,1); }
.rsd-flip-face { grid-area: 1 / 1; min-width: 0; backface-visibility: hidden; -webkit-backface-visibility: hidden; }
.rsd-flip-back { transform: rotateY(180deg); }
.rsd-flip.is-flipped .rsd-flip-inner { transform: rotateY(180deg); }
.rsd-flip-back.card { margin: 0; }

/* Lisans detayındaki kartın ön yüzü */
.rsd-license-card {
  position: relative; overflow: hidden; border-radius: var(--rsd-r-lg); padding: 1.1rem 1.25rem;
  color: var(--rsd-surface);
  display: flex; flex-direction: column;
  background: linear-gradient(135deg, var(--rsd-navy-800) 0%, var(--rsd-primary) 58%, var(--rsd-brand-2) 100%);
  box-shadow: var(--rsd-elev-2);
}
/* 3E şeridi alt kenarda: giriş kartının kimlik paneliyle aynı */
.rsd-license-card::before { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 4px; background: var(--rsd-tricolor); }
/* Lisans no sayfanın h1'i (ayrı sayfa başlığı yok); boyu eski h5'in boyu */
.rsd-license-card-no { font-size: var(--rsd-fs-lg); color: var(--rsd-surface); font-weight: var(--rsd-fw-bold); letter-spacing: .02em; }
.rsd-license-card-eyebrow { font-size: var(--rsd-fs-xs); letter-spacing: .12em; text-transform: uppercase; color: rgba(255,255,255,.75); }
.rsd-license-card-sub { color: rgba(255,255,255,.82); margin-bottom: 1rem; }
.rsd-license-card-label { font-size: var(--rsd-fs-xs); letter-spacing: var(--rsd-ls-caps); text-transform: uppercase; color: rgba(255,255,255,.72); display: block; margin-bottom: .25rem; }
.rsd-license-card-key .form-control { background: rgba(255,255,255,.14); border-color: rgba(255,255,255,.35); color: var(--rsd-surface); letter-spacing: var(--rsd-ls-caps); }
.rsd-license-card-key .form-control:focus { background: rgba(255,255,255,.2); color: var(--rsd-surface); }
.rsd-license-card-key .btn { background: rgba(255,255,255,.92); border-color: transparent; color: var(--rsd-navy-900); }
.rsd-license-card-keytext { font-size: var(--rsd-fs-md); letter-spacing: .08em; }
.rsd-license-card .rsd-flip-toggle { --bs-btn-bg: rgba(255,255,255,.92); --bs-btn-border-color: transparent; --bs-btn-color: var(--rsd-navy-900); --bs-btn-hover-bg: var(--rsd-surface); --bs-btn-hover-color: var(--rsd-navy-900); }

/* ---- 3D eğilme (data-tilt) ----
   site.js işaretçinin konumunu iki açıya çevirip --rsd-tilt-x/y olarak, ışık yansımasının yerini
   --rsd-glare-x/y olarak yazar (CSSOM; satır içi style="" değil, CSP'ye takılmaz). Dönüşüm TEMELDE de
   tanımlı (0deg): eğilme başladığı an yeni bir yığın bağlamı açılıp katmanlar zıplamasın.
   Hareket azaltma tercihinde betik hiç başlamaz; açılar 0'da kalır. */
.rsd-tilt {
  transform: perspective(1100px) rotateX(var(--rsd-tilt-x, 0deg)) rotateY(var(--rsd-tilt-y, 0deg));
  transition: transform .45s cubic-bezier(.2,.8,.2,1);
}
/* Fare hareket ederken kısa geçiş: kart işaretçiyi gecikmeden izlesin; bırakınca yavaşça yerine döner */
.rsd-tilt.is-tilting { transition: transform .08s linear; }

/* Lisans kartı ve giriş kartının kimlik yüzü: fare neredeyse parlama orada */
.rsd-license-card::after,
.rsd-login-id::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(circle at var(--rsd-glare-x, 25%) var(--rsd-glare-y, 15%), rgba(255,255,255,.22), transparent 55%);
  opacity: .55; transition: opacity .3s;
}
.rsd-tilt.is-tilting .rsd-license-card::after,
.rsd-tilt.is-tilting .rsd-login-id::after { opacity: 1; }

/* ---- Giriş sahnesi: kartın durduğu mekân (ızgara zemin + yavaş kayan ışık) ---- */
.rsd-auth--scene {
  position: relative; overflow: hidden;
  background:
    radial-gradient(1100px 600px at 8% -10%, rgba(38,158,211,.38), transparent 60%),
    radial-gradient(900px 520px at 108% 108%, rgba(245,123,60,.30), transparent 60%),
    radial-gradient(700px 400px at 62% 42%, rgba(247,206,52,.12), transparent 60%),
    linear-gradient(160deg, var(--rsd-navy-950) 0%, var(--rsd-navy-900) 45%, var(--rsd-navy-800) 100%);
}
.rsd-auth--scene::before {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background-image:
    linear-gradient(rgba(255,255,255,.045) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.045) 1px, transparent 1px);
  background-size: 42px 42px;
  -webkit-mask-image: radial-gradient(ellipse at center, black 30%, transparent 75%);
  mask-image: radial-gradient(ellipse at center, black 30%, transparent 75%);
}
.rsd-auth--scene::after {
  content: ""; position: absolute; width: 60vw; height: 60vw; left: 20%; top: 10%; pointer-events: none;
  background: radial-gradient(circle, rgba(var(--rsd-primary-rgb), .22), transparent 60%);
  filter: blur(40px);
  animation: rsd-aurora 16s ease-in-out infinite alternate;
}
@keyframes rsd-aurora { from { transform: translate(-10%, -8%) scale(1); } to { transform: translate(14%, 12%) scale(1.15); } }
.rsd-auth--scene > * { position: relative; z-index: 1; }

/* ---- Giriş kartı = 3D lisans kartı ----
   Ön yüz 38/62: solda kartın baskısı (çip, ürün, belgenin özellikleri), sağda form. Yazının geçtiği her
   yer beyaz yüzeyde; lacivert yüz yalnız kimliği taşır. Metin rengi orada en az %85 beyaz: gradyanın en
   açık noktası (primary-hover) üstünde 5.7. */
.rsd-login-card {
  display: grid; grid-template-columns: 38fr 62fr;
  min-height: 328px;
  background: var(--rsd-surface); color: var(--rsd-text);
  border-radius: var(--rsd-r-xl); overflow: hidden;
  box-shadow: var(--rsd-elev-3);
}
.rsd-login-card--back { grid-template-columns: 1fr; grid-template-rows: auto 1fr; }

.rsd-login-id {
  position: relative; overflow: hidden;
  display: flex; flex-direction: column; gap: .2rem;
  padding: 1.5rem 1.2rem 1.1rem;
  color: var(--rsd-surface);
  background: linear-gradient(155deg, var(--rsd-navy-900) 0%, var(--rsd-navy-800) 35%, var(--rsd-primary-hover) 100%);
}
/* 3E şeridi kimlik panelinin ALT kenarında (üstte kartın kenarına yapışık, kopuk duruyordu) */
.rsd-login-id::before { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 4px; background: var(--rsd-tricolor); }
.rsd-chip {
  position: relative; display: block;
  width: 42px; height: 32px; margin-bottom: .8rem;
  border-radius: var(--rsd-r-sm);
  background: linear-gradient(135deg, var(--rsd-brand-1) 0%, var(--rsd-warning-border) 100%);
  box-shadow: inset 0 0 0 1px rgba(0,0,0,.2), 0 2px 6px -2px rgba(0,0,0,.5);
}
.rsd-chip::before { content: ""; position: absolute; inset: 10px 0; border-block: 1px solid rgba(0,0,0,.28); }
.rsd-chip::after  { content: ""; position: absolute; inset: 0 15px; border-inline: 1px solid rgba(0,0,0,.28); }
.rsd-login-eyebrow { font-size: var(--rsd-fs-xs); letter-spacing: .12em; text-transform: uppercase; color: rgba(255,255,255,.88); }
.rsd-login-doc { font-size: var(--rsd-fs-lg); font-weight: var(--rsd-fw-bold); line-height: 1.2; }
.rsd-login-traits { list-style: none; padding: 0; margin: .9rem 0 0; display: grid; gap: .3rem; font-size: var(--rsd-fs-xs); color: rgba(255,255,255,.9); }
/* Asılı girinti: iki satıra taşan madde noktanın hizasından değil metnin hizasından devam eder */
.rsd-login-traits li { display: flex; align-items: flex-start; gap: .5rem; }
.rsd-login-traits li::before {
  content: ""; flex-shrink: 0; width: 6px; height: 6px; margin-top: .45em;
  border-radius: 50%; background: var(--rsd-brand-1);
}
/* Dekoratif seri numarası (aria-hidden): kartın bir lisans belgesi olduğunu söyleyen baskı */
.rsd-login-serial {
  margin-top: auto; padding-top: 1rem;
  font-family: var(--bs-font-monospace); font-size: var(--rsd-fs-xs); letter-spacing: .12em;
  color: rgba(255,255,255,.75); text-shadow: 0 1px 0 rgba(0,0,0,.3); white-space: nowrap;
}
/* Arka yüz: gerçek kartın arkasındaki manyetik şerit */
.rsd-login-stripe { height: 44px; margin-top: 1.1rem; background: linear-gradient(180deg, var(--rsd-navy-950), var(--rsd-navy-900)); }

.rsd-login-form { display: flex; flex-direction: column; padding: 1.5rem 1.6rem 1.1rem; min-width: 0; }
.rsd-login-links {
  display: flex; justify-content: space-between; align-items: center; gap: .5rem;
  margin-top: auto; padding-top: .9rem; font-size: var(--rsd-fs-sm);
}
.rsd-login-links .btn-link {
  display: inline-flex; align-items: center; gap: .35rem;
  padding: 0; min-height: var(--rsd-hit); font-size: inherit; text-decoration: none;
}
.rsd-login-links .btn-link:hover { text-decoration: underline; }

/* Sarı giriş düğmesi: kartın tek vurgusu */
.rsd-btn-sign {
  --bs-btn-bg: var(--rsd-brand-1);
  --bs-btn-border-color: var(--rsd-brand-1);
  --bs-btn-color: var(--rsd-navy-900);
  --bs-btn-hover-bg: var(--rsd-brand-1-hover);
  --bs-btn-hover-border-color: var(--rsd-brand-1-hover);
  --bs-btn-hover-color: var(--rsd-navy-900);
  --bs-btn-active-bg: var(--rsd-brand-1-active);
  --bs-btn-active-border-color: var(--rsd-brand-1-active);
  --bs-btn-active-color: var(--rsd-navy-900);
  --bs-btn-disabled-bg: var(--rsd-brand-1);
  --bs-btn-disabled-border-color: var(--rsd-brand-1);
  --bs-btn-disabled-color: var(--rsd-navy-900);
  font-weight: var(--rsd-fw-semibold);
  box-shadow: 0 8px 18px -10px rgba(214,170,15,.9);
}
/* Parolayı göster düğmesi girdiyle aynı sınırı taşır: iki parça tek denetim gibi okunur */
.rsd-reveal { --bs-btn-border-color: var(--rsd-border-input); --bs-btn-color: var(--rsd-text-muted); }

/* Dar ekranda tek sütun: kimlik yüzü ince bir başlık şeridine döner, özellik listesi ve seri gizlenir */
@media (max-width: 575.98px) {
  .rsd-login-card { grid-template-columns: 1fr; min-height: 0; }
  .rsd-login-id { flex-direction: row; align-items: center; gap: .75rem; padding: 1.1rem 1.2rem .9rem; }
  .rsd-login-id .rsd-chip { margin: 0; width: 34px; height: 26px; }
  .rsd-login-id .rsd-chip::before { inset: 8px 0; }
  .rsd-login-id .rsd-chip::after { inset: 0 12px; }
  .rsd-login-traits, .rsd-login-serial { display: none; }
  .rsd-login-form { padding: 1.2rem 1.2rem 1rem; }
}

/* ---- DWA robotu (wwwroot/lib/dwa-robot) ----
   Bileşenin görünüşü ve hareketleri kendi gölge DOM stilinde; burada yalnız YERİ var.
   Uçmuyorken (dar ekran, az hareket tercihi) kartın üst kenarına konar: ayakları kartın ARKASINDA (kart
   z-index 1, robot 0). Uçarken ya da tutulmuşken konumunu bileşen yazar, kartın önünde durur. */
.rsd-auth-body { position: relative; }
.rsd-auth-body > :not(.rsd-dwa) { position: relative; z-index: 1; }
dwa-robot.rsd-dwa {
  position: absolute; z-index: 0; right: 1.25rem; bottom: calc(100% - 47px);
  /* 132 px: göğüsteki DWA yazısı hâlâ okunur (118 px'te 6-7 px'e düşüyordu), kartı da ezmez */
  width: 132px;
  filter: drop-shadow(0 14px 16px rgba(0,0,0,.35));
}
dwa-robot.rsd-dwa[flying], dwa-robot.rsd-dwa[dragging] { left: 0; top: 0; right: auto; bottom: auto; z-index: 3; }
/* Karşı yana giden yol yoksa kartın ARKASINDAN geçer */
dwa-robot.rsd-dwa[behind]:not([dragging]) { z-index: 0; }
@media (max-width: 575.98px) {
  /* Dar ekranda marka alt yazısının ("3E Endüstriyel Mühendislik") ucuna değmesin: küçük ve kenarda */
  dwa-robot.rsd-dwa { width: 76px; right: .15rem; bottom: calc(100% - 27px); }
}

/* ---- Durum kartı (hata sayfaları) ---- */
/* width:100%: .rsd-main flex sütunu; otomatik yan boşluklu öğe içeriği kadar daralır ve uzun iz numarası dar
   telefonda taşardı. İz numarası da her yerden bölünebilir. */
.rsd-status { width: 100%; max-width: 520px; margin: 3rem auto; text-align: center; }
.rsd-status code { overflow-wrap: anywhere; }
.rsd-status-code {
  font-size: 3rem; font-weight: var(--rsd-fw-bold); line-height: 1;
  color: var(--rsd-border-input); margin-bottom: .5rem;
}
.rsd-status-title { font-size: var(--rsd-fs-xl); font-weight: var(--rsd-fw-bold); }

/* ---- Hareket azaltma ----
   Kullanıcı "az hareket" dediyse her animasyon ve geçiş durur; tek tek seçici saymak yerine genel kural,
   böylece sonradan eklenen bileşen (modal, toast, 992 altındaki offcanvas menünün kayması) kendiliğinden kapsanır. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  .rsd-firm-card:hover { transform: none; }
}

/* Sabit genişlik yardımcıları — CSP (style-src 'self') altında satır içi style="" yok; sütun genişlikleri buradan */
.rsd-w-130 { width: 130px; }
.rsd-w-140 { width: 140px; }
.rsd-mw-90 { max-width: 90px; }
.rsd-mw-170 { max-width: 170px; }
.rsd-mw-180 { max-width: 180px; }
.rsd-mw-220 { max-width: 220px; }
.rsd-mw-420 { max-width: 420px; }
/* Flex öğesi form denetimi (Licenses/Detail atama select'i) en uzun seçeneği kadar genişlemesin: min-width:auto
   dar ekranda kartı taşırıyordu. Sarmalayıcıya overflow-hidden verilseydi odak halkası kırpılırdı. */
.rsd-min-w-0 { min-width: 0; }
/* Bölünemeyen uzun metin (e-posta) dar ekranda her yerden kırılır; min-content'i de küçülttüğü için flex öğesi taşmaz */
.rsd-break-anywhere { overflow-wrap: anywhere; }
.rsd-catalog-code { font-size: var(--rsd-fs-xs); }

/* Ziyaretçinin kendi saati (site.js rsdTime): ana saatin yanındaki soluk ek. Rengi ve boyu Bootstrap'in
   .text-muted/.small sınıflarından gelir (ikisi de jetonlu) — buradaki tek iş ekin ana saatten KOPMAMASI:
   dar bir izgara hücresinde "· sende" satır başına düşüp ne olduğu anlaşılmaz bir parça hâline geliyordu. */
.rsd-time-mine { white-space: nowrap; }
