migrationStatus($module['name']);
$pendingMigrations = $migrationStatus['pending'] ?? [];
+ $migrationLabel = $pendingMigrations !== []
+ ? count($pendingMigrations) . ' ausstehend'
+ : (($migrationStatus['available'] ?? 0) > 0 ? 'Schema aktuell' : 'Keine Migrationen');
?>
-
+
migrationStatus($module['name']);
$pendingMigrations = $migrationStatus['pending'] ?? [];
+ $migrationLabel = $pendingMigrations !== []
+ ? count($pendingMigrations) . ' ausstehend'
+ : (($migrationStatus['available'] ?? 0) > 0 ? 'Schema aktuell' : 'Keine Migrationen');
?>
-
-
= e($module['title']) ?>
-
= e($module['description'] ?? '') ?>
-
+
+
+
+
= e($module['title']) ?>
+
= e($module['description'] ?? '') ?>
+
+
+
+
-
+
diff --git a/public/assets/css/app.css b/public/assets/css/app.css
index 50efd97..525c8c2 100644
--- a/public/assets/css/app.css
+++ b/public/assets/css/app.css
@@ -534,6 +534,20 @@ body.has-modal-open {
align-items: start;
flex-direction: column;
}
+
+ .module-admin-grid,
+ .module-admin-grid--compact {
+ grid-template-columns: 1fr;
+ gap: 16px;
+ }
+
+ .module-admin-card {
+ padding: 18px;
+ }
+
+ .module-admin-meta {
+ grid-template-columns: 1fr;
+ }
}
.card {
@@ -623,6 +637,150 @@ body.has-modal-open {
gap: 14px;
}
+.module-admin-note {
+ margin-top: 1rem;
+ padding: 14px 16px;
+ border: 1px solid var(--line);
+ border-radius: 16px;
+ background: color-mix(in srgb, var(--surface) 94%, transparent);
+}
+
+.module-admin-note strong {
+ display: block;
+ margin: 0;
+}
+
+.module-admin-note p {
+ margin: 0.45rem 0 0;
+ color: var(--muted);
+ line-height: 1.5;
+}
+
+.module-admin-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
+ gap: 20px;
+ margin-top: 1rem;
+}
+
+.module-admin-grid--compact {
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+}
+
+.module-admin-card {
+ display: grid;
+ gap: 16px;
+ min-height: 100%;
+ padding: 24px;
+ border: 1px solid var(--line);
+ border-radius: 22px;
+ background: color-mix(in srgb, var(--surface) 94%, transparent);
+ box-shadow: 0 16px 34px rgba(1, 22, 32, 0.08);
+}
+
+.module-admin-card__head {
+ display: flex;
+ justify-content: space-between;
+ gap: 12px;
+}
+
+.module-admin-card__title h2 {
+ margin: 0;
+ font-size: 1.55rem;
+ line-height: 1.1;
+}
+
+.module-admin-card__title p {
+ margin: 0.45rem 0 0;
+ color: var(--muted);
+ line-height: 1.5;
+}
+
+.module-admin-meta {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: 12px;
+}
+
+.module-admin-meta__item {
+ display: grid;
+ gap: 8px;
+ padding: 12px 14px;
+ border: 1px solid var(--line);
+ border-radius: 16px;
+ background: color-mix(in srgb, var(--surface-strong) 92%, transparent);
+}
+
+.module-admin-meta__label {
+ color: var(--muted);
+ font-size: 0.74rem;
+ font-weight: 700;
+ letter-spacing: 0.06em;
+ text-transform: uppercase;
+}
+
+.module-admin-badge {
+ display: inline-flex;
+ align-items: center;
+ width: fit-content;
+ min-height: 28px;
+ padding: 4px 10px;
+ border: 1px solid var(--line);
+ border-radius: 999px;
+ background: color-mix(in srgb, var(--surface) 92%, transparent);
+ font-size: 0.82rem;
+ font-weight: 800;
+}
+
+.module-admin-badge--success {
+ border-color: color-mix(in srgb, var(--accent-green) 60%, var(--line));
+ color: color-mix(in srgb, var(--accent-green) 78%, var(--text));
+ background: color-mix(in srgb, var(--accent-green) 12%, transparent);
+}
+
+.module-admin-badge--warning {
+ border-color: color-mix(in srgb, var(--accent-orange) 72%, var(--line));
+ color: color-mix(in srgb, var(--accent-orange) 88%, var(--text));
+ background: color-mix(in srgb, var(--accent-orange) 12%, transparent);
+}
+
+.module-admin-badge--accent {
+ border-color: color-mix(in srgb, var(--brand-accent) 64%, var(--line));
+ color: color-mix(in srgb, var(--brand-accent) 86%, var(--text));
+ background: color-mix(in srgb, var(--brand-accent) 12%, transparent);
+}
+
+.module-admin-access,
+.module-admin-warning {
+ padding: 12px 14px;
+ border-radius: 14px;
+ font-size: 0.92rem;
+ line-height: 1.45;
+}
+
+.module-admin-access {
+ color: var(--muted);
+ background: color-mix(in srgb, var(--surface-strong) 90%, transparent);
+ border: 1px solid var(--line);
+}
+
+.module-admin-warning {
+ color: color-mix(in srgb, var(--accent-orange) 86%, var(--text));
+ background: color-mix(in srgb, var(--accent-orange) 10%, transparent);
+ border: 1px solid color-mix(in srgb, var(--accent-orange) 30%, var(--line));
+}
+
+.module-admin-actions {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px;
+ margin-top: auto;
+}
+
+.module-admin-actions form {
+ margin: 0;
+}
+
.setup-shell {
display: grid;
gap: 10px;