/* ============================================================
   Account pages (giriş / kayıt / hesabım) — shares design tokens
   and component classes (.btn, .field, .eyebrow, .wrap, header/footer)
   with styles.css. This file only adds what's specific to these
   utility pages: auth cards, dashboard sections, tables, progress bars.
   ============================================================ */

.chrome-header{
  display:flex; align-items:center; justify-content:space-between;
  padding: 18px 0;
}
.chrome-header .nav-actions{ display:flex; align-items:center; gap:14px; }

/* ---------- Auth shell (login / register) ---------- */
.auth-shell{
  min-height: 100vh;
  display:flex; align-items:center; justify-content:center;
  padding: 40px 0 70px;
  position: relative;
  overflow: clip;
}
.auth-card{
  position:relative; z-index:1;
  width: min(440px, 100%);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  padding: 40px 36px;
}
.auth-card .brand{ display:flex; align-items:center; gap:10px; font-family: var(--font-display); font-weight:700; font-size:1.3rem; margin-bottom: 26px; justify-content:center; }
.auth-card .brand-mark{ width:34px; height:34px; }
.auth-card .brand-word b{ color: var(--navy); }
.auth-card .brand-word .up{ color: var(--orange); }
.auth-card h1{ font-family: var(--font-display); font-size: 1.5rem; font-weight:700; text-align:center; margin-bottom:8px; }
.auth-card .auth-sub{ text-align:center; color: var(--ink-soft); font-size:.92rem; margin-bottom: 28px; }

.auth-card form{ display:flex; flex-direction:column; gap:16px; }

/* Shown instead of the form for the split-second Google's redirect lands
   back on this page with a token to process — see the inline script in
   <head> that sets data-auth-pending before first paint, so the form
   never has a chance to flash before we bounce on to the dashboard. */
.auth-loading{
  display:none; flex-direction:column; align-items:center; gap:14px;
  padding: 30px 0; color: var(--ink-soft); font-size:.92rem; font-weight:600;
}
.auth-spinner{
  width:28px; height:28px; border-radius:50%; border: 3px solid var(--border); border-top-color: var(--orange);
  animation: auth-spin .8s linear infinite;
}
@keyframes auth-spin{ to{ transform: rotate(360deg); } }
html[data-auth-pending] .auth-fields{ display:none; }
html[data-auth-pending] .auth-loading{ display:flex; }
.auth-card .field label{ display:block; font-size:.8rem; font-weight:700; color: var(--ink-soft); margin-bottom:7px; }
.auth-card .field input{
  width:100%; background: var(--surface-2); border: 1.5px solid transparent; border-radius: var(--radius-sm);
  padding: 13px 15px; font-size:.94rem; transition: border-color var(--dur-fast), background var(--dur-fast);
}
.auth-card .field input:focus{ border-color: var(--orange); background: var(--surface); outline:none; }
.auth-row-2{ display:grid; grid-template-columns: 1fr 1fr; gap:14px; }
@media (max-width:480px){ .auth-row-2{ grid-template-columns: 1fr; } }

.auth-switch{ text-align:center; margin-top:22px; font-size:.9rem; color: var(--ink-soft); }
.auth-switch a{ color: var(--orange-deep); font-weight:700; }
.auth-switch a:hover{ text-decoration: underline; }

/* Our own button — not Google's rendered widget — so it can trigger the
   forced-account-chooser redirect flow (see account.js#startGoogleAccountChooser)
   instead of Google's default "reuse whatever session already exists" button. */
.btn-google{
  display:flex; align-items:center; justify-content:center; gap:10px; width:100%;
  padding:12px 20px; border-radius: var(--radius-pill); border: 1px solid var(--border);
  background: var(--surface); color: var(--ink); font: inherit; font-size:.92rem; font-weight:700;
  cursor:pointer; box-shadow: var(--shadow-sm); transition: background var(--dur-fast), box-shadow var(--dur-fast);
}
.btn-google:hover{ background: var(--surface-2); box-shadow: var(--shadow-md); }
.btn-google svg{ width:20px; height:20px; flex-shrink:0; }

.auth-google-mobile{ display:none; }

/* Mobile-only "slide to sign in" — a real navigation-based OAuth flow
   underneath (see account.js#startGoogleAccountChooser), just wrapped in
   an iPhone-style slider instead of a plain button. */
.google-swipe-track{
  position:relative; height:52px; border-radius: var(--radius-pill); background: var(--surface-2);
  border: 1px solid var(--border); overflow:hidden; user-select:none;
}
/* inset:0 + tam ortalı metin, iki uçtaki 44px'lik dairelerin ALTINA
   giriyordu. Kesmek/üç nokta yerine metni zaten kısa tutuyoruz (Google
   ikonu görünürken tekrar "Google" yazmaya gerek yok) — her iki yandan
   dairelerin genişliği kadar boşluk bırakmak tek başına yetiyor. */
.google-swipe-label{
  position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
  padding: 0 50px; font-size:.84rem; font-weight:600; color: var(--ink-faint); pointer-events:none;
  white-space:nowrap;
}
@media (max-width: 360px){
  .google-swipe-label{ font-size:.76rem; padding:0 48px; }
}
.google-swipe-target{
  position:absolute; top:4px; right:4px; width:44px; height:44px; border-radius:50%;
  background: var(--surface); border: 1px dashed var(--border); display:flex; align-items:center; justify-content:center; color: var(--ink-faint);
}
.google-swipe-thumb{
  position:absolute; top:4px; left:4px; width:44px; height:44px; border-radius:50%;
  background: var(--surface); box-shadow: var(--shadow-md); display:flex; align-items:center; justify-content:center;
  cursor:grab; touch-action:none; transition: transform .15s var(--ease);
}
.google-swipe-thumb:active{ cursor:grabbing; transition:none; }
.google-swipe-thumb svg{ width:22px; height:22px; }

/* Scoped to .has-swipe (only giris.html has the mobile slider markup) so
   kayit.html's Google button doesn't just vanish under 640px with
   nothing to replace it. */
@media (max-width:640px){
  .auth-card.has-swipe .auth-google-desktop{ display:none; }
  .auth-card.has-swipe .auth-google-mobile{ display:block; }
}
.auth-divider{ display:flex; align-items:center; gap:12px; margin: 18px 0; color: var(--ink-faint); font-size:.82rem; }
.auth-divider::before, .auth-divider::after{ content:""; flex:1; height:1px; background: var(--border); }
.auth-forgot{ text-align:right; margin: -8px 0 16px; font-size:.86rem; }
.auth-forgot a{ color: var(--ink-soft); }
.auth-forgot a:hover{ color: var(--orange-deep); text-decoration: underline; }

