/* PlaylistForge AI — design system v2.
 *
 * Two distinct visual surfaces share this file:
 *
 *   1. The client product (landing, gate flow, dashboard, cleanup,
 *      tokens, etc.). Confident, modern, hero-driven, colorful.
 *      Default styles target this surface.
 *
 *   2. The staff/ops shell (admin dashboards, internal tools).
 *      Renders inside ``layouts/staff_base.html`` which adds the
 *      ``.pf-ops`` root class — every component then darkens, gets
 *      denser, and trades hero treatments for table-grade chrome.
 *
 * No preprocessor, no JS framework, no Tailwind. CSS variables drive
 * the palette so a future dark-mode toggle is one class on <html>.
 */

:root {
  /* ============ palette ============ */
  /* Client brand: indigo primary, electric teal as accent, vibrant
     purple reserved for AI moments. Coral lights up moments of
     emphasis (CTAs, "new" pills). The gray ramp is cool-toned to
     play nicely against the indigo. */
  --pf-brand-50:  #eef0ff;
  --pf-brand-100: #d8defd;
  --pf-brand-200: #b6c0fb;
  --pf-brand-400: #6f7df0;
  --pf-brand-500: #4f46e5;   /* primary */
  --pf-brand-600: #3f37c9;
  --pf-brand-700: #2f29a3;
  --pf-brand-900: #1b1856;

  --pf-accent-50:  #effcf6;
  --pf-accent-100: #c6f7e2;
  --pf-accent-500: #14b8a6;  /* teal */
  --pf-accent-700: #0f766e;

  --pf-ai-50:  #faf5ff;
  --pf-ai-100: #ead8fb;
  --pf-ai-500: #a855f7;       /* AI purple */
  --pf-ai-700: #7e22ce;

  --pf-coral-100: #ffe4dd;
  --pf-coral-500: #ff6b6b;    /* coral — "new", urgency */
  --pf-coral-700: #c14a4a;

  --pf-success-50:  #ecfdf5;
  --pf-success-500: #10b981;
  --pf-success-700: #047857;

  --pf-warning-50:  #fffbeb;
  --pf-warning-500: #f59e0b;
  --pf-warning-700: #b45309;

  --pf-danger-50:  #fef2f2;
  --pf-danger-500: #ef4444;
  --pf-danger-700: #b91c1c;

  --pf-gray-50:  #f8fafc;
  --pf-gray-100: #f1f5f9;
  --pf-gray-200: #e2e8f0;
  --pf-gray-300: #cbd5e1;
  --pf-gray-400: #94a3b8;
  --pf-gray-500: #64748b;
  --pf-gray-600: #475569;
  --pf-gray-700: #334155;
  --pf-gray-800: #1e293b;
  --pf-gray-900: #0f172a;

  /* Semantic surface tokens. */
  --pf-bg:        var(--pf-gray-50);
  --pf-surface:   #ffffff;
  --pf-surface-2: var(--pf-gray-100);
  --pf-border:    var(--pf-gray-200);
  --pf-border-strong: var(--pf-gray-300);
  --pf-text:        var(--pf-gray-900);
  --pf-text-soft:   var(--pf-gray-600);
  --pf-text-muted:  var(--pf-gray-500);
  --pf-text-on-brand: #ffffff;

  /* ============ type ============ */
  --pf-font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
             system-ui, Roboto, "Helvetica Neue", Arial, sans-serif;
  --pf-font-display: "Inter", "Inter Display", -apple-system,
                     BlinkMacSystemFont, system-ui, sans-serif;
  --pf-font-mono: ui-monospace, "JetBrains Mono", "SF Mono", Menlo,
                  monospace;

  /* ============ layout ============ */
  --pf-radius-xs: 4px;
  --pf-radius-sm: 6px;
  --pf-radius-md: 10px;
  --pf-radius-lg: 14px;
  --pf-radius-xl: 20px;

  /* Shadows are subtle by design; depth comes from layered surfaces
     more than from blur. */
  --pf-shadow-xs: 0 1px 2px rgba(15, 23, 42, 0.04);
  --pf-shadow-sm: 0 1px 2px rgba(15, 23, 42, 0.05),
                  0 1px 3px rgba(15, 23, 42, 0.06);
  --pf-shadow-md: 0 4px 6px -1px rgba(15, 23, 42, 0.08),
                  0 2px 4px -2px rgba(15, 23, 42, 0.05);
  --pf-shadow-lg: 0 10px 15px -3px rgba(15, 23, 42, 0.10),
                  0 4px 6px -4px rgba(15, 23, 42, 0.05);

  --pf-space-1: 0.25rem;
  --pf-space-2: 0.5rem;
  --pf-space-3: 0.75rem;
  --pf-space-4: 1rem;
  --pf-space-5: 1.5rem;
  --pf-space-6: 2rem;
  --pf-space-8: 3rem;
  --pf-space-10: 4rem;
  --pf-space-12: 6rem;

  --pf-header-height: 64px;
  --pf-content-max:   1100px;
}

