:root {
  color-scheme: light;
  --canvas: #c9cdd0;
  --chrome: #26343b;
  --chrome-strong: #17242a;
  --panel: #f4f5f4;
  --panel-muted: #e5e8e7;
  --panel-strong: #ffffff;
  --ink: #172126;
  --muted: #4b5960;
  --quiet: #637178;
  --line: #637178;
  --line-strong: #56666d;
  --accent: #075f87;
  --accent-strong: #034664;
  --accent-soft: #c7e0ec;
  --normal: #315e50;
  --normal-soft: #dfe9e5;
  --warning: #714400;
  --warning-soft: #f2d58b;
  --alarm: #a11f24;
  --alarm-strong: #781419;
  --alarm-soft: #f4d8d9;
  --focus: #0067b1;
  --shadow: 0 1px 2px rgb(23 33 38 / 18%);
  --font-ui: Inter, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --font-data: "Cascadia Mono", "SFMono-Regular", Consolas, "Liberation Mono", monospace;
  --control-height: 2.75rem;
}

* { box-sizing: border-box; }
html { min-width: 20rem; background: var(--canvas); scroll-padding-top: 7rem; }
body {
  margin: 0;
  min-height: 100vh;
  background: var(--canvas);
  color: var(--ink);
  font-family: var(--font-ui);
  font-size: 1rem;
  line-height: 1.4;
}
button, input, select { font: inherit; }
button, a { -webkit-tap-highlight-color: transparent; }
button { white-space: nowrap; }
svg { display: block; }
[hidden] { display: none !important; }

.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;
}

.skip-link {
  position: fixed;
  inset-block-start: 0.5rem;
  inset-inline-start: 0.5rem;
  z-index: 100;
  translate: 0 -150%;
  padding: 0.75rem 1rem;
  background: var(--panel-strong);
  color: var(--ink);
  border: 2px solid var(--focus);
  font-weight: 700;
}
.skip-link:focus { translate: 0; }

:focus-visible {
  outline: 3px solid var(--focus);
  outline-offset: 2px;
}

