/* admin-panels.css — SPEC-0040. Basis: 1:1-Port von
   design/core/patterns/federation-support.css (Bestand; die
   federation-*-Klassen sind die Anzeigebasis aller drei Admin-Ebenen),
   ergänzt um schmale admin-panel-*-Klassen (am Dateiende). */

.federation-view {
  --federation-surface: var(--settings-bg, var(--core-color-app-surface, Canvas));
  --federation-surface-raised: var(--settings-group-bg, var(--core-color-panel-surface-elevated, var(--core-color-panel-surface, Canvas)));
  --federation-control-surface: var(--settings-input-bg, var(--core-color-panel-surface, Field));
  --federation-text: var(--settings-fg, var(--core-color-text-main, CanvasText));
  --federation-text-muted: var(--menu-muted-fg, var(--core-color-text-muted, GrayText));
  --federation-border: var(--settings-border, var(--core-color-border-default, ButtonBorder));
  --federation-border-subtle: color-mix(in srgb, var(--federation-border) 62%, transparent);
  --federation-primary: var(--menu-link-fg, var(--core-color-line-primary, var(--core-color-accent-cyan, LinkText)));
  --federation-success: var(--widget-shell-ok, var(--core-color-accent-green, Mark));
  --federation-warning: var(--widget-shell-warn, var(--core-color-accent-yellow, Mark));
  --federation-danger: var(--widget-shell-alert, var(--core-color-accent-red, Mark));
  --federation-shadow: var(--viewer-panel-shadow, var(--core-shadow-panel-soft, none));
  --federation-space-1: var(--core-space-1, 4px);
  --federation-space-2: var(--core-space-2, 8px);
  --federation-space-3: var(--core-space-3, 12px);
  --federation-space-4: var(--core-space-4, 16px);
  --federation-space-5: var(--core-space-5, 20px);

  display: flex;
  flex: 1 1 0;
  flex-direction: column;
  align-items: stretch;
  gap: var(--federation-space-3);
  width: 100%;
  max-width: 100%;
  min-width: 0;
  height: 100%;
  max-height: 100%;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  box-sizing: border-box;
  padding: clamp(10px, 1vw, 16px);
  background: var(--federation-surface);
  color: var(--federation-text);
  scrollbar-gutter: stable;
  overscroll-behavior: contain;
}

.theme-light .federation-view,
html[data-core-theme="light"] .federation-view {
  --federation-surface: var(--settings-bg, var(--surface-elevated, Canvas));
  --federation-surface-raised: var(--text-inverse, Canvas);
  --federation-control-surface: var(--settings-input-bg, var(--surface, Field));
  --federation-text: var(--settings-fg, var(--text, CanvasText));
  --federation-text-muted: var(--text-muted, GrayText);
  --federation-border: var(--settings-border, var(--border, ButtonBorder));
  --federation-primary: var(--primary, LinkText);
  --federation-shadow: var(--viewer-panel-shadow, none);
}

.theme-dark .federation-view,
html[data-core-theme="dark"] .federation-view {
  --federation-surface: var(--settings-bg, var(--surface, Canvas));
  --federation-surface-raised: var(--settings-group-bg, var(--surface-elevated, Canvas));
  --federation-control-surface: var(--settings-input-bg, Field);
  --federation-text: var(--settings-fg, var(--text, CanvasText));
  --federation-text-muted: var(--text-muted, GrayText);
  --federation-border: var(--settings-border, var(--border, ButtonBorder));
  --federation-primary: var(--primary, var(--core-color-accent-cyan, LinkText));
}

.theme-contrast .federation-view,
html[data-core-theme="contrast"] .federation-view {
  --federation-surface: var(--settings-bg, Canvas);
  --federation-surface-raised: var(--transaction-panel-bg-soft, Canvas);
  --federation-control-surface: var(--settings-input-bg, Field);
  --federation-text: var(--settings-fg, CanvasText);
  --federation-text-muted: var(--settings-fg, CanvasText);
  --federation-border: var(--settings-border, CanvasText);
  --federation-border-subtle: color-mix(in srgb, var(--federation-border) 82%, transparent);
  --federation-primary: var(--transaction-accent, LinkText);
  --federation-success: var(--widget-shell-ok, Mark);
  --federation-warning: var(--widget-shell-warn, Mark);
  --federation-danger: var(--widget-shell-alert, Mark);
  --federation-shadow: none;
}

.theme-avangers .federation-view,
html[data-core-theme="avangers"] .federation-view {
  --federation-surface:
    radial-gradient(circle at top right, color-mix(in srgb, var(--federation-primary) 18%, transparent), transparent 30%),
    linear-gradient(180deg, var(--settings-bg, Canvas), color-mix(in srgb, var(--settings-bg, Canvas) 88%, var(--app-bg, Canvas)));
  --federation-surface-raised: color-mix(in srgb, var(--settings-group-bg, Canvas) 88%, transparent);
  --federation-control-surface: var(--settings-input-bg, Field);
  --federation-text: var(--settings-fg, CanvasText);
  --federation-text-muted: var(--menu-muted-fg, GrayText);
  --federation-border: var(--settings-border, ButtonBorder);
  --federation-primary: var(--menu-link-fg, LinkText);
  --federation-shadow: var(--viewer-panel-shadow, none);
}

