/* CTSA Certification — page-scoped styles.
 *
 * The cert pages reuse the site's existing classes from styles.css
 * (order-now-button, reading-custom, software-container, etc.) so this
 * stylesheet only needs to carry cert-only additions.
 *
 * Kept isolated from styles.css / queries.css so the cert-only footprint
 * stays a single file that can be edited safely without touching the rest
 * of the site.
 */

.small-text {
  font-size: 14px;
}

/* ─────────────────────────────────────────────────────────────────────────
 * Sales page (public /certification) — the CTSA badge visual anchor.
 *
 * Rendered as a CSS background-image on a plain div rather than an <img>
 * tag. Trade-off: right-click "Save image as", drag-to-desktop, and
 * "View image in new tab" are unavailable on a CSS background element in
 * every major browser. This is intentional — the badge must not be
 * downloaded from the public sales page. Legitimate downloads happen
 * from the CTSA dashboard after certification.
 *
 * Determined visitors can still find the file URL in devtools; nothing
 * short of a JS watermark prevents that. This blocks the casual 95%.
 *
 * The three defensive properties (user-select, -webkit-user-drag,
 * -webkit-touch-callout) add extra small speed bumps on iOS Safari and
 * older Chrome/Safari, where drag-to-save can bypass background-image
 * protection via long-press. pointer-events: none disables all interaction
 * since the badge is purely decorative.
 * ───────────────────────────────────────────────────────────────────────── */
.cert-badge-display {
  width: 280px;
  aspect-ratio: 1 / 1;
  max-width: 80vw;
  margin: 32px auto;
  background-image: url('/images/certification/ctsa-badge-standard.svg');
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
  user-select: none;
  -webkit-user-select: none;
  -webkit-user-drag: none;
  -webkit-touch-callout: none;
  pointer-events: none;
}

/* Candidate dashboard — cert-specific additions to partners-dashboard.css
 * (which is loaded by topminimal.hbs and provides dashboard-container,
 * dashboard-stat-card, dashboard-info-card, etc.). Only the classes below
 * are new; everything else reuses the existing dashboard visual language.
 */

/* Long link text (verification URLs, truesky.masteringthezodiac.com, etc.)
 * has no spaces and won't wrap by default, causing horizontal bleed on
 * narrow mobile viewports. Breaks anywhere the anchor text would overflow;
 * short link text is unaffected because it fits without needing to break. */
.dashboard-container a {
  overflow-wrap: anywhere;
}

/* .order-now-button doesn't set display or text-align, so on narrow mobile
 * viewports its uppercase text wraps left-aligned with awkward whitespace
 * (Activate CTSA Membership button in the Actions card). Scoped to the
 * dashboard so the site-wide button style is untouched. */
.dashboard-container .order-now-button {
  display: inline-block;
  text-align: center;
  max-width: 100%;
  box-sizing: border-box;
}

/* Global styles.css sets `p { text-align: justify }` which creates huge
 * word gaps on narrow dashboard paragraphs (e.g. "Questions? Email" pushes
 * "Email" to the far right; the Activate Membership blurb gets stretched
 * word spacing on mobile). Same override pattern already used for
 * .dashboard-login-container p in partners-dashboard.css. */
.dashboard-container p {
  text-align: left;
}

.cert-status-active {
  background: #eaf5ea;
  border-left: 4px solid #4a7a4a;
}

.cert-resource-list {
  margin: 0 0 16px 0;
  padding-left: 24px;
  line-height: 1.6;
}

/* Collapsible "See all member benefits" disclosure under the Activate
 * CTSA Membership button in the dashboard's Actions card. Hides the
 * browser-default disclosure triangle (which doesn't match the site's
 * aesthetic) and replaces it with a custom arrow that flips on expand.
 * Summary uses the site's purple accent to signal interactivity. The
 * expanded list uses .cert-resource-list for typographic consistency
 * with the Documents section below on the same page. */
.cert-benefits-details {
  margin: 4px 0 16px 0;
}
.cert-benefits-details > summary {
  cursor: pointer;
  color: #5d4fad;
  font-weight: bold;
  padding: 4px 0 8px 0;
  list-style: none;
}
.cert-benefits-details > summary::-webkit-details-marker {
  display: none;
}
.cert-benefits-details > summary::before {
  content: "\25B8";
  display: inline-block;
  margin-right: 6px;
}
.cert-benefits-details[open] > summary::before {
  content: "\25BE";
}
.cert-benefits-details li {
  font-size: 16px;
  padding-bottom: 16px;
  padding-left: 26px;
  position: relative;
  color: #444;
}
/* Bold text acts as the benefit's section title: same 16px size as the
 * description below it, but bolded, darker, and forced onto its own line.
 * Weight + position + color contrast provide the hierarchy. */