/* ============ reset / base ============ */

*,
*::before,
*::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: var(--pf-font);
  font-size: 16px;
  line-height: 1.6;
  color: var(--pf-text);
  background: var(--pf-bg);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-feature-settings: "cv11" 1, "ss01" 1;  /* Inter alternates */
}

a {
  color: var(--pf-brand-600);
  text-decoration: none;
  transition: color 0.15s;
}
a:hover { color: var(--pf-brand-700); text-decoration: underline; }

h1, h2, h3, h4 {
  font-family: var(--pf-font-display);
  margin: 0 0 var(--pf-space-3);
  line-height: 1.2;
  letter-spacing: -0.02em;
  font-weight: 600;
  color: var(--pf-text);
}
h1 { font-size: clamp(1.75rem, 3vw, 2.25rem); letter-spacing: -0.03em; }
h2 { font-size: clamp(1.35rem, 2vw, 1.65rem); }
h3 { font-size: 1.1rem; font-weight: 600; }
h4 { font-size: 0.95rem; font-weight: 600; }

p { margin: 0 0 var(--pf-space-4); }

code, pre {
  font-family: var(--pf-font-mono);
  font-size: 0.875em;
}
code {
  background: var(--pf-brand-50);
  color: var(--pf-brand-700);
  padding: 0.1em 0.4em;
  border-radius: var(--pf-radius-xs);
  font-weight: 500;
}
pre {
  background: var(--pf-gray-900);
  color: var(--pf-gray-100);
  padding: var(--pf-space-3);
  border-radius: var(--pf-radius-md);
  overflow-x: auto;
  line-height: 1.5;
}

hr.pf-divider {
  border: 0;
  border-top: 1px solid var(--pf-border);
  margin: var(--pf-space-5) 0;
}

/* ============ app shell ============ */

.pf-shell {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.pf-header {
  background: rgba(255, 255, 255, 0.85);
  backdrop-filter: saturate(180%) blur(8px);
  -webkit-backdrop-filter: saturate(180%) blur(8px);
  border-bottom: 1px solid var(--pf-border);
  position: sticky;
  top: 0;
  z-index: 50;
}

.pf-header-inner {
  max-width: var(--pf-content-max);
  margin: 0 auto;
  padding: var(--pf-space-3) var(--pf-space-5);
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--pf-space-4);
  flex-wrap: wrap;
  min-height: var(--pf-header-height);
}

.pf-logo {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-2);
  font-weight: 600;
  font-size: 1.05rem;
  color: var(--pf-text);
  text-decoration: none;
  letter-spacing: -0.01em;
}
.pf-logo:hover { text-decoration: none; color: var(--pf-brand-600); }

.pf-logo-mark {
  width: 32px;
  height: 32px;
  border-radius: 8px;
  background: linear-gradient(135deg,
    var(--pf-brand-500) 0%,
    var(--pf-ai-500) 60%,
    var(--pf-coral-500) 100%);
  position: relative;
  flex-shrink: 0;
  box-shadow: var(--pf-shadow-sm),
              inset 0 0 0 1px rgba(255, 255, 255, 0.15);
}
.pf-logo-mark::after {
  content: "";
  position: absolute;
  inset: 6px 9px;
  border-left: 2px solid #fff;
  border-radius: 1px;
  opacity: 0.95;
}
.pf-logo-mark::before {
  content: "";
  position: absolute;
  inset: 9px 6px 9px 14px;
  border-top: 2px solid #fff;
  opacity: 0.7;
}

.pf-nav {
  display: flex;
  align-items: center;
  gap: var(--pf-space-4);
  flex-wrap: wrap;
}
.pf-nav a, .pf-nav .pf-nav-button {
  color: var(--pf-text-soft);
  font-size: 0.9rem;
  font-weight: 500;
  padding: var(--pf-space-1) 0;
  border-bottom: 2px solid transparent;
  transition: color 0.15s, border-color 0.15s;
  text-decoration: none;
  background: transparent;
  border-top: 0; border-left: 0; border-right: 0;
  font-family: inherit;
  cursor: pointer;
}
.pf-nav a:hover,
.pf-nav .pf-nav-button:hover {
  color: var(--pf-text);
  text-decoration: none;
}
.pf-nav a.is-active {
  color: var(--pf-brand-600);
  border-bottom-color: var(--pf-brand-500);
}

