:root {
  --background: 210 20% 98%;
  --card: 0 0% 100%;
  --sidebar: 210 25% 96%;
  --popover: 0 0% 100%;
  --muted: 210 20% 96%;

  --foreground: 222 47% 11%;
  --card-foreground: 222 47% 11%;
  --muted-foreground: 215 16% 47%;
  --sidebar-foreground: 222 47% 11%;

  --primary: 217 91% 60%;
  --primary-foreground: 0 0% 100%;
  --secondary: 214 32% 91%;
  --secondary-foreground: 222 47% 11%;
  --accent: 214 32% 91%;
  --accent-foreground: 222 47% 11%;
  --destructive: 0 84% 60%;
  --destructive-foreground: 0 0% 100%;

  --border: 214 20% 88%;
  --card-border: 214 20% 90%;
  --sidebar-border: 214 20% 88%;
  --input: 214 20% 85%;
  --ring: 217 91% 60%;

  --radius: 0.5rem;
  --spacing: 0.25rem;
  --font-sans: Inter, "Segoe UI", "Helvetica Neue", Arial, sans-serif;
  --font-serif: Georgia, "Times New Roman", serif;
  --font-mono: "JetBrains Mono", "Fira Code", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;

  --elevate-1: rgba(0, 0, 0, 0.03);
  --elevate-2: rgba(0, 0, 0, 0.08);

  --shadow-sm: 0 1px 2px rgb(0 0 0 / 0.05), 0 2px 6px rgb(0 0 0 / 0.06);
  --shadow-md: 0 6px 16px rgb(0 0 0 / 0.1);
}

html.dark {
  --background: 222 47% 8%;
  --card: 222 47% 11%;
  --sidebar: 222 47% 9%;
  --popover: 222 47% 11%;
  --muted: 217 19% 15%;

  --foreground: 210 20% 98%;
  --card-foreground: 210 20% 98%;
  --muted-foreground: 215 16% 60%;
  --sidebar-foreground: 210 20% 98%;

  --primary: 217 91% 60%;
  --primary-foreground: 0 0% 100%;
  --secondary: 217 19% 20%;
  --secondary-foreground: 210 20% 98%;
  --accent: 217 19% 20%;
  --accent-foreground: 210 20% 98%;
  --destructive: 0 62% 50%;
  --destructive-foreground: 0 0% 100%;

  --border: 217 19% 20%;
  --card-border: 217 19% 18%;
  --sidebar-border: 217 19% 18%;
  --input: 217 19% 27%;
  --ring: 217 91% 60%;

  --elevate-1: rgba(255, 255, 255, 0.04);
  --elevate-2: rgba(255, 255, 255, 0.09);

  --shadow-sm: 0 1px 2px rgb(0 0 0 / 0.25), 0 2px 8px rgb(0 0 0 / 0.28);
  --shadow-md: 0 8px 22px rgb(0 0 0 / 0.35);
}

* {
  box-sizing: border-box;
}

html,
body {
  height: 100%;
}

body {
  margin: 0;
  font-family: var(--font-sans);
  color: hsl(var(--foreground));
  background: hsl(var(--background));
}

.auth-gate {
  min-height: 100vh;
  display: grid;
  place-items: center;
  padding: calc(var(--spacing) * 6);
}

.auth-card {
  width: min(28rem, 100%);
  border: 1px solid hsl(var(--card-border));
  border-radius: 0.75rem;
  background: hsl(var(--card));
  color: hsl(var(--card-foreground));
  padding: calc(var(--spacing) * 6);
  box-shadow: var(--shadow-md);
}

.auth-card h2 {
  margin: 0;
}

.auth-error {
  min-height: 1.25rem;
  margin: calc(var(--spacing) * 3) 0 0;
  color: hsl(var(--destructive));
  font-size: 0.9rem;
}

.app-shell {
  --sidebar-width: 16rem;
  min-height: 100vh;
  display: grid;
  grid-template-columns: var(--sidebar-width) 1fr;
}

.sidebar {
  background: hsl(var(--sidebar));
  color: hsl(var(--sidebar-foreground));
  border-right: 1px solid hsl(var(--sidebar-border));
  display: flex;
  flex-direction: column;
  min-width: 0;
}

.sidebar-inner {
  padding: calc(var(--spacing) * 6);
  display: grid;
  gap: calc(var(--spacing) * 6);
}

.sidebar-head h1 {
  margin: 0;
  font-size: 1.3rem;
  line-height: 1.25;
}

.sidebar-description {
  margin: calc(var(--spacing) * 2) 0 0;
  color: hsl(var(--muted-foreground));
  font-size: 0.9rem;
}