.cert-benefits-details li b {
  display: block;
  margin-bottom: 2px;
  line-height: 1.3;
  color: #111;
}
/* Purple check before each benefit item — turns the 13-row pitch list
 * into a scannable "here's what you get" list. Scoped to
 * .cert-benefits-details so the other uses of .cert-resource-list
 * (Documents, Study materials) keep their default bullets. */
.cert-benefits-details ul {
  list-style: none;
  padding-left: 0;
}
.cert-benefits-details li::before {
  content: "\2713";
  position: absolute;
  left: 0;
  top: 0;
  color: #5d4fad;
  font-weight: bold;
  font-size: 16px;
}

/* Course-page modifier for .cert-resource-list. Bumps the PDF-link font
 * size on the course lesson page so it matches the assignment list weight.
 * Scoped as a modifier (used alongside .cert-resource-list) so the CTSA
 * certification dashboard's resource lists keep their existing size. */
.course-resource-list {
  font-size: 17px;
}

/* Assignment card on the course lesson page. Scoped to .course-assignment
 * so no other lists or paragraphs are affected. The container is a subtle
 * lavender-tinted callout with a purple left rule; the numbered list inside
 * uses purple markers (via ::marker) so the numbers themselves become the
 * visual accent. Each list item is a discrete task, so students can see the
 * structure of the assignment at a glance rather than parsing a wall of prose. */
.course-assignment {
  background: #f7f5fd;
  border-left: 3px solid #5d4fad;
  padding: 14px 20px;
  border-radius: 4px;
  margin: 0;
}
.course-assignment ol {
  margin: 0;
  padding-left: 24px;
  font-size: 18px;
  line-height: 1.65;
  color: #333;
}
.course-assignment li {
  padding-bottom: 12px;
}
.course-assignment li:last-child {
  padding-bottom: 0;
}
.course-assignment li::marker {
  color: #5d4fad;
  font-weight: bold;
}

/* "In this lesson" key-concepts list on the course lesson page. Scoped to
 * .course-key-concepts so it can't leak into other resource lists. Purple
 * dot bullets (matching the site's accent color) frame the list as a clean,
 * neutral preview of what's coming in the lesson. */
.course-key-concepts {
  list-style: none;
  padding-left: 0;
  margin: 0;
}
.course-key-concepts li {
  font-size: 17px;
  line-height: 1.55;
  padding: 0 0 14px 22px;
  position: relative;
  color: #333;
}
.course-key-concepts li:last-child {
  padding-bottom: 0;
}
.course-key-concepts li::before {
  content: "\2022";
  position: absolute;
  left: 4px;
  top: -2px;
  color: #5d4fad;
  font-weight: bold;
  font-size: 22px;
  line-height: 1.55;
}

/* Small section header inside the "Study materials & documents" card,
 * used to group resources by which exam they support. Overrides the global
 * `p { padding-bottom: 16px }` rule from styles.css so the label sits
 * tight to its list. */
.cert-resource-group-label {
  margin: 0;
  padding-bottom: 0;
  font-size: 16px;
  color: #444;
  text-align: left;
}

.cert-resource-note {
  color: #666;
  font-size: 14px;
}

.cert-resource-note-block {
  margin-top: 16px;
  padding-top: 12px;
  border-top: 1px solid #eee;
  font-size: 14px;
  color: #666;
}

/* Dashboard's Start Exam / Resume Exam launch button lives inside a <form>
 * (so we get a proper POST with the dashboard token) — style the form
 * container so the button sits inline with the surrounding copy. */
.cert-launch-form {
  display: inline-block;
  margin-top: 8px;
}

/* ─────────────────────────────────────────────────────────────────────────
 * Admin dashboard (Phase 7-Admin) — page-scoped additions to the shared
 * .dashboard-* classes from partners-dashboard.css (loaded by topminimal).
 * ───────────────────────────────────────────────────────────────────────── */

.cert-admin-container {
  max-width: 1100px;
  margin: 0 auto;
  padding: 24px 20px 80px;
}

.cert-admin-email {
  color: #666;
  font-size: 14px;
}

.cert-admin-attempt-header {
  padding-bottom: 16px;
  border-bottom: 1px solid #eee;
  margin-bottom: 20px;
}