.pf-main {
  flex: 1;
  width: 100%;
  max-width: var(--pf-content-max);
  margin: 0 auto;
  padding: var(--pf-space-6) var(--pf-space-5);
}
.pf-main--narrow   { max-width: 720px; }
.pf-main--centered { max-width: 460px; }

.pf-footer {
  border-top: 1px solid var(--pf-border);
  padding: var(--pf-space-6) var(--pf-space-5);
  text-align: center;
  color: var(--pf-text-muted);
  font-size: 0.9rem;
  background: var(--pf-surface);
}

/* ============ cards ============ */

.pf-card {
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  border-radius: var(--pf-radius-lg);
  padding: var(--pf-space-5);
  box-shadow: var(--pf-shadow-xs);
  transition: box-shadow 0.15s, border-color 0.15s, transform 0.15s;
}
.pf-card:hover { box-shadow: var(--pf-shadow-sm); }
.pf-card + .pf-card { margin-top: var(--pf-space-4); }

.pf-card-grid {
  display: grid;
  gap: var(--pf-space-4);
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}

.pf-card-title {
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--pf-text-muted);
  margin: 0 0 var(--pf-space-2);
}

.pf-card-value {
  font-family: var(--pf-font-display);
  font-size: 2rem;
  font-weight: 600;
  margin: 0;
  color: var(--pf-text);
  letter-spacing: -0.02em;
  font-variant-numeric: tabular-nums;
}

.pf-card-meta {
  margin-top: var(--pf-space-2);
  color: var(--pf-text-soft);
  font-size: 0.875rem;
}

/* Stat card — muted surface variant for metric grids. */
.pf-statcard {
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  border-radius: var(--pf-radius-lg);
  padding: var(--pf-space-4) var(--pf-space-5);
  position: relative;
  overflow: hidden;
}
.pf-statcard::before {
  content: "";
  position: absolute;
  inset: 0 auto 0 0;
  width: 4px;
  background: var(--pf-brand-500);
  opacity: 0;
  transition: opacity 0.15s;
}
.pf-statcard:hover::before { opacity: 1; }
.pf-statcard--accent::before { opacity: 1; background: var(--pf-ai-500); }
.pf-statcard--success::before { opacity: 1; background: var(--pf-success-500); }
.pf-statcard--warning::before { opacity: 1; background: var(--pf-warning-500); }

/* ============ buttons ============ */

button,
.pf-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--pf-space-2);
  padding: var(--pf-space-2) var(--pf-space-4);
  background: var(--pf-brand-500);
  color: var(--pf-text-on-brand);
  border: 1px solid var(--pf-brand-500);
  border-radius: var(--pf-radius-md);
  font-family: inherit;
  font-size: 0.95rem;
  font-weight: 500;
  cursor: pointer;
  text-decoration: none;
  line-height: 1.2;
  transition: background 0.15s, border-color 0.15s, transform 0.05s,
              box-shadow 0.15s;
  box-shadow: var(--pf-shadow-xs);
}
button:hover,
.pf-button:hover {
  background: var(--pf-brand-600);
  border-color: var(--pf-brand-600);
  text-decoration: none;
  box-shadow: var(--pf-shadow-sm);
}
button:active, .pf-button:active { transform: translateY(1px); }
button:focus-visible, .pf-button:focus-visible {
  outline: 3px solid var(--pf-brand-200);
  outline-offset: 1px;
}

.pf-button--ghost {
  background: var(--pf-surface);
  color: var(--pf-text);
  border-color: var(--pf-border-strong);
}
.pf-button--ghost:hover {
  background: var(--pf-surface-2);
  border-color: var(--pf-border-strong);
  color: var(--pf-text);
}

.pf-button--accent {
  background: var(--pf-ai-500);
  border-color: var(--pf-ai-500);
}
.pf-button--accent:hover {
  background: var(--pf-ai-700);
  border-color: var(--pf-ai-700);
}

.pf-button--danger {
  background: var(--pf-danger-500);
  border-color: var(--pf-danger-500);
}
.pf-button--danger:hover {
  background: var(--pf-danger-700);
  border-color: var(--pf-danger-700);
}

.pf-button--sm { padding: var(--pf-space-1) var(--pf-space-3); font-size: 0.85rem; }
.pf-button--lg { padding: var(--pf-space-3) var(--pf-space-5); font-size: 1rem; }

/* ============ forms ============ */

