@font-face {
  font-family: "Inter";
  src: url("fonts/Inter-Regular-latin-ext.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  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: "Inter";
  src: url("fonts/Inter-Regular-latin.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
  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;
}

@font-face {
  font-family: "Inter";
  src: url("fonts/Inter-Medium-latin-ext.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  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: "Inter";
  src: url("fonts/Inter-Medium-latin.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
  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;
}

@font-face {
  font-family: "Inter";
  src: url("fonts/Inter-SemiBold-latin-ext.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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: "Inter";
  src: url("fonts/Inter-SemiBold-latin.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  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;
}

@font-face {
  font-family: "Inter";
  src: url("fonts/Inter-Bold-latin-ext.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  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: "Inter";
  src: url("fonts/Inter-Bold-latin.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  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;
}

@font-face {
  font-family: "Inter";
  src: url("fonts/Inter-ExtraBold-latin-ext.woff2") format("woff2");
  font-weight: 800;
  font-style: normal;
  font-display: swap;
  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: "Inter";
  src: url("fonts/Inter-ExtraBold-latin.woff2") format("woff2");
  font-weight: 800;
  font-style: normal;
  font-display: swap;
  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;
}

/* Public Sans (degisken font, wght 400-700) - Satinalma Ai referansindaki daha
   yuvarlak/samimi his icin, su an SADECE /admin/users pilotunda deneniyor
   (bkz. --font-family-admin). Genele yayilmadan once onaylanmasi bekleniyor. */
@font-face {
  font-family: "Public Sans";
  src: url("fonts/PublicSans-Variable-latin.woff2") format("woff2");
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
  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;
}
@font-face {
  font-family: "Public Sans";
  src: url("fonts/PublicSans-Variable-latin-ext.woff2") format("woff2");
  font-weight: 400 700;
  font-style: normal;
  font-display: swap;
  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;
}

:root {
  --color-primary: #00BF8F;
  --color-primary-dark: #003D33;
  --color-secondary: #1B211D;
  --font-family-admin: "Public Sans", -apple-system, BlinkMacSystemFont, sans-serif;
  --color-accent-wine: #E11D48;
  --color-paper: #EEF1EA;
  --color-sage-tint: rgba(0, 191, 143, 0.12);
  --color-charcoal: #333333;
  --color-mist: #3A3A3A;
  --color-border: rgba(15, 23, 42, 0.08);
  --color-warning: #C97F2E;
  --color-warning-tint: #FBEEDD;
  --color-wine-tint: rgba(225, 29, 72, 0.12);
  --color-ink: #11140F;
  --color-ink-soft: #1B2019;
  --color-ink-border: #2C3229;
  --color-ink-mist: #8C978A;
  --color-accent-blue: #3B82F6;
  --color-accent-blue-soft: #E4ECFF;

  /* Buzlu cam (glassmorphism) yardimci token'lari - logo ile ayni acik zemin */
  --color-page-gradient: linear-gradient(160deg, #FDFDFD 0%, #F6F6F6 55%, #EEEEEE 100%);
  --glass-bg: rgba(255, 255, 255, 0.82);
  --glass-bg-flat: rgba(255, 255, 255, 0.82);
  --glass-border: rgba(15, 23, 42, 0.08);
  --glass-blur: blur(20px) saturate(1.2);
  --glass-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 10px 28px rgba(15, 23, 42, 0.07);
  --glass-shadow-hover: 0 4px 10px rgba(15, 23, 42, 0.06), 0 18px 36px rgba(15, 23, 42, 0.1);

  /* Modul renk kodlamasi: her ozellik alani kendi rengiyle taninir */
  --color-module-measurement: #14B8A6;
  --color-module-measurement-tint: rgba(20, 184, 166, 0.28);
  --color-module-appointment: #3B82F6;
  --color-module-appointment-tint: rgba(59, 130, 246, 0.24);
  --color-module-nutrition: #F59E0B;
  --color-module-nutrition-tint: rgba(245, 158, 11, 0.26);
  --color-module-notification: #E11D48;
  --color-module-notification-tint: rgba(225, 29, 72, 0.22);
  --color-module-ai: #003D33;
  --color-module-ai-icon: #00BF8F;
  --color-module-ai-tint: rgba(0, 191, 143, 0.55);
  --color-module-neutral: #868E96;
  --color-module-neutral-tint: rgba(134, 142, 150, 0.28);
  --color-module-sleep: #6366F1;
  --color-module-sleep-tint: rgba(99, 102, 241, 0.24);
  --color-module-stress: #06B6D4;
  --color-module-stress-tint: rgba(6, 182, 212, 0.26);
  --color-module-lifestyle: #F97316;
  --color-module-lifestyle-tint: rgba(249, 115, 22, 0.26);
  --color-module-water: #0EA5E9;
  --color-module-water-tint: rgba(14, 165, 233, 0.24);

  --font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;

  --radius-sm: 10px;
  --radius-md: 16px;
  --radius-lg: 24px;
  --radius-xl: 28px;

  --spacing-xs: 4px;
  --spacing-sm: 8px;
  --spacing-md: 16px;
  --spacing-lg: 24px;
  --spacing-xl: 40px;

  /* Dash bilesenlerinin (dropdown/checklist/radio) kendi mor vurgu rengi -
     koyu/notr renge ceviriliyor (secim sonrasi/:focus cerceve fix) */
  --Dash-Fill-Interactive-Strong: var(--color-secondary);
}

body {
  margin: 0;
  background: var(--color-page-gradient);
  background-attachment: fixed;
  color: var(--color-charcoal);
  font-family: var(--font-family);
}

/* Uye tarafi icin denemelik yumusak diyagonal gradient zemin (kullanicinin
   gonderdigi referans gorsele gore, 2026-08-19) - begenilmezse
   var(--color-page-gradient)'e geri donulebilir, bkz. proje hafizasi. */
body:has(.app-shell-dock) {
  background: linear-gradient(165deg, #C7E8F3 0%, #CFEFDD 35%, #EAF6E4 60%, #FBF8EF 85%, #FFFFFF 100%);
  background-attachment: fixed;
}

/* Dash'in kendi "Loading..." yer tutucusu (dash.py icindeki _app_entry sabiti,
   index_string'e {%app_entry%} ile enjekte ediliyor, elle degistirilemiyor) -
   metni gizleyip yerine kendi mesajimizi ::before ile basiyoruz */
._dash-loading {
  font-size: 0;
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-page-gradient);
}

._dash-loading::before {
  content: "Fit Takip Ai verileriniz yükleniyor...";
  font-size: 0.95rem;
  font-weight: 600;
  font-family: var(--font-family);
  color: var(--color-mist);
}

/* Form kontrolleri tarayicida varsayilan olarak body fontunu miras almaz, garanti altina alinir */
button, input, select, textarea, optgroup {
  font-family: var(--font-family);
}

@media (prefers-reduced-motion: reduce) {
  * {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/* ---- Navbar ikon linkleri (Satinalma Ai ikon-rayi referansi: kucuk ikon + hover tooltip) ---- */
.navbar-icon-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  width: 44px;
  height: 44px;
  padding: 0;
  border-radius: 999px;
  position: relative;
}

.navbar-icon-link:hover {
  background-color: #F5F5F7;
}

.navbar-icon {
  width: 21px;
  height: 21px;
  display: block;
  background-color: var(--color-secondary);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  transition: background-color 0.15s ease;
}

.navbar-icon-link:hover .navbar-icon {
  background-color: var(--color-primary-dark);
}

.navbar-icon-home { -webkit-mask-image: url(/assets/icons/home.svg); mask-image: url(/assets/icons/home.svg); }
.navbar-icon-habit { -webkit-mask-image: url(/assets/icons/habit.svg); mask-image: url(/assets/icons/habit.svg); }
.navbar-icon-bar-chart { -webkit-mask-image: url(/assets/icons/bar-chart.svg); mask-image: url(/assets/icons/bar-chart.svg); }
.navbar-icon-ruler { -webkit-mask-image: url(/assets/icons/ruler.svg); mask-image: url(/assets/icons/ruler.svg); }
.navbar-icon-calendar { -webkit-mask-image: url(/assets/icons/calendar.svg); mask-image: url(/assets/icons/calendar.svg); }
.navbar-icon-leaf { -webkit-mask-image: url(/assets/icons/leaf.svg); mask-image: url(/assets/icons/leaf.svg); }
.navbar-icon-flame { -webkit-mask-image: url(/assets/icons/flame.svg); mask-image: url(/assets/icons/flame.svg); }
.navbar-icon-utensils { -webkit-mask-image: url(/assets/icons/utensils.svg); mask-image: url(/assets/icons/utensils.svg); }
.navbar-icon-spark { -webkit-mask-image: url(/assets/icons/spark.svg); mask-image: url(/assets/icons/spark.svg); }
.navbar-icon-user-search { -webkit-mask-image: url(/assets/icons/user-search.svg); mask-image: url(/assets/icons/user-search.svg); }
.navbar-icon-bell { -webkit-mask-image: url(/assets/icons/bell.svg); mask-image: url(/assets/icons/bell.svg); }
.navbar-icon-users { -webkit-mask-image: url(/assets/icons/users.svg); mask-image: url(/assets/icons/users.svg); }
.navbar-icon-user-check { -webkit-mask-image: url(/assets/icons/user-check.svg); mask-image: url(/assets/icons/user-check.svg); }
.navbar-icon-inbox { -webkit-mask-image: url(/assets/icons/inbox.svg); mask-image: url(/assets/icons/inbox.svg); }
.navbar-icon-user-circle { -webkit-mask-image: url(/assets/icons/user-circle.svg); mask-image: url(/assets/icons/user-circle.svg); }
.navbar-icon-logout { -webkit-mask-image: url(/assets/icons/logout.svg); mask-image: url(/assets/icons/logout.svg); }
.navbar-icon-activity { -webkit-mask-image: url(/assets/icons/activity.svg); mask-image: url(/assets/icons/activity.svg); }
.navbar-icon-dumbbell { -webkit-mask-image: url(/assets/icons/dumbbell.svg); mask-image: url(/assets/icons/dumbbell.svg); }
.navbar-icon-percent { -webkit-mask-image: url(/assets/icons/percent.svg); mask-image: url(/assets/icons/percent.svg); }
.navbar-icon-scale { -webkit-mask-image: url(/assets/icons/scale.svg); mask-image: url(/assets/icons/scale.svg); }
.navbar-icon-compass { -webkit-mask-image: url(/assets/icons/compass.svg); mask-image: url(/assets/icons/compass.svg); }
.navbar-icon-wave { -webkit-mask-image: url(/assets/icons/wave.svg); mask-image: url(/assets/icons/wave.svg); }
.navbar-icon-box { -webkit-mask-image: url(/assets/icons/box.svg); mask-image: url(/assets/icons/box.svg); }
.navbar-icon-qr { -webkit-mask-image: url(/assets/icons/qr.svg); mask-image: url(/assets/icons/qr.svg); }
.navbar-icon-clock { -webkit-mask-image: url(/assets/icons/clock.svg); mask-image: url(/assets/icons/clock.svg); }
.navbar-icon-tag { -webkit-mask-image: url(/assets/icons/tag.svg); mask-image: url(/assets/icons/tag.svg); }
.navbar-icon-stretch { -webkit-mask-image: url(/assets/icons/stretch.svg); mask-image: url(/assets/icons/stretch.svg); }
.navbar-icon-gear { -webkit-mask-image: url(/assets/icons/gear.svg); mask-image: url(/assets/icons/gear.svg); }
.navbar-icon-plus { -webkit-mask-image: url(/assets/icons/plus.svg); mask-image: url(/assets/icons/plus.svg); }
.navbar-icon-more-horizontal { -webkit-mask-image: url(/assets/icons/more-horizontal.svg); mask-image: url(/assets/icons/more-horizontal.svg); }

.navbar-icon-link[data-tooltip]::before {
  content: attr(data-tooltip);
  position: absolute;
  top: calc(100% + 10px);
  left: 50%;
  transform: translateX(-50%) translateY(-4px);
  background-color: var(--color-secondary);
  color: #FFFFFF;
  font-size: 0.68rem;
  font-weight: 600;
  padding: 5px 10px;
  border-radius: 8px;
  white-space: nowrap;
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.15s ease, transform 0.15s ease;
  z-index: 30;
}

.navbar-icon-link:hover::before {
  opacity: 1;
  transform: translateX(-50%) translateY(0);
}

.navbar-avatar {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  font-size: 0.8rem;
  box-shadow: none;
}

.navbar-logout-button {
  background: linear-gradient(310deg, #00816B 0%, #00BF8F 100%);
  border: none;
  padding: 0;
  margin-bottom: 0;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(0, 191, 143, 0.35);
  transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}

.navbar-logout-button .navbar-icon {
  background-color: #FFFFFF;
}

.navbar-logout-button:hover {
  background: linear-gradient(310deg, #00695A 0%, #00A87D 100%);
  transform: none;
  box-shadow: 0 6px 18px rgba(0, 191, 143, 0.45);
}

.navbar-logout-button:hover .navbar-icon {
  background-color: #FFFFFF;
}

/* ---- Uygulama iskeleti: sol sidenav + topbar (Soft UI Dashboard referansi) ---- */
.app-shell {
  min-height: 100vh;
}

/* client-side navigasyonla (dcc.Link) landing/uyelik-basvuru/login gibi public
   bir sayfaya gidildiginde, shell DOM'da kalmaya devam ediyor (bkz. navbar.py
   render_app_shell yorumu) - bu class sidenav/topbar'i gizleyip icerigi tam
   genislikte gosteriyor, sanki shell hic render edilmemis gibi. */
.app-shell-bare .sidenav,
.app-shell-bare .sidenav-backdrop,
.app-shell-bare .topbar {
  display: none;
}

.app-shell-bare .main-content {
  margin-left: 0;
  padding: 0;
}

.sidenav {
  position: fixed;
  top: 16px;
  left: 16px;
  bottom: 16px;
  width: 250px;
  background: #FFFFFF;
  border-radius: 0.85rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  padding: 20px 14px;
  display: flex;
  flex-direction: column;
  gap: 20px;
  z-index: 40;
  overflow-y: auto;
  transition: transform 0.25s ease;
}

.sidenav-brand {
  display: flex;
  align-items: center;
}

/* KURAL: sidebar disi ile ic kartlarin (pkg-kpi-card vb.) kose acisi ayni
   (0.85rem) - marka karti ise bir ic ust seviyesi olarak biraz daha kucuk
   (0.7rem), referans mockup (IMG_6143) ile ayni "ic ice kart" hiyerarsisi. */
.sidenav-brand-card {
  display: flex;
  align-items: center;
  gap: 10px;
  width: 100%;
  padding: 8px 10px;
  background: #FAFAFA;
  border: 1px solid var(--color-border);
  border-radius: 0.7rem;
}

.sidenav-brand-icon {
  height: 32px;
  width: 32px;
  flex-shrink: 0;
  display: block;
  border-radius: 8px;
}

.sidenav-brand-text {
  min-width: 0;
  line-height: 1.25;
}

.sidenav-brand-title {
  font-size: 0.85rem;
  font-weight: 800;
  color: var(--color-secondary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sidenav-brand-subtitle {
  font-size: 0.68rem;
  font-weight: 400;
  color: var(--color-mist);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.sidenav-links {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.sidenav-link {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 9px 10px;
  border-radius: 0.75rem;
  color: var(--color-mist);
  text-decoration: none;
  font-size: 0.84rem;
  font-weight: 600;
  transition: background-color 0.15s ease, color 0.15s ease, box-shadow 0.15s ease;
}

.sidenav-link:hover {
  background-color: #F5F5F7;
  color: var(--color-secondary);
}

.sidenav-link-icon-box {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  border-radius: 0.6rem;
  background: #FFFFFF;
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.15);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: background 0.15s ease;
}

.sidenav-link-icon {
  width: 15px;
  height: 15px;
  background-color: var(--color-secondary);
}

/* Menu ikon kutulari da projedeki genel acik->koyu gradient diline gecti
   (avatar/rozet/ikon dolgularinda kullanilan ayni desen), duz tint+renkli
   ikon yerine artik gradient dolgu + beyaz ikon kullaniyor. */
.sidenav-link-icon-box-ai { background: linear-gradient(135deg, #17E6AC, var(--color-module-ai)); }
.sidenav-link-icon-box-ai .sidenav-link-icon { background-color: #FFFFFF; }
.sidenav-link-icon-box-lifestyle { background: linear-gradient(135deg, #FDBA74, var(--color-module-lifestyle)); }
.sidenav-link-icon-box-lifestyle .sidenav-link-icon { background-color: #FFFFFF; }
.sidenav-link-icon-box-measurement { background: linear-gradient(135deg, #5EEAD4, var(--color-module-measurement)); }
.sidenav-link-icon-box-measurement .sidenav-link-icon { background-color: #FFFFFF; }
.sidenav-link-icon-box-appointment { background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment)); }
.sidenav-link-icon-box-appointment .sidenav-link-icon { background-color: #FFFFFF; }
.sidenav-link-icon-box-nutrition { background: linear-gradient(135deg, #FCD34D, #B45309); }
.sidenav-link-icon-box-nutrition .sidenav-link-icon { background-color: #FFFFFF; }
.sidenav-link-icon-box-water { background: linear-gradient(135deg, #7DD3FC, var(--color-module-water)); }
.sidenav-link-icon-box-water .sidenav-link-icon { background-color: #FFFFFF; }
.sidenav-link-icon-box-notification { background: linear-gradient(135deg, #FDA4AF, var(--color-module-notification)); }
.sidenav-link-icon-box-notification .sidenav-link-icon { background-color: #FFFFFF; }
.sidenav-link-icon-box-neutral { background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral)); }
.sidenav-link-icon-box-neutral .sidenav-link-icon { background-color: #FFFFFF; }

.sidenav-link-label {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex: 1;
}

.sidenav-link-badge {
  flex-shrink: 0;
  min-width: 18px;
  height: 18px;
  padding: 0 5px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  background: var(--color-accent-wine);
  color: #FFFFFF;
  font-size: 0.68rem;
  font-weight: 700;
}

.sidenav-link.active {
  color: var(--color-secondary);
  font-weight: 700;
  background-color: #FFFFFF;
  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
}

.sidenav-link.active .sidenav-link-icon-box {
  background: linear-gradient(310deg, #00816B 0%, #00BF8F 100%);
  box-shadow: 0 2px 8px rgba(0, 191, 143, 0.4);
}

.sidenav-link.active .sidenav-link-icon {
  background-color: #FFFFFF;
}

.sidenav-backdrop {
  display: none;
}

/* ---- Topbar ---- */
.main-content {
  margin-left: 282px;
  padding: 16px 24px 40px;
}

.topbar {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  padding: 8px 4px;
  margin-bottom: var(--spacing-md);
}

.topbar-spacer {
  flex: 1;
}

.sidenav-toggle-btn {
  display: none;
  background: #FFFFFF;
  box-shadow: 0 2px 6px rgba(15, 23, 42, 0.12);
  border: none;
  border-radius: 10px;
  width: 40px;
  height: 40px;
  padding: 0;
  margin-bottom: 0;
  align-items: center;
  justify-content: center;
}

.sidenav-toggler-inner {
  display: inline-flex;
  flex-direction: column;
  gap: 3px;
}

.sidenav-toggler-line {
  display: block;
  width: 18px;
  height: 2px;
  border-radius: 2px;
  background-color: var(--color-secondary);
}

.topbar-user {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.topbar-avatar-link {
  text-decoration: none;
}

.topbar-username {
  font-size: 0.85rem;
  color: var(--color-mist);
  font-weight: 500;
}

@media (max-width: 991px) {
  .sidenav {
    transform: translateX(-120%);
  }

  .sidenav.sidenav-mobile-open {
    transform: translateX(0);
    /* Uye mobilinde alt dock nav'in z-index'i (45) sidenav'inkinden (40)
       yuksekti - drawer acikken dock, cekmecenin alt kismini (logout
       butonunu) kapatiyordu. Sadece acik durumda dock'un ustune cikar. */
    z-index: 47;
  }

  .sidenav-backdrop {
    display: block;
    position: fixed;
    inset: 0;
    background: rgba(15, 23, 42, 0.35);
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
    z-index: 39;
  }

  .sidenav-backdrop-open {
    /* Ayni sebep - backdrop de dock'un (45) ustune cikip onu da
       dimlemeli, aksi halde dock acikken tam parlak/tiklanabilir kaliyor. */
    z-index: 46;
    opacity: 1;
    pointer-events: auto;
  }

  .sidenav-toggle-btn {
    display: inline-flex;
  }

  .main-content {
    margin-left: 0;
    padding: 16px 16px 40px;
  }
}

/* ---- Uye tarafi: koyu "Dock" sistemi (K vitrininde onaylanan tasarim) ----
   Sadece .app-shell-dock scope'unda - admin/coach mevcut acik sidenav'i
   degismeden koruyor, bu bilincli olarak sadece uye tarafina uygulaniyor. */
.app-shell-dock .sidenav {
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.02) 40%, rgba(0, 0, 0, 0.1)),
    rgba(1, 3, 2, 0.95);
  backdrop-filter: blur(30px) saturate(2.2) brightness(1.05);
  -webkit-backdrop-filter: blur(30px) saturate(2.2) brightness(1.05);
  border: 1.5px solid rgba(255, 255, 255, 0.2);
  border-bottom-color: rgba(255, 255, 255, 0.06);
  box-shadow:
    inset 0 2px 1px rgba(255, 255, 255, 0.4),
    inset 0 -10px 16px -12px rgba(0, 0, 0, 0.5),
    0 1px 2px rgba(0, 0, 0, 0.3),
    0 24px 46px -18px rgba(0, 0, 0, 0.55),
    0 10px 26px -14px rgba(0, 226, 171, 0.4);
}

.app-shell-dock .sidenav-brand-card {
  background: rgba(255, 255, 255, 0.06);
  border-color: rgba(255, 255, 255, 0.14);
}

.app-shell-dock .sidenav-brand-title { color: #EEF2EE; }
.app-shell-dock .sidenav-brand-subtitle { color: #8A978F; }

.app-shell-dock .sidenav-link { color: #8A978F; }
.app-shell-dock .sidenav-link:hover { background-color: rgba(255, 255, 255, 0.07); color: #C7D0CB; }
.app-shell-dock .sidenav-link-icon-box { background: rgba(255, 255, 255, 0.06); box-shadow: none; }

.app-shell-dock .sidenav-link.active {
  background: linear-gradient(120deg, #00B98A 0%, #00875F 55%, #00402D 100%);
  color: #F4FAF7;
  box-shadow:
    0 12px 24px -8px rgba(0, 191, 143, 0.6),
    inset 0 -5px 8px rgba(0, 20, 15, 0.25),
    inset 0 3px 5px rgba(255, 255, 255, 0.3);
}

.app-shell-dock .sidenav-link.active .sidenav-link-icon-box {
  background: rgba(255, 255, 255, 0.16);
  box-shadow: none;
}

.sidenav-foot {
  margin-top: auto;
  padding-top: 14px;
  border-top: 1px solid rgba(15, 23, 42, 0.08);
  display: flex;
  align-items: center;
  gap: 9px;
}

.app-shell-dock .sidenav-foot {
  border-top-color: rgba(255, 255, 255, 0.1);
}

.sidenav-foot-identity {
  display: flex;
  align-items: center;
  gap: 9px;
  min-width: 0;
  flex: 1;
  text-decoration: none;
}

.sidenav-foot-avatar {
  position: relative;
  width: 34px;
  height: 34px;
  border-radius: 30%;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  font-size: 0.8rem;
  flex-shrink: 0;
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  transition: transform 0.2s ease;
}

.sidenav-foot-avatar::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.sidenav-foot-avatar-letter {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.sidenav-foot-identity:hover .sidenav-foot-avatar {
  transform: scale(1.15) rotate(-6deg);
}

.sidenav-foot-text {
  min-width: 0;
  line-height: 1.25;
}

.sidenav-foot-name {
  font-size: 0.82rem;
  font-weight: 700;
  color: var(--color-secondary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.app-shell-dock .sidenav-foot-name { color: #EEF2EE; }

.sidenav-foot-role {
  font-size: 0.68rem;
  color: var(--color-mist);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.app-shell-dock .sidenav-foot-role { color: #8A978F; }

.sidenav-foot-logout {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  border: none;
  background: rgba(15, 23, 42, 0.05);
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: background-color 0.15s ease, transform 0.15s ease;
}

.sidenav-foot-logout .navbar-icon {
  width: 15px;
  height: 15px;
}

.sidenav-foot-logout:hover {
  background: rgba(225, 29, 72, 0.12);
  transform: scale(1.06);
}

.sidenav-foot-logout:hover .navbar-icon {
  background-color: var(--color-accent-wine);
}

.app-shell-dock .sidenav-foot-logout {
  background: rgba(255, 255, 255, 0.06);
}

.app-shell-dock .sidenav-foot-logout .navbar-icon {
  background-color: #8A978F;
}

.app-shell-dock .sidenav-foot-logout:hover {
  background: rgba(225, 29, 72, 0.18);
}

.app-shell-dock .sidenav-foot-logout:hover .navbar-icon {
  background-color: #FF8FA3;
}

.dock-bottom {
  display: none;
}

@media (max-width: 991px) {
  /* Uye mobilinde eski hamburger yerine dock'taki "Daha Fazla" ayni ceceyi (backdrop+sidenav) aciyor */
  .app-shell-dock .sidenav-toggle-btn {
    display: none;
  }

  /* Eskiden sabit 104px'ti - gercek cihazda (farkli font metrikleri, home
     indicator safe-area'si) dock'un gercek yuksekligini kapsamaya yetmeyip
     uzun sayfalarin en altini hafif kapatiyordu (kullanici geri bildirimi,
     olculen tampon payi sadece ~8pxdi). 140px'e cikarildi + home indicator'i
     olan cihazlarda dock da asagi itilecegi (bkz. altta) icin ayni miktar
     safe-area-inset-bottom da eklendi, ikisi hep birlikte hareket etsin. */
  .app-shell-dock .main-content {
    padding-bottom: calc(140px + env(safe-area-inset-bottom));
  }

  .dock-bottom {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    position: fixed;
    left: 16px;
    right: 16px;
    /* Tabletlerde (768-990px, hala bu <=991px mobil/dock breakpoint'inin
       icinde) max-width verilmedigi icin dock 900px+ genislige kadar
       gerilip 4 buton arasinda devasa bosluk birakiyordu (arastirma.md
       HATA 4) - telefon genisliklerinde zaten bundan dar oldugu icin
       etkisiz, sadece tablette devreye giriyor. */
    max-width: 480px;
    margin: 0 auto;
    /* env(safe-area-inset-bottom): home indicator'i olan cihazlarda dock'un
       ona yapismasini/altinda kalmasini onler. */
    bottom: calc(16px + env(safe-area-inset-bottom));
    z-index: 45;
    padding: 10px 10px 12px;
    border-radius: 32px;
    background:
      linear-gradient(180deg, rgba(255, 255, 255, 0.14), rgba(255, 255, 255, 0.02) 40%, rgba(0, 0, 0, 0.1)),
      rgba(1, 3, 2, 0.95);
    backdrop-filter: blur(40px) saturate(2.4) brightness(1.05);
    -webkit-backdrop-filter: blur(40px) saturate(2.4) brightness(1.05);
    border: 1.5px solid rgba(255, 255, 255, 0.22);
    border-bottom-color: rgba(255, 255, 255, 0.06);
    box-shadow:
      inset 0 2px 1px rgba(255, 255, 255, 0.5),
      inset 0 -10px 18px -12px rgba(0, 0, 0, 0.5),
      0 1px 2px rgba(0, 0, 0, 0.3),
      0 30px 55px -18px rgba(0, 0, 0, 0.6),
      0 12px 30px -14px rgba(0, 226, 171, 0.45);
  }

  .dock-bottom::before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 56px;
    border-radius: 32px 32px 0 0;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0));
    pointer-events: none;
  }

  .dock-item {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    flex: 1;
    padding: 6px 4px;
    border-radius: 16px;
    border: none;
    background: none;
    cursor: pointer;
    color: #8A978F;
    text-decoration: none;
    font-size: 10px;
    font-weight: 700;
    font-family: inherit;
    transition: color 0.2s ease;
  }

  .dock-item-icon {
    width: 20px;
    height: 20px;
    background-color: currentColor;
    transition: transform 0.2s cubic-bezier(0.34, 1.56, 0.64, 1);
  }

  .dock-item-label {
    white-space: nowrap;
  }

  .dock-item.active {
    color: #EEF2EE;
  }

  .dock-item:hover .dock-item-icon {
    transform: translateY(-2px);
  }

  .dock-fab-wrap {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    flex: 0 0 auto;
    margin: 0 4px;
  }

  .dock-fab {
    width: 54px;
    height: 54px;
    margin-top: -30px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: linear-gradient(135deg, #00E2AB, #00875F);
    box-shadow: 0 14px 26px -8px rgba(0, 226, 171, 0.6), inset 0 2px 3px rgba(255, 255, 255, 0.4);
    animation: dockFabPulse 2.6s ease-in-out infinite;
  }

  .dock-fab-icon {
    width: 22px;
    height: 22px;
    background-color: #FFFFFF;
  }

  .dock-fab-label {
    font-size: 10px;
    font-weight: 700;
    color: #EEF2EE;
  }

  @keyframes dockFabPulse {
    0%, 100% { box-shadow: 0 14px 26px -8px rgba(0, 226, 171, 0.6), inset 0 2px 3px rgba(255, 255, 255, 0.4); }
    50% { box-shadow: 0 16px 32px -6px rgba(0, 226, 171, 0.85), inset 0 2px 3px rgba(255, 255, 255, 0.4); }
  }

  @media (prefers-reduced-motion: reduce) {
    .dock-fab { animation: none; }
  }
}

/* Telefon yan cevrildiginde (landscape, kisa yukseklik) 80px dock + ~60px
   ust bar ekran yuksekliginin ~%40'ini yiyip okunabilir alani ~234px'e
   dusuruyordu (arastirma.md HATA 3) - dock'u ikon-only + daha kisa bir
   seride indirip main-content'in alt tamponunu da orantili kucultuyor.
   max-width:991px'teki dock zaten burada da gecerli, sadece yukseklik
   ekleniyor. */
@media (max-height: 500px) and (orientation: landscape) {
  .app-shell-dock .main-content {
    padding-bottom: calc(64px + env(safe-area-inset-bottom));
  }

  .dock-bottom {
    padding: 6px 10px;
    bottom: calc(8px + env(safe-area-inset-bottom));
  }

  .dock-item-label,
  .dock-fab-label {
    display: none;
  }

  .dock-item {
    padding: 4px;
  }

  .dock-fab {
    width: 42px;
    height: 42px;
    margin-top: -18px;
  }

  .dock-fab-icon {
    width: 18px;
    height: 18px;
  }
}

/* ---- Uye sidenav: giris (stagger fade) + aktif pulse animasyonlari ---- */
@keyframes memberNavIn {
  from { opacity: 0; transform: translateX(-8px); }
  to { opacity: 1; transform: none; }
}

@keyframes memberNavPulse {
  0%, 100% { box-shadow: 0 12px 24px -8px rgba(0, 191, 143, 0.6), inset 0 -5px 8px rgba(0, 20, 15, 0.25), inset 0 3px 5px rgba(255, 255, 255, 0.3); }
  50% { box-shadow: 0 14px 30px -6px rgba(0, 191, 143, 0.85), inset 0 -5px 8px rgba(0, 20, 15, 0.25), inset 0 3px 5px rgba(255, 255, 255, 0.3); }
}

.app-shell-dock .sidenav-link {
  opacity: 0;
  animation: memberNavIn 0.4s cubic-bezier(0.22, 0.9, 0.34, 1) forwards;
}

.app-shell-dock .sidenav-link:nth-of-type(1) { animation-delay: 0.03s; }
.app-shell-dock .sidenav-link:nth-of-type(2) { animation-delay: 0.07s; }
.app-shell-dock .sidenav-link:nth-of-type(3) { animation-delay: 0.11s; }
.app-shell-dock .sidenav-link:nth-of-type(4) { animation-delay: 0.15s; }
.app-shell-dock .sidenav-link:nth-of-type(5) { animation-delay: 0.19s; }
.app-shell-dock .sidenav-link:nth-of-type(6) { animation-delay: 0.23s; }
.app-shell-dock .sidenav-link:nth-of-type(7) { animation-delay: 0.27s; }
.app-shell-dock .sidenav-link:nth-of-type(8) { animation-delay: 0.31s; }

.app-shell-dock .sidenav-link:hover .sidenav-link-icon-box {
  transform: scale(1.12) rotate(-6deg);
}

.app-shell-dock .sidenav-link.active {
  opacity: 1;
  animation: memberNavIn 0.4s cubic-bezier(0.22, 0.9, 0.34, 1) forwards, memberNavPulse 2.6s ease-in-out infinite;
}

@media (prefers-reduced-motion: reduce) {
  .app-shell-dock .sidenav-link { opacity: 1; animation: none; transform: none; }
  .app-shell-dock .sidenav-link.active { animation: none; }
}

/* ---- Uye tarafi: karsilama hero bandi (K'daki F sistemi, gercek verilerle) ---- */
.member-hero {
  position: relative;
  overflow: hidden;
  border-radius: 22px;
  /* .dashboard-page, [class$="-page"] genel kuralindan kendi ust padding'ini
     (var(--spacing-lg)) miras aliyor - bu, .main-content'in zaten 16px olan
     ust bosluguna eklenip hero'yu sidebar'in top:16px hizasindan asagi
     itiyordu. Hero'yu tam o miktar kadar yukari cekip hizayi geri
     kazandiriyoruz. */
  margin-top: calc(-1 * var(--spacing-lg));
  margin-bottom: 20px;
  padding: 22px 26px;
  color: #FFFFFF;
  min-height: 168px;
  /* Eskiden flex idi (.member-hero-left tek blok + illus-wrap sag) - artik CSS
     Grid: 5 cocuk (eyebrow/title/ring/sugg/illus) DOGRUDAN .member-hero'nun
     alti, .member-hero-left sarmalayicisi kaldirildi. Boylece mobil/masaustu
     arasinda ayni DOM'u, SADECE grid-template-areas'i degistirerek farkli
     duzenlere sokabiliyoruz (mobilde halka+illustrasyon ayni satirda yan yana,
     masaustunde illustrasyon sag tarafta tum yuksekligi kaplayan tek sutun). */
  display: grid;
  grid-template-columns: minmax(0, 360px) auto;
  grid-template-areas:
    "eyebrow illus"
    "title   illus"
    "ring    illus"
    "sugg    illus";
  align-items: start;
  column-gap: 24px;
  background:
    linear-gradient(180deg, rgba(255, 255, 255, 0.12), rgba(255, 255, 255, 0.02) 40%, rgba(0, 0, 0, 0.12)),
    rgba(1, 3, 2, 0.9);
  backdrop-filter: blur(30px) saturate(2.2) brightness(1.05);
  -webkit-backdrop-filter: blur(30px) saturate(2.2) brightness(1.05);
  border: 1.5px solid rgba(255, 255, 255, 0.14);
  border-bottom-color: rgba(255, 255, 255, 0.04);
  box-shadow:
    inset 0 2px 1px rgba(255, 255, 255, 0.35),
    inset 0 -10px 18px -12px rgba(0, 0, 0, 0.5),
    0 1px 2px rgba(0, 0, 0, 0.3),
    0 24px 46px -20px rgba(0, 0, 0, 0.6),
    0 10px 26px -14px rgba(0, 226, 171, 0.3);
}

.member-hero::before {
  content: "";
  position: absolute;
  inset: 0 0 auto 0;
  height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.5), transparent);
}

/* Noktali izgara zemin - tum hero kartinin ARKASINA yayiliyor (sadece
   illustrasyon sahnesiyle sinirli degil), kullanici mockup'ta bunu ozellikle
   begendi. z-index:0 ile diger tum icerigin (grid alanlari, position:relative
   z-index:1 tasiyan cocuklar) ARKASINDA kalmasi gerekiyor - bkz. asagidaki
   grid-area kurallarinda her cocuga eklenen position:relative;z-index:1. */
.member-hero-dotgrid {
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: radial-gradient(rgba(255, 255, 255, .13) 1px, transparent 1.5px);
  background-size: 16px 16px;
  -webkit-mask-image: radial-gradient(ellipse 90% 80% at 62% 55%, black 45%, transparent 88%);
          mask-image: radial-gradient(ellipse 90% 80% at 62% 55%, black 45%, transparent 88%);
  pointer-events: none;
}

.member-hero-glow {
  position: absolute;
  z-index: 0;
  top: 0;
  bottom: 0;
  right: 0;
  width: 220px;
  pointer-events: none;
  background:
    radial-gradient(58% 85% at 60% 62%, rgba(0, 226, 171, 0.34), transparent 72%),
    radial-gradient(65% 55% at 42% 4%, rgba(255, 196, 110, 0.24), transparent 65%);
  filter: blur(24px);
  animation: memberHeroGlowPulse 4.5s ease-in-out infinite;
}

@keyframes memberHeroGlowPulse { 0%, 100% { opacity: 0.5; } 50% { opacity: 0.85; } }

.member-hero-bell {
  position: absolute;
  top: 22px;
  right: 26px;
  z-index: 2;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.12);
  border: 1px solid rgba(255, 255, 255, 0.16);
  display: flex;
  align-items: center;
  justify-content: center;
}

.member-hero-bell-icon {
  width: 15px;
  height: 15px;
  background-color: #FFFFFF !important;
  animation: memberHeroBellRing 6s ease-in-out 1.5s infinite;
  transform-origin: 50% 20%;
}

@keyframes memberHeroBellRing {
  0%, 6%, 100% { transform: rotate(0); }
  2% { transform: rotate(14deg); }
  4% { transform: rotate(-10deg); }
}

.member-hero-eyebrow {
  grid-area: eyebrow;
  position: relative;
  z-index: 1;
  min-width: 0;
  margin: 0 0 4px;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #8A978F;
}

.member-hero-title {
  grid-area: title;
  position: relative;
  z-index: 1;
  min-width: 0;
  margin: 2px 0 0;
  font-size: 25px;
  font-weight: 800;
  letter-spacing: -0.01em;
  color: #EEF2EE;
  /* Sadece basligin kendisi zil ile cakisiyordu (uzun isimlerde), bu yuzden
     bosluk rezervasyonu SADECE burada - eskiden .member-hero-left'in tamamina
     uygulaniyordu, bu da altindaki halka satiri/oneri cipinin gereksiz yere
     dar (kartin tamamini kullanamayan) gorunmesine yol aciyordu. */
  padding-right: 44px;
}

.member-hero-wave {
  display: inline-block;
  transform-origin: 70% 70%;
  animation: memberHeroWave 2.4s ease-in-out 0.3s 1;
}

@keyframes memberHeroWave {
  0%, 100% { transform: rotate(0deg); }
  15% { transform: rotate(14deg); }
  30% { transform: rotate(-8deg); }
  45% { transform: rotate(14deg); }
  60% { transform: rotate(-4deg); }
  75% { transform: rotate(10deg); }
}

.member-hero-ring-row {
  grid-area: ring;
  position: relative;
  z-index: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 8px;
  margin-top: 16px;
  flex-wrap: wrap;
}

/* Halka rozetinin altina/yanina eklenen ikinci "trend" bilgisi - genislikte
   ring-chip'i asmiyor, bu yuzden mobildeki dar 3'lu satirlarda (bkz. hafiza
   notu 2026-08-22) satir sarmasi riskini tetiklemiyor. */
.member-hero-trend {
  display: flex;
  align-items: center;
  gap: 5px;
  background: rgba(0, 226, 171, .1);
  border: 1px solid rgba(0, 226, 171, .25);
  border-radius: 999px;
  padding: 6px 12px;
  font-size: 11px;
  font-weight: 700;
  color: #7FE8C8;
  white-space: nowrap;
}

.member-hero-ring-chip {
  display: flex;
  align-items: center;
  gap: 8px;
  background: rgba(1, 3, 2, 0.78);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1px solid rgba(255, 255, 255, 0.16);
  border-radius: 999px;
  padding: 6px 14px 6px 6px;
  box-shadow: 0 10px 22px -10px rgba(0, 0, 0, 0.55);
}

.member-hero-ring {
  width: 40px;
  height: 40px;
  flex-shrink: 0;
}

@keyframes memberHeroRingDraw {
  from { stroke-dashoffset: 94.2477; }
  to { stroke-dashoffset: var(--ring-target-offset); }
}

.member-hero-ring-fg {
  stroke-dasharray: 94.2477 94.2477;
  stroke-dashoffset: 94.2477;
  animation: memberHeroRingDraw 1.1s cubic-bezier(0.22, 0.9, 0.34, 1) 0.35s forwards;
}

.member-hero-score {
  display: flex;
  flex-direction: column;
  font-size: 17px;
  font-weight: 800;
  color: #EEF2EE;
  line-height: 1.2;
}

.member-hero-score-label {
  font-size: 10px;
  font-weight: 600;
  color: #8A978F;
  margin-top: 2px;
}

.member-hero-sugg {
  grid-area: sugg;
  position: relative;
  z-index: 1;
  min-width: 0;
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 18px;
  max-width: 300px;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: 14px;
  padding: 10px 12px;
  opacity: 0;
  /* Admin hero'sunda bu artik bir dcc.Link (<a>) - div oldugu yerlerde (uye/coach)
     bu iki kural etkisiz/zararsiz, sadece link oldugunda gerekli. */
  text-decoration: none;
  color: inherit;
  transition: background 0.15s ease, transform 0.15s ease;
  animation: memberHeroSuggIn 0.6s cubic-bezier(0.22, 0.9, 0.34, 1) 1s forwards;
}

@keyframes memberHeroSuggIn {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

/* Sadece gercekten tiklanabilir oldugunda (dcc.Link -> <a>, su an admin hero'sunda)
   hover geri bildirimi goster - uye/coach'ta hala duz div oldugu icin bu kural
   onlara hic uygulanmiyor. */
a.member-hero-sugg:hover {
  background: rgba(255, 255, 255, 0.1);
  transform: translateY(-2px);
}

.member-hero-sugg-ic {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  background: linear-gradient(135deg, #00E2AB, #00614C);
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 4px 10px -4px rgba(0, 226, 171, 0.5);
}

.member-hero-sugg-ic-mask {
  width: 14px;
  height: 14px;
  background-color: #FFFFFF !important;
}

.member-hero-sugg-title {
  display: block;
  font-size: 11.5px;
  color: #EEF2EE;
}

.member-hero-sugg-sub {
  display: block;
  font-size: 10px;
  color: #97A39D;
}

.member-hero-illus-wrap {
  grid-area: illus;
  position: relative;
  z-index: 1;
  width: 170px;
  flex-shrink: 0;
  align-self: stretch;
  min-height: 0;
}

.member-hero-illus {
  position: absolute;
  right: 6px;
  bottom: -6px;
  width: 127px;
  height: 180px;
  pointer-events: none;
  overflow: visible;
}

/* Coach illustrasyonu (checklist panosu) uye shaker'iyla ayni wrap/kart
   class'larini kullaniyor, sadece coach'a ozel bu iki modifier class ile
   biraz buyutuluyor. */
.member-hero-illus-wrap-coach {
  width: 190px;
}

.member-hero-illus-coach {
  width: 145px;
  height: 206px;
}

/* Admin illustrasyonu (yukselen cubuk grafik) icin ayni desen. */
.member-hero-illus-wrap-admin {
  width: 210px;
}

.member-hero-illus-admin {
  width: 165px;
  height: 193px;
  right: -4px;
}

/* ================= Illustrasyon ic-eleman animasyonlari (2026-08-22 hero
   revizyonu - onceki durum: img data-uri oldugu icin ic elemanlara animasyon
   uygulanamiyordu, artik inline SVG oldugu icin hepsi bagimsiz hareket
   ediyor). Ucu illustrasyon (shaker/checklist/bar-chart) bu ortak class'lari
   paylasiyor. ================= */
.hero-illus-glow {
  position: absolute;
  width: 180px; height: 180px;
  left: 50%; top: 52%; transform: translate(-50%, -50%);
  background: radial-gradient(closest-side, rgba(0, 226, 171, .30), rgba(0, 226, 171, .08) 55%, transparent 75%);
  filter: blur(6px);
  animation: heroGlowPulse 4.2s ease-in-out infinite;
  pointer-events: none;
  z-index: 0;
}
@keyframes heroGlowPulse {
  0%, 100% { opacity: .55; transform: translate(-50%, -50%) scale(1); }
  50%      { opacity: .9;  transform: translate(-50%, -50%) scale(1.1); }
}

.hero-sparkle { animation: heroSparkleTwinkle 2.6s ease-in-out infinite; transform-origin: center; }
.hero-sparkle-2 { animation-delay: .9s; }
.hero-sparkle-3 { animation-delay: 1.8s; }
@keyframes heroSparkleTwinkle {
  0%, 100% { opacity: 0; transform: scale(.4) rotate(0deg); }
  50%      { opacity: .9; transform: scale(1) rotate(20deg); }
}

.hero-shine-sweep { animation: heroShineSweep 3.6s ease-in-out infinite; }
@keyframes heroShineSweep {
  0%   { transform: translateX(-46px); opacity: 0; }
  12%  { opacity: .8; }
  45%  { opacity: 0; }
  100% { transform: translateX(120px); opacity: 0; }
}

/* -- Uye shaker'i -- */
.hero-shaker-cap { transform-origin: 60px 22px; animation: heroCapTilt 3.4s ease-in-out infinite; }
@keyframes heroCapTilt {
  0%, 100% { transform: rotate(-5deg); }
  50%      { transform: rotate(2deg); }
}
.hero-shaker-body { transform-origin: 60px 100px; animation: heroBodySway 4.6s ease-in-out infinite; }
@keyframes heroBodySway {
  0%, 100% { transform: rotate(-1.2deg); }
  50%      { transform: rotate(1deg); }
}
.hero-shaker-liquid-fill {
  animation-name: heroLiquidFillIn, heroLiquidBob;
  animation-duration: 1.9s, 2.6s;
  animation-timing-function: cubic-bezier(.22, .9, .34, 1), ease-in-out;
  animation-delay: 0s, 1.9s;
  animation-iteration-count: 1, infinite;
  animation-fill-mode: both, none;
}
.hero-shaker-liquid-line {
  animation-name: heroLiquidLineIn, heroLiquidBob;
  animation-duration: 1.9s, 2.6s;
  animation-timing-function: cubic-bezier(.22, .9, .34, 1), ease-in-out;
  animation-delay: 0s, 1.9s;
  animation-iteration-count: 1, infinite;
  animation-fill-mode: both, none;
}
@keyframes heroLiquidBob {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-3px); }
}
@keyframes heroLiquidFillIn {
  0%   { y: 158px; height: 0px; }
  100% { y: var(--liquid-target-y, 88px); height: var(--liquid-target-h, 90px); }
}
@keyframes heroLiquidLineIn {
  0%   { transform: translateY(18px); opacity: 0; }
  60%  { opacity: 1; }
  100% { transform: translateY(0); opacity: 1; }
}
.hero-bub { animation: heroBubbleUp 3.2s ease-in infinite; }
.hero-bub-2 { animation-delay: 1.05s; }
.hero-bub-3 { animation-delay: 2.1s; }
@keyframes heroBubbleUp {
  0%   { transform: translateY(0); opacity: 0; }
  12%  { opacity: .8; }
  85%  { opacity: .15; }
  100% { transform: translateY(-38px); opacity: 0; }
}
.hero-droplet { animation: heroDropletSlide 5.5s ease-in infinite; }
.hero-droplet-2 { animation-delay: 2.8s; }
@keyframes heroDropletSlide {
  0%   { transform: translateY(0); opacity: 0; }
  8%   { opacity: .55; }
  70%  { opacity: .3; }
  100% { transform: translateY(22px); opacity: 0; }
}
.hero-mist { animation: heroMistRise 4.2s ease-out infinite; transform-origin: bottom center; }
.hero-mist-2 { animation-delay: 1.4s; }
.hero-mist-3 { animation-delay: 2.8s; }
@keyframes heroMistRise {
  0%   { transform: translateY(0) scaleY(.7); opacity: 0; }
  18%  { opacity: .5; }
  100% { transform: translateY(-16px) scaleY(1.3); opacity: 0; }
}
.hero-badge-in { animation: heroBadgeIn .5s .3s ease-out both; }
@keyframes heroBadgeIn {
  0%   { opacity: 0; transform: scale(.7); }
  100% { opacity: 1; transform: scale(1); }
}

/* -- Coach checklist panosu -- */
.hero-board-float { animation: heroBoardFloat 3.8s ease-in-out infinite; }
@keyframes heroBoardFloat {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-4px); }
}
.hero-clip-tilt { transform-origin: 60px 44px; animation: heroClipTilt 3.8s ease-in-out infinite; }
@keyframes heroClipTilt {
  0%, 100% { transform: rotate(-2deg); }
  50%      { transform: rotate(2deg); }
}
.hero-chk { stroke-dasharray: 14; stroke-dashoffset: 14; animation: heroChkDraw 4.5s ease-in-out infinite; }
.hero-chk-2 { animation-delay: 1.3s; }
@keyframes heroChkDraw {
  0%   { stroke-dashoffset: 14; }
  18%  { stroke-dashoffset: 0; }
  100% { stroke-dashoffset: 0; }
}
.hero-row-fade { animation: heroRowFade 4.5s ease-in-out infinite; }
.hero-row-fade-2 { animation-delay: 1.3s; }
.hero-row-fade-3 { animation-delay: 2.6s; }
@keyframes heroRowFade {
  0%   { opacity: .35; }
  18%  { opacity: .85; }
  100% { opacity: .85; }
}
.hero-row-pending .hero-row-checkbox { animation: heroPendingPulse 1.8s ease-in-out infinite; }
@keyframes heroPendingPulse {
  0%, 100% { stroke: rgba(255, 255, 255, .4); }
  50%      { stroke: #E8B93A; }
}
.hero-pen-move { animation: heroPenMove 4.5s ease-in-out infinite; }
@keyframes heroPenMove {
  0%   { transform: translateY(0) rotate(0deg); opacity: 1; }
  16%  { transform: translateY(0) rotate(-6deg); }
  20%  { transform: translateY(32px) rotate(-6deg); }
  36%  { transform: translateY(32px) rotate(0deg); }
  52%  { transform: translateY(64px) rotate(-6deg); opacity: 0; }
  100% { transform: translateY(64px) rotate(-6deg); opacity: 0; }
}

/* -- Admin cubuk grafigi -- */
.hero-bar-grow {
  transform-origin: bottom;
  animation: heroBarGrow 1.3s cubic-bezier(.2, .8, .3, 1) both, heroBarBreath 3.2s ease-in-out 1.3s infinite;
}
.hero-bar-grow-2 { animation-delay: .12s, 1.42s; }
.hero-bar-grow-3 { animation-delay: .24s, 1.54s; }
.hero-bar-grow-4 { animation-delay: .36s, 1.66s; }
@keyframes heroBarGrow {
  0%   { transform: scaleY(0); }
  100% { transform: scaleY(1); }
}
@keyframes heroBarBreath {
  0%, 100% { opacity: 1; }
  50%      { opacity: .82; }
}
.hero-admin-dot { animation: heroBubbleUp 3.4s ease-in infinite; }
.hero-admin-dot-2 { animation-delay: 1.5s; }
.hero-admin-dot-3 { animation-delay: 2.6s; }
.hero-admin-arrow { stroke-dasharray: 70; stroke-dashoffset: 70; animation: heroArrowDraw 1.6s 1.1s cubic-bezier(.3, .8, .3, 1) both; }
@keyframes heroArrowDraw { to { stroke-dashoffset: 0; } }
.hero-bar-label { opacity: 0; animation: heroLabelFade .5s ease-out both; }
.hero-bar-label-2 { animation-delay: .62s; }
.hero-bar-label-3 { animation-delay: .74s; }
.hero-bar-label-4 { animation-delay: .86s; }
@keyframes heroLabelFade {
  0%   { opacity: 0; transform: translateY(4px); }
  100% { opacity: 1; transform: translateY(0); }
}
.hero-count-pop { display: inline-block; animation: heroCountPop 3.6s ease-in-out infinite; }
@keyframes heroCountPop {
  0%, 78%  { transform: scale(1); }
  85%      { transform: scale(1.28); }
  92%      { transform: scale(1); }
  100%     { transform: scale(1); }
}

@media (prefers-reduced-motion: reduce) {
  .member-hero-wave,
  .member-hero-ring-fg,
  .member-hero-sugg,
  .member-hero-bell-icon,
  .member-hero-glow,
  .hero-illus-glow,
  .hero-sparkle,
  .hero-shine-sweep,
  .hero-shaker-cap,
  .hero-shaker-body,
  .hero-shaker-liquid-fill,
  .hero-shaker-liquid-line,
  .hero-bub,
  .hero-droplet,
  .hero-mist,
  .hero-badge-in,
  .hero-board-float,
  .hero-clip-tilt,
  .hero-chk,
  .hero-row-fade,
  .hero-row-pending .hero-row-checkbox,
  .hero-pen-move,
  .hero-bar-grow,
  .hero-admin-dot,
  .hero-admin-arrow,
  .hero-bar-label,
  .hero-count-pop {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
  .member-hero-ring-fg { stroke-dashoffset: var(--ring-target-offset) !important; }
  .hero-shaker-liquid-fill { y: var(--liquid-target-y, 88px) !important; height: var(--liquid-target-h, 90px) !important; }
}

@media (max-width: 640px) {
  .member-hero {
    grid-template-columns: 1fr auto;
    grid-template-areas:
      "eyebrow eyebrow"
      "title   title"
      "ring    illus"
      "sugg    sugg";
    min-height: auto;
    padding: 18px 20px 20px;
  }
  /* Zili biraz daha kenara (saga) cekiyoruz - kullanici geri bildirimi. */
  .member-hero-bell { right: 16px; }
  /* Oneri cipi eskiden max-width:300px'de kaliyordu, kartin genisliginin
     onemli bir kismi bos kalip "bicimsiz" duruyordu - hero ile ayni
     genislige (tam genislik) cekiliyor, kullanici geri bildirimi. */
  .member-hero-sugg { max-width: none; width: 100%; box-sizing: border-box; }
  /* 2026-08-22 hero revizyonu: illustrasyon artik ayri/altta bir blok DEGIL -
     halka rozetiyle AYNI satirda, yan yana duruyor (onceki "normal akista,
     baslik+halka+oneri cipinin ALTINDA" davranisi terk edildi - kullanici
     mockup'ta bunu acikca onayladi, "illustrasyon ASLA ayri/altta bir blok
     olarak durmamali" kurali). */
  .member-hero-ring-row { align-self: center; }
  .member-hero-illus-wrap,
  .member-hero-illus-wrap-coach,
  .member-hero-illus-wrap-admin {
    position: relative;
    width: auto;
    height: 140px;
    align-self: center;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
  }
  .member-hero-illus {
    position: relative;
    right: auto;
    bottom: auto;
    width: 91px;
    height: 129px;
  }
  .member-hero-illus-coach {
    width: 112px;
    height: 150px;
  }
  .member-hero-illus-admin {
    width: 128px;
    height: 150px;
  }
}

/* ---- K-dilinde squircle + gloss ikon rozetleri (Apple-style yuvarlatilmis kare,
   ust solda hafif parlaklik) - proje genelinde ikon rozetlerine uygulanir. ---- */
.stat-card-icon-badge,
.pkg-kpi-icon-badge {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
}

.pkg-kpi-icon-badge { position: relative; }

.stat-card-icon-badge::before,
.pkg-kpi-icon-badge::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.daily-summary-row-icon { border-radius: 30%; }

.stat-card-icon-badge,
.pkg-kpi-icon-badge,
.daily-summary-row-icon {
  transition: transform 0.18s cubic-bezier(0.34, 1.56, 0.64, 1), box-shadow 0.18s ease;
}

.stat-card-soft:hover .stat-card-icon-badge,
.pkg-kpi-card:hover .pkg-kpi-icon-badge,
.daily-summary-row:hover .daily-summary-row-icon {
  transform: scale(1.1) rotate(-6deg);
}

/* ---- Genel sayfa govdesi ---- */
[class$="-page"] {
  max-width: 1080px;
  margin: 0 auto;
  padding: var(--spacing-lg);
}

h1 {
  font-size: 1.6rem;
  font-weight: 800;
  color: var(--color-secondary);
  margin-bottom: var(--spacing-md);
}

h2, h3 {
  font-weight: 600;
  color: var(--color-secondary);
  margin-top: var(--spacing-lg);
  margin-bottom: var(--spacing-sm);
}

hr {
  border: none;
  border-top: 1px solid var(--color-border);
  margin: var(--spacing-lg) 0;
}

.unauthorized-message {
  padding: var(--spacing-lg);
  background-color: var(--color-wine-tint);
  border-radius: var(--radius-md);
  color: var(--color-accent-wine);
  text-align: center;
}

/* ---- Form elemanlari ----
   Dash 4, dcc.Input'u artik ciplak <input> olarak degil
   <div class="dash-input-container"><input class="dash-input-element"><button class="dash-input-stepper">...</div>
   seklinde sariyor. Kutu cizimi container'da, input tamamen seffaf/kenarliksiz iceride oturuyor. */
/* KURAL (2026-08-10): dolgulu gri metin input'lari (referans mockup,
   onemlitasarim.png) - once sadece Urun/Hizmet Paketleri'nde vardi, artik
   .dash-input-container kullanan HER sayfada standart. Dropdown'lar buraya
   DAHIL DEGIL - onlar ayri bir KURAL geregi (satir ~805) her sayfada tek tip
   beyaz+golge "D" kutusu kullaniyor, gri dolgu sadece duz metin input'lari
   icin. login-page kendi ayri stilini koruyor (asagida, daha yuksek
   specificity ile override ediyor). */
.dash-input-container {
  display: flex;
  align-items: center;
  width: 100%;
  max-width: 400px;
  height: 42px;
  margin-bottom: var(--spacing-sm);
  border: 1px solid transparent;
  border-radius: 14px;
  background-color: #F5F5F7;
  box-sizing: border-box;
  transition: border-color 0.15s ease, box-shadow 0.15s ease, background-color 0.15s ease;
}

.dash-input-container:hover {
  background-color: #EFEFF1;
}

.dash-input-container:focus-within {
  border-color: var(--color-secondary) !important;
  outline: none !important;
  background-color: #FFFFFF;
  box-shadow: 0 0 0 3px rgba(27, 33, 29, 0.16);
}

.dash-input-element {
  flex: 1;
  min-width: 0;
  width: 100%;
  height: 100%;
  padding: 0 var(--spacing-md);
  border: none;
  outline: none;
  background: transparent;
  color: var(--color-charcoal);
  font-size: 0.95rem;
  font-family: var(--font-family);
  box-sizing: border-box;
}

.dash-input-element::selection {
  background: var(--color-primary);
  color: var(--color-primary-dark);
}

/* Dash'in kendi eklediği +/- stepper butonlari - gerek yok */
.dash-input-stepper {
  display: none;
}

textarea,
.dash-textarea {
  display: block;
  width: 100%;
  max-width: 100%;
  min-height: 80px;
  resize: vertical;
  padding: var(--spacing-sm) var(--spacing-md) !important;
  margin-bottom: var(--spacing-sm);
  border: 1px solid rgba(15, 23, 42, 0.12) !important;
  border-radius: 16px !important;
  background-color: #FFFFFF;
  color: var(--color-charcoal);
  font-size: 0.95rem;
  font-family: var(--font-family);
  box-sizing: border-box;
}

textarea:focus,
textarea:focus-visible,
.dash-textarea:focus,
.dash-textarea:focus-visible,
.dash-textarea:focus-within {
  outline: none !important;
  border-color: var(--color-secondary) !important;
  box-shadow: 0 0 0 3px rgba(27, 33, 29, 0.16);
}

/* Dash'in kendi calisma-zamani stili "input.dash-input-element:invalid{color:red}"
   enjekte ediyor (type="email" alaninda gecersiz deger girilirken) - daha yuksek
   ozgullukle eziliyor, aksi halde asagidaki kural kaybediyor */
input.dash-input-element:invalid {
  color: var(--color-charcoal) !important;
}

/* ---- Etiketli pill alan grubu (arama/filtre kutulari icin standart dil) ---- */
.field-group {
  display: flex;
  flex-direction: column;
  gap: 5px;
  max-width: 400px;
  margin-bottom: var(--spacing-sm);
}

.field-label {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.7rem;
  font-weight: 600;
  color: var(--color-mist);
  letter-spacing: 0.03em;
  padding-left: 4px;
}

.field-label-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  flex-shrink: 0;
}

.field-label-icon-mask {
  width: 13px;
  height: 13px;
  display: block;
  background-color: var(--color-mist);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

/* .field-label-icon-mask'in gradient varyanti - duz gri yerine marka gradient'i
   ile dolduruyor (mask-image seklinde kirpiyor, background gradient oluyor). */
.field-label-icon-mask-gradient {
  width: 13px;
  height: 13px;
  display: block;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

/* Cinsiyet dropdown'u - genel deterministik avatar kurali yerine (bkz.
   assets/dropdown-avatars.js) anlamli erkek/kadin ikonu kullaniyor. */
.gender-icon-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  flex-shrink: 0;
  margin-right: 8px;
}

.gender-icon-badge-mask {
  width: 13px;
  height: 13px;
  display: block;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.gender-icon-badge-male {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  box-shadow: 0 3px 8px rgba(59, 130, 246, 0.28);
}

.gender-icon-badge-male .gender-icon-badge-mask {
  background-color: #FFFFFF;
}

.gender-icon-badge-female {
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  box-shadow: 0 3px 8px rgba(225, 29, 72, 0.28);
}

.gender-icon-badge-female .gender-icon-badge-mask {
  background-color: #FFFFFF;
}

.admin-section-hint {
  color: var(--color-mist);
  font-size: 0.85rem;
  margin-top: -8px;
  margin-bottom: var(--spacing-md);
}

.field-pill {
  margin-bottom: 0 !important;
  border-radius: 999px !important;
}

.field-group .dash-input-container,
.field-group textarea,
.field-group .dash-dropdown-wrapper {
  margin-bottom: 0;
  max-width: 100%;
}

.field-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(170px, 1fr));
  gap: var(--spacing-sm) var(--spacing-md);
  margin-bottom: var(--spacing-md);
}

.field-grid .field-group {
  max-width: none;
}

button {
  font-family: var(--font-family);
  background-color: var(--color-primary);
  color: #F6F8F5;
  border: none;
  border-radius: 999px;
  padding: var(--spacing-sm) var(--spacing-lg);
  font-weight: 700;
  font-size: 0.85rem;
  cursor: pointer;
  margin-bottom: var(--spacing-sm);
  box-shadow: 0 4px 12px rgba(0, 191, 143, 0.25);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
  /* Erisilebilirlik font buyutmesinde (%125-%150, bkz. arastirma.md HATA 5)
     uzun etiketli hap butonlar (orn. "Tumunu Okundu Isaretle") metin ic ice
     kirilip ovali kaybediyordu - tek satirda kalsin, sigmiyorsa butonu
     saran flex konteyner (bkz. .notif-actions-row) kendi satirina sarsin. */
  white-space: nowrap;
}

button:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(0, 191, 143, 0.35);
}

/* ---- Dropdown (dcc.Dropdown, Dash 4'un Radix tabanli bileseni) ---- */
.dash-dropdown-wrapper {
  max-width: 400px;
  margin-bottom: var(--spacing-sm);
}

/* KURAL (2026-08-10): uygulamadaki HER filtre/secim dropdown'u ayni kutu
   seklini paylasiyor - border yok, yumusak golge, secilince yesil degil
   koyu/notr vurgu. Tek tek id kalibi eslestirmek yerine (surdurmesi zor,
   yeni bir filtre eklenince unutulur) dogrudan .dash-dropdown'a global olarak
   uygulaniyor - tarih secici icindeki mini ay/yil dropdown'i haric (kendi
   kompakt stilini koruyor, asagida ayrica sifirlaniyor). */
.dash-dropdown {
  width: 100%;
  display: flex;
  align-items: center;
  background-color: #FFFFFF;
  color: var(--color-charcoal);
  border: none;
  border-radius: 14px;
  padding: 0 var(--spacing-md);
  height: 42px;
  box-sizing: border-box;
  font-family: var(--font-family);
  font-weight: 400;
  cursor: pointer;
  margin-bottom: 0;
  box-shadow: 0 6px 14px 0 rgba(15, 23, 42, 0.08);
  transition: box-shadow 0.15s ease;
}

.dash-dropdown:hover {
  transform: none;
  box-shadow: 0 8px 18px 0 rgba(15, 23, 42, 0.12);
}

.dash-dropdown[data-state="open"],
.dash-dropdown:focus-visible {
  outline: none;
  box-shadow: 0 8px 18px 0 rgba(15, 23, 42, 0.14), 0 0 0 3px rgba(27, 33, 29, 0.12);
}

/* Dash'in kendi dahili CSS'i (--Dash-Fill-Interactive-Strong token'i ile)
   secim sonrasi normal :focus durumunda (fare tiklamasiyla, :focus-visible
   DEGIL) gercek bir border+outline enjekte ediyor - daha once bu token'in
   RENGINI koyulastirmistik ama kendisini hic kaldirmamistik, secim sonrasi
   kapali kutunun etrafinda gri bir cerceve olarak kaliyordu. Filtrelerde asla
   gercek border olmamasi kuralina uysun diye burada tamamen sifirlaniyor. */
.dash-dropdown:focus {
  border: none !important;
  outline: none !important;
}

.dash-datepicker-controls .dash-dropdown,
.dash-datepicker-controls .dash-dropdown:hover,
.dash-datepicker-controls .dash-dropdown:focus {
  box-shadow: none;
  border: 1px solid rgba(15, 23, 42, 0.12) !important;
}

.dash-datepicker-controls .dash-dropdown[data-state="open"],
.dash-datepicker-controls .dash-dropdown:focus-visible {
  box-shadow: 0 0 0 3px rgba(27, 33, 29, 0.16);
  border-color: var(--color-secondary) !important;
}

.dash-dropdown-grid-container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  gap: 8px;
}

.dash-dropdown-value {
  font-size: 0.9rem;
  color: var(--color-charcoal);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  flex: 1;
  min-width: 0;
}

.dash-dropdown-placeholder {
  color: rgba(51, 51, 51, 0.45);
}

.dash-dropdown-trigger-icon {
  color: var(--color-mist);
  flex-shrink: 0;
}

.dash-dropdown-value-count {
  background: #F5F5F7;
  color: var(--color-secondary);
  border-radius: 999px;
  font-size: 0.7rem;
  font-weight: 700;
  padding: 1px 7px;
}

.dash-dropdown-value-item {
  display: inline;
  color: var(--color-charcoal);
  font-size: 0.9rem;
  font-weight: 400;
}

/* Tekli secimde (multi-select degil) tek bir deger oldugu icin gri pill/chip
   gorunumu gereksiz - sadece gercek coklu secim etiketleri (birden fazla
   .dash-dropdown-value-item kardes) icin pill uygulaniyor. */
.dash-dropdown-value-item:not(:only-child) {
  display: inline-flex;
  background: #F5F5F7;
  color: var(--color-secondary);
  border-radius: 999px;
  font-size: 0.75rem;
  font-weight: 600;
  padding: 2px 9px;
  margin: 2px;
}

/* Acilir menu: Radix bunu body altina portal olarak render ediyor, buzlu cam dile uyumlu */
.dash-dropdown-content {
  background: rgba(255, 255, 255, 0.98);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(255, 255, 255, 0.6);
  border-radius: 16px;
  box-shadow: 0 20px 45px -12px rgba(15, 23, 42, 0.25);
  padding: 6px 0;
  overflow: hidden;
  z-index: 1000;
  font-family: var(--font-family);
}

.dash-dropdown-search-container {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 10px;
  border: none !important;
  border-bottom: 1px solid var(--color-border) !important;
  outline: none !important;
  margin-bottom: 4px;
}

.dash-dropdown-search-container:focus-within {
  border-bottom-color: var(--color-primary) !important;
  outline: none !important;
}

.dash-dropdown-search {
  border: none;
  outline: none;
  font-size: 0.85rem;
  font-family: var(--font-family);
  flex: 1;
  background: transparent;
  color: var(--color-charcoal);
}

/* Public Sans sayfa denemesi kapali dropdown'da calisiyor ama acilir menu body'ye
   portal edildigi icin sayfa-ozel secicilerle ulasilamiyor - assets/dropdown-font.js
   popover acildiginda dogru sayfadaysa bu class'i ekliyor (bkz. CLAUDE.md notlari). */
.dash-dropdown-content.font-trial-active {
  font-family: var(--font-family-admin);
}

.dash-dropdown-content.font-trial-active .dash-dropdown-search {
  font-family: var(--font-family-admin);
}

.dash-dropdown-search-icon {
  color: var(--color-mist) !important;
  flex-shrink: 0;
}

.dash-dropdown-options {
  max-height: 240px;
  overflow-y: auto;
}

.dash-dropdown-option {
  padding: 9px 16px;
  border-radius: 0;
  font-size: 0.85rem;
  color: var(--color-charcoal);
  cursor: pointer;
  transition: background-color 0.1s ease;
  box-shadow: none !important;
}

.dash-dropdown-option:hover,
.dash-dropdown-option[data-highlighted] {
  background-color: #F5F5F7;
}

/* Dash 4.4 varsayilani .dash-options-list-option:hover/:focus-within uzerine
   kendi mor vurgu rengini (--Dash-Fill-Interactive-Strong) yaziyor - RadioItems
   (checkin-rating) ve Dropdown secenekleri ayni temel sinifi paylastigi icin
   ikisini de tek noktadan eziyoruz. */
.dash-options-list-option:hover,
.dash-options-list-option:focus-within {
  color: var(--color-charcoal) !important;
}

/* Ayni Dash 4.4 varsayilani secili radio/checkbox'i native accent-color ile mor
   boyuyor (appearance:auto oldugu icin tarayicinin kendi UI'si render ediliyor) */
.dash-options-list-option-checkbox {
  accent-color: var(--color-secondary) !important;
  outline-color: var(--color-secondary) !important;
}

.dash-dropdown-option[aria-selected="true"] {
  background-color: #F5F5F7;
  color: var(--color-secondary);
  font-weight: 600;
}

.dash-dropdown-clear,
.dash-dropdown-action-button {
  background: transparent;
  color: var(--color-mist);
  box-shadow: none;
  border: none;
  border-radius: 8px;
  padding: 2px 8px;
  font-size: 0.75rem;
  font-weight: 500;
  margin-bottom: 0;
}

.dash-dropdown-clear:hover,
.dash-dropdown-action-button:hover {
  transform: none;
  box-shadow: none;
  background: var(--color-sage-tint);
}

/* ---- Takvim (dcc.DatePickerSingle, Dash 4'un Radix tabanli bileseni) ---- */
/* Dash'in kendi varsayilani bu wrapper'a lacivert bir cerceve veriyor -
   .dash-datepicker-input zaten kendi (daha yumusak) cercevesini ciziyor,
   ikisi ust uste binince "cift cerceve" gorunumu olusuyordu. Ayrica
   .dash-datepicker konteyneri de icerigin cok otesine genisliyordu. */
.dash-datepicker-input-wrapper {
  display: inline-flex;
  border: none !important;
  width: fit-content;
}

.dash-datepicker-input-wrapper:focus,
.dash-datepicker-input-wrapper:focus-visible,
.dash-datepicker-input-wrapper:has(:focus-visible) {
  outline: none !important;
}

.dash-datepicker {
  width: fit-content !important;
  background: transparent !important;
}

.dash-datepicker-input {
  height: 42px;
  padding: 0 var(--spacing-md);
  border: none;
  border-radius: 14px;
  background-color: #FFFFFF;
  color: var(--color-charcoal);
  font-size: 0.9rem;
  font-family: var(--font-family);
  box-sizing: border-box;
  box-shadow: 0 6px 14px 0 rgba(15, 23, 42, 0.08);
  transition: box-shadow 0.15s ease;
}

.dash-datepicker-input:hover {
  box-shadow: 0 8px 18px 0 rgba(15, 23, 42, 0.12);
}

.dash-datepicker-input:focus {
  outline: none;
  border: none;
  box-shadow: 0 8px 18px 0 rgba(15, 23, 42, 0.14), 0 0 0 3px rgba(27, 33, 29, 0.12);
}

.dash-datepicker-content {
  background: rgba(255, 255, 255, 0.98);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border: 1px solid rgba(255, 255, 255, 0.6);
  border-radius: 18px;
  box-shadow: 0 20px 45px -12px rgba(15, 23, 42, 0.25);
  padding: 14px;
  font-family: var(--font-family);
  z-index: 1000;
}

.dash-datepicker-controls {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  margin-bottom: 10px;
}

.dash-datepicker-month-nav {
  width: 30px;
  height: 30px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-sage-tint);
  color: var(--color-primary-dark);
  border-radius: 50%;
  padding: 0;
  box-shadow: none;
  margin-bottom: 0;
}

.dash-datepicker-month-nav:hover {
  transform: none;
  box-shadow: none;
  background: var(--color-primary);
}

.dash-datepicker-controls .dash-dropdown {
  height: 32px;
  border-radius: 10px;
  padding: 0 10px;
  font-size: 0.8rem;
  font-weight: 600;
}

.dash-datepicker-calendar {
  border-collapse: separate;
  border-spacing: 2px;
}

.dash-datepicker-calendar thead span {
  font-size: 0.7rem;
  font-weight: 700;
  color: var(--color-mist);
  text-transform: uppercase;
}

.dash-datepicker-calendar td {
  text-align: center;
  border-radius: 10px;
  cursor: pointer;
  transition: background-color 0.1s ease;
}

.dash-datepicker-calendar td span {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 10px;
  font-size: 0.82rem;
  color: var(--color-charcoal);
}

.dash-datepicker-calendar td:hover span {
  background-color: var(--color-sage-tint);
}

.dash-datepicker-calendar-date-outside span {
  color: rgba(51, 51, 51, 0.3);
}

.dash-datepicker-calendar-date-highlighted span {
  border: 1px solid var(--color-primary-dark);
}

.dash-datepicker-calendar-date-selected span {
  background-color: var(--color-primary) !important;
  color: var(--color-primary-dark);
  font-weight: 700;
}

.dash-datepicker-clear {
  color: var(--color-mist);
  background: transparent;
  box-shadow: none;
  padding: 4px;
  margin-bottom: 0;
}

.dash-datepicker-clear:hover {
  transform: none;
  box-shadow: none;
  background: var(--color-sage-tint);
}

.mb-options-form {
  margin-top: var(--spacing-sm);
  padding: var(--spacing-md);
  background: var(--color-paper);
  border-radius: var(--radius-md);
}

.mb-option-row {
  margin-bottom: var(--spacing-sm);
}

.mb-option-row label {
  display: block;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--color-secondary);
  margin-bottom: 4px;
}

/* ---- Satir/liste kartlari (admin panelleri) ---- */
.admin-measurement-row,
.appointment-row,
.admin-appointment-row,
.user-row,
.coach-row,
.mr-row,
.measurement-row,
.notif-row {
  padding: var(--spacing-md);
  margin-bottom: var(--spacing-sm);
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

/* "Mercan Panel" (CLAUDE.md madde 26) - "Bekleyen Talepler" (.mr-row, sadece
   bu sayfada kullaniliyor, .measurement-row/.notif-row hic Python'dan
   cagrilmiyor - guvenle scoped edilebilir) her kart bento pastel renginde,
   avatar yerine satirin rengine uyumlu gradient bicon. */
.mr-row.mp-tinted {
  background: var(--mp-tint) !important;
  border-color: transparent;
}

.mr-row.mp-tinted:hover .mb-pkg-bicon {
  transform: scale(1.12) rotate(-6deg);
}

.admin-membership-requests-page .pf-gradient-btn {
  background: linear-gradient(135deg, #7EE0A8, #17A76B);
  box-shadow: 0 4px 10px rgba(23, 167, 107, 0.28);
}

/* ---- Kisi baslarindan avatar rozeti (Nixtio avatar referansi) ---- */
.avatar-initials {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  background: var(--color-sage-tint);
  color: var(--color-primary-dark);
  font-weight: 700;
  flex-shrink: 0;
  box-shadow: 0 4px 10px rgba(15, 23, 42, 0.18);
}

.avatar-initials-sm {
  width: 28px;
  height: 28px;
  font-size: 0.68rem;
}

.avatar-initials-md {
  width: 40px;
  height: 40px;
  font-size: 0.85rem;
}

.avatar-initials-lg {
  width: 64px;
  height: 64px;
  font-size: 1.3rem;
}

/* Isme gore deterministik renk (avatar.py get_avatar_color_key) - mevcut
   --color-module-* setinden turetilmis gradient dolgular (duz tint+renkli
   metin yerine, projede diger rozet/ikon dolgularinda kullanilan acik->koyu
   gradient diliyle tutarli). Metin daima beyaz. */
.avatar-initials-measurement { background: linear-gradient(135deg, #5EEAD4, var(--color-module-measurement)); color: #FFFFFF; }
.avatar-initials-appointment { background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment)); color: #FFFFFF; }
.avatar-initials-nutrition { background: linear-gradient(135deg, #FCD34D, #B45309); color: #FFFFFF; }
.avatar-initials-notification { background: linear-gradient(135deg, #FDA4AF, var(--color-module-notification)); color: #FFFFFF; }
.avatar-initials-ai { background: linear-gradient(135deg, #17E6AC, var(--color-module-ai)); color: #FFFFFF; }
.avatar-initials-sleep { background: linear-gradient(135deg, #A5B4FC, var(--color-module-sleep)); color: #FFFFFF; }
.avatar-initials-stress { background: linear-gradient(135deg, #67E8F9, #0E7490); color: #FFFFFF; }
.avatar-initials-lifestyle { background: linear-gradient(135deg, #FDBA74, var(--color-module-lifestyle)); color: #FFFFFF; }

.card-header-identity {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}

.card-header-identity .card-title {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ---- Uye detay profil basligi (admin/member_detail.py) ---- */
.member-profile-header {
  display: flex;
  align-items: center;
  gap: var(--spacing-lg);
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-lg);
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-xl);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
}

.member-profile-name {
  margin: 0;
  font-size: 1.15rem;
}

.member-profile-email {
  margin: 2px 0 0;
  color: var(--color-mist);
  font-size: 0.85rem;
}

.member-profile-meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-md);
  margin-top: 8px;
  font-size: 0.8rem;
  color: var(--color-mist);
}

@media (max-width: 640px) {
  .member-profile-header {
    flex-direction: column;
    text-align: center;
  }

  .member-profile-meta {
    justify-content: center;
  }
}

/* ---- Kimlik + BMI karti (measurements.py) ---- */
.identity-card {
  display: flex;
  align-items: center;
  gap: var(--spacing-lg);
  flex-wrap: wrap;
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-lg);
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-xl);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
}

.identity-card-info {
  flex: 1;
  min-width: 200px;
}

.identity-card-meta {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 10px;
}

.identity-meta-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral));
  color: #FFFFFF;
  font-size: 0.78rem;
  font-weight: 600;
  padding: 5px 12px;
  border-radius: 999px;
}

.identity-meta-chip-mask {
  width: 13px;
  height: 13px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
  flex-shrink: 0;
}

.bmi-gauge {
  width: 220px;
  flex-shrink: 0;
}

.bmi-gauge-value-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: 8px;
}

.bmi-gauge-value {
  font-size: 1.15rem;
  font-weight: 800;
  color: var(--color-secondary);
}

.bmi-gauge-tag {
  font-size: 0.72rem;
  font-weight: 700;
  padding: 2px 10px;
  border-radius: 999px;
}

.bmi-gauge-tag-ok { background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark)); color: #FFFFFF; }
.bmi-gauge-tag-warn { background: linear-gradient(135deg, #FCD34D, #B45309); color: #FFFFFF; }
.bmi-gauge-tag-danger { background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine)); color: #FFFFFF; }

.bmi-gauge-track {
  position: relative;
  height: 8px;
  border-radius: 999px;
}

.bmi-gauge-marker {
  position: absolute;
  top: -4px;
  width: 3px;
  height: 16px;
  background: var(--color-secondary);
  border-radius: 2px;
  transform: translateX(-1.5px);
}

.bmi-gauge-labels {
  display: flex;
  justify-content: space-between;
  margin-top: 4px;
  font-size: 0.6rem;
  color: var(--color-mist);
}

@media (max-width: 640px) {
  .identity-card {
    flex-direction: column;
    text-align: center;
  }

  .identity-card-meta {
    justify-content: center;
  }

  .bmi-gauge {
    width: 100%;
  }
}

/* ---- Kilo yolculugu karti (measurements.py) - cubuk grafik yerine her
   olcumu bir "durak" olarak gosteren, segment renkleriyle momentum'u
   (yesil=azaldi, amber=artti) anlatan seffaf serit. ---- */
/* Bento kart diline gecis (2026-08-19) - t3 mavi (.member-bento-tile.t3 ile
   ayni) - bu sayfadaki KILO bento karosuyla ayni renk, "bu grafik o karonun
   devami" hissi icin. .chart-header-icon paylasilan bir class oldugu icin
   (baska bircok karti etkiler) BURADA GENEL OLARAK DEGISTIRILMIYOR, altta
   sadece .ms-journey-card icindeki ornegi kapsayici selector'la
   ozellestiriliyor. */
.ms-journey-card {
  background: #C3DDF6;
  border: 1px solid var(--color-border);
  border-radius: 20px;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  margin-bottom: var(--spacing-lg);
  overflow: hidden;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.ms-journey-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.ms-journey-card .chart-header {
  border-bottom-color: rgba(20, 32, 26, 0.1);
}

.ms-journey-card .chart-header-icon {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  transition: transform 0.2s ease;
}

.ms-journey-card .chart-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.ms-journey-card:hover .chart-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

.chart-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px 14px;
  border-bottom: 1px solid var(--color-border);
  gap: 10px;
  flex-wrap: wrap;
}

.chart-header-left {
  display: flex;
  align-items: center;
  gap: 10px;
}

.chart-header-icon {
  width: 32px;
  height: 32px;
  border-radius: 10px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
}

.chart-header-icon-mask {
  width: 15px;
  height: 15px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.chart-header-title {
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--color-secondary);
}

/* Sade sayfa ici bolum basliklari (H3) icin ikon+metin satiri - kart degil,
   sadece "Randevularim" / "Gecmis Olcumler" gibi duz basliklara ikon eklemek
   icin. Ikon rozeti icin mevcut .chart-header-icon (yesil), .apt-booking-header-icon
   (mavi) veya .coach-header-icon (indigo, --color-module-sleep odunc alinmis)
   sinifi tekrar kullaniliyor. */
.coach-header-icon {
  width: 32px;
  height: 32px;
  border-radius: 10px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #A5B4FC, var(--color-module-sleep));
  box-shadow: 0 4px 10px rgba(99, 102, 241, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
}

.coach-header-icon-mask {
  width: 15px;
  height: 15px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

/* .pf-card-header-icon icin dorduncu renk varyanti (turkuaz, --color-module-measurement
   odunc alinmis) - olcum/veri agirlikli kart basliklari icin. */
.measurement-header-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #5EEAD4, var(--color-module-measurement));
  box-shadow: 0 4px 10px rgba(20, 184, 166, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
}

.measurement-header-icon-mask {
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

/* .pf-card-header-icon icin besinci renk varyanti (gul/pembe, --color-module-notification
   odunc alinmis) - bildirim agirlikli kart basliklari icin. */
.notif-header-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #FDA4AF, var(--color-module-notification));
  box-shadow: 0 4px 10px rgba(225, 29, 72, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
}

.notif-header-icon-mask {
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

/* .pf-card-header-icon icin altinci/yedinci renk varyantlari (amber/cyan) -
   haftanin gunleri gibi cok sayida ayni-tur kart baslıgini birbirinden
   ayirt etmek icin. */
.nutrition-header-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #FCD34D, var(--color-module-nutrition));
  box-shadow: 0 4px 10px rgba(245, 158, 11, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
}

.nutrition-header-icon-mask {
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.stress-header-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #67E8F9, var(--color-module-stress));
  box-shadow: 0 4px 10px rgba(6, 182, 212, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
}

.stress-header-icon-mask {
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.section-header-row {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: var(--spacing-md);
}

.section-header-row h3 {
  margin: 0;
}

.chart-header-badges {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.ms-journey-badge {
  font-size: 0.7rem;
  font-weight: 700;
  padding: 4px 10px;
  border-radius: 999px;
}

.ms-journey-badge-down { background: linear-gradient(135deg, #5EEAD4, var(--color-primary-dark)); color: #FFFFFF; }
.ms-journey-badge-up { background: linear-gradient(135deg, #FCD34D, #B45309); color: #FFFFFF; }
.ms-journey-badge-target { background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine)); color: #FFFFFF; }

.ms-journey-empty {
  padding: var(--spacing-lg);
}

.ms-journey-scroll {
  position: relative;
  overflow-x: auto;
  padding: 8px 20px 14px;
  /* K mockup'undaki .g-chart-wrap noktali-izgara zemini (SVG <pattern> degil,
     radial-gradient - SVG pattern'lar bu projede sessizce paint olmuyor,
     bkz. bu dosyanin K bento notlari) - beyaz nokta, kartin pastel mavi
     zeminine hafif bir doku katmasi icin. */
  background-image: radial-gradient(circle, rgba(43, 74, 107, 0.22) 1.6px, transparent 1.7px);
  background-size: 14px 14px;
}

/* K mockup'undaki .g-legend ile ayni dil (Baslangic/Simdi/Hedef renkli nokta
   satiri) - grafik tipi farkli (SVG cizgi degil, yatay "durak" seridi) ama
   ayni ozet bilgiyi asagida veriyor. 2026-08-20, /measurements K portu. */
.ms-journey-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 14px;
  padding: 14px 20px 18px;
  margin-top: 4px;
  border-top: 1px solid rgba(20, 32, 26, 0.1);
  font-size: 11px;
  font-weight: 700;
  color: #384038;
}

.ms-journey-legend span {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.ms-journey-legend i {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  display: inline-block;
}

.ms-journey-scroll::-webkit-scrollbar {
  height: 0;
}

.ms-journey {
  display: grid;
  grid-auto-flow: row;
  align-items: end;
  /* Her durak kendi 96px'lik sutununda ORTALANDIGI icin (components/weight_journey.py
     gridTemplateColumns: repeat(n,96px)) ilk durak sutun genisliginin yarisi kadar
     (48px) bosluk birakiyordu, "sanki grafik saga kaymis" gibi duruyordu - kullanici
     geri bildirimiyle grid'i kendi yarim-sutun genisligi kadar sola kaydiriyoruz (48px
     yerine 40px - 48'de ilk durak etiketi scroll padding'ine cok yaklasip hafif
     kirpilma riski tasiyordu). Baglanti cizgileri (::after, hucre-merkezli) bu kaymadan
     etkilenmiyor cunku TUM grid birlikte kayiyor, hucreler arasi gorece konum ayni. */
  margin-left: -40px;
}

.ms-journey-value {
  font-size: 0.85rem;
  font-weight: 800;
  color: var(--color-secondary);
  text-align: center;
  padding-bottom: 22px;
}

.ms-journey-dot-cell {
  position: relative;
  height: 16px;
  display: flex;
  align-items: center;
  justify-content: center;
}

.ms-journey-dot-cell:not(:last-child)::after {
  content: "";
  position: absolute;
  left: 50%;
  width: 100%;
  top: 50%;
  height: 2px;
  transform-origin: left center;
  background: var(--seg-color, var(--color-border));
  animation: msJourneySegGrow 0.55s cubic-bezier(0.22, 0.9, 0.34, 1) both;
  animation-delay: var(--seg-delay, 0s);
}

@keyframes msJourneySegGrow {
  from { transform: translateY(-50%) scaleX(0); }
  to { transform: translateY(-50%) scaleX(1); }
}

.ms-journey-dot-cell-dashed:not(:last-child)::after {
  background: none;
  border-top: 2px dashed rgba(225, 29, 72, 0.45);
}

@media (prefers-reduced-motion: reduce) {
  .ms-journey-dot-cell:not(:last-child)::after {
    animation: none;
    transform: translateY(-50%) scaleX(1);
  }
}

.ms-journey-dot {
  width: 13px;
  height: 13px;
  border-radius: 50%;
  background: var(--color-primary);
  border: 3px solid #FFFFFF;
  box-shadow: 0 0 0 2px var(--color-primary);
  position: relative;
  z-index: 1;
}

.ms-journey-dot-latest {
  width: 16px;
  height: 16px;
  background: var(--color-accent-wine);
  box-shadow: 0 0 0 2px var(--color-accent-wine), 0 0 0 6px rgba(225, 29, 72, 0.14);
}

.ms-journey-dot-target {
  background: #FFFFFF;
  border: 2px dashed var(--color-accent-wine);
  width: 12px;
  height: 12px;
  animation: msJourneyTargetPulse 1.8s ease-in-out infinite;
}

@keyframes msJourneyTargetPulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(225, 29, 72, 0.4); }
  50% { box-shadow: 0 0 0 7px rgba(225, 29, 72, 0); }
}

@media (prefers-reduced-motion: reduce) {
  .ms-journey-dot-target {
    animation: none;
    box-shadow: none;
  }
}

.ms-journey-delta {
  font-size: 0.62rem;
  font-weight: 800;
  padding: 3px 8px;
  border-radius: 999px;
  text-align: center;
  justify-self: center;
  margin: 8px 0 6px;
  white-space: nowrap;
}

.ms-journey-delta-down { background: var(--color-sage-tint); color: var(--color-primary-dark); }
.ms-journey-delta-up { background: rgba(245, 158, 11, 0.16); color: #B45309; }
.ms-journey-delta-flat { background: rgba(15, 23, 42, 0.05); color: var(--color-mist); }
.ms-journey-delta-target { background: rgba(225, 29, 72, 0.08); color: var(--color-accent-wine); }
.ms-journey-delta-spacer { visibility: hidden; }

.ms-journey-date {
  font-size: 0.66rem;
  color: var(--color-mist);
  font-weight: 600;
  text-align: center;
  padding-top: 8px;
}

.ms-journey-date-latest {
  color: var(--color-accent-wine);
}

/* ---- Olcum gecmisi (measurements.py) - renklendirilmis, ay bazli
   gruplanan, ozet seritli ozel tablo. Soft Tablo'nun (.soft-table-*)
   yerine gecmiyor - o bilesene ayri kalsin diye bilincli olarak kendi
   sinif adlarini (.ms-history-*) kullaniyor. ---- */
.ms-history-wrap {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
  margin-top: var(--spacing-lg);
}

.ms-history-top-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
}

.ms-history-top-row .section-header-row {
  margin-bottom: 0;
}

.ms-history-top-row h3 {
  margin: 0;
}

.ms-history-total-badge {
  font-size: 0.8rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 7px 16px;
  border-radius: 999px;
  box-shadow: 0 6px 14px rgba(0, 191, 143, 0.28);
}

.ms-history-summary-strip {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
}

.ms-history-summary-chip {
  border-radius: 16px;
  padding: 12px 18px;
  min-width: 120px;
  color: #FFFFFF;
  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.12);
}

.ms-history-summary-chip span {
  display: block;
  font-size: 0.64rem;
  font-weight: 800;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  opacity: 0.85;
}

.ms-history-summary-chip b {
  font-size: 1.15rem;
}

.ms-history-summary-chip-avg { background: linear-gradient(135deg, #7DD3FC, #0EA5E9); }
.ms-history-summary-chip-low { background: linear-gradient(135deg, #5EEAD4, var(--color-primary-dark)); }
.ms-history-summary-chip-high { background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine)); }
.ms-history-summary-chip-count { background: linear-gradient(135deg, #C4B5FD, #6366F1); }

.ms-history-month-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  align-self: flex-start;
  font-size: 0.72rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 5px 14px;
  border-radius: 999px;
  margin-top: 4px;
}

.ms-history-month-label-mask {
  width: 12px;
  height: 12px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.ms-history-card {
  background: #FFFFFF;
  border-radius: 0.9rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
  overflow-x: auto;
}

/* ---- Genel "Gecmis Olcumler" tarzi tablo kabugu (components/simple_table.py) -
   Soft Tablo'nun duz basligi yerine gradient serit + yuvarlatilmis kart. Hucre
   icerigi hala render_table_identity/render_table_cell ile doldurulabiliyor. ---- */
.simple-table-card {
  background: #FFFFFF;
  border-radius: 0.9rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
  overflow-x: auto;
}

.simple-table-header-row,
.simple-table-row {
  display: grid;
  align-items: center;
  gap: 16px;
  padding: 14px 24px;
  min-width: 480px;
}

.simple-table-row + .simple-table-row {
  border-top: 1px solid var(--color-border);
}

.simple-table-header-row {
  padding-top: 10px;
  padding-bottom: 10px;
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.08), rgba(0, 191, 143, 0.02));
  border-bottom: 1px solid var(--color-border);
}

.simple-table-th {
  font-size: 0.64rem;
  font-weight: 800;
  letter-spacing: 0.05em;
  color: var(--color-primary-dark);
}

.ms-history-row {
  display: grid;
  grid-template-columns: 170px repeat(6, 1fr) 32px;
  gap: 12px;
  align-items: center;
  padding: 14px 24px;
  min-width: 820px;
  border-left: 3px solid transparent;
}

.ms-history-row + .ms-history-row {
  border-top: 1px solid var(--color-border);
}

.ms-history-header-row {
  padding-top: 10px;
  padding-bottom: 10px;
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.08), rgba(0, 191, 143, 0.02));
  border-bottom: 1px solid var(--color-border);
}

.ms-history-th {
  font-size: 0.64rem;
  font-weight: 800;
  letter-spacing: 0.05em;
  color: var(--color-primary-dark);
}

.ms-history-row-latest {
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.10), transparent 65%);
  border-left-color: var(--color-primary);
}

.ms-history-row-warn {
  background: linear-gradient(90deg, rgba(245, 158, 11, 0.10), transparent 65%);
  border-left-color: #F59E0B;
}

.ms-history-date-title {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.9rem;
  color: var(--color-secondary);
}

.ms-history-date-sub {
  display: block;
  font-size: 0.72rem;
  color: var(--color-mist);
  margin-top: 2px;
}

.ms-history-latest-tag {
  font-size: 0.6rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 2px 8px;
  border-radius: 999px;
}

.ms-history-kilo-cell {
  display: flex;
  align-items: baseline;
  gap: 6px;
  font-size: 0.92rem;
  color: var(--color-secondary);
}

.ms-history-delta {
  font-size: 0.66rem;
  font-weight: 800;
  padding: 2px 8px;
  border-radius: 999px;
  color: #FFFFFF;
}

.ms-history-delta-down { background: linear-gradient(135deg, #5EEAD4, var(--color-primary-dark)); }
.ms-history-delta-up { background: linear-gradient(135deg, #FCD34D, #B45309); }

.ms-history-cell {
  font-size: 0.88rem;
  color: var(--color-charcoal);
}

.ms-history-warn-icon {
  font-size: 0.95rem;
}

/* ---- Randevularim (appointments.py) - Gecmis Olcumler ile ayni dil:
   ay bazli gruplama, durum renkli sol kenarlik, siradaki randevu vurgusu.
   Kendi sinif adlarini (.apt-history-*) kullaniyor, .appointment-row /
   admin panellerindeki diger liste kartlarina dokunmuyor. ---- */
.apt-history-wrap {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.apt-history-month-label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  align-self: flex-start;
  font-size: 0.72rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 5px 14px;
  border-radius: 999px;
  margin-top: 4px;
}

.apt-history-month-label-mask {
  width: 12px;
  height: 12px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.apt-history-card {
  position: relative;
  background: #FFFFFF;
  border-radius: 0.9rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
  overflow-x: auto;
}

/* Mobilde tablonun saga kaydirilabilir oldugunu belli eden ipucu
   (arastirma.md HATA 6) - .admin-cal-wrapper::after ile AYNI desen
   (degrade solma + ok), sadece kart kose yuvarlakligina gore olcek. */
@media (max-width: 900px) {
  .apt-history-card::after {
    content: "→";
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    width: 40px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding-right: 8px;
    color: var(--color-mist);
    font-size: 1rem;
    font-weight: 700;
    pointer-events: none;
    border-radius: 0 0.9rem 0.9rem 0;
    background: linear-gradient(to right, transparent, #FFFFFF 60%);
  }
}

.apt-history-row {
  display: grid;
  grid-template-columns: 190px 1fr 130px 1fr;
  gap: 16px;
  align-items: center;
  padding: 14px 24px;
  min-width: 680px;
  border-left: 3px solid transparent;
}

.apt-history-row + .apt-history-row {
  border-top: 1px solid var(--color-border);
}

.apt-history-header-row {
  padding-top: 10px;
  padding-bottom: 10px;
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.08), rgba(0, 191, 143, 0.02));
  border-bottom: 1px solid var(--color-border);
}

.apt-history-th {
  font-size: 0.64rem;
  font-weight: 800;
  letter-spacing: 0.05em;
  color: var(--color-primary-dark);
}

.apt-history-row-amber { border-left-color: #F59E0B; }
.apt-history-row-green { border-left-color: var(--color-primary); }
.apt-history-row-rose { border-left-color: var(--color-accent-wine); }

.apt-history-row-next {
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.10), transparent 65%);
}

/* "Mercan Panel" (CLAUDE.md madde 26) - .apt-history-* icin renkli varyant.
   .mb-pkg-bicon/.mb-pkg-th-lead-icon siniflari (theme.css .mb-pkg-* blogu)
   burada da aynen yeniden kullaniliyor, isimleri mb-pkg olsa da genel amacli. */
.apt-history-card.mp-colorful {
  background: linear-gradient(165deg, #5FE0E8 0%, #1EC1CB 55%, #0E8A92 100%);
}

.apt-history-header-row.mp-colorful {
  background: linear-gradient(90deg, #5FE0E8, #1EC1CB 55%, #0E8A92 100%);
  border-bottom: none;
  padding-top: 20px;
  padding-bottom: 20px;
}

.apt-history-header-row.mp-colorful .apt-history-th {
  font-size: 0.82rem;
  color: rgba(0, 0, 0, 0.78);
}

.apt-history-row.mp-tinted {
  background: var(--mp-tint) !important;
}

.apt-history-row.mp-tinted:hover .mb-pkg-bicon,
.apt-history-row-next:hover .mb-pkg-bicon {
  transform: scale(1.12) rotate(-6deg);
}

/* Teal kart arkaplaninin ustunde .apt-history-row-next'in eski yari-saydam
   yesil dolgusu (rgba(0,191,143,0.10)) neredeyse gorunmez oluyordu (ikisi de
   ayni teal aile) - "SIRADAKI" satiri renkli kartta da ayirt edilsin diye
   opak/acik bir zemine geciyor. */
.apt-history-card.mp-colorful .apt-history-row-next {
  background: #F0FDFA;
}

.apt-history-date-title {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.88rem;
  color: var(--color-secondary);
}

.apt-history-date-sub {
  display: block;
  font-size: 0.72rem;
  color: var(--color-mist);
  margin-top: 2px;
}

.apt-history-next-tag {
  font-size: 0.6rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 2px 8px;
  border-radius: 999px;
}

.apt-history-coach-cell {
  display: flex;
  align-items: center;
  gap: 8px;
  min-width: 0;
}

.apt-history-coach-name {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--color-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.apt-history-status-cell {
  display: flex;
}

.apt-history-note-cell {
  font-size: 0.85rem;
  color: var(--color-mist);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ---- Uyelik Durumu karti (membership.py) ---- */
.mb-status-card {
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  margin-bottom: var(--spacing-lg);
  overflow: hidden;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.mb-status-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.mb-status-card-active { background: #D8F5C8; }
.mb-status-card-inactive { background: #FFE3B0; }

.mb-status-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px 14px;
  border-bottom: 1px solid var(--color-border);
  gap: 10px;
}

.mb-status-header-left {
  display: flex;
  align-items: center;
  gap: 10px;
}

.mb-status-icon {
  position: relative;
  width: 34px;
  height: 34px;
  border-radius: 30%;
  overflow: hidden;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease;
}

.mb-status-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.mb-status-card:hover .mb-status-icon {
  transform: scale(1.15) rotate(-6deg);
}

.mb-status-icon-active {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
}

.mb-status-icon-inactive {
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  box-shadow: 0 4px 10px rgba(225, 29, 72, 0.28);
}

.mb-status-icon-mask {
  position: relative;
  z-index: 1;
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.mb-status-title {
  font-size: 0.9rem;
  font-weight: 800;
  color: var(--color-secondary);
}

.mb-status-badge {
  font-size: 0.75rem;
  font-weight: 800;
  padding: 5px 14px;
  border-radius: 999px;
  color: #FFFFFF;
}

.mb-status-badge-active { background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark)); }
.mb-status-badge-inactive { background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine)); }

.mb-status-body {
  padding: 18px 20px 20px;
}

.mb-status-info-row {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  margin-bottom: 14px;
}

.mb-status-info-label {
  display: block;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--color-mist);
  margin-bottom: 4px;
}

.mb-status-info-value {
  font-size: 1rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.mb-status-countdown {
  display: inline-block;
  font-size: 0.78rem;
  font-weight: 800;
  padding: 5px 14px;
  border-radius: 999px;
}

.mb-status-countdown-ok { background: var(--color-sage-tint); color: var(--color-primary-dark); }
.mb-status-countdown-neutral { background: rgba(59, 130, 246, 0.10); color: var(--color-module-appointment); }
.mb-status-countdown-warn { background: rgba(225, 29, 72, 0.10); color: var(--color-accent-wine); }

.mb-status-empty-text {
  margin: 0;
  font-size: 0.85rem;
  color: var(--color-mist);
  line-height: 1.5;
}

/* ---- Paketler tablosu (membership.py) - Gecmis Olcumler/Randevularim ile
   ayni dil: gradient baslik seridi, ikon rozetli kimlik hucresi, gradient
   fiyat chip'i, en uygun pakette vurgu. Kendi .mb-pkg-* siniflarini
   kullaniyor, Soft Tablo'ya dokunmuyor. ---- */
.mb-pkg-card {
  position: relative;
  background: #FFFFFF;
  border-radius: 0.9rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
  overflow-x: auto;
}

/* Mobilde saga kaydirma ipucu - .apt-history-card::after ile ayni desen
   (arastirma.md HATA 6). */
@media (max-width: 900px) {
  .mb-pkg-card::after {
    content: "→";
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    width: 40px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding-right: 8px;
    color: var(--color-mist);
    font-size: 1rem;
    font-weight: 700;
    pointer-events: none;
    border-radius: 0 0.9rem 0.9rem 0;
    background: linear-gradient(to right, transparent, #FFFFFF 60%);
  }
}

.mb-pkg-header-row,
.mb-pkg-row {
  display: grid;
  grid-template-columns: minmax(220px, 2fr) minmax(140px, 1fr) minmax(110px, auto);
  gap: 16px;
  align-items: center;
  padding: 14px 24px;
  min-width: 560px;
}

.mb-pkg-header-row {
  padding-top: 10px;
  padding-bottom: 10px;
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.08), rgba(0, 191, 143, 0.02));
  border-bottom: 1px solid var(--color-border);
}

.mb-pkg-th {
  font-size: 0.64rem;
  font-weight: 800;
  letter-spacing: 0.05em;
  color: var(--color-primary-dark);
}

.mb-pkg-row + .mb-pkg-row {
  border-top: 1px solid var(--color-border);
}

.mb-pkg-row {
  border-left: 3px solid transparent;
}

.mb-pkg-row-best {
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.08), transparent 65%);
  border-left-color: var(--color-primary);
}

.mb-pkg-identity {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}

.mb-pkg-icon {
  width: 38px;
  height: 38px;
  border-radius: 12px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
}

.mb-pkg-icon-mask {
  width: 17px;
  height: 17px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.mb-pkg-identity-text {
  min-width: 0;
}

.mb-pkg-name-row {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.mb-pkg-name {
  font-size: 0.9rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.mb-pkg-best-tag {
  font-size: 0.6rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 2px 8px;
  border-radius: 999px;
}

.mb-pkg-desc {
  display: block;
  font-size: 0.78rem;
  color: var(--color-mist);
  margin-top: 2px;
}

.mb-pkg-price-cell {
  display: flex;
  flex-direction: column;
  gap: 4px;
  align-items: flex-start;
}

.mb-pkg-price-chip {
  font-size: 0.8rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  padding: 4px 12px;
  border-radius: 999px;
}

.mb-pkg-duration {
  font-size: 0.7rem;
  color: var(--color-mist);
}

.mb-pkg-actions {
  display: flex;
  justify-content: flex-end;
}

/* "Mercan Panel" (CLAUDE.md madde 26) - teal baslik/arkaplan + solid bento pastel
   satirlar. Dashboard admin "Toplam Uye"/"Aktif Coach" tablolarinda kullaniliyor,
   .mb-pkg-card'in temel yapisini bozmadan opsiyonel bir ust katman. */
.mb-pkg-card.mp-colorful {
  background: linear-gradient(165deg, #5FE0E8 0%, #1EC1CB 55%, #0E8A92 100%);
}

.mb-pkg-header-row.mp-colorful {
  background: linear-gradient(90deg, #5FE0E8, #1EC1CB 55%, #0E8A92 100%);
  border-bottom: none;
  padding-top: 20px;
  padding-bottom: 20px;
}

.mb-pkg-header-row.mp-colorful .mb-pkg-th {
  font-size: 0.82rem;
  color: rgba(0, 0, 0, 0.78);
  text-shadow: none;
}

.mb-pkg-th-lead {
  display: inline-flex;
  align-items: center;
  gap: 10px;
}

.mb-pkg-th-lead-icon {
  width: 30px;
  height: 30px;
  border-radius: 9px;
  flex-shrink: 0;
  background: rgba(255, 255, 255, 0.32);
  display: flex;
  align-items: center;
  justify-content: center;
}

.mb-pkg-th-lead-icon-mask {
  width: 16px;
  height: 16px;
  background-color: rgba(0, 0, 0, 0.78);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.mb-pkg-row.mp-tinted {
  background: var(--mp-tint) !important;
}

.mb-pkg-row.mp-tinted + .mb-pkg-row.mp-tinted {
  border-top-color: rgba(0, 0, 0, 0.08);
}

.mb-pkg-bicon {
  position: relative;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 30%;
  overflow: hidden;
  background: linear-gradient(160deg, var(--mp-ic-a), var(--mp-ic-b));
  box-shadow: inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -8px 12px rgba(0, 0, 0, 0.14), 0 6px 14px -7px rgba(20, 32, 26, 0.4);
  transition: transform 0.2s ease;
}

.mb-pkg-bicon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.mb-pkg-bicon-mask {
  position: relative;
  z-index: 1;
  width: 52%;
  height: 52%;
  background-color: #fff;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.mb-pkg-bicon-34 {
  width: 34px;
  height: 34px;
}

.mb-pkg-row.mp-tinted:hover .mb-pkg-bicon {
  transform: scale(1.12) rotate(-6deg);
}

.mb-pkg-icon-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.74rem;
  font-weight: 800;
  color: #fff;
  padding: 4px 11px 4px 5px;
  border-radius: 999px;
  white-space: nowrap;
  background: linear-gradient(135deg, var(--mp-ic-a), var(--mp-ic-b));
}

.mb-pkg-icon-chip .mb-pkg-bicon {
  width: 19px;
  height: 19px;
  background: rgba(255, 255, 255, 0.28);
  box-shadow: none;
}

.mb-pkg-icon-chip .mb-pkg-bicon::before {
  display: none;
}

.mb-pkg-icon-chip .mb-pkg-bicon-mask {
  width: 60%;
  height: 60%;
}

.mb-pkg-review-btn {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  font-size: 0.8rem;
  padding: 8px 18px;
  margin-bottom: 0;
}

/* ---- Bildirimler tablosu (notifications.py) - Gecmis Olcumler ile ayni
   dil: tur bazli renkli ikon rozeti, okunmamislarda vurgu + sol kenarlik,
   YENI etiketi. Kendi .notif-history-* siniflarini kullaniyor. ---- */
.notif-actions-row {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: var(--spacing-sm);
}

.notif-mark-all-btn {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  margin-bottom: 0;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.notif-delete-all-btn {
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  box-shadow: 0 4px 10px rgba(225, 29, 72, 0.28);
  margin-bottom: 0;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.notif-mark-all-btn:hover,
.notif-delete-all-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 8px 18px -6px rgba(20, 32, 26, 0.35);
}

.notif-history-card {
  background: #FFFFFF;
  border-radius: 0.9rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
}

/* Panelim'de gomulu proaktif takip widget'i (bkz. pages/dashboard.py
   render_proactive_focus) - dashboard'daki diger kartlarla (weekly-focus-card
   vb.) ayni alt bosluk. */
.dashboard-proactive-focus {
  margin-bottom: var(--spacing-lg);
}

/* ---- Tarayici Bildirimleri karti (pages/notifications.py render_push_card) -
   Mercan Panel (madde 26): teal baslik/arkaplan + solid bento-pastel satirlar.
   Icerigi assets/push-notifications.js dolduruyor (bkz. o dosya). ---- */
.mp-card {
  border-radius: 20px;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.02), 0 12px 28px rgba(0, 0, 0, 0.06);
  overflow: hidden;
  margin-bottom: var(--spacing-lg);
  background: linear-gradient(165deg, #5FE0E8 0%, #1EC1CB 55%, #0E8A92 100%);
}

.mp-card-header {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 18px 22px;
  background: linear-gradient(90deg, #5FE0E8, #1EC1CB 55%, #0E8A92 100%);
}

.mp-card-header-icon {
  width: 38px;
  height: 38px;
  border-radius: 12px;
  flex-shrink: 0;
  background: linear-gradient(160deg, #FF9F7A, #EF5DA8);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1.5px 1.5px rgba(255, 255, 255, 0.5), 0 4px 10px -6px rgba(20, 32, 26, 0.35);
  animation: mp-bicon-idle 3.2s ease-in-out infinite;
}

@keyframes mp-bicon-idle {
  0%, 100% { transform: rotate(0deg) scale(1); }
  50% { transform: rotate(-6deg) scale(1.06); }
}

.mp-card-header-title {
  font-weight: 800;
  font-size: 1rem;
  flex: 1;
  color: #FFFFFF;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}

.mp-status-badge {
  font-size: 0.7rem;
  font-weight: 700;
  padding: 4px 11px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.92);
  color: #0E8A92;
}

.mp-card-body {
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.push-notif-loading {
  margin: 4px 6px;
  font-size: 0.85rem;
  color: rgba(255, 255, 255, 0.85);
}

.push-notif-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  background: #D8F5C8;
  border-radius: 16px;
  padding: 16px 18px;
}

.push-notif-row-icon {
  width: 36px;
  height: 36px;
  border-radius: 30%;
  flex-shrink: 0;
  background: linear-gradient(160deg, #7EE0A8, #17A76B);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55), 0 4px 10px -6px rgba(20, 32, 26, 0.35);
}

.push-notif-row-icon svg {
  width: 16px;
  height: 16px;
  color: #FFFFFF;
}

.push-notif-row-text { flex: 1; }

.push-notif-row-title {
  font-weight: 700;
  font-size: 0.92rem;
  margin-bottom: 3px;
  color: #0E3B24;
}

.push-notif-row-sub {
  font-size: 0.8rem;
  color: #2F5A3E;
  line-height: 1.5;
}

.push-notif-toggle {
  position: relative;
  width: 46px;
  height: 27px;
  flex-shrink: 0;
  cursor: pointer;
}

.push-notif-toggle input {
  opacity: 0;
  width: 0;
  height: 0;
}

.push-notif-toggle-track {
  position: absolute;
  inset: 0;
  background: rgba(14, 59, 36, 0.25);
  border-radius: 999px;
  transition: background 0.2s ease;
}

.push-notif-toggle-track::before {
  content: "";
  position: absolute;
  width: 23px;
  height: 23px;
  left: 2px;
  top: 2px;
  background: #FFFFFF;
  border-radius: 50%;
  transition: transform 0.2s ease;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25);
}

.push-notif-toggle input:checked + .push-notif-toggle-track { background: #17A76B; }
.push-notif-toggle input:checked + .push-notif-toggle-track::before { transform: translateX(19px); }
.push-notif-toggle input:disabled + .push-notif-toggle-track { opacity: 0.6; cursor: not-allowed; }

.push-notif-device {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 12px 16px;
  background: #C3DDF6;
  border-radius: 16px;
  font-size: 0.82rem;
  color: #0B2E4F;
}

.push-notif-device-icon {
  width: 32px;
  height: 32px;
  border-radius: 30%;
  flex-shrink: 0;
  background: linear-gradient(160deg, #8FC7F7, #3B82F6);
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55), 0 4px 10px -6px rgba(20, 32, 26, 0.35);
}

.push-notif-device-icon svg {
  width: 15px;
  height: 15px;
  color: #FFFFFF;
}

.push-notif-device-name { flex: 1; font-weight: 700; }
.push-notif-device-meta { color: #3B6690; font-size: 0.76rem; }

.push-notif-device-remove {
  border: none;
  background: transparent;
  color: #0B2E4F;
  font-size: 0.76rem;
  cursor: pointer;
  text-decoration: underline;
  font-weight: 600;
}

.push-notif-unsupported {
  background: #F3F5F4;
  color: #4B5563;
}

.notif-history-row {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 16px 24px;
  border-left: 3px solid transparent;
  transition: background 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;
}

.notif-history-row:hover {
  background: #F7F8F4;
  transform: translateX(3px);
  box-shadow: -3px 0 0 var(--color-primary) inset;
}

.notif-history-row:hover .notif-history-icon {
  transform: scale(1.1);
}

.notif-history-row + .notif-history-row {
  border-top: 1px solid var(--color-border);
}

/* "Mercan Panel" (CLAUDE.md madde 26) - .notif-history-* icin renkli varyant.
   Satırlar zaten kendi anlamlı tipe-gore rengini taşıdığı icin (mavi=randevu,
   turkuaz=olcum, amber=yorum) SATIRLARA dokunulmuyor - sadece kart arkaplani
   ve tepeye eklenen baslik seridi teal oluyor. */
.notif-history-card.mp-colorful {
  background: linear-gradient(165deg, #5FE0E8 0%, #1EC1CB 55%, #0E8A92 100%);
}

.notif-history-header-row.mp-colorful {
  display: flex;
  align-items: center;
  padding: 20px 24px;
  background: linear-gradient(90deg, #5FE0E8, #1EC1CB 55%, #0E8A92 100%);
}

.notif-history-header-row.mp-colorful .mb-pkg-th {
  font-size: 0.82rem;
  color: rgba(0, 0, 0, 0.78);
}

.notif-history-row-unread {
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.06), transparent 65%);
  border-left-color: var(--color-primary);
}

.notif-history-row.mp-tinted {
  background: var(--mp-tint) !important;
}

.notif-history-icon {
  position: relative;
  width: 36px;
  height: 36px;
  border-radius: 30%;
  overflow: hidden;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 2px;
  transition: transform 0.2s ease;
}

.notif-history-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.notif-history-icon-blue { background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment)); }
.notif-history-icon-teal { background: linear-gradient(135deg, #5EEAD4, var(--color-module-measurement)); }
.notif-history-icon-amber { background: linear-gradient(135deg, #FCD34D, #B45309); }
.notif-history-icon-neutral { background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral)); }
/* Proaktif takip icin eklendi (tempo_deviation/target_weight_near) - ayni
   mercan_color() TILES paletindeki pembe/yesil aile (bkz. components/mercan_panel.py). */
.notif-history-icon-rose { background: linear-gradient(135deg, #FDA4AF, #E11D48); }
.notif-history-icon-green { background: linear-gradient(135deg, #7EE0A8, #17A76B); }

.notif-history-icon-mask {
  position: relative;
  z-index: 1;
  width: 17px;
  height: 17px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

/* ---- /notifications sayfasina K bento dili (2026-08-21) - notif-history-*
   PAYLASILAN class'lar (pages/profile.py'de de gomulu widget olarak
   kullaniliyor, bkz. CLAUDE.md 2026-08-20 oturum notu) - bu yuzden pastel
   arka plan SADECE ".notifications-page " on ekiyle bu sayfaya scoped,
   profile.py'deki gomulu widget bilerek noturk beyaz kaliyor. Renkler
   notif-history-icon-{variant} ile ayni aile (blue/teal/amber/neutral),
   sadece hafif/pastel versiyonlari - ikon rengiyle satirin kendisi arasinda
   gorsel bir baglanti kuruyor. */
.notifications-page .notif-history-row-blue { background: #EAF2FC; }
.notifications-page .notif-history-row-teal { background: #E6FBF5; }
.notifications-page .notif-history-row-amber { background: #FFF6E8; }
.notifications-page .notif-history-row-neutral { background: #F3F5F4; }
.notifications-page .notif-history-row-rose { background: #FDF0F2; }
.notifications-page .notif-history-row-green { background: #EAFBF0; }

.notifications-page .notif-history-row-blue:hover { background: #DCEBFA; }
.notifications-page .notif-history-row-teal:hover { background: #D6F7EC; }
.notifications-page .notif-history-row-amber:hover { background: #FFEFD4; }
.notifications-page .notif-history-row-neutral:hover { background: #E9ECEA; }
.notifications-page .notif-history-row-rose:hover { background: #FBE1E5; }
.notifications-page .notif-history-row-green:hover { background: #D9F5E4; }

.notif-history-body {
  flex: 1;
  min-width: 0;
}

.notif-history-title-row {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 3px;
}

.notif-history-type {
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.notif-history-new-tag {
  font-size: 0.6rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 2px 8px;
  border-radius: 999px;
}

.notif-history-message {
  display: block;
  font-size: 0.85rem;
  color: var(--color-mist);
  line-height: 1.5;
}

.notif-history-date {
  flex-shrink: 0;
  font-size: 0.72rem;
  color: var(--color-mist);
  white-space: nowrap;
  padding-top: 3px;
}

.notif-history-actions {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  gap: 4px;
}

.notif-history-delete-btn {
  width: 32px;
  height: 32px;
  padding: 0;
  background: transparent;
  border: none;
  box-shadow: none;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 0;
}

.notif-history-delete-btn:hover {
  transform: none;
  box-shadow: none;
  background: rgba(225, 29, 72, 0.08);
  border-radius: 8px;
}

.notif-history-delete-mask {
  width: 15px;
  height: 15px;
  background-color: var(--color-mist);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.notif-history-delete-btn:hover .notif-history-delete-mask {
  background-color: var(--color-accent-wine);
}

.notif-history-read-btn {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  color: #FFFFFF;
  box-shadow: 0 4px 10px rgba(59, 130, 246, 0.28);
  font-size: 0.75rem;
  padding: 6px 14px;
  margin-bottom: 0;
}

.notif-history-read-btn:hover {
  filter: brightness(1.05);
  box-shadow: 0 4px 10px rgba(59, 130, 246, 0.28);
}

/* Proaktif takip satirlarindaki ozel aksiyon linki (Mesaj Gonder/Tempo
   Degistir/Kutla) - bkz. pages/dashboard.py render_proactive_focus. */
.notif-history-action-btn {
  display: inline-flex;
  align-items: center;
  background: var(--color-secondary);
  color: #FFFFFF;
  text-decoration: none;
  font-size: 0.75rem;
  font-weight: 700;
  padding: 7px 14px;
  border-radius: 999px;
  white-space: nowrap;
  transition: transform 0.15s ease, filter 0.15s ease;
}

.notif-history-action-btn:hover {
  filter: brightness(1.15);
  transform: translateY(-1px);
}

@media (max-width: 640px) {
  /* Eskiden sadece flex-wrap veriliyordu - ikon/baslik/mesaj/tarih/aksiyon
     satirlarin genislik/dagilim payi tanimsiz kaldigi icin mesaj kelime
     kelime kirilip "YENI" rozeti tarihe biniyordu (arastirma.md HATA 1).
     Grid'e geciliyor: .notif-history-body'ye display:contents verilip
     kendi cocuklari (title-row/message) dogrudan grid item olarak 3
     bolgeye (baslik/mesaj/aksiyon) yerlestiriliyor - DOM/Python markup
     degismeden sadece CSS ile. */
  .notif-history-row {
    display: grid;
    grid-template-columns: 36px 1fr auto;
    grid-template-areas:
      "icon title date"
      "icon message message"
      "actions actions actions";
    column-gap: 10px;
    row-gap: 6px;
    padding: 14px 16px;
  }

  .notif-history-icon {
    grid-area: icon;
    margin-top: 0;
  }

  .notif-history-body {
    display: contents;
  }

  .notif-history-title-row {
    grid-area: title;
    margin-bottom: 0;
    flex-wrap: wrap;
  }

  .notif-history-message {
    grid-area: message;
    width: 100%;
  }

  .notif-history-date {
    grid-area: date;
    padding-top: 2px;
    justify-self: end;
  }

  .notif-history-actions {
    grid-area: actions;
    justify-content: flex-end;
  }

  .notif-history-actions:empty {
    display: none;
  }
}

/* ---- Profil sayfasi kartlari (profile.py) - Gecmis Olcumler/Uyelik Durumu
   ile ayni dil: ikon rozetli baslik seridi, gradient rozet/buton. ---- */
.pf-card {
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  margin-bottom: var(--spacing-lg);
  overflow: hidden;
}

/* "Plan Bilgileri" karti (pages/admin/meal_plans.py) - DatePickerSingle takvim
   popup'i .pf-card'in overflow:hidden'i tarafindan kirpiliyordu (bkz.
   2026-08-24 ekran goruntusu raporu). Bu sayfadaki kartlar renkli/mp-colorful
   baslik kullanmiyor, yani overflow:hidden'in tek gorevi olan koseleri
   yuvarlatma ihtiyaci burada yok - guvenle visible yapilabiliyor. */
.meal-plans-page .pf-card {
  overflow: visible;
}

.pf-card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px 14px;
  border-bottom: 1px solid var(--color-border);
  gap: 10px;
}

.pf-card-header-left {
  display: flex;
  align-items: center;
  gap: 10px;
}

.pf-card-header-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
}

.pf-card-header-icon-mask {
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.pf-card-header-title {
  font-size: 0.9rem;
  font-weight: 800;
  color: var(--color-secondary);
}

.pf-card-body {
  padding: 18px 20px 20px;
}

.pf-card-body-flush {
  padding: 0;
}

.pf-count-badge {
  min-width: 22px;
  height: 22px;
  padding: 0 7px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 999px;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
  font-size: 0.72rem;
  font-weight: 800;
}

.pf-status-badge {
  font-size: 0.72rem;
  font-weight: 800;
  padding: 4px 12px;
  border-radius: 999px;
}

.pf-status-badge-ok { background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark)); color: #FFFFFF; }
.pf-status-badge-neutral { background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral)); color: #FFFFFF; }

.pf-gradient-btn {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
}

/* ---- /profile'a K bento dili (2026-08-20) ----
   .pf-card/.pf-card-header-icon/.notif-header-icon PAYLASILAN siniflar (admin/*
   ve baska sayfalar da kullaniyor, bkz. CLAUDE.md madde 16/23) - bu yuzden hicbiri
   DEGISTIRILMEDI, hepsi ".profile-page " on ekiyle SADECE bu sayfaya scoped. */
.profile-page .pf-card {
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.profile-page .pf-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.profile-page .pf-tile-t1 { background: #FFE3B0; }
.profile-page .pf-tile-t2 { background: #E9F5A8; }
.profile-page .pf-tile-t3 { background: #C3DDF6; }
.profile-page .pf-tile-t4 { background: #D8F5C8; }

.profile-page .pf-card-header-icon,
.profile-page .notif-header-icon {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
  transition: transform 0.2s ease;
}

.profile-page .pf-card-header-icon::before,
.profile-page .notif-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.profile-page .pf-card-header-icon-mask,
.profile-page .notif-header-icon-mask {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.profile-page .pf-card:hover .pf-card-header-icon,
.profile-page .pf-card:hover .notif-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

/* ---- /admin/measurements'a K bento dili (2026-08-21) - /profile'daki AYNI
   tarif (bkz. yukaridaki ".profile-page .pf-card" bloku), sadece
   ".admin-measurements-page " on ekiyle bu sayfaya scoped. Paylasilan
   .pf-card/.pf-card-header-icon class'lari yine DEGISTIRILMEDI. */
.admin-measurements-page .pf-card {
  transition: box-shadow 0.15s ease;
}

/* KURAL: transform:translateY burada BILEREK yok (diger .pf-card:hover
   varyantlarinin aksine) - transform, CSS'e gore position:fixed alt
   elemanlar icin yeni bir "containing block" olusturuyor. Bu sayfada
   dcc.DatePickerSingle (Radix, popup'i position:fixed) var - kart hover'da
   yukari kayinca (ozellikle mouse karttan disari, asagidaki popup'a dogru
   hareket edip hover'in kalkmasiyla) takvim popup'i yanlis/kaymis konumda
   hesaplaniyor, ay secim listesi gun izgarasinin ustune bindi (kullanici
   raporu, ekran goruntusu 2026-08-27 16:27). meal-plans/site-settings
   sayfalari da ayni sebeple bu hover-lift efektini hic kullanmiyor. */
.admin-measurements-page .pf-card:hover {
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.admin-measurements-page .pf-tile-t1 { background: #FFE3B0; }
.admin-measurements-page .pf-tile-t2 { background: #E9F5A8; }
.admin-measurements-page .pf-tile-t3 { background: #C3DDF6; }
.admin-measurements-page .pf-tile-t4 { background: #D8F5C8; }

/* "Üye Listesi"/"Mevcut Coach'lar" kartlari - "Profil Bilgileri" (yukaridaki
   .admin-measurements-page bloku) ile ayni Gradient Kart bento renk tarifi,
   kullanicinin acikca istedigi referans (2026-08-24). */
.admin-users-page .pf-tile-t1,
.admin-coaches-page .pf-tile-t1 { background: #FFE3B0; }
.admin-users-page .pf-tile-t2,
.admin-coaches-page .pf-tile-t2 { background: #E9F5A8; }
.admin-users-page .pf-tile-t3,
.admin-coaches-page .pf-tile-t3 { background: #C3DDF6; }
.admin-users-page .pf-tile-t4,
.admin-coaches-page .pf-tile-t4 { background: #D8F5C8; }

.admin-users-page .pf-card-header-icon,
.admin-coaches-page .pf-card-header-icon,
.admin-coaches-page .coach-header-icon {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
  transition: transform 0.2s ease;
}

.admin-users-page .pf-card-header-icon::before,
.admin-coaches-page .pf-card-header-icon::before,
.admin-coaches-page .coach-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.admin-users-page .pf-card-header-icon-mask,
.admin-coaches-page .pf-card-header-icon-mask,
.admin-coaches-page .coach-header-icon-mask {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.admin-users-page .pf-card:hover .pf-card-header-icon,
.admin-coaches-page .pf-card:hover .pf-card-header-icon,
.admin-coaches-page .pf-card:hover .coach-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

/* Pasiflestir/Aktiflestir/Sifreyi Sifirla butonlari - bento renk ailesiyle
   (_MERCAN_TILES ile ayni hex degerleri) birebir eslesecek sekilde. Bu
   siniflar (.admin-apt-reject-btn/.pf-gradient-btn/.admin-apt-complete-btn)
   baska sayfalarda da paylasildigi icin degisiklik SADECE bu iki sayfaya
   scoped. */
.admin-users-page .admin-apt-reject-btn,
.admin-coaches-page .admin-apt-reject-btn {
  /* Eskisi (#FDA4AF -> var(--color-accent-wine)) zaten #E11D48'e esitti, yani
     bu ikisi zaten neredeyse ayniydi - fark edilir olsun diye bento mor
     ailesine (_MERCAN_TILES) geciyor. */
  background: linear-gradient(135deg, #C4B5FD, #7C3AED);
  box-shadow: 0 4px 10px rgba(124, 58, 237, 0.28);
}

.admin-users-page .pf-gradient-btn,
.admin-coaches-page .pf-gradient-btn {
  background: linear-gradient(135deg, #7EE0A8, #17A76B);
  box-shadow: 0 4px 10px rgba(23, 167, 107, 0.28);
}

.admin-users-page .admin-apt-complete-btn,
.admin-coaches-page .admin-apt-complete-btn {
  /* Eskisi (#93C5FD -> var(--color-module-appointment)=#3B82F6) da bento
     mavisine (#8FC7F7 -> #3B82F6) cok yakindi, goz farkli algilamiyordu -
     bento turuncu ailesine geciyor, boylece Pasiflestir (mor) / Aktiflestir
     (yesil) / Sifreyi Sifirla (turuncu) uc butonun UCU DE birbirinden ve
     eski halinden net ayirt edilebiliyor. */
  background: linear-gradient(135deg, #FFC876, #FF9F43);
  box-shadow: 0 4px 10px rgba(255, 159, 67, 0.28);
}

/* /admin/telegram-ayarlari - "Yeni Coach Ekle" (admin-coaches-page) ile ayni
   Gradient Kart bento tile + ikon animasyon tarifi, kullanicinin acikca
   istedigi referans (2026-08-29). */
.admin-telegram-settings-page .pf-tile-t1 { background: #FFE3B0; }
.admin-telegram-settings-page .pf-tile-t2 { background: #E9F5A8; }
.admin-telegram-settings-page .pf-tile-t3 { background: #C3DDF6; }
.admin-telegram-settings-page .pf-tile-t4 { background: #D8F5C8; }

.admin-telegram-settings-page .pf-card-header-icon {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
  transition: transform 0.2s ease;
}

.admin-telegram-settings-page .pf-card-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.admin-telegram-settings-page .pf-card-header-icon-mask {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.admin-telegram-settings-page .pf-card:hover .pf-card-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

/* Hatirlatma Zamanlari karti - saat alanlari "HH:00" gorunumunde, saat
   kutusu + sabit ":00" kutusu yan yana (bkz. pages/admin/telegram_settings.py
   time_field()). Veri modeli sadece saat tutuyor (dakika hep 0), ":00" kutusu
   salt gorsel/devre disi - gercek input SADECE saat degeri. */
.ts-time-inputs {
  display: flex;
  align-items: center;
  gap: 4px;
}

.ts-time-inputs .ts-time-hour {
  width: 64px;
  flex: none;
}

.ts-time-colon {
  font-weight: 700;
  color: var(--color-text-secondary);
}

.ts-time-minute {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 48px;
  height: 38px;
  border-radius: var(--radius-md);
  background: rgba(255, 255, 255, 0.6);
  border: 1px solid var(--color-border);
  color: var(--color-text-secondary);
  font-weight: 600;
}

.ts-toggle-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-md);
}

.ts-toggle-row .field-group {
  max-width: none;
  flex: 1 1 170px;
}

.admin-measurements-page .pf-card-header-icon,
.admin-measurements-page .apt-booking-header-icon,
.admin-measurements-page .coach-header-icon,
.admin-measurements-page .measurement-header-icon {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
  transition: transform 0.2s ease;
}

.admin-measurements-page .pf-card-header-icon::before,
.admin-measurements-page .apt-booking-header-icon::before,
.admin-measurements-page .coach-header-icon::before,
.admin-measurements-page .measurement-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.admin-measurements-page .pf-card-header-icon-mask,
.admin-measurements-page .apt-booking-header-icon-mask,
.admin-measurements-page .coach-header-icon-mask,
.admin-measurements-page .measurement-header-icon-mask {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.admin-measurements-page .pf-card:hover .pf-card-header-icon,
.admin-measurements-page .pf-card:hover .apt-booking-header-icon,
.admin-measurements-page .pf-card:hover .coach-header-icon,
.admin-measurements-page .pf-card:hover .measurement-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

/* ---- /admin/ai-coach'a K bento dili (2026-08-21) - ayni tarif, bu sayfaya
   scoped. Statik "Uye Sec" karti + AI'nin calisma zamaninda urettigi
   .ai-section-card'lar (render_ai_sections) dahil - ikisi de .pf-tile-t1..4
   class'ini Python tarafindan zaten aliyor (bkz. _ai_coach_card/
   render_ai_sections), burada sadece renk+ikon CSS'i tanimlaniyor. */
.ai-coach-page .pf-card,
.ai-coach-page .ai-section-card {
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.ai-coach-page .pf-card:hover,
.ai-coach-page .ai-section-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.ai-coach-page .pf-tile-t1 { background: #FFE3B0; }
.ai-coach-page .pf-tile-t2 { background: #E9F5A8; }
.ai-coach-page .pf-tile-t3 { background: #C3DDF6; }
.ai-coach-page .pf-tile-t4 { background: #D8F5C8; }

.ai-coach-page .pf-card-header-icon,
.ai-coach-page .chart-header-icon,
.ai-coach-page .apt-booking-header-icon,
.ai-coach-page .coach-header-icon {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
  transition: transform 0.2s ease;
}

.ai-coach-page .pf-card-header-icon::before,
.ai-coach-page .chart-header-icon::before,
.ai-coach-page .apt-booking-header-icon::before,
.ai-coach-page .coach-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.ai-coach-page .pf-card-header-icon-mask,
.ai-coach-page .chart-header-icon-mask,
.ai-coach-page .apt-booking-header-icon-mask,
.ai-coach-page .coach-header-icon-mask {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.ai-coach-page .pf-card:hover .pf-card-header-icon,
.ai-coach-page .ai-section-card:hover .chart-header-icon,
.ai-coach-page .ai-section-card:hover .apt-booking-header-icon,
.ai-coach-page .ai-section-card:hover .coach-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

/* ---- /admin/meal-plans'a K bento dili (2026-08-21) - ayni tarif. Gunluk
   ogun kartlari (.emt-card, render_meal_table_card) DAY_ICON_VARIANTS'daki
   7 farkli ikon rengini kullaniyor - hepsi burada squircle+gloss aliyor. */
.meal-plans-page .pf-card,
.meal-plans-page .emt-card {
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.meal-plans-page .pf-card:hover,
.meal-plans-page .emt-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.meal-plans-page .pf-tile-t1 { background: #FFE3B0; }
.meal-plans-page .pf-tile-t2 { background: #E9F5A8; }
.meal-plans-page .pf-tile-t3 { background: #C3DDF6; }
.meal-plans-page .pf-tile-t4 { background: #D8F5C8; }

.meal-plans-page .pf-card-header-icon,
.meal-plans-page .nutrition-header-icon,
.meal-plans-page .chart-header-icon,
.meal-plans-page .apt-booking-header-icon,
.meal-plans-page .coach-header-icon,
.meal-plans-page .measurement-header-icon,
.meal-plans-page .notif-header-icon,
.meal-plans-page .stress-header-icon {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
  transition: transform 0.2s ease;
}

.meal-plans-page .pf-card-header-icon::before,
.meal-plans-page .nutrition-header-icon::before,
.meal-plans-page .chart-header-icon::before,
.meal-plans-page .apt-booking-header-icon::before,
.meal-plans-page .coach-header-icon::before,
.meal-plans-page .measurement-header-icon::before,
.meal-plans-page .notif-header-icon::before,
.meal-plans-page .stress-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.meal-plans-page .pf-card-header-icon-mask,
.meal-plans-page .nutrition-header-icon-mask,
.meal-plans-page .chart-header-icon-mask,
.meal-plans-page .apt-booking-header-icon-mask,
.meal-plans-page .coach-header-icon-mask,
.meal-plans-page .measurement-header-icon-mask,
.meal-plans-page .notif-header-icon-mask,
.meal-plans-page .stress-header-icon-mask {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.meal-plans-page .pf-card:hover .pf-card-header-icon,
.meal-plans-page .pf-card:hover .nutrition-header-icon,
.meal-plans-page .emt-card:hover .chart-header-icon,
.meal-plans-page .emt-card:hover .apt-booking-header-icon,
.meal-plans-page .emt-card:hover .coach-header-icon,
.meal-plans-page .emt-card:hover .measurement-header-icon,
.meal-plans-page .emt-card:hover .notif-header-icon,
.meal-plans-page .emt-card:hover .stress-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

.pf-goal-body {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 14px;
}

.pf-goal-target-label {
  display: block;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--color-mist);
  margin-bottom: 4px;
}

.pf-goal-target-value {
  font-size: 1.2rem;
  font-weight: 800;
  color: var(--color-secondary);
}

.pf-goal-chip {
  font-size: 0.8rem;
  font-weight: 800;
  padding: 6px 16px;
  border-radius: 999px;
}

.pf-goal-chip-ok { background: var(--color-sage-tint); color: var(--color-primary-dark); }
.pf-goal-chip-neutral { background: rgba(59, 130, 246, 0.10); color: var(--color-module-appointment); }
.pf-goal-chip-warn { background: rgba(225, 29, 72, 0.10); color: var(--color-accent-wine); }

/* ---- /admin/member-detail'e K bento dili (2026-08-21) - ayni tarif, bu
   sayfaya scoped. render_targets_form()/render_tempo_form() eskiden duz
   ".section-header-row" + ".md-targets-form" (beyaz kutu) kullaniyordu,
   simdi _md_card() ile diger _am_card()/_mp_card() ile ayni pf-card+pf-tile
   desenine tasindi. */
.member-detail-page .pf-card {
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.member-detail-page .pf-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.member-detail-page .pf-tile-t1 { background: #FFE3B0; }
.member-detail-page .pf-tile-t2 { background: #E9F5A8; }
.member-detail-page .pf-tile-t3 { background: #C3DDF6; }
.member-detail-page .pf-tile-t4 { background: #D8F5C8; }

.member-detail-page .pf-card-header-icon {
  position: relative;
  border-radius: 30%;
  overflow: hidden;
  transition: transform 0.2s ease;
}

.member-detail-page .pf-card-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.member-detail-page .pf-card-header-icon-mask {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.member-detail-page .pf-card:hover .pf-card-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

/* Uye kimlik karti (render_profile_card, .identity-card) - bu class
   /measurements ve /profile'da da paylasiliyor ama o iki sayfada BILEREK
   kapsam disi birakilmisti (bkz. CLAUDE.md/hafiza, "Kimlik karti ... kapsam
   disi") - burada admin/coach tarafinda ayri bir karar olarak, SADECE bu
   sayfaya scoped pastel+hover verildi, diger iki sayfadaki notr hali
   degismedi. */
.member-detail-page .identity-card {
  background: #FFE3B0;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.member-detail-page .identity-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

/* ---- Uye hedef formu (admin/member_detail.py) ---- */
.md-targets-form {
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  padding: var(--spacing-md);
  margin-bottom: var(--spacing-lg);
}

.md-targets-row {
  display: flex;
  gap: var(--spacing-lg);
  flex-wrap: wrap;
  margin: var(--spacing-sm) 0 var(--spacing-md);
}

.md-targets-row > div {
  flex: 1;
  min-width: 180px;
}

.admin-measurement-row:hover,
.appointment-row:hover,
.admin-appointment-row:hover,
.user-row:hover,
.coach-row:hover,
.mr-row:hover,
.measurement-row:hover,
.notif-row:hover {
  transform: translateY(-2px);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.09);
}

.notif-unread {
  border-left: 3px solid var(--color-primary);
  background: rgba(0, 191, 143, 0.12);
}

.notif-soft-unread-pill {
  margin-left: 8px;
}

.notif-type {
  font-weight: 600;
  color: var(--color-secondary);
  margin-bottom: var(--spacing-xs);
}

.notif-date {
  color: var(--color-mist);
  font-size: 0.85rem;
  margin-top: var(--spacing-xs);
}

.measurement-note {
  color: var(--color-mist);
  font-size: 0.85rem;
  margin-top: var(--spacing-xs);
}

/* ---- Randevu durum rozetleri (dmc.Badge variant="light" referansi) ---- */
.status-badge {
  display: inline-flex;
  align-items: center;
  padding: 3px 12px;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 700;
  white-space: nowrap;
}

.status-badge-approved {
  background: linear-gradient(135deg, #5EEAD4, #0D9488);
  color: #FFFFFF;
}

.status-badge-pending {
  background: linear-gradient(135deg, #FCD9A8, var(--color-warning));
  color: #FFFFFF;
}

.status-badge-rejected {
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  color: #FFFFFF;
}

.status-badge-completed {
  background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral));
  color: #FFFFFF;
}

/* /admin/audit-log - islem turune gore gradient rozet */
.audit-badge-insert {
  background: linear-gradient(135deg, #5EEAD4, #0D9488);
  color: #FFFFFF;
}

.audit-badge-update {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  color: #FFFFFF;
}

.audit-badge-delete {
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  color: #FFFFFF;
}

.card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-sm);
  margin-bottom: var(--spacing-xs);
}

.card-title {
  font-weight: 600;
  color: var(--color-secondary);
}

.apt-card-date {
  color: var(--color-mist);
  font-size: 0.9rem;
}

.apt-card-note {
  margin-top: var(--spacing-xs);
  font-size: 0.9rem;
}

.apt-card-actions {
  display: flex;
  gap: var(--spacing-sm);
  margin-top: var(--spacing-sm);
}

/* ---- Randevu alma karti (uye) ---- */
.apt-booking-card {
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-md);
  background: #C3DDF6;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.apt-booking-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.apt-booking-header {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-bottom: var(--spacing-md);
}

.apt-booking-header-icon {
  position: relative;
  width: 34px;
  height: 34px;
  border-radius: 30%;
  overflow: hidden;
  flex-shrink: 0;
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease;
}

.apt-booking-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.apt-booking-card:hover .apt-booking-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

.apt-booking-header-icon-mask {
  position: relative;
  z-index: 1;
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.apt-booking-header-title {
  font-size: 0.95rem;
  font-weight: 800;
  color: var(--color-secondary);
}

.apt-selection-summary {
  margin: var(--spacing-sm) 0;
}

.apt-summary-hint {
  font-size: 0.8rem;
  color: var(--color-mist);
}

.apt-summary-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.apt-summary-chip {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: linear-gradient(135deg, rgba(59, 130, 246, 0.10), rgba(59, 130, 246, 0.04));
  border: 1px solid rgba(59, 130, 246, 0.20);
  color: var(--color-secondary);
  font-size: 0.8rem;
  font-weight: 700;
  padding: 6px 14px 6px 8px;
  border-radius: 999px;
}

.apt-summary-chip-plain {
  padding: 6px 14px;
}

.apt-submit-button {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  box-shadow: 0 6px 16px rgba(59, 130, 246, 0.30);
}

.apt-submit-button:hover {
  box-shadow: 0 8px 18px rgba(59, 130, 246, 0.38);
}

.apt-submit-button:disabled {
  background: rgba(15, 23, 42, 0.08);
  color: var(--color-mist);
  box-shadow: none;
  cursor: not-allowed;
  transform: none;
}

.apt-booking-grid {
  display: grid;
  grid-template-columns: 1fr 220px;
  gap: var(--spacing-lg);
  margin: var(--spacing-md) 0;
  align-items: start;
}

.apt-calendar-panel {
  min-width: 0;
  padding: var(--spacing-md);
  background: rgba(255, 255, 255, 0.55);
  border: 1px solid rgba(59, 130, 246, 0.16);
  border-radius: var(--radius-md);
}

.apt-calendar-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--spacing-sm);
}

.apt-calendar-month-label {
  font-weight: 800;
  color: #FFFFFF;
  font-size: 0.78rem;
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  padding: 5px 16px;
  border-radius: 999px;
  box-shadow: 0 3px 8px rgba(59, 130, 246, 0.25);
}

.apt-calendar-nav-button {
  background: #FFFFFF;
  color: var(--color-module-appointment);
  box-shadow: 0 2px 6px rgba(59, 130, 246, 0.18);
  border: 1px solid rgba(59, 130, 246, 0.25);
  border-radius: 999px;
  width: 28px;
  height: 28px;
  padding: 0;
  line-height: 1;
  font-weight: 700;
  margin-bottom: 0;
}

.apt-calendar-nav-button:hover {
  transform: none;
  color: #FFFFFF;
  box-shadow: 0 4px 10px rgba(59, 130, 246, 0.30);
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  border-color: transparent;
}

.apt-calendar-grid {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 4px;
}

.apt-calendar-weekday {
  text-align: center;
  font-size: 0.68rem;
  font-weight: 700;
  color: var(--color-module-appointment);
  text-transform: uppercase;
  padding-bottom: 4px;
}

.apt-calendar-day {
  aspect-ratio: 1;
  width: 100%;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  border-radius: 10px;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--color-charcoal);
  background: transparent;
  cursor: pointer;
  margin-bottom: 0;
  box-shadow: none;
  transition: background-color 0.15s ease, color 0.15s ease;
}

.apt-calendar-day:hover:not(:disabled) {
  transform: none;
  box-shadow: none;
  background: var(--color-sage-tint);
}

.apt-calendar-day-empty {
  cursor: default;
  pointer-events: none;
}

.apt-calendar-day-available {
  background: var(--color-module-measurement-tint);
  color: var(--color-module-measurement);
  font-weight: 700;
}

.apt-calendar-day-limited {
  background: var(--color-module-nutrition-tint);
  color: #B45309;
  font-weight: 700;
}

.apt-calendar-day-full,
.apt-calendar-day-disabled {
  color: var(--color-mist);
  opacity: 0.4;
  cursor: not-allowed;
}

.apt-calendar-day-today {
  box-shadow: inset 0 0 0 2px var(--color-module-appointment);
  font-weight: 800;
}

.apt-calendar-day-selected {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment)) !important;
  color: #FFFFFF !important;
  box-shadow: 0 4px 10px rgba(59, 130, 246, 0.35) !important;
  font-weight: 800;
}

.apt-calendar-legend {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
  margin-top: var(--spacing-sm);
  padding-top: var(--spacing-sm);
  border-top: 1px solid var(--color-border);
}

.apt-legend-item {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: 0.7rem;
  color: var(--color-mist);
}

.apt-legend-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  display: inline-block;
}

.apt-legend-available { background: linear-gradient(135deg, #5EEAD4, var(--color-module-measurement)); }
.apt-legend-limited { background: linear-gradient(135deg, #FCD34D, #B45309); }
.apt-legend-full { background: var(--color-mist); }

.apt-timeslot-panel {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: var(--spacing-xs);
}

.apt-timeslot-options {
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-height: 320px;
  overflow-y: auto;
}

.apt-timeslot-options .dash-options-list-option {
  border: 1px solid rgba(59, 130, 246, 0.22);
  background-color: rgba(59, 130, 246, 0.04);
  border-radius: 999px;
  padding: 8px 14px;
  font-size: 0.85rem;
  color: var(--color-charcoal);
  cursor: pointer;
  transition: border-color 0.15s ease, background-color 0.15s ease;
}

.apt-timeslot-options .dash-options-list-option:hover {
  background-color: rgba(59, 130, 246, 0.10);
  border-color: rgba(59, 130, 246, 0.35);
}

.apt-timeslot-options .dash-options-list-option:has(input:disabled) {
  opacity: 0.4;
  cursor: not-allowed;
  text-decoration: line-through;
}

.apt-timeslot-options .dash-options-list-option.selected {
  border-color: transparent;
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  color: #FFFFFF;
  font-weight: 700;
  box-shadow: 0 4px 10px rgba(59, 130, 246, 0.30);
}

.apt-timeslot-options .dash-options-list-option-checkbox {
  accent-color: var(--color-module-appointment) !important;
}

@media (max-width: 640px) {
  .apt-booking-grid {
    grid-template-columns: 1fr;
  }
}

/* ---- Admin/coach haftalik randevu takvimi ---- */
.admin-cal-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
  margin-bottom: var(--spacing-md);
}

.admin-cal-week-label {
  font-weight: 700;
  font-size: 1rem;
  color: var(--color-secondary);
}

.admin-cal-nav {
  display: flex;
  align-items: center;
  gap: var(--spacing-xs);
}

.admin-cal-view-toggle {
  display: flex;
  gap: 2px;
  background: #F1F5F9;
  border-radius: 999px;
  padding: 3px;
}

.admin-cal-view-btn {
  background: transparent;
  color: var(--color-mist);
  box-shadow: none;
  border: none;
  border-radius: 999px;
  padding: 6px 14px;
  font-size: 0.78rem;
  font-weight: 700;
  margin-bottom: 0;
}

.admin-cal-view-btn:hover {
  transform: none;
  box-shadow: none;
  color: var(--color-secondary);
}

.admin-cal-view-btn.active {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  color: #FFFFFF;
  box-shadow: 0 4px 10px rgba(59, 130, 246, 0.28);
}

.admin-cal-today-button {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  color: #FFFFFF;
  box-shadow: 0 4px 10px rgba(59, 130, 246, 0.28);
  border: none;
  border-radius: 999px;
  padding: 6px 16px;
  font-size: 0.8rem;
  margin-bottom: 0;
}

.admin-cal-today-button:hover {
  transform: none;
  filter: brightness(1.05);
  box-shadow: 0 4px 10px rgba(59, 130, 246, 0.28);
}

.admin-cal-wrapper {
  position: relative;
  overflow-x: auto;
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-xl);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  padding: var(--spacing-md);
}

@media (max-width: 900px) {
  .admin-cal-wrapper::after,
  .meal-day-table-wrapper::after {
    content: "→";
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    width: 40px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding-right: 8px;
    color: var(--color-mist);
    font-size: 1rem;
    font-weight: 700;
    pointer-events: none;
    border-radius: 0 var(--radius-xl) var(--radius-xl) 0;
  }

  .admin-cal-wrapper::after {
    background: linear-gradient(to right, transparent, #FFFFFF 60%);
  }

  .meal-day-table-wrapper::after {
    background: linear-gradient(to right, transparent, #FFFFFF 60%);
  }
}

.meal-day-table-wrapper {
  position: relative;
}

.admin-cal-grid {
  display: grid;
  grid-template-columns: 56px repeat(7, minmax(120px, 1fr));
  min-width: 900px;
}

.admin-cal-corner {
  position: sticky;
  top: 0;
  background: transparent;
}

.admin-cal-day-header {
  text-align: center;
  padding: 8px 4px;
  border-bottom: 1px solid var(--color-border);
}

.admin-cal-day-header-today .admin-cal-day-number {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  box-shadow: 0 3px 8px rgba(59, 130, 246, 0.28);
  color: #FFFFFF;
}

.admin-cal-day-name {
  font-size: 0.65rem;
  font-weight: 700;
  text-transform: uppercase;
  color: var(--color-mist);
  letter-spacing: 0.03em;
}

.admin-cal-day-number {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  font-weight: 800;
  font-size: 0.95rem;
  color: var(--color-secondary);
  margin-top: 2px;
}

.admin-cal-hour-label {
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--color-charcoal);
  text-align: right;
  padding: 8px 10px 0 0;
  border-top: 1px solid var(--color-border);
}

.admin-cal-hour-label-now {
  color: var(--color-module-appointment);
  font-weight: 800;
}

.admin-cal-slot {
  min-height: 48px;
  padding: 2px;
  border-top: 1px solid var(--color-border);
  border-left: 1px solid var(--color-border);
  display: flex;
  flex-direction: column;
  gap: 2px;
}

/* ---- Gun gorunumu (mobil "Schedule" uygulamasi referansi) - soft, yuvarlak
   kartlar + renkli sol kenarlik, saat sutunu + tek gun sutunu. ---- */
.admin-cal-day-grid {
  display: grid;
  grid-template-columns: 64px 1fr;
}

.admin-cal-day-slot {
  min-height: 56px;
  padding: 6px 4px;
  border-top: 1px solid var(--color-border);
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.admin-cal-day-event {
  display: flex;
  flex-direction: column;
  gap: 4px;
  width: 100%;
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-left: 4px solid var(--color-mist);
  border-radius: 14px;
  padding: 10px 14px;
  margin-bottom: 0;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.05);
  cursor: pointer;
  text-align: left;
  color: inherit;
}

.admin-cal-day-event:hover {
  transform: none;
  box-shadow: 0 8px 16px rgba(0, 0, 0, 0.09);
}

/* Mobilde gun gorunumu 08:00-20:00 arasi 13 saati HER ZAMAN tam boyda
   (56px) gosteriyordu - bos gunlerde kart gereksiz yere devasa uzuyordu
   (kullanici geri bildirimi, 2026-08-21). Bos saatler ince/tire-cizgili tek
   satira kuculuyor, randevusu olan saat lime-dolgulu bir "agenda" satiri
   olarak buyuk kaliyor - kartin boyu artik saat SAYISINA degil, dolu saat
   sayisina bagli. render_day_view() zaten her satira admin-cal-hour-label
   ve admin-cal-day-slot icin (empty/busy) class'ini ekliyor, masaustunde bu
   class'larin hicbir CSS karsiligi yok. */
@media (max-width: 640px) {
  .admin-cal-day-slot-empty {
    min-height: 14px;
    padding: 2px 4px;
  }

  .admin-cal-hour-label-empty {
    font-size: 0.62rem;
    font-weight: 600;
    color: var(--color-mist);
    opacity: 0.75;
    padding-top: 1px;
    border-top-style: dashed;
  }

  .admin-cal-day-slot-empty {
    border-top-style: dashed;
  }

  .admin-cal-day-slot-busy {
    background: #E9F5A8;
    border-top: none;
    border-radius: 12px;
    margin: 4px 0;
    padding: 6px;
  }

  .admin-cal-hour-label-busy {
    background: #E9F5A8;
    border-top: none;
    border-radius: 12px 0 0 12px;
    margin: 4px 0;
    color: var(--color-primary-dark);
    padding-top: 10px;
  }
}

.admin-cal-day-event.admin-cal-event-pending,
.admin-cal-day-event.admin-cal-event-approved,
.admin-cal-day-event.admin-cal-event-completed,
.admin-cal-day-event.admin-cal-event-rejected {
  background: #FFFFFF;
  color: inherit;
}

.admin-cal-day-event.admin-cal-event-pending { border-left-color: var(--color-warning); }
.admin-cal-day-event.admin-cal-event-approved { border-left-color: #0D9488; }
.admin-cal-day-event.admin-cal-event-completed { border-left-color: var(--color-module-neutral); }
.admin-cal-day-event.admin-cal-event-rejected { border-left-color: var(--color-accent-wine); }

.admin-cal-day-event-title {
  font-size: 0.88rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.admin-cal-day-event-status {
  font-size: 0.72rem;
  color: var(--color-mist);
}

.admin-cal-day-event-bottom {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-top: 4px;
}

.admin-cal-day-event-avatars {
  display: flex;
}

.admin-cal-day-event-avatars > span {
  margin-left: -6px;
  box-shadow: 0 0 0 2px #FFFFFF;
}

.admin-cal-day-event-avatars > span:first-child {
  margin-left: 0;
}

.admin-cal-day-event-time {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--color-mist);
}

.admin-cal-day-event-time-icon {
  width: 12px;
  height: 12px;
  background-color: var(--color-mist);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

/* ---- Ay gorunumu - uye tarafindaki apt-calendar-* siniflarini yeniden
   kullanip, musaitlik yerine gun basina randevu sayisi rozeti gosteriyor. ---- */
.admin-cal-month-grid {
  margin-top: var(--spacing-sm);
}

.admin-cal-month-day {
  aspect-ratio: 1;
  width: 100%;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 3px;
  border-radius: 12px;
  background: transparent;
  border: none;
  padding: 0;
  margin-bottom: 0;
}

.admin-cal-month-day:not(.apt-calendar-day-today) {
  box-shadow: none;
}

.admin-cal-month-day:hover {
  transform: none;
  background: var(--color-sage-tint);
}

.admin-cal-month-day-number {
  font-weight: 700;
  color: var(--color-charcoal);
  font-size: 0.85rem;
}

.admin-cal-month-day-dot {
  font-size: 0.6rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
  border-radius: 999px;
  padding: 1px 6px;
  min-width: 16px;
  text-align: center;
}

.admin-cal-event {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  width: 100%;
  border: none;
  border-radius: 12px;
  padding: 4px 8px;
  margin-bottom: 0;
  box-shadow: none;
  cursor: pointer;
  text-align: left;
  overflow: hidden;
}

.admin-cal-event:hover {
  transform: none;
  box-shadow: none;
  filter: brightness(0.97);
}

.admin-cal-event-time {
  font-size: 0.65rem;
  font-weight: 700;
  opacity: 0.85;
}

.admin-cal-event-name-row {
  display: flex;
  align-items: center;
  gap: 5px;
  width: 100%;
  overflow: hidden;
}

.admin-cal-event-avatar {
  width: 16px;
  height: 16px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  font-size: 0.58rem;
  font-weight: 700;
  background: rgba(255, 255, 255, 0.9);
  color: var(--color-secondary);
}

.admin-cal-event-name {
  font-size: 0.72rem;
  font-weight: 600;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 100%;
}

.admin-cal-event-pending {
  background: linear-gradient(135deg, #FCD9A8, var(--color-warning));
  color: #FFFFFF;
}

.admin-cal-event-approved {
  background: linear-gradient(135deg, #5EEAD4, #0D9488);
  color: #FFFFFF;
}

.admin-cal-event-completed {
  background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral));
  color: #FFFFFF;
}

.admin-cal-event-rejected {
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  color: #FFFFFF;
}

.admin-cal-legend-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  display: inline-block;
}

.admin-cal-legend-dot-pending { background: linear-gradient(135deg, #FCD9A8, var(--color-warning)); }
.admin-cal-legend-dot-approved { background: linear-gradient(135deg, #5EEAD4, #0D9488); }
.admin-cal-legend-dot-completed { background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral)); }
.admin-cal-legend-dot-rejected { background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine)); }

/* Yan panel */
.admin-apt-panel-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.25);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s ease;
  z-index: 90;
}

.admin-apt-panel-backdrop-open {
  opacity: 1;
  pointer-events: auto;
}

/* 2026-09-02: sagdan slide-out'tan ortada acilan Mercan Panel bento modaline
   gecirildi (kullanici istegi - /admin/audit-log detay panelindeki dille
   tutarli olsun diye). `.admin-apt-panel`/`.admin-apt-panel-open` class adlari
   BILINCLI olarak korundu - scripts/interactive_test_appointments.py bu class'i
   okuyor, sadece GORUNUMU degisiyor (right-slide yerine center-modal). */
.admin-apt-panel {
  position: fixed;
  top: 50%;
  left: 50%;
  width: 420px;
  max-width: min(92vw, 420px);
  max-height: 82vh;
  background: #FFFFFF;
  border-radius: 20px;
  box-shadow: 0 30px 60px -12px rgba(0, 25, 20, 0.35), 0 10px 24px -8px rgba(0, 25, 20, 0.2);
  transform: translate(-50%, -50%) scale(0.97);
  opacity: 0;
  pointer-events: none;
  transition: transform 0.2s ease, opacity 0.2s ease;
  z-index: 91;
  overflow-y: auto;
  box-sizing: border-box;
}

.admin-apt-panel-open {
  transform: translate(-50%, -50%) scale(1);
  opacity: 1;
  pointer-events: auto;
}

.admin-apt-panel-header {
  background: linear-gradient(120deg, #5FE0E8, #1EC1CB 55%, #0E8A92 100%);
  border-radius: 20px 20px 0 0;
  padding: 22px 22px 20px;
  position: relative;
}

.admin-apt-panel-header-top {
  display: flex;
  align-items: center;
  gap: 12px;
}

/* Ayni gradient+gloss squircle dili (.member-bento-icon-big/.aud-detail-head-icon
   ile ayni), mercan/pembe vurgu ailesi + surekli idle sallanma (.pf-icon-idle,
   madde 26). */
.admin-apt-panel-header-icon {
  position: relative;
  width: 42px;
  height: 42px;
  flex-shrink: 0;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 30%;
  background: linear-gradient(160deg, #FF9F7A, #EF5DA8);
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -8px 12px rgba(0, 0, 0, 0.14),
    0 6px 14px -7px rgba(20, 32, 26, 0.4);
}

.admin-apt-panel-header-icon::before {
  content: "";
  position: absolute;
  top: -30%; left: -10%; width: 120%; height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.admin-apt-panel-header-icon-mask {
  position: relative;
  z-index: 1;
  width: 20px;
  height: 20px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain; mask-size: contain;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
}

.admin-apt-panel-eyebrow {
  font-size: 10.5px;
  font-weight: 800;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(6, 48, 46, 0.72);
}

.admin-apt-panel-header h3 {
  font-size: 17px;
  font-weight: 800;
  color: #06302E;
  margin: 2px 0 0;
}

.admin-apt-panel-close-button {
  background: transparent;
  color: var(--color-mist);
  box-shadow: none;
  border: none;
  font-size: 1.3rem;
  line-height: 1;
  padding: 0 4px;
  margin-bottom: 0;
}

.admin-apt-panel-close-button:hover {
  transform: none;
  box-shadow: none;
  color: var(--color-charcoal);
}

.admin-apt-panel-header .admin-apt-panel-close-button {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 28px;
  height: 28px;
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.5);
  color: #06302E;
  font-size: 16px;
}

.admin-apt-panel-header .admin-apt-panel-close-button:hover {
  background: rgba(255, 255, 255, 0.75);
  color: #06302E;
}

/* Durum rozeti: mini bento ikon (squircle+gloss) + etiket - duruma gore renk
   ailesi degisir. */
.admin-apt-status-chip {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 12px;
  padding: 5px 12px 5px 5px;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.85);
}

.admin-apt-status-chip-icon {
  position: relative;
  width: 22px;
  height: 22px;
  flex-shrink: 0;
  overflow: hidden;
  border-radius: 30%;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1px 1px rgba(255, 255, 255, 0.55), inset 0 -4px 6px rgba(0, 0, 0, 0.14);
}

.admin-apt-status-chip-icon::before {
  content: "";
  position: absolute;
  top: -30%; left: -10%; width: 120%; height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
}

.admin-apt-status-chip-icon-mask {
  position: relative;
  z-index: 1;
  width: 11px;
  height: 11px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain; mask-size: contain;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
}

.admin-apt-status-chip-label { font-size: 11px; font-weight: 800; }

.admin-apt-status-chip-pending .admin-apt-status-chip-icon { background: linear-gradient(160deg, #FBBF6B, #C97F2E); }
.admin-apt-status-chip-pending .admin-apt-status-chip-label { color: #8A5A0B; }
.admin-apt-status-chip-approved .admin-apt-status-chip-icon { background: linear-gradient(160deg, #7EE0A8, #17A76B); }
.admin-apt-status-chip-approved .admin-apt-status-chip-label { color: #00694C; }
.admin-apt-status-chip-rejected .admin-apt-status-chip-icon { background: linear-gradient(160deg, #FDA4AF, #E11D48); }
.admin-apt-status-chip-rejected .admin-apt-status-chip-label { color: #B3261E; }
.admin-apt-status-chip-completed .admin-apt-status-chip-icon { background: linear-gradient(160deg, #93C5FD, #3B82F6); }
.admin-apt-status-chip-completed .admin-apt-status-chip-label { color: #1E40AF; }

.admin-apt-panel-body { padding: 18px 20px 20px; }

/* Bilgi kutucuklari (Coach/Tarih) - Mercan Panel pastel tile dili. */
.admin-apt-panel-tile {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 14px;
  border-radius: 12px;
  margin-bottom: 10px;
  background: var(--tile-tint);
}

.admin-apt-panel-tile-bicon {
  width: 34px;
  height: 34px;
  border-radius: 30%;
  flex-shrink: 0;
  position: relative;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(160deg, var(--ic-a), var(--ic-b));
  box-shadow: inset 0 1.5px 1.5px rgba(255, 255, 255, 0.5), inset 0 -6px 9px rgba(0, 0, 0, 0.12);
}

.admin-apt-panel-tile-bicon-mask {
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain; mask-size: contain;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
}

.admin-apt-panel-tile-label {
  font-size: 10.5px; font-weight: 800; letter-spacing: 0.03em; text-transform: uppercase;
  color: var(--tile-dark); opacity: 0.75;
}

.admin-apt-panel-tile-value { font-size: 14px; font-weight: 700; color: var(--tile-dark); margin-top: 1px; }

.admin-apt-panel-note {
  margin-bottom: 10px;
  padding: 12px 14px;
  background: #F1F0EA;
  border-radius: 12px;
  font-size: 12.5px;
  line-height: 1.5;
  color: var(--color-mist);
}

/* Onayla/Reddet/Tamamlandi butonlari: bento aksiyon tile'i - squircle
   gradient+gloss ikon (member-bento-icon-big ile ayni yapi) + etiket, pastel
   zeminde. .admin-apt-reject-btn/.admin-apt-complete-btn (baska bir cok
   sayfada "Sil"/"Duzenle" icin paylasilan genel butonlar) BILINCLI olarak
   burada KULLANILMIYOR - bu panele ozel yeni siniflar. */
.admin-apt-bento-actions { display: flex; gap: 10px; padding-top: 4px; }

.admin-apt-bento-btn {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  border: none;
  border-radius: 16px;
  padding: 14px 10px 12px;
  cursor: pointer;
  font-family: inherit;
  transition: transform 0.12s ease;
}

.admin-apt-bento-btn:hover { transform: translateY(-2px); }
.admin-apt-bento-btn:active { transform: translateY(0); }

.admin-apt-bento-icon {
  position: relative;
  width: 40px;
  height: 40px;
  border-radius: 30%;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55), inset 0 -8px 12px rgba(0, 0, 0, 0.14), 0 6px 14px -7px rgba(20, 32, 26, 0.4);
}

.admin-apt-bento-icon::before {
  content: "";
  position: absolute;
  top: -30%; left: -10%; width: 120%; height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
}

.admin-apt-bento-icon-mask {
  position: relative;
  z-index: 1;
  width: 19px;
  height: 19px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain; mask-size: contain;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
}

.admin-apt-bento-label { font-size: 13px; font-weight: 800; }

.admin-apt-bento-approve { background: #E3F8F1; }
.admin-apt-bento-approve .admin-apt-bento-icon { background: linear-gradient(160deg, #7EE0A8, #17A76B); }
.admin-apt-bento-approve .admin-apt-bento-label { color: #00694C; }

.admin-apt-bento-reject { background: #FBE9E7; }
.admin-apt-bento-reject .admin-apt-bento-icon { background: linear-gradient(160deg, #FDA4AF, #E11D48); }
.admin-apt-bento-reject .admin-apt-bento-label { color: #B3261E; }

.admin-apt-bento-complete { background: #EAF2FE; }
.admin-apt-bento-complete .admin-apt-bento-icon { background: linear-gradient(160deg, #93C5FD, #3B82F6); }
.admin-apt-bento-complete .admin-apt-bento-label { color: #1E40AF; }

.md-telegram-unlink-btn {
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  color: #FFFFFF;
  box-shadow: 0 4px 10px rgba(225, 29, 72, 0.28);
}

.md-telegram-unlink-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
  box-shadow: none;
}

/* ---- Olcumler (uye) ---- */
.profile-summary-box,
.bmi-summary-box {
  padding: var(--spacing-md);
  margin-bottom: var(--spacing-md);
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
}

/* ---- AI Co-Pilot ---- */
.ai-action-buttons {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
  margin-bottom: var(--spacing-md);
}

.ai-action-buttons .pf-gradient-btn {
  flex: 1 1 auto;
  min-width: 160px;
}

.ai-result {
  margin-top: var(--spacing-md);
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
}

.ai-result-sections {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
  padding: var(--spacing-lg);
}

.ai-result-header {
  padding: 14px 20px;
  background: #FAFAFA;
  border-bottom: 1px solid var(--color-border);
  font-size: 0.95rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.ai-result-error .ai-result-header {
  background: var(--color-wine-tint);
  color: var(--color-accent-wine);
}

.ai-result-body {
  padding: var(--spacing-lg);
  font-family: var(--font-family-admin);
  color: var(--color-charcoal);
}

.ai-result-body h1,
.ai-result-body h2,
.ai-result-body h3,
.ai-result-body h4 {
  margin-top: var(--spacing-md);
  margin-bottom: var(--spacing-xs);
  color: var(--color-secondary);
}

.ai-result-body h1:first-child,
.ai-result-body h2:first-child,
.ai-result-body h3:first-child,
.ai-result-body h4:first-child {
  margin-top: 0;
}

.ai-result-body p {
  line-height: 1.7;
  margin: 0 0 var(--spacing-sm);
}

.ai-result-body ul,
.ai-result-body ol {
  padding-left: 1.3em;
  margin: 0 0 var(--spacing-sm);
}

.ai-result-body li {
  line-height: 1.6;
  margin-bottom: 6px;
}

.ai-result-body li::marker {
  color: var(--color-primary);
}

.ai-result-body strong {
  color: var(--color-secondary);
  font-weight: 700;
}

.ai-result-body table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  margin: var(--spacing-sm) 0 var(--spacing-md);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  overflow: hidden;
  font-size: 0.85rem;
}

.ai-result-body th {
  text-align: left;
  padding: 10px 14px;
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.08), rgba(0, 191, 143, 0.02));
  color: var(--color-primary-dark);
  font-size: 0.72rem;
  font-weight: 800;
  letter-spacing: 0.02em;
  border-bottom: 1px solid var(--color-border);
}

.ai-result-body td {
  padding: 10px 14px;
  border-top: 1px solid var(--color-border);
  color: var(--color-charcoal);
  vertical-align: top;
}

.ai-result-body tr:first-child td {
  border-top: none;
}

.ai-result-body tr:nth-child(even) td {
  background: rgba(0, 0, 0, 0.015);
}

.ai-result-header {
  display: flex;
  align-items: center;
  gap: 10px;
  justify-content: space-between;
}

.ai-result-header-title {
  display: flex;
  align-items: center;
  gap: 10px;
}

.ai-result-header-meta {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  flex-shrink: 0;
}

.ai-result-icon-badge {
  width: 28px;
  height: 28px;
  border-radius: 8px;
  background: rgba(0, 191, 143, 0.15);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.ai-result-icon-badge-mask {
  width: 14px;
  height: 14px;
  display: block;
  background-color: var(--color-primary-dark);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.ai-result-timestamp {
  font-size: 0.72rem;
  font-weight: 500;
  color: var(--color-mist);
  font-variant-numeric: tabular-nums;
}

.ai-result-pdf-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.78rem;
  font-weight: 700;
  color: #FFFFFF;
  text-decoration: none;
  padding: 6px 14px;
  border: none;
  border-radius: 999px;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
  transition: filter 0.15s ease;
}

.ai-result-pdf-link:hover {
  filter: brightness(1.05);
}

/* ---- Ogun Planlama ---- */
.mp-day-cards {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-md);
}

.meal-day-block {
  margin-bottom: var(--spacing-md);
  padding: var(--spacing-md);
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
}

.meal-day-block summary {
  font-weight: 600;
  color: var(--color-secondary);
  cursor: pointer;
}

.mp-date-row {
  display: flex;
  align-items: center;
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-md);
}

.mp-date-row .dash-datepicker {
  flex: 0 0 auto;
}

@media (max-width: 640px) {
  /* Alt alta yigmak yerine ikisini de daraltip YAN YANA tutuyoruz -
     .dash-datepicker* zincirinin site genelindeki "width: fit-content
     !important" kurali (icerigin - "02.09.2026" - dogal genisligine sabit)
     mobil karti tasiriyordu (bkz. mp-date-row overflow bulgusu). Burada
     scoped olarak zorla esit iki sutuna esitleniyor - format kisa oldugu
     icin daralan kutuya sigıyor. */
  .mp-date-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
  }

  .mp-date-row .dash-datepicker,
  .mp-date-row .dash-datepicker-input-wrapper,
  .mp-date-row .dash-datepicker-input {
    width: 100% !important;
  }

  .mp-date-row .dash-datepicker-input {
    padding: 0 10px;
  }
}

/* ---- Ozel oglun tablosu (components/editable_meal_table.py) - Soft Tablo
   diliyle kurulmus, dash_table.DataTable yerine gecen editable satir listesi. ---- */
.emt-wrap {
  display: flex;
  flex-direction: column;
  /* Digger Soft Tablo/Paket Tablosu kartlarinin (.apt-history-card, .mb-pkg-card,
     .soft-table-card) aksine bu satirlarin overflow konteyneri hic yoktu - 7
     sutunlu grid (Ogun/Besin/Kalori/Protein/Karbonhidrat/Yag/sil) mobilde
     sikismak yerine TUM SAYFAYI yatay tasiriyordu (arastirma.md ikinci
     denetiminde admin/meal-plans'ta bulunan 142px maxExcess). */
  position: relative;
  overflow-x: auto;
}

.emt-row {
  display: grid;
  grid-template-columns: 1.3fr 1.6fr 0.7fr 0.9fr 1.1fr 0.7fr 40px;
  gap: 10px;
  align-items: center;
  padding: 10px 20px;
  min-width: 640px;
}

@media (max-width: 900px) {
  .emt-wrap::after {
    content: "→";
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    width: 40px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding-right: 8px;
    color: var(--color-mist);
    font-size: 1rem;
    font-weight: 700;
    pointer-events: none;
    background: linear-gradient(to right, transparent, #FFFFFF 60%);
  }
}

.emt-row + .emt-row {
  border-top: 1px solid var(--color-border);
}

.emt-row-header {
  background: linear-gradient(90deg, rgba(0, 191, 143, 0.08), rgba(0, 191, 143, 0.02));
  padding-top: 10px;
  padding-bottom: 10px;
}

/* "Mercan Panel" (CLAUDE.md madde 26) - .emt-row-header icin renkli varyant
   (su an sadece pages/admin/meal_plans.py "Gunluk Ogunler" gun kartlari). */
.emt-row-header.mp-colorful {
  background: linear-gradient(90deg, #5FE0E8, #1EC1CB 55%, #0E8A92 100%);
  padding-top: 16px;
  padding-bottom: 16px;
}

.emt-row-header.mp-colorful .emt-th,
.emt-row-header.mp-colorful .mb-pkg-th {
  font-size: 0.72rem;
  color: rgba(0, 0, 0, 0.78);
}

.emt-th {
  font-size: 0.64rem;
  font-weight: 800;
  letter-spacing: 0.03em;
  /* text-transform:uppercase KASITLI OLARAK YOK - tarayicinin locale-siz
     uppercase kurali Turkce "i" harfini "I" (noktasiz) yapiyor ("İçerik" ->
     "İÇERIK" yanlis). Etiketler zaten dogru buyuk harflerle geliyor
     (bkz. FIELD_HEADER_LABELS). */
  color: var(--color-primary-dark);
}

.emt-input {
  width: 100%;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  padding: 7px 9px;
  font-size: 0.82rem;
  font-family: inherit;
  background: #FFFFFF;
  color: var(--color-charcoal);
  margin-bottom: 0;
}

.emt-input:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 2px rgba(0, 191, 143, 0.15);
}

.emt-input-num {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.emt-del-btn {
  width: 28px;
  height: 28px;
  border-radius: 50%;
  border: none;
  background: transparent;
  box-shadow: none;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0;
  margin-bottom: 0;
  flex-shrink: 0;
}

.emt-del-btn:hover {
  transform: none;
  box-shadow: none;
  background: var(--color-wine-tint);
}

.emt-del-mask {
  width: 14px;
  height: 14px;
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  -webkit-mask-image: url(/assets/icons/trash.svg);
  mask-image: url(/assets/icons/trash.svg);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.emt-add-row {
  padding: 6px 20px 14px;
}

.emt-macro-summary {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  flex-shrink: 0;
}

.emt-macro-chip {
  font-size: 0.68rem;
  font-weight: 800;
  color: #FFFFFF;
  padding: 3px 10px;
  border-radius: 999px;
  white-space: nowrap;
}

.emt-macro-chip-cal { background: linear-gradient(135deg, #FDBA74, #EA580C); }
.emt-macro-chip-protein { background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment)); }
.emt-macro-chip-carbs { background: linear-gradient(135deg, #FCD34D, var(--color-module-nutrition)); }
.emt-macro-chip-fat { background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine)); }

@media (max-width: 640px) {
  .pf-card-header:has(.emt-macro-summary) {
    flex-wrap: wrap;
  }
}

@media (max-width: 900px) {
  .emt-row {
    min-width: 760px;
  }

  .emt-wrap {
    overflow-x: auto;
  }
}

/* ---- Ogun tablosu (dash_table.DataTable) ---- */
.dash-spreadsheet-container {
  font-family: var(--font-family) !important;
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-md);
  overflow: hidden;
}

.dash-spreadsheet-inner table,
.dash-spreadsheet-inner * {
  font-family: var(--font-family) !important;
}

.dash-header {
  background-color: #FAFAFA !important;
  border-top: none !important;
  border-left: none !important;
  border-right: none !important;
  border-bottom: 1px solid var(--color-border) !important;
}

.dash-header .column-header-name {
  font-weight: 700 !important;
  font-size: 0.7rem !important;
  letter-spacing: 0.03em;
  color: var(--color-mist) !important;
}

.dash-cell {
  background-color: rgba(255, 255, 255, 0.7) !important;
  border-left: none !important;
  border-right: none !important;
  border-top: none !important;
  border-bottom: 1px solid var(--color-border) !important;
}

.dash-cell-value {
  font-size: 0.85rem !important;
  color: var(--color-charcoal) !important;
}

.column-0 .dash-cell-value,
.column-1 .dash-cell-value,
.dash-header.column-0 .column-header-name,
.dash-header.column-1 .column-header-name {
  text-align: left !important;
}

.dash-delete-cell {
  color: var(--color-mist) !important;
  background-color: rgba(255, 255, 255, 0.7) !important;
  border-bottom: 1px solid var(--color-border) !important;
}

/* ---- Ogun Plani gunluk kartlari (meal_plan.py) - Gecmis Olcumler/Randevularim
   ile ayni dil: renkli baslik rozeti (bugun vurgusu), gradient toplam rozeti,
   ikon+chip'li satirlar. ---- */
.mp-day {
  margin-bottom: var(--spacing-lg);
}

.mp-day-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  margin-bottom: 10px;
}

.mp-day-label {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 0.95rem;
  font-weight: 800;
  color: var(--color-secondary);
}

.mp-day-label-today {
  color: var(--color-primary-dark);
}

.mp-day-today-tag {
  font-size: 0.6rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 2px 8px;
  border-radius: 999px;
  vertical-align: middle;
}

.mp-day-total-badge {
  font-size: 0.75rem;
  font-weight: 800;
  color: #FFFFFF;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  padding: 5px 14px;
  border-radius: 999px;
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.25);
}

.mp-day-card {
  background: #FFFFFF;
  border-radius: 0.9rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
}

.mp-day-card-today {
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05), 0 0 0 2px var(--color-primary);
}

.mp-meal-row {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 14px 20px;
}

.mp-meal-row + .mp-meal-row {
  border-top: 1px solid var(--color-border);
}

.mp-meal-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex-shrink: 0;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 2px;
}

.mp-meal-icon-mask {
  width: 16px;
  height: 16px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.mp-meal-info {
  flex: 1;
  min-width: 0;
}

.mp-meal-top {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 8px;
  margin-bottom: 4px;
}

.mp-meal-name {
  font-size: 0.9rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.mp-meal-macros {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}

.mp-macro-chip {
  font-size: 0.66rem;
  font-weight: 800;
  padding: 2px 8px;
  border-radius: 999px;
  color: #FFFFFF;
  white-space: nowrap;
}

.mp-macro-chip-cal { background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark)); }
.mp-macro-chip-protein { background: linear-gradient(135deg, #93C5FD, #3B82F6); }
.mp-macro-chip-carbs { background: linear-gradient(135deg, #FCD34D, #B45309); }
.mp-macro-chip-fat { background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine)); }

.mp-meal-items {
  display: block;
  font-size: 0.85rem;
  color: var(--color-mist);
  line-height: 1.5;
}

/* ---- Landing sayfasi (Augen Pro tasarim sistemi referans alinarak) ---- */
:root {
  --lp-off-black: #0f1012;
  --lp-pure-black: #020201;
  --lp-off-white: #f2f2f4;
  --lp-pure-white: #fdfdfd;
  --lp-steel-gray: #5e5e5e;
  --lp-ash-gray: #8f8f8f;
  --lp-signal-blue: #0071e3;
  --lp-hairline: rgba(0, 0, 0, 0.08);
  --lp-radius-tag: 9999px;
  --lp-radius-button: 26px;
  --lp-radius-nav: 10px;
  --lp-radius-card: 54px;
}

.landing-page {
  max-width: none;
  padding: 0;
  background-color: var(--lp-off-white);
  color: var(--lp-off-black);
  overflow-x: hidden;
  font-family: var(--font-family);
  letter-spacing: -0.02em;
}

.landing-page h1,
.landing-page h2,
.landing-page h3 {
  font-weight: 400;
  letter-spacing: -0.02em;
  color: var(--lp-off-black);
  margin: 0;
}

.landing-page p {
  font-weight: 400;
  color: var(--lp-steel-gray);
  line-height: 1.5;
  margin: 0;
}

/* Manyetik hover: JS ile transform uygulanir, burada sadece yumusak spring gecisi tanimlaniyor */
.lp-magnetic {
  transition: transform 0.4s cubic-bezier(0.22, 1, 0.36, 1), background-color 0.2s ease, border-color 0.2s ease;
  will-change: transform;
}

.lp-float-nav {
  position: fixed;
  top: 34px;
  left: 24px;
  right: 24px;
  z-index: 50;
  display: flex;
  align-items: center;
  justify-content: space-between;
  pointer-events: none;
}

.lp-float-nav > * {
  pointer-events: auto;
}

.lp-brand {
  display: flex;
  align-items: center;
}

.lp-brand-logo {
  height: 60px;
  width: auto;
  display: block;
}

.lp-nav-actions {
  display: flex;
  align-items: center;
  gap: 6px;
  background-color: rgba(253, 253, 253, 0.65);
  backdrop-filter: var(--glass-blur);
  -webkit-backdrop-filter: var(--glass-blur);
  border: 0.5px solid var(--lp-hairline);
  border-radius: var(--lp-radius-nav);
  padding: 6px;
}

.lp-nav-link {
  color: var(--lp-off-black);
  text-decoration: none;
  font-size: 0.85rem;
  font-weight: 400;
  padding: 8px 14px;
  border-radius: 6px;
}

.lp-nav-link:hover {
  text-decoration: underline;
  text-underline-offset: 3px;
}

.lp-nav-cta {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background-color: rgba(12, 13, 15, 0.05);
  color: var(--lp-pure-black);
  text-decoration: none;
  font-size: 0.8rem;
  font-weight: 400;
  padding: 8px 16px;
  border-radius: var(--lp-radius-button);
}

.lp-nav-cta:hover {
  background-color: rgba(12, 13, 15, 0.09);
}

.lp-cta-icon {
  color: var(--lp-signal-blue);
}

.lp-kicker {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.75rem;
  font-weight: 400;
  color: var(--lp-ash-gray);
}

.lp-kicker-num {
  color: var(--lp-signal-blue);
}

.lp-section-title {
  font-size: 27px;
  font-weight: 400;
  letter-spacing: -0.02em;
  color: var(--lp-off-black);
  margin-top: 4px;
}

/* Hero */
.hero-section {
  position: relative;
  min-height: 100vh;
  background-color: var(--lp-off-white);
  overflow: hidden;
}

.hero-grid {
  position: relative;
  width: 100%;
  max-width: 1200px;
  height: 100vh;
  margin: 0 auto;
}

.hero-content {
  position: absolute;
  left: 60px;
  bottom: 130px;
  right: calc(min(720px, 44vw) + 40px);
  max-width: 420px;
  text-align: left;
  z-index: 2;
}

.hero-content h1 {
  font-size: clamp(2.4rem, 5vw, 3.6rem);
  font-weight: 400;
  line-height: 1.1;
  letter-spacing: -0.02em;
  margin-top: 12px;
}

.hero-content h1 .lp-accent-blue {
  color: var(--lp-signal-blue);
}

.hero-content p {
  color: var(--lp-steel-gray);
  font-size: 1rem;
  margin-top: 16px;
  max-width: 420px;
  text-align: left;
}

.lp-chip-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-start;
  gap: 6px;
  margin-top: 24px;
}

.lp-chip {
  display: inline-flex;
  align-items: center;
  border: 0.5px solid var(--lp-signal-blue);
  color: var(--lp-signal-blue);
  background-color: transparent;
  font-size: 0.75rem;
  font-weight: 400;
  padding: 2px 10px;
  border-radius: var(--lp-radius-tag);
}

.lp-chip:hover {
  border-width: 1px;
}

.cta-button {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background-color: rgba(12, 13, 15, 0.05);
  color: var(--lp-pure-black);
  font-size: 0.85rem;
  font-weight: 400;
  padding: 12px 24px;
  border-radius: var(--lp-radius-button);
  text-decoration: none;
  margin-top: 28px;
}

.cta-button:hover {
  background-color: rgba(12, 13, 15, 0.09);
}

/* Global `button` selector (satir ~740) her butona varsayilan olarak dashboard'un
   yesil (--color-primary) box-shadow'unu veriyor - landing sayfasi kendi
   --lp-* butonlarini kullaniyor (bkz. CLAUDE.md madde 4), bu yesil "hale" landing'e
   sizmamali. */
.landing-page button {
  box-shadow: none;
}

.landing-page button:hover {
  box-shadow: none;
}

.hero-visual {
  position: absolute;
  top: 110px;
  bottom: 0;
  right: 0;
  width: min(720px, 44vw);
  overflow: visible;
}

.hero-visual-image {
  width: 100%;
  height: 100%;
  object-fit: cover;
  mask-image: radial-gradient(ellipse 68% 88% at 50% 42%, black 45%, transparent 98%);
  -webkit-mask-image: radial-gradient(ellipse 68% 88% at 50% 42%, black 45%, transparent 98%);
}

@media (max-width: 860px) {
  .hero-visual {
    display: none;
  }
}

.lp-scroll-cue {
  position: absolute;
  left: 60px;
  bottom: 40px;
  color: var(--lp-signal-blue);
  font-size: 1rem;
  text-decoration: none;
  animation: lp-bounce 2.2s ease-in-out infinite;
}

@keyframes lp-bounce {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(8px); }
}

/* Reveal-on-scroll - augen.pro'daki blur -> netlesme hareketi */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  filter: blur(12px);
  transition: opacity 0.8s ease, transform 0.8s ease, filter 0.8s ease;
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
  filter: blur(0);
}

/* Statement / breakthrough section - dar etiket | genis metin asimetrik grid */
.lp-statement-section {
  padding: 96px 60px;
  max-width: 1200px;
  margin: 0 auto;
  display: flex;
  gap: 60px;
  align-items: flex-start;
  flex-wrap: wrap;
}

.lp-statement-label-col {
  flex: 0 0 220px;
}

.lp-statement-text {
  flex: 1 1 480px;
  font-size: clamp(1.1rem, 2vw, 1.4rem);
  font-weight: 400;
  line-height: 1.5;
  color: var(--lp-off-black);
  text-align: left;
  max-width: 640px;
  margin: 0;
}

.lp-statement-text .lp-accent-blue {
  color: var(--lp-signal-blue);
}

/* Dark mission/vision band */
.lp-dark-section {
  background-color: var(--lp-off-black);
  color: var(--lp-pure-white);
  padding: 96px 60px;
}

.lp-dark-inner {
  max-width: 1200px;
  margin: 0 auto;
}

.lp-numbered-row {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 24px;
  padding: 40px 0;
  border-top: 0.5px solid rgba(255, 255, 255, 0.14);
  text-align: left;
}

.lp-numbered-row:last-child {
  border-bottom: 0.5px solid rgba(255, 255, 255, 0.14);
}

.lp-numbered-row .lp-kicker {
  color: var(--lp-ash-gray);
}

.lp-numbered-row h3 {
  color: var(--lp-pure-white);
  font-size: 27px;
  font-weight: 400;
  letter-spacing: -0.02em;
  margin: 4px 0 0;
  max-width: 560px;
}

/* Glossary style 3-col */
.lp-glossary-section {
  background-color: var(--lp-off-black);
  color: var(--lp-pure-white);
  padding: 0 60px 96px;
}

.lp-glossary-grid {
  max-width: 1200px;
  margin: 40px auto 0;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 40px;
  text-align: left;
}

.lp-glossary-label {
  color: var(--lp-signal-blue);
  font-size: 1rem;
  font-weight: 400;
}

.lp-glossary-desc {
  margin-top: 8px;
  color: rgba(255, 255, 255, 0.55);
  line-height: 1.5;
  font-size: 0.9rem;
}

/* Approach / features */
.lp-approach-heading {
  text-align: center;
  font-size: clamp(2rem, 5vw, 3.4rem);
  font-weight: 400;
  letter-spacing: -0.02em;
  color: var(--lp-signal-blue);
  padding-top: 96px;
}

.features-section, .coaches-section, .testimonials-section, .pricing-section {
  padding: 64px 60px;
  max-width: 1200px;
  margin: 0 auto;
}

/* ---- Ana sayfa geri sayim bandi (bkz. pages/landing.py render_countdown_banner,
   assets/countdown.js) - lp-* marka tokenlariyla, referans "fire" temasi yerine
   Signal Blue vurgusuyla ---- */
.lp-countdown {
  max-width: 1200px;
  margin: 0 auto 64px;
  padding: 28px 40px;
  border-radius: var(--lp-radius-card);
  background: linear-gradient(135deg, #14161a 0%, var(--lp-off-black) 55%, #0a2a4d 130%);
  box-shadow: 0 24px 48px rgba(0, 0, 0, 0.28);
}

.lp-countdown-header {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-bottom: 24px;
}

.lp-countdown-icon-badge {
  width: 44px;
  height: 44px;
  border-radius: 12px;
  background: rgba(0, 113, 227, 0.18);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.lp-countdown-icon-mask {
  width: 22px;
  height: 22px;
  display: block;
  background-color: var(--lp-signal-blue);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.lp-countdown-title {
  color: var(--lp-pure-white);
  font-size: 1.15rem;
  font-weight: 400;
  letter-spacing: -0.02em;
  flex: 1;
}

.lp-countdown-pill {
  color: var(--lp-signal-blue);
  border: 1px solid rgba(0, 113, 227, 0.4);
  border-radius: var(--lp-radius-tag);
  padding: 8px 18px;
  font-size: 0.7rem;
  font-weight: 600;
  letter-spacing: 0.06em;
}

.lp-countdown-boxes {
  display: grid;
  grid-template-columns: repeat(4, minmax(80px, 1fr));
  gap: 16px;
  max-width: 640px;
}

.lp-countdown-box {
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid rgba(255, 255, 255, 0.1);
  border-radius: var(--lp-radius-nav);
  padding: 18px 8px;
  text-align: center;
}

.lp-countdown-value {
  color: var(--lp-pure-white);
  font-size: 2.1rem;
  font-weight: 500;
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

.lp-countdown-label {
  color: var(--lp-ash-gray);
  font-size: 0.68rem;
  font-weight: 600;
  letter-spacing: 0.06em;
  margin-top: 6px;
}

.lp-countdown-ended {
  display: none;
}

@media (max-width: 640px) {
  .lp-countdown {
    padding: 22px 20px;
  }

  .lp-countdown-boxes {
    max-width: none;
  }

  .lp-countdown-value {
    font-size: 1.6rem;
  }
}

.features-section h2, .coaches-section h2, .testimonials-section h2, .pricing-section h2 {
  text-align: center;
  font-size: 27px;
}

.features-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 24px;
  margin-top: 48px;
}

.coaches-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 24px;
  margin-top: 48px;
}

.feature-card {
  padding: 48px 40px;
  background-color: var(--lp-pure-white);
  border: 0.5px solid var(--lp-hairline);
  border-radius: var(--lp-radius-card);
  text-align: left;
  transition: border-color 0.2s ease;
}

.feature-card:hover {
  border-color: rgba(0, 0, 0, 0.18);
}

.feature-card h3 {
  font-size: 1rem;
  margin-top: 16px;
}

.feature-card p {
  font-size: 0.9rem;
  margin-top: 8px;
}

.feature-icon {
  width: 28px;
  height: 28px;
}

.coach-card {
  flex: 0 1 260px;
  max-width: 260px;
  padding: 40px 32px;
  background-color: var(--lp-pure-white);
  border: 0.5px solid var(--lp-hairline);
  border-radius: var(--lp-radius-card);
  text-align: center;
  transition: border-color 0.2s ease;
}

.coach-card:hover {
  border-color: rgba(0, 0, 0, 0.18);
}

.coach-card h3 {
  font-size: 1rem;
}

.coach-photo {
  width: 120px;
  height: 120px;
  aspect-ratio: 1;
  object-fit: cover;
  border-radius: 50%;
  margin: 0 auto 16px;
}

.coach-photo-placeholder {
  width: 120px;
  height: 120px;
  aspect-ratio: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: var(--lp-off-white);
  color: var(--lp-off-black);
  font-weight: 400;
  font-size: 1.1rem;
  border-radius: 50%;
  margin: 0 auto 16px;
}

.coach-bio {
  color: var(--lp-steel-gray);
  font-size: 0.85rem;
}

.testimonial-section-single {
  max-width: 640px;
  margin: 0 auto;
  text-align: center;
}

.testimonial-quote-icon {
  font-size: 2.5rem;
  line-height: 1;
  color: var(--lp-signal-blue);
  font-weight: 400;
}

.testimonial-quote-text {
  font-size: 1.15rem;
  font-weight: 400;
  color: var(--lp-off-black);
  margin-top: 8px;
}

.testimonial-name {
  font-weight: 400;
  color: var(--lp-steel-gray);
  margin-top: 16px;
  font-size: 0.9rem;
}

/* Fiyatlandirma / uyelik paketleri (fitfocus.pro'daki paket karti - fiyat/sure/CTA referansi) */
.pricing-section h2 .lp-accent-blue {
  color: var(--lp-signal-blue);
}

p.pricing-section-lead {
  text-align: center;
  max-width: 560px;
  margin: 12px auto 0;
}

.pricing-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 24px;
  margin-top: 48px;
}

.pricing-card {
  display: flex;
  flex-direction: column;
  padding: 40px 32px;
  background-color: var(--lp-pure-white);
  border: 0.5px solid var(--lp-hairline);
  border-radius: var(--lp-radius-card);
  text-align: left;
  transition: border-color 0.2s ease;
}

.pricing-card:hover {
  border-color: rgba(0, 0, 0, 0.18);
}

.pricing-card h3 {
  font-size: 1.1rem;
}

.pricing-card-price-row {
  display: flex;
  align-items: baseline;
  gap: 6px;
  margin-top: 16px;
}

.pricing-card-price {
  font-size: 1.8rem;
  font-weight: 400;
  color: var(--lp-signal-blue);
}

.pricing-card-duration {
  font-size: 0.85rem;
  color: var(--lp-ash-gray);
}

.pricing-card-desc {
  margin-top: 12px;
  font-size: 0.9rem;
}

.pricing-card-cta {
  margin-top: 24px;
  align-self: flex-start;
}

.pricing-card-image {
  width: 100%;
  height: 180px;
  object-fit: contain;
  background: var(--lp-off-white);
  border-radius: var(--lp-radius-nav);
  margin-bottom: 12px;
}

.pricing-card-price-hint {
  font-size: 0.75rem;
  color: var(--lp-ash-gray);
  margin-top: -4px;
  margin-bottom: 12px;
}

/* Onboarding sihirbazi (ayri sayfa: /uyelik-basvuru) - Acik Cam, iki sutunlu */
.onboarding-page-split {
  position: relative;
  min-height: 100vh;
  display: flex;
  flex-direction: row;
  align-items: flex-start;
  justify-content: center;
  padding: 120px 24px 60px;
  max-width: 1140px;
  margin: 0 auto;
  gap: 40px;
  box-sizing: border-box;
}

.onboarding-page-split .ambient-orbs {
  position: fixed;
  inset: 0;
  overflow: hidden;
  z-index: -1;
  pointer-events: none;
  background-image:
    linear-gradient(135deg, rgba(246, 248, 245, 0.93) 0%, rgba(230, 236, 232, 0.89) 50%, rgba(212, 225, 218, 0.83) 100%),
    url("/assets/auth-bg.webp");
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  background-attachment: fixed;
}

.onboarding-page-split .orb {
  position: absolute;
  border-radius: 50%;
  filter: blur(140px);
  opacity: 0.15;
}

.onboarding-page-split .orb-1 {
  width: 550px;
  height: 550px;
  background: var(--color-primary);
  top: -10%;
  right: 10%;
  opacity: 0.12;
  animation: float-orb-1 25s infinite ease-in-out;
}

.onboarding-page-split .orb-2 {
  width: 480px;
  height: 480px;
  background: #0074E4;
  bottom: -5%;
  left: 5%;
  opacity: 0.08;
  animation: float-orb-2 30s infinite ease-in-out;
}

@keyframes float-orb-1 {
  0% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(60px, -80px) scale(1.1); }
  66% { transform: translate(-40px, 40px) scale(0.9); }
  100% { transform: translate(0, 0) scale(1); }
}

@keyframes float-orb-2 {
  0% { transform: translate(0, 0) scale(1); }
  50% { transform: translate(-50px, 60px) scale(1.15); }
  100% { transform: translate(0, 0) scale(1); }
}

.report-col {
  flex: 1 1 420px;
  max-width: 460px;
  display: flex;
  flex-direction: column;
  gap: 28px;
  z-index: 10;
}

.onb-logo-link {
  align-self: flex-start;
}

.onboarding-logo {
  width: 60px;
  max-width: 100%;
  height: auto;
  display: block;
  border-radius: 14px;
}

.onb-report-manifesto {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.onb-hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: 2.5px;
  text-transform: uppercase;
  padding: 6px 14px;
  border-radius: 20px;
  background: rgba(0, 191, 143, 0.1);
  color: #008765;
  align-self: flex-start;
  margin-bottom: 8px;
}

.onb-badge-dot {
  width: 6px;
  height: 6px;
  background-color: var(--color-primary);
  border-radius: 50%;
  display: inline-block;
  box-shadow: 0 0 8px var(--color-primary);
}

.onb-hero-title {
  font-size: 32px;
  font-weight: 800;
  letter-spacing: -0.03em;
  line-height: 1.25;
  color: #0a140f;
}

.onb-hero-title span {
  color: var(--color-primary);
  font-style: italic;
  font-weight: 300;
}

.onb-hero-subtitle {
  font-size: 14.5px;
  line-height: 1.7;
  font-weight: 300;
  color: rgba(10, 20, 15, 0.6);
}

.wizard-col {
  flex: 0 1 460px;
  width: 100%;
  max-width: 460px;
  display: flex;
  flex-direction: column;
}

.onb-wizard-heading {
  text-align: center;
  margin-bottom: 12px;
  color: var(--color-secondary);
}

.profile-report-card {
  background: rgba(255, 255, 255, 0.48);
  backdrop-filter: blur(35px) saturate(190%);
  -webkit-backdrop-filter: blur(35px) saturate(190%);
  border: 1px solid rgba(255, 255, 255, 0.85);
  border-radius: 32px;
  padding: 34px;
  box-shadow: 0 30px 60px -20px rgba(0, 30, 20, 0.06), inset 0 1.5px 1.5px rgba(255, 255, 255, 0.9);
  display: flex;
  flex-direction: column;
  gap: 22px;
  position: relative;
  overflow: hidden;
}

.mobile-matrix-header {
  display: none;
  justify-content: space-between;
  align-items: center;
  cursor: pointer;
}

.onb-matrix-toggle-arrow {
  font-size: 14px;
  font-weight: bold;
  transition: transform 0.3s ease;
}

.onb-report-card-title {
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 2px;
  text-transform: uppercase;
  color: var(--color-primary-dark);
  border-bottom: 1px solid rgba(0, 0, 0, 0.05);
  padding-bottom: 14px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.onb-live-indicator {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 9px;
  color: var(--color-primary);
  font-weight: 800;
}

.onb-live-dot {
  width: 6px;
  height: 6px;
  background-color: var(--color-primary);
  border-radius: 50%;
  display: inline-block;
  animation: onb-live-pulse 1.5s infinite;
}

@keyframes onb-live-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.35; }
}

.matrix-container {
  display: flex;
  flex-direction: column;
  gap: 16px;
}

.matrix-segment-wrapper {
  transition: all 0.5s cubic-bezier(0.25, 1, 0.5, 1);
  position: relative;
}

.matrix-segment-wrapper.locked {
  opacity: 0.28;
  filter: blur(1px) grayscale(100%);
  pointer-events: none;
}

@keyframes onb-unlock-glow {
  0% { box-shadow: 0 0 0 0px rgba(0, 191, 143, 0.6); }
  50% { box-shadow: 0 0 25px 8px rgba(0, 191, 143, 0.25); }
  100% { box-shadow: 0 0 0 0px rgba(0, 191, 143, 0); }
}

.matrix-segment-wrapper.just-unlocked {
  animation: onb-unlock-glow 1.2s cubic-bezier(0.25, 1, 0.5, 1);
}

.matrix-hero-block {
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.4));
  border: 1px solid rgba(255, 255, 255, 0.7);
  padding: 18px 24px;
  border-radius: 20px;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.matrix-hero-info {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.matrix-hero-tag {
  font-size: 9px;
  font-weight: 800;
  color: rgba(12, 24, 18, 0.4);
  letter-spacing: 1px;
  text-transform: uppercase;
}

.matrix-hero-val {
  font-size: 16px;
  font-weight: 800;
  color: var(--color-secondary);
  transition: all 0.25s ease;
}

.kpi-glass-icon-wrapper {
  width: 46px;
  height: 46px;
  border-radius: 14px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.55);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(255, 255, 255, 0.75);
  position: relative;
  flex-shrink: 0;
}

.kpi-svg-icon {
  fill: none;
  stroke: url(#icon-grad);
  stroke-width: 2.2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.matrix-grid-3col {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 12px;
}

.matrix-metric-box {
  background: rgba(255, 255, 255, 0.7);
  border: 1px solid rgba(255, 255, 255, 0.9);
  padding: 16px 12px;
  border-radius: 18px;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}

.matrix-metric-box .kpi-glass-icon-wrapper {
  width: 36px;
  height: 36px;
  border-radius: 10px;
}

.matrix-metric-lbl {
  font-size: 9.5px;
  font-weight: 800;
  color: rgba(12, 24, 18, 0.45);
  letter-spacing: 0.8px;
  text-transform: uppercase;
}

.matrix-metric-num {
  font-size: 20px;
  font-weight: 800;
  color: var(--color-primary-dark);
  line-height: 1;
}

.matrix-metric-unit {
  font-size: 10px;
  font-weight: 500;
  color: rgba(12, 24, 18, 0.5);
  display: block;
  margin-top: 2px;
}

.matrix-performance-block, .matrix-diet-block {
  background: rgba(255, 255, 255, 0.5);
  border: 1px solid rgba(255, 255, 255, 0.7);
  padding: 16px 20px;
  border-radius: 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.matrix-perf-header, .matrix-diet-header {
  display: flex;
  align-items: center;
  gap: 12px;
}

.matrix-perf-info-box, .matrix-diet-info-box {
  display: flex;
  flex-direction: column;
  gap: 2px;
  flex: 1;
}

.matrix-perf-title, .matrix-diet-lbl {
  font-size: 10px;
  font-weight: 800;
  color: rgba(12, 24, 18, 0.45);
  letter-spacing: 0.8px;
  text-transform: uppercase;
}

.matrix-perf-meta, .matrix-diet-name {
  font-size: 13.5px;
  font-weight: 700;
  color: var(--color-secondary);
}

.matrix-perf-exp-scale-row {
  display: flex;
  justify-content: space-between;
  font-size: 9.5px;
  font-weight: 800;
  letter-spacing: 0.5px;
  text-transform: uppercase;
  color: rgba(12, 24, 18, 0.4);
  border-top: 1px solid rgba(0, 0, 0, 0.04);
  padding-top: 10px;
}

.exp-bar-segments {
  display: flex;
  gap: 4px;
  width: 100%;
}

.exp-segment {
  height: 6px;
  flex: 1;
  background: rgba(0, 0, 0, 0.05);
  border-radius: 2px;
  transition: all 0.5s cubic-bezier(0.25, 1, 0.5, 1);
}

.exp-segment.active {
  background: linear-gradient(90deg, var(--color-primary), var(--color-primary-dark));
}

.allergy-tags-container {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
  border-top: 1px solid rgba(0, 0, 0, 0.04);
  padding-top: 10px;
}

.allergy-tag {
  font-size: 11px;
  font-weight: 700;
  padding: 6px 12px;
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.55);
  border: 1px solid rgba(255, 255, 255, 0.7);
  color: var(--color-secondary);
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.allergy-tag.empty {
  color: rgba(12, 24, 18, 0.35);
  font-style: italic;
  font-weight: 400;
  border: 1px dashed rgba(12, 24, 18, 0.15);
  background: transparent;
  padding: 4px 10px;
}

.allergy-tag-icon {
  width: 14px;
  height: 14px;
  fill: none;
  stroke: url(#icon-grad);
  stroke-width: 2.2;
}

.onb-wizard-body, .onb-thankyou {
  width: 100%;
  padding: 40px;
  border-radius: 32px;
  border: 1px solid rgba(255, 255, 255, 0.85);
  box-shadow: 0 40px 90px -25px rgba(0, 30, 20, 0.09), 0 15px 30px -10px rgba(0, 20, 10, 0.03), inset 0 1.5px 1.5px rgba(255, 255, 255, 0.95);
  position: relative;
  display: flex;
  flex-direction: column;
  box-sizing: border-box;
}

/* Bulanik cam efekti bilerek ::after'a (ayri bir katmana) tasindi, dogrudan
   .onb-wizard-body'nin KENDISINE degil. Sebep: WebKit/Safari, backdrop-filter
   tasiyan bir atayi - spesifikasyona aykiri sekilde - icindeki position:fixed
   elemanlar icin bir "containing block" sayiyor (bilinen WebKit hatasi).
   Icindeki teslimat il/ilce dcc.Dropdown'unun (Radix Popper tabanli, konumu
   position:fixed+transform ile hesaplaniyor) acilir listesi bu yuzden Safari'de
   ekran disina kayiyordu - liste teknik olarak render oluyordu ama gorunmuyordu/
   tiklanamiyordu. blur'u ayri, arka planda duran (z-index:-1) bir katmana
   almak icerigi (ve icindeki fixed-pozisyonlu portal'lari) bu yanlis
   containing-block'tan kurtariyor, gorsel sonuc birebir ayni kaliyor. */
.onb-wizard-body::after, .onb-thankyou::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: inherit;
  background: rgba(255, 255, 255, 0.62);
  backdrop-filter: blur(40px) saturate(180%);
  -webkit-backdrop-filter: blur(40px) saturate(180%);
  pointer-events: none;
}

/* .onb-thankyou kendi overflow:hidden'ini korur (dropdown icermiyor).
   .onb-wizard-body'nin overflow:hidden'i, icindeki (ör. teslimat il/ilce)
   dcc.Dropdown popover'larini kirpiyordu (.pf-card ile ayni popover-clip
   deseni, bkz. CLAUDE.md madde 15/23) - o yuzden burada visible'a aciliyor,
   ::before'a kendi border-radius'u verilip kose sizintisi engelleniyor. */
.onb-thankyou {
  overflow: hidden;
}

.onb-wizard-body::before, .onb-thankyou::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -2;
  border-radius: inherit;
  overflow: hidden;
  background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.022'/%3E%3C/svg%3E");
  pointer-events: none;
}

.onb-progress-track {
  width: 100%;
  height: 6px;
  background-color: rgba(0, 0, 0, 0.05);
  border-radius: 10px;
  overflow: hidden;
  margin-bottom: 12px;
}

.onb-progress-fill {
  height: 100%;
  background: linear-gradient(90deg, var(--color-primary), var(--color-primary-dark));
  border-radius: 10px;
  transition: width 0.4s cubic-bezier(0.25, 1, 0.5, 1);
}

.onb-step-counter {
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  color: rgba(12, 24, 18, 0.45);
  text-align: center;
  margin-bottom: 30px;
}

.onb-step-viewport {
  min-height: 250px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.onb-step {
  display: none;
  animation: onb-step-fade-in 0.4s ease;
}

.onb-step.active {
  display: block;
}

@keyframes onb-step-fade-in {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: translateY(0); }
}

.onb-step h3 {
  font-size: 20px;
  font-weight: 800;
  letter-spacing: -0.02em;
  text-align: center;
  margin-bottom: 24px;
  color: var(--color-secondary);
  line-height: 1.35;
}

.onb-step-subtitle {
  display: block;
  margin-top: 6px;
  font-size: 12.5px;
  font-weight: 400;
  color: rgba(12, 24, 18, 0.55);
}

/* Onceden tek sutunlu dikey liste (goal/body-type/diet-style/allergies uzun
   listelerde asiri kaydirma gerektiriyordu) - kullanici istegiyle (2026-08-26)
   #onb-gender'in zaten kullandigi 2 sutunlu, ortali kart diline tasindi -
   asagidaki .onb-pill-label da ayni sekilde ikon-ustte/metin-altta ortali
   duzene gecti. .onb-subfield-row (ogun/atistirma adedi gibi kompakt inline
   secimler) kendi display:flex override'ini asagida ayrica koruyor. */
.onb-pill-group {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 12px;
  margin-bottom: 8px;
}

/* KOK SEBEP (2026-09-16): gercek grid ogesi, benim stillendirdigim
   .onb-pill-label DEGIL, Dash'in kendi otomatik olusturdugu DIS eleman
   olan <label class="dash-options-list-option"> - labelClassName sadece
   Dash'in ICERDEKI <span class="dash-options-list-option-text"> sarmalayicisina
   uygulaniyor (bkz. gercek DOM ciktisi). Bu dis label grid hucresine hic
   yayilmiyordu (varsayilan icerige-gore-buzulme), bu da ICERDEKI her seyin
   (ikon+metin) kendi kolon genisligine gore degil, kirpilmis/dar bir
   genislige gore hesaplanmasina yol aciyordu - "Gluten" -> "Glute" gibi
   metin kirpilmalari buradan kaynaklaniyordu. Sadece .onb-pill-group'un
   DIREKT cocuklarini kapsayarak (baska hicbir .dash-options-list-option
   kullanan bilesene - teslimat radio'su, checkin yildizlari vb. - dokunmadan)
   bu dis elemani da hucreye tam yaydiriyoruz. */
.onb-pill-group > .dash-options-list-option {
  display: block;
  width: 100%;
}

/* Kompakt "quiz karti" deseni (Typeform/Noom/Duolingo tarzi, kullanici
   onayli mockup - 2026-09-16): ikon+etiket YAN YANA tek satirda.

   Guncelleme (2026-09-16, ikinci tur - kullanici raporu: "tik yazinin
   ustune geliyor", "ikon ve yazi birbirine ortali degil", "Dayaniklilik
   Kas Yaptan daha uzun"): ilk versiyon .pill-label-text'e "height:
   calc(1.25em*2)" ile sahte bir sabit yukseklik veriyordu - bu, metni
   kendi kutusunun TEPESINE yapistiriyordu (flexbox'un dogal ortalamasini
   gecersiz kiliyordu), yani ikona gore ortali gorunmuyordu. Dogru cozum:
   metne ELLE yukseklik vermek yerine, KARTIN KENDISINE sabit bir height
   vermek ve iceriyi (ikon+metin) flexbox'un align-items:center'i ile
   DOGAL olarak ortalatmak - 1 satirlik "Kas Yap" da, 2 satira dusen
   "Dayaniklilik" da ayni 64px'lik kutuda, ikona gore tam ortali durur,
   tasan metin overflow:hidden ile sessizce kirpilir (2 satir + bu
   font olcusunde pratikte hicbir zaman gerekmiyor).

   Guncelleme (2026-09-16, ucuncu tur): sag tarafa HER ZAMAN 32px pay
   ayirmak, zaten dar olan karti (2 sutunlu grid'de ~132px) metin icin
   neredeyse hic yer birakmayacak kadar sikistiriyordu ("Gluten" bile
   sigmiyordu). Bunun yerine sag tarafa HER ZAMAN daha kucuk, sabit bir
   22px pay ayriliyor - hem "Gluten" gibi kelimelere yetecek kadar genis
   birakiyor hem de secilince/secilmeyince kart genisligi DEGISMEDIGI
   icin "Kilo Ver" gibi bir etiketin secilince fazladan satira duselup
   komsu karttan (secilmemis "Kas Yap") farkli yukseklige gelmesi
   sorununu da onluyor. */
.onb-pill-label {
  position: relative;
  display: flex;
  flex-direction: row;
  align-items: center;
  text-align: left;
  gap: 10px;
  min-height: 60px;
  padding: 10px 22px 10px 14px;
  border-radius: 16px;
  border: 1.5px solid rgba(0, 0, 0, 0.08);
  background-color: #ffffff;
  color: var(--color-secondary);
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  overflow: hidden;
  transition: all 0.15s ease;
}

.onb-pill-label:hover {
  border-color: var(--color-primary);
}

/* :has(input:checked) DEGIL - Dash 4.4'un native RadioItems/Checklist DOM'unda
   input, .onb-pill-label'in ICINDE degil, KARDESI (.dash-options-list-option-wrapper
   icinde) - bu yuzden :has() hicbir zaman eslesmiyordu (hicbir tarayicida, browser
   destegiyle ilgisi yok - yapisal olarak imkansizdi). Dash bunun yerine secili
   secenegin en dis .dash-options-list-option (label) elemanina .selected class'ini
   ekliyor (ayni pattern: .pkg-review-delivery-radio, .checkin-rating, bkz. o
   bloklardaki yorumlar). */
.dash-options-list-option.selected .onb-pill-label {
  background-color: rgba(0, 191, 143, 0.06);
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(0, 191, 143, 0.12);
}

/* Secili tik rozeti - saf CSS, ekstra HTML/Python degisikligi gerekmiyor. */
.dash-options-list-option.selected .onb-pill-label::after {
  content: "";
  position: absolute;
  top: 50%;
  right: 8px;
  transform: translateY(-50%);
  width: 14px;
  height: 14px;
  border-radius: 50%;
  background-color: var(--color-primary);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
  background-size: 8px 8px;
  background-position: center;
  background-repeat: no-repeat;
}

.onb-pill-input {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.icon-glass-wrapper {
  position: relative;
  width: 36px;
  height: 36px;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(0, 191, 143, 0.1);
  flex-shrink: 0;
  transition: all 0.15s ease;
}

.pill-svg-icon {
  fill: none;
  stroke: url(#icon-grad);
  stroke-width: 2.2;
  stroke-linecap: round;
  stroke-linejoin: round;
  width: 19px !important;
  height: 19px !important;
}

.pill-label-text {
  /* ONEMLI: bu bir <div> olmali (html.Span DEGIL) - satir-ici (inline)
     elemanlarda width/wrap kontrolu hic calismiyor, "Gluten" gibi
     kelimeler yatayda kirpilip "Glute" olarak kaliyordu (2026-09-16'da
     bulundu). display:block + width:100% + min-width:0, bu <div>'in
     flex satirinda kendi sutununa sigacak kadar kucalip metni normal
     sekilde 2. satira sarmasini garanti eder - -webkit-line-clamp gibi
     WebKit'e ozgu, guvenilirligi supheli bir hileye ihtiyac kalmadan. */
  display: block;
  width: 100%;
  min-width: 0;
  font-size: 13px;
  font-weight: 600;
  line-height: 1.25;
  overflow: hidden;
  /* "Dayaniklilik" gibi arada bosluk olmayan tek bir uzun kelime,
     overflow-wrap olmadan normal kelime-sinirinda sarma kurallariyla HIC
     sarmiyor, oldugu gibi tasip yatayda kesiliyordu ("Dayanikl" gibi).
     break-word, kelimenin kendi icinden kirilarak 2. satira gecmesine
     izin verir - "Kabuklu Yemis" gibi bosluklu etiketleri etkilemez,
     onlar zaten normal kelime sinirindan sarar. */
  overflow-wrap: break-word;
  word-break: break-word;
  /* Sabit yukseklik burada degil, kartin kendisinde (.onb-pill-label
     height:64px) - 2 satiri asan nadir/cok uzun etiketler bu ust
     kapsayicinin overflow:hidden'i ile sessizce kirpilir. Dikey
     ortalamayi disaridaki flexbox (align-items:center) hallediyor,
     boylece "Kas Yap" gibi tek satirlik etiketler de ikonla tam
     hizada, kutunun tepesine yapismadan durur. */
}

.onb-pill-label-content {
  display: flex;
  flex-direction: row;
  align-items: center;
  gap: 12px;
  flex: 1;
  min-width: 0;
}

.onb-number-compact {
  width: 100%;
  max-width: 260px;
  margin: 0 auto;
}

.onb-number-compact input {
  width: 100%;
  outline: none;
  font-family: inherit;
  font-size: 18px;
  font-weight: 700;
  background: rgba(0, 0, 0, 0.025);
  border: 1px solid rgba(0, 0, 0, 0.08);
  padding: 18px 24px;
  border-radius: 20px;
  color: var(--color-secondary);
  text-align: center;
  box-sizing: border-box;
}

.onb-number-compact input:focus {
  background: #ffffff;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 4px rgba(0, 191, 143, 0.12);
}

.onb-subfield-row {
  display: flex;
  justify-content: center;
  gap: 20px;
  margin-top: 24px;
  flex-wrap: wrap;
  border-top: 1px solid rgba(0, 0, 0, 0.05);
  padding-top: 20px;
}

.onb-subfield-row > div {
  flex: 1;
  min-width: 160px;
}

.onb-subfield-row label {
  display: block;
  text-align: center;
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.8px;
  text-transform: uppercase;
  color: rgba(12, 24, 18, 0.5);
  margin-bottom: 12px;
}

.onb-subfield-row .onb-pill-group {
  display: flex;
  flex-direction: row;
  justify-content: center;
  flex-wrap: wrap;
}

.onb-subfield-row .onb-pill-label {
  /* Bu varyantin ikonu yok (duz "2"/"3" gibi tek karakter), ana kart
     desenindeki sabit 64px yukseklik/32px sag bosluk burada anlamsiz -
     kucuk, ortali bir chip'e geri donduruluyor. */
  height: auto;
  padding: 8px 16px;
  border-radius: 12px;
  justify-content: center;
  text-align: center;
}

.onb-tempo-widget {
  max-width: 420px;
  margin: 0 auto;
}

.onb-tempo-track-labels {
  display: flex;
  justify-content: space-between;
  margin-bottom: 24px;
  background: rgba(0, 0, 0, 0.02);
  padding: 12px;
  border-radius: 20px;
  border: 1px solid rgba(0, 0, 0, 0.04);
}

.onb-tempo-track-label {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
  flex: 1;
}

.onb-tempo-glass-icon {
  width: 52px;
  height: 52px;
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.45);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border: 1px solid rgba(255, 255, 255, 0.7);
  display: flex;
  align-items: center;
  justify-content: center;
}

.onb-tempo-track-icon-svg {
  fill: none;
  stroke: url(#icon-grad);
  stroke-width: 2.2;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.onb-tempo-track-text {
  font-size: 12px;
  font-weight: 800;
  color: var(--color-secondary);
  margin-top: 4px;
}

.onb-contact-heading {
  margin: 24px 0 14px;
  font-size: 14px;
  font-weight: 800;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  text-align: center;
  color: var(--color-primary-dark);
  border-top: 1px solid rgba(0, 0, 0, 0.05);
  padding-top: 16px;
}

.onb-contact-fields {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}

.onb-contact-fields input {
  grid-column: span 2;
  width: 100%;
  outline: none;
  font-family: inherit;
  font-size: 13.5px;
  font-weight: 600;
  padding: 14px 18px;
  border-radius: 16px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  background: rgba(0, 0, 0, 0.025);
  text-align: left;
  box-sizing: border-box;
}

.onb-contact-fields textarea {
  grid-column: span 2;
  min-height: 80px;
  width: 100%;
  padding: 14px 18px;
  border-radius: 16px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  background: rgba(0, 0, 0, 0.025);
  font-family: inherit;
  font-size: 13px;
  outline: none;
  resize: none;
  box-sizing: border-box;
}

.onb-contact-fields input:focus, .onb-contact-fields textarea:focus {
  background: #ffffff;
  border-color: var(--color-primary);
}

.onb-phone-field {
  grid-column: span 2;
  display: flex;
  align-items: center;
  gap: 8px;
  border-radius: 16px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  background: rgba(0, 0, 0, 0.025);
  padding: 0 18px;
  box-sizing: border-box;
}

.onb-phone-field:focus-within {
  background: #ffffff;
  border-color: var(--color-primary);
}

.onb-phone-prefix {
  font-family: inherit;
  font-size: 13.5px;
  font-weight: 700;
  color: rgba(0, 0, 0, 0.5);
  flex-shrink: 0;
}

.onb-contact-fields .onb-phone-field input {
  grid-column: unset;
  border: none;
  background: transparent;
  padding: 14px 0;
  flex: 1;
  min-width: 0;
}

.onb-contact-fields .onb-phone-field input:focus {
  background: transparent;
  border: none;
}

.onb-step .dash-range-slider-input {
  display: none;
}

.onb-thankyou {
  text-align: center;
  align-items: center;
}

.onb-thankyou-icon {
  width: 72px;
  height: 72px;
  margin: 10px auto 24px;
  border-radius: 50%;
  background: linear-gradient(135deg, var(--color-primary), var(--color-primary-dark));
  box-shadow: 0 10px 24px rgba(0, 191, 143, 0.35);
  color: #ffffff;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 32px;
}

.onb-thankyou h2 {
  font-size: 22px;
  font-weight: 800;
  margin-bottom: 12px;
  color: var(--color-secondary);
}

.onb-thankyou-subtitle {
  font-size: 14.5px;
  line-height: 1.6;
  color: rgba(12, 24, 18, 0.6);
  margin-bottom: 28px;
  font-weight: 400;
}

.onb-thankyou-payment-warning:not(:empty) {
  color: #c93b3b;
  font-size: 13px;
  background-color: rgba(225, 29, 72, 0.08);
  border-radius: 16px;
  padding: 10px 14px;
  margin: -12px 0 20px;
}

.onb-thankyou-privacy {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  text-align: left;
  background-color: rgba(0, 191, 143, 0.08);
  border: 1px solid rgba(0, 191, 143, 0.12);
  border-radius: 20px;
  padding: 18px 20px;
  margin-bottom: 32px;
}

.onb-thankyou-lock {
  font-size: 22px;
  line-height: 1;
}

.onb-thankyou-privacy-title {
  font-weight: 700;
  font-size: 13.5px;
  color: var(--color-primary-dark);
  margin-bottom: 4px;
}

.onb-thankyou-privacy-text {
  font-size: 12.5px;
  color: rgba(12, 24, 18, 0.6);
  line-height: 1.5;
}

.onb-thankyou-cta {
  display: inline-flex;
  text-decoration: none;
}

.onb-error-message {
  text-align: center;
  color: #c93b3b;
  font-size: 13px;
  font-weight: 600;
  min-height: 20px;
  margin-top: 16px;
}

.onb-nav-row {
  display: flex;
  justify-content: center;
  gap: 16px;
  margin-top: 32px;
}

.wizard-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 12px 28px;
  border-radius: 999px;
  font-size: 0.9rem;
  font-weight: 700;
  cursor: pointer;
  box-shadow: none;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.wizard-btn-primary {
  background: var(--color-primary);
  color: var(--color-primary-dark);
  border: none;
}

.wizard-btn-primary:hover {
  transform: translateY(-1px);
  box-shadow: 0 6px 16px rgba(0, 191, 143, 0.3);
}

.wizard-btn-secondary {
  background: none;
  color: var(--color-charcoal);
  border: 1px solid var(--color-border);
}

.wizard-btn-secondary:hover {
  background: var(--color-sage-tint);
}

.onb-step .dash-slider-wrapper {
  max-width: 440px;
  margin: 20px auto 10px;
}

.onb-step .dash-slider-range {
  background-color: var(--color-primary);
}

.onb-step .dash-slider-thumb {
  border-color: var(--color-primary);
  background-color: var(--color-primary);
}

.onb-step .dash-slider-thumb:hover,
.onb-step .dash-slider-thumb:focus {
  box-shadow: 0 0 0 4px rgba(0, 191, 143, 0.2);
}

.lp-footer {
  background-color: var(--lp-off-black);
  color: var(--lp-pure-white);
  text-align: center;
  padding: 50px 69px;
  font-size: 0.85rem;
  font-weight: 400;
}

@media (max-width: 860px) {
  .lp-float-nav {
    left: 16px;
    right: 16px;
  }

  .lp-nav-link {
    padding: 8px 10px;
    font-size: 0.8rem;
  }

  .lp-nav-cta {
    padding: 8px 12px;
    font-size: 0.75rem;
  }

  .hero-section {
    min-height: auto;
    padding: 120px 24px 64px;
  }

  .hero-grid {
    display: flex;
    flex-direction: column-reverse;
    align-items: center;
    text-align: center;
    height: auto;
  }

  .hero-content {
    position: static;
    text-align: center;
    max-width: 100%;
  }

  .hero-content p {
    text-align: center;
    margin-left: auto;
    margin-right: auto;
  }

  .lp-chip-row {
    justify-content: center;
  }

  .lp-scroll-cue {
    position: static;
    margin-top: 32px;
    display: inline-block;
  }

  .lp-statement-section {
    flex-direction: column;
    text-align: center;
    padding: 64px 24px;
    gap: 16px;
  }

  .lp-statement-label-col {
    flex: none;
  }

  .lp-statement-text {
    flex: none;
    text-align: center;
    margin: 0 auto;
  }

  .lp-dark-section, .lp-glossary-section, .features-section, .coaches-section, .testimonials-section, .pricing-section {
    padding-left: 24px;
    padding-right: 24px;
  }

  .lp-dark-section {
    padding-top: 48px;
    padding-bottom: 48px;
  }

  .lp-glossary-section {
    padding-bottom: 48px;
  }

  .features-section, .coaches-section, .testimonials-section, .pricing-section {
    padding-top: 40px;
    padding-bottom: 40px;
  }

  .lp-approach-heading {
    padding-top: 0;
  }

  .lp-numbered-row {
    flex-direction: column;
    gap: 8px;
    padding: 20px 0;
  }

  .feature-card {
    padding: 32px 28px;
  }
}

/* ---- Haftalik odak karti (Nixtio "Onboarding Task" referansi - koyu, aksiyon gerektiren kalemler) ---- */
.weekly-focus-card {
  position: relative;
  background: linear-gradient(135deg, #17E6AC 0%, var(--color-primary) 38%, #0A5346 78%, var(--color-primary-dark) 130%);
  color: #FFFFFF;
  border-radius: var(--radius-xl);
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-lg);
  box-shadow: 0 20px 32px 0 rgba(0, 61, 51, 0.18);
  overflow: hidden;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.weekly-focus-card::after {
  content: "";
  position: absolute;
  right: -60px;
  top: -60px;
  width: 220px;
  height: 220px;
  border-radius: 50%;
  background: radial-gradient(circle at 30% 30%, rgba(255, 255, 255, 0.20), rgba(255, 255, 255, 0) 70%);
  pointer-events: none;
}

.weekly-focus-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 20px 32px 0 rgba(0, 61, 51, 0.24);
}

.weekly-focus-header {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: var(--spacing-md);
}

.weekly-focus-title {
  font-weight: 700;
  font-size: 0.95rem;
  letter-spacing: 0.01em;
  color: var(--color-primary-dark);
}

.weekly-focus-title-row {
  display: flex;
  align-items: center;
  gap: 10px;
}

.weekly-focus-header-icon {
  flex-shrink: 0;
  width: 30px;
  height: 30px;
  border-radius: 10px;
  background: rgba(255, 255, 255, 0.92);
  display: flex;
  align-items: center;
  justify-content: center;
}

.weekly-focus-header-icon-mask {
  width: 15px;
  height: 15px;
  background-color: var(--color-primary-dark);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.weekly-focus-count {
  background: rgba(0, 0, 0, 0.28);
  color: #FFFFFF;
  font-weight: 700;
  font-size: 0.75rem;
  padding: 2px 10px;
  border-radius: 999px;
  backdrop-filter: blur(2px);
}

.weekly-focus-list {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  gap: 8px;
}

.weekly-focus-item {
  display: flex;
  align-items: center;
  gap: 14px;
  padding: 12px 10px;
  border-radius: 16px;
  background: rgba(255, 255, 255, 0.10);
  text-decoration: none;
  color: inherit;
  transition: background 0.15s ease, transform 0.15s ease;
}

.weekly-focus-item:hover {
  background: rgba(255, 255, 255, 0.18);
  transform: translateY(-2px);
}

/* Bento karolarindaki gradient+gloss squircle ikon rozetiyle ayni tarif
   (bkz. .member-bento-icon-small) - eskiden duz beyaz kare/koyu ikondu,
   bento diliyle tutarli olsun diye ayni gradient+gloss+hover-rotate
   uygulandi. Bu component paylasilan (uye/coach/admin ucunde de kullaniliyor,
   bkz. render_member_focus/render_admin_focus) - degisiklik site-genelinde
   bilerek uygulaniyor, sadece coach/admin'e ozel scope edilmedi. */
.weekly-focus-item-icon {
  position: relative;
  flex-shrink: 0;
  width: 38px;
  height: 38px;
  border-radius: 30%;
  overflow: hidden;
  background: linear-gradient(160deg, #17E6AC, var(--color-primary-dark));
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease;
}

.weekly-focus-item-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.weekly-focus-item:hover .weekly-focus-item-icon {
  transform: scale(1.1) rotate(-6deg);
}

.weekly-focus-item-icon-mask {
  position: relative;
  z-index: 1;
  width: 17px;
  height: 17px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.weekly-focus-item-info {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.weekly-focus-item-label {
  font-size: 0.85rem;
  font-weight: 700;
}

.weekly-focus-item-meta {
  font-size: 0.72rem;
  color: rgba(255, 255, 255, 0.78);
}

.weekly-focus-item-arrow {
  flex-shrink: 0;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.95);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--color-primary-dark);
  font-size: 0.9rem;
  transition: transform 0.15s ease;
}

.weekly-focus-item:hover .weekly-focus-item-arrow {
  transform: translateX(2px);
}

.weekly-focus-empty {
  position: relative;
  z-index: 1;
  color: rgba(255, 255, 255, 0.85);
  font-size: 0.85rem;
  margin: 0;
}

/* ---- Toast bildirimi (form kaydetme mesajlari icin, kalici metin yerine) ---- */
.toast {
  position: fixed;
  top: 20px;
  right: 20px;
  z-index: 200;
  max-width: 320px;
  padding: 12px 20px;
  border-radius: var(--radius-md);
  font-weight: 600;
  font-size: 0.85rem;
  box-shadow: var(--glass-shadow-hover);
  animation: toast-lifecycle 3.5s ease forwards;
  pointer-events: none;
}

.toast-success {
  background: var(--color-primary);
  color: var(--color-primary-dark);
}

.toast-error {
  background: var(--color-accent-wine);
  color: #FFFFFF;
}

@keyframes toast-lifecycle {
  0% { opacity: 0; transform: translateY(-8px); }
  8% { opacity: 1; transform: translateY(0); }
  88% { opacity: 1; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-8px); }
}

@media (prefers-reduced-motion: reduce) {
  .toast {
    animation: none;
    opacity: 1;
  }
}

/* ---- Sayfa basligi bandi + sekme filtre + 2 sutunlu duzen
   (pilot: admin/users.py, mevcut mint paleti sadelestirilerek) ---- */
.admin-users-page,
.admin-users-page button,
.admin-users-page input,
.admin-users-page select,
.admin-users-page textarea,
.admin-users-page .dash-dropdown,
.profile-page,
.profile-page button,
.profile-page input,
.profile-page select,
.profile-page textarea,
.profile-page .dash-dropdown,
.dashboard-page,
.dashboard-page button,
.dashboard-page input,
.dashboard-page select,
.dashboard-page textarea,
.dashboard-page .dash-dropdown,
.admin-measurements-page,
.admin-measurements-page button,
.admin-measurements-page input,
.admin-measurements-page select,
.admin-measurements-page textarea,
.admin-measurements-page .dash-dropdown,
.admin-appointments-page,
.admin-appointments-page button,
.admin-appointments-page input,
.admin-appointments-page select,
.admin-appointments-page textarea,
.admin-appointments-page .dash-dropdown,
.ai-coach-page,
.ai-coach-page button,
.ai-coach-page input,
.ai-coach-page select,
.ai-coach-page textarea,
.ai-coach-page .dash-dropdown,
.admin-coaches-page,
.admin-coaches-page button,
.admin-coaches-page input,
.admin-coaches-page select,
.admin-coaches-page textarea,
.admin-coaches-page .dash-dropdown,
.admin-membership-requests-page,
.admin-membership-requests-page button,
.admin-membership-requests-page input,
.admin-membership-requests-page select,
.admin-membership-requests-page textarea,
.admin-membership-requests-page .dash-dropdown,
.admin-membership-packages-page,
.admin-membership-packages-page button,
.admin-membership-packages-page input,
.admin-membership-packages-page select,
.admin-membership-packages-page textarea,
.admin-membership-packages-page .dash-dropdown,
.admin-service-packages-page,
.admin-service-packages-page button,
.admin-service-packages-page input,
.admin-service-packages-page select,
.admin-service-packages-page textarea,
.admin-service-packages-page .dash-dropdown,
.meal-plans-page,
.meal-plans-page button,
.meal-plans-page input,
.meal-plans-page select,
.meal-plans-page textarea,
.meal-plans-page .dash-dropdown,
.member-detail-page,
.member-detail-page button,
.member-detail-page input,
.member-detail-page select,
.member-detail-page textarea,
.member-detail-page .dash-dropdown,
.appointments-page,
.appointments-page button,
.appointments-page input,
.appointments-page select,
.appointments-page textarea,
.appointments-page .dash-dropdown,
.checkin-page,
.checkin-page button,
.checkin-page input,
.checkin-page select,
.checkin-page textarea,
.meal-plan-page,
.meal-plan-page button,
.meal-plan-page input,
.meal-plan-page select,
.meal-plan-page textarea,
.measurements-page,
.measurements-page button,
.measurements-page input,
.measurements-page select,
.measurements-page textarea,
.membership-page,
.membership-page button,
.membership-page input,
.membership-page select,
.membership-page textarea,
.notifications-page,
.notifications-page button,
.notifications-page input,
.notifications-page select,
.notifications-page textarea,
.testimonials-coach-page,
.testimonials-coach-page button,
.testimonials-coach-page input,
.testimonials-coach-page select,
.testimonials-coach-page textarea,
.weekly-summary-page,
.weekly-summary-page button,
.weekly-summary-page input,
.weekly-summary-page select,
.weekly-summary-page textarea,
.sidenav,
.topbar {
  font-family: var(--font-family-admin);
}

.dashboard-kpi-tables {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-lg);
  margin-top: var(--spacing-lg);
}

.dashboard-kpi-table-block h3 {
  margin-top: 0;
  margin-bottom: var(--spacing-sm);
}

.page-header-band {
  margin-bottom: var(--spacing-md);
}

/* KURAL (2026-08-10): breadcrumb ("Yonetim / X") her sayfada ayni gri serit
   icinde - once sadece Urun/Hizmet Paketleri'nde vardi, artik page-header-band
   kullanan HER sayfada standart (referans mockup, onemlitasarim.png). */
.page-header-eyebrow {
  display: block;
  font-size: 0.72rem;
  font-weight: 600;
  background: #E5E5E7;
  color: var(--color-mist);
  letter-spacing: 0.02em;
  padding: 10px 16px;
  border-radius: 10px;
  margin-bottom: 12px;
}

.dashboard-greeting-row {
  display: flex;
  align-items: center;
  gap: 10px;
}

.dashboard-greeting-title {
  margin: 0;
}

.dashboard-greeting-icon {
  font-size: 1.6rem;
  line-height: 1;
  flex-shrink: 0;
}

.page-header-row {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--spacing-md);
  flex-wrap: wrap;
}

.page-header-title {
  margin: 0;
}

.page-header-meta {
  font-size: 0.82rem;
  color: var(--color-mist);
  font-variant-numeric: tabular-nums;
}

.page-tabs {
  display: flex;
  gap: var(--spacing-md);
  border-bottom: 1px solid var(--color-border);
  margin-bottom: var(--spacing-md);
  /* Bu class paylasilan (coaches.py/users.py'de 2-3 filtre sekmesi, ama
     meal_plans.py'de 7 gun sekmesi) - kisa listelerde etkisiz, 7 sekmede
     mobilde TUM SAYFAYI yatay tasiyordu (arastirma.md 2. denetiminde
     admin/meal-plans'ta bulunan asil 142px kaynagi - .emt-wrap fix'i
     yeterli degildi, kok neden buradaymis). Wrap yerine kendi icinde
     kaydirilabilir yapiliyor - sekme bari boyle bir UI'da beklenen davranis. */
  overflow-x: auto;
  white-space: nowrap;
}

.page-tabs button {
  flex-shrink: 0;
}

.page-tabs button {
  background: transparent;
  color: var(--color-mist);
  box-shadow: none;
  border: none;
  border-radius: 0;
  padding: 8px 2px 10px;
  margin-bottom: -1px;
  font-size: 0.85rem;
  font-weight: 600;
  border-bottom: 2px solid transparent;
}

.page-tabs button:hover {
  transform: none;
  box-shadow: none;
  color: var(--color-secondary);
}

.page-tabs button.active {
  color: var(--color-primary-dark);
  border-bottom-color: var(--color-primary);
}

.admin-split-layout {
  display: grid;
  grid-template-columns: 1fr 280px;
  gap: var(--spacing-lg);
  align-items: start;
}

.admin-split-main {
  min-width: 0;
}

.admin-split-side {
  position: sticky;
  top: 88px;
  min-width: 0;
}

.admin-side-panel {
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--spacing-md);
}

.admin-side-panel-title {
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--color-secondary);
  margin-bottom: var(--spacing-sm);
}

.admin-donut-legend {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-top: var(--spacing-sm);
  font-size: 0.8rem;
  color: var(--color-charcoal);
}

/* Durum Dagilimi karti - diger stat-card-soft kartlarla ayni satirda, ayni
   yukseklikte gorunsun diye legend'in ust bosluk/yazi boyutu kucultuldu */
.stat-card-distribution {
  min-width: 220px;
}

.stat-card-distribution-body {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
}

.stat-card-distribution .admin-donut-legend {
  flex: 1;
  margin-top: 0;
  font-size: 0.75rem;
  min-width: 0;
}

.stat-card-distribution .admin-donut-legend-item {
  padding: 5px 8px;
}

.admin-donut-legend-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  padding: 8px 10px;
  border: 1px solid var(--color-border);
  border-radius: 8px;
  background: #FAFBF9;
}

.admin-donut-legend-label {
  display: flex;
  align-items: center;
  gap: 8px;
}

.admin-donut-legend-value {
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--color-secondary);
}

.admin-donut-dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  flex-shrink: 0;
}

.admin-donut-dot-active { background: var(--color-primary); }
.admin-donut-dot-inactive { background: #D8DED9; }

@media (max-width: 1300px) {
  .admin-split-layout {
    grid-template-columns: 1fr;
  }

  .admin-split-side {
    position: static;
  }
}

/* ---- Panel (dashboard) ---- */
.dashboard-greeting {
  color: var(--color-mist);
  margin-bottom: var(--spacing-lg);
}

/* ---- Gunluk Ozet karti (dashboard.py) ---- */
/* K/J mockup'undaki gercek yapi: "Bugunku Ozet" tek bir beyaz kart icine
   HAPSEDILMIYOR - sade bir bolum basligi (kart degil, sadece metin+rozet),
   ardindan .member-bento grid'i sayfa arka planinda dogrudan oturuyor (buyuk
   karo kendi golgesiyle, kucuk karolar renkli, kart-icinde-kart sikismasi
   olmadan). Once tek bir .daily-summary-card sarmaliyordu - kaldirildi
   (2026-08-19, kullanici "sikisikliktan kurtulmak icin ayir" geri bildirimi). */
.daily-summary-section {
  margin-bottom: var(--spacing-lg);
}

.daily-summary-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 2px 12px;
  gap: var(--spacing-sm);
}

.daily-summary-header-left {
  display: flex;
  align-items: center;
  gap: 10px;
}

.daily-summary-header-title {
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.daily-summary-header-sub {
  font-size: 0.72rem;
  color: var(--color-mist);
  margin-top: 2px;
}

.daily-summary-header-badge {
  font-weight: 700;
  font-size: 0.75rem;
  padding: 4px 12px;
  border-radius: 999px;
  flex-shrink: 0;
}

.daily-summary-header-badge-ok {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
}

.daily-summary-header-badge-neutral {
  background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral));
  color: #FFFFFF;
}

.daily-summary-header-badge-warn {
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  color: #FFFFFF;
}

/* Bento kart diline gecis (2026-08-19 kullanici geri bildirimi) - 4 ozellik:
   (1) t4 yesil pastel dolgu (.member-bento-tile.t4 ile ayni), (2) avatar artik
   duz daire degil gradient+gloss squircle (.member-bento-icon-big ile ayni
   tarif), (3) karta hover'da kaldirma+golge (.member-bento-tile:hover ile
   ayni), (4) avatara hover'da donme+buyume (.member-bento-icon-mask:hover ile
   ayni). */
.daily-summary-note {
  display: flex;
  gap: var(--spacing-sm);
  align-items: flex-start;
  padding: 16px 18px;
  margin-bottom: var(--spacing-lg);
  border-radius: var(--radius-lg);
  border: 1px solid var(--color-border);
  box-shadow: 0 10px 24px -14px rgba(22, 32, 26, 0.18);
  background: #D8F5C8;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.daily-summary-note:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.daily-summary-note-avatar {
  position: relative;
  width: 36px;
  height: 36px;
  flex-shrink: 0;
  border-radius: 30%;
  overflow: hidden;
  background: linear-gradient(160deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
  font-weight: 800;
  font-size: 0.85rem;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  transition: transform 0.2s ease;
}

.daily-summary-note-avatar::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.daily-summary-note-avatar > * {
  position: relative;
  z-index: 1;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.daily-summary-note:hover .daily-summary-note-avatar {
  transform: scale(1.15) rotate(-6deg);
}

.daily-summary-note-text {
  font-size: 0.85rem;
  font-weight: 700;
  color: #16201A;
  line-height: 1.5;
  margin: 0;
}

.daily-summary-note-sign {
  display: block;
  font-size: 0.7rem;
  color: #384038;
  margin-top: 4px;
}

@media (max-width: 640px) {
  .daily-summary-header {
    flex-wrap: wrap;
  }
}

/* ---- Su Takibi karti (checkin.py) ---- */
/* 2 sutunlu grid: su takibi (satir1/kolon1) + kameralı ogun tara (satir1/kolon2,
   ikisi align-items:stretch ile ayni yukseklige gelir) + gunun ozeti (satir2/kolon1,
   grid'in otomatik yerlesim sirasi - satir1 dolunca sonraki oge satir2/kolon1'e duser -
   su takibiyle ayni genislik/hiza icin ekstra sinif gerekmiyor). */
.ci-top-row {
  display: grid;
  grid-template-columns: repeat(2, minmax(320px, 1fr));
  gap: var(--spacing-md);
  align-items: stretch;
  margin-bottom: var(--spacing-lg);
}

.ci-top-row > * {
  margin-bottom: 0;
  min-width: 0;
}

@media (max-width: 768px) {
  .ci-top-row {
    grid-template-columns: 1fr;
  }
}

.water-tracker-card {
  background: #C3DDF6;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.water-tracker-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.water-tracker-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px 14px;
  border-bottom: 1px solid var(--color-border);
  gap: var(--spacing-sm);
}

.water-tracker-header-left {
  display: flex;
  align-items: center;
  gap: 10px;
}

.water-tracker-header-icon {
  position: relative;
  width: 32px;
  height: 32px;
  border-radius: 30%;
  overflow: hidden;
  flex-shrink: 0;
  background: linear-gradient(135deg, #7DD3FC, var(--color-module-water));
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease;
}

.water-tracker-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.water-tracker-card:hover .water-tracker-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

.water-tracker-header-icon-mask {
  position: relative;
  z-index: 1;
  width: 15px;
  height: 15px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.water-tracker-header-title {
  font-size: 0.82rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.water-tracker-header-badge {
  background: linear-gradient(135deg, #7DD3FC, var(--color-module-water));
  color: #FFFFFF;
  font-weight: 700;
  font-size: 0.72rem;
  padding: 4px 10px;
  border-radius: 999px;
  flex-shrink: 0;
}

.water-tracker-header-badge-done {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
}

.water-tracker-body {
  display: flex;
  gap: 18px;
  padding: 18px 20px 20px;
  align-items: stretch;
  flex: 1;
}

.water-tracker-bottle-col {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  flex-shrink: 0;
}

.water-tracker-bottle-neck {
  width: 28px;
  height: 11px;
  background: rgba(15, 23, 42, 0.03);
  border: 2px solid var(--color-border);
  border-bottom: none;
  border-radius: 6px 6px 0 0;
  margin-bottom: -2px;
}

.water-tracker-bottle {
  position: relative;
  width: 80px;
  height: 150px;
  border-radius: 26px 26px 12px 12px;
  background: rgba(15, 23, 42, 0.03);
  border: 2px solid var(--color-border);
  overflow: hidden;
}

.water-tracker-bottle-fill {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  background: linear-gradient(180deg, #38BDF8, var(--color-module-water));
  transition: height 0.6s ease;
}

.water-tracker-bottle-wave {
  position: absolute;
  top: -10px;
  left: 0;
  width: 200%;
  height: 16px;
  animation: water-tracker-wave-move 3.2s linear infinite;
}

@keyframes water-tracker-wave-move {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}

.water-tracker-bottle-percent {
  position: absolute;
  top: 10px;
  left: 0;
  right: 0;
  text-align: center;
  font-size: 0.85rem;
  font-weight: 800;
  color: var(--color-secondary);
  z-index: 1;
}

.water-tracker-bottle-volume {
  font-size: 0.72rem;
  color: var(--color-secondary);
  font-weight: 700;
  text-align: center;
}

.water-tracker-bottle-target {
  font-size: 0.64rem;
  color: var(--color-mist);
}

.water-tracker-timeline-col {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.water-tracker-timeline {
  position: relative;
  padding-left: 4px;
}

.water-tracker-timeline::before {
  content: "";
  position: absolute;
  left: 8px;
  top: 4px;
  bottom: 4px;
  width: 2px;
  background: var(--color-border);
}

.tl-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 0;
}

.tl-dot {
  position: relative;
  z-index: 1;
  width: 18px;
  height: 18px;
  border-radius: 50%;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #FFFFFF;
  border: 2px solid var(--color-border);
}

.tl-item-done .tl-dot {
  border: none;
  background: linear-gradient(135deg, #38BDF8, var(--color-module-water));
  box-shadow: 0 2px 6px rgba(14, 165, 233, 0.35);
}

.tl-check {
  width: 9px;
  height: 9px;
}

.tl-item-next .tl-dot {
  border-color: var(--color-module-water);
  box-shadow: 0 0 0 4px rgba(14, 165, 233, 0.16);
  animation: tl-pulse 1.6s ease-in-out infinite;
}

@keyframes tl-pulse {
  0%, 100% { box-shadow: 0 0 0 4px rgba(14, 165, 233, 0.16); }
  50% { box-shadow: 0 0 0 8px rgba(14, 165, 233, 0.05); }
}

.tl-time {
  font-size: 0.76rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.tl-item-future .tl-time {
  color: var(--color-mist);
  font-weight: 600;
}

.tl-tag {
  font-size: 0.62rem;
  color: var(--color-module-water);
  font-weight: 700;
  margin-left: 4px;
}

.water-tracker-footer {
  padding: 0 20px 18px;
}

.water-tracker-add-button {
  width: 100%;
  border: none;
  border-radius: 14px;
  padding: 12px;
  font-weight: 700;
  font-size: 0.84rem;
  color: #FFFFFF;
  cursor: pointer;
  background: linear-gradient(135deg, #38BDF8, var(--color-module-water));
  box-shadow: 0 6px 16px rgba(14, 165, 233, 0.28);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.water-tracker-add-button:hover {
  transform: translateY(-1px);
  box-shadow: 0 8px 18px rgba(14, 165, 233, 0.38);
}

.water-tracker-add-button-locked,
.water-tracker-add-button-locked:hover {
  background: rgba(15, 23, 42, 0.08);
  color: var(--color-mist);
  box-shadow: none;
  cursor: not-allowed;
  transform: none;
}

/* ---- Haftalik gun seridi ---- */
.day-strip-card {
  background: linear-gradient(165deg, rgba(216, 245, 200, 0.55), rgba(255, 227, 176, 0.35));
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  margin-bottom: var(--spacing-lg);
  overflow: hidden;
}

.day-strip-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 22px 14px;
  border-bottom: 1px solid var(--color-border);
}

/* Bento ikonlariyla (.member-bento-icon-big) ayni gradient+gloss+hover dili -
   duz tek renkli .chart-header-icon yerine, "ikon sabit/hareketsiz kaliyor"
   geri bildirimi uzerine 2026-08-19. Paylasilan .chart-header-icon DEGIL,
   sadece bu bilesene ozel - o class'i baska cok sayfada kullaniliyor. */
.day-strip-header-icon {
  position: relative;
  width: 32px;
  height: 32px;
  flex-shrink: 0;
  border-radius: 30%;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(160deg, #21E0A8, #00885F);
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  transition: transform 0.2s ease;
}

.day-strip-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.day-strip-header-icon-mask {
  position: relative;
  z-index: 1;
  width: 15px;
  height: 15px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.day-strip-card:hover .day-strip-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

.day-strip-header-left {
  display: flex;
  align-items: center;
  gap: 10px;
}

.day-strip-header-title {
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.day-strip-header-sub {
  font-size: 0.72rem;
  color: var(--color-mist);
  margin-top: 2px;
}

.day-strip-header-badge {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
  font-weight: 700;
  font-size: 0.75rem;
  padding: 4px 12px;
  border-radius: 999px;
  flex-shrink: 0;
}

.day-strip {
  position: relative;
  display: flex;
  justify-content: space-between;
  gap: 6px;
  padding: 20px 20px 16px;
}

.day-strip::before {
  content: "";
  position: absolute;
  left: 56px;
  right: 56px;
  top: 44px;
  height: 2px;
  background: repeating-linear-gradient(90deg, var(--color-border) 0 6px, transparent 6px 12px);
  z-index: 0;
}

.day-strip-cell {
  position: relative;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  flex: 1;
  padding: 10px 2px;
  border-radius: 18px;
  background: rgba(15, 23, 42, 0.02);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

/* Bento KPI karolarindaki (.member-bento-tile/-big) ayni hover hareketi -
   kart yukari kalkiyor + golge, icindeki ikon dairesi dondurup buyuyor -
   sadece renk degil, "hareketli ve animasyonlu" davranis da eslesin diye
   2026-08-19 kullanici geri bildirimi. */
.day-strip-cell:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.day-strip-mark {
  transition: transform 0.2s ease;
}

.day-strip-cell:hover .day-strip-mark {
  transform: scale(1.15) rotate(-6deg);
}

/* Bento KPI karolarindaki (.member-bento-tile) ayni pastel palet - t4 yesil
   (tamamlanan gun) / t1 amber (kacirilan gun) - renk dilini uye tarafinda
   tutarli tutmak icin, 2026-08-19 kullanici geri bildirimi. */
.day-strip-cell-done {
  background: #D8F5C8;
}

.day-strip-cell-missed {
  background: #FFE3B0;
}

.day-strip-today {
  background: linear-gradient(160deg, rgba(0, 191, 143, 0.22), rgba(0, 191, 143, 0.08));
  box-shadow: 0 6px 14px rgba(0, 191, 143, 0.18);
  transform: translateY(-2px);
}

.day-strip-label {
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--color-mist);
}

.day-strip-today .day-strip-label {
  color: var(--color-primary-dark);
}

.day-strip-cell-done .day-strip-label,
.day-strip-cell-missed .day-strip-label {
  color: #16201A;
}

.day-strip-mark {
  width: 34px;
  height: 34px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  background: #FFFFFF;
}

.day-strip-mark-done {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary));
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.35);
}

.day-strip-mark-missed {
  background: #FFFFFF;
  border: 1.5px solid rgba(122, 90, 16, 0.35);
}

.day-strip-mark-future {
  border: 1.5px dashed var(--color-border);
  background: transparent;
}

.day-strip-today .day-strip-mark-future {
  border-color: rgba(0, 191, 143, 0.5);
  box-shadow: 0 0 0 4px rgba(0, 191, 143, 0.14);
}

.day-strip-mark-svg {
  width: 15px;
  height: 15px;
}

.day-strip-mark-missed .day-strip-mark-svg {
  width: 9px;
  height: 9px;
}

.day-strip-today-tag {
  font-size: 0.6rem;
  font-weight: 700;
  letter-spacing: 0.02em;
  color: var(--color-primary-dark);
  background: rgba(255, 255, 255, 0.7);
  padding: 1px 7px;
  border-radius: 999px;
  margin-top: -2px;
}

/* ---- Ozet istatistik kartlari (buzlu cam KPI karti) ---- */
.stat-card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-lg);
}

/* Panel sayfasindaki 8 kartlik grid: admin/users sayfasindaki gibi ferah
   kartlar icin daha genis bir minimum genislik tabani (bkz. CLAUDE.md #16
   dersi - dar bir min-width, uzun etiketlerin ikon rozetiyle cakismasina
   yol aciyordu). */
.dashboard-kpi-grid .stat-card-grid {
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
}

/* ---- Ikon rozeti (sag ust kose, Satinalma Ai kpi-card referansi) + ilerleme cubugu ---- */
.stat-card-icon-badge {
  position: absolute;
  top: 12px;
  right: 12px;
  width: 36px;
  height: 36px;
  border-radius: 8px;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.stat-card-icon-badge-mask {
  width: 16px;
  height: 16px;
  display: block;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.stat-card-soft-open .stat-card-icon-badge {
  transform: scale(1.1);
  box-shadow: 0 4px 12px rgba(0, 191, 143, 0.25);
}

/* Modul bazli rozet rengi (soft KPI kart) - mevcut --color-module-* setinden turetilmis
   acik->koyu gradient dolgular, beyaz ikon. */
.stat-card-soft-measurement .stat-card-icon-badge { background: linear-gradient(135deg, #5EEAD4, var(--color-module-measurement)); }
.stat-card-soft-measurement .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-soft-appointment .stat-card-icon-badge { background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment)); }
.stat-card-soft-appointment .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-soft-nutrition .stat-card-icon-badge { background: linear-gradient(135deg, #FCD34D, #B45309); }
.stat-card-soft-nutrition .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-soft-notification .stat-card-icon-badge { background: linear-gradient(135deg, #FDA4AF, var(--color-module-notification)); }
.stat-card-soft-notification .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-soft-ai .stat-card-icon-badge { background: linear-gradient(135deg, #17E6AC, var(--color-module-ai)); }
.stat-card-soft-ai .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-soft-sleep .stat-card-icon-badge { background: linear-gradient(135deg, #A5B4FC, var(--color-module-sleep)); }
.stat-card-soft-sleep .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-soft-stress .stat-card-icon-badge { background: linear-gradient(135deg, #67E8F9, #0E7490); }
.stat-card-soft-stress .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-soft-lifestyle .stat-card-icon-badge { background: linear-gradient(135deg, #FDBA74, var(--color-module-lifestyle)); }
.stat-card-soft-lifestyle .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-soft-neutral .stat-card-icon-badge { background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral)); }
.stat-card-soft-neutral .stat-card-icon-badge-mask { background-color: #FFFFFF; }

.stat-card-progress-bar {
  position: absolute;
  bottom: 0;
  left: 0;
  height: 4px;
  background: linear-gradient(90deg, #00BF8F, #A42D49);
  border-radius: 0 0 var(--radius-lg) 0;
  transition: width 0.3s ease;
}

.stat-card-sparkline {
  display: flex;
  align-items: flex-end;
  gap: 3px;
  height: 26px;
  margin-top: 8px;
}

.stat-card-sparkline-bar {
  flex: 1;
  min-width: 3px;
  background: rgba(0, 191, 143, 0.28);
  border-radius: 2px;
}

.stat-card-sparkline-bar:last-child {
  background: var(--color-primary);
}

/* ---- Stat kart - "soft" varyant (Soft UI Dashboard referansi, #00BF8F tonu) ---- */
.stat-card-soft {
  position: relative;
  overflow: hidden;
  padding: 18px 20px;
  background: #FFFFFF;
  border: none;
  border-radius: 0.75rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.stat-card-soft .stat-card-progress-bar {
  border-radius: 0 0 0.75rem 0;
}

.stat-card-soft:hover {
  transform: translateY(-3px);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.09);
}

/* Aksiyon gerektiren metrikler icin vurgulu varyant (orn. bekleyen randevu) -
   mevcut --color-accent-wine (uyari/hata) tonu, daha buyuk deger yazisi */
.stat-card-soft-urgent {
  background: linear-gradient(135deg, var(--color-wine-tint) 0%, #FFFFFF 65%);
  border: 1px solid rgba(225, 29, 72, 0.28);
  box-shadow: 0 20px 27px 0 rgba(225, 29, 72, 0.12);
}

.stat-card-soft-urgent:hover {
  box-shadow: 0 20px 27px 0 rgba(225, 29, 72, 0.2);
}

.stat-card-soft-urgent .stat-card-soft-value {
  font-size: 1.85rem;
  color: var(--color-accent-wine);
}

.stat-card-soft-urgent .stat-card-soft-label {
  color: var(--color-accent-wine);
}

.stat-card-soft-urgent .stat-card-icon-badge {
  background: rgba(225, 29, 72, 0.15);
}

.stat-card-soft-urgent .stat-card-icon-badge-mask {
  background-color: var(--color-accent-wine);
}

.stat-card-soft-clickable {
  cursor: pointer;
  text-align: left;
  font-family: var(--font-family);
  margin-bottom: 0;
}

.stat-card-soft-body {
  min-width: 0;
  padding-right: 48px;
}

.stat-card-soft-label {
  font-size: 0.7rem;
  font-weight: 700;
  color: var(--color-mist);
  letter-spacing: 0.03em;
  margin-bottom: 6px;
}

.stat-card-soft-value {
  font-size: 1.5rem;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--color-secondary);
  font-variant-numeric: tabular-nums;
}

.stat-card-trend {
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--color-mist);
  margin-top: 4px;
}

.stat-card-trend-up {
  color: var(--color-primary-dark);
}

.stat-card-trend-down {
  color: var(--color-mist);
}

/* ====================================================================
   K'nin gercek "bento" KPI karti (Panel Vitrini .k-bento/.j-bento'nun
   birebir aynisi - .mock-k .k-icon, .h-plan-tile, .j-tile-detail vb.
   CSS'inden ayni deger/renklerle tasindi, 2026-08-19). stat_cards.py'nin
   paylasilan .stat-card-soft bileseni BILEREK kullanilmiyor - K'nin
   duzeni (ikon solda + deger sagda tek satir, kucuk kartlarin KENDISI
   renkli) o bilesenin duzeninden (ikon sagda-ustte kose rozeti, beyaz
   kart) tamamen farkli, iki ayri "dil". ==================================== */
.member-bento {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
  margin-bottom: var(--spacing-lg);
}

@media (max-width: 640px) {
  .member-bento {
    grid-template-columns: repeat(2, 1fr);
  }
}

.member-bento-big,
.member-bento-tile {
  border-radius: 16px;
  display: flex;
  align-items: center;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.member-bento-big:hover,
.member-bento-tile:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.member-bento-big {
  grid-column: 1 / -1;
  background: #FFFFFF;
  box-shadow: 0 10px 24px -14px rgba(22, 32, 26, 0.18);
  padding: 16px;
  gap: 14px;
}

.member-bento-tile {
  padding: 14px;
  gap: 10px;
}

.member-bento-tile.t1 { background: #FFE3B0; }
.member-bento-tile.t2 { background: #E9F5A8; }
.member-bento-tile.t3 { background: #C3DDF6; }
.member-bento-tile.t4 { background: #D8F5C8; }

/* Grid'i tam bolmeyen son karo icin (K'nin "Uyelik Suresi" ornegindeki gibi)
   tam genislik span - render_member_bento_grid kalan sayisina gore ekliyor.
   Masaustu (3 sutun) ve mobil (2 sutun, bkz. .member-bento @media yukarida)
   icin AYRI class + AYRI breakpoint - biri digerinin gecerli olmadigi
   genislikte hicbir sey yapmiyor (mobile_bento_grid_2026_09_02). */
@media (min-width: 641px) {
  .member-bento-tile-full-desktop {
    grid-column: 1 / -1;
  }
}

@media (max-width: 640px) {
  .member-bento-tile-full-mobile {
    grid-column: 1 / -1;
  }
}

/* Buyuk karttaki ikon - gradient dolgulu squircle, K'nin .k-icon'uyla ayni */
.member-bento-icon-big {
  position: relative;
  width: 46px;
  height: 46px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 30%;
  overflow: hidden;
  background: linear-gradient(160deg, var(--ic-a), var(--ic-b));
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -8px 12px rgba(0, 0, 0, 0.14),
    0 6px 14px -7px rgba(20, 32, 26, 0.4);
}

.member-bento-icon-big::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.member-bento-icon-big .member-bento-icon-mask {
  position: relative;
  z-index: 1;
  width: 22px;
  height: 22px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

/* Kucuk kartlardaki ikon - K'nin gercek markup'inda kucuk karo ikonlari da
   ".k-icon ic-* .h-plan-ic" birlesimiyle gradient dolgulu (h-plan-ic sadece
   boyutu 36px'e kucultuyor, dolgu/gloss yine k-icon'dan geliyor) - duz
   beyaz/koyu-ikon degil, buyuk kartla AYNI gradient dili, sadece kucuk olcek. */
.member-bento-icon-small {
  position: relative;
  width: 36px;
  height: 36px;
  border-radius: 30%;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
  background: linear-gradient(160deg, var(--ic-a), var(--ic-b));
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
}

.member-bento-icon-small::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.member-bento-icon-small .member-bento-icon-mask {
  position: relative;
  z-index: 1;
  width: 17px;
  height: 17px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
}

.member-bento-icon-mask {
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.member-bento-big:hover .member-bento-icon-mask,
.member-bento-tile:hover .member-bento-icon-mask {
  transform: scale(1.15) rotate(-6deg);
}

.member-bento-icon-mask {
  transition: transform 0.2s ease;
}

.member-bento-num {
  /* px degil rem - erisilebilirlik icin sistem fontu buyutulunce (bkz.
     arastirma.md HATA 5) sayfanin geri kalaniyla (hepsi rem) orantili
     buyusun, sabit kalip hiyerarsiyi bozmasin. */
  font-size: 1rem;
  font-weight: 800;
  color: #16201A;
  line-height: 1.1;
}

.member-bento-big .member-bento-num {
  font-size: 1.1875rem;
}

.member-bento-lbl {
  font-size: 0.625rem;
  color: #384038;
  margin-top: 1px;
}

.member-bento-detail {
  font-size: 0.5625rem;
  font-weight: 700;
  margin-top: 3px;
}

.member-bento-detail.good { color: #00744C; }
.member-bento-detail.mid { color: #1D5B96; }
.member-bento-detail.warn { color: #7A5A10; }

/* Hedefe ulasilan karti icin kutlama (K'daki confetti deseni) */
.member-bento-icon-celebrate {
  animation: member-bento-celebrate-pulse 1.8s ease-in-out infinite;
}

@keyframes member-bento-celebrate-pulse {
  0%, 100% { box-shadow: 0 0 0 4px rgba(0, 191, 143, 0.18); }
  50% { box-shadow: 0 0 0 9px rgba(0, 191, 143, 0.05); }
}

.member-bento-confetti-piece {
  position: absolute;
  top: -4px;
  width: 6px;
  height: 6px;
  border-radius: 2px;
  opacity: 0.9;
  animation: member-bento-confetti-fall 2.4s ease-in infinite;
}

.member-bento-confetti-1 { left: 4px; background: var(--color-primary); animation-delay: 0s; }
.member-bento-confetti-2 { left: 15px; background: #0EA5E9; animation-delay: 0.5s; }
.member-bento-confetti-3 { left: 26px; background: #F59E0B; animation-delay: 1s; }

@keyframes member-bento-confetti-fall {
  0% { transform: translateY(-6px) rotate(0deg); opacity: 1; }
  100% { transform: translateY(50px) rotate(260deg); opacity: 0; }
}

.member-bento-tile {
  position: relative;
}

@media (prefers-reduced-motion: reduce) {
  .member-bento-icon-celebrate,
  .member-bento-confetti-piece {
    animation: none;
  }
}

/* ---- Paket sayfalari KPI kartlari (Toplam/Aktif/Pasif) - halka orani + uye-mavi
   "Toplam" kimligi. Onaylanan tasarim, 2026-08-10. Aktif/Pasif kendi anlamsal
   renginde kaliyor (yesil=canli, mist=durgun) - "Toplam" bir durum degil notr bir
   genel-bakis metrigi oldugu icin projede zaten var olan uye modul mavisini
   (--color-module-appointment) odunc aliyor, yeni renk icat edilmedi. */
.pkg-kpi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 16px;
  margin-bottom: var(--spacing-lg);
}

.pkg-kpi-card {
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: 0.85rem;
  box-shadow: 0 12px 24px 0 rgba(0, 0, 0, 0.045);
  padding: 16px 18px 15px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  transition: transform 0.18s ease, box-shadow 0.18s ease;
}

.pkg-kpi-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 16px 30px 0 rgba(0, 0, 0, 0.08);
}

.pkg-kpi-card-clickable {
  cursor: pointer;
}

.pkg-kpi-eyebrow {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 6px 8px;
}

.pkg-kpi-eyebrow-left {
  display: flex;
  align-items: flex-start;
  gap: 6px;
  min-width: 0;
  flex: 1;
}

.pkg-kpi-icon-badge {
  width: 22px;
  height: 22px;
  border-radius: 7px;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}

.pkg-kpi-icon-badge .stat-card-icon-badge-mask {
  width: 12px;
  height: 12px;
  background-color: #FFFFFF;
}

.pkg-kpi-icon-badge-member {
  background: linear-gradient(135deg, #93C5FD, var(--color-module-appointment));
}

.pkg-kpi-icon-badge-member .stat-card-icon-badge-mask {
  background-color: #FFFFFF;
}

.pkg-kpi-icon-badge-neutral {
  background: linear-gradient(135deg, #CBD5E1, var(--color-module-neutral));
}

.pkg-kpi-icon-badge-neutral .stat-card-icon-badge-mask {
  background-color: #FFFFFF;
}

.pkg-kpi-label {
  font-size: 0.685rem;
  font-weight: 700;
  color: var(--color-mist);
  letter-spacing: 0.045em;
  min-width: 88px;
  flex: 1;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
  padding-top: 2px;
}

.pkg-kpi-trend-badge {
  font-size: 0.66rem;
  font-weight: 700;
  color: var(--color-primary-dark);
  background: var(--color-sage-tint);
  padding: 2px 7px;
  border-radius: 5px;
  white-space: nowrap;
  flex-shrink: 0;
}

.pkg-kpi-main {
  display: flex;
  align-items: center;
  gap: 14px;
}

.pkg-kpi-ring {
  --thickness: 5px;
  width: 46px;
  height: 46px;
  border-radius: 50%;
  flex-shrink: 0;
  position: relative;
  background: conic-gradient(var(--ring-a, var(--color-primary)) 0 var(--pct-a, 0%), var(--ring-b, var(--color-mist)) var(--pct-a, 0%) var(--pct-b, 0%), var(--color-border) var(--pct-b, 0%) 100%);
  -webkit-mask: radial-gradient(farthest-side, transparent calc(100% - var(--thickness) - 2px), #000 calc(100% - var(--thickness)));
  mask: radial-gradient(farthest-side, transparent calc(100% - var(--thickness) - 2px), #000 calc(100% - var(--thickness)));
}

.pkg-kpi-ring-pct {
  position: absolute;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.62rem;
  font-weight: 800;
  color: var(--color-secondary);
  font-variant-numeric: tabular-nums;
}

.pkg-kpi-ring-pulse {
  position: absolute;
  top: -1px;
  left: 50%;
  transform: translateX(-50%);
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--color-primary);
  box-shadow: 0 0 0 0 rgba(0, 191, 143, 0.45);
}

@media (prefers-reduced-motion: no-preference) {
  .pkg-kpi-ring-pulse {
    animation: pkg-kpi-pulse 2.4s ease-out infinite;
  }
}

@keyframes pkg-kpi-pulse {
  0% { box-shadow: 0 0 0 0 rgba(0, 191, 143, 0.45); }
  70% { box-shadow: 0 0 0 7px rgba(0, 191, 143, 0); }
  100% { box-shadow: 0 0 0 0 rgba(0, 191, 143, 0); }
}

.pkg-kpi-value {
  font-size: 1.55rem;
  font-weight: 800;
  color: var(--color-secondary);
  letter-spacing: -0.02em;
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.pkg-kpi-divider {
  border-top: 1px solid var(--color-border);
}

.pkg-kpi-foot {
  display: flex;
  align-items: center;
  gap: 7px;
  font-size: 0.75rem;
  color: var(--color-mist);
  flex-wrap: wrap;
}

.pkg-kpi-dot {
  width: 6px;
  height: 6px;
  border-radius: 50%;
  flex-shrink: 0;
}

.pkg-kpi-dot-primary { background: var(--color-primary); }
.pkg-kpi-dot-neutral { background: var(--color-mist); }

.pkg-kpi-foot-plain {
  display: block;
  gap: 0;
}

.pkg-kpi-foot-strong {
  color: var(--color-secondary);
  font-weight: 700;
  font-variant-numeric: tabular-nums;
}

@media (max-width: 640px) {
  .pkg-kpi-grid {
    grid-template-columns: 1fr;
  }
}

/* ---- Genel kart + baslik bar (admin bolum kartlari - onaylanmis mockup, 2026-08-09) ---- */
.admin-section-card {
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: 0.75rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
  margin-bottom: var(--spacing-lg);
}

.admin-section-card-header {
  background: #FAFAFA;
  padding: 10px 16px;
  border-bottom: 1px solid var(--color-border);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-sm);
}

.admin-section-card-title {
  font-size: 0.875rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.admin-section-card-body {
  padding: 16px;
}

.admin-section-card-fields-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px 20px;
}

.admin-section-card-fields-grid .field-group {
  max-width: none;
}

.admin-section-card-fields-grid .field-group-full {
  grid-column: 1 / -1;
}

@media (max-width: 720px) {
  .admin-section-card-fields-grid {
    grid-template-columns: 1fr;
  }
}

.mpk-group-block {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  overflow: hidden;
  margin-bottom: var(--spacing-md);
}

.mpk-group-block:last-child {
  margin-bottom: 0;
}

.mpk-group-header {
  background: #FAFAFA;
  padding: 10px 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-sm);
  border-bottom: 1px solid var(--color-border);
}

.mpk-group-name-input {
  font-weight: 700;
  font-size: 0.875rem;
  border: none;
  background: transparent;
  flex: 1;
}

.mpk-group-name-input:focus {
  outline: none;
  background: #FFFFFF;
  border-radius: 4px;
}

.mpk-group-add-variant-button {
  font-size: 0.75rem;
  padding: 4px 10px;
  color: var(--color-primary-dark);
  border-color: rgba(0, 191, 143, 0.3);
  white-space: nowrap;
}

.mpk-list-chip-row {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}

/* .ftag/.ftag-x ile ayni "hero" pill dili (2026-08-25) - eskiden duz
   .color-sage-tint dolgulu, cok sade bir rozetti. */
.grp-chip {
  display: inline-flex; align-items: center;
  background: #E9F5A8;
  color: var(--color-primary-dark);
  border: 1px solid rgba(0, 61, 51, 0.18);
  padding: 5px 12px;
  border-radius: 999px;
  font-size: 0.75rem;
  font-weight: 700;
  box-shadow: 0 2px 6px rgba(0, 61, 51, 0.06);
}

/* ---- Soft tablo (Soft UI Dashboard "Authors table" referansi) ---- */
.soft-table-card {
  position: relative;
  background: #FFFFFF;
  border-radius: 0.75rem;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  padding: 8px 0;
  overflow-x: auto;
}

/* Mobilde saga kaydirma ipucu - .apt-history-card::after ile ayni desen
   (arastirma.md HATA 6). */
@media (max-width: 900px) {
  .soft-table-card::after {
    content: "→";
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    width: 40px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding-right: 8px;
    color: var(--color-mist);
    font-size: 1rem;
    font-weight: 700;
    pointer-events: none;
    border-radius: 0 0.75rem 0.75rem 0;
    background: linear-gradient(to right, transparent, #FFFFFF 60%);
  }
}

.soft-table-header-row,
.soft-table-row {
  display: grid;
  align-items: center;
  gap: 12px;
  min-width: 560px;
  padding: 14px 24px;
}

.soft-table-header-row {
  padding-top: 10px;
  padding-bottom: 10px;
  background: #FAFAFA;
  border-bottom: 1px solid var(--color-border);
}

.soft-table-th {
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.05em;
  color: var(--color-mist);
}

.soft-table-row {
  border-top: 1px solid var(--color-border);
}

/* "Mercan Panel" (CLAUDE.md madde 26) - .soft-table-* icin renkli varyant.
   .mb-pkg-bicon (theme.css .mb-pkg-* blogu) burada da ayni sekilde yeniden
   kullaniliyor. Kart varsayilan olarak 8px dolgu tasidigi icin (baslik seridi
   tam kenara dayanmiyordu) colorful modda dolgu sifirlanip overflow:hidden
   ekleniyor - diger Mercan Panel tablolariyla ayni "kenara kadar" gorunum. */
.soft-table-card.mp-colorful {
  /* Kartin kendi arkaplani hicbir zaman gorunmuyor - baslik+satirlar padding:0
     ile kenara kadar dolduruyor. Bento rengi (kullanicinin istedigi "Profil
     Bilgileri" pasteli) bu kart yerine onu SARAN .pf-card'a (bkz.
     .admin-users-page/.admin-coaches-page .pf-tile-t1) uygulaniyor. */
  padding: 0;
  overflow: hidden;
  overflow-x: auto;
}

.soft-table-header-row.mp-colorful {
  background: linear-gradient(90deg, #5FE0E8, #1EC1CB 55%, #0E8A92 100%);
  border-bottom: none;
  padding-top: 20px;
  padding-bottom: 20px;
}

.soft-table-header-row.mp-colorful .soft-table-th {
  font-size: 0.82rem;
  color: rgba(0, 0, 0, 0.78);
}

.soft-table-row.mp-tinted {
  background: var(--mp-tint) !important;
}

.soft-table-row.mp-tinted:hover .mb-pkg-bicon {
  transform: scale(1.12) rotate(-6deg);
}

.soft-table-identity {
  display: flex;
  align-items: center;
  gap: 12px;
  min-width: 0;
}

.soft-table-identity-text {
  min-width: 0;
}

.soft-table-name {
  font-weight: 700;
  color: var(--color-secondary);
  font-size: 0.9rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.soft-table-subtitle {
  color: var(--color-mist);
  font-size: 0.78rem;
  margin-top: 2px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.soft-table-cell-title {
  font-weight: 600;
  color: var(--color-secondary);
  font-size: 0.85rem;
}

.soft-table-cell-subtitle {
  color: var(--color-mist);
  font-size: 0.78rem;
  margin-top: 6px;
}

.soft-table-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 6px;
}

.soft-table-actions button {
  margin-bottom: 0;
  width: 150px;
  text-align: center;
}

/* Ikincil buton: ayni satirdaki durum rozetiyle yarismasin diye
   (Pasiflestir/Sifreyi Sifirla gibi ikincil aksiyonlar icin) */
.btn-outline {
  background: transparent;
  color: var(--color-secondary);
  border: 1px solid var(--color-border);
  box-shadow: none;
}

.btn-outline:hover {
  background: var(--color-sage-tint);
  border-color: var(--color-primary);
  transform: none;
  box-shadow: none;
}

/* Aksiyonun turune gore sabit (deterministik) renk - kisiye gore degil */
.btn-outline-danger {
  color: var(--color-accent-wine);
  border-color: rgba(225, 29, 72, 0.3);
}
.btn-outline-danger:hover {
  background: var(--color-wine-tint);
  border-color: var(--color-accent-wine);
}

.btn-outline-success {
  color: var(--color-primary-dark);
  border-color: rgba(0, 191, 143, 0.3);
}
.btn-outline-success:hover {
  background: var(--color-sage-tint);
  border-color: var(--color-primary);
}

.btn-outline-info {
  color: var(--color-module-appointment);
  border-color: rgba(59, 130, 246, 0.3);
}
.btn-outline-info:hover {
  background: var(--color-module-appointment-tint);
  border-color: var(--color-module-appointment);
}

.soft-table-status-cell {
  width: 150px;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* /admin/users tablosu - Rol/Durum/Uyelik Tarihi kolonlari basliklariyla
   ayni hizada (ortali) gorunsun diye - .soft-table-status-cell zaten kendi
   icinde ortali ama sabit 150px genislikte oldugu icin baslikla hizasi
   kaymiyordu, digerleri de merkeze alindi. */
#users-rows-container .soft-table-header-row .soft-table-th:nth-child(2),
#users-rows-container .soft-table-header-row .soft-table-th:nth-child(3),
#users-rows-container .soft-table-header-row .soft-table-th:nth-child(4) {
  text-align: center;
}

#users-rows-container .soft-table-row > *:nth-child(2),
#users-rows-container .soft-table-row > *:nth-child(4) {
  text-align: center;
}

#users-rows-container .soft-table-status-cell {
  width: 100%;
}

/* /admin/coaches tablosu - ayni hizalama duzeltmesi, "Durum" (3. kolon)
   basligiyla rozeti ortalansin diye. */
#coach-rows-container .soft-table-header-row .soft-table-th:nth-child(3) {
  text-align: center;
}

#coach-rows-container .soft-table-status-cell {
  width: 100%;
}

.soft-table-action-link {
  background: none;
  box-shadow: none;
  border: none;
  color: var(--color-primary-dark);
  font-weight: 700;
  font-size: 0.8rem;
  padding: 4px 0;
  cursor: pointer;
}

.soft-table-action-link:hover {
  transform: none;
  box-shadow: none;
  text-decoration: underline;
}

/* ---- Soft pill (dolu renkli durum rozeti) ---- */
.soft-pill {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.4em 0.9em;
  border-radius: 0.45rem;
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  color: #FFFFFF;
  white-space: nowrap;
}

.soft-pill-success {
  background: linear-gradient(310deg, #00816B 0%, #00BF8F 100%);
}

.soft-pill-neutral {
  background: linear-gradient(310deg, #627594 0%, #A8B8D8 100%);
}

.soft-pill-warning {
  background: linear-gradient(310deg, #C97F2E 0%, #F0B879 100%);
}

.soft-pill-danger {
  background: linear-gradient(310deg, #A8123E 0%, #E11D48 100%);
}

/* ---- Grafik kartlari ---- */
.charts-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-lg);
}

.chart-card {
  padding: var(--spacing-md) var(--spacing-lg) var(--spacing-lg);
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: 20px;
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
}

.chart-card-title {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--color-secondary);
  margin-bottom: var(--spacing-sm);
}

/* ---- Bos durum (empty state) ---- */
.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  padding: 48px 20px;
  text-align: center;
}

.empty-state-compact {
  padding: 24px 16px;
  gap: 8px;
}

.empty-state-icon-wrap {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  flex-shrink: 0;
}

.empty-state-compact .empty-state-icon-wrap {
  width: 36px;
  height: 36px;
}

.empty-state-icon {
  width: 22px;
  height: 22px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.empty-state-compact .empty-state-icon {
  width: 16px;
  height: 16px;
}

.empty-state-icon-ruler { -webkit-mask-image: url(/assets/icons/ruler.svg); mask-image: url(/assets/icons/ruler.svg); }
.empty-state-icon-calendar { -webkit-mask-image: url(/assets/icons/calendar.svg); mask-image: url(/assets/icons/calendar.svg); }
.empty-state-icon-bell { -webkit-mask-image: url(/assets/icons/bell.svg); mask-image: url(/assets/icons/bell.svg); }
.empty-state-icon-inbox { -webkit-mask-image: url(/assets/icons/inbox.svg); mask-image: url(/assets/icons/inbox.svg); }
.empty-state-icon-leaf { -webkit-mask-image: url(/assets/icons/leaf.svg); mask-image: url(/assets/icons/leaf.svg); }
.empty-state-icon-user-search { -webkit-mask-image: url(/assets/icons/user-search.svg); mask-image: url(/assets/icons/user-search.svg); }
.empty-state-icon-users { -webkit-mask-image: url(/assets/icons/users.svg); mask-image: url(/assets/icons/users.svg); }
.empty-state-icon-user-check { -webkit-mask-image: url(/assets/icons/user-check.svg); mask-image: url(/assets/icons/user-check.svg); }

.empty-state-message {
  font-size: 0.85rem;
  font-weight: 500;
  color: var(--color-mist);
  max-width: 280px;
}

.empty-state-compact .empty-state-message {
  font-size: 0.78rem;
}

/* ---- Yuklenme iskeleti (skeleton) ----
   Duz opacity pulse yerine soldan saga kayan "shimmer" isigi - kullanicinin
   secimi (2026-08-13, dort canli varyant karsilastirildi: duz pulse/shimmer/
   marka renkli spinner/yumusatilmis pulse). */
@keyframes skeleton-shimmer {
  0% { background-position: 150% 0; }
  100% { background-position: -50% 0; }
}

.skeleton-row, .skeleton-card {
  position: relative;
  overflow: hidden;
  border: 1px solid var(--glass-border);
}

.skeleton-row::after, .skeleton-card::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(100deg, transparent 20%, rgba(15, 23, 42, 0.07) 45%, transparent 70%);
  background-size: 200% 100%;
  animation: skeleton-shimmer 1.6s ease-in-out infinite;
}

.skeleton-row {
  height: 64px;
  border-radius: var(--radius-md);
  background: var(--glass-bg-flat);
  margin-bottom: var(--spacing-sm);
}

.skeleton-card {
  height: 96px;
  border-radius: var(--radius-lg);
  background: var(--glass-bg);
}

.skeleton-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-lg);
}

@media (prefers-reduced-motion: reduce) {
  .skeleton-row::after, .skeleton-card::after {
    animation: none;
    display: none;
  }
  .skeleton-row, .skeleton-card {
    opacity: 0.7;
  }
}

/* ---- Dashboard icerik yumusak gecisi (skeleton -> gercek icerik) ---- */
@keyframes dashboard-content-fade-in {
  from { opacity: 0; transform: translateY(6px); }
  to { opacity: 1; transform: translateY(0); }
}

.dashboard-content-fade-in {
  animation: dashboard-content-fade-in 0.35s ease-out;
}

@media (prefers-reduced-motion: reduce) {
  .dashboard-content-fade-in {
    animation: none;
  }
}

/* ---- Kameray la Ogun Tara + Bugunku Ogunlerim (checkin.py) ---- */
.ci-meal-scan-card {
  background: #E9F5A8;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
  display: flex;
  flex-direction: column;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.ci-meal-scan-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.ci-meal-scan-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 20px 14px;
  border-bottom: 1px solid var(--color-border);
  gap: var(--spacing-sm);
}

.ci-meal-scan-header-left {
  display: flex;
  align-items: center;
  gap: 10px;
}

.ci-meal-scan-header-icon {
  position: relative;
  width: 32px;
  height: 32px;
  border-radius: 30%;
  overflow: hidden;
  flex-shrink: 0;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease;
}

.ci-meal-scan-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.ci-meal-scan-card:hover .ci-meal-scan-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

.ci-meal-scan-header-icon-mask {
  position: relative;
  z-index: 1;
  width: 15px;
  height: 15px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.ci-meal-scan-header-title {
  font-size: 0.82rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.ci-meal-scan-header-badge {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
  font-weight: 700;
  font-size: 0.72rem;
  padding: 4px 10px;
  border-radius: 999px;
  flex-shrink: 0;
}

.ci-meal-scan-body {
  flex: 1;
  padding: 18px 20px 20px;
  display: flex;
}

/* dcc.Upload, verdigimiz id'yi kendi disina sardigi bir wrapper div'e koyuyor
   (asil dashed kutuyu ciziyor olan .ci-meal-scan-frame ise o wrapper'in ICINDE
   ayri bir div) - id'siz/stilsiz wrapper flex baglaminda icerigine gore
   kuculuyordu, bu yuzden kutu kartin tamamini doldurmuyordu. Wrapper'i da
   burada acikca genisletiyoruz. */
#meal-photo-upload {
  flex: 1;
  width: 100%;
  display: flex;
}

.ci-meal-scan-frame {
  flex: 1;
  width: 100%;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  border: 2px dashed rgba(0, 191, 143, 0.35);
  border-radius: var(--radius-md);
  background: linear-gradient(160deg, rgba(0, 191, 143, 0.08), rgba(0, 191, 143, 0.02));
  cursor: pointer;
  padding: 20px;
  min-height: 180px;
  transition: border-color 0.15s ease, background 0.15s ease;
}

.ci-meal-scan-frame:hover {
  border-color: rgba(0, 191, 143, 0.6);
  background: linear-gradient(160deg, rgba(0, 191, 143, 0.12), rgba(0, 191, 143, 0.03));
}

.ci-meal-scan-button {
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow: 0 8px 18px rgba(0, 191, 143, 0.30);
}

.ci-meal-scan-button-mask {
  width: 24px;
  height: 24px;
  background-color: #FFFFFF;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.ci-meal-scan-hint {
  font-size: 0.8rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.ci-meal-scan-subhint {
  font-size: 0.72rem;
  color: var(--color-mist);
}

.ci-meal-log-header {
  display: flex;
  flex-direction: column;
  gap: 4px;
  margin-bottom: var(--spacing-md);
}

.ci-meal-log-header .section-header-row {
  margin-bottom: 0;
}

.ci-meal-log-totals-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--spacing-sm);
}

.ci-meal-log-total-badge {
  display: flex;
  align-items: center;
  gap: 6px;
  padding: 4px 12px;
  border-radius: 999px;
  background: var(--color-module-nutrition-tint);
}

.ci-meal-log-total-badge-mask {
  width: 14px;
  height: 14px;
  background-color: #B45309;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.ci-meal-log-total-badge-value {
  font-weight: 800;
  font-size: 0.85rem;
  color: #B45309;
}

.ci-meal-log-totals-detail {
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--color-secondary);
}

.ci-meal-log-empty {
  color: var(--color-mist);
  font-size: 0.85rem;
}

.ci-meal-log-delete-btn {
  width: 34px;
  height: 34px;
  padding: 0;
  background: transparent;
  border: none;
  box-shadow: none;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.ci-meal-log-delete-btn-mask {
  width: 16px;
  height: 16px;
  background-color: var(--color-mist);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.ci-meal-log-delete-btn:hover {
  background: transparent;
  transform: none;
  box-shadow: none;
}

.ci-meal-log-delete-btn:hover .ci-meal-log-delete-btn-mask {
  background-color: var(--color-accent-wine);
}

/* ---- Gunluk Check-in ---- */
.checkin-form {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
}

.checkin-form-submit {
  align-self: flex-start;
}

.checkin-form-locked-note {
  color: var(--color-mist);
  font-size: 0.85rem;
  margin: 0;
}

.ci-summary-body-locked .dash-input-container:has(input:disabled) {
  background-color: rgba(15, 23, 42, 0.04);
  cursor: not-allowed;
}

.ci-summary-body-locked .dash-input-element:disabled {
  color: var(--color-mist);
  -webkit-text-fill-color: var(--color-mist);
  opacity: 1;
}

.checkin-rating .dash-options-list-option:has(input:disabled) {
  cursor: not-allowed;
  opacity: 0.5;
}

.checkin-rating .dash-options-list-option.selected:has(input:disabled) {
  opacity: 1;
}

.checkin-rating {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  margin-bottom: 0;
  max-width: 100%;
}

/* .checkin-field-control genislik tanimlamiyor (flex-shrink:0, auto) - icindeki
   .dash-input-container'in width:100%'u boyle bir "auto genislikli ebeveyn"
   icinde belirsiz kaliyor, tarayici input'u ~32px'e (asiri kucuk, "kayip"
   gorunumlu) daraltiyor. SABIT width (sadece max-width degil) bu belirsizligi
   ortadan kaldiriyor - bkz. kullanici raporu 2026-08-23, masaustunde input hic
   gorunmuyordu. */
.checkin-sleep-input {
  width: 140px;
  max-width: 140px;
}

/* ---- Gunun Ozeti karti - Su Takibi ile ayni desen: ikon rozetli baslik +
   govde icinde tablo basligi olmadan alt alta "alan" satirlari + footer. ---- */
.ci-summary-card {
  background: #FFE3B0;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  overflow: hidden;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.ci-summary-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.ci-summary-header {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 16px 20px 14px;
  border-bottom: 1px solid var(--color-border);
}

/* Paylasilan .chart-header-icon YERINE scoped kopya (bkz. CLAUDE.md madde 16) -
   bento dilindeki gradient+gloss+hover-rotate treatment'i .chart-header-icon'a
   eklemek onu kullanan diger sayfalari da etkilerdi, bu yuzden ayri class. */
.ci-summary-header-icon {
  position: relative;
  width: 32px;
  height: 32px;
  border-radius: 30%;
  overflow: hidden;
  flex-shrink: 0;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
  display: flex;
  align-items: center;
  justify-content: center;
  transition: transform 0.2s ease;
}

.ci-summary-header-icon::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -10%;
  width: 120%;
  height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.ci-summary-card:hover .ci-summary-header-icon {
  transform: scale(1.15) rotate(-6deg);
}

.ci-summary-header-icon-mask {
  position: relative;
  z-index: 1;
  width: 15px;
  height: 15px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.ci-summary-header-title {
  font-size: 0.9rem;
  font-weight: 800;
  color: var(--color-secondary);
}

.ci-summary-body {
  display: flex;
  flex-direction: column;
}

.checkin-field-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px;
  padding: 16px 20px;
}

.checkin-field-row + .checkin-field-row {
  border-top: 1px solid var(--color-border);
}

.checkin-field-control {
  flex-shrink: 0;
}

/* Dar ekranda etiket ("Bu gece kac saat uyudun?") + input ayni satirda
   sigmayinca input kirpiliyordu (satir sarmiyor, kart overflow:hidden
   fazlaligi kesiyordu) - dar ekranda input'u tam genislikte alta al,
   kesilme riski kalmasin. */
@media (max-width: 480px) {
  .checkin-field-row {
    flex-direction: column;
    align-items: stretch;
  }

  .checkin-field-control {
    width: 100%;
  }

  .checkin-sleep-input {
    max-width: none;
    width: 100%;
    box-sizing: border-box;
  }
}

.ci-summary-footer {
  padding: 4px 20px 20px;
}

.checkin-rating label {
  font-weight: 400;
  color: var(--color-charcoal);
  margin-top: 0;
  margin-bottom: 0;
  display: flex;
  align-items: center;
  gap: 4px;
}

/* Segmented pill görünümü - dcc.RadioItems'in Dash 4.4 iskeleti secili
   secenege otomatik olarak .selected class'i ekliyor (bkz. .onb-pill-group
   ile ayni desen), biz sadece bunu 1-5 puanlama icin kare/rozet stiline
   ceviriyoruz. */
.checkin-rating .dash-options-list-option {
  min-width: 32px;
  height: 32px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0 3px;
  border-radius: 10px;
  border: 1.5px solid var(--color-border);
  background-color: #FFFFFF;
  color: var(--color-charcoal);
  font-weight: 700;
  font-size: 0.8rem;
  cursor: pointer;
  transition: transform 0.15s ease, border-color 0.15s ease, background 0.15s ease, color 0.15s ease;
}

.checkin-rating .dash-options-list-option:hover {
  transform: translateY(-1px);
}

.checkin-rating .dash-options-list-option.selected {
  color: #FFFFFF;
  border-color: transparent;
}

.checkin-rating-sleep .dash-options-list-option.selected {
  background: linear-gradient(135deg, #A5B4FC, var(--color-module-sleep));
  box-shadow: 0 4px 10px rgba(99, 102, 241, 0.32);
}

.checkin-rating-nutrition .dash-options-list-option.selected {
  background: linear-gradient(135deg, #FCD34D, #B45309);
  box-shadow: 0 4px 10px rgba(180, 83, 9, 0.28);
}

.checkin-rating-stress .dash-options-list-option.selected {
  background: linear-gradient(135deg, #67E8F9, #0E7490);
  box-shadow: 0 4px 10px rgba(14, 116, 144, 0.28);
}

.checkin-rating-lifestyle .dash-options-list-option.selected {
  background: linear-gradient(135deg, #FDBA74, var(--color-module-lifestyle));
  box-shadow: 0 4px 10px rgba(249, 115, 22, 0.28);
}

.checkin-rating .dash-options-list-option-checkbox {
  display: none;
}

.checkin-field-label {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}

.checkin-field-label-center {
  align-items: center;
}

.checkin-field-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  margin-top: 2px;
}

.checkin-field-icon-mask {
  width: 16px;
  height: 16px;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.checkin-field-icon-sleep { background: linear-gradient(135deg, #A5B4FC, var(--color-module-sleep)); }
.checkin-field-icon-sleep .checkin-field-icon-mask { background-color: #FFFFFF; }
.checkin-field-icon-nutrition { background: linear-gradient(135deg, #FCD34D, #B45309); }
.checkin-field-icon-nutrition .checkin-field-icon-mask { background-color: #FFFFFF; }
.checkin-field-icon-stress { background: linear-gradient(135deg, #67E8F9, #0E7490); }
.checkin-field-icon-stress .checkin-field-icon-mask { background-color: #FFFFFF; }
.checkin-field-icon-lifestyle { background: linear-gradient(135deg, #FDBA74, var(--color-module-lifestyle)); }
.checkin-field-icon-lifestyle .checkin-field-icon-mask { background-color: #FFFFFF; }

@media (max-width: 768px) {
  .stat-card-grid {
    grid-template-columns: 1fr 1fr;
  }

  .charts-grid {
    grid-template-columns: 1fr;
  }

  input[type="text"],
  input[type="email"],
  input[type="password"],
  input[type="number"],
  textarea {
    font-size: 16px;
  }
}

@media (max-width: 640px) {
  .navbar {
    margin: 8px 8px 0;
    top: 8px;
    padding: 8px 14px;
    gap: 6px;
  }

  .navbar-links {
    justify-content: flex-start;
    flex-wrap: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
  }

  .navbar-links::-webkit-scrollbar {
    display: none;
  }

  .navbar-brand {
    display: none;
  }

  .navbar-username {
    display: none;
  }

  .stat-card-grid {
    grid-template-columns: 1fr;
  }

}

.notif-actions {
  display: flex;
  gap: var(--spacing-sm);
  margin-top: var(--spacing-sm);
}

/* ---- Testimonials ---- */
.testimonial-form-card {
  padding: var(--spacing-md);
  margin-bottom: var(--spacing-md);
  background: #FFFFFF;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
}

.testimonial-form-message {
  margin-top: var(--spacing-sm);
}

.testimonial-readonly {
  font-style: italic;
  padding: var(--spacing-sm);
  background: var(--color-paper);
  border-radius: var(--radius-sm);
}

.testimonial-coach-response-readonly {
  margin-top: var(--spacing-sm);
  padding-left: var(--spacing-sm);
  border-left: 2px solid var(--color-primary);
  color: var(--color-mist);
  font-size: 0.9em;
}

.testimonial-own-status {
  display: inline-block;
  margin-bottom: var(--spacing-sm);
  font-size: 0.85em;
  color: var(--color-mist);
}

/* Eskiden --glass-bg/--glass-border (K'den ONCEKI bir tasarim dili, bkz.
   CLAUDE.md madde 4) kullaniyordu - bu sayfa (coach K portu, 2026-08-21)
   diger K bento kartlariyla ayni pastel+hover-lift diline getirildi.
   .testimonial-pending-card/.testimonial-approved-card SADECE bu dosyada
   (callbacks/testimonials.py) kullaniliyor, scoping riski yok. */
.testimonial-pending-card {
  padding: var(--spacing-lg);
  margin-bottom: var(--spacing-md);
  background: #FFE3B0;
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: 0 20px 27px 0 rgba(0, 0, 0, 0.05);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.testimonial-pending-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.testimonial-approved-card {
  background: #D8F5C8;
}

.testimonial-pending-header {
  display: flex;
  align-items: center;
  gap: var(--spacing-sm);
  margin-bottom: var(--spacing-sm);
}

.testimonial-pending-name {
  font-weight: 600;
}

.testimonial-pending-email {
  font-size: 0.85em;
  color: var(--color-mist);
}

.testimonial-pending-content {
  font-style: italic;
  padding: var(--spacing-sm);
  background: var(--color-paper);
  border-radius: var(--radius-sm);
}

.testimonial-coach-response-input {
  width: 100%;
  margin-top: var(--spacing-sm);
}

.testimonial-content-edit-row {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 6px;
}

.testimonial-pending-content-input {
  width: 100%;
  font-style: italic;
  background: rgba(255, 255, 255, 0.55);
}

.testimonial-content-save-btn {
  align-self: flex-end;
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
  border: none;
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
}

.testimonial-content-save-btn:hover {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  color: #FFFFFF;
  border-color: transparent;
  filter: brightness(1.05);
  box-shadow: 0 4px 10px rgba(0, 191, 143, 0.28);
}

.testimonial-pending-actions {
  display: flex;
  gap: var(--spacing-sm);
  margin-top: var(--spacing-sm);
}

.testimonial-approve-btn {
  background: var(--color-primary);
  color: #FFFFFF;
  border-color: var(--color-primary);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.testimonial-reject-btn {
  background: var(--color-accent-wine);
  color: #FFFFFF;
  border-color: var(--color-accent-wine);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.testimonial-approve-btn:hover,
.testimonial-reject-btn:hover {
  transform: translateY(-1px);
  box-shadow: 0 8px 18px -6px rgba(20, 32, 26, 0.35);
}

.testimonials-approved-section {
  margin-top: var(--spacing-xl);
}

.testimonial-approved-badge {
  margin-left: auto;
  padding: 3px 12px;
  border-radius: 999px;
  background: linear-gradient(135deg, #5EEAD4, #0D9488);
  color: #FFFFFF;
  font-size: 0.72rem;
  font-weight: 700;
}

.testimonial-pending-badge {
  margin-left: auto;
  padding: 3px 12px;
  border-radius: 999px;
  background: linear-gradient(135deg, #FCD9A8, var(--color-warning));
  color: #FFFFFF;
  font-size: 0.72rem;
  font-weight: 700;
  white-space: nowrap;
}

.testimonial-delete-btn {
  width: 34px;
  height: 34px;
  padding: 0;
  background: transparent;
  border: none;
  box-shadow: none;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.testimonial-delete-btn-mask {
  width: 16px;
  height: 16px;
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  -webkit-mask-image: url(/assets/icons/trash.svg);
  mask-image: url(/assets/icons/trash.svg);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.testimonial-carousel {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-md);
  min-height: 200px;
}

.testimonial-carousel-track {
  display: flex;
  flex-wrap: wrap;
  gap: var(--spacing-md);
  width: 100%;
}

.testimonial-public-card {
  flex: 1 1 260px;
  max-width: 320px;
  padding: var(--spacing-md);
  background: var(--glass-bg);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-md);
  box-shadow: var(--glass-shadow);
}

.testimonial-public-content {
  font-style: italic;
  margin: var(--spacing-sm) 0;
}

.testimonial-public-name {
  font-weight: 600;
}

.testimonial-public-coach-response {
  margin-top: var(--spacing-sm);
  padding-left: var(--spacing-sm);
  border-left: 2px solid var(--color-primary);
  color: var(--color-mist);
  font-size: 0.9em;
}

.testimonial-public-date {
  margin-top: var(--spacing-sm);
  font-size: 0.8em;
  color: var(--color-mist);
}

.mpk-image-upload {
  border: 2px dashed var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--spacing-lg);
  text-align: center;
  color: var(--color-mist);
  cursor: pointer;
  margin-bottom: var(--spacing-sm);
}

.mpk-image-preview {
  max-width: 200px;
  border-radius: var(--radius-sm);
  margin-bottom: var(--spacing-sm);
}

.mpk-components-empty {
  color: var(--color-mist);
  font-size: 0.85rem;
  margin-bottom: var(--spacing-sm);
}

.mpk-comp-add-button {
  margin-top: var(--spacing-sm);
}

.mpk-comp-input .dash-input-container {
  max-width: 100%;
  height: 36px;
  margin-bottom: 0;
}

/* admin/measurements birleşik ölçüm tablosu - Yaş/Boy/BKİ hesaplanan, salt-okunur
   hücreler (bkz. pages/admin/measurements.py render_measurement_fields_table) */
.am-readonly-cell {
  display: flex;
  align-items: center;
  height: 36px;
  padding: 0 12px;
  border-radius: 8px;
  background: #FAFAFA;
  color: var(--color-secondary);
  font-weight: 600;
  font-size: 0.85rem;
}

.mpk-link-output-text {
  height: auto;
  min-height: 36px;
  overflow-wrap: anywhere;
  word-break: break-all;
}

.mpk-link-copy-status {
  margin-top: 6px;
  font-size: 0.8rem;
  color: var(--color-primary);
  font-weight: 600;
}

.am-measurement-table {
  margin-bottom: var(--spacing-md);
}

/* Oncesi/sonrasi fotograf ozelligi (pages/admin/measurements.py) */
.am-photo-field {
  margin-bottom: var(--spacing-md);
}

.am-standalone-pair-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: var(--spacing-lg);
  margin-bottom: var(--spacing-md);
}

.am-standalone-pair-col {
  background: rgba(255, 255, 255, 0.55);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--spacing-md);
}

.am-standalone-pair-title {
  font-size: 0.78rem;
  font-weight: 800;
  color: var(--color-secondary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-bottom: var(--spacing-sm);
}

.am-photo-upload {
  border: 2px dashed var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--spacing-md);
  text-align: center;
  color: var(--color-mist);
  font-size: 0.85rem;
  cursor: pointer;
}

.am-photo-upload:hover {
  border-color: rgba(0, 191, 143, 0.5);
  background: rgba(0, 191, 143, 0.04);
}

.am-photo-preview-img {
  max-width: 160px;
  border-radius: var(--radius-sm);
  margin-top: var(--spacing-sm);
  display: block;
}

.am-compare-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--spacing-md);
  margin-top: var(--spacing-md);
}

.am-compare-photo {
  position: relative;
  border-radius: var(--radius-md);
  overflow: hidden;
  aspect-ratio: 3 / 4;
  background: #F5F5F5;
}

.am-compare-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.am-compare-photo-badge {
  position: absolute;
  top: 10px;
  left: 10px;
  background: rgba(0, 0, 0, 0.55);
  color: #FFFFFF;
  font-size: 0.7rem;
  font-weight: 700;
  padding: 3px 10px;
  border-radius: 999px;
}

.am-compare-meta {
  grid-column: 1 / 3;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 10px;
  background: var(--color-sage-tint);
  color: var(--color-primary-dark);
  border-radius: var(--radius-sm);
  padding: 12px 16px;
  font-size: 0.85rem;
  font-weight: 600;
}

.am-compare-delta-badge {
  font-size: 1.05rem;
  font-weight: 800;
}

.am-compare-download-btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: #FFFFFF;
  border: 1.5px solid var(--color-primary);
  color: var(--color-primary-dark);
  border-radius: 999px;
  padding: 8px 18px;
  font-weight: 700;
  font-size: 0.82rem;
  text-decoration: none;
}

.am-compare-download-btn:hover {
  background: var(--color-sage-tint);
}

.am-compare-align-hint {
  font-size: 0.82rem;
  color: var(--color-mist);
  margin-top: var(--spacing-md);
  margin-bottom: var(--spacing-sm);
}

.am-compare-align-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: var(--spacing-md);
  margin-bottom: var(--spacing-md);
}

.am-compare-final-row {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--spacing-sm);
}

.am-compare-final-img {
  max-width: 100%;
  width: 260px;
  border-radius: var(--radius-md);
  box-shadow: 0 10px 24px -10px rgba(20, 32, 26, 0.4);
}

.mpk-options-editor {
  min-width: 0;
}

.mpk-flavor-checklist {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.mpk-flavor-checklist .dash-options-list-option {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.82rem;
  color: var(--color-secondary);
  padding: 2px 0;
  cursor: pointer;
}

/* "Bileşenler" bölümü yanlışlıkla .field-group (max-width:400px, arama/filtre
   kutuları için tasarlanmış) class'ını kullanıyordu - tüm bileşen tablosunu
   400px'e sıkıştırıyordu. Bu, genişlik kısıtı olmayan kendi class'ı. */
.mpk-components-section {
  margin-bottom: var(--spacing-sm);
}

/* Yeni Paket Ekle / bilesen editoru icindeki soft-table'lar dar konteynerde
   sikismasin diye kendi min-width'lerini istiyor - varsayilan .soft-table-row
   560px isim alanini kirpiyordu. */
.mpk-components-table .soft-table-row,
.mpk-components-table .soft-table-header-row {
  min-width: 720px;
}

.mpk-form-header-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--spacing-sm);
  margin-bottom: var(--spacing-sm);
}

.mpk-form-header-row h3 {
  margin: 0;
}

.mpk-list-actions {
  display: flex;
  gap: 8px;
  flex-wrap: wrap;
}

.mpk-list-thumb {
  width: 56px;
  height: 56px;
  object-fit: cover;
  border-radius: var(--radius-sm);
  flex-shrink: 0;
}

/* ---- Paket Incele + Sec paneli (landing + /uyelik ortak) ---- */
.pkg-review-panel-backdrop {
  position: fixed;
  inset: 0;
  background: rgba(15, 23, 42, 0.25);
  opacity: 0;
  pointer-events: none;
  transition: opacity 0.2s ease;
  z-index: 90;
}

.pkg-review-panel-backdrop-open {
  opacity: 1;
  pointer-events: auto;
}

.pkg-review-panel {
  position: fixed;
  top: 0;
  right: 0;
  height: 100vh;
  width: 420px;
  max-width: 92vw;
  background: #FFFFFF;
  box-shadow: -12px 0 40px rgba(15, 23, 42, 0.15);
  padding: var(--spacing-lg);
  transform: translateX(100%);
  transition: transform 0.25s ease;
  z-index: 91;
  overflow-y: auto;
  box-sizing: border-box;
}

.pkg-review-panel-open {
  transform: translateX(0);
}

.pkg-review-summary {
  padding-bottom: var(--spacing-md);
  border-bottom: 1px solid var(--color-border);
  margin-bottom: var(--spacing-md);
}

.pkg-review-summary-title {
  margin: 0 0 var(--spacing-sm);
}

.pkg-review-summary-list {
  list-style: none;
  padding: 0;
  margin: 0 0 var(--spacing-sm);
  color: var(--color-secondary);
  font-size: 0.88rem;
}

.pkg-review-summary-list li {
  padding: 3px 0;
}

.pkg-review-summary-price {
  font-size: 1.3rem;
  font-weight: 700;
  color: var(--color-primary-dark);
}

.pkg-review-step {
  margin-bottom: var(--spacing-lg);
}

.pkg-review-step h5 {
  margin: 0 0 var(--spacing-sm);
  font-size: 0.85rem;
  text-transform: none;
  color: var(--color-secondary);
}

.pkg-review-empty {
  color: var(--color-mist);
  font-size: 0.85rem;
}

.pkg-review-flavor-row {
  margin-bottom: var(--spacing-md);
}

.pkg-review-flavor-row > label {
  display: block;
  font-size: 0.82rem;
  font-weight: 600;
  color: var(--color-secondary);
  margin-bottom: 6px;
}

/* Aroma secimi artik acilir bir Dropdown degil, hep-gorunur pill listesi -
   popover clipping/scroll sorunu (5 aroma girilse bile sadece 3'u gorunmesi)
   boylece tamamen ortadan kalkiyor. */
.pkg-review-flavor-radio {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.pkg-review-flavor-radio .dash-options-list-option {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 16px;
  border-radius: 999px;
  border: 1px solid var(--color-border);
  background-color: #FFFFFF;
  color: var(--color-charcoal);
  font-size: 0.85rem;
  cursor: pointer;
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.pkg-review-flavor-radio .dash-options-list-option.selected {
  background-color: var(--color-primary);
  border-color: var(--color-primary);
  color: var(--color-primary-dark);
}

.pkg-review-flavor-radio-input {
  position: absolute;
  opacity: 0;
  width: 0;
  height: 0;
}

.pkg-review-delivery-radio {
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin-bottom: var(--spacing-sm);
}

/* minmax(0, 1fr) - duz "1fr" aslinda minmax(auto, 1fr) demek, yani icerik
   (secili il/ilce'nin avatar+metin genisligi) hucrenin izin verdiginden
   genis olmak isteyince grid kendini buyutup karti tasiriyordu (klasik CSS
   Grid tuzagi). minmax(0, 1fr) track'in icerigin min-content boyutunun
   ALTINA da kucula bilmesine izin veriyor, dropdown'un kendi
   overflow:hidden/text-overflow:ellipsis'i gerisini hallediyor. */
.pkg-review-address-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
  gap: 8px;
  margin-bottom: 8px;
}
@media (max-width: 480px) {
  .pkg-review-address-grid { grid-template-columns: 1fr; }
}

.pkg-review-address-input {
  min-height: 70px;
}

.pkg-review-pickup-note {
  font-size: 0.85rem;
  color: var(--color-secondary);
  background: var(--color-paper);
  padding: var(--spacing-sm);
  border-radius: 14px;
  border: 1px solid var(--color-border);
}

.pkg-review-pickup-header {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 2px 2px 12px;
}

.pkg-review-pickup-icon {
  width: 34px;
  height: 34px;
  border-radius: 10px;
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #FFFFFF;
  background: linear-gradient(160deg, var(--color-primary), var(--color-primary-dark));
}

.pkg-review-pickup-icon svg {
  width: 16px;
  height: 16px;
}

.pkg-review-pickup-title {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding-top: 2px;
}

.pkg-review-pickup-title strong {
  font-size: 0.88rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.pkg-review-pickup-title span {
  font-size: 0.8rem;
  line-height: 1.5;
  color: var(--color-charcoal);
  opacity: 0.75;
}

.pkg-review-pickup-map {
  border-radius: 12px;
  overflow: hidden;
  border: 1px solid var(--color-border);
  background: #FFFFFF;
}

.pkg-review-pickup-map-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px 12px;
  border-bottom: 1px solid var(--color-border);
  font-size: 0.72rem;
  font-weight: 700;
  color: var(--color-secondary);
}

.pkg-review-pickup-map-link {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: var(--color-primary-dark);
  text-decoration: none;
}

.pkg-review-pickup-map-link:hover {
  text-decoration: underline;
}

.pkg-review-pickup-map-link svg {
  width: 11px;
  height: 11px;
}

.pkg-review-pickup-map-frame-link {
  display: block;
  position: relative;
}

.pkg-review-pickup-map-frame {
  display: block;
  width: 100%;
  height: 120px;
  border: 0;
  pointer-events: none;
  filter: grayscale(35%) contrast(1.05);
}

.pkg-picker-radio {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

.pkg-review-panel-content {
  display: flex;
  flex-direction: column;
  gap: var(--spacing-md);
  text-align: left;
}

/* Landing sayfasi kendi --lp-* marka kimligini kullaniyor (bkz. CLAUDE.md madde 4) -
   paylasilan .pkg-review-panel ana app'in --color-*/--glass-* tokenlariyla
   tasarlandigi icin, landing'de acildiginda burada --lp-* ile eziliyor. */
.landing-page .pkg-review-panel {
  background: var(--lp-pure-white);
}

.landing-page .pkg-review-summary {
  border-bottom-color: var(--lp-hairline);
}

.landing-page .pkg-review-summary-title,
.landing-page .pkg-review-step h5,
.landing-page .pkg-review-flavor-row > label {
  color: var(--lp-off-black);
}

.landing-page .pkg-review-summary-list {
  color: var(--lp-steel-gray);
}

.landing-page .pkg-review-summary-price {
  color: var(--lp-signal-blue);
}

.landing-page .pkg-review-flavor-radio .dash-options-list-option,
.landing-page .pkg-review-delivery-radio .dash-options-list-option {
  border-color: var(--lp-hairline);
  color: var(--lp-off-black);
}

.landing-page .pkg-review-flavor-radio .dash-options-list-option.selected,
.landing-page .pkg-review-delivery-radio .dash-options-list-option.selected {
  background-color: var(--lp-off-black);
  border-color: var(--lp-off-black);
  color: var(--lp-pure-white);
}

/* Global .dash-options-list-option:hover kurali (satir ~924) hover'da metni
   --color-charcoal'a zorluyor - secili+siyah arka planli lp pill'lerde bu,
   koyu metnin koyu arka planla karismasina (görünmez yazı) yol açıyordu. */
.landing-page .pkg-review-flavor-radio .dash-options-list-option.selected:hover,
.landing-page .pkg-review-delivery-radio .dash-options-list-option.selected:hover {
  color: var(--lp-pure-white) !important;
}

.landing-page .pkg-review-pickup-note {
  background: var(--lp-off-white);
  color: var(--lp-off-black);
}

.landing-page #lp-confirm-button {
  background: var(--lp-off-black);
  color: var(--lp-pure-white);
  border-radius: var(--lp-radius-button);
}

.landing-page #lp-confirm-button:hover {
  background: var(--lp-signal-blue);
}

@media (max-width: 992px) {
  .onboarding-page-split {
    flex-direction: column;
    gap: 30px;
    padding: 100px 16px 40px;
    align-items: center;
  }
  .report-col {
    max-width: 100%;
    width: 100%;
  }
  .onb-logo-link {
    align-self: center;
  }
  .onb-report-manifesto {
    text-align: center;
    align-items: center;
  }
  .onb-hero-badge {
    align-self: center;
  }
  .wizard-col {
    max-width: 100%;
  }

  .profile-report-card {
    padding: 20px;
    border-radius: 24px;
  }

  .mobile-matrix-header {
    display: flex;
    width: 100%;
  }

  .onb-report-card-title {
    display: none;
  }

  .matrix-container {
    display: none;
    margin-top: 14px;
  }

  .profile-report-card.expanded .matrix-container {
    display: flex;
  }
}

/* 0. adim (paket secimi) - pkg-review- ve pkg-picker-radio siniflari
   components/package_review_panel.py'de tanimli (degistirilmiyor, bkz. CLAUDE.md madde 19) -
   burada SADECE #onb-step-0 scope'unda cam kart estetigi uygulaniyor, global tanimlarina
   dokunulmuyor (baska sayfalardaki - orn. pages/membership.py slide-out paneli - kullanimini
   etkilememesi icin). Gercek DOM: dcc.RadioItems varsayilan Dash 4.4 render'i - option'lar
   `.dash-options-list-option` sinifiyla cikiyor (bkz. assets/theme.css satir ~9586/9670,
   ayni deseni .pkg-review-flavor-radio/.pkg-review-delivery-radio icin zaten kullaniyor). */
#onb-step-0 .pkg-picker-radio .dash-options-list-option {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 24px;
  border-radius: 22px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  background: rgba(255, 255, 255, 0.5);
  cursor: pointer;
  transition: all 0.25s cubic-bezier(0.4, 0, 0.2, 1);
  margin-bottom: 14px;
}

#onb-step-0 .pkg-picker-radio .dash-options-list-option:hover {
  background-color: #ffffff;
  border-color: var(--color-primary);
  transform: translateY(-2px);
}

#onb-step-0 .pkg-picker-radio .dash-options-list-option.selected {
  border-color: var(--color-primary);
  box-shadow: 0 15px 30px -10px rgba(0, 191, 143, 0.15), 0 0 0 4px rgba(0, 191, 143, 0.12);
  background: #ffffff;
}

#onb-step-0 .pkg-review-panel-content,
#onb-step-0 .pkg-review-step {
  background: rgba(255, 255, 255, 0.5);
  border: 1px solid rgba(0, 0, 0, 0.06);
  border-radius: 20px;
  padding: 20px;
  margin-top: 16px;
}

#onb-step-0 .pkg-review-summary {
  background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.4));
  border: 1px solid rgba(255, 255, 255, 0.7);
  border-radius: 20px;
  padding: 18px 24px;
}

#onb-step-0 .pkg-review-delivery-radio .dash-options-list-option {
  border-radius: 16px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  background: rgba(255, 255, 255, 0.4);
  padding: 16px;
  text-align: center;
  font-weight: 700;
}

#onb-step-0 .pkg-review-delivery-radio .dash-options-list-option.selected {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: #ffffff;
  box-shadow: 0 6px 15px rgba(0, 191, 143, 0.2);
}

#onb-step-0 .pkg-review-address-input {
  width: 100%;
  min-height: 80px;
  padding: 14px;
  border-radius: 16px;
  border: 1px solid rgba(0, 0, 0, 0.08);
  background: rgba(255, 255, 255, 0.6);
  font-size: 13px;
  outline: none;
  resize: none;
  box-sizing: border-box;
}

#onb-step-0 .pkg-review-address-input:focus {
  background: #ffffff;
  border-color: var(--color-primary);
}

/* ====================================================================
   404 sayfasi (pages/not_found_404.py) - onaylanan mockup'in birebir
   kod karsiligi. Kart yuzeyi .member-hero-dotgrid ile ayni teknik
   (koyu nokta, eliptik maske), aksiyon karolari gercek KPI bento
   karosuyla (.member-bento-tile) ayni siniflar/degerler, path-hint
   gercek info-chip diliyle (.mb-pkg-price-chip/.pf-status-badge).
   ==================================================================== */
.not-found-page {
  min-height: calc(100vh - 32px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px 0;
}

.nf-stage {
  width: 100%;
  max-width: 760px;
}

.nf-card {
  position: relative;
  background: var(--glass-bg);
  backdrop-filter: blur(20px) saturate(1.2);
  -webkit-backdrop-filter: blur(20px) saturate(1.2);
  border: 1px solid var(--glass-border);
  border-radius: 22px;
  box-shadow: var(--glass-shadow);
  padding: 40px 40px 168px;
  overflow: hidden;
}

.nf-card::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 0;
  background-image: radial-gradient(rgba(17, 20, 15, 0.18) 1px, transparent 1.5px);
  background-size: 16px 16px;
  -webkit-mask-image: radial-gradient(ellipse 90% 80% at 50% 45%, black 45%, transparent 88%);
          mask-image: radial-gradient(ellipse 90% 80% at 50% 45%, black 45%, transparent 88%);
  pointer-events: none;
}

.nf-route {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
}

.nf-content {
  position: relative;
  z-index: 1;
  display: grid;
  gap: 18px;
  max-width: 480px;
}

.nf-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  width: fit-content;
  padding: 6px 13px 6px 10px;
  border-radius: 999px;
  background: #D8F5C8;
  color: var(--color-primary-dark);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.nf-eyebrow-icon-mask {
  width: 13px;
  height: 13px;
  background-color: var(--color-primary-dark);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.nf-code {
  margin: 0;
  font-size: 84px;
  line-height: 0.9;
  font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--color-secondary);
}

.nf-title {
  margin: 0;
  font-size: 22px;
  font-weight: 700;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

.nf-lede {
  margin: 0;
  font-family: "Inter", sans-serif;
  font-size: 14.5px;
  line-height: 1.65;
  color: var(--color-charcoal);
  max-width: 46ch;
}

.nf-path-hint {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: #FFFFFF;
  border: 1px solid var(--glass-border);
  padding: 6px 8px 6px 12px;
  border-radius: 999px;
  width: fit-content;
  max-width: 100%;
}

.nf-path-hint-icon-mask {
  width: 13px;
  height: 13px;
  flex-shrink: 0;
  background-color: var(--color-mist, #6B7268);
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.nf-path-hint code {
  font-family: "Inter", ui-monospace, monospace;
  font-size: 12.5px;
  color: var(--color-secondary);
  font-weight: 600;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.nf-path-hint-status {
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.02em;
  color: #FFFFFF;
  background: linear-gradient(135deg, #FDA4AF, var(--color-accent-wine));
  padding: 4px 11px;
  border-radius: 999px;
  flex-shrink: 0;
}

.nf-actions {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 10px;
  margin-top: 4px;
}

.nf-act-tile {
  border-radius: 16px;
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 14px;
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  border: none;
  font-family: inherit;
  text-align: left;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.nf-act-tile:hover {
  transform: translateY(-2px);
  box-shadow: 0 10px 20px -10px rgba(20, 32, 26, 0.35);
}

.nf-act-tile:focus-visible {
  outline: 2px solid var(--color-primary-dark);
  outline-offset: 2px;
}

.nf-act-tile.t4 { background: #D8F5C8; }
.nf-act-tile.t1 { background: #FFE3B0; }

.nf-act-icon {
  position: relative;
  width: 36px;
  height: 36px;
  border-radius: 30%;
  flex-shrink: 0;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -6px 9px rgba(0, 0, 0, 0.14),
    0 4px 10px -6px rgba(20, 32, 26, 0.35);
}

.nf-act-icon.grad-primary { background: linear-gradient(160deg, #17E6AC, var(--color-primary-dark)); }
.nf-act-icon.grad-blue { background: linear-gradient(160deg, #93C5FD, #3B82F6); }

.nf-act-icon-mask {
  position: relative;
  z-index: 1;
  width: 17px;
  height: 17px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  transition: transform 0.2s ease;
  -webkit-mask-size: contain;
  mask-size: contain;
  -webkit-mask-repeat: no-repeat;
  mask-repeat: no-repeat;
  -webkit-mask-position: center;
  mask-position: center;
}

.nf-act-tile:hover .nf-act-icon-mask {
  transform: scale(1.15) rotate(-6deg);
}

.nf-act-title {
  font-size: 13px;
  font-weight: 800;
  color: #16201A;
  line-height: 1.2;
}

.nf-act-sub {
  font-size: 10px;
  color: #384038;
  margin-top: 1px;
}

.nf-trail {
  position: absolute;
  z-index: 1;
  left: 0;
  right: 0;
  bottom: 26px;
  height: 118px;
  pointer-events: none;
}

.nf-trail svg { width: 100%; height: 100%; }
.nf-foot-fill { fill: var(--color-primary-dark); opacity: 0.16; }
.nf-foot-fill.is-last { opacity: 0.4; }
.nf-foot-groove { fill: #FFFFFF; opacity: 0.6; }

@media (max-width: 640px) {
  .nf-card { padding: 28px 22px 130px; border-radius: 20px; }
  .nf-code { font-size: 58px; }
  .nf-title { font-size: 18.5px; }
  .nf-lede { font-size: 13.5px; }
  .nf-actions { grid-template-columns: 1fr; }
  .nf-trail { height: 96px; bottom: 20px; }
}

@media (prefers-reduced-motion: no-preference) {
  .nf-dot-travel { animation: nf-travel 4.5s ease-in-out infinite; }
}

@keyframes nf-travel {
  0%, 8% { offset-distance: 0%; }
  55%, 100% { offset-distance: 62%; }
}

/* ---- Ürün Kütüphanesi: /admin/urunler + /admin/urun-paketleri picker (2026-08-25) ---- */
/* .pf-card'in varsayilan `overflow:hidden`'i, "+ Urun Ekle" picker popover'ini
   (position:absolute, kartin altina tasan) gorunmez kilip "kayboluyor" izlenimi
   yaratiyordu - .meal-plans-page'deki ayni sorunun ayni cozumu (satir ~4643). */
.admin-membership-packages-page .pf-card { overflow: visible; }

/* ---- Hizmet Kütüphanesi: /admin/hizmetler + /admin/hizmet-paketleri picker (2026-08-26) ---- */
/* Ayni sorun ve ayni cozum: "+ Hizmet Ekle" picker popover'ini gorunur kilmak icin. */
.admin-service-packages-page .pf-card { overflow: visible; }

/* Ürünler/Ürün detay kartlarinin arka plani, ustteki bento istatistik
   satirindaki (render_member_bento_grid, big_first=False) 2. ve 3. karonun
   (.member-bento-tile.t2/.t3) renkleriyle birebir esleniyor - kullanicinin
   istegi (2026-08-25): "Urunler" = TOPLAM VARYANT karosunun rengi (t2),
   "Urun" detay karti = KULLANILMAYAN VARYANT karosunun rengi (t3). */
.admin-products-page .prc-card-list { background: #E9F5A8; }
.admin-products-page .prc-card-detail { background: #C3DDF6; }

/* /admin/urunler'deki ayni t2/t3 esleme, /admin/urun-paketleri'nin
   Bilesenler/Musteri Onizlemesi ikilisine (2026-08-25). Sayfadaki TUM
   kartlar bento t1-t4 paletini donguleyerek boyaniyor - kullanicinin
   istegi (2026-08-25): "bento kartlarinin renklerini kullan". */
.admin-membership-packages-page .mpk-card-new { background: #FFE3B0; }
.admin-membership-packages-page .mpk-card-components { background: #E9F5A8; }
.admin-membership-packages-page .mpk-card-preview { background: #C3DDF6; }
.admin-membership-packages-page .mpk-card-list { background: #D8F5C8; }

/* "Mevcut Paketler"/"Mevcut Hizmet Paketleri" listesi - varsayilan 560px
   satir min-width'i, "Bilesenler" kolonundaki cok satirli urun isimli
   chip'lerle bir arada mobilde kullanilamaz kadar sikisiyordu (kullanici
   raporu: Bilesenler basligi ve chip metinleri ekran kenarindan kirpiliyordu,
   2026-08-28). .soft-table-card zaten overflow-x:auto - satirlarin gercek
   icerigine uygun daha genis bir min-width vererek yatay kaydirma
   kullanilabilir hale getiriliyor (kesilme degil, kaydirma). */
.admin-membership-packages-page .mpk-card-list .soft-table-row,
.admin-membership-packages-page .mpk-card-list .soft-table-header-row,
.admin-service-packages-page .svc-card-list .soft-table-row,
.admin-service-packages-page .svc-card-list .soft-table-header-row {
  min-width: 760px;
}

/* .grp-chip (site geneli "hero pill" dili) tam pill (999px) kose yaricapiyla
   TEK SATIRLIK kisa etiketler icin tasarlandi - burada urun isimleri uzun
   oldugunda chip 2-3 satira sarmaliyor, 999px yaricap o zaman kapsulun
   uclarini asiri yuvarlayip "blob" gibi bir bicime sokuyordu (ekran goruntusu
   raporu). Sadece bu listedeki chip'lerde daha olculu bir kose yaricapina
   ceviriliyor - .grp-chip'in diger kullanimlari (kisa etiketler) etkilenmiyor. */
.mpk-list-chip-row .grp-chip {
  border-radius: 12px;
  white-space: normal;
  text-align: left;
  line-height: 1.3;
}

/* /admin/hizmet-paketleri - ayni bento t1-t4 donguleme mantigi. */
.admin-service-packages-page .svc-card-new { background: #FFE3B0; }
.admin-service-packages-page .svc-card-list { background: #E9F5A8; }
.admin-service-packages-page .svc-card-payment { background: #C3DDF6; }
.admin-service-packages-page .svc-card-output { background: #D8F5C8; }

/* /admin/hizmetler + /admin/hizmet-paketleri (2026-08-26) - Urun Kutuphanesi'yle
   ayni gorsel dil, aroma alani olmadigi icin sadelestirilmis tek-satir varyant
   karti. */
.admin-services-page .hiz-card-list { background: #E9F5A8; }
.admin-services-page .hiz-card-detail { background: #C3DDF6; }

.variant-row-live-simple {
  display: grid;
  grid-template-columns: 1.6fr 1fr auto auto;
  gap: 12px;
  align-items: center;
  padding: 12px 14px;
}
.variant-row-live-simple + .variant-row-live-simple { border-top: 1px dashed var(--color-border); }
.variant-row-live-simple .v-name, .variant-row-live-simple .v-price { width: 100%; }

/* /admin/hizmet-paketleri - Bilesenler/Musteri Onizlemesi ikilisi, urun-paketleri
   ile ayni t2/t3 esleme. .svc-card-new/-payment/-output renkleri degismiyor. */
.admin-service-packages-page .svc-card-components { background: #E9F5A8; }
.admin-service-packages-page .svc-card-preview { background: #C3DDF6; }
.admin-service-packages-page .svc-card-list { background: #D8F5C8; }

/* /admin/site-settings - tek kart, bento paletinden t3 (kullanici t1
   turuncuyu begenmedi, 2026-08-25). */
.admin-site-settings-page .ss-card-countdown { background: #C3DDF6; }

/* Renkli kartlarin icindeki duz Soft Tablo'lar (colorful=True OLMAYANLAR -
   orn. "Uyeye Odeme Baglantisi Olustur"/"Olusan Baglanti") varsayilan olarak
   hep opak beyaz (#FFFFFF/#FAFAFA) - kart artik pastel renkliyken bu beyaz
   kutu gibi "kopup" duruyordu. Saydam beyaza cevirip kartin kendi rengi
   arkadan gorunsun diye (2026-08-25). */
.admin-membership-packages-page :is(.mpk-card-new, .mpk-card-components, .mpk-card-preview, .mpk-card-list) .soft-table-card:not(.mp-colorful),
.admin-service-packages-page :is(.svc-card-new, .svc-card-list, .svc-card-payment, .svc-card-output, .svc-card-components, .svc-card-preview) .soft-table-card:not(.mp-colorful) {
  background: rgba(255, 255, 255, 0.5);
}
.admin-membership-packages-page :is(.mpk-card-new, .mpk-card-components, .mpk-card-preview, .mpk-card-list) .soft-table-header-row:not(.mp-colorful),
.admin-service-packages-page :is(.svc-card-new, .svc-card-list, .svc-card-payment, .svc-card-output, .svc-card-components, .svc-card-preview) .soft-table-header-row:not(.mp-colorful) {
  background: rgba(255, 255, 255, 0.35);
}

/* "Üyeye Odeme Baglantisi Olustur"/"Olusan Baglanti" (components/package_payment_link.py)
   Soft Tablo'yu bir FORM icin yeniden kullaniyor (2 dropdown + buton /
   metin + "Kopyala" butonu) - varsayilan 560px satir min-width'i mobilde
   bu kisa formu bile gereksiz yere yatay kaydirmali yapiyordu (kullanici
   ekran goruntusu raporu, 2026-09-04). Diger Soft Tablo/Mercan Panel veri
   listeleri (Mevcut Paketler, Uye/Coach listesi vb.) icin yatay kaydirma
   halen bilincli/istenen davranis - sadece bu iki form burada min-width'siz
   tek sutuna indiriliyor. Baslik satiri (Uye/Paket/"") dropdown'larin kendi
   placeholder'i ("Uye secin"/"Paket secin") zaten etiket gorevi gordugu
   icin mobilde gizleniyor - stack edilince baslik ile alan hizasi bozulurdu. */
@media (max-width: 640px) {
  .mpk-link-form .soft-table-header-row,
  .mpk-link-output .soft-table-header-row {
    display: none;
  }

  .mpk-link-form .soft-table-row,
  .mpk-link-output .soft-table-row {
    min-width: 0;
    grid-template-columns: 1fr !important;
    gap: 10px;
  }

  .mpk-link-form .soft-table-card::after,
  .mpk-link-output .soft-table-card::after {
    display: none;
  }
}

.prc-grid {
  display: grid;
  grid-template-columns: 0.8fr 1.2fr;
  gap: 20px;
  align-items: start;
}
@media (max-width: 900px) { .prc-grid { grid-template-columns: 1fr; } }

.mpk-builder-grid {
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  gap: 20px;
  align-items: start;
}
@media (max-width: 900px) { .mpk-builder-grid { grid-template-columns: 1fr; } }

.prc-search-input {
  width: 100%;
  margin-bottom: 12px;
}

.picker-anchor { position: relative; display: inline-block; margin-top: 14px; }
.picker {
  position: absolute; top: calc(100% + 10px); left: 0; width: 340px; z-index: 5;
  background: #FFFFFF; border: 1px solid var(--color-border); border-radius: 14px;
  box-shadow: var(--glass-shadow-hover);
}
.picker-search { padding: 12px 14px; border-bottom: 1px solid var(--color-border); }
.picker-search input { width: 100%; }
.picker-list { max-height: 260px; overflow-y: auto; }
.picker-item { display: flex; align-items: center; gap: 10px; padding: 10px 14px; cursor: pointer; }
.picker-item:hover { background: var(--color-sage-tint); }
.picker-item-text strong { display: block; font-size: 0.83rem; font-weight: 700; }
.picker-item-text span { display: block; font-size: 0.72rem; color: var(--color-mist); }
.picker-quickadd {
  padding: 11px 14px; border-top: 1px solid var(--color-border); background: var(--color-paper);
  font-size: 0.8rem; color: var(--color-primary-dark); font-weight: 700; cursor: pointer;
}

/* mpk-group-header icindeki "Urunu duzenle" dcc.Link'i (/admin/urunler'e gider)
   - hicbir global `a{}` reset yok, tarayici varsayilanina (mavi/altcizili)
   dusmesin diye kucuk, notr bir link stili. */
.group-source {
  font-size: 0.72rem;
  font-weight: 700;
  color: var(--color-primary-dark);
  text-decoration: none;
  white-space: nowrap;
}
.group-source:hover {
  text-decoration: underline;
}

/* "+ Urun Ekle" picker toggle butonu - genel `button{}` reset'i zaten pill
   sekli/golgeyi veriyor (theme.css basi), burada sadece pf-gradient-btn
   ailesiyle ayni yesil gradient dolguyu ve picker-anchor icinde dogru
   konumu saglıyoruz. */
.add-group-btn {
  background: linear-gradient(135deg, #17E6AC, var(--color-primary-dark));
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.variant-row-live {
  display: grid;
  grid-template-columns: 1.4fr 0.9fr auto auto;
  grid-template-areas:
    "name  price  status del"
    "tags  tags   tags   tags";
  column-gap: 12px;
  row-gap: 8px;
  align-items: center;
  padding: 12px 14px;
}
.variant-row-live + .variant-row-live { border-top: 1px dashed var(--color-border); }
.variant-row-live .v-name { grid-area: name; width: 100%; }
.variant-row-live .v-price { grid-area: price; width: 100%; }
.variant-row-live .row-status { grid-area: status; }
.variant-row-live .row-del { grid-area: del; }
.variant-row-live .tag-input { grid-area: tags; }
.tag-input {
  display: flex; flex-wrap: wrap; gap: 7px; align-items: center;
  background: rgba(255, 255, 255, 0.55);
  border: 1px solid rgba(15, 23, 42, 0.1);
  border-radius: 12px; padding: 9px 11px; min-height: 40px;
  width: 100%;
}
@media (max-width: 640px) {
  .variant-row-live {
    grid-template-columns: 1fr 1fr;
    grid-template-areas:
      "name  name"
      "price status"
      "tags  tags"
      "del   del";
  }
  .variant-row-live .row-del { justify-self: end; }
}
/* "5 TOPLAM VARYANT" bento karosuyla (.member-bento-tile.t2) ayni renk -
   kullanicinin istegi (2026-08-25). */
.ftag-x {
  display: inline-flex; align-items: center; gap: 7px;
  font-size: 0.78rem; font-weight: 700; color: var(--color-primary-dark);
  background: #E9F5A8;
  border: 1px solid rgba(0, 61, 51, 0.18);
  border-radius: 999px; padding: 6px 8px 6px 13px;
  box-shadow: 0 2px 6px rgba(0, 61, 51, 0.08);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.ftag-x:hover { transform: translateY(-1px); box-shadow: 0 4px 10px rgba(0, 61, 51, 0.14); }
.ftag-x i {
  font-style: normal; display: inline-flex; align-items: center; justify-content: center;
  width: 17px; height: 17px; border-radius: 50%; flex-shrink: 0;
  background: rgba(0, 61, 51, 0.14); color: var(--color-primary-dark);
  font-size: 0.62rem; line-height: 1; cursor: pointer;
  transition: background 0.15s ease, color 0.15s ease;
}
.ftag-x i:hover { background: rgba(225, 29, 72, 0.18); color: var(--color-accent-wine); }
.tag-add { border: none; background: transparent; font-size: 0.76rem; flex: 1; min-width: 110px; outline: none; }
.row-status { font-size: 0.72rem; font-weight: 700; white-space: nowrap; color: var(--color-primary-dark); }
.row-del { color: var(--color-mist); cursor: pointer; background: none; border: none; }

.mpk-item-row {
  display: grid; grid-template-columns: 1.3fr 1.8fr 0.6fr auto;
  gap: 10px; align-items: center; padding: 9px 14px;
}
.mpk-item-row-label { display: flex; flex-direction: column; gap: 2px; }
.mpk-price-zero-warning {
  font-size: 0.7rem; font-weight: 700; color: var(--color-warning);
  background: var(--color-warning-tint);
  border-radius: 6px; padding: 2px 7px; width: fit-content;
}
.mpk-item-row + .mpk-item-row { border-top: 1px dashed var(--color-border); }
.mpk-item-qty-input { width: 56px; }
.flavor-tags { display: flex; flex-wrap: wrap; gap: 5px; }
.ftag {
  font-size: 0.76rem; font-weight: 700; color: var(--color-primary-dark);
  background: #E9F5A8;
  border: 1px solid rgba(0, 61, 51, 0.18);
  border-radius: 999px; padding: 5px 12px;
}

/* ---- Islem Logu Detay Paneli (Mercan Panel bento kurallari, CLAUDE.md madde 26) ----
   pf-icon-idle: madde 26'da spec edilmis ("kart basligindaki ikon ... idle'da
   kendiliginden hafifce sallanip buyuyen surekli animasyon") ama "mockup, henuz
   production kodunda degil" denmisti - burasi ilk gercek kullanim. */

@keyframes pf-icon-idle-sway {
  0%, 100% { transform: rotate(-4deg) scale(1); }
  50% { transform: rotate(4deg) scale(1.05); }
}
.pf-icon-idle { animation: pf-icon-idle-sway 3.2s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) {
  .pf-icon-idle { animation: none; }
}

.aud-clickable-row { cursor: pointer; }

.aud-note-cell {
  display: flex; align-items: center; gap: 6px; min-width: 0;
  font-size: 0.85rem; color: var(--color-mist);
}
.aud-note-text { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0; }
.aud-expand-hint {
  display: flex; align-items: center; gap: 3px; flex-shrink: 0;
  font-size: 0.66rem; font-weight: 800; letter-spacing: 0.02em;
  color: #FFFFFF; background: var(--color-primary-dark);
  padding: 4px 9px; border-radius: 999px;
  white-space: nowrap; transition: all 0.15s ease;
}
.aud-clickable-row:hover .aud-expand-hint,
.aud-clickable-row:focus-visible .aud-expand-hint {
  background: var(--color-primary); transform: translateX(2px);
}
.aud-expand-hint-icon { width: 11px; height: 11px; flex-shrink: 0; }

.aud-detail-overlay {
  position: fixed; inset: 0; z-index: 1200;
  background: rgba(11, 20, 17, 0.46);
  display: flex; align-items: flex-start; justify-content: center;
  padding: 8vh 16px 40px;
}

.aud-detail-modal {
  background: #FFFFFF;
  border-radius: 18px;
  box-shadow: 0 30px 60px -12px rgba(0, 25, 20, 0.35), 0 10px 24px -8px rgba(0, 25, 20, 0.2);
  width: 100%; max-width: 560px; max-height: 78vh; overflow: hidden;
  display: flex; flex-direction: column;
}

.aud-detail-head {
  background: linear-gradient(90deg, #5FE0E8, #1EC1CB 55%, #0E8A92 100%);
  padding: 18px 22px;
  display: flex; align-items: center; gap: 14px;
}

/* Ayni gradient+gloss squircle dili (.member-bento-icon-big ile ayni), ama satir
   ikonlarindan (teal ustunde .mb-pkg-bicon) BILINCLI olarak farkli renk ailesi
   (mercan/pembe) - vurgu/dikkat cekmesi icin (madde 26). */
.aud-detail-head-icon {
  position: relative;
  width: 42px; height: 42px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  border-radius: 30%; overflow: hidden;
  background: linear-gradient(160deg, #FF9F7A, #EF5DA8);
  box-shadow:
    inset 0 1.5px 1.5px rgba(255, 255, 255, 0.55),
    inset 0 -8px 12px rgba(0, 0, 0, 0.14),
    0 6px 14px -7px rgba(20, 32, 26, 0.4);
}

.aud-detail-head-icon::before {
  content: "";
  position: absolute; top: -30%; left: -10%; width: 120%; height: 65%;
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.35), rgba(255, 255, 255, 0));
  border-radius: 50%;
  pointer-events: none;
}

.aud-detail-head-icon-mask {
  position: relative; z-index: 1;
  width: 20px; height: 20px;
  background-color: #FFFFFF;
  filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.18));
  -webkit-mask-size: contain; mask-size: contain;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
}

.aud-detail-head-title { flex: 1; min-width: 0; color: #06302E; }
.aud-detail-head-eyebrow { font-size: 0.66rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; opacity: 0.75; }
.aud-detail-head-title h3 { font-size: 16px; margin: 2px 0 0; font-weight: 700; }

.aud-detail-close {
  width: 30px; height: 30px; border-radius: 8px; border: none; cursor: pointer;
  background: rgba(255, 255, 255, 0.5); color: #06302E; font-size: 15px; line-height: 1;
  display: flex; align-items: center; justify-content: center; flex-shrink: 0;
}
.aud-detail-close:hover { background: rgba(255, 255, 255, 0.75); }

.aud-detail-meta {
  padding: 12px 22px; font-size: 13px; font-weight: 700; color: var(--color-secondary);
  border-bottom: 1px solid var(--color-border);
}

.aud-detail-body { padding: 6px 0; overflow-y: auto; }

.aud-detail-item {
  margin: 8px 14px; padding: 12px 14px; border-radius: 12px;
  background: var(--mp-tint);
}
.aud-detail-item-head { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.aud-detail-field { font-size: 0.72rem; font-weight: 800; letter-spacing: 0.03em; text-transform: uppercase; }

.aud-detail-values { display: flex; align-items: flex-start; gap: 8px; font-size: 13px; }
.aud-detail-value {
  flex: 1; min-width: 0; padding: 7px 10px; border-radius: 8px;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 12.5px; line-height: 1.5;
  word-break: break-all; background: rgba(255, 255, 255, 0.6);
}
.aud-detail-value-old { text-decoration: line-through; text-decoration-color: rgba(225, 29, 72, 0.5); opacity: 0.75; }
.aud-detail-value-new { font-weight: 600; }
.aud-detail-arrow { padding-top: 8px; opacity: 0.5; flex-shrink: 0; }

/* Yasal belge sayfalari (/legal/<slug>) - herkese acik, oturum gerektirmiyor */
.legal-page { max-width: 900px; margin: 0 auto; padding: 40px 24px 80px; font-family: inherit; }
.legal-page-nav { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 28px; }
.legal-nav-link {
  font-size: 13px; font-weight: 600; padding: 8px 14px; border-radius: 999px;
  background: #fff; border: 1px solid rgba(15, 23, 42, 0.08); color: var(--color-text-muted, #64748B);
  text-decoration: none;
}
.legal-nav-link.active { background: var(--color-primary, #00BF8F); color: #fff; border-color: transparent; }
.legal-page-body { background: #fff; border-radius: 20px; padding: 36px 40px; box-shadow: 0 8px 24px rgba(15, 23, 42, 0.06); }
.legal-page-body h1 { font-size: 24px; margin-bottom: 20px; }
.legal-page-text {
  white-space: pre-wrap; word-wrap: break-word; font-family: inherit; font-size: 15px;
  line-height: 1.7; color: #1F2937;
}

/* Onboarding - yasal onay checkbox'lari (KVKK ayri riza kurali, 2026/347) */
.onb-legal-consents { display: flex; flex-direction: column; gap: 10px; margin-top: 8px; }
.onb-consent-row { display: flex; align-items: flex-start; gap: 10px; flex-wrap: wrap; font-size: 13px; }
.onb-consent-row .dash-checklist { display: inline-block; }
.onb-consent-link { font-size: 12px; color: var(--color-primary, #00BF8F); text-decoration: underline; white-space: nowrap; }

/* ---- Uye akilli dock (anahtar: MEMBER_REDESIGN_USERS) ---- */
.navbar-icon-droplet { -webkit-mask-image: url(/assets/icons/droplet.svg); mask-image: url(/assets/icons/droplet.svg); }
.navbar-icon-camera { -webkit-mask-image: url(/assets/icons/camera.svg); mask-image: url(/assets/icons/camera.svg); }
.navbar-icon-check { -webkit-mask-image: url(/assets/icons/check.svg); mask-image: url(/assets/icons/check.svg); }

.smart-dock { display: none; }

@media (max-width: 991px) {
  .dock-bottom.dock-smart {
    background: #FFFFFF;
    border: none;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: 0 14px 30px -10px rgba(17, 20, 15, 0.3);
    border-radius: 24px;
    padding: 8px 8px 10px;
  }
  .dock-bottom.dock-smart::before { display: none; }
  .dock-smart .dock-item { color: #7C857F; box-shadow: none; margin-bottom: 0; transform: none; }
  .dock-smart .dock-item:hover { box-shadow: none; transform: none; }
  .dock-smart .dock-item .dock-item-icon { width: 22px; height: 22px; }
  .dock-smart .dock-item::before {
    content: "";
    position: absolute;
    top: 2px;
    left: 50%;
    width: 44px;
    height: 32px;
    margin-left: -22px;
    border-radius: 11px;
    background: transparent;
    z-index: -1;
  }
  .dock-smart #dock-link-dashboard { color: #0E7C5F; }
  .dock-smart #dock-link-appointments { color: #BE185D; }
  .dock-smart #dock-link-meal-plan { color: #E8870B; }
  .dock-smart #dock-link-dashboard.active::before { background: #DDF5EC; }
  .dock-smart #dock-link-appointments.active::before { background: #FBD9E6; }
  .dock-smart #dock-link-meal-plan.active::before { background: #FFE3B0; }
  .dock-smart .dock-more-btn.active::before { background: #EEF1EA; }
  .dock-smart .dock-more-btn.active { color: #4A5547; }
  .dock-smart .dock-item.active .dock-item-label { color: #003D33; }

  .dock-smart .smart-dock { display: flex; flex: 0 0 auto; margin: 0 4px; }
  .smart-fab {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 4px;
    margin-top: -40px;
    padding: 0;
    border: none;
    background: none;
    font: inherit;
    font-size: 10.5px;
    font-weight: 800;
    color: #003D33;
    cursor: pointer;
  }
  .smart-fab-btn {
    position: relative;
    width: 62px;
    height: 62px;
    border-radius: 21px;
    border: 4px solid #FFFFFF;
    background: var(--task-c, #00BF8F);
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 10px 22px -8px rgba(0, 0, 0, 0.45);
    transition: background-color 0.45s ease;
  }
  /* halka: kalan sure */
  .smart-fab-btn::before {
    content: "";
    position: absolute;
    inset: -9px;
    border-radius: 26px;
    padding: 3px;
    background: conic-gradient(var(--task-c, #00BF8F) calc(var(--task-p, 1) * 360deg), rgba(0, 0, 0, 0.07) 0);
    -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
    -webkit-mask-composite: xor;
    mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
    pointer-events: none;
  }
  .smart-fab .smart-icon { width: 26px; height: 26px; background-color: var(--task-ink, #003D33); }
  .smart-fab-dot {
    display: none;
    position: absolute;
    top: -6px;
    right: -6px;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: #E11D48;
    border: 3px solid #FFFFFF;
    animation: smartDot 2s ease-in-out infinite;
  }
  #app-dock-bottom.has-dot:not(.cap-open) .smart-fab-dot { display: block; }
  @keyframes smartDot { 50% { transform: scale(1.25); } }

  .smart-cap {
    position: absolute;
    left: 6px;
    right: 6px;
    bottom: calc(100% + 58px);
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 12px 14px;
    border-radius: 22px;
    background: var(--task-c, #00BF8F);
    color: var(--task-ink, #003D33);
    box-shadow: 0 18px 30px -14px rgba(17, 20, 15, 0.45);
    transform-origin: 50% 130%;
    transform: translateY(14px) scale(0.4);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: transform 0.45s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s ease, visibility 0s linear 0.45s;
  }
  .smart-cap::after {
    content: "";
    position: absolute;
    left: 50%;
    bottom: -7px;
    margin-left: -7px;
    border: 7px solid transparent;
    border-bottom: 0;
    border-top-color: var(--task-c, #00BF8F);
  }
  #app-dock-bottom.cap-open .smart-cap { transform: none; opacity: 1; visibility: visible; pointer-events: auto; transition-delay: 0s; }
  .smart-cap-icon-wrap {
    width: 40px;
    height: 40px;
    border-radius: 12px;
    background: rgba(255, 255, 255, 0.22);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
  }
  .smart-cap .smart-icon { width: 20px; height: 20px; background-color: var(--task-ink, #003D33); }
  .smart-cap-text { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
  .smart-cap-title { font-size: 11.5px; font-weight: 700; opacity: 0.85; }
  .smart-cap-sub { font-size: 15.5px; font-weight: 800; }
  .smart-cap-go {
    border: none;
    border-radius: 999px;
    padding: 9px 14px;
    background: #FFFFFF;
    color: #003D33;
    font: inherit;
    font-size: 13px;
    font-weight: 800;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
  }
  .smart-dock.act-link .smart-cap-done,
  .smart-dock.act-done .smart-cap-link { display: none; }
  .smart-cap-timer {
    position: absolute;
    left: 16px;
    right: 16px;
    bottom: 6px;
    height: 3px;
    border-radius: 2px;
    background: rgba(255, 255, 255, 0.3);
    overflow: hidden;
    display: none;
  }
  .smart-cap-timer::after {
    content: "";
    display: block;
    height: 100%;
    background: var(--task-ink, #003D33);
    transform-origin: left;
  }
  #app-dock-bottom.cap-open:not(.cap-manual) .smart-cap-timer { display: block; }
  #app-dock-bottom.cap-open:not(.cap-manual) .smart-cap-timer::after { animation: smartTimer 3.2s linear forwards; }
  @keyframes smartTimer { from { transform: scaleX(1); } to { transform: scaleX(0); } }
  .smart-fab-icon-swap { animation: smartSwap 0.5s cubic-bezier(0.16, 1, 0.3, 1); }
  @keyframes smartSwap { from { transform: scale(0.5) rotate(-30deg); opacity: 0; } }

  html.kb-open .dock-bottom.dock-smart { display: none; }

  @media (prefers-reduced-motion: reduce) {
    .smart-fab-dot, .smart-fab-icon-swap, #app-dock-bottom.cap-open:not(.cap-manual) .smart-cap-timer::after { animation: none; }
    .smart-cap, .smart-fab-btn { transition: none; }
  }
}

@media (max-height: 500px) and (orientation: landscape) {
  .smart-fab { margin-top: -18px; }
  .smart-cap { bottom: calc(100% + 34px); }
  .smart-fab-btn { width: 44px; height: 44px; border-radius: 15px; }
  .smart-fab-label { display: none; }
}

/* Sozlesme kopyalari (admin) */
.cc-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; padding: 6px 0; }
.cc-label { flex: 1 1 220px; }
.cc-link { font-weight: 600; text-decoration: underline; color: inherit; }
.cc-btn { padding: 6px 14px; font-size: 13px; }

/* Sozlesme okuma katmani (eski paket sayfalari) */
.lgr { position: fixed; inset: 0; z-index: 10000; display: none; align-items: center; justify-content: center; }
.lgr--open { display: flex; }
.lgr .lgr-bg { position: absolute; inset: 0; border: 0; border-radius: 0; box-shadow: none; padding: 0; margin: 0; background: rgba(17, 20, 15, .5); cursor: pointer; }
.lgr-box { position: relative; display: flex; flex-direction: column; width: 640px; max-width: calc(100% - 24px); max-height: 86%; background: #fff; color: #1B211D; border-radius: 18px; padding: 18px; gap: 12px; box-sizing: border-box; text-align: left; }
.lgr-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.lgr-title { font-weight: 800; font-size: 18px; line-height: 1.2; overflow-wrap: anywhere; }
.lgr-x { flex: none; height: 38px; padding: 0 16px; border: 0; border-radius: 10px; background: #F3F5F0; color: inherit; font: inherit; font-weight: 700; cursor: pointer; }
.lgr-text { flex: 1; min-height: 0; overflow-y: auto; padding: 12px; border-radius: 12px; background: #F8F9F6; white-space: pre-wrap; overflow-wrap: anywhere; font-size: 13.5px; line-height: 1.6; }
.lgr-link { display: inline; padding: 0; margin: 0; border: 0; border-radius: 0; box-shadow: none; background: none; font: inherit; text-decoration: underline; cursor: pointer; min-height: 0; color: inherit; }
body:has(.lgr--open) { overflow: hidden; }

/* hesap silme sayfasi */
.legal-page-body h2 { font-size: 18px; margin: 24px 0 10px; }
.legal-page-body ol { padding-left: 20px; line-height: 1.6; }
.del-page-done { padding: 12px 16px; border-radius: 12px; background: #D8F5C8; color: #0E3B24; }
.del-page-table { width: 100%; border-collapse: collapse; font-size: 14px; margin: 8px 0 16px; }
.del-page-table th, .del-page-table td { text-align: left; padding: 9px 10px; border-bottom: 1px solid #E5E7EB; vertical-align: top; }
.del-page-table th { font-size: 12px; color: #64748B; }
.del-page-btn { display: inline-block; margin-top: 12px; padding: 10px 18px; border-radius: 12px; background: #003D33; color: #fff; font-weight: 700; text-decoration: none; }
@media (max-width: 480px) { .legal-page-body { padding: 22px 16px; } .del-page-table { font-size: 13px; } }