.cert-admin-attempt-header h1 {
  text-align: left;
  font-size: 24px;
  margin: 8px 0 4px;
}

.cert-admin-attempt-header p {
  margin: 4px 0;
  text-align: left;
  font-size: 15px;
}

.cert-admin-ai-summary {
  font-size: 17px !important;
}

.cert-admin-flag {
  color: #c26400;
  font-weight: bold;
  text-transform: uppercase;
  font-size: 14px;
}

.cert-admin-override-badge {
  color: #5d4fad;
  font-weight: bold;
  font-size: 14px;
  margin-left: 12px;
}

.cert-admin-running-total {
  position: sticky;
  top: 0;
  z-index: 10;
  background: #faf8ff;
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 12px 20px;
  margin-bottom: 24px;
  font-size: 18px;
  text-align: center;
}

.cert-admin-section {
  margin: 40px 0;
  padding-top: 20px;
  border-top: 2px solid #eee;
}

/* When a section carries the `.cert-admin-section-numbered` modifier, each
 * item's prompt gets an auto-numbered "1. ", "2. ", ... prefix via CSS
 * counters. Section 3 chart questions already have Q1/Q2/... rendered from
 * the template (they carry their own question numbers), so we only apply
 * this to Sections 1 and 2. */
.cert-admin-section-numbered {
  counter-reset: cert-admin-item;
}
.cert-admin-section-numbered .cert-admin-item {
  counter-increment: cert-admin-item;
}
.cert-admin-section-numbered .cert-admin-item-prompt::before {
  content: counter(cert-admin-item) ". ";
  font-weight: bold;
  margin-right: 4px;
}

.cert-admin-section-title {
  text-align: left;
  font-size: 20px;
  margin-bottom: 16px;
}

.cert-admin-chart-title {
  text-align: left;
  font-size: 18px;
  margin: 24px 0 12px;
}

.cert-admin-chart-images {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  margin: 8px 0 20px;
  justify-content: center;
}

.cert-admin-chart-image {
  max-width: 100%;
  height: auto;
  border: 1px solid #ddd;
  border-radius: 4px;
  background: #fff;
}

.cert-admin-item {
  margin-bottom: 20px;
  padding: 16px;
  background: #fafafa;
  border: 1px solid #eee;
  border-radius: 8px;
}

/* Proctor snapshot strip on the admin attempt-review page. Thumbnails
   sit in a wrapping grid — each click-through opens the full-size
   image (still routed through the authenticated admin serve endpoint). */
.cert-admin-proctor-summary {
  margin: 8px 0 12px;
  font-size: 15px;
}
.cert-admin-proctor-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin: 12px 0;
}
.cert-admin-proctor-thumb-link {
  display: inline-block;
  border: 1px solid #ddd;
  border-radius: 4px;
  overflow: hidden;
  line-height: 0;
}
.cert-admin-proctor-thumb {
  display: block;
  width: 120px;
  height: 90px;
  object-fit: cover;
  background: #000;
}
.cert-admin-proctor-empty {
  color: #888;
  font-size: 15px;
}
.cert-admin-proctor-violations {
  margin-top: 12px;
  font-size: 14px;
}
.cert-admin-proctor-violations summary {
  cursor: pointer;
  color: #444;
}
.cert-admin-proctor-violations ul {
  margin: 8px 0 0 20px;
  padding: 0;
}

.cert-admin-item-prompt {
  font-size: 15px;
  line-height: 1.5;
  margin-bottom: 10px;
}

.cert-admin-item-answer {
  padding: 10px 12px;
  background: #f0efe8;
  border-radius: 4px;
  font-size: 15px;
  margin-bottom: 10px;
}

.cert-admin-answer-text {
  white-space: pre-wrap;
}

.cert-admin-item-run {
  color: #444;
  font-size: 14px;
  margin: 4px 0;
  padding-left: 12px;
  border-left: 3px solid #ddd;
}

.cert-admin-item-controls {
  margin-top: 12px;
  font-size: 16px;
}

.cert-admin-score-checkbox {
  transform: scale(1.3);
  margin-right: 8px;
  vertical-align: middle;
}

.cert-admin-release-block {
  margin-top: 40px;
  padding-top: 24px;
  border-top: 2px solid #eee;
  text-align: center;
}

.cert-admin-release-block label {
  display: block;
  text-align: left;
  margin: 12px 0 6px;
}

.cert-admin-release-block textarea {
  width: 100%;
  box-sizing: border-box;
  padding: 10px 12px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 15px;
  font-family: inherit;
  resize: vertical;
  margin-bottom: 20px;
}

