Compare commits

..

2 commits

Author SHA1 Message Date
Homelab Cursor
fc02d37afe fix: Extra-Routes Import + Dashboard Lesbarkeit (NICHT LOESCHEN)
ACHTUNG: Der Import-Block vor if __name__ MUSS bleiben!
Ohne ihn funktionieren /downloads, /status, /health nicht.
2026-03-20 19:40:41 +01:00
Homelab Cursor
99d7ab7387 fix: Dashboard Lesbarkeit - groessere Schrift, besserer Kontrast
- Body 13px Monospace -> 16px System Sans-Serif
- Filmtitel 14px -> 17px, Meta 11px -> 14px
- Muted-Farbe #6b6b8a -> #9999b0 (viel besser lesbar)
- Alle Buttons, Badges, Filter groesser
- Hintergrund minimal heller fuer weniger Augen-Stress
2026-03-20 19:38:54 +01:00

View file

@ -12,6 +12,7 @@ from datetime import datetime
from pathlib import Path
sys.path.insert(0, os.path.dirname(__file__))
sys.path.insert(0, '/opt')
from flask import Flask, jsonify, render_template_string, request
from tools import savetv
@ -46,13 +47,13 @@ HTML = r"""<!DOCTYPE html>
<style>
@import url('https://fonts.googleapis.com/css2?family=Syne:wght@400;700;800&family=JetBrains+Mono:wght@400;600&display=swap');
:root {
--bg: #0a0a0f;
--surface: #12121a;
--border: #1e1e2e;
--bg: #0e0e14;
--surface: #16161e;
--border: #2a2a3a;
--accent: #e8421a;
--accent2: #ff7043;
--text: #e8e8f0;
--muted: #6b6b8a;
--text: #f0f0f5;
--muted: #9999b0;
--urgent: #ff3d3d;
--kino: #4caf92;
--tv: #5a7fa8;
@ -61,8 +62,9 @@ HTML = r"""<!DOCTYPE html>
body {
background: var(--bg);
color: var(--text);
font-family: 'JetBrains Mono', monospace;
font-size: 13px;
font-family: system-ui, -apple-system, sans-serif;
font-size: 16px;
line-height: 1.6;
min-height: 100vh;
}
header {
@ -79,11 +81,11 @@ HTML = r"""<!DOCTYPE html>
.logo {
font-family: 'Syne', sans-serif;
font-weight: 800;
font-size: 20px;
font-size: 24px;
letter-spacing: -0.5px;
}
.logo span { color: var(--accent); }
.stats { color: var(--muted); font-size: 12px; }
.stats { color: var(--muted); font-size: 14px; }
main { max-width: 1100px; margin: 0 auto; padding: 28px 20px; }
.section-header {
display: flex;
@ -92,15 +94,15 @@ HTML = r"""<!DOCTYPE html>
margin: 32px 0 14px;
font-family: 'Syne', sans-serif;
font-weight: 700;
font-size: 15px;
font-size: 17px;
text-transform: uppercase;
letter-spacing: 1.5px;
}
.badge {
padding: 2px 8px;
padding: 3px 10px;
border-radius: 3px;
font-size: 11px;
font-family: 'JetBrains Mono', monospace;
font-size: 13px;
font-family: system-ui, sans-serif;
font-weight: 600;
}
.badge-urgent { background: var(--urgent); color: #fff; }
@ -115,7 +117,7 @@ HTML = r"""<!DOCTYPE html>
background: var(--surface);
border: 1px solid var(--border);
border-radius: 6px;
padding: 14px 16px;
padding: 18px 20px;
cursor: pointer;
transition: border-color .15s, background .15s;
position: relative;
@ -132,22 +134,22 @@ HTML = r"""<!DOCTYPE html>
.film-title {
font-family: 'Syne', sans-serif;
font-weight: 700;
font-size: 14px;
line-height: 1.3;
margin-bottom: 6px;
font-size: 17px;
line-height: 1.4;
margin-bottom: 8px;
}
.film-meta {
color: var(--muted);
font-size: 11px;
font-size: 14px;
display: flex;
gap: 10px;
flex-wrap: wrap;
align-items: center;
}
.days-badge {
font-size: 10px;
font-size: 12px;
font-weight: 600;
padding: 1px 6px;
padding: 3px 8px;
border-radius: 2px;
margin-left: auto;
}
@ -163,8 +165,8 @@ HTML = r"""<!DOCTYPE html>
position: absolute;
top: 12px;
right: 12px;
width: 18px;
height: 18px;
width: 22px;
height: 22px;
border: 2px solid var(--border);
border-radius: 3px;
display: flex;
@ -192,7 +194,7 @@ HTML = r"""<!DOCTYPE html>
.selected-count {
font-family: 'Syne', sans-serif;
font-weight: 700;
font-size: 15px;
font-size: 17px;
}
.selected-count span { color: var(--accent); }
.btn {
@ -201,7 +203,7 @@ HTML = r"""<!DOCTYPE html>
border-radius: 4px;
font-family: 'Syne', sans-serif;
font-weight: 700;
font-size: 13px;
font-size: 15px;
cursor: pointer;
transition: opacity .15s;
text-transform: uppercase;
@ -260,8 +262,8 @@ HTML = r"""<!DOCTYPE html>
background: transparent;
color: var(--muted);
cursor: pointer;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
font-family: system-ui, sans-serif;
font-size: 14px;
transition: all .15s;
}
.filter-btn.active { border-color: var(--accent); color: var(--text); background: #1a0d0a; }
@ -271,15 +273,15 @@ HTML = r"""<!DOCTYPE html>
border: 1px solid var(--border);
color: var(--text);
border-radius: 3px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-family: system-ui, sans-serif;
font-size: 15px;
outline: none;
width: 220px;
transition: border-color .15s;
}
.search-input:focus { border-color: var(--accent); }
.dl-status {
font-size: 11px;
font-size: 14px;
color: #ffa726;
margin-top: 4px;
}
@ -585,5 +587,12 @@ def api_download():
return jsonify({"results": results})
# Extra-Routes (Downloads, Status, Health) - lokal in /opt/savetv_extra_routes.py
try:
from savetv_extra_routes import register_extra_routes
register_extra_routes(app)
except ImportError:
pass
if __name__ == "__main__":
app.run(host="0.0.0.0", port=8765, debug=False)