/* Miami Beach Analyser — styles du prototype « Miami Beach Command v2 » (identiques) */
:root{--bg:#07111b;--p:#112233;--p2:#0d1b29;--line:#284157;--txt:#edf6ff;--muted:#91a9bd;--cyan:#48d9e8;--green:#48d6a0;--gold:#ffc66e;--blue:#5796ff;--pink:#ff83bf;--purple:#b58bff}
*{box-sizing:border-box}body{margin:0;background:radial-gradient(ellipse at 50% -10%,#1c4052,#091521 55%,#060b12);color:var(--txt);font:13px/1.45 Inter,system-ui,sans-serif}.app{max-width:1580px;margin:auto;padding:20px}.top{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:18px}.brand{display:flex;align-items:center;gap:12px}.logo{width:48px;height:48px;border-radius:15px;background:linear-gradient(135deg,var(--cyan),var(--blue));display:grid;place-items:center;color:#06111b;font-size:24px;font-weight:1000}.brand h1{margin:0;font-size:18px;letter-spacing:2px}.brand small{color:var(--muted);font-size:10px;letter-spacing:1.4px}.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}button,.btn{background:#183149;color:var(--txt);border:1px solid #355570;padding:9px 12px;border-radius:9px;cursor:pointer;font:inherit;text-decoration:none}button:hover,.btn:hover{filter:brightness(1.2)}.primary{background:linear-gradient(110deg,#137f94,#326bc0);border:0;font-weight:800}.badge,.tag{border:1px solid var(--line);background:#0c1b29;border-radius:30px;padding:6px 10px;font-size:10px;color:var(--muted)}.badge b{color:var(--gold)}.panel{background:linear-gradient(145deg,#142739f5,#0d1a28f5);border:1px solid var(--line);border-radius:16px;padding:16px;box-shadow:0 12px 30px #0003;min-width:0}.panel h2{font-size:12px;text-transform:uppercase;letter-spacing:1.3px;color:#c5d9e9;margin:0}.head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:13px}.eyebrow{font-size:9px;letter-spacing:2px;color:var(--cyan);text-transform:uppercase}.muted,.note{color:var(--muted)}.note{font-size:10px;line-height:1.6;margin-top:10px}.hero{display:grid;grid-template-columns:1.2fr .8fr;gap:14px;margin-bottom:14px}.city{background:linear-gradient(110deg,#173248,#103a49 65%,#17283d);min-height:170px;position:relative;overflow:hidden}.city:after{content:"MB";position:absolute;right:18px;bottom:-55px;font-size:190px;font-weight:1000;color:#ffffff08}.cityname{font-size:42px;font-weight:950;letter-spacing:-2px;margin:8px 0 0}.stats{display:flex;gap:25px;flex-wrap:wrap;margin-top:18px}.stats b{display:block;font-size:18px}.stats span{font-size:9px;color:#9bb4c8;text-transform:uppercase}.snapgrid{display:grid;grid-template-columns:1fr 1fr;gap:9px}.snap{padding:12px;background:#0a1926;border:1px solid #294257;border-radius:11px}.snap strong{display:block;font-size:20px;margin-top:4px}.kpis{display:grid;grid-template-columns:repeat(6,1fr);gap:9px;margin-bottom:14px}.kpi{padding:13px;position:relative;overflow:hidden}.kpi:after{content:"";position:absolute;right:-20px;top:-20px;width:70px;height:70px;border-radius:50%;background:var(--a,var(--cyan));opacity:.09}.kpi label{font-size:9px;color:var(--muted);letter-spacing:1px;text-transform:uppercase}.kpi strong{display:block;font-size:22px;margin:5px 0}.kpi small{font-size:10px;color:var(--muted)}.tabs{display:flex;gap:7px;overflow:auto;padding:3px 0 12px}.tab{white-space:nowrap;background:#0b1926;color:var(--muted)}.tab.active{background:#17384b;color:white;border-color:#388da1}.page{display:grid;grid-template-columns:1.1fr .9fr;gap:14px}.wide{grid-column:1/-1}.hidden{display:none!important}.chart{height:235px;position:relative}.chart.small{height:185px}.pair{display:grid;grid-template-columns:1fr 1fr;gap:9px}.market{padding:13px;background:#0a1926;border:1px solid #294257;border-radius:11px}.market strong{display:block;font-size:23px;margin:5px 0}.tablewrap{overflow:auto}table{width:100%;border-collapse:collapse;white-space:nowrap}th{text-align:left;color:var(--muted);font-size:9px;text-transform:uppercase;letter-spacing:1px;padding:10px;border-bottom:1px solid var(--line)}td{padding:11px 10px;border-bottom:1px solid #203649;font-size:11px}tbody tr:hover{background:#ffffff08}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px}.tag{padding:4px 7px}.legend{display:flex;gap:12px;flex-wrap:wrap;margin:10px 0}.legend span{display:flex;gap:6px;align-items:center;font-size:10px;color:#c3d5e4}.swatch{width:9px;height:9px;border-radius:50%;display:inline-block}.neighcards{display:grid;grid-template-columns:repeat(4,1fr);gap:9px}.ncard{padding:11px;background:#0a1926;border:1px solid #294257;border-radius:10px}.ncard strong{display:block;margin:5px 0;font-size:13px}.ncard small{color:var(--muted)}#map{height:535px;background:#102536}.maptools{display:flex;gap:7px;flex-wrap:wrap;margin:8px 0 12px}.maptools select,.maptools input,.field input,.field select{background:#091522;color:var(--txt);border:1px solid #2b455c;border-radius:8px;padding:8px;font:inherit}.maptools select{max-width:185px}.map-panel{padding:0;overflow:hidden}.maphead{padding:15px 16px 8px}.maplegend{padding:10px 15px;border-top:1px solid var(--line);display:flex;gap:12px;flex-wrap:wrap}.maplegend span{font-size:10px;color:var(--muted)}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#12273a;color:#eff8ff}.leaflet-popup-content{font-size:11px}.field label{display:block;color:var(--muted);font-size:10px;margin-bottom:5px}.field input,.field select{width:100%}.formgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.callout{padding:11px;background:#0a1926;border:1px solid #3b536a;border-radius:10px;color:#b6c9da;font-size:10px;margin-top:12px}.callout b{color:var(--gold)}.footer{text-align:center;color:#71879d;font-size:9px;padding:20px}
@media(max-width:1000px){.kpis{grid-template-columns:repeat(3,1fr)}.hero,.page{grid-template-columns:1fr}.neighcards{grid-template-columns:repeat(3,1fr)}}@media(max-width:600px){.app{padding:10px}.top{align-items:flex-start;flex-direction:column}.kpis{grid-template-columns:repeat(2,1fr)}.kpi strong{font-size:19px}.neighcards{grid-template-columns:repeat(2,1fr)}#map{height:430px}.formgrid{grid-template-columns:1fr 1fr}.cityname{font-size:32px}}

/* MIAMI BEACH VIBE NETWORK — visual refresh */
:root{--bg:#100d19;--p:#21172a;--p2:#171322;--line:#59394f;--txt:#fff8f2;--muted:#c9b2bd;--cyan:#4de3df;--green:#a6ef8d;--gold:#ffd166;--blue:#72b8ff;--pink:#ff6fae;--purple:#c59cff;--coral:#ff8068;--orange:#ffad5c;--aqua:#55e5d1}
body{background:radial-gradient(ellipse at 10% 0%,#783b50 0,transparent 32%),radial-gradient(ellipse at 95% 10%,#15535b 0,transparent 29%),linear-gradient(145deg,#100d19,#171324 55%,#0e1d27);color:var(--txt)}
body:before{content:"";position:fixed;inset:0;pointer-events:none;opacity:.1;background-image:linear-gradient(#fff1 1px,transparent 1px),linear-gradient(90deg,#fff1 1px,transparent 1px);background-size:42px 42px}
.app{max-width:1680px;padding:22px;position:relative}
.panel{background:linear-gradient(145deg,#2a1d32f5,#171c2af5);border:1px solid #59394f;border-radius:18px;box-shadow:0 15px 40px #05040b66;transition:transform .25s,border-color .25s,box-shadow .25s}
.panel:before{content:"";position:absolute;inset:0 0 auto;height:2px;background:linear-gradient(90deg,transparent,#ff8b65,#ff6fae,#4de3df,transparent);opacity:.8}
.panel:hover{border-color:#a75a77;box-shadow:0 18px 45px #05040b88}
.brand-banner{width:min(440px,58vw);height:86px;object-fit:cover;object-position:center;border-radius:13px;border:1px solid #ff9ab866;box-shadow:0 8px 26px #ff6fae2c}
.brand{gap:14px}.brand h1{font-size:17px;letter-spacing:2px}.brand small{color:#f1c8d5}
.logo{display:none}
button,.btn{background:#302238;border:1px solid #70485f;color:#fff8f2;border-radius:10px;transition:.2s}
button:hover,.btn:hover{transform:translateY(-2px);filter:brightness(1.18);box-shadow:0 8px 22px #0005}
.primary{background:linear-gradient(110deg,#ff9666,#f05b9d);border:0;color:#281323;font-weight:900;box-shadow:0 5px 18px #f05b9d44}
.badge,.tag{background:#281b2d;border-color:#69445d;color:#efd6df}
.badge b{color:#ffd166}
.city{background:linear-gradient(110deg,#512846d9,#a13d62b8 48%,#12606ac9),url("../img/banner.png") center 42%/cover;min-height:205px;border-color:#a95876}
.cityname{font-size:48px;text-shadow:0 5px 22px #291021aa}
.city:after{content:"VIBE NETWORK";font-size:56px;letter-spacing:4px;right:12px;bottom:-16px;color:#fff1}
.kpi{transition:.25s}.kpi:hover{transform:translateY(-5px);border-color:#ff8b9f;box-shadow:0 15px 30px #0005}
.kpi strong{color:#fff0df}.kpi:after{animation:floatGlow 4s ease-in-out infinite}
.tab.active{background:linear-gradient(110deg,#ff9666,#f05b9d);color:#281323;border-color:transparent;font-weight:900}
.market,.snap,.ncard{background:#171827;border:1px solid #50394f;border-radius:12px}
.market strong,.snap strong{color:#ffe2ad}
.eyebrow{color:#55e5d1;font-weight:800}
@keyframes floatGlow{0%,100%{transform:translate(0,0) scale(1)}50%{transform:translate(-9px,8px) scale(1.12)}}
@keyframes shimmer{0%{background-position:0 0}100%{background-position:200% 0}}
@keyframes fillIn{from{width:0}to{width:var(--progress)}}
@keyframes pulseDot{0%,100%{box-shadow:0 0 0 0 #55e5d166}50%{box-shadow:0 0 0 7px #55e5d100}}
.progress-panel{grid-column:1/-1}
.progress-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.progress-item{padding:12px 13px;background:#151725;border:1px solid #50394f;border-radius:13px}
.progress-top{display:flex;justify-content:space-between;gap:8px;font-size:10px;color:#d9c3cd;margin-bottom:9px}
.progress-top b{font-size:12px;color:#fff3e8}
.progress-track{height:9px;background:#0d111d;border:1px solid #3e3048;border-radius:30px;overflow:hidden}
.progress-fill{height:100%;width:0;border-radius:30px;background:linear-gradient(90deg,#ff9666,#ff6fae,#55e5d1);background-size:200% 100%;animation:fillIn 1.5s cubic-bezier(.2,.8,.2,1) forwards,shimmer 3s linear infinite;box-shadow:0 0 14px #ff6fae66}
.progress-caption{display:flex;justify-content:space-between;color:#9e8995;font-size:9px;margin-top:6px}
.live-dot{display:inline-block;width:7px;height:7px;border-radius:50%;background:#a6ef8d;margin-right:6px;animation:pulseDot 1.7s infinite}
.hud-strip{display:flex;gap:9px;align-items:center;flex-wrap:wrap}
.hud-pill{padding:7px 10px;border:1px solid #67435a;border-radius:9px;background:#211929;color:#f5dce5;font-size:10px}
.hud-pill b{color:#ffd166}
.tablewrap th{color:#d6b8c5}.tablewrap td{border-bottom-color:#3b2b40}
#map{filter:saturate(1.18) contrast(1.02)}
.callout{background:#211a29;border-color:#79526a;color:#e3ccd5}
.footer{color:#aa8f9e}
@media(max-width:900px){.progress-grid{grid-template-columns:1fr 1fr}.brand-banner{height:66px}}
@media(max-width:560px){.app{padding:11px}.brand-banner{width:min(100%,360px);height:66px}.top{align-items:flex-start}.cityname{font-size:36px}.progress-grid{grid-template-columns:1fr}.kpis{grid-template-columns:repeat(2,1fr)}}

