Poprawka botto bar i wersje językowe

This commit is contained in:
2026-09-25 17:39:44 +02:00
parent 3056eb6c3d
commit a381ad09d8
21 changed files with 770 additions and 428 deletions
+131 -38
View File
@@ -9,6 +9,8 @@
--success: #4ade80;
--accent: #f59e0b;
--radius: 20px;
--bottom-nav-height: 64px;
--safe-bottom: env(safe-area-inset-bottom, 0px);
}
* {
@@ -16,13 +18,19 @@
-webkit-tap-highlight-color: transparent;
}
html {
height: 100%;
}
body {
margin: 0;
height: 100%;
height: 100dvh;
font-family: 'Plus Jakarta Sans', sans-serif;
background-color: var(--bg);
color: var(--text-main);
line-height: 1.6;
overflow-x: hidden;
overflow: hidden;
}
/* --- LOADER SCREEN --- */
@@ -97,20 +105,31 @@ body {
display: inline-flex;
align-items: center;
justify-content: center;
width: 44px;
height: 34px;
background: var(--surface, #1e293b);
border: 1px solid var(--surface-light, #334155);
color: var(--text-main, #f8fafc);
border-radius: 10px;
padding: 6px 8px;
padding: 0;
cursor: pointer;
font-family: inherit;
line-height: 0;
}
.lang-picker-btn:hover {
.lang-picker-btn:hover:not(:disabled) {
border-color: var(--primary, #e2b07e);
}
.lang-picker-btn:disabled {
cursor: wait;
opacity: 1;
}
.lang-picker.is-loading .lang-picker-btn {
border-color: rgba(226, 176, 126, 0.55);
}
.lang-flag-img {
display: block;
width: 28px;
@@ -120,6 +139,27 @@ body {
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.12);
}
.lang-picker-spinner {
width: 18px;
height: 18px;
border-radius: 50%;
border: 2px solid rgba(226, 176, 126, 0.25);
border-top-color: var(--primary, #e2b07e);
animation: langSpin 0.65s linear infinite;
}
@keyframes langSpin {
to {
transform: rotate(360deg);
}
}
html.is-lang-loading .app-scroll {
pointer-events: none;
opacity: 0.72;
transition: opacity 0.15s ease;
}
.lang-picker-menu {
position: absolute;
right: 0;
@@ -154,6 +194,11 @@ body {
background: rgba(226, 176, 126, 0.15);
}
.lang-picker-option:disabled {
opacity: 0.5;
cursor: wait;
}
.header-top {
display: flex;
align-items: center;
@@ -341,11 +386,40 @@ body {
}
}
/* --- MAIN LAYOUT --- */
.container {
/* --- MAIN LAYOUT (flex column: scroll + bottom bar) --- */
.app-shell {
display: flex;
flex-direction: column;
height: 100%;
height: 100dvh;
max-width: 500px;
margin: 0 auto;
padding: 24px 16px 100px;
background: var(--bg);
}
.app-scroll {
flex: 1 1 auto;
min-height: 0;
overflow-x: hidden;
overflow-y: auto;
-webkit-overflow-scrolling: touch;
overscroll-behavior: contain;
}
.container {
padding: 24px 16px 28px;
}
.app-footer {
text-align: center;
padding: 10px 0 8px;
margin-top: 5px;
}
.app-footer a {
font-size: 12px;
color: var(--text-muted);
text-decoration: none;
}
header {
@@ -1046,25 +1120,25 @@ header {
/* --- BOTTOM NAVIGATION BAR --- */
.bottom-nav {
position: fixed;
bottom: 0;
left: 0;
right: 0;
height: 70px;
background: rgba(28, 28, 31, 0.85);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-top: 1px solid rgba(255, 255, 255, 0.05);
flex: 0 0 auto;
position: relative;
z-index: 20;
display: flex;
justify-content: space-around;
align-items: center;
padding: 5px 10px;
padding-bottom: env(safe-area-inset-bottom, 5px);
z-index: 100;
box-shadow: 0 -5px 20px rgba(0, 0, 0, 0.3);
align-items: stretch;
height: calc(var(--bottom-nav-height) + var(--safe-bottom));
padding: 0 4px var(--safe-bottom);
background: rgba(28, 28, 31, 0.96);
border-top: 1px solid rgba(255, 255, 255, 0.05);
box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.25);
}
.bottom-nav[hidden] {
display: none !important;
}
.nav-item {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
@@ -1073,26 +1147,38 @@ header {
text-decoration: none;
font-size: 11px;
font-weight: 600;
gap: 4px;
width: 25%;
height: 100%;
gap: 2px;
flex: 1 1 0;
min-width: 0;
height: var(--bottom-nav-height);
padding: 0 2px;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
-webkit-tap-highlight-color: transparent;
user-select: none;
}
.nav-icon {
display: block;
font-size: 22px;
transition: transform 0.3s;
line-height: 1;
filter: grayscale(1) opacity(0.6);
}
.nav-label {
display: block;
max-width: 100%;
line-height: 1.15;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text-align: center;
}
.nav-item.active {
color: var(--primary);
}
.nav-item.active .nav-icon {
transform: translateY(-2px) scale(1.1);
filter: grayscale(0) opacity(1);
}
@@ -1116,20 +1202,31 @@ header {
opacity: 0.45;
}
.nav-item.nav-action-pending .nav-label::after {
content: " · w toku";
font-size: 9px;
font-weight: 500;
.nav-item.nav-action-pending::before {
content: "";
position: absolute;
top: 8px;
right: max(8px, calc(50% - 18px));
width: 7px;
height: 7px;
border-radius: 50%;
background: var(--accent);
box-shadow: 0 0 0 2px rgba(28, 28, 31, 0.9);
}
.nav-item.nav-locked {
opacity: 0.48;
filter: grayscale(0.35);
}
.nav-item.nav-locked .nav-label::after {
content: " 🔒";
font-size: 10px;
.nav-item.nav-locked::after {
content: "🔒";
position: absolute;
top: 6px;
right: max(6px, calc(50% - 20px));
font-size: 9px;
line-height: 1;
pointer-events: none;
opacity: 0.9;
}
.menu-only-banner {
@@ -1164,10 +1261,6 @@ header {
cursor: pointer;
}
.nav-item:active .nav-icon {
transform: scale(0.9);
}
/* SPA View switching */
.view-section {
display: none;