/* ============================================================================
   Vedika Intelligence — Product Page Component Layer
   ----------------------------------------------------------------------------
   This file is the PRODUCT-PAGE component layer that sits ON TOP of the design
   tokens defined in css/redesign.css. It does NOT redefine the palette — every
   colour is consumed via var(--primary-purple), var(--accent-pink), etc.

   Aesthetic direction: "luminous laboratory". Light, generous surfaces with the
   signature violet→pink gradient as the one bold accent, a GitHub-dark terminal
   for code, crisp HTTP method chips, and a refined device frame (phone / browser)
   for the live try-it preview.

   Consumed tokens (from redesign.css :root):
     --primary-purple #7C3AED  --primary-dark #5B21B6  --primary-light #A78BFA
     --accent-pink #EC4899     --accent-orange #F97316
     --success-green #10B981   --warning-yellow #F59E0B  --error-red #EF4444
     --bg #FAFAFA              --surface #FFFFFF
     --text-primary #111827    --text-secondary #6B7280  --border #E5E7EB
     --dark-bg #0F172A
     --hero-gradient, --card-gradient, --glass-bg
     --shadow-sm/md/lg/glow, --radius-sm/md/lg/full

   Fonts (loaded via <link> in the page <head>):
     headings  'Plus Jakarta Sans'  700 / 800
     body      'DM Sans'
     code/mono 'Fragment Mono'
     labels    'Sintony'
   ============================================================================ */

/* ---------------------------------------------------------------------------
   0 · Product-page local tokens (NEW namespaced vars only — palette untouched)
   --------------------------------------------------------------------------- */
:root {
  /* Indic-safe fallback stacks (Devanagari / Tamil / Telugu / Bengali …) */
  --pp-font-head: 'Plus Jakarta Sans', 'Noto Sans Devanagari', 'Noto Sans', system-ui, -apple-system, Segoe UI, sans-serif;
  --pp-font-body: 'DM Sans', 'Noto Sans Devanagari', 'Noto Sans Tamil', 'Noto Sans', system-ui, -apple-system, Segoe UI, sans-serif;
  --pp-font-mono: 'Fragment Mono', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
  --pp-font-label: 'Sintony', 'DM Sans', system-ui, sans-serif;

  /* Terminal / code-block palette (GitHub dark — explicit per spec) */
  --pp-term-bg:     #0d1117;
  --pp-term-header: #161b22;
  --pp-term-text:   #c9d1d9;
  --pp-term-muted:  #484f58;
  --pp-term-line:   #21262d;   /* subtle internal divider on the dark surface */

  /* Focus ring (token from redesign.css btn:focus-visible) */
  --pp-focus-ring: 0 0 0 3px rgba(124, 58, 237, 0.25);

  /* Tinted surfaces derived from the palette (alpha overlays, not new hues) */
  --pp-purple-wash:  rgba(124, 58, 237, 0.06);
  --pp-purple-wash2: rgba(124, 58, 237, 0.10);
  --pp-pink-wash:    rgba(236, 72, 153, 0.08);
  --pp-line-soft:    rgba(17, 24, 39, 0.06);

  /* Lift distance reused across hover transforms */
  --pp-lift: -4px;
}

/* ---------------------------------------------------------------------------
   1 · Base — Indic-safe line-height, body/heading typography
   --------------------------------------------------------------------------- */
body {
  /* Indic-safe: tall lines keep Devanagari/Tamil matras + conjuncts legible */
  line-height: 1.7;
}

.pp-page {
  font-family: var(--pp-font-body);
  color: var(--text-primary);
  background: var(--bg);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

.pp-page h1,
.pp-page h2,
.pp-page h3,
.pp-page h4 {
  font-family: var(--pp-font-head);
  color: var(--text-primary);
  letter-spacing: -0.02em;
  line-height: 1.12;
}

.pp-section {
  max-width: 1180px;
  margin: 0 auto;
  padding: 3.5rem 1.25rem;
}

.pp-section + .pp-section { padding-top: 1rem; }

/* ---------------------------------------------------------------------------
   2 · HERO — .pp-hero / .pp-eyebrow
   --------------------------------------------------------------------------- */
.pp-hero {
  position: relative;
  max-width: 1180px;
  margin: 0 auto;
  padding: 4.5rem 1.25rem 2.5rem;
  display: grid;
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 0.85fr);
  gap: 3rem;
  align-items: center;
  overflow: hidden;
}

