/* Components built from tokens.css. Plain CSS, no framework. */
*, *::before, *::after { box-sizing: border-box; }

html { font-size: 100%; }

body {
  margin: 0;
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: var(--line-height);
  color: var(--color-ink);
  background: var(--color-paper);
}
/* room for the persistent report bar, on every screen that renders it */
body:has(.report-bar) { padding-bottom: calc(var(--report-bar-height) + var(--space-3)); }

h1 { font-size: var(--text-h1); line-height: 1.25; margin: var(--space-5) 0 var(--space-3); }
h2 { font-size: var(--text-h2); line-height: 1.3; }
a { color: var(--color-link); }
p { max-width: var(--measure); }

main { padding: var(--space-4); max-width: 60rem; margin: 0 auto; }
main:focus { outline: none; }

.skip-link {
  position: absolute;
  left: var(--space-2);
  top: -100px;
  background: var(--color-paper);
  padding: var(--space-3) var(--space-4);
  z-index: 20;
}
.skip-link:focus { top: var(--space-2); }

:focus-visible {
  outline: var(--focus-width) solid var(--focus-color);
  outline-offset: var(--focus-offset);
}

/* Mode banner (ERR-03): persistent, text plus colour plus icon */
.mode-banner {
  display: flex;
  gap: var(--space-2);
  align-items: flex-start;
  padding: var(--space-3) var(--space-4);
  background: var(--status-warning-bg);
  color: var(--status-warning-text);
  border-bottom: 3px solid var(--status-warning-border);
}
.mode-banner .status-icon { flex: none; margin-top: 2px; }

.site-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
  padding: var(--space-2) var(--space-4);
  border-bottom: 1px solid var(--color-border);
}
.site-name { font-weight: 700; margin: 0; margin-right: auto; }
nav ul { display: flex; flex-wrap: wrap; gap: var(--target-gap); list-style: none; margin: 0; padding: 0; }
nav a {
  display: inline-flex;
  align-items: center;
  min-height: var(--target-min);
  min-width: var(--target-min);
  padding: 0 var(--space-3);
  color: var(--color-link);
}
nav a[aria-current="page"] { font-weight: 700; text-decoration: underline; }
.signout { margin: 0; }

/* Buttons */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: var(--target-min);
  min-width: var(--target-min);
  padding: 0 var(--space-4);
  font: inherit;
  font-weight: 600;
  border: 2px solid var(--color-primary);
  border-radius: 6px;
  cursor: pointer;
  text-decoration: none;
  transition: background-color var(--motion-fast);
}
.btn-primary { background: var(--color-primary); color: var(--color-on-primary); }
.btn-secondary { background: var(--color-paper); color: var(--color-primary); }
.btn-field { min-height: var(--target-field); width: 100%; font-size: var(--text-field); }

/* Persistent "Report something" (DIS-01): fixed to the bottom edge, full width on phones */
.report-bar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  padding: var(--space-3) var(--space-4) calc(var(--space-3) + var(--safe-bottom));
  background: var(--color-paper);
  border-top: 1px solid var(--color-border);
  z-index: 10;
}
@media (min-width: 48rem) {
  body:has(.report-bar) { padding-bottom: calc(var(--target-field) + var(--space-5) * 2); }
  .report-bar { padding-bottom: 0; left: auto; right: var(--space-5); bottom: var(--space-5); padding: 0; background: none; border: 0; }
  .report-bar .btn-field { width: auto; padding: 0 var(--space-5); }
}

/* Persona list (sign-in) */
.persona-list ul { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--target-gap); max-width: var(--measure); }
.btn-persona {
  width: 100%;
  min-height: var(--target-field);
  flex-direction: column;
  align-items: flex-start;
  text-align: left;
  padding: var(--space-2) var(--space-4);
  background: var(--color-surface);
  color: var(--color-ink);
  border-color: var(--color-border);
}
.btn-persona:hover { background: var(--color-paper); }
.persona-name { font-size: var(--text-field); }
.persona-role { font-weight: 400; color: var(--color-ink-muted); }

