/* ============================================================
   Müzik Okulu Yönetim Sistemi — app.css
   Kimlik: bordo (--brand) + pirinç (--brass). İki tema: "Ferah Bordo" (açık,
   varsayılan) ve "Gece Bordo" (koyu, 14 Eylül 2026).
   Tema İŞLETİM SİSTEMİNDEN OKUNMAZ: <html data-theme="acik|koyu"> sunucuda
   kullanıcının kayıtlı tercihiyle (users.tema) basılır. Eskiden
   prefers-color-scheme paneli kullanıcı istemeden karartıyordu — bu yüzden
   koyu tema YALNIZ [data-theme="koyu"] ile açılır. Yeni renk DAİMA aşağıdaki
   token'lara bağlanır; kural gövdesine sabit hex yazılmaz.
   ============================================================ */

:root{
  color-scheme:light;                       /* ZORUNLU: native tarih/select kontrolleri açık çizilsin */
  /* Nötr */
  --bg:#f5f6f8; --surface:#ffffff; --surface-2:#edeff3; --inset:#f8f9fb;
  --border:#e3e6eb; --border-input:#878e9b; /* form kenarı — WCAG 1.4.11 (3.30:1) */
  --text:#23202a; --muted:#5d5866; --faint:#6e6878;
  /* Kimlik */
  --brand:#8c3552; --brand-2:#a84a6c;
  --brand-ink:#6e1e3c;                      /* logo / yazdırma föyü */
  --brand-soft:#f7eef2;                     /* aktif nav / seçili satır */
  --brass:#b07f2e;                          /* yalnız DEKOR */
  --brass-ink:#79571a;                      /* METİN (6.58:1) */
  --primary:#8c3552; --primary-fg:#ffffff;
  /* Kenar çubuğu — AÇIK */
  --sidebar-bg:#ffffff; --sidebar-text:#3a3542; --sidebar-muted:#6f6979;
  --sidebar-active:#f7eef2; --sidebar-active-fg:#8c3552;
  /* Durum */
  --ok:#1f7a4d;   --ok-bg:#e8f5ee;
  --warn:#8f5510; --warn-bg:#fdf1de;
  --crit:#b3261e; --crit-bg:#fdeceb;
  --info:#2f5d94; --info-bg:#e9f1fa;
  /* Slot renkleri (Faz 4'te kullanılacak; bileşen CSS'i henüz yok).
     ⚠️ FAZ 4 İÇİN BAĞLAYICI — WCAG 1.4.1: renk TEK ayırt edici olamaz.
     (a) ZORUNLU: her slot metinsel bir işaret taşır — yapıldı "✓", yapılmadı "✕",
         boş "·" — ve durum ayrıca title + aria-label ile yazılır
         ("12 Eylül 14:00 — yapıldı"). Renk yalnız DESTEKLEYİCİDİR.
         (a) yapılmadan .slot-strip yazılmayacak: kırmızı-yeşil renk körlüğü
         erkeklerde ~%8, öğretmen paneli bu ayrımın üstüne kuruluyor.
     (b) Kenarlıklar 3:1'e çekildi (WCAG 1.4.11) — eski değerler 1.29–1.75:1 idi,
         slotun kendisi kart üstünde seçilmiyordu.
     (c) --slot-no-bg koyulaştırıldı: eski #fdeae8 ile --slot-ok-bg arasındaki oran
         1.006:1 idi, yani gri tonda (renk körlüğü / siyah-beyaz baskı) BİREBİR AYNI.
         Yeni değerle 1.17:1'e çıkıyor. (c) tek başına yeterli DEĞİL — (a) şart. */
  --slot-ok-bg:#dcf3e6;   --slot-ok-fg:#14603c;   --slot-ok-bd:#49a676;   /* bd 3.00:1 */
  --slot-no-bg:#fad4d0;   --slot-no-fg:#9c2820;   --slot-no-bd:#e67265;   /* fg 5.62:1 · bd 3.02:1 */
  --slot-idle-bg:#f1f3f7; --slot-idle-fg:#5d5866; --slot-idle-bd:#8695b0; /* bd 3.03:1 */
  /* Doku */
  /* Odak halkası: eski rgba(140,53,82,.28) beyaz üstünde ~1.3:1 idi — pratikte
     görünmüyordu. .45'e çıkarıldı VE aşağıda :focus-visible outline'ı korundu
     (eskiden `outline:none` global outline'ı iptal edip yerine bu halkayı koyuyordu,
     yani klavye kullanıcısına neredeyse hiçbir odak göstergesi kalmıyordu). */
  --ring:color-mix(in srgb,var(--brand) 45%,transparent);
  --scrim:rgba(24,22,30,.42);               /* mobil menü perdesi */
  --shadow:0 1px 2px rgba(24,22,30,.04),0 6px 18px rgba(24,22,30,.05);
  --shadow-lg:0 10px 40px rgba(24,22,30,.10);
  --radius:12px; --radius-sm:8px;
  --font-display:"Iowan Old Style","Palatino Linotype",Palatino,"Book Antiqua",Georgia,serif;
  --font-body:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --font-mono:"SFMono-Regular","Cascadia Code",Consolas,"Roboto Mono",ui-monospace,monospace;
}

/* ---------- KOYU TEMA ("Gece Bordo") ----------
   Yalnız ekranda: yazdırma her zaman açık tema tokenlarıyla basılır (@media screen).
   Kimlik rengi koyu zeminde okunabilsin diye AÇILDI (#e08aa8, zemine 6.9:1); bu yüzden
   birincil düğmenin yazısı beyaz değil KOYU (--primary-fg) — açık pembe üstünde beyaz 2.6:1 kalırdı.
   Durum renkleri (ok/warn/crit/info) metin olarak koyu yüzeyde ≥4.5:1, zemin tonları düşük doygun. */
@media screen{
  :root[data-theme="koyu"]{
    color-scheme:dark;
    --bg:#121117; --surface:#1b1a21; --surface-2:#27252e; --inset:#17161c;
    --border:#302e38; --border-input:#77727f;
    --text:#ece9f1; --muted:#b6b0c0; --faint:#9b95a6;
    --brand:#e08aa8; --brand-2:#eba3bc; --brand-ink:#f2bdd0; --brand-soft:#35202b;
    --brass:#c89b4d; --brass-ink:#e2bb72;
    --primary:#e08aa8; --primary-fg:#24101a;
    --sidebar-bg:#17161c; --sidebar-text:#dcd8e3; --sidebar-muted:#a09aab;
    --sidebar-active:#35202b; --sidebar-active-fg:#f0b0c6;
    --ok:#66c795;   --ok-bg:#15301f;
    --warn:#e9ab5c; --warn-bg:#33250f;
    --crit:#f2877b; --crit-bg:#3b1b18;
    --info:#86b6ec; --info-bg:#172638;
    --slot-ok-bg:#163826;   --slot-ok-fg:#9ce4bd;   --slot-ok-bd:#4aa877;
    --slot-no-bg:#3f1d1b;   --slot-no-fg:#f7aaa1;   --slot-no-bd:#cf6457;
    --slot-idle-bg:#23222a; --slot-idle-fg:#c1bcca; --slot-idle-bd:#737e94;
    --ring:color-mix(in srgb,var(--brand) 50%,transparent);
    --scrim:rgba(0,0,0,.6);
    --shadow:0 1px 2px rgba(0,0,0,.35),0 6px 18px rgba(0,0,0,.28);
    --shadow-lg:0 10px 40px rgba(0,0,0,.5);
  }
}
/* Tema değişirken ani sıçrama olmasın (yalnız düğmeyle çevrilince — ilk yüklemede geçiş YOK). */
html.tema-gecis,html.tema-gecis *{transition:background-color .2s ease,border-color .2s ease,color .2s ease!important}
.tema-btn__ico{font-size:1rem;line-height:1}
@media (max-width:560px){.tema-btn__txt{display:none}}

*{box-sizing:border-box}
/* hidden özniteliği her zaman kazanır: .pill/.btn gibi display veren sınıflar onu ezmesin. */
[hidden]{display:none!important}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--text);font-family:var(--font-body);
  font-size:15px;line-height:1.55;-webkit-font-smoothing:antialiased}
a{color:var(--brand);text-decoration:none}
h1,h2,h3{margin:0}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:4px}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- Layout ---------- */
.app{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh}
.main{display:flex;flex-direction:column;min-width:0}
.content{padding:clamp(1.3rem,3.5vw,2.5rem);max-width:1240px;width:100%}
/* FORM ÖĞELERİ KABINI AŞMASIN (17 Eylül 2026).
   `input[type=file]` tarayıcının kendi bileşenidir ve ~300px "doğal" genişlik dayatır;
   320px'lik telefonda Toplu İçe Aktarma ekranını 26px taşırıyordu (ölçüldü). max-width
   hepsine güvenlik ağı olarak verilir — kabından geniş bir form öğesi hiçbir ekranda
   doğru değildir. Dosya kutusuna ayrıca width:100% gerekir, yoksa doğal genişlikte kalır. */
input,select,textarea{max-width:100%}
input[type="file"]{width:100%}

/* Çok geniş ekran: 1920px'de içeriğin sağında 440px, 2560px'de 1080px ölü alan
   kalıyordu. 1600px'in ÜSTÜNDE tavanı yükselt ve içeriği ortala; bunun altındaki
   masaüstü görünümü bilerek DEĞİŞMİYOR (müşteri alışkanlığı bozulmasın). */
@media (min-width:1600px){.content{max-width:1440px;margin-inline:auto}}

/* ---------- Sidebar ---------- */
.sidebar{background:var(--sidebar-bg);color:var(--sidebar-text);display:flex;flex-direction:column;
  padding:1.1rem .8rem;position:sticky;top:0;height:100vh;border-right:1px solid var(--border)}
/* iOS Safari'de 100vh adres çubuğunun ALTINA taşar; dvh destekleyen tarayıcıda
   gerçek görünür yüksekliği kullan (desteklemeyen yukarıdaki 100vh'de kalır). */
@supports (height:100dvh){.sidebar{height:100dvh}}
.brand{display:flex;align-items:center;gap:.6rem;padding:.3rem .5rem 1.1rem;border-bottom:1px solid var(--border);margin-bottom:.8rem}
.brand__mark{font-size:1.5rem;line-height:1}
/* Okul logosu (Okul Ayarları): açık/koyu tema için iki dosya olabilir. Yükseklik sabit, genişlik
   oranla; img etiketinde yüklenen dosyanın gerçek ölçüsü yazılır. */
.brand__logo{display:block;height:44px;width:auto;max-width:100%}
/* Tema anahtarı img.* ile: giriş kartındaki .auth-card__logo{display:block} (dosyada SONRA gelir,
   aynı özgüllük) gizli olanı da gösteriyordu — iki logo yan yana çıkıyordu. */
img.brand__logo--koyu{display:none}
@media screen{
  :root[data-theme="koyu"] img.brand__logo--acik{display:none}
  :root[data-theme="koyu"] img.brand__logo--koyu{display:block}
}
/* Tek logo iki temada da görünür; koyu temada koyu renkli bir logo okunsun diye açık zemin. */
@media screen{
  :root[data-theme="koyu"] img.brand__logo--tek{background:#fff;border-radius:8px;padding:4px 6px}
}
.brand__name{font-family:var(--font-display);font-size:1.12rem;font-weight:600;letter-spacing:.01em}
.nav{display:flex;flex-direction:column;gap:.12rem;flex:1;overflow-y:auto}
.nav__group{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--sidebar-muted);padding:1rem .7rem .35rem}
.nav__item{display:flex;align-items:center;gap:.6rem;padding:.55rem .7rem;border-radius:var(--radius-sm);
  color:var(--sidebar-text);font-size:.92rem;font-weight:500;transition:background .12s}
