first commit

This commit is contained in:
2026-01-29 21:08:01 +01:00
commit 4e4dfe66c6
28 changed files with 2509 additions and 0 deletions

81
public/css/calendar.css Normal file
View File

@@ -0,0 +1,81 @@
/* Calendar styles */
.calendar-title {
font-weight: 600;
}
.calendar-grid {
display: grid;
grid-template-columns: repeat(7, 1fr);
gap: 0.5rem;
}
.calendar-weekday {
text-align: center;
font-weight: 600;
color: #6c757d;
padding: 0.5rem 0;
}
.calendar-cell {
min-height: 110px;
border: 1px solid #e9ecef;
border-radius: 0.5rem;
padding: 0.5rem;
background: #fff;
position: relative;
}
.calendar-cell--disabled {
background: #f8f9fa;
color: #adb5bd;
}
.calendar-cell--selected {
border-color: #0d6efd;
box-shadow: 0 0 0 2px rgba(13, 110, 253, 0.2);
}
.calendar-day {
display: inline-block;
font-weight: 600;
color: #212529;
text-decoration: none;
}
.calendar-day:hover {
text-decoration: underline;
}
.calendar-events {
margin-top: 0.4rem;
font-size: 0.8rem;
}
.calendar-event {
display: flex;
align-items: center;
gap: 0.25rem;
color: #0d6efd;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.calendar-event i {
font-size: 0.5rem;
}
.calendar-event--more {
color: #6c757d;
}
@media (max-width: 768px) {
.calendar-grid {
grid-template-columns: repeat(2, 1fr);
}
.calendar-weekday {
display: none;
}
}

137
public/css/notes.css Normal file
View File

@@ -0,0 +1,137 @@
/* Notes styles */
.note-card {
transition: transform 0.2s, box-shadow 0.2s;
border-radius: 0.5rem;
}
.note-card:hover {
transform: translateY(-5px);
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
}
.note-content {
min-height: 100px;
color: #666;
font-size: 0.9rem;
line-height: 1.6;
}
.note-meta {
border-top: 1px solid #eee;
padding-top: 0.5rem;
}
/* Gradient backgrounds */
.bg-gradient-info {
background: linear-gradient(135deg, #36d1dc 0%, #5b86e5 100%);
}
.bg-gradient-success {
background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);
}
.hover-shadow {
transition: all 0.3s ease;
cursor: pointer;
}
.hover-shadow:hover {
transform: translateY(-5px);
box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.2) !important;
}
/* Modal animations */
.modal.fade .modal-dialog {
transition: transform 0.3s ease-out;
transform: scale(0.9);
}
.modal.show .modal-dialog {
transform: scale(1);
}
/* Navbar improvements */
.navbar {
box-shadow: 0 2px 4px rgba(0,0,0,.1);
}
.navbar-nav .nav-link {
transition: all 0.2s ease;
border-radius: 0.25rem;
margin: 0 0.25rem;
}
.navbar-nav .nav-link:hover {
background-color: rgba(255, 255, 255, 0.1);
}
.navbar-nav .nav-link.active {
background-color: rgba(255, 255, 255, 0.15);
font-weight: 500;
}
/* Card improvements */
.card {
border: none;
border-radius: 0.75rem;
}
/* Button improvements */
.btn {
transition: all 0.2s ease;
}
.btn:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.15);
}
.btn:active {
transform: translateY(0);
}
/* Empty state */
.fa-inbox {
opacity: 0.3;
}
/* Responsive textarea */
textarea {
resize: vertical;
min-height: 200px;
}
/* Delete modal styling */
#deleteModal .modal-header {
border-top-left-radius: 0.75rem;
border-top-right-radius: 0.75rem;
}
#deleteModal .modal-content {
border-radius: 0.75rem;
border: none;
}
/* Alert animations */
@keyframes slideIn {
from {
transform: translateY(-20px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
.alert {
animation: slideIn 0.3s ease-out;
}
/* Note title truncation on cards */
.note-card .card-title {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

115
public/css/style.css Normal file
View File

@@ -0,0 +1,115 @@
/* Gradient Background */
.bg-gradient-primary {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
}
/* Login/Verify Card Styles */
.card {
border-radius: 1rem;
}
.card-body {
padding: 2rem;
}
/* Form Styles */
.form-control-user {
font-size: 0.9rem;
border-radius: 10rem;
padding: 1.5rem 1rem;
}
.btn-user {
font-size: 0.9rem;
border-radius: 10rem;
padding: 0.75rem 1rem;
}
/* Background Images for Login/Verify Cards */
.bg-login-image {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
background-size: cover;
background-position: center;
border-radius: 1rem 0 0 1rem;
position: relative;
}
.bg-login-image::before {
content: "🔐";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 6rem;
opacity: 0.3;
}
.bg-verify-image {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
background-size: cover;
background-position: center;
border-radius: 1rem 0 0 1rem;
position: relative;
}
.bg-verify-image::before {
content: "🔑";
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 6rem;
opacity: 0.3;
}
/* Navbar Styles */
.navbar-dark {
box-shadow: 0 0.15rem 1.75rem 0 rgba(58, 59, 69, 0.15);
}
.navbar-brand {
font-weight: 700;
padding-left: 1rem;
}
/* Alert Styles */
.alert {
border-radius: 0.5rem;
}
/* Card Animations */
.card {
animation: fadeIn 0.5s ease-in;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Code Input Special Style */
input[name="code"] {
font-size: 1.5rem;
letter-spacing: 0.5rem;
font-weight: bold;
}
/* Dashboard Cards */
.bg-light {
background-color: #f8f9fc !important;
}
/* Responsive adjustments */
@media (max-width: 768px) {
.bg-login-image,
.bg-verify-image {
display: none !important;
}
}

50
public/js/app.js Normal file
View File

@@ -0,0 +1,50 @@
// Simple app.js for additional functionality
document.addEventListener('DOMContentLoaded', function() {
// Auto-dismiss alerts after 5 seconds
const alerts = document.querySelectorAll('.alert:not(.alert-info)');
alerts.forEach(function(alert) {
setTimeout(function() {
const bsAlert = new bootstrap.Alert(alert);
bsAlert.close();
}, 5000);
});
// Add loading state to forms
const forms = document.querySelectorAll('form');
forms.forEach(function(form) {
form.addEventListener('submit', function(e) {
const submitBtn = form.querySelector('button[type="submit"]');
if (submitBtn) {
submitBtn.disabled = true;
submitBtn.innerHTML = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span> Przetwarzanie...';
}
});
});
// Code input - accept only numbers
const codeInput = document.getElementById('code');
if (codeInput) {
codeInput.addEventListener('keypress', function(e) {
// Allow only numbers
if (e.key < '0' || e.key > '9') {
e.preventDefault();
}
});
// Auto-submit when 6 digits entered
codeInput.addEventListener('input', function(e) {
if (this.value.length === 6) {
// Optional: auto-submit after 6 digits
// this.form.submit();
}
});
}
// Add smooth scroll behavior
document.documentElement.style.scrollBehavior = 'smooth';
});
// Console styling for verification code (if shown)
console.log('%cSystem Logowania 2FA', 'color: #667eea; font-size: 24px; font-weight: bold;');
console.log('%cAplikacja demonstracyjna', 'color: #666; font-size: 12px;');