/* ============================================================
   TheDentist.ai — Design System v2  (2026-06-14)
   Canonical file: cloudflare-pages/design-system/tokens-v2.css
   Award-winning direction: Tend × Zocdoc × One Medical
   Warm, confident, methodology-led. Michelin-style trust.
   ============================================================ */

/* ── Fonts ────────────────────────────────────────────────── */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Source+Serif+4:opsz,wght@8..60,600&display=swap');

/* ── Tokens ───────────────────────────────────────────────── */
:root {
  /* Brand */
  --td-primary:        #0057FF;
  --td-primary-dark:   #0041CC;
  --td-primary-light:  #EBF0FF;
  --td-primary-mid:    #3B73FF;

  --td-teal:           #00C9A7;
  --td-teal-dark:      #00A389;
  --td-teal-light:     #E6FAF7;

  --td-amber:          #F59E0B;
  --td-amber-light:    #FFF8E6;

  --td-success:        #10B981;
  --td-success-light:  #D1FAE5;
  --td-danger:         #EF4444;
  --td-danger-light:   #FEE2E2;
  --td-warning:        #F59E0B;
  --td-warning-light:  #FEF3C7;

  /* Neutral scale */
  --td-white:          #FFFFFF;
  --td-bg:             #F8F9FC;
  --td-surface:        #FFFFFF;
  --td-border:         #E8EDF5;
  --td-border-strong:  #C8D2E4;

  --td-text-primary:   #0A1628;
  --td-text-secondary: #475569;
  --td-text-muted:     #94A3B8;
  --td-text-inverse:   #FFFFFF;

  /* Dark tokens (system prefers-color-scheme: dark) */
  --td-dark-bg:        #0A1628;
  --td-dark-surface:   #111D33;
  --td-dark-border:    #1E2D47;
  --td-dark-text:      #E2E8F0;
  --td-dark-text2:     #94A3B8;

  /* Typography — Inter for UI; Source Serif 4 reserved for .td-wordmark */
  --td-font:           'Inter', -apple-system, system-ui, sans-serif;
  --td-font-display:   'Source Serif 4', Georgia, serif;
  --td-font-mono:      'JetBrains Mono', 'Fira Code', monospace;

  /* Type scale */
  --td-text-xs:   11px;
  --td-text-sm:   13px;
  --td-text-base: 15px;
  --td-text-md:   17px;
  --td-text-lg:   20px;
  --td-text-xl:   24px;
  --td-text-2xl:  32px;
  --td-text-3xl:  40px;
  --td-text-4xl:  52px;

  /* Radii */
  --td-radius-sm:  6px;
  --td-radius-md:  10px;
  --td-radius-lg:  14px;
  --td-radius-xl:  20px;
  --td-radius-pill: 999px;

  /* Shadows */
  --td-shadow-sm:   0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);
  --td-shadow-md:   0 4px 12px rgba(0,0,0,.08);
  --td-shadow-lg:   0 8px 32px rgba(0,0,0,.12);
  --td-shadow-xl:   0 20px 60px rgba(0,0,0,.16);
  --td-shadow-blue: 0 4px 16px rgba(0,87,255,.24);

  /* Spacing (4px grid) */
  --td-sp-1:   4px;
  --td-sp-2:   8px;
  --td-sp-3:   12px;
  --td-sp-4:   16px;
  --td-sp-5:   20px;
  --td-sp-6:   24px;
  --td-sp-8:   32px;
  --td-sp-10:  40px;
  --td-sp-12:  48px;
  --td-sp-16:  64px;
  --td-sp-20:  80px;
  --td-sp-24:  96px;

  /* Layout */
  --td-max-w:       1200px;
  --td-max-w-narrow: 780px;

  /* Transitions */
  --td-ease:   cubic-bezier(.16,1,.3,1);
  --td-dur:    220ms;
}

@media (prefers-color-scheme: dark) {
  :root {
    --td-bg:             #0A1628;
    --td-surface:        #111D33;
    --td-border:         #1E2D47;
    --td-border-strong:  #2E4269;
    --td-text-primary:   #E2E8F0;
    --td-text-secondary: #94A3B8;
    --td-text-muted:     #4A5568;
    --td-primary-light:  rgba(0,87,255,.15);
    --td-teal-light:     rgba(0,201,167,.12);
    --td-success-light:  rgba(16,185,129,.15);
    --td-danger-light:   rgba(239,68,68,.15);
  }
  .td-nav {
    background: rgba(17,29,51,.92);
  }
}

/* ── Reset (v2 surfaces only — does not replace colors_and_type editorial base) ── */
.td-v2-root *, .td-v2-root *::before, .td-v2-root *::after { box-sizing: border-box; }

