124-webapp/static/css/style.css
2025-10-07 17:48:55 +02:00

881 lines
No EOL
15 KiB
CSS

/* ========================================
FONTS
======================================== */
@font-face {
font-family: "HealTheWebB";
src: url("/static/fonts/HealTheWebB-Regular.otf") format("opentype");
}
@font-face {
font-family: "HealTheWebA";
src: url("/static/fonts/HealTheWebA-Regular.otf") format("opentype");
}
/* ========================================
BASE STYLES
======================================== */
body {
font-family: 'HealTheWebA', sans-serif;
background-color: #F5F5F7;
color: #1C1C1E;
margin: 0;
display: flex;
flex-direction: column;
min-height: 100vh;
width: 100%;
}
h1, h2, h3, h4, h5, h6 {
font-family: 'HealTheWebB', sans-serif;
color: #2C3E50;
margin: 0.5em 0;
text-align: center;
}
/* ========================================
HEADER
======================================== */
header {
width: 100%;
background-color: #E9EEF5;
color: #1C1C1E;
padding: 1.5em 0;
display: flex;
flex-direction: column;
align-items: center;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
}
header h1 {
font-size: 2em;
color: #2C3E50;
}
header p {
font-size: 1em;
color: #cd0d80;
margin: 0.2em 0 0;
}
.logo-link img {
height: 70px;
margin-bottom: 0.5em;
cursor: pointer;
}
/* ========================================
NAVIGATION
======================================== */
nav {
margin-top: 0.5em;
}
nav a {
color: #2C3E50;
text-decoration: none;
margin: 0 0.5em;
font-weight: 600;
}
nav a:hover {
color: #FFCC00;
}
/* ========================================
MAIN CONTENT
======================================== */
main {
flex: 1;
width: 100%;
}
.container {
max-width: 900px;
width: 90%;
margin: 3em auto;
display: flex;
flex-direction: column;
gap: 1.5em;
background: #FFFFFF;
padding: 2em;
border-radius: 12px;
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.08);
}
section {
margin-bottom: 2em;
padding: 1.5em;
background-color: #FAFAFA;
border-radius: 8px;
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
section:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
section h2 {
text-align: center;
margin-bottom: 1em;
color: #2C3E50;
border-bottom: 2px solid #cd0d80;
padding-bottom: 0.5em;
display: inline-block;
width: 100%;
}
section p {
text-align: center;
line-height: 1.6;
max-width: 800px;
margin: 0 auto 1em;
color: #333;
}
section ul {
max-width: 700px;
margin: 0 auto;
padding-left: 0;
list-style-position: inside;
}
section ul li {
text-align: left;
line-height: 1.8;
margin-bottom: 0.5em;
padding-left: 1em;
}
section a {
color: #cd0d80;
font-weight: 600;
text-decoration: none;
transition: color 0.2s ease;
}
section a:hover {
color: #2C3E50;
text-decoration: underline;
}
/* Course list specific styles */
.courses-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
gap: 2em;
padding: 0;
margin-top: 2em;
}
.course-card {
background-color: #FFFFFF;
border-radius: 12px;
overflow: visible;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
transition: transform 0.3s ease, box-shadow 0.3s ease;
display: flex;
flex-direction: row;
align-items: flex-start;
gap: 1em;
padding: 1.5em;
position: relative;
}
.course-card:hover {
transform: translateY(-4px);
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
}
.course-image {
width: 80px;
height: 80px;
min-width: 80px;
overflow: hidden;
border-radius: 8px;
background-color: #f0f0f0;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
z-index: 1;
cursor: pointer;
}
.course-image img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center;
transition: transform 0.3s ease;
}
.course-card:hover .course-image {
width: 200px;
height: 200px;
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.3);
z-index: 10;
}
.course-card:hover .course-image img {
transform: scale(1.02);
}
.course-content {
flex-grow: 1;
display: flex;
flex-direction: column;
}
.course-title {
font-size: 1.25em;
color: #2C3E50;
margin-bottom: 0.6em;
font-weight: 700;
line-height: 1.3;
border-bottom: 2px solid #cd0d80;
padding-bottom: 0.4em;
}
.course-description {
color: #555;
line-height: 1.7;
margin-bottom: 1em;
flex-grow: 1;
font-size: 1em;
}
.course-meta {
display: flex;
flex-direction: column;
gap: 0.5em;
margin-top: auto;
padding-top: 1em;
border-top: 1px solid #eee;
}
.course-dates {
color: #cd0d80;
font-size: 1em;
font-weight: 600;
display: flex;
align-items: center;
gap: 0.5em;
}
.course-audience {
color: #2C3E50;
font-size: 0.95em;
font-weight: 500;
display: flex;
align-items: center;
gap: 0.5em;
}
/* Responsive adjustments for courses */
@media (max-width: 768px) {
.courses-grid {
grid-template-columns: 1fr;
}
.course-card {
flex-direction: column;
align-items: stretch;
}
.course-image {
width: 100%;
height: 120px;
min-width: unset;
}
.course-card:hover .course-image {
width: 100%;
height: 180px;
}
.course-title {
font-size: 1.2em;
}
}
/* Image Modal / Lightbox */
.image-modal {
display: none;
position: fixed;
z-index: 9999;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.95);
justify-content: center;
align-items: center;
flex-direction: column;
padding: 20px;
animation: fadeIn 0.3s ease;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.modal-close {
position: absolute;
top: 20px;
right: 40px;
color: #ffffff;
font-size: 50px;
font-weight: bold;
cursor: pointer;
transition: color 0.3s ease;
z-index: 10000;
}
.modal-close:hover {
color: #cd0d80;
}
.modal-content {
max-width: 90%;
max-height: 85vh;
object-fit: contain;
border-radius: 8px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.5);
animation: zoomIn 0.3s ease;
}
@keyframes zoomIn {
from {
transform: scale(0.8);
opacity: 0;
}
to {
transform: scale(1);
opacity: 1;
}
}
#modalCaption {
color: #ffffff;
font-size: 1.2em;
text-align: center;
margin-top: 20px;
padding: 10px 20px;
background-color: rgba(0, 0, 0, 0.6);
border-radius: 8px;
}
/* ========================================
LINK CARDS
======================================== */
a.link-card,
.link-card {
display: block;
padding: 1.2em 1em;
background-color: #F9F9F9;
color: #1C1C1E;
border-left: 6px solid #cd0d80;
border-radius: 12px;
text-decoration: none;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
margin-bottom: 1rem;
}
a.link-card:hover,
.link-card:hover {
background-color: #cd0d80;
color: #FFFFFF;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
transform: translateY(-2px);
}
.link-card .title {
font-size: 1.25rem;
font-weight: 600;
}
.link-card .tagline {
font-size: 0.875rem;
color: #666;
margin-top: 0.25rem;
}
/* ========================================
STATUS CARDS
======================================== */
.status-cards-container {
display: flex;
flex-wrap: wrap;
gap: 20px;
margin-bottom: 20px;
}
.status-cards-container .status-card {
flex: 1 1 300px;
min-width: 280px;
}
.status-card {
background-color: #ffffff;
border: 1px solid #ddd;
border-radius: 8px;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
padding: 15px;
}
.status-header {
font-weight: 600;
font-size: 1.1rem;
margin-bottom: 10px;
}
.status-body {
display: flex;
align-items: center;
gap: 0.5rem;
font-size: 0.95rem;
line-height: 1.5;
color: #333;
}
.status-body a {
color: #1976d2;
text-decoration: underline;
}
.status-body a:hover {
text-decoration: none;
}
.status-indicator {
display: inline-block;
width: 12px;
height: 12px;
border-radius: 50%;
margin-right: 8px;
flex-shrink: 0;
}
.status-indicator.open {
background-color: #28a745;
}
.status-indicator.closed {
background-color: #dc3545;
}
.status-text {
font-size: 0.9rem;
}
/* ========================================
BUTTONS
======================================== */
button {
display: block;
padding: 1.2em 1em;
font-size: 1.2em;
font-weight: 600;
text-align: center;
background-color: #cd0d80;
color: #FFFFFF;
border: none;
border-radius: 8px;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
}
button:hover {
background-color: #FFCC00;
color: #1C1C1E;
}
/* ========================================
FORMS
======================================== */
form {
display: flex;
flex-direction: column;
gap: 1em;
margin-top: 1em;
}
form label {
font-weight: 600;
color: #2C3E50;
}
form input[type="text"],
form textarea,
form input[type="file"] {
width: 100%;
padding: 0.6em;
border: 1px solid #D1D1D6;
border-radius: 8px;
font-size: 1em;
box-sizing: border-box;
resize: vertical;
background-color: #FAFAFA;
color: #1C1C1E;
}
form textarea {
min-height: 90px;
}
/* ========================================
TABLES
======================================== */
table {
width: 100%;
border-collapse: collapse;
margin-top: 2em;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.06);
}
th, td {
border: 1px solid #E1E1E6;
padding: 0.5em;
text-align: center;
color: #1C1C1E;
}
th {
background-color: #F2F2F7;
font-weight: 600;
}
.color {
background-color: #FDE9F2;
}
.black {
background-color: #E5E5FF;
}
.totals {
font-weight: 600;
}
/* ========================================
ALERTS & MESSAGES
======================================== */
.rate-info {
text-align: center;
color: #2C3E50;
margin-top: 1em;
}
.error {
color: #D93025;
font-weight: bold;
text-align: center;
margin-top: 1em;
}
.alert {
padding: 1em;
border-radius: 8px;
margin-bottom: 1em;
text-align: center;
font-weight: 600;
}
.alert.success {
background-color: #2C3E50;
color: #FFFFFF;
}
.alert.error {
background-color: #cd0d80;
color: #FFFFFF;
}
.info-box {
background-color: #e3f2fd;
border-left: 4px solid #1976d2;
border-radius: 8px;
padding: 1.5em;
margin: 1.5em 0;
line-height: 1.6;
}
.info-box p {
margin: 0.5em 0;
text-align: left;
}
.info-box p:first-child {
margin-top: 0;
}
.info-box p:last-child {
margin-bottom: 0;
}
.info-box a {
color: #1976d2;
font-weight: 600;
text-decoration: none;
}
.info-box a:hover {
text-decoration: underline;
}
/* Pricing Card - Prominent pricing display */
.pricing-card {
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
border: 2px solid #28a745;
border-radius: 12px;
padding: 2em;
margin: 2em 0;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
.pricing-card h2 {
color: #28a745;
font-size: 1.8rem;
margin-bottom: 1.5em;
text-align: center;
}
.price-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1.5em;
margin-bottom: 1.5em;
}
.price-item {
background-color: white;
border-radius: 8px;
padding: 1.5em;
text-align: center;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.price-item:hover {
transform: translateY(-2px);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.12);
}
.price-item.bw {
border-top: 4px solid #6c757d;
}
.price-item.color {
border-top: 4px solid #fd7e14;
}
.price-label {
display: block;
font-size: 1.1rem;
color: #6c757d;
margin-bottom: 0.5em;
font-weight: 600;
}
.price-value {
display: block;
font-size: 2rem;
color: #1C1C1E;
font-weight: bold;
font-family: 'HealTheWebB', sans-serif;
}
.pricing-note {
text-align: center;
color: #6c757d;
font-size: 0.95rem;
margin: 0;
padding-top: 1em;
border-top: 1px solid #dee2e6;
}
.disclaimer-alert {
margin-top: 10px;
padding: 10px 15px;
background-color: #fff8e1;
border-left: 4px solid #fbc02d;
border-radius: 6px;
font-size: 0.9rem;
color: #333;
line-height: 1.4;
}
.disclaimer-alert a {
color: #1976d2;
text-decoration: underline;
}
.disclaimer-alert a:hover {
text-decoration: none;
}
/* ========================================
FOOTER
======================================== */
footer,
.footer {
width: 100%;
margin-top: 30px;
padding: 15px 0;
background-color: #F2F2F7;
text-align: center;
font-size: 0.85rem;
color: #555;
border-top: 1px solid #ddd;
}
footer img.footer-logo {
height: 50px;
margin-bottom: 0.5em;
}
.footer-container {
display: flex;
justify-content: center;
gap: 10px;
flex-wrap: wrap;
}
.footer a,
footer a {
color: #1976d2;
text-decoration: none;
}
.footer a:hover,
footer a:hover {
text-decoration: underline;
}
.admin-link {
font-weight: 600;
}
/* ========================================
LINKS
======================================== */
.link a {
color: #2C3E50;
text-decoration: underline;
font-weight: 600;
text-align: center;
}
/* ========================================
RESPONSIVE - TABLET (max-width: 1024px)
======================================== */
@media (max-width: 1024px) {
.container {
width: 95%;
margin: 2em auto;
padding: 1.5em;
}
header h1 {
font-size: 1.7em;
}
header p {
font-size: 0.95em;
}
.logo-link img {
height: 60px;
}
nav {
flex-direction: column;
align-items: center;
gap: 0.4em;
}
nav a {
margin: 0;
font-size: 0.95em;
}
a.link-card,
button {
font-size: 1em;
padding: 1em 0.8em;
}
form textarea {
min-height: 80px;
}
table {
display: block;
overflow-x: auto;
}
th, td {
padding: 0.45em;
font-size: 0.9em;
}
}
/* ========================================
RESPONSIVE - MOBILE (max-width: 768px)
======================================== */
@media (max-width: 768px) {
header h1 {
font-size: 1.5em;
}
header p {
font-size: 0.9em;
}
.logo-link img {
height: 55px;
}
a.link-card,
button {
font-size: 0.95em;
padding: 0.9em 0.7em;
}
form textarea {
min-height: 70px;
}
}