/* Atmospheric gradient halo behind the hero copy */
.pp-hero::before {
  content: "";
  position: absolute;
  top: -30%;
  left: -8%;
  width: 460px;
  height: 460px;
  background: var(--primary-purple, #7C3AED);
  filter: blur(120px);
  opacity: 0.16;
  border-radius: var(--radius-full);
  pointer-events: none;
  z-index: 0;
}

.pp-hero > * { position: relative; z-index: 1; }

.pp-hero__copy { max-width: 36rem; }

.pp-hero h1 {
  font-family: var(--pp-font-head);
  font-weight: 800;
  font-size: clamp(2.25rem, 5vw, 3.5rem);
  line-height: 1.06;
  margin: 0.75rem 0 1rem;
}

.pp-hero h1 .pp-grad {
  background: var(--primary-purple, #7C3AED);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}

.pp-hero__lede {
  font-family: var(--pp-font-body);
  font-size: clamp(1rem, 1.4vw, 1.18rem);
  color: var(--text-secondary);
  line-height: 1.7;
  margin: 0 0 1.75rem;
}

.pp-hero__media { min-width: 0; }

/* The eyebrow — labels font, gradient pill with leading dot */
.pp-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-family: var(--pp-font-label);
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--primary-dark);
  background: var(--pp-purple-wash2);
  border: 1px solid rgba(124, 58, 237, 0.18);
  border-radius: var(--radius-full);
  padding: 0.35rem 0.85rem;
}

.pp-eyebrow::before {
  content: "";
  width: 0.5rem;
  height: 0.5rem;
  border-radius: var(--radius-full);
  background: var(--primary-purple, #7C3AED);
  box-shadow: 0 0 10px rgba(124, 58, 237, 0.5);
}

/* ---------------------------------------------------------------------------
   3 · COUNT PILL — .pp-count-pill (endpoint counts, "N languages", etc.)
   --------------------------------------------------------------------------- */
.pp-count-pill {
  display: inline-flex;
  align-items: baseline;
  gap: 0.4rem;
  font-family: var(--pp-font-label);
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--text-secondary);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-full);
  padding: 0.3rem 0.8rem;
  box-shadow: var(--shadow-sm);
}

.pp-count-pill strong {
  font-family: var(--pp-font-head);
  font-weight: 800;
  font-size: 0.95rem;
  color: var(--primary-purple);
}

/* ---------------------------------------------------------------------------
   4 · SEARCH — .pp-search (endpoint filter input)
   --------------------------------------------------------------------------- */
.pp-search {
  position: relative;
  display: flex;
  align-items: center;
}

.pp-search__icon {
  position: absolute;
  left: 0.95rem;
  width: 1rem;
  height: 1rem;
  color: var(--text-secondary);
  pointer-events: none;
}

.pp-search input,
.pp-search .pp-search__input {
  width: 100%;
  font-family: var(--pp-font-body);
  font-size: 0.95rem;
  color: var(--text-primary);
  background: var(--surface);
  border: 2px solid var(--border);
  border-radius: var(--radius-md);
  padding: 0.7rem 1rem 0.7rem 2.6rem;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

.pp-search input::placeholder { color: var(--text-secondary); }

.pp-search input:focus,
.pp-search .pp-search__input:focus {
  outline: none;
  border-color: var(--primary-purple);
  box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.10);
}

/* ---------------------------------------------------------------------------
   5 · ENDPOINT LIST — .pp-endpoint-list / -group / -row + method chips
   --------------------------------------------------------------------------- */
.pp-endpoint-list {
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
  margin-top: 1.5rem;
}

.pp-endpoint-group {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
  overflow: hidden;
}

.pp-endpoint-group__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  padding: 1rem 1.25rem;
  background: var(--pp-purple-wash);
  border-bottom: 1px solid var(--pp-line-soft);
}

.pp-endpoint-group__title {
  font-family: var(--pp-font-head);
  font-weight: 700;
  font-size: 1.02rem;
  color: var(--text-primary);
  margin: 0;
}

