Release 1.1.0: QR-Reportimport, Regal-Auswahlmodal, Einlagern/Auslagern-Verknuepfungen aus Reifenlager, Stabilitaetsfixes

This commit is contained in:
spaethf committed 2026-09-26 23:24:14 +02:00
1 parent cba9414e92
commit 3404fb9875
25 files changed
+5106 -744

No files matched your search

@@ -39,8 +39,8 @@
.page-header {
display: flex;
flex-direction: column;
gap: 0.75rem;
margin-bottom: 1rem;
gap: 0.5rem;
margin-bottom: 0.75rem;
}
@media (min-width: 480px) {
@@ -50,7 +50,7 @@
align-items: center;
flex-wrap: wrap;
gap: 1rem;
margin-bottom: 1.25rem;
margin-bottom: 0.75rem;
}
}
@@ -134,137 +134,156 @@
}
/* ========================================
Statistics Bar - Responsive
Compact Toolbar (Stats + Filter combined)
======================================== */
.stats-bar {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 0.75rem;
margin-bottom: 1rem;
padding: 0.75rem;
background: var(--surface-elevated);
border-radius: var(--radius-lg);
border: 0.5px solid var(--border-light);
}
@media (min-width: 480px) {
.stats-bar {
display: flex;
gap: 1rem;
padding: 1rem;
margin-bottom: 1.25rem;
overflow-x: auto;
}
}
@media (min-width: 768px) {
.stats-bar {
gap: 2rem;
}
}
.stat {
text-align: center;
padding: 0 0.5rem;
}
@media (min-width: 480px) {
.stat {
flex: 1;
min-width: 80px;
padding: 0 1rem;
border-right: 1px solid var(--border-light);
}
.stat:last-child {
border-right: none;
}
}
.stat-value {
display: block;
font-family: var(--font-family-heading);
font-size: clamp(1.25rem, 4vw, 1.75rem);
font-weight: var(--font-weight-bold);
color: var(--text-primary);
}
.stat.available .stat-value {
color: var(--color-success);
}
.stat.occupied .stat-value {
color: var(--color-warning);
}
.stat-label {
font-family: var(--font-family-base);
font-size: clamp(0.65rem, 2vw, 0.75rem);
color: var(--text-tertiary);
text-transform: uppercase;
}
/* ========================================
Filter Bar - Responsive
======================================== */
.filter-bar {
.toolbar {
position: sticky;
top: 0;
z-index: 10;
display: flex;
flex-direction: column;
gap: 0.75rem;
margin-bottom: 1rem;
padding: 1rem;
background: rgba(28, 28, 30, 0.4);
gap: 0.5rem;
margin-bottom: 0.75rem;
padding: 0.6rem 0.75rem;
background: rgba(28, 28, 30, 0.92);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-radius: var(--radius-lg);
border: 0.5px solid var(--border-light);
}
@media (min-width: 768px) {
.filter-bar {
@media (min-width: 1024px) {
.toolbar {
flex-direction: row;
align-items: center;
justify-content: space-between;
flex-wrap: wrap;
align-items: flex-end;
gap: 1.25rem;
margin-bottom: 1.25rem;
gap: 0.75rem;
}
}
.filter-group {
display: flex;
flex-direction: column;
gap: 0.35rem;
}
.filter-label {
font-family: var(--font-family-base);
font-size: 0.7rem;
font-weight: var(--font-weight-semibold);
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.filter-group.search-group {
flex: 1;
min-width: 200px;
}
@media (max-width: 767.98px) {
.filter-group.search-group {
order: -1;
}
}
/* Area & Status Filter */
.area-filter,
.status-filter {
/* Stat chips - clickable, act as filters */
.stat-chips {
display: flex;
gap: 6px;
flex-wrap: wrap;
}
/* Row Filter */
.row-filter {
min-width: 120px;
.stat-chip {
display: inline-flex;
align-items: center;
gap: 6px;
padding: 5px 10px;
background: rgba(0, 0, 0, 0.3);
border: 0.5px solid var(--border-default);
border-radius: var(--radius-sm);
color: var(--text-secondary);
font-family: var(--font-family-base);
font-size: var(--text-xs);
cursor: pointer;
transition: all var(--duration-fast) var(--ease-default);
white-space: nowrap;
min-height: 32px;
}
.stat-chip:hover {
background: rgba(255, 255, 255, 0.05);
border-color: rgba(255, 255, 255, 0.2);
}
.stat-chip .chip-value {
font-family: var(--font-family-heading);
font-size: var(--text-sm);
font-weight: var(--font-weight-bold);
color: var(--text-primary);
}
.stat-chip.active {
background: rgba(220, 38, 38, 0.15);
border-color: var(--border-focus);
color: var(--text-primary);
}
.stat-chip.available .chip-value {
color: var(--color-success);
}
.stat-chip.available.active {
background: rgba(34, 197, 94, 0.15);
border-color: rgba(34, 197, 94, 0.4);
color: var(--color-success);
}
.stat-chip.occupied .chip-value {
color: var(--color-warning);
}
.stat-chip.occupied.active {
background: rgba(251, 191, 36, 0.15);
border-color: rgba(251, 191, 36, 0.4);
color: var(--color-warning);
}
.stat-chip.lager.active {
background: rgba(251, 191, 36, 0.15);
border-color: rgba(251, 191, 36, 0.4);
color: var(--color-warning);
}
.stat-chip.werkstatt.active {
background: rgba(96, 165, 250, 0.15);
border-color: rgba(96, 165, 250, 0.4);
color: var(--color-info-light);
}
/* Toolbar controls: search + row select + collapse toggle */
.toolbar-controls {
display: flex;
gap: 6px;
flex-wrap: wrap;
align-items: center;
}
.toolbar-controls .search-box {
flex: 1;
min-width: 160px;
}
.toolbar-controls .row-select {
width: auto;
min-width: 110px;
padding: 7px 10px;
background: rgba(0, 0, 0, 0.3);
border: 0.5px solid var(--border-default);
border-radius: var(--radius-sm);
color: var(--text-primary);
font-family: var(--font-family-base);
font-size: var(--text-xs);
min-height: 34px;
}
.toolbar-controls .btn-sm {
padding: 6px 10px;
font-size: var(--text-xs);
min-height: 34px;
background: rgba(0, 0, 0, 0.3);
border: 0.5px solid var(--border-default);
border-radius: var(--radius-sm);
color: var(--text-secondary);
cursor: pointer;
white-space: nowrap;
transition: all var(--duration-fast) var(--ease-default);
}
.toolbar-controls .btn-sm:hover {
background: rgba(255, 255, 255, 0.05);
border-color: rgba(255, 255, 255, 0.2);
color: var(--text-primary);
}
.toolbar-controls .clear-filters {
color: var(--color-error-light);
border-color: rgba(239, 68, 68, 0.3);
}
/* Filter Buttons */
@@ -323,14 +342,15 @@
}
.search-box .form-control {
padding: 10px 14px;
padding: 7px 12px;
background: rgba(0, 0, 0, 0.3);
border: 0.5px solid var(--border-default);
border-radius: var(--radius-sm);
color: var(--text-primary);
font-family: var(--font-family-base);
font-size: var(--text-base);
font-size: var(--text-sm);
width: 100%;
min-height: 34px;
}
.search-box .form-control:focus {
@@ -400,8 +420,8 @@
Area Section (Grid View)
======================================== */
.area-section {
margin-bottom: 1.5rem;
padding: 1rem;
margin-bottom: 1rem;
padding: 0.75rem;
background: rgba(28, 28, 30, 0.4);
border-radius: var(--radius-xl);
border: 0.5px solid var(--border-light);
@@ -409,8 +429,8 @@
@media (min-width: 480px) {
.area-section {
padding: 1.25rem;
margin-bottom: 2rem;
padding: 1rem;
margin-bottom: 1.25rem;
}
}
@@ -424,22 +444,32 @@
.area-title {
font-family: var(--font-family-base);
font-size: var(--text-lg);
font-size: var(--text-base);
font-weight: var(--font-weight-semibold);
color: var(--text-primary);
margin: 0 0 1rem 0;
padding-bottom: 0.75rem;
margin: 0 0 0.6rem 0;
padding-bottom: 0.4rem;
border-bottom: 0.5px solid var(--border-default);
}
.row-section {
margin-bottom: 1rem;
margin-bottom: 0.6rem;
}
.row-section:last-child {
margin-bottom: 0;
}
.position-title {
font-family: var(--font-family-base);
font-size: 0.7rem;
font-weight: var(--font-weight-semibold);
color: var(--text-muted);
text-transform: uppercase;
letter-spacing: 0.5px;
margin: 0.5rem 0 0.3rem 0;
}
.row-header {
display: flex;
align-items: center;
@@ -447,8 +477,8 @@
width: 100%;
background: none;
border: none;
padding: 0.35rem 0;
margin: 0 0 0.75rem 0;
padding: 0.25rem 0.25rem;
margin: 0 0 0.4rem 0;
cursor: pointer;
text-align: left;
border-radius: 6px;
@@ -500,7 +530,7 @@
.location-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 8px;
gap: 6px;
}
@media (min-width: 400px) {
@@ -511,14 +541,14 @@
@media (min-width: 480px) {
.location-grid {
grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
gap: 10px;
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
gap: 8px;
}
}
@media (min-width: 768px) {
.location-grid {
grid-template-columns: repeat(auto-fill, minmax(130px, 1fr));
grid-template-columns: repeat(auto-fill, minmax(115px, 1fr));
}
}
@@ -527,11 +557,11 @@
background: var(--surface-elevated);
border: 0.5px solid var(--border-default);
border-radius: var(--radius-md);
padding: 10px;
padding: 8px;
cursor: pointer;
transition: all var(--duration-fast) var(--ease-default);
position: relative;
min-height: 70px;
min-height: 58px;
}
.location-card:hover {
@@ -1144,6 +1174,83 @@
margin: 0 0 12px 0;
}
.stored-tires-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 8px;
}
.stored-tires-header h4 {
margin-bottom: 0;
}
.tirestack-edit-form {
margin-top: 12px;
display: flex;
flex-direction: column;
gap: 12px;
}
.tirestack-edit-form .form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
}
.tirestack-edit-form .season-selector,
.tirestack-edit-form .toggle-group {
display: flex;
gap: 8px;
}
.tirestack-edit-form .season-btn,
.tirestack-edit-form .toggle-btn {
flex: 1;
padding: 8px 10px;
border: 0.5px solid var(--border-light);
border-radius: var(--radius-md);
background: rgba(0, 0, 0, 0.2);
color: var(--text-secondary);
font-size: var(--text-sm);
cursor: pointer;
transition: all 0.15s ease;
}
.tirestack-edit-form .season-btn:hover,
.tirestack-edit-form .toggle-btn:hover {
border-color: var(--text-secondary);
}
.tirestack-edit-form .season-btn.active,
.tirestack-edit-form .toggle-btn.active {
border-color: var(--accent, #4a9eff);
color: var(--text-primary);
background: rgba(74, 158, 255, 0.15);
}
.tirestack-edit-form .season-btn.active.summer {
border-color: #f5a623;
background: rgba(245, 166, 35, 0.15);
}
.tirestack-edit-form .season-btn.active.winter {
border-color: #4a9eff;
background: rgba(74, 158, 255, 0.15);
}
.tirestack-edit-form .season-btn.active.allseason {
border-color: #7ed321;
background: rgba(126, 211, 33, 0.15);
}
.tirestack-edit-form .form-actions {
display: flex;
justify-content: flex-end;
gap: 8px;
}
.stored-item {
padding: 0;
}