feat: comunidad.html, slider 5 diapositivas, botón Derechos y fondos en study cards

- Nuevo comunidad.html con sección de participación en el proyecto y 14 alternativas de software libre organizadas por categoría (navegadores, buscadores, correo, mensajería, almacenamiento, redes sociales, VPN/DNS)
- Slider principal ampliado de 3 a 5 diapositivas: slides 4 (jardín japonés) y 5 (bosque aéreo) con layout split texto+botón; slide 2 reemplazada con foto Times Square aérea
- CTAs ácido-verde en slides 1-3 enlazando a salud-digital#ciencia, egosurfing y salud-digital#derechos
- Sección confirm-section sustituida por botón grande "Derechos" que despliega 8 botones verbales (Conocer/Corregir/Borrar/Limitar/Exportar/Oponerse/Decidir/Reclamar) con right-cards RGPD expandibles
- Fondos fotográficos con overlay oscuro en las 4 study cards (estudio-brain, atención, sueño, datos)
- 7 fotos nuevas descargadas en img/

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hacklab 2026-04-27 23:51:48 +02:00
parent 467820b8b3
commit 3ebcc3e405
16 changed files with 2600 additions and 547 deletions

View file

@ -158,12 +158,10 @@
<div class="container hero-landing-inner">
<h1 class="main-title">RESETEA</h1>
<div class="landing-nav">
<a class="landing-nav-btn" href="tipos.html">Tipos de información</a>
<a class="landing-nav-btn" href="concienciacion.html">Concienciación</a>
<a class="landing-nav-btn" href="egosurfing.html">Egosurfing</a>
<a class="landing-nav-btn" href="plantillas.html">Resetea</a>
<a class="landing-nav-btn landing-nav-btn--highlight" href="stats.html">Estadísticas</a>
<a class="landing-nav-btn" href="salud-digital.html">🧠 Salud digital</a>
<a class="landing-nav-btn landing-nav-btn--highlight" href="comunidad.html">Comunidad</a>
<a class="landing-nav-btn" href="salud-digital.html">Salud digital</a>
</div>
</div>
</section>
@ -204,9 +202,9 @@
/* Iconos por clave — si la clave no está mapeada, se usa un emoji neutro */
const ICONS = {
instagram:'📸', facebook:'👤', twitter_x:'🐦', linkedin:'💼',
tiktok:'🎵', snapchat:'👻', microsoft:'🪟', apple:'🍎',
google:'🔍', amazon:'📦', reddit:'🤖', discord:'💬',
instagram:'IG', facebook:'FB', twitter_x:'X', linkedin:'LI',
tiktok:'TK', snapchat:'SC', microsoft:'MS', apple:'AP',
google:'GG', amazon:'AM', reddit:'RE', discord:'DC',
};
function animateCount(el, target, ms) {
@ -233,7 +231,7 @@
const pct = maxTotal > 0 ? Math.max(2, Math.round((total / maxTotal) * 100)) : 0;
/* icon_key viene del servidor whitelistado (a-z_), pero igual lo escapamos */
const icon = ICONS[esc(p.icon_key)] || '🔹';
const icon = ICONS[esc(p.icon_key)] || '';
/* p.name viene de la whitelist del servidor, pero escapeamos de todas formas */
return `<div class="provider-row">
@ -256,7 +254,7 @@
function renderPrivacy() {
return `<details class="privacy-block">
<summary class="privacy-summary">
<span>🔒</span>
<span></span>
<span>Política de privacidad de estas estadísticas</span>
<span class="arrow"></span>
</summary>
@ -329,7 +327,7 @@
const providersHtml = total > 0
? renderProviders(data.providers || [], maxProv)
: `<div class="empty-state"><div class="big">📬</div>
: `<div class="empty-state"><div class="big"></div>
El desglose por plataforma aparecerá cuando se envíen las primeras solicitudes.</div>`;
document.getElementById('content').innerHTML =
@ -351,7 +349,7 @@
function renderError(msg) {
document.getElementById('content').innerHTML =
`<div class="empty-state">
<div class="big">⚠️</div>
<div class="big">!</div>
${esc(msg) || 'No se pudieron cargar las estadísticas.'}<br>
<small style="color:var(--subtle)">El backend puede estar arrancando. Inténtalo en unos segundos.</small>
</div>`;