/* The rows wrapper behaves like a table on wide screens, cards on narrow ones */
.pp-endpoint-group__rows { display: flex; flex-direction: column; }

.pp-endpoint-row {
  display: grid;
  grid-template-columns: 4.5rem minmax(0, 1.6fr) minmax(0, 2fr) auto;
  align-items: center;
  gap: 1rem;
  padding: 0.85rem 1.25rem;
  border-top: 1px solid var(--pp-line-soft);
  font-family: var(--pp-font-body);
  text-decoration: none;
  color: inherit;
  cursor: pointer;
  transition: background 0.18s ease;
}

.pp-endpoint-group__rows .pp-endpoint-row:first-child { border-top: none; }

.pp-endpoint-row:hover { background: var(--pp-purple-wash); }

.pp-endpoint-row:focus-visible {
  outline: none;
  box-shadow: inset var(--pp-focus-ring);
}

.pp-endpoint-row__path {
  font-family: var(--pp-font-mono);
  font-size: 0.86rem;
  font-weight: 400;
  color: var(--text-primary);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.pp-endpoint-row__path .pp-path-base { color: var(--text-secondary); }

.pp-endpoint-row__summary {
  font-size: 0.86rem;
  color: var(--text-secondary);
  line-height: 1.5;
}

.pp-endpoint-row__action {
  justify-self: end;
  font-family: var(--pp-font-label);
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--primary-purple);
  white-space: nowrap;
}

/* HTTP METHOD CHIPS — GET green / POST blue / DELETE red.
   Builds on the .http-* hooks already in redesign.css, but gives a self-contained
   chip so these classes also work without the .http-badge base class present. */
.http-get,
.http-post,
.http-put,
.http-patch,
.http-delete {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 3.4rem;
  font-family: var(--pp-font-mono);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  line-height: 1;
  padding: 0.32rem 0.5rem;
  border-radius: var(--radius-sm);
  text-transform: uppercase;
}

