/* The plan picker, shared by the three pages that show prices: signup.html
   (dark shell), billing.html and pricing.html (the app's light theme).

   One stylesheet rather than three, because the cards have to agree — a plan
   that looks like a different product on the signup page than on the billing
   page reads as a different price. The colours are the only thing that
   differs, so they are the only thing overridden (see signup.css). */

.plan-list {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: 12px;
}

/* A <button> rather than a styled radio: the whole card is the target, and
   the role="radio"/aria-checked the scripts set is what carries the semantics
   to a screen reader. */
.plan-card {
  --plan-bg: #f9fafb;
  --plan-border: #d8dce6;
  --plan-active-border: #4f46e5;
  --plan-active-bg: #eef2ff;
  --plan-text: #121827;
  --plan-muted: #4b5563;

  display: grid;
  gap: 6px;
  align-content: start;
  text-align: left;
  width: 100%;
  padding: 16px;
  border-radius: 16px;
  border: 2px solid var(--plan-border);
  background: var(--plan-bg);
  color: var(--plan-text);
  font: inherit;
  font-weight: 400;
  cursor: pointer;
  transition: border-color 0.15s, background 0.15s;
}

.plan-card:hover { border-color: var(--plan-active-border); }

.plan-card.is-active {
  border-color: var(--plan-active-border);
  background: var(--plan-active-bg);
}

.plan-name {
  font-weight: 700;
  font-size: 0.95rem;
}

/* Reads as a label, not as a second price — the badge sits beside the plan
   name and must not compete with the number under it. */
.plan-badge {
  display: inline-block;
  margin-left: 6px;
  padding: 2px 7px;
  border-radius: 999px;
  background: #4f46e5;
  color: #fff;
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  vertical-align: middle;
}

.plan-price {
  font-size: 1.45rem;
  font-weight: 700;
  line-height: 1.1;
}

.plan-blurb {
  color: var(--plan-muted);
  font-size: 0.82rem;
  line-height: 1.4;
}

/* The per-seat charge, spelled out. Kept visually distinct from the headline
   price because it is the part of a bill people are most often surprised by,
   and burying it in the blurb is how that surprise happens. */
.plan-seats {
  color: var(--plan-muted);
  font-size: 0.8rem;
  line-height: 1.4;
}

.plan-total {
  margin-top: 4px;
  padding-top: 8px;
  border-top: 1px solid var(--plan-border);
  color: var(--plan-muted);
  font-size: 0.78rem;
}

.plan-loading {
  grid-column: 1 / -1;
  margin: 0;
  color: var(--plan-muted, #4b5563);
  font-size: 0.85rem;
}
