/* ─────────────────────────────────────────────────────────
   Jedah app — warm dark, editorial typography
   Shared stylesheet for all app/*.html pages.
   Design tokens live in design-tokens.css (imported below).
   ───────────────────────────────────────────────────────── */

@import './design-tokens.css';

/* (Marketing design overrides appended at end of file so cascade wins.) */

* { box-sizing: border-box; margin: 0; padding: 0; }
html, body { height: 100%; }
body {
  font-family: var(--font-body);
  background: var(--bg);
  color: var(--text);
  font-size: var(--fs-body);
  line-height: var(--lh-normal);
}
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }

/* ───── Shell ───── */
.shell {
  display: grid;
  grid-template-columns: var(--sidebar-w) 1fr;
  min-height: 100vh;
  transition: grid-template-columns var(--dur) var(--ease);
}

/* ───── Sidebar ───── */
.sidebar {
  background:
    linear-gradient(180deg,
      var(--bg-deep) 0%,
      var(--bg) 100%);
  border-right: 1px solid var(--hair);
  padding: var(--sp-6) 0 var(--sp-5);
  display: flex;
  flex-direction: column;
  gap: 0.125rem;
  position: sticky;
  top: 0;
  height: 100vh;
  overflow: hidden;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--hair-strong) transparent;
}
.sidebar::-webkit-scrollbar { width: 0.25rem; }
.sidebar::-webkit-scrollbar-track { background: transparent; }
.sidebar::-webkit-scrollbar-thumb {
  background: var(--hair-strong);
  border-radius: 2px;
}
.sidebar::-webkit-scrollbar-thumb:hover { background: var(--text-4); }

/* Brand block */
.brand {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: 0 var(--sp-5) var(--sp-6);
  margin-bottom: var(--sp-2);
  border-bottom: 1px solid var(--hair);
}
.brand-logo {
  width: 2.5rem; height: 2.5rem;
  background: transparent center/contain no-repeat url('/app/assets/jedah-logo-small.svg');
  position: relative;
  flex-shrink: 0;
}
.brand-logo::before { display: none; }
.brand-logo::after  { display: none; }
.brand-name {
  font-family: var(--font-display);
  font-size: var(--fs-h2);
  font-weight: 500;
  letter-spacing: var(--ls-tight);
  color: var(--text);
  line-height: 1.1;
}

/* Nav items */
.nav-section-label {
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  letter-spacing: var(--ls-widest);
  color: var(--text-4);
  text-transform: uppercase;
  padding: var(--sp-4) var(--sp-5) var(--sp-2);
}
.nav-section-label:first-of-type { padding-top: var(--sp-3); }
.nav-item {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-5);
  margin: 0.0625rem var(--sp-3);
  border-radius: var(--r);
  font-size: var(--fs-body-sm);
  color: var(--text-3);
  text-decoration: none;
  transition:
    color var(--dur) var(--ease),
    background var(--dur) var(--ease);
  position: relative;
}
.nav-item:hover { color: var(--text); background: var(--bg-tint); }
.nav-item.active {
  color: var(--text);
  background: var(--gold-fill);
  font-weight: 500;
}
.nav-item.active::before {
  content: '';
  position: absolute;
  left: calc(-1 * var(--sp-3));
  top: 0.4375rem;
  bottom: 0.4375rem;
  width: 0.1875rem;
  background: var(--gold);
  border-radius: 0 2px 2px 0;
  box-shadow: 0 0 8px var(--gold-glow);
}
.nav-item .nav-icon {
  width: 0.9375rem; height: 0.9375rem;
  flex-shrink: 0;
  color: var(--text-3);
  transition: color var(--dur) var(--ease);
}
.nav-item:hover .nav-icon,
.nav-item.active .nav-icon { color: var(--gold); }

/* Bottom nav: toggle + user block */
.nav-bottom {
  margin-top: auto;
  padding-top: var(--sp-3);
  border-top: 1px solid var(--hair);
}
.sidebar-toggle-btn {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  width: 100%;
  padding: var(--sp-2) var(--sp-5);
  margin: 0.0625rem var(--sp-3);
  border-radius: var(--r);
  font-size: var(--fs-body-sm);
  color: var(--text-4);
  background: none;
  border: none;
  cursor: pointer;
  margin-bottom: var(--sp-2);
  transition: color var(--dur) var(--ease), background var(--dur) var(--ease);
  white-space: nowrap;
  width: calc(100% - 2 * var(--sp-3));
}
.sidebar-toggle-btn:hover { color: var(--text-2); background: var(--bg-tint); }
.sidebar-chevron { width: 0.875rem; height: 0.875rem; transition: transform 0.22s ease; flex-shrink: 0; }

/* Collapsed sidebar */
.shell.sidebar-collapsed { --sidebar-w: 3.25rem; }
.shell.sidebar-collapsed .sidebar { padding: var(--sp-4) 0; overflow-x: hidden; overflow-y: auto; }
.shell.sidebar-collapsed .nav-label,
.shell.sidebar-collapsed .brand-name,
.shell.sidebar-collapsed .nav-section-label,
.shell.sidebar-collapsed .user-info,
.shell.sidebar-collapsed .signout-link { display: none; }
.shell.sidebar-collapsed .brand { justify-content: center; padding: 0 0 var(--sp-4); }
.shell.sidebar-collapsed .nav-item {
  justify-content: center;
  padding: 0.4375rem 0;
  gap: 0;
  font-size: 0;
  margin: 0.0625rem 0.25rem;
}
.shell.sidebar-collapsed .nav-item.active::before { display: none; }
.shell.sidebar-collapsed .sidebar-toggle-btn { justify-content: center; padding: 0.4375rem 0; margin-bottom: 0.25rem; width: 100%; }
.shell.sidebar-collapsed .sidebar-chevron { transform: rotate(180deg); }
.shell.sidebar-collapsed .user-chip { justify-content: center; padding: 0.375rem 0; }
.shell.sidebar-collapsed .nav-bottom { display: flex; flex-direction: column; align-items: center; }

/* User block */
.user-chip {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-5);
  font-size: var(--fs-body-sm);
}
.user-avatar {
  width: 1.75rem; height: 1.75rem;
  border-radius: 50%;
  background: var(--bg-elev);
  border: 1px solid var(--hair-strong);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  font-weight: 600;
  color: var(--text-2);
  flex-shrink: 0;
}
.user-info { line-height: 1.3; min-width: 0; }
.user-info .nm { font-weight: 500; color: var(--text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-size: var(--fs-body-sm); }
.user-info .em { font-size: var(--fs-tiny); color: var(--text-4); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; letter-spacing: var(--ls-wide); }
.signout-link { color: var(--text-4); font-size: var(--fs-tiny); margin-left: auto; }
.signout-link:hover { color: var(--text-2); }

/* ───── Content / Shell layout ───── */
.content {
  padding: 26px 36px 56px;
  max-width: var(--content-max);
}
.content-wide { max-width: var(--content-wide); }

/* Page header (legacy — kept for compatibility) */
.page-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--sp-6);
  margin-bottom: var(--sp-8);
  padding-bottom: var(--sp-5);
  border-bottom: 1px solid var(--hair);
}
.page-title {
  font-family: var(--font-display);
  font-size: var(--fs-display-lg);
  font-weight: 500;
  letter-spacing: var(--ls-display);
  color: var(--text);
  line-height: var(--lh-tight);
}
.page-sub { font-size: var(--fs-body-sm); color: var(--text-3); margin-top: var(--sp-1); }

/* ─── Section labels (legacy lbl class) ─── */
.lbl {
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  letter-spacing: var(--ls-widest);
  color: var(--text-4);
  text-transform: uppercase;
  font-weight: 500;
}

/* ───── Section labels ───── */
.lbl {
  font-size: 0.5625rem;
  letter-spacing: 1.8px;
  color: var(--text-4);
  text-transform: uppercase;
  font-weight: 500;
}

/* ───── Cards / lists ───── */
.card {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
}

/* ───── Dashboard ───── */
.dash-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.125rem;
  margin-bottom: 1.75rem;
}
.stat-card {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  padding: 1.125rem 1.25rem;
}
.stat-card .stat-num {
  font-size: 1.875rem;
  font-weight: 600;
  letter-spacing: -0.8px;
  line-height: 1;
  margin: 0.5rem 0 0.25rem;
}
.stat-card .stat-delta { font-size: 0.6875rem; color: var(--text-3); }
.section-h {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin: 2rem 0 0.875rem;
}
.section-h h2 { font: var(--type-card); }
.section-h a { font-size: 0.6875rem; color: var(--text-3); }
.section-h a:hover { color: var(--text); }

.list { display: flex; flex-direction: column; }
.list-row {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 1.125rem;
  align-items: center;
  padding: 0.875rem 1.125rem;
  border-top: 1px solid var(--hairline);
  transition: background 0.1s;
}
.list-row:first-child { border-top: none; }
.list-row:hover { background: var(--bg-2); }
.list-row .pri { font-size: var(--fs-body-sm); font-weight: 500; }
.list-row .sec { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.125rem; }
.list-row .time { font-size: 0.6875rem; color: var(--text-3); font-variant-numeric: tabular-nums; }
.list-row .arrow { color: var(--text-4); font-size: 0.875rem; }

.badge {
  display: inline-block;
  padding: 0.125rem 0.5rem;
  border-radius: 10px;
  font-size: 0.625rem;
  font-weight: 500;
  letter-spacing: 0.3px;
}
.badge.live { background: var(--text); color: var(--bg); }
.badge.upcoming { background: var(--bg-3); color: var(--text-2); border: 1px solid var(--hairline-strong); }
.badge.done { background: transparent; color: var(--text-3); border: 1px solid var(--hairline-strong); }

/* ───── Candidate page ───── */
.cand-header {
  display: flex;
  gap: 1.125rem;
  align-items: center;
  margin-bottom: 1.75rem;
}
.cand-avatar {
  width: 3.5rem; height: 3.5rem;
  border-radius: 50%;
  background: var(--bg-3);
  display: flex; align-items: center; justify-content: center;
  font-size: 1rem; font-weight: 500;
}
.cand-name { font-size: 1.375rem; font-weight: 600; letter-spacing: -0.4px; }
.cand-sub { font-size: var(--fs-caption); color: var(--text-3); margin-top: 0.25rem; }
.cand-sub b { color: var(--text); font-weight: 500; }

/* Career chart */
.chart-wrap {
  padding: 1.375rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  margin: 0.875rem 0 1.75rem;
}
.chart-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 1.125rem;
}
.chart-grid {
  position: relative;
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  height: 22.5rem;
}
.stage-col {
  position: relative;
  padding-top: 0.5rem;
  text-align: center;
}
.stage-col.target {
  background: linear-gradient(180deg, rgba(250,250,250,0.08), rgba(250,250,250,0.02) 80%);
  border-left: 0.5px dashed var(--hairline-strong);
  border-right: 0.5px dashed var(--hairline-strong);
}
.stage-col.target .stage-label {
  font-weight: 700;
}
.stage-col:not(.target) { border-left: 0.5px solid var(--surface-3); }
.stage-col:first-child { border-left: none; }
.stage-col .stage-label {
  font-size: 0.5625rem;
  letter-spacing: 1.8px;
  text-transform: uppercase;
  color: var(--text-4);
}
.stage-col.target .stage-label { color: var(--text); }
.stage-col .stage-range {
  font-size: 0.5625rem;
  color: var(--text-5);
  margin-top: 0.1875rem;
}
.stage-col.target .stage-range { color: var(--text-3); }

.dots-layer { position: absolute; inset: 2.5rem 0 2.25rem; }
.dot {
  position: absolute;
  transform: translate(-50%, -50%);
  cursor: pointer;
  transition: transform 0.18s;
}
.dot:hover { transform: translate(-50%, -50%) scale(1.15); }
.dot.highlight svg circle:first-child { stroke: var(--text); stroke-width: 2; }
/* Old multi-line label — kept for back-compat, but we now prefer .dot-pill */
.dot-label {
  position: absolute;
  left: 50%;
  top: 100%;
  transform: translateX(-50%);
  font-size: 0.5625rem;
  color: var(--text-3);
  margin-top: 0.25rem;
  white-space: nowrap;
  text-align: center;
}
.dot-label .rel { display: block; color: var(--text-5); }

/* New cleaner label — single short pill below each dot */
.dot-pill {
  position: absolute;
  left: 50%;
  top: 100%;
  transform: translateX(-50%);
  margin-top: 0.625rem;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.6875rem;
  letter-spacing: 0.3px;
  color: var(--text-2);
  padding: 0.25rem 0.625rem;
  background: var(--bg);
  border: 1px solid var(--hairline);
  border-radius: 11px;
  white-space: nowrap;
  pointer-events: none;
  line-height: 1.1;
}
.dot-pill.current {
  color: var(--bg);
  background: var(--text);
  border-color: var(--text);
  font-weight: 600;
}
.dot:hover .dot-pill {
  color: var(--text);
  border-color: var(--hairline-strong);
}
.target-mark {
  position: absolute;
  bottom: 0.375rem;
  left: 50%;
  transform: translateX(-50%);
  font-size: 0.625rem;
  letter-spacing: 1.8px;
  font-weight: 600;
  color: var(--text);
  background: var(--bg-2);
  padding: 0.1875rem 0.625rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 11px;
  white-space: nowrap;
}

/* Trajectory line connecting dots in time order */
.dots-line {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
  z-index: 0;
}
.dot { z-index: 1; }

/* Year rail — small year labels on the left edge of the chart, aligned
   to the same top% as each dot. */
.year-rail {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 2.375rem;
  pointer-events: none;
  z-index: 2;
}
.year-tick {
  position: absolute;
  left: 0;
  transform: translateY(-50%);
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.5625rem;
  color: var(--text-4);
  letter-spacing: 0.4px;
  padding: 0 0.25rem;
  background: var(--bg-2);
  border-radius: 3px;
}

/* Role list */
.roles { margin-bottom: 2rem; }
.role {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 1rem 0.5rem;
  border-top: 1px solid var(--hairline);
  cursor: pointer;
  border-radius: 4px;
  margin: 0 -0.5rem;
  transition: background 0.12s;
}
.role:hover { background: var(--bg-2); }
.role.highlight { background: var(--bg-3); }
.role:last-child { border-bottom: 1px solid var(--hairline); }
.role.faded .role-title { color: var(--text-3); }
.role-title { font-size: 0.875rem; font-weight: 500; }
.role-meta { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.25rem; }
.chips { display: flex; gap: 0.5rem; flex-shrink: 0; }
.chip {
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 0.3px;
  padding: 0.25rem 0.625rem;
  border-radius: 11px;
}
.chip.bright { background: var(--text); color: var(--bg); }
.chip.mute { background: var(--bg-3); color: var(--text-3); font-weight: 500; }
.chip.outline { background: transparent; border: 0.5px solid var(--hairline-strong); color: var(--text-3); font-weight: 500; }

/* Pattern read */
.pattern-read {
  display: grid;
  grid-template-columns: 10rem 1fr;
  gap: 1.75rem;
  padding: 1.5rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
}
.pattern-num { font-size: 2.75rem; font-weight: 600; letter-spacing: -1.2px; line-height: 1; }
.pattern-num-sub { font-size: 0.6875rem; color: var(--text-4); margin-top: 0.5rem; }
.pattern-read h3 { font-size: 0.875rem; font-weight: 500; margin-bottom: 0.625rem; }
.pattern-read p { font-size: var(--fs-caption); color: var(--text-3); margin-bottom: 0.375rem; line-height: 1.55; }
.pattern-read .ask { color: var(--text); font-weight: 500; margin-top: 0.875rem; }

/* ───── Career Trajectory Visualization (candidate.html) ───── */
#cand-trajectory-host {
  width: 100%;
  min-height: 27.5rem;
  margin-top: 0.25rem;
}
/* No chart mounted -> no reserved height. Without this, candidates with no
   work history showed a 440px dead zone above the empty-state text. */
#cand-trajectory-host:empty { min-height: 0; margin: 0; }
#cand-trajectory-empty {
  padding: 2rem 1rem;
  color: rgba(255,255,255,0.35);
  text-align: center;
  font-size: var(--fs-body-sm);
}

/* ───── Deep LinkedIn analysis (Claude narrative) ───── */
.deep-analysis-section { margin-bottom: 1.75rem; }
.deep-cta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.125rem;
  padding: 1.375rem 1.5rem;
  background: var(--bg-2);
  border: 1px dashed var(--hairline-strong);
  border-radius: 6px;
}
.deep-cta-text { font-size: var(--fs-caption); color: var(--text-3); line-height: 1.55; max-width: 33.75rem; }
.deep-empty {
  padding: 1.125rem 1.375rem;
  font-size: var(--fs-caption);
  color: var(--text-4);
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
}
.deep-loading {
  padding: 1.375rem 1.5rem;
  font-size: var(--fs-body-sm);
  color: var(--text-2);
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  display: flex;
  align-items: center;
  gap: 0.625rem;
}
.loading-dots { display: inline-flex; gap: 0.25rem; }
.loading-dots span {
  width: 0.25rem; height: 0.25rem; border-radius: 50%;
  background: var(--text-3);
  animation: loadingPulse 1.2s infinite;
}
.loading-dots span:nth-child(2) { animation-delay: 0.2s; }
.loading-dots span:nth-child(3) { animation-delay: 0.4s; }
@keyframes loadingPulse {
  0%, 80%, 100% { opacity: 0.2; }
  40% { opacity: 1; }
}

.deep-analysis {
  padding: 1.5rem 1.75rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
}
.pattern-read-prose {
  padding: 1.5rem 1.75rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
}
.pattern-read-prose p {
  font-size: var(--fs-body-sm);
  line-height: 1.65;
  color: var(--text-2);
  margin: 0 0 0.875rem;
}
.pattern-read-prose p:last-child { margin-bottom: 0; }
.deep-top {
  display: grid;
  grid-template-columns: 8.75rem 1fr;
  gap: 1.75rem;
  padding-bottom: 1.375rem;
  margin-bottom: 1.375rem;
  border-bottom: 1px solid var(--hairline);
}
.deep-score-num {
  font-size: var(--fs-display-2xl);
  font-weight: 600;
  letter-spacing: -1.6px;
  line-height: 1;
  color: var(--text);
}
.deep-score-lbl {
  font-size: 0.71875rem;
  color: var(--text-4);
  letter-spacing: 1.4px;
  text-transform: uppercase;
  margin-top: 0.625rem;
}
.deep-meta-row {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  margin-bottom: 0.875rem;
  flex-wrap: wrap;
}
.deep-tag {
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  padding: 0.25rem 0.6875rem;
  border-radius: 11px;
  background: var(--text);
  color: var(--bg);
}
.deep-tag.deep-traj-plateaued,
.deep-tag.deep-traj-lateral,
.deep-tag.deep-traj-mixed {
  background: var(--bg-3);
  color: var(--text);
  border: 1px solid var(--hairline-strong);
}
.deep-tag.deep-traj-declining {
  background: transparent;
  color: var(--text-2);
  border: 1px solid var(--hairline-strong);
}
.deep-conf {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.625rem;
  letter-spacing: 1.2px;
  color: var(--text-4);
}
.deep-summary {
  font-size: 0.875rem;
  color: var(--text);
  line-height: 1.55;
}
.deep-block { margin-bottom: 1.375rem; }
.deep-block:last-of-type { margin-bottom: 0; }
.deep-block-lbl {
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  color: var(--text-3);
  margin-bottom: 0.75rem;
}
.deep-item {
  display: flex;
  gap: 0.75rem;
  padding: 0.625rem 0;
  border-bottom: 1px solid var(--hairline);
  align-items: flex-start;
}
.deep-item:last-child { border-bottom: none; }
.deep-mark {
  flex-shrink: 0;
  width: 1.125rem;
  text-align: center;
  font-size: var(--fs-body-sm);
  color: var(--text);
  line-height: 1.55;
}
.deep-item-warn .deep-mark { color: var(--text-2); }
.deep-point {
  font-size: var(--fs-body-sm);
  color: var(--text);
  line-height: 1.55;
  margin-bottom: 0.1875rem;
}
.deep-ev {
  font-size: 0.6875rem;
  color: var(--text-3);
  font-family: 'IBM Plex Mono', monospace;
  letter-spacing: 0.2px;
}
.deep-probes {
  list-style: decimal;
  padding-left: 1.375rem;
  margin: 0;
}
.deep-probes li {
  font-size: var(--fs-body-sm);
  color: var(--text);
  line-height: 1.55;
  padding: 0.375rem 0;
}
.deep-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 1.125rem;
  padding-top: 0.875rem;
  border-top: 1px solid var(--hairline);
  font-size: 0.625rem;
  color: var(--text-4);
  letter-spacing: 0.6px;
}
.ai-conf {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.625rem;
  letter-spacing: 0.08em;
  color: rgba(212,168,100,0.70);
}
.deep-regen {
  background: transparent;
  border: 1px solid var(--hairline-strong);
  color: var(--text-3);
  font-size: 0.625rem;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  padding: 0.3125rem 0.6875rem;
  border-radius: 11px;
  cursor: pointer;
  font-family: inherit;
}
.deep-regen:hover { color: var(--text); border-color: var(--text-3); }
@media (max-width: 720px) {
  .deep-top { grid-template-columns: 1fr; gap: 1rem; }
}

/* ───── Enrichment (public-source research) ───── */
.enrichment-section { margin-bottom: 1.75rem; }
.enrich-cta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.125rem;
  padding: 1.375rem 1.5rem;
  background: var(--bg-2);
  border: 1px dashed var(--hairline-strong);
  border-radius: 6px;
}
.enrich-cta-text { font-size: var(--fs-caption); color: var(--text-3); line-height: 1.55; max-width: 33.75rem; }
.enrich-loading {
  padding: 1.375rem 1.5rem;
  font-size: var(--fs-body-sm);
  color: var(--text-2);
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  display: flex;
  align-items: center;
  gap: 0.625rem;
}
.enrich-error {
  padding: 1.125rem 1.375rem;
  font-size: var(--fs-caption);
  color: var(--text-2);
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 6px;
}
.enrich-panel {
  padding: 1.5rem 1.75rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
}
.enrich-signals {
  padding: 1rem 1.25rem;
  background: var(--bg);
  border: 1px solid var(--hairline-strong);
  border-radius: 6px;
  margin-bottom: 1.375rem;
}
.enrich-signals-lbl {
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  color: var(--text-3);
  margin-bottom: 0.625rem;
}
.enrich-signals ul {
  margin: 0;
  padding-left: 1.125rem;
  list-style: square;
}
.enrich-signals li {
  font-size: var(--fs-body-sm);
  color: var(--text);
  line-height: 1.55;
  padding: 0.1875rem 0;
}
.enrich-summary {
  font-size: 0.875rem;
  color: var(--text);
  line-height: 1.55;
  margin-bottom: 1.375rem;
  padding-bottom: 1.375rem;
  border-bottom: 1px solid var(--hairline);
}
.enrich-block { margin-bottom: 1.375rem; }
.enrich-block:last-of-type { margin-bottom: 0; }
.enrich-block-lbl {
  font-size: 0.625rem;
  font-weight: 600;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  color: var(--text-3);
  margin-bottom: 0.625rem;
}
.enrich-block p { font-size: var(--fs-body-sm); color: var(--text); line-height: 1.55; margin: 0; }
.enrich-list {
  list-style: none;
  margin: 0;
  padding: 0;
}
.enrich-list li {
  padding: 0.625rem 0;
  border-bottom: 1px solid var(--hairline);
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
}
.enrich-list li:last-child { border-bottom: none; }
.enrich-list .enrich-title {
  font-size: var(--fs-body-sm);
  color: var(--text);
  line-height: 1.45;
  margin-bottom: 0.1875rem;
}
.enrich-list .enrich-title a { color: var(--text); text-decoration: none; border-bottom: 1px solid var(--hairline-strong); }
.enrich-list .enrich-title a:hover { border-bottom-color: var(--text); }
.enrich-list .enrich-sub {
  font-size: 0.6875rem;
  color: var(--text-3);
  font-family: 'IBM Plex Mono', monospace;
  letter-spacing: 0.2px;
}
.enrich-gh {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.75rem;
}
.enrich-gh-head {
  font-size: var(--fs-caption);
  color: var(--text-2);
  font-family: 'IBM Plex Mono', monospace;
}
.enrich-gh-head a { color: var(--text); text-decoration: none; border-bottom: 1px solid var(--hairline-strong); }
.enrich-gh-repo {
  padding: 0.625rem 0;
  border-top: 1px solid var(--hairline);
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 0.625rem;
  align-items: baseline;
}
.enrich-gh-repo:last-child { padding-bottom: 0; }
.enrich-gh-repo .nm { font-size: var(--fs-body-sm); color: var(--text); }
.enrich-gh-repo .lang {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.625rem;
  letter-spacing: 1.2px;
  color: var(--text-3);
  text-transform: uppercase;
}
.enrich-gh-repo .stars {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.6875rem;
  color: var(--text-2);
}
.enrich-gh-repo .desc {
  grid-column: 1 / -1;
  font-size: var(--fs-caption);
  color: var(--text-3);
  line-height: 1.5;
  margin-top: 0.125rem;
}
.enrich-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 1.125rem;
  padding-top: 0.875rem;
  border-top: 1px solid var(--hairline);
  font-size: 0.625rem;
  color: var(--text-4);
  letter-spacing: 0.6px;
  gap: 0.75rem;
  flex-wrap: wrap;
}
.enrich-regen {
  background: transparent;
  border: 1px solid var(--hairline-strong);
  color: var(--text-3);
  font-size: 0.625rem;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  padding: 0.3125rem 0.6875rem;
  border-radius: 11px;
  cursor: pointer;
  font-family: inherit;
}
.enrich-regen:hover { color: var(--text); border-color: var(--text-3); }
.enrich-sources {
  margin-top: 1.125rem;
  font-size: 0.6875rem;
}
.enrich-sources summary {
  cursor: pointer;
  color: var(--text-3);
  letter-spacing: 1.2px;
  text-transform: uppercase;
  font-size: 0.625rem;
  padding: 0.375rem 0;
}
.enrich-sources summary:hover { color: var(--text); }
.enrich-sources ul {
  list-style: none;
  margin: 0.5rem 0 0;
  padding: 0;
}
.enrich-sources li {
  padding: 0.25rem 0;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.6875rem;
  word-break: break-all;
}
.enrich-sources a { color: var(--text-2); text-decoration: none; }
.enrich-sources a:hover { color: var(--text); }
.enrich-tier-lock {
  padding: 1.375rem 1.5rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 6px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.125rem;
}
.enrich-tier-lock-text { font-size: var(--fs-caption); color: var(--text-3); line-height: 1.55; max-width: 33.75rem; }
.enrich-tier-lock-text b { color: var(--text); }

/* ───── Interview live panel ───── */
.live-meta {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.6875rem;
  color: var(--text-3);
}
.live-dot {
  width: 0.375rem; height: 0.375rem;
  background: var(--c-danger);
  border-radius: 50%;
  animation: live-pulse 1.4s infinite;
}
@keyframes live-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } }

.tabs {
  display: flex;
  gap: 0.25rem;
  margin-bottom: 1.75rem;
  border-bottom: 1px solid var(--hairline);
}
.tab {
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  padding: 0.625rem 1rem 0.875rem;
  color: var(--text-4);
  background: transparent;
  border: none;
  border-bottom: 1.5px solid transparent;
  transition: color 0.12s, border-color 0.12s;
}
.tab:hover { color: var(--text-2); }
.tab.active { color: var(--text); border-bottom-color: var(--text); }
/* Tab panels — visible by default, hidden when the page JS sets the
   native `hidden` attribute. Was originally `.tab-panel { display:none; }`
   + `.tab-panel.active { display:block; }` but the JS in job-descriptions.html
   toggles `p.hidden = X` (sets the HTML `hidden` attribute), NOT a class.
   That mismatch made the JD library panel collapse to 0 height forever
   even though its children rendered — the 18 JDs were invisible because
   their parent was `display:none`. Switching to the [hidden] attribute
   selector aligns CSS with what the JS is actually doing. */
.tab-panel { display: block; }
.tab-panel[hidden] { display: none !important; }
.tab-panel.active { display: block; }   /* kept for any callers that still use the class */

/* Rubric */
.rubric { display: flex; flex-direction: column; }
.rubric-row {
  display: grid;
  grid-template-columns: 14.375rem 1fr 4.875rem;
  gap: 1.25rem;
  align-items: center;
  padding: 1rem 0;
  border-bottom: 1px solid var(--hairline);
}
.rubric-row:last-child { border-bottom: none; }
.rubric-name { font-size: var(--fs-body-sm); font-weight: 500; }
.rubric-name small { display: block; font-size: var(--fs-caption); color: var(--text-4); margin-top: 0.1875rem; font-weight: 400; line-height: 1.4; }
.rubric-bar {
  height: 0.5rem;
  background: var(--bg-3);
  border-radius: 4px;
  overflow: hidden;
}
.rubric-fill { height: 100%; background: var(--text); border-radius: 4px; transition: width 0.4s; }
.rubric-fill.weak { background: var(--text-3); }
.rubric-fill.tbd { background: repeating-linear-gradient(90deg, var(--hairline-strong) 0 6px, transparent 6px 12px); }
.rubric-score { font-size: var(--fs-h2); font-weight: 600; text-align: right; font-variant-numeric: tabular-nums; }
.rubric-score.weak { color: var(--text-3); }
.rubric-score.tbd { color: var(--text-5); }

.suggested {
  margin-top: 1.75rem;
  padding: 1.25rem;
  background: var(--bg-2);
  border-left: 2px solid var(--text);
  border-radius: 6px;
}
.suggested-lbl {
  font-size: 0.5625rem;
  letter-spacing: 1.8px;
  text-transform: uppercase;
  color: var(--text);
  margin-bottom: 0.625rem;
}
.suggested-q { font-size: 0.875rem; line-height: 1.5; }
.suggested-why { font-size: 0.6875rem; color: var(--text-4); margin-top: 0.625rem; font-style: italic; }

/* Transcript */
.transcript { display: flex; flex-direction: column; }
.utt {
  display: grid;
  grid-template-columns: 3.5rem 6rem 1fr;
  gap: 0.875rem;
  padding: 0.75rem 0;
  align-items: start;
  border-bottom: 1px solid var(--hairline);
}
.utt-time { font-family: 'IBM Plex Mono', monospace; font-size: 0.625rem; color: var(--text-4); padding-top: 0.125rem; }
.utt-spk { font-size: 0.625rem; font-weight: 600; letter-spacing: 1px; text-transform: uppercase; padding-top: 0.125rem; }
.utt-spk.intvw { color: var(--text-3); }
.utt-spk.cand { color: var(--text); }
.utt-text { font-size: var(--fs-body-sm); line-height: 1.55; color: var(--text-2); }
.utt.flag { background: var(--bg-2); margin: 0 -1.25rem; padding: 0.75rem 1.25rem; }
.utt-evidence {
  font-size: 0.6875rem;
  color: var(--text);
  margin-top: 0.5rem;
  padding-left: 0.625rem;
  border-left: 2px solid var(--text);
}

/* Settings */
.setup-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.125rem;
  margin-bottom: 1.75rem;
}
.setup-card {
  padding: 1.125rem;
  border: 1px solid var(--hairline);
  border-radius: 6px;
}
.setup-card .lbl { display: block; margin-bottom: 0.5rem; }
.setup-card-val { font-size: 0.875rem; font-weight: 500; }
.setup-card-sub { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.25rem; }
.setup-row {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 0.875rem 0;
  border-top: 1px solid var(--hairline);
  font-size: var(--fs-body-sm);
}
.setup-row span:first-child { color: var(--text-3); }
.toggle {
  display: inline-block;
  width: 2rem; height: 1rem;
  background: var(--bg-3);
  border-radius: 8px;
  position: relative;
  cursor: pointer;
  transition: background 0.15s;
}
.toggle.on { background: var(--text); }
.toggle::after {
  content: '';
  position: absolute;
  top: 0.125rem; left: 0.125rem;
  width: 0.75rem; height: 0.75rem;
  background: var(--text-4);
  border-radius: 50%;
  transition: left 0.18s, background 0.18s;
}
.toggle.on::after { left: 1.125rem; background: var(--bg); }

/* Integration rows — non-clickable status, never a lying toggle */
.integration-row { align-items: flex-start; }
.integration-row > span:first-child {
  display: flex; flex-direction: column; gap: 0.1875rem;
  color: var(--text-3);
}
.integration-name { font-size: var(--fs-body-sm); color: var(--text-2, var(--text-3)); font-weight: 500; }
.integration-sub { font-size: 0.6875rem; color: var(--text-4); }
.integration-badge {
  display: inline-block;
  font-size: 0.625rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 0.25rem 0.5rem;
  border-radius: 4px;
  white-space: nowrap;
  cursor: default;
  user-select: none;
  font-weight: 500;
  align-self: center;
}
.integration-badge-private {
  border: 1px solid var(--hairline-strong);
  color: var(--text-3);
  background: transparent;
}
.integration-badge-soon {
  border: 1px dashed var(--hairline-strong);
  color: var(--text-5);
  background: transparent;
  opacity: 0.75;
}

/* Inline "How do I connect this?" expandable help under each integration row */
.integration-help {
  font-size: 0.6875rem;
  color: var(--text-3);
  border-top: 1px solid var(--hairline);
  padding: 0.375rem 0 0.625rem;
}
.integration-help > summary {
  list-style: none;
  cursor: pointer;
  color: var(--text-3);
  font-size: 0.6875rem;
  padding: 0.125rem 0;
  display: inline-block;
  text-decoration: underline;
  text-decoration-style: dotted;
  text-underline-offset: 3px;
  user-select: none;
}
.integration-help > summary::-webkit-details-marker { display: none; }
.integration-help > summary::marker { content: ""; }
.integration-help .ih-close { display: none; }
.integration-help[open] > summary .ih-open { display: none; }
.integration-help[open] > summary .ih-close { display: inline; }
.integration-help ol {
  margin: 0.5rem 0 0;
  padding: 0.5rem 0.75rem 0.5rem 1.75rem;
  border: 1px solid var(--hairline);
  border-radius: 4px;
  background: transparent;
  line-height: 1.6;
}
.integration-help ol li { margin: 0.125rem 0; }
.integration-help a { color: var(--text-2, var(--text-3)); text-decoration: underline; }
.integration-help .ih-link { margin: 0.375rem 0 0; padding: 0 0.25rem; font-size: 0.6875rem; color: var(--text-4); }

/* Greenhouse note-author config row (only visible when GH is connected) */
.gh-author-row {
  padding: 0.625rem 0 0.875rem;
  border-top: 1px solid var(--hairline);
  display: flex; flex-direction: column; gap: 0.375rem;
}
.gh-author-row .gh-author-lbl { font-size: 0.6875rem; color: var(--text-3); letter-spacing: 0.08em; text-transform: uppercase; }
.gh-author-row .gh-author-sub { font-size: 0.6875rem; color: var(--text-4); line-height: 1.5; }
.gh-author-row .gh-author-form { display: flex; gap: 0.5rem; flex-wrap: wrap; align-items: center; }
.gh-author-row .gh-author-form input {
  padding: 0.375rem 0.625rem; background: var(--bg); border: 1px solid var(--hairline-strong);
  color: var(--text); font-family: inherit; font-size: var(--fs-body-sm); border-radius: 4px; width: 10rem;
}
.gh-author-row .gh-author-status { font-size: var(--fs-caption); color: var(--text-3); }
.gh-author-row .gh-author-warn { font-size: var(--fs-caption); color: var(--c-danger-text); }

/* Empty states / hints */
.hint { font-size: 0.6875rem; color: var(--text-5); text-align: center; padding-top: 1.5rem; }

/* ── "What is this?" tooltip ────────────────────────────────────────── */
.jedah-tip { position: relative; display: inline-flex; align-items: center; }
.jedah-tip-btn {
  width: 1rem; height: 1rem; border-radius: 50%;
  border: 1px solid var(--hairline-strong); background: transparent;
  color: var(--text-4); font-size: 0.625rem; font-family: 'IBM Plex Mono', monospace;
  cursor: pointer; display: inline-flex; align-items: center; justify-content: center;
  line-height: 1; padding: 0; margin-left: 0.375rem; flex-shrink: 0;
  transition: border-color .15s, color .15s;
}
.jedah-tip-btn:hover { border-color: var(--text-3); color: var(--text-2); }
.jedah-tip-popup {
  display: none; position: absolute; bottom: calc(100% + 0.5rem); left: 0;
  min-width: 15rem; max-width: 17.5rem; z-index: 200;
  /* TODO: var(--bg-tint) has no exact token — sits between surface-2 and surface-3;
     deliberately a step lighter than the page to visually lift the popup. */
  background: var(--bg-tint); border: 1px solid var(--hairline-strong);
  border-radius: var(--radius-sm); padding: 0.875rem 1rem; font-size: var(--fs-body-sm);
  color: var(--text-2); line-height: 1.5; box-shadow: 0 8px 24px rgba(0,0,0,.4);
  font-family: 'IBM Plex Sans', sans-serif; font-weight: 400;
  letter-spacing: 0; text-transform: none;
}
.jedah-tip-popup strong { color: var(--text); font-weight: 600; }
.jedah-tip.open .jedah-tip-popup { display: block; }

/* ===== People dashboard ===== */

/* Stats row */
.stats-row {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 0.875rem;
  margin-bottom: 2.25rem;
}
.stats-row .stat-card { padding: 1rem 1.125rem; }
.stat-card .stat-num { display: flex; align-items: baseline; gap: 0.625rem; }
.stat-trend { font-size: 0.6875rem; font-weight: 500; letter-spacing: 0.5px; color: var(--text-3); }
.stat-trend.up { color: var(--text); }
.stat-trend.down { color: var(--text-3); }
.stat-card.stat-warn { border-color: var(--text); }
.stat-card.stat-warn .stat-num { color: var(--text); }

/* People grid */
.people-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.875rem;
  margin-bottom: 0.75rem;
}
@media (max-width: 1080px) { .people-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 720px)  { .people-grid { grid-template-columns: 1fr; } }

.person-card {
  display: flex;
  flex-direction: column;
  gap: 0.875rem;
  padding: 1.125rem 1.25rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  color: var(--text);
  transition: border-color 0.15s, transform 0.15s, background 0.15s;
}
.person-card:hover {
  border-color: var(--hairline-strong);
  background: var(--bg-3);
  transform: translateY(-1px);
}
.person-card-warn {
  border-color: var(--text);
}
.person-card-warn:hover { background: var(--surface-3); }

.person-head { display: flex; align-items: center; gap: 0.75rem; }
.person-avatar {
  width: 2.25rem; height: 2.25rem;
  border-radius: 50%;
  background: var(--bg-3);
  display: flex; align-items: center; justify-content: center;
  font-size: var(--fs-caption); font-weight: 500;
  flex-shrink: 0;
}
.person-meta { min-width: 0; }
.person-name { font-size: 0.875rem; font-weight: 600; letter-spacing: -0.2px; display: flex; align-items: center; gap: 0.375rem; }
.person-role { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.125rem; }
.warn-dot {
  display: inline-block;
  width: 0.375rem; height: 0.375rem;
  background: var(--text);
  border-radius: 50%;
}