label {
  display: block;
  margin: var(--pf-space-3) 0 var(--pf-space-1);
  font-weight: 500;
  font-size: 0.875rem;
  color: var(--pf-text);
}

input[type="text"],
input[type="email"],
input[type="password"],
input[type="url"],
input[type="datetime-local"],
input[type="number"],
input[type="file"],
select,
textarea {
  width: 100%;
  padding: var(--pf-space-2) var(--pf-space-3);
  border: 1px solid var(--pf-border-strong);
  border-radius: var(--pf-radius-md);
  font-family: inherit;
  font-size: 0.95rem;
  background: var(--pf-surface);
  color: var(--pf-text);
  transition: border-color 0.15s, box-shadow 0.15s;
}
input:focus, select:focus, textarea:focus {
  outline: none;
  border-color: var(--pf-brand-500);
  box-shadow: 0 0 0 3px var(--pf-brand-100);
}

fieldset {
  border: 1px solid var(--pf-border);
  border-radius: var(--pf-radius-md);
  padding: var(--pf-space-4);
  margin: 0;
  background: var(--pf-surface);
}
fieldset + button,
fieldset + .pf-button { margin-top: var(--pf-space-4); }
legend {
  font-weight: 500;
  font-size: 0.875rem;
  padding: 0 var(--pf-space-2);
  color: var(--pf-text-soft);
}

ul.errorlist {
  color: var(--pf-danger-700);
  background: var(--pf-danger-50);
  padding: var(--pf-space-2) var(--pf-space-4);
  border-radius: var(--pf-radius-sm);
  list-style: none;
  margin: var(--pf-space-2) 0;
}

/* ============ flashes ============ */

.pf-messages {
  list-style: none;
  padding: 0;
  margin: 0 0 var(--pf-space-5);
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-2);
}

.pf-flash {
  padding: var(--pf-space-3) var(--pf-space-4);
  border-radius: var(--pf-radius-md);
  font-size: 0.95rem;
  border: 1px solid transparent;
  display: flex;
  align-items: flex-start;
  gap: var(--pf-space-2);
}
.pf-flash--success { background: var(--pf-success-50); color: var(--pf-success-700); border-color: rgba(16, 185, 129, 0.25); }
.pf-flash--error   { background: var(--pf-danger-50);  color: var(--pf-danger-700);  border-color: rgba(239, 68, 68, 0.25);  }
.pf-flash--warning { background: var(--pf-warning-50); color: var(--pf-warning-700); border-color: rgba(245, 158, 11, 0.25); }
.pf-flash--info    { background: var(--pf-brand-50);   color: var(--pf-brand-700);   border-color: rgba(79, 70, 229, 0.25);  }

/* ============ stepper ============ */

.pf-stepper {
  display: flex;
  align-items: center;
  gap: var(--pf-space-2);
  margin: 0 0 var(--pf-space-5);
  font-size: 0.875rem;
  color: var(--pf-text-muted);
  flex-wrap: wrap;
}
.pf-stepper-item {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-2);
  padding: var(--pf-space-1) var(--pf-space-3);
  border-radius: 999px;
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  font-weight: 500;
}
.pf-stepper-item.is-current {
  color: var(--pf-text-on-brand);
  background: var(--pf-brand-500);
  border-color: var(--pf-brand-500);
}
.pf-stepper-item.is-done {
  color: var(--pf-success-700);
  background: var(--pf-success-50);
  border-color: var(--pf-success-500);
}
.pf-stepper-sep { color: var(--pf-border-strong); }

/* ============ list rows ============ */

.pf-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: var(--pf-space-2);
}

.pf-row {
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  border-radius: var(--pf-radius-md);
  padding: var(--pf-space-3) var(--pf-space-4);
  transition: border-color 0.15s, box-shadow 0.15s;
}
.pf-row:hover { border-color: var(--pf-border-strong); }

.pf-row-head {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: var(--pf-space-3);
  flex-wrap: wrap;
}

.pf-meta { color: var(--pf-text-muted); font-size: 0.85rem; }
.pf-meta--inline { display: inline; }

/* ============ pills ============ */

.pf-pill {
  display: inline-block;
  padding: 2px 10px;
  border-radius: 999px;
  font-size: 0.75rem;
  font-weight: 500;
  background: var(--pf-brand-50);
  color: var(--pf-brand-700);
  letter-spacing: 0.01em;
  border: 1px solid transparent;
}
.pf-pill--accent  { background: var(--pf-ai-50);      color: var(--pf-ai-700); }
.pf-pill--success { background: var(--pf-success-50); color: var(--pf-success-700); }
.pf-pill--warning { background: var(--pf-warning-50); color: var(--pf-warning-700); }
.pf-pill--error   { background: var(--pf-danger-50);  color: var(--pf-danger-700); }
.pf-pill--coral   { background: var(--pf-coral-100);  color: var(--pf-coral-700); }
.pf-pill--muted   { background: var(--pf-surface-2);  color: var(--pf-text-muted); border-color: var(--pf-border); }

