rss/templates/base.html
jlimolina 4ea56f3247 Build: Versión final estable y con nuevo diseño
Aplicación completamente funcional con servidor Waitress. Solucionados todos los problemas de arranque y timeouts. Se ha implementado un nuevo diseño visual moderno en todas las plantillas. El script de instalación está actualizado y es robusto.
2025-06-08 22:01:14 +00:00

123 lines
6.8 KiB
HTML

<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Agregador de Noticias RSS{% endblock %}</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;500;600;700&display=swap" rel="stylesheet">
<style>
/* --- Variables Globales de Diseño --- */
:root {
--primary-color: #6a11cb;
--secondary-color: #2575fc;
--gradiente-principal: linear-gradient(135deg, var(--primary-color) 0%, var(--secondary-color) 100%);
--error-color: #f72585;
--text-color: #2c3e50;
--text-color-light: #576475;
--card-bg: rgba(255, 255, 255, 0.75);
--border-color: rgba(200, 200, 220, 0.4);
--shadow-color: rgba(67, 97, 238, 0.15);
--border-radius-md: 12px;
--border-radius-sm: 8px;
--transition-speed: 0.3s;
}
/* --- Estilos Base --- */
* { box-sizing: border-box; }
body {
font-family: 'Poppins', 'Segoe UI', Tahoma, sans-serif;
margin: 0;
padding: 20px 0;
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
color: var(--text-color);
line-height: 1.6;
font-weight: 400;
}
/* --- Contenedor Principal con Efecto Vidrio --- */
.container {
max-width: 900px;
margin: 30px auto;
padding: 30px 40px;
background: var(--card-bg);
border-radius: 20px;
border: 1px solid rgba(255, 255, 255, 0.2);
box-shadow: 0 8px 32px 0 var(--shadow-color);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
}
/* --- Encabezados y Títulos --- */
header { text-align: center; margin-bottom: 40px; border-bottom: 1px solid var(--border-color); padding-bottom: 30px; }
h1 { font-size: 2.8rem; font-weight: 700; margin: 0 0 5px 0; background: var(--gradiente-principal); -webkit-background-clip: text; -webkit-text-fill-color: transparent; display: inline-block; }
h2 { font-size: 1.8rem; font-weight: 600; color: var(--primary-color); margin-bottom: 20px; }
.subtitle { color: var(--text-color-light); font-size: 1.1rem; margin-top: 5px; }
/* --- Formularios y Controles --- */
.form-section, .card { margin-bottom: 30px; background: rgba(255, 255, 255, 0.6); padding: 25px; border-radius: var(--border-radius-md); border: 1px solid var(--border-color); }
label { display: block; margin-bottom: 8px; font-weight: 600; color: var(--text-color); font-size: 0.9rem; }
select, input[type="text"], input[type="url"], input[type="file"], textarea { width: 100%; padding: 12px 15px; border: 1px solid var(--border-color); background-color: #f8f9fa; border-radius: var(--border-radius-sm); font-size: 1rem; font-family: 'Poppins', sans-serif; transition: all var(--transition-speed) ease; }
select:focus, input:focus, textarea:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px var(--shadow-color); background-color: white; }
/* --- Botones y Enlaces --- */
.btn, button { padding: 12px 25px; background: var(--gradiente-principal); color: white !important; border: none; border-radius: var(--border-radius-sm); font-size: 1rem; font-weight: 600; cursor: pointer; transition: all var(--transition-speed) ease; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); text-decoration: none; display: inline-block; text-align: center; }
.btn:hover, button:hover { transform: translateY(-3px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.2); text-decoration: none; }
.btn-secondary { background: #34495e; } .btn-secondary:hover { background: #2c3e50; }
a { color: var(--secondary-color); text-decoration: none; font-weight: 500; } a:hover { text-decoration: underline; }
.top-link { display: inline-block; margin-bottom: 25px; font-weight: 500; color: var(--primary-color); }
.top-link:hover { text-decoration: underline; }
/* --- Estilos para la lista de noticias --- */
.noticias-list { list-style: none; padding: 0; margin: 0; }
.noticia-item { display: flex; gap: 20px; padding: 20px 10px; border-bottom: 1px solid var(--border-color); transition: background-color 0.2s ease; }
.noticia-item:last-child { border-bottom: none; }
.noticia-item:hover { background-color: rgba(255,255,255,0.4); }
.noticia-imagen img { width: 150px; height: 100px; border-radius: var(--border-radius-sm); object-fit: cover; }
.noticia-texto h3 { margin: 0 0 5px 0; }
.noticia-texto h3 a { color: var(--text-color); font-weight: 600; }
.noticia-texto h3 a:hover { color: var(--primary-color); }
.noticia-meta { font-size: 0.8rem; color: var(--text-color-light); margin-bottom: 8px; }
/* --- Tabla de Gestión de Feeds --- */
.table-wrapper { overflow-x: auto; }
table { width: 100%; border-collapse: collapse; margin-top: 20px; }
th, td { padding: 12px 15px; text-align: left; border-bottom: 1px solid var(--border-color); }
th { background-color: rgba(106, 27, 203, 0.05); font-weight: 600; }
tr:last-child td { border-bottom: none; }
td .actions a { margin-right: 10px; }
/* --- Alertas y Mensajes Flash --- */
.flash-messages { list-style: none; padding: 0; margin-bottom: 20px; }
.flash-messages li { padding: 15px 20px; border-radius: var(--border-radius-sm); border-left: 5px solid; }
.flash-messages .error { background-color: #fff0f3; color: #d90429; border-color: var(--error-color); }
.flash-messages .success { background-color: #e6fcf5; color: #00b894; border-color: #00b894; }
.flash-messages .warning { background-color: #fffbeb; color: #f39c12; border-color: #f39c12; }
/* --- Responsividad --- */
@media (max-width: 768px) {
.container { padding: 20px; margin: 15px; }
h1 { font-size: 2rem; }
.noticia-item { flex-direction: column; }
}
</style>
</head>
<body>
<div class="container">
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
<ul class="flash-messages">
{% for category, message in messages %}
<li class="{{ category }}">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</div>
</body>
</html>