.cert-admin-release-note {
  margin-top: 12px;
  color: #666;
  font-size: 14px;
}

.cert-admin-live-reading-form {
  max-width: 700px;
  margin: 0 auto;
}

.cert-admin-form-row {
  margin: 20px 0;
}

.cert-admin-form-row label {
  display: block;
  margin-bottom: 6px;
  font-size: 15px;
}

.cert-admin-form-row .cert-admin-form-radio {
  display: inline-block;
  margin-right: 20px;
  font-weight: normal;
}

.cert-admin-form-row input[type="number"] {
  width: 100%;
  max-width: 200px;
  padding: 10px 12px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 15px;
}

.cert-admin-form-row textarea {
  width: 100%;
  box-sizing: border-box;
  padding: 10px 12px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 15px;
  font-family: inherit;
  resize: vertical;
}

/* Exam UI — page-scoped styles for certification-exam.hbs.
 * Reuses topminimal.hbs's global layout; adds an exam-friendly reading width,
 * a sticky header with the countdown, and per-item block layout for the
 * facts / shorts / chart sections.
 */

.exam-container {
  max-width: 900px;
  margin: 0 auto;
  padding: 24px 20px 80px;
}

.exam-header {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 24px;
  padding: 16px 20px;
  background: #faf8ff;
  border-radius: 12px;
  position: sticky;
  top: 0;
  z-index: 10;
  border-bottom: 1px solid #eee;
}

.exam-header-info h1 {
  margin: 0 0 4px 0;
  font-size: 22px;
  /* Override the global h1 rule in styles.css:144 (text-align: center) —
   * the exam header uses a two-column flex layout so the h1 has to sit
   * left-aligned inside its column. */
  text-align: left;
}

.exam-meta {
  margin: 0;
  color: #666;
  /* Secondary text sits at 17px against the site's 20px paragraph baseline
   * (styles.css:223) — 85% of body text, reads as "quieter than body copy"
   * without feeling cramped. 14px minimum is reserved for semantic labels
   * (timer label, autosave status) below. */
  font-size: 17px;
}

.exam-header-timer {
  text-align: right;
}

