/* ── HOVER-ONLY (Maus/Trackpad) ──
   Nur Geräte mit echtem Hover + präzisem Zeiger bekommen Hover-Effekte —
   auf Touch (iPad/iPhone, Tesla-Browser) sonst "hängenbleibender" Hover-Zustand
   nach einem Tap (klassisches iOS-Sticky-Hover-Problem). */
@media (hover: hover) and (pointer: fine) {
	.admin-table tbody tr:hover td {
		background: var(--bg-hover);
		cursor: default;
	}
}

/* ── ADMIN ── */
.admin-table {
	width: 100%;
	/* design-system.md Fallstrick #1: separate + border-spacing:0, never
	   collapse — same fix as table.txns (css/views.css), applied here too. */
	border-collapse: separate;
	border-spacing: 0;
}
.admin-table th {
	/* Vertical rhythm unified with every other redesigned table (0 top /
	   0.6rem bottom on headers, 0.5rem on body cells); 0.875rem horizontal =
	   the app's existing 14px inline value expressed in rem (Nutzerwunsch
	   10.08.2026, same treatment as table.txns). */
	padding: 0 0.875rem 0.6rem;
	font-size: var(--fs-table-head);
	font-weight: 400;
	letter-spacing: 0.07em;
	text-transform: uppercase;
	color: var(--t3);
	/* design-system.md: ONE line value app-wide for tables — 1px var(--line),
	   never --line2 or 0.5px. */
	border-bottom: 1px solid var(--line);
	text-align: left;
}
.admin-table td {
	padding: 0.5rem 0.875rem;
	font-size: var(--fs-table-body);
	border-bottom: 1px solid var(--line);
}
.admin-table tr:last-child td {
	border-bottom: none;
}
/* Flush against the card's own edges, matching every other redesigned table
   (Nutzerwunsch 10.08.2026) — same treatment as table.txns (css/views.css):
   the 0.875rem inline padding above stays for gaps BETWEEN columns, only the
   outer edges shouldn't be inset from the card. */
.admin-table th:first-child,
.admin-table td:first-child {
	padding-left: 0;
}
.admin-table th:last-child,
.admin-table td:last-child {
	padding-right: 0;
}
.admin-table th.r,
.admin-table td.r {
	text-align: right;
}
/* Kein eigenes font-size mehr (Nutzerfeedback 18.08.2026: wirkte innerhalb
   derselben Tabellenzeile wie unformatierte Zellen kleiner) — erbt
   jetzt wie .admin-muted die Grösse von .admin-table td, nur die Farbe
   unterscheidet sich. */
.admin-note {
	color: var(--t3);
}
.admin-muted {
	color: var(--t3);
}
.admin-strong {
	font-weight: 400;
}
/* Bucket A statt B (Nutzerfeedback 18.08.2026: graue Beschreibungs-/
   Hinweistexte im Admin-Tab müssen untereinander exakt gleich gross sein —
   passt jetzt zu .settings-hint/.usage-desc/.settings-status etc. */
.admin-msg {
	font-size: var(--fs-hint);
	color: var(--t3);
}

/* ── API USAGE ── */
.usage-col-bar {
	width: 140px;
}
.usage-bar-cell {
	vertical-align: middle;
}
.usage-bar-track {
	background: var(--bg3);
	border-radius: var(--radius);
	height: 8px;
	overflow: hidden;
}
.usage-bar-fill {
	height: 100%;
	border-radius: var(--radius);
	transition: width var(--dur-base);
	width: var(--bar-w);
	background: var(--bar-color);
}
/* Kein eigenes font-size (wie .admin-note oben) — .usage-bar-pct/-none
   stehen in derselben Zeile wie die unformatierten .usage-num-Zellen
   (Heute/Limit/Verbleibend) und sollen optisch gleich gross wirken. */
.usage-bar-pct {
	color: var(--t3);
}
.usage-bar-none {
	color: var(--t3);
}
.usage-warn-icon {
	color: var(--neg);
}
.usage-label {
	font-weight: 400;
}
.usage-desc {
	font-size: var(--fs-hint);
	color: var(--t3);
}
/* Status-Spalte: grün/rot je nach ApiUsage::recordResult()-Streak
   (api_health_degraded(), api/lib/api_usage.php) — unabhängig von der
   Kontingent-/Auslastungs-Spalte links davon, die nur Request-Zahlen zeigt. */
.usage-status-dot {
	display: inline-block;
	width: 10px;
	height: 10px;
	border-radius: 50%;
}
.usage-status-ok {
	background: var(--pos);
}
/* Puls nur für die API(s), die laut aktueller Marktphase (State.marketStatus,
   js/views/admin.js loadApiUsage()) gerade wirklich abgefragt wird - nicht
   jede gesunde API pulst, nur die zeitlich aktive. Gleiche Animation wie
   .kpi-status-dot (css/kpi.css) / .api-health-badge (css/layout.css). */
.usage-status-active {
	animation: blink 2s infinite;
}
.usage-status-bad {
	background: var(--neg);
}
.usage-num {
	text-align: right;
	font-variant-numeric: tabular-nums;
}

/* ── ADMIN SETTINGS PANELS ── */
/* .settings-panel (js/views/admin.js) is a pure structural marker now — no
   own padding: cards are flat (see .card, css/tables.css), content sits
   flush under the card-title everywhere else too (Nutzerwunsch 10.08.2026,
   was `padding: 16px` before, indenting these panels only). */