.pf-pill svg { width: 12px; height: 12px; vertical-align: -2px; margin-right: 2px; }

/* ============ landing-page hero ============ */

.pf-hero {
  position: relative;
  padding: var(--pf-space-12) var(--pf-space-5) var(--pf-space-10);
  text-align: center;
  border-radius: var(--pf-radius-xl);
  margin-bottom: var(--pf-space-10);
  overflow: hidden;
  background:
    radial-gradient(ellipse 80% 60% at 50% 0%,
      rgba(168, 85, 247, 0.12) 0%, transparent 60%),
    radial-gradient(ellipse 60% 60% at 100% 100%,
      rgba(20, 184, 166, 0.10) 0%, transparent 60%),
    linear-gradient(180deg, var(--pf-brand-50) 0%, var(--pf-surface) 100%);
}
.pf-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(79, 70, 229, 0.06) 1px, transparent 1px),
    linear-gradient(90deg, rgba(79, 70, 229, 0.06) 1px, transparent 1px);
  background-size: 28px 28px;
  mask-image: radial-gradient(ellipse 70% 70% at 50% 50%, black 30%, transparent 100%);
  -webkit-mask-image: radial-gradient(ellipse 70% 70% at 50% 50%, black 30%, transparent 100%);
  pointer-events: none;
}
.pf-hero > * { position: relative; z-index: 1; }

.pf-hero h1 {
  font-size: clamp(2.25rem, 5vw, 3.5rem);
  letter-spacing: -0.04em;
  font-weight: 700;
  margin-bottom: var(--pf-space-4);
}
.pf-hero h1 .pf-grad {
  background: linear-gradient(90deg,
    var(--pf-brand-500) 0%,
    var(--pf-ai-500) 60%,
    var(--pf-coral-500) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.pf-hero .pf-lead {
  font-size: 1.15rem;
  color: var(--pf-text-soft);
  max-width: 640px;
  margin: 0 auto var(--pf-space-6);
  line-height: 1.6;
}

.pf-hero-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: var(--pf-space-2);
  padding: var(--pf-space-1) var(--pf-space-3);
  border-radius: 999px;
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  color: var(--pf-text-soft);
  font-size: 0.85rem;
  font-weight: 500;
  margin-bottom: var(--pf-space-5);
  box-shadow: var(--pf-shadow-xs);
}
.pf-hero-eyebrow .dot {
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--pf-success-500);
  box-shadow: 0 0 0 4px rgba(16, 185, 129, 0.15);
}

.pf-hero-actions {
  display: inline-flex;
  gap: var(--pf-space-3);
  flex-wrap: wrap;
  justify-content: center;
}

/* Hero illustration container — sized so the SVG breathes. */
.pf-hero-art {
  margin: var(--pf-space-8) auto 0;
  max-width: 720px;
  border-radius: var(--pf-radius-lg);
  border: 1px solid var(--pf-border);
  background: var(--pf-surface);
  box-shadow: var(--pf-shadow-lg);
  overflow: hidden;
}
.pf-hero-art svg { display: block; width: 100%; height: auto; }

/* ============ landing feature grid ============ */

.pf-section {
  margin: var(--pf-space-10) 0;
}
.pf-section-eyebrow {
  text-align: center;
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--pf-brand-600);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-bottom: var(--pf-space-2);
}
.pf-section h2 {
  text-align: center;
  font-size: clamp(1.75rem, 3vw, 2.25rem);
  letter-spacing: -0.02em;
  margin-bottom: var(--pf-space-3);
}
.pf-section-lead {
  text-align: center;
  color: var(--pf-text-soft);
  max-width: 640px;
  margin: 0 auto var(--pf-space-6);
  font-size: 1.05rem;
}

.pf-feature-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: var(--pf-space-4);
}

.pf-feature {
  padding: var(--pf-space-5);
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  border-radius: var(--pf-radius-lg);
  transition: transform 0.15s, box-shadow 0.15s, border-color 0.15s;
  position: relative;
}
.pf-feature:hover {
  border-color: var(--pf-border-strong);
  transform: translateY(-2px);
  box-shadow: var(--pf-shadow-md);
}
.pf-feature h3 {
  font-size: 1rem;
  font-weight: 600;
  margin-bottom: var(--pf-space-2);
}
.pf-feature p {
  color: var(--pf-text-soft);
  font-size: 0.95rem;
  margin: 0;
}