.person-foot {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 0.625rem;
  align-items: center;
  padding-top: 0.875rem;
  border-top: 1px solid var(--hairline);
}
.align-block { display: flex; flex-direction: column; }
.align-num { font-size: 1.375rem; font-weight: 600; letter-spacing: -0.4px; line-height: 1; }
.align-lbl { font-size: 0.5625rem; letter-spacing: 1.4px; color: var(--text-4); text-transform: uppercase; margin-top: 0.375rem; }
.sparkline { width: 5rem; height: 1.75rem; display: block; }
.trend {
  font-size: 1rem;
  font-weight: 500;
  line-height: 1;
  width: 1.5rem; height: 1.5rem;
  display: flex; align-items: center; justify-content: center;
  border-radius: 50%;
}
.trend.up { background: var(--text); color: var(--bg); }
.trend.down { background: transparent; color: var(--text); border: 1px solid var(--text); }
.trend.flat { background: var(--bg-3); color: var(--text-3); }

.person-tail {
  font-size: 0.6875rem;
  color: var(--text-3);
  letter-spacing: 0.1px;
}
.person-tail b { color: var(--text); font-weight: 500; }

/* ===== Employee detail page ===== */
.emp-hero {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 1.375rem;
  align-items: center;
  padding: 1.375rem 1.5rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  margin-bottom: 1.125rem;
}
.emp-avatar { width: 3.5rem; height: 3.5rem; border-radius: 50%; background: var(--bg-3); display: flex; align-items: center; justify-content: center; font-size: 1rem; font-weight: 500; }
.emp-avatar-large { width: 4rem; height: 4rem; font-size: 1.125rem; }
.emp-name { font-size: 1.375rem; font-weight: 600; letter-spacing: -0.4px; }
.emp-role { font-size: var(--fs-body-sm); color: var(--text-2); margin-top: 0.25rem; }
.emp-meta { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.5rem; }
.emp-hero-stats { text-align: right; }
.emp-stat-num { font-size: 2.25rem; font-weight: 600; letter-spacing: -1px; line-height: 1; }
.emp-stat-num.warn { color: var(--text); }
.emp-stat-lbl { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.375rem; }

.banner-warn {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0.875rem;
  align-items: center;
  padding: 0.875rem 1.125rem;
  background: var(--bg-2);
  border: 1px solid var(--text);
  border-radius: 6px;
  margin-bottom: 1.75rem;
  font-size: var(--fs-caption);
  line-height: 1.55;
  color: var(--text-2);
}
.banner-warn b { color: var(--text); font-weight: 600; }
.banner-warn-icon {
  font-size: 1.125rem;
  color: var(--text);
  line-height: 1;
  width: 1.75rem; height: 1.75rem;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--text);
  border-radius: 50%;
}

/* Themes grid */
.theme-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.875rem;
}
@media (max-width: 980px) { .theme-grid { grid-template-columns: 1fr; } }
.theme-card {
  padding: 1.25rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  position: relative;
}
.theme-num {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.625rem;
  letter-spacing: 2px;
  color: var(--text-4);
  margin-bottom: 0.625rem;
}
.theme-title { font-size: 0.875rem; font-weight: 600; margin-bottom: 0.625rem; line-height: 1.35; }
.theme-body { font-size: var(--fs-caption); color: var(--text-3); line-height: 1.55; margin-bottom: 0.875rem; }
.theme-tags { display: flex; flex-wrap: wrap; gap: 0.375rem; }
.theme-tags span {
  font-size: 0.625rem;
  letter-spacing: 0.3px;
  padding: 0.1875rem 0.5rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 10px;
  color: var(--text-3);
}

/* Drift comparison */
.drift-row {
  display: grid;
  grid-template-columns: 1fr 2.25rem 1fr;
  gap: 1.125rem;
  align-items: center;
  padding: 1.25rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  margin-top: 0.75rem;
}
.drift-col { padding: 0.25rem 0; }
.drift-when { font-size: 0.5625rem; letter-spacing: 1.8px; color: var(--text-4); text-transform: uppercase; margin-bottom: 0.625rem; }
.drift-quote { font-size: 0.875rem; line-height: 1.5; }
.drift-quote b { font-weight: 600; }
.drift-note { font-size: 0.625rem; color: var(--text-5); margin-top: 0.5rem; font-style: italic; }
.drift-arrow { font-size: 1.375rem; color: var(--text-4); text-align: center; }

/* Check-in list */
.checkin-list { display: flex; flex-direction: column; }
.checkin-row {
  display: grid;
  grid-template-columns: 4.375rem 1fr 3.125rem 8.75rem;
  gap: 1rem;
  align-items: center;
  padding: 0.875rem 0.5rem;
  border-top: 1px solid var(--hairline);
  font-size: var(--fs-caption);
}
.checkin-row:last-child { border-bottom: 1px solid var(--hairline); }
.checkin-date { font-family: 'IBM Plex Mono', monospace; font-size: 0.6875rem; color: var(--text-3); }
.checkin-q { color: var(--text-2); font-style: italic; }
.checkin-score { font-size: 1.125rem; font-weight: 600; text-align: center; font-variant-numeric: tabular-nums; }
.checkin-theme { font-size: 0.625rem; letter-spacing: 0.3px; color: var(--text-3); padding: 0.25rem 0.5rem; background: var(--bg-2); border: 1px solid var(--hairline); border-radius: 10px; text-align: center; }

/* Review packet */
.packet {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  padding: 1.75rem 2rem;
}
.packet-section { padding: 1.125rem 0; border-bottom: 1px solid var(--hairline); }
.packet-section:first-child { padding-top: 0; }
.packet-section:last-of-type { border-bottom: none; }
.packet-section-lbl {
  font-size: 0.5625rem;
  letter-spacing: 1.8px;
  color: var(--text-4);
  text-transform: uppercase;
  margin-bottom: 0.625rem;
  font-weight: 500;
}
.packet-section p {
  font-size: var(--fs-body-sm);
  line-height: 1.6;
  color: var(--text-2);
  max-width: 45rem;
}
.packet-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding-top: 1.125rem;
  margin-top: 0.375rem;
  border-top: 1px solid var(--hairline-strong);
}

/* Tighter rubric layout when used on employee tabs */
.tabs[data-tabs="emp"] { margin-bottom: 1.5rem; }

/* Mobile tweaks for new pieces */
@media (max-width: 760px) {
  .stats-row { grid-template-columns: 1fr 1fr; }
  .emp-hero { grid-template-columns: 1fr; text-align: center; }
  .emp-hero-stats { text-align: center; }
  .drift-row { grid-template-columns: 1fr; }
  .drift-arrow { transform: rotate(90deg); }
  .checkin-row { grid-template-columns: 3.75rem 1fr 2.5rem; }
  .checkin-row .checkin-theme { display: none; }
}


/* Mobile */
@media (max-width: 760px) {
  .shell { grid-template-columns: 1fr; }
  .sidebar { position: static; height: auto; flex-direction: row; flex-wrap: wrap; padding: 0.875rem 1.125rem; }
  .nav-section-label { display: none; }
  .nav-item { padding: 0.375rem 0.625rem; font-size: var(--fs-caption); }
  .brand { padding: 0 0.625rem 0 0; margin: 0; border: none; border-right: 1px solid var(--hairline); padding-right: 0.875rem; }
  .nav-bottom { display: none; }
  .content { padding: 1.375rem 1.125rem 2.5rem; }
  .dash-grid { grid-template-columns: 1fr; }
  .rubric-row { grid-template-columns: 1fr 1fr 3.75rem; }
  .pattern-read { grid-template-columns: 1fr; gap: 1rem; }
  .setup-grid { grid-template-columns: 1fr; }
}

/* ===== Simple people grid (dashboard) ===== */
.people-grid-simple {
  display: grid;
  /* Was 3-col — bumped to 4-col on wide screens so two rows of 4 (8 tiles)
     fit above the fold instead of needing 3 rows. */
  grid-template-columns: repeat(4, 1fr);
  gap: 0.5rem;
  margin-bottom: 0;
}
@media (max-width: 1280px) { .people-grid-simple { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 1080px) { .people-grid-simple { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 720px)  { .people-grid-simple { grid-template-columns: 1fr; } }

.person-tile {
  display: grid;
  grid-template-columns: auto 1fr auto auto;
  gap: 0.625rem;
  align-items: center;
  /* Tighter padding so each tile is shorter — combined with 4-col grid,
     drops the team page from ~10 rows of scrolling to ~3. */
  padding: 10px 12px;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 7px;
  color: var(--text);
  transition: background 0.12s, border-color 0.12s, transform 0.12s;
}
.emp-edit-btn {
  background: transparent;
  border: none;
  color: var(--text-4);
  font-size: var(--fs-body-sm);
  cursor: pointer;
  padding: 0.125rem 0.25rem;
  border-radius: 4px;
  line-height: 1;
  opacity: 0;
  transition: opacity 0.12s, color 0.12s;
}
.person-tile:hover .emp-edit-btn { opacity: 1; }
.emp-edit-btn:hover { color: var(--text); }
.person-tile:hover {
  border-color: var(--hairline-strong);
  background: var(--bg-3);
  transform: translateY(-1px);
}
.person-tile-warn { border-color: var(--text); }
.person-tile-warn:hover { background: var(--surface-3); }
.person-tile .person-avatar { width: 1.75rem; height: 1.75rem; border-radius: 50%; background: var(--bg-3); display: flex; align-items: center; justify-content: center; font-size: 0.625rem; font-weight: 500; flex-shrink: 0; }
.person-tile .person-info { min-width: 0; }
.person-tile .person-name { font-size: var(--fs-body-sm); font-weight: 500; line-height: 1.2; }
.person-tile .person-role { font-size: var(--fs-mono); color: var(--text-3); margin-top: 0.0625rem; line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.person-status { width: 0.5rem; height: 0.5rem; border-radius: 50%; flex-shrink: 0; }
.person-status.status-good { background: var(--text); }
.person-status.status-flat { background: var(--text-4); }
.person-status.status-warn {
  background: var(--text);
  box-shadow: 0 0 0 2px rgba(250,250,250,0.2);
  animation: tile-pulse 1.6s infinite;
}
@keyframes tile-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } }

/* ===== Check-in compose ===== */
.checkin-compose {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 10px;
  overflow: hidden;
  margin-bottom: 1.5rem;
}
.compose-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  padding: 1.375rem 1.625rem 1.25rem;
  border-bottom: 1px solid var(--hairline);
  gap: 1.125rem;
}
.compose-title { font-size: var(--fs-h3); font-weight: 600; letter-spacing: -0.2px; }
.compose-sub { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.375rem; max-width: 36.25rem; line-height: 1.55; }
.compose-list { display: flex; flex-direction: column; }
.compose-row {
  display: grid;
  grid-template-columns: 13.75rem 1fr auto;
  gap: 1.125rem;
  align-items: center;
  padding: 0.875rem 1.625rem;
  border-top: 1px solid var(--hairline);
}
.compose-row-warn { background: rgba(250,250,250,0.025); }
.compose-person { display: flex; gap: 0.625rem; align-items: center; min-width: 0; }
.person-avatar.small { width: 1.75rem; height: 1.75rem; font-size: 0.625rem; }
.compose-name { font-size: var(--fs-body-sm); font-weight: 600; }
.compose-context { font-size: 0.625rem; color: var(--text-3); margin-top: 0.1875rem; line-height: 1.4; }
.compose-context.warn { color: var(--text); font-weight: 500; }
.compose-question { font-size: var(--fs-caption); line-height: 1.55; color: var(--text-2); font-style: italic; padding: 0 0.375rem; }
@media (max-width: 880px) {
  .compose-row { grid-template-columns: 1fr; gap: 0.625rem; }
  .compose-row button { align-self: flex-start; }
  .compose-head { flex-direction: column; }
}
.auto-cadence { color: var(--text-3); }
.auto-cadence b { color: var(--text); font-weight: 500; }

/* ===== This week's responses (manager view) ===== */
.checkin-responses {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 10px;
  overflow: hidden;
  margin-bottom: 1.5rem;
}
.responses-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  padding: 1.375rem 1.625rem 1.25rem;
  border-bottom: 1px solid var(--hairline);
  gap: 1.125rem;
}
.responses-title { font-size: var(--fs-h3); font-weight: 600; letter-spacing: -0.2px; }
.responses-sub   { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.375rem; }
.responses-meta  { font-size: 0.6875rem; color: var(--text-3); font-family: 'IBM Plex Mono', monospace; letter-spacing: 0.04em; padding-top: 0.25rem; }
.responses-list  { display: flex; flex-direction: column; }
.resp-row {
  display: block;
  text-decoration: none;
  color: inherit;
  padding: 0.875rem 1.625rem 1rem;
  border-top: 1px solid var(--hairline);
  transition: background 0.1s;
}
.resp-row:hover { background: rgba(250,250,250,0.025); }
.resp-row-head { display: flex; justify-content: space-between; align-items: center; gap: 0.875rem; }
.resp-name     { font-size: var(--fs-body-sm); font-weight: 600; }
.resp-role     { color: var(--text-3); font-weight: 400; }
.resp-meta     { display: flex; gap: 0.75rem; align-items: center; flex-shrink: 0; }
.resp-score    { font-family: 'IBM Plex Mono', monospace; font-size: var(--fs-caption); color: var(--text); font-weight: 500; }
.resp-status   { font-family: 'IBM Plex Mono', monospace; font-size: 0.625rem; letter-spacing: 0.06em; text-transform: uppercase; padding: 0.1875rem 0.4375rem; border-radius: 3px; }
.status-responded { background: rgba(120, 200, 145, 0.12); color: var(--sage-bright); }
.status-pending   { background: rgba(200, 200, 200, 0.08); color: var(--text-3); }
.resp-time     { font-family: 'IBM Plex Mono', monospace; font-size: 0.625rem; color: var(--text-4); }
.resp-theme    { font-size: var(--fs-caption); color: var(--text-2); margin-top: 0.5rem; line-height: 1.5; padding-left: 0.125rem; }
.resp-theme-muted { color: var(--text-4); font-style: italic; }
@media (max-width: 880px) {
  .resp-row-head { flex-direction: column; align-items: flex-start; gap: 0.5rem; }
  .resp-meta { flex-wrap: wrap; }
  .responses-head { flex-direction: column; }
}

/* ===== Modals + dropdowns ===== */
.modal-backdrop {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.65);
  display: none;
  align-items: center;
  justify-content: center;
  z-index: 100;
  padding: 1.5rem;
}
.modal-backdrop.open { display: flex; }
.modal {
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 10px;
  padding: 1.75rem 2rem;
  max-width: 32.5rem;
  width: 100%;
  max-height: 90vh;
  overflow-y: auto;
}
.modal-head { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 1.5rem; }
.modal-title { font: var(--type-section); letter-spacing: -0.3px; }
.modal-sub { font-size: var(--fs-caption); color: var(--text-3); margin-top: 0.25rem; }
.modal-close {
  background: transparent;
  border: none;
  color: var(--text-3);
  font-size: 1.125rem;
  line-height: 1;
  cursor: pointer;
  padding: 0.25rem 0.5rem;
}
.modal-close:hover { color: var(--text); }
.field { display: flex; flex-direction: column; gap: 0.375rem; margin-bottom: 1rem; }
.field label { font-size: 0.6875rem; letter-spacing: 1.6px; color: var(--text-4); text-transform: uppercase; font-weight: 500; }
.field input, .field select, .field textarea {
  background: var(--bg);
  border: 1px solid var(--hairline-strong);
  color: var(--text);
  font-family: inherit;
  font-size: var(--fs-body-sm);
  padding: 0.5625rem 0.75rem;
  border-radius: 6px;
  outline: none;
  transition: border-color 0.12s;
}
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--text); }
.modal-actions { display: flex; gap: 0.5rem; justify-content: flex-end; margin-top: 1.125rem; }

.dropdown { position: relative; display: inline-block; }
.dropdown-menu {
  position: absolute;
  top: calc(100% + 0.375rem);
  right: 0;
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  padding: 0.5rem;
  min-width: 13.75rem;
  display: none;
  z-index: 50;
  box-shadow: 0 8px 32px rgba(0,0,0,0.6);
}
.dropdown-menu.open { display: block; }
.dropdown-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0.5rem 0.75rem;
  border-radius: 4px;
  font-size: var(--fs-caption);
  cursor: pointer;
  color: var(--text-2);
}
.dropdown-item:hover { background: var(--bg-3); color: var(--text); }
.dropdown-item.checked { color: var(--text); }
.dropdown-item.checked::after { content: '✓'; }

/* ===== Candidate page — chart legend / how-to-read ===== */
.how-to-read {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1.125rem;
  padding: 1rem 1.375rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  margin: 0 0 0.5rem;
}
.how-to-read-item { font-size: 0.6875rem; color: var(--text-3); line-height: 1.5; }
.how-to-read-item b { color: var(--text); font-weight: 500; display: block; margin-bottom: 0.25rem; font-size: 0.625rem; letter-spacing: 1.4px; text-transform: uppercase; }
@media (max-width: 880px) { .how-to-read { grid-template-columns: repeat(2, 1fr); } }

.chip-legend {
  font-size: 0.6875rem;
  color: var(--text-3);
  margin: 0.5rem 0 0.875rem;
  padding: 0.75rem 1.125rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  display: flex;
  gap: 1.375rem;
  flex-wrap: wrap;
  line-height: 1.5;
}
.chip-legend b { color: var(--text); font-weight: 500; }
.chip-legend .chip { margin-right: 0.375rem; vertical-align: middle; }

/* ===== Interview stage tracker ===== */
.stage-tracker {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 0;
  padding: 1.125rem 1.375rem 0.875rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 10px;
  margin-bottom: 0.625rem;
  position: relative;
}
.stage-tracker::before {
  content: '';
  position: absolute;
  left: calc(8.333% + 0.25rem);
  right: calc(8.333% + 0.25rem);
  top: 1.625rem;
  height: 0.0625rem;
  background: var(--hairline);
  z-index: 0;
}
.stage-step {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.5rem;
  position: relative;
  z-index: 1;
}
.stage-dot {
  width: 0.75rem;
  height: 0.75rem;
  border-radius: 50%;
  background: var(--bg-3);
  border: 1px solid var(--hairline-strong);
  transition: background 0.2s, border-color 0.2s, transform 0.2s, box-shadow 0.2s;
}
.stage-name {
  font-size: 0.5625rem;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--text-4);
  font-weight: 500;
  text-align: center;
  white-space: nowrap;
}
.stage-step.done .stage-dot {
  background: var(--text);
  border-color: var(--text);
}
.stage-step.done .stage-name { color: var(--text-3); }
.stage-step.active .stage-dot {
  background: var(--bg);
  border: 2px solid var(--text);
  transform: scale(1.25);
}
.stage-step.active .stage-name {
  color: var(--text);
  font-weight: 600;
}
.stage-step.active.ready-to-advance .stage-dot {
  animation: stage-pulse 1.6s infinite;
}
@keyframes stage-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(250,250,250,0.5); }
  50% { box-shadow: 0 0 0 6px rgba(250,250,250,0); }
}

.stage-hint {
  display: flex;
  gap: 0.625rem;
  align-items: flex-start;
  padding: 0.75rem 1.125rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-left: 2px solid var(--text-4);
  border-radius: 6px;
  margin-bottom: 1.75rem;
  font-size: var(--fs-caption);
  line-height: 1.55;
  color: var(--text-3);
  transition: border-left-color 0.2s, color 0.2s;
}
.stage-hint.ready-to-advance {
  border-left-color: var(--text);
  color: var(--text-2);
}
.stage-hint-icon {
  font-size: 0.875rem;
  color: var(--text-3);
  line-height: 1.4;
}
.stage-hint.ready-to-advance .stage-hint-icon { color: var(--text); }
.stage-hint-text { flex: 1; }
.stage-hint-text b { color: var(--text); font-weight: 600; }

@media (max-width: 720px) {
  .stage-tracker { grid-template-columns: repeat(3, 1fr); row-gap: 0.875rem; }
  .stage-tracker::before { display: none; }
}

/* ===== Polished employee profile ===== */
.breadcrumb {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.625rem;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--text-3);
  margin-bottom: 1.375rem;
}
.breadcrumb a { color: var(--text-3); }
.breadcrumb a:hover { color: var(--text); }
.breadcrumb .sep { color: var(--text-5); margin: 0 0.375rem; }

.profile-hero {
  display: grid;
  grid-template-columns: auto 1fr auto;
  gap: 1.25rem;
  align-items: center;
  padding: 1.375rem 1.625rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  margin-bottom: 0.875rem;
}
.profile-hero-info { min-width: 0; }
.profile-hero-meta { font-size: var(--fs-caption); color: var(--text-3); margin-top: 0.375rem; }
.profile-hero-meta .dotsep { margin: 0 0.5rem; color: var(--text-5); }
.profile-hero-score { text-align: right; }
.profile-score-num { font-size: 2.375rem; font-weight: 600; letter-spacing: -1px; line-height: 1; }
.profile-score-lbl { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.375rem; display: flex; align-items: center; gap: 0.375rem; justify-content: flex-end; }
.trend.inline { width: auto; height: auto; padding: 0.0625rem 0.375rem; border-radius: 8px; font-size: 0.6875rem; }

.banner-warn.compact {
  padding: 0.75rem 1.125rem;
  font-size: var(--fs-caption);
  margin-bottom: 1.75rem;
  grid-template-columns: 1.5rem 1fr;
  gap: 0.75rem;
}
.banner-warn.compact .banner-warn-icon { width: 1.375rem; height: 1.375rem; font-size: var(--fs-body-sm); }

.profile-section { margin-bottom: 2rem; }
.profile-section-h {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 0.75rem;
}
.lbl-mute { font-size: 0.5625rem; letter-spacing: 1.8px; color: var(--text-5); text-transform: uppercase; font-weight: 500; }
.lbl-link { font-size: 0.6875rem; color: var(--text-3); text-decoration: none; letter-spacing: 0.2px; }
.lbl-link:hover { color: var(--text); }

.align-chart-mini {
  padding: 1.125rem 0.875rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
}

.theme-card-tight {
  padding: 1.125rem 1.125rem 1rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
}
.theme-rank {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.625rem;
  letter-spacing: 2px;
  color: var(--text-4);
  margin-bottom: 0.5rem;
}
.theme-card-tight .theme-title { font-size: var(--fs-body-sm); font-weight: 600; line-height: 1.4; margin-bottom: 0.5rem; }
.theme-card-tight .theme-body { font-size: var(--fs-caption); color: var(--text-3); line-height: 1.55; }

.checkin-tight-list {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  overflow: hidden;
}
.checkin-tight {
  display: grid;
  grid-template-columns: 3.75rem 1fr 2.5rem 8.75rem;
  gap: 1rem;
  align-items: center;
  padding: 0.75rem 1.125rem;
  border-top: 1px solid var(--hairline);
  font-size: var(--fs-caption);
}
.checkin-tight:first-child { border-top: none; }
.ct-date { font-family: 'IBM Plex Mono', monospace; font-size: 0.625rem; color: var(--text-4); letter-spacing: 0.4px; }
.ct-q { color: var(--text-2); font-style: italic; font-size: var(--fs-caption); }
.ct-score { font-size: 1rem; font-weight: 600; text-align: center; font-variant-numeric: tabular-nums; }
.ct-tag { font-size: 0.5625rem; letter-spacing: 0.4px; color: var(--text-3); padding: 0.1875rem 0.5rem; background: transparent; border: 1px solid var(--hairline-strong); border-radius: 9px; text-align: center; text-transform: uppercase; }

.snapshot {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.875rem;
  padding: 1.125rem 1.375rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  margin-bottom: 0.625rem;
}
.snapshot-stat { text-align: left; }
.snapshot-num { font-size: 1.625rem; font-weight: 600; letter-spacing: -0.6px; line-height: 1; }
.snapshot-lbl { font-size: 0.625rem; color: var(--text-4); margin-top: 0.5rem; letter-spacing: 0.2px; }
.snapshot-read { font-size: var(--fs-body-sm); color: var(--text-2); line-height: 1.6; padding: 0 0.375rem; }

.suggested.compact {
  padding: 0.875rem 1.125rem;
  margin-top: 0;
}
.suggested.compact .suggested-q { font-size: var(--fs-body-sm); }

/* ===== Rubrics page ===== */
.rubric-active {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  overflow: hidden;
}
.rubric-active-head {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 0.75rem;
  padding: 0.875rem 1.125rem;
  border-bottom: 1px solid var(--hairline);
}
/* The title block — let it shrink so the right-side actions never overlap. */
.rubric-active-head > div:first-child { flex: 1; min-width: 0; }
.rubric-active-name { font-size: 0.875rem; font-weight: 500; }
.rubric-active-sub { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.1875rem; }
.rubric-active-badge {
  font-size: 0.5625rem;
  letter-spacing: 1.8px;
  font-weight: 600;
  padding: 0.25rem 0.625rem;
  background: var(--text);
  color: var(--bg);
  border-radius: 10px;
  white-space: nowrap;
  flex-shrink: 0;
}
/* "View dimensions" button — keep it on a single line. Without this it
   wrapped to two lines on cards whose title was long enough to push the
   button into a narrow column. */
.rubric-active-head .rubric-dims-toggle,
.rubric-active-head .btn {
  white-space: nowrap;
  flex-shrink: 0;
}

.dim-list { display: flex; flex-direction: column; }
.dim-row {
  display: grid;
  grid-template-columns: 1fr 12.5rem 2.5rem;
  gap: 1.125rem;
  align-items: center;
  padding: 0.75rem 1.125rem;
  border-top: 1px solid var(--hairline);
}
.dim-row:first-child { border-top: none; }
.dim-meta { min-width: 0; }
.dim-name { font-size: var(--fs-body-sm); font-weight: 500; }
.dim-source { font-size: 0.6875rem; color: var(--text-3); margin-top: 0.1875rem; }
.dim-weight { display: flex; align-items: center; gap: 0.625rem; }
.weight-bar { flex: 1; height: 0.1875rem; background: var(--bg-3); border-radius: 2px; overflow: hidden; }
.weight-fill { height: 100%; background: var(--text); }
.weight-val { font-family: 'IBM Plex Mono', monospace; font-size: 0.6875rem; color: var(--text-2); width: 1.875rem; text-align: right; }

.template-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 0.75rem;
}
.template-card {
  padding: 1.125rem 1.25rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}
.template-name { font-size: 0.875rem; font-weight: 600; }
.template-sub { font-size: 0.6875rem; color: var(--text-3); }
.template-meta { font-size: 0.625rem; color: var(--text-5); margin-bottom: 0.5rem; }
.btn-small { padding: 0.3125rem 0.75rem; font-size: 0.6875rem; align-self: flex-start; }

@media (max-width: 760px) {
  .profile-hero { grid-template-columns: auto 1fr; }
  .profile-hero-score { grid-column: 1 / -1; text-align: left; padding-top: 0.5rem; border-top: 1px solid var(--hairline); margin-top: 0.5rem; }
  .profile-score-lbl { justify-content: flex-start; }
  .snapshot { grid-template-columns: 1fr; }
  .template-grid { grid-template-columns: 1fr; }
  .checkin-tight { grid-template-columns: 3.125rem 1fr 2.5rem; }
  .checkin-tight .ct-tag { display: none; }
  .dim-row { grid-template-columns: 1fr 6.25rem 2rem; }
}

/* ===== Interviews list page ===== */
.filter-row {
  display: flex;
  gap: 0.5rem;
  margin-bottom: 1.75rem;
  border-bottom: 1px solid var(--hairline);
  padding-bottom: 1.125rem;
}
.filter-chip {
  padding: 0.375rem 0.875rem;
  border-radius: 18px;
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.3px;
  background: transparent;
  color: var(--text-3);
  border: 1px solid var(--hairline-strong);
  cursor: pointer;
  transition: color 0.12s, background 0.12s, border-color 0.12s;
  font-family: inherit;
}
.filter-chip:hover { color: var(--text); border-color: var(--text-3); }
.filter-chip.active { background: var(--text); color: var(--bg); border-color: var(--text); }

/* Interview row layout — status | detail | meta | action.
   The action track has a fixed minimum so a row's Start button and a bare
   detail arrow occupy the same width — that keeps every row's meta (date +
   consent) column right-aligned to the same edge, whether or not the row
   carries a button. minmax()'s max-content lets Jedah Desktop's two-button
   variant still grow past the minimum. */
.interview-row {
  display: grid !important;
  grid-template-columns: 5.25rem minmax(0, 1fr) auto minmax(7.25rem, max-content);
  gap: 1.25rem;
  align-items: center;
  padding: 0.9375rem 1.125rem;
}
.iv-status { display: flex; align-items: center; }
.iv-meta { text-align: right; white-space: nowrap; }
.iv-meta-num { font-size: 1.125rem; font-weight: 600; letter-spacing: -0.3px; font-variant-numeric: tabular-nums; }
.iv-meta-lbl { font-size: 0.6875rem; color: var(--text-3); letter-spacing: 0.2px; margin-top: 0.125rem; font-variant-numeric: tabular-nums; }

/* The trailing cell (Start button or bare arrow) hugs the right edge so the
   action column reads as a single aligned rail down the whole list. */
.interview-row > *:last-child { justify-self: end; }
.interview-row .btn-sm { min-width: 6rem; justify-content: center; }
.interview-row .arrow { font-size: 0.9375rem; }

@media (max-width: 760px) {
  .interview-row { grid-template-columns: 3.75rem 1fr auto; gap: 0.875rem; }
  .interview-row .iv-meta { display: none; }
  .filter-row { flex-wrap: wrap; }
}

/* ===== Hire outcome buttons ===== */
.outcome-row {
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
}
.outcome-btn {
  padding: 0.5rem 0.875rem;
  font-size: var(--fs-caption);
  font-weight: 500;
  background: var(--bg-2);
  color: var(--text-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 6px;
  cursor: pointer;
  font-family: inherit;
  transition: color 0.12s, background 0.12s, border-color 0.12s;
}
.outcome-btn:hover { color: var(--text); border-color: var(--text-3); }
.outcome-btn.outcome-good { border-color: rgba(250,250,250,0.3); }
.outcome-btn.outcome-bad { border-color: rgba(250,250,250,0.3); }
.outcome-btn.active {
  background: var(--text);
  color: var(--bg);
  border-color: var(--text);
  font-weight: 600;
}

/* ===== Polish: subtle nice-to-haves ===== */

/* Smooth fade-in on page load */
body { animation: fadein 0.18s ease-out; }
@keyframes fadein { from { opacity: 0; } to { opacity: 1; } }

/* Card hover lift consistency */
.card:hover { border-color: var(--hairline-strong); transition: border-color 0.12s; }

/* Active state for buttons */
.btn:active { transform: translateY(0.5px); }
.btn:focus-visible { outline: 2px solid var(--text); outline-offset: 2px; }

/* Input focus consistency */
.field input:focus, .field select:focus, .field textarea:focus {
  border-color: var(--text);
  background: var(--bg-3);
}

/* Toggle hover */
.toggle:hover { box-shadow: 0 0 0 3px rgba(250,250,250,0.06); }

/* Empty-state copy across the app */
.empty-state {
  padding: 3rem 1.5rem;
  text-align: center;
  color: var(--text-3);
  font-size: var(--fs-body-sm);
  background: var(--bg-2);
  border: 1px dashed var(--hairline-strong);
  border-radius: 8px;
}
.empty-state b { color: var(--text); font-weight: 500; display: block; margin-bottom: 0.375rem; }
.empty-state p { font-size: 0.6875rem; line-height: 1.6; max-width: 26.25rem; margin: 0 auto; }

/* Three canonical states — use one of these, never mix. */
.loading-state {
  padding: 2rem 1.5rem;
  text-align: center;
  color: var(--text-4);
  font: var(--type-body);
}
.loading-state::before {
  content: "";
  display: block;
  width: 1.25rem; height: 1.25rem;
  border: 2px solid var(--hairline-strong);
  border-top-color: var(--text-3);
  border-radius: 50%;
  animation: spin-state 0.9s linear infinite;
  margin: 0 auto 0.75rem;
}
@keyframes spin-state { to { transform: rotate(360deg); } }

.error-state {
  padding: 2rem 1.5rem;
  text-align: center;
  color: var(--text-3);
  font: var(--type-body);
  background: var(--bg-2);
  border: 1px solid rgba(239,68,68,0.25);
  border-radius: 8px;
}
.error-state b { color: var(--c-danger-text); font-weight: 600; display: block; margin-bottom: 0.375rem; }
.error-state .retry-btn { margin-top: 0.75rem; font: var(--type-caption); color: var(--text-3); background: none; border: 1px solid var(--hairline-strong); padding: 0.3125rem 0.875rem; border-radius: 4px; cursor: pointer; }
.error-state .retry-btn:hover { color: var(--text); border-color: var(--text-3); }

/* Tighter auth pages */
.auth-card { box-shadow: 0 24px 64px -32px rgba(0,0,0,0.7); }
.auth-card .field input { background: var(--bg); }
.auth-card .field input:focus { background: var(--bg-3); }

/* Sign-out link styling */
#signout-link {
  border-top: 1px solid var(--hairline);
  margin-top: 0.25rem;
  padding-top: 0.625rem !important;
  transition: color 0.12s;
}
#signout-link:hover { color: var(--text) !important; }

/* Filter chips: clearer disabled state */
.filter-chip { user-select: none; }

/* Modal animation */
.modal-backdrop.open .modal {
  animation: modalpop 0.18s ease-out;
}
@keyframes modalpop {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

/* Reduce motion respect */
@media (prefers-reduced-motion: reduce) {
  body, .modal-backdrop.open .modal { animation: none; }
  .stage-step.active.ready-to-advance .stage-dot { animation: none; }
}

/* Inline error/info banner inside modals + pages */
.inline-error {
  margin-top: 0.75rem;
  padding: 0.625rem 0.875rem;
  font-size: var(--fs-caption);
  background: rgba(239, 68, 68, 0.08);
  border: 1px solid rgba(239, 68, 68, 0.25);
  color: var(--c-danger-text);
  border-radius: 6px;
  line-height: 1.55;
  display: none;
}
.inline-error.show { display: block; }
.inline-error b { color: var(--text); font-weight: 500; }

/* ─── References (reference-check workflow) ──────────────────────── */
.references-list { display: flex; flex-direction: column; gap: 0.5rem; }
.references-empty {
  padding: 1.5rem;
  text-align: center;
  border: 1px dashed var(--hairline-strong);
  border-radius: 8px;
  font-size: var(--fs-caption);
  color: var(--text-3);
}
/* AI reference calls — interviews-complete lock (candidate.html). */
.refcall-locked {
  padding: 0.875rem 1rem;
  border: 1px solid var(--gold-border);
  border-radius: 8px;
  background: var(--gold-fill);
  margin-bottom: 0.625rem;
}
.refcall-locked-title {
  display: flex;
  align-items: center;
  gap: 0.4375rem;
  font-family: 'IBM Plex Mono', monospace;
  font-size: var(--fs-tiny);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 0.375rem;
}
.refcall-locked-title svg { flex-shrink: 0; }
.refcall-locked-body {
  font-size: 0.75rem;
  color: var(--text-2);
  line-height: 1.55;
  max-width: 35rem;
}
.refcall-locked-body b { color: var(--text); font-weight: 600; }

.ref-row {
  display: grid;
  grid-template-columns: 2.5rem 1fr auto;
  gap: 0.875rem;
  align-items: center;
  padding: 0.875rem 1rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  background: var(--bg-2);
  text-decoration: none;
  color: var(--text);
  transition: border-color 120ms ease;
}
.ref-row:hover { border-color: var(--text-3); }
.ref-row-avatar {
  width: 2.5rem; height: 2.5rem; border-radius: 50%;
  background: var(--bg-3);
  border: 1px solid var(--hairline-strong);
  display: flex; align-items: center; justify-content: center;
  font-family: "IBM Plex Mono", monospace;
  font-size: var(--fs-caption);
  letter-spacing: 0.05em;
  color: var(--text-3);
}
.ref-row-body { min-width: 0; }
.ref-row-name { font-size: 0.875rem; font-weight: 500; margin-bottom: 0.25rem; }
.ref-row-sub { font-size: 0.6875rem; color: var(--text-3); display: flex; gap: 0.375rem; align-items: center; flex-wrap: wrap; }
.ref-row-right { display: flex; flex-direction: column; align-items: flex-end; gap: 0.375rem; }
.ref-row-meta { font-size: 0.6875rem; color: var(--text-4); font-family: "IBM Plex Mono", monospace; }
.ref-row-link { font-size: 0.6875rem; color: var(--text-3); letter-spacing: 0.04em; }
.ref-rel-chip {
  display: inline-block;
  padding: 0.125rem 0.5rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 100px;
  font-size: 0.625rem;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--text-3);
}

/* AI reference-call contact card (candidate.html, reference-calls.js).
   Deliberately NOT .ref-row: that class is a 3-column grid, and stacking a
   calls list inside it slots children into its columns (squished avatar,
   name overlapping the action button). The card has its own grid header row
   and a full-width calls list beneath. */
.refcall-card {
  padding: 0.75rem 0.875rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  background: var(--bg-2);
}
.refcall-card + .refcall-card { margin-top: 0.5rem; }
/* References page: the whole AI-call card navigates to the call page (same
   affordance as .ref-row). The candidate-page card stays non-clickable. */
.refcall-card-click { cursor: pointer; transition: border-color 120ms ease; }
.refcall-card-click:hover { border-color: var(--text-3); }
.refcall-card-head {
  display: grid;
  grid-template-columns: 2.5rem minmax(0, 1fr) auto;
  gap: 0.75rem;
  align-items: center;
}
.refcall-card-body { min-width: 0; }
.refcall-card-name {
  font-size: 0.875rem;
  font-weight: 500;
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex-wrap: wrap;
  margin-bottom: 0.1875rem;
  min-width: 0;
}
.refcall-card-action {
  justify-self: end;
  display: flex;
  align-items: center;
  gap: 0.375rem;
}
.refcall-card-calls {
  margin-top: 0.625rem;
  padding-top: 0.25rem;
  border-top: 1px dashed var(--hairline);
}
/* Soft degradation note on the question-set review screen. */
.refcall-soft-note {
  border: 1px solid var(--amber);
  background: var(--amber-fill);
  border-radius: 8px;
  padding: 0.625rem 0.75rem;
  margin-bottom: 0.75rem;
  font-size: 0.75rem;
  color: var(--text-2);
  line-height: 1.55;
}
/* Inline generation-failure state (clean retry, never raw text). */
.refcall-gen-error {
  border: 1px solid var(--brick);
  background: var(--brick-fill);
  border-radius: 8px;
  padding: 0.875rem 1rem;
}
.refcall-gen-error-title {
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 0.25rem;
}
.refcall-gen-error-body {
  font-size: 0.75rem;
  color: var(--text-2);
  line-height: 1.55;
  max-width: 35rem;
}
.ref-signal-chip {
  display: inline-block;
  padding: 0.1875rem 0.625rem;
  border-radius: 100px;
  font-size: 0.625rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-weight: 500;
}
.ref-signal-pending {
  border: 1px dashed var(--hairline-strong);
  color: var(--text-4);
}
.ref-signal-strong_positive {
  background: var(--text);
  color: var(--bg);
  border: 1px solid var(--text);
}
.ref-signal-positive {
  background: var(--bg-3);
  color: var(--text);
  border: 1px solid var(--text-3);
}
.ref-signal-mixed {
  background: var(--bg-2);
  color: var(--text-3);
  border: 1px dashed var(--text-3);
}
.ref-signal-negative {
  background: var(--bg-2);
  color: var(--text);
  border: 1px solid var(--text);
  text-decoration: line-through;
  text-decoration-thickness: 1px;
}

