feat: refonte visuelle cartoon — fond OpenFreeMap, marqueurs SVG, légende comic, SpotPanel clair

- Fond cartoon : OpenFreeMap bright transformé (îles #7ec850, océan #3ab5e6, bordure #4a7c2f)
- Overlay vagues SVG subtil sur toute la carte (opacity 6%)
- Marqueurs spots SVG expressifs : ★ (ok), ! (risque), ✕ (impact) — animation bounce sur impact
- Sargasses #f4a020 avec texture dots MapLibre + contour épais 3.5px
- Légende comic : fond #fffbf0, bordure 3px, ombre dure 4px 4px 0 #333, Fredoka One
- SpotPanel blanc cassé avec ombre dure cartoon, gauge coloré pastel (vert/jaune/rouge)
- Topbar #1a1a2e avec boutons bleus ombre dure + hover translate(-2px,-2px)
- Timeline : step actif avec ombre dure cartoon
- Police Fredoka One chargée via Google Fonts

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Gwadaking
2026-04-02 15:25:17 -04:00
parent 1078a3459b
commit 7169dffc67
14 changed files with 1172 additions and 196 deletions

View File

@@ -4,13 +4,14 @@
left: 50%;
transform: translateX(-50%);
width: min(420px, calc(100vw - 32px));
background: #1e293b;
border: 1px solid #334155;
border-radius: 16px;
background: #fffbf0;
border: 3px solid #333;
border-radius: 20px;
padding: 20px;
color: #f1f5f9;
box-shadow: 0 8px 32px rgba(0, 0, 0, .5);
color: #1a2a1a;
box-shadow: 5px 5px 0px #333;
z-index: 10;
font-family: 'Fredoka', sans-serif;
}
.spot-panel__close {
@@ -18,52 +19,62 @@
top: 12px;
right: 12px;
background: none;
border: none;
color: #94a3b8;
font-size: 16px;
border: 2px solid #333;
border-radius: 8px;
color: #333;
font-size: 14px;
cursor: pointer;
padding: 4px 8px;
border-radius: 6px;
padding: 2px 7px;
font-weight: bold;
box-shadow: 2px 2px 0 #333;
transition: transform .1s, box-shadow .1s;
}
.spot-panel__close:hover {
transform: translate(-1px, -1px);
box-shadow: 3px 3px 0 #333;
}
.spot-panel__close:active {
transform: translate(1px, 1px);
box-shadow: 1px 1px 0 #333;
}
.spot-panel__close:hover { background: #334155; }
.spot-panel__header {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 16px;
margin-bottom: 14px;
}
.spot-panel__icon { font-size: 28px; }
.spot-panel__name { margin: 0; font-size: 18px; font-weight: 600; }
.spot-panel__region { margin: 2px 0 0; font-size: 13px; color: #94a3b8; }
.spot-panel__icon { font-size: 28px; }
.spot-panel__name { margin: 0; font-size: 19px; font-weight: 600; font-family: 'Fredoka One', cursive; color: #1a1a2e; }
.spot-panel__region { margin: 2px 0 0; font-size: 13px; color: #555; }
/* Horizon label */
.spot-panel__horizon-label {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 13px;
font-size: 12px;
font-weight: 600;
color: #94a3b8;
color: #555;
margin-bottom: 10px;
text-transform: uppercase;
letter-spacing: .05em;
}
.spot-panel__confidence { font-weight: 400; color: #64748b; }
.spot-panel__confidence { font-weight: 400; color: #888; }
/* Score */
.spot-panel__score { margin-bottom: 16px; }
/* Score gauge */
.spot-panel__score { margin-bottom: 14px; }
/* Gauge */
.spot-panel__gauge {
padding: 14px 16px 12px;
border-radius: 12px;
border-radius: 14px;
margin-bottom: 12px;
border: 2px solid rgba(0,0,0,0.15);
}
.gauge--low { background: rgba(20, 83, 45, 0.45); }
.gauge--medium { background: rgba(120, 53, 15, 0.45); }
.gauge--high { background: rgba(127, 29, 29, 0.45); }
.gauge--low { background: #dcfce7; }
.gauge--medium { background: #fef9c3; }
.gauge--high { background: #fee2e2; }
.spot-panel__gauge-top {
display: flex;
@@ -78,28 +89,31 @@
text-transform: uppercase;
letter-spacing: .07em;
}
.gauge--low .spot-panel__gauge-label { color: #86efac; }
.gauge--medium .spot-panel__gauge-label { color: #fcd34d; }
.gauge--high .spot-panel__gauge-label { color: #fca5a5; }
.gauge--low .spot-panel__gauge-label { color: #16a34a; }
.gauge--medium .spot-panel__gauge-label { color: #d97706; }
.gauge--high .spot-panel__gauge-label { color: #dc2626; }
.spot-panel__gauge-score {
font-size: 30px;
font-weight: 700;
color: #f1f5f9;
font-family: 'Fredoka One', cursive;
font-size: 32px;
font-weight: 400;
color: #1a1a2e;
line-height: 1;
}
.spot-panel__gauge-max {
font-size: 13px;
font-weight: 400;
color: #64748b;
color: #999;
margin-left: 2px;
font-family: 'Fredoka', sans-serif;
}
.spot-panel__gauge-track {
height: 5px;
background: rgba(255, 255, 255, 0.1);
height: 6px;
background: rgba(0, 0, 0, 0.1);
border-radius: 3px;
overflow: hidden;
border: 1px solid rgba(0,0,0,0.1);
}
.spot-panel__gauge-fill {
height: 100%;
@@ -110,6 +124,7 @@
.gauge--medium .spot-panel__gauge-fill { background: #eab308; }
.gauge--high .spot-panel__gauge-fill { background: #ef4444; }
/* Details */
.spot-panel__details {
display: grid;
grid-template-columns: 1fr 1fr;
@@ -117,21 +132,21 @@
font-size: 13px;
margin: 0;
}
.spot-panel__details dt { color: #94a3b8; }
.spot-panel__details dd { margin: 0; font-weight: 500; }
.spot-panel__details dt { color: #777; }
.spot-panel__details dd { margin: 0; font-weight: 600; color: #1a1a2e; }
.spot-panel__loading,
.spot-panel__no-data,
.spot-panel__error { color: #94a3b8; font-size: 14px; text-align: center; padding: 12px 0; }
.spot-panel__error { color: #f87171; }
.spot-panel__error { font-size: 14px; text-align: center; padding: 12px 0; color: #777; }
.spot-panel__error { color: #dc2626; }
/* Feedback */
.spot-panel__feedback {
border-top: 1px solid #334155;
border-top: 2px solid #e5e7eb;
padding-top: 14px;
text-align: center;
}
.spot-panel__feedback p { margin: 0 0 10px; font-size: 13px; color: #94a3b8; }
.spot-panel__feedback p { margin: 0 0 10px; font-size: 13px; color: #555; }
.spot-panel__feedback-btns {
display: flex;
@@ -141,47 +156,65 @@
.spot-panel__feedback-btns button {
flex: 1;
padding: 8px 12px;
border: 1px solid #475569;
border-radius: 8px;
background: #0f172a;
color: #f1f5f9;
border: 2px solid #333;
border-radius: 10px;
background: #f1f5f9;
color: #1a1a2e;
font-family: 'Fredoka', sans-serif;
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: background .15s;
box-shadow: 2px 2px 0 #333;
transition: transform .1s, box-shadow .1s;
}
.spot-panel__feedback-btns button:hover:not(:disabled) {
transform: translate(-1px, -1px);
box-shadow: 3px 3px 0 #333;
}
.spot-panel__feedback-btns button:active:not(:disabled) {
transform: translate(1px, 1px);
box-shadow: 1px 1px 0 #333;
}
.spot-panel__feedback-btns button:hover:not(:disabled) { background: #1e293b; border-color: #64748b; }
.spot-panel__feedback-btns button:disabled { opacity: .5; cursor: default; }
.spot-panel__feedback-thanks {
text-align: center;
color: #86efac;
color: #16a34a;
font-size: 14px;
font-weight: 600;
margin: 0;
padding-top: 14px;
border-top: 1px solid #334155;
border-top: 2px solid #e5e7eb;
}
/* Push notifications */
/* Push */
.spot-panel__push {
border-top: 1px solid #334155;
border-top: 2px solid #e5e7eb;
padding-top: 12px;
text-align: center;
}
.spot-panel__push-btn {
width: 100%;
padding: 9px 16px;
border: 1px solid #475569;
border-radius: 8px;
background: #0f172a;
color: #94a3b8;
border: 2px solid #333;
border-radius: 10px;
background: #f1f5f9;
color: #555;
font-family: 'Fredoka', sans-serif;
font-size: 13px;
font-weight: 500;
cursor: pointer;
transition: background .15s, border-color .15s;
box-shadow: 2px 2px 0 #333;
transition: transform .1s, box-shadow .1s;
}
.spot-panel__push-btn:hover:not(:disabled) { background: #1e293b; border-color: #64748b; color: #f1f5f9; }
.spot-panel__push-btn--active { border-color: #0ea5e9; color: #38bdf8; }
.spot-panel__push-btn:hover:not(:disabled) {
transform: translate(-1px, -1px);
box-shadow: 3px 3px 0 #333;
color: #1a1a2e;
}
.spot-panel__push-btn--active { border-color: #0ea5e9; color: #0284c7; background: #e0f2fe; }
.spot-panel__push-btn:disabled { opacity: .5; cursor: default; }
.spot-panel__push-error { color: #f87171; font-size: 12px; margin-top: 6px; }
.spot-panel__push-error { color: #dc2626; font-size: 12px; margin-top: 6px; }
/* ── Mobile ── */
@media (max-width: 480px) {
@@ -191,16 +224,10 @@
right: 0;
transform: none;
width: 100%;
border-radius: 16px 16px 0 0;
border-radius: 20px 20px 0 0;
max-height: 70vh;
overflow-y: auto;
}
.spot-panel__feedback-btns {
flex-direction: column;
}
.spot-panel__details {
grid-template-columns: 1fr;
}
.spot-panel__feedback-btns { flex-direction: column; }
.spot-panel__details { grid-template-columns: 1fr; }
}