.settings-hint {
	font-size: var(--fs-hint);
	color: var(--t3);
	margin: 0 0 16px;
}
/* Die beiden Zeilen der App-Version-Karte (js/views/admin.js,
   renderAppVersion()) heben sich bewusst vom gedaempften --t3 der normalen
   .settings-hint ab: sie sind keine Erlaeuterung, sondern die eigentliche
   Aussage der Karte. --t1 statt eines harten #fff, damit der Light-Mode nicht
   weiss auf weiss rendert — im Dark Mode (dem Normalfall hier) ist --t1
   ohnehin nahezu weiss. Kein Bold-Schnitt (Nutzerwunsch 05.09.2026). */
.app-version-line {
	color: var(--t1);
	font-weight: 400;
}

.settings-field-label {
	font-size: var(--fs-form-label);
}
.settings-field-hint {
	font-weight: 400;
	color: var(--t3);
	font-size: var(--fs-hint);
}
.settings-input-row {
	display: flex;
	align-items: center;
	gap: 8px;
	margin-top: 8px;
}
.settings-input-sm {
	width: 80px;
}
/* Bucket A statt B — dieselbe Begründung wie bei .admin-msg oben: alle
   grauen Beschreibungstexte im Admin-Tab teilen sich eine Grösse. */
.settings-static-value {
	color: var(--t3);
	font-size: var(--fs-hint);
}
.settings-input-pct {
	width: 70px;
}
.settings-input-unit {
	color: var(--t3);
	font-size: var(--fs-hint);
}
.settings-actions {
	margin-top: 16px;
	display: flex;
	align-items: center;
	gap: 10px;
}
.settings-status {
	font-size: var(--fs-hint);
	color: var(--t3);
}
.settings-status-ok {
	color: var(--pos);
}
.settings-status-err {
	color: var(--neg);
}
.settings-row {
	margin-top: 16px;
	display: flex;
	align-items: center;
	gap: 10px;
	font-size: var(--fs-form-label);
}

/* ── BROWSER-BASELINE: GRID STATT TABELLE ──
   Eine Geräte-Zeile pro Eintrag (Label/Browser+Version/Datum+Uhrzeit/
   Viewport-Grössen), spaltenweise ausgerichtet (Nutzerwunsch 25.08.2026:
   Viewport-Grösse in dieselbe Zeile wie Datum/Uhrzeit, übersichtlicher via
   CSS Grid, aber keine <table>). `.browser-baseline-row` ist bewusst
   `display: contents` (kein eigener Box, keine eigene Zeile im Grid-Sinn)
   - ihre vier Kind-Elemente richten sich dadurch an den Spalten-Tracks des
   gemeinsamen `.browser-baseline-grid`-Elternteils aus, exakt wie das
   bestehende .holidays-dropdown-Muster (css/views.css). */
.browser-baseline-grid {
	display: grid;
	grid-template-columns: auto auto auto 1fr;
	column-gap: 0.75rem;
	row-gap: 12px;
	align-items: baseline;
	/* justify-items:stretch ist der Grid-Default - würde jede Zelle auf die
	   volle (vom breitesten Eintrag der Spalte bestimmte) Spaltenbreite
	   dehnen. Bei der Browser-Pill sieht man das direkt: ihr Hintergrund
	   würde bis an den Spaltenrand reichen statt nur den eigenen Text zu
	   umfassen (Nutzerfeedback 25.08.2026). start lässt jede Zelle bei ihrer
	   eigenen Inhaltsbreite bleiben, wie man es von einer Tabelle erwartet. */
	justify-items: start;
	margin-top: 16px;
	font-size: var(--fs-form-label);
}
.browser-baseline-row {
	display: contents;
}
/* .admin-muted ist doppelt genutzt: als Tabellenzelle (dort korrekt via
   Vererbung auf Bucket B von .admin-table td) UND hier als Beschreibungstext
   (Datum/Uhrzeit, Viewport-Grössen, "Noch keine Daten …") - ohne diese Regel
   würde es hier Bucket B vom umgebenden .browser-baseline-grid erben und von
   den übrigen grauen Beschreibungstexten im Admin-Tab abweichen. Gezielt auf
   Bucket A gesetzt, ohne die Tabellenzellen-Nutzung zu berühren (andere
   Ahnen-Struktur). */
.browser-baseline-row .admin-muted {
	font-size: var(--fs-hint);
}
/* "Noch keine Daten"-Zeile hat nur Label + einen Hinweistext - der Hinweis
   überspannt die restlichen Spalten, statt drei leere Zellen zu hinterlassen. */
.browser-baseline-empty {
	grid-column: 2 / -1;
}
.settings-btn-top {
	margin-top: 16px;
}
.checkbox-row-label {
	display: flex;
	gap: 8px;
	align-items: center;
	font-size: var(--fs-form-label);
}
.checkbox-row-label-reset {
	margin-bottom: 8px;
	font-weight: 400;
	letter-spacing: 0;
	text-transform: none;
}

/* R278: Cron-Log ("letzte 100 Zeilen") - rohe, monospace Log-Ansicht statt
   strukturierter Karte (Nutzerwunsch: das gesamte cron.log soll einsehbar
   sein, nicht nur eine auf Pushes reduzierte Struktur). max-height +
   overflow-y:auto, gleiches Prinzip wie .holidays-dropdown (css/views.css).
   Eigener Systemfont-Monospace-Stack statt eines projektweiten --font-mono-
   Tokens - dieses Projekt hat bislang keine andere Monospace-Fläche. */
.cron-log-view {
	max-height: 360px;
	overflow-y: auto;
	margin: 0;
	padding: 10px 12px;
	background: var(--bg2);
	border-radius: var(--radius);
	font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
	font-size: var(--fs-label-sm);
	line-height: 1.5;
	white-space: pre-wrap;
	word-break: break-word;
	color: var(--t2);
}