/* Reference detail page */
.ref-intro {
  font-size: var(--fs-body-sm);
  color: var(--text);
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-left: 2px solid var(--text);
  padding: 0.875rem 1rem;
  border-radius: 6px;
  line-height: 1.6;
  font-style: italic;
}
.ref-questions { display: flex; flex-direction: column; gap: 0.875rem; }
.ref-q {
  display: grid;
  grid-template-columns: 2rem 1fr;
  gap: 0.875rem;
  padding: 1rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  background: var(--bg-2);
}
.ref-q-num {
  width: 1.5rem; height: 1.5rem;
  border-radius: 50%;
  background: var(--bg-3);
  border: 1px solid var(--hairline-strong);
  font-family: "IBM Plex Mono", monospace;
  font-size: 0.6875rem;
  display: flex; align-items: center; justify-content: center;
  color: var(--text-3);
}
.ref-q-question { font-size: 0.875rem; font-weight: 500; line-height: 1.5; margin-bottom: 0.5rem; }
.ref-q-why, .ref-q-hint {
  font-size: 0.6875rem;
  color: var(--text-3);
  line-height: 1.55;
  margin-bottom: 0.25rem;
}
.ref-q-why b, .ref-q-hint b { color: var(--text); font-weight: 500; }
.shell textarea.ref-q-answer,
.modal textarea.ref-q-answer,
.ref-q-answer {
  width: 100%;
  margin-top: 0.625rem;
  background: var(--bg);
  color: var(--text);
  border: 1px solid var(--hairline-strong);
  border-radius: 6px;
  padding: 0.5rem 0.625rem;
  font-family: inherit;
  font-size: var(--fs-caption);
  resize: vertical;
  line-height: 1.55;
  min-height: 4rem;
  max-height: 10rem;
  overflow-y: auto;
}
.ref-q-answer:focus { outline: none; border-color: var(--text); }
.ref-q-sentiment { display: flex; gap: 0.375rem; margin-top: 0.5rem; flex-wrap: wrap; }
.ref-q-sent-btn {
  background: transparent;
  color: var(--text-3);
  border: 1px solid var(--hairline-strong);
  border-radius: 100px;
  padding: 0.25rem 0.75rem;
  font-size: 0.625rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-family: inherit;
  cursor: pointer;
  transition: all 120ms ease;
}
.ref-q-sent-btn:hover { color: var(--text); border-color: var(--text-3); }
.ref-q-sent-btn.active {
  background: var(--text);
  color: var(--bg);
  border-color: var(--text);
}

/* Overall signal radio row */
.ref-signal-row { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.ref-signal-opt {
  display: flex; align-items: center; gap: 0.5rem;
  padding: 0.625rem 0.875rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  background: var(--bg-2);
  font-size: var(--fs-caption);
  color: var(--text);
  cursor: pointer;
  transition: border-color 120ms ease;
}
.ref-signal-opt:hover { border-color: var(--text-3); }
.ref-signal-opt input[type=radio] { accent-color: var(--text); }
.ref-signal-opt:has(input:checked) { border-color: var(--text); background: var(--bg-3); }

/* ─── Blind review chip (live tab + candidate page banner) ──────── */
.blind-review-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.375rem;
  padding: 0.25rem 0.625rem;
  border: 1px solid var(--text);
  background: var(--bg-2);
  color: var(--text);
  border-radius: 100px;
  font-size: 0.625rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  font-weight: 500;
  font-family: "IBM Plex Mono", monospace;
}
.blind-review-chip::before {
  content: "";
  width: 0.375rem;
  height: 0.375rem;
  border-radius: 50%;
  background: var(--text);
}
.blind-review-banner {
  display: flex;
  align-items: center;
  gap: 0.625rem;
  padding: 0.625rem 0.875rem;
  border: 1px dashed var(--hairline-strong);
  border-radius: 8px;
  background: var(--bg-2);
  margin-bottom: 1rem;
  font-size: 0.6875rem;
  color: var(--text-3);
  letter-spacing: 0.02em;
}

/* ───── Tier-aware sidebar / chrome ─────────────────────────────────────
   The body class is set by sidebar-tier.js on every authed page. CSS rules
   below hide nav items that aren't included in the workspace's tier.

   Hierarchy:
     starter      → minimal nav (no pipeline/compare/questions/training/perf/scheduling)
     professional → full workflow (no exec-only items)
     executive    → everything

   We also expose --brand-accent as a CSS variable so executive workspaces
   can theme premium widgets without touching every page's inline styles.
─────────────────────────────────────────────────────────────────────── */

:root {
  --brand-accent: var(--text);
}

/* Starter tier: hide pro+ nav items. Note: training.html no longer has a
   nav link — the training corpus lives inside Performance now, which is
   already gated here. */
body.tier-starter .sidebar a.nav-item[href="candidates.html"],
body.tier-starter .sidebar a.nav-item[href="compare.html"],
body.tier-starter .sidebar a.nav-item[href="questions.html"],
body.tier-starter .sidebar a.nav-item[href="performance.html"] {
  display: none;
}
/* The scheduling.html selector was dropped here: scheduling was removed from
   the UI (MVP scope section 9) and no sidebar item points at that page. */
/* Starter tier: hide the section labels that would otherwise hang above
   sections we've emptied out. (People + Library headers still show because
   they contain visible items.) Hiring header still shows because Interviews
   and Candidates are starter-tier features. */

/* Pro tier: hide executive-only nav items + sections. */
body.tier-professional .sidebar a.nav-item[data-exec-nav-org-insights],
body.tier-starter      .sidebar a.nav-item[data-exec-nav-org-insights] {
  display: none;
}

/* Executive tier: only show items flagged executive-only when on exec tier.
   This is defense-in-depth — sidebar-tier.js only inserts the org-insights
   nav item when the tier is exec, but if someone hand-edits the sidebar,
   the CSS guard still applies. */
body:not(.tier-executive) [data-exec-only] {
  display: none !important;
}

/* Hidden by tier — set by sidebar-tier.js on [data-min-tier=...] elements
   whose min tier is above the workspace's effective tier. Inline display:none
   is set in JS; this rule is mostly here for any future SSR rendering. */
[data-tier-hidden="1"] { display: none !important; }

/* Executive-only premium badge style. Subtle cream/gold, not gaudy. */
.exec-badge {
  display: inline-block;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.5625rem;
  letter-spacing: 1.5px;
  color: var(--c-warn);
  background: var(--surface-gold-deep);
  border: 1px solid var(--border-gold-deep);
  padding: 0.125rem 0.4375rem;
  border-radius: 3px;
  text-transform: uppercase;
  vertical-align: middle;
}
/* Custom brand logo (replaces the JEDAH eye logo on exec-tier workspaces). */
.brand-logo.brand-logo-custom::before,
.brand-logo.brand-logo-custom::after { display: none; }

/* Org-Insights heatmap cells. */
.org-heatmap-cell {
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.6875rem;
  height: 2.25rem;
  border: 1px solid var(--hairline);
}
.org-heatmap-grid {
  display: grid;
  gap: 0.125rem;
  background: var(--hairline);
  border: 1px solid var(--hairline);
}

/* ─────────────────────────────────────────────────────────
   Human Potential Framework (HPF) profile — 7 cards + overall read
   Subtle colored left-border per dimension cluster; rest of the
   card stays b&w to match the IBM Plex shell.
   ───────────────────────────────────────────────────────── */
.hpf-section { margin-bottom: 1.75rem; }

.hpf-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.75rem;
  margin-bottom: 1.125rem;
}
@media (max-width: 720px) {
  .hpf-grid { grid-template-columns: 1fr; }
}

.hpf-card {
  position: relative;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-left-width: 4px;
  border-radius: 8px;
  padding: 1.25rem 1.375rem 1.125rem;
  display: grid;
  grid-template-columns: 1fr auto;
  /* row 1 = trait name + score, row 2 = summary, row 3 (implicit) = evidence.
     Row 2 used to hold the company-analog sub-label under the trait name; the
     sub-label was removed (founder, Jul 2026) and its row went with it, so the
     card does not carry an empty row plus a row-gap. */
  grid-template-rows: auto auto;
  column-gap: 1rem;
  row-gap: 0.625rem;
  cursor: help;
}

.hpf-card .hpf-trait {
  font-size: 0.8125rem;
  font-weight: 600;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  color: var(--text);
  line-height: 1.25;
  grid-column: 1;
  grid-row: 1;
}
.hpf-card .hpf-score {
  font-size: var(--fs-display-xl);
  font-weight: 600;
  letter-spacing: -1.4px;
  line-height: 1;
  color: var(--text);
  font-variant-numeric: tabular-nums;
  text-align: right;
}
.hpf-card .hpf-score-sub {
  display: block;
  font-size: 0.6875rem;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  font-weight: 400;
  color: var(--text-4);
  margin-top: 0.3125rem;
}
.hpf-card .hpf-summary {
  grid-column: 1 / -1;
  grid-row: 2;
  font-size: var(--fs-body-sm);
  color: var(--text-2);
  line-height: 1.5;
}
.hpf-card .hpf-evidence {
  grid-column: 1 / -1;
  grid-row: 3;
  font-family: 'IBM Plex Mono', monospace;
  font-size: var(--fs-mono);
  color: var(--text-3);
  line-height: 1.55;
  padding-left: 0.75rem;
  border-left: 1px solid var(--hairline);
  margin-top: 0.25rem;
}
.hpf-card .hpf-evidence::before {
  content: "› ";
  color: var(--text-4);
}

/* Tooltip popover — shown on .hpf-card:hover (and tap on mobile). */
.hpf-card .hpf-tooltip {
  position: absolute;
  bottom: calc(100% + 0.375rem);
  left: 0;
  right: 0;
  z-index: 50;
  background: var(--surface-3);
  border: 1px solid var(--hairline-strong);
  border-radius: 6px;
  padding: 0.875rem 1rem;
  font-size: 0.8125rem;
  line-height: 1.6;
  color: var(--text-2);
  opacity: 0;
  visibility: hidden;
  transform: translateY(4px);
  transition: opacity 0.16s ease, transform 0.16s ease, visibility 0s linear 0.16s;
  pointer-events: none;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.4);
}
.hpf-card.is-open .hpf-tooltip {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  transition-delay: 0s;
}
.hpf-tooltip .hpf-tt-h {
  font-size: 0.71875rem;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 0.4375rem;
}
.hpf-tooltip .hpf-tt-meaning {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.71875rem;
  color: var(--text-3);
  margin-bottom: 0.5625rem;
  letter-spacing: 0.4px;
}

/* ── Accent colors (subtle — only the left border + the score sub). ── */
/* Cluster 1 (Light / Seeing): green */
.hpf-intel    { border-left-color: var(--sage); }
.hpf-intel    .hpf-score-sub { color: var(--sage); }
.hpf-intent   { border-left-color: var(--sage); }
.hpf-intent   .hpf-score-sub { color: var(--sage); }
/* Cluster 2 (Embodiment): light blue */
.hpf-persona  { border-left-color: var(--info); }
.hpf-persona  .hpf-score-sub { color: var(--info); }
/* Cluster 3 (Foundational): blue */
.hpf-values   { border-left-color: #4A78C5; }
.hpf-values   .hpf-score-sub { color: #4A78C5; }
/* Cluster 4 (Contextualized): yellow/amber */
.hpf-context  { border-left-color: var(--gold); }
.hpf-context  .hpf-score-sub { color: var(--gold); }
/* Cluster 5 (Deliberate Control): orange */
.hpf-discipline { border-left-color: var(--amber); }
.hpf-discipline .hpf-score-sub { color: var(--amber); }
/* Cluster 6 (Action): pink/red */
.hpf-skill    { border-left-color: var(--brick); }
.hpf-skill    .hpf-score-sub { color: var(--brick); }

/* Overall read callout */
.hpf-overall-read {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  padding: 1.25rem 1.5rem;
  font-size: var(--fs-body);
  color: var(--text);
  line-height: 1.65;
  margin-bottom: 1rem;
}
.hpf-overall-read .hpf-or-lbl {
  display: block;
  font-size: 0.71875rem;
  font-weight: 600;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  color: var(--text-3);
  margin-bottom: 0.5625rem;
}

/* Footer (regenerate + timestamp) */
.hpf-foot {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 0.625rem;
  color: var(--text-4);
  letter-spacing: 0.6px;
  padding-top: 0.25rem;
}
.hpf-regen {
  background: transparent;
  border: 1px solid var(--hairline-strong);
  color: var(--text-3);
  font-size: 0.625rem;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  padding: 0.3125rem 0.6875rem;
  border-radius: 11px;
  cursor: pointer;
  font-family: inherit;
}
.hpf-regen:hover { color: var(--text); border-color: var(--text-3); }

/* Empty-state + loading */
.hpf-cta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.125rem;
  padding: 1.375rem 1.5rem;
  background: var(--bg-2);
  border: 1px dashed var(--hairline-strong);
  border-radius: 6px;
}
.hpf-cta-text {
  font-size: var(--fs-caption);
  color: var(--text-3);
  line-height: 1.55;
  max-width: 33.75rem;
}
.hpf-loading {
  padding: 1.375rem 1.5rem;
  font-size: var(--fs-body-sm);
  color: var(--text-2);
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  display: flex;
  align-items: center;
  gap: 0.625rem;
}

/* ─────────────────────────────────────────────────────────
   Welcome wizard (welcome.html) — 4-step onboarding modal.
   Same b&w IBM Plex aesthetic; full-page card so a fresh
   signup gets a focused, distraction-free flow.
   ───────────────────────────────────────────────────────── */
.welcome-shell {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 2rem;
}
.welcome-card {
  width: 100%;
  max-width: 38.75rem;
  padding: 2.25rem 2.5rem 2rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 12px;
}
.welcome-brand {
  display: flex;
  align-items: center;
  gap: 0.875rem;
  margin-bottom: 1.5rem;
}
.welcome-brand .brand-logo { width: 1.5rem; height: 1.5rem; }
.welcome-brand .brand-name { font-size: 0.875rem; font-weight: 600; letter-spacing: 1.6px; }
.welcome-progress {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1.75rem;
}
.welcome-progress-dots { display: flex; gap: 0.375rem; }
.welcome-dot {
  width: 1.375rem; height: 0.25rem;
  background: var(--hairline-strong);
  border-radius: 2px;
  transition: background 0.18s;
}
.welcome-dot.active { background: var(--text); }
.welcome-dot.done { background: var(--text-3); }
.welcome-step-label {
  font-size: 0.625rem;
  letter-spacing: 1.8px;
  text-transform: uppercase;
  color: var(--text-4);
  font-weight: 500;
}
.welcome-step { animation: welcome-fade 0.22s ease; }
@keyframes welcome-fade {
  from { opacity: 0; transform: translateY(4px); }
  to   { opacity: 1; transform: translateY(0);   }
}
.welcome-title {
  font-size: 1.375rem;
  font-weight: 600;
  letter-spacing: -0.4px;
  margin: 0 0 0.375rem;
}
.welcome-sub {
  font-size: var(--fs-body-sm);
  color: var(--text-3);
  line-height: 1.55;
  margin: 0 0 1.5rem;
}
.welcome-hint {
  font-size: 0.6875rem;
  color: var(--text-4);
  margin-top: 0.375rem;
  line-height: 1.5;
}
.welcome-error {
  font-size: var(--fs-caption);
  color: var(--c-danger);
  margin: -0.25rem 0 0.75rem;
  padding: 0.5rem 0.75rem;
  background: rgba(239,68,68,0.08);
  border: 1px solid rgba(239,68,68,0.25);
  border-radius: 6px;
  display: none;
}
.welcome-status {
  font-size: var(--fs-caption);
  color: var(--text-3);
  margin: -0.25rem 0 0.75rem;
}
.welcome-actions {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 1.125rem;
}
.welcome-actions .btn { padding: 0.625rem 1.125rem; font-size: var(--fs-body-sm); }

/* Stage cards (Step 1) — 5-card responsive grid */
.welcome-radio-grid {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 0.5rem;
}
@media (max-width: 720px) {
  .welcome-radio-grid { grid-template-columns: repeat(2, 1fr); }
}
.welcome-radio-card {
  display: block;
  padding: 0.75rem 0.625rem;
  background: var(--bg);
  border: 1px solid var(--hairline-strong);
  border-radius: 6px;
  cursor: pointer;
  transition: border-color 0.12s, background 0.12s;
}
.welcome-radio-card:hover { border-color: var(--text-3); }
.welcome-radio-card input[type=radio] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}
.welcome-radio-card:has(input:checked) {
  border-color: var(--text);
  background: var(--bg-3);
}
.welcome-radio-card .rc-name {
  font-size: var(--fs-caption);
  font-weight: 600;
  letter-spacing: 0.4px;
  color: var(--text);
  margin-bottom: 0.25rem;
}
.welcome-radio-card .rc-hint {
  font-size: 0.625rem;
  color: var(--text-4);
  line-height: 1.4;
}

/* Dimension chips (Step 2) */
.welcome-chip-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 0.375rem;
}
.welcome-chip {
  background: var(--bg);
  border: 1px solid var(--hairline-strong);
  color: var(--text-2);
  font-family: inherit;
  font-size: var(--fs-caption);
  padding: 0.4375rem 0.75rem;
  border-radius: 16px;
  cursor: pointer;
  transition: border-color 0.12s, background 0.12s, color 0.12s;
}
.welcome-chip:hover { border-color: var(--text-3); color: var(--text); }
.welcome-chip.on {
  background: var(--text);
  color: var(--bg);
  border-color: var(--text);
}

/* Recap (Step 4) */
.welcome-recap {
  background: var(--bg);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  padding: 0.25rem 0;
}
.welcome-recap-row {
  display: flex;
  justify-content: space-between;
  gap: 0.875rem;
  padding: 0.6875rem 1rem;
  border-bottom: 1px solid var(--hairline);
  font-size: var(--fs-body-sm);
}
.welcome-recap-row:last-child { border-bottom: none; }
.welcome-recap-k {
  font-size: 0.625rem;
  letter-spacing: 1.6px;
  text-transform: uppercase;
  color: var(--text-4);
  align-self: center;
}
.welcome-recap-v {
  color: var(--text);
  text-align: right;
  word-break: break-word;
}

/* ─────────────────────────────────────────────────────────
   Guided tour (tour.js) — overlay + tooltips + stray banner
   ───────────────────────────────────────────────────────── */
.tour-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.55);
  z-index: 9000;
  pointer-events: none;  /* let the user keep clicking through if they want */
}
.tour-spotlight {
  position: fixed;
  z-index: 9001;
  border: 2px solid var(--text);
  border-radius: 6px;
  box-shadow: 0 0 0 9999px rgba(0,0,0,0.55);
  pointer-events: none;
  animation: tour-pulse 1.8s ease-in-out infinite;
}
@keyframes tour-pulse {
  0%, 100% { box-shadow: 0 0 0 9999px rgba(0,0,0,0.55), 0 0 0 0 rgba(250,250,250,0.0); }
  50%      { box-shadow: 0 0 0 9999px rgba(0,0,0,0.55), 0 0 0 6px rgba(250,250,250,0.10); }
}
.tour-tooltip {
  position: fixed;
  z-index: 9002;
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  padding: 1.125rem 1.25rem 0.875rem;
  width: 20rem;
  max-width: calc(100vw - 1.5rem);
  box-shadow: 0 12px 36px rgba(0,0,0,0.55);
  font-family: 'IBM Plex Sans', sans-serif;
}
.tour-step-indicator {
  font-size: 0.5625rem;
  letter-spacing: 1.8px;
  text-transform: uppercase;
  color: var(--text-4);
  font-weight: 600;
  margin-bottom: 0.5rem;
}
.tour-title {
  font-size: var(--fs-h3);
  font-weight: 600;
  color: var(--text);
  margin-bottom: 0.375rem;
  letter-spacing: -0.2px;
}
.tour-body {
  font-size: var(--fs-caption);
  color: var(--text-2);
  line-height: 1.55;
  margin-bottom: 0.875rem;
}
.tour-actions {
  display: flex;
  gap: 0.5rem;
  justify-content: flex-end;
}
.tour-actions .btn { padding: 0.375rem 0.75rem; font-size: var(--fs-caption); }

.tour-banner {
  position: fixed;
  z-index: 9002;
  bottom: 1.25rem;
  left: 50%;
  transform: translateX(-50%);
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  padding: 0.75rem 1rem;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  font-size: var(--fs-caption);
  color: var(--text-2);
  box-shadow: 0 8px 28px rgba(0,0,0,0.55);
}
.tour-banner b { color: var(--text); }
.tour-banner .btn { padding: 0.375rem 0.75rem; font-size: 0.6875rem; }

/* Empty-state "Take the tour" button container — used on dashboards */
.tour-empty-cta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.125rem;
  padding: 1.125rem 1.375rem;
  background: var(--bg-2);
  border: 1px dashed var(--hairline-strong);
  border-radius: 6px;
  margin-bottom: 1.125rem;
}
.tour-empty-cta .tec-text {
  font-size: var(--fs-caption);
  color: var(--text-3);
  line-height: 1.55;
  max-width: 33.75rem;
}
.tour-empty-cta .tec-text b { color: var(--text); font-weight: 500; }

/* ─── Compact, scrollable textareas ────────────────────────────────
   Used everywhere a long paste is possible but we don't want the
   field to dominate the page. Default ~4 visible lines, internal
   scroll past max-height, user can drag the resize handle to expand.
─────────────────────────────────────────────────────────────────── */
.shell textarea,
.modal textarea,
.welcome-card textarea,
.compact-textarea {
  min-height: 5rem;
  max-height: 12.5rem;
  overflow-y: auto;
  resize: vertical;
  font-family: inherit;
  font-size: var(--fs-body-sm);
  padding: 0.625rem;
  background: var(--bg);
  color: var(--text);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  line-height: 1.5;
}

.shell textarea:focus,
.modal textarea:focus,
.welcome-card textarea:focus,
.compact-textarea:focus {
  border-color: var(--text);
  outline: none;
}

/* Opt-out for fields where a long paste is the focal point (JD parser,
   LinkedIn experience paste, etc.) — allow the user to drag much taller. */
.shell textarea.textarea-tall,
.modal textarea.textarea-tall,
.welcome-card textarea.textarea-tall,
.compact-textarea.textarea-tall {
  max-height: 37.5rem;
  min-height: 12.5rem;
}


/* ═══════════════════════════════════════════════════════════════
   MARKETING DESIGN UPLIFT v2 — dialed up.  Bigger heroes, more
   whitespace, refined buttons, gradient accents.  Restore the
   legacy look by replacing this whole file with styles.legacy.css.
   ═══════════════════════════════════════════════════════════════ */

/* Body — subtle background gradient like marketing site instead of flat. */
body {
  background:
    radial-gradient(ellipse at top, rgba(255,255,255,0.025), transparent 50%),
    var(--bg) !important;
}

/* Hero-style page header — bigger, lighter, much more whitespace. */
.page-header {
  margin-bottom: 3rem !important;
  padding-bottom: 2rem !important;
  border-bottom: 1px solid var(--hairline) !important;
}
.page-title {
  font-size: 2.75rem !important;
  font-weight: 400 !important;
  letter-spacing: -0.035em !important;
  line-height: 1.05 !important;
  color: var(--text);
}
.page-sub {
  font-size: var(--fs-body) !important;
  color: var(--text-2) !important;
  margin-top: 0.875rem !important;
  max-width: 45rem;
  line-height: 1.65 !important;
  font-weight: 300;
}

/* Mobile titles still substantial but not crushing. */
@media (max-width: 720px) {
  .page-title { font-size: var(--fs-display-lg) !important; }
  .page-sub { font-size: var(--fs-body-sm) !important; }
}

/* Section labels in Plex Mono with wide tracking — the eyebrow
   style on the marketing site. */
.lbl, .lbl-mute {
  font-family: 'IBM Plex Mono', ui-monospace, monospace !important;
  font-size: 0.625rem !important;
  letter-spacing: 0.22em !important;
  text-transform: uppercase !important;
  color: var(--text-4) !important;
  font-weight: 500 !important;
}

/* Card border tightening — single soft hairline. */
.card {
  border: 1px solid var(--hairline) !important;
  border-radius: 6px;
}
.card:hover { border-color: var(--hairline-strong) !important; }

/* Slightly more vertical rhythm between major sections. */
.content > .lbl,
.content > section,
main.content > .lbl,
main.content > section { margin-top: 2.25rem; }
main.content > .lbl:first-of-type,
main.content > section:first-of-type { margin-top: 0; }

/* Sidebar refinement — slightly tighter, softer hairlines. */
.sidebar { border-right: 2px solid var(--hairline-strong) !important; }
.nav-section-label {
  font-family: 'IBM Plex Mono', ui-monospace, monospace !important;
  font-size: 0.625rem !important;
  letter-spacing: 0.22em !important;
  color: var(--text-4) !important;
}

/* Gradient-text accent utility. Use on a span inside a headline:
   <h2>Built on rigor <span class="grad-text">recruiters trust.</span></h2>  */
.grad-text {
  background: linear-gradient(120deg, #ffffff 0%, #c0c0c4 50%, #5e6066 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
}

/* Monospace numerics — apply with class="mono-num" to stat cells. */
.mono-num {
  font-family: 'IBM Plex Mono', ui-monospace, monospace;
  font-feature-settings: "tnum" 1;
  letter-spacing: -0.01em;
}

/* Subtle horizontal rule for separating sections inside a page. */
.section-divider {
  border: 0;
  border-top: 1px solid var(--hairline);
  margin: 2.5rem 0 1.5rem;
}

/* ─── Collapsible-section primitive ──────────────────────────────
   Mark any block as <div class="collapsible" data-collapsed="false">
   with a <div class="collapsible-head">Title</div> + the rest as
   children. Click the head to toggle. Pages can opt in section by
   section to drop scroll length. */
.collapsible {
  /* Defensive: never let inner content leak past the content column. The
     screenshot Peter sent showed section labels appearing to bleed left
     under the sidebar — this guarantees they stay inside .content. */
  overflow: hidden;
  width: 100%;
  box-sizing: border-box;
}
.collapsible-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  cursor: pointer;
  user-select: none;
  padding: 0.875rem 0;
  border-top: 1px solid var(--hairline);
}
.collapsible-head::after {
  content: "›";
  font-size: 1rem;
  color: var(--text-3);
  transition: transform 0.15s ease;
}
.collapsible[data-collapsed="false"] > .collapsible-head::after {
  transform: rotate(90deg);
}
.collapsible[data-collapsed="true"] > :not(.collapsible-head) {
  display: none !important;
}

/* ─── Refined buttons ────────────────────────────────────────────
   Smaller, lighter, more typographic. Matches marketing CTA. */
.btn {
  font-size: var(--fs-caption) !important;
  font-weight: 500 !important;
  letter-spacing: 0.01em !important;
  padding: 0.5625rem 1rem !important;
  border-radius: 4px !important;
  transition: background 0.12s, border-color 0.12s, color 0.12s, transform 0.06s !important;
}
.btn-primary {
  background: var(--text) !important;
  color: var(--bg) !important;
  border: 1px solid var(--text) !important;
}
.btn-primary:hover {
  background: var(--text) !important;
  border-color: var(--text) !important;
  transform: translateY(-0.5px);
}
.btn-ghost {
  background: transparent !important;
  color: var(--text-2) !important;
  border: 1px solid var(--hairline-strong) !important;
}
.btn-ghost:hover {
  color: var(--text) !important;
  border-color: var(--text-3) !important;
  background: rgba(255,255,255,0.02) !important;
}
.btn-small { padding: 0.375rem 0.75rem !important; font-size: 0.6875rem !important; }

/* ─── Refined cards ──────────────────────────────────────────── */
.card {
  background: var(--bg-2) !important;
  border: 1px solid var(--hairline) !important;
  border-radius: 8px !important;
  transition: border-color 0.12s !important;
}
.card:hover {
  border-color: var(--hairline-strong) !important;
}

/* ─── Stat cards — large mono numbers, mono labels ───────────── */
.stat-card, .setup-card {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  padding: 1.25rem 1.375rem;
}
.stat-num, .setup-card-val {
  font-family: 'IBM Plex Mono', ui-monospace, monospace !important;
  font-size: 1.75rem !important;
  font-weight: 400 !important;
  letter-spacing: -0.02em !important;
  color: var(--text) !important;
  line-height: 1.1 !important;
  margin-top: 0.375rem;
}
.stat-delta, .setup-card-sub {
  font-size: 0.6875rem !important;
  color: var(--text-3) !important;
  margin-top: 0.5rem !important;
  line-height: 1.55 !important;
}

/* Big-num treatment (Performance "How am I interviewing?" hero). */
.big-num {
  font-family: 'IBM Plex Mono', ui-monospace, monospace !important;
  font-size: 4rem !important;
  font-weight: 300 !important;
  letter-spacing: -0.03em !important;
  line-height: 1 !important;
}
.big-num .small {
  font-size: 1.375rem;
  color: var(--text-3);
  margin-left: 0.375rem;
}

/* ─── Sidebar refinement ──────────────────────────────────────── */
.sidebar {
  background: var(--bg) !important;
  padding: 1.75rem 1rem !important;
}
.brand-name {
  font-family: 'IBM Plex Mono', ui-monospace, monospace !important;
  font-size: 0.6875rem !important;
  letter-spacing: 0.22em !important;     /* tightened from 0.32 to give long workspace names more room */
  font-weight: 500 !important;
  color: var(--text) !important;
  /* Allow up to 2 lines, ellipsis if even that overflows. Lets
     "Twenty Holdings (Demo)" render as "TWENTY HOLDINGS / (DEMO)"
     instead of getting truncated mid-word to "(D". */
  display: -webkit-box !important;
  -webkit-line-clamp: 2 !important;
  -webkit-box-orient: vertical !important;
  line-clamp: 2 !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  word-break: break-word !important;
  line-height: 1.3 !important;
}
.nav-section-label {
  margin: 1.125rem 0 0.375rem !important;
  padding: 0 0.5rem !important;
}
.nav-item {
  font-size: var(--fs-body-sm) !important;
  padding: 0.4375rem 0.625rem !important;
  border-radius: 5px !important;
  color: var(--text-2) !important;
  transition: background 0.1s, color 0.1s !important;
  gap: 0.625rem !important;
}
.nav-item:hover {
  background: rgba(255,255,255,0.03) !important;
  color: var(--text) !important;
}
.nav-item.active {
  background: rgba(255,255,255,0.05) !important;
  color: var(--text) !important;
}
.nav-icon { opacity: 0.7; }
.nav-item.active .nav-icon { opacity: 1; }

/* User chip at bottom */
.user-chip {
  padding: 0.625rem 0.375rem !important;
  border-top: 1px solid var(--hairline);
}

/* ─── People grid tiles — softer hairline, more breathing room ── */
.person-tile {
  border-radius: 10px !important;
  padding: 1rem 1.125rem !important;
  transition: all 0.12s !important;
}
.person-tile:hover {
  border-color: var(--hairline-strong) !important;
  background: rgba(255,255,255,0.025) !important;
}
.person-name { font-size: 0.875rem !important; font-weight: 500 !important; }
.person-role { font-size: 0.6875rem !important; color: var(--text-3) !important; margin-top: 0.1875rem !important; }

/* ─── Inputs / textareas / selects ────────────────────────────── */
input[type="text"], input[type="email"], input[type="password"], input[type="number"],
input[type="search"], input[type="date"], textarea, select {
  background: var(--bg) !important;
  border: 1px solid var(--hairline-strong) !important;
  color: var(--text) !important;
  border-radius: 6px !important;
  font-family: inherit !important;
  transition: border-color 0.12s !important;
}
input:focus, textarea:focus, select:focus {
  border-color: var(--text-3) !important;
  outline: none !important;
}

/* ─── Collapsible heads — refined hover, mono labels ─────────── */
.collapsible-head {
  padding: 1rem 0 !important;
  margin-top: 0.25rem;
  transition: color 0.12s;
}
/* Normalize the inline margin-top on settings.html collapsibles. The page
   has a mix of 32px and 36px inline values; this clamps them all to one
   consistent rhythm so the sections feel like a single ladder. */
main.content > .collapsible[style*="margin-top"] {
  margin-top: 1.5rem !important;
}

/* ===== Settings page redesign — compress + brighten ============
   Peter flagged the settings page as "ugly, complicated, hard to read"
   on Jun 15. This block tightens vertical rhythm, brightens muted
   greys, and increases label/sub legibility. Scoped to .settings-content
   so it doesn't touch other pages that share .collapsible / .setup-row. */
.settings-content {
  max-width: 55rem !important;
}

/* Page header sits closer to first section. */
.settings-content .page-header {
  margin-bottom: 0.75rem;
}

/* Tighten collapsible spacing dramatically (was 24px, now 8px) so the
   page is browseable as a list, not a series of "rooms". */
.settings-content > .collapsible[style*="margin-top"] {
  margin-top: 0.25rem !important;
}
.settings-content > .lbl {
  margin-top: 0.875rem !important;
}

/* Collapsible heads — bigger, brighter, more clickable-looking. */
.settings-content .collapsible-head {
  padding: 0.75rem 0 !important;
  border-top-color: rgba(255, 255, 255, 0.10) !important;
}
.settings-content .collapsible-head .lbl {
  font-size: var(--fs-caption) !important;
  color: var(--text-2) !important;        /* was --text-4 — lifted two steps */
  letter-spacing: 0.18em !important;
  font-weight: 500 !important;
}
.settings-content .collapsible-head:hover .lbl {
  color: var(--text) !important;
}
.settings-content .collapsible-head::after {
  color: var(--text-3) !important;
  font-size: 1.125rem !important;
}

/* Brighten the muted body text + helper subs throughout settings. */
.settings-content .integration-sub,
.settings-content .setup-card-sub,
.settings-content .hint {
  color: var(--text-2) !important;        /* was --text-3/4 */
}

/* Compress + brighten setup-cards (BILLING + WORKSPACE summary tiles). */
.settings-content .setup-grid {
  gap: 0.625rem !important;
  margin-top: 0.5rem !important;
}
.settings-content .setup-card {
  padding: 0.75rem 0.875rem !important;
  background: rgba(255, 255, 255, 0.025) !important;
  border-color: rgba(255, 255, 255, 0.10) !important;
}
.settings-content .setup-card .lbl {
  font-size: var(--fs-tiny) !important;
  color: var(--text-3) !important;
  margin-bottom: 0.375rem !important;
}
.settings-content .setup-card-val {
  font-size: 1rem !important;
  color: var(--text) !important;
  font-weight: 500 !important;
}
.settings-content .setup-card-sub {
  font-size: 0.71875rem !important;
  margin-top: 0.1875rem !important;
}

/* Tighter setup-rows (toggle rows). */
.settings-content .setup-row {
  padding: 0.625rem 0 !important;
  border-bottom: 1px solid rgba(255, 255, 255, 0.05) !important;
  font-size: var(--fs-body-sm) !important;
}
.settings-content .setup-row:last-child {
  border-bottom: none !important;
}
.settings-content .setup-row > span:first-child {
  color: var(--text) !important;
  font-weight: 400;
}
.settings-content .integration-name {
  font-size: var(--fs-body-sm) !important;
  color: var(--text) !important;
  font-weight: 500;
  display: block;
}
.settings-content .integration-sub {
  font-size: 0.71875rem !important;
  line-height: 1.55 !important;
  margin-top: 0.125rem;
  display: block;
}

/* Brighter integration-help collapsibles (those "How do I connect this?" rows). */
.settings-content .integration-help summary {
  color: var(--text-3) !important;
  padding: 0.5rem 0 !important;
  font-size: var(--fs-caption) !important;
}
.settings-content .integration-help summary:hover {
  color: var(--text) !important;
}
.settings-content .integration-help ol {
  font-size: var(--fs-caption) !important;
  color: var(--text-2) !important;
  line-height: 1.65 !important;
}

/* Toggle pills — brighten the "off" state so it doesn't look dead. */
.settings-content .toggle {
  background: rgba(255, 255, 255, 0.10) !important;
}
.settings-content .toggle.on {
  background: var(--text) !important;
}

/* ===== Employee add-modal drop zone ===== */
.employee-drop-zone {
  border: 1px dashed var(--hairline-strong);
  border-radius: 7px;
  padding: 0.875rem 1rem;
  text-align: center;
  cursor: pointer;
  transition: border-color 0.12s, background 0.12s;
  font-size: 0.78125rem;
  color: var(--text-2);
  user-select: none;
}
.employee-drop-zone:hover,
.employee-drop-zone.drag-over {
  border-color: var(--text-3);
  background: rgba(255, 255, 255, 0.03);
}

/* "Add to Jedah" tip banner on Candidates + Team pages. Subtle hairline
   panel that points users at the Chrome extension without taking real
   estate from the main list. */
.add-to-jedah-hint {
  display: flex;
  align-items: flex-start;
  gap: 0.625rem;
  padding: 0.6875rem 0.875rem;
  margin: 0 0 1.125rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 6px;
  font-size: var(--fs-caption);
  color: var(--text-2);
  line-height: 1.6;
}
.add-to-jedah-hint-icon {
  font-size: 0.875rem;
  line-height: 1.4;
  flex-shrink: 0;
}
.add-to-jedah-hint b {
  color: var(--text);
  font-weight: 500;
}
.collapsible-head:hover {
  color: var(--text);
}
.collapsible-head:hover .lbl {
  color: var(--text-2) !important;
}
.collapsible-head .lbl {
  transition: color 0.12s;
}

/* ─── Content layout — wider, more whitespace ──────────────────
   max-width reads the fluid --content-max / --content-wide tokens so the
   reading column widens on a large display instead of leaving one huge
   empty gutter. Both are clamped in design-tokens.css. */
.content {
  width: 100%;
  /* main.content is BOTH of the mock's two elements: the padded shell
     (.jw-content, 26px/36px) and the measured column (.jw-page). A max-width
     on a border-box element includes that padding, so the cap has to carry
     the 2 x 36px gutter to land the text on the mock's measure. */
  max-width: calc(var(--content-max) + 72px);
  margin-left: auto;
  margin-right: auto;
}
.content-wide    { max-width: calc(var(--content-wide) + 72px) !important; }
.content-narrow  { max-width: 952px !important; }   /*  880 + 72 */
.content-compact { max-width: 932px !important; }   /*  860 + 72 */
@media (max-width: 720px) {
  .content { padding: 1.5rem 1.25rem !important; }
}

/* ============ Reading measure ============
   The app column above is deliberately allowed to fill a big display, which
   is right for card grids, tables and list rows and wrong for paragraphs: a
   1700px line of prose is unreadable no matter how much room there is. Every
   block that holds running text is therefore capped at --prose-max (46rem,
   fluid), and the leftover width inside its card reads as margin.

   Scoped to p./div. deliberately: `span.editorial` is a one-line, ellipsised
   summary inside a flex row (dashboard "Recent interviews", job-description
   cards), not a paragraph, and capping it would truncate it early. */
p.editorial,
div.editorial,
.jwd-read,
.pattern-read-prose,
.pattern-read-body,
.devils-advocate-body,
.person-dimension-narrative,
.da-prose,
.deep-analysis,
.deep-analysis-section > p,
.jw-prose {
  max-width: var(--prose-max);
}