.federation-view > * {
  flex: 0 0 auto;
  min-width: 0;
}

.federation-header {
  width: 100%;
  max-width: none;
  margin: 0;
  box-sizing: border-box;
  display: grid;
  grid-template-columns: minmax(200px, max-content) minmax(0, 1fr);
  gap: var(--federation-space-1) var(--federation-space-4);
  padding-bottom: var(--federation-space-2);
  border-bottom: 1px solid var(--federation-border-subtle);
  column-gap: var(--federation-space-4);
  align-items: start;
}

.federation-header h3 {
  margin: 0;
  font-size: clamp(20px, 1.35vw, 26px);
  line-height: 1.15;
  overflow-wrap: anywhere;
}

.federation-header p:last-child {
  max-width: none;
  margin: 0;
  color: var(--federation-text-muted);
  line-height: 1.32;
  overflow-wrap: anywhere;
}

.federation-header .federation-eyebrow,
.federation-header h3 {
  grid-column: 1;
}

.federation-header p:last-child {
  grid-column: 2;
  grid-row: 1 / span 2;
}

.federation-eyebrow {
  margin: 0;
  color: var(--federation-text-muted);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}

.federation-grid,
.federation-table,
.federation-section,
.federation-flow,
.federation-metrics {
  width: 100%;
  max-width: none;
  margin: 0;
  box-sizing: border-box;
}

.federation-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
  gap: var(--federation-space-3);
}

.federation-grid--stages {
  grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));
}

.federation-card,
.federation-row,
.federation-section,
.federation-metric,
.federation-rule-grid article {
  border: 1px solid var(--federation-border);
  border-radius: 8px;
  background: var(--federation-surface-raised);
  box-shadow: var(--federation-shadow);
}

.federation-card {
  padding: var(--federation-space-4);
  min-width: 0;
}

button.federation-card {
  display: grid;
  gap: var(--federation-space-3);
  width: 100%;
  min-height: 0;
  text-align: left;
  font: inherit;
  color: var(--federation-text);
  cursor: pointer;
}

.federation-card.is-selected {
  border-color: var(--federation-primary);
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--federation-primary) 32%, transparent), var(--federation-shadow);
}

.federation-card-title {
  display: flex;
  gap: var(--federation-space-2);
  align-items: flex-start;
  margin-bottom: var(--federation-space-3);
  min-width: 0;
}

.federation-card-title .material-icons {
  color: var(--federation-primary);
  flex: 0 0 auto;
}

.federation-card-title strong,
.federation-row strong {
  display: block;
  overflow-wrap: anywhere;
  min-width: 0;
}

.federation-card-title small,
.federation-row small,
.federation-metric small {
  display: block;
  color: var(--federation-text-muted);
  margin-top: 2px;
  min-width: 0;
  overflow-wrap: anywhere;
}

.federation-check-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: var(--federation-space-2);
}

.federation-check-list li {
  display: flex;
  gap: var(--federation-space-2);
  align-items: flex-start;
  min-width: 0;
}

.federation-check-list .material-icons {
  font-size: 18px;
  color: var(--federation-success);
  flex: 0 0 auto;
}

.federation-check-list li span:not(.material-icons) {
  min-width: 0;
  overflow-wrap: anywhere;
}

.federation-requirements {
  display: flex;
  flex-wrap: wrap;
  gap: var(--federation-space-2);
}

.federation-requirements span,
.federation-flow-step,
.federation-pill {
  border: 1px solid var(--federation-border);
  border-radius: 999px;
  padding: 6px 10px;
  background: var(--federation-control-surface);
  font-size: 12px;
  line-height: 1.2;
  max-width: 100%;
  overflow-wrap: anywhere;
}

.federation-table {
  display: grid;
  gap: var(--federation-space-2);
  min-width: 0;
  overflow: visible;
}

.federation-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(170px, 100%), 1fr));
  gap: var(--federation-space-3);
  align-items: start;
  padding: var(--federation-space-3);
  width: 100%;
  max-width: 100%;
  box-sizing: border-box;
}

.federation-row > * {
  min-width: 0;
  max-width: 100%;
  overflow-wrap: anywhere;
}

.federation-row--package {
  grid-template-columns: minmax(min(220px, 100%), 1.4fr) minmax(min(180px, 100%), 1fr) minmax(min(150px, 100%), 0.8fr) minmax(min(150px, 100%), 0.8fr) minmax(min(90px, 100%), 0.4fr);
}

.federation-row--master-data {
  grid-template-columns: minmax(min(210px, 100%), 1.1fr) minmax(min(220px, 100%), 1.1fr) minmax(min(150px, 100%), 0.8fr) minmax(min(220px, 100%), 1.2fr);
}

.federation-row--analytics-ai {
  grid-template-columns: minmax(min(220px, 100%), 1.2fr) minmax(min(200px, 100%), 1fr) minmax(min(170px, 100%), 0.8fr) minmax(min(220px, 100%), 1.1fr);
}

