:root {
  --ops-bg: #f4f6fa;
  --ops-surface: #ffffff;
  --ops-text: #111827;
  --ops-muted: #667085;
  --ops-action: #1e408f;
  --ops-action-dark: #17336f;
  --ops-border: #dfe5ef;
  --ops-border-soft: #edf1f6;
  --ops-soft: #f8fafc;
  --ops-blue-soft: #eef3ff;
  --ops-radius-lg: 22px;
  --ops-radius-md: 14px;
  --ops-shadow-card: 0 14px 38px rgba(15, 23, 42, .055);
  --ops-font: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --ops-viewport-height: 100dvh;
}

html:has(body.ops-app) {
  height: 100%;
  background: var(--ops-bg);
}

body.ops-app {
  color: var(--ops-text);
  font-family: var(--ops-font);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: geometricPrecision;
}

/* Gemeinsamer Rahmen fuer MoC, Reporting, Finding und PK-Auswertungen. */
body.ops-shell-page {
  height: var(--ops-viewport-height);
  min-height: 0;
  overflow: hidden;
  background: linear-gradient(180deg, #f8fafc 0%, var(--ops-bg) 420px);
}

body.ops-shell-page > .layout {
  display: grid !important;
  grid-template-columns: 210px minmax(0, 1fr) !important;
  width: 100%;
  height: var(--ops-viewport-height) !important;
  min-height: 0 !important;
  max-height: var(--ops-viewport-height) !important;
  overflow: hidden !important;
  transition: grid-template-columns .18s ease !important;
}

body.ops-shell-page > .layout.sidebar-collapsed {
  grid-template-columns: 58px minmax(0, 1fr) !important;
}

body.ops-shell-page .sidebar {
  min-width: 0 !important;
  min-height: 0 !important;
  padding: 18px 12px !important;
  overflow-x: hidden !important;
  overflow-y: auto !important;
  overscroll-behavior: contain;
  border-right: 1px solid var(--ops-border) !important;
  background: var(--ops-surface) !important;
  box-shadow: none !important;
}

body.ops-shell-page .brand-row {
  display: flex !important;
  align-items: flex-start !important;
  justify-content: space-between !important;
  gap: 8px !important;
  min-height: 0 !important;
  margin-bottom: 20px !important;
}

body.ops-shell-page .brand strong {
  display: block !important;
  font-size: 28px !important;
  font-weight: 950 !important;
  line-height: 1 !important;
  letter-spacing: -.06em !important;
}

body.ops-shell-page .brand span {
  display: block;
  margin-top: 5px !important;
  color: var(--ops-muted) !important;
  font-size: 14px !important;
  font-weight: 700 !important;
}

body.ops-shell-page .sidebar-toggle {
  width: 30px !important;
  min-width: 30px !important;
  height: 30px !important;
  min-height: 30px !important;
  padding: 0 !important;
  border: 1px solid var(--ops-border) !important;
  border-radius: 8px !important;
  background: #fff !important;
  color: var(--ops-muted) !important;
  font-size: 20px !important;
  line-height: 1 !important;
  box-shadow: none !important;
}

body.ops-shell-page .sidebar nav {
  display: grid;
  gap: 5px;
}

body.ops-shell-page .sidebar nav a {
  min-height: 0;
  padding: 8px 10px;
  border-radius: 10px;
  color: var(--ops-text);
  font-size: 14px;
  font-weight: 650;
  line-height: 1.2;
  text-decoration: none;
}

body.ops-shell-page .sidebar nav a:hover,
body.ops-shell-page .sidebar nav a.active,
body.ops-shell-page .sidebar nav a.active:hover {
  background: var(--ops-blue-soft) !important;
  color: var(--ops-action) !important;
  box-shadow: none !important;
}

body.ops-shell-page > .layout > .main {
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  height: 100% !important;
  max-height: none !important;
  padding: 18px 20px !important;
  overflow: hidden;
}

body.ops-shell-page .topbar {
  display: flex !important;
  flex: 0 0 auto;
  align-items: center !important;
  justify-content: space-between !important;
  flex-direction: row !important;
  gap: 16px !important;
  min-height: 0 !important;
  margin-bottom: 16px !important;
  overflow: visible !important;
}

body.ops-shell-page .topbar-title {
  flex: 0 1 auto;
  min-width: 0 !important;
}

body.ops-shell-page .topbar h1 {
  display: inline-flex !important;
  align-items: center !important;
  gap: 10px !important;
  margin: 0 !important;
  color: var(--ops-text) !important;
  font-family: var(--ops-font) !important;
  font-size: 36px !important;
  font-weight: 650 !important;
  line-height: 1.1 !important;
  letter-spacing: -.035em !important;
  white-space: nowrap;
}

body.ops-shell-page .topbar-tools {
  display: flex !important;
  flex: 1 1 auto;
  align-items: center !important;
  justify-content: flex-end !important;
  gap: 10px !important;
  min-width: 0;
}

body.ops-shell-page .topbar-tools input[type="search"] {
  flex: 0 1 420px;
  width: clamp(280px, 30vw, 420px) !important;
  height: 44px !important;
  min-height: 44px !important;
  margin-top: 0 !important;
  border: 1px solid var(--ops-border) !important;
  border-radius: 16px !important;
  background: #fff !important;
  color: var(--ops-text) !important;
  font-family: var(--ops-font) !important;
}

body.ops-shell-page .refresh-button {
  width: 34px !important;
  min-width: 34px !important;
  height: 34px !important;
  min-height: 34px !important;
  padding: 0 !important;
  border: 1px solid var(--ops-border) !important;
  border-radius: 10px !important;
  background: #fff !important;
  color: var(--ops-text) !important;
  box-shadow: none !important;
}

body.ops-table-page .main > .card {
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  border: 1px solid var(--ops-border) !important;
  border-radius: var(--ops-radius-lg) !important;
  background: rgba(255, 255, 255, .96) !important;
  box-shadow: var(--ops-shadow-card) !important;
}

body.ops-table-page .main > .card .table-shell {
  min-width: 0;
  min-height: 0;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}

body.ops-dashboard-page .main {
  overflow: auto !important;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}

/*
 * PK-Uebersicht: neuer gemeinsamer Rahmen bei unveraenderten PK-Bedienelementen.
 * Die hohe Spezifitaet neutralisiert nur alte Shell-/Rahmen-Locks. Buttons,
 * IDs und Handler der PK-Uebersicht bleiben bewusst modulspezifisch.
 */
body.ops-pk-overview-page > .layout.sidebar-collapsed .sidebar-toggle {
  width: 30px !important;
  min-width: 30px !important;
  height: 30px !important;
  min-height: 30px !important;
  margin: 0 auto !important;
  border-radius: 8px !important;
}

body.ops-pk-overview-page .main > .overview-card {
  padding: 16px 18px !important;
}

body.ops-pk-overview-page .overview-card > #tableContainer {
  min-width: 0 !important;
  min-height: 0 !important;
  overflow: hidden !important;
}

