/* Nunito (değişken font, SIL OFL lisansı) — yerelde barındırılır (CSP: font-src 'self').
   latin + latin-ext alt kümeleri Türkçe karakterleri (ğüşıöç İĞÜŞÖÇ) tam kapsar. */
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 200 1000;
  font-display: swap;
  src: url('../fonts/nunito-vf-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Nunito';
  font-style: normal;
  font-weight: 200 1000;
  font-display: swap;
  src: url('../fonts/nunito-vf-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

:root {
  --bg: #f4f7f8;
  --surface: #ffffff;
  --surface-soft: #f8fafb;
  --text: #172126;
  /* Eğitimgen logosundaki lacivert/mavi paletin temel yedeği. */
  --muted: #5f6c72;
  --border: #dfe7e9;
  --primary: #24439b;
  --primary-dark: #000b49;
  --primary-soft: #e5ebff;
  --primary-alt: #315fd0;
  --primary-alt-dark: #153a9f;
  /* --primary ÜSTÜNDEKİ yazı rengi. Sabit #fff yazmayın: vurgu paleti ve tema değişince
     zemin açılıyor ve beyaz AA'nın altına düşüyor (ölçüldü 2026-08-18: koyu temada her
     birincil düğmenin gradyan ucu 2.99, sınır 4.5). Aşağıda amber ve TÜM koyu tema
     paletleri bu token'ı koyu değere çeviriyor. */
  --on-primary: #fff;
  --blue: #3778c2;
  --violet: #7254b8;
  --amber: #c67b18;
  --danger: #c43d3d;
  --danger-soft: #fff0f0;
  /* UYARI TOKENI ACIK TEMADA DA TANIMLI (2026-08-26): koyu temada vardi, acik temada
     yoktu ve onu kullanan kural sabit hex'e dusuyordu — depo kurali sabit hex'i yasakliyor
     (koyu temada okunmaz hale geliyor). */
  --warning: #8a5a00;
  --warning-soft: #fff4e0;
  --success: #19734b;
  --success-soft: #e8f7ef;
  --radius: 16px;
  --shadow: 0 1px 2px rgba(22, 33, 38, .04), 0 10px 30px rgba(22, 33, 38, .06);
  --focus: 0 0 0 3px rgba(36, 67, 155, .24);
}

/* Karanlık mod: theme-boot.js ilk boyamadan önce <html data-theme="dark"> uygular. Token'lar değişir;
   sabit renkli birkaç bölge aşağıda hedefli olarak düzeltilir. Yazdırma belgeleri hep aydınlık kalır. */
:root[data-theme="dark"] {
  color-scheme: dark;
  --bg: #080d1e;
  --surface: #10182d;
  --surface-soft: #17223c;
  --surface-strong: #1e2c49;
  --text: #edf1ff;
  --muted: #aeb8d2;
  --border: #293654;
  --primary: #6f91f4;
  --primary-dark: #9cb3ff;
  --primary-soft: #18264f;
  /* --primary-alt koyu temada AÇIK tonda olmalı: gradyanın bir ucu açık (--primary) diğeri
     koyu kalınca aynı yazı rengi iki uçta birden okunamıyordu. İkisi de açık → koyu yazı. */
  --primary-alt: #93aef8;
  --primary-alt-dark: #24439b;
  --on-primary: #0a1128;
  --danger-soft: #3a201c;
  --success-soft: #16342a;
  --danger: #e0796c;
  --success: #66b394;
  /* Koyu tema karşılıkları danger/success kalıbıyla aynı: koyu zemin + açık ön plan. */
  --warning: #d9b64a;
  /* --violet KOYU TEMADA TANIMSIZDI (2026-08-20'de ölçüldü): açık temanın #7a5bb0 değeri
     miras alınıyor ve koyu yüzeyde 3.40 oranı veriyordu — AA sınırı 4.5. Yalnız yeni MEB
     rozetini değil, .metric-violet'i de etkiliyordu; ikisi de bu satırla düzeldi. */
  --violet: #b49bf0;
  --warning-soft: #3a2f14;
  --surface-2: #17223c;
  --shadow: 0 1px 2px rgba(0,0,0,.5), 0 10px 30px rgba(0,0,0,.4);
  --focus: 0 0 0 3px rgba(111,145,244,.38);
}
:root[data-theme="dark"] .field input,
:root[data-theme="dark"] .field select,
:root[data-theme="dark"] .field textarea { background: #0f172b; border-color: #334260; }
:root[data-theme="dark"] .field input:hover,
:root[data-theme="dark"] .field select:hover,
:root[data-theme="dark"] .field textarea:hover { border-color: #465778; }
:root[data-theme="dark"] .button-secondary { background: #17223c; border-color: #334260; color: #e4eaff; }
:root[data-theme="dark"] .button-secondary:hover { background: #1e2c49; border-color: #465778; }
:root[data-theme="dark"] .flash-error { border-color: #6b2f2f; color: #f0a8a8; }
:root[data-theme="dark"] .flash-success { border-color: #2b5e46; color: #86dcae; }
:root[data-theme="dark"] .flash-warning { background: #34290f; border-color: #6d5620; color: #e8c46f; }
:root[data-theme="dark"] .flash-info { background: #16273c; border-color: #2e4a6b; color: #9dc4ee; }
/* Koyu temada lacivert (--brand-navy) marka metinleri okunmuyor → panel içinde açık tona çevrilir.
   (Giriş sayfası, skip-link ve ::selection beyaz/altın zeminde kaldığından bilinçli olarak dokunulmaz.) */
:root[data-theme="dark"] .metric-card strong,
:root[data-theme="dark"] .page-heading h1,
:root[data-theme="dark"] .operation-links strong,
:root[data-theme="dark"] .empty-state strong,
:root[data-theme="dark"] .font-option-card > b,
:root[data-theme="dark"] .footer strong { color: #ece3d6; }
:root[data-theme="dark"] .builder-chip { border-color: var(--border); }
:root[data-theme="dark"] .qb-options li.is-correct,
:root[data-theme="dark"] .plan-topic.is-covered { border-color: #2b5e46; }
:root[data-theme="dark"] .view-switcher a.is-active { box-shadow: 0 1px 3px rgba(0,0,0,.5); }
/* Gelişim raporu bir yazdırma belgesidir: karanlık modda da beyaz kalır */
:root[data-theme="dark"] .report-document { background: #fff; color: #172126; }
/* Menüsüz tam sayfa belgeler (quiz-print.php): KÂĞIT (.qp-sheet) sabit beyaz kalır, ama kâğıdın
   ÇEVRESİ ve araç şeridi sisteme uymalı — koyu tema kullanıcısında ekran bembeyaz açılıyordu.
   theme-boot.js bu ekrana 2026-08-17'de eklendi; o güne kadar data-theme hiç yazılmadığı için
   bu kurallar YAZILSA BİLE çalışmazdı. */
:root[data-theme="dark"] .print-body,
:root[data-theme="dark"] .qp-body { background: var(--bg); color: var(--text); }
:root[data-theme="dark"] .print-toolbar { border-bottom-color: var(--border); background: var(--surface); }

/* Vurgu rengi paletleri (Görünüm ayarı: ui.accent). Varsayılan Eğitimgen lacivertidir. */
/* blue/violet: --primary-alt gradyanın AÇIK ucu ve beyaz yazıyı taşımalı. Eski tonlar
   (#4f83f1 / #9a6bff) beyazla 3.59 ve 3.55 veriyordu; primary'den %7-12 açık, AA'yı geçen
   en açık ton seçildi (ölçüldü 2026-08-18). */
:root[data-accent="blue"] { --primary: #2563eb; --primary-dark: #1e50c8; --primary-soft: #dbe8fe; --primary-alt: #346dec; --primary-alt-dark: #1d4ed8; --focus: 0 0 0 3px rgba(37,99,235,.25); }
:root[data-accent="violet"] { --primary: #7c3aed; --primary-dark: #6527cf; --primary-soft: #ede7fe; --primary-alt: #8b51ef; --primary-alt-dark: #6d28d9; --focus: 0 0 0 3px rgba(124,58,237,.25); }
/* Amber TEK istisna: açık temada bile zemin yeterince açık — beyaz 3.19'da kalıyor, koyu 5.87. */
:root[data-accent="amber"] { --primary: #d97706; --primary-dark: #b45309; --primary-soft: #fdeed3; --primary-alt: #f59e0b; --primary-alt-dark: #c2410c; --on-primary: #0a1128; --focus: 0 0 0 3px rgba(217,119,6,.28); }
:root[data-accent="rose"] { --primary: #be123c; --primary-dark: #9f1239; --primary-soft: #fde4e9; --primary-alt: #e11d48; --primary-alt-dark: #a21038; --focus: 0 0 0 3px rgba(190,18,60,.25); }
:root[data-accent="yesil"] { --primary: #237a4b; --primary-dark: #175a36; --primary-soft: #dcf3e5; --primary-alt: #2f9a5e; --primary-alt-dark: #1c6b40; --focus: 0 0 0 3px rgba(35,122,75,.25); }
:root[data-accent="pembe"] { --primary: #c2255c; --primary-dark: #9d1c4a; --primary-soft: #fde3ec; --primary-alt: #e0407a; --primary-alt-dark: #a6194d; --focus: 0 0 0 3px rgba(194,37,92,.25); }
:root[data-accent="indigo"] { --primary: #4f46e5; --primary-dark: #3b32c4; --primary-soft: #e6e4fd; --primary-alt: #6a62f0; --primary-alt-dark: #4338ca; --focus: 0 0 0 3px rgba(79,70,229,.25); }
:root[data-accent="kahve"] { --primary: #7c4a1e; --primary-dark: #5c3614; --primary-soft: #f3e6da; --primary-alt: #9a5f2a; --primary-alt-dark: #6b3f19; --focus: 0 0 0 3px rgba(124,74,30,.25); }
/* V2 KOBALT (2026-09-22, kurum varsayılanı). Ölçüldü: beyaz yazı --primary üstünde 7.10, --primary-alt üstünde 5.51; koyu temada koyu yazı 7.11. */
:root[data-accent="v2"] { --primary: #2747d6; --primary-dark: #0b1b6b; --primary-soft: #e6ecff; --primary-alt: #2a5fe0; --primary-alt-dark: #1b36b0; --focus: 0 0 0 3px rgba(39,71,214,.26); }
:root[data-accent="navy"] { --primary: #24439b; --primary-dark: #000b49; --primary-soft: #e5ebff; --primary-alt: #315fd0; --primary-alt-dark: #153a9f; --focus: 0 0 0 3px rgba(36,67,155,.25); }
:root[data-accent="teal"] { --primary: #0f766e; --primary-dark: #115e59; --primary-soft: #ccfbf1; --primary-alt: #128a7d; --primary-alt-dark: #0d5f57; --focus: 0 0 0 3px rgba(15,118,110,.25); }
:root[data-accent="turuncu"] { --primary: #c2410c; --primary-dark: #9a3412; --primary-soft: #ffedd5; --primary-alt: #d9541c; --primary-alt-dark: #9a3412; --focus: 0 0 0 3px rgba(194,65,12,.25); }
/* Karanlık temada vurgular: daha parlak birincil + koyu zeminli soft.
   --primary-alt HER paletde AÇIK tonda verilir: gradyanın iki ucu da açık olsun ki tek bir
   koyu yazı rengi (--on-primary) ikisinde birden okunsun. Ölçüldü: beyaz yazı bu zeminlerin
   hiçbirinde AA'yı geçmiyor (en iyisi 3.78), koyu yazı hepsinde ≥4.95. */
:root[data-theme="dark"][data-accent="blue"] { --primary: #6b98f5; --primary-dark: #7ea6f7; --primary-soft: #16263f; --primary-alt: #7ba3f5; }
:root[data-theme="dark"][data-accent="violet"] { --primary: #a585ff; --primary-dark: #b892ff; --primary-soft: #241a3d; --primary-alt: #b491ff; }
:root[data-theme="dark"][data-accent="amber"] { --primary: #f59e0b; --primary-dark: #ffb84d; --primary-soft: #372a12; --primary-alt: #ffb648; }
:root[data-theme="dark"][data-accent="rose"] { --primary: #f26d88; --primary-dark: #f57a93; --primary-soft: #3a1722; --primary-alt: #f57e97; }
:root[data-theme="dark"][data-accent="yesil"] { --primary: #4fbf7f; --primary-dark: #86d8a8; --primary-soft: #14301f; --primary-alt: #7dd4a1; }
:root[data-theme="dark"][data-accent="pembe"] { --primary: #f06292; --primary-dark: #f8a1c0; --primary-soft: #3a1626; --primary-alt: #f48fb1; }
:root[data-theme="dark"][data-accent="indigo"] { --primary: #958eff; --primary-dark: #b3adff; --primary-soft: #211e4a; --primary-alt: #a8a2ff; }
:root[data-theme="dark"][data-accent="kahve"] { --primary: #d29a63; --primary-dark: #e6bd92; --primary-soft: #352417; --primary-alt: #e0ac78; }
:root[data-theme="dark"][data-accent="v2"] { --primary: #7c9bff; --primary-dark: #a3b8ff; --primary-soft: #172150; --primary-alt: #a3b8ff; --on-primary: #0a1128; }
:root[data-theme="dark"][data-accent="navy"] { --primary: #7a99ec; --primary-dark: #8aa4ec; --primary-soft: #182342; --primary-alt: #85a1ea; }
:root[data-theme="dark"][data-accent="teal"] { --primary: #2dd4bf; --primary-dark: #5eead4; --primary-soft: #134e4a; --primary-alt: #5eead4; }
:root[data-theme="dark"][data-accent="turuncu"] { --primary: #fb923c; --primary-dark: #fdba74; --primary-soft: #431407; --primary-alt: #fdba74; }

/* Köşe stili (ui.corners = sharp) */
:root[data-corner="sharp"] { --radius: 9px; }
:root[data-corner="sharp"] .button { border-radius: 7px; }
:root[data-corner="sharp"] .field input, :root[data-corner="sharp"] .field select, :root[data-corner="sharp"] .field textarea { border-radius: 8px; }

/* Yazı tipi (ui.font_family) — Nunito varsayılan (@font-face yukarıda); alternatifler cihazda hazır fontlar.
   Dönem raporu belgesi (.report-document) her zaman Arial kalır. */
/* Her seçenek bir yedek zinciriyle biter: font cihazda yoksa arayüz bozulmaz, en yakınına düşer. */
:root[data-font="system"] body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; }
:root[data-font="segoe"] body { font-family: "Segoe UI Variable Text", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
:root[data-font="calibri"] body { font-family: Calibri, Candara, "Segoe UI", Optima, sans-serif; }
:root[data-font="arial"] body { font-family: Arial, Helvetica, "Liberation Sans", sans-serif; }
:root[data-font="verdana"] body { font-family: Verdana, Geneva, "DejaVu Sans", sans-serif; }
:root[data-font="tahoma"] body { font-family: Tahoma, Verdana, Geneva, sans-serif; }
:root[data-font="trebuchet"] body { font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", sans-serif; }
:root[data-font="corbel"] body { font-family: Corbel, "Lucida Grande", "Segoe UI", sans-serif; }
:root[data-font="candara"] body { font-family: Candara, Calibri, "Segoe UI", sans-serif; }
:root[data-font="georgia"] body { font-family: Georgia, "Times New Roman", serif; }
:root[data-font="cambria"] body { font-family: Cambria, Georgia, "Liberation Serif", serif; }
:root[data-font="palatino"] body { font-family: "Palatino Linotype", "Book Antiqua", Palatino, Georgia, serif; }
:root[data-font="times"] body { font-family: "Times New Roman", Times, "Liberation Serif", serif; }

/* Yazı boyutu (ui.font_size) — tüm arayüz orantılı ölçeklenir; yazdırma her zaman %100. */
:root[data-font-size="small"] body { zoom: .94; }
:root[data-font-size="large"] body { zoom: 1.08; }
:root[data-font-size="xlarge"] body { zoom: 1.17; }
@media print { body { zoom: 1 !important; } }

/* Görünüm sayfası yazı tipi örnekleri */
.font-sample-nunito { font-family: 'Nunito', sans-serif; }
.font-sample-system { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; }
.font-sample-segoe { font-family: "Segoe UI Variable Text", "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
.font-sample-calibri { font-family: Calibri, Candara, "Segoe UI", Optima, sans-serif; }
.font-sample-arial { font-family: Arial, Helvetica, "Liberation Sans", sans-serif; }
.font-sample-verdana { font-family: Verdana, Geneva, "DejaVu Sans", sans-serif; }
.font-sample-tahoma { font-family: Tahoma, Verdana, Geneva, sans-serif; }
.font-sample-trebuchet { font-family: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", sans-serif; }
.font-sample-georgia { font-family: Georgia, "Times New Roman", serif; }
.font-sample-cambria { font-family: Cambria, Georgia, "Liberation Serif", serif; }
.choice-hint { color: var(--muted); font-size: 12px; }
/* Süzgeç kartındaki kilit notu: öğretmene "burada neden az seçenek var" sorusunu sordurmadan
   cevaplar. Şeritte kendi satırına iner (flex kabında `flex-basis: 100%`). */
.filter-kilit-notu { flex: 1 0 100%; margin: 0; color: var(--muted); font-size: 12.5px; }
/* Liste sıra numarası (2026-08-25 kullanıcı: "solunda numara olsun 1 2 3 diye"). Sütun dar
   ve soluk: numara yön bulma aracıdır, ada rakip değil. Sayfalar arası devam eder (2. sayfa
   26'dan başlar) — hesap ekranda, sayfa tabanından. */
.liste-sira-baslik { width: 44px; }
.liste-sira { color: var(--muted); font-variant-numeric: tabular-nums; font-size: 12.5px; }
/* Çalışma programı: haftaya doğrudan atlama (gezinme şeridinin sonunda küçük form) ve
   geçmiş hafta bilgisi. Not uyarı rengi TAŞIMAZ: geçmişe eklemek meşru bir iştir. */
.cprog-hafta-atla { display: inline-flex; align-items: center; gap: 6px; margin-left: 8px; }
.cprog-hafta-atla input[type="date"] { min-height: 32px; padding: 2px 8px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface); color: var(--text); font-size: 12.5px; }
.cprog-gecmis-notu { margin: 8px 0 0; color: var(--muted); font-size: 12.5px; }
/* GEZİNTİ ŞERİDİ TABLO KARTININ İÇİNDE (2026-09-05): ayrı filter-card değil, kartın ilk satırı.
   İnce alt çizgi şeridi araç satırından ayırır; exam-cal-bar'ın kendi alt boşluğu sıfırlanır. */
.cprog-gezinti { padding-bottom: 10px; margin-bottom: 12px; border-bottom: 1px solid var(--border); }
.cprog-gezinti .exam-cal-bar { margin-bottom: 0; }
.cprog-gezinti .cprog-gecmis-notu { margin-top: 6px; }
.cprog-yayilma-ornek { grid-column: 1 / -1; color: var(--muted); font-size: 12px; line-height: 1.45; }
/* HIZLI EKLEME — GÜN HÜCRESİNDE (2026-09-05 kullanıcı: "kutuyu tablo içindeki karelere
   koyalım"). Hücre dar: kutu ince, öneri POPOVER gibi hücreden taşarak açılır (position:
   absolute — komşu hücrenin üstüne binebilir, panel popover kalıbıyla aynı). Kap [hidden]
   doğar, cprog-hizli.js açar — genel [hidden] kuralı !important ile gizli tutar. */
.cprog-hizli-hucre { position: relative; margin-top: 6px; }
.cprog-hizli-hucre input[data-cprog-hizli-metin] { width: 100%; min-width: 0; padding: 4px 7px; font-size: 12px; border: 1px dashed var(--border); border-radius: 7px; background: transparent; }
.cprog-hizli-hucre input[data-cprog-hizli-metin]:focus { border-style: solid; background: var(--surface); }
/* ZEMİN TOKEN'I --surface (2026-09-05 kullanıcı: "şeffaflık altta çok fazla"): ilk sürüm
   var(--card) yazmıştı ve O TOKEN TANIMLI DEĞİL — zemin çözülmeyip şeffaf kalıyordu, alttaki
   hücre içinden okunuyordu (tanımsız sınıf dersinin token yüzü). Kademeli liste dikey akar. */
.cprog-hizli-oneri { position: absolute; left: 0; right: -46px; top: calc(100% + 4px); z-index: 30; display: flex; flex-direction: column; gap: 6px; min-width: 240px; padding: 8px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); box-shadow: 0 14px 32px rgba(10, 20, 50, .26); font-size: 12.5px; }
.cprog-hizli-ozet { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; padding: 2px 2px 6px; border-bottom: 1px solid var(--border); }
.cprog-hizli-liste { display: flex; flex-direction: column; gap: 1px; max-height: 236px; overflow-y: auto; }
.cprog-hizli-oge { display: flex; flex-direction: column; align-items: flex-start; gap: 1px; padding: 6px 8px; border: 0; border-radius: 7px; background: transparent; font: inherit; text-align: left; cursor: pointer; }
.cprog-hizli-oge b { font-size: 12.5px; font-weight: 650; }
.cprog-hizli-oge small { color: var(--muted); font-size: 10.5px; }
.cprog-hizli-oge:hover, .cprog-hizli-oge.is-secili { background: var(--surface-soft); }
.cprog-hizli-uyari { color: var(--muted); }
.cprog-hizli-not { flex: 1 0 100%; color: var(--muted); font-size: 11.5px; }
/* Otomatik koç ataması: genel anahtar tablodan önce kendi satırında; pasif koç uyarısı
   kırmızı değil amber — kural durur ama veri kaybolmaz, panik rengi yanlış okutur. */
.koc-otomatik-genel { margin: 0 0 14px; }
.koc-otomatik-tablo select { min-width: 220px; }
.koc-otomatik-uyari { display: block; margin-top: 4px; color: var(--amber); font-size: 11.5px; }
/* Ayarlar ekranı: her ayar kendi kartında, kartlar ızgarada. Tek uzun sütunda hangi ayarın
   nerede bittiği belli olmuyordu. Hepsi tek forma bağlı; alttaki çubuk tek kaydet düğmesi verir. */
.settings-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); gap: 16px; align-items: start; }
.settings-card { padding: 18px 20px; }
.settings-card .choice-group { margin: 0; padding: 0; border: 0; }
.settings-card legend { padding: 0; margin-bottom: 8px; font-size: 15px; font-weight: 800; }
/* Yazı tipi galerisi: admin fontu ismini tahmin ederek değil, gerçek örneğini görerek seçer. */
.settings-card-fonts { grid-column: span 2; }
.settings-font-intro { margin: 0 0 14px; color: var(--muted); font-size: 13px; line-height: 1.55; }
.settings-font-gallery { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 10px; margin-bottom: 12px; }
.font-option { position: relative; display: block; min-width: 0; cursor: pointer; }
.font-option > input { position: absolute; z-index: 2; top: 13px; right: 13px; width: 18px; height: 18px; margin: 0; accent-color: var(--primary); }
.font-option-card { display: grid; gap: 5px; min-height: 150px; padding: 13px 42px 13px 14px; border: 1px solid var(--border); border-radius: 13px; background: var(--surface-soft); color: var(--text); transition: border-color .16s ease, box-shadow .16s ease, transform .16s ease, background .16s ease; }
.font-option:hover .font-option-card { border-color: var(--primary); transform: translateY(-1px); }
.font-option > input:checked + .font-option-card { border-color: var(--primary); background: var(--primary-soft); box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary) 22%, transparent); }
.font-option > input:focus-visible + .font-option-card { outline: none; box-shadow: var(--focus); }
.font-option-heading { display: flex; align-items: center; gap: 7px; min-width: 0; }
.font-option-heading strong { overflow: hidden; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.font-option-heading em { padding: 2px 7px; border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 9px; font-style: normal; font-weight: 800; white-space: nowrap; }
.font-option-card > b { margin-top: 5px; color: var(--brand-navy); font-size: 23px; line-height: 1.05; letter-spacing: -.025em; }
.font-option-card > small { color: var(--text); font-size: 12.5px; line-height: 1.45; overflow-wrap: anywhere; }
.font-option-description { align-self: end; color: var(--muted); font-family: 'Nunito', sans-serif; font-size: 10.5px; line-height: 1.35; }
.settings-actions {
  position: sticky; bottom: 0; z-index: 5;
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px;
  margin-top: 16px; padding: 12px 16px;
  border: 1px solid var(--border); border-radius: var(--radius);
  background: var(--surface); box-shadow: 0 -6px 18px rgba(0,11,73,.06);
}
.settings-actions span { color: var(--muted); font-size: 12.5px; }
@media (max-width: 900px) {
  .settings-card-fonts { grid-column: auto; }
}

/* Ayar formlarındaki tek satırlık sayı/seçim alanları form genişliğini kaplamasın (CSP: satır içi stil yasak) */
.field-narrow { max-width: 280px; }
.card-narrow { max-width: 680px; }
.admission-guide-list { display: grid; gap: 0; margin: 14px 0 0; padding: 0; list-style: none; counter-reset: admission-guide; }
.admission-guide-list li { position: relative; min-width: 0; padding: 15px 0 15px 47px; border-bottom: 1px solid var(--border); color: var(--muted); font-size: 13px; line-height: 1.6; overflow-wrap: anywhere; }
.admission-guide-list li:last-child { border-bottom: 0; padding-bottom: 2px; }
.admission-guide-list li::before { counter-increment: admission-guide; content: counter(admission-guide); position: absolute; left: 0; top: 14px; width: 31px; height: 31px; display: grid; place-items: center; border-radius: 10px; background: var(--primary-soft); color: var(--primary-dark); font-size: 12px; font-weight: 900; }

/* --- Yardımcı sınıflar ---
   Katı CSP (style-src 'self') satır içi style="" niteliğini TAMAMEN bloklar: tarayıcı onu hiç
   uygulamaz. Bu yüzden boşluk/genişlik gibi tek seferlik stiller de sınıfla verilir. */
.spaced-top { margin-top: 1rem; }
.spaced-top-sm { margin-top: .6rem; }
.spaced-top-xs { margin-top: .4rem; }
.spaced-bottom { margin-bottom: 1rem; }
.spaced-bottom-sm { margin-bottom: 10px; }
.section-rule { margin: 1.5rem 0; border: none; border-top: 1px solid var(--border); }
.empty-state-lg { padding: 32px; }
.inline-form { display: inline; }
.push-right { margin-left: auto; }
.grid-auto-fit { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
.grid-auto-fit-top { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); align-items: start; }
.card-heading-inset { padding: 16px 18px 0; }
.input-time { width: 110px; }
.select-compact { max-width: 130px; }
.field-note { color: var(--muted); font-size: 11px; }
.input-rename { height: 32px; min-width: 150px; padding: 0 8px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); font-size: 13px; }

/* İlerleme çubuğu dolgusu: yüzde %5 adımlarla sınıfa çevrilir (dinamik style="" CSP'de çalışmaz) */
.bar-w-0 { width: 0; }
.bar-w-5 { width: 5%; }
.bar-w-10 { width: 10%; }
.bar-w-15 { width: 15%; }
.bar-w-20 { width: 20%; }
.bar-w-25 { width: 25%; }
.bar-w-30 { width: 30%; }
.bar-w-35 { width: 35%; }
.bar-w-40 { width: 40%; }
.bar-w-45 { width: 45%; }
.bar-w-50 { width: 50%; }
.bar-w-55 { width: 55%; }
.bar-w-60 { width: 60%; }
.bar-w-65 { width: 65%; }
.bar-w-70 { width: 70%; }
.bar-w-75 { width: 75%; }
.bar-w-80 { width: 80%; }
.bar-w-85 { width: 85%; }
.bar-w-90 { width: 90%; }
.bar-w-95 { width: 95%; }
.bar-w-100 { width: 100%; }

/* Yoğunluk (ui.density = compact): daha az boşluk, ekrana daha çok satır */
body.density-compact .card { padding: 16px; }
body.density-compact .page-content { padding-block: 18px 40px; }
body.density-compact .page-heading { margin-bottom: 16px; }
body.density-compact .data-table th { padding: 9px 12px; }
body.density-compact .data-table td { padding: 8px 12px; }
body.density-compact .metric-card { min-height: 118px; padding: 14px; }
body.density-compact .approval-card-header { padding: 8px 14px; }
body.density-compact .approval-form { padding: 8px 14px; }

/* Görünüm ayar sayfası renk örnekleri */
.accent-swatch { display: inline-block; width: 17px; height: 17px; border-radius: 50%; vertical-align: -3px; margin-right: 7px; border: 1px solid rgba(0,0,0,.14); }
.accent-swatch-teal { background: #315fd0; }
.accent-swatch-blue { background: #2563eb; }
.accent-swatch-violet { background: #7c3aed; }
.accent-swatch-amber { background: #d97706; }
.accent-swatch-rose { background: #be123c; }
.accent-swatch-v2 { background: linear-gradient(135deg, #2747d6, #2a5fe0); }
.accent-swatch-navy { background: #000b49; }

/* Tema anahtarı: ay/güneş ikon geçişi */
.theme-toggle svg { width: 18px; height: 18px; display: block; }
.theme-toggle .theme-icon-sun { display: none; }
:root[data-theme="dark"] .theme-toggle .theme-icon-moon { display: none; }
:root[data-theme="dark"] .theme-toggle .theme-icon-sun { display: block; }

* { box-sizing: border-box; }
/* `hidden` NİTELİĞİ HER ZAMAN GİZLER (2026-08-26 kullanıcı bildirimi: "karma çözüm"
   listesi ders seçilmeden ve tür karma değilken de görünüyordu). Tarayıcının `[hidden]`
   kuralı UA katmanındadır: `display` veren HERHANGİ bir yazar kuralı onu ezer — burada
   `.field { display: flex }` ve `.cprog-karma-secim { display: flex }` eziyordu ve JS'in
   `el.hidden = true` demesi hiçbir şey yapmıyordu. Depoda bu tuzak yedi kez tek tek
   yamanmıştı; kural artık genel, sekizinci ekran kendiliğinden kapsanır. Bilerek görünür
   kalması gereken eleman `hidden` TAŞIMAZ (tarandı: öyle bir kural yok). */
[hidden] { display: none !important; }
html { color-scheme: light; }
body {
  margin: 0;
  min-height: 100vh;
  background: var(--bg);
  color: var(--text);
  font-family: 'Nunito', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif;
  line-height: 1.5;
}
a { color: var(--primary-dark); }
button, input, select, textarea { font: inherit; }
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }
.container { width: min(1180px, calc(100% - 32px)); margin-inline: auto; }
.page-content { padding-block: 28px 56px; min-height: calc(100vh - 130px); }

.topbar { position: sticky; top: 0; z-index: 20; background: rgba(255,255,255,.94); border-bottom: 1px solid var(--border); backdrop-filter: blur(12px); }
.topbar-inner { min-height: 68px; display: flex; align-items: center; gap: 24px; }
.brand { display: inline-flex; align-items: center; gap: 10px; color: var(--text); text-decoration: none; }
.brand-mark { width: 38px; height: 38px; display: grid; place-items: center; border-radius: 12px; background: linear-gradient(145deg, #17a594, #0a7469); color: white; font-weight: 800; box-shadow: 0 6px 14px rgba(15,139,124,.24); }
.brand strong, .brand small { display: block; line-height: 1.1; }
.brand small { margin-top: 3px; color: var(--muted); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; }
/* min-width: 0 ŞART. Flex öğelerinin varsayılanı min-width:auto'dur; bu, öğenin içeriğinden
   daha dar olmasını ENGELLER. flex-shrink:1 yazılı olsa bile hiçbir şey küçülmez ve üst çubuk
   viewport'u taşar (ölçüldü: 1280px'de 99px taşma). */
.main-nav { display: flex; align-items: center; gap: 4px; flex: 1; min-width: 0; }
.main-nav a, .main-nav span { padding: 8px 11px; border-radius: 9px; color: #435158; text-decoration: none; font-size: 14px; font-weight: 650; }
.main-nav a:hover { background: var(--primary-soft); color: var(--primary-dark); }
.nav-approval { display: inline-flex; align-items: center; gap: 6px; }
.nav-badge { min-width: 20px; height: 20px; display: inline-grid !important; place-items: center; padding: 0 6px !important; border-radius: 999px !important; background: var(--danger) !important; color: #fff !important; font-size: 10px !important; font-weight: 850 !important; line-height: 1 !important; }
.nav-soon { opacity: .48; cursor: not-allowed; }
.account { display: flex; align-items: center; gap: 9px; font-size: 13px; min-width: 0; flex-shrink: 0; }
.account form { margin: 0; }
.account-name { max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 650; }
.role-badge { padding: 4px 8px; border-radius: 999px; background: var(--primary-soft); color: var(--primary-dark); font-size: 11px; font-weight: 800; }
.link-button { border: 0; background: none; color: var(--danger); cursor: pointer; padding: 6px; font-weight: 700; }
.nav-toggle { display: none; margin-left: auto; border: 1px solid var(--border); background: var(--surface); border-radius: 9px; padding: 7px 10px; }

.card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); padding: 24px; }
/* DİKEY RİTİM: .card'ın kendi kenar boşluğu YOK — ızgara içinde (content-grid) boşluğu grid
   gap verir, orada margin çift boşluk yapardı. Ama sayfanın DOĞRUDAN çocuğu olan kartlar
   birbirine yapışıyordu (ölçüldü: ardışık iki kart arası 0px; başlık ve metrik ızgarası kendi
   alt boşluğuna sahip olduğu için sorun yalnız kartlarda görünüyordu). Kural bu yüzden yalnız
   doğrudan çocuklara veriliyor ve son karta uygulanmıyor (sayfa altında fazla boşluk kalmasın). */
.page-content > .card:not(:last-child),
.page-content > .content-grid:not(:last-child) { margin-bottom: 22px; }
.card-heading h1, .card-heading h2 { margin: 3px 0 8px; line-height: 1.2; }
.card-heading p { margin: 0; color: var(--muted); }
.eyebrow { margin: 0; color: var(--primary-dark) !important; font-size: 12px; font-weight: 850; letter-spacing: .1em; text-transform: uppercase; }

.auth-page { background: radial-gradient(circle at 15% 15%, #dff6f0 0, transparent 32%), radial-gradient(circle at 85% 85%, #e7eef9 0, transparent 35%), var(--bg); }
.auth-page .page-content { display: grid; place-items: center; min-height: calc(100vh - 65px); }
.auth-shell { width: min(460px, 100%); }
.setup-shell { width: min(680px, 100%); }
.auth-brand { display: flex; justify-content: center; align-items: center; gap: 13px; margin-bottom: 20px; }
.auth-brand strong, .auth-brand span { display: block; }
.auth-brand strong { font-size: 22px; }
.auth-brand span { color: var(--muted); font-size: 13px; }
.brand-mark-large { width: 52px; height: 52px; border-radius: 16px; font-size: 22px; }
.auth-card { padding: 30px; }
.auth-card .card-heading { margin-bottom: 22px; }
/* ZORUNLU PAROLA YENİLEME (2026-08-21). Sayfa menüsüz açılır (hideNavigation): kilitli
   kullanıcının tek işi bu form. Kurallar ÖNCEDEN yazılır ki kullanıcı politikayı deneme
   yanılmayla öğrenmesin. */
.parola-yenile-karti { max-width: 520px; margin: 40px auto; }
/* PAROLA ÖNERİSİNDEKİ HESAP BİLGİLERİ (2026-08-23): kullanıcı hangi hesapla girdiğini
   görsün. İki sütun (etiket · değer); dar ekranda alt alta iner. */
.parola-hesap { display: grid; gap: 6px; margin: 0 0 18px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-2, var(--bg)); }
.parola-hesap > div { display: grid; grid-template-columns: 120px minmax(0, 1fr); gap: 10px; align-items: baseline; }
.parola-hesap dt { color: var(--muted); font-size: 12px; }
.parola-hesap dd { margin: 0; font-size: 14px; font-weight: 600; overflow-wrap: anywhere; }
/* İlk giriş ekranındaki düzenlenebilir hesap alanları: parola alanlarından görsel olarak
   ayrılsın diye kendi çerçevesinde (aynı formun içinde, tek "mevcut parola" doğrulamasıyla). */
.parola-bilgi-alani { display: grid; gap: 10px; margin: 0 0 16px; }
@media (max-width: 520px) { .parola-hesap > div { grid-template-columns: minmax(0, 1fr); gap: 0; } }

.parola-kural { margin: 0 0 18px; padding-left: 20px; color: var(--muted); font-size: 13px; line-height: 1.6; }
.parola-kural strong { color: var(--text); }
.parola-yenile-cikis { margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--border); }
.auth-help { margin: 20px 0 0; font-size: 13px; color: var(--muted); text-align: center; }

.stack-form { display: flex; flex-direction: column; gap: 15px; }
/* Parola göster/gizle: sarmalı ve düğmeyi app.js kuruyor (her parola alanına otomatik).
   Girdinin sağ boşluğu düğme kadar artırılır ki yazı gözün altına girmesin. */
.password-wrap { position: relative; display: flex; width: 100%; }
.password-wrap input { padding-right: 40px; }
.password-toggle-btn { position: absolute; right: 6px; top: 50%; transform: translateY(-50%); display: inline-flex; align-items: center; justify-content: center; width: 30px; height: 30px; padding: 0; border: 0; border-radius: 8px; background: none; color: var(--muted); cursor: pointer; }
.password-toggle-btn:hover, .password-toggle-btn:focus-visible { color: var(--text); background: var(--surface); }
/* SABİT 1fr 1fr DEĞİL: üç alanlı gruplarda üçüncü alan tek başına alt satıra düşüyor ve her
   grup bir "öksüz satır" bırakıyordu — 19 alanlı form gereksiz yere iki kat uzuyordu (ölçüldü:
   6 grubun 6'sı da öksüz satır üretiyordu).
   auto-fit + minmax: yer varsa 3 alan yan yana, dar kapsayıcıda kendiliğinden 2'ye sonra 1'e
   iner. İki alanlı mevcut formlar DEĞİŞMEZ: auto-fit boş kolonu topladığı için yine 2 sütun. */
.form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 13px; }
.field { display: flex; flex-direction: column; gap: 6px; }
/* legend, span ile AYNI kurala bağlı: onay kutusu grupları <fieldset class="field"><legend> ile
   yazılıyor ve legend'ın tarayıcı varsayılanı (16px/400) alan etiketlerinin yanında bariz
   kaçıyordu. Sıfırlama da gerekiyor — legend'ın kendi padding'i var. */
.field span, .field legend { font-size: 13px; font-weight: 750; }
/* Alan altı ipucu (2026-08-25): bu kural YALNIZ koçluk formunda tanımlıydı, başka
   ekranda `<small>` gövde puntosunda kocaman basılıyordu (kayıt görüşmesinde ölçüldü). */
.field > small { display: block; margin-top: 3px; color: var(--muted); font-size: 11.5px; font-weight: 500; line-height: 1.35; }
.field legend { padding: 0; }
/* TEK GİRDİ BOYU (2026-08-18, ölçüldü: filtre formları 40px/14px, kayıt formları 46-48px/16px
   iki ayrı boy kullanıyordu — kullanıcı "genel boyut sorunu" olarak gördü). Taban 40px/14px. */
.field input, .field select, .field textarea { width: 100%; min-height: 40px; padding: 8px 11px; border: 1px solid #cbd7da; border-radius: 10px; background: #fff; color: var(--text); font-size: 14px; outline: 0; transition: border-color .15s, box-shadow .15s; }
/* Telefonda 16px kalır: iOS, 16px altındaki girdiye odaklanınca sayfayı kendiliğinden yakınlaştırır. */
@media (max-width: 700px) { .field input, .field select, .field textarea { font-size: 16px; } }
/* ONAY KUTUSU VE RADYO FORM ALANI DEGILDIR (2026-09-01'de olculdu): ustteki width:100%
   kurali, `field` sinifli fieldset icindeki CHECKBOX'a da uygulanip kutuyu 259px yapiyordu —
   kutu satiri yutuyor, yanindaki ad 0px'e buzulup HARF HARF dikey akiyordu (koc formu
   koordinator listesi; kullanici ekran goruntusuyle bildirdi). Ozgulluk (0,2,1) > (0,1,1):
   her ekranda kazanir, yalniz kutu/radyo tiplerini etkiler. */
.field input[type="checkbox"], .field input[type="radio"] { width: auto; min-height: 0; padding: 0; }

.field textarea { min-height: 112px; resize: vertical; }
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--primary); box-shadow: var(--focus); }
.field input:disabled { background: #edf2f3; color: var(--muted); }
/* text-decoration TABANDA kapatılır (2026-08-18): yalnız .button-secondary'de yazılıydı, bu
   yüzden <a class="button button-primary"> bağlantı alt çizgisini miras alıyordu — ölçüldü,
   7 ekranda 59 düğme-bağlantısının 26'sı altı çiziliydi ("Randevu Oluştur" ekran görüntüsü). */
.button { display: inline-flex; align-items: center; justify-content: center; gap: 7px; min-height: 38px; border: 1px solid transparent; border-radius: 10px; padding: 8px 14px; cursor: pointer; font-size: 14px; font-weight: 700; line-height: 1.2; text-align: center; text-decoration: none; transition: background .15s, transform .1s; }
.button:active { transform: scale(.99); }
.button-primary { background: var(--primary); color: var(--on-primary); box-shadow: 0 4px 10px rgba(15,139,124,.2); }
.button-primary:hover { background: var(--primary-dark); }
.button-full { display: flex; width: 100%; }
.button:disabled { opacity: .5; cursor: not-allowed; }
.button-secondary { background: #fff; border-color: #cbd7da; color: #334249; text-decoration: none; }
.button-secondary:hover { background: #f1f5f6; }
.button-ghost { background: transparent; border-color: transparent; color: var(--muted); text-decoration: none; }
.button-ghost:hover { background: #eaf0f1; color: var(--text); }
.button-small { min-height: 34px; padding: 6px 11px; font-size: 12px; }

.flash { margin-bottom: 18px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 11px; background: var(--surface); }
.flash-error { border-color: #f1c5c5; background: var(--danger-soft); color: #8f2929; }
.flash-success { border-color: #bce4cd; background: var(--success-soft); color: var(--success); }
.flash-warning { border-color: #ecd4a9; background: #fff8e9; color: #8b5b12; }
.flash-info { border-color: #c9d9ea; background: #f0f6fc; color: #315f8f; }

.hero { display: flex; justify-content: space-between; align-items: center; gap: 24px; margin-bottom: 22px; padding: 26px 28px; border-radius: 20px; color: #fff; background: linear-gradient(115deg, #0c756a, #139383 55%, #2b7386); box-shadow: 0 14px 34px rgba(12,117,106,.18); }
.hero h1 { margin: 4px 0 6px; font-size: clamp(23px, 3vw, 31px); line-height: 1.15; }
/* Günün sözü: karşılamanın sağında, cam panel; açılışta yavaşça belirir ve KALIR.
   Zemin hero'nun koyu gradyanı olduğundan renkler sabit beyaz tonlar — temadan bağımsız. */
.hero-quote { min-width: 0; margin: 0; padding: 16px 18px; border: 1px solid rgba(255,255,255,.22); border-radius: 14px; background: rgba(255,255,255,.1); backdrop-filter: blur(4px); animation: hero-quote-in 1.8s ease-out both; }
.hero-quote blockquote { margin: 0 0 8px; color: #fff; font-size: 14px; line-height: 1.55; font-style: italic; }
.hero-quote figcaption { color: rgba(255,255,255,.85); font-size: 12px; font-weight: 700; }
.hero-quote figcaption small { display: block; margin-top: 2px; color: rgba(255,255,255,.6); font-size: 10.5px; font-weight: 500; }
@keyframes hero-quote-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) { .hero-quote { animation: none; } }
@media (max-width: 900px) { .hero-quote { display: none; } }
.hero p { margin: 0; color: rgba(255,255,255,.82); }
.hero .eyebrow { color: #bcf4e9 !important; }
.hero-role { flex: none; padding: 7px 12px; border: 1px solid rgba(255,255,255,.26); border-radius: 999px; background: rgba(255,255,255,.11); font-size: 12px; font-weight: 800; }

.metric-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; margin-bottom: 22px; }
/* METRIK SERIDININ ALTINDAKI SUZGEC NOTU (2026-08-24): kartlar yalnız "yapacağımız" denemeleri
   sayıyor; süzülen kayıt sayısı yazılmazsa kullanıcı onları kaybolmuş sanar. Metrik şeridinin
   `margin-bottom`u kadar yukarı çekilir ki not kartlara ait görünsün. */
.pano-suzgec-notu { margin: -14px 0 20px; color: var(--muted); font-size: 13px; line-height: 1.5; }
.metric-card { position: relative; overflow: hidden; min-height: 154px; padding: 20px; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); box-shadow: var(--shadow); }
.metric-card::after { content: ""; position: absolute; width: 70px; height: 70px; border-radius: 50%; right: -22px; top: -22px; background: currentColor; opacity: .08; }
.metric-card span, .metric-card small { display: block; }
.metric-card span { color: var(--muted); font-size: 13px; font-weight: 750; }
.metric-card strong { display: block; margin: 8px 0 5px; font-size: 36px; line-height: 1; }
.metric-card small { color: var(--muted); font-size: 12px; }
/* DERS DERS DÖKÜM (2026-08-23): metrik kartının altına ders adı + kalan hak listesi.
   Sayı sağa yaslı hizalanır — göz aşağı inerken rakamlar tek sütunda okunur.
   Kart yüksekliği ızgaradaki diğerlerine uysun diye ekrandaki satır sayısı 4 ile sınırlı
   (fazlası "+N ders daha" olarak yazılır; gizleme sessiz değildir). */
/* Toplam rakamı kalkınca döküm kartın gövdesi oldu: üstten biraz nefes, satırlar biraz
   daha büyük (12 -> 13 px) — kart yüksekliği komşularıyla aynı kalsın diye tavan hâlâ 4. */
.metric-breakdown { margin: 12px 0 0; padding: 0; list-style: none; }
.metric-breakdown li { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; padding: 4px 0; border-top: 1px solid var(--border); font-size: 13px; }
.metric-breakdown li:first-child { border-top: 0; }
.metric-breakdown span { color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.metric-breakdown b { flex: none; color: var(--text); font-size: 15px; font-weight: 800; font-variant-numeric: tabular-nums; }
.metric-breakdown-more span { font-style: italic; }
.metric-breakdown-more b { color: var(--muted); }

/* LİSTEDEKİ DERS DÖKÜMÜ (2026-08-23): toplam rakamın altında "ders adı — kalan hak".
   Sayı sağa yaslı ve tabular: göz sütun boyunca aynı hizada iner. Genişlik hücreyle
   sınırlı; uzun ders adı kırpılır, satır yüksekliği sabit kalır (tablo derleme kuralı). */
.paket-dokum { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; max-width: 150px; }
.paket-dokum span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.paket-dokum b { flex: none; color: var(--text); font-weight: 700; font-variant-numeric: tabular-nums; }
.paket-dokum-more span { font-style: italic; }

/* Plan seçicisinde konunun ünitesi/kataloğu (2026-08-23): "8. Sınıf" düğmesi LGS'yi de
   getirdiği için konunun nereden geldiği chip üstünde yazar. Soluk ve küçük: seçimi değil
   ayırt etmeyi kolaylaştırır. */
.chip-unite { color: var(--muted); font-weight: 600; font-size: 11px; }

/* DENEME SONUÇLARI KARTI (2026-08-23) — tablo çipleri, gelişim ızgarası, giriş formu. */
.deneme-ders-cip { display: inline-flex; align-items: baseline; gap: 5px; margin: 2px 6px 2px 0; padding: 2px 8px; border: 1px solid var(--border); border-radius: 999px; background: var(--bg); font-size: 12px; }
.deneme-ders-cip span { color: var(--muted); }
.deneme-ders-cip b { color: var(--text); font-variant-numeric: tabular-nums; }
.deneme-grafik-izgara { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; margin-top: 8px; }
.line-chart { margin: 0; padding: 10px 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); }
.line-chart-title { font-size: 13px; font-weight: 750; color: var(--text); margin-bottom: 4px; }
.line-chart-title small { color: var(--muted); font-weight: 500; }
.line-chart-grid { stroke: var(--border); stroke-width: 1; }
.line-chart-axis { fill: var(--muted); font-size: 10px; }
.line-chart-path { fill: none; stroke: var(--primary); stroke-width: 2.2; stroke-linejoin: round; stroke-linecap: round; }
.line-chart-dot { fill: var(--surface); stroke: var(--primary); stroke-width: 2; }
.line-chart-value { fill: var(--text); font-size: 10px; font-weight: 700; }
.deneme-yorum { margin-top: 12px; border: 1px dashed var(--border); border-radius: 12px; padding: 8px 12px; }
.deneme-yorum > summary { cursor: pointer; display: flex; gap: 10px; align-items: baseline; flex-wrap: wrap; }
.deneme-yorum > summary span { color: var(--muted); font-size: 12px; }
.deneme-yorum-metin { margin: 10px 0 0; line-height: 1.6; }
/* SONUÇ GİRİŞİ — düz akış (2026-08-23). Çerçeve yok: kartın kendi başlık düzeniyle (overview-
   section-heading) devam eder. Seçici satırı: <select> esner, "Yeni deneme" sağında düğme
   gibi durur; açılınca formu alt satıra iner (flex-basis 100%). */
.deneme-giris { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--border); }
.deneme-sec-satir { display: flex; align-items: flex-start; gap: 10px; flex-wrap: wrap; }
.deneme-sec-form { display: flex; align-items: center; gap: 8px; flex: 1 1 420px; min-width: 0; }
.deneme-sec-form select { flex: 1; min-width: 0; min-height: 36px; padding: 6px 10px; }
.deneme-sec-form .button { flex: 0 0 auto; min-height: 36px; }
.deneme-tanimla > summary.button { min-height: 36px; }
.deneme-bos-not { margin: 6px 0; color: var(--muted); font-size: 13px; flex: 1 1 420px; }
.deneme-tanimla { flex: 0 0 auto; }
.deneme-tanimla > summary { list-style: none; cursor: pointer; }
.deneme-tanimla > summary::-webkit-details-marker { display: none; }
.deneme-tanimla[open] { flex: 1 0 100%; }
.deneme-tanimla[open] > summary { display: inline-flex; margin-bottom: 10px; }
.deneme-tanimla-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 170px), 1fr)); gap: 10px; align-items: end; padding: 12px 14px; border: 1px dashed var(--border); border-radius: 12px; background: var(--bg); }
.deneme-tanimla-form .field { margin: 0; }
.deneme-tanimla-form small { grid-column: 1 / -1; color: var(--muted); font-size: 12px; }
@media (max-width: 760px) { .deneme-tanimla-form { grid-template-columns: minmax(0, 1fr); } }
/* Deneme giriş oturumu — ev stili (2026-08-23): çerçeveli fieldset yerine diğer kartlardaki
   başlık düzeni. Başlığın kendi dolgusu kartın dolgusuyla çakışmasın diye yatay dolgu sıfır. */
.deneme-oturum { margin: 0 0 14px; }
.deneme-oturum .overview-section-heading { padding: 10px 0; }
.deneme-oturum .overview-section-heading h2 { font-size: 15px; }
/* Sayı sütunları sabit: beş sütun tam genişliğe yayılınca "Ders" ile "Soru" arasında koca
   boşluk kalıyordu (kullanıcı bildirdi). Ders esner, sayılar 110 px'te durur.
   901px'e KOŞULLU: responsive-card-table kart kipinde hücreyi width:100% yapar; koşulsuz
   yazılan 110px o kuralı özgüllükle ezip kart satırlarını daraltıyordu (ölçüldü: 375px
   ekranda hücre 110px kalıyordu). */
@media (min-width: 901px) {
  .deneme-giris-tablo th.numeric, .deneme-giris-tablo td.numeric { width: 110px; }
}
.deneme-giris-tablo input[type="number"] { width: 100%; max-width: 96px; padding: 5px 8px; }
/* YETKİ MATRİSİ (2026-09-20) */
.yetki-listeler { display: grid; gap: 18px; margin-top: 10px; }
.yetki-listeler h3 { margin: 0 0 6px; font-size: 13.5px; }
.yetki-listeler ul { margin: 0; padding-left: 18px; font-size: 13.5px; line-height: 1.6; }
.yetki-cok-sutun { columns: 3 260px; column-gap: 28px; }
/* GÖRÜŞME UYARILARI — Öğrenci 360 (2026-09-20): kartın başında, yön rozeti + notun tamamı. */
.gorusme-uyarilar { margin: 0 0 12px; padding: 10px 14px; border: 1px solid var(--danger); border-radius: 12px; background: var(--danger-soft); }
.gorusme-uyarilar-baslik { display: block; margin-bottom: 6px; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--danger); }
.gorusme-uyarilar ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; }
.gorusme-uyarilar li p { margin: 3px 0 0; line-height: 1.45; }
.gorusme-uyarilar li small { color: var(--muted); }
/* KOÇ TAKİP LİSTESİ (2026-09-20): hücre = tarih + "kaç gün önce"; ton eşiğe göre (koc_takip_tonu). */
.takip-tablo td { vertical-align: middle; }
.takip-tablo td small { display: block; color: var(--muted); }
.takip-hucre { display: inline-block; padding: 3px 9px; border-radius: 9px; line-height: 1.25; }
.takip-hucre small { font-size: 11.5px; }
.takip-gecikti { background: var(--danger-soft); }
.takip-gecikti small { color: var(--danger); font-weight: 700; }
.takip-yok { background: var(--warning-soft); }
.takip-yok small { color: var(--text); font-weight: 600; }
/* ONAY TABLOSU (2026-09-20): öğrenci başına tek kart, satır = ders; sonuç + konu + ders raporu aynı satırda. */
.onay-tablo-kart { margin-bottom: 14px; }
.onay-tablo-kart .card-heading h2 a { color: inherit; text-decoration: none; }
.onay-tablo-kart .card-heading h2 a:hover { color: var(--primary); text-decoration: underline; }
.onay-tablo td { vertical-align: top; }
.onay-tablo td small { display: block; }
.onay-tablo select, .onay-tablo input[type="text"], .onay-tablo textarea { width: 100%; min-height: 36px; padding: 6px 8px; font-size: 13.5px; }
.onay-tablo textarea { resize: vertical; line-height: 1.35; }
.onay-tablo select, .onay-tablo input[type="text"], .onay-tablo textarea, .optik-ders-tablo input, .deneme-toplu-hucre input { border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); }
.onay-tablo select:focus, .onay-tablo input:focus, .onay-tablo textarea:focus, .optik-ders-tablo input:focus, .deneme-toplu-hucre input:focus { outline: 2px solid var(--primary); outline-offset: 1px; border-color: var(--primary); }
@media (min-width: 901px) {
  .onay-tablo th:nth-child(1) { width: 120px; } .onay-tablo th:nth-child(3) { width: 84px; }
  .onay-tablo th:nth-child(4) { width: 190px; } .onay-tablo th:nth-child(5) { width: 20%; } .onay-tablo th:nth-child(6) { width: 30%; }
}
.onay-tablo-eylem { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--border); }
.ders-raporu { margin: 4px 0 0; padding: 6px 10px; border-left: 3px solid var(--primary); border-radius: 0 8px 8px 0; background: var(--surface-soft); font-size: 13px; line-height: 1.45; white-space: normal; }
/* İKİNCİ ONAY KUTUSU (2026-09-20): süren işi olan kaydın silinmesi — risk listesi + ayrı, açık bir onay. */
.ikinci-onay { border: 2px solid var(--danger); background: var(--danger-soft); margin-bottom: 16px; }
.ikinci-onay h2 { margin: 0 0 8px; font-size: 1.05rem; color: var(--text); }
.ikinci-onay ul { margin: 0 0 10px; padding-left: 20px; font-weight: 600; }
.ikinci-onay .form-actions { position: static; display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-top: 12px; }
/* OPTİK DOSYA AKTARIMI (2026-09-20): cetvel sabit genişlikli yazıyla; kaydırma kendi kabında. */
.optik-cetvel { margin: 0; padding: 12px; overflow-x: auto; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); color: var(--text); font: 12px/1.35 ui-monospace, Consolas, "Courier New", monospace; white-space: pre; }
.optik-alanlar { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 14px; }
.optik-alan { display: flex; gap: 8px; margin: 0; padding: 8px 12px 10px; border: 1px solid var(--border); border-radius: 10px; }
.optik-alan legend { padding: 0 6px; font-size: 12px; color: var(--muted); }
.optik-alan input, .optik-alanlar > .field input { width: 110px; }
.optik-ders-tablo input[type="number"] { width: 100px; }
/* İki kitapçık bloğu (2026-09-24): kapalıyken içerik AÇIKÇA gizlenir — .optik-alanlar display verdiği için UA kuralı ezilir. */
.optik-kitapcik { margin: 14px 0; padding: 10px 14px; border: 1px solid var(--border); border-radius: 10px; }
.optik-kitapcik > summary { cursor: pointer; }
.optik-kitapcik > summary small { color: var(--muted); }
.optik-kitapcik[open] > summary { margin-bottom: 10px; }
.optik-kitapcik:not([open]) > *:not(summary) { display: none; }
#optik-form .form-actions { position: static; margin-top: 14px; }  /* iki eylem çubuğu var; yapışkan olsalar üst üste biner */
.optik-anahtar { width: 100%; min-width: 260px; font-family: ui-monospace, Consolas, monospace; letter-spacing: .08em; text-transform: uppercase; }
/* KATLANIR KART (2026-09-20): kapalı <details> içeriği AÇIKÇA gizlenir — .table-wrap gibi display veren sınıf
   tarayıcının kendi kuralını ezer (deponun [hidden] / <details> dersi). */
.katlanir-kart:not([open]) > *:not(summary) { display: none; }
.katlanir-kart > summary { cursor: pointer; padding: 10px 2px; }
.katlanir-kart > summary small { color: var(--muted); font-weight: 400; }
.online-deneme-karti { margin-top: 16px; }
.optik-veri { font-family: ui-monospace, Consolas, monospace; font-size: 13px; white-space: pre; overflow-x: auto; }
/* BUGÜN YAPILACAKLAR ŞERİDİ (2026-09-19): pano başında tek satır; kalemler ilgili ekrana götürür. */
.bugun-serit { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 16px; padding: 10px 14px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface); }
.bugun-serit-baslik { margin-right: 4px; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
.bugun-serit-bos { color: var(--muted); font-size: 13.5px; }
.bugun-oge { display: inline-flex; align-items: baseline; gap: 6px; min-height: 34px; padding: 6px 12px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface-soft); color: var(--text); font-size: 13.5px; text-decoration: none; }
.bugun-oge b { font-size: 15px; font-variant-numeric: tabular-nums; }
.bugun-oge:hover { border-color: var(--primary); }
.bugun-oge-uyari { border-color: transparent; background: var(--warning-soft); color: var(--text); }
/* TOPLU SONUÇ GİRİŞİ (2026-09-19): satır = öğrenci, sütun = ders (D/Y). Ad sütunu yatay kaydırmada yapışkan. */
.deneme-toplu-tablo { min-width: 0; }
.data-table.deneme-toplu-tablo th, .data-table.deneme-toplu-tablo td { padding: 4px 2px; text-align: center; white-space: nowrap; }
.deneme-toplu-tablo thead th small { color: var(--muted); font-weight: 500; }
.data-table.deneme-toplu-tablo .deneme-toplu-ad { position: sticky; left: 0; z-index: 1; min-width: 150px; max-width: 200px; padding-left: 12px; text-align: left; white-space: normal; background: var(--surface); text-transform: none; letter-spacing: 0; font-size: 12.5px; }
.deneme-toplu-tablo .deneme-toplu-ad small { display: block; color: var(--muted); font-weight: 400; }
.deneme-toplu-tablo .deneme-toplu-dy { color: var(--muted); font-size: .72rem; font-weight: 600; }
.deneme-toplu-tablo thead tr:first-child th[colspan] { border-left: 1px solid var(--border); }
.data-table.deneme-toplu-tablo .deneme-toplu-hucre input { width: 100%; min-width: 34px; max-width: 46px; padding: 4px 1px; text-align: center; -moz-appearance: textfield; appearance: textfield; }
.deneme-toplu-hucre input::-webkit-outer-spin-button, .deneme-toplu-hucre input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.deneme-toplu-hucre:nth-child(even) { border-left: 1px solid var(--border); }
.deneme-toplu-hucre input.is-hatali { border-color: var(--danger); background: var(--danger-soft); }
.deneme-toplu-tablo td[data-net] { min-width: 64px; font-weight: 600; font-variant-numeric: tabular-nums; }
.deneme-toplu-kart .exam-view-tabs { margin: 0 0 8px; }

/* JS varsa "Dersleri Getir" düğmesi gereksiz: seçim değişince form kendini gönderir. */
/* JS varken "Dersleri Getir" gizli — sınıf documentElement'te (kısmi yenileme formu yeniden
   bassa da kalır; form üstünde olsaydı her tazelemede düğme geri belirirdi). */
.deneme-sec-js [data-deneme-getir] { display: none; }

.metric-teal { color: var(--primary); } .metric-blue { color: var(--blue); } .metric-violet { color: var(--violet); } .metric-amber { color: var(--amber); }
.metric-link { display: block; color: inherit; text-decoration: none; transition: transform .15s, border-color .15s, box-shadow .15s; }
.metric-link:hover { transform: translateY(-2px); border-color: #bfd4d8; box-shadow: 0 12px 30px rgba(22,33,38,.1); }

.dashboard-workspace { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(330px, .8fr); gap: 18px; align-items: start; }
.dashboard-card-heading { display: flex; justify-content: space-between; align-items: center; gap: 18px; margin-bottom: 14px; }
.dashboard-card-heading h2 { margin: 3px 0 0; font-size: 20px; }
.dashboard-card-heading > a { flex: none; font-size: 12px; font-weight: 800; text-decoration: none; }
.upcoming-list { border-top: 1px solid var(--border); }
.upcoming-item { display: grid; grid-template-columns: 82px minmax(0, 1fr) 52px; align-items: center; gap: 13px; padding: 13px 4px; border-bottom: 1px solid var(--border); color: var(--text); text-decoration: none; }
.upcoming-item:last-child { border-bottom: 0; padding-bottom: 2px; }
.upcoming-item:hover .upcoming-main > strong { color: var(--primary-dark); }
.upcoming-date, .upcoming-main, .upcoming-balance { min-width: 0; }
.upcoming-date strong, .upcoming-date small, .upcoming-main strong, .upcoming-main small, .upcoming-balance strong, .upcoming-balance small { display: block; }
.upcoming-date strong { color: var(--muted); font-size: 12px; }
.upcoming-date.is-today strong { color: var(--primary-dark); }
.upcoming-date small, .upcoming-main small, .upcoming-balance small { color: var(--muted); font-size: 11px; }
.upcoming-main strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
.upcoming-main small { margin-top: 2px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.upcoming-balance { text-align: right; }
.upcoming-balance strong { color: var(--primary-dark); font-size: 18px; }
.dashboard-empty { padding: 36px 12px 18px; }
.operation-links { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
.operation-links a { min-width: 0; padding: 12px; border: 1px solid var(--border); border-radius: 11px; background: var(--surface-soft); color: var(--text); text-decoration: none; }
.operation-links a:hover { border-color: #b7c5ee; background: var(--primary-soft); }
.operation-links span, .operation-links strong, .operation-links small { display: block; }
.operation-links span { color: var(--muted); font-size: 11px; font-weight: 750; }
.operation-links strong { margin: 3px 0; font-size: 23px; line-height: 1; }
.operation-links small { color: var(--muted); font-size: 9px; }
.monthly-outcomes { margin-top: 20px; padding-top: 17px; border-top: 1px solid var(--border); }
.monthly-outcomes-heading { display: flex; justify-content: space-between; margin-bottom: 11px; font-size: 12px; }
.monthly-outcomes-heading span { color: var(--muted); }
.outcome-row { display: grid; grid-template-columns: 70px minmax(80px, 1fr) 24px; align-items: center; gap: 8px; margin-top: 8px; font-size: 11px; }
.outcome-progress { width: 100%; height: 7px; overflow: hidden; border: 0; border-radius: 999px; background: #edf1f2; appearance: none; -webkit-appearance: none; }
.outcome-progress::-webkit-progress-bar { border-radius: 999px; background: #edf1f2; }
.outcome-progress::-webkit-progress-value { border-radius: 999px; background: var(--primary); }
.outcome-progress::-moz-progress-bar { border-radius: 999px; background: var(--primary); }
.outcome-row strong { text-align: right; }
.outcome-no_show::-webkit-progress-value { background: var(--amber); }.outcome-no_show::-moz-progress-bar { background: var(--amber); }
/* Sunucu kaynakları kartı (/system.php, 2026-09-02): satır = ad + değer + doluluk çubuğu + açıklama. */
.kaynak-listesi { display: grid; gap: 14px; }
/* Panoda ayrıntı metni basılmaz, satırlar kısadır: dar kartta tek sütun, geniş ekranda
   yan yana. minmax'in alt sınırı en uzun değerin ("1,2 GB kullanılabilir") altına
   inmemeli, yoksa sayı sarar. ÖLÇÜLDÜ (2026-09-04, tarayıcıda): yalın ızgarada sütunlar
   birbirinden ayrışmıyor ve beş ölçü 4+1 diye kırılıp son satır tek başına kalıyordu —
   her ölçü kendi kutusunda duruyor, kutu sınırı sütunun nerede bittiğini söylüyor. */
.kaynak-listesi-ozet { grid-template-columns: repeat(auto-fit, minmax(195px, 1fr)); gap: 10px; }
/* Yedi ölçü asal sayıdır: hiçbir sütun sayısı tam bölmez. Serbest bırakılınca geniş
   ekranda 6+1 çıkıp son kutu tek başına kalıyordu (ölçüldü); dört sütunda 4+3 duruyor. */
@media (min-width: 1100px) { .kaynak-listesi-ozet { grid-template-columns: repeat(4, 1fr); } }
.kaynak-listesi-ozet .kaynak-satir { background: var(--surface-soft); border: 1px solid var(--border);
  border-radius: 10px; padding: 10px 12px; align-content: start; }
.kaynak-satir { display: grid; gap: 5px; }
.kaynak-ust { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.kaynak-ad { font-weight: 700; font-size: 13.5px; }
.kaynak-deger { font-weight: 700; font-size: 13px; white-space: nowrap; }
.kaynak-deger.is-uyari { color: var(--danger); }
.kaynak-detay { color: var(--muted); font-size: 12px; }
.kaynak-bar-uyari::-webkit-progress-value { background: var(--danger); }
.kaynak-bar-uyari::-moz-progress-bar { background: var(--danger); }
.outcome-cancelled::-webkit-progress-value { background: #94a3a8; }.outcome-cancelled::-moz-progress-bar { background: #94a3a8; }
.dashboard-quick-actions { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 20px; }

.footer { padding: 20px 0; border-top: 1px solid var(--border); color: var(--muted); font-size: 12px; text-align: center; }
code { padding: 2px 5px; border-radius: 5px; background: #edf2f3; }
/* Koyu temada açık zemin + miras açık metin 1.0-1.76 kalıyordu (ölçüldü, system.php kodları). */
:root[data-theme="dark"] code { background: #1b2742; }

.page-heading { margin-bottom: 20px; }
.page-heading h1 { margin: 3px 0 5px; font-size: clamp(23px, 2.6vw, 30px); line-height: 1.15; }
.page-heading p { margin: 0; color: var(--muted); }
.heading-row { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 18px; }
.heading-row > :first-child { min-width: 0; flex: 1 1 280px; }
.heading-row > /* BAŞLIKTAKİ SEÇİCİ + DÜĞME (2026-08-23): "Rapor Oluştur" gibi bir düğme öğrenci seçmeden
   iş yapamıyorsa seçici düğmenin YANINDA durur — kullanıcıyı listeye atıp geri getirmek
   yerine tek adımda hedefe götürür.
   KENDİ SATIRINDA (flex-basis 100%): ölçüldü, başlık eylem şeridi 477 px ile sınırlı; seçici
   diğer iki düğmenin yanına sıkıştırılınca 220 px'e düşüp kendi içinde kırılıyor ve şerit
   102 px'e çıkıyordu. Kendi satırında seçici 617×40, şerit 86 px. */
.heading-picker { display: flex; align-items: center; gap: 8px; flex: 1 0 100%; }
.heading-picker select { flex: 1; min-width: 0; }
.heading-picker .button { flex: 0 0 auto; }

/* DERS HAKKI EKLE ŞERİDİ (2026-08-23, kullanıcı: "ders hakkı ekle ve öğrenci seçimi altta
   olsun, pdf excelin daha çok görünür"). Başlıktaki üç öğe yan yanayken asıl iş, iki dışa
   aktarma düğmesiyle aynı ağırlıktaydı. Kendi kartında: etiket görünür, seçici geniş,
   düğme sağda. Dar ekranda alt alta iner. */
.paket-ekle-serit { padding: 14px 16px; }
.paket-ekle-form { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px 12px; align-items: end; }
.paket-ekle-form .field { margin: 0; }
.paket-ekle-form .auth-help { grid-column: 1 / -1; margin: 0; }
@media (max-width: 620px) { .paket-ekle-form { grid-template-columns: minmax(0, 1fr); } }

.heading-actions { min-width: 0; flex: 0 1 auto; }
.heading-row h1, .heading-row h2, .heading-row h3,
.heading-row p { max-width: 100%; overflow-wrap: anywhere; }
.heading-actions, .table-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; flex-wrap: wrap; }
.heading-actions > *, .table-actions > * { min-width: 0; max-width: 100%; }
.content-grid { display: grid; gap: 18px; }
.content-grid-sidebar { grid-template-columns: minmax(280px, .72fr) minmax(480px, 1.28fr); align-items: start; }
.personnel-management-grid { grid-template-columns: 1fr; }
.personnel-create-form { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
.personnel-create-form .choice-group,
.personnel-create-form .field-hint,
.personnel-create-form .button { grid-column: 1 / -1; }
/* Ters yerleşim: GENİŞ önce, dar sonra.
   content-grid-sidebar "dar önce" yazılmıştır ve ekranların çoğu kısa formu SOLA, tabloyu SAĞA
   koyduğu için orada doğrudur. Asıl içeriği (uzun form ya da çok sütunlu tablo) İLK yazan ekran
   onu 432px'lik dar kolona hapsediyordu: kayıt görüşmesi formu (19 alan) aşağı uzuyor, panodaki
   4 sütunlu tablo satır satır kırılıyor, yanındaki özet kartı ise boş duruyordu.
   Kural: asıl iş hangi karttaysa o kart ilk yazılıyorsa bu izgara, sonra yazılıyorsa -sidebar. */
.content-grid-form { grid-template-columns: minmax(480px, 1.35fr) minmax(260px, .65fr); align-items: start; }
.coordinator-edit-layout { grid-template-columns: minmax(520px, 1.25fr) minmax(300px, .75fr); align-items: start; }
.system-metric-grid { grid-template-columns: repeat(3, 1fr); }
.system-layout { grid-template-columns: minmax(540px, 1.4fr) minmax(270px, .6fr); align-items: start; }
.form-section { margin-top: 20px; }
.choice-group { margin: 0; padding: 12px; border: 1px solid var(--border); border-radius: 11px; }
.choice-group legend { padding: 0 5px; font-size: 13px; font-weight: 750; }
.choice { display: flex; align-items: center; gap: 9px; padding: 7px 4px; font-size: 13px; }
.choice input { width: 17px; height: 17px; accent-color: var(--primary); }
/* İki satırlı seçenek (tema listesi): ad üstte, tanım altta soluk — dar kartta dağılmaz. */
.choice-stacked { align-items: flex-start; }
.choice-stacked input, .choice-stacked .dash-swatch { flex: none; margin-top: 2px; }
.choice-stacked .choice-copy { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.choice-stacked .choice-copy small { color: var(--muted); font-size: 12px; line-height: 1.45; }
.table-wrap { width: 100%; overflow-x: auto; }
.table-card { padding: 0; overflow: hidden; }
.table-card > .card-heading {
  margin: 0;
  padding: 20px 22px 18px;
  border-bottom: 1px solid var(--border);
}
.data-table { width: 100%; border-collapse: collapse; font-size: 13px; }
/* HÜCRE DOLGUSU 14/15 → 10/12 (2026-08-22, kullanıcı: "tabloları güzel sığdıralım"). Ölçüldü:
   öğrenci satırı 95 px'ti, 28 px'i yalnız dikey dolguydu. 8 sütunlu tabloda yatay dolgu
   48 px yer açıyor — bir sütunun yarısı. Başlık satırı da aynı oranda. */
.data-table th { padding: 9px 12px; background: var(--surface-soft); color: var(--muted); border-bottom: 1px solid var(--border); text-align: left; font-size: 11px; letter-spacing: .04em; text-transform: uppercase; white-space: nowrap; }
.data-table td { padding: 10px 12px; border-bottom: 1px solid var(--border); vertical-align: middle; overflow-wrap: anywhere; }
.data-table td a, .data-table td strong { max-width: 100%; overflow-wrap: anywhere; }
.data-table tbody tr:last-child td { border-bottom: 0; }
/* Temel hover da token'dan (2026-08-18): sabit açık ton koyu temada satırı beyazlatıyordu. */
.data-table tbody tr:hover { background: var(--surface-soft); }
/* Toplu görünüm alt toplam satırı: başlık gibi değil, vurgulu veri satırı gibi okunur */
.data-table tfoot th, .data-table tfoot td { padding: 12px 15px; border-top: 2px solid var(--border); background: var(--surface-soft); color: var(--text); font-size: 13px; font-weight: 800; letter-spacing: 0; text-transform: none; white-space: nowrap; }
.data-table tfoot td.numeric { text-align: right; }
.coordinator-table { min-width: 760px; }
.branch-table { min-width: 620px; }
.branch-name { display: inline-flex !important; align-items: center; gap: 9px; }
.branch-name i { width: 12px; height: 12px; flex: none; border-radius: 50%; background: var(--branch-color); box-shadow: 0 0 0 3px color-mix(in srgb, var(--branch-color) 18%, transparent); }
.academic-year-table { min-width: 840px; }
.active-year-row { background: #f0fbf8; }
/* Koyu temada sabit açık zemin okunmazlık yaratıyordu (ölçüldü 1.07) — yeşilimsi koyu ton. */
:root[data-theme="dark"] .active-year-row { background: var(--success-soft); }
.account-layout { grid-template-columns: minmax(560px, 1.3fr) minmax(300px, .7fr); }
.account-current-password small { color: var(--muted); font-size: 11px; }
.account-summary-card { position: sticky; top: 88px; }
.account-facts { display: grid; gap: 0; margin: 20px 0 0; }
.account-facts div { display: flex; justify-content: space-between; gap: 18px; padding: 11px 0; border-bottom: 1px solid var(--border); }
.account-facts dt { color: var(--muted); font-size: 12px; }
.account-facts dd { margin: 0; text-align: right; font-size: 12px; font-weight: 750; }
.data-table td span, .data-table td small { display: block; }
.data-table td small { margin-top: 2px; color: var(--muted); font-size: 11px; line-height: 1.35; }
/* TABLO İÇİ DÜĞMELER KOMPAKT (2026-08-22, tablo derleme). Ölçüldü: personel listesinde
   "Düzenle" + "Görüntüle" 170 px'lik hücreye sığmayıp ALT ALTA kırılıyor, satırı 99 px'e
   çıkarıyordu (hücrenin diğer içeriği 46 px). Tablo düğmesi 34 px yüksek / 11 px yatay
   dolgulu olmak zorunda değil: 28 px / 8 px yeterli, iki düğme yan yana sığar. Yalnız
   tablo içinde — sayfa düğmeleri değişmez. Dar ekran kart görünümü kendi kuralını korur. */
.data-table .table-actions .button, .data-table .actions-cell .button { min-height: 28px; padding: 4px 9px; font-size: 12px; border-radius: 8px; }
.data-table .table-actions { gap: 6px; }
.data-table .actions-cell form { display: contents; }
/* Öğrenci 360 başlığındaki Sil formu: form kutu olmaz, düğme diğer düğmelerin yanına dizilir (2026-09-09). */
.student-sil-form { display: contents; }
.button-danger-ghost { background: transparent; color: var(--danger); border-color: var(--danger); }
.button-danger-ghost:hover { background: var(--danger-soft); }
/* Masaüstünde işlem düğmeleri TEK SATIR: flex-wrap açıkken tablo hücreyi daraltıp düğmeleri
   alt alta kırıyordu (ölçüldü: 170 px hücre, iki düğme iki satır). nowrap ile tablo otomatik
   yerleşimi hücreyi düğmeler kadar açar; ad/e-posta sütunları zaten sarıyor. Dar ekranda
   kart görünümü kendi kuralını korur (aşağıdaki media bloğu). */
@media (min-width: 901px) {
  .data-table .table-actions { flex-wrap: nowrap; }
  .data-table .actions-cell { white-space: nowrap; }
}
.actions-cell { text-align: right; }
.numeric { text-align: right !important; font-variant-numeric: tabular-nums; }
/* HIZLI PAROLA (2026-09-23, öğrenci listesi): kullanıcı adı çipi; tıklayınca parola formu AYNI hücrede açılır.
   Panel mutlak konumlanmaz: tablo kabı overflow-x:auto olduğu için taşan panel kırpılır ya da iç kaydırma açardı.
   Açıkken hücre sarar ve panel tam satır alır; masaüstündeki nowrap kuralı (.actions-cell) panel metnini kesmesin. */
.hizli-parola, .hizli-parola-kapali { display: inline-flex; flex-direction: column; align-items: flex-end; }
.hizli-parola > summary, .hizli-parola-kapali { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px;
  border: 1px solid var(--border); border-radius: 999px; background: var(--surface-soft); color: var(--text);
  font-size: 12px; cursor: pointer; list-style: none; white-space: nowrap; text-decoration: none; }
.hizli-parola > summary::-webkit-details-marker { display: none; }
.hizli-parola > summary:hover, .hizli-parola[open] > summary { border-color: var(--primary); }
.hizli-parola > summary b, .hizli-parola-kapali b { font-weight: 750; font-family: ui-monospace, SFMono-Regular, Consolas, monospace; }
.hizli-parola > summary i, .hizli-parola-kapali i { font-style: normal; }
.hizli-parola-kapali { color: var(--muted); cursor: pointer; }
.data-table .table-actions:has(.hizli-parola[open]) { flex-wrap: wrap; }
.hizli-parola[open] { flex-basis: 100%; }
.hizli-parola:not([open]) > .hizli-parola-panel { display: none; }
.hizli-parola-panel { display: grid; gap: 8px; width: min(320px, 100%); margin-top: 8px; padding: 12px; text-align: left;
  white-space: normal; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); }
.hizli-parola-panel input[name="parola"] { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; }
.hizli-parola-eylem { display: flex; flex-wrap: wrap; gap: 6px; }
.data-table .hizli-parola-panel small { margin: 0; }
.status { display: inline-flex !important; width: max-content; max-width: 100%; padding: 4px 8px; border-radius: 999px; font-size: 11px; font-weight: 800; line-height: 1.3; text-align: center; white-space: normal; overflow-wrap: anywhere; }
.status-active { background: var(--success-soft); color: var(--success); }
/* WCAG AA: #637178 → 4.43:1 idi, #606e74 → 4.66:1. */
.status-passive { background: #edf1f2; color: #606e74; }
.status-paused { background: #fff4dc; color: #946018; }
/* AÇIK MAVİ İKİ SINIFTA ORTAK TANIMLI, hex İKİ KEZ YAZILMAZ: biri değişip diğeri kalırsa
   aynı renk iki tonda görünür. Fark yalnız İŞARETTE: `status-completed` ◆ taşır (aşağıda),
   `status-info` taşımaz — kullanıcı 2026-08-29'da rozetlerin başındaki simgeyi kaldırttı
   ("uyarıların başında ! olmasın, rengi yeterli"). */
.status-completed, .status-info { background: #e9eefb; color: #465f9d; }
.status-no_show { background: #fff4dc; color: #946018; }
.status-cancelled { background: var(--danger-soft); color: var(--danger); }
.status-warning { background: #fff4dc; color: #946018; }
.status-assigned { background: #fff4dc; color: #946018; }
.status-done { background: var(--success-soft); color: var(--success); }
.status-missed { background: var(--danger-soft); color: var(--danger); }
.row-attention { background: #fff8f5; }
.danger-text { color: var(--danger) !important; font-weight: 800; }
.empty-state { padding: 28px 24px; text-align: center; color: var(--muted); }
.empty-state strong { display: block; color: var(--text); font-size: 16px; }
.empty-state p { margin: 5px 0 0; font-size: 13px; }
.filter-card { margin-bottom: 16px; padding: 16px; }
/* flex-wrap ŞART: sarma olmadan 5 alanlı süzgeç (onaylar, ders saatleri) tablette (768px)
   yana taşıyordu — 720px altındaki "sütuna geç" kuralı araya giremiyordu. Ölçüm: 136-249px taşma. */
.filter-form { display: flex; flex-wrap: wrap; align-items: end; gap: 11px; }
.filter-form .search-field { flex: 1; }
.filter-form .field:not(.search-field) { min-width: 170px; }
.inbox-filter-chips { display: flex; gap: 9px; margin-bottom: 16px; overflow-x: auto; padding-bottom: 2px; }
.inbox-filter-chip { display: inline-flex; align-items: center; gap: 9px; min-width: max-content; padding: 9px 12px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--muted); text-decoration: none; font-size: 13px; font-weight: 750; box-shadow: 0 1px 2px rgba(22,33,38,.03); }
.inbox-filter-chip strong { min-width: 23px; padding: 2px 6px; border-radius: 999px; background: #edf2f3; color: var(--text); text-align: center; font-size: 11px; }
.inbox-filter-chip:hover, .inbox-filter-chip.is-active { border-color: #b7c5ee; background: var(--primary-soft); color: var(--primary-dark); }
.inbox-filter-chip.is-active strong { background: var(--primary); color: var(--on-primary); }
.inbox-search-card { margin-bottom: 16px; }
.inbox-table { min-width: 860px; }
.inbox-kind { display: inline-flex !important; width: max-content; padding: 5px 8px; border-radius: 8px; font-size: 11px; font-weight: 850; }
.inbox-kind-homework { background: #f0eafb; color: #674a9b; }
.inbox-kind-package { background: var(--primary-soft); color: var(--primary-dark); }
.inbox-kind-unscheduled { background: #fdeee2; color: #a3541c; }
.inbox-kind-communication { background: #fff0df; color: #9a5b16; }
.inbox-kind-contract { background: #e8f5f1; color: #237563; }
.inbox-date { white-space: nowrap; }
.audit-filter-form { display: grid; grid-template-columns: minmax(240px, 1fr) minmax(220px, .7fr) 145px 145px auto; }
.attendance-filter-form { display: grid; grid-template-columns: minmax(260px, 1fr) 170px 170px auto; align-items: end; gap: 11px; }
.rollover-selector-card { margin-bottom: 18px; }
.activation-readiness-card { margin-bottom: 18px; }
.readiness-ready { border-color: #a9ded5; }
.readiness-blocked { border-color: #e7c1c1; }
.activation-readiness-heading { display: flex; justify-content: space-between; align-items: flex-start; gap: 18px; margin-bottom: 16px; }
.activation-readiness-heading h2 { margin: 3px 0 5px; }
.activation-readiness-heading p { margin: 0; color: var(--muted); }
.readiness-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 9px; }
.readiness-item { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; align-items: center; gap: 10px; min-height: 66px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 11px; background: var(--surface-soft); }
.readiness-item strong, .readiness-item small { display: block; }
.readiness-item small { margin-top: 2px; color: var(--muted); line-height: 1.35; }
.readiness-marker { width: 26px; height: 26px; display: grid; place-items: center; border-radius: 50%; font-weight: 900; }
.readiness-item-ok .readiness-marker { background: var(--success-soft); color: var(--success); }
.readiness-item-warning .readiness-marker { background: #fff4dc; color: #946018; }
.readiness-item-blocker .readiness-marker { background: var(--danger-soft); color: var(--danger); }
.rollover-order-warning { display: flex; justify-content: space-between; align-items: center; gap: 18px; }
.rollover-order-warning strong, .rollover-order-warning span { display: block; }
.rollover-order-warning span { margin-top: 2px; font-size: 13px; }
.rollover-filter-form .field { flex: 1; }
.rollover-metric-grid { grid-template-columns: repeat(4, 1fr); }
.rollover-settings { margin-bottom: 2px; }
.rollover-table { min-width: 980px; }
.rollover-table td small { display: block; margin-top: 3px; color: var(--muted); }
/* Girdi zeminleri token'dan (2026-08-18): sabit #fff koyu temada beyaz kutu bırakıyordu. */
.rollover-table select { min-width: 210px; min-height: 40px; padding: 7px 9px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface); color: var(--text); }
.rollover-processed-row { background: #f8fafb; color: var(--muted); }
.rollover-submit-bar { position: sticky; bottom: 14px; z-index: 5; display: flex; justify-content: space-between; align-items: center; gap: 18px; border-color: #a9ded5; box-shadow: 0 12px 32px rgba(16,85,79,.14); }
.rollover-submit-bar strong, .rollover-submit-bar small { display: block; }
.rollover-submit-bar small { margin-top: 2px; color: var(--muted); }
.schedule-rollover-metrics { grid-template-columns: repeat(4, 1fr); }
.schedule-rollover-toolbar { position: sticky; top: 82px; z-index: 5; display: flex; justify-content: space-between; align-items: center; gap: 18px; margin-bottom: 16px; border-color: #b9d9d5; }
.schedule-rollover-toolbar > div { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.schedule-rollover-toolbar strong { color: var(--primary-dark); font-size: 13px; }
.schedule-rollover-table { min-width: 1080px; }
.schedule-rollover-table td small { display: block; margin-top: 3px; color: var(--muted); }
.roster-rollover-metrics { grid-template-columns: repeat(4, 1fr); }
.roster-rollover-toolbar { position: sticky; top: 82px; z-index: 5; display: flex; justify-content: space-between; align-items: center; gap: 18px; margin-bottom: 16px; border-color: #b9d9d5; }
.roster-rollover-toolbar > div:first-child strong, .roster-rollover-toolbar > div:first-child small { display: block; }
.roster-rollover-toolbar > div:first-child small { margin-top: 2px; color: var(--muted); }
.roster-rollover-table { min-width: 1280px; }
.roster-rollover-table td small { display: block; margin-top: 3px; color: var(--muted); }
.roster-rollover-table input, .roster-rollover-table select { width: 100%; min-width: 145px; min-height: 40px; padding: 7px 9px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface); color: var(--text); }
.roster-rollover-table td:nth-child(3) select { min-width: 180px; }
.roster-rollover-table td:last-child select { min-width: 190px; }
.roster-suggestion { color: var(--amber) !important; font-weight: 750; }
.attendance-table { min-width: 920px; }
.attendance-rate { display: grid; grid-template-columns: 46px minmax(90px, 1fr); align-items: center; gap: 8px; min-width: 175px; }
.attendance-rate progress { width: 100%; height: 7px; overflow: hidden; border: 0; border-radius: 999px; background: #edf1f2; appearance: none; -webkit-appearance: none; }
.attendance-rate progress::-webkit-progress-bar { border-radius: 999px; background: #edf1f2; }
.attendance-rate progress::-webkit-progress-value { border-radius: 999px; background: var(--primary); }
.attendance-rate progress::-moz-progress-bar { border-radius: 999px; background: var(--primary); }
.audit-filter-form .field:not(.search-field), .audit-filter-form .audit-date-field { min-width: 0; }
.audit-table { min-width: 920px; }
.audit-action { max-width: 260px; font-weight: 750; }
.audit-details { position: relative; }
.audit-details summary { color: var(--primary-dark); cursor: pointer; font-weight: 750; }
.audit-details pre { max-width: 380px; max-height: 260px; margin: 9px 0 0; padding: 10px; overflow: auto; border: 1px solid var(--border); border-radius: 8px; background: #f3f6f7; color: #334249; font: 11px/1.45 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; word-break: break-word; }
.pagination { display: flex; justify-content: center; align-items: center; gap: 16px; padding: 15px; border-top: 1px solid var(--border); font-size: 13px; }
.pagination a { font-weight: 750; text-decoration: none; }
/* Sayfa başına kayıt seçici — sayfalamanın altında, aynı görsel dil (ortalı, ince üst çizgi).
   Sayfalama nav'ı basılmadığında (tek sayfa) kendi üst çizgisini taşır; ikisi birlikte
   basıldığında çizgi tekrarlanmasın diye .pagination + .page-size çizgiyi kaldırır. */
.page-size { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 7px; padding: 11px 15px; border-top: 1px solid var(--border); font-size: 12.5px; color: var(--muted); }
.page-size a { color: var(--primary); font-weight: 700; text-decoration: none; }
.page-size a:hover, .page-size a:focus-visible { text-decoration: underline; }
.page-size strong { color: var(--text); font-weight: 800; }
.page-size .page-size-sep { color: var(--muted); opacity: .55; }
.pagination + .page-size { border-top: 0; padding-top: 0; }
.student-form-layout { display: grid; gap: 17px; }
/* Geniş ekranda öğrenci formu iki sütun: kartlar alt alta yayılıp sayfayı uzatmasın, alanlar da
   600px'lik dev kutulara dönmesin. "Veli ve kurum notu" (uzun iç not alanı) tam genişlikte kalır.
   align-items:start → yan yana kartlar birbirinin boyuna uzamaz. */
@media (min-width: 1100px) {
  .student-form-layout { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; }
  .student-form-layout > .student-form-full,
  .student-form-layout > .form-actions { grid-column: 1 / -1; }
  /* Tam genişlikteki kartta veli adı/telefonu 600px'lik kutulara dönmesin: kısa alanlar dar iki
     sütun, uzun iç not sağda geniş sütun — hepsi tek satırda, tablo gibi. */
  .student-form-full .form-grid { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 2fr); align-items: start; }
  .student-form-full .field-span-2 { grid-column: 3; }
}
.student-name-link { color: var(--text); text-decoration: none; }
.student-name-link:hover { color: var(--primary-dark); text-decoration: underline; }
.student-overview-heading { display: flex; justify-content: space-between; align-items: flex-end; gap: 20px; }
.student-title-row { display: flex; align-items: center; gap: 12px; }
.student-title-row h1 { margin-right: 2px; }
.student-overview-actions { max-width: 650px; }
/* ÖĞRENCİ 360 BAŞLIK (2026-09-14): ana eylemler + ayrı yönetim şeridi (Düzenle / Sil / Kart
   Düzeni). Yönetim şeridi kendi satırında, sağa yaslı, küçük düğmeler; çıplak metin bağlantı
   ile kırmızı çerçeveli Sil yan yana "tuhaf" duruyordu (ölçüldü: telefonda 8 tam genişlik düğme
   360 px yer tutuyordu). */
.student-overview-yonetim { flex: 1 0 100%; display: flex; justify-content: flex-end; align-items: center; gap: 6px; margin-top: 2px; }
.student-overview-yonetim .button-secondary, .student-overview-yonetim .button-ghost { border-color: var(--border); }
.student-overview-yonetim .button-danger-ghost { border-color: color-mix(in srgb, var(--danger) 45%, transparent); }
.student-overview-metrics .metric-card { min-height: 132px; }
.student-profile-card { margin-bottom: 18px; }
/* Bilgi alanları: etiket ÜSTTE değil YANDA. Etiket-değer çiftleri yan yana sütunlara dizilir,
   böylece kart ufak bir tablo gibi okunur ve "—" değeri 360px'lik boş bir hücrede kalmaz.
   Sütun sayısı genişliğe göre kendiliğinden 3 → 2 → 1'e iner. */
.student-profile-facts,
.teacher-profile-facts,
.fact-columns {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  column-gap: 30px;
  row-gap: 0;
  margin: 0;
}
.student-profile-facts > div,
.teacher-profile-facts > div,
.fact-columns > div {
  display: grid;
  grid-template-columns: minmax(88px, 34%) minmax(0, 1fr);
  align-items: baseline;
  gap: 14px;
  min-width: 0;
  padding: 10px 0;
  border-top: 1px solid var(--border);
}
.student-profile-facts dt, .student-profile-facts > div > span,
.teacher-profile-facts dt, .teacher-profile-facts > div > span,
.fact-columns dt, .fact-columns > div > span {
  color: var(--muted); font-size: 11.5px; font-weight: 700; line-height: 1.35;
}
.student-profile-facts dd, .student-profile-facts > div > strong,
.teacher-profile-facts dd, .teacher-profile-facts > div > strong,
.fact-columns dd, .fact-columns > div > strong {
  margin: 0; overflow-wrap: anywhere; font-size: 13px; font-weight: 700; line-height: 1.35;
}
/* Uzun serbest metin (not vb.) tüm satırı kaplar ve etiketi üstte taşır. */
.student-profile-facts .student-profile-notes,
.teacher-profile-facts .teacher-profile-notes,
.fact-columns .fact-full {
  grid-column: 1 / -1;
  grid-template-columns: minmax(0, 1fr);
  gap: 4px;
}
.student-profile-notes dd, .teacher-profile-notes dd, .fact-full dd { font-weight: 500; white-space: normal; }
/* İki sütunlu kart yerleşimi: kartlar yan yana durur, tek bir kart tüm satırı kaplamaz.
   Detay ("360") ekranlarının ortak iskeleti — öğrenci, öğretmen vb. */
.student-overview-grid, .overview-columns { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(330px, .85fr); gap: 18px; align-items: start; }
.student-overview-column, .overview-column { display: grid; gap: 18px; align-content: start; min-width: 0; }
.overview-section { overflow: hidden; }
.overview-section-heading { display: flex; justify-content: space-between; align-items: center; gap: 18px; padding: 18px 20px; border-bottom: 1px solid var(--border); }
.overview-section-heading h2 { margin: 0; font-size: 18px; }
.overview-section-heading p { margin: 2px 0 0; color: var(--muted); font-size: 11px; }
.overview-section-heading > a { flex: none; font-size: 12px; font-weight: 800; text-decoration: none; }
.overview-table { min-width: 560px; }
.overview-table td > a { color: var(--text); text-decoration: none; }
.overview-table td > a:hover { color: var(--primary-dark); }
.overview-list { display: grid; }
.overview-list > a,
.overview-list > .overview-row > a { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 13px 20px; border-bottom: 1px solid var(--border); color: var(--text); text-decoration: none; }
.overview-list > a:last-child { border-bottom: 0; }
.overview-list > a:hover,
.overview-list > .overview-row > a:hover { background: var(--surface-soft); }
.overview-list > a > span:first-child,
.overview-list > .overview-row > a > span:first-child { min-width: 0; }
.overview-list strong, .overview-list small { display: block; }
.overview-list strong { font-size: 13px; }
.overview-list small { margin-top: 2px; color: var(--muted); font-size: 10px; }
.overview-list > a > span:last-child,
.overview-list > .overview-row > a > span:last-child { flex: none; color: var(--primary-dark); font-size: 11px; font-weight: 800; }
/* Satır sonundaki × ile silme: bağlantı bir <a>, silme ayrı bir <form> — iç içe olamazlar. */
.overview-row { display: flex; align-items: stretch; }
.overview-row:last-child > a { border-bottom: 0; }
.overview-row > a { flex: 1; min-width: 0; }
.overview-row-delete { display: flex; align-items: stretch; border-bottom: 1px solid var(--border); }
.overview-row:last-child .overview-row-delete { border-bottom: 0; }
.overview-row-delete button {
  width: 38px; padding: 0; border: 0; background: none; cursor: pointer;
  color: var(--muted); font-size: 18px; line-height: 1;
}
.overview-row-delete button:hover { background: #fdf0f0; color: var(--danger); }
.student-recent-lessons { margin-top: 18px; }
.teacher-overview-heading { display: flex; justify-content: space-between; align-items: flex-end; gap: 20px; }
.teacher-overview-actions { max-width: 560px; }
.teacher-overview-metrics .metric-card { min-height: 132px; }
.teacher-profile-card { margin-bottom: 18px; }
/* Öğretmen bilgileri kartı, öğrenci kartıyla AYNI "etiket yanda" kuralını kullanır (yukarıda).
   Burada eskiden ikinci bir tanım vardı: dışta 4 sabit sütun. Refactor sonrası iç sarmalayıcı
   ızgaraya dönünce ikisi çakıştı — 4'e bölünmüş ~130px'lik sütunda etiket minmax(88px,34%) ile
   yeri yiyor, değere ~28px kalıyor ve "Biyoloji" harf harf alt alta sarıyordu. Yeniden eklemeyin;
   sütun sayısını auto-fit kendisi ayarlar. */
/* Haftalık program ızgarası iki sütunun ALTINDA, tam genişlikte durur (öğrenci ekranıyla aynı
   düzen kuralı: yatayda yer isteyen tek şey programdır). */
.teacher-week-section { margin-top: 18px; }

 .teacher-student-table { min-width: 580px; }
 .teacher-student-table td a, .teacher-lessons-table td a { color: var(--text); text-decoration: none; }
 .teacher-student-table td a:hover, .teacher-lessons-table td a:hover { color: var(--primary-dark); }
.teacher-recent-lessons { margin-top: 18px; }
.teacher-lessons-table { min-width: 820px; }
.form-panel .card-heading { margin-bottom: 20px; }
.form-grid-wide { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.field-span-2 { grid-column: span 2; }
.form-actions { position: sticky; bottom: 12px; z-index: 5; display: flex; justify-content: flex-end; gap: 10px; padding: 13px; border: 1px solid var(--border); border-radius: 13px; background: rgba(255,255,255,.94); box-shadow: var(--shadow); backdrop-filter: blur(10px); }

/* Grup dersleri (Sınıflar) modülü yardımcı sınıfları */
.muted { color: var(--muted); font-size: 12px; }
.checkbox-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 8px; margin-bottom: 14px; }
.checkbox-chip { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border: 1px solid var(--border); border-radius: 9px; font-size: 13px; cursor: pointer; transition: border-color .15s, background .15s; }
.checkbox-chip:hover { border-color: var(--primary); }
/* [type="checkbox"] ÖZGÜLLÜK İÇİN: rozet bir `fieldset.field` içindeyse `.field input`
   (min-height:44px; padding:10px 12px; width:100%) bu kuralı eziyordu — aynı özgüllükte olup
   dosyada SONRA geldiği için kazanıyordu. Sonuç: 16px'lik onay kutusu 46px'e şişiyor, rozet
   38px yerine 70px oluyordu (ölçüldü). Öznitelik seçicisi özgüllüğü (0,2,1)'e çıkarır. */
.checkbox-chip input[type="checkbox"] { width: 16px; height: 16px; min-height: 0; padding: 0; accent-color: var(--primary); flex: none; }

/* Müfredat kataloğu modülü */
.grade-tabs { display: grid; gap: 14px; margin-bottom: 1rem; }
.grade-tab-group { display: grid; gap: 6px; }
.grade-tab-label { font-size: 11px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); }
.grade-tab-row { display: flex; flex-wrap: wrap; gap: 8px; }
.grade-tab { display: inline-flex; align-items: center; gap: 7px; padding: 7px 13px; border: 1px solid var(--border); border-radius: 999px; font-size: 13px; font-weight: 700; color: var(--text); text-decoration: none; transition: border-color .15s, background .15s, color .15s; }
.grade-tab:hover { border-color: var(--primary); }
.grade-tab.is-active { background: var(--primary); border-color: var(--primary); color: var(--on-primary); }
/* Koyu temada --primary açık maviye döner (#6f91f4); üstünde beyaz 2.99 kalıyordu — metin koyulaşır. */
:root[data-theme="dark"] .grade-tab.is-active { color: #0a1128; }
:root[data-theme="dark"] .grade-tab.is-active b { background: rgba(8, 13, 30, .22); }
.grade-tab b { padding: 1px 7px; border-radius: 999px; background: rgba(0,0,0,.08); font-size: 11px; }
.grade-tab.is-active b { background: rgba(255,255,255,.25); }
.curriculum-subject { padding: 14px 0; border-top: 1px solid var(--border); }
.curriculum-subject:first-of-type { border-top: none; }
/* Katalog ders özeti (2026-08-17): konu satırları derse tıklayınca yüklenir — sayfa hafif kalır. */
.curriculum-subject-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 10px; padding-top: 10px; }
.curriculum-subject-card { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); text-decoration: none; color: inherit; transition: border-color .15s ease, box-shadow .15s ease; }
.curriculum-subject-card:hover { border-color: var(--primary); box-shadow: 0 4px 14px rgba(8, 23, 77, .08); }
.curriculum-subject-card strong { font-size: 14px; }
.curriculum-subject-card > span:not(.status) { color: var(--muted); font-size: 12px; }
.curriculum-back { margin: 10px 0 0; }
/* Kaynak listesi grupları (2026-08-17): sınav+ders başına katlanır blok. */
.resource-group { border-top: 1px solid var(--border); }
.resource-group:first-of-type { border-top: none; }
.resource-group > summary { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 11px 4px; cursor: pointer; list-style: none; }
.resource-group > summary::-webkit-details-marker { display: none; }
.resource-group > summary::before { content: '▸'; color: var(--muted); font-size: 12px; transition: transform .15s ease; }
.resource-group[open] > summary::before { transform: rotate(90deg); }
.resource-group > summary strong { font-size: 13.5px; }
.resource-group > summary span:not(.status) { color: var(--muted); font-size: 13px; }
.resource-group > summary b { margin-left: auto; padding: 2px 9px; border-radius: 999px; background: var(--surface-2, #f3f6fb); border: 1px solid var(--border); color: var(--muted); font-size: 11.5px; font-weight: 700; }
.resource-group > .table-wrap { margin-bottom: 10px; }
/* Sınıf programı kurucu (2026-08-17): gün × ders saati ızgarası. */
.gsb-grid th, .gsb-grid td { vertical-align: top; }
.gsb-grid tbody th { white-space: nowrap; }
.gsb-grid tbody th small { display: block; color: var(--muted); font-weight: 600; }
.gsb-grid td { min-width: 108px; }
.gsb-slot { position: relative; display: flex; flex-direction: column; gap: 1px; margin: 2px 0; padding: 6px 24px 6px 8px; border: 1px solid var(--border); border-left: 3px solid var(--brand-gold, #f9be03); border-radius: 8px; background: var(--surface); font-size: 12px; }
.gsb-slot small { color: var(--muted); font-size: 11px; }
.gsb-slot .gsb-sil { position: absolute; top: 4px; right: 4px; }
.gsb-add { opacity: .45; }
.gsb-grid td:hover .gsb-add { opacity: 1; }
.grade-tab b.gsb-bos { background: var(--danger-soft, #fbe4e8); color: var(--danger, #b4233d); }
.grade-tab.is-active b.gsb-bos { background: rgba(255,255,255,.25); color: inherit; }
/* Personel giriş bilgileri (2026-08-17): satır içi e-posta/parola alanları. */
.cred-input { width: 100%; min-width: 180px; padding: 7px 9px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: inherit; font: inherit; font-size: 13px; }
.cred-input:focus-visible { outline: none; box-shadow: var(--focus); }
.curriculum-subject-title { margin: 0 0 8px; font-size: 15px; }
.curriculum-subject-title small { margin-left: 8px; color: var(--muted); font-size: 12px; font-weight: 600; }
.curriculum-unit { margin: 10px 0 6px; font-size: 12px; font-weight: 700; color: var(--primary-dark); }
.curriculum-topic-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 6px 0; border-bottom: 1px dashed var(--border); }
.curriculum-topic-row.is-passive { opacity: .55; }
/* Öğrenci 360 haftalık program ızgarası (Excel-vari, tıklanınca ders ekleme) */
.week-grid { width: 100%; border-collapse: collapse; font-size: 12px; min-width: 620px; }
.week-grid th, .week-grid td { border: 1px solid var(--border); padding: 0; text-align: center; }
.week-grid thead th { background: var(--surface-soft); padding: 7px 4px; font-size: 11px; letter-spacing: .03em; text-transform: uppercase; color: var(--muted); }
.week-grid-time { width: 74px; background: var(--surface-soft); padding: 5px 6px !important; text-align: left; white-space: nowrap; }
.week-grid-time strong, .week-grid-time small, .week-grid-time em { display: block; line-height: 1.15; }
.week-grid-time strong { font-size: 12px; color: var(--text); }
.week-grid-time small { color: var(--muted); font-size: 10px; }
.week-grid-time em { color: var(--primary-dark); font-size: 9px; font-style: normal; }
/* vertical-align: stretch GEÇERSİZ bir değerdi (yok sayılıp baseline'a düşüyordu). Hücrede
   birden çok ders varsa içerik üstten başlamalı; 'top' bunu açıkça söyler. */
.week-grid-cell { height: 44px; vertical-align: top; }
.week-grid-cell.is-off { background: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0,0,0,.03) 5px, rgba(0,0,0,.03) 6px); }
/* ÖĞLE ARASI FARKLI RENKTE (2026-08-31 kullanıcı isteği). Sınıf SATIRA DEĞİL HÜCREYE yazılır
   (2026-09-01): ızgara iki saat eksenini yan yana basıyor ve öğle arası ikisinde farklı
   satıra düşüyor (hafta içi 13:50, hafta sonu 13:35) — tr'ye yazılan sınıf yanlış eksenin
   hücrelerini de boyardı. Token'lı: --warning-soft iki temada da tanımlı. */
.week-grid .week-grid-time.ogle-arasi,
.week-grid .week-grid-cell.ogle-arasi:not(.is-off),
.gsb-grid th.ogle-arasi,
.gsb-grid td.ogle-arasi { background: var(--warning-soft); }
.week-grid .week-grid-time.ogle-arasi em,
.gsb-grid th.ogle-arasi strong { color: var(--warning); }

/* İKİ EKSENLİ IZGARA: her saat sütunu kendi bloğunu açar; sol kenarındaki çizgi iki tarifeyi
   görsel olarak ayırır (Excel'deki iki tablo hissi). İlk sütunun çizgisi tablo kenarına
   denk geldiği için ayrıca gizlenmez — kenarlıkla üst üste düşer. */
.week-grid-cift .week-grid-time,
.gsb-grid th:not(:first-child):not(.week-grid-cell) { border-left: 2px solid var(--border); }
.week-grid-cift .week-grid-time.is-off,
.gsb-grid th.is-off { background: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(0,0,0,.03) 5px, rgba(0,0,0,.03) 6px); }
:root[data-theme="dark"] .week-grid-cift .week-grid-time.is-off,
:root[data-theme="dark"] .gsb-grid th.is-off { background: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255,255,255,.03) 5px, rgba(255,255,255,.03) 6px); }
/* AYNI SAATTE BİRDEN ÇOK DERS: her ders bloğu `height: 100%` alıyordu. Tek derste doğru
   çalıştığı için yıllarca fark edilmemişti; ama hücrede 9 ders olduğunda her biri hücrenin
   TAM yüksekliğini alıp alt alta diziliyor ve içerik hücreyi 2706px aşıyordu — dersler
   alttaki satırların üstüne basılıyordu. Ölçüldü, varsayım değil.
   Çözüm: sabit yükseklik yerine ASGARİ yükseklik; hücre içeriğe göre büyür (tablo hücresi
   doğal davranışı). Tek ders varsa `:only-child` ile eski "hücreyi doldur" görünümü korunur. */
.week-grid-cell.is-filled a { display: flex; flex-direction: column; justify-content: center; gap: 1px; min-height: 40px; padding: 4px 5px; background: var(--primary-soft); color: var(--primary-dark); text-decoration: none; }
.week-grid-cell.is-filled a:only-child { height: 100%; }
/* İkiden fazla ders varsa aralarında ince ayraç: bitişik bloklar tek blok gibi okunuyordu. */
.week-grid-cell.is-filled a + a { border-top: 1px solid var(--surface); }
/* Grup dersi bloğu özel dersten ayrışsın: sol kenar çizgisi + farklı zemin. Renkler token'dan
   (WCAG sözleşmesi); yeni sabit hex yok. */
.week-grid-cell.is-filled a.is-group { background: var(--success-soft); color: var(--text); box-shadow: inset 3px 0 0 var(--success); }
/* Koçluk bloğu (bağlantı değil rozet — koçluk kaydı tıklanacak ekrana sahip değil):
   ders/grupla karışmasın diye altın sol şeritli nötr zemin. */
.week-grid-cell.is-filled span.is-coaching { display: flex; flex-direction: column; justify-content: center; gap: 1px; min-height: 40px; padding: 4px 5px; background: var(--surface-soft); color: var(--text); box-shadow: inset 3px 0 0 var(--brand-gold); }
.week-grid-cell.is-filled span.is-coaching small { font-size: 10px; color: var(--muted); }
/* Kayıt türü rozetleri (Genel > Kişiler > Öğrenciler sütunu). Renkler token'dan; "Eğitimgen
   Plus" paket adı olduğu için vurgulu, "Belirtilmemiş" sönük. */
/* Tam ekran düğmesi: tema düğmesi kalıbı — iki simgeden yalnız duruma uyan görünür. */
.fullscreen-toggle svg { width: 18px; height: 18px; display: block; }
.fullscreen-toggle .fs-icon-close { display: none; }
html.is-fullscreen .fullscreen-toggle .fs-icon-open { display: none; }
html.is-fullscreen .fullscreen-toggle .fs-icon-close { display: block; }
/* Tablo satırının ana adı bağlantıyken metin rengini korur, üzerine gelince altını çizer. */
.table-primary-link { color: inherit; text-decoration: none; }
.table-primary-link:hover { color: var(--primary); text-decoration: underline; }
.enrollment-tags { display: flex; flex-wrap: wrap; gap: 4px; }
.enrollment-tag { display: inline-block; padding: 2px 8px; border-radius: 999px; background: var(--surface-muted, var(--surface)); border: 1px solid var(--border); font-size: 12px; white-space: nowrap; }
.enrollment-tag.is-plus { background: var(--primary-soft); border-color: var(--primary); color: var(--primary-dark); font-weight: 700; }
.enrollment-tag.is-empty { color: var(--muted); border-style: dashed; }
/* Kayıt türü RENKLERİ (2026-08-17, kullanıcı isteği: "grup farklı özel ders farklı renklerde").
   Çiftler ölçüldü: en düşük kontrast 5.56 (WCAG AA sınırı 4.5). Renk token'dan gelir;
   rozet sınıfını app/students.php › student_enrollment_tags() üretir. */
:root {
  --tag-ozel-bg: #fdf1e0; --tag-ozel-fg: #8a5510; --tag-ozel-bd: #edcd9a;
  --tag-grup-bg: #e5ebff; --tag-grup-fg: #1e3a8c; --tag-grup-bd: #b9c8f5;
  --tag-koc-bg: #e8f7ef; --tag-koc-fg: #146045; --tag-koc-bd: #a8dbc2;
  --tag-deneme-bg: #f1ebfb; --tag-deneme-fg: #543a94; --tag-deneme-bd: #cbb8ee;
  --tag-kutuphane-bg: #e7f3f6; --tag-kutuphane-fg: #185763; --tag-kutuphane-bd: #a9d3dd;
  --tag-psikoloji-bg: #fdeef4; --tag-psikoloji-fg: #8b2f56; --tag-psikoloji-bd: #edb9cf;
}
:root[data-theme="dark"] {
  --tag-ozel-bg: #3a2a12; --tag-ozel-fg: #f0bd7a; --tag-ozel-bd: #6d5323;
  --tag-grup-bg: #18264f; --tag-grup-fg: #a8bcff; --tag-grup-bd: #33477f;
  --tag-koc-bg: #16342a; --tag-koc-fg: #7fd0ac; --tag-koc-bd: #2c604b;
  --tag-deneme-bg: #2a1f47; --tag-deneme-fg: #c3a9f5; --tag-deneme-bd: #4b3a78;
  --tag-kutuphane-bg: #123640; --tag-kutuphane-fg: #8ecfdd; --tag-kutuphane-bd: #24606f;
  --tag-psikoloji-bg: #3a1c2b; --tag-psikoloji-fg: #f0a8c6; --tag-psikoloji-bd: #6d3550;
}
.enrollment-tag.is-ozel { background: var(--tag-ozel-bg); border-color: var(--tag-ozel-bd); color: var(--tag-ozel-fg); font-weight: 650; }
.enrollment-tag.is-grup { background: var(--tag-grup-bg); border-color: var(--tag-grup-bd); color: var(--tag-grup-fg); font-weight: 650; }
.enrollment-tag.is-kocluk { background: var(--tag-koc-bg); border-color: var(--tag-koc-bd); color: var(--tag-koc-fg); font-weight: 650; }
.enrollment-tag.is-deneme { background: var(--tag-deneme-bg); border-color: var(--tag-deneme-bd); color: var(--tag-deneme-fg); font-weight: 650; }
.enrollment-tag.is-kutuphane { background: var(--tag-kutuphane-bg); border-color: var(--tag-kutuphane-bd); color: var(--tag-kutuphane-fg); font-weight: 650; }
.enrollment-tag.is-psikoloji { background: var(--tag-psikoloji-bg); border-color: var(--tag-psikoloji-bd); color: var(--tag-psikoloji-fg); font-weight: 650; }
/* Grup kapsayıcı türdür: formda içerdiği hizmetler kilitli ve soluk görünür (2026-08-17). */
.checkbox-chip.is-kapsanan { opacity: .55; }
.checkbox-chip-grup span small { display: block; margin-top: 1px; color: var(--muted); font-size: 11px; font-weight: 500; }
/* Öğrenci sayfası: sınıf üyeliği satırı (rozet + hızlı ekleme). */
.student-group-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 10px; }
.student-group-label { font-size: 12px; font-weight: 750; color: var(--muted); }
.student-group-chip { display: inline-flex; align-items: center; gap: 4px; padding: 3px 6px 3px 10px; border: 1px solid var(--success); border-radius: 999px; background: var(--success-soft); font-size: 12.5px; }
.student-group-chip a { color: var(--text); text-decoration: none; font-weight: 650; }
.student-group-chip form { display: inline-flex; }
.student-group-chip button { border: 0; background: none; color: var(--muted); cursor: pointer; font-size: 14px; line-height: 1; padding: 2px 4px; border-radius: 999px; }
.student-group-chip button:hover, .student-group-chip button:focus-visible { color: var(--danger); background: var(--surface); }
.student-group-add { display: inline-flex; align-items: center; gap: 6px; }
.student-group-add select { min-height: 32px; padding: 4px 8px; border: 1px solid #cbd7da; border-radius: 8px; background: #fff; color: var(--text); font-size: 12.5px; }
/* Koyu temada girdilerle aynı renkler (.field select kuralının değerleri) — yeni ton icat edilmedi. */
:root[data-theme="dark"] .student-group-add select { background: #0f172b; border-color: #334260; }
.week-grid-cell.is-filled strong { font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* --muted, hucrenin mavi zemininde (--primary-soft) 4.37 kaliyor; bu baglama ozel ton. */
.week-grid-cell.is-filled small { font-size: 9.5px; color: #5c6377; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
:root[data-theme="dark"] .week-grid-cell.is-filled small { color: var(--muted); }
.week-grid-cell.is-filled a:hover { filter: brightness(.97); }
.week-grid-add { display: grid; place-items: center; width: 100%; height: 100%; min-height: 42px; color: #2f6bff; font-size: 16px; font-weight: 800; text-decoration: none; opacity: 0; transition: opacity .12s ease, background .12s ease; }
.week-grid-cell.is-empty:hover .week-grid-add { opacity: 1; background: rgba(47,107,255,.08); }
/* Öğretmenin müsaitlik penceresine denk gelen BOŞ hücreler: açık yeşil = "uygun, ders konabilir".
   Dolu hücreye uygulanmaz; orada mavi ders bloğu zaten durumu anlatıyor. */
.week-grid-cell.is-available { background: var(--success-soft); }
.week-grid-cell.is-available:hover .week-grid-add { background: rgba(47,107,255,.10); }
:root[data-theme="dark"] .week-grid-cell.is-off { background: repeating-linear-gradient(45deg, transparent, transparent 5px, rgba(255,255,255,.03) 5px, rgba(255,255,255,.03) 6px); }

.period-day-heading { margin: 12px 0 4px; font-size: 12px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; color: var(--primary-dark); }
.period-day-heading small { color: var(--muted); font-weight: 650; text-transform: none; letter-spacing: 0; }
/* Ders saati hızlı kurulumu: gün/şube seçimi ve canlı önizleme */
.period-day-picker { display: flex; flex-wrap: wrap; gap: 7px; }
.period-preview { margin-top: 4px; padding: 13px 15px; border: 1px solid var(--border); border-left: 3px solid var(--primary); border-radius: 10px; background: var(--surface-soft); }
.period-preview > strong { display: block; margin-bottom: 9px; font-size: 12px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.period-preview-list { display: flex; flex-wrap: wrap; gap: 6px; }
.period-preview-item { display: inline-flex; align-items: baseline; gap: 6px; padding: 5px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); font-size: 12px; }
.period-preview-item b { color: var(--primary-dark); font-weight: 800; }
.period-preview-item i { font-style: normal; color: var(--text); font-variant-numeric: tabular-nums; }
.period-preview > small { display: block; margin-top: 10px; color: var(--muted); font-size: 12px; }
.period-clear-form { margin-top: 10px; }
/* Haftalık ders formunda "tek seferlik ders" yönlendirmesi */
.schedule-oneoff-hint { margin: 0 0 14px; font-size: 12.5px; }
/* Bağlamla açılan kart (ör. programdan gelen tek seferlik ders formu) göze çarpsın */
/* "Uygulama olarak yükle": üst şeritte, hesap alanının solunda. Yalnız tarayıcı kurulabilir
   dediğinde JS tarafından görünür yapılır; kuruluysa hiç çıkmaz. */
.button-install { display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
.button-install[hidden] { display: none !important; }
.install-hint { border-bottom: 1px solid var(--border); background: var(--primary-soft); }
.install-hint[hidden] { display: none; }
.install-hint .container { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; padding: 11px 0; font-size: 13px; }
.install-hint strong { color: var(--primary-dark); }
.install-hint span { color: var(--text); }
.install-hint b { font-weight: 800; }

/* ---- Kart düzeni (yönetici sürükleyerek yerleştirir) ---- */
.layout-page .layout-zone { display: grid; gap: 18px; align-content: start; min-width: 0; }
.layout-zone-full { margin-top: 18px; }
.layout-card { min-width: 0; }
/* Tutamak yalnız düzenleme modunda görünür; normal kullanımda sayfa hiç değişmez. */
.layout-card-handle { display: none; }
.layout-toolbar {
  display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 12px;
  margin-bottom: 16px; padding: 14px 18px;
  border: 1px solid var(--primary); border-radius: var(--radius); background: var(--primary-soft);
}
.layout-toolbar[hidden] { display: none; }
.layout-toolbar strong { display: block; color: var(--primary-dark); }
.layout-toolbar span { color: var(--text); font-size: 13px; }
.layout-toolbar-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.is-layout-editing .layout-card { position: relative; }
.is-layout-editing .layout-card-handle {
  display: flex; align-items: center; gap: 8px;
  padding: 7px 10px; border: 1px solid var(--border); border-bottom: 0;
  border-radius: var(--radius) var(--radius) 0 0;
  background: var(--surface-soft); color: var(--muted);
  font-size: 12px; font-weight: 750; cursor: grab;
}
.is-layout-editing .layout-card-handle:active { cursor: grabbing; }
.is-layout-editing .layout-card > .card { border-top-left-radius: 0; border-top-right-radius: 0; }
.is-layout-editing .layout-card.is-dragging { opacity: .45; }
.is-layout-editing .layout-zone {
  padding: 8px; border: 1px dashed var(--border); border-radius: var(--radius);
}
.is-layout-editing .layout-zone.is-drop-target { border-color: var(--primary); background: var(--primary-soft); }
.layout-card-moves { display: flex; gap: 3px; margin-left: auto; }
.layout-card-moves button {
  width: 24px; height: 24px; padding: 0; border: 1px solid var(--border); border-radius: 6px;
  background: var(--surface); color: var(--text); font-size: 12px; line-height: 1; cursor: pointer;
}
.layout-card-moves button:hover { border-color: var(--primary); background: var(--primary-soft); color: var(--primary-dark); }

/* Öğrenci profilindeki devam takibi kartı */
/* KAPALI <details> İÇERİĞİNİ AÇIKÇA GİZLE.
   Tarayıcının kendi kuralı (details:not([open]) > *:not(summary) { display: none }) en düşük
   önceliktedir; içeride .plan-builder veya .plan-quick-topics gibi display tanımlayan bir sınıf
   varsa onu ezer ve panel "kapalı" göründüğü hâlde içeriği ekranda kalır. Ölçtüm: kurucu kapalıyken
   "Seçili Konuları Plana Ekle" düğmesi hâlâ görünüyordu. */
.plan-builder-card:not([open]) > *:not(summary),
.plan-quick-subject:not([open]) > *:not(summary) { display: none; }

/* Profildeki hızlı plan: ders başlıkları katlanır, konuya tıklamak işlendi/geri al yapar. */
.plan-quick { padding: 0 20px 4px; }
.plan-quick-subject { border-top: 1px solid var(--border); }
.plan-quick-subject > summary {
  display: flex; align-items: center; gap: 10px; padding: 11px 0; cursor: pointer;
  list-style: none; font-size: 13px;
}
.plan-quick-subject > summary::-webkit-details-marker { display: none; }
.plan-quick-name { font-weight: 800; }
.plan-quick-stat { margin-left: auto; color: var(--muted); font-size: 12px; white-space: nowrap; }
.plan-quick-subject > summary .nav-chevron { flex: none; transition: transform .18s ease; }
.plan-quick-subject[open] > summary .nav-chevron { transform: rotate(180deg); }
.plan-quick-note { margin: 0 0 8px; color: var(--muted); font-size: 12px; }
.plan-quick-topics { display: grid; gap: 5px; padding-bottom: 10px; }
/* Konu satırı bir onay kutusu: tıklamak sayfayı yenilemez, seçim biriktirilir ve
   "İşaretlenenleri Kaydet" ile bir kez gönderilir. */
.plan-quick-topic {
  display: flex; align-items: center; gap: 9px; margin: 0;
  padding: 7px 10px; border: 1px solid var(--border); border-radius: 9px;
  background: var(--surface); font-size: 12.5px; cursor: pointer;
}
.plan-quick-topic:hover { border-color: var(--primary); background: var(--primary-soft); }
.plan-quick-topic input[type="checkbox"] {
  flex: none; width: 18px; height: 18px; margin: 0; accent-color: var(--success); cursor: pointer;
}
.plan-quick-topic:has(input:checked) { border-color: #cfe8df; background: #f4fbf8; }
.plan-quick-topic:has(input:checked) .plan-quick-title { color: var(--muted); text-decoration: line-through; }
.plan-quick-topic.is-readonly { cursor: default; }
.plan-quick-tick {
  display: grid; place-items: center; flex: none; width: 18px; height: 18px;
  border: 1px solid var(--border); border-radius: 5px; background: var(--surface);
  color: #fff; font-size: 11px; font-weight: 900;
}
.plan-quick-topic.is-covered .plan-quick-tick { border-color: var(--success); background: var(--success); }
.plan-quick-topic.is-covered .plan-quick-title { color: var(--muted); text-decoration: line-through; }
.plan-quick-title { min-width: 0; overflow-wrap: anywhere; }
.plan-quick-topic small { margin-left: auto; flex: none; color: var(--muted); font-size: 11px; }
.plan-quick-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding-bottom: 12px; }
.plan-quick-actions span { color: var(--muted); font-size: 11.5px; }

/* Plan kurucu katlanır panel: günlük iş konu işaretlemek, konu eklemek ara sıra. */
.plan-builder-card > summary { display: flex; align-items: center; gap: 14px; cursor: pointer; list-style: none; }
.plan-builder-card > summary::-webkit-details-marker { display: none; }
.plan-builder-summary h2 { margin: 0 0 4px; }
.plan-builder-summary p { margin: 0; color: var(--muted); font-size: 13px; }
.plan-builder-card > summary .nav-chevron { flex: none; margin-left: auto; transition: transform .18s ease; }
.plan-builder-card[open] > summary .nav-chevron { transform: rotate(180deg); }
.plan-builder-card[open] > summary { margin-bottom: 16px; }

/* Profildeki devam kartı. Sınıf adları "profile-" ile başlıyor: Devam Takibi ekranındaki
   .attendance-rate (46px'lik ilerleme çubuğu hücresi) ile çakışıyordu, sayı hücreye
   sığmayıp etiketin üstüne taşıyordu. */
.profile-attendance { display: flex; align-items: center; flex-wrap: wrap; gap: 12px 24px; padding: 16px 20px; }
.profile-attendance-rate { display: grid; grid-template-columns: minmax(0, 1fr); gap: 2px; }
.profile-attendance-rate strong { font-size: 30px; font-weight: 800; line-height: 1.05; letter-spacing: -.03em; white-space: nowrap; }
.profile-attendance-rate span { color: var(--muted); font-size: 11.5px; font-weight: 700; white-space: nowrap; }
.profile-attendance-counts { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; font-size: 13px; }
.profile-attendance-counts li { display: flex; align-items: center; gap: 8px; color: var(--muted); }
.profile-attendance-counts b { min-width: 24px; color: var(--text); font-weight: 800; text-align: right; }
.profile-attendance-counts .dot { width: 9px; height: 9px; flex: none; border-radius: 50%; background: var(--muted); }
.profile-attendance-counts .dot-completed { background: var(--success); }
.profile-attendance-counts .dot-noshow { background: var(--danger); }
.profile-attendance-counts .dot-cancelled { background: #9aa6ad; }
.profile-attendance-counts .dot-credit { background: var(--primary); }
.profile-attendance-note { margin: 0; padding: 0 20px 14px; color: var(--muted); font-size: 12px; line-height: 1.5; }
.profile-attendance-months { font-size: 12.5px; }
.profile-attendance-months td small { display: block; color: var(--muted); font-size: 11px; }

.card.is-highlighted { border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-soft); }
/* Rapor hazırlarken müfredat planı konu işaretleme paneli */
.report-plan-subject { padding: 10px 0; border-bottom: 1px dashed var(--border); }
.report-plan-subject:last-of-type { border-bottom: 0; }
.report-plan-heading { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin-bottom: 7px; }
.report-plan-heading strong { font-size: 13px; }
.report-plan-heading span { color: var(--muted); font-size: 12px; white-space: nowrap; }
.report-plan-topics { display: flex; flex-wrap: wrap; gap: 6px; }
.curriculum-topic-row input[type="text"], .curriculum-topic-row input:not([type]) { height: 34px; border: 1px solid var(--border); border-radius: 7px; padding: 0 8px; font-size: 13px; background: var(--surface); color: var(--text); }
.curriculum-topic-row .ct-title { flex: 3 1 220px; }
.curriculum-topic-row .ct-subject { flex: 1 1 120px; }
.curriculum-topic-row .ct-unit { flex: 2 1 150px; }
.curriculum-topic-row .ct-grade { flex: 1 1 90px; }
.curriculum-topic-row .ct-num { width: 62px; height: 34px; border: 1px solid var(--border); border-radius: 7px; padding: 0 6px; font-size: 13px; background: var(--surface); color: var(--text); }
/* Saat girdisi 62px'e sığmaz — büyük yazı ayarında "10:00" kırpılıp "10:" kalıyordu. */
.curriculum-topic-row .ct-num.input-time { width: 100px; }
.curriculum-topic-row .ct-active { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--muted); }
.curriculum-topic-row .ct-active input { width: 15px; height: 15px; accent-color: var(--primary); }

/* Öğrenci planı */
.plan-subject { padding: 14px 0; border-top: 1px solid var(--border); }
.plan-subject:first-of-type { border-top: none; }
.plan-subject-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.plan-subject-head h3 { margin: 0 0 4px; font-size: 16px; }
.plan-subject-head p { margin: 2px 0; }
.plan-subject-progress { display: flex; align-items: center; gap: 8px; min-width: 160px; }
.plan-bar { flex: 1; height: 8px; border-radius: 999px; background: var(--border); overflow: hidden; }
.plan-bar span { display: block; height: 100%; background: var(--primary); border-radius: 999px; }
.plan-subject-progress b { font-size: 13px; color: var(--primary-dark); min-width: 38px; text-align: right; }
.plan-topics { display: grid; gap: 4px; margin-top: 10px; }
.plan-topic { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 7px 10px; border: 1px solid var(--border); border-radius: 8px; }
.plan-topic.is-covered { background: var(--success-soft); border-color: #b9e6cd; }
.plan-topic-title { font-size: 13px; }
.plan-topic-title small { color: var(--muted); font-size: 11px; margin-left: 6px; }
.plan-topic form { margin: 0; }
/* Plan konusunda ders saati düzenleme (şablon + öğrenci planı) */
.plan-topic-actions { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap; }
/* Plandan konu kaldırma. Yalnız işlenmemiş konularda görünür (işlenmiş konunun hakkı harcanmıştır). */
.plan-topic-remove { display: grid; place-items: center; width: 26px; height: 26px; padding: 0; border: 1px solid var(--border); border-radius: 50%; background: transparent; color: var(--muted); font-size: 16px; line-height: 1; cursor: pointer; transition: background .15s ease, color .15s ease, border-color .15s ease; }
.plan-topic-remove:hover { border-color: #f0c2c2; background: #fdf0f0; color: var(--danger); }
.plan-lesson-form { display: inline-flex; align-items: center; gap: 5px; }
.plan-lesson-input { width: 58px; height: 30px; padding: 0 6px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); font: inherit; font-size: 13px; text-align: right; }
.plan-lesson-input:focus { outline: 2px solid var(--primary); outline-offset: 1px; }
.plan-lesson-unit { color: var(--muted); font-size: 12px; }
.plan-mark-all { margin-top: 8px; }
/* Haftalık program ızgarası: ders olmasa da çizilir, boş hücreler tıklanabilir. */
.schedule-grid-hint { margin: 0 0 12px; color: var(--muted); font-size: 13px; }
.schedule-week-grid th.is-today { color: var(--primary-dark); }
.schedule-week-grid .week-grid-cell.is-filled { padding: 3px; vertical-align: top; }
.grid-chip {
  display: block; margin-bottom: 3px; padding: 4px 6px; border-radius: 7px;
  background: var(--primary-soft); color: var(--primary-dark); text-decoration: none; line-height: 1.25;
}
.grid-chip:last-child { margin-bottom: 0; }
.grid-chip strong { display: block; font-size: 11.5px; }
.grid-chip small { display: block; color: var(--muted); font-size: 10px; }
.grid-chip:hover { background: #d7ece6; }
/* Sürükle-bırak taşıma (haftalık ızgara): tutulabilir imleç, sürüklenirken soluklaşma,
   bırakılabilir hücrede vurgu. Kapı schedule.php'de ([data-slot-move-form] basılıyorsa açık). */
.grid-chip[draggable="true"] { cursor: grab; }
.grid-chip.is-dragging { opacity: .45; cursor: grabbing; }
.week-grid-cell.drag-over { background: var(--primary-soft) !important; box-shadow: inset 0 0 0 2px var(--primary); }
/* HAFTA IZGARASINDA İŞLEM MENÜSÜ (2026-09-09): rozetin sağ üst köşesinde ⋮; açılınca
   düzenle / gün değiştir / programdan kaldır. Panel MUTLAK konumlu, çünkü hücre 44px ve
   akışa girseydi tüm satırı açardı. Kapalı <details> içeriği AYRICA gizlenir: tarayıcının
   UA kuralını `.week-grid-cell.is-filled a { display: flex }` gibi bir kural ezebiliyor
   (deponun `[hidden]` tuzağının kardeşi). Panel içindeki bağlantı rozet görünümünü
   almasın diye hücre kuralından daha özgül yazılır. */
.grid-chip-sarmal { position: relative; }
.grid-chip-sarmal + .grid-chip-sarmal { margin-top: 3px; }
.grid-chip-menu { position: absolute; top: 1px; right: 1px; }
.grid-chip-menu > summary {
  list-style: none; cursor: pointer; width: 16px; height: 16px; border-radius: 5px;
  display: flex; align-items: center; justify-content: center;
  font-size: 12px; line-height: 1; color: var(--muted); background: var(--surface);
  opacity: .55;
}
.grid-chip-menu > summary::-webkit-details-marker { display: none; }
.grid-chip-menu > summary:hover, .grid-chip-menu[open] > summary { opacity: 1; color: var(--text); }
.grid-chip-menu:not([open]) > *:not(summary) { display: none !important; }
.grid-chip-menu-panel {
  position: absolute; top: 18px; right: 0; z-index: 30; width: 210px;
  display: flex; flex-direction: column; gap: 6px; padding: 10px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 10px;
  box-shadow: 0 10px 26px rgba(15, 23, 42, .18); text-align: left;
}
.grid-chip-menu-panel > strong { font-size: 12px; }
.grid-chip-menu-panel > small { color: var(--muted); font-size: 10.5px; }
.week-grid-cell.is-filled .grid-chip-menu-panel a {
  display: inline-block; min-height: 0; padding: 0; background: none;
  color: var(--primary-dark); font-size: 12px; text-decoration: underline;
}
.grid-chip-menu-panel label { display: flex; flex-direction: column; gap: 3px; font-size: 11px; color: var(--muted); }
.grid-chip-menu-panel select { font-size: 12px; padding: 4px; }
.grid-chip-menu-panel form { display: flex; flex-direction: column; gap: 5px; margin: 0; }
/* DERS HAKKI HIZLI ŞERİDİ (2026-09-12): satır içinde iki düğme + iki küçük sayı kutusu.
   Kutular dar (64px) çünkü değer iki-üç hanelidir; geniş kutu satırı taşırırdı. Şerit sarar —
   telefonda üç öğe yan yana sığmaz ve sarmayan şerit sayfayı yatay kaydırırdı (çipe altıncı
   düğme eklendiğinde ölçülen hatanın aynısı). `form { display: contents }` düğmeyi flex
   öğesi yapar: kendi formunda duran düğme aksi halde satırı kırıyordu. */
.hak-hizli { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.hak-hizli form { display: contents; }
.hak-sayac { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 4px; margin-top: 6px; }
.hak-sayac label { display: flex; flex-direction: column; gap: 2px; font-size: 10.5px; color: var(--muted); }
.hak-sayac input { width: 64px; padding: 3px 5px; font-size: 12px; }
.hak-sayac-genis { gap: 10px; margin-top: 0; }
.hak-sayac-genis label { font-size: 12px; }
.hak-sayac-genis input { width: 96px; padding: 6px 8px; font-size: 14px; }
/* GÖRÜŞMENİN HAVASI (2026-09-12 kullanıcı: "pozitifler yeşille gözüksün burada sütunda,
   negatifler kırmızı ile, nötr ise sarı ile"). Renk TEK ölçüyü anlatır. Satır zemini yalnız
   bir TON — dolu renk yazıyı okunmaz yapar; rozet asıl işareti taşır ve token'lardan gelir
   (sabit hex koyu temada okunmaz, deponun ölçülmüş kuralı). `--warning` açık temada tanımlı
   olmalı; nötr için `--muted` yerine warning kullanılıyor çünkü "sarı" istendi. */
tr.gorusme-pozitif > td { background: var(--success-soft); }
tr.gorusme-negatif > td { background: var(--danger-soft); }
tr.gorusme-notr > td { background: var(--warning-soft); }
.gorusme-hava.gorusme-pozitif { background: var(--success-soft); color: var(--success); }
.gorusme-hava.gorusme-negatif { background: var(--danger-soft); color: var(--danger); }
.gorusme-hava.gorusme-notr { background: var(--warning-soft); color: var(--warning); }
/* Kapalı <details> içeriğini AYRICA gizle: tarayıcının UA kuralını `display` veren bir sınıf
   ezebiliyor (deponun [hidden] tuzağının kardeşi). */
/* YALNIZ <details> (2026-09-13 kullanıcı: "veli görüşme formunda metin yazma yerini kapatmışsın").
   Aynı sınıf görüşme FORMUNDA <label class="field gorusme-metin"> olarak da kullanılıyor; label
   hiçbir zaman [open] almaz, yani nitelenmemiş seçici formdaki açıklama kutusunu ve uyarı
   kutusunu BÜTÜNÜYLE gizliyordu (textarea, etiket, ipucu). Seçici öğe türüyle nitelenir. */
details.gorusme-metin:not([open]) > *:not(summary),
details.gorusme-tumu:not([open]) > *:not(summary) { display: none !important; }
/* AÇILINCA SÜTUN KAYMASIN (2026-09-12 kullanıcı: "buna basıp yorumu açınca kayıyor sola doğru").
   Ölçüldü (1280 px): metin açılınca hücre 413 → 508 px büyüyor, öndeki dört sütun sola kayıyor
   (öğrenci hücresi 206 → 177 px) — tablonun otomatik yerleşimi açık metnin genişliğini sütun
   hesabına katıyor. `contain: inline-size` hücre içeriğinin GENİŞLİK hesabını dıştan koparır:
   açılan metin mevcut sütun genişliğine sarar, sütunlar yerinde kalır. Yedek olarak metin her
   kelimede kırılabilir (uzun tek kelime hücreyi taşırmasın). */
details.gorusme-metin { display: block; max-width: 100%; contain: inline-size; }
/* Kapsayıcı, hücrenin içsel genişliğini sıfırladığı için sütun aşırı daralabilir (ölçüldü:
   413 → 230 px). Metin sütunu en geniş sütun olmalı; taban genişlik verilir. */
/* 2026-09-25: sütunun adı "Görüşme" oldu (veli + öğrenci görüşmesi birlikte); seçici etikete bağlı olduğu için birlikte değişir. */
.coach-session-table td[data-label="Görüşme"] { min-width: 320px; }
.gorusme-metin > summary, .gorusme-metin > div { overflow-wrap: anywhere; }
.gorusme-metin > summary { cursor: pointer; color: var(--muted); font-size: 11.5px; }
.gorusme-metin > div { margin-top: 4px; font-size: 12px; line-height: 1.45; }
.gorusme-tumu { margin-top: 12px; }
.gorusme-tumu > summary { cursor: pointer; display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface-soft); }
.gorusme-tumu > summary small { color: var(--muted); }
.gorusme-tumu-govde { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; }
.gorusme-kayit { padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; }
.gorusme-kayit.gorusme-pozitif { border-left: 4px solid var(--success); }
.gorusme-kayit.gorusme-negatif { border-left: 4px solid var(--danger); }
.gorusme-kayit.gorusme-notr { border-left: 4px solid var(--warning); }
.gorusme-kayit > header { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: 6px; }
.gorusme-kayit > p { margin: 0; font-size: 13px; line-height: 1.5; }
.gorusme-kayit > small { display: block; margin-top: 6px; color: var(--muted); }
.gorusme-uyari-not { color: var(--danger); }
/* ALT MENÜ — EKRAN AİLESİNİN SEKME ÇUBUĞU (2026-09-12 kullanıcı: "üst menü kısmını ayırman
   lazım… PDF çıktı altta farklı renkte olabilir, menülerin sırası bozulmasın"). Başlık
   şeridindeki düğmelerden AYRI bir satır ve ayrı görünüm: gezinti sekme, iş düğme. Aktif
   sekme dolu; diğerleri sessiz. Sarar (telefonda altı sekme tek satıra sığmaz; sarmayan
   çubuk sayfayı yana kaydırırdı). */
.alt-menu { display: flex; flex-wrap: wrap; gap: 4px; margin: 0 0 14px; padding: 4px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.alt-menu-oge { display: inline-flex; align-items: center; min-height: 34px; padding: 6px 14px; border-radius: 9px; font-size: 13px; font-weight: 600; color: var(--muted); text-decoration: none; }
.alt-menu-oge:hover { color: var(--text); background: var(--surface); }
.alt-menu-oge.is-active { color: var(--on-primary); background: var(--primary); }

/* ÖZEL NOT GÜNLÜĞÜ (2026-09-12): yazan + tarih başlıkta, metin altında; en yeni üstte. */
.ozel-not-gunlugu { list-style: none; margin: 0 0 10px; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.ozel-not-gunlugu li { padding: 8px 10px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface-soft); }
.ozel-not-gunlugu header { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px; margin-bottom: 4px; font-size: 12px; }
.ozel-not-gunlugu time { color: var(--muted); }
.ozel-not-gunlugu p { margin: 0; font-size: 13px; line-height: 1.45; white-space: pre-line; }
.grid-chip-group { background: #ede7fb; color: #5b3fa6; }
.grid-chip-group:hover { background: #e2d8f7; }
/* Henüz açılmamış (planlanan) şube bloğu (2026-09-02): kesikli kenar + warning tonu — iki
   temada da tanımlı token'lar. Tablo altındaki not hangi şubelerin planlanan olduğunu yazar. */
.grid-chip-group.is-acilmamis { background: var(--warning-soft); color: var(--warning); border: 1px dashed var(--warning); }
.grid-chip-group.is-acilmamis:hover { background: var(--warning-soft); }
.grid-chip-group.is-acilmamis small { color: var(--warning); }
/* Plan ekranı toplu işaretleme: konu adı artık bir onay kutusu etiketi. */
.plan-topic-check { display: flex; align-items: center; gap: 10px; min-width: 0; flex: 1; cursor: pointer; }
.plan-topic-check input[type="checkbox"] { flex: none; width: 18px; height: 18px; margin: 0; accent-color: var(--success); cursor: pointer; }
.plan-topic:has(input[type="checkbox"]:checked) { background: var(--success-soft); border-color: #b9e6cd; }
.plan-topic:has(input[type="checkbox"]:checked) .plan-topic-title { color: var(--muted); text-decoration: line-through; }
.plan-sync-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 10px; }
.plan-sync-actions span { color: var(--muted); font-size: 11.5px; }
/* Katalogdan konu seçici: her ders kapalı-açılır başlık; konular açılınca çok sütunlu listelenir */
.plan-builder { display: grid; grid-template-columns: 1fr; gap: 8px; }
details.plan-builder-subject { border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
details.plan-builder-subject > summary { display: flex; align-items: center; gap: 9px; padding: 11px 14px; cursor: pointer; list-style: none; user-select: none; color: var(--primary-dark); font-size: 14px; font-weight: 800; }
details.plan-builder-subject > summary::-webkit-details-marker { display: none; }
details.plan-builder-subject > summary::marker { content: ''; }
details.plan-builder-subject > summary:hover { color: var(--primary); }
details.plan-builder-subject > summary small { margin-right: auto; color: var(--muted); font-weight: 650; font-size: 12px; }
details.plan-builder-subject > summary .pbs-selected { padding: 2px 10px; border-radius: 999px; background: var(--primary-soft); color: var(--primary-dark); font-size: 11px; font-weight: 800; white-space: nowrap; }
details.plan-builder-subject > summary .nav-chevron { flex: none; color: var(--muted); }
details.plan-builder-subject[open] > summary .nav-chevron { transform: rotate(180deg); }
.plan-builder-topics { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 6px; padding: 2px 14px 13px; }
details.plan-builder-subject:not([open]) > .plan-builder-topics { display: none; }
.checkbox-chip.is-locked { opacity: .5; }

/* Soru Bankası */
.qb-bulk-bar { display: flex; align-items: center; gap: 12px; margin: 0 0 12px; padding: 8px 14px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); font-size: 13px; color: var(--muted); }
.qb-bulk-bar span { flex: 1; }
.qb-card { padding: 14px 0; border-top: 1px solid var(--border); }
.qb-card:first-of-type { border-top: none; }
.qb-card.is-passive { opacity: .6; }
.qb-card-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.qb-check input { width: 16px; height: 16px; accent-color: var(--primary); }
.qb-topic { font-size: 12px; color: var(--muted); }
.qb-card-head .qb-edit-link { margin-left: auto; }
.qb-body { font-size: 14px; line-height: 1.6; margin-bottom: 8px; white-space: pre-wrap; }
.qb-options { list-style: none; margin: 0; padding: 0; display: grid; gap: 4px; }
.qb-options li { display: flex; align-items: baseline; gap: 8px; padding: 5px 10px; border: 1px solid var(--border); border-radius: 7px; font-size: 13px; }
.qb-options li.is-correct { background: var(--success-soft); border-color: #b9e6cd; font-weight: 600; }
.qb-opt-letter { font-weight: 700; color: var(--primary-dark); min-width: 16px; }
.qb-option-fields { display: grid; gap: 8px; }
.qb-option-field { display: flex; align-items: center; gap: 10px; }
.qb-option-field input[type="text"], .qb-option-field input:not([type]) { flex: 1; height: 38px; border: 1px solid var(--border); border-radius: 8px; padding: 0 10px; font-size: 14px; background: var(--surface); color: var(--text); }
.qb-correct input { width: 18px; height: 18px; accent-color: var(--primary); }
.qb-body math, .qb-options math { font-size: 1.05em; }
/* Personel yetki özeti (coordinator-form.php, app/yetki-ozeti.php) */
.yetki-ozeti-gruplar { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 18px 24px; }
.yetki-ozeti-grup h3 { margin: 0 0 8px; font-size: 13px; letter-spacing: .02em; color: var(--text); }
.yetki-ozeti-grup ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.yetki-ozeti-grup li { display: grid; grid-template-columns: 20px 1fr; gap: 8px; align-items: start; font-size: 13px; line-height: 1.4; }
.yetki-ozeti-grup li small { display: block; color: var(--muted); font-size: 11.5px; }
.yetki-ozeti-isaret { display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; font-size: 11px; font-weight: 700; }
.yetki-ozeti-grup li.is-acik .yetki-ozeti-isaret { background: var(--success-soft); color: var(--success); }
.yetki-ozeti-grup li.is-kapali .yetki-ozeti-isaret { background: var(--danger-soft); color: var(--danger); }
/* Metin span'ı ikinci ÇOCUK span'dır; sonda seçici etiketi durabilir (2026-10-07) — `:last-child` onu ıskalardı. */
.yetki-ozeti-grup li.is-kapali > span:nth-of-type(2) { color: var(--muted); }
/* Kişi bazlı üç durumlu seçici (2026-10-07 kullanıcı: "muhasebede bunlar kapalı, tek tek açmak istiyorum") */
.yetki-ozeti-grup li.has-secim { grid-template-columns: 20px 1fr auto; }
.yetki-ozeti-grup .yetki-secim select { font-size: 12px; padding: 2px 6px; min-height: 26px; max-width: 110px; }
.yetki-ozeti-kaydet { margin: 16px 0 0; display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
@media (max-width: 700px) {
  .yetki-ozeti-grup li.has-secim { grid-template-columns: 20px 1fr; }
  .yetki-ozeti-grup li.has-secim .yetki-secim { grid-column: 2; }
}
/* Sürükle-bırak biçimlerinin personel önizlemesi (cevabıyla) — quiz_format_onizleme_html */
.qb-format { display: grid; gap: 6px; font-size: 13px; }
.qb-format-liste { margin: 0; padding-left: 22px; display: grid; gap: 4px; }
.qb-format-esles .qb-format-liste li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px; }
.qb-format-ok { color: var(--muted); }
.qb-format-metin { margin: 0; line-height: 1.9; white-space: pre-wrap; }
.qb-format-cevap { background: var(--success-soft); color: var(--text); font-weight: 600; padding: 1px 6px; border-radius: 5px; }
.qb-format-not { margin: 0; color: var(--muted); font-size: 12px; }
.qb-format-hata { margin: 0; color: var(--danger); font-size: 12px; }

/* Deneme üretimi */
.qb-gen-topics { display: grid; gap: 4px; }
.qb-gen-row { display: flex; align-items: center; gap: 12px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px; }
.qb-gen-title { flex: 1; font-size: 13px; }
.qb-gen-avail { font-size: 12px; color: var(--muted); white-space: nowrap; }
.qb-gen-count { width: 70px; height: 36px; border: 1px solid var(--border); border-radius: 8px; padding: 0 8px; font-size: 14px; background: var(--surface); color: var(--text); text-align: center; }

/* Deneme yazdırma (bağımsız belge; her zaman siyah-beyaz) */
.print-body { background: #fff; color: #111; margin: 0; padding: 0; }
.print-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 20px; border-bottom: 1px solid #ddd; background: #f6f8fa; }
.print-toolbar-actions { display: flex; gap: 8px; }

.print-optic { max-width: 820px; margin: 0 auto; padding: 24px 28px; break-before: page; }
.print-optic h2 { font-size: 16px; border-bottom: 1px solid #111; padding-bottom: 6px; }

@media print {
  .no-print { display: none !important; }
   .print-optic { max-width: none; padding: 0 6mm; }
  /* Koyu temada gövde zemini token okuyor; kullanıcı "arka plan grafikleri"ni açarsa kâğıdın
     çevresi koyu basılırdı. Yazdırmada gövde her zaman beyaza döner. */
  .print-body, .qp-body { background: #fff !important; color: #111; font-size: 12pt; }
  @page { margin: 14mm; }
}

/* Görüntüleme (impersonation) banner */
.impersonation-banner { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 16px; padding: 10px 16px; border-radius: 10px; background: #7c3aed; color: #fff; font-size: 13px; font-weight: 600; }
.impersonation-banner span { display: inline-flex; align-items: center; gap: 8px; }
.impersonation-banner svg { flex: none; }
.impersonation-banner form { margin: 0; }
.button.button-light { background: #fff; color: #4c1d95; border-color: #fff; }
.button.button-light:hover { background: #f2ecff; }

/* Pano bölüm başlığı (Akademik içerik vb.) */
.dashboard-section-title { margin: 26px 0 12px; font-size: 16px; font-weight: 700; color: var(--text); }

/* Liste içi mini ilerleme (öğrenci listesi plan sütunu) */
.mini-progress { display: inline-flex; align-items: center; gap: 6px; }
.mini-progress-bar { width: 52px; height: 6px; border-radius: 999px; background: var(--border); overflow: hidden; flex: none; }
.mini-progress-bar span { display: block; height: 100%; background: var(--primary); border-radius: 999px; }
.mini-progress b { font-size: 12px; color: var(--primary-dark); }
.muted-cell { color: var(--muted); }
/* Ders hakları listesi: bir öğrencinin tüm dersleri tek satırda, alt alta. Eskiden her paket
   ayrı bir tablo satırıydı ve aynı öğrenci arka arkaya tekrar ediyordu. */
.package-lines {
  --package-line-columns: minmax(140px, 1fr) 84px 62px 62px minmax(150px, 190px) 82px;
  display: grid;
  gap: 4px;
}
.package-line {
  display: grid; align-items: center; gap: 10px;
  grid-template-columns: var(--package-line-columns);
  padding: 7px 9px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface);
}
.package-line-head {
  padding: 0 9px 2px; border: 0; background: none;
  color: var(--muted); font-size: 10px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase;
}
.package-line-head span { min-width: 0; white-space: nowrap; }
.package-line-head span:nth-child(n+2):nth-child(-n+4) { text-align: right; }
.pl-subject { min-width: 0; }
.pl-subject strong { display: block; font-size: 13px; }
.pl-subject small { display: block; color: var(--muted); font-size: 11px; }
.pl-num { text-align: right; font-size: 13px; }
.pl-state { min-width: 0; }
.pl-state small { display: block; color: var(--muted); font-size: 10.5px; }
.package-line > .button { width: 82px; justify-content: center; }
.package-table td small { display: block; }
/* Öğrenci listesi plan hücresi: her ders kendi satırında (ad · çubuk · yüzde), altında toplam.
   Tek bir yüzde "hangi derste geride kaldık" sorusunu yanıtlamıyordu. */
.plan-cell { display: grid; gap: 4px; }
.plan-cell-row { display: grid; grid-template-columns: minmax(58px, auto) 52px 34px; align-items: center; gap: 7px; }
.plan-cell-subject { min-width: 0; overflow: hidden; font-size: 11.5px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
.plan-cell-row b { color: var(--primary-dark); font-size: 11.5px; text-align: right; }
.plan-cell-total { color: var(--muted); font-size: 10.5px; font-weight: 700; }

/* Program kurucu — mesai-dışı (öğretmen müsaitliği) vurgusu */
.builder-chip-offhours { border: 1px solid #e0a800; box-shadow: inset 3px 0 0 #e0a800; }
.builder-off { color: #b8860b; font-size: 11px; font-weight: 700; }
.builder-legend { display: inline-flex; align-items: center; gap: 6px; margin-bottom: 12px; padding: 7px 12px; border-radius: 8px; background: rgba(224,168,0,.12); border: 1px solid rgba(224,168,0,.4); font-size: 13px; color: var(--text); }

/* Soru bankası — sınıf havuz özeti (ders rozetleri → üret) */
.bank-coverage { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 12px; }
.bank-coverage-label { font-size: 12px; font-weight: 600; color: var(--muted); }

/* Giriş sayfası — yerel/test hızlı giriş paneli */
.auth-demo { margin-top: 16px; padding: 12px 14px; border: 1px dashed var(--border); border-radius: 10px; text-align: center; }
.auth-demo-label { display: block; font-size: 11px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); margin-bottom: 8px; }
.auth-demo-buttons { display: flex; gap: 8px; justify-content: center; flex-wrap: wrap; max-height: 250px; overflow-y: auto; padding-right: 4px; }
.auth-demo small { display: block; margin-top: 8px; font-size: 11px; color: var(--muted); }

/* Program kurucu grid */
.builder-grid { min-width: 900px; table-layout: fixed; }
.builder-grid th, .builder-grid td { border: 1px solid var(--border); vertical-align: top; }
.builder-grid thead th { text-align: center; font-size: 12px; padding: 8px 4px; background: var(--surface-soft, #f4f8f8); }
.builder-grid .is-today-col { background: var(--primary-soft); }
.builder-time { width: 92px; text-align: center; font-size: 12px; font-weight: 700; padding: 8px 4px; }
.builder-time small { display: block; color: var(--muted); font-size: 10px; font-weight: 600; }
.builder-cell { padding: 4px; min-height: 54px; }
.builder-chip { display: block; padding: 4px 6px; margin-bottom: 3px; border-radius: 6px; background: var(--surface); border: 1px solid #d9e3e5; text-decoration: none; color: var(--text); }
.builder-chip b { display: block; font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.builder-chip span { display: block; font-size: 10px; color: var(--muted); }
.builder-chip-group { background: var(--primary-soft); border-color: #b7c5ee; }
/* Hızlı ekleme: mavi + (kurucu hücreleri, gün başlıkları, müsaitlik pencereleri) */
.builder-add { display: grid; place-items: center; width: 20px; height: 20px; margin: 2px auto 0; border-radius: 50%; background: #2f6bff; color: #fff; font-size: 13px; font-weight: 800; line-height: 1; text-decoration: none; opacity: .4; transition: opacity .15s ease, background .15s ease; }
.builder-cell:hover .builder-add { opacity: 1; }
.builder-add:hover { background: #1e50c8; opacity: 1; }
.day-add { display: grid; place-items: center; width: 22px; height: 22px; flex: none; border-radius: 50%; background: #2f6bff; color: #fff; font-size: 15px; font-weight: 800; line-height: 1; text-decoration: none; box-shadow: 0 2px 6px rgba(47,107,255,.35); transition: background .15s ease; }
.day-add:hover { background: #1e50c8; color: #fff; }
/* Müsaitlik listesi: gün adı solda sabit sütun, aralıklar sağda içerik boyunda rozetler.
   Eskiden plan/müfredat sınıfları ödünç alınıyordu; onlar satırı tam genişliğe yayınca
   "10:00 – 20:30" ile "Sil" arasında ~800px boşluk kalıyordu. */
.availability-day { display: grid; grid-template-columns: 104px minmax(0, 1fr); gap: 14px; align-items: start; padding: 9px 0; border-top: 1px solid var(--border); }
.availability-day:first-child { border-top: none; }
.availability-day-name { margin: 0; font-size: 13px; font-weight: 750; line-height: 28px; }
.availability-day.is-empty .availability-day-name { color: var(--muted); font-weight: 600; }
.availability-window-list { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; min-height: 28px; }
.availability-day-none { color: var(--muted); font-size: 12.5px; }
/* Rozet ferah dursun: saat metni + iki düğme tek kapsülde sıkışıyordu (kullanıcı şikayeti).
   Saat SOLDA kendi alanında, düğmeler dikey ayraçla ayrılmış SAĞ bölmede — "yazı düğmenin
   içine giriyor" izlenimi kalmaz, dokunma hedefleri de büyüdü (26px). */
/* ÇALIŞMA ARALIĞI ROZETİ — DENGELİ YERLEŞİM (2026-08-25 kullanıcı: "tam sığmamış, düzgün
   dursun"). Eski değerler rozetin iki yanını eşitsiz bırakıyordu: solda 14px, sağda 6px boşluk
   vardı ve ayırıcı çizgi doğrudan "+" düğmesinin dibine geliyordu — düğmeler kenara sıkışmış
   görünüyordu. Artık iki yan da 8px'e oturur, ayırıcıdan sonra nefes payı var ve iki düğme
   AYNI boyda (26px): farklı boyda iki yuvarlak, rozeti eğri gösteriyordu. */
.availability-window { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px 4px 14px; border: 1px solid #b9e6cd; border-radius: 999px; background: var(--success-soft); }
.availability-window-time { font-size: 13px; font-weight: 700; white-space: nowrap; padding-right: 12px; margin-right: 2px; border-right: 1px solid #b9e6cd; }
.availability-window form { margin: 0; display: flex; }
/* Rozet içindeki "+" düğmesi listedeki 22px'lik kardeşinden büyük: burada silme düğmesiyle
   yan yana duruyor ve ikisinin aynı boyda olması gerekiyor. Gölge kaldırıldı — yeşil rozetin
   içinde mavi gölge, düğmeyi rozetin dışına taşmış gibi gösteriyordu. */
.availability-window .day-add { width: 26px; height: 26px; box-shadow: none; }
.availability-window-remove { display: grid; place-items: center; width: 26px; height: 26px; padding: 0; border: none; border-radius: 50%; background: transparent; color: var(--muted); font-size: 15px; font-weight: 700; line-height: 1; cursor: pointer; transition: background .15s ease, color .15s ease; }
.availability-window-remove:hover { background: #fdf0f0; color: var(--danger); }
/* Ders sonucu formunda plandan konu seçimi. Katı CSP nedeniyle JS yok: seçilen başlıkları
   sunucu birleştirip konu alanına yazıyor. */
.plan-pick-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 6px 16px; margin-top: 6px; }
.plan-pick { display: flex; align-items: flex-start; gap: 9px; padding: 7px 9px; border: 1px solid var(--border); border-radius: 8px; font-size: 13px; cursor: pointer; }
.plan-pick input[type="checkbox"] { flex: none; width: 17px; height: 17px; margin: 1px 0 0; accent-color: var(--success); cursor: pointer; }
.plan-pick small { display: block; color: var(--muted); font-size: 11px; font-weight: 600; }
.plan-pick:has(input:checked) { background: var(--success-soft); border-color: #b9e6cd; }
.field-hint { margin: 3px 0 0; color: var(--muted); font-size: 12px; }
/* Modül anahtarının üstündeki "ne işe yarar" özeti: seçenekleri okumadan önce kararı verdirir. */
.module-summary { margin: 0 0 12px; padding: 10px 12px; border-left: 3px solid var(--primary); border-radius: 0 8px 8px 0; background: var(--surface-soft); color: var(--text); font-size: 12.5px; line-height: 1.55; }
.module-summary strong { color: var(--primary-dark); }
.module-summary em { font-style: normal; font-weight: 700; }
/* Aranabilir telefon. Liste hücrelerinde araya girmesin diye rengi metinden devralır;
   yalnız altı çizili olur ki tıklanabildiği anlaşılsın. */
.contact-link { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
.contact-link:hover { color: var(--primary-dark); }
/* WhatsApp: metin değil simge (2026-08-15). Yeşil yuvarlak rozet; renk token'dan. */
.contact-wa { display: inline-flex; align-items: center; justify-content: center; width: 21px; height: 21px; margin-left: 7px; border-radius: 50%; background: var(--success-soft); color: var(--success); text-decoration: none; vertical-align: middle; }
.contact-wa svg { width: 13px; height: 13px; }
.contact-wa:hover { background: var(--success); color: #fff; }
/* Üst şeritteki arama kutusu. Dar ekranda gizlenir (arama sayfasına menüden gidilir). */
.topbar-search { position: relative; display: flex; align-items: center; }
.topbar-search-icon { position: absolute; left: 9px; color: var(--muted); pointer-events: none; }
.topbar-search input { width: 148px; padding: 6px 10px 6px 28px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--text); font: inherit; font-size: 12.5px; transition: width .15s ease, border-color .15s ease; }
.topbar-search input:focus { width: 210px; border-color: var(--primary); outline: 2px solid transparent; }
.topbar-search input::-webkit-search-cancel-button { cursor: pointer; }
.availability-legend { margin: 14px 0 0; padding-top: 12px; border-top: 1px solid var(--border); color: var(--muted); font-size: 12.5px; }
.availability-legend-swatch { display: inline-block; width: 22px; height: 12px; margin: 0 2px -1px; border: 1px solid #b9e6cd; border-radius: 3px; background: var(--success-soft); }
.day-head-right { display: flex; align-items: center; gap: 8px; }

.package-layout { grid-template-columns: minmax(280px, .62fr) minmax(540px, 1.38fr); align-items: start; }
/* Ders hakları tablosu iki sütunu birden kaplar (2026-08-23): formlardan SONRA geldiği için
   dar sütuna düşüyor, altı sütunlu tablo 280 px'e sıkışıp yatay kayıyordu. */
.package-table-card { grid-column: 1 / -1; }
.remaining { color: var(--primary-dark); font-size: 16px; }
.remaining-low { color: var(--danger); }
.package-summary-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin-bottom: 18px; }
.balance-card { padding: 18px 20px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface); box-shadow: var(--shadow); }
.balance-card span { display: block; color: var(--muted); font-size: 12px; font-weight: 750; }
.balance-card strong { display: block; margin-top: 5px; font-size: 28px; line-height: 1.1; font-variant-numeric: tabular-nums; }
.balance-primary { border-color: #b7c5ee; background: var(--primary-soft); color: var(--primary-dark); }
.balance-status { font-size: 20px !important; }
.package-action-grid { grid-template-columns: minmax(360px, 1.2fr) minmax(260px, .8fr); align-items: start; margin-bottom: 18px; }
/* Aynı sütun mantığı özet listelerinde de geçerli: dar kartta tek, geniş kartta iki sütun. */
.detail-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); column-gap: 30px; row-gap: 0; margin: 0; }
.detail-list > div { display: grid; grid-template-columns: minmax(110px, .35fr) minmax(0, 1fr); align-items: baseline; gap: 16px; padding: 11px 0; border-bottom: 1px solid var(--border); }
.detail-list > div:last-child { border-bottom: 0; }
.detail-list-single { grid-template-columns: minmax(0, 1fr); }
.detail-list dt, .detail-list > div > span { color: var(--muted); font-size: 12px; font-weight: 700; }
.detail-list dd { margin: 0; overflow-wrap: anywhere; }
.detail-list > div > strong { overflow-wrap: anywhere; }
.danger-zone { border-color: #efc9c9; background: #fffafa; }
/* Koyu temada sabit açık zemin karta düşen açık metni görünmez yapıyordu (ölçüldü 1.09). */
:root[data-theme="dark"] .danger-zone { border-color: #55302f; background: #241518; }
.button-danger { border-color: var(--danger); background: var(--danger); color: #fff; }
.button-danger:hover { background: #a92f2f; }
/* Koyu temada --danger açık kiremit (#e0796c); üstünde beyaz 2.95 kalıyordu — metin koyulaşır,
   hover zemini de koyu metinle okunur kalsın diye açık tutulur. */
:root[data-theme="dark"] .button-danger { color: #2a0f0b; }
:root[data-theme="dark"] .button-danger:hover { background: #eb9084; }
.ledger-card { margin-top: 18px; }
.ledger-heading { padding: 19px 22px; border-bottom: 1px solid var(--border); }
.ledger-heading h2 { margin: 0; }
.ledger-heading p { margin: 3px 0 0; color: var(--muted); font-size: 12px; }
.delta { display: inline-block; min-width: 32px; }
.delta-plus { color: var(--success); }
.delta-minus { color: var(--danger); }

.data-table form { margin: 0; }
.schedule-table td:first-child { white-space: nowrap; }
.schedule-view-toolbar { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 14px 16px; border-bottom: 1px solid var(--border); background: var(--surface); }
.schedule-view-toolbar > div strong, .schedule-view-toolbar > div small { display: block; }
.schedule-view-toolbar > div strong { font-size: 13px; }
.schedule-view-toolbar > div small { margin-top: 1px; color: var(--muted); font-size: 10px; }
.view-switcher { display: inline-flex; padding: 3px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface-soft); }
.view-switcher a { padding: 5px 10px; border-radius: 6px; color: var(--muted); text-decoration: none; font-size: 11px; font-weight: 800; }
.view-switcher a.is-active { background: var(--surface); color: var(--primary-dark); box-shadow: 0 1px 3px rgba(22,33,38,.12); }

/* Program: form artık altta katlanabilir (haftalık pano tam genişlik) */
.schedule-stack { display: grid; gap: 16px; }
.schedule-add-details { margin: 0; }
.schedule-add-summary { display: inline-flex; align-items: center; gap: 9px; cursor: pointer; padding: 11px 20px; border-radius: 10px; background: linear-gradient(135deg, var(--primary-alt), var(--primary)); color: var(--on-primary); font-size: 14px; font-weight: 700; list-style: none; user-select: none; box-shadow: 0 8px 18px rgba(36,67,155,.22); transition: box-shadow .15s ease, transform .12s ease; }
.schedule-add-summary::-webkit-details-marker { display: none; }
.schedule-add-summary::marker { content: ''; }
.schedule-add-summary:hover { box-shadow: 0 10px 22px rgba(0,11,73,.3); transform: translateY(-1px); }
.schedule-add-details[open] > .schedule-add-summary { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.schedule-form-card-inline { border-top-left-radius: 0; }
.schedule-add-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 13px; align-items: end; }
.schedule-add-submit { grid-column: 1 / -1; }
/* details kapalıyken display:grid UA gizlemesini ezmesin (approval-fields'taki aynı tuzak) */
.schedule-add-details:not([open]) .schedule-form-card-inline { display: none; }

/* Onay kartı: Gelmedi/İptal iki seçenekli (hak düşmeden / 1 hak düşerek) */
.outcome-choice { display: inline-flex; align-items: center; gap: 8px; }
.outcome-choice > summary { list-style: none; user-select: none; }
.outcome-choice > summary::-webkit-details-marker { display: none; }
.outcome-choice > summary::marker { content: ''; }
.outcome-choice-options { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; border: 1px dashed var(--border); border-radius: 9px; background: var(--surface-soft); }
.outcome-choice:not([open]) .outcome-choice-options { display: none; }
.outcome-penalty { color: #a33; }
.outcome-penalty:hover { background: rgba(200,40,40,.08); color: #a33; }

/* Sürükle-bırak (gün değiştirme) */

/* Karttan hızlı kaldırma: sağ üst kırmızı çarpı (haftalık dersi tüm haftalardan kapatır) */
.slot-delete-form { position: absolute; top: 6px; right: 6px; margin: 0; line-height: 0; }
.slot-delete { width: 21px; height: 21px; display: grid; place-items: center; padding: 0; border: 0; border-radius: 50%; background: #fde4e4; color: #c03434; font-size: 14px; font-weight: 800; line-height: 1; cursor: pointer; opacity: .8; transition: background .15s ease, color .15s ease, opacity .15s ease; }
.slot-delete:hover { background: #dc2f45; color: #fff; opacity: 1; }
/* Liste satırındaki × (plan şablonu silme): tablo aksiyonlarında yer kaplamasın, mobilde de esnemesin */
.template-delete-form { display: flex; align-items: center; margin: 0; flex: 0 0 auto !important; }
:root[data-theme="dark"] .slot-delete { background: #3c1a1a; color: #ef8f8f; }
:root[data-theme="dark"] .slot-delete:hover { background: #dc2f45; color: #fff; }

.approval-list { display: grid; gap: 10px; }
/* Geniş ekranda onay kuyruğu iki sütun: kartlar tek sütunda gereksiz yayılmasın, ekrana iki kat
   ders sığsın. align-items:start → yan yana kartlar birbirinin yüksekliğine uzamaz (biri notunu
   açtığında diğeri boy atmaz). */
@media (min-width: 1180px) {
  .approval-list { grid-template-columns: repeat(2, minmax(0, 1fr)); align-items: start; }
}
.approval-window-form { display: flex; align-items: end; gap: 8px; }
.approval-window-form .field { min-width: 145px; }
.approval-window-form .field span { font-size: 10px; }
.approval-window-form select { min-height: 40px; padding-block: 7px; }
.approval-bulk-bar { position: sticky; top: 82px; z-index: 5; display: flex; justify-content: space-between; align-items: center; gap: 20px; margin-bottom: 16px; padding: 14px 16px; border-color: #b9d9d5; box-shadow: 0 10px 28px rgba(16, 85, 79, .12); }
.approval-bulk-selection { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.approval-bulk-selection strong { color: var(--primary-dark); font-size: 13px; }
.approval-bulk-selection small { flex-basis: 100%; color: var(--muted); }
.approval-bulk-actions { display: flex; justify-content: flex-end; gap: 8px; flex-wrap: wrap; }
.approval-check { display: inline-flex; align-items: center; gap: 7px; color: var(--text); font-size: 13px; font-weight: 750; cursor: pointer; }
.approval-check input { width: 18px; height: 18px; margin: 0; accent-color: var(--primary); cursor: pointer; }
.approval-card-check { flex: none; align-self: flex-start; padding-top: 4px; }
.approval-card-title { flex: 1; min-width: 0; }
.approval-card { padding: 0; overflow: hidden; scroll-margin-top: 96px; }
/* Birleşik onay kartı: aynı öğrencinin aynı gündeki arka arkaya dersleri */
.approval-card-multi { border-left: 3px solid var(--primary); }
.approval-multi-list { display: grid; gap: 5px; margin-bottom: 12px; }
/* Bekleyen onay yaşı: 1-2 gün sarı, 3-6 gün kırmızı, 7+ gün yanıp sönen kırmızı */
.approval-age { display: inline-flex; align-items: center; padding: 2px 9px; border-radius: 999px; font-size: 11px; font-weight: 800; letter-spacing: .02em; white-space: nowrap; vertical-align: 1px; }
.approval-age-warn { background: #fff3d6; color: #8a6410; }
.approval-age-late { background: #fde4e4; color: #a02c2c; }
.approval-age-critical { background: #dc2f45; color: #fff; box-shadow: 0 2px 8px rgba(220,47,69,.35); animation: approval-age-blink 1.1s ease-in-out infinite; }
@keyframes approval-age-blink { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
@media (prefers-reduced-motion: reduce) { .approval-age-critical { animation: none; } }
:root[data-theme="dark"] .approval-age-warn { background: #37300f; color: #e3c15e; }
:root[data-theme="dark"] .approval-age-late { background: #3c1a1a; color: #ef8f8f; }

.approval-multi-row { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; padding: 7px 11px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface-soft); font-size: 13px; }
.approval-multi-row strong { color: var(--primary-dark); min-width: 88px; }
.approval-multi-row span { flex: 1; min-width: 160px; }
.approval-multi-row b { font-weight: 750; }
.approval-multi-single { font-size: 12px; color: var(--muted); }
.approval-multi-single:hover { color: var(--primary-dark); }

/* İş Listesi/Bugün'den gelinen hedef kart: kaydırınca vurgulanır */
.approval-card:target { border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-soft), var(--shadow); animation: approval-target-flash 1.6s ease 1; }
@keyframes approval-target-flash {
  0% { box-shadow: 0 0 0 6px var(--primary-soft), var(--shadow); }
  100% { box-shadow: 0 0 0 3px var(--primary-soft), var(--shadow); }
}
.approval-card-header { display: flex; justify-content: space-between; align-items: center; gap: 14px; padding: 11px 18px; border-bottom: 1px solid var(--border); background: var(--surface-soft); }
.approval-card-header h2 { margin: 1px 0; font-size: 15px; overflow-wrap: anywhere; }
.approval-card-header p { margin: 0; color: var(--muted); font-size: 12px; overflow-wrap: anywhere; }
.approval-card-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 7px; line-height: 1.45; }
.approval-card-meta > span:not(.approval-age) { display: inline-flex; align-items: center; min-width: 0; }
.approval-card-meta > span:not(:first-child):not(.approval-age)::before { content: "·"; flex: none; margin-right: 7px; color: var(--muted); opacity: .72; }
.approval-date { color: var(--primary-dark); font-size: 12px; font-weight: 800; }
.approval-balance { flex: none; min-width: 78px; text-align: center; }
.approval-balance strong, .approval-balance span { display: block; }
.approval-balance strong { color: var(--primary-dark); font-size: 28px; line-height: 1; }
.approval-balance span { margin-top: 4px; color: var(--muted); font-size: 11px; }
.approval-form { min-width: 0; padding: 11px 18px; }
.approval-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 13px; margin-top: 12px; }
.approval-fields textarea { min-height: 72px; }
/* İki sütunlu kuyrukta kart ~560-660px'e iner; not alanları o genişlikte tek sütun daha rahat okunur.
   (Bu kural taban tanımdan SONRA gelmeli — medya sorgusu özgüllük eklemez, sıralama belirler.) */
@media (min-width: 1180px) and (max-width: 1449px) {
  .approval-fields { grid-template-columns: 1fr; }
}
.approval-actions { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: start; gap: 9px; margin-top: 0; }
.approval-card:not(.approval-card-multi) .approval-actions { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr) minmax(0, .72fr) minmax(0, 1.08fr); }
.approval-actions > .button,
.approval-actions > .outcome-choice { min-width: 0; width: 100%; }
.approval-actions > .button,
.approval-actions > .outcome-choice > summary { justify-content: center; text-align: center; overflow-wrap: anywhere; }
.approval-actions > .outcome-choice { display: grid; }
.approval-actions > .outcome-choice[open] { grid-column: 1 / -1; }
.approval-actions .outcome-choice-options { flex-wrap: wrap; margin-top: 7px; }
.approval-actions .outcome-choice-options .button { flex: 1 1 135px; }

/* İki sütunlu masaüstü kuyrukta kart genişliği yarıya iner; işlemler iki dengeli satıra geçer. */
@media (min-width: 1180px) and (max-width: 1449px) {
  .approval-card:not(.approval-card-multi) .approval-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Onay kartı — konu/not alanları varsayılan kapalı (yüzlerce ders için kompakt liste) */
.approval-notes { margin-bottom: 12px; }
.approval-notes-toggle { display: inline-flex; align-items: center; gap: 7px; width: fit-content; cursor: pointer; padding: 5px 11px; border: 1px dashed var(--border); border-radius: 8px; font-size: 12px; font-weight: 650; color: var(--muted); list-style: none; user-select: none; }
.approval-notes-toggle::-webkit-details-marker { display: none; }
.approval-notes-toggle::marker { content: ''; }
.approval-notes-toggle:hover { border-color: var(--primary); color: var(--primary-dark); }
.approval-notes-toggle svg { flex: none; opacity: .7; }
.approval-notes-toggle small { color: var(--muted); font-weight: 500; }
.approval-notes[open] > .approval-notes-toggle { border-style: solid; color: var(--primary-dark); }
.approval-notes[open] > .approval-notes-toggle small { display: none; }
/* details kapalıyken .approval-fields'ın display:grid'i UA gizlemesini ezmesin diye açıkça gizle */
.approval-notes:not([open]) > .approval-fields { display: none; }

/* Rapor oluşturucu — ders bölümü alan seçimi (girintili alt-onay kutuları) */
.choice-subgroup { display: grid; gap: 4px; margin: 2px 0 6px 26px; padding-left: 10px; border-left: 2px solid var(--border); }
.choice-subgroup .choice-sub { font-size: 12.5px; }
.choice-subgroup small { color: var(--muted); font-size: 11px; }
.report-lesson-homework { margin: 3px 0 0; font-size: 12px; }
.approval-detail-link { margin-left: 0; }
.approval-empty { padding: 60px 24px; }
.report-preview-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 18px; }
/* RAPOR OLUŞTURMA FORMU — İKİ SÜTUN (2026-08-23, kullanıcı: "düşey sütun olarak çok aşağıya
   gidiyor, yataya yayalım"). Ölçüldü: form 0.75fr'lik kenar sütununda 450 px genişlik ve
   1.438 px yükseklikti. Kart tam genişliğe çıktı; `position: sticky` KALKTI — tam genişlikte
   yapışkan bir kart ekranın tamamını kaplar, önizlemeyi hiç göstermez.
   Sol: iskelet (bölümler + manuel konular). Sağ: metin (şablon, AI, değerlendirme).
   Alt şerit iki sütuna yayılır. 1000 px altında tek sütuna iner. */
/* SOL DAR, SAĞ GENİŞ: sol sütun kısa etiketli onay kutuları, sağ sütun metin alanları ve
   üç kolonlu manuel konu satırları tutar. Eşit sütunda sağdaki "Ders | İşlenen konu | ×"
   satırı sıkışıyordu. */
.report-create-form { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); align-items: start; gap: 16px 20px; }
.report-create-sutun { display: grid; align-content: start; gap: 12px; min-width: 0; }
.report-create-genis { grid-column: 1 / -1; display: grid; gap: 12px; min-width: 0; }
.report-create-alt { grid-column: 1 / -1; display: grid; gap: 10px; padding-top: 12px; border-top: 1px solid var(--border); }
/* Ders yorumu kutuları da ızgarada: 4 ders alt alta 539 px tutuyordu, iki sütunda yarısı.
   `auto-fit` — 1 dersli öğrencide tek geniş kutu, 6 derslide üç sütun. */
.report-subject-comments { display: grid; grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); gap: 10px 14px; }
.report-subject-comments legend, .report-subject-comments .field-hint { grid-column: 1 / -1; }
.report-subject-comments .field { min-width: 0; }
@media (max-width: 1000px) { .report-create-form { grid-template-columns: minmax(0, 1fr); } }

/* BÖLÜM KUTULARI IZGARADA: sekiz kutu alt alta 451 px tutuyordu. Izgara hücresi kutunun
   KENDİSİ değil `.report-bolum` kabıdır — "Yapılan dersler"in alt seçimleri onunla aynı
   hücrede kalsın diye (ayrı hücre olsalardı hangi kutuya ait oldukları okunmazdı).
   O kutu iki sütunu birden kaplar: alt seçimleri dar sütunda sıkışmasın. */
.report-bolum-secim { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px 14px; }
.report-bolum { min-width: 0; }
.report-bolum-genis { grid-column: 1 / -1; }
.report-bolum-secim legend { grid-column: 1 / -1; }
.report-bolum-secim .choice { padding: 5px 4px; }
@media (max-width: 620px) { .report-bolum-secim { grid-template-columns: minmax(0, 1fr); } }
.manual-topic-builder { display: grid; gap: 10px; padding: 14px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
.manual-topic-builder legend { padding: 0 5px; color: var(--text); font-size: 13px; font-weight: 800; }
.manual-topic-builder legend span { margin-left: 5px; padding: 3px 7px; border-radius: 999px; background: var(--success-soft); color: var(--success); font-size: 10px; font-weight: 800; }
.manual-topic-builder .field-hint { margin: 0; }
.manual-topic-list { display: grid; gap: 8px; }
.manual-topic-row { display: grid; grid-template-columns: minmax(110px, .7fr) minmax(180px, 1.3fr) 34px; align-items: end; gap: 8px; }
.manual-topic-row .field { min-width: 0; }
.manual-topic-remove { width: 34px; height: 38px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--danger); font-size: 20px; line-height: 1; cursor: pointer; }
.manual-topic-remove:hover { border-color: var(--danger); background: var(--danger-soft); }
.manual-topic-builder > .button { justify-self: start; }
.manual-topic-builder > .choice-hint { display: block; margin: 0; }
.preview-packages { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.preview-packages span { padding: 7px 10px; border-radius: 8px; background: var(--surface-soft); color: var(--muted); font-size: 12px; }
.preview-packages strong { color: var(--primary-dark); }
.preview-lessons { display: grid; gap: 8px; margin-top: 16px; }
.preview-lessons article { padding: 10px 12px; border: 1px solid var(--border); border-radius: 9px; }
.preview-lessons strong, .preview-lessons small { display: block; }
.preview-lessons small { margin-top: 2px; color: var(--muted); }
.preview-lessons p { margin: 5px 0 0; font-size: 13px; }
.preview-homeworks-heading { display: flex; justify-content: space-between; gap: 16px; margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--border); font-size: 12px; }
.preview-homeworks-heading span { color: var(--muted); text-align: right; }
.preview-homeworks-heading b { color: var(--danger); }
.preview-homeworks { margin-top: 9px; }
.compact-empty { padding: 26px 16px; }
.report-history-card { margin-top: 18px; }
.report-screen-actions { margin-bottom: 14px; }
.report-screen-actions > div { display: flex; gap: 6px; }
.report-edit-note { width: min(210mm, 100%); margin: -4px auto 14px; padding: 10px 13px; border: 1px solid #ecd4a9; border-radius: 10px; background: #fff8e9; color: #8b5b12; font-size: 13px; line-height: 1.45; }
/* Paket teklifi belgesi (plan-template-offer): rapor belge stillerini paylaşır */
.offer-section-picker { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; width: min(210mm, 100%); margin: -4px auto 14px; padding: 10px 14px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); font-size: 13px; }
.offer-section-picker > strong { color: var(--muted); font-size: 12px; }
/* Süzgeç notu KENDİ SATIRINDA: şeridin flex akışında kutuların arasına girerse
   "hangi sınava göre" bilgisi iki onay kutusunun ortasında kaybolur. */
/* Gün menüsündeki silme YIKICI: işaretleme düğmelerinden ayrı satırda, üstünde ince bir
   ayraçla durur — yanlış tuşa basmak geri alınamaz. */
/* Toplu uygulama kutusu: kaydet düğmesinin hemen üstünde, açıklaması altında.
   Yayılan bir işlem olduğu için kutunun kendisi de görsel olarak ayrılır. */
/* HATIRLATICI UYARI ŞERİDİ (2026-09-04): sayfanın en üstünde, kırmızı ve göz ardı
   edilemez. Renk token'dan gelir — sabit hex koyu temada okunmaz (depo kuralı). */
.hatirlatici-uyari { margin: 0 0 14px; padding: 10px 14px; border: 1px solid var(--danger); border-left-width: 4px; border-radius: 10px; background: var(--danger-soft); }
.hatirlatici-uyari-baslik { color: var(--danger); font-size: 13px; margin-bottom: 6px; }
.hatirlatici-uyari-liste { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.hatirlatici-uyari-liste li { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.hatirlatici-uyari-metin { display: flex; flex-direction: column; min-width: 0; }
.hatirlatici-uyari-metin b { font-size: 13.5px; }
.hatirlatici-uyari-metin small { color: var(--muted); font-size: 11.5px; }
.hatirlatici-uyari-liste form { display: contents; }
.hatirlatici-uyari-devam { margin: 8px 0 0; font-size: 12px; }
.cprog-ayni-konu { margin: 4px 0 10px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface-2); }
.cprog-ayni-konu small { display: block; margin-top: 2px; color: var(--muted); }
.cprog-toplu-sil-gun { margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--border); }
.cprog-toplu-sil-gun .cprog-toplu-sil { width: 100%; color: var(--danger); }
.offer-section-note { flex: 1 0 100%; order: 99; margin: 0; color: var(--muted); font-size: 11.5px; }
.offer-section-choice { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; white-space: nowrap; }
.offer-section-choice input { width: 15px; height: 15px; accent-color: var(--primary); }
/* TARİH ARALIĞI ŞERİDİ (2026-09-05 kullanıcı: "burası güzel gözükmüyor"). Üstteki 15px
   kuralı ONAY KUTUSU içindir; şeritteki tarih kutuları da ezilip kare kalıyordu — kod doğru
   görünür, hata sessizdir. Tarih kutusuna kendi ölçüsü verilir, etiket üstte küçük yazı. */
.cprog-yazdir-aralik { gap: 10px 16px; }
.cprog-yazdir-aralik .offer-section-choice { flex-direction: column; align-items: flex-start; gap: 3px; }
.cprog-yazdir-aralik .offer-section-choice span { color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; }
.cprog-yazdir-aralik input[type="date"] { width: auto; height: auto; min-width: 150px; padding: 7px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: inherit; font: inherit; font-size: 13px; }
.cprog-yazdir-aralik .button { align-self: flex-end; }
.cprog-yazdir-aralik small { flex: 1 0 100%; margin: 0; color: var(--muted); }
/* GRUPLU ÇIKTI SEÇENEKLERİ (2026-09-05 kullanıcı: "buranın tasarımı çok karışık saçma").
   Her küme kendi etiketiyle: DÖNEM / BİÇİM / HAFTA / KUTULAR / FORMAT. Kapsüller mevcut
   exam-view-tabs görünümünü kullanır, bu bağlamda bir tık küçülür. */
.pd-arac-gruplari { display: flex; flex-wrap: wrap; gap: 10px 22px; width: min(210mm, 100%); margin: -6px auto 14px; padding: 10px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); }
.pd-arac-grubu { display: flex; flex-direction: column; gap: 5px; }
.pd-arac-grubu > span { color: var(--muted); font-size: 10.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.pd-arac-grubu .exam-view-tabs a { padding: 5px 12px; font-size: 12.5px; }
@media print { .pd-arac-gruplari { display: none !important; } }
.report-document [data-offer-section][hidden] { display: none; }
.offer-subject-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; margin: 14px 0 6px; }
.offer-subject-head strong { font-size: 13px; }
.offer-subject-head span { color: #68767d; font-size: 11px; font-weight: 650; white-space: nowrap; }
.offer-topic-table { margin-bottom: 4px; }
.offer-unit { color: #68767d; font-size: 10px; }
.offer-note, .offer-terms { margin: 0; color: #46555c; font-size: 11.5px; line-height: 1.55; }
.offer-terms { margin-top: 8px; }
.offer-price-table td:first-child { width: 60%; }
/* Teklif belgesi canlı düzenleme: ders saati / ücret kutuları belge içinde düz metin gibi durur */
.offer-live-note { width: min(210mm, 100%); margin: -4px auto 14px; padding: 9px 13px; border: 1px solid var(--border); border-left: 3px solid var(--primary); border-radius: 8px; background: var(--surface); color: var(--muted); font-size: 12px; line-height: 1.55; }
.offer-lesson-input, .offer-price-input, .offer-title-input { border: 1px solid transparent; border-radius: 5px; background: transparent; color: inherit; font: inherit; padding: 1px 3px; }
.offer-lesson-input { width: 52px; text-align: right; }
.offer-price-input { width: 96px; text-align: right; }
.offer-title-input { width: 100%; }
.offer-lesson-input:hover, .offer-price-input:hover, .offer-title-input:hover { border-color: #cbd7da; }
.offer-lesson-input:focus, .offer-price-input:focus, .offer-title-input:focus { outline: none; border-color: var(--primary); background: var(--surface); }
.offer-row-tools { width: 26px; }
.offer-row-remove { width: 20px; height: 20px; padding: 0; border: 1px solid transparent; border-radius: 50%; background: transparent; color: #b3423a; font-size: 14px; line-height: 1; cursor: pointer; }
.offer-row-remove:hover { border-color: #e2b6b2; background: #fdeceb; }
.offer-row-add { margin: 2px 0 10px; padding: 3px 9px; border: 1px dashed #cbd7da; border-radius: 999px; background: transparent; color: #68767d; font-size: 10.5px; cursor: pointer; }
.offer-row-add:hover { border-color: var(--primary); color: var(--primary); }
/* Koordinatör değerlendirmesi hazır metin seçici */
.comment-templates { border: 1px solid var(--border); border-radius: 11px; background: var(--surface-soft); }
.comment-templates:not([open]) > *:not(summary) { display: none; }
.comment-templates > summary { padding: 11px 13px; cursor: pointer; font-weight: 750; font-size: 13px; color: var(--primary-dark); }
.comment-templates > .auth-help { margin: 0 13px 9px; }
.comment-template-tabs { display: flex; gap: 6px; flex-wrap: wrap; padding: 0 13px 10px; }
.comment-template-tab { padding: 5px 13px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 12px; font-weight: 750; cursor: pointer; }
.comment-template-tab.is-active { border-color: var(--primary); background: var(--primary-soft); color: var(--primary-dark); }
.comment-template-list { display: grid; gap: 8px; max-height: 380px; overflow-y: auto; padding: 0 13px 13px; }
.comment-template { padding: 10px 12px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface); }
.comment-template header { display: flex; align-items: center; gap: 8px; margin-bottom: 5px; }
.comment-template header strong { flex: 1; font-size: 12.5px; }
.comment-template p { margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.5; }
.tone-badge { padding: 2px 9px; border-radius: 999px; font-size: 10.5px; font-weight: 800; letter-spacing: .02em; white-space: nowrap; }
.tone-positive { background: #e3f4ea; color: #1e7c46; }
.tone-neutral { background: #fff3d6; color: #8a6410; }
.tone-negative { background: #fde4e4; color: #a02c2c; }
.tone-past { background: #e8eef7; color: #3c5a86; }
.tone-saved { background: #ece7fb; color: #5b3fa8; }
:root[data-theme="dark"] .tone-positive { background: #143523; color: #6fd39a; }
:root[data-theme="dark"] .tone-neutral { background: #37300f; color: #e3c15e; }
:root[data-theme="dark"] .tone-negative { background: #3c1a1a; color: #ef8f8f; }
:root[data-theme="dark"] .tone-past { background: #1a2740; color: #8fb0dd; }
:root[data-theme="dark"] .tone-saved { background: #261d42; color: #b39ded; }
.comment-template-meta { display: block; margin-top: 6px; color: var(--muted); font-size: 11px; }
.comment-template-empty { margin: 0; padding: 14px; color: var(--muted); font-size: 12.5px; line-height: 1.5; }
.comment-save-row { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.comment-save-row small { flex: 1; min-width: 200px; color: var(--muted); line-height: 1.4; }
:root[data-theme="dark"] .report-edit-note { background: #34290f; border-color: #6d5620; color: #e8c46f; }
.report-document.is-editing { outline: 2px dashed var(--primary); outline-offset: 8px; cursor: text; }
.report-document.is-editing:focus { outline: 2px dashed var(--primary); }
.report-document.is-editing :is(h2, p, td, th, strong, small, span):hover { background: rgba(15,139,124,.07); }
.report-document { width: min(210mm, 100%); min-height: 297mm; margin: 0 auto; padding: 15mm 15mm 13mm; border: 1px solid #d9e1e3; background: #fff; color: #172126; box-shadow: 0 18px 50px rgba(22,33,38,.1); font-family: Arial, sans-serif; }
.report-document-header { display: flex; justify-content: space-between; align-items: center; gap: 24px; padding-bottom: 14px; border-bottom: 3px solid var(--primary); }
.report-brand { display: flex; align-items: center; gap: 14px; }
.report-brand strong, .report-brand small { display: block; }
.report-brand strong { font-size: 24px; }
.report-brand small { color: #68767d; font-size: 11px; }
.report-label { text-align: right; }
.report-label span, .report-label small { display: block; }
/* KÂĞITTA TOKEN OKUNMAZ. .report-document koyu temada da BEYAZ kalır (satır 93); var(--primary-dark)
   ise koyu temada #9cb3ff'e döner ve beyaz üzerinde 2.04:1 kalırdı (ölçüldü: teklif belgesinin
   73 metin düğümünden 11'i, deneme programının 136'sından 31'i sınır altındaydı). Bu ağaçtaki
   metin renkleri bu yüzden SABİT hex — #000b49 beyazda 17.0:1. */
.report-label span { color: #000b49; font-size: 13px; font-weight: 850; letter-spacing: .09em; }
.report-label small { margin-top: 2px; color: #68767d; }
.report-student-card { display: grid; grid-template-columns: 1fr 1fr; gap: 9px 28px; margin-top: 16px; padding: 12px 14px; border: 1px solid #dfe7e9; border-radius: 10px; background: #f8fafb; }
.report-student-card span, .report-student-card strong { display: block; }
/* #68767d bu kartın #f8fafb zemininde 4.48:1 idi (beyazda 4.68 geçiyordu, kartta düşüyordu). */
.report-student-card span { color: #5b6672; font-size: 10px; font-weight: 750; text-transform: uppercase; letter-spacing: .04em; }
.report-student-card strong { margin-top: 2px; font-size: 12px; }
/* Koc formundaki fotograf onizlemesi (2026-09-17). */
.koc-foto-onizleme { display: flex; flex-direction: row; align-items: center; gap: 14px; }
.koc-foto-onizleme .check-row { margin: 0; }
.koc-foto-onizleme img { width: 96px; height: 96px; border-radius: 50%; object-fit: cover; border: 2px solid var(--border); }
.report-section { margin-top: 18px; }
.report-section h2 { margin: 0 0 8px; color: #000b49; font-size: 12px; letter-spacing: .07em; text-transform: uppercase; }
.report-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 9px; }
.report-metrics > div { padding: 9px; border: 1px solid #dfe7e9; border-radius: 9px; text-align: center; }
.report-metrics strong, .report-metrics span { display: block; }
.report-metrics strong { font-size: 22px; line-height: 1.1; }
.report-metrics span { margin-top: 3px; color: #68767d; font-size: 10px; }
.report-metrics .metric-completed strong { color: #000b49; }
.report-metrics .metric-noshow strong { color: #b66d10; }
.report-homework-metrics { margin-bottom: 9px; }
.report-homeworks-section { break-inside: auto; }
.report-table { width: 100%; border-collapse: collapse; font-size: 10.5px; }
.report-table thead { display: table-header-group; }
.report-table tr { break-inside: avoid; page-break-inside: avoid; }
.report-table th { padding: 6px 7px; border-bottom: 2px solid #cbd7da; color: #68767d; text-align: left; font-size: 9px; text-transform: uppercase; letter-spacing: .035em; }
.report-table td { padding: 6px 7px; border-bottom: 1px solid #e6ecee; vertical-align: top; }
.report-table td small { display: block; margin-top: 2px; color: #68767d; font-size: 9px; }
.report-table td p { margin: 3px 0 0; color: #4f5e65; white-space: pre-wrap; }
.report-remaining { color: var(--primary-dark); font-weight: 850; }
/* Ders hakkı dökümü: öğrenci hücresi birden çok paket satırını kapsar (rowspan) */
.package-print-table .package-print-student { width: 30%; border-right: 1px solid #e6ecee; vertical-align: top; }
.package-print-table .package-print-subtotal { margin-top: 4px; color: var(--primary-dark); font-weight: 750; }
.package-print-table tbody tr { break-inside: avoid; page-break-inside: avoid; }
.report-date { white-space: nowrap; }
.report-table tfoot th, .report-table tfoot td { padding: 6px 7px; border-top: 2px solid #cbd7da; border-bottom: none; font-weight: 800; color: #33454c; text-align: left; font-size: 10px; text-transform: none; letter-spacing: 0; }
.report-table tfoot td.numeric { text-align: right; }
.report-empty { margin: 0; padding: 11px; border-radius: 8px; background: #f8fafb; color: #68767d; font-size: 11px; }

/* --- Öğrenci çalışma takvimi çıktısı (coach-program-yazdir.php) ---------------------
   Iki görünüm tek kâğıtta: gün sütunlu IZGARA + kalemle işaretlenecek LİSTE.
   Kutucuklar gerçek <input> DEĞİL bordürlü kare: kâğıda basılınca form öğeleri
   tarayıcıya göre farklı çiziliyor, kare her yerde aynı basılır.
   Marka bandı ve renkler print-color-adjust ile KÂĞITTA DA basılır (.report-document). */
.program-sheet .report-document-header { padding: 14px 16px; border-bottom: 0; border-radius: 12px; background: linear-gradient(120deg, #000b49 0%, #10225f 55%, #1c3a8f 100%); color: #fff; box-shadow: inset 0 -3px 0 #f9be03; }
.program-sheet .report-brand strong { color: #fff; }
.program-sheet .report-brand small { color: #c8d2f0; }
.program-sheet .report-label span { color: #f9be03; }
.program-sheet .report-label small { color: #dfe6fa; }
.program-sheet .report-brand-logo { border-radius: 14px; background: #fff; padding: 5px; }
.program-grid { table-layout: fixed; }
.program-grid th { width: 14.28%; padding: 7px 4px; border: 1px solid #0b1a55; background: #000b49; color: #fff; text-align: center; font-size: 9.5px; letter-spacing: .06em; }
.program-grid td { height: 96px; padding: 5px 4px; border: 1px solid #cfd8dc; vertical-align: top; }
.program-grid-gorev { margin-bottom: 5px; padding: 4px 5px; border-left: 3px solid #f9be03; border-radius: 4px; background: #f4f7fc; }
.program-grid-gorev b { display: block; color: #10225f; font-size: 9px; text-transform: uppercase; letter-spacing: .03em; }
.program-grid-gorev span { display: block; font-size: 9.5px; line-height: 1.3; }
.program-grid-gorev small { display: block; margin-top: 1px; color: #5d6b72; font-size: 8.5px; }
.program-grid-gorev .program-grid-konu { padding: 3px 0; }
.program-grid-gorev .program-grid-konu + .program-grid-konu { border-top: 1px dashed #9aa8b9; }
.program-grid-gorev .program-grid-konu em { display: block; margin-top: 1px; color: #4b5b70; font-size: 8.5px; font-style: normal; font-weight: 700; }
/* SAAT/SÜRE ROZETİ (2026-08-29): konunun ÖNÜNDE, kalın ve koyu. Ölçü satırının içinde
   8,5 puntoyla basılırken kâğıtta gözden kaçıyordu — kullanıcı "gözüksün" dedi.
   Kutu kenarlığı gri basan yazıcıda da okunur (kâğıt paleti temadan bağımsızdır). */
.program-grid-gorev .program-grid-saat {
  display: inline-block; margin-right: 4px; padding: 0 3px;
  border: 1px solid #8fa0b5; border-radius: 3px;
  background: #eef2f8; color: #10225f;
  font-size: 9px; font-weight: 800; white-space: nowrap;
}
/* ÜÇLÜ YAZMA HANELERİ: Doğru / Yanlış / Boş sırası tablonun üstünde yalnız bir kez yazılır.
   Kartın içine D/Y/B harfleri koymak dar gün sütunlarında kutuları sıkıştırıyordu. */
.program-grid-dyb-aciklama { margin: 0 0 5px; color: #4b5b70; font-size: 8.5px; line-height: 1.35; }
.program-grid-dyb-aciklama strong { color: #10225f; }
/* KUTULAR EZİLMEZ (2026-08-29 kullanıcı: "PDF'te boş kutular gözükmüyor"). Ölçüldü: 7 sütunlu
   A4'te görev kutusuna 68 px kalıyor, üç kutu + boşluklar 74 px istiyordu; `flex: 0 1 22px` +
   `min-width: 0` ikilisi kutuları 2 px'e ezip çizgiye çeviriyordu — kâğıtta hiç görünmüyor.
   Şimdi 18 px SABİT (3×18 + 2×4 = 62 px, 6 px pay) ve şerit gerekirse SARAR: sığmadığında
   ezilmek yerine alt satıra iner. Depoda yazılı tuzağın aynısı (müfredat kapsaması, sıfır
   genişliğe düşen konu adı). */
.program-grid-dyb { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-top: 9px; }
/* D/Y/B HARFİ KUTUNUN ÜSTÜNDE (2026-09-04 kullanıcı: "tablodaki kutucuklarda D Y B
   başlıkları yok"). Harf ::before ile basılır ve kutunun DIŞINA taşar (position:absolute):
   kutu genişliği değişmez, yani 2026-08-26'da harflerin kaldırılma gerekçesi olan "dar
   hücreyi taşırıyor" sorunu geri gelmez. Üstte yer açmak için satıra 8px boşluk. */
.program-grid-dyb b { position: relative; display: inline-block; flex: 0 0 18px; min-width: 18px; height: 13px; border: 1px solid #6f8299; border-radius: 3px; background: #fff; }
.program-grid-dyb b[data-dyb]::before { content: attr(data-dyb); position: absolute; left: 0; right: 0; top: -7px; text-align: center; font-size: 6px; font-weight: 700; line-height: 1; color: #6f8299; }
/* KAYNAK HANESİ (2026-09-05 kullanıcı: "3 tane soru çözme kutusunun altına hangi kaynaktan
   çözdün kutusu isteğe bağlı çıksın"). D/Y/B kalıbının aynısı: etiket ::before ile kutunun
   ÜSTÜNDE, kutu hücre genişliğine yayılır. Yalnız kaynak=1 istenince basılır. */
.program-grid-kaynak { display: flex; margin-top: 11px; }
.program-grid-kaynak b { position: relative; display: block; flex: 1 1 auto; min-width: 46px; height: 13px; border: 1px solid #6f8299; border-radius: 3px; background: #fff; }
.program-grid-kaynak b[data-dyb]::before { content: attr(data-dyb); position: absolute; left: 0; right: 0; top: -7px; text-align: center; font-size: 6px; font-weight: 700; line-height: 1; color: #6f8299; }
/* Harf icin ust bosluk: :has() destegine birakilmaz, kutularin hepsi harfli. */
/* Aynı ders kutusunda birden çok görevin kendi satırı olduğunda araları ayrılsın. */
.program-grid-gorev .program-grid-dyb + .program-grid-konu { margin-top: 5px; }
/* IZGARA BAŞLIĞINDA GÜN TARİHİ (2026-09-03): kayan pencerede "Perşembe" tek başına hangi
   haftanın perşembesi olduğunu söylemez; gün adının altına kısa tarih yazılır. */
.program-grid-gun-tarih { display: block; font-weight: 400; font-size: 10.5px; color: var(--pd-muted, #555); }
.program-grid-bos { color: #b6c1c6; font-size: 10px; }
.program-gunsuz-baslik { margin: 12px 0 4px; font-size: 10px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }
.program-gunsuz { margin: 0; padding-left: 16px; font-size: 10.5px; line-height: 1.6; }
.program-liste-not { margin: 0 0 8px; padding: 7px 10px; border-left: 3px solid #f9be03; background: #fffaf0; font-size: 10.5px; }
.program-liste thead th { border: 1px solid #0b1a55; background: #000b49; color: #fff; letter-spacing: .05em; }
.program-liste td { padding: 8px 6px; }
.program-liste tbody tr:nth-child(even) td { background: #f6f8fc; }
.program-liste-kutu { width: 70px; text-align: center; }
/* Soru dökümü haneleri (2026-08-18): dört dar sütun A4'e sığsın diye 46px; başlık iki satırlı
   olduğu için "Yanlış" tek satırda durur. Kitap okumada dördü tek hücreye birleşir. */
.program-liste-kutu-dar { width: 46px; text-align: center; }
.program-liste-grup { font-size: 8.5px; letter-spacing: .06em; }
.program-liste-okuma small { display: block; margin-bottom: 3px; color: #5d6b72; font-size: 7.5px; letter-spacing: .04em; }
.program-check { display: inline-block; width: 17px; height: 17px; border: 1.6px solid #10225f; border-radius: 4px; background: #fff; box-shadow: inset 0 0 0 2px #fff; }
/* İzlence çıktısı: bu hafta altın vurgulu, geçmiş haftalar soluk; hedefsiz geçmiş dikkat çeker. */
.pacing-print-no { width: 52px; text-align: center; }
.pacing-print-no small { display: block; color: #b98a00; font-size: 7.5px; font-weight: 800; letter-spacing: .05em; }
.pacing-print-simdi td { background: #fff7dc !important; box-shadow: inset 0 0 0 1px #f9be03; }
.pacing-print-gecmis td { color: #5d6b72; }
.pacing-print-gecmis .pacing-print-bos { color: #c33149; font-weight: 800; }
.pacing-print-bos { color: #b6c1c6; }
/* İzlence çıktısındaki akademik takvim sütunu. Bu blok BASILI belgeye ait: renkler bilerek
   sabit (belge her temada aynı kâğıda çıkar, print-document.php kalıbı) ve tür adı METİN
   olarak yazıldığı için gri basan yazıcıda da okunur. */
.pacing-print-takvim { width: 168px; }
.pacing-print-eslik { width: 190px; color: #3d4a51; font-size: 9px; }
.pacing-eslik-hucre { color: var(--muted); font-size: 13px; max-width: 260px; }
.pacing-eslik-baslik small { display: block; font-weight: 500; }
.pacing-print-olay { display: block; font-size: 8px; line-height: 1.35; color: #3d4a51; }
.pacing-print-olay b { color: #172126; }
.pacing-print-kapali { display: block; margin-top: 2px; font-size: 8px; font-weight: 800; color: #c33149; }

.program-imza { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px; margin-top: 22px; }
.program-imza span { display: block; color: #68767d; font-size: 9.5px; }
.program-imza i { display: block; margin-top: 20px; border-bottom: 1px dotted #8fa5ab; }

/* Çalışma günü çipleri (öğretmen listesi, koç profili): kısa gün rozetleri yan yana. */
/* ÖZGÜLLÜK ŞART (2026-08-19'da tarayıcıda ölçüldü): `.data-table td span` (0,1,2) sade
   `.work-day-chips`i (0,1,0) eziyor ve kap `display: block` oluyordu — gap ölüyor, gün çipleri
   BİTİŞİK basılıyordu ("Sa ÖSÇa ÖSPe ÖS"). Çipler de blok olup alt alta düşüyordu. Aynı tuzak
   menüde bir kez yaşandı (.main-nav span > .nav-group-divider); tablo öneki kaldırılırsa geri döner. */
.work-day-chips,
.data-table td .work-day-chips { display: inline-flex; flex-wrap: wrap; gap: 3px; }
.work-day-chips .status,
.data-table td .work-day-chips .status { display: inline-block; padding: 2px 6px; font-size: 10.5px; }

/* Koçluk çalışma programı takvimi: randevu takvimi kalıbı + görev çipleri.
   Çip rengi durumdan gelir (status-* sınıfları); + hücreye görev ekler. */
.cprog-baslik { min-width: 190px; text-align: center; font-size: 13.5px; }
.cprog-add { display: inline-flex; align-items: center; justify-content: center; width: 21px; height: 21px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--text); font-size: 15px; font-weight: 800; line-height: 1; text-decoration: none; }
.cprog-add:hover { border-color: var(--brand-gold, #f9be03); background: var(--surface-2, #f3f6fb); }
.cprog-chip { display: block; position: relative; margin-top: 6px; padding: 6px 9px 6px 10px; border: 1px solid var(--border); border-left: 4px solid var(--muted); border-radius: 8px; background: var(--surface); box-shadow: 0 1px 3px rgba(9, 20, 60, .07); font-size: 12px; line-height: 1.4; }
/* AYNI DERS TEK KUTUDA (2026-08-29 kullanıcı: "PDF'te aynı dersten farklı konu eklediğimizde
   çıkan stili çalışma programının kendisinde de yap"). Ders adı bir kez başlıkta; konular
   altında kendi çiplerinde kalır — çipler tıklanabilir olmayı sürdürmeli (onay, düzenle,
   çoğalt, sürükle), o yüzden kutu yalnız SARMALAR, çipleri satıra çevirmez. */
.cprog-ders-grup { margin-top: 6px; padding: 6px 7px 7px; border: 1px solid var(--border); border-radius: 9px; background: var(--bg); }
.cprog-ders-grup-basligi { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 2px 8px; padding: 0 2px; font-size: 12px; }
.cprog-ders-grup-basligi small { color: var(--muted); font-size: 10.5px; font-weight: 500; }
/* İçerideki ilk çipin üst boşluğu kutu dolgusuyla ikilenmesin. */
.cprog-ders-grup > .cprog-chip:first-of-type { margin-top: 4px; }

/* Çip işlem şeridi: ✓ yapıldı, ✕ çalışılmadı, çöp kaldır — tıklanır mini düğmeler. */
/* İŞLEM ŞERİDİ SARAR (2026-08-26): çoğalt düğmesi eklenince altı düğme dar telefon
   hücresine sığmadı ve SAYFA 4px yana kaydı (ölçüldü: düğme kaldırılınca taşma 0).
   flex-wrap satırı ikiye böler — hücre genişlemez, sayfa kaymaz. */
.cprog-chip-islem { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; padding-top: 5px; border-top: 1px dashed var(--border); }
/* İKİ ŞERİT (2026-08-29): üstte göreve dokunanlar (düzenle/çoğalt/kaldır), altta sonucu
   işaretleyenler (✓ ◐ ✕). Alt şeridin kendi kesikli çizgisi YOK — iki çizgi üst üste çipi
   kutu kutu gösterir; boşluk ayırmaya yetiyor. Durum düğmeleri sağa değil SOLA hizalı kalır
   ki göz üstteki şeridin altında aynı noktadan devam etsin. */
.cprog-chip-durum { margin-top: 4px; padding-top: 0; border-top: 0; }
/* Üç durum düğmesi TEK formda (2026-08-30): form flex öğesi değil kabuktur — contents
   olmadan üç düğme tek blokta yığılır (tablo düğmelerindeki kalıbın aynısı). */
.cprog-chip-durum form { display: contents; }
/* Kapalı kapsama satırı: sayaç + aç/gizle düğmesi tek satırda. */
.cprog-kapsama-kapali { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 4px 0 0; color: var(--muted); font-size: 13px; }
.cprog-chip-islem form { margin: 0; }
.cprog-mini { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; padding: 0; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--muted); font-size: 12px; font-weight: 800; line-height: 1; cursor: pointer; }
.cprog-mini-ok:hover, .cprog-mini-ok.is-secili { border-color: var(--success); background: var(--success-soft, #e2f3ec); color: var(--success); }
/* Düzenle kalemi (2026-08-25): <a> etiketi — buton tabanını alır, bağlantı çizgisi taşımaz. */
.cprog-mini-duzenle { text-decoration: none; font-size: 11px; }
.cprog-mini-duzenle:hover { border-color: var(--primary); background: var(--primary-soft); color: var(--primary-dark); }
.cprog-mini-miss:hover, .cprog-mini-miss.is-secili { border-color: var(--danger); background: var(--danger-soft, #fbe4e8); color: var(--danger); }
.cprog-mini-sil { font-size: 10px; }
.cprog-mini-sil:hover { border-color: var(--danger); color: var(--danger); }
/* TABLO ARAÇLARI (2026-08-21): otomatik doldur + toplu kaldır, çalışma tablosunun SAĞ ÜSTÜNDE.
   `margin-left: auto` şeridin sağ ucuna iter; teslim rozeti ve dönem sekmeleriyle aynı satırda
   kalır, dar ekranda kendi satırına sarar. */
/* `order` ile en SAĞA: şeritte `.cprog-donem` zaten `margin-left: auto` taşıyor, yani boşluk
   ondan ÖNCE toplanıyor ve sonrasındaki her şey sağa paketleniyor. İkinci bir `auto` kenar
   boşluğu koymak boşluğu ikiye böler ve grup ortada kalırdı (ölçüldü: 533px açıkta). Kaynak
   sırası anlam sırasıdır (tablo notunun hemen ardı), görsel sıra buradan verilir. */
/* Araç şeridi TAM SATIR (2026-09-02 kullanıcı: "otomatik doldurla toplu sil sağda olsun,
   diğeri solda"): Geçmişe Göre Devam solda kalır, .cprog-arac-sag margin-left:auto ile sağa
   yaslanır. Dar ekranda sağ grup sarar ve alt satıra iner — yatay taşma yok. */
.cprog-tablo-araclar { display: flex; flex: 1 0 100%; flex-wrap: wrap; align-items: center; gap: 8px; order: 9; }
.cprog-arac-sag { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-left: auto; }
.cprog-week-ust .cprog-tablo-araclar .button { min-height: 34px; }
/* Ay görünümünde tablo şeridi yok; araçlar için ince bir şerit açılır. */
.cprog-ay-ust { justify-content: flex-end; }

/* OTOMATİK PROGRAM PANELİ: tablonun altında açılır kapanır. Özet satırı tıklanabilir olduğunu
   imleçle söyler; ok işareti tarayıcının kendi <details> göstergesidir. */
.cprog-otomatik > summary { cursor: pointer; }
.cprog-otomatik > summary::-webkit-details-marker { color: var(--muted); }
.autofill-panel { display: grid; gap: 14px; margin-top: 14px; }
/* KISMİ YENİLEME sırasında kap soluklaşır: kullanıcı "bir şey oluyor" görsün. Yükseklik
   sabit kalır (opacity), yoksa sayfa zıplar ve tıkladığı yer kayar. */
.parca-yenileniyor { opacity: .55; transition: opacity .12s ease; pointer-events: none; }

/* ÇIKARILABİLİR ÖNİZLEME GÖREVİ (2026-08-21): çip artık bir <label> — her yerine tıklamak
   kutuyu değiştirir, koç küçük kutuyu nişan almak zorunda kalmaz. İşareti kaldırılan görev
   soluklaşır ve ÜSTÜ ÇİZİLİR: "yazılmayacak" hâli tek bakışta okunmalı. */
.autofill-secilir { display: flex; align-items: flex-start; gap: 8px; cursor: pointer; }
.autofill-secilir > input[type="checkbox"] { flex: none; margin-top: 2px; }
.autofill-cip-govde { display: grid; gap: 2px; min-width: 0; }
/* TÜR NİTELEYİCİSİ ZORUNLU. Kip bir kez `> input:not(:checked)` diye yazıldı; sonra gün
   ataması için ikinci bir `<input type="hidden">` doğrudan çocuk olarak eklendi. GİZLİ ALAN
   ASLA `:checked` OLMAZ, yani `:not(:checked)` her zaman tutuyor ve İŞARETLİ görevler de
   soluk + üstü çizili basılıyordu (2026-08-22'de kullanıcı bildirdi). Nitelemeden yazılan
   `:not(:checked)` ikinci bir input eklendiği gün sessizce kırılır. */
.autofill-secilir:has(> input[type="checkbox"]:not(:checked)) { opacity: .5; }
.autofill-secilir:has(> input[type="checkbox"]:not(:checked)) .autofill-cip-govde strong { text-decoration: line-through; }
.autofill-secim-not { margin: 0; color: var(--muted); font-size: 12.5px; line-height: 1.55; }
@media (prefers-reduced-motion: reduce) { .parca-yenileniyor { transition: none; } }
.autofill-panel .autofill-olcum { margin: 0; }
/* Özet + uygula düğmesi aynı satırda: koç planı görüp yazma düğmesine uzanırken göz
   gezdirmesin. Dar ekranda alt alta iner. */
.autofill-ozet-satiri { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 14px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.autofill-ozet-satiri strong { font-size: 15px; }
.autofill-ozet-satiri p { margin: 2px 0 0; color: var(--muted); font-size: 12.5px; }
.autofill-ozet-satiri form { margin: 0; }
.autofill-ozet-metin { min-width: 0; }

/* TEK EYLEM KÜMESİ (2026-08-22, kullanıcı: "süre ve yeniden oluşturu da Programı Doldur'un
   yanına koy, düzenli olsun"). Süre + Yeniden Hesapla + Varsayılanlar + Doldur tek satırda;
   dar ekranda sarar ve düğmeler tam genişliğe YAYILMAZ (`align-items: center`). */
.autofill-eylemler { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px; }
.autofill-eylemler .autofill-sure { margin: 0; min-width: 150px; }
.autofill-eylemler .autofill-sure span { font-size: 11px; }
.autofill-eylemler .button { margin-bottom: 1px; }

/* TOPLU KALDIRMA: araç çubuğunda bir FORM içinde durur; form varsayılan blok davranışıyla
   düğmeleri alt satıra iterdi. Düğme yıkıcı olduğunu rengiyle söyler ama araç çubuğunun en
   sağında ve ghost tonda kalır — yanına gelinmeden basılmaz. */
.cprog-toplu-sil-form { display: inline-flex; margin: 0; }
.cprog-toplu-sil { border-color: var(--danger); color: var(--danger); }
.cprog-toplu-sil:hover { background: var(--danger-soft, #fbe4e8); color: var(--danger); }

/* METİN ROZETİ: `.cprog-mini` 22px KARE olduğu için "Kaldır" taşardı. Yükseklik ✓/✕ ile aynı
   kalır (satır hizası bozulmasın), genişlik içeriğe açılır ve satırın SONUNA itilir —
   iki işaret solda küme, kaldırma sağda ayrı durur, yanlış tıklama azalır. */
.cprog-mini-metin { width: auto; min-width: 0; margin-left: auto; padding: 0 7px; font-size: 10px; letter-spacing: .02em; }

/* Öğretmen paneli (genel-grup-dersleri): haftalık program blokları + haftalık giriş uyarıları. */
.gl-uyari-karti { border-left: 4px solid #f9be03; }
.gl-uyari { text-decoration: none; }
.gl-program { display: grid; gap: 8px; }
.gl-program-gun { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.gl-program-gun > strong { min-width: 82px; font-size: 12.5px; }
.gl-blok { display: inline-flex; gap: 6px; align-items: center; padding: 4px 9px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface-2, #f3f6fb); font-size: 12px; }
.gl-blok b { font-variant-numeric: tabular-nums; }
.gl-blok-grup { border-left: 3px solid var(--brand-gold, #f9be03); }

/* Gün kopyalama (⧉): details açılınca küçük form paneli. JS gerektirmez. */
.cprog-kopyala, .cprog-toplu-isaret { position: relative; flex: none; }
.cprog-kopyala > summary, .cprog-toplu-isaret > summary { display: inline-flex; align-items: center; justify-content: center; width: 21px; height: 21px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--muted); font-size: 12px; line-height: 1; cursor: pointer; list-style: none; }
.cprog-kopyala > summary::-webkit-details-marker, .cprog-toplu-isaret > summary::-webkit-details-marker { display: none; }
.cprog-kopyala > summary:hover, .cprog-toplu-isaret > summary:hover { border-color: var(--brand-gold, #f9be03); color: var(--text); }
/* TOPLU İŞARET (2026-09-02): kopyala menüsünün kalıbı; üç durum düğmesi alt alta. Üst
   şeritteki "Tümü" özeti metinli olduğu için kare kutudan genişler. */
.cprog-toplu-isaret > summary { width: auto; min-width: 21px; padding: 0 6px; font-weight: 700; }
.cprog-toplu-durumlar { display: grid; gap: 4px; }
.cprog-week-ust > .cprog-toplu-isaret { order: 2; margin-left: auto; }
/* ŞUBE DEFTERİ (2026-09-02): not formu katlanır; özet başlık tıklanabilir görünsün. */
.gl-not-formu { margin-top: 14px; border-top: 1px dashed var(--border); padding-top: 10px; }
.gl-not-formu > summary { cursor: pointer; list-style: none; }
.gl-not-formu > summary::-webkit-details-marker { display: none; }
.gl-not-formu > summary h2 { font-size: 15px; }
.gl-benim { align-self: end; padding-bottom: 9px; }
.cprog-kopyala[open] > summary, .cprog-toplu-isaret[open] > summary { border-color: var(--brand-gold, #f9be03); background: var(--surface-2, #f3f6fb); }
.cprog-kopyala-form { position: absolute; top: 26px; right: -4px; z-index: 40; display: grid; gap: 7px; width: 225px; padding: 11px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); box-shadow: 0 12px 32px rgba(9, 20, 60, .22); }
.cprog-kopyala-form strong { font-size: 11.5px; line-height: 1.35; }
.cprog-kopyala-form input[type="date"] { padding: 5px 7px; border: 1px solid var(--border); border-radius: 7px; font-size: 12px; }

/* Hızlı ekleme popover'ı: + basılınca form artının yanında açılır (JS sınıf ekler). */
.cprog-popover { position: fixed; z-index: 70; width: min(560px, calc(100vw - 24px)); max-height: min(78vh, 700px); overflow: auto; margin: 0; box-shadow: 0 18px 48px rgba(9, 20, 60, .28); border: 1px solid var(--border); }
/* DÜZENLEME PENCERESİ (2026-08-26): sunucudan basılan sabit kip — JS'siz ekranın ortasında
   açılır ("düzenle aşağı atıyordu" şikâyeti). Popover'dan farkı: konumu JS değil CSS verir. */
.cprog-duzenle-sabit { left: 50%; top: max(12px, 7vh); transform: translateX(-50%); }
.cprog-popover .form-grid { grid-template-columns: 1fr 1fr; gap: 8px 10px; }
/* Görev ekleme paneli: üç adımlı yapı (2026-08-17). Adım başlığı numaralı, alanlar ızgarada. */
.cprog-adim { padding: 12px 0 4px; border-top: 1px solid var(--border); }
.cprog-adim:first-of-type { border-top: none; padding-top: 4px; }
.cprog-adim-baslik { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px; margin: 0 0 8px; font-size: 13.5px; font-weight: 750; }
.cprog-adim-baslik b { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 999px; background: var(--primary-soft); color: var(--primary-dark); font-size: 11.5px; }
.cprog-adim-baslik span { color: var(--muted); font-size: 12px; font-weight: 500; }
.cprog-adim-alanlar { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.cprog-adim-alanlar .field small { display: block; margin-top: 3px; color: var(--muted); font-size: 11.5px; line-height: 1.35; }
.cprog-adim-alanlar .field.cprog-alan-kilitli { opacity: .58; }
.cprog-adim-alanlar .field.cprog-alan-kilitli select { cursor: not-allowed; }
.cprog-adim-alanlar .field .cprog-genel-deneme-not { margin-top: 7px; padding: 7px 9px; border-radius: 8px; background: var(--primary-soft); color: var(--primary-dark); opacity: 1; }
.cprog-popover .cprog-adim-alanlar { grid-template-columns: 1fr 1fr; }
.cprog-popover .cprog-adim-alanlar .field small:not(.cprog-genel-deneme-not) { display: none; }
.cprog-popover .card-heading h2 { font-size: 15px; }

/* Müfredat kapsaması: ders başına AÇILIR liste (details). Başlıkta sayaç + ilerleme çubuğu;
   konular alt alta TAM adıyla, başta büyük onay işareti (✓ yeşil, ● sarı, ✕ kırmızı). */
.cov-panel { display: grid; gap: 8px; }
.cov-ders { border: 1px solid var(--border); border-radius: 11px; background: var(--surface); }
.cov-ders > summary { display: flex; align-items: center; gap: 12px; padding: 10px 14px; cursor: pointer; list-style: none; }
.cov-ders > summary::-webkit-details-marker { display: none; }
.cov-ders > summary::after { content: '▾'; margin-left: auto; color: var(--muted); transition: transform .15s ease; }
.cov-ders[open] > summary::after { transform: rotate(180deg); }
.cov-ders > summary strong { min-width: 150px; font-size: 13.5px; }
.cov-ders > summary progress { flex: 1 1 120px; max-width: 220px; height: 8px; accent-color: var(--success); }
.cov-sayac { color: var(--muted); font-size: 12px; white-space: nowrap; }
.cov-list { margin: 0; padding: 2px 8px 8px; list-style: none; border-top: 1px solid var(--border); }
/* MÜFREDAT KAPSAMASI — SATIR SARMALI (2026-08-26 kullanıcı bildirimi: "müfredat kapsaması
   bozulmuş"). `.cov-alt` (Alt konular bloğu) `flex: 1 0 100%` ile KENDİ SATIRINI istiyor ama
   kap `nowrap` idi: sarmayan kapta %100 taban genişlik diğer öğeleri eziyordu ve konu adı
   `min-width: 0` sayesinde SIFIR genişliğe düşüp harf harf dikey akıyordu (ölçüldü: ad 0 px,
   satır 214 px yüksek). `wrap` ile ad 1015 px, satır 68 px. Alt konu bloğu 2026-08-25'te
   eklenmişti; kural o günden beri sessizce bozuktu. */
.cov-satir { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 7px 8px; border-radius: 8px; font-size: 13px; line-height: 1.4; }
.cov-list .cov-satir:nth-child(even) { background: var(--surface-2, #f5f7fb); }
.cov-satir span { flex: 1; min-width: 0; }
.cov-satir b { color: var(--muted); font-size: 11.5px; font-weight: 650; white-space: nowrap; }
.cov-satir i, .cov-ornek i { display: inline-flex; flex: none; align-items: center; justify-content: center; width: 20px; height: 20px; border-radius: 50%; font-size: 11px; font-style: normal; font-weight: 800; }
.cov-ok i { background: var(--success-soft, #e2f3ec); color: var(--success); }
.cov-ok b { color: var(--success); }
/* SEVİYE RENKLERİ (2026-08-18): çalışılma sayısı arttıkça sarı → yeşil.
   sv3 ayrıca yazılmaz — .cov-ok temel kuralı zaten yeşil (success). Rozet arka planları
   açık tonlar olduğundan koyu temada da çipler okunur; yalnız satır sonundaki <b> metni
   kart zeminine düştüğü için koyu temada açık tona çevrilir. */
.cov-ok.cov-sv1 i { background: #fdf3d7; color: #8a6a00; }
.cov-ok.cov-sv1 b { color: #8a6a00; }
.cov-ok.cov-sv2 i { background: #eef3cf; color: #5c7016; }
.cov-ok.cov-sv2 b { color: #5c7016; }
:root[data-theme="dark"] .cov-ok.cov-sv1 b { color: #d9b64a; }
:root[data-theme="dark"] .cov-ok.cov-sv2 b { color: #b3cd6f; }
/* ELLE "BİLİYOR" İŞARETİ (2026-08-25): mavi ton — yeşil "gerçekten çalışıldı"nın rengi,
   ikisi karışırsa koç görev geçmişi ile kendi işaretini ayırt edemez. */
.cov-bilinen i { background: var(--primary-soft); color: var(--primary-dark); }
.cov-bilinen b { color: var(--primary-dark); }
:root[data-theme="dark"] .cov-bilinen b { color: var(--primary); }
.cov-miss.cov-eksik-isaretli b { color: var(--warning, #a16207); }
/* Derece düğmeleri: satır sonunda küçük hap grubu; satıra gelince belirginleşir. */
.cov-satir { transition: background .12s ease; }
.cov-satir:hover { background: var(--primary-soft); }
.cov-derece { display: inline-flex; flex: none; align-items: center; gap: 4px; margin-left: 4px; }
.cov-derece-dugme { padding: 2.5px 9px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--muted); font-size: 11px; font-weight: 700; line-height: 1.5; cursor: pointer; }
.cov-derece-dugme:hover { border-color: var(--primary); color: var(--primary-dark); }
.cov-derece-dugme.is-secili { background: var(--primary); border-color: var(--primary); color: var(--on-primary); }
.cov-derece-sil { padding: 2.5px 7px; font-size: 12px; }
.cov-derece-sil:hover { border-color: var(--danger); color: var(--danger); }
.cov-derece-aciklama { margin: 6px 0 0; color: var(--muted); font-size: 12.5px; }
/* ALT KONU KIRILIMI (2026-08-25): ana konunun altında açılır liste. Ana konunun seviye
   rozetiyle YARIŞMASIN diye sönük ve küçük — ilerlemenin ölçüsü ana konudur. */
.cov-alt-sayac { flex: none; margin-left: 6px; padding: 1px 6px; border-radius: 999px; background: var(--surface-2, #f5f7fb); color: var(--muted); font-size: 10.5px; font-style: normal; font-weight: 700; }
/* TABAN GENİŞLİK MARJI SAYMAZ (2026-08-28 kullanıcı: "müfredat kapsaması sığmamış").
   `flex: 1 0 100%` + `margin-left: 30px` = satırın 30 px DIŞINA taşan bir blok; ölçüldü:
   satır 1207'de bitiyor, alt konu bloğu 1229'da — liste kendi kutusundan 14 px taşıyordu
   ve kart kenarında kırpılmış görünüyordu. Taban genişlik marjı düşerek yazılır. */
.cov-alt { flex: 1 0 calc(100% - 30px); margin: 4px 0 0 30px; min-width: 0; }
.cov-alt > summary { color: var(--muted); font-size: 11.5px; cursor: pointer; }
.cov-alt > ul { margin: 4px 0 0; padding: 0; list-style: none; display: grid; gap: 2px; }
.cov-alt > ul > li { display: flex; align-items: baseline; gap: 8px; padding: 2px 8px; border-left: 3px solid var(--border); border-radius: 0 6px 6px 0; font-size: 12px; }
.cov-alt > ul > li > span { flex: 1; min-width: 0; }
.cov-alt > ul > li > b { color: var(--muted); font-size: 10.5px; font-weight: 650; white-space: nowrap; }
.cov-alt-ok { border-left-color: var(--success); }
.cov-alt-ok > b { color: var(--success); }
.cov-alt-kismen { border-left-color: #c2600e; }
.cov-alt-bekleyen { border-left-color: var(--primary-alt); }
.cov-derece-aciklama strong { color: inherit; }
/* Telefonda düğme grubu satırın altına iner; yan yana sıkışıp taşmasın. */
@media (max-width: 640px) {
  .cov-satir { flex-wrap: wrap; }
  .cov-derece { margin-left: 30px; }
}
/* Koç ekranındaki birikim uyarısı: amber şerit, kart değil ince bant. */
.cprog-birikim-uyari { border-left: 4px solid var(--warning); background: var(--warning-soft); }
.cprog-birikim-uyari strong { display: block; font-size: 15px; }
.cprog-birikim-uyari p { margin: 4px 0 0; color: var(--muted); font-size: 13px; }
/* İşlem geçmişi (2026-09-23): toplu işlemler tek tek geri alınır; geri alınan satır soluk kalır ama okunur. */
.cprog-gecmis-baslik { margin: 14px 0 6px; font-size: 14px; }
.cprog-gecmis-baslik small { color: var(--muted); font-weight: 500; font-size: 12px; }
.cprog-islem-tablo tr.is-geri-alindi td { color: var(--muted); }
.cprog-islem-tablo tr.is-geri-alindi td:nth-child(2) { text-decoration: line-through; text-decoration-color: color-mix(in srgb, var(--muted) 60%, transparent); }
/* YAPILMAYANI İLERİ TAŞI (2026-09-23): seçim sütunu dar, "yeni günü" sütunu vurgulu. Sabit genişlik yalnız masaüstünde —
   koşulsuz yazılırsa telefonda kart satırını büzer (deneme girişi dersi). */
@media (min-width: 901px) {
  .ileri-tasi-tablo th:first-child, .ileri-tasi-tablo td:first-child { width: 44px; }
}
.ileri-tasi-tablo td[data-label="Yeni günü"] { font-weight: 650; }

/* ÖĞRENCİ DENEME KARNESİ (2026-09-23). Öğrenci sayfaları yalnız app.css yükler — bu blok premium.css'e YAZILMAZ. */
.karne-icerik { display: grid; gap: 16px; }
.karne-tur { display: grid; gap: 12px; }
.karne-ozet { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; }
.karne-sayi { display: grid; gap: 2px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); min-width: 0; }
.karne-sayi small { color: var(--muted); font-size: 12px; letter-spacing: .02em; }
.karne-sayi strong { font-size: 26px; line-height: 1.1; font-variant-numeric: tabular-nums; }
.karne-sayi span { color: var(--muted); font-size: 13px; }
/* TAHMİN KARTI (2026-09-24): ölçü değil tahmin — kesikli çerçeve bunu görsel olarak da söyler, açıklama metni ayrıca yazar. */
.karne-sayi.is-tahmin { border-style: dashed; }
.karne-sayi.is-tahmin span { font-size: 12px; }
.karne-fark { font-weight: 700; font-variant-numeric: tabular-nums; }
.karne-fark.is-artti { color: var(--success); }
.karne-fark.is-dustu { color: var(--danger); }
.karne-cipler { display: flex; flex-wrap: wrap; gap: 8px; }
.karne-cip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border-radius: 999px; font-size: 13px; font-weight: 650; border: 1px solid var(--border); }
.karne-cip small { font-weight: 500; opacity: .85; }
.karne-cip.is-guclu { background: var(--success-soft); color: var(--success); }
.karne-cip.is-gelisecek { background: var(--warning-soft); color: var(--text); }
.karne-tablo td.numeric small { color: var(--muted); }
.karne-not { text-align: center; }

/* Biriken görevler tablosu: satırlar uyarı tonunda — "burada bir iş kaldı" duygusu versin
   ama kırmızı alarm olmasın (2026-08-18). */
.gorev-birikim tbody tr { background: var(--warning-soft); }
.gorev-birikim tbody td { border-color: var(--border); }

/* Kaynak zorluk rozetleri (2026-08-18): kolay→yeşil, orta→amber, zor→kırmızı. Tokenlar iki
   temada da tanımlı olduğundan koyu temada da okunur. */
.kaynak-zorluk-kolay { background: var(--success-soft); color: var(--success); }
.kaynak-zorluk-orta { background: var(--warning-soft); color: var(--warning); }
.kaynak-zorluk-zor { background: var(--danger-soft); color: var(--danger); }
.cov-wait i { background: #fdf3d7; color: #8a6a00; }
.cov-miss i { background: var(--danger-soft, #fbe4e8); color: var(--danger); }
.cov-miss span { color: var(--muted); }
.cov-ornek { display: inline-flex; align-items: center; gap: 4px; padding: 0 4px; font-size: 11px; }
.cov-ornek i { width: 14px; height: 14px; font-size: 9px; }
@media (max-width: 700px) { .cov-ders > summary { flex-wrap: wrap; } .cov-ders > summary strong { min-width: 0; } }
.cprog-chip b { display: block; margin-bottom: 1px; color: var(--primary, #2257c4); font-size: 10px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; }
.cprog-chip span { display: block; font-weight: 600; }
.cprog-chip small { display: block; margin-top: 1px; color: var(--muted); font-size: 10.5px; }
/* DURUM ARKA PLANLARI (2026-08-25 kullanıcı: "onaylayınca arka plan yeşil, reddedince
   kırmızı, bekliyorsa sarı, kısmen turuncu"). Soft tonlar iki temada da tanımlı token;
   turuncu için token yok — çift (açık/koyu) burada, koyu değer aşağıdaki data-theme bloğunda. */
.cprog-chip.status-active { border-left-color: var(--success); background: var(--success-soft); }
.cprog-chip.status-missed { border-left-color: var(--danger); background: var(--danger-soft); }
.cprog-chip.status-warning { border-left-color: #b98a00; background: var(--warning-soft); }
/* BEKLİYOR GRİ (2026-08-26): kısmen (turuncu) ile karışmasın diye karar verilmemiş görev
   nötr durur. Zemin kartla aynı kalır; yalnız sol şerit ve rozet gridir. */
.cprog-chip.status-passive { border-left-color: var(--muted); }
.cprog-chip.status-partial { border-left-color: #c2600e; background: #fdebd9; }
:root[data-theme="dark"] .cprog-chip.status-partial { background: #3d2a14; }
/* Kısmen rozeti ve düğmesi: turuncu aile (ölçülen kontrast: #9a4d07 / #fdebd9 = 6.1:1). */
.status-partial { background: #fdebd9; color: #9a4d07; }
:root[data-theme="dark"] .status-partial { background: #3d2a14; color: #e8944a; }
/* Bekliyor rozetinin koyu tema karşılığı: sabit açık gri (#edf1f2) koyu zeminde bağırıyordu. */
:root[data-theme="dark"] .status-passive { background: #232e48; color: #9fb0d0; }
.cprog-mini-kismen:hover, .cprog-mini-kismen.is-secili { border-color: #c2600e; background: #fdebd9; color: #9a4d07; }
:root[data-theme="dark"] .cprog-mini-kismen:hover, :root[data-theme="dark"] .cprog-mini-kismen.is-secili { background: #3d2a14; color: #e8944a; }
/* Haftalık çalışma tablosu her genişliğe SIĞAR: hücreler esner (sabit minimum yok), boş
   hafta devasa beyazlık üretmesin diye yükseklik kısaltıldı; çip metni daralınca kırılır. */
.cprog-week .exam-month { grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; }
/* GENİŞ EKRANDA SIĞDIRMA (2026-08-18, kullanıcı: "düzgün sığdır"): page-wide yerleşimde kart
   1900px'e kadar yayılıyor, 82px'lik hücreler ince bir şerit gibi kalıyordu. Takvim kartı
   ~1460px'te durur ve ortalanır; hücre biraz daha boylu ki takvim gibi okunsun. */
@media (min-width: 1600px) { .cprog-week { max-width: 1460px; margin-inline: auto; } }
/* Hücre yüksekliği İÇERİĞE göre (2026-08-17, "daha sığdır"): boş hafta 7 tane 120px kutu
   olarak duruyordu; artık boşken alçak, doldukça uzuyor. */
.cprog-week .exam-month-cell.appointment-week-cell { min-height: 96px; min-width: 0; padding: 8px 9px; border-radius: 12px; }
.cprog-week .exam-month-cell.appointment-week-cell.is-today { border-color: var(--primary); box-shadow: 0 0 0 1px var(--primary) inset; }
.cprog-week .appointment-week-day-head { align-items: center; margin-bottom: 4px; }
.cprog-week .appointment-week-day-head strong { font-size: 15px; }
.cprog-week .appointment-day-list:empty::before { content: '—'; display: block; padding: 6px 0 2px; color: var(--muted); font-size: 12px; opacity: .55; }
.cprog-week .cprog-chip { overflow-wrap: anywhere; }
.cprog-week-note { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; margin-bottom: 10px; }
.cprog-week-note strong { font-size: 13px; }
.cprog-week-note span { color: var(--muted); font-size: 12px; }
@media (max-width: 900px) { .cprog-week .exam-month { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* KART İÇİNE SIĞDIRMA (2026-08-19, kullanıcı: "bu tasarımı içine sığdırır mısın dışarı taşmasın").
   .appointment-week-card genel-randevu.php için yazıldı: orada kartın ilk çocuğu
   .appointment-week-intro kendi 15px/18px payını taşıdığı için karta padding: 0 verilmiş. Aynı
   sınıf coach-program.php'de yeniden kullanılıyor, ama oradaki çocuklar (.cprog-week-ust,
   .cprog-kopya) kendi payı olmayan bloklar. ÖLÇÜLDÜ (headless Chromium, gerçek
   app.css): 1100/1280/1536px'te üçü de kart kenarına 1px kalana dek dayanıyordu; kartın köşe
   yuvarlaması 18px olduğu için köşelerde içerik çizginin dışına düşüyor, ızgara ise takvimin
   kendi 14px'i yüzünden içeride kalıyordu (1px'e karşı 15px oluk). Payı KARTA veriyoruz;
   .appointment-week-card sınıfını ezmiyoruz ki genel-randevu bozulmasın. Sonuç: dört blok da
   19px eşit boşlukta, sütun genişliği 1536px'te 201.4 -> 200.3 (1.1px). */
.cprog-week.appointment-week-card { padding: 16px 18px 18px; }
.cprog-week .appointment-week-calendar { padding: 0; }
@media (max-width: 560px) { .cprog-week.appointment-week-card { padding: 12px; } }
/* Gün başlığı: sağdaki işlem şeridi (sayaç + ⧉ + +) flex: none, küçülemez; sol taraf min-width: 0
   ile eziliyor ve "ÇARŞAMBA" tek parça kelime olduğu için kutusundan taşıp düğmelerin altına
   giriyordu (ölçülen çakışma: 1280px'te 16.8px, 1100px'te 40.2px, 905px'te 70.2px). Artık taşmak
   yerine kesilir; 1536px'te hiç kesilme olmuyor. */
.cprog-week .appointment-week-day-head > span:not(.appointment-day-actions) { overflow: hidden; }
.cprog-week .appointment-week-day-head > span:not(.appointment-day-actions) > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* Paket matematiğinin rapordan doğrulanabilmesi için özet satırı */
.report-note { margin: 7px 0 0; color: #68767d; font-size: 10px; line-height: 1.5; }
.report-comment-section { break-inside: avoid; page-break-inside: avoid; }
.report-comment-section > p { margin: 0; padding: 11px 13px; border: 1px solid #dfe7e9; border-radius: 9px; background: #f8fafb; font-size: 11px; line-height: 1.55; white-space: pre-wrap; }
.report-signature { display: flex; justify-content: flex-end; margin-top: 24px; break-inside: avoid; page-break-inside: avoid; }
.report-signature > div { width: 180px; text-align: center; }
.report-signature span { display: block; height: 30px; border-bottom: 1px solid #8b989e; }
.report-signature strong, .report-signature small { display: block; }
.report-signature strong { margin-top: 4px; font-size: 11px; }
.report-signature small { color: #68767d; font-size: 9px; }
/* #7a878d/8px beyazda 3.70:1 idi. print.css'teki emsal (.print-doc-foot #5b6672 8.5px) 5.85:1 ölçüldü. */
.report-document-footer { display: flex; justify-content: space-between; gap: 20px; margin-top: 22px; padding-top: 8px; border-top: 1px solid #dfe7e9; color: #5b6672; font-size: 8.5px; }

@media (max-width: 1280px) {
  .nav-toggle { display: inline-block; }
  .main-nav { display: none; position: absolute; top: 62px; left: 16px; right: 16px; padding: 10px; grid-template-columns: repeat(4, minmax(0, 1fr)); align-items: stretch; background: var(--surface); border: 1px solid var(--border); border-radius: 13px; box-shadow: var(--shadow); }
  .main-nav.is-open { display: grid; }
  /* Açılır menü de KAYIYOR ama çubuk fark edilmiyordu (2026-08-19, kullanıcı: "çok fazla şey
     var aşağı inmiyor"). Ölçüldü: içerik 2009px, görünür 489px — kaydırma çalışıyor, görünmüyordu.
     Çubuk belirginleştirildi; kenardaki kararma "devamı var" der. */
  .main-nav.is-open { scrollbar-width: thin; scrollbar-color: var(--muted) var(--surface-2, rgba(127,127,127,.14)); }
  .main-nav.is-open::-webkit-scrollbar { width: 10px; }
  .main-nav.is-open::-webkit-scrollbar-track { background: rgba(127,127,127,.14); border-radius: 999px; }
  .main-nav.is-open::-webkit-scrollbar-thumb { background: var(--muted); border-radius: 999px; }
  .account-name { display: none; }
}

@media (max-width: 900px) {
  .main-nav { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .metric-grid { grid-template-columns: repeat(2, 1fr); }

  .content-grid-sidebar, .content-grid-form, .coordinator-edit-layout, .system-layout { grid-template-columns: 1fr; }
  .personnel-create-form { grid-template-columns: 1fr; }
  .personnel-create-form .choice-group,
  .personnel-create-form .field-hint,
  .personnel-create-form .button { grid-column: auto; }
  .account-layout { grid-template-columns: 1fr; }
  .account-summary-card { position: static; }
  .package-layout, .package-action-grid { grid-template-columns: 1fr; }

  .approval-detail-link { width: 100%; margin-left: 0; text-align: center; }
  .approval-window-form { width: 100%; }
  .approval-window-form .field { flex: 1; }
  .approval-bulk-bar { position: static; align-items: stretch; flex-direction: column; }
  .approval-bulk-actions { justify-content: stretch; }
  .approval-bulk-actions .button { flex: 1 1 calc(33.333% - 8px); }
  .audit-filter-form { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .attendance-filter-form { grid-template-columns: minmax(220px, 1fr) 150px 150px auto; }
  .audit-filter-form .search-field { grid-column: 1 / -1; }
  .audit-filter-form .button { width: 100%; }
  .report-preview-grid { grid-template-columns: repeat(2, 1fr); }
  .package-summary-grid { grid-template-columns: repeat(2, 1fr); }
  .dashboard-workspace { grid-template-columns: 1fr; }
  .student-overview-grid { grid-template-columns: 1fr; }

  /* Sabit 2 sütun DAYATMAYIN: bu kartlar 330px'e kadar inebilen sağ sütunda duruyor; ikiye
     bölününce etiket yeri yiyip değeri harf harf sarıyor. auto-fit zaten daraldıkça teke iner. */
  .readiness-list { grid-template-columns: 1fr; }
  .schedule-rollover-toolbar { position: static; }
  .roster-rollover-toolbar { position: static; }
}

@media (max-width: 720px) {
  .approval-card-header { align-items: flex-start; }
  .approval-fields { grid-template-columns: 1fr; }
  .approval-card:not(.approval-card-multi) .approval-actions { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .approval-actions .button { flex: 1 1 calc(50% - 9px); }
  /* Telefonda etiket-değer çiftleri tek sütun; iki sütun olsaydı değer için yer kalmazdı. */
  .student-profile-facts, .teacher-profile-facts, .fact-columns, .detail-list { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 560px) {
  /* Dar telefonda üst şeritte arama kutusuna yer yok; arama sayfasına menüden gidilir. */
  .topbar-search { display: none; }
  /* Dar telefonda düğme yalnız simge olur; adı title/aria-label ile korunur. */
  .button-install span { display: none; }
  .button-install { padding-inline: 9px; }
  .main-nav { grid-template-columns: 1fr; }
  .container { width: min(100% - 22px, 1180px); }
  .topbar-inner { gap: 10px; }
  .brand small, .role-badge { display: none; }
  .account { margin-left: auto; }
  .page-content { padding-top: 18px; }
  .auth-card { padding: 22px 18px; }
  .form-grid, .metric-grid, .system-metric-grid { grid-template-columns: 1fr; }
  .form-grid-wide { grid-template-columns: 1fr; }
  .field-span-2 { grid-column: span 1; }
  .heading-row { align-items: flex-start; }
  .heading-row { flex-direction: column; }
  .heading-actions { width: 100%; justify-content: flex-start; }
  .heading-actions .button { flex: 1; }
  .filter-form { align-items: stretch; flex-direction: column; }
  .filter-form .field:not(.search-field) { min-width: 0; }
  .filter-form .button { width: 100%; }
  .audit-filter-form { grid-template-columns: 1fr; }
  .audit-filter-form .search-field { grid-column: auto; }
  .attendance-filter-form { grid-template-columns: 1fr; }
  .attendance-filter-form .button { width: 100%; }
  .hero { align-items: flex-start; padding: 22px 19px; }
  .hero-role { display: none; }

  .package-summary-grid { grid-template-columns: 1fr 1fr; gap: 9px; }
  .balance-card { padding: 14px 15px; }
  .report-student-card, .report-metrics { grid-template-columns: 1fr 1fr; }
  .approval-actions .button { flex-basis: 100%; width: 100%; }
  .approval-actions,
  .approval-card:not(.approval-card-multi) .approval-actions { grid-template-columns: minmax(0, 1fr); }
  .approval-window-form { align-items: stretch; flex-direction: column; }
  .approval-window-form .button { width: 100%; }
  .approval-bulk-actions .button { flex-basis: 100%; width: 100%; }
  .report-document { padding: 18px 14px; min-height: 0; }
  /* Başlık şeridi dar ekranda KIRILABİLMELİ (2026-08-18, ölçüldü: 375px'te .report-label
     sayfayı 20px taşırıyor, taşma sabit sohbet düğmesini de ekran dışına itiyordu). */
  .report-document-header { flex-wrap: wrap; align-items: flex-start; gap: 10px 16px; }
  .report-label { text-align: left; }
  .operation-links { grid-template-columns: 1fr; }
  .operation-links a { display: grid; grid-template-columns: 1fr auto; align-items: center; column-gap: 10px; }
  .operation-links a strong { grid-row: span 2; }
  .upcoming-item { grid-template-columns: 68px minmax(0, 1fr) 45px; gap: 9px; }
  .student-overview-heading { align-items: flex-start; flex-direction: column; }
  .student-overview-actions { width: 100%; }
  .student-overview-actions .button { flex: 1 1 calc(50% - 8px); text-align: center; }
  .student-title-row { align-items: flex-start; flex-direction: column; gap: 5px; }
  .student-profile-facts { grid-template-columns: 1fr; }
  .teacher-overview-heading { align-items: flex-start; flex-direction: column; }
  .teacher-overview-actions { width: 100%; }
  .teacher-overview-actions .button { flex: 1 1 calc(50% - 8px); text-align: center; }
  .teacher-profile-facts { grid-template-columns: 1fr; }
  .activation-readiness-heading, .rollover-order-warning { align-items: flex-start; flex-direction: column; }
  .rollover-order-warning .button { width: 100%; text-align: center; }
  .schedule-rollover-toolbar { align-items: stretch; flex-direction: column; }
  .schedule-rollover-toolbar .button { width: 100%; }
  .roster-rollover-toolbar { align-items: stretch; flex-direction: column; }
  .roster-rollover-toolbar .heading-actions, .roster-rollover-toolbar .button { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { scroll-behavior: auto !important; transition: none !important; }
}

@media print {
  @page { size: A4 portrait; margin: 10mm; }
  .topbar, .footer, .button { display: none !important; }
  body { background: #fff; }
  .page-content { width: 100%; max-width: none; padding: 0; }
  .card, .metric-card { box-shadow: none; }
  .report-screen-actions, .report-edit-note, .offer-section-picker, .offer-live-note, .flash { display: none !important; }
  /* Teklif kutuları kağıtta düz metin görünsün; satır araçları basılmasın */
  .offer-row-tools, .offer-row-add { display: none !important; }
  .offer-lesson-input, .offer-price-input, .offer-title-input { border: 0 !important; background: transparent !important; padding: 0 !important; -webkit-appearance: none; appearance: none; }
  .report-document { width: 100%; min-height: auto; margin: 0; padding: 0; border: 0; box-shadow: none; print-color-adjust: exact; -webkit-print-color-adjust: exact; }
  .report-document.is-editing { outline: none; }
  .report-document.is-editing :is(h2, p, td, th, strong, small, span):hover { background: transparent; }
  .report-section { break-inside: auto; overflow: visible !important; }
  .report-table { font-size: 10.5px !important; }
  .report-document-header, .report-student-card, .report-metrics, .report-comment-section, .report-signature { break-inside: avoid; page-break-inside: avoid; }
  .report-document-footer { break-inside: avoid; page-break-inside: avoid; }
}

/* EğitimgenSis 2026 marka ve responsive arayüz sistemi */
:root {
  /* Eğitimgen logosu: #000b49 lacivert + altın. Ana işlemlerde daha canlı mavi, geniş marka
     yüzeylerinde logo laciverti kullanılır; altın yalnız seçili durum ve küçük vurgularda kalır. */
  --bg: #f4f6fb;
  --surface: #ffffff;
  --surface-soft: #f3f5fb;
  --surface-strong: #e9edf7;
  --text: #18213a;
  --muted: #5f687d;
  --border: #dfe4f0;
  --primary: #24439b;
  --primary-dark: #000b49;
  --primary-soft: #e5ebff;
  --primary-alt: #315fd0;
  --primary-alt-dark: #153a9f;
  --brand-navy: #000b49;
  --brand-navy-light: #16328a;
  --brand-gold: #f9be03;
  --blue: #315fd0;
  --violet: #7a5bb0;
  --amber: #a5680f;
  --danger: #bb3b2e;
  --danger-soft: #fbeae6;
  --success: #157551;
  --success-soft: #e6f4ec;
  /* --warning çifti EKSİKTİ (2026-08-18): .yedek-anahtar.is-acik bunları kullanıyor ama
     hiçbir yerde tanımlı değildi — geçersiz değişken yüzünden açık durum HİÇ boyanmıyordu
     (zemin saydam, kenarlık metin rengi). Değerler zaten kullanılan amber tonlarıdır
     (.cov-wait: #8a6a00 / #fdf3d7), ölçülmüş kontrast 5.9:1. */
  --warning: #8a6a00;
  --warning-soft: #fdf3d7;
  /* --surface-2 de tanımsızdı (2026-08-18 koyu tema denetimi): 8 kural onu açık fallback'le
     kullanıyor, koyu temada açık zemin + açık metin 1.07-1.92 kalıyordu (ölçüldü). */
  --surface-2: #f3f6fb;
  --radius: 18px;
  --shadow: 0 2px 5px rgba(0, 11, 73, .04), 0 16px 38px rgba(0, 11, 73, .08);
  --shadow-hover: 0 6px 14px rgba(0, 11, 73, .07), 0 22px 48px rgba(0, 11, 73, .12);
  --focus: 0 0 0 4px rgba(36, 67, 155, .20);
}

html { scroll-behavior: smooth; }
body {
  background:
    radial-gradient(circle at 88% 2%, rgba(49,95,208,.06), transparent 26rem),
    radial-gradient(circle at 4% 98%, rgba(0,11,73,.045), transparent 24rem),
    var(--bg);
  color: var(--text);
  font-family: 'Nunito', Inter, Aptos, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  -webkit-font-smoothing: antialiased;
}
::selection { background: rgba(249,190,3,.42); color: var(--brand-navy); }
a { color: var(--primary-dark); }
.page-content { padding-block: 34px 64px; }
.card {
  border-color: var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow);
}
.card-heading h1, .card-heading h2, .page-heading h1 { letter-spacing: -.025em; }
.card-heading h2 { font-size: 18px; }
/* Kart başlığının altındaki açıklama 16px'ti — 18px'lik başlıkla neredeyse aynı ağırlıkta
   görünüp iki satır üst üste sıkışmış duruyordu. Küçültülüp satır arası açıldı: başlık öne
   çıkıyor, açıklama nefes alıyor. Renk zaten --muted (WCAG sözleşmesi bozulmuyor). */
.card-heading p { font-size: 14px; line-height: 1.55; }
.card-heading { padding-bottom: 4px; }
.eyebrow { color: var(--primary) !important; letter-spacing: .13em; }

.brand-logo { width: 44px; height: 44px; flex: none; filter: drop-shadow(0 8px 14px rgba(0,0,0,.16)); }
.brand-logo-large { width: 56px; height: 56px; }
.brand strong { font-size: 18px; letter-spacing: -.035em; }
.brand strong > span, .auth-brand strong > span, .auth-showcase-brand strong > span, .auth-mobile-brand strong > span { color: var(--brand-gold); }
.brand small { letter-spacing: .11em; }

.skip-link {
  position: fixed;
  top: 12px;
  left: 12px;
  z-index: 200;
  padding: 11px 15px;
  transform: translateY(-160%);
  border: 2px solid var(--brand-gold);
  border-radius: 11px;
  background: #fff;
  color: var(--brand-navy);
  box-shadow: 0 12px 30px rgba(45,32,14,.24);
  font-size: 13px;
  font-weight: 850;
  text-decoration: none;
  transition: transform .16s ease;
}
.skip-link:focus { transform: translateY(0); }
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: 3px solid rgba(49,95,208,.34);
  outline-offset: 3px;
}
.panel-page .main-nav a:focus-visible { outline-color: var(--brand-gold); outline-offset: -2px; }
#mainContent:focus { outline: none; }
.field :where(input, select, textarea):user-invalid {
  border-color: #d84b62;
  box-shadow: 0 0 0 3px rgba(216,75,98,.1);
}
.button:disabled, button:disabled { cursor: not-allowed; filter: grayscale(.18); opacity: .52; box-shadow: none; }

.nav-icon { width: 19px; height: 19px; flex: none; }
.main-nav .nav-group { min-width: 0; }
.main-nav .nav-group-label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  cursor: pointer;
  padding: 7px 11px;
  border-radius: 8px;
  color: rgba(224,230,255,.5);
  font-size: 9px;
  font-weight: 850;
  letter-spacing: .15em;
  line-height: 1.2;
  text-transform: uppercase;
  list-style: none;
  user-select: none;
  transition: background .15s ease, color .15s ease;
}
.main-nav .nav-group-label::-webkit-details-marker { display: none; }
.main-nav .nav-group-label::marker { content: ''; }
.main-nav .nav-group-label:hover { background: rgba(255,255,255,.06); color: rgba(224,230,255,.82); }
.main-nav details.nav-group[open] > .nav-group-label { color: rgba(224,230,255,.72); }
.main-nav .nav-group-title { display: inline-flex; align-items: center; gap: 7px; min-width: 0; padding: 0; color: inherit; }
.main-nav .nav-group-title > b { overflow: hidden; color: inherit; font: inherit; text-overflow: ellipsis; white-space: nowrap; }
.main-nav .nav-group-title .nav-icon { width: 15px; height: 15px; color: rgba(255,214,0,.78); }
.main-nav details.nav-group.is-current > .nav-group-label { color: #fff; }
.nav-chevron { width: 13px; height: 13px; flex: none; opacity: .55; transition: transform .18s ease; }
.main-nav details.nav-group[open] > .nav-group-label .nav-chevron { transform: rotate(180deg); }
.nav-group-links { display: grid; gap: 3px; }
.main-nav details.nav-group[open] > .nav-group-links { margin-top: 4px; }
/* Grup içi ayraç (ör. Dersler → Ölçme, Kurum → Yönetim) */
/* SECICI OZGULLUGU: ".main-nav span" (0,1,1) burayi (0,1,0) eziyordu; bolum basliklari lacivert
   menude #435158 kalip 1.99:1 veriyordu — okunmuyordu. ".main-nav" on eki eklenerek kural
   kazandirildi. Bu on eki KALDIRMAYIN, yoksa hata geri doner. */
.main-nav .nav-group-divider { margin: 7px 11px 1px; padding-top: 8px; border-top: 1px solid rgba(255,255,255,.1); color: rgba(224,230,255,.78);font-size: 9px; font-weight: 850; letter-spacing: .13em; text-transform: uppercase; }
.main-nav a {
  position: relative;
  display: flex;
  align-items: center;
  gap: 11px;
  min-width: 0;
  color: rgba(239,243,255,.76);
  text-decoration: none;
  font-size: 13px;
  font-weight: 680;
  color: rgba(240,243,255,.76);
  transition: background .18s ease, color .18s ease, transform .18s ease;
}
.main-nav a > span { min-width: 0; overflow: hidden; padding: 0; color: inherit; text-overflow: ellipsis; white-space: nowrap; }
.main-nav a:hover { background: rgba(255,255,255,.075); color: #fff; }
.main-nav a.is-active { background: rgba(255,255,255,.12); color: #fff; box-shadow: inset 3px 0 0 var(--brand-gold); }
.main-nav a.is-active .nav-icon { color: var(--brand-gold); }
.nav-badge {
  min-width: 21px;
  height: 21px;
  margin-left: auto;
  /* WCAG AA: beyaz metin #ed5268 uzerinde 3.5:1 idi. Metni koyultmak rozeti bozardi;
     zemini koyulastirdik: #c62742 → beyazla 5.0:1. Golge eski tonda kaliyor (dekoratif). */
  background: #c62742 !important;
  box-shadow: 0 4px 10px rgba(237,82,104,.25);
}

.account-profile { display: flex; align-items: center; gap: 10px; min-width: 0; color: inherit; text-decoration: none; }
.account-avatar {
  width: 38px;
  height: 38px;
  display: grid;
  flex: none;
  place-items: center;
  border: 1px solid rgba(255,255,255,.14);
  border-radius: 12px;
  background: rgba(255,255,255,.1);
  color: var(--brand-gold);
  font-size: 14px;
  font-weight: 900;
}
.account-copy { min-width: 0; }
.account-copy strong, .account-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.account-copy strong { font-size: 12px; }
.account-copy small { margin-top: 2px; color: rgba(225,231,255,.56); font-size: 9px; letter-spacing: .08em; text-transform: uppercase; }
.link-button { width: 36px; height: 36px; display: grid; place-items: center; border-radius: 10px; color: rgba(255,255,255,.65); }
.link-button:hover { background: rgba(255,255,255,.09); color: #fff; }
.link-button svg { width: 18px; height: 18px; }
/* SÜRÜKLEMEDE YER AÇMA (2026-09-03 kullanıcı: "diğerlerinin üstüne veya altına yerine —
   tablolar kayarak"): tek boşluk öğesi fareyle gezer, yükseklik geçişi kardeş çipleri
   kaydırır. Yükseklik JS'ten CSSOM ile gelir (--dnd-bosluk-h) — satır içi style CSP'de yasak. */
.cprog-dnd-bosluk { height: 0; margin: 0; border: 2px dashed var(--primary); border-radius: 10px; opacity: .5; overflow: hidden; transition: height .16s ease, margin .16s ease; }
.cprog-dnd-bosluk.is-acik { height: var(--dnd-bosluk-h, 32px); margin: 3px 0; }
[data-dnd-item].is-dragging { opacity: .35; }

/* Görüntüleme modunda üst çubuktaki "Yönetime dön" — metinli olduğu için sabit 36px kalıptan geniş. */
.topbar-yonetime-don { width: auto; padding: 0 12px; display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; font-size: 13px; font-weight: 700; }

/* Aktif şube: tek şubeli koordinatörde sabit rozet, diğerlerinde seçici (üst çubuk, koyu zemin) */
.branch-chip { display: inline-flex; align-items: center; gap: 6px; padding: 8px 13px; border: 1px solid rgba(255,255,255,.16); border-radius: 999px; background: rgba(255,255,255,.08); color: #fff; font-size: 12px; font-weight: 800; white-space: nowrap; }
.branch-chip .nav-icon { width: 15px; height: 15px; color: var(--brand-gold); }
.branch-switch { display: flex; align-items: center; gap: 6px; }
.branch-switch select { height: 36px; max-width: 170px; padding: 0 9px; border: 1px solid rgba(255,255,255,.18); border-radius: 10px; background: rgba(255,255,255,.08); color: #fff; font-size: 12.5px; font-weight: 750; cursor: pointer; }
.branch-switch select:focus-visible { outline: none; box-shadow: var(--focus); }
.branch-switch select option { color: #172126; background: #fff; }

/* Bölüm değiştirici: Özel Ders Koordinasyon / Genel Koordinasyon arasında geçiş (üst çubuk).
   Markanın alt satırı 720px altında gizleniyor, bu yüzden "hangi bölümdeyim" sorusunun görsel
   yanıtı BURASI — telefonda da görünür kalır, yalnız etiketi kısalır. */
/* Tek bölüme yetkili kullanıcı: seçenek yok, yalnız nerede olduğunu söyleyen etiket. */

.page-heading { margin-bottom: 24px; }
/* Sayfa başlığı 41px ölçülüyordu (2026-08-18) — uygulama başlığı için fazla; 24-31 bandına indi. */
.page-heading h1 { color: var(--brand-navy); font-size: clamp(24px, 2.3vw, 31px); }
.page-heading p { max-width: 760px; }
.button {
  min-height: 38px;
  border-radius: 10px;
  letter-spacing: -.01em;
  transition: transform .15s ease, box-shadow .18s ease, background .18s ease, border-color .18s ease;
}
.button:hover { transform: translateY(-1px); }
.button-primary { background: linear-gradient(135deg, var(--primary-alt), var(--primary)); box-shadow: 0 8px 18px rgba(36,67,155,.22); }
.button-primary:hover { background: linear-gradient(135deg, var(--primary-alt-dark), var(--primary-dark)); box-shadow: 0 10px 22px rgba(0,11,73,.3); }
.button-secondary { border-color: #d6dbea; color: #34405f; }
.button-secondary:hover { border-color: #bfc8e0; background: #f7f8fc; }
.button-ghost:hover { background: var(--primary-soft); color: var(--primary-dark); }
.button-small { min-height: 35px; border-radius: 9px; }
.field { gap: 7px; }
/* Form etiketi rengi TOKEN olmali: sabit #33405e koyu temada kart zemininde 1.64:1 kaliyordu
   (etiketler neredeyse görünmezdi). var(--text) her iki temada da okunur. */
.field span, .field legend { color: var(--text); font-size: 12px; letter-spacing: .005em; }
.field input, .field select, .field textarea {
  min-height: 40px;
  border-color: #d4d9e6;
  border-radius: 10px;
  background: #fff;
}
.field input:hover, .field select:hover, .field textarea:hover { border-color: #b7c0d9; }
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--primary); box-shadow: var(--focus); }
.choice-group { border-color: var(--border); border-radius: 14px; background: var(--surface-soft); }
.choice input { accent-color: var(--primary); }

.hero {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  min-height: 180px;
  padding: 32px 34px;
  border: 1px solid rgba(255,255,255,.12);
  border-radius: 24px;
  background: linear-gradient(125deg, #000b49 0%, #0a246f 48%, #315fd0 100%);
  box-shadow: 0 22px 50px rgba(0,11,73,.24);
}
.hero::before, .hero::after { content: ""; position: absolute; z-index: -1; border: 1px solid rgba(255,255,255,.12); border-radius: 50%; }
.hero::before { width: 270px; height: 270px; right: -80px; top: -160px; }
.hero::after { width: 180px; height: 180px; right: 90px; bottom: -150px; background: rgba(234,191,99,.10); }
.hero h1 { max-width: 760px; font-size: clamp(24px, 2.8vw, 33px); letter-spacing: -.035em; }
.hero .eyebrow { color: var(--brand-gold) !important; }
.hero-role { border-color: rgba(234,191,99,.38); background: rgba(234,191,99,.13); color: #f4d792; }

.metric-grid { gap: 17px; }
.metric-card {
  min-height: 148px;
  border-color: var(--border);
  border-radius: 20px;
  box-shadow: var(--shadow);
}
.metric-card::after { width: 88px; height: 88px; right: -31px; top: -33px; opacity: .065; }
.metric-card strong { color: var(--brand-navy); font-size: 38px; letter-spacing: -.055em; }
.metric-card span { font-size: 12px; letter-spacing: .01em; }
.metric-link:hover { transform: translateY(-3px); border-color: #c9d1e5; box-shadow: var(--shadow-hover); }
.dashboard-workspace { gap: 20px; }
.dashboard-upcoming-card, .dashboard-operations-card, .dashboard-export-card { border-radius: 22px; }
/* Hızlı döküm kendi paneli: tam genişlikte olduğu için dört kısayol tek sırada durur. */
.dashboard-export-card { margin-top: 20px; }
.dashboard-export-card .operation-links { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.operation-links { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.operation-links a { padding: 14px; border-color: var(--border); border-radius: 13px; }
.operation-links a:hover { border-color: #c5cef3; background: var(--primary-soft); }
.operation-links strong { color: var(--brand-navy); }
.upcoming-item { border-color: #e9ecf3; }
.upcoming-date.is-today strong, .upcoming-balance strong { color: var(--primary); }

.filter-card { padding: 13px; border-radius: 14px; }
/* Liste süzgeçleri veri giriş formu değildir; masaüstünde daha yoğun ve hızlı taranabilir kalır.
   Yalnız .filter-card ile sınırlı: öğrenci/rapor düzenleme formlarının rahat ölçüsü değişmez. */
.filter-card .filter-form { gap: 9px; }
.filter-card .filter-form .search-field { flex: 1 1 180px; min-width: 180px; }
.filter-card .filter-form .field:not(.search-field) { min-width: 145px; }
.filter-card .field :is(input, select) {
  height: 40px;
  min-height: 40px;
  padding: 7px 10px;
  border-radius: 10px;
  font-size: 14px;
}
.filter-card .filter-form .button {
  min-height: 36px;
  padding: 7px 12px;
  font-size: 13px;
}
.table-card { border-radius: 18px; }
.table-wrap { scrollbar-width: thin; scrollbar-color: #cbd2e2 transparent; -webkit-overflow-scrolling: touch; }
/* WCAG AA: #778097 basliklarda 3.69:1 kaliyordu; #686f83 → 4.67:1. */
.data-table th { padding-block: 9px; background: #f6f7fb; color: #686f83; border-color: var(--border); letter-spacing: .075em; }
/* Sabit açık başlık şeridi koyu temada kalıyordu; içindeki soluk metin 1.85 ölçülmüştü. */
:root[data-theme="dark"] .data-table th { background: #141d36; color: var(--muted); }
/* HÜCRE ÇİZGİSİ TOKEN'DAN (2026-08-22): sabit #edf0f5 koyu temada lacivert zemine AÇIK gri
   çizgi çekiyordu — her satır arasında parlak bir hat. Tarayıcıda ölçüldü: --border #293654
   tanımlıyken hücre kenarı rgb(237,240,245) geliyordu; bu satır onu eziyordu. */
.data-table td { border-color: var(--border); }
.data-table tbody tr { transition: background .15s ease; }
/* HOVER ZEMİNİ TOKEN'DAN (2026-08-18, kullanıcı: "üstüne gelince beyaz oluyor okunmuyor"):
   sabit #f8f9fd koyu temada satırı beyazlatıp metni yutuyordu. --surface-soft iki temada da
   tanımlı: açıkta hafif gri, koyuda hafif açılmış lacivert. */
.data-table tbody tr:hover { background: var(--surface-soft); }
/* Karanlık temada zebra satırı da sabit açık tondan kurtulur (aynı kök neden). */
:root[data-theme="dark"] .data-table tbody tr:nth-child(even) { background: rgba(255, 255, 255, .022); }
:root[data-theme="dark"] .data-table tbody tr:hover { background: #1c2742; }
.status { padding: 5px 9px; font-size: 10px; letter-spacing: .015em; }
/* Boş kart, dolu kart kadar yer kaplamamalı: eskiden tek satırlık "kayıt yok" mesajı
   500px'i aşan bir bant oluşturuyordu. */
.empty-state { padding-block: 30px; }
/* Öğrenci 360 kartlarında boş durum daha sıkı (2026-09-14): verisi az öğrencide sekiz kart
   arka arkaya "yok" diyor; her biri 120 px'lik bant olmasın. Başlık + tek satır açıklama yeter. */
.overview-section .compact-empty { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: center; gap: 4px 8px; padding: 14px 16px; text-align: left; }
.overview-section .compact-empty strong { font-size: 13.5px; }
.overview-section .compact-empty p { margin: 0; font-size: 12.5px; }
.empty-state strong { color: var(--brand-navy); }
.empty-state:not(.compact-empty)::before {
  content: "✦";
  width: 38px;
  height: 38px;
  display: grid;
  place-items: center;
  margin: 0 auto 10px;
  border: 1px solid #dce2f3;
  border-radius: 15px;
  background: linear-gradient(145deg, #f8f9fd, #eef2ff);
  /* Zemin SABİT açık gradyan (iki temada da) — renk de sabit koyu amber olmalı.
     var(--brand-gold-dark) tanımsızdı, simge rengi metinden miras alıyordu. */
  color: #8a6a00;
  box-shadow: 0 8px 22px rgba(74,56,34,.07);
  font-size: 17px;
}
.flash { border-radius: 13px; box-shadow: 0 5px 18px rgba(74,56,34,.04); }
.inbox-filter-chip { border-color: var(--border); border-radius: 12px; box-shadow: none; }
.inbox-filter-chip:hover, .inbox-filter-chip.is-active { border-color: #c7d0f3; background: var(--primary-soft); color: var(--primary-dark); }
.inbox-filter-chip.is-active strong { background: var(--primary); }

.footer { border-top: 0; color: var(--muted); }
/* Üç parça: kurum adı solda, altyapı notu ortada, YAPIMCI İMZASI sağda (2026-08-25).
   `flex-wrap` şart — telefonda üç parça tek satıra sığmıyor ve sarmayan şerit sayfayı
   yatay taşırıyordu (720px altında ölçüldü). */
.footer .container { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 18px; }
.footer-imza { margin-left: auto; }
/* Instagram bağlantısı: alt bilginin diğer parçalarıyla aynı boyda, marka renginde bir çip.
   Simge `nav_icon` çıktısıdır (24'lük viewBox) — 15px'e küçültülür, yoksa 12px'lik yazının
   yanında iri durur. */
.footer-sosyal { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px;
  border: 1px solid var(--border); border-radius: 999px; color: var(--muted);
  text-decoration: none; transition: color .15s ease, border-color .15s ease, background .15s ease; }
.footer-sosyal .nav-icon { width: 15px; height: 15px; }
.footer-sosyal:hover { color: var(--primary); border-color: var(--primary); background: var(--primary-soft); }
@media (max-width: 720px) {
  .footer .container { justify-content: center; text-align: center; }
  .footer-imza { margin-left: 0; flex-basis: 100%; }
}
.footer strong { color: var(--brand-navy); }
.footer small { font-size: 10px; }

.auth-page {
  background:
    radial-gradient(circle at 8% 8%, rgba(49,95,208,.16), transparent 26rem),
    radial-gradient(circle at 90% 90%, rgba(234,191,99,.16), transparent 22rem),
    var(--bg);
}
.auth-page .page-content { min-height: calc(100vh - 54px); padding: 28px; }
.auth-shell-login {
  width: min(1080px, 100%);
  display: grid;
  grid-template-columns: minmax(0, 58%) minmax(380px, 42%);
  overflow: hidden;
  border: 1px solid rgba(255,255,255,.7);
  border-radius: 30px;
  background: #fff;
  box-shadow: 0 35px 90px rgba(45,32,14,.18);
}
.auth-shell-login > * { min-width: 0; }
.auth-showcase {
  position: relative;
  isolation: isolate;
  min-height: 650px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  padding: 44px 48px;
  background: linear-gradient(145deg, #000b49, #0a246f 58%, #315fd0);
  color: #fff;
}
.auth-showcase::before { content: ""; position: absolute; z-index: -1; width: 440px; height: 440px; right: -220px; top: -170px; border: 1px solid rgba(255,255,255,.12); border-radius: 50%; box-shadow: 0 0 0 70px rgba(255,255,255,.025), 0 0 0 140px rgba(255,255,255,.02); }
.auth-showcase::after { content: ""; position: absolute; z-index: -1; width: 260px; height: 260px; left: -180px; bottom: -120px; border-radius: 50%; background: rgba(255,201,40,.1); }
.auth-showcase-brand { display: flex; align-items: center; gap: 14px; }
.auth-showcase-brand img { filter: drop-shadow(0 10px 20px rgba(0,0,0,.22)); }
.auth-showcase-brand strong, .auth-showcase-brand small { display: block; }
.auth-showcase-brand strong { font-size: 23px; letter-spacing: -.04em; }
.auth-showcase-brand small { margin-top: 3px; color: rgba(231,235,255,.64); font-size: 10px; letter-spacing: .14em; text-transform: uppercase; }
.auth-showcase-content { margin: auto 0; }
.auth-showcase-content .eyebrow { color: var(--brand-gold) !important; }
.auth-showcase-content h1 { max-width: 530px; margin: 12px 0 18px; font-size: clamp(38px, 4.3vw, 58px); line-height: 1.02; letter-spacing: -.05em; }
.auth-showcase-content > p:last-child { max-width: 540px; margin: 0; color: rgba(235,239,255,.72); font-size: 15px; line-height: 1.75; }
.auth-feature-list { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.auth-feature-list span { padding: 13px; border: 1px solid rgba(255,255,255,.12); border-radius: 13px; background: rgba(255,255,255,.06); color: rgba(243,246,255,.82); font-size: 10px; line-height: 1.35; }
.auth-feature-list b { display: block; margin-bottom: 5px; color: var(--brand-gold); font-size: 9px; letter-spacing: .12em; }
.auth-showcase-footer { margin-top: 23px; color: rgba(229,234,255,.42); font-size: 9px; letter-spacing: .08em; text-transform: uppercase; }
.auth-shell-login .auth-card { display: flex; flex-direction: column; justify-content: center; margin: 0; padding: 48px 42px; border: 0; border-radius: 0; box-shadow: none; }
.auth-shell-login .auth-card .card-heading h1 { margin-top: 8px; color: var(--brand-navy); font-size: 34px; }
.auth-shell-login .button-primary { margin-top: 3px; }
.auth-shell-login .button-primary span { float: right; font-size: 19px; line-height: 1; }
.auth-mobile-brand { display: none; align-items: center; gap: 11px; margin-bottom: 30px; }
.auth-mobile-brand strong { color: var(--brand-navy); font-size: 20px; }
.auth-brand { margin-bottom: 22px; }
.auth-brand strong { color: var(--brand-navy); font-size: 21px; }
.auth-card { border-radius: 22px; }
.report-brand-logo { width: 76px; height: 76px; }

@media (min-width: 1101px) {
  /* ---- SOL yerleşim (ayar: ui.nav_layout = side) ---- */
  .panel-page.nav-side { padding-left: 268px; }
  .panel-page.nav-side .topbar {
    position: fixed;
    inset: 0 auto 0 0;
    z-index: 30;
    width: 268px;
    overflow: hidden;
    border: 0;
    background: linear-gradient(180deg, #000b49 0%, #071b61 54%, #0d2f86 100%);
    box-shadow: 14px 0 40px rgba(0,11,73,.16);
  }
  .panel-page.nav-side .topbar-inner {
    width: 100%;
    height: 100%;
    min-height: 0;
    display: flex;
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    margin: 0;
    padding: 24px 17px 17px;
  }
  .panel-page.nav-side .brand { flex: none; gap: 12px; margin: 0 5px 22px; }
  .panel-page.nav-side .main-nav {
    display: flex !important;
    position: static;
    flex: 1;
    /* min-height: 0 ŞART (2026-08-19'da tarayıcıda ölçüldü). Sütun yönlü flex çocuğunun
       varsayılan min-height'i `auto`dur: öğe içeriği kadar BÜYÜR, kapsayıcıya sığmaz ve
       `overflow: auto` hiç devreye girmez. Menü uzayınca son öğeler ekranın altına taşıp
       .topbar'ın `overflow: hidden`ı tarafından kesiliyordu — kullanıcı "çok fazla şey var,
       aşağı inmiyor" diye bildirdi (ölçüm: son öğenin altı 758px, pencere 720px). */
    min-height: 0;
    flex-direction: column;
    align-items: stretch;
    gap: 20px;
    overflow-y: auto;
    overscroll-behavior: contain;
    margin: 0 -4px;
    padding: 3px 4px 20px;
    border: 0;
    background: transparent;
    box-shadow: none;
    /* KAYDIRMA ÇUBUĞU GÖRÜNÜR OLMALI (2026-08-19, kullanıcı: "çok fazla şey var aşağı
       inmiyor"). Ölçüldü: menü teknik olarak KAYIYOR (içerik 2442px, görünür 391px, son öğeye
       ulaşılıyor) — sorun çubuğun rgba(255,255,255,.16) ile koyu lacivert üstünde neredeyse
       görünmemesiydi; kullanıcı listenin devamı olduğunu anlamıyordu. Alfa yükseltildi ve
       yola hafif bir zemin verildi ki çubuk nerede duruyorsa görünsün. */
    scrollbar-width: thin;
    scrollbar-color: rgba(255,255,255,.45) rgba(255,255,255,.10);
  }
  /* WebKit/Blink: scrollbar-color'ı desteklemeyen sürümlerde aynı görünüm. */
  .panel-page.nav-side .main-nav::-webkit-scrollbar { width: 10px; }
  .panel-page.nav-side .main-nav::-webkit-scrollbar-track { background: rgba(255,255,255,.10); border-radius: 999px; }
  .panel-page.nav-side .main-nav::-webkit-scrollbar-thumb { background: rgba(255,255,255,.45); border-radius: 999px; }
  .panel-page.nav-side .main-nav::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,.65); }
  /* "Aşağıda devamı var" ipucu: menünün alt kenarında yumuşak bir kararma. Kaydırma sonuna
     gelindiğinde de durur (statik) — amaç süs değil, listenin bittiğini/sürdüğünü sezdirmek. */
  .panel-page.nav-side .topbar-inner::after {
    content: '';
    position: absolute;
    left: 0;
    right: 10px;
    bottom: 96px;
    height: 26px;
    pointer-events: none;
    background: linear-gradient(180deg, rgba(0,11,73,0) 0%, rgba(0,11,73,.75) 100%);
  }
  .panel-page.nav-side .topbar-inner { position: relative; }
  .panel-page.nav-side .main-nav .nav-group-label { margin: 0 11px 8px; padding: 0; }
  .panel-page.nav-side .main-nav a { min-height: 40px; padding: 9px 11px; border-radius: 11px; }
  .panel-page.nav-side .account {
    width: 100%;
    flex: none;
    gap: 8px;
    margin-top: auto;
    padding: 12px;
    border: 1px solid rgba(255,255,255,.09);
    border-radius: 15px;
    background: rgba(255,255,255,.055);
    color: #fff;
  }
  .panel-page.nav-side .account-profile { flex: 1; }
  .panel-page.nav-side .account form { flex: none; }
  .panel-page .brand { color: #fff; }
  .panel-page .brand small { color: rgba(223,230,255,.52); font-size: 8px; }
  /* Varsayılan: içerik okunabilir bir genişlikte durur. Eskiden 1500px'ti; geniş ekranda
     kart alanları birbirinden kopuyor, "—" değeri 363px'lik bir hücrede tek başına kalıyordu. */
  .panel-page .page-content { width: min(1240px, calc(100% - 48px)); margin-inline: auto; }
  /* Yatayda gerçekten yer isteyen ekranlar (haftalık program ızgarası, program kurucu,
     yıl devri tabloları) $pageWide = true; ile bu sınıfı alır. */
  .panel-page .page-content.page-wide { width: min(1560px, calc(100% - 48px)); }
  .panel-page .footer { margin-left: 0; }
  .panel-page .footer .container { width: min(1240px, calc(100% - 48px)); }
  .nav-toggle { display: none !important; }

  /* Kenar çubuğu daraltma (yalnız sol yerleşim): menü sola kayar, içerik tam genişler */
  .panel-page.nav-side { transition: padding-left .24s ease; }
  .panel-page.nav-side .topbar { transition: transform .24s ease, box-shadow .24s ease; }
  :root.sidebar-collapsed .panel-page.nav-side { padding-left: 0; }
  :root.sidebar-collapsed .panel-page.nav-side .topbar { transform: translateX(-100%); box-shadow: none; }
  .sidebar-toggle-float {
    position: fixed; z-index: 60; top: 16px; left: 252px;
    display: grid; place-items: center; width: 32px; height: 32px;
    border: 1px solid rgba(255,255,255,.22); border-radius: 50%; cursor: pointer;
    background: #0d2f86; color: #fff; box-shadow: 0 4px 14px rgba(0,11,73,.3);
    transition: left .24s ease, background .15s ease;
  }
  .sidebar-toggle-float:hover { background: #16307e; }
  .sidebar-toggle-float svg { transition: transform .24s ease; }
  :root.sidebar-collapsed .sidebar-toggle-float { left: 12px; }
  :root.sidebar-collapsed .sidebar-toggle-float svg { transform: rotate(180deg); }
  .panel-page.nav-top .sidebar-toggle-float { display: none; }

  /* ---- ÜST yerleşim (varsayılan: ui.nav_layout = top): yatay lacivert bar + açılır grup menüleri ---- */
  .panel-page.nav-top .topbar {
    position: sticky; top: 0; z-index: 40; border: 0;
    background: linear-gradient(110deg, #000b49, #071b61 62%, #0d2f86);
    box-shadow: 0 6px 20px rgba(0,11,73,.16);
  }
  .panel-page.nav-top .topbar-inner { width: min(1850px, calc(100% - 40px)); min-height: 58px; gap: 12px; }
  .panel-page.nav-top .brand-logo { width: 39px; height: 39px; }
  .panel-page.nav-top .brand strong { font-size: 17px; }
  .panel-page.nav-top .main-nav {
    display: flex !important;
    position: static;
    flex: 1;
    flex-direction: row;
    align-items: center;
    gap: 4px;
    overflow: visible;
    padding: 0;
    border: 0;
    background: transparent;
    box-shadow: none;
  }
  /* MENÜ BAŞLIĞI KENDİ GENİŞLİĞİNİN ALTINA SIKIŞMAZ (2026-08-27, ölçüm yukarıdaki
     yorumda): `min-width: 0` + `text-overflow: ellipsis` ikilisi, yer yetmediğinde
     başlıkları sessizce kesiyordu — 1745 px'de "Kişiler" 42 px'in 6 px'i görünüyordu.
     Çubuk sarabildiği için menü, sığmadığı anda kendi satırına iner. */
  .panel-page.nav-top .topbar-inner { flex-wrap: wrap; }
  .panel-page.nav-top .main-nav { flex: 1 1 auto; }
  .panel-page.nav-top .main-nav details.nav-group { position: relative; flex: 0 0 auto; min-width: max-content; }
  .panel-page.nav-top .main-nav .nav-group-label {
    margin: 0; padding: 7px 9px; border-radius: 8px; white-space: nowrap;
    font-size: 12px; font-weight: 750; letter-spacing: .01em; text-transform: none;
    color: rgba(224,230,255,.72);
  }
  .panel-page.nav-top .main-nav details[open] > .nav-group-label { background: rgba(255,255,255,.1); color: #fff; }
  .panel-page.nav-top .main-nav details.is-current > .nav-group-label { background: rgba(255,255,255,.08); box-shadow: inset 0 -2px 0 var(--brand-gold); }
  .panel-page.nav-top .main-nav .nav-group-links {
    position: absolute; top: calc(100% + 8px); left: 0; z-index: 60;
    min-width: 238px; padding: 8px;
    border: 1px solid rgba(255,255,255,.14); border-radius: 13px;
    background: linear-gradient(180deg, #061552, #0d2f86);
    box-shadow: 0 20px 44px rgba(0,11,73,.42);
    /* PANEL EKRANI TAŞMAZ (2026-08-21 kullanıcı bildirimi "admin paneli sığmıyor").
       Ölçüldü: yöneticide "Kurum Yönetimi" grubunda 25 bağlantı var, panel 616px ve alt
       kenarı 720px'lik ekranda 730px'e düşüyordu — son satırlar ekranın DIŞINDA kalıyor ve
       hiçbir şekilde görülemiyordu (panel `position: absolute`, sayfa kaydırması ona
       yetişmiyor). Tavan görünür alana bağlanır, taşan kısım panelin İÇİNDE kaydırılır.
       Çıkarılan pay ÖLÇÜLDÜ: panel üst çubuğun altında ~114px'ten başlıyor; 96px yetmedi ve
       650px'lik ekranda 18px taşmaya devam etti. 132px hem başlangıcı hem altta bir nefes
       payını karşılıyor. */
    max-height: calc(100vh - 132px);
    overflow-y: auto;
    overscroll-behavior: contain;
    scrollbar-width: thin;
    scrollbar-color: rgba(255,255,255,.35) transparent;
  }
  /* Uzun gruplar (admin'de Kurum): iki sütunlu panel, ayraç tam satır */
  .panel-page.nav-top .main-nav details.nav-group-wide .nav-group-links { min-width: 470px; grid-template-columns: 1fr 1fr; column-gap: 6px; }
  .panel-page.nav-top .main-nav details.nav-group-wide .nav-group-divider { grid-column: 1 / -1; }
  .panel-page.nav-top .main-nav a { min-height: 36px; padding: 7px 10px; border-radius: 8px; }
  /* Bagimsiz ana hedefler (Randevular gibi) grup sayisi artsa da yarim kelimeye dusmesin. */
  /* Arama + hesap + tema + çıkış tek yardımcı işlem grubudur; üst çubuğun sağında kalır. */
  .panel-page.nav-top .account { margin-left: auto; color: #fff; gap: 10px; justify-content: flex-end; }
}
@media (max-width: 1100px) {
  .sidebar-toggle-float { display: none; }
}

@media (max-width: 1100px) {
  body.nav-open { overflow: visible; }
  .panel-page .topbar { position: sticky; top: 0; z-index: 40; border: 0; background: linear-gradient(110deg, #000b49, #0d2f86); box-shadow: 0 8px 28px rgba(0,11,73,.18); }
  .panel-page .topbar-inner { min-height: 72px; flex-wrap: wrap; gap: 12px; padding-block: 8px; }
  .panel-page .brand { color: #fff; }
  .panel-page .brand small { color: rgba(229,234,255,.55); }
  .panel-page .nav-toggle { width: 42px; height: 42px; display: grid; place-content: center; gap: 4px; margin-left: auto; padding: 0; border-color: rgba(255,255,255,.16); border-radius: 12px; background: rgba(255,255,255,.08); }
  .panel-page .nav-toggle span { width: 18px; height: 2px; display: block; border-radius: 99px; background: #fff; }
  .panel-page .main-nav {
    display: none;
    position: static;
    order: 10;
    z-index: auto;
    flex: 1 0 100%;
    max-height: min(68vh, 680px);
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    overflow: auto;
    margin-top: 2px;
    padding: 14px 6px 8px;
    border: 0;
    border-top: 1px solid rgba(255,255,255,.12);
    border-radius: 0;
    background: transparent;
    box-shadow: none;
  }
  .panel-page .main-nav.is-open { display: grid; }
  .panel-page .main-nav .nav-group-label { margin: 0 10px 8px; padding: 0; }
  .panel-page .main-nav a { min-height: 40px; padding: 9px 10px; border-radius: 10px; }
  .panel-page .account { margin-left: auto; color: #fff; justify-content: flex-end; }
  .panel-page .account-avatar { width: 36px; height: 36px; }
  .panel-page .account-copy small { color: rgba(229,234,255,.55); }
  .panel-page .footer .container { width: min(100% - 32px, 1180px); }
  .dashboard-workspace { grid-template-columns: 1fr; }
  .dashboard-export-card .operation-links { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .content-grid-sidebar, .content-grid-form, .coordinator-edit-layout, .system-layout, .account-layout { grid-template-columns: 1fr; }
  .personnel-management-grid { grid-template-columns: 1fr; }
}

/* Dizustu ve tarayici yakinlastirmasi kullanilan genis ekranlar: ana menu hamburger arkasina
   saklanmaz. Ust cubugun ikinci satirina yerlesir ve sayfa akisini asagi iter. Bir grup acilinca
   yalniz o grubun kompakt acilir kutusu gorunur; tum lacivert panel asagi inmez. */
@media (min-width: 1101px) and (max-width: 1700px) {
  body.nav-open { overflow: visible; }
  .panel-page.nav-top .topbar-inner { min-height: 64px; flex-wrap: wrap; padding-block: 7px; }
  .panel-page.nav-top .nav-toggle { display: none !important; }
  .panel-page.nav-top .main-nav {
    display: flex !important;
    position: static;
    order: 10;
    flex: 1 0 100%;
    align-items: center;
    gap: 5px;
    overflow: visible;
    margin-top: 1px;
    padding: 5px;
    border: 1px solid rgba(255,255,255,.1);
    border-radius: 14px;
    background: rgba(255,255,255,.045);
    box-shadow: none;
  }
  .panel-page.nav-top .main-nav.is-open { display: flex !important; }
  /* 7 GRUPTA BAŞLIK KIRPILMASIN (2026-09-17, tek menüyle 7. grup gelince 1400 px'te "Akademik Tak…"
     ölçüldü): grup kendi başlığının altına sıkışmaz, çubuk gerekirse ikinci satıra sarar — 1701+ bandındaki
     kuralın aynısı. Eşit paylaşım (flex-basis 0) yerine içerik genişliği + kalanı paylaşma. */
  .panel-page.nav-top .main-nav { flex-wrap: wrap; }
  .panel-page.nav-top .main-nav details.nav-group { position: relative; min-width: max-content; flex: 1 1 auto; }
  .panel-page.nav-top .main-nav .nav-group-label {
    min-height: 38px;
    margin: 0;
    padding: 8px 11px;
    border-radius: 10px;
    color: rgba(224,230,255,.72);
    font-size: 11.5px;
    letter-spacing: .035em;
    text-transform: none;
  }
  .panel-page.nav-top .main-nav details.is-current > .nav-group-label,
  .panel-page.nav-top .main-nav details[open] > .nav-group-label {
    background: rgba(255,255,255,.1);
    box-shadow: inset 0 -2px 0 var(--brand-gold);
    color: #fff;
  }
  .panel-page.nav-top .main-nav .nav-group-title > b,
  .panel-page.nav-top .main-nav a > span {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
  .panel-page.nav-top .main-nav .nav-group-links,
  .panel-page.nav-top .main-nav details.nav-group-wide .nav-group-links {
    position: absolute;
    top: calc(100% + 7px);
    left: 0;
    z-index: 60;
    min-width: 245px;
    grid-template-columns: 1fr;
    padding: 8px;
    border: 1px solid rgba(255,255,255,.14);
    border-radius: 13px;
    background: linear-gradient(180deg, #061552, #0d2f86);
    box-shadow: 0 18px 40px rgba(0,11,73,.36);
  }
  .panel-page.nav-top .main-nav details.nav-group-wide .nav-group-links { min-width: 460px; grid-template-columns: 1fr 1fr; column-gap: 6px; }
  .panel-page.nav-top .main-nav details.nav-group-wide .nav-group-divider { grid-column: 1 / -1; }
  .panel-page.nav-top .main-nav details:last-of-type .nav-group-links { right: 0; left: auto; }
  .panel-page.nav-top .main-nav a { min-height: 40px; padding: 9px 10px; border-radius: 10px; }
}

@media (max-width: 900px) {
  .table-wrap.is-scrollable { position: relative; scrollbar-gutter: stable; }
  .table-wrap.is-scrollable::before {
    content: "Yatay kaydırın  →";
    position: sticky;
    left: 10px;
    z-index: 3;
    width: max-content;
    display: block;
    margin: 9px 10px 6px;
    padding: 5px 9px;
    border: 1px solid #dce2f3;
    border-radius: 999px;
    background: rgba(255,255,255,.94);
    color: var(--primary-dark);
    box-shadow: 0 5px 15px rgba(74,56,34,.08);
    font-size: 9px;
    font-weight: 850;
    letter-spacing: .04em;
    text-transform: uppercase;
  }

  .responsive-card-table,
  .responsive-card-table tbody,
  .responsive-card-table tr,
  .responsive-card-table td { display: block; width: 100%; }
  .responsive-card-table { min-width: 0; }
  .responsive-card-table thead { display: none; }
  .responsive-card-table tbody { padding: 12px; }
  .responsive-card-table tr {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0 18px;
    margin-bottom: 12px;
    padding: 15px;
    border: 1px solid var(--border);
    border-radius: 15px;
    /* KART SATIRI ZEMİNİ TOKEN'DAN (2026-08-18): sabit #fff koyu temada satırı BEYAZ
       bırakıyordu — açık metin beyaz kartta 1.13 kontrastla okunmuyordu (ölçüldü). */
    background: var(--surface);
    box-shadow: 0 6px 18px rgba(74,56,34,.05);
  }
  .responsive-card-table tr:last-child { margin-bottom: 0; }
  .responsive-card-table td { min-width: 0; padding: 10px 0; border: 0; text-align: left !important; }
  .responsive-card-table td::before {
    content: attr(data-label);
    display: block;
    margin-bottom: 5px;
    color: var(--muted);
    font-size: 9px;
    font-weight: 850;
    letter-spacing: .08em;
    text-transform: uppercase;
  }
  .responsive-card-table td:first-child,
  .responsive-card-table .responsive-card-detail,
  .responsive-card-table .actions-cell { grid-column: 1 / -1; }
  .responsive-card-table td:first-child { padding-top: 0; padding-bottom: 13px; border-bottom: 1px solid var(--border); }
  .responsive-card-table .responsive-card-detail { padding-top: 13px; border-top: 1px solid var(--border); }
  .responsive-card-table .actions-cell { display: flex; align-items: center; justify-content: space-between; padding: 12px 0 0; border-top: 1px solid var(--border); }
  .responsive-card-table .actions-cell::before { margin: 0; }
  .responsive-card-table .actions-cell .button { min-width: 130px; text-align: center; }
  .responsive-card-table .actions-cell .table-actions { flex: 1; justify-content: flex-end; }
  .responsive-card-table .actions-cell:empty { display: none; }
}

@media (max-width: 860px) {
  .auth-page .page-content { padding: 18px; }
  .auth-shell-login { width: min(500px, 100%); display: block; border-radius: 24px; }
  .auth-showcase { display: none; }
  .auth-shell-login .auth-card { padding: 38px 32px; }
  .auth-mobile-brand { display: flex; }
  .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .hero { min-height: 160px; }
}

@media (max-width: 720px) {
  .panel-page .topbar-inner { min-height: 66px; }
  .panel-page .brand-logo { width: 39px; height: 39px; }
  .panel-page .brand strong { font-size: 16px; }
  .panel-page .brand small { display: none; }
  /* Bölüm değiştirici telefonda KALIR (markanın alt satırı gizlendiği için tek göstergedir),
     yalnız daralır. Etiket 420px altında düşer, simge kalır — dokunma alanı 34px'in altına inmez. */
  .panel-page .account-copy { display: none; }
  .panel-page .account-avatar { width: 38px; }
  .panel-page .main-nav { inset: 76px 10px auto; max-height: calc(100vh - 88px); grid-template-columns: 1fr; gap: 20px; padding: 18px 15px; }
  .page-content { padding-block: 22px 46px; }
  .container { width: min(100% - 24px, 1180px); }
  .page-heading { margin-bottom: 18px; }
  .page-heading h1 { font-size: 25px; }
  .heading-row { gap: 13px; }
  /* Dar tablet ve telefon: masaüstü sütunları yerine etiketli, taşmayan ders kartı. */
  .package-line { grid-template-columns: 1fr auto; gap: 4px 10px; }
  .package-line-head { display: none; }
  .pl-subject { grid-column: 1 / -1; }
  .pl-num { text-align: left; }
  .pl-num::before { content: attr(data-label) ": "; color: var(--muted); font-size: 11px; }
  .pl-state { grid-column: 1 / -1; }
  .package-line .button { grid-column: 1 / -1; justify-self: start; }
  .heading-actions .button { flex: 1 1 calc(50% - 6px); text-align: center; }
  .update-center-heading .button,
  .update-maintenance-card .button { min-height: 44px; }
  .card { padding: 19px; border-radius: 16px; }
  .table-card { padding: 0; }
  .table-card > .card-heading { padding: 17px 16px 15px; }
  /* A4 belge (rapor / teklif / hak dökümü) telefonda daralır ama çok sütunlu tablolar sığmaz;
     bölüm bazında yatay kaydırma verilir. Yazdırmada aşağıdaki print bloğu bunu sıfırlar. */
  .report-document .report-section { overflow-x: auto; }
  .report-document .report-table { font-size: 10px; }
  .hero { min-height: 0; padding: 25px 22px; border-radius: 19px; }
  .hero h1 { font-size: 25px; }
  .metric-card { min-height: 130px; padding: 17px; border-radius: 16px; }
  .metric-card strong { font-size: 29px; }
  .filter-card { padding: 12px; }
  .filter-form { gap: 9px; }
  /* Telefonlarda 44px dokunma hedefi ve 16px yazı iOS'un odakta yakınlaştırmasını önler. */
  .filter-card .field :is(input, select) { height: 44px; min-height: 44px; font-size: 16px; }
  .filter-card .filter-form .search-field { min-width: 0; }
  .filter-card .filter-form .button { min-height: 40px; }

  .data-table:not(.student-table):not(.responsive-card-table) { min-width: 720px; }
  .student-table, .student-table tbody, .student-table tr, .student-table td { display: block; width: 100%; }
  .student-table { min-width: 0; }
  .student-table thead { display: none; }
  .student-table tbody { padding: 12px; }
  .student-table tr { display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; margin-bottom: 12px; padding: 15px; border: 1px solid var(--border); border-radius: 15px; background: var(--surface); box-shadow: 0 6px 18px rgba(74,56,34,.05); }
  .student-table tr:last-child { margin-bottom: 0; }
  .student-table td { padding: 10px 0; border: 0; }
  .student-table td:first-child, .student-table td:last-child { grid-column: 1 / -1; }
  .student-table td:first-child { padding-top: 0; padding-bottom: 12px; border-bottom: 1px solid var(--border); }
  .student-table td:not(:first-child):not(:last-child)::before { display: block; margin-bottom: 4px; color: var(--muted); font-size: 9px; font-weight: 850; letter-spacing: .08em; text-transform: uppercase; }
  .student-table td:nth-child(2)::before { content: "Sınıf / Okul"; }
  .student-table td:nth-child(3)::before { content: "Koordinatör"; }
  .student-table td:nth-child(4)::before { content: "Ders Hakkı"; }
  .student-table td:nth-child(5)::before { content: "Sözleşme"; }
  .student-table td:nth-child(6)::before { content: "Durum"; }
  .student-table .actions-cell { padding: 12px 0 0; border-top: 1px solid var(--border); }
  .student-table .table-actions { justify-content: stretch; }
  .student-table .table-actions .button { flex: 1; text-align: center; }
  .footer .container { align-items: center; flex-direction: column; gap: 5px; text-align: center; }
}

@media (max-width: 560px) {
  /* Telefon: üst bar iki satıra sarar — 1. satır marka + menü düğmesi, 2. satır şube seçici + hesap
     ikonları. Tek satırda sığmadığı için önceden sayfa yana kayıyor ve hamburger 20px'e eziliyordu. */
  .panel-page .topbar-inner { min-height: 0; flex-wrap: wrap; gap: 10px; padding-top: 9px; padding-bottom: 9px; }
  .panel-page .brand { flex: 1 1 auto; min-width: 0; }
  .panel-page .brand strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .panel-page .nav-toggle { flex: none; margin-left: 0; }
  /* Bölüm değiştirici kendi satırına iner ve tam genişliği paylaşır: 1. satırda marka + hamburger
     ile birlikte sıkışırsa dokunma alanı 44px'in altına düşüyordu. */
  .panel-page .account { order: 3; flex: 1 0 100%; gap: 8px; justify-content: flex-end; }
  .panel-page .branch-switch { flex: 1 1 auto; min-width: 0; }
  .panel-page .branch-switch select { width: 100%; max-width: none; }
  .panel-page .branch-chip { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .panel-page .main-nav { inset: 118px 12px auto; max-height: calc(100vh - 134px); grid-template-columns: minmax(0, 1fr); }

  .metric-grid { grid-template-columns: 1fr; }
  .metric-card { min-height: 122px; }
  /* Kart adı da yazılmalı: .dashboard-export-card .operation-links kuralı bundan daha
     özgül, yalnız .operation-links yazılırsa telefonda iki sütunda kalırdı. */
  .operation-links,
  .dashboard-export-card .operation-links { grid-template-columns: 1fr; }
  .auth-page .page-content { padding: 10px; }
  .auth-shell-login { border-radius: 20px; }
  .auth-shell-login .auth-card { padding: 30px 22px; }
  .auth-shell-login .auth-card .card-heading h1 { font-size: 29px; }
  .auth-mobile-brand { margin-bottom: 24px; }
  .auth-help { font-size: 12px; }
  .student-table tr { grid-template-columns: 1fr; }
  .student-table td:first-child, .student-table td:last-child { grid-column: auto; }
  .responsive-card-table tr { grid-template-columns: 1fr; }
  .responsive-card-table td:first-child,
  .responsive-card-table .responsive-card-detail,
  .responsive-card-table .actions-cell { grid-column: auto; }
  .responsive-card-table .actions-cell { align-items: stretch; flex-direction: column; gap: 10px; }
  .responsive-card-table .actions-cell .table-actions { width: 100%; justify-content: stretch; }
  .responsive-card-table .actions-cell .table-actions > * { flex: 1 1 120px; }
  .responsive-card-table .actions-cell .table-actions form .button { width: 100%; }
  .heading-actions .button { flex-basis: 100%; }
  /* Öğrenci 360 telefonda: ana düğmeler iki sütun (yarı yükseklik), metrikler 2×2, yönetim
     şeridi üç eşit küçük düğme. Genel "her düğme tam satır" kuralını yalnız bu ekranda ezer. */
  .student-overview-actions > .button { flex: 1 1 calc(50% - 4px); min-height: 40px; padding-inline: 8px; font-size: 13px; }
  .student-overview-actions { gap: 8px; }
  .student-overview-yonetim { justify-content: stretch; gap: 6px; }
  /* Sil düğmesi display:contents formun içinde — flex öğesi düğmenin kendisidir, `>` ile seçilemez. */
  .student-overview-yonetim .button { flex: 1 1 0; flex-basis: 0; white-space: nowrap; }
  .student-overview-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .student-overview-metrics .metric-card { min-height: 96px; padding: 14px; }
  .student-overview-metrics .metric-card strong, .student-overview-metrics .metric-value { font-size: 26px; }
  .heading-row > :first-child { flex-basis: 100%; }
  .table-card > .card-heading { padding: 16px 14px 14px; }
}

@media print {
  .panel-page { padding-left: 0 !important; }
  .footer { margin-left: 0 !important; }
  .report-brand-logo { filter: none; }
}

/* Dokunmatikte :hover yoktur. Yalnız hover ile beliren düğmeler telefonda görünmez kalıyordu:
   haftalık ızgaradaki "+" (ders ekle) tamamen görünmezdi. Dokunmatikte kalıcı görünür yapılır. */
@media (hover: none) {
  .week-grid-add { opacity: .62; background: rgba(47,107,255,.07); }
  .builder-add { opacity: .9; }
  .slot-delete { opacity: 1; }
}

@media (pointer: coarse) {
  .button, .link-button, .nav-toggle, .view-switcher a{ min-height: 44px; }
  .main-nav a { min-height: 44px !important; }
  .choice { min-height: 44px; }
  /* Parmakla dokunulabilir küçük alanlar: plan ders saati kutusu, teklif belgesi kutu/düğmeleri.
     iOS 16px altındaki yazıya odaklanınca otomatik yakınlaşır; bu yüzden font da 16px'e çıkar.
     Yazdırma bloğu bu değerleri zaten sıfırlar, çıktı etkilenmez. */
  .plan-lesson-input { min-height: 42px; width: 68px; font-size: 16px; }
  .offer-lesson-input, .offer-price-input, .offer-title-input { min-height: 40px; font-size: 16px; border-color: #cbd7da; }
  .offer-lesson-input { width: 62px; }
  .offer-price-input { width: 108px; }
  .offer-row-remove { width: 36px; height: 36px; font-size: 18px; }
  /* Müsaitlik rozetindeki "+" ve "×" parmakla vurulabilsin (masaüstünde 22px). */
  .availability-window-remove, .availability-window .day-add { width: 34px; height: 34px; font-size: 17px; }
  .offer-row-add { min-height: 38px; padding: 6px 14px; font-size: 12px; }
  .schedule-cell-add, .week-grid a { min-height: 34px; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    scroll-behavior: auto !important;
    animation-duration: .01ms !important;
    /* Gecikme de sıfırlanmalı: fill-mode:backwards + gecikmeli giriş animasyonlarında
       (pano kartları) içerik gecikme boyunca başlangıç hâlinde (görünmez) bekliyordu. */
    animation-delay: 0s !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    transition-delay: 0s !important;
  }
}

/* ============================================================================
   PREMIUM PANO (ana sayfa) — 2026-08-02
   Aurora ışıklı hero, canlı saat, "bugün halkası", sayaçlı metrikler, kademeli
   giriş animasyonları ve imleç eğimi. Kurallar:
   - CSP: satır içi stil yok; tüm hareket bu dosyada, süsleme JS'i ayrı dosyada
     (dashboard-fx.js). JS yalnız CSSOM değişkeni yazar (style.setProperty muaf).
   - Girişler animation + fill-mode:backwards → JS yoksa da çalışır, bittiğinde
     transform'u serbest bırakır (eğim efektiyle çakışmaz).
   - Yukarıdaki prefers-reduced-motion bloğu (animation/transition .01ms) bu
     bölümün TAMAMINI tek kalemde kapatır; burada ayrıca guard gerekmez.
   - Halka: SVG pathLength=100 + stroke-dashoffset niteliği (nitelik CSP'ye
     takılmaz); @starting-style destekleyen tarayıcı süpürerek çizer,
     desteklemeyen doğrudan sonucu gösterir.
   ============================================================================ */

@keyframes eg-fx-up { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
@keyframes eg-fx-hero { from { opacity: 0; transform: translateY(12px) scale(.988); } to { opacity: 1; transform: none; } }
@keyframes eg-fx-underline { from { width: 0; } to { width: 44px; } }
@keyframes eg-aurora-a { from { transform: translate3d(-6%, -4%, 0) scale(1); } to { transform: translate3d(10%, 12%, 0) scale(1.18); } }
@keyframes eg-aurora-b { from { transform: translate3d(4%, 8%, 0) scale(1.1); } to { transform: translate3d(-12%, -10%, 0) scale(.94); } }
@keyframes eg-aurora-c { from { transform: translate3d(-8%, 10%, 0) scale(.92); } to { transform: translate3d(9%, -8%, 0) scale(1.14); } }
@keyframes eg-sheen { from { transform: translateX(-130%) skewX(-14deg); } to { transform: translateX(230%) skewX(-14deg); } }
@keyframes eg-live-dot { 0%, 100% { opacity: 1; box-shadow: 0 0 0 0 rgba(94,234,183,.45); } 50% { opacity: .55; box-shadow: 0 0 0 5px rgba(94,234,183,0); } }

/* --- Hero sahnesi --- */
.hero-live { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 26px; animation: eg-fx-hero .8s cubic-bezier(.16, 1, .3, 1) backwards; }
/* Günün sözü ORTA sütundadır (kullanıcı isteği: "söz ortada"). Sınıf PHP'den basılır: söz yoksa
   iki sütunlu düzen bozulmadan kalır. Söz üçüncü çocuk olarak eklenince halkanın sütununu kapıp
   onu alt satıra itiyordu (2026-08-15 ekran görüntüsü) — bu satır o kaymanın düzeltmesidir. */
.hero-live.has-quote { grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr) auto; }
.hero-live.has-quote .hero-quote { justify-self: center; max-width: 400px; }
.hero-live .hero-main { min-width: 0; }
/* Aurora: üç bulanık ışık küresi çok yavaş salınır (yalnız transform → GPU dostu). */
.hero-aurora, .hero-lines, .hero-sheen { position: absolute; inset: 0; z-index: -1; pointer-events: none; }
/* Dengelenmiş aurora: sıcak bal/adaçayı/kil tonları, opasite düşürüldü (daha sakin, daha profesyonel). */
.hero-aurora i { position: absolute; border-radius: 50%; filter: blur(52px); will-change: transform; }
.hero-aurora i:nth-child(1) { left: -6%; top: -40%; width: 380px; height: 380px; background: radial-gradient(circle, rgba(234,191,99,.22), transparent 62%); animation: eg-aurora-a 17s ease-in-out infinite alternate; }
.hero-aurora i:nth-child(2) { right: -4%; top: -20%; width: 460px; height: 460px; background: radial-gradient(circle, rgba(96,200,150,.18), transparent 60%); animation: eg-aurora-b 23s ease-in-out infinite alternate; }
.hero-aurora i:nth-child(3) { left: 30%; bottom: -55%; width: 420px; height: 420px; background: radial-gradient(circle, rgba(212,120,60,.20), transparent 62%); animation: eg-aurora-c 29s ease-in-out infinite alternate; }
/* İnce teknik ızgara: kenarlara doğru maske ile erir; dokuyu verir, dikkat çekmez. */
.hero-lines {
  background:
    repeating-linear-gradient(0deg, rgba(255,255,255,.05) 0 1px, transparent 1px 42px),
    repeating-linear-gradient(90deg, rgba(255,255,255,.05) 0 1px, transparent 1px 42px);
  -webkit-mask-image: radial-gradient(120% 130% at 78% 30%, #000 30%, transparent 72%);
  mask-image: radial-gradient(120% 130% at 78% 30%, #000 30%, transparent 72%);
}
/* Açılışta bir kez geçen parlama süpürmesi. */
.hero-sheen::after { content: ""; position: absolute; top: -30%; bottom: -30%; width: 34%; background: linear-gradient(105deg, transparent, rgba(255,255,255,.10) 48%, rgba(255,255,255,.16) 52%, transparent); animation: eg-sheen 1.9s cubic-bezier(.5, .1, .3, 1) .55s backwards; }
.hero-live h1 { margin: 6px 0 7px; }
/* İsim: beyazdan altına akan degrade metin (desteklemeyen tarayıcı düz beyaz görür). */
@supports (-webkit-background-clip: text) or (background-clip: text) {
  .hero-name { background: linear-gradient(94deg, #fff 30%, #ffd968 78%, #ffc043); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: transparent; }
}
.hero-sub { margin: 0; }
.hero-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 9px; margin-top: 15px; }
.hero-clock { display: inline-flex; align-items: center; gap: 8px; padding: 7px 13px; border: 1px solid rgba(255,255,255,.16); border-radius: 999px; background: rgba(8,18,52,.34); color: #fff; font-size: 13.5px; font-weight: 800; letter-spacing: .04em; font-variant-numeric: tabular-nums; }
.hero-live-dot { width: 8px; height: 8px; border-radius: 50%; background: #5eeab7; animation: eg-live-dot 2.2s ease-in-out infinite; }
.hero-chip { display: inline-flex; align-items: center; gap: 7px; padding: 7px 13px; border: 1px solid rgba(255,255,255,.17); border-radius: 999px; background: rgba(255,255,255,.09); color: rgba(255,255,255,.92); font-size: 12.5px; font-weight: 750; text-decoration: none; transition: background .18s ease, border-color .18s ease, transform .18s ease; }
.hero-chip:hover { background: rgba(255,255,255,.16); border-color: rgba(255,255,255,.30); transform: translateY(-1px); }
.hero-chip strong { color: var(--brand-gold); font-size: 15px; font-variant-numeric: tabular-nums; }
/* TELEFON AURORASI (2026-09-06 kullanıcı: "animasyon düzgün değil"): masaüstü için konan
   380-460px'lik üç küre 375px ekranda ölçek dışıydı — ÖLÇÜLDÜ (hero 575px boyunda; 1. küre
   -229px'te tamamen üstte, 2.si üst yarıyı tek renge boyuyor, orta bölge bomboş). Küreler
   telefonda küçülür ve uzun heronun üç bölgesine (üst-sol, orta-sağ, alt-sol) dağılır;
   ızgara maskesi de geniş yerleşimin 78%-30% odağından ortaya alınır. */
@media (max-width: 720px) {
  .hero-aurora i { filter: blur(38px); }
  .hero-aurora i:nth-child(1) { width: 220px; height: 220px; left: -14%; top: -4%; }
  .hero-aurora i:nth-child(2) { width: 260px; height: 260px; right: -20%; left: auto; top: 32%; }
  .hero-aurora i:nth-child(3) { width: 230px; height: 230px; left: -10%; bottom: -6%; }
  .hero-lines {
    -webkit-mask-image: radial-gradient(150% 80% at 50% 20%, #000 25%, transparent 78%);
    mask-image: radial-gradient(150% 80% at 50% 20%, #000 25%, transparent 78%);
  }
}
/* Branşa göre günün bilgisi (2026-08-17): panoda tek satırlık bilgi kutusu. */
/* ALAN ROZETİ (2026-08-18): SAY / EA / SÖZ / DİL — sınıf adından türetilir, alanı olmayan
   sınıfta hiç basılmaz. Küçük ve nötr: sınıf adının önüne geçmemeli. */
.alan-rozet {
  display: inline-block;
  margin-left: 6px;
  padding: 1px 7px;
  border-radius: 999px;
  background: var(--primary-soft);
  color: var(--primary);
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: .03em;
  vertical-align: middle;
}
/* Süzgeç kutusu "Programı Aç" düğmesinin SAĞINDA ve onunla AYNI HİZADA (2026-08-23 kullanıcı
   isteği). Şerit `align-items: end` olduğu için kutu düğmenin 8 px altında kalıyordu; kendi
   hizasını 36 px'lik düğme yüksekliğine göre kurar. */
/* ÜÇ KOPYALAMA BLOĞU YAN YANA (2026-08-23): kapalıyken üç sütun, açılan blok üç sütunu
   birden kaplar — form alanları 1/3 genişlikte sıkışmasın. Sıra DOM sırasıdır. */
.cprog-kopya-serit { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; align-items: start; margin-top: 12px; }
.cprog-kopya-serit > .cprog-kopya { margin: 0; }
/* AÇILAN BLOK KENDİ SÜTUNUNDA KALIR: üçü de yan yana durmaya devam eder, panel kendi
   başlığının ALTINDA açılır (kullanıcı isteği böyle okunuyor). Tam genişliğe yayan ilk
   sürüm denendi ve ölçüldü: açılan blok üç sütunu kaplayınca diğer ikisi alt satırlara
   dağılıyor, yani "yan yana" duruşu tam da kullanıldığı anda bozuluyordu. */
.cprog-kopya-serit > .cprog-kopya[open] { border-color: var(--primary); box-shadow: 0 6px 18px rgba(22,33,38,.08); }
.cprog-kopya-serit > .cprog-kopya[open] > *:not(summary) { min-width: 0; }
/* Form flex; dar sütunda alanlar alt alta insin (aksi hâlde tek satırda sıkışırlar). */
.cprog-kopya-serit .cprog-kopya-form { flex-direction: column; align-items: stretch; }
.cprog-kopya-serit .cprog-kopya-form > * { width: 100%; }
.cprog-kopya-serit > .cprog-kopya > summary { display: grid; gap: 2px; }
@media (max-width: 900px) { .cprog-kopya-serit { grid-template-columns: minmax(0, 1fr); } }

/* Takip edilen dersler kartı programın üstünde: seçim ekranın geri kalanını beslediği için
   ilk iş odur (2026-08-23 kullanıcı isteği). */
.cprog-ders-secim-karti .cov-ders-secim { margin: 0; }

.cprog-programsiz { flex: 0 0 auto; align-items: center; gap: 8px; min-height: 36px; }
.cprog-programsiz > input { margin-top: 0; }
.cprog-programsiz > span { white-space: nowrap; color: var(--text); font-size: 13px; }

/* KURUM NABZI ŞERİDİ (2026-08-18): beş sayı tek sırada; dar ekranda sarar. Dikkat isteyen
   kart ince bir üst çizgiyle ayrılır — renk tek başına ayrım taşımasın (renk körlüğü). */
/* Sütun sayısı AÇIKÇA verilir: auto-fit ile 178px 6 sütun (boş göz), 230px 4 sütun (tek
   başına kalan beşinci kart) üretti — ikisi de ölçüldü. Beş kart için beş sütun. */
.nabiz-seridi { grid-template-columns: repeat(auto-fit, minmax(168px, 1fr)); }
@media (min-width: 1080px) { .nabiz-seridi { grid-template-columns: repeat(5, minmax(0, 1fr)); } }
.nabiz-seridi .metric-card { min-height: 0; }
.nabiz-dikkat { box-shadow: inset 0 3px 0 var(--warning); }

/* BUGÜNÜN BİLGİSİ PANELİ (2026-08-18): içerik arasına sıkışmış şerit yerine kendi paneli.
   Sol kenarda altın şerit marka işareti; branş rozeti + "bugünün bilgisi" etiketi üstte,
   bilgi metni serifli ve büyük (okunmak için duruyor), kaynak altta soluk.
   Zeminler token'dan — koyu temada da okunur (ölçüldü). */
.bilgi-paneli { position: relative; padding: 22px 24px 18px 28px; overflow: hidden; background: var(--surface-soft); }
.bilgi-paneli::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 5px; background: linear-gradient(180deg, var(--brand-gold, #f9be03), #e0a800); }
.bilgi-paneli-ust { display: flex; flex-wrap: wrap; align-items: center; gap: 9px; margin-bottom: 12px; }
.bilgi-paneli-rozet { padding: 4px 11px; border-radius: 999px; background: var(--primary-soft); color: var(--primary); font-size: 11.5px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; }
.bilgi-paneli-etiket { color: var(--muted); font-size: 11.5px; font-weight: 750; letter-spacing: .07em; text-transform: uppercase; }
.bilgi-paneli-metin { margin: 0; max-width: 78ch; color: var(--text); font-family: Cambria, Georgia, serif; font-size: 17px; line-height: 1.62; }
.bilgi-paneli-kaynak { margin: 10px 0 0; color: var(--muted); font-size: 12.5px; font-style: italic; }
.bilgi-paneli-not { margin: 14px 0 0; padding-top: 11px; border-top: 1px solid var(--border); color: var(--muted); font-size: 11.5px; }
@media (max-width: 700px) { .bilgi-paneli { padding: 18px 16px 15px 20px; } .bilgi-paneli-metin { font-size: 15.5px; } }

.subject-fact { display: block; margin: 10px 0 0; padding: 10px 12px; border-left: 3px solid var(--brand-gold, #f9be03); border-radius: 8px; background: var(--surface-soft); }
.subject-fact b { display: block; margin-bottom: 3px; color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }
.subject-fact span { display: block; font-size: 13.5px; line-height: 1.55; }
.subject-fact small { display: block; margin-top: 4px; color: var(--muted); font-size: 11.5px; }
/* Kapsama ders seçimi (2026-08-17): katlanır çip listesi. */
.cov-ders-secim { margin-bottom: 10px; border: 1px dashed var(--border); border-radius: 12px; padding: 8px 12px; }
.cov-ders-secim > summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; cursor: pointer; list-style: none; }
.cov-ders-secim > summary::-webkit-details-marker { display: none; }
.cov-ders-secim > summary::before { content: '▸'; color: var(--muted); font-size: 12px; transition: transform .15s ease; }
.cov-ders-secim[open] > summary::before { transform: rotate(90deg); }
.cov-ders-secim > summary span { color: var(--muted); font-size: 12px; }
/* Veli görüşmesi formu (2026-08-17, ikinci geçiş): üç konu kartı sayfanın TAM genişliğinde
   yan yana durur. Önceki sürüm .student-form-layout kullanıyordu; o sınıf 1100px üstünde
   sayfayı iki sütuna böldüğü için tek kart 688px'e sıkışıyor, içindeki üç sütunlu ızgara
   201px'lik şeritlere iniyor ve onay kutusu etiketleri iki satıra kırılıyordu (ölçüldü).
   .gorusme-izgara doğrudan formun çocuğu olduğundan böyle bir daraltma yok.
   Kartlar eşit boyda uzar (stretch) ve uzun metin alanı kalan boşluğu doldurur. */
.gorusme-formu { display: grid; gap: 17px; }
.gorusme-izgara { display: grid; grid-template-columns: minmax(0, 1.12fr) minmax(0, 1fr) minmax(0, 1fr); gap: 16px; align-items: stretch; }
.gorusme-bolum { display: flex; flex-direction: column; gap: 13px; min-width: 0; }
.gorusme-bolum > .card-heading { margin-bottom: 0; padding-bottom: 0; }
.gorusme-bolum > .card-heading h2 { margin-bottom: 5px; }
/* Öğrenci + tarih tek satırda; alanların etiketleri kartlar arasında aynı hizada başlar. */
.gorusme-kimlik { grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); align-items: start; }
/* Uzun metin alanı kartın kalan boşluğunu yer → üç kart aynı boyda biter. */
.gorusme-metin { flex: 1 1 auto; }
.gorusme-metin textarea { flex: 1 1 auto; min-height: 128px; }
/* Alan altı açıklaması: token'dan muted (sabit hex yazılmaz — koyu temada okunmaz olurdu). */
.gorusme-bolum .field small { display: block; color: var(--muted); font-size: 11.5px; line-height: 1.4; }
/* Onay kutusu: etiketiyle TEK SATIRDA, dokunulabilir yükseklikte bir şerit. Açıklaması
   kartın başlığında durur — kutunun altında ikinci bir paragraf olarak yığılmaz. */
.gorusme-anahtar {
  display: flex; align-items: center; gap: 11px; min-height: 46px; padding: 11px 14px;
  border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft);
  cursor: pointer; transition: border-color .16s ease, background .16s ease;
}
.gorusme-anahtar:hover { border-color: var(--primary); }
.gorusme-anahtar input { flex: 0 0 auto; width: 18px; height: 18px; margin: 0; }
.gorusme-anahtar > span { min-width: 0; font-size: 14px; font-weight: 800; line-height: 1.3; }
.gorusme-bolum-veli:has(.gorusme-anahtar input:checked) .gorusme-anahtar { border-color: var(--primary); background: var(--primary-soft); }
.gorusme-bolum-uyari:has(.gorusme-anahtar input:checked) .gorusme-anahtar { border-color: var(--danger); background: var(--danger-soft); }
@media (max-width: 1180px) {
  .gorusme-izgara { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .gorusme-izgara > .gorusme-bolum:first-child { grid-column: 1 / -1; }
}
@media (max-width: 760px) {
  .gorusme-izgara { grid-template-columns: 1fr; }
  .gorusme-kimlik { grid-template-columns: 1fr; }
}
/* --- Genel Koordinasyon panosu: hızlı erişim şeridi (genel-panel.php, 2026-08-17) ---------
   Hero'nun eski düğme sırasının yerini alan TEK şerit. Kart ailesi aynı (--surface/--border/
   --shadow); ilk kart rolün asıl işidir ve .button-gold ile aynı ölçülmüş altın çifti kullanır
   (lacivert metin altın zeminde ≈ 10:1, iki temada da aynı). */
.kisayol-seridi { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 230px), 1fr)); gap: 12px; margin-bottom: 18px; }
.kisayol {
  display: flex; align-items: center; gap: 12px; min-width: 0;
  padding: 14px 16px; border: 1px solid var(--border); border-radius: var(--radius);
  background: var(--surface); box-shadow: var(--shadow); color: var(--text); text-decoration: none;
  animation: eg-fx-up .55s cubic-bezier(.16, 1, .3, 1) backwards;
  transition: transform .16s ease, border-color .18s ease, box-shadow .2s ease;
}
.kisayol:nth-child(1) { animation-delay: .06s; }
.kisayol:nth-child(2) { animation-delay: .12s; }
.kisayol:nth-child(3) { animation-delay: .18s; }
.kisayol:nth-child(4) { animation-delay: .24s; }
.kisayol:hover { transform: translateY(-2px); border-color: var(--primary); box-shadow: 0 10px 24px rgba(74, 56, 34, .10); }
.kisayol-simge { display: grid; place-items: center; flex: 0 0 auto; width: 38px; height: 38px; border-radius: 12px; background: var(--primary-soft); color: var(--primary); }
.kisayol-simge .nav-icon { width: 20px; height: 20px; }
.kisayol-birincil .kisayol-simge { background: linear-gradient(135deg, #ffd968, #ffbe1f); color: var(--brand-navy); }
.kisayol-metin { display: grid; gap: 2px; min-width: 0; }
.kisayol-metin strong { font-size: 14px; letter-spacing: -.01em; overflow-wrap: anywhere; }
.kisayol-metin small { color: var(--muted); font-size: 11.5px; line-height: 1.35; overflow-wrap: anywhere; }
.kisayol-ok { flex: 0 0 auto; margin-left: auto; color: var(--muted); font-weight: 800; transition: transform .18s ease, color .18s ease; }
.kisayol:hover .kisayol-ok { transform: translateX(3px); color: var(--primary); }
:root[data-theme="dark"] .kisayol:hover { box-shadow: 0 10px 24px rgba(0,0,0,.42); }

/* --- Boş durum daveti (2026-08-17) --------------------------------------------------------
   "0 deneme / 0 randevu" ekranı ölü göstermesin: ne olduğunu anlatan bir cümle + yazma yetkisi
   olana ekleme bağlantısı. Yetkisi olmayana düğme basılmaz (403'e götüren bağlantı olmaz). */
.bos-davet { display: flex; align-items: center; gap: 16px; }
/* Kart GÖVDESİNDEKİ boş durum kendi panelinde dursun (2026-08-18, kullanıcı: "çirkin duruyor").
   Öncesi: çıplak satır, kartın tam genişliğine yayılıyor ama metin 70ch'te kırılıp sağda
   650px ölü alan bırakıyordu (1280px'te ölçüldü) — metin havada duruyor gibi görünüyordu.
   Yumuşak zemin + iç boşluk, dar metni kasıtlı bir yerleşim haline getirir. */
/* Yatay kenar boşluğu .card-heading'in 22px'iyle AYNI: .table-card gövdesi padding:0 olduğu
   için panel kartın kenarına yapışıyor, başlık metnine göre 22px kayık duruyordu (ölçüldü). */
.bos-davet-satir { margin: 2px 22px 20px; padding: 16px 18px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface-soft, #f7f9fc); }
@media (max-width: 720px) { .bos-davet-satir { margin: 2px 14px 16px; padding: 14px; } }
.bos-davet-simge { display: grid; place-items: center; flex: 0 0 auto; width: 46px; height: 46px; border-radius: 14px; background: var(--primary-soft); color: var(--primary); }
.bos-davet-simge .nav-icon { width: 22px; height: 22px; }
.bos-davet-simge-lg { width: 60px; height: 60px; border-radius: 18px; }
.bos-davet-simge-lg .nav-icon { width: 28px; height: 28px; }
.bos-davet-metin { display: grid; gap: 4px; min-width: 0; }
.bos-davet-metin > strong { font-size: 17px; letter-spacing: -.02em; }
.bos-davet-metin > p { margin: 0; max-width: 70ch; color: var(--muted); font-size: 13.5px; line-height: 1.55; }
.bos-davet-metin > .eyebrow { margin: 0; }
.bos-davet-metin > .heading-actions { margin-top: 10px; }
.bos-davet > .button { flex: 0 0 auto; margin-left: auto; }
@media (max-width: 700px) {
  .bos-davet { flex-direction: column; align-items: flex-start; }
  .bos-davet > .button { margin-left: 0; }
}

/* Veli görüşmesi uyarısı (2026-08-17): katlanır başlık + süzgeçli gövde. */
.veli-uyari-baslik { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; cursor: pointer; list-style: none; padding: 2px 0; }
.veli-uyari-baslik::-webkit-details-marker { display: none; }
.veli-uyari-baslik::before { content: '▸'; color: var(--muted); font-size: 12px; transition: transform .15s ease; }
details[open] > .veli-uyari-baslik::before { transform: rotate(90deg); }
.veli-uyari-baslik strong { font-size: 15px; }
.veli-uyari-baslik span { color: var(--muted); font-size: 12.5px; }
.veli-uyari-govde { padding-top: 10px; }
.veli-uyari-govde .filter-form { margin-bottom: 6px; }
/* Sorun bildirimi (2026-08-17): üst çubuk düğmesi + yönetici ekranındaki kartlar. */
.issue-report-link { display: inline-flex; align-items: center; justify-content: center; }
.issue-card { margin-bottom: 14px; }
.issue-description { margin: 6px 0 0; padding: 10px 12px; border-left: 3px solid var(--border); background: var(--surface-soft); border-radius: 8px; font-size: 13.5px; line-height: 1.6; white-space: pre-wrap; }
.issue-actions { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: end; }
@media (max-width: 720px) { .issue-actions { grid-template-columns: 1fr; } }
/* Çevrimiçi rozeti (2026-08-17): tıklanabilir değil (bağlantısı yok) — imleç de öyle davransın. */
/* Instagram çipi: diğer çiplerle aynı pil, simgesi altın — panoda marka vurgusu. */
.hero-chip-sosyal .nav-icon { width: 15px; height: 15px; color: var(--brand-gold); }
.hero-chip.is-online { cursor: default; }
.hero-chip.is-online:hover { transform: none; background: rgba(255,255,255,.09); border-color: rgba(255,255,255,.17); }
.hero-ctas { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 18px; }
/* Altın CTA: lacivert metin altın zeminde (oran ≈ 10:1, her iki temada aynı). */
.button-gold { border: 0; background: linear-gradient(135deg, #ffd968, #ffbe1f); color: var(--brand-navy); box-shadow: 0 10px 26px rgba(255,190,31,.28); }
.button-gold:hover { background: linear-gradient(135deg, #ffe289, #ffc843); color: var(--brand-navy); box-shadow: 0 14px 30px rgba(255,190,31,.38); }
.button-gold .cta-arrow { display: inline-block; transition: transform .18s ease; }
.button-gold:hover .cta-arrow { transform: translateX(4px); }
.button-glass { border: 1px solid rgba(255,255,255,.28); background: rgba(255,255,255,.10); color: #fff; }
.button-glass:hover { background: rgba(255,255,255,.18); border-color: rgba(255,255,255,.42); color: #fff; }
/* --- Bugün halkası --- */
.hero-side { display: grid; justify-items: center; gap: 8px; }
.hero-ring { position: relative; width: 128px; height: 128px; }
.hero-ring svg { width: 100%; height: 100%; transform: rotate(-90deg); }
.hero-ring circle { fill: none; stroke-width: 8.5; }
.hero-ring-track { stroke: rgba(255,255,255,.16); }
.hero-ring-fg { stroke: url(#egRingGrad); stroke-linecap: round; stroke-dasharray: 100 100; transition: stroke-dashoffset 1.4s cubic-bezier(.22, 1, .36, 1) .45s; }
@starting-style { .hero-ring-fg { stroke-dashoffset: 100; } }
.hero-ring-label { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; }
.hero-ring-label strong { color: #fff; font-size: 26px; letter-spacing: -.04em; font-variant-numeric: tabular-nums; }
.hero-ring-label small { color: rgba(255,255,255,.72); font-size: 10.5px; font-weight: 800; letter-spacing: .09em; text-transform: uppercase; }
.hero-ring-caption { color: rgba(255,255,255,.80); font-size: 11.5px; font-weight: 700; }
.hero-live .hero-role { margin-top: 2px; }

/* --- Kademeli girişler --- */
.fx-card { animation: eg-fx-up .6s cubic-bezier(.16, 1, .3, 1) backwards; }
.metric-grid .fx-card:nth-child(1) { animation-delay: .07s; }
.metric-grid .fx-card:nth-child(2) { animation-delay: .14s; }
.metric-grid .fx-card:nth-child(3) { animation-delay: .21s; }
.metric-grid .fx-card:nth-child(4) { animation-delay: .28s; }
.fx-title { animation: eg-fx-up .55s cubic-bezier(.16, 1, .3, 1) .12s backwards; }
.fx-panel { animation: eg-fx-up .65s cubic-bezier(.16, 1, .3, 1) backwards; }
.dashboard-workspace .fx-panel:nth-child(1) { animation-delay: .16s; }
.dashboard-workspace .fx-panel:nth-child(2) { animation-delay: .26s; }
.dashboard-export-card.fx-panel { animation-delay: .34s; }
.fx-panel .upcoming-item { animation: eg-fx-up .5s cubic-bezier(.16, 1, .3, 1) backwards; }
.fx-panel .upcoming-item:nth-child(1) { animation-delay: .30s; }
.fx-panel .upcoming-item:nth-child(2) { animation-delay: .36s; }
.fx-panel .upcoming-item:nth-child(3) { animation-delay: .42s; }
.fx-panel .upcoming-item:nth-child(4) { animation-delay: .48s; }
.fx-panel .upcoming-item:nth-child(5) { animation-delay: .54s; }
.fx-panel .upcoming-item:nth-child(n+6) { animation-delay: .6s; }
/* Bölüm başlığının altın çizgisi soldan çizilir. */
.dashboard-section-title { position: relative; padding-bottom: 9px; }
.dashboard-section-title::after { content: ""; position: absolute; left: 0; bottom: 0; width: 44px; height: 3px; border-radius: 3px; background: linear-gradient(90deg, var(--brand-gold), rgba(255,201,40,.25)); animation: eg-fx-underline .7s cubic-bezier(.16, 1, .3, 1) .35s backwards; }

/* --- Metrik kartları: imleç ışığı + eğim (JS --eg-mx/--eg-my/--eg-rx/--eg-ry yazar) --- */
.metric-card {
  background-color: var(--surface);
  background-image: radial-gradient(300px circle at var(--eg-mx, 50%) var(--eg-my, -20%), color-mix(in srgb, currentColor 9%, transparent), transparent 72%);
  transform: perspective(950px) rotateX(var(--eg-rx, 0deg)) rotateY(var(--eg-ry, 0deg)) translateY(var(--eg-lift, 0));
  transition: transform .16s ease-out, box-shadow .22s ease, border-color .22s ease;
}
.metric-link:hover { --eg-lift: -3px; transform: perspective(950px) rotateX(var(--eg-rx, 0deg)) rotateY(var(--eg-ry, 0deg)) translateY(var(--eg-lift, 0)); border-color: #c9d1e5; box-shadow: var(--shadow-hover); }
.metric-card::after { transition: transform .35s cubic-bezier(.22, 1, .36, 1), opacity .3s ease; }
.metric-link:hover::after { transform: scale(1.45); opacity: .11; }
/* Sayaç: JS saydırırken rakam genişliği titremesin. */
.metric-card strong { font-variant-numeric: tabular-nums; }

/* Hızlı işlem / döküm kutucukları da nefes alsın. */
.operation-links a { transition: transform .16s ease, border-color .18s ease, background .18s ease, box-shadow .2s ease; }
.operation-links a:hover { transform: translateY(-2px); box-shadow: 0 10px 24px rgba(74,56,34,.08); }
.upcoming-item { transition: transform .16s ease, background .16s ease; border-radius: 10px; }
.upcoming-item:hover { transform: translateX(4px); background: var(--surface-soft); }

/* --- Koyu tema uyarlamaları --- */
:root[data-theme="dark"] .hero-live { border-color: rgba(255,255,255,.09); box-shadow: 0 22px 50px rgba(0,0,0,.5); }
:root[data-theme="dark"] .hero-aurora i { opacity: .8; }
:root[data-theme="dark"] .metric-link:hover { border-color: #3c4a68; }
:root[data-theme="dark"] .operation-links a:hover { box-shadow: 0 10px 24px rgba(0,0,0,.4); }
:root[data-theme="dark"] .upcoming-item:hover { background: var(--surface-soft); }

/* --- Dar ekranlar --- */
@media (max-width: 980px) {
  .hero-live { grid-template-columns: 1fr; }
  .hero-side { grid-auto-flow: column; align-items: center; justify-content: start; gap: 16px; }
  .hero-ring { width: 104px; height: 104px; }
  .hero-ring-label strong { font-size: 21px; }
  .hero-live .hero-role { display: inline-flex; margin-top: 0; }
}
@media (max-width: 560px) {
  .hero-ctas .button { flex: 1 1 100%; text-align: center; justify-content: center; }
  .hero-side { grid-auto-flow: row; justify-items: start; }
  .hero-live .hero-role { display: none; }
}

/* ============================================================================
   PANO TEMA GALERİSİ (ui.dashboard_theme) — WordPress teması gibi hazır paketler.
   Admin, Ayarlar > "Ana sayfa teması"ndan seçer; header <html data-dash-theme>
   basar, aşağıdaki bloklar yalnız hero sahnesinin renklerini değiştirir.
   KURAL: her temanın EN AÇIK degrade durağı, üstündeki beyaz metin ≥5:1 ve altın
   rozet (#ffe68c) ≥4.5:1 verecek kadar koyu seçildi (aurora'daki ölçüm düzeniyle).
   ============================================================================ */

/* — Gün Batımı: mürdüm → nar → kehribar — */
:root[data-dash-theme="sunset"] .hero-live { background: linear-gradient(125deg, #360b3f 0%, #7c1e4b 52%, #a5423f 100%); box-shadow: 0 22px 50px rgba(64,14,52,.28); }
:root[data-dash-theme="sunset"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,170,60,.34), transparent 62%); }
:root[data-dash-theme="sunset"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(255,99,132,.28), transparent 60%); }
:root[data-dash-theme="sunset"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(190,120,255,.30), transparent 62%); }

/* — Zümrüt: koyu orman yeşili — */
:root[data-dash-theme="emerald"] .hero-live { background: linear-gradient(125deg, #06281f 0%, #0b4a38 52%, #0e6f57 100%); box-shadow: 0 22px 50px rgba(6,40,31,.30); }
:root[data-dash-theme="emerald"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,201,40,.30), transparent 62%); }
:root[data-dash-theme="emerald"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(80,220,170,.30), transparent 60%); }
:root[data-dash-theme="emerald"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(90,200,255,.24), transparent 62%); }

/* — Okyanus: derin mavi → camgöbeği — */
/* — V2 Gece: gece laciverti → kobalt → mor; altın + camgöbeği ışıklar. En açık durak (#3a2fb0) beyazla 8.2:1. — */
:root[data-dash-theme="v2"] .hero-live { background: linear-gradient(125deg, #070b2e 0%, #14217a 46%, #3a2fb0 100%); box-shadow: 0 22px 50px rgba(7,11,46,.34); }
:root[data-dash-theme="v2"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,209,102,.30), transparent 62%); }
:root[data-dash-theme="v2"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(56,189,248,.30), transparent 60%); }
:root[data-dash-theme="v2"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(167,139,250,.34), transparent 62%); }
:root[data-dash-theme="ocean"] .hero-live { background: linear-gradient(125deg, #071a3d 0%, #0a3d62 52%, #0d6683 100%); box-shadow: 0 22px 50px rgba(7,26,61,.30); }
:root[data-dash-theme="ocean"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(56,189,248,.32), transparent 62%); }
:root[data-dash-theme="ocean"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(47,212,181,.28), transparent 60%); }
:root[data-dash-theme="ocean"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(124,150,255,.30), transparent 62%); }

/* — Sade: düz kart, süs yok. Renkler token'dan gelir → karanlık temada kendiliğinden doğru. — */
:root[data-dash-theme="minimal"] .hero-live { color: var(--text); background: var(--surface); border: 1px solid var(--border); box-shadow: var(--shadow); }
:root[data-dash-theme="minimal"] .hero-live::before,
:root[data-dash-theme="minimal"] .hero-live::after,
:root[data-dash-theme="minimal"] .hero-aurora,
:root[data-dash-theme="minimal"] .hero-lines,
:root[data-dash-theme="minimal"] .hero-sheen { display: none; }
:root[data-dash-theme="minimal"] .hero-live .eyebrow { color: var(--primary) !important; }
:root[data-dash-theme="minimal"] .hero-live h1 { color: var(--brand-navy); }
:root[data-theme="dark"][data-dash-theme="minimal"] .hero-live h1 { color: #ece3d6; }
:root[data-dash-theme="minimal"] .hero-name { background: none; -webkit-text-fill-color: currentColor; color: inherit; }
:root[data-dash-theme="minimal"] .hero-sub,
:root[data-dash-theme="minimal"] .hero-live p { color: var(--muted); }
:root[data-dash-theme="minimal"] .hero-clock { border-color: var(--border); background: var(--surface-soft); color: var(--text); }
:root[data-dash-theme="minimal"] .hero-live-dot { animation: none; }
:root[data-dash-theme="minimal"] .hero-chip { border-color: var(--border); background: var(--surface-soft); color: var(--text); }
:root[data-dash-theme="minimal"] .hero-chip:hover { background: var(--primary-soft); border-color: var(--primary); }
:root[data-dash-theme="minimal"] .hero-chip strong { color: var(--primary-dark); }
:root[data-dash-theme="minimal"] .button-glass { border-color: var(--border); background: transparent; color: var(--text); }
:root[data-dash-theme="minimal"] .button-glass:hover { background: var(--surface-soft); border-color: var(--primary); color: var(--text); }
:root[data-dash-theme="minimal"] .hero-ring-track { stroke: var(--border); }
:root[data-dash-theme="minimal"] .hero-ring-label strong { color: var(--brand-navy); }
:root[data-theme="dark"][data-dash-theme="minimal"] .hero-ring-label strong { color: #ece3d6; }
:root[data-dash-theme="minimal"] .hero-ring-label small,
:root[data-dash-theme="minimal"] .hero-ring-caption { color: var(--muted); }
:root[data-dash-theme="minimal"] .hero-live .hero-role { border-color: var(--border); background: var(--surface-soft); color: var(--text); }

/* Ayarlar sayfasındaki tema örnek şeritleri (minik önizleme) */
.dash-swatch { display: inline-block; width: 58px; height: 22px; margin-right: 9px; vertical-align: -5px; border: 1px solid rgba(23,33,38,.14); border-radius: 7px; }
.dash-swatch-v2 { background: linear-gradient(125deg, #070b2e, #14217a 46%, #3a2fb0); }
.dash-swatch-aurora { background: linear-gradient(125deg, #000b49, #0a246f 48%, #315fd0); }
.dash-swatch-sunset { background: linear-gradient(125deg, #360b3f, #7c1e4b 52%, #a5423f); }
.dash-swatch-emerald { background: linear-gradient(125deg, #06281f, #0b4a38 52%, #0e6f57); }
.dash-swatch-ocean { background: linear-gradient(125deg, #071a3d, #0a3d62 52%, #0d6683); }
.dash-swatch-minimal { background: var(--surface); border-style: dashed; }
:root[data-theme="dark"] .dash-swatch { border-color: rgba(230,235,244,.22); }

/* ============================================================================
   KULLANIM KILAVUZU (public/guide.php) — renkler token'dan gelir (iki tema uyumlu, WCAG AA).
   ============================================================================ */
/* ============================================================================
   DENEME KİTAPÇIĞI (quiz-print.php) — markalı, iki sütun, yazdırmaya hazır.
   Sistemin diğer belgeleriyle (gelişim raporu, hak dökümü) aynı aileden görünsün diye
   logolu renkli başlık bandı kullanır. Renk yazdırmada da bassın diye print-color-adjust;
   gri basılırsa da okunur kalsın diye gövde metni saf siyah ve kenarlıklar korunur.
   Ekranda A4 sayfa hissi (gölge + beyaz kâğıt), yazdırmada gölge/araç çubuğu kalkar.
   ============================================================================ */
.qp-body { background: #eceae6; }
.qp-sheet, .qp-optic-sheet {
  width: min(210mm, 100%);
  margin: 22px auto;
  padding: 16mm 15mm 12mm;
  background: #fff;
  color: #111;
  box-shadow: 0 10px 34px rgba(45, 32, 14, .16);
}
.qp-optic-sheet { margin-top: 0; }

/* --- Markalı başlık bandı --- */
.qp-head {
  display: flex; align-items: center; gap: 16px;
  margin: -16mm -15mm 14px; padding: 12px 15mm;
  background: linear-gradient(120deg, #000b49, #0a246f 60%, #315fd0);
  color: #fff;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.qp-head-brand { display: flex; align-items: center; gap: 11px; flex: none; padding-right: 15px; border-right: 1px solid rgba(255,255,255,.28); }
.qp-logo { width: 46px; height: 46px; flex: none; }
.qp-head-org strong { display: block; font-size: 15px; letter-spacing: -.02em; }
/* Bandın gradyanı rgb(0,11,73) → rgb(49,95,208); ORAN EN AÇIK DURAKTA ölçülür. rgba(255,255,255,.72)
   orada 3.78:1 idi (8.5px, kâğıda basılıyor); #e3e9fc 4.71:1. Saydam beyaz kullanmayın. */
.qp-head-org small { display: block; margin-top: 2px; color: #e3e9fc; font-size: 8.5px; letter-spacing: .12em; text-transform: uppercase; }
.qp-head-main { min-width: 0; }
.qp-head-main h1 { margin: 0 0 7px; color: #fff; font-size: 19px; line-height: 1.2; letter-spacing: -.02em; }
.qp-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.qp-chip { padding: 3px 9px; border: 1px solid rgba(255,255,255,.3); border-radius: 999px; background: rgba(255,255,255,.12); font-size: 10px; font-weight: 700; }

/* --- Öğrenci bilgi satırı --- */
.qp-student { display: flex; flex-wrap: wrap; gap: 10px 18px; margin-bottom: 10px; padding-bottom: 10px; border-bottom: 1.5px solid #000b49; }
.qp-fill { flex: 1 1 150px; border-bottom: 1px dotted #666; padding-bottom: 2px; font-size: 11px; }
.qp-fill-wide { flex: 2 1 240px; }
.qp-fill b, .qp-score b { color: #000b49; font-size: 9.5px; letter-spacing: .06em; text-transform: uppercase; }
.qp-score { flex: none; width: 76px; border: 1.5px solid #000b49; border-radius: 6px; padding: 4px 8px 14px; text-align: center; }
.qp-scope { margin: 0 0 12px; padding: 7px 10px; border-left: 3px solid #b5541d; background: #faf6f0; color: #333; font-size: 10.5px; line-height: 1.5; }
.qp-scope b { color: #96420f; }

/* --- Sorular: iki sütun kitapçık düzeni --- */
.qp-questions { column-count: 2; column-gap: 9mm; column-rule: 1px solid #e2ddd4; list-style: none; margin: 0; padding: 0; }
.qp-single .qp-questions { column-count: 1; }
.qp-q { break-inside: avoid; page-break-inside: avoid; margin: 0 0 13px; padding-bottom: 11px; border-bottom: 1px dashed #e6e0d6; }
.qp-q-head { display: flex; align-items: center; gap: 7px; margin-bottom: 5px; }
.qp-q-no {
  width: 20px; height: 20px; flex: none; display: inline-flex; align-items: center; justify-content: center;
  border-radius: 50%; background: #000b49; color: #fff; font-size: 11px; font-weight: 800;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.qp-q-topic { color: #7a6a58; font-size: 8.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; }
.qp-q-body { font-size: 11.5px; line-height: 1.55; margin-bottom: 6px; white-space: pre-wrap; }
.qp-opts { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.qp-opt { display: flex; align-items: baseline; gap: 7px; font-size: 11px; line-height: 1.45; }
.qp-opt-letter { flex: none; width: 15px; height: 15px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid #b5541d; border-radius: 50%; color: #96420f; font-size: 9px; font-weight: 800; }
.qp-opt-text { min-width: 0; }

/* --- Cevap anahtarı: kompakt tablo (kitapçığın tekrarı değil) --- */
.qp-key-table { width: 100%; border-collapse: collapse; font-size: 11px; }
.qp-key-table thead th { padding: 6px 8px; background: #000b49; color: #fff; font-size: 9.5px; letter-spacing: .08em; text-transform: uppercase; text-align: left; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.qp-key-table td { padding: 5px 8px; border-bottom: 1px solid #e8e2d8; }
.qp-key-table tbody tr:nth-child(even) td { background: #faf7f2; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.qp-key-no { width: 42px; font-weight: 800; color: #555; }
.qp-key-ans { width: 62px; font-weight: 900; color: #96420f; font-size: 13px; }
.qp-key-topic { color: #444; }

/* --- Alt bilgi --- */
.qp-foot { display: flex; justify-content: space-between; gap: 12px; margin-top: 14px; padding-top: 8px; border-top: 1px solid #ddd6ca; color: #7a6a58; font-size: 9px; }

/* --- Optik form --- */
.qp-optic-sheet { break-before: page; page-break-before: always; }
.qp-optic-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 12px; margin-bottom: 14px; padding-bottom: 9px; border-bottom: 2px solid #000b49; }
.qp-optic-head strong { display: block; font-size: 15px; color: #000b49; }
.qp-optic-head small { display: block; margin-top: 2px; color: #6f6357; font-size: 10px; }
.qp-optic-id { display: flex; gap: 14px; flex: 1 1 320px; max-width: 420px; }
.qp-optic-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(158px, 1fr)); gap: 7px 16px; }
.qp-optic-row { display: flex; align-items: center; gap: 5px; }
.qp-optic-no { width: 22px; flex: none; text-align: right; font-size: 10.5px; font-weight: 800; color: #555; }
.qp-bubble { width: 17px; height: 17px; display: inline-flex; align-items: center; justify-content: center; border: 1.2px solid #444; border-radius: 50%; font-size: 8.5px; color: #666; }
.qp-optic-note { margin-top: 14px; padding-top: 8px; border-top: 1px dashed #ccc; color: #6f6357; font-size: 9.5px; }

/* --- KAPAK (2026-10-07, tanı denemesi): gerçek TYT kitapçığı gibi tek A4 sayfa. Kâğıt her temada beyazdır;
   renkler kitapçık başlığının lacivert + altın ailesinden. --- */
.qp-kapak {
  width: min(210mm, 100%); min-height: 297mm; margin: 22px auto 0; padding: 0 0 12mm;
  display: flex; flex-direction: column; gap: 8mm;
  background: #fff; color: #111; box-shadow: 0 10px 34px rgba(45, 32, 14, .16);
  break-after: page; page-break-after: always;
}
.qp-kapak-ust {
  display: flex; align-items: center; gap: 6mm; padding: 9mm 14mm;
  background: linear-gradient(120deg, #000b49, #0a246f 60%, #315fd0); color: #fff;
  box-shadow: inset 0 -2mm 0 #f9be03;
  -webkit-print-color-adjust: exact; print-color-adjust: exact;
}
.qp-kapak-logo { width: 26mm; height: 26mm; flex: none; border-radius: 4mm; background: #fff; padding: 1.5mm; }
.qp-kapak-kurum { min-width: 0; }
.qp-kapak-kurum strong { display: block; font-size: 30px; letter-spacing: .08em; line-height: 1.05; }
.qp-kapak-kurum small { display: block; margin-top: 4px; color: #e3e9fc; font-size: 11px; letter-spacing: .2em; text-transform: uppercase; }
.qp-kapak-no { margin-left: auto; display: grid; justify-items: center; padding: 3mm 6mm; border: .6mm solid #f9be03; border-radius: 3mm; }
.qp-kapak-no span { color: #e3e9fc; font-size: 10px; font-weight: 700; letter-spacing: .18em; text-transform: uppercase; }
.qp-kapak-no b { color: #f9be03; font-size: 46px; line-height: 1; }
.qp-kapak-no small { color: #e3e9fc; font-size: 12px; font-weight: 700; }
.qp-kapak-baslik { padding: 0 14mm; text-align: center; }
.qp-kapak-ust-yazi { margin: 2mm 0 0; color: #000b49; font-size: 17px; font-weight: 800; letter-spacing: .22em; }
.qp-kapak-baslik h1 { margin: 1mm 0 0; color: #000b49; font-size: 110px; line-height: 1; letter-spacing: .04em; font-weight: 900; }
.qp-kapak-alt-yazi { margin: 2mm auto 0; padding: 2.5mm 7mm; width: max-content; max-width: 100%; border-radius: 99px;
  background: #f9be03; color: #000b49; font-size: 17px; font-weight: 900; letter-spacing: .08em;
  -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.qp-kapak-bilgi { display: flex; justify-content: center; flex-wrap: wrap; gap: 3mm; margin: 5mm 0 0; }
.qp-kapak-bilgi span { padding: 1.5mm 4mm; border: .4mm solid #000b49; border-radius: 99px; color: #000b49; font-size: 12px; font-weight: 800; }
.qp-kapak-aday { display: grid; grid-template-columns: repeat(4, 1fr); gap: 3mm; margin: 0 14mm; }
.qp-kapak-kutu { display: block; min-height: 14mm; padding: 1.5mm 2.5mm; border: .4mm solid #000b49; border-radius: 2mm; }
.qp-kapak-kutu b { color: #000b49; font-size: 9px; letter-spacing: .1em; text-transform: uppercase; }
.qp-kapak-genis { grid-column: 1 / -1; }
.qp-kapak-konular { margin: 0 14mm; padding: 3mm 4mm; border-left: 1mm solid #f9be03; background: #f6f7fb; font-size: 10.5px; line-height: 1.5;
  -webkit-print-color-adjust: exact; print-color-adjust: exact; }
.qp-kapak-konular b { color: #000b49; font-size: 10px; letter-spacing: .1em; text-transform: uppercase; }
.qp-kapak-konular p { margin: 1mm 0 0; }
.qp-kapak-dikkat { margin: auto 14mm 0; padding: 4mm 6mm; border: .6mm solid #000b49; border-radius: 3mm; }
.qp-kapak-dikkat h2 { margin: 0 0 2mm; color: #b00020; font-size: 15px; letter-spacing: .12em; }
.qp-kapak-dikkat ol { margin: 0; padding-left: 5mm; display: grid; gap: 1.5mm; font-size: 11px; line-height: 1.5; }
.qp-kapak-hak { margin: 0 14mm; color: #555; font-size: 9px; text-align: center; }
/* Tanı denemesi ekranları (tani-denemesi*.php). */
/* Tanı seçimi (test-generate.php?tur=TANI): ders <details> › konu › alt konu kutuları. */
.tani-secim { display: grid; gap: 10px; }
.tani-sec-ders { border: 1px solid var(--border); border-radius: 10px; padding: 8px 12px; background: var(--surface); }
.tani-sec-ders > summary { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; cursor: pointer; }
.tani-sec-ders > summary small { color: var(--muted); }
.tani-sec-dugmeler { margin-left: auto; display: inline-flex; gap: 6px; }
.tani-sec-ders:not([open]) > *:not(summary) { display: none; }
.tani-sec-konu { border-top: 1px dashed var(--border); padding: 8px 0; }
.tani-sec-konu-bas { display: flex; align-items: center; gap: 10px; margin-bottom: 4px; }
.tani-sec-altlar { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 4px 14px; }
.tani-sec-alt { display: flex; align-items: center; gap: 8px; font-size: .92rem; }
.tani-sec-alt small { color: var(--muted); white-space: nowrap; margin-left: auto; }
.tani-sec-alt.is-bos { color: var(--muted); }
.tani-uret { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 14px; margin-top: 16px; }
.tani-uret .field { flex: 1 1 320px; margin: 0; }
.tani-uret small { flex: 1 0 100%; color: var(--muted); }
.tani-yerine { margin: 10px 0; }
.tani-dersler { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0 0; }
.tani-ders-cip { padding: 4px 10px; border: 1px solid var(--border); border-radius: 999px; font-size: 12px; background: var(--surface-soft); }
.tani-ders-cip.is-eksik { border-color: var(--warning); }
.tani-ders-cip.is-bos { border-color: var(--danger); color: var(--danger); }
.tani-kitapciklar { display: grid; gap: 4px; }
.tani-kitapcik a { margin-left: 6px; font-weight: 700; }
.tani-lejant { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin: 0 0 14px; }
.tani-lejant small { color: var(--muted); margin-right: 8px; }
.tani-sev { display: inline-block; padding: 3px 9px; border-radius: 999px; font-size: 11px; font-weight: 800; white-space: nowrap; }
.tani-sev.is-eksik { background: var(--danger-soft); color: var(--danger); }
.tani-sev.is-temel { background: var(--warning-soft); color: var(--warning); }
.tani-sev.is-orta { background: var(--primary-soft); color: var(--primary); }
.tani-sev.is-ileri { background: var(--success-soft); color: var(--success); }
.tani-sev.is-yok { background: var(--surface-soft); color: var(--muted); }
.tani-hucre { font-weight: 800; font-variant-numeric: tabular-nums; }
.tani-hucre.is-dogru { color: var(--success); }
.tani-hucre.is-yanlis { color: var(--danger); }
.tani-hucre.is-bos, .tani-hucre.is-yok { color: var(--muted); }
.tani-harita th.tani-d, .tani-harita td.tani-d { width: 80px; text-align: center; }
.tani-konu-satir th { padding-top: 14px; text-align: left; color: var(--text); background: var(--surface-soft); }
.tani-konu-satir small { margin-left: 8px; color: var(--muted); font-weight: 600; }
.tani-oneri { margin: 0; padding-left: 22px; display: grid; gap: 6px; }
.tani-oneri small { color: var(--muted); }
.tani-kalan { padding: 0 16px 14px; }
.tani-boy { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px 14px; margin-top: 14px; }
.tani-boy .field { flex: 0 1 260px; margin: 0; }
.tani-boy small { flex: 1 1 260px; color: var(--muted); }
/* Tanı ders grafiği + ders blokları (2026-10-08). Çubuk sunucu SVG'si; renk sınıftan. */
.tani-grafik { display: grid; gap: 10px; }
.tani-grafik-satir { display: grid; grid-template-columns: minmax(150px, 210px) minmax(120px, 1fr) auto; align-items: center; gap: 8px 14px; }
.tani-grafik-ders { display: grid; line-height: 1.25; }
.tani-grafik-ders small { color: var(--muted); font-size: 11.5px; }
.tani-cubuk { display: block; width: 100%; height: 14px; border-radius: 7px; overflow: hidden; background: var(--surface-soft); }
.tani-seg.is-eksik { fill: var(--danger); }
.tani-seg.is-temel { fill: var(--warning); }
.tani-seg.is-orta { fill: var(--primary); }
.tani-seg.is-ileri { fill: var(--success); }
.tani-grafik-sayilar { display: flex; flex-wrap: wrap; gap: 4px 8px; font-size: 12px; }
.tani-sayi { color: var(--muted); white-space: nowrap; }
.tani-sayi b { font-variant-numeric: tabular-nums; }
.tani-sayi.is-eksik b { color: var(--danger); }
.tani-sayi.is-temel b { color: var(--warning); }
.tani-sayi.is-orta b { color: var(--primary); }
.tani-sayi.is-ileri b { color: var(--success); }
.tani-ders-blok { border-top: 1px solid var(--border); }
.tani-ders-blok > summary { cursor: pointer; padding: 12px 16px; display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; }
.tani-ders-blok > summary span { color: var(--muted); font-size: 12.5px; }
.tani-ders-blok:not([open]) > *:not(summary) { display: none; }
.tani-oneri-kalan { padding: 8px 0 0; }
.tani-360-ust { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: baseline; margin: 0 0 12px; color: var(--muted); font-size: 13px; }
@media (max-width: 700px) {
  .tani-grafik-satir { grid-template-columns: 1fr; gap: 4px; }
}
/* Tanı kitapçığında soru başında konu adı, puan kutusu ve kapsam şeridi basılmaz: konular kapakta yazar, puan yoktur. */
.qp-tani .qp-q-topic, .qp-tani .qp-score, .qp-tani .qp-scope { display: none; }
@media screen and (max-width: 700px) {
  .qp-kapak { min-height: 0; }
  .qp-kapak-ust { flex-wrap: wrap; padding: 16px; }
  .qp-kapak-baslik h1 { font-size: 64px; }
  .qp-kapak-aday { grid-template-columns: 1fr 1fr; margin: 0 16px; }
  .qp-kapak-konular, .qp-kapak-dikkat, .qp-kapak-hak { margin-left: 16px; margin-right: 16px; }
}
@media print {
  .qp-kapak { width: auto; min-height: 262mm; height: 262mm; overflow: hidden; margin: 0; box-shadow: none; padding-bottom: 0; gap: 6mm; }
}

@media print {
  .qp-body { background: #fff; }
  .qp-sheet, .qp-optic-sheet { width: auto; margin: 0; padding: 0; box-shadow: none; }
  .qp-head { margin: 0 0 10px; padding: 10px 12px; border-radius: 0; }
  .qp-questions { column-gap: 8mm; }
  @page { size: A4 portrait; margin: 12mm; }
}

/* Müfredat sürümü: ders başlığındaki rozet + toplu etiketleme seçicisi. */
.curriculum-subject-title { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }
.curriculum-version-form { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 10px; padding: 8px 12px; border: 1px dashed var(--border); border-radius: 10px; background: var(--surface-soft); }
.curriculum-version-form label { display: flex; align-items: center; gap: 7px; margin: 0; }
.curriculum-version-form span { color: var(--muted); font-size: 12px; font-weight: 700; }
.curriculum-version-form select { min-height: 34px; padding: 0 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); font-size: 12.5px; }
/* Sınıfın AKTİF müfredatı: ders bazlı etiket seçicisinden görsel olarak ayrılır — biri
   "bu katalog hangi müfredat", diğeri "bu sınıfta hangisi gösterilsin". Karıştırılırsa
   yanlış katalog etiketlenir. */
.curriculum-active-version { margin-bottom: 16px; border-style: solid; border-left: 3px solid var(--primary); }
.curriculum-active-version .choice-hint { flex: 1 1 100%; margin: 0; }

/* Onay kartında "bu ders olmadı" iptali: yanlışlıkla tıklanmasın diye katlanmış durur, açılınca
   gerekçe ister. Ana eylemlerden görsel olarak geride (ghost + soluk) — yıkıcı değil ama istisna. */
.approval-dismiss { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border); }
.approval-dismiss > summary { cursor: pointer; color: var(--muted); font-size: 12.5px; font-weight: 700; list-style: none; }
.approval-dismiss > summary::-webkit-details-marker { display: none; }
.approval-dismiss > summary::before { content: "⊘"; margin-right: 7px; }
.approval-dismiss > summary:hover { color: var(--danger); }
.approval-dismiss-form { display: grid; gap: 10px; margin-top: 12px; padding: 13px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.approval-dismiss-form .field { gap: 6px; }
.approval-dismiss-note { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.5; }
.approval-dismiss-form .button { justify-self: start; }

/* Form içi satır-içi onay kutusu (ör. "peşin onay"): etiket + kutu yan yana, kutu tam genişlik olmasın. */
/* .choice-inline TEK bir onay kutusu + metin içindir ve `.field` ile BİRLİKTE kullanılır —
   display:flex'i .field verir, bu kural yalnız yönü çevirir. Tek başına bir <div>'e verilirse
   display:block kalır ve içindekiler alt alta dizilir. Rozet dizisi için .choice-chips kullanın. */
.choice-inline { flex-direction: row; align-items: flex-start; gap: 10px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.choice-inline input[type="checkbox"] { flex: none; width: 18px; height: 18px; margin-top: 2px; accent-color: var(--primary); }
.choice-inline > span { font-size: 13px; line-height: 1.5; color: var(--text); }
.choice-inline strong { color: var(--primary-dark); }

.guide-toc { display: flex; flex-wrap: wrap; gap: 8px 10px; padding: 14px 16px; }
.guide-toc a { padding: 6px 12px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface-soft); color: var(--text); font-size: 13px; font-weight: 700; text-decoration: none; transition: border-color .15s, background .15s, color .15s; }
.guide-toc a:hover { border-color: var(--primary); background: var(--primary-soft); color: var(--primary-dark); }

.guide-section { scroll-margin-top: 88px; }        /* sabit üst bar altında kalmasın */
.guide-steps { list-style: none; margin: 4px 0 0; padding: 0; counter-reset: guide; }
.guide-step { position: relative; padding: 16px 16px 16px 52px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface-soft); }
.guide-step + .guide-step { margin-top: 12px; }
.guide-step::before { counter-increment: guide; content: counter(guide); position: absolute; left: 14px; top: 16px; width: 26px; height: 26px; display: grid; place-items: center; border-radius: 999px; background: var(--primary); color: var(--on-primary); font-size: 13px; font-weight: 800; }
.guide-step-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }
.guide-step-head h3 { margin: 0; font-size: 16px; }
.guide-line { margin: 8px 0 0; color: var(--text); font-size: 14px; line-height: 1.5; }
.guide-step-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 12px; }
.guide-hint { color: var(--muted); font-size: 12.5px; font-style: italic; }

/* Kime ait rozeti */
.guide-badge { padding: 3px 9px; border-radius: 999px; font-size: 10.5px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; border: 1px solid transparent; }
.guide-badge-admin { background: var(--primary-soft); color: var(--primary-dark); border-color: color-mix(in srgb, var(--primary) 30%, transparent); }
.guide-badge-coordinator { background: var(--surface); color: var(--muted); border-color: var(--border); }
.guide-badge-both { background: var(--success-soft); color: var(--success); border-color: color-mix(in srgb, var(--success) 30%, transparent); }

/* Canlı durum rozeti */
.guide-status { display: inline-flex; align-items: center; gap: 6px; padding: 5px 11px; border-radius: 999px; font-size: 12.5px; font-weight: 750; }
.guide-status-ok { background: var(--success-soft); color: var(--success); }
.guide-status-todo { background: var(--danger-soft); color: var(--danger); }
.guide-status-info { background: var(--surface); color: var(--muted); border: 1px solid var(--border); }

@media (max-width: 560px) {
  .guide-step { padding-left: 46px; }
  .guide-step-foot .button { flex: 1 1 100%; text-align: center; }
}

/* ==========================================================================
   GENEL KOORDİNASYON · Deneme Takvimi
   Renkler token'dan gelir (sabit hex yok); rozetler koyu temada da AA'yı geçer.
   ========================================================================== */
.exam-cal-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 16px; }
.exam-count-overview { display: grid; grid-template-columns: 150px minmax(0, 1fr); gap: 18px; margin-bottom: 16px; padding: 16px; }
.exam-count-total { display: grid; align-content: center; min-width: 0; padding: 13px 15px; border-radius: 13px; background: var(--primary-soft); }
.exam-count-total span, .exam-count-total small { color: var(--muted); font-size: 10.5px; font-weight: 750; }
.exam-count-total strong { margin: 2px 0; color: var(--primary-dark); font-size: 30px; line-height: 1; font-variant-numeric: tabular-nums; }
.exam-count-groups { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; min-width: 0; }
.exam-count-group { min-width: 0; }
.exam-count-group-heading { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 10px; margin-bottom: 8px; }
.exam-count-group-heading strong { font-size: 12px; }
.exam-count-group-heading span { color: var(--muted); font-size: 9.5px; }
.exam-count-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.exam-count-chip { display: inline-flex; align-items: center; gap: 7px; min-width: 76px; padding: 6px 8px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
.exam-count-chip span { min-width: 0; color: var(--text); font-size: 10.5px; font-weight: 700; overflow-wrap: anywhere; }
.exam-count-chip strong { margin-left: auto; color: var(--primary-dark); font-size: 14px; font-variant-numeric: tabular-nums; }
.exam-count-chip.is-grade { background: var(--primary-soft); }
.exam-count-chip.is-unassigned { background: #fff4dc; }
.exam-count-chip.is-unassigned strong { color: #946018; }
.exam-count-empty { color: var(--muted); font-size: 11px; }
.exam-view-tabs { display: inline-flex; gap: 3px; padding: 3px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface-soft); }
.exam-view-tabs a { padding: 7px 16px; border-radius: 999px; color: var(--muted); font-size: 13px; font-weight: 750; text-decoration: none; transition: background .15s ease, color .15s ease; }
.exam-view-tabs a:hover { color: var(--text); background: var(--surface); }
/* Zemin --primary DEĞİL --primary-alt: koyu temada --primary açık kile (#e88a4f) dönüyor ve
   üstündeki beyaz metin 2.57:1'e düşüyordu (ölçüldü). --primary-alt iki temada da aynı koyu
   tondur ve beyazla ≥4.6 verir. */
.exam-view-tabs a.is-active { color: var(--on-primary); background: var(--primary-alt); }
.people-directory-tabs { display: inline-flex; flex-wrap: wrap; gap: 4px; margin: 0 0 14px; padding: 4px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface); box-shadow: var(--shadow); }
.people-directory-tabs a { min-width: 120px; padding: 9px 15px; border-radius: 10px; color: var(--muted); font-size: 13px; font-weight: 750; text-align: center; text-decoration: none; }
.people-directory-tabs a:hover { color: var(--primary-dark); background: var(--primary-soft); }
.people-directory-tabs a.is-active { color: var(--on-primary); background: var(--primary-alt); }
.shared-directory-note { display: flex; align-items: center; gap: 8px 14px; margin-bottom: 14px; padding: 12px 15px; border-left: 4px solid var(--primary-alt); }
.shared-directory-note strong { flex: none; color: var(--primary-dark); font-size: 12px; }
.shared-directory-note span { color: var(--muted); font-size: 12px; line-height: 1.45; }
.exam-cal-controls { display: flex; flex-wrap: wrap; align-items: flex-end; justify-content: flex-end; min-width: 0; max-width: 100%; gap: 9px; }
.exam-month-picker { display: flex; flex-wrap: wrap; align-items: flex-end; min-width: 0; max-width: 100%; gap: 6px; }
.exam-month-field { flex: 1 1 168px; width: 168px; min-width: 0; max-width: 100%; gap: 4px; }
.exam-month-field span { font-size: 10px; }
.exam-month-field input { width: 100%; min-width: 0; min-height: 35px; padding-block: 6px; }
.exam-cal-nav { display: inline-flex; min-width: 0; max-width: 100%; gap: 6px; }
.exam-cal-card { padding: 18px; overflow-x: auto; }

/* Tarayıcı yakınlaştırması veya geniş sistem fontu etkin olduğunda sağdaki ay seçici kesilmesin.
   Orta genişlikte işlemler bilinçli olarak ikinci satıra iner; böylece başlık ve kart genişlemez. */
@media (max-width: 1280px) {
  .exam-page-heading { align-items: flex-start; }
  .exam-page-heading > .heading-actions { flex: 1 1 100%; justify-content: flex-start; }
  .exam-cal-bar { align-items: stretch; }
  .exam-cal-controls { flex: 1 1 100%; justify-content: flex-start; }
}

/* Tek deneme rozeti — üç görünümde de aynı. Kesme YOK: deneme adı kısaltılırsa iki farklı
   yayının aynı görünen satırı olur ("TYT Deneme 1"), ayırt etmek için tıklamak gerekir. */
.exam-chip { display: block; padding: 6px 9px; border: 1px solid var(--border); border-left: 3px solid var(--primary); border-radius: 9px; background: var(--surface); color: var(--text); text-decoration: none; font-size: 12px; line-height: 1.35; transition: border-color .15s ease, background .15s ease; }
.exam-chip + .exam-chip { margin-top: 5px; }
.exam-chip:hover { border-color: var(--primary); background: var(--primary-soft); }
.exam-chip b { display: block; color: var(--primary-dark); font-size: 10px; font-weight: 850; letter-spacing: .06em; text-transform: uppercase; }
.exam-chip span { display: block; font-weight: 650; overflow-wrap: anywhere; }
.exam-chip small { color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; }
.exam-chip.is-stock-available { background: var(--success-soft); }
.exam-chip.is-stock-missing { background: var(--danger-soft); }
.exam-chip.is-stock-depleted { background: #fff4dc; }
.exam-chip .exam-stock-mini { width: max-content; max-width: 100%; margin-top: 4px; padding: 2px 6px; border-radius: 999px; font-size: 9.5px; font-weight: 800; overflow-wrap: anywhere; }
.exam-chip .exam-stock-mini.status-active { color: var(--success); background: rgba(255,255,255,.72); }
.exam-chip .exam-stock-mini.status-missed { color: var(--danger); background: rgba(255,255,255,.72); }
.exam-chip .exam-stock-mini.status-warning { color: #946018; background: rgba(255,255,255,.72); }
/* Türkiye geneli: sıralama veren deneme. Ayrımı yalnız renkle yapmıyoruz — sol kenar kalınlaşır. */
.exam-chip.is-nationwide { border-left-width: 5px; border-left-color: var(--brand-gold); background: var(--surface-soft); }
/* Metin rengi --primary-dark'ta bırakıldı: --primary-alt-dark koyu temada #a24a15'e dönüyor ve
   #2a241d zemininde AA'nın altına düşüyordu. Türkiye geneli ayrımı kenar kalınlığı + zeminle yapılır. */
.exam-chip.is-cancelled { opacity: .62; }
.exam-chip.is-cancelled span { text-decoration: line-through; }
.calendar-entry { position: relative; min-width: 0; }
.exam-day-body > .calendar-entry + .calendar-entry,
.exam-month-cell > .calendar-entry + .calendar-entry { margin-top: 5px; }
.calendar-entry.is-deletable > .exam-chip { padding-right: 35px; }
/* İki araçlı rozet (onay + çöp): metin iki düğmenin altına girmesin. :has desteklenmezse
   35px'lik temel kural kalır — metin düğmeye değebilir ama okunmaz olmaz. */
.calendar-entry:has(.calendar-entry-done) > .exam-chip { padding-right: 64px; }
/* YAPILDI: rozet yeşil yanar (kullanıcı isteği). Stok rengini bilerek ezer — yapılmış denemede
   artık stok değil sonuç önemlidir; stok metni satırda durmaya devam eder. */
.exam-chip.is-done { background: var(--success-soft); border-color: var(--success); border-left-color: var(--success); }

/* ---------------------------------------------------------------------------
   KARAR RENGİ (2026-08-24 kullanıcı: "hepsini yapmıcaz; onlar sadece takvimde
   gözükenler olsun, gri; yapıcaz diye karar verdiklerim mavi olsun, üzerinde
   bir işaret koyarız").

   GRİ = kataloğun bilgisi (takvimde görünür, kurum yapmayabilir)
   MAVİ + ★ = kurum bu denemeyi yapacak.

   SIRA ÖNEMLİ: stok renkleri (is-stock-*) yukarıda tanımlı; karar rengi ONLARDAN
   SONRA yazılır, çünkü kullanıcının sorduğu ilk soru "bunu yapacak mıyız". Stok
   bilgisi rozetin içindeki küçük etikette okunmaya devam eder.
   --------------------------------------------------------------------------- */
/* YILLIK İZLENCE — hafta hedefini öne/sonraya alma (2026-08-24). Sürükleme SÜSLEME:
   satırlar yer değiştirmez, taşınan şey `topics[]` alanının değeridir. */
/* ÇEVRİMİÇİ ROZETİ — katlanabilir liste (2026-08-24 kullanıcı: "kimle çevrimiçi yazsın").
   JS yok: katı CSP altında ve klavyeyle çalışır.

   AÇILAN LİSTE AKIŞA GİRER, MUTLAK KONUMLANMAZ. İlk sürüm listeyi rozetin altına mutlak
   konumluyordu; `.hero { overflow: hidden }` onu KESİYORDU — kullanıcı rozete basıyor, özet
   altı çiziliyor (yani <details> gerçekten açılıyor) ama liste görünmüyordu. Ölçüldü
   (2026-08-24, 1280px): liste 69px, hero'nun alt kenarından 44px'i kırpılıyor; kişi sayısı
   arttıkça listenin TAMAMI kayboluyor. Hero'nun overflow'u süslemeler (aurora, çizgiler,
   parıltı) için gerekli — kaldırılamaz, o yüzden panel akışa alındı.

   AÇIKKEN ROZET KENDİ SATIRINI ALIR (`flex: 1 1 100%`): şeritteki diğer çipler yerinde kalır,
   hero yükselir. Kalıp deponun kendi kalıbı — deneme kartındaki "açılınca form alt satıra
   iner" ile aynı. */
.cevrimici-rozet { display: block; }
.cevrimici-rozet > summary { list-style: none; cursor: pointer; }
.cevrimici-rozet > summary::-webkit-details-marker { display: none; }
/* AÇIKKEN ÖZET YERİNDEN OYNAMAZ, YALNIZ PANEL ALT SATIRA İNER (2026-08-24'te ölçüldü).
   `[open] { flex: 1 1 100% }` denendi: <details> kutusunun tamamı tam satır kapladığı için
   ROZETİN KENDİSİ de 47px aşağı kayıyordu — kullanıcı bastığı düğmenin yerinden oynadığını
   görüyordu. `display: contents` ile <details> kutu olmaktan çıkar; özet ve panel şeridin
   DOĞRUDAN öğeleri olur: özet çiplerin yanında kalır, `flex: 1 1 100%` taşıyan panel kendi
   satırına iner.

   KAPALIYKEN `contents` VERİLMEZ: tarayıcı, kutu olmayan bir <details>'in kapalı içeriğini
   gizlemiyor (aynı tuzak sınıf panosu ızgarasında da yaşanmıştı). Kural yalnız `[open]`
   içindir; kapalıyken <details> düz blok kalır ve panel basılmaz. */
.cevrimici-rozet[open] { display: contents; }
.cevrimici-rozet[open] > .cevrimici-liste { flex: 1 1 100%; }
.cevrimici-rozet[open] > summary { text-decoration: underline; text-underline-offset: 3px; }
/* PANEL HERO'NUN DİLİNİ KONUŞUR (2026-08-24 kullanıcı: "basınca böyle açılıyor, kötü
   görünüyor"). İlk sürüm koyu lacivert başlığın ortasına kocaman BEYAZ bir kart bırakıyordu:
   sayfanın geri kalanına ait bir yüzey, hero'nun içinde yamalı duruyordu. Şimdi çiplerle aynı
   malzeme — yarı saydam beyaz katman + ince kenarlık — ve satırlar TEK SATIRA sığacak kadar
   sıkı. Genişlik içeriğe göre (`fit-content`): tek kişi varken 415px'lik boş kart açılmıyor.

   ZEMİN KOYU, BEYAZ KATMAN DEĞİL: ilk deneme çiplerdeki `rgba(255,255,255,.12)` katmanını
   kullanıyordu; ÖLÇÜLDÜ ve kaldı — hero gradyanının açık ucunda (#315fd0) ikincil yazı 3.14,
   ad 4.49 çıkıyordu (AA eşiği 4.5). Katman koyu lacivert olunca oran gradyanın HER noktasında
   aynı kalıyor: rozet şeridin neresinde durursa dursun okunur. */
.cevrimici-liste { width: fit-content; min-width: min(240px, calc(100vw - 64px));
  max-width: min(420px, calc(100vw - 64px));
  margin-top: 8px; max-height: 300px; overflow-y: auto;
  padding: 9px 11px; border: 1px solid rgba(255,255,255,.26); border-radius: 14px;
  background: rgba(5, 16, 62, .90); color: #fff; text-align: left; }
.cevrimici-baslik { margin: 0 0 7px; color: rgba(255,255,255,.82); font-size: 10.5px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em; }
.cevrimici-liste ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 5px; }
/* SATIR TEK SATIR: ad ve görev yan yana, süre sağda. Eskiden görev alt satıra iniyordu ve
   tek kişilik liste bile üç satır yer kaplıyordu. */
.cevrimici-liste li { display: flex; align-items: baseline; gap: 8px; font-size: 12.5px; line-height: 1.4; }
.cevrimici-ad { font-weight: 700; overflow-wrap: anywhere; }
.cevrimici-gorev { color: rgba(255,255,255,.82); font-size: 11px; }
.cevrimici-gorev::before { content: "·"; margin-right: 6px; color: rgba(255,255,255,.45); }
.cevrimici-sure { margin-left: auto; color: rgba(255,255,255,.82); font-size: 11px; white-space: nowrap; }
.cevrimici-bos { margin: 0; color: rgba(255,255,255,.86); font-size: 12px; }
/* Telefonda ayrı bir kural GEREKMİYOR: panel akışta ve genişliğini kabından alıyor.
   Eski sürümde mutlak/sabit konumlu liste ekranın solundan taşıyordu (ölçülmüştü: -84px);
   o kural akışa geçişle birlikte kaldırıldı — aynı seçiciyi iki yerde tutmak, birini
   düzeltip diğerini unutmaya davetiye çıkarır. */
@media (max-width: 620px) {
  .cevrimici-liste { max-height: 60vh; }
}
/* ÇEVRİMİÇİ ÖĞRENCİLER (2026-09-24): satır iki katlı — üstte ad (360'a bağlantı), sınıf ve son hareket; altta
   ekranda ne yaptığı. Ad bağlantısı panelin beyaz yazısını korur (bağlantı mavisi koyu zeminde okunmaz). */
.cevrimici-liste li.cevrimici-ogrenci { flex-wrap: wrap; row-gap: 1px; }
.cevrimici-liste a.cevrimici-ad { color: #fff; text-decoration: underline; text-decoration-color: rgba(255,255,255,.4);
  text-underline-offset: 3px; }
.cevrimici-liste a.cevrimici-ad:hover, .cevrimici-liste a.cevrimici-ad:focus-visible { text-decoration-color: #fff; }
.cevrimici-etkinlik { flex: 1 1 100%; color: rgba(255,255,255,.9); font-size: 11.5px; }
.cevrimici-etkinlik b { font-weight: 700; }
.cevrimici-etkinlik small { color: rgba(255,255,255,.72); font-size: 11px; white-space: nowrap; }

.pacing-sira-baslik { width: 92px; }
.pacing-sira-hucre { white-space: nowrap; }
.pacing-sira-tutamak { cursor: grab; color: var(--muted); font-size: 15px; letter-spacing: -2px; user-select: none; }
.pacing-sira-dugme { min-width: 24px; height: 24px; padding: 0 4px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--text); font-size: 12px; line-height: 1; cursor: pointer; }
.pacing-sira-dugme:hover { border-color: var(--primary); color: var(--primary-dark); }
.pacing-week-table tr.is-suruklenen { opacity: .5; }
.pacing-week-table tr.is-hedef td { box-shadow: inset 0 2px 0 var(--primary); }
.pacing-week-table tr.is-tasindi .pacing-topic-cell { background: var(--primary-soft); }

.exam-chip.is-planned { border-color: var(--border); border-left-color: var(--muted); background: var(--surface-soft); }
.exam-chip.is-planned b { color: var(--muted); }
.exam-chip.is-planned span { color: var(--muted); font-weight: 600; }
.exam-chip.is-planned:hover { border-color: var(--muted); background: var(--surface); }
.exam-chip.is-approved { border-color: var(--primary); border-left-color: var(--primary); background: var(--primary-soft); }
.exam-chip.is-approved b { color: var(--primary-dark); }
.exam-chip.is-approved span { color: var(--text); }
/* Yapıldı (yeşil) ve iptal, karar renginin ÜSTÜNDE kalır: sonuç, karardan yenidir. */
.exam-chip.is-approved.is-done, .exam-chip.is-planned.is-done { border-color: var(--success); border-left-color: var(--success); background: var(--success-soft); }
.exam-chip-mark { margin-left: 5px; color: var(--primary-dark); font-size: 11px; letter-spacing: 0; }
.exam-chip.is-done .exam-chip-mark { color: var(--success); }
/* Yıldız düğmesi: onay (yeşil) düğmesiyle aynı boy, mavi ailede. */
.calendar-entry-star { border: 1px solid rgba(63,90,168,.26); background: rgba(255,255,255,.86); color: var(--primary); }
.calendar-entry-star:hover { border-color: var(--primary); background: var(--primary); color: var(--on-primary); transform: scale(1.04); }
.calendar-entry-star.is-on { border-color: var(--primary); background: var(--primary); color: var(--on-primary); }
/* Üç düğme (yıldız + onay + çöp) yan yana durunca rozet metni altlarına girmesin. */
.calendar-entry:has(.calendar-entry-star) > .exam-chip { padding-right: 90px; }
/* KOYU TEMADA RENK AYRIMI KAYBOLUYORDU (ölçüldü: iki zemin arasındaki oran 1.07 — yani
   pratikte aynı renk). Açık temanın --surface-soft / --primary-soft ikilisi koyuda birbirine
   çok yakın; ayrımı GÖRÜNÜR kılmak için koyu temada zeminler ayrıca yazılır. Yazı renkleri
   token'dan gelmeye devam eder (sabit hex yalnız ZEMİN için). */
:root[data-theme="dark"] .exam-chip.is-planned { background: #131c31; border-left-color: #5b6580; }
:root[data-theme="dark"] .exam-chip.is-planned span,
:root[data-theme="dark"] .exam-chip.is-planned b { color: #93a0bd; }
:root[data-theme="dark"] .exam-chip.is-approved { background: #21386e; border-left-color: #7ea1ff; }
:root[data-theme="dark"] .exam-chip.is-approved b { color: #b9c9ff; }
:root[data-theme="dark"] .exam-chip-mark { color: #b9c9ff; }
/* Deneme rozeti araç köşesi: yeşil onay ÇÖPÜN SOLUNDA, yan yana (kullanıcı isteği 2026-08-15). */
.calendar-entry-tools { position: absolute; top: 5px; right: 5px; z-index: 3; display: flex; gap: 4px; }
.calendar-entry-tools form { margin: 0; }
.calendar-entry-tools button { display: grid; place-items: center; width: 25px; height: 25px; padding: 0; border-radius: 7px; cursor: pointer; transition: background .15s ease, color .15s ease, transform .15s ease; }
.calendar-entry-tools .nav-icon { width: 14px; height: 14px; }
.calendar-entry-remove { border: 1px solid rgba(183,47,47,.24); background: rgba(255,255,255,.86); color: var(--danger); }
.calendar-entry-remove:hover { border-color: var(--danger); background: var(--danger); color: #fff; transform: scale(1.04); }
.calendar-entry-done { border: 1px solid rgba(20,114,83,.28); background: rgba(255,255,255,.86); color: var(--success); }
.calendar-entry-done:hover { border-color: var(--success); background: var(--success); color: #fff; transform: scale(1.04); }
.calendar-entry-done.is-on { border-color: var(--success); background: var(--success); color: #fff; }
.calendar-entry-delete { position: absolute; top: 5px; right: 5px; z-index: 3; margin: 0; }
.calendar-entry-delete button { display: grid; place-items: center; width: 25px; height: 25px; padding: 0; border: 1px solid rgba(183,47,47,.24); border-radius: 7px; background: rgba(255,255,255,.86); color: var(--danger); cursor: pointer; transition: background .15s ease, color .15s ease, transform .15s ease; }
.calendar-entry-delete button:hover { border-color: var(--danger); background: var(--danger); color: #fff; transform: scale(1.04); }
.calendar-entry-delete .nav-icon { width: 14px; height: 14px; }
.appointment-chip { border-left-color: var(--primary-alt); }
/* Psikolog seansı çipi (2026-08-25): kaynağı randevu değil psikoloji kaydı — kesikli kenar
   "buradan yönetilmez, okunur" der; renk şube tonundan gelir, ayrı renk iki ekseni yarıştırırdı. */
.appointment-chip-psikoloji { border-style: dashed; }
.exam-chip .appointment-chip-main { display: flex; align-items: baseline; justify-content: space-between; gap: 7px; min-width: 0; }
.appointment-chip-main > span { min-width: 0; overflow-wrap: anywhere; }
.appointment-chip-main time { flex: none; color: var(--primary-dark); font-size: 10.5px; font-weight: 850; font-variant-numeric: tabular-nums; white-space: nowrap; }
.appointment-chip.is-completed { border-left-color: var(--success); background: var(--success-soft); }
.appointment-chip.is-cancelled { opacity: .58; }
.branch-tone-all { --branch-accent: #243f86; }
.branch-tone-1 { --branch-accent: #315fd0; }
.branch-tone-2 { --branch-accent: #c96810; }
.branch-tone-3 { --branch-accent: #7047b8; }
.branch-tone-4 { --branch-accent: #087d78; }
.branch-tone-5 { --branch-accent: #b62d68; }
.branch-tone-6 { --branch-accent: #318155; }
/* Koyu temada aksanlar AÇIK tona döner: koyu zeminde koyu aksan 2.13-3.68 ölçülmüştü.
   Etiket rengi de zemini de --branch-accent'ten türediği için tek satır yeter. */
:root[data-theme="dark"] .branch-tone-all { --branch-accent: #9fb2e8; }
:root[data-theme="dark"] .branch-tone-1 { --branch-accent: #8fb0ff; }
:root[data-theme="dark"] .branch-tone-2 { --branch-accent: #e8a25c; }
:root[data-theme="dark"] .branch-tone-3 { --branch-accent: #b895ec; }
:root[data-theme="dark"] .branch-tone-4 { --branch-accent: #5cc4bf; }
:root[data-theme="dark"] .branch-tone-5 { --branch-accent: #ef86b4; }
:root[data-theme="dark"] .branch-tone-6 { --branch-accent: #7cc39a; }
.appointment-chip[class*="branch-tone-"] { border-left-color: var(--branch-accent); }
.exam-chip .appointment-chip-meta { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 7px; margin-top: 3px; }
.exam-chip .appointment-chip-meta > span:first-child { min-width: 0; color: var(--muted); font-weight: 500; overflow-wrap: anywhere; }
.exam-chip .appointment-participants { margin-top: 3px; color: var(--text); font-size: 10.5px; font-weight: 700; line-height: 1.4; overflow-wrap: anywhere; }
.appointment-branch-tag { display: inline-flex !important; align-items: center; width: max-content; max-width: 100%; padding: 2px 7px; border: 1px solid color-mix(in srgb, var(--branch-accent) 28%, var(--border)); border-radius: 999px; background: color-mix(in srgb, var(--branch-accent) 11%, var(--surface)); color: var(--branch-accent) !important; font-size: 9.5px !important; font-weight: 800 !important; line-height: 1.35; overflow-wrap: anywhere; }
.appointment-branch-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; margin: -5px 0 14px; }
.appointment-branch-legend::before { content: "Şubeler"; margin-right: 2px; color: var(--muted); font-size: 10px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; }

/* Randevu haftası: aylık deneme takvimi gibi gün hücreleri. Boş hücrelerde saat satırı yoktur. */
.appointment-week-card { padding: 0; overflow: visible; }
.appointment-week-intro { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 15px 18px; border-bottom: 1px solid var(--border); background: var(--surface); }
.appointment-week-intro > div { display: grid; gap: 3px; min-width: 0; }
.appointment-week-intro strong { font-size: 14px; }
.appointment-week-intro span:not(.status) { color: var(--muted); font-size: 12px; line-height: 1.45; }
.appointment-week-calendar { padding: 14px; }
.exam-month-cell.appointment-week-cell { min-height: 180px; }
.appointment-week-day-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding-bottom: 7px; border-bottom: 1px solid var(--border); }
.appointment-week-day-head > a,
.appointment-week-day-head > span { display: inline-flex; align-items: baseline; gap: 6px; min-width: 0; color: var(--text); text-decoration: none; }
.appointment-week-day-head strong { font-size: 18px; }
.appointment-week-day-head > a span,
.appointment-week-day-head > span:not(.appointment-day-actions) span { color: var(--muted); font-size: 10px; font-weight: 750; letter-spacing: .04em; text-transform: uppercase; }
.appointment-week-day-head > b { flex: none; min-width: 22px; padding: 2px 6px; border-radius: 999px; background: var(--primary); color: var(--on-primary); font-size: 10px; text-align: center; }
.appointment-day-list { display: grid; gap: 6px; }
.appointment-month-card { overflow: visible; }
.appointment-month-cell-head { display: flex; align-items: center; justify-content: space-between; gap: 7px; }
.appointment-day-actions { display: inline-flex; align-items: center; gap: 6px; flex: none; }
.appointment-day-actions > b { min-width: 22px; padding: 2px 6px; border-radius: 999px; background: var(--primary); color: var(--on-primary); font-size: 10px; text-align: center; }
.exam-month-cell:has(.calendar-quick-add[open]),
.exam-week-day:has(.calendar-quick-add[open]) { position: relative; z-index: 25; }
.appointment-quick-add { position: relative; flex: none; }
.appointment-quick-add > summary { display: grid; place-items: center; width: 23px; height: 23px; border: 1px solid var(--primary); border-radius: 50%; background: var(--primary); color: var(--on-primary); font-size: 17px; font-weight: 750; line-height: 1; cursor: pointer; list-style: none; box-shadow: 0 2px 7px rgba(34,87,196,.25); transition: transform .15s ease, background .15s ease; }
.appointment-quick-add > summary::-webkit-details-marker { display: none; }
.appointment-quick-add > summary:hover { background: var(--primary-dark); transform: scale(1.06); }
.appointment-quick-add[open] > summary { background: var(--primary-dark); transform: rotate(45deg); }
.appointment-quick-menu { position: absolute; top: calc(100% + 7px); left: 0; z-index: 40; width: min(286px, calc(100vw - 32px)); padding: 13px; border: 1px solid var(--border); border-radius: 13px; background: var(--surface); box-shadow: 0 16px 38px rgba(13,33,82,.2); color: var(--text); text-align: left; }
.exam-month-cell:nth-child(7n) .appointment-quick-menu,
.exam-month-cell:nth-child(7n + 6) .appointment-quick-menu { right: 0; left: auto; }
.appointment-quick-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 9px; }
.appointment-quick-heading strong { font-size: 13px; }
.appointment-quick-heading span { color: var(--muted); font-size: 10.5px; font-weight: 650; }
.appointment-quick-form { display: grid; gap: 8px; }
.appointment-quick-form label { display: grid; gap: 3px; min-width: 0; }
.appointment-quick-form label > span { color: var(--muted); font-size: 9.5px; font-weight: 800; letter-spacing: .035em; text-transform: uppercase; }
.appointment-quick-form :is(input[type="text"], input[type="time"], select) { width: 100%; min-width: 0; height: 34px; padding: 5px 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); font: inherit; font-size: 12px; }
.appointment-quick-row { display: grid; grid-template-columns: minmax(0,.72fr) minmax(0,1.28fr); gap: 7px; }
.appointment-quick-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; padding-top: 2px; }
.appointment-quick-actions .button { min-width: 0; padding-inline: 7px; text-align: center; }
.exam-quick-menu { width: min(340px, calc(100vw - 32px)); }
.exam-quick-grades { min-width: 0; margin: 0; padding: 8px; border: 1px solid var(--border); border-radius: 9px; }
.exam-quick-grades legend { padding-inline: 4px; color: var(--muted); font-size: 9.5px; font-weight: 800; letter-spacing: .035em; text-transform: uppercase; }
.exam-quick-grades > div { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 5px; }
.exam-quick-grades label { display: flex; align-items: center; gap: 4px; min-width: 0; font-size: 10px; }
.exam-quick-grades input { flex: none; width: 14px; height: 14px; margin: 0; }
.exam-quick-grades span { min-width: 0; overflow-wrap: anywhere; }

/* --- Haftalık: 7 sütun --- */
.exam-week { display: grid; grid-template-columns: repeat(7, minmax(150px, 1fr)); gap: 10px; }
.exam-week-day { display: flex; flex-direction: column; min-height: 190px; padding: 10px; border: 1px solid var(--border); border-radius: 13px; background: var(--surface-soft); }
.exam-week-day.is-monday { background: color-mix(in srgb, var(--primary) 10%, var(--surface)); }
.exam-week-day.is-today { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-soft); }
.exam-day-head { display: flex; align-items: baseline; gap: 7px; margin-bottom: 9px; padding-bottom: 8px; border-bottom: 1px solid var(--border); }
.exam-day-head strong { font-size: 19px; font-variant-numeric: tabular-nums; }
.exam-day-head span { color: var(--muted); font-size: 11px; font-weight: 750; letter-spacing: .05em; text-transform: uppercase; }
.exam-day-count { margin-left: auto; padding: 1px 7px; border-radius: 999px; background: var(--primary); color: var(--on-primary); font-size: 11px; font-weight: 800; }
.exam-day-head > .appointment-day-actions { margin-left: auto; }
.exam-day-head > .appointment-day-actions .exam-day-count { margin-left: 0; }
.exam-day-body { flex: 1; }
.exam-day-empty { margin: 0; color: var(--muted); font-size: 12px; }
.exam-day-add { display: block; margin-top: 9px; padding: 6px; border: 1px dashed var(--border); border-radius: 9px; color: var(--muted); font-size: 11.5px; font-weight: 750; text-align: center; text-decoration: none; }
.exam-day-add:hover { border-color: var(--primary); color: var(--primary-dark); background: var(--primary-soft); }

/* --- Aylık: 7 sütunlu ızgara --- */
.exam-month { display: grid; grid-template-columns: repeat(7, minmax(118px, 1fr)); gap: 6px; }
.exam-month-head { padding: 7px 4px; color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .07em; text-align: center; text-transform: uppercase; }
.exam-month-head abbr { text-decoration: none; }
.exam-month-cell { min-height: 104px; padding: 7px; border: 1px solid var(--border); border-radius: 11px; background: var(--surface); }
.exam-month-cell.is-monday { background: color-mix(in srgb, var(--primary) 10%, var(--surface)); }
.exam-month-cell.is-outside { opacity: .45; }
.exam-month-cell.is-today { border-color: var(--primary); box-shadow: 0 0 0 2px var(--primary-soft); }
.exam-cell-head { margin-bottom: 6px; font-size: 13px; font-weight: 800; font-variant-numeric: tabular-nums; }
.exam-cell-head a { color: var(--text); text-decoration: none; }
.exam-cell-head a:hover { color: var(--primary-dark); text-decoration: underline; }

/* --- Yıllık: 12 ay kartı --- */
.exam-year { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }
.exam-year-month { padding: 16px; }
.exam-year-month.is-empty { opacity: .72; }
.exam-year-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 11px; padding-bottom: 9px; border-bottom: 1px solid var(--border); }
.exam-year-head h2 { margin: 0; font-size: 16px; }
.exam-year-head h2 a { color: var(--brand-navy); text-decoration: none; }
.exam-year-head h2 a:hover { text-decoration: underline; }
.exam-year-head b { padding: 2px 9px; border-radius: 999px; background: var(--surface-soft); color: var(--muted); font-size: 12px; font-weight: 800; }
.exam-year-list { display: grid; gap: 7px; margin: 0; padding: 0; list-style: none; }
.exam-year-list li { display: grid; grid-template-columns: 30px minmax(0, 1fr); align-items: start; gap: 9px; }
.exam-year-date { padding-top: 6px; color: var(--muted); font-size: 13px; font-weight: 800; font-variant-numeric: tabular-nums; text-align: right; }

@media (max-width: 900px) {
  /* Aylık ızgara telefonda 7 sütun olarak sıkışmaz: gün başlıkları gizlenir, hücreler listeye döner. */
  .exam-month { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .exam-month-head { display: none; }
  .exam-month-cell.is-outside { display: none; }
  .exam-week { grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); }
  .appointment-week-intro { align-items: flex-start; flex-direction: column; }
  .exam-month-cell.appointment-week-cell { min-height: 150px; }
  .exam-month-cell:nth-child(odd) .appointment-quick-menu { right: 0; left: auto; }
  .exam-month-cell:nth-child(even) .appointment-quick-menu { right: auto; left: 0; }
  .exam-count-overview { grid-template-columns: 120px minmax(0, 1fr); }
  .exam-count-groups { grid-template-columns: minmax(0, 1fr); gap: 12px; }
}
@media (max-width: 560px) {
  .people-directory-tabs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; }
  .people-directory-tabs a { min-width: 0; padding-inline: 7px; }
  .shared-directory-note { align-items: flex-start; flex-direction: column; }
  .exam-month { grid-template-columns: minmax(0, 1fr); }
  .exam-cal-bar { flex-direction: column; align-items: stretch; }
  .exam-view-tabs { justify-content: space-between; }
  .exam-view-tabs a { flex: 1; text-align: center; }
  .exam-cal-controls { align-items: stretch; flex-direction: column; }
  .exam-month-picker { display: grid; grid-template-columns: minmax(0, 1fr) auto; }
  .exam-month-field { width: auto; }
  .exam-cal-nav { justify-content: space-between; }
  .exam-cal-nav .button { flex: 1; }
  .appointment-week-calendar { padding: 10px; }
  .exam-month-cell.appointment-week-cell { min-height: 122px; }
  .appointment-quick-menu { position: fixed; top: 50%; right: auto !important; bottom: auto; left: 50% !important; width: min(320px, calc(100vw - 28px)); transform: translate(-50%, -50%); }
  .exam-count-overview { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .exam-count-total { grid-template-columns: auto 1fr; align-items: baseline; gap: 4px 10px; }
  .exam-count-total strong { justify-self: end; }
  .exam-count-total small { grid-column: 1 / -1; }
}

/* ==========================================================================
   Toplu görünüm tablosu — genel-deneme-tablo.php'de kullanılıp TANIMSIZ kalmıştı
   (sessiz no-op: sınıf yazılmış ama hiçbir kural yok). Şimdi tanımlanıyor.
   ========================================================================== */
.exam-grid { font-variant-numeric: tabular-nums; }
/* Ay ayracı: 40+ satırlık tabloda "hangi aydayım" görsel olarak kayboluyordu. */
.exam-grid-month th { padding: 11px 10px 7px; border-bottom: 2px solid var(--border); background: var(--surface-soft); color: var(--primary-dark); font-size: 12px; font-weight: 850; letter-spacing: .05em; text-transform: uppercase; }
.exam-grid tfoot th, .exam-grid tfoot td { border-top: 2px solid var(--border); font-weight: 800; }
.exam-stock-cell { min-width: 145px; }
.exam-stock-cell .status { margin-bottom: 2px; }
.exam-stock-summary { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; margin: 0 0 16px; }
.exam-stock-summary > div { min-width: 0; padding: 12px 14px; border: 1px solid var(--border); border-radius: 13px; background: var(--surface); box-shadow: var(--shadow); }
.exam-stock-summary span, .exam-stock-summary strong { display: block; }
.exam-stock-summary span { color: var(--muted); font-size: 10.5px; font-weight: 750; }
.exam-stock-summary strong { margin-top: 3px; color: var(--text); font-size: 18px; line-height: 1.2; overflow-wrap: anywhere; }
.exam-stock-summary .is-available { border-color: color-mix(in srgb, var(--success) 30%, var(--border)); background: var(--success-soft); }
.exam-stock-summary .is-available strong { color: var(--success); }
.exam-stock-summary .is-missing { border-color: color-mix(in srgb, var(--danger) 30%, var(--border)); background: var(--danger-soft); }
.exam-stock-summary .is-missing strong { color: var(--danger); }
.exam-stock-form-section { padding: 15px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface-soft); }
.exam-stock-form-section .compact-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 12px; }
.exam-stock-form-section .compact-heading h3 { margin: 0; font-size: 15px; }
.exam-stock-form-section .compact-heading p { margin: 3px 0 0; color: var(--muted); font-size: 11.5px; }
.exam-stock-form-result { display: grid; align-content: center; min-height: 74px; padding: 10px 13px; border: 1px dashed var(--border); border-radius: 11px; background: var(--surface); }
.exam-stock-form-result span, .exam-stock-form-result small { color: var(--muted); font-size: 10.5px; }
.exam-stock-form-result strong { color: var(--primary-dark); font-size: 22px; font-variant-numeric: tabular-nums; }
/* İptal edilen satır: soluk + üstü çizili ad. Ayrım yalnız renge bırakılmıyor. */
.is-muted-row { opacity: .6; }
.is-muted-row td:first-child, .is-muted-row td:nth-child(2) a { text-decoration: line-through; }

@media (max-width: 800px) {
  .exam-stock-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 480px) {
  .exam-stock-summary { grid-template-columns: minmax(0, 1fr); }
  .exam-stock-form-section .compact-heading { flex-direction: column; }
}

/* ==========================================================================
   MÜŞTERİYE YÖNELİK SEZON PROGRAMI (genel-deneme-programi.php)
   .report-* ailesinin üstüne oturur; o ailenin sabit hex disiplinini izler
   (belge her temada BEYAZ kâğıt gibi görünmeli — koyu temada da).
   YENİ SAYFA KURALI YOK: bu dosyadaki üç seçicisiz sayfa kuralı (982, 1541, 2614) birleşiyor
   ve en sondaki kazanıyor; buraya bir dördüncüsü yazılsaydı altı yazdırma ekranını birden
   değiştirirdi. Sayım kontrolü yapan grep'i yanıltmamak için kuralın adı burada yazılmıyor.
   ========================================================================== */
.exam-plan-intro { margin: 0 0 18px; color: #4a5a61; font-size: 12px; line-height: 1.6; }
.exam-plan-chips { display: flex; flex-wrap: wrap; gap: 7px; margin: 0 0 16px; }
.exam-plan-chip { display: inline-flex; align-items: center; gap: 5px; padding: 4px 11px; border: 1px solid #cbd7da; border-radius: 999px; background: #f4f8f9; color: #33474e; font-size: 10.5px; font-weight: 750; }
/* Sabit hex: kâğıt her temada beyaz, token okunursa koyu temada 1.91:1'e düşüyordu (ölçüldü). */
.exam-plan-chip b { color: #000b49; font-weight: 850; }
/* Ay başlığı satırı: kendisinden sonra sayfa kırılmasın, yoksa başlık sayfa altında yetim kalır. */
.exam-plan-month th { padding: 10px 8px 6px; border-bottom: 2px solid #cbd7da; background: #eef4f5; color: #23555f; font-size: 10px; font-weight: 850; letter-spacing: .07em; text-transform: uppercase; break-after: avoid; page-break-after: avoid; }
/* #6a787f, tablonun #eef4f5 zeminli hücrelerinde 4.10:1 idi (22 düğüm). #5b6672 beyazda 5.85:1. */
.exam-plan-day { color: #5b6672; font-size: 9.5px; font-weight: 700; }
.exam-plan-flag { display: inline-block; padding: 1px 7px; border-radius: 999px; background: #23555f; color: #fff; font-size: 8.5px; font-weight: 850; letter-spacing: .04em; text-transform: uppercase; }
/* Elle doldurulacak satır (paket bedeli, kurum telefonu). DÜĞME DEĞİL düz metin:
   @media print .button { display: none !important } (app.css:1542) düğmeleri gizlerdi. */
.exam-plan-fill { display: flex; flex-wrap: wrap; align-items: baseline; gap: 10px; margin: 18px 0 0; padding: 12px 14px; border: 1px dashed #b9c9cd; border-radius: 10px; }
.exam-plan-fill span { color: #33474e; font-size: 11px; font-weight: 800; }
.exam-plan-fill i { flex: 1 1 160px; min-width: 120px; border-bottom: 1px dotted #8fa5ab; }
/* Kutucuklu tür satırı (görüşme formu): <b> öğeleri kurala yakalanmayıp belge gövdesinin
   yazısını miras alıyordu — 11px'lik etiketlerin yanında kutucuklar iri duruyordu. */
.exam-plan-checks { gap: 6px 14px; }
.exam-plan-checks b { color: #33474e; font-size: 11px; font-weight: 700; white-space: nowrap; }
.exam-plan-note { margin: 14px 0 0; color: #5b6672; font-size: 10px; line-height: 1.55; }

/* Arka arkaya basılan belge kopyaları (boş görüşme formu, ?adet=2..5): her kopya yeni sayfada.
   .qp-optic-sheet kalıbının aynısı — iki özellik birden yazılıyor çünkü eski tarayıcılar
   yalnız page-break-before'u tanıyor. */
.report-document.page-break-before { break-before: page; page-break-before: always; }

/* Konu seçicide ders başına toplu seçim (plan-templates.php, plan-template.php). */
.plan-builder-actions { display: flex; flex-wrap: wrap; gap: 8px; padding: 10px 12px 0; }

/* Teklif belgesinin 2. sayfası: Özel Hususlar (MEB). .report-* ailesinin sabit hex disiplini. */
.special-notes { margin: 0; padding-left: 22px; }
.special-notes li { margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid #e6ecee; break-inside: avoid; page-break-inside: avoid; }
.special-notes li:last-child { border-bottom: 0; }
.special-notes strong { display: block; margin-bottom: 3px; color: #23555f; font-size: 11.5px; }
.special-notes span { display: block; color: #33474e; font-size: 11px; line-height: 1.6; }

/* ==========================================================================
   HATIRLATICILAR (Genel Koordinasyon)
   Renkler token'dan; sabit hex yok, koyu temada da okunur.
   ========================================================================== */
.reminder-due-card { border-left: 4px solid var(--primary); }
.reminder-list { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
.reminder-item { display: flex; flex-wrap: wrap; align-items: flex-start; justify-content: space-between; gap: 12px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.reminder-item.is-due { border-color: var(--primary); background: var(--primary-soft); }
.reminder-item.is-done { opacity: .62; }
.reminder-item.is-done .reminder-body strong { text-decoration: line-through; }
.reminder-body { flex: 1 1 240px; min-width: 0; }
.reminder-body strong { display: block; font-size: 14px; overflow-wrap: anywhere; }
.reminder-body span { display: block; margin-top: 3px; color: var(--muted); font-size: 12.5px; line-height: 1.5; overflow-wrap: anywhere; }
.reminder-body small { display: block; margin-top: 6px; color: var(--muted); font-size: 11.5px; }
.reminder-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.reminder-snooze { display: inline-flex; align-items: center; gap: 5px; }
.reminder-snooze select { height: 30px; padding: 0 7px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); font-size: 12px; }

@media (max-width: 560px) {
  .manual-topic-row { grid-template-columns: minmax(0, 1fr) 34px; align-items: center; }
  .manual-topic-row .field { grid-column: 1; }
  .manual-topic-row .manual-topic-remove { grid-column: 2; grid-row: 1 / span 2; }
  .reminder-item { flex-direction: column; }
  .reminder-actions { width: 100%; }
  .reminder-actions .button { flex: 1 1 auto; text-align: center; }
}

/* Rapordaki ders bazli degerlendirme. .report-* ailesinin sabit hex disiplini. */
.report-subject-comment { margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid #e6ecee; break-inside: avoid; page-break-inside: avoid; }
.report-subject-comment:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: 0; }
.report-subject-comment h3 { margin: 0 0 4px; color: #23555f; font-size: 11.5px; letter-spacing: .02em; }
.report-subject-comment p { margin: 0; color: #33474e; font-size: 11px; line-height: 1.6; }
.report-manual-topics { margin-bottom: 14px; break-inside: avoid; page-break-inside: avoid; }
.report-manual-topics h3 { display: flex; align-items: center; gap: 7px; margin: 0 0 7px; color: #23555f; font-size: 11.5px; }
.report-manual-topics h3 span { padding: 2px 6px; border-radius: 999px; background: #fff3d8; color: #8a5a0a; font-size: 8.5px; letter-spacing: .04em; text-transform: uppercase; }
/* Olusturma ekranindaki ders kutulari */
.report-subject-comments { display: grid; gap: 10px; }
.report-subject-comments legend { color: var(--muted); font-size: 12px; font-weight: 800; }

/* ==========================================================================
   ÜST ÇUBUK — ORTA GENİŞLİKLERDE SIĞDIRMA
   Bölüm değiştirici eklendikten sonra üst çubuk 1280px'de 99px taşıyordu (ölçüldü).
   Parçaların toplamı 1358px, kap 1217px. Çözüm: en az bilgi taşıyan öğeleri sırayla
   sadeleştirmek — hiçbiri KALDIRILMIYOR, yalnız metinleri düşüyor.
   Eşikler ölçümle seçildi: 1400px altında hesap adı, 1150px altında bölüm etiketi düşünce
   açık kapanıyor.
   ========================================================================== */
@media (min-width: 721px) and (max-width: 1400px) {
  /* Hesap adı + rol: avatar zaten kim olduğunu söylüyor, tıklanınca hesap sayfası açılıyor. */
  .panel-page .account-copy { display: none; }
  .panel-page .topbar-inner { gap: 12px; }
  .panel-page .topbar-search input { width: 118px; }
}
@media (min-width: 721px) and (max-width: 1150px) {
  /* Bölüm değiştirici simge+kısa etikete iner; hangi bölümde olunduğu simgeden okunur. */
  /* Marka alt satırı da düşer (720px altında zaten düşüyordu). */
  .panel-page .brand small { display: none; }
}

/* Sezon programı — LİSTE düzeni (veliye elden verilen sade program).
   .report-* ailesinin sabit hex disiplini: belge her temada beyaz kâğıt gibi görünmeli. */
.exam-plan-group { margin-bottom: 16px; }
.exam-plan-group-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin: 0 0 8px; padding-bottom: 5px; border-bottom: 2px solid #cbd7da; break-after: avoid; page-break-after: avoid; }
.exam-plan-group-head span { color: #23555f; font-size: 12px; font-weight: 850; letter-spacing: .06em; text-transform: uppercase; }
.exam-plan-group-head b { color: #5b6672; font-size: 10px; font-weight: 700; }
.exam-plan-items { margin: 0; padding: 0; list-style: none; }
.exam-plan-items li { display: flex; align-items: flex-start; gap: 11px; padding: 7px 0; border-bottom: 1px solid #eef3f4; break-inside: avoid; page-break-inside: avoid; }
.exam-plan-items li:last-child { border-bottom: 0; }
/* Tarih rozeti sabit genişlikte: gün numaraları alt alta hizalanınca göz tarih tarayabiliyor. */
.exam-plan-date { flex: none; width: 38px; padding: 3px 0; border-radius: 8px; background: #eef4f5; text-align: center; }
.exam-plan-date b { display: block; color: #23555f; font-size: 14px; font-weight: 850; line-height: 1.1; font-variant-numeric: tabular-nums; }
/* Rozetin #eef4f5 zemininde #6a787f 4.10:1 ölçüldü (liste düzeninde her deneme için bir düğüm). */
.exam-plan-date i { display: block; color: #5b6672; font-size: 8.5px; font-style: normal; text-transform: uppercase; letter-spacing: .04em; }
.exam-plan-main { flex: 1 1 auto; min-width: 0; }
.exam-plan-main strong { display: block; color: #22313a; font-size: 11.5px; line-height: 1.35; overflow-wrap: anywhere; }
.exam-plan-main small { display: block; margin-top: 2px; color: #5b6672; font-size: 10px; line-height: 1.45; }

/* Rozet dizisi (hedef sınıflar gibi çoklu onay kutusu). .choice-inline TEK kutu içindir ve
   display:flex'i .field'dan alır; rozet dizisine verildiğinde kutular alt alta diziliyordu —
   ölçüldü: 9 rozet 684px yer kaplıyor, formun %46'sı. Burada display AÇIKÇA veriliyor. */
.choice-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.choice-chips .checkbox-chip { flex: 0 1 auto; }

/* Öğretmen yıllık izlenceleri: haftalık, yoğun ama taranabilir çalışma tablosu. */
.pacing-metrics { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.pacing-filter { grid-template-columns: minmax(140px, .8fr) minmax(150px, .9fr) minmax(120px, .7fr) minmax(150px, .9fr) minmax(180px, 1.1fr) auto auto; align-items: end; }
.pacing-list-table td { vertical-align: top; }
.pacing-list-table small { display: block; margin-top: 4px; color: var(--muted); line-height: 1.4; overflow-wrap: anywhere; }
.pacing-target { display: block; max-width: 420px; font-weight: 800; line-height: 1.45; overflow-wrap: anywhere; }
.pacing-target-current { color: var(--primary-dark); }
.pacing-list-table tr.has-current-target td:first-child { box-shadow: inset 3px 0 0 var(--primary); }
.pacing-card-heading { display: flex; align-items: center; justify-content: space-between; gap: 16px; }
.pacing-card-heading > div { min-width: 0; }
.pacing-form-card { max-width: 980px; }
.pacing-plan-note { margin-bottom: 16px; padding: 16px 20px; border-left: 4px solid var(--primary); }
.pacing-plan-note p { margin: 6px 0 0; color: var(--muted); line-height: 1.6; overflow-wrap: anywhere; }
.pacing-metric-topic { font-size: clamp(16px, 1.7vw, 24px) !important; line-height: 1.25 !important; overflow-wrap: anywhere; }
.pacing-grid-card { overflow: visible; }
.pacing-table-wrap { max-height: min(68vh, 760px); overflow: auto; overscroll-behavior: contain; }
.pacing-week-table { min-width: 900px; }
.pacing-week-table thead { position: sticky; top: 0; z-index: 3; }
.pacing-week-table thead th { background: var(--surface-soft); box-shadow: 0 1px 0 var(--border); }
.pacing-week-table td { padding: 8px 10px; vertical-align: middle; }
.pacing-week-table tr.is-current-week td { background: var(--primary-soft); }
.pacing-week-table tr.is-current-week td:first-child { box-shadow: inset 4px 0 0 var(--primary); }
.pacing-week-number { width: 82px; text-align: center; }
.pacing-week-number > span { display: inline-grid; width: 32px; height: 32px; place-items: center; border-radius: 10px; background: var(--surface-soft); color: var(--text); font-weight: 850; font-variant-numeric: tabular-nums; }
.pacing-week-number small { display: block; margin-top: 3px; color: var(--primary-dark); font-size: 10px; font-weight: 800; }
.pacing-week-date { width: 210px; white-space: nowrap; }
.pacing-topic-cell { min-width: 360px; }
.pacing-note-cell { min-width: 230px; }
.pacing-topic-cell input, .pacing-note-cell input { width: 100%; min-height: 40px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface); color: var(--text); padding: 8px 10px; }
.pacing-topic-cell input:focus, .pacing-note-cell input:focus { border-color: var(--primary); outline: 3px solid color-mix(in srgb, var(--primary) 18%, transparent); }
.pacing-sticky-save { position: sticky; bottom: 10px; z-index: 4; display: flex; align-items: center; justify-content: space-between; gap: 16px; width: min(620px, calc(100% - 24px)); margin: 12px auto; padding: 10px 12px 10px 18px; border: 1px solid var(--border); border-radius: 14px; background: color-mix(in srgb, var(--surface) 94%, transparent); box-shadow: var(--shadow); backdrop-filter: blur(10px); }
.pacing-danger-zone { margin-top: 16px; }
/* GÖREV TAKİBİ — yönetim düzenleme hücresi. Satır içi style YASAK (CSP style-src-attr 'none'). */
.gorev-duzenle-hucre { width: 260px; }
.gorev-duzenle-form { display: grid; gap: 4px; }
.gorev-duzenle-form select, .gorev-duzenle-form input { width: 100%; min-height: 30px; padding: 4px 7px;
  border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); font-size: 12px; }
.gorev-sil-form { margin-top: 5px; }
.gorev-sil-dugme { color: var(--danger); }
/* AKADEMİK TAKVİM SÜTUNU (izlence korelasyonu). Renk anahtarı akademik takvimle AYNI
   (--danger tatil, --violet MEB, --primary deneme, --success seminer, --warning dönem):
   iki ekranda farklı renk kullanmak, korelasyonun kendisini okunmaz yapardı. */
.pacing-heading-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.pacing-cal-cell { width: 230px; }
.pacing-cal-cip { display: block; margin-bottom: 3px; padding: 2px 8px; border-left: 3px solid var(--border);
  border-radius: 5px; background: var(--surface-soft); color: var(--text);
  font-size: 11px; font-weight: 650; line-height: 1.35; overflow-wrap: anywhere; }
.pacing-cal-cip.is-tatil { border-left-color: var(--danger); }
.pacing-cal-cip.is-meb { border-left-color: var(--violet); }
.pacing-cal-cip.is-deneme { border-left-color: var(--primary); }
.pacing-cal-cip.is-seminer { border-left-color: var(--success); }
.pacing-cal-cip.is-donem { border-left-color: var(--warning, #b7791f); }
.pacing-cal-kapali { display: block; margin-top: 2px; color: var(--danger); font-size: 10.5px; font-weight: 800; }
/* Kurum tatiline denk gelen hafta: sol kenardan işaretlenir. Renk TEK BAŞINA anlam taşımaz —
   aynı satırda "N iş günü kurum tatili" yazısı da var (WCAG 1.4.1). */
.pacing-week-table tr.is-kapali-hafta td:first-child { box-shadow: inset 4px 0 0 var(--danger); }
.pacing-week-table tr.is-current-week.is-kapali-hafta td:first-child { box-shadow: inset 4px 0 0 var(--danger), inset 8px 0 0 var(--primary); }
.teacher-pacing-summary { margin-bottom: 18px; }
.teacher-pacing-summary-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 10px; }
.teacher-pacing-summary-item { display: flex; flex-direction: column; gap: 5px; min-width: 0; padding: 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); color: var(--text); text-decoration: none; }
.teacher-pacing-summary-item:hover { border-color: var(--primary); transform: translateY(-1px); }
.teacher-pacing-summary-item span, .teacher-pacing-summary-item small { color: var(--muted); font-size: 12px; }
.teacher-pacing-summary-item strong { line-height: 1.45; overflow-wrap: anywhere; }

@media (max-width: 1100px) {
  .pacing-filter { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  .pacing-metrics { grid-template-columns: 1fr; }
  .pacing-filter { grid-template-columns: 1fr; }
  .pacing-filter .button { width: 100%; text-align: center; }
  .pacing-card-heading { align-items: stretch; flex-direction: column; }
  .pacing-card-heading .button { width: 100%; text-align: center; }
  .pacing-table-wrap { max-height: 72vh; }
  .pacing-week-table { min-width: 720px; }
  .pacing-week-date { width: 170px; white-space: normal; }
  .pacing-cal-cell { width: 170px; }
  .pacing-topic-cell { min-width: 290px; }
  .pacing-note-cell { min-width: 180px; }
  .pacing-sticky-save { bottom: 6px; width: calc(100% - 12px); padding-left: 12px; }
  .pacing-sticky-save span { font-size: 12px; }
}

/* ==========================================================================
   PSİKOLOJİK DANIŞMANLIK · seans, MOXO ve tek sayfalık paylaşılabilir özet
   ========================================================================== */
.psychology-filter-form { display: grid; grid-template-columns: minmax(190px, 1.25fr) repeat(3, minmax(130px, .7fr)) repeat(2, minmax(140px, .75fr)) auto auto; }
.psychology-filter-form .field, .psychology-filter-form .search-field { min-width: 0 !important; }
.psychology-table td { vertical-align: top; }
.psychology-table td small { display: block; margin-top: 4px; color: var(--muted); line-height: 1.4; overflow-wrap: anywhere; }
.psychology-privacy-note { margin-bottom: 16px; }
.psychology-form-layout { grid-template-columns: minmax(0, 1.45fr) minmax(270px, .55fr); }
.psychology-note-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
.psychology-summary-fields { display: grid; gap: 14px; margin: 4px 0; padding: 18px; border: 1px solid var(--border); border-radius: 15px; background: var(--surface-soft); }
.psychology-summary-fields legend { padding: 0 8px; color: var(--primary-dark); font-size: 14px; font-weight: 850; }
.psychology-summary-fields .field-hint { margin: -2px 0 0; }
.psychology-form-aside { position: sticky; top: 82px; }
.plain-check-list { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
.plain-check-list li { position: relative; padding: 11px 12px 11px 36px; border: 1px solid var(--border); border-radius: 11px; background: var(--surface-soft); color: var(--muted); line-height: 1.5; }
.plain-check-list li::before { content: "✓"; position: absolute; top: 11px; left: 13px; color: var(--primary); font-weight: 900; }
.psychology-list-report { width: min(285mm, 100%); }
.psychology-print-table { font-size: 9px; }
.psychology-print-table td, .psychology-print-table th { padding: 7px 6px; }
.psychology-summary-document { min-height: 277mm; padding-top: 12mm; padding-bottom: 10mm; }
.psychology-summary-student { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.psychology-summary-meta .detail-list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.psychology-summary-copy { break-inside: avoid; page-break-inside: avoid; }
.psychology-summary-copy p { min-height: 54px; margin: 0; color: #33474e; font-size: 11px; line-height: 1.65; white-space: normal; overflow-wrap: anywhere; }
.psychology-disclaimer { margin-top: 15px; padding: 10px 12px; border-left: 3px solid #315fd0; background: #eef3ff; color: #43526a; font-size: 9px; line-height: 1.55; break-inside: avoid; page-break-inside: avoid; }

@media (max-width: 1250px) {
  .psychology-filter-form { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .psychology-filter-form .search-field { grid-column: span 2; }
}
@media (max-width: 900px) {
  .psychology-form-layout { grid-template-columns: 1fr; }
  .psychology-form-aside { position: static; }
  .psychology-filter-form { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .psychology-filter-form .search-field { grid-column: 1 / -1; }
}
@media (max-width: 620px) {
  .psychology-filter-form, .psychology-note-grid { grid-template-columns: 1fr; }
  .psychology-filter-form .search-field { grid-column: auto; }
  .psychology-filter-form .button { width: 100%; text-align: center; }
  .psychology-summary-fields { padding: 14px; }
  .psychology-summary-student, .psychology-summary-meta .detail-list { grid-template-columns: 1fr; }
}

/* Sistem/Güncelleme özetinde üç kart tablet genişliğine rahatça sığar. Genel iki sütun
   kuralı üçüncü kartı tek başına yarım satırda bırakıyordu. Bu kural responsive temel
   kurallardan sonra yer almalı ki 860/900px iki sütun kuralını bilinçli olarak geçersiz kılsın. */
@media (min-width: 721px) and (max-width: 900px) {
  .system-metric-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
  .system-metric-grid .metric-card { min-width: 0; padding: 17px; }
}

/* Koç görüşmeleri: uyarılar yoğun metni okunabilir kartlarda tutar; tablo açıklaması taşmaz. */
.check-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); gap: 10px; }
.check-row { display: flex; align-items: flex-start; gap: 10px; min-width: 0; }
.check-row > input { flex: 0 0 auto; margin-top: 3px; }
/* flex: 1 SART (2026-09-01'de olculdu): overflow-wrap:anywhere metnin min-icerik
   genisligini 0'a indirir; buyumeyen span 0px'e buzulup adlari HARF HARF dikey
   akitiyordu (koc formu koordinator listesi — spanW olcumu [0,0,0]). */
.check-row > span { display: grid; min-width: 0; gap: 3px; flex: 1; }
.login-hatirla { margin: -4px 0 2px; }
.login-hatirla small { color: var(--muted); font-size: 12px; }
.check-row strong, .check-row small { display: block; min-width: 0; overflow-wrap: anywhere; }
.coach-alert-panel { border-color: rgba(230, 160, 20, .28); background: linear-gradient(145deg, #fffdf8, #fff); }
.coach-alert-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 12px; }
/* --radius-md tanımsızdı → border-radius başlangıç değerine (0) düşüyor, kart KARE köşeliydi. */
/* --radius-md tanımsızdı → border-radius başlangıç değerine (0) düşüyor, kart KARE köşeliydi.
   Zemin de SABİT #fff idi: koyu temada metin açık tona döndüğü için beyaz üstünde beyaz kalıyordu
   (ölçüldü: 1.13 / 1.98 / 1.20 — pratikte görünmez). Yüzey token'ı iki temada da doğru. */
.coach-alert-card { min-width: 0; padding: 17px; border: 1px solid rgba(225, 155, 18, .22); border-radius: var(--radius); background: var(--surface); }
.coach-alert-card > div:first-child { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.coach-alert-card h3 { margin: 13px 0 7px; font-size: 15px; }
.coach-alert-card p { margin: 0 0 14px; color: var(--muted); font-size: 13px; line-height: 1.55; overflow-wrap: anywhere; }
.table-long-text { min-width: 0; max-width: 520px; white-space: normal; overflow-wrap: anywhere; line-height: 1.5; }
.coach-session-table small { display: block; max-width: 360px; white-space: normal; overflow-wrap: anywhere; }
.coach-session-report .report-table td { vertical-align: top; white-space: normal; overflow-wrap: anywhere; }
.coach-session-print-table th:nth-child(4) { width: 38%; }

@media (max-width: 720px) {
  .page-heading h1 { max-width: 100%; font-size: clamp(22px, 6.5vw, 27px); overflow-wrap: anywhere; }
  .coach-session-metrics { grid-template-columns: 1fr; }
  .coach-alert-grid { grid-template-columns: 1fr; }
  .coach-alert-card .button { min-height: 44px; }
  .table-long-text { max-width: none; }
}
@media print {
  .psychology-list-report { width: 100%; }
  .psychology-summary-document { min-height: 0; }
  .psychology-summary-copy, .psychology-disclaimer { break-inside: avoid; page-break-inside: avoid; }
}

/* --- MAARİF MODELİ REHBERİ (coach-maarif.php, 2026-08-17) ---------------------------------
   Slayt hissi veren bilgi kartları. Renkler token'dan; koyu kapak kartı bilinçli SABİT lacivert
   (kurum sunumlarıyla aynı marka dili) ve üstündeki metinler sabit açık tonlar — iki temada da
   kontrast korunur (EAF0FB/0B1F4E ≈ 13:1, C9A227/0B1F4E ≈ 7:1). */
.maarif-slayt { margin-bottom: 18px; }
.maarif-etiket { margin: 0 0 4px; color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; }
.maarif-slayt h2 { margin: 0 0 12px; font-size: 22px; }
.maarif-koyu { background: #0b1f4e; border-color: #0b1f4e; }
.maarif-koyu .maarif-etiket { color: #c9a227; }
.maarif-koyu h2, .maarif-koyu p { color: #eaf0fb; }
.maarif-koyu strong { color: #ffffff; }
.maarif-takvim { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 10px; margin-bottom: 12px; }
.maarif-yil { display: grid; gap: 4px; padding: 12px 14px; border-radius: 10px; background: var(--bg); }
.maarif-yil strong { color: var(--text); }
.maarif-yil span { color: var(--muted); font-size: 13px; }
.maarif-yil-aktif { background: #0b1f4e; }
.maarif-yil-aktif strong { color: #c9a227; }
.maarif-yil-aktif span { color: #eaf0fb; }
.maarif-izgara { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 10px; }
.maarif-kart { display: grid; gap: 6px; align-content: start; padding: 12px 14px; border-radius: 10px; background: var(--bg); }
.maarif-kart strong { color: var(--text); }
.maarif-kart span { color: var(--muted); font-size: 13px; line-height: 1.45; }
.maarif-kart ul { margin: 0; padding-left: 18px; color: var(--text); font-size: 13.5px; display: grid; gap: 5px; }
.maarif-kart-koyu { background: #0b1f4e; }
.maarif-kart-koyu strong { color: #c9a227; }
.maarif-kart-koyu ul { color: #eaf0fb; }
.maarif-iki-sutun { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 10px; margin-bottom: 12px; }
.maarif-not { margin: 0; padding: 10px 14px; border-radius: 10px; background: var(--warning-soft, var(--bg)); color: var(--text); font-size: 13.5px; line-height: 1.5; }
.maarif-pratik { margin: 0; padding-left: 20px; display: grid; gap: 10px; }
.maarif-pratik li strong { display: block; color: var(--text); }
.maarif-pratik li span { color: var(--muted); font-size: 13.5px; }
.maarif-kaynak { margin: 0 0 12px; padding-left: 20px; display: grid; gap: 8px; color: var(--text); font-size: 14px; }

/* Özel Ders öğrenci listesindeki tür rozetleri (2026-08-17): ad hücresinin altında kompakt satır. */
.enrollment-tags-satir { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }

/* Yedek koçluk anahtarı (coach-program.php, 2026-08-17): süzgeç şeridindeki eğreti onay
   kutusunun yerine kendi şeridinde duran, açık/kapalı durumu renkle belli olan tek satır. */
.yedek-anahtar {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
  align-items: center;
  margin-top: 12px;
  padding: 11px 14px;
  border: 1px solid var(--border);
  border-radius: 12px;
  background: var(--bg);
}
.yedek-anahtar.is-acik { border-color: var(--warning); background: var(--warning-soft); }
.yedek-anahtar-metin { display: grid; gap: 2px; flex: 1 1 320px; min-width: 0; }
.yedek-anahtar-metin strong { color: var(--text); font-size: 13.5px; }
.yedek-anahtar-metin small { color: var(--muted); font-size: 12px; line-height: 1.45; }
.yedek-anahtar-sayi {
  flex: 0 0 auto;
  padding: 4px 10px;
  border-radius: 999px;
  background: var(--surface);
  color: var(--muted);
  font-size: 11.5px;
  font-weight: 700;
}
.yedek-anahtar.is-acik .yedek-anahtar-sayi { color: var(--text); }

/* Görüşme formunda seçilen öğrencinin veli bilgisi (bilgi amaçlı, JS ile basılır). */
.gorusme-veli-bilgi {
  margin: 0 0 4px;
  padding: 8px 12px;
  border-radius: 10px;
  background: var(--bg);
  color: var(--muted);
  font-size: 12.5px;
}
/* Form iki kart kaldı: kartlar daha geniş nefes alsın. */
.gorusme-izgara-iki { grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); }

/* Haftalık çalışma tablosunun ÜST ŞERİDİ (coach-program.php, 2026-08-17): başlık solda,
   "öğrenciye verildi" rozeti/düğmesi sağda — tek satır. Şeridi şişiren hafta kopyalama formu
   altındaki katlanır bloğa indi (eskiden .filter-form ile alt hizalanıyor, onay kutusu ile
   düğme ayrı satırlara düşüyordu). */
/* SAĞ KÜME TEK BLOK, HİZALI (2026-08-20, kullanıcı: "bunu ortalar mısın güzel gözüksün").
   Eski hâlde üç çocuk `space-between` ile birbirinden ayrılıyordu ve üçünün yüksekliği
   farklıydı (ölçüldü: 39 / 32 / 35 px) — sekmeler ile rozet/düğme aynı hizada durmuyor,
   şerit tırtıklı görünüyordu. Artık: not solda esner, dönem sekmeleri ve teslim şeridi
   `margin-left: auto` ile SAĞDA TEK KÜME olur, hepsi 34 px yüksekliğe hizalanır. */
.cprog-week-ust { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin-bottom: 10px; }
.cprog-week-ust .cprog-week-note { display: grid; gap: 2px; flex: 1 1 280px; min-width: 0; margin: 0; }
.cprog-week-ust .cprog-week-note span { line-height: 1.45; }
.cprog-week-ust .cprog-donem { margin-left: auto; }
/* Öğrenci önerisi (2026-09-06, ops.ogrenci_isaret): çipte küçük rozet + tek tık onay. */
.cprog-ogrenci-oneri { display: inline-flex; align-items: center; padding: 1px 6px; border-radius: 999px; background: var(--primary-soft); color: var(--primary); font-size: 10.5px; font-weight: 800; white-space: nowrap; }
.ogrenci-oneri-form { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 6px; flex-basis: 100%; }
.ogrenci-oneri-form .ogrenci-oneri-soru { display: inline-flex; align-items: center; gap: 4px; font-size: 12px; color: var(--muted); }
.ogrenci-oneri-form .ogrenci-oneri-soru input { width: 72px; min-height: 32px; }
.ogrenci-oneri-mevcut { flex-basis: 100%; color: var(--muted); font-size: 11.5px; }

/* RANDEVU IZGARASI — Excel gibi (2026-09-06 kullanıcı: "randevu tablosu da çalışma tablosu
   gibi seçilebilme/silme/taşıma olsun, solda saat yazsın ders programı gibi, daha şık").
   week-grid tabanı yeniden kullanılır (aynı çizgi/saat sütunu dili); hücreler bırakma hedefi. */
.randevu-grid { min-width: 860px; }
.randevu-grid thead th { position: sticky; top: 0; z-index: 3; }
.randevu-grid thead th.is-today { color: var(--primary); }
.randevu-grid .week-grid-time { position: sticky; left: 0; z-index: 2; }
.randevu-grid .week-grid-time strong { font-size: 12.5px; }
.randevu-grid .week-grid-time small { font-size: 10px; }
/* ÖZGÜLLÜK ÇAKIŞMASI (2026-09-06 kullanıcı: "randevu tablosu hoş durmuyor"; tarayıcıda
   ölçüldü): `.week-grid td { text-align: center }` (0,1,1) bu kuralın `text-align: left`
   satırını (0,1,0) EZİYORDU — kartın flex satırları (başlık+saat, personel+şube) kendi
   hizasını kurduğu için sorun görünmüyor, ama düz metin olan katılımcı satırı ("Veli: …")
   hücrenin ortasına kaçıyordu. Hizayı `td` ile niteleyip aynı özgüllüğe çıkarıyoruz. */
.randevu-grid-cell { position: relative; height: 46px; padding: 3px 3px 2px !important; vertical-align: top; }
.week-grid td.randevu-grid-cell { text-align: left; }
.randevu-grid-cell.is-today { background: color-mix(in srgb, var(--primary) 5%, transparent); }
.randevu-grid-cell.is-drop-target { box-shadow: inset 0 0 0 2px var(--primary); background: var(--primary-soft); }
.randevu-grid-cell.is-drop-target.is-drop-kopya { box-shadow: inset 0 0 0 2px var(--success); background: var(--success-soft); }
.randevu-grid-cell .calendar-entry { margin: 0 0 3px; }
.randevu-grid-cell .exam-chip { padding: 4px 7px; font-size: 11.5px; line-height: 1.3; }
.randevu-grid-cell .appointment-chip-meta { display: flex; flex-wrap: wrap; gap: 4px 8px; }
.randevu-grid-saatsiz .randevu-grid-cell { background: var(--surface-soft); }
/* Boş hücrenin "+"sı: fareyle gelince belirir; dokunmatikte hep hafif görünür (hover yok). */
.randevu-grid-ekle { position: absolute; right: 3px; top: 3px; display: grid; place-items: center; width: 20px; height: 20px; border-radius: 50%; border: 1px dashed var(--border); color: var(--muted); font-size: 15px; line-height: 1; text-decoration: none; opacity: 0; transition: opacity .12s ease; }
.randevu-grid-cell:hover > .randevu-grid-ekle, .randevu-grid-ekle:focus-visible { opacity: 1; }
@media (hover: none) { .randevu-grid-ekle { opacity: .35; } }
.randevu-grid-ekle:hover { border-style: solid; border-color: var(--primary); color: var(--primary); background: var(--primary-soft); }
/* Seçim vurgusu (randevu-secim.js) — çalışma programındaki seçimle aynı dil. */
.is-randevu-secili > .exam-chip { outline: 2px solid var(--primary); outline-offset: 1px; background: var(--primary-soft); }
/* Paylaşılan hızlı menü kabı: tıklanan hücreye taşınır; menü hücreden aşağı/sağa açılır. */
[data-randevu-hizli-kap] { position: absolute; left: 2px; bottom: 2px; z-index: 30; }
[data-randevu-hizli-kap] > .appointment-quick-add > summary { width: 20px; height: 20px; font-size: 14px; }
.randevu-grid-cell:has([data-randevu-hizli-kap] details[open]) { z-index: 35; }
.randevu-grid td:nth-last-child(-n+2) .appointment-quick-menu { right: 0; left: auto; }
@media (max-width: 760px) { .randevu-grid { min-width: 760px; } }

/* Geri al çubuğu (2026-09-06): toplu silme sonrası tek tıkla geri açma. */
.cprog-geri-al { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0 0 12px; padding: 8px 12px; border: 1px dashed var(--border); border-radius: 12px; background: var(--surface); }
.cprog-geri-al span { color: var(--muted); font-size: 13px; }

/* İşaretsiz geçmiş görev şeridi (2026-09-06): amber uyarı tonu, tablo üstünde tek satır. */
.cprog-isaretsiz-serit { margin: 0 0 12px; padding: 8px 12px; border: 1px solid var(--warning, #b45309); border-radius: 12px; background: var(--warning-soft, rgba(180, 83, 9, .08)); color: var(--text); font-size: 13.5px; }
.cprog-isaretsiz-serit a { font-weight: 700; }

/* Gün yükü özeti (2026-09-06): hücre başlığında günün toplam soru/dk'sı — soluk, küçük. */
.cprog-gun-yuk { display: block; color: var(--muted); font-size: 10.5px; font-weight: 650; line-height: 1.25; white-space: nowrap; }
.appointment-month-cell-head .cprog-gun-yuk { display: inline-block; margin-left: 6px; }

/* Denetimler aynı yükseklikte: sekme ve düğme tek çizgide otursun. */
.cprog-week-ust .cprog-donem { min-height: 34px; display: inline-flex; align-items: center; }
.cprog-week-ust .cprog-donem a { display: inline-flex; align-items: center; }
/* Dar ekranda sağ küme kendi satırında ortalanır — sola yapışık yarım şerit çirkin durur. */
@media (max-width: 720px) {
  .cprog-week-ust .cprog-donem { margin-left: 0; flex: 1 1 100%; justify-content: center; }
}
/* ARALIKLI TEKRAR ÖNERİLERİ (2026-08-18): konu + "N gündür verilmedi" + tek tık ekleme.
   14-29 gün amber, 30+ kırmızı ton — bekleyen iş hissi versin ama bağırmasın. */
.cprog-tekrar-liste { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.cprog-tekrar-satir { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; padding: 9px 12px; border: 1px solid var(--border); border-radius: 11px; background: var(--surface-soft, #f7f9fc); }
.cprog-tekrar-konu { flex: 1 1 260px; min-width: 0; font-size: 13px; line-height: 1.4; }
.cprog-tekrar-sure { flex: 0 0 auto; padding: 3px 9px; border-radius: 999px; background: var(--warning-soft); color: var(--warning); font-size: 11.5px; font-weight: 700; white-space: nowrap; }
.cprog-tekrar-sure.is-gec { background: var(--danger-soft); color: var(--danger); }
.cprog-tekrar-form { flex: 0 0 auto; margin: 0; }
/* Aralık ayarı (7/14/30): başlık satırının sağında etiket + seçici + kaydet tek hizada. */
.cprog-tekrar-ayar { display: flex; align-items: flex-end; gap: 8px; margin: 0; }
.cprog-tekrar-ayar .field { flex: 0 0 auto; gap: 4px; }
.cprog-tekrar-ayar select { min-height: 34px; width: auto; padding: 5px 28px 5px 10px; font-size: 13px; }
.cprog-tekrar-ayar .button { min-height: 34px; }
.cprog-tekrar-bos { margin: 0; color: var(--muted); font-size: 13px; }
@media (max-width: 700px) { .cprog-tekrar-satir { align-items: flex-start; } .cprog-tekrar-form { flex-basis: 100%; } }

/* Dönem sekmeleri (14/7): küçük ikili anahtar, teslim rozetinin solunda. */
.cprog-donem { display: inline-flex; flex: 0 0 auto; border: 1px solid var(--border); border-radius: 9px; overflow: hidden; }
.cprog-donem a { padding: 6px 11px; color: var(--muted); font-size: 12px; font-weight: 700; text-decoration: none; }
.cprog-donem a + a { border-left: 1px solid var(--border); }
.cprog-donem a.is-acik { background: var(--primary-soft); color: var(--primary); }
.cprog-donem a:hover:not(.is-acik) { color: var(--text); }
/* Hafta kopyalama şeridi: kapalıyken tek satır, açılınca alanlar yan yana. */
.cprog-kopya { margin: 0 0 12px; padding: 8px 12px; border: 1px dashed var(--border); border-radius: 12px; }
.cprog-kopya > summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; cursor: pointer; list-style: none; }
.cprog-kopya > summary::-webkit-details-marker { display: none; }
.cprog-kopya > summary::before { content: '▸'; color: var(--muted); font-size: 12px; transition: transform .15s ease; }
.cprog-kopya[open] > summary::before { transform: rotate(90deg); }
.cprog-kopya > summary strong { font-size: 13px; }
.cprog-kopya > summary span { color: var(--muted); font-size: 12px; }
.cprog-kopya-form { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; margin-top: 10px; }
/* .field dikey ızgaradır; kompakt şeritte etiket ile alan YAN YANA dursun. */
.cprog-kopya-alan { flex: 0 0 auto; flex-direction: row; align-items: center; gap: 8px; }
.cprog-kopya-alan span { white-space: nowrap; }
.cprog-kopya-alan input { width: auto; min-height: 38px; padding: 7px 10px; }
/* Onay kutusu TEK SATIR kalır, etiketi kırılmaz — şikayet tam buradaydı. */
.cprog-kopya-onay { flex: 0 0 auto; align-items: center; gap: 8px; }
.cprog-kopya-onay > input { margin-top: 0; }
.cprog-kopya-onay > span { display: block; white-space: nowrap; color: var(--text); font-size: 13px; }
.cprog-kopya-form > button { flex: 0 0 auto; }
.cprog-kopya-not { flex: 1 1 100%; margin: 0; color: var(--muted); font-size: 12px; line-height: 1.5; }
@media (max-width: 700px) {
  .cprog-kopya-alan, .cprog-kopya-onay, .cprog-kopya-form > button { flex: 1 1 100%; }
  .cprog-kopya-alan input { width: 100%; }
  .cprog-kopya-onay > span { white-space: normal; }
  /* SEÇENEK METNİ SELECT'İ BÜYÜTMESİN (2026-08-21'de ölçüldü): `select` genişliğini EN UZUN
     seçeneğine göre alır; `min-width: 240px` taban veriyor ama tavan yoktu, uzun bir seçenek
     metni alanı 343px'e çıkarıp 375px'lik telefonda kabından 42px taşırıyordu. `min-width: 0`
     240px tabanını yener, `max-width: 100%` tavanı kaba bağlar. Kalıcı kural: dar ekranda bu
     şeritteki hiçbir alan metniyle büyüyemez. */
  .cprog-sablon .cprog-kopya-alan { flex-wrap: wrap; }
  .cprog-sablon .cprog-kopya-alan select { flex: 1 1 100%; min-width: 0; max-width: 100%; }
}

/* Takip edilen dersler: 9-10 onay kutusu yan yana durmasın diye açılır liste + çip
   (2026-08-17). Kutu ızgarası JS'siz yolda görünür kalır ve durumu O taşır; aşağıdaki blok
   yalnız betik çalışınca gösterilir. */
.cov-ders-secici { display: grid; gap: 10px; }
.cov-ders-secici[hidden] { display: none; }
/* .choice-chips display:flex olduğu için hidden özniteliği tek başına gizlemiyordu. */
.choice-chips[hidden] { display: none; }
.cov-cip-liste { display: flex; flex-wrap: wrap; gap: 6px; }
.cov-cip { display: inline-flex; align-items: center; gap: 4px; padding: 3px 4px 3px 11px; border: 1px solid var(--border); border-radius: 999px; background: var(--bg); }
/* Ders çipi: simge + ad (2026-08-23). Simge metinle aynı satırda, biraz büyük; koyu temada
   emoji kendi rengini taşır, token gerekmez. Çip zemini surface: kart zemininden ayrılsın. */
.cov-cip { padding-left: 8px; gap: 6px; background: var(--surface); box-shadow: 0 1px 2px rgba(22,33,38,.05); }
.cov-cip-simge { font-style: normal; font-size: 15px; line-height: 1; }
.cov-cip b { color: var(--text); font-size: 12.5px; font-weight: 650; }
/* Seçim bloğu: çipler üstte nefesli, ekleme satırı altta tek çizgi; kaydet düğmeleri sağda. */
.cov-ders-secici { display: grid; gap: 12px; padding-top: 8px; }
.cov-ders-ekle { display: flex; align-items: end; gap: 8px; flex-wrap: wrap; }
.cov-ders-ekle .field { margin: 0; min-width: 260px; }
.cov-ders-secim .heading-actions.form-section { justify-content: flex-start; margin-top: 4px; }
.cov-cip-sil { display: inline-flex; align-items: center; justify-content: center; width: 21px; height: 21px; padding: 0; border: 0; border-radius: 50%; background: var(--surface); color: var(--text); font-size: 15px; line-height: 1; cursor: pointer; transition: background .15s, color .15s; }
.cov-cip-sil:hover, .cov-cip-sil:focus-visible { background: var(--danger-soft); color: var(--danger); }
.cov-cip-bos { margin: 0; color: var(--muted); font-size: 12.5px; }
.cov-cip-bos[hidden] { display: none; }
.cov-ders-ekle { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; }
.cov-ders-ekle .field { flex: 0 1 260px; min-width: 0; gap: 4px; }
.cov-ders-ekle > button { flex: 0 0 auto; }
.cov-ders-ekle select:disabled, .cov-ders-ekle button:disabled { opacity: .65; cursor: not-allowed; }
/* SIĞDIRMA (2026-08-17, kullanıcı: "şu boyutları ayarla"): standart form girdisi 46px —
   panel içi küçük bir araç için kaba. Select/düğme 34px'e iner, stack-form(15) +
   form-section(20) boşlukları 10px'e; kaydet düğmeleri sağda "havada" durmasın diye
   çiplerle aynı sol hizaya alınır. */
.cov-ders-secim > form { gap: 10px; margin-top: 10px; }
.cov-ders-secim .form-section { margin-top: 0; }
.cov-ders-ekle .field select { min-height: 34px; padding: 5px 30px 5px 10px; border-radius: 8px; font-size: 13px; }
.cov-ders-ekle > button { min-height: 34px; }
.cov-ders-secim .heading-actions { justify-content: flex-start; }

/* ===== Pasta / halka grafik (2026-08-18) ===============================================
   Dilim renkleri TOKEN'dan gelir; SVG stroke özniteliği CSP'ye takılmaz ama renk sınıftan
   verilir ki koyu tema ezebilsin (CLAUDE.md renk sözleşmesi: sabit hex yazmayın).
   print-color-adjust: SVG arkasındaki kart zemini yazdırmada kaybolmasın diye. */
.pie-block { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; print-color-adjust: exact; -webkit-print-color-adjust: exact; }
.pie-chart { flex: none; transform: rotate(-90deg); }
.pie-track { stroke: var(--border); }
.pie-seg-1 { stroke: var(--primary); }
.pie-seg-2 { stroke: var(--success); }
.pie-seg-3 { stroke: var(--warning); }
.pie-seg-4 { stroke: var(--danger); }
.pie-seg-5 { stroke: var(--violet); }
.pie-seg-6 { stroke: var(--blue); }
.pie-seg-7 { stroke: var(--primary-alt); }
.pie-seg-8 { stroke: var(--muted); }
.pie-bos { margin: 0; color: var(--muted); font-size: 13px; }
.pie-legend { list-style: none; margin: 0; padding: 0; display: grid; gap: 5px; min-width: 190px; flex: 1 1 190px; }
.pie-legend li { display: flex; align-items: center; gap: 8px; font-size: 13px; }
.pie-legend b { margin-left: auto; font-variant-numeric: tabular-nums; }
.pie-legend small { color: var(--muted); min-width: 38px; text-align: right; font-variant-numeric: tabular-nums; }
.pie-key { width: 12px; height: 12px; border-radius: 3px; flex: none; }
/* Lejant kutusu SVG değil kutudur: rengi stroke yerine background alır. */
.pie-key.pie-seg-1 { background: var(--primary); }
.pie-key.pie-seg-2 { background: var(--success); }
.pie-key.pie-seg-3 { background: var(--warning); }
.pie-key.pie-seg-4 { background: var(--danger); }
.pie-key.pie-seg-5 { background: var(--violet); }
.pie-key.pie-seg-6 { background: var(--blue); }
.pie-key.pie-seg-7 { background: var(--primary-alt); }
.pie-key.pie-seg-8 { background: var(--muted); }

/* ===== Bilimsel yayın özetleri paneli (2026-08-18) ===================================== */
.yayin-paneli { margin-top: 14px; }
.yayin-paneli > summary { cursor: pointer; padding: 11px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); font-weight: 700; font-size: 14px; }
.yayin-paneli[open] > summary { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.yayin-govde { border: 1px solid var(--border); border-top: none; border-radius: 0 0 12px 12px; background: var(--surface); padding: 12px 14px; max-height: 460px; overflow-y: auto; }
.yayin-etiket { margin: 12px 0 6px; font-size: 11px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.yayin-etiket:first-child { margin-top: 0; }
.yayin-kayit { border-top: 1px solid var(--border); padding: 8px 0; }
.yayin-kayit > summary { cursor: pointer; font-size: 13.5px; line-height: 1.45; }
.yayin-kunye { display: block; color: var(--muted); font-size: 11.5px; margin-top: 2px; }
.yayin-ozet { margin: 8px 0 0; font-size: 13px; line-height: 1.6; }
.yayin-uygulama { margin: 7px 0 0; padding: 8px 11px; border-left: 3px solid var(--primary); border-radius: 0 8px 8px 0; background: var(--surface-soft); font-size: 12.5px; line-height: 1.55; }
.yayin-not { margin: 10px 0 0; color: var(--muted); font-size: 11.5px; line-height: 1.5; }

/* ===== Seminer programı (2026-08-18) =================================================== */

/* ===== Sınıf hedefleri yönetim ekranı (2026-08-18) ===================================== */
.hedef-tablo input[type="number"] { width: 92px; }
.hedef-tablo td { vertical-align: middle; }
.hedef-onizleme { color: var(--muted); font-size: 12px; }

/* ===== Öğretmen görev değerlendirmesi (2026-08-18) =====================================
   "Kontrol Edildi" tek tıkla da çalışır; ayrıntı açılırsa sonuç + not aynı formla gider. */
.gorev-degerlendir { display: inline-block; }
.gorev-degerlendir > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; }
.gorev-degerlendir > summary::-webkit-details-marker { display: none; }
.gorev-degerlendir[open] > summary { margin-bottom: 8px; }
.gorev-degerlendir-form { display: grid; gap: 8px; min-width: 240px; padding: 11px; border: 1px solid var(--border); border-radius: 11px; background: var(--surface-soft); }
.gorev-degerlendir-form .field { margin: 0; }
.gorev-degerlendir-form .field span { font-size: 11px; }
.gorev-degerlendir-form textarea { min-height: 46px; }
.gorev-sonuc { display: block; margin-top: 5px; line-height: 1.5; }
.gorev-sonuc b { display: inline-block; margin-right: 6px; padding: 1px 8px; border-radius: 999px; font-size: 10.5px; font-weight: 800; }
.gorev-sonuc-iyi { background: var(--success-soft); color: var(--success); }
.gorev-sonuc-orta { background: var(--primary-soft); color: var(--primary-dark); }
.gorev-sonuc-zayif { background: var(--danger-soft); color: var(--danger); }

/* Seminer düzeni TEK SÜTUN (2026-08-19, kullanıcı: "ekleme üstte yataya yayılsın, program
   onun altında olsun"). İki sütunlu kural bilerek kaldırıldı; onun yerine seminer KARTLARI
   ızgaraya yayılıyor — yatay alan boşa gitmiyor, takvim de tam genişlikte kalıyor. */

/* Koç görev listesi: haftalık tablo görünümü (2026-08-19, kullanıcı: "burası haftalık tablo
   halinde de gözükebilsin"). Gün sütunları, hücrede öğrenci+ders çipleri. */
.gorev-hafta { width: 100%; table-layout: fixed; }
.gorev-hafta th { font-size: 11px; letter-spacing: .04em; }
.gorev-hafta td { vertical-align: top; padding: 7px 6px; }
.gorev-hafta-cip { margin-bottom: 5px; padding: 5px 7px; border-radius: 8px; background: var(--surface-soft); font-size: 11.5px; line-height: 1.4; }
.gorev-hafta-cip b { display: block; font-weight: 700; }
.gorev-hafta-cip small { color: var(--muted); font-size: 10.5px; }
.gorev-hafta-bos { color: var(--muted); font-size: 12px; }
.gorev-gorunum-sekme { display: inline-flex; gap: 6px; }

/* ===== Grup dersi taktikleri (2026-08-19) ==============================================
   Kategoriler <details> ile açılır; sayfa uzamasın, öğretmen aradığı başlığı açsın. */
.taktik-paneli .card-heading h2 small { margin-left: 8px; color: var(--muted); font-size: 12px; font-weight: 700; }
.taktik-grup { border-top: 1px solid var(--border); }
.taktik-grup:first-of-type { border-top: none; }
.taktik-grup > summary { cursor: pointer; padding: 11px 2px; font-size: 14px; font-weight: 700; }
.taktik-grup > summary small { color: var(--muted); font-weight: 700; }
.taktik-liste { list-style: none; margin: 0 0 10px; padding: 0; display: grid; gap: 10px; }
.taktik-kayit { padding: 11px 13px; border: 1px solid var(--border); border-left: 3px solid var(--primary); border-radius: 0 11px 11px 0; background: var(--surface-soft); }
.taktik-kayit > strong { display: block; font-size: 13.5px; }
.taktik-govde { margin: 5px 0 0; font-size: 13px; line-height: 1.55; }
.taktik-neden { margin: 6px 0 0; color: var(--muted); font-size: 12px; line-height: 1.5; }
.taktik-neden span { font-weight: 800; color: var(--text); }
.taktik-neden em { font-style: normal; }

/* ===== Otomatik değerlendirme metni paneli (2026-08-19) ================================
   Koç görüşme formundaki "1 hak" paneli ve haftalık çıktıdaki geri bildirim kutusu.
   Renkler token'dan; sabit hex yazılmıyor (renk sözleşmesi, CLAUDE.md §6). */
.ai-panel { margin-top: 18px; border: 1px solid var(--border); }
.ai-panel-baslik { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; }
.ai-panel-baslik > div { flex: 1 1 auto; }
.ai-rozet { flex: 0 0 auto; padding: 5px 11px; border-radius: 999px; background: var(--primary-soft); color: var(--primary-dark); font-size: 11px; font-weight: 800; letter-spacing: .03em; white-space: nowrap; }
.ai-bos { padding: 16px 14px; border: 1px dashed var(--border); border-radius: 12px; background: var(--surface-soft); color: var(--muted); font-size: 13px; }
.ai-eylem { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.ai-ipucu { margin: 0; color: var(--muted); font-size: 12.5px; }

/* THINKING gösterisi: bekleme kullanıcı isteğiyle konuldu, o yüzden boş değil — hangi adımda
   olunduğu yazılıyor. Nokta animasyonu ve ilerleme çubuğu buradan; JS yalnız width sürüyor. */
.ai-dusunuyor { padding: 18px 16px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface-soft); }
.ai-dusunuyor-basi { display: flex; align-items: center; gap: 6px; color: var(--primary); font-size: 12px; letter-spacing: .16em; }
.ai-dusunuyor-basi strong { margin-left: 4px; font-weight: 800; }
.ai-nokta { width: 7px; height: 7px; border-radius: 50%; background: var(--primary); animation: ai-zipla 1.05s ease-in-out infinite; }
.ai-nokta:nth-child(2) { animation-delay: .18s; }
.ai-nokta:nth-child(3) { animation-delay: .36s; }
@keyframes ai-zipla { 0%, 70%, 100% { transform: translateY(0); opacity: .45; } 35% { transform: translateY(-5px); opacity: 1; } }
.ai-adim { margin: 12px 0 10px; font-size: 13.5px; color: var(--text); min-height: 1.4em; }
.ai-cubuk { height: 5px; border-radius: 999px; background: var(--border); overflow: hidden; }
.ai-cubuk > span { display: block; width: 4%; height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--primary), var(--primary-alt)); transition: width .45s ease; }
@media (prefers-reduced-motion: reduce) {
  .ai-nokta { animation: none; opacity: 1; }
  .ai-cubuk > span { transition: none; }
  .ai-dusunuyor-basi strong { animation: none; opacity: 1; }
}

/* DÜŞÜNÜYOR BAŞLIĞI YANIP SÖNER (2026-08-21 kullanıcı isteği: "loading gibi thinking olabilir
   yanıp sönen"). Noktalar zaten zıplıyordu; başlık da nefes alınca bekleme "donmuş ekran"
   değil "çalışıyor" diye okunuyor. Hareketi azaltılmış kullanıcıda kapanır (aşağıdaki blok). */
.ai-dusunuyor-basi strong { animation: ai-nefes 1.4s ease-in-out infinite; }
@keyframes ai-nefes { 0%, 100% { opacity: 1; } 50% { opacity: .45; } }

/* VERİ YOK UYARISI: hata değil BİLGİ — öğrencide henüz program yoksa bu normaldir. */
.ai-verisiz { border-color: var(--warning, #c98a00); color: var(--text); }

/* İKİ SEÇENEK YAN YANA (2026-08-21). Dar ekranda alt alta iner; kartlar eşit yükseklikte
   kalsın diye ızgara `stretch` — biri kısa diğeri uzunsa düğmeler farklı hizada durmasın. */
.ai-secenekler { display: grid; gap: 10px; }
.ai-secenek-not { margin: 0; color: var(--muted); font-size: 12.5px; }
.ai-secenek-izgara { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; align-items: stretch; }
.ai-secenek-kart { display: flex; flex-direction: column; gap: 9px; min-width: 0; padding: 14px 15px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface); }
.ai-secenek-kart:hover { border-color: var(--primary); }
.ai-secenek-bas { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.ai-secenek-bas strong { font-size: 13.5px; letter-spacing: .02em; }
/* Metin uzun: kart içinde kaydırılır, kartı ve sayfayı BÜYÜTMEZ. */
.ai-secenek-govde { margin: 0; max-height: 260px; overflow-y: auto; color: var(--text); font-size: 12.5px; line-height: 1.6; white-space: pre-line; }
.ai-secenek-kart > .button { align-self: flex-start; margin-top: auto; }
@media (max-width: 760px) {
  .ai-secenek-izgara { grid-template-columns: minmax(0, 1fr); }
}

.ai-metin-alan textarea { min-height: 260px; line-height: 1.65; font-size: 13.5px; }
.ai-metin-alan span small { margin-left: 6px; color: var(--muted); font-weight: 700; }
.ai-sonuc-eylem { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 10px; }
.ai-durum { font-size: 12.5px; color: var(--success); font-weight: 700; }
.ai-durum-hata { color: var(--danger); }
.ai-not { margin: 12px 0 0; padding-top: 10px; border-top: 1px solid var(--border); color: var(--muted); font-size: 12px; line-height: 1.55; }

/* Rapor değerlendirme taslağı çubuğu (2026-08-19): ders kutularının hemen üstünde. */
.ai-taslak { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; margin: 4px 0 14px; padding: 12px 15px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.ai-taslak-yazi { flex: 1 1 320px; min-width: 0; }
.ai-taslak-yazi strong { display: block; font-size: 13.5px; }
.ai-taslak-yazi small { display: block; margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.5; }
.ai-dusunuyor-dar { margin-bottom: 14px; padding: 14px 15px; }

/* Koç çalışma programı — öğretmen kontrolleri paneli (2026-08-19).
   Sonuç rozeti .gorev-sonuc-* renklerini kullanıyor ama o kurallar hap biçimini
   .gorev-sonuc b üzerinden veriyordu; burada <b> yok, biçimi ayrıca veriyoruz. */
.cprog-ogretmen .card-heading h2 small { margin-left: 8px; color: var(--muted); font-size: 12px; font-weight: 700; }
.cprog-ogretmen td > span[class^="gorev-sonuc-"] {
  display: inline-block;
  padding: 1px 8px;
  border-radius: 999px;
  font-size: 10.5px;
  font-weight: 800;
}

/* Müfredat kapsaması — katalog başlıkları (2026-08-19, kullanıcı: "TYT-AYT olarak ayıralım").
   12. sınıfta kapsama iki katalogdan kuruluyor; başlık hangi bloğun nerede bittiğini söyler. */
.cov-katalog {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 10px;
  margin: 14px 0 6px;
  padding-bottom: 5px;
  border-bottom: 2px solid var(--primary-soft);
  color: var(--primary-dark);
  font-size: 12px;
  font-weight: 850;
  letter-spacing: .1em;
  text-transform: uppercase;
}
.cov-katalog:first-of-type { margin-top: 6px; }
.cov-katalog small { color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: 0; text-transform: none; }

/* ===== Taşma onarımı: takip edilen ders çipleri (2026-08-19) ==========================
   Kullanıcı bildirimi: çip satırı kartın sağından taşıyor. .cov-cip-liste'de flex-wrap: wrap
   ZATEN vardı; sarmamasının sebebi kapsayıcıydı. .cov-ders-secim > form bir GRID ve grid
   çocuğunun varsayılan min-width değeri `auto`dur — çocuk, içeriğinin en dar hâlinden daha
   fazla küçülemez, dolayısıyla 10 çipli satır track'i aşar ve karttan taşar. Sarma kuralı
   çalışamıyor çünkü satıra "sen daralabilirsin" denmemiş.
   Zincirin her halkasına min-width: 0 verilir; biri atlanırsa taşma geri gelir. */
.cov-ders-secim > form { min-width: 0; }
.cov-ders-secim .form-section { min-width: 0; }
.cov-cip-liste { min-width: 0; max-width: 100%; }
.cov-cip { max-width: 100%; }
/* Uzun ders adı ("İnkılap Tarihi ve Atatürkçülük") çipi tek başına kartı aşmasın. */
.cov-cip b { min-width: 0; overflow-wrap: anywhere; }
/* Özet satırı da sarabilsin: "varsayılan set görünüyor (sayısal + eşit ağırlık) — …" uzun. */
.cov-ders-secim > summary { min-width: 0; }
.cov-ders-secim > summary span { min-width: 0; overflow-wrap: anywhere; }

/* İşaretli görev silinemez (2026-08-19): silme düğmesinin yerine geçen kilit göstergesi.
   Düğme DEĞİL — tıklanacak bir şey yok; sebebi title'da yazıyor. */
.cprog-mini-kilit { opacity: .45; cursor: not-allowed; }
/* SİLİNEMEZ İPUCU: düğme yerine SEBEP. Ad `cprog-` önekliydi ama kural artık iki yerde
   (işaretli görev, kadrosu dolu sınıf) — sınıf adı da genelleşti (2026-08-22). */
.silinemez-not, .cprog-silinemez { color: var(--muted); font-size: 11.5px; font-weight: 700; white-space: nowrap; cursor: help; }

/* Yıllık izlence — koç kontrolü kartı (2026-08-19). */
.pacing-review-card .status { flex: 0 0 auto; white-space: nowrap; }
.pacing-review-note { margin: 0; padding: 10px 12px; border-left: 3px solid var(--primary); border-radius: 0 10px 10px 0; background: var(--surface-soft); font-size: 13px; line-height: 1.55; }
.pacing-review-note small { display: inline-block; margin-top: 3px; color: var(--muted); font-size: 11.5px; }
.pacing-review-card .stack-form { max-width: 620px; }
.pacing-list-table td small { display: block; color: var(--muted); font-size: 11px; line-height: 1.4; }

/* Müfredat sayfasındaki Ders Kataloğu bölümü (2026-08-19). Kapalı başlar: sayfanın asıl
   işi konu düzenlemek, katalog ara sıra bakılan bir listedir. */
.katalog-ozet { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; cursor: pointer; list-style: none; }
.katalog-ozet::-webkit-details-marker { display: none; }
.katalog-ozet::before { content: '▸'; margin-right: 4px; transition: transform .15s ease; display: inline-block; }
details[open] > .katalog-ozet::before { transform: rotate(90deg); }
.katalog-ozet span { font-size: 12.5px; font-weight: 600; color: var(--muted); text-transform: none; letter-spacing: 0; }
.katalog-govde { margin-top: 14px; }

/* BOŞ İZLENCE FORMU (2026-08-19): öğretmen kâğıtta dolduracak. Satırlar elle yazmaya
   elverecek yükseklikte ve alt çizgili; ekranda da aynı görünür, ayrı bir baskı
   sayfası tutulmuyor. */
.pacing-bos-form td { height: 30px; }
.pacing-bos-alan { border-bottom: 1px solid var(--border); }
.pacing-konu-referans { break-inside: auto; }
.pacing-konu-listesi { columns: 2; column-gap: 26px; margin: 0; padding-left: 20px; font-size: 12.5px; line-height: 1.55; }
.pacing-konu-listesi li { break-inside: avoid; }
.pacing-konu-unite { list-style: none; margin: 8px 0 2px -20px; color: var(--primary-dark); }
@media (max-width: 720px) { .pacing-konu-listesi { columns: 1; } }

/* Görev ekle paneli başta kapalı (2026-08-19): başlık satırı özet olur ve tıklanır. */
.cprog-ekle-ozet { cursor: pointer; list-style: none; align-items: flex-start; }
.cprog-ekle-ozet::-webkit-details-marker { display: none; }
.cprog-ekle-ozet h2::before { content: '▸ '; color: var(--muted); }
details[open] > .cprog-ekle-ozet h2::before { content: '▾ '; }
.cprog-ekle-karti details > .cprog-ekle-ozet + form { margin-top: 14px; }

/* SÜRÜKLE-BIRAK TAKVİM (2026-08-19, kullanıcı isteği). Sınıf panosundaki dilden ayrılmıyor:
   sürüklenen kart soluyor, hedef hücre çerçeveleniyor. Kart sürüklenirken imleç de değişir ki
   kullanıcı "bu taşınabilir" bilgisini denemeden görsün. */
[data-dnd-item] { cursor: grab; }
[data-dnd-item]:active { cursor: grabbing; }
[data-dnd-item].is-dragging { opacity: .45; }
[data-dnd-item].is-dnd-bekliyor { opacity: .6; pointer-events: none; }
[data-dnd-gun].is-drop-target { outline: 2px dashed var(--primary); outline-offset: -3px; background: var(--primary-soft); }
.cprog-dnd-ipucu { margin: 0 0 8px; color: var(--muted); font-size: 12px; }
.cprog-dnd-ipucu kbd { padding: 1px 5px; border: 1px solid var(--border); border-radius: 4px; background: var(--bg); font-family: inherit; font-size: 11px; }
/* CTRL (ya da macOS'ta Alt) BASILIYKEN KOPYALANIR: hedef hücre farklı görünür — imleçteki
   "+" işareti bazı tarayıcılarda silik kalıyor, kullanıcı taşıdığını sanmamalı. Yeşil =
   "yeni satır doğacak", mavi = "aynı satır buraya gidecek". */
[data-dnd-gun].is-drop-kopya { outline-style: solid; outline-color: var(--success); background: var(--success-soft); }

/* ── Hazır program şablonları (2026-08-19) ───────────────────────────────────────────────
   Panel .cprog-kopya iskeletini yeniden kullanır; buradaki tek fark açılır listelerin
   genişliği (39 seçenekli optgroup listesi 220px'te okunmuyordu) ve tempo tablosu.
   Renkler TOKEN'DAN: sabit hex yazılırsa koyu temada oran 4.5'in altına düşüyor. */
.cprog-sablon .cprog-kopya-alan select { min-width: 240px; min-height: 38px; padding: 7px 10px; }
.cprog-tempo { margin-top: 12px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
.cprog-tempo-baslik { margin: 0 0 8px; font-size: 12.5px; font-weight: 800; }
.cprog-tempo-baslik small { display: block; margin-top: 2px; color: var(--muted); font-size: 11.5px; font-weight: 500; }
.cprog-tempo-liste { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; list-style: none; }
.cprog-tempo-liste li { flex: 1 1 190px; display: grid; gap: 2px; padding: 8px 10px; border: 1px solid var(--border); border-left-width: 3px; border-radius: 9px; background: var(--surface); }
.cprog-tempo-liste li.is-yetisir { border-left-color: var(--success); }
.cprog-tempo-liste li.is-gec { border-left-color: var(--danger); }
.cprog-tempo-liste b { font-size: 12.5px; }
.cprog-tempo-liste span { color: var(--text); font-size: 12px; font-variant-numeric: tabular-nums; }
.cprog-tempo-liste em { font-size: 11.5px; font-style: normal; font-weight: 700; }
.cprog-tempo-liste li.is-yetisir em { color: var(--success); }
.cprog-tempo-liste li.is-gec em { color: var(--danger); }
.cprog-tempo-not { margin: 8px 0 0; color: var(--muted); font-size: 12px; line-height: 1.5; }

/* Şablon kütüphanesi ekranı */
.sablon-tablo tr.is-secili { background: var(--surface-soft); }
.sablon-aciklama { margin: 3px 0 0; max-width: 46ch; color: var(--muted); font-size: 12px; line-height: 1.45; }
.sablon-ozet { display: flex; flex-wrap: wrap; gap: 10px; margin: 0; padding: 0; list-style: none; }
.sablon-ozet li { flex: 1 1 140px; display: grid; gap: 2px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
.sablon-ozet b { font-size: 19px; font-variant-numeric: tabular-nums; }
.sablon-ozet span { color: var(--muted); font-size: 12px; }
.sablon-dagilim { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0 0; }
.sablon-dagilim span { padding: 3px 9px; border: 1px solid var(--border); border-radius: 999px; font-size: 12px; }
.sablon-dagilim b { font-variant-numeric: tabular-nums; }
.sablon-cip { display: grid; gap: 1px; padding: 6px 8px; border: 1px solid var(--border); border-left: 3px solid var(--primary); border-radius: 8px; background: var(--surface); }
.sablon-cip strong { font-size: 12px; }
.sablon-cip span { color: var(--text); font-size: 11.5px; line-height: 1.35; }
.sablon-cip small { color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; }
.sablon-bos { margin: 0; color: var(--muted); font-size: 11.5px; }
/* Şablon süzgeç notu: bilgi tonunda, uyarı değil — daraltma normal bir davranıştır. */
.sablon-suzgec-not { margin: 8px 0 0; padding: 9px 12px; border-radius: 10px; background: var(--surface-soft); color: var(--muted); font-size: 12.5px; line-height: 1.55; }
.sablon-suzgec-not strong { color: var(--text); }
.sablon-adim { margin: 0; padding-left: 20px; color: var(--text); font-size: 13px; line-height: 1.65; }

/* ── Şablon düzenleme (2026-08-20) ───────────────────────────────────────────────────────
   Satır tablosu 8 sütun: dar ekranda responsive-card-table kalıbına düşmüyor çünkü her
   hücre bir FORM ALANI — kart görünümünde etiket/alan eşleşmesi kayboluyordu. Bunun yerine
   tablo kendi içinde yatay kayıyor (sayfa gövdesi asla yatay kaymaz). */
.sablon-duzen-tablo { min-width: 980px; }
.sablon-duzen-tablo td { vertical-align: middle; padding: 6px 7px; }
.sablon-duzen-tablo input[type="text"],
.sablon-duzen-tablo input[type="number"],
.sablon-duzen-tablo select { width: 100%; min-height: 34px; padding: 5px 8px; border: 1px solid var(--border); border-radius: 7px; background: var(--surface); color: var(--text); font-size: 12.5px; }
.sablon-duzen-tablo input[type="number"] { max-width: 88px; font-variant-numeric: tabular-nums; }
.sablon-duzen-tablo td:nth-child(1) { min-width: 118px; }
.sablon-duzen-tablo td:nth-child(2) { min-width: 150px; }
.sablon-duzen-tablo td:nth-child(4) { min-width: 210px; }
.sablon-duzen-tablo td:nth-child(3) { min-width: 140px; }
.sablon-duzen-tablo td:nth-child(7) { min-width: 175px; }
.sablon-duzen-tablo td:last-child { text-align: center; }
.sablon-duzen-tablo .check-row { justify-content: center; margin: 0; }
/* Alanı geniş olan form satırı (açıklama): .field ızgarasında tüm satırı kaplar. */
.field-wide { grid-column: 1 / -1; }
/* "düzenlenmiş" rozeti — zorluk düğmesinin altında küçük not. */
.sablon-rozet { display: block; margin-top: 3px; color: var(--muted); font-size: 10.5px; }

/* ── Otomatik program doldurucu (2026-08-20) ─────────────────────────────────────────────
   Seçenek kutuları: iki sütun, her kutunun altında ne yaptığını anlatan bir satır. Açıklama
   ZORUNLU — "hafıza tekniği" yazan bir kutunun ne yapacağını koç tahmin etmek zorunda
   kalmamalı. Renkler token'dan: sabit hex koyu temada okunmuyor. */
.autofill-secenekler { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 10px 18px; }
.autofill-secenek { align-items: flex-start; padding: 9px 11px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
.autofill-secenek > input { margin-top: 3px; }
.autofill-secenek > span { display: grid; gap: 2px; }
.autofill-secenek strong { font-size: 13px; }
.autofill-secenek small { color: var(--muted); font-size: 11.5px; line-height: 1.45; }
.autofill-uyari { margin: 12px 0 0; padding-left: 20px; color: var(--text); font-size: 12.5px; line-height: 1.6; }
.autofill-uyari li { margin-bottom: 3px; }
/* Görev çipi kaynağına göre renklenir: koç bakışta "bu yeni konu mu, biriken iş mi" görsün. */
.autofill-cip { border-left: 3px solid var(--border); }
.autofill-cip.is-yeni_konu { border-left-color: var(--primary); }
.autofill-cip.is-kirmizi { border-left-color: var(--danger); }
.autofill-cip.is-tekrar { border-left-color: var(--warning, #b7791f); }
.autofill-cip.is-deneme { border-left-color: var(--success); }
.autofill-cip.is-genel_tekrar { border-left-color: var(--warning, #b7791f); border-left-style: double; }

/* ── Genel liste dökümü (PDF) — 2026-08-20 ───────────────────────────────────────────────
   Sütun sayısı listeye göre 4-16 arasında değişiyor; tablo kendi içinde kayar, sayfa gövdesi
   asla yatay kaymaz. Sıra sütunu dar ve sağa hizalı: göz satır sayısını soldan takip etsin. */
.liste-dokum-tablo { font-size: 11.5px; }
.liste-dokum-tablo th, .liste-dokum-tablo td { padding: 5px 7px; vertical-align: top; }
/* SIRA SUTUNU BELGENIN KAGIT PALETINI kullanir (2026-08-21'de olculdu): `--muted` EKRAN
   token'idir ve koyu temada acilir; belge kagidi ise HER TEMADA beyazdir. Koyu temada
   bu sutun beyaz kagida acik gri basiliyordu — kontrast 1.98, okunamaz. `--pd-muted`
   beyazda 5.9:1; belge disinda kullanilirsa `--muted`e duser. */
.liste-dokum-tablo .liste-dokum-sira { width: 38px; text-align: right; color: var(--pd-muted, var(--muted)); font-variant-numeric: tabular-nums; }
@media print {
  /* Döküm tablosu sayfa aşarken başlık her sayfada tekrar etsin. */
  .liste-dokum-tablo thead { display: table-header-group; }
  .liste-dokum-tablo tr { break-inside: avoid; }
}

/* ── Geçen hafta katmanı (2026-08-20) ────────────────────────────────────────────────────
   Kullanıcı: "geçen haftayı farklı renkte hafif silik göstersin, oradan kopyalayabilir".
   SOLUK + KESİKLİ ÇERÇEVE bilerek: bu haftanın gerçek göreviyle karışan bir çip, koçun var
   olmayan bir işi işaretlemeye çalışmasına yol açar. Durum rengi korunur (yapılmadı kırmızı
   kalır) ki "hangisi yapılmadı" bakışta okunsun. */
.cprog-gecen { opacity: .62; border-style: dashed !important; background: transparent !important; }
.cprog-gecen:hover { opacity: 1; }
.cprog-gecen small { font-style: italic; }
.cprog-gecen-form { margin-top: 4px; }
.cprog-gecen-form .button { width: 100%; padding: 3px 6px; font-size: 10.5px; }
/* Anahtarın kendisi sekme şeridiyle aynı yükseklikte ve aynı dilde. */
.cprog-gecen-anahtar { display: inline-flex; align-items: center; min-height: 34px; padding: 0 12px;
  border: 1px dashed var(--border); border-radius: 9px; color: var(--muted);
  font-size: 12px; font-weight: 700; text-decoration: none; white-space: nowrap; }
.cprog-gecen-anahtar:hover { color: var(--text); border-color: var(--primary); }
.cprog-gecen-anahtar.is-acik { border-style: solid; border-color: var(--primary); background: var(--primary-soft); color: var(--primary); }

/* ── Yönetim takibi (2026-08-20) ─────────────────────────────────────────────────────────
   Sayılar renkle konuşur: gecikme amber, "hiç görüşülmemiş" kırmızı. Kırmızı bilerek yalnız
   ikincisine ayrıldı — hiç görüşülmemiş öğrenci, geç kalınmış olandan farklı bir sorundur. */
.yonetim-sekme { margin-bottom: 14px; }
.yonetim-uyari { color: var(--warning, #b7791f); font-variant-numeric: tabular-nums; }
.yonetim-kritik { color: var(--danger); font-variant-numeric: tabular-nums; }

/* ── Kitap teslim tutanağı (2026-08-20) ──────────────────────────────────────────────────
   Yoklama tablosuyla aynı iskelet; farkı iki geniş sütun: teslim tarihi ve ÖĞRENCİ İMZASI.
   İmza sütunu bilerek geniş ve çizgili — dar bir kutuya atılan imza okunmuyor ve tutanağın
   tek kanıtı o. Sayfa aşımında satır bölünmez, başlık her sayfada tekrar eder. */
.kitap-tablo .kitap-sutun { width: 58px; text-align: center; }
.kitap-tablo .kitap-tarih { width: 84px; border-bottom: 1px solid #d7dde8; }
.kitap-tablo .kitap-imza { width: 130px; border-bottom: 1px solid #d7dde8; }
.kitap-tablo tbody td { height: 30px; }
.kitap-beyan { margin: 0 0 12px; padding: 9px 12px; border: 1px solid var(--border); border-radius: 9px;
  background: var(--surface-soft); font-size: 12px; line-height: 1.6; }
@media print {
  .kitap-tablo thead { display: table-header-group; }
  .kitap-tablo tr { break-inside: avoid; }
  .kitap-beyan { background: transparent; }
}

/* ── Akademik takvim (2026-08-20) ────────────────────────────────────────────────────────
   Olay türü RENKLE ayrılır: yönetici aylık ızgaraya baktığında tatil ile denemeyi okumadan
   ayırt etmeli. Renkler token'dan; sabit hex koyu temada okunmuyor. Sol kenar çizgisi
   kullanılıyor çünkü dolgu, ızgara hücresindeki diğer olayları bastırıyor. */
.akademik-cip { display: grid; gap: 1px; margin-top: 3px; padding: 3px 6px; border-left: 3px solid var(--border);
  border-radius: 5px; background: var(--surface-soft); font-size: 10.5px; line-height: 1.3; }
.akademik-cip b { font-size: 11.5px; overflow-wrap: anywhere; }
/* Alt satır 9.5px'ti ve koyu temada okunmuyordu (kullanıcı bildirdi). Kontrast sorun değildi
   (7.96 ölçüldü) — BOYUT sorundu. Ay ızgarasında satır sayısı arttığı için 10.5px'te
   duruldu; ölçüldü, hücre yüksekliği ve yatay taşma değişmedi. */
.akademik-cip small { color: var(--muted); font-size: 10.5px; }
.akademik-cip.is-tatil { border-left-color: var(--danger); }
.akademik-cip.is-deneme { border-left-color: var(--primary); }
.akademik-cip.is-seminer { border-left-color: var(--success); }
.akademik-cip.is-donem { border-left-color: var(--warning, #b7791f); }
.akademik-cip.is-meb { border-left-color: var(--violet); }
/* TATİL GÜNÜ HÜCRESİ (2026-08-25 kullanıcı: "tatil günlerini farklı renk yap"): zemin
   danger-soft'tan — çipteki sol kenarlıkla aynı aile, iki temada da token üzerinden okunur.
   Bugün vurgusu tatille çakışırsa bugün kazanır (is-today sonra geldiği için değil,
   ayrı kenarlıkla ayrıştığı için — zemin tatilin, çerçeve bugünün). */
.akademik-gun-tatil { background: var(--danger-soft); }
.akademik-gun-tatil .exam-cell-head span:first-child { color: var(--danger); font-weight: 800; }
.akademik-rozet { display: inline-block; padding: 2px 9px; border-radius: 999px; border: 1px solid var(--border);
  font-size: 11px; font-weight: 700; white-space: nowrap; }
.akademik-rozet.is-tatil { border-color: var(--danger); color: var(--danger); }
.akademik-rozet.is-deneme { border-color: var(--primary); color: var(--primary); }
.akademik-rozet.is-seminer { border-color: var(--success); color: var(--success); }
.akademik-rozet.is-donem { border-color: var(--warning, #b7791f); color: var(--warning, #b7791f); }
.akademik-rozet.is-meb { border-color: var(--violet); color: var(--violet); }
/* LEJANT: renk anahtari. Satir ici style YASAK (CSP style-src-attr 'none'), renk sinifla verilir. */
.akademik-lejant { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 10px 0 0; padding: 0;
  list-style: none; font-size: 12px; color: var(--muted); }
.akademik-lejant li { display: flex; align-items: center; gap: 6px; }
.akademik-lejant-nokta { width: 10px; height: 10px; border-radius: 3px; background: var(--border); }
.akademik-lejant-nokta.is-tatil { background: var(--danger); }
.akademik-lejant-nokta.is-meb { background: var(--violet); }
.akademik-lejant-nokta.is-deneme { background: var(--primary); }
.akademik-lejant-nokta.is-seminer { background: var(--success); }
.akademik-lejant-nokta.is-donem { background: var(--warning, #b7791f); }
.akademik-meb-not { margin: 0 0 14px; padding: 10px 14px; border: 1px solid var(--border);
  border-left: 3px solid var(--violet); border-radius: 10px; background: var(--surface-soft);
  color: var(--muted); font-size: 12.5px; line-height: 1.5; }
.akademik-meb-not b { color: var(--text); }
.akademik-tatil-govde { margin-top: 12px; }
.akademik-tatil-govde h3 { margin: 0 0 6px; font-size: 14px; }
.akademik-resmi { margin-top: 10px; }

/* ─────────────────────────────────────────────────────────────────────────────────────────
   PERSONEL ISTATISTIKLERI (2026-08-21) — kim ne kadar gorusme/program uretti.

   RENKLER TOKEN'DAN: sabit hex yazilmaz (WCAG sozlesmesi). Rakam baglantisi `--primary`
   uzerinde DEGIL, dogal zemin uzerinde duruyor; `--on-primary` gerekmiyor.

   TABLO GENIS: telefonda `.data-table` 720px taban genislik alir, bu yuzden ekranda
   `.table-wrap` + `responsive-card-table` var ve her hucrede `data-label` basiliyor.
   Sinif ADI degil, CSS'te TANIMLI olmasi onemli (`table-scroll` dersi).
   ───────────────────────────────────────────────────────────────────────────────────────── */
.istatistik-kartlar { display: grid; grid-template-columns: repeat(auto-fill, minmax(215px, 1fr)); gap: 12px; }
.istatistik-kart { display: flex; flex-direction: column; gap: 2px; padding: 12px 14px;
  border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.istatistik-kart-grup { font-size: 10.5px; font-weight: 800; letter-spacing: .06em;
  text-transform: uppercase; color: var(--muted); }
.istatistik-kart-sayi { font-size: 27px; font-weight: 800; line-height: 1.15; color: var(--text); }
.istatistik-kart-ad { font-size: 13.5px; font-weight: 700; color: var(--text); }
/* ATIF CUMLESI: rakamin hangi kayittan uretildigi. Kucuk ama okunur kalmali —
   `--muted` en dar zeminde 4.64 olcumlu, dolayisiyla AA'yi gecer. */
.istatistik-kart-atif { margin-top: 4px; font-size: 11.5px; line-height: 1.45; color: var(--muted); }

/* SAYISAL SÜTUN BAŞLIKLARI SARAR (2026-08-22, tablo derleme). Ölçüldü: 11 ölçü sütunu
   başlıkları tek satıra zorlandığı için ("Danışmanlık görüşmesi") tablo 1.794 px'e açılıyor,
   1.215 px'lik kapta 579 px yatay kaydırma çıkıyordu. Başlık iki satıra sarınca sütun ~90 px
   olur ve 14 sütun sığar. Personel/Görev sütunları (ilk iki) ve Toplam (son) sarmaz. */
.istatistik-tablo th { white-space: normal; vertical-align: bottom; line-height: 1.25; }
.istatistik-tablo th:nth-child(n+3) { max-width: 84px; padding-left: 6px; padding-right: 6px; text-align: center; letter-spacing: 0; }
.istatistik-tablo td:nth-child(n+3) { padding-left: 6px; padding-right: 6px; }
.istatistik-tablo td:nth-child(n+3), .istatistik-tablo tfoot th:nth-child(n+3) { text-align: center; font-variant-numeric: tabular-nums; }
.istatistik-tablo td:first-child { min-width: 150px; }
.istatistik-tablo th a { color: inherit; text-decoration: none; border-bottom: 1px dotted var(--border); }
.istatistik-tablo th a:hover, .istatistik-tablo th a:focus-visible { color: var(--primary); border-bottom-color: var(--primary); }
.istatistik-tablo td small { display: block; color: var(--muted); font-size: 11.5px; font-weight: 500; }
.istatistik-tablo tr.is-secili { background: var(--surface-soft); }
.istatistik-tablo tfoot th { background: var(--surface-soft); font-weight: 800; }
.istatistik-tablo-baslik { margin: 18px 0 8px; font-size: 15px; }
.istatistik-tablo-baslik:first-of-type { margin-top: 4px; }
.istatistik-tablo-baslik small { margin-left: 8px; color: var(--muted); font-size: 12px; font-weight: 600; }
/* RAKAM BAGLANTISI: tiklanabilir oldugu belli olmali ama tablo rakam denizine donmemeli —
   alt cizgi yalnizca uzerine gelince. */
.istatistik-sayi { font-weight: 750; color: var(--text); text-decoration: none;
  border-bottom: 1px solid var(--border); }
.istatistik-sayi:hover, .istatistik-sayi:focus-visible { color: var(--primary); border-bottom-color: var(--primary); }

.istatistik-notlar { margin: 0; padding-left: 18px; display: grid; gap: 7px;
  color: var(--muted); font-size: 13px; line-height: 1.55; }
.istatistik-notlar strong { color: var(--text); }

/* ─────────────────────────────────────────────────────────────────────────────────────────
   REHBERLIK TAKVIMI (2026-08-22) — aylik kutular, kademe renkleri.

   RENK SOZLESMESI: kademeler TOKEN'la ayrilir — Lise = --blue, Ortaokul = --violet; ikisi de
   iki temada tanimli (violet koyu tema duzeltmesi 2026-08-20'de yapildi). Sabit hex yok.
   Cipler zemin rengini soft tonlardan alir; yazi rengi --text kalir ki kontrast token
   olcumlerinin disina cikmasin (renk yalnizca kenarlik + zemin ile ayrisir, yaziya
   yaslanmaz — gri basan yazicida da iki kademe kenarliktan ayirt edilir).
   ───────────────────────────────────────────────────────────────────────────────────────── */
.rehberlik-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 14px; }
.rehberlik-ay { padding: 16px 18px; }
.rehberlik-ay.is-pencere-disi { border-style: dashed; }
.rehberlik-ay-baslik { display: flex; align-items: center; justify-content: space-between;
  margin: 0 0 10px; font-size: 16px; }
.rehberlik-ay-sayac { font-size: 11.5px; font-weight: 800; color: var(--muted);
  border: 1px solid var(--border); border-radius: 999px; padding: 1px 8px; }
.rehberlik-bos { margin: 0; color: var(--muted); font-size: 12.5px; }
.rehberlik-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.rehberlik-madde { display: flex; gap: 8px; justify-content: space-between; align-items: flex-start;
  padding: 9px 11px; border: 1px solid var(--border); border-left-width: 4px; border-radius: 10px;
  background: var(--surface-soft); }
/* RENK KİTLEYİ AYIRIR (2026-08-22 kullanıcı: "2 renk kodu, biri veli diğeri öğrenci").
   Kademe renkleri kaldırıldı: dört rengin yarıştığı bir listede renk hiçbir şey ayırmaz.
   Tonlar token'dan (--blue / --amber) — koyu temada da doğru karşılıkları var. */
/* RENK = KADEME, ÇİZGİ = KİTLE (2026-09-02 kullanıcı: "lise farklı renk ortaokul farklı;
   veli-öğrenci çizgili çizgisiz"). Eski kural rengi kitleye veriyordu; iki ölçü tek kanala
   binmesin diye sol şerit artık kademeyi, çizgili zemin veliyi söyler. Doku token'lardan:
   --surface ↔ --surface-soft farkı iki temada da metni bozmayacak kadar hafiftir. */
.rehberlik-madde.is-kademe-lise { border-left-color: var(--blue); }
.rehberlik-madde.is-kademe-ortaokul { border-left-color: var(--success); }
.rehberlik-madde.is-veli { background: repeating-linear-gradient(135deg, var(--surface) 0 7px, var(--surface-soft) 7px 11px); }
.rehberlik-cip-kademe.is-kademe-lise { border-color: var(--blue); background: var(--primary-soft); color: var(--text); }
.rehberlik-cip-kademe.is-kademe-ortaokul { border-color: var(--success); background: var(--success-soft); color: var(--text); }
/* Liste görünümü satırları: ilk hücrede kademe şeridi, veli satırında çizgili zemin. */
.data-table tr.is-kademe-lise > td:first-child { box-shadow: inset 3px 0 0 var(--blue); }
.data-table tr.is-kademe-ortaokul > td:first-child { box-shadow: inset 3px 0 0 var(--success); }
.data-table tr.is-kitle-veli > td { background: repeating-linear-gradient(135deg, transparent 0 9px, var(--surface-soft) 9px 13px); }
.rehberlik-madde-govde { display: grid; gap: 3px; min-width: 0; }
.rehberlik-madde-govde strong { font-size: 13.5px; line-height: 1.35; overflow-wrap: anywhere; }
.rehberlik-etiketler { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; }
.rehberlik-cip { display: inline-flex; padding: 1px 8px; border-radius: 999px; font-size: 10.5px;
  font-weight: 800; letter-spacing: .03em; border: 1px solid var(--border); color: var(--text); }
.rehberlik-cip.is-ogrenci { border-color: var(--border); background: var(--surface); }
.rehberlik-cip.is-veli { border-color: var(--border); background: repeating-linear-gradient(135deg, var(--surface) 0 5px, var(--surface-soft) 5px 8px); }
/* Kademe rozeti NÖTR: bilgi taşır, renk yarışına girmez. */
.rehberlik-cip-kademe { border-color: var(--border); background: var(--surface); color: var(--muted); }
/* DOSYA EKLERİ (2026-09-01): bağlantılar alt alta, uzun ad kırılır; formdaki mevcut-ek
   listesi tek satırda ad + boyut + kaldır düğmesi taşır (form display:contents değil —
   düğme kendi POST formudur, iç içe form yok). */
.rehberlik-dosyalar { display: grid; gap: 2px; margin-top: 2px; }
.rehberlik-dosya-link { font-size: 12px; overflow-wrap: anywhere; }
.rehberlik-mevcut-dosyalar { margin-top: 12px; }
.rehberlik-mevcut-dosyalar h3 { font-size: 13px; margin: 0 0 6px; }
.rehberlik-dosya-listesi { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.rehberlik-dosya-listesi li { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.rehberlik-dosya-listesi li a { overflow-wrap: anywhere; }

/* VERİ KONTROL LİSTESİ (2026-08-22): sayı ağırlığa göre renklenir — aksayan iş kırmızı,
   eksik bilgi amber. Renkler token'dan; koyu temada karşılıkları tanımlı. */
.veri-kontrol-sayi { font-size: 17px; font-variant-numeric: tabular-nums; }
.veri-kontrol-sayi.is-uyari { color: var(--danger); }
.veri-kontrol-sayi.is-bilgi { color: var(--amber); }
.is-secili-satir > td { background: var(--surface-soft); }
.veri-kontrol-temiz { margin: 10px 0 0; color: var(--muted); font-size: 12.5px; line-height: 1.7; }
.veri-kontrol-temiz .status { margin-right: 6px; vertical-align: middle; }
.rehberlik-cip-ornek { vertical-align: middle; }
.rehberlik-hafta { font-size: 11px; font-weight: 700; color: var(--muted); }
.rehberlik-personel, .rehberlik-not { color: var(--muted); font-size: 11.5px; line-height: 1.4; overflow-wrap: anywhere; }
.rehberlik-madde-araclar { display: grid; gap: 4px; flex: none; }
.rehberlik-madde-araclar form { display: contents; }

/* ─────────────────────────────────────────────────────────────────────────────────────────
   OTOMATIK DOLDURMA — cok haftali onizleme, renk kodu, surukle-birak (2026-08-22).

   RENK SOL SERITTIR, yaziya yaslanmaz: kagit yonergesindeki dort durum (yesil/sari/kirmizi/
   mavi) cipin sol kenarindan okunur; yazi rengi token'da kalir, kontrast sozlesmesi bozulmaz.
   Kirmizi/yesil ve mavi TOKEN'lardan; sari icin --amber kullanilir.
   ───────────────────────────────────────────────────────────────────────────────────────── */
/* HAFTALAR KESİNTİSİZ AKAR (2026-08-22): "1. Hafta" başlığı kaldırıldı, ızgaralar art arda
   dizilir ve çok haftalık tek bir takvim gibi okunur. Haftayı ayıran işaret gün başlığındaki
   TARİHTİR; ince bir ayraç yalnız sürükle-bırak sınırını görünür tutmak için var (görev
   kendi haftasının dışına taşınamaz). */
.autofill-onizleme + .autofill-onizleme { margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--border); }
.autofill-onizleme .appointment-week-day-head small { display: block; color: var(--muted); font-size: 11px; font-weight: 600; }
.autofill-cip.is-renk-yesil { border-left: 4px solid var(--success); }
.autofill-cip.is-renk-sari { border-left: 4px solid var(--amber); }
.autofill-cip.is-renk-kirmizi { border-left: 4px solid var(--danger); }
.autofill-cip.is-renk-mavi { border-left: 4px solid var(--blue); }
/* OTOMATİK DOLDUR — "NEDEN EKLENDİ" ROZETİ (2026-08-26 kullanıcı: "hafıza tekniği temelli
   eklendiyse kırmızı… bir teknik yüzünden eklendiyse belli olsun, renkleri ona göre ayarla").
   ROZET RENGİ ≠ ŞERİT RENGİ: şerit konunun bilinme durumunu, rozet görevin plana giriş
   sebebini söyler; lejantta ikisi ayrı satırda yazılıyor. Renkler token'dan gelir (sabit hex
   koyu temada okunmaz — depoda ölçülmüş kural). */
.autofill-rozet { display: inline-block; padding: 1px 6px; border-radius: 999px; font-size: 10.5px;
  font-weight: 800; letter-spacing: .02em; border: 1px solid transparent; }
.autofill-rozet.is-neden-teknik { color: var(--danger); background: var(--danger-soft); border-color: var(--danger-soft); }
.autofill-rozet.is-neden-borc { color: var(--warning); background: var(--warning-soft); }
.autofill-rozet.is-neden-yeni { color: var(--primary-dark, var(--primary)); background: var(--primary-soft); }
.autofill-rozet.is-neden-deneme { color: var(--violet); background: transparent; border-color: var(--violet); }
.autofill-rozet.is-neden-genel { color: var(--muted); background: var(--surface-soft); border-color: var(--border); }
/* KONU TESTİ (2026-09-24): --blue koyu temada tanımsız (açık tonu 3,9:1) — metin --text, ayırt eden mavi çerçeve. */
.autofill-rozet.is-neden-test { color: var(--text); background: transparent; border-color: var(--blue); }
/* KALICI RUTİN (2026-09-02 kullanıcı: "rutinle eklenenler farklı renkte yazsın"): deneme
   rozetinin ölçülmüş token çifti (violet + transparan) — iki rozet ayrı ekranlarda yaşar. */
.autofill-rozet.is-neden-rutin { color: var(--violet); background: transparent; border-color: var(--violet); }
/* Çipin içinde rozet kendi satırına iner; dar hücrede yandaki metni sıkıştırmasın. */
.cprog-chip .autofill-rozet { display: block; width: fit-content; margin-top: 2px; }

/* GÖREV SEÇ + OK PANELİ (2026-09-02 kullanıcı: "birine basınca seçilsin, yukarı aşağı sağa
   sola yollayabilelim"). Seçili çip birincil renkle çerçevelenir; ok paneli çipin İÇİNDE
   akışta durur (absolute konum komşu çipin üstüne binerdi). Renkler token'dan. */
.cprog-chip.is-gorev-secili { border: 2px solid var(--primary); box-shadow: 0 0 0 3px var(--primary-soft);
  cursor: default; background-image: repeating-linear-gradient(135deg,
    color-mix(in srgb, var(--primary) 9%, transparent) 0 6px, transparent 6px 12px); }
/* Seçili çipin içindeki başlık da vurguyu taşır: kutu kenarı uzaktan, yazı yakından okunur. */
.cprog-chip.is-gorev-secili > b, .cprog-chip.is-gorev-secili .cprog-chip-ad { color: var(--primary); }
/* ÇOK SEÇİM ŞERİDİ (2026-09-04): iki ve daha fazla görev seçiliyken kaç tane olduğu ve ne
   yapılabileceği YAZAR — sessiz bir seçim, Delete'e basınca "ne silindi" sorusunu bırakır. */
/* TEK YAYILMA KARARI (2026-09-04): radyolar ve onlara bağlı ayarlar tek blokta. Ayar
   kutuları radyonun ALTINDA girintili durur — hangi seçeneğe ait oldukları yerleşimden
   okunur, ayrı bir etiket gerekmez. JS seçilmeyeni soluklaştırır; JS yoksa hepsi görünür
   kalır ve hangisinin okunacağına sunucu karar verir (kayıp yok). */
.cprog-yayilma { display: flex; flex-direction: column; gap: 6px; }
.cprog-yayilma > .check-row { padding: 7px 9px; border: 1px solid var(--border); border-radius: 8px; }
.cprog-yayilma > .check-row:has(input:checked) { border-color: var(--primary); background: var(--primary-soft); }
.cprog-yayilma-ayar { margin: 0 0 4px 26px; padding: 8px 10px; border-left: 2px solid var(--border); }
/* Seçenekler yan yana: dört seçenek alt alta 240 px yer kaplıyordu. */
.cprog-yayilma-secenekler { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 6px; }
/* İLGİSİZ AYAR SOLUK DEĞİL GİZLİ (2026-09-04'te ölçüldü: soluk kutular 518 px yer
   kaplıyordu). Sınıfı JS koyar; betik yüklenmezse hepsi görünür kalır ve hangisinin
   okunacağına yine sunucu karar verir — JS'siz kayıp yok. */
.cprog-yayilma-ayar.is-pasif { display: none; }
.cprog-yayilma-kaynak { grid-column: 1 / -1; }
/* İki sayı yan yana, kaynak seçimi altta tam genişlik: dikey dizilimde blok 479 px
   oluyordu (2026-09-04'te ölçüldü). Dar kapta ızgara kendiliğinden tek sütuna iner. */
.cprog-yayilma-ikili { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 8px 12px; }
.cprog-yayilma-kaynak .check-row { display: inline-flex; margin-right: 14px; }
.gorev-secim-serit { display: flex; align-items: center; justify-content: space-between; gap: 12px;
  flex-wrap: wrap; margin: 0 0 8px; padding: 7px 12px; border: 1px solid var(--primary);
  border-radius: 9px; background: var(--primary-soft); font-size: 12.5px; }
/* Grup başlığı artık tıklanabilir (tüm grubu seçer): imleç bunu söylemeli. */
.cprog-ders-grup-basligi { cursor: pointer; }
.cprog-ders-grup-basligi:hover { color: var(--primary); }
.cprog-chip { cursor: pointer; }
.autofill-lejant-bas { font-weight: 700; color: var(--text); }

/* DERS GRUPLAMA: aynı dersin ardışık çiplerinde ders adı bir kez yazılır, kalanlar numaralı
   alt satır olur (autofill-grup.js). Devam çipleri hafif içeri alınır ki grup gözle ayrılsın. */
.autofill-cip-sira { font-weight: 800; font-size: 11.5px; color: var(--muted); }
.autofill-cip.is-af-grup-devam { margin-left: 10px; }
.autofill-cip.is-af-grup-devam .autofill-cip-govde { padding-left: 2px; }
.autofill-cip.is-af-grup-ilk { margin-bottom: 1px; }
.autofill-lejant { display: flex; flex-wrap: wrap; gap: 12px; margin: 10px 0 0; font-size: 12px; color: var(--muted); }
.autofill-lejant-oge { display: inline-flex; align-items: center; gap: 6px; }
.autofill-renk-nokta { width: 10px; height: 10px; border-radius: 3px; flex: none; }
.autofill-renk-nokta.is-renk-yesil { background: var(--success); }
.autofill-renk-nokta.is-renk-sari { background: var(--amber); }
.autofill-renk-nokta.is-renk-kirmizi { background: var(--danger); }
.autofill-renk-nokta.is-renk-mavi { background: var(--blue); }
/* SURUKLE-BIRAK gorunumu: tutulan cip soluklasir, hedef hucre cerceveyle isaretlenir. */
.autofill-secilir[draggable="true"] { cursor: grab; }
.autofill-secilir.is-suruklenen { opacity: .4; }
.is-af-hedef { outline: 2px dashed var(--primary); outline-offset: -4px; }

/* GORUSME GUNDEMI — kurum standardi konu listesi (2026-08-22). Form rehberi ustte tek kart;
   listede "Gundem N/M" rozeti + konusulan kisa adlar. Renk sozlesmesi: tam=yesil (status-active),
   eksik=sari (status-paused), hic=gri (status-passive) — var olan status siniflari. */
/* Gundem artik AYRI KART DEGIL, veli isaretinin altinda bir blok (2026-08-22 kullanici
   istegi). Sol serit ve yumusak zemin, isaretle iliskisini gorsel olarak bagli tutar;
   sutun genisligi kart icinde dar oldugu icin 260px'e cekildi (340 tek sutuna dusuruyordu). */
.gorusme-gundem { margin: 4px 0 12px; padding: 12px 14px; border-left: 4px solid var(--primary);
  border-radius: 10px; background: var(--surface-soft); }
.gorusme-gundem-baslik { margin: 0 0 10px; font-size: 13.5px; font-weight: 750; color: var(--text); }
.gorusme-gundem-baslik small { display: block; margin-top: 3px; font-size: 11.5px; font-weight: 500;
  line-height: 1.45; color: var(--muted); }
.gorusme-gundem-liste { display: grid; gap: 6px; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.gorusme-gundem-konu { align-items: flex-start; }
.gorusme-gundem-konu span { font-size: 13px; line-height: 1.45; }
.gorusme-gundem-rozet { margin-top: 6px; }
.gorusme-gundem-kisa { display: block; color: var(--muted); font-size: 11px; line-height: 1.4; }

/* MENU DUZENI ekrani (2026-08-22): gruplar kart izgarasi, ogeler sira+ad+grup satiri.
   JS yok — sira sayi kutusuyla verilir (kati CSP altinda surukle-birak ek betik ister). */
.menu-duzen-izgara { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); }
.menu-duzen-grup { padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.menu-duzen-grup-ust { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.menu-duzen-grup-ust strong { font-size: 14px; }
.menu-duzen-sira { flex: none; width: 62px; margin: 0; }
.menu-duzen-sira input { text-align: center; }
.menu-duzen-oge-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; }
.menu-duzen-oge { display: flex; align-items: center; gap: 8px; padding: 7px 8px;
  border: 1px solid var(--border); border-radius: 9px; background: var(--surface); }
.menu-duzen-oge-ad { flex: 1; min-width: 0; font-size: 13px; font-weight: 650; overflow-wrap: anywhere; }
.menu-duzen-oge-ad small { display: block; color: var(--muted); font-size: 10.5px; font-weight: 500; }
.menu-duzen-grup-secici { flex: none; width: 152px; margin: 0; }
.menu-duzen-grup-secici select { font-size: 12px; }
.menu-duzen-bos { margin: 0; padding: 10px; border: 1px dashed var(--border); border-radius: 10px; color: var(--muted); font-size: 12.5px; text-align: center; }

/* ── SÜRÜKLE-BIRAK (2026-08-22) ────────────────────────────────────────────────────────────
   Kurallar sınıf panosuyla aynı: sürükleme SÜSLEMEDİR, taşıyıcı hâlâ form alanları. JS
   açıkken (`menu-duzen-js`) yalnız SAYI KUTUSU gizlenir — yerini ↑/↓ düğmeleri alır. Grup
   <select>'i GÖRÜNÜR kalır: gruplar arası taşımanın klavye yolu odur, gizlenirse klavye
   kullanıcısı öğeyi başka gruba hiç taşıyamaz. */
.menu-duzen-js .menu-duzen-sira { display: none; }
.menu-duzen-grup[draggable="true"] .menu-duzen-grup-ust,
.menu-duzen-oge[draggable="true"] { cursor: grab; }
.menu-duzen-grup.is-dragging, .menu-duzen-oge.is-dragging { opacity: .45; cursor: grabbing; }
.menu-duzen-grup.is-drop-target { border-color: var(--primary); box-shadow: var(--focus); }
.menu-duzen-grup.is-drop-target .menu-duzen-oge-liste { background: var(--primary-soft); border-radius: 8px; }
.menu-duzen-izgara.is-drop-target { outline: 2px dashed var(--primary); outline-offset: 6px; border-radius: 12px; }

/* ↑/↓ düğmeleri: klavye yolu. 26px dokunma hedefi tablo düğmelerinden küçük ama satır içi;
   odak halkası token'dan (--focus) — sürükleyemeyen kullanıcı da nerede olduğunu görmeli. */
.menu-duzen-tasi { display: inline-flex; flex: none; flex-direction: column; gap: 2px; }
.menu-duzen-ok { width: 22px; height: 15px; padding: 0; border: 1px solid var(--border); border-radius: 5px;
  background: var(--surface); color: var(--muted); font-size: 10px; line-height: 1; cursor: pointer; }
.menu-duzen-ok:hover { border-color: var(--primary); color: var(--primary); }
.menu-duzen-ok:focus-visible { outline: 2px solid var(--primary); outline-offset: 1px; }
.menu-duzen-durum { margin: 0 0 10px; min-height: 18px; color: var(--primary); font-size: 12.5px; font-weight: 700; }

/* KATLANIR ACIKLAMA (2026-08-22): baslik altindaki uzun anlatim tek satira iner,
   ayrinti "Nasil calisir?" ile acilir. JS yok — <details>, kati CSP altinda calisir. */
.aciklama-kisa { margin: 0; }
.aciklama-katlanir { margin-top: 5px; }
.aciklama-katlanir > summary { display: inline-flex; align-items: center; gap: 5px;
  cursor: pointer; font-size: 12px; font-weight: 700; color: var(--primary);
  list-style: none; padding: 2px 0; }
.aciklama-katlanir > summary::-webkit-details-marker { display: none; }
.aciklama-katlanir > summary::before { content: "?"; display: inline-flex;
  align-items: center; justify-content: center; width: 15px; height: 15px; flex: none;
  border: 1px solid currentColor; border-radius: 999px; font-size: 10px; font-weight: 800; }
.aciklama-katlanir[open] > summary::before { content: "\2212"; }   /* U+2212 eksi (CSS kacisi: saf ASCII) */
.aciklama-katlanir > summary:hover, .aciklama-katlanir > summary:focus-visible { text-decoration: underline; }
.aciklama-govde { margin-top: 6px; padding-left: 20px; border-left: 2px solid var(--border);
  display: grid; gap: 6px; }
.aciklama-govde p { margin: 0; font-size: 12.5px; line-height: 1.55; color: var(--muted); }
.aciklama-govde strong { color: var(--text); }

/* GÖREV FORMU — ONAY KUTULU ÖĞRENCİ LİSTESİ (2026-08-26: toplu seçim + ad araması).
   .field'ın genel input kuralı (width:100%, min-height:40px) onay kutusunu dev bir kutuya
   çevirir; burada tek tek geri alınır. Süzgeç yalnız GİZLER (hidden) — işaretli kutu gizliyken
   de formla gönderilir, sayaç bunu ayrıca söylüyor. */
.gorev-ogrenci-alan { grid-column: 1 / -1; }
.gorev-ogrenci-ara { margin-bottom: 2px; }
.gorev-ogrenci-liste {
  max-height: 264px;
  overflow-y: auto;
  border: 1px solid #cbd7da;
  border-radius: 10px;
  padding: 6px;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 2px 10px;
  background: #fff;
}
.gorev-ogrenci-secim { display: flex; align-items: center; gap: 8px; padding: 5px 7px; border-radius: 7px; cursor: pointer; }
.gorev-ogrenci-secim:hover { background: var(--bg); }
.gorev-ogrenci-secim input[type="checkbox"] { width: auto; min-height: 0; margin: 0; flex: 0 0 auto; }
.field .gorev-ogrenci-secim span { font-size: 13px; font-weight: 500; }
.gorev-ogrenci-secim:has(input:checked) { background: var(--primary-soft, var(--bg)); }
.gorev-ogrenci-secim:has(input:checked) span { font-weight: 700; }
[data-theme="dark"] .gorev-ogrenci-liste { background: var(--surface); border-color: var(--border); }

/* 360 — HAFTALIK PROGRAM KATLANIR (2026-08-26): her hafta bir <details>; özet tarih + sayı. */
/* GÖREV LİSTESİ VE KONU ÖZETİ AKORDEONU (2026-08-26 kullanıcı: "görev listesi çok uzuyor,
   haftaları kapatacak şekilde akordeon yapalım" + "konu özeti de derslere göre akordeon olsun,
   hepsi yazmasın"). Öğrenci 360'taki hafta bloğuyla AYNI kalıp — iki ekran aynı hareketi
   öğretmesin diye görünüm de aynı tutuluyor. JS yok: <details> katı CSP altında çalışır. */
.cprog-hafta-blok, .cprog-ozet-blok { border: 1px solid var(--border); border-radius: 10px; background: var(--surface); margin-bottom: 8px; }
.cprog-hafta-blok > summary, .cprog-ozet-blok > summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 12px; padding: 10px 13px; cursor: pointer; border-radius: 10px; }
.cprog-hafta-blok > summary:hover, .cprog-ozet-blok > summary:hover { background: var(--bg); }
.cprog-hafta-blok > summary > span, .cprog-ozet-blok > summary > span { color: var(--muted); font-size: 12.5px; }
.cprog-hafta-blok > .table-wrap, .cprog-ozet-blok > .table-wrap { border-top: 1px solid var(--border); }
/* KAPALI BLOĞUN İÇERİĞİ AÇIKÇA GİZLENİR: tarayıcının `details:not([open])` kuralı EN DÜŞÜK
   önceliktedir ve `.table-wrap` gibi display tanımlayan bir sınıf onu ezer — blok "kapalı"
   görünürken 3 satır ekranda kalıyordu (ölçüldü). Depoda emsali: .plan-builder-card. */
.cprog-hafta-blok:not([open]) > *:not(summary),
.cprog-ozet-blok:not([open]) > *:not(summary) { display: none; }

/* AYNI TUZAĞIN İKİ KURBANI DAHA (2026-09-03 denetimi): kapalı blokta içerik ekranda
   kalıyordu çünkü içeride `display` tanımlayan bir sınıf var — onay gerekçesi formu
   (.approval-dismiss-form { display: grid }) ve akademik takvimin tatil gövdesi
   (.content-grid { display: grid }). Kural blok başına AYRI yazılır. */
.approval-dismiss:not([open]) > *:not(summary),
.akademik-tatil:not([open]) > *:not(summary) { display: none; }

/* SON ÇALIŞMA PROGRAMLARI PANELİ (2026-08-29): Kurum Yönetimi'nden bu ekrana taşındı.
   Kapalı içerik AÇIKÇA gizlenir — içeride `.table-wrap` var ve `display` tanımlayan bir sınıf
   tarayıcının `details:not([open])` kuralını ezer (depoda ölçülmüş tuzak). */
.cprog-son-programlar > summary { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 4px 12px; cursor: pointer; }
.cprog-son-programlar > summary > span { color: var(--muted); font-size: 12.5px; }
.cprog-son-programlar:not([open]) > *:not(summary) { display: none; }
.cprog-son-programlar > .table-wrap { margin-top: 10px; }

/* DERS İZLENCELERİ PANELİ (2026-08-29): koçun çalışma programı ekranında, seçili öğrencinin
   kademesine ait haftalık izlence. Aynı akordeon kalıbı — kapalı içerik AÇIKÇA gizlenir,
   yoksa `.cprog-izlence-govde`nin display'i UA kuralını ezer (depoda ölçülmüş tuzak). */
.cprog-izlence-blok { border: 1px solid var(--border); border-radius: 10px; background: var(--surface); margin-bottom: 8px; }
.cprog-izlence-blok > summary { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; padding: 10px 13px; cursor: pointer; border-radius: 10px; }
.cprog-izlence-blok > summary:hover { background: var(--bg); }
.cprog-izlence-blok:not([open]) > *:not(summary) { display: none; }
.cprog-izlence-ders { font-weight: 600; }
.cprog-izlence-ozet { color: var(--muted); font-size: 12.5px; min-width: 0; }
.cprog-izlence-govde { display: grid; gap: 6px; padding: 4px 13px 12px; border-top: 1px solid var(--border); }
.cprog-izlence-satir { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; margin: 0; }
.cprog-izlence-satir.is-bu-hafta { font-weight: 600; }
.cprog-izlence-satir small { color: var(--muted); flex: 1 0 100%; }
.cprog-izlence-etiket { color: var(--muted); font-size: 12px; font-weight: 500; min-width: 96px; }
.cprog-izlence-hoca { margin: 4px 0 0; color: var(--muted); font-size: 12.5px; }
.ogrenci-program-haftalari { display: grid; gap: 8px; }
.ogrenci-program-hafta { border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
.ogrenci-program-hafta > summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 12px; padding: 10px 13px; cursor: pointer; border-radius: 10px; }
.ogrenci-program-hafta > summary:hover { background: var(--bg); }
.ogrenci-program-hafta > summary > span { color: var(--muted); font-size: 12.5px; }
.ogrenci-program-hafta[open] > summary { border-bottom: 1px solid var(--border); border-radius: 10px 10px 0 0; }
.ogrenci-program-hafta > .table-wrap { padding: 4px 8px 8px; }

/* OTOMATİK DOLDURUCU — SORU ARALIĞI ŞERİDİ (2026-08-26): iki dar sayı kutusu yan yana. */
.autofill-soru-aralik { display: flex; align-items: end; gap: 10px; flex-wrap: wrap; padding: 8px 10px; border: 1px dashed var(--border); border-radius: 10px; }
.autofill-soru-aralik > strong { align-self: center; font-size: 13px; }
.autofill-soru-aralik .field { width: 96px; }
.autofill-soru-aralik > small { flex: 1 1 220px; color: var(--muted); font-size: 11.5px; align-self: center; }

/* ÇALIŞMA PROGRAMI — ALAN HIZLI FORMU (2026-08-26): başlık şeridinde dar seçici + düğme. */
.cprog-alan-formu { display: flex; align-items: end; gap: 8px; }
.cprog-alan-formu .field { width: 190px; }

/* KARMA ÇÖZÜM KONU LİSTESİ (2026-08-26): çok seçimli kutu — görev formunda tür 'karma'. */
/* DENEME STOĞU — satır içi "hangi güne" seçici. `.data-table .actions-cell form`
   `display: contents` veriyor (düğmeyi flex öğesi yapmak için); burada formun İKİ çocuğu
   var (tarih + düğme) ve ikisinin birlikte hizalanması gerekiyor, o yüzden bu form kendi
   flex kabını kurar. Özgüllük contents kuralını ezecek şekilde seçildi (0,3,0 > 0,2,1). */
.data-table .actions-cell .stok-yerlestir { display: flex; gap: 6px; align-items: center; justify-content: flex-end; flex-wrap: wrap; }
.stok-yerlestir input[type="date"] { width: auto; min-width: 142px; min-height: 32px; }
.cprog-karma-liste { max-height: 240px; overflow-y: auto; border: 1px solid #cbd7da; border-radius: 10px; padding: 6px; display: grid; gap: 2px; background: #fff; }
.cprog-karma-secim { display: flex; align-items: center; gap: 8px; padding: 4px 7px; border-radius: 7px; cursor: pointer; }
.cprog-karma-secim:hover { background: var(--bg); }
.cprog-karma-secim input[type="checkbox"] { width: auto; min-height: 0; margin: 0; flex: 0 0 auto; }
.field .cprog-karma-secim span { font-size: 13px; font-weight: 500; }
.cprog-karma-secim:has(input:checked) span { font-weight: 700; }
[data-theme="dark"] .cprog-karma-liste { background: var(--surface); border-color: var(--border); }

/* PDF ızgarasında koçun yazdığı NOT (2026-08-26): görev satırının altında ince italik.
   Kâğıt paleti — tema token'ı burada anlamsız (belge her temada beyaz kâğıda basılır). */
.program-grid-not { display: block; margin-top: 1px; color: #4a5568; font-size: 8.5px; font-style: italic; line-height: 1.25; }

/* GÖREVİ ÇOĞALT (2026-08-26): çipteki ⧉ düğmesi, açılınca gün seçici mini form.
   <details> ile — JS'siz çalışır; panel çipin üstünde yüzer (hücre taşırmasın). */
.cprog-cogalt { position: relative; display: inline-block; }
.cprog-cogalt > summary { list-style: none; cursor: pointer; }
.cprog-cogalt > summary::-webkit-details-marker { display: none; }
.cprog-cogalt-form {
  position: absolute; z-index: 30; right: 0; top: calc(100% + 4px);
  width: 208px; padding: 9px 10px; display: grid; gap: 7px;
  border: 1px solid var(--border); border-radius: 10px; background: var(--surface);
  box-shadow: 0 14px 34px -18px rgba(9, 20, 48, .55);
}
.cprog-cogalt-baslik, .cprog-toplu-baslik { margin: 0; font-size: 11.5px; font-weight: 700; }
.cprog-cogalt-gunler { display: grid; grid-template-columns: repeat(4, 1fr); gap: 3px; }
.cprog-cogalt-gunler label { display: flex; align-items: center; gap: 3px; font-size: 11px; cursor: pointer; }
.cprog-cogalt-gunler input, .cprog-cogalt-hafta input { width: auto; min-height: 0; margin: 0; }
.cprog-cogalt-hafta { display: flex; align-items: center; gap: 6px; font-size: 11.5px; cursor: pointer; }

/* SÜRÜM NOTLARI (2026-08-27): etiket + metin tek satırda hizalı; renkler token'dan gelir,
   sabit hex koyu temada okunmaz (depoda ölçülmüş ders). Etiket sarmaz, metin sarar. */
.surum-liste { margin: 0; padding: 0; list-style: none; display: grid; gap: 10px; }
.surum-liste li { display: flex; gap: 10px; align-items: flex-start; line-height: 1.55; }
.surum-metin { flex: 1; min-width: 0; }
.surum-etiket {
  flex: 0 0 auto; padding: 2px 8px; border-radius: 999px;
  font-size: 11.5px; font-weight: 700; letter-spacing: .2px; white-space: nowrap;
}
.surum-etiket-yeni { background: var(--success-soft); color: var(--success); }
.surum-etiket-iyilestirme { background: var(--surface-soft); color: var(--primary-dark); }
.surum-etiket-duzeltme { background: var(--warning-soft); color: var(--warning); }
.surum-etiket-guvenlik { background: var(--danger-soft); color: var(--danger); }
.surum-karti + .surum-karti { margin-top: 16px; }
/* Telefonda etiket üstte kalsın: 44 px genişlikte etiket + metin aynı satırda sıkışıyordu. */
@media (max-width: 560px) {
  .surum-liste li { flex-direction: column; gap: 4px; }
  .surum-etiket { align-self: flex-start; }
}

/* KOÇLUK ANALİZİ — iki tablo yan yana, dar ekranda alt alta (2026-08-27). Izgara hücresi
   TABLONUN KABIDIR: başlık ve tablo aynı hücrede kalmalı, yoksa başlık öbür sütuna düşer
   (rapor formu düzeninde ölçülmüş ders). */
.karne-ikili {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 18px;
  margin-top: 12px;
}
.karne-ikili h3 { margin: 0 0 8px; font-size: 15px; }

/* Hedef ekranındaki gözlem sütunu: üç küçük satır, hedef kutularıyla karışmasın diye soluk. */
.hedef-gozlem small { display: block; color: var(--muted); line-height: 1.5; }
.hedef-gozlem strong { color: var(--text); }

/* HATIRLAMA İŞARETİ (2026-08-27): "Yapıldı" düğmesinin yanındaki Zor/İyi/Kolay. Şerit dar
   hücrede sarabilmeli — çip şeridine altıncı düğme eklenince telefonun 4 px kaydığı
   ölçülmüştü, aynı hatayı tabloda tekrarlamayalım. */
.cprog-kalite { display: inline-flex; flex-wrap: wrap; gap: 2px; align-items: center; }
.cprog-kalite-dugme { padding: 4px 7px !important; font-size: 11px !important; min-height: 26px !important; }
/* Düğmelerin ne olduğu YALNIZ `title`de yazıyordu (2026-08-30 kullanıcı: “iyi kolay ne
   listede onu anlamadım”). Fareyi bekletmeyen kullanıcı için tooltip yok demektir; grubun
   başına görünür bir etiket kondu. */
.cprog-kalite-etiket { margin-right: 2px; color: var(--muted); font-size: 10.5px; font-weight: 700; }

/* GÜN SÜTUNU KELİME ORTASINDAN KIRILMAZ (2026-08-30'da ölçüldü: `.data-table td`nin
   `overflow-wrap: anywhere` kuralı 48 px'lik iç genişlikte “Pazartesi”yi 43 + 9 px iki
   satıra bölüyordu — kullanıcı “günler düzgün sığmıyor” diye bildirdi). Sabit piksel
   YAZILMAZ: `width: 1%` + `nowrap` sütuna “içeriğin kendisi kadar” genişlik verir, en uzun
   gün adı hangi yazı tipinde olursa olsun tek satırda kalır. Kural yalnız geniş ekranda:
   901 px altında `responsive-card-table td { width: 100% }` kart satırını kurar ve sabit
   genişlik onu 1%'e büzerdi (deponun `.x td.numeric` dersi). */
@media (min-width: 901px) {
  .cprog-gorev-tablo th:first-child, .cprog-gorev-tablo td:first-child { width: 1%; white-space: nowrap; }
}
.cprog-gorev-tablo td:first-child small { display: block; white-space: nowrap; }
.cprog-kalite-rozet {
  display: inline-flex; align-items: center; gap: 3px;
  padding: 3px 7px; border-radius: 999px;
  background: var(--primary-soft); color: var(--primary-dark);
  font-size: 11px; font-weight: 700;
}

/* Denemede hata yapılan konular (2026-08-27): kısa liste, satır başına ders + yanlış sayısı. */
.deneme-zayif-konu { list-style: none; margin: 6px 0 14px; padding: 0; display: grid; gap: 4px; }
.deneme-zayif-konu li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px; }
.deneme-zayif-konu small { color: var(--muted); }

/* ---------------------------------------------------------------------------------------
   YÜKSEK KONTRAST PALETİ (2026-08-27, D15). Düşük görme ve parlak ışıkta okunan ekranlar
   (akıllı tahta) için. Diğer paletler markanın tonlarıdır; bu palet OKUNURLUĞU esas alır:
   birincil renk neredeyse siyah, soluk (--muted) metin koyulaştırılır, kenarlıklar belirgin.
   Ölçülen hedef AAA (7:1): #12203f üstünde beyaz 14.4, --muted #3c4657 zeminde 8.9.
   --------------------------------------------------------------------------------------- */
:root[data-accent="kontrast"] {
  --primary: #12203f; --primary-dark: #0a1128; --primary-soft: #dde3f2;
  --primary-alt: #1c2f57; --primary-alt-dark: #0a1128;
  --on-primary: #ffffff;
  --muted: #3c4657;
  --border: #7b8496;
  --focus: 0 0 0 3px rgba(18,32,63,.45);
}
:root[data-theme="dark"][data-accent="kontrast"] {
  --primary: #cfe0ff; --primary-dark: #eaf1ff; --primary-soft: #101a2e;
  --primary-alt: #dbe7ff; --primary-alt-dark: #b9d0ff;
  --on-primary: #0a1128;
  --muted: #cdd6e6;
  --border: #8a95a8;
}
:root[data-accent="kontrast"] .data-table th { color: var(--muted); }
:root[data-accent="kontrast"] .status { border: 1px solid currentColor; }

/* DURUM RENKLERİNE SİMGE (2026-08-27, D16): yeşil-kırmızı ayrımı renk körlüğünde kaybolur;
   rozetin başına küçük bir işaret konur. İşaret METİN OLARAK basılmaz, ::before ile gelir —
   böylece kopyalanan metne karışmaz ve mevcut etiketler değişmez. */
.status-active::before, .status-done::before { content: "✓ "; }
.status-missed::before, .status-cancelled::before { content: "✕ "; }
/* SARI ROZETTE İŞARET YOK (2026-08-29 kullanıcı: "uyarıların başında ! olmasın, sarı yazılması
   yeter, ilgilenmiyorsa kırmızı olsun"). D16'nın gerekçesi yeşil–kırmızı ayrımının renk
   körlüğünde kaybolmasıydı; onu ✓ ile ✕ taşıyor, "!" o ayrıma HİÇBİR ŞEY katmıyordu. Üstelik
   `status-assigned` yalnız bir bilgi rozetidir (kayıt görüşmesinde "Telefon", "WhatsApp") —
   önüne konan ünlem, uyarı olmayan bir şeyi uyarı gibi gösteriyordu. */
.status-passive::before { content: "◦ "; }
.status-completed::before { content: "◆ "; }

/* Yüksek kontrast paletinin Görünüm ekranındaki renk örneği (diğer paletlerle aynı kalıp). */
.accent-swatch-kontrast { background: #12203f; }

/* ================= TELEFON ALT GEZİNME ÇUBUĞU (2026-08-30) =================
   Kullanıcı: "telefon görünümü baya kötü, sanki mobil uygulamaymış gibi düzeltebilir miyiz".
   Kurulu (PWA) uygulamada tarayıcı çubuğu yok; alt çubuk uygulama hissinin standart aracı.
   Öğeler menüden türetilir (app/views/alt-cubuk.php) — burada yalnız görünüm var.
   YALNIZ ≤700px: masaüstünde DOM'da durur ama basılmaz. */
.alt-cubuk { display: none; }
@media (max-width: 700px) {
  /* TELEFONDA ÜST ÇUBUK SABİT DEĞİL (2026-09-14 kullanıcı: envanter telefonda "düzenle").
     Ölçüldü: marka + bölüm anahtarı + simge sırası + iki seçici ≈ ekranın %28'i; uzun formda
     içerik hep o bloğun altında kalıyordu. Gezinti alt çubukta (Menü düğmesi önce tepeye
     kaydırıp çekmeceyi açar — app.js), sabit üst çubuk telefonda yalnız yer kaplıyordu. */
  body.panel-page .topbar { position: static; }
  /* LACİVERT ZEMİN, ALTIN VURGU (2026-09-14 kullanıcı: "daha güzel, farklı renkte"). Marka
     token'ları `--brand-navy`/`--brand-gold` temadan bağımsız tanımlı; zemin koyu temada da
     lacivert kalır, yazı sabit açık ton. */
  body.panel-page .alt-cubuk {
    position: fixed; inset: auto 0 0 0; z-index: 900;
    display: flex; align-items: stretch; gap: 2px;
    background: linear-gradient(180deg, var(--brand-navy-light), var(--brand-navy));
    border-top: 1px solid rgba(255,255,255,.08);
    /* iOS alt çentiği: safe-area olmadan düğmeler ana-ekran çizgisinin altında kalıyor. */
    padding: 6px 6px env(safe-area-inset-bottom, 0px);
    box-shadow: 0 -8px 24px rgba(0, 11, 73, .28);
  }
  .alt-cubuk-oge {
    flex: 1 1 0; min-width: 0;
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 3px; padding: 6px 2px 7px; position: relative; border-radius: 14px;
    color: rgba(229, 234, 255, .76); font-size: 10.5px; font-weight: 600; text-decoration: none;
    transition: background .15s ease, color .15s ease;
  }
  .alt-cubuk-oge .nav-icon { width: 22px; height: 22px; }
  .alt-cubuk-oge > span { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .alt-cubuk-oge.is-acik { color: var(--brand-gold); background: rgba(249, 190, 3, .13); }
  .alt-cubuk-oge.is-acik::before { content: ""; position: absolute; top: -6px; left: 30%; right: 30%; height: 3px; border-radius: 0 0 3px 3px; background: var(--brand-gold); }
  .alt-cubuk-oge:focus-visible { outline: 2px solid var(--brand-gold); outline-offset: -2px; }
  /* MENÜ: altın hap — çubuktaki tek "her şeye kapı" düğmesi ötekilerden ayrı okunur. */
  .alt-cubuk-menu { flex: 0 0 64px; margin: 2px 0 6px; background: var(--brand-gold); color: var(--brand-navy); box-shadow: 0 4px 14px rgba(249, 190, 3, .35); }
  .alt-cubuk-menu[aria-expanded="true"] { background: #fff; }
  .alt-cubuk-rozet {
    position: absolute; top: 1px; left: calc(50% + 6px);
    min-width: 16px; padding: 1px 4px; border-radius: 999px; border: 2px solid var(--brand-navy);
    background: var(--danger); color: #fff; font-size: 10px; line-height: 1.1; text-align: center;
  }

  /* ALTTAN AÇILAN MENÜ PANELİ — JS'siz :target ile, JS ile .is-open ile açılır (aynı görünüm). */
  /* PANEL [data-alt-menu-panel] İLE SEÇİLİR: sekme şeridi (nav.alt-menu) aynı sınıfı taşır; çıplak
     .alt-menu kuralı 2.99.66-2.99.91 arasında bütün sekme şeritlerini gizledi (ölçüldü). */
  .alt-menu[data-alt-menu-panel] { position: fixed; inset: 0; z-index: 1000; display: none; }
  .alt-menu[data-alt-menu-panel]:target, .alt-menu[data-alt-menu-panel].is-open { display: block; }
  .alt-menu-perde { position: absolute; inset: 0; background: rgba(0, 8, 40, .55); animation: alt-menu-perde .2s ease; }
  .alt-menu-kart {
    position: absolute; inset: auto 0 0 0; max-height: 86vh; overflow-y: auto; overscroll-behavior: contain;
    padding: 8px 16px calc(18px + env(safe-area-inset-bottom, 0px));
    border-radius: 24px 24px 0 0; background: var(--surface); color: var(--text);
    box-shadow: 0 -18px 48px rgba(0, 11, 73, .35); animation: alt-menu-kart .24s cubic-bezier(.2,.8,.2,1);
  }
  @keyframes alt-menu-kart { from { transform: translateY(40px); opacity: .4; } to { transform: none; opacity: 1; } }
  @keyframes alt-menu-perde { from { opacity: 0; } to { opacity: 1; } }
  .alt-menu-tutamak { display: block; width: 44px; height: 5px; margin: 0 auto 10px; border-radius: 99px; background: var(--border); }
  .alt-menu-bas { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
  .alt-menu-kisi { display: flex; align-items: center; gap: 11px; min-width: 0; color: inherit; text-decoration: none; }
  .alt-menu-kisi strong, .alt-menu-kisi small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .alt-menu-kisi small { color: var(--muted); font-size: 12px; }
  .alt-menu-avatar { flex: 0 0 42px; height: 42px; display: grid; place-items: center; border-radius: 14px; background: linear-gradient(135deg, var(--brand-navy-light), var(--brand-navy)); color: var(--brand-gold); font-weight: 800; font-size: 18px; }
  .alt-menu-kapat { flex: 0 0 40px; height: 40px; display: grid; place-items: center; border-radius: 12px; background: var(--bg); color: var(--text); }
  .alt-menu-kapat .nav-icon { width: 20px; height: 20px; }
  .alt-menu-hizli { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-bottom: 14px; }
  .alt-hizli {
    --ton: #2f6fed;
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
    min-height: 76px; padding: 8px 4px; border: 0; border-radius: 16px; cursor: pointer;
    background: color-mix(in srgb, var(--ton) 13%, var(--surface)); color: var(--text);
    font: inherit; font-size: 11.5px; font-weight: 700; line-height: 1.15; text-align: center; text-decoration: none;
  }
  .alt-hizli .nav-icon { width: 34px; height: 34px; padding: 7px; border-radius: 11px; background: var(--ton); color: #fff; }
  .alt-hizli-mavi { --ton: #2f6fed; }
  .alt-hizli-mor { --ton: #7a4fd6; }
  .alt-hizli-yesil { --ton: #16895f; }
  .alt-hizli-turuncu { --ton: #d25a12; }
  .alt-menu-gruplar { display: grid; gap: 8px; }
  .alt-menu-grup { border: 1px solid var(--border); border-radius: 14px; background: var(--surface); overflow: hidden; }
  .alt-menu-grup > summary { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 0 14px; cursor: pointer; list-style: none; font-size: 14.5px; }
  .alt-menu-grup > summary::-webkit-details-marker { display: none; }
  .alt-menu-grup > summary .nav-icon { width: 20px; height: 20px; color: var(--primary); }
  .alt-menu-grup > summary b { flex: 1; }
  .alt-menu-grup > summary > svg:last-child { width: 16px; height: 16px; transition: transform .15s; }
  .alt-menu-grup[open] > summary { background: var(--primary-soft); }
  .alt-menu-grup[open] > summary > svg:last-child { transform: rotate(180deg); }
  .alt-menu-grup:not([open]) > *:not(summary) { display: none; }
  .alt-menu-linkler { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; padding: 8px; }
  .alt-menu-linkler a { display: flex; align-items: center; gap: 8px; min-height: 44px; padding: 6px 9px; border-radius: 10px; color: var(--text); font-size: 13px; font-weight: 600; line-height: 1.2; text-decoration: none; }
  .alt-menu-linkler a .nav-icon { flex: 0 0 18px; width: 18px; height: 18px; color: var(--muted); }
  .alt-menu-linkler a.is-acik { background: var(--primary); color: var(--on-primary); }
  .alt-menu-linkler a.is-acik .nav-icon { color: inherit; }
  .alt-menu-linkler a .nav-badge { margin-left: auto; }
  .alt-menu-ayrac { grid-column: 1 / -1; padding: 6px 9px 0; color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
  .alt-menu-cikis { margin: 14px 0 0; }
  .alt-menu-cikis button { width: 100%; display: flex; align-items: center; justify-content: center; gap: 8px; min-height: 46px; border: 1px solid color-mix(in srgb, var(--danger) 40%, transparent); border-radius: 14px; background: transparent; color: var(--danger); font: inherit; font-weight: 700; cursor: pointer; }
  .alt-menu-cikis .nav-icon { width: 18px; height: 18px; }
  /* Hesap geçişi çıkış düğmesinin kalıbını kullanır ama YIKICI DEĞİLDİR: kırmızı yerine
     nötr çerçeve. Uyarı özeti ikinci satırda, rozet sağ uçta. */
  .alt-menu-hesap { margin-top: 10px; }
  .alt-menu-hesap button { border-color: var(--border); color: inherit; justify-content: flex-start; padding: 0 12px; text-align: left; }
  .alt-menu-hesap button > span { display: grid; gap: 1px; }
  .alt-menu-hesap button small { font-weight: 500; font-size: 11.5px; color: var(--danger); }
  .alt-menu-hesap button .nav-badge { margin-left: auto; }
  body.alt-menu-acik { overflow: hidden; }
  /* İçerik çubuğun altında kalmasın: gövdeye çubuk boyu + çentik kadar nefes. */
  body.panel-page { padding-bottom: calc(64px + env(safe-area-inset-bottom, 0px)); }
  /* Sohbet balonu çubuğun ÜSTÜNE çıkar (ölçüldü: 14px altta, Menü öğesine biniyordu).
     body.panel-page öneki şart: chat.css app.css'ten SONRA yüklenir, çıplak seçici yenilir. */
  body.panel-page .chat-fab { bottom: calc(74px + env(safe-area-inset-bottom, 0px)); }
}
/* TELEFONDA ÇALIŞMA PROGRAMI: "Konu ekle" / "Program" sekmeleri (2026-09-14, cprog-telefon.js).
   Masaüstünde sekme hiç basılmaz; telefonda JS <html data-cprog-sekme> yazar. DOM taşınmaz —
   konu sekmesinde havuzun DIŞINDAKİ her şey gizlenir, havuz kısmi yenilemede de yerinde kalır. */
.cprog-telefon-sekmeler { display: none; }
@media (max-width: 700px) {
  .cprog-telefon-sekmeler {
    position: sticky; top: 0; z-index: 30;
    display: grid; grid-template-columns: 1fr 1fr; gap: 6px;
    margin: 0 0 12px; padding: 5px; border-radius: 16px;
    background: linear-gradient(180deg, var(--brand-navy-light), var(--brand-navy));
    box-shadow: 0 8px 20px rgba(0, 11, 73, .22);
  }
  .cprog-telefon-sekmeler button {
    min-height: 44px; border: 0; border-radius: 12px; background: transparent;
    color: rgba(229, 234, 255, .82); font: inherit; font-size: 14.5px; font-weight: 700; cursor: pointer;
  }
  .cprog-telefon-sekmeler button.is-acik { background: var(--brand-gold); color: var(--brand-navy); }
  .cprog-telefon-sekmeler button:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
  html[data-cprog-sekme="konu"] [data-cprog-bolge] > :not(#program-tablosu),
  html[data-cprog-sekme="konu"] #program-tablosu > :not(.cprog-havuz),
  html[data-cprog-sekme="konu"] [data-cprog-bolge] ~ *,
  html[data-cprog-sekme="konu"] section:has(> #son-programlar),
  html[data-cprog-sekme="konu"] .page-heading > :not(:first-child),
  html[data-cprog-sekme="konu"] .page-heading > :first-child > :not(h1):not(.eyebrow) { display: none !important; }
  html[data-cprog-sekme="konu"] .page-heading { margin-bottom: 10px; }
  html[data-cprog-sekme="konu"] #program-tablosu { padding: 0; border: 0; background: transparent; box-shadow: none; }
  html[data-cprog-sekme="konu"] #program-tablosu > .cprog-havuz { margin-top: 0; box-shadow: var(--shadow); }
  html[data-cprog-sekme="konu"] #program-tablosu > .cprog-havuz > summary { display: none; }
  /* Havuz telefonda: dersler/konular dokunma boyunda, ölçü alanları iki sütun, ekle düğmesi tam satır. */
  html[data-cprog-sekme="konu"] .cprog-havuz-govde { padding: 12px; }
  html[data-cprog-sekme="konu"] .cprog-havuz-olculer { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
  html[data-cprog-sekme="konu"] .cprog-havuz-olculer > .cprog-havuz-notalan,
  html[data-cprog-sekme="konu"] .cprog-havuz-olculer > .cprog-havuz-dagitim,
  html[data-cprog-sekme="konu"] .cprog-havuz-olculer > [data-havuz-ekle] { grid-column: 1 / -1; }
  html[data-cprog-sekme="konu"] .cprog-havuz-olculer .field :is(input, select) { width: 100%; min-width: 0; }
  html[data-cprog-sekme="konu"] [data-havuz-ekle] { min-height: 48px; font-size: 15px; }
  /* Yalnız EKLE düğmesi yapışkan (şeridin tamamı yapıştırılınca 530 px'lik blok konu listesini örttü —
     ölçüldü); koç konuları seçip kaydırmadan ekler. */
  html[data-cprog-sekme="konu"] .cprog-havuz-olculer > [data-havuz-ekle] { position: sticky; bottom: calc(72px + env(safe-area-inset-bottom, 0px)); z-index: 5; box-shadow: 0 8px 20px rgba(0, 11, 73, .25); }
}
@media print { .alt-cubuk { display: none !important; } }
@media print { .alt-menu { display: none !important; } }
@media (prefers-reduced-motion: reduce) { .alt-menu-kart, .alt-menu-perde { animation: none; } }
/* Masaüstünde panel hiç açılmaz (çapa elle yazılsa bile). */
@media (min-width: 701px) { .alt-menu[data-alt-menu-panel], .alt-menu[data-alt-menu-panel]:target { display: none !important; } }

/* TELEFONDA SÜZGEÇ KARTI KAPALI DOĞAR (mobil-suzgec.js; ölçüm: Öğrenciler ekranının ilk
   ekranında tek öğrenci görünmüyordu — süzgeç kartı 583 px). Düğme yalnız telefonda basılır;
   JS eklemezse (JS yok) sınıflar da yok, süzgeç açık kalır. */
.mobil-suzgec-dugme { display: none; }
@media (max-width: 700px) {
  .mobil-suzgec-dugme {
    display: inline-flex; align-items: center; gap: 6px;
    min-height: 40px; margin-bottom: 4px; padding: 8px 14px;
    border: 1px solid var(--border); border-radius: 9px;
    background: var(--bg); color: var(--text); font-weight: 600; font-size: 13.5px;
  }
  .mobil-suzgec-dugme::before { content: '⌕'; font-size: 16px; }
  .mobil-suzgec.is-kapali > *:not(.mobil-suzgec-dugme) { display: none; }
  /* TELEFONDA SÜZGEÇ İKİ SÜTUNLU IZGARA (2026-09-14 kullanıcı: "bu süzgeç işleri telefonda kötü
     gözüküyor"). Ölçüldü (Öğrenciler, 390 px): 560 px altındaki `flex-direction: column` kuralı
     ile öğrenci listesinin `align-items: end` kuralı birleşince kutular SAĞA yaslanıp içerik
     genişliğine büzülüyordu (87–157 px, soldaki 170 px boş). Tek kural 53 süzgeç kartına birden:
     arama ve düğmeler tam satır, seçiciler iki sütun. `body.panel-page` öneki şart — ekrana özel
     `.filter-card .filter-form.x` kuralları (0,3,0) aksi hâlde bunu ezer. */
  body.panel-page .filter-card .filter-form {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: end; gap: 10px 8px; flex-direction: initial;
  }
  body.panel-page .filter-card .filter-form > * { min-width: 0; max-width: 100%; margin: 0; }
  body.panel-page .filter-card .filter-form > .search-field,
  body.panel-page .filter-card .filter-form > :not(.field):not(.button):not(input[type="hidden"]),
  body.panel-page .filter-card .filter-form > .field:has(textarea),
  body.panel-page .filter-card .filter-form > .check-row { grid-column: 1 / -1; }
  body.panel-page .filter-card .filter-form > .field.cift-kaydirici-alan { grid-column: 1 / -1; max-width: none; }
  body.panel-page .filter-card .filter-form .field { min-width: 0; width: auto; }
  body.panel-page .filter-card .filter-form .field :is(input, select) { width: 100%; min-width: 0; }
  body.panel-page .filter-card .filter-form > .button { width: 100%; justify-content: center; }
  /* Tek düğme kalırsa (Temizle yok) tam satır; iki düğme yan yana. */
  body.panel-page .filter-card .filter-form > .button:last-child:nth-child(odd),
  body.panel-page .filter-card .filter-form > .button:only-of-type { grid-column: 1 / -1; }
  body.panel-page .mobil-suzgec-dugme { width: 100%; justify-content: center; margin-bottom: 10px; }
}

/* KAYIT GÖRÜŞMELERİ TABLOSU (2026-08-28 kullanıcı: "aday sütunu dar onu genişlet, zaten dar
   olması gerekeni dar yap"). Aday hücresi ad + telefon + tür taşıyor, en geniş sütun o olmalı.
   YALNIZ İKİ SÜTUNA DOKUNULUR: hepsine sabit genişlik verilince artan yer Veli/Okul gibi uzun
   metinli sütunlara biniyor ve satır 156 px'e çıkıyordu (ölçüldü) — tarayıcının kendi dağıtımı
   bizden iyi. İşlem sütunu beş düğme taşıyor: tek satırda 411 px istiyor, sarınca 250 px'e
   iniyor ve kalan genişlik Aday'a dönüyor.
   SABİT GENİŞLİK @media İÇİNDE: koşulsuz yazılırsa kart kipindeki `width: 100%` kuralını ezer
   ve telefonda satırlar büzülür (depoda ölçülmüş tuzak). */
@media (min-width: 901px) {
  .kayit-gorusme-tablo td:nth-child(2),
  .kayit-gorusme-tablo th:nth-child(2) { min-width: 220px; }
  .kayit-gorusme-tablo td:last-child,
  .kayit-gorusme-tablo th:last-child { width: 250px; white-space: normal; }
  .kayit-gorusme-tablo .table-actions { flex-wrap: wrap; justify-content: flex-end; }
}

/* KART KİPİNDE BOŞ HÜCRE BASILMAZ: bilgi yoksa etiketi de görünmemeli — "Okul" yazıp
   yanında hiçbir şey olmayan satır, "veri gelmedi mi" sorusunu doğurur. */
@media (max-width: 900px) {
  .responsive-card-table td:empty { display: none; }
}

/* OTOMATİK DOLDUR — yük kutusu (2026-08-28): görev günleri ve soru aralığı tek karede.
   Alanlar yan yana; dar ekranda alt alta iner. */
.autofill-yuk-kutusu .field { display: inline-flex; flex-direction: column; margin-right: 12px; }
.autofill-yuk-kutusu .field select,
.autofill-yuk-kutusu .field input { min-width: 110px; }
.autofill-yuk-ayrac { margin: 10px 0 8px; border: 0; border-top: 1px solid var(--border); }

/* Planın gerekçeleri: varsayılan KAPALI; özet kaç not olduğunu yazar. */
.autofill-uyari-blok { margin: 10px 0; }
.autofill-uyari-blok > summary {
  display: flex; align-items: center; gap: 8px;
  padding: 7px 10px; border: 1px solid var(--border); border-radius: 8px;
  background: var(--surface); color: var(--text); font-size: 13px; cursor: pointer;
}
.autofill-uyari-blok > summary span { color: var(--muted); font-size: 12px; }
.autofill-uyari-blok[open] > summary { border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
/* KAPALI <details> İÇERİĞİNİ AÇIKÇA GİZLE: içeride `display` veren bir sınıf (.autofill-uyari)
   tarayıcının UA kuralını ezer — depoda ölçülmüş tuzak. */
.autofill-uyari-blok:not([open]) > *:not(summary) { display: none; }

/* ---------------------------------------------------------------------------------------
   TABLO NEFES ALSIN (2026-08-28 kullanıcı: "tablo aralıkları çok yakın, arasında ufak da
   olsa boşluk bırak"). Satır yüksekliği 75 px'ti ve satırlar tek saç teli çizgiyle
   ayrılıyordu; göz hangi satırda olduğunu kaybediyordu. Üç küçük dokunuş:
     · dikey dolgu 10 → 12 px
     · ayırıcı çizgi biraz daha görünür ama yine ince
     · ÇİFT SATIR ZEBRASI: aynı ölçüde ikinci bir ipucu (renk körlüğünde de çalışır)
   Yoğunluk ayarı (Kompakt/Sunum) bu değerleri kendi kademesinden ezer — cihaz seçimi
   kurumun ayarından daha özgüldür (html[data-yogunluk] kuralı). */
.data-table tbody td { padding-block: 12px; }
.data-table tbody tr:not(:last-child) td { border-bottom-color: var(--border); }
.data-table tbody tr:nth-child(even) td { background: var(--surface-soft, rgba(127, 140, 170, .05)); }
.data-table tbody tr:hover td { background: var(--primary-soft); }

/* ---------------------------------------------------------------------------------------
   MENÜ GRUPLARI HAFİF PASTEL (2026-08-28 kullanıcı: "her menüyü az da olsa hafif pastel
   renklendir, anlaşılır"). Renk BİLGİ TAŞIMAZ, yalnız grupları birbirinden ayırır — bu
   yüzden ton çok açık ve yazı rengi hiç değişmez (kontrast token'lardan gelmeye devam
   eder; renk körlüğünde de grup adı zaten yazılı).
   Sıra numarasına göre veriliyor: menü düzeni ekranından gruplar taşınsa bile her grup bir
   renk alır — ada bağlansaydı yeniden adlandırılan grup rengini kaybederdi. */
.main-nav details.nav-group > summary { border-left: 3px solid transparent; border-radius: 8px; }
.main-nav details.nav-group:nth-of-type(6n+1) > summary { border-left-color: #7aa2f7; background: rgba(122, 162, 247, .07); }
.main-nav details.nav-group:nth-of-type(6n+2) > summary { border-left-color: #66b98f; background: rgba(102, 185, 143, .07); }
.main-nav details.nav-group:nth-of-type(6n+3) > summary { border-left-color: #d69a4c; background: rgba(214, 154, 76, .07); }
.main-nav details.nav-group:nth-of-type(6n+4) > summary { border-left-color: #b07ad1; background: rgba(176, 122, 209, .07); }
.main-nav details.nav-group:nth-of-type(6n+5) > summary { border-left-color: #4fb2c4; background: rgba(79, 178, 196, .07); }
.main-nav details.nav-group:nth-of-type(6n+6) > summary { border-left-color: #d2788c; background: rgba(210, 120, 140, .07); }
/* Açılan panelde de aynı şerit: kullanıcı hangi grubun içinde olduğunu panel açıkken de görür. */
.main-nav details.nav-group[open] > .nav-group-links { border-top: 2px solid currentColor; }

/* ---------------------------------------------------------------------------------------
   "İŞLEM SÜRÜYOR" GÖSTERGESİ (2026-08-29 kullanıcı: "bir şeye basınca 1-2 saniye bekliyor,
   loading gibi bir şey konulabilir mi"). İki parça: üstteki ince şerit (sayfa geliyor) ve
   düğmenin kendi halkası (bastığım düğme çalıştı).
   --------------------------------------------------------------------------------------- */
.mesgul-serit {
  position: fixed;
  inset: 0 auto auto 0;
  z-index: 1200;
  width: 100%;
  /* 3px → 4px + soluk bir raylık zemin (2026-08-29 kullanıcı ikinci kez bildirdi: "sayfalar
     arası geçişte bekliyor, loading gibi bir şey koyulabilir mi"). Kurulu uygulamada tarayıcı
     çubuğu YOKTUR, yani sekmedeki yükleme çarkı hiç görünmez — geçişin tek işareti bu şerit.
     Saydam zeminli 3 piksel, açık temada fark edilmiyordu. */
  height: 4px;
  background: var(--primary-soft);
  pointer-events: none;
}
.mesgul-serit[hidden] { display: none; }
.mesgul-serit.is-akiyor::before {
  content: '';
  display: block;
  height: 100%;
  width: 40%;
  border-radius: 0 3px 3px 0;
  background: linear-gradient(90deg, transparent, var(--primary), var(--primary-alt));
  animation: mesgul-kay 1.1s ease-in-out infinite;
}
@keyframes mesgul-kay {
  0% { transform: translateX(-45%); }
  100% { transform: translateX(255%); }
}

/* UZUN BEKLEME PİLİ (2026-08-29): şerit "bir şey oluyor" der ama saniyeler sürdüğünde
   kullanıcı ekranın donduğunu düşünüyor. 600 ms'yi geçen geçişte ortada küçük bir kutu
   çıkar. BLOKLAMAZ (`pointer-events: none`): kullanıcıyı kilitlemek, yanıt hiç gelmezse
   sayfayı kullanılamaz bırakırdı — şeridin 12 saniyelik güvenlik ağı bunu da temizler. */
.mesgul-pil {
  position: fixed;
  left: 50%;
  top: 22px;
  transform: translateX(-50%);
  z-index: 1201;
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 7px 14px;
  border: 1px solid var(--border);
  border-radius: 999px;
  background: var(--surface);
  box-shadow: 0 6px 20px rgba(9, 20, 60, .18);
  color: var(--muted);
  font-size: 12.5px;
  pointer-events: none;
}
.mesgul-pil[hidden] { display: none; }
.mesgul-pil::before {
  content: '';
  width: 13px;
  height: 13px;
  border: 2px solid var(--primary-soft);
  border-top-color: var(--primary);
  border-radius: 50%;
  animation: mesgul-don 0.7s linear infinite;
}

/* DÜĞME HALKASI: `disabled` YAZILMAZ — gönderen düğmenin name/value çifti POST'tan düşerdi
   (görev durumu tam olarak öyle taşınıyor). İkinci tıklamayı pointer-events engeller. */
.is-mesgul {
  position: relative;
  pointer-events: none;
  color: transparent !important;
}
.is-mesgul::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  width: 14px;
  height: 14px;
  margin: -7px 0 0 -7px;
  border: 2px solid currentColor;
  border-radius: 50%;
  border-top-color: transparent;
  color: var(--on-primary);
  animation: mesgul-don .7s linear infinite;
}
.button-secondary.is-mesgul::after,
.button-ghost.is-mesgul::after,
.link-button.is-mesgul::after { color: var(--primary-dark); }
@keyframes mesgul-don { to { transform: rotate(360deg); } }

/* HAREKETİ AZALT: dönen halka ve akan şerit yerine sabit bir işaret. */
@media (prefers-reduced-motion: reduce) {
  .mesgul-serit.is-akiyor::before { animation: none; width: 100%; opacity: .6; }
  .is-mesgul::after { animation: none; border-top-color: currentColor; opacity: .6; }
  /* Pil KALIR, yalnız çarkı döndürmeyiz: hareketi azaltan kullanıcı da beklediğini bilmeli. */
  .mesgul-pil::before { animation: none; border-top-color: var(--primary); }
}

/* ÖĞRENCİYE ÖZEL NOTLAR (2026-08-30): yalnız koç/koordinatör/admin görür (kapı sunucuda). */
.ozel-not-metin { padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--bg); font-size: 13.5px; line-height: 1.65; white-space: normal; overflow-wrap: anywhere; }
.ozel-not-duzenle { margin-top: 10px; }
.ozel-not-duzenle > summary { cursor: pointer; color: var(--primary); font-size: 13px; font-weight: 700; }
.ozel-not-duzenle:not([open]) > *:not(summary) { display: none; }
.ozel-not-duzenle .stack-form { margin-top: 10px; }

/* CTRL BASILIYKEN KOPYALAMA MODU (2026-08-30 kullanıcı: "ctrl'ye basınca taşınabilir
   tablolar turuncuya dönsün, anlaşılır; üstte de yazsın bu kısayol ne yapıyor").
   Sınıfı takvim-surukle.js yalnız kopyalamayı destekleyen takvim varken basar; renk
   token'dan (--warning), sabit hex koyu temada okunmazdı (depo kuralı). */
.dnd-kopya-basili [data-dnd-takvim][data-dnd-kopya="1"] [data-dnd-item] {
  outline: 2px dashed var(--warning);
  outline-offset: 1px;
  background: var(--warning-soft);
}
/* İpucu iki parçalı: normalde kısayol anlatılır, Ctrl basılınca mod duyurulur. */
.cprog-dnd-ipucu-kopya { display: none; color: var(--warning); font-weight: 700; }
.dnd-kopya-basili .cprog-dnd-ipucu-kopya { display: inline; }
.dnd-kopya-basili .cprog-dnd-ipucu-normal { display: none; }

/* ÖĞRETMENSİZ DERS BLOĞU (2026-08-31): rozet + hızlı atama formu (Şube Programı Kurucu). */
.gsb-ogretmensiz { color: var(--warning); font-weight: 700; }
/* Study Zone gibi BİLEREK öğretmensiz ders eksik atama değildir: uyarı renginde basılmaz (2026-09-24). */
.gsb-ogretmensiz.is-bilerek { color: var(--muted); font-weight: 600; }
.gsb-ata { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.gsb-ata select { min-width: 0; max-width: 150px; font-size: 11px; }

/* KİTAP TESLİM ROZETİ (2026-08-31): tutanakta teslim almış öğrencinin satırında görünür. */
.kitap-aldi { color: var(--success); font-weight: 700; }

/* ŞUBE DERS PROGRAMI ÇIKTISI (2026-08-31). Belge tablosu report-table üstüne oturur;
   hücrede ders + (öğretmenli modda) öğretmen adı ya da "—". */
.sube-program-tablo .sube-saat { width: 1%; white-space: nowrap; }
.sube-program-ders { margin: 1px 0; }
.sube-program-ders small { display: block; color: var(--pd-muted, #667); font-size: 10px; }
.report-subtitle { margin: 14px 0 6px; font-size: 15px; }
.report-subtitle small { color: var(--pd-muted, #667); font-weight: 500; }

/* MUFREDAT DISI DERS EKLE (2026-09-01): takip secim blogunun altinda kucuk yatay form.
   Secici uzun optgroup listesi tasir — dar kalirsa okunmaz (sablon secici dersi). */
.cov-mufredat-disi { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; margin-top: 12px; padding-top: 12px; border-top: 1px dashed var(--border); }
.cov-mufredat-disi .field { min-width: 260px; flex: 0 1 340px; }
.cov-mufredat-disi .field-hint { flex: 1 0 100%; color: var(--muted); }

/* ÖĞRENCİ PANELİ (2026-09-01, migration 143): kendi sade kabuğu — ortak topbar basılmaz,
   personel bileşenleri (menü, sohbet, şube seçici) öğrencide hiç yüklenmez. */
.ogrenci-panel-sayfa { background: var(--bg); }
/* ÖĞRENCİ PANELİ ANA SİTENİN KABUĞUNDA (2026-09-18): üst çubuk .topbar (lacivert), karşılama .hero.
   Menü yok, o yüzden çubuk tek satır; çıkış simgesi personel çubuğundaki simge düğmeleriyle aynı ton. */
.ogrenci-panel-tepe .topbar-inner { justify-content: space-between; }
.ogrenci-panel-kimlik { display: flex; align-items: center; gap: 12px; min-width: 0; }
.ogrenci-panel-kimlik form { margin: 0; display: flex; }
.ogrenci-cikis { display: inline-grid; place-items: center; width: 36px; height: 36px; border-radius: 10px; color: #e1e7ff; background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.14); }
.ogrenci-cikis:hover { background: rgba(255,255,255,.16); color: #fff; }
.ogrenci-hero.hero-live { grid-template-columns: minmax(0, 1fr); }
@media (max-width: 700px) {
  .ogrenci-panel-kimlik .account-copy { display: none; }
}
.ogrenci-panel-tepe { display: flex; flex-wrap: wrap; gap: 12px; align-items: center;
  justify-content: space-between; padding: 12px 20px; border-bottom: 1px solid var(--border);
  background: var(--surface); }
.ogrenci-panel-marka { display: flex; gap: 10px; align-items: center; }
.ogrenci-panel-marka img { border-radius: 8px; }
/* Yalnız DOĞRUDAN çocuk: strong içindeki "Sis" span'ı da bu kurala yakalanıp blok oluyor ve
   marka adı iki satıra kırılıyordu (2026-09-13 "kötü görünüyor" turunda ölçüldü). */
.ogrenci-panel-marka > span { display: grid; line-height: 1.2; }
.ogrenci-panel-marka strong span { display: inline; }
.ogrenci-panel-marka small { color: var(--muted); font-size: 11px; }
.ogrenci-panel-kimlik { display: flex; gap: 12px; align-items: center; }
/* (2026-09-19) eski `> span { display: grid }` kurali kalkti: yeni kabukta .account-profile'i izgaraya cevirip avatari adin USTUNE bindiriyordu (masaustunde olculdu). */
.ogrenci-panel-kimlik small { color: var(--muted); font-size: 11.5px; }
.ogrenci-panel-icerik { max-width: 1100px; margin: 0 auto; padding: 18px 16px 40px;
  display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; }
/* Grid item'in varsayilan min-width:auto'su haftalik izgarayi .table-wrap icinde tutmayip
   karti sisiriyordu — telefonda sayfa 1102px'e tasip yatay kayiyordu (2026-09-02 olculdu).
   minmax(0,1fr) + min-width:0 izgarayi kendi kaydirma kabina hapseder. */
.ogrenci-panel-icerik > .card { min-width: 0; }
/* Öğrenci panelinde ders hücreleri <a> değil <span> (salt okunur — link yok); 360'taki
   flex-column düzeni yalnız <a> ve .is-coaching'i kapsıyordu, düz ders ve .is-group span'ları
   inline kalıp "Türkçe12 SAY 1" gibi bitişik yazılıyordu (2026-09-02 ölçüldü). */
.ogrenci-panel-sayfa .week-grid-cell.is-filled span { display: flex; flex-direction: column;
  justify-content: center; gap: 1px; min-height: 40px; padding: 4px 5px; }
.ogrenci-hafta-gezinti { display: flex; flex-wrap: wrap; gap: 6px; }
/* Telefonda gezinti başlığın dar sağ sütununa yığılıyordu (142x144 px ölçüldü) —
   şerit tam satıra iner, üç düğme yan yana kalır. */
@media (max-width: 700px) {
  .ogrenci-panel-icerik .overview-section-heading { flex-wrap: wrap; }
  .ogrenci-hafta-gezinti { flex-basis: 100%; }
}
.ogrenci-gun-blok { margin-top: 10px; }
.ogrenci-gun-blok h3 { font-size: 13px; margin: 0 0 6px; color: var(--muted); }
.ogrenci-gorev-listesi { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.ogrenci-gorev { display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
  justify-content: space-between; padding: 8px 11px; border: 1px solid var(--border);
  border-left-width: 4px; border-radius: 10px; background: var(--surface-soft); }
.ogrenci-gorev.is-yapildi { border-left-color: var(--success); }
.ogrenci-gorev.is-yapilmadi { border-left-color: var(--danger); }
.ogrenci-gorev.is-bekliyor, .ogrenci-gorev.is-kismen { border-left-color: var(--primary); }
.ogrenci-gorev-icerik { display: grid; gap: 2px; min-width: 0; }
.ogrenci-gorev-icerik small { color: var(--muted); overflow-wrap: anywhere; }
.ogrenci-gorev-meta { display: flex; gap: 8px; align-items: center; }
.ogrenci-gorev-meta small { color: var(--muted); white-space: nowrap; }
/* ŞUBE LİSTESİ SEÇİM EKRANI (2026-09-08): kademe kademe kutucuklar, düzen + sıralama seçimi. */
.sinif-secim-form { display: grid; gap: 14px; }
.sinif-secim-tumu { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.sinif-secim-kademe { margin: 0 0 10px; padding: 8px 12px 10px; border: 1px solid var(--border); border-radius: 12px; }
.sinif-secim-kademe legend { display: flex; align-items: center; gap: 10px; padding: 0 6px; font-weight: 800; }
.sinif-secim-kutu { display: flex; align-items: center; gap: 8px; padding: 7px 10px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); cursor: pointer; }
.sinif-secim-kutu:has(input:checked) { border-color: var(--primary); background: var(--primary-soft); }
.sinif-secim-kutu input { margin: 0; width: 18px; height: 18px; }
.sinif-secim-kutu span { display: grid; line-height: 1.2; }
.sinif-secim-kutu small { color: var(--muted); font-size: 11.5px; }
.sinif-secim-alt { display: grid; gap: 12px; }
.sinif-secim-alt .choice-group.is-pasif { opacity: .55; }
@media (min-width: 900px) { .sinif-secim-alt { grid-template-columns: 1fr 1fr; } .sinif-secim-alt .form-actions { grid-column: 1 / -1; } }
/* ÖĞRENCİ PANELİ — TELEFON ÖNCELİKLİ (2026-09-08 kullanıcı: "hepsi telefon bağımlısı, görüntüyü
   telefon üzerinden düşün"). Özet şeridi + ilerleme, bugünün bloğu vurgulu ve yapışkan başlık,
   işaret düğmeleri tek satırda üç eşit parça (≥44 px dokunma hedefi), seçili işaret dolu renk. */
.ogrenci-ozet { display: grid; gap: 6px; margin: 4px 0 12px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.ogrenci-ilerleme { width: 100%; height: 10px; border: 0; border-radius: 999px; overflow: hidden; background: var(--border); accent-color: var(--success); }
.ogrenci-ilerleme::-webkit-progress-bar { background: var(--border); border-radius: 999px; }
.ogrenci-ilerleme::-webkit-progress-value { background: var(--success); border-radius: 999px; }
.ogrenci-ilerleme::-moz-progress-bar { background: var(--success); border-radius: 999px; }
.ogrenci-ozet-sayilar { display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 12.5px; color: var(--muted); }
.ogrenci-ozet-sayilar b { font-size: 15px; color: var(--text); }
.ogrenci-ozet-sayilar .is-yapildi b { color: var(--success); }
.ogrenci-ozet-sayilar .is-yapilmadi b { color: var(--danger); }
.ogrenci-ozet-not { color: var(--muted); font-size: 12px; }
.ogrenci-gun-blok.is-bugun > h3 { color: var(--primary-dark); }
.ogrenci-gun-blok.is-bugun { padding-left: 8px; border-left: 3px solid var(--primary); border-radius: 4px; }
.ogrenci-bugun-rozet { display: inline-block; margin-left: 6px; padding: 1px 8px; border-radius: 999px; background: var(--primary); color: var(--on-primary); font-size: 10.5px; font-weight: 800; vertical-align: middle; }
.ogrenci-oneri-dugmeler { display: flex; gap: 6px; flex: 1 0 100%; }
.ogrenci-isaret-dugme { flex: 1 1 0; min-height: 44px; padding: 6px 4px; border: 1.5px solid var(--border); border-radius: 10px; background: var(--surface); color: var(--text); font-size: 13.5px; font-weight: 700; white-space: nowrap; }
.ogrenci-isaret-dugme.is-yapildi { border-color: var(--success); color: var(--success); }
.ogrenci-isaret-dugme.is-kismen { border-color: var(--warning, #d97706); color: var(--warning, #d97706); }
.ogrenci-isaret-dugme.is-yapilmadi { border-color: var(--danger); color: var(--danger); }
.ogrenci-isaret-dugme.is-secili.is-yapildi { background: var(--success); color: #fff; }
.ogrenci-isaret-dugme.is-secili.is-kismen { background: var(--warning, #d97706); color: #fff; }
.ogrenci-isaret-dugme.is-secili.is-yapilmadi { background: var(--danger); color: #fff; }
.ogrenci-gorev.is-isaretlenebilir { border-style: solid; }
.ogrenci-oneri-form .ogrenci-oneri-soru { flex: 1 0 100%; justify-content: space-between; }
.ogrenci-oneri-form .ogrenci-oneri-soru input { width: 96px; min-height: 40px; font-size: 15px; text-align: center; }
.cprog-ogrenci-isaret { display: inline-flex; align-items: center; padding: 1px 6px; border-radius: 999px; background: var(--success-soft, #e7f6ee); color: var(--success); font-size: 10.5px; font-weight: 800; }
@media (max-width: 640px) {
  .ogrenci-panel-icerik { padding: 10px 10px 40px; }
  .ogrenci-panel-icerik .card { padding: 12px; }
  .ogrenci-gorev { padding: 10px; gap: 6px; }
  .ogrenci-gorev-icerik strong { font-size: 15px; }
  .ogrenci-gorev-meta { flex: 1 0 100%; justify-content: flex-start; }
  .ogrenci-gun-blok > h3 { position: sticky; top: 0; z-index: 2; margin: 0 0 6px; padding: 6px 0; background: var(--surface); font-size: 15px; }
  .ogrenci-hafta-gezinti { display: grid; grid-template-columns: 1fr auto 1fr; gap: 6px; width: 100%; }
  .ogrenci-hafta-gezinti .button { min-height: 40px; padding: 6px 8px; font-size: 12.5px; }
  .ogrenci-oneri-form .ogrenci-oneri-soru { flex-wrap: nowrap; }
}

/* HIZLI DOLDURMA KARTLARI (2026-09-01): kalıcı rutin + kişisel şablon. */
.cprog-gun-secim { display: flex; flex-wrap: wrap; gap: 10px; }
.cprog-gun-secim .check-row { display: inline-flex; gap: 5px; align-items: center; font-size: 12.5px; }

.cprog-sablon-satirlar { display: grid; gap: 10px; }
.cprog-sablon-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.cprog-sablon-form input[name="ad"], .cprog-sablon-form select { flex: 1 1 220px; min-width: 0; }
.cprog-hiz-not { color: var(--muted); font-size: 12.5px; margin: 8px 0; }
.cprog-rutin-hafta { height: 32px; }
/* Son programlar: kaynak rozetleri (2026-09-02) — sistemin yazdigi gorev ayirt edilir. */
.sp-kaynak { color: var(--muted); font-size: 11px; white-space: nowrap; }

/* DENEME TAHTASI KADEME SEÇİCİ (2026-09-05): düğmeyle tek satırda, aynı boyda. */
.cprog-deneme-form { display: inline-flex; align-items: center; gap: 6px; }
.cprog-deneme-form select { height: 36px; padding: 0 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: inherit; font-size: 13px; }

/* TELEFONDA ÜST ÇUBUK (2026-09-05 kullanıcı, ekran görüntüsüyle: "üst menüde kötü gözüküyor").
   Ölçüldü: .account satırı sarmıyor, iki seçici 27/23 piksele, profil rozeti 7 piksele
   eziliyor ve "S" harfi tam ekran düğmesinin üstüne biniyordu. Seçiciler kendi satırına
   tam genişlik iner, rozet ezilemez olur. */
@media (max-width: 760px) {
  .topbar .account { flex-wrap: wrap; row-gap: 8px; justify-content: flex-end; }
  .topbar .branch-switch { flex: 1 0 100%; order: 9; }
  .topbar .branch-switch select { flex: 1 1 0; min-width: 0; max-width: none; }
  .topbar .account-profile { flex: 0 0 auto; min-width: 36px; }
}

/* TELEFONDA ÇIKTI EKRANI (2026-09-05 kullanıcı, ekran görüntüsüyle: "telefondan pdf takvim
   böyle gözüküyor" — 7 sütunlu ızgara 375 piksele ezilip başlıklar üst üste biniyordu).
   Ölçüldü: hücre 40 piksele düşmüştü. Izgara taban genişliğini korur ve KENDİ bölümünde
   yatay kayar (sayfa gövdesi kaymaz — telefon tablo kuralının belge yüzü). Yazıcıda taban
   sıfırlanır: A4 içi ~703 piksel, 690 taban taşırmaz ama print kendi düzenini kursun. */
@media (max-width: 900px) {
  .print-doc { max-width: 100%; }
  .print-doc .report-section { overflow-x: auto; }
  .print-doc .program-grid { min-width: 690px; }
}
@media print {
  .print-doc .program-grid { min-width: 0; }
}
/* Format kümesi 6 kapsülüyle dar ekranda tek satıra sığmaz: küme kendi içinde sarar. */
.pd-arac-grubu .exam-view-tabs { flex-wrap: wrap; }
/* ALT GEZİNME ÇUBUĞU (aynı ekran görüntüsü: "Menü" kesikti): öğeler zaten esnek ama
   çubuk fixed'ken kenarlara BAĞLI değildi — genişliği içerik toplamına (5×96=480) oturup
   taşıyordu. Kenar bağlama şart; öğe kuralı yukarıda zaten var, yinelenmedi. */
.alt-cubuk { left: 0; right: 0; max-width: 100vw; }

/* KURUM KARAKTERLERİ EKRANI (2026-09-06): kız/erkek setlerinin üç görsel yuvası yan yana.
   Yuva kendi sütununda durur; dar ekranda alt alta iner (auto-fit, sabit eşik yok). */
.pd-karakter-yuvalar { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 16px; }
.pd-karakter-yuva { display: flex; flex-direction: column; gap: 8px; padding: 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-2, var(--bg)); }
.pd-karakter-yuva h3 { margin: 0; font-size: 15px; }
.pd-karakter-onizleme { display: flex; align-items: center; justify-content: center; min-height: 108px; border-radius: 10px; background: var(--bg); }
.pd-karakter-onizleme img, .pd-karakter-onizleme .pd-figur { width: 96px; height: 96px; object-fit: contain; }
.pd-karakter-durum { margin: 0; color: var(--muted); font-size: 12px; }
.pd-karakter-yuva form { display: flex; flex-direction: column; gap: 8px; margin: 0; }

/* İSİMLİ SET FORMU (2026-09-06): ad + balon + düğme tek satırda; set başlığında sil düğmesi sağda. */
.pd-karakter-set-form { align-items: end; }
.pd-karakter-set-form .field > span { display: block; }
#set-k1 .overview-section-heading form, [id^="set-k"] .overview-section-heading form { margin: 0; }
[id^="set-k"] .overview-section-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; }

/* BUGÜNÜN RANDEVU UYARISI (2026-09-06): panonun en üstünde, hatırlatıcı kartıyla aynı dil ama
   saat sütunlu — randevuda okunacak ilk şey saattir. Uyarı tonu sarı: yapılacak işi söyler. */
.randevu-uyari-karti { border-left: 4px solid var(--warning, #b7791f); }
.randevu-uyari-liste { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 0; list-style: none; }
.randevu-uyari-satir { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
.randevu-uyari-saat { flex: none; min-width: 92px; color: var(--primary-dark); font-weight: 850; font-variant-numeric: tabular-nums; }
.randevu-uyari-govde { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.randevu-uyari-govde small { color: var(--muted); overflow-wrap: anywhere; }
@media (max-width: 620px) {
  .randevu-uyari-satir { flex-wrap: wrap; }
  .randevu-uyari-saat { min-width: 0; }
}

/* SERBEST ARALIK — çalışma programı "Haftaya git" formunda ikinci tarih (2026-09-06). */
.cprog-aralik-tire { color: var(--muted); font-weight: 700; }
.cprog-hafta-atla input[type="date"]:placeholder-shown { color: var(--muted); }
/* RANDEVU HAFTASI PNG (2026-09-06): tuval panelde, resim indirildikten sonra önizleme. */
.appointment-week-cikti { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; }
.randevu-resim-panel { padding: 12px 18px 16px; border-bottom: 1px solid var(--border); background: var(--surface-soft); }
.randevu-resim-panel canvas { display: block; max-width: 100%; height: auto; border: 1px solid var(--border); border-radius: 8px; background: #fff; }
.randevu-resim-not { margin: 0 0 10px; color: var(--muted); font-size: 12.5px; }
.report-screen-actions + .randevu-resim-panel { margin: 0 0 16px; border: 1px solid var(--border); border-radius: 12px; }
/* Çıktı düğmeleri şeridi `.appointment-week-intro > div` (grid) kuralına yakalanıp dikey yığılıyordu
   (ölçüldü: 3 satır, kart başlığı 136px). Özgüllük (0,2,0) > (0,1,1). */
.appointment-week-intro > .appointment-week-cikti { display: flex; flex: 0 0 auto; }
/* PDF IZGARASI DAR KAP (2026-09-06): üç ve altı gün sütunu tam genişliğe yayılmaz — iki günlük
   programın iki dev sütunu 9 px yazıyı boşlukta bırakıyordu. Sütun 190 px, tablo içeriği kadar. */
.program-grid-dar > .program-grid { width: auto; min-width: 0; table-layout: auto; }
.program-grid-dar > .program-grid th, .program-grid-dar > .program-grid td { width: 190px; min-width: 190px; }
/* RANDEVU IZGARASI EŞİT SÜTUN (2026-09-06 kullanıcı ekran görüntüsü: içi dolu Pazar sütunu 840 px,
   diğer altı 110 px). Otomatik tablo yerleşimi içeriği olan sütunu büyütüyordu; sabit yerleşimde
   saat sütunu 74 px, yedi gün eşit paylaşır, kart hücrenin içinde sarar. */
.randevu-grid { table-layout: fixed; }
.randevu-grid .appointment-chip-main > span { overflow-wrap: anywhere; }
/* ÇALIŞMA SAATİ DIŞI HÜCRE (hafta sonu 18:00 sonrası): taralı ve soluk, "+" basılmaz. */
.randevu-grid-cell.is-off { background: repeating-linear-gradient(45deg, var(--surface-soft), var(--surface-soft) 6px, transparent 6px, transparent 12px); }
.randevu-grid-cell.is-off.is-today { background: repeating-linear-gradient(45deg, var(--surface-soft), var(--surface-soft) 6px, color-mix(in srgb, var(--primary) 5%, transparent) 6px, color-mix(in srgb, var(--primary) 5%, transparent) 12px); }
/* Çalışma programı açılır menülerinde "Kapat" (2026-09-07): menü <details> olduğu için
   kapanma yolu yalnız özete ikinci tıklamaydı; düğme tam genişlikte ve en altta durur. */
.cprog-menu-kapat { display: block; width: 100%; margin-top: 8px; }
/* ÖĞRENCİ LİSTESİ SÜZGECİ TEK SATIRDA (2026-09-07 kullanıcı: "bu menüyü daha düzeltebilir misin
   tek satırda yazılabilir mi"). Ölçüldü: 1400px ekranda sekiz alan + iki düğme 1.582px istiyor,
   şeride 1.300px düşüyor ve ÜÇ satıra iniyordu. Üç değişiklik birlikte çözer: en uzun seçenek
   metinleri kısaldı (ekranda), "Şube Panosu" başlığa taşındı (süzgeç değildi), ve artan yeri
   ARAMA KUTUSU alır — daralması gerektiğinde de ilk o daralır. Açılır kutulara sabit genişlik
   VERİLMEZ: seçili metni kırpmak, üst menüde yaşanan "sessizce kesme" hatasının aynısı olurdu.
   Dar ekranda flex-wrap zaten alt satıra indirir (2556. satırdaki telefon kuralı geçerli). */
/* IZGARA, SARAN ŞERİT DEĞİL: flex'te satır kırılması öğelerin DOĞAL genişliğine göre karar
   veriliyor ve şerit, yer olmasına rağmen düğmeleri alt satıra atıyordu (ölçüldü: 1.400 px
   şeritte 93 px boşluk varken ikinci satır açılıyordu). Izgarada sütun sayısı sabittir, yani
   tek satır GARANTİDİR; sütunlar minmax ile paylaşılır. Aynı kalıp psychology-filter-form'da
   zaten kullanılıyor. Koç sütunu bilerek geniş: en uzun koç adı kırpılmasın. */
.filter-card .filter-form.ogrenci-filtre {
  display: grid;
  grid-template-columns:
    minmax(140px, 1.4fr) repeat(5, minmax(100px, 1fr))
    minmax(150px, 1.35fr) minmax(120px, 1.15fr) auto auto;
  align-items: end;
  gap: 8px;
}
.filter-card .filter-form.ogrenci-filtre .field,
.filter-card .filter-form.ogrenci-filtre .search-field { min-width: 0; }
.filter-card .filter-form.ogrenci-filtre :is(input, select) { width: 100%; min-width: 0; }
/* 1.200 px altında sütunlar tabanına dayanır; orada ızgarayı bırakıp saran şeride döneriz
   (telefon kuralı 900 px'te zaten tek sütuna indiriyor). */
@media (max-width: 1200px) {
  .filter-card .filter-form.ogrenci-filtre { display: flex; }
  .filter-card .filter-form.ogrenci-filtre .search-field { flex: 1 1 160px; }
}

/* ---------------------------------------------------------------------------------------
   KOMPAKT TAKVİM (2026-09-07 kullanıcı: "tüm takvimleri daha ufak ve kompakt görüntüye
   getirebilecek bir tasarım… istenirse öyle gözükür"). Cihaz tercihi <html data-takvim="kompakt">
   ile gelir (theme-boot.js ilk boyamadan önce yazar, takvim-kompakt.js düğmesini basar).
   TEK BLOK, BÜTÜN TAKVİMLER: ay ızgarası (.exam-month — randevu/deneme/akademik), randevu saat
   ızgarası (.randevu-grid), ders programı (.week-grid) ve çalışma programı haftası (.cprog-week)
   aynı anda küçülür. Ekran ekran ayrı kural yazılsaydı biri unutulur, "kompakt" yalnız bazı
   takvimlerde çalışırdı.
   ÖZGÜLLÜK: taban kurallar üç sınıfa kadar çıkıyor (.cprog-week .exam-month-cell.appointment-
   week-cell = 0,3,0); html[attr] öneki tek başına yetmez, aynı sınıf zinciri tekrar yazılır.
   GİZLENEN BİLGİ SESSİZ DEĞİL: çip altı satırlar (kişi/şube, stok) gizlenir; düğme etiketi
   "açık" der, ipucu neyin gizlendiğini yazar, çip `title` ile ayrıntıyı taşımaya devam eder.
   (Şeride ayrı not basmak ölçüldü ve vazgeçildi: başlık şeridini 143 → 238 px büyütüyordu.) */
.takvim-kompakt-toggle.is-on { border-color: var(--primary); color: var(--primary-dark); background: var(--primary-soft); }

/* Ay ızgarası: hücre 104 → 62 px, sütun tabanı 118 → 84 px, kenar/dolgu yarıya. */
html[data-takvim] .exam-month { grid-template-columns: repeat(7, minmax(84px, 1fr)); gap: 3px; }
html[data-takvim] .exam-month-head { padding: 4px 2px; font-size: 10px; letter-spacing: .04em; }
html[data-takvim] .exam-month-cell { min-height: 62px; padding: 4px; border-radius: 7px; }
html[data-takvim] .exam-month-cell.appointment-week-cell { min-height: 96px; }
html[data-takvim] .exam-cell-head { margin-bottom: 3px; font-size: 11.5px; }
html[data-takvim] .exam-month-cell > .calendar-entry + .calendar-entry { margin-top: 3px; }
html[data-takvim] .exam-chip { padding: 3px 6px; border-radius: 6px; font-size: 11px; line-height: 1.25; }
html[data-takvim] .exam-chip + .exam-chip { margin-top: 3px; }
html[data-takvim] .exam-chip b { font-size: 9px; letter-spacing: .04em; }
html[data-takvim] .exam-chip small { font-size: 10px; }
html[data-takvim] .exam-chip .exam-stock-mini,
html[data-takvim] .exam-chip .appointment-chip-meta,
html[data-takvim] .exam-chip .appointment-participants { display: none; }
html[data-takvim] .appointment-chip-main time { font-size: 10px; }
html[data-takvim] .calendar-entry-tools button { width: 20px; height: 20px; }

/* Randevu saat ızgarası: satır 46 → 34 px, çip daha sıkı, taban genişlik 860 → 720 px. */
html[data-takvim] .randevu-grid { min-width: 720px; }
html[data-takvim] .randevu-grid-cell { height: 34px; }
html[data-takvim] .randevu-grid-cell .exam-chip { padding: 2px 5px; font-size: 10.5px; line-height: 1.25; }
html[data-takvim] .randevu-grid .week-grid-time { padding: 3px 5px !important; }
html[data-takvim] .randevu-grid .week-grid-time strong { font-size: 11px; }
html[data-takvim] .week-grid thead th { padding: 4px 3px; font-size: 10px; }

/* Ders programı ızgarası (özel ders): hücre 44 → 34 px. */
html[data-takvim] .week-grid-cell { height: 34px; }
html[data-takvim] .week-grid-cell.is-filled a,
html[data-takvim] .week-grid-cell.is-filled span.is-coaching { min-height: 30px; padding: 2px 4px; }
html[data-takvim] .week-grid-add { min-height: 32px; }

/* Çalışma programı haftası: hücre 96 → 70 px, çip dolgusu ve puntosu küçük; koçun araç
   düğmeleri GİZLENMEZ (iş akışı o düğmelerde). */
html[data-takvim] .cprog-week .exam-month { gap: 4px; }
html[data-takvim] .cprog-week .exam-month-cell.appointment-week-cell { min-height: 70px; padding: 5px 6px; border-radius: 8px; }
html[data-takvim] .cprog-week .appointment-week-day-head strong { font-size: 13px; }
html[data-takvim] .cprog-chip { margin-top: 4px; padding: 4px 7px 4px 8px; font-size: 11px; line-height: 1.3; }
html[data-takvim] .cprog-chip-islem { margin-top: 4px; padding-top: 3px; }
/* KOMPAKT ÇİP — TABLO DÜZENİ (2026-09-08 kullanıcı: "işe yaramıyor galiba"; ölçüldü: 146 → 132 px).
   Çipin boyunu iki düğme şeridi (araçlar + durum, alt alta) belirliyordu; punto küçültmek onu
   değiştirmiyordu. Kompaktta çip iki sütun: solda metin (tek satır, taşan kesilir — tam ad çipin
   title'ında ve liste düzeninde), sağda iki şerit üst üste küçük düğmelerle. Liste düzeninde
   (:not) dokunulmaz — orası zaten tek satır. Dokunmatikte düğme küçülmez (≥641 px). */
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 1px 6px; margin-top: 3px; padding: 3px 6px 3px 7px; font-size: 11px; line-height: 1.25; }
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip > b,
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip > span,
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip > small { grid-column: 1; display: block; min-width: 0; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip > b { font-size: 9.5px; }
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip > small { font-size: 10px; }
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip > .autofill-rozet { grid-column: 1; justify-self: start; }
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip-islem { grid-column: 2; flex-wrap: nowrap; gap: 2px; margin: 0; padding: 0; border: 0; }
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip-araclar { grid-row: 1; }
html[data-takvim]:not([data-cprog-duzen="liste"]) .cprog-week .cprog-chip-durum { grid-row: 2; justify-self: end; }
@media (min-width: 641px) {
  html[data-takvim] .cprog-week .cprog-chip-islem .cprog-mini { width: 18px; height: 18px; font-size: 10px; }
  html[data-takvim] .cprog-week .cprog-chip-islem .cprog-mini-metin { width: auto; padding: 0 5px; font-size: 10px; }
  html[data-takvim] .cprog-week .cprog-chip-islem .cprog-cogalt > summary { width: 18px; height: 18px; font-size: 10px; }
}
html[data-takvim] .cprog-week .cprog-hizli-hucre input { min-height: 28px; font-size: 11px; }
html[data-takvim] .cprog-week .appointment-week-day-head { margin-bottom: 2px; }

/* ---------------------------------------------------------------------------------------
   SIKISIK KADEME (2026-09-12 kullanıcı: "kompakt takvim görünümü her yerde daha küçük olsun
   veya ayarlanabilir olsun… çok okunamayacak kadar ayarlanamasın ama").
   Kademe ÜÇ: kapalı → kompakt → sıkışık. Yukarıdaki blok `html[data-takvim]` ile yazıldığı
   için İKİ açık kademede de geçerli; burası yalnız FARKI yazar.
   TABAN OKUNURLUK BİLEREK KORUNUR: en küçük yazı 9.5 px'in altına inmez ve dokunma hedefleri
   (düğmeler, "+" hücresi) 24 px'in altına düşmez — "ayarlanabilir" isteği, okunamaz hale
   getirilebilir demek değildir. Sıkışık kademe boyu değil BOŞLUĞU alır: satır yüksekliği,
   hücre dolgusu ve çip aralıkları kısalır, yazı tipi neredeyse sabit kalır. */
html[data-takvim="sikisik"] .exam-month { grid-template-columns: repeat(7, minmax(72px, 1fr)); gap: 2px; }
html[data-takvim="sikisik"] .exam-month-cell { min-height: 48px; padding: 3px; border-radius: 6px; }
html[data-takvim="sikisik"] .exam-month-cell.appointment-week-cell { min-height: 78px; }
html[data-takvim="sikisik"] .exam-cell-head { margin-bottom: 2px; }
html[data-takvim="sikisik"] .exam-chip { padding: 2px 5px; }
html[data-takvim="sikisik"] .exam-chip + .exam-chip { margin-top: 2px; }
html[data-takvim="sikisik"] .exam-chip small { display: none; }
html[data-takvim="sikisik"] .randevu-grid-cell { height: 28px; }
html[data-takvim="sikisik"] .week-grid-cell { height: 28px; }
html[data-takvim="sikisik"] .week-grid-cell.is-filled a,
html[data-takvim="sikisik"] .week-grid-cell.is-filled span.is-coaching { min-height: 24px; padding: 1px 4px; }
html[data-takvim="sikisik"] .week-grid-cell.is-filled small { display: none; }
html[data-takvim="sikisik"] .week-grid-add { min-height: 26px; }
html[data-takvim="sikisik"] .cprog-week .exam-month-cell.appointment-week-cell { min-height: 56px; padding: 4px 5px; }
html[data-takvim="sikisik"] .cprog-week .cprog-chip { margin-top: 3px; padding: 2px 6px; }
/* Tabanın kendisi: hangi kademede olursa olsun bu sınırların altına inilmez. */
html[data-takvim] .exam-chip,
html[data-takvim] .cprog-chip,
html[data-takvim] .week-grid-cell.is-filled a { font-size: max(10px, .69rem); }
html[data-takvim] .exam-chip b,
html[data-takvim] .week-grid-cell.is-filled strong { font-size: max(9.5px, .65rem); }

/* ---------------------------------------------------------------------------------------
   ÇALIŞMA PROGRAMI — TELEFONDA GÜN SÜTUNU (2026-09-07 kullanıcı: çalışma programı geliştirmeleri
   madde 6 — "koçlar programı telefondan açıyor; hafta ızgarası 760 px istiyor"). 640 px altında
   yedi gün TEK SÜTUN alt alta iner (900 px altındaki 2 sütun telefonda 160 px'lik hücre
   veriyordu), gün başlığı yapışkan, çip ve düğmeler parmak boyunda (≥ 40 px). DOM sırası
   değişmez (klavye/okuyucu sırası görselle aynı kalır); sürükleme ipucu telefonda basılmaz
   (dokunmatikte sürükleme yok, ipucu yalan olurdu). */
@media (max-width: 640px) {
  .cprog-week .exam-month { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .cprog-week .exam-month-cell.appointment-week-cell { min-height: 0; padding: 10px 12px; }
  .cprog-week .appointment-week-day-head { position: sticky; top: 0; z-index: 2; padding: 4px 0; background: var(--surface); }
  .cprog-week .appointment-week-day-head strong { font-size: 17px; }
  .cprog-week .cprog-chip { padding: 9px 11px 9px 12px; font-size: 13px; line-height: 1.45; }
  .cprog-week .cprog-chip-islem .button, .cprog-week .cprog-chip-islem button { min-height: 40px; min-width: 40px; }
  .cprog-week .cprog-dnd-ipucu { display: none; }
  .cprog-week .cprog-hizli-hucre input { min-height: 44px; font-size: 15px; }
}

/* SIK VERİLEN GÖREVLER listesi (cprog-hizli.js): örneklerden ayrışsın diye hafif vurgu. */
.cprog-hizli-sik .cprog-hizli-oge { border-left: 3px solid var(--primary); }
.cprog-hizli-sik .cprog-hizli-oge b { color: var(--primary-dark); }
.cprog-tercih-not { display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px; background: var(--primary-soft); color: var(--primary-dark); font-size: 10.5px; font-weight: 700; letter-spacing: .02em; vertical-align: middle; }

/* ---------------------------------------------------------------------------------------
   ÇALIŞMA PROGRAMI GELİŞTİRMELERİ (2026-09-07 kullanıcı onayı, maddeler 1-2-5).
   · Canlı önizleme: yayılma seçeneğinin düşüreceği günler kaydetmeden görünür.
   · Gelişmiş çekmece: saat/süre kutuları kapalı <details> — kapalı içerik CSS ile de gizlenir
     (.field'in display'i UA kuralını ezer; deponun [hidden] / details dersi).
   · Konu havuzu: çipler kapsama rengiyle; sürükleme hedefi hücre vurgulanır.
   · Koç panosu listeleri: isim çipleri. */
.cprog-onizleme { margin-top: 8px; padding: 8px 11px; border-radius: 9px; background: var(--primary-soft); color: var(--primary-dark); font-size: 12px; line-height: 1.45; }
.cprog-gelismis { grid-column: 1 / -1; border: 1px dashed var(--border); border-radius: 10px; padding: 0 12px; }
.cprog-gelismis > summary { padding: 9px 0; cursor: pointer; font-weight: 700; font-size: 13px; }
.cprog-gelismis > summary small { color: var(--muted); font-weight: 500; }
.cprog-gelismis[open] > summary { border-bottom: 1px dashed var(--border); margin-bottom: 8px; }
.cprog-gelismis:not([open]) > *:not(summary) { display: none; }
.cprog-gelismis > .form-grid { padding-bottom: 10px; }

.cprog-havuz { margin-top: 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); }
.cprog-havuz > summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px; padding: 10px 14px; cursor: pointer; list-style: none; }
.cprog-havuz > summary::-webkit-details-marker { display: none; }
.cprog-havuz > summary span { color: var(--muted); font-size: 12px; }
.cprog-havuz:not([open]) > *:not(summary) { display: none; }
.cprog-havuz-govde { padding: 0 14px 12px; }
.cprog-havuz-ders { max-width: 360px; }
.cprog-havuz-liste { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.cprog-havuz-cip { display: inline-flex; align-items: center; max-width: 100%; padding: 6px 10px; border: 1px solid var(--border); border-left: 4px solid var(--muted); border-radius: 8px; background: var(--surface-soft); color: var(--text); font: inherit; font-size: 12.5px; line-height: 1.3; text-align: left; cursor: grab; }
.cprog-havuz-cip:hover { border-color: var(--primary); }
.cprog-havuz-cip.is-ok, .cprog-havuz-cip.is-bilinen { border-left-color: var(--success); }
.cprog-havuz-cip.is-wait { border-left-color: var(--primary); }
.cprog-havuz-cip.is-miss { border-left-color: var(--danger); }
.cprog-havuz-cip.is-dragging { opacity: .5; }
.cprog-havuz-cip.is-bekliyor { opacity: .5; cursor: progress; }
.cprog-havuz-not { display: block; margin-top: 8px; color: var(--muted); }
.cprog-havuz-secici { flex: 1 0 100%; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; padding: 8px 10px; border: 1px solid var(--primary); border-radius: 9px; background: var(--primary-soft); }
.cprog-havuz-secici small { flex: 1 0 100%; color: var(--primary-dark); font-weight: 700; }
.cprog-week [data-dnd-gun].is-havuz-hedef { box-shadow: inset 0 0 0 2px var(--success); background: var(--success-soft); }

.koc-pano-liste { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.koc-pano-cip { display: inline-flex; align-items: center; gap: 6px; padding: 5px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface-soft); color: var(--text); font-size: 12.5px; font-weight: 600; text-decoration: none; }
.koc-pano-cip:hover { border-color: var(--primary); color: var(--primary-dark); }
.koc-pano-cip.is-uyari { border-color: var(--danger); background: var(--danger-soft); }
.koc-pano-cip.is-uyari b { color: var(--danger); font-variant-numeric: tabular-nums; }
.koc-pano-cip.is-not { color: var(--muted); font-weight: 500; }

.cprog-hizli-sik-bas { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.cprog-hizli-sik-gun { min-height: 24px; padding: 1px 4px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--text); font: inherit; font-size: 11px; }

/* SÖZLEŞME (2026-09-07): form ders tablosu, husus listesi, belge maddeleri. */
.sozlesme-ders-tablo input { width: 100%; min-width: 0; }
.sozlesme-ders-tablo td { padding: 6px 6px; vertical-align: middle; }
.sozlesme-hususlar { display: grid; gap: 6px; margin: 6px 0 10px; }
.sozlesme-hususlar .check-row span { font-size: 12.5px; line-height: 1.4; }
.sozlesme-yol { margin-bottom: 10px; }
/* Paket sözleşmeleri (2026-09-14): bileşen blokları formda ve belgede; imzalı kopya hücresi. */
.sozlesme-bilesen-form { margin: 0 0 12px; padding: 10px 14px 12px; border: 1px solid var(--border); border-radius: 12px; }
.sozlesme-bilesen-form legend { padding: 0 6px; font-weight: 700; }
.sozlesme-bilesen-form > p { margin: 0 0 8px; font-size: 12.5px; }
.sozlesme-imza-form { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.sozlesme-imza-form input[type="file"] { max-width: 190px; font-size: 12px; }
.sozlesme-imza { align-items: center; }
.sozlesme-bilesen { margin: 0 0 12px; }
.sozlesme-bilesen h3 { margin: 0 0 4px; font-size: 13.5px; }
.sozlesme-bilesen p { margin: 0 0 6px; }
.sozlesme-kosullar th { width: 32%; }
.sozlesme-ucret th { width: 40%; }
.form-grid .field-wide { grid-column: 1 / -1; }
.sozlesme-maddeler { padding-left: 20px; font-size: 12.5px; line-height: 1.55; }
.sozlesme-maddeler li { margin: 0 0 6px; }
.sozlesme-dersler tfoot th { text-align: left; }
.sozlesme-dersler tfoot th.numeric { text-align: right; }
.cprog-cogalt-jsyok { margin: 6px 0 0; color: var(--muted); font-size: 11px; }

/* MEB KURSİYER KAYIT SÖZLEŞMESİ (2026-09-23): form adımları, sözleşme ayarları, ekran önizlemesi.
   Belge kâğıda sunucunun ürettiği PDF'ten basılır; buradaki önizleme ekran içindir ve yatay kaydırmaz. */
.sozlesme-kurum-secim { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 8px; margin: 0 0 10px; }
.sozlesme-kurum-kart { display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); cursor: pointer; }
.sozlesme-kurum-kart:has(input:checked) { border-color: var(--primary); background: var(--primary-soft); }
.sozlesme-kurum-kart input { margin-top: 3px; }
.sozlesme-kurum-kart small { display: block; margin-top: 2px; color: var(--muted); font-size: 11.5px; }
.sozlesme-uyari { margin: 6px 0 10px; padding: 8px 10px; border-radius: 8px; background: var(--warning-soft); color: var(--warning); font-size: 12.5px; }
.sozlesme-radyo { margin: 0; padding: 0; border: 0; min-width: 0; }
.sozlesme-radyo legend { margin-bottom: 6px; font-size: 13px; font-weight: 650; }
.sozlesme-radyo .check-row { margin: 0 0 4px; }
.sozlesme-ebeveyn { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 10px; }
.sozlesme-ebeveyn .sozlesme-bilesen-form { margin: 0; }
.sozlesme-kopya-dugmeler { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; }
.sozlesme-alt-baslik { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin: 16px 0 6px; font-size: 13px; font-weight: 700; }
.sozlesme-alt-baslik span { color: var(--muted); font-size: 12px; font-weight: 500; }
.sozlesme-alt-baslik span.is-uyari { color: var(--danger); font-weight: 650; }
.sozlesme-alt-baslik span.is-tamam { color: var(--success); font-weight: 650; }
.sozlesme-kalem-tablo input, .sozlesme-taksit-tablo input { width: 100%; min-width: 0; }
.sozlesme-kalem-tablo td input, .sozlesme-taksit-tablo td.numeric input { text-align: right; }
.sozlesme-kalem-tablo th[scope="row"] { font-weight: 600; }
.sozlesme-kalem-tablo tfoot th, .sozlesme-kalem-tablo tfoot td { font-weight: 700; }
.sozlesme-kalem-aciklama { display: block; width: 100%; margin-top: 4px; font-weight: 400; }
@media (min-width: 901px) {
  .sozlesme-kalem-tablo td { width: 29%; }
  .sozlesme-taksit-tablo th[scope="row"] { width: 22%; }
}
.sozlesme-kurum-maddeleri { margin: 0 0 12px; padding: 8px 12px; border: 1px solid var(--border); border-radius: 10px; }
.sozlesme-kurum-maddeleri summary { font-weight: 650; cursor: pointer; }
.sozlesme-kurum-maddeleri:not([open]) > *:not(summary) { display: none; }
.sozlesme-kurum-maddeleri pre { max-height: 320px; margin: 8px 0; padding: 10px; overflow: auto; border-radius: 8px; background: var(--surface-soft); color: var(--text); font: 12px/1.55 inherit; white-space: pre-wrap; overflow-wrap: anywhere; }
.sozlesme-ayar-sekmeler { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 12px; }
/* Liste fiyatı: paket başına sınıf × kalem tablosu (2026-09-23). Kapalı <details> içeriği AÇIKÇA gizlenir —
   .table-wrap display veriyor ve UA'nın details kuralını eziyor (depo dersi). İlk sütun yatay kaydırmada durur. */
.sozlesme-fiyat-paket { border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
.sozlesme-fiyat-paket + .sozlesme-fiyat-paket { margin-top: 8px; }
.sozlesme-fiyat-paket > summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; padding: 10px 14px; cursor: pointer; }
.sozlesme-fiyat-paket > summary span { color: var(--muted); font-size: .85rem; }
.sozlesme-fiyat-paket:not([open]) > *:not(summary) { display: none; }
.sozlesme-fiyat-paket > .table-wrap { margin: 0 10px 10px; }
.sozlesme-fiyat-tablo { width: auto; }   /* tek sütunlu paket (Koçluk) kutuyu tüm karta yaymasın */
.sozlesme-fiyat-tablo th[scope="col"] { white-space: normal; min-width: 8.5rem; }
.sozlesme-fiyat-tablo th[scope="row"] { position: sticky; left: 0; z-index: 1; background: var(--surface); white-space: nowrap; font-weight: 600; font-size: .86rem; color: var(--text); text-transform: none; letter-spacing: normal; }
.sozlesme-fiyat-tablo tr.is-varsayilan th[scope="row"], .sozlesme-fiyat-tablo tr.is-varsayilan td { background: var(--primary-soft, var(--surface)); }
.sozlesme-fiyat-tablo td { padding: 4px 6px; }
.sozlesme-fiyat-tablo input { width: 9.5rem; text-align: right; font-variant-numeric: tabular-nums; }
.sozlesme-fiyat-kaynak { margin: 6px 0 10px; color: var(--muted); font-size: .88rem; }
.sozlesme-maddeler-metni { width: 100%; font-size: 12.5px; line-height: 1.55; }
.sozlesme-yazim ul { margin: 6px 0 0; padding-left: 18px; }
.sozlesme-yazim code { padding: 1px 5px; border-radius: 5px; background: var(--surface-soft); font-size: 12px; }
.sozlesme-onizleme-kart { padding: clamp(12px, 3vw, 28px); }
.meb-sozlesme { max-width: 860px; margin: 0 auto; color: var(--text); font-size: 13px; line-height: 1.5; }
.meb-bas { margin-bottom: 12px; text-align: center; }
.meb-bas .meb-no { margin: 0 0 6px; color: var(--muted); font-size: 12px; text-align: right; }
.meb-bas .meb-kurum { margin: 0; color: var(--muted); font-weight: 700; letter-spacing: .02em; }
.meb-bas h2 { margin: 4px 0 2px; font-size: 19px; }
.meb-alt { margin: 0 0 8px; color: var(--muted); font-size: 12px; }
.meb-tablo { width: 100%; margin: 10px 0; border-collapse: collapse; table-layout: fixed; }
.meb-tablo th, .meb-tablo td { padding: 6px 8px; border: 1px solid var(--border); text-align: left; vertical-align: top; overflow-wrap: anywhere; }
.meb-tablo thead th { background: var(--surface-soft); font-weight: 750; text-align: center; }
.meb-tablo thead th span { color: var(--muted); font-size: 12px; font-weight: 400; }
.meb-tablo tbody th { background: var(--surface-soft); font-weight: 650; }
.meb-tablo .meb-col-etiket { width: 30%; }
.meb-tablo.is-genis-etiket .meb-col-etiket { width: 42%; }
.meb-tablo th small { display: block; color: var(--muted); font-size: 11px; font-weight: 400; }
.meb-tablo td small { display: block; color: var(--muted); font-size: 11.5px; }
.meb-cift span, .meb-parca { display: inline-block; margin-right: 22px; }
.meb-secenek { display: inline-flex; align-items: center; gap: 6px; margin-right: 18px; }
.meb-secenek.is-secili { font-weight: 700; }
.meb-kutu { position: relative; display: inline-block; width: 13px; height: 13px; border: 1.5px solid currentColor; border-radius: 2px; }
.meb-secenek.is-secili .meb-kutu::after { content: "✕"; position: absolute; inset: -2px 0 0 1px; font-size: 10px; line-height: 1; }
.meb-izgara-bolum h3 { margin: 12px 0 0; padding: 6px 8px; border: 1px solid var(--border); background: var(--surface-soft); font-size: 13px; text-align: center; }
.meb-izgara-bolum h3 span { color: var(--muted); font-size: 12px; font-weight: 400; }
.meb-izgara-bolum .table-wrap { margin: 0 0 10px; }
.meb-toplam td { font-weight: 700; }
.meb-dipnot { padding-left: 18px; color: var(--muted); font-size: 11.5px; }
.meb-bolum h3 { margin: 16px 0 4px; font-size: 15px; text-align: center; }
.meb-maddeler { padding-left: 26px; }
.meb-maddeler > li { margin: 0 0 6px; }
.meb-maddeler > li.meb-ara-baslik { margin: 12px 0 4px -26px; font-weight: 750; list-style: none; }
.meb-alt-maddeler { margin: 4px 0 0; padding-left: 8px; list-style: none; }
.meb-alt-maddeler span { margin-right: 4px; font-weight: 650; }
.meb-tarih { margin: 18px 0 10px; font-weight: 700; text-align: center; }
.meb-imzalar { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 24px; }
.meb-imzalar div { display: flex; flex-direction: column; gap: 2px; }
.meb-imzalar span, .meb-imzalar small { color: var(--muted); font-size: 12px; }
.meb-imzalar b { margin-top: 10px; }
.meb-imzalar i { display: block; height: 34px; border-bottom: 1px solid var(--border); }
@media (max-width: 600px) {
  /* Telefonda tablo BLOK olur: etiket üstte, değer altta, tam genişlik. Yalnız hücreleri blok yapmak
     yetmiyor — tablo kendi sütun ölçüsünü korur ve hücreler ilk sütunun darlığında kalıyordu (ölçüldü). */
  .meb-tablo, .meb-tablo thead, .meb-tablo tbody, .meb-tablo tr, .meb-tablo th, .meb-tablo td { display: block; width: auto; }
  .meb-tablo colgroup { display: none; }
  .meb-tablo tbody th { border-bottom: 0; }
}
.sozlesme-radyo .check-row { display: flex; align-items: center; gap: 6px; }
.sozlesme-radyo input[type="radio"] { width: auto; height: auto; margin: 0; flex: 0 0 auto; }
.sozlesme-kalem-tablo tbody th, .sozlesme-kalem-tablo tfoot th, .sozlesme-taksit-tablo tbody th { color: var(--text); font-size: 13px; letter-spacing: 0; text-transform: none; }
.sozlesme-kalem-tablo input, .sozlesme-taksit-tablo input, .sozlesme-ders-tablo input, .sozlesme-fiyat-tablo input { padding: 7px 9px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); font: inherit; }
.sozlesme-kalem-tablo input:focus-visible, .sozlesme-taksit-tablo input:focus-visible, .sozlesme-ders-tablo input:focus-visible, .sozlesme-fiyat-tablo input:focus-visible { border-color: var(--primary); outline: 2px solid var(--primary-soft); outline-offset: 1px; }

/* KONU HAVUZU v2 (2026-09-07): ders çipleri (çoklu), konu seçimi, ekle şeridi. */
.cprog-havuz-dersler { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 8px; }
.cprog-havuz-ders { padding: 5px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface-soft); color: var(--text); font: inherit; font-size: 12px; font-weight: 600; cursor: pointer; }
.cprog-havuz-ders.is-on { border-color: var(--primary); background: var(--primary); color: var(--on-primary); }
.cprog-havuz-grup { flex: 1 0 100%; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.cprog-havuz-grup + .cprog-havuz-grup { margin-top: 4px; }
.cprog-havuz-grup-bas { flex: 1 0 100%; margin-top: 4px; color: var(--muted); font-size: 11.5px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; }
.cprog-havuz-cip.is-secili { border-color: var(--primary); background: var(--primary-soft); box-shadow: inset 0 0 0 1px var(--primary); font-weight: 700; }
.cprog-havuz-serit { margin-top: 10px; padding: 10px 12px; border: 1px solid var(--primary); border-radius: 10px; background: var(--primary-soft); }
.cprog-havuz-serit-ust { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px; }
.cprog-havuz-gunler-kap { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 8px; }
.cprog-havuz-etiket { font-size: 11.5px; font-weight: 700; color: var(--muted); }
.cprog-havuz-gunler { display: flex; flex-wrap: wrap; gap: 4px; }
.cprog-havuz-gun { display: inline-flex; align-items: center; gap: 4px; padding: 4px 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); font-size: 12px; cursor: pointer; }
.cprog-havuz-gun.is-bugun { border-color: var(--primary); }
.cprog-havuz-gun:has(input:checked) { background: var(--primary); color: var(--on-primary); border-color: var(--primary); }
.cprog-havuz-olculer { display: flex; flex-wrap: wrap; align-items: end; gap: 8px; margin-top: 8px; }
.cprog-havuz-olculer .field { flex: 0 1 130px; }
.cprog-havuz-olculer .field input, .cprog-havuz-olculer .field select { min-height: 34px; }
/* HAVUZ v3 (2026-09-08): ders rengi --ders-h (JS, ad→ton), müfredat dışı kutusu, günler hafta satırı,
   not alanı. Renk açık temada soluk zemin + koyu yazı, koyu temada koyu zemin + açık yazı; seçili
   ders dolu renk. Konu grubunun başlığında ve çipteki noktada aynı ton — "bu konu hangi dersin"
   sorusu renkle de okunur. */
.cprog-havuz-ders { --ders-h: 220; border-color: hsl(var(--ders-h) 45% 70%); background: hsl(var(--ders-h) 70% 94%); color: hsl(var(--ders-h) 45% 24%); }
.cprog-havuz-ders::before { content: ""; display: inline-block; width: 8px; height: 8px; margin-right: 6px; border-radius: 50%; background: hsl(var(--ders-h) 60% 48%); vertical-align: 1px; }
.cprog-havuz-ders.is-on { border-color: hsl(var(--ders-h) 55% 38%); background: hsl(var(--ders-h) 55% 38%); color: #fff; }
.cprog-havuz-ders.is-on::before { background: #fff; }
.cprog-havuz-ders.is-disi { border-style: dashed; }
:root[data-theme="dark"] .cprog-havuz-ders { border-color: hsl(var(--ders-h) 35% 34%); background: hsl(var(--ders-h) 30% 20%); color: hsl(var(--ders-h) 60% 84%); }
:root[data-theme="dark"] .cprog-havuz-ders.is-on { border-color: hsl(var(--ders-h) 55% 55%); background: hsl(var(--ders-h) 55% 45%); color: #0a1128; }
:root[data-theme="dark"] .cprog-havuz-ders.is-on::before { background: #0a1128; }
.cprog-havuz-grup { --ders-h: 220; }
.cprog-havuz-grup-bas { color: hsl(var(--ders-h) 45% 36%); }
:root[data-theme="dark"] .cprog-havuz-grup-bas { color: hsl(var(--ders-h) 60% 76%); }
.cprog-havuz-grup .cprog-havuz-cip::before { content: ""; display: inline-block; flex: 0 0 auto; width: 7px; height: 7px; margin-right: 6px; border-radius: 50%; background: hsl(var(--ders-h) 60% 48%); }
.cprog-havuz-disi { margin: 2px 0 8px; border: 1px dashed var(--border); border-radius: 9px; }
.cprog-havuz-disi > summary { padding: 6px 10px; cursor: pointer; font-size: 12.5px; font-weight: 700; list-style: none; }
.cprog-havuz-disi > summary::-webkit-details-marker { display: none; }
.cprog-havuz-disi > summary::before { content: "▸ "; color: var(--muted); }
.cprog-havuz-disi[open] > summary::before { content: "▾ "; }
.cprog-havuz-disi > summary span { color: var(--muted); font-weight: 500; }
.cprog-havuz-disi:not([open]) > *:not(summary) { display: none; }
.cprog-havuz-disi-satir { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; padding: 0 10px 8px; }
.cprog-havuz-disi-satir select { min-height: 32px; max-width: 320px; }
.cprog-havuz-disi-satir small { flex: 1 0 100%; }
.cprog-havuz-gunler-kap { display: block; }
.cprog-havuz-gunler-bas { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: 6px; }
.cprog-havuz-mini { padding: 2px 8px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--text); font: inherit; font-size: 11.5px; cursor: pointer; }
.cprog-havuz-mini:hover { border-color: var(--primary); color: var(--primary); }
.cprog-havuz-gunler { display: grid; gap: 4px; }
.cprog-havuz-hafta { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; max-width: 720px; }
/* TAKVIM HÜCRESİ GÖRÜNÜMÜ (2026-09-13 kullanıcı: "telefon görüntüsü konu havuzu için kötü"):
   ham onay kutusu çipin solunda ayrık duruyor ve dar hücrede "Paz 13 Eyl" komşuya taşıyordu.
   Kutu GÖRSEL olarak gizlenir (klavye/erişilebilirlik durur), seçim dolu renkle okunur —
   envanter-likert kalıbının aynısı; gün adı üstte, tarih altta. */
.cprog-havuz-gun { position: relative; justify-content: center; padding: 4px 2px; font-size: 11.5px; }
.cprog-havuz-gun input[type="checkbox"] { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.cprog-havuz-gun:has(input:focus-visible) { box-shadow: 0 0 0 3px var(--primary-soft); }
.cprog-havuz-gun span { display: grid; justify-items: center; line-height: 1.15; }
.cprog-havuz-gun span small { font-size: 10px; color: var(--muted); white-space: nowrap; }
.cprog-havuz-gun:has(input:checked) span small { color: inherit; opacity: .85; }
.cprog-havuz-gun.is-haftasonu { background: var(--surface-soft); }
.cprog-havuz-gun span b { font-weight: 800; }
.cprog-havuz-olculer .cprog-havuz-dagitim { flex: 0 1 300px; }
.cprog-havuz-olculer .cprog-havuz-notalan { flex: 1 1 220px; }
.cprog-havuz-ipucu { display: block; margin-top: 6px; color: var(--primary-dark); }
/* GÜNÜ BOŞALT düğmesi (gün başlığı, 2026-09-08) — ✓ ve ⧉ özetleriyle aynı boy. */
.cprog-gun-sil { display: inline-flex; align-items: center; justify-content: center; width: 21px; height: 21px; padding: 0; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); color: var(--muted); font: inherit; font-size: 12px; line-height: 1; cursor: pointer; }
.cprog-gun-sil:hover { border-color: var(--danger); color: var(--danger); }
/* HAVUZ TÜR SEÇİMİ (2026-09-08): üç radyo çip; seçili olan dolu. */
.cprog-havuz-turler { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 8px; }
.cprog-havuz-tur { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); font-size: 12px; font-weight: 700; cursor: pointer; }
.cprog-havuz-tur small { font-weight: 500; color: var(--muted); }
.cprog-havuz-tur input { margin: 0; }
.cprog-havuz-tur.is-on { border-color: var(--primary); background: var(--primary-soft); color: var(--primary-dark); }
.cprog-havuz-olculer .cprog-havuz-saat { flex: 0 1 110px; }
@media (max-width: 640px) {
  .cprog-havuz-gun { padding: 4px 1px; font-size: 10.5px; }
  .cprog-havuz-gun span small { font-size: 8.5px; letter-spacing: -.01em; }
  .cprog-havuz-hafta { gap: 3px; }
  .cprog-havuz-olculer .field { flex: 1 1 45%; }
  .cprog-havuz-olculer .cprog-havuz-notalan, .cprog-havuz-olculer .cprog-havuz-dagitim { flex: 1 1 100%; }
}

/* TABLO / LİSTE DÜZENİ (2026-09-07): liste düzeninde günler alt alta, görevler satır; hızlı ekleme
   kutusu ve "+" her günün altında durur — ekleme yolu değişmez, yalnız yerleşim. */
.cprog-duzen-sec { display: inline-flex; gap: 2px; padding: 2px; border: 1px solid var(--border); border-radius: 9px; }
.cprog-duzen-sec .button.is-active { background: var(--primary); color: var(--on-primary); border-color: var(--primary); }
html[data-cprog-duzen="liste"] .cprog-week .exam-month { grid-template-columns: minmax(0, 1fr); gap: 8px; }
html[data-cprog-duzen="liste"] .cprog-week .exam-month-cell.appointment-week-cell { min-height: 0; padding: 8px 12px; }
html[data-cprog-duzen="liste"] .cprog-week .appointment-week-day-head { border-bottom: 1px solid var(--border); padding-bottom: 4px; }
html[data-cprog-duzen="liste"] .cprog-week .appointment-week-day-head strong { font-size: 15px; }
html[data-cprog-duzen="liste"] .cprog-week .appointment-day-list { display: grid; gap: 4px; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-chip { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 4px 12px; margin-top: 2px; padding: 6px 10px 6px 12px; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-chip > b, html[data-cprog-duzen="liste"] .cprog-week .cprog-chip > span, html[data-cprog-duzen="liste"] .cprog-week .cprog-chip > small { grid-column: 1; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-chip > b { display: inline; margin-right: 6px; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-islem { grid-row: 1 / span 3; margin: 0; padding: 0; border: 0; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-araclar { grid-column: 2; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-durum { grid-column: 3; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-hizli-hucre { margin-top: 6px; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-hizli-hucre input { min-height: 36px; }
html[data-cprog-duzen="liste"] .cprog-week .cprog-dnd-ipucu { display: none; }
@media (min-width: 1600px) { html[data-cprog-duzen="liste"] .cprog-week { max-width: 1100px; } }
/* LİSTE ÇİPİNDE DURUM MADDE İŞARETİ BASILMAZ (2026-09-07 kullanıcı: "derslerin üzerindeki yuvarlak neden
   var"): .status-passive::before "◦ " tabloda satır içi bir işaretti; liste düzeninde çip GRID olduğu için
   pseudo-eleman kendi ızgara hücresine düşüyor ve metnin üstünde tek başına bir yuvarlak kalıyordu.
   Durum zaten sol kenar rengi ve ✓/◐/✕ düğmeleriyle okunuyor. */
html[data-cprog-duzen="liste"] .cprog-week .cprog-chip::before { content: none; display: none; }
/* AYNI YUVARLAK TAKVİM DÜZENİNDE DE KALIYORDU (2026-09-17, serbest görev çipinde ölçüldü: html[data-takvim] çipi de GRID) — her hafta çipinde kapalı. */
.cprog-week .cprog-chip::before { content: none; display: none; }
/* TELEFONDA LİSTE ÇİPİ KOMPAKT (2026-09-07 kullanıcı ekran görüntüsü + "çoğu şey sığsın"): üç sütunlu
   ızgara 375 px'te metne ~80 px bırakıyor, konu harf harf dikey akıyordu ("Mevsi/mlerin/Oluşu…").
   Metin tam satır; iki düğme şeridi TEK satırda karşılıklı (araçlar solda, durum sağda). Ölçüldü:
   çip 312 → ~90 px, 7 görevlik gün 1.470 px'ten ~700 px'e. */
@media (max-width: 640px) {
  html[data-cprog-duzen="liste"] .cprog-week .cprog-chip { grid-template-columns: minmax(0, 1fr) auto; gap: 3px 8px; padding: 6px 9px 6px 10px; }
  html[data-cprog-duzen="liste"] .cprog-week .cprog-chip > b, html[data-cprog-duzen="liste"] .cprog-week .cprog-chip > span, html[data-cprog-duzen="liste"] .cprog-week .cprog-chip > small { grid-column: 1 / -1; }
  html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-islem { grid-row: auto; gap: 3px; margin-top: 2px; }
  html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-araclar { grid-column: 1; justify-self: start; }
  html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-durum { grid-column: 2; justify-self: end; }
  html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-islem .button, html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-islem button, html[data-cprog-duzen="liste"] .cprog-week .cprog-chip-islem .cprog-mini { min-height: 34px; min-width: 34px; height: 34px; }
  html[data-cprog-duzen="liste"] .cprog-week .exam-month-cell.appointment-week-cell { padding: 6px 10px; }
  html[data-cprog-duzen="liste"] .cprog-week .exam-month { gap: 6px; }
}

/* Aylık rapor ekran şeridi (yazdırmada gizli: .offer-section-picker print.css'te gizleniyor). */
.rapor-aralik { align-items: center; gap: 8px; }
.rapor-aralik .field { margin: 0; }
.rapor-aralik input[type="month"] { min-height: 34px; }

/* SİSTEMDEKİ BÜTÜN ALT MENÜLER AYNI SEKME ÇUBUĞU (2026-09-12 kullanıcı: "sistemde alt menüsü
   olan her yeri böyle stabil yap, hoşuma gitti"). Beş ayrı kalıp vardı — hap (.exam-view-tabs),
   küçük anahtar (.view-switcher), düğme sırası (.board-kademe-sekmeleri, .gorev-gorunum-sekme),
   dönem sekmesi (.yonetim-sekme) ve kademe hapları (.grade-tab). Beşi de aynı soruyu soruyor:
   "bu ekranın hangi görünümündeyim?". Markup DEĞİŞMEDİ, yalnız görünüm .alt-menu'ya çekildi;
   ekranlar kendi sınıf adlarını ve aktif işaretlerini (is-active / is-acik / button-primary)
   korur. Kural sırası: bu blok DOSYANIN SONUNDADIR — ilgili sınıfların kendi tanımları
   (satır ~1037, ~1808, ~4323) daha önce geliyor; aynı özgüllükte sonda gelen kazanır. İlk
   sürüm ortaya yazılmıştı ve .exam-view-tabs/.view-switcher tanımları onu eziyordu. */
.exam-view-tabs, .view-switcher, .board-kademe-sekmeleri, .gorev-gorunum-sekme, .yonetim-sekme, .grade-tab-row {
  display: flex; flex-wrap: wrap; gap: 4px; padding: 4px; border: 1px solid var(--border);
  border-radius: 12px; background: var(--surface-soft); box-shadow: none;
}
.exam-view-tabs a, .view-switcher a, .board-kademe-sekmeleri a, .gorev-gorunum-sekme a, .yonetim-sekme a, .grade-tab {
  display: inline-flex; align-items: center; gap: 7px; min-height: 34px; padding: 6px 14px;
  border: 0; border-radius: 9px; background: transparent; box-shadow: none;
  font-size: 13px; font-weight: 600; color: var(--muted); text-decoration: none;
}
.exam-view-tabs a:hover, .view-switcher a:hover, .board-kademe-sekmeleri a:hover, .gorev-gorunum-sekme a:hover, .yonetim-sekme a:hover, .grade-tab:hover {
  color: var(--text); background: var(--surface); border-color: transparent;
}
.exam-view-tabs a.is-active, .view-switcher a.is-active, .yonetim-sekme a.is-acik, .grade-tab.is-active,
.board-kademe-sekmeleri a.button-primary, .gorev-gorunum-sekme a.button-primary {
  color: var(--on-primary); background: var(--primary); box-shadow: none;
}
.board-kademe-sekmeleri a.button-primary:hover, .gorev-gorunum-sekme a.button-primary:hover { background: var(--primary); }
/* .heading-actions sağa yaslar (justify-content: flex-end); sekme çubuğu içinde bu, sekmeleri
   boş bir barın sağ ucuna itiyordu (kopya sayfada görüldü). Çubuk içeriği kadar ve soldan başlar. */
/* Görünüm anahtarları (hafta/ay, tablo/liste, kademe, dönem) araç çubuğu içinde yan yana durur;
   tam genişlik alsalardı yanlarındaki Önceki/Sonraki düğmelerini alt satıra iterlerdi. Aile
   sekme çubuğu (.alt-menu) tek başına satırdır ve tam genişlik kalır. */
.gorev-gorunum-sekme, .exam-view-tabs, .view-switcher, .board-kademe-sekmeleri, .yonetim-sekme {
  justify-content: flex-start; width: max-content; max-width: 100%;
}
/* Kademe hapının sayaç rozeti aktif/pasifte okunur kalsın. */
.grade-tab b { background: rgba(0,0,0,.08); }
.grade-tab.is-active b { background: rgba(255,255,255,.28); }

/* HAVUZ v4 (2026-09-12 kullanıcı: "bu renklerin bir mantığı olsun… serbest görev ekleme… hatırlatma…
   sık verilenler"). Renk lejantı ders AİLESİNİ yazar (ton sunucudan, ders_renk_tonu); hatırlatma
   çipi sağda "N gün" rozeti taşır; serbest blok başlık + tür + sık verilen çipleri. */
.cprog-havuz-lejant { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; margin: -2px 0 8px; color: var(--muted); font-size: 11.5px; }
.cprog-havuz-lejant-oge { --ders-h: 200; display: inline-flex; align-items: center; gap: 5px; color: var(--text); font-weight: 600; }
.cprog-havuz-lejant-oge::before { content: ""; width: 9px; height: 9px; border-radius: 50%; background: hsl(var(--ders-h) 60% 48%); }
.cprog-havuz-lejant-matematik { --ders-h: 222; }
.cprog-havuz-lejant-fen { --ders-h: 150; }
.cprog-havuz-lejant-turkce { --ders-h: 30; }
.cprog-havuz-lejant-sosyal { --ders-h: 350; }
.cprog-havuz-lejant-dil { --ders-h: 275; }
.cprog-havuz-lejant-diger { --ders-h: 200; }
.cprog-havuz-lejant-diger::before { background: hsl(200 12% 58%); }
.cprog-havuz-cip.is-hatirlatma { border-left-color: var(--warning, #b7791f); }
.cprog-havuz-cip.is-hatirlatma small { margin-left: 8px; padding: 1px 6px; border-radius: 999px; background: var(--warning-soft, #fdf1d8); color: var(--warning, #b7791f); font-size: 10.5px; font-weight: 700; }
.cprog-havuz-tur-hatirlatma.is-on, .cprog-havuz-tur-serbest.is-on { border-color: var(--primary); }
.cprog-havuz-serbest { margin: 0 0 10px; padding: 10px 12px; border: 1px dashed var(--border); border-radius: 9px; background: var(--surface-soft); }
.cprog-havuz-serbest-satir { display: flex; flex-wrap: wrap; gap: 8px 12px; }
.cprog-havuz-serbest-satir .field { margin: 0; }
.cprog-havuz-serbest-baslik { flex: 1 1 320px; }
.cprog-havuz-serbest-satir .field:not(.cprog-havuz-serbest-baslik) { flex: 0 1 260px; }
.cprog-havuz-serbest > small { display: block; margin-top: 6px; }
.cprog-havuz-sik { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 8px; }
.cprog-havuz-sik-oge { border-color: var(--primary-soft); background: var(--surface); }
.cprog-havuz-sik-oge small { margin-left: 4px; color: var(--muted); font-weight: 600; }
:root[data-theme="dark"] .cprog-havuz-cip.is-hatirlatma small { background: rgba(255, 196, 96, .16); color: #f2c56b; }

/* ENVANTERLER VE ANKETLER (2026-09-12): katalog kartları, atama formu, sonuç çubukları, öğrenci formu. */
.envanter-katalog { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 10px; }
.envanter-kart { display: grid; gap: 4px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); }
.envanter-kart.is-secili { border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-soft); }
.envanter-kart h3 { margin: 0; font-size: 14.5px; }
.envanter-kart p { margin: 0; color: var(--muted); font-size: 13px; }
.envanter-kart small { color: var(--muted); font-size: 11.5px; }
.envanter-kart .button { justify-self: start; margin-top: 4px; }
.gorev-ogrenci-arac { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: 6px; }
.gorev-ogrenci-arac .gorev-ogrenci-ara { flex: 1 1 240px; }
.envanter-tablo td.envanter-islem form { display: inline; }
.envanter-cubuklar { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 6px; }
.envanter-cubuklar li { display: grid; grid-template-columns: minmax(120px, 190px) minmax(0, 1fr) 44px; align-items: center; gap: 10px; font-size: 13px; }
.envanter-cubuklar li.is-baskin .envanter-cubuk-ad { font-weight: 700; color: var(--primary); }
.envanter-cubuklar .mini-progress-bar { display: block; width: 100%; max-width: none; height: 10px; border-radius: 999px; background: var(--surface-soft); overflow: hidden; }
.envanter-cubuklar .mini-progress-bar span { display: block; height: 100%; border-radius: 999px; background: var(--primary); }
.envanter-cubuklar li.is-baskin .mini-progress-bar span { background: var(--success); }
.envanter-cubuklar b { text-align: right; font-variant-numeric: tabular-nums; }
.envanter-profil { margin: 0 0 4px; font-size: 15px; }
.envanter-bant { margin: 0 0 8px; padding: 8px 12px; border-radius: 9px; background: var(--surface-soft); }
.envanter-bant-yuksek { background: var(--danger-soft, #fde8ec); color: var(--danger); }
.envanter-bant-orta, .envanter-bant-hafif { background: var(--warning-soft); color: var(--warning); }
.envanter-bant-dusuk { background: var(--success-soft); color: var(--success); }
.envanter-bant span { display: block; margin-top: 4px; font-size: 13px; }
.envanter-yorum { margin-top: 12px; padding: 10px 12px; border-left: 4px solid var(--primary); border-radius: 0 10px 10px 0; background: var(--surface-soft); }
.envanter-yorum.is-uyari { border-left-color: var(--danger); }
.envanter-yorum h4 { margin: 0 0 4px; font-size: 13.5px; }
.envanter-yorum p { margin: 0; font-size: 13px; }
.envanter-oneriler { margin: 6px 0 0; padding-left: 18px; font-size: 13px; }
.envanter-meslekler { margin-top: 6px !important; }
.envanter-madde-detay { margin-top: 12px; }
.envanter-madde-detay:not([open]) > *:not(summary) { display: none; }
.envanter-madde-detay > summary { cursor: pointer; }
.envanter-madde-detay > summary small { margin-left: 6px; color: var(--muted); }
.envanter-cevaplar { display: grid; gap: 8px; margin: 0; }
.envanter-cevap { padding: 8px 12px; border: 1px solid var(--border); border-radius: 9px; }
.envanter-cevap dt { font-size: 12.5px; font-weight: 700; color: var(--muted); }
.envanter-cevap dd { margin: 4px 0 0; font-size: 14px; }
.envanter-uyari { margin: 0 0 8px; font-size: 12.5px; }
.envanter-onceki { margin-top: 12px; display: grid; gap: 4px; font-size: 13px; }
.envanter-mini-not { margin: 4px 0 0; font-size: 12.5px; }
.envanter-360-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.envanter-360-liste li { padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; }
.envanter-360-liste li > header { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 10px; align-items: baseline; }
.envanter-360-liste li > header strong { font-size: 13.5px; }
.envanter-360-liste li > header small { color: var(--muted); }
.envanter-360-liste .envanter-cubuklar li { grid-template-columns: minmax(90px, 140px) minmax(0, 1fr) 40px; padding: 0; border: 0; font-size: 12px; }
/* Öğrenci doldurma ekranı */
.envanter-baslik-karti h1 { margin: 2px 0 6px; font-size: 22px; }
.envanter-baslik-karti p { margin: 0 0 4px; }
.envanter-yonerge p { margin: 0; }
.envanter-madde { margin: 0; padding: 12px 14px; border: 1px solid var(--border); }
.envanter-madde legend { padding: 0 4px; font-weight: 600; font-size: 14.5px; line-height: 1.4; }
.envanter-madde-no { display: inline-block; min-width: 24px; padding: 1px 6px; border-radius: 999px; background: var(--primary); color: var(--on-primary); font-size: 12px; text-align: center; }
.envanter-madde textarea { width: 100%; margin-top: 8px; }
.envanter-likert { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 6px; margin-top: 8px; }
.envanter-likert-sec { position: relative; display: block; cursor: pointer; }
.envanter-likert-sec input { position: absolute; inset: 0; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.envanter-likert-sec span { display: grid; justify-items: center; gap: 2px; padding: 8px 4px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); text-align: center; transition: border-color .15s, background .15s; }
.envanter-likert-sec span b { font-size: 16px; }
.envanter-likert-sec span small { font-size: 11px; color: var(--muted); line-height: 1.2; }
.envanter-likert-sec input:checked + span { border-color: var(--primary); background: var(--primary); color: var(--on-primary); }
.envanter-likert-sec input:checked + span small { color: inherit; }
.envanter-likert-sec input:focus-visible + span { box-shadow: 0 0 0 3px var(--primary-soft); }
.envanter-secenekler { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.envanter-secenek { position: relative; cursor: pointer; }
.envanter-secenek input { position: absolute; inset: 0; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.envanter-secenek span { display: inline-block; padding: 7px 12px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); font-size: 13.5px; }
.envanter-secenek input:checked + span { border-color: var(--primary); background: var(--primary); color: var(--on-primary); }
.envanter-secenek input:focus-visible + span { box-shadow: 0 0 0 3px var(--primary-soft); }
.envanter-gonder { text-align: center; }
.envanter-gonder .button-large { padding: 12px 28px; font-size: 16px; }
.ogrenci-anket-liste, .ogrenci-odev-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.ogrenci-anket-liste li, .ogrenci-odev-liste li { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 6px 12px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; }
.ogrenci-anket-liste li.is-bitti { opacity: .7; }
.ogrenci-odev-liste li.is-bitti { opacity: .9; }
.ogrenci-anket-liste li span, .ogrenci-odev-liste li > span:first-child { display: grid; }
.ogrenci-anket-liste li small, .ogrenci-odev-liste li small { color: var(--muted); }
@media (max-width: 640px) {
  .envanter-likert { gap: 3px; }
  .envanter-likert-sec span small { display: none; }
  .envanter-likert-sec span { padding: 10px 2px; }
  .envanter-cubuklar li { grid-template-columns: minmax(90px, 1fr) minmax(0, 1.4fr) 40px; }
}
.envanter-olcek-lejant { display: flex; flex-wrap: wrap; gap: 4px 12px; margin: 0; padding: 8px 18px 10px; border-bottom: 1px solid var(--border); font-size: 12.5px; color: var(--muted); }
.envanter-olcek-lejant b { color: var(--text); }
/* KÂĞIT FORM (envanter-kagit.php, 2026-09-14): işaretlenecek boş daireler + yazı satırları. Belge
   paleti (--pd-*) print.css'ten; burada yalnız yerleşim. */
.envanter-kagit-lejant { display: flex; flex-wrap: wrap; gap: 4px 14px; }
.envanter-kagit-maddeler { margin: 0; padding-left: 30px; }
.envanter-kagit-maddeler > li { margin: 0 0 9px; break-inside: avoid; page-break-inside: avoid; }
.envanter-kagit-soru { margin: 0 0 4px; font-weight: 600; }
.envanter-kagit-secenekler { display: flex; flex-wrap: wrap; gap: 4px 16px; font-size: 12px; }
.envanter-kagit-secenekler > span { display: inline-flex; align-items: center; gap: 5px; }
.envanter-kagit-secenekler i { display: inline-block; width: 13px; height: 13px; border: 1.5px solid currentColor; border-radius: 50%; }
.envanter-kagit-satirlar { display: grid; gap: 14px; margin-top: 6px; }
.envanter-kagit-satirlar span { display: block; border-bottom: 1px solid currentColor; opacity: .45; height: 12px; }
.envanter-kagit-burdon td { width: auto; padding: 2px; text-align: center; font-family: ui-monospace, monospace; font-size: 13px; }
.envanter-dokum { margin-left: auto; }
.envanter-sonuc-dokum td, .envanter-sonuc-dokum th { font-size: 11px; }
/* TELEFONDA LEJANT YAPIŞKAN (2026-09-14): kutuların etiketi gizlidir; "3 ne demekti" sorusu
   her soruda sorulur. Kabı soru kartı olduğu için kart boyunca yapışır, üst çubuk telefonda
   artık sabit olmadığından top:0 doğrudur. */
@media (max-width: 700px) {
  .envanter-olcek-lejant { position: sticky; top: 0; z-index: 3; gap: 2px 10px; padding: 8px 14px; background: var(--surface); box-shadow: 0 6px 12px -8px rgba(9, 20, 60, .25); }
  .envanter-olcek-lejant span { white-space: nowrap; }
  .envanter-olcek-lejant.envanter-olcek-lejant-ara { position: static; box-shadow: none; }
}

/* Öğrenci paneli — bekleyen anket şeridi (2026-09-12): çalışma programının üstünde tek satır. */
.ogrenci-anket-serit { display: flex; align-items: center; gap: 12px; margin: 0 0 12px; padding: 12px 14px; border: 1px solid var(--primary-soft); border-radius: 12px; background: var(--primary-soft); color: var(--text); text-decoration: none; }
.ogrenci-anket-serit:hover { border-color: var(--primary); }
.ogrenci-anket-serit > span:nth-child(2) { display: grid; flex: 1; line-height: 1.35; }
.ogrenci-anket-serit small { color: var(--muted); }
.ogrenci-anket-serit-rozet { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--primary); color: var(--on-primary); font-weight: 800; flex: none; }
.ogrenci-anket-serit-ok { font-size: 18px; color: var(--primary); }
.envanter-grup + .envanter-grup { margin-top: 16px; }
.envanter-grup-baslik { margin-bottom: 8px; }
.envanter-grup-baslik h3 { display: flex; align-items: baseline; gap: 8px; margin: 0; font-size: 14px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); }
.envanter-grup-baslik h3 small { padding: 0 7px; border-radius: 999px; background: var(--surface-soft); font-size: 11.5px; letter-spacing: 0; }
.envanter-grup-baslik p { margin: 2px 0 0; font-size: 12.5px; color: var(--muted); }
.envanter-bilgi h2 { margin: 0 0 8px; font-size: 16px; }
.envanter-bilgi-blok + .envanter-bilgi-blok { margin-top: 10px; }
.envanter-bilgi-blok h3 { margin: 0 0 4px; font-size: 13.5px; color: var(--primary); }
.envanter-bilgi-blok ul { margin: 0; padding-left: 20px; font-size: 13.5px; line-height: 1.5; }
.envanter-bilgi-detay .envanter-bilgi-blok { margin-top: 8px; }

/* ÖZEL DERSLERİM — öğretmen ders notu kartları (2026-09-12). */
.ders-notu-gun { margin: 16px 0 6px; font-size: 13px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); }
.ders-notu-gun:first-child { margin-top: 0; }
.ders-notu-kart { padding: 0; margin-bottom: 8px; }
.ders-notu-kart > summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 12px; padding: 12px 14px; cursor: pointer; list-style: none; }
.ders-notu-kart > summary::-webkit-details-marker { display: none; }
.ders-notu-kart:not([open]) > *:not(summary) { display: none; }
.ders-notu-kart.is-notlu { border-left: 4px solid var(--success); }
.ders-notu-ozet { display: grid; gap: 2px; }
.ders-notu-ozet span { color: var(--muted); font-size: 12.5px; }
.ders-notu-rozetler { display: flex; flex-wrap: wrap; gap: 4px; }
.ders-notu-govde { padding: 0 14px 14px; display: grid; gap: 10px; }
.ders-notu-onceki { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px 12px; padding: 10px 12px; border-radius: 10px; background: var(--surface-soft); }
.ders-notu-onceki p { margin: 4px 0 0; font-size: 13px; }
.ders-notu-onceki small { color: var(--muted); }
.ders-notu-odev-islem { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.ders-notu-odev-islem form { display: contents; }
.ders-notu-form { display: grid; gap: 8px; }
.ders-notu-form .field { margin: 0; }
.ders-notu-form-alt { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.ders-notu-onbilgi { color: var(--success); }
.ders-notu-360-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.ders-notu-360-liste li { padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; }
.ders-notu-360-liste header { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.ders-notu-360-liste header span { color: var(--muted); font-size: 12.5px; }
.ders-notu-360-liste p { margin: 4px 0 0; font-size: 13.5px; }
.ders-notu-konu strong, .ders-notu-odev strong { color: var(--muted); font-weight: 700; }
.ozel-ders-hafta { flex: none; }
.approval-ogretmen-notu { margin-left: 8px; font-size: 11.5px; vertical-align: middle; }

/* HAFTALIK İLERLEME PUANI (2026-09-13): puan 1-5, renk ANLAMDAN gelir (kırmızı zayıf → yeşil iyi)
   ve token'dan okunur — sabit hex koyu temada okunmaz. Rozet ile seçici AYNI sınıfları kullanır:
   koçun forma verdiği renk, 360'ta gördüğü renkle aynı olmazsa iki ekran ayrışır. */
.haftalik-puan { border: 0; padding: 0; margin: 0; }
.haftalik-puan legend { padding: 0; font-size: 13px; font-weight: 600; }
.haftalik-puan legend small { font-weight: 400; color: var(--muted); }
.haftalik-puan-secenekler { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
.haftalik-puan-sec { display: flex; align-items: center; gap: 6px; padding: 6px 10px; border: 1px solid var(--border);
  border-radius: 8px; cursor: pointer; background: var(--surface); }
.haftalik-puan-sec span { display: flex; flex-direction: column; line-height: 1.15; }
.haftalik-puan-sec b { font-size: 14px; }
.haftalik-puan-sec small { color: var(--muted); font-size: 11.5px; }
.haftalik-puan-sec:has(input:checked) { border-color: var(--primary); box-shadow: 0 0 0 1px var(--primary); }
.haftalik-puan-rozet { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 999px;
  border: 1px solid var(--border); font-size: 12px; font-weight: 600; }
.haftalik-puan-ozet { margin: 0 0 10px; }
.haftalik-puan-ozet p { margin: 0 0 6px; }
.haftalik-puan-ozet small { color: var(--muted); font-weight: 400; margin-left: 8px; }
.haftalik-puan-serit { display: flex; flex-wrap: wrap; gap: 6px; margin: 0; padding: 0; list-style: none; }
.haftalik-puan-serit li { flex-direction: column; align-items: flex-start; border-radius: 8px; padding: 4px 8px; }
.haftalik-puan-serit small { font-weight: 400; font-size: 11px; color: var(--muted); }
.puan-1 { background: var(--danger-soft); border-color: var(--danger); color: var(--danger); }
.puan-2 { background: var(--danger-soft); border-color: var(--border); color: var(--danger); }
.puan-3 { background: var(--warning-soft); border-color: var(--border); color: var(--warning); }
.puan-4 { background: var(--success-soft); border-color: var(--border); color: var(--success); }
.puan-5 { background: var(--success-soft); border-color: var(--success); color: var(--success); }
.haftalik-puan-serit .puan-1 small, .haftalik-puan-serit .puan-2 small,
.haftalik-puan-serit .puan-3 small, .haftalik-puan-serit .puan-4 small,
.haftalik-puan-serit .puan-5 small { color: inherit; opacity: .8; }

/* ENVANTER ÖNİZLEME + FORM DERLEMESİ (2026-09-13 kullanıcı: "envanterler güzel durmuyor" +
   "tıklayınca açılsın, deneyelim, düzenle de olsun"). İki karar: (1) FORM DARALIR — 1450 px'e
   yayılan beş dev kutu, içeriği 60 karakterlik soruya taşıyordu; gövde 820 px'e iner, ölçek
   kutuları 92 px'te tavanlanır. (2) SORULAR TEK KARTTA — soru başına ayrı gölgeli kart 24 kez
   tekrarlanınca sayfa kart yığınına dönüyordu; maddeler tek kartın içinde ince çizgilerle ayrılır. */
.envanter-form { display: grid; gap: 12px; width: 100%; max-width: 820px; margin-inline: auto; }
.envanter-icerik > .card, .envanter-icerik > .flash { width: 100%; max-width: 820px; margin-inline: auto; }
.envanter-form .card { padding: 16px 18px; }
.envanter-form .envanter-maddeler { padding: 4px 0; }
/* legend fieldset kenarlığına oturur; float ile normal akışa alınır (yalnız üst çizgi var). */
.envanter-madde { margin: 0; padding: 12px 18px; border: 0; border-top: 1px solid var(--border); }
.envanter-maddeler .envanter-madde:first-of-type { border-top: 0; }
.envanter-madde legend { float: left; width: 100%; margin: 0; padding: 0; font-weight: 600; font-size: 14px; line-height: 1.45; }
.envanter-madde::after { content: ""; display: block; clear: both; }
/* SEÇENEK SAYISI KADAR SÜTUN (2026-09-20 kullanıcı: "tasarımı daha güzel yap, sığsın"): ızgara 5 sütuna sabitti;
   6 seçenekli ölçekte (WHO-5, telefon ölçeği) altıncı kutu alt satıra düşüyor, 2-3 seçeneklide kutular solda
   yığılıyordu. Sütun sayısı markup'taki envanter-likert-N sınıfından gelir; kutular EŞİT boyda (uzun etiket
   komşusunu kısa bırakmaz) ve satır, okunur bir genişlikte sınırlı kalır. */
.envanter-likert { clear: both; grid-template-columns: repeat(var(--env-n, 5), minmax(0, 1fr)); gap: 6px; max-width: calc(var(--env-n, 5) * 132px); align-items: stretch; padding-top: 2px; }
.envanter-likert-2 { --env-n: 2; } .envanter-likert-3 { --env-n: 3; } .envanter-likert-4 { --env-n: 4; }
.envanter-likert-5 { --env-n: 5; } .envanter-likert-6 { --env-n: 6; } .envanter-likert-7 { --env-n: 7; }
.envanter-likert-sec { display: flex; }
.envanter-likert-sec span { flex: 1; align-content: center; min-height: 52px; }
.envanter-likert-sec span { padding: 6px 4px; border-radius: 10px; gap: 2px; background: var(--surface-soft); }
.envanter-likert-sec span b { font-size: 13.5px; }
.envanter-likert-sec span small { font-size: 11px; text-wrap: balance; }
.envanter-likert-sec input:hover + span { border-color: var(--primary); background: var(--surface); }
.envanter-likert-sec input:checked + span { background: var(--primary); box-shadow: 0 4px 12px -6px var(--primary); }
.envanter-secenekler, .envanter-madde textarea { clear: both; }
.envanter-deneme-serit strong { margin-right: 4px; }
.envanter-onizleme-eylemler { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 10px 0 0; }
.envanter-onizleme-listesi { margin: 0; padding: 0; list-style: none; display: grid; gap: 6px; }
.envanter-onizleme-listesi small { margin-left: 6px; }
.envanter-eylem-satiri { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.envanter-eylem-satiri .button { margin-top: 0; }
.envanter-kart h3 a { color: inherit; text-decoration: none; }
.envanter-kart h3 a:hover { color: var(--primary); text-decoration: underline; }
.envanter-ozel-rozet { justify-self: start; }
/* Kapalı <details> içeriği açıkça gizlenir (UA kuralını display veren sınıflar ezer — depo dersi). */
.envanter-duzenle-detay:not([open]) > *:not(summary) { display: none; }
.envanter-duzenle-detay > summary { cursor: pointer; }
.envanter-duzenle-detay > summary small { margin-left: 6px; color: var(--muted); }
.envanter-duzenle-form { display: grid; gap: 10px; margin-top: 12px; }
.envanter-duzenle-maddeler { display: grid; gap: 8px; max-height: 430px; overflow: auto; padding: 10px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }

/* ÖĞRENCİ PANELİ TEPESİ MARKALI (2026-09-13 kullanıcı: "öğrenci sayfası kötü görünüyor").
   Düz beyaz çubuk yerine kurum degradesi; yazılar --on-primary (koyu temada --primary AÇILIR,
   sabit beyaz yazılamaz — on-primary dersi). Marka adı TEK satır (ekran görüntüsünde
   "Eğitimgen / Sis" ikiye kırılıyordu). Öğrencinin baş harfleri avatar rozetinde. */
.ogrenci-panel-tepe { border-bottom: 0; padding: 14px 22px;
  background: linear-gradient(120deg, var(--primary) 0%, var(--primary-alt) 100%); color: var(--on-primary); }
.ogrenci-panel-marka strong, .ogrenci-panel-kimlik strong { white-space: nowrap; }
.ogrenci-panel-marka img { background: #fff; padding: 3px; border-radius: 10px; box-shadow: 0 2px 8px rgba(0, 0, 0, .18); }
.ogrenci-panel-marka small, .ogrenci-panel-kimlik small { color: var(--on-primary); opacity: .78; }
.ogrenci-panel-tepe .button-ghost { border-color: color-mix(in srgb, var(--on-primary) 45%, transparent); color: var(--on-primary); }
.ogrenci-panel-tepe .button-ghost:hover { background: color-mix(in srgb, var(--on-primary) 14%, transparent); border-color: var(--on-primary); color: var(--on-primary); }
.ogrenci-avatar { display: grid; place-items: center; width: 38px; height: 38px; border-radius: 50%;
  background: color-mix(in srgb, var(--on-primary) 18%, transparent);
  border: 1.5px solid color-mix(in srgb, var(--on-primary) 55%, transparent);
  font-weight: 800; font-size: 14px; letter-spacing: .02em; }
.ogrenci-panel-icerik { padding-top: 20px; }
.ogrenci-panel-icerik .overview-section-heading h2 { font-size: 17px; }
.ogrenci-panel-icerik .overview-section-heading > div > p { margin: 2px 0 0; color: var(--muted); font-size: 12.5px; }
/* Selamlaşma satırı: panelin ilk kartının üstünde tek satır — sayfaya sahiplik duygusu verir. */
.ogrenci-selam { margin: 0; font-size: 15px; }
.ogrenci-selam b { font-size: 17px; }
.ogrenci-selam small { display: block; margin-top: 1px; color: var(--muted); font-size: 12.5px; }
@media (max-width: 640px) {
  .ogrenci-panel-tepe { padding: 10px 12px; }
  .ogrenci-avatar { width: 32px; height: 32px; font-size: 12px; }
  .envanter-madde { padding: 10px 12px; }
  .envanter-likert { max-width: none; }
  .envanter-likert-sec span { min-height: 44px; }
}

/* BURDON DİKKAT TESTİ (2026-09-13): harf ızgarası takvim gibi sıkı bir tablo; hücre dokunma
   hedefi ≥ 32 px (telefonda test parmakla yapılır). Kilitliyken bulanık + tıklanamaz — süre
   "Başla" ile işler; işaretli hücre dolu renk. Onay kutusu görünmez, durum renkle okunur. */
.burdon-ust { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-bottom: 10px; }
.burdon-sayac { min-width: 64px; font-size: 22px; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--primary-dark); }
.burdon-hedef-rozet b { display: inline-block; min-width: 22px; padding: 1px 6px; border: 1px solid var(--primary); border-radius: 6px; text-align: center; color: var(--primary-dark); background: var(--primary-soft); }
.burdon-karti { min-width: 0; } /* form grid'inde kart ızgara kadar genişleyip sayfayı 372 px taşırıyordu (768 px'te ölçüldü) */
.burdon-izgara { display: grid; gap: 2px; user-select: none; }
.burdon-sutun-34 { grid-template-columns: repeat(34, minmax(0, 1fr)); }
.burdon-izgara.is-kilitli { filter: blur(4px); pointer-events: none; opacity: .55; }
.burdon-hucre { position: relative; display: block; cursor: pointer; }
.burdon-hucre input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; }
.burdon-hucre span { display: grid; place-items: center; min-height: 26px; border: 1px solid var(--border); border-radius: 5px;
  background: var(--surface); font-family: ui-monospace, Consolas, monospace; font-size: 13px; line-height: 1; }
.burdon-hucre input:checked + span { background: var(--primary); border-color: var(--primary); color: var(--on-primary); font-weight: 700; }
.burdon-hucre input:focus-visible + span { box-shadow: 0 0 0 2px var(--primary-soft); }
.envanter-kaynak { max-width: 820px; margin: 0 auto 10px; padding: 8px 12px; border-left: 3px solid var(--border);
  color: var(--muted); font-size: 12.5px; }
.envanter-performans-tablo td { font-variant-numeric: tabular-nums; }
@media (max-width: 900px) {
  /* Telefonda 34 sütun sığmaz: ızgara kendi kabında yatay kayar (sayfa DEĞİL — depo kuralı). */
  .burdon-izgara { overflow-x: auto; grid-auto-rows: min-content; }
  .burdon-sutun-34 { grid-template-columns: repeat(34, 30px); }
  .burdon-hucre span { min-height: 30px; }
}

/* ÖĞRENCİ 360 ENVANTER ŞERİDİ (2026-09-13): metrik şeridinin altında çip dizisi; dikkat isteyen
   sonuç (orta/yüksek bant, yüksek alt ölçek, düşük odak) kırmızı tonda. Profil kartındaki tanıma
   satırları aynı dl düzenini paylaşır; sağlık satırı vurgulu. */
.envanter-360-serit { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: -6px 0 14px; }
.envanter-360-serit-baslik { font-size: 11.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); margin-right: 4px; }
.envanter-360-cip { display: inline-flex; flex-direction: column; gap: 1px; padding: 5px 10px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); color: var(--text); text-decoration: none; line-height: 1.2; }
.envanter-360-cip span { font-size: 11px; color: var(--muted); }
.envanter-360-cip b { font-size: 12.5px; }
a.envanter-360-cip:hover { border-color: var(--primary); color: var(--primary-dark); }
.envanter-360-cip.is-uyari { border-color: var(--danger); background: var(--danger-soft); }
.envanter-360-cip.is-uyari b { color: var(--danger); }
.envanter-360-cip.is-bekliyor { border-style: dashed; background: var(--warning-soft); }
.envanter-360-cip.is-bekliyor b { color: var(--warning); }
.student-profile-tanima-baslik { grid-column: 1 / -1; margin-top: 8px; padding-top: 8px; border-top: 1px dashed var(--border); }
.student-profile-tanima-baslik dt { color: var(--primary-dark); }
.student-profile-tanima.is-uyari dd { color: var(--danger); font-weight: 600; }

/* ENVANTER ÇUBUK TONLARI (2026-09-13 kullanıcı: "skorlar renkli ve açıklayıcı"): ton tek kaynaktan
   (envanter_cubuk_tonu). yuksek=dikkat (kırmızı), orta=sarı, dusuk=iyi (yeşil), baskin=öne çıkan (mavi). */
.envanter-cubuklar li.envanter-ton-yuksek .mini-progress-bar span { background: var(--danger); }
.envanter-cubuklar li.envanter-ton-orta .mini-progress-bar span { background: var(--warning); }
.envanter-cubuklar li.envanter-ton-dusuk .mini-progress-bar span { background: var(--success); }
.envanter-cubuklar li.envanter-ton-baskin .mini-progress-bar span { background: var(--primary); }
.envanter-cubuklar li.envanter-ton-notr .mini-progress-bar span { background: var(--muted); opacity: .55; }
.envanter-cubuklar li.envanter-ton-yuksek b { color: var(--danger); }
.envanter-cubuklar li.envanter-ton-orta b { color: var(--warning); }
.envanter-cubuklar li.envanter-ton-dusuk b { color: var(--success); }
.envanter-duzey-etiket { display: inline-block; margin-left: 4px; padding: 1px 6px; border-radius: 999px; font-size: 10.5px; font-weight: 700; background: var(--surface-soft); color: var(--muted); }
.envanter-ton-yuksek .envanter-duzey-etiket { background: var(--danger-soft); color: var(--danger); }
.envanter-ton-orta .envanter-duzey-etiket { background: var(--warning-soft); color: var(--warning); }
.envanter-ton-dusuk .envanter-duzey-etiket { background: var(--success-soft); color: var(--success); }
.envanter-360-kart-eylemler { display: flex; flex-wrap: wrap; gap: 6px; }
.envanter-360-satir-eylem { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.envanter-360-cip.is-rapor { border-style: solid; border-color: var(--primary); }
.envanter-360-cip.is-rapor b { color: var(--primary-dark); }

/* ENVANTERLERİM (2026-09-13): personelin kendine uyguladığı envanterler — katalog kartları + liste. */
.kendi-envanter-grup { margin: 14px 0 6px; font-size: 12px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.kendi-envanter-katalog { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 10px; }
.kendi-envanter-kart { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
.kendi-envanter-kart p { margin: 0; font-size: 12.5px; color: var(--text); }
.kendi-envanter-kart form { margin-top: auto; }
.kendi-envanter-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.kendi-envanter-liste li { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; }
.kendi-envanter-liste li .button { margin-left: auto; }
.envanter-personel-form .envanter-form { max-width: 900px; }
.personel-envanter-serit { margin: 0; }

/* KİŞİSEL TEMA EFEKTLERİ (2026-09-13): ana panelde süzülen parçacıklar. Düşük opaklık + pointer-events
   yok — metnin üstünden geçse de okumayı bozmaz; hareket azaltma açıksa betik hiç kurmaz. Konum/süre
   CSS değişkeniyle (setProperty, CSSOM) gelir — katı CSP altında satır içi style yok. */
.kisisel-efekt { position: fixed; inset: 0; overflow: hidden; pointer-events: none; z-index: 1; }
.kisisel-parcacik { position: absolute; left: var(--x, 50%); top: -6vh; width: 26px; height: 26px; opacity: 0;
  transform: scale(var(--boyut, 1)); animation: kisisel-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite; }
@keyframes kisisel-dus {
  0% { transform: translate3d(0, 0, 0) rotate(0deg) scale(var(--boyut, 1)); opacity: 0; }
  8% { opacity: .85; }
  50% { transform: translate3d(26px, 55vh, 0) rotate(160deg) scale(var(--boyut, 1)); }
  92% { opacity: .8; }
  100% { transform: translate3d(-18px, 112vh, 0) rotate(330deg) scale(var(--boyut, 1)); opacity: 0; }
}
.kisisel-efekt-yaprak .kisisel-parcacik { width: 30px; height: 19px; border-radius: 0 100% 0 100%; background: linear-gradient(135deg, hsl(calc(18 + var(--ton, 0) * .9), 85%, 50%), hsl(calc(30 + var(--ton, 0) * .7), 80%, 40%)); box-shadow: inset 0 0 0 1px rgba(80,30,0,.15); }
.kisisel-efekt-yaprak .kisisel-parcacik::after { content: ''; position: absolute; left: 4%; top: 48%; width: 92%; height: 1px; background: rgba(60,20,0,.35); transform: rotate(-32deg); }
.kisisel-efekt-kabarcik .kisisel-parcacik { border-radius: 50%; border: 2px solid rgba(0, 150, 170, .55); background: rgba(0, 170, 190, .14); animation-name: kisisel-yuksel; }
@keyframes kisisel-yuksel {
  0% { transform: translate3d(0, 0, 0) scale(var(--boyut, 1)); opacity: 0; top: 104vh; }
  10% { opacity: .55; }
  100% { transform: translate3d(14px, -112vh, 0) scale(var(--boyut, 1)); opacity: 0; top: 104vh; }
}
.kisisel-efekt-kar .kisisel-parcacik { width: 9px; height: 9px; border-radius: 50%; background: #fff; box-shadow: 0 0 6px rgba(120, 160, 230, .9); }
.kisisel-efekt-tacyaprak .kisisel-parcacik { width: 16px; height: 22px; border-radius: 100% 0 100% 0; background: hsl(calc(270 + var(--ton, 0) * .3), 60%, calc(60% + var(--ton, 0) * .15)); }
.kisisel-efekt-isik .kisisel-parcacik { width: 3px; height: 38vh; border-radius: 3px; top: -40vh; background: linear-gradient(180deg, rgba(255, 190, 60, 0), rgba(255, 190, 60, .35), rgba(255, 190, 60, 0)); animation-name: kisisel-huzme; }
@keyframes kisisel-huzme { 0% { transform: translate3d(0, 0, 0); opacity: 0; } 15% { opacity: .5; } 85% { opacity: .35; } 100% { transform: translate3d(30px, 150vh, 0); opacity: 0; } }
:root[data-theme="dark"] .kisisel-efekt-yaprak .kisisel-parcacik { filter: brightness(1.25); }
@media (prefers-reduced-motion: reduce) { .kisisel-efekt { display: none; } }
.kisisel-tema-onizleme { display: inline-block; width: 14px; height: 14px; border-radius: 50%; vertical-align: -2px; margin-right: 6px; }

/* KİŞİSEL TEMA — 6 yeni efekt (2026-09-13). Şekiller CSS'ten, konum/süre değişkenden. */
.kisisel-efekt-atom .kisisel-parcacik { width: 30px; height: 30px; border-radius: 50%; border: 1.5px solid rgba(79,70,229,.45); animation: kisisel-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite, kisisel-donus 4s linear infinite; }
.kisisel-efekt-atom .kisisel-parcacik::before { content: ''; position: absolute; inset: -6px 8px; border-radius: 50%; border: 1.5px solid rgba(99,102,241,.35); transform: rotate(60deg); }
.kisisel-efekt-atom .kisisel-parcacik::after { content: ''; position: absolute; top: -3px; left: 50%; width: 6px; height: 6px; margin-left: -3px; border-radius: 50%; background: #6366f1; box-shadow: 0 0 6px rgba(99,102,241,.8); }
@keyframes kisisel-donus { to { rotate: 360deg; } }
.kisisel-efekt-yildiz .kisisel-parcacik { width: 14px; height: 14px; background: hsl(calc(300 + var(--ton, 0) * .6), 85%, 72%); clip-path: polygon(50% 0, 61% 39%, 100% 50%, 61% 61%, 50% 100%, 39% 61%, 0 50%, 39% 39%); animation: kisisel-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite, kisisel-parilti 1.6s ease-in-out infinite alternate; }
@keyframes kisisel-parilti { from { filter: brightness(.9) drop-shadow(0 0 2px rgba(255,150,220,.6)); } to { filter: brightness(1.4) drop-shadow(0 0 8px rgba(255,150,220,.95)); } }
.kisisel-efekt-kayanyildiz .kisisel-parcacik { width: 90px; height: 2px; border-radius: 2px; top: -5vh; background: linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.9)); box-shadow: 0 0 6px rgba(180,200,255,.8); animation: kisisel-kayan var(--sure, 14s) ease-in var(--gecikme, 0s) infinite; }
@keyframes kisisel-kayan { 0% { transform: translate3d(0, 0, 0) rotate(28deg); opacity: 0; } 4% { opacity: .9; } 22% { transform: translate3d(-60vw, 70vh, 0) rotate(28deg); opacity: 0; } 100% { transform: translate3d(-60vw, 70vh, 0) rotate(28deg); opacity: 0; } }
.kisisel-efekt-kiraz .kisisel-parcacik { width: 14px; height: 14px; border-radius: 60% 60% 60% 60% / 80% 80% 40% 40%; background: hsl(calc(340 + var(--ton, 0) * .1), 80%, calc(78% + var(--ton, 0) * .1)); box-shadow: inset -2px -2px 0 rgba(200,60,110,.25); }
.kisisel-efekt-buhar .kisisel-parcacik { width: 26px; height: 26px; border-radius: 50%; background: radial-gradient(circle, rgba(200,170,140,.35), rgba(200,170,140,0) 70%); filter: blur(2px); animation-name: kisisel-yuksel; top: 104vh; }
.kisisel-efekt-balon .kisisel-parcacik { width: 20px; height: 26px; border-radius: 50% 50% 50% 50% / 45% 45% 55% 55%; background: hsl(calc(var(--ton, 0) * 3.6), 80%, 62%); box-shadow: inset -4px -4px 0 rgba(0,0,0,.08); animation-name: kisisel-yuksel; top: 104vh; }
.kisisel-efekt-balon .kisisel-parcacik::after { content: ''; position: absolute; left: 50%; top: 100%; width: 1px; height: 22px; background: rgba(0,0,0,.25); }

/* ============================================================================
   KİŞİSEL TEMA — GÖRÜNÜM KAPLAMASI (2026-09-13 kullanıcı: "tema aynı kalmış; butonlarda yapraklar
   olsun sonbahar gibi, bazı temalarda güneş açsın"). Renk paleti tek başına "tema hissi" vermiyordu.
   Her tema: ana panel kartına (.hero) özel arka plan sahnesi + birincil düğmede küçük simge
   (data: SVG — CSP img-src data: açık) + parçacıklar. Simge ve gradyanlar CSS'te; JS yok.
   ============================================================================ */
:root[data-kisisel-tema] .hero, :root[data-kisisel-tema] .hero.hero-live { position: relative; overflow: hidden; }
/* Kurumun .hero::before dekoru 270px'lik daire (app.css:3014); sahne tam kartı kaplamalı — ölçüldü (2026-09-13):
   ölçü sıfırlanmadan dekor sol üstteki daireye hapsoluyordu. */
:root[data-kisisel-tema] .hero.hero-live::before, html[data-kisisel-tema] .hero::before { content: ''; display: block; position: absolute; inset: 0; width: auto; height: auto; border: 0; border-radius: inherit; transform: none; z-index: 0; pointer-events: none; }
:root[data-kisisel-tema="uzay"] .hero.hero-live::after, :root[data-kisisel-tema="firtina"] .hero.hero-live::after { display: block; width: auto; height: auto; border: 0; border-radius: inherit; }
html[data-kisisel-tema] .hero > * { position: relative; z-index: 1; }
html[data-kisisel-tema] .hero-aurora, html[data-kisisel-tema] .hero-lines, html[data-kisisel-tema] .hero-sheen { z-index: 0; }
html[data-kisisel-tema] .button-primary::before { content: ''; display: inline-block; width: 14px; height: 14px; margin-right: 6px; vertical-align: -2px; background-repeat: no-repeat; background-size: contain; }
html[data-kisisel-tema] .button-small.button-primary::before { width: 11px; height: 11px; margin-right: 4px; }
:root[data-kisisel-tema="yesil"] .hero, :root[data-kisisel-tema="yesil"] .hero.hero-live { background: linear-gradient(115deg, #1d5c38, #2d7a4a 45%, #7a5a1e 100%); box-shadow: 0 14px 34px rgba(29,92,56,.28); }
html[data-kisisel-tema="yesil"] .hero::before { background: radial-gradient(ellipse 120px 70px at 88% 18%, rgba(255,190,80,.35), transparent 70%), radial-gradient(ellipse 90px 55px at 72% 80%, rgba(230,120,40,.35), transparent 70%), url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='160' viewBox='0 0 220 160'><g fill='rgba(255,210,120,0.16)'><path d='M30 120c20-40 60-50 90-30-25 10-45 35-50 60-20-5-35-15-40-30z'/><path d='M150 30c30-10 55 10 60 40-25-5-50 5-65 25-5-25 0-50 5-65z'/></g></svg>") 0 0 / 220px 160px repeat; }
html[data-kisisel-tema="yesil"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23ffd27a' d='M4 20c1-9 7-15 16-16-1 9-7 15-16 16z'/><path stroke='%237a4a10' stroke-width='1.2' d='M5 19 18 6' fill='none'/></svg>"); }
html[data-kisisel-tema="yesil"] .topbar { background: linear-gradient(90deg, rgba(240,248,242,.96), rgba(255,250,240,.96)); }
:root[data-kisisel-tema="gunbatimi"] .hero, :root[data-kisisel-tema="gunbatimi"] .hero.hero-live { background: linear-gradient(180deg, #4a2160 0%, #b93b4e 45%, #f08a3c 100%); box-shadow: 0 14px 34px rgba(185,59,78,.3); }
html[data-kisisel-tema="gunbatimi"] .hero::before { background: conic-gradient(from 180deg at 82% 105%, rgba(255,220,120,.16) 0 6deg, transparent 6deg 18deg), radial-gradient(circle at 82% 105%, #ffe27a 0 70px, rgba(255,190,90,.6) 71px 95px, rgba(255,150,80,0) 96px); animation: kisisel-gunes 6s ease-out both; }
html[data-kisisel-tema="gunbatimi"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='5' fill='%23ffe27a'/><g stroke='%23ffe27a' stroke-width='2' stroke-linecap='round'><path d='M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9l2.1 2.1M17 17l2.1 2.1M4.9 19.1 7 17M17 7l2.1-2.1'/></g></svg>"); }
@keyframes kisisel-gunes { from { transform: translateY(60px); opacity: .2; } to { transform: translateY(0); opacity: 1; } }
:root[data-kisisel-tema="deniz"] .hero, :root[data-kisisel-tema="deniz"] .hero.hero-live { background: linear-gradient(160deg, #03546b, #0a7f9a 55%, #12a6a0); }
html[data-kisisel-tema="deniz"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='40' viewBox='0 0 140 40'><path d='M0 20c17-14 35-14 52 0s35 14 52 0 26-10 36-4' fill='none' stroke='rgba(255,255,255,0.18)' stroke-width='3'/></svg>") 0 60% / 140px 40px repeat-x, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='40' viewBox='0 0 140 40'><path d='M0 20c17-14 35-14 52 0s35 14 52 0 26-10 36-4' fill='none' stroke='rgba(255,255,255,0.10)' stroke-width='3'/></svg>") 40px 85% / 140px 40px repeat-x; }
html[data-kisisel-tema="deniz"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M2 14c3-4 6-4 9 0s6 4 9 0M2 19c3-4 6-4 9 0s6 4 9 0' fill='none' stroke='%23bff4ff' stroke-width='2.2' stroke-linecap='round'/></svg>"); }
:root[data-kisisel-tema="kar"] .hero, :root[data-kisisel-tema="kar"] .hero.hero-live { background: linear-gradient(160deg, #1f3b73, #3b6bb5 55%, #7fb3e6); }
html[data-kisisel-tema="kar"] .hero::before { background: radial-gradient(ellipse 60% 40% at 50% 110%, rgba(255,255,255,.45), transparent 70%), radial-gradient(circle at 15% 25%, rgba(255,255,255,.22) 0 3px, transparent 4px), radial-gradient(circle at 70% 60%, rgba(255,255,255,.18) 0 2px, transparent 3px), radial-gradient(circle at 40% 80%, rgba(255,255,255,.2) 0 2px, transparent 3px); }
html[data-kisisel-tema="kar"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g stroke='%23e8f4ff' stroke-width='1.8' stroke-linecap='round'><path d='M12 2v20M2 12h20M5 5l14 14M19 5 5 19'/></g></svg>"); }
:root[data-kisisel-tema="lavanta"] .hero, :root[data-kisisel-tema="lavanta"] .hero.hero-live { background: linear-gradient(160deg, #3b2a6b, #6d4fb3 55%, #9b7fd4); }
html[data-kisisel-tema="lavanta"] .hero::before { background: repeating-linear-gradient(100deg, transparent 0 34px, rgba(255,255,255,.06) 34px 36px), radial-gradient(ellipse 50% 60% at 85% 90%, rgba(255,200,240,.25), transparent 70%); }
html[data-kisisel-tema="lavanta"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='%23e9d5ff'><circle cx='12' cy='6' r='3'/><circle cx='18' cy='12' r='3'/><circle cx='12' cy='18' r='3'/><circle cx='6' cy='12' r='3'/></g><circle cx='12' cy='12' r='2.5' fill='%23fff3a0'/></svg>"); }
:root[data-kisisel-tema="bilim"] .hero, :root[data-kisisel-tema="bilim"] .hero.hero-live { background: linear-gradient(135deg, #14163a, #2a2b7a 60%, #3f3fbf); }
html[data-kisisel-tema="bilim"] .hero::before { background: linear-gradient(rgba(255,255,255,.07) 1px, transparent 1px) 0 0 / 100% 28px, linear-gradient(90deg, rgba(255,255,255,.07) 1px, transparent 1px) 0 0 / 28px 100%, radial-gradient(circle at 85% 30%, rgba(120,200,255,.25) 0 36px, transparent 37px); }
html[data-kisisel-tema="bilim"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='none' stroke='%23c7d2ff' stroke-width='1.6'><ellipse cx='12' cy='12' rx='10' ry='4'/><ellipse cx='12' cy='12' rx='10' ry='4' transform='rotate(60 12 12)'/><ellipse cx='12' cy='12' rx='10' ry='4' transform='rotate(120 12 12)'/></g><circle cx='12' cy='12' r='2.2' fill='%23ffd27a'/></svg>"); }
:root[data-kisisel-tema="unicorn"] .hero, :root[data-kisisel-tema="unicorn"] .hero.hero-live { background: linear-gradient(135deg, #f78fb3, #c98af2 45%, #8ed6ff 100%); color: #3b1140; text-shadow: 0 1px 0 rgba(255,255,255,.35); }
html[data-kisisel-tema="unicorn"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'><path d='M60 12l6 16 17 1-13 11 5 17-15-10-15 10 5-17-13-11 17-1z' fill='rgba(255,255,255,0.22)'/></svg>") 20px 10px / 120px 120px repeat, radial-gradient(circle at 90% 90%, rgba(255,255,255,.35), transparent 40%); }
html[data-kisisel-tema="unicorn"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2l2.6 6.8L22 9.5l-5.5 4.6 1.8 7.1L12 17.4l-6.3 3.8 1.8-7.1L2 9.5l7.4-.7z' fill='%23fff3a0'/></svg>"); }
html[data-kisisel-tema="unicorn"] .hero .hero-name { color: #fff6a3; }
:root[data-kisisel-tema="uzay"] .hero, :root[data-kisisel-tema="uzay"] .hero.hero-live { background: radial-gradient(circle at 80% 20%, #2a3d8f, #0b1230 45%, #05081a); }
html[data-kisisel-tema="uzay"] .hero::before { background: radial-gradient(circle at 12% 30%, #fff 0 1px, transparent 2px), radial-gradient(circle at 32% 70%, #fff 0 1px, transparent 2px), radial-gradient(circle at 55% 25%, rgba(255,255,255,.8) 0 1px, transparent 2px), radial-gradient(circle at 70% 80%, #fff 0 1px, transparent 2px), radial-gradient(circle at 90% 55%, rgba(255,255,255,.7) 0 1px, transparent 2px), radial-gradient(circle at 92% 25%, #f5c26b 0 22px, rgba(245,194,107,.25) 23px 30px, transparent 31px); }
html[data-kisisel-tema="uzay"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 3c4 1 6 5 5 9l-4 4-3-3 2-10zM8 13l3 3-3 4-2-2 2-5z' fill='%23dfe7ff'/><circle cx='14.5' cy='9.5' r='1.6' fill='%235b7fe0'/></svg>"); }
:root[data-kisisel-tema="kiraz"] .hero, :root[data-kisisel-tema="kiraz"] .hero.hero-live { background: linear-gradient(135deg, #7a1f4c, #c0416e 55%, #f2a2bd); }
html[data-kisisel-tema="kiraz"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='120' viewBox='0 0 160 120'><path d='M0 100c40-30 80-40 160-30' fill='none' stroke='rgba(90,30,40,0.35)' stroke-width='3'/><g fill='rgba(255,220,235,0.55)'><circle cx='40' cy='78' r='6'/><circle cx='75' cy='68' r='6'/><circle cx='110' cy='66' r='6'/><circle cx='140' cy='70' r='5'/></g></svg>") 0 100% / 160px 120px repeat-x; }
html[data-kisisel-tema="kiraz"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='%23ffd6e4'><circle cx='12' cy='5.5' r='3.5'/><circle cx='18.2' cy='10' r='3.5'/><circle cx='15.8' cy='17.3' r='3.5'/><circle cx='8.2' cy='17.3' r='3.5'/><circle cx='5.8' cy='10' r='3.5'/></g><circle cx='12' cy='12' r='2.4' fill='%23ffe27a'/></svg>"); }
:root[data-kisisel-tema="kahve"] .hero, :root[data-kisisel-tema="kahve"] .hero.hero-live { background: linear-gradient(135deg, #3b2314, #6b3f1d 55%, #a0672e); }
html[data-kisisel-tema="kahve"] .hero::before { background: radial-gradient(ellipse 240px 120px at 88% 100%, rgba(255,220,180,.18), transparent 70%), repeating-radial-gradient(circle at 88% 100%, transparent 0 18px, rgba(255,255,255,.05) 18px 20px); }
html[data-kisisel-tema="kahve"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4 9h12v6a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4V9zm12 1h2a2.5 2.5 0 0 1 0 5h-2' fill='%23f3dcc4' stroke='%23f3dcc4'/><path d='M8 3c0 2-2 2-2 4M12 3c0 2-2 2-2 4' stroke='%23f3dcc4' stroke-width='1.5' fill='none' stroke-linecap='round'/></svg>"); }
:root[data-kisisel-tema="gokkusagi"] .hero, :root[data-kisisel-tema="gokkusagi"] .hero.hero-live { background: linear-gradient(135deg, #5b3fc4, #7c4dff 50%, #3b8bff); }
html[data-kisisel-tema="gokkusagi"] .hero::before { background: linear-gradient(90deg, #ff5e5e, #ffb84d, #ffe94d, #6ee07a, #4dc9ff, #6b7cff, #c56bff) 0 100% / 100% 8px no-repeat, radial-gradient(circle at 15% 100%, rgba(255,255,255,.18), transparent 40%); }
html[data-kisisel-tema="gokkusagi"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='none' stroke-width='2.4'><path d='M3 18a9 9 0 0 1 18 0' stroke='%23ff6b6b'/><path d='M6 18a6 6 0 0 1 12 0' stroke='%23ffe066'/><path d='M9 18a3 3 0 0 1 6 0' stroke='%2374d680'/></g></svg>"); }

/* ============================================================================
   KİŞİSEL TEMA — İYİLEŞTİRME (2026-09-13, web araştırması: thenewcode "Falling Leaves in CSS 3D",
   Superdesign "Aurora UI", georgiee "Stargazing"). Üç teknik:
   (1) YAPRAK gerçek SVG (damarlı), üç renk, 3B dönüş (rotateY) + salınım — düz elips "yaprak" gibi
       okunmuyordu; (2) AURORA katmanları temaya özgü renkte ve FARKLI sürelerde nefes alır (ease-in-out
       alternate — dikiş görünmez), hero gradyanı yavaşça kayar; (3) YILDIZ ölçek+opaklık ikili parıltı.
   ============================================================================ */
.kisisel-efekt-yaprak .kisisel-parcacik { width: 34px; height: 34px; border-radius: 0; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M4 36C6 18 18 6 36 4c-2 18-14 30-32 32z' fill='%23e0761f'/><path d='M6 34 34 6' stroke='%237a3a10' stroke-width='1.4' fill='none'/><path d='M12 28c4-2 6-6 6-10M18 22c4-2 8-2 12-4M15 25c-1-4-2-7-1-11' stroke='%237a3a10' stroke-width='.9' fill='none'/></svg>") center / contain no-repeat; box-shadow: none; filter: drop-shadow(1px 3px 2px rgba(0,0,0,.28)); animation: kisisel-yaprak-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite; }
.kisisel-efekt-yaprak .kisisel-parcacik::after { content: none; }
.kisisel-efekt-yaprak .kisisel-parcacik:nth-child(3n+1) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M20 2c9 6 14 14 14 24 0 6-6 12-14 12S6 32 6 26C6 16 11 8 20 2z' fill='%23c8452a'/><path d='M20 4v32' stroke='%235a1c0c' stroke-width='1.3' fill='none'/><path d='M20 14c-4 2-7 5-9 9M20 14c4 2 7 5 9 9M20 22c-3 2-5 5-6 8M20 22c3 2 5 5 6 8' stroke='%235a1c0c' stroke-width='.8' fill='none'/></svg>"); }
.kisisel-efekt-yaprak .kisisel-parcacik:nth-child(3n+2) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M4 36C6 18 18 6 36 4c-2 18-14 30-32 32z' fill='%23f0b429'/><path d='M6 34 34 6' stroke='%238a5a10' stroke-width='1.4' fill='none'/><path d='M12 28c4-2 6-6 6-10M18 22c4-2 8-2 12-4' stroke='%238a5a10' stroke-width='.9' fill='none'/></svg>"); }
@keyframes kisisel-yaprak-dus {
  0%   { transform: translate3d(0, 0, 0) rotate(0deg) rotateY(0deg) scale(var(--boyut, 1)); opacity: 0; }
  6%   { opacity: .95; }
  25%  { transform: translate3d(30px, 26vh, 0) rotate(40deg) rotateY(180deg) scale(var(--boyut, 1)); }
  50%  { transform: translate3d(-24px, 54vh, 0) rotate(-20deg) rotateY(360deg) scale(var(--boyut, 1)); }
  75%  { transform: translate3d(28px, 82vh, 0) rotate(60deg) rotateY(540deg) scale(var(--boyut, 1)); }
  94%  { opacity: .9; }
  100% { transform: translate3d(-10px, 112vh, 0) rotate(90deg) rotateY(720deg) scale(var(--boyut, 1)); opacity: 0; }
}
.kisisel-efekt-kar .kisisel-parcacik { width: 18px; height: 18px; border-radius: 0; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><g stroke='%23ffffff' stroke-width='2.2' stroke-linecap='round' fill='none'><path d='M20 3v34M3 20h34M8 8l24 24M32 8 8 32'/><path d='M20 3l-4 4M20 3l4 4M20 37l-4-4M20 37l4-4M3 20l4-4M3 20l4 4M37 20l-4-4M37 20l-4 4'/></g></svg>") center / contain no-repeat; box-shadow: none; filter: drop-shadow(0 0 4px rgba(150,190,255,.9)); animation: kisisel-yaprak-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite; }
.kisisel-efekt-yildiz .kisisel-parcacik { animation: kisisel-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite, kisisel-parilti 1.6s ease-in-out infinite alternate, kisisel-nabiz 2.3s ease-in-out infinite alternate; }
@keyframes kisisel-nabiz { from { scale: .7; } to { scale: 1.25; } }

/* Hero: kayan gradyan + temaya özgü aurora (kurum aurora katmanları yeniden renklenir). */
:root[data-kisisel-tema] .hero.hero-live { background-size: 200% 200%; animation: eg-fx-hero .8s cubic-bezier(.16, 1, .3, 1) backwards, kisisel-gradyan 18s ease-in-out infinite alternate; }
@keyframes kisisel-gradyan { from { background-position: 0% 50%; } to { background-position: 100% 50%; } }
:root[data-kisisel-tema] .hero-aurora i { opacity: .9; }
:root[data-kisisel-tema="yesil"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,170,60,.42), transparent 62%); }
:root[data-kisisel-tema="yesil"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(120,220,140,.30), transparent 60%); }
:root[data-kisisel-tema="yesil"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(220,90,40,.34), transparent 62%); }
:root[data-kisisel-tema="gunbatimi"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,220,120,.45), transparent 62%); }
:root[data-kisisel-tema="gunbatimi"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(255,120,90,.35), transparent 60%); }
:root[data-kisisel-tema="gunbatimi"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(160,80,200,.30), transparent 62%); }
:root[data-kisisel-tema="deniz"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(120,230,255,.35), transparent 62%); }
:root[data-kisisel-tema="deniz"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(40,180,200,.35), transparent 60%); }
:root[data-kisisel-tema="deniz"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(0,110,150,.35), transparent 62%); }
:root[data-kisisel-tema="unicorn"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,255,255,.55), transparent 62%); }
:root[data-kisisel-tema="unicorn"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(255,230,120,.40), transparent 60%); }
:root[data-kisisel-tema="unicorn"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(120,220,255,.40), transparent 62%); }
:root[data-kisisel-tema="uzay"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(120,90,255,.35), transparent 62%); }
:root[data-kisisel-tema="uzay"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(60,200,255,.25), transparent 60%); }
:root[data-kisisel-tema="uzay"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(255,120,200,.22), transparent 62%); }
:root[data-kisisel-tema="bilim"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(120,200,255,.35), transparent 62%); }
:root[data-kisisel-tema="bilim"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(160,120,255,.30), transparent 60%); }
:root[data-kisisel-tema="lavanta"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,200,255,.40), transparent 62%); }
:root[data-kisisel-tema="kiraz"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,210,230,.45), transparent 62%); }
:root[data-kisisel-tema="kahve"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,210,160,.30), transparent 62%); }
:root[data-kisisel-tema="gokkusagi"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,255,255,.35), transparent 62%); }
:root[data-kisisel-tema="kar"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(255,255,255,.45), transparent 62%); }

/* Uzay: yıldızlar hero'da parıldar (ikili parıltı, farklı sürelerde). */
:root[data-kisisel-tema="uzay"] .hero.hero-live::after { content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none; background: radial-gradient(circle at 22% 45%, #fff 0 1.2px, transparent 2.5px), radial-gradient(circle at 48% 15%, #fff 0 1px, transparent 2px), radial-gradient(circle at 63% 70%, #fff 0 1.4px, transparent 2.6px), radial-gradient(circle at 80% 40%, #fff 0 1px, transparent 2px), radial-gradient(circle at 36% 85%, #fff 0 1px, transparent 2px); animation: kisisel-yildiz-parilti 2.8s ease-in-out infinite alternate; }
@keyframes kisisel-yildiz-parilti { from { opacity: .35; transform: scale(1); } to { opacity: 1; transform: scale(1.02); } }
@media (prefers-reduced-motion: reduce) { :root[data-kisisel-tema] .hero.hero-live, :root[data-kisisel-tema="uzay"] .hero.hero-live::after { animation: none; } }

/* Mevcut 11 temanın önizleme kartları (gradyan/dekor/simge tek kaynaktan türetildi). */
.tema-onizleme[data-tema="yesil"] { background: linear-gradient(115deg, #1d5c38, #2d7a4a 45%, #7a5a1e 100%); }
.tema-onizleme[data-tema="yesil"]::before { background: radial-gradient(ellipse 120px 70px at 88% 18%, rgba(255,190,80,.35), transparent 70%), radial-gradient(ellipse 90px 55px at 72% 80%, rgba(230,120,40,.35), transparent 70%), url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='160' viewBox='0 0 220 160'><g fill='rgba(255,210,120,0.16)'><path d='M30 120c20-40 60-50 90-30-25 10-45 35-50 60-20-5-35-15-40-30z'/><path d='M150 30c30-10 55 10 60 40-25-5-50 5-65 25-5-25 0-50 5-65z'/></g></svg>") 0 0 / 220px 160px repeat; }
.tema-onizleme[data-tema="yesil"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23ffd27a' d='M4 20c1-9 7-15 16-16-1 9-7 15-16 16z'/><path stroke='%237a4a10' stroke-width='1.2' d='M5 19 18 6' fill='none'/></svg>"); }
.tema-onizleme[data-tema="gunbatimi"] { background: linear-gradient(180deg, #4a2160 0%, #b93b4e 45%, #f08a3c 100%); }
.tema-onizleme[data-tema="gunbatimi"]::before { background: conic-gradient(from 180deg at 82% 105%, rgba(255,220,120,.16) 0 6deg, transparent 6deg 18deg), radial-gradient(circle at 82% 105%, #ffe27a 0 70px, rgba(255,190,90,.6) 71px 95px, rgba(255,150,80,0) 96px); animation: kisisel-gunes 6s ease-out both; }
.tema-onizleme[data-tema="gunbatimi"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='5' fill='%23ffe27a'/><g stroke='%23ffe27a' stroke-width='2' stroke-linecap='round'><path d='M12 2v3M12 19v3M2 12h3M19 12h3M4.9 4.9l2.1 2.1M17 17l2.1 2.1M4.9 19.1 7 17M17 7l2.1-2.1'/></g></svg>"); }
.tema-onizleme[data-tema="deniz"] { background: linear-gradient(160deg, #03546b, #0a7f9a 55%, #12a6a0); }
.tema-onizleme[data-tema="deniz"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='40' viewBox='0 0 140 40'><path d='M0 20c17-14 35-14 52 0s35 14 52 0 26-10 36-4' fill='none' stroke='rgba(255,255,255,0.18)' stroke-width='3'/></svg>") 0 60% / 140px 40px repeat-x, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='40' viewBox='0 0 140 40'><path d='M0 20c17-14 35-14 52 0s35 14 52 0 26-10 36-4' fill='none' stroke='rgba(255,255,255,0.10)' stroke-width='3'/></svg>") 40px 85% / 140px 40px repeat-x; }
.tema-onizleme[data-tema="deniz"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M2 14c3-4 6-4 9 0s6 4 9 0M2 19c3-4 6-4 9 0s6 4 9 0' fill='none' stroke='%23bff4ff' stroke-width='2.2' stroke-linecap='round'/></svg>"); }
.tema-onizleme[data-tema="kar"] { background: linear-gradient(160deg, #1f3b73, #3b6bb5 55%, #7fb3e6); }
.tema-onizleme[data-tema="kar"]::before { background: radial-gradient(ellipse 60% 40% at 50% 110%, rgba(255,255,255,.45), transparent 70%), radial-gradient(circle at 15% 25%, rgba(255,255,255,.22) 0 3px, transparent 4px), radial-gradient(circle at 70% 60%, rgba(255,255,255,.18) 0 2px, transparent 3px), radial-gradient(circle at 40% 80%, rgba(255,255,255,.2) 0 2px, transparent 3px); }
.tema-onizleme[data-tema="kar"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g stroke='%23e8f4ff' stroke-width='1.8' stroke-linecap='round'><path d='M12 2v20M2 12h20M5 5l14 14M19 5 5 19'/></g></svg>"); }
.tema-onizleme[data-tema="lavanta"] { background: linear-gradient(160deg, #3b2a6b, #6d4fb3 55%, #9b7fd4); }
.tema-onizleme[data-tema="lavanta"]::before { background: repeating-linear-gradient(100deg, transparent 0 34px, rgba(255,255,255,.06) 34px 36px), radial-gradient(ellipse 50% 60% at 85% 90%, rgba(255,200,240,.25), transparent 70%); }
.tema-onizleme[data-tema="lavanta"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='%23e9d5ff'><circle cx='12' cy='6' r='3'/><circle cx='18' cy='12' r='3'/><circle cx='12' cy='18' r='3'/><circle cx='6' cy='12' r='3'/></g><circle cx='12' cy='12' r='2.5' fill='%23fff3a0'/></svg>"); }
.tema-onizleme[data-tema="bilim"] { background: linear-gradient(135deg, #14163a, #2a2b7a 60%, #3f3fbf); }
.tema-onizleme[data-tema="bilim"]::before { background: linear-gradient(rgba(255,255,255,.07) 1px, transparent 1px) 0 0 / 100% 28px, linear-gradient(90deg, rgba(255,255,255,.07) 1px, transparent 1px) 0 0 / 28px 100%, radial-gradient(circle at 85% 30%, rgba(120,200,255,.25) 0 36px, transparent 37px); }
.tema-onizleme[data-tema="bilim"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='none' stroke='%23c7d2ff' stroke-width='1.6'><ellipse cx='12' cy='12' rx='10' ry='4'/><ellipse cx='12' cy='12' rx='10' ry='4' transform='rotate(60 12 12)'/><ellipse cx='12' cy='12' rx='10' ry='4' transform='rotate(120 12 12)'/></g><circle cx='12' cy='12' r='2.2' fill='%23ffd27a'/></svg>"); }
.tema-onizleme[data-tema="unicorn"] { background: linear-gradient(135deg, #f78fb3, #c98af2 45%, #8ed6ff 100%); }
.tema-onizleme[data-tema="unicorn"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'><path d='M60 12l6 16 17 1-13 11 5 17-15-10-15 10 5-17-13-11 17-1z' fill='rgba(255,255,255,0.22)'/></svg>") 20px 10px / 120px 120px repeat, radial-gradient(circle at 90% 90%, rgba(255,255,255,.35), transparent 40%); }
.tema-onizleme[data-tema="unicorn"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 2l2.6 6.8L22 9.5l-5.5 4.6 1.8 7.1L12 17.4l-6.3 3.8 1.8-7.1L2 9.5l7.4-.7z' fill='%23fff3a0'/></svg>"); }
.tema-onizleme[data-tema="uzay"] { background: radial-gradient(circle at 80% 20%, #2a3d8f, #0b1230 45%, #05081a); }
.tema-onizleme[data-tema="uzay"]::before { background: radial-gradient(circle at 12% 30%, #fff 0 1px, transparent 2px), radial-gradient(circle at 32% 70%, #fff 0 1px, transparent 2px), radial-gradient(circle at 55% 25%, rgba(255,255,255,.8) 0 1px, transparent 2px), radial-gradient(circle at 70% 80%, #fff 0 1px, transparent 2px), radial-gradient(circle at 90% 55%, rgba(255,255,255,.7) 0 1px, transparent 2px), radial-gradient(circle at 92% 25%, #f5c26b 0 22px, rgba(245,194,107,.25) 23px 30px, transparent 31px); }
.tema-onizleme[data-tema="uzay"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M14 3c4 1 6 5 5 9l-4 4-3-3 2-10zM8 13l3 3-3 4-2-2 2-5z' fill='%23dfe7ff'/><circle cx='14.5' cy='9.5' r='1.6' fill='%235b7fe0'/></svg>"); }
.tema-onizleme[data-tema="kiraz"] { background: linear-gradient(135deg, #7a1f4c, #c0416e 55%, #f2a2bd); }
.tema-onizleme[data-tema="kiraz"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='120' viewBox='0 0 160 120'><path d='M0 100c40-30 80-40 160-30' fill='none' stroke='rgba(90,30,40,0.35)' stroke-width='3'/><g fill='rgba(255,220,235,0.55)'><circle cx='40' cy='78' r='6'/><circle cx='75' cy='68' r='6'/><circle cx='110' cy='66' r='6'/><circle cx='140' cy='70' r='5'/></g></svg>") 0 100% / 160px 120px repeat-x; }
.tema-onizleme[data-tema="kiraz"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='%23ffd6e4'><circle cx='12' cy='5.5' r='3.5'/><circle cx='18.2' cy='10' r='3.5'/><circle cx='15.8' cy='17.3' r='3.5'/><circle cx='8.2' cy='17.3' r='3.5'/><circle cx='5.8' cy='10' r='3.5'/></g><circle cx='12' cy='12' r='2.4' fill='%23ffe27a'/></svg>"); }
.tema-onizleme[data-tema="kahve"] { background: linear-gradient(135deg, #3b2314, #6b3f1d 55%, #a0672e); }
.tema-onizleme[data-tema="kahve"]::before { background: radial-gradient(ellipse 240px 120px at 88% 100%, rgba(255,220,180,.18), transparent 70%), repeating-radial-gradient(circle at 88% 100%, transparent 0 18px, rgba(255,255,255,.05) 18px 20px); }
.tema-onizleme[data-tema="kahve"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4 9h12v6a4 4 0 0 1-4 4H8a4 4 0 0 1-4-4V9zm12 1h2a2.5 2.5 0 0 1 0 5h-2' fill='%23f3dcc4' stroke='%23f3dcc4'/><path d='M8 3c0 2-2 2-2 4M12 3c0 2-2 2-2 4' stroke='%23f3dcc4' stroke-width='1.5' fill='none' stroke-linecap='round'/></svg>"); }
.tema-onizleme[data-tema="gokkusagi"] { background: linear-gradient(135deg, #5b3fc4, #7c4dff 50%, #3b8bff); }
.tema-onizleme[data-tema="gokkusagi"]::before { background: linear-gradient(90deg, #ff5e5e, #ffb84d, #ffe94d, #6ee07a, #4dc9ff, #6b7cff, #c56bff) 0 100% / 100% 8px no-repeat, radial-gradient(circle at 15% 100%, rgba(255,255,255,.18), transparent 40%); }
.tema-onizleme[data-tema="gokkusagi"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><g fill='none' stroke-width='2.4'><path d='M3 18a9 9 0 0 1 18 0' stroke='%23ff6b6b'/><path d='M6 18a6 6 0 0 1 12 0' stroke='%23ffe066'/><path d='M9 18a3 3 0 0 1 6 0' stroke='%2374d680'/></g></svg>"); }

/* ============================================================================
   KİŞİSEL TEMA — 15 YENİ TEMA (2026-09-13 kullanıcı: "bilimsel, sanatsal, renkli 10-15 tane, görselli").
   Kalıp aynı: hero sahnesi (:root[...] .hero.hero-live özgüllüğü) + .hero::before dekor + düğme simgesi
   (data:SVG) + parçacık efekti + temaya özgü aurora. Yeni animasyonlar: kisisel-yuz (balık yatay),
   kisisel-kanat (kelebek kanadı ::after üstünde — ana transform ile çakışmasın), kisisel-simsek (yanıp
   sönme), kisisel-isilti, kisisel-dus-duz (dönmeden düşüş; piksel steps() ile). Önizleme kartları
   (.tema-onizleme) aynı gradyan/dekor/simgeyi kullanır — seçici ekranı ile panel ayrışamaz.
   ============================================================================ */
:root[data-kisisel-tema="matematik"] .hero, :root[data-kisisel-tema="matematik"] .hero.hero-live { background: linear-gradient(135deg, #1e1b4b, #312e81 55%, #4338ca); }
html[data-kisisel-tema="matematik"] .hero::before { background: linear-gradient(rgba(255,255,255,.06) 1px, transparent 1px) 0 0 / 100% 24px, linear-gradient(90deg, rgba(255,255,255,.06) 1px, transparent 1px) 0 0 / 24px 100%, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 170' width='320' height='170'><g fill='rgba(199,210,254,0.16)' font-family='Georgia,serif' font-size='40'><text x='20' y='60'>∑</text><text x='120' y='120'>π</text><text x='210' y='50'>√x</text><text x='60' y='150'>∞</text><text x='260' y='140'>∫</text></g></svg>") 0 0 / 320px 170px repeat; }
html[data-kisisel-tema="matematik"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 13l3 6 5-15h10' fill='none' stroke='%23c7d2fe' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }
:root[data-kisisel-tema="matematik"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(129,140,248,.40), transparent 62%); }
:root[data-kisisel-tema="matematik"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(56,189,248,.28), transparent 62%); }
:root[data-kisisel-tema="matematik"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(244,114,182,.22), transparent 62%); }
.kisisel-efekt-formul .kisisel-parcacik { width: 30px; height: 30px; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><text x='4' y='30' fill='%23c7d2fe' font-family='Georgia,serif' font-size='30'>∑</text></svg>") center / contain no-repeat; filter: drop-shadow(0 2px 3px rgba(0,0,0,.35)); animation: kisisel-yaprak-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite; }
.kisisel-efekt-formul .kisisel-parcacik:nth-child(5n+1) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><text x='6' y='30' fill='%23a5b4fc' font-family='Georgia,serif' font-size='30'>π</text></svg>"); }
.kisisel-efekt-formul .kisisel-parcacik:nth-child(5n+2) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><text x='2' y='29' fill='%23e0e7ff' font-family='Georgia,serif' font-size='26'>√x</text></svg>"); }
.kisisel-efekt-formul .kisisel-parcacik:nth-child(5n+3) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><text x='2' y='31' fill='%23c7d2fe' font-family='Georgia,serif' font-size='30'>∞</text></svg>"); }
.kisisel-efekt-formul .kisisel-parcacik:nth-child(5n+4) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><text x='8' y='32' fill='%23a5b4fc' font-family='Georgia,serif' font-size='34'>∫</text></svg>"); }
.tema-onizleme[data-tema="matematik"] { background: linear-gradient(135deg, #1e1b4b, #312e81 55%, #4338ca); }
.tema-onizleme[data-tema="matematik"]::before { background: linear-gradient(rgba(255,255,255,.06) 1px, transparent 1px) 0 0 / 100% 24px, linear-gradient(90deg, rgba(255,255,255,.06) 1px, transparent 1px) 0 0 / 24px 100%, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 170' width='320' height='170'><g fill='rgba(199,210,254,0.16)' font-family='Georgia,serif' font-size='40'><text x='20' y='60'>∑</text><text x='120' y='120'>π</text><text x='210' y='50'>√x</text><text x='60' y='150'>∞</text><text x='260' y='140'>∫</text></g></svg>") 0 0 / 320px 170px repeat; }
.tema-onizleme[data-tema="matematik"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 13l3 6 5-15h10' fill='none' stroke='%23c7d2fe' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }
:root[data-kisisel-tema="kimya"] .hero, :root[data-kisisel-tema="kimya"] .hero.hero-live { background: linear-gradient(135deg, #042f2e, #0f766e 55%, #14b8a6); }
html[data-kisisel-tema="kimya"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 60' width='56' height='60'><path d='M28 2l24 14v28L28 58 4 44V16z' fill='none' stroke='rgba(153,246,228,0.18)' stroke-width='2'/></svg>") 0 0 / 56px 60px repeat, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 110 110' width='110' height='110'><path d='M40 10h30v40l25 50H15l25-50z' fill='rgba(204,251,241,0.10)' stroke='rgba(204,251,241,0.35)' stroke-width='3'/><path d='M28 74h54l12 26H16z' fill='rgba(94,234,212,0.35)'/><circle cx='45' cy='84' r='4' fill='rgba(255,255,255,0.5)'/><circle cx='62' cy='90' r='3' fill='rgba(255,255,255,0.5)'/></svg>") 90% 100% / 110px 110px no-repeat; }
html[data-kisisel-tema="kimya"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M9 3h6M10 3v6l-5 9a2 2 0 0 0 2 3h10a2 2 0 0 0 2-3l-5-9V3' fill='none' stroke='%23ccfbf1' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/><path d='M7 16h10' stroke='%235eead4' stroke-width='2.2'/></svg>"); }
:root[data-kisisel-tema="kimya"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(94,234,212,.38), transparent 62%); }
:root[data-kisisel-tema="kimya"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(56,189,248,.26), transparent 62%); }
:root[data-kisisel-tema="kimya"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(250,204,21,.20), transparent 62%); }
.kisisel-efekt-molekul .kisisel-parcacik { width: 34px; height: 34px; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><g stroke='%2399f6e4' stroke-width='2'><path d='M10 28L20 12M20 12L32 24'/></g><circle cx='10' cy='28' r='5' fill='%235eead4'/><circle cx='20' cy='12' r='6' fill='%232dd4bf'/><circle cx='32' cy='24' r='4' fill='%23ccfbf1'/></svg>") center / contain no-repeat; animation: kisisel-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite, kisisel-donus 7s linear infinite; }
.tema-onizleme[data-tema="kimya"] { background: linear-gradient(135deg, #042f2e, #0f766e 55%, #14b8a6); }
.tema-onizleme[data-tema="kimya"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 56 60' width='56' height='60'><path d='M28 2l24 14v28L28 58 4 44V16z' fill='none' stroke='rgba(153,246,228,0.18)' stroke-width='2'/></svg>") 0 0 / 56px 60px repeat, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 110 110' width='110' height='110'><path d='M40 10h30v40l25 50H15l25-50z' fill='rgba(204,251,241,0.10)' stroke='rgba(204,251,241,0.35)' stroke-width='3'/><path d='M28 74h54l12 26H16z' fill='rgba(94,234,212,0.35)'/><circle cx='45' cy='84' r='4' fill='rgba(255,255,255,0.5)'/><circle cx='62' cy='90' r='3' fill='rgba(255,255,255,0.5)'/></svg>") 90% 100% / 110px 110px no-repeat; }
.tema-onizleme[data-tema="kimya"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M9 3h6M10 3v6l-5 9a2 2 0 0 0 2 3h10a2 2 0 0 0 2-3l-5-9V3' fill='none' stroke='%23ccfbf1' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/><path d='M7 16h10' stroke='%235eead4' stroke-width='2.2'/></svg>"); }
:root[data-kisisel-tema="biyoloji"] .hero, :root[data-kisisel-tema="biyoloji"] .hero.hero-live { background: linear-gradient(135deg, #052e16, #166534 55%, #22c55e); }
html[data-kisisel-tema="biyoloji"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 180 80' width='180' height='80'><g fill='none' stroke-width='3'><path d='M0 40c30-40 60-40 90 0s60 40 90 0' stroke='rgba(187,247,208,0.45)'/><path d='M0 40c30 40 60 40 90 0s60-40 90 0' stroke='rgba(134,239,172,0.30)'/></g><g stroke='rgba(220,252,231,0.35)' stroke-width='2'><path d='M22 12v56M45 40v0M67 12v56M112 12v56M135 40v0M157 12v56'/></g></svg>") 0 100% / 180px 80px repeat-x; }
html[data-kisisel-tema="biyoloji"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M6 3c0 6 12 6 12 12s-12 6-12 6M18 3c0 6-12 6-12 12s12 6 12 6' fill='none' stroke='%23bbf7d0' stroke-width='1.8' stroke-linecap='round'/><path d='M8 7h8M8 17h8' stroke='%2386efac' stroke-width='1.6'/></svg>"); }
:root[data-kisisel-tema="biyoloji"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(134,239,172,.40), transparent 62%); }
:root[data-kisisel-tema="biyoloji"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(250,204,21,.22), transparent 62%); }
:root[data-kisisel-tema="biyoloji"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(56,189,248,.20), transparent 62%); }
.kisisel-efekt-hucre .kisisel-parcacik { width: 24px; height: 24px; border-radius: 50%; border: 1.5px solid rgba(187,247,208,.7); background: radial-gradient(circle at 42% 42%, rgba(134,239,172,.95) 0 5px, rgba(74,222,128,.35) 6px 100%); box-shadow: 0 0 8px rgba(134,239,172,.4); animation-name: kisisel-yuksel; top: 104vh; }
.tema-onizleme[data-tema="biyoloji"] { background: linear-gradient(135deg, #052e16, #166534 55%, #22c55e); }
.tema-onizleme[data-tema="biyoloji"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 180 80' width='180' height='80'><g fill='none' stroke-width='3'><path d='M0 40c30-40 60-40 90 0s60 40 90 0' stroke='rgba(187,247,208,0.45)'/><path d='M0 40c30 40 60 40 90 0s60-40 90 0' stroke='rgba(134,239,172,0.30)'/></g><g stroke='rgba(220,252,231,0.35)' stroke-width='2'><path d='M22 12v56M45 40v0M67 12v56M112 12v56M135 40v0M157 12v56'/></g></svg>") 0 100% / 180px 80px repeat-x; }
.tema-onizleme[data-tema="biyoloji"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M6 3c0 6 12 6 12 12s-12 6-12 6M18 3c0 6-12 6-12 12s12 6 12 6' fill='none' stroke='%23bbf7d0' stroke-width='1.8' stroke-linecap='round'/><path d='M8 7h8M8 17h8' stroke='%2386efac' stroke-width='1.6'/></svg>"); }
:root[data-kisisel-tema="gezegen"] .hero, :root[data-kisisel-tema="gezegen"] .hero.hero-live { background: radial-gradient(circle at 15% 20%, #3b2a7a, #0b1230 45%, #05081a); }
html[data-kisisel-tema="gezegen"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 300' width='420' height='300'><g fill='none' stroke='rgba(255,255,255,0.10)' stroke-width='1'><ellipse cx='30' cy='30' rx='90' ry='60'/><ellipse cx='30' cy='30' rx='150' ry='100'/><ellipse cx='30' cy='30' rx='210' ry='140'/></g><circle cx='30' cy='30' r='26' fill='rgba(250,204,21,0.55)'/><circle cx='30' cy='30' r='40' fill='rgba(250,204,21,0.12)'/><circle cx='120' cy='30' r='5' fill='rgba(147,197,253,0.8)'/><circle cx='180' cy='30' r='8' fill='rgba(252,165,165,0.8)'/><ellipse cx='240' cy='30' rx='16' ry='5' fill='none' stroke='rgba(253,224,71,0.6)' stroke-width='2'/><circle cx='240' cy='30' r='9' fill='rgba(253,230,138,0.8)'/></svg>") 0 0 / 420px 300px no-repeat; }
html[data-kisisel-tema="gezegen"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='6' fill='%23fde68a'/><ellipse cx='12' cy='12' rx='11' ry='3.5' fill='none' stroke='%23dfe7ff' stroke-width='1.8' transform='rotate(-20 12 12)'/></svg>"); }
:root[data-kisisel-tema="gezegen"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(250,204,21,.30), transparent 62%); }
:root[data-kisisel-tema="gezegen"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(129,140,248,.30), transparent 62%); }
:root[data-kisisel-tema="gezegen"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(248,113,113,.22), transparent 62%); }
.kisisel-efekt-gezegen .kisisel-parcacik { width: 30px; height: 30px; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><circle cx='20' cy='20' r='10' fill='%23fca5a5'/><ellipse cx='20' cy='20' rx='18' ry='6' fill='none' stroke='%23fde68a' stroke-width='2.5' transform='rotate(-20 20 20)'/></svg>") center / contain no-repeat; animation: kisisel-dus calc(var(--sure, 14s) * 1.6) linear var(--gecikme, 0s) infinite, kisisel-donus 16s linear infinite; }
.kisisel-efekt-gezegen .kisisel-parcacik:nth-child(3n+1) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><circle cx='20' cy='20' r='11' fill='%2393c5fd'/><path d='M12 14c5-3 11-3 16 0M10 22c6 3 14 3 20 0' stroke='%231e3a8a' stroke-width='2' fill='none'/></svg>"); }
.kisisel-efekt-gezegen .kisisel-parcacik:nth-child(3n+2) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><circle cx='20' cy='20' r='9' fill='%23fdba74'/><circle cx='16' cy='17' r='2.5' fill='%23c2410c' opacity='.6'/><circle cx='24' cy='23' r='2' fill='%23c2410c' opacity='.6'/></svg>"); }
.tema-onizleme[data-tema="gezegen"] { background: radial-gradient(circle at 15% 20%, #3b2a7a, #0b1230 45%, #05081a); }
.tema-onizleme[data-tema="gezegen"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 420 300' width='420' height='300'><g fill='none' stroke='rgba(255,255,255,0.10)' stroke-width='1'><ellipse cx='30' cy='30' rx='90' ry='60'/><ellipse cx='30' cy='30' rx='150' ry='100'/><ellipse cx='30' cy='30' rx='210' ry='140'/></g><circle cx='30' cy='30' r='26' fill='rgba(250,204,21,0.55)'/><circle cx='30' cy='30' r='40' fill='rgba(250,204,21,0.12)'/><circle cx='120' cy='30' r='5' fill='rgba(147,197,253,0.8)'/><circle cx='180' cy='30' r='8' fill='rgba(252,165,165,0.8)'/><ellipse cx='240' cy='30' rx='16' ry='5' fill='none' stroke='rgba(253,224,71,0.6)' stroke-width='2'/><circle cx='240' cy='30' r='9' fill='rgba(253,230,138,0.8)'/></svg>") 0 0 / 420px 300px no-repeat; }
.tema-onizleme[data-tema="gezegen"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='12' r='6' fill='%23fde68a'/><ellipse cx='12' cy='12' rx='11' ry='3.5' fill='none' stroke='%23dfe7ff' stroke-width='1.8' transform='rotate(-20 12 12)'/></svg>"); }
:root[data-kisisel-tema="muzik"] .hero, :root[data-kisisel-tema="muzik"] .hero.hero-live { background: linear-gradient(135deg, #2e1065, #6d28d9 55%, #a855f7); }
html[data-kisisel-tema="muzik"] .hero::before { background: repeating-linear-gradient(180deg, transparent 0 22px, rgba(255,255,255,.10) 22px 23px) 0 55% / 100% 120px no-repeat, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 100' width='200' height='100'><g fill='rgba(233,213,255,0.35)'><ellipse cx='30' cy='70' rx='9' ry='6' transform='rotate(-20 30 70)'/><path d='M38 68V22l6 4' stroke='rgba(233,213,255,0.35)' stroke-width='4' fill='none'/><ellipse cx='110' cy='80' rx='9' ry='6' transform='rotate(-20 110 80)'/><ellipse cx='140' cy='72' rx='9' ry='6' transform='rotate(-20 140 72)'/><path d='M118 78V30h30v42' stroke='rgba(233,213,255,0.35)' stroke-width='4' fill='none'/></g></svg>") 70% 20% / 200px 100px no-repeat; }
html[data-kisisel-tema="muzik"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><ellipse cx='7' cy='18' rx='3.5' ry='2.5' fill='%23e9d5ff' transform='rotate(-20 7 18)'/><path d='M10 17V4l7 3' fill='none' stroke='%23e9d5ff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }
:root[data-kisisel-tema="muzik"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(233,213,255,.40), transparent 62%); }
:root[data-kisisel-tema="muzik"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(244,114,182,.28), transparent 62%); }
:root[data-kisisel-tema="muzik"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(96,165,250,.22), transparent 62%); }
.kisisel-efekt-nota .kisisel-parcacik { width: 26px; height: 30px; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><ellipse cx='11' cy='31' rx='7' ry='5' fill='%23e9d5ff' transform='rotate(-20 11 31)'/><path d='M17 29V6l12 5' fill='none' stroke='%23e9d5ff' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'/></svg>") center / contain no-repeat; filter: drop-shadow(0 2px 3px rgba(0,0,0,.3)); animation-name: kisisel-yuksel; top: 104vh; }
.kisisel-efekt-nota .kisisel-parcacik:nth-child(2n) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><g fill='%23f5d0fe'><ellipse cx='9' cy='33' rx='6' ry='4.5' transform='rotate(-20 9 33)'/><ellipse cx='27' cy='29' rx='6' ry='4.5' transform='rotate(-20 27 29)'/></g><path d='M14 31V8l18-4v22' fill='none' stroke='%23f5d0fe' stroke-width='3.2' stroke-linejoin='round'/></svg>"); }
.tema-onizleme[data-tema="muzik"] { background: linear-gradient(135deg, #2e1065, #6d28d9 55%, #a855f7); }
.tema-onizleme[data-tema="muzik"]::before { background: repeating-linear-gradient(180deg, transparent 0 22px, rgba(255,255,255,.10) 22px 23px) 0 55% / 100% 120px no-repeat, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 100' width='200' height='100'><g fill='rgba(233,213,255,0.35)'><ellipse cx='30' cy='70' rx='9' ry='6' transform='rotate(-20 30 70)'/><path d='M38 68V22l6 4' stroke='rgba(233,213,255,0.35)' stroke-width='4' fill='none'/><ellipse cx='110' cy='80' rx='9' ry='6' transform='rotate(-20 110 80)'/><ellipse cx='140' cy='72' rx='9' ry='6' transform='rotate(-20 140 72)'/><path d='M118 78V30h30v42' stroke='rgba(233,213,255,0.35)' stroke-width='4' fill='none'/></g></svg>") 70% 20% / 200px 100px no-repeat; }
.tema-onizleme[data-tema="muzik"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><ellipse cx='7' cy='18' rx='3.5' ry='2.5' fill='%23e9d5ff' transform='rotate(-20 7 18)'/><path d='M10 17V4l7 3' fill='none' stroke='%23e9d5ff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }
:root[data-kisisel-tema="ressam"] .hero, :root[data-kisisel-tema="ressam"] .hero.hero-live { background: linear-gradient(135deg, #7e22ce, #db2777 50%, #f97316); }
html[data-kisisel-tema="ressam"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 260 170' width='260' height='170'><g stroke-linecap='round' fill='none' stroke-width='14' opacity='0.35'><path d='M10 120c60-40 120-40 190-10' stroke='%23fde047'/><path d='M40 60c50 20 110 10 170-20' stroke='%2322d3ee'/><path d='M100 150c40-10 70-30 100-70' stroke='%234ade80'/></g></svg>") 100% 0 / 260px 170px no-repeat; }
html[data-kisisel-tema="ressam"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 3a9 9 0 1 0 0 18c1.5 0 2-1 2-2s-1-2 0-3 3 0 4-1a9 9 0 0 0-6-12z' fill='%23fde7f3'/><circle cx='8' cy='10' r='1.6' fill='%23ef4444'/><circle cx='12' cy='7' r='1.6' fill='%233b82f6'/><circle cx='16' cy='10' r='1.6' fill='%2322c55e'/><circle cx='8' cy='15' r='1.6' fill='%23eab308'/></svg>"); }
:root[data-kisisel-tema="ressam"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(253,224,71,.38), transparent 62%); }
:root[data-kisisel-tema="ressam"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(34,211,238,.34), transparent 62%); }
:root[data-kisisel-tema="ressam"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(74,222,128,.28), transparent 62%); }
.kisisel-efekt-boya .kisisel-parcacik { width: 24px; height: 28px; border-radius: 60% 40% 55% 45% / 50% 60% 40% 50%; background: hsl(calc(var(--ton, 0) * 3.6), 85%, 58%); box-shadow: inset -3px -3px 0 rgba(0,0,0,.12); }
.kisisel-efekt-boya .kisisel-parcacik::after { content: ''; position: absolute; left: 40%; top: -6px; width: 6px; height: 10px; border-radius: 50%; background: inherit; }
.tema-onizleme[data-tema="ressam"] { background: linear-gradient(135deg, #7e22ce, #db2777 50%, #f97316); }
.tema-onizleme[data-tema="ressam"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 260 170' width='260' height='170'><g stroke-linecap='round' fill='none' stroke-width='14' opacity='0.35'><path d='M10 120c60-40 120-40 190-10' stroke='%23fde047'/><path d='M40 60c50 20 110 10 170-20' stroke='%2322d3ee'/><path d='M100 150c40-10 70-30 100-70' stroke='%234ade80'/></g></svg>") 100% 0 / 260px 170px no-repeat; }
.tema-onizleme[data-tema="ressam"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 3a9 9 0 1 0 0 18c1.5 0 2-1 2-2s-1-2 0-3 3 0 4-1a9 9 0 0 0-6-12z' fill='%23fde7f3'/><circle cx='8' cy='10' r='1.6' fill='%23ef4444'/><circle cx='12' cy='7' r='1.6' fill='%233b82f6'/><circle cx='16' cy='10' r='1.6' fill='%2322c55e'/><circle cx='8' cy='15' r='1.6' fill='%23eab308'/></svg>"); }
:root[data-kisisel-tema="okyanus"] .hero, :root[data-kisisel-tema="okyanus"] .hero.hero-live { background: linear-gradient(180deg, #0c4a6e, #075985 50%, #0369a1); }
html[data-kisisel-tema="okyanus"] .hero::before { background: linear-gradient(100deg, transparent 30%, rgba(255,255,255,.10) 32%, transparent 36%, transparent 55%, rgba(255,255,255,.08) 57%, transparent 62%), radial-gradient(circle at 20% 90%, rgba(255,255,255,.18) 0 3px, transparent 4px), radial-gradient(circle at 26% 70%, rgba(255,255,255,.14) 0 2px, transparent 3px), url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 60' width='120' height='60'><path d='M0 40c20-14 40-14 60 0s40 14 60 0' fill='none' stroke='rgba(125,211,252,0.35)' stroke-width='4'/><path d='M0 40c20 14 40 14 60 0s40-14 60 0' fill='none' stroke='rgba(56,189,248,0.25)' stroke-width='3'/></svg>") 0 100% / 120px 60px repeat-x; }
html[data-kisisel-tema="okyanus"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 12c3-4 7-6 11-6l5 3-5 3c-4 0-8-2-11-6zM14 6l6 6-6 6' fill='%23bae6fd'/><circle cx='8' cy='11' r='1.2' fill='%23075985'/></svg>"); }
:root[data-kisisel-tema="okyanus"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(125,211,252,.38), transparent 62%); }
:root[data-kisisel-tema="okyanus"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(45,212,191,.28), transparent 62%); }
:root[data-kisisel-tema="okyanus"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(255,255,255,.18), transparent 62%); }
.kisisel-efekt-balik .kisisel-parcacik { width: 44px; height: 24px; top: calc(12vh + var(--ton, 50) * .7vh); left: -14vw; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 40'><path d='M4 20c8-12 20-18 34-16l14 6-14 6c-14 2-26-4-34-16zM52 10l10 10-10 10' fill='%23bae6fd'/><circle cx='16' cy='18' r='2.5' fill='%23075985'/><path d='M24 12c4 2 8 2 12 0' stroke='%237dd3fc' stroke-width='1.5' fill='none'/></svg>") center / contain no-repeat; animation: kisisel-yuz calc(var(--sure, 14s) * 1.5) linear var(--gecikme, 0s) infinite; }
.kisisel-efekt-balik .kisisel-parcacik:nth-child(3n+1) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 40'><path d='M4 20c8-12 20-18 34-16l14 6-14 6c-14 2-26-4-34-16zM52 10l10 10-10 10' fill='%23fdba74'/><circle cx='16' cy='18' r='2.5' fill='%237c2d12'/></svg>"); }
@keyframes kisisel-yuz { 0% { transform: translate3d(0, 0, 0) scale(var(--boyut, 1)); opacity: 0; } 6% { opacity: .85; } 50% { transform: translate3d(62vw, -5vh, 0) scale(var(--boyut, 1)); } 94% { opacity: .8; } 100% { transform: translate3d(126vw, 3vh, 0) scale(var(--boyut, 1)); opacity: 0; } }
.tema-onizleme[data-tema="okyanus"] { background: linear-gradient(180deg, #0c4a6e, #075985 50%, #0369a1); }
.tema-onizleme[data-tema="okyanus"]::before { background: linear-gradient(100deg, transparent 30%, rgba(255,255,255,.10) 32%, transparent 36%, transparent 55%, rgba(255,255,255,.08) 57%, transparent 62%), radial-gradient(circle at 20% 90%, rgba(255,255,255,.18) 0 3px, transparent 4px), radial-gradient(circle at 26% 70%, rgba(255,255,255,.14) 0 2px, transparent 3px), url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 60' width='120' height='60'><path d='M0 40c20-14 40-14 60 0s40 14 60 0' fill='none' stroke='rgba(125,211,252,0.35)' stroke-width='4'/><path d='M0 40c20 14 40 14 60 0s40-14 60 0' fill='none' stroke='rgba(56,189,248,0.25)' stroke-width='3'/></svg>") 0 100% / 120px 60px repeat-x; }
.tema-onizleme[data-tema="okyanus"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 12c3-4 7-6 11-6l5 3-5 3c-4 0-8-2-11-6zM14 6l6 6-6 6' fill='%23bae6fd'/><circle cx='8' cy='11' r='1.2' fill='%23075985'/></svg>"); }
:root[data-kisisel-tema="kelebek"] .hero, :root[data-kisisel-tema="kelebek"] .hero.hero-live { background: linear-gradient(135deg, #4a1d96, #9333ea 50%, #f472b6); }
html[data-kisisel-tema="kelebek"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 170' width='200' height='170'><g fill='rgba(255,255,255,0.18)'><circle cx='30' cy='120' r='10'/><circle cx='42' cy='110' r='10'/><circle cx='54' cy='120' r='10'/><circle cx='42' cy='132' r='10'/><circle cx='42' cy='121' r='6' fill='rgba(253,224,71,0.5)'/><circle cx='150' cy='130' r='8'/><circle cx='160' cy='122' r='8'/><circle cx='170' cy='130' r='8'/><circle cx='160' cy='138' r='8'/><circle cx='160' cy='130' r='5' fill='rgba(253,224,71,0.5)'/></g><g stroke='rgba(134,239,172,0.4)' stroke-width='3' fill='none'><path d='M42 132v40M160 138v34'/></g></svg>") 85% 100% / 200px 170px no-repeat; }
html[data-kisisel-tema="kelebek"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 12C9 6 3 5 3 9c0 3 4 5 9 3M12 12c3-6 9-7 9-3 0 3-4 5-9 3M12 12c-4 1-8 4-8 7s5 2 8-4M12 12c4 1 8 4 8 7s-5 2-8-4' fill='%23fbcfe8' stroke='%23fbcfe8' stroke-width='.8'/><path d='M12 8v10' stroke='%234a1d96' stroke-width='1.5'/></svg>"); }
:root[data-kisisel-tema="kelebek"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(251,207,232,.42), transparent 62%); }
:root[data-kisisel-tema="kelebek"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(253,224,71,.26), transparent 62%); }
:root[data-kisisel-tema="kelebek"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(134,239,172,.24), transparent 62%); }
.kisisel-efekt-kelebek .kisisel-parcacik { width: 30px; height: 26px; animation-name: kisisel-yuksel; top: 104vh; }
.kisisel-efekt-kelebek .kisisel-parcacik::after { content: ''; position: absolute; inset: 0; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M20 20C15 8 3 6 3 14c0 6 8 10 17 6M20 20c5-12 17-14 17-6 0 6-8 10-17 6M20 20c-7 2-14 8-14 13s9 4 14-7M20 20c7 2 14 8 14 13s-9 4-14-7' fill='%23f9a8d4' stroke='%23fbcfe8'/><path d='M20 12v18' stroke='%234a1d96' stroke-width='2.5'/></svg>") center / contain no-repeat; animation: kisisel-kanat .5s ease-in-out infinite alternate; }
.kisisel-efekt-kelebek .kisisel-parcacik:nth-child(3n+1)::after { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M20 20C15 8 3 6 3 14c0 6 8 10 17 6M20 20c5-12 17-14 17-6 0 6-8 10-17 6M20 20c-7 2-14 8-14 13s9 4 14-7M20 20c7 2 14 8 14 13s-9 4-14-7' fill='%23fde047' stroke='%23fef08a'/><path d='M20 12v18' stroke='%234a1d96' stroke-width='2.5'/></svg>"); }
.kisisel-efekt-kelebek .kisisel-parcacik:nth-child(3n+2)::after { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M20 20C15 8 3 6 3 14c0 6 8 10 17 6M20 20c5-12 17-14 17-6 0 6-8 10-17 6M20 20c-7 2-14 8-14 13s9 4 14-7M20 20c7 2 14 8 14 13s-9 4-14-7' fill='%2393c5fd' stroke='%23bfdbfe'/><path d='M20 12v18' stroke='%231e3a8a' stroke-width='2.5'/></svg>"); }
@keyframes kisisel-kanat { from { transform: rotateY(0deg); } to { transform: rotateY(65deg); } }
.tema-onizleme[data-tema="kelebek"] { background: linear-gradient(135deg, #4a1d96, #9333ea 50%, #f472b6); }
.tema-onizleme[data-tema="kelebek"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 170' width='200' height='170'><g fill='rgba(255,255,255,0.18)'><circle cx='30' cy='120' r='10'/><circle cx='42' cy='110' r='10'/><circle cx='54' cy='120' r='10'/><circle cx='42' cy='132' r='10'/><circle cx='42' cy='121' r='6' fill='rgba(253,224,71,0.5)'/><circle cx='150' cy='130' r='8'/><circle cx='160' cy='122' r='8'/><circle cx='170' cy='130' r='8'/><circle cx='160' cy='138' r='8'/><circle cx='160' cy='130' r='5' fill='rgba(253,224,71,0.5)'/></g><g stroke='rgba(134,239,172,0.4)' stroke-width='3' fill='none'><path d='M42 132v40M160 138v34'/></g></svg>") 85% 100% / 200px 170px no-repeat; }
.tema-onizleme[data-tema="kelebek"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M12 12C9 6 3 5 3 9c0 3 4 5 9 3M12 12c3-6 9-7 9-3 0 3-4 5-9 3M12 12c-4 1-8 4-8 7s5 2 8-4M12 12c4 1 8 4 8 7s-5 2-8-4' fill='%23fbcfe8' stroke='%23fbcfe8' stroke-width='.8'/><path d='M12 8v10' stroke='%234a1d96' stroke-width='1.5'/></svg>"); }
:root[data-kisisel-tema="firtina"] .hero, :root[data-kisisel-tema="firtina"] .hero.hero-live { background: linear-gradient(160deg, #111827, #1f2937 50%, #374151); }
html[data-kisisel-tema="firtina"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 340 150' width='340' height='150'><g fill='rgba(255,255,255,0.10)'><ellipse cx='60' cy='40' rx='50' ry='22'/><ellipse cx='100' cy='30' rx='40' ry='20'/><ellipse cx='240' cy='50' rx='60' ry='24'/><ellipse cx='290' cy='38' rx='36' ry='18'/></g><path d='M120 60l-14 34h12l-10 40 30-52h-12l12-22z' fill='rgba(253,224,71,0.45)'/></svg>") 100% 0 / 340px 150px no-repeat; }
html[data-kisisel-tema="firtina"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 2L5 13h5l-2 9 9-12h-5l3-8z' fill='%23fde047'/></svg>"); }
:root[data-kisisel-tema="firtina"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(253,224,71,.30), transparent 62%); }
:root[data-kisisel-tema="firtina"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(148,163,184,.30), transparent 62%); }
:root[data-kisisel-tema="firtina"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(96,165,250,.20), transparent 62%); }
.kisisel-efekt-simsek .kisisel-parcacik { width: 34px; height: 70px; top: calc(var(--ton, 50) * .55vh); background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 80'><path d='M22 2 6 40h12L12 78l24-46H24l8-30z' fill='%23fde047' stroke='%23fef9c3' stroke-width='1.5'/></svg>") center / contain no-repeat; filter: drop-shadow(0 0 8px rgba(253,224,71,.9)); animation: kisisel-simsek calc(var(--sure, 14s) / 2) linear var(--gecikme, 0s) infinite; }
@keyframes kisisel-simsek { 0%, 86% { opacity: 0; } 88% { opacity: 1; } 90% { opacity: .15; } 92% { opacity: .9; } 96%, 100% { opacity: 0; } }
.tema-onizleme[data-tema="firtina"] { background: linear-gradient(160deg, #111827, #1f2937 50%, #374151); }
.tema-onizleme[data-tema="firtina"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 340 150' width='340' height='150'><g fill='rgba(255,255,255,0.10)'><ellipse cx='60' cy='40' rx='50' ry='22'/><ellipse cx='100' cy='30' rx='40' ry='20'/><ellipse cx='240' cy='50' rx='60' ry='24'/><ellipse cx='290' cy='38' rx='36' ry='18'/></g><path d='M120 60l-14 34h12l-10 40 30-52h-12l12-22z' fill='rgba(253,224,71,0.45)'/></svg>") 100% 0 / 340px 150px no-repeat; }
.tema-onizleme[data-tema="firtina"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M13 2L5 13h5l-2 9 9-12h-5l3-8z' fill='%23fde047'/></svg>"); }
:root[data-kisisel-tema="atesbocegi"] .hero, :root[data-kisisel-tema="atesbocegi"] .hero.hero-live { background: linear-gradient(180deg, #0b1b2b, #14352b 60%, #1d4d3a); }
html[data-kisisel-tema="atesbocegi"] .hero::before { background: radial-gradient(circle at 86% 22%, #fef3c7 0 18px, rgba(254,243,199,.25) 19px 30px, transparent 31px), url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 180 60' width='180' height='60'><path d='M0 60c10-30 14-30 22-2 6-30 12-30 20-6 6-30 10-30 18 4 6-30 12-30 20-4 8-30 12-30 20 2 8-30 12-30 20-2 8-28 12-28 20 6 8-30 12-30 20-2 8-26 12-26 20 4V60z' fill='rgba(20,83,45,0.85)'/></svg>") 0 100% / 180px 60px repeat-x; }
html[data-kisisel-tema="atesbocegi"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='13' r='5' fill='%23fde68a'/><circle cx='12' cy='13' r='8' fill='rgba(253,230,138,0.35)'/><path d='M12 8c-2-3-4-3-5-2M12 8c2-3 4-3 5-2' stroke='%23bbf7d0' stroke-width='1.2' fill='none'/></svg>"); }
:root[data-kisisel-tema="atesbocegi"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(253,230,138,.30), transparent 62%); }
:root[data-kisisel-tema="atesbocegi"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(74,222,128,.22), transparent 62%); }
:root[data-kisisel-tema="atesbocegi"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(255,255,255,.10), transparent 62%); }
.kisisel-efekt-atesbocegi .kisisel-parcacik { width: 7px; height: 7px; border-radius: 50%; background: #fde68a; box-shadow: 0 0 10px 3px rgba(253,230,138,.7); animation: kisisel-yuksel calc(var(--sure, 14s) * 1.6) ease-in-out var(--gecikme, 0s) infinite, kisisel-isilti 1.4s ease-in-out infinite alternate; top: 104vh; }
@keyframes kisisel-isilti { from { filter: brightness(.5); } to { filter: brightness(1.6); } }
.tema-onizleme[data-tema="atesbocegi"] { background: linear-gradient(180deg, #0b1b2b, #14352b 60%, #1d4d3a); }
.tema-onizleme[data-tema="atesbocegi"]::before { background: radial-gradient(circle at 86% 22%, #fef3c7 0 18px, rgba(254,243,199,.25) 19px 30px, transparent 31px), url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 180 60' width='180' height='60'><path d='M0 60c10-30 14-30 22-2 6-30 12-30 20-6 6-30 10-30 18 4 6-30 12-30 20-4 8-30 12-30 20 2 8-30 12-30 20-2 8-28 12-28 20 6 8-30 12-30 20-2 8-26 12-26 20 4V60z' fill='rgba(20,83,45,0.85)'/></svg>") 0 100% / 180px 60px repeat-x; }
.tema-onizleme[data-tema="atesbocegi"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><circle cx='12' cy='13' r='5' fill='%23fde68a'/><circle cx='12' cy='13' r='8' fill='rgba(253,230,138,0.35)'/><path d='M12 8c-2-3-4-3-5-2M12 8c2-3 4-3 5-2' stroke='%23bbf7d0' stroke-width='1.2' fill='none'/></svg>"); }
:root[data-kisisel-tema="origami"] .hero, :root[data-kisisel-tema="origami"] .hero.hero-live { background: linear-gradient(135deg, #7c2d12, #ea580c 55%, #fbbf24); }
html[data-kisisel-tema="origami"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120' width='120' height='120'><g fill='rgba(255,255,255,0.10)'><path d='M0 0h60l-60 60z'/><path d='M60 0h60v60z'/><path d='M0 60h60v60z'/><path d='M120 60v60H60z'/></g></svg>") 0 0 / 120px 120px repeat; }
html[data-kisisel-tema="origami"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 13l7-3 3-7 3 7 5 1-5 3-1 6-4-5-4 3 1-4z' fill='%23ffedd5' stroke='%23fdba74' stroke-width='.8' stroke-linejoin='round'/></svg>"); }
:root[data-kisisel-tema="origami"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(253,186,116,.40), transparent 62%); }
:root[data-kisisel-tema="origami"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(254,240,138,.30), transparent 62%); }
:root[data-kisisel-tema="origami"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(248,113,113,.22), transparent 62%); }
.kisisel-efekt-origami .kisisel-parcacik { width: 34px; height: 34px; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M4 22l14-6 5-13 5 13 10 2-9 5-2 12-8-9-8 5 3-8z' fill='%23fff7ed' stroke='%23fdba74' stroke-width='1.2' stroke-linejoin='round'/><path d='M18 16l5 6M23 22l9 1' stroke='%23fdba74' stroke-width='1' fill='none'/></svg>") center / contain no-repeat; filter: drop-shadow(1px 3px 2px rgba(0,0,0,.3)); animation: kisisel-yaprak-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite; }
.kisisel-efekt-origami .kisisel-parcacik:nth-child(3n+1) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M4 22l14-6 5-13 5 13 10 2-9 5-2 12-8-9-8 5 3-8z' fill='%23fecaca' stroke='%23f87171' stroke-width='1.2' stroke-linejoin='round'/></svg>"); }
.kisisel-efekt-origami .kisisel-parcacik:nth-child(3n+2) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 40'><path d='M4 22l14-6 5-13 5 13 10 2-9 5-2 12-8-9-8 5 3-8z' fill='%23bfdbfe' stroke='%2360a5fa' stroke-width='1.2' stroke-linejoin='round'/></svg>"); }
.tema-onizleme[data-tema="origami"] { background: linear-gradient(135deg, #7c2d12, #ea580c 55%, #fbbf24); }
.tema-onizleme[data-tema="origami"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120' width='120' height='120'><g fill='rgba(255,255,255,0.10)'><path d='M0 0h60l-60 60z'/><path d='M60 0h60v60z'/><path d='M0 60h60v60z'/><path d='M120 60v60H60z'/></g></svg>") 0 0 / 120px 120px repeat; }
.tema-onizleme[data-tema="origami"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 13l7-3 3-7 3 7 5 1-5 3-1 6-4-5-4 3 1-4z' fill='%23ffedd5' stroke='%23fdba74' stroke-width='.8' stroke-linejoin='round'/></svg>"); }
:root[data-kisisel-tema="retro"] .hero, :root[data-kisisel-tema="retro"] .hero.hero-live { background: linear-gradient(135deg, #0f0a2e, #3b1a8a 50%, #7c3aed); }
html[data-kisisel-tema="retro"] .hero::before { background: linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px) 0 0 / 100% 12px, linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px) 0 0 / 12px 100%, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 88 64' width='88' height='64'><g fill='rgba(167,243,208,0.45)'><rect x='16' y='0' width='8' height='8'/><rect x='64' y='0' width='8' height='8'/><rect x='24' y='8' width='8' height='8'/><rect x='56' y='8' width='8' height='8'/><rect x='16' y='16' width='56' height='8'/><rect x='8' y='24' width='16' height='8'/><rect x='32' y='24' width='24' height='8'/><rect x='64' y='24' width='16' height='8'/><rect x='0' y='32' width='88' height='8'/><rect x='0' y='40' width='8' height='8'/><rect x='16' y='40' width='56' height='8'/><rect x='80' y='40' width='8' height='8'/><rect x='0' y='48' width='8' height='8'/><rect x='16' y='48' width='8' height='8'/><rect x='64' y='48' width='8' height='8'/><rect x='80' y='48' width='8' height='8'/><rect x='24' y='56' width='16' height='8'/><rect x='48' y='56' width='16' height='8'/></g></svg>") 88% 30% / 88px 64px no-repeat; }
html[data-kisisel-tema="retro"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4 4h4v4H4zM16 4h4v4h-4zM8 8h4v4H8zM12 8h4v4h-4zM4 12h16v4H4zM8 16h8v4H8z' fill='%23f0abfc'/></svg>"); }
:root[data-kisisel-tema="retro"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(240,171,252,.36), transparent 62%); }
:root[data-kisisel-tema="retro"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(110,231,183,.30), transparent 62%); }
:root[data-kisisel-tema="retro"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(253,224,71,.22), transparent 62%); }
.kisisel-efekt-piksel .kisisel-parcacik { width: 12px; height: 12px; border-radius: 0; background: hsl(calc(var(--ton, 0) * 3.6), 90%, 62%); box-shadow: 0 0 0 2px rgba(0,0,0,.25); animation: kisisel-dus-duz var(--sure, 14s) steps(22) var(--gecikme, 0s) infinite; }
@keyframes kisisel-dus-duz { 0% { transform: translate3d(0, 0, 0) scale(var(--boyut, 1)); opacity: 0; } 6% { opacity: .9; } 50% { transform: translate3d(18px, 55vh, 0) scale(var(--boyut, 1)); } 94% { opacity: .9; } 100% { transform: translate3d(-12px, 112vh, 0) scale(var(--boyut, 1)); opacity: 0; } }
.tema-onizleme[data-tema="retro"] { background: linear-gradient(135deg, #0f0a2e, #3b1a8a 50%, #7c3aed); }
.tema-onizleme[data-tema="retro"]::before { background: linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px) 0 0 / 100% 12px, linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px) 0 0 / 12px 100%, url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 88 64' width='88' height='64'><g fill='rgba(167,243,208,0.45)'><rect x='16' y='0' width='8' height='8'/><rect x='64' y='0' width='8' height='8'/><rect x='24' y='8' width='8' height='8'/><rect x='56' y='8' width='8' height='8'/><rect x='16' y='16' width='56' height='8'/><rect x='8' y='24' width='16' height='8'/><rect x='32' y='24' width='24' height='8'/><rect x='64' y='24' width='16' height='8'/><rect x='0' y='32' width='88' height='8'/><rect x='0' y='40' width='8' height='8'/><rect x='16' y='40' width='56' height='8'/><rect x='80' y='40' width='8' height='8'/><rect x='0' y='48' width='8' height='8'/><rect x='16' y='48' width='8' height='8'/><rect x='64' y='48' width='8' height='8'/><rect x='80' y='48' width='8' height='8'/><rect x='24' y='56' width='16' height='8'/><rect x='48' y='56' width='16' height='8'/></g></svg>") 88% 30% / 88px 64px no-repeat; }
.tema-onizleme[data-tema="retro"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4 4h4v4H4zM16 4h4v4h-4zM8 8h4v4H8zM12 8h4v4h-4zM4 12h16v4H4zM8 16h8v4H8z' fill='%23f0abfc'/></svg>"); }
:root[data-kisisel-tema="kutlama"] .hero, :root[data-kisisel-tema="kutlama"] .hero.hero-live { background: linear-gradient(135deg, #be123c, #f43f5e 50%, #fb923c); }
html[data-kisisel-tema="kutlama"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 260 130' width='260' height='130'><g><rect x='20' y='20' width='10' height='18' fill='rgba(253,224,71,0.5)' transform='rotate(20 25 29)'/><rect x='90' y='60' width='10' height='18' fill='rgba(255,255,255,0.4)' transform='rotate(-30 95 69)'/><rect x='160' y='25' width='10' height='18' fill='rgba(110,231,183,0.5)' transform='rotate(45 165 34)'/><rect x='230' y='80' width='10' height='18' fill='rgba(147,197,253,0.5)' transform='rotate(-15 235 89)'/><circle cx='60' cy='100' r='6' fill='rgba(255,255,255,0.35)'/><circle cx='200' cy='110' r='5' fill='rgba(253,224,71,0.45)'/><circle cx='130' cy='20' r='5' fill='rgba(240,171,252,0.5)'/></g></svg>") 0 0 / 260px 130px repeat; }
html[data-kisisel-tema="kutlama"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 21l5-13 8 8z' fill='%23fff1f2'/><path d='M8 8l8 8' stroke='%23fda4af' stroke-width='1.5'/><g fill='%23fde047'><circle cx='17' cy='4' r='1.5'/><circle cx='21' cy='9' r='1.5'/><circle cx='13' cy='3' r='1.2'/></g><path d='M15 8l4-4M18 12l3-1' stroke='%236ee7b7' stroke-width='1.4' stroke-linecap='round'/></svg>"); }
:root[data-kisisel-tema="kutlama"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(253,224,71,.40), transparent 62%); }
:root[data-kisisel-tema="kutlama"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(110,231,183,.30), transparent 62%); }
:root[data-kisisel-tema="kutlama"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(255,255,255,.28), transparent 62%); }
.kisisel-efekt-konfeti .kisisel-parcacik { width: 10px; height: 16px; border-radius: 2px; background: hsl(calc(var(--ton, 0) * 3.6), 90%, 60%); animation: kisisel-yaprak-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite; }
.kisisel-efekt-konfeti .kisisel-parcacik:nth-child(4n+1) { width: 12px; height: 12px; border-radius: 50%; }
.kisisel-efekt-konfeti .kisisel-parcacik:nth-child(4n+3) { width: 18px; height: 6px; }
.tema-onizleme[data-tema="kutlama"] { background: linear-gradient(135deg, #be123c, #f43f5e 50%, #fb923c); }
.tema-onizleme[data-tema="kutlama"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 260 130' width='260' height='130'><g><rect x='20' y='20' width='10' height='18' fill='rgba(253,224,71,0.5)' transform='rotate(20 25 29)'/><rect x='90' y='60' width='10' height='18' fill='rgba(255,255,255,0.4)' transform='rotate(-30 95 69)'/><rect x='160' y='25' width='10' height='18' fill='rgba(110,231,183,0.5)' transform='rotate(45 165 34)'/><rect x='230' y='80' width='10' height='18' fill='rgba(147,197,253,0.5)' transform='rotate(-15 235 89)'/><circle cx='60' cy='100' r='6' fill='rgba(255,255,255,0.35)'/><circle cx='200' cy='110' r='5' fill='rgba(253,224,71,0.45)'/><circle cx='130' cy='20' r='5' fill='rgba(240,171,252,0.5)'/></g></svg>") 0 0 / 260px 130px repeat; }
.tema-onizleme[data-tema="kutlama"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M3 21l5-13 8 8z' fill='%23fff1f2'/><path d='M8 8l8 8' stroke='%23fda4af' stroke-width='1.5'/><g fill='%23fde047'><circle cx='17' cy='4' r='1.5'/><circle cx='21' cy='9' r='1.5'/><circle cx='13' cy='3' r='1.2'/></g><path d='M15 8l4-4M18 12l3-1' stroke='%236ee7b7' stroke-width='1.4' stroke-linecap='round'/></svg>"); }
:root[data-kisisel-tema="kutuphane"] .hero, :root[data-kisisel-tema="kutuphane"] .hero.hero-live { background: linear-gradient(135deg, #292524, #57534e 50%, #78350f); }
html[data-kisisel-tema="kutuphane"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 160 106' width='160' height='106'><g><rect x='0' y='20' width='22' height='80' fill='rgba(180,83,9,0.55)'/><rect x='24' y='10' width='18' height='90' fill='rgba(120,53,15,0.6)'/><rect x='44' y='26' width='26' height='74' fill='rgba(146,64,14,0.55)'/><rect x='72' y='14' width='16' height='86' fill='rgba(217,119,6,0.45)'/><rect x='90' y='30' width='24' height='70' fill='rgba(120,53,15,0.6)'/><rect x='116' y='18' width='20' height='82' fill='rgba(180,83,9,0.5)'/><rect x='138' y='24' width='22' height='76' fill='rgba(146,64,14,0.55)'/><g stroke='rgba(255,237,213,0.35)' stroke-width='2'><path d='M4 30h14M4 36h14M28 20h10M48 36h18M76 26h8M94 40h16M120 30h12M142 34h14'/></g><rect x='0' y='100' width='160' height='6' fill='rgba(255,237,213,0.25)'/></g></svg>") 0 100% / 160px 106px repeat-x; }
html[data-kisisel-tema="kutuphane"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4 4h6a3 3 0 0 1 3 3v13a2 2 0 0 0-2-2H4zM20 4h-6a3 3 0 0 0-3 3v13a2 2 0 0 1 2-2h7z' fill='%23fde68a' stroke='%23fef3c7' stroke-width='.8'/></svg>"); }
:root[data-kisisel-tema="kutuphane"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(253,230,138,.30), transparent 62%); }
:root[data-kisisel-tema="kutuphane"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(217,119,6,.30), transparent 62%); }
:root[data-kisisel-tema="kutuphane"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(255,255,255,.12), transparent 62%); }
.kisisel-efekt-sayfa .kisisel-parcacik { width: 22px; height: 28px; border-radius: 2px; background: repeating-linear-gradient(180deg, #fffbeb 0 5px, #d6c7a5 5px 6px) 0 6px / 100% 100% no-repeat, #fffbeb; box-shadow: 0 2px 4px rgba(0,0,0,.35); animation: kisisel-yaprak-dus var(--sure, 14s) linear var(--gecikme, 0s) infinite; }
.tema-onizleme[data-tema="kutuphane"] { background: linear-gradient(135deg, #292524, #57534e 50%, #78350f); }
.tema-onizleme[data-tema="kutuphane"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 160 106' width='160' height='106'><g><rect x='0' y='20' width='22' height='80' fill='rgba(180,83,9,0.55)'/><rect x='24' y='10' width='18' height='90' fill='rgba(120,53,15,0.6)'/><rect x='44' y='26' width='26' height='74' fill='rgba(146,64,14,0.55)'/><rect x='72' y='14' width='16' height='86' fill='rgba(217,119,6,0.45)'/><rect x='90' y='30' width='24' height='70' fill='rgba(120,53,15,0.6)'/><rect x='116' y='18' width='20' height='82' fill='rgba(180,83,9,0.5)'/><rect x='138' y='24' width='22' height='76' fill='rgba(146,64,14,0.55)'/><g stroke='rgba(255,237,213,0.35)' stroke-width='2'><path d='M4 30h14M4 36h14M28 20h10M48 36h18M76 26h8M94 40h16M120 30h12M142 34h14'/></g><rect x='0' y='100' width='160' height='6' fill='rgba(255,237,213,0.25)'/></g></svg>") 0 100% / 160px 106px repeat-x; }
.tema-onizleme[data-tema="kutuphane"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M4 4h6a3 3 0 0 1 3 3v13a2 2 0 0 0-2-2H4zM20 4h-6a3 3 0 0 0-3 3v13a2 2 0 0 1 2-2h7z' fill='%23fde68a' stroke='%23fef3c7' stroke-width='.8'/></svg>"); }
:root[data-kisisel-tema="teknoloji"] .hero, :root[data-kisisel-tema="teknoloji"] .hero.hero-live { background: linear-gradient(135deg, #020617, #0f172a 55%, #1e3a8a); }
html[data-kisisel-tema="teknoloji"] .hero::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 340 140' width='340' height='140'><g fill='none' stroke='rgba(74,222,128,0.35)' stroke-width='2'><path d='M0 30h40l20 20h60M60 50v40h50M0 90h30M120 10v40l30 30h40M200 30h50l20-20h40M260 30v50h60M180 110h40l20 20h60'/></g><g fill='rgba(74,222,128,0.6)'><circle cx='40' cy='30' r='3'/><circle cx='120' cy='50' r='3'/><circle cx='110' cy='90' r='3'/><circle cx='190' cy='80' r='3'/><circle cx='250' cy='30' r='3'/><circle cx='320' cy='80' r='3'/><circle cx='240' cy='130' r='3'/></g><rect x='140' y='60' width='30' height='30' fill='rgba(30,58,138,0.9)' stroke='rgba(147,197,253,0.6)' stroke-width='2'/></svg>") 0 0 / 340px 140px repeat; }
html[data-kisisel-tema="teknoloji"] .button-primary::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><rect x='6' y='6' width='12' height='12' rx='2' fill='%2393c5fd'/><rect x='9' y='9' width='6' height='6' fill='%231e3a8a'/><g stroke='%2393c5fd' stroke-width='1.6' stroke-linecap='round'><path d='M9 2v4M15 2v4M9 18v4M15 18v4M2 9h4M2 15h4M18 9h4M18 15h4'/></g></svg>"); }
:root[data-kisisel-tema="teknoloji"] .hero-aurora i:nth-child(1) { background: radial-gradient(circle, rgba(74,222,128,.30), transparent 62%); }
:root[data-kisisel-tema="teknoloji"] .hero-aurora i:nth-child(2) { background: radial-gradient(circle, rgba(96,165,250,.32), transparent 62%); }
:root[data-kisisel-tema="teknoloji"] .hero-aurora i:nth-child(3) { background: radial-gradient(circle, rgba(167,139,250,.22), transparent 62%); }
.kisisel-efekt-ikili .kisisel-parcacik { width: 14px; height: 20px; background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 40'><text x='2' y='36' fill='%234ade80' font-family='Consolas,monospace' font-size='36' font-weight='700'>0</text></svg>") center / contain no-repeat; filter: drop-shadow(0 0 4px rgba(74,222,128,.7)); animation: kisisel-dus-duz var(--sure, 14s) linear var(--gecikme, 0s) infinite; }
.kisisel-efekt-ikili .kisisel-parcacik:nth-child(2n) { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 28 40'><text x='4' y='36' fill='%2386efac' font-family='Consolas,monospace' font-size='36' font-weight='700'>1</text></svg>"); }
.tema-onizleme[data-tema="teknoloji"] { background: linear-gradient(135deg, #020617, #0f172a 55%, #1e3a8a); }
.tema-onizleme[data-tema="teknoloji"]::before { background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 340 140' width='340' height='140'><g fill='none' stroke='rgba(74,222,128,0.35)' stroke-width='2'><path d='M0 30h40l20 20h60M60 50v40h50M0 90h30M120 10v40l30 30h40M200 30h50l20-20h40M260 30v50h60M180 110h40l20 20h60'/></g><g fill='rgba(74,222,128,0.6)'><circle cx='40' cy='30' r='3'/><circle cx='120' cy='50' r='3'/><circle cx='110' cy='90' r='3'/><circle cx='190' cy='80' r='3'/><circle cx='250' cy='30' r='3'/><circle cx='320' cy='80' r='3'/><circle cx='240' cy='130' r='3'/></g><rect x='140' y='60' width='30' height='30' fill='rgba(30,58,138,0.9)' stroke='rgba(147,197,253,0.6)' stroke-width='2'/></svg>") 0 0 / 340px 140px repeat; }
.tema-onizleme[data-tema="teknoloji"] .tema-simge::before { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><rect x='6' y='6' width='12' height='12' rx='2' fill='%2393c5fd'/><rect x='9' y='9' width='6' height='6' fill='%231e3a8a'/><g stroke='%2393c5fd' stroke-width='1.6' stroke-linecap='round'><path d='M9 2v4M15 2v4M9 18v4M15 18v4M2 9h4M2 15h4M18 9h4M18 15h4'/></g></svg>"); }
html[data-kisisel-tema="firtina"] .hero.hero-live::after { content: ''; position: absolute; inset: 0; z-index: 0; pointer-events: none; background: rgba(255,255,255,.9); animation: kisisel-cakma 9s linear infinite; }
@keyframes kisisel-cakma { 0%, 91% { opacity: 0; } 92% { opacity: .25; } 93% { opacity: 0; } 95% { opacity: .18; } 96%, 100% { opacity: 0; } }
@media (prefers-reduced-motion: reduce) { html[data-kisisel-tema="firtina"] .hero.hero-live::after, .kisisel-efekt-kelebek .kisisel-parcacik::after { animation: none; } }

/* TEMA SEÇİCİ — KART IZGARASI (2026-09-13 kullanıcı: "görselli, butonlu, resimli"). Radyo düğmeleri
   name="kisisel_tema" ile aynı alanı taşır; kaydetme uçları değişmedi. Görsel = temanın hero gradyanı +
   dekoru; küçük "düğme" pastili temanın düğme simgesini basar. :has ile seçili çerçeve; klavye için
   input görünmez ama odaklanabilir ve :focus-visible çerçevesi karta düşer. */
.tema-secici { border: 0; padding: 0; margin: 0 0 6px; min-width: 0; }
.tema-secici > legend { font-weight: 700; margin-bottom: 8px; }
.tema-secici > small { display: block; color: var(--muted); margin-top: 8px; }
.tema-izgara { display: grid; grid-template-columns: repeat(auto-fill, minmax(148px, 1fr)); gap: 10px; }
.tema-kart { position: relative; display: block; margin: 0; padding: 6px; border: 2px solid var(--border); border-radius: 14px; background: var(--surface); cursor: pointer; transition: border-color .15s, box-shadow .15s, transform .15s; }
.tema-kart:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(0,0,0,.10); }
.tema-kart input { position: absolute; opacity: 0; width: 1px; height: 1px; margin: 0; }
.tema-kart:has(input:checked) { border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-soft); }
.tema-kart:has(input:focus-visible) { outline: 3px solid var(--primary); outline-offset: 2px; }
.tema-kart input:checked ~ .tema-ad::before { content: '✓ '; color: var(--primary); font-weight: 800; }
.tema-onizleme { position: relative; display: block; height: 70px; border-radius: 10px; overflow: hidden; background: linear-gradient(135deg, var(--primary), var(--primary-alt)); box-shadow: inset 0 0 0 1px rgba(255,255,255,.12); }
.tema-onizleme::before { content: ''; position: absolute; inset: 0; pointer-events: none; }
.tema-onizleme .tema-simge { position: absolute; right: 8px; bottom: 8px; width: 38px; height: 20px; border-radius: 10px; background: rgba(255,255,255,.22); box-shadow: 0 2px 6px rgba(0,0,0,.25); }
.tema-onizleme .tema-simge::before { content: ''; position: absolute; left: 6px; top: 4px; width: 12px; height: 12px; background: center / contain no-repeat; }
.tema-onizleme .tema-simge::after { content: ''; position: absolute; left: 22px; top: 8px; width: 10px; height: 4px; border-radius: 2px; background: rgba(255,255,255,.75); }
.tema-onizleme[data-tema=""] .tema-simge::after { left: 8px; width: 22px; }
.tema-ad { display: block; margin-top: 7px; font-size: .86rem; font-weight: 600; line-height: 1.25; }
.tema-ad small { display: block; font-weight: 400; color: var(--muted); font-size: .78rem; }

/* YILLIK İZLENCE — KUR ROZETİ, HAFTA YORUMLARI, TOPLU OLUŞTURMA (2026-09-14) */
.pacing-kur-rozet { display: inline-block; margin-left: 6px; padding: 2px 8px; border-radius: 999px; background: var(--surface-soft); color: var(--muted); font-size: 11px; font-weight: 800; letter-spacing: .03em; vertical-align: middle; white-space: nowrap; }
.pacing-kur-rozet.is-tyt { background: color-mix(in srgb, var(--primary) 14%, transparent); color: var(--primary-dark); }
.pacing-kur-rozet.is-ayt { background: color-mix(in srgb, #7c3aed 14%, transparent); color: #5b21b6; }
.pacing-kur-rozet.is-sinav { background: color-mix(in srgb, #0f766e 14%, transparent); color: #0f766e; }
.pacing-kur-rozet.is-temel { background: color-mix(in srgb, #b45309 14%, transparent); color: #b45309; }
:root[data-theme="dark"] .pacing-kur-rozet.is-ayt { color: #c4b5fd; }
:root[data-theme="dark"] .pacing-kur-rozet.is-sinav { color: #5eead4; }
:root[data-theme="dark"] .pacing-kur-rozet.is-temel { color: #fcd34d; }
.pacing-haftalik-ders { display: inline-block; margin-left: 8px; color: var(--muted); font-size: 13px; font-weight: 650; vertical-align: middle; }
.pacing-yorum-baslik { min-width: 150px; }
.pacing-yorum-cell { min-width: 150px; max-width: 260px; font-size: 12px; vertical-align: top; }
.pacing-yorum-liste summary { cursor: pointer; color: var(--primary-dark); font-weight: 750; list-style: none; }
.pacing-yorum-liste summary::-webkit-details-marker { display: none; }
.pacing-yorum-liste summary::before { content: '💬 '; }
.pacing-yorum-liste ul { margin: 6px 0 0; padding: 0; list-style: none; display: grid; gap: 6px; }
.pacing-yorum-liste li { padding: 6px 8px; border-radius: 8px; background: var(--surface-soft); line-height: 1.4; overflow-wrap: anywhere; }
.pacing-yorum-liste li strong { font-size: 11px; }
.pacing-yorum-liste li small { margin-left: 4px; color: var(--muted); font-size: 10px; }
.pacing-yorum-liste li span { display: block; margin-top: 2px; }
.pacing-yorum-sil { margin-top: 3px; padding: 0; border: 0; background: none; color: var(--danger); font-size: 10.5px; font-weight: 750; cursor: pointer; }
.pacing-yorum-yaz { display: inline-block; margin-top: 4px; font-size: 11.5px; font-weight: 750; color: var(--primary-dark); }
.pacing-yorum-card { margin-top: 16px; }
.pacing-yorum-form .form-grid { grid-template-columns: minmax(220px, .8fr) minmax(280px, 1.6fr); }
.pacing-yorum-sil-form { display: none; }
.pacing-yorum-form .form-actions { position: static; padding: 0; border: 0; background: none; box-shadow: none; }
.pacing-toplu-card { margin-bottom: 16px; padding: 0; overflow: hidden; }
/* Eski tema adı onarımı (2026-09-24): hangi planın nasıl onarılacağı düğmeden ÖNCE okunur. */
.pacing-onarim-card { margin-bottom: 16px; display: grid; gap: 10px; }
.pacing-onarim-liste { margin: 0; padding-left: 18px; display: grid; gap: 4px; }
.pacing-onarim-liste span { color: var(--muted); }
.pacing-toplu-detay > summary { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 14px; padding: 14px 20px; cursor: pointer; list-style: none; }
.pacing-toplu-detay > summary::-webkit-details-marker { display: none; }
.pacing-toplu-detay > summary::before { content: '＋'; font-weight: 900; color: var(--primary-dark); }
.pacing-toplu-detay[open] > summary::before { content: '－'; }
.pacing-toplu-detay > summary span { color: var(--muted); font-size: 12.5px; }
.pacing-toplu-detay > form { padding: 0 20px 18px; border-top: 1px solid var(--border); }
.pacing-toplu-detay:not([open]) > *:not(summary) { display: none; }
.pacing-toplu-setler { margin: 0; padding: 0; border: 0; display: grid; gap: 8px; }
.pacing-toplu-setler legend { margin-bottom: 4px; font-size: 12px; font-weight: 800; color: var(--text); }
.pacing-toplu-set { display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); cursor: pointer; line-height: 1.45; }
.pacing-toplu-set:has(input:checked) { border-color: var(--primary); background: var(--primary-soft); }
.pacing-toplu-set input { margin-top: 3px; }
@media (max-width: 700px) {
  .pacing-yorum-form .form-grid { grid-template-columns: 1fr; }
  .pacing-kur-rozet { margin-left: 0; }
}

/* SÖZLEŞME — birleşik paket bileşen seçimi (2026-09-14) */
.heading-picker.sozlesme-yol { flex-wrap: wrap; }
.sozlesme-bilesen-secim { flex: 1 0 100%; order: 5; display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 0; padding: 8px 12px; border: 1px solid var(--border); border-radius: 10px; }
.sozlesme-bilesen-secim legend { padding: 0 4px; font-size: 11px; font-weight: 800; color: var(--muted); text-transform: uppercase; letter-spacing: .05em; }
.sozlesme-bilesen-secim .check-row { margin: 0; font-size: 13px; }

/* Tema renkleri/desenleri korunur; sürekli çizim yapan süs katmanları kapalı.
   Eski betik önbellekten gelse bile parçacıklar ekrana çizilmez. */
.kisisel-efekt { display: none !important; }
.kisisel-efekt *, .kisisel-efekt *::before, .kisisel-efekt *::after { animation: none !important; }
html[data-kisisel-tema] .hero,
html[data-kisisel-tema] .hero::before,
html[data-kisisel-tema] .hero::after { animation: none !important; }
html[data-kisisel-tema] .hero-aurora,
html[data-kisisel-tema] .hero-lines,
html[data-kisisel-tema] .hero-sheen,
html[data-kisisel-tema="firtina"] .hero.hero-live::after { display: none !important; }

/* iPHONE'DA SAYFA YANA KAYIYORDU (2026-09-14 kullanıcı: "site apple telefonlarda kayıyormuş").
   Ölçüldü (390 px): kurumun "küçük yazı" ayarı body'ye zoom: .94 basıyor; body genişliği 415 px'e
   çıkıyor, 100vw ile ölçülen sabit alt çubuk 367 px kalıyor. iOS Safari zoom'lu body'de görsel
   pencereyi kaydırıyor. Telefonda zoom kapatılır, taşma kırpılır (clip: sticky bozulmaz) ve
   16 px altı alan odaklanınca iOS'un sayfayı büyütmesi (zoom-on-focus) 16 px ile önlenir. */
/* TELEFON YAN DÖNÜNCE DE (2026-09-18 kullanıcı: "telefon yan dönünce site kayıyormuş"): yatay
   telefon 640–930 px genişliktedir ve 700 px eşiğinin DIŞINDA kalıyordu — zoom .94 ve 100vw
   sabit öğeler yine iki ayrı koordinat sisteminde yaşıyor, Safari görsel pencereyi kaydırıyordu.
   Aynı üç kural dokunmatik + yatay + ≤1024 px için de yazılır (masaüstü dar pencereyi kapsamaz:
   pointer: coarse). */
@media (max-width: 700px), ((max-width: 1024px) and (orientation: landscape) and (pointer: coarse)) {
  :root[data-font-size] body { zoom: 1; }
  html, body { overflow-x: hidden; overflow-x: clip; }
  html, body { overscroll-behavior-x: none; }   /* iOS yana esneme (2026-10-07) */
  body.panel-page :is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="file"]), select, textarea) { font-size: 16px; }
}
@media (max-width: 700px) {
  /* Yükle karosu dört karonun altında kendi satırında, yatay (beşinci kare tek başına kalıyordu). */
  .alt-hizli-lacivert { --ton: #1e4aa8; grid-column: 1 / -1; flex-direction: row; min-height: 52px; font-size: 13px; gap: 10px; }
}
.cprog-history-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0; }
/* Tablonun hemen üstündeki satır: Geri Al / İleri Al + sürükleme ipucu (2026-09-19). */
.cprog-izgara-ust { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin: 4px 0 8px; }
.cprog-izgara-ust .cprog-dnd-ipucu { margin: 0; }
.cprog-history-toolbar form { margin: 0; }
.cprog-history-toolbar .button { background: #c75008; border: 1px solid #c75008; color: #fff; min-height: 36px; padding-block: 6px; }
.cprog-history-toolbar .button:hover:not(:disabled) { background: #a83f05; }
.cprog-history-toolbar .button:disabled { opacity: .45; cursor: not-allowed; }
.cprog-history-toolbar small { flex: 1 1 220px; }
@media print { .cprog-history-toolbar { display: none !important; } }

/* ÖDEV KONTROLÜ + ÖĞRENCİ PANELİ ÖDEVLERİM (2026-09-17). Kontrol yorumu üç ekranda aynı kutu
   (.odev-kontrol-yorum): liste, form, ders notu kartı — üç ayrı "sarı kutu" olmasın. */
.odev-kontrol-yorum { display: block; margin: 4px 0 0; padding: 6px 8px; border-left: 3px solid var(--primary); background: var(--surface-soft); border-radius: 6px; font-size: 12.5px; line-height: 1.4; }
.odev-ogrenci-isaret { display: block; margin-top: 4px; color: var(--muted); font-size: 12px; }

/* İKİ TİK (2026-09-20): 1. tik öğrencinin "yaptım" işareti (birincil renk), 2. tik öğretmen/koçun kontrolü
   (yeşil yapıldı · sarı kısmen · kırmızı eksik). Renk TEK KANAL DEĞİL: kontrol tiki simgesini de değiştirir
   (✓ ◐ ✗) ve her tik title + aria-label taşır — gri yazıcıda ve renk körlüğünde de okunur. Renkler token'dan:
   sabit hex koyu temada okunmazdı. Boş tik çerçevelidir, dolu tik zeminlidir (yalnız soluk renk "var mı yok mu"
   sorusunu bırakırdı). */
.odev-tikler { display: inline-flex; align-items: center; gap: 2px; vertical-align: middle; white-space: nowrap; }
.odev-tik { display: inline-grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; border: 1.5px solid currentColor; font-style: normal; font-size: 11px; font-weight: 800; line-height: 1; }
.odev-tik.is-ogrenci { background: var(--primary); border-color: var(--primary); color: var(--on-primary); }
.odev-tik.is-kontrol.is-yapildi { background: var(--success); border-color: var(--success); color: var(--surface); }
.odev-tik.is-kontrol.is-kismen { background: var(--warning); border-color: var(--warning); color: var(--surface); }
.odev-tik.is-kontrol.is-eksik { background: var(--danger); border-color: var(--danger); color: var(--surface); }
.odev-tik.is-bos { background: transparent; border-color: var(--border); color: var(--border); }
.odev-sayi.is-ogrenci { color: var(--primary); }
.odev-sayi.is-kontrol { color: var(--success); }

/* ÖĞRENCİ 360 — ÖDEV BİRİKİMİ: ders başına kapalı <details>. Kapalı bloğun içeriği AÇIKÇA gizlenir
   (.s360-katla kuralı zaten yazılı; buradaki liste `display: grid` verdiği için ayrıca belirtilir). */
.odev-birikim { margin-top: 12px; }

/* SORU UYARANI VE GÖRSELİ (2026-09-20). Boy TEK DEĞİŞKENDEN (--soru-gorsel-boy): ekran ve kâğıt aynı
   değeri okur, kaydırıcı onu yazar (CSSOM — katı CSP altında `style.setProperty` serbesttir). */
:root { --soru-gorsel-boy: 60mm; }
.soru-uyaran-katla { margin: 6px 0 0; font-size: 13px; }
.soru-uyaran-katla > summary { cursor: pointer; color: var(--primary); padding: 3px 0; }
.soru-uyaran-katla:not([open]) > *:not(summary) { display: none; }
.soru-uyaran-tablo { border-collapse: collapse; margin: 6px 0; width: auto; max-width: 100%; }
.soru-uyaran-tablo th, .soru-uyaran-tablo td { border: 1px solid var(--border); padding: 4px 8px; font-size: 12.5px; text-align: left; }
.soru-uyaran-tablo th { background: var(--bg); font-weight: 700; }
.soru-uyaran-metin { margin: 6px 0; padding: 8px 10px; border-left: 3px solid var(--border); background: var(--bg); border-radius: 0 6px 6px 0; font-size: 13px; }
.soru-uyaran-gorsel { display: block; margin: 8px 0 0; max-width: 100%; height: auto; border: 1px solid var(--border); border-radius: 6px; background: #fff; }
/* Kitapçık ekran görünümü: kaydırıcı şeridi ve görsel kutusu. */
.qp-gorsel-serit { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; }
.qp-gorsel-boy { display: flex; align-items: center; gap: 8px; font-size: 13px; }
.qp-gorsel-boy input[type="range"] { width: 180px; accent-color: var(--primary); }
.qp-gorsel-serit small { color: var(--muted); }
.qp-soru-gorsel { margin: 6px 0; text-align: center; }
.qp-soru-gorsel img { max-width: 100%; max-height: var(--soru-gorsel-boy); height: auto; width: auto; }
/* TAM GÖRSEL SORU (MEBİ): metin ve şıklar görselde; çerçevesiz, tam genişlik, boy sınırı yok (parça + soru uzun olabilir). */
.qp-soru-gorsel.is-tam { text-align: left; margin: 2px 0 0; }
.qp-soru-gorsel.is-tam img { max-height: none; width: 100%; }
.qp-kunye { font-size: 9px; color: var(--muted); text-align: right; margin-top: 2px; }
.soru-uyaran-gorsel.is-tam { border: 0; border-radius: 0; background: #fff; margin: 4px 0 6px; width: 100%; max-width: 640px; }
.qb-kunye { margin: 4px 0; font-size: .82rem; color: var(--muted); }
.qb-tam-cevap { margin: 6px 0 0; font-size: .9rem; }
.qp-soru-uyaran { margin: 4px 0 6px; }
.qp-soru-uyaran .soru-uyaran-tablo { font-size: 12px; }

/* ÖĞRETMENİN HAFTALIK DERS PROGRAMI (2026-09-20): gün × saat ızgarası. Boş hücre görünür biçimde BOŞTUR
   (zemin yok); dolu hücre kart taşır. Telefonda tablo kendi kabında yatay kayar — `.data-table` 720px
   taban genişlik alır, kapsız bırakılırsa SAYFA kayardı (depo kuralı). */
.ogretmen-program-tablo th[scope="row"] { white-space: nowrap; text-align: left; }
.ogretmen-program-tablo th[scope="row"] small { display: block; color: var(--muted); font-weight: 500; font-size: 11.5px; }
.ogretmen-program-tablo td { vertical-align: top; padding: 6px; }
.ogretmen-program-tablo td.is-dolu { background: color-mix(in srgb, var(--primary) 7%, transparent); }
.ogretmen-program-blok { display: grid; gap: 1px; padding: 6px 8px; border-radius: 8px; background: var(--surface); border: 1px solid var(--border); text-decoration: none; color: inherit; }
.ogretmen-program-blok + .ogretmen-program-blok { margin-top: 4px; }
.ogretmen-program-blok:hover { border-color: var(--primary); }
.ogretmen-program-blok strong { font-size: 13px; }
.ogretmen-program-blok small { color: var(--muted); font-size: 11.5px; }
.odev-birikim-lejant { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 4px; color: var(--muted); }
.odev-birikim-ders > summary span { color: var(--muted); font-size: 12.5px; }
.odev-birikim-ders:not([open]) > *:not(summary) { display: none; }
.odev-birikim-liste { list-style: none; margin: 0; padding: 4px 14px 12px; display: grid; gap: 8px; }
.odev-birikim-liste li { display: flex; align-items: flex-start; gap: 10px; padding: 8px 0; border-top: 1px solid var(--border); }
.odev-birikim-liste li:first-child { border-top: 0; }
.odev-birikim-liste li.is-gecikti .odev-birikim-govde > strong { color: var(--danger); }
.odev-birikim-govde { display: grid; gap: 2px; min-width: 0; }
.odev-birikim-govde > small { color: var(--muted); font-size: 12px; }
.heading-links { font-size: 13px; white-space: nowrap; }

/* TOPLU ÖDEV FORMU: solda ödev, sağda hedef; dar ekranda alt alta. Öğrenci listesi kendi içinde kayar —
   300 satır sayfayı uzatmasın. Şube/sınıf üzerinden kapsama giren öğrenci satırı işaretli GÖRÜNÜR (is-kapsamda). */
.odev-toplu-izgara { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.25fr); gap: 16px; align-items: start; }
.odev-hedefler { display: grid; gap: 14px; }
.odev-hedefler legend small { color: var(--muted); font-weight: 500; }
.odev-ogrenci-liste { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 4px 12px; max-height: 340px; overflow: auto; padding: 6px 2px; border-top: 1px solid var(--border); margin-top: 8px; }
.odev-ogrenci { display: flex; align-items: center; gap: 8px; padding: 5px 6px; border-radius: 7px; cursor: pointer; font-size: 13px; min-width: 0; }
.odev-ogrenci:hover { background: var(--bg); }
.odev-ogrenci input[type="checkbox"] { width: 16px; height: 16px; min-height: 0; padding: 0; flex: none; accent-color: var(--primary); }
.odev-ogrenci > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.odev-ogrenci > small { margin-left: auto; color: var(--muted); font-size: 11.5px; white-space: nowrap; }
.odev-ogrenci.is-kapsamda { background: var(--primary-soft); }
.odev-ogrenci.is-kapsamda > span::after { content: " ✓"; color: var(--primary); font-weight: 700; }
@media (max-width: 900px) { .odev-toplu-izgara { grid-template-columns: 1fr; } }
.odev-kontrol-form { display: grid; gap: 8px; }
.odev-kontrol-form textarea { min-height: 64px; }
.odev-kontrol-dugmeler { display: flex; flex-wrap: wrap; gap: 6px; }
.ders-notu-odev-form { flex: 1 0 100%; display: grid; gap: 6px; justify-items: start; }
.ders-notu-odev-form textarea { width: 100%; min-height: 48px; }
.homework-table .odev-kontrol-yorum { max-width: 260px; }
.ogrenci-odev-liste li { align-items: flex-start; }
.ogrenci-odev-liste li > span:first-child { flex: 1 1 220px; min-width: 0; }
.ogrenci-odev-liste li.is-gecikti { border-color: var(--danger); }
.ogrenci-odev-liste li.is-gecikti small:first-of-type { color: var(--danger); font-weight: 700; }
.ogrenci-odev-metin { white-space: pre-line; font-size: 13px; margin-top: 4px; color: var(--text); }
.ogrenci-odev-geri { flex: 1 0 100%; margin: 6px 0 0; padding: 8px 10px; border-left: 3px solid var(--primary); background: var(--surface-soft); border-radius: 6px; font-size: 13px; line-height: 1.45; }
.ogrenci-odev-isaret { flex: 1 0 100%; display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
.ogrenci-odev-isaret input { flex: 1 1 160px; min-height: 40px; font-size: 16px; }
.ogrenci-odev-isaret .button { min-height: 40px; }
.ogrenci-odev-altbaslik { margin: 14px 0 8px; font-size: 14px; color: var(--muted); }

.hn-eylem { display: flex; flex-wrap: wrap; gap: 4px; }
.hn-eylem form { display: contents; }

/* DENEME ÜRETİCİ + ONLINE DENEME (2026-09-17) */
.deneme-dagilim input.qb-gen-count { width: 84px; }
.qb-bolum-baslik, .qp-bolum { margin: 18px 0 8px; padding-bottom: 4px; border-bottom: 2px solid var(--border); font-size: 15px; }
.qb-bolum-baslik small, .qp-bolum small { color: var(--muted); font-weight: 500; margin-left: 6px; }
.qp-bolum { color: #000b49; border-color: #000b49; break-after: avoid; column-span: all; }
.qb-zorluk { margin-left: 6px; font-size: 10px; }
.deneme-atama-form select[multiple] { min-height: 140px; }
.deneme-bolum-netler { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; font-size: 12px; }
.deneme-bolum-netler li { display: flex; gap: 6px; align-items: baseline; }
.deneme-bolum-netler li span { flex: 1; }
.deneme-bolum-netler li small { color: var(--muted); }
.row-muted td { opacity: .75; }
/* öğrenci tarafı */
.od-sayac { display: grid; text-align: right; line-height: 1.1; }
.od-sayac small { color: var(--muted); font-size: 11px; }
.od-sayac b { font-size: 22px; font-variant-numeric: tabular-nums; }
.od-sayac b.is-az { color: var(--danger); }
.od-kapak h1 { margin: 4px 0 10px; }
.od-bilgi { list-style: none; margin: 0 0 12px; padding: 0; display: flex; flex-wrap: wrap; gap: 8px 18px; color: var(--muted); }
.od-bilgi b { color: var(--text); }
.od-not { line-height: 1.5; }
.od-basla { min-height: 48px; font-size: 16px; }
.od-serit { position: sticky; top: env(safe-area-inset-top, 0px); z-index: 5; display: flex; justify-content: space-between; align-items: center; gap: 10px; margin: 0 0 12px; padding: 10px 14px; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; }
.od-serit-alt { position: static; margin-top: 12px; }
.od-serit-alt span { font-size: 12.5px; color: var(--muted); }
.od-bolum { margin: 18px 0 8px; font-size: 16px; }
.od-bolum small { color: var(--muted); font-weight: 500; }
.od-soru { margin-bottom: 10px; padding: 14px 16px; }
.od-soru.is-cevapli { border-color: var(--primary); }
.od-soru-bas { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.od-soru-bas small { color: var(--muted); }
.od-no { width: 30px; height: 30px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--primary); color: var(--on-primary); font-weight: 800; flex: none; }
.od-govde { white-space: pre-line; line-height: 1.55; margin-bottom: 10px; font-size: 15px; }
.od-siklar { display: grid; gap: 6px; }
.od-sik { display: flex; align-items: flex-start; gap: 10px; padding: 9px 12px; border: 1px solid var(--border); border-radius: 10px; cursor: pointer; }
.od-sik input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.od-sik:has(input:checked), .od-sik.is-secili { border-color: var(--primary); background: var(--primary-soft); }
.od-harf { width: 26px; height: 26px; border-radius: 50%; border: 1.5px solid var(--border); display: inline-flex; align-items: center; justify-content: center; font-weight: 800; flex: none; font-size: 13px; }
.od-sik:has(input:checked) .od-harf { background: var(--primary); color: var(--on-primary); border-color: var(--primary); }
.od-metin { flex: 1; line-height: 1.45; }
.od-sonuc { display: flex; flex-wrap: wrap; align-items: center; gap: 16px 28px; margin: 8px 0 14px; }
.od-sonuc-ana { display: grid; text-align: center; padding: 10px 18px; border-radius: 12px; background: var(--primary-soft); }
.od-sonuc-ana span { color: var(--muted); font-size: 12px; }
.od-sonuc-ana b { font-size: 30px; }
.od-sonuc-dyb { list-style: none; margin: 0; padding: 0; display: flex; gap: 14px; }
.od-sonuc-dyb b { font-size: 20px; margin-right: 3px; }
.od-sonuc-dyb .is-dogru b { color: var(--success); }
.od-sonuc-dyb .is-yanlis b { color: var(--danger); }
.od-bolum-tablo { margin-bottom: 12px; }
.od-soru.is-sonuc.is-dogru { border-left: 4px solid var(--success); }
.od-soru.is-sonuc.is-yanlis { border-left: 4px solid var(--danger); }
.od-soru.is-sonuc.is-bos { border-left: 4px solid var(--border); }
.od-sonuc-rozet { margin-left: auto; font-size: 12px; font-weight: 700; color: var(--muted); }
.od-sik.is-anahtar { border-color: var(--success); background: var(--success-soft); }
.od-sik.is-anahtar .od-harf { background: var(--success); color: #fff; border-color: var(--success); }
.od-sik.is-hatali { border-color: var(--danger); background: var(--danger-soft); }
.ogrenci-deneme-liste li.is-acik, .ogrenci-deneme-liste li.is-basladi { border-color: var(--primary); }
.ogrenci-deneme-liste li.is-teslim, .ogrenci-deneme-liste li.is-kapandi { opacity: .85; }
/* 640: iPhone kayması nöbetçisi (T1c) son `max-width: 700px` bloğunu ölçer — yeni telefon kuralı o eşiği kullanmaz. */
@media (max-width: 640px) { .od-serit { border-radius: 0; margin: 0 -16px 12px; } .od-sonuc-dyb { gap: 10px; } }

/* ÖĞRENCİ 360 DÜĞME ŞERİDİ — AİLE TONLARI (2026-09-17). Simge + tonlu zemin; koyu temada da aynı token'lar. */
.student-overview-actions .s360-btn { display: inline-flex; align-items: center; gap: 7px; border-width: 1px; font-weight: 700; }
.student-overview-actions .s360-btn i { font-style: normal; font-size: 15px; line-height: 1; }
.student-overview-actions .s360-btn.is-belge.button-secondary { background: color-mix(in srgb, var(--primary) 12%, var(--surface)); border-color: color-mix(in srgb, var(--primary) 40%, transparent); color: var(--primary); }
.student-overview-actions .s360-btn.is-program { background: color-mix(in srgb, #0f8a6c 12%, var(--surface)); border-color: color-mix(in srgb, #0f8a6c 45%, transparent); color: #0b6b54; }
.student-overview-actions .s360-btn.is-ozel { background: color-mix(in srgb, #c75008 12%, var(--surface)); border-color: color-mix(in srgb, #c75008 45%, transparent); color: #9a3d05; }
.student-overview-actions .s360-btn.is-iletisim { background: color-mix(in srgb, #7a3fb8 12%, var(--surface)); border-color: color-mix(in srgb, #7a3fb8 45%, transparent); color: #5e2b93; }
.student-overview-actions .s360-btn.is-hesap { background: color-mix(in srgb, #4a5568 12%, var(--surface)); border-color: color-mix(in srgb, #4a5568 45%, transparent); color: var(--text); }
:root[data-theme="dark"] .student-overview-actions .s360-btn.is-program { color: #6fd3b7; }
:root[data-theme="dark"] .student-overview-actions .s360-btn.is-ozel { color: #f0a06a; }
:root[data-theme="dark"] .student-overview-actions .s360-btn.is-iletisim { color: #c9a3f0; }
.student-overview-actions .s360-btn:hover { filter: brightness(.96); }
.approval-slot-kapat { margin-left: 4px; }
.approval-slot-kapat-form { display: none; }
.exam-chip .exam-chip-grades { display: block; font-size: 10px; color: var(--muted); margin-top: 1px; }
.ogrenci-bu-hafta { margin-bottom: 12px; }
.ogrenci-bu-hafta > summary strong { font-size: 15px; }
.ogrenci-bu-hafta:not([open]) > *:not(summary) { display: none; }

/* ÇALIŞMA PROGRAMI — DERS × GÜN GENİŞ TABLO (2026-09-17). İlk sütun yapışkan; hücreler üstten hizalı; çipler dikey akar. */
.cprog-duzen-form { margin-left: auto; }
.cprog-ders-wrap { overflow-x: auto; }
.cprog-ders-tablo { border-collapse: separate; border-spacing: 0; min-width: 1180px; width: 100%; table-layout: auto; }
.cprog-ders-tablo th:not(.cprog-ders-bas), .cprog-ders-tablo td { min-width: 168px; }
.cprog-ders-tablo th, .cprog-ders-tablo td { border-bottom: 1px solid var(--border); border-right: 1px solid var(--border); vertical-align: top; }
.cprog-ders-tablo thead th { position: sticky; top: 0; z-index: 3; background: var(--surface-soft); padding: 8px 10px; text-align: left; font-size: 12px; }
.cprog-ders-tablo thead th strong { font-size: 16px; margin-right: 4px; }
.cprog-ders-tablo thead th.is-today { background: var(--primary-soft); }
.cprog-ders-tablo .cprog-ders-bas { position: sticky; left: 0; z-index: 2; width: 170px; background: var(--surface); padding: 10px; text-align: left; font-weight: 800; }
.cprog-ders-tablo thead .cprog-ders-bas { z-index: 4; }
.cprog-ders-tablo .cprog-ders-bas small { display: block; font-weight: 500; color: var(--muted); font-size: 11px; }
.cprog-ders-hucre { padding: 6px; min-height: 64px; }
.cprog-ders-hucre.is-today { background: color-mix(in srgb, var(--primary) 5%, transparent); }
.cprog-ders-hucre .cprog-chip { margin-bottom: 6px; }
.cprog-ders-hucre.is-dnd-uzerinde, .cprog-ders-hucre.is-drop-target { outline: 2px dashed var(--primary); outline-offset: -2px; }
.cprog-ders-bos { padding: 18px; color: var(--muted); text-align: center; }

/* VELİ GÖRÜŞMELERİ ZAMAN ÇİZGİSİ (2026-09-17) — Öğrenci 360 koç görüşmeleri kartı. */
.gorusme-veli-zaman { margin: 8px 0 14px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
.gorusme-veli-zaman h3 { margin: 0 0 8px; font-size: 14px; }
.gorusme-veli-zaman h3 small { margin-left: 6px; font-weight: 500; color: var(--muted); }
.gorusme-zaman { list-style: none; margin: 0; padding: 0 0 0 14px; border-left: 2px solid var(--primary); display: grid; gap: 10px; }
.gorusme-zaman li { position: relative; display: grid; grid-template-columns: 120px 1fr; gap: 4px 14px; }
.gorusme-zaman li::before { content: ''; position: absolute; left: -20px; top: 6px; width: 10px; height: 10px; border-radius: 50%; background: var(--primary); }
.gorusme-zaman time { display: grid; line-height: 1.25; }
.gorusme-zaman time small { color: var(--muted); font-size: 11px; }
.gorusme-zaman p { margin: 2px 0 0; font-size: 13px; line-height: 1.45; }
.gorusme-zaman-koc { font-size: 12px; color: var(--muted); }
/* GÖRÜŞME HİZMET ROZETİ (2026-09-25, migration 209): `.data-table td span { display: block }` (0,1,2) rozeti hücre
   genişliğine yayıyordu (ölçüldü: telefonda 296 px'lik "Grup"); zaman çizgisindeki <time> ızgarası da onu 120 px'lik sütuna
   geriyordu. Özgül seçiciyle içerik genişliğine döner. */
.data-table td .enrollment-tag.gorusme-hizmet,
.gorusme-zaman time .enrollment-tag.gorusme-hizmet,
.gorusme-kayit header .enrollment-tag.gorusme-hizmet { display: inline-block; width: auto; justify-self: start; }
.gorusme-zaman time .enrollment-tag.gorusme-hizmet { margin-top: 3px; font-size: 11px; }
@media (max-width: 640px) { .gorusme-zaman li { grid-template-columns: 1fr; } }

/* PDF ARAÇ ŞERİDİ SARMALI (2026-09-17, ölçüldü: 26 tasarım teması + karakter setleri şeridi 4.972 px'e açıyordu).
   Gruplar sarar, her grubun sekme kutusu kendi satırında sarar; kutu köşesi hap değil yuvarlak (çok satırda hap bozulur). */
.pd-arac-gruplari { flex-wrap: wrap; max-width: 100%; }
.pd-arac-grubu { min-width: 0; max-width: 100%; }
.pd-arac-grubu .exam-view-tabs { display: flex; flex-wrap: wrap; max-width: 100%; border-radius: 14px; }
.pd-arac-grubu.is-genis { flex: 1 0 100%; }

/* PDF ARAÇ ŞERİDİ — KATLANIR GRUP (2026-09-17) */
/* DÜZEN (2026-09-17 kullanıcı: "karışık duruyor"): katlanır grup da diğerleriyle AYNI kalıp — etiket üstte,
   altında sekme kutusu boyunda bir hap (seçili değer + ▾). Eski özet satırı etiketi ve değeri yan yana basıyor,
   satırdaki tek "farklı" öğe olarak göze batıyordu. Açılınca grup tam satıra iner (26 tema, karakter setleri). */
.pd-arac-gruplari { gap: 12px 18px; align-items: flex-start; }
.pd-arac-katlanir > summary { display: flex; flex-direction: column; align-items: flex-start; gap: 5px; cursor: pointer; list-style: none; }
.pd-arac-katlanir > summary::-webkit-details-marker { display: none; }
.pd-arac-katlanir > summary span { color: var(--muted); font-size: 10.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.pd-arac-katlanir > summary b { display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface); color: var(--primary); font-size: 12.5px; font-weight: 700; line-height: 1.35; }
.pd-arac-katlanir > summary b::after { content: "▾"; font-size: 11px; color: var(--muted); transition: transform .15s; }
.pd-arac-katlanir > summary i { display: none; }
.pd-arac-katlanir[open] { flex: 1 0 100%; }
.pd-arac-katlanir[open] > summary b::after { transform: rotate(180deg); }
.pd-arac-katlanir[open] > summary b { border-color: var(--primary); }
.pd-arac-katlanir > summary:focus-visible b { outline: 2px solid var(--primary); outline-offset: 2px; }
.pd-arac-katlanir > .exam-view-tabs { margin-top: 6px; }
.pd-arac-grubu .exam-view-tabs a { white-space: nowrap; } /* telefonda sekme metni hapın içinde kırılmasın; kutu sekmeler arasında sarar */
.pd-arac-katlanir:not([open]) > *:not(summary) { display: none; }
/* PDF YATAY TABLO: satır gün, sütun ders */
.program-grid-yatay { table-layout: auto; }
.program-grid-yatay th { width: auto; }
.program-grid-yatay th.program-grid-gun { width: 64px; text-align: left; }
.program-grid-yatay tbody th.program-grid-gun { background: #f4f7fc; color: #10225f; border: 1px solid #cfd8dc; font-size: 9.5px; vertical-align: top; }
.program-grid-yatay tbody th.program-grid-gun small { display: block; font-weight: 500; color: #5d6b72; }
.program-grid-yatay td { height: auto; min-width: 90px; }
/* YATAY: ders kutuları yan yana ve eşit; yazı ve D/Y/B kutuları dikey tablodan BÜYÜK (kullanıcı: "hepsini büyük yap"). */
.program-grid-yatay td.program-yatay-satir { padding: 6px; }
.program-yatay-kutular { display: flex; gap: 6px; align-items: stretch; }
.program-yatay-kutular .program-grid-gorev { flex: 1 1 0; min-width: 0; margin: 0; padding: 6px 8px; }
.program-yatay-kutular .program-grid-gorev b { font-size: 11px; }
.program-yatay-kutular .program-grid-gorev span { font-size: 11.5px; line-height: 1.4; }
.program-yatay-kutular .program-grid-gorev small { font-size: 9.5px; }
.program-yatay-kutular .program-grid-gorev .program-grid-konu em { font-size: 10px; }
.program-yatay-kutular .program-grid-dyb { gap: 6px; margin-top: 12px; }
.program-yatay-kutular .program-grid-dyb b { flex: 0 0 30px; min-width: 30px; height: 20px; border-radius: 4px; }
.program-yatay-kutular .program-grid-dyb b[data-dyb]::before { font-size: 8px; top: -9px; }
.program-yatay-kutular .program-grid-kaynak b { height: 20px; }
.program-yatay-kutular .program-grid-kaynak b[data-dyb]::before { font-size: 8px; top: -9px; }
.program-grid-yatay tbody th.program-grid-gun { font-size: 11px; }
/* VELİ İMZA KUTUSU (2026-10-03, isteğe bağlı: veliimza=1). Kâğıt paleti — tema token'ı kullanılmaz (belge kâğıtta
   iki temada da aynı basılır). Dikeyde günün sütun altı, yatayda günün satır sonu, listede günün son satırından sonra. */
.program-veli-imza { position: relative; display: block; height: 54px; border: 1px solid #6f8299; border-radius: 4px; background: #fff; }
.program-veli-imza small { position: absolute; left: 4px; top: 2px; font-size: 5.5px; font-weight: 600; letter-spacing: .03em; color: #6f8299; text-transform: uppercase; }
.program-veli-imza::after { content: ""; position: absolute; left: 8px; right: 8px; bottom: 7px; border-bottom: 1px dashed #b7c2cf; }
.program-grid .program-veli-imza-satir td { height: auto; padding: 4px; border: 1px solid #cfd8dc; background: #fafbfd; }
.program-grid-yatay td.program-yatay-imza { width: 120px; min-width: 120px; padding: 6px; vertical-align: middle; }
.program-grid-yatay td.program-yatay-imza .program-veli-imza { height: 58px; }
.program-liste-veli td { padding: 3px 6px 6px; border-top: 0; }
.program-veli-imza-genis { width: 55%; margin-left: auto; height: 46px; }
.print-doc .program-veli-imza-satir, .print-doc .program-liste-veli { break-inside: avoid; page-break-inside: avoid; }

/* ÖĞRENCİ PROGRAMI GÜN KARTI (2026-09-19 kullanıcı: telefonda gün kartı + renkli ders noktası + not satırı).
   Dosyanın SONUNDA: yukarıdaki eski .ogrenci-gun-blok / .ogrenci-gorev kurallarını aynı özgüllükle ezer. */
.ogrenci-program-karti .ogrenci-gun-blok { margin-top: 12px; padding: 0; border: 1px solid var(--border); border-radius: 14px; overflow: clip; background: var(--surface); }
.ogrenci-program-karti .ogrenci-gun-blok > h3 { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin: 0; padding: 10px 14px; background: var(--warning-soft, var(--surface-soft)); border-bottom: 1px solid var(--border); color: var(--text); font-size: 14px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }
.ogrenci-program-karti .ogrenci-gun-blok > h3 time { color: var(--muted); font-weight: 700; letter-spacing: 0; font-variant-numeric: tabular-nums; }
.ogrenci-program-karti .ogrenci-gun-blok.is-bugun { border-color: var(--primary); border-left-width: 1px; padding-left: 0; border-radius: 14px; }
.ogrenci-program-karti .ogrenci-gorev-listesi { gap: 0; }
.ogrenci-program-karti .ogrenci-gorev { padding: 11px 14px; border: 0; border-radius: 0; background: transparent; border-top: 1px solid var(--border); }
.ogrenci-program-karti .ogrenci-gorev:first-child { border-top: 0; }
.ogrenci-program-karti .ogrenci-gorev-icerik { gap: 4px; flex: 1 1 220px; }
.ogrenci-program-karti .ogrenci-gorev-icerik strong { font-size: 15px; line-height: 1.35; overflow-wrap: anywhere; }
.ogrenci-gorev-konu { color: var(--muted); font-weight: 500; }
.ogrenci-gorev-is { font-size: 13.5px; }
.ogrenci-gorev.is-yapildi .ogrenci-gorev-icerik strong { text-decoration: line-through; text-decoration-color: var(--success); }
.ogrenci-ders-nokta { display: inline-block; width: 11px; height: 11px; margin-right: 8px; border-radius: 50%; background: var(--primary); vertical-align: baseline; }
.ogrenci-ders-nokta.nokta-1 { background: #f97316; }
.ogrenci-ders-nokta.nokta-2 { background: #0ea5e9; }
.ogrenci-ders-nokta.nokta-3 { background: #8b5cf6; }
.ogrenci-ders-nokta.nokta-4 { background: #10b981; }
.ogrenci-ders-nokta.nokta-5 { background: #ec4899; }
.ogrenci-ders-nokta.nokta-6 { background: #eab308; }
.ogrenci-ders-nokta.nokta-7 { background: #14b8a6; }
.ogrenci-ders-nokta.nokta-8 { background: #ef4444; }
/* ÖZEL NOT SATIRI: kendi notunu düzenle/sil (2026-09-19). Kapalı <details> içeriği açıkça gizlenir. */
.ozel-not-satir-duzenle { margin-top: 6px; font-size: 13px; }
.ozel-not-satir-duzenle > summary { cursor: pointer; color: var(--primary); font-weight: 600; width: max-content; }
.ozel-not-satir-duzenle:not([open]) > *:not(summary) { display: none; }
.ozel-not-satir-duzenle .stack-form { margin-top: 8px; }
.ozel-not-satir-dugmeler { display: flex; flex-wrap: wrap; gap: 8px; }
.coach-alert-eylem { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 8px; }
.coach-alert-eylem form { margin: 0; }
/* OGRENCI PANELI TARAMASI (2026-09-19): hafta dugmeleri telefonda iki satira kiriliyordu -> esit uc sutun, tek satir;
   bugunun karti capayla acilinca ust cubugun altinda kalmasin. */
.ogrenci-hafta-gezinti { display: flex; gap: 6px; }
.ogrenci-hafta-gezinti .button { white-space: nowrap; }
@media (max-width: 700px) {
  .ogrenci-hafta-gezinti .button { flex: 1 1 0; min-width: 0; padding-inline: 6px; font-size: 12.5px; justify-content: center; }
}
details.ogrenci-gun-blok, #bugun, #calisma-programim, #anketlerim, #odevlerim, #denemelerim, #ders-haklarim { scroll-margin-top: 12px; }

/* ENVANTER GRAFİKLERİ (2026-09-19): sunucuda SVG; renkler token'dan, iki temada okunur. */
.eg-duzen { display: grid; gap: 10px 22px; align-items: center; margin-top: 8px; }
.eg-duzen-radar { grid-template-columns: minmax(300px, 460px) minmax(0, 1fr); }
.eg-duzen-halka { grid-template-columns: 132px minmax(0, 1fr); }
.eg-duzen .envanter-cubuklar { margin-top: 0; }
.eg-radar-kap { display: grid; justify-items: center; gap: 2px; min-width: 0; }
.eg-radar { display: block; width: 100%; max-width: 560px; height: auto; margin-inline: auto; }
.eg-radar-mini { max-width: 300px; }
/* Küçük radarın eksen uçları (envanter_radar_mini_svg): simge ya da numaralı rozet + yüzde. Tuval 300 birim; 230 px'te
   basıldığında yüzde ~12 px, simge ~15 px kalır (2026-09-24: eski mini radarın adları ~7 px'e iniyordu). */
.eg-radar-mini .eg-radar-simge { font-size: 22px; }
.eg-radar-mini .eg-radar-yuzde { font-size: 16px; font-weight: 800; fill: var(--muted); }
.eg-radar-mini .eg-radar-uc.is-baskin .eg-radar-yuzde { fill: var(--primary); }
.eg-radar-mini .eg-radar-no-daire { fill: var(--surface-soft); stroke: var(--border); stroke-width: 1.2; }
.eg-radar-mini .eg-radar-uc.is-baskin .eg-radar-no-daire { fill: color-mix(in srgb, var(--primary) 16%, var(--surface)); stroke: var(--primary); }
.eg-radar-mini .eg-radar-no { font-size: 14px; font-weight: 800; fill: var(--text); }
.eg-eksen-no { display: inline-grid; place-items: center; width: 18px; height: 18px; margin-right: 5px; border: 1px solid var(--border); border-radius: 50%; background: var(--surface-soft); font-size: 10.5px; font-style: normal; font-weight: 800; vertical-align: 1px; }
.eg-radar-ag { fill: none; stroke: var(--border); stroke-width: 1; }
.eg-radar-ag-dis { stroke: color-mix(in srgb, var(--muted) 55%, transparent); }
.eg-radar-eksen { stroke: var(--border); stroke-width: 1; }
.eg-radar-alan { fill: color-mix(in srgb, var(--primary) 24%, transparent); stroke: var(--primary); stroke-width: 2; stroke-linejoin: round; }
.eg-radar-onceki { fill: none; stroke: var(--muted); stroke-width: 1.5; stroke-dasharray: 5 4; stroke-linejoin: round; }
.eg-radar-nokta { fill: var(--surface); stroke: var(--primary); stroke-width: 2; }
.eg-radar-nokta.is-baskin { fill: var(--success); stroke: var(--surface); }
.eg-radar-etiket { font-size: 12.5px; fill: var(--muted); font-weight: 600; }
.eg-radar-etiket.is-baskin { fill: var(--text); font-weight: 800; }
.eg-radar-yuzde { font-size: 14px; font-weight: 800; fill: var(--primary); }
.eg-radar-not { font-size: 11px; }
.eg-olcer-kap { margin: 6px 0 10px; }
.eg-olcer { display: block; width: 100%; max-width: 640px; height: auto; overflow: visible; }
.eg-olcer-bant { opacity: .32; }
.eg-olcer-bant.is-etkin { opacity: 1; }
.eg-ton-dusuk { fill: var(--success); stroke: var(--success); }
.eg-ton-orta { fill: var(--warning); stroke: var(--warning); }
.eg-ton-yuksek { fill: var(--danger); stroke: var(--danger); }
.eg-olcer-ad { font-size: 11px; fill: var(--muted); font-weight: 600; }
.eg-olcer-ad.is-etkin { fill: var(--text); font-weight: 800; }
.eg-olcer-sinir { font-size: 9.5px; fill: var(--muted); }
.eg-olcer-isaret { fill: var(--text); stroke: none; }
.eg-olcer-isaret-nokta { fill: var(--surface); stroke: var(--text); stroke-width: 2.5; }
.eg-olcer-onceki { fill: none; stroke: var(--muted); stroke-width: 2; stroke-dasharray: 3 2; }
.eg-olcer-not { margin: 4px 0 0; font-size: 12.5px; }
.eg-halka { width: 124px; height: 124px; }
.eg-halka-zemin { fill: none; stroke: var(--surface-soft); stroke-width: 12; }
.eg-halka-deger { fill: none; stroke-width: 12; stroke-linecap: round; }
.eg-halka-sayi { font-size: 24px; font-weight: 800; fill: var(--text); stroke: none; }
.eg-halka-ad { font-size: 10px; fill: var(--muted); stroke: none; letter-spacing: .08em; text-transform: uppercase; }
.eg-sayilar { display: grid; grid-template-columns: repeat(auto-fit, minmax(84px, 1fr)); gap: 8px; margin: 0; }
.eg-sayilar > div { padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
.eg-sayilar dt { font-size: 11px; color: var(--muted); letter-spacing: .04em; text-transform: uppercase; }
.eg-sayilar dd { margin: 2px 0 0; font-size: 18px; font-weight: 800; font-variant-numeric: tabular-nums; }
.eg-sayilar .eg-sayilar-fark { grid-column: 1 / -1; border: 0; background: transparent; padding: 0; }
.eg-fark { display: inline-flex; align-items: baseline; gap: 5px; padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 700; background: var(--surface-soft); color: var(--text); }
.eg-fark small { font-weight: 500; color: var(--muted); }
.eg-fark-iyi { background: var(--success-soft); color: var(--success); }
.eg-fark-kotu { background: var(--danger-soft); color: var(--danger); }
/* Çubuklar: daha kalın, anlam rengiyle; baskın boyut satırı hafif zeminli. */
.envanter-cubuklar li { padding: 3px 6px; border-radius: 8px; }
.envanter-cubuklar li.is-baskin { background: color-mix(in srgb, var(--primary) 7%, transparent); }
.envanter-cubuklar .mini-progress-bar { height: 12px; }
.envanter-360-liste li { padding: 12px 14px; border-radius: 14px; background: var(--surface); }
.envanter-360-liste li > header { padding-bottom: 6px; margin-bottom: 4px; border-bottom: 1px solid var(--border); }
.envanter-360-liste li > header strong { font-size: 14.5px; }
@media (max-width: 760px) {
  .eg-duzen-radar { grid-template-columns: minmax(0, 1fr); }
  .eg-duzen-halka { grid-template-columns: 110px minmax(0, 1fr); }
  .eg-halka { width: 104px; height: 104px; }
}
@media print { .eg-radar-alan { fill: #dfe6ff; } }

/* KOŞULLU ENVANTER SORULARI (2026-09-20): alt soru ana sorunun altında girintili; JS gizlediğinde [hidden] genel kuralı
   yeter. Bölüm başlığı formu okunur parçalara ayırır (45 soruluk tanışma formu tek blok okunmuyordu). */
.envanter-bolum-baslik { margin: 22px 0 4px; padding: 0 18px; font-size: 15px; color: var(--primary); letter-spacing: .01em; }
.envanter-bolum-baslik:first-of-type { margin-top: 10px; }
.envanter-madde-alt { margin-left: 18px; border-left: 3px solid color-mix(in srgb, var(--primary) 35%, transparent); }
html.envanter-kosul-js .envanter-kosul-not { display: none; }
.envanter-cevap-bolum { margin: 18px 0 4px; font-size: 14px; color: var(--primary); }
/* ÖĞRENCİ 360 › İLGİ ALANLARI + KATLANIR KART GÖVDESİ */
.s360-katla { border: 1px solid var(--border); border-radius: 10px; background: var(--surface); margin-top: 12px; }
.s360-katla > summary { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 12px; padding: 11px 14px; cursor: pointer; border-radius: 10px; }
.s360-katla > summary:hover { background: var(--bg); }
.s360-katla > summary strong { font-size: 15px; }
.s360-katla > summary > span { color: var(--muted); font-size: 12.5px; }
.s360-katla[open] > summary { border-bottom: 1px solid var(--border); border-radius: 10px 10px 0 0; }
.s360-katla:not([open]) > *:not(summary) { display: none; }
/* Rehberlik kartı panodaki bir <section class="card"> İÇİNDE açılıyor: kendi çerçevesini çizmez,
   yoksa kart içinde ikinci bir kutu görünürdü. */
.rehberlik-katla { border: 0; background: transparent; margin-top: 0; }
.rehberlik-katla > summary { padding: 0 0 6px; }
.rehberlik-katla > summary strong { font-size: 18px; }
.rehberlik-katla > summary span { color: var(--muted); font-size: 13px; }
.rehberlik-katla .card-heading { padding-top: 0; }
.s360-katla > .s360-katla-govde { padding: 10px 14px 14px; }
.ilgi-izgara { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; }
.ilgi-bolum { border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; min-width: 0; }
.ilgi-bolum h4 { margin: 0 0 6px; font-size: 13px; color: var(--primary); text-transform: uppercase; letter-spacing: .04em; }
.ilgi-bolum dl { margin: 0; display: grid; gap: 6px; }
.ilgi-bolum dt { font-size: 12px; color: var(--muted); }
.ilgi-bolum dd { margin: 0; font-size: 13.5px; overflow-wrap: anywhere; }
.ilgi-sevmez { margin: 10px 0 0; font-size: 12.5px; color: var(--muted); }

/* HESAP DEĞİŞTİR (üst çubuk) + HESAP BAĞLARI listesi (2026-09-20). Panel <details>: JS yok, katı CSP altında çalışır. */
.hesap-gecis { position: relative; }
.hesap-gecis > summary { list-style: none; cursor: pointer; display: inline-flex; align-items: center; }
.hesap-gecis > summary::-webkit-details-marker { display: none; }
.hesap-gecis > summary svg { width: 18px; height: 18px; }
.hesap-gecis:not([open]) > .hesap-gecis-panel { display: none; }
.hesap-gecis-panel { position: absolute; right: 0; top: calc(100% + 8px); z-index: 60; min-width: 230px; padding: 8px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); color: var(--text); box-shadow: 0 18px 40px -18px rgba(9, 20, 60, .45); display: grid; gap: 4px; }
.hesap-gecis-panel p { margin: 2px 6px 4px; font-size: 11.5px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.hesap-gecis-panel form { display: contents; }
.hesap-gecis-panel button { display: grid; gap: 1px; width: 100%; padding: 8px 10px; border: 0; border-radius: 8px; background: transparent; color: inherit; text-align: left; cursor: pointer; font: inherit; }
.hesap-gecis-panel button:hover, .hesap-gecis-panel button:focus-visible { background: var(--bg); }
.hesap-gecis-panel button small { color: var(--muted); font-size: 12px; }
/* BAĞLI HESABIN UYARI ROZETİ (2026-09-20). Rozet zemini --danger; yazı --on-primary DEĞİL sabit
   beyaz olamaz — koyu temada danger açılır, o yüzden metin rengi de token'dan gelir. */
.hesap-gecis > summary { position: relative; }
.hesap-gecis > summary .nav-badge { position: absolute; top: -7px; right: -9px; min-width: 16px !important; height: 16px !important; font-size: 9.5px !important; }
.hesap-gecis-panel button strong { display: inline-flex; align-items: center; gap: 6px; }
.hesap-gecis-panel button small.hesap-gecis-uyari { color: var(--danger); }
.hesap-bag-liste { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 6px 14px; max-height: 360px; overflow: auto; padding: 4px 2px; }

/* ÖĞRENCİ PANELİ — GÖREV AÇIKLAMASI + GÜNLÜK DEĞERLENDİRME (2026-09-20). Telefon öncelikli: dokunma hedefleri 40 px+. */
.ogrenci-aciklama { margin: 6px 0 8px; font-size: 13px; }
.ogrenci-aciklama > summary { cursor: pointer; color: var(--primary); padding: 4px 0; }
.ogrenci-aciklama > summary small { color: var(--muted); font-weight: 400; }
.ogrenci-aciklama:not([open]) > *:not(summary) { display: none; }
.ogrenci-aciklama-alan { display: grid; gap: 4px; margin-top: 8px; font-size: 13px; }
.ogrenci-aciklama-alan > span { color: var(--muted); }
.ogrenci-aciklama-alan select, .ogrenci-aciklama-alan textarea { width: 100%; padding: 9px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); font: inherit; }
.ogrenci-gun-degerlendirme { margin-top: 10px; border: 1px dashed color-mix(in srgb, var(--primary) 45%, var(--border)); border-radius: 10px; background: color-mix(in srgb, var(--primary) 5%, var(--surface)); }
.ogrenci-gun-degerlendirme > summary { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 12px; padding: 10px 12px; cursor: pointer; }
.ogrenci-gun-degerlendirme > summary > span { color: var(--muted); font-size: 12.5px; }
.ogrenci-gun-degerlendirme:not([open]) > *:not(summary) { display: none; }
.ogrenci-gd-form { display: grid; gap: 12px; padding: 4px 12px 14px; }
.ogrenci-gd-olcek { border: 0; margin: 0; padding: 0; min-width: 0; }
.ogrenci-gd-olcek legend { font-size: 13.5px; font-weight: 600; padding: 0; margin-bottom: 6px; }
.ogrenci-gd-olcek legend small { color: var(--muted); font-weight: 400; }
.ogrenci-gd-secenekler { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.ogrenci-gd-secenekler > small { color: var(--muted); font-size: 12px; }
.ogrenci-gd-secenekler label, .ogrenci-gd-engeller label { position: relative; cursor: pointer; }
.ogrenci-gd-secenekler input, .ogrenci-gd-engeller input { position: absolute; inset: 0; opacity: 0; width: 100%; height: 100%; margin: 0; cursor: pointer; }
.ogrenci-gd-secenekler label span { display: grid; place-items: center; width: 42px; height: 42px; border: 1px solid var(--border); border-radius: 50%; background: var(--surface); font-weight: 600; }
.ogrenci-gd-engeller { display: flex; flex-wrap: wrap; gap: 6px; }
.ogrenci-gd-engeller label span { display: inline-block; padding: 8px 12px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); font-size: 13px; }
.ogrenci-gd-secenekler input:checked + span, .ogrenci-gd-engeller input:checked + span { border-color: var(--primary); background: var(--primary); color: var(--on-primary); }
.ogrenci-gd-secenekler input:focus-visible + span, .ogrenci-gd-engeller input:focus-visible + span { outline: 2px solid var(--primary); outline-offset: 2px; }
/* KOÇ TARAFI: öğrencinin günlüğü (çalışma programı + Öğrenci 360) */
.ogr-gunluk { display: grid; gap: 10px; }
.ogr-gunluk-gun { border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; }
.ogr-gunluk-gun h4 { margin: 0 0 6px; font-size: 13.5px; display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; }
.ogr-gunluk-olcu { font-size: 12px; padding: 2px 8px; border-radius: 999px; background: var(--bg); color: var(--muted); font-weight: 500; }
.ogr-gunluk-olcu.is-dusuk { background: var(--danger-soft); color: var(--danger); }
.ogr-gunluk-gun dl { margin: 0; display: grid; gap: 4px; font-size: 13px; }
.ogr-gunluk-gun dt { color: var(--muted); font-size: 12px; }
.ogr-gunluk-gun dd { margin: 0; overflow-wrap: anywhere; }
.ogr-gunluk-gorev { margin: 6px 0 0; padding-left: 16px; font-size: 13px; }
.cprog-gunluk-karti:empty { display: none; }
.cprog-gunluk-karti { padding: 0; border: 0; background: transparent; box-shadow: none; }

/* ŞUBE PROGRAMI — ÇOKLU SEÇİM (2026-09-20). Seçili blok halka alır; alt çubuk sabit, telefonda alt menünün üstünde. */
.gsb-slot.is-secili { outline: 2px solid var(--primary); outline-offset: 1px; box-shadow: 0 0 0 4px color-mix(in srgb, var(--primary) 22%, transparent); }
.gsb-coklu-cubuk { position: fixed; left: 50%; bottom: calc(18px + env(safe-area-inset-bottom, 0px)); transform: translateX(-50%); z-index: 70; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; max-width: min(92vw, 760px); padding: 10px 14px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface); color: var(--text); box-shadow: 0 18px 44px -16px rgba(9, 20, 60, .5); }
.gsb-coklu-cubuk select { padding: 6px 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); font: inherit; }
.gsb-coklu-mesaj { flex: 1 0 100%; font-size: 12.5px; color: var(--danger); }
.gsb-coklu-mesaj:empty { display: none; }

/* ANKET BÖLÜM KARTLARI (2026-09-20): özgün illüstrasyon + bölüme özel yumuşak zemin. Renkler SVG'nin içinde sabit olduğu için
   kartın zemini de SABİT açık tonlardır (koyu temada da okunur: yazı rengi karta özel koyu lacivert). */
.envanter-bolum-kart { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin: 22px 0 8px; padding: 14px 18px; border-radius: 16px; color: #16203a; background: linear-gradient(120deg, #eef2ff, #fdf6e3); overflow: hidden; }
.envanter-bolum-kart:first-of-type { margin-top: 8px; }
.envanter-bolum-kart h3 { margin: 0; font-size: 18px; color: #16203a; }
.envanter-bolum-kart p { margin: 4px 0 0; font-size: 13px; color: #3c4763; }
.envanter-bolum-kart img { flex: 0 0 auto; width: 128px; height: 96px; }
.envanter-bolum-film { background: linear-gradient(120deg, #e8ecfb, #ffe9e9); }
.envanter-bolum-muzik { background: linear-gradient(120deg, #f1eaff, #fff6d9); }
.envanter-bolum-sanat { background: linear-gradient(120deg, #fff3df, #ffe6ef); }
.envanter-bolum-spor { background: linear-gradient(120deg, #e6f7ee, #fff6d9); }
.envanter-bolum-kitap { background: linear-gradient(120deg, #eaf3ff, #fdeeee); }
.envanter-bolum-oyun { background: linear-gradient(120deg, #e9edfb, #e6f7ee); }
.envanter-bolum-merak { background: linear-gradient(120deg, #e3ecff, #efe9ff); }
.envanter-bolum-gunluk { background: linear-gradient(120deg, #fff3df, #e6f7ee); }
.envanter-bolum-sevdikler { background: linear-gradient(120deg, #ffe9ee, #fff6d9); }
.envanter-bolum-sen { background: linear-gradient(120deg, #e8f1ff, #fff6d9); }
.envanter-bolum-hedef { background: linear-gradient(120deg, #ffe9e9, #e8f1ff); }
.envanter-bolum-ders { background: linear-gradient(120deg, #fff6d9, #e6f7ee); }
.envanter-bolum-calisma { background: linear-gradient(120deg, #e8f1ff, #fff3df); }
.envanter-bolum-beklenti { background: linear-gradient(120deg, #efe9ff, #fff6d9); }
@media (max-width: 560px) { .envanter-bolum-kart { padding: 12px 14px; } .envanter-bolum-kart img { width: 96px; height: 72px; } .envanter-bolum-kart h3 { font-size: 16px; } }
.ilgi-bolum h4 { display: flex; align-items: center; gap: 6px; }
.ilgi-bolum h4 img { width: 32px; height: 24px; }

/* ÖĞRENCİ PANELİ — PERSONEL PANOSUYLA AYNI DİL (2026-09-21 kullanıcı: "öğrencilerin hesabı tıpkı bizim hesaplar gibi
   güzel gözüksün"). Metrik kartları + iki sütun + açılır gün kartları; telefonda tek sütun, DOM sırası korunur. */
.ogrenci-panel-icerik { max-width: 1320px; }
.ogrenci-nabiz { margin: 0; }
.ogrenci-nabiz .metric-card progress { width: 100%; height: 8px; margin-top: 4px; }
.ogrenci-duzen { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; align-items: start; min-width: 0; }
.ogrenci-ana, .ogrenci-yan { display: grid; gap: 16px; min-width: 0; align-content: start; }
@media (min-width: 1081px) {
  .ogrenci-duzen { grid-template-columns: minmax(0, 1fr) 360px; }
  .ogrenci-duzen:not(:has(.ogrenci-yan > *)) { grid-template-columns: minmax(0, 1fr); }
}
/* Açılır gün kartı: tarayıcının kapalı <details> kuralı UA katmanındadır; içeride display veren sınıflar onu ezer. */
.ogrenci-program-karti details.ogrenci-gun-blok:not([open]) > *:not(summary) { display: none; }
.ogrenci-program-karti .ogrenci-gun-ozet { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 14px; cursor: pointer; list-style: none; background: var(--surface-soft); }
.ogrenci-program-karti .ogrenci-gun-ozet::-webkit-details-marker { display: none; }
.ogrenci-program-karti .ogrenci-gun-ozet::after { content: "▾"; color: var(--muted); font-size: 13px; transition: transform .15s ease; }
.ogrenci-program-karti details.ogrenci-gun-blok:not([open]) > .ogrenci-gun-ozet::after { transform: rotate(-90deg); }
.ogrenci-program-karti details.ogrenci-gun-blok[open] > .ogrenci-gun-ozet { border-bottom: 1px solid var(--border); }
.ogrenci-program-karti .ogrenci-gun-blok.is-bugun > .ogrenci-gun-ozet { background: var(--primary-soft, var(--surface-soft)); }
.ogrenci-program-karti .ogrenci-gun-ozet > h3 { flex: 1 1 auto; display: flex; justify-content: flex-start; align-items: baseline; gap: 10px; margin: 0; padding: 0; border: 0; background: transparent; position: static; color: var(--text); font-size: 14px; font-weight: 800; letter-spacing: .04em; text-transform: uppercase; }
.ogrenci-program-karti .ogrenci-gun-ozet > h3 time { color: var(--muted); font-weight: 700; letter-spacing: 0; font-variant-numeric: tabular-nums; }
.ogrenci-gun-sayac { color: var(--muted); font-size: 12.5px; font-weight: 600; white-space: nowrap; }
.ogrenci-program-karti .ogrenci-gun-ozet:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; }
/* Masaüstünde işaret düğmeleri satırı kaplamaz: sağa yaslı, derli toplu. Telefonda eski tam genişlik düzeni kalır. */
@media (min-width: 701px) {
  .ogrenci-program-karti .ogrenci-oneri-form { justify-content: flex-end; gap: 8px 12px; }
  .ogrenci-program-karti .ogrenci-oneri-form .ogrenci-oneri-soru { flex: 0 0 auto; gap: 8px; }
  .ogrenci-program-karti .ogrenci-oneri-form .ogrenci-oneri-soru input { width: 78px; min-height: 36px; }
  .ogrenci-program-karti .ogrenci-oneri-form .ogrenci-aciklama { flex: 1 1 auto; }
  .ogrenci-program-karti .ogrenci-oneri-form .ogrenci-aciklama[open] { flex: 1 0 100%; }
  .ogrenci-program-karti .ogrenci-oneri-dugmeler { flex: 0 0 auto; }
  .ogrenci-program-karti .ogrenci-isaret-dugme { flex: 0 0 auto; min-height: 36px; padding: 4px 16px; }
}
@media (max-width: 700px) {
  .ogrenci-nabiz { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .ogrenci-program-karti .ogrenci-gun-ozet { position: sticky; top: 0; z-index: 2; }
}

/* ÖĞRENCİ SAYFALARI TELEFONDA (2026-09-21): dönüş şeridi sarar (metin kelime kelime açılmasın), yükle düğmesi dar
   ekranda yalnız simge, iPhone çentiği/ana çubuğu için güvenli alan (viewport-fit=cover ile birlikte). */
.ogrenci-donus-serit { flex-wrap: wrap; gap: 8px 12px; }
.ogrenci-donus-serit > span { display: block; flex: 1 1 240px; min-width: 0; }
.ogrenci-donus-serit > form { flex: 0 0 auto; margin: 0; }
.ogrenci-panel-sayfa .topbar { padding-top: env(safe-area-inset-top, 0px); }
.ogrenci-panel-sayfa .page-content { padding-bottom: calc(40px + env(safe-area-inset-bottom, 0px)); }
.ogrenci-panel-sayfa .ogrenci-isaret-dugme, .ogrenci-panel-sayfa .ogrenci-gun-ozet { -webkit-tap-highlight-color: transparent; touch-action: manipulation; }
@media (max-width: 700px) {
  .ogrenci-panel-tepe .button-install span { display: none; }
  .ogrenci-panel-tepe .button-install { padding-inline: 10px; }
  .ogrenci-panel-tepe .account-copy { display: none; }
  .ogrenci-donus-serit > form, .ogrenci-donus-serit > form .button { width: 100%; }
}

/* ÇİFT UÇLU ARALIK KAYDIRICISI (2026-09-21): iki range üst üste; yalnız BAŞPARMAKLAR tıklanır, ray ortak çizilir. */
.cift-kaydirici-alan > span { display: flex; justify-content: space-between; gap: 10px; }
.cift-kaydirici-alan > span strong { color: var(--primary); font-variant-numeric: tabular-nums; }
.cift-kaydirici-alan { --cift-bas: 0%; --cift-son: 100%; }
body .filter-form .field.cift-kaydirici-alan { flex: 1 1 260px; min-width: 240px; max-width: 360px; }
.cift-kaydirici { position: relative; height: 32px; }
.cift-kaydirici::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 6px; margin-top: -3px; border-radius: 999px;
  background: linear-gradient(to right, var(--border) var(--cift-bas), var(--primary) var(--cift-bas), var(--primary) var(--cift-son), var(--border) var(--cift-son)); }
.cift-kaydirici input[type="range"] { position: absolute; left: 0; top: 0; width: 100%; height: 32px; margin: 0; padding: 0; border: 0; background: transparent;
  -webkit-appearance: none; appearance: none; pointer-events: none; min-height: 0; box-shadow: none; }
.cift-kaydirici input[type="range"]::-webkit-slider-runnable-track { background: transparent; height: 32px; }
.cift-kaydirici input[type="range"]::-moz-range-track { background: transparent; height: 32px; }
.cift-kaydirici input[type="range"]::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; pointer-events: auto; width: 26px; height: 26px; margin-top: 3px;
  border-radius: 50%; border: 3px solid var(--primary); background: var(--surface); cursor: grab; box-shadow: 0 1px 4px rgba(0, 0, 0, .25); }
.cift-kaydirici input[type="range"]::-moz-range-thumb { pointer-events: auto; width: 20px; height: 20px; border-radius: 50%; border: 3px solid var(--primary);
  background: var(--surface); cursor: grab; box-shadow: 0 1px 4px rgba(0, 0, 0, .25); }
.cift-kaydirici input[type="range"]:focus-visible::-webkit-slider-thumb { outline: 2px solid var(--primary); outline-offset: 2px; }
.cift-kaydirici input[type="range"].is-ustte { z-index: 2; }
.cift-kaydirici-olcek { display: flex; justify-content: space-between; padding: 0 6px; color: var(--muted); font-size: 12px; }
.cift-kaydirici-olcek span { display: grid; justify-items: center; gap: 0; min-width: 14px; }
.cift-kaydirici-olcek b { color: var(--text); font-size: 12.5px; }
.cift-kaydirici-olcek small { font-variant-numeric: tabular-nums; }

/* SORU BANKASI: süzgeçten deneme şeridi + seçim çubuğu (2026-09-21). */
.qb-deneme-form { display: flex; flex-wrap: wrap; align-items: end; gap: 12px 14px; }
.qb-deneme-baslik { flex: 1 0 100%; }
.qb-deneme-form .field { margin: 0; }
.qb-deneme-form .field input[type="number"] { width: 110px; }
.qb-deneme-ad { flex: 1 1 240px; }
.qb-deneme-not { flex: 1 0 100%; color: var(--muted); }
.qb-bulk-bar { flex-wrap: wrap; gap: 10px; }
.qb-bulk-eylem { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.qb-bulk-eylem select { max-width: 260px; min-height: 34px; }
.qb-tema-ipucu small { color: var(--muted); }
.qb-hedef-not { margin: 6px 4px 12px; color: var(--muted); font-size: 13px; }

/* DIŞ DENEME ANAHTARI (2026-09-21) */
.dis-deneme-ders > summary, .dis-deneme-ozet > summary { cursor: pointer; display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: baseline; }
.dis-deneme-ders > summary small, .dis-deneme-ozet > summary small { color: var(--muted); word-break: break-all; }
.dis-deneme-ders:not([open]) > *:not(summary), .dis-deneme-ozet:not([open]) > *:not(summary) { display: none; }
.dis-deneme-ders[open] > summary { margin-bottom: 14px; }
.dis-deneme-anahtar { font-family: ui-monospace, Consolas, monospace; letter-spacing: .12em; text-transform: uppercase; }
.dis-deneme-kazanimlar { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 8px 14px; margin-top: 12px; }
.dis-deneme-satir { display: flex; align-items: center; gap: 8px; min-width: 0; }
.dis-deneme-satir > span { flex: 0 0 30px; text-align: right; color: var(--muted); font-variant-numeric: tabular-nums; }
.dis-deneme-satir select { flex: 1 1 auto; min-width: 0; min-height: 34px; }
.dis-deneme-ozet { border-top: 1px solid var(--border); padding: 10px 2px; }
.dis-deneme-ozet-liste { columns: 2 280px; margin: 10px 0 0; padding-left: 34px; }
.dis-deneme-ozet-liste li { break-inside: avoid; padding: 2px 0; }
.od-metinsiz { color: var(--muted); }

/* YANLIŞ DEFTERİ (2026-09-21) */
.ogrenci-yanlis-baglanti { margin: 0 0 14px; color: var(--muted); font-size: 13.5px; }
.yd-ders > summary { cursor: pointer; display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: baseline; }
.yd-ders > summary small, .yd-kazanim h3 small { color: var(--muted); font-weight: 500; }
.yd-ders:not([open]) > *:not(summary) { display: none; }
.yd-kazanim { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--border); }
.yd-kazanim h3 { margin: 0 0 8px; font-size: 14.5px; }
.yd-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.yd-liste li { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; }
.yd-liste li > a { flex: 1 1 220px; min-width: 0; color: var(--text); text-decoration: none; }
.yd-liste li > a:hover strong { text-decoration: underline; }
.yd-liste li small { color: var(--muted); }
.yd-not { margin: 0 0 12px; padding: 10px 12px; border-radius: 10px; background: var(--surface-soft); color: var(--text); font-size: 13.5px; }
.yd-sonuc { margin-top: 14px; }
.yd-cozum { margin-top: 12px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; }
.yd-cozum > summary { cursor: pointer; font-weight: 600; }
.yd-eylem { position: static; margin-top: 14px; }
.yd-soru .od-sik .status { margin-left: auto; flex: 0 0 auto; }
.yd-koc-ders { margin-top: 10px; }
.yd-koc-ders ul { list-style: none; margin: 6px 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 4px 16px; }
.yd-koc-ders li { display: flex; justify-content: space-between; gap: 10px; font-size: 13.5px; }
.yd-koc-ders li b { font-variant-numeric: tabular-nums; }

/* KONU SONU TESTİ (2026-09-21): görev satırının altında tam genişlik bağlantı/düğme. */
.ogrenci-konu-testi-form { flex: 1 0 100%; margin: 0; }
.ogrenci-konu-testi { display: block; flex: 1 0 100%; width: 100%; margin-top: 6px; padding: 9px 12px; border: 1px dashed var(--primary); border-radius: 10px;
  background: transparent; color: var(--primary); font: inherit; font-size: 13.5px; font-weight: 600; text-align: left; text-decoration: none; cursor: pointer; }
.ogrenci-konu-testi.is-bitti { border-style: solid; border-color: var(--border); color: var(--text); font-weight: 500; }
.ogrenci-konu-testi:hover, .ogrenci-konu-testi:focus-visible { background: var(--surface-soft); }

/* ÖLÇÜLEN EKSİKLER (2026-09-21) */
.cprog-eksik-nedenler { display: flex; flex-wrap: wrap; gap: 4px 6px; }

/* ERKEN UYARI (2026-09-21) */
.erken-uyari-isaretler { list-style: none; margin: 0; padding: 0; display: grid; gap: 5px; }
.erken-uyari-isaretler li { font-size: 13.5px; line-height: 1.45; }
.erken-uyari-isaretler .status { margin-right: 4px; }
@media (min-width: 901px) { .erken-uyari-tablo td:first-child { min-width: 180px; } }
.erken-uyari-olcusuz { margin: 0 4px 14px; color: var(--muted); font-size: 13.5px; }
/* BU HAFTA İLGİLEN (2026-09-25): önerilen işler hücrede alt alta sarar; bu hafta görüşülenler KAPALI <details> içinde. */
.erken-uyari-eylemler { display: flex; flex-wrap: wrap; gap: 6px; }
.data-table td .erken-uyari-ilgilenildi { display: inline-block; margin-top: 4px; width: auto; }
.erken-uyari-ilgilenilen { border-top: 1px solid var(--border); margin-top: 6px; }
.erken-uyari-ilgilenilen > summary { cursor: pointer; padding: 12px 16px; display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.erken-uyari-ilgilenilen > summary small { color: var(--muted); }
.erken-uyari-ilgilenilen:not([open]) > *:not(summary) { display: none; }
.bu-hafta-liste { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 8px; }
.bu-hafta-liste li { display: grid; grid-template-columns: minmax(160px, 220px) 1fr auto; gap: 10px; align-items: center; padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
.bu-hafta-ad { color: inherit; text-decoration: none; }
.bu-hafta-ad small { color: var(--muted); }
.bu-hafta-neden { font-size: 13.5px; line-height: 1.45; }
.bu-hafta-neden small { color: var(--muted); }
.bu-hafta-devam { margin: 8px 2px 0; font-size: 13.5px; }
@media (max-width: 700px) { .bu-hafta-liste li { grid-template-columns: 1fr; gap: 6px; } }
/* PLAN ETKİSİ (2026-09-25): sayı sütunları masaüstünde sabit genişlik (telefonda kart kuralını ezmesin — CLAUDE.md dersi). */
.plan-etki-kart { margin-bottom: 16px; }
.plan-etki-not { margin: 10px 2px 0; color: var(--muted); font-size: 13px; line-height: 1.5; }
.plan-etki-deger { font-weight: 700; font-variant-numeric: tabular-nums; }
.plan-etki-deger.is-artti { color: var(--success); }
.plan-etki-deger.is-azaldi { color: var(--danger); }
@media (min-width: 901px) { .plan-etki-tablo td.numeric, .plan-etki-tablo th.numeric { width: 150px; text-align: right; } }
/* BİLDİRİMLER (2026-09-25): Hesabım kartı. */
.bildirim-karti { margin-top: 18px; }
.bildirim-durum { margin: 4px 0 10px; font-weight: 600; }
.bildirim-eylem { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 10px; }
.bildirim-ios, .bildirim-cihazlar { color: var(--muted); font-size: 13.5px; margin: 6px 0; }
.bildirim-tercih { display: grid; gap: 8px; margin-top: 14px; padding-top: 14px; border-top: 1px solid var(--border); }
.bildirim-tercih .button { justify-self: start; }

/* HEDEF NET (2026-09-21) */
.hedef-net-tablo caption { text-align: left; font-weight: 700; padding: 10px 2px 6px; }
.hedef-net-cubuk, .ogrenci-hedef-liste progress { width: 110px; height: 8px; vertical-align: middle; accent-color: var(--primary); }
.hedef-net-tur-sec { margin-top: 12px; }
.hedef-net-alanlar { display: grid; grid-template-columns: repeat(auto-fill, minmax(170px, 1fr)); gap: 10px 14px; margin: 10px 0; }
.hedef-net-alanlar input { width: 100%; }
.ogrenci-hedef-kart > summary { cursor: pointer; display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; }
.ogrenci-hedef-kart > summary small { color: var(--muted); }
.ogrenci-hedef-kart:not([open]) > *:not(summary) { display: none; }
.ogrenci-hedef-tur { margin: 14px 0 6px; font-size: 14px; }
.ogrenci-hedef-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.ogrenci-hedef-liste li { display: grid; grid-template-columns: minmax(110px, 1fr) 110px; gap: 2px 10px; align-items: center; }
.ogrenci-hedef-liste li small { grid-column: 1 / -1; color: var(--muted); font-size: 12.5px; }

/* HAFTALIK HEDEF (2026-09-21) */
.hh-form { display: grid; gap: 10px; }
.hh-degerlendir { border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; margin: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.hh-degerlendir legend { padding: 0 4px; font-weight: 600; font-size: 14px; }
.hh-secim { display: inline-flex; align-items: center; gap: 6px; min-height: 40px; padding: 6px 12px; border: 1px solid var(--border); border-radius: 999px; cursor: pointer; }
.hh-secim input { margin: 0; }
.hh-secim:has(input:checked) { border-color: var(--primary); background: var(--surface-soft); font-weight: 600; }
.hh-liste { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 6px; }
.hh-liste li { display: flex; align-items: baseline; gap: 8px; }
.hh-rozet { flex: 0 0 auto; padding: 1px 8px; border-radius: 999px; font-size: 12px; font-weight: 700; border: 1px solid var(--border); }
.hh-rozet.is-tuttu { color: var(--success); border-color: var(--success); }
.hh-rozet.is-kismen { color: var(--warning, #9a6700); border-color: currentColor; }
.hh-rozet.is-tutmadi { color: var(--danger); border-color: var(--danger); }
.hh-not { margin: 6px 0 0; font-style: italic; color: var(--muted); }
.hh-hafta-liste { list-style: none; margin: 8px 0 0; padding: 0; display: grid; gap: 12px; }

/* ODAK SAYACI (2026-09-21, pomodoro). Öğrenci ekranı + görev bağlantısı + koç çipi. */
.ogrenci-odak-bag { display: inline-flex; align-items: center; gap: 4px; margin-top: 4px; padding: 3px 10px; border: 1px solid var(--border); border-radius: 999px;
  color: var(--primary); font-size: .82rem; font-weight: 600; text-decoration: none; width: fit-content; }
.ogrenci-odak-bag:hover, .ogrenci-odak-bag:focus-visible { background: var(--surface-soft); }
.ogrenci-odak-bag.is-calisiyor { border-color: var(--primary); background: var(--primary-soft, var(--surface-soft)); }
.ogrenci-odak-toplam { display: block; margin-top: 2px; color: var(--muted); }
.odak-kart { max-width: 520px; margin: 24px auto; text-align: center; display: grid; gap: 14px; justify-items: center; }
.odak-kart h1 { margin: 0; font-size: 1.35rem; text-wrap: balance; }
.odak-kalan { margin: 0; font-size: clamp(3.2rem, 14vw, 5rem); font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: .02em; color: var(--text); line-height: 1; }
.odak-kart.is-bitti .odak-kalan { color: var(--success); }
.odak-cubuk { width: 100%; height: 10px; accent-color: var(--primary); }
.od-not { margin: 0; color: var(--muted); max-width: 42ch; }
.odak-dugme { min-width: 180px; min-height: 48px; font-size: 1.05rem; }
.odak-kart form { margin: 0; }
.cprog-odak { display: inline-flex; align-items: center; padding: 0 6px; border-radius: 999px; background: var(--surface-soft); color: var(--muted); font-size: .72rem; font-variant-numeric: tabular-nums; }
.ogr-gunluk-odak { margin: 0 0 8px; }

/* ÖĞRENCİ ALT EKRAN BAŞLIĞI (2026-09-21, ölçüldü): ad ile alt satır aynı satırda bitişik basılıyordu ("SUDENAZ BATTALMatematik").
   Marka bloğundaki gibi iki satır; dar ekranda ad üç noktayla kısaltılır. Sınıfsız span: avatar ve panelin account-profile kabı etkilenmez. */
.ogrenci-panel-tepe .ogrenci-panel-kimlik > span:not([class]) { display: grid; line-height: 1.2; min-width: 0; }
.ogrenci-panel-tepe .ogrenci-panel-kimlik > span:not([class]) strong { overflow: hidden; text-overflow: ellipsis; }

/* ŞUBE ANALİZİ (2026-09-21). Renk tek kanal değil: hücrede ▼/▲ da basılır. */
.deneme-analiz-tablo th small { color: var(--muted); font-weight: 500; }
.deneme-analiz-tablo .deneme-analiz-ad { text-align: left; white-space: nowrap; position: sticky; left: 0; background: var(--surface); z-index: 1; }
.deneme-analiz-tablo td.numeric, .deneme-analiz-tablo th.numeric { font-variant-numeric: tabular-nums; white-space: nowrap; }
.deneme-analiz-hucre.is-dusuk { background: var(--danger-soft); color: var(--danger); font-weight: 600; }
.deneme-analiz-hucre.is-yuksek { background: var(--success-soft); color: var(--success); font-weight: 600; }
.deneme-analiz-toplam { font-weight: 700; }
.deneme-analiz-tablo tfoot th, .deneme-analiz-tablo tfoot td { font-weight: 700; border-top: 2px solid var(--border); }
.deneme-analiz-tablo tr.is-az-ornek td { color: var(--muted); }
.deneme-analiz-az { display: block; color: var(--muted); font-weight: 500; font-size: .72rem; }
.deneme-analiz-konu-izgara { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; }
.deneme-analiz-konu-grup h3 { margin: 0 0 6px; font-size: .95rem; }
.deneme-analiz-konu-grup ol { margin: 0; padding-left: 20px; display: grid; gap: 4px; }
.deneme-analiz-tablo .deneme-analiz-isaret { display: inline; font-size: .7rem; margin-right: 2px; }
.deneme-analiz-tablo tr.is-secili th, .deneme-analiz-tablo tr.is-secili td { background: var(--primary-soft); }

/* HIZ (2026-09-22, ölçüldü): çalışma programında telefonda yerleşim hesabı 1,4 sn sürüyordu (8.900 öğe). Ekranın ALTINDA
   kalan ağır bölümler ancak görünür olunca hesaplanır; içerik DOM'da durur (sayfa içi arama, çapa ve form çalışır).
   contain-intrinsic-size "auto": ilk ölçümden sonra gerçek yükseklik hatırlanır, kaydırma çubuğu zıplamaz. */
/* KAPALI <details> LİSTEDE OLMAZ: ayrılan 600 px kapalı bloğun altında boşluk bırakıyordu (pano 590 px uzadı, ölçüldü). */
#gorev-listesi, .ogrenci-program-karti {
  content-visibility: auto; contain-intrinsic-size: auto 600px;
}

/* TELEFONDA KARŞILAMA KARTI (2026-09-22, ölçüldü): ızgara üç sütunda kalıyor, alıntı gizli ve yan blok boşken metin
   366 px'lik kartın 150 px'ine sıkışıp kartı 540 px'e uzatıyordu. Tek sütun; yükseklik ~yarıya iner. */
@media (max-width: 700px) {
  body.panel-page .hero.hero-live { grid-template-columns: minmax(0, 1fr); }
  body.panel-page .hero.hero-live > .hero-side:empty { display: none; }
}

/* V2 MARKA ROZETİ (2026-09-22 kullanıcı: "sistemi EğitimgenSis V2 yapalım, her giren fark etsin"). Marka adının yanında
   küçük altın rozet; lacivert üst çubukta da açık zeminde de okunur (koyu lacivert yazı, altın zemin: 8.9:1). */
.marka-v2 { display: inline-block; margin-left: 4px; padding: 1px 6px 2px; border-radius: 6px; background: linear-gradient(135deg, #ffd166, #f4a921);
  color: #0a1128; font-style: normal; font-size: .62em; font-weight: 800; letter-spacing: .04em; line-height: 1.3; vertical-align: .22em; }

/* GİRİŞ EKRANI — V2 (2026-09-22). (1) ÖLÇÜLEN KUSUR: kurumun "sıkışık" yoğunluk ayarı (body.density-compact .card) giriş
   kartının iç boşluğunu 48 → 16 px'e eziyordu; metin kartın sol kenarına yapışıyordu. Giriş kartı yoğunluk ayarından BAĞIMSIZDIR.
   (2) Sol panel V2 gece paleti: gece laciverti → kobalt → mor, altın ve camgöbeği ışıklar; başlıkta vurgu satırı altın. */
body.auth-page .auth-shell-login .auth-card { padding: 52px 46px; }
body.auth-page .auth-showcase { background:
    radial-gradient(520px 380px at 88% 8%, rgba(56,189,248,.22), transparent 62%),
    radial-gradient(460px 360px at 6% 96%, rgba(255,209,102,.20), transparent 60%),
    linear-gradient(145deg, #070b2e 0%, #14217a 52%, #3a2fb0 100%); }
body.auth-page .auth-showcase-content h1 em { font-style: normal; background: linear-gradient(90deg, #ffd166, #f4a921); -webkit-background-clip: text; background-clip: text; color: transparent; }
body.auth-page .auth-feature-list span { backdrop-filter: blur(6px); background: rgba(255,255,255,.08); border-color: rgba(255,255,255,.18); }
body.auth-page .auth-feature-list b { font-size: 16px; }
body.auth-page .auth-shell-login { border-radius: 26px; box-shadow: 0 30px 80px rgba(7,11,46,.22); }
body.auth-page .auth-shell-login .button-primary { min-height: 48px; font-size: 15px; }
@media (max-width: 1100px) { body.auth-page .auth-shell-login .auth-card { padding: 38px 32px; } }
@media (max-width: 700px) { body.auth-page .auth-shell-login .auth-card { padding: 28px 20px; } }
body.auth-page .auth-feature-list span { font-size: 12px; line-height: 1.35; }

/* TELEFON ÜST ÇUBUK SİMGE SATIRI (2026-09-22, ölçüldü: 11 düğmenin 9'u sığıyor, 2'si ikinci satıra düşüp çubuğu 256 px yapıyordu).
   Düğmeler tek satırda daralır; yatay kaydırma yerine gap küçülür ve boyut 32 px'e iner. */
@media (max-width: 700px) {
  body.panel-page .topbar .account { gap: 4px; }
  body.panel-page .topbar .account > .button, body.panel-page .topbar .account > .link-button, body.panel-page .topbar .account > .account-profile,
  body.panel-page .topbar .account > details > summary, body.panel-page .topbar .account > .yogunluk-secici > *, body.panel-page .topbar .account > form > .link-button { width: 32px; min-width: 32px; height: 32px; padding: 0; }
}
/* QUIZ TEKLİFİ + İŞARETİ (2026-09-22) */
.ogrenci-quiz-teklif { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 18px; border: 2px solid var(--primary);
  background: linear-gradient(135deg, var(--primary-soft), var(--surface)); }
.ogrenci-quiz-teklif h2 { margin: 0 0 4px; font-size: 18px; }
.ogrenci-quiz-teklif p { margin: 0; color: var(--muted); }
.ogrenci-quiz-teklif > div:first-of-type { flex: 1 1 260px; }
.ogrenci-quiz-teklif-simge { font-size: 36px; line-height: 1; }
.ogrenci-quiz-teklif-eylem { display: flex; gap: 8px; flex-wrap: wrap; }
.ogrenci-quiz-teklif-eylem form { display: contents; }
.ogrenci-quiz-isaret { display: inline-flex; align-items: center; gap: 4px; padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 600;
  background: var(--primary-soft); color: var(--primary); border: 1px solid var(--primary); width: max-content; }
.quiz-ders-listesi { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 4px 14px; margin: 6px 0; }
/* ONAY TABLOSU KENAR BOŞLUĞU (2026-09-22 kullanıcı: "metinler çok kenarda"): başlık formun içinde olduğu için
   `.table-card > .card-heading` dolgusu uygulanmıyordu. + YOKSAY düğmesi sonuç seçicisinin altında. */
body.panel-page main .card.onay-tablo-kart form > .card-heading { padding: 20px 24px 14px; }
.onay-tablo-kart .onay-tablo-eylem { padding: 12px 24px 16px; }
.onay-tablo-kart .onay-tablo td:first-child, .onay-tablo-kart .onay-tablo th:first-child { padding-left: 24px; }
.onay-tablo-kart .onay-tablo td:last-child, .onay-tablo-kart .onay-tablo th:last-child { padding-right: 24px; }
.onay-tablo .onay-yoksay { display: inline-flex; margin-top: 6px; font-size: 12px; min-height: 26px; padding: 2px 10px; color: var(--muted); }
.onay-tablo .onay-yoksay:hover { color: var(--danger); border-color: var(--danger); }
/* YAKLAŞAN DERSLER GRUBU (2026-09-22): aynı öğrencinin aynı günkü dersleri tek satırda, alt alta. */
.upcoming-item.is-grup { align-items: start; }
.upcoming-adet { font-style: normal; font-size: 11px; font-weight: 600; color: var(--primary); margin-left: 6px; }
.upcoming-alt-liste { display: grid; gap: 3px; margin-top: 4px; }
.upcoming-alt { display: block; font-size: 12px; color: var(--muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.upcoming-alt b { color: var(--text); font-weight: 600; font-variant-numeric: tabular-nums; margin-right: 4px; }
.upcoming-alt i { font-style: normal; font-weight: 600; margin-left: 6px; color: var(--primary); }
.upcoming-alt i.danger-text { color: var(--danger); }
/* HAFTALIK PROGRAM DERS RENKLERİ (2026-09-22 kullanıcı: "dersleri kendi aralarında renklendirelim"). Ton ders AİLESİNDEN
   (app/ders-simgeleri.php › ders_renk_tonu): mavi matematik, yeşil fen, turuncu Türkçe, kırmızı sosyal, mor dil; aile içinde
   ±12/24 derece. Sınıf yalnız `--ders-h` verir (satır içi style CSP'de yasak). Seçici `.week-grid-cell.is-filled a`
   (0,2,1) kuralını ezmek için özgül; planlanan (açılmamış) şube kendi uyarı rengini korur. Grup dersi KESİKLİ çerçeve. */
.ders-h-2 { --ders-h: 2; } .ders-h-6 { --ders-h: 6; } .ders-h-14 { --ders-h: 14; } .ders-h-18 { --ders-h: 18; } .ders-h-30 { --ders-h: 30; } .ders-h-42 { --ders-h: 42; } .ders-h-54 { --ders-h: 54; } .ders-h-126 { --ders-h: 126; } .ders-h-138 { --ders-h: 138; } .ders-h-150 { --ders-h: 150; } .ders-h-162 { --ders-h: 162; } .ders-h-174 { --ders-h: 174; } .ders-h-198 { --ders-h: 198; } .ders-h-200 { --ders-h: 200; } .ders-h-210 { --ders-h: 210; } .ders-h-222 { --ders-h: 222; } .ders-h-234 { --ders-h: 234; } .ders-h-246 { --ders-h: 246; } .ders-h-251 { --ders-h: 251; } .ders-h-263 { --ders-h: 263; } .ders-h-275 { --ders-h: 275; } .ders-h-287 { --ders-h: 287; } .ders-h-299 { --ders-h: 299; } .ders-h-326 { --ders-h: 326; } .ders-h-338 { --ders-h: 338; } .ders-h-350 { --ders-h: 350; }
.schedule-week-grid .week-grid-cell.is-filled .grid-chip.ders-renk:not(.is-acilmamis) { background: hsl(var(--ders-h) 72% 93%); color: hsl(var(--ders-h) 55% 24%); box-shadow: inset 3px 0 0 hsl(var(--ders-h) 58% 46%); }
.schedule-week-grid .week-grid-cell.is-filled .grid-chip.ders-renk:not(.is-acilmamis) small { color: hsl(var(--ders-h) 22% 36%); }
.schedule-week-grid .week-grid-cell.is-filled .grid-chip.ders-renk:not(.is-acilmamis):hover { background: hsl(var(--ders-h) 72% 88%); filter: none; }
.schedule-week-grid .week-grid-cell.is-filled .grid-chip-group.ders-renk:not(.is-acilmamis) { outline: 1.5px dashed hsl(var(--ders-h) 50% 52%); outline-offset: -2px; box-shadow: none; }
:root[data-theme="dark"] .schedule-week-grid .week-grid-cell.is-filled .grid-chip.ders-renk:not(.is-acilmamis) { background: hsl(var(--ders-h) 32% 21%); color: hsl(var(--ders-h) 70% 85%); box-shadow: inset 3px 0 0 hsl(var(--ders-h) 60% 58%); }
:root[data-theme="dark"] .schedule-week-grid .week-grid-cell.is-filled .grid-chip.ders-renk:not(.is-acilmamis) small { color: hsl(var(--ders-h) 25% 72%); }
:root[data-theme="dark"] .schedule-week-grid .week-grid-cell.is-filled .grid-chip.ders-renk:not(.is-acilmamis):hover { background: hsl(var(--ders-h) 32% 26%); }
:root[data-theme="dark"] .schedule-week-grid .week-grid-cell.is-filled .grid-chip-group.ders-renk:not(.is-acilmamis) { outline-color: hsl(var(--ders-h) 45% 55%); box-shadow: none; }
.ders-nokta { display: inline-block; width: 9px; height: 9px; margin-right: 6px; border-radius: 50%; background: hsl(var(--ders-h, 200) 58% 46%); vertical-align: 1px; }
.ders-renk-lejant { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 0; padding: 10px 16px 14px; color: var(--muted); font-size: 12px; }
.ders-renk-lejant-oge { display: inline-flex; align-items: center; gap: 6px; color: var(--text); }
.ders-renk-lejant-oge::before { content: ""; width: 11px; height: 11px; border-radius: 3px; background: hsl(var(--ders-h) 72% 90%); box-shadow: inset 3px 0 0 hsl(var(--ders-h) 58% 46%); }
:root[data-theme="dark"] .ders-renk-lejant-oge::before { background: hsl(var(--ders-h) 32% 24%); box-shadow: inset 3px 0 0 hsl(var(--ders-h) 60% 58%); }
.ders-renk-lejant-not { margin-left: auto; font-style: italic; }
/* Ders türü sekmesi Hafta/Liste anahtarının yanında; dar ekranda alt satıra iner. */
.schedule-view-toolbar { flex-wrap: wrap; }
.schedule-view-araclar { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }
.ders-tur-sayi { display: inline-block; min-width: 18px; margin-left: 4px; padding: 0 5px; border-radius: 999px; background: color-mix(in srgb, var(--muted) 16%, transparent); font-size: 10px; font-variant-numeric: tabular-nums; text-align: center; }
.ders-tur-sekme a.is-active .ders-tur-sayi { background: color-mix(in srgb, currentColor 22%, transparent); color: inherit; }
.ders-tur-not { margin: 10px 16px 0; }
@media (max-width: 560px) { .ders-tur-uzun { display: none; } .schedule-view-araclar, .ders-tur-sekme { max-width: 100%; } }

/* ENVANTER PREMIUM (2026-09-23 kullanıcı: "öğrenme stilleri ve meslek envanterini premium tasarıma ve düzene sok";
   mezunlarla bu iki envanterle başlanacak). Öğrenci sayfaları yalnız app.css yükler — premium.css'e YAZILMAZ.
   Başlık kartı simge + çip; 90 maddelik formda 15'lik bölüm ayraçları; altta yapışkan ilerleme çubuğu (JS doldurur,
   betik yoksa hiç görünmez); cevaplanan maddenin numarası yeşile döner (:has — betiksiz de çalışır). */
.envanter-hero { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 16px; align-items: start;
  background: linear-gradient(135deg, color-mix(in srgb, var(--primary) 10%, var(--surface)) 0%, var(--surface) 72%);
  border: 1px solid color-mix(in srgb, var(--primary) 22%, var(--border)); }
.envanter-hero-simge { display: grid; place-items: center; width: 58px; height: 58px; border-radius: 16px; font-size: 30px;
  background: var(--surface); border: 1px solid color-mix(in srgb, var(--primary) 25%, var(--border));
  box-shadow: 0 8px 20px -14px var(--primary); }
.envanter-hero-metin { min-width: 0; }
/* KAPAK İLLÜSTRASYONU (2026-09-23): masaüstünde sağda, telefonda simgenin yanında küçük. Süslemedir (alt=""). */
.envanter-hero.has-kapak { grid-template-columns: auto minmax(0, 1fr) auto; grid-template-areas: "simge metin gorsel"; }
.envanter-hero.has-kapak .envanter-hero-simge { grid-area: simge; }
.envanter-hero.has-kapak .envanter-hero-metin { grid-area: metin; }
.envanter-hero-gorsel { grid-area: gorsel; align-self: center; width: 160px; height: 120px; }
.envanter-hero-cipler { list-style: none; display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0 0; padding: 0; }
.envanter-hero-cipler li { padding: 4px 10px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); font-size: 12.5px; }
.envanter-hero-guven { margin: 10px 0 0 !important; color: var(--muted); font-size: 13px; }
.envanter-bolum-ayrac { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 0; padding: 10px 18px;
  border-top: 1px solid var(--border); background: var(--surface-soft); color: var(--muted); font-size: 12.5px; font-weight: 600; }
.envanter-bolum-ayrac span { padding: 2px 10px; border-radius: 999px; background: var(--primary); color: var(--on-primary); }
.envanter-madde.is-cevapli .envanter-madde-no,
.envanter-madde:has(input:checked) .envanter-madde-no { background: var(--success); color: var(--surface); }
.envanter-madde.is-eksik { background: var(--danger-soft); }
.envanter-madde.is-eksik .envanter-madde-no { background: var(--danger); color: var(--surface); }
.envanter-ilerleme { position: sticky; bottom: 0; z-index: 5; display: grid; gap: 6px;
  padding: 10px 16px calc(10px + env(safe-area-inset-bottom, 0px)); border: 1px solid var(--border); border-radius: 14px;
  background: var(--surface); box-shadow: 0 -8px 20px -14px rgba(0, 0, 0, .35); }
.envanter-ilerleme-sayim { white-space: nowrap; }
/* Yapışkan çubuk alttaki maddeyi örtmesin: kaydırılan madde çubuğun üstünde durur. */
.envanter-form .envanter-madde { scroll-margin-block: 96px 140px; }
.envanter-likert-sec span b.is-simge { font-size: 20px; line-height: 1.1; }
.envanter-ilerleme p { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; margin: 0; font-size: 13px; }
.envanter-ilerleme p b { font-variant-numeric: tabular-nums; }
.envanter-ilerleme-cubuk { height: 8px; overflow: hidden; border-radius: 999px; background: var(--surface-soft); }
.envanter-ilerleme-cubuk span { display: block; width: 0; height: 100%; border-radius: 999px;
  background: linear-gradient(90deg, var(--primary), var(--primary-alt)); transition: width .25s ease; }
.envanter-ilerleme.is-tamam .envanter-ilerleme-cubuk span { background: var(--success); }
.envanter-ilerleme-mesaj { color: var(--danger); font-weight: 600; }
.envanter-tesekkur { display: grid; justify-items: center; gap: 6px; padding-block: 28px; text-align: center; }
.envanter-tesekkur-simge { display: grid; place-items: center; width: 64px; height: 64px; border-radius: 50%;
  background: var(--success-soft); color: var(--success); font-size: 30px; font-weight: 800; }
.envanter-tesekkur h2 { margin: 4px 0 0; font-size: 19px; }
.envanter-tesekkur p { margin: 0; color: var(--muted); }
/* Personel sonuç ekranı: profil nasıl okunmalı (tutarlılık, farklılaşma, cevap deseni, bilimsel not). */
.envanter-gostergeler { margin-top: 14px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.envanter-gostergeler h3 { margin: 0 0 8px; font-size: 14px; }
.envanter-gostergeler > ul:first-of-type { display: grid; gap: 6px; margin: 0; padding: 0; list-style: none; }
.envanter-gosterge { display: grid; gap: 2px; padding: 8px 10px; border-left: 4px solid var(--primary); border-radius: 9px; background: var(--surface); font-size: 13px; }
.envanter-gosterge.is-iyi { border-left-color: var(--success); }
.envanter-gosterge.is-uyari { border-left-color: var(--warning); }
.envanter-gosterge-alt { margin: 10px 0 0; font-size: 13px; }
@media (prefers-reduced-motion: reduce) { .envanter-ilerleme-cubuk span { transition: none; } }
@media (max-width: 640px) {
  .envanter-hero { grid-template-columns: 1fr; gap: 10px; }
  .envanter-hero.has-kapak { grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "simge gorsel" "metin metin"; }
  .envanter-hero-gorsel { justify-self: end; width: 104px; height: 78px; }
  .envanter-hero-simge { width: 46px; height: 46px; font-size: 24px; border-radius: 13px; }
  .envanter-ilerleme { padding-inline: 12px; border-radius: 12px 12px 0 0; }
  .envanter-bolum-ayrac { padding-inline: 12px; }
}

/* DOLDURMAN GEREKENLER (2026-09-23 kullanıcı: "sağda gözüküyor, sağa bakmak akla gelmiyor"). Bekleyen envanter ve anketler
   öğrenci panelinde programın ÜSTÜNDE, tam genişlikte; her biri görselli kutucuk + kendi "Doldur" düğmesi. Telefonda tek sütun. */
.ogrenci-yapilacak { border-color: color-mix(in srgb, var(--primary) 35%, var(--border)); }
.ogrenci-yapilacak h2 { display: flex; align-items: center; gap: 8px; }
.ogrenci-yapilacak-sayi { display: inline-grid; place-items: center; min-width: 24px; height: 24px; padding: 0 7px; border-radius: 999px;
  background: var(--primary); color: var(--on-primary); font-size: 13px; font-weight: 800; }
.ogrenci-yapilacak-liste { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 12px;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); }
.ogrenci-yapilacak-kutu { display: grid; grid-template-columns: auto minmax(0, 1fr); grid-template-areas: "gorsel metin" "dugme dugme";
  gap: 10px 14px; align-items: center; padding: 14px; border: 1px solid var(--border); border-radius: 14px;
  background: linear-gradient(135deg, var(--surface), var(--surface-soft)); }
.ogrenci-yapilacak-gorsel, .ogrenci-yapilacak-simge { grid-area: gorsel; }
.ogrenci-yapilacak-gorsel { width: 96px; height: 72px; }
.ogrenci-yapilacak-simge { display: grid; place-items: center; width: 72px; height: 72px; border-radius: 16px; background: var(--surface-soft);
  border: 1px solid var(--border); font-size: 34px; }
.ogrenci-yapilacak-metin { grid-area: metin; display: grid; gap: 4px; min-width: 0; }
.ogrenci-yapilacak-metin strong { font-size: 15px; line-height: 1.3; }
.ogrenci-yapilacak-metin small { color: var(--muted); font-size: 12.5px; line-height: 1.4; }
.ogrenci-yapilacak-metin .ogrenci-yapilacak-sure { color: var(--text); font-weight: 650; }
.ogrenci-yapilacak-kutu > .button { grid-area: dugme; justify-self: stretch; text-align: center; min-height: 40px; }
@media (max-width: 560px) {
  .ogrenci-yapilacak-gorsel { width: 72px; height: 54px; }
  .ogrenci-yapilacak-simge { width: 56px; height: 56px; font-size: 28px; }
}

/* BENİ TANI (2026-09-23): Öğrenci 360'ın en üstünde, açık duran kart — tanıma formu ve ilgi alanları yan yana. */
.beni-tani-360 { margin-bottom: 16px; }
/* BENİ TANI (2026-09-24 yeniden): iki blok HER genişlikte alt alta. Yan yana iken kısa tanıma formunun yanında ilgi
   alanları 1.300 px uzuyor, sol sütunda büyük boşluk kalıyordu. Tanıma formu sütunlara yayılır, ilgi alanları kartlara. */
.beni-tani-izgara { display: grid; gap: 18px; margin-top: 10px; grid-template-columns: minmax(0, 1fr); }
.beni-tani-blok + .beni-tani-blok { padding-top: 16px; border-top: 1px solid var(--border); }
.beni-tani-blok { min-width: 0; }
.beni-tani-blok > h3 { margin: 0 0 2px; font-size: 15px; }
.beni-tani-kaynak { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; margin: 0 0 8px; color: var(--muted); font-size: 12px; }
.beni-tani-kaynak .beni-tani-duzelt { margin-left: auto; }
.beni-tani-dl { grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); column-gap: 28px; }
.beni-tani-dl > div { grid-template-columns: minmax(0, 1fr); gap: 3px; align-content: start; }
.beni-tani-dl dd { font-weight: 600; }
.beni-tani-duzelt-not { margin: 0 0 14px; padding: 10px 14px; border: 1px solid var(--border); border-radius: 10px;
  background: var(--surface-soft); color: var(--text); font-size: 13px; }

/* ENVANTER KARTI: ekle / bekleyenler / anketler / silinenler (2026-09-23). Formlar kutu olmaz, satırın düğmesidir. */
.envanter-360-ekle { display: flex; flex-wrap: wrap; gap: 10px 18px; align-items: flex-end; margin: 8px 0 14px; padding: 12px;
  border: 1px dashed var(--border); border-radius: 12px; background: var(--surface-soft); }
.envanter-360-ekle form { display: flex; flex-wrap: wrap; gap: 8px; align-items: flex-end; }
.envanter-360-ekle .field { min-width: min(260px, 100%); }
.envanter-360-alt-baslik { margin: 14px 0 6px; font-size: 13.5px; }
.envanter-360-alt-baslik small { color: var(--muted); font-weight: 500; }
.envanter-360-bekleyen { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.envanter-360-bekleyen li { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 8px 10px;
  border: 1px solid var(--border); border-radius: 10px; }
.envanter-360-bekleyen li > span { display: grid; gap: 2px; flex: 1 1 220px; min-width: 0; }
.envanter-360-bekleyen li > span small { color: var(--muted); font-size: 12px; }
.envanter-360-bekleyen form, .envanter-360-satir-eylem form { display: contents; }
.envanter-silinenler { margin-top: 14px; }
.envanter-yeniden { align-self: flex-end; }

/* ÇOKLU GÖNDERİM (2026-09-23): envanter + anket kutucukları gruplu; işaretli kutu dolgulu (renk tek kanal değil, kutu da işaretli). */
.envanter-arac-secim { margin: 0 0 14px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; display: grid; gap: 10px; min-width: 0; }
.envanter-arac-secim legend { padding: 0 6px; font-weight: 700; font-size: 14px; }
.envanter-arac-secim legend small { color: var(--muted); font-weight: 500; }
.envanter-arac-grup { display: grid; gap: 6px; min-width: 0; }
.envanter-arac-grup-ad { font-size: 12px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; color: var(--muted); }
.envanter-arac-kutular { display: flex; flex-wrap: wrap; gap: 6px; }
.envanter-arac-kutular .checkbox-chip { padding: 6px 10px; font-size: 12.5px; }
.envanter-arac-kutular .checkbox-chip:has(input:checked) { border-color: var(--primary); background: var(--primary-soft); font-weight: 650; }
.envanter-arac-kutular .checkbox-chip small { color: var(--muted); font-weight: 500; }

/* ENVANTER VE ANKET TAKİBİ (2026-09-23): pano kartı + takip ekranı aynı gruplar (app/views/envanter-takip-gruplar.php). */
.et-gruplar { display: grid; gap: 8px; margin-top: 10px; }
.et-grup { border: 1px solid var(--border); border-radius: 12px; background: var(--surface); min-width: 0; }
.et-grup:not([open]) > *:not(summary) { display: none; }
.et-grup > summary { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; padding: 10px 14px; cursor: pointer; list-style: none; }
.et-grup > summary::-webkit-details-marker { display: none; }
.et-grup > summary::before { content: "▸"; color: var(--muted); transition: transform .15s; }
.et-grup[open] > summary::before { transform: rotate(90deg); }
.et-grup > summary:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; border-radius: 12px; }
.et-grup-ad { font-size: 15px; }
.et-grup-sayi { color: var(--muted); font-size: 13px; }
.et-rozet { display: inline-flex; align-items: center; gap: 4px; padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 650; }
.et-rozet.is-bekliyor { background: var(--warning-soft); color: var(--warning); }
.et-rozet.is-tamam { background: var(--success-soft); color: var(--success); }
.et-ilerleme { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; font-size: 12px; color: var(--muted); }
.et-ilerleme progress { width: 110px; height: 8px; border: 0; border-radius: 999px; overflow: hidden; appearance: none; background: var(--surface-soft); }
.et-ilerleme progress::-webkit-progress-bar { background: var(--surface-soft); border-radius: 999px; }
.et-ilerleme progress::-webkit-progress-value { background: var(--success); border-radius: 999px; }
.et-ilerleme progress::-moz-progress-bar { background: var(--success); border-radius: 999px; }
/* Panoda satırlar ÇOK SÜTUNLU (ölçüldü: tek sütunda 25 satırlık grup kartı 1.572 px'e uzatıyordu). */
.et-liste { list-style: none; margin: 0; padding: 0 14px 10px; display: grid; column-gap: 22px;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 290px), 1fr)); }
.et-liste li { display: grid; gap: 4px; align-content: start; padding: 7px 0; border-top: 1px solid var(--border); min-width: 0; }
.et-ogrenci { display: flex; align-items: baseline; gap: 8px; min-width: 0; }
.et-ogrenci a, .et-tablo .et-ogrenci-sutun a { font-weight: 650; font-size: 13px; color: var(--text); text-decoration: none; overflow-wrap: anywhere; }
.et-ogrenci a:hover, .et-tablo .et-ogrenci-sutun a:hover { color: var(--primary); text-decoration: underline; }
.et-ogrenci small { color: var(--muted); font-size: 12px; white-space: nowrap; }
.et-cipler { display: flex; flex-wrap: wrap; gap: 5px; min-width: 0; }
.et-cip { display: inline-flex; align-items: center; gap: 4px; padding: 2px 9px; border-radius: 999px; border: 1px solid transparent; font-size: 12px; line-height: 1.6; text-decoration: none; }
.et-cip.is-tamam, .et-hucre.is-tamam { background: var(--success-soft); color: var(--success); }
.et-cip.is-bekliyor, .et-hucre.is-bekliyor { background: var(--warning-soft); color: var(--warning); }
.et-cip.is-gecikti, .et-hucre.is-gecikti { background: var(--danger-soft); color: var(--danger); border-color: color-mix(in srgb, var(--danger) 40%, transparent); }
a.et-cip:hover, a.et-hucre:hover { border-color: currentColor; }
.et-devam { margin: 0; padding: 0 14px 12px; font-size: 13px; }
.et-tablo-kap { margin: 0; padding: 0 12px 12px; }
.et-tablo th.et-arac-sutun { min-width: 84px; max-width: 120px; white-space: normal; font-size: 12px; line-height: 1.25; vertical-align: bottom; }
.et-tablo .et-ogrenci-sutun { position: sticky; left: 0; z-index: 1; background: var(--surface); text-align: left; min-width: 170px; }
.et-tablo td .et-hucre > span[aria-hidden] { display: inline; }
.et-tablo td.et-arac-hucre { text-align: center; }
/* `.data-table td span { display: block }` (alt satır kalıbı) hücre içi rozeti tam genişliğe yayıyordu — özgül seçici. */
.et-tablo td .et-hucre, .et-hucre { display: inline-flex; flex-direction: column; align-items: center; min-width: 44px; padding: 3px 6px; border-radius: 8px; font-size: 13px; line-height: 1.2; text-decoration: none; }
.et-hucre small { font-size: 10.5px; }
.et-pano-karti .siralama-cipleri { padding: 8px 0 0; border-bottom: 0; flex-wrap: wrap; }
.et-yalniz-bekleyen { margin-left: auto; }
.report-table .et-dokum-grup th { background: var(--pd-soft, #eef1f6); color: var(--pd-navy, #14213d); text-align: left; font-size: 11.5px; }
@media (max-width: 700px) {
  .et-ilerleme { margin-left: 0; }
  .et-yalniz-bekleyen { margin-left: 0; }
}

/* ENVANTER GRAFİĞİ 360'A SIĞMIYORDU (2026-09-23 kullanıcı ekran görüntüsüyle: "öğrenci 360'a sığmamış"). Radar düzeni en az
   300 px'lik radar + açıklama sütunu istiyordu; 360'ın dar sütununda açıklama kartın DIŞINA taştı. Sütunlar sığmıyorsa açıklama
   radarın altına iner; 360 kartında her zaman alt alta. */
.eg-duzen-radar { grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); }
.envanter-360-liste .eg-duzen-radar { grid-template-columns: minmax(0, 1fr); }
.envanter-360-liste > li { min-width: 0; }

/* İLGİ ALANLARI TABLOSU (2026-09-23): alan hücresi satır grubunun başında, soru ve cevap yan yana. */
/* İLGİ ALANLARI — KATEGORİ KARTLARI (2026-09-24): her alan kendi kartında iki sütunlu küçük tablo; kartlar gazete
   sütunları gibi akar. `data-table` KULLANILMAZ: telefonda 720 px taban genişlik alıp Cevap sütununu ekrandan itiyordu. */
.ilgi-kartlar { columns: 3 250px; column-gap: 14px; margin-top: 8px; }
.ilgi-kart { break-inside: avoid; margin: 0 0 14px; padding: 10px 12px 4px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); }
.ilgi-kart-baslik { display: flex; align-items: center; gap: 8px; margin: 0 0 4px; font-size: 13.5px; font-weight: 750; color: var(--text); }
.ilgi-kart-baslik img { flex: none; }
.ilgi-tablo { width: 100%; border-collapse: collapse; table-layout: fixed; font-size: 13px; }
.ilgi-tablo th, .ilgi-tablo td { padding: 6px 0; border-top: 1px solid var(--border); vertical-align: top; text-align: left; overflow-wrap: anywhere; line-height: 1.4; }
.ilgi-tablo tr:first-child > * { border-top: 0; }
.ilgi-tablo th.ilgi-soru { width: 44%; padding-right: 10px; color: var(--muted); font-size: 12px; font-weight: 600; letter-spacing: 0; text-transform: none; }
.ilgi-tablo td.ilgi-cevap { font-weight: 650; }

/* CEVAP GÜVENİLİRLİĞİ (2026-09-23, özensiz cevap tespiti). Renk tek kanal değil: simge + metin. */
.cevap-guven.is-supheli { border-color: color-mix(in srgb, var(--danger) 45%, var(--border)); }
.cevap-guven.is-dikkat { border-color: color-mix(in srgb, var(--warning) 45%, var(--border)); }
.cevap-guven-liste { list-style: none; margin: 0 0 10px; padding: 0; display: grid; gap: 6px; }
.cevap-guven-liste li { display: flex; gap: 8px; align-items: flex-start; padding: 7px 10px; border: 1px solid var(--border); border-radius: 10px; }
.cevap-guven-liste li.is-isaret { border-color: color-mix(in srgb, var(--warning) 55%, var(--border)); background: var(--warning-soft); }
.cevap-guven-liste li > span:last-child { display: grid; gap: 2px; min-width: 0; }
.cevap-guven-liste small { color: var(--muted); font-size: 12px; }
.cevap-guven-simge { flex: none; width: 1.2em; text-align: center; }
.cevap-guven-oneri { margin: 0 0 8px; padding: 9px 12px; border-radius: 10px; background: var(--danger-soft); color: var(--text); font-size: 13px; }
.cevap-guven-rozet { display: inline-flex; align-items: center; gap: 3px; padding: 1px 8px; border-radius: 999px; font-size: 11.5px; font-weight: 700; white-space: nowrap; }
.cevap-guven-rozet.is-supheli { background: var(--danger-soft); color: var(--danger); }
.cevap-guven-rozet.is-dikkat { background: var(--warning-soft); color: var(--warning); }
.cevap-guven-serit { margin: 0 0 10px; padding: 8px 12px; border-radius: 10px; background: var(--danger-soft); font-size: 13px; }
.et-cip.is-guvensiz, .et-hucre.is-guvensiz { outline: 2px dashed color-mix(in srgb, var(--danger) 55%, transparent); outline-offset: -2px; }
.et-cip small { font-size: 10.5px; font-weight: 700; }

/* ENVANTER EKRAN ÖZETİ (tek envanter seçiliyken): boyut ortalamaları ve en sık profil. */
.envanter-ekran-ozet { margin: 0 0 12px; padding: 10px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); font-size: 13px; }
.envanter-ekran-ozet ul { list-style: none; margin: 8px 0 4px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 14px; }
.envanter-ekran-ozet li { display: inline-flex; align-items: baseline; gap: 5px; }
.envanter-ekran-ozet li b { color: var(--primary); }
.envanter-ekran-ozet li small, .envanter-ekran-ozet p { color: var(--muted); }
.envanter-ekran-ozet p { margin: 4px 0 0; }
.envanter-yeniden-not { margin: 0; align-self: end; }
.envanter-sifirla { color: var(--warning); }

/* ÖĞRENME NOTLARI — çalışma programı (2026-09-23). */
.ogrenme-notu-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 320px), 1fr)); }
.ogrenme-notu { padding: 10px 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); min-width: 0; }
.ogrenme-notu.is-guvensiz { border-style: dashed; }
.ogrenme-notu-baslik { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 8px; }
.ogrenme-notu-baslik strong { font-size: 14px; }
.ogrenme-notu-baslik small { color: var(--muted); font-size: 12px; }
.ogrenme-notu-baslik a { margin-left: auto; font-size: 12.5px; }
.ogrenme-notu-sonuc { padding: 1px 9px; border-radius: 999px; background: var(--primary-soft); color: var(--primary); font-size: 12px; font-weight: 700; }
.ogrenme-notu-maddeler { margin: 6px 0 0; padding-left: 18px; font-size: 13px; display: grid; gap: 3px; }
.ogrenme-notu-anket { margin: 10px 0 0; font-size: 13px; }

/* MÜKERRER BİRLEŞTİRME (2026-09-23). */
.mukerrer-uyari a { font-weight: 700; }
.birlestir-alt-baslik { margin: 16px 0 6px; font-size: 15px; }
.birlestir-alanlar tr.is-cakisma > td { background: var(--warning-soft); }
.birlestir-secim { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; cursor: pointer; }
.birlestir-secim input { width: 18px; height: 18px; accent-color: var(--primary); }
.birlestir-uyarilar { margin: 12px 0; padding-left: 18px; font-size: 13px; color: var(--muted); display: grid; gap: 4px; }
.birlestir-elle .field { min-width: min(320px, 100%); }

/* ÖĞRENCİ PANELİ: işaret geri al + quiz puanı (2026-09-23). */
.ogrenci-isaret-geri { display: block; margin: 6px 0 0; padding: 6px 0; border: 0; background: none; color: var(--muted); font-size: 13px;
  text-decoration: underline; cursor: pointer; min-height: 32px; }
.ogrenci-isaret-geri:hover, .ogrenci-isaret-geri:focus-visible { color: var(--primary); }
.od-puan { display: flex; align-items: baseline; gap: 6px; margin: 4px 0 6px; }
.od-puan strong { font-size: 44px; line-height: 1; color: var(--primary); font-variant-numeric: tabular-nums; }
.od-puan span { color: var(--muted); font-size: 16px; font-weight: 700; }

/* TELEFON ÜST ÇUBUĞU — İKİ SIKI SATIR (2026-09-23 kullanıcı, ekran görüntüsüyle: "telefondaki üst menü işini güzelleştir").
   Ölçüldü (390 px): çubuk ekranın ~%23'ünü kaplıyordu — marka + hamburger, dokuz simgelik ayrı bir satır (profil rozeti
   hesap değiştir simgesinin üstüne biniyordu) ve alt alta iki tam genişlik seçici. Alt çubuktaki "Menü" paneli arama, tema,
   kılavuz, sorun bildir, hesap değiştir ve çıkışı zaten taşıyor; üstte bunların İKİNCİ kopyası basılmaz (hamburger de: alt
   çubuğun Menü düğmesi aynı menüyü açar). Tam ekran ve yoğunluk telefonda anlamsız. Kalan: 1. satır marka + arama + hesap
   değiştir + profil, 2. satır kademe ve şube seçicileri YAN YANA. Kural yalnız alt çubuk basılan sayfada geçerli
   (`.has-alt-cubuk`) ve alt çubukla AYNI eşikte (700 px): menü ağacı olmayan ekranda ya da yan dönmüş telefonda çıkış düğmesi kaybolmasın. Seçici yazısı 16 px (iOS odak büyütmesi). */
@media (max-width: 700px) {
  body.panel-page .topbar.has-alt-cubuk .nav-toggle,
  body.panel-page .topbar.has-alt-cubuk .fullscreen-toggle,
  body.panel-page .topbar.has-alt-cubuk .issue-report-link,
  body.panel-page .topbar.has-alt-cubuk .account > a.link-button[href*="guide.php"],
  body.panel-page .topbar.has-alt-cubuk .yogunluk-secici,
  body.panel-page .topbar.has-alt-cubuk .theme-toggle,
  body.panel-page .topbar.has-alt-cubuk .topbar-search,
  body.panel-page .topbar.has-alt-cubuk .account > form[action*="logout.php"] { display: none !important; }
  body.panel-page .topbar.has-alt-cubuk .topbar-inner { display: flex; flex-wrap: wrap; align-items: center; column-gap: 6px; row-gap: 8px;
    min-height: 0; padding-top: 8px; padding-bottom: 10px; }
  body.panel-page .topbar.has-alt-cubuk .account { display: contents; }
  body.panel-page .topbar.has-alt-cubuk .brand { order: 0; flex: 1 1 auto; min-width: 0; gap: 8px; }
  body.panel-page .topbar.has-alt-cubuk .brand-logo { width: 34px; height: 34px; }
  body.panel-page .topbar.has-alt-cubuk .account > .link-button,
  body.panel-page .topbar.has-alt-cubuk .account > .button-install,
  body.panel-page .topbar.has-alt-cubuk .account > details.hesap-gecis,
  body.panel-page .topbar.has-alt-cubuk .account > .account-profile,
  body.panel-page .topbar.has-alt-cubuk .account > form:not(.branch-switch) { order: 1; flex: 0 0 auto; }
  body.panel-page .topbar.has-alt-cubuk .account > .link-button,
  body.panel-page .topbar.has-alt-cubuk .account > .button-install,
  body.panel-page .topbar.has-alt-cubuk .account > details.hesap-gecis > summary,
  body.panel-page .topbar.has-alt-cubuk .account > form:not(.branch-switch) > .link-button {
    display: inline-grid; place-items: center; width: 38px; min-width: 38px; height: 38px; min-height: 38px; padding: 0;
    border: 1px solid rgba(255,255,255,.16); border-radius: 11px; background: rgba(255,255,255,.08); color: #fff; }
  body.panel-page .topbar.has-alt-cubuk .account > .button-install span { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  body.panel-page .topbar.has-alt-cubuk .account > .account-profile { width: 38px; min-width: 38px; height: 38px; padding: 0; }
  body.panel-page .topbar.has-alt-cubuk .account-avatar { width: 38px; height: 38px; }
  body.panel-page .topbar.has-alt-cubuk .account-copy { display: none; }
  body.panel-page .topbar.has-alt-cubuk .branch-switch,
  body.panel-page .topbar.has-alt-cubuk .branch-chip { order: 5; flex: 1 1 calc(50% - 4px); min-width: 0; max-width: none; }
  body.panel-page .topbar.has-alt-cubuk .branch-switch select { width: 100%; max-width: none; height: 40px; font-size: 16px; font-weight: 650; padding: 0 30px 0 12px; border-radius: 11px; }
  body.panel-page .topbar.has-alt-cubuk .branch-chip { justify-content: center; height: 40px; }
}

/* ÖĞRENCİ LİSTESİ İŞLEM SÜTUNU SABİT HİZADA (2026-09-23 kullanıcı: "burası düzenli olsun kaymasın böyle butonlar").
   Sağa yaslı flex, kullanıcı adı çipi uzadıkça düğmeleri satırdan satıra kaydırıyordu. Masaüstünde üç SABİT iz; her öğe
   kendi izine yazılır (auto-placement değil) — "Hesabına Geç" basılmayan satırda çip yine üçüncü izde durur.
   Telefonda (kart görünümü, ≤900px) eski esnek düzen sürer. */
@media (min-width: 901px) {
  .data-table .table-actions.ogr-islem { display: grid; grid-template-columns: 5.6rem 6.5rem 10.5rem;
    justify-content: end; align-items: start; column-gap: 4px; row-gap: 4px; }
  /* TELEFON NUMARASI BÖLÜNMEZ (2026-09-26 kullanıcı: "numaralar düzgün sığsın"): işlem sütunu daraldı, numara +
     WhatsApp simgesi tek satırda kalır. */
  .ogrenci-liste-tablo td[data-label="İletişim"] > span, .data-table td[data-label="İletişim"] > span:first-child { white-space: nowrap; }
  .data-table .table-actions.ogr-islem > .ogr-islem-profil { grid-column: 1; justify-self: stretch; text-align: center; }
  /* Tablo içindeki form `display: contents` (app.css .data-table form kuralı) — ızgara öğesi DÜĞMENİN kendisidir. */
  .data-table .table-actions.ogr-islem > .ogr-islem-gecis,
  .data-table .table-actions.ogr-islem > .ogr-islem-gecis > .button { grid-column: 2; }
  .data-table .table-actions.ogr-islem > .ogr-islem-gecis .button { width: 100%; }
  .data-table .table-actions.ogr-islem > .ogr-islem-hesap { grid-column: 3; justify-self: start; align-items: flex-start; }
  .ogr-islem .hizli-parola > summary, .ogr-islem .hizli-parola-kapali { max-width: 10.5rem; }
  .ogr-islem .hizli-parola > summary b, .ogr-islem .hizli-parola-kapali b { overflow: hidden; text-overflow: ellipsis; }
  /* Açılan parola panelinde çip üçüncü izde kalır; panel çipin altına, sağ kenarı izle hizalı sola doğru açılır. */
  .data-table .table-actions.ogr-islem > .hizli-parola[open] > .hizli-parola-panel { width: 320px; margin-left: calc(10.5rem - 320px); }
}

/* FORM TASLAĞI (2026-09-24): kaydedilmemiş taslak şeridi formun üstünde, saklama durumu altında. Renk token'dan (iki tema). */
.taslak-serit { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 0 0 12px; padding: 10px 14px;
  border: 1px solid var(--warning); border-left-width: 4px; border-radius: 10px; background: var(--warning-soft); color: var(--text); }
.taslak-serit > span { flex: 1 1 260px; min-width: 0; }
.taslak-durum { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; margin: 8px 0 0; color: var(--muted); font-size: 12.5px; }
.taslak-durum > span { flex: 1 1 260px; min-width: 0; }
.taslak-durum > a { font-weight: 600; white-space: nowrap; }
.taslak-durum:empty { display: none; }
.taslak-durum.is-uyari { color: var(--text); padding: 8px 12px; border-left: 4px solid var(--warning); border-radius: 8px; background: var(--warning-soft); font-size: 13px; }

/* ÖĞRENCİ 360 YERLEŞİMİ (2026-09-24 kullanıcı: "Öğrenci 360'ta bir yer çok kayıyor, grafiklerden bazıları okunmuyor").
   Ölçüldü (1440 / 1024 / 768 / 390 px): (1) tamamlanan envanterler 1.300 px'lik tek sütunda — çubuklar 1.100 px uzuyor, ad
   ile değer birbirinden kopuyordu; radar 320 px'e sıkışıp adları ~7 px'e iniyordu. Artık kartlar yan yana akar ve kart
   içinde radar solda, çubuklar sağda durur; karar kartın KENDİ genişliğinden verilir (container query), ekrandan değil —
   aynı kart telefonda da iki sütunlu 360'ta da doğru dizilir. */
.envanter-360-liste { grid-template-columns: repeat(auto-fill, minmax(min(100%, 500px), 1fr)); align-items: start; }
.envanter-360-liste > li { container-type: inline-size; min-width: 0; }
@container (min-width: 460px) {
  .envanter-360-liste .eg-duzen-radar { grid-template-columns: 230px minmax(0, 1fr); }
}
/* (2) Tablet (701–1100 px): üst çubuğun hesap satırı SARMIYORDU — 768 px ekranda 925 px'e açılıp BÜTÜN sayfayı yana
   kaydırıyordu (her ekranda; 360'ta fark edildi). Telefon (≤700) kendi alt çubuk kurallarını kullanır, dokunulmadı. */
@media (min-width: 701px) and (max-width: 1100px) {
  /* HER ZAMAN KENDİ SATIRI (flex-basis 100%): 1024 px'te sıkıştırılmış satır ilk çizimde markanın yanına sığıyor, düğme açılınca
     alt satıra düşüp sayfayı 0,71 kaydırıyordu. Satırın yeri baştan sabit, düğme yalnız o satırın içinde yer açar. */
  .panel-page .account { flex: 1 1 100%; flex-wrap: wrap; min-width: 0; max-width: 100%; row-gap: 8px; column-gap: 6px; }
  /* Sarma tek başına yetmez: "Uygulama olarak yükle" düğmesi betikle SONRADAN açılıyor (182 px) ve satırı ikiye bölüp sayfayı
     aşağı itiyordu (CLS 0,22 ölçüldü). Tablette düğme yalnız simge olur (adı title/aria-label'da), seçiciler ve arama biraz
     daralır: 768 px'te çubuk ilk çizimde de düğme açıldıktan sonra da tek satırdır. */
  .panel-page .button-install span { display: none; }
  .panel-page .button-install { padding-inline: 9px; }
  .panel-page .branch-switch select { max-width: 104px; }
  .panel-page .topbar-search input { width: 100px; }
}
/* Dar masaüstü (1101–1280 px): aynı geç açılan düğme menüyü alt satıra itiyordu (CLS 0,16 ölçüldü; 1280 ve üstü temiz). */
@media (min-width: 1101px) and (max-width: 1280px) {
  .panel-page .button-install span { display: none; }
  .panel-page .button-install { padding-inline: 9px; }
}
/* (3) Telefonda kart başlığı: sağdaki bağlantı/düğmeler başlığı üç satıra sıkıştırıyordu ("Haftalık personel notları"). */
@media (max-width: 560px) {
  .overview-section-heading { flex-wrap: wrap; align-items: flex-start; }
  .overview-section-heading > :first-child { flex: 1 1 100%; }
}

/* KİŞİSEL ŞABLON UYGULAMA (2026-09-24): Şablonum kartındaki liste, önizleme ekranı ve kopyalamada "farklı görev" sorusu. */
.cprog-sablon-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.cprog-sablon-liste li { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 4px 0; border-top: 1px solid var(--border); font-size: 13px; }
.cprog-sablon-liste li small { color: var(--muted); }
.cprog-kopya-farkli { flex-wrap: wrap; }
.cprog-kopya-farkli .check-row span { white-space: normal; }
.cprog-kopya-farkli.is-soru { padding: 6px 10px; border-radius: 10px; background: var(--warning-soft); }
.sablonum-farkli-soru { padding: 10px 12px; border-radius: 10px; background: var(--warning-soft); margin: 12px 0; }
.sablonum-ayrinti > summary { cursor: pointer; font-size: 13px; }
.sablonum-ayrinti:not([open]) > *:not(summary) { display: none; }
.sablonum-ayrinti-liste { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 3px; font-size: 12.5px; }
.sablonum-ayrinti-liste li { display: flex; flex-wrap: wrap; gap: 2px 8px; align-items: baseline; }
.sablonum-ayrinti-liste li > span { color: var(--muted); min-width: 9em; }
.sablonum-ayrinti-liste li > em { font-style: normal; color: var(--muted); }
.sablonum-ayrinti-liste li.is-aynisi, .sablonum-ayrinti-liste li.is-tatil, .sablonum-ayrinti-liste li.is-gecmis { opacity: .72; }
.sablonum-ayrinti-liste li.is-farkli > em { color: var(--danger); }

/* PLAN ŞABLONU ORANTILI AYAR (2026-09-24): hedef süre / toplam / yüzde ile ders sayılarını aynı oranla ayarlar. */
.plan-olcek { margin: 0 0 14px; padding: 8px 12px; border: 1px dashed var(--border); border-radius: 12px; }
.plan-olcek > summary { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; cursor: pointer; list-style: none; }
.plan-olcek > summary::-webkit-details-marker { display: none; }
.plan-olcek > summary::before { content: '▸'; color: var(--muted); font-size: 12px; transition: transform .15s ease; }
.plan-olcek[open] > summary::before { transform: rotate(90deg); }
.plan-olcek > summary span { color: var(--muted); font-size: 12.5px; }
.plan-olcek:not([open]) > *:not(summary) { display: none; }
.plan-olcek-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 16px; margin-top: 10px; }
.plan-olcek-form > .field { flex: 1 1 220px; min-width: 0; }
.plan-olcek-hedef .check-row { align-items: center; }
.plan-olcek-hedef .check-row > span { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.plan-olcek-hedef input[type="number"] { width: 5.5em; min-height: 32px; padding: 4px 6px; }
.plan-olcek-not { flex: 1 1 100%; margin: 0; color: var(--muted); font-size: 12px; }
.hak-tahmin { white-space: nowrap; }
/* Hak tablosu (Öğrenci 360, dar kart): tahmin notu uzun — ders adı harf harf kırılmasın, not küçük yazıyla sarar. */
@media (min-width: 901px) {
  .hak-tablo td:first-child { min-width: 8.5em; }
  .hak-tablo td:first-child strong { overflow-wrap: normal; word-break: normal; }
}
.hak-tablo td small, .package-table td small { line-height: 1.4; }
/* Kopyalamada "farklı görev" seçenekleri: başlık üstte, seçenekler yan yana; kompakt şeridin girdi kuralı (38 px yükseklik)
   radyolara uygulanmasın. */
.cprog-kopya-farkli { flex: 1 1 100%; flex-direction: row; flex-wrap: wrap; align-items: center; gap: 6px 16px; }
.cprog-kopya-farkli > span { flex: 1 1 100%; }
.cprog-kopya-farkli .check-row { display: inline-flex; flex-direction: row; align-items: center; gap: 6px; }
.cprog-kopya-farkli input[type="radio"] { width: auto; min-height: 0; padding: 0; margin: 0; }
/* ÖĞRENCİ GÖRÜŞMESİ + ÇOK ALICILI UYARI (2026-09-25). Kimlik kartı üstte tam genişlik (öğrenci, tarih, hizmet, kim, hava);
   altında .gorusme-izgara'nın üç kartı: veli, öğrenci, uyarı. Alıcı kutuları kişinin adını ikinci satırda taşır — ad uzun
   olabilir (iki koordinatör), satır kırılır, kart genişlemez. */
.gorusme-kimlik-serit { grid-template-columns: repeat(auto-fit, minmax(min(100%, 210px), 1fr)); align-items: start; }
.gorusme-alicilar { display: grid; gap: 8px; }
.gorusme-alici {
  display: flex; align-items: center; gap: 10px; min-height: 44px; padding: 8px 12px;
  border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft);
  cursor: pointer; transition: border-color .16s ease, background .16s ease;
}
.gorusme-alici:hover { border-color: var(--danger); }
.gorusme-alici input { flex: 0 0 auto; width: 18px; height: 18px; margin: 0; }
.gorusme-alici > span { display: grid; gap: 1px; min-width: 0; font-size: 14px; font-weight: 800; line-height: 1.3; }
.gorusme-alici small { font-size: 11.5px; font-weight: 500; color: var(--muted); overflow-wrap: anywhere; }
.gorusme-alici:has(input:checked) { border-color: var(--danger); background: var(--danger-soft); }
.psikoloji-uyari .gorusme-alicilar { grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr)); margin-bottom: 10px; }
/* Öğrenci 360: iki "son görüşme" kutusu yan yana; dar ekranda alt alta. */
.gorusme-son-ikili { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr)); gap: 10px; margin: 0 0 12px; }
.gorusme-son { display: grid; gap: 5px; align-content: start; min-width: 0; padding: 10px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.gorusme-son h3 { margin: 0; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.gorusme-son .status { justify-self: start; }
.gorusme-son p { margin: 0; line-height: 1.45; overflow-wrap: anywhere; }
.gorusme-ogrenci-zaman { margin-top: 12px; }
.gorusme-ogrenci-kisa { display: block; margin-top: 4px; color: var(--muted); }
/* Uyarı kartında "kimden → kime · hangi görüşmeden" satırı. */
.coach-alert-yon { display: block; margin: -2px 0 4px; font-size: 12px; font-weight: 700; color: var(--muted); }
/* Kilitli alıcı (kayıtlı ama düzenleyenin seçemediği) ve alıcı notu (2026-09-25 incelemesi). */
.gorusme-alici.is-kilitli { cursor: default; opacity: .85; }
.gorusme-alici-not { margin: 0; color: var(--muted); font-size: 11.5px; line-height: 1.4; }

/* ============================================================================================
   QUIZ MODLARI + HIZLI ÖZET + GRAFİK/ŞEKİL UYARANI (2026-09-25). Katı CSP: satır içi style yok, renk sınıftan.
   ============================================================================================ */
/* Grafik uyaranı: sunucuda SVG; seri renkleri SINIFTAN ki koyu tema ve kâğıt paleti ezebilsin. */
.soru-grafik { margin: 6px 0 10px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
.soru-grafik svg { display: block; width: 100%; max-width: 460px; height: auto; margin: 0 auto; font-family: inherit; }
.soru-grafik text { fill: var(--text); }
.soru-grafik .qg-eksen { fill: var(--muted); }
.soru-grafik .qg-izgara { stroke: var(--border); stroke-width: 1; }
.soru-grafik .qg-eksen-cizgi { stroke: var(--muted); stroke-width: 1.2; }
.soru-grafik .qg-deger { fill: var(--text); font-weight: 700; }
.soru-grafik .qg-baslik { fill: var(--text); }
.qg-seri-1 { fill: #3b6fe0; stroke: #3b6fe0; } .qg-seri-2 { fill: #e0793b; stroke: #e0793b; } .qg-seri-3 { fill: #2f9e6a; stroke: #2f9e6a; }
.qg-seri-4 { fill: #c94c7c; stroke: #c94c7c; } .qg-seri-5 { fill: #8c5ad8; stroke: #8c5ad8; } .qg-seri-6 { fill: #d8b224; stroke: #d8b224; }
.qg-seri-7 { fill: #2fa2b8; stroke: #2fa2b8; } .qg-seri-8 { fill: #8a7a63; stroke: #8a7a63; }
.soru-grafik text.qg-seri-1, .soru-grafik text.qg-seri-2 { stroke: none; }
.soru-grafik-lejant { list-style: none; margin: 6px 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12px; color: var(--muted); }
.soru-grafik-lejant i { display: inline-block; width: 12px; height: 12px; border-radius: 3px; margin-right: 5px; vertical-align: -1px; }
.soru-sekil { margin: 6px 0 10px; padding: 8px; border: 1px solid var(--border); border-radius: 10px; background: #fff; text-align: center; }
.soru-sekil svg { max-width: 100%; max-height: 260px; height: auto; }

/* Hızlı özet */
.konu-ozet-kart { padding: 12px 16px; border-left: 4px solid var(--primary); }
.konu-ozet-kart > summary { cursor: pointer; display: flex; align-items: center; gap: 8px; font-size: 15px; list-style: none; }
.konu-ozet-kart > summary::-webkit-details-marker { display: none; }
.konu-ozet-kart > summary small { color: var(--muted); font-weight: 500; }
.konu-ozet-kart:not([open]) > *:not(summary) { display: none; }
.konu-ozet-simge { font-size: 20px; line-height: 1; }
.konu-ozet-baslik { margin: 10px 0 4px; font-size: 17px; }
.konu-ozet { line-height: 1.55; }
.konu-ozet h3 { margin: 12px 0 4px; font-size: 13px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.konu-ozet-metin { margin: 6px 0; font-size: 15px; }
.konu-ozet ul { margin: 0; padding-left: 20px; }
.konu-ozet li { margin: 3px 0; }
.konu-ozet-formuller li { font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; font-size: 14px; }
.konu-ozet-tuzaklar li::marker { content: "⚠ "; }
.konu-ozet-ornek { margin-top: 10px; padding: 8px 12px; border: 1px dashed var(--border); border-radius: 8px; }
.konu-ozet-ornek summary { cursor: pointer; font-weight: 700; }
.konu-ozet-kapak .konu-ozet { margin-top: 10px; }
.konu-ozet-quiz h2 { margin: 0 0 10px; font-size: 17px; }
.konu-ozet-quiz-modlar { display: flex; flex-wrap: wrap; gap: 8px; }
.konu-ozet-quiz-modlar form { display: contents; }
.konu-ozet-quiz-not { align-self: center; color: var(--muted); font-size: 13px; }

/* Öğrenci paneli: mod düğmeleri + özet bağlantısı tek şeritte */
.ogrenci-quiz-modlar { display: flex; flex-wrap: wrap; gap: 6px; flex: 1 0 100%; margin-top: 6px; }
.ogrenci-quiz-modlar .ogrenci-konu-testi, .ogrenci-quiz-modlar .ogrenci-konu-testi-form { flex: 1 1 200px; width: auto; margin-top: 0; }
.ogrenci-quiz-modlar .ogrenci-konu-testi-form .ogrenci-konu-testi { width: 100%; }
.ogrenci-konu-ozet-bag { display: inline-flex; align-items: center; gap: 4px; flex: 0 0 auto; padding: 9px 12px; border: 1px solid var(--border); border-radius: 10px;
  font-size: 13px; font-weight: 600; text-decoration: none; color: var(--text); background: var(--surface-soft); }
.ogrenci-konu-ozet-bag:hover, .ogrenci-konu-ozet-bag:focus-visible { border-color: var(--primary); }

/* Sürükle-bırak quizi (öğrenci): kartlar süsleme, seçiciler taşıyıcı. JS varsa seçiciler gizlenir ("Listeden seç" açar). */
.sb-tur { color: var(--muted); font-size: 12px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; }
.sb-kart { display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; border: 1.5px solid var(--primary); border-radius: 999px; background: var(--surface);
  color: var(--text); font-size: 14px; line-height: 1.3; cursor: grab; user-select: none; touch-action: none; max-width: 100%; }
.sb-kart:focus-visible { outline: 3px solid var(--primary-soft); }
.sb-kart.is-alinan { background: var(--primary); color: var(--on-primary); }
.sb-kart.is-suruklenen { opacity: .5; }
.sb-havuz { list-style: none; display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0 0; padding: 10px; border: 1px dashed var(--border); border-radius: 12px; min-height: 48px; }
.sb-esles { display: grid; gap: 10px; }
.sb-sol { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.sb-slot { display: grid; grid-template-columns: minmax(0, 1fr) minmax(140px, 1fr); gap: 8px; align-items: center; padding: 6px 10px; border: 1px solid var(--border); border-radius: 10px; }
.sb-sol-metin { font-weight: 600; }
.sb-hedef { display: flex; align-items: center; justify-content: center; min-height: 40px; padding: 4px; border: 2px dashed var(--border); border-radius: 10px; color: var(--muted); font-size: 12px; }
.sb-hedef.is-ustunde { border-color: var(--primary); background: var(--primary-soft); }
.sb-slot.is-dolu .sb-hedef { border-style: solid; border-color: var(--primary); color: transparent; font-size: 0; }
.sb-slot.is-dolu .sb-hedef .sb-kart { font-size: 14px; color: var(--text); cursor: pointer; }
.sb-secim, .sb-secimler { display: block; }
.sb-secimler { display: grid; gap: 6px; margin-top: 8px; }
.sb-secimler label { display: flex; align-items: center; gap: 8px; font-size: 13px; }
.sb-secimler select, .sb-secim { max-width: 100%; }
.sb-js .sb-soru:not(.is-liste) .sb-secim, .sb-js .sb-soru:not(.is-liste) .sb-secimler { display: none; }
.sb-liste-ac { display: none; margin-top: 8px; padding: 4px 10px; border: 1px solid var(--border); border-radius: 999px; background: transparent; color: var(--muted); font: inherit; font-size: 12px; cursor: pointer; }
.sb-js .sb-liste-ac { display: inline-block; }
.sb-soru.is-liste .sb-liste-ac { border-color: var(--primary); color: var(--primary); }
.sb-sirala .sb-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.sb-sira-kart { display: flex; align-items: center; gap: 10px; width: 100%; border-radius: 10px; cursor: grab; }
.sb-sira-no { width: 24px; height: 24px; border-radius: 50%; display: inline-flex; align-items: center; justify-content: center; background: var(--primary-soft); color: var(--primary); font-weight: 800; font-size: 12px; flex: none; }
.sb-sira-kart > span[data-math] { flex: 1; }
.sb-oklar { display: inline-flex; gap: 4px; }
.sb-oklar button { width: 30px; height: 30px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text); cursor: pointer; font-size: 14px; }
.sb-oklar button:hover, .sb-oklar button:focus-visible { border-color: var(--primary); }
.sb-cumle { line-height: 2.1; font-size: 15px; }
.sb-bos { display: inline-block; min-width: 88px; margin: 0 3px; padding: 2px 10px; border: 2px dashed var(--primary); border-radius: 8px; text-align: center; color: var(--muted); cursor: pointer; vertical-align: baseline; }
.sb-bos.is-dolu { border-style: solid; color: var(--text); background: var(--primary-soft); font-weight: 700; }
.sb-bos.is-ustunde { background: var(--primary-soft); }
/* Sonuç görünümü */
.sb-sonuc-esles { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.sb-sonuc-esles li { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; padding: 6px 10px; border-radius: 10px; border-left: 4px solid var(--border); background: var(--surface-soft); }
.sb-sonuc-esles li.is-dogru, .sb-sonuc-sirala li.is-dogru { border-left-color: var(--success); }
.sb-sonuc-esles li.is-yanlis, .sb-sonuc-sirala li.is-yanlis { border-left-color: var(--danger); }
.sb-sonuc-sol { font-weight: 700; }
.sb-sonuc-ok { color: var(--muted); }
.sb-sonuc-anahtar { font-size: 12.5px; color: var(--success); font-weight: 600; }
.sb-sonuc-sirala { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 12px; }
.sb-sonuc-sirala ol { margin: 6px 0 0; padding-left: 22px; }
.sb-sonuc-sirala li { margin: 3px 0; padding-left: 6px; border-left: 4px solid var(--border); }
.sb-sonuc-bosluk { line-height: 2; font-size: 15px; }
.sb-sonuc-bosluk mark { padding: 2px 8px; border-radius: 6px; background: var(--surface-soft); color: var(--text); font-weight: 700; }
.sb-sonuc-bosluk mark.is-dogru { background: var(--success-soft); color: var(--success); }
.sb-sonuc-bosluk mark.is-yanlis { background: var(--danger-soft); color: var(--danger); text-decoration: line-through; }
.sb-sonuc-bosluk mark.is-bos { color: var(--muted); font-weight: 500; }
@media (max-width: 640px) { .sb-slot { grid-template-columns: 1fr; } .sb-cumle { line-height: 2.3; } }
/* Quiz hazirligi tablosu (question-bank-hazirlik.php): hedef alti / kritik hucre, ozet baglantisi. */
.quiz-hazirlik-tablo td.is-eksik { color: var(--warning, #b7791f); font-weight: 700; }
.quiz-hazirlik-tablo td.is-kritik { color: var(--danger); font-weight: 800; }
.quiz-hazirlik-ozet { display: inline-block; padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 700; text-decoration: none; border: 1px solid var(--border); }
.quiz-hazirlik-ozet.is-var { color: var(--success); border-color: var(--success); }
.quiz-hazirlik-ozet.is-yok { color: var(--muted); border-style: dashed; }
.konu-ozet-form textarea { min-height: 90px; }
.konu-ozet-form .konu-ozet-onizleme { margin-top: 12px; padding: 12px 14px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
/* SORU CIZIM SEMALARI (app/soru-cizim.php): kagit beyaz, murekkep sabit — acik/koyu temada ve belgede ayni. Renk siniftan. */
.soru-cizim { background: #fff; }
.soru-cizim svg { max-width: 100%; height: auto; font-family: inherit; color: #1f2937; }
.soru-cizim text { fill: #1f2937; }
.soru-cizim .sc-etiket { font-size: 14px; font-weight: 600; }
.soru-cizim .sc-etiket-kucuk { font-size: 12.5px; font-weight: 600; }
.soru-cizim .sc-etiket-mini { font-size: 11px; fill: #4b5563; }
.soru-cizim .sc-cizgi { stroke: #1f2937; stroke-width: 2; fill: none; stroke-linecap: round; stroke-linejoin: round; }
.soru-cizim .sc-kalin { stroke: #1f2937; stroke-width: 3; fill: none; stroke-linecap: round; stroke-linejoin: round; }
.soru-cizim .sc-ince { stroke: #4b5563; stroke-width: 1.2; fill: none; stroke-linecap: round; }
.soru-cizim .sc-kesik { stroke: #6b7280; stroke-width: 1.5; fill: none; stroke-dasharray: 5 4; }
.soru-cizim .sc-kesik-vurgu { stroke: #b45309; stroke-width: 2; fill: none; stroke-dasharray: 6 4; }
.soru-cizim .sc-izgara { stroke: #e5e7eb; stroke-width: 1; }
.soru-cizim .sc-eksen { stroke: #1f2937; stroke-width: 1.8; fill: none; }
.soru-cizim .sc-vurgu { stroke: #2563eb; stroke-width: 2.5; fill: none; stroke-linecap: round; stroke-linejoin: round; }
.soru-cizim .sc-kuvvet { stroke: #dc2626; stroke-width: 2.5; fill: none; }
.soru-cizim .sc-isin { stroke: #f59e0b; stroke-width: 1.8; fill: none; }
.soru-cizim .sc-goruntu { stroke: #7c3aed; stroke-width: 2.5; fill: none; stroke-dasharray: 6 3; }
.soru-cizim .sc-ok-uc { fill: #1f2937; }
.soru-cizim .sc-nokta { fill: #1f2937; stroke: none; }
.soru-cizim .sc-nokta-bos { fill: #fff; stroke: #1f2937; stroke-width: 2; }
.soru-cizim .sc-nokta-vurgu { fill: #2563eb; stroke: none; }
.soru-cizim .sc-silgi { fill: #fff; stroke: none; }
.soru-cizim .sc-dolgu-1 { fill: #dbeafe; stroke: #1e40af; stroke-width: 2; stroke-linejoin: round; }
.soru-cizim .sc-dolgu-2 { fill: #fde68a; stroke: #92400e; stroke-width: 2; stroke-linejoin: round; }
.soru-cizim .sc-dolgu-3 { fill: #bbf7d0; stroke: #166534; stroke-width: 2; stroke-linejoin: round; }
.soru-cizim .sc-dolgu-4 { fill: #fecaca; stroke: #991b1b; stroke-width: 2; stroke-linejoin: round; }
.soru-cizim .sc-dolgu-5 { fill: #e9d5ff; stroke: #6b21a8; stroke-width: 2; stroke-linejoin: round; }
.soru-cizim .sc-dolgu-6 { fill: #cffafe; stroke: #155e75; stroke-width: 2; stroke-linejoin: round; }
.soru-cizim .sc-dolgu-1a { fill: rgba(59,130,246,.22); stroke: #1e40af; stroke-width: 2; }
.soru-cizim .sc-dolgu-2a { fill: rgba(245,158,11,.22); stroke: #92400e; stroke-width: 2; }
.soru-cizim .sc-dolgu-3a { fill: rgba(34,197,94,.22); stroke: #166534; stroke-width: 2; }
.soru-cizim .sc-dolgu-bos { fill: #fff; stroke: #1f2937; stroke-width: 1.8; }
.soru-cizim .sc-dolgu-vurgu { fill: #93c5fd; stroke: #1e40af; stroke-width: 1.8; }
.soru-cizim .sc-dolgu-sivi { fill: #bfdbfe; stroke: none; }
.soru-cizim .sc-yorunge { fill: none; stroke: #6b7280; stroke-width: 1.5; stroke-dasharray: 4 4; }
.soru-cizim .sc-elektron { fill: #2563eb; stroke: #fff; stroke-width: 1; }
.soru-cizim .sc-atom { fill: #f3f4f6; stroke: #1f2937; stroke-width: 2; }
.soru-cizim .sc-gunes { fill: #fbbf24; stroke: #d97706; stroke-width: 2; }
.soru-cizim .sc-gunes-isik { stroke: #fbbf24; stroke-width: 6; }
.soru-cizim .sc-dunya { fill: #60a5fa; stroke: #1e3a8a; stroke-width: 2; }
.soru-cizim .sc-dunya-vurgu { fill: #34d399; stroke: #065f46; stroke-width: 3; }
.soru-cizim .sc-ay-karanlik { fill: #374151; stroke: #111827; stroke-width: 1.5; }
.soru-cizim .sc-ay-aydinlik { fill: #fef3c7; stroke: none; }
.soru-cizim .sc-alev { fill: #f97316; stroke: #c2410c; stroke-width: 1; }
/* Ogrenci: Quizlerim listesi (2026-09-25). */
.ogrenci-quiz-listesi { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.ogrenci-quiz-listesi li a { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border: 1px solid var(--border); border-left: 4px solid var(--border); border-radius: 10px; text-decoration: none; color: var(--text); background: var(--surface); }
.ogrenci-quiz-listesi li.is-dusuk a { border-left-color: var(--danger); }
.ogrenci-quiz-listesi li.is-iyi a { border-left-color: var(--success); }
.ogrenci-quiz-listesi li a:hover, .ogrenci-quiz-listesi li a:focus-visible { border-color: var(--primary); }
.ogrenci-quiz-puan { display: flex; align-items: baseline; gap: 2px; min-width: 64px; font-variant-numeric: tabular-nums; }
.ogrenci-quiz-puan strong { font-size: 22px; }
.ogrenci-quiz-puan small { color: var(--muted); }
.ogrenci-quiz-bilgi { display: grid; flex: 1; min-width: 0; }
.ogrenci-quiz-bilgi small { color: var(--muted); }
.ogrenci-quiz-ok { color: var(--muted); }
/* Cizim galerisi (question-bank-cizim.php). */
.cizim-galeri { display: grid; grid-template-columns: repeat(auto-fill, minmax(360px, 1fr)); gap: 14px; }
.cizim-kart-bas { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.cizim-kart-bas h2 { margin: 0; font-size: 16px; }
.cizim-kart-bas code { font-size: 12px; color: var(--muted); }
.cizim-kart .soru-cizim { margin: 8px 0; }
.cizim-kart-p dl { display: grid; grid-template-columns: max-content 1fr; gap: 4px 10px; font-size: 12.5px; margin: 8px 0; }
.cizim-kart-p dd { margin: 0; color: var(--muted); }
.cizim-kart-ornek { font-size: 11.5px; white-space: pre-wrap; overflow-wrap: anywhere; background: var(--surface-soft); padding: 8px; border-radius: 8px; }
.cizim-deneme-form { align-items: flex-end; }
.cizim-deneme-p { flex: 1 1 320px; }
.cizim-deneme-p textarea { width: 100%; font-family: ui-monospace, Consolas, monospace; font-size: 12.5px; }
.cizim-deneme-sonuc { margin-top: 12px; }

/* YETKİ EKRANI (2026-09-26): kutu adı + altında ne açtığı. */
.yetki-listesi .yetki-satir { align-items: flex-start; }
.yetki-listesi .yetki-satir input { margin-top: 3px; }
.yetki-listesi .yetki-satir > span { display: flex; flex-direction: column; gap: 2px; }
.yetki-listesi .yetki-satir small { color: var(--muted); font-size: 12px; line-height: 1.4; }

/* ENVANTER İSTATİSTİKLERİ (2026-09-26): envanter-istatistik.php. Renkler tema token'larından; ısı tonu --primary karışımı. */
.ei-araclar { display: flex; flex-wrap: wrap; gap: 8px; margin: 0 0 16px; }
.ei-arac { display: inline-flex; align-items: center; gap: 6px; padding: 7px 12px; border-radius: 999px; border: 1px solid var(--border);
  background: var(--surface); color: var(--text); text-decoration: none; font-size: .88rem; font-weight: 600; }
.ei-arac b { font-variant-numeric: tabular-nums; background: var(--primary-soft, rgba(80,110,240,.12)); color: var(--primary); border-radius: 999px; padding: 1px 8px; font-size: .78rem; }
.ei-arac:hover { border-color: var(--primary); }
.ei-arac.is-active { background: var(--primary); border-color: var(--primary); color: var(--on-primary); }
.ei-arac.is-active b { background: rgba(255,255,255,.22); color: var(--on-primary); }
.ei-arac.is-bos { opacity: .55; }
.ei-metrik .ei-metrik-metin { font-size: 1.15rem; line-height: 1.25; }
.ei-hist-izgara { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 14px; }
.ei-hist-kart { margin: 0; padding: 12px 12px 6px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface); min-width: 0; }
.ei-hist-kart figcaption { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 10px; font-size: .9rem; margin-bottom: 4px; }
.ei-hist-kart figcaption .muted { font-size: .78rem; font-variant-numeric: tabular-nums; }
.ei-hist { display: block; width: 100%; height: auto; }
.ei-hist .ei-kilavuz { stroke: var(--border); stroke-width: 1; }
.ei-hist .ei-eksen { fill: var(--muted); font-size: 9.5px; }
.ei-hist .ei-deger { fill: var(--text); font-size: 10px; font-weight: 700; }
.ei-hist .ei-ort { stroke: var(--text); stroke-width: 1.4; stroke-dasharray: 4 3; opacity: .75; }
.ei-hist .ei-ort-yazi { fill: var(--text); font-size: 10px; font-weight: 700; }
.ei-renk-0 { --ei-renk: #4f6ef7; } .ei-renk-1 { --ei-renk: #0ea5a4; } .ei-renk-2 { --ei-renk: #e07a1f; } .ei-renk-3 { --ei-renk: #9b5de5; }
.ei-renk-4 { --ei-renk: #e0487a; } .ei-renk-5 { --ei-renk: #3f9d4b; } .ei-renk-6 { --ei-renk: #c49a0b; } .ei-renk-7 { --ei-renk: #2b8fd6; }
.ei-hist .ei-sutun { fill: var(--ei-renk); }
.ei-iki { display: grid; grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); gap: 16px; }
.ei-dagilim { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.ei-dagilim li { display: grid; grid-template-columns: minmax(0, 11rem) 1fr auto; align-items: center; gap: 10px; }
.ei-dagilim-ad { font-weight: 600; font-size: .88rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ei-dagilim-sayi { font-size: .82rem; font-variant-numeric: tabular-nums; color: var(--muted); white-space: nowrap; }
.ei-dagilim-sayi strong { color: var(--text); }
.ei-dagilim li.ei-dagilim-fazla { display: block; font-size: .82rem; }
progress.ei-cubuk { -webkit-appearance: none; appearance: none; width: 100%; height: 12px; border: 0; border-radius: 999px; background: var(--border); overflow: hidden; }
progress.ei-cubuk::-webkit-progress-bar { background: var(--border); border-radius: 999px; }
progress.ei-cubuk::-webkit-progress-value { background: var(--ei-renk); border-radius: 999px; }
progress.ei-cubuk::-moz-progress-bar { background: var(--ei-renk); border-radius: 999px; }
.ei-isi-tablo td.ei-isi { font-weight: 700; font-variant-numeric: tabular-nums; }
.ei-isi-0 { background: color-mix(in srgb, var(--primary) 4%, transparent); }
.ei-isi-1 { background: color-mix(in srgb, var(--primary) 8%, transparent); }
.ei-isi-2 { background: color-mix(in srgb, var(--primary) 12%, transparent); }
.ei-isi-3 { background: color-mix(in srgb, var(--primary) 17%, transparent); }
.ei-isi-4 { background: color-mix(in srgb, var(--primary) 22%, transparent); }
.ei-isi-5 { background: color-mix(in srgb, var(--primary) 28%, transparent); }
.ei-isi-6 { background: color-mix(in srgb, var(--primary) 34%, transparent); }
.ei-isi-7 { background: color-mix(in srgb, var(--primary) 40%, transparent); }
.ei-isi-8 { background: color-mix(in srgb, var(--primary) 47%, transparent); }
.ei-isi-9 { background: color-mix(in srgb, var(--primary) 55%, transparent); }
.ei-isi-tablo tr.ei-az td, .ei-isi-tablo tr.ei-az th { opacity: .6; }
.ei-isi-tablo tbody th { text-transform: none; letter-spacing: 0; font-size: .92rem; font-weight: 700; color: var(--text); white-space: nowrap; }
.ei-isi-tablo tbody th small { font-weight: 500; margin-left: 4px; }
.ei-bos-araclar { flex: 1 0 100%; font-size: .84rem; }
.ei-bos-araclar summary { cursor: pointer; color: var(--muted); font-weight: 600; }
.ei-bos-araclar p { margin: 6px 0 0; }
.ei-metrik .ei-metrik-metin { overflow-wrap: anywhere; }
.ei-isi-tablo tr.ei-toplam th, .ei-isi-tablo tr.ei-toplam td { border-top: 2px solid var(--border); }
@media (max-width: 640px) {
  .ei-dagilim li { grid-template-columns: minmax(0, 7.5rem) 1fr auto; gap: 6px; }
  .ei-hist-izgara { grid-template-columns: 1fr; }
}

/* TELEFON DÜZENİ TURU (2026-09-26 kullanıcı: "telefondan girenler var, daha iyi çalışır düzenler"). 390 px'te ölçüldü:
   sıralama çipleri ekran dışında kesiliyordu (Kurum şubesi / Koç / Kayıt'a dokunulamıyordu), başlık düğmeleri tek sütun
   alt alta (Öğrenciler'de 6 düğme 300 px), metrik kartları tek sütun (Randevu'da dört "0" kartı 470 px), liste kartında
   etiket ile değer alt alta (öğrenci başına ~700 px, 25 satır 18.800 px), küçük düğme 34 px, tablo içi seçici 28 px. */
.student-profile-bos { display: none; }
@media (max-width: 900px) {
  .responsive-card-table td.liste-sira { display: none; }
  .responsive-card-table td.liste-sira + td { grid-column: 1 / -1; padding: 0 0 10px; border-bottom: 1px solid var(--border); font-size: 15px; }
  .responsive-card-table td.liste-sira + td::before { display: none; }
}
@media (max-width: 700px), ((max-width: 1024px) and (pointer: coarse) and (orientation: landscape)) {
  .siralama-cipleri { flex-wrap: wrap; row-gap: 6px; }
  .heading-actions .button { flex: 1 1 calc(50% - 4px); min-height: 42px; padding-inline: 10px; font-size: 13px; }
  .heading-actions .button-primary { flex-basis: 100%; }
  .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .metric-card { min-height: 0; }
  .button-small { min-height: 40px; }
  /* Kart satırı: etiket solda, değer sağda — anonim metin ikinci sütuna düşer, öğe çocuklar da ikinci sütunda kalır. */
  .responsive-card-table td { display: grid; grid-template-columns: 6.5rem minmax(0, 1fr); align-items: center; gap: 4px 10px; padding: 7px 0; }
  .responsive-card-table td::before { margin: 0; }
  .responsive-card-table td > * { grid-column: 2; }
  .responsive-card-table td.liste-sira + td { display: block; }
  .responsive-card-table td select, .responsive-card-table td input:not([type="checkbox"]):not([type="radio"]) { min-height: 40px; }
  .student-profile-facts > div.is-bos { display: none; }
  .student-profile-bos { display: block; margin: 8px 0 0; font-size: 12.5px; }
  .ogrenci-yanlis-baglanti a { display: inline-flex; align-items: center; min-height: 38px; padding: 6px 12px; margin: 2px 0;
    border: 1px solid var(--border); border-radius: 999px; background: var(--surface); font-weight: 700; text-decoration: none; }
}

/* ÖĞRENCİ PANELİ: SERİ / ROZET / SINAV / BİLDİRİM (2026-09-26 kullanıcı: "1 ve 3 ve 7 ve 8 yap"). */
.ogrenci-seri-chip strong { color: #ffb347; }
.ogrenci-sinav-chip small { font-size: 11px; opacity: .8; margin-left: 2px; }
.ogrenci-gun-ayrac { display: flex; align-items: center; gap: 10px; margin: 16px 0 4px; font-size: 12px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.ogrenci-gun-ayrac::before, .ogrenci-gun-ayrac::after { content: ""; flex: 1; height: 1px; background: var(--border); }
.ogrenci-rozet-liste { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 8px; }
.ogrenci-rozet { display: flex; gap: 10px; align-items: flex-start; padding: 10px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); min-width: 0; }
.ogrenci-rozet.is-kazanildi { border-color: color-mix(in srgb, var(--success) 45%, var(--border)); background: var(--success-soft); }
.ogrenci-rozet.is-hedef { opacity: .85; }
.ogrenci-rozet.is-hedef .ogrenci-rozet-simge { filter: grayscale(1); opacity: .55; }
.ogrenci-rozet-simge { font-size: 24px; line-height: 1; flex: 0 0 auto; }
.ogrenci-rozet-metin { display: grid; gap: 3px; min-width: 0; flex: 1; }
.ogrenci-rozet-metin strong { font-size: 13px; }
.ogrenci-rozet-metin small { font-size: 12px; color: var(--muted); }
.ogrenci-rozet-metin progress { width: 100%; height: 6px; }
.ogrenci-rozet-not { margin: 10px 0 0; font-size: 12px; }
.ogrenci-bildirim-karti .bildirim-durum { margin-top: 0; }

/* ÇOKLU SEÇİM ÇUBUĞU (2026-09-26): eylemler tek satırda sarar; telefonda çubuk yapışkan ki kaydırırken eylem kaybolmasın. */
.gorev-secim-eylem { display: flex; flex-wrap: wrap; gap: 6px; }
.gorev-secim-eylem .button { min-height: 32px; }
.gorev-secim-sil { color: var(--danger); }
[data-secim-modu].is-active { background: var(--primary-soft); border-color: var(--primary); color: var(--primary-dark); }
@media (max-width: 700px), ((max-width: 1024px) and (pointer: coarse) and (orientation: landscape)) {
  .gorev-secim-serit { position: sticky; top: 0; z-index: 30; box-shadow: 0 6px 16px rgba(0,0,0,.12); }
  .gorev-secim-eylem .button { min-height: 40px; flex: 1 1 calc(33% - 6px); justify-content: center; }
}

/* SÖZLEŞME: ANA VASİ SEÇİMİ (2026-09-26) */
.sozlesme-vasi-secim { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin: 0 0 10px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
.sozlesme-vasi-secim > span { font-weight: 700; font-size: 13px; }
.sozlesme-vasi-secenek { display: inline-flex; align-items: center; gap: 6px; font-size: 13.5px; cursor: pointer; }
.sozlesme-vasi-secim small { flex-basis: 100%; }

/* HATA KARNESİ + TOPLU HATA QUİZİ (2026-09-26) */
.yd-karne-izgara { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; }
.yd-karne-kutu { padding: 12px 14px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface-soft); }
.yd-karne-kutu h3 { margin: 0 0 8px; font-size: 14px; }
.yd-karne-sayilar { list-style: none; margin: 0 0 8px; padding: 0; display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 13px; }
.yd-karne-sayilar b { font-size: 18px; margin-right: 3px; font-variant-numeric: tabular-nums; }
.yd-karne-dersler { margin: 0; padding-left: 18px; font-size: 12.5px; display: grid; gap: 3px; }
.yd-karne-dersler li { display: flex; justify-content: space-between; gap: 8px; }
.yd-karne-dersler b { font-variant-numeric: tabular-nums; }
.yd-koc-karne { margin: 6px 0 10px; font-size: 13px; }
.hq-form { display: grid; gap: 12px; }
.hq-soru .od-soru-bas .od-no { min-width: 30px; }
.hq-eylem { position: sticky; bottom: 0; background: var(--bg); padding: 10px 0; z-index: 5; }
.cprog-alt-konu-ad { color: var(--muted); font-weight: 600; }

/* SON ADIMLAR (2026-09-26): Hata İzleme satırında hatadan önceki ekranlar, kapalı doğar. */
.hata-adimlar { margin-top: 6px; font-size: .78rem; }
.hata-adimlar summary { cursor: pointer; color: var(--muted); }
.hata-adimlar ol { margin: 4px 0 0; padding-left: 1.2em; display: grid; gap: 2px; max-width: 420px; }
.hata-adimlar li { word-break: break-all; }
.hata-adimlar code { font-size: .72rem; color: var(--muted); }
.hata-adimlar:not([open]) > *:not(summary) { display: none; }

/* KAZANIM KODU (2026-10-03, test kazanım analizi): kod adın önünde küçük, eşit aralıklı rozet; ad satırı kırılabilir. */
.kazanim-kod, .data-table td .kazanim-kod { display: inline-block; padding: 1px 6px; border-radius: 6px; background: var(--surface-2, var(--bg)); border: 1px solid var(--border);
  color: var(--muted); font-size: .78em; font-variant-numeric: tabular-nums; white-space: nowrap; margin-right: 4px; }

/* İŞLENMİŞ DERSİN İÇERİĞİ (2026-10-03): listede kapalı açılır form; kapalıyken içerik AÇIKÇA gizlenir ([hidden] tuzağının kardeşi). */
.ders-icerik-duzenle { margin-top: 6px; }
.ders-icerik-duzenle > summary { cursor: pointer; font-size: .85em; color: var(--primary); }
.ders-icerik-duzenle:not([open]) > *:not(summary) { display: none; }
.ders-icerik-duzenle .stack-form { margin-top: 8px; gap: 8px; }
.ders-icerik-duzenle textarea { width: 100%; }
.ders-icerik-eylem { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.data-table td .ders-odev-satir { display: block; margin-top: 4px; color: var(--muted); }

/* RANDEVU — TELEFON AJANDASI (2026-10-03). Yedi sütunlu saat ızgarası dar ekranda kartı harf harf dikey basıyordu;
   ≤760 px'te ızgara gizlenir, aynı haftanın gün gün kart listesi görünür. Masaüstünde ajanda hiç basılmaz. */
.randevu-ajanda { display: none; }
@media (max-width: 760px) {
  .appointment-week-card > .table-wrap { display: none; }
  .appointment-week-card .appointment-week-intro > div:first-child span { display: none; }
  .randevu-ajanda { display: grid; gap: 14px; margin-top: 10px; }
  .ajanda-gun { display: grid; gap: 8px; }
  .ajanda-gun-bas { display: flex; align-items: center; gap: 10px; padding: 8px 10px; border-radius: 12px; background: var(--surface-soft); }
  .ajanda-gun-bas > div { display: grid; flex: 1 1 auto; min-width: 0; }
  .ajanda-gun-bas strong { font-size: 15px; }
  .ajanda-gun-bas span { color: var(--muted); font-size: 12.5px; }
  .ajanda-gun-bas .ajanda-sayi { flex: 0 0 auto; font-weight: 700; }
  .ajanda-gun.is-today .ajanda-gun-bas { background: var(--primary-soft); box-shadow: inset 3px 0 0 var(--primary); }
  .ajanda-gun.is-today .ajanda-gun-bas strong { color: var(--primary); }
  .ajanda-gun.is-bos .ajanda-gun-bas { background: transparent; border: 1px dashed var(--border); }
  .ajanda-kart { display: grid; gap: 8px; padding: 10px 12px; border: 1px solid var(--border); border-left: 4px solid var(--branch-accent, var(--primary)); border-radius: 12px; background: var(--surface); }
  .ajanda-kart-ic { display: grid; grid-template-columns: 58px minmax(0, 1fr); gap: 12px; align-items: start; color: inherit; text-decoration: none; }
  .ajanda-saat { display: grid; justify-items: center; padding: 6px 4px; border-radius: 10px; background: var(--surface-soft); }
  .ajanda-saat strong { font-size: 16px; font-variant-numeric: tabular-nums; line-height: 1.2; }
  .ajanda-saat small { color: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums; }
  .ajanda-govde { display: grid; gap: 2px; min-width: 0; }
  .ajanda-govde > strong { font-size: 15px; overflow-wrap: anywhere; }
  .ajanda-govde > span { font-size: 13.5px; overflow-wrap: anywhere; }
  .ajanda-govde > small { color: var(--muted); font-size: 12.5px; overflow-wrap: anywhere; }
  .ajanda-kart-yan { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }
  .ajanda-kart-yan form { margin: 0; }
  .ajanda-kart-yan .button { min-height: 38px; }
  .ajanda-kart.is-completed { opacity: .72; }
  .ajanda-kart.is-completed .ajanda-govde > strong { text-decoration: line-through; }
  .ajanda-kart.is-cancelled { opacity: .55; border-left-color: var(--danger); }
}

/* RANDEVU KİME: ÖĞRENCİ / VELİ / DİĞER (2026-10-03). Şube tonu kartın KENAR çizgisinde kalır; kime bilgisi ZEMİN rengi ve
   rozettir — iki ayrı ölçü iki ayrı görsel kanal. Renkler yüzeyle karıştırılır, iki temada da metin token rengiyle okunur. */
.kime-ogrenci { --kime-renk: #2563eb; }
.kime-veli { --kime-renk: #d97706; }
.kime-kayit { --kime-renk: #7c3aed; }
.kime-diger { --kime-renk: #64748b; }
.appointment-chip.kime-ogrenci, .appointment-chip.kime-veli, .appointment-chip.kime-kayit, .appointment-chip.kime-diger,
.ajanda-kart.kime-ogrenci, .ajanda-kart.kime-veli, .ajanda-kart.kime-kayit, .ajanda-kart.kime-diger { background: color-mix(in srgb, var(--kime-renk) 11%, var(--surface)); }
.randevu-kime-rozet { display: inline-block; padding: 1px 8px; border-radius: 999px; border: 1px solid color-mix(in srgb, var(--kime-renk) 45%, var(--border)); background: color-mix(in srgb, var(--kime-renk) 16%, var(--surface)); color: var(--text); font-size: 11.5px; font-weight: 700; font-style: normal; }
.data-table td b.randevu-kime-rozet { display: inline-block; }
.randevu-kime-cipler { display: flex; flex-wrap: wrap; gap: 8px; margin: 8px 0 12px; }
.randevu-kime-cip { display: inline-flex; align-items: center; gap: 6px; min-height: 34px; padding: 4px 12px; border-radius: 999px; border: 1px solid color-mix(in srgb, var(--kime-renk, var(--border)) 45%, var(--border)); background: color-mix(in srgb, var(--kime-renk, transparent) 12%, var(--surface)); color: var(--text); font-size: 13px; font-weight: 700; text-decoration: none; }
.randevu-kime-cip.is-active { box-shadow: 0 0 0 2px var(--primary); }
.ajanda-rozetler { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 6px; }

/* SÖZLEŞME AYARLARI › PAKET ÖZEL HUSUSLARI (2026-10-03): paket başına katlanır kutu; kapalı kutunun özeti madde sayısını yazar. */
.sozlesme-paket-madde { border: 1px solid var(--border); border-radius: 10px; padding: 8px 12px; margin: 0 0 8px; background: var(--surface); }
.sozlesme-paket-madde > summary { cursor: pointer; display: flex; gap: 8px; align-items: baseline; flex-wrap: wrap; }
.sozlesme-paket-madde:not([open]) > *:not(summary) { display: none; }
.sozlesme-paket-madde[open] > summary { margin-bottom: 8px; }

/* GECİKEN LİSTESİNDE KOÇ ADI (2026-10-03): uyarı çipinin içinde ayrı renkte rozet — öğrenci/gecikme metninden ayırt edilsin. */
/* .status inline-flex !important: koç rozeti anonim metnin yanında sütun açıp metni sıkıştırıyordu (ölçüldü) — bu çipte satır içi akış. */
.chip-list a.status.gl-uyari:has(.gl-uyari-koc) { display: inline-block !important; text-align: left; }
.gl-uyari .gl-uyari-koc { display: inline-block; margin-left: 4px; padding: 0 8px; border-radius: 999px; background: var(--primary-soft); color: var(--primary); font-weight: 700; white-space: nowrap; }
.gl-uyari .gl-uyari-koc.is-yok { background: var(--surface-soft); color: var(--muted); font-weight: 600; }

/* RANDEVU TELEFON: LİSTE / TABLO SEÇİMİ + TEK GÜN SAAT TABLOSU (2026-10-04). Yalnız ≤760 px görünür (ajanda kuralının yanında). */
.randevu-tel-secim { display: none; }
@media (max-width: 760px) {
  .randevu-tel-secim { display: flex; gap: 0; margin: 10px 0 2px; border: 1px solid var(--border); border-radius: 12px; overflow: hidden; background: var(--surface); }
  .randevu-tel-secim button { flex: 1 1 50%; min-height: 42px; border: 0; background: transparent; color: var(--muted); font: inherit; font-size: 14px; font-weight: 700; cursor: pointer; }
  .randevu-tel-secim button.is-active { background: var(--primary); color: var(--on-primary); }
  .randevu-tgun-sekmeler { position: sticky; top: 0; z-index: 4; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 4px; padding: 6px 0; background: var(--surface); }
  .randevu-tgun-sekmeler a { display: grid; justify-items: center; gap: 1px; padding: 6px 2px; border: 1px solid var(--border); border-radius: 10px; color: var(--text); text-decoration: none; background: var(--surface); }
  .randevu-tgun-sekmeler a span { font-size: 11px; color: var(--muted); }
  .randevu-tgun-sekmeler a strong { font-size: 16px; line-height: 1.1; font-variant-numeric: tabular-nums; }
  .randevu-tgun-sekmeler a small { font-size: 11px; font-weight: 700; color: var(--primary); min-height: 14px; }
  .randevu-tgun-sekmeler a.is-today { border-color: var(--primary); }
  .randevu-tgun-sekmeler a.is-active { background: var(--primary); border-color: var(--primary); color: var(--on-primary); }
  .randevu-tgun-sekmeler a.is-active span, .randevu-tgun-sekmeler a.is-active small { color: var(--on-primary); }
  .randevu-tgun-bas { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin: 6px 2px 8px; }
  .randevu-tgun-bas span { color: var(--muted); font-size: 13px; }
  .randevu-tgun-tablo { width: 100%; border-collapse: separate; border-spacing: 0; table-layout: fixed; }
  .randevu-tgun-tablo th { width: 56px; padding: 8px 6px 8px 0; vertical-align: top; text-align: right; font-size: 13px; font-weight: 700; color: var(--muted); font-variant-numeric: tabular-nums; border-top: 1px solid var(--border); }
  .randevu-tgun-tablo td { position: relative; padding: 6px 40px 6px 8px; vertical-align: top; border-top: 1px solid var(--border); border-left: 2px solid var(--border); min-height: 40px; }
  .randevu-tgun-tablo tr.is-dolu th { color: var(--text); }
  .randevu-tgun-tablo tr.is-dolu td { border-left-color: var(--primary); }
  .randevu-tgun-tablo tr.is-off td { background: repeating-linear-gradient(45deg, var(--surface-soft), var(--surface-soft) 6px, transparent 6px, transparent 12px); }
  .randevu-tgun-bos { display: inline-block; padding: 4px 0; color: var(--muted); font-size: 13px; }
  .randevu-tgun-tablo tr.is-bos:not(.is-off) .randevu-tgun-bos { color: var(--success); font-weight: 600; }
  .randevu-tgun-ekle { position: absolute; right: 6px; top: 5px; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; border: 1px dashed var(--border); color: var(--primary); font-size: 18px; line-height: 1; text-decoration: none; }
  .randevu-tgun-kart { display: grid; gap: 1px; margin: 0 0 6px; padding: 7px 10px; border-radius: 10px; border-left: 4px solid var(--branch-accent, var(--primary)); background: color-mix(in srgb, var(--kime-renk, var(--primary)) 11%, var(--surface)); color: var(--text); text-decoration: none; }
  .randevu-tgun-kart b { font-size: 12.5px; font-variant-numeric: tabular-nums; color: var(--muted); }
  .randevu-tgun-kart strong { font-size: 14.5px; overflow-wrap: anywhere; }
  .randevu-tgun-kart small { font-size: 12.5px; color: var(--muted); overflow-wrap: anywhere; }
  .randevu-tgun-kart.is-completed { opacity: .7; }
  .randevu-tgun-kart.is-completed strong { text-decoration: line-through; }
  .randevu-tgun-kart.is-cancelled { opacity: .5; }
}

/* BELGE ÜZERİNDE DÜZENLEME (2026-10-04 kullanıcı: "sözleşmeleri direkt form gibi görüp düzenleyelim"). Öğrenci ve öğretmen
   sözleşmesi formu kâğıt görünümünde: bölüm başlıkları belgedeki gibi şerit, alanlar "etiket | değer" satırı, girişler yazı
   çizgisi, madde metinleri paragraf gibi. Yalnız görünüm — alan adları ve kaydetme ucu formla aynı. */
.sozlesme-belge { max-width: 940px; margin-inline: auto; padding: 26px 34px 18px; background: var(--surface); border: 1px solid var(--border); border-radius: 6px; box-shadow: var(--shadow); }
.sozlesme-belge-bas { display: grid; gap: 4px; margin: 2px 0 16px; text-align: center; }
.sozlesme-belge-bas h2 { margin: 2px 0 0; font-size: 17px; letter-spacing: .06em; text-wrap: balance; }
.sozlesme-belge-kurum { margin: 0; font-weight: 800; letter-spacing: .04em; }
.sozlesme-belge-no, .sozlesme-belge-donem { margin: 0; color: var(--muted); font-size: 12px; }
.sozlesme-belge-bas input { width: min(100%, 520px); min-height: 30px; padding: 2px 6px; border: 0; border-bottom: 1px dotted var(--muted); border-radius: 0; background: transparent; color: var(--text); font: inherit; text-align: center; }
.sozlesme-belge-donem input { width: 9em; }
.sozlesme-belge-bas input:focus { outline: 0; border-bottom: 1px solid var(--primary); background: var(--primary-soft); }
.sozlesme-belge-secim { display: flex; flex-wrap: wrap; gap: 6px 16px; margin: 0 0 14px; padding: 8px 12px; border: 1px dashed var(--border); border-radius: 6px; }
.sozlesme-belge-secim legend { padding: 0 4px; color: var(--muted); font-size: 12px; font-weight: 700; }
.sozlesme-belge .cprog-adim, .sozlesme-belge .cprog-adim:first-of-type { margin: 0 0 12px; padding: 0 12px 10px; border: 1px solid var(--border); }
.sozlesme-belge .cprog-adim-baslik { margin: 0 -12px 8px; padding: 6px 12px; border-bottom: 1px solid var(--border); background: var(--surface-soft); font-size: 12.5px; letter-spacing: .04em; text-transform: uppercase; }
.sozlesme-belge .cprog-adim-baslik b { display: none; }
.sozlesme-belge .cprog-adim-baslik span { letter-spacing: 0; text-transform: none; }
.sozlesme-belge .form-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 24px; }
.sozlesme-belge .field:not(.sozlesme-radyo) { display: grid; grid-template-columns: minmax(0, 40%) minmax(0, 1fr); align-items: baseline; gap: 2px 10px; padding: 3px 0; border-bottom: 1px dotted var(--border); }
.sozlesme-belge .field.field-wide:not(.sozlesme-radyo) { grid-template-columns: minmax(0, 22%) minmax(0, 1fr); }
.sozlesme-belge .field:not(.sozlesme-radyo) > :not(span) { grid-column: 2; min-width: 0; }
.sozlesme-belge .field:not(.sozlesme-radyo) > span { grid-column: 1; font-weight: 650; }
.sozlesme-belge .field:not(.sozlesme-radyo) > span small { display: block; font-weight: 500; }
.sozlesme-belge .field input:not([type="checkbox"]):not([type="radio"]), .sozlesme-belge .field select { min-height: 30px; padding: 3px 6px; border: 0; border-bottom: 1px solid transparent; border-radius: 0; background: transparent; box-shadow: none; }
.sozlesme-belge .field input:not([type="checkbox"]):not([type="radio"]):hover, .sozlesme-belge .field select:hover { border-bottom-color: var(--border); }
.sozlesme-belge .field input:not([type="checkbox"]):not([type="radio"]):focus, .sozlesme-belge .field select:focus { border-bottom-color: var(--primary); background: var(--primary-soft); box-shadow: none; }
.sozlesme-belge .field:not(.sozlesme-radyo) > small { color: var(--muted); font-size: 11.5px; }
.sozlesme-belge .field.field:not(.sozlesme-radyo):has(textarea) { grid-template-columns: minmax(0, 1fr); gap: 4px; border-bottom: 0; }
.sozlesme-belge .field.field:not(.sozlesme-radyo):has(textarea) > * { grid-column: 1; }
.sozlesme-belge .field textarea { border-radius: 4px; font-size: 13.5px; line-height: 1.55; }
.sozlesme-belge .os-madde-metin textarea { min-height: 0; padding: 4px 6px; border-color: transparent; background: transparent; resize: vertical; }
.sozlesme-belge .os-madde-metin textarea:hover { border-color: var(--border); }
.sozlesme-belge .os-madde-metin textarea:focus { border-color: var(--primary); background: var(--surface); }
.sozlesme-belge .sozlesme-alt-baslik { margin: 8px 0 2px; font-size: 12px; font-weight: 800; letter-spacing: .03em; text-transform: uppercase; }
.sozlesme-belge .os-not { margin: 4px 0; font-size: 12px; }
.sozlesme-belge .os-belge-kunye { margin-bottom: 12px; }
.sozlesme-belge .form-actions { position: static; margin-top: 6px; }
@media (max-width: 760px) {
  .sozlesme-belge { padding: 14px 10px; border-radius: 0; }
  .sozlesme-belge .field.field:not(.sozlesme-radyo) { grid-template-columns: minmax(0, 1fr); }
  .sozlesme-belge .field.field:not(.sozlesme-radyo) > * { grid-column: 1; }
  .sozlesme-belge .form-grid { grid-template-columns: minmax(0, 1fr); }
}
.sozlesme-belge .sozlesme-ebeveyn .form-grid { grid-template-columns: minmax(0, 1fr); }

/* RANDEVU MASAÜSTÜ IZGARASI TELEFON KARTININ DİLİNDE (2026-10-04 kullanıcı: "randevu telefonda güzel oldu, PC'deki görüntüyü de böyle
   güzel yap"). Yalnız görünüm: gün başlığı telefonun gün sekmesi gibi (kısa ad · gün · sayı), kart telefon kartı gibi (saat üstte,
   başlık kalın, kişi satırı, kime rengi zemin + şube tonu kenar), işlem düğmeleri kartın üstüne gelince çıkar (tamamlandı işareti
   hep görünür), tam saat çizgisi belirgin / yarım saat noktalı. Boyut kuralları `html:not([data-takvim])` ile: Kompakt takvim
   kendi ölçülerini korur. Sınıflar ve veri öznitelikleri aynı — sürükleme, seçim, hızlı ekleme betikleri değişmedi. */
@media (min-width: 761px) {
  .randevu-grid { border-collapse: separate; border-spacing: 0; }
  .randevu-grid thead th { padding: 8px 6px; border-bottom: 2px solid var(--border); background: var(--surface); vertical-align: bottom; }
  .randevu-grid thead th.randevu-gun-bas > a, .randevu-grid thead th.randevu-gun-bas > .randevu-gun-ic { display: grid; justify-items: center; gap: 1px; padding: 7px 4px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); color: var(--text); text-decoration: none; transition: border-color .15s, background .15s; }
  .randevu-grid thead th.randevu-gun-bas > a:hover { border-color: var(--primary); background: var(--primary-soft); }
  .randevu-grid thead th.randevu-gun-bas span { color: var(--muted); font-size: 11px; font-weight: 750; letter-spacing: .05em; text-transform: uppercase; }
  .randevu-grid thead th.randevu-gun-bas strong { font-size: 19px; line-height: 1.1; font-variant-numeric: tabular-nums; }
  .randevu-grid thead th.randevu-gun-bas small { color: var(--primary); font-size: 11px; font-weight: 700; }
  .randevu-grid thead th.randevu-gun-bas.is-bos small { color: var(--muted); font-weight: 500; }
  .randevu-grid thead th.randevu-gun-bas.is-today > a, .randevu-grid thead th.randevu-gun-bas.is-today > .randevu-gun-ic { border-color: var(--primary); background: var(--primary); color: var(--on-primary); }
  .randevu-grid thead th.randevu-gun-bas.is-today span, .randevu-grid thead th.randevu-gun-bas.is-today small { color: var(--on-primary); }
  .randevu-grid thead th.week-grid-time { width: 68px; color: var(--muted); font-size: 11px; letter-spacing: .05em; text-transform: uppercase; }
  .randevu-grid tbody .week-grid-time { width: 68px; padding: 6px 8px 0 4px !important; border: 0; border-top: 1px solid var(--border); background: var(--surface); text-align: right; vertical-align: top; }
  .randevu-grid tbody .week-grid-time strong { display: block; color: var(--muted); font-size: 12.5px; font-variant-numeric: tabular-nums; }
  .randevu-grid tbody .week-grid-time small { display: none; }
  .randevu-grid tbody tr.is-tam-saat .week-grid-time strong { color: var(--text); }
  .randevu-grid tbody tr.is-yarim-saat .week-grid-time strong { font-size: 11px; font-weight: 500; }
  .randevu-grid-saatsiz .week-grid-time small { display: block; }
  .randevu-grid td.randevu-grid-cell { border: 0; border-top: 1px solid var(--border); border-left: 1px solid var(--border); }
  .randevu-grid tr.is-yarim-saat td.randevu-grid-cell, .randevu-grid tr.is-yarim-saat .week-grid-time { border-top-style: dotted; }
  .randevu-grid tbody tr:last-child td, .randevu-grid tbody tr:last-child th { border-bottom: 1px solid var(--border); }
  .randevu-grid td.randevu-grid-cell:last-child { border-right: 1px solid var(--border); }
  html:not([data-takvim]) .randevu-grid-cell { height: 40px; padding: 4px 4px 2px !important; }
  html:not([data-takvim]) .randevu-grid-cell .calendar-entry { margin: 0 0 4px; }
  html:not([data-takvim]) .randevu-grid-cell .calendar-entry > .exam-chip { display: grid; gap: 2px; padding: 7px 9px 7px 10px; border: 0; border-left: 4px solid var(--branch-accent, var(--primary)); border-radius: 10px; font-size: 12px; line-height: 1.35; box-shadow: 0 1px 2px rgba(15, 23, 42, .06); transition: box-shadow .15s, transform .15s; }
  html:not([data-takvim]) .randevu-grid-cell .calendar-entry > .exam-chip:hover { box-shadow: 0 4px 12px rgba(15, 23, 42, .12); transform: translateY(-1px); }
  html:not([data-takvim]) .randevu-grid-cell .appointment-chip-main { display: grid; gap: 1px; }
  html:not([data-takvim]) .randevu-grid-cell .appointment-chip-main > span:not(.randevu-kart-saat) { font-size: 13px; font-weight: 750; line-height: 1.25; }
  html:not([data-takvim]) .randevu-grid-cell .exam-chip .appointment-participants { margin-top: 0; font-size: 12px; font-weight: 600; }
  html:not([data-takvim]) .randevu-grid-cell .exam-chip .appointment-chip-meta { margin-top: 1px; justify-content: flex-start; font-size: 11.5px; }
  .randevu-kart-saat { color: var(--muted); font-size: 11.5px; font-weight: 700; font-variant-numeric: tabular-nums; }
  .randevu-grid .randevu-kart-saat time { color: inherit; font-size: inherit; font-weight: inherit; }
  .randevu-grid .appointment-chip.is-completed .appointment-chip-main > span:not(.randevu-kart-saat) { text-decoration: line-through; }
  .randevu-grid .appointment-chip.is-completed { opacity: .78; }
  /* İşlem düğmeleri: kartın üstüne gelince / klavye odağında çıkar; "tamamlandı" işareti hep görünür (durum bilgisidir). */
  .randevu-grid .calendar-entry:has(.calendar-entry-done) > .exam-chip { padding-right: 9px; }
  .randevu-grid .calendar-entry-tools { top: 4px; right: 4px; }
  .randevu-grid .calendar-entry-tools button { opacity: 0; box-shadow: 0 1px 4px rgba(15, 23, 42, .18); }
  .randevu-grid .calendar-entry:hover .calendar-entry-tools button, .randevu-grid .calendar-entry:focus-within .calendar-entry-tools button,
  .randevu-grid .calendar-entry-tools button.is-on { opacity: 1; }
  .randevu-grid .calendar-entry-tools button.is-on { box-shadow: none; }
}
@media (min-width: 761px) and (hover: none) { .randevu-grid .calendar-entry-tools button { opacity: 1; } .randevu-grid .calendar-entry:has(.calendar-entry-done) > .exam-chip { padding-right: 64px; } }

/* 2026-10-04 (2.128.0): kopyalama basligi, yetki ozeti "bu kisi olarak gor", hatali konu katalog bagi */
.cprog-kopya-baslik { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 12px; margin: 18px 0 8px; }
.cprog-kopya-baslik strong { font-size: 1rem; }
.cprog-kopya-baslik span { color: var(--muted); font-size: .86rem; }
.cprog-kopyala-onay { font-size: .82rem; }
.yetki-ozeti-gor { margin-top: 10px; }
.deneme-konu-bag { display: block; color: var(--muted); font-size: .78rem; }
.deneme-konu-bag.is-bagli { color: var(--success); }

/* OTOMATIK DOLDUR — TELEFON (2026-10-04 kullanici: "bunun telefon menusunu de duzgun yap"). Olculdu (390 px): panel 11.372 px,
   on bes secenek karti aciklamalariyla ~1.700 px tutuyor, plan ekranin cok altinda kaliyordu. Telefonda secenek satirlari
   SIKI ve aciklamasiz; dokunulan (odaktaki) satirin aciklamasi acilir. Eylem cubugu planin ustunde yapisik kalir: uzun plani
   gezerken "Programi Doldur" hep elde. Bilgisayarda hicbir sey degismez. (640 px: T1c son 700 px blogunu olcer.) */
@media (max-width: 640px) {
  .autofill-panel .sablon-ozet.autofill-olcum { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; }
  .autofill-panel .autofill-olcum > * { padding: 8px 9px; }
  .autofill-panel .autofill-olcum strong { font-size: 17px; }
  .autofill-panel .autofill-olcum span, .autofill-panel .autofill-olcum small { font-size: 10.5px; line-height: 1.25; }
  .autofill-secenekler { grid-template-columns: 1fr; gap: 0; }
  .autofill-secenekler > .autofill-secenek { border: 0; border-bottom: 1px solid var(--border); border-radius: 0; padding: 11px 4px; min-height: 44px; align-items: center; background: transparent; }
  .autofill-secenek > input { margin-top: 0; width: 20px; height: 20px; flex: 0 0 20px; }
  .autofill-secenek strong { font-size: 14px; }
  .autofill-secenek small { display: none; }
  .autofill-secenek:focus-within { align-items: flex-start; background: var(--surface-soft); }
  .autofill-secenek:focus-within small { display: block; font-size: 12px; }
  .autofill-yks-modu, .autofill-panel fieldset { border: 1px solid var(--border); border-radius: 12px; padding: 4px 10px 8px; margin: 12px 0 0; }
  .autofill-panel fieldset > legend { font-weight: 700; font-size: 13px; padding: 0 6px; }
  .autofill-panel fieldset .autofill-secenek { border: 0; border-bottom: 1px solid var(--border); border-radius: 0; padding: 10px 2px; background: transparent; }
  .autofill-panel fieldset .autofill-secenek:last-child { border-bottom: 0; }
  .autofill-yuk-kutusu { margin-top: 12px; display: grid; grid-template-columns: 1fr 1fr; gap: 8px 10px; align-items: end; }
  .autofill-yuk-kutusu > strong, .autofill-yuk-kutusu > small, .autofill-yuk-kutusu > hr { grid-column: 1 / -1; }
  .autofill-yuk-kutusu .field { display: flex; margin-right: 0; min-width: 0; }
  .autofill-yuk-kutusu .field select, .autofill-yuk-kutusu .field input { min-width: 0; width: 100%; }
  .autofill-ozet-satiri { position: sticky; top: 6px; z-index: 6; padding: 10px 12px; box-shadow: 0 8px 22px rgba(0, 11, 73, .16); background: var(--surface); }
  .autofill-ozet-satiri p { display: none; }
  .autofill-eylemler { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; width: 100%; align-items: end; }
  .autofill-eylemler .autofill-sure { min-width: 0; }
  .autofill-eylemler .autofill-sure select { width: 100%; }
  .autofill-eylemler > .button, .autofill-eylemler > form > .button, .autofill-eylemler > form { width: 100%; justify-content: center; text-align: center; }
  .autofill-eylemler > form { grid-column: 1 / -1; }
  .autofill-eylemler > form .button { min-height: 44px; font-size: 15px; }
  .autofill-eylemler > a.button-ghost { font-size: 12px; }
  .autofill-onizleme .autofill-cip { padding: 8px 10px; }
  .autofill-onizleme .autofill-secilir { display: grid; grid-template-columns: 22px minmax(0, 1fr); gap: 2px 8px; align-items: start; text-align: left; }
  .autofill-onizleme .autofill-secilir > input[type="checkbox"] { width: 20px; height: 20px; margin: 2px 0 0; }
  .autofill-onizleme .autofill-secilir > .autofill-cip-govde { grid-column: 2; min-width: 0; }
}

/* TELEFONDA GÖREV EKLEME PENCERESİ TAM EKRAN (2026-10-04 kullanıcı: "telefonda görev ekle düzgün çıkmıyor, alt tarafı
   göremiyorum; üstüne sağa bir çarpı koy, kapatılabilsin"). Popover artının yanında açılıyor, yüksekliği 78vh'yi buluyor ve
   alt kısmı alt menünün ARKASINDA kalıyordu (Kaydet düğmesine ulaşılamıyordu). Telefonda konum JS'ten değil buradan:
   pencere ekranı kaplar, başlık + ✕ üstte yapışkan, alanlar tek sütun, Kaydet altta yapışkan. */
.cprog-panel-kapat { flex: none; }
@media (max-width: 640px) {
  .cprog-popover, .cprog-popover.cprog-duzenle-sabit {
    left: 0 !important; top: 0 !important; right: 0; bottom: 0; transform: none; z-index: 1300;
    width: 100vw; max-width: 100vw; height: 100dvh; max-height: none; border: 0; border-radius: 0;
    padding: 0 14px calc(18px + env(safe-area-inset-bottom, 0px)) !important; overscroll-behavior: contain;
  }
  .cprog-popover .cprog-ekle-ozet {
    position: sticky; top: 0; z-index: 3; display: flex; flex-direction: row; flex-wrap: nowrap; align-items: center; justify-content: space-between; gap: 10px; text-align: left;
    margin: 0 -14px; padding: 12px 14px; background: var(--surface); border-bottom: 1px solid var(--border);
  }
  .cprog-popover .cprog-ekle-ozet > div { flex: 1 1 auto; min-width: 0; }
  .cprog-popover .cprog-ekle-ozet h2 { margin: 0; font-size: 16px; }
  .cprog-popover .cprog-ekle-ozet h2::before { content: none; }
  .cprog-popover .cprog-ekle-ozet p { display: none; }
  .cprog-popover .cprog-ekle-ozet .button {
    flex: none; width: 42px; height: 42px; min-height: 42px; padding: 0; border-radius: 999px;
    display: inline-flex; align-items: center; justify-content: center; font-size: 19px; line-height: 1;
    background: var(--surface-soft); border: 1px solid var(--border); color: var(--text);
  }
  .cprog-popover .cprog-ekle-ozet .button > span { display: none; }
  .cprog-popover .form-grid, .cprog-popover .cprog-adim-alanlar { grid-template-columns: minmax(0, 1fr); }
  .cprog-popover .cprog-yayilma-secenekler { grid-template-columns: minmax(0, 1fr); }
  .cprog-popover .cprog-yayilma-ayar { margin-left: 0; }
  .cprog-popover .cprog-yayilma-ikili { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cprog-popover .form-actions {
    position: sticky; bottom: 0; z-index: 2; margin: 12px -14px 0; padding: 10px 14px;
    background: var(--surface); border-top: 1px solid var(--border);
  }
  .cprog-popover .form-actions .button { flex: 1 1 auto; }
}
/* Süre kutusu yalnız "Konudan konuya"da okunur; diğer seçeneklerde gizlenir (2026-10-04, telefonda kafa karıştırıyordu). */
.field[data-yayilma-ayar].is-pasif { display: none; }

/* Envanter istatistiği: tıklanabilir dağılım + seçilen öğrenciler (2026-10-04). */
.ei-dagilim-ad a { color: inherit; text-decoration: underline; text-decoration-color: var(--border); text-underline-offset: 3px; }
.ei-dagilim-ad a:hover, .ei-dagilim-ad a:focus-visible { color: var(--primary); text-decoration-color: currentColor; }
.ei-dagilim li.is-secili .ei-dagilim-ad a { color: var(--primary); text-decoration-color: currentColor; }
.ei-hist .ei-sutun-bag { cursor: pointer; }
.ei-hist .ei-sutun-bag:hover .ei-sutun, .ei-hist .ei-sutun-bag:focus .ei-sutun { opacity: .78; }
.ei-baskin-bag { display: inline-block; margin-top: 4px; font-size: .8rem; font-weight: 600; color: var(--primary); }
.ei-ipucu { margin: -4px 0 14px; font-size: .85rem; }
.ei-secim .overview-section-heading { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; }
.ei-secim .overview-section-heading .button { margin-left: auto; }
.ei-secim-suzgec { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0 0 10px; }
.ei-secim-etiket { font-size: .78rem; font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); min-width: 3.2rem; }
.ei-cip { display: inline-flex; align-items: center; gap: 5px; padding: 4px 10px; border-radius: 999px; border: 1px solid var(--border); background: var(--surface); color: var(--text); font-size: .85rem; text-decoration: none; }
.ei-cip b { font-variant-numeric: tabular-nums; color: var(--muted); }
.ei-cip:hover { border-color: var(--primary); }
.ei-cip.is-active { background: var(--primary); border-color: var(--primary); color: var(--on-primary); }
.ei-cip.is-active b { color: var(--on-primary); }

/* KART KENARINA YAPIŞAN İÇERİK (2026-10-04 kullanıcı: "bazı menülerin içindeki yazılar çok sınırda, hoş durmuyor").
   `.card.table-card` tabloyu kenardan kenara basmak için iç boşluksuzdur; içine tablo DIŞINDA konan blok (kutu, başlık,
   form, liste) kart kenarına yapışıyordu. Sayfalar taranıp (_kenar_olc.js: yazı ya da kutu kabın iç kenarına < 6 px)
   bulunan yerler: Öğrenci 360 görüşme kutuları, katlanır kartların (haftalık hedefler, ödev birikimi) içeriği, öğretmen
   kontrolleri sayaçları, Personel İstatistiği tablo başlıkları, sistem yedekleri formu, ders hakları toplu şeridi ve
   envanter çubuklarındaki vurgulu satır. */
.card.table-card > .gorusme-son-ikili { margin: 14px 20px; }
.card.table-card > .report-metrics { margin: 14px 20px; }
.card.table-card > .istatistik-tablo-baslik { padding-inline: 20px; }
.card.table-card > .compact-filter-form { padding: 12px 20px; }
.card.table-card .hak-toplu-serit { padding-inline: 20px; padding-bottom: 12px; }
.s360-katla > :not(summary):not(.s360-katla-govde):not(.table-wrap):not(.card-heading) { margin-left: 14px; margin-right: 14px; }
.s360-katla > summary + :not(.s360-katla-govde):not(.table-wrap):not(.card-heading) { margin-top: 12px; }
.s360-katla > :last-child:not(summary):not(.s360-katla-govde):not(.table-wrap):not(.card-heading) { margin-bottom: 14px; }
.envanter-cubuklar li.is-baskin { margin-inline: -6px; padding-inline: 6px; border-radius: 6px; }
.card.table-card > .gorusme-veli-zaman { margin-left: 20px; margin-right: 20px; }
/* Kart içindeki katlanır blokta özet 24 px iç boşlukla basılır (premium.css); içerik aynı hizaya oturur. */
body.panel-page main .card.table-card > details.s360-katla > :not(summary):not(.s360-katla-govde):not(.table-wrap):not(.card-heading) { margin-left: 24px; margin-right: 24px; }

/* ÖÖK sözleşme önizlemesi PDF'in 1. sayfası gibi: anne/baba ve ilan/öğrenci ücretleri yan yana (2026-10-04). */
.meb-ook-ikili { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 14px; }
@media (max-width: 700px) { .meb-ook-ikili { grid-template-columns: minmax(0, 1fr); } }

/* DENEME SONUCU KARŞILAŞTIRMA + AÇIKLAMA ŞERİDİ + ÖĞRENCİ ENVANTER SONUCU (2026-10-05, app/deneme-aciklama.php).
   SVG viewBox 560 birim: yazı boyutu SVG biriminde 15 — telefonda (~340 px) etkin ~9 px'in altına düşmesin diye. */
.dk-ozet { display: flex; flex-wrap: wrap; gap: 8px 16px; align-items: baseline; margin: 12px 0 4px; color: var(--muted); }
.dk-ozet b { color: var(--text); font-variant-numeric: tabular-nums; }
.dk-sira { display: inline-flex; gap: 6px; align-items: baseline; padding: 4px 10px; border-radius: 999px; background: var(--primary-soft); color: var(--text); }
.dk-sira b { font-size: 18px; }
.dk-grafik-kap { overflow-x: auto; margin: 8px 0 12px; }
.dk-grafik { display: block; width: 100%; max-width: 640px; height: auto; }
.dk-grafik .dk-ad { font-size: 15px; fill: var(--text); }
.dk-grafik .dk-iz { fill: var(--surface-soft); stroke: var(--border); }
.dk-grafik .dk-ben { fill: var(--primary); }
.dk-grafik .dk-ort { fill: var(--muted); opacity: .55; }
.dk-grafik .dk-deger { font-size: 14px; font-weight: 700; fill: var(--text); font-variant-numeric: tabular-nums; }
.dk-grafik .dk-deger-ort { font-size: 12px; font-weight: 400; fill: var(--muted); }
.dk-grafik .dk-lejant { font-size: 13px; fill: var(--muted); }
.karne-sayi.dk-sira-kart strong { color: var(--primary); }
.karne-siralama { display: block; margin-top: 4px; font-size: 13px; }
.karne-siralama small { display: block; color: var(--muted); }
.karne-denemeler { margin-top: 12px; }
.karne-denemeler > summary { cursor: pointer; font-weight: 600; padding: 6px 0; }
.karne-denemeler:not([open]) > *:not(summary) { display: none; }
.karne-deneme-liste { list-style: none; margin: 4px 0 0; padding: 0; display: grid; gap: 4px; }
.karne-deneme-liste a { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 12px; padding: 8px 10px; border: 1px solid var(--border); border-radius: 10px; text-decoration: none; color: var(--text); }
.karne-deneme-liste a:hover, .karne-deneme-liste a:focus-visible { border-color: var(--primary); }
.karne-deneme-liste small { color: var(--muted); font-variant-numeric: tabular-nums; }
.deneme-aciklama-serit { display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; justify-content: space-between; padding: 12px 16px; }
.deneme-aciklama-durum { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: center; }
.deneme-aciklama-durum small { color: var(--muted); }
.deneme-aciklama-dugmeler { display: flex; flex-wrap: wrap; gap: 8px; }
.deneme-aciklama-dugmeler form { display: contents; }
.envanter-ogr-ozet { font-size: 16px; margin: 8px 0 12px; }
.envanter-ogr-grafik { max-width: 460px; margin: 0 auto 12px; }
.envanter-ogr-grafik svg { width: 100%; height: auto; }
.envanter-ogr-boyutlar { list-style: none; margin: 0 0 12px; padding: 0; display: grid; gap: 8px; }
.envanter-ogr-boyutlar li { display: grid; grid-template-columns: minmax(0, 12rem) minmax(0, 1fr) 5.5rem; gap: 10px; align-items: center; }
.envanter-ogr-boyutlar progress { width: 100%; height: 10px; accent-color: var(--primary); }
.envanter-ogr-boyutlar li.is-yuksek progress, .envanter-ogr-boyutlar li.is-baskin progress { accent-color: var(--primary-alt); }
.envanter-ogr-boyutlar small { color: var(--muted); text-align: right; font-variant-numeric: tabular-nums; }
.envanter-ogr-yorum h2 { font-size: 17px; margin: 12px 0 6px; }
@media (max-width: 640px) { .envanter-ogr-boyutlar li { grid-template-columns: minmax(0, 1fr) 4.5rem; } .envanter-ogr-boyutlar progress { grid-column: 1 / -1; grid-row: 2; } }

/* ÖĞRENCİ FORMU: ANNE / BABA / DİĞER (2026-10-05). İki ebeveyn bloğu yan yana; dar ekranda alt alta. */
.veli-ebeveynler { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 12px; margin: 8px 0 12px; }
.veli-ebeveyn .form-grid { grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.veli-blok .choice-chips { margin-top: 4px; }

/* VELİ GİRİŞİ (2026-10-05): personel ekranında hesap açma düğmeleri, panelde çocuk seçici, ayar kartında veli satırları. */
.veli-hesap-ac { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0; }
.veli-hesap-ac form { display: contents; }
.veli-bagla > summary { cursor: pointer; font-weight: 600; padding: 4px 0; }
.veli-bagla:not([open]) > *:not(summary) { display: none; }
.veli-cocuk-sec { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.veli-cocuk-sec .hero-chip { cursor: pointer; border: 0; font: inherit; }
.veli-ayar-satir { display: flex; flex-wrap: wrap; gap: 6px 12px; align-items: center; margin: 6px 0; }
.veli-ayar-satir > strong { min-width: 14rem; }

/* ONAY TABLOSU — ARKA ARKAYA DERS GRUBU (2026-10-05): aynı gün aynı dersin satırları başlıkla birleşir. */
.onay-tablo tr.onay-arka-baslik td { background: var(--primary-soft, rgba(80, 110, 230, .08)); padding-block: 6px; }
.onay-tablo tr.onay-arka-baslik td { display: table-cell; }
.onay-arka-etiket { font-weight: 600; margin-right: 10px; }
.onay-tablo tr.onay-arka-satir td:first-child { border-left: 3px solid var(--primary); }
@media (max-width: 900px) {
  .onay-tablo tr.onay-arka-baslik td { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
}
.ardisik-onizleme { display: block; margin-top: 4px; color: var(--warning, #8a5a00); font-weight: 600; }

/* HAFTALIK MİNİ DENEME + SORU KUTUSU + VELİ ÖZETİ (2026-10-05) */
.mini-konu-liste, .mini-soru-liste, .veli-ozet-liste, .koca-soru-liste { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.mini-konu-liste li, .mini-soru-liste li { display: flex; flex-wrap: wrap; gap: 6px 10px; align-items: baseline; }
.mini-konu-liste small, .mini-soru-liste small { color: var(--muted); }
.mini-tur-eksik { background: var(--danger-soft); color: var(--danger); }
.mini-tur-pekistir { background: var(--success-soft); color: var(--success); }
.mini-tur-hatirlat { background: var(--primary-soft); color: var(--primary); }
.mini-soru-360 .overview-section-heading + .overview-section-heading { margin-top: 14px; }
.ogrenci-mini-satir { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; justify-content: space-between; }
.ogrenci-mini-satir small { display: block; color: var(--muted); }
.ogrenci-mini-konular { margin-top: 10px; }
.ogrenci-mini-konular:not([open]) > *:not(summary) { display: none; }
.veli-ozet-liste li { display: grid; grid-template-columns: 1.6em 1fr; gap: 6px; }
.veli-ozet-metin { width: 100%; font: inherit; resize: vertical; margin-bottom: 8px; }
.soru-kutusu-liste { display: grid; gap: 14px; }
.soru-kart.is-bekliyor { border-left: 4px solid var(--warning, var(--primary)); }
.soru-kart-bas { display: flex; flex-wrap: wrap; gap: 8px; justify-content: space-between; align-items: flex-start; }
.soru-kart-bas small { display: block; color: var(--muted); }
.soru-metin { white-space: normal; overflow-wrap: anywhere; }
.soru-ders { margin: 6px 0 0; font-weight: 600; }
.soru-foto img { display: block; max-width: min(100%, 420px); max-height: 420px; border-radius: 8px; border: 1px solid var(--border); margin: 8px 0; }
.soru-cevap { margin-top: 10px; padding: 10px 12px; border-radius: 8px; background: var(--surface-2, var(--primary-soft)); }
.soru-cevap p { margin: 6px 0 0; overflow-wrap: anywhere; }
.soru-cevap-form { display: grid; gap: 10px; margin-top: 10px; }
.koca-soru-liste li { padding: 12px; border: 1px solid var(--border); border-radius: 10px; }
.koca-soru-liste li.is-yeni { border-color: var(--success); }
.koca-soru-ust { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.koca-soru-ust small { color: var(--muted); }
.ogrenci-koca-serit.is-yeni .ogrenci-anket-serit-rozet { background: var(--success-soft); color: var(--success); }

/* ONAY TABLOSU — KUTU + AÇILIR NOT (2026-10-05) */
.onay-tablo .onay-tik-sutun { width: 36px; text-align: center; }
.onay-tablo .onay-tik-sutun input { width: 20px; height: 20px; }
.onay-tik-not { color: var(--muted); }

/* SÖZLEŞME FORMU TELEFONDA (2026-10-06 kullanıcı: "sözleşme oluşturma telefonda kayıyor, metinler felan"). 390 px'te
   ölçüldü: seçim şeridindeki üç kutu 50 px'e sıkışıp metni kesiyordu; anne/baba kutuları minmax(300px) yüzünden sağdan
   taşıyordu (300/276); ücret tablosunun alt satırları (Diğer kalemler, toplam, indirim, ödenecek) kart kipinde boş kartlara
   dönüşüyor ve tabloyu 434 px'e açıp "Yatay kaydırın" ipucu basıyordu. Yalnız görünüm — alan adları ve kayıt ucu aynı. */
.sozlesme-ebeveyn { grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr)); }
@media (max-width: 700px) {
  .heading-picker.sozlesme-yol > select,
  .heading-picker.sozlesme-yol > .button,
  .heading-picker.sozlesme-yol > fieldset { flex: 1 1 100%; width: 100%; min-width: 0; }
  .heading-picker.sozlesme-yol > select { min-height: 44px; }
  .sozlesme-belge-bas h2 { font-size: 15px; letter-spacing: .03em; }
  .sozlesme-belge .cprog-adim, .sozlesme-belge .cprog-adim:first-of-type { padding: 0 10px 8px; }
  .sozlesme-belge .cprog-adim-baslik { margin: 0 -10px 8px; padding: 6px 10px; }
  .sozlesme-belge .field input:not([type="checkbox"]):not([type="radio"]), .sozlesme-belge .field select { min-height: 40px; font-size: 16px; }
  .sozlesme-belge .sozlesme-bilesen-form { min-width: 0; margin-inline: 0; padding-inline: 10px; }
}
@media (max-width: 900px) {
  /* Ücret kalemleri: her kalem kompakt bir kart — ad üstte, iki tutar yan yana. */
  .sozlesme-kalem-tablo tbody { padding: 8px; }
  .sozlesme-kalem-tablo tbody tr { display: grid; grid-template-columns: 1fr 1fr; gap: 4px 10px; padding: 10px 12px; }
  .sozlesme-kalem-tablo tbody tr[hidden] { display: none; }
  .sozlesme-kalem-tablo tbody th[scope="row"] { display: block; grid-column: 1 / -1; padding: 0 0 4px; border: 0; }
  .sozlesme-kalem-tablo tbody td { display: grid; gap: 3px; width: auto; padding: 0; border: 0; }
  .sozlesme-kalem-tablo tbody td::before { margin: 0; font-size: 10.5px; }
  .sozlesme-kalem-tablo tbody td > * { grid-column: 1; }
  .sozlesme-kalem-tablo tbody td input { min-height: 40px; font-size: 16px; }
  /* Alt satırlar kart değil, özet satırı: ad solda, tutar sağda; boş hücre basılmaz. */
  .sozlesme-kalem-tablo tfoot { display: block; padding: 4px 8px 8px; }
  .sozlesme-kalem-tablo tfoot tr { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 6px 10px; margin: 0; padding: 8px 4px; border: 0; border-top: 1px solid var(--border); border-radius: 0; background: none; box-shadow: none; }
  .sozlesme-kalem-tablo tfoot th, .sozlesme-kalem-tablo tfoot td { display: block; width: auto; padding: 0; border: 0; background: none; }
  .sozlesme-kalem-tablo tfoot td::before { content: none; }
  .sozlesme-kalem-tablo tfoot td:empty { display: none; }
  .sozlesme-kalem-tablo tfoot td.numeric { text-align: right !important; font-variant-numeric: tabular-nums; }
  .sozlesme-kalem-tablo tfoot tr[data-kalem-ek-satir] td { display: grid; grid-template-columns: minmax(0, 1fr); flex: 1 1 100%; gap: 4px; }
  .sozlesme-kalem-tablo tfoot tr[data-kalem-ek-satir] td > * { grid-column: 1; }
  .sozlesme-kalem-tablo tfoot tr[data-kalem-ek-satir] .button { width: 100%; white-space: normal; }
  .sozlesme-kalem-tablo tfoot tr[data-kalem-ek-satir] small { white-space: normal; }
}
/* Özel ders hakları tablosu telefonda 720 px taban genişliğe açılıp yatay kayıyordu: her ders bir kart — ders adı üstte,
   hak ve birim ücret yan yana, husus altta. Etiketler CSS'ten (JS'in eklediği satırlar da aynı kartı alır). */
@media (max-width: 700px) {
  .table-wrap .data-table.sozlesme-ders-tablo { min-width: 0 !important; }
  .sozlesme-ders-tablo, .sozlesme-ders-tablo tbody, .sozlesme-ders-tablo tfoot { display: block; width: 100%; }
  .sozlesme-ders-tablo thead { display: none; }
  .sozlesme-ders-tablo tbody tr { position: relative; display: grid; grid-template-columns: 1fr 1fr; gap: 8px 10px; margin: 0 0 8px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
  .sozlesme-ders-tablo tbody td { display: grid; gap: 3px; min-width: 0; padding: 0; border: 0; }
  .sozlesme-ders-tablo tbody td:nth-child(1), .sozlesme-ders-tablo tbody td:nth-child(4) { grid-column: 1 / -1; }
  .sozlesme-ders-tablo tbody td:nth-child(1) { padding-right: 40px; }
  .sozlesme-ders-tablo tbody td:nth-child(-n+4)::before { color: var(--muted); font-size: 11px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; }
  .sozlesme-ders-tablo tbody td:nth-child(1)::before { content: "Ders"; }
  .sozlesme-ders-tablo tbody td:nth-child(2)::before { content: "Ders hakkı (saat)"; }
  .sozlesme-ders-tablo tbody td:nth-child(3)::before { content: "Birim ücret (₺)"; }
  .sozlesme-ders-tablo tbody td:nth-child(4)::before { content: "Derse özel husus"; }
  .sozlesme-ders-tablo tbody td input { min-height: 40px; font-size: 16px; }
  .sozlesme-ders-tablo tbody td.actions-cell { position: absolute; top: 6px; right: 6px; display: block; }
  .sozlesme-ders-tablo tfoot tr { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 4px 12px; padding: 8px 4px; border-top: 1px solid var(--border); }
  .sozlesme-ders-tablo tfoot th { padding: 0; border: 0; background: none; }
  .sozlesme-ders-tablo tbody td { align-content: start; }
  .sozlesme-ders-tablo tfoot th:empty { display: none; }
}

/* KARANLIK TEMA TARAMASI (2026-10-06 kullanıcı: "karanlık temada bazı yerler okunmuyor, baştan sona kontrol et").
   78 ekran gerçek koyu kipte (localStorage.egTheme) kontrast sondasıyla ölçüldü; sorunların hepsi aynı kalıptı: açık temaya
   SABİT HEX yazılmış zemin, koyu temada açık kalırken yazı token'dan açık renge döndü (1,0–1,9:1). Burada her birine koyu
   karşılık verildi. Vurgu paletlerinde mavi/mor/gül/lacivert koyu tonları yüzey üstünde 3,6–3,8'de kalıyordu → AA'yı geçen ton. */
:root[data-theme="dark"] .row-attention { background: #2a1d22; }
:root[data-theme="dark"] .row-attention .danger-text { color: #f0a094 !important; }
:root[data-theme="dark"] .form-actions { background: color-mix(in srgb, var(--surface) 94%, transparent); }
:root[data-theme="dark"] .inbox-filter-chip:not(.is-active) strong,
:root[data-theme="dark"] code,
:root[data-theme="dark"] .field input:disabled { background: var(--surface-strong); }
:root[data-theme="dark"] .outcome-progress,
:root[data-theme="dark"] .attendance-rate progress { background: var(--surface-strong); }
:root[data-theme="dark"] .outcome-progress::-webkit-progress-bar,
:root[data-theme="dark"] .attendance-rate progress::-webkit-progress-bar { background: var(--surface-strong); }
:root[data-theme="dark"] .status-warning,
:root[data-theme="dark"] .status-assigned,
:root[data-theme="dark"] .status-paused,
:root[data-theme="dark"] .status-no_show { background: #33290f; color: #e9b44c; }
:root[data-theme="dark"] .status-completed,
:root[data-theme="dark"] .status-info { background: #1d2747; color: #9fb4ee; }

/* ONAY TABLOSU — SATIR SATIR (2026-10-06 kullanıcı: "güzel gözükmüyor; satır satır yazalım, açarsa aşağı insin çıksın; arka arkaya
   dersleri bir tasarımda birleştir; pc versiyonu da anlaşılır olsun"). Masaüstü: altı dar sütun, konu/rapor alanları satırın
   ALTINDAKİ ikinci satırda (+ Not açar). Telefon: her ders bir kart satırı (kutu · tarih/saat · ders · kalan hak · ok), dokununca
   sonuç + Not/Yoksay + not alanları açılır. Arka arkaya grup: tek başlık, dersler altında iç içe; telefonda başlık katlı doğar.
   Katlama yalnız `table.onay-js` (betik) varken — betiksiz her şey açık durur. */
.onay-tablo thead th { font-size: 11.5px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.onay-tablo td { vertical-align: middle; }
.onay-tablo .onay-tarih small, .onay-tablo .onay-ders-hucre small { color: var(--muted); }
.onay-tablo .onay-ac { display: none; }
.onay-tablo .onay-islem { white-space: nowrap; text-align: right; }
.onay-tablo .onay-islem .button { margin: 0 0 0 6px; min-height: 30px; padding: 2px 10px; font-size: 12px; }
.onay-tablo .onay-yoksay { margin-top: 0; }
.onay-tablo .onay-not-ac { color: var(--primary); border-color: color-mix(in srgb, var(--primary) 35%, var(--border)); }
.onay-tablo .onay-not-ac[aria-expanded="true"] { background: var(--primary-soft, rgba(80, 110, 230, .1)); }
.onay-tablo tr.onay-not-satir td { padding-top: 0; padding-bottom: 12px; background: var(--surface-soft); }
.onay-tablo tr.onay-ders.is-acik td { border-bottom: 0; background: var(--surface-soft); }
.onay-tablo.onay-js tr.onay-ders:not(.is-acik) + tr.onay-not-satir { display: none; }
.onay-not { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 2fr) minmax(0, 1fr); gap: 10px; padding: 2px 0 0; }
.onay-not label { display: grid; gap: 4px; margin: 0; font-size: 12px; font-weight: 600; color: var(--muted); }
.onay-not label span small { font-weight: 400; margin-left: 4px; }
/* Arka arkaya grup başlığı */
.onay-tablo tr.onay-arka-baslik td { display: table-cell; padding: 8px 12px 8px 24px; background: var(--primary-soft, rgba(80, 110, 230, .08)); border-left: 3px solid var(--primary); }
.onay-arka-ic { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.onay-arka-ic .onay-arka-etiket { flex: 1 1 260px; margin: 0; }
.onay-arka-etiket small { display: block; font-weight: 500; font-size: 12px; color: var(--muted); }
@media (min-width: 901px) {
  .onay-tablo th:nth-child(1) { width: 44px; } .onay-tablo th:nth-child(2) { width: 150px; } .onay-tablo th:nth-child(3) { width: auto; }
  .onay-tablo th:nth-child(4) { width: 90px; } .onay-tablo th:nth-child(5) { width: 220px; } .onay-tablo th:nth-child(6) { width: 180px; }
}
@media (max-width: 900px) {
  .onay-tablo tbody { padding: 8px 10px 2px; }
  .onay-tablo tr.onay-ders { position: relative; display: grid; grid-template-columns: 26px minmax(0, 1fr) auto;
    grid-template-areas: "tik tarih hak" "tik ders hak" "sonuc sonuc sonuc" "islem islem islem"; gap: 2px 10px;
    padding: 10px 40px 10px 12px; margin: 0 0 8px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); box-shadow: none; }
  /* Zebra (`.data-table tbody tr:nth-child(even) td`, 0,2,2) ve kart iç boşluğu (`.onay-tablo-kart .onay-tablo td:first-child`)
     telefon kartında geçersiz — ölçüldü: üye satırların hücreleri gri kutu, kutu 24 px kaymış. */
  .onay-tablo tr.onay-ders td, .onay-tablo-kart .onay-tablo tr.onay-ders td, .onay-tablo-kart .onay-tablo tr.onay-not-satir td { display: block; width: auto; min-width: 0; padding: 0; border: 0; background: transparent; }
  .onay-tablo tr.onay-ders .onay-tik-sutun { width: auto; }
  .onay-tablo tr.onay-ders td::before { display: none; }
  .onay-tablo tr.onay-ders td > * { grid-column: auto; }
  .onay-tablo tr.onay-ders .onay-tik-sutun { grid-area: tik; align-self: start; padding-top: 1px; }
  .onay-tablo tr.onay-ders .onay-tarih { grid-area: tarih; }
  .onay-tablo .onay-tarih strong { font-size: 14px; }
  .onay-tablo .onay-tarih small { display: inline; margin-left: 6px; font-size: 12.5px; }
  .onay-tablo .onay-tarih .approval-age { display: inline-flex; margin-left: 6px; }
  .onay-tablo tr.onay-ders .onay-ders-hucre { grid-area: ders; }
  .onay-tablo .onay-ders-hucre strong { font-size: 14px; }
  .onay-tablo .onay-ders-hucre small { display: block; font-size: 12.5px; }
  .onay-tablo tr.onay-ders .onay-hak { grid-area: hak; align-self: start; text-align: right !important; }
  .onay-tablo .onay-hak b { font-size: 17px; }
  .onay-tablo .onay-hak b::after { content: " hak"; font-size: 11px; font-weight: 600; color: var(--muted); }
  .onay-tablo tr.onay-ders .onay-sonuc { grid-area: sonuc; margin-top: 8px; padding-top: 10px; border-top: 1px solid var(--border); }
  .onay-tablo tr.onay-ders .onay-islem { grid-area: islem; display: flex; justify-content: flex-end; gap: 8px; margin-top: 8px; white-space: normal; }
  .onay-tablo .onay-islem .button { margin: 0; min-height: 38px; flex: 1 1 0; }
  .onay-tablo .onay-ac { display: block; position: absolute; right: 6px; top: 6px; width: 34px; height: 34px; padding: 0; border: 0; background: transparent; cursor: pointer; }
  .onay-tablo .onay-ac::before { content: ""; position: absolute; left: 12px; top: 10px; width: 9px; height: 9px; border-right: 2px solid var(--muted); border-bottom: 2px solid var(--muted); transform: rotate(45deg); transition: transform .15s; }
  .onay-tablo tr.is-acik > td .onay-ac::before, .onay-tablo tr.is-acik .onay-arka-ic > .onay-ac::before { top: 14px; transform: rotate(225deg); }
  .onay-tablo.onay-js tr.onay-ders:not(.is-acik) .onay-sonuc, .onay-tablo.onay-js tr.onay-ders:not(.is-acik) .onay-islem { display: none; }
  .onay-tablo.onay-js tr.onay-ders.is-secili:not(.is-acik)::after { content: attr(data-onay-ozet); grid-column: 2 / -1; font-size: 12px; font-weight: 700; color: var(--primary); }
  .onay-tablo tr.onay-ders.is-acik { border-radius: 12px 12px 0 0; margin-bottom: 0; }
  .onay-tablo tr.onay-not-satir { display: block; margin: 0 0 8px; padding: 0 12px 10px; border: 1px solid var(--border); border-top: 0; border-radius: 0 0 12px 12px; background: var(--surface); }
  .onay-tablo tr.onay-not-satir td { display: block; padding: 0; border: 0; background: transparent; }
  .onay-tablo tr.onay-not-satir td::before { display: none; }
  .onay-not { grid-template-columns: minmax(0, 1fr); }
  /* Grup: başlık kart, dersler iç içe */
  .onay-tablo tr.onay-arka-baslik { display: block; position: relative; margin: 0 0 8px; border: 1px solid color-mix(in srgb, var(--primary) 35%, var(--border)); border-radius: 12px; }
  .onay-tablo tr.onay-arka-baslik td { display: block; padding: 10px 40px 10px 12px; border-left: 0; border-radius: 12px; }
  .onay-tablo tr.onay-arka-baslik.is-acik { margin-bottom: 0; border-radius: 12px 12px 0 0; }
  .onay-tablo tr.onay-arka-baslik.is-acik td { border-radius: 12px 12px 0 0; }
  .onay-arka-ic { gap: 8px; }
  .onay-arka-ic .onay-arka-etiket { flex-basis: 100%; }
  .onay-arka-ic .button { flex: 1 1 100%; margin: 0; min-height: 42px; }
  .onay-tablo.onay-js tr.onay-arka-baslik:not(.is-acik) .button { display: none; }
  .onay-tablo.onay-js tr[data-onay-grup-uye]:not(.is-gorunur) { display: none; }
  .onay-tablo tr.onay-arka-satir { margin-left: 10px; border-left: 3px solid var(--primary); }
  .onay-tablo tr.onay-arka-satir td:first-child { border-left: 0; }
  .onay-tablo tr.onay-ders.onay-arka-satir { border-radius: 0 12px 12px 0; }
  .onay-tablo tr.onay-ders.onay-arka-satir.is-acik { border-radius: 0 12px 0 0; }
  .onay-tablo tr.onay-not-satir.onay-arka-satir { border-radius: 0 0 12px 0; }
}
.onay-arka-ic .button-ghost { border: 1px solid color-mix(in srgb, var(--primary) 35%, var(--border)); color: var(--primary); }

/* İMZALI KOPYA YÜKLEME (2026-10-06): imza-yukle.js iki düğme basar (📷 Fotoğraf çek · 📎 Dosya seç); asıl dosya kutusu görsel olarak
   gizlenir ama formda durur (required + form verisi). Betik yoksa kutu ve "Yükle" görünür. */
.sozlesme-imza-form, .os-imza-form { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.imza-dugmeler { display: flex; flex-wrap: wrap; gap: 6px; }
.imza-dugmeler .button { margin: 0; }
.imza-gizli { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; opacity: 0; }
.imza-not, .imza-durum { flex-basis: 100%; color: var(--muted); font-size: 11.5px; }
.imza-durum:empty { display: none; }

/* SÖZLEŞME OLUŞTUR SEÇİMİ (2026-10-06 kullanıcı: "bu kısmın tasarımını düzelt, eli yüzü düzgün olsun"): etiketli alanlar, tek panel.
   Izgara içerikten akar — dar kartta / telefonda alanlar alt alta iner, yana taşma olmaz. Bileşen kutusu (birleşik paket) tam satır. */
.sozlesme-yol-izgara { flex: 1 0 100%; display: flex; flex-wrap: wrap; gap: 12px 14px; align-items: flex-end;
  margin: 6px 0 12px; padding: 14px 16px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface-soft); }
.sozlesme-yol-alan { display: grid; gap: 6px; margin: 0; min-width: 0; flex: 1 1 200px; }
.sozlesme-yol-alan[for="sz-kurum"] { flex: 1.7 1 320px; }
.sozlesme-yol-alan > span { font-size: 11.5px; font-weight: 800; letter-spacing: .05em; text-transform: uppercase; color: var(--muted); }
.sozlesme-yol-alan > span small { margin-left: 4px; font-weight: 600; letter-spacing: 0; text-transform: none; }
.sozlesme-yol-alan select { width: 100%; min-height: 44px; padding: 8px 12px; border: 1px solid var(--border); border-radius: 10px;
  background-color: var(--surface); color: var(--text); font: inherit; font-size: 14.5px; }
.sozlesme-yol-alan select:focus { outline: 2px solid var(--primary); outline-offset: 1px; border-color: var(--primary); }
.sozlesme-yol-eylem { display: flex; flex-wrap: nowrap; gap: 8px; align-items: center; order: 6; flex: 0 0 auto; }
.sozlesme-yol-eylem .button { margin: 0; min-height: 44px; }
.sozlesme-yol-izgara > .sozlesme-bilesen-secim { flex: 1 0 100%; order: 5; background: var(--surface); }
@media (max-width: 700px) {
  .sozlesme-yol-izgara { padding: 12px; }
  .sozlesme-yol-eylem { flex: 1 1 100%; flex-wrap: wrap; }
  .sozlesme-yol-eylem .button { flex: 1 1 100%; }
}

/* iOS SAFARİ: KART DÜZENİNDE KAYDIRMA KABI KAPALI, AD BAĞLANTISI BÜYÜK (2026-10-07 kullanıcı: "Apple telefonda öğrenci listesi
   sağa sola oynuyor, öğrenci ismine basamıyor"). Chrome emülasyonunda taşma 0 ve bağlantı dokunulabilir ölçüldü; iOS'a özgü iki
   kaynak kaldı: (1) `.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch }` kart düzeninde de açık kalıyor — iOS bunu
   dokunmatik kaydırma alanı sayar, içerik sığsa da yana esnetir ve kaydırma sırasında gelen ilk dokunuşu yutar; kart düzeninde
   yatay kaydırmaya gerek yok. (2) Ad bağlantısı satır içi 20 px'lik metin — başparmakla kaçırılıyor. Sayfa düzeyinde yatay
   esneme de kapatılır (overscroll-behavior-x). */
@media (max-width: 900px) {
  .table-wrap:has(> .responsive-card-table), .table-wrap:has(> .student-table) { overflow: visible; -webkit-overflow-scrolling: auto; touch-action: pan-y pinch-zoom; }
  .responsive-card-table td.liste-sira + td > a, .student-table td:first-child > a.student-name-link {
    display: block; padding: 6px 0; min-height: 44px; font-size: 16px; line-height: 1.3; -webkit-tap-highlight-color: rgba(80, 110, 230, .18); }
  .responsive-card-table td.liste-sira + td > a strong, .student-table td:first-child > a.student-name-link strong { display: block; }
}
@media (max-width: 900px) {
  /* İşlem şeridi telefonda alt alta, her öğe tam genişlik; "Hesabına Geç" (ghost) çıplak metin gibi durmasın. */
  .responsive-card-table .table-actions.ogr-islem { flex-direction: column; align-items: stretch; gap: 8px; }
  .responsive-card-table .table-actions.ogr-islem .button, .responsive-card-table .table-actions.ogr-islem .hizli-parola-kapali,
  .responsive-card-table .table-actions.ogr-islem .hizli-parola > summary { flex: 0 0 auto; width: 100%; justify-content: center; text-align: center; min-height: 42px; }
  .responsive-card-table .table-actions.ogr-islem > * { flex: 0 0 auto; }
  .responsive-card-table .table-actions.ogr-islem .button-ghost { border: 1px solid var(--border); }
}

/* ======================================================================
   PANO FOTOĞRAF GALERİSİ (2026-10-07 kullanıcı: "Bugün şeridinin altına sağa sola kayan animasyonlu ufak fotoğraf
   kareleri"). Kaydırma kabı CSS'tedir (overflow-x: auto + scroll-snap); galeri.js yalnız akışı ve dialog'u ekler.
   Kare 180×180 masaüstü / 140 telefon, açıklama kare altında 12 px. Renkler token'dan (koyu tema kendiliğinden).
   ====================================================================== */
.galeri-panel { padding: 14px 16px 12px; }
.galeri-panel-baslik { margin-bottom: 8px; }
.galeri-panel-baslik h2 { display: flex; align-items: center; gap: 8px; }
.galeri-panel-eylem { display: flex; gap: 8px; flex-wrap: wrap; }
.galeri-serit { position: relative; }
.galeri-raylar {
  display: flex;
  gap: 12px;
  margin: 0;
  padding: 4px 2px 6px;
  list-style: none;
  overflow-x: auto;
  scroll-snap-type: x proximity;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.galeri-raylar::-webkit-scrollbar { display: none; }
.galeri-raylar:focus-visible { outline: 2px solid var(--primary); outline-offset: 3px; border-radius: 10px; }
.galeri-kare {
  flex: 0 0 180px;
  width: 180px;
  scroll-snap-align: start;
  margin: 0;
}
.galeri-kare-link {
  display: block;
  width: 100%;
  aspect-ratio: 1 / 1;
  border-radius: 14px;
  overflow: hidden;
  background: var(--surface-soft);
  border: 1px solid var(--border);
  box-shadow: 0 8px 22px -18px rgba(9, 20, 48, .55);
  transition: transform .25s ease, box-shadow .25s ease;
}
.galeri-kare-link:hover,
.galeri-kare-link:focus-visible { transform: translateY(-2px); box-shadow: 0 14px 28px -18px rgba(9, 20, 48, .6); outline: none; }
.galeri-kare-link:focus-visible { border-color: var(--primary); }
.galeri-kare-link img { display: block; width: 100%; height: 100%; object-fit: cover; }
.galeri-aciklama {
  margin: 6px 2px 0;
  font-size: 12px;
  line-height: 1.35;
  color: var(--muted);
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.galeri-ok {
  position: absolute;
  top: 90px;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  padding: 0;
  border: 1px solid var(--border);
  border-radius: 50%;
  background: var(--surface);
  color: var(--text);
  box-shadow: 0 6px 16px -10px rgba(9, 20, 48, .6);
  cursor: pointer;
  opacity: 0;
  transform: translateY(-50%);
  transition: opacity .2s ease, background .2s ease, transform .2s ease;
}
.galeri-ok-sol { left: -6px; }
.galeri-ok-sag { right: -6px; }
.galeri-serit:hover .galeri-ok,
.galeri-serit:focus-within .galeri-ok { opacity: 1; }
.galeri-ok:hover { background: var(--surface-soft); transform: translateY(-50%) scale(1.06); }
.galeri-ok:focus-visible { opacity: 1; outline: 2px solid var(--primary); outline-offset: 2px; }
@media (pointer: coarse) { .galeri-ok { opacity: 1; } }   /* dokunmatikte üstüne gelme yok: oklar hep görünür */
@media (prefers-reduced-motion: reduce) {
  .galeri-raylar { scroll-behavior: auto; }
  .galeri-kare-link, .galeri-ok { transition: none; }
}
/* BÜYÜK GÖRÜNÜM */
.galeri-dialog {
  padding: 0;
  border: 0;
  border-radius: 16px;
  background: var(--surface);
  color: var(--text);
  max-width: min(96vw, 1000px);
  max-height: 94vh;
  box-shadow: 0 30px 80px -30px rgba(0, 0, 0, .7);
}
.galeri-dialog::backdrop { background: rgba(8, 13, 30, .72); backdrop-filter: blur(2px); }
.galeri-dialog-resim { display: block; max-width: 96vw; max-height: 80vh; width: auto; height: auto; margin: 0 auto; background: #000; }
.galeri-dialog-metin { margin: 0; padding: 10px 56px 12px 16px; font-size: 14px; color: var(--muted); }
.galeri-dialog-metin:empty { display: none; }
.galeri-dialog-kapat {
  position: absolute;
  top: 8px;
  right: 8px;
  width: 36px;
  height: 36px;
  border: 0;
  border-radius: 50%;
  background: rgba(8, 13, 30, .6);
  color: #fff;
  font-size: 22px;
  line-height: 1;
  cursor: pointer;
}
.galeri-dialog-kapat:hover { background: rgba(8, 13, 30, .85); }
/* YÜKLEME FORMU (galeri.php) */
.galeri-form { display: grid; gap: 12px; max-width: 640px; }
.galeri-gizli { position: absolute; width: 1px; height: 1px; opacity: 0; overflow: hidden; pointer-events: none; }   /* required doğrulaması kalsın, kutu görünmesin */
.galeri-dugmeler { display: flex; gap: 8px; flex-wrap: wrap; }
.galeri-onizleme {
  width: 220px;
  height: 220px;
  border-radius: 14px;
  overflow: hidden;
  border: 1px solid var(--border);
  background: var(--surface-soft);
}
.galeri-onizleme img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: 50% 50%; }
.galeri-kirp { display: grid; gap: 8px; padding: 12px; border: 1px dashed var(--border); border-radius: 12px; }
.galeri-kirp-baslik { margin: 0; font-weight: 600; }
.galeri-kirp-not { margin: 0; font-size: 12px; color: var(--muted); }
.galeri-durum { color: var(--muted); min-height: 1.2em; }
.galeri-izgara {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
  gap: 14px;
  margin: 0;
  padding: 0;
  list-style: none;
}
.galeri-izgara-kare { display: grid; gap: 6px; align-content: start; }
.galeri-izgara-kare .galeri-aciklama { margin-top: 0; -webkit-line-clamp: 4; }
.galeri-kunye { font-size: 11.5px; }
.galeri-sil-form { margin: 0; }
@media (max-width: 700px) {
  .galeri-kare { flex-basis: 140px; width: 140px; }
  .galeri-ok { top: 70px; width: 34px; height: 34px; }
  .galeri-ok-sol { left: -4px; }
  .galeri-ok-sag { right: -4px; }
  .galeri-aciklama { -webkit-line-clamp: 2; }
  .galeri-izgara { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; }
  .galeri-onizleme { width: 180px; height: 180px; }
}

/* GALERİ TELEFONDA (2026-10-07 kullanıcı: "telefonda da güzel gözüksün"): başlık + düğme TEK satır (genel başlık kuralı
   telefonda sarıyordu, düğme alt satıra düşüp kartın üst yarısını boşluğa veriyordu); kart iç boşluğu daralır; kare
   ekranın ~%40'ı — iki buçuk kare görünür, yarım kalan üçüncü "kaydırılabilir" der. Oklar telefonda yok (parmakla
   kaydırılır, oklar karenin üstüne biniyordu); büyük görünüm tam ekran. */
@media (max-width: 700px) {
  body.panel-page main .card.galeri-panel { padding: 0 0 12px; }
  .galeri-panel .overview-section-heading.galeri-panel-baslik { flex-wrap: nowrap; align-items: center; gap: 10px; padding: 12px 14px 10px; margin-bottom: 6px; }
  .galeri-panel-baslik h2 { font-size: 16px; gap: 6px; min-width: 0; }
  .galeri-panel-eylem { flex: 0 0 auto; }
  .galeri-panel-eylem .button { min-height: 36px; padding: 6px 12px; font-size: 13px; }
  .galeri-panel .button.galeri-ekle-dugme::before { display: none !important; content: none !important; }
  .galeri-panel-eylem .galeri-ekle-uzun { display: none; }
  .galeri-panel-eylem .galeri-ekle-kisa { display: inline; }
  .galeri-panel-baslik h2 { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .galeri-serit { padding: 0 14px; }
  .galeri-raylar { gap: 10px; padding: 2px 0 4px; scroll-padding-inline: 14px; }
  .galeri-kare { flex-basis: min(40vw, 160px); width: min(40vw, 160px); }
  .galeri-ok { display: none; }
  .galeri-aciklama { font-size: 12px; }
  .galeri-dialog { max-width: 100vw; width: 100vw; max-height: 100dvh; border-radius: 0; margin: auto 0; }
  .galeri-dialog-resim { max-width: 100vw; max-height: 78dvh; width: 100%; object-fit: contain; }
  .galeri-izgara { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .galeri-onizleme { width: min(70vw, 240px); height: min(70vw, 240px); }
  .galeri-form .button { min-height: 44px; }
}
.galeri-ekle-kisa { display: none; }   /* masaüstünde uzun etiket */

/* ---- ÖĞRENCİ PANELİ: SORU SOR KARTI (2026-10-07 kullanıcı: soru kutusu öğrencinin GENEL soru kanalı; koç ve
   psikolojik danışman düğmeleri karşılama kartının hemen altında, "rahat görülebilir yerde"). Öğrenci sayfaları
   yalnız app.css yükler — stiller burada (chat.css personel paneline aittir). */
.ogrenci-soru-sor { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 20px; }
.ogrenci-soru-sor-metin { flex: 1 1 260px; min-width: 0; }
.ogrenci-soru-sor-metin h2 { margin: 0 0 4px; font-size: 1.1rem; }
.ogrenci-soru-sor-metin p { margin: 0; color: var(--muted); }
.ogrenci-soru-sor-dugmeler { display: flex; flex: 1 1 320px; flex-wrap: wrap; gap: 10px; }
.ogrenci-soru-dugme { display: flex; flex: 1 1 150px; flex-direction: column; align-items: flex-start; gap: 2px; min-height: 64px; padding: 12px 16px; border: 1px solid var(--border); border-radius: 14px; background: var(--surface-soft); color: var(--text); font-weight: 800; text-decoration: none; }
.ogrenci-soru-dugme > span { font-size: 1.4rem; line-height: 1; }
.ogrenci-soru-dugme strong { font-size: 1rem; }
.ogrenci-soru-dugme em { color: var(--success); font-size: .82rem; font-style: normal; }
.ogrenci-soru-dugme small { color: var(--muted); font-size: .82rem; font-weight: 600; }
.koca-sor-alici-secim small { display: block; color: var(--muted); font-size: .82rem; font-weight: 600; }
.koca-sor-kime { margin: 0; color: var(--muted); }
.ogrenci-soru-dugme.is-koc { border-left: 4px solid var(--primary); }
.ogrenci-soru-dugme.is-psikolog { border-left: 4px solid var(--success); }
.ogrenci-soru-dugme.is-yeni { background: var(--success-soft); }
.ogrenci-soru-dugme:hover { border-color: var(--primary); }
.ogrenci-soru-dugme:focus-visible { outline: none; box-shadow: var(--focus); }
.koca-sor-alici, .field.koca-sor-alici { display: flex; flex-direction: row; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; border: 0; }
.koca-sor-alici legend { margin-bottom: 6px; font-weight: 700; }
.koca-sor-alici-secim { display: flex; flex: 1 1 200px; align-items: center; gap: 8px; min-height: 48px; padding: 8px 12px; border: 1px solid var(--border); border-radius: 12px; background: var(--surface); cursor: pointer; font-weight: 700; }
.koca-sor-alici-secim:has(input:checked) { border-color: var(--primary); background: color-mix(in srgb, var(--primary) 8%, var(--surface)); }
.soru-etiket { display: inline-block; padding: 1px 8px; border-radius: 999px; background: var(--surface-soft); color: var(--muted); font-size: 12px; font-weight: 700; }
.soru-etiket-konu { background: var(--warning-soft); color: var(--warning); }
.soru-alici-koc { background: color-mix(in srgb, var(--primary) 12%, transparent); color: var(--text); }
.soru-alici-psikolog { background: var(--success-soft); color: var(--success); }

/* Takip listesi boş kaldığında Kaydet düğmesinin üstündeki açıklama (2026-10-07). */
.heading-actions .cov-bos-uyari { flex: 1 0 100%; margin: 0; color: var(--warning-text, var(--muted)); }

/* İş listesi: biten ders hakkına satırda hak ekle / listeden kaldır (2026-10-07). */
.inbox-table .actions-cell { flex-wrap: wrap; gap: 6px; }
.inbox-hak-eylem { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; justify-content: flex-end; }
.inbox-hak-eylem form { display: contents; }

/* Hak açılmadan yapılan ders sorusu (2026-10-07): radyo kutuları alt alta, açıklama üstte. */
.hak-borc-soru { display: grid; gap: 4px; margin: 0; padding: 10px 12px; border: 1px solid var(--border); border-radius: 10px; background: var(--surface-soft); }
.hak-borc-soru legend { padding: 0 4px; font-weight: 700; }
.hak-borc-soru .field-hint { margin: 0 0 4px; }