.exam-timer-label {
  display: block;
  color: #666;
  font-size: 14px;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.exam-timer-value {
  display: block;
  font-family: "OpenSans", sans-serif;
  font-size: 32px;
  font-weight: bold;
  color: #5d4fad;
  font-variant-numeric: tabular-nums;
  line-height: 1.1;
}

.exam-timer-warning {
  color: #c26400;
}

.exam-timer-expired {
  color: #c62828;
}

.exam-autosave-status {
  display: block;
  color: #999;
  font-size: 14px;
  margin-top: 4px;
}

.exam-instructions {
  margin: 24px 0;
  color: #444;
  font-size: 17px;
}

.exam-section {
  margin: 40px 0;
  padding-top: 20px;
  border-top: 2px solid #eee;
}

.exam-section-title {
  margin: 0 0 4px 0;
  font-size: 20px;
  /* Same override as h1 above — section titles left-align inside the
   * exam layout even though styles.css centers h2 globally. */
  text-align: left;
}

.exam-section-note {
  color: #333;
  font-size: 17px;
  font-weight: 500;
  margin-bottom: 20px;
}

.exam-item-list,
.exam-chart-questions {
  list-style-position: inside;
  padding-left: 0;
}

.exam-item {
  margin-bottom: 24px;
  padding: 16px;
  background: #fafafa;
  border-radius: 8px;
  border: 1px solid #eee;
}

.exam-item-prompt {
  margin-bottom: 8px;
  font-size: 16px;
  line-height: 1.5;
}

.exam-item-input {
  width: 100%;
  box-sizing: border-box;
  padding: 10px 12px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 16px;
  font-family: inherit;
}

.exam-item-textarea {
  width: 100%;
  box-sizing: border-box;
  padding: 10px 12px;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 16px;
  font-family: inherit;
  resize: vertical;
  min-height: 80px;
}

.exam-chart-block {
  margin: 32px 0;
  padding: 20px;
  background: #f8f7fd;
  border-radius: 10px;
}

.exam-chart-title {
  margin-top: 0;
  font-size: 18px;
  text-align: left;
}

.exam-chart-images {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  margin: 16px 0 24px;
  justify-content: center;
}

.exam-chart-image {
  max-width: 100%;
  height: auto;
  border: 1px solid #ddd;
  border-radius: 4px;
  background: #fff;
}

.exam-chart-placeholder {
  padding: 20px;
  background: #fff4e5;
  border-radius: 6px;
  color: #666;
  text-align: center;
  margin: 12px 0;
}

.exam-submit-block {
  margin-top: 48px;
  padding-top: 24px;
  border-top: 2px solid #eee;
  text-align: center;
}

.exam-submit-note {
  margin-top: 12px;
  color: #666;
  font-size: 17px;
}

@media (max-width: 640px) {
  .exam-header {
    flex-direction: column;
    align-items: stretch;
  }
  .exam-header-timer {
    text-align: left;
  }
  .exam-timer-value {
    font-size: 26px;
  }
}

/* -------- Ready page (certification-exam-ready.hbs) --------
   Attestation checkbox + list + camera preview styling. Reuses the
   existing .exam-section / .exam-submit-block wrappers so the ready
   page inherits the same look as the exam page. */

.exam-attestation-label {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  cursor: pointer;
  font-size: 17px;
  line-height: 1.5;
}

.exam-attestation-label input[type="checkbox"] {
  margin-top: 5px;
  flex-shrink: 0;
  width: 18px;
  height: 18px;
  cursor: pointer;
}

.exam-attestation-list {
  margin-top: 12px;
  padding-left: 40px;
  color: #444;
  font-size: 17px;
  line-height: 1.5;
}

.exam-attestation-list li {
  margin-bottom: 6px;
}

.exam-camera-status {
  margin-top: 12px;
  color: #666;
  font-size: 17px;
}

.exam-camera-video {
  display: block;
  width: 100%;
  max-width: 320px;
  margin: 12px 0;
  border-radius: 8px;
  background: #000;
}

/* -------- Proctor modals on the exam page --------
   Full-screen blocker (camera required) + full-screen warning
   (first tab-focus violation). Both use the same shell so they layer
   consistently. The blocker prevents interaction entirely; the warning
   requires an explicit acknowledgment click to dismiss. */

.cert-proctor-blocker,
.cert-proctor-warning,
.cert-proctor-submit-confirm {
  position: fixed;
  /* Individual anchors as fallback for Safari <14.1 (pre-Apr 2021) which
     doesn't support the `inset` shorthand. Modern browsers use `inset: 0`;
     older Safari reads the four individual properties. Both produce the
     same viewport-covering result. Critical because this is the anti-cheat
     modal — if it fails to cover the viewport the candidate can interact
     with the exam behind it. */
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  inset: 0;
  z-index: 10000;
  background: rgba(0, 0, 0, 0.75);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
}

.cert-proctor-blocker-inner,
.cert-proctor-warning-inner,
.cert-proctor-submit-confirm-inner {
  background: #fff;
  border-radius: 12px;
  padding: 32px;
  max-width: 520px;
  width: 100%;
  text-align: center;
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.2);
}

.cert-proctor-blocker-inner h2,
.cert-proctor-warning-inner h2,
.cert-proctor-submit-confirm-inner h2 {
  margin: 0 0 12px;
  font-size: 22px;
  text-align: center;
}

.cert-proctor-blocker-inner p,
.cert-proctor-warning-inner p,
.cert-proctor-submit-confirm-inner p {
  margin: 0 0 20px;
  color: #444;
  font-size: 17px;
  line-height: 1.5;
}

.cert-proctor-submit-confirm-actions {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
}

/* Inline "link-style" button for admin table actions that need a POST
   form (e.g. Mark Founding). Makes a <button> visually match the plain
   <a href> text links used elsewhere in admin tables (Review, View, etc.). */
.cert-admin-link-button {
  background: none;
  border: none;
  padding: 0;
  margin: 0;
  cursor: pointer;
  color: #5d4fad;
  text-decoration: none;
  font: inherit;
}
.cert-admin-link-button:hover {
  opacity: 0.7;
}

/* Secondary button — used for the destructive action (Reject) next to
   the primary "Approve" button on admin review pages. Structurally
   IDENTICAL to `.partner-form button` (same font, padding, border,
   border-radius) so both buttons render at the exact same height when
   sitting side-by-side in a flex row. Only the background color
   differs — muted gray signals "secondary/destructive" without
   requiring alarm-red styling.
   Both selector variants exist so specificity beats `.partner-form
   button` (0-1-1) when the button is inside a .partner-form. */
