/* ============================================================
   Org Chart — Styles
   Colors configured via config/chart.config.json
   ============================================================ */

:root {
  /* Primary palette */
  --color-tangerine: #FF4A00;
  --color-salmon:    #F38454;
  --color-espresso:  #201B13;
  --color-cocoa:     #4E403B;
  --color-sand:      #E9E5D6;
  --color-bone:      #F0F7EF;
  --color-snow:      #FFFFFF;
  --color-charcoal:  #55524E;
  --color-mocha:     #75665F;
  --color-hazelnut:  #D3C5BF;

  /* Semantic tokens */
  --color-primary:    var(--color-tangerine);
  --color-text:       var(--color-espresso);
  --color-text-muted: var(--color-charcoal);
  --color-bg:         var(--color-snow);
  --color-surface:    var(--color-bone);
  --color-border:     var(--color-hazelnut);

  /* Typography */
  --font-display: 'Inter', sans-serif;
  --font-body:    'Inter', sans-serif;

  /* Card geometry */
  --card-width:   220px;
  --card-height:  110px;
  --card-radius:  8px;
}

/* ---- Reset / base ---- */

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

/* Reinforce hidden attribute — prevents component display rules from overriding it */
[hidden] { display: none !important; }

/* Print container is screen-invisible; shown only in @media print */
#print-container { display: none; }

html, body {
  height: 100%;
  font-family: var(--font-body);
  font-size: 16px;
  background: var(--color-bg);
  color: var(--color-text);
}

/* ---- Layout ---- */

body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

main {
  flex: 1;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  min-height: 0;
}

#chart-container {
  flex: 1;
  min-height: 0;
  width: 100%;
  overflow: hidden;
}

.empty-state {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  max-width: 380px;
  margin: 40px auto;
  padding: 24px 28px;
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--card-radius);
  color: var(--color-text-muted);
  font-size: 0.875rem;
  text-align: center;
}

/* ---- Header ---- */

.site-header {
  display: flex;
  align-items: center;
  gap: 16px;
  padding: 12px 24px;
  background: var(--color-snow);
  border-bottom: 1px solid var(--color-border);
  height: 64px;
}

.site-header__logo {
  height: 36px;
  width: auto;
}

.site-header__title {
  font-size: 1.125rem;
  font-weight: 500;
  color: var(--color-text);
  letter-spacing: -0.01em;
}

/* ---- Footer ---- */

.site-footer {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 8px 24px;
  background: var(--color-sand);
  border-top: 1px solid var(--color-border);
  font-size: 0.75rem;
  color: var(--color-text-muted);
  height: 36px;
}

.site-footer__sep { color: var(--color-hazelnut); }

.site-footer__hash {
  font-family: 'Courier New', monospace;
  font-size: 0.6875rem;
  color: var(--color-mocha);
}

/* ---- Org card ---- */

.org-card {
  width: 100%;
  height: 100%;
  padding: 10px 12px 10px 16px;  /* extra 4px left for accent strip */
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--card-radius);
  display: flex;
  flex-direction: column;
  justify-content: center;
  overflow: hidden;
  cursor: pointer;
  position: relative;
  transition: box-shadow 0.15s ease, border-color 0.15s ease;
}

.org-card:hover {
  border-color: var(--color-primary);
  box-shadow: 0 2px 10px rgba(255, 74, 0, 0.12);
}

/* Root node (CEO / level 0) */
.org-card--root {
  background: var(--color-primary);
  border-color: var(--color-primary);
  padding-left: 12px;  /* no accent strip — CEO has its own visual treatment */
}

.org-card--root .org-card__name {
  color: var(--color-snow);
}

.org-card--root .org-card__position {
  color: rgba(255, 255, 255, 0.85);
}

.org-card--root .org-card__meta {
  color: rgba(255, 255, 255, 0.7);
}