.sidebar-label {
  margin: 0 0 calc(var(--spacing) * 2);
  font-size: 0.78rem;
  color: hsl(var(--muted-foreground));
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.menu-item {
  width: 100%;
  display: inline-flex;
  align-items: center;
  border-radius: 0.375rem;
  border: 1px solid hsl(var(--sidebar-border));
  background: transparent;
  color: inherit;
  min-height: 2.25rem;
  padding: 0 calc(var(--spacing) * 3);
  cursor: pointer;
  text-align: left;
  font-weight: 600;
}

.menu-item.active {
  background: hsl(var(--accent));
  border-color: hsl(var(--border));
}

.sidebar-footer {
  margin-top: auto;
  border-top: 1px solid hsl(var(--sidebar-border));
  padding: calc(var(--spacing) * 4) calc(var(--spacing) * 6);
  font-size: 0.86rem;
  color: hsl(var(--muted-foreground));
  display: flex;
  align-items: center;
  gap: calc(var(--spacing) * 2);
}

.status-dot {
  width: 0.55rem;
  height: 0.55rem;
  border-radius: 50%;
  flex: 0 0 auto;
}

.status-dot-ok {
  background: rgb(34 197 94);
}

.main-column {
  min-width: 0;
  display: grid;
  grid-template-rows: auto 1fr;
}

.topbar {
  position: sticky;
  top: 0;
  z-index: 50;
  backdrop-filter: blur(8px);
  background: hsl(var(--background) / 0.86);
  border-bottom: 1px solid hsl(var(--border));
  padding: calc(var(--spacing) * 3) calc(var(--spacing) * 6);
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: calc(var(--spacing) * 4);
  flex-wrap: wrap;
}

.topbar-left,
.topbar-right {
  display: flex;
  align-items: center;
  gap: calc(var(--spacing) * 3);
  flex-wrap: wrap;
}

.context-chip {
  border: 1px solid hsl(var(--border));
  background: hsl(var(--card));
  color: hsl(var(--card-foreground));
  border-radius: 999px;
  min-height: 2rem;
  padding: 0 calc(var(--spacing) * 3);
  display: inline-flex;
  align-items: center;
  font-size: 0.85rem;
}

.content {
  overflow: auto;
  padding: calc(var(--spacing) * 6);
}

.panel {
  display: none;
}

.panel.active {
  display: block;
}

.section-header h2 {
  margin: 0;
  font-size: 1.6rem;
}

.muted {
  margin: calc(var(--spacing) * 2) 0 0;
  color: hsl(var(--muted-foreground));
}

.error-text {
  color: hsl(var(--danger));
}

.grid {
  margin-top: calc(var(--spacing) * 6);
  display: grid;
  grid-template-columns: repeat(1, minmax(0, 1fr));
  gap: calc(var(--spacing) * 4);
}

.tab-nav {
  margin-top: calc(var(--spacing) * 6);
  display: flex;
  gap: calc(var(--spacing) * 2);
  flex-wrap: wrap;
}

.tab-btn {
  border-radius: 0.375rem;
  min-height: 2.25rem;
  padding: 0 calc(var(--spacing) * 4);
  border: 1px solid hsl(var(--border));
  background: hsl(var(--card));
  color: hsl(var(--foreground));
  cursor: pointer;
  font-weight: 600;
}

.tab-btn.active {
  background: hsl(var(--primary));
  color: hsl(var(--primary-foreground));
  border-color: hsl(var(--primary));
}

.tab-panel {
  display: none;
  margin-top: calc(var(--spacing) * 4);
}

.tab-panel.active {
  display: block;
}

.card {
  border: 1px solid hsl(var(--card-border));
  border-radius: 0.75rem;
  background: hsl(var(--card));
  color: hsl(var(--card-foreground));
  padding: calc(var(--spacing) * 6);
  box-shadow: var(--shadow-sm);
}

.card h3 {
  margin-top: 0;
}

form {
  display: grid;
  gap: calc(var(--spacing) * 3);
}

label {
  display: grid;
  gap: calc(var(--spacing) * 2);
  color: hsl(var(--muted-foreground));
}

input[type="file"] {
  width: 100%;
  border-radius: 0.375rem;
  border: 1px solid hsl(var(--input));
  background: hsl(var(--card));
  color: hsl(var(--foreground));
  padding: calc(var(--spacing) * 2);
  min-height: 2.25rem;
}

select {
  width: 100%;
  border-radius: 0.375rem;
  border: 1px solid hsl(var(--input));
  background: hsl(var(--card));
  color: hsl(var(--foreground));
  padding: calc(var(--spacing) * 2);
  min-height: 2.25rem;
}

fieldset.checkbox-group {
  border: 1px solid hsl(var(--border));
  border-radius: 0.5rem;
  padding: calc(var(--spacing) * 3);
  margin: 0;
  display: grid;
  gap: calc(var(--spacing) * 2);
}

.checkbox-group legend {
  padding: 0 calc(var(--spacing) * 1.5);
  color: hsl(var(--muted-foreground));
  font-size: 0.9rem;
}

.checkbox-row {
  display: flex;
  align-items: flex-start;
  gap: calc(var(--spacing) * 2);
  color: hsl(var(--foreground));
}

.checkbox-row input[type="checkbox"] {
  width: 1rem;
  height: 1rem;
  margin-top: 0.2rem;
}

.checkbox-text {
  display: grid;
  gap: calc(var(--spacing) * 1);
}

.checkbox-text strong {
  font-size: 0.94rem;
}

.checkbox-text small {
  color: hsl(var(--muted-foreground));
  line-height: 1.35;
}

button,
a.download-btn {
  font: inherit;
}

.primary-btn,
.download-btn {
  border-radius: 0.375rem;
  min-height: 2.25rem;
  padding: 0 calc(var(--spacing) * 4);
  border: 1px solid hsl(var(--primary));
  background: hsl(var(--primary));
  color: hsl(var(--primary-foreground));
  cursor: pointer;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
}

.outline-btn {
  border-radius: 0.375rem;
  min-height: 2.25rem;
  padding: 0 calc(var(--spacing) * 4);
  border: 1px solid hsl(var(--border));
  background: transparent;
  color: hsl(var(--foreground));
  cursor: pointer;
}

button:disabled {
  pointer-events: none;
  opacity: 0.5;
}

button:focus-visible,
a:focus-visible,
input:focus-visible,
select:focus-visible,
details:focus-visible,
summary:focus-visible {
  outline: 2px solid hsl(var(--ring));
  outline-offset: 2px;
}

.interactive-surface {
  position: relative;
}

.interactive-surface::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: transparent;
  pointer-events: none;
  transition: background 0.14s ease;
}

.interactive-surface:hover::after {
  background: var(--elevate-1);
}

.interactive-surface:active::after {
  background: var(--elevate-2);
}

.summary {
  margin-top: calc(var(--spacing) * 3);
  border-radius: 0.5rem;
  min-height: 2.5rem;
  border: 1px solid hsl(var(--border));
  background: hsl(var(--muted));
  color: hsl(var(--muted-foreground));
  padding: calc(var(--spacing) * 2) calc(var(--spacing) * 3);
  font-size: 0.92rem;
}