/* ============ THE EXPORT'S PER-SCREEN MEASURE ============
   redesign-v5 does not draw every screen at one width. .jw-page defaults to
   --content-max (1100px), .jw-page-wide to --content-wide (1280px), and the
   list-first screens are drawn narrower still -- inline on .jw-page in the
   mocks:

     01 Dashboard / 02 Candidates / 05 Interviews    880px
     10 Scheduling / 12 + 13 Settings                860px
     03 + 04 Candidate / 11 Job Descriptions        1100px  (--content-max)
     07 Compare / 08 Org Insights / 09 Performance  1280px  (--content-wide)

   5492dd8 deleted the inline 880/860 caps and replaced them with one
   ever-growing token for every page, because an inline declaration cannot be
   beaten by the data-layout variants. That is most of the "warped" read: a
   dashboard composed for an 880px column, stretched to 1500px, is a
   different page -- the KPI strip thins out, the two-up cards drift apart
   and the list rows turn into rules with a word at each end.

   The measures are back, as classes rather than inline styles, so the layout
   axis further down this file can still override them.

   The @media(min-width:1800px) two-column dashboard that used to live here
   went with them: it existed only to soak up a column that had grown too
   wide, and inside an 880px measure it would put two sections side by side
   in 440px each. */
.content-narrow  { max-width: 952px; }   /* 880 + the 2 x 36px shell gutter */
.content-compact { max-width: 932px; }   /* 860 + the 2 x 36px shell gutter */

/* ─── Hint footers — softer, mono ──────────────────────────── */
.hint {
  font-family: 'IBM Plex Mono', ui-monospace, monospace !important;
  font-size: 0.625rem !important;
  letter-spacing: 0.12em !important;
  color: var(--text-4) !important;
  text-transform: uppercase;
  margin-top: 2.5rem !important;
  padding-top: 1.25rem;
  border-top: 1px solid var(--hairline);
}

/* ─── Profile hero names — match the page-title hero treatment ── */
.cand-name, .emp-name {
  font-size: 2.25rem !important;
  font-weight: 400 !important;
  letter-spacing: -0.03em !important;
  line-height: 1.1 !important;
  color: var(--text);
}
.cand-sub, .profile-hero-meta {
  font-size: var(--fs-body-sm) !important;
  color: var(--text-2) !important;
  margin-top: 0.375rem !important;
}
@media (max-width: 720px) {
  .cand-name, .emp-name { font-size: 1.75rem !important; }
}

/* Big alignment score in employee profile — mono numeric. */
.profile-score-num {
  font-family: 'IBM Plex Mono', ui-monospace, monospace !important;
  font-size: var(--fs-display-xl) !important;
  font-weight: 300 !important;
  letter-spacing: -0.02em !important;
}
.profile-score-lbl {
  font-family: 'IBM Plex Mono', ui-monospace, monospace !important;
  font-size: 0.625rem !important;
  letter-spacing: 0.22em !important;
  color: var(--text-4) !important;
  text-transform: uppercase;
}

/* Section header (h2) inside pages — slightly bigger than legacy. */
.section-h h2, h2 {
  font-size: 1.125rem !important;
  font-weight: 500 !important;
  letter-spacing: -0.015em !important;
  color: var(--text);
}

/* ─── Granular hovers — kill block-wide background fills ──────────
   Previous pass had .card:hover, .person-tile:hover, .list-row:hover
   setting backgrounds, which lit up the whole container under your
   cursor. Override all of those to a subtle border-only change so
   only the *specific* clickable child gets highlighted. */
.card:hover,
.person-tile:hover,
.list-row:hover,
.template-card:hover,
.rubric-active:hover,
.interview-row:hover,
.compare-pick-row:hover,
.compose-row:hover {
  background: transparent !important;
}
.card:hover,
.person-tile:hover,
.template-card:hover,
.rubric-active:hover {
  border-color: var(--hairline-strong) !important;
  transform: none !important;
}

/* Names and titles inside blocks brighten on direct hover. */
.person-tile .person-name,
.list-row .pri,
.list-row .name,
.compose-row .compose-name,
.template-name,
.rubric-active-name {
  transition: color 0.12s !important;
}
.person-tile .person-name:hover,
.list-row .pri:hover,
.list-row .name:hover,
.compose-row .compose-name:hover,
.template-name:hover,
.rubric-active-name:hover {
  color: var(--text) !important;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  text-decoration-color: var(--text-3) !important;
}

/* Ghost buttons inside cards — only the button itself flickers, not the card. */
.card .btn,
.person-tile .btn,
.list-row .btn {
  transition: border-color 0.12s, color 0.12s, background 0.12s !important;
}

/* Arrows (→) inside list rows brighten on hover. */
.list-row .arrow,
.interview-row .arrow {
  color: var(--text-4);
  transition: color 0.12s, transform 0.12s;
}
.list-row:hover .arrow,
.interview-row:hover .arrow {
  /* Only the arrow shifts — block stays still. */
  color: var(--text) !important;
  transform: translateX(2px);
}

/* Nav items keep their subtle background hover — they're not blocks
   containing other interactive children, so block hover is fine here. */

/* ═══════════════════════════════════════════════════════════════
   MOBILE PASS — narrow-viewport layout
   Sidebar collapses behind a hamburger; content takes full width;
   tiles stack; padding tightens. Activates under 1024px.
   ═══════════════════════════════════════════════════════════════ */

/* Hamburger button — only appears on mobile. JS in sidebar-tier.js
   appends one to the page header on narrow viewports. */
.jedah-hamburger {
  display: none;
  position: fixed;
  top: 0.875rem;
  left: 0.875rem;
  z-index: 9999;
  width: 2.5rem;
  height: 2.5rem;
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  cursor: pointer;
  padding: 0;
  align-items: center;
  justify-content: center;
}
.jedah-hamburger span {
  display: block;
  width: 1.125rem;
  height: 0.09375rem;
  background: var(--text);
  position: relative;
}
.jedah-hamburger span::before,
.jedah-hamburger span::after {
  content: "";
  position: absolute;
  left: 0;
  width: 1.125rem;
  height: 0.09375rem;
  background: var(--text);
}
.jedah-hamburger span::before { top: -0.375rem; }
.jedah-hamburger span::after  { top:  0.375rem; }

/* Backdrop that dims the page when the sidebar drawer is open. */
.jedah-sidebar-backdrop {
  display: none;
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.55);
  z-index: 9997;
}

/* Sidebar drawer activates at tablet/laptop breakpoint. */
@media (max-width: 1024px) {
  /* Hamburger visible. */
  .jedah-hamburger { display: flex; }

  /* Shell becomes a single column; sidebar slides in over content. */
  .shell {
    grid-template-columns: 1fr !important;
  }

  /* Sidebar becomes a fixed off-canvas drawer. */
  .sidebar {
    position: fixed !important;
    top: 0;
    left: 0;
    bottom: 0;
    width: 80vw;
    max-width: 17.5rem;
    transform: translateX(-100%);
    transition: transform 0.18s ease;
    z-index: 9998;
    border-right: 1px solid var(--hairline-strong) !important;
    overflow-y: auto;
  }
  body.sidebar-open .sidebar { transform: translateX(0); }
  body.sidebar-open .jedah-sidebar-backdrop { display: block; }

  /* Push the content out from under the (hidden) sidebar. */
  .content,
  .content-wide {
    padding: 4rem 1.125rem 2rem !important;
    max-width: 100% !important;
  }
}

/* Phone-specific layout adjustments (narrower than tablet). */
@media (max-width: 720px) {
  /* Page header — stack title, button, and meta. */
  .page-header {
    flex-direction: column;
    align-items: flex-start !important;
    gap: 0.75rem;
    margin-bottom: 1.75rem !important;
    padding-bottom: 1.125rem !important;
  }
  .page-title { font-size: 1.75rem !important; }
  .page-sub   { font-size: var(--fs-caption) !important; }
  .cand-name, .emp-name { font-size: var(--fs-display) !important; }

  /* Tiles + grids stack. */
  .people-grid-simple,
  .stats-row,
  .setup-grid,
  .perf-grid-2,
  .dim-grid,
  .compose-list {
    grid-template-columns: 1fr !important;
    gap: 0.625rem !important;
  }
  .stat-card, .setup-card { padding: 0.875rem 1rem; }

  /* Person tiles — slightly tighter on phone. */
  .person-tile { padding: 0.75rem 0.875rem !important; }

  /* Cards trim horizontal padding. */
  .card { padding: 0.875rem !important; }

  /* Tables overflow horizontally instead of breaking the layout. */
  .perf-table,
  table {
    display: block;
    overflow-x: auto;
    white-space: nowrap;
    max-width: 100%;
  }

  /* Modals: full-screen on mobile so users can actually use the form. */
  .modal {
    max-width: 100% !important;
    margin: 0 !important;
    min-height: 100vh;
    border-radius: 0 !important;
  }

  /* Page tabs scroll horizontally if they overflow. */
  .page-tabs,
  .perf-tabs {
    overflow-x: auto;
    white-space: nowrap;
    flex-wrap: nowrap !important;
  }

  /* Filter chips wrap to a second line gracefully. */
  .filter-row { flex-wrap: wrap; gap: 0.375rem !important; }

  /* Buttons shrink a touch. */
  .btn { padding: 0.5rem 0.875rem !important; font-size: var(--fs-caption) !important; }

  /* Hide the chevron in collapsible heads' :after if it overflows. */
  .collapsible-head { padding: 0.875rem 0.25rem !important; }
}

/* Even smaller screens — 380px iPhone SE etc — extra tightening. */
@media (max-width: 400px) {
  .content, .content-wide { padding: 3.75rem 0.875rem 1.5rem !important; }
  .page-title { font-size: var(--fs-display) !important; }
  .stat-num, .setup-card-val { font-size: 1.375rem !important; }
  .big-num { font-size: 2.75rem !important; }
}

/* ===== Devil's Advocate panel ===========================================
   Counterweight UI on candidate.html. Visually distinct from the deep-analysis
   block (which is "the case for") — slightly warmer tone, smarter typography,
   so audience reads it as a different *kind* of analysis, not a duplicate.
*/
.devils-advocate-section { margin-bottom: 1.75rem; }

.da-cta {
  background: rgba(40, 28, 28, 0.35);
  border: 1px solid rgba(200, 130, 130, 0.22);
  border-radius: 10px;
  padding: 1.125rem 1.25rem;
  display: flex;
  gap: 1rem;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
}
.da-cta-text { font-size: var(--fs-body-sm); color: var(--text-2); line-height: 1.6; max-width: 35rem; }
.da-cta-text em { color: var(--text); font-style: italic; font-weight: 500; }
.da-cta button { white-space: nowrap; }
.da-empty {
  font-size: var(--fs-caption); color: var(--text-3); padding: 1.125rem 1.25rem;
  background: var(--bg-2); border-radius: 8px; line-height: 1.55;
}
.da-loading {
  font-size: var(--fs-body-sm); color: var(--text-2); padding: 1.375rem 1.25rem;
  background: var(--bg-2); border-radius: 8px;
}

.da-analysis {
  background: var(--bg-2); /* was a hardcoded dark literal: unreadable on the light palettes */
  border: 1px solid rgba(200, 130, 130, 0.18);
  border-radius: 12px;
  padding: 1.5rem 1.625rem 1.125rem;
}
.da-headline {
  display: flex; justify-content: space-between; align-items: flex-start;
  gap: 1rem; margin-bottom: 1.375rem; padding-bottom: 1.125rem;
  border-bottom: 1px solid var(--hairline);
}
.da-headline-text {
  font-size: 1.125rem; font-weight: 500; line-height: 1.4; color: var(--text);
  letter-spacing: -0.2px; flex: 1;
}
.da-verdict {
  font-family: "IBM Plex Mono", monospace; font-size: 0.6875rem;
  letter-spacing: 0.14em; font-weight: 500; padding: 0.375rem 0.625rem;
  border-radius: 4px; white-space: nowrap; flex-shrink: 0;
}
.da-verdict-weakno { background: rgba(198, 107, 92, 0.16); color: var(--c-danger-text); }
.da-verdict-leanno { background: rgba(220, 170, 130, 0.16); color: var(--score-warn); }
.da-verdict-qualyes { background: rgba(120, 200, 145, 0.14); color: var(--sage-bright); }
.da-verdict-even { background: rgba(180, 180, 180, 0.12); color: var(--text-2); }

.da-block { margin-top: 1.375rem; }
.da-block:first-child { margin-top: 0; }
.da-block-lbl {
  font-family: "IBM Plex Mono", monospace; font-size: 0.625rem;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--text-3); margin-bottom: 0.625rem; font-weight: 500;
}
.da-item {
  background: rgba(40, 28, 28, 0.30);
  border-left: 3px solid rgba(200, 130, 130, 0.4);
  border-radius: 4px;
  padding: 0.75rem 0.875rem;
  margin-bottom: 0.5rem;
}
.da-item.da-sev-high   { border-left-color: var(--c-danger-text); background: rgba(198, 107, 92, 0.10); }
.da-item.da-sev-med    { border-left-color: rgba(220, 170, 130, 0.6); }
.da-item.da-sev-low    { border-left-color: rgba(180, 180, 180, 0.4); }
.da-item-head { display: flex; gap: 0.625rem; align-items: center; margin-bottom: 0.375rem; }
.da-sev-pill {
  font-family: "IBM Plex Mono", monospace; font-size: 0.5625rem;
  letter-spacing: 0.14em; padding: 0.125rem 0.375rem; border-radius: 3px;
  background: rgba(255,255,255,0.06); color: var(--text-3); flex-shrink: 0;
}
.da-sev-high .da-sev-pill { background: rgba(198, 107, 92, 0.18); color: var(--c-danger-text); }
.da-sev-med  .da-sev-pill { background: rgba(220, 170, 130, 0.16); color: var(--score-warn); }
.da-item-point { font-size: 0.875rem; font-weight: 500; color: var(--text); line-height: 1.4; }
.da-item-ev { font-size: var(--fs-caption); color: var(--text-2); line-height: 1.55; padding-left: 0; }
.da-item-ev b { color: var(--text-3); font-weight: 500; font-family: "IBM Plex Mono", monospace; font-size: 0.625rem; letter-spacing: 0.06em; }

.da-prose { font-size: var(--fs-body-sm); color: var(--text-2); line-height: 1.65; }
.da-list {
  list-style: disc; padding-left: 1.375rem; margin: 0;
  font-size: var(--fs-body-sm); color: var(--text-2); line-height: 1.6;
}
.da-list li { margin-bottom: 0.375rem; }
.da-list-ol { list-style: decimal; }
.da-counter {
  margin-top: 1.375rem; padding: 1rem 1.125rem;
  background: rgba(120, 200, 145, 0.06);
  border: 1px solid rgba(120, 200, 145, 0.18);
  border-radius: 8px;
}
.da-counter .da-block-lbl { color: rgba(120, 200, 145, 0.8); }

.da-foot {
  display: flex; justify-content: space-between; align-items: center;
  margin-top: 1.125rem; padding-top: 0.875rem; border-top: 1px solid var(--hairline);
  font-family: "IBM Plex Mono", monospace; font-size: 0.625rem;
  color: var(--text-3); letter-spacing: 0.04em;
}
.da-regen {
  background: transparent; border: 1px solid var(--hairline);
  color: var(--text-3); font-family: inherit; font-size: 0.625rem;
  padding: 0.25rem 0.625rem; border-radius: 3px; cursor: pointer;
  transition: all 0.12s;
}
.da-regen:hover { border-color: var(--text-3); color: var(--text); }

/* ===== Person Dimensions — 8-factor framework panel ==================
   The deepest, most philosophical read Jedah produces. Visually distinct
   from deep-analysis (green) and devil's advocate (warm red) — uses a
   neutral high-contrast card style with a subtle accent so it reads as
   "the foundational analysis" rather than competing with the others.
*/
.pd-section { margin-bottom: 1.75rem; }

.pd-cta {
  background: var(--bg-2); /* was a hardcoded dark literal: unreadable on the light palettes */
  border: 1px solid var(--hair-2);
  border-radius: 10px;
  padding: 1.25rem 1.375rem;
  display: flex;
  gap: 1.125rem;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
}
.pd-cta-text { font-size: 0.875rem; color: var(--text-2); line-height: 1.65; max-width: 38.75rem; }
.pd-cta-text b { color: var(--text); }
.pd-cta button { white-space: nowrap; }

.pd-loading {
  background: var(--bg-2); padding: 1.5rem 1.375rem; border-radius: 8px;
  font-size: 0.875rem; color: var(--text-2);
}
.pd-loading-sub { font-size: var(--fs-caption); color: var(--text-3); margin-top: 0.5rem; }

.pd-analysis {
  background: var(--bg-2); /* was a hardcoded dark literal: unreadable on the light palettes */
  border: 1px solid var(--hair-2);
  border-radius: 12px;
  padding: 1.625rem 1.75rem 1.25rem;
}

.pd-headline {
  font-size: 1.125rem;
  font-weight: 500;
  line-height: 1.45;
  color: var(--text);
  letter-spacing: -0.2px;
  margin-bottom: 1.125rem;
  padding-bottom: 1.125rem;
  border-bottom: 1px solid var(--hairline);
}

.pd-compat {
  background: rgba(255, 255, 255, 0.04);
  border-left: 3px solid var(--accent, #b0b0b0);
  padding: 0.875rem 1.125rem;
  margin-bottom: 1.375rem;
  border-radius: 4px;
  font-size: 0.875rem;
  line-height: 1.65;
  color: var(--text-2);
}
.pd-compat-lbl {
  font-family: "IBM Plex Mono", monospace; font-size: 0.625rem;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--text-3); margin-bottom: 0.375rem; font-weight: 500;
}

.pd-top { display: flex; gap: 1.375rem; flex-wrap: wrap; margin-bottom: 1.5rem; }
.pd-top-block { flex: 1; min-width: 15rem; }
.pd-top-lbl {
  font-family: "IBM Plex Mono", monospace; font-size: 0.625rem;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--text-3); margin-bottom: 0.5rem; font-weight: 500;
}
.pd-chip {
  display: inline-block; padding: 0.375rem 0.75rem;
  border-radius: 4px; font-size: var(--fs-caption); font-weight: 500;
  margin: 0 0.375rem 0.375rem 0;
}
.pd-chip-good { background: rgba(120, 200, 145, 0.14); color: var(--sage-bright); }
.pd-chip-warn { background: rgba(198, 107, 92, 0.14); color: var(--c-danger-text); }

.pd-dims-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0.875rem;
  margin-bottom: 1.375rem;
}
@media (min-width: 900px) {
  .pd-dims-grid { grid-template-columns: 1fr 1fr; }
}

.pd-dim {
  background: rgba(0, 0, 0, 0.25);
  border: 1px solid var(--hair);
  border-radius: 8px;
  padding: 1rem 1.125rem;
}
.pd-dim-head {
  display: flex; justify-content: space-between; align-items: center;
  gap: 0.75rem; margin-bottom: 0.625rem;
}
.pd-dim-name {
  font-size: var(--fs-h3); font-weight: 600; color: var(--text);
  letter-spacing: -0.1px;
}
.pd-dim-meta { display: flex; gap: 0.5rem; align-items: center; flex-shrink: 0; }
.pd-dim-score {
  font-family: "IBM Plex Mono", monospace; font-size: var(--fs-caption);
  padding: 0.1875rem 0.5rem; border-radius: 3px; font-weight: 500;
}
.pd-score-exceptional { background: rgba(120, 200, 145, 0.20); color: var(--sage-bright); }
.pd-score-strong      { background: rgba(120, 200, 145, 0.12); color: var(--sage-bright); }
.pd-score-solid       { background: rgba(180, 180, 180, 0.12); color: var(--text); }
.pd-score-concern     { background: rgba(220, 170, 130, 0.16); color: var(--score-warn); }
.pd-score-gap         { background: rgba(198, 107, 92, 0.16); color: var(--c-danger-text); }
.pd-score-na          { background: rgba(180, 180, 180, 0.06); color: var(--text-3); }
.pd-dim-conf {
  font-family: "IBM Plex Mono", monospace; font-size: 0.5625rem;
  letter-spacing: 0.14em; padding: 0.1875rem 0.4375rem; border-radius: 3px;
}
.pd-conf-high { background: rgba(255, 255, 255, 0.10); color: var(--text); }
.pd-conf-med  { background: rgba(255, 255, 255, 0.06); color: var(--text-2); }
.pd-conf-low  { background: rgba(255, 255, 255, 0.04); color: var(--text-3); }

.pd-dim-read {
  font-size: 0.875rem; color: var(--text); line-height: 1.6;
  margin-bottom: 0.625rem;
}
.pd-dim-ev-lbl {
  font-family: "IBM Plex Mono", monospace; font-size: 0.5625rem;
  letter-spacing: 0.14em; color: var(--text-3); margin-bottom: 0.25rem;
  font-weight: 500;
}
.pd-dim-ev ul {
  margin: 0; padding-left: 1.125rem; font-size: var(--fs-body-sm);
  color: var(--text-2); line-height: 1.55;
}
.pd-dim-ev li { margin-bottom: 0.25rem; }
.pd-dim-probe {
  margin-top: 0.625rem; font-size: var(--fs-caption); color: var(--text-3);
  line-height: 1.55; padding-top: 0.5rem;
  border-top: 1px dashed var(--hairline);
}
.pd-dim-probe b {
  font-family: "IBM Plex Mono", monospace; font-size: 0.5625rem;
  letter-spacing: 0.14em; color: var(--text-3); font-weight: 500;
}

/* ─── Shadow read (interviewer-facing) ─────────────────────────────────
   A dimension's shadow is the dark side of its strength — independent of the
   1-10 score. The chip sits next to the score; the shadow_evidence quote is
   behind a drop-down. Latent = muted; present = stronger.
   NOTE: .pd-shadow-flag and .pd-shadow-badge are the pre-scoring, risk-word-
   only chips. Superseded by .pd-shadow-score below (which carries the number)
   and no longer emitted by any renderer. Kept for one release in case a
   surface is missed; delete once nothing references them. */
.pd-shadow-flag {
  font-family: "IBM Plex Mono", monospace; font-size: 0.5625rem;
  letter-spacing: 0.12em; text-transform: uppercase; font-weight: 600;
  padding: 0.1875rem 0.5rem; border-radius: 9999px; border: 1px solid;
}
.pd-shadow-flag.pd-shadow-latent {
  color: var(--text-3); border-color: var(--hairline);
  background: rgba(255, 255, 255, 0.04);
}
.pd-shadow-flag.pd-shadow-present {
  color: var(--score-warn, #E8978A); border-color: rgba(198, 107, 92, 0.4);
  background: rgba(198, 107, 92, 0.12);
}
.pd-shadow {
  margin-top: 0.625rem; border: 1px solid var(--hairline);
  border-radius: 8px; background: rgba(0, 0, 0, 0.18); overflow: hidden;
}
.pd-shadow.pd-shadow-present { border-color: rgba(198, 107, 92, 0.32); }
.pd-shadow > summary {
  list-style: none; cursor: pointer; display: flex; align-items: center;
  gap: 0.625rem; padding: 0.625rem 0.75rem;
}
.pd-shadow > summary::-webkit-details-marker { display: none; }
.pd-shadow > summary:hover { background: rgba(255, 255, 255, 0.03); }
.pd-shadow .cq-chevron {
  font-size: 0.625rem; color: var(--text-3); transition: transform 0.15s ease;
  flex-shrink: 0;
}
.pd-shadow[open] .cq-chevron { transform: rotate(90deg); }
.pd-shadow-label {
  flex: 1; min-width: 0; font-size: 0.75rem; font-weight: 600; color: var(--text);
}
.pd-shadow-badge {
  flex-shrink: 0; font-family: "IBM Plex Mono", monospace; font-size: 0.5625rem;
  letter-spacing: 0.1em; font-weight: 600; padding: 0.125rem 0.4375rem; border-radius: 9999px;
  border: 1px solid;
}
.pd-shadow-badge.pd-shadow-latent {
  color: var(--text-3); border-color: var(--hairline); background: var(--hair);
}
.pd-shadow-badge.pd-shadow-present {
  color: var(--score-warn, #E8978A); border-color: rgba(198, 107, 92, 0.4);
  background: rgba(198, 107, 92, 0.12);
}
.pd-shadow-detail {
  padding: 0 0.75rem 0.75rem 2.125rem; font-size: 0.8125rem; line-height: 1.6; color: var(--text-2);
}
.pd-shadow-def { color: var(--text-3); margin-bottom: 0.5rem; font-style: italic; }
.pd-shadow-detail .cq-ev-lbl {
  font-family: "IBM Plex Mono", monospace; font-size: 0.59375rem;
  letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-4);
  display: block; margin-bottom: 0.25rem;
}

/* ─── Shadow SCORE (first class, alongside the strength score) ──────────
   THE SHADOW SCALE IS INVERTED: 1 is good, 10 is bad. So on these chips
   colour always means good-or-bad and never high-or-low — a GREEN shadow chip
   carries a LOW number and a RED one carries a HIGH number, the exact reverse
   of the strength value sitting beside it on the same row. The state word
   (CLEAR / LATENT / PRESENT) is baked into the chip so the direction never
   rests on colour alone, and .pd-shadow-legend states it in words once per
   card. Do not "fix" the ramp to match the strength colours. */
.pd-shadow-score {
  display: inline-flex; align-items: baseline; gap: 0.375rem;
  font-family: "IBM Plex Mono", monospace; font-size: 0.5625rem;
  letter-spacing: 0.12em; text-transform: uppercase; font-weight: 600;
  padding: 0.1875rem 0.5rem; border-radius: 9999px; border: 1px solid;
  white-space: nowrap;
}
.pd-shadow-score .pd-shadow-num {
  font-size: 0.6875rem; letter-spacing: 0.02em; font-variant-numeric: tabular-nums;
}
.pd-shadow-score .pd-shadow-state { font-weight: 500; opacity: 0.78; }
.pd-shadow-score.is-clear {
  color: var(--score-v3-high); border-color: rgba(123, 166, 140, 0.34);
  background: rgba(123, 166, 140, 0.10);
}
.pd-shadow-score.is-latent {
  color: var(--score-v3-mid); border-color: rgba(232, 149, 68, 0.34);
  background: rgba(232, 149, 68, 0.10);
}
.pd-shadow-score.is-present {
  color: var(--score-v3-low); border-color: rgba(198, 107, 92, 0.44);
  background: rgba(198, 107, 92, 0.14);
}
.pd-shadow-score.is-unknown {
  color: var(--text-4); border-color: var(--hairline);
  background: rgba(255, 255, 255, 0.03);
}
/* The chip also appears inside the drop-down summary, where .pd-shadow-label
   takes flex:1 — keep the chip from being squeezed. */
.pd-shadow > summary .pd-shadow-score { flex-shrink: 0; }
/* Legend + note are sentences, not labels: mono for family, sentence case. */
.pd-shadow-legend {
  font-family: "IBM Plex Mono", monospace; font-size: 0.6875rem;
  letter-spacing: 0.01em; color: var(--text-4);
  line-height: 1.65; margin: 0 0 0.75rem;
}
.pd-shadow-inverted-note {
  font-family: "IBM Plex Mono", monospace; font-size: 0.625rem;
  letter-spacing: 0.01em; color: var(--text-4);
  display: block; margin-bottom: 0.375rem;
}

.pd-next {
  background: rgba(255, 255, 255, 0.04);
  border-radius: 8px;
  padding: 1rem 1.25rem;
  margin-bottom: 1.25rem;
}
.pd-next-lbl {
  font-family: "IBM Plex Mono", monospace; font-size: 0.625rem;
  letter-spacing: 0.18em; color: var(--text-3);
  margin-bottom: 0.5rem; font-weight: 500; text-transform: uppercase;
}
.pd-next ol {
  margin: 0; padding-left: 1.375rem;
  font-size: var(--fs-body-sm); color: var(--text); line-height: 1.65;
}
.pd-next li { margin-bottom: 0.375rem; }

.pd-foot {
  display: flex; justify-content: space-between; align-items: center;
  margin-top: 1.125rem; padding-top: 0.875rem; border-top: 1px solid var(--hairline);
  font-family: "IBM Plex Mono", monospace; font-size: 0.625rem;
  color: var(--text-3); letter-spacing: 0.04em;
}
.pd-regen {
  background: transparent; border: 1px solid var(--hairline);
  color: var(--text-3); font-family: inherit; font-size: 0.625rem;
  padding: 0.25rem 0.625rem; border-radius: 3px; cursor: pointer;
  transition: all 0.12s;
}
.pd-regen:hover { border-color: var(--text-3); color: var(--text); }

/* ===== Zoom-screen-share legibility floor ========================
   Bumps small fonts globally so the app reads cleanly on a shared
   screen. Targets the specific contexts where 11–12px text appears
   without breaking layouts that depend on tight typography.
   Toggle off by removing this block — nothing else depends on it.
*/

/* Empty-state hints + helper-text under section labels */
.lbl + p, p.hint {
  font-size: 0.84375rem !important;
  line-height: 1.65 !important;
}

/* Section headers (the .lbl monospace category labels) */
.lbl, .compose-title, .responses-title {
  font-size: 0.78125rem !important;
}

/* Inputs + textareas + selects across the app */
input[type="text"], input[type="email"], input[type="password"], input[type="number"],
input[type="search"], input[type="tel"], input[type="url"], textarea, select {
  font-size: 0.90625rem !important;
}

/* Buttons everywhere */
.btn, button.btn, .btn-ghost, .btn-primary, .btn-small {
  font-size: 0.84375rem !important;
}

/* The mono "EVIDENCE / WHAT TO PROBE" sub-labels stay small (they
   benefit from being secondary), but the body text under them bumps. */
.pd-dim-read, .deep-summary, .deep-point, .da-item-point,
.compose-question, .compose-context.warn,
.resp-name, .resp-theme,
.checkin-tight .ck-q, .checkin-tight .ck-theme {
  font-size: 0.875rem !important;
  line-height: 1.6 !important;
}

/* Tight number columns on people-grid / dashboard tiles */
.person-row .role, .person-row .meta,
.emp-card .meta, .candidate-row .meta {
  font-size: var(--fs-body-sm) !important;
}

/* ===== Person Dimensions — alignment pills (when company side on file) ===== */
.pd-align {
  margin-top: 0.625rem;
  padding: 0.625rem 0.875rem;
  border-radius: 6px;
  font-size: 0.78125rem;
  line-height: 1.55;
}
.pd-align-aligned { background: rgba(120, 200, 145, 0.10); border-left: 3px solid rgba(120, 200, 145, 0.7); }
.pd-align-person  { background: rgba(220, 170, 130, 0.10); border-left: 3px solid rgba(220, 170, 130, 0.7); }
.pd-align-company { background: rgba(130, 170, 220, 0.10); border-left: 3px solid rgba(130, 170, 220, 0.7); }
.pd-align-unknown { background: rgba(180, 180, 180, 0.06); border-left: 3px solid rgba(180, 180, 180, 0.4); }
.pd-align-head { display: flex; gap: 0.75rem; align-items: center; flex-wrap: wrap; }
.pd-align-pill {
  font-family: "IBM Plex Mono", monospace; font-size: 0.625rem;
  letter-spacing: 0.14em; font-weight: 500;
  padding: 0.1875rem 0.5rem; border-radius: 3px;
  background: rgba(255,255,255,0.08); color: var(--text);
}
.pd-align-aligned .pd-align-pill { background: rgba(120, 200, 145, 0.18); color: var(--sage-bright); }
.pd-align-person  .pd-align-pill { background: rgba(220, 170, 130, 0.18); color: var(--score-warn); }
.pd-align-company .pd-align-pill { background: rgba(130, 170, 220, 0.18); color: var(--info); }
.pd-align-meta { font-family: "IBM Plex Mono", monospace; font-size: 0.6875rem; color: var(--text-2); }
.pd-align-meta b { color: var(--text); font-weight: 500; }
.pd-align-friction { margin-top: 0.375rem; color: var(--text-2); }

/* Same panel style for company-dimensions (.cd-section) — reuses .pd-* classes. */
.cd-section { margin-bottom: 1.75rem; }

/* ===== Signout link in the sidebar nav-bottom ===== */
.signout-link {
  display: block;
  font-size: var(--fs-caption);
  color: var(--text-3);
  padding: 0.375rem 0.5rem 0.125rem;
  text-decoration: none;
  border-top: 1px solid var(--hairline);
  margin-top: 0.25rem;
  transition: color 0.12s;
}
.signout-link:hover { color: var(--text); }
.signout-link:focus { outline: 1px dashed var(--hairline-strong); outline-offset: 2px; }

/* ===== UI polish — empty states + hover + loading ============================
   Final-pass demo polish:
   - Empty-state messages get a proper card wrapper (graceful "no data yet")
   - Card-like list rows get a subtle lift on hover (feels responsive on shared screens)
   - Loading text uses higher-contrast color so it reads on Zoom screen-share
   - Modal action buttons standardized: ghost-left, primary-right
*/

/* Empty-state — generic. Apply class="empty-state" to any "no data" message. */
.empty-state {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 12px;
  padding: 3rem 2rem;
  text-align: center;
  color: var(--text-2);
  font-size: var(--fs-body);
  line-height: 1.65;
  max-width: 35rem;
  margin: 1.5rem auto;
}
.empty-state b { color: var(--text); font-weight: 600; }
.empty-state .empty-cta { margin-top: 1.125rem; }

/* Promote bare "no rubrics yet" / "no JDs yet" style blurbs to look like cards
   without requiring per-page HTML edits. Targets the common pattern. */
.rubric-list-empty, .jd-list-empty, .question-list-empty {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 10px;
  padding: 2.5rem 1.75rem;
  text-align: center;
  color: var(--text-2);
  font-size: 0.875rem;
  line-height: 1.6;
}

/* Loading-text contrast — was var(--text-4), now reads on Zoom share. */
.page-sub:has(span:empty), .page-sub {
  /* Don't force-override page-sub everywhere — just the ones with "Loading…" */
}
[data-loading-text], .loading-line {
  color: var(--text-2) !important;
  font-size: 0.875rem !important;
}

/* Subtle hover lift on clickable rows / cards — makes the app feel responsive
   on a shared screen. Only applies to surfaces that ARE clickable (have href
   or data-clickable). Static cards (like .pricing-card on marketing site) keep
   their static state. */
.person-row[href], .candidate-row[href], .emp-card[href],
.rubric-row[href], .jd-row[href], .question-row[href],
a.compose-row, a.resp-row, a.cand-row {
  transition: background 0.14s ease, border-color 0.14s ease, transform 0.14s ease;
}
.person-row[href]:hover, .candidate-row[href]:hover, .emp-card[href]:hover,
.rubric-row[href]:hover, .jd-row[href]:hover, .question-row[href]:hover,
a.compose-row:hover, a.resp-row:hover, a.cand-row:hover {
  background: rgba(255, 255, 255, 0.025);
  border-color: var(--hairline-strong, var(--hairline-strong));
}

/* Modal action button order — primary right, ghost left. The .modal-actions
   container should always justify-end with gap. */
.modal-actions, .modal-foot, .modal .btn-row {
  display: flex;
  justify-content: flex-end;
  gap: 0.625rem;
  margin-top: 1.5rem;
}
.modal-actions .btn-primary, .modal-foot .btn-primary, .modal .btn-row .btn-primary {
  order: 2;
}
.modal-actions .btn-ghost, .modal-foot .btn-ghost, .modal .btn-row .btn-ghost {
  order: 1;
}

/* Reused .integration-card style for "Coming next" on integrations page —
   matches the rest of the page. */
.integration-card .integration-role {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.6875rem;
  letter-spacing: 0.12em;
  color: var(--text-3);
  text-transform: uppercase;
  margin: 0.25rem 0 0.625rem;
}

/* ===== UI polish round 2 — inputs, tabs, focus, breadcrumbs ============= */

/* Form inputs — unified focus state across the entire app.
   Was inconsistent: some inputs had focus rings, others didn't, several
   used different border colors on focus. Now: subtle white-tint ring,
   subtle border-color change, no color shift. */
input[type="text"]:focus,
input[type="email"]:focus,
input[type="password"]:focus,
input[type="number"]:focus,
input[type="search"]:focus,
input[type="tel"]:focus,
input[type="url"]:focus,
input[type="date"]:focus,
input[type="time"]:focus,
input[type="datetime-local"]:focus,
textarea:focus,
select:focus {
  outline: none;
  border-color: var(--text-2) !important;
  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.06);
}

/* Calendar / time / date inputs — scheduling page polish.
   Native date/time pickers have inconsistent dark-theme rendering; force them
   to match the rest of the form-field aesthetic. */
input[type="date"],
input[type="time"],
input[type="datetime-local"],
.sch-time,
.sch-date {
  background: var(--bg-2) !important;
  border: 1px solid var(--hairline-strong, var(--hairline)) !important;
  color: var(--text) !important;
  padding: 0.625rem 0.75rem !important;
  border-radius: 6px !important;
  font-family: inherit !important;
  font-size: 0.875rem !important;
  color-scheme: dark; /* tells the browser to render the picker calendar dark */
}
input[type="date"]:hover,
input[type="time"]:hover,
input[type="datetime-local"]:hover,
.sch-time:hover,
.sch-date:hover {
  border-color: var(--text-3) !important;
}

/* Button focus rings — keyboard nav a11y + clean visual.
   We deliberately keep these subtle so they don't show on mouse-click. */
.btn:focus-visible,
button.btn:focus-visible,
.btn-primary:focus-visible,
.btn-ghost:focus-visible {
  outline: 2px solid var(--text);
  outline-offset: 2px;
}
.nav-item:focus-visible {
  outline: 1px dashed var(--text-3);
  outline-offset: -2px;
}

/* Tabs — unified style across interview / rubric / settings / interviewer
   pages. Was three slightly-different tab implementations. */
.tabs {
  display: flex;
  gap: 0.25rem;
  border-bottom: 1px solid var(--hairline);
  margin: 1.125rem 0 1.375rem;
  padding: 0;
  overflow-x: auto;
}
.tabs .tab,
.tab {
  background: transparent;
  border: 0;
  border-bottom: 2px solid transparent;
  color: var(--text-3);
  font-family: inherit;
  font-size: 0.84375rem;
  font-weight: 500;
  letter-spacing: -0.05px;
  padding: 0.75rem 1.125rem;
  cursor: pointer;
  white-space: nowrap;
  transition: color 0.12s, border-color 0.12s;
  margin-bottom: -0.0625rem;
}
.tabs .tab:hover,
.tab:hover {
  color: var(--text-2);
}
.tabs .tab.active,
.tab.active {
  color: var(--text);
  border-bottom-color: var(--text);
}
.tabs .tab:focus-visible,
.tab:focus-visible {
  outline: none;
  color: var(--text);
}

/* Page header — consistent spacing across every page.
   Was: each page had a slightly different bottom margin / padding. */
.page-header {
  padding-bottom: 1.375rem;
  margin-bottom: 1.5rem;
  border-bottom: 1px solid var(--hairline);
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 1rem;
  flex-wrap: wrap;
}
.page-title {
  font-size: 1.375rem;
  font-weight: 500;
  letter-spacing: -0.3px;
  color: var(--text);
  margin: 0 0 0.25rem;
}
.page-sub {
  font-size: var(--fs-body-sm);
  color: var(--text-3);
  line-height: 1.55;
  margin: 0;
  max-width: 45rem;
}