/* Card content */
.org-card__name {
  font-weight: 600;
  font-size: 0.8125rem;
  color: var(--color-text);
  line-height: 1.25;
  margin-bottom: 3px;
  word-break: break-word;
  overflow-wrap: break-word;
  /* allow up to 2 lines before clamping */
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.org-card__position {
  font-size: 0.6875rem;
  font-weight: 400;
  color: var(--color-cocoa);
  line-height: 1.3;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.org-card__position em {
  font-style: italic;
}

.org-card__meta {
  font-size: 0.625rem;
  color: var(--color-charcoal);
  margin-top: 5px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

/* ---- Audit role badges (live cards) ---- */

.org-card__roles {
  display: flex;
  flex-wrap: wrap;
  gap: 3px;
  margin-top: 4px;
}

.org-card-badge {
  display: inline-block;
  font-size: 0.5625rem;
  font-weight: 600;
  padding: 1px 5px;
  border-radius: 3px;
  color: #fff;
  white-space: normal;
  word-break: break-word;
  line-height: 1.15;
  max-width: 100%;
}

.org-card-badge--risk_committee_chair    { background: #7B5C9E; }
.org-card-badge--risk_committee_member   { background: #9E7BC0; }
.org-card-badge--info_security_officer   { background: #2B7A78; }
.org-card-badge--privacy_officer         { background: #5D7286; }
.org-card-badge--compliance_officer      { background: #B08B3C; }

/* ---- Filter bar (always-visible toggle strip) ---- */

.filter-bar {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  padding: 4px 20px;
  background: var(--color-sand);
  border-bottom: 1px solid var(--color-border);
}

/* ---- Filter panel ---- */

.filter-panel {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  gap: 6px;
  padding: 10px 20px;
  background: var(--color-sand);
  border-bottom: 1px solid var(--color-border);
  /* max-height large enough for any realistic dept count (~600px); transition for collapse */
  max-height: 600px;
  overflow: hidden;
  transition: max-height 0.2s ease, padding 0.2s ease;
}

.filter-panel--hidden {
  max-height: 0 !important;
  padding-top: 0 !important;
  padding-bottom: 0 !important;
  border-bottom: none;
}

.filter-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 8px;
  min-height: 28px;
}

/* ---- Search ---- */

.search-wrap {
  display: flex;
  align-items: center;
}

.search-input {
  width: 220px;
  height: 28px;
  padding: 0 8px;
  font-family: var(--font-body);
  font-size: 0.8125rem;
  color: var(--color-text);
  background: var(--color-snow);
  border: 1px solid var(--color-border);
  border-radius: 4px;
  outline: none;
  transition: border-color 0.15s ease;
}

.search-input:focus {
  border-color: var(--color-primary);
}

.search-results {
  display: flex;
  align-items: center;
  gap: 4px;
}

.search-count {
  font-size: 0.75rem;
  color: var(--color-text-muted);
  min-width: 56px;
}

/* ---- Filter label + checkboxes ---- */

.filter-label-wrap {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
}

.filter-label {
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  white-space: nowrap;
}

.filter-checkboxes {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 10px;
  max-height: 52px;
  overflow-y: auto;
}

.filter-checkbox {
  display: flex;
  align-items: center;
  gap: 4px;
  font-size: 0.75rem;
  color: var(--color-text);
  cursor: pointer;
  white-space: nowrap;
}

.filter-checkbox input[type="checkbox"] {
  accent-color: var(--color-primary);
  cursor: pointer;
}

.filter-actions {
  display: flex;
  gap: 6px;
  margin-left: auto;
  flex-shrink: 0;
}

/* ---- Buttons ---- */

.btn-text {
  padding: 2px 8px;
  font-family: var(--font-body);
  font-size: 0.6875rem;
  color: var(--color-text-muted);
  background: none;
  border: 1px solid var(--color-border);
  border-radius: 3px;
  cursor: pointer;
  transition: color 0.12s ease, border-color 0.12s ease;
}

.btn-text:hover {
  color: var(--color-primary);
  border-color: var(--color-primary);
}

.btn-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 22px;
  height: 22px;
  font-size: 0.75rem;
  color: var(--color-text-muted);
  background: var(--color-snow);
  border: 1px solid var(--color-border);
  border-radius: 3px;
  cursor: pointer;
  transition: color 0.12s ease, border-color 0.12s ease;
}

.btn-icon:hover {
  color: var(--color-primary);
  border-color: var(--color-primary);
}

.btn-primary {
  padding: 8px 18px;
  font-family: var(--font-body);
  font-size: 0.8125rem;
  font-weight: 600;
  color: var(--color-snow);
  background: var(--color-primary);
  border: none;
  border-radius: 4px;
  cursor: pointer;
  transition: opacity 0.12s ease;
}

.btn-primary:hover { opacity: 0.88; }

/* ---- Tooltips ---- */

.tooltip-wrap {
  position: relative;
  display: inline-flex;
  align-items: center;
}

.tooltip-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  padding: 0;
  font-size: 0.625rem;
  color: var(--color-mocha);
  background: none;
  border: none;
  border-radius: 50%;
  cursor: pointer;
  line-height: 1;
  transition: color 0.12s ease;
}

.tooltip-trigger:hover,
.tooltip-trigger:focus-visible {
  color: var(--color-primary);
  outline: 2px solid var(--color-primary);
  outline-offset: 1px;
}

.tooltip-popover {
  display: none;
  position: absolute;
  top: calc(100% + 6px);
  left: 0;
  z-index: 100;
  width: 260px;
  padding: 10px 12px;
  font-size: 0.75rem;
  line-height: 1.5;
  color: var(--color-text);
  background: var(--color-snow);
  border: 1px solid var(--color-border);
  border-radius: 6px;
  box-shadow: 0 4px 16px rgba(0,0,0,0.10);
  white-space: normal;
  pointer-events: none;
}

/* Show on hover OR when trigger is clicked (aria-expanded="true") */
.tooltip-wrap:hover .tooltip-popover,
.tooltip-trigger[aria-expanded="true"] ~ .tooltip-popover {
  display: block;
}

/* ---- Card accent (department color strip) ---- */

.org-card__accent {
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 4px;
  border-radius: var(--card-radius) 0 0 var(--card-radius);
  pointer-events: none;
  transition: width 0.15s ease;
}

.org-card:hover .org-card__accent {
  width: 5px;
}

/* ---- Color legend ---- */

.filter-row--legend {
  align-items: flex-start;
  flex-wrap: nowrap;
  gap: 8px;
}

.legend-items {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 14px;
}

.legend-item {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 0.75rem;
  color: var(--color-text);
  white-space: nowrap;
}

.legend-swatch {
  width: 10px;
  height: 10px;
  border-radius: 2px;
  flex-shrink: 0;
}

/* ---- Copy link, Export PDF, Manage Roles buttons ---- */

.copy-link-wrap {
  margin-left: 8px;
}

.export-pdf-wrap {
  margin-left: 4px;
}

.manage-roles-wrap {
  margin-left: 4px;
}

#copy-link-btn.copied {
  color: var(--color-primary);
  border-color: var(--color-primary);
}

/* ---- Search match highlight ---- */

.org-card--match {
  border-color: var(--color-primary) !important;
  box-shadow: 0 0 0 2px rgba(255, 74, 0, 0.25) !important;
}

.org-card--match .org-card__name {
  color: var(--color-primary);
}

/* ---- Modal ---- */

.modal-overlay {
  position: fixed;
  inset: 0;
  background: rgba(32, 27, 19, 0.6);
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
}

.modal {
  background: var(--color-snow);
  border: 1px solid var(--color-border);
  border-radius: 8px;
  padding: 28px 32px;
  width: min(400px, calc(100vw - 48px));
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.18);
}

.modal__title {
  font-size: 1rem;
  font-weight: 600;
  color: var(--color-text);
  margin-bottom: 8px;
}

.modal__desc {
  font-size: 0.8125rem;
  color: var(--color-text-muted);
  margin-bottom: 20px;
  line-height: 1.5;
}

.modal__field {
  margin-bottom: 14px;
}

.modal__label {
  display: block;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin-bottom: 5px;
}

.modal__input {
  width: 100%;
  height: 34px;
  padding: 0 10px;
  font-family: var(--font-body);
  font-size: 0.875rem;
  color: var(--color-text);
  background: var(--color-snow);
  border: 1px solid var(--color-border);
  border-radius: 4px;
  outline: none;
  transition: border-color 0.15s ease;
}

.modal__input:focus {
  border-color: var(--color-primary);
}

.modal__actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 20px;
}

/* Export modal extended styles */

.modal--export {
  width: min(520px, calc(100vw - 48px));
  max-height: calc(100vh - 48px);
  overflow-y: auto;
}

.modal__divider {
  border: none;
  border-top: 1px solid var(--color-border);
  margin: 16px 0 12px;
}

.modal__section-label {
  font-size: 0.6875rem;
  font-weight: 700;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  margin-bottom: 10px;
}

.modal__error {
  font-size: 0.75rem;
  color: #cc3300;
  margin-top: 4px;
}

.modal__radios {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
}

.modal__radio {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 0.8125rem;
  color: var(--color-text);
  cursor: pointer;
  white-space: nowrap;
}

.modal__radio input[type="radio"] {
  accent-color: var(--color-primary);
  cursor: pointer;
}

.modal__dept-checkboxes {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 14px;
  margin-top: 4px;
}

.modal__checkbox {
  display: flex;
  align-items: center;
  gap: 5px;
  font-size: 0.8125rem;
  color: var(--color-text);
  cursor: pointer;
  white-space: nowrap;
}

.modal__checkbox input[type="checkbox"] {
  accent-color: var(--color-primary);
  cursor: pointer;
}

/* ---- Manage Roles modal ---- */

.modal--roles {
  width: min(480px, calc(100vw - 48px));
  max-height: calc(100vh - 48px);
  overflow-y: auto;
}

.roles-list {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin: 16px 0 8px;
}

.role-row {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.role-row__label {
  font-size: 0.6875rem;
  font-weight: 600;
  color: var(--color-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.role-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  min-height: 20px;
  margin: 4px 0 2px;
}

.role-chip {
  display: inline-flex;
  align-items: center;
  gap: 3px;
  padding: 2px 4px 2px 8px;
  background: var(--color-sand);
  border: 1px solid var(--color-border);
  border-radius: 12px;
  font-size: 0.75rem;
  line-height: 1.3;
}

.role-chip__remove {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 16px;
  height: 16px;
  padding: 0;
  background: none;
  border: none;
  cursor: pointer;
  color: var(--color-text-muted);
  font-size: 0.875rem;
  line-height: 1;
  border-radius: 50%;
  flex-shrink: 0;
}

.role-chip__remove:hover {
  background: var(--color-hazelnut);
  color: var(--color-text);
}

.role-add-select {
  width: 100%;
  height: 30px;
  padding: 0 8px;
  font-family: var(--font-body);
  font-size: 0.8125rem;
  color: var(--color-text-muted);
  background: var(--color-snow);
  border: 1px dashed var(--color-border);
  border-radius: 4px;
  outline: none;
  cursor: pointer;
  margin-top: 2px;
}

.role-add-select:focus {
  border-color: var(--color-primary);
  color: var(--color-text);
}

.role-row__warning,
.role-row__conflict {
  font-size: 0.6875rem;
  margin: 0;
  padding: 1px 0;
}

.role-row__warning  { color: #cc3300; }
.role-row__conflict { color: #b06000; }

.roles-secondary-actions {
  display: flex;
  gap: 6px;
  margin-top: 10px;
  margin-bottom: 4px;
  align-items: center;
}

.btn-text--danger {
  color: #cc3300;
  border-color: #e5b8b0;
  margin-left: auto;
}

.btn-text--danger:hover {
  color: #aa2200;
  border-color: #cc3300;
}

/* ---- Print-only elements (hidden on screen) ---- */

.print-header,
.print-approval {
  display: none;
}

/* ---- Utility ---- */

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}

/* ---- Reduced motion ---- */

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

/* ---- Print ---- */

@media print {
  @page {
    size: A4 landscape;
    margin: 1.2cm;
  }

  html, body {
    height: auto;
    background: white;
  }

  body { display: block; }
  main { display: block; overflow: visible; }

  /* Hide all screen-only chrome */
  .site-header,
  .site-footer,
  .filter-bar,
  .filter-panel,
  .modal-overlay,
  #chart-container,
  #empty-state {
    display: none !important;
  }

  /* Show the print-only container */
  #print-container {
    display: block !important;
  }

  /* ---- Page layout ---- */

  .print-page {
    width: 100%;
    page-break-after: always;
    break-after: page;
  }

  .print-page--last {
    page-break-after: auto;
    break-after: auto;
  }

  /* ---- Full header (page 1) ---- */

  .print-header {
    display: block;
    margin-bottom: 10pt;
    page-break-inside: avoid;
    break-inside: avoid;
    page-break-after: avoid;
    break-after: avoid;
  }

  .print-header__brand {
    display: flex;
    align-items: center;
    gap: 12pt;
    margin-bottom: 6pt;
  }

  .print-header__logo {
    height: 28pt;
    width: auto;
  }

  .print-header__title {
    font-size: 13pt;
    font-weight: 700;
    color: #201B13;
    margin-bottom: 2pt;
  }

  .print-header__subtitle {
    font-size: 9pt;
    color: #55524E;
  }

  .print-header__meta {
    font-size: 7.5pt;
    color: #55524E;
    display: flex;
    gap: 8pt;
    align-items: center;
    margin-bottom: 3pt;
  }

  .print-sep { color: #D3C5BF; }

  .print-header__scope {
    font-size: 8pt;
    font-weight: 500;
    color: #201B13;
    margin-bottom: 3pt;
  }

  .print-header__hash-note {
    font-size: 6.5pt;
    color: #75665F;
    margin-bottom: 5pt;
    font-style: italic;
  }

  .print-rule {
    border: none;
    border-top: 0.5pt solid #D3C5BF;
    margin: 0;
  }

  /* ---- Abbreviated header (pages 2+) ---- */

  .print-page-abbr {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 8pt;
    padding-bottom: 5pt;
    border-bottom: 0.5pt solid #D3C5BF;
  }

  .print-page-abbr__label {
    font-size: 8pt;
    font-weight: 600;
    color: #201B13;
  }

  .print-page-abbr__quarter {
    font-size: 7.5pt;
    color: #55524E;
  }

  /* ---- Print tree (recursive subtree layout) ---- */

  .print-tree {
    margin: 6pt auto;
    display: flex;
    justify-content: center;
  }

  /* Each node + its own subtree of children, stacked vertically */
  .print-subtree {
    display: flex;
    flex-direction: column;
    align-items: center;
  }

  /* Children row: siblings arranged horizontally, no gap (segments must touch) */
  .print-subtree-children {
    display: flex;
    flex-direction: row;
    justify-content: center;
    align-items: flex-start;
    gap: 0;
  }

  /* Space above each child houses the tick; padding provides horizontal breathing room */
  .print-subtree-children > .print-subtree {
    padding: 8pt 2pt 0;
    position: relative;
    flex-shrink: 0;
  }

  /* Bus bar: each child contributes a segment; adjacent segments form one continuous bar.
     Segments touch because gap: 0 on .print-subtree-children. */
  .print-subtree-children > .print-subtree::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 0.5pt;
    background: #b0bec5;
  }
  /* First segment starts at card center (.print-subtree uses align-items:center so card
     center = 50% of subtree bounding box at every depth) */
  .print-subtree-children > .print-subtree:first-child::after { left: 50%; }
  /* Last segment ends at card center */
  .print-subtree-children > .print-subtree:last-child::after  { right: 50%; }
  /* Single child: drop line connects directly, no bus bar */
  .print-subtree-children--single > .print-subtree::after { display: none; }

  /* Tick: vertical line rising from bus bar level into each child card */
  .print-subtree-children > .print-subtree > .print-card::before {
    content: '';
    position: absolute;
    top: -8pt;
    left: 50%;
    transform: translateX(-0.25pt);
    width: 0.5pt;
    height: 8pt;
    background: #b0bec5;
  }

  /* Drop line: vertical connector between parent card and children bus bar */
  .print-drop-line {
    width: 0.5pt;
    height: 8pt;
    background: #b0bec5;
    margin: 0 auto;
  }

  .print-card {
    width: 90pt;
    padding: 4pt 6pt;
    background: white;
    border: 0.5pt solid #D3C5BF;
    border-radius: 3pt;
    text-align: left;
    position: relative;
    page-break-inside: avoid;
    break-inside: avoid;
  }

  .print-card--root {
    background: #FF4A00;
    border-color: #FF4A00;
    padding: 8pt 7pt;  /* extra vertical padding — CEO card was cramped */
  }

  .print-card__accent {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 3pt;
    border-radius: 3pt 0 0 3pt;
  }

  .print-card__name {
    font-size: 7.5pt;
    font-weight: 700;
    color: #201B13;
    margin-bottom: 2pt;
    word-break: break-word;
    line-height: 1.2;
  }

  .print-card--root .print-card__name {
    color: white;
    margin-bottom: 4pt;  /* more breathing room between name and position */
  }

  .print-card__position {
    font-size: 6pt;
    color: #4E403B;
    line-height: 1.3;
    word-break: break-word;
  }

  .print-card--root .print-card__position { color: rgba(255,255,255,0.88); }

  .print-card__dept {
    font-size: 5.5pt;
    color: #55524E;
    margin-top: 2pt;
  }

  .print-card--root .print-card__dept { color: rgba(255,255,255,0.72); }

  /* ---- Approval block ---- */

  .print-approval {
    display: block;
    margin-top: 18pt;
    page-break-inside: avoid;
    break-inside: avoid;
  }

  .print-approval__heading {
    font-size: 8pt;
    font-weight: 600;
    color: #55524E;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    margin: 8pt 0;
  }

  .print-approval__name {
    font-size: 11pt;
    font-weight: 600;
    color: #201B13;
    margin-bottom: 2pt;
  }

  .print-approval__role {
    font-size: 8.5pt;
    color: #55524E;
    margin-bottom: 3pt;
  }

  .print-approval__date {
    font-size: 6.5pt;
    color: #75665F;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin-bottom: 10pt;
  }

  .print-approval__hash-note {
    font-size: 6.5pt;
    color: #75665F;
    font-style: italic;
    margin-bottom: 4pt;
  }

  .print-approval__hash {
    font-size: 6.5pt;
    color: #75665F;
    word-break: break-all;
  }

  .print-hash-break {
    font-family: 'Courier New', monospace;
    font-size: 6.5pt;
    word-break: break-all;
  }

  /* ---- Print role badges ---- */

  .print-card__roles {
    display: flex;
    flex-wrap: wrap;
    gap: 1.5pt;
    margin-top: 2pt;
  }

  .print-role-badge {
    font-size: 5pt;
    font-weight: 700;
    padding: 0.5pt 2.5pt;
    border-radius: 2pt;
    color: #fff;
    white-space: normal;
    word-break: break-word;
    max-width: 100%;
    line-height: 1.15;
  }

  .print-role-badge--risk_committee_chair    { background: #7B5C9E; }
  .print-role-badge--risk_committee_member   { background: #9E7BC0; }
  .print-role-badge--info_security_officer   { background: #2B7A78; }
  .print-role-badge--privacy_officer         { background: #5D7286; }
  .print-role-badge--compliance_officer      { background: #B08B3C; }
}