.federation-row--reporting {
  grid-template-columns: minmax(min(230px, 100%), 1.2fr) minmax(min(220px, 100%), 1fr) minmax(min(150px, 100%), 0.7fr) minmax(min(180px, 100%), 0.8fr) minmax(min(110px, 100%), auto);
  align-items: center;
}

.federation-reporting-open {
  display: flex;
  justify-content: flex-end;
  min-width: 0;
}

.federation-report-open-link {
  display: inline-flex;
  align-items: center;
  gap: var(--federation-space-2);
  padding: 8px 12px;
  border: 1px solid color-mix(in srgb, var(--federation-primary) 70%, var(--federation-border));
  border-radius: 8px;
  background: color-mix(in srgb, var(--federation-primary) 24%, var(--federation-surface-raised));
  color: var(--federation-text);
  font-weight: 600;
  font-size: 13px;
  line-height: 1.2;
  text-decoration: none;
  white-space: nowrap;
}

.federation-report-open-link::after {
  content: "open_in_new";
  font-family: "Material Icons";
  font-size: 16px;
  font-weight: normal;
  line-height: 1;
}

.federation-report-open-link:hover,
.federation-report-open-link:focus-visible {
  background: color-mix(in srgb, var(--federation-primary) 40%, var(--federation-surface-raised));
  outline: none;
}

/* SPEC-0646 — Klasse B: der Ersatz war ein Flaechenwechsel und damit von
   :hover nicht zu unterscheiden. Im Windows-Kontrastmodus faellt er ganz aus,
   weil dort jede Flaeche auf `Canvas` gezwungen wird. Ring nachgezogen. */
.federation-report-open-link:focus-visible {
  box-shadow: 0 0 0 3px var(--primary-soft);
}

.federation-row--agent-hub {
  grid-template-columns: minmax(min(220px, 100%), 1.2fr) minmax(min(130px, 100%), 0.6fr) minmax(min(160px, 100%), 0.8fr) minmax(min(190px, 100%), 0.9fr);
}

.federation-row--transport {
  grid-template-columns: minmax(min(220px, 100%), 1.2fr) minmax(min(180px, 100%), 1fr) minmax(min(130px, 100%), 0.7fr) minmax(min(160px, 100%), 0.8fr) minmax(min(110px, 100%), auto);
}

.federation-row--inbox {
  grid-template-columns: minmax(min(220px, 100%), 1.2fr) minmax(min(170px, 100%), 0.9fr) minmax(min(130px, 100%), 0.7fr) minmax(min(140px, 100%), 0.8fr) minmax(min(170px, 100%), 0.9fr);
}

.federation-row--schema {
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: start;
}

.federation-row--schema > :nth-child(3),
.federation-row--schema > :nth-child(4) {
  grid-column: 1 / -1;
}

.federation-row.is-selected {
  border-color: var(--federation-primary);
}

.federation-reporting-flags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--federation-space-2);
  min-width: 0;
}

.federation-pill {
  display: inline-flex;
  width: fit-content;
  min-width: 0;
  white-space: normal;
  align-items: center;
}

.federation-pill.is-warn {
  border-color: var(--federation-warning);
  color: var(--federation-warning);
}

.federation-pill.is-alert {
  border-color: var(--federation-danger);
  color: var(--federation-danger);
}

.federation-definition-list {
  display: grid;
  gap: var(--federation-space-2);
  margin: 0;
}

.federation-definition-list div {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: var(--federation-space-3);
  border-bottom: 1px solid var(--federation-border-subtle);
  padding-bottom: var(--federation-space-1);
  min-width: 0;
}

.federation-definition-list dt {
  color: var(--federation-text-muted);
  min-width: 0;
  overflow-wrap: anywhere;
}

.federation-definition-list dd {
  margin: 0;
  text-align: right;
  min-width: 0;
  overflow-wrap: anywhere;
}

.federation-section {
  padding: var(--federation-space-4);
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}

.federation-section p,
.federation-card p,
.federation-metric span,
.federation-metric small,
.federation-rule-grid p {
  min-width: 0;
  overflow-wrap: anywhere;
}

.federation-section--controls {
  display: grid;
  gap: var(--federation-space-3);
}

.federation-workspace,
.federation-admin-layout {
  width: 100%;
  max-width: none;
  margin: 0;
  display: grid;
  grid-template-columns: minmax(min(420px, 100%), 1fr) minmax(min(380px, 100%), 0.9fr);
  gap: var(--federation-space-3);
  align-items: start;
  box-sizing: border-box;
  min-width: 0;
}

.federation-workspace--wide {
  grid-template-columns: minmax(min(440px, 100%), 0.9fr) minmax(min(480px, 100%), 1.1fr);
}

.federation-admin-layout {
  grid-template-columns: repeat(auto-fit, minmax(min(320px, 100%), 1fr));
}

.federation-admin-layout > .federation-section,
.federation-workspace > .federation-section {
  width: 100%;
  min-width: 0;
  margin: 0;
  box-sizing: border-box;
}

.federation-admin-summary {
  position: static;
}

.federation-segmented {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr));
  gap: var(--federation-space-2);
}