.pf-feature-icon {
  width: 40px;
  height: 40px;
  border-radius: var(--pf-radius-md);
  background: var(--pf-brand-50);
  color: var(--pf-brand-600);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: var(--pf-space-4);
}
.pf-feature-icon svg { width: 22px; height: 22px; }
.pf-feature--ai .pf-feature-icon    { background: var(--pf-ai-50);      color: var(--pf-ai-700); }
.pf-feature--ok .pf-feature-icon    { background: var(--pf-success-50); color: var(--pf-success-700); }
.pf-feature--warn .pf-feature-icon  { background: var(--pf-warning-50); color: var(--pf-warning-700); }
.pf-feature--coral .pf-feature-icon { background: var(--pf-coral-100);  color: var(--pf-coral-700); }
.pf-feature--teal .pf-feature-icon  { background: var(--pf-accent-50);  color: var(--pf-accent-700); }

/* ============ steps ============ */

.pf-steps {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: var(--pf-space-4);
}

.pf-step {
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  border-radius: var(--pf-radius-lg);
  padding: var(--pf-space-5);
}
.pf-step-number {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  background: linear-gradient(135deg, var(--pf-brand-500), var(--pf-ai-500));
  color: var(--pf-text-on-brand);
  border-radius: var(--pf-radius-md);
  font-weight: 600;
  font-size: 0.95rem;
  margin-bottom: var(--pf-space-3);
}
.pf-step h3 { margin-bottom: var(--pf-space-2); font-size: 1rem; }
.pf-step p { font-size: 0.95rem; color: var(--pf-text-soft); margin: 0; }

/* ============ stats banner ============ */

.pf-stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: var(--pf-space-5);
  padding: var(--pf-space-6);
  border-radius: var(--pf-radius-lg);
  background: var(--pf-gray-900);
  color: var(--pf-gray-100);
}
.pf-stat-cell h3 {
  font-family: var(--pf-font-display);
  font-size: 2.25rem;
  font-weight: 700;
  letter-spacing: -0.03em;
  background: linear-gradient(90deg, #fff 0%, var(--pf-brand-200) 100%);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  margin: 0;
  font-variant-numeric: tabular-nums;
}
.pf-stat-cell p {
  margin: var(--pf-space-1) 0 0;
  color: var(--pf-gray-400);
  font-size: 0.875rem;
}

/* ============ FAQ ============ */

.pf-faq details {
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  border-radius: var(--pf-radius-md);
  padding: var(--pf-space-3) var(--pf-space-4);
  margin-bottom: var(--pf-space-2);
}
.pf-faq summary {
  cursor: pointer;
  font-weight: 500;
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--pf-space-3);
}
.pf-faq summary::after { content: "+"; color: var(--pf-text-muted); font-size: 1.25rem; line-height: 1; }
.pf-faq details[open] summary::after { content: "−"; }
.pf-faq details > p { margin-top: var(--pf-space-3); color: var(--pf-text-soft); font-size: 0.95rem; }

/* ============ utilities ============ */

.pf-mt-0 { margin-top: 0 !important; }
.pf-mt-1 { margin-top: var(--pf-space-1); }
.pf-mt-2 { margin-top: var(--pf-space-2); }
.pf-mt-3 { margin-top: var(--pf-space-3); }
.pf-mt-4 { margin-top: var(--pf-space-4); }
.pf-mt-6 { margin-top: var(--pf-space-6); }
.pf-mt-8 { margin-top: var(--pf-space-8); }

.pf-mb-0 { margin-bottom: 0 !important; }
.pf-mb-2 { margin-bottom: var(--pf-space-2); }
.pf-mb-4 { margin-bottom: var(--pf-space-4); }
.pf-mb-6 { margin-bottom: var(--pf-space-6); }

.pf-text-soft  { color: var(--pf-text-soft); }
.pf-text-muted { color: var(--pf-text-muted); }
.pf-text-center { text-align: center; }
.pf-text-mono   { font-family: var(--pf-font-mono); }
.pf-text-sm     { font-size: 0.85rem; }

.pf-flex        { display: flex; }
.pf-flex-wrap   { flex-wrap: wrap; }
.pf-gap-2       { gap: var(--pf-space-2); }
.pf-gap-3       { gap: var(--pf-space-3); }
.pf-gap-4       { gap: var(--pf-space-4); }
.pf-justify-between { justify-content: space-between; }
.pf-items-center    { align-items: center; }