.nav__ico{width:1.2rem;text-align:center;opacity:.85}
/* Hover: BEYAZ kenar çubuğunda --surface-2 (#edeff3) = 1.15:1, yani görünmüyordu.
   Zemin bordo tarafa çekildi (1.25:1) ve tek başına zemine güvenilmesin diye
   3px'lik bir sol şerit eklendi (3.02:1) — geri bildirim artık algılanabilir. */
a.nav__item:hover{background:color-mix(in srgb,var(--brand) 14%,var(--surface));
  box-shadow:inset 3px 0 0 color-mix(in srgb,var(--brand) 60%,transparent)}
.nav__item.is-active{background:var(--sidebar-active);color:var(--sidebar-active-fg);font-weight:600;box-shadow:inset 3px 0 0 var(--brass)}
/* Aktif öğenin pirinç şeridi hover'da da korunur (özgüllük 0,3,0 > 0,2,1) */
.nav__item.is-active:hover{box-shadow:inset 3px 0 0 var(--brass)}
.nav__item.is-soon{color:var(--sidebar-muted);cursor:default;justify-content:flex-start}
.nav__item.is-soon em{margin-left:auto;font-style:normal;font-size:.62rem;font-family:var(--font-mono);
  background:var(--surface-2);color:var(--sidebar-muted);padding:.1rem .4rem;border-radius:20px}
.sidebar__foot{font-size:.7rem;color:var(--sidebar-muted);
  padding:.7rem .7rem 0;border-top:1px solid var(--border);margin-top:.6rem}
.sidebar__surum{display:block;margin-top:.35rem;font-family:var(--font-mono);font-size:.62rem}

/* ---------- Geliştirici imzası + teknik destek (partials/_imza.php) ---------- */
.imza{display:flex;flex-direction:column;gap:.3rem;font-size:.72rem;line-height:1.35;color:var(--faint)}
.imza--orta{align-items:center;text-align:center;margin-top:1rem}
.imza__gelistiren{display:inline-flex;align-items:center;gap:.4rem}
.imza__gelistiren strong{font-weight:600;color:var(--muted)}
.imza__logo{width:18px;height:18px;border-radius:5px;flex:none}
.imza__destek{color:var(--brand);font-weight:600;text-decoration:none}
.imza__destek:hover{text-decoration:underline}
.error-wrap .imza{margin-top:2rem}
/* "Uygulama olarak yükle" kutusu — ek-pwa.js açar, varsayılanı gizli.
   Kenar çubuğunun dibinde, gezinme öğelerinden bir çizgiyle ayrılmış: ömürde bir kez
   kullanılacak bir düğme günlük işin arasında yer kaplamamalı. */
.sidebar__kur{margin-top:auto;padding:.7rem .2rem 0;border-top:1px solid var(--border)}
.sidebar__kur[hidden]{display:none}
.sidebar__kur-ipucu{margin:.5rem .3rem 0;font-size:.72rem;line-height:1.45;color:var(--sidebar-muted)}
.sidebar__kur-ipucu[hidden]{display:none}

/* ---------- Topbar ---------- */
.topbar{display:flex;align-items:center;gap:.8rem;padding:.7rem clamp(1rem,3vw,2rem);
  background:var(--surface);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:20}
.topbar__toggle{display:none;background:none;border:1px solid var(--border-input);border-radius:8px;
  color:var(--text);font-size:1.1rem;width:2.2rem;height:2.2rem;cursor:pointer}
.topbar__title{font-family:var(--font-display);font-size:1.15rem;font-weight:600}
.topbar__spacer{flex:1}
.userbox{display:flex;align-items:center;gap:.8rem}
.userbox__meta{display:flex;flex-direction:column;align-items:flex-end;line-height:1.2}
.userbox__name{font-weight:600;font-size:.9rem}
.userbox__logout{margin:0}

/* rol rozetleri */
.rol{font-family:var(--font-mono);font-size:.64rem;letter-spacing:.04em;text-transform:uppercase;
  padding:.12rem .45rem;border-radius:20px;font-weight:600;border:1px solid transparent}
.rol--superadmin{color:var(--brand);background:color-mix(in srgb,var(--brand) 12%,transparent);border-color:color-mix(in srgb,var(--brand) 30%,transparent)}
.rol--admin{color:var(--brass-ink);background:color-mix(in srgb,var(--brass) 14%,transparent);border-color:color-mix(in srgb,var(--brass) 32%,transparent)}
.rol--ogretmen{color:var(--info);background:var(--info-bg);border-color:color-mix(in srgb,var(--info) 30%,transparent)}

/* ---------- Page head ---------- */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:1rem;flex-wrap:wrap;margin-bottom:1.4rem}
.page-title{font-family:var(--font-display);font-size:clamp(1.4rem,3vw,1.8rem);font-weight:600;letter-spacing:-.01em}
.page-sub{color:var(--muted);font-size:.9rem;margin-top:.15rem}
.muted{color:var(--muted)}
.small{font-size:.85rem}

/* ---------- Tiles ---------- */
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.8rem;margin-bottom:1.4rem}
.tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem 1.1rem;box-shadow:var(--shadow)}
.tile__k{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}
.tile__v{font-family:var(--font-display);font-size:1.9rem;line-height:1.1;margin-top:.3rem;font-variant-numeric:tabular-nums}

/* ---------- Cards / grid ---------- */
.grid-2{display:grid;grid-template-columns:1fr;gap:1rem}
@media (min-width:860px){.grid-2{grid-template-columns:1fr 1fr}}
/* Liste + yan form (ör. Branşlar): listeye daha çok yer, form dar kenar sütun */
.split-list{display:grid;grid-template-columns:1fr;gap:1rem}
@media (min-width:1024px){.split-list{grid-template-columns:minmax(0,1.9fr) minmax(250px,0.9fr);align-items:start}}
.card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:1.4rem 1.6rem;box-shadow:var(--shadow)}
.card--flush{padding:0;overflow:hidden}
.card__head{margin-bottom:.8rem}
.card__title{font-family:var(--font-display);font-size:1.15rem;font-weight:600}
.form-card{max-width:860px;margin-left:auto;margin-right:auto;margin-bottom:1.1rem}

/* ---------- Timeline / roadmap ---------- */
.timeline{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.1rem}
.timeline__item{display:flex;gap:.7rem;padding:.5rem 0;border-bottom:1px solid var(--border)}
.timeline__item:last-child{border-bottom:none}
.timeline__dot{width:.55rem;height:.55rem;border-radius:50%;background:var(--brass);margin-top:.45rem;flex:none}
.timeline__act{font-family:var(--font-mono);font-size:.8rem;color:var(--brand-2);font-weight:600}
.timeline__who{color:var(--muted);font-size:.85rem;margin-left:.4rem}
.timeline__time{display:block;color:var(--faint);font-size:.75rem;font-variant-numeric:tabular-nums}
.roadmap{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem}
.roadmap li{display:flex;align-items:center;gap:.5rem;color:var(--muted);font-size:.92rem}
.roadmap li b{color:var(--text);font-family:var(--font-mono);font-size:.78rem;background:var(--inset);
  border:1px solid var(--border);border-radius:6px;padding:.05rem .4rem;flex:none}
.roadmap li.done{color:var(--text)}

/* ---------- Pills ---------- */
.pill{display:inline-flex;align-items:center;font-family:var(--font-mono);font-size:.66rem;font-weight:600;
  letter-spacing:.02em;padding:.14rem .5rem;border-radius:20px;border:1px solid transparent;white-space:nowrap}
.pill--ok{color:var(--ok);background:var(--ok-bg);border-color:color-mix(in srgb,var(--ok) 30%,transparent)}
.pill--off{color:var(--muted);background:var(--surface-2);border-color:var(--border)}
.pill--na{color:var(--brass-ink);background:color-mix(in srgb,var(--brass) 14%,transparent);border-color:color-mix(in srgb,var(--brass) 30%,transparent)}

/* ---------- Tables ---------- */
/* position:relative ZORUNLU — süs değil.
   İçerideki `.sr-only` öğeleri `position:absolute` (bkz. aşağıda). Konumlanmış bir
   ata bulamayınca ilk kapsayıcı bloğa (sayfanın kendisi) göre yerleşiyor, statik
   konumları da geniş tablonun sağ ucu olduğu için SAYFAYI oraya kadar uzatıyorlardı:
   390px'lik telefonda Ödemeler ekranı 851px genişliğe çıkıyor, kullanıcı sağa
   kaydırınca bomboş alana düşüyordu (ölçüldü: 851 → 375). `clip` görsel olarak
   gizler ama kaydırma alanı hesabından ÇIKARMAZ. Bu tek satır, tablo taşıyan tüm
   ekranlardaki yatay kaymayı bitiriyor. */
.table-wrap{overflow-x:auto;position:relative}
.table{width:100%;border-collapse:collapse;font-size:.9rem;min-width:640px}
.table th,.table td{text-align:left;padding:.7rem .9rem;border-bottom:1px solid var(--border);vertical-align:middle}
.table thead th{font-family:var(--font-mono);font-size:.68rem;letter-spacing:.05em;text-transform:uppercase;
  color:var(--faint);background:var(--inset);font-weight:600}
/* Hover td'ye taşındı: zebra kuralı (`.table--pay tbody tr:nth-child(even)`, aşağıda)
   tr üzerinde AYNI özgüllükte (0,2,2) ve dosyada SONRA geliyor — tr'de kalsaydı
   çift satırlarda hover geri bildirimi kaybolurdu. */
.table tbody tr:hover td{background:var(--surface-2)}
.table tbody tr:last-child td{border-bottom:none}
.ta-r{text-align:right}
/* .table th/td temel sol-hizasını (satır 152) yenmek için daha yüksek özgüllük */
.table th.ta-r,.table td.ta-r{text-align:right}
.ta-actions{display:flex;gap:.35rem;justify-content:flex-end;flex-wrap:wrap}
/* Tablo hücresi içindeki aksiyonlar flex-td düzenini bozmasın → normal hücre + satır-içi öğeler */
.table td.ta-actions{display:table-cell;text-align:right;white-space:nowrap;vertical-align:middle}
.table td.ta-actions > *{display:inline-flex;vertical-align:middle;margin-left:.35rem}
.table td.ta-actions > *:first-child{margin-left:0}
.inline{display:inline}

/* ---------- Buttons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;cursor:pointer;
  font-family:var(--font-body);font-size:.88rem;font-weight:600;line-height:1;padding:.6rem 1rem;
  border-radius:var(--radius-sm);border:1px solid transparent;transition:filter .12s,background .12s;text-align:center}
.btn:active{transform:translateY(1px)}
.btn--primary{background:var(--primary);color:var(--primary-fg)}
.btn--primary:hover{filter:brightness(1.08)}
/* Kenarlık --border değil --border-input: --border (#e3e6eb) beyaz kart üstünde
   1.25:1 idi, yani projedeki EN YAYGIN buton (topbar, "← Vazgeç", "Filtrele",
   ay okları, "Excel'e Aktar" — 59 kullanım) buton gibi değil düz link gibi
   görünüyordu. --border-input: beyaz 3.30:1 · --bg 3.05:1 · --inset 3.13:1 (WCAG 1.4.11).
   --border yalnız kart/tablo ayracı olarak kalır. */
.btn--ghost{background:var(--surface);color:var(--text);border-color:var(--border-input)}
.btn--ghost:hover{background:var(--inset)}
.btn--warn{background:var(--warn-bg);color:var(--warn);border-color:color-mix(in srgb,var(--warn) 30%,transparent)}
.btn--warn:hover{filter:brightness(.98)}
.btn--ok{background:var(--ok-bg);color:var(--ok);border-color:color-mix(in srgb,var(--ok) 30%,transparent)}
.btn--sm{padding:.4rem .65rem;font-size:.8rem}
.btn--block{width:100%}
/* "Kopyala" düğmesi (öğrenci detayındaki TC · tek seferlik giriş bilgisi kutusu).
   min-width: etiket "Kopyala" → "Kopyalandı" olurken satır zıplamasın; genişlik
   en uzun geri bildirim metnine göre sabitlenir.
   .is-kopyalandi app.js tarafından 2 sn takılır. Renk TEK ipucu DEĞİL — düğmenin
   metni de değişiyor (WCAG 1.4.1). Sabit hex yok: --ok üçlüsü Faz 2 paletinden. */
