268 lines
17 KiB
HTML
268 lines
17 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<title>Munich News Daily</title>
|
|
<style type="text/css">
|
|
/* Client-specific resets */
|
|
body, table, td, a { -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
|
|
table, td { mso-table-lspace: 0pt; mso-table-rspace: 0pt; }
|
|
img { -ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; }
|
|
|
|
/* General styles */
|
|
body { height: 100% !important; margin: 0 !important; padding: 0 !important; width: 100% !important; }
|
|
|
|
/* Hover effects */
|
|
.hover-opacity:hover { opacity: 0.8 !important; }
|
|
.read-more-btn:hover { background-color: #556cd6 !important; }
|
|
</style>
|
|
</head>
|
|
<body style="margin: 0; padding: 0; background-color: #f0f2f5; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; color: #1a1a1a;">
|
|
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color: #f0f2f5;">
|
|
<tr>
|
|
<td align="center" style="padding: 30px 10px;">
|
|
|
|
<table role="presentation" width="600" cellpadding="0" cellspacing="0" border="0" style="max-width: 600px; width: 100%;">
|
|
|
|
<tr>
|
|
<td align="center" style="padding-bottom: 25px;">
|
|
<p style="margin: 0 0 5px 0; font-size: 12px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; color: #667eea;">
|
|
{{ date }}
|
|
</p>
|
|
<h1 style="margin: 0; font-size: 32px; font-weight: 800; letter-spacing: -1px; color: #1a1a1a;">
|
|
Munich News Daily
|
|
</h1>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="background-color: #ffffff; border-radius: 16px; padding: 30px; margin-bottom: 20px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
|
|
<p style="margin: 0 0 10px 0; font-size: 18px; font-weight: 600; color: #1a1a1a;">
|
|
Good morning ☀️
|
|
</p>
|
|
<p style="margin: 0 0 25px 0; font-size: 16px; line-height: 1.6; color: #555555;">
|
|
Here is your AI-curated briefing. We've summarized <strong>{{ article_count }} stories</strong> to get you up to speed in under 5 minutes.
|
|
</p>
|
|
|
|
{% if weather and weather.success %}
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); border-radius: 12px; overflow: hidden;">
|
|
<tr>
|
|
<td style="padding: 20px 25px;">
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
<tr>
|
|
<td style="vertical-align: middle;">
|
|
<div style="font-size: 36px; font-weight: 700; color: #ffffff; line-height: 1;">
|
|
{{ weather.icon }} {{ weather.temperature }}°
|
|
</div>
|
|
<div style="font-size: 14px; color: rgba(255,255,255,0.9); margin-top: 5px; font-weight: 500;">
|
|
{{ weather.condition }}
|
|
</div>
|
|
</td>
|
|
<td align="right" style="vertical-align: middle;">
|
|
<table role="presentation" cellpadding="0" cellspacing="0" border="0">
|
|
<tr>
|
|
<td style="padding-right: 15px; border-right: 1px solid rgba(255,255,255,0.3);">
|
|
<div style="font-size: 12px; color: rgba(255,255,255,0.8); text-transform: uppercase;">High</div>
|
|
<div style="font-size: 16px; font-weight: 700; color: #ffffff;">{{ weather.high }}°</div>
|
|
</td>
|
|
<td style="padding-left: 15px;">
|
|
<div style="font-size: 12px; color: rgba(255,255,255,0.8); text-transform: uppercase;">Low</div>
|
|
<div style="font-size: 16px; font-weight: 700; color: #ffffff;">{{ weather.low }}°</div>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
|
|
<tr><td style="height: 20px;"></td></tr>
|
|
|
|
<tr>
|
|
<td style="background-color: #ffffff; border-radius: 16px; padding: 30px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
<tr>
|
|
<td style="padding-bottom: 20px; border-bottom: 2px solid #f0f2f5;">
|
|
<h2 style="margin: 0; font-size: 20px; font-weight: 700; color: #1a1a1a;">
|
|
⚡️ Quick Summary
|
|
</h2>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="padding-top: 20px;">
|
|
{% for section in category_sections %}
|
|
{% for article in section.articles %}
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="margin-bottom: 12px;">
|
|
<tr>
|
|
<td style="width: 24px; vertical-align: top; padding-top: 4px;">
|
|
<div style="height: 6px; width: 6px; background-color: #667eea; border-radius: 50%;"></div>
|
|
</td>
|
|
<td style="vertical-align: top;">
|
|
<p style="margin: 0; font-size: 15px; line-height: 1.5; color: #4a4a4a;">
|
|
<strong style="color: #1a1a1a;">{{ article.title_en if article.title_en else article.title }}</strong> — {{ article.summary.split('.')[0] }}.
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
{% endfor %}
|
|
{% endfor %}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
|
|
{% if transport_disruptions and transport_disruptions|length > 0 %}
|
|
<tr><td style="height: 20px;"></td></tr>
|
|
<tr>
|
|
<td style="background-color: #ffffff; border-radius: 16px; padding: 30px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
|
|
<h2 style="margin: 0 0 15px 0; font-size: 20px; font-weight: 700; color: #1a1a1a;">
|
|
🚆 S-Bahn Updates
|
|
</h2>
|
|
|
|
{% for disruption in transport_disruptions %}
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0" style="background-color: #fff8f0; border-radius: 8px; border: 1px solid #ffeeba; margin-bottom: 10px;">
|
|
<tr>
|
|
<td style="padding: 15px;">
|
|
<p style="margin: 0 0 5px 0; font-size: 12px; font-weight: 700; color: #c05621; text-transform: uppercase;">
|
|
{{ disruption.severity_icon }} {{ disruption.lines_str }}
|
|
</p>
|
|
<p style="margin: 0 0 5px 0; font-size: 15px; font-weight: 700; color: #2d3748;">
|
|
{{ disruption.title }}
|
|
</p>
|
|
{% if disruption.description %}
|
|
<p style="margin: 0; font-size: 14px; color: #4a5568; line-height: 1.4;">
|
|
{{ disruption.description }}
|
|
</p>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
{% endfor %}
|
|
<p style="margin: 10px 0 0 0; font-size: 13px; color: #718096;">
|
|
Check <a href="https://www.mvg.de" style="color: #667eea; text-decoration: underline;">MVG.de</a> for live times.
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
{% endif %}
|
|
|
|
{% for section in category_sections %}
|
|
|
|
<tr>
|
|
<td align="center" style="padding: 40px 0 20px 0;">
|
|
<table role="presentation" border="0" cellspacing="0" cellpadding="0">
|
|
<tr>
|
|
<td align="center" style="background-color: #e2e8f0; color: #4a5568; border-radius: 20px; padding: 8px 20px;">
|
|
<p style="margin: 0; font-size: 13px; font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase;">
|
|
{{ section.icon }} {{ section.name }}
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
|
|
{% for article in section.articles %}
|
|
<tr>
|
|
<td style="background-color: #ffffff; border-radius: 16px; padding: 30px; margin-bottom: 20px; box-shadow: 0 2px 4px rgba(0,0,0,0.05);">
|
|
<p style="margin: 0 0 12px 0; font-size: 12px; color: #718096; font-weight: 600; text-transform: uppercase; letter-spacing: 0.5px;">
|
|
{% if article.is_clustered %}
|
|
Multiple Sources
|
|
{% else %}
|
|
{{ article.source }}
|
|
{% endif %}
|
|
</p>
|
|
|
|
<h3 style="margin: 0 0 10px 0; font-size: 22px; font-weight: 700; line-height: 1.3; color: #1a1a1a;">
|
|
<a href="{{ article.link }}" style="color: #1a1a1a; text-decoration: none;">
|
|
{{ article.title_en if article.title_en else article.title }}
|
|
</a>
|
|
</h3>
|
|
|
|
{% if article.title_en and article.title_en != article.title %}
|
|
<p style="margin: 0 0 15px 0; font-size: 13px; color: #a0aec0; font-style: italic;">
|
|
"{{ article.title }}"
|
|
</p>
|
|
{% endif %}
|
|
|
|
<p style="margin: 0 0 20px 0; font-size: 16px; line-height: 1.6; color: #4a5568;">
|
|
{{ article.summary }}
|
|
</p>
|
|
|
|
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0">
|
|
<tr>
|
|
<td>
|
|
{% if article.is_clustered and article.sources %}
|
|
<p style="margin: 0; font-size: 13px; color: #718096;">
|
|
<strong>Read full coverage:</strong><br>
|
|
{% for source in article.sources %}
|
|
<a href="{{ source.link }}" style="color: #667eea; text-decoration: none; margin-right: 10px; display: inline-block; margin-top: 5px;">
|
|
{{ source.name }} ↗
|
|
</a>
|
|
{% endfor %}
|
|
</p>
|
|
{% else %}
|
|
<table role="presentation" cellpadding="0" cellspacing="0" border="0">
|
|
<tr>
|
|
<td style="background-color: #f0f2f5; border-radius: 8px; padding: 10px 20px;">
|
|
<a href="{{ article.link }}" style="color: #1a1a1a; font-size: 14px; font-weight: 600; text-decoration: none; display: block;">
|
|
Read full story →
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
{% endif %}
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr><td style="height: 20px;"></td></tr>
|
|
{% endfor %}
|
|
{% endfor %}
|
|
|
|
<tr>
|
|
<td align="center" style="padding: 40px 0;">
|
|
<p style="margin: 0 0 5px 0; font-size: 48px; font-weight: 800; color: #cbd5e0; line-height: 1;">
|
|
{{ article_count }}
|
|
</p>
|
|
<p style="margin: 0; font-size: 14px; font-weight: 600; color: #a0aec0; text-transform: uppercase; letter-spacing: 1px;">
|
|
Stories Summarized
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="text-align: center; padding: 0 20px 40px 20px;">
|
|
<p style="margin: 0 0 20px 0; font-size: 13px; line-height: 1.5; color: #718096;">
|
|
<strong>Munich News Daily</strong><br>
|
|
AI-powered news for busy locals.
|
|
</p>
|
|
|
|
<p style="margin: 0 0 20px 0; font-size: 12px; color: #a0aec0;">
|
|
<a href="{{ website_link }}" style="color: #718096; text-decoration: underline;">Website</a> •
|
|
<a href="{{ preferences_link }}" style="color: #718096; text-decoration: underline;">Preferences</a> •
|
|
<a href="{{ unsubscribe_link }}" style="color: #718096; text-decoration: underline;">Unsubscribe</a>
|
|
</p>
|
|
|
|
<p style="margin: 0; font-size: 11px; color: #cbd5e0;">
|
|
© {{ year }} Munich News Daily. Made with 🥨 in Bavaria.
|
|
</p>
|
|
</td>
|
|
</tr>
|
|
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
</body>
|
|
</html> |