/* AI challenge and free opinion share a tonal dark conversation theme.
   Interviews retain their separate light theme. All rules stay mission-scoped. */
.voice-app.is-mission-mode:not(.is-interview-mode) {
  --chat-ai: #1c2430;
  --chat-user: #19332f;
  --chat-panel: #16232b;
  --chat-inset: #162f31;
  --chat-ink: #e7edf3;
  --chat-muted: #a7b3c3;
  --chat-line: #3b4c59;
  --chat-accent: #59d5c3;
  --chat-blue: #96c4ff;
  --chat-gold: #e6b76b;
  --chat-purple: #c9b4f5;
  --chat-danger: #ffaaa2;
  color-scheme: dark;

  & .turn[data-role="ai"] { --bubble-bg: var(--chat-ai); --bubble-ink: var(--chat-ink); }
  & .turn[data-role="user"] { --bubble-bg: var(--chat-user); --bubble-ink: var(--chat-ink); }
  & .turn[data-role="system"] { --bubble-bg: var(--chat-panel); --bubble-ink: var(--chat-muted); }
  & .turn.is-translation { --bubble-bg: #252a31; --bubble-ink: var(--chat-ink); }
  & .bubble {
    border-color: var(--chat-line);
    border-radius: 12px;
    box-shadow: 0 6px 18px rgb(0 0 0 / 12%);
  }
  & .bubble-label { color: var(--chat-muted); }
  & .turn.is-playing .bubble {
    border-color: var(--chat-accent);
    box-shadow: 0 0 0 2px rgb(89 213 195 / 12%);
  }
  & .coach-feedback-lead { color: var(--chat-muted); font-size: 17px; line-height: 1.6; }
  & .coach-next-step, & .coach-next-step.is-quick-upgrade-task {
    border-left: 3px solid var(--chat-accent);
    border-radius: 6px;
    background: var(--chat-inset);
    padding: 12px 14px;
  }
  & .coach-next-step::before { color: var(--chat-accent); }
  & .coach-next-step p, & .coach-next-step .message-block {
    color: var(--chat-ink);
    font-size: clamp(19px, 1.5vw, 23px);
    font-weight: 750;
    line-height: 1.5;
    text-decoration: none;
  }
  & .coach-task-helper { color: var(--chat-muted); }
  & .open-expression-reference-marker {
    color: var(--chat-accent); background: var(--chat-inset); border-color: var(--chat-line);
  }
  & .turn-mascot img {
    border-radius: 50%;
    background: radial-gradient(circle, #778591 0%, #52616d 43%, transparent 70%);
  }

  & .meaning-feedback {
    --meaning-complete: var(--chat-accent);
    --meaning-equivalent: var(--chat-blue);
    --meaning-close: var(--chat-gold);
    --meaning-optional: var(--chat-muted);
    --meaning-missing: var(--chat-muted);
    --meaning-contradiction: var(--chat-danger);
    border-top-color: var(--chat-line);
    color: var(--chat-ink);
    padding-top: 14px;
  }
  & .open-expression-feedback {
    --open-viewpoint: var(--chat-accent);
    --open-logic: var(--chat-blue);
    --open-clarity: var(--chat-purple);
    --open-development: var(--chat-gold);
  }
  & .open-expression-feedback, & .open-expression-feedback.is-pending,
  & .open-expression-feedback.is-passed, & .open-expression-feedback.is-error,
  & .mission-choice-card {
    background: var(--chat-panel); border-color: var(--chat-line); color: var(--chat-ink); box-shadow: none;
  }
  & .open-expression-feedback.is-passed { border-color: #417c71; }
  & .open-expression-feedback.is-error { border-color: #8c714a; }
  & .meaning-marker { background: #2b3e47; color: var(--chat-muted); }
  & .meaning-concept.is-equivalent .meaning-marker { color: var(--chat-blue); }

  /* Text tiers cover nested evidence, corrections, rewards and upgrade tasks. */
  & :is(.meaning-concept strong, .meaning-detail, .meaning-reference-text,
    .mission-choice-head strong, .mission-choice-option strong, .mission-repair p span,
    .open-expression-summary, .open-expression-verdict, .open-expression-quick-instruction,
    .open-expression-quick-source q, .open-expression-quick-result strong,
    .open-expression-quick-award > p, .open-expression-quick-combo-lead strong,
    .open-expression-quick-option q, .open-expression-round-delta-summary,
    .open-expression-cool > p, .open-expression-cool q, .open-expression-idea-map > p,
    .open-expression-repair-side p, .open-expression-dimension-summary,
    .open-expression-next, .open-expression-fact, .cool-same-meaning-pattern p,
    .cool-same-meaning-option > q, .cool-same-meaning-read > q, .coach-quick-award-feedback) {
    color: var(--chat-ink);
  }
  & :is(.meaning-score span, .meaning-helper, .meaning-reference-map-title small,
    .meaning-reference-tag, .meaning-reference-tag b, .meaning-waiting,
    .mission-choice-head small, .mission-choice-option small, .mission-choice-option em,
    .mission-repairs-head small, .mission-repair p b, .mission-repair > small,
    .open-expression-waiting, .open-expression-head small, .open-expression-badge-criteria,
    .open-expression-score-summary, .open-expression-quick-head span, .open-expression-quick small,
    .open-expression-quick-source > span, .open-expression-quick-checking,
    .open-expression-quick-result span, .open-expression-quick-total span,
    .open-expression-quick-no-points, .open-expression-repairs-head small,
    .open-expression-cool-head span, .open-expression-cool small,
    .open-expression-cool-source, .open-expression-cool-source > span,
    .open-expression-idea-map-head span, .open-expression-idea-map small,
    .open-expression-repair-side small, .open-expression-moves span,
    .open-expression-score-change, .open-expression-next small,
    .cool-same-meaning-head span, .cool-same-meaning-pattern b, .cool-same-meaning-foot p,
    .mission-pass-main small, .mission-pass-next, .guided-bonus-inline span) { color: var(--chat-muted); }
  & :is(.meaning-score, .meaning-reference-hint, .meaning-reference-map-title span,
    .mission-choice-head span, .mission-choice-option b, .mission-repairs-head strong,
    .mission-repair-tag, .mission-repair i, .open-expression-head b, .open-expression-score-summary span,
    .open-expression-repairs-head span, .open-expression-quick-head b,
    .open-expression-quick-task > span, .open-expression-cool-head b,
    .open-expression-cool.is-invite .open-expression-cool-head b, .open-expression-idea-map-head b,
    .open-expression-repair-tag, .open-expression-repair-side span, .open-expression-repair-arrow,
    .cool-same-meaning-head b, .cool-same-meaning-pattern > span, .cool-same-meaning-read > span,
    .cool-same-meaning-pattern strong, .open-expression-cool-variant > span,
    .open-expression-cool-variant > b, .open-expression-round-delta-summary b,
    .open-expression-cool-boost) { color: var(--chat-accent); }

  & :is(.meaning-reference-map, .meaning-reference-card, .mission-choice-option, .mission-repair,
    .open-expression-verdict, .open-expression-verdict.is-partial, .open-expression-verdict.is-miss,
    .open-expression-quick, .open-expression-quick.is-almost, .open-expression-quick-task,
    .open-expression-quick-task.is-retry, .open-expression-quick-award,
    .open-expression-quick-combo-lead, .open-expression-repairs, .open-expression-cool-variant,
    .open-expression-cool.is-error, .open-expression-repair, .open-expression-repair.is-grammar,
    .open-expression-repair-side, .cool-same-meaning-option, .cool-same-meaning-foot button) {
    background: var(--chat-ai); border-color: var(--chat-line); box-shadow: none;
  }
  & :is(.meaning-reference-hint, .meaning-helper, .meaning-reference-tag,
    .mission-choice-option b, .mission-choice-option em, .mission-repair-tag,
    .meaning-waiting, .open-expression-waiting, .open-expression-repair-tag,
    .open-expression-dimensions) { background: #22353e; border-color: var(--chat-line); }

  & .meaning-reference-tag.is-complete, & .meaning-reference-tag.is-equivalent,
  & :is(.open-expression-head > strong, .open-expression-score-summary b,
    .open-expression-verdict.is-strong b, .open-expression-verdict.is-good b,
    .mission-repair p:last-of-type span, .open-expression-cool-success strong,
    .open-expression-cool-success span, .open-expression-quick.is-completed .open-expression-quick-head b,
    .open-expression-quick.is-completed .open-expression-quick-result span,
    .open-expression-quick-task > small b, .open-expression-quick-award > span,
    .open-expression-quick-award-score strong, .open-expression-quick-award-score b,
    .open-expression-quick-award > small, .open-expression-quick-total b, .open-expression-quick-total i,
    .open-expression-quick-combo-lead span, .open-expression-quick-combo-lead b,
    .open-expression-quick-option header span,
    .open-expression-cool.is-complete .open-expression-cool-head b,
    .open-expression-cool.is-complete > p strong, .open-expression-idea-map q,
    .open-expression-cool-variant.is-complete > span, .open-expression-cool-variant.is-complete > b,
    .open-expression-repair-side.is-right span, .open-expression-moves span.is-complete,
    .open-expression-moves span.is-repair-complete, .open-expression-score-change.is-up,
    .cool-same-meaning-head > strong, .mission-pass-main strong, .mission-pass-matches span,
    .mission-pass-next b, .coach-quick-award > span, .coach-quick-award > div strong,
    .coach-quick-award > div b, .coach-quick-award > small) { color: var(--chat-accent); }
  & .meaning-reference-tag.is-close,
  & :is(.mission-choice-frame, .mission-repair.is-grammar .mission-repair-tag,
    .open-expression-verdict.is-partial b, .open-expression-quick-task.is-retry > span,
    .open-expression-quick-repeat span, .open-expression-quick-repeat u,
    .open-expression-repair.is-grammar .open-expression-repair-tag,
    .open-expression-repair-side.is-left span, .open-expression-repair.is-grammar .open-expression-repair-arrow,
    .open-expression-cool.is-error .open-expression-cool-head b,
    .open-expression-badge.is-gold, .open-expression-badge.is-bronze, .guided-bonus-inline) { color: var(--chat-gold); }
  & .meaning-reference-tag.is-contradiction, & .open-expression-verdict.is-miss b { color: var(--chat-danger); }
  & .open-expression-badge.is-silver { color: var(--chat-ink); }
  & .mission-choice-head .mission-choice-stage-badge:not(.mission-choice-open-head),
  & .open-expression-inline-badge, & .open-expression-quick-boost {
    background: #302c43; color: var(--chat-purple); border-color: #635779; box-shadow: none;
  }
  & .open-expression-cool-total { color: var(--chat-muted) !important; }
  & .open-expression-cool-total b { color: var(--chat-accent); }
  & :is(.open-expression-quick-task > strong, .coach-next-step.is-quick-upgrade-task p,
    .coach-next-step.is-quick-upgrade-task .message-block) { color: var(--chat-ink); text-decoration: none; }
  & :is(.mission-choice-frame, .open-expression-fact, .open-expression-quick-task.is-retry) { border-left-color: var(--chat-gold); }
  & :is(.open-expression-quick-task, .open-expression-next, .cool-same-meaning-pattern,
    .cool-same-meaning-read, .coach-quick-award, .open-expression-quick-award) { border-left-color: var(--chat-accent); }
  & .cool-same-meaning-option, & .cool-same-meaning-foot button { color: var(--chat-ink); }
  & .cool-same-meaning-option:hover, & .cool-same-meaning-option.is-selected,
  & .cool-same-meaning-option.is-answer, & .cool-same-meaning-foot button:hover {
    background: var(--chat-inset); border-color: var(--chat-accent);
  }
  & .cool-same-meaning-option.is-selected, & .cool-same-meaning-option.is-answer { box-shadow: inset 3px 0 var(--chat-accent); }
  & .bubble :focus-visible { outline: 2px solid var(--chat-accent); outline-offset: 3px; }

  & .open-expression-quick-option header b,
  & .open-expression-cool-success p { color: var(--chat-ink); }
  & .correction-old { color: var(--chat-danger); background: rgb(255 170 162 / 10%); }
  & .correction-new { color: var(--chat-accent); background: rgb(89 213 195 / 10%); }
  & .bubble :is(.answer-keyword, .keyword-chip) {
    --keyword-bg: #382b3c; --keyword-border: #a87599; --keyword-ink: #f5b9da;
  }
  & .bubble :is(.answer-keyword, .keyword-chip).is-green {
    --keyword-bg: #203b33; --keyword-border: #508c74; --keyword-ink: #99e5bb;
  }
  & .bubble :is(.answer-keyword, .keyword-chip).is-blue {
    --keyword-bg: #24364d; --keyword-border: #6886b0; --keyword-ink: var(--chat-blue);
  }
  & .bubble :is(.answer-keyword, .keyword-chip).is-amber {
    --keyword-bg: #3c3325; --keyword-border: #9b7946; --keyword-ink: var(--chat-gold);
  }
  & .bubble :is(.answer-keyword, .keyword-chip).is-purple {
    --keyword-bg: #302c43; --keyword-border: #8870b5; --keyword-ink: var(--chat-purple);
  }
  & .bubble :is(.answer-keyword, .keyword-chip).is-cyan {
    --keyword-bg: #203a42; --keyword-border: #578e9d; --keyword-ink: #9ddded;
  }

  /* Fact/opinion evidence uses the same shared conversation renderer. */
  & :is(.emotion-review-head, .emotion-review-head.is-progress, .emotion-review-head.is-complete,
    .emotion-review-additions, .emotion-review-additions.is-opinion,
    .emotion-review-column, .emotion-review-column.is-system, .emotion-review-column.is-neutral,
    .emotion-review-user, .emotion-review-user article,
    .emotion-review-user article.is-connected, .emotion-review-user article.is-waiting,
    .emotion-review-merged, .emotion-point-list li, .emotion-point-list li.is-matched,
    .emotion-point-list li.is-waiting) {
    background: var(--chat-panel); border-color: var(--chat-line); color: var(--chat-ink);
  }
  & :is(.emotion-review-head strong, .emotion-review-head span,
    .emotion-review-additions > header strong, .emotion-review-column > header strong,
    .emotion-review-user > header strong, .emotion-point-list > header strong,
    .emotion-review-details > summary > span) { color: var(--chat-accent); }
  & :is(.emotion-review-additions li p, .emotion-review-column li,
    .emotion-review-user p, .emotion-review-user article p,
    .emotion-review-merged span, .emotion-point-list li p) { color: var(--chat-ink); }
  & :is(.emotion-review-head small, .emotion-review-additions > header small,
    .emotion-review-additions-empty, .emotion-review-column > header small,
    .emotion-review-user > header small, .emotion-point-list > header small,
    .emotion-review-details > summary > small) { color: var(--chat-muted); }
  & .emotion-point-list li.is-waiting > b { background: #2b3e47; color: var(--chat-muted); }
  & .emotion-review-additions.is-opinion > header strong,
  & .emotion-review-additions.is-opinion > header small { color: var(--chat-gold); }
  & :is(.emotion-point-list li small, .emotion-point-status.is-waiting,
    .emotion-review-anchor-status.is-waiting, .emotion-review-word-progress) { color: var(--chat-muted); }
  & :is(.emotion-point-status.is-matched, .emotion-review-anchor-status.is-connected,
    .emotion-review-user > span) { color: var(--chat-accent); }
  & .emotion-review-column li strong { color: var(--chat-ink); }
  @media (max-width: 700px) {
    & .bubble { padding: 14px; }
    & .coach-feedback-lead { font-size: 16px; }
  }
}
