layout
All checks were successful
Deploy / deploy-staging (push) Successful in 5s
Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-05-03 01:50:10 +02:00
parent fa424957b6
commit 2d56289477
3 changed files with 24 additions and 49 deletions

View File

@@ -9,24 +9,20 @@ $modules = array_values(array_filter(
)); ));
?> ?>
<section class="module-list-section" data-reveal> <section class="module-list-section" data-reveal>
<div class="section-head"> <?php if ($authUser !== null): ?>
<div> <div class="section-head">
<h2 class="section-title">Verfuegbare Module</h2>
<p>Module mit Login-Pflicht erscheinen erst nach passender Anmeldung.</p>
</div>
<?php if ($authUser !== null): ?>
<div style="display:flex; gap:10px; flex-wrap:wrap;"> <div style="display:flex; gap:10px; flex-wrap:wrap;">
<a class="nav-link" href="/modules">Module verwalten</a> <a class="nav-link" href="/modules">Module verwalten</a>
<?php if (auth_is_admin()): ?> <?php if (auth_is_admin()): ?>
<a class="nav-link" href="/exports/database.sql">SQL-Export</a> <a class="nav-link" href="/exports/database.sql">SQL-Export</a>
<?php endif; ?> <?php endif; ?>
</div> </div>
<?php endif; ?> </div>
</div> <?php endif; ?>
<?php if ($modules === []): ?> <?php if ($modules === []): ?>
<div class="empty-state" data-reveal> <div class="empty-state" data-reveal>
Keine Module fuer den aktuellen Zugriff sichtbar. Keine Module für den aktuellen Zugriff sichtbar.
</div> </div>
<?php else: ?> <?php else: ?>
<div class="module-list"> <div class="module-list">
@@ -34,11 +30,9 @@ $modules = array_values(array_filter(
<a class="module-row" href="<?= e((string)($module['entry'] ?? ('/module/' . $module['name']))) ?>"> <a class="module-row" href="<?= e((string)($module['entry'] ?? ('/module/' . $module['name']))) ?>">
<span class="module-row__icon"><?= e(strtoupper(substr((string)($module['title'] ?? $module['name']), 0, 1))) ?></span> <span class="module-row__icon"><?= e(strtoupper(substr((string)($module['title'] ?? $module['name']), 0, 1))) ?></span>
<span class="module-row__content"> <span class="module-row__content">
<span class="module-kicker"><?= e((string)($module['name'] ?? '')) ?></span>
<strong class="module-title"><?= e((string)($module['title'] ?? $module['name'] ?? 'Modul')) ?></strong> <strong class="module-title"><?= e((string)($module['title'] ?? $module['name'] ?? 'Modul')) ?></strong>
<span class="module-desc"><?= e((string)($module['description'] ?? '')) ?></span> <span class="module-desc"><?= e((string)($module['description'] ?? '')) ?></span>
</span> </span>
<span class="module-row__action">Oeffnen</span>
</a> </a>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>

View File

@@ -5,9 +5,12 @@ if ($currentModuleName === null && preg_match('~^/modules/(?:setup|access)/([a-z
$currentModuleName = $moduleMatch[1]; $currentModuleName = $moduleMatch[1];
} }
$currentModule = $currentModuleName !== null ? modules()->get($currentModuleName) : null; $currentModule = $currentModuleName !== null ? modules()->get($currentModuleName) : null;
$headerEyebrow = $currentModule ? 'Modul' : 'Nexus'; $isStagingHost = defined('APP_DOMAIN_PRIMARY') && str_starts_with((string) APP_DOMAIN_PRIMARY, 'staging.');
$headerTitle = $currentModule ? (string)($currentModule['title'] ?? $currentModuleName) : (defined('APP_DOMAIN_PRIMARY') ? (string)APP_DOMAIN_PRIMARY : 'Nexus'); $headerEyebrow = '';
$headerText = $currentModule ? (string)($currentModule['description'] ?? '') : 'Kompakter Einstieg fuer die verfuegbaren Module.'; $headerTitle = $currentModule
? (string)($currentModule['title'] ?? $currentModuleName)
: ('Nexus' . ($isStagingHost ? ' (staging)' : ''));
$headerText = $currentModule ? (string)($currentModule['description'] ?? '') : '';
$auth = app()->auth(); $auth = app()->auth();
$authUser = $auth->user(); $authUser = $auth->user();
?> ?>
@@ -43,7 +46,9 @@ $authUser = $auth->user();
<img src="/assets/images/logo.png" alt="Nexus Logo"> <img src="/assets/images/logo.png" alt="Nexus Logo">
</a> </a>
<div class="brand-copy"> <div class="brand-copy">
<span class="eyebrow"><?= e($headerEyebrow) ?></span> <?php if ($headerEyebrow !== ''): ?>
<span class="eyebrow"><?= e($headerEyebrow) ?></span>
<?php endif; ?>
<h1><?= e($headerTitle) ?></h1> <h1><?= e($headerTitle) ?></h1>
<?php if ($headerText !== ''): ?> <?php if ($headerText !== ''): ?>
<p><?= e($headerText) ?></p> <p><?= e($headerText) ?></p>

View File

@@ -183,8 +183,8 @@ a {
} }
.home-hero h1 { .home-hero h1 {
font-size: clamp(1.5rem, 4vw, 2.35rem); font-size: clamp(1.35rem, 3vw, 1.95rem);
line-height: 1; line-height: 1.05;
} }
.home-hero p { .home-hero p {
@@ -312,6 +312,12 @@ body.has-modal-open {
margin-top: 0; margin-top: 0;
} }
.section-head {
display: flex;
justify-content: flex-end;
margin-bottom: 14px;
}
.module-list { .module-list {
display: grid; display: grid;
gap: 10px; gap: 10px;
@@ -319,7 +325,7 @@ body.has-modal-open {
.module-row { .module-row {
display: grid; display: grid;
grid-template-columns: auto minmax(0, 1fr) auto; grid-template-columns: auto minmax(0, 1fr);
align-items: center; align-items: center;
gap: 14px; gap: 14px;
padding: 14px; padding: 14px;
@@ -353,22 +359,6 @@ body.has-modal-open {
min-width: 0; min-width: 0;
} }
.module-row__action {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 9px 12px;
border-radius: 999px;
color: #ffffff;
font-size: 0.86rem;
font-weight: 800;
background: linear-gradient(135deg, var(--brand-accent), var(--brand-accent-3));
}
.module-row__action::after {
content: "->";
}
.module-card { .module-card {
position: relative; position: relative;
display: flex; display: flex;
@@ -395,17 +385,9 @@ body.has-modal-open {
box-shadow: 0 20px 36px rgba(1, 22, 32, 0.14); box-shadow: 0 20px 36px rgba(1, 22, 32, 0.14);
} }
.module-kicker {
color: var(--brand-accent);
font-size: 0.74rem;
font-weight: 800;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.module-title { .module-title {
margin: 0; margin: 0;
font-size: 1.12rem; font-size: 1rem;
} }
.module-desc { .module-desc {
@@ -548,12 +530,6 @@ body.has-modal-open {
grid-template-columns: auto minmax(0, 1fr); grid-template-columns: auto minmax(0, 1fr);
} }
.module-row__action {
grid-column: 2;
justify-self: start;
padding: 7px 10px;
}
.section-head { .section-head {
align-items: start; align-items: start;
flex-direction: column; flex-direction: column;