/* Breadcrumb — pulled from the bunch of inline-styled breadcrumbs on
   candidate.html, employee.html, etc. Now a real class. */
.breadcrumb {
  font-size: var(--fs-caption);
  color: var(--text-3);
  font-family: 'IBM Plex Mono', monospace;
  letter-spacing: 0.04em;
  margin-bottom: 1.125rem;
}
.breadcrumb a {
  color: var(--text-3);
  text-decoration: none;
  transition: color 0.12s;
}
.breadcrumb a:hover { color: var(--text); text-decoration: underline; }
.breadcrumb .sep {
  margin: 0 0.5rem;
  color: var(--hairline-strong, var(--hairline));
}

/* Framework blockquote softening — was border-left 2px solid var(--text)
   which was too stark. */
blockquote {
  border-left: 2px solid var(--text-3);
  background: rgba(255, 255, 255, 0.03);
  padding: 0.875rem 1.125rem;
  margin: 1rem 0;
  font-size: 0.875rem;
  line-height: 1.65;
  color: var(--text-2);
  border-radius: 0 6px 6px 0;
}
blockquote cite {
  display: block;
  margin-top: 0.5rem;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.6875rem;
  letter-spacing: 0.08em;
  color: var(--text-3);
  font-style: normal;
}

/* Labels — uppercase mono "section labels" used everywhere */
.lbl {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.6875rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text-3);
}
.lbl-mute { color: var(--text-4); }

/* ===== Dashboard compression — "Show all" pattern ============== */
.person-tile-extra { display: none; }
.people-grid-expanded .person-tile-extra { display: flex; }

.see-all-link {
  display: block;                         /* was inline-block — full row now */
  margin: 4px 0 32px;
  font-family: 'IBM Plex Mono', monospace;
  font-size: var(--fs-body-sm);                        /* bumped from 11 */
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--text);                     /* was --text-3 (faint) — now full white */
  text-decoration: none;
  padding: 0.875rem 1.125rem;                     /* taller hit-area */
  background: rgba(255, 255, 255, 0.04);
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  text-align: center;
  font-weight: 500;
  cursor: pointer;
  transition: color 0.12s, border-color 0.12s, background 0.12s, transform 0.12s;
}
.see-all-link:hover {
  color: var(--text);
  border-color: var(--text-2);
  background: rgba(255, 255, 255, 0.08);
  transform: translateY(-1px);
}
.see-all-link:active {
  transform: translateY(0);
}

/* ═════════════════════════════════════════════════════════════════
   DEEP COSMETIC CLEAN — Jun 15 2026
   Peter flagged the whole app as "annoying to read". This block
   polishes shared primitives across every page:
     · Inputs / textareas / selects — bigger focus rings, brighter
     · Cards — subtle inner glow, lifted borders
     · Modals — bigger, brighter dividers, tighter rhythm
     · Toggles — visible "off" state
     · Empty states — bigger headline, less dead space
     · Setup-cards — subtle gradient background
     · Status pills — color-coded badges with proper contrast
   ═════════════════════════════════════════════════════════════════ */

/* ─── Inputs ─────────────────────────────────────────────── */
input[type="text"],
input[type="email"],
input[type="password"],
input[type="number"],
input[type="search"],
input[type="tel"],
input[type="url"],
input[type="date"],
textarea,
select {
  background: rgba(255, 255, 255, 0.025);
  border: 1px solid var(--hairline-strong);
  color: var(--text);
  border-radius: 6px;
  transition: border-color 0.12s, background 0.12s, box-shadow 0.12s;
}
input:hover:not(:focus):not(:disabled),
textarea:hover:not(:focus):not(:disabled),
select:hover:not(:focus):not(:disabled) {
  border-color: var(--text-3);
}
input:focus,
textarea:focus,
select:focus {
  border-color: var(--text-2) !important;
  background: rgba(255, 255, 255, 0.04) !important;
  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.06);
  outline: none;
}
input::placeholder,
textarea::placeholder {
  color: var(--text-4);
}

/* ─── Cards — subtle inner highlight ──────────────────────────── */
.card {
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  transition: border-color 0.12s, background 0.12s;
}
.card:hover {
  border-color: var(--hair-2);
}

/* ─── Setup-cards — slight gradient so they're not flat ──────── */
.setup-card {
  background: linear-gradient(180deg, rgba(255, 255, 255, 0.025) 0%, rgba(255, 255, 255, 0.015) 100%);
  border: 1px solid var(--hairline);
  border-radius: 8px;
  padding: 1rem 1.125rem;
  transition: border-color 0.12s, background 0.12s;
}
.setup-card:hover {
  border-color: var(--hair-2);
}

/* ─── Modals — bigger, more breathing room ───────────────────── */
.modal {
  background: var(--bg-2);
  border: 1px solid var(--hairline-strong);
  border-radius: 10px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(255, 255, 255, 0.03);
}
.modal-head {
  border-bottom: 1px solid var(--hairline-strong);
  padding: 1.25rem 1.5rem 1.125rem;
}
.modal-title {
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: -0.2px;
}
.modal-sub {
  font-size: var(--fs-caption);
  color: var(--text-2);
  margin-top: 0.25rem;
  line-height: 1.55;
}
.modal-close {
  color: var(--text-3);
  background: transparent;
  border: 0;
  font-size: 1.375rem;
  line-height: 1;
  padding: 0.25rem 0.625rem;
  border-radius: 4px;
  transition: color 0.12s, background 0.12s;
}
.modal-close:hover {
  color: var(--text);
  background: rgba(255, 255, 255, 0.06);
}
.modal-actions {
  padding-top: 1.125rem;
  margin-top: 1.125rem;
  border-top: 1px solid var(--hairline);
}
.modal .field {
  margin-bottom: 0.875rem;
}
.modal .field label {
  display: block;
  font-size: 0.6875rem;
  color: var(--text-2);
  margin-bottom: 0.375rem;
  letter-spacing: 0.02em;
}
.modal .field input,
.modal .field textarea,
.modal .field select {
  width: 100%;
  padding: 0.625rem 0.75rem;
  font-size: var(--fs-body-sm);
  font-family: inherit;
}

/* ─── Toggles — make "off" visible ───────────────────────────── */
.toggle {
  background: rgba(255, 255, 255, 0.10);
  border: 1px solid var(--hairline-strong);
  transition: background 0.15s, border-color 0.15s;
}
.toggle:hover {
  background: rgba(255, 255, 255, 0.14);
}
.toggle.on {
  background: var(--text);
  border-color: var(--text);
}

/* ─── Empty states — louder + less awkward ───────────────────── */
.empty-state,
[id$="-empty"].card {
  padding: 3.5rem 1.75rem;
  text-align: center;
}
.empty-state h2,
.empty-state-title {
  font-size: var(--fs-h2);
  font-weight: 600;
  color: var(--text);
  margin-bottom: 0.5rem;
}
.empty-state p,
.empty-state-sub {
  font-size: var(--fs-body-sm);
  color: var(--text-2);
  line-height: 1.6;
  max-width: 26.25rem;
  margin: 0 auto 1.125rem;
}

/* ─── Page headers — better hierarchy ────────────────────────── */
.page-title {
  font-size: 1.75rem;
  font-weight: 600;
  letter-spacing: -0.5px;
  line-height: 1.15;
  color: var(--text);
}
.page-sub {
  font-size: var(--fs-body-sm);
  color: var(--text-2);
  margin-top: 0.375rem;
  line-height: 1.55;
  max-width: 45rem;
}

/* ─── Section labels (.lbl) — uniformly bigger + brighter ────── */
.lbl {
  font-family: 'IBM Plex Mono', monospace;
  font-size: var(--fs-mono);
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--text-3);
  font-weight: 500;
}

/* ─── List rows — better hover affordance ────────────────────── */
.list-row,
.candidate-row {
  border-bottom: 1px solid var(--hairline);
  transition: background 0.12s;
}
.list-row:hover,
.candidate-row:hover {
  background: rgba(255, 255, 255, 0.025);
}

/* ─── Status pills — color-coded ──────────────────────────────── */
.status-pill {
  display: inline-block;
  padding: 0.1875rem 0.625rem;
  font-size: 0.625rem;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  font-weight: 500;
  border-radius: 11px;
  border: 1px solid;
}
.status-pill-good {
  color: var(--score-good);
  border-color: rgba(163, 217, 155, 0.30);
  background: rgba(163, 217, 155, 0.08);
}
.status-pill-warn {
  color: var(--score-warn);
  border-color: rgba(245, 201, 122, 0.30);
  background: rgba(245, 201, 122, 0.08);
}
.status-pill-flag {
  color: var(--score-flag);
  border-color: rgba(240, 138, 138, 0.30);
  background: rgba(240, 138, 138, 0.08);
}
.status-pill-mute {
  color: var(--text-3);
  border-color: var(--hairline-strong);
}

/* ─── Settings page — jump-to chip row at top ────────────────── */
/* Tightened so all 9 chips fit on one row on typical desktop widths,
   sits flush against the page header instead of floating in a void. */
.settings-jumpnav {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.25rem;
  margin: 0 0 1.125rem;
  padding: 0.5rem 0.625rem;
  background: rgba(255, 255, 255, 0.02);
  border: 1px solid var(--hairline);
  border-radius: 8px;
}
.settings-jumpnav-label {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.5625rem;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--text-4);
  margin-right: 0.25rem;
}
.settings-jumpnav-chip {
  display: inline-block;
  padding: 0.1875rem 0.5625rem;
  font-size: 0.6875rem;
  color: var(--text-2);
  background: transparent;
  border: 1px solid var(--hairline-strong);
  border-radius: 14px;
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
  transition: all 0.12s;
}
.settings-jumpnav-chip:hover {
  color: var(--text);
  border-color: var(--text-3);
  background: rgba(255, 255, 255, 0.04);
}

/* Kill the awkward gap between the page header and the jump-nav. The
   header had a default margin-bottom that left ~80-120px of empty space
   above the chips. */
.settings-content .page-header {
  margin-bottom: 1rem !important;
  padding-bottom: 0.875rem !important;
  border-bottom: 1px solid var(--hairline);
}

/* ─── Workspace branding (Executive tier) — cleaner file + color input ── */
#brand-logo-input {
  /* Custom-styled file picker. The browser-default "Choose File" button
     is white-on-grey and clashes with the dark theme — this gives it the
     same look as our btn-ghost. */
  font-size: 0;                                       /* hides "no file selected" text */
  color: transparent;
  padding: 0;
  border: none;
  background: transparent;
  width: auto;
}
#brand-logo-input::-webkit-file-upload-button,
#brand-logo-input::file-selector-button {
  background: rgba(255, 255, 255, 0.04);
  color: var(--text);
  border: 1px solid var(--hairline-strong);
  border-radius: 6px;
  padding: 0.5rem 0.875rem;
  font-family: inherit;
  font-size: var(--fs-caption);
  font-weight: 500;
  letter-spacing: 0.02em;
  cursor: pointer;
  margin-right: 0.75rem;
  transition: background 0.12s, border-color 0.12s;
}
#brand-logo-input::-webkit-file-upload-button:hover,
#brand-logo-input::file-selector-button:hover {
  background: rgba(255, 255, 255, 0.08);
  border-color: var(--text-3);
}
/* Filename label rendered alongside via a span (added next via JS). */
#brand-logo-input + .brand-file-name {
  font-size: var(--fs-caption);
  color: var(--text-3);
  margin-left: 0.25rem;
  font-family: 'IBM Plex Mono', monospace;
}

#brand-color-input {
  width: 3.5rem !important;
  height: 2.25rem !important;
  padding: 0.125rem !important;
  border: 1px solid var(--hairline-strong) !important;
  border-radius: 6px !important;
  background: transparent !important;
  cursor: pointer;
}
#brand-color-input::-webkit-color-swatch-wrapper { padding: 0; }
#brand-color-input::-webkit-color-swatch { border: none; border-radius: 4px; }
#brand-color-hex {
  font-family: 'IBM Plex Mono', monospace;
  font-size: var(--fs-caption) !important;
  color: var(--text-2) !important;
  margin-left: 0.875rem !important;
  letter-spacing: 0.04em;
  vertical-align: middle;
}

/* Logo preview gets a brighter dashed border. */
#brand-logo-preview {
  height: 4rem !important;
  width: 4rem !important;
  border-radius: 8px !important;
  font-size: var(--fs-tiny) !important;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--text-4) !important;
  border-color: var(--hairline-strong) !important;
}

/* ─── Refined collapsibles inside settings ──────────────────── */
.settings-content .collapsible {
  border-bottom: none;
}
.settings-content .collapsible-head {
  border-radius: 6px;
  padding: 0.75rem 0.875rem !important;
  margin-left: -0.875rem;
  margin-right: -0.875rem;
  transition: background 0.12s;
}
.settings-content .collapsible-head:hover {
  background: rgba(255, 255, 255, 0.025);
}
.settings-content .collapsible[data-collapsed="false"] > .collapsible-head {
  background: rgba(255, 255, 255, 0.03);
}
.settings-content .collapsible[data-collapsed="false"] > .collapsible-head .lbl {
  color: var(--text) !important;
}

.settings-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0 1.25rem;
  align-items: start;
}
.settings-cols > * { min-width: 0; }

/* ─── Settings tabbed sub-sidebar layout ─────────────────────────────────── */
.settings-layout {
  display: grid;
  grid-template-columns: 11.75rem 1fr;
  gap: 0 1.75rem;
  align-items: start;
  margin-top: 0.5rem;
}

.settings-subnav {
  position: sticky;
  top: 1.5rem;
  display: flex;
  flex-direction: column;
  gap: 0.125rem;
  padding: 0.25rem 0;
}

.settings-tab {
  display: block;
  width: 100%;
  padding: 0.75rem 1rem;
  text-align: left;
  background: transparent;
  border: none;
  border-radius: 6px;
  color: var(--text-3);
  font-family: inherit;
  font-size: 0.875rem;
  font-weight: 400;
  letter-spacing: 0;
  text-transform: none;
  cursor: pointer;
  transition: background 0.1s, color 0.1s;
}
.settings-tab:hover {
  background: rgba(255, 255, 255, 0.04);
  color: var(--text);
}
.settings-tab.active {
  background: rgba(201, 166, 75, 0.08);
  color: var(--text);
  font-weight: 500;
  box-shadow: inset 3px 0 0 var(--accent);
}

.settings-panes {
  min-width: 0;
}

.settings-pane { display: none; }
.status-pill {
  display: inline-block;
  font-size: 0.625rem;
  font-family: 'IBM Plex Mono', monospace;
  letter-spacing: 1px;
  padding: 0.125rem 0.5rem;
  border-radius: 10px;
  margin-left: 0.75rem;
  vertical-align: middle;
}
.status-pill-empty {
  background: rgba(255,255,255,0.04);
  color: var(--text-3);
}
.status-pill-active {
  /* v3: quiet sage chip (was neon green rgba(155,226,155,.1)/#A3D99B). */
  background: var(--chip-offer-bg);
  color: var(--chip-offer-fg);
}

@media (max-width: 680px) {
  .settings-layout {
    grid-template-columns: 1fr;
  }
  .settings-subnav {
    position: static;
    flex-direction: row;
    flex-wrap: wrap;
    gap: 0.25rem;
    margin-bottom: 1rem;
    padding: 0;
  }
  .settings-tab {
    width: auto;
    padding: 0.375rem 0.75rem;
    font-size: var(--fs-caption);
    border: 1px solid var(--hairline);
    border-radius: 20px;
  }
  .settings-tab.active {
    background: var(--accent);
    color: #000;
    border-color: var(--accent);
  }
}

.hiring-tabs {
  display: flex;
  gap: 0;
  border-bottom: 1px solid var(--hairline);
  margin-bottom: 1.25rem;
}
.hiring-tab {
  color: var(--text-3);
  font-size: 0.6875rem;
  letter-spacing: 1.5px;
  text-transform: uppercase;
  padding: 0.75rem 1.25rem;
  text-decoration: none;
  font-weight: 500;
  border-bottom: 2px solid transparent;
  margin-bottom: -0.0625rem;
  transition: color 0.1s;
}
.hiring-tab:hover { color: var(--text-2); }
.hiring-tab.is-active { color: var(--text); border-bottom-color: var(--text); }

/* ─── Scrollbar polish (webkit) ──────────────────────────────── */
::-webkit-scrollbar { width: 0.625rem; height: 0.625rem; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.08);
  border-radius: 5px;
  border: 2px solid var(--bg);
}
::-webkit-scrollbar-thumb:hover {
  background: rgba(255, 255, 255, 0.16);
}

/* ═══════════════════════════════════════════════════════════════
   COSMETIC UPGRADE — June 2026
   Targeting: deliberate, polished, demo-ready.
   Rules: CSS-only, no JS, no HTML restructure.
   ═══════════════════════════════════════════════════════════════ */

/* ── Body / global ──────────────────────────────────────────── */
body { line-height: 1.55; }

/* ── Standardize transition timing across all interactive elements ── */
.btn, .nav-item, .card, .collapsible-head, .list-row,
.hiring-tab, .tab, .role, .person-tile, .template-card,
.zp-tab, .interview-row {
  transition-timing-function: var(--ease) !important;
}

/* ── Focus rings — visible on all interactive elements ─────── */
*:focus-visible {
  outline: 2px solid rgba(255, 255, 255, 0.55);
  outline-offset: 2px;
}
.btn:focus-visible {
  outline: 2px solid var(--text);
  outline-offset: 2px;
}
input:focus-visible, select:focus-visible, textarea:focus-visible {
  outline: none;
  border-color: var(--text-3) !important;
  box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.06);
}

/* ── Candidate detail — header breathing room ───────────────── */
.cand-header {
  margin-bottom: 2.25rem;
  padding-bottom: 1.75rem;
  border-bottom: 1px solid var(--hairline);
}
.cand-avatar {
  width: 3.25rem; height: 3.25rem;
  font-size: 1.125rem;
  background: rgba(255, 255, 255, 0.06);
  border: 1px solid var(--hairline-strong);
}

/* ── Collapsible section heads — consistent label scale ─────── */
.collapsible-head .lbl {
  font-size: 0.625rem !important;
  letter-spacing: 0.20em !important;
  color: var(--text-3) !important;
}
.collapsible-head:hover .lbl {
  color: var(--text-2) !important;
}
/* Arrow: smooth rotation, slightly bolder */
.collapsible-head::after {
  font-size: 0.875rem !important;
  color: var(--text-4) !important;
  transition: transform 0.18s var(--ease), color 0.12s var(--ease) !important;
}
.collapsible-head:hover::after {
  color: var(--text-2) !important;
}

/* ── Pattern Read prose card ─────────────────────────────────── */
.pattern-read-prose {
  /* was 72ch -- now the shared reading measure, so every prose block in the
     app stops at the same line length as the app column widens. */
  max-width: var(--prose-max);
}
.pattern-read-prose p {
  font-size: 0.875rem !important;
  line-height: 1.70 !important;
  color: var(--text-2) !important;
  margin: 0 0 1.125rem !important;
}
.pattern-read-prose p:last-child { margin-bottom: 0 !important; }

/* ── Person Dimensions — visually deprioritize live-only dims ── */
/* Low-confidence dims (score=null, only capturable live): faded + dashed border */
.pd-dim:has(.pd-conf-low) {
  opacity: 0.45;
  border-style: dashed !important;
}
.pd-dim:has(.pd-conf-low) .pd-dim-name {
  font-style: italic;
}

/* ── Candidate action buttons — consistent 36px height ─────── */
.page-header .btn, .cand-actions .btn {
  height: 2.25rem !important;
  padding: 0 1rem !important;
  display: inline-flex !important;
  align-items: center !important;
}
/* Danger ghost — subtle red tint on hover, not alarming at rest */
.btn-danger-ghost:hover {
  color: var(--c-danger-text) !important;
  border-color: rgba(239, 68, 68, 0.3) !important;
}

/* ── Candidates list — filter row polish ────────────────────── */
.filter-row {
  display: flex !important;
  gap: 0.625rem !important;
  align-items: center !important;
  flex-wrap: wrap !important;
  margin-bottom: 1.25rem !important;
}
#pipeline-stage, #pipeline-search {
  height: 2.375rem !important;
  padding: 0 0.75rem !important;
  font-size: var(--fs-body-sm) !important;
  border-radius: var(--radius-sm) !important;
}
#pipeline-stage-count {
  font-size: 0.6875rem !important;
  color: var(--text-3) !important;
  letter-spacing: 0.1em !important;
  white-space: nowrap !important;
}

/* Stage select in list rows — consistent height + remove default arrow glyph */
.pipeline-row-stage {
  height: 2rem !important;
  padding: 0 0.5rem !important;
  font-size: var(--fs-caption) !important;
  border-radius: var(--radius-sm) !important;
  cursor: pointer;
}

/* ── Hiring tabs ─────────────────────────────────────────────── */
.hiring-tab {
  font-size: var(--fs-caption) !important;
  letter-spacing: 0.12em !important;
  padding: 0.75rem 1rem !important;
  transition: color 0.12s var(--ease), border-color 0.12s var(--ease) !important;
}
.hiring-tab.is-active {
  font-weight: 600 !important;
}

/* ── Stat cards — uniform height on dashboard ───────────────── */
.stat-card {
  min-height: 6rem !important;
  display: flex !important;
  flex-direction: column !important;
  justify-content: space-between !important;
}

/* ── Section h2 headings — consistent scale ─────────────────── */
.section-h h2, h2.section-title {
  font-size: var(--fs-h3) !important;
  font-weight: 500 !important;
  letter-spacing: -0.01em !important;
}

/* ── Deep analysis section — consistent with other cards ───── */
.deep-analysis, .pattern-read-prose, .deep-cta, .deep-empty, .deep-loading {
  border-radius: var(--radius-sm) !important;
}

/* ── Devil's Advocate card — consistent corners ─────────────── */
.da-card, .da-section-head {
  border-radius: var(--radius-sm) !important;
}

/* ── Interview list rows — breathing room ───────────────────── */
.interview-row {
  padding: 0.875rem 1.125rem !important;
  border-radius: var(--radius-sm) !important;
}

/* ── Chips — consistent pill shape ─────────────────────────── */
.chip {
  border-radius: 20px !important;
  font-size: 0.625rem !important;
  padding: 0.25rem 0.6875rem !important;
  letter-spacing: 0.04em !important;
}

/* ── Career chart — subtle grid, clean axis ─────────────────── */
.chart-wrap {
  border-radius: var(--radius-md) !important;
}
.year-tick {
  background: var(--surface-2) !important;
  border-radius: 3px !important;
}

/* ── Status colors — map to tokens ─────────────────────────── */
.status-good, [data-status="good"]  { color: var(--c-good-text) !important; }
.status-warn, [data-status="warn"]  { color: var(--c-warn) !important; }
.status-bad,  [data-status="bad"]   { color: var(--c-bad-text) !important; }

/* ── Scrollbar thinner & softer ─────────────────────────────── */
::-webkit-scrollbar { width: 0.375rem !important; height: 0.375rem !important; }

/* ── Marketing site token parity (applies when marketing styles are
      loaded in the same context) ─────────────────────────────── */
.grad-text {
  background: var(--grad, linear-gradient(120deg, var(--text) 0%, var(--text-3) 100%));
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

/* ══════════════════════════════════════════════════════════════════
   POLISH SPRINT — Jun 22, 2026
   CSS only — zero logic changes. Surfaces: Settings Setup, Welcome
   Wizard, Dashboard Checklist, Empty States, Tooltips.
   Token audit: 5 hardcoded hexes replaced, 8 flagged (TODO).
   TODO flagged: var(--bg-tint) (tooltip bg), #1a1408/#3a2a10 (exec-badge
   dark gold surface/border), HPF dim colors 6×, DA verdict colors.
   ══════════════════════════════════════════════════════════════════ */

/* ─── PART 2: Settings → Setup section ───────────────────────────── */

/* Equal-height cards — all cards in the auto-fill grid align to tallest */
#setup-section > div { align-items: stretch; }
#setup-section .setup-card {
  display: flex;
  flex-direction: column;
  padding: 1.125rem 1.25rem;
  gap: 0;
  min-height: 6rem;
}
/* Bigger, brighter sub-label inside each card */
#setup-section .setup-card > div:last-child {
  font-size: var(--fs-caption);
  color: var(--text-3);
  line-height: 1.55;
  margin-top: 0.375rem;
  flex: 1;
}
/* Crisper hover: border lifts to hairline-strong, faint bg brightens */
#setup-section .setup-card:hover {
  border-color: var(--border-firm);
  background: linear-gradient(180deg,
    rgba(255,255,255,0.05) 0%,
    rgba(255,255,255,0.03) 100%);
}
/* "SETUP" section header matches `.lbl` mono scale from the overhaul block */
#setup-section > .lbl {
  font-family: 'IBM Plex Mono', monospace;
  font-size: var(--fs-mono);
  letter-spacing: 0.18em;
  color: var(--text-3);
  margin-bottom: 1rem !important;
}

/* ─── PART 3: Welcome wizard ─────────────────────────────────────── */

/* Progress bar: fill bar per step, connected segments */
.welcome-progress-dots { gap: 0.25rem; }
.welcome-dot {
  width: 1.75rem;
  height: 0.1875rem;
  border-radius: 2px;
  transition: background 0.28s cubic-bezier(0.4, 0, 0.2, 1);
}
.welcome-dot.done { background: var(--text-2); }
.welcome-dot.active { background: var(--text); }

/* Step transitions: slightly more pronounced slide */
.welcome-step { animation: welcome-in 0.24s cubic-bezier(0.4, 0, 0.2, 1); }
@keyframes welcome-in {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0);   }
}

/* Styled textarea — replaces per-element inline styles */
.welcome-textarea {
  width: 100%;
  padding: 0.625rem 0.75rem;
  background: var(--surface-1);
  border: 1px solid var(--border-firm);
  color: var(--text-primary);
  font-family: inherit;
  font-size: var(--fs-body-sm);
  border-radius: var(--radius-sm);
  line-height: 1.55;
  resize: vertical;
  transition: border-color 0.15s, background 0.15s;
}
.welcome-textarea:focus {
  outline: none;
  border-color: var(--text);
  background: var(--surface-3);
}

/* Styled datetime input */
.welcome-date-input {
  width: 100%;
  padding: 0.625rem 0.75rem;
  background: var(--surface-1);
  border: 1px solid var(--border-firm);
  color: var(--text-primary);
  font-family: inherit;
  font-size: var(--fs-body-sm);
  border-radius: var(--radius-sm);
  transition: border-color 0.15s, background 0.15s;
}
.welcome-date-input:focus {
  outline: none;
  border-color: var(--text);
  background: var(--surface-3);
}

/* Step 3 Zoom install block */
.welcome-zoom-block {
  background: var(--surface-2);
  border: 1px solid var(--border-soft);
  border-radius: var(--radius-md);
  padding: 1.75rem 1.5rem;
  margin: 1.375rem 0;
  text-align: center;
}
.welcome-zoom-block p {
  font-size: var(--fs-body-sm);
  color: var(--text-secondary);
  line-height: 1.7;
  margin-bottom: 1.25rem;
}
.welcome-zoom-sub {
  margin-top: 0.875rem;
  font-size: 0.6875rem;
  color: var(--text-tertiary);
}
.welcome-zoom-block .btn-primary {
  padding: 0.75rem 1.75rem;
  font-size: 0.875rem;
}

/* Skip button: clearly tertiary — not competing with primary CTA */
.btn-skip {
  background: transparent !important;
  border: none !important;
  color: var(--text-tertiary) !important;
  font-size: var(--fs-caption) !important;
  padding: 0.375rem 0.25rem !important;
  font-family: inherit;
  letter-spacing: 0.02em;
  transition: color 0.12s;
}
.btn-skip:hover { color: var(--text-secondary) !important; }

/* Welcome card: slightly more generous radius + shadow */
.welcome-card {
  border-radius: var(--radius-lg) !important;
  box-shadow: 0 24px 64px -16px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.04);
}

/* ─── PART 4: Dashboard first-run checklist ──────────────────────── */

/* Card container — target by ID to win over inline styles */
#first-run-checklist {
  border-radius: var(--radius-md) !important;
  border-color: var(--border-soft) !important;
  padding: 1.375rem 1.5rem !important;
}

/* Title row inside the card */
#first-run-checklist > div:first-of-type {
  font-size: 0.625rem;
  letter-spacing: 0.18em;
  color: var(--text-tertiary);
  text-transform: uppercase;
  margin-bottom: 1rem;
  font-family: 'IBM Plex Mono', monospace;
}

/* Dismiss ×  button */
#checklist-dismiss {
  border-radius: var(--radius-sm);
  transition: color 0.12s, background 0.12s;
  font-size: 1.125rem !important;
}
#checklist-dismiss:hover {
  color: var(--text) !important;
  background: var(--surface-3) !important;
}

/* Checklist dots — override inline styles for the pending state */
.checklist-dot {
  width: 1.25rem !important;
  height: 1.25rem !important;
  border-radius: 50%;
  border: 1.5px solid var(--border-firm);
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.6875rem;
  transition: background 0.22s, border-color 0.22s, color 0.22s;
}

/* Labels and actions */
.checklist-label {
  font-size: var(--fs-body-sm);
  transition: color 0.22s;
}
.checklist-action {
  font-size: 0.6875rem;
  text-decoration: none;
  letter-spacing: 0.05em;
  white-space: nowrap;
  transition: color 0.12s;
}
.checklist-action:hover { color: var(--text-secondary) !important; }

/* ─── PART 5: Empty states — consistent visual family ────────────── */

/* Override all prior `.empty-state` rules; this block wins via cascade position */
.empty-state {
  display: flex !important;
  flex-direction: column !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 15rem;
  padding: 3.5rem 2.5rem !important;
  text-align: center !important;
  border-radius: var(--radius-md) !important;
}
.empty-state b, .empty-state-title {
  font-size: var(--fs-h3) !important;
  font-weight: 600 !important;
  color: var(--text-primary) !important;
  display: block !important;
  margin-bottom: 0.5rem !important;
  line-height: 1.3;
}
.empty-state p, .empty-state-sub {
  font-size: var(--fs-body-sm) !important;
  color: var(--text-secondary) !important;
  line-height: 1.6 !important;
  max-width: 25rem !important;
  margin: 0 auto 1.375rem !important;
}
/* Primary CTA inside empty state */
.empty-state .btn-primary, .empty-state .empty-cta {
  margin-top: 0.25rem !important;
}
/* Optional "other ways" ghost link below primary CTA */
.empty-alt-link {
  display: inline-block;
  margin-top: 0.75rem;
  font-size: 0.6875rem;
  color: var(--text-tertiary);
  text-decoration: none;
  letter-spacing: 0.02em;
  transition: color 0.12s;
}
.empty-alt-link:hover { color: var(--text-secondary); }

/* Subtle icon above empty-state heading — opt-in via .empty-state-icon */
.empty-state-icon {
  display: block;
  margin: 0 auto 1rem;
  opacity: 0.22;
  flex-shrink: 0;
}

/* ─── PART 6: Tooltip refinements ─────────────────────────────────── */

/* Tooltip popup: overflow visible so ::after arrow renders outside box */
.jedah-tip-popup { overflow: visible; }

/* Arrow pointing down toward the trigger button */
.jedah-tip-popup::after {
  content: '';
  position: absolute;
  bottom: -0.3125rem;
  left: 1rem;
  width: 0.5rem; height: 0.5rem;
  background: var(--bg-tint);          /* match popup background */
  border-right: 1px solid var(--border-firm);
  border-bottom: 1px solid var(--border-firm);
  transform: rotate(45deg);
}

/* "?" button: filled accent tint when tooltip is open */
.jedah-tip.open .jedah-tip-btn {
  border-color: var(--text-3);
  color: var(--text);
  background: rgba(255,255,255,0.05);
}
/* Focus ring for keyboard accessibility */
.jedah-tip-btn:focus-visible {
  outline: 2px solid var(--text-3);
  outline-offset: 2px;
}

/* Narrow viewports: pin popup to right edge so it doesn't clip */
@media (max-width: 520px) {
  .jedah-tip-popup {
    left: auto !important;
    right: 0;
  }
  .jedah-tip-popup::after {
    left: auto;
    right: 1rem;
  }
}

/* ─── Cross-surface responsive fixes ─────────────────────────────── */

/* Mobile: full-width primary CTAs */
@media (max-width: 520px) {
  .welcome-actions { flex-direction: column-reverse; gap: 0.625rem; align-items: stretch; }
  .welcome-actions .btn { width: 100%; justify-content: center; }
  .welcome-actions div[style] { width: 100%; display: flex !important; flex-direction: column; gap: 0.5rem; }
  .btn-skip { text-align: center; }

  /* Checklist card: tighter on mobile */
  #first-run-checklist { padding: 1rem !important; }

  /* Empty states: don't over-pad on small screens */
  .empty-state { padding: 2.5rem 1.5rem !important; min-height: 12.5rem; }

  /* Setup cards: single column on very narrow */
  #setup-section > div { grid-template-columns: 1fr !important; }
}

/* Tablet: two-column setup cards (auto-fill already handles this) */
@media (max-width: 768px) {
  .content { padding: 1.5rem 1.25rem 3rem !important; }
  .welcome-shell { padding: 1.25rem !important; }
  .welcome-card { padding: 1.75rem 1.5rem 1.5rem !important; }
}

/* ─── Quick-filter chips ───────────────────────────────────────────── */
.quick-chip {
  display: inline-flex;
  align-items: center;
  padding: 0.25rem 0.625rem;
  border-radius: 20px;
  border: 1px solid var(--hairline-strong);
  background: transparent;
  color: var(--text-3);
  font-family: inherit;
  font-size: 0.6875rem;
  letter-spacing: 0.4px;
  cursor: pointer;
  transition: background 0.12s, color 0.12s, border-color 0.12s;
  white-space: nowrap;
}
.quick-chip:hover {
  background: var(--bg-2);
  color: var(--text-2);
}
.quick-chip.is-active {
  background: var(--text);
  color: var(--bg);
  border-color: var(--text);
}

/* ─── Error boundary state ─────────────────────────────────────────── */
.error-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 4rem 1.5rem;
  text-align: center;
  gap: 0.625rem;
}
.error-icon {
  font-size: 1.75rem;
  color: var(--text-4);
  margin-bottom: 0.25rem;
}
.error-title {
  font-size: var(--fs-h3);
  font-weight: 600;
  color: var(--text-2);
}
.error-msg {
  font-size: var(--fs-caption);
  color: var(--text-3);
  max-width: 26.25rem;
  line-height: 1.5;
}

/* ── V1 scope lock feature-flag utility classes ───────────────────────────────
   Elements with data-v1-hide are hidden when body.v1-scope-lock is present.
   Elements with data-v1-show are hidden by default and visible only under lock.
   The !important beats any inline style app.js may set after the fact. */
body.v1-scope-lock [data-v1-hide] { display: none !important; }
[data-v1-show] { display: none !important; }

/* ── MVP focus mode (FF_MVP_MODE) ─────────────────────────────────────────────
   Elements with data-mvp-hide are removed from view when body.mvp-mode is on.
   Used to pare the nav (References, Performance, Org Insights) down to the
   core surfaces. The feature code + server routes stay intact; this is purely
   a client-facing focus gate. */
body.mvp-mode [data-mvp-hide],
html.mvp-mode [data-mvp-hide] { display: none !important; }

/* "Premium — coming soon" locked card shown when a gated page is opened
   directly under MVP mode (sidebar-tier.js renderMvpLockedCard). */
.mvp-locked-card {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 60vh;
  padding: var(--sp-8) var(--sp-4);
}
.mvp-locked-inner {
  max-width: 28.75rem;
  text-align: center;
  background: var(--bg-2);
  border: 1px solid var(--hairline);
  border-radius: 14px;
  padding: 2.5rem 2.25rem 2.25rem;
  box-shadow: var(--shadow);
}
.mvp-locked-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3.25rem; height: 3.25rem;
  border-radius: 50%;
  background: var(--gold-fill);
  border: 1px solid var(--gold-border);
  color: var(--gold);
  margin-bottom: 1.25rem;
}
.mvp-locked-badge {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 0.875rem;
}
.mvp-locked-title {
  font-family: var(--font-display);
  font-size: var(--fs-display);
  font-weight: 500;
  letter-spacing: var(--ls-tight);
  color: var(--text);
  margin-bottom: 0.75rem;
}
.mvp-locked-blurb {
  font-size: var(--fs-body);
  line-height: 1.65;
  color: var(--text-3);
  margin-bottom: 1.5rem;
}
.mvp-locked-cta { text-decoration: none; }

/* ── Sticky candidate header (candidate.html) ─────────────────────────────
   The header stays visible as the user scrolls through Pattern Read, HPF,
   Devil's Advocate, etc. Targets only .cand-header that is a direct child
   of .content (i.e. candidate.html) — not the one nested in interview.html's
   Candidate tab-panel. */
.content > .cand-header {
  position: sticky;
  top: 0;
  z-index: 8;
  background: var(--bg);
  padding-top: 0.875rem;
  padding-bottom: 1.25rem;
  margin-bottom: 1.25rem;
  border-bottom: 1px solid var(--hairline);
  box-shadow: 0 4px 16px 0 rgba(0,0,0,0.45);
}
body.v1-scope-lock [data-v1-show] { display: block !important; }


/* ═══════════════════════════════════════════════════════════════════════════
   COMPONENT LIBRARY — Part 2 of Visual Rebuild
   Reusable classes used across all pages.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── CARDS ──────────────────────────────────────────────────────────────── */
.card {
  background:
    linear-gradient(180deg,
      var(--bg-elev) 0%,
      var(--bg) 100%);
  border: 1px solid var(--hair-2);
  border-radius: var(--r-md);
  box-shadow: var(--shadow);
  overflow: hidden;
  position: relative;
}
.card-elev {
  background:
    linear-gradient(180deg,
      var(--bg-elev-high) 0%,
      var(--bg-elev) 100%);
  box-shadow: var(--shadow-lg);
}
.card-section {
  padding: var(--sp-5) var(--sp-6);
  border-bottom: 1px solid var(--hair);
}
.card-section:last-child { border-bottom: 0; }
.card-header {
  padding: var(--sp-5) var(--sp-6) var(--sp-4);
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--sp-4);
}
.card-title {
  font-family: var(--font-display);
  font-size: var(--fs-display);
  font-weight: 500;
  letter-spacing: var(--ls-tight);
  color: var(--text);
}
.card-eyebrow {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  font-weight: 500;
  color: var(--gold);
  text-shadow: 0 0 16px var(--gold-glow);
}

/* ─── BUTTONS ────────────────────────────────────────────────────────────── */
.btn {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  padding: var(--sp-3) var(--sp-5);
  border: 1px solid transparent;
  border-radius: var(--r);
  font-family: var(--font-body);
  font-size: var(--fs-body-sm);
  font-weight: 500;
  color: var(--text-2);
  background: transparent;
  cursor: pointer;
  transition:
    color var(--dur) var(--ease),
    background var(--dur) var(--ease),
    border-color var(--dur) var(--ease),
    transform var(--dur) var(--ease),
    box-shadow var(--dur) var(--ease);
  text-decoration: none;
  white-space: nowrap;
  line-height: 1;
}
.btn:hover { color: var(--text); }
.btn-sm { padding: var(--sp-2) var(--sp-3); font-size: var(--fs-caption); }
.btn-lg { padding: var(--sp-4) var(--sp-6); font-size: var(--fs-body); }