.pf-truncate    { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pf-break-all   { word-break: break-all; }
.pf-user-select-all { user-select: all; }

.pf-icon { width: 16px; height: 16px; flex-shrink: 0; vertical-align: -2px; }
.pf-icon-lg { width: 22px; height: 22px; }

@media (max-width: 600px) {
  .pf-main { padding: var(--pf-space-4) var(--pf-space-3); }
  .pf-header-inner { padding: var(--pf-space-2) var(--pf-space-3); }
  .pf-hero { padding: var(--pf-space-8) var(--pf-space-4); }
}

/* ============================================================
   Dark mode — opt-in via [data-theme="dark"] on <html>.
   Inverts the surface tokens, keeps the brand ramp intact (so
   buttons and the gradient logo still feel branded), and softens
   the brand text colors against dark backgrounds.
   ============================================================ */

html[data-theme="dark"] {
  --pf-bg:        #0b1120;
  --pf-surface:   #111827;
  --pf-surface-2: #1f2937;
  --pf-border:        #1f2937;
  --pf-border-strong: #334155;
  --pf-text:        #f1f5f9;
  --pf-text-soft:   #cbd5e1;
  --pf-text-muted:  #94a3b8;

  --pf-brand-50:  #1e1b4b;
  --pf-brand-100: #312e81;
  --pf-brand-700: #c7d2fe;
  --pf-brand-900: #e0e7ff;

  --pf-success-50:  #052e16;
  --pf-success-700: #86efac;
  --pf-warning-50:  #422006;
  --pf-warning-700: #fcd34d;
  --pf-danger-50:   #450a0a;
  --pf-danger-700:  #fca5a5;
  --pf-ai-50:       #2e1065;
  --pf-ai-700:      #d8b4fe;
  --pf-accent-50:   #042f2e;
  --pf-accent-700:  #5eead4;
  --pf-coral-100:   #4a1414;
  --pf-coral-700:   #fda4af;

  --pf-shadow-xs: 0 1px 2px rgba(0, 0, 0, 0.4);
  --pf-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3),
                  0 1px 3px rgba(0, 0, 0, 0.4);
  --pf-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.5),
                  0 2px 4px -2px rgba(0, 0, 0, 0.4);
  --pf-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5),
                  0 4px 6px -4px rgba(0, 0, 0, 0.4);
}

html[data-theme="dark"] .pf-header {
  background: rgba(17, 24, 39, 0.85);
}

html[data-theme="dark"] code {
  background: rgba(124, 122, 226, 0.15);
  color: var(--pf-brand-900);
}

html[data-theme="dark"] pre {
  background: #020617;
  color: #e2e8f0;
}

