Initial commit: Notes Manager App (notes.braetter-int.de)
- Python/Flask Backend - SQLAlchemy Models (notes, tasks, templates, users) - Gunicorn + Nginx Deploy-Konfiguration - Static Assets (CSS/JS) - Jinja2 Templates
This commit is contained in:
370
app/static/css/style.css
Executable file
370
app/static/css/style.css
Executable file
@@ -0,0 +1,370 @@
|
||||
/* ============================================================
|
||||
NotesManager – Modernes Grau-Design, barrierefrei (WCAG 2.1 AA)
|
||||
============================================================ */
|
||||
|
||||
/* --- Farb-Variablen --- */
|
||||
:root {
|
||||
--nm-bg: #f0f2f5;
|
||||
--nm-surface: #ffffff;
|
||||
--nm-nav-bg: #1c1f26;
|
||||
--nm-nav-hover: #2a2e38;
|
||||
--nm-nav-active: #353a47;
|
||||
--nm-nav-text: #c8cdd8;
|
||||
--nm-nav-text-act: #ffffff;
|
||||
--nm-accent: #4a6fa5;
|
||||
--nm-accent-hover: #3a5a8f;
|
||||
--nm-accent-light: #eaf0fa;
|
||||
--nm-text: #1a1d23;
|
||||
--nm-text-muted: #5a6070;
|
||||
--nm-border: #d4d8e1;
|
||||
--nm-shadow-sm: 0 1px 4px rgba(0,0,0,0.07), 0 2px 8px rgba(0,0,0,0.05);
|
||||
--nm-shadow-md: 0 2px 8px rgba(0,0,0,0.09), 0 4px 16px rgba(0,0,0,0.07);
|
||||
--nm-radius: 0.5rem;
|
||||
--nm-radius-sm: 0.35rem;
|
||||
--nm-transition: 0.18s ease;
|
||||
}
|
||||
|
||||
/* --- Basis --- */
|
||||
*, *::before, *::after { box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
background: var(--nm-bg);
|
||||
color: var(--nm-text);
|
||||
font-family: system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||
font-size: 0.9375rem;
|
||||
line-height: 1.6;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
/* --- Barrierefreiheit: Fokus-Indikator --- */
|
||||
:focus-visible {
|
||||
outline: 3px solid var(--nm-accent);
|
||||
outline-offset: 2px;
|
||||
border-radius: var(--nm-radius-sm);
|
||||
}
|
||||
a:focus-visible, button:focus-visible, input:focus-visible,
|
||||
select:focus-visible, textarea:focus-visible {
|
||||
outline: 3px solid var(--nm-accent);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
/* --- Navigation --- */
|
||||
.navbar {
|
||||
background: var(--nm-nav-bg) !important;
|
||||
border-bottom: 1px solid rgba(255,255,255,0.06);
|
||||
padding: 0.65rem 1.25rem;
|
||||
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
color: var(--nm-nav-text-act) !important;
|
||||
font-weight: 700;
|
||||
font-size: 1.1rem;
|
||||
letter-spacing: 0.02em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
.navbar-brand::before {
|
||||
content: "▪";
|
||||
color: var(--nm-accent);
|
||||
font-size: 1.3rem;
|
||||
}
|
||||
|
||||
.nav-link {
|
||||
color: var(--nm-nav-text) !important;
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
padding: 0.45rem 0.8rem !important;
|
||||
border-radius: var(--nm-radius-sm);
|
||||
transition: background var(--nm-transition), color var(--nm-transition);
|
||||
}
|
||||
.nav-link:hover {
|
||||
background: var(--nm-nav-hover);
|
||||
color: var(--nm-nav-text-act) !important;
|
||||
}
|
||||
.nav-link.active {
|
||||
background: var(--nm-nav-active);
|
||||
color: var(--nm-nav-text-act) !important;
|
||||
}
|
||||
|
||||
/* Navbar-User-Bereich */
|
||||
.navbar .nm-user-info {
|
||||
font-size: 0.8rem;
|
||||
color: var(--nm-nav-text);
|
||||
padding: 0.3rem 0.7rem;
|
||||
background: rgba(255,255,255,0.06);
|
||||
border-radius: var(--nm-radius-sm);
|
||||
border: 1px solid rgba(255,255,255,0.1);
|
||||
}
|
||||
|
||||
.btn-outline-light.btn-sm {
|
||||
font-size: 0.8rem;
|
||||
padding: 0.3rem 0.85rem;
|
||||
border-color: rgba(255,255,255,0.3);
|
||||
color: #fff;
|
||||
transition: background var(--nm-transition), border-color var(--nm-transition);
|
||||
}
|
||||
.btn-outline-light.btn-sm:hover {
|
||||
background: rgba(255,255,255,0.12);
|
||||
border-color: rgba(255,255,255,0.5);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* --- Main-Content --- */
|
||||
main.container {
|
||||
max-width: 1200px;
|
||||
padding-top: 1.75rem;
|
||||
padding-bottom: 4rem;
|
||||
}
|
||||
|
||||
/* --- Seitenüberschriften --- */
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: var(--nm-text);
|
||||
font-weight: 600;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
/* --- Cards --- */
|
||||
.card {
|
||||
background: var(--nm-surface);
|
||||
border: 1px solid var(--nm-border) !important;
|
||||
border-radius: var(--nm-radius) !important;
|
||||
box-shadow: var(--nm-shadow-sm);
|
||||
transition: box-shadow var(--nm-transition);
|
||||
}
|
||||
.card:hover {
|
||||
box-shadow: var(--nm-shadow-md);
|
||||
}
|
||||
.card-body {
|
||||
padding: 1.4rem 1.5rem;
|
||||
}
|
||||
|
||||
/* --- Stat-Cards (Dashboard) --- */
|
||||
.stat-card {
|
||||
border-left: 3px solid var(--nm-accent) !important;
|
||||
transition: transform var(--nm-transition), box-shadow var(--nm-transition);
|
||||
}
|
||||
.stat-card:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: var(--nm-shadow-md);
|
||||
}
|
||||
.stat-number {
|
||||
font-size: 2.1rem;
|
||||
font-weight: 700;
|
||||
color: var(--nm-accent);
|
||||
line-height: 1.1;
|
||||
}
|
||||
.stat-label {
|
||||
font-size: 0.8rem;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.06em;
|
||||
color: var(--nm-text-muted);
|
||||
margin-top: 0.2rem;
|
||||
}
|
||||
|
||||
/* --- Buttons --- */
|
||||
.btn {
|
||||
font-size: 0.875rem;
|
||||
font-weight: 500;
|
||||
border-radius: var(--nm-radius-sm);
|
||||
transition: background var(--nm-transition), border-color var(--nm-transition),
|
||||
transform var(--nm-transition), box-shadow var(--nm-transition);
|
||||
}
|
||||
.btn:active { transform: translateY(1px); }
|
||||
|
||||
.btn-primary {
|
||||
background: var(--nm-accent);
|
||||
border-color: var(--nm-accent);
|
||||
color: #fff;
|
||||
}
|
||||
.btn-primary:hover, .btn-primary:focus {
|
||||
background: var(--nm-accent-hover);
|
||||
border-color: var(--nm-accent-hover);
|
||||
color: #fff;
|
||||
box-shadow: 0 2px 8px rgba(74,111,165,0.35);
|
||||
}
|
||||
|
||||
.btn-outline-secondary {
|
||||
color: var(--nm-text-muted);
|
||||
border-color: var(--nm-border);
|
||||
}
|
||||
.btn-outline-secondary:hover {
|
||||
background: #eef0f4;
|
||||
color: var(--nm-text);
|
||||
border-color: #c0c5d0;
|
||||
}
|
||||
|
||||
.btn-outline-primary {
|
||||
color: var(--nm-accent);
|
||||
border-color: var(--nm-accent);
|
||||
}
|
||||
.btn-outline-primary:hover {
|
||||
background: var(--nm-accent);
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.btn-danger {
|
||||
background: #c0392b;
|
||||
border-color: #a93226;
|
||||
}
|
||||
.btn-danger:hover { background: #a93226; border-color: #922b21; }
|
||||
|
||||
.btn-sm {
|
||||
font-size: 0.8rem;
|
||||
padding: 0.28rem 0.7rem;
|
||||
}
|
||||
|
||||
/* --- Formularelemente --- */
|
||||
.form-label {
|
||||
font-size: 0.85rem;
|
||||
font-weight: 600;
|
||||
color: var(--nm-text);
|
||||
margin-bottom: 0.35rem;
|
||||
}
|
||||
.form-control, .form-select {
|
||||
border: 1px solid var(--nm-border);
|
||||
border-radius: var(--nm-radius-sm);
|
||||
color: var(--nm-text);
|
||||
background: #fff;
|
||||
font-size: 0.9rem;
|
||||
transition: border-color var(--nm-transition), box-shadow var(--nm-transition);
|
||||
padding: 0.5rem 0.75rem;
|
||||
}
|
||||
.form-control:focus, .form-select:focus {
|
||||
border-color: var(--nm-accent);
|
||||
box-shadow: 0 0 0 3px rgba(74,111,165,0.18);
|
||||
outline: none;
|
||||
}
|
||||
textarea.form-control { min-height: 9rem; resize: vertical; }
|
||||
|
||||
/* --- Tabellen --- */
|
||||
.table {
|
||||
color: var(--nm-text);
|
||||
border-color: var(--nm-border);
|
||||
font-size: 0.875rem;
|
||||
}
|
||||
.table > thead > tr > th {
|
||||
background: #f4f6f9;
|
||||
color: var(--nm-text-muted);
|
||||
font-size: 0.75rem;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.07em;
|
||||
border-bottom: 2px solid var(--nm-border);
|
||||
padding: 0.75rem 1rem;
|
||||
}
|
||||
.table > tbody > tr > td {
|
||||
padding: 0.75rem 1rem;
|
||||
vertical-align: middle;
|
||||
border-bottom: 1px solid #eef0f4;
|
||||
}
|
||||
.table-hover > tbody > tr:hover > td {
|
||||
background: #f7f9fc;
|
||||
}
|
||||
|
||||
/* --- Badges --- */
|
||||
.badge {
|
||||
font-size: 0.72rem;
|
||||
font-weight: 600;
|
||||
letter-spacing: 0.04em;
|
||||
padding: 0.28em 0.65em;
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
.text-bg-secondary {
|
||||
background: #e4e7ed !important;
|
||||
color: var(--nm-text) !important;
|
||||
}
|
||||
.text-bg-success { background: #d4edda !important; color: #1a5c35 !important; }
|
||||
.text-bg-danger { background: #f8d7da !important; color: #7a1c1c !important; }
|
||||
.text-bg-warning { background: #fff3cd !important; color: #664d03 !important; }
|
||||
.text-bg-info { background: #d1ecf1 !important; color: #0c4a55 !important; }
|
||||
.text-bg-primary { background: var(--nm-accent-light) !important; color: var(--nm-accent) !important; }
|
||||
|
||||
/* --- List-Group --- */
|
||||
.list-group-item {
|
||||
border-color: var(--nm-border);
|
||||
color: var(--nm-text);
|
||||
font-size: 0.875rem;
|
||||
padding: 0.8rem 1rem;
|
||||
transition: background var(--nm-transition);
|
||||
}
|
||||
.list-group-item-action:hover,
|
||||
.list-group-item-action:focus {
|
||||
background: #f4f6fa;
|
||||
color: var(--nm-text);
|
||||
}
|
||||
.list-group-flush .list-group-item { border-left: 0; border-right: 0; }
|
||||
|
||||
/* --- Alerts --- */
|
||||
.alert {
|
||||
border-radius: var(--nm-radius-sm);
|
||||
font-size: 0.875rem;
|
||||
border-width: 1px;
|
||||
}
|
||||
.alert-success { background:#d4edda; color:#1a5c35; border-color:#b8dfc7; }
|
||||
.alert-danger { background:#f8d7da; color:#7a1c1c; border-color:#f1b0b5; }
|
||||
.alert-warning { background:#fff3cd; color:#664d03; border-color:#ffe69c; }
|
||||
.alert-info { background:#d1ecf1; color:#0c4a55; border-color:#a8d8e1; }
|
||||
|
||||
/* --- Login-Seite --- */
|
||||
.login-wrapper {
|
||||
min-height: calc(100vh - 5rem);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.login-card {
|
||||
width: 100%;
|
||||
max-width: 400px;
|
||||
}
|
||||
.login-logo {
|
||||
width: 2.5rem;
|
||||
height: 2.5rem;
|
||||
background: var(--nm-accent);
|
||||
border-radius: var(--nm-radius-sm);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 1.2rem;
|
||||
color: #fff;
|
||||
font-weight: 800;
|
||||
margin: 0 auto 1rem;
|
||||
}
|
||||
|
||||
/* --- Text-Hilfklassen --- */
|
||||
.text-muted { color: var(--nm-text-muted) !important; }
|
||||
|
||||
/* --- Seitenüberschrift-Bereich --- */
|
||||
.page-header {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.75rem;
|
||||
margin-bottom: 1.5rem;
|
||||
}
|
||||
.page-header h1 {
|
||||
margin-bottom: 0.15rem;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
/* --- Content pre (Dokumentation) --- */
|
||||
.content-pre {
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
font-family: inherit;
|
||||
margin: 0;
|
||||
color: var(--nm-text);
|
||||
line-height: 1.7;
|
||||
}
|
||||
|
||||
/* --- Trennlinie --- */
|
||||
hr { border-color: var(--nm-border); opacity: 1; }
|
||||
|
||||
/* --- Scrollbar (Webkit) --- */
|
||||
::-webkit-scrollbar { width: 7px; height: 7px; }
|
||||
::-webkit-scrollbar-track { background: transparent; }
|
||||
::-webkit-scrollbar-thumb { background: #c5c9d4; border-radius: 4px; }
|
||||
::-webkit-scrollbar-thumb:hover { background: #a8adb9; }
|
||||
Reference in New Issue
Block a user