/* Guided Chat — shared chat + chip + Rich UI card patterns
 *
 * Used identically across Sarah avatar (English), Interview mock,
 * Govt-exam discovery, Microlearning chat, and English scenario practice.
 *
 * Pattern: AI bubble (TTS plays) + optional Rich UI card → User chips →
 * User taps chip → user bubble appears → next AI turn.
 *
 * No mic, no STT inside use cases — fully canned, deterministic demo.
 * (Real Sarvam STT only on the landing voice overlay for routing.)
 */

/* ============= CHAT THREAD ============= */
.guided-chat {
  flex: 1;
  overflow-y: auto;
  padding: 16px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  background: var(--surface-default);
}
.guided-chat::-webkit-scrollbar { display: none; }

.gc-msg {
  max-width: 86%;
  animation: fadeInUp 0.3s ease-out;
}
.gc-msg-ai { align-self: flex-start; }
.gc-msg-user { align-self: flex-end; }

.gc-bubble {
  padding: 8px 12px;
  font-size: 14px;
  line-height: 1.5;
  font-weight: 500;
}
.gc-bubble-ai {
  background: var(--surface-ghost-icon);
  color: var(--text-high);
  border-radius: 14px 14px 14px 4px;
}
.gc-bubble-user {
  background: var(--primary-50);
  color: #fff;
  border-radius: 14px 14px 4px 14px;
}
.gc-speaker {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 8px;
  background: var(--surface-default);
  border-radius: 999px;
  font-size: 10px;
  font-weight: 500;
  color: var(--v-accent);
  letter-spacing: 0.3px;
  margin-bottom: 6px;
  box-shadow: 0 1px 2px rgba(0,0,0,0.04);
}
.gc-speaker .gc-speaker-dot {
  width: 5px; height: 5px;
  border-radius: 50%;
  background: var(--sparkle-50);
  animation: gcPulse 1.6s ease-in-out infinite;
}
@keyframes gcPulse { 0%,100% { opacity: 1; } 50% { opacity: 0.4; } }

/* Streaming caret */
.gc-bubble-text.mm-streaming::after {
  content: '▌';
  opacity: 0.6;
  animation: gcCaret 0.8s steps(2) infinite;
  margin-left: 2px;
  color: var(--surface-bold);
}
@keyframes gcCaret { 0%, 50% { opacity: 0.6; } 50.01%, 100% { opacity: 0; } }

/* User STT-transcribing pill — shown while "listening" simulation runs */
.gc-stt-pill {
  display: inline-flex !important;
  align-items: center;
  gap: 8px;
  padding: 10px 14px !important;
}
.gc-stt-dots {
  display: inline-flex;
  align-items: center;
  gap: 4px;
}
.gc-stt-dots span {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: var(--text-on-bold);
  opacity: 0.5;
  animation: gcSttDot 1.2s ease-in-out infinite;
}
.gc-stt-dots span:nth-child(2) { animation-delay: 0.15s; }
.gc-stt-dots span:nth-child(3) { animation-delay: 0.3s; }
@keyframes gcSttDot {
  0%, 100% { opacity: 0.5; transform: translateY(0); }
  50%      { opacity: 1; transform: translateY(-2px); }
}
.gc-stt-label {
  font-size: 11px;
  font-weight: 600;
  color: var(--text-on-bold);
  opacity: 0.85;
  letter-spacing: 0.3px;
}

/* User bubble — clean, no decorations. Color/position differentiates from AI. */