/* ── Layout Utilities ─────────────────────────────────────── */
.td-container { max-width: var(--td-max-w); margin: 0 auto; padding: 0 var(--td-sp-6); }
.td-container-narrow { max-width: var(--td-max-w-narrow); margin: 0 auto; padding: 0 var(--td-sp-6); }
.td-section { padding: var(--td-sp-16) 0; }
.td-section-sm { padding: var(--td-sp-8) 0; }

/* ── Typography ───────────────────────────────────────────── */
.td-display { font-size: var(--td-text-4xl); font-weight: 600; line-height: 1.1; letter-spacing: -.02em; }
.td-h1 { font-size: var(--td-text-3xl); font-weight: 600; line-height: 1.15; letter-spacing: -.018em; }
.td-h2 { font-size: var(--td-text-2xl); font-weight: 600; line-height: 1.2; letter-spacing: -.014em; }
.td-h3 { font-size: var(--td-text-xl); font-weight: 500; line-height: 1.3; }
.td-h4 { font-size: var(--td-text-lg); font-weight: 500; line-height: 1.4; }
.td-body { font-size: var(--td-text-base); font-weight: 400; line-height: 1.7; }
.td-body-sm { font-size: var(--td-text-sm); font-weight: 400; line-height: 1.65; }
.td-label { font-size: var(--td-text-xs); font-weight: 500; text-transform: uppercase; letter-spacing: .07em; color: var(--td-text-muted); }

/* ── Buttons ──────────────────────────────────────────────── */
.td-btn {
  display: inline-flex;
  align-items: center;
  gap: var(--td-sp-2);
  padding: 10px 20px;
  font-size: var(--td-text-sm);
  font-weight: 500;
  border-radius: var(--td-radius-md);
  border: none;
  cursor: pointer;
  transition: all var(--td-dur) var(--td-ease);
  text-decoration: none;
  white-space: nowrap;
  font-family: var(--td-font);
}
.td-btn-primary {
  background: var(--td-primary);
  color: var(--td-white);
  box-shadow: var(--td-shadow-blue);
}
.td-btn-primary:hover { background: var(--td-primary-dark); box-shadow: 0 6px 20px rgba(0,87,255,.3); transform: translateY(-1px); text-decoration: none; }
.td-btn-primary:active { transform: translateY(0); }

.td-btn-secondary {
  background: var(--td-surface);
  color: var(--td-text-primary);
  border: 1px solid var(--td-border);
  box-shadow: var(--td-shadow-sm);
}
.td-btn-secondary:hover { border-color: var(--td-border-strong); background: var(--td-bg); text-decoration: none; }

.td-btn-ghost {
  background: transparent;
  color: var(--td-primary);
  border: 1px solid var(--td-primary-light);
}
.td-btn-ghost:hover { background: var(--td-primary-light); text-decoration: none; }

.td-btn-teal {
  background: var(--td-teal);
  color: var(--td-white);
}
.td-btn-teal:hover { background: var(--td-teal-dark); transform: translateY(-1px); text-decoration: none; }

.td-btn-lg { padding: 14px 28px; font-size: var(--td-text-base); border-radius: var(--td-radius-lg); }
.td-btn-sm { padding: 6px 14px; font-size: var(--td-text-xs); border-radius: var(--td-radius-sm); }

/* ── Cards ────────────────────────────────────────────────── */
.td-card {
  background: var(--td-surface);
  border: 1px solid var(--td-border);
  border-radius: var(--td-radius-lg);
  padding: var(--td-sp-6);
  box-shadow: var(--td-shadow-sm);
}
.td-card:hover { box-shadow: var(--td-shadow-md); border-color: var(--td-border-strong); }
.td-card-sm { padding: var(--td-sp-4); border-radius: var(--td-radius-md); }

/* ── Dentist listing card ─────────────────────────────────── */
.td-dentist-card {
  background: var(--td-surface);
  border: 1px solid var(--td-border);
  border-radius: var(--td-radius-xl);
  padding: var(--td-sp-6);
  box-shadow: var(--td-shadow-sm);
  transition: all var(--td-dur) var(--td-ease);
  display: grid;
  grid-template-columns: 72px 1fr;
  gap: var(--td-sp-5);
  align-items: flex-start;
}
.td-dentist-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--td-shadow-lg);
  border-color: var(--td-border-strong);
}
.td-dentist-avatar {
  width: 72px;
  height: 72px;
  border-radius: var(--td-radius-lg);
  object-fit: cover;
  background: var(--td-bg);
}
.td-dentist-name { font-size: var(--td-text-md); font-weight: 600; color: var(--td-text-primary); line-height: 1.2; margin-bottom: 2px; }
.td-dentist-specialty { font-size: var(--td-text-sm); color: var(--td-text-secondary); margin-bottom: var(--td-sp-3); }
.td-dentist-meta { display: flex; flex-wrap: wrap; gap: var(--td-sp-2); align-items: center; margin-bottom: var(--td-sp-4); }
.td-dentist-actions { display: flex; gap: var(--td-sp-2); }