/* Status component (ACC-02): colour plus icon plus text */
.status {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  padding: var(--space-1) var(--space-3);
  border: 2px solid;
  border-radius: 999px;
  font-weight: 600;
  max-width: 100%;
}
/* list pills carry short labels and never wrap; the long explanation is a line beside the pill */
.card-list .status, table.data .status { white-space: nowrap; }
.status .status-icon { flex: none; }
.status-critical { background: var(--status-critical-bg); color: var(--status-critical-text); border-color: var(--status-critical-border); }
.status-warning { background: var(--status-warning-bg); color: var(--status-warning-text); border-color: var(--status-warning-border); }
.status-success { background: var(--status-success-bg); color: var(--status-success-text); border-color: var(--status-success-border); }
.status-information { background: var(--status-information-bg); color: var(--status-information-text); border-color: var(--status-information-border); }

.site-footer { padding: var(--space-4); color: var(--color-ink-muted); font-size: var(--text-base); }

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
}

/* Tables, filters and field groups (CPX-03) */
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.filter, .picker { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; margin: var(--space-3) 0; }
.filter label, .picker label { flex-basis: 100%; font-weight: 600; }
input[type="search"], select, textarea {
  min-height: var(--target-min);
  padding: var(--space-2) var(--space-3);
  font: inherit;
  border: 2px solid var(--color-border);
  border-radius: 6px;
  max-width: 100%;
}
textarea { width: 100%; max-width: var(--measure); }
table.data { width: 100%; border-collapse: collapse; margin: var(--space-3) 0; }
table.data th, table.data td { text-align: left; vertical-align: top; padding: var(--space-2) var(--space-3); border-bottom: 1px solid var(--color-border); }
.plain { list-style: none; margin: 0; padding: 0; }
.muted { color: var(--color-ink-muted); }
.field-group { border: 1px solid var(--color-border); border-radius: 6px; padding: 0 var(--space-4) var(--space-3); margin: var(--space-3) 0; }
.long-text { white-space: pre-wrap; }
@media (max-width: 40rem) { table.data:not(.has-cards) { display: block; overflow-x: auto; } }

/* registers */
.stack > * + * { margin-top: var(--space-3); }
.field label, .control-row label { display: block; font-weight: 600; margin-bottom: var(--space-1); }
.field .hint, .hint { color: var(--color-ink-muted); margin: 0 0 var(--space-1); }
input[type="text"], input[type="date"] {
  min-height: var(--target-min);
  padding: var(--space-2) var(--space-3);
  font: inherit;
  border: 2px solid var(--color-border);
  border-radius: 6px;
  max-width: 100%;
  width: 100%;
  max-width: var(--measure);
}
.field-error { min-height: 1.5em; margin: var(--space-1) 0 0; }
.error-summary { border: 2px solid var(--status-critical-border); border-radius: 6px; padding: var(--space-3) var(--space-4); margin: var(--space-3) 0; }
.error-summary h2 { margin-top: 0; }
.definitions dt { font-weight: 600; }
.definitions dd { margin: 0 0 var(--space-1); }
.facts dt { font-weight: 600; }
.facts dd { margin: 0 0 var(--space-2); }
.entity-type { display: inline-block; font-size: var(--text-small); font-weight: 600; border: 2px solid var(--color-border); border-radius: 6px; padding: 0 var(--space-2); margin-right: var(--space-2); }
.register-tiles { display: grid; gap: var(--space-3); max-width: var(--measure); }
.tile { border: 1px solid var(--color-border); border-radius: 6px; padding: var(--space-2) var(--space-4); }
.tile h2 { margin: var(--space-2) 0; }
.control-row { margin-bottom: var(--space-3); }

