:root{
  --bg:#0a0a0b;
  --bg-2:#101013;
  --bg-3:#17171c;
  --line:#26262e;
  --line-2:#3a3a45;
  --text:#e6e6ea;
  --text-dim:#8a8a94;
  --text-mute:#5a5a64;
  --accent:#ff2a2a;      /* events - red */
  --accent-2:#ffb020;    /* construction - amber */
  --accent-3:#3ad6ff;    /* utility - cyan */
  --accent-4:#a86bff;    /* sidewalk - violet */
  --ok:#3aff9d;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;height:100%;background:var(--bg);color:var(--text);font-family:'JetBrains Mono',ui-monospace,Menlo,monospace;font-size:13px}
h1,h2,h3{font-family:'Space Grotesk','JetBrains Mono',sans-serif;font-weight:700;letter-spacing:.02em;margin:0}
a{color:var(--accent-3);text-decoration:none}
a:hover{text-decoration:underline}

body{display:flex;flex-direction:column;overflow:hidden}

#topbar{
  display:flex;align-items:center;gap:16px;
  padding:10px 14px;border-bottom:1px solid var(--line);
  background:linear-gradient(180deg,#0d0d10, #0a0a0b);
  flex:0 0 auto;
}
.brand{display:flex;align-items:center;gap:10px;min-width:0}
.brand .logo{color:var(--accent);font-size:18px;letter-spacing:-2px}
.brand h1{font-size:16px;line-height:1}
.brand p{margin:2px 0 0;color:var(--text-dim);font-size:11px}
.stats{display:flex;gap:14px;margin-left:auto}
.stat{display:flex;flex-direction:column;align-items:flex-end;line-height:1.1}
.stat .k{color:var(--text-mute);font-size:10px;text-transform:uppercase;letter-spacing:.1em}
.stat .v{color:var(--text);font-weight:700;font-size:14px;font-variant-numeric:tabular-nums}
#panel-toggle{
  display:none;background:var(--bg-3);color:var(--text);border:1px solid var(--line-2);
  padding:6px 10px;font-family:inherit;font-size:12px;cursor:pointer;border-radius:0;
}
#panel-toggle:hover{border-color:var(--accent)}

main{flex:1;display:flex;min-height:0}
#map{flex:1;background:#000;min-width:0}

/* leaflet dark tweaks */
.leaflet-container{background:#000;font-family:inherit}
.leaflet-control-attribution{background:rgba(10,10,11,.85)!important;color:var(--text-mute)!important;font-size:10px}
.leaflet-control-attribution a{color:var(--text-dim)!important}
.leaflet-control-zoom a{background:var(--bg-2)!important;color:var(--text)!important;border:1px solid var(--line-2)!important;border-radius:0!important;font-family:inherit;font-weight:700}
.leaflet-control-zoom a:hover{background:var(--bg-3)!important;border-color:var(--accent)!important;color:var(--accent)!important}

.leaflet-popup-content-wrapper{background:var(--bg-2);color:var(--text);border:1px solid var(--line-2);border-radius:0;box-shadow:6px 6px 0 rgba(0,0,0,.6)}
.leaflet-popup-tip{background:var(--bg-2);border:1px solid var(--line-2)}
.leaflet-popup-content{margin:10px 12px;font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.5}
.leaflet-popup-content h3{font-size:12px;color:var(--accent);text-transform:uppercase;letter-spacing:.1em;margin-bottom:6px}
.leaflet-popup-content .p-row{display:flex;gap:8px}
.leaflet-popup-content .p-k{color:var(--text-mute);min-width:52px}
.leaflet-popup-content .p-v{color:var(--text)}
.leaflet-popup-close-button{color:var(--text-mute)!important}

/* panel */
#panel{
  width:360px;flex:0 0 360px;
  background:var(--bg-2);border-left:1px solid var(--line);
  display:flex;flex-direction:column;min-height:0;
}
.panel-head{padding:10px 12px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px}
.filters{display:flex;flex-wrap:wrap;gap:6px}
.chip{
  display:inline-flex;align-items:center;gap:6px;
  padding:5px 8px;border:1px solid var(--line-2);
  color:var(--text-dim);font-size:11px;cursor:pointer;user-select:none;
  transition:border-color .15s,color .15s,background .15s;
}
.chip:hover{border-color:var(--text-dim);color:var(--text)}
.chip input{appearance:none;width:10px;height:10px;border:1px solid var(--line-2);background:transparent;margin:0;cursor:pointer;position:relative}
.chip input:checked{background:currentColor;border-color:currentColor}
.chip:has(input:checked){color:var(--text);background:var(--bg-3);border-color:var(--line-2)}
.chip .sw{width:14px;height:3px;display:inline-block}
.sw-event{background:var(--accent)}
.sw-construction{background:var(--accent-2)}
.sw-utility{background:var(--accent-3)}
.sw-sidewalk{background:var(--accent-4)}