html[data-theme="dark"] .pf-hero {
  background:
    radial-gradient(ellipse 80% 60% at 50% 0%,
      rgba(168, 85, 247, 0.18) 0%, transparent 60%),
    radial-gradient(ellipse 60% 60% at 100% 100%,
      rgba(20, 184, 166, 0.14) 0%, transparent 60%),
    linear-gradient(180deg, #0f172a 0%, var(--pf-surface) 100%);
}
html[data-theme="dark"] .pf-hero::after {
  background-image:
    linear-gradient(rgba(124, 122, 226, 0.10) 1px, transparent 1px),
    linear-gradient(90deg, rgba(124, 122, 226, 0.10) 1px, transparent 1px);
}

html[data-theme="dark"] .pf-stats {
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
}

html[data-theme="dark"] .pf-statcard,
html[data-theme="dark"] .pf-card,
html[data-theme="dark"] .pf-row,
html[data-theme="dark"] .pf-feature,
html[data-theme="dark"] .pf-step,
html[data-theme="dark"] details.pf-card,
html[data-theme="dark"] .pf-faq details {
  background: var(--pf-surface);
  border-color: var(--pf-border);
}

html[data-theme="dark"] .pf-button--ghost {
  background: var(--pf-surface);
  color: var(--pf-text);
  border-color: var(--pf-border-strong);
}
html[data-theme="dark"] .pf-button--ghost:hover {
  background: var(--pf-surface-2);
}

html[data-theme="dark"] input,
html[data-theme="dark"] select,
html[data-theme="dark"] textarea {
  background: var(--pf-surface);
  border-color: var(--pf-border-strong);
  color: var(--pf-text);
}
html[data-theme="dark"] fieldset {
  background: var(--pf-surface);
  border-color: var(--pf-border);
}

html[data-theme="dark"] .pf-stepper-item {
  background: var(--pf-surface);
  border-color: var(--pf-border);
  color: var(--pf-text-soft);
}

/* Theme toggle button styling. Matches nav-button surface. */
.pf-theme-toggle {
  background: transparent;
  border: 1px solid var(--pf-border-strong);
  color: var(--pf-text-soft);
  font-family: inherit;
  font-size: 0.85rem;
  font-weight: 500;
  padding: var(--pf-space-1) var(--pf-space-2);
  border-radius: var(--pf-radius-sm);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  transition: background 0.15s, color 0.15s;
}
.pf-theme-toggle:hover {
  background: var(--pf-surface-2);
  color: var(--pf-text);
}
.pf-theme-toggle .pf-icon { width: 14px; height: 14px; }

html[data-theme="dark"] .pf-theme-toggle {
  border-color: var(--pf-border-strong);
}

/* Ops shell dark inversions. The sidebar is already dark; the
   surrounding page is what flips. */
html[data-theme="dark"] .pf-ops {
  background: #0b1120;
}
html[data-theme="dark"] .pf-ops .pf-main {
  background: #0b1120;
}
html[data-theme="dark"] .pf-ops-topbar {
  background: var(--pf-surface);
}

/* ============================================================
   Staff/ops shell — applied via .pf-ops on <body> from the
   staff_base.html layout. Distinct visual identity:
     - sidebar layout, no centered content column
     - darker chrome, denser tables
     - mono-friendly numerics
     - the brand mark stays but the surrounding nav goes ops-grade
   ============================================================ */

.pf-ops {
  background: var(--pf-gray-100);
}
.pf-ops .pf-shell {
  display: grid;
  grid-template-columns: 240px 1fr;
  min-height: 100vh;
}
.pf-ops .pf-header {
  display: none;          /* sidebar replaces it */
}
.pf-ops .pf-main {
  padding: var(--pf-space-6);
  max-width: none;
  background: var(--pf-gray-100);
}
.pf-ops .pf-footer { display: none; }

.pf-ops-sidebar {
  background: var(--pf-gray-900);
  color: var(--pf-gray-300);
  padding: var(--pf-space-5) 0;
  position: sticky;
  top: 0;
  height: 100vh;
  overflow-y: auto;
  border-right: 1px solid var(--pf-gray-800);
}

.pf-ops-brand {
  display: flex;
  align-items: center;
  gap: var(--pf-space-3);
  padding: 0 var(--pf-space-5) var(--pf-space-5);
  border-bottom: 1px solid var(--pf-gray-800);
  color: #fff;
  font-weight: 600;
  font-size: 1rem;
  text-decoration: none;
}
.pf-ops-brand:hover { color: #fff; text-decoration: none; }
.pf-ops-brand .pf-logo-mark { width: 28px; height: 28px; border-radius: 6px; }
.pf-ops-brand-tag {
  font-size: 0.7rem;
  padding: 2px 8px;
  border-radius: 4px;
  background: var(--pf-gray-800);
  color: var(--pf-gray-300);
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  margin-left: auto;
}

.pf-ops-section {
  padding: var(--pf-space-4) var(--pf-space-3) var(--pf-space-2);
  font-size: 0.7rem;
  color: var(--pf-gray-500);
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 600;
}

.pf-ops-nav {
  list-style: none;
  padding: 0 var(--pf-space-2);
  margin: 0;
}
.pf-ops-nav a {
  display: flex;
  align-items: center;
  gap: var(--pf-space-3);
  padding: var(--pf-space-2) var(--pf-space-3);
  color: var(--pf-gray-300);
  border-radius: var(--pf-radius-sm);
  font-size: 0.9rem;
  font-weight: 500;
  text-decoration: none;
  transition: background 0.15s, color 0.15s;
}
.pf-ops-nav a:hover {
  color: #fff;
  background: var(--pf-gray-800);
  text-decoration: none;
}
.pf-ops-nav a.is-active {
  color: #fff;
  background: var(--pf-brand-500);
}
.pf-ops-nav .pf-icon { color: inherit; }

.pf-ops-topbar {
  background: var(--pf-surface);
  border: 1px solid var(--pf-border);
  border-radius: var(--pf-radius-md);
  padding: var(--pf-space-3) var(--pf-space-4);
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: var(--pf-space-5);
  font-size: 0.875rem;
  color: var(--pf-text-soft);
}
.pf-ops-topbar strong { color: var(--pf-text); font-weight: 600; }

.pf-ops .pf-card-grid {
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}
.pf-ops .pf-card-value {
  font-family: var(--pf-font-mono);
  font-weight: 500;
  font-size: 1.75rem;
}

@media (max-width: 800px) {
  .pf-ops .pf-shell {
    grid-template-columns: 1fr;
  }
  .pf-ops-sidebar {
    position: static;
    height: auto;
  }
}
