- App.tsx: full navigation (Auth stack + Main tabs with 5 screens) - Auth: LoginScreen, RegisterScreen, ForgotPasswordScreen - HomeScreen: dashboard with IoT metrics, weather widget, alerts, quick actions, sensors - MapScreen: interactive map with layer toggles (6 layers) - MarketplaceScreen: categories (6), products (5), search - ChatScreen: AI chat with quick prompts (4), bot responses - ProfileScreen: user info, stats, menu (9 items), logout - AlertsScreen: alert list with severity, acknowledge - SensorsScreen: sensor list with type filters (6 types), search - ZonesScreen: zone cards with stats - SettingsScreen: language picker (FR/EN/ES/DE), privacy, about - Stores: iotStore (sensors, zones, alerts), notificationStore, uiStore + i18n - Hooks: useSensors, useAlerts, useNotifications, useLocation - Components: Card, Button, LoadingSpinner, ErrorBoundary, Header - Services: iotService, notificationService (with axios API client) - Utils: formatters (temp, AQI, noise, dates), validators (email, password, IBAN) - Theme: colors.ts with full design system (Blue Ocean palette) - Ditto: fixed MongoDB connection, new JWT secrets, official gateway image
181 lines
9.1 KiB
HTML
181 lines
9.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Smart App City — 12 Santé & Bien-être (Blue v2)</title>
|
|
<link rel="stylesheet" href="shared-blue.css">
|
|
<style>
|
|
.health-header {
|
|
background: linear-gradient(135deg, #00838F, #00ACC1);
|
|
padding: 16px; color: white;
|
|
}
|
|
.health-title { font-size: 20px; font-weight: 700; margin-bottom: 4px; }
|
|
.health-sub { font-size: 13px; opacity: 0.8; }
|
|
|
|
.health-alert-banner {
|
|
margin: 12px 16px;
|
|
background: linear-gradient(135deg, rgba(211,47,47,0.08), rgba(245,124,0,0.08));
|
|
border: 1px solid rgba(211,47,47,0.2);
|
|
border-radius: 12px; padding: 12px 14px;
|
|
display: flex; gap: 10px; align-items: center;
|
|
}
|
|
.health-alert-text { font-size: 13px; font-weight: 600; color: var(--alert-danger); }
|
|
|
|
.health-cards {
|
|
display: grid; grid-template-columns: repeat(2, 1fr);
|
|
gap: 10px; padding: 0 16px 16px;
|
|
}
|
|
.health-card {
|
|
background: white; border-radius: 16px; padding: 16px;
|
|
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
|
|
border: 1px solid var(--neutral-100);
|
|
}
|
|
.health-card-icon { font-size: 28px; margin-bottom: 8px; }
|
|
.health-card-value { font-size: 22px; font-weight: 700; }
|
|
.health-card-label { font-size: 11px; color: var(--neutral-500); margin-top: 4px; }
|
|
|
|
.establishment-list { padding: 0 16px 16px; }
|
|
.est-item {
|
|
display: flex; align-items: center; gap: 12px;
|
|
background: white; border-radius: 12px; padding: 14px;
|
|
margin-bottom: 8px; border: 1px solid var(--neutral-100);
|
|
}
|
|
.est-icon {
|
|
width: 44px; height: 44px; border-radius: 12px;
|
|
display: flex; align-items: center; justify-content: center;
|
|
font-size: 20px;
|
|
}
|
|
.est-info { flex: 1; }
|
|
.est-name { font-size: 14px; font-weight: 600; }
|
|
.est-address { font-size: 11px; color: var(--neutral-500); }
|
|
.est-status { font-size: 11px; font-weight: 600; }
|
|
.est-open { color: var(--alert-success); }
|
|
.est-closed { color: var(--alert-danger); }
|
|
.est-distance { font-size: 11px; color: var(--neutral-400); }
|
|
|
|
.air-quality-health {
|
|
margin: 0 16px 16px; background: white; border-radius: 16px;
|
|
padding: 16px; box-shadow: 0 2px 8px rgba(0,0,0,0.06);
|
|
border: 1px solid var(--neutral-100);
|
|
}
|
|
.aqi-display { display: flex; align-items: center; gap: 16px; }
|
|
.aqi-circle {
|
|
width: 80px; height: 80px; border-radius: 50%;
|
|
background: conic-gradient(var(--alert-success) 0deg 151deg, var(--neutral-200) 151deg 360deg);
|
|
display: flex; align-items: center; justify-content: center;
|
|
position: relative;
|
|
}
|
|
.aqi-circle::before {
|
|
content: ''; position: absolute;
|
|
width: 60px; height: 60px; border-radius: 50%; background: white;
|
|
}
|
|
.aqi-value { position: relative; z-index: 1; font-size: 24px; font-weight: 700; color: var(--alert-success); }
|
|
.aqi-label { font-size: 14px; font-weight: 600; }
|
|
.aqi-desc { font-size: 12px; color: var(--neutral-500); }
|
|
/* Fixed viewport for PDF/iframe embedding */
|
|
html, body { width: 390px !important; height: 844px !important; overflow: hidden !important; margin: 0 !important; padding: 0 !important; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="mobile-frame">
|
|
<div class="status-bar"><span>9:41</span></div>
|
|
|
|
<div class="health-header">
|
|
<div class="health-title">🏥 Santé & Bien-être</div>
|
|
<div class="health-sub">Martinique · Services de santé</div>
|
|
</div>
|
|
|
|
<div class="content-area" style="top:80px;background:var(--neutral-50);">
|
|
|
|
<!-- Health alert -->
|
|
<div class="health-alert-banner">
|
|
<span style="font-size:20px;">🦟</span>
|
|
<div class="health-alert-text">Alerte dengue — Cas confirmés en augmentation. Protégez-vous.</div>
|
|
</div>
|
|
|
|
<!-- Health metrics -->
|
|
<div class="health-cards">
|
|
<div class="health-card">
|
|
<div class="health-card-icon">🌡️</div>
|
|
<div class="health-card-value" style="color:var(--alert-success);">UV 8</div>
|
|
<div class="health-card-label">Index UV — Très élevé</div>
|
|
</div>
|
|
<div class="health-card">
|
|
<div class="health-card-icon">💨</div>
|
|
<div class="health-card-value" style="color:var(--alert-success);">AQI 42</div>
|
|
<div class="health-card-label">Qualité air — Bon</div>
|
|
</div>
|
|
<div class="health-card">
|
|
<div class="health-card-icon">💧</div>
|
|
<div class="health-card-value" style="color:var(--ocean-500);">98.2%</div>
|
|
<div class="health-card-label">Qualité eau — Excellent</div>
|
|
</div>
|
|
<div class="health-card">
|
|
<div class="health-card-icon">🌡️</div>
|
|
<div class="health-card-value" style="color:var(--primary-500);">28°C</div>
|
|
<div class="health-card-label">Température ressentie</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Air quality health card -->
|
|
<div class="air-quality-health">
|
|
<div style="font-size:14px; font-weight:700; margin-bottom:12px;">Qualité de l'air — Impact santé</div>
|
|
<div class="aqi-display">
|
|
<div class="aqi-circle"><div class="aqi-value">42</div></div>
|
|
<div>
|
|
<div class="aqi-label">Bon 🟢</div>
|
|
<div class="aqi-desc">Qualité de l'air satisfaisante. Peu ou pas de risque pour la santé.</div>
|
|
<div style="font-size:11px; color:var(--neutral-500); margin-top:4px;">Source: AirQ-012 · Il y a 3 min</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Nearby establishments -->
|
|
<div style="padding:0 16px 8px; font-size:16px; font-weight:700;">Établissements proches 📍</div>
|
|
<div class="establishment-list">
|
|
<div class="est-item">
|
|
<div class="est-icon" style="background:#FCE4EC;">🏥</div>
|
|
<div class="est-info"><div class="est-name">CHU de Martinique</div><div class="est-address">Route de Chateauboeuf, FDF</div></div>
|
|
<div><div class="est-status est-open">● Ouvert</div><div class="est-distance">1.2 km</div></div>
|
|
</div>
|
|
<div class="est-item">
|
|
<div class="est-icon" style="background:#E0F7FA;">💊</div>
|
|
<div class="est-info"><div class="est-name">Pharmacie de garde — FDF</div><div class="est-address">Av. des Caraïbes</div></div>
|
|
<div><div class="est-status est-open">● 24h/24</div><div class="est-distance">800 m</div></div>
|
|
</div>
|
|
<div class="est-item">
|
|
<div class="est-icon" style="background:#E8F5E9;">🚑</div>
|
|
<div class="est-info"><div class="est-name">SAMU / Urgences</div><div class="est-address">Numéro: 15 / 112</div></div>
|
|
<div><div class="est-status est-open">● Disponible</div><div class="est-distance">—</div></div>
|
|
</div>
|
|
<div class="est-item">
|
|
<div class="est-icon" style="background:#FFF3E0;">🦷</div>
|
|
<div class="est-info"><div class="est-name">Cabinet dentaire — Schoelcher</div><div class="est-address">Campus universitaire</div></div>
|
|
<div><div class="est-status est-closed">○ Fermé</div><div class="est-distance">2.1 km</div></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Health tips -->
|
|
<div style="padding:0 16px 8px; font-size:16px; font-weight:700;">💡 Conseils santé</div>
|
|
<div style="margin:0 16px 16px; background:white; border-radius:12px; padding:14px; border:1px solid var(--neutral-100);">
|
|
<div style="font-size:13px; margin-bottom:8px;">☀️ <strong>UV élevé</strong> — Portez lunettes de soleil et crème solaire SPF 50+</div>
|
|
<div style="font-size:13px; margin-bottom:8px;">💧 <strong>Hydratation</strong> — Buvez au minimum 2L d'eau par jour avec cette chaleur</div>
|
|
<div style="font-size:13px;">🦟 <strong>Dengue</strong> — Utilisez des répulsifs et éliminez les eaux stagnantes</div>
|
|
</div>
|
|
<div style="height:16px;"></div>
|
|
</div>
|
|
|
|
<!-- Bottom Nav -->
|
|
<div class="bottom-nav">
|
|
<div class="bottom-nav-item active"><svg viewBox="0 0 24 24" fill="currentColor"><path d="M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z"/><polyline points="9 22 9 12 15 12 15 22" fill="none" stroke="currentColor" stroke-width="2"/></svg><span>Accueil</span></div>
|
|
<div class="bottom-nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6"/><line x1="8" y1="2" x2="8" y2="18"/><line x1="16" y1="6" x2="16" y2="22"/></svg><span>Carte</span></div>
|
|
<div class="bottom-nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M8 14s1.5 2 4 2 4-2 4-2"/><line x1="9" y1="9" x2="9.01" y2="9"/><line x1="15" y1="9" x2="15.01" y2="9"/></svg><span>AI Chat</span></div>
|
|
<div class="bottom-nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg><span>Marché</span></div>
|
|
<div class="bottom-nav-item"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2"/><circle cx="12" cy="7" r="4"/></svg><span>Profil</span></div>
|
|
</div>
|
|
<div style="position:absolute;bottom:88px;left:0;right:0;text-align:center;font-size:10px;color:var(--neutral-400);">12 — Santé & Bien-être · Blue v2</div>
|
|
</div>
|
|
</body>
|
|
</html>
|