:root{--bg:#f6f8fb;--ink:#0f172a;--muted:#5b6b85;--card:#fff;--line:#e6edf3;--blue:#2563eb;--green:#10b981;--red:#ef4444;--gray:#64748b}
*{box-sizing:border-box}
#melb-parking-app{max-width:1200px;margin:0 auto;padding:16px;font-family:Inter,system-ui,Segoe UI,Roboto,Arial,sans-serif;color:var(--ink);background:var(--bg)}
#melb-parking-app .hero{background:linear-gradient(135deg,#1e3a8a 0%,#2563eb 60%,#60a5fa 100%);color:#fff;border-radius:16px;padding:20px;margin-top:16px}
#melb-parking-app .hero h1{margin:0 0 6px;font-size:1.8rem}
#melb-parking-app .hero p{margin:0;opacity:.92}
#melb-parking-app .controls{display:grid;grid-template-columns:1.4fr auto auto auto auto;gap:10px;margin-top:12px}
#melb-parking-app .controls input{padding:10px 12px;border:2px solid #d8e2ee;border-radius:10px}
#melb-parking-app .btn{background:var(--blue);color:#fff;border:0;padding:10px 14px;border-radius:10px;font-weight:700;cursor:pointer}
#melb-parking-app .select{padding:10px 12px;border:2px solid #d8e2ee;border-radius:10px;background:#fff}
#melb-parking-app .statusline{margin-top:8px;font-size:.95rem;opacity:.95}
#melb-parking-app .app{display:grid;grid-template-columns:1.6fr 1fr;gap:16px;margin-top:18px}
#melb-parking-app .card{background:var(--card);border:1px solid var(--line);border-radius:16px;box-shadow:0 4px 16px rgba(10,20,40,.06)}
#map{height:640px;border-radius:16px}
#melb-parking-app .panel{padding:16px}
#melb-parking-app .kpis{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-bottom:10px}
#melb-parking-app .kpi{border:1px dashed var(--line);border-radius:12px;padding:10px 12px}
#melb-parking-app .kpi .n{font-size:1.4rem;font-weight:800;margin-top:2px}
#melb-parking-app .muted{color:var(--muted)}
#melb-parking-app .legend{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
#melb-parking-app .dot{width:12px;height:12px;border-radius:999px;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.15)}
#melb-parking-app .dot.g{background:var(--green)} #melb-parking-app .dot.r{background:var(--red)} #melb-parking-app .dot.x{background:var(--gray)} #melb-parking-app .dot.b{background:#3b82f6}
#melb-parking-app .list{max-height:360px;overflow:auto;margin-top:8px;border-top:1px solid var(--line)}
#melb-parking-app .item{padding:10px 8px;border-bottom:1px solid var(--line);cursor:pointer;border-radius:8px}
#melb-parking-app .item:hover{background:#f1f5f9}
#melb-parking-app .row{display:flex;justify-content:space-between;gap:10px}
#melb-parking-app .chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
#melb-parking-app .chip{font-size:.72rem;background:#e7f0ff;color:#0b4ad1;border:1px solid #cfe2ff;padding:2px 8px;border-radius:999px}
@media (max-width:980px){#melb-parking-app .controls{grid-template-columns:1fr auto auto auto auto}#melb-parking-app .app{grid-template-columns:1fr}}
@media (max-width:640px){#melb-parking-app .controls{grid-template-columns:1fr 1fr}#melb-parking-app .kpis{grid-template-columns:1fr 1fr}}