.actions {
  margin-top: calc(var(--spacing) * 3);
}

.hidden {
  display: none;
}

.log-section {
  margin-top: calc(var(--spacing) * 5);
  border: 1px solid hsl(var(--card-border));
  border-radius: 0.75rem;
  background: hsl(var(--card));
  padding: calc(var(--spacing) * 6);
  box-shadow: var(--shadow-sm);
}

.log-section h3 {
  margin-top: 0;
}

.report-view {
  display: grid;
  gap: calc(var(--spacing) * 3);
}

.empty-state {
  border: 1px dashed hsl(var(--border));
  border-radius: 0.5rem;
  background: hsl(var(--muted));
  color: hsl(var(--muted-foreground));
  padding: calc(var(--spacing) * 4);
}

.status-card,
.report-card {
  border: 1px solid hsl(var(--card-border));
  border-radius: 0.75rem;
  background: hsl(var(--card));
  color: hsl(var(--card-foreground));
  padding: calc(var(--spacing) * 4);
}

.status-card.success {
  border-color: rgb(34 197 94 / 0.45);
  background: rgb(34 197 94 / 0.08);
}

.status-card.failed {
  border-color: rgb(239 68 68 / 0.45);
  background: rgb(239 68 68 / 0.08);
}

.status-card.warning {
  border-color: rgb(245 158 11 / 0.45);
  background: rgb(245 158 11 / 0.08);
}

.status-title {
  margin: 0 0 calc(var(--spacing) * 2);
}

.status-meta {
  margin: 0;
  color: hsl(var(--muted-foreground));
  font-size: 0.9rem;
}

.report-card h4 {
  margin: 0 0 calc(var(--spacing) * 2);
}

.report-card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: calc(var(--spacing) * 2);
  margin-bottom: calc(var(--spacing) * 2);
}

.report-card-header h4 {
  margin: 0;
}

.diff-export-controls {
  display: flex;
  flex-wrap: wrap;
  gap: calc(var(--spacing) * 2);
  align-items: end;
  margin: calc(var(--spacing) * 3) 0;
}

.diff-export-field {
  min-width: 16rem;
  flex: 1 1 16rem;
}

.diff-export-note {
  margin-top: calc(var(--spacing) * 1);
}

.inline-list {
  margin: 0;
  padding-left: calc(var(--spacing) * 5);
  display: grid;
  gap: calc(var(--spacing) * 1.5);
}

.warning-item {
  border: 1px solid rgb(245 158 11 / 0.4);
  border-radius: 0.5rem;
  background: rgb(245 158 11 / 0.08);
  padding: calc(var(--spacing) * 3);
  margin-bottom: calc(var(--spacing) * 2);
}

.warning-item p {
  margin: 0 0 calc(var(--spacing) * 2);
}

.warning-item details {
  color: hsl(var(--muted-foreground));
}