.cert-admin-secondary-button,
.partner-form .cert-admin-secondary-button {
  display: block;
  margin-top: 0;
  font-family: "OpenSans", sans-serif;
  font-weight: lighter;
  text-transform: uppercase;
  color: #eee;
  font-size: 18px;
  cursor: pointer;
  border: none;
  background: #aaa;
  padding: 6px 48px;
  border-radius: 4px;
}
/* No :hover rule — the primary `.partner-form button` has no hover
   behavior either, so leaving this button hover-static matches. */

/* File input styling for cert profile form. The `.partner-form input`
   rule applies a border + height that looks wrong on a file input; strip
   it, then style the native "Choose File" pseudo-button to match the
   site's purple button aesthetic. */
.partner-form input[type="file"] {
  font-size: 14px;
  padding: 0;
  border: none;
  height: auto;
}
.partner-form input[type="file"]::file-selector-button {
  background: #5d4fad;
  color: #eee;
  border: none;
  padding: 6px 20px;
  border-radius: 4px;
  font-size: 14px;
  font-family: "OpenSans", sans-serif;
  font-weight: lighter;
  text-transform: uppercase;
  cursor: pointer;
  margin-right: 12px;
}
.partner-form input[type="file"]::file-selector-button:hover {
  background: #4c3f95;
}

/* CTSA Directory (Phase 9) — flex row of fixed-width member cards that
   wrap naturally at narrower viewports. Each card is a single anchor
   linking to the member's /verify/CTSA-#### page. Fixed-width (not 1fr
   grid) so a single card doesn't stretch to fill the container. */
