/*
 * Shared visual language for lecture pages.
 * Every interactive visual should answer one question, expose a small set of
 * controls, and keep the current change readable in text.
 */

.visual-contract {
  display: grid;
  gap: 18px;
  margin: 0 0 22px;
  padding: clamp(16px, 3vw, 22px);
  border: 1px solid var(--lesson-line, #d7d6ce);
  border-radius: 14px;
  background: var(--lesson-surface-alt, #ecebe4);
}

.visual-contract__header {
  display: grid;
  gap: 5px;
}

.visual-contract__eyebrow {
  margin: 0;
  color: var(--lesson-accent, #b64d38);
  font-size: 0.7rem;
  font-weight: 850;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.visual-contract__header h3 {
  margin: 0;
  font-size: clamp(1.08rem, 2.8vw, 1.35rem);
  letter-spacing: -0.03em;
}

.visual-contract__header p {
  max-width: 70ch;
  margin: 0;
  color: var(--lesson-muted, #5b666b);
  font-size: 0.88rem;
  line-height: 1.55;
}

.visual-contract__steps {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 8px;
  margin: 0;
  padding: 0;
  list-style: none;
}

.visual-contract__steps li {
  min-width: 0;
  padding: 10px 11px;
  border-top: 3px solid var(--lesson-line, #d7d6ce);
  background: var(--lesson-surface, #fffdf7);
}

.visual-contract__steps strong,
.visual-contract__steps span { display: block; }

.visual-contract__steps strong {
  margin-bottom: 3px;
  font-size: 0.78rem;
}

.visual-contract__steps span {
  color: var(--lesson-muted, #5b666b);
  font-size: 0.72rem;
  line-height: 1.4;
}

.visual-contract__steps li:nth-child(1) { border-top-color: var(--lesson-process, #43525d); }
.visual-contract__steps li:nth-child(2) { border-top-color: var(--lesson-accent, #b64d38); }
.visual-contract__steps li:nth-child(3) { border-top-color: var(--lesson-shared-ink, #205d56); }
.visual-contract__steps li:nth-child(4) { border-top-color: var(--lesson-ink, #202a2d); }

.visual-contract__note {
  margin: 0;
  color: var(--lesson-muted, #5b666b);
  font-size: 0.8rem;
  line-height: 1.55;
}

.learning-visual {
  display: grid;
  gap: 16px;
  margin-top: 20px;
  padding: clamp(16px, 3vw, 24px);
  border: 1px solid var(--lesson-line, #d7d6ce);
  border-radius: 14px;
  background: var(--lesson-surface-alt, #ecebe4);
}

.learning-visual__header {
  display: flex;
  align-items: start;
  justify-content: space-between;
  gap: 14px;
}

.learning-visual__header h3 {
  margin: 0 0 5px;
  font-size: clamp(1.15rem, 3vw, 1.45rem);
  letter-spacing: -0.035em;
}

.learning-visual__header p {
  max-width: 66ch;
  margin: 0;
  color: var(--lesson-muted, #5b666b);
  font-size: 0.86rem;
  line-height: 1.55;
}

.visual-counter {
  flex: none;
  padding: 6px 9px;
  border: 1px solid var(--lesson-line, #d7d6ce);
  border-radius: 999px;
  background: var(--lesson-surface, #fffdf7);
  color: var(--lesson-muted, #5b666b);
  font-size: 0.72rem;
  font-weight: 800;
  white-space: nowrap;
}

.visual-controls {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.visual-control {
  min-height: 44px;
  padding: 9px 13px;
  border: 1px solid var(--lesson-line, #d7d6ce);
  border-radius: 9px;
  background: var(--lesson-surface, #fffdf7);
  color: var(--lesson-ink, #202a2d);
  font-weight: 800;
  cursor: pointer;
}

.visual-control:hover,
.visual-control:focus-visible {
  border-color: var(--lesson-accent, #b64d38);
}

.visual-control[data-visual-action="play"],
.visual-control[data-visual-action="next"] {
  border-color: var(--lesson-accent, #b64d38);
  background: var(--lesson-accent, #b64d38);
  color: #fffaf5;
}

.visual-control:disabled {
  cursor: not-allowed;
  opacity: 0.48;
}

.visual-stage {
  min-width: 0;
  padding: clamp(14px, 3vw, 20px);
  border: 1px solid var(--lesson-line, #d7d6ce);
  background: var(--lesson-surface, #fffdf7);
}

.visual-stage__status,
.visual-stage__caption {
  margin: 0;
  color: var(--lesson-ink, #202a2d);
  line-height: 1.55;
}

.visual-stage__status {
  padding: 11px 13px;
  border-left: 3px solid var(--lesson-accent, #b64d38);
  background: var(--lesson-accent-soft, #f6dfd8);
  font-size: 0.9rem;
  font-weight: 750;
}

.visual-stage__caption {
  color: var(--lesson-muted, #5b666b);
  font-size: 0.82rem;
}

.visual-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 14px;
  margin: 0;
  padding: 0;
  list-style: none;
  color: var(--lesson-muted, #5b666b);
  font-size: 0.78rem;
}

.visual-legend li {
  display: inline-flex;
  align-items: center;
  gap: 6px;
}

.visual-legend li::before {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: var(--lesson-process, #43525d);
}

.visual-legend li:nth-child(2)::before { background: var(--lesson-accent, #b64d38); }
.visual-legend li:nth-child(3)::before { background: var(--lesson-shared-ink, #205d56); }

.visual-checkpoint {
  display: grid;
  gap: 5px;
  margin: 18px 0 0;
  padding: 14px 16px;
  border-left: 4px solid var(--lesson-process, #43525d);
  background: var(--lesson-process-soft, #e7edef);
}

.visual-checkpoint strong { font-size: 0.88rem; }
.visual-checkpoint span { color: var(--lesson-muted, #5b666b); font-size: 0.84rem; line-height: 1.5; }

.misconception-compare {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
  margin-top: 18px;
}

.misconception-compare article {
  min-width: 0;
  padding: 14px;
  border: 1px solid var(--lesson-line, #d7d6ce);
  background: var(--lesson-surface-alt, #ecebe4);
}

.misconception-compare article strong,
.misconception-compare article p { display: block; }
.misconception-compare article strong { margin-bottom: 5px; font-size: 0.86rem; }
.misconception-compare article p { margin: 0; color: var(--lesson-muted, #5b666b); font-size: 0.82rem; line-height: 1.5; }
.misconception-compare__wrong { border-top: 3px solid var(--lesson-danger, #a63c37) !important; }
.misconception-compare__right { border-top: 3px solid var(--lesson-shared-ink, #205d56) !important; }

[data-visual-step] {
  transition: opacity 180ms ease, transform 180ms ease, border-color 180ms ease, background-color 180ms ease;
}

[data-visual-step].is-active { z-index: 1; }

@media (max-width: 640px) {
  .visual-contract__steps { grid-template-columns: repeat(2, minmax(0, 1fr)); }

  .learning-visual__header { display: grid; }
  .visual-counter { justify-self: start; }

  .misconception-compare { grid-template-columns: 1fr; }
}

@media (max-width: 390px) {
  .visual-contract__steps { grid-template-columns: 1fr; }

  .visual-controls { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .visual-control { width: 100%; padding-inline: 8px; }
}

@media (prefers-reduced-motion: reduce) {
  [data-visual-step],
  .visual-control { transition: none; }
}