.btn-primary {
  background:
    linear-gradient(180deg,
      var(--gold-bright) 0%,
      var(--gold) 100%);
  color: var(--text-inverse);
  border-color: var(--gold);
  box-shadow:
    0 1px 0 0 rgba(255,255,255,0.15) inset,
    var(--shadow-sm);
  font-weight: 600;
}
.btn-primary:hover {
  color: var(--text-inverse);
  box-shadow:
    0 1px 0 0 rgba(255,255,255,0.2) inset,
    0 0 24px var(--gold-glow),
    var(--shadow);
  transform: translateY(-1px);
}
.btn-secondary {
  background: var(--bg-elev);
  border-color: var(--hair-strong);
  color: var(--text);
}
.btn-secondary:hover {
  background: var(--bg-elev-high);
  border-color: var(--text-3);
}
.btn-ghost {
  color: var(--text-3);
}
.btn-ghost:hover {
  color: var(--text);
  background: var(--bg-tint);
}
.btn-danger {
  color: var(--brick);
  border-color: var(--brick);
  background: var(--brick-fill);
}
.btn-danger-ghost { color: var(--brick); }
.btn-danger-ghost:hover { background: var(--brick-fill); color: var(--brick); }

/* ─── INPUTS ─────────────────────────────────────────────────────────────── */
.input,
input[type="text"]:not(.no-restyle),
input[type="email"]:not(.no-restyle),
input[type="search"]:not(.no-restyle),
input[type="url"]:not(.no-restyle),
input[type="date"]:not(.no-restyle),
input[type="number"]:not(.no-restyle),
select:not(.no-restyle),
textarea:not(.no-restyle) {
  background: var(--bg);
  border: 1px solid var(--hair-2);
  border-radius: var(--r);
  padding: var(--sp-3) var(--sp-4);
  color: var(--text);
  font-family: var(--font-body);
  font-size: var(--fs-body-sm);
  line-height: var(--lh-normal);
  transition:
    border-color var(--dur) var(--ease),
    box-shadow var(--dur) var(--ease);
  width: 100%;
}
.input:hover,
input:not(.no-restyle):hover,
select:not(.no-restyle):hover { border-color: var(--hair-strong); }
.input:focus,
input:not(.no-restyle):focus,
select:not(.no-restyle):focus,
textarea:not(.no-restyle):focus {
  outline: none;
  border-color: var(--gold-border);
  box-shadow: 0 0 0 3px var(--gold-fill);
}
.input::placeholder,
input::placeholder { color: var(--text-4); }

label {
  display: block;
  margin-bottom: var(--sp-2);
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  color: var(--text-3);
}

/* ─── PILLS / TAGS / BADGES ──────────────────────────────────────────────── */
.pill {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  padding: 0.1875rem var(--sp-3);
  border-radius: var(--r-pill);
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  color: var(--text-3);
  background: var(--bg-elev);
  border: 1px solid var(--hair-2);
  white-space: nowrap;
}
.pill-gold {
  color: var(--gold);
  background: var(--gold-fill);
  border-color: var(--gold-border);
}
.pill-sage {
  color: var(--sage);
  background: var(--sage-fill);
  border-color: rgba(123, 166, 140, 0.25);
}
.pill-brick {
  color: var(--brick);
  background: var(--brick-fill);
  border-color: rgba(198, 107, 92, 0.25);
}
.pill-amber {
  color: var(--amber);
  background: var(--amber-fill);
  border-color: rgba(232, 149, 68, 0.25);
}
.dot {
  display: inline-block;
  width: 0.375rem;
  height: 0.375rem;
  border-radius: 50%;
  background: var(--text-3);
  flex-shrink: 0;
}
.dot-gold {
  background: var(--gold);
  box-shadow: 0 0 8px var(--gold-glow);
}
.dot-sage {
  background: var(--sage);
  box-shadow: 0 0 8px var(--sage-glow);
  animation: dot-pulse 2s ease-in-out infinite;
}
@media (prefers-reduced-motion: no-preference) {
  .dot-sage { animation: dot-pulse 2s ease-in-out infinite; }
}
@media (prefers-reduced-motion: reduce) {
  .dot-sage { animation: none; }
}

/* ─── EMPTY STATES ───────────────────────────────────────────────────────── */
.empty-state {
  padding: var(--sp-16) var(--sp-8);
  text-align: center;
}
.empty-state-illustration {
  width: 4rem;
  height: 4rem;
  margin: 0 auto var(--sp-5);
  border-radius: 50%;
  background:
    linear-gradient(135deg,
      var(--bg-elev) 0%,
      var(--bg) 100%);
  border: 1px solid var(--hair-2);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--text-3);
}
.empty-state-title {
  font-family: var(--font-display);
  font-size: var(--fs-display);
  font-weight: 500;
  color: var(--text);
  margin-bottom: var(--sp-2);
}
.empty-state-body {
  color: var(--text-2);
  margin-bottom: var(--sp-6);
  max-width: 20rem;
  margin-left: auto;
  margin-right: auto;
  font-size: var(--fs-body-sm);
  line-height: var(--lh-relaxed);
}

/* ─── SKELETON LOADING ───────────────────────────────────────────────────── */
.skeleton {
  background: linear-gradient(90deg,
    var(--bg-elev) 0%,
    var(--bg-elev-high) 50%,
    var(--bg-elev) 100%);
  background-size: 200% 100%;
  border-radius: var(--r);
}
@media (prefers-reduced-motion: no-preference) {
  .skeleton { animation: shimmer 1.4s ease-in-out infinite; }
}

/* AI-section skeleton — 2-4 shimmer lines approximating the section's shape,
   shown between request start and first render. Built on .skeleton above;
   rendered by jedahSkeleton() in app.js. Callers replace it wholesale by
   overwriting the host element's innerHTML in their render / error paths. */
.ai-skeleton { padding: 0.875rem 0.125rem 0.625rem; }
/* Branded logo-rings animation centered above the shimmer lines
   (markup from window.jedahRings in components/ai-loading.js). */
.ai-skeleton-rings {
  display: flex;
  justify-content: center;
  padding: 0.25rem 0 0.875rem;
}
.ai-skeleton-line {
  height: 0.75rem;
  margin-bottom: 0.625rem;
}
.ai-skeleton-line:last-of-type { margin-bottom: 0; }
.ai-skeleton-caption {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-wide);
  color: var(--text-4);
  margin-top: 0.75rem;
  font-style: normal;
}

/* ─── TOAST NOTIFICATIONS ────────────────────────────────────────────────── */
.toast {
  position: fixed;
  top: var(--sp-5);
  left: 50%;
  transform: translateX(-50%);
  background: var(--bg-elev-high);
  border: 1px solid var(--hair-strong);
  border-radius: var(--r);
  padding: var(--sp-3) var(--sp-5);
  box-shadow: var(--shadow-lg);
  font-size: var(--fs-body-sm);
  color: var(--text);
  z-index: 9999;
  white-space: nowrap;
}
@media (prefers-reduced-motion: no-preference) {
  .toast { animation: toast-in 200ms var(--ease-out); }
}
@keyframes toast-in {
  from { opacity: 0; transform: translateX(-50%) translateY(-12px); }
  to   { opacity: 1; transform: translateX(-50%) translateY(0); }
}

/* ─── BULK ACTION TOOLBAR ────────────────────────────────────────────────── */
.bulk-toolbar {
  position: fixed;
  bottom: var(--sp-6);
  left: 50%;
  transform: translateX(-50%);
  background: var(--bg-elev-high);
  border: 1px solid var(--hair-strong);
  border-radius: var(--r-md);
  box-shadow: var(--shadow-xl);
  padding: var(--sp-3) var(--sp-5);
  display: flex;
  align-items: center;
  gap: var(--sp-4);
  z-index: 100;
}
@media (prefers-reduced-motion: no-preference) {
  .bulk-toolbar { animation: bulk-toolbar-in 200ms var(--ease-out); }
}

/* ─── PAGE ENTRY ANIMATION ───────────────────────────────────────────────── */
@media (prefers-reduced-motion: no-preference) {
  .page-entry,
  .content {
    animation: page-enter var(--dur-slow) var(--ease-out);
  }
  @keyframes page-enter {
    from { opacity: 0; transform: translateY(8px); }
    to   { opacity: 1; transform: translateY(0); }
  }
}


/* ═══════════════════════════════════════════════════════════════════════════
   LAYOUT PATTERNS — Part 3 of Visual Rebuild
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Shell content variants ─────────────────────────────────────────────── */
.shell-content {
  padding: var(--sp-8) var(--sp-10) 5rem;
  max-width: 80rem;
  width: 100%;
}
.shell-content-editorial {
  max-width: 45rem;
  padding: var(--sp-10) var(--sp-8) 5rem;
}

/* ─── Focused layout (login, signup, wizard) ─────────────────────────────── */
.focused {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--sp-10) var(--sp-6);
  background:
    radial-gradient(ellipse 50% 40% at 50% 30%,
      rgba(212, 168, 100, 0.05) 0%,
      transparent 70%),
    var(--bg);
}
.focused-card {
  width: 100%;
  max-width: 30rem;
  background:
    linear-gradient(180deg,
      var(--bg-elev) 0%,
      var(--bg) 100%);
  border: 1px solid var(--hair-2);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-xl);
  padding: var(--sp-10) var(--sp-8);
}

/* ─── Page head pattern ──────────────────────────────────────────────────── */
.page-head {
  margin-bottom: var(--sp-10);
  padding-bottom: var(--sp-6);
  border-bottom: 1px solid var(--hair);
  position: relative;
}
.page-head-eyebrow {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  color: var(--gold);
  text-transform: uppercase;
  margin-bottom: var(--sp-3);
}
.page-head-title {
  font-family: var(--font-display);
  font-size: var(--fs-display-xl);
  font-weight: 500;
  line-height: var(--lh-display);
  letter-spacing: var(--ls-display);
  color: var(--text);
  margin: 0 0 var(--sp-2);
}
.page-head-sub {
  font-size: var(--fs-body);
  color: var(--text-2);
  margin: 0;
  line-height: var(--lh-snug);
}
.page-head-actions {
  position: absolute;
  top: 0;
  right: 0;
  display: flex;
  gap: var(--sp-3);
  align-items: center;
}

/* ─── Filter bar ─────────────────────────────────────────────────────────── */
.filter-bar {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  margin-bottom: var(--sp-5);
  padding: var(--sp-2) var(--sp-4);
  background: var(--bg-elev);
  border: 1px solid var(--hair-2);
  border-radius: var(--r);
}
.filter-search {
  flex: 1;
  background: transparent;
  border: 0;
  color: var(--text);
  font-family: var(--font-body);
  font-size: var(--fs-body-sm);
  padding: var(--sp-2) 0;
}
.filter-search::placeholder { color: var(--text-4); }
.filter-search:focus { outline: none; }
.filter-divider {
  width: 0.0625rem;
  height: 1rem;
  background: var(--hair-2);
  flex-shrink: 0;
}
.filter-chips { display: flex; gap: var(--sp-2); flex-wrap: wrap; }
.filter-chip {
  display: inline-flex;
  align-items: center;
  padding: 0.1875rem var(--sp-3);
  border-radius: var(--r-pill);
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  background: transparent;
  border: 1px solid var(--hair-2);
  color: var(--text-3);
  cursor: pointer;
  transition: all var(--dur) var(--ease);
  white-space: nowrap;
}
.filter-chip:hover { color: var(--text); border-color: var(--hair-strong); }
.filter-chip.active {
  color: var(--gold);
  background: var(--gold-fill);
  border-color: var(--gold-border);
}

/* ─── Tiles row (quick links) ────────────────────────────────────────────── */
.tiles-row {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-4);
  margin-top: var(--sp-10);
}
.tile {
  background:
    linear-gradient(180deg,
      var(--bg-elev) 0%,
      var(--bg) 100%);
  border: 1px solid var(--hair-2);
  border-radius: var(--r-md);
  box-shadow: var(--shadow);
  padding: var(--sp-6);
  text-decoration: none;
  transition:
    transform var(--dur) var(--ease),
    box-shadow var(--dur) var(--ease),
    border-color var(--dur) var(--ease);
  display: block;
}
.tile:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-lg);
  border-color: var(--hair-strong);
}
.tile-eyebrow {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  color: var(--text-3);
}
.tile-count {
  font-family: var(--font-display);
  font-size: var(--fs-display-lg);
  font-weight: 500;
  color: var(--text);
  line-height: 1;
  margin: var(--sp-2) 0;
}
.tile-meta { font-size: var(--fs-body-sm); color: var(--text-3); }


/* ═══════════════════════════════════════════════════════════════════════════
   DASHBOARD — Part 5
   ═══════════════════════════════════════════════════════════════════════════ */

/* Greeting block */
.greeting {
  margin-bottom: var(--sp-8);
}
.greeting-line {
  font-family: var(--font-display);
  font-size: var(--fs-display-lg);
  font-weight: 400;
  color: var(--text);
  letter-spacing: var(--ls-tight);
  margin: 0 0 var(--sp-2);
}
.greeting-meta {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  color: var(--text-3);
  text-transform: uppercase;
}

/* Next interview card */
.next-interview-card {
  background:
    linear-gradient(180deg,
      var(--bg-elev-high) 0%,
      var(--bg-elev) 100%);
  border: 1px solid var(--hair-2);
  border-radius: var(--r-md);
  box-shadow: var(--shadow-lg);
  padding: var(--sp-8);
  display: grid;
  grid-template-columns: 4rem 1fr auto;
  grid-template-rows: auto auto;
  gap: var(--sp-2) var(--sp-5);
  align-items: center;
  position: relative;
  overflow: hidden;
  margin-bottom: var(--sp-8);
}
.next-interview-card::before {
  content: '';
  position: absolute;
  inset: 0;
  background:
    radial-gradient(ellipse 60% 80% at 100% 50%,
      var(--gold-fill) 0%,
      transparent 70%);
  pointer-events: none;
}
.ni-avatar {
  grid-row: 1 / 3;
  width: 3.5rem; height: 3.5rem;
  border-radius: 50%;
  background:
    linear-gradient(135deg,
      var(--bg-tint) 0%,
      var(--bg-elev) 100%);
  border: 1px solid var(--hair-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-display);
  font-size: var(--fs-h2);
  font-weight: 500;
  color: var(--text-2);
}
.ni-eyebrow {
  grid-column: 2 / 3;
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  color: var(--gold);
  text-transform: uppercase;
  margin: 0;
}
.ni-name {
  grid-column: 2 / 3;
  font-family: var(--font-display);
  font-size: var(--fs-display);
  font-weight: 500;
  color: var(--text);
  line-height: 1.1;
  letter-spacing: var(--ls-tight);
  margin: 0;
}
.ni-meta {
  grid-column: 2 / 3;
  font-size: var(--fs-body-sm);
  color: var(--text-2);
}
.ni-cta {
  grid-column: 3 / 4;
  grid-row: 1 / 3;
}

/* Activity timeline */
.activity-section { margin-top: var(--sp-8); }
.activity-section-title {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  color: var(--text-3);
  margin-bottom: var(--sp-4);
}
.activity-list {
  background:
    linear-gradient(180deg,
      var(--bg-elev) 0%,
      var(--bg) 100%);
  border: 1px solid var(--hair-2);
  border-radius: var(--r-md);
  overflow: hidden;
}
.activity-item {
  display: grid;
  grid-template-columns: 2rem 1fr auto;
  gap: var(--sp-3);
  padding: var(--sp-4) var(--sp-6);
  border-bottom: 1px solid var(--hair);
  transition: background var(--dur) var(--ease);
  text-decoration: none;
  color: inherit;
}
.activity-item:last-child { border-bottom: 0; }
.activity-item:hover { background: var(--bg-tint); }
.activity-dot {
  width: 0.375rem; height: 0.375rem;
  border-radius: 50%;
  background: var(--gold);
  box-shadow: 0 0 6px var(--gold-glow);
  margin-top: 0.375rem;
  flex-shrink: 0;
  justify-self: center;
}
.activity-body { font-size: var(--fs-body-sm); color: var(--text); line-height: 1.4; }
.activity-body strong { color: var(--text); font-weight: 600; }
.activity-time {
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  color: var(--text-3);
  align-self: center;
  white-space: nowrap;
  letter-spacing: var(--ls-wide);
}


/* ═══════════════════════════════════════════════════════════════════════════
   CANDIDATES LIST — Part 6
   ═══════════════════════════════════════════════════════════════════════════ */

.candidate-row {
  display: grid;
  grid-template-columns: 2.5rem 1fr auto auto;
  gap: var(--sp-4);
  align-items: center;
  padding: var(--sp-4) var(--sp-6);
  border-bottom: 1px solid var(--hair);
  transition: background var(--dur) var(--ease);
  cursor: pointer;
}
.candidate-row:hover { background: var(--bg-elev); }
.candidate-row:last-child { border-bottom: 0; }
.candidate-row-avatar {
  width: 2.25rem; height: 2.25rem;
  border-radius: 50%;
  background:
    linear-gradient(135deg,
      var(--bg-elev-high) 0%,
      var(--bg-elev) 100%);
  border: 1px solid var(--hair-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  font-weight: 600;
  color: var(--text-2);
  flex-shrink: 0;
  letter-spacing: var(--ls-wide);
}
.candidate-row-info { min-width: 0; }
.candidate-row-name {
  font-size: var(--fs-body);
  font-weight: 600;
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.candidate-row-role {
  font-size: var(--fs-body-sm);
  color: var(--text-3);
  margin-top: 0.125rem;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.candidate-row-activity {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  color: var(--text-3);
  letter-spacing: var(--ls-wide);
  white-space: nowrap;
  text-align: right;
}
.candidate-row-open {
  color: var(--text-3);
  font-size: var(--fs-caption);
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r);
  transition: all var(--dur) var(--ease);
  text-decoration: none;
  border: 1px solid transparent;
}
.candidate-row:hover .candidate-row-open {
  color: var(--gold);
  border-color: var(--gold-border);
  background: var(--gold-fill);
}

/* ═══════════════════════════════════════════════════════════════════════════
   CANDIDATE DETAIL — Part 7
   ═══════════════════════════════════════════════════════════════════════════ */

/* Sticky candidate header */
.cand-sticky-header {
  position: sticky;
  top: 0;
  z-index: 50;
  background:
    linear-gradient(180deg,
      var(--bg) 0%,
      rgba(20, 17, 15, 0.95) 80%,
      rgba(20, 17, 15, 0.7) 100%);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  padding: var(--sp-4) 0;
  border-bottom: 1px solid var(--hair);
  margin-bottom: var(--sp-8);
  display: flex;
  align-items: center;
  gap: var(--sp-4);
}
.csh-avatar {
  width: 2.75rem; height: 2.75rem;
  border-radius: 50%;
  background:
    linear-gradient(135deg,
      var(--bg-elev-high) 0%,
      var(--bg-elev) 100%);
  border: 1px solid var(--hair-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-mono);
  font-size: var(--fs-caption);
  font-weight: 600;
  color: var(--text-2);
  flex-shrink: 0;
  letter-spacing: var(--ls-wide);
}
.csh-name {
  font-family: var(--font-display);
  font-size: var(--fs-h1);
  font-weight: 500;
  letter-spacing: var(--ls-tight);
  color: var(--text);
  line-height: 1.1;
}
.csh-role { font-size: var(--fs-body-sm); color: var(--text-3); margin-top: 0.125rem; }
.csh-actions { margin-left: auto; display: flex; gap: var(--sp-3); }

/* Pattern Read — editorial hero */
.pattern-read { margin: var(--sp-12) 0; }
.pattern-read-eyebrow {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  color: var(--gold);
  text-shadow: 0 0 12px var(--gold-glow);
  text-align: center;
  text-transform: uppercase;
  margin-bottom: var(--sp-4);
}
.pattern-read-title {
  font-family: var(--font-display);
  font-size: var(--fs-display-xl);
  font-weight: 400;
  line-height: var(--lh-display);
  letter-spacing: var(--ls-display);
  text-align: center;
  color: var(--text);
  margin: 0 0 var(--sp-6);
}
.pattern-read-byline {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  color: var(--text-3);
  text-align: center;
  margin-bottom: var(--sp-10);
}
.pattern-read-body {
  font-family: var(--font-editorial);
  font-size: var(--fs-h2);
  line-height: 1.75;
  color: var(--text);
  max-width: 35rem;
  margin: 0 auto;
}
.pattern-read-body p { margin-bottom: 1.3em; }

/* Devil's Advocate */
.devils-advocate {
  margin: var(--sp-12) 0;
  padding: var(--sp-8);
  border-left: 3px solid var(--brick);
  background:
    linear-gradient(90deg,
      var(--brick-fill) 0%,
      transparent 100%);
  border-radius: 0 var(--r) var(--r) 0;
}
.devils-advocate-eyebrow {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  letter-spacing: var(--ls-widest);
  text-transform: uppercase;
  color: var(--brick);
  margin-bottom: var(--sp-2);
}
.devils-advocate-title {
  font-family: var(--font-display);
  font-size: var(--fs-display);
  font-weight: 500;
  color: var(--text);
  margin: 0 0 var(--sp-6);
  letter-spacing: var(--ls-tight);
}
.devils-advocate-concerns { display: flex; flex-direction: column; gap: var(--sp-5); counter-reset: da; }
.devils-advocate-concern {
  font-family: var(--font-editorial);
  font-size: var(--fs-body);
  line-height: var(--lh-relaxed);
  color: var(--text);
  counter-increment: da;
  padding-left: var(--sp-6);
  position: relative;
}
.devils-advocate-concern::before {
  content: counter(da);
  position: absolute;
  left: 0;
  top: 0.1875rem;
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  color: var(--brick);
  letter-spacing: var(--ls-wide);
  font-weight: 600;
}

/* HPF Profile card */
.hpf-card { margin: var(--sp-10) 0; }
.hpf-card-head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  margin-bottom: var(--sp-6);
}
.hpf-dimensions-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: var(--sp-4);
}
.hpf-dimension {
  padding: var(--sp-4);
  background: var(--bg);
  border: 1px solid var(--hair);
  border-radius: var(--r);
}
.hpf-dimension-name {
  font-family: var(--font-display);
  font-size: var(--fs-h3);
  font-weight: 600;
  color: var(--text);
  margin-bottom: var(--sp-1);
  letter-spacing: var(--ls-tight);
}
.hpf-score {
  font-family: var(--font-mono);
  font-size: var(--fs-display);
  font-weight: 500;
  color: var(--gold);
  line-height: 1;
  margin: var(--sp-2) 0;
}
.hpf-score::after {
  content: '/10';
  font-size: var(--fs-body-sm);
  color: var(--text-3);
  font-weight: 400;
  margin-left: 0.25rem;
}
.hpf-narrative {
  font-family: var(--font-editorial);
  font-size: var(--fs-body-sm);
  line-height: 1.6;
  color: var(--text-2);
}

/* ═══════════════════════════════════════════════════════════════════════════
   INTERVIEW LIST + DETAIL — Part 8
   ═══════════════════════════════════════════════════════════════════════════ */

.interview-row {
  display: grid;
  grid-template-columns: 6.25rem 1fr auto auto;
  gap: var(--sp-5);
  align-items: center;
  padding: var(--sp-4) var(--sp-6);
  border-bottom: 1px solid var(--hair);
  transition: background var(--dur) var(--ease);
  text-decoration: none;
  color: inherit;
}
.interview-row:hover { background: var(--bg-elev); }
.interview-row:last-child { border-bottom: 0; }
.interview-row-avatar {
  width: 2rem; height: 2rem;
  border-radius: 50%;
  background: var(--bg-elev);
  border: 1px solid var(--hair-strong);
  display: flex;
  align-items: center;
  justify-content: center;
  font-family: var(--font-mono);
  font-size: var(--fs-tiny);
  font-weight: 600;
  color: var(--text-3);
  letter-spacing: var(--ls-wide);
}
.interview-row-name { font-size: var(--fs-body); font-weight: 600; color: var(--text); }
.interview-row-role { font-size: var(--fs-body-sm); color: var(--text-3); margin-top: 0.125rem; }
.interview-row-time {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  color: var(--text-3);
  letter-spacing: var(--ls-wide);
  white-space: nowrap;
}

/* ═══════════════════════════════════════════════════════════════════════════
   COMPARE PAGE — Part 9
   ═══════════════════════════════════════════════════════════════════════════ */

.compare-row {
  display: grid;
  gap: var(--sp-4);
  padding: var(--sp-5);
  border-bottom: 1px solid var(--hair);
  align-items: start;
}
.compare-row:last-child { border-bottom: 0; }
.compare-row-label {
  font-family: var(--font-display);
  font-size: var(--fs-h3);
  font-weight: 500;
  color: var(--text);
  letter-spacing: var(--ls-tight);
}
.compare-row-meta {
  font-family: var(--font-mono);
  font-size: var(--fs-mono);
  color: var(--text-3);
  letter-spacing: var(--ls-wide);
  margin-top: var(--sp-1);
}
.compare-cell {
  text-align: center;
  padding: var(--sp-3);
  border-radius: var(--r);
}
.compare-cell-score {
  font-family: var(--font-display);
  font-size: var(--fs-display);
  font-weight: 500;
  color: var(--text);
  line-height: 1;
}
.compare-cell.winner {
  background: var(--gold-fill);
  box-shadow: inset 0 0 0 1px var(--gold-border);
}
.compare-cell.winner .compare-cell-score {
  color: var(--gold);
  text-shadow: 0 0 16px var(--gold-glow);
}

/* ─── Part 10-11: Settings + Org Insights ──────────────────────────────── */
.settings-content .page-head {
  margin-bottom: 1rem;
  padding-bottom: 0.875rem;
  border-bottom: 1px solid var(--hair);
}
.insights-section-head {
  margin-bottom: 1rem;
}
.insights-section-title {
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--text);
  margin-bottom: 0.25rem;
}
.insights-section-sub {
  font-size: var(--fs-caption);
  color: var(--text-3);
}
.insights-headline {
  background: var(--gold-fill);
  border: 1px solid var(--gold-border);
  border-radius: var(--r);
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
}
.insights-headline-label {
  font-family: var(--font-mono);
  font-size: 0.625rem;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 0.375rem;
}
.insights-headline-text {
  font-family: var(--font-display);
  font-size: var(--fs-h1);
  font-weight: 500;
  color: var(--text);
}

/* ─── Part 16: Skeleton + empty state helpers ───────────────────────────── */
.skeleton-list {
  padding: 0.25rem 0;
}

/* ─── Part 15: Motion + focus + hover transitions ───────────────────────── */

/* Global focus ring — gold, not browser-default blue */
:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 2px;
  border-radius: inherit;
}
:focus:not(:focus-visible) { outline: none; }

/* Skip-to-main link — invisible until focused, appears at top-left */
.skip-link {
  position: absolute;
  top: -3rem;
  left: 0;
  z-index: 10000;
  background: var(--gold);
  color: var(--text-inverse);
  padding: 0.5rem 1.125rem;
  font-weight: 600;
  font-size: var(--fs-body-sm);
  text-decoration: none;
  border-radius: 0 0 6px 0;
  transition: top 0.15s ease;
}
.skip-link:focus { top: 0; }

/* Interactive rows get smooth hover transitions */
.candidate-row,
.interview-row,
.compare-row,
.activity-feed-item,
.nav-item {
  transition: background var(--dur-fast) var(--ease-out),
              box-shadow var(--dur-fast) var(--ease-out);
}

/* Card elevation on hover */
.card:not(.no-hover):hover,
.card-elev:not(.no-hover):hover {
  box-shadow: 0 4px 20px rgba(0,0,0,0.35), 0 0 0 1px var(--hair);
  transition: box-shadow var(--dur-fast) var(--ease-out);
}

/* Button press feedback */
.btn:not(:disabled):active {
  transform: translateY(1px) scale(0.99);
  transition: transform 80ms ease;
}

/* Smooth opacity on disabled states */
[disabled], .disabled {
  transition: opacity var(--dur-fast) var(--ease-out);
}

/* ═══════════════════════════════════════════════════════════════════════
   RESPONSIVE — PART 5 additions
   900px: icon-rail sidebar (labels hidden, icons remain)
   600px: typography scale + 2x2 stat grids + touch targets
   ═══════════════════════════════════════════════════════════════════════ */

/* Icon-rail: between 721px and 900px the sidebar auto-collapses to icons.
   Reuses the existing .sidebar-collapsed rules so no JS toggle needed. */
@media (min-width: 721px) and (max-width: 900px) {
  .shell { --sidebar-w: 3.25rem; }
  .nav-label,
  .brand-name,
  .nav-section-label,
  .user-info,
  .signout-link { display: none !important; }
  .sidebar { padding: var(--sp-4) 0; overflow-x: hidden; }
  .brand { justify-content: center; padding: 0 0 var(--sp-4); }
  .nav-item {
    justify-content: center;
    padding: 0.5rem 0;
    margin: 0;
    border-radius: 0;
  }
  .nav-item.active::before { display: none; }
  .sidebar-toggle-btn { display: none; }
  .user-chip { justify-content: center; padding: 0.375rem 0; }
  .nav-bottom { display: flex; flex-direction: column; align-items: center; }
}

/* ─────────────────────────────────────────────────────────────────────────
   Print — candidate.html and interview.html
   Hides chrome; renders narrative content on white with dark text.
   Activate: Cmd+P / File > Print from candidate or interview detail page.
   ───────────────────────────────────────────────────────────────────────── */
@media print {
  /* Reset to paper */
  *, *::before, *::after { box-shadow: none !important; text-shadow: none !important; }
  body { background: #fff !important; color: #111 !important; font-size: 11pt; }

  /* Hide chrome */
  .sidebar,
  .skip-link,
  .sidebar-toggle-btn,
  .tutorial-tabs-strip,
  #tutorial-popup-overlay,
  #jedah-verify-banner,
  #upgrade-required-modal,
  .btn,
  .page-head-actions,
  .cand-actions,
  .refs-actions,
  .share-token-section,
  .section-actions,
  [data-close-modal],
  [id$="-modal"]:not([aria-hidden="false"]) { display: none !important; }

  /* Full-width layout — no sidebar column */
  .shell { display: block !important; }
  .content { padding: 0 !important; margin: 0 !important; max-width: 100% !important; }

  /* Section cards: clean borders, avoid mid-section page breaks */
  .section-card,
  .card { border: 1px solid #ddd !important; background: #fff !important;
          break-inside: avoid; margin-bottom: 16pt; padding: 12pt; }

  /* Typography */
  h1, h2, h3, .page-head-title, .cand-name { color: #111 !important; }
  a { color: #111 !important; text-decoration: none !important; }

  /* Candidate header */
  .cand-header { border-bottom: 1pt solid #ddd !important; padding-bottom: 8pt !important; }

  /* Don't break inside analysis narrative blocks */
  .pattern-read-text,
  .hpf-dimension,
  .person-dimension { break-inside: avoid; }

  /* Score badges readable on paper */
  .score-badge,
  .dimension-score { background: #f5f5f5 !important; color: #111 !important;
                     border: 1px solid #ccc !important; }

  /* Interview transcript readable */
  .transcript-chunk { border-left: 2pt solid #888 !important; padding-left: 8pt; break-inside: avoid; }

  /* Page numbers via CSS (supported in Chrome) */
  @page { margin: 1.5cm; size: A4 portrait; }
  .content > *:first-child { margin-top: 0; }
}

/* Narrow: page-head title scaling and 2x2 stat grids */
@media (max-width: 600px) {
  .page-head-title { font-size: 1.75rem !important; line-height: 1.1; }
  .hero-title { font-size: var(--fs-display-lg) !important; }

  /* Stats stay 2x2 — more scannable than a single column at 375px. */
  .stats-row {
    grid-template-columns: repeat(2, 1fr) !important;
    gap: 0.5rem !important;
  }

  /* Candidate header compact */
  .cand-header { min-height: 3.5rem; padding: 0.5rem 0.75rem; }
  .cand-header .cand-name { font-size: 1rem !important; }

  /* Rubric grid horizontal scroll */
  .rubric-grid-wrap,
  .table-wrap {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
}

/* ============================================================
   Score edit affordance -- editorial redesign
   ============================================================ */

/* Pencil button */
.score-edit-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  border: 1px solid transparent;
  border-radius: 8px;
  background: transparent;
  color: rgba(255,255,255,0.35);
  cursor: pointer;
  transition: color 0.15s ease, background 0.15s ease, border-color 0.15s ease, transform 0.12s ease;
  flex-shrink: 0;
  line-height: 1;
}
.score-edit-btn:hover {
  color: var(--gold);
  background: rgba(212,168,100,0.06);
  border-color: rgba(212,168,100,0.20);
}
.score-edit-btn:focus-visible {
  outline: none;
  color: var(--gold);
  background: rgba(212,168,100,0.10);
  border-color: rgba(212,168,100,0.50);
  box-shadow: 0 0 0 3px rgba(212,168,100,0.15);
}
.score-edit-btn:active { transform: scale(0.92); }
@media (hover: none) and (pointer: coarse) {
  .score-edit-btn { width: 2.75rem; height: 2.75rem; }
}

/* Score-as-trigger (replaces pencil button) */
.score-trigger {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.125rem;
  padding: 0.375rem 0.5rem;
  margin: -0.375rem -0.5rem;
  border: 1px solid transparent;
  border-radius: 8px;
  background: transparent;
  text-align: right;
}
button.score-trigger {
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease;
}
button.score-trigger:hover {
  background: rgba(212, 168, 100, 0.06);
  border-color: rgba(212, 168, 100, 0.25);
}
button.score-trigger:focus-visible {
  outline: none;
  background: rgba(212, 168, 100, 0.10);
  border-color: rgba(212, 168, 100, 0.55);
  box-shadow: 0 0 0 3px rgba(212, 168, 100, 0.15);
}
button.score-trigger[aria-expanded="true"] {
  background: rgba(212, 168, 100, 0.12);
  border-color: rgba(212, 168, 100, 0.55);
}
.score-trigger-value {
  font-family: 'Fraunces', 'Georgia', serif;
  font-size: 2rem;
  font-weight: 500;
  line-height: 1;
  color: var(--text, var(--text));
}
.score-trigger-out-of {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.625rem;
  letter-spacing: 0.12em;
  color: rgba(255, 255, 255, 0.40);
  margin-left: 0.1875rem;
}
.score-trigger-dash {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 1.5rem;
  color: rgba(255, 255, 255, 0.25);
}
/* Explicit "Not enough data" state for no-evidence dimensions (HPF,
   person/company dimensions). Deliberately quiet + dashed so it reads as
   "not assessed yet" — clearly distinct from a genuine low or midpoint score. */
.dim-nodata-badge {
  display: inline-block;
  padding: 0.1875rem 0.5625rem;
  border: 1px dashed var(--hairline-strong);
  border-radius: var(--r-pill);
  font-family: 'IBM Plex Mono', monospace;
  font-size: var(--fs-tiny);
  letter-spacing: var(--ls-wide);
  text-transform: uppercase;
  color: var(--text-4);
  white-space: nowrap;
  cursor: help;
}
/* Deep-analysis fit score trigger — larger number to match existing .deep-score-num */
.deep-score-trigger-value {
  font-family: inherit;
  font-size: var(--fs-display-2xl);
  font-weight: 600;
  letter-spacing: -1.6px;
  line-height: 1;
  color: var(--text);
}

/* Score layout stacks */
.dim-score-stack {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.25rem;
}
.dim-score-row {
  display: flex;
  align-items: center;
  gap: 0.25rem;
}
.dim-score-meta {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 0.375rem;
  justify-content: flex-end;
}
/* HPF card grid: dim-score-stack takes the old hpf-score grid position.
   It used to span rows 1-2 to sit alongside the trait name AND the
   company-analog sub-label under it; the sub-label is gone, so it is a
   single-row cell again. */
.hpf-card .dim-score-stack {
  grid-column: 2;
  grid-row: 1;
  align-self: start;
  justify-self: end;
}

/* History pill */
.score-history-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.1875rem;
  padding: 0.125rem 0.4375rem 0.125rem 0.3125rem;
  border: 1px solid rgba(212,168,100,0.25);
  border-radius: 20px;
  background: rgba(212,168,100,0.06);
  color: var(--gold);
  font-size: 0.625rem;
  font-family: var(--font-mono, monospace);
  font-weight: 500;
  letter-spacing: 0.02em;
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease;
  line-height: 1;
}
.score-history-pill:hover {
  background: rgba(212,168,100,0.12);
  border-color: rgba(212,168,100,0.45);
}
.score-history-pill:focus-visible {
  outline: none;
  box-shadow: 0 0 0 3px rgba(212,168,100,0.20);
}
.score-history-count { font-variant-numeric: tabular-nums; }

/* Was caption */
.score-was-caption {
  display: inline-flex;
  align-items: baseline;
  gap: 0.1875rem;
  font-size: 0.625rem;
  color: rgba(255,255,255,0.38);
  font-style: italic;
  font-family: "Source Serif 4", Georgia, serif;
}
.score-was-label { font-weight: 400; }
.score-was-value {
  font-style: normal;
  font-family: var(--font-mono, monospace);
  font-size: 0.625rem;
  color: rgba(255,255,255,0.50);
}
.score-was-source { font-weight: 400; }

/* Compact popover edit dialog (score-as-trigger pattern) */
.hpf-edit-popover {
  position: absolute;
  top: 100%;
  margin-top: 0.5rem;
  width: 18.75rem;
  z-index: 50;
  background: var(--bg-3); /* was a hardcoded dark literal: unreadable on the light palettes */
  border: 1px solid rgba(212, 168, 100, 0.30);
  border-radius: 12px;
  box-shadow: 0 14px 36px rgba(0, 0, 0, 0.45);
  backdrop-filter: blur(16px);
  padding: 1rem 1.125rem;
  animation: hpfPopoverIn 200ms cubic-bezier(0.16, 1, 0.3, 1) forwards;
}
.hpf-edit-popover--right { right: 0; }
.hpf-edit-popover--left  { left: 0; }
@keyframes hpfPopoverIn {
  from { opacity: 0; transform: translateY(-6px) scale(0.98); }
  to   { opacity: 1; transform: translateY(0)    scale(1); }
}
.hpf-edit-popover-header {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  margin-bottom: 0.875rem;
  padding-bottom: 0.625rem;
  border-bottom: 1px solid rgba(212, 168, 100, 0.18);
}
.hpf-edit-popover-eyebrow {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.5625rem;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold);
}
.hpf-edit-popover-trait {
  font-family: 'Fraunces', 'Georgia', serif;
  font-size: 1rem;
  font-weight: 500;
  color: var(--text);
}
.hpf-edit-popover-field-label {
  display: block;
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.5625rem;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.55);
  margin: 0.75rem 0 0.375rem;
}
.hpf-edit-popover-score {
  width: 5rem;
  height: 2.5rem;
  padding: 0 0.75rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  background: rgba(0, 0, 0, 0.30);
  color: var(--text);
  font-family: 'Fraunces', 'Georgia', serif;
  font-size: 1.125rem;
  font-weight: 500;
  text-align: center;
  -webkit-appearance: none;
  -moz-appearance: textfield;
}
.hpf-edit-popover-score::-webkit-inner-spin-button,
.hpf-edit-popover-score::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
.hpf-edit-popover-score:focus {
  outline: none;
  border-color: rgba(212, 168, 100, 0.55);
  box-shadow: 0 0 0 3px rgba(212, 168, 100, 0.12);
}
.hpf-edit-popover-reason {
  width: 100%;
  min-height: 4rem;
  padding: 0.5rem 0.625rem;
  border: 1px solid var(--hairline-strong);
  border-radius: 8px;
  background: rgba(0, 0, 0, 0.30);
  color: var(--text);
  font-family: 'IBM Plex Sans', sans-serif;
  font-size: 0.8125rem;
  line-height: 1.5;
  resize: vertical;
}
.hpf-edit-popover-reason::placeholder {
  color: rgba(255, 255, 255, 0.30);
  font-style: italic;
}
.hpf-edit-popover-reason:focus {
  outline: none;
  border-color: rgba(212, 168, 100, 0.55);
  box-shadow: 0 0 0 3px rgba(212, 168, 100, 0.10);
}
.hpf-edit-popover-counter {
  font-family: 'IBM Plex Mono', monospace;
  font-size: 0.5625rem;
  letter-spacing: 0.12em;
  color: rgba(255, 255, 255, 0.35);
  margin-top: 0.25rem;
  text-align: right;
}
.hpf-edit-popover-error {
  margin-top: 0.5rem;
  padding: 0.4375rem 0.625rem;
  background: rgba(239, 68, 68, 0.08);
  border: 1px solid rgba(239, 68, 68, 0.25);
  border-radius: 6px;
}
.hpf-edit-popover-error[hidden] { display: none; }
.hpf-edit-popover-error-text { font-size: 0.6875rem; color: var(--c-danger-text); line-height: 1.4; }
.hpf-edit-popover-actions {
  display: flex;
  justify-content: flex-end;
  gap: 0.5rem;
  margin-top: 0.875rem;
  padding-top: 0.75rem;
  border-top: 1px solid rgba(212, 168, 100, 0.12);
}
.hpf-edit-popover-cancel,
.hpf-edit-popover-save {
  height: 2rem;
  padding: 0 0.875rem;
  border-radius: 7px;
  font-family: 'IBM Plex Sans', sans-serif;
  font-size: 0.75rem;
  font-weight: 600;
  cursor: pointer;
  transition: all 0.12s ease;
}
.hpf-edit-popover-cancel {
  background: transparent;
  color: rgba(255, 255, 255, 0.65);
  border: 1px solid var(--hairline-strong);
}
.hpf-edit-popover-cancel:hover {
  background: rgba(255, 255, 255, 0.04);
  color: var(--text);
  border-color: rgba(255, 255, 255, 0.25);
}
.hpf-edit-popover-save {
  background: var(--gold);
  color: var(--text-inverse);
  border: 1px solid var(--gold);
}
.hpf-edit-popover-save:disabled {
  background: rgba(212, 168, 100, 0.18);
  color: rgba(10, 9, 8, 0.55);
  border-color: rgba(212, 168, 100, 0.18);
  cursor: not-allowed;
}
.hpf-edit-popover-save:hover:not(:disabled) {
  background: var(--gold-bright);
  border-color: var(--gold-bright);
}
@media (prefers-reduced-motion: reduce) {
  .hpf-edit-popover { animation: none; }
}

/* Score editor dialog */
.score-editor {
  margin-top: 0.625rem;
  padding: 1rem;
  background: var(--bg-2);
  border: 1px solid rgba(212,168,100,0.22);
  border-radius: 10px;
  box-shadow: 0 8px 32px rgba(0,0,0,0.45);
  animation: scoreEditorIn 0.22s cubic-bezier(0.16,1,0.3,1) both;
}
.score-editor.score-editor-exit {
  animation: scoreEditorOut 0.18s cubic-bezier(0.16,1,0.3,1) both;
}
.score-editor-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: 0.875rem;
}
.score-editor-eyebrow {
  font-size: 0.5625rem;
  font-family: var(--font-mono, monospace);
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--gold);
  margin-bottom: 0.1875rem;
}
.score-editor-trait {
  font-family: "Fraunces", Georgia, serif;
  font-size: 0.9375rem;
  font-weight: 500;
  color: var(--text);
  line-height: 1.25;
}
.score-editor-fields { display: flex; flex-direction: column; gap: 0.75rem; margin-bottom: 0.875rem; }
.score-editor-field { display: flex; flex-direction: column; gap: 0.3125rem; }
.score-editor-label {
  font-size: 0.625rem;
  font-family: var(--font-mono, monospace);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.50);
}

