/* Data Kit Security Assessment — UI v2 */

:root {
  --color-primary:    #0070d2;
  --color-primary-dk: #005fb2;
  --color-bg:         #f4f6f9;
  --color-surface:    #ffffff;
  --color-border:     #dde2e8;
  --color-text:       #1a2332;
  --color-muted:      #5a6a7e;
  --color-pass:       #2e7d32;
  --color-pass-bg:    #e8f5e9;
  --color-fail:       #c62828;
  --color-fail-bg:    #ffebee;
  --color-review:     #e65100;
  --color-review-bg:  #fff3e0;
  --color-info:       #1565c0;
  --color-info-bg:    #e3f2fd;
  --radius:           8px;
  --shadow-sm:        0 1px 3px rgba(0,0,0,.08);
  --shadow-md:        0 4px 12px rgba(0,0,0,.10);
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

body {
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
  background: var(--color-bg);
  color: var(--color-text);
  font-size: 14px;
  line-height: 1.5;
}

/* ── Nav ──────────────────────────────────────────────────────────────────── */
.navbar {
  background: var(--color-primary);
  padding: 0 24px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 52px;
  gap: 24px;
  box-shadow: 0 2px 6px rgba(0,0,0,.15);
}
.nav-brand a {
  color: #fff;
  font-weight: 700;
  font-size: 15px;
  text-decoration: none;
  display: flex;
  align-items: center;
  gap: 8px;
}
.nav-links { display: flex; align-items: center; gap: 20px; }
.nav-links a { color: rgba(255,255,255,.85); text-decoration: none; font-size: 13px; }
.nav-links a:hover { color: #fff; }
.nav-user { color: rgba(255,255,255,.7); font-size: 12px; }

/* ── Page shell ───────────────────────────────────────────────────────────── */
.container { max-width: 1440px; margin: 0 auto; padding: 28px 32px; }

.page-header {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  margin-bottom: 24px;
  gap: 16px;
}
.page-header h1 { font-size: 22px; font-weight: 700; }
.page-header .subtitle { color: var(--color-muted); font-size: 13px; margin-top: 2px; }

/* ── Cards ────────────────────────────────────────────────────────────────── */
.card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: 20px 24px;
  box-shadow: var(--shadow-sm);
  margin-bottom: 20px;
}
.card-title {
  font-size: 15px;
  font-weight: 600;
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
}

/* ── Stats bar ────────────────────────────────────────────────────────────── */
.stats-bar {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  gap: 14px;
  margin-bottom: 24px;
}
.stat-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: 18px 16px;
  text-align: center;
  box-shadow: var(--shadow-sm);
  border-top: 3px solid var(--color-border);
}
.stat-card.stat-pass  { border-top-color: var(--color-pass); }
.stat-card.stat-fail  { border-top-color: var(--color-fail); }
.stat-card.stat-review { border-top-color: var(--color-review); }
.stat-number { font-size: 28px; font-weight: 700; line-height: 1; margin-bottom: 4px; }
.stat-label  { font-size: 11px; color: var(--color-muted); font-weight: 500; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ── Tables ───────────────────────────────────────────────────────────────── */
.table { width: 100%; border-collapse: collapse; }
.table th {
  text-align: left;
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--color-muted);
  border-bottom: 1px solid var(--color-border);
  padding: 8px 12px;
}
.table td {
  padding: 12px 12px;
  border-bottom: 1px solid #f0f2f5;
  vertical-align: middle;
}
.table tbody tr:last-child td { border-bottom: none; }
.table tbody tr:hover { background: #f8fafc; }
.table-compact td { padding: 8px 12px; }

.row-fail        { background: #fff8f8; }
.row-needs-review { background: #fffbf5; }
.row-partner-action { background: #FFFBEB; }

/* ── Badges ───────────────────────────────────────────────────────────────── */
.badge {
  display: inline-flex;
  align-items: center;
  padding: 2px 9px;
  border-radius: 12px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .02em;
  text-transform: uppercase;
  white-space: nowrap;
}
.badge-pass, .badge-completed    { background: var(--color-pass-bg);   color: var(--color-pass); }
.badge-fail                      { background: var(--color-fail-bg);   color: var(--color-fail); }
.badge-needs-review, .badge-needs_review { background: var(--color-review-bg); color: var(--color-review); }
.badge-partner-action, .badge-partner_action { background: #FEF3C7; color: #B45309; }
.badge-pending, .badge-queued    { background: #f3f4f6; color: #6b7280; }
.badge-installing, .badge-uninstalling, .badge-scanning, .badge-running { background: #eff6ff; color: #2563eb; }
.badge-error                     { background: var(--color-fail-bg);   color: var(--color-fail); }
.badge-in_review, .badge-in-review, .badge-resubmitted { background: #eff6ff; color: #1d4ed8; }
.badge-approved                  { background: #dcfce7; color: #166534; }
.badge-rejected                  { background: #fee2e2; color: #991b1b; }
.badge-lg { font-size: 13px; padding: 4px 14px; }

/* Severity pills */
.severity { display: inline-block; padding: 1px 7px; border-radius: 10px; font-size: 11px; font-weight: 600; }
.severity-critical { background: #fce4ec; color: #880e4f; }
.severity-high     { background: var(--color-fail-bg); color: var(--color-fail); }
.severity-medium   { background: var(--color-review-bg); color: var(--color-review); }
.severity-low      { background: var(--color-pass-bg); color: var(--color-pass); }
.severity-info     { background: var(--color-info-bg); color: var(--color-info); }

/* ── Buttons ──────────────────────────────────────────────────────────────── */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 7px 16px;
  border-radius: 6px;
  font-size: 13px;
  font-weight: 500;
  cursor: pointer;
  border: 1px solid var(--color-border);
  background: var(--color-surface);
  color: var(--color-text);
  text-decoration: none;
  transition: background .12s, border-color .12s;
  white-space: nowrap;
}
.btn:hover { background: #f4f6f9; border-color: #bcc5d0; }
.btn-primary { background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
.btn-primary:hover { background: var(--color-primary-dk); border-color: var(--color-primary-dk); }
.btn-sm { padding: 4px 10px; font-size: 12px; }
.btn-secondary { background: #f4f6f9; }
.btn-danger { background: transparent; color: #9ca3af; border: 1px solid transparent; padding: 4px 8px; }
.btn-danger:hover { background: #fee2e2; color: #b91c1c; border-color: #fca5a5; }
.btn-muted  { background: transparent; color: #9ca3af; border: 1px solid #e5e7eb; }
.btn-muted:hover  { background: #f3f4f6; color: #374151; border-color: #d1d5db; }
.btn:disabled { opacity: .45; cursor: not-allowed; }

/* ── Forms ────────────────────────────────────────────────────────────────── */
.form-group { margin-bottom: 16px; }
.form-group label { display: block; font-size: 13px; font-weight: 500; margin-bottom: 5px; }
.form-control {
  width: 100%;
  padding: 8px 12px;
  border: 1px solid var(--color-border);
  border-radius: 6px;
  font-size: 14px;
  background: var(--color-surface);
  color: var(--color-text);
  transition: border-color .12s, box-shadow .12s;
}
.form-control:focus {
  outline: none;
  border-color: var(--color-primary);
  box-shadow: 0 0 0 3px rgba(0,112,210,.12);
}
.form-hint { font-size: 12px; color: var(--color-muted); margin-top: 4px; display: block; }
.form-hint-inline { font-size: 12px; color: var(--color-muted); margin-top: 4px; display: block; }
.required { color: var(--color-fail); }

/* ── Modal ────────────────────────────────────────────────────────────────── */
.modal-backdrop {
  display: none;
  position: fixed; inset: 0;
  background: rgba(0,0,0,.45);
  z-index: 100;
  align-items: center;
  justify-content: center;
}
.modal {
  background: var(--color-surface);
  border-radius: var(--radius);
  padding: 28px;
  width: 520px;
  max-width: calc(100vw - 32px);
  box-shadow: var(--shadow-md);
}
.modal h2 { font-size: 18px; font-weight: 600; margin-bottom: 20px; }
.modal-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 20px; }

/* ── Alert / flash ────────────────────────────────────────────────────────── */
.alert {
  padding: 12px 16px;
  border-radius: 6px;
  margin-bottom: 16px;
  font-size: 13px;
  font-weight: 500;
  border: 1px solid transparent;
  box-shadow: 0 1px 3px rgba(0,0,0,0.07);
}
.alert-success { background: var(--color-pass-bg); border-color: #a5d6a7; color: var(--color-pass); }
.alert-error   { background: var(--color-fail-bg); border-color: #ef9a9a; color: var(--color-fail); }
.alert-info    { background: var(--color-info-bg); border-color: #90caf9; color: var(--color-info); }
.alert-dismissible { display: flex; justify-content: space-between; align-items: center; }
.alert-close { background: none; border: none; cursor: pointer; font-size: 1rem; opacity: 0.5; padding: 0 4px; }
.alert-close:hover { opacity: 1; }

/* ── Assessment detail ────────────────────────────────────────────────────── */
.assessment-meta.card .meta-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 12px 24px;
}
.summary-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 14px;
  margin-bottom: 20px;
}
.summary-card {
  text-align: center;
  padding: 20px;
  border-radius: var(--radius);
  border: 1px solid var(--color-border);
}
.summary-pass   { background: var(--color-pass-bg);   border-color: #a5d6a7; }
.summary-fail   { background: var(--color-fail-bg);   border-color: #ef9a9a; }
.summary-review { background: var(--color-review-bg); border-color: #ffcc80; }
.summary-partner-action { background: #FFFBEB; border-color: #FCD34D; }
.summary-count { font-size: 36px; font-weight: 700; line-height: 1; }
.summary-label { font-size: 12px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; margin-top: 4px; color: var(--color-muted); }

.category-card { margin-bottom: 16px; }
.category-title { font-size: 13px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--color-muted); margin-bottom: 12px; }

.check-details {
  background: #f8fafc;
  border-left: 3px solid var(--color-primary);
  padding: 10px 14px;
  border-radius: 0 6px 6px 0;
  font-size: 13px;
}
.code-block {
  background: #1a2332;
  color: #e2e8f0;
  padding: 12px;
  border-radius: 6px;
  font-size: 12px;
  overflow-x: auto;
  margin-top: 8px;
  white-space: pre-wrap;
  word-break: break-all;
}

/* ── Connected org bar ────────────────────────────────────────────────────── */
.org-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: 12px 20px;
  margin-bottom: 20px;
  box-shadow: var(--shadow-sm);
}
.org-bar-label { font-size: 13px; color: var(--color-muted); font-weight: 500; display: flex; align-items: center; gap: 8px; }
.org-bar-right { display: flex; align-items: center; gap: 12px; }
.org-connected { font-size: 12px; font-weight: 600; color: var(--color-pass); background: var(--color-pass-bg); padding: 4px 12px; border-radius: 12px; text-transform: uppercase; letter-spacing: .04em; }
.org-disconnected { font-size: 12px; font-weight: 600; color: var(--color-fail); background: var(--color-fail-bg); padding: 4px 12px; border-radius: 12px; text-transform: uppercase; letter-spacing: .04em; }

/* ── Package name cell ───────────────────────────────────────────────────── */
.pkg-name { font-weight: 600; font-size: 14px; }
.pkg-ns   { font-size: 11px; color: var(--color-muted); margin-top: 1px; }
.partner-name { font-size: 13px; color: var(--color-muted); }

/* Data Kit type badges */
.badge-type-clean-room-use-case { background: #e8f0fe; color: #1a56db; }
.badge-type-identity-boost      { background: #fce7f3; color: #9d174d; }
.badge-type-                    { background: #f3f4f6; color: #6b7280; }

/* ── Login page ──────────────────────────────────────────────────────────── */
.login-wrap{display:flex;align-items:center;justify-content:center;min-height:calc(100vh - 52px);background:var(--color-bg)}
.login-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:48px 40px;text-align:center;max-width:420px;width:100%;box-shadow:var(--shadow-md)}
.login-icon{font-size:48px;margin-bottom:16px}
.login-card h1{font-size:20px;font-weight:700;margin:0 0 6px}
.login-card .subtitle{color:var(--color-muted);font-size:13px;margin-bottom:28px}
.login-btn{display:inline-flex;align-items:center;gap:10px;padding:12px 28px;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;border:none;background:var(--color-primary);color:#fff;text-decoration:none;transition:background .15s}
.login-btn:hover{background:var(--color-primary-dk)}
.login-btn svg{width:20px;height:20px;flex-shrink:0;display:block}
.login-footer{margin-top:24px;font-size:11px;color:var(--color-muted)}
.login-banner{background:#fffde7;border:1px solid #fff9c4;border-radius:8px;padding:10px 16px;font-size:11px;color:#5d4037;margin-bottom:20px;text-align:left;line-height:1.5}
.login-error{background:var(--color-fail-bg);border:1px solid #ef9a9a;color:var(--color-fail);border-radius:8px;padding:10px 16px;font-size:13px;margin-bottom:20px}

/* Utility */
.hidden { display: none !important; }

/* ── Buttons extra ───────────────────────────────────────────────────────── */
.btn-lg { padding: 10px 22px; font-size: 14px; font-weight: 600; }

/* ── Dashboard ────────────────────────────────────────────────────────────── */
.dash-header { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 20px; gap: 16px; }
.dash-title  { font-size: 22px; font-weight: 700; margin: 0; }
.dash-subtitle { color: var(--color-muted); font-size: 13px; margin-top: 3px; }

/* Stats strip */
.stats-strip {
  display: flex;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  overflow: hidden;
  margin-bottom: 16px;
  box-shadow: var(--shadow-sm);
}
.ss-item {
  flex: 1;
  padding: 14px 12px;
  text-align: center;
  border-right: 1px solid var(--color-border);
  min-width: 0;
}
.ss-item:last-child { border-right: none; }
.ss-num { font-size: 22px; font-weight: 700; line-height: 1; color: var(--color-text); }
.ss-label { font-size: 10px; text-transform: uppercase; letter-spacing: .06em; color: var(--color-muted); margin-top: 4px; font-weight: 600; }
.ss-review .ss-num  { color: #dc2626; }
.ss-partner .ss-num { color: #D97706; }
.ss-approved .ss-num { color: #16a34a; }
.ss-rejected .ss-num { color: #991b1b; }
.ss-analytics { display: flex; align-items: center; justify-content: center; }
.ss-analytics-link { font-size: 12px; font-weight: 600; color: var(--color-primary); text-decoration: none; white-space: nowrap; }
.ss-analytics-link:hover { text-decoration: underline; }

/* Reviewer queue banner */
.reviewer-banner { display: flex; align-items: center; gap: 14px; background: #fef2f2; border: 1px solid #fecaca; border-left: 4px solid #dc2626; border-radius: var(--radius); padding: 14px 20px; margin-bottom: 16px; }
.rb-icon    { font-size: 20px; flex-shrink: 0; }
.rb-content { flex: 1; }
.rb-content strong { font-size: 14px; color: #991b1b; display: block; }
.rb-sub { font-size: 12px; color: #b91c1c; margin-top: 2px; display: block; }

/* Status filter tabs */
.status-tabs { display: flex; gap: 6px; margin-bottom: 16px; flex-wrap: wrap; }
.status-tab {
  padding: 6px 16px;
  border-radius: 20px;
  font-size: 12px;
  font-weight: 600;
  cursor: pointer;
  border: 1.5px solid var(--color-border);
  background: var(--color-surface);
  color: var(--color-muted);
  transition: all .12s;
  user-select: none;
  white-space: nowrap;
}
.status-tab:hover { border-color: #9ca3af; color: var(--color-text); }
.status-tab.active { background: var(--color-primary); border-color: var(--color-primary); color: #fff; box-shadow: 0 2px 6px rgba(0,112,210,.2); }
.status-tab.active .st-count { color: #fff; }
.st-count  { font-weight: 800; margin-right: 3px; }
.st-review  .st-count { color: #dc2626; }
.st-partner .st-count { color: #D97706; }
.st-approved .st-count { color: #16a34a; }
.st-rejected .st-count { color: #991b1b; }

/* Filter bar */
.filter-bar {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  padding: 12px 16px;
  margin-bottom: 16px;
  box-shadow: var(--shadow-sm);
}
.filter-row { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.search-wrap { flex: 1; min-width: 200px; position: relative; }
.search-wrap input {
  width: 100%;
  padding: 7px 12px 7px 34px;
  border: 1px solid var(--color-border);
  border-radius: 6px;
  font-size: 13px;
  background: var(--color-bg);
  color: var(--color-text);
  transition: border-color .12s, box-shadow .12s;
}
.search-wrap input:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(0,112,210,.1); background: #fff; }
.search-icon {
  position: absolute;
  left: 10px;
  top: 50%;
  transform: translateY(-50%);
  width: 15px;
  height: 15px;
  color: var(--color-muted);
  pointer-events: none;
}
.filter-row select {
  padding: 7px 10px;
  border: 1px solid var(--color-border);
  border-radius: 6px;
  font-size: 13px;
  background: var(--color-bg);
  color: var(--color-text);
  cursor: pointer;
  min-width: 120px;
}
.filter-row select:focus { outline: none; border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(0,112,210,.1); }
.date-range { display: flex; align-items: center; gap: 4px; }
.date-range input[type="date"] {
  padding: 6px 8px;
  border: 1px solid var(--color-border);
  border-radius: 6px;
  font-size: 12px;
  background: var(--color-bg);
  color: var(--color-text);
  width: 130px;
}
.date-range input[type="date"]:focus { outline: none; border-color: var(--color-primary); }
.date-sep { font-size: 12px; color: var(--color-muted); padding: 0 2px; }
.filter-clear { font-size: 12px; color: var(--color-primary); cursor: pointer; text-decoration: underline; white-space: nowrap; padding: 7px 4px; }
.filter-clear:hover { color: var(--color-primary-dk); }
.filter-count { font-size: 12px; color: var(--color-muted); margin-left: auto; white-space: nowrap; padding: 7px 0; font-weight: 500; }

/* Assessment table */
.assess-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius); box-shadow: var(--shadow-sm); overflow: hidden; }
.assess-table { width: 100%; border-collapse: collapse; }
.assess-table th {
  text-align: left;
  font-size: 11px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--color-muted);
  border-bottom: 1px solid var(--color-border);
  padding: 10px 14px;
  background: #f8fafc;
  cursor: pointer;
  user-select: none;
  white-space: nowrap;
}
.assess-table th:hover { color: var(--color-text); }
.assess-table th .sort-arrow { font-size: 9px; margin-left: 3px; opacity: .35; }
.assess-table th.col-actions { cursor: default; }
.assess-table td { padding: 13px 14px; border-bottom: 1px solid #f3f4f6; vertical-align: middle; font-size: 13px; }
.assess-table tbody tr:last-child td { border-bottom: none; }
.assess-table tbody tr:hover { background: #fafbfc; }
.assess-table tbody tr.row-active       { background: #eff6ff; border-left: 3px solid #2563eb; }
.assess-table tbody tr.row-needs-review { background: #fef2f2; border-left: 3px solid #dc2626; }
.assess-table tbody tr.row-partner-waiting { background: #fffbeb; border-left: 3px solid #D97706; }
.assess-table tbody tr.row-archived { opacity: 0.45; }
.col-date   { color: var(--color-muted); white-space: nowrap; font-size: 12px; }
.col-actions { width: 1%; white-space: nowrap; min-width: 320px; }
.actions-cell { display: flex; gap: 5px; align-items: center; flex-wrap: nowrap; }
.delete-form  { display: contents; }
.archive-form { display: contents; }
.partner-dba { font-size: 11px; color: var(--color-muted); margin-top: 2px; }

/* Status pulse animation */
.status-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-right: 6px; }
.status-dot-active  { background: #2563eb; animation: pulse 1.5s infinite; }
.status-dot-completed { background: var(--color-pass); }
.status-dot-error   { background: var(--color-fail); }
.status-dot-pending { background: #d1d5db; }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .4; } }

/* No-results state */
.no-results { text-align: center; padding: 48px 24px; color: var(--color-muted); }
.no-results-icon { font-size: 36px; margin-bottom: 10px; }
.no-results p { font-size: 13px; margin: 0; }

@media(max-width:900px) {
  .stats-strip { flex-wrap: wrap; }
  .ss-item { min-width: 80px; }
  .filter-row { flex-direction: column; align-items: stretch; }
  .search-wrap { min-width: 100%; }
  .filter-count { margin-left: 0; }
  .date-range { flex-wrap: wrap; }
}

/* ── Empty state ──────────────────────────────────────────────────────────── */
.empty-state {
  text-align: center;
  padding: 48px 24px;
  color: var(--color-muted);
}
.empty-state-icon { font-size: 40px; margin-bottom: 12px; }
.empty-state p { font-size: 14px; margin-bottom: 16px; }

/* ── Misc ─────────────────────────────────────────────────────────────────── */
code { background: #f0f2f5; padding: 1px 5px; border-radius: 4px; font-size: 12px; font-family: ui-monospace, monospace; }
.text-muted { color: var(--color-muted); }
hr { border: none; border-top: 1px solid var(--color-border); margin: 20px 0; }

/* ── Assessment nav pill buttons ──────────────────────────────────────────── */
.assessment-nav {
  display: flex;
  gap: 8px;
  margin-bottom: 1.5rem;
  flex-wrap: wrap;
}
.assessment-nav__tab {
  display: inline-block;
  padding: 8px 20px;
  font-size: 0.875rem;
  font-weight: 500;
  color: #374151;
  text-decoration: none;
  border-radius: 9999px;
  border: 1.5px solid #d1d5db;
  background: #fff;
  box-shadow: 0 1px 2px rgba(0,0,0,0.05);
  transition: all 0.15s;
  white-space: nowrap;
  cursor: pointer;
}
.assessment-nav__tab:hover {
  border-color: var(--color-primary);
  color: var(--color-primary);
  background: #eff6ff;
  box-shadow: 0 1px 4px rgba(0,112,210,0.12);
}
.assessment-nav__tab--active {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: #fff;
  font-weight: 600;
  box-shadow: 0 2px 6px rgba(0,112,210,0.25);
}
.assessment-nav__tab--active:hover {
  background: #005fb2;
  border-color: #005fb2;
  color: #fff;
}

/* ── Analytics ────────────────────────────────────────────────────────────── */
.analytics-wrap { max-width: 1440px; margin: 0 auto; }
.analytics-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 20px; }
.analytics-header h1 { font-size: 22px; font-weight: 700; margin: 0; }

/* Timeframe banner */
.tf-banner { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius); padding: 12px 18px; margin-bottom: 20px; display: flex; align-items: center; gap: 12px; box-shadow: var(--shadow-sm); flex-wrap: wrap; }
.tf-banner-label { font-size: 12px; font-weight: 600; color: var(--color-muted); text-transform: uppercase; letter-spacing: .04em; white-space: nowrap; }
.timeframe-picker { display: flex; gap: 4px; flex-wrap: wrap; }
.tf-btn { padding: 5px 14px; border-radius: 20px; font-size: 12px; font-weight: 600; color: var(--color-muted); text-decoration: none; background: var(--color-surface); border: 1px solid var(--color-border); transition: all .12s; white-space: nowrap; }
.tf-btn:hover { background: #f3f4f6; color: var(--color-text); }
.tf-btn.tf-active { background: var(--color-primary); border-color: var(--color-primary); color: #fff; }
.tf-custom-form { display: flex; align-items: center; gap: 6px; margin-left: 8px; flex-wrap: wrap; }
.tf-custom-form input[type="date"] { padding: 4px 8px; border: 1px solid var(--color-border); border-radius: 6px; font-size: 12px; background: var(--color-bg); color: var(--color-text); }
.tf-sep { font-size: 12px; color: var(--color-muted); }
.tf-clear { font-size: 11px; color: var(--color-muted); text-decoration: underline; cursor: pointer; }
.tf-showing { font-size: 12px; color: var(--color-muted); margin-left: auto; }
.tf-showing strong { color: var(--color-text); }

/* KPI strip */
.kpi-strip { display: grid; grid-template-columns: repeat(6, 1fr); gap: 12px; margin-bottom: 24px; }
.kpi-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius); padding: 16px; text-align: center; border-top: 3px solid var(--color-border); box-shadow: var(--shadow-sm); }
.kpi-card.kpi-pass      { border-top-color: var(--color-pass); }
.kpi-card.kpi-fail      { border-top-color: var(--color-fail); }
.kpi-card.kpi-review    { border-top-color: var(--color-review); }
.kpi-card.kpi-partner   { border-top-color: #D97706; }
.kpi-card.kpi-approved  { border-top-color: #16a34a; }
.kpi-card.kpi-total     { border-top-color: var(--color-primary); }
.kpi-num { font-size: 28px; font-weight: 800; line-height: 1; color: var(--color-text); }
.kpi-card.kpi-pass .kpi-num     { color: var(--color-pass); }
.kpi-card.kpi-fail .kpi-num     { color: var(--color-fail); }
.kpi-card.kpi-review .kpi-num   { color: var(--color-review); }
.kpi-card.kpi-partner .kpi-num  { color: #D97706; }
.kpi-card.kpi-approved .kpi-num { color: #16a34a; }
.kpi-card.kpi-total .kpi-num    { color: var(--color-primary); }
.kpi-label { font-size: 11px; color: var(--color-muted); font-weight: 500; text-transform: uppercase; letter-spacing: .04em; margin-top: 4px; }

/* Two-col grid */
.analytics-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 20px; }

/* Chart cards */
.a-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius); padding: 20px 24px; box-shadow: var(--shadow-sm); }
.a-card h3 { font-size: 14px; font-weight: 700; margin: 0 0 16px; display: flex; align-items: center; gap: 8px; }
.a-card-full { grid-column: 1 / -1; }

/* Period summary line */
.period-summary { margin-bottom: 8px; font-size: 12px; color: var(--color-muted); }
.period-total   { color: var(--color-text); font-size: 20px; font-weight: 800; }

/* Bar chart */
.bar-chart { display: flex; flex-direction: column; gap: 8px; }
.bar-row { display: flex; align-items: center; gap: 10px; }
.bar-label { width: 160px; font-size: 12px; font-weight: 500; color: var(--color-text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex-shrink: 0; }
.bar-track { flex: 1; height: 20px; background: #f3f4f6; border-radius: 4px; overflow: hidden; display: flex; }
.bar-fill { height: 100%; display: flex; align-items: center; justify-content: flex-end; padding-right: 6px; font-size: 10px; font-weight: 700; color: #fff; min-width: 2px; transition: width .3s; }
.bar-fill-fail    { background: #dc2626; }
.bar-fill-partner { background: #D97706; }
.bar-fill-review  { background: #f59e0b; }
.bar-fill-pass    { background: #16a34a; }
.bar-count { font-size: 12px; color: var(--color-muted); width: 36px; text-align: right; flex-shrink: 0; }

/* Sparkline */
.spark-chart { display: flex; align-items: flex-end; gap: 2px; height: 80px; }
.spark-bar { flex: 1; border-radius: 2px 2px 0 0; min-width: 4px; position: relative; cursor: default; display: flex; flex-direction: column; justify-content: flex-end; }
.spark-seg { width: 100%; }
.spark-seg:first-child { border-radius: 2px 2px 0 0; }
.spark-seg-pass  { background: #16a34a; }
.spark-seg-fail  { background: #dc2626; }
.spark-seg-other { background: #f59e0b; }
.spark-bar:hover::after { content: attr(data-tip); position: absolute; bottom: 100%; left: 50%; transform: translateX(-50%); background: #1f2937; color: #fff; font-size: 10px; padding: 2px 6px; border-radius: 4px; white-space: nowrap; margin-bottom: 4px; z-index: 5; }
.spark-empty { height: 100%; background: #f3f4f6; border-radius: 2px; width: 100%; }
.spark-labels { display: flex; justify-content: space-between; font-size: 10px; color: var(--color-muted); margin-top: 4px; }

/* Stats table */
.stats-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.stats-table th { text-align: left; font-size: 11px; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; color: var(--color-muted); border-bottom: 1px solid var(--color-border); padding: 6px 10px; }
.stats-table th.col-right { text-align: right; }
.stats-table th.col-center { text-align: center; }
.stats-table td { padding: 8px 10px; border-bottom: 1px solid #f3f4f6; vertical-align: middle; }
.stats-table tbody tr:last-child td { border-bottom: none; }
.stats-table tbody tr:hover { background: #f8fafc; }
.td-right  { text-align: right; }
.td-center { text-align: center; }
.td-name   { font-weight: 500; }
.td-name-sm { font-weight: 500; font-size: 12px; }
.td-fail    { color: #dc2626; font-weight: 700; }
.td-partner { color: #D97706; font-weight: 700; }
.td-review  { color: #f59e0b; font-weight: 700; }
.td-pass    { color: var(--color-pass); font-weight: 600; }
.td-total   { font-weight: 700; }
.td-muted   { color: #d1d5db; }

/* Metric rows */
.metric-row { display: flex; justify-content: space-between; align-items: center; padding: 10px 0; border-bottom: 1px solid #f3f4f6; font-size: 13px; }
.metric-row:last-child { border-bottom: none; }
.metric-label { color: var(--color-muted); }
.metric-value { font-weight: 700; }
.metric-divider { border-top: 1px solid var(--color-border); padding-top: 12px; margin-top: 16px; }

/* Donut */
.donut-wrap   { display: flex; align-items: center; gap: 20px; justify-content: center; }
.donut        { width: 140px; height: 140px; border-radius: 50%; position: relative; flex-shrink: 0; }
.donut-center { position: absolute; inset: 22px; background: #fff; border-radius: 50%; display: flex; flex-direction: column; align-items: center; justify-content: center; z-index: 1; }
.donut-num    { font-size: 26px; font-weight: 800; line-height: 1; }
.donut-sub    { font-size: 10px; color: var(--color-muted); margin-top: 2px; }
.donut-legend { display: flex; flex-direction: column; gap: 10px; }
.legend-item  { display: flex; align-items: center; gap: 6px; font-size: 12px; }
.legend-dot   { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; }
.legend-dot-pass    { background: #16a34a; }
.legend-dot-fail    { background: #dc2626; }
.legend-dot-partner { background: #D97706; }
.legend-dot-review  { background: #f59e0b; }

/* Sev legend inline */
.sev-legend { display: flex; gap: 14px; margin-top: 12px; font-size: 11px; color: var(--color-muted); }
.sev-dot { display: inline-block; width: 8px; height: 8px; border-radius: 2px; margin-right: 3px; }
.sev-dot-fail    { background: #dc2626; }
.sev-dot-partner { background: #D97706; }
.sev-dot-pass    { background: #16a34a; }

/* Resolution activity */
.resolution-grid { display: flex; gap: 20px; flex-wrap: wrap; }
.resolution-item { text-align: center; }
.resolution-num  { font-size: 24px; font-weight: 800; color: var(--color-text); }
.resolution-label { font-size: 11px; color: var(--color-muted); text-transform: uppercase; letter-spacing: .04em; }

/* No data message */
.no-data-msg { color: var(--color-muted); font-size: 13px; }

@media(max-width: 800px) {
  .analytics-grid { grid-template-columns: 1fr; }
  .kpi-strip { grid-template-columns: repeat(3, 1fr); }
}

/* ── All Assessments ─────────────────────────────────────────────────────── */
.all-wrap { max-width: 1440px; margin: 0 auto; }
.all-wrap .card { padding: 0; overflow: hidden; }

.aa-table { width: 100%; border-collapse: collapse; table-layout: fixed; }
.aa-table colgroup col:nth-child(1) { width: 18%; }
.aa-table colgroup col:nth-child(2) { width: 11%; }
.aa-table colgroup col:nth-child(3) { width: 13%; }
.aa-table colgroup col:nth-child(4) { width: 13%; }
.aa-table colgroup col:nth-child(5) { width: 13%; }
.aa-table colgroup col:nth-child(6) { width: 32%; }

.aa-table thead th {
  text-align: left; font-size: 11px; font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em;
  color: var(--color-muted); background: #f8fafc;
  border-bottom: 1px solid var(--color-border);
  padding: 10px 16px; white-space: nowrap;
}
.aa-table tbody td {
  padding: 14px 16px; vertical-align: top;
  border-bottom: 1px solid #f1f5f9; font-size: 13px;
}
.aa-table tbody tr:last-child td { border-bottom: none; }
.aa-table tbody tr:hover { background: #fafbfc; }

.pkg-title   { font-weight: 600; font-size: 14px; color: var(--color-text); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pkg-partner { font-size: 12px; color: var(--color-muted); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pkg-dba     { font-size: 11px; color: #6b7280; margin-top: 2px; }
.pkg-ns      { margin-top: 3px; }
.pkg-ns code { font-size: 11px; color: var(--color-muted); background: #f1f5f9; padding: 1px 5px; border-radius: 3px; }

.row-actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-top: 10px; padding-top: 8px; border-top: 1px solid #f1f5f9; }
.row-action-link       { font-size: 12px; color: var(--color-primary); text-decoration: none; font-weight: 500; background: none; border: none; cursor: pointer; padding: 0; }
.row-action-link:hover { text-decoration: underline; }
.row-action-link.muted  { color: var(--color-muted); }
.row-action-link.muted:hover { color: var(--color-text); }
.row-action-link.danger { color: #dc2626; }
.row-action-link.danger:hover { color: #991b1b; }
.row-action-sep { color: #d1d5db; font-size: 11px; }
.row-action-form { margin: 0; display: inline; }

.aa-table td.cell-center  { vertical-align: middle; }
.aa-table td.cell-date    { font-size: 12px; color: var(--color-muted); white-space: nowrap; vertical-align: middle; }
.cell-date .date-time     { font-size: 11px; margin-top: 2px; }
.aa-table td.cell-actions { vertical-align: middle; white-space: nowrap; }
.cell-actions .row-actions { margin-top: 0; padding-top: 0; border-top: none; flex-wrap: nowrap; gap: 6px; }
.cell-actions .row-action-link { font-size: 11px; }
.cell-actions .row-action-sep  { font-size: 10px; }

/* ── Footer ──────────────────────────────────────────────────────────────── */
.footer { padding: 16px 24px; font-size: 12px; color: var(--color-muted); border-top: 1px solid var(--color-border); margin-top: 32px; }
.footer p { margin: 0; }

/* ══════════════════════════════════════════════════════════════════════════
   Review / show page
   ══════════════════════════════════════════════════════════════════════════ */
.review-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}
.review-header h1{font-size:22px;font-weight:700;margin:0}
.review-actions{display:flex;gap:8px;flex-wrap:wrap}

.status-banner{border-radius:var(--radius);padding:20px 24px;margin-bottom:20px;border:1px solid var(--color-border);background:var(--color-surface)}
.status-banner h2{font-size:16px;font-weight:700;margin:0 0 14px;display:flex;align-items:center;gap:10px}
.tally-grid{display:flex;gap:24px;flex-wrap:wrap;margin-bottom:16px}
.tally-item{display:flex;flex-direction:column;align-items:flex-start;gap:4px}
.tally-top{display:flex;align-items:center;gap:8px}
.tally-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.tally-dot-open{background:var(--color-fail)}.tally-dot-partner{background:#D97706}
.tally-dot-waived{background:#7C3AED}.tally-dot-cleared{background:var(--color-pass)}
.tally-count{font-size:22px;font-weight:800;line-height:1}
.tally-label{font-size:11px;color:var(--color-muted);font-weight:500;padding-left:18px}
.transition-btns{display:flex;gap:8px;flex-wrap:wrap;padding-top:8px;border-top:1px solid var(--color-border)}

.btn-approve{background:#16a34a;border-color:#16a34a;color:#fff}
.btn-approve:hover{background:#15803d;border-color:#15803d}
.btn-reject{background:#dc2626;border-color:#dc2626;color:#fff}
.btn-reject:hover{background:#b91c1c;border-color:#b91c1c}
.btn-send-partner{background:#D97706;border-color:#D97706;color:#fff}
.btn-send-partner:hover{background:#B45309;border-color:#B45309}

.review-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px 20px;font-size:13px;color:var(--color-muted)}
.review-meta strong{color:var(--color-text);display:block;font-size:12px;margin-bottom:1px}

.chain-banner{background:#eff6ff;border:1px solid #bfdbfe;border-radius:var(--radius);padding:14px 20px;margin-bottom:20px;font-size:13px;color:#1e40af}
.chain-banner strong{color:#1d4ed8}

.bulk-bar{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);padding:10px 16px;margin-bottom:16px;display:none;align-items:center;gap:12px;position:sticky;top:52px;z-index:10;box-shadow:var(--shadow-md)}
.bulk-bar.active{display:flex}
.bulk-count{font-weight:700;font-size:13px;min-width:90px}

.finding-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius);margin-bottom:10px;overflow:hidden;transition:box-shadow .15s}
.finding-card:hover{box-shadow:var(--shadow-md)}
.finding-card.res-open{border-left:3px solid var(--color-fail)}
.finding-card.res-partner_action{border-left:3px solid #D97706}
.finding-card.res-waived{border-left:3px solid #7C3AED}
.finding-card.res-cleared{border-left:3px solid var(--color-pass)}

.finding-top{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;cursor:pointer}
.finding-check{flex-shrink:0;margin-top:2px}
.finding-main{flex:1;min-width:0}
.finding-title{font-weight:600;font-size:14px;margin-bottom:3px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.finding-summary{color:var(--color-muted);font-size:13px;line-height:1.5}
.finding-badges{display:flex;gap:6px;flex-shrink:0;align-items:center;flex-wrap:wrap}

.finding-body{display:none;border-top:1px solid var(--color-border);padding:16px}
.finding-card.open .finding-body{display:block}

.resolve-row{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap;margin-bottom:12px}
.resolve-row select{padding:6px 10px;border:1px solid var(--color-border);border-radius:6px;font-size:13px;background:#fff}
.resolve-row textarea{flex:1;min-width:200px;padding:6px 10px;border:1px solid var(--color-border);border-radius:6px;font-size:13px;resize:vertical;min-height:36px}

.notes-section{margin-top:14px;border-top:1px solid #f0f2f5;padding-top:12px}
.note-item{background:#f9fafb;border-radius:6px;padding:10px 14px;margin-bottom:8px;font-size:13px}
.note-item.note-partner{background:#eff6ff;border-left:3px solid #3b82f6}
.note-meta{font-size:11px;color:var(--color-muted);margin-bottom:4px}
.note-body{color:var(--color-text);line-height:1.5}

.add-note-form{margin-top:10px;display:flex;gap:8px;flex-wrap:wrap}
.add-note-form textarea{flex:1;min-width:200px;padding:6px 10px;border:1px solid var(--color-border);border-radius:6px;font-size:13px;resize:vertical;min-height:36px}
.vis-toggle{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--color-muted)}
.vis-toggle label{cursor:pointer;display:flex;align-items:center;gap:3px}

.detail-block{margin-top:8px;background:#f9fafb;border-left:3px solid var(--color-border);border-radius:0 6px 6px 0;padding:8px 12px;font-size:13px;color:#374151}
.detail-block strong{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--color-muted);margin-bottom:2px}
.detail-block.fix-block{border-left-color:#fde047;background:#fefce8}
.detail-block.method-block{border-left-color:#bae6fd;background:#f0f9ff}
.detail-block code{font-size:12px;word-break:break-all}

.timeline{margin-top:16px}
.timeline-item{display:flex;gap:10px;padding:6px 0;font-size:13px;border-bottom:1px solid #f0f2f5}
.timeline-item:last-child{border-bottom:none}
.timeline-ts{color:var(--color-muted);font-size:12px;min-width:140px;flex-shrink:0}
.timeline-actor{font-weight:600;min-width:90px;flex-shrink:0}
.timeline-detail{color:var(--color-muted)}

.comp-tag{display:inline-block;background:#f3f4f6;border-radius:4px;padding:1px 7px;font-size:12px;color:#374151;font-family:ui-monospace,monospace;max-width:280px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.comp-type-tag{font-size:11px;color:var(--color-muted)}

.filter-tabs{display:flex;gap:4px;margin-bottom:16px;flex-wrap:wrap}
.filter-tab{padding:5px 14px;border-radius:20px;font-size:12px;font-weight:600;cursor:pointer;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-muted);transition:all .12s}
.filter-tab:hover{border-color:#9ca3af}
.filter-tab.active{background:var(--color-primary);border-color:var(--color-primary);color:#fff}
.filter-count{font-weight:800;margin-right:4px}

/* ══════════════════════════════════════════════════════════════════════════
   Reports / show page
   ══════════════════════════════════════════════════════════════════════════ */
.report-wrap { margin: 0 auto; padding: 0 0 48px; }
.report-hero { background: #fff; border: 1px solid #e5e7eb; border-radius: 10px; padding: 28px 32px; margin-bottom: 24px; }
.report-hero h2 { margin: 0 0 4px; font-size: 1.5rem; }
.report-hero .meta { color: #6b7280; font-size: 0.875rem; margin-bottom: 16px; }
.report-hero .overall { display: flex; align-items: center; gap: 10px; }
.report-hero .overall-label { font-weight: 600; font-size: 0.95rem; }
.scorecard { display: flex; flex-wrap: nowrap; gap: 10px; margin-bottom: 28px; overflow-x: auto; }
.score-tile { flex: 1 1 0; min-width: 80px; background: #fff; border: 1px solid #e5e7eb; border-radius: 8px; padding: 12px 8px; text-align: center; }
.score-tile .score-num { font-size: 1.55rem; font-weight: 700; line-height: 1; margin-bottom: 4px; }
.score-tile .score-label { font-size: 0.68rem; color: #6b7280; text-transform: uppercase; letter-spacing: .04em; line-height: 1.2; }
.score-tile.tile-fail   { border-color: #fca5a5; } .score-tile.tile-fail   .score-num { color: #dc2626; }
.score-tile.tile-review { border-color: #fcd34d; } .score-tile.tile-review .score-num { color: #d97706; }
.score-tile.tile-crit   { border-color: #f87171; } .score-tile.tile-crit   .score-num { color: #dc2626; }
.score-tile.tile-high   { border-color: #fb923c; } .score-tile.tile-high   .score-num { color: #ea580c; }
.score-tile.tile-med    { border-color: #fcd34d; } .score-tile.tile-med    .score-num { color: #b45309; }
.cat-block { background: #fff; border: 1px solid #e5e7eb; border-radius: 10px; margin-bottom: 12px; overflow: hidden; }
.cat-header { display: flex; align-items: center; gap: 10px; padding: 14px 20px; cursor: pointer; user-select: none; }
.cat-header:hover { background: #f9fafb; }
.cat-title { font-weight: 700; font-size: 0.875rem; letter-spacing: .05em; text-transform: uppercase; color: #374151; flex: 1; }
.cat-count { background: #f3f4f6; color: #374151; border-radius: 999px; padding: 2px 10px; font-size: 0.78rem; font-weight: 600; }
.cat-count.has-fail   { background: #fee2e2; color: #dc2626; }
.cat-count.has-review { background: #fef3c7; color: #d97706; }
.cat-chevron { color: #9ca3af; font-size: 0.8rem; transition: transform .2s; }
.cat-block.open .cat-chevron { transform: rotate(90deg); }
.cat-body { display: none; border-top: 1px solid #f3f4f6; }
.cat-block.open .cat-body { display: block; }
.finding-row { padding: 14px 20px; border-bottom: 1px solid #f3f4f6; }
.finding-row:last-child { border-bottom: none; }
.finding-row.fr-fail   { border-left: 3px solid #dc2626; }
.finding-row.fr-partner-action { border-left: 3px solid #F59E0B; }
.finding-row.fr-needs-review { border-left: 3px solid #d97706; }
.finding-name { font-weight: 600; font-size: 0.9rem; color: #111827; }
.finding-summary { font-size: 0.875rem; color: #4b5563; margin: 0 0 6px; }
.sev-pill { font-size: 0.7rem; font-weight: 700; letter-spacing: .04em; border-radius: 4px; padding: 2px 7px; text-transform: uppercase; }
.sev-critical { background: #fee2e2; color: #991b1b; }
.sev-high     { background: #ffedd5; color: #9a3412; }
.sev-medium   { background: #fef9c3; color: #854d0e; }
.sev-low      { background: #f0fdf4; color: #166534; }
.sev-info     { background: #f0f9ff; color: #075985; }
.components-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 0; }
.comp-chip { display: inline-flex; align-items: center; gap: 4px; background: #f3f4f6; border-radius: 4px; padding: 2px 8px; font-size: 0.78rem; color: #374151; white-space: nowrap; }
.comp-type { color: #9ca3af; font-size: 0.72rem; }
details.fix-details { margin-top: 8px; }
details.fix-details summary { font-size: 0.8rem; color: #6b7280; cursor: pointer; user-select: none; }
details.fix-details summary:hover { color: #374151; }
.fix-body { margin-top: 6px; background: #f8fafc; border-left: 3px solid #e2e8f0; padding: 8px 12px; font-size: 0.83rem; color: #374151; border-radius: 0 4px 4px 0; }
.all-pass { text-align: center; padding: 40px 20px; color: #16a34a; }
.all-pass .pass-icon { font-size: 3rem; margin-bottom: 12px; }
.report-notes { background: #f9fafb; border: 1px solid #e5e7eb; border-radius: 10px; padding: 20px 24px; margin-top: 28px; font-size: 0.875rem; color: #374151; }
.report-notes strong { display: block; margin-bottom: 6px; font-size: 0.95rem; }
@media print { .navbar,.assessment-nav,.no-print{display:none!important} @page{margin:0.5in 0.4in} }

/* ══════════════════════════════════════════════════════════════════════════
   Assessment detail / show page
   ══════════════════════════════════════════════════════════════════════════ */
.category-card table{table-layout:fixed;width:100%}
.category-card table th:nth-child(1){width:20%}
.category-card table th:nth-child(2){width:11%}
.category-card table th:nth-child(3){width:10%}
.category-card table td:nth-child(2),.category-card table td:nth-child(3){white-space:nowrap}
.category-card table th:nth-child(4){width:20%}
.category-card table th:nth-child(5){width:39%}
.category-card table td code{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
.category-card table td{overflow-wrap:break-word;word-break:break-word;vertical-align:top;font-size:13px}
.category-card table td:nth-child(5){white-space:normal;overflow-wrap:break-word;word-break:break-word}

/* from show.ejs */

/* === Layout === */
.audit-wrap{max-width:1340px;margin:0 auto;padding:24px 24px 64px}
.audit-nav{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:8px}
.audit-nav h1{margin:0;font-size:1.25rem;font-weight:700}
@media print{.no-print{display:none!important}.audit-wrap{padding:0;max-width:100%}body{font-size:10px}
  .standard-section{break-inside:avoid}.std-body{display:block!important}
  .section-card{break-inside:avoid;overflow:visible!important}
  /* Prevent content escaping boxes */
  *{box-sizing:border-box!important}
  .audit-header,.exec-summary,.timeline-card,.section-card,.standard-section,.top-findings{overflow:hidden;overflow-wrap:break-word;word-wrap:break-word}
  /* Executive summary: stack vertically */
  .exec-summary{grid-template-columns:1fr!important;gap:14px}
  .risk-gauge{flex-direction:row!important;gap:14px;justify-content:flex-start}
  .risk-gauge>div:last-child{max-width:none;text-align:left}
  .exec-stats{grid-template-columns:repeat(5,1fr)}
  .es-num{font-size:1.1rem}
  .es-tile{padding:8px 6px}
  .top-findings{break-inside:avoid}
  /* Tables: fixed layout everywhere in print so declared % widths are respected */
  table{width:100%!important;table-layout:fixed!important}
  td,th{overflow-wrap:break-word;word-wrap:break-word;word-break:break-word}
  code{word-break:break-all}
  /* Heatmap: allow wrapping */
  .heatmap th{white-space:normal!important;font-size:0.62rem}
  .heatmap td{font-size:0.65rem;padding:4px 3px}
  .hm-cell{min-width:auto;padding:2px 4px;font-size:0.62rem}
  .heatmap-card{overflow:visible!important}
  /* Coverage matrix */
  .cov-table td,.cov-table th{padding:5px 6px;font-size:0.72rem}
  .cov-bar{width:50px}
  /* Compliance table — enforce declared column % widths, allow header text to wrap */
  .ct{table-layout:fixed!important}
  .ct th{white-space:normal!important}
  .ct td,.ct th{padding:5px 6px;font-size:0.72rem}
  .pct-bar{width:40px}
  .technique-label{font-size:0.6rem}
  .std-desc{font-size:0.65rem}
  /* Coverage matrix — allow first col to breathe */
  .cov-table{table-layout:fixed!important}
  .cov-table th{white-space:normal!important}
  /* Risk matrix */
  .risk-matrix{table-layout:fixed!important}
  /* Scope columns */
  .section-card ul{padding-left:14px}
  .section-card li{font-size:0.72rem;line-height:1.5}
  /* Checks table */
  .checks-table{table-layout:fixed;width:100%}
  .checks-table td{padding:6px 8px;font-size:0.72rem}
  .checks-table th{white-space:nowrap}
  /* Column widths: Result | Sev | Conf | Findings | Component */
  .checks-table th:nth-child(1){width:14%!important}
  .checks-table th:nth-child(2){width:8%!important}
  .checks-table th:nth-child(3){width:9%!important}
  .checks-table th:nth-child(4){width:53%!important}
  .checks-table th:nth-child(5){width:16%!important}
  .check-name{font-size:0.74rem}
  .check-summary{font-size:0.7rem}
  .method-block,.evidence-block,.fix-block{font-size:0.68rem;padding:4px 8px}
  /* Signature block: keep on one page */
  .section-card:last-of-type{page-break-inside:avoid}
  /* Risk matrix */
  .risk-matrix td,.risk-matrix th{padding:5px 4px;font-size:0.72rem}
  .rm-cell{width:24px;height:22px;font-size:0.7rem}
  /* Badges and pills */
  .sev-pill{font-size:0.58rem;padding:1px 5px}
  .conf-pill{font-size:0.55rem}
  .badge{font-size:0.6rem!important;white-space:normal}
  .depth-pill{font-size:0.58rem}
  /* Inventory grid */
  .inventory-grid{grid-template-columns:repeat(5,1fr)!important;gap:6px}
  .inv-tile{padding:8px 10px}
  .inv-num{font-size:1.1rem}
  .inv-label{font-size:0.62rem}
  /* Footer */
  .audit-footer{font-size:0.65rem}
  /* Page margins */
  @page{margin:0.5in 0.4in;size:letter}
  /* Scope and signature grids: stack on narrow print */
  .scope-grid{grid-template-columns:1fr!important}
  .sig-grid{grid-template-columns:1fr!important}
  .navbar,.assessment-nav{display:none!important}
}

/* === Header Card === */
.audit-header{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:24px 28px;margin-bottom:20px}
.audit-header h2{margin:0 0 4px;font-size:1.35rem}
.audit-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:8px 24px;font-size:0.875rem;color:#4b5563;margin-top:12px}
.audit-meta strong{color:#111827;display:block}

/* === Executive Summary === */
.exec-summary{display:block;background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:24px 28px;margin-bottom:20px;overflow:hidden}
.risk-gauge{text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:0;margin-top:-4px}
.risk-circle{width:120px;height:120px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-direction:column;border:6px solid #e5e7eb;position:relative}
.risk-grade{font-size:2.8rem;font-weight:800;line-height:1}
.risk-pct{font-size:0.82rem;color:#6b7280;margin-top:2px}
.risk-label{font-size:0.72rem;text-transform:uppercase;letter-spacing:.06em;color:#6b7280;margin-top:8px;font-weight:600}
.grade-a .risk-circle{border-color:#16a34a}.grade-a .risk-grade{color:#16a34a}
.grade-b .risk-circle{border-color:#65a30d}.grade-b .risk-grade{color:#65a30d}
.grade-c .risk-circle{border-color:#d97706}.grade-c .risk-grade{color:#d97706}
.grade-d .risk-circle{border-color:#ea580c}.grade-d .risk-grade{color:#ea580c}
.grade-f .risk-circle{border-color:#dc2626}.grade-f .risk-grade{color:#dc2626}
.grade-review .risk-circle{border-color:#d97706;width:120px;height:120px}.grade-review .risk-grade{color:#d97706;font-size:0.85rem;font-weight:700;line-height:1.2;text-align:center;padding:0 8px;word-break:break-word}
.exec-details h3{margin:0 0 12px;font-size:0.95rem;font-weight:700}
.exec-stats{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:16px;max-width:680px}
.es-tile{text-align:center;padding:10px 8px;border-radius:8px;border:1px solid #e5e7eb}
.es-num{font-size:1.3rem;font-weight:700;line-height:1}
.es-label{font-size:0.7rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;margin-top:3px}
.es-pass{border-color:#bbf7d0;background:#f0fdf4}.es-pass .es-num{color:#16a34a}
.es-fail{border-color:#fecaca;background:#fef2f2}.es-fail .es-num{color:#dc2626}
.es-review{border-color:#fde68a;background:#fffbeb}.es-review .es-num{color:#d97706}
.es-total .es-num{color:#111827}
.confidence-bar{display:flex;gap:14px;margin-top:12px;font-size:0.8rem}
.conf-dot{width:8px;height:8px;border-radius:50%;display:inline-block;margin-right:4px}
.conf-dot-high{background:#16a34a}.conf-dot-med{background:#d97706}.conf-dot-low{background:#9ca3af}

/* === Top Findings === */
.top-findings{background:#fff;border:1px solid #e5e7eb;border-radius:10px;margin-top:14px;overflow:hidden}
.top-findings h4{margin:0;padding:12px 16px 8px;font-size:0.82rem;font-weight:700;color:#374151}
.tf-table{width:100%;border-collapse:collapse;font-size:0.8rem;table-layout:fixed}
.tf-table colgroup col:nth-child(1){width:30%}
.tf-table colgroup col:nth-child(2){width:90px}
.tf-table colgroup col:nth-child(3){width:90px}
.tf-table colgroup col:nth-child(4){width:120px}
.tf-table colgroup col:nth-child(5){width:auto}
.tf-table th{text-align:left;padding:6px 12px;background:#f9fafb;border-bottom:1px solid #e5e7eb;font-weight:600;font-size:0.7rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280}
.tf-table td{padding:7px 12px;border-bottom:1px solid #f3f4f6;overflow-wrap:break-word;word-break:break-word}
.tf-table tr:last-child td{border-bottom:none}
.sev-pill{white-space:nowrap}

/* === Scan Timeline === */
.timeline-card{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:20px 24px;margin-bottom:20px}
.timeline-card h3{margin:0 0 14px;font-size:0.95rem;font-weight:700}
.timeline-meta{display:flex;gap:24px;font-size:0.82rem;color:#4b5563;margin-bottom:16px;flex-wrap:wrap}
.timeline-meta strong{color:#111827}
.scan-phases{display:flex;flex-direction:column;gap:0}
.phase-row{display:flex;align-items:flex-start;gap:12px;position:relative;padding:8px 0}
.phase-dot{width:24px;height:24px;border-radius:50%;background:#16a34a;color:#fff;display:flex;align-items:center;justify-content:center;font-size:0.65rem;font-weight:700;flex-shrink:0;z-index:1}
.phase-line{position:relative}
.phase-row:not(:last-child) .phase-line::after{content:'';position:absolute;left:11px;top:32px;width:2px;height:calc(100% - 8px);background:#d1d5db}
.phase-info h4{margin:0;font-size:0.84rem;font-weight:600;color:#111827}
.phase-info p{margin:2px 0 0;font-size:0.77rem;color:#6b7280}

/* === Inventory === */
.section-card{background:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:20px 24px;margin-bottom:20px}
.section-card h3{margin:0 0 14px;font-size:0.95rem;font-weight:700}
.section-desc{font-size:0.83rem;color:#6b7280;margin:0 0 14px}
.inventory-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}
.inv-tile{border:1px solid #e5e7eb;border-radius:8px;padding:12px 14px}
.inv-num{font-size:1.5rem;font-weight:700;color:#111827;line-height:1}
.inv-label{font-size:0.72rem;color:#6b7280;margin-top:3px}
.inv-tile.inv-has{border-color:#bfdbfe;background:#eff6ff}
.inv-tile.inv-has .inv-num{color:#1d4ed8}

/* === Risk Matrix === */
.risk-matrix{width:100%;border-collapse:collapse;font-size:0.82rem;margin-top:4px}
.risk-matrix th{text-align:center;padding:8px 6px;background:#f9fafb;border-bottom:2px solid #e5e7eb;font-weight:600;font-size:0.72rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280}
.risk-matrix th:first-child{text-align:left;width:100px}
.risk-matrix td{padding:8px 6px;border-bottom:1px solid #f3f4f6;text-align:center;vertical-align:middle}
.risk-matrix td:first-child{text-align:left;font-weight:600}
.rm-cell{display:inline-flex;align-items:center;justify-content:center;width:32px;height:28px;border-radius:5px;font-weight:700;font-size:0.82rem}
.rm-zero{background:#f3f4f6;color:#d1d5db}
.rm-pass{background:#dcfce7;color:#16a34a}
.rm-fail{background:#fee2e2;color:#dc2626}
.rm-review{background:#fef3c7;color:#d97706}

/* === Heatmap Matrix === */
.heatmap-card{overflow-x:auto}
.heatmap{width:100%;border-collapse:collapse;font-size:0.78rem}
.heatmap th{padding:7px 8px;background:#f9fafb;border-bottom:2px solid #e5e7eb;font-weight:600;font-size:0.68rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;text-align:center;white-space:nowrap}
.heatmap th:first-child{text-align:left;min-width:80px}
.heatmap td{padding:6px 8px;border-bottom:1px solid #f3f4f6;text-align:center}
.heatmap td:first-child{text-align:left;font-weight:600;text-transform:capitalize}
.hm-cell{display:inline-block;min-width:28px;padding:3px 8px;border-radius:4px;font-weight:700;font-size:0.76rem}
.hm-empty{color:#d1d5db}.hm-clean{background:#dcfce7;color:#16a34a}.hm-warn{background:#fef3c7;color:#d97706}.hm-danger{background:#fee2e2;color:#dc2626}

/* === Coverage Matrix === */
.cov-table{width:100%;border-collapse:collapse;font-size:0.8rem}
.cov-table th{text-align:left;padding:7px 10px;background:#f9fafb;border-bottom:2px solid #e5e7eb;font-weight:600;font-size:0.7rem;text-transform:uppercase;letter-spacing:.04em;color:#6b7280}
.cov-table td{padding:8px 10px;border-bottom:1px solid #f3f4f6;vertical-align:middle}
.cov-table tr:last-child td{border-bottom:none}
.depth-pill{font-size:0.65rem;font-weight:700;border-radius:4px;padding:2px 7px;text-transform:uppercase;letter-spacing:.03em}
.depth-deep{background:#dbeafe;color:#1d4ed8}
.depth-standard{background:#e0e7ff;color:#4338ca}
.depth-surface{background:#fef3c7;color:#92400e}
.depth-not-applicable{background:#f3f4f6;color:#9ca3af}
.cov-bar{height:6px;border-radius:3px;background:#e5e7eb;width:80px;display:inline-block;overflow:hidden;vertical-align:middle}
.cov-fill{height:100%;border-radius:3px}
.cov-fill-pass{background:#16a34a}.cov-fill-fail{background:#dc2626}.cov-fill-review{background:#d97706}

/* === Compliance Table === */
.ct{width:100%;border-collapse:collapse;font-size:0.82rem}
.ct th{text-align:left;padding:8px 10px;background:#f9fafb;border-bottom:2px solid #e5e7eb;font-weight:600;color:#374151;font-size:0.72rem;text-transform:uppercase;letter-spacing:.04em}
.ct td{padding:8px 10px;border-bottom:1px solid #f3f4f6;vertical-align:top}
.ct tr:last-child td{border-bottom:none}
.ct-pass{color:#16a34a;font-weight:700}.ct-fail{color:#dc2626;font-weight:700}.ct-review{color:#d97706;font-weight:700}.ct-partner-action{color:#B45309;font-weight:700}.ct-muted{color:#9ca3af}.ct-na{color:#9ca3af;font-style:italic}
.std-label{font-weight:600;color:#111827}.std-desc{font-size:0.74rem;color:#6b7280;margin-top:2px}
.pct-bar{width:60px;height:5px;border-radius:3px;background:#e5e7eb;display:inline-block;overflow:hidden;vertical-align:middle;margin-left:6px}
.pct-fill{height:100%;border-radius:3px;background:#16a34a}
.technique-label{font-size:0.7rem;color:#9ca3af;margin-top:2px}

/* === Standard Sections (accordion) === */
.standard-section{background:#fff;border:1px solid #e5e7eb;border-radius:10px;margin-bottom:12px;overflow:hidden}
.std-header{display:flex;align-items:center;gap:10px;padding:13px 20px;cursor:pointer;user-select:none}
.std-header:hover{background:#f9fafb}
.std-header h4{margin:0;font-size:0.88rem;font-weight:700;flex:1}
.std-badges{display:flex;gap:6px;flex-shrink:0}
.std-body{display:none;border-top:1px solid #f3f4f6}
.standard-section.open .std-body{display:block}
.std-chevron{color:#9ca3af;font-size:0.8rem;transition:transform .2s;flex-shrink:0}
.standard-section.open .std-chevron{transform:rotate(90deg)}
.std-description{padding:10px 20px;font-size:0.82rem;color:#6b7280;font-style:italic;border-bottom:1px solid #f3f4f6}
.std-technique{padding:6px 20px;font-size:0.75rem;color:#0369a1;background:#f0f9ff;border-bottom:1px solid #f3f4f6;display:flex;gap:6px;align-items:center}
.std-technique strong{font-size:0.68rem;text-transform:uppercase;letter-spacing:.04em}

/* === Checks Table === */
.checks-table{width:100%;border-collapse:collapse;font-size:0.8rem;table-layout:auto}
.checks-table thead th{padding:7px 12px;background:#f9fafb;font-size:0.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:#6b7280;text-align:left;border-bottom:1px solid #e5e7eb;white-space:nowrap}
.checks-table td{overflow-wrap:break-word;word-break:break-word}
.checks-table tbody tr{border-bottom:1px solid #f9fafb}
.checks-table tbody tr:last-child{border-bottom:none}
.checks-table tbody tr:hover{background:#fafafa}
.checks-table td{padding:10px 12px;vertical-align:top}
.check-name{font-weight:600;color:#111827;margin-bottom:2px}
.check-summary{color:#4b5563;font-size:0.79rem;margin:2px 0 0}
.method-block{margin-top:6px;background:#f0f9ff;border-left:3px solid #bae6fd;border-radius:0 4px 4px 0;padding:6px 10px;font-size:0.77rem;color:#0c4a6e}
.method-block strong{display:block;font-size:0.68rem;text-transform:uppercase;letter-spacing:.04em;color:#0369a1;margin-bottom:2px}
.evidence-block{margin-top:6px;background:#f0fdf4;border-left:3px solid #bbf7d0;border-radius:0 4px 4px 0;padding:6px 10px;font-size:0.77rem;color:#14532d}
.evidence-block strong{display:block;font-size:0.68rem;text-transform:uppercase;letter-spacing:.04em;color:#16a34a;margin-bottom:2px}
.fix-block{margin-top:6px;background:#fef9c3;border-left:3px solid #fde047;border-radius:0 4px 4px 0;padding:6px 10px;font-size:0.77rem;color:#713f12}
.fix-block strong{display:block;font-size:0.68rem;text-transform:uppercase;letter-spacing:.04em;color:#a16207;margin-bottom:2px}
.sev-pill{font-size:0.65rem;font-weight:700;border-radius:4px;padding:2px 7px;text-transform:uppercase}
.sev-critical{background:#fee2e2;color:#991b1b}.sev-high{background:#ffedd5;color:#9a3412}
.sev-medium{background:#fef9c3;color:#854d0e}.sev-low{background:#f0fdf4;color:#166534}.sev-info{background:#f0f9ff;color:#075985}
.conf-pill{font-size:0.6rem;font-weight:600;border-radius:3px;padding:1px 6px;text-transform:uppercase;letter-spacing:.03em}
.conf-high{background:#dcfce7;color:#166534}.conf-medium{background:#fef3c7;color:#92400e}.conf-low{background:#f3f4f6;color:#6b7280}
.comp-chip{display:inline-flex;align-items:center;gap:4px;background:#f3f4f6;border-radius:4px;padding:2px 8px;font-size:0.73rem;color:#374151;white-space:nowrap;}
.comp-type{font-size:0.7rem;color:#9ca3af}

/* === Section Toggle === */
.section-toggle{font-size:0.78rem;color:#6b7280;cursor:pointer;text-decoration:underline;text-underline-offset:2px;margin-left:12px}
.section-toggle:hover{color:#111827}

/* === Footer === */
.audit-footer{text-align:center;margin-top:32px;font-size:0.74rem;color:#9ca3af;padding-bottom:16px;border-top:1px solid #f3f4f6;padding-top:20px}
.audit-footer code{background:#f3f4f6;padding:1px 5px;border-radius:3px}

@media(max-width:700px){
  .exec-summary{grid-template-columns:1fr}
  .exec-stats{grid-template-columns:repeat(3,1fr)}
  .es-tile{padding:8px 6px}
  .es-num{font-size:1.1rem}
  .heatmap th,.heatmap td{padding:4px 5px;font-size:0.7rem}
}

  /* ── Data Boundary Analysis ── */
  .boundary-template-block{margin-bottom:2rem;border:1px solid #e0e5ee;border-radius:8px;overflow:hidden}
  .boundary-template-header{display:flex;align-items:center;gap:.6rem;padding:.75rem 1rem;background:#f0f4fb;border-bottom:1px solid #e0e5ee;font-weight:600;font-size:.95rem}
  .boundary-template-name{color:#032D60}
  .boundary-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border-bottom:1px solid #e0e5ee}
  @media(max-width:860px){.boundary-grid{grid-template-columns:1fr}}
  .boundary-col{padding:1rem;border-right:1px solid #e0e5ee}
  .boundary-col:last-child{border-right:none}
  .boundary-col-header{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:.3rem .5rem;border-radius:4px;margin-bottom:.4rem}
  .boundary-col-desc{font-size:.78rem;color:#5a6a7e;margin-bottom:.6rem;line-height:1.4}
  .boundary-col-join{background:#e8f4fd;color:#0070D2}
  .boundary-col-internal{background:#f3f4f6;color:#444}
  .boundary-col-agg{background:#f0faf4;color:#2d7a4f}
  .boundary-empty{font-size:.8rem;color:#9aa5b4;font-style:italic;padding:.3rem 0}
  .boundary-field{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem;padding:.3rem .4rem;border-radius:4px;margin-bottom:.3rem;background:#fafbfc;border:1px solid #eef0f3}
  .boundary-field-join{background:#eef7fd;border-color:#c9e6f8}
  .boundary-field-agg{background:#f0faf4;border-color:#c3e8d0}
  .field-alias{font-weight:600;font-size:.82rem;color:#032D60;font-family:monospace}
  .field-role{font-size:.7rem;padding:.1rem .4rem;border-radius:10px;text-transform:uppercase;letter-spacing:.03em;font-weight:600}
  .role-provider{background:#fff3cd;color:#7a5c00}
  .role-consumer{background:#d4edda;color:#155724}
  .field-hash{font-size:.72rem;padding:.1rem .4rem;border-radius:10px}
  .hash-ok{background:#d4edda;color:#155724}
  .hash-fail{background:#f8d7da;color:#721c24}
  .hash-unknown{background:#fff3cd;color:#856404}
  .field-tag{font-size:.7rem;padding:.1rem .4rem;border-radius:10px;background:#e9ecef;color:#495057}
  .tag-noselect{background:#f8d7da;color:#721c24}
  .tag-ops{background:#cce5ff;color:#004085}
  .tag-threshold{background:#d4edda;color:#155724;font-weight:700}
  .boundary-privacy-row{padding:1rem;background:#f9fafb}
  .boundary-privacy-header{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:#5a6a7e;margin-bottom:.6rem}
  .boundary-privacy-controls{display:flex;gap:1rem;flex-wrap:wrap}
  .privacy-control-card{flex:1;min-width:160px;padding:.75rem 1rem;border-radius:6px;border:1px solid #e0e5ee;background:#fff}
  .privacy-control-pass{border-color:#c3e8d0;background:#f0faf4}
  .privacy-control-needs-review{border-color:#ffd97a;background:#fffbee}
  .privacy-control-fail{border-color:#f5c6cb;background:#fff5f5}
  .privacy-control-unknown{border-color:#e0e5ee;background:#fafbfc}
  .pc-label{font-size:.72rem;font-weight:700;text-transform:uppercase;color:#5a6a7e;letter-spacing:.04em;margin-bottom:.3rem}
  .pc-value{font-size:.88rem;font-weight:600;color:#032D60;margin-bottom:.3rem}
  .pc-value-muted{color:#9aa5b4;font-weight:400}
  .pc-status{margin-top:.2rem}
  .section-desc{font-size:.87rem;color:#5a6a7e;margin:-.3rem 0 1rem;line-height:1.5}

/* from sessions.ejs */

    .admin-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 24px; flex-wrap: wrap; gap: 12px; }
    .admin-header h1 { font-size: 1.5rem; font-weight: 700; color: #032D60; margin: 0; }
    .admin-badge { background: #fee2e2; color: #991b1b; font-size: 0.7rem; font-weight: 700;
                   padding: 2px 8px; border-radius: 99px; text-transform: uppercase; letter-spacing: 0.05em; vertical-align: middle; margin-left: 8px; }
    .danger-zone { background: #fff5f5; border: 1px solid #fed7d7; border-radius: 10px;
                   padding: 16px 20px; margin-bottom: 24px; display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
    .danger-zone p { margin: 0; font-size: 0.875rem; color: #744210; flex: 1; min-width: 200px; }
    .sessions-table { width: 100%; border-collapse: collapse; font-size: 0.875rem; }
    .sessions-table th { background: #f8fafc; color: #64748b; font-size: 0.75rem; font-weight: 600;
                          text-transform: uppercase; letter-spacing: 0.05em; padding: 10px 14px;
                          border-bottom: 2px solid #e2e8f0; text-align: left; white-space: nowrap; }
    .sessions-table td { padding: 10px 14px; border-bottom: 1px solid #f1f5f9; vertical-align: middle; }
    .sessions-table tr:hover td { background: #f8fafc; }
    .sessions-table tr.own-session td { background: #f0fdf4; }
    .sid-cell { font-family: monospace; font-size: 0.75rem; color: #64748b; max-width: 140px;
                overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .active-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%;
                  background: #22c55e; margin-right: 6px; vertical-align: middle; }
    .expired-dot { display: inline-block; width: 8px; height: 8px; border-radius: 50%;
                   background: #e2e8f0; margin-right: 6px; vertical-align: middle; }
    .role-badge { font-size: 0.7rem; font-weight: 600; padding: 2px 7px; border-radius: 99px; text-transform: uppercase; }
    .role-admin { background: #fef3c7; color: #92400e; }
    .role-reviewer { background: #dbeafe; color: #1e40af; }
    .role-viewer { background: #f1f5f9; color: #475569; }
    .you-tag { font-size: 0.7rem; background: #dcfce7; color: #166534; padding: 1px 7px;
               border-radius: 99px; font-weight: 600; margin-left: 6px; }
    .btn-invalidate { background: #fee2e2; color: #b91c1c; border: 1px solid #fca5a5;
                      padding: 4px 10px; border-radius: 5px; font-size: 0.75rem; font-weight: 600;
                      cursor: pointer; white-space: nowrap; }
    .btn-invalidate:hover { background: #fecaca; }
    .pagination { display: flex; gap: 8px; align-items: center; margin-top: 20px; font-size: 0.875rem; }
    .pagination a { padding: 5px 12px; border: 1px solid #e2e8f0; border-radius: 6px; color: #0070D2; text-decoration: none; }
    .pagination a:hover { background: #f1f5f9; }
    .pagination .current-page { padding: 5px 12px; background: #0070D2; color: white; border-radius: 6px; }
    .empty-state { text-align: center; padding: 48px 24px; color: #94a3b8; }
    .expire-cell { font-size: 0.8rem; color: #64748b; white-space: nowrap; }
  
/* from index.ejs */

.invite-list{max-width:800px;margin:32px auto}
.invite-list h1{font-size:20px;margin:0 0 20px}
.invite-table{width:100%;border-collapse:collapse;font-size:13px}
.invite-table th{text-align:left;padding:8px 12px;background:var(--color-bg);border-bottom:2px solid var(--color-border);font-weight:600}
.invite-table td{padding:8px 12px;border-bottom:1px solid var(--color-border)}
.invite-table tr:hover td{background:var(--color-bg)}
.badge{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;font-weight:600}
.badge-active{background:#e8f5e9;color:#2e7d32}
.badge-expired{background:#fafafa;color:#9e9e9e}
.badge-revoked{background:#ffebee;color:#c62828}
.badge-used{background:#fff3e0;color:#e65100}
.btn-revoke{padding:4px 12px;border-radius:6px;font-size:12px;cursor:pointer;border:1px solid #ef5350;background:#fff;color:#ef5350}
.btn-revoke:hover{background:#ef5350;color:#fff}
.btn-copy{padding:4px 12px;border-radius:6px;font-size:12px;cursor:pointer;border:1px solid var(--color-primary);background:#fff;color:var(--color-primary);margin-right:4px}
.btn-copy:hover{background:var(--color-primary);color:#fff}
.btn-regen{padding:4px 12px;border-radius:6px;font-size:12px;cursor:pointer;border:1px solid #16a34a;background:#fff;color:#16a34a;margin-right:4px}
.btn-regen:hover{background:#16a34a;color:#fff}
.link-url{font-size:11px;color:var(--color-muted);font-family:ui-monospace,monospace;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;margin-top:2px}
.btn-new{display:inline-block;padding:10px 20px;border-radius:8px;font-size:14px;font-weight:600;background:var(--color-primary);color:#fff;text-decoration:none;margin-bottom:20px}
.btn-new:hover{background:var(--color-primary-dk)}

/* from show.ejs */

.invite-result{max-width:560px;margin:32px auto;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:32px}
.invite-result h1{font-size:20px;margin:0 0 8px}
.invite-result .subtitle{color:var(--color-muted);font-size:13px;margin-bottom:24px}
.link-box{background:var(--color-bg);border:1px solid var(--color-border);border-radius:8px;padding:12px 16px;font-family:monospace;font-size:13px;word-break:break-all;margin-bottom:16px;position:relative}
.copy-btn{position:absolute;top:8px;right:8px;padding:4px 12px;border-radius:6px;font-size:12px;cursor:pointer;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text)}
.copy-btn:hover{background:var(--color-primary);color:#fff;border-color:var(--color-primary)}
.meta-row{display:flex;gap:24px;font-size:13px;color:var(--color-muted);margin-bottom:8px}
.meta-row strong{color:var(--color-text)}
.warn-box{background:#fff3e0;border:1px solid #ffe0b2;border-radius:8px;padding:10px 16px;font-size:12px;color:#e65100;margin-top:20px;line-height:1.5}
.back-link{display:inline-block;margin-top:20px;font-size:13px;color:var(--color-primary);text-decoration:none}

/* from new.ejs */

.invite-form{max-width:500px;margin:32px auto;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:32px}
.invite-form h1{font-size:20px;margin:0 0 20px}
.form-group{margin-bottom:16px}
.form-group label{display:block;font-size:13px;font-weight:600;margin-bottom:4px;color:var(--color-text)}
.form-group input,.form-group select{width:100%;padding:8px 12px;border:1px solid var(--color-border);border-radius:6px;font-size:14px}
.form-group .hint{font-size:11px;color:var(--color-muted);margin-top:4px}
.btn-create{display:inline-block;padding:10px 24px;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;border:none;background:var(--color-primary);color:#fff;transition:background .15s}
.btn-create:hover{background:var(--color-primary-dk)}

/* ══════════════════════════════════════════════════════════════════════════
   Shared page hero — consistent header across Review/Report/Detail/Audit
   ══════════════════════════════════════════════════════════════════════════ */
.page-hero {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 20px;
  flex-wrap: wrap;
}
.page-hero-left h1 {
  font-size: 22px;
  font-weight: 700;
  margin: 0 0 4px;
}
.page-hero-left .page-hero-sub {
  color: var(--color-muted);
  font-size: 13px;
}
.page-hero-right {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 8px;
  padding-top: 4px;
}
.page-hero-nav {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
  justify-content: flex-end;
}
.page-hero-actions {
  display: flex;
  align-items: center;
  gap: 8px;
  justify-content: flex-end;
}

/* ── Per-page action row (below page-hero, right-aligned) ─────────────────── */
.page-actions {
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 8px;
  margin-bottom: 20px;
  margin-top: -8px;
}

/* ── All Assessments — search bar ─────────────────────────────────────────── */
.aa-search-bar {
  position: relative;
  display: flex;
  align-items: center;
  margin-bottom: 14px;
}
.aa-search-bar .search-icon {
  position: absolute;
  left: 12px;
  width: 16px;
  height: 16px;
  color: var(--color-muted);
  pointer-events: none;
}
.aa-search-bar input {
  width: 100%;
  padding: 9px 36px 9px 36px;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  font-size: 13px;
  background: var(--color-surface);
  outline: none;
}
.aa-search-bar input:focus { border-color: var(--color-primary); box-shadow: 0 0 0 3px rgba(0,112,210,.1); }
.aa-clear {
  position: absolute;
  right: 12px;
  color: var(--color-muted);
  cursor: pointer;
  font-size: 12px;
  line-height: 1;
}
.aa-clear:hover { color: var(--color-text); }

/* ── All Assessments — sortable column headers ────────────────────────────── */
.aa-th { cursor: default; user-select: none; }
.aa-th.sortable { cursor: pointer; }
.aa-th.sortable:hover { color: var(--color-primary); }
.aa-sort-arrow::after { content: '⇅'; font-size: 10px; margin-left: 4px; opacity: .3; }
.aa-th-active .aa-sort-arrow::after { opacity: 1; color: var(--color-primary); }
.aa-th-asc  .aa-sort-arrow::after { content: '↑'; }
.aa-th-desc .aa-sort-arrow::after { content: '↓'; }

/* ── All Assessments — column widths (7 cols now) ─────────────────────────── */
.aa-table colgroup col.col-pkg     { width: 17%; }
.aa-table colgroup col.col-partner { width: 12%; }
.aa-table colgroup col.col-type    { width: 10%; }
.aa-table colgroup col.col-status  { width: 12%; }
.aa-table colgroup col.col-result  { width: 11%; }
.aa-table colgroup col.col-date    { width: 11%; }
.aa-table colgroup col.col-actions { width: 27%; }

/* ── Analytics — KPI sub-label ─────────────────────────────────────────────── */
.kpi-sub { font-size: 10px; color: var(--color-muted); margin-top: 2px; font-style: italic; }

/* ── Analytics — spark legend ──────────────────────────────────────────────── */
.spark-legend { display: flex; gap: 14px; margin-top: 8px; font-size: 11px; color: var(--color-muted); flex-wrap: wrap; }
.spark-legend-dot { display: inline-block; width: 8px; height: 8px; border-radius: 2px; margin-right: 4px; vertical-align: middle; }
.spark-legend-pass  { background: var(--color-pass); }
.spark-legend-fail  { background: var(--color-fail); }
.spark-legend-other { background: #cbd5e1; }

/* ── Analytics — legend item ───────────────────────────────────────────────── */
.legend-item { display: flex; align-items: flex-start; gap: 8px; font-size: 13px; line-height: 1.3; }
.legend-item strong { font-weight: 600; }

/* ── Dashboard — legend card ────────────────────────────────────────────────── */
.legend-card { background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius); padding: 0; margin-bottom: 16px; }
.legend-summary { padding: 14px 20px; font-size: 13px; font-weight: 600; cursor: pointer; user-select: none; list-style: none; display: flex; align-items: center; gap: 8px; color: var(--color-text); }
.legend-summary::-webkit-details-marker { display: none; }
.legend-summary::after { content: '▸'; font-size: 11px; color: var(--color-muted); margin-left: auto; }
details.legend-card[open] .legend-summary::after { content: '▾'; }
.legend-body { padding: 0 20px 20px; display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 24px; }
.legend-section-title { font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--color-muted); margin-bottom: 10px; }
.legend-hint { font-weight: 400; text-transform: none; letter-spacing: 0; font-style: italic; }
.legend-grid { display: flex; flex-direction: column; gap: 9px; }
.legend-row { display: grid; grid-template-columns: auto 1fr; align-items: start; gap: 10px; font-size: 13px; color: var(--color-text); line-height: 1.45; }
.legend-row .badge { flex-shrink: 0; margin-top: 1px; }
/* Report pages col — fixed label width so descriptions align */
.legend-pages .legend-row { grid-template-columns: 88px 1fr; }
.legend-pages .legend-row strong { color: var(--color-text); white-space: nowrap; }
.td-approved { color: #16a34a; font-weight: 600; }