.form-banner{
  display:none; align-items:flex-start; gap:10px;
  border-radius: var(--radius-sm); padding: 13px 15px; font-size:.86rem; font-weight:600; line-height:1.5;
  margin-bottom: 4px;
}
.form-banner.show{ display:flex; }
.form-banner svg{ width:18px; height:18px; flex-shrink:0; margin-top:1px; }
.form-banner.error{ background: #FDE8E8; color: #A32020; }
.form-banner.success{ background: var(--green-tint); color: var(--green); }
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .form-banner.error{ background:#3A1414; color:#F3A6A6; } }
:root[data-theme="dark"] .form-banner.error{ background:#3A1414; color:#F3A6A6; }

/* ---------- Dashboard (hesabım) ---------- */
.dash-shell{ padding: 42px 0 32px; }
.dash-head{ display:flex; align-items:center; justify-content:space-between; gap:20px; margin-bottom: 40px; flex-wrap:wrap; }
.dash-profile{ display:flex; align-items:center; gap:16px; }
.dash-avatar{
  width:56px; height:56px; border-radius:50%; background: var(--navy); color:#fff;
  display:flex; align-items:center; justify-content:center; font-family: var(--font-display); font-weight:700; font-size:1.2rem; flex-shrink:0;
}
.dash-profile h1{ font-family: var(--font-display); font-size:1.4rem; font-weight:700; }
.dash-profile p{ color: var(--ink-faint); font-size:.88rem; }

.dash-section{ margin-bottom: 44px; }
/* Sabit (sticky) site header'ı hesaba katma işi artık styles.css'teki
   genel html{scroll-padding-top} kuralında — burada AYRICA scroll-margin-
   top vermek, ikisi de uygulandığı için payı iki katına çıkarıp (180px)
   büyük bir boşluk bırakıyordu. Tek kaynak yeter. */

/* First-run onboarding — the only thing shown on hesabim.html for an
   account with zero history anywhere (see loadDashboard). */
.onboarding-hero{
  text-align:center; padding: 56px 32px; border-radius: var(--radius-lg);
  background: var(--surface); border: 1px solid var(--border); box-shadow: var(--shadow-sm);
}
.onboarding-icon{
  width:64px; height:64px; margin: 0 auto 18px; border-radius:50%;
  background: var(--orange-tint); color: var(--orange-deep);
  display:flex; align-items:center; justify-content:center;
}
.onboarding-icon svg{ width:30px; height:30px; }
/* Ödeme bekleniyor hero'su: turuncu "hoş geldin" tonundan farklı, sakin
   bir lacivert — banka/işlem bekleniyor izlenimi versin. */
.pending-payment-icon{ background: var(--surface-2); color: var(--navy); }
.pending-payment-icon svg{ width:32px; height:32px; }
.onboarding-hero h2{ font-family: var(--font-display); font-size:1.4rem; font-weight:700; margin-bottom:8px; }
.onboarding-hero p{ color: var(--ink-soft); font-size:.95rem; max-width:40ch; margin: 0 auto 26px; }
.btn-lg{ padding: 14px 32px; font-size:1rem; }
.dash-section-head{ display:flex; align-items:baseline; justify-content:space-between; margin-bottom:18px; gap:12px; flex-wrap:wrap; }
.dash-section-head h2{ font-family: var(--font-display); font-size:1.2rem; font-weight:700; }
.dash-section-head span{ font-size:.84rem; color: var(--ink-faint); }

/* Aktif paketler artık kart değil, ödeme geçmişiyle aynı tam genişlikte
   tablo — bütün bölümler aynı hizada duruyor. */
.num-reserved{ color: var(--orange-deep); font-weight:700; }
.num-left{ color: var(--green); font-weight:700; }
#creditTable th, #creditTable td{ text-align:center; }
.credit-add{ display:flex; align-items:center; justify-content:center; gap:8px; }
/* Kredi (tutar) artık Not'la ayrı sütunda ama aynı görünüm — ikisi de
   .credit-add'in dışında/içinde olmasına bakmadan aynı kutu stilini alsın. */
.credit-amount{
  width:56px; background: var(--surface-2); border:1.5px solid var(--border); border-radius: var(--radius-sm);
  padding:7px 8px; font-size:.86rem; color: var(--ink); text-align:center; flex-shrink:0;
}
.credit-note{
  flex:1 1 auto; min-width:90px; background: var(--surface-2); border:1.5px solid var(--border); border-radius: var(--radius-sm);
  padding:7px 10px; font-size:.86rem; color: var(--ink);
}

/* Sağ üstte beliren, kendiliğinden kaybolan bildirim (ör. "kredi eklendi",
   "ders tamamlandı"). Ekranın ortasına oturan versiyon rahatsız ediciydi —
   sayfayı kapatıyordu; sağ üst köşe standart toast konumu, içeriği bloklamıyor. */
.center-toast{
  position: fixed; top: 20px; right: 20px; transform: translateX(24px);
  background: var(--navy); color:#fff; padding: 14px 20px; border-radius: var(--radius-md);
  font-weight:700; font-size:.9rem; text-align:left; max-width: min(360px, 86vw);
  z-index: 500; box-shadow: 0 16px 40px -14px rgba(0,0,0,.4);
  opacity:0; pointer-events:none; transition: opacity .18s ease, transform .18s ease;
}
.center-toast.show{ opacity:1; transform: translateX(0); }
.center-toast.is-error{ background: #B72E25; }

/* ============================================================
   Admin ▸ Blog editörü
   ============================================================ */
.blog-editor{ display:grid; grid-template-columns: minmax(0,1fr) 320px; gap:24px; align-items:start; }
.blog-main{ display:flex; flex-direction:column; gap:18px; min-width:0; }
.blog-side{ display:flex; flex-direction:column; gap:16px; position:sticky; top:16px; }
.side-card{
  background: var(--surface); border:1px solid var(--border); border-radius: var(--radius-md);
  padding:18px; display:flex; flex-direction:column; gap:12px;
}
.side-card h4{ font-family: var(--font-display); font-size:.95rem; margin:0; }
.side-head{ display:flex; align-items:center; justify-content:space-between; gap:10px; }
.ai-btn{
  background: linear-gradient(135deg, var(--navy-tint), var(--orange-tint));
  color: var(--ink); border-radius: var(--radius-pill); padding:6px 12px; font-weight:700;
  white-space:nowrap;
}
.ai-btn:disabled{ opacity:.6; cursor:progress; }
.side-actions{ display:flex; flex-direction:column; gap:8px; align-items:stretch; }
.btn-block{ width:100%; }
/* Yatay akan admin formlarında (öğretmen ekle) butonun tek satırlık geniş
   metni satırın toplam genişliğini zorluyordu — 2 satıra sarıp daraltmak,
   telefon alanına (ülke+numara) gereken yeri geri veriyor. */
.btn-wrap{ white-space:normal; text-align:center; max-width:150px; line-height:1.25; }
.hint{ display:block; color: var(--ink-faint); font-size:.76rem; margin-top:4px; line-height:1.45; }
.hint.over{ color:#B72E25; font-weight:700; }

.slug-row{ display:flex; align-items:center; gap:0; }
.slug-prefix{
  padding:11px 4px 11px 12px; background: var(--surface-2); color: var(--ink-faint);
  border-radius: var(--radius-sm) 0 0 var(--radius-sm); font-family: var(--font-mono); font-size:.84rem;
  border:1.5px solid transparent; border-right:none; white-space:nowrap;
}
.slug-row input{ border-radius:0 var(--radius-sm) var(--radius-sm) 0 !important; font-family: var(--font-mono); }

/* Zengin metin editörü */
.rte{ border:1.5px solid var(--border); border-radius: var(--radius-sm); overflow:hidden; background: var(--surface); }
.rte-bar{
  display:flex; align-items:center; gap:2px; flex-wrap:wrap; padding:7px 8px;
  background: var(--surface-2); border-bottom:1px solid var(--border);
}
.rte-bar button{
  min-width:32px; height:30px; padding:0 8px; border:none; background:none; cursor:pointer;
  border-radius:7px; color: var(--ink-soft); font-size:.84rem; font-family: var(--font-body);
}
.rte-bar button:hover{ background: var(--surface); color: var(--ink); }
.rte-sep{ width:1px; height:18px; background: var(--border); margin:0 5px; }
.rte-body{
  min-height:340px; max-height:70vh; overflow-y:auto; padding:18px 20px;
  font-size:1rem; line-height:1.75; color: var(--ink); outline:none;
}
.rte-body:focus{ box-shadow: inset 0 0 0 2px var(--orange-tint); }
.rte-body:empty::before{ content:"Yazmaya başla…"; color: var(--ink-faint); }
.rte-body h2{ font-family: var(--font-display); font-size:1.35rem; margin:24px 0 10px; }
.rte-body h3{ font-family: var(--font-display); font-size:1.12rem; margin:20px 0 8px; }
.rte-body p{ margin:0 0 14px; }
.rte-body ul, .rte-body ol{ padding-left:24px; margin:0 0 14px; }
.rte-body img{ max-width:100%; height:auto; border-radius: var(--radius-sm); margin:14px 0; }
.rte-body blockquote{
  margin:16px 0; padding:12px 18px; border-left:3px solid var(--orange);
  background: var(--surface-2); color: var(--ink-soft); font-style:italic;
}

/* Kapak önizleme */
.cover-box{
  aspect-ratio:16/9; border-radius: var(--radius-sm); overflow:hidden;
  background: var(--surface-2); border:1px dashed var(--border);
  display:flex; align-items:center; justify-content:center;
}
.cover-box img{ width:100%; height:100%; object-fit:cover; }
.cover-box-portrait{ aspect-ratio:4/5; max-width:220px; margin:0 auto; }
.cover-empty{ color: var(--ink-faint); font-size:.84rem; }

/* Google sonuç (SERP) önizlemesi — Google'ın kendi tipografisine yakın
   dursun ki karakter kesilmesi gerçekçi görünsün. */
.serp{
  background: var(--surface-2); border:1px solid var(--border);
  border-radius: var(--radius-sm); padding:14px 16px; font-family: arial, sans-serif;
}
.serp-site{ display:flex; align-items:center; gap:9px; margin-bottom:7px; font-size:.76rem; color: var(--ink); line-height:1.3; }
.serp-favicon{
  width:26px; height:26px; border-radius:50%; background: var(--surface);
  border:1px solid var(--border); display:flex; align-items:center; justify-content:center; flex-shrink:0;
}
.serp-url{ color: var(--ink-faint); font-size:.74rem; }
.serp-title{
  color:#1a0dab; font-size:1.05rem; line-height:1.3; margin-bottom:4px;
  overflow-wrap:break-word;
}
:root[data-theme="dark"] .serp-title{ color:#8ab4f8; }
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .serp-title{ color:#8ab4f8; } }
.serp-desc{ color: var(--ink-soft); font-size:.82rem; line-height:1.55; overflow-wrap:break-word; }

.login-badge{
  display:inline-block; padding:3px 10px; border-radius: var(--radius-pill);
  font-size:.76rem; font-weight:700; white-space:nowrap;
  background: var(--surface-2); color: var(--ink-faint);
}
.login-badge.login-google{ background: var(--navy-tint); color: var(--navy-deep); }
.login-badge.login-email{ background: var(--orange-tint); color: var(--orange-deep); }
.login-badge.login-both{ background: var(--green-tint); color: var(--green); }

.icon-link{ display:inline-flex; align-items:center; padding:6px; }
.icon-link svg{ width:16px; height:16px; }

/* SSS tekrarlayıcı */
.faq-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; }
.faq-list{ display:flex; flex-direction:column; gap:12px; margin-top:10px; }
.faq-item{
  display:grid; grid-template-columns: 1fr auto; gap:8px 10px;
  padding:12px; border:1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface-2);
}
.faq-item .faq-q{ grid-column:1; font-weight:700; }
.faq-item .faq-a{ grid-column:1; resize:vertical; }
.faq-item .js-faq-del{ grid-column:2; grid-row:1/3; align-self:start; color:#A32020; }

@media (max-width: 900px){
  .blog-editor{ grid-template-columns:1fr; }
  .blog-side{ position:static; }
}

/* Admin ▸ Mezunlar: genişleyen satır */
.grad-caret{ display:inline-block; color: var(--ink-faint); font-size:.8rem; transition: transform var(--dur-fast); }
.grad-detail{ padding:16px 6px; }
.grad-detail-summary{
  display:flex; flex-wrap:wrap; gap:16px 22px; margin-bottom:14px;
  font-size:.86rem; color: var(--ink-soft);
}
.grad-detail-summary b{ color: var(--ink); font-family: var(--font-display); }
.grad-log-table{ width:100%; font-size:.86rem; }
.grad-log-table th{ text-align:left; color: var(--ink-faint); font-size:.72rem; text-transform:uppercase; letter-spacing:.03em; padding-bottom:6px; }
.grad-log-table td{ padding:7px 10px 7px 0; border-top:1px solid var(--border); }
.grad-log-table small{ color: var(--ink-faint); }
.conf-badge{
  display:inline-block; margin-left:6px; padding:2px 7px; border-radius: var(--radius-pill);
  font-size:.68rem; font-weight:700; white-space:nowrap;
}
.conf-badge.conf-system{ background: var(--green-tint); color: var(--green); }
.conf-badge.conf-teacher{ background: var(--orange-tint); color: var(--orange-deep); }
.conf-badge.conf-issue{ background: #FDE8E8; color: #A32020; }
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .conf-badge.conf-issue{ background:#3A1414; color:#F3A6A6; } }
:root[data-theme="dark"] .conf-badge.conf-issue{ background:#3A1414; color:#F3A6A6; }

.cell-progress{ display:flex; align-items:center; gap:10px; min-width:150px; }
.cell-progress .pkg-bar{ flex:1; margin-bottom:0; }
.cell-progress span{ font-size:.78rem; color: var(--ink-faint); font-weight:600; white-space:nowrap; }

/* E-posta doğrulama uyarısı (hesabım, üst profil kartı) — küçük, metin-altı link görünümü. */
.link-btn{ background:none; border:none; padding:0; font:inherit; font-weight:700; color: var(--orange-deep); text-decoration:underline; cursor:pointer; }
.link-btn:disabled{ color: var(--ink-faint); cursor:not-allowed; text-decoration:none; }

/* Yaklaşan Derslerim: "Derse Katıl" + "İptal Et" tek hücrede, yan yana. */
.cell-actions{ display:flex; align-items:center; gap:14px; white-space:nowrap; }
.btn-ghost.is-disabled{ color: var(--ink-faint); cursor:not-allowed; }
/* "Derse Katıl" başlığı + altındaki geri sayım (bkz. countdownLabel) —
   bu ikili masaüstünde stil hiç tanımlanmamıştı (sadece mobil kart
   görünümünde vardı), "Derse Katıl11 sa kaldı" diye bitişik görünüyordu. */
.cell-actions .js-join{ display:inline-flex; flex-direction:column; align-items:flex-start; line-height:1.35; gap:1px; }
.cell-actions .js-join small{ color: var(--ink-faint); font-weight:600; }

/* ============================================================
   Eğitmen finansı (admin.html + egitmenim.html)
   ============================================================ */
.fin-totals{ display:grid; grid-template-columns: repeat(4, 1fr); gap:14px; }
.fin-total{
  background: var(--surface); border:1px solid var(--border);
  border-radius: var(--radius-md); padding:16px 18px;
}
.fin-total b{ display:block; font-family: var(--font-display); font-size:1.4rem; line-height:1.2; }
.fin-total small{ font-size:.76rem; color: var(--ink-faint); font-weight:600; }
.fin-total.accent b{ color: var(--orange-deep); }
@media (max-width: 860px){ .fin-totals{ grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 460px){ .fin-totals{ grid-template-columns: 1fr; } }

.rate-input{
  width:100px; padding:8px 10px; font-family: var(--font-mono); font-size:.86rem;
  background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
  color: var(--ink);
}
.rate-input:focus{ border-color: var(--orange); background: var(--surface); outline:none; }
.rate-input:disabled{ opacity:.5; }

.bal-due{ color: var(--orange-deep); }
.bal-clear{ color: var(--ink-faint); }

.fin-totals-3{ grid-template-columns: repeat(3, 1fr); }
@media (max-width: 560px){ .fin-totals-3{ grid-template-columns:1fr; } }

.fin-detail{ display:grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap:22px; margin-top:24px; }
.fin-detail > div{ min-width:0; }
.fin-detail h4{ font-family: var(--font-display); font-size:.88rem; font-weight:700; margin-bottom:10px; }
.fin-detail .table-scroll{ max-height:240px; overflow-y:auto; overflow-x:auto; }

/* ============================================================
   Admin paneli: sekmeler, satır içi düzenleme, büyük modallar
   ============================================================ */
/* Sekme sayısı arttıkça (şu an 11) masaüstünde de sarmaya başlıyordu —
   burger menü ya da dikey accordion yerine (tek kişilik bir yönetim
   paneli için fazla mekanizma, ayrıca "tıkla → tek panel görünsün"
   modelini bozar) her zaman tek satır, yatay kaydırılabilir bir şerit:
   her sekme her zaman erişilebilir, kaydırınca hepsi görünüyor. Bu
   eskiden sadece mobilde (≤640px) uygulanıyordu, artık ekran boyutundan
   bağımsız. Kaydırma çubuğu gizli, sağda ince bir "daha var" gölgesi var. */
.tabs{
  display:flex; align-items:center; gap:6px;
  flex-wrap:nowrap; overflow-x:auto; -webkit-overflow-scrolling:touch;
  scrollbar-width:none; -ms-overflow-style:none;
  border-bottom:1px solid var(--border); margin-bottom:26px; padding-bottom:2px;
}
.tabs::-webkit-scrollbar{ display:none; }
.tab{ flex-shrink:0; }
.tabs-wrap{ position:relative; }
.tabs-scroll-hint{
  display:flex; align-items:center; justify-content:center;
  position:absolute; right:0; top:0; bottom:2px; width:26px;
  background: linear-gradient(to right, transparent, var(--surface) 60%);
  color: var(--orange); pointer-events:none;
}
.tabs-scroll-hint svg{ width:16px; height:16px; animation: tabsHintNudge 1.3s ease-in-out infinite; }
@keyframes tabsHintNudge{ 0%,100%{ transform:translateX(0); opacity:.45; } 50%{ transform:translateX(4px); opacity:1; } }
.tab{
  padding:12px 18px; min-height:44px; cursor:pointer; white-space:nowrap;
  background:none; border:none; border-bottom:2.5px solid transparent;
  color: var(--ink-faint); font-family: var(--font-display);
  font-size:.92rem; font-weight:700;
  transition: color var(--dur-fast), border-color var(--dur-fast);
}
.tab:hover{ color: var(--ink); }
.tab.is-active{ color: var(--orange-deep); border-bottom-color: var(--orange); }
.tab:focus-visible{ outline:2px solid var(--orange); outline-offset:-2px; }
@media (max-width: 640px){
  .tab{ padding:12px 14px; }
}

.tab-refresh{
  margin-left:auto; width:40px; height:40px; display:grid; place-items:center; cursor:pointer;
  border-radius: var(--radius-pill); background: var(--surface-2); color: var(--ink-soft);
  border:1.5px solid transparent; transition: border-color var(--dur-fast), color var(--dur-fast);
}
.tab-refresh svg{ width:17px; height:17px; }
.tab-refresh:hover{ border-color: var(--orange); color: var(--orange-deep); }
.tab-refresh:focus-visible{ outline:2px solid var(--orange); outline-offset:2px; }

.tab-panel > .dash-section:first-child{ margin-top:0; }

/* Yatay akan admin formları: alanlar kalan alanı paylaşır, buton sağ
   uçta aynı satırda kalır. Dar ekranda alanlar alt satıra sarar, buton
   tam genişliğe geçer. */
.admin-form{
  padding:20px 22px; display:flex; gap:14px; align-items:flex-end; flex-wrap:wrap;
}
.admin-form .field{ flex:1 1 130px; min-width:0; }
.admin-form .field.grow{ flex:2 1 200px; }
.admin-form > .btn{ flex:0 0 auto; margin-left:auto; }
@media (max-width: 700px){
  .admin-form > .btn{ margin-left:0; width:100%; max-width:none; }
}
.admin-form-boxed{
  background: var(--surface-2); border:1px solid var(--border);
  border-radius: var(--radius-md); margin-top:18px;
}

/* select ve textarea, .field input ile aynı görünsün */
.field select, .field textarea{
  background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
  padding:13px 15px; font-size:.92rem; color: var(--ink); font-family: var(--font-body);
  width:100%; cursor:pointer;
}
.field select{
  appearance:none; padding-right:38px; min-height:47px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C8CA6' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 13px center; background-size:15px;
}
.field textarea{ cursor:text; resize:vertical; min-height:110px; line-height:1.6; }
.field select:focus, .field textarea:focus{ border-color: var(--orange); background: var(--surface); outline:none; }
.admin-form-boxed .field select, .admin-form-boxed .field textarea,
.admin-form-boxed .field input{ background: var(--surface); }
.tpl-var{
  background: var(--surface-2); border:1px solid var(--border); border-radius:4px;
  padding:1px 6px; font-family: var(--font-mono); font-size:.78rem; color: var(--orange-deep);
}
.tpl-var-list{ margin:-2px 0 10px; }
.tpl-var-ul{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:4px; }
.tpl-var-ul li{ font-size:.84rem; color: var(--ink-soft); }

/* Tablo içi düzenlenebilir hücreler */
.cell-input{
  width:74px; padding:8px 10px; font-family: var(--font-mono); font-size:.85rem;
  background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
  color: var(--ink);
}
.cell-input.wide{ width:112px; }
.cell-input.narrow{ width:58px; }
select.cell-input{ width:130px; font-family: var(--font-body); cursor:pointer; }
.cell-input:hover{ border-color: var(--border); }
.cell-input:focus{ border-color: var(--orange); background: var(--surface); outline:none; }
.cell-input:disabled{ opacity:.5; }
.cell-input.saved{ border-color: var(--green); background: var(--green-tint); }

.row-actions{ display:flex; gap:14px; white-space:nowrap; }

/* Toggle anahtarı (öne çıkan / yayında) */
.sw{
  width:44px; height:25px; padding:3px; cursor:pointer; display:block;
  border-radius: var(--radius-pill); border:none; background: var(--border);
  transition: background var(--dur-fast);
}
.sw span{
  display:block; width:19px; height:19px; border-radius:50%;
  background: var(--surface); box-shadow: var(--shadow-sm);
  transition: transform var(--dur-fast) var(--ease);
}
.sw.is-on{ background: var(--orange); }
.sw.is-on span{ transform: translateX(19px); }
.sw:disabled{ opacity:.5; cursor:not-allowed; }
.sw:focus-visible{ outline:2px solid var(--orange); outline-offset:2px; }
@media (prefers-reduced-motion: reduce){ .sw, .sw span{ transition:none; } }

/* Sıra kolonu: yukarı/aşağı okları + konum numarası */
.ord{ display:inline-flex; align-items:center; gap:4px; }
.ord-n{
  min-width:20px; text-align:center; font-family: var(--font-mono);
  font-size:.8rem; font-weight:700; color: var(--ink-faint);
}
.ord-btn{
  width:26px; height:26px; display:grid; place-items:center; cursor:pointer;
  border-radius:7px; border:none; background: var(--surface-2); color: var(--ink-soft);
  font-size:.8rem; line-height:1;
  transition: background var(--dur-fast), color var(--dur-fast);
}
.ord-btn:hover:not(:disabled){ background: var(--orange-tint); color: var(--orange-deep); }
.ord-btn:disabled{ opacity:.3; cursor:not-allowed; }
.ord-btn:focus-visible{ outline:2px solid var(--orange); outline-offset:1px; }
.mini-badge{
  display:inline-block; padding:2px 8px; border-radius: var(--radius-pill);
  background: var(--orange-tint); color: var(--orange-deep);
  font-size:.66rem; font-weight:800; text-transform:uppercase; letter-spacing:.03em;
}

.modal-head{
  display:flex; align-items:center; justify-content:space-between; gap:16px;
  padding:20px 24px; border-bottom:1px solid var(--border); flex-shrink:0;
}
.modal-head h3{ margin:0; min-width:0; }
.modal-x{
  width:36px; height:36px; flex-shrink:0; display:grid; place-items:center; cursor:pointer;
  border-radius: var(--radius-pill); background: var(--surface-2); color: var(--ink-soft);
  font-size:1.4rem; line-height:1;
}
.modal-x:hover{ background: var(--border); color: var(--ink); }
.modal-x:focus-visible{ outline:2px solid var(--orange); outline-offset:2px; }
.modal-body{
  padding:22px 24px; overflow-y:auto; overflow-x:hidden; flex:1; min-height:0;
}
.modal-body > *{ min-width:0; }
.modal-foot{
  display:flex; justify-content:flex-end; gap:12px; flex-shrink:0; flex-wrap:wrap;
  padding:16px 24px; border-top:1px solid var(--border); background: var(--surface-2);
  border-radius: 0 0 var(--radius-lg) var(--radius-lg);
}
.modal-foot .btn{ min-width:130px; flex:0 1 auto; }
@media (max-width: 560px){
  .modal-foot{ flex-direction:column-reverse; padding:14px 18px; }
  .modal-foot .btn{ width:100%; min-width:0; }
  .modal-head{ padding:16px 18px; }
  .modal-body{ padding:18px; }
}

/* Paket düzenleme formu. auto-fit + minmax: kolon sayısı kutunun
   gerçek genişliğine göre kendi kendine ayarlanır, sabit 3'e zorlanıp
   taşmaz. */
.pkg-form{ display:grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap:16px; }
.pkg-form .field{ min-width:0; }
.pkg-form .field.full{ grid-column: 1 / -1; }

/* Form alanları kapsayıcıdan taşmasın. */
.field{ min-width:0; }
.field input, .field select, .field textarea{ width:100%; min-width:0; max-width:100%; }

/* Şifre kuralları — statik "en az 8 karakter, büyük/küçük harf ve rakam"
   cümlesi yerine yazdıkça tamamlanan bir görev listesi. */
.pw-checklist{
  list-style:none; margin:8px 0 0; padding:0;
  display:flex; flex-direction:column; gap:5px;
}
.pw-checklist li{
  display:flex; align-items:center; gap:8px;
  font-size:.82rem; color: var(--ink-faint); transition: color var(--dur-fast);
}
.pw-rule-dot{
  flex-shrink:0; width:16px; height:16px; border-radius:50%;
  border:1.5px solid var(--border); position:relative;
  transition: background var(--dur-fast), border-color var(--dur-fast);
}
.pw-checklist li.is-ok{ color: var(--green); }
.pw-checklist li.is-ok .pw-rule-dot{
  background: var(--green); border-color: var(--green);
}
.pw-checklist li.is-ok .pw-rule-dot::after{
  content:""; position:absolute; left:4px; top:1px; width:5px; height:8px;
  border:solid #fff; border-width:0 2px 2px 0; transform:rotate(45deg);
}

/* ============================================================
   Profil fotoğrafı: avatar, kırpma editörü, büyük görüntüleme
   ============================================================ */
.dash-avatar{ overflow:hidden; flex-shrink:0; position:relative; }
.dash-avatar img{
  width:100%; height:100%; object-fit:cover; border-radius:50%; display:block;
}

/* Profil başlığındaki avatar. Fotoğraf YOKKEN lacivert daire + baş
   harfler kalır (varsayılan bu); yalnızca fotoğraf varken zemin kalkar.
   Buton arka planını koşulsuz sıfırlamak baş harfleri beyaz üstüne
   beyaz bırakıyordu. */
.avatar-edit{
  position:relative; cursor:pointer; border:none; padding:0;
  border-radius:50%; width:76px; height:76px; font-size:1.5rem;
  transition: box-shadow var(--dur-fast);
}
.avatar-edit:hover{ box-shadow: 0 0 0 3px var(--orange-tint); }
.dash-avatar.has-img{ background:none; }
.avatar-edit:focus-visible{ outline:2px solid var(--orange); outline-offset:3px; }

/* Hover'da 4x açılan önizleme (body'ye eklenir, kapsayıcı kırpmasın) */
.av-peek-pop{
  position:fixed; z-index:300; pointer-events:none;
  border-radius:50%; overflow:hidden;
  box-shadow: var(--shadow-lg); border:3px solid var(--surface);
  animation: avPeekIn 140ms var(--ease);
}
.av-peek-pop img{ width:100%; height:100%; object-fit:cover; display:block; }
@keyframes avPeekIn{ from{ transform:scale(.55); opacity:0; } to{ transform:scale(1); opacity:1; } }
@media (prefers-reduced-motion: reduce){ .av-peek-pop{ animation:none; } }
.av-peek{ cursor:pointer; }

.avatar-actions{ display:flex; gap:14px; margin-top:8px; flex-wrap:wrap; }

/* Avatara tıklamak (fotoğraf varken) büyütüyor, değiştirmiyor — bu yüzden
   ayrı, her zaman görünen küçük bir "değiştir" rozeti gerekiyor. Masaüstünde
   yanda zaten "Fotoğraf Yükle" yazan buton var, rozet orada gereksiz —
   sadece dock'un aldığı mobilde (avatar-actions gizlendiğinde) gösteriliyor. */
.avatar-wrap{ position:relative; flex-shrink:0; }
.avatar-edit-badge{
  display:none; position:absolute; right:-2px; bottom:-2px; z-index:2;
  width:26px; height:26px; border-radius:50%; padding:0; cursor:pointer;
  background: var(--orange); color:#fff; border:2px solid var(--surface);
  align-items:center; justify-content:center;
}
.avatar-edit-badge svg{ width:14px; height:14px; }

/* Kırpma editörü */
.av-box{ width:min(420px, 100%); }
.av-stage{
  position:relative; width:320px; height:320px; max-width:100%;
  margin:0 auto; border-radius: var(--radius-md); overflow:hidden;
  background: var(--surface-2); touch-action:none;
}
.av-canvas{ display:block; cursor:grab; width:100%; height:100%; }
.av-canvas:active{ cursor:grabbing; }
/* Daire dışını karartan maske — kesme alanı net görünsün. */
.av-ring{
  position:absolute; inset:0; pointer-events:none; border-radius: var(--radius-md);
  box-shadow: 0 0 0 999px rgba(14,22,34,.55) inset;
  clip-path: circle(50% at 50% 50%);
}
.av-stage::after{
  content:""; position:absolute; inset:0; pointer-events:none;
  border-radius:50%; box-shadow: 0 0 0 2px rgba(255,255,255,.9);
  margin:0;
}
.av-zoom{ display:flex; align-items:center; gap:12px; margin:18px 0 10px; }
.av-zoom span{ font-size:.82rem; font-weight:700; color: var(--ink-soft); white-space:nowrap; }
.av-zoom input{ flex:1; accent-color: var(--orange); }

/* Büyük görüntüleme */
.av-viewer{ cursor:zoom-out; }
.av-viewer img{
  width:min(420px, 82vw); height:min(420px, 82vw);
  object-fit:cover; border-radius:50%;
  box-shadow: var(--shadow-lg); border:4px solid var(--surface);
}

/* ---- Filtre çubuğu + aranabilir seçici ---- */
.filter-bar{
  display:flex; gap:14px; align-items:flex-end; flex-wrap:wrap; margin-bottom:14px;
}
.filter-bar .field, .filter-bar .combo{ min-width:200px; }

.pending-toggle{
  display:flex; align-items:center; gap:8px; margin:-4px 0 14px;
  font-size:.86rem; font-weight:600; color: var(--ink-soft); cursor:pointer;
}
.pending-toggle input{ width:16px; height:16px; accent-color: var(--orange); cursor:pointer; }

.combo{ position:relative; display:flex; flex-direction:column; gap:7px; }
.combo label{ font-size:.8rem; font-weight:700; color: var(--ink-soft); }
.combo input{
  width:100%; padding:13px 38px 13px 15px; font-size:.92rem; color: var(--ink);
  background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
}
.combo input:focus{ border-color: var(--orange); background: var(--surface); outline:none; }
.combo-clear{
  position:absolute; right:8px; bottom:8px; width:30px; height:30px; cursor:pointer;
  display:grid; place-items:center; border-radius:50%; border:none;
  background: var(--border); color: var(--ink-soft); font-size:1.05rem; line-height:1;
}
.combo-clear:hover{ background: var(--ink-faint); color: var(--surface); }

.combo-list{
  position:absolute; top:100%; left:0; right:0; z-index:60; margin-top:6px;
  max-height:260px; overflow-y:auto; padding:6px;
  background: var(--surface); border:1px solid var(--border);
  border-radius: var(--radius-sm); box-shadow: var(--shadow-md);
}
.combo-opt{
  display:flex; align-items:center; justify-content:space-between; gap:10px;
  width:100%; text-align:left; padding:10px 12px; cursor:pointer;
  border:none; background:none; border-radius:8px;
  font-size:.88rem; font-weight:600; color: var(--ink);
}
.combo-opt small{ font-size:.72rem; color: var(--ink-faint); font-weight:700; }
.combo-opt:hover, .combo-opt.is-active{ background: var(--surface-2); }
.combo-opt.is-active{ box-shadow: inset 0 0 0 1.5px var(--orange); }
.combo-none{ padding:12px; font-size:.85rem; color: var(--ink-faint); }

/* ---- Çoklu seçim filtre (rol vb.) — .combo ile aynı görsel dil ---- */
.mselect{ position:relative; display:flex; flex-direction:column; gap:7px; min-width:200px; }
.mselect label{ font-size:.8rem; font-weight:700; color: var(--ink-soft); }
.mselect-toggle{
  width:100%; text-align:left; padding:13px 38px 13px 15px; font-size:.92rem; color: var(--ink);
  background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
  cursor:pointer; position:relative;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C8CA6' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 13px center; background-size:15px;
}
.mselect-toggle:focus-visible{ outline:2px solid var(--orange); outline-offset:2px; }
.mselect-toggle.is-filtered{ color: var(--orange-deep); font-weight:700; }
.mselect-panel{
  position:absolute; top:100%; left:0; right:0; z-index:60; margin-top:6px;
  max-height:260px; overflow-y:auto; padding:6px;
  background: var(--surface); border:1px solid var(--border);
  border-radius: var(--radius-sm); box-shadow: var(--shadow-md);
}
.mselect-opt{
  display:flex; align-items:center; gap:10px; width:100%; padding:10px 12px;
  cursor:pointer; border-radius:8px; font-size:.88rem; font-weight:600; color: var(--ink);
  text-align:left; border:none; background:none; font-family:inherit;
}
.mselect-opt:hover{ background: var(--surface-2); }
.mselect-opt input{ width:16px; height:16px; accent-color: var(--orange); cursor:pointer; }
/* Tek seçim varyantı (makeSingleSelect) — <button>, checkbox yok, seçili
   olan .combo-opt.is-active ile aynı vurguyu alır. */
.mselect-opt.is-active{ background: var(--surface-2); box-shadow: inset 0 0 0 1.5px var(--orange); }

/* ---- Telefon: bayrak + alan kodu seçici (admin.html#makeCountrySelect) ---- */
.phone-field{ display:flex; gap:8px; align-items:flex-start; max-width:380px; }
.phone-field .country-select{ min-width:auto; flex-shrink:0; }
.phone-field .country-toggle{ width:auto; white-space:nowrap; padding:13px 26px 13px 12px; }
.phone-field .phone-number{ flex:1; min-width:140px; }
/* padding artırıldı: arama kutusunun odak çerçevesi (focus ring) panelin
   üst kenarındaki overflow-y:auto kırpmasına takılıp kesik görünüyordu. */
.country-panel{ left:0; right:auto; width:min(300px, 80vw); padding:10px; }
.country-search{
  width:100%; margin-bottom:8px; padding:8px 12px; box-sizing:border-box;
  border:1.5px solid var(--border); border-radius: var(--radius-sm);
  background: var(--surface); color: var(--ink); font-size:.85rem;
}
/* Tarayıcının varsayılan outline'ı kutunun dışına taşıp kırpılabiliyordu
   — onun yerine kutunun İÇİNDE kalan bir kenarlık rengi değişimi. */
.country-search:focus{ outline:none; border-color: var(--orange); }
.country-list{ max-height:220px; overflow-y:auto; margin:0 -10px; padding:0 10px; }
.country-opt small{ margin-left:auto; color: var(--ink-faint); font-weight:600; }

/* ---- Sayfalama ---- */
.pagination{
  display:flex; align-items:center; justify-content:center; gap:16px;
  padding:16px 20px; border-top:1px solid var(--border); flex-wrap:wrap;
}
.page-btn{
  padding:9px 16px; min-height:38px; cursor:pointer; white-space:nowrap;
  border-radius: var(--radius-sm); border:1.5px solid var(--border); background: var(--surface-2);
  color: var(--ink-soft); font-size:.84rem; font-weight:700;
  transition: border-color var(--dur-fast), color var(--dur-fast);
}
.page-btn:hover:not(:disabled){ border-color: var(--orange); color: var(--orange-deep); }
.page-btn:disabled{ opacity:.4; cursor:not-allowed; }
.page-info{ font-size:.84rem; font-weight:600; color: var(--ink-faint); }

/* ---- Öğretmen sekmesi: expand edilen öğretmen satırı ---- */
.roster-teacher-row{ cursor:pointer; }
.roster-teacher-row td{
  background: var(--orange); color: var(--on-accent, #fff); font-weight:800;
  border-top-color: var(--orange);
}
.roster-teacher-row:hover td{ filter: brightness(1.04); }
.roster-chevron{
  display:inline-block; width:9px; height:9px; margin-right:4px;
  border-right:2px solid currentColor; border-bottom:2px solid currentColor;
  transform: rotate(-45deg); transition: transform var(--dur-fast);
}
.roster-teacher-row.is-open .roster-chevron{ transform: rotate(45deg); }
.roster-detail-row td{ padding:0; border-top:none; }
.roster-detail-row .table-scroll{ overflow-x:auto; }
.roster-detail-row .data-table{ font-size:.84rem; }
.roster-detail-row .data-table th{ background: var(--surface-2); }
.roster-purchases small{ display:block; color: var(--ink-faint); font-weight:600; line-height:1.7; }

/* ---- Şu an aktif grup dersi (canlı katılım, açılır/kapanır) ---- */
.live-session-card{
  margin-bottom:10px; background: var(--surface); border:1px solid var(--border); border-radius: var(--radius-md);
  overflow:hidden;
}
.live-session-toggle{
  display:flex; align-items:center; gap:14px; width:100%; padding:14px 18px;
  background:none; border:none; cursor:pointer; text-align:left;
}
.live-dot{
  width:9px; height:9px; border-radius:50%; flex-shrink:0;
  background: var(--green); box-shadow: 0 0 0 4px var(--green-tint);
  animation: liveDotPulse 1.8s ease-in-out infinite;
}
@keyframes liveDotPulse{ 0%,100%{ opacity:1; } 50%{ opacity:.4; } }
@media (prefers-reduced-motion: reduce){ .live-dot{ animation:none; } }
.live-session-title{ flex:1; min-width:0; }
.live-session-title b{ display:block; font-size:.92rem; color: var(--ink); }
.live-session-title small{ display:block; font-size:.78rem; color: var(--ink-faint); font-weight:600; margin-top:2px; }
.live-chevron{
  width:9px; height:9px; flex-shrink:0; margin-right:4px;
  border-right:2px solid var(--ink-faint); border-bottom:2px solid var(--ink-faint);
  transform: rotate(-45deg); transition: transform var(--dur-fast);
}
.live-session-card.is-open .live-chevron{ transform: rotate(45deg); }
.live-session-detail{ padding:0 18px 16px; }
.live-search{
  width:100%; margin-bottom:10px; padding:8px 12px;
  border:1px solid var(--border); border-radius: var(--radius-md);
  background: var(--surface); color: var(--ink); font-size:.85rem;
}
.live-person-list{ display:flex; flex-direction:column; gap:6px; }
.live-person-row{
  display:flex; align-items:center; gap:10px; padding:8px 12px;
  background: var(--surface-2); border-radius: var(--radius-md);
  font-size:.82rem;
}
.live-person-row.is-left{ background:transparent; border:1px dashed var(--border); color: var(--ink-faint); }
.live-person-row.teacher-row{ background: var(--orange-tint, var(--surface-2)); margin-bottom:10px; }
.live-person-row.teacher-row .lp-name small{ font-weight:600; color: var(--ink-faint); margin-left:4px; }
.lp-name{ font-weight:700; color: var(--ink); flex:1; min-width:0; }
.live-person-row.is-left .lp-name{ color: var(--ink-faint); font-weight:600; }
.lp-time{ color: var(--ink-faint); font-weight:600; white-space:nowrap; }
.lp-dur{ color: var(--ink-faint); font-weight:700; white-space:nowrap; min-width:44px; text-align:right; }

/* ---- Herkese açık grup dersi listesi (grup-dersleri.html) ---- */
.session-row{
  display:flex; align-items:center; justify-content:space-between; gap:16px;
  padding:16px 20px; border-top:1px solid var(--border);
}
.session-row:first-child{ border-top:none; }
.session-row b{ display:block; font-size:.94rem; }
.session-row small{ display:block; font-size:.8rem; color: var(--ink-faint); font-weight:600; margin-top:2px; }

/* ============================================================
   Eğitmen ders takvimi — ay / hafta / gün
   ============================================================ */
.tcal-head{
  display:flex; align-items:center; gap:16px; flex-wrap:wrap;
  margin-bottom:18px; padding-bottom:16px; border-bottom:1px solid var(--border);
}
.tcal-nav{ display:flex; align-items:center; gap:8px; }
.tcal-title{
  flex:1; text-align:center; min-width:180px;
  font-family: var(--font-display); font-weight:700; font-size:1.05rem;
}
.tcal-views{
  display:flex; gap:2px; padding:3px; border-radius: var(--radius-pill); background: var(--surface-2);
}
.tcal-views button{
  padding:8px 16px; min-height:36px; cursor:pointer; border:none;
  border-radius: var(--radius-pill); background:none; color: var(--ink-soft);
  font-size:.84rem; font-weight:700;
  transition: background var(--dur-fast), color var(--dur-fast);
}
.tcal-views button:hover{ color: var(--ink); }
.tcal-views button.is-active{ background: var(--surface); color: var(--orange-deep); box-shadow: var(--shadow-sm); }
.tcal-views button:focus-visible{ outline:2px solid var(--orange); outline-offset:1px; }
@media (max-width: 620px){
  .tcal-title{ order:-1; flex-basis:100%; text-align:left; }
}

/* --- Ay görünümü --- */
.tc-month{
  display:grid; grid-template-columns: repeat(7, 1fr); gap:4px;
}
.tc-cell{
  min-height:104px; padding:7px 6px; cursor:pointer;
  background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
  display:flex; flex-direction:column; gap:4px;
  transition: border-color var(--dur-fast);
}
.tc-cell:hover{ border-color: var(--border); }
.tc-cell.is-blank{ background:none; cursor:default; }
.tc-cell.is-today{ border-color: var(--navy); }
.tc-daynum{ font-family: var(--font-display); font-size:.82rem; font-weight:700; color: var(--ink-soft); }
.tc-cell.is-today .tc-daynum{ color: var(--navy); }
.tc-evs{ display:flex; flex-direction:column; gap:3px; min-width:0; }

/* --- Ders çipi --- */
.tc-ev{
  display:block; width:100%; text-align:left; cursor:pointer;
  padding:4px 7px; border-radius:6px; border:none;
  font-size:.72rem; font-weight:600; line-height:1.35;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
  background: var(--navy-tint); color: var(--navy-deep);
  transition: filter var(--dur-fast);
}
.tc-ev b{ font-family: var(--font-mono); font-weight:700; }
.tc-ev:hover{ filter:brightness(.95); }
.tc-ev:focus-visible{ outline:2px solid var(--orange); outline-offset:1px; }
.tc-ev.is-sched{ background: var(--navy-tint); color: var(--navy-deep); }
.tc-ev.is-done{ background: var(--green-tint); color: var(--green); }
.tc-ev.is-off{ background: var(--surface); color: var(--ink-faint); text-decoration:line-through; }

.tc-more{
  align-self:flex-start; padding:2px 6px; cursor:pointer; border:none; background:none;
  font-size:.7rem; font-weight:700; color: var(--orange-deep);
}
.tc-more:hover{ text-decoration:underline; }

/* --- Hafta / gün saat ızgarası --- */
.tc-grid{ display:grid; gap:1px; background: var(--border); border-radius: var(--radius-sm); overflow:hidden; }
.tc-corner, .tc-colhead, .tc-hour, .tc-slot{ background: var(--surface); }
.tc-colhead{
  padding:9px 6px; text-align:center; background: var(--surface-2);
}
.tc-colhead small{ display:block; font-size:.68rem; color: var(--ink-faint); font-weight:700; text-transform:uppercase; }
.tc-colhead b{ font-family: var(--font-display); font-size:1rem; }
.tc-colhead.is-today{ background: var(--navy-tint); }
.tc-colhead.is-today b{ color: var(--navy-deep); }
.tc-corner{ background: var(--surface-2); }
.tc-hour{
  padding:8px 8px; text-align:right; font-family: var(--font-mono);
  font-size:.72rem; color: var(--ink-faint); background: var(--surface-2);
}
.tc-slot{ min-height:42px; padding:4px; display:flex; flex-direction:column; gap:3px; }

.cal-legend i.done{ background: var(--green); }
.cal-legend i.miss{ background: var(--ink-faint); }

@media (max-width: 720px){
  .tc-cell{ min-height:76px; }
  .tc-ev{ font-size:.66rem; padding:3px 5px; }
  .tc-grid{ font-size:.85rem; }
}
.pkg-card-top{ display:flex; justify-content:space-between; align-items:flex-start; gap:10px; margin-bottom:14px; }
.pkg-card h3{ font-size:1.05rem; font-weight:700; }
.pkg-card .pkg-status{ font-size:.7rem; font-weight:800; letter-spacing:.03em; text-transform:uppercase; padding:4px 10px; border-radius: var(--radius-pill); flex-shrink:0; }
.pkg-status.active{ background: var(--green-tint); color: var(--green); }
.pkg-status.completed{ background: var(--surface-2); color: var(--ink-faint); }
.pkg-status.cancelled, .pkg-status.expired{ background:#FDE8E8; color:#A32020; }
.pkg-card .pkg-meta{ font-size:.82rem; color: var(--ink-faint); margin-bottom:14px; }
.pkg-bar{ height:8px; border-radius: var(--radius-pill); background: var(--surface-2); overflow:hidden; margin-bottom:8px; }
.pkg-bar-fill{ height:100%; background: var(--orange); border-radius: var(--radius-pill); transition: width .6s var(--ease); }
.pkg-progress-label{ display:flex; justify-content:space-between; font-size:.78rem; color: var(--ink-soft); font-weight:600; }

/* Ders Dokümanları — admin (düzenlenebilir) ve hesabım (salt-okunur)
   aynı satır/breadcrumb görünümünü paylaşıyor. */
.doc-toolbar{ display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; padding:16px 20px; border-bottom:1px solid var(--border); }
.doc-toolbar-btns{ display:flex; gap:8px; flex-wrap:wrap; }
.doc-crumbs{ font-size:.88rem; color: var(--ink-soft); display:flex; flex-wrap:wrap; align-items:center; gap:2px; }
.doc-crumb{ background:none; border:none; padding:2px 4px; font:inherit; color: var(--ink-soft); cursor:pointer; border-radius:4px; }
.doc-crumb:last-child{ color: var(--ink); font-weight:700; }
.doc-crumb:hover{ background: var(--surface-2); }
.doc-row{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:12px 20px; border-top:1px solid var(--border); flex-wrap:wrap; }
.doc-row[draggable="true"]{ cursor:grab; }
.doc-row[draggable="true"]:active{ cursor:grabbing; }
/* cursor miras alınır — satırın sürükleme el işareti, üstündeki gerçek
   butonlara/bağlantılara da geçip onları "tıklanamaz" gibi göstermesin. */
.doc-row .doc-actions button, .doc-row .doc-row-main.js-doc-open{ cursor:pointer; }
/* Sürükleyip bir klasörün ya da breadcrumb'ın üstüne getirince — "burağa
   bırakırsan buraya taşınır" görsel geri bildirimi. */
.doc-folder-row.doc-drop-target{ background: var(--orange-tint); outline:2px dashed var(--orange); outline-offset:-2px; }
.doc-crumb.doc-drop-target{ background: var(--orange-tint); outline:2px dashed var(--orange); }
.doc-toolbar.doc-drop-target{ background: var(--orange-tint); outline:2px dashed var(--orange); outline-offset:-2px; }
.doc-preview-body{ display:flex; align-items:center; justify-content:center; }
.doc-preview-body img{ max-width:100%; max-height:70vh; border-radius: var(--radius-md); display:block; }
.doc-preview-body audio{ width:100%; }
.doc-row-main{ display:flex; align-items:center; gap:10px; background:none; border:none; padding:0; font:inherit; text-align:left; cursor:default; flex:1; min-width:0; color: var(--ink); }
.doc-folder-row .doc-row-main{ cursor:pointer; }
.doc-folder-row .doc-row-main:hover .doc-name{ text-decoration:underline; }
.doc-svg{ width:20px; height:20px; flex:none; color: var(--ink-faint); }
.doc-folder-row .doc-svg{ color: var(--orange); }
.doc-chevron{ width:16px; height:16px; flex:none; margin-left:auto; color: var(--ink-faint); }
.doc-name{ font-weight:600; overflow-wrap:anywhere; }
.doc-name small{ display:block; font-weight:400; color: var(--ink-faint); font-size:.78rem; margin-top:2px; }
.doc-actions{ display:flex; gap:4px; flex:none; flex-wrap:wrap; }
@media (max-width:640px){
  .doc-row{ flex-direction:column; align-items:flex-start; }
  .doc-actions{ width:100%; }
}

.table-card{ background: var(--surface); border:1px solid var(--border); border-radius: var(--radius-lg); overflow:hidden; }
/* .table-card'ın overflow:hidden'i tablo köşelerini kesmek için var —
   ama admin-form'lar da (teacherForm vb.) bu sınıfı taşıyor ve artık
   içlerinde taşıp açılan .mselect-panel/.combo-list dropdown'ları
   olabiliyor; kart onları kenardan kırpıyordu. Bu kombinasyon sadece
   formlarda kullanıldığı için tablo görünümünü etkilemeden açılıyoruz. */
.table-card.admin-form{ overflow: visible; }
.load-more-btn{ display:block; width:100%; text-align:center; padding:14px; border-top:1px solid var(--border); }
.data-table{ width:100%; border-collapse: collapse; font-size:.88rem; }
.data-table th{ text-align:left; padding:14px 20px; background: var(--surface-2); color: var(--ink-faint); font-size:.74rem; text-transform:uppercase; letter-spacing:.04em; font-weight:700; }
.data-table td{ padding:14px 20px; border-top:1px solid var(--border); color: var(--ink-soft); }
.data-table td.strong{ color: var(--ink); font-weight:700; }
.pay-status{ display:inline-block; white-space:nowrap; font-size:.72rem; font-weight:800; text-transform:uppercase; padding:4px 10px; border-radius: var(--radius-pill); }
.pay-status.paid{ background: var(--green-tint); color: var(--green); }
.pay-status.pending{ background: var(--orange-tint); color: var(--orange-deep); }
.pay-status.failed, .pay-status.refunded{ background:#FDE8E8; color:#A32020; }
/* Tamamlanan Dersler tablosu aynı rozet stilini booking.status ile paylaşıyor. */
.pay-status.completed{ background: var(--green-tint); color: var(--green); }
.pay-status.cancelled, .pay-status.no_show{ background:#FDE8E8; color:#A32020; }
.pay-status.scheduled{ background: var(--orange-tint); color: var(--orange-deep); }
.table-scroll{ overflow-x:auto; }

/* Hesabım'daki tablolar (Aktif Paketlerim, Yaklaşan/Tamamlanan Dersler,
   Geçmiş Paketlerim, Ödeme Geçmişi) mobilde yatay kaydırmak yerine her
   satır kendi kartına dönüşüyor — solda etiket, sağda değer; "Yaklaşan
   Derslerim"in aksiyon hücresi (cell-actions) ayrıca alt buton satırına
   dönüşüyor. .mobile-card-table sınıfı taşıyan HER tabloya uygulanıyor,
   admin panelindeki tablolar bu sınıfı almadığı için etkilenmiyor. */
@media (max-width: 640px){
  /* Her satır zaten kendi beyaz/yuvarlak kartı — dıştaki .table-card da
     kendi (farklı yarıçaplı) beyaz kutusunu çizince köşelerde ince beyaz
     bir üçgen/sızıntı oluşuyordu (iki iç içe yuvarlak kutu). Dış kutuyu
     düzleştirip sayfanın normal arka planını gösteriyoruz, tek kat kalıyor. */
  .table-card:has(.mobile-card-table){ background:none; border:none; overflow:visible; }

  .mobile-card-table thead{ display:none; }
  .mobile-card-table, .mobile-card-table tbody, .mobile-card-table tr, .mobile-card-table td{ display:block; width:100%; }
  .mobile-card-table{ border-spacing:0 12px; border-collapse:separate; }
  .mobile-card-table tr{
    border:1px solid var(--border); border-radius: var(--radius-md); padding:4px 16px; background: var(--surface);
  }
  .mobile-card-table td{
    display:flex; align-items:center; justify-content:space-between; gap:12px;
    padding:9px 0; border-top:1px solid var(--border); text-align:right;
  }
  .mobile-card-table td:first-child{ border-top:none; }
  .mobile-card-table td[data-label]::before{
    content: attr(data-label); font-size:.72rem; font-weight:700; text-transform:uppercase;
    color: var(--ink-faint); letter-spacing:.03em; flex-shrink:0; text-align:left;
  }

  /* Admin ▸ Mezunlar: genişleyen detay satırı label:değer çifti değil,
     serbest içerik (özet + iç içe bir ders logu tablosu) — genel
     td{display:flex} kuralından muaf tutup düz blok olarak bırakıyoruz,
     kendi satırı da diğerleri gibi ayrı bir kart gibi durmasın. */
  #gradTable tr.grad-detail-row{ border:none; background:none; padding:0; margin-top:-8px; }
  #gradTable td.grad-detail-cell{ display:block; text-align:left; border-top:none; padding:0 0 8px; }

  /* Admin ▸ Kredi: son hücre (miktar + not + ekle butonu) bir label:değer
     çifti değil, kendi başına bir form — genel td{display:flex} satır
     hizasını bozuyordu, blok bırakıp içindeki .credit-add'in kendi
     flex-wrap'ine bırakıyoruz. */
  #creditTable td:last-child{ display:block; text-align:left; }
  #creditTable .credit-add{ flex-wrap:wrap; justify-content:flex-start; }
  /* İlerleme çubuğu (Aktif Paketlerim) label'ın karşısında dar kalmasın. */
  .mobile-card-table .cell-progress{ flex:1; justify-content:flex-end; min-width:0; }

  /* white-space:nowrap masaüstünde iyiydi (link + buton yan yana) ama
     mobilde "Derse Katıl (23 dk kaldı)" gibi uzun metin butonun dışına
     taşırıyordu — burada normale çevirip küçük fontla 2 satıra izin
     veriyoruz, taşma yok, sadece kutu gerektiği kadar uzuyor. */
  .mobile-card-table td.cell-actions{ padding:12px 0; gap:10px; white-space:normal; }
  .mobile-card-table td.cell-actions .btn-ghost{
    flex:1; text-align:center; padding:9px 6px; border:1.5px solid var(--border); border-radius: var(--radius-sm);
    font-size:.8rem; line-height:1.3; white-space:normal;
  }
  .mobile-card-table td.cell-actions .btn-ghost b{ display:block; font-weight:700; }
  .mobile-card-table td.cell-actions .btn-ghost small{
    display:block; font-size:.7rem; font-weight:600; opacity:.75; margin-top:1px;
  }
  .mobile-card-table td.cell-actions .js-cancel-booking{ color:#A32020; border-color:#F3C9C9; }

  /* Yaklaşan Derslerim: butonlar artık alt satırda tam genişlik değil,
     kartın sağında dikey ikili yığın — solda 4 bilgi satırı (tarih/saat/
     eğitmen/paket), sağda "Derse Katıl" + "İptal Et" üst üste. */
  #bookingsTable tr{ display:grid; grid-template-columns:1fr auto; column-gap:14px; }
  #bookingsTable td{ grid-column:1; }
  #bookingsTable td.cell-actions{
    grid-column:2; grid-row:1/5; align-self:center; width:108px;
    display:flex; flex-direction:column; justify-content:center; gap:8px;
    border-top:none; padding:0;
  }
  #bookingsTable td.cell-actions .btn-ghost{ width:100%; flex:none; }
}
.empty-note{ padding: 30px 20px; text-align:center; color: var(--ink-faint); font-size:.9rem; }

.danger-zone{ background: var(--surface); border:1.5px solid #F3C9C9; border-radius: var(--radius-lg); padding:24px 26px; display:flex; align-items:center; justify-content:space-between; gap:20px; flex-wrap:wrap; }
.danger-zone h3{ font-size:1.02rem; font-weight:700; margin-bottom:4px; }
.danger-zone p{ font-size:.86rem; color: var(--ink-faint); max-width:46ch; }
.btn-danger{ background:#D6392F; color:#fff; }
.btn-danger:hover{ background:#B72E25; }

/* ---- Modal temeli ----
   Grid/flex çocukları varsayılan min-width:auto ile gelir; bu yüzden
   uzun içerik kutuyu şişirip yatay scroll'a sebep oluyordu. Aşağıdaki
   min-width:0 kuralları modalın gerçekten küçülebilmesini sağlıyor. */
.confirm-modal{ position:fixed; inset:0; z-index:200; display:none; align-items:center; justify-content:center; padding:16px; overflow-y:auto; background: rgba(14,22,34,.5); }
.confirm-modal.show{ display:flex; }
.confirm-box{
  background: var(--surface); border-radius: var(--radius-lg); padding:28px;
  width:min(460px, 100%); max-height: calc(100vh - 32px);
  box-shadow: var(--shadow-lg);
  display:flex; flex-direction:column;
}
.confirm-box > *{ min-width:0; }

/* Başlık / gövde / alt buton çubuğu olan modallar padding'i kendi
   bölümlerinde yönetir, kutunun genel padding'i kalkar. */
.confirm-box:has(> .modal-head){ padding:0; }

/* Kendi kaydırılabilir gövdesi olmayan modallar (silme onayı, checkout)
   uzun içerikte kutunun kendisi kaysın — taşıp kesilmesin. */
.confirm-box:not(:has(> .modal-body)){ overflow-y:auto; }

/* Geniş varyant — paket düzenleme ve finans detayı gibi çok alanlı
   içerikler için. */
.modal-lg{ width:min(920px, 100%); }
/* Orta varyant — Kullanıcı Düzenle gibi, alanları normal 2 sütunlu
   ızgarada (bkz. .pkg-form) yan yana sığdırmak için varsayılan 460px
   yetmiyordu (telefon ülke+numara ikilisi kendi başına ~240px istiyor). */
.modal-md{ width:min(640px, 100%); }

/* .confirm-box h3/p kuralları bu bloktan sonra geldiği için başlık
   çubuğundaki payları burada sıfırlıyoruz. */
.confirm-box > .modal-head h3{ margin:0; }
.confirm-box > .modal-body > p:last-child{ margin-bottom:0; }
.confirm-box h3{ font-size:1.1rem; font-weight:700; margin-bottom:10px; }
.confirm-box p{ font-size:.9rem; color: var(--ink-soft); margin-bottom:22px; line-height:1.6; }
.confirm-actions{ display:flex; gap:12px; }
.confirm-actions .btn{ flex:1; }

.skeleton{ background: linear-gradient(90deg, var(--surface-2) 25%, var(--border) 37%, var(--surface-2) 63%); background-size: 400% 100%; animation: skeletonShine 1.4s ease infinite; border-radius: var(--radius-sm); }
@keyframes skeletonShine{ 0%{ background-position: 100% 50%; } 100%{ background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce){ .skeleton{ animation:none; } }

.mini-footer{ border-top:1px solid var(--border); padding:26px 0; text-align:center; color: var(--ink-faint); font-size:.82rem; }

/* ============================================================
   Ders planlama (hesabim.html) — takvim → saat → eğitmen → onay
   ============================================================ */

/* Yazar CSS'indeki display:flex/grid, UA stylesheet'inin [hidden]
   kuralını her zaman ezer — bu yüzden hidden bu sayfalarda sessizce
   çalışmıyordu (paket dropdown'ı gizliyken görünüyordu). */
[hidden]{ display:none !important; }

.booking-panel{
  background: var(--surface); border:1px solid var(--border);
  border-radius: var(--radius-lg); padding:26px; box-shadow: var(--shadow-sm);
}

/* ---- Adım göstergesi ---- */
.booking-steps{
  display:flex; flex-wrap:nowrap; gap:8px 22px; list-style:none;
  margin:0 0 24px; padding:0 0 20px; border-bottom:1px solid var(--border);
  overflow-x:auto;
}
.booking-steps li{
  display:flex; align-items:center; gap:9px; flex-shrink:0; white-space:nowrap;
  font-size:.84rem; font-weight:700; color: var(--ink-faint);
  transition: color var(--dur-fast);
}
.booking-steps li span{
  display:grid; place-items:center; width:26px; height:26px; flex-shrink:0;
  border-radius: var(--radius-pill); background: var(--surface-2);
  color: var(--ink-faint); font-size:.8rem; font-family: var(--font-display);
  transition: background var(--dur-fast), color var(--dur-fast);
}
.booking-steps li.is-active{ color: var(--ink); }
.booking-steps li.is-active span{ background: var(--orange); color: var(--on-accent); }
.booking-steps li.is-done{ color: var(--ink-soft); }
.booking-steps li.is-done span{ background: var(--green); color:#fff; }

/* ---- İki kolon: takvim + sağ panel ----
   align-items:stretch + her iki kolon da flex column: hangi kolonun
   içeriği daha uzunsa ikisi de o boya uzuyor, buton grupları da
   margin-top:auto ile en alta sabitleniyor — böylece takvimin "Gün
   seç" butonuyla saat panelinin "Rezerve Et" butonu her zaman aynı
   yatay hizada kalıyor, içerik uzunluğu ne olursa olsun. ---- */
.booking-cols{ display:grid; grid-template-columns: 1.05fr .95fr; gap:28px; align-items:stretch; }
/* Grid kolonları varsayılan min-width:auto ile gelir — "Gün seç" butonu
   2+ gün seçilince "Pazartesi, Perşembe günleri seçildi — Saat Seç" gibi
   uzun bir metne dönüyor, .btn'nin global white-space:nowrap'ı da bunu
   tek satırda tutmaya çalışınca kolonun kendisi o metnin genişliğine göre
   büyüyüp takvimi sağa kaydırıyordu. min-width:0 kolonun küçülebilmesini
   sağlıyor, butonda da metin normal sarılıyor. */
.booking-cols > *{ min-width:0; }
#calNextStepBtn{ white-space:normal; text-align:center; line-height:1.3; }
/* Onay adımında sağ kolon (onay tablosu) uzun bir liste olabilir — o
   zaman stretch, takvimi de o boya uzatıp "Gün seç" butonunu sayfanın
   dibine sürüklüyordu. Bu adımda hizalamayı kapatıyoruz. */
.booking-cols.step-confirm{ align-items:start; }
@media (max-width: 900px){ .booking-cols{ grid-template-columns:1fr; gap:24px; } }
/* Seçilen eğitmen(ler) — iki gerçek kolonun (takvim/panel) ÜSTÜNDE, ikisini
   birden kaplayan kendi satırı; yoksa 3. bir grid öğesi olarak sıraya
   girip iki kolonu bozardı. */
.selected-teachers{ grid-column: 1 / -1; display:flex; flex-wrap:wrap; gap:8px; }
.selected-teacher-chip{
  display:inline-flex; align-items:center; gap:8px; padding:6px 14px 6px 6px;
  background: var(--surface-2); border-radius: var(--radius-pill); font-size:.86rem; font-weight:700; color: var(--ink);
}
.selected-teacher-chip .dash-avatar{ width:28px; height:28px; font-size:.7rem; }
.cal{ display:flex; flex-direction:column; }
.booking-side > .booking-block{ display:flex; flex-direction:column; flex:1; }
.cal-actions, .time-actions{ margin-top:auto; display:flex; flex-direction:column; gap:8px; padding-top:14px; }
.confirm-reset-row{ display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:10px; flex-wrap:wrap; }

/* ---- Ders Planla: yöntem seçim ekranı (mavi hap / kırmızı hap) ---- */
.plan-choice{
  position:relative; overflow:hidden; border-radius: var(--radius-lg);
  background:#04140a; padding:36px 24px; text-align:center;
}
.plan-choice-rain{ position:absolute; inset:0; width:100%; height:100%; opacity:.55; }
.plan-choice-inner{ position:relative; z-index:1; }
.plan-choice .booking-hint{ color:#C9D8CF; max-width:46ch; margin:0 auto 26px; }
.plan-choice-pills{ display:flex; gap:18px; justify-content:center; flex-wrap:wrap; }
.plan-pill{
  width:260px; text-align:left; padding:20px; border-radius: var(--radius-lg);
  border:1.5px solid transparent; cursor:pointer; color:#fff;
  display:flex; flex-direction:column; gap:6px;
  transition: transform var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);
}
.plan-pill:hover{ transform: translateY(-3px); }
.plan-pill b{ font-size:1.05rem; }
.plan-pill small{ opacity:.85; font-weight:400; line-height:1.4; }
.plan-pill-blue{ background: var(--navy); box-shadow: 0 14px 28px -10px rgba(56,113,177,.55); }
.plan-pill-blue:hover{ box-shadow: 0 18px 34px -10px rgba(56,113,177,.65); }
.plan-pill-red{ background:#D6392F; box-shadow: 0 14px 28px -10px rgba(214,57,47,.55); }
.plan-pill-red:hover{ box-shadow: 0 18px 34px -10px rgba(214,57,47,.65); }
@media (max-width:640px){ .plan-pill{ width:100%; max-width:340px; } }

/* ---- Takvim ---- */
.cal-head{ display:flex; align-items:center; justify-content:space-between; margin-bottom:14px; }
.cal-title{ font-family: var(--font-display); font-weight:700; font-size:1rem; }
.cal-nav{
  width:44px; height:44px; display:grid; place-items:center; cursor:pointer;
  border-radius: var(--radius-pill); background: var(--surface-2); color: var(--ink);
  font-size:1.3rem; line-height:1; border:1.5px solid transparent;
  transition: border-color var(--dur-fast), background var(--dur-fast);
}
.cal-nav:hover:not(:disabled){ border-color: var(--orange); }
.cal-nav:disabled{ opacity:.35; cursor:not-allowed; }

.cal-dow{
  display:grid; grid-template-columns: repeat(7, 1fr); gap:4px; margin-bottom:6px;
}
.cal-dow span{
  text-align:center; font-size:.72rem; font-weight:700; letter-spacing:.04em;
  color: var(--ink-faint); text-transform:uppercase; padding:4px 0;
}

.cal-grid{ display:grid; grid-template-columns: repeat(7, 1fr); gap:4px; user-select:none; }
.cal-day{
  position:relative; min-height:46px; padding:6px 0 12px;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px;
  border-radius: var(--radius-sm); border:1.5px solid transparent;
  background: var(--surface-2); color: var(--ink);
  font-family: var(--font-display); font-size:.9rem; font-weight:600;
  cursor:pointer; transition: background var(--dur-fast), border-color var(--dur-fast), color var(--dur-fast);
}
.cal-day.is-blank{ background:none; border:none; cursor:default; min-height:46px; }
.cal-day.has-slots:hover{ border-color: var(--orange); background: var(--surface); }
.cal-day.is-today{ border-color: var(--navy); }
.cal-day.is-selected{ background: var(--orange); border-color: var(--orange); color: var(--on-accent); }
.cal-day.is-past, .cal-day.is-full{
  background:none; color: var(--ink-faint); opacity:.5; cursor:not-allowed;
}
.cal-dot{
  position:absolute; bottom:7px; width:5px; height:5px; border-radius:50%;
  background: var(--green);
}
.cal-day.is-past .cal-dot, .cal-day.is-full .cal-dot{ display:none; }
.cal-day.is-selected .cal-dot{ background: var(--on-accent); }

/* Rezervasyon listesinde (bk.cart) zaten dersi olan gün — dolu yeşil.
   Aynı gün şu an ayrıca seçiliyorsa (is-selected, turuncu) o öncelikli. */
.cal-day.is-reserved{ background: var(--green); border-color: var(--green); color: var(--on-accent); }
.cal-day.is-reserved.is-selected{ background: var(--orange); border-color: var(--orange); }
.cal-day.is-reserved .cal-dot{ background: var(--on-accent); }

.cal-legend{
  display:flex; align-items:center; gap:16px; margin-top:14px;
  font-size:.76rem; color: var(--ink-faint); flex-wrap:wrap; font-weight:700;
}
/* Tek kelimelik etiketler ("müsait", "dolu", "rezerve") artık sarmıyor,
   ama sarsa bile ikon metinden ayrı satıra düşmesin. */
.cal-legend span{ white-space:nowrap; }
.cal-legend i{ display:inline-block; width:7px; height:7px; border-radius:50%; margin-right:6px; vertical-align:middle; }
.cal-legend i.ok{ background: var(--green); }
.cal-legend i.none{ background: var(--border); }
/* Küçük yeşil nokta "müsait gün" ile karışmasın diye rezervasyon
   swatch'ı gerçek gün hücresinin küçültülmüş hali gibi — dolu, kare,
   daha büyük. */
.cal-legend i.reserved-swatch{
  width:12px; height:12px; border-radius:4px; background: var(--green);
}

/* ---- Sağ panel blokları ---- */
.booking-side{ display:flex; flex-direction:column; gap:20px; }
.booking-block h3{
  font-family: var(--font-display); font-size:.95rem; font-weight:700; margin-bottom:12px;
}
.booking-hint{ font-size:.84rem; color: var(--ink-faint); line-height:1.6; }
#cartPersistNote{
  background: var(--orange-tint); color: var(--orange-deep);
  border-radius: var(--radius-sm); padding:10px 14px; margin-bottom:16px;
}
#cartPersistNote b{ color: inherit; }
.cart-note-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.cart-note-actions{ display:flex; align-items:center; gap:8px; flex-shrink:0; }
.cart-note-list{ margin:8px 0 0; font-size:.82rem; }

/* ---- Saat çipleri ---- */
.time-grid{ display:grid; grid-template-columns: repeat(5, 1fr); gap:8px; }
@media (max-width: 480px){ .time-grid{ grid-template-columns: repeat(3, 1fr); } }
.time-chip{
  min-height:44px; padding:10px 8px; cursor:pointer;
  border-radius: var(--radius-sm); border:1.5px solid var(--border);
  background: var(--surface-2); color: var(--ink);
  font-family: var(--font-mono); font-size:.9rem; font-weight:600;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1px;
  transition: border-color var(--dur-fast), background var(--dur-fast), color var(--dur-fast);
}
.time-chip small{ font-size:.66rem; font-family: var(--font-body); color: var(--ink-faint); font-weight:600; }
.time-chip:hover{ border-color: var(--orange); background: var(--surface); }
.time-chip.is-selected{ background: var(--orange); border-color: var(--orange); color: var(--on-accent); }
.time-chip.is-selected small{ color: var(--on-accent); opacity:.75; }

/* ---- Eğitmen listesi ---- */
.teacher-list{ display:flex; flex-direction:column; gap:9px; max-height:320px; overflow-y:auto; }
.teacher-row{
  display:flex; align-items:center; gap:12px; text-align:left; width:100%;
  min-height:56px; padding:11px 14px; cursor:pointer;
  border-radius: var(--radius-sm); border:1.5px solid var(--border);
  background: var(--surface-2);
  transition: border-color var(--dur-fast), background var(--dur-fast);
}
.teacher-row:hover{ border-color: var(--orange); background: var(--surface); }
.teacher-row.is-selected{ border-color: var(--orange); background: var(--orange-tint); }
.teacher-row b{ display:block; font-size:.92rem; color: var(--ink); }
.teacher-row small{ display:block; font-size:.78rem; color: var(--ink-faint); font-weight:400; }

/* ---- Eğitmen filtresi (sihirbaz 1. adım) ---- */
.teacher-search{
  width:100%; background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
  padding:12px 15px; font-size:.92rem; color: var(--ink); margin:14px 0 10px;
}
.teacher-search:focus{ border-color: var(--orange); background: var(--surface); outline:none; }
.teacher-filter-actions{ display:flex; gap:8px; margin-bottom:12px; }
.btn-xs{ padding:6px 12px; font-size:.78rem; }
.teacher-filter-list{ display:flex; flex-direction:column; gap:9px; max-height:420px; overflow-y:auto; }
.teacher-row-check{ position:relative; }
.teacher-check{
  flex:0 0 auto; width:20px; height:20px; border-radius:6px; border:1.5px solid var(--border);
  background: var(--surface); position:relative;
}
.teacher-row-check.is-selected .teacher-check{ background: var(--orange); border-color: var(--orange); }
.teacher-row-check.is-selected .teacher-check::after{
  content:""; position:absolute; left:6px; top:2px; width:5px; height:10px;
  border:solid var(--on-accent); border-width:0 2px 2px 0; transform: rotate(45deg);
}

/* ---- Çoklu gün: her seçili gün için ayrı saat bölümü ----
   Sabit sütun sayısı (auto-fill değil) — böylece art arda gelen her
   günün saat çipleri aynı sütunlarda hizalanır, son satırda kaç çip
   kaldığından bağımsız olarak. ---- */
.time-section + .time-section{ margin-top:18px; }
.time-section h4{ font-family: var(--font-display); font-size:.86rem; font-weight:700; margin-bottom:8px; color: var(--ink-soft); }

/* ---- Sepet (onay adımı) ---- */
.cart-table-wrap{ overflow-x:auto; border:1px solid var(--border); border-radius: var(--radius-md); margin-bottom:8px; }
.cart-table{ width:100%; border-collapse:collapse; font-size:.86rem; }
.cart-table th{ text-align:left; font-size:.74rem; text-transform:uppercase; letter-spacing:.03em; color: var(--ink-faint); padding:10px 12px; background: var(--surface-2); }
.cart-table td{ padding:10px 12px; border-top:1px solid var(--border); vertical-align:middle; }
.cart-table tr.cart-row-error td{ background: #FDE8E8; }
:root[data-theme="dark"] .cart-table tr.cart-row-error td{ background:#3A1414; }
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .cart-table tr.cart-row-error td{ background:#3A1414; } }
.cart-error{ color:#A32020; font-weight:600; }
:root[data-theme="dark"] .cart-error{ color:#F3A6A6; }
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .cart-error{ color:#F3A6A6; } }
.cart-teacher-pick{
  background: var(--surface-2); border:1.5px solid var(--border); border-radius: var(--radius-sm);
  padding:7px 10px; font-size:.84rem; color: var(--ink); cursor:pointer;
}

/* ---- Onay özeti ---- */
.book-summary{
  background: var(--surface-2); border:1px solid var(--border);
  border-radius: var(--radius-md); padding:18px; margin-bottom:16px;
}
.book-summary dl{ display:grid; grid-template-columns: auto 1fr; gap:9px 16px; margin:0; }
.book-summary dt{ font-size:.8rem; font-weight:700; color: var(--ink-faint); }
.book-summary dd{ margin:0; font-size:.9rem; font-weight:600; color: var(--ink); text-align:right; }
.book-summary .book-when{ color: var(--orange-deep); }

.booking-block select{
  background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
  padding:13px 15px; font-size:.92rem; color: var(--ink); width:100%; cursor:pointer;
}
.booking-block select:focus{ border-color: var(--orange); background: var(--surface); outline:none; }

/* ---- Odak halkaları. Sitenin geri kalanı outline:none kullanıyor;
       klavyeyle gezilen bir grid'de bunu tekrarlamıyoruz. ---- */
.cal-day:focus-visible,
.cal-nav:focus-visible,
.time-chip:focus-visible,
.teacher-row:focus-visible,
.teacher-row-check:focus-visible,
.wk-add:focus-visible,
.wk-chip button:focus-visible{
  outline:2px solid var(--orange); outline-offset:2px;
}

@media (prefers-reduced-motion: reduce){
  .cal-day, .time-chip, .teacher-row, .cal-nav{ transition:none; }
}

/* ============================================================
   Haftalık program editörü (egitmenim.html)
   ============================================================ */
.wk-editor{ padding:8px 0; }
.wk-day{
  display:grid; grid-template-columns: 116px 1fr auto; gap:14px; align-items:center;
  padding:14px 22px; border-bottom:1px solid var(--border);
}
.wk-day:last-child{ border-bottom:none; }
.wk-day > b{ font-size:.88rem; font-weight:700; }
.wk-ranges{ display:flex; flex-wrap:wrap; gap:8px; }
.wk-empty{ font-size:.82rem; color: var(--ink-faint); }
.wk-chip{
  display:inline-flex; align-items:center; gap:8px;
  background: var(--orange-tint); border-radius: var(--radius-pill);
  padding:7px 8px 7px 14px; font-family: var(--font-mono); font-size:.82rem; font-weight:600;
  color: var(--orange-deep);
}
.wk-chip button{
  width:22px; height:22px; display:grid; place-items:center; cursor:pointer;
  border-radius:50%; background: rgba(var(--orange-rgb),.22); color: var(--orange-deep);
  font-size:.9rem; line-height:1;
}
.wk-chip button:hover{ background: rgba(var(--orange-rgb),.4); }
.wk-add{
  padding:9px 16px; min-height:40px; cursor:pointer; white-space:nowrap;
  border-radius: var(--radius-pill); border:1.5px dashed var(--border);
  background:none; color: var(--ink-soft); font-size:.82rem; font-weight:700;
  transition: border-color var(--dur-fast), color var(--dur-fast);
}
.wk-add:hover{ border-color: var(--orange); color: var(--orange-deep); }

.wk-addrow{ display:flex; align-items:center; gap:8px; flex-wrap:wrap; }
/* Native <input type="time">'ın kutusu/ikonu bilgisayardan bilgisayara
   (hatta tarayıcıdan tarayıcıya — kimi sade sayı kutusu, kimi açılır
   liste) tamamen farklı çiziliyordu. Düz bir metin kutusu + kendi HH:MM
   biçimlendirmemizle (bkz. egitmenim.html#formatTimeInput) görünüm artık
   her yerde birebir aynı, tamamen bizim CSS'imiz. */
.wk-addrow .js-time{
  width:76px; text-align:center;
  background: var(--surface-2); border:1.5px solid transparent; border-radius: var(--radius-sm);
  padding:9px 11px; font-size:.86rem; color: var(--ink); font-family: var(--font-mono);
}
.wk-addrow .js-time:focus{ border-color: var(--orange); background: var(--surface); outline:none; }

@media (max-width: 640px){
  .wk-day{ grid-template-columns:1fr; gap:10px; padding:16px 18px; }
  .booking-panel{ padding:18px; }
  .cal-day{ min-height:42px; font-size:.84rem; }
  .booking-steps{ gap:4px 8px; font-size:.7rem; }
  .booking-steps li span{ width:20px; height:20px; font-size:.68rem; }
}

/* Ders detayında öğrenci başlığı */
.ev-who{
  display:flex; align-items:center; gap:12px; margin-bottom:16px;
  padding-bottom:16px; border-bottom:1px solid var(--border);
}
.ev-who b{ font-family: var(--font-display); font-size:1.02rem; }

/* ============================================================
   Mobil alt gezinme çubuğu (hesabim.html). Masaüstünde hiç yok — dar
   ekranda üst header'daki tema/çıkış/anasayfa kalabalığının yerini alıyor;
   header o zaman sadece ortalanmış logoya iniyor (has-mobile-dock).
   ============================================================ */
.mobile-dock{ display:none; }

@media (max-width: 640px){
  .has-mobile-dock .nav-actions{ display:none; }
  .has-mobile-dock .chrome-header{ justify-content:center; }
  /* Fotoğraf değiştirme artık dock menüsünde de var — profil satırında
     tekrar etmesin, orada logonun/kartların yanında garip duruyordu. */
  .has-mobile-dock .avatar-actions{ display:none; }
  .has-mobile-dock .avatar-edit-badge{ display:flex; }

  /* "Yeni Paket Al" artık dock'ta (sağ ikinci sıra) — profil satırında
     tekrar etmesin. */
  #newPackageBtn{ display:none; }

  /* Dock çubuğu 66px civarında ama tam o değer footer'ı (mini-footer) bara
     yapışık/kısmen örtük bırakıyordu — biraz fazladan pay bırakıyoruz. */
  body{ padding-bottom: calc(92px + env(safe-area-inset-bottom, 0px)); }

  .mobile-dock{
    display:flex; align-items:flex-end; justify-content:space-between;
    position:fixed; left:0; right:0; bottom:0; z-index:150;
    padding:8px 6px calc(8px + env(safe-area-inset-bottom, 0px));
  }
  /* Barın arka planı/üst çizgisi artık bir pseudo-element'te — mask'i
     .mobile-dock'un kendisine koyarsak CSS mask element'in TÜM render'ını
     (çocukları dahil) etkiliyor, penguen de deliğin içinde kaybolup
     gidiyordu. Arka planı ayrı bir katmana taşıyıp sadece onu maskeliyoruz,
     penguen ve diğer öğeler normal, maskesiz çocuklar olarak üstte kalıyor. */
  .mobile-dock::before{
    content:""; position:absolute; inset:0; z-index:-1;
    background: var(--surface); border-top:1px solid var(--border);
    /* Ortada, penguenin oturduğu yerde gerçek dairesel bir oyuk — renkle
       taklit etmiyoruz, gerçekten şeffaf, üst kenar (border-top dahil) o
       noktada geriye çekiliyor. */
    -webkit-mask-image: radial-gradient(circle at 50% 0px, transparent 38px, #000 40px);
    mask-image: radial-gradient(circle at 50% 0px, transparent 38px, #000 40px);
  }
  .dock-item{
    flex:1; display:flex; flex-direction:column; align-items:center; gap:3px;
    background:none; border:none; color: var(--ink-faint); font-size:.64rem; font-weight:600;
    padding:6px 2px; text-decoration:none; cursor:pointer;
  }
  .dock-item svg{ width:22px; height:22px; }
  .dock-item:active{ color: var(--orange-deep); }
  /* Penguen büyüyünce hemen bitişiğindeki iki öğe (Tamamlanan / Yeni Paket)
     ortadaki daireye fazla yaklaşmasın diye biraz açıyoruz. */
  .mobile-dock .dock-item:nth-child(2){ margin-right:10px; }
  .mobile-dock .dock-item:nth-child(4){ margin-left:10px; }

  /* Ortadaki yuvarlak: çubuğun üst çizgisi tam ortasından geçiyor (yarısı
     barın içindeki gerçek oyukta, yarısı dışında/üstünde havada —
     top:0 + translateY(-50%)). Etrafındaki boşluk artık .mobile-dock'un
     mask'iyle açılan gerçek bir delik — ayrıca renk eşlemeye gerek yok. */
  .dock-fab{
    position:absolute; left:50%; top:0; transform:translate(-50%, -50%);
    width:64px; height:64px; border-radius:50%;
    background: var(--surface); border:3px solid var(--orange);
    box-shadow: 0 6px 14px rgba(0,0,0,.18);
    display:flex; align-items:center; justify-content:center; cursor:pointer;
    z-index:171;
  }
  .dock-fab img{ width:48px; height:48px; }

  .dock-sheet-backdrop{
    position:fixed; inset:0; background: rgba(14,22,34,.2); z-index:160;
    opacity:0; transition: opacity .16s ease;
  }
  .dock-sheet-backdrop.show{ opacity:1; }

  /* iOS'taki "basılı tut" menüsü gibi — tam ekran alttan çıkan bir tabaka
     değil, ikonun tam üstünde küçük, ok işaretli bir kart. */
  .dock-sheet{
    position:fixed; left:50%; bottom:104px; z-index:170;
    min-width:196px; background: var(--surface); border:1px solid var(--border);
    border-radius:16px; padding:6px; transform-origin: bottom center;
    transform: translateX(-50%) translateY(6px) scale(.92);
    opacity:0; pointer-events:none;
    transition: opacity .16s ease, transform .16s ease;
    box-shadow: 0 18px 44px -14px rgba(0,0,0,.3);
  }
  .dock-sheet::after{
    content:""; position:absolute; left:50%; bottom:-6px; width:12px; height:12px;
    background: var(--surface); border-right:1px solid var(--border); border-bottom:1px solid var(--border);
    transform: translateX(-50%) rotate(45deg);
  }
  .dock-sheet.show{ opacity:1; transform: translateX(-50%) translateY(0) scale(1); pointer-events:auto; }
  .dock-sheet-item{
    display:flex; align-items:center; gap:10px; width:100%; text-align:left;
    background:none; border:none; padding:10px 12px; font-size:.86rem; font-weight:600; color: var(--ink);
    border-radius:10px;
  }
  .dock-sheet-item:active{ background: var(--surface-2); }
  .dock-sheet-item svg{ width:18px; height:18px; color: var(--ink-faint); flex-shrink:0; }
  .dock-sheet-item.is-danger{ color:#A32020; }
  .dock-sheet-item.is-danger svg{ color:#A32020; }
}