/* ── VPS Badge (Michelin-style) ───────────────────────────── */
.td-vps-badge {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 4px 10px;
  border-radius: var(--td-radius-sm);
  font-size: var(--td-text-xs);
  font-weight: 500;
  background: var(--td-primary-light);
  color: var(--td-primary);
  border: 1px solid rgba(0,87,255,.2);
}
.td-vps-badge svg { width: 12px; height: 12px; }

/* Axis recognition badges */
.td-axis-badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border-radius: var(--td-radius-sm);
  font-size: 10px;
  font-weight: 500;
  background: var(--td-teal-light);
  color: var(--td-teal-dark);
}

/* ── Tags / Pills ─────────────────────────────────────────── */
.td-pill {
  display: inline-block;
  padding: 3px 10px;
  border-radius: var(--td-radius-pill);
  font-size: var(--td-text-xs);
  font-weight: 500;
  border: 1px solid var(--td-border);
  color: var(--td-text-secondary);
  background: var(--td-surface);
  cursor: pointer;
  transition: all var(--td-dur) var(--td-ease);
}
.td-pill:hover, .td-pill.active {
  background: var(--td-primary);
  color: var(--td-white);
  border-color: var(--td-primary);
}

/* ── Search bar ───────────────────────────────────────────── */
.td-search-bar {
  display: flex;
  background: var(--td-surface);
  border: 1px solid var(--td-border);
  border-radius: var(--td-radius-xl);
  box-shadow: var(--td-shadow-md);
  overflow: hidden;
  align-items: center;
  padding: var(--td-sp-1);
  gap: var(--td-sp-1);
}
.td-search-input {
  flex: 1;
  border: none;
  outline: none;
  background: transparent;
  padding: 10px var(--td-sp-4);
  font-size: var(--td-text-base);
  font-family: var(--td-font);
  color: var(--td-text-primary);
}
.td-search-input::placeholder { color: var(--td-text-muted); }
.td-search-divider { width: 1px; height: 24px; background: var(--td-border); }

/* ── Form elements ────────────────────────────────────────── */
.td-input {
  width: 100%;
  padding: 10px var(--td-sp-4);
  border: 1px solid var(--td-border);
  border-radius: var(--td-radius-md);
  font-family: var(--td-font);
  font-size: var(--td-text-base);
  color: var(--td-text-primary);
  background: var(--td-surface);
  transition: border-color var(--td-dur);
  outline: none;
}
.td-input:focus { border-color: var(--td-primary); box-shadow: 0 0 0 3px var(--td-primary-light); }
.td-input::placeholder { color: var(--td-text-muted); }

.td-select {
  appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394A3B8' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 12px center;
  padding-right: 36px;
}

/* ── Nav / Header ─────────────────────────────────────────── */
.td-nav {
  position: sticky;
  top: 0;
  z-index: 100;
  background: rgba(255,255,255,.92);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid var(--td-border);
}
.masthead.td-nav {
  padding: var(--td-sp-4) var(--td-sp-6);
}
.td-nav-inner {
  max-width: var(--td-max-w);
  margin: 0 auto;
  display: flex;
  align-items: center;
  height: 60px;
  gap: var(--td-sp-6);
}
/* Brand wordmark — Source Serif 4 600; .ai italic per canon */
.td-wordmark {
  font-family: var(--td-font-display);
  font-size: 22px;
  font-weight: 600;
  color: var(--td-text-primary);
  letter-spacing: -0.02em;
  white-space: nowrap;
}
.td-wordmark em.ai,
.td-wordmark .ai {
  font-style: italic;
  color: var(--td-primary);
  font-weight: 600;
}
.td-nav-links { display: flex; gap: var(--td-sp-5); margin-left: auto; }
.td-nav-link { font-size: var(--td-text-sm); color: var(--td-text-secondary); transition: color var(--td-dur); }
.td-nav-link:hover { color: var(--td-text-primary); text-decoration: none; }

/* ── Hero variants ────────────────────────────────────────── */
.td-hero-directory {
  background: linear-gradient(160deg, var(--td-primary-light) 0%, var(--td-bg) 55%, var(--td-teal-light) 100%);
  padding: var(--td-sp-20) 0 var(--td-sp-16);
}
.td-hero-dentist {
  background: var(--td-dark-bg);
  color: var(--td-white);
  padding: var(--td-sp-20) 0 var(--td-sp-16);
}