/* Phone header (PLATFORM-09): one row, wordmark left, Menu right. From 600 px the links are inline. */
.site-menu { display: block; position: relative; }
.site-menu > summary {
  display: inline-flex; align-items: center; justify-content: center; min-height: var(--target-min); min-width: var(--target-min);
  padding: 0 var(--space-4); font-weight: 600; color: var(--color-primary); border: 2px solid var(--color-primary);
  border-radius: 6px; cursor: pointer; list-style: none;
}
.site-menu > summary::-webkit-details-marker { display: none; }
.site-menu[open] > summary { background: var(--color-primary); color: var(--color-on-primary); }
.site-menu-panel {
  position: absolute; right: 0; top: calc(100% + var(--space-2)); z-index: 30; width: min(20rem, calc(100vw - var(--space-4) * 2));
  padding: var(--space-3) var(--space-4); background: var(--color-paper); border: 2px solid var(--color-border);
  border-radius: 6px; box-shadow: 0 4px 12px rgba(20, 32, 43, 0.25);
}
.site-menu-who { margin: 0 0 var(--space-2); color: var(--color-ink-muted); }
.site-menu nav ul { flex-direction: column; flex-wrap: nowrap; gap: 0; }
.site-menu nav a { width: 100%; }
.site-menu .signout .btn { width: 100%; margin-top: var(--space-2); }
.site-header { flex-wrap: nowrap; }
.site-nav-inline, .more-menu { display: none; }
.more-menu { position: relative; }
.more-menu > summary {
  display: inline-flex; align-items: center; justify-content: center; min-height: var(--target-min); min-width: var(--target-min);
  padding: 0 var(--space-4); font-weight: 600; color: var(--color-primary); border: 2px solid var(--color-primary);
  border-radius: 6px; cursor: pointer; list-style: none;
}
.more-menu > summary::-webkit-details-marker { display: none; }
.more-menu[open] > summary { background: var(--color-primary); color: var(--color-on-primary); }
.more-menu-panel {
  position: absolute; right: 0; top: calc(100% + var(--space-2)); z-index: 30; width: 16rem;
  padding: var(--space-3) var(--space-4); background: var(--color-paper); border: 2px solid var(--color-border);
  border-radius: 6px; box-shadow: 0 4px 12px rgba(20, 32, 43, 0.25);
}
.more-menu nav ul { flex-direction: column; flex-wrap: nowrap; gap: 0; }
.more-menu nav a { width: 100%; }
.more-menu .signout .btn { width: 100%; margin-top: var(--space-2); }
@media (min-width: 37.5rem) {
  .site-header { flex-wrap: wrap; }
  .site-menu { display: none; }
  .site-nav-inline { display: block; }
  .more-menu { display: block; }
}

/* Card list for every list screen (PLATFORM-09): cards below 600 px, the table from 600 px */
.card-list { display: none; list-style: none; margin: var(--space-3) 0; padding: 0; gap: var(--target-gap); max-width: var(--measure); }
.card-list-always { display: grid; }
.list-card { padding: var(--space-3) var(--space-4); border: 2px solid var(--color-border); border-radius: 6px; background: var(--color-surface); min-width: 0; }
.list-card p { margin: 0 0 var(--space-2); overflow-wrap: anywhere; }
.card-title { font-size: var(--text-field); }
.card-title a { display: inline-block; min-height: var(--target-min); line-height: var(--target-min); }
.card-detail { color: var(--color-ink-muted); }
.card-facts { margin: 0; display: grid; gap: var(--space-1); }
.card-facts > div { display: flex; flex-wrap: wrap; gap: var(--space-1) var(--space-2); }
.card-facts dt { font-weight: 600; }
.card-facts dt::after { content: ":"; }
.card-facts dd { margin: 0; overflow-wrap: anywhere; }
@media (max-width: 37.49rem) {
  .card-list { display: grid; }
  table.data.has-cards { display: none; }
}
@media (min-width: 37.5rem) { .card-list:not(.card-list-always) { display: none; } }

/* A link that stands alone is a touch target (FLD-01); a link inside a sentence is not */
.link-btn { display: inline-flex; align-items: center; min-height: var(--target-min); padding: 0 var(--space-2); }
main details > summary { display: flex; align-items: center; min-height: var(--target-min); cursor: pointer; color: var(--color-link); text-decoration: underline; }
table.data td a, table.data th a { display: inline-flex; align-items: center; min-height: var(--target-min); }

/* Long words wrap instead of forcing sideways scroll at 320 px with text at 200% (ACC-03) */
h1, h2, h3, legend, label, dt, dd, summary, .queue-row, .outcome-choice span,
main p, main li, main strong, main span { overflow-wrap: anywhere; }
.notifiable-title > *, .notifiable-chip > * { min-width: 0; }