.federation-segmented button,
.federation-status-button,
.federation-button {
  display: inline-flex;
  align-items: center;
  gap: var(--federation-space-2);
  border: 1px solid var(--federation-border);
  border-radius: 8px;
  background: color-mix(in srgb, var(--federation-surface-raised) 86%, transparent);
  color: var(--federation-text);
  cursor: pointer;
  font: inherit;
  min-height: 42px;
  min-width: 0;
  max-width: 100%;
  padding: 9px 12px;
  line-height: 1.2;
  white-space: normal;
  overflow-wrap: anywhere;
}

.federation-button .material-icons,
.federation-segmented button .material-icons {
  flex: 0 0 auto;
}

.federation-button span:not(.material-icons),
.federation-segmented button span:not(.material-icons) {
  min-width: 0;
  overflow-wrap: anywhere;
}

.federation-section-heading {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--federation-space-3);
  min-width: 0;
  flex-wrap: wrap;
}

.federation-section-heading h4 {
  margin: 0;
}

.federation-button:disabled {
  cursor: not-allowed;
  opacity: 0.62;
}

.federation-button--primary {
  border-color: color-mix(in srgb, var(--federation-primary) 72%, var(--federation-border));
  background: color-mix(in srgb, var(--federation-primary) 24%, var(--federation-surface-raised));
}

.federation-segmented button {
  justify-content: flex-start;
  min-width: 0;
  white-space: normal;
}

.federation-segmented button.is-active {
  border-color: var(--federation-primary);
  color: var(--federation-text);
  background: color-mix(in srgb, var(--federation-primary) 18%, var(--federation-control-surface));
}

.federation-field-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(220px, 100%), 1fr));
  gap: var(--federation-space-3);
  min-width: 0;
}

.federation-field--span {
  grid-column: 1 / -1;
}

.federation-field,
.federation-toggle-row {
  display: grid;
  gap: var(--federation-space-1);
  min-width: 0;
}

.federation-field span,
.federation-toggle-row small {
  color: var(--federation-text-muted);
  min-width: 0;
  overflow-wrap: anywhere;
}

.federation-field input,
.federation-field select {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--federation-border);
  border-radius: 8px;
  background: var(--federation-control-surface);
  color: var(--federation-text);
  font: inherit;
  min-height: 42px;
  padding: 8px 10px;
  overflow: hidden;
  text-overflow: ellipsis;
}

.federation-toggle-row {
  grid-template-columns: auto minmax(0, 1fr);
  align-items: start;
  border: 1px solid var(--federation-border-subtle);
  border-radius: 8px;
  padding: var(--federation-space-3);
  background: color-mix(in srgb, var(--federation-surface-raised) 72%, transparent);
}

.federation-toggle-row > span {
  min-width: 0;
  overflow-wrap: anywhere;
}

.federation-toggle-row input {
  margin-top: 3px;
}

.federation-toggle-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(190px, 100%), 1fr));
  gap: var(--federation-space-2);
  min-width: 0;
}

.federation-action-row {
  display: flex;
  flex-wrap: wrap;
  gap: var(--federation-space-2);
  margin-top: var(--federation-space-3);
  min-width: 0;
}

.federation-action-row--compact {
  margin-top: 0;
  justify-content: flex-end;
}

.federation-action-row--compact .federation-button {
  min-width: 42px;
  justify-content: center;
  padding-inline: 9px;
}

.federation-inline-status {
  margin: var(--federation-space-3) 0 0;
  color: var(--federation-success);
  font-size: 12px;
  overflow-wrap: anywhere;
}

.federation-inline-status.is-warn {
  color: var(--federation-warning);
}

.federation-mini-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(170px, 100%), 1fr));
  gap: var(--federation-space-2);
  margin-top: var(--federation-space-3);
  min-width: 0;
}

.federation-mini-grid span {
  min-width: 0;
  border: 1px solid var(--federation-border-subtle);
  border-radius: 8px;
  background: color-mix(in srgb, var(--federation-surface-raised) 70%, transparent);
  color: var(--federation-text-muted);
  padding: 8px 10px;
  overflow-wrap: anywhere;
}

.federation-mini-grid strong {
  color: var(--federation-text);
}

.federation-status-board {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(160px, 100%), 1fr));
  gap: var(--federation-space-2);
  min-width: 0;
}

.federation-status-button {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  justify-content: stretch;
  text-align: left;
  min-width: 0;
  width: 100%;
  align-items: start;
  min-height: 0;
}

.federation-status-button span,
.federation-status-button small {
  min-width: 0;
  overflow-wrap: anywhere;
  line-height: 1.2;
}

.federation-status-button small {
  color: var(--federation-text-muted);
}

.federation-status-button.is-active {
  border-color: var(--federation-primary);
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--federation-primary) 30%, transparent);
}

.federation-section h4 {
  margin: 0 0 var(--federation-space-3);
}

.federation-flow {
  display: flex;
  flex-wrap: wrap;
  gap: var(--federation-space-2);
}

.federation-rule-grid,
.federation-metrics {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(210px, 100%), 1fr));
  gap: var(--federation-space-3);
  min-width: 0;
  align-items: stretch;
}