#search{
  background:var(--bg);border:1px solid var(--line-2);color:var(--text);
  padding:8px 10px;font-family:inherit;font-size:12px;border-radius:0;outline:none;
}
#search:focus{border-color:var(--accent)}
#search::placeholder{color:var(--text-mute)}

.panel-body{flex:1;overflow-y:auto;min-height:0}
.panel-body::-webkit-scrollbar{width:8px}
.panel-body::-webkit-scrollbar-track{background:var(--bg-2)}
.panel-body::-webkit-scrollbar-thumb{background:var(--line-2)}

.status{padding:14px;color:var(--text-mute);font-size:12px}
.status.err{color:var(--accent)}

#list{list-style:none;margin:0;padding:0}
#list li{
  border-bottom:1px solid var(--line);
  padding:10px 12px;cursor:pointer;
  display:flex;gap:10px;align-items:flex-start;
  transition:background .1s;
}
#list li:hover{background:var(--bg-3)}
#list li.active{background:var(--bg-3);border-left:2px solid var(--accent);padding-left:10px}
#list .bar{width:3px;flex:0 0 3px;align-self:stretch;background:var(--accent)}
#list .bar.event{background:var(--accent)}
#list .bar.construction{background:var(--accent-2)}
#list .bar.utility{background:var(--accent-3)}
#list .bar.sidewalk{background:var(--accent-4)}
#list .info{flex:1;min-width:0}
#list .street{color:var(--text);font-weight:700;font-size:12.5px;text-transform:uppercase;letter-spacing:.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#list .cross{color:var(--text-dim);font-size:11px;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#list .meta{color:var(--text-mute);font-size:10.5px;margin-top:4px;display:flex;gap:8px;flex-wrap:wrap}
#list .tag{color:var(--text-dim);text-transform:uppercase;letter-spacing:.08em}
#list .tag.event{color:var(--accent)}
#list .tag.construction{color:var(--accent-2)}
#list .tag.utility{color:var(--accent-3)}
#list .tag.sidewalk{color:var(--accent-4)}

.panel-foot{padding:8px 12px;border-top:1px solid var(--line);color:var(--text-mute);font-size:10.5px;display:flex;gap:6px;align-items:center}

/* mobile */
@media (max-width: 820px){
  #topbar{gap:8px;padding:8px 10px;flex-wrap:wrap}
  .brand h1{font-size:14px}
  .brand p{font-size:10px}
  .stats{gap:10px;margin-left:0;order:3;width:100%;justify-content:space-between;border-top:1px solid var(--line);padding-top:6px}
  .stat .v{font-size:12px}
  #panel-toggle{display:inline-block;margin-left:auto}
  main{position:relative}
  #panel{
    position:absolute;inset:0;z-index:500;
    width:100%;flex-basis:auto;
    transform:translateY(100%);transition:transform .25s ease;
    border-left:none;border-top:1px solid var(--line);
  }
  #panel.open{transform:translateY(0)}
}