.http-get    { background: #D1FAE5; color: #065F46; }                /* success-green family */
.http-post   { background: #DBEAFE; color: #1E40AF; }                /* blue */
.http-put,
.http-patch  { background: #FEF3C7; color: #92400E; }                /* amber (secondary) */
.http-delete { background: #FEE2E2; color: #991B1B; }                /* error-red family */

/* ---------------------------------------------------------------------------
   6 · TRY-IT PANEL — .pp-tryit / __controls + mode toggle + key/lang/run
   --------------------------------------------------------------------------- */
.pp-tryit {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
  overflow: hidden;
}

.pp-tryit__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  padding: 1.1rem 1.35rem;
  border-bottom: 1px solid var(--pp-line-soft);
  background: var(--pp-purple-wash);
}

.pp-tryit__title {
  font-family: var(--pp-font-head);
  font-weight: 700;
  font-size: 1.05rem;
  margin: 0;
  display: flex;
  align-items: center;
  gap: 0.55rem;
}

.pp-tryit__body { padding: 1.35rem; }

/* Controls: a responsive grid that stacks to a single column on mobile */
.pp-tryit__controls {
  display: grid;
  grid-template-columns: auto 1fr auto auto;
  align-items: center;
  gap: 0.9rem;
  margin-bottom: 1.1rem;
}

/* SANDBOX / PROD segmented control — .pp-mode-toggle */
.pp-mode-toggle {
  display: inline-flex;
  align-items: center;
  padding: 0.25rem;
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-full);
  gap: 0.15rem;
}

.pp-mode-toggle button,
.pp-mode-toggle .pp-mode-toggle__opt {
  appearance: none;
  border: none;
  cursor: pointer;
  font-family: var(--pp-font-label);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  color: var(--text-secondary);
  background: transparent;
  border-radius: var(--radius-full);
  padding: 0.42rem 1rem;
  transition: color 0.2s ease, background 0.2s ease, box-shadow 0.2s ease;
}

.pp-mode-toggle button:hover,
.pp-mode-toggle .pp-mode-toggle__opt:hover { color: var(--text-primary); }

.pp-mode-toggle button[aria-pressed="true"],
.pp-mode-toggle button.is-active,
.pp-mode-toggle .pp-mode-toggle__opt.is-active {
  color: #fff;
  background: var(--primary-purple, #7C3AED);
  box-shadow: var(--shadow-sm);
}

/* The "prod" half flips to a solid violet when selected to signal real billing */
.pp-mode-toggle button[data-mode="prod"][aria-pressed="true"],
.pp-mode-toggle button[data-mode="prod"].is-active {
  background: var(--primary-dark);
}

.pp-mode-toggle button:focus-visible,
.pp-mode-toggle .pp-mode-toggle__opt:focus-visible {
  outline: none;
  box-shadow: var(--pp-focus-ring);
}

/* API KEY FIELD — .pp-key-field */
.pp-key-field {
  position: relative;
  display: flex;
  align-items: center;
  min-width: 0;
}

.pp-key-field input,
.pp-key-field .pp-key-field__input {
  width: 100%;
  font-family: var(--pp-font-mono);
  font-size: 0.85rem;
  color: var(--text-primary);
  background: var(--surface);
  border: 2px solid var(--border);
  border-radius: var(--radius-md);
  padding: 0.6rem 0.85rem;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
}

.pp-key-field input::placeholder { color: var(--text-secondary); font-family: var(--pp-font-body); }

.pp-key-field input:focus {
  outline: none;
  border-color: var(--primary-purple);
  box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.10);
}

/* Disabled in sandbox mode (no key needed) */
.pp-key-field.is-disabled input,
.pp-key-field input:disabled {
  background: var(--bg);
  color: var(--text-secondary);
  cursor: not-allowed;
}

/* LANG SELECT — .pp-lang-select (custom-styled native <select>) */
.pp-lang-select {
  position: relative;
  display: inline-flex;
}

.pp-lang-select select,
.pp-lang-select .pp-lang-select__el {
  appearance: none;
  -webkit-appearance: none;
  font-family: var(--pp-font-body);
  font-size: 0.85rem;
  font-weight: 600;
  color: var(--text-primary);
  background: var(--surface);
  border: 2px solid var(--border);
  border-radius: var(--radius-md);
  padding: 0.6rem 2.3rem 0.6rem 0.85rem;
  cursor: pointer;
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
  line-height: 1.4;       /* Indic-safe for native script labels (हिन्दी, தமிழ்) */
}

.pp-lang-select::after {
  content: "";
  position: absolute;
  right: 0.95rem;
  top: 50%;
  width: 0.5rem;
  height: 0.5rem;
  border-right: 2px solid var(--text-secondary);
  border-bottom: 2px solid var(--text-secondary);
  transform: translateY(-65%) rotate(45deg);
  pointer-events: none;
}

.pp-lang-select select:focus {
  outline: none;
  border-color: var(--primary-purple);
  box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.10);
}

/* RUN BUTTON — .pp-run-btn (the gradient CTA that fires the request) */
.pp-run-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  font-family: var(--pp-font-head);
  font-weight: 700;
  font-size: 0.95rem;
  color: #fff;
  background: var(--primary-purple, #7C3AED);
  border: none;
  border-radius: var(--radius-md);
  padding: 0.7rem 1.6rem;
  cursor: pointer;
  box-shadow: var(--shadow-md);
  transition: transform 0.25s ease, box-shadow 0.25s ease, filter 0.2s ease;
  white-space: nowrap;
}

.pp-run-btn:hover { transform: scale(1.02); box-shadow: var(--shadow-glow); }
.pp-run-btn:active { transform: scale(0.99); }

.pp-run-btn:focus-visible { outline: none; box-shadow: var(--pp-focus-ring); }

.pp-run-btn[disabled],
.pp-run-btn.is-loading {
  cursor: not-allowed;
  filter: grayscale(0.3) opacity(0.7);
  transform: none;
  box-shadow: var(--shadow-sm);
}

/* Spinner glyph slot for the loading state */
.pp-run-btn .pp-run-btn__spinner {
  width: 1rem;
  height: 1rem;
  border: 2px solid rgba(255, 255, 255, 0.45);
  border-top-color: #fff;
  border-radius: var(--radius-full);
  display: none;
}

.pp-run-btn.is-loading .pp-run-btn__spinner { display: inline-block; animation: pp-spin 0.7s linear infinite; }
.pp-run-btn.is-loading .pp-run-btn__label { opacity: 0.85; }

@keyframes pp-spin { to { transform: rotate(360deg); } }

/* SAMPLE-DATA BADGE — .pp-sample-badge (shown when sandbox returns mock data) */
.pp-sample-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-family: var(--pp-font-label);
  font-size: 0.7rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: #92400E;                                   /* warning-yellow on tint */
  background: #FEF3C7;
  border: 1px solid rgba(245, 158, 11, 0.35);
  border-radius: var(--radius-full);
  padding: 0.28rem 0.7rem;
}