.federation-rule-grid article,
.federation-metric {
  padding: var(--federation-space-3);
  min-width: 0;
  min-height: 0;
  overflow-wrap: anywhere;
}

.federation-rule-grid .material-icons {
  color: var(--federation-primary);
}

.federation-rule-grid p {
  color: var(--federation-text-muted);
  margin-bottom: 0;
}

.federation-card-footer {
  display: flex;
  gap: var(--federation-space-2);
  flex-wrap: wrap;
}

.federation-reports-access {
  display: flex;
  align-items: center;
  gap: var(--federation-space-3);
  flex-wrap: wrap;
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
}

.federation-external-link {
  display: inline-flex;
  align-items: center;
  gap: var(--federation-space-2);
  min-width: 0;
  max-width: 100%;
  padding: 10px 14px;
  border: 1px solid color-mix(in srgb, var(--federation-primary) 70%, var(--federation-border));
  border-radius: 8px;
  background: color-mix(in srgb, var(--federation-primary) 32%, var(--federation-surface-raised));
  color: var(--federation-text);
  font-weight: 600;
  line-height: 1.2;
  text-decoration: none;
  overflow-wrap: anywhere;
}

.federation-external-link::after {
  content: "open_in_new";
  flex: 0 0 auto;
  font-family: "Material Icons";
  font-size: 18px;
  font-weight: normal;
  line-height: 1;
}

.federation-external-link--ghost {
  background: transparent;
  border-color: var(--federation-border);
  color: var(--federation-text-muted);
}

.federation-reports-actions {
  display: flex;
  align-items: center;
  gap: var(--federation-space-2);
  flex-wrap: wrap;
  min-width: 0;
}

.federation-help-text {
  margin: 0;
  color: var(--federation-text-muted);
  font-size: 13px;
  line-height: 1.35;
  overflow-wrap: anywhere;
}

.federation-help-text.is-warn {
  color: var(--federation-warning);
}

.federation-metric {
  border-left: 4px solid var(--federation-success);
}

.federation-metric.is-warn {
  border-left-color: var(--federation-warning);
}

.federation-metric.is-alert {
  border-left-color: var(--federation-danger);
}

.federation-metric strong {
  display: block;
  font-size: 26px;
  margin: var(--federation-space-1) 0;
  overflow-wrap: anywhere;
}

@media (max-width: 1400px) {
  .federation-workspace,
  .federation-workspace--wide {
    grid-template-columns: 1fr;
  }

  .federation-row,
  .federation-row--package,
  .federation-row--agent-hub,
  .federation-row--transport,
  .federation-row--inbox,
  .federation-row--master-data,
  .federation-row--analytics-ai,
  .federation-row--reporting {
    grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr));
  }
}

@media (max-height: 820px) {
  .federation-view {
    gap: var(--federation-space-2);
    padding: var(--federation-space-2);
  }

  .federation-card,
  .federation-row,
  .federation-section,
  .federation-metric,
  .federation-rule-grid article {
    padding: var(--federation-space-3);
  }
}

@media (max-width: 820px) {
  .federation-view {
    padding: var(--federation-space-3);
  }

  .federation-row,
  .federation-row--package,
  .federation-row--agent-hub,
  .federation-row--transport,
  .federation-row--inbox,
  .federation-row--schema,
  .federation-row--master-data,
  .federation-row--analytics-ai,
  .federation-row--reporting {
    grid-template-columns: 1fr;
  }

  .federation-workspace,
  .federation-workspace--wide,
  .federation-admin-layout {
    grid-template-columns: 1fr;
  }

  .federation-admin-layout {
    grid-template-columns: 1fr;
  }

  .federation-admin-summary {
    position: static;
  }
}

@media (max-width: 1180px) {
  .federation-header {
    grid-template-columns: 1fr;
  }

  .federation-header .federation-eyebrow,
  .federation-header h3,
  .federation-header p:last-child {
    grid-column: 1;
    grid-row: auto;
  }

  .federation-workspace,
  .federation-workspace--wide {
    grid-template-columns: 1fr;
  }
}

/* --- admin-panel-* Ergänzungen (SPEC-0040, read-only-Welle) ------------- */

/* Die frühere `.admin-panel-interim`-Leiste ist mit SPEC-0200 entfallen — die
   pauschal disabled Interim-Knöpfe sind durch die rechte-gegatete
   `.admin-panel-actions`-Leiste am Dateiende ersetzt. */

.admin-panel-table-wrap {
  overflow-x: auto;
  border: 1px solid var(--federation-border-subtle);
  border-radius: 10px;
  background: var(--federation-surface-raised);
}

.admin-panel-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.84rem;
}

.admin-panel-table th,
.admin-panel-table td {
  padding: 8px 12px;
  text-align: left;
  border-bottom: 1px solid var(--federation-border-subtle);
  color: var(--federation-text);
  white-space: nowrap;
}

.admin-panel-table th {
  color: var(--federation-text-muted);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.72rem;
}

.admin-panel-table tr:last-child td { border-bottom: none; }

.admin-panel-keyvalue {
  display: grid;
  grid-template-columns: minmax(180px, max-content) 1fr;
  gap: 6px 16px;
  padding: var(--federation-space-3);
  border: 1px solid var(--federation-border-subtle);
  border-radius: 10px;
  background: var(--federation-surface-raised);
  font-size: 0.86rem;
}