body.ops-pk-overview-page .overview-card .pk-table-shell {
  margin: 0 !important;
  border: 1px solid var(--ops-border) !important;
  border-radius: 16px !important;
  background: #fff !important;
  overflow: auto !important;
}

body.ops-shell-page > .layout.sidebar-collapsed .sidebar {
  padding: 14px 8px !important;
}

body.ops-shell-page > .layout.sidebar-collapsed .brand strong {
  font-size: 18px !important;
  letter-spacing: 0 !important;
}

body.ops-shell-page > .layout.sidebar-collapsed .brand-row {
  display: grid !important;
  justify-items: center !important;
  gap: 8px !important;
}

body.ops-shell-page > .layout.sidebar-collapsed .brand span,
body.ops-shell-page > .layout.sidebar-collapsed .sidebar nav a,
body.ops-shell-page > .layout.sidebar-collapsed .sidebar hr,
body.ops-shell-page > .layout.sidebar-collapsed .sidebar-stats,
body.ops-shell-page > .layout.sidebar-collapsed .sidebar-filters,
body.ops-shell-page > .layout.sidebar-collapsed .sidebar-version {
  display: none !important;
}

body.ops-shell-page > .layout.sidebar-collapsed .sidebar-toggle {
  transform: rotate(180deg) !important;
}