.pp-sample-badge::before {
  content: "";
  width: 0.45rem;
  height: 0.45rem;
  border-radius: var(--radius-full);
  background: var(--warning-yellow);
}

/* ---------------------------------------------------------------------------
   7 · DEVICE FRAMES — .pp-device-phone (CSS phone) / .pp-device-web (browser)
   These wrap the live chart/JSON preview rendered by window.VedikaCharts.
   --------------------------------------------------------------------------- */

/* --- Browser card frame (default on desktop) --- */
.pp-device-web {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
}

.pp-device-web__bar {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.7rem 0.95rem;
  background: var(--bg);
  border-bottom: 1px solid var(--border);
}

/* The three "traffic-light" dots */
.pp-device-web__bar::before {
  content: "";
  width: 0.7rem;
  height: 0.7rem;
  border-radius: var(--radius-full);
  background: #FF5F57;
  box-shadow: 1.1rem 0 0 #FEBC2E, 2.2rem 0 0 #28C840;
  flex: 0 0 auto;
  margin-right: 2.4rem;
}

.pp-device-web__url {
  flex: 1;
  min-width: 0;
  font-family: var(--pp-font-mono);
  font-size: 0.74rem;
  color: var(--text-secondary);
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius-full);
  padding: 0.28rem 0.8rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.pp-device-web__screen {
  padding: 1.25rem;
  min-height: 18rem;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--surface);
}

.pp-device-web__screen svg { max-width: 100%; height: auto; }

/* --- Phone frame (primary on mobile, optional showcase on desktop) --- */
.pp-device-phone {
  position: relative;
  width: 300px;
  max-width: 100%;
  margin: 0 auto;
  aspect-ratio: 300 / 600;
  background: var(--dark-bg);
  border-radius: 2.4rem;
  padding: 0.7rem;
  box-shadow:
    var(--shadow-lg),
    0 0 0 2px rgba(17, 24, 39, 0.06),
    inset 0 0 0 1px rgba(255, 255, 255, 0.05);
}

/* Notch / speaker pill */
.pp-device-phone::before {
  content: "";
  position: absolute;
  top: 1.15rem;
  left: 50%;
  transform: translateX(-50%);
  width: 38%;
  height: 0.42rem;
  background: rgba(255, 255, 255, 0.18);
  border-radius: var(--radius-full);
  z-index: 2;
}

.pp-device-phone__screen {
  width: 100%;
  height: 100%;
  background: var(--surface);
  border-radius: 1.9rem;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  padding: 1.9rem 0.9rem 1.1rem;
}

.pp-device-phone__screen svg { max-width: 100%; height: auto; display: block; margin: 0 auto; }

/* Toggle helper: pages can flip which device is visible per breakpoint */
.pp-device-phone[hidden],
.pp-device-web[hidden] { display: none; }

/* ---------------------------------------------------------------------------
   8 · RESPONSE / SNIPPET — terminal (#0d1117), tabs, copy button
   --------------------------------------------------------------------------- */
.pp-response {
  margin-top: 1.25rem;
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-md);
}

.pp-response__meta {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  flex-wrap: wrap;
  padding: 0.6rem 0.95rem;
  background: var(--pp-term-header);
  color: var(--pp-term-muted);
  font-family: var(--pp-font-mono);
  font-size: 0.74rem;
}

.pp-response__status {
  font-weight: 700;
  letter-spacing: 0.03em;
}

.pp-response__status.is-ok    { color: var(--success-green); }
.pp-response__status.is-error { color: var(--error-red); }