.admin-panel-keyvalue dt { color: var(--federation-text-muted); }
.admin-panel-keyvalue dd { margin: 0; color: var(--federation-text); }

.admin-panel-error {
  padding: var(--federation-space-2) var(--federation-space-3);
  border: 1px solid color-mix(in srgb, var(--federation-danger) 45%, transparent);
  border-radius: 8px;
  color: var(--federation-danger);
  font-size: 0.84rem;
}

.admin-panel-empty {
  padding: var(--federation-space-3);
  color: var(--federation-text-muted);
  font-size: 0.86rem;
}

/* --- Aktionsleiste + Aktionsmaske (SPEC-0200) --------------------------- */

.admin-panel-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--federation-space-2);
  padding: var(--federation-space-2) var(--federation-space-3);
  border: 1px solid var(--federation-border);
  border-radius: 8px;
  background: var(--federation-surface-raised);
}

.admin-panel-action-status {
  margin: var(--federation-space-2) 0 0;
  padding: var(--federation-space-2) var(--federation-space-3);
  border-radius: 8px;
  border: 1px solid var(--federation-border-subtle);
  font-size: 0.84rem;
}

.admin-panel-action-status.is-ok {
  border-color: var(--core-success, #2f855a);
  color: var(--core-success, #2f855a);
}

.admin-panel-action-status.is-error {
  border-color: var(--core-danger, #c53030);
  color: var(--core-danger, #c53030);
}

.admin-panel-action-status.is-note {
  color: var(--federation-text-muted);
}

.admin-panel-action-form {
  display: grid;
  gap: var(--federation-space-2);
  margin-top: var(--federation-space-2);
  padding: var(--federation-space-3);
  border: 1px solid var(--federation-border);
  border-radius: 10px;
  background: var(--federation-surface-raised);
}

.admin-panel-action-form h4 {
  margin: 0;
}

.admin-panel-action-form__foot {
  display: flex;
  gap: var(--federation-space-2);
}

.admin-panel-checklist {
  display: flex;
  flex-wrap: wrap;
  gap: var(--federation-space-2);
  max-height: 220px;
  overflow-y: auto;
}

.admin-panel-checklist label {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 0.82rem;
}

/* --- Pod-Detail-Modal (Integration Control) -------------------------------
 *
 * Uebernommen aus `integrationControl.modals.css:54-115`. Der Bestand nutzt
 * dort die Aliasse `--integration-control-surface` / `-surface-strong` /
 * `-border-strong`; die zeigen laut `integrationControl.base.css:7-11` genau
 * auf `--surface-elevated` / `--surface` / `--border-strong`. Im Port stehen
 * die Grundtoken direkt — eine Aliasebene ohne eigenen Zweck bringt nur eine
 * weitere Stelle, an der ein Theme haengenbleiben kann.
 *
 * Auf das Element eingegrenzt, weil `.modal-backdrop` auch in
 * `iam-overlays.css` vorkommt. */
cw-integration-control-overlay .modal-backdrop {
  position: fixed;
  inset: 0;
  background: var(--surface-overlay);
  display: grid;
  place-items: center;
  z-index: 1200;
  padding: 12px;
}

cw-integration-control-overlay .modal-card {
  width: min(560px, calc(100vw - 24px));
  background: var(--surface);
  border: 1px solid var(--border-strong);
  border-radius: 10px;
  padding: 12px;
}

cw-integration-control-overlay .modal-card h4 {
  margin: 0 0 8px;
}

cw-integration-control-overlay .modal-card__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
}

cw-integration-control-overlay .pod-details-modal {
  width: min(980px, calc(100vw - 24px));
  max-height: min(92vh, 920px);
  overflow: auto;
}

cw-integration-control-overlay .pod-details-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 10px;
}

cw-integration-control-overlay .pod-details-card {
  border: 1px solid var(--border-strong);
  border-radius: 8px;
  background: var(--surface-elevated);
  padding: 10px;
}

cw-integration-control-overlay .pod-details-card h5 {
  margin: 0 0 8px;
}

cw-integration-control-overlay .pod-details-card p {
  margin: 4px 0;
}

cw-integration-control-overlay .pod-details-card--full {
  grid-column: 1 / -1;
}

@media (max-width: 1280px) {
  cw-integration-control-overlay .pod-details-modal {
    width: min(960px, calc(100vw - 16px));
  }
}

/* Mapping-Dialog und Pod-Filter (Integration Control).
 * `.form-grid` und `.form-grid .full` liegen bereits in `readonly-panels.css`
 * (:884, :922); ergaenzt werden nur die zwei Stellen, die es dort nicht gibt. */
cw-integration-control-overlay .action-buttons {
  display: flex;
  justify-content: flex-end;
  gap: var(--space-2);
  margin-top: var(--space-3);
}

cw-integration-control-overlay .ic-pod-filter {
  margin-bottom: var(--space-2);
}

cw-integration-control-overlay .ic-pod-filter label {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: 0.84rem;
}

/* Filterleiste mit MEHREREN Feldern (Bestand `table-filter-bar`, z. B.
 * `DeploymentPromotionSection.vue:45-61`: Suche + Statusauswahl nebeneinander).
 * `.ic-pod-filter` traegt nur ein einzelnes Feld und wuerde die zweite
 * Beschriftung darunter umbrechen. */
cw-integration-control-overlay .ic-table-filter {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-3);
  margin-bottom: var(--space-2);
}

cw-integration-control-overlay .ic-table-filter label {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: 0.84rem;
}

/* Anklickbare Tabellenzeile (Bestand `RuntimeMonitoringModulePanel.vue:340`).
 * Dort steht nur `cursor: pointer`; der Fokusrahmen kommt hinzu, weil die
 * Zeile im Port auch per Tastatur erreichbar ist. */
.admin-panel-table tr.clickable-row {
  cursor: pointer;
}

.admin-panel-table tr.clickable-row:focus-visible {
  outline: 2px solid var(--focus-ring, var(--primary));
  outline-offset: -2px;
}

/* --- Snapshot-Seitenpanel (Integration Control) ---------------------------
 *
 * Uebernommen aus `integrationControl.modals.css:1-48`. Die dortigen Aliasse
 * loesen laut `integrationControl.base.css:10-21` auf `--border`,
 * `--text-muted`, `--primary`, `--shadow-card` und `--surface` auf.
 *
 * `position: absolute; inset: 0` ist Absicht des Bestands: das Panel legt
 * sich UEBER den Registry-Bereich, nicht ueber die ganze Seite — passend zu
 * `aria-modal="false"`. */
/* Anker fuer das Panel: ohne einen positionierten Vorfahren richtet sich
 * `inset: 0` nach irgendeinem Element weiter oben und das Panel landet
 * woanders. Der Bestand hat diesen Anker in seinem Modulbereich. */
cw-integration-control-overlay {
  position: relative;
}

cw-integration-control-overlay .snapshot-side-overlay {
  position: absolute;
  inset: 0;
  z-index: 24;
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  gap: 8px;
  border: 1px solid var(--primary);
  background: var(--surface);
  box-shadow: var(--shadow-card);
  padding: 10px;
}

cw-integration-control-overlay .snapshot-side-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}