.btn--kopya{min-width:6.6rem}
.btn.is-kopyalandi{background:var(--ok-bg);color:var(--ok);
  border-color:color-mix(in srgb,var(--ok) 30%,transparent)}

/* ---------- Forms ---------- */
.form{display:flex;flex-direction:column;gap:.9rem}
.form-grid{display:grid;grid-template-columns:1fr;gap:.9rem}
@media (min-width:560px){.form-grid{grid-template-columns:1fr 1fr}}
.field{display:flex;flex-direction:column;gap:.35rem}
.field__label{font-size:.82rem;font-weight:600;color:var(--muted)}
.input{width:100%;padding:.6rem .7rem;font:inherit;color:var(--text);background:var(--surface);
  border:1px solid var(--border-input);border-radius:var(--radius-sm)}
/* Fare ile tıklamada yumuşak halka; klavyede AYRICA belirgin outline.
   `outline:none` yalnız :focus-visible OLMAYAN duruma bırakıldı — eskiden her
   odakta global :focus-visible outline'ını (satır ~53) iptal ediyordu. */
.input:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--ring)}
.input:focus-visible{outline:2px solid var(--brand);outline-offset:1px;border-radius:var(--radius-sm)}
select.input{appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--muted) 50%),linear-gradient(135deg,var(--muted) 50%,transparent 50%);
  background-position:calc(100% - 18px) 55%,calc(100% - 13px) 55%;background-size:5px 5px,5px 5px;background-repeat:no-repeat;padding-right:2rem}
.field--check{flex-direction:row;align-items:center;gap:.5rem}
.field--check input{width:1.05rem;height:1.05rem;accent-color:var(--brand)}
.form-actions{display:flex;gap:.6rem;margin-top:.4rem}
.form-actions--sticky{position:sticky;bottom:0;background:linear-gradient(transparent,var(--bg) 40%);padding-top:1rem;margin-top:1rem}
.hint{font-size:.82rem;color:var(--muted);background:var(--inset);border:1px solid var(--border);
  border-radius:var(--radius-sm);padding:.6rem .8rem;margin:0}

/* ---------- Flash ---------- */
.flash{padding:.7rem 1rem;border-radius:var(--radius-sm);margin-bottom:1rem;font-size:.9rem;border:1px solid transparent}
.flash--basari{color:var(--ok);background:var(--ok-bg);border-color:color-mix(in srgb,var(--ok) 30%,transparent)}
.flash--hata{color:var(--crit);background:var(--crit-bg);border-color:color-mix(in srgb,var(--crit) 30%,transparent)}
.flash--bilgi{color:var(--info);background:var(--info-bg);border-color:color-mix(in srgb,var(--info) 30%,transparent)}
.flash--uyari{color:var(--warn);background:var(--warn-bg);border-color:color-mix(in srgb,var(--warn) 30%,transparent)}

/* ---------- Callout ---------- */
.callout{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--brass);
  border-radius:var(--radius-sm);padding:.9rem 1.1rem;margin-bottom:1.2rem;font-size:.9rem;color:var(--muted);box-shadow:var(--shadow)}
.callout strong{color:var(--text)}

/* ---------- Permission matrix ---------- */
.perm-toolbar{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-bottom:1.1rem}
.perm-toolbar__spacer{flex:1}
.perm-group{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  padding:1rem 1.1rem;margin-bottom:1rem;box-shadow:var(--shadow)}
/* .perm-group--locked kaldırıldı: "Yönetim" grubu R4 ile artık tümden kilitli değil
   (kutular tek tek kilitlenir → .perm-item.is-locked). */
.perm-group__note{margin-bottom:.7rem}
.perm-item__lock{color:var(--warn)}
.perm-group__head{display:flex;align-items:center;justify-content:space-between;gap:.6rem;
  padding-bottom:.6rem;margin-bottom:.7rem;border-bottom:1px solid var(--border)}
.perm-group__title{font-family:var(--font-display);font-size:1.05rem;font-weight:600}
.perm-group__all{display:flex;align-items:center;gap:.4rem;font-size:.8rem;color:var(--muted);cursor:pointer}
.perm-group__all input{accent-color:var(--brand)}
.perm-list{display:grid;grid-template-columns:1fr;gap:.4rem}
@media (min-width:680px){.perm-list{grid-template-columns:1fr 1fr}}
.perm-item{display:flex;align-items:flex-start;gap:.6rem;padding:.6rem .7rem;border:1px solid var(--border);
  border-radius:var(--radius-sm);background:var(--inset);cursor:pointer;transition:border-color .12s,background .12s}
.perm-item input{margin-top:.15rem;width:1.05rem;height:1.05rem;accent-color:var(--brand);flex:none}
.perm-item:has(input:checked){border-color:color-mix(in srgb,var(--brand) 45%,transparent);background:color-mix(in srgb,var(--brand) 7%,var(--surface))}
/* opacity:.6 KALDIRILDI: <label> içindeki AÇIKLAMA METNİNİ de soluklaştırıyordu
   (__label 4.08:1, __key 2.29:1 = FAIL). Devre dışı olan yalnız checkbox'tır;
   WCAG 1.4.3'ün devre dışı bileşen muafiyeti etiket metnini kapsamaz — kullanıcı
   hangi iznin neden kilitli olduğunu OKUYABİLMELİ. Kilitlilik zaten
   .perm-item__lock (🔒 + gerekçe) ile işaretleniyor; renkle anlatılmıyor.
   Şimdi: __label --muted/--surface-2 = 5.97:1 · __key --faint/--surface-2 = 4.66:1. */
.perm-item.is-locked{cursor:not-allowed;background:var(--surface-2);color:var(--muted)}
/* Kilitli VE işaretli kutu (kendini kilitleme koruması: izin açık ama kapatılamaz)
   kilit görünümünü korusun — aksi halde yukarıdaki :has(input:checked) kuralı
   (0,2,1) bu kuralı (0,2,0) geçip seçili tonunu geri getirirdi. */
.perm-item.is-locked:has(input:checked){background:var(--surface-2);border-color:var(--border)}
.perm-item__body{display:flex;flex-direction:column;gap:.1rem;min-width:0}
.perm-item__label{font-size:.88rem;font-weight:500}
.perm-item__key{font-family:var(--font-mono);font-size:.7rem;color:var(--faint)}

/* ---------- Auth pages ---------- */
.auth-body{display:flex;align-items:center;justify-content:center;min-height:100vh;
  background:linear-gradient(160deg,color-mix(in srgb,var(--brand) 10%,var(--bg)),var(--bg));padding:1.2rem}
.auth-wrap{width:100%;max-width:400px}
.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:16px;
  padding:2rem 1.8rem;box-shadow:var(--shadow-lg)}
.auth-card__head{text-align:center;margin-bottom:1.4rem}
.auth-card__mark{font-size:2.4rem;display:block;margin-bottom:.4rem}
.auth-card__title--logo{margin:0 0 .5rem;display:flex;justify-content:center}
.auth-card__logo{display:block;height:64px;width:auto;max-width:100%}
.auth-card__title--logo .brand__name{align-self:center;margin-left:.6rem}
.auth-card__title{font-family:var(--font-display);font-size:1.4rem;font-weight:600}
.auth-card__sub{color:var(--muted);font-size:.9rem;margin-top:.2rem}
.auth-card__foot{text-align:center;color:var(--faint);font-size:.78rem;margin:1.2rem 0 0}

/* ---------- Error pages ---------- */
.error-body{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:1.5rem;text-align:center}
.error-wrap{max-width:420px}
.error-code{font-family:var(--font-display);font-size:4rem;font-weight:700;color:var(--brand);line-height:1}
.error-title{font-family:var(--font-display);font-size:1.4rem;font-weight:600;margin:.4rem 0 .5rem}
.error-text{color:var(--muted);margin-bottom:1.4rem}

/* ---------- M2: çipler, filtreler, sekmeler, belgeler ---------- */
.num-col{font-variant-numeric:tabular-nums}
.mono{font-family:var(--font-mono);font-size:.85em}
.link-strong{font-weight:600;color:var(--text)}
.link-strong:hover{color:var(--brand)}
/* "Ayrıldı" öğrenci satırları. opacity:.62 KALDIRILDI: tüm hücre içeriğini beyaza
   karıştırıp token'ların hesaplanmış oranlarını yok ediyordu — .muted small (kayıt
   tarihi) 2.87:1, satırdaki rozetler 2.41–2.63:1 = hepsi FAIL. Bunlar devre dışı
   kontrol değil, içinde tıklanabilir öğrenci linki olan GERÇEK VERİ.
   Sönükleştirme artık renk token'ıyla: --faint/beyaz = 5.09:1 PASS; rozetler ve
   .link-strong kendi (daha yüksek) oranlarını korur. Zemin tr'de — td'de olsaydı
   satır hover'ını (yukarıda td'ye taşındı) örterdi. */
.is-muted-row{background:var(--inset)}
.is-muted-row td{color:var(--faint)}
.is-muted-row td .muted{color:var(--faint)}
.pill--info{color:var(--info);background:var(--info-bg);border-color:color-mix(in srgb,var(--info) 30%,transparent)}

.chips{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:1rem}
/* Tıklanabilir filtre bileşeni → kenarlık --border-input (3.30:1), --border değil (1.25:1) */
.chip{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .7rem;border-radius:20px;
  border:1px solid var(--border-input);background:var(--surface);color:var(--muted);font-size:.85rem;font-weight:500}
.chip:hover{background:var(--inset);color:var(--text)}
.chip.is-active{background:var(--brand);color:var(--primary-fg);border-color:var(--brand)}
.chip__n{font-family:var(--font-mono);font-size:.7rem;background:color-mix(in srgb,var(--text) 10%,transparent);color:inherit;
  padding:.05rem .4rem;border-radius:20px}
.chip.is-active .chip__n{background:color-mix(in srgb,var(--primary-fg) 22%,transparent)}

.filters{display:flex;flex-wrap:wrap;gap:.6rem;align-items:center;margin-bottom:1.2rem}
.filters .input{width:auto;flex:0 1 auto}
.filters input[type="search"]{min-width:min(22rem,80vw)}
/* Etiketli filtre alanı: kapsayıcı SATIR kalır, her alan kendi içinde SÜTUNdur
   (etiket üstte, girdi altta). .form sınıfı kullanılamaz — o ızgara düzeni dayatıp
   filtre çubuğunu alt alta diziyor. */
.filters__f{display:flex;flex-direction:column;gap:.15rem}
.filters__f--grow{flex:1 1 16rem;min-width:12rem}
.filters__f--grow .input{width:100%;flex:1 1 auto}
.filters__f--btn{flex-direction:row;gap:.4rem;align-self:flex-end}
.filters__k{font-size:.7rem;letter-spacing:.05em;text-transform:uppercase;color:var(--faint);
  font-family:var(--font-mono)}

.tabs__nav{display:flex;flex-wrap:wrap;gap:.2rem;border-bottom:1px solid var(--border);margin-bottom:1.1rem}
.tabs__btn{background:none;border:none;border-bottom:2px solid transparent;padding:.6rem .9rem;
  font:inherit;font-weight:600;color:var(--muted);cursor:pointer}
.tabs__btn:hover{color:var(--text)}
.tabs__btn.is-active{color:var(--brand);border-bottom-color:var(--brand)}
.tabs__btn.is-soon{color:var(--faint);cursor:default;font-weight:500;font-size:.85rem}
.tabs__panel{display:none}
.tabs__panel.is-active{display:block}

.deflist{display:grid;gap:.1rem}
.deflist__row{display:grid;grid-template-columns:11rem 1fr auto;gap:.8rem;align-items:baseline;
  padding:.6rem .2rem;border-bottom:1px solid var(--border)}
