Files
calender_sync/api/templates/index.html
T
2026-08-10 17:01:27 +02:00

215 lines
5.8 KiB
HTML

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Calendar Sync</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background: #f5f5f5;
color: #333;
line-height: 1.6;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 2rem 1rem;
}
h1 {
font-size: 1.5rem;
margin-bottom: 1.5rem;
color: #222;
}
.search-form {
display: flex;
gap: 0.5rem;
margin-bottom: 1.5rem;
}
.search-form input[type="text"] {
flex: 1;
padding: 0.75rem 1rem;
border: 1px solid #ddd;
border-radius: 6px;
font-size: 1rem;
background: #fff;
}
.search-form input[type="text"]:focus {
outline: none;
border-color: #0066cc;
}
.search-form button {
padding: 0.75rem 1.5rem;
background: #0066cc;
color: #fff;
border: none;
border-radius: 6px;
font-size: 1rem;
cursor: pointer;
}
.search-form button:hover {
background: #0055aa;
}
.search-form a {
padding: 0.75rem 1rem;
background: #e0e0e0;
color: #333;
text-decoration: none;
border-radius: 6px;
font-size: 1rem;
}
.search-form a:hover {
background: #d0d0d0;
}
.events-list {
display: flex;
flex-direction: column;
gap: 1rem;
}
.event-card {
background: #fff;
border-radius: 8px;
padding: 1rem 1.25rem;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.event-header {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 1rem;
margin-bottom: 0.5rem;
}
.event-date {
font-size: 0.875rem;
color: #666;
}
.event-summary {
font-size: 1.125rem;
font-weight: 600;
color: #222;
}
.event-location {
font-size: 0.875rem;
color: #888;
margin-top: 0.25rem;
}
.event-location::before {
content: "\1F4CD ";
}
.badge {
display: inline-block;
padding: 0.2rem 0.6rem;
border-radius: 4px;
font-size: 0.75rem;
font-weight: 500;
text-transform: uppercase;
letter-spacing: 0.5px;
white-space: nowrap;
}
.badge-confirmed {
background: #d4edda;
color: #155724;
}
.badge-tentative {
background: #fff3cd;
color: #856404;
}
.badge-cancelled {
background: #f8d7da;
color: #721c24;
}
.no-events {
text-align: center;
color: #888;
padding: 3rem 1rem;
background: #fff;
border-radius: 8px;
box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}
.all-day {
font-size: 0.8rem;
color: #0066cc;
font-weight: 500;
}
</style>
</head>
<body>
<div class="container">
<h1>📆️ Termine</h1>
<form class="search-form" method="get" action="/">
<input type="text" name="search" value="{{ search }}" placeholder="Suche nach Titel...">
<button type="submit">Suchen</button>
{% if search %}
<a href="/">Zurücksetzen</a>
{% endif %}
</form>
<div class="events-list">
{% if events %}
{% for event in events %}
<div class="event-card">
<div class="event-header">
<div>
<div class="event-date">
{% if event.all_day %}
{{ event.start_at.split('T')[0] }} <span class="all-day">Ganztägig</span>
{% elif event.end_at %}
{{ event.start_at.split('T')[0] }} {{ event.start_at.split('T')[1][:5] }} - {{ event.end_at.split('T')[1][:5] }} {{ event.timezone }}
{% else %}
{{ event.start_at.split('T')[0] }} {{ event.start_at.split('T')[1][:5] }} {{ event.timezone }}
{% endif %}
</div>
<div class="event-summary">{{ event.summary or '(Kein Titel)' }}</div>
{% if event.location %}
<div class="event-location">{{ event.location }}</div>
{% endif %}
</div>
<span class="badge badge-{{ event.status|lower }}">
{{ event.status }}
</span>
</div>
</div>
{% endfor %}
{% else %}
<div class="no-events">
{% if search %}
Keine Termine für "{{ search }}" gefunden.
{% else %}
Keine anstehenden Termine.
{% endif %}
</div>
{% endif %}
</div>
</div>
</body>
</html>