/* Stepper */
.score-stepper { display: flex; align-items: center; gap: 0; width: fit-content; }
.score-stepper-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1.875rem;
  height: 2.125rem;
  border: 1px solid rgba(212,168,100,0.30);
  background: rgba(212,168,100,0.04);
  color: var(--gold);
  font-size: 1rem;
  font-weight: 300;
  cursor: pointer;
  transition: background 0.12s ease;
  user-select: none;
}
.score-stepper-btn:first-child { border-radius: 6px 0 0 6px; }
.score-stepper-btn:last-child { border-radius: 0 6px 6px 0; }
.score-stepper-btn:hover:not(:disabled) { background: rgba(212,168,100,0.12); }
.score-stepper-btn:disabled { opacity: 0.35; cursor: not-allowed; }
.score-stepper-input {
  width: 2.75rem;
  height: 2.125rem;
  border-top: 1px solid rgba(212,168,100,0.30);
  border-bottom: 1px solid rgba(212,168,100,0.30);
  border-left: none;
  border-right: none;
  background: rgba(212,168,100,0.04);
  color: var(--text);
  font-family: var(--font-mono, monospace);
  font-size: 0.9375rem;
  font-weight: 600;
  text-align: center;
  -webkit-appearance: none;
  -moz-appearance: textfield;
}
.score-stepper-input::-webkit-inner-spin-button,
.score-stepper-input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
.score-stepper-input:focus { outline: none; background: rgba(212,168,100,0.08); }
.score-editor-hint {
  font-size: 0.625rem;
  font-family: var(--font-mono, monospace);
  color: rgba(255,255,255,0.30);
  margin-left: 0.5rem;
  align-self: center;
}

/* Reason textarea */
.score-editor-reason {
  width: 100%;
  box-sizing: border-box;
  padding: 0.5rem 0.625rem;
  background: rgba(255,255,255,0.04);
  border: 1px solid var(--hair-2);
  border-radius: 6px;
  color: var(--text);
  font-family: "IBM Plex Sans", sans-serif;
  font-size: 0.75rem;
  line-height: 1.5;
  resize: vertical;
  transition: border-color 0.15s ease;
}
.score-editor-reason:focus {
  outline: none;
  border-color: rgba(212,168,100,0.40);
  background: rgba(255,255,255,0.06);
}
.score-editor-reason-meta {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 0.625rem;
  font-family: var(--font-mono, monospace);
  color: rgba(255,255,255,0.30);
}
.score-editor-counter.near-limit { color: var(--gold); }
.score-editor-counter.over-limit { color: var(--brick); }
.score-editor-min-hint { color: rgba(255,255,255,0.28); }
.score-editor-min-hint.satisfied { color: rgba(100,200,120,0.75); }

/* Error state */
.score-editor-error {
  display: flex;
  align-items: flex-start;
  gap: 0.375rem;
  padding: 0.5rem 0.625rem;
  background: rgba(239,68,68,0.08);
  border: 1px solid rgba(239,68,68,0.25);
  border-radius: 6px;
  margin-bottom: 0.75rem;
}
.score-editor-error[hidden] { display: none; }
.score-editor-error-glyph {
  font-size: 0.6875rem;
  font-weight: 700;
  color: var(--c-danger-text);
  flex-shrink: 0;
  margin-top: 0.0625rem;
}
.score-editor-error-text { font-size: 0.6875rem; color: var(--c-danger-text); line-height: 1.4; }

/* Actions */
.score-editor-actions { display: flex; gap: 0.5rem; align-items: center; margin-top: 0.875rem; }
.score-editor-cancel {
  padding: 0.375rem 0.875rem;
  border: 1px solid var(--hair-2);
  border-radius: 6px;
  background: transparent;
  color: rgba(255,255,255,0.55);
  font-size: 0.75rem;
  cursor: pointer;
  transition: border-color 0.15s ease, color 0.15s ease;
}
.score-editor-cancel:hover { border-color: rgba(255,255,255,0.25); color: rgba(255,255,255,0.80); }
.score-editor-save {
  padding: 0.375rem 1rem;
  border: none;
  border-radius: 6px;
  background: var(--gold);
  color: var(--text-inverse);
  font-size: 0.75rem;
  font-weight: 600;
  cursor: pointer;
  transition: opacity 0.15s ease, background 0.15s ease;
}
.score-editor-save:disabled { opacity: 0.40; cursor: not-allowed; }
.score-editor-save:not(:disabled):hover { background: var(--gold-bright); }

/* History popover */
.score-history-popover {
  position: fixed;
  z-index: 9999;
  background: var(--bg-2);
  border: 1px solid rgba(212,168,100,0.22);
  border-radius: 10px;
  box-shadow: 0 8px 32px rgba(0,0,0,0.55);
  padding: 0.875rem 1rem;
  min-width: 15rem;
  max-width: 21.25rem;
  animation: historyPopoverIn 0.20s cubic-bezier(0.16,1,0.3,1) both;
}
.score-hist-popover-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 0.75rem;
}
.score-hist-popover-title {
  font-family: "Fraunces", Georgia, serif;
  font-size: 0.8125rem;
  font-weight: 500;
  color: var(--text);
}
.score-hist-popover-close {
  width: 1.5rem;
  height: 1.5rem;
  display: flex;
  align-items: center;
  justify-content: center;
  border: none;
  background: transparent;
  color: rgba(255,255,255,0.40);
  font-size: 1rem;
  cursor: pointer;
  border-radius: 4px;
  line-height: 1;
}
.score-hist-popover-close:hover { color: rgba(255,255,255,0.80); background: rgba(255,255,255,0.06); }
.score-hist-entries { display: flex; flex-direction: column; gap: 0.5rem; }
.history-entry {
  padding: 0.5625rem 0.625rem;
  background: rgba(255,255,255,0.03);
  border: 1px solid var(--hair);
  border-radius: 6px;
}
.history-entry-ai { border-color: rgba(212,168,100,0.15); background: rgba(212,168,100,0.04); }
.history-entry-meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 0.25rem;
}
.history-entry-time {
  font-size: 0.5625rem;
  font-family: var(--font-mono, monospace);
  color: rgba(255,255,255,0.35);
  letter-spacing: 0.02em;
}
.history-entry-badge {
  font-size: 0.5625rem;
  font-family: var(--font-mono, monospace);
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: rgba(212,168,100,0.70);
  padding: 0.0625rem 0.3125rem;
  border: 1px solid rgba(212,168,100,0.25);
  border-radius: 3px;
}
.history-entry-delta {
  display: flex;
  align-items: center;
  gap: 0.375rem;
  margin-bottom: 0.3125rem;
}
.history-entry-score {
  font-family: var(--font-mono, monospace);
  font-size: 0.875rem;
  font-weight: 600;
  color: var(--text);
}
.history-entry-arrow { color: rgba(255,255,255,0.30); font-size: 0.75rem; }
.history-entry-reason {
  font-size: 0.6875rem;
  color: rgba(255,255,255,0.55);
  font-style: italic;
  font-family: "Source Serif 4", Georgia, serif;
  line-height: 1.45;
}
.history-entry-reason::before { content: '"'; }
.history-entry-reason::after { content: '"'; }

/* Animations */
@keyframes scoreEditorIn {
  from { opacity: 0; transform: translateY(-8px) scale(0.985); }
  to   { opacity: 1; transform: none; }
}
@keyframes scoreEditorOut {
  from { opacity: 1; transform: none; }
  to   { opacity: 0; transform: translateY(-8px) scale(0.985); }
}
@keyframes historyPopoverIn {
  from { opacity: 0; transform: translateY(-6px) scale(0.98); }
  to   { opacity: 1; transform: none; }
}

@media (prefers-reduced-motion: reduce) {
  .score-editor,
  .score-editor.score-editor-exit,
  .score-history-popover {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}

/* Mobile stepper touch targets */
@media (max-width: 480px) {
  .score-stepper-btn { width: 2.25rem; height: 2.375rem; }
  .score-stepper-input { width: 3rem; height: 2.375rem; }
}

/* ─── SCORE-BAND COLORING — consistent /10 bands app-wide ────────────────────
   Below 5 = amber (warning), 5 to 7.9 = neutral gold, 8+ = sage green.
   Classes come from jedahScoreBand() in app.js. --band-color feeds bar fills
   and inline styles so bars and numbers share one hue. Kept at the end of
   this sheet so the color wins ties against earlier single-class rules. */
.score-band-low  { --band-color: var(--amber);       color: var(--amber); }
.score-band-mid  { --band-color: var(--gold);        color: var(--gold); }
.score-band-high { --band-color: var(--sage-bright); color: var(--sage-bright); }

/* Rubric bar fills tinted by band (live rubric + interview history bars) */
.rubric-fill.score-band-low,
.rubric-fill.score-band-mid,
.rubric-fill.score-band-high { background: var(--band-color); }

/* Dimension score chips (Person / Company Dimensions) keep their pill fill */
.pd-dim-score.score-band-low  { background: var(--amber-fill); }
.pd-dim-score.score-band-mid  { background: var(--gold-fill); }
.pd-dim-score.score-band-high { background: var(--sage-fill); }

/* ─── Recent roles sidebar (recent-roles.js) ──────────────────────
   Additive text list next to the career-viz SVG on candidate.html
   (two-column via .crl-wrap grid) and stacked below the chart in
   the Zoom panel. crl- prefix to avoid collisions. */
.crl-wrap { display: grid; grid-template-columns: 1fr; gap: 1rem; align-items: start; }
@media (min-width: 900px) { .crl-wrap { grid-template-columns: minmax(0, 1fr) 16.25rem; } }
.crl-panel { min-width: 0; }
.crl-heading { font-size: 0.6875rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-3, rgba(255,255,255,0.55)); font-weight: 500; margin: 0 0 0.5rem; }
.crl-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.crl-item { padding: 0.5rem 0.625rem; border-radius: 6px; background: var(--hair); border: 1px solid var(--hair); }
.crl-item.crl-current { border-left: 2px solid var(--gold, var(--gold)); background: rgba(212,168,100,0.04); }
.crl-title { font-size: 0.8125rem; font-weight: 600; color: var(--text-1, #F5F2EB); line-height: 1.35; }
.crl-company { font-size: 0.75rem; color: var(--text-2, rgba(255,255,255,0.7)); line-height: 1.4; margin-top: 0.0625rem; }
.crl-dates { font-size: 0.6875rem; color: var(--text-3, rgba(255,255,255,0.5)); margin-top: 0.1875rem; font-variant-numeric: tabular-nums; }
.crl-show-all { margin-top: 0.625rem; background: none; border: 1px dashed var(--hairline-strong); color: var(--text-3, rgba(255,255,255,0.55)); font: inherit; font-size: 0.6875rem; padding: 0.375rem 0.625rem; border-radius: 6px; cursor: pointer; width: 100%; }
.crl-show-all:hover { color: var(--text-1, #F5F2EB); border-color: rgba(255,255,255,0.28); }
.crl-show-all:focus-visible { outline: 2px solid var(--gold, var(--gold)); outline-offset: 2px; }

/* ═══════════════════════════════════════════════════════════════════════════
   REDESIGN 2026-07 — "Graphite & Ember" FINAL LAYER
   Modern premium dark pass. This layer is deliberately LAST so it wins the
   cascade against every historical override above (several of which carry
   !important). It restyles only shared components — no selectors that JS
   depends on are renamed. Rollback: delete this block + revert
   design-tokens.css.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ─── Cards / panels — layered surface, soft radius, quiet elevation ─── */
.card, .stat-card, .setup-card, .chart-wrap, .pattern-read {
  background: linear-gradient(180deg, var(--bg-3) 0%, var(--bg-2) 100%) !important;
  border: 1px solid var(--hair-2) !important;
  border-radius: var(--r-md) !important;
  box-shadow: var(--shadow-sm) !important;
  transition: border-color var(--dur) var(--ease), box-shadow var(--dur) var(--ease) !important;
}
.card:hover { border-color: var(--hair-strong) !important; }
.stat-card { padding: 1.25rem 1.375rem; }

/* ─── Buttons ─── */
.btn, .btn-primary, .btn-ghost, .btn-secondary, .btn-danger {
  border-radius: var(--r) !important;
  font-weight: 500 !important;
  letter-spacing: 0.01em !important;
  transition: background var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease),
              color var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease),
              transform var(--dur-fast) var(--ease) !important;
}
.btn-primary {
  background: linear-gradient(180deg, var(--gold-bright) 0%, var(--gold) 100%) !important;
  color: var(--text-inverse) !important;
  border: 1px solid var(--gold) !important;
  font-weight: 600 !important;
  box-shadow: 0 1px 0 0 rgba(255,255,255,0.22) inset, 0 2px 8px rgba(0,0,0,0.4) !important;
}
.btn-primary:hover {
  background: linear-gradient(180deg, var(--gold-bright) 0%, var(--gold-bright) 100%) !important;
  border-color: var(--gold-bright) !important;
  color: var(--text-inverse) !important;
  box-shadow: 0 1px 0 0 rgba(255,255,255,0.25) inset, 0 0 20px var(--gold-glow) !important;
  transform: translateY(-1px);
}
.btn-ghost, .btn-secondary {
  background: rgba(245,242,235,0.03) !important;
  color: var(--text-2) !important;
  border: 1px solid var(--hair-2) !important;
}
.btn-ghost:hover, .btn-secondary:hover {
  color: var(--text) !important;
  border-color: var(--hair-strong) !important;
  background: rgba(245,242,235,0.06) !important;
}
.btn-danger {
  background: var(--brick-fill) !important;
  color: var(--c-danger-text) !important;
  border: 1px solid rgba(198,107,92,0.35) !important;
}
.btn-danger:hover { background: rgba(198,107,92,0.18) !important; color: #E8978A !important; }
.btn:focus-visible, button:focus-visible {
  outline: none !important;
  box-shadow: var(--ring) !important;
}

/* ─── Inputs / selects / textareas ─── */
input[type="text"], input[type="email"], input[type="password"], input[type="number"],
input[type="search"], input[type="tel"], input[type="url"], input[type="date"],
input[type="time"], input[type="datetime-local"], textarea, select {
  /* Token, not a literal: this used to be rgba(10,9,8,0.55), a hardcoded
     near-black that composited to grey over the light palettes (paper, bone,
     porcelain, meadow, blush, mint) and made every field unreadable. Every
     palette defines --bg-deep for its own light/dark character, and
     .jw-input/.jw-select/.jw-textarea already use it, so this now matches
     them. In the default warm-dark theme the two values are visually
     identical (#0A0908 vs the old composite #0E0C0B). */
  background: var(--bg-deep) !important;
  border: 1px solid var(--hair-2) !important;
  border-radius: var(--r) !important;
  color: var(--text) !important;
  transition: border-color var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease) !important;
}
input:hover:not(:focus), textarea:hover:not(:focus), select:hover:not(:focus) {
  border-color: var(--hair-strong) !important;
}
input:focus, textarea:focus, select:focus {
  outline: none !important;
  border-color: var(--gold-border) !important;
  box-shadow: var(--ring) !important;
}
input::placeholder, textarea::placeholder { color: var(--text-4) !important; }

/* ─── Sidebar — quiet rail, ember active state ─── */
.sidebar {
  background: linear-gradient(180deg, var(--bg-deep) 0%, var(--bg) 85%) !important;
  border-right: 1px solid var(--hair) !important;
}
.nav-item { border-radius: var(--r) !important; }
.nav-item:hover {
  background: rgba(245,242,235,0.045) !important;
  color: var(--text) !important;
}
.nav-item.active {
  background: var(--gold-fill) !important;
  color: var(--text) !important;
  box-shadow: 0 0 0 1px rgba(212,168,100,0.14) inset;
}
.nav-item.active::before { background: var(--gold); box-shadow: 0 0 10px var(--gold-glow); }
.nav-item.active .nav-icon { color: var(--gold) !important; opacity: 1; }

/* ─── Tabs — ember underline ─── */
.tab.active {
  color: var(--text) !important;
  border-bottom-color: var(--gold) !important;
}
.tab:hover:not(.active) { color: var(--text-2); }

/* ─── Modals + dropdowns — deep glass ─── */
.modal-backdrop {
  background: rgba(6, 5, 4, 0.66) !important;
  backdrop-filter: blur(10px) saturate(1.1);
  -webkit-backdrop-filter: blur(10px) saturate(1.1);
}
.modal {
  background: linear-gradient(180deg, var(--bg-3) 0%, var(--bg-2) 100%) !important;
  border: 1px solid var(--hair-2) !important;
  border-radius: var(--r-lg) !important;
  box-shadow: var(--shadow-xl) !important;
}
.modal-title { font-family: var(--font-display); font-weight: 500; }
.dropdown-menu {
  background: var(--bg-3) !important;
  border: 1px solid var(--hair-2) !important;
  border-radius: var(--r-md) !important;
  box-shadow: var(--shadow-lg) !important;
  padding: 0.375rem !important;
}
.dropdown-item { border-radius: var(--r-sm); }

/* ─── Chips / badges / status pills — pill geometry, quiet borders ─── */
.chip, .badge {
  border-radius: var(--r-pill) !important;
  letter-spacing: 0.04em;
}
.chip.outline { border-width: 1px !important; }

/* ─── List rows — soft hover wash ─── */
.list-row:hover, .role:hover { background: rgba(245,242,235,0.03); }

/* ─── Empty states ─── */
.empty-state, .rubric-list-empty, .jd-list-empty, .question-list-empty {
  background: rgba(245,242,235,0.015) !important;
  border: 1px dashed var(--hair-2) !important;
  border-radius: var(--r-lg) !important;
}

/* ─── Scrollbars — thin, rounded, discreet ─── */
/* The export's values. The old rgba(245,242,235,...) literals composited to
   a near-invisible bar on the light palettes; --bg-tint tracks the theme. */
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--bg-tint); border-radius: 999px; border: 2px solid var(--bg); }
::-webkit-scrollbar-thumb:hover { background: var(--text-5); }

/* ─── Page titles keep the Fraunces display voice ─── */
.page-title, .page-head-title { font-family: var(--font-display); }

/* ─── Focus visibility for links/controls (a11y, ember ring) ─── */
a:focus-visible, [tabindex]:focus-visible {
  outline: 2px solid var(--gold-border) !important;
  outline-offset: 2px;
}

/* ═══════════════════════════════════════════════════════════════════════
   V3 REDESIGN — SHARED SHELL + DASHBOARD COMPONENTS
   Authoritative sidebar styling (matches app/_design/v3-reference) plus the
   reusable dashboard component set. Placed last so it wins the cascade over
   the earlier accreted !important sidebar blocks. Every authed page renders
   the same shared sidebar partial, so these sidebar rules restyle the whole
   app; the .jw-* dashboard classes are consumed by index.html now and are
   available to later redesign passes.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── Shared sidebar shell ──────────────────────────────────────────────── */
.sidebar {
  background: linear-gradient(180deg, var(--bg-deep) 0%, var(--bg) 100%) !important;
  border-right: 1px solid var(--hair) !important;
  padding: 1.5rem 0 1.25rem !important;
  gap: 0 !important;
}
.brand {
  padding: 0 1.25rem 1.375rem !important;
  margin-bottom: 0.5rem !important;
  gap: 0.75rem !important;
  border-bottom: 1px solid var(--hair) !important;
}
.brand-logo { width: 2.25rem !important; height: 2.25rem !important; }
/* The v3 wordmark is "Jedah" set in Fraunces (mixed case) — overrides the
   earlier mono-uppercase treatment. Exec custom-branding (sidebar-tier.js)
   still swaps this text at runtime for branded workspaces. */
.brand-name {
  font-family: var(--font-display) !important;
  font-size: 1.1875rem !important;
  font-weight: 500 !important;
  letter-spacing: -0.01em !important;
  text-transform: none !important;
  color: var(--text) !important;
  line-height: 1.1 !important;
  -webkit-line-clamp: 2 !important;
}
.nav-section-label {
  font-family: var(--font-mono) !important;
  font-size: 0.625rem !important;
  letter-spacing: 0.18em !important;
  text-transform: uppercase !important;
  color: var(--text-4) !important;
  padding: 1rem 1.25rem 0.5rem !important;
  margin: 0 !important;
}
.nav-item {
  gap: 0.6875rem !important;
  padding: 0.5rem 0.75rem !important;
  margin: 0.0625rem 0.75rem !important;
  border-radius: 8px !important;
  font-size: 0.8125rem !important;
  color: var(--text-3) !important;
  font-weight: 400 !important;
}
.nav-item:hover { background: var(--bg-tint) !important; color: var(--text) !important; }
.nav-item.active {
  background: var(--gold-fill) !important;
  color: var(--text) !important;
  font-weight: 500 !important;
  box-shadow: inset 2px 0 0 var(--gold) !important;
}
.nav-item.active::before { display: none !important; }
.nav-item .nav-icon { width: 0.9375rem !important; height: 0.9375rem !important; opacity: 1 !important; color: currentColor !important; }
.nav-item.active .nav-icon, .nav-item:hover .nav-icon { color: var(--text) !important; }
.nav-bottom {
  margin-top: auto !important;
  padding-top: 0.75rem !important;
  border-top: 1px solid var(--hair) !important;
}
.user-chip { padding: 0.75rem 1.25rem 0 !important; gap: 0.75rem !important; border-top: none !important; }
/* v3 gold-tinted avatar (matches the reference footer + candidate headers). */
.user-avatar {
  background: var(--gold-fill) !important;
  border: 1px solid var(--gold-border) !important;
  color: var(--gold-bright) !important;
  width: 1.75rem !important; height: 1.75rem !important;
  font-size: 0.6875rem !important;
}
.user-info .nm { font-size: 0.8125rem !important; }
.user-info .em { font-size: 0.65625rem !important; letter-spacing: 0 !important; text-transform: none !important; }

/* ── V3 buttons (pill actions used in page headers) ────────────────────── */
.jw-btn {
  height: 2rem; padding: 0 0.875rem; border-radius: var(--r-btn);
  border: 1px solid var(--hairline-strong); background: transparent; color: var(--text);
  font-family: var(--font-body); font-size: 0.8125rem; font-weight: 500;
  cursor: pointer; text-decoration: none;
  display: inline-flex; align-items: center; gap: 0.5rem; white-space: nowrap;
  transition: background var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}
.jw-btn:hover { background: var(--bg-tint); color: var(--text); }
.jw-btn:focus-visible { outline: none; box-shadow: var(--ring); }
.jw-btn-primary {
  border-color: transparent; background: var(--gold); color: var(--bg-deep); font-weight: 600;
}
.jw-btn-primary:hover { background: var(--gold-bright); color: var(--bg-deep); }

/* ── V3 page header (greeting) ─────────────────────────────────────────── */
/* Reads the shared app-column token rather than its own 80rem, so the v3/v5
   pages (dashboard, candidates, schedule) widen with everything else instead
   of stopping 300px short of the rest of the app. */
.jw-page { max-width: var(--content-max); margin: 0 auto; }
.jw-hero {
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: 1rem; flex-wrap: wrap; margin-bottom: 1.375rem;
}
.jw-hero-title {
  font-family: var(--font-display); font-size: 1.875rem; font-weight: var(--display-weight);
  letter-spacing: -0.02em; line-height: 1.1; color: var(--text); margin: 0;
}
.jw-hero-sub { font-size: 0.84375rem; color: var(--text-3); margin-top: 0.5rem; }
.jw-hero-actions { display: flex; gap: 0.625rem; align-items: center; }

/* ── V3 KPI strip ──────────────────────────────────────────────────────── */
.jw-kpis {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr)); gap: 1px;
  background: var(--hair-2); border: 1px solid var(--hair-2);
  border-radius: var(--r-card); overflow: hidden; margin-bottom: 1.625rem;
}
.jw-kpi {
  background: var(--bg-elev); padding: 0.875rem 1rem; text-decoration: none;
  display: block; color: inherit; position: relative;
  transition: background var(--dur-fast) var(--ease);
}
a.jw-kpi:hover { background: var(--surface-3); }
.jw-kpi-label {
  font-family: var(--font-mono); font-size: 0.59375rem; letter-spacing: 0.14em;
  text-transform: uppercase; color: var(--text-4); margin-bottom: 0.5625rem;
}
.jw-kpi-num {
  font-family: var(--font-display); font-size: 1.6875rem; font-weight: var(--display-weight);
  line-height: 1; color: var(--text); font-variant-numeric: tabular-nums;
}
.jw-kpi-num small { font-size: 1.0625rem; color: var(--text-3); font-family: var(--font-body); }
.jw-kpi-sub { font-size: 0.75rem; color: var(--text-3); margin-top: 0.5625rem; }

/* ── V3 dashboard two-column grid ──────────────────────────────────────── */
.jw-main { display: grid; grid-template-columns: minmax(0, 1fr) 18.75rem; gap: 2rem; align-items: start; }
.jw-col { min-width: 0; display: flex; flex-direction: column; gap: 2rem; }
.jw-rail { display: flex; flex-direction: column; gap: 1.5rem; min-width: 0; }
@media (max-width: 1180px) { .jw-main { grid-template-columns: minmax(0, 1fr); } }

/* ── V3 section headers ────────────────────────────────────────────────── */
.jw-section-h { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 0.875rem; gap: 0.75rem; }
.jw-section-h h2 {
  font-family: var(--font-mono) !important; font-size: 0.6875rem !important;
  font-weight: 500 !important; letter-spacing: 0.18em !important;
  text-transform: uppercase; color: var(--text-3); margin: 0;
}
.jw-section-h a {
  font-family: var(--font-mono); font-size: 0.6875rem; letter-spacing: 0.06em;
  color: var(--text-3); text-decoration: none; white-space: nowrap;
}
.jw-section-h a:hover { color: var(--gold-bright); }

/* ── V3 list card + rows ───────────────────────────────────────────────── */
.jw-list {
  background: var(--bg-elev); border: 1px solid var(--hair);
  border-radius: var(--r-card); padding: 0.25rem; display: flex; flex-direction: column; gap: 1px;
}
.jw-row {
  display: flex; align-items: center; gap: 0.6875rem; width: 100%;
  padding: 0.5rem 0.6875rem; border: none; border-radius: var(--r-input); background: none;
  font-family: inherit; cursor: pointer; text-align: left; color: inherit;
  text-decoration: none; transition: background var(--dur-fast) var(--ease);
}
.jw-row:hover { background: var(--bg-tint); }
.jw-row-av {
  width: 2.125rem; height: 2.125rem; border-radius: 999px; background: var(--bg-3);
  color: var(--text-2); display: flex; align-items: center; justify-content: center;
  font-weight: 600; font-size: 0.71875rem; flex-shrink: 0; border: 1px solid var(--hair);
}
.jw-row-body { min-width: 0; flex: 1; display: flex; flex-direction: column; gap: 0.125rem; }
.jw-row-line { display: flex; align-items: center; gap: 0.5625rem; }
.jw-row-title { font-weight: 600; font-size: 0.84375rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--text); }
.jw-row-sub { font-size: 0.75rem; color: var(--text-3); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.jw-row-right { margin-left: auto; flex-shrink: 0; display: flex; align-items: center; gap: 0.625rem; }
.jw-row-time { font-family: var(--font-mono); font-size: 0.6875rem; color: var(--text-4); }
.jw-row-time.is-live { color: var(--sage-bright); }
.jw-row-empty { padding: 1.625rem 0.875rem; text-align: center; color: var(--text-4); font-size: 0.78125rem; }

/* Dashboard week-strip chips (app/index.html #dash-week). Geometry and
   colour are inline on the anchor, the same way the interviews.html week
   grid builds its chips; this only supplies the hover affordance, which
   inline styles cannot express. !important because those inline styles set
   background and border-color. */
.jw-day-chip { transition: background var(--dur-fast) var(--ease), border-color var(--dur-fast) var(--ease); }
.jw-day-chip:hover { background: var(--gold-fill) !important; border-color: var(--gold) !important; }
.jw-day-chip:focus-visible { outline: 2px solid var(--gold); outline-offset: 1px; }
/* Overdue chip: an interview whose time has passed and that nobody ended
   (JedahInterviews.isUnresolved). Same geometry, warn/amber token instead of
   gold, so hover/focus do not flip it back to "coming up". */
.jw-day-chip.is-overdue:hover { background: var(--amber-fill) !important; border-color: var(--amber) !important; }
.jw-day-chip.is-overdue:focus-visible { outline-color: var(--amber); }

/* ── V3 chips ──────────────────────────────────────────────────────────── */
.jw-chip {
  padding: 0.125rem 0.5625rem; border-radius: var(--r-chip, 999px); font-size: 0.65625rem; font-weight: 600;
  flex-shrink: 0; white-space: nowrap; line-height: 1.6; letter-spacing: 0.02em; display: inline-block;
}
.jw-chip-offer  { background: var(--chip-offer-bg);  color: var(--chip-offer-fg); }
.jw-chip-round  { background: var(--chip-round-bg);  color: var(--chip-round-fg); }
.jw-chip-screen { background: var(--chip-screen-bg); color: var(--chip-screen-fg); }
.jw-chip-review { background: var(--chip-review-bg); color: var(--chip-review-fg); }
.jw-chip-live   { background: var(--chip-live-bg);   color: var(--chip-live-fg); }
.jw-chip-out    { background: var(--chip-out-bg);    color: var(--chip-out-fg); }
/* Warn chip -- "this should already have happened". Existing amber tokens,
   no new colour. Used by the Upcoming list on app/interviews.html for a row
   JedahInterviews.isUnresolved() flags. */
.jw-chip-warn   { background: var(--amber-fill);     color: var(--amber-soft); }

/* ── V3 score text ─────────────────────────────────────────────────────── */
.jw-score { font-family: var(--font-mono); font-size: 0.75rem; font-weight: 600; font-variant-numeric: tabular-nums; }
.jw-score-high { color: var(--score-v3-high); }
.jw-score-mid  { color: var(--score-v3-mid); }
.jw-score-low  { color: var(--score-v3-low); }
.jw-score-na   { color: var(--text-4); font-weight: 500; }

/* ── V3 inline "Start / Join" pill on a list row ───────────────────────── */
.jw-start {
  flex-shrink: 0; height: 1.625rem; padding: 0 0.75rem; border: none; border-radius: var(--r-btn);
  background: var(--gold); color: var(--bg-deep); font-family: inherit;
  font-size: 0.71875rem; font-weight: 600; cursor: pointer;
  display: inline-flex; align-items: center; text-decoration: none;
  transition: background var(--dur-fast) var(--ease);
}
.jw-start:hover { background: var(--gold-bright); color: var(--bg-deep); }

/* ── V3 quick actions ──────────────────────────────────────────────────── */
.jw-quick {
  background: var(--bg-elev); border: 1px solid var(--hair);
  border-radius: var(--r-card); overflow: hidden; display: flex; flex-direction: column;
}
.jw-quick a {
  display: flex; align-items: center; justify-content: space-between; gap: 0.625rem;
  padding: 0.625rem 0.9375rem; border-top: 1px solid var(--hair); font-size: 0.8125rem;
  color: var(--text-2); text-decoration: none;
  transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}
.jw-quick a:first-child { border-top: none; }
.jw-quick a:hover { background: var(--bg-tint); color: var(--text); }
.jw-quick a span { color: var(--text-4); font-size: 0.75rem; }
.jw-quick a:hover span { color: var(--gold-bright); }

/* ── V3 Jedah note card ────────────────────────────────────────────────── */
.jw-note {
  border-left: 2px solid var(--gold-border); background: var(--gold-fill);
  border-radius: 0 9px 9px 0; padding: 0.875rem 1.125rem;
  font-size: 0.8125rem; color: var(--text-2); line-height: 1.6;
}
.jw-note p { margin: 0; }
.jw-note p + p { margin-top: 0.75em; }

/* ═══════════════════════════════════════════════════════════════════════
   V4 REDESIGN — COMPONENTS PORTED FROM THE CANDIDATE MOCKS
   Ported verbatim (values, not markup) from the redesign-v4 export's
   styles.css for "03 Candidate Overview" / "04 Candidate Analysis". These are
   ADDITIVE: every class below is new, so no page that already ships .jw-*
   dashboard classes changes. Consumed by app/candidate.html and
   app/candidate-shared.html.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── Cards + layout ────────────────────────────────────────────────────── */
.jw-card { background: var(--bg-elev); border: 1px solid var(--hair); border-radius: var(--r-card); }
.jw-card-pad { padding: 1rem 1.125rem; }
.jw-section { margin-bottom: 1.625rem; }
.jw-grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1.25rem; }
.jw-split-main { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 1.5rem; align-items: start; }
.jw-page-wide { max-width: var(--content-wide); }
@media (max-width: 1180px) {
  .jw-grid-2 { grid-template-columns: minmax(0, 1fr); }
  .jw-split-main { grid-template-columns: minmax(0, 1fr); }
}

/* ── Buttons (variants on the existing .jw-btn base) ───────────────────── */
.jw-btn-sm { height: 1.625rem; padding: 0 0.75rem; font-size: 0.71875rem; }
.jw-btn-ghost { border-color: transparent; color: var(--text-2); }
.jw-btn-danger { border-color: rgba(198, 107, 92, 0.4); color: var(--brick-soft); }
.jw-btn-danger:hover { background: var(--brick-fill); }

/* ── Mono tags (SHADOW: LATENT / PRESENT, severity, verdict) ───────────── */
.jw-tag {
  font-family: var(--font-mono); font-size: 0.59375rem; font-weight: 500; letter-spacing: 0.1em;
  text-transform: uppercase; padding: 0.125rem 0.5rem; border-radius: 4px;
  white-space: nowrap; display: inline-block;
}
.jw-tag-brick { background: var(--brick-fill); color: var(--brick-soft); border: 1px solid rgba(198, 107, 92, 0.25); }
.jw-tag-amber { background: var(--amber-fill); color: var(--amber-soft); border: 1px solid rgba(232, 149, 68, 0.22); }
.jw-tag-dim   { background: var(--bg-tint);    color: var(--text-3);    border: 1px solid var(--hair); }
.jw-tag-gold  { background: var(--gold-fill);  color: var(--gold-bright); border: 1px solid var(--gold-border); }
.jw-tag-sage  { background: var(--sage-fill);  color: var(--sage-bright); border: 1px solid rgba(123, 166, 140, 0.25); }

/* ── Big score + dimension bars ────────────────────────────────────────── */
.jw-score-lg {
  font-family: var(--font-display); font-size: 2.5rem; font-weight: var(--display-weight);
  line-height: 1; letter-spacing: -0.01em; font-variant-numeric: tabular-nums;
}
.jw-dims { display: flex; flex-direction: column; }
/* The name cell is a single line: the company-analog sub-label that used to
   sit under it was removed (founder, Jul 2026). Row padding is a step up from
   the old 0.6875rem so the list keeps its rhythm now that the tallest cell in
   the name column is one line instead of two. */