cw-integration-control-overlay .snapshot-side-actions {
  display: inline-flex;
  align-items: center;
  gap: 8px;
}

cw-integration-control-overlay .snapshot-side-meta {
  color: var(--text-muted);
  font-size: 0.81rem;
}

cw-integration-control-overlay .snapshot-side-table-wrap {
  min-height: 0;
  flex: 1 1 auto;
  overflow: auto;
  border: 1px solid var(--border);
  border-radius: 8px;
}

cw-integration-control-overlay .snapshot-side-table {
  min-width: 100%;
}

cw-integration-control-overlay .ic-registry-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-2);
  margin-bottom: var(--space-2);
}

cw-integration-control-overlay .ic-registry-bar label {
  display: flex;
  align-items: center;
  gap: var(--space-2);
  font-size: 0.84rem;
}

/* --- Einstellungs-Token ----------------------------------------------------
 *
 * BEFUND (2026-08-04): `--settings-bg` und `--settings-fg` werden in dieser
 * Datei zwoelfmal gelesen — und waren im Port nirgends definiert. Anders als
 * bei den Kopfzeilen-Token fiel das nicht sofort auf, weil hier ueberall ein
 * Rueckfall steht: die Masken sahen nicht kaputt aus, sie folgten nur nicht
 * den Bestandswerten, sondern ihrem eigenen zweiten Rueckfall.
 *
 * Werte 1:1 aus dem Bestand (App.vue:2307/2416/2511/2645, je Theme-Block).
 * Sie stehen hier und nicht in `themes/*.css`, weil die generiert sind
 * ("NICHT von Hand editieren") — dieselbe Entscheidung wie bei den
 * `--menu-*`- und `--header-*`-Token.
 */
/* --- Status- und Verweis-Token ---------------------------------------------
 *
 * BEFUND (2026-08-04): GENAU DERSELBE FALL wie eine Schicht darueber, nur
 * spaeter bemerkt. `--widget-shell-ok/-warn/-alert` und `--menu-link-fg`
 * werden von `patterns/federation-support.css` und von den
 * `--federation-*`-Token oben gelesen — und waren im Port nirgends definiert.
 * Auch hier stand ueberall ein Rueckfall, diesmal auf `--core-color-accent-*`
 * bzw. `--core-color-line-primary`. Die stehen mit FESTEN Werten in
 * `core-design/tokens/colors.css` und sind in allen vier Themen gleich.
 *
 * Sichtbare Folge: Flaeche und Text der Federation-Dialoge wechselten mit dem
 * Thema, ihre Status- und Akzentfarben nicht. Gemessen: Erfolg/Warnung/Fehler
 * standen in light wie in avangers auf demselben #63ff65 / #ffd400-Ton.
 *
 * Im Bestand ist die Kette identisch — dort ist der einzige Verbraucher
 * ebenfalls `patterns/federation-support.css`. Der Unterschied war allein,
 * dass der Bestand die vier Token je Theme-Block DEFINIERT (App.vue:2306/
 * 2362-2364 light, 2415/2471-2473 dark, 2566-2568 contrast, 2642/2703-2705
 * avangers). Werte 1:1 von dort.
 *
 * Zwei Eigenheiten bewusst mitgenommen statt geglaettet:
 *   - `contrast` hat im Bestand KEIN `--menu-link-fg`. Bleibt hier ebenso
 *     undefiniert, damit der Verbraucher auf seinen eigenen Rueckfall geht.
 *   - `contrast` und `avangers` setzen teils harte Farben statt `var(--warning)`
 *     usw. Das ist Bestandsverhalten, keine neue Entscheidung.
 */
