/* ══════════════════════════════════════════════════════════════
HERO VISUAL — SMART CITY PAGE · Four Data (dark background)
══════════════════════════════════════════════════════════════ */
.fdc-hero-visual{
--fd-blue:#1BA1DC;
--fd-blue-lit:#3CBBEE;
--fd-blue-soft:#85D1F4;
--fd-amber:#F5B942;
--fd-green:#34D399;
--fd-surface:rgba(16,38,58,.72);
--fd-stroke:rgba(133,209,244,.24);
--fd-text:#EAF6FD;
--fd-muted:#8FB0C6;
--fd-ease:cubic-bezier(.22,1,.36,1);
position:relative;
width:100%;
max-width:575px;
margin-inline:auto;
min-width:0;
font-family:"DM Sans","Inter","Montserrat",system-ui,Arial,sans-serif;
color:var(--fd-text);
}
.fdc-hero-visual,.fdc-hero-visual *{box-sizing:border-box;}
.fdc-hero-visual::before{
content:"";position:absolute;inset:6% 0 4% 0;
background:radial-gradient(56% 54% at 50% 54%,rgba(27,161,220,.28),transparent 68%);
filter:blur(10px);z-index:0;pointer-events:none;
}
/* ── SVG ── */
.fdc-scene{position:relative;z-index:1;display:block;width:100%;height:auto;overflow:visible;}
.fdc-asset{filter:drop-shadow(0 0 7px rgba(60,187,238,.28));}
.fdc-scene .ln{
fill:none;stroke:var(--fd-blue-lit);stroke-width:3;
stroke-miterlimit:10;stroke-linecap:round;
stroke-dasharray:100;stroke-dashoffset:100;
animation:fdcDraw 1s var(--fd-ease) forwards;
animation-delay:calc(var(--gd,0s) + var(--i,0) * .022s);
}
.fdc-scene .ln--thin{stroke-width:1.6;opacity:.72;}
.fdc-scene .lnf{ /* the pedestrian, solid fill */
fill:var(--fd-blue-lit);stroke:none;opacity:0;
animation:fdcFade .7s ease forwards;animation-delay:calc(var(--gd,0s) + .55s);
}
@keyframes fdcDraw{to{stroke-dashoffset:0}}
@keyframes fdcFade{to{opacity:1}}
/* ── Sensors + waves ── */
.fdc-wifi{opacity:0;animation:fdcFade .5s var(--fd-ease) forwards;animation-delay:var(--wd);
filter:drop-shadow(0 0 5px rgba(60,187,238,.65));}
.fdc-sensor{fill:#7BD5FA;stroke:none;}
.fdc-wave{fill:none;stroke:#7BD5FA;stroke-width:3.2;stroke-linecap:round;
transform-origin:0 6px;animation:fdcPing 2.4s ease-out infinite;}
.fdc-w1{animation-delay:calc(var(--wd) + 0s)}
.fdc-w2{animation-delay:calc(var(--wd) + .28s)}
.fdc-w3{animation-delay:calc(var(--wd) + .56s)}
@keyframes fdcPing{
0%{opacity:0;transform:scale(.55)} 22%{opacity:1;transform:scale(1)}
62%{opacity:.55;transform:scale(1.06)} 100%{opacity:0;transform:scale(1.14)}
}
/* ── Floating panels ── */
.fdc-card{
position:absolute;z-index:4;margin:0;padding:12px 13px 11px;
background:var(--fd-surface);
-webkit-backdrop-filter:blur(16px) saturate(1.3);
backdrop-filter:blur(16px) saturate(1.3);
border:1px solid var(--fd-stroke);border-radius:16px;
box-shadow:0 18px 40px -16px rgba(0,0,0,.65), inset 0 1px 0 rgba(255,255,255,.07);
opacity:0;transform:translateY(10px) scale(.97);
animation:fdcCardIn .6s var(--fd-ease) forwards;animation-delay:var(--cd);
}
@keyframes fdcCardIn{to{opacity:1;transform:none}}
.fdc-card__head{display:flex;align-items:center;gap:6px;
font-size:11px;font-weight:600;letter-spacing:.02em;color:var(--fd-muted);}
.fdc-live{width:6px;height:6px;border-radius:50%;background:var(--fd-green);flex:none;
box-shadow:0 0 0 0 rgba(52,211,153,.55);animation:fdcLive 2s ease-out infinite;}
@keyframes fdcLive{70%{box-shadow:0 0 0 7px rgba(52,211,153,0)}100%{box-shadow:0 0 0 0 rgba(52,211,153,0)}}
.fdc-card__val{display:flex;align-items:baseline;gap:4px;margin:3px 0 7px;
font-size:24px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums;}
.fdc-card__val span{font-size:12px;font-weight:600;color:var(--fd-muted);}
.fdc-card__row{display:flex;align-items:center;gap:6px;margin-top:10px;padding-top:8px;
border-top:1px solid rgba(133,209,244,.16);font-size:11px;color:var(--fd-muted);}
.fdc-card__row strong{margin-left:auto;font-size:12.5px;font-weight:700;color:var(--fd-text);
font-variant-numeric:tabular-nums;}
.fdc-card__row--alt strong{color:var(--fd-amber);}
.fdc-ico{flex:none;width:15px;height:15px;fill:none;stroke:var(--fd-blue-soft);
stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;}
.fdc-warn{flex:none;width:7px;height:7px;border-radius:50%;background:var(--fd-amber);
box-shadow:0 0 0 0 rgba(245,185,66,.6);animation:fdcWarn 2s ease-out infinite;}
@keyframes fdcWarn{70%{box-shadow:0 0 0 7px rgba(245,185,66,0)}100%{box-shadow:0 0 0 0 rgba(245,185,66,0)}}
/* — 1. flow meter — */
.fdc-card--flow{top:9%;left:0;width:47%;min-width:190px;}
.fdc-spark{display:block;width:100%;height:auto;overflow:visible;}
.fdc-spark__line{fill:none;stroke:var(--fd-blue-lit);stroke-width:2;
stroke-linejoin:round;stroke-linecap:round;
stroke-dasharray:100;stroke-dashoffset:100;
animation:fdcDraw 1.6s var(--fd-ease) forwards;animation-delay:calc(var(--cd) + .2s);}
.fdc-spark__fill{fill:rgba(60,187,238,.16);stroke:none;opacity:0;
animation:fdcFade .8s ease forwards;animation-delay:calc(var(--cd) + 1.1s);}
/* — 2. open door alert — */
.fdc-card--door{
top:46%;right:0;width:48%;min-width:206px;
display:flex;align-items:center;gap:10px;padding:10px 12px;
border-color:rgba(245,185,66,.42);
background:linear-gradient(rgba(245,185,66,.10),rgba(245,185,66,.10)),var(--fd-surface);
}
.fdc-door__ico{flex:none;width:28px;height:28px;border-radius:9px;display:grid;place-items:center;
background:rgba(245,185,66,.16);animation:fdcBlink 1.8s ease-in-out infinite;animation-delay:calc(var(--cd) + .6s);}
.fdc-door__ico svg{width:16px;height:16px;fill:none;stroke:var(--fd-amber);stroke-width:1.9;
stroke-linecap:round;stroke-linejoin:round;}
@keyframes fdcBlink{0%,100%{background:rgba(245,185,66,.16)}50%{background:rgba(245,185,66,.40)}}
.fdc-door__txt{display:flex;flex-direction:column;line-height:1.25;min-width:0;}
.fdc-door__txt strong{font-size:12.5px;font-weight:700;}
.fdc-door__txt span{font-size:11px;color:var(--fd-muted);}
/* — 3. network — */
.fdc-card--net{bottom:0;right:0;width:46%;min-width:196px;}
/* ── Responsive ── */
@media (max-width:860px){
.fdc-hero-visual{max-width:476px;}
.fdc-card--flow{width:46%;}
.fdc-card--door{width:53%;}
.fdc-card--net{width:51%;}
}
@media (max-width:600px){
.fdc-hero-visual{max-width:344px;padding-bottom:12%;}
.fdc-scene .ln{stroke-width:4;}
.fdc-scene .ln--thin{stroke-width:2.2;}
.fdc-card{border-radius:13px;padding:9px 10px;}
.fdc-card__val{font-size:18px;margin-bottom:5px;}
.fdc-card__val span{font-size:10.5px;}
.fdc-card__row{margin-top:8px;padding-top:6px;font-size:10px;}
.fdc-card__row strong{font-size:11.5px;}
.fdc-card--flow{top:auto;bottom:0;left:0;width:64%;min-width:0;}
.fdc-card--door{top:10%;right:0;width:70%;min-width:0;padding:8px 10px;gap:8px;}
.fdc-door__ico{width:24px;height:24px;border-radius:8px;}
.fdc-door__ico svg{width:14px;height:14px;}
.fdc-door__txt strong{font-size:11.5px;}
.fdc-door__txt span{font-size:10px;}
/* 3 panels do not fit without covering a sensor: we hide the most
secondary one under 600px. Change to 'display:flex' to restore it. */
.fdc-card--net{display:none;}
}
@media (prefers-reduced-motion:reduce){
.fdc-hero-visual *{animation:none !important;}
.fdc-scene .ln{stroke-dashoffset:0 !important;}
.fdc-scene .lnf,.fdc-card,.fdc-wifi{opacity:1 !important;transform:none !important;}
.fdc-spark__line{stroke-dashoffset:0 !important;}
.fdc-spark__fill{opacity:1 !important;}
}
Water meter · North Sector
42.6m³/h
Night flow 3.1 m³/h
Door open Utility room B4 · for 14 min
Network · 38 connected sites
4,812readings/day
Active alerts 2