.pp-response__latency,
.pp-response__cost { color: var(--pp-term-muted); }

/* SNIPPET — the dark code surface itself (.pp-snippet) */
.pp-snippet {
  position: relative;
  background: var(--pp-term-bg);
  color: var(--pp-term-text);
}

/* Terminal header bar (tabs live here) */
.pp-snippet__tabs {
  display: flex;
  align-items: stretch;
  gap: 0.15rem;
  padding: 0 0.5rem;
  background: var(--pp-term-header);
  border-bottom: 1px solid var(--pp-term-line);
  overflow-x: auto;
  scrollbar-width: thin;
}

.pp-snippet__tabs::-webkit-scrollbar { height: 5px; }
.pp-snippet__tabs::-webkit-scrollbar-thumb { background: var(--pp-term-line); border-radius: var(--radius-full); }

.pp-snippet__tab {
  appearance: none;
  border: none;
  background: transparent;
  cursor: pointer;
  font-family: var(--pp-font-mono);
  font-size: 0.76rem;
  color: var(--pp-term-muted);
  padding: 0.6rem 0.85rem;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  transition: color 0.18s ease, border-color 0.18s ease;
}

.pp-snippet__tab:hover { color: var(--pp-term-text); }

.pp-snippet__tab[aria-selected="true"],
.pp-snippet__tab.is-active {
  color: #fff;
  border-bottom-color: var(--primary-light);
}

.pp-snippet__tab:focus-visible {
  outline: none;
  box-shadow: inset var(--pp-focus-ring);
  border-radius: var(--radius-sm);
}

.pp-snippet pre,
.pp-snippet code {
  font-family: var(--pp-font-mono);
  font-size: 0.82rem;
  line-height: 1.6;
  color: var(--pp-term-text);
}

.pp-snippet pre {
  margin: 0;
  padding: 1.05rem 1.1rem;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  tab-size: 2;
  white-space: pre;
}

.pp-snippet pre::-webkit-scrollbar { height: 7px; }
.pp-snippet pre::-webkit-scrollbar-thumb { background: var(--pp-term-line); border-radius: var(--radius-full); }

