feat: bunte Farbwelt und neues Hero-Motiv
Docker-Image bauen / Image bauen und veröffentlichen (push) Successful in 19s

This commit is contained in:
2026-07-13 22:45:26 +02:00
parent cb97e04fbc
commit 875d63eb39
5 changed files with 77 additions and 61 deletions
+1 -1
View File
@@ -64,4 +64,4 @@ Der unveränderliche Commit-Tag erlaubt bei Bedarf ein gezieltes Rollback. `late
- aktuelle Termine, Materiallisten und Pläne ergänzen - aktuelle Termine, Materiallisten und Pläne ergänzen
- Kontaktangaben und Zuständigkeiten von der Schule bestätigen lassen - Kontaktangaben und Zuständigkeiten von der Schule bestätigen lassen
- Impressum und Datenschutz an Hosting und tatsächliche Dienste anpassen - Impressum und Datenschutz an Hosting und tatsächliche Dienste anpassen
- Nutzungsfreigabe für Fotos dokumentieren (Fotos im Prototyp: Dirk Altenkirch / Stadt Karlsruhe) - Nutzungsfreigabe für die Gebäudefotos dokumentieren (Dirk Altenkirch / Stadt Karlsruhe); das Hauptmotiv ist ein gekennzeichnetes KI-generiertes Symbolbild
+13 -13
View File
@@ -7,9 +7,9 @@
name="description" name="description"
content="Hardtschule Karlsruhe bewegte Grundschule in Mühlburg. Lernen, Gemeinschaft und wichtige Informationen für Familien." content="Hardtschule Karlsruhe bewegte Grundschule in Mühlburg. Lernen, Gemeinschaft und wichtige Informationen für Familien."
/> />
<meta name="theme-color" content="#0c4a3e" /> <meta name="theme-color" content="#3f63d3" />
<title>Hardtschule Karlsruhe · Bewegte Grundschule</title> <title>Hardtschule Karlsruhe · Bewegte Grundschule</title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><rect width=%22100%22 height=%22100%22 rx=%2224%22 fill=%22%230c4a3e%22/><path d=%22M22 67V39L50 22l28 17v28%22 fill=%22none%22 stroke=%22%23f5c95d%22 stroke-width=%229%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22/><path d=%22M35 70V52h30v18%22 fill=%22none%22 stroke=%22white%22 stroke-width=%229%22 stroke-linecap=%22round%22/></svg>" /> <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><rect width=%22100%22 height=%22100%22 rx=%2224%22 fill=%22%233f63d3%22/><path d=%22M22 67V39L50 22l28 17v28%22 fill=%22none%22 stroke=%22%23ffc857%22 stroke-width=%229%22 stroke-linecap=%22round%22 stroke-linejoin=%22round%22/><path d=%22M35 70V52h30v18%22 fill=%22none%22 stroke=%22white%22 stroke-width=%229%22 stroke-linecap=%22round%22/></svg>" />
<link rel="stylesheet" href="styles.css" /> <link rel="stylesheet" href="styles.css" />
<script src="script.js" defer></script> <script src="script.js" defer></script>
</head> </head>
@@ -148,17 +148,17 @@
<div class="hero-visual reveal" style="--delay: 120ms"> <div class="hero-visual reveal" style="--delay: 120ms">
<div class="hero-image-wrap"> <div class="hero-image-wrap">
<img <img
src="public/images/hardtschule-hero.jpg" src="public/images/hardtschule-kinder-herz.webp"
alt="Historischer Anbau der Hardtschule mit gelber Backsteinfassade" alt="Kinder bilden aus der Vogelperspektive ein großes Herz auf einem bunten Schulhof"
width="1500" width="1537"
height="785" height="1023"
/> />
<span class="photo-credit">Foto: Dirk Altenkirch / Stadt Karlsruhe</span> <span class="photo-credit">KI-generiertes Symbolbild</span>
</div> </div>
<div class="hero-sticker sticker-year" aria-hidden="true"> <div class="hero-sticker sticker-year" aria-hidden="true">
<span>seit</span> <span>gemeinsam</span>
<strong>1847</strong> <strong>stark</strong>
<span>in Mühlburg</span> <span>an der Hardtschule</span>
</div> </div>
<div class="hero-sticker sticker-move" aria-hidden="true"> <div class="hero-sticker sticker-move" aria-hidden="true">
<svg><use href="#icon-shoe"></use></svg> <svg><use href="#icon-shoe"></use></svg>
@@ -252,10 +252,10 @@
<div class="place-visual reveal"> <div class="place-visual reveal">
<img <img
class="place-image-main" class="place-image-main"
src="public/images/hardtschule-anbau.jpg" src="public/images/hardtschule-hero.jpg"
alt="Seitenansicht des denkmalgeschützten Anbaus der Hardtschule" alt="Historischer Anbau der Hardtschule mit gelber Backsteinfassade"
width="1500" width="1500"
height="998" height="785"
loading="lazy" loading="lazy"
/> />
<img <img
Binary file not shown.

After

Width:  |  Height:  |  Size: 362 KiB

+1
View File
@@ -13,6 +13,7 @@ const mimeTypes = {
".jpeg": "image/jpeg", ".jpeg": "image/jpeg",
".png": "image/png", ".png": "image/png",
".svg": "image/svg+xml", ".svg": "image/svg+xml",
".webp": "image/webp",
}; };
createServer((request, response) => { createServer((request, response) => {
+62 -47
View File
@@ -1,21 +1,28 @@
:root { :root {
--ink: #17302b; --navy-950: #252451;
--ink-soft: #4b5e59; --blue-700: #3f63d3;
--green-950: #073a31; --blue-100: #e3edff;
--green-900: #0c4a3e; --violet-700: #7655d8;
--green-800: #145e4f; --violet-100: #eee7ff;
--green-100: #dcebe4; --mint-100: #dff6ec;
--blue-700: #255da8; --coral-600: #ed6a61;
--blue-100: #dce9f8; --coral-100: #ffe3de;
--coral-600: #e76850; --sun-500: #ffc857;
--coral-100: #f8ded7;
--sun-500: #f5c95d;
--sun-100: #fff0bd; --sun-100: #fff0bd;
--cream-50: #fbf9f2; --cream-50: #fffaf3;
--cream-100: #f4efe2; --cream-100: #f7f0e7;
--white: #ffffff; --white: #ffffff;
--shadow-soft: 0 1px 2px rgba(23, 48, 43, 0.05), 0 12px 32px rgba(23, 48, 43, 0.08);
--shadow-float: 0 1px 0 rgba(255, 255, 255, 0.24) inset, 0 18px 50px rgba(0, 27, 22, 0.2); /* Semantische Farbtokens */
--ink: #29263f;
--ink-soft: #625e75;
--green-950: var(--navy-950);
--green-900: var(--blue-700);
--green-800: var(--violet-700);
--green-100: var(--mint-100);
--shadow-soft: 0 1px 2px rgba(37, 36, 81, 0.05), 0 12px 32px rgba(37, 36, 81, 0.09);
--shadow-float: 0 1px 0 rgba(255, 255, 255, 0.24) inset, 0 22px 55px rgba(30, 27, 78, 0.24);
--radius-sm: 12px; --radius-sm: 12px;
--radius-md: 18px; --radius-md: 18px;
--radius-lg: 28px; --radius-lg: 28px;
@@ -55,7 +62,7 @@ body.dialog-open {
img { img {
display: block; display: block;
max-width: 100%; max-width: 100%;
outline: 1px solid rgba(7, 58, 49, 0.08); outline: 1px solid rgba(37, 36, 81, 0.1);
outline-offset: -1px; outline-offset: -1px;
} }
@@ -151,7 +158,7 @@ svg {
} }
.utility-bar { .utility-bar {
background: var(--green-950); background: var(--navy-950);
color: rgba(255, 255, 255, 0.82); color: rgba(255, 255, 255, 0.82);
font-size: 0.78rem; font-size: 0.78rem;
font-weight: 600; font-weight: 600;
@@ -207,8 +214,8 @@ svg {
display: grid; display: grid;
place-items: center; place-items: center;
border-radius: 15px; border-radius: 15px;
background: var(--green-900); background: linear-gradient(135deg, var(--blue-700), var(--violet-700));
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.18) inset, 0 6px 16px rgba(7, 58, 49, 0.16); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 8px 20px rgba(69, 111, 232, 0.24);
} }
.brand-roof { .brand-roof {
@@ -447,7 +454,10 @@ svg {
position: relative; position: relative;
min-height: 680px; min-height: 680px;
overflow: hidden; overflow: hidden;
background: var(--green-900); background:
radial-gradient(circle at 8% 18%, rgba(255, 200, 87, 0.14), transparent 27%),
radial-gradient(circle at 92% 82%, rgba(237, 106, 97, 0.18), transparent 26%),
linear-gradient(135deg, #3d66d8 0%, #5e50cd 56%, #7149c2 100%);
color: var(--white); color: var(--white);
} }
@@ -490,7 +500,7 @@ svg {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 10px; gap: 10px;
color: var(--green-800); color: var(--violet-700);
font-size: 0.73rem; font-size: 0.73rem;
font-weight: 850; font-weight: 850;
letter-spacing: 0.16em; letter-spacing: 0.16em;
@@ -522,7 +532,7 @@ svg {
.hero-lead { .hero-lead {
max-width: 580px; max-width: 580px;
margin-top: 28px; margin-top: 28px;
color: rgba(255, 255, 255, 0.78); color: rgba(255, 255, 255, 0.9);
font-size: clamp(1rem, 1.5vw, 1.16rem); font-size: clamp(1rem, 1.5vw, 1.16rem);
line-height: 1.7; line-height: 1.7;
} }
@@ -539,7 +549,7 @@ svg {
flex-wrap: wrap; flex-wrap: wrap;
gap: 12px 22px; gap: 12px 22px;
margin-top: 44px; margin-top: 44px;
color: rgba(255, 255, 255, 0.66); color: rgba(255, 255, 255, 0.8);
font-size: 0.75rem; font-size: 0.75rem;
font-weight: 650; font-weight: 650;
} }
@@ -569,8 +579,8 @@ svg {
.hero-image-wrap { .hero-image-wrap {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
aspect-ratio: 0.95; aspect-ratio: 4 / 3;
border-radius: 160px 32px 32px 32px; border-radius: 42px 148px 42px 42px;
box-shadow: var(--shadow-float); box-shadow: var(--shadow-float);
} }
@@ -578,7 +588,7 @@ svg {
content: ""; content: "";
position: absolute; position: absolute;
inset: 0; inset: 0;
background: linear-gradient(180deg, transparent 65%, rgba(7, 58, 49, 0.34)); background: linear-gradient(180deg, transparent 68%, rgba(37, 36, 81, 0.32));
pointer-events: none; pointer-events: none;
} }
@@ -622,7 +632,8 @@ svg {
.sticker-year strong { .sticker-year strong {
font-family: var(--font-display); font-family: var(--font-display);
font-size: 2rem; font-size: 1.55rem;
letter-spacing: -0.04em;
} }
.sticker-year span { .sticker-year span {
@@ -766,8 +777,8 @@ svg {
.quick-blue { background: var(--blue-100); } .quick-blue { background: var(--blue-100); }
.quick-coral { background: var(--coral-100); } .quick-coral { background: var(--coral-100); }
.quick-yellow { background: var(--sun-100); } .quick-yellow { background: var(--sun-100); }
.quick-green { background: var(--green-100); } .quick-green { background: var(--mint-100); }
.quick-cream { background: var(--cream-100); } .quick-cream { background: var(--violet-100); }
.section-heading h2 { .section-heading h2 {
font-size: clamp(2.55rem, 5vw, 4.35rem); font-size: clamp(2.55rem, 5vw, 4.35rem);
@@ -1028,7 +1039,9 @@ svg {
.life-section { .life-section {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
background: var(--green-900); background:
radial-gradient(circle at 88% 18%, rgba(255, 200, 87, 0.15), transparent 24%),
linear-gradient(145deg, #354fbb 0%, #6746bc 58%, #7a46b8 100%);
color: var(--white); color: var(--white);
} }
@@ -1058,7 +1071,7 @@ svg {
.section-heading-split > p { .section-heading-split > p {
max-width: 430px; max-width: 430px;
padding-bottom: 8px; padding-bottom: 8px;
color: rgba(255, 255, 255, 0.68); color: rgba(255, 255, 255, 0.82);
} }
.story-grid { .story-grid {
@@ -1096,7 +1109,7 @@ svg {
.story-yellow { background: var(--sun-500); } .story-yellow { background: var(--sun-500); }
.story-blue { background: #8fb9e9; } .story-blue { background: #8fb9e9; }
.story-coral { background: #ef8d77; } .story-coral { background: #ef8d77; }
.story-green { background: var(--green-800); } .story-green { background: var(--violet-700); }
.story-copy { .story-copy {
position: relative; position: relative;
@@ -1133,7 +1146,7 @@ svg {
} }
.story-green p { .story-green p {
color: rgba(255, 255, 255, 0.7); color: rgba(255, 255, 255, 0.86);
} }
.story-green .text-link { .story-green .text-link {
@@ -1434,7 +1447,9 @@ svg {
} }
.parents-section { .parents-section {
background: var(--blue-700); background:
radial-gradient(circle at 4% 92%, rgba(255, 200, 87, 0.14), transparent 28%),
linear-gradient(145deg, #246fc2 0%, #3f63d3 54%, #5e50cd 100%);
color: var(--white); color: var(--white);
} }
@@ -1457,7 +1472,7 @@ svg {
.parents-intro > p:not(.eyebrow) { .parents-intro > p:not(.eyebrow) {
margin-top: 24px; margin-top: 24px;
color: rgba(255, 255, 255, 0.74); color: rgba(255, 255, 255, 0.86);
font-size: 1.02rem; font-size: 1.02rem;
} }
@@ -1565,7 +1580,7 @@ svg {
.accordion-content p { .accordion-content p {
max-width: 610px; max-width: 610px;
color: rgba(255, 255, 255, 0.72); color: rgba(255, 255, 255, 0.86);
font-size: 0.86rem; font-size: 0.86rem;
} }
@@ -1664,7 +1679,7 @@ svg {
overflow: hidden; overflow: hidden;
min-height: 450px; min-height: 450px;
border-radius: 24px; border-radius: 24px;
background: #e6ecdd; background: #e7edfb;
} }
.map-illustration::before { .map-illustration::before {
@@ -1701,14 +1716,14 @@ svg {
border: 8px solid rgba(255, 255, 255, 0.62); border: 8px solid rgba(255, 255, 255, 0.62);
border-right: 0; border-right: 0;
border-left: 0; border-left: 0;
background: #9dcad0; background: #a6d5eb;
transform: rotate(-12deg); transform: rotate(-12deg);
} }
.map-park { .map-park {
position: absolute; position: absolute;
border-radius: 50%; border-radius: 50%;
background: #b9d0a7; background: #d9cff7;
} }
.park-one { width: 190px; height: 140px; top: -30px; right: -40px; } .park-one { width: 190px; height: 140px; top: -30px; right: -40px; }
@@ -1787,7 +1802,7 @@ svg {
} }
.site-footer { .site-footer {
background: var(--green-950); background: var(--navy-950);
color: var(--white); color: var(--white);
} }
@@ -1885,7 +1900,7 @@ svg {
} }
.detail-dialog::backdrop { .detail-dialog::backdrop {
background: rgba(6, 42, 35, 0.72); background: rgba(28, 25, 68, 0.74);
backdrop-filter: blur(5px); backdrop-filter: blur(5px);
} }
@@ -1984,7 +1999,7 @@ svg {
} }
.legal-header { .legal-header {
background: var(--green-950); background: var(--navy-950);
color: var(--white); color: var(--white);
} }
@@ -2142,8 +2157,8 @@ svg {
} }
.hero-image-wrap { .hero-image-wrap {
aspect-ratio: 1.15; aspect-ratio: 4 / 3;
border-radius: 130px 28px 28px 28px; border-radius: 32px 120px 32px 32px;
} }
.sticker-move { .sticker-move {
@@ -2287,8 +2302,8 @@ svg {
} }
.hero-image-wrap { .hero-image-wrap {
aspect-ratio: 0.95; aspect-ratio: 4 / 3;
border-radius: 100px 22px 22px 22px; border-radius: 26px 92px 26px 26px;
} }
.sticker-year { .sticker-year {
@@ -2298,7 +2313,7 @@ svg {
} }
.sticker-year strong { .sticker-year strong {
font-size: 1.65rem; font-size: 1.28rem;
} }
.sticker-move { .sticker-move {