.jw-dim {
  display: grid; grid-template-columns: 9.375rem 1fr auto; align-items: center;
  gap: 1rem; padding: var(--sp-3) 0; border-bottom: 1px solid var(--hair);
}
.jw-dim:last-child { border-bottom: none; }
.jw-dim-name { font-size: 0.84375rem; font-weight: 600; color: var(--text); }
.jw-dim-track { height: 0.25rem; border-radius: 4px; background: var(--bg-tint); position: relative; overflow: hidden; }
.jw-dim-fill { position: absolute; inset: 0 auto 0 0; border-radius: 4px; background: var(--score-v3-mid); }
.jw-dim-fill.is-high { background: var(--score-v3-high); }
.jw-dim-fill.is-low  { background: var(--score-v3-low); }
.jw-dim-val {
  font-family: var(--font-mono); font-size: 0.8125rem; font-weight: 600;
  min-width: 2.25rem; text-align: right; font-variant-numeric: tabular-nums;
}
@media (max-width: 620px) { .jw-dim { grid-template-columns: 1fr auto; } .jw-dim-track { grid-column: 1 / -1; } }

/* ── Plot legend ───────────────────────────────────────────────────────── */
.jw-plot-legend {
  display: flex; flex-wrap: wrap; gap: 1.125rem; margin-top: 0.875rem;
  font-size: 0.71875rem; color: var(--text-3); align-items: center;
}
.jw-plot-legend span { display: inline-flex; align-items: center; gap: 0.4375rem; }

/* ── Tabs ──────────────────────────────────────────────────────────────── */
.jw-tabs { display: flex; gap: 1.25rem; border-bottom: 1px solid var(--hair); margin-bottom: 1.125rem; }
.jw-tab {
  font-family: var(--font-mono); font-size: 0.71875rem; letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--text-4); text-decoration: none; padding: 0 0.125rem 0.75rem; border: none; background: none;
  border-bottom: 2px solid transparent; margin-bottom: -0.0625rem; cursor: pointer;
  transition: color var(--dur-fast) var(--ease);
}
.jw-tab:hover { color: var(--text-2); }
.jw-tab.is-active, .jw-tab.active { color: var(--gold-bright); border-bottom-color: var(--gold); }

/* ── Verdict banner + signal pill ──────────────────────────────────────── */
.jw-verdict {
  border: 1px solid var(--gold-border);
  background: linear-gradient(180deg, rgba(212, 168, 100, 0.07), rgba(212, 168, 100, 0.02));
  border-radius: var(--r-card); padding: 1.125rem 1.375rem;
}
.jw-signal {
  display: flex; align-items: center; gap: 0.625rem;
  border: 1px solid rgba(123, 166, 140, 0.25); background: var(--sage-fill);
  border-radius: 9px; padding: 0.6875rem 1rem; font-size: 0.8125rem; color: var(--sage-bright); font-weight: 500;
}
.jw-signal-dot {
  width: 0.4375rem; height: 0.4375rem; border-radius: 999px; background: var(--sage-bright);
  animation: dot-pulse 2.4s infinite; flex-shrink: 0;
}

/* ── Empty / error states ──────────────────────────────────────────────── */
.jw-empty { text-align: center; padding: 2.5rem 1.5rem; border: 1px dashed var(--hair-2); border-radius: var(--r-card); }
.jw-empty-title { font-family: var(--font-display); font-size: 1.1875rem; color: var(--text-2); margin: 0 0 0.375rem; font-weight: var(--display-weight); }
.jw-empty-sub { font-size: 0.8125rem; color: var(--text-4); margin: 0 0 1.125rem; }
.jw-error {
  display: flex; align-items: flex-start; gap: 0.75rem;
  border: 1px solid rgba(198, 107, 92, 0.3); background: var(--brick-fill);
  border-radius: var(--r-card); padding: 0.8125rem 0.9375rem;
}
.jw-error-title { font-size: 0.84375rem; font-weight: 600; color: var(--brick-soft); }
.jw-error-sub { font-size: 0.78125rem; color: var(--text-3); margin-top: 0.1875rem; }

/* ── Misc ──────────────────────────────────────────────────────────────── */
.jw-avatar-lg {
  width: 3.25rem; height: 3.25rem; border-radius: 999px; background: var(--bg-3);
  border: 1px solid var(--gold-border); color: var(--gold-bright);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-display); font-size: 1.25rem; flex-shrink: 0;
}
.jw-mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
.jw-faint { color: var(--text-4); }
.jw-hero-eyebrow {
  font-family: var(--font-mono); font-size: 0.6875rem; letter-spacing: 0.18em;
  text-transform: uppercase; color: var(--gold-muted); margin-bottom: 0.625rem;
}
.jw-points { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.5625rem; }
.jw-points li { display: flex; gap: 0.625rem; font-size: 0.8125rem; line-height: 1.55; color: var(--text-2); }
.jw-points li::before { content: "\2014"; flex-shrink: 0; }
.jw-points.is-good li::before { color: var(--sage); }
.jw-points.is-bad  li::before { color: var(--brick); }

/* ── Work experience rows (v4 candidate + shared pages) ────────────────── */
.jw-work { display: flex; flex-direction: column; }
.jw-work-row {
  display: grid; grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.5rem 1rem; align-items: baseline;
  padding: 0.75rem 0; border-bottom: 1px solid var(--hair);
}
.jw-work-row:last-child { border-bottom: none; }
.jw-work-title { font-size: 0.84375rem; font-weight: 600; color: var(--text); }
.jw-work-co { font-size: 0.75rem; color: var(--text-3); margin-top: 0.125rem; }
.jw-work-right { display: flex; align-items: center; gap: 0.5rem; justify-content: flex-end; flex-wrap: wrap; }
.jw-work-dates { font-family: var(--font-mono); font-size: 0.65625rem; letter-spacing: 0.06em; color: var(--text-4); white-space: nowrap; }
.jw-work-desc { grid-column: 1 / -1; font-family: var(--font-editorial); font-size: 0.78125rem; line-height: 1.65; color: var(--text-2); margin: 0.375rem 0 0; }
.jw-work-facts { grid-column: 1 / -1; font-family: var(--font-mono); font-size: 0.65625rem; letter-spacing: 0.04em; color: var(--text-4); margin-top: 0.3125rem; }
/* Opt-in compact mode (the internal candidate page): the LinkedIn paragraph
   and parsed facts stay hidden until hover (desktop) or tap (touch), so the
   list scans. The read-only share page leaves them expanded. */
.jw-work.is-collapsible .jw-work-row.is-expandable { cursor: pointer; }
.jw-work.is-collapsible .jw-work-desc,
.jw-work.is-collapsible .jw-work-facts {
  max-height: 0; overflow: hidden; opacity: 0; margin-top: 0;
  transition: max-height var(--dur) var(--ease), opacity var(--dur) var(--ease), margin-top var(--dur) var(--ease);
}
.jw-work.is-collapsible .jw-work-row:hover .jw-work-desc,
.jw-work.is-collapsible .jw-work-row:focus-within .jw-work-desc,
.jw-work.is-collapsible .jw-work-row.is-open .jw-work-desc { max-height: 26.25rem; opacity: 1; margin-top: 0.4375rem; }
.jw-work.is-collapsible .jw-work-row:hover .jw-work-facts,
.jw-work.is-collapsible .jw-work-row:focus-within .jw-work-facts,
.jw-work.is-collapsible .jw-work-row.is-open .jw-work-facts { max-height: 5rem; opacity: 1; margin-top: 0.3125rem; }

/* ── Transcript turns (shared by the candidate + share pages) ──────────── */
.jw-turn { padding: 0.4375rem 0 0.4375rem 0.75rem; border-left: 2px solid var(--hair-2); margin-bottom: 0.5rem; }
.jw-turn.is-interviewer { border-left-color: var(--gold); }
.jw-turn-who {
  font-family: var(--font-mono); font-size: 0.59375rem; letter-spacing: 0.12em;
  text-transform: uppercase; color: var(--text-4); display: block; margin-bottom: 0.1875rem;
}
.jw-turn-text { font-size: 0.8125rem; line-height: 1.6; color: var(--text-2); }


/* ==========================================================================
   V4 THEME ENGINE -- APP SHELL, FORM CONTROLS + LAYOUT VARIANTS
   Ported from the redesign-v4 export's styles.css. Strictly ADDITIVE: only
   selectors that did not already exist in this file are included, so no page
   that already ships .jw-* classes changes. The html[data-layout="..."] blocks
   at the bottom are the export's sidebar layout variants, driven by
   app/theme.js. ASCII only.
   ========================================================================== */

/* -- App shell -------------------------------------------------------- */
.jw-app { display: flex; min-height: 100vh; }
.jw-sidebar {
  width: var(--sidebar-w); flex-shrink: 0; position: sticky; top: 0; height: 100vh;
  display: flex; flex-direction: column;
  background: var(--bg-deep); border-right: 1px solid var(--hair);
}
.jw-brand { display: flex; flex-direction: column; align-items: flex-start; gap: 0.1875rem; padding: 1.5rem 1.375rem 1rem; }
.jw-brand-mark {
  width: 1.875rem; height: 1.875rem; border-radius: 999px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--gold-border); color: var(--gold);
  font-family: var(--font-display); font-size: 0.9375rem;
}
.jw-brand-name {
  font-family: var(--font-display); font-size: 1.3125rem; font-weight: var(--display-weight); letter-spacing: -0.01em;
  color: var(--text); line-height: 1.1;
}
.jw-brand-org { font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-4); margin-top: 0.125rem; }
.jw-side-search {
  display: flex; align-items: center; gap: 0.5625rem; margin: 0.125rem 0.625rem 0.25rem; padding: 0.4375rem 0.75rem;
  border: none; border-radius: var(--r-input); background: var(--hair);
  color: var(--text-4); font-size: 0.75rem; cursor: pointer;
  transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}
.jw-side-search:hover { background: var(--hair-2); color: var(--text-2); }
.jw-side-search kbd { margin-left: auto; font-family: var(--font-mono); font-size: 0.59375rem; color: var(--text-5); border: 1px solid var(--hair); border-radius: 4px; padding: 0.0625rem 0.3125rem; }
.jw-side-next {
  margin: 0; padding: 0.8125rem 1.375rem 0.75rem; border: none; border-top: 1px solid var(--hair);
  border-radius: 0; background: none; display: block; text-decoration: none;
  transition: background var(--dur-fast) var(--ease);
}
.jw-side-next:hover { background: var(--hair); }
.jw-side-next-label { font-family: var(--font-mono); font-size: 0.5625rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--gold-bright); }
.jw-side-next-body { font-size: 0.78125rem; font-weight: 600; color: var(--text); margin-top: 0.3125rem; }
.jw-side-next-sub { font-family: var(--font-mono); font-size: 0.625rem; color: var(--text-3); margin-top: 0.125rem; }
.jw-nav { flex: 1; overflow-y: auto; padding: 1rem 0.625rem 0.75rem; display: flex; flex-direction: column; gap: 0.125rem; }
.jw-nav-label {
  font-family: var(--font-mono); font-size: 0.625rem; letter-spacing: 0.16em; text-transform: uppercase;
  color: var(--text-4); padding: 1rem 0.625rem 0.4375rem;
}
.jw-nav-label:first-child { padding-top: 0.25rem; }
.jw-nav-item {
  display: flex; align-items: center; gap: 0.6875rem; padding: 0.5rem 0.75rem; border-radius: var(--r-input);
  color: var(--text-2); font-size: 0.84375rem; font-weight: 500; text-decoration: none;
  position: relative; transition: background var(--dur-fast) var(--ease), color var(--dur-fast) var(--ease);
}
.jw-nav-item:hover { background: var(--hair); color: var(--text); }
.jw-nav-item.is-active { background: var(--gold-fill); color: var(--gold-bright); }
.jw-nav-item svg { width: 1rem; height: 1rem; flex-shrink: 0; opacity: 0.75; }
.jw-nav-item.is-active svg { opacity: 1; }
.jw-nav-badge {
  margin-left: auto; font-family: var(--font-mono); font-size: 0.625rem;
  padding: 0.0625rem 0.4375rem; border-radius: 999px; background: var(--bg-tint); color: var(--text-3);
}
.jw-side-foot { padding: 0.125rem 0.625rem 0.75rem; }
.jw-side-user { display: flex; align-items: center; gap: 0.625rem; padding: 0.5rem 0.625rem; border-radius: 8px; text-decoration: none; color: inherit; }
.jw-side-user:hover { background: var(--hair); }
.jw-side-user-name { font-size: 0.78125rem; font-weight: 600; color: var(--text-2); }
.jw-side-user-role { font-size: 0.6875rem; color: var(--text-4); }
.jw-content { flex: 1; min-width: 0; padding: 1.625rem 2.25rem 3.5rem; }

/* -- Rules, cards, grid helpers --------------------------------------- */
.jw-rule { border: none; border-top: 1px solid var(--hair); margin: 1.75rem 0; }
.jw-card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem; padding: 1.125rem 1.5rem 0; }
.jw-card-title { font-size: 0.9375rem; font-weight: 600; letter-spacing: -0.01em; color: var(--text); margin: 0; }
.jw-grid-3 { display: grid; grid-template-columns: repeat(auto-fit, minmax(17.5rem, 1fr)); gap: 1.25rem; }
.jw-split-hero { display: grid; grid-template-columns: 16.25rem minmax(0, 1fr); }
.jw-with-panel { display: grid; grid-template-columns: minmax(0, 1fr) 22.5rem; gap: 1.75rem; align-items: start; }
@media (max-width: 1180px) { .jw-with-panel { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 900px) { .jw-split-hero { grid-template-columns: minmax(0, 1fr); } }

/* -- Buttons: selected state (theme settings option buttons) ---------- */
.jw-btn.is-on { background: var(--gold-fill); color: var(--gold-bright); border-color: var(--gold-border); }

/* -- Chips: neutral + gold -------------------------------------------- */
.jw-chip-neutral { background: var(--bg-tint); color: var(--text-3); }
.jw-chip-gold { background: var(--gold-fill); color: var(--gold-bright); border: 1px solid var(--gold-border); }

/* -- Dot plot ---------------------------------------------------------- */
.jw-plot { width: 100%; }
.jw-plot text { font-family: var(--font-mono); }
.jw-plot-legend { display: flex; flex-wrap: wrap; gap: 1.125rem; margin-top: 0.875rem; font-size: 0.71875rem; color: var(--text-3); align-items: center; }
.jw-plot-legend span { display: inline-flex; align-items: center; gap: 0.4375rem; }

/* -- Tables ------------------------------------------------------------ */
.jw-table { width: 100%; border-collapse: collapse; font-size: 0.8125rem; }
.jw-table th {
  font-family: var(--font-mono); font-size: 0.625rem; font-weight: 500; letter-spacing: 0.14em;
  text-transform: uppercase; color: var(--text-4); text-align: left; padding: 0.5rem 0.75rem;
  border-bottom: 1px solid var(--hair-2);
}
.jw-table td { padding: 0.5rem 0.75rem; border-bottom: 1px solid var(--hair); color: var(--text-2); vertical-align: middle; }
.jw-table tr:last-child td { border-bottom: none; }
.jw-table tbody tr { transition: background var(--dur-fast) var(--ease); }
.jw-table tbody tr:hover { background: var(--bg-tint); }
.jw-table .num { font-family: var(--font-mono); font-variant-numeric: tabular-nums; text-align: right; }

/* -- Forms ------------------------------------------------------------- */
.jw-field { display: flex; flex-direction: column; gap: 0.5rem; }
.jw-label { font-family: var(--font-mono); font-size: 0.65625rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-3); }
.jw-input, .jw-select, .jw-textarea {
  height: 2.375rem; padding: 0 0.75rem; border-radius: var(--r-input); background: var(--bg-deep);
  border: 1px solid var(--hair-2); color: var(--text); font-size: 0.875rem; width: 100%;
  transition: border-color var(--dur-fast) var(--ease), box-shadow var(--dur-fast) var(--ease);
}
.jw-textarea { height: auto; padding: 0.75rem 0.875rem; line-height: 1.55; resize: vertical; }
.jw-input::placeholder { color: var(--text-4); }
.jw-input:focus, .jw-select:focus, .jw-textarea:focus { outline: none; border-color: var(--gold-border); box-shadow: var(--ring); }
.jw-select { appearance: none; background-image: linear-gradient(45deg, transparent 50%, var(--text-3) 50%), linear-gradient(135deg, var(--text-3) 50%, transparent 50%); background-position: calc(100% - 18px) 19px, calc(100% - 13px) 19px; background-size: 5px 5px; background-repeat: no-repeat; }
.jw-toggle { position: relative; width: 2.5rem; height: 1.375rem; border-radius: 999px; background: var(--bg-tint); border: 1px solid var(--hair-2); transition: background var(--dur) var(--ease); flex-shrink: 0; display: inline-block; }
.jw-toggle::after { content: ""; position: absolute; top: 0.125rem; left: 0.125rem; width: 1rem; height: 1rem; border-radius: 999px; background: var(--text-3); transition: transform var(--dur) var(--ease), background var(--dur) var(--ease); }
.jw-toggle.is-on { background: var(--gold); border-color: var(--gold); }
.jw-toggle.is-on::after { transform: translateX(18px); background: var(--bg-deep); }
.jw-setting { display: flex; align-items: center; justify-content: space-between; gap: 1.5rem; padding: 1rem 0; border-bottom: 1px solid var(--hair); }
.jw-setting:last-child { border-bottom: none; }
.jw-setting-name { font-size: 0.875rem; font-weight: 500; color: var(--text); }
.jw-setting-sub { font-size: 0.75rem; color: var(--text-3); margin-top: 0.1875rem; }

/* -- Verdict + states -------------------------------------------------- */
.jw-verdict-name { font-family: var(--font-display); font-size: 1.6875rem; font-weight: var(--display-weight); color: var(--text); }
.jw-skel { border-radius: 6px; background: linear-gradient(90deg, var(--bg-3) 25%, var(--bg-tint) 50%, var(--bg-3) 75%); background-size: 200% 100%; animation: shimmer 1.6s linear infinite; }
.jw-loading { display: flex; flex-direction: column; align-items: center; gap: 1.125rem; padding: 4.5rem 0; color: var(--text-4); }
.jw-loading-mark { width: 2.75rem; height: 2.75rem; border-radius: 999px; border: 1px solid var(--gold-border); display: flex; align-items: center; justify-content: center; font-family: var(--font-display); font-size: 1.25rem; color: var(--gold); animation: dot-pulse 2s infinite; }
.jw-loading-word { font-family: var(--font-mono); font-size: 0.6875rem; letter-spacing: 0.3em; text-transform: uppercase; }
.jw-orbit g[stroke] { stroke: var(--text); }
.jw-orbit circle { fill: var(--text); }
.jw-phase { font-family: var(--font-editorial); font-style: italic; font-size: 0.8125rem; color: var(--gold-muted); min-height: 1.5em; }

/* -- Misc -------------------------------------------------------------- */
.jw-divider-v { width: 0.0625rem; align-self: stretch; background: var(--hair); }
.jw-muted { color: var(--text-3); }


/* ==========================================================================
   LAYOUT AXIS -- html[data-layout="side|spine|top|masthead|float|dock|sheet"]
   Written by app/theme.js (the ThemeBar select + the Layout group on
   app/theme-settings.html). "side" is the default and sets no attribute.

   These rules target the REAL app shell, i.e. what app/partials/sidebar.html
   actually renders inside every app/*.html page:

     .shell > .sidebar            <aside>, the injected partial
       .brand > .brand-logo + .brand-name
       .nav-section-label         Overview / Pipeline / Settings
       .nav-item > .nav-icon + .nav-label
       .nav-bottom > .sidebar-toggle-btn + .user-chip > .signout-link
     .shell > main.content

   HISTORY -- the first port of this axis shipped the design export's rules
   verbatim, and those targeted the export's shell: .jw-app / .jw-sidebar /
   .jw-brand / .jw-nav / .jw-nav-item / .jw-side-* / .jw-content. No shipped
   page has ever used those class names, so all seven variants were dead CSS:
   the select flipped data-layout on <html> and nothing moved. Those blocks
   are deleted -- what follows is the only implementation. Add a layout HERE,
   against these selectors, and add its option to BAR + GROUPS in theme.js.

   Three conventions worth knowing before editing:

   1. !important is load-bearing, not laziness. The "refinement" passes
      further up this file already ship `.sidebar { background/padding
      !important }`, `.nav-item { padding/font-size/color/gap !important }`,
      `.brand-name { ... !important }` and `.content { padding !important }`.
      A layout rule that does not shout cannot win against them.
   2. main.content used to carry an inline `style="max-width:880px"` on
      index / candidates / interviews (860px on scheduling), which outranked
      any normal stylesheet rule -- so the three layouts that need their own
      measure (sheet, masthead, top, all of which drop the 15rem rail and
      hand that space back to the page) had to shout to be heard. Those
      inline caps are gone: every page now takes its measure from
      --content-max / --content-wide. The !important here is kept because
      convention 1 still applies (it has to beat the "refinement" .content
      rule), and top / masthead now express their measure in the SAME tokens
      so widening the app column widens them too. Sheet is the exception on
      purpose: it is a sheet of paper on a desk, and a 1900px sheet is not
      one, so it keeps its own narrower measure.
   3. Everything is scoped to `@media screen and (min-width: 1025px)`.
      Below 1025px the mobile drawer (see the max-width:1024px block above)
      owns the shell -- the sidebar is an off-canvas panel behind a
      hamburger, where a masthead or a floating pill would be nonsense.
      Excluding print leaves the print stylesheet (which hides the sidebar
      outright) untouched.

   Geometry is in rem so it composes with the fluid root font-size in
   design-tokens.css. ASCII only.
   ========================================================================== */
@media screen and (min-width: 1025px) {

/* ============ SHARED: the five layouts that lay the rail out flat ========
   The nav DOM is flat -- section labels and nav items are siblings, there is
   no nav wrapper element -- so the horizontal row is built on .sidebar
   itself. Icons and section labels come off: ten nav items with both do not
   fit on one line at 1280, and a bar that scrolls sideways hides nav items,
   which is the same "present but unreachable" bug this axis started as.
   .shell drops to display:block; main.content is then a plain centred block,
   and (for top) the bar can position:sticky against the full shell height,
   which a grid item cannot do -- its grid area is only as tall as itself. */
html[data-layout="top"] .shell,
html[data-layout="masthead"] .shell,
html[data-layout="float"] .shell,
html[data-layout="dock"] .shell,
html[data-layout="sheet"] .shell { display: block; }

html[data-layout="top"] .shell > .sidebar,
html[data-layout="masthead"] .shell > .sidebar,
html[data-layout="float"] .shell > .sidebar,
html[data-layout="dock"] .shell > .sidebar,
html[data-layout="sheet"] .shell > .sidebar {
  position: static;
  width: auto;
  height: auto;
  flex-direction: row;
  align-items: center;
  gap: 0.125rem !important;
  overflow: visible;
  border-right: none !important;
}

html[data-layout="top"] .shell > .sidebar > .brand,
html[data-layout="masthead"] .shell > .sidebar > .brand,
html[data-layout="float"] .shell > .sidebar > .brand,
html[data-layout="dock"] .shell > .sidebar > .brand,
html[data-layout="sheet"] .shell > .sidebar > .brand {
  flex-shrink: 0;
  gap: 0.5rem !important;
  margin: 0 !important;
  padding: 0 0.75rem 0 0 !important;
  border-bottom: none !important;
}

html[data-layout="top"] .sidebar .brand-logo,
html[data-layout="float"] .sidebar .brand-logo,
html[data-layout="dock"] .sidebar .brand-logo,
html[data-layout="sheet"] .sidebar .brand-logo { width: 1.375rem !important; height: 1.375rem !important; }

/* One line, clipped: sidebar-tier.js swaps this for the workspace name, and
   "TWENTY HOLDINGS (DEMO)" over two lines would set the bar's height. */
html[data-layout="top"] .sidebar .brand-name,
html[data-layout="float"] .sidebar .brand-name,
html[data-layout="dock"] .sidebar .brand-name,
html[data-layout="sheet"] .sidebar .brand-name {
  font-size: 0.875rem !important;
  -webkit-line-clamp: 1 !important;
  line-clamp: 1 !important;
  max-width: 7rem;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

/* Top bar: the workspace name is the one piece of identity in the whole bar,
   so it should not be the thing that gets clipped. A full-width row has room
   for it -- the 7rem cap above exists for the float/dock PILLS, which do not.
   Kept nowrap + ellipsis as a backstop for an absurdly long workspace name,
   just with a budget that fits real ones ("HEALTHY TOGETHER" needs ~11rem). */
html[data-layout="top"] .sidebar .brand-name { max-width: 18rem !important; }

/* ...and push the nav to the right, so the brand sits alone on the left
   instead of the two colliding in the middle. The first nav item takes the
   slack; everything after it follows.

   Anchored off .brand rather than :first-of-type -- .brand is itself a div,
   so .nav-section-label:first-of-type matches IT, not the label, and the
   rule silently never applies. */
html[data-layout="top"] .sidebar > .brand + .nav-section-label + .nav-item {
  margin-left: auto !important;
}

html[data-layout="top"] .sidebar .nav-section-label,
html[data-layout="masthead"] .sidebar .nav-section-label,
html[data-layout="float"] .sidebar .nav-section-label,
html[data-layout="dock"] .sidebar .nav-section-label,
html[data-layout="sheet"] .sidebar .nav-section-label { display: none; }

/* The hidden label still separates its group: the next item takes the gap. */
html[data-layout="top"] .sidebar .nav-section-label + .nav-item,
html[data-layout="masthead"] .sidebar .nav-section-label + .nav-item,
html[data-layout="float"] .sidebar .nav-section-label + .nav-item,
html[data-layout="dock"] .sidebar .nav-section-label + .nav-item,
html[data-layout="sheet"] .sidebar .nav-section-label + .nav-item { margin-left: 0.5rem !important; }

html[data-layout="top"] .sidebar .nav-item,
html[data-layout="masthead"] .sidebar .nav-item,
html[data-layout="float"] .sidebar .nav-item,
html[data-layout="dock"] .sidebar .nav-item,
html[data-layout="sheet"] .sidebar .nav-item {
  margin: 0 !important;
  padding: 0.375rem 0.5rem !important;
  gap: 0 !important;
  font-size: 0.78125rem !important;
  white-space: nowrap;
  flex-shrink: 0;
}
html[data-layout="top"] .sidebar .nav-item .nav-icon,
html[data-layout="masthead"] .sidebar .nav-item .nav-icon,
html[data-layout="float"] .sidebar .nav-item .nav-icon,
html[data-layout="dock"] .sidebar .nav-item .nav-icon,
html[data-layout="sheet"] .sidebar .nav-item .nav-icon { display: none; }

/* The gold spine on the active item only reads as a left edge on a rail. */
html[data-layout="top"] .sidebar .nav-item.active::before,
html[data-layout="masthead"] .sidebar .nav-item.active::before,
html[data-layout="float"] .sidebar .nav-item.active::before,
html[data-layout="dock"] .sidebar .nav-item.active::before,
html[data-layout="sheet"] .sidebar .nav-item.active::before { display: none; }
html[data-layout="top"] .sidebar .nav-item.active,
html[data-layout="masthead"] .sidebar .nav-item.active,
html[data-layout="float"] .sidebar .nav-item.active,
html[data-layout="dock"] .sidebar .nav-item.active,
html[data-layout="sheet"] .sidebar .nav-item.active {
  background: var(--gold-fill) !important;
  color: var(--text) !important;
  box-shadow: none !important;
}

html[data-layout="top"] .sidebar .nav-bottom,
html[data-layout="masthead"] .sidebar .nav-bottom,
html[data-layout="float"] .sidebar .nav-bottom,
html[data-layout="dock"] .sidebar .nav-bottom,
html[data-layout="sheet"] .sidebar .nav-bottom {
  display: flex;
  flex-direction: row;
  align-items: center;
  margin: 0 0 0 auto !important;
  padding-top: 0 !important;
  border-top: none !important;
  flex-shrink: 0;
}
/* Collapsing a horizontal bar means nothing -- --sidebar-w is not in play
   and the labels ARE the bar -- so the toggle is hidden here. */
html[data-layout="top"] .sidebar .sidebar-toggle-btn,
html[data-layout="masthead"] .sidebar .sidebar-toggle-btn,
html[data-layout="float"] .sidebar .sidebar-toggle-btn,
html[data-layout="dock"] .sidebar .sidebar-toggle-btn,
html[data-layout="sheet"] .sidebar .sidebar-toggle-btn { display: none; }

html[data-layout="top"] .sidebar .user-chip,
html[data-layout="masthead"] .sidebar .user-chip,
html[data-layout="float"] .sidebar .user-chip,
html[data-layout="dock"] .sidebar .user-chip,
html[data-layout="sheet"] .sidebar .user-chip {
  padding: 0 0.25rem !important;
  border-top: none !important;
}
/* #signout-link (an ID rule, further up) puts a hairline above the link and
   pads it for the vertical rail -- neither reads in a horizontal bar, and an
   ID beats these selectors, hence !important. */
html[data-layout="top"] .sidebar .signout-link,
html[data-layout="masthead"] .sidebar .signout-link,
html[data-layout="float"] .sidebar .signout-link,
html[data-layout="dock"] .sidebar .signout-link,
html[data-layout="sheet"] .sidebar .signout-link {
  margin: 0 !important;
  padding: 0.25rem 0.5rem !important;
  border-top: none !important;
  white-space: nowrap;
}

/* ...and because that toggle is gone, a shell left in the collapsed state
   must not keep hiding the labels: that would empty the bar out with no
   control left to bring them back. */
html[data-layout="top"] .shell.sidebar-collapsed .nav-label,
html[data-layout="masthead"] .shell.sidebar-collapsed .nav-label,
html[data-layout="float"] .shell.sidebar-collapsed .nav-label,
html[data-layout="dock"] .shell.sidebar-collapsed .nav-label,
html[data-layout="sheet"] .shell.sidebar-collapsed .nav-label { display: inline; }
html[data-layout="top"] .shell.sidebar-collapsed .signout-link,
html[data-layout="masthead"] .shell.sidebar-collapsed .signout-link,
html[data-layout="float"] .shell.sidebar-collapsed .signout-link,
html[data-layout="dock"] .shell.sidebar-collapsed .signout-link,
html[data-layout="sheet"] .shell.sidebar-collapsed .signout-link { display: block; }
/* Same for the rail layout: its sign-out is the only control left down there. */
html[data-layout="spine"] .shell.sidebar-collapsed .signout-link { display: block; }
html[data-layout="spine"] .shell.sidebar-collapsed .brand-name { display: block !important; }


/* ============ LAYOUT: BOOK SPINE ============
   A 4rem rail with the wordmark running up it like the spine of a book on a
   shelf. Nav is icon-only: rotating ten labels needs ~850px of rail, so the
   last few would sit below the fold of an 800px-tall window -- present but
   unreachable. The labels stay in the accessibility tree. */
/* !important because the collapse toggle in app/sidebar-tier.js writes
   `shell.style.gridTemplateColumns = "52px 1fr" / "220px 1fr"` inline (it
   drives the width directly so the transition fires). Without it, one click
   of the toggle would stretch this rail back out to 220px. The rail IS the
   collapsed state here, so the toggle itself is hidden below. */
html[data-layout="spine"] .shell { grid-template-columns: 4rem minmax(0, 1fr) !important; }
html[data-layout="spine"] .shell > .sidebar {
  align-items: center;
  padding: 1.25rem 0 1rem !important;
  overflow-x: hidden;
  border-right: 1px solid var(--hair-strong) !important;
}
html[data-layout="spine"] .shell > .sidebar > .brand {
  flex-direction: column;
  gap: 0.625rem !important;
  width: 100%;
  justify-content: center;
  padding: 0 0 0.875rem !important;
  margin-bottom: 0.375rem !important;
}
html[data-layout="spine"] .sidebar .brand-logo { width: 1.75rem !important; height: 1.75rem !important; }
html[data-layout="spine"] .sidebar .brand-name {
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  display: block !important;
  -webkit-line-clamp: none !important;
  line-clamp: none !important;
  max-height: 9rem;
  overflow: hidden;
  white-space: nowrap;
  font-size: 0.5625rem !important;
  letter-spacing: 0.24em !important;
}
html[data-layout="spine"] .sidebar .nav-section-label { display: none; }
html[data-layout="spine"] .sidebar .nav-section-label + .nav-item { margin-top: 0.625rem !important; }
html[data-layout="spine"] .sidebar .nav-item {
  justify-content: center;
  width: 2.5rem;
  margin: 0.125rem auto !important;
  padding: 0.4375rem 0 !important;
  gap: 0 !important;
}
html[data-layout="spine"] .sidebar .nav-item .nav-icon { width: 1.0625rem; height: 1.0625rem; }
html[data-layout="spine"] .sidebar .nav-item.active::before { display: none; }
html[data-layout="spine"] .sidebar .nav-item.active { box-shadow: inset 2px 0 0 var(--gold) !important; }
/* Visually hidden, not display:none -- the link keeps its accessible name. */
html[data-layout="spine"] .sidebar .nav-label {
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; border: 0; overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}
html[data-layout="spine"] .sidebar .nav-bottom {
  display: flex;
  flex-direction: column;
  align-items: center;
  width: 100%;
  padding-top: 0.5rem !important;
}
/* A 4rem rail cannot collapse any further, and the toggle cannot widen it
   (see the grid-template-columns note above), so it would be a control that
   does nothing. Sign out stays. */
html[data-layout="spine"] .sidebar .sidebar-toggle-btn { display: none; }
html[data-layout="spine"] .sidebar .user-chip {
  justify-content: center;
  width: 100%;
  padding: 0.5rem 0 !important;
}
html[data-layout="spine"] .sidebar .signout-link {
  /* reads bottom-to-top, like the wordmark */
  writing-mode: vertical-rl;
  transform: rotate(180deg);
  margin: 0 !important;
  padding: 0.375rem 0 !important;
  border-top: none !important;
  white-space: nowrap;
}


/* ============ LAYOUT: TOP BAR ============
   Full-bleed bar, sticky to the top of the shell, page scrolls under it. */
html[data-layout="top"] .shell > .sidebar {
  position: sticky;
  top: 0;
  z-index: 40;
  flex-wrap: wrap;
  padding: 0.5rem 1.5rem !important;
  background: var(--bg-deep) !important;
  border-bottom: 1px solid var(--hair-strong);
}
html[data-layout="top"] .shell > main.content {
  max-width: min(var(--content-max), 100%) !important;   /* note 2 */
  padding-top: 2rem !important;
}
html[data-layout="top"] .shell > main.content.content-wide { max-width: min(var(--content-wide), 100%) !important; }


/* ============ LAYOUT: MASTHEAD ============
   Newspaper: centred wordmark on its own line (the brand takes the whole
   first flex line), rule, then the nav centred underneath. Scrolls away. */
html[data-layout="masthead"] .shell > .sidebar {
  position: relative;
  flex-wrap: wrap;
  justify-content: center;
  padding: 1.75rem 1.5rem 0 !important;
  background: var(--bg) !important;
  border-bottom: 2px solid var(--hair-strong);
}
html[data-layout="masthead"] .shell > .sidebar > .brand {
  flex: 0 0 100%;
  justify-content: center;
  padding: 0 0 1rem !important;
  margin: 0 0 0.25rem !important;
  border-bottom: 1px solid var(--hair) !important;
}
html[data-layout="masthead"] .sidebar .brand-logo { width: 2rem !important; height: 2rem !important; }
html[data-layout="masthead"] .sidebar .brand-name {
  font-size: 0.9375rem !important;
  letter-spacing: 0.34em !important;
}
html[data-layout="masthead"] .sidebar .nav-item {
  border-radius: 0 !important;
  padding: 0.625rem 0.6875rem !important;
  font-size: 0.8125rem !important;
}
html[data-layout="masthead"] .sidebar .nav-item.active {
  background: none !important;
  box-shadow: inset 0 -2px 0 var(--gold) !important;
}
html[data-layout="masthead"] .sidebar .nav-bottom {
  position: absolute;
  top: 1.5rem;
  right: 1.5rem;
  margin: 0 !important;
}
html[data-layout="masthead"] .shell > main.content {
  max-width: min(var(--content-max), 100%) !important;   /* note 2 */
  padding-top: 2.25rem !important;
}
html[data-layout="masthead"] .shell > main.content.content-wide { max-width: min(var(--content-wide), 100%) !important; }


/* ============ LAYOUT: FLOATING PILL ============
   Fixed pill, top centre, floating over the page. */
html[data-layout="float"] .shell > .sidebar {
  position: fixed;
  top: 0.75rem;
  left: 50%;
  transform: translateX(-50%);
  z-index: 60;
  max-width: calc(100vw - 2rem);
  flex-wrap: nowrap;
  gap: 0;
  padding: 0.25rem 0.5rem !important;
  background: var(--bg-2) !important;
  border: 1px solid var(--hair-2) !important;
  border-radius: 999px;
  box-shadow: var(--shadow-lg);
}
html[data-layout="float"] .sidebar .nav-item {
  padding: 0.3125rem 0.5rem !important;
  font-size: 0.75rem !important;
  border-radius: 999px !important;
}
html[data-layout="float"] .sidebar .signout-link { font-size: 0.6875rem; }
html[data-layout="float"] .shell > main.content { padding-top: 4.5rem !important; }


/* ============ LAYOUT: BOTTOM DOCK ============
   The same pill parked along the bottom edge -- which is also where the
   cookie banner (app/api.js, full-width strip, z-index 8999) and the
   ThemeBar (app/theme.js, bottom right) live. Both publish their height on
   <html> as --jw-bottom-inset / --jw-themebar-h, so the dock stacks above
   whichever of them is on screen instead of hiding underneath it. */
html[data-layout="dock"] .shell > .sidebar {
  position: fixed;
  top: auto;
  bottom: calc(0.75rem + var(--jw-bottom-inset, 0px) + var(--jw-themebar-h, 0px));
  left: 50%;
  transform: translateX(-50%);
  z-index: 60;
  max-width: calc(100vw - 2rem);
  flex-wrap: nowrap;
  gap: 0;
  padding: 0.25rem 0.5rem !important;
  background: var(--bg-2) !important;
  border: 1px solid var(--hair-2) !important;
  border-radius: 999px;
  box-shadow: var(--shadow-lg);
}
html[data-layout="dock"] .sidebar .nav-item {
  padding: 0.3125rem 0.5rem !important;
  font-size: 0.75rem !important;
  border-radius: 999px !important;
}
html[data-layout="dock"] .sidebar .signout-link { font-size: 0.6875rem; }
html[data-layout="dock"] .shell > main.content { padding-bottom: 9rem !important; }


/* ============ LAYOUT: PAPER SHEET ============
   The page becomes a sheet of paper laid on the desk: a chrome-less nav row,
   then the content as a bordered, shadowed card on the deep background. */
html[data-layout="sheet"] body {
  background: var(--bg-deep) !important;
}
/* Full-bleed toolbar rather than one capped to the sheet's measure: at 1280
   the ten labels plus the wordmark plus Sign out do not fit inside 68rem and
   Sign out drops to a second line. */
html[data-layout="sheet"] .shell > .sidebar {
  flex-wrap: wrap;
  padding: 1rem 1.5rem 0 !important;
  background: transparent !important;
  border: none !important;
}
html[data-layout="sheet"] .shell > main.content {
  max-width: min(68rem, 100%) !important;   /* note 2 */
  margin: 0.75rem auto 3.5rem;
  background: var(--bg);
  border: 1px solid var(--hair-2);
  border-radius: var(--r-lg);
  box-shadow: var(--shadow-lg);
  padding: 2.5rem 3rem 4rem !important;
}

}