/* Formulare behalten ihren eigenen Aufbau, verwenden aber dieselben Grundwerte. */
body.ops-form-page {
  min-height: var(--ops-viewport-height);
  overflow-x: hidden;
  overflow-y: auto;
  background: linear-gradient(180deg, #f8fafc 0%, var(--ops-bg) 420px) !important;
  -webkit-overflow-scrolling: touch;
}

body.ops-form-page .form-container {
  border-color: var(--ops-border) !important;
  border-radius: var(--ops-radius-lg) !important;
  box-shadow: var(--ops-shadow-card) !important;
}

body.ops-form-page input,
body.ops-form-page select,
body.ops-form-page textarea {
  scroll-margin-block: 18vh;
}

/* Modale muessen auf iPad auch bei langen Inhalten vollstaendig erreichbar sein. */
body.ops-app .modal {
  overscroll-behavior: contain;
}

body.ops-app .modal-box {
  max-height: calc(var(--ops-viewport-height) - 28px) !important;
  overflow-x: hidden;
  overflow-y: auto !important;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
}

.ops-test-badge {
  position: fixed;
  right: max(10px, env(safe-area-inset-right));
  bottom: max(10px, env(safe-area-inset-bottom));
  z-index: 10000;
  display: inline-flex;
  align-items: center;
  min-height: 30px;
  padding: 5px 10px;
  border: 1px solid #f2c36b;
  border-radius: 999px;
  background: #fff8e8;
  color: #7a4b00;
  box-shadow: 0 8px 24px rgba(15, 23, 42, .12);
  font: 750 11px/1 var(--ops-font);
  text-decoration: none;
}

@media (hover: none) and (pointer: coarse) {
  body.ops-shell-page,
  body.ops-shell-page > .layout {
    height: var(--ops-viewport-height) !important;
    min-height: 0 !important;
    max-height: var(--ops-viewport-height) !important;
  }

  body.ops-shell-page .main {
    overflow-x: hidden !important;
    overflow-y: auto !important;
    overscroll-behavior-y: contain;
    -webkit-overflow-scrolling: touch;
  }

  body.ops-table-page .main > .card {
    flex: 0 0 auto;
    min-height: calc(var(--ops-viewport-height) - 96px);
  }

  body.ops-table-page .main > .card .table-shell {
    overflow: auto !important;
    max-height: none !important;
  }
}

@media (max-width: 1100px) {
  body.ops-shell-page > .layout,
  body.ops-shell-page > .layout.sidebar-collapsed {
    grid-template-columns: minmax(0, 1fr) !important;
  }

  body.ops-shell-page > .layout > .sidebar,
  body.ops-shell-page > .layout.sidebar-collapsed > .sidebar {
    display: none !important;
  }

  body.ops-shell-page > .layout > .main {
    width: 100% !important;
    height: var(--ops-viewport-height) !important;
    min-height: 0 !important;
    max-height: var(--ops-viewport-height) !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    padding: max(14px, env(safe-area-inset-top)) max(14px, env(safe-area-inset-right)) max(18px, env(safe-area-inset-bottom)) max(14px, env(safe-area-inset-left)) !important;
    overscroll-behavior-y: contain;
    -webkit-overflow-scrolling: touch;
  }

  body.ops-shell-page .topbar {
    align-items: stretch !important;
    flex-direction: column !important;
    gap: 12px !important;
  }

  body.ops-shell-page .topbar h1 {
    font-size: clamp(27px, 5vw, 34px) !important;
    white-space: normal !important;
  }

  body.ops-shell-page .topbar-tools {
    justify-content: stretch !important;
    flex-wrap: wrap !important;
    width: 100% !important;
  }

  body.ops-shell-page .topbar-tools input[type="search"] {
    flex: 1 1 100%;
    width: 100% !important;
    max-width: none !important;
  }

  body.ops-app .modal {
    align-items: flex-start !important;
    padding: max(10px, env(safe-area-inset-top)) max(10px, env(safe-area-inset-right)) max(10px, env(safe-area-inset-bottom)) max(10px, env(safe-area-inset-left)) !important;
  }

  body.ops-app .modal-box {
    width: 100% !important;
    max-width: none !important;
    max-height: calc(var(--ops-viewport-height) - 20px) !important;
  }
}

@media (max-width: 760px) {
  body.ops-shell-page .topbar-tools > button,
  body.ops-shell-page .topbar-tools > a {
    flex: 1 1 auto;
  }

  body.ops-form-page {
    padding: max(12px, env(safe-area-inset-top)) max(10px, env(safe-area-inset-right)) max(20px, env(safe-area-inset-bottom)) max(10px, env(safe-area-inset-left)) !important;
  }

  body.ops-form-page .form-container {
    width: 100% !important;
    max-width: none !important;
    margin: 0 auto !important;
  }
}

/*
 * iPad / Touch-Tablets: ein gemeinsamer zweizeiliger Kopf fuer alle Module.
 * Die Suche und die modulspezifischen Aktionen bleiben dabei in einer Reihe.
 */
@media (hover: none) and (pointer: coarse) and (min-width: 761px) and (max-width: 1400px),
       (min-width: 761px) and (max-width: 1100px) {
  body.ops-shell-page .topbar {
    align-items: stretch !important;
    flex-direction: column !important;
    gap: 12px !important;
  }

  body.ops-shell-page .topbar-title {
    width: 100% !important;
  }

  body.ops-shell-page .topbar h1 {
    flex-wrap: wrap !important;
    font-size: 32px !important;
    white-space: normal !important;
  }

  body.ops-shell-page .topbar-tools {
    align-items: center !important;
    flex-direction: row !important;
    flex-wrap: nowrap !important;
    justify-content: stretch !important;
    width: 100% !important;
  }

  body.ops-shell-page .topbar-tools input[type="search"],
  body.ops-pk-overview-page .topbar-tools #searchSection {
    flex: 1 1 0 !important;
    width: auto !important;
    max-width: none !important;
    min-width: 220px !important;
  }
}

