/*
 * Operator interface styles — served from our own origin only (spec 20
 * §Interface integrity 4: no external font/style). System font stack, no
 * @import, no url() to any third-party origin.
 *
 * Risk and environment signalling never rely on colour alone (spec 20 §Rendering
 * rule 6, §Environment binding 3): each carries a shape/pattern class and a text
 * label, so the styling below is redundant with, not a substitute for, the
 * label/shape tokens the Rust view-models emit.
 */

:root {
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --danger: #b00020;
  --caution: #8a6d00;
  --info: #35506b;
}

body {
  margin: 0;
  line-height: 1.5;
}

/* The persistent environment banner. Production vs non-production is
   distinguished by a border PATTERN (solid vs hatched), not colour alone. */
#environment-banner {
  padding: 0.5rem 1rem;
  font-weight: 600;
  border-bottom: 4px solid currentColor;
}
#environment-banner.pattern-solid-bar {
  border-bottom-style: solid;
}
#environment-banner.pattern-hatched-bar {
  border-bottom-style: dashed;
}

/* Risk badges: the glyph (shape token) precedes the label so the level is
   perceivable without colour. */
.risk-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}
.risk-badge.level-danger {
  color: var(--danger);
}
.risk-badge.level-caution {
  color: var(--caution);
}
.risk-badge.level-info {
  color: var(--info);
}

/* Digests and addresses are shown in a monospace font at full length in any
   confirming view (spec 20 §Rendering rule 5); truncation is display-only and
   never hides the full value. */
.digest,
.address {
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  word-break: break-all;
}

/* Keyboard focus is always visible — every security-relevant control is
   keyboard-operable (spec 20 §Rendering rule 7). */
:focus-visible {
  outline: 3px solid var(--info);
  outline-offset: 2px;
}