/* Minimal JSON syntax accents (applied by the renderer via spans) */
.pp-snippet .tok-key    { color: #79c0ff; }
.pp-snippet .tok-str    { color: #a5d6ff; }
.pp-snippet .tok-num    { color: #ffa657; }
.pp-snippet .tok-bool   { color: #d2a8ff; }
.pp-snippet .tok-null   { color: var(--pp-term-muted); }
.pp-snippet .tok-punct  { color: var(--pp-term-muted); }

/* COPY BUTTON — .pp-copy-btn (floats top-right of the snippet) */
.pp-copy-btn {
  position: absolute;
  top: 0.55rem;
  right: 0.6rem;
  z-index: 3;
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-family: var(--pp-font-label);
  font-size: 0.72rem;
  font-weight: 700;
  color: var(--pp-term-text);
  background: rgba(201, 209, 217, 0.10);
  border: 1px solid rgba(201, 209, 217, 0.18);
  border-radius: var(--radius-sm);
  padding: 0.32rem 0.6rem;
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.2s ease, background 0.2s ease, color 0.2s ease;
}

/* Reveal on hover/focus of the snippet, and keep visible when focused itself */
.pp-snippet:hover .pp-copy-btn,
.pp-snippet:focus-within .pp-copy-btn,
.pp-copy-btn:focus-visible { opacity: 1; }

.pp-copy-btn:hover { background: rgba(201, 209, 217, 0.18); color: #fff; }

.pp-copy-btn:focus-visible { outline: none; box-shadow: var(--pp-focus-ring); }

.pp-copy-btn.is-copied {
  color: var(--success-green);
  border-color: rgba(16, 185, 129, 0.4);
  background: rgba(16, 185, 129, 0.12);
  opacity: 1;
}

/* On touch devices there's no hover — keep the copy button always visible */
@media (hover: none) {
  .pp-copy-btn { opacity: 1; }
}

/* ---------------------------------------------------------------------------
   9 · ENTRANCE MOTION — staggered hero reveal (high-impact, single moment)
   --------------------------------------------------------------------------- */
.pp-hero__copy > * {
  opacity: 0;
  transform: translateY(14px);
  animation: pp-rise 0.6s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}
.pp-hero__copy > *:nth-child(1) { animation-delay: 0.05s; }
.pp-hero__copy > *:nth-child(2) { animation-delay: 0.13s; }
.pp-hero__copy > *:nth-child(3) { animation-delay: 0.21s; }
.pp-hero__copy > *:nth-child(4) { animation-delay: 0.29s; }
.pp-hero__copy > *:nth-child(5) { animation-delay: 0.37s; }

.pp-hero__media {
  opacity: 0;
  transform: translateY(18px) scale(0.99);
  animation: pp-rise 0.7s cubic-bezier(0.22, 1, 0.36, 1) 0.2s forwards;
}

@keyframes pp-rise {
  to { opacity: 1; transform: translateY(0) scale(1); }
}

/* ---------------------------------------------------------------------------
   10 · RESPONSIVE — mobile-first stacking, phone-primary, table fallback
   --------------------------------------------------------------------------- */

/* Wide-table guard: endpoint rows that are too cramped scroll horizontally
   inside their group on mid widths rather than crushing the path column. */
@media (max-width: 1024px) {
  .pp-endpoint-row {
    grid-template-columns: 4.5rem minmax(0, 1.4fr) minmax(0, 1.6fr) auto;
  }
}

@media (max-width: 768px) {
  .pp-section { padding: 2.5rem 1rem; }

  /* Hero stacks; media goes first so the phone preview leads the page */
  .pp-hero {
    grid-template-columns: 1fr;
    gap: 2rem;
    padding: 2.5rem 1rem 1.5rem;
    text-align: left;
  }
  .pp-hero__media { order: -1; }
  .pp-hero__copy { max-width: none; }

  /* Phone becomes the PRIMARY preview; browser frame hides below 768px */
  .pp-device-phone { display: block; }
  .pp-device-web   { display: none; }

  /* Try-it controls collapse to a single stacked column */
  .pp-tryit__controls {
    grid-template-columns: 1fr;
    gap: 0.75rem;
  }
  .pp-mode-toggle { width: 100%; justify-content: stretch; }
  .pp-mode-toggle button,
  .pp-mode-toggle .pp-mode-toggle__opt { flex: 1; text-align: center; }
  .pp-run-btn { width: 100%; }
  .pp-lang-select,
  .pp-lang-select select { width: 100%; }

  /* Endpoint rows become stacked cards — no horizontal crush of mono paths */
  .pp-endpoint-row {
    grid-template-columns: auto 1fr;
    grid-template-areas:
      "method path"
      "summary summary"
      "action action";
    row-gap: 0.45rem;
    column-gap: 0.7rem;
    padding: 1rem 1.1rem;
  }
  .pp-endpoint-row .http-get,
  .pp-endpoint-row .http-post,
  .pp-endpoint-row .http-put,
  .pp-endpoint-row .http-patch,
  .pp-endpoint-row .http-delete { grid-area: method; }
  .pp-endpoint-row__path    { grid-area: path; white-space: normal; }
  .pp-endpoint-row__summary { grid-area: summary; }
  .pp-endpoint-row__action  { grid-area: action; justify-self: start; }

  /* Snippet text scales down a touch for narrow viewports */
  .pp-snippet pre,
  .pp-snippet code { font-size: 0.78rem; }
}

/* Above 768px the phone frame is an optional showcase, hidden by default
   so the browser frame is the canonical desktop preview. Pages opt a phone
   back in with .pp-device-phone.is-showcase. */
@media (min-width: 769px) {
  .pp-device-phone:not(.is-showcase) { display: none; }
  .pp-device-web { display: block; }
}

/* ---------------------------------------------------------------------------
   11 · REDUCED MOTION — hard kill of all animation/transition (Indic + a11y)
   --------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  * {
    animation: none !important;
    transition: none !important;
  }
  /* Ensure entrance-animated elements are visible without their keyframes */
  .pp-hero__copy > *,
  .pp-hero__media {
    opacity: 1 !important;
    transform: none !important;
  }
}