.app-header {
  min-height: 4rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 2rem;
  padding-inline: 1.25rem;
  background: var(--chrome);
  color: #f7f9f9;
  border-bottom: 1px solid var(--chrome-strong);
}
.brand {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  min-width: 0;
}
.brand-mark {
  width: 2rem;
  height: 2rem;
  flex: 0 0 auto;
  fill: none;
  stroke: #d8e2e6;
  stroke-width: 1.75;
}
.brand strong { display: block; font-size: 1rem; font-weight: 700; letter-spacing: 0.01em; }
.utility-nav { display: flex; align-items: center; gap: 1.25rem; flex: 0 0 auto; }
.utility-nav a,
.text-button {
  min-height: var(--control-height);
  display: inline-flex;
  align-items: center;
  border: 0;
  background: transparent;
  color: #e8edef;
  font-size: 0.875rem;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
}
.utility-nav a:hover,
.text-button:hover { color: #ffffff; }
.utility-nav form { margin: 0; }
.operator-id {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  color: #d9e3e6;
  font: 0.875rem/1 var(--font-data);
}
.operator-id > span { color: #92b7c8; font-size: 0.75rem; }

.workspace-nav {
  min-height: 2.75rem;
  display: flex;
  align-items: stretch;
  padding-inline: 1.25rem;
  overflow-x: auto;
  background: #d7dbdc;
  border-bottom: 1px solid var(--line-strong);
}
.workspace-nav a {
  min-height: 2.75rem;
  display: inline-flex;
  align-items: center;
  padding-inline: 1rem;
  color: var(--ink);
  border-inline-start: 1px solid transparent;
  border-inline-end: 1px solid transparent;
  border-bottom: 0.25rem solid transparent;
  font-size: 1rem;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}
.workspace-nav a:hover { background: #e7e9e9; }
.workspace-nav a.current {
  background: var(--panel-strong);
  border-inline-color: #abb3b6;
  border-bottom-color: var(--accent);
  font-weight: 800;
}

.alarm-banner {
  min-height: 2.75rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.375rem 1.25rem;
  background: var(--normal-soft);
  color: #173b30;
  border-bottom: 1px solid #8da79d;
}
.alarm-banner.alarm {
  background: var(--alarm);
  color: #ffffff;
  border-color: var(--alarm-strong);
}
.alarm-banner.warning {
  background: var(--warning-soft);
  color: #4e2e00;
  border-color: #9f751f;
}
.alarm-summary { min-width: 0; display: flex; align-items: center; gap: 0.75rem; }
.alarm-summary strong { font-size: 0.875rem; }
.alarm-summary span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.875rem; }
.alarm-icon { width: 1.25rem; height: 1.25rem; fill: none; stroke: currentColor; stroke-width: 2; flex: 0 0 auto; }
.alarm-banner.normal .alarm-icon path:first-child { display: none; }
.alarm-banner.normal .alarm-icon { border: 2px solid currentColor; border-radius: 50%; }
.alarm-toggle {
  min-height: 2.75rem;
  padding-inline: 0.75rem;
  border: 1px solid currentColor;
  background: transparent;
  color: inherit;
  font-size: 1rem;
  font-weight: 700;
  cursor: pointer;
  flex: 0 0 auto;
}
.alarm-toggle:hover { background: rgb(255 255 255 / 18%); }

.system-strip {
  min-height: 2.25rem;
  display: flex;
  align-items: center;
  gap: 1.5rem;
  padding-inline: 1.25rem;
  background: var(--chrome-strong);
  color: #c0cbd0;
  border-bottom: 1px solid #0e181d;
  font: 0.75rem/1.2 var(--font-data);
}
.system-item { display: inline-flex; align-items: center; gap: 0.4rem; white-space: nowrap; }
.system-item b, .system-strip time { color: #f2f5f6; font-weight: 600; }
.state-indicator { width: 0.65rem; height: 0.65rem; border: 2px solid #c8d1d5; background: transparent; }
.state-indicator.normal { background: #d9e3e6; }
.state-indicator.alarm { background: #ff5b5f; border-color: #ffffff; }
.update-time { margin-inline-start: auto; }
.system-strip time { white-space: nowrap; }

.app-shell {
  min-height: calc(100vh - 11.75rem);
  display: grid;
  grid-template-columns: 17rem minmax(0, 1fr);
}
.plant-rail {
  min-width: 0;
  display: flex;
  flex-direction: column;
  background: #dde0e1;
  border-inline-end: 1px solid var(--line-strong);
}
.rail-header { padding: 1rem; border-bottom: 1px solid var(--line); }
.rail-header h2 {
  margin: 0;
  font-size: 1.125rem;
  line-height: 1.15;
}
.device-list { display: block; }
.device-button {
  width: 100%;
  min-height: 5rem;
  display: grid;
  grid-template-columns: 0.75rem minmax(0, 1fr) auto;
  align-items: start;
  gap: 0.75rem;
  padding: 1rem;
  background: transparent;
  color: var(--ink);
  border: 0;
  border-bottom: 1px solid #aab2b6;
  text-align: start;
  cursor: pointer;
}
.device-button:hover { background: #e9ebeb; }
.device-button.selected {
  background: var(--accent-soft);
  box-shadow: inset 0.3rem 0 var(--accent);
}
.device-status {
  width: 0.7rem;
  height: 0.7rem;
  margin-top: 0.2rem;
  border: 2px solid var(--line-strong);
  background: transparent;
}
.device-button.online .device-status { background: #f8faf9; }
.device-button.offline .device-status { border-color: var(--alarm); background: var(--alarm); }
.device-copy { min-width: 0; }
.device-copy b { display: block; font-size: 0.875rem; line-height: 1.25; overflow-wrap: anywhere; }
.device-copy span { display: block; margin-top: 0.25rem; color: var(--muted); font-size: 0.75rem; line-height: 1.35; }
.device-unit { color: var(--quiet); font: 0.6875rem/1.3 var(--font-data); }
.rail-footer {
  margin-top: auto;
  display: grid;
  grid-template-columns: 1fr 1fr;
  border-top: 1px solid var(--line-strong);
  background: #d1d5d6;
}
.rail-footer div { padding: 1rem; }
.rail-footer div + div { border-inline-start: 1px solid var(--line); }
.rail-footer span { display: block; color: var(--muted); font-size: 0.75rem; }
.rail-footer strong { display: block; margin-top: 0.35rem; font: 1.25rem/1 var(--font-data); }

.workspace { min-width: 0; }
.view-header {
  min-height: 5rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 2rem;
  padding: 1.5rem;
  background: #e3e6e6;
  border-bottom: 1px solid var(--line-strong);
}
.view-header h1 {
  margin: 0;
  max-width: 50rem;
  font-size: clamp(1.5rem, 2.5vw, 1.75rem);
  line-height: 1;
  text-wrap: balance;
}
.view-actions { display: flex; align-items: center; gap: 1rem; flex: 0 0 auto; }

.primary-button,
.secondary-button {
  min-height: var(--control-height);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding-inline: 1rem;
  border: 1px solid transparent;
  font-size: 1rem;
  font-weight: 700;
  line-height: 1;
  cursor: pointer;
  flex-shrink: 0;
}
.primary-button { background: var(--accent); color: #ffffff; border-color: var(--accent-strong); }
.primary-button:hover { background: var(--accent-strong); }
.secondary-button { background: var(--panel-strong); color: var(--ink); border-color: var(--line-strong); }
.secondary-button:hover { background: var(--panel-muted); }
.primary-button:active,
.secondary-button:active { box-shadow: inset 0 2px 4px rgb(0 0 0 / 24%); }
.primary-button:disabled,
.secondary-button:disabled { opacity: 0.58; cursor: not-allowed; }
.secondary-button svg { width: 1.1rem; height: 1.1rem; fill: none; stroke: currentColor; stroke-width: 2; }

.alarm-panel { margin: 1rem 1rem 0; background: var(--panel); border: 2px solid var(--alarm); box-shadow: var(--shadow); }
.alarm-list { border-top: 1px solid var(--line); }
.alarm-row {
  display: grid;
  grid-template-columns: 6rem minmax(10rem, 1fr) minmax(10rem, 2fr) 8rem;
  gap: 1rem;
  align-items: center;
  min-height: 3rem;
  padding: 0.5rem 1rem;
  border-bottom: 1px solid #b6bec1;
  font-size: 0.875rem;
}
.alarm-row:last-child { border-bottom: 0; }
.alarm-severity { display: inline-flex; width: max-content; padding: 0.25rem 0.5rem; background: var(--alarm); color: #ffffff; font-size: 0.75rem; font-weight: 800; text-transform: uppercase; }
.alarm-row.warning .alarm-severity { background: var(--warning); }
.alarm-row strong, .alarm-row code { font-family: var(--font-data); }
.alarm-row code { color: var(--muted); font-size: 0.8125rem; }
.workspace-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 22rem;
  align-items: start;
  gap: 1rem;
  padding: 1rem;
}
.primary-column, .detail-column { min-width: 0; display: grid; gap: 1rem; }
.detail-column { position: sticky; inset-block-start: 1rem; }
.panel { min-width: 0; background: var(--panel); border: 1px solid var(--line-strong); box-shadow: var(--shadow); }
.panel-heading {
  min-height: 4.25rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.75rem 1rem;
  background: var(--panel-muted);
  border-bottom: 1px solid var(--line);
}
.panel-heading h2 { margin: 0; font-size: 1.125rem; line-height: 1.15; }
.panel-subtitle { margin: 0.35rem 0 0; color: var(--muted); font: 0.75rem/1.3 var(--font-data); }
.count-badge {
  display: inline-flex;
  width: max-content;
  padding: 0.3rem 0.5rem;
  background: #d4d9da;
  border: 1px solid var(--line);
  color: var(--muted);
  font: 0.75rem/1 var(--font-data);
}
.quality-cluster { display: flex; align-items: center; gap: 0.75rem; }
.quality-cluster > span:last-child { color: var(--muted); font-size: 0.75rem; text-align: end; }
.quality-badge { display: inline-flex; width: max-content; padding: 0.35rem 0.6rem; border: 1px solid var(--line-strong); color: var(--muted); font-size: 0.75rem; font-weight: 800; text-transform: uppercase; }
.quality-badge.good { background: var(--normal-soft); color: #24483d; border-color: #66887d; }
.quality-badge.bad { background: var(--alarm); color: #ffffff; border-color: var(--alarm-strong); }

.process-path {
  display: grid;
  grid-template-columns: minmax(8rem, 1fr) minmax(5rem, 0.6fr) minmax(10rem, 1.1fr) minmax(5rem, 0.6fr) minmax(8rem, 1fr);
  align-items: center;
  min-height: 12rem;
  padding: 1.5rem;
  border-bottom: 1px solid var(--line);
  background-color: #eef0ef;
  background-image: linear-gradient(#d9dddc 1px, transparent 1px), linear-gradient(90deg, #d9dddc 1px, transparent 1px);
  background-size: 1.5rem 1.5rem;
}
.process-node {
  min-height: 7.5rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.35rem;
  padding: 0.75rem;
  background: var(--panel-strong);
  border: 2px solid var(--line-strong);
  text-align: center;
}
.process-node small { color: var(--muted); font-size: 0.75rem; }
.process-node strong { max-width: 15rem; font-size: 0.875rem; line-height: 1.3; }
.process-node span:last-child { color: var(--muted); font-size: 0.75rem; }
.controller-node { border-color: var(--accent); box-shadow: inset 0 -0.3rem var(--accent-soft); }
.controller-node svg { width: 2.75rem; height: 2.75rem; fill: #e8eef1; stroke: var(--accent-strong); stroke-width: 1.8; }
.node-symbol {
  width: 2.75rem;
  height: 2.75rem;
  display: grid;
  place-items: center;
  border: 2px solid var(--line-strong);
  border-radius: 50%;
  background: #f9faf9;
  font: 0.75rem/1 var(--font-data);
  font-weight: 800;
}
.signal-line { position: relative; height: 2px; background: var(--line-strong); }
.signal-line::after {
  content: "";
  position: absolute;
  inset-inline-end: -1px;
  inset-block-start: 50%;
  width: 0.6rem;
  height: 0.6rem;
  border-block-start: 2px solid var(--line-strong);
  border-inline-end: 2px solid var(--line-strong);
  transform: translateY(-50%) rotate(45deg);
}
.signal-line span {
  position: absolute;
  inset-block-end: 0.5rem;
  inset-inline-start: 50%;
  translate: -50% 0;
  padding: 0.15rem 0.35rem;
  background: #eef0ef;
  color: var(--muted);
  font: 0.6875rem/1 var(--font-data);
  white-space: nowrap;
}

.value-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.value-card { min-width: 0; padding: 1rem; border-inline-end: 1px solid var(--line); }
.value-card:last-child { border-inline-end: 0; }
.value-card header { display: flex; align-items: start; justify-content: space-between; gap: 0.75rem; }
.value-card header span { color: var(--muted); font: 0.75rem/1.2 var(--font-data); overflow-wrap: anywhere; }
.value-card header small { padding: 0.2rem 0.35rem; border: 1px solid var(--line); color: var(--muted); font-size: 0.6875rem; font-weight: 700; }
.value-reading { display: flex; align-items: baseline; gap: 0.5rem; margin-top: 0.8rem; }
.value-reading strong { font: 2rem/1 var(--font-data); font-variant-numeric: tabular-nums; }
.value-reading span { color: var(--muted); font: 0.875rem/1 var(--font-data); }
.value-label { margin: 0.5rem 0 0; color: var(--muted); font-size: 0.875rem; }

.trend-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.trend-card { min-width: 0; padding: 1rem; border-inline-end: 1px solid var(--line); }
.trend-card:last-child { border-inline-end: 0; }
.trend-card header { display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem; }
.trend-card h3 { margin: 0; font-size: 0.875rem; line-height: 1.2; font-family: var(--font-data); overflow-wrap: anywhere; }
.trend-card header span { color: var(--muted); font: 0.75rem/1 var(--font-data); }
.trend-card svg { width: 100%; height: 6.5rem; margin-top: 0.75rem; background: #ffffff; border: 1px solid var(--line); }
.trend-gridline { stroke: #d8ddde; stroke-width: 1; }
.trend-path { fill: none; stroke: var(--accent); stroke-width: 2; vector-effect: non-scaling-stroke; }
.trend-end { fill: var(--accent-strong); }
.trend-scale { display: flex; justify-content: space-between; margin-top: 0.35rem; color: var(--muted); font: 0.6875rem/1 var(--font-data); }

.table-wrap { position: relative; max-width: 100%; overflow: auto; }
table { width: 100%; border-collapse: collapse; white-space: nowrap; font-variant-numeric: tabular-nums; }
th {
  padding: 0.65rem 0.8rem;
  background: #dce0e0;
  color: var(--muted);
  border-bottom: 1px solid var(--line-strong);
  font-size: 0.75rem;
  font-weight: 800;
  letter-spacing: 0.06em;
  text-align: start;
  text-transform: uppercase;
}
td { padding: 0.7rem 0.8rem; border-bottom: 1px solid #c3c9cb; font-size: 0.875rem; }
tbody tr:last-child td { border-bottom: 0; }
tbody tr:nth-child(even) { background: #eceeed; }
tbody tr:hover { background: #dde8ed; }
tbody tr.updated { box-shadow: inset 0.25rem 0 var(--accent); background: var(--accent-soft); }
.numeric { text-align: end; }
.reference { color: var(--muted); font: 0.75rem/1 var(--font-data); }
.tag-cell b { display: block; font: 0.8125rem/1.2 var(--font-data); }
.tag-cell small { display: block; margin-top: 0.2rem; color: var(--muted); font-size: 0.75rem; }
.reading { text-align: end; font: 0.9375rem/1 var(--font-data); font-weight: 700; }
.reading small { margin-inline-start: 0.35rem; color: var(--muted); font-size: 0.75rem; }
.quality-text { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.75rem; font-weight: 800; }
.quality-text::before { content: ""; width: 0.55rem; height: 0.55rem; border: 2px solid var(--line-strong); }
.quality-text.good::before { background: #ffffff; }
.quality-text.bad { color: var(--alarm); }
.quality-text.bad::before { background: var(--alarm); border-color: var(--alarm); }
.access { color: var(--muted); font-size: 0.75rem; }
.write-link {
  min-height: 2.75rem;
  padding-inline: 0.7rem;
  border: 1px solid var(--accent-strong);
  background: #ffffff;
  color: var(--accent-strong);
  font-size: 1rem;
  font-weight: 800;
  cursor: pointer;
}
.write-link:hover { background: var(--accent-soft); }
.empty-state { padding: 2.5rem; color: var(--muted); text-align: center; }

.compact-heading { min-height: 4rem; }
.identity-list { margin: 0; padding: 0 1rem; }
.identity-list div { padding-block: 0.75rem; border-bottom: 1px solid #c3c9cb; }
.identity-list div:last-child { border-bottom: 0; }
.identity-list dt { color: var(--muted); font-size: 0.75rem; }
.identity-list dd { margin: 0.25rem 0 0; font: 0.8125rem/1.4 var(--font-data); overflow-wrap: anywhere; }
.write-panel form { padding: 1rem; }
.write-target { padding-bottom: 1rem; border-bottom: 1px solid var(--line); }
.write-target small { display: block; color: var(--accent-strong); font: 0.75rem/1 var(--font-data); }
.write-target strong { display: block; margin-top: 0.5rem; font: 1rem/1.2 var(--font-data); }
.write-target span { display: block; margin-top: 0.35rem; color: var(--muted); font-size: 0.875rem; }
.field-group { display: block; margin-top: 1.25rem; }
.field-group > span { display: block; margin-bottom: 0.5rem; font-size: 0.875rem; font-weight: 700; }
.field-group > small { display: block; margin-top: 0.45rem; color: var(--muted); font: 0.75rem/1.35 var(--font-data); }
.input-unit { height: var(--control-height); display: grid; grid-template-columns: minmax(0, 1fr) auto; background: #ffffff; border: 1px solid var(--line-strong); }
.input-unit:focus-within { outline: 3px solid var(--focus); outline-offset: 2px; }
.input-unit input,
.write-panel select {
  min-width: 0;
  width: 100%;
  height: var(--control-height);
  padding-inline: 0.75rem;
  background-color: #ffffff;
  color: var(--ink);
  border: 1px solid var(--line-strong);
  font: 1rem/1 var(--font-data);
}
.input-unit input { height: 100%; border: 0; }
.input-unit input:focus { outline: 0; }
.input-unit b { display: grid; place-items: center; padding-inline: 0.75rem; color: var(--muted); border-inline-start: 1px solid var(--line); font: 0.875rem/1 var(--font-data); }
.write-panel select {
  appearance: none;
  padding-inline-end: 2.75rem;
  background-image: linear-gradient(45deg, transparent 50%, var(--ink) 50%), linear-gradient(135deg, var(--ink) 50%, transparent 50%);
  background-position: calc(100% - 1rem) 50%, calc(100% - 0.7rem) 50%;
  background-size: 0.35rem 0.35rem, 0.35rem 0.35rem;
  background-repeat: no-repeat;
}
.write-notice { margin-block: 1.25rem; padding: 0.75rem; background: #f5e7c4; border-inline-start: 0.3rem solid var(--warning); }
.write-notice strong { display: block; }
.write-notice strong { font-size: 0.875rem; }
.write-panel .primary-button { width: 100%; }
.write-panel output { display: block; min-height: 1.5rem; margin-top: 0.75rem; color: var(--muted); font-size: 0.8125rem; }
.write-panel output.success { color: var(--normal); font-weight: 700; }
.write-panel output.error { color: var(--alarm); font-weight: 700; }

.write-dialog {
  width: min(32rem, calc(100vw - 2rem));
  max-height: calc(100vh - 2rem);
  padding: 0;
  background: var(--panel);
  color: var(--ink);
  border: 2px solid var(--line-strong);
  box-shadow: 0 1rem 3rem rgb(0 0 0 / 35%);
}
.write-dialog::backdrop { background: rgb(17 26 31 / 65%); }
.dialog-shell > header { display: flex; align-items: center; gap: 0.75rem; padding: 1rem; background: var(--warning-soft); border-bottom: 1px solid #a87b24; }
.dialog-shell h2 { margin: 0; font-size: 1.25rem; line-height: 1.15; }
.dialog-icon { width: 2rem; height: 2rem; display: grid; place-items: center; background: var(--warning); color: #ffffff; font-weight: 900; }
.dialog-body { padding: 1rem; }
.dialog-body dl { margin: 0; border: 1px solid var(--line); }
.dialog-body dl div { display: grid; grid-template-columns: 9rem minmax(0, 1fr); border-bottom: 1px solid var(--line); }
.dialog-body dl div:last-child { border-bottom: 0; }
.dialog-body dt, .dialog-body dd { margin: 0; padding: 0.65rem; }
.dialog-body dt { background: var(--panel-muted); color: var(--muted); font-size: 0.75rem; }
.dialog-body dd { font: 0.8125rem/1.35 var(--font-data); overflow-wrap: anywhere; }
.dialog-shell > footer { display: flex; justify-content: flex-end; gap: 1rem; padding: 1rem; border-top: 1px solid var(--line); }

.toast {
  position: fixed;
  inset-inline-end: 1rem;
  inset-block-end: 1rem;
  z-index: 80;
  max-width: min(26rem, calc(100vw - 2rem));
  padding: 0.85rem 1rem;
  background: var(--chrome);
  color: #ffffff;
  border: 1px solid #7b8d95;
  box-shadow: 0 0.5rem 1.5rem rgb(0 0 0 / 28%);
  opacity: 0;
  translate: 0 0.5rem;
  pointer-events: none;
  transition: opacity 150ms ease-out, translate 150ms ease-out;
  font-size: 0.875rem;
}
.toast.show { opacity: 1; translate: 0; }
.toast.error { background: var(--alarm-strong); border-color: #ef999c; }

@media (max-width: 75rem) {
  .app-shell { grid-template-columns: 14rem minmax(0, 1fr); }
  .workspace-grid { grid-template-columns: minmax(0, 1fr) 19rem; }
  .process-path { grid-template-columns: minmax(7rem, 1fr) 3rem minmax(8rem, 1.1fr) 3rem minmax(7rem, 1fr); }
  .signal-line span { display: none; }
}

@media (max-width: 62rem) {
  .system-strip { overflow-x: auto; }
  .update-time { margin-inline-start: 0; }
  .app-shell { display: block; }
  .plant-rail { border-inline-end: 0; border-bottom: 1px solid var(--line-strong); }
  .rail-header, .rail-footer { display: none; }
  .device-list { display: flex; overflow-x: auto; }
  .device-button { min-width: 14rem; border-inline-end: 1px solid #aab2b6; }
  .workspace-grid { grid-template-columns: 1fr; }
  .detail-column { position: static; grid-template-columns: 1fr 1fr; }
}

@media (max-width: 48rem) {
  .app-header { padding-block: 0.75rem; align-items: flex-start; }
  .operator-id { display: none; }
  .utility-nav { gap: 0.75rem; }
  .utility-nav a, .text-button { font-size: 0.8125rem; }
  .alarm-banner { align-items: flex-start; padding-block: 0.65rem; }
  .alarm-summary { align-items: flex-start; }
  .alarm-summary span { white-space: normal; }
  .system-strip { gap: 1rem; }
  .system-item:nth-of-type(2), .system-item:nth-of-type(3) { display: none; }
  .view-header { align-items: flex-start; flex-direction: column; padding: 1rem; }
  .view-actions { width: 100%; justify-content: space-between; }
  .workspace-grid { padding: 0.75rem; gap: 0.75rem; }
  .alarm-panel { margin: 0.75rem 0.75rem 0; }
  .process-path { grid-template-columns: 1fr; gap: 0.75rem; }
  .signal-line { width: 2px; height: 2rem; margin: auto; }
  .signal-line::after { inset-inline-end: auto; inset-inline-start: 50%; inset-block-start: auto; inset-block-end: -1px; transform: translateX(-50%) rotate(135deg); }
  .value-grid, .trend-grid, .detail-column { grid-template-columns: 1fr; }
  .value-card, .trend-card { border-inline-end: 0; border-bottom: 1px solid var(--line); }
  .value-card:last-child, .trend-card:last-child { border-bottom: 0; }
  .alarm-row { grid-template-columns: 1fr; gap: 0.35rem; padding-block: 0.75rem; }
}

@media (max-width: 34rem) {
  .app-header { gap: 0.75rem; }
  .brand strong { font-size: 0.875rem; }
  .brand-mark { width: 1.75rem; height: 1.75rem; }
  .utility-nav a { display: none; }
  .alarm-toggle { font-size: 0; width: 2.25rem; padding: 0; }
  .alarm-toggle::after { content: "≡"; font-size: 1.25rem; }
  .view-actions { align-items: stretch; flex-direction: column; }
  .secondary-button { width: 100%; }
  .dialog-body dl div { grid-template-columns: 1fr; }
  .dialog-body dt { border-bottom: 1px solid #c3c9cb; }
  .dialog-shell > footer { flex-direction: column-reverse; gap: 0.75rem; }
  .dialog-shell > footer button { width: 100%; }
}

@media (pointer: coarse) {
  .device-button, .write-link, .alarm-toggle, .utility-nav a, .text-button { min-height: 2.75rem; }
}

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