html[data-core-theme="light"] {
  --settings-bg: var(--text-inverse);
  --settings-fg: var(--text);
  --menu-link-fg: var(--primary);
  --transaction-accent: var(--primary);
  --widget-shell-ok: var(--success);
  --widget-shell-warn: var(--warning);
  --widget-shell-alert: var(--danger);
}

html[data-core-theme="dark"] {
  --settings-bg: var(--surface-elevated);
  --settings-fg: var(--text);
  --menu-link-fg: var(--primary);
  --transaction-accent: var(--primary);
  --widget-shell-ok: var(--success);
  --widget-shell-warn: var(--warning);
  --widget-shell-alert: var(--danger);
}

html[data-core-theme="contrast"] {
  --settings-bg: var(--text);
  --settings-fg: var(--text-inverse);
  /* `--menu-link-fg` fehlt im Bestand fuer contrast — hier ebenso. */
  --transaction-accent: var(--text-inverse);
  --widget-shell-ok: var(--success);
  --widget-shell-warn: #ffd400;
  --widget-shell-alert: var(--danger);
}

html[data-core-theme="avangers"] {
  --settings-bg: #06183d;
  --settings-fg: #d7f5ff;
  --menu-link-fg: #8fdfff;
  --transaction-accent: #66f2ff;
  --widget-shell-ok: #42ff9c;
  --widget-shell-warn: #3ee7ff;
  --widget-shell-alert: var(--danger);
}

/* --- Integrationssteuerung: Bestandsregeln ohne Portentsprechung ------------
 * measure:class-coverage 2026-08-07. Der Bestand fuehrt diese Klassen unter
 * `.integration-control` mit eigenen `--integration-control-*`-Token; die gibt
 * es im Port nicht, deshalb stehen hier die gleichwertigen semantischen Token
 * (`--text-soft`, `--danger`). Gescoped auf das Element, wie der Rest dieses
 * Abschnitts. */

/* Bestand integrationControl.base.css: Hinweiszeile und Fehlerzeile ueber
 * einem Reiter. Ohne Regel standen beide in Fliesstextgroesse und -farbe, die
 * Fehlerzeile war nicht als solche erkennbar. */
cw-integration-control-overlay .hint-line,
cw-integration-control-overlay .tab-error {
  margin: 0 0 10px;
  color: var(--text-soft);
  font-size: 0.84rem;
  line-height: 1.45;
}

cw-integration-control-overlay .tab-error {
  color: var(--danger);
}

/* Bestand RuntimeMonitoringDialogs.vue: Kopfzeile und Kasten der Pod-Protokolle.
 * Ohne Regel lief das Protokoll ohne Hoehenbegrenzung, ohne Monospace und ohne
 * Umbruch durch die Maske. */
cw-integration-control-overlay .pod-logs-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
}

cw-integration-control-overlay .pod-logs-box {
  max-height: 320px;
  overflow: auto;
  margin: 0;
  padding: 0.5rem 0.75rem;
  font-family: var(--core-font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
  font-size: 0.78rem;
  line-height: 1.4;
  white-space: pre-wrap;
  word-break: break-word;
  background: var(--control-bg);
  border: 1px solid var(--border);
  border-radius: 6px;
}

/* ====== SPEC-0646 — Windows-Kontrastmodus =============================== *
 * Edge/Chromium zeichnen unter `forced-colors: active` KEINEN `box-shadow`
 * und zwingen jede Rahmen- und Flaechenfarbe auf eine Systemfarbe. Damit
 * faellt jeder Fokusring dieses Blattes dort ersatzlos aus — der ring-lose
 * Rahmenwechsel ebenso, weil dann jeder Rahmen dieselbe Farbe traegt.
 * `outline` WIRD gezeichnet und ist das einzige Mittel, das dort traegt.
 * `Highlight` ist die Systemfarbe fuer Auswahl und hebt sich per Definition
 * vom `Canvas` des Nutzers ab; `outline-offset` haelt den Ring von der
 * eigenen Kante frei, die dort ebenfalls `CanvasText` traegt.
 * KEIN `forced-color-adjust: none` — das naehme dem Nutzer genau die
 * Farbwahl, um die es hier geht (SPEC-0646, Entscheidung E3).
 * ====================================================================== */
@media (forced-colors: active) {
  .federation-report-open-link:focus-visible,
  .admin-panel-table tr.clickable-row:focus-visible {
    outline: 2px solid Highlight;
    outline-offset: 2px;
  }
}