.deflist__row:last-child{border-bottom:none}
.deflist__k{color:var(--muted);font-size:.85rem}
.deflist__v{color:var(--text)}
@media (max-width:560px){.deflist__row{grid-template-columns:1fr;gap:.15rem}}

.doc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));gap:.7rem;margin-bottom:.5rem}
.doc-card{display:flex;align-items:center;gap:.7rem;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--radius-sm);padding:.7rem .8rem;box-shadow:var(--shadow)}
.doc-card__ico{font-family:var(--font-mono);font-size:.62rem;font-weight:700;color:var(--brand);
  background:color-mix(in srgb,var(--brand) 10%,transparent);border-radius:6px;padding:.5rem .35rem;min-width:2.6rem;text-align:center}
.doc-card__body{flex:1;min-width:0}
.doc-card__name{font-weight:600;font-size:.88rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.doc-card__meta{color:var(--faint);font-size:.75rem}
.doc-card__actions{display:flex;gap:.3rem;flex:none}
/* Fotoğraf önizlemesi: .doc-card__ico ile AYNI kutu ölçüsünü tutar ki resimli ve PDF'li
   kartlar aynı hizada dursun. Resim /belge/{id} korumalı uç noktasından gelir. */
.doc-card__onizleme{flex:none;display:block;width:3.4rem;height:3.4rem;border-radius:6px;overflow:hidden;
  border:1px solid var(--border);background:var(--inset)}
.doc-card__onizleme img{width:100%;height:100%;object-fit:cover;display:block}
.doc-card__onizleme:hover{border-color:var(--brand)}

.panel-collapse{margin-bottom:1.2rem}
.form-section{font-size:.8rem;letter-spacing:.06em;text-transform:uppercase;color:var(--brass-ink);
  font-family:var(--font-mono);margin:1.4rem 0 .3rem;font-weight:600}
.form-section:first-child{margin-top:0}
.form-card--wide{max-width:1100px}
textarea.input{resize:vertical;font-family:inherit}
input.input:disabled{background:var(--surface-2);color:var(--muted)}

/* ---------- M3: ödeme tablosu + dashboard ---------- */
.period-bar{display:flex;align-items:center;gap:.9rem;justify-content:center;margin-bottom:1.1rem}
.period-bar__label{font-family:var(--font-display);font-size:1.2rem;font-weight:600;min-width:10rem;text-align:center}

.odeme-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:1.2rem;align-items:start}
@media (min-width:1080px){.odeme-layout{grid-template-columns:minmax(0,1fr) 350px}}
.odeme-dash{display:flex;flex-direction:column;gap:.9rem;position:sticky;top:4.4rem}

/* min-width 720 → 820: 17 Eylül 2026'da Yöntem sütunu eklendi. Dar ekranda tablo
   `.table-wrap` içinde yatay kayar; sayfa taşmaz (bkz. .table-wrap{position:relative}). */
.table--pay{table-layout:fixed;min-width:820px}
.table--pay td,.table--pay th{padding:.55rem .7rem}
.table--pay .pay-ad{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pay-w-ad{width:20%}
/* ÖĞRENCİ ADI SOLA YAPIŞIK (17 Eylül 2026, dar ekran).
   Ödemeler bir VERİ GİRİŞ ekranı: telefonda tabloyu yana kaydırıp tutar yazarken
   satırın kime ait olduğu görünmezse yanlış öğrenciye para işlenir. Aynı desen
   Öğretmen Özeti'nde zaten var (ek-raporlar.css:73). Yalnız dar ekranda açılır —
   geniş ekranda tablo zaten sığıyor ve yapışkan sütun gölge/çakışma getirir.
   Seçim kutusu sütunu da yapışır, yoksa adın altından kayar. */
@media (max-width:1023px){
  .table--pay thead th.pay-check,.table--pay tbody td.pay-check{position:sticky;left:0;z-index:2;background:var(--inset)}
  .table--pay tbody td.pay-check{background:var(--surface)}
  .table--pay thead th.pay-w-ad{position:sticky;left:2.4rem;z-index:2;background:var(--inset)}
  .table--pay tbody td.pay-ad{position:sticky;left:2.4rem;z-index:1;background:var(--surface)}
  /* Zebra ve hover satırlarında yapışkan hücre de aynı zemini alsın, yoksa
     kayarken altından öteki hücreler geçerken şerit "delik" gibi görünür. */
  .table--pay tbody tr:nth-child(even) td.pay-ad,
  .table--pay tbody tr:nth-child(even) td.pay-check{background:color-mix(in srgb,var(--surface-2) 50%,var(--surface))}
  .table--pay tbody tr:hover td.pay-ad,
  .table--pay tbody tr:hover td.pay-check{background:var(--surface-2)}
  /* Yapışkan sütunun sağ kenarına ince bir ayraç: kaydırma olduğu anlaşılsın. */
  .table--pay tbody td.pay-ad::after,.table--pay thead th.pay-w-ad::after{
    content:"";position:absolute;top:0;right:0;bottom:0;width:1px;background:var(--border)}
  /* Düzenleme yetkisi olmayanda seçim kutusu sütunu hiç basılmaz; ad o zaman ilk
     hücredir ve 2.4rem içeri kaymamalıdır (yoksa soldan bir şerit boş kalır). */
  .table--pay thead th.pay-w-ad:first-child,.table--pay tbody td.pay-ad:first-child{left:0}
}
.pay-w-tc{width:13%}
.pay-w-amt{width:16%}
.pay-w-date{width:17%}
/* Yöntem sütunu: en uzun etiket "Kredi Kartı". table-layout:fixed olduğu için
   yüzdeler toplamı 100'ü aşarsa tarayıcı orantılı küçültür, bozulma olmaz. */
.pay-w-yontem{width:14%}
.pay-yontem{width:100%;max-width:100%;font:inherit;font-size:.85rem;padding:.3rem .4rem;
  border:1px solid var(--border-input);border-radius:8px;background:var(--surface);color:var(--text)}
/* Seçilmemiş yöntem sessiz durur: dolu olanlar göz taramasında öne çıksın.
   `:has()` kullanıldı ki kullanıcı seçim yapar yapmaz renk düzelsin — `data-*`
   özniteliğiyle yapılsaydı JS'in de güncellemesi gerekirdi, satır içi kaydetme ise
   bilerek alan-adı bilmeyen jenerik bir kod (app.js:296). */
.pay-yontem:has(option[value=""]:checked){color:var(--muted)}
.pay-check{width:2.4rem;text-align:center}
.pay-check input,.table--pay input[type="checkbox"]{accent-color:var(--brand)}
/* Hücreyi dolduran, kenara hizalı input'lar (yatay padding YOK → sayı başlık/toplamla hizalanır).
   DİNLENME DURUMUNDA GÖRÜNÜR KENARLIK: eskiden `border:1px solid transparent` +
   `background:transparent` idi (beyaz hücreye karşı 1.00:1) ve sınır YALNIZ :hover'da
   beliriyordu — klavye kullanıcısı ve dokunmatik olmayan fare kullanıcısı nereye
   yazacağını hover etmeden göremiyordu. WCAG 1.4.11 metin girişi sınırı için 3:1 şart.
   Panelin en çok veri girilen ekranı burası (aylık ödeme girişi).
   Şeffaf kenarlık zaten 1px yer tutuyordu → renklendirmek hizayı BOZMAZ. */
.pay-input{width:100%;box-sizing:border-box;border:1px solid var(--border-input);background:var(--surface);border-radius:6px;padding:.42rem 0;font:inherit;color:var(--text)}
.pay-input:hover{border-color:var(--brand)}
.pay-input:focus{outline:none;border-color:var(--brand);background:var(--surface);box-shadow:0 0 0 2px var(--ring)}
.pay-input:focus-visible{outline:2px solid var(--brand);outline-offset:1px;border-radius:6px}
.pay-num{text-align:left;font-variant-numeric:tabular-nums}
.pay-date{color:var(--muted)}
.pay-total td{font-weight:600;border-top:2px solid var(--border);background:var(--inset)}
.pay-actions{display:flex;align-items:center;gap:.9rem;margin-top:.9rem;flex-wrap:wrap}
.pay-datebulk{display:inline-flex;align-items:center;gap:.5rem;flex-wrap:wrap;padding-left:.9rem;border-left:1px solid var(--border)}
.pay-datebulk__lbl{font-size:.85rem;color:var(--muted)}
.pay-datebulk__inp{padding:.4rem .55rem;border:1px solid var(--border-input);border-radius:8px;background:var(--surface);color:var(--text);font:inherit;font-size:.9rem}
.pay-datebulk__inp:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 2px var(--ring)}
.pay-datebulk__inp:focus-visible{outline:2px solid var(--brand);outline-offset:1px}
@media (max-width:640px){.pay-datebulk{padding-left:0;border-left:none}}
/* Toplu yöntem kutusu tarih kutusuyla aynı görsel dili kullanır. */
.pay-yontembulk{display:inline-flex;align-items:center;gap:.4rem}
/* Ödeme filtresi (durum) — istemci tarafı, kayıttan sonra otomatik tutarlı */
.table--pay[data-filtre="odeyen"] .pay-row:not([data-status="odendi"]){display:none}
.table--pay[data-filtre="bekleyen"] .pay-row:not([data-status="kismi"]):not([data-status="odenmedi"]){display:none}
.pay-row.pay-hide-s{display:none!important}
.pay-toolbar{margin:0 0 .7rem}
.pay-search{width:100%;max-width:22rem;font:inherit;font-size:.92rem;padding:.5rem .8rem;border:1px solid var(--border-input);border-radius:10px;background:var(--surface);color:var(--text)}
.pay-search:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--ring)}
.pay-search:focus-visible{outline:2px solid var(--brand);outline-offset:1px}
.period-bar__pick{display:inline-flex;margin:0}
.period-bar__month{font:inherit;font-size:.95rem;padding:.42rem .6rem;border:1px solid var(--border-input);border-radius:8px;background:var(--surface);color:var(--text);font-family:var(--font-mono)}
.period-bar__month:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 2px var(--ring)}
.period-bar__month:focus-visible{outline:2px solid var(--brand);outline-offset:1px}
tr.pay-saved td{animation:paySaved 1.1s ease}
@keyframes paySaved{0%{background:color-mix(in srgb,var(--ok) 22%,transparent)}100%{background:transparent}}
@media (prefers-reduced-motion:reduce){tr.pay-saved td{animation:none}}

.kpi-grid{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}
.kpi{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:.7rem .8rem;box-shadow:var(--shadow)}
.kpi__k{font-size:.66rem;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-family:var(--font-mono)}
.kpi__v{font-family:var(--font-display);font-size:1.15rem;margin-top:.2rem;font-variant-numeric:tabular-nums;line-height:1.15}
.kpi--rate.kpi--good{border-color:color-mix(in srgb,var(--ok) 40%,transparent)}
.kpi--rate.kpi--good .kpi__v{color:var(--ok)}
.kpi--rate.kpi--bad .kpi__v{color:var(--crit)}
.kpi--rate.kpi--mid .kpi__v{color:var(--warn)}

.dash-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;box-shadow:var(--shadow)}
.dash-card__title{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);font-family:var(--font-mono);margin-bottom:.6rem}
.dash-legend{display:flex;gap:1.1rem;justify-content:center;margin-top:.5rem;font-size:.75rem}
.lg{display:inline-flex;align-items:center;gap:.35rem;color:var(--muted)}
.lg::before{content:"";width:.8rem;height:.2rem;border-radius:2px;display:inline-block}
.lg--a::before{background:var(--brand)}
.lg--b::before{background:var(--ok)}
.statline{display:flex;flex-wrap:wrap;gap:.4rem}