.cert-directory-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 24px;
  justify-content: center;
  /* Temporarily capped to 800px to render 3 cards per row while the
     directory is small during early rollout. Restore to 1200px (which
     fits 4 per row: 4*240 + 3*24 = 1032) when membership grows. */
  max-width: 800px;
  margin: 32px auto;
  padding: 0 16px;
}
.cert-directory-card {
  display: block;
  width: 240px;
  padding: 20px;
  background: #faf8ff;
  border-radius: 12px;
  text-decoration: none;
  color: inherit;
  text-align: center;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.cert-directory-card:hover {
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
}
.cert-directory-photo {
  width: 180px;
  height: 180px;
  object-fit: cover;
  /* Anchor the crop to the top of the image so faces in portrait photos
     don't get their heads chopped off. Default `center center` crops both
     top and bottom equally, which is bad for headshots. Keeping the top
     preserves faces; bottom (torso) gets clipped instead. */
  object-position: center top;
  border-radius: 8px;
  border: 1px solid #ddd;
  margin-bottom: 12px;
  display: block;
  margin-left: auto;
  margin-right: auto;
}
/* Tighten paragraph spacing inside cards. Uses `.cert-directory-card p`
   scope for enough specificity to win over the site's global `p` rule
   in styles.css which applies `padding-bottom: 16px`, `line-height: 1.5`,
   `text-align: justify`, and `font-size: 20px` — all of which would
   otherwise blow up the tight card layout. */
.cert-directory-card p {
  margin: 2px 0;
  padding: 0;
  text-align: center;
  text-decoration: none;
  line-height: 1.3;
}
.cert-directory-card .cert-directory-name {
  font-weight: bold;
  font-size: 18px;
  margin-top: 10px;
  color: #111;
}
.cert-directory-card .cert-directory-status {
  font-size: 14px;
  color: #5d4fad;
  font-weight: bold;
}
.cert-directory-card .cert-directory-location {
  font-size: 14px;
  color: #444;
}

/* Additional-CTSAs list (Phase 9 tier-2) — compact text roster for
   CTSAs not shown as featured member cards (non-members, lapsed,
   or active members with incomplete profiles). Sits below the card
   grid. Each row: name · credential · certified date, name is the
   link to /verify/CTSA-####. */
.cert-directory-list {
  list-style: none;
  padding: 0;
  margin: 16px auto 0 auto;
  max-width: 720px;
  text-align: center;
}
.cert-directory-list-row {
  padding: 0;
  margin: 6px 0;
  font-size: 16px;
  line-height: 1.4;
}
.cert-directory-list-row a {
  font-weight: bold;
}
.cert-directory-list-meta {
  color: #666;
  font-size: 14px;
}
/* Status label inside a list row. Kept neutral gray for the alphabetical
   list — the color/weight distinction only lives on the featured cards
   where members are the visual focus. */
.cert-directory-list-status {
  color: #666;
  font-size: 14px;
}

/* -------------------------------------------------------------------------
   Member benefits section — the "Your member benefits" card on the CTSA
   dashboard. Uses native <details>/<summary> so no JavaScript is needed;
   collapsibles stay closed by default to keep the page short.
   ------------------------------------------------------------------------- */

/* Subsection headings for the three benefit groups (Action items,
   Completed, Available benefits). Each has a colored status dot to the
   left so members can distinguish groups at a glance without reading
   the labels. Font-weight and size stay uniform across the three so
   they read as peer subsections. */
.benefit-subsection-heading {
  font-size: 20px;
  font-weight: bold;
  margin: 24px 0 4px 0;
  padding: 0;
  display: flex;
  align-items: center;
  gap: 10px;
}
/* Extra top margin only when this is the FIRST subsection heading in the
   card. Subsequent headings (Completed, Available) sit below preceding
   items and benefit from the larger spacing above. The :first-of-type
   rule zeroes out the top margin only on the first one so it sits
   close to the H2 above it. */
.benefit-subsection-heading:first-of-type {
  margin-top: 8px;
}
/* Colored status dot rendered as a ::before pseudo-element. Each group
   variant sets its own dot color via the modifier class. */
.benefit-subsection-heading::before {
  content: "";
  display: inline-block;
  width: 10px;
  height: 10px;
  border-radius: 50%;
  flex-shrink: 0;
}
.benefit-subsection-action::before {
  background: #6a3fbf;
}
.benefit-subsection-completed::before {
  background: #2e8b57;
}
.benefit-subsection-available::before {
  background: #999;
}

/* Wrapper around each benefit. Thin top border so the list has clear
   visual boundaries between items even when collapsed. `:last-of-type`
   applies to the LAST benefit-item in the card, which correctly draws a
   bottom border on the final evergreen item regardless of whether setup
   items appear above. */
.benefit-item {
  border-top: 1px solid #ddd;
  padding: 12px 0;
}
.benefit-item:last-of-type {
  border-bottom: 1px solid #ddd;
}

.benefit-item > summary {
  cursor: pointer;
  font-size: 18px;
  font-weight: bold;
  padding: 6px 0;
  list-style: none;
  position: relative;
  padding-right: 32px;
}
/* Hide the default triangle marker across browsers (Firefox uses
   ::-webkit-details-marker; Chrome/Safari use list-style: none). */
.benefit-item > summary::-webkit-details-marker {
  display: none;
}
/* Custom +/- indicator on the right edge of the summary. Rotates when
   the details element is open. */
.benefit-item > summary::after {
  content: "+";
  position: absolute;
  right: 8px;
  top: 50%;
  transform: translateY(-50%);
  font-size: 22px;
  font-weight: normal;
  color: #666;
}
.benefit-item[open] > summary::after {
  content: "−";
}
.benefit-item > summary:hover {
  color: #6a3fbf;
}

/* Body content of an expanded benefit. Slightly indented so it reads as
   a nested detail beneath the summary heading. */
.benefit-body {
  padding: 8px 4px 4px 4px;
  font-size: 16px;
  line-height: 1.5;
}
.benefit-body p {
  padding-bottom: 12px;
}
.benefit-body ul {
  padding: 0 0 12px 24px;
}
.benefit-body ul li {
  padding-bottom: 4px;
}
.benefit-body .order-now-button {
  display: inline-block;
  margin: 4px 0 8px 0;
}

/* Copyable code block used by the embeddable chart calculator benefit.
   Word-wrap so long iframe URLs don't force horizontal scroll on mobile. */
.benefit-code {
  background: #f5f5f5;
  border: 1px solid #ddd;
  padding: 12px;
  font-size: 13px;
  line-height: 1.5;
  white-space: pre-wrap;
  word-break: break-word;
  overflow-x: auto;
  margin: 8px 0 16px 0;
  font-family: Consolas, Monaco, monospace;
}

/* Copy button auto-injected by JS after every .benefit-code block on the
 * CTSA dashboard. Negative top margin pulls it up close to the code block. */
.copy-btn {
  display: inline-block;
  margin: -8px 0 16px 0;
  padding: 4px 12px;
  background: #f5f5f5;
  color: #444;
  border: 1px solid #ddd;
  border-radius: 4px;
  font-size: 13px;
  font-family: "OpenSans", sans-serif;
  cursor: pointer;
}

/* Credential card on the CTSA dashboard — the emotional payoff of the
   program, so it gets stronger visual weight than the surrounding cards:
   a purple accent stripe on top (evokes a certificate/diploma header) and
   a slightly deeper purple-tinted shadow. Additive to the base
   .dashboard-breakdown-card treatment. */
.cert-credential-card {
  border-top: 3px solid #5d4fad;
  box-shadow: 0 6px 20px rgba(93, 79, 173, 0.14), 0 2px 6px rgba(0, 0, 0, 0.06);
}

/* "Your CTSA Badge" section on the candidate dashboard — badge preview
   box and download link row. The badge sits in a bordered box so it
   stands out from the surrounding text and reads as an actual displayable
   asset. Kept small (140px) so it doesn't dominate the card. */
.cert-badge-owned {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  margin: 12px 0;
  background: #faf8ff;
  border: 1px solid #e6e0f2;
  border-radius: 8px;
}
.cert-badge-owned img {
  width: 140px;
  height: 140px;
  display: block;
}
.cert-badge-downloads {
  margin: 12px 0 20px;
  font-size: 16px;
}

/* Inline forms inside benefit collapsibles (True Sky access request,
   yearly-item confirm buttons). Input styling mirrors the site's
   .partner-form input convention (same font, padding, border, radius)
   so form elements look consistent across the site. Submit buttons use
   class="order-now-button" for the same reason — one button style
   sitewide. This wrapper only owns spacing between elements. */
.benefit-form {
  margin: 8px 0 4px 0;
}

/* Browsers render <button> elements with a default border and inner
   padding that don't apply to <a> elements. Since .order-now-button
   was designed for anchor tags across the site, applying it to a
   <button> exposes those defaults. This override strips them so form
   submit buttons visually match the anchor-based order-now-buttons
   next to them. */
button.order-now-button {
  border: none;
  cursor: pointer;
}
.benefit-form label {
  display: block;
  font-weight: bold;
  margin-bottom: 6px;
}
.benefit-form input[type="email"] {
  display: block;
  width: 100%;
  max-width: 400px;
  font-family: "OpenSans", sans-serif;
  color: #111;
  font-size: 16px;
  padding: 0 8px;
  height: 32px;
  border-radius: 4px;
  border: 1px solid;
  margin-bottom: 12px;
  box-sizing: border-box;
}

/* -----------------------------------------------------------------------
   Sidereal Astrology Course - Lessons list on the student dashboard.
   Card-style rows replacing the plain bullet list. Each row is an <a>
   wrapping a status circle + lesson body. Only used by course-dashboard.hbs;
   .course- prefix keeps them out of the cert namespace.
   ----------------------------------------------------------------------- */
.course-lessons {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 8px;
}
.course-lesson-row {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 14px 18px;
  border: 1px solid #e6e0f2;
  border-radius: 8px;
  background: #fff;
  text-decoration: none;
  color: inherit;
  transition: background 0.15s, border-color 0.15s, transform 0.05s;
}
.course-lesson-row:hover {
  background: #faf8ff;
  border-color: #d4c9ec;
}
.course-lesson-row:active {
  transform: scale(0.995);
}
.course-lesson-row.completed {
  background: #f5faf5;
  border-color: #cce4d3;
}
.course-lesson-row.next {
  border-color: #5d4fad;
  border-width: 2px;
  padding: 13px 17px; /* offset the extra 1px border so height stays consistent */
}
.course-lesson-status {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: #eeeaf5;
  color: #5d4fad;
  font-family: "OpenSans", sans-serif;
  font-weight: 600;
  flex-shrink: 0;
}
.course-lesson-row.completed .course-lesson-status {
  background: #2e8b57;
  color: #fff;
}
.course-lesson-check {
  font-size: 18px;
  line-height: 1;
}
.course-lesson-num {
  font-size: 16px;
  line-height: 1;
}
.course-lesson-body {
  flex: 1;
  min-width: 0;
}
.course-lesson-title {
  font-family: "OpenSans", sans-serif;
  font-size: 18px;
  font-weight: 500;
  color: #111;
  line-height: 1.3;
}
.course-lesson-meta {
  font-size: 13px;
  color: #666;
  margin-top: 4px;
}
.course-lesson-tag {
  font-family: "OpenSans", sans-serif;
  font-size: 12px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  color: #5d4fad;
  background: #eeeaf5;
  padding: 4px 10px;
  border-radius: 12px;
  flex-shrink: 0;
}
@media (max-width: 600px) {
  .course-lesson-row {
    padding: 12px 14px;
    gap: 12px;
  }
  .course-lesson-title {
    font-size: 16px;
  }
  .course-lesson-status {
    width: 32px;
    height: 32px;
  }
  .course-lesson-tag {
    display: none; /* hide "Start here" badge on narrow screens to preserve title space */
  }
}
