/* orbita:admin-overhaul (01.11.2026) - gemeinsame Regeln der Kennzahlen-Karten
   und Graphen, im Admin und im Kundenportal.

   Noah: „5.534,77 € und die 7 von 77 ist in der nächsten Zeile“, „die silbernen
   Kreise gehen über den Text drüber, statt hinter dem Text zu sein“, „die
   Kie-Karten kompakter auf Mobile, zwei nebeneinander“, „wenn ich drauf klicke,
   soll es dahin leiten, wo ich das sehe, was in der Karte steht“. */

/* 1. Der Deko-Kreis liegt hinter dem Inhalt, auf jeder Karte. */
.stat-card { isolation: isolate; }
.stat-card::after { z-index: -1; }

/* 2. Eine Zahl bricht nie um. Die Schrift folgt der Kartenbreite (cqi), statt
      dass die letzte Ziffer in die nächste Zeile rutscht. */
.stat-card { container-type: inline-size; }
.stat-value {
  white-space: nowrap;
  font-size: clamp(1.05rem, 13.5cqi, 2.4rem);
  max-width: 100%;
}

/* 3. Raster für Kennzahlen: mobil zwei nebeneinander, kompakter. */
.kpi-raster {
  display: grid;
  gap: 14px;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}
@media (max-width: 640px) {
  .kpi-raster { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  .kpi-raster .stat-card { min-height: 0; padding: 12px 14px; gap: 4px; }
  .kpi-raster .stat-card .stat-icon { width: 30px; height: 30px; margin-bottom: 4px; border-radius: 10px; }
  .kpi-raster .stat-card .stat-icon svg { width: 15px; height: 15px; }
  .kpi-raster .stat-card .stat-label { font-size: 0.8rem; line-height: 1.3; }
  .kpi-raster .stat-card::after { width: 84px; height: 84px; right: -28px; top: -28px; border-width: 10px; }
  /* eine Karte mit großer Zahl darf die ganze Zeile nehmen */
  .kpi-raster .kpi-breit { grid-column: 1 / -1; }
}

/* 3b. Geld als Rechnung von oben nach unten (Noah, 02.11.2026: „oben Total
      Takings, dann Book Sales, dann Slot Sales, Author Shares. Und dann unten
      Our Profit“): Summe über die ganze Breite, die Teile in einer Reihe
      (--n = Anzahl der Teile), der Gewinn grün über die ganze Breite. Mobil
      zwei Teile je Reihe, ein übriger Teil nimmt die Zeile. */
.geld-split { grid-template-columns: repeat(var(--n, 3), minmax(0, 1fr)); }
.geld-split > .geld-summe, .geld-split > .geld-gewinn { grid-column: 1 / -1; }
.stat-card.geld-gewinn { background: linear-gradient(130deg, rgba(22,163,74,.09), var(--card) 70%); border-color: #BBF7D0; }
.stat-card.geld-gewinn .stat-value { color: #15803d; }
@media (max-width: 640px) {
  .geld-split { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .geld-split > .geld-teil:nth-last-child(2):nth-child(even) { grid-column: 1 / -1; }
}

/* 4. Eine Karte, die etwas öffnet oder filtert, sieht klickbar aus;
      die gewählte ist markiert. */
a.stat-card, button.stat-card, .stat-card[data-filter], .stat-card[data-href] {
  cursor: pointer; text-decoration: none; color: inherit; text-align: left; font: inherit;
}
button.stat-card { width: 100%; }
.stat-card.is-aktiv, .stat-card[aria-pressed="true"] {
  border-color: var(--primary);
  box-shadow: 0 0 0 2px rgba(99, 91, 255, 0.18), var(--shadow-sm);
}
.stat-card:focus-visible { outline: 2px solid var(--primary); outline-offset: 2px; }
/* nicht klickbare Karten heben sich beim Überfahren nicht */
.stat-card:not(a):not(button):not([data-filter]):not([data-href]):hover {
  transform: none;
  box-shadow: var(--shadow-sm);
  border-color: var(--border);
}

/* 5. Graphen: mit dem Daumen lesen (app/static/js/graph-wischen.js). */
.gw-flaeche {
  touch-action: pan-y;
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
  -webkit-tap-highlight-color: transparent;
}
.gw-flaeche * { -webkit-user-select: none; user-select: none; -webkit-touch-callout: none; }

/* 6. Waagerecht scrollender Graph: Abstand zwischen Beschriftung und Balken. */
.graph-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: 12px; }

/* 7. Filterleiste (components/filterleiste.html) mobil: Suche offen, der Rest
      hinter „Filters“ mit Zahl der gesetzten Filter. Desktop unverändert. */
.adm-filterbar .fb-umschalter { display: none; }
.adm-filterbar .fb-zahl {
  display: inline-grid; place-items: center; min-width: 20px; height: 20px; padding: 0 6px;
  margin-left: 6px; border-radius: 999px; background: var(--primary); color: #fff;
  font-size: 0.75rem; font-weight: 700;
}
.adm-filterbar .fb-umschalter .ico { width: 16px; height: 16px; margin-right: 6px; }
@media (max-width: 640px) {
  .adm-filterbar { padding: 12px; }
  .adm-filterbar .fb-umschalter { display: inline-flex; align-items: center; justify-content: center; }
  .adm-filterbar:not(.is-offen) .fb-feld,
  .adm-filterbar:not(.is-offen) > a.btn { display: none; }
  .adm-filterbar .fb-search { flex: 1 1 100%; }
  .adm-filterbar .fb-search .form-label { display: none; }
  .adm-filterbar > .btn { flex: 1 1 calc(50% - 5px); }
  .adm-filterbar.fb-ohne-suche > .fb-umschalter { flex: 1 1 100%; }
  .adm-filterbar.is-offen .fb-feld { animation: fb-auf 180ms ease-out; }
}
@keyframes fb-auf { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }

/* 8. Karten-Tabelle (P61, 02.11.2026). Noah am Handy: Tabellen sollen nicht
      seitwärts scrollen. Eine <table class="adm-karten-tabelle"> wird unter
      900 px zur Liste kleiner Karten: je Zeile eine Karte, die Kopfzeile
      entfällt, jede Zelle trägt ihr Label aus data-label (setzt
      app/static/js/karten-tabelle.js aus dem <thead>). Die wichtigste Zelle
      (.kt-haupt) steht oben und fett, die Knöpfe (.kt-aktion) unten in einer
      Reihe, leere Zellen (.kt-leer) fallen weg. Ab 900 px bleibt es eine Tabelle. */
@media (max-width: 900px) {
  .table-wrapper:has(> table.adm-karten-tabelle) { overflow-x: visible; }
  table.adm-karten-tabelle,
  table.adm-karten-tabelle tbody,
  table.adm-karten-tabelle tfoot {
    display: block; width: 100%; min-width: 0 !important; max-width: 100%;
    table-layout: auto; border: 0; background: none;
  }
  table.adm-karten-tabelle colgroup,
  table.adm-karten-tabelle thead { display: none; }
  table.adm-karten-tabelle tr {
    display: block; position: relative; margin: 0 0 10px; padding: 12px 14px;
    background: var(--card); border: 1px solid var(--border);
    border-radius: var(--radius-md); box-shadow: var(--shadow-sm);
  }
  table.adm-karten-tabelle tr:last-child { margin-bottom: 0; }
  table.adm-karten-tabelle tfoot tr { background: var(--slate-50); }
  table.adm-karten-tabelle td,
  table.adm-karten-tabelle th {
    display: flow-root; width: auto !important; min-width: 0 !important; max-width: none !important;
    padding: 4px 0 !important; border: 0 !important; background: none !important; box-shadow: none !important;
    text-align: right; white-space: normal !important; overflow: visible; text-overflow: clip;
    overflow-wrap: anywhere; font-size: 0.88rem; font-weight: 400; text-transform: none;
    letter-spacing: 0; color: var(--text);
  }
  table.adm-karten-tabelle td[data-label]::before,
  table.adm-karten-tabelle th[data-label]::before {
    content: attr(data-label); float: left; width: 40%; margin-right: 10px;
    text-align: left; font-size: 0.76rem; font-weight: 600; color: var(--text-muted);
    overflow-wrap: normal; word-break: normal;
    font-family: var(--font-sans); font-variant-numeric: normal; letter-spacing: 0; text-transform: none;
  }
  /* Die wichtigste Zelle: oben, fett, ohne Label. */
  table.adm-karten-tabelle .kt-haupt {
    text-align: left; font-size: 1rem; font-weight: 600; padding: 0 0 6px !important;
    margin-bottom: 4px; border-bottom: 1px solid var(--border) !important;
  }
  table.adm-karten-tabelle .kt-haupt::before { display: none; }
  table.adm-karten-tabelle .kt-haupt a { color: inherit; }
  table.adm-karten-tabelle .kt-haupt a, table.adm-karten-tabelle .kt-haupt strong { font-weight: 600; }
  /* Auswahlhaken rechts oben in der Karte. */
  table.adm-karten-tabelle .kt-pick {
    position: absolute; top: 12px; right: 14px; padding: 0 !important; width: auto !important;
  }
  table.adm-karten-tabelle tr:has(.kt-pick) .kt-haupt { padding-right: 36px !important; }
  table.adm-karten-tabelle .kt-pick::before { display: none; }
  /* Knöpfe unten in einer Reihe. */
  table.adm-karten-tabelle .kt-aktion {
    display: flex; flex-wrap: wrap; justify-content: flex-start; gap: 8px; text-align: left;
    margin-top: 6px; padding-top: 10px !important; border-top: 1px solid var(--border) !important;
  }
  table.adm-karten-tabelle .kt-aktion::before { display: none; }
  table.adm-karten-tabelle .kt-aktion form { display: contents; }
  /* Zelle über die ganze Karte (colspan), z. B. leere Liste. */
  table.adm-karten-tabelle .kt-voll { text-align: left; }
  table.adm-karten-tabelle .kt-voll::before { display: none; }
  table.adm-karten-tabelle .kt-leer { display: none; }
  table.adm-karten-tabelle tbody tr:hover td { background: none !important; }
  table.adm-karten-tabelle td > .btn, table.adm-karten-tabelle td > a.btn { white-space: nowrap; }
}
/* Auswahlhaken in Tabellenzellen (Baustein .haken) mittig, Karten-Tabelle siehe 8. */
.th-pick .haken, .td-pick .haken { margin: 0 auto; }