.chart{width:100%;height:auto;display:block}
.chart--donut{max-width:140px;margin:0 auto}
.chart-track{stroke:var(--surface-2)}
.chart-arc{stroke:var(--ok);transition:stroke-dashoffset .5s ease}
.chart-donut-val{fill:var(--text);font-size:22px;font-weight:700;font-family:var(--font-display)}
.chart-donut-sub{fill:var(--faint);font-size:8px;letter-spacing:.12em;text-transform:uppercase}
.chart-grid{stroke:var(--border);stroke-width:1}
.chart-grid2{stroke:var(--border);stroke-width:1;opacity:.45}
.chart-area-b{fill:color-mix(in srgb,var(--ok) 15%,transparent);stroke:none}
.chart-line-a{stroke:var(--brand);stroke-width:2}
.chart-line-b{stroke:var(--ok);stroke-width:2.4}
.chart-dot-a{fill:var(--brand)}
.chart-dot-b{fill:var(--ok);stroke:var(--surface);stroke-width:1.5}
.chart-xlabel{fill:var(--faint);font-size:9px;font-family:var(--font-mono)}

.hbars{display:flex;flex-direction:column;gap:.35rem}
.hbar{display:grid;grid-template-columns:5.5rem 1fr auto;gap:.5rem;align-items:center;font-size:.8rem}
.hbar__label{color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.hbar__track{background:var(--surface-2);border-radius:20px;height:.55rem;overflow:hidden}
.hbar__fill{display:block;height:100%;background:var(--brass);border-radius:20px}
.hbar__val{font-variant-numeric:tabular-nums;color:var(--text);font-weight:600}

@media print{.sidebar,.topbar,.pay-actions,.period-bar a,.ta-actions{display:none!important}.app{grid-template-columns:1fr}.content{padding:0}}

/* ---------- M4: raporlar + yazdırma ---------- */

.report-item{padding:.8rem 0;border-bottom:1px solid var(--border)}
.report-item:last-child{border-bottom:none}
.report-item__head{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap;margin-bottom:.35rem}
.report-item__note{color:var(--text);white-space:pre-wrap;line-height:1.6}

/* Yazdırma föyü (ekranda beyaz, print'e hazır) */
.print-body{background:var(--surface);color:var(--text);margin:0;padding:1.5rem;font-family:var(--font-body)}
.print-toolbar{display:flex;gap:.5rem;justify-content:flex-end;max-width:800px;margin:0 auto 1rem}
.print-page{max-width:800px;margin:0 auto}
.print-head{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap;border-bottom:2px solid var(--brand-ink);padding-bottom:.6rem;margin-bottom:1rem}
.print-head__brand{font-family:var(--font-display);font-size:1.25rem;font-weight:700;color:var(--brand-ink);
  display:flex;align-items:center;gap:.55rem}
/* Logo yazdırmada da BASILMALI: tarayıcılar arka plan görsellerini varsayılan olarak
   atlar ama <img> etiketini basar — bu yüzden background değil gerçek img kullanılıyor. */
.print-head__logo{height:38px;width:auto;display:block}
.print-head__title{font-family:var(--font-display);font-size:1.05rem;font-weight:600;color:var(--text)}
.print-head__date{color:var(--muted);font-size:.85rem}
.print-info{display:flex;flex-wrap:wrap;gap:.35rem 1.6rem;background:var(--inset);border:1px solid var(--border);border-radius:8px;padding:.7rem 1rem;margin-bottom:1.2rem;font-size:.92rem;color:var(--text)}
.print-info__k{color:var(--faint);font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;margin-right:.35rem}
.print-report{border:1px solid var(--border);border-radius:8px;padding:.7rem .9rem;margin-bottom:.7rem;break-inside:avoid;page-break-inside:avoid}
.print-report__meta{font-size:.82rem;color:var(--muted);margin-bottom:.35rem;border-bottom:1px dashed var(--border);padding-bottom:.3rem}
.print-report__note{white-space:pre-wrap;line-height:1.6;color:var(--text)}
.print-foot{margin-top:1.4rem;padding-top:.6rem;border-top:1px solid var(--border);color:var(--faint);font-size:.78rem;text-align:center}
@media print{
  .no-print{display:none!important}
  .print-body{padding:0}
  .print-report{box-shadow:none}
  @page{margin:1.4cm}
}

/* ---------- Ferah ödeme ekranı (özet + tahsilat + grafikler) ---------- */
.btn--lg{padding:.8rem 1.5rem;font-size:1rem}
.empty-box{text-align:center;padding:2.8rem 1.5rem}
.empty-box__ico{font-size:2.6rem;color:var(--faint);margin-bottom:.4rem;line-height:1}

.period-bar__label{min-width:11rem}

.ostats{display:grid;grid-template-columns:repeat(4,1fr);gap:1rem;margin-bottom:1rem}
@media (max-width:760px){.ostats{grid-template-columns:1fr 1fr}}
.ostat{position:relative;overflow:hidden;background:var(--surface);border:1px solid var(--border);
  border-radius:14px;padding:1.15rem 1.35rem;box-shadow:var(--shadow)}
.ostat::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--brand)}
.ostat--tahsil::before{background:var(--ok)}
.ostat--kalan::before{background:var(--warn)}
.ostat--oran.ostat--iyi::before{background:var(--ok)}
.ostat--oran.ostat--orta::before{background:var(--warn)}
.ostat--oran.ostat--dusuk::before{background:var(--crit)}
.ostat__k{font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:600}
.ostat__v{font-family:var(--font-display);font-size:1.9rem;line-height:1.1;margin-top:.35rem;font-variant-numeric:tabular-nums;color:var(--text)}
.ostat--tahsil .ostat__v{color:var(--ok)}
.ostat--oran.ostat--iyi .ostat__v{color:var(--ok)}
.ostat--oran.ostat--orta .ostat__v{color:var(--warn)}
.ostat--oran.ostat--dusuk .ostat__v{color:var(--crit)}
.ostat__cur{font-size:.9rem;color:var(--muted);font-family:var(--font-body)}

.collect{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:1.15rem 1.35rem;box-shadow:var(--shadow);margin-bottom:1.5rem}
.collect__head{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;flex-wrap:wrap;margin-bottom:.6rem}
.collect__title{font-weight:650}
.collect__amt{font-variant-numeric:tabular-nums;color:var(--muted)}
.collect__amt strong{color:var(--text);font-size:1.05rem}
.collect__bar{height:14px;background:var(--surface-2);border-radius:20px;overflow:hidden}
.collect__fill{display:block;height:100%;background:var(--ok);border-radius:20px;transition:width .5s ease}
.collect--orta .collect__fill{background:var(--warn)}
.collect--dusuk .collect__fill{background:var(--crit)}
.collect__foot{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-top:.6rem;font-size:.85rem;color:var(--muted)}
.collect__foot .dot{color:var(--faint)}
.collect__eksik{color:var(--warn);font-weight:600}

.ocharts{display:grid;grid-template-columns:2fr 1fr;gap:1rem;margin-top:1.6rem}
@media (max-width:820px){.ocharts{grid-template-columns:1fr}}
.ochart--donut{display:flex;flex-direction:column;justify-content:center}
.donut-foot{display:flex;justify-content:space-between;gap:.6rem;margin-top:.8rem;font-size:.85rem}
.donut-foot strong{color:var(--ok)}

/* `.table--airy td,th{padding:.8rem .95rem}` SİLİNDİ: .table--airy sınıfı hiçbir view'da
   kullanılmıyordu (ölü kural). .table--pay'e çevrilmedi — o tablonun kendi bilinçli
   dolgusu var (`.table--pay td,th{padding:.55rem .7rem}`, yukarıda) ve eşit özgüllükte
   sonra geldiği için onu sessizce ezerdi (7 sütunlu, table-layout:fixed ödeme tablosu). */
.pay-odenen{font-weight:600}
/* Zebra: (1) eskiden @media(prefers-color-scheme:light) içindeydi, OS'i AÇIKÇA açık moda
   ayarlı olmayanlarda hiç çalışmıyordu; (2) media'dan çıkarıldıktan sonra da ÖLÜ bir
   sınıfa (.table--airy) bağlıydı → ödeme tablosunda satır ayrımı hâlâ yoktu.
   Artık gerçekten kullanılan sınıfa bağlı. Hover ile çakışması için satır ~152'ye bak. */
.table--pay tbody tr:nth-child(even){background:color-mix(in srgb,var(--surface-2) 50%,transparent)}

/* ---------- Tahsilat özetindeki tıklanabilir filtreler ---------- */
.collect__link{color:var(--muted);text-decoration:none;border-bottom:1px dashed color-mix(in srgb,var(--muted) 45%,transparent);padding-bottom:1px;transition:color .15s,border-color .15s}
.collect__link:hover{color:var(--text);border-bottom-color:var(--text)}
.collect__link--eksik{color:var(--warn);font-weight:600;border-bottom-color:color-mix(in srgb,var(--warn) 45%,transparent)}
.collect__link--eksik:hover{color:var(--warn);border-bottom-color:var(--warn)}
.collect__link.is-active{color:var(--brand);border-bottom:2px solid var(--brand);font-weight:600}

/* ---------- Aktif filtre çubuğu ---------- */
.pay-filter{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;
    background:color-mix(in srgb,var(--brand) 8%,var(--surface));border:1px solid color-mix(in srgb,var(--brand) 25%,var(--border));
    border-radius:12px;padding:.7rem 1.1rem;margin-bottom:.9rem;font-size:.9rem}
.pay-filter__txt{color:var(--text)}
.pay-filter__clear{color:var(--brand);text-decoration:none;font-weight:600;white-space:nowrap}
.pay-filter__clear:hover{text-decoration:underline}
.pay-w-durum{width:13%}

/* ---------- Bilgi kutusu + Dönem öğrenci seçimi ---------- */
.info-box{background:color-mix(in srgb,var(--info) 10%,var(--surface));border:1px solid color-mix(in srgb,var(--info) 28%,var(--border));
    border-radius:12px;padding:.9rem 1.15rem;margin-bottom:1.2rem;font-size:.9rem;color:var(--text);line-height:1.55}
.pick-group{margin-bottom:1.1rem}
.pick-group__head{padding:.85rem 1.2rem;border-bottom:1px solid var(--border);background:var(--inset)}
.pick-group__all{display:inline-flex;align-items:center;gap:.6rem;cursor:pointer;font-weight:600}
.pick-group__all input{accent-color:var(--brand)}
.table--pick td,.table--pick th{padding:.5rem .9rem}
.table--pick input[type="checkbox"]{accent-color:var(--brand)}
.pick-badges{white-space:nowrap;text-align:right}

/* ---------- Haftalık ders programı (timetable) ---------- */
.timetable{width:100%;border-collapse:collapse;min-width:880px;table-layout:fixed}
.timetable th,.timetable td{border:1px solid var(--border);vertical-align:top}
.timetable thead th{background:var(--inset);padding:.55rem .4rem;font-family:var(--font-mono);font-size:.72rem;
    text-transform:uppercase;letter-spacing:.04em;color:var(--faint);text-align:center}
.tt-hour{width:62px;background:var(--inset);text-align:center;font-family:var(--font-mono);font-size:.75rem;
    color:var(--muted);padding:.5rem .3rem;white-space:nowrap;vertical-align:middle!important}
.tt-cell{padding:.3rem;height:60px}
.tt-lesson{display:block;text-decoration:none;border:1px solid var(--border);border-left:3px solid var(--brand);
    background:var(--surface);color:var(--text);border-radius:8px;padding:.4rem .5rem;margin-bottom:.3rem;transition:transform .1s,box-shadow .1s}
.tt-lesson:hover{box-shadow:var(--shadow);transform:translateY(-1px)}
.tt-lesson--grup{border-left-color:var(--brass)}
.tt-lesson__time{display:block;font-family:var(--font-mono);font-size:.68rem;color:var(--muted)}
.tt-lesson__name{display:block;font-weight:600;font-size:.82rem;line-height:1.2;margin:.12rem 0}
.tt-lesson__meta{display:block;font-size:.7rem;color:var(--faint)}
.tt-add{display:block;text-align:center;color:transparent;border:1px dashed transparent;border-radius:8px;
    padding:.1rem;font-size:1.05rem;line-height:1.2;text-decoration:none}
