Polish mobile glass navigation and signal icons

This commit is contained in:
2026-05-21 18:49:18 +02:00
parent 50dec55ca8
commit 2a3eaafabb
2 changed files with 76 additions and 43 deletions
+72 -39
View File
@@ -540,6 +540,11 @@ body.page-dashboard .content {
position: relative; position: relative;
z-index: 1; z-index: 1;
margin-bottom: 0; margin-bottom: 0;
border: 1px solid rgba(143, 191, 255, 0.22);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(255, 255, 255, 0.025)),
rgba(6, 17, 30, 0.18);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08), 0 18px 54px rgba(0, 0, 0, 0.14);
touch-action: pan-y; touch-action: pan-y;
transform: translate3d(var(--day-slider-offset, 0), 0, 0) scale(var(--day-slider-scale, 1)); transform: translate3d(var(--day-slider-offset, 0), 0, 0) scale(var(--day-slider-scale, 1));
transition: transform 260ms cubic-bezier(0.2, 0.8, 0.2, 1); transition: transform 260ms cubic-bezier(0.2, 0.8, 0.2, 1);
@@ -4722,32 +4727,33 @@ input[type="range"] {
.ios-tabbar { .ios-tabbar {
position: fixed; position: fixed;
left: 0.75rem; left: 0.65rem;
right: 0.75rem; right: 0.65rem;
bottom: max(0.65rem, env(safe-area-inset-bottom)); bottom: max(0.55rem, env(safe-area-inset-bottom));
z-index: 120; z-index: 120;
display: grid; display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr)); grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 0.25rem; gap: 0.18rem;
min-height: 4.8rem; min-height: 5rem;
padding: 0.48rem; padding: 0.42rem;
border: 1px solid rgba(255, 255, 255, 0.28); border: 1px solid rgba(255, 255, 255, 0.34);
border-radius: 2rem; border-radius: 2.15rem;
background: background:
linear-gradient(180deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.08)), radial-gradient(circle at 18% 0%, rgba(255, 255, 255, 0.34), transparent 38%),
rgba(16, 25, 38, 0.58); linear-gradient(180deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.07)),
box-shadow: 0 24px 70px rgba(0, 0, 0, 0.34), inset 0 1px 0 rgba(255, 255, 255, 0.22); rgba(13, 22, 35, 0.5);
backdrop-filter: blur(32px) saturate(1.6); box-shadow: 0 26px 80px rgba(0, 0, 0, 0.38), inset 0 1px 0 rgba(255, 255, 255, 0.28), inset 0 -1px 0 rgba(255, 255, 255, 0.08);
-webkit-backdrop-filter: blur(32px) saturate(1.6); backdrop-filter: blur(38px) saturate(1.8) contrast(1.06);
-webkit-backdrop-filter: blur(38px) saturate(1.8) contrast(1.06);
} }
.ios-tabbar a { .ios-tabbar a {
display: grid; display: grid;
place-items: center; place-items: center;
align-content: center; align-content: center;
gap: 0.24rem; gap: 0.22rem;
min-height: 3.55rem; min-height: 3.55rem;
border-radius: 1.35rem; border-radius: 1.45rem;
color: rgba(239, 247, 255, 0.68); color: rgba(239, 247, 255, 0.68);
font-size: 0.72rem; font-size: 0.72rem;
font-weight: 650; font-weight: 650;
@@ -4756,24 +4762,34 @@ input[type="range"] {
} }
.ios-tabbar a.active { .ios-tabbar a.active {
background: linear-gradient(180deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.1)); background:
radial-gradient(circle at 50% 0%, rgba(255, 255, 255, 0.3), transparent 52%),
linear-gradient(180deg, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.08));
color: #fff; color: #fff;
transform: translateY(-1px); transform: translateY(-1px);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.24), 0 8px 24px rgba(0, 0, 0, 0.16);
} }
.ios-tabbar__icon { .ios-tabbar__icon {
width: 1.35rem; display: grid;
height: 1.35rem; place-items: center;
border-radius: 0.45rem; width: 1.48rem;
border: 2px solid currentColor; height: 1.48rem;
opacity: 0.9; border-radius: 0.72rem;
background: rgba(255, 255, 255, 0.1);
opacity: 0.96;
} }
.ios-tabbar a:nth-child(1) .ios-tabbar__icon { border-radius: 50%; } .ios-tabbar__icon img {
.ios-tabbar a:nth-child(2) .ios-tabbar__icon { border-radius: 0.35rem; box-shadow: inset 0 -0.35rem 0 currentColor; } width: 1.04rem;
.ios-tabbar a:nth-child(3) .ios-tabbar__icon { border-radius: 0.3rem; box-shadow: inset 0 0 0 0.22rem rgba(255, 255, 255, 0.18); } height: 1.04rem;
.ios-tabbar a:nth-child(4) .ios-tabbar__icon { border-radius: 50%; box-shadow: inset 0 0 0 0.28rem currentColor; } filter: brightness(0) invert(1);
opacity: 0.92;
}
.ios-tabbar a.active .ios-tabbar__icon {
background: rgba(255, 255, 255, 0.18);
}
body.is-authenticated .content, body.is-authenticated .content,
body.page-dashboard.is-authenticated .content, body.page-dashboard.is-authenticated .content,
@@ -4813,6 +4829,8 @@ input[type="range"] {
} }
.timeline-card__body { .timeline-card__body {
display: flex;
flex-direction: column;
min-width: 0; min-width: 0;
} }
@@ -4848,28 +4866,32 @@ input[type="range"] {
position: static; position: static;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 0.5rem; order: -1;
margin-top: 1rem; gap: 0.45rem;
margin: 0 0 0.85rem;
} }
.timeline-card .signal-pill { .timeline-card .signal-pill {
width: auto; width: 2.55rem;
min-width: 0; min-width: 2.55rem;
height: auto; height: 2.55rem;
min-height: 2.55rem; min-height: 2.55rem;
padding: 0.42rem 0.72rem; padding: 0;
justify-content: center; justify-content: center;
border-radius: 999px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.24), inset 0 1px 0 rgba(255, 255, 255, 0.26);
} }
.timeline-card .signal-pill strong, .timeline-card .signal-pill strong,
.timeline-card .signal-pill span { .timeline-card .signal-pill span {
display: inline; display: none;
} }
.timeline-card .signal-pill__icon { .timeline-card .signal-pill__icon {
display: block; display: block;
width: 1rem; width: 1.12rem;
height: 1rem; height: 1.12rem;
filter: brightness(0) invert(1) drop-shadow(0 1px 3px rgba(0, 0, 0, 0.55));
} }
.timeline-card__time-chip { .timeline-card__time-chip {
@@ -4929,9 +4951,10 @@ input[type="range"] {
.ios-tabbar { .ios-tabbar {
border-color: rgba(120, 146, 172, 0.22); border-color: rgba(120, 146, 172, 0.22);
background: background:
linear-gradient(180deg, rgba(255, 255, 255, 0.86), rgba(255, 255, 255, 0.56)), radial-gradient(circle at 18% 0%, rgba(255, 255, 255, 0.95), transparent 42%),
rgba(248, 251, 255, 0.7); linear-gradient(180deg, rgba(255, 255, 255, 0.86), rgba(255, 255, 255, 0.48)),
box-shadow: 0 24px 64px rgba(78, 105, 130, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.8); rgba(248, 251, 255, 0.68);
box-shadow: 0 24px 64px rgba(78, 105, 130, 0.22), inset 0 1px 0 rgba(255, 255, 255, 0.86);
} }
.ios-tabbar a { .ios-tabbar a {
@@ -4939,10 +4962,20 @@ input[type="range"] {
} }
.ios-tabbar a.active { .ios-tabbar a.active {
background: rgba(20, 148, 222, 0.12); background:
radial-gradient(circle at 50% 0%, rgba(255, 255, 255, 0.92), transparent 55%),
rgba(20, 148, 222, 0.12);
color: #12304b; color: #12304b;
} }
.ios-tabbar__icon {
background: rgba(18, 48, 75, 0.06);
}
.ios-tabbar__icon img {
filter: none;
}
.sleep-phase-legend__item { .sleep-phase-legend__item {
color: rgba(18, 48, 75, 0.9); color: rgba(18, 48, 75, 0.9);
} }
+4 -4
View File
@@ -128,19 +128,19 @@ $jsVersion = is_file(base_path('assets/js/app.js')) ? (string) filemtime(base_pa
<?php if ($authUser !== null): ?> <?php if ($authUser !== null): ?>
<nav class="ios-tabbar" aria-label="Mobile Navigation"> <nav class="ios-tabbar" aria-label="Mobile Navigation">
<a class="<?= $page === 'dashboard' && ($dashboardView ?? 'day') === 'day' ? 'active' : '' ?>" href="/?view=day&amp;date=<?= e(rawurlencode(today())) ?>"> <a class="<?= $page === 'dashboard' && ($dashboardView ?? 'day') === 'day' ? 'active' : '' ?>" href="/?view=day&amp;date=<?= e(rawurlencode(today())) ?>">
<span class="ios-tabbar__icon" aria-hidden="true"></span> <span class="ios-tabbar__icon" aria-hidden="true"><img src="<?= e(icon_path('dashboard')) ?>" alt=""></span>
<span>Heute</span> <span>Heute</span>
</a> </a>
<a class="<?= $page === 'dashboard' && ($dashboardView ?? '') === 'week' ? 'active' : '' ?>" href="/?view=week&amp;date=<?= e(rawurlencode(today())) ?>"> <a class="<?= $page === 'dashboard' && ($dashboardView ?? '') === 'week' ? 'active' : '' ?>" href="/?view=week&amp;date=<?= e(rawurlencode(today())) ?>">
<span class="ios-tabbar__icon" aria-hidden="true"></span> <span class="ios-tabbar__icon" aria-hidden="true"><img src="<?= e(icon_path('archive')) ?>" alt=""></span>
<span>Woche</span> <span>Woche</span>
</a> </a>
<a class="<?= $page === 'dashboard' && ($dashboardView ?? '') === 'month' ? 'active' : '' ?>" href="/?view=month&amp;date=<?= e(rawurlencode(today())) ?>"> <a class="<?= $page === 'dashboard' && ($dashboardView ?? '') === 'month' ? 'active' : '' ?>" href="/?view=month&amp;date=<?= e(rawurlencode(today())) ?>">
<span class="ios-tabbar__icon" aria-hidden="true"></span> <span class="ios-tabbar__icon" aria-hidden="true"><img src="<?= e(icon_path('track')) ?>" alt=""></span>
<span>Monat</span> <span>Monat</span>
</a> </a>
<a class="<?= $page === 'options' ? 'active' : '' ?>" href="/options"> <a class="<?= $page === 'options' ? 'active' : '' ?>" href="/options">
<span class="ios-tabbar__icon" aria-hidden="true"></span> <span class="ios-tabbar__icon" aria-hidden="true"><img src="<?= e(icon_path('options')) ?>" alt=""></span>
<span>Optionen</span> <span>Optionen</span>
</a> </a>
</nav> </nav>