diff --git a/app.py b/app.py index 3256a28..dbf9dfb 100644 --- a/app.py +++ b/app.py @@ -1,20 +1,27 @@ -from flask import Flask, render_template +from flask import Flask, render_template, send_from_directory + +app = Flask(__name__) + + +@app.route('/favicon.ico') +def favicon(): + return send_from_directory('static', 'favicon.ico') + -app = Flask(__name__, static_folder="images", static_url_path="/images") @app.route("/") @app.route("/home") def home(): return render_template("home.html") -@app.route("/impressum") -def impressum(): - return render_template("impressum.html") - @app.route("/kontakt") def kontakt(): return render_template("kontakt.html") +@app.route("/impressum") +def impressum(): + return render_template("impressum.html") + @app.route("/datenschutz") def datenschutz(): return render_template("datenschutz.html") diff --git a/deploy_flask.sh b/deploy_flask.sh index df8f56a..1975558 100644 --- a/deploy_flask.sh +++ b/deploy_flask.sh @@ -2,9 +2,7 @@ set -euo pipefail SRC_ROOT="/Volumes/MacBook SD/Projekte/HebammeKrystyna" - -APP_DST="/Volumes/docker/flask-postgres/app-hebammekrystyna" -ASSET_DST="/Volumes/docker/flask-postgres/hebammekrystyna" +DST_ROOT="/Volumes/docker/flask-postgres/app-hebammekrystyna" NAS_USER="BKolb" NAS_HOST="192.168.0.10" @@ -13,10 +11,9 @@ CONTAINER_NAME="flask_hebammekrystyna" echo "Starte Deployment..." [ -d "$SRC_ROOT" ] || { echo "Quelle fehlt: $SRC_ROOT"; exit 1; } -[ -d "$APP_DST" ] || { echo "App-Ziel fehlt: $APP_DST"; exit 1; } -[ -d "$ASSET_DST" ] || { echo "Asset-Ziel fehlt: $ASSET_DST"; exit 1; } +[ -d "$DST_ROOT" ] || { echo "Ziel fehlt: $DST_ROOT"; exit 1; } -echo "Synchronisiere Projektdateien nach $APP_DST ..." +echo "Synchronisiere Projektdateien ..." rsync -av --delete \ --exclude '.DS_Store' \ --exclude '._*' \ @@ -29,47 +26,11 @@ rsync -av --delete \ --exclude 'venv/' \ --exclude 'node_modules/' \ --exclude 'files/' \ - --exclude 'images/' \ - --exclude 'styles/' \ - "$SRC_ROOT/" "$APP_DST/" - -echo "Synchronisiere images/ nach $ASSET_DST/images ..." -if [ -d "$SRC_ROOT/images" ]; then - mkdir -p "$ASSET_DST/images" - rsync -av --delete \ - --exclude '.DS_Store' \ - --exclude '._*' \ - --exclude 'videos/' \ - "$SRC_ROOT/images/" "$ASSET_DST/images/" -else - echo "Hinweis: $SRC_ROOT/images nicht gefunden, übersprungen." -fi - -echo "Synchronisiere styles/ nach $ASSET_DST/styles ..." -if [ -d "$SRC_ROOT/styles" ]; then - mkdir -p "$ASSET_DST/styles" - rsync -av --delete \ - --exclude '.DS_Store' \ - --exclude '._*' \ - "$SRC_ROOT/styles/" "$ASSET_DST/styles/" -else - echo "Hinweis: $SRC_ROOT/styles nicht gefunden, übersprungen." -fi - -echo "Synchronisiere templates/ nach $APP_DST/templates ..." -if [ -d "$SRC_ROOT/templates" ]; then - mkdir -p "$APP_DST/templates" - rsync -av --delete \ - --exclude '.DS_Store' \ - --exclude '._*' \ - "$SRC_ROOT/templates/" "$APP_DST/templates/" -else - echo "Hinweis: $SRC_ROOT/templates nicht gefunden, übersprungen." -fi + "$SRC_ROOT/" "$DST_ROOT/" echo "files/ wird bewusst nicht angefasst." -echo "Container neu starten ... manuell!" +echo "Starte Container neu ..." #ssh "${NAS_USER}@${NAS_HOST}" "docker restart ${CONTAINER_NAME}" echo "Deployment abgeschlossen." \ No newline at end of file diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..8fd44c3 Binary files /dev/null and b/static/favicon.ico differ diff --git a/images/Krystyna.jpeg b/static/images/Krystyna.jpeg similarity index 100% rename from images/Krystyna.jpeg rename to static/images/Krystyna.jpeg diff --git a/images/Krystyna_optimized_full.png b/static/images/Krystyna_optimized_full.png similarity index 100% rename from images/Krystyna_optimized_full.png rename to static/images/Krystyna_optimized_full.png diff --git a/images/logo.png b/static/images/logo.png similarity index 100% rename from images/logo.png rename to static/images/logo.png diff --git a/images/logo_transparent.png b/static/images/logo_transparent.png similarity index 100% rename from images/logo_transparent.png rename to static/images/logo_transparent.png diff --git a/templates/styles/styles.css b/static/styles/style.css similarity index 58% rename from templates/styles/styles.css rename to static/styles/style.css index b4bb233..bc1f31c 100644 --- a/templates/styles/styles.css +++ b/static/styles/style.css @@ -8,8 +8,7 @@ --text: #4b4650; --accent-rosa: #bf6f8c; --accent-blau: #6f8eae; - --card: rgba(255, 255, 255, 0.82); - --card-strong: rgba(255, 255, 255, 0.9); + --card: rgba(255, 255, 255, 0.85); --shadow: 0 12px 30px rgba(86, 110, 140, 0.16); --radius: 24px; } @@ -22,74 +21,35 @@ body { margin: 0; color: var(--text); font-family: "Quicksand", Arial, sans-serif; - background: linear-gradient(135deg, var(--rosa-1) 0%, var(--rosa-2) 35%, var(--blau-1) 70%, var(--blau-2) 100%); + background: linear-gradient(135deg, var(--rosa-1), var(--blau-2)); min-height: 100vh; } -h1, h2, h3, .handwritten, .hero-motto { +h1, h2, h3 { font-family: "Handlee", cursive; - font-weight: 400; } .page-wrap { max-width: 1180px; margin: 0 auto; - padding: 28px 20px 40px; -} - -.topbar { - display: flex; - justify-content: space-between; - align-items: flex-start; - gap: 24px; - margin-bottom: 20px; -} - -.logo-box, -.photo-box, -.main-nav, -.hero-card, -.info-card, -details, -.legal-card { - background: var(--card); - box-shadow: var(--shadow); - border-radius: var(--radius); - backdrop-filter: blur(6px); -} - -.logo-box, -.photo-box { - padding: 14px; -} - -.logo { - display: block; - height: 92px; - width: auto; - object-fit: contain; -} - -.profile { - display: block; - width: 200px; - max-width: 100%; - height: auto; - border-radius: 22px; - object-fit: cover; - box-shadow: 0 12px 28px rgba(0,0,0,0.14); + padding: 22px 20px 40px; } .main-nav { - padding: 14px 18px; - margin-bottom: 28px; + background: var(--card); + padding: 14px 20px; + border-radius: var(--radius); + margin-bottom: 26px; + box-shadow: var(--shadow); + text-align: center; } .main-nav a { + display: inline-block; + margin: 0 14px; text-decoration: none; - color: var(--accent-blau); font-weight: 700; - margin-right: 18px; + color: var(--accent-blau); font-size: 1rem; } @@ -97,18 +57,33 @@ details, color: var(--accent-rosa); } -.hero { +.hero-header { display: grid; - grid-template-columns: 1.2fr 0.8fr; - gap: 26px; + grid-template-columns: 180px 1fr 220px; + gap: 28px; align-items: center; - margin-bottom: 34px; + background: var(--card); + border-radius: var(--radius); + box-shadow: var(--shadow); + padding: 28px 30px; + margin-bottom: 28px; } -.hero-card, -.info-card, -.legal-card { - padding: 30px; +.hero-logo { + display: flex; + align-items: center; + justify-content: center; +} + +.logo { + max-width: 150px; + width: 100%; + height: auto; + display: block; +} + +.hero-text-block { + min-width: 0; } .eyebrow { @@ -129,62 +104,70 @@ h1 { margin: 0 0 18px; } -h2 { - font-size: 2rem; - color: #6f5f6b; - margin-top: 0; -} - .hero-motto { - font-size: 1.45rem; - line-height: 1.65; - margin: 0; - color: #735f6c; -} - -.lead, -.info-card p, -.legal-card p, -.legal-card li { - font-size: 1.06rem; + font-size: 1.22rem; line-height: 1.75; + margin: 0; } .note-region { - margin-top: 18px; + margin-top: 16px; font-weight: 700; color: var(--accent-blau); } +.hero-photo { + display: flex; + justify-content: center; + align-items: center; +} + +.profile { + width: 220px; + height: 260px; + object-fit: cover; + object-position: center 20%; /* verschiebt Fokus nach oben */ + border-radius: 22px; +} + +.info-card, +.legal-card { + background: var(--card); + padding: 30px; + border-radius: var(--radius); + box-shadow: var(--shadow); + margin-bottom: 28px; +} + .section-title { - margin: 10px 0 14px; + font-size: 2rem; + margin-bottom: 10px; } .section-subtitle { - max-width: 820px; + margin-bottom: 20px; line-height: 1.75; - margin: 0 0 24px; } .services-grid { display: grid; - grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-template-columns: repeat(2, 1fr); gap: 18px; } details { + background: var(--card); + border-radius: var(--radius); + box-shadow: var(--shadow); overflow: hidden; } summary { - list-style: none; - cursor: pointer; - padding: 20px 22px; + padding: 18px; font-weight: 700; + cursor: pointer; + list-style: none; color: var(--accent-blau); - display: flex; - justify-content: space-between; - align-items: center; } summary::-webkit-details-marker { @@ -193,16 +176,18 @@ summary::-webkit-details-marker { summary::after { content: "+"; - font-size: 1.5rem; + float: right; color: var(--accent-rosa); + font-size: 1.4rem; + line-height: 1; } details[open] summary::after { - content: "–"; + content: "−"; } .detail-content { - padding: 0 22px 22px; + padding: 0 18px 18px; line-height: 1.75; } @@ -211,50 +196,36 @@ details[open] summary::after { line-height: 1.9; } -.contact-block a { +.contact-block a, +.legal-card a { color: var(--accent-blau); text-decoration: none; font-weight: 700; } -.legal-card h3 { - margin-top: 28px; - margin-bottom: 10px; - font-size: 1.55rem; - color: var(--accent-blau); -} - -.legal-card ul { - padding-left: 20px; - line-height: 1.8; -} - .footer { text-align: center; - padding-top: 28px; - color: #736b76; + margin-top: 40px; + color: #777; } -@media (max-width: 900px) { - .hero, - .services-grid { +@media (max-width: 980px) { + .hero-header { grid-template-columns: 1fr; + text-align: center; } -} -@media (max-width: 640px) { - .topbar { - flex-direction: column; + .hero-logo, + .hero-photo { + justify-content: center; } .profile { - width: 100%; - max-width: 260px; + width: 150px; + height: 150px; } - .hero-card, - .info-card, - .legal-card { - padding: 22px; + .services-grid { + grid-template-columns: 1fr; } -} +} \ No newline at end of file diff --git a/styles/styles.css b/styles/styles.css deleted file mode 100644 index e69de29..0000000 diff --git a/templates/base.html b/templates/base.html index 745483a..62b02de 100644 --- a/templates/base.html +++ b/templates/base.html @@ -4,19 +4,11 @@ {% block title %}Hebamme Krystyna Kolb{% endblock %} +
-
-
- -
- -
- Krystyna Kolb -
-
-
- {% block content %}{% endblock %} -
+ {% block content %}{% endblock %}