.tt-cell:hover .tt-add{color:var(--faint);border-color:var(--border)}
.tt-add:hover{background:var(--inset);color:var(--brand)!important;border-color:var(--brand)!important}

/* Öğrenci seçim çipleri (ders formu / yerleştirilmemiş dersler) */
.pick-students{display:flex;flex-wrap:wrap;gap:.5rem}
/* Tıklanabilir seçim bileşeni → kenarlık --border-input (3.30:1), --border değil (1.25:1) */
.pick-chip{display:inline-flex;align-items:center;gap:.4rem;border:1px solid var(--border-input);border-radius:20px;
    padding:.35rem .75rem;font-size:.85rem;cursor:pointer;background:var(--surface);color:var(--text);text-decoration:none}
.pick-chip:hover{border-color:var(--brand)}
.pick-chip input{accent-color:var(--brand)}
.field--full{grid-column:1 / -1}

/* ---------- Dokunmatik / erişilebilirlik / yazdırma iyileştirmeleri ---------- */
/* Gönderim başlayınca kilitlenen butonlar için görsel ipucu */
.is-busy{opacity:.65;cursor:progress}
.pager{display:flex;align-items:center;gap:.8rem;justify-content:center;margin-top:1rem}
.pager__info{color:var(--muted);font-size:.82rem;font-family:var(--font-mono)}
/* Rapor metni sütunu tabloyu şişirmesin — uzun not kırpılır, tamamı öğrenci sayfasında. */
.rapor-hucre{max-width:34rem;font-size:.86rem;line-height:1.45}
.skip-link{position:absolute;left:-9999px;top:0;z-index:100;background:var(--brand);color:var(--primary-fg);padding:.6rem 1rem;border-radius:0 0 8px 0;font-weight:600}
.skip-link:focus{left:0}
/* Dokunmatik (hover'sız) cihazlarda düzenlenebilir alanların keşfedilebilirliği.
   .pay-input kuralları BURADAN KALDIRILDI: sorunu yalnız dokunmatikte çözüyor,
   masaüstünde aynen bırakıyorlardı. Artık .pay-input dinlenme durumunda HER cihazda
   görünür kenarlık + beyaz zemin taşıyor (yukarıya bak). */
@media (hover:none){
  .tt-add{color:var(--faint);border-color:var(--border)}
}
/* Dokunmatikte küçük aksiyon butonlarını daha büyük dokunma hedefi yap */
@media (pointer:coarse){
  /* WCAG 2.5.5 (AAA) dokunma hedefi 44×44. Parmakla kullanılan her tıklanabilir öğe
     bu boyuta çekilir; fare/kalemde değişiklik YOK (kural yalnız kaba işaretçide).
     Tablo satırları telefonda uzuyor — istenen budur, yanlış hücreye basmak
     ödeme ekranında veri hatası demek. */
  .btn,.btn--sm{min-height:44px;padding-top:.5rem;padding-bottom:.5rem}
  .btn--sm{padding-left:.7rem;padding-right:.7rem}
  input,select,textarea{min-height:44px}
  /* İkon düğmeleri (satır sonundaki ✕ gibi) dar kalabilir ama YÜKSEKLİĞİ korur;
     genişliği de en az 44px'e çıkar ki hedef kare olsun. */
  .pay-w-sil .btn{min-width:44px}
  .tt-add{padding:.4rem;min-height:44px}
  /* Kaydırılabilir tablolarda ivmeli kaydırma (iOS) */
  .table-wrap{-webkit-overflow-scrolling:touch}
}
/* Yazdırmada nötrleri kâğıda göre koyulaştır (çok açık kenarlıklar baskıda kaybolur) */
@media print{
  :root{color-scheme:light;
    --bg:#ffffff;--surface:#ffffff;--surface-2:#f1f3f7;--inset:#f8f9fb;
    --text:#1c1a22;--muted:#45414d;--faint:#5d5866;
    --border:#c4c9d2;--border-input:#6f7684}
  body{background:var(--surface);color:var(--text)}
}

/* ---------- Mobile ---------- */
/* Çekmece sınırı 820 → 1023.
   821-1023px bandında (küçük dizüstü penceresi, yatay tablet) 240px'lik sabit kenar
   çubuğu içeriğe 566px bırakıyordu; tabloların `min-width:640px` değeri bunun altında
   kaldığı için o bantta da yatay kaydırma çıkıyordu. Çekmeceye çevirince içerik tam
   genişliği alıyor, kenar çubuğuna hamburger düğmesiyle ulaşılıyor. */
@media (max-width:1023px){
  .app{grid-template-columns:1fr}
  .sidebar{position:fixed;z-index:40;width:250px;left:0;top:0;transform:translateX(-100%);
    transition:transform .2s ease;box-shadow:var(--shadow-lg)}
  .app.is-open .sidebar{transform:translateX(0)}
  .topbar__toggle{display:inline-flex;align-items:center;justify-content:center}
  .app.is-open::after{content:"";position:fixed;inset:0;background:var(--scrim);z-index:30}
}

/* ========== Aylık slot şeridi ve ders durumu (Faz 4 · D1/D2) ==========
   :root'taki --slot-* token'larının BİLEŞENİ. WCAG 1.4.1 gereği renk TEK ayırt edici
   değildir: her kutu ayrıca işaret (✓ ✗ – ⊘) ve slot_gorunum() ile üretilen bir
   title/sr-only metni taşır (app/helpers.php). Sıra bozulmasın diye yalnızca EKLENDİ. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}

.slot-strip{display:flex;flex-wrap:wrap;gap:.45rem;align-items:stretch}
.slot{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:.1rem;
  min-width:3.6rem;padding:.45rem .5rem;line-height:1.15;text-decoration:none;
  border:1px solid var(--slot-idle-bd);border-radius:var(--radius-sm);
  background:var(--slot-idle-bg);color:var(--slot-idle-fg)}
a.slot:hover{box-shadow:var(--shadow);transform:translateY(-1px)}
.slot__isaret{font-size:1rem;font-weight:700}
.slot__gun{font-family:var(--font-mono);font-size:.72rem}
.slot--ok{background:var(--slot-ok-bg);color:var(--slot-ok-fg);border-color:var(--slot-ok-bd)}
.slot--no{background:var(--slot-no-bg);color:var(--slot-no-fg);border-color:var(--slot-no-bd)}
.slot--idle{background:var(--slot-idle-bg);color:var(--slot-idle-fg);border-color:var(--slot-idle-bd)}
.slot--cizili .slot__gun{text-decoration:line-through}
.slot--eksik{border-style:dashed;background:var(--surface)}

/* Haftalık ızgara hücresi: renk artık TÜR değil DURUM anlatır (.tt-lesson--grup ölü). */
.tt-lesson--ok{background:var(--slot-ok-bg);border-left-color:var(--slot-ok-bd)}
.tt-lesson--no{background:var(--slot-no-bg);border-left-color:var(--slot-no-bd)}
.tt-lesson--idle{border-left-color:var(--slot-idle-bd)}
/* 20 EYLÜL 2026 — "işlendi / işlenmedi" ızgarada bir bakışta okunsun (müşteri isteği).
   ZEMİN TONLARINA DOKUNULMADI ve DOKUNULMAMALI: yukarıdaki (c) notu, --slot-no-bg'nin
   bilerek koyulaştırıldığını anlatıyor — daha soluk bir kırmızı, yeşille gri tondaki farkı
   1.17:1'den ~1.03:1'e düşürür ve renk körlüğünde / siyah-beyaz baskıda iki durum BİREBİR
   AYNI görünür. "Daha belirgin" isteği bu yüzden şeride ve işarete yüklendi. */
.tt-lesson--ok,.tt-lesson--no{border-left-width:5px}
.tt-lesson__isaret{font-size:.82rem;font-weight:700}
.tt-lesson--ok .tt-lesson__isaret{color:var(--slot-ok-fg)}   /* 6.50:1 */
.tt-lesson--no .tt-lesson__isaret{color:var(--slot-no-fg)}   /* 5.62:1 */
/* Mevcut WCAG AA ihlali kapatıldı: .tt-lesson__meta rengi --faint idi ve kırmızı zeminde
   3.93:1 (eşik 4.5:1) kalıyordu. --muted ile kırmızıda 5.04:1, yeşilde 5.90:1. */
.tt-lesson--ok .tt-lesson__meta,.tt-lesson--no .tt-lesson__meta{color:var(--muted)}
.tt-lesson--pasif{opacity:.62;border-left-style:dashed}
.timetable .is-today{background:var(--brand-soft)}
.tt-cell.is-today{background:color-mix(in srgb,var(--brand-soft) 55%,transparent)}

@media print{
  .slot{border-width:1.5px}
}
.tt-lesson--cizili .tt-lesson__name{text-decoration:line-through}

/* --- Toplu içe aktarma --- */
.ithal-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,26rem),1fr));gap:1rem}
.ithal-kart{display:flex;flex-direction:column}
.ithal-kart__sutun{display:flex;flex-wrap:wrap;gap:.25rem;align-items:center;margin:.5rem 0 0}
.ithal-sutun{font-family:var(--font-mono);font-size:.68rem;background:var(--inset);border:1px solid var(--border);
  border-radius:5px;padding:.1rem .35rem;color:var(--muted);white-space:nowrap}
.ithal-sutun--zorunlu{font-weight:700;color:var(--brand-ink);border-color:var(--ring);
  background:color-mix(in srgb,var(--brand) 8%,transparent)}
/* Ödeme satırını dönemden kaldırma sütunu — dar, sessiz; hover'da belirginleşir. */
.pay-w-sil{width:2.6rem;text-align:center}
.pay-w-sil .btn{opacity:.35;transition:opacity .12s;padding:.15rem .45rem;line-height:1}
tr:hover .pay-w-sil .btn,.pay-w-sil .btn:focus-visible{opacity:1}

/* --- Ödeme satırı durum tinti (istek: "ödenmişse yeşil, ödenmemişse kırmızı, silik") ---
   Tint SATIRIN TAMAMINA, td üzerinden verilir: zebra ve hover da td/tr zemininde
   çalıştığı için tek katmanda kalırsa biri diğerini yutar.

   ⚠️ RENK TEK İŞARET DEĞİLDİR (WCAG 1.4.1): "Durum" sütunundaki rozet metni
   (Ödendi / Kısmi / Ödenmedi / Muaf) asıl bilgidir; tint yalnızca tarama kolaylığı
   sağlar. Kırmızı-yeşil ayırt edemeyen kullanıcı hiçbir şey kaybetmez.

   Oranlar ölçülü (%14-16): kullanıcı isteğiyle bir tık belirginleştirildi. Daha yükseği
   100+ satırlık tabloda okunaksız olur ve satır içi giriş alanlarını bastırır.
   Değerler --surface ile karıştırılır, sabit hex yazılmaz — tema değişirse birlikte kayar. */
.table--pay tbody tr.pay-row[data-status="odendi"] td{
  background:color-mix(in srgb,var(--ok) 15%,var(--surface))}
.table--pay tbody tr.pay-row[data-status="odenmedi"] td{
  background:color-mix(in srgb,var(--crit) 14%,var(--surface))}
.table--pay tbody tr.pay-row[data-status="kismi"] td{
  background:color-mix(in srgb,var(--warn) 16%,var(--surface))}
/* 'muaf' ve 'devir': para BEKLENMİYOR — kırmızı yanıltıcı olurdu, nötr bırakılır. */
.table--pay tbody tr.pay-row[data-status="muaf"] td,
.table--pay tbody tr.pay-row[data-status="devir"] td{background:var(--inset)}

/* Hover tint'in ÜSTÜNDE kalmalı. Aynı özgüllükte oldukları için sıra belirleyici:
   bu kural tint kurallarından SONRA gelmek zorunda, yoksa imlecin hangi satırda
   olduğu tinti güçlü satırlarda kaybolur. */