/*
 * PK-Bearbeitung auf Touch-Geraeten: Kopf und Aktionen bleiben sichtbar,
 * ausschliesslich der Formularinhalt scrollt. Die untere linke Ecke bleibt
 * fuer den extern eingeblendeten Sprachschalter frei.
 */
@media (hover: none) and (pointer: coarse), (max-width: 1100px) {
  body.ops-pk-overview-page #editModal {
    top: max(10px, env(safe-area-inset-top)) !important;
    right: max(10px, env(safe-area-inset-right)) !important;
    bottom: max(10px, env(safe-area-inset-bottom)) !important;
    left: max(10px, env(safe-area-inset-left)) !important;
    width: auto !important;
    height: auto !important;
    max-height: none !important;
    transform: none !important;
    border-radius: 20px !important;
  }

  body.ops-pk-overview-page #editModal[aria-hidden="false"] {
    display: flex !important;
    flex-direction: column !important;
  }

  body.ops-pk-overview-page #editModal .modal-header {
    flex: 0 0 auto !important;
    padding: 16px 20px 14px !important;
  }

  body.ops-pk-overview-page #editModal .modal-header h2 {
    font-size: 24px !important;
    line-height: 1.15 !important;
  }

  body.ops-pk-overview-page #editModal form {
    flex: 1 1 auto !important;
    height: auto !important;
    max-height: none !important;
    min-height: 0 !important;
    overflow: hidden !important;
  }

  body.ops-pk-overview-page #editFields {
    flex: 1 1 auto !important;
    min-height: 0 !important;
    overflow-x: hidden !important;
    overflow-y: auto !important;
    padding-bottom: 20px !important;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
  }

  body.ops-pk-overview-page #editModal .edit-btns {
    flex: 0 0 auto !important;
    min-height: 68px !important;
    padding: 10px max(18px, env(safe-area-inset-right)) max(10px, env(safe-area-inset-bottom)) max(82px, env(safe-area-inset-left)) !important;
  }

  body.ops-pk-overview-page:has(#editModal[aria-hidden="false"]) .ops-test-badge {
    display: none !important;
  }
}

@media print {
  .ops-test-badge {
    display: none !important;
  }
}
