Skip to content

Commit b35edb0

Browse files
authored
Merge pull request #198 from LoRy24/aggiornamento-mappa-fablab
Aggiornamento mappa fablab
2 parents bdd3f92 + 8f73162 commit b35edb0

7 files changed

Lines changed: 912 additions & 74 deletions

File tree

public/app_data/geo/fablabs/como.geojson

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

public/app_data/geo/fablabs/ticino.geojson

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

public/app_data/geo/fablabs/varese.geojson

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

public/app_data/geo/fablabs/verbano.geojson

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.

src/components/ui/fablabs/FabLabsExplorer.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export default function FabLabsExplorer() {
2222
navigatorPage == 0 ? (
2323
<FabLabsBrowser/>
2424
) : (
25-
<div className={"text-[#ffffff] h-[600px] w-full flex flex-col items-center justify-center text-3xl pl-16 pr-16 mt-12 mb-32"}>
25+
<div className={"text-[#ffffff] min-h-150 w-full flex flex-col items-center justify-center text-3xl pl-16 pr-16 mt-12 mb-32"}>
2626
<FabLabOverallMapClient/>
2727
</div>
2828
)
@@ -33,7 +33,7 @@ export default function FabLabsExplorer() {
3333

3434
function FabLabExplorerPageSelector({ page, navigatorPage, setNavigatorPageFunction, children } : { page: number, navigatorPage: number, setNavigatorPageFunction: (value: (((prevState: number) => number) | number)) => void, children: React.ReactNode }) {
3535
return (
36-
<button disabled={page == navigatorPage} onClick={() => setNavigatorPageFunction(page)} className={`h-[32px] border-b-2 ${page == navigatorPage ? "border-b-[#ffffff] text-[#ffffff]" : "border-b-[#0a0a0a] text-[#c0c0c0] hover:border-b-[#c0c0c0] cursor-pointer"} duration-150`}>
36+
<button disabled={page == navigatorPage} onClick={() => setNavigatorPageFunction(page)} className={`h-8 border-b-2 ${page == navigatorPage ? "border-b-[#ffffff] text-[#ffffff]" : "border-b-[#0a0a0a] text-[#c0c0c0] hover:border-b-[#c0c0c0] cursor-pointer"} duration-150`}>
3737
{children}
3838
</button>
3939
);

src/components/ui/fablabs/maps/overall/FabLabOverallMap.tsx

Lines changed: 645 additions & 53 deletions
Large diffs are not rendered by default.
Lines changed: 261 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,272 @@
1-
/* Wrapper invisibile */
2-
.custom-marker-wrapper {
3-
background: transparent;
4-
border: none;
1+
.leaflet-container {
2+
background: #071014;
53
}
64

7-
/* Base dot */
8-
.custom-marker {
9-
width: 16px;
10-
height: 16px;
11-
border-radius: 50%;
12-
box-shadow: 0 0 6px rgba(0, 0, 0, 0.6);
5+
/* =========================
6+
POPUP MODERNI TEMA SCURO
7+
========================= */
8+
9+
.modern-dark-popup .leaflet-popup-content-wrapper {
10+
background:
11+
linear-gradient(180deg, rgba(16, 24, 28, 0.98), rgba(10, 15, 18, 0.98));
12+
color: #e6f4f1;
13+
border: 1px solid rgba(94, 234, 212, 0.18);
14+
border-radius: 24px;
15+
box-shadow:
16+
0 20px 60px rgba(0, 0, 0, 0.45),
17+
0 0 0 1px rgba(255, 255, 255, 0.03) inset,
18+
0 0 24px rgba(45, 212, 191, 0.08);
19+
backdrop-filter: blur(10px);
20+
overflow: hidden;
21+
}
22+
23+
.modern-dark-popup .leaflet-popup-content {
24+
margin: 0;
25+
min-width: 260px;
26+
}
27+
28+
.modern-dark-popup .leaflet-popup-tip {
29+
background: #0d1518;
30+
border: 1px solid rgba(94, 234, 212, 0.16);
31+
}
32+
33+
.modern-dark-popup .leaflet-popup-close-button {
34+
color: rgba(255, 255, 255, 0.72);
35+
font-size: 18px;
36+
padding: 10px 12px 0 0;
37+
transition: color 0.18s ease, transform 0.18s ease;
1338
}
1439

15-
/* Stati */
16-
.custom-marker.active {
17-
background-color: #22c55e; /* verde */
40+
.modern-dark-popup .leaflet-popup-close-button:hover {
41+
color: #ffffff;
42+
transform: scale(1.06);
1843
}
1944

20-
.custom-marker.closed {
21-
background-color: #ef4444; /* rosso */
45+
/* card interna popup */
46+
47+
.popup-card {
48+
padding: 18px;
2249
}
2350

24-
.custom-marker.idea {
25-
background-color: #a855f7; /* viola */
51+
.popup-card__top {
52+
display: flex;
53+
align-items: flex-start;
54+
justify-content: space-between;
55+
gap: 12px;
56+
margin-bottom: 14px;
2657
}
2758

28-
.custom-marker.ready {
29-
background-color: #facc15; /* giallo */
59+
.popup-card__eyebrow {
60+
margin: 0 0 6px 0;
61+
font-size: 11px;
62+
font-weight: 700;
63+
letter-spacing: 0.12em;
64+
text-transform: uppercase;
65+
color: rgba(165, 243, 252, 0.72);
3066
}
67+
68+
.popup-card__title {
69+
margin: 0;
70+
font-size: 19px;
71+
line-height: 1.15;
72+
font-weight: 800;
73+
color: #f3fffd;
74+
}
75+
76+
.popup-card__badge {
77+
flex-shrink: 0;
78+
display: inline-flex;
79+
align-items: center;
80+
border: 1px solid currentColor;
81+
border-radius: 999px;
82+
padding: 7px 10px;
83+
font-size: 11px;
84+
font-weight: 700;
85+
line-height: 1;
86+
background: rgba(255, 255, 255, 0.02);
87+
}
88+
89+
.popup-card__grid {
90+
display: grid;
91+
grid-template-columns: 1fr;
92+
gap: 10px;
93+
margin-bottom: 14px;
94+
}
95+
96+
.popup-card__item {
97+
padding: 11px 12px;
98+
border-radius: 14px;
99+
background: rgba(255, 255, 255, 0.035);
100+
border: 1px solid rgba(255, 255, 255, 0.05);
101+
}
102+
103+
.popup-card__label {
104+
display: block;
105+
margin-bottom: 4px;
106+
font-size: 11px;
107+
font-weight: 700;
108+
text-transform: uppercase;
109+
letter-spacing: 0.08em;
110+
color: rgba(170, 196, 201, 0.72);
111+
}
112+
113+
.popup-card__value {
114+
display: block;
115+
font-size: 13px;
116+
line-height: 1.45;
117+
color: #e7f3f1;
118+
}
119+
120+
.popup-card__description {
121+
border-top: 1px solid rgba(94, 234, 212, 0.12);
122+
padding-top: 12px;
123+
font-size: 13px;
124+
line-height: 1.5;
125+
color: rgba(212, 233, 229, 0.82);
126+
}
127+
128+
.popup-card__cta {
129+
display: inline-flex;
130+
align-items: center;
131+
justify-content: center;
132+
width: 100%;
133+
margin-top: 4px;
134+
border-radius: 16px;
135+
padding: 12px 14px;
136+
text-decoration: none;
137+
font-weight: 700;
138+
color: #071014;
139+
background: linear-gradient(135deg, #7be4d8, #48cae4);
140+
box-shadow:
141+
0 10px 24px rgba(72, 202, 228, 0.18),
142+
0 0 24px rgba(123, 228, 216, 0.16);
143+
transition:
144+
transform 0.18s ease,
145+
box-shadow 0.18s ease,
146+
filter 0.18s ease;
147+
}
148+
149+
.popup-card__cta:hover {
150+
transform: translateY(-1px);
151+
filter: brightness(1.03);
152+
box-shadow:
153+
0 14px 28px rgba(72, 202, 228, 0.24),
154+
0 0 30px rgba(123, 228, 216, 0.2);
155+
}
156+
157+
.map-area-popup {
158+
display: flex;
159+
flex-direction: column;
160+
gap: 6px;
161+
padding: 2px 2px 0;
162+
}
163+
164+
.map-area-popup strong {
165+
font-size: 14px;
166+
color: #eafffb;
167+
}
168+
169+
.map-area-popup span {
170+
font-size: 13px;
171+
line-height: 1.45;
172+
color: rgba(227, 244, 241, 0.8);
173+
}
174+
175+
/* =========================
176+
CLUSTER CUSTOM
177+
========================= */
178+
179+
.insu-cluster-wrapper {
180+
background: transparent !important;
181+
border: none !important;
182+
}
183+
184+
.insu-cluster {
185+
position: relative;
186+
width: 56px;
187+
height: 56px;
188+
display: flex;
189+
align-items: center;
190+
justify-content: center;
191+
}
192+
193+
.insu-cluster__outer,
194+
.insu-cluster__middle,
195+
.insu-cluster__inner {
196+
position: absolute;
197+
border-radius: 999px;
198+
inset: 0;
199+
}
200+
201+
.insu-cluster__outer {
202+
background: radial-gradient(
203+
circle,
204+
rgba(45, 212, 191, 0.18) 0%,
205+
rgba(45, 212, 191, 0.08) 45%,
206+
rgba(45, 212, 191, 0) 75%
207+
);
208+
transform: scale(1.18);
209+
filter: blur(3px);
210+
}
211+
212+
.insu-cluster__middle {
213+
inset: 4px;
214+
border: 1px solid rgba(125, 228, 216, 0.34);
215+
background: linear-gradient(
216+
180deg,
217+
rgba(14, 33, 38, 0.92),
218+
rgba(8, 18, 22, 0.92)
219+
);
220+
box-shadow:
221+
0 0 18px rgba(45, 212, 191, 0.18),
222+
inset 0 0 20px rgba(45, 212, 191, 0.08);
223+
}
224+
225+
.insu-cluster__inner {
226+
inset: 10px;
227+
display: flex;
228+
align-items: center;
229+
justify-content: center;
230+
background: linear-gradient(135deg, #2dd4bf, #48cae4);
231+
border: 2px solid rgba(255, 255, 255, 0.88);
232+
box-shadow:
233+
0 0 18px rgba(72, 202, 228, 0.35),
234+
0 0 28px rgba(45, 212, 191, 0.26);
235+
}
236+
237+
.insu-cluster__inner span {
238+
color: #031014;
239+
font-size: 15px;
240+
font-weight: 900;
241+
line-height: 1;
242+
}
243+
244+
.cluster-sm {
245+
transform: scale(0.94);
246+
}
247+
248+
.cluster-md {
249+
transform: scale(1);
250+
}
251+
252+
.cluster-lg {
253+
transform: scale(1.08);
254+
}
255+
256+
/* =========================
257+
SAGOME / CONFINI
258+
========================= */
259+
260+
.leaflet-interactive {
261+
transition:
262+
stroke 0.18s ease,
263+
fill-opacity 0.18s ease,
264+
opacity 0.18s ease;
265+
}
266+
267+
.leaflet-overlay-pane path:hover {
268+
stroke: #7be4d8;
269+
opacity: 1 !important;
270+
fill-opacity: 0.14 !important;
271+
filter: drop-shadow(0 0 6px rgba(43, 217, 187, 0.22));
272+
}

0 commit comments

Comments
 (0)