.table--pay tbody tr.pay-row:hover td{background:color-mix(in srgb,var(--text) 12%,var(--surface))}

/* Kaydetme animasyonu (tr.pay-saved) da tint'i geçici olarak örtmeli — aksi halde
   "kaydedildi" parıltısı tintin altında kalıp görünmez olur. */
.table--pay tbody tr.pay-row.pay-saved td{animation:paySaved 1.1s ease}

/* ════════════════════════════════════════════════════════════════════════════
   14 EYLÜL 2026 — MÜŞTERİ İSTEKLERİ
   ════════════════════════════════════════════════════════════════════════════ */

/* Dolu saatler bilgisi (ders formu, saat tekerleğinin altında) */
.saat-panel__alt{margin-top:.7rem;font-size:.82rem;color:var(--muted);display:flex;flex-wrap:wrap;gap:.3rem .9rem}
.saat-panel__alt b{color:var(--text);font-weight:600}

/* Süre: hazır çipler + sayı kutusu */
.sure-sec{display:flex;align-items:center;gap:.4rem}
.sure-sec__sayi{max-width:7rem}
.sure-sec__hizli{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.1rem}
.sure-sec__hizli .chip{cursor:pointer;font:inherit;font-size:.82rem}

/* ── VELİLER (öğrenci formu + detayı) ─────────────────────────────────────── */
.veli-blok{margin-top:.9rem;border:1px solid var(--border);border-radius:var(--radius);padding:.9rem;background:var(--inset)}
.veli-blok__bas{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;flex-wrap:wrap;margin-bottom:.6rem}
.veli-liste{display:flex;flex-direction:column;gap:.6rem;margin-bottom:.6rem}
.veli-satir{display:grid;grid-template-columns:1.6rem minmax(0,1.5fr) minmax(0,1fr) minmax(0,1.1fr) auto;gap:.6rem;align-items:end;
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:.6rem .7rem}
.veli-satir__no{align-self:center;display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;border-radius:50%;
  background:var(--brand-soft);color:var(--brand);font-weight:700;font-size:.8rem}
.veli-satir__sil{align-self:end;height:2.45rem}
@media (max-width:720px){
  .veli-satir{grid-template-columns:1.6rem 1fr auto}
  .veli-satir .field{grid-column:2 / 3}
  .veli-satir__sil{grid-column:3;grid-row:1;align-self:start}
}
.veli-goster{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.45rem}
.veli-goster__oge{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.veli-goster__ad{font-weight:600}
.veli-goster__tel{color:var(--text)}
.veli-goster__tel:hover{color:var(--brand)}
.sekme-arac{display:flex;align-items:center;justify-content:space-between;gap:.8rem;flex-wrap:wrap;margin-bottom:.9rem}

/* ── ÖĞRENCİ LİSTESİ: durum ara başlıkları + otomatik filtre ─────────────── */
.table .grup-satiri th{background:var(--surface-2);color:var(--muted);font-family:var(--font-mono);font-size:.7rem;
  letter-spacing:.08em;text-transform:uppercase;padding:.45rem .9rem;border-bottom:1px solid var(--border)}
.table tbody tr.grup-satiri:hover td{background:none}
.grup-satiri__n{display:inline-block;margin-left:.35rem;background:color-mix(in srgb,var(--text) 10%,transparent);border-radius:20px;padding:0 .45rem}
.filters__durum{margin-left:auto;white-space:nowrap}
.content.is-yukleniyor > *:not([data-oto-filtre]):not(.page-head){opacity:.55;transition:opacity .15s}
.filters [data-oto-sonuc]:empty{display:none}

/* ── HAFTALIK IZGARA: haftaya özel / ek oturum kartları ───────────────────── */
.tt-kart{position:relative}
.tt-kart .tt-lesson{padding-right:1.7rem}
.tt-araclar{position:absolute;top:.25rem;right:.25rem;display:flex;flex-direction:column;gap:.2rem;
  opacity:0;transition:opacity .12s}
.tt-kart:hover .tt-araclar,.tt-kart:focus-within .tt-araclar{opacity:1}
.tt-arac{display:inline-flex;align-items:center;justify-content:center;width:1.45rem;height:1.45rem;border-radius:6px;
  border:1px solid var(--border-input);background:var(--surface);color:var(--muted);font:inherit;font-size:.78rem;
  line-height:1;text-decoration:none;cursor:pointer;padding:0}
.tt-arac:hover{color:var(--brand);border-color:var(--brand)}
button.tt-arac:hover{color:var(--crit);border-color:var(--crit)}
@media (hover:none){.tt-araclar{opacity:1}}
/* --- Tek tık yoklama düğmeleri (21 Eylül 2026, müşteri isteği §13) ------------------
   Aynı düğmeler dört ekranda basılır (helpers.php → yoklama_dugmeleri). İki biçim var:
     .ek-yoklama      tablo/kart içinde, .btn sınıflarıyla (ders sayfası, ders listesi)
     .tt-yoklama      haftalık çizelgenin araç şeridinde, .tt-arac ikonlarıyla
   ⚠ .tt-araclar DİKEY bir şerittir (flex-direction:column); yoklama formu kendi içinde
     YATAY kalmalı, yoksa ✓ ve ✗ alt alta düşer ve 30 dakikalık kart taşar. Şeritte en
     kötü hâlde üç düğme olur (✓ ✗ ⇄): ⏹ yalnız tarihi GELECEKTE olan derste, yoklama
     ise yalnız BAŞLAMIŞ derste basılır — ikisi aynı kartta buluşamaz. */
.ek-yoklama{display:inline-flex;gap:.3rem;flex-wrap:wrap;margin:0}
.tt-yoklama{display:flex;gap:.2rem;margin:0}
/* Hücre dar: düğmeler satır sonunda bölünmesin. */
.ek-satir-islem{white-space:nowrap}
.ek-satir-islem .ek-yoklama{vertical-align:middle}
/* Renk hover'da gelir; duran hâl nötr kalır ki "bu ders yeşil/kırmızı" bilgisiyle
   "şu düğmeye basarsan yeşil olur" bilgisi karışmasın (rozet zaten durumu söylüyor). */
.ek-yoklama__ok:hover{background:var(--slot-ok-bg);color:var(--slot-ok-fg);border-color:var(--slot-ok-bd)}
.ek-yoklama__no:hover{background:var(--slot-no-bg);color:var(--slot-no-fg);border-color:var(--slot-no-bd)}
/* Geri al nötr kalır: bir durum seçmiyor, seçimi KALDIRIYOR. */
.ek-yoklama__geri:hover{border-color:var(--muted);color:var(--text)}
button.tt-arac--yoklama.ek-yoklama__ok:hover{color:var(--ok);border-color:var(--ok)}
button.tt-arac--yoklama.ek-yoklama__no:hover{color:var(--crit);border-color:var(--crit)}
/* "Geçen ders" sütununda rozetin YANINDA akar, yer kalmazsa kendiliğinden alt satıra
   sarar. Zorla alt satıra alınmadı: 26 satırlık liste iki katına çıkardı. Sütuna sabit
   genişlik de verilmedi — 320px'te yatay kaydırma doğar (17 Eylül responsive ölçümü). */
.ek-durum-hucre .ek-yoklama{margin:.1rem 0 0 .35rem;vertical-align:middle}

.tt-rozet{display:inline-flex;align-items:center;gap:.2rem;margin-top:.2rem;font-size:.66rem;font-weight:700;
  font-family:var(--font-mono);letter-spacing:.02em;color:var(--info);background:var(--info-bg);
  border:1px solid color-mix(in srgb,var(--info) 30%,transparent);border-radius:20px;padding:.05rem .45rem;max-width:100%;white-space:normal;line-height:1.3}
.tt-lesson--ozel,.tt-lesson--ek{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--info) 45%,transparent)}
.tt-lesson--tasindi{background:transparent;border-style:dashed;border-left-style:dashed;border-left-color:var(--info);
  color:var(--muted);min-height:0!important}
.tt-lesson--tasindi .tt-lesson__name{font-weight:500}
.slot--ozel{box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--info) 55%,transparent)}
.slot__ozel{font-family:var(--font-mono);font-size:.6rem;color:var(--info)}

/* Haftaya özel değişiklik formu: gün seçici */
.gun-sec{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.35rem;margin-top:.3rem}
.gun-sec__oge{display:flex;flex-direction:column;align-items:center;gap:.05rem;padding:.5rem .2rem;border-radius:var(--radius-sm);
  border:1px solid var(--border-input);background:var(--surface);color:var(--text);cursor:pointer;font:inherit;position:relative}