.error-item {
  border: 1px solid rgb(239 68 68 / 0.35);
  border-radius: 0.5rem;
  background: rgb(239 68 68 / 0.07);
  padding: calc(var(--spacing) * 3);
  margin-bottom: calc(var(--spacing) * 2);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.audit-text {
  width: 100%;
  min-height: 10rem;
  border-radius: 0.5rem;
  border: 1px solid hsl(var(--input));
  background: hsl(var(--muted));
  color: hsl(var(--foreground));
  padding: calc(var(--spacing) * 3);
  resize: vertical;
}

.icon-btn {
  border: 1px solid hsl(var(--border));
  background: hsl(var(--card));
  color: hsl(var(--foreground));
  border-radius: 0.4rem;
  min-height: 2rem;
  min-width: 2rem;
  padding: 0 calc(var(--spacing) * 2);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.icon-btn svg {
  width: 1rem;
  height: 1rem;
  stroke: currentColor;
  fill: none;
  stroke-width: 1.8;
}

.pipeline-progress {
  display: grid;
  gap: calc(var(--spacing) * 2);
}

.progress-steps {
  display: grid;
  gap: calc(var(--spacing) * 2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.progress-step {
  border: 1px solid hsl(var(--border));
  border-radius: 0.5rem;
  padding: calc(var(--spacing) * 2.5) calc(var(--spacing) * 3);
  background: hsl(var(--card));
  display: grid;
  gap: calc(var(--spacing) * 1);
}

.progress-step.active {
  border-color: hsl(var(--primary));
  box-shadow: inset 0 0 0 1px hsl(var(--primary));
}

.progress-step.done {
  border-color: rgb(34 197 94 / 0.4);
  background: rgb(34 197 94 / 0.05);
}

.progress-step-label {
  font-weight: 600;
}

.progress-step-meta {
  color: hsl(var(--muted-foreground));
  font-size: 0.86rem;
}

.changes-table-wrap {
  overflow: auto;
  border: 1px solid hsl(var(--border));
  border-radius: 0.375rem;
}

.changes-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 0.88rem;
}

.changes-table th {
  text-align: left;
  background: hsl(var(--muted));
  color: hsl(var(--foreground));
  border-bottom: 1px solid hsl(var(--border));
  padding: calc(var(--spacing) * 2);
}

.changes-table td {
  border-bottom: 1px solid hsl(var(--border));
  padding: calc(var(--spacing) * 2);
  text-align: left;
  vertical-align: top;
}

.changes-table tr.pair-start td {
  border-bottom: 0;
}

.changes-table td.action-cell {
  width: 64px;
  white-space: nowrap;
  padding-top: 0;
  padding-bottom: 0;
  position: relative;
  vertical-align: middle;
}

.pair-action-wrap {
  display: flex;
  align-items: center;
  padding-left: calc(var(--spacing) * 4);
  min-height: 100%;
  line-height: 1;
}

.changes-table tr.pair-row td.action-cell::before {
  content: "";
  position: absolute;
  left: calc(var(--spacing) * 2);
  top: 0;
  bottom: 0;
  width: 4px;
  background: hsl(var(--primary));
}

.action-icon-svg {
  width: 1.05rem;
  height: 1.05rem;
  display: block;
  fill: none;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
  flex: 0 0 auto;
}

.action-icon-svg.added {
  stroke: rgb(22 163 74);
}

.action-icon-svg.removed {
  stroke: rgb(220 38 38);
}

.diff-inline {
  display: inline-block;
  background: rgb(245 158 11 / 0.28);
  border-radius: 0.375rem;
  padding: 0.1rem 0.34rem;
}

html.dark .diff-inline {
  background: rgb(251 191 36 / 0.38);
}

.pager {
  margin-top: calc(var(--spacing) * 3);
  display: flex;
  align-items: center;
  gap: calc(var(--spacing) * 2);
  flex-wrap: wrap;
}

.pager button {
  border-radius: 0.375rem;
  min-height: 2rem;
  padding: 0 calc(var(--spacing) * 3);
  border: 1px solid hsl(var(--border));
  background: hsl(var(--card));
  color: hsl(var(--foreground));
  cursor: pointer;
}

.pager button[disabled] {
  pointer-events: none;
  opacity: 0.5;
}

.badge {
  display: inline-flex;
  align-items: center;
  min-height: 1.5rem;
  border-radius: 0.375rem;
  padding: 0 calc(var(--spacing) * 2);
  font-size: 0.76rem;
  font-weight: 700;
  white-space: nowrap;
}

.badge.removed {
  background: rgb(239 68 68 / 0.1);
  color: rgb(185 28 28);
  border: 1px solid rgb(239 68 68 / 0.25);
}

.badge.added {
  background: rgb(34 197 94 / 0.1);
  color: rgb(21 128 61);
  border: 1px solid rgb(34 197 94 / 0.25);
}

.mono {
  font-family: var(--font-mono);
  font-size: 0.82rem;
}

body.sidebar-collapsed .app-shell {
  --sidebar-width: 3rem;
}

body.sidebar-collapsed .sidebar-description,
body.sidebar-collapsed .sidebar-label,
body.sidebar-collapsed .sidebar-footer span,
body.sidebar-collapsed .menu-item {
  display: none;
}

body.sidebar-collapsed .sidebar-inner {
  padding: calc(var(--spacing) * 3);
}

body.sidebar-collapsed .sidebar-footer {
  justify-content: center;
  padding: calc(var(--spacing) * 3);
}

@media (min-width: 640px) {
  .grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 1023px) {
  .app-shell {
    grid-template-columns: 1fr;
  }

  .sidebar {
    border-right: 0;
    border-bottom: 1px solid hsl(var(--sidebar-border));
  }

  body.sidebar-collapsed .sidebar {
    display: none;
  }
}

/* ── Secondary button (shared) ──────────────────────────────────────────── */

.secondary-btn {
  border-radius: 0.375rem;
  min-height: 2rem;
  padding: 0 calc(var(--spacing) * 3);
  border: 1px solid hsl(var(--border));
  background: hsl(var(--card));
  color: hsl(var(--foreground));
  cursor: pointer;
  font: inherit;
  font-size: 13px;
}
.secondary-btn:hover { background: hsl(var(--muted)); }
.secondary-btn:disabled { pointer-events: none; opacity: 0.5; }

/* ── App Nav (shared across analysis pages) ─────────────────────────────── */

.app-nav {
  display: flex;
  align-items: center;
  background: hsl(var(--card));
  border-bottom: 1px solid hsl(var(--border));
  padding: 0 20px;
  height: 44px;
  font-size: 13px;
  gap: 0;
}

.app-nav-links {
  display: flex;
  gap: 2px;
  flex: 1;
  min-width: 0;
  overflow-x: auto;
}

.app-nav-link {
  display: inline-flex;
  align-items: center;
  padding: 0 9px;
  height: 44px;
  flex-shrink: 0;
  color: hsl(var(--muted-foreground));
  text-decoration: none;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
  transition: color 0.1s, border-color 0.1s;
}
.app-nav-link:hover { color: hsl(var(--foreground)); }
.app-nav-link--active {
  color: hsl(var(--primary));
  border-bottom-color: hsl(var(--primary));
  font-weight: 600;
}

.app-nav-db {
  font-size: 11px;
  font-family: var(--font-mono);
  color: hsl(var(--muted-foreground));
  background: hsl(var(--muted));
  border-radius: 4px;
  padding: 2px 8px;
  flex-shrink: 0;
  max-width: 240px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.app-nav-error {
  font-size: 11px;
  color: hsl(var(--destructive));
  flex-shrink: 0;
}

.app-nav-tenant-select {
  font-size: 12px;
  font-family: var(--font-mono);
  color: hsl(var(--foreground));
  background: hsl(var(--muted));
  border: 1px solid hsl(var(--border));
  border-radius: 4px;
  padding: 3px 6px;
  flex-shrink: 0;
  max-width: 140px;
}

.app-nav-new-tenant {
  font-size: 12px;
  color: hsl(var(--foreground));
  background: hsl(var(--muted));
  border: 1px solid hsl(var(--border));
  border-radius: 4px;
  padding: 3px 8px;
  cursor: pointer;
  flex-shrink: 0;
}
.app-nav-new-tenant:hover { background: hsl(var(--accent)); }

.app-modal {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: flex;
  align-items: center;
  justify-content: center;
  background: hsl(0 0% 0% / 0.5);
}

/* Muss `.app-modal { display:flex }` schlagen: höhere Spezifität statt Reihenfolge. */
.app-modal.hidden { display: none; }

.app-nav-empty-banner {
  padding: 8px 20px;
  background: hsl(var(--muted) / 0.6);
  border-bottom: 1px solid hsl(var(--border));
  color: hsl(var(--muted-foreground));
  font-size: 12px;
}

.app-modal-box {
  width: 380px;
  max-width: calc(100vw - 32px);
  background: hsl(var(--background));
  border: 1px solid hsl(var(--border));
  border-radius: 8px;
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  box-shadow: 0 10px 30px hsl(0 0% 0% / 0.3);
}

.app-modal-title {
  font-size: 16px;
  font-weight: 600;
  margin: 0;
}

.app-modal-label {
  display: flex;
  flex-direction: column;
  gap: 4px;
  font-size: 12px;
  color: hsl(var(--muted-foreground));
}

.app-modal-input {
  font-size: 13px;
  padding: 6px 8px;
  border: 1px solid hsl(var(--border));
  border-radius: 4px;
  background: hsl(var(--muted));
  color: hsl(var(--foreground));
}

.app-modal-check {
  display: flex;
  align-items: center;
  gap: 6px;
  font-size: 12px;
  color: hsl(var(--foreground));
}

.app-modal-error {
  font-size: 12px;
  color: hsl(var(--destructive));
}

.app-modal-log {
  font-family: var(--font-mono);
  font-size: 11px;
  max-height: 180px;
  overflow: auto;
  padding: 8px;
  margin: 0;
  background: hsl(222 20% 12%);
  color: hsl(0 0% 85%);
  border-radius: 4px;
  white-space: pre-wrap;
  word-break: break-word;
}

.app-modal-actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
}

.app-pipeline-bar {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 6px 20px;
  background: hsl(var(--muted) / 0.5);
  border-bottom: 1px solid hsl(var(--border));
  font-size: 12px;
}

.app-nav-pipeline-btn {
  flex-shrink: 0;
}

.app-nav-pipeline-status {
  color: hsl(var(--muted-foreground));
}

.app-nav-pipeline-status a {
  color: hsl(var(--primary));
  text-decoration: none;
}
.app-nav-pipeline-status a:hover { text-decoration: underline; }

.app-nav-pipeline-log {
  padding: 8px 20px;
  background: hsl(222 20% 12%);
  border-bottom: 1px solid hsl(var(--border));
}

.app-nav-pipeline-log pre {
  margin: 0;
  max-height: 240px;
  overflow-y: auto;
  font-family: var(--font-mono);
  font-size: 11px;
  line-height: 1.5;
  color: hsl(210 20% 90%);
  white-space: pre-wrap;
  word-break: break-word;
}

/* ── Transactions page ──────────────────────────────────────────────────── */

body.mt-page--wide > :not(#app-nav) {
  max-width: 1600px;
  margin-inline: auto;
}

.tx-filter-bar {
  display: flex;
  gap: 8px;
  align-items: center;
  flex-wrap: wrap;
  padding: 12px 20px;
  border-bottom: 1px solid hsl(var(--border));
  background: hsl(var(--muted) / 0.5);
}

.tx-filter-bar select,
.tx-filter-bar input[type="text"],
.tx-filter-bar input[type="date"] {
  border: 1px solid hsl(var(--input));
  border-radius: var(--radius);
  background: hsl(var(--card));
  color: hsl(var(--foreground));
  font: inherit;
  font-size: 13px;
  padding: 4px 8px;
  height: 32px;
  width: auto;
  min-width: 0;
}

.tx-filter-bar input[type="text"] { width: 130px; }
#filter-search { width: 180px; }

.tx-summary {
  padding: 6px 20px;
  font-size: 12px;
  color: hsl(var(--muted-foreground));
  border-bottom: 1px solid hsl(var(--border));
}

.tx-table-wrap { overflow-x: auto; }

.tx-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: 12px;
}

.tx-table th {
  background: hsl(var(--muted));
  border-bottom: 1px solid hsl(var(--border));
  padding: 7px 10px;
  text-align: left;
  font-weight: 600;
  white-space: nowrap;
  user-select: none;
}

.tx-table td {
  border-bottom: 1px solid hsl(var(--border));
  padding: 6px 10px;
  vertical-align: middle;
}

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

.tx-table th.sortable { cursor: pointer; }
.tx-table th.sortable:hover { background: hsl(var(--accent)); }
.tx-table th.sort-asc::after  { content: " \2191"; }
.tx-table th.sort-desc::after { content: " \2193"; }

.tx-date {
  color: hsl(var(--muted-foreground));
  white-space: nowrap;
  font-family: var(--font-mono);
  font-size: 11px;
}

.tx-id {
  font-family: var(--font-mono);
  font-size: 10px;
  color: hsl(var(--muted-foreground));
  white-space: normal;
  word-break: break-all;
  display: block;
  min-width: 180px;
}

.tx-comment {
  font-size: 11px;
  color: hsl(var(--muted-foreground));
  white-space: normal;
  word-wrap: break-word;
  display: block;
  min-width: 160px;
}

.tx-empty {
  text-align: center;
  color: hsl(var(--muted-foreground));
  padding: 24px;
}

.tx-pagination {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 12px 20px;
  font-size: 13px;
  color: hsl(var(--muted-foreground));
  border-top: 1px solid hsl(var(--border));
}

.tx-type-chip--trade { background: rgba(99,179,237,0.15); color: #63b3ed; }
.tx-type-chip--other { background: hsl(var(--muted)); color: hsl(var(--muted-foreground)); }

/* ── Balances page ──────────────────────────────────────────────────────── */

.bal-exchange-header td {
  padding: 10px 10px 4px;
  font-size: 11px;
  font-weight: 700;
  color: hsl(var(--muted-foreground));
  text-transform: uppercase;
  letter-spacing: 0.06em;
  background: hsl(var(--muted));
  border-top: 2px solid hsl(var(--border));
}
.bal-exchange-header:first-child td {
  border-top: none;
  padding-top: 4px;
}

.bal-row {
  cursor: pointer;
  transition: filter 0.1s;
}
.bal-row:hover { filter: brightness(0.96); }

.bal-row--open { background: rgba(239, 68, 68, 0.07); }
.bal-row--open td { border-color: rgba(239, 68, 68, 0.12) !important; }

.bal-row--recovered { background: rgba(245, 158, 11, 0.06); }
.bal-row--recovered td { border-color: rgba(245, 158, 11, 0.12) !important; }

.bal-deficit      { color: hsl(var(--destructive)); }
.bal-saldo--negative { color: hsl(var(--destructive)); font-weight: 600; }
.bal-saldo--positive { color: rgb(34, 197, 94); font-weight: 600; }
.bal-eur-hint { color: hsl(var(--muted-foreground)); font-size: 11px; white-space: nowrap; }
.bal-eur-col  { color: hsl(var(--muted-foreground)); font-size: 12px; }

.bal-detail-row > td {
  padding: 0 0 12px 24px;
  background: hsl(var(--muted) / 0.4);
}

.bal-detail-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 11px;
  border: 1px solid hsl(var(--border));
  border-radius: 6px;
  overflow: hidden;
}
.bal-detail-table th {
  background: hsl(var(--muted));
  border-bottom: 1px solid hsl(var(--border));
  padding: 5px 8px;
  text-align: left;
  font-weight: 600;
}
.bal-detail-table td {
  padding: 4px 8px;
  border-bottom: 1px solid hsl(var(--border));
}
.bal-detail-table tr:last-child td { border-bottom: none; }

/* ── Transfer-Analyse page ───────────────────────────────────────────────── */

body.mt-page {
  padding: 0;
}
body.mt-page > :not(#app-nav) {
  max-width: 860px;
  margin-inline: auto;
}

.mt-header {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 20px 12px;
  border-bottom: 1px solid hsl(var(--border));
}

.mt-back-link {
  color: hsl(var(--muted-foreground));
  text-decoration: none;
  font-size: 13px;
}
.mt-back-link:hover { color: hsl(var(--foreground)); }

.mt-title {
  flex: 1;
  font-size: 18px;
  font-weight: 600;
  margin: 0;
}

.mt-error {
  margin: 12px 20px;
  padding: 10px 14px;
  background: hsl(var(--destructive) / 0.15);
  border: 1px solid hsl(var(--destructive) / 0.4);
  border-radius: var(--radius);
  color: hsl(var(--destructive));
  font-size: 13px;
}

/* „Noch keine Daten"-Zustand: neutraler Hinweis statt rotem Fehler (überschreibt .mt-error). */
.mt-error.is-empty-state {
  background: hsl(var(--muted) / 0.6);
  border-color: hsl(var(--border));
  color: hsl(var(--muted-foreground));
}

.mt-loading { padding: 40px 20px; color: hsl(var(--muted-foreground)); font-size: 14px; }

.mt-section { padding: 20px; border-bottom: 1px solid hsl(var(--border)); }
.mt-section:last-child { border-bottom: none; }

.mt-section-title {
  font-size: 15px;
  font-weight: 600;
  margin: 0 0 12px;
  display: flex;
  align-items: center;
  gap: 8px;
}

.mt-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 20px;
  height: 20px;
  padding: 0 6px;
  border-radius: 10px;
  background: hsl(var(--muted));
  color: hsl(var(--muted-foreground));
  font-size: 11px;
  font-weight: 600;
}

.mt-empty { color: hsl(var(--muted-foreground)); font-size: 13px; margin: 0; }
.mt-hint { color: hsl(var(--muted-foreground)); font-size: 12px; margin: 0 0 10px; }

/* Proposal cards */
.mt-proposals { display: flex; flex-direction: column; gap: 10px; }

.mt-proposal-card {
  border: 1px solid hsl(var(--card-border));
  border-radius: var(--radius);
  background: hsl(var(--card));
  overflow: hidden;
}

.mt-proposal-header {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  background: hsl(var(--muted));
  border-bottom: 1px solid hsl(var(--border));
}

.mt-asset { font-weight: 700; font-size: 15px; }

.mt-conf {
  font-size: 11px;
  font-weight: 700;
  padding: 2px 6px;
  border-radius: 3px;
}
.mt-conf--high { background: rgba(72,187,120,0.15); color: #68d391; }
.mt-conf--mid  { background: rgba(237,137,54,0.15); color: #f6ad55; }
.mt-conf--low  { background: rgba(245,101,101,0.15); color: #fc8181; }

.mt-classification {
  margin-left: auto;
  font-size: 11px;
  color: hsl(var(--muted-foreground));
  font-family: var(--font-mono);
}

.mt-proposal-body { padding: 10px 14px; }

/* Grid aligns WD and DEP rows into 4 shared columns */
.mt-proposal-grid {
  display: grid;
  grid-template-columns: 82px minmax(80px, 1fr) auto auto;
  gap: 3px 12px;
  align-items: baseline;
  font-size: 13px;
}
.mt-proposal-row { display: contents; }
.mt-exchange { color: hsl(var(--muted-foreground)); }
.mt-amount   { font-family: var(--font-mono); text-align: right; }
.mt-ts       { color: hsl(var(--muted-foreground)); font-size: 11px; font-family: var(--font-mono); text-align: right; }

/* "Bei Bestätigung:" action list */
.mt-action-list {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid hsl(var(--border));
  font-size: 12px;
}
.mt-action-list strong { font-size: 11px; color: hsl(var(--muted-foreground)); text-transform: uppercase; letter-spacing: .04em; }
.mt-action-items { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.mt-action-item { padding: 4px 8px; border-radius: 4px; line-height: 1.4; white-space: pre-wrap; }
.mt-action-item--action  { background: rgba(72,187,120,0.12); color: #68d391; }
.mt-action-item--warning { background: rgba(237,137,54,0.15); color: #f6ad55; }

.mt-proposal-meta {
  font-size: 11px;
  color: hsl(var(--muted-foreground));
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px solid hsl(var(--border));
}

.mt-proposal-footer {
  display: flex;
  gap: 8px;
  padding: 10px 14px;
  border-top: 1px solid hsl(var(--border));
}

/* Match bar */
.mt-match-bar {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 10px 0 12px;
  flex-wrap: wrap;
}
.mt-arrow { color: hsl(var(--muted-foreground)); }

/* Timeline (shared with agent.css pattern) */
.tx-type-chip {
  display: inline-block;
  padding: 2px 7px;
  border-radius: 3px;
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
}
.tx-type-chip--withdrawal { background: rgba(245,101,101,0.15); color: #fc8181; }
.tx-type-chip--deposit    { background: rgba(72,187,120,0.15);  color: #68d391; }

.tx-rejected-badge {
  display: inline-block;
  margin-left: 6px;
  padding: 2px 7px;
  border-radius: 3px;
  font-size: 11px;
  font-weight: 600;
  white-space: nowrap;
  background: rgba(237,137,54,0.15);
  color: #ed8936;
}

.transfer-timeline {
  max-height: 520px;
  overflow-y: auto;
  border: 1px solid hsl(var(--border));
  border-radius: var(--radius);
}

.timeline-row {
  cursor: pointer;
  font-size: 12px;
  transition: background 0.1s;
}
.timeline-row:hover > td { background: hsl(var(--muted)); }
.timeline-row.selected > td { background: hsl(var(--primary) / 0.08); }

.unmatched-idx {
  width: 36px;
  min-width: 36px;
  text-align: right;
  color: hsl(var(--muted-foreground));
  font-variant-numeric: tabular-nums;
  font-size: 11px;
}

.timeline-date {
  flex-shrink: 0;
  width: 120px;
  color: hsl(var(--muted-foreground));
  font-family: var(--font-mono);
  font-size: 11px;
}
.timeline-exchange {
  flex-shrink: 0;
  width: 110px;
  overflow: hidden;
  text-overflow: ellipsis;
  color: hsl(var(--muted-foreground));
}
.timeline-amount {
  flex: 1;
  font-family: var(--font-mono);
  font-weight: 500;
}

/* Matcher chips */
.matcher-chip {
  display: inline-flex;
  padding: 3px 10px;
  border-radius: 12px;
  font-size: 12px;
  font-family: var(--font-mono);
  border: 1px dashed hsl(var(--border));
  color: hsl(var(--muted-foreground));
}
.matcher-chip--withdrawal.filled { background: rgba(245,101,101,0.15); color: #fc8181; border-style: solid; }
.matcher-chip--deposit.filled    { background: rgba(72,187,120,0.15);  color: #68d391; border-style: solid; }

/* TX column */
.tx-col { width: 110px; min-width: 90px; }
.tx-cell { white-space: nowrap; vertical-align: middle; }
.tx-id-short {
  font-family: var(--font-mono);
  font-size: 10px;
  color: hsl(var(--muted-foreground));
  vertical-align: middle;
}
.tx-copy-btn {
  background: none;
  border: none;
  cursor: pointer;
  padding: 1px 2px;
  color: hsl(var(--muted-foreground));
  opacity: 0.45;
  vertical-align: middle;
  line-height: 1;
  border-radius: 2px;
}
.tx-copy-btn:hover { opacity: 1; background: hsl(var(--muted)); }
.tx-copy-btn.copied { opacity: 1; color: #68d391; }
.tx-copy-btn.copy-failed { opacity: 1; color: #f56565; }
.tx-link-btn {
  display: inline-flex;
  align-items: center;
  padding: 1px 2px;
  color: hsl(var(--muted-foreground));
  opacity: 0.45;
  text-decoration: none;
  vertical-align: middle;
}
.tx-link-btn:hover { opacity: 1; color: hsl(var(--primary)); }

/* ── Steuerreport page ──────────────────────────────────────────────────── */

.tax-banner {
  margin: 0 0 12px;
  padding: 10px 14px;
  border-radius: var(--radius);
  font-size: 13px;
}

.tax-banner--blocked {
  background: hsl(var(--destructive) / 0.12);
  border: 1px solid hsl(var(--destructive) / 0.35);
  color: hsl(var(--destructive));
  font-weight: 600;
}

.tax-banner--provisional {
  background: hsl(43 96% 56% / 0.15);
  border: 1px solid hsl(43 96% 56% / 0.4);
  color: hsl(var(--foreground));
}

.tax-year-select-row {
  display: flex;
  align-items: center;
  gap: 8px;
  font-size: 13px;
}

.tax-year-select-row select {
  border: 1px solid hsl(var(--input));
  border-radius: var(--radius);
  background: hsl(var(--card));
  color: hsl(var(--foreground));
  font: inherit;
  font-size: 13px;
  padding: 4px 8px;
  height: 32px;
}

.tax-kpi-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 12px;
}

.tax-kpi-tile {
  border: 1px solid hsl(var(--card-border));
  border-radius: var(--radius);
  background: hsl(var(--card));
  padding: 12px 14px;
}

.tax-kpi-label {
  font-size: 11px;
  color: hsl(var(--muted-foreground));
  margin-bottom: 4px;
}

.tax-kpi-value {
  font-size: 16px;
  font-weight: 600;
}

.tax-pager {
  display: flex;
  align-items: center;
  padding: 10px 0 0;
}

.tax-incomplete-flag {
  display: inline-block;
  font-size: 10px;
  color: hsl(var(--destructive));
  border: 1px solid hsl(var(--destructive) / 0.4);
  border-radius: 4px;
  padding: 0 4px;
  margin-left: 4px;
}

.tax-group-card {
  border: 1px solid hsl(var(--card-border));
  border-radius: var(--radius);
  background: hsl(var(--card));
  padding: 14px;
  margin-bottom: 10px;
}

.tax-group-card-header {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-wrap: wrap;
}

.tax-group-eur {
  font-family: var(--font-mono);
  font-size: 13px;
  color: hsl(var(--muted-foreground));
}

.tax-priority-badge {
  display: inline-flex;
  align-items: center;
  padding: 1px 8px;
  border-radius: 10px;
  font-size: 11px;
  font-weight: 600;
}

.tax-priority--critical { background: hsl(var(--destructive) / 0.15); color: hsl(var(--destructive)); }
.tax-priority--medium { background: hsl(43 96% 56% / 0.2); color: hsl(43 96% 30%); }
.tax-priority--low { background: hsl(var(--muted)); color: hsl(var(--muted-foreground)); }

.tax-group-problems, .tax-group-actions {
  margin: 4px 0;
  padding-left: 20px;
  font-size: 12px;
}

.tax-group-link {
  display: inline-block;
  margin-top: 8px;
  font-size: 12px;
  color: hsl(var(--primary));
  text-decoration: none;
}

/* ── Verfahrensbericht page ─────────────────────────────────────────────── */
/* Vormals eingebettetes <style> in verfahrensbericht.html — von der CSP
   (style-src 'self', kein unsafe-inline) blockiert, deshalb hierher verschoben. */

.vb-main { max-width:1100px; margin:0 auto; padding:24px 16px; }
.vb-title { margin:0; font-size:1.4rem; }
.vb-empty-text { color:#888; }
.vb-index-col { color:#aaa; }
.vb-ts-col { white-space:nowrap; }
.vb-header { display:flex; align-items:center; gap:12px; margin-bottom:16px; flex-wrap:wrap; }
.vb-count { color:#888; font-size:.9rem; }
.vb-table-wrap { overflow-x:auto; }
.vb-table { width:100%; border-collapse:collapse; font-size:.88rem; }
.vb-table th { background:#f4f4f4; text-align:left; padding:8px 10px; border-bottom:2px solid #ddd; white-space:nowrap; }
.vb-table td { padding:7px 10px; border-bottom:1px solid #eee; vertical-align:top; }
.vb-table tr:hover td { background:#fafafa; }
.vb-action-badge { display:inline-block; padding:2px 8px; border-radius:4px; font-size:.8rem; font-weight:600; }
.vb-action-badge--Änderung { background:#fff3cd; color:#856404; }
.vb-action-badge--Hinzufügung { background:#d1e7dd; color:#0f5132; }
.vb-action-badge--Entfernung { background:#f8d7da; color:#842029; }
.vb-reason { max-width:360px; }
.vb-snap-toggle { cursor:pointer; color:#0070c0; font-size:.8rem; text-decoration:underline; user-select:none; }
.vb-snap-detail { display:none; margin-top:4px; background:#f8f9fa; border:1px solid #dee2e6; border-radius:4px; padding:6px; font-size:.78rem; font-family:monospace; white-space:pre-wrap; max-width:420px; }
.vb-snap-detail.open { display:block; }
#vb-loading, #vb-error, #vb-empty { padding:16px 0; }
#vb-error { color:#842029; }
.tax-group-link:hover { text-decoration: underline; }

/* Problem-Ticker-Seite */
.pt-intro { color:#555; font-size:.9rem; line-height:1.5; max-width:820px; margin:0 0 16px; }
.pt-intro code { background:#f1f3f5; padding:1px 5px; border-radius:3px; font-size:.85em; }
#pt-loading, #pt-error, #pt-empty { padding:16px 0; }
#pt-error { color:#842029; }
.pt-num { text-align:right; font-variant-numeric:tabular-nums; white-space:nowrap; }
.pt-ticker { font-weight:700; }
.pt-suspect { font-weight:400; font-size:.78rem; color:#666; margin-top:2px; }
.pt-signal { display:inline-block; padding:2px 8px; border-radius:4px; font-size:.78rem; font-weight:600; white-space:nowrap; }
.pt-signal--direct { background:#f8d7da; color:#842029; }
.pt-signal--stat { background:#e2e3f0; color:#3b3f6b; }
.pt-conf { display:inline-block; padding:2px 8px; border-radius:4px; font-size:.78rem; font-weight:600; }
.pt-conf--high { background:#f8d7da; color:#842029; }
.pt-conf--mid  { background:#fff3cd; color:#856404; }
.pt-conf--low  { background:#e9ecef; color:#495057; }
.pt-ex-row td { padding:0 !important; border-bottom:1px solid #eee; }
.pt-examples { display:none; padding:8px 10px 12px; background:#fafbfc; }
.pt-examples.open { display:block; }
.pt-ex-table { width:100%; border-collapse:collapse; font-size:.82rem; }
.pt-ex-table th { text-align:left; padding:5px 8px; color:#666; font-weight:600; border-bottom:1px solid #dee2e6; white-space:nowrap; }
.pt-ex-table td { padding:5px 8px; border-bottom:1px solid #f0f0f0; vertical-align:top; }
.pt-ex-eur { color:#888; }

/* Wallet-Graph-Seite */
.wg-controls { display:flex; align-items:center; gap:14px; }
.wg-metric-toggle { display:flex; align-items:center; gap:4px; font-size:.85rem; cursor:pointer; }
#wg-svg { width:100%; max-width:640px; height:640px; display:block; margin:0 auto; }
.wg-node-label { font-size:11px; fill:#333; }
.wg-ribbon { cursor:pointer; }

/* Dashboard-Seite */
.dash-wallet-header { display:flex; justify-content:space-between; align-items:center; cursor:pointer; padding:4px 0; }
.dash-wallet-count { color:#888; font-size:.85rem; }
