Refactor UI/views, rework Docker build, untrack local data

- Views umstrukturiert: einstellungen.ejs -> bewerbung.ejs, neues
  partials/head.ejs, header/footer/index angepasst
- CSS umbenannt: style.css -> styles.css
- server.js und public/js/main.js ueberarbeitet
- Dockerfile auf schlankes Multi-Stage-Setup umgestellt;
  docker-compose.yml und .dockerignore entfernt
- npm-Scripts docker:build/push/deploy ergaenzt
- SQLite-DB und .idea aus Git entfernt und via .gitignore ignoriert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-19 04:01:37 +02:00
parent 34cfcecc1e
commit c2a629e2c0
25 changed files with 3693 additions and 1886 deletions
+231
View File
@@ -0,0 +1,231 @@
/* ============================================
Bewerbungs-Tracker - Custom Styles
============================================ */
/* Base styles */
* {
box-sizing: border-box;
}
/* Smooth scrolling */
html {
scroll-behavior: smooth;
}
/* Custom scrollbar for dark mode */
.dark ::-webkit-scrollbar {
width: 8px;
height: 8px;
}
.dark ::-webkit-scrollbar-track {
background: #374151;
}
.dark ::-webkit-scrollbar-thumb {
background: #6b7280;
border-radius: 4px;
}
.dark ::-webkit-scrollbar-thumb:hover {
background: #8b94a3;
}
/* Light mode scrollbar */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
}
::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: #a1a1a1;
}
/* Modal backdrop animation */
.fixed.inset-0.bg-black.bg-opacity-50 {
animation: fadeIn 0.2s ease-out;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
/* Modal content animation */
.fixed.inset-0 > div > div {
animation: slideIn 0.3s ease-out;
}
@keyframes slideIn {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Table hover effect */
.tbody tr:hover {
transition: background-color 0.15s ease;
}
/* Focus styles for inputs */
input:focus,
textarea:focus,
select:focus {
outline: none;
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5);
}
/* Dark mode focus */
.dark input:focus,
.dark textarea:focus,
.dark select:focus {
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.3);
}
/* Button focus */
button:focus {
outline: none;
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5);
}
/* Loading spinner for buttons */
button.loading {
position: relative;
pointer-events: none;
}
button.loading::after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 16px;
height: 16px;
border: 2px solid transparent;
border-top-color: currentColor;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: translate(-50%, -50%) rotate(360deg);
}
}
/* Status badges */
.status-badge {
display: inline-block;
padding: 4px 8px;
border-radius: 9999px;
font-size: 12px;
font-weight: 500;
}
/* Table cell wrapping */
.table-cell-wrap {
white-space: normal;
word-wrap: break-word;
}
/* Responsive adjustments */
@media (max-width: 768px) {
/* Make filter section stack on mobile */
#filterForm {
flex-direction: column;
align-items: stretch;
}
#filterForm > div {
margin-bottom: 1rem;
}
/* Adjust buttons on mobile */
#filterForm .flex.space-x-2,
#filterForm .ml-auto,
#filterForm > div:last-child {
margin-bottom: 0 !important;
}
/* Make table scroll horizontally on mobile */
.overflow-hidden {
overflow-x: auto;
}
table {
min-width: 768px;
}
/* Adjust modal width on mobile */
.max-w-lg {
max-width: 90vw;
margin: 0 5vw;
}
.max-w-md {
max-width: 90vw;
margin: 0 5vw;
}
}
/* Print styles */
@media print {
.no-print {
display: none !important;
}
body {
background: white;
color: black;
}
.dark body {
background: white;
color: black;
}
}
/* Header shadow */
header {
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
/* Card shadows */
.bg-white,
.bg-gray-800 {
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1);
}
/* Utility classes */
.truncate-2 {
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
}
.truncate-3 {
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
}