/* ============= RICH UI CARDS ============= */
.rich-card {
  align-self: flex-start;
  max-width: 92%;
  background: var(--surface-default);
  border: 1px solid var(--stroke-subtle);
  border-radius: 14px;
  padding: 12px 14px;
  margin-top: -2px;
  animation: fadeInUp 0.3s ease-out 0.05s backwards;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.rich-card .rc-h {
  display: flex;
  align-items: center;
  gap: 8px;
}
.rich-card .rc-icon {
  width: 22px; height: 22px;
  border-radius: 7px;
  background: var(--v-accent-soft);
  color: var(--v-accent);
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.rich-card .rc-label {
  font-size: 10px;
  font-weight: 500;
  color: var(--v-accent);
  letter-spacing: 0.5px;
  text-transform: uppercase;
}
.rich-card .rc-content {
  font-size: 13px;
  line-height: 1.45;
  color: var(--text-high);
}
.rich-card .rc-meta {
  font-size: 11px;
  line-height: 1.4;
  color: var(--text-low);
}
.rich-card .rc-better {
  background: var(--primary-20);
  color: var(--surface-bold);
  font-weight: 500;
  font-size: 13px;
  padding: 9px 12px;
  border-radius: 10px;
  font-style: italic;
}
.rich-card .rc-actions {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.rich-card .rc-btn {
  background: var(--surface-bold);
  color: var(--text-on-bold);
  border: none;
  border-radius: 999px;
  padding: 7px 12px;
  font-size: 11px;
  font-weight: 500;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-family: var(--font);
  transition: transform 0.15s;
}
.rich-card .rc-btn:active { transform: scale(0.95); }
.rich-card .rc-btn-secondary {
  background: var(--surface-ghost);
  color: var(--text-high);
}

/* Variant: correction (before → after) */
.rich-card--correction .rc-icon { background: rgba(250,47,64,0.10); color: var(--error); }
.rich-card--correction .rc-label { color: var(--error); }
.rich-card .rc-before {
  display: flex; flex-direction: column; gap: 2px;
  font-size: 12px;
  color: var(--text-low);
  padding: 8px 10px;
  background: var(--surface-ghost);
  border-radius: 10px;
}
.rich-card .rc-before .rc-row-label {
  font-size: 10px; font-weight: 500; letter-spacing: 0.4px;
  text-transform: uppercase; color: var(--text-low);
  opacity: 0.7;
}
.rich-card .rc-before .rc-row-text {
  font-style: italic;
  text-decoration: line-through;
  text-decoration-color: rgba(0,0,0,0.3);
}
.rich-card .rc-after {
  display: flex; flex-direction: column; gap: 2px;
  background: rgba(37,171,33,0.10);
  color: #14530f;
  font-weight: 600;
  font-size: 13px;
  padding: 9px 12px;
  border-radius: 10px;
}
.rich-card .rc-after .rc-row-label {
  font-size: 10px; font-weight: 500; letter-spacing: 0.4px;
  text-transform: uppercase; color: #14530f;
  opacity: 0.7;
}
.rich-card .rc-after .rc-row-text { font-style: italic; }

/* Voice-coaching notes — pace, fillers, confidence, pronunciation in one compact list */
.rich-card .rc-notes {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex; flex-direction: column;
  gap: 4px;
}
.rich-card .rc-note {
  display: flex; align-items: flex-start; gap: 8px;
  font-size: 12px; line-height: 1.4;
  color: var(--text-high);
}
.rich-card .rc-note-dot {
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--text-low);
  margin-top: 6px; flex-shrink: 0;
}
.rich-card .rc-note.good   .rc-note-dot { background: var(--success); }
.rich-card .rc-note.bad    .rc-note-dot { background: var(--error); }
.rich-card .rc-note.warn   .rc-note-dot { background: var(--warning); }
.rich-card .rc-note.good   { color: #14530f; }
.rich-card .rc-note.bad    { color: var(--error); }
.rich-card .rc-note.warn   { color: var(--secondary-60); }

/* Better-answer block — model answer with inline Listen button */
.rich-card .rc-better-block {
  background: rgba(109,23,206,0.06);
  border-left: 3px solid var(--surface-bold);
  border-radius: 10px;
  padding: 10px 12px;
}
.rich-card .rc-better-block .rc-better-h {
  font-size: 10px; font-weight: 500; letter-spacing: 0.4px;
  text-transform: uppercase;
  color: var(--surface-bold);
  margin-bottom: 6px;
}
.rich-card .rc-better-block .rc-better-row {
  display: flex; align-items: center; gap: 10px;
}
.rich-card .rc-better-block .rc-better-text {
  flex: 1; min-width: 0;
  font-size: 13px; font-weight: 600; font-style: italic;
  color: var(--text-high);
  line-height: 1.35;
}
.rich-card .rc-better-block .rc-better-play {
  flex-shrink: 0;
  display: inline-flex; align-items: center; gap: 5px;
  background: var(--surface-bold);
  color: white;
  border: none;
  border-radius: 999px;
  padding: 5px 10px;
  font-family: var(--font);
  font-size: 10px; font-weight: 500;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  cursor: pointer;
  transition: transform 0.15s, background 0.15s;
}
.rich-card .rc-better-block .rc-better-play:hover { transform: scale(1.03); }
.rich-card .rc-better-block .rc-better-play:active { transform: scale(0.95); }

/* Pronunciation feedback — "You said X, try Y" */
.rich-card .rc-pron {
  background: linear-gradient(180deg, rgba(255,255,255,0.04) 0%, rgba(109,23,206,0.06) 100%);
  border-radius: 10px;
  padding: 10px 12px;
}
.rich-card .rc-pron-h {
  font-size: 10px; font-weight: 500; letter-spacing: 0.5px;
  text-transform: uppercase;
  color: var(--surface-bold);
  margin-bottom: 6px;
}
.rich-card .rc-pron-wrong {
  font-size: 12px; line-height: 1.4;
  color: var(--error);
  margin-bottom: 4px;
}
.rich-card .rc-pron-wrong em {
  font-style: italic;
  text-decoration: line-through;
  text-decoration-color: rgba(250,47,64,0.5);
}
.rich-card .rc-pron-right {
  display: flex; align-items: center; gap: 10px;
  font-size: 13px;
  color: var(--success);
}
.rich-card .rc-pron-right strong { color: #14530f; }
.rich-card .rc-pron-play {
  flex-shrink: 0;
  display: inline-flex; align-items: center; gap: 5px;
  background: var(--success);
  color: white;
  border: none;
  border-radius: 999px;
  padding: 5px 10px;
  font-family: var(--font);
  font-size: 10px; font-weight: 500;
  letter-spacing: 0.3px;
  text-transform: uppercase;
  cursor: pointer;
  transition: transform 0.15s;
}
.rich-card .rc-pron-play:hover { transform: scale(1.03); }
.rich-card .rc-pron-play:active { transform: scale(0.95); }

/* Variant: phrase saved (success accent) */
.rich-card--phrase .rc-icon { background: rgba(37,171,33,0.12); color: var(--success); }
.rich-card--phrase .rc-label { color: var(--success); }

/* Variant: tip (default — primary surface-bold) — already covered */

/* Variant: feedback (interview metrics) */
.rich-card--feedback .rc-metrics {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  gap: 6px;
}
.rich-card--feedback .rc-metric {
  text-align: center;
  padding: 8px 4px;
  background: var(--surface-ghost);
  border-radius: 10px;
}
.rich-card--feedback .rc-metric-v {
  font-size: 14px;
  font-weight: 500;
  color: var(--text-high);
  line-height: 1;
}
.rich-card--feedback .rc-metric-l {
  font-size: 9px;
  font-weight: 500;
  color: var(--text-low);
  letter-spacing: 0.3px;
  text-transform: uppercase;
  margin-top: 4px;
}
.rich-card--feedback .rc-metric.good .rc-metric-v { color: var(--success); }
.rich-card--feedback .rc-metric.warn .rc-metric-v { color: var(--warning); }

/* Variant: score (single big number) */
.rich-card--score {
  align-items: center;
  text-align: center;
}
.rich-card--score .rc-score-num {
  font-size: 28px;
  font-weight: 500;
  color: var(--surface-bold);
  line-height: 1;
}
.rich-card--score .rc-score-l {
  font-size: 11px;
  font-weight: 500;
  color: var(--text-low);
  letter-spacing: 0.4px;
  text-transform: uppercase;
}

/* Variant: list (clickable rows — exam options, paths, etc) */
.rich-card--list .rc-list {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.rich-card--list .rc-list-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 12px;
  background: var(--surface-default);
  border: 1px solid var(--stroke-subtle);
  border-radius: 12px;
  cursor: pointer;
  transition: all 0.15s;
  font-family: var(--font);
  text-align: left;
  width: 100%;
  border-style: solid;
}
.rich-card--list .rc-list-item:hover {
  border-color: var(--surface-bold);
  background: var(--primary-20);
}
.rich-card--list .rc-list-item:active { transform: scale(0.99); }
.rich-card--list .rli-icon {
  width: 32px; height: 32px;
  border-radius: 8px;
  background: var(--primary-20);
  color: var(--surface-bold);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 11px;
  font-weight: 500;
  flex-shrink: 0;
}
.rich-card--list .rli-text { flex: 1; min-width: 0; }
.rich-card--list .rli-name {
  font-size: 13px;
  font-weight: 500;
  color: var(--text-high);
  line-height: 1.2;
}
.rich-card--list .rli-meta {
  font-size: 11px;
  color: var(--text-low);
  margin-top: 2px;
  line-height: 1.4;
}

/* Variant: bullets — for reality-check style cards */
.rich-card--bullets .rc-bullets {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 4px;
}
.rich-card--bullets .rc-bullets li {
  font-size: 12px;
  line-height: 1.45;
  color: var(--text-high);
  padding: 4px 0 4px 14px;
  position: relative;
}
.rich-card--bullets .rc-bullets li::before {
  content: '•';
  position: absolute;
  left: 0;
  color: var(--surface-bold);
  font-weight: 500;
}

/* Variant: trailer — N-step plan card (microlearning) */
.rich-card--trailer .rc-rootcause {
  font-size: 13px;
  font-weight: 600;
  color: var(--text-high);
  background: var(--surface-ghost);
  padding: 8px 12px;
  border-radius: 10px;
  border-left: 3px solid var(--surface-bold);
}
.rich-card--trailer .rc-steps {
  display: flex;
  flex-direction: column;
}
.rich-card--trailer .rc-step {
  display: flex;
  gap: 10px;
  padding: 6px 0;
  font-size: 12px;
  color: var(--text-high);
  line-height: 1.4;
  border-bottom: 1px solid var(--stroke-subtle);
}
.rich-card--trailer .rc-step:last-child { border-bottom: none; }
.rich-card--trailer .rc-step-num {
  width: 20px; height: 20px;
  border-radius: 50%;
  background: var(--primary-20);
  color: var(--surface-bold);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 10px;
  font-weight: 500;
  flex-shrink: 0;
}

/* Variant: practice (with audio playback) */
.rich-card--practice .rc-key-phrase {
  background: var(--primary-20);
  color: var(--surface-bold);
  font-weight: 500;
  font-size: 14px;
  padding: 10px 12px;
  border-radius: 10px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.rich-card--practice .rc-key-play {
  width: 28px; height: 28px;
  border-radius: 50%;
  background: var(--surface-bold);
  color: var(--text-on-bold);
  border: none;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  flex-shrink: 0;
}

/* ============= CHIP AREA (replaces mic dock) ============= */
.gc-chips {
  flex-shrink: 0;
  background: var(--surface-default);
  border-top: 1px solid var(--stroke-subtle);
  padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0px));
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.gc-chips:empty { display: none; }
.gc-chip-prompt {
  font-size: 10px;
  font-weight: 500;
  color: var(--text-low);
  letter-spacing: 0.5px;
  text-transform: uppercase;
  padding-left: 4px;
  margin-bottom: 2px;
}
.gc-chip-row {
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.gc-chip {
  background: var(--surface-ghost-icon);
  border: none;
  border-radius: var(--radius-pill);
  padding: 11px 16px;
  font-size: 13px;
  font-weight: 500;
  color: var(--primary-60);
  cursor: pointer;
  text-align: left;
  font-family: var(--font);
  transition: transform var(--ease-snappy) 200ms;
  line-height: 1.35;
  animation: fadeInUp 0.25s ease-out backwards;
}
.gc-chip:nth-child(1) { animation-delay: 0.05s; }
.gc-chip:nth-child(2) { animation-delay: 0.15s; }
.gc-chip:nth-child(3) { animation-delay: 0.25s; }
.gc-chip:hover { transform: scale(1.02); }
.gc-chip:active { transform: scale(0.97); }
.gc-chip-tag {
  display: inline-block;
  font-size: 9px;
  font-weight: 500;
  letter-spacing: 0.4px;
  text-transform: uppercase;
  padding: 2px 6px;
  border-radius: 999px;
  background: var(--surface-ghost);
  color: var(--text-low);
  margin-right: 8px;
  vertical-align: middle;
}
.gc-chip-tag.tag-good { background: rgba(37,171,33,0.12); color: var(--success); }
.gc-chip-tag.tag-medium { background: rgba(240,109,15,0.10); color: var(--warning); }
.gc-chip-tag.tag-poor { background: rgba(250,47,64,0.10); color: var(--error); }

/* End-state chip area: "Restart" or "Open packs" */
.gc-end {
  text-align: center;
  padding: 20px 16px;
  color: var(--text-low);
  font-size: 13px;
  font-style: italic;
}

/* ============= CHAT INPUT DOCK — matched to original Job_Prototypes =============
   Verbatim port of the OG `.input-widget / .input-field-wrap` pattern from
   Job_Prototypes/index.html (March 2026 build) — same dimensions, same colors,
   same typography. Always visible at the bottom of every chat surface.
*/
.gc-input-dock {
  flex-shrink: 0;
  padding: 2px 12px calc(16px + env(safe-area-inset-bottom, 0px));
  background: var(--surface-default);
  position: relative;
  z-index: 80;
}

/* Chat message wrapper for full-width cards (quizzes, flashcards, concepts).
   The wrapped card stretches to the chat width and scrolls with the thread. */
.gc-msg-card {
  margin: 8px 12px 14px;
}
.gc-msg-card .quiz-card,
.gc-msg-card .flashcard,
.gc-msg-card .concept-card {
  margin-bottom: 0;
  width: 100%;
}

/* "More questions / More flashcards" CTA at the end of a batch */
.gc-more-row {
  display: flex;
  justify-content: center;
  margin: 6px 12px 14px;
}
.gc-more-btn {
  background: var(--surface-bold);
  color: var(--text-on-bold);
  border: none;
  border-radius: 999px;
  padding: 9px 18px;
  font-family: var(--font);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.2px;
  cursor: pointer;
  transition: transform 0.15s, background 0.15s;
}
.gc-more-btn:hover { transform: scale(1.02); }
.gc-more-btn:active { transform: scale(0.96); }

/* Suggested-prompt chips row, sits inside .gc-input-dock just above the input.
 * Horizontal scroll on overflow, monochromatic ghost styling that matches
 * the dock's ghost surface. Used as a single entry-point pattern with the
 * input + mic below. */
.dock-chips {
  display: flex;
  gap: 6px;
  overflow-x: auto;
  padding: 6px 4px 8px;
  margin: 0 -4px;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.dock-chips::-webkit-scrollbar { display: none; }
.dock-chip {
  flex: 0 0 auto;
  background: var(--surface-ghost);
  border: 1px solid var(--stroke-subtle);
  color: var(--text-high);
  border-radius: 999px;
  padding: 7px 12px;
  font-family: var(--font);
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  white-space: nowrap;
  transition: all 0.15s;
}
.dock-chip { transition: transform var(--ease-snappy) 200ms; }
.dock-chip:hover { transform: scale(1.03); }
.dock-chip:active { transform: scale(0.96); }
.gc-input-wrap {
  background: var(--surface-ghost);          /* #eeeeef */
  border-radius: var(--radius-xl);            /* 20px → matches OG --radius-xl */
  padding: 6px;
  display: flex;
  flex-direction: column;
}
.gc-input-text {
  padding: 10px 8px;
  display: flex;
  align-items: center;
}
.gc-input-text input {
  font-family: var(--font);
  font-size: 14px;
  font-weight: 400;
  color: var(--grey-100);                    /* #141414 */
  background: transparent;
  border: none;
  outline: none;
  width: 100%;
  line-height: 1.3;
}
.gc-input-text input::placeholder {
  color: var(--grey-60);                     /* #b5b5b5 */
  opacity: 0.65;
}
.gc-input-actions {
  display: flex;
  justify-content: space-between;
  align-items: center;
  height: 43px;
}
.gc-input-left  { display: flex; gap: 2px; }
.gc-input-right { display: flex; gap: 8px; align-items: center; }
.gc-input-icon-btn {
  width: 36px; height: 36px;
  border-radius: var(--radius-pill);         /* 999px */
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--surface-ghost-icon);     /* #e7e9ff — OG lavender */
  border: none;
  cursor: pointer;
  color: var(--icon-medium);                 /* #170054 — OG fill */
  transition: opacity 0.15s, transform 0.15s;
}
.gc-input-icon-btn:hover  { opacity: 0.85; }
.gc-input-icon-btn:active { opacity: 0.7; transform: scale(0.94); }
.gc-input-icon-btn svg { width: 20px; height: 20px; fill: currentColor; }
.gc-input-speak-btn {
  background: var(--surface-bold);           /* #6d17ce — JDS dark purple */
  border: none;
  border-radius: var(--radius-pill);         /* 999px */
  padding: 10px 20px;                        /* OG exact padding */
  display: flex;
  align-items: center;
  gap: 8px;                                  /* OG exact gap */
  cursor: pointer;
  font-family: var(--font);
  font-weight: 500;
  font-size: 14px;
  color: var(--white);
  line-height: 1;
  transition: opacity 0.15s, transform 0.15s;
}
.gc-input-speak-btn:hover  { opacity: 0.95; }
.gc-input-speak-btn:active { opacity: 0.85; transform: scale(0.97); }
.gc-input-speak-btn svg { width: 18px; height: 18px; fill: currentColor; }

/* Suggested-replies row appears just above the dock when chips are active.
   Different from .gc-chips-inline (which lives inside the chat thread).
   This sits in a sticky overlay between the chat scroll and the input dock. */
.gc-suggest-row {
  flex-shrink: 0;
  padding: 8px 12px 0;
  background: var(--surface-default);
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.gc-suggest-row:empty { display: none; }
.gc-suggest-row .gc-suggest-label {
  font-size: 10px;
  font-weight: 500;
  color: var(--text-low);
  letter-spacing: 0.5px;
  text-transform: uppercase;
  padding: 0 4px 2px;
}

/* Inline chip row — chips appear in the chat thread, not in a fixed dock.
   Used by govt-exam discovery + microlearning chat (chip-driven canned flows). */
.gc-chips-inline {
  align-self: flex-start;
  display: flex;
  flex-direction: column;
  gap: 6px;
  max-width: 92%;
  animation: fadeInUp 0.3s ease-out 0.1s backwards;
}

/* Latency marker — status pill between user click and AI response.
   Shows contextual micro-copy ("Looking up Tech Mahindra patterns…")
   per MultimodalUX deck slide 18.
   Lives in the chat thread, fades in/out gracefully. */
.gc-status-pill {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 7px 13px;
  border-radius: 999px;
  background: var(--primary-20);
  color: var(--surface-bold);
  font-size: 12px;
  font-weight: 600;
  animation: gcStatusIn 0.25s ease-out;
}
.gc-status-pill .gc-status-dots {
  display: inline-flex;
  align-items: center;
  gap: 3px;
}
.gc-status-pill .gc-status-dots span {
  width: 4px; height: 4px;
  border-radius: 50%;
  background: var(--surface-bold);
  opacity: 0.5;
  animation: gcSttDot 1.2s ease-in-out infinite;
}
.gc-status-pill .gc-status-dots span:nth-child(2) { animation-delay: 0.15s; }
.gc-status-pill .gc-status-dots span:nth-child(3) { animation-delay: 0.3s; }
.gc-status-pill.fade-out {
  animation: gcStatusOut 0.25s ease-in forwards;
}
@keyframes gcStatusIn  { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: translateY(0); } }
@keyframes gcStatusOut { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(-4px); } }

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