/* ── Trust stripe ─────────────────────────────────────────── */
.td-trust-stripe {
  background: var(--td-surface);
  border-top: 1px solid var(--td-border);
  border-bottom: 1px solid var(--td-border);
  padding: var(--td-sp-4) 0;
}
.td-trust-items { display: flex; gap: var(--td-sp-8); align-items: center; justify-content: center; flex-wrap: wrap; }
.td-trust-item { display: flex; align-items: center; gap: var(--td-sp-2); font-size: var(--td-text-sm); color: var(--td-text-secondary); }
.td-trust-item svg { width: 16px; height: 16px; color: var(--td-teal); }

/* ── Dashboard panels ─────────────────────────────────────── */
.td-sidebar {
  background: var(--td-surface);
  border-right: 1px solid var(--td-border);
  min-height: 100vh;
  width: 220px;
  padding: var(--td-sp-6) 0;
  flex-shrink: 0;
}
.td-sidebar-link {
  display: flex;
  align-items: center;
  gap: var(--td-sp-3);
  padding: 10px var(--td-sp-5);
  font-size: var(--td-text-sm);
  color: var(--td-text-secondary);
  border-radius: 0;
  transition: all var(--td-dur);
  border-left: 3px solid transparent;
}
.td-sidebar-link:hover { color: var(--td-text-primary); background: var(--td-bg); text-decoration: none; }
.td-sidebar-link.active { color: var(--td-primary); background: var(--td-primary-light); border-left-color: var(--td-primary); font-weight: 500; }

/* ── Stat card ────────────────────────────────────────────── */
.td-stat-card {
  background: var(--td-surface);
  border: 1px solid var(--td-border);
  border-radius: var(--td-radius-lg);
  padding: var(--td-sp-5) var(--td-sp-6);
}
.td-stat-label { font-size: var(--td-text-xs); color: var(--td-text-muted); text-transform: uppercase; letter-spacing: .06em; margin-bottom: var(--td-sp-2); }
.td-stat-value { font-size: var(--td-text-2xl); font-weight: 600; color: var(--td-text-primary); line-height: 1; }
.td-stat-delta { font-size: var(--td-text-sm); margin-top: var(--td-sp-1); }
.td-stat-delta.pos { color: var(--td-success); }
.td-stat-delta.neg { color: var(--td-danger); }

/* ── Toggle switch ────────────────────────────────────────── */
.td-toggle { position: relative; display: inline-flex; align-items: center; }
.td-toggle input { position: absolute; opacity: 0; width: 0; }
.td-toggle-track {
  width: 40px; height: 22px;
  background: var(--td-border-strong);
  border-radius: var(--td-radius-pill);
  cursor: pointer;
  transition: background var(--td-dur);
}
.td-toggle-track::after {
  content: '';
  position: absolute;
  top: 3px; left: 3px;
  width: 16px; height: 16px;
  border-radius: 50%;
  background: var(--td-white);
  box-shadow: var(--td-shadow-sm);
  transition: transform var(--td-dur) var(--td-ease);
}
.td-toggle input:checked ~ .td-toggle-track { background: var(--td-primary); }
.td-toggle input:checked ~ .td-toggle-track::after { transform: translateX(18px); }

/* ── Section divider ──────────────────────────────────────── */
.td-divider { height: 1px; background: var(--td-border); margin: var(--td-sp-6) 0; }

/* ── Avatar stack ─────────────────────────────────────────── */
.td-avatar {
  width: 36px; height: 36px;
  border-radius: 50%;
  background: var(--td-primary-light);
  color: var(--td-primary);
  font-size: 12px;
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 2px solid var(--td-surface);
}

/* ── Responsive ───────────────────────────────────────────── */
@media (max-width: 768px) {
  .td-display { font-size: var(--td-text-3xl); }
  .td-h1 { font-size: var(--td-text-2xl); }
  .td-h2 { font-size: var(--td-text-xl); }
  .td-container { padding: 0 var(--td-sp-4); }
  .td-dentist-card { grid-template-columns: 56px 1fr; gap: var(--td-sp-4); }
  .td-dentist-avatar { width: 56px; height: 56px; }
  .masthead.td-nav .nav-links { display: none; }
  .td-sidebar { display: none; }
}

/* ── Animations ───────────────────────────────────────────── */
@keyframes td-fadein { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.td-fadein { animation: td-fadein .35s var(--td-ease) both; }
@keyframes td-skeleton { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } }
.td-skeleton {
  background: linear-gradient(90deg, var(--td-border) 25%, var(--td-bg) 50%, var(--td-border) 75%);
  background-size: 200% 100%;
  animation: td-skeleton 1.6s infinite;
  border-radius: var(--td-radius-md);
}