.gun-sec__oge:hover{border-color:var(--brand)}
.gun-sec__oge.is-active{background:var(--brand);border-color:var(--brand);color:var(--primary-fg)}
.gun-sec__g{font-weight:700;font-size:.85rem}
.gun-sec__t{font-family:var(--font-mono);font-size:.72rem;opacity:.85}
.gun-sec__r{font-size:.6rem;text-transform:uppercase;letter-spacing:.06em;color:var(--brass-ink)}
.gun-sec__oge.is-active .gun-sec__r{color:inherit}
.gun-sec__takvim{display:block;margin-top:.5rem}
@media (max-width:560px){.gun-sec{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* ── ÖNDEN ÖDEME ──────────────────────────────────────────────────────────── */
.onden-duzen{display:grid;grid-template-columns:minmax(0,1fr);gap:1.1rem;align-items:start}
@media (min-width:1000px){.onden-duzen{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr)}}
.onden-ay{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem}
.onden-ay .chip{cursor:pointer;font:inherit;font-size:.85rem}
.onden-ay__sayi{max-width:5.5rem}
.onden-toplam{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;flex-wrap:wrap;
  border-top:1px dashed var(--border);padding-top:.8rem}
.onden-toplam__k{color:var(--muted);font-size:.85rem;text-transform:uppercase;letter-spacing:.06em;font-family:var(--font-mono)}
.onden-toplam__v{font-family:var(--font-display);font-size:1.6rem;font-variant-numeric:tabular-nums}
.onden-onizleme{position:sticky;top:4.4rem}
.onden-tablo{min-width:0;margin-top:.6rem}
.onden-tablo td,.onden-tablo th{padding:.5rem .6rem}
.onden-islem--yeni{color:var(--ok);font-weight:600}
.onden-islem--kapat{color:var(--info);font-weight:600}
.onden-islem--atla{color:var(--warn);font-weight:600}

/* Dar ekranda üst çubuk taşmasın: tema düğmesi eklenince "Çıkış" ekran dışına itiliyordu.
   Ad/rol rozeti gizlenir (Hesabım'da zaten var), başlık tek satırda kısaltılır. */
.topbar__title{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media (max-width:560px){
  .topbar{gap:.5rem}
  .userbox{gap:.35rem}
  .userbox__meta{display:none}
  .topbar__title{font-size:1rem}
}

/* ── DÖNEM ÖĞRENCİLERİ SEÇİMİ: hızlı seçim çubuğu ─────────────────────────── */
.secim-arac{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem 1rem;padding:.8rem 1rem;margin-bottom:1rem;
  position:sticky;top:3.6rem;z-index:5}
.secim-arac__dugmeler{display:flex;flex-wrap:wrap;gap:.4rem}
.secim-arac__ara{max-width:16rem}
.secim-arac__ozet{margin:0 0 0 auto;font-size:.88rem;color:var(--muted)}
.secim-arac__ozet strong{color:var(--text)}
.secim-arac__ozet .ekle{color:var(--ok);font-weight:600}
.secim-arac__ozet .cikar{color:var(--crit);font-weight:600}
.pick-row.is-gizli{display:none}
.pick-row:has(input:checked) td{background:color-mix(in srgb,var(--brand) 6%,var(--surface))}

/* ── ÖĞRENCİ LİSTESİ: tıklanabilir satır + seçim ─────────────────────────── */
.table--tikla tbody tr[data-href]{cursor:pointer}
.table--tikla tbody tr[data-href]:has(input:checked) td{background:color-mix(in srgb,var(--brand) 7%,var(--surface))}
.ogrenci-rapor-link{display:inline-flex;align-items:center;gap:.35rem;margin-top:.45rem;font-size:.88rem;font-weight:600}
.ogrenci-rapor-link:hover{text-decoration:underline}

/* ── Segment (iki seçenekli düğme grubu) ───────────────────────────────────── */
.segment{display:inline-flex;border:1px solid var(--border-input);border-radius:var(--radius-sm);overflow:hidden;width:max-content}
.segment__oge{position:relative;padding:.5rem 1rem;cursor:pointer;font-weight:600;font-size:.9rem;color:var(--muted);background:var(--surface)}
.segment__oge + .segment__oge{border-left:1px solid var(--border-input)}
.segment__oge input{position:absolute;opacity:0;inset:0;margin:0;cursor:pointer}
.segment__oge:has(input:checked){background:var(--brand);color:var(--primary-fg)}
.segment__oge:focus-within{outline:2px solid var(--brand);outline-offset:-2px}

/* ── OTOMATİK TAMAMLAMA (select[data-otomatik]) ───────────────────────────── */
.oto{position:relative}
.oto__kaynak{position:absolute!important;width:1px!important;height:1px!important;opacity:0;pointer-events:none;inset:auto!important}
.oto__giris{padding-right:2.2rem}
.oto__temizle{position:absolute;right:.4rem;top:50%;transform:translateY(-50%);width:1.6rem;height:1.6rem;border:0;border-radius:50%;
  background:transparent;color:var(--muted);cursor:pointer;font-size:.8rem;line-height:1}
.oto__temizle:hover{background:var(--surface-2);color:var(--text)}
.oto__liste{position:absolute;z-index:30;left:0;right:0;top:calc(100% + 4px);margin:0;padding:.3rem;list-style:none;
  max-height:18rem;overflow:auto;background:var(--surface);border:1px solid var(--border-input);border-radius:var(--radius-sm);
  box-shadow:var(--shadow-lg)}
.oto__liste li{display:flex;align-items:baseline;justify-content:space-between;gap:.6rem;padding:.5rem .6rem;border-radius:6px;cursor:pointer}
.oto__liste li.is-aktif{background:color-mix(in srgb,var(--brand) 12%,var(--surface))}
.oto__liste li.is-secili{font-weight:600}
.oto__liste li.is-secili::after{content:"✓";color:var(--brand)}
.oto__liste mark{background:color-mix(in srgb,var(--brass) 30%,transparent);color:inherit;border-radius:3px;padding:0 1px}
.oto__alt{font-size:.75rem;color:var(--faint);margin-left:auto}
.oto__yok{color:var(--muted);cursor:default!important}

/* ── GÜNE GÖRE TAKVİM ─────────────────────────────────────────────────────── */
.takvim-alan{position:relative}
.takvim.takvim--sag{left:auto;right:0}
.takvim-dugme{text-align:left;cursor:pointer;padding-right:2.2rem;min-height:2.6rem}
.takvim-dugme.is-bos{color:var(--muted)}
.takvim{position:absolute;z-index:30;top:calc(100% + 4px);left:0;width:19rem;max-width:calc(100vw - 2rem);padding:.7rem;
  background:var(--surface);border:1px solid var(--border-input);border-radius:var(--radius);box-shadow:var(--shadow-lg)}
.takvim__bas{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}
.takvim__ok{border:1px solid var(--border-input);background:var(--surface);color:var(--text);border-radius:6px;width:2rem;height:2rem;cursor:pointer}
.takvim__ok:hover{border-color:var(--brand);color:var(--brand)}
.takvim__izgara{display:grid;grid-template-columns:repeat(7,1fr);gap:.2rem}
.takvim__gun-adi{font-size:.68rem;text-align:center;color:var(--faint);font-family:var(--font-mono);padding:.2rem 0}
.takvim__gun-adi.is-hedef{color:var(--brand);font-weight:700}
.takvim__gun{aspect-ratio:1;border:1px solid transparent;border-radius:8px;background:color-mix(in srgb,var(--brand) 10%,var(--surface));
  color:var(--text);font:inherit;font-weight:600;cursor:pointer}
.takvim__gun:hover:not([disabled]){border-color:var(--brand)}
.takvim__gun[disabled]{background:transparent;color:var(--faint);opacity:.45;cursor:not-allowed;font-weight:400}
.takvim__gun.is-bugun{box-shadow:inset 0 -2px 0 var(--brass)}
.takvim__gun.is-secili{background:var(--brand);color:var(--primary-fg)}
.takvim__alt{margin:.5rem 0 0;font-size:.75rem;color:var(--muted)}
.takvim-not{display:block;font-size:.8rem;color:var(--info);min-height:0}
.takvim-not:empty{display:none}

/* ── SAAT TEKERLEĞİ ───────────────────────────────────────────────────────── */
.saat-ekle{border:1px solid var(--border);border-radius:var(--radius);background:var(--inset);padding:1rem;margin-top:.35rem}
.saat-satirlar{display:flex;flex-wrap:wrap;gap:.8rem;align-items:stretch}
.saat-satiri{flex:0 1 15.5rem;display:flex;flex-direction:column;align-items:center;gap:.55rem;padding:.7rem .8rem .8rem;
  border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}
.saat-satiri.is-uyari{border-color:var(--warn);background:var(--warn-bg)}
.saat-satiri.is-yeni{animation:saatYeni .6s ease}
@keyframes saatYeni{from{transform:scale(.96);opacity:.4}to{transform:none;opacity:1}}
.saat-satiri__bas{align-self:stretch;display:flex;align-items:center;justify-content:space-between;gap:.5rem;min-height:1.7rem}
.saat-satiri__no{font-weight:600;font-size:.9rem}
.saat-satiri__sil{border:0;background:transparent;color:var(--muted);font:inherit;font-size:.8rem;padding:.2rem .45rem;border-radius:6px;cursor:pointer}
.saat-satiri__sil:hover,.saat-satiri__sil:focus-visible{background:var(--crit-bg);color:var(--crit)}
.saat-satiri__alt{display:flex;flex-direction:column;align-items:center;gap:.15rem;text-align:center}
.saat-satiri__aralik{font-family:var(--font-display);font-size:1.25rem;font-variant-numeric:tabular-nums}
.saat-satiri__durum{font-size:.8rem;color:var(--muted)}
.saat-satiri__durum.is-uyari{color:var(--warn);font-weight:600}
.saat-yeni{flex:0 1 15.5rem;min-height:12rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.3rem;
  border:2px dashed var(--border);border-radius:var(--radius);background:transparent;color:var(--text);font:inherit;cursor:pointer;padding:1rem}
.saat-yeni:hover,.saat-yeni:focus-visible{border-color:var(--brand);background:var(--surface)}
.saat-yeni:disabled{opacity:.5;cursor:not-allowed}
.saat-yeni__arti{font-size:2.2rem;line-height:1;font-weight:300;color:var(--brand)}
.saat-ekle__ozet{margin:.8rem 0 .2rem;font-weight:600;font-variant-numeric:tabular-nums}
@media (max-width:560px){.saat-satiri,.saat-yeni{flex:1 1 100%}.saat-yeni{min-height:4.5rem;flex-direction:row}}
.tekerlekler{position:relative;display:flex;align-items:center;gap:.3rem;padding:0 .6rem;background:var(--surface);
  border:1px solid var(--border-input);border-radius:14px}
.tekerlek{--oge:44px;height:calc(var(--oge) * 3);width:4.2rem;overflow-y:scroll;scroll-snap-type:y mandatory;
  padding-block:var(--oge);scrollbar-width:none;position:relative;z-index:1;outline:none;
  -webkit-mask-image:linear-gradient(transparent,#000 35%,#000 65%,transparent);mask-image:linear-gradient(transparent,#000 35%,#000 65%,transparent)}
.tekerlek::-webkit-scrollbar{display:none}
.tekerlek:focus-visible{box-shadow:0 0 0 2px var(--ring);border-radius:8px}
.tekerlek__oge{height:var(--oge);display:flex;align-items:center;justify-content:center;scroll-snap-align:center;
  font-family:var(--font-mono);font-size:1.35rem;color:var(--muted);cursor:pointer;user-select:none;transition:color .12s,font-size .12s}
.tekerlek__oge.is-secili{color:var(--text);font-weight:700;font-size:1.6rem}
.tekerlek__oge.is-dolu{text-decoration:line-through;color:var(--crit)}
.tekerlek__oge.is-dolu.is-secili{color:var(--crit)}
.tekerlekler__ayrac{font-family:var(--font-mono);font-size:1.6rem;font-weight:700;color:var(--text);z-index:1}
.tekerlekler__bant{position:absolute;left:.3rem;right:.3rem;top:50%;height:44px;transform:translateY(-50%);border-radius:10px;
  background:color-mix(in srgb,var(--brand) 12%,transparent);border:1px solid color-mix(in srgb,var(--brand) 35%,transparent);pointer-events:none}
  background:var(--surface);border:1px solid color-mix(in srgb,var(--brand) 40%,var(--border));font-weight:600}

.btn:disabled,.btn[disabled]{opacity:.5;cursor:not-allowed;filter:none}
fieldset.field{border:0;padding:0;margin:0;min-width:0}
fieldset.field legend{padding:0;margin-bottom:.35rem}
fieldset.field .field--check{display:flex;align-items:flex-start;gap:.5rem;margin:.25rem 0}
fieldset.field .field--check input{margin-top:.25rem;flex:none}

[data-brans-not].is-uyari{color:var(--warn);font-weight:600}

/* ---------- Okul Ayarları (admin/ayarlar/okul.php) ---------- */
.ayar-renk{display:flex;gap:.6rem;align-items:center}
.ayar-renk input[type="color"]{width:3rem;height:2.4rem;padding:0;border:1px solid var(--border-input);border-radius:var(--radius-sm);background:none;cursor:pointer}
.ayar-renk__hex{max-width:8rem;font-family:var(--font-mono)}
.ayar-onizleme{display:flex;flex-wrap:wrap;gap:.6rem;margin-top:.6rem}
.ayar-ornek{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;padding:.7rem .8rem;border:1px solid var(--border);border-radius:var(--radius-sm)}
.ayar-ornek__dugme{padding:.35rem .8rem;border-radius:var(--radius-sm);font-size:.85rem;font-weight:600}
.ayar-ornek__bag{font-size:.85rem;font-weight:600;text-decoration:underline}
.ayar-ornek__secili{padding:.3rem .6rem;border-radius:var(--radius-sm);font-size:.85rem;font-weight:600}
.ayar-gorsel__mevcut{display:inline-block;padding:.5rem;border:1px dashed var(--border);border-radius:var(--radius-sm);background:#fff;margin-bottom:.4rem}
.ayar-gorsel__mevcut--koyu{background:#1b1a21}
.ayar-gorsel__mevcut img{display:block;max-height:64px;width:auto;height:auto;max-width:100%}

/* ---------- Demo profili (yalnız DEMO_MODE) ---------- */
.demo-serit{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.6rem;
  margin:0 0 1rem;padding:.55rem .9rem;border:1px dashed color-mix(in srgb,var(--brand) 45%,transparent);
  border-radius:var(--radius-sm);background:var(--brand-soft);color:var(--text);font-size:.88rem}
.demo-giris{margin:0 0 1.2rem;padding:.9rem;border:1px dashed color-mix(in srgb,var(--brand) 45%,transparent);
  border-radius:var(--radius-sm);background:var(--brand-soft)}
.demo-giris__baslik{margin:0 0 .6rem;font-weight:700;text-align:center}
.demo-giris__form{margin:0 0 .45rem}
.demo-giris__btn{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;text-align:left;background:var(--surface)}
.demo-giris__btn span{font-size:.78rem;font-weight:400;color:var(--muted)}
.demo-giris__not{margin:.5rem 0 0;text-align:center}
