UI-Optimierung: Kompakteres Design, Farbanpassungen und README verschoben
This commit is contained in:
4
Dockerfile
Normal file
4
Dockerfile
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM php:8.2-apache
|
||||
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
|
||||
# Enable mod_rewrite for cleaner URLs if needed, though not strictly requested, it's good practice.
|
||||
RUN a2enmod rewrite
|
||||
@@ -1,15 +1,17 @@
|
||||
:root {
|
||||
/* Color Palette - More Vibrant */
|
||||
/* Color Palette - Forest Theme */
|
||||
--color-primary: #2e7d32; /* Richer Green */
|
||||
--color-primary-light: #4caf50;
|
||||
--color-primary-light: #558b2f; /* Light Olive Green */
|
||||
--color-primary-dark: #1b5e20;
|
||||
--color-secondary: #546e7a;
|
||||
--color-accent: #00e676; /* Pop Green */
|
||||
--color-accent: #7cb342; /* Natural Light Green */
|
||||
--color-background: #f0f2f5;
|
||||
|
||||
--sidebar-bg: rgba(20, 40, 20, 0.85);
|
||||
|
||||
/* Glassmorphism Variables - Enhanced */
|
||||
--glass-bg: rgba(255, 255, 255, 0.75); /* More transparent */
|
||||
--glass-border: 1px solid rgba(255, 255, 255, 0.6);
|
||||
--glass-bg: rgba(255, 255, 255, 0.5); /* More transparent */
|
||||
--glass-border: 1px solid rgba(255, 255, 255, 0.4);
|
||||
--glass-shadow: 0 8px 32px 0 rgba(31, 38, 135, 0.15);
|
||||
--glass-blur: blur(12px); /* Stronger blur */
|
||||
|
||||
@@ -45,6 +47,7 @@ h1, h2, h3, h4, h5, h6, .navbar-brand {
|
||||
font-family: 'Poppins', sans-serif; /* Modern Headings */
|
||||
font-weight: 600;
|
||||
letter-spacing: -0.5px;
|
||||
color: #1b5e20; /* Ensure Dark Green for headings */
|
||||
}
|
||||
|
||||
/* Wallpaper Background with Overlay */
|
||||
@@ -69,16 +72,16 @@ body::before {
|
||||
|
||||
/* Sidebar Styling - Modern Dark Glass */
|
||||
.sidebar {
|
||||
width: 280px;
|
||||
width: 240px; /* Reduced from 280px */
|
||||
flex-shrink: 0;
|
||||
background: rgba(20, 40, 20, 0.85); /* Dark semi-transparent */
|
||||
backdrop-filter: blur(15px);
|
||||
border-right: 1px solid rgba(255,255,255,0.1);
|
||||
color: var(--text-light);
|
||||
padding: 25px;
|
||||
padding: 15px; /* Reduced from 25px */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 2rem; /* Minimum spacing between sections */
|
||||
gap: 1rem; /* Reduced from 2rem */
|
||||
box-shadow: 10px 0 30px rgba(0,0,0,0.1);
|
||||
z-index: 100;
|
||||
min-height: 100vh;
|
||||
@@ -86,19 +89,19 @@ body::before {
|
||||
|
||||
.sidebar .navbar-brand {
|
||||
color: var(--text-light);
|
||||
margin-bottom: 10px; /* Reduced because of gap */
|
||||
margin-bottom: 5px;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
text-transform: uppercase;
|
||||
font-size: 1.1rem;
|
||||
font-size: 1rem; /* Reduced */
|
||||
}
|
||||
|
||||
.sidebar .navbar-brand-logo {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
margin-bottom: 15px;
|
||||
border-radius: 25px; /* Squircle */
|
||||
width: 75px; /* Increased to 75px */
|
||||
height: 75px;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 20px; /* Squircle */
|
||||
object-fit: cover;
|
||||
border: 2px solid rgba(255,255,255,0.5);
|
||||
box-shadow: 0 8px 20px rgba(0,0,0,0.3);
|
||||
@@ -111,15 +114,16 @@ body::before {
|
||||
|
||||
.sidebar .nav-link {
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
padding: 14px 20px;
|
||||
padding: 10px 15px; /* Reduced from 14px 20px */
|
||||
border-radius: var(--border-radius-md);
|
||||
transition: all 0.3s ease;
|
||||
margin-bottom: 8px;
|
||||
margin-bottom: 5px; /* Reduced */
|
||||
display: flex;
|
||||
align-items: center;
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
font-family: 'Poppins', sans-serif;
|
||||
font-size: 0.9rem; /* Compact font */
|
||||
}
|
||||
|
||||
.sidebar .nav-link:hover {
|
||||
@@ -132,30 +136,32 @@ body::before {
|
||||
background: linear-gradient(90deg, var(--color-primary-light), var(--color-primary));
|
||||
color: var(--text-light);
|
||||
font-weight: 600;
|
||||
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.4);
|
||||
box-shadow: 0 4px 15px rgba(85, 139, 47, 0.4);
|
||||
}
|
||||
|
||||
.sidebar .nav-link i.fa-fw {
|
||||
margin-right: 25px; /* Increased icon spacing */
|
||||
width: 24px; /* Slightly wider to center properly */
|
||||
margin-right: 15px; /* Reduced */
|
||||
width: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.sidebar .username-display {
|
||||
margin-top: auto;
|
||||
padding-top: 30px; /* Increased padding */
|
||||
padding-top: 20px;
|
||||
border-top: 1px solid rgba(255,255,255,0.1);
|
||||
text-align: center;
|
||||
font-size: 0.9rem;
|
||||
font-size: 0.85rem;
|
||||
color: rgba(255, 255, 255, 0.7);
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--glass-bg);
|
||||
backdrop-filter: var(--glass-blur);
|
||||
-webkit-backdrop-filter: var(--glass-blur);
|
||||
border: var(--glass-border);
|
||||
border-radius: var(--border-radius-lg);
|
||||
box-shadow: var(--glass-shadow);
|
||||
margin-bottom: 2rem;
|
||||
margin-bottom: 1.5rem; /* Reduced */
|
||||
overflow: hidden;
|
||||
transition: transform 0.2s ease;
|
||||
}
|
||||
@@ -167,11 +173,12 @@ body::before {
|
||||
|
||||
.card-header {
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
color: var(--color-primary-dark);
|
||||
color: #1b5e20; /* Explicit Dark Green (var(--color-primary-dark)) */
|
||||
border-bottom: 1px solid rgba(0,0,0,0.05);
|
||||
padding: 1.5rem;
|
||||
font-weight: 600;
|
||||
padding: 0.5rem 1rem; /* Further reduced padding */
|
||||
font-weight: 700; /* Bolder */
|
||||
font-family: 'Poppins', sans-serif;
|
||||
font-size: 0.95rem; /* Slightly smaller font */
|
||||
}
|
||||
|
||||
/* Fix for buttons inside card header being invisible if they are outline-light */
|
||||
@@ -185,7 +192,7 @@ body::before {
|
||||
}
|
||||
|
||||
.card-body {
|
||||
padding: 1.5rem;
|
||||
padding: 1rem; /* Reduced padding */
|
||||
}
|
||||
|
||||
/* Buttons */
|
||||
@@ -193,7 +200,8 @@ body::before {
|
||||
background-color: var(--color-primary-light);
|
||||
border-color: var(--color-primary-light);
|
||||
border-radius: var(--border-radius-sm);
|
||||
padding: 0.5rem 1.2rem;
|
||||
padding: 0.375rem 1rem; /* Reduced */
|
||||
font-size: 0.9rem;
|
||||
font-weight: 600;
|
||||
transition: all 0.2s;
|
||||
}
|
||||
@@ -205,6 +213,12 @@ body::before {
|
||||
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
/* Global Compact Inputs */
|
||||
.form-control, .form-select {
|
||||
padding: 0.375rem 0.75rem;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
.btn-outline-primary {
|
||||
color: var(--color-primary-light);
|
||||
border-color: var(--color-primary-light);
|
||||
@@ -238,7 +252,7 @@ body::before {
|
||||
}
|
||||
.form-check-input:focus {
|
||||
border-color: var(--color-primary-light);
|
||||
box-shadow: 0 0 0 0.25rem rgba(76, 175, 80, 0.25);
|
||||
box-shadow: 0 0 0 0.25rem rgba(85, 139, 47, 0.25);
|
||||
}
|
||||
|
||||
/* Login & Register specific styles */
|
||||
@@ -283,32 +297,33 @@ body::before {
|
||||
/* Charts & Dashboard */
|
||||
.chart-container {
|
||||
position: relative;
|
||||
height: 300px;
|
||||
height: 220px; /* Reduced from 300px */
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Welcome Section (Dashboard) */
|
||||
.welcome-section {
|
||||
text-align: center;
|
||||
padding: 40px 0;
|
||||
padding: 20px 0; /* Reduced from 40px */
|
||||
}
|
||||
|
||||
.welcome-section h1 {
|
||||
font-size: 2.5rem;
|
||||
margin-bottom: 15px;
|
||||
font-size: 2rem; /* Reduced from 2.5rem */
|
||||
margin-bottom: 10px;
|
||||
font-weight: 700;
|
||||
color: var(--color-primary);
|
||||
}
|
||||
|
||||
.welcome-section p.lead {
|
||||
font-size: 1.2rem;
|
||||
font-size: 1rem; /* Reduced from 1.2rem */
|
||||
color: var(--text-muted);
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
.welcome-image-container {
|
||||
max-width: 800px;
|
||||
height: 350px;
|
||||
margin: 40px auto;
|
||||
height: 180px; /* Drastically reduced from 350px */
|
||||
margin: 20px auto; /* Reduced margins */
|
||||
border-radius: var(--border-radius-lg);
|
||||
overflow: hidden;
|
||||
box-shadow: 0 15px 35px rgba(0,0,0,0.15);
|
||||
@@ -394,7 +409,7 @@ body::before {
|
||||
/* Ensure main content pushes footer down */
|
||||
.main-content {
|
||||
flex-grow: 1;
|
||||
padding: 30px;
|
||||
padding: 30px 50px; /* Increased spacing as requested */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
@@ -421,6 +436,12 @@ body::before {
|
||||
vertical-align: middle !important;
|
||||
}
|
||||
|
||||
/* Force compact images in tables */
|
||||
.table img, .article-image-trigger {
|
||||
width: 30px !important;
|
||||
height: 30px !important;
|
||||
}
|
||||
|
||||
.article-image-trigger {
|
||||
cursor: pointer;
|
||||
transition: transform 0.2s;
|
||||
@@ -440,7 +461,8 @@ body::before {
|
||||
border: 1px solid rgba(0,0,0,0.08);
|
||||
border-radius: var(--border-radius-md);
|
||||
overflow: hidden; /* Ensure header radius respects container */
|
||||
background-color: #fff;
|
||||
background-color: var(--glass-bg);
|
||||
backdrop-filter: var(--glass-blur);
|
||||
}
|
||||
|
||||
.section-card .card-header {
|
||||
@@ -451,7 +473,7 @@ body::before {
|
||||
}
|
||||
|
||||
.section-card .card-body {
|
||||
background-color: #fff;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.paste-area {
|
||||
@@ -460,7 +482,7 @@ body::before {
|
||||
padding: 2rem 1rem;
|
||||
text-align: center;
|
||||
color: var(--text-muted);
|
||||
background-color: #fafafa;
|
||||
background-color: rgba(250, 250, 250, 0.5);
|
||||
transition: all 0.2s;
|
||||
cursor: pointer;
|
||||
}
|
||||
@@ -478,7 +500,7 @@ body::before {
|
||||
object-fit: contain;
|
||||
border: 1px solid rgba(0,0,0,0.1);
|
||||
padding: 5px;
|
||||
background-color: #fff;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
/* --- Packing List Editor Styles --- */
|
||||
@@ -492,7 +514,8 @@ body::before {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 75vh;
|
||||
background-color: #ffffff;
|
||||
background-color: var(--glass-bg);
|
||||
backdrop-filter: var(--glass-blur);
|
||||
border: 1px solid rgba(0,0,0,0.1);
|
||||
border-radius: var(--border-radius-md);
|
||||
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
|
||||
@@ -514,7 +537,7 @@ body::before {
|
||||
.available-item-card {
|
||||
padding: 8px 12px;
|
||||
margin-bottom: 6px;
|
||||
background: #f8f9fa;
|
||||
background: rgba(248, 249, 250, 0.7);
|
||||
border-radius: var(--border-radius-sm);
|
||||
cursor: grab;
|
||||
border: 1px solid rgba(0,0,0,0.05);
|
||||
@@ -542,7 +565,7 @@ body::before {
|
||||
.carrier-list {
|
||||
min-height: 80px;
|
||||
padding: 10px;
|
||||
background-color: #fff;
|
||||
background-color: rgba(255, 255, 255, 0.3);
|
||||
}
|
||||
|
||||
.packed-item-row {
|
||||
@@ -551,13 +574,13 @@ body::before {
|
||||
padding: 8px;
|
||||
margin-bottom: 4px;
|
||||
border-bottom: 1px solid rgba(0,0,0,0.03);
|
||||
background-color: #fff;
|
||||
background-color: rgba(255, 255, 255, 0.6);
|
||||
border-radius: var(--border-radius-sm);
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
|
||||
.packed-item-row:hover {
|
||||
background-color: #fafafa;
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
}
|
||||
|
||||
.packed-item-row.ghost-class {
|
||||
@@ -603,6 +626,8 @@ body::before {
|
||||
border: 1px solid rgba(0,0,0,0.1);
|
||||
border-radius: var(--border-radius-md);
|
||||
overflow: hidden;
|
||||
background-color: var(--glass-bg);
|
||||
backdrop-filter: var(--glass-blur);
|
||||
}
|
||||
|
||||
.level-1-card .card-header {
|
||||
@@ -613,11 +638,11 @@ body::before {
|
||||
}
|
||||
|
||||
.level-1-card .card-body {
|
||||
background-color: rgba(255, 255, 255, 0.6); /* Slightly transparent */
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.level-2-list .list-group-item {
|
||||
background-color: rgba(255, 255, 255, 0.8);
|
||||
background-color: rgba(255, 255, 255, 0.5);
|
||||
border-left: 4px solid var(--color-primary-light);
|
||||
margin-bottom: 2px;
|
||||
border-radius: var(--border-radius-sm);
|
||||
@@ -734,21 +759,40 @@ body::before {
|
||||
.table-responsive thead th {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
background-color: #fff; /* Opaque background to cover scrolling content */
|
||||
background-color: var(--sidebar-bg); /* Match sidebar */
|
||||
color: var(--text-light);
|
||||
backdrop-filter: blur(15px);
|
||||
z-index: 10; /* Above content */
|
||||
box-shadow: 0 2px 2px -1px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
/* Reverted Table Styling (Light) */
|
||||
.table {
|
||||
color: var(--text-main);
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.table th, .table td {
|
||||
border-color: rgba(0, 0, 0, 0.05);
|
||||
padding: 0.5rem 0.75rem; /* Compact padding */
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
/* Hover state */
|
||||
.table-hover tbody tr:hover {
|
||||
background-color: rgba(0, 0, 0, 0.02);
|
||||
}
|
||||
|
||||
/* Category Header Row */
|
||||
.category-header {
|
||||
background-color: var(--color-primary-light);
|
||||
color: #fff;
|
||||
background-color: rgba(46, 125, 50, 0.15); /* Light subtle green */
|
||||
color: var(--color-primary-dark); /* Dark text for contrast */
|
||||
cursor: pointer;
|
||||
font-weight: 600;
|
||||
font-family: 'Poppins', sans-serif;
|
||||
}
|
||||
.category-header:hover {
|
||||
filter: brightness(95%);
|
||||
background-color: rgba(46, 125, 50, 0.25);
|
||||
}
|
||||
.category-header i {
|
||||
transition: transform 0.2s;
|
||||
@@ -757,8 +801,9 @@ body::before {
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
.category-header td {
|
||||
background-color: var(--color-primary-light) !important; /* Override bootstrap stripes */
|
||||
color: white;
|
||||
background-color: rgba(46, 125, 50, 0.15) !important;
|
||||
color: var(--color-primary-dark);
|
||||
border-bottom: 1px solid rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
/* --- Print Styles --- */
|
||||
@@ -896,4 +941,4 @@ body::before {
|
||||
.statistics-list li span {
|
||||
font-size: 11pt;
|
||||
}
|
||||
}
|
||||
}
|
||||
4
config.ini
Normal file
4
config.ini
Normal file
@@ -0,0 +1,4 @@
|
||||
servername = db
|
||||
username = packuser
|
||||
password = packpass
|
||||
dbname = packliste
|
||||
26
docker-compose.yml
Normal file
26
docker-compose.yml
Normal file
@@ -0,0 +1,26 @@
|
||||
services:
|
||||
web:
|
||||
build: .
|
||||
ports:
|
||||
- "8000:80"
|
||||
volumes:
|
||||
- ./src:/var/www/html
|
||||
- ./config.ini:/var/www/config.ini
|
||||
depends_on:
|
||||
- db
|
||||
|
||||
db:
|
||||
image: mariadb:10.6
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: rootpassword
|
||||
MYSQL_DATABASE: packliste
|
||||
MYSQL_USER: packuser
|
||||
MYSQL_PASSWORD: packpass
|
||||
volumes:
|
||||
- ./packliste.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
# Persist data locally so restarts don't wipe the DB (optional but good)
|
||||
# volumes:
|
||||
# - db_data:/var/lib/mysql
|
||||
|
||||
# volumes:
|
||||
# db_data:
|
||||
Reference in New Issue
Block a user