
/* -------------------------------------------------------------------------
   CRITICAL LEAFLET CSS FALLBACK
   -------------------------------------------------------------------------
   This block intentionally duplicates the positioning rules Leaflet normally
   receives from leaflet.css. It protects the map when a browser/network blocks
   the Leaflet CSS CDN but allows Leaflet JS to run. Without these rules, tiles
   appear as an exploded mosaic and markers/popups may seem missing.
------------------------------------------------------------------------- */
.leaflet-pane,
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow,
.leaflet-tile-container,
.leaflet-pane > svg,
.leaflet-pane > canvas,
.leaflet-zoom-box,
.leaflet-image-layer,
.leaflet-layer{position:absolute;left:0;top:0}
.leaflet-container{overflow:hidden}
.leaflet-tile,
.leaflet-marker-icon,
.leaflet-marker-shadow{-webkit-user-select:none;-moz-user-select:none;user-select:none}
.leaflet-tile{filter:inherit;visibility:inherit;border:0}
.leaflet-tile-loaded{visibility:inherit}
.leaflet-zoom-box{width:0;height:0;box-sizing:border-box;z-index:800}
.leaflet-overlay-pane svg{-moz-user-select:none}
.leaflet-pane{z-index:400}
.leaflet-tile-pane{z-index:200}
.leaflet-overlay-pane{z-index:400}
.leaflet-shadow-pane{z-index:500}
.leaflet-marker-pane{z-index:600}
.leaflet-tooltip-pane{z-index:650}
.leaflet-popup-pane{z-index:1200}
.leaflet-map-pane canvas{z-index:100}
.leaflet-map-pane svg{z-index:200}
.leaflet-vml-shape{width:1px;height:1px}
.lvml{behavior:url(#default#VML);display:inline-block;position:absolute}
.leaflet-control{position:relative;z-index:800;pointer-events:visiblePainted;pointer-events:auto}
.leaflet-top,.leaflet-bottom{position:absolute;z-index:1000;pointer-events:none}
.leaflet-top{top:0}.leaflet-right{right:0}.leaflet-bottom{bottom:0}.leaflet-left{left:0}
.leaflet-control{float:left;clear:both}
.leaflet-right .leaflet-control{float:right}
.leaflet-top .leaflet-control{margin-top:10px}
.leaflet-bottom .leaflet-control{margin-bottom:10px}
.leaflet-left .leaflet-control{margin-left:10px}
.leaflet-right .leaflet-control{margin-right:10px}
.leaflet-fade-anim .leaflet-popup{opacity:0;transition:opacity .2s linear}
.leaflet-fade-anim .leaflet-map-pane .leaflet-popup{opacity:1}
.leaflet-zoom-animated{transform-origin:0 0}
.leaflet-zoom-anim .leaflet-zoom-animated{transition:transform .25s cubic-bezier(0,0,.25,1)}
.leaflet-zoom-anim .leaflet-tile,.leaflet-pan-anim .leaflet-tile{transition:none}
.leaflet-interactive{cursor:pointer}
.leaflet-grab{cursor:grab}
.leaflet-dragging .leaflet-grab{cursor:move;cursor:grabbing}
.leaflet-popup{position:absolute;text-align:center;margin-bottom:20px}
.leaflet-popup-content-wrapper{padding:1px;text-align:left}
.leaflet-popup-content{line-height:1.3;font-size:13px;min-height:1px}
.leaflet-popup-tip-container{width:40px;height:20px;position:absolute;left:50%;margin-top:-1px;margin-left:-20px;overflow:hidden;pointer-events:none}
.leaflet-popup-tip{width:17px;height:17px;padding:1px;margin:-10px auto 0;pointer-events:auto;transform:rotate(45deg)}
.leaflet-popup-close-button{position:absolute;top:0;right:0;border:none;text-align:center;width:24px;height:24px;font:16px/24px Tahoma,Verdana,sans-serif;color:#757575;text-decoration:none;background:transparent}
.leaflet-container a.leaflet-popup-close-button:hover{color:#585858}
.leaflet-tooltip{position:absolute;padding:6px;background-color:#fff;border:1px solid #fff;border-radius:3px;color:#222;white-space:nowrap;user-select:none;pointer-events:none;box-shadow:0 1px 3px rgba(0,0,0,.4)}
.leaflet-tooltip.leaflet-interactive{cursor:pointer;pointer-events:auto}
.leaflet-container .leaflet-marker-pane img,
.leaflet-container .leaflet-shadow-pane img,
.leaflet-container .leaflet-tile-pane img,
.leaflet-container img.leaflet-image-layer{max-width:none!important;max-height:none!important}
.leaflet-container.leaflet-touch-zoom{touch-action:pan-x pan-y}
.leaflet-container.leaflet-touch-drag{touch-action:none;touch-action:pinch-zoom}
.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom{touch-action:none}
.leaflet-container{tap-highlight-color:transparent;-webkit-tap-highlight-color:transparent}
.leaflet-marker-icon,.leaflet-marker-shadow{display:block}
.leaflet-div-icon{background:#fff;border:1px solid #666}


:root{
  --bg:#070708;
  --panel:#101014ee;
  --panel-strong:#15151bcc;
  --ink:#e9e4dd;
  --muted:#aaa3a2;
  --dim:#686569;
  --line:#37343e;
  --purple:#8b78a5;
  --blue:#6e7f9e;
  --shadow:0 18px 60px rgba(0,0,0,.55);
  --z-map:1;
  --z-map-overlay:410;
  --z-ui:700;
  --z-modal:1000;
}

*{box-sizing:border-box}
html,body{height:100%;margin:0;background:var(--bg);color:var(--ink);font-family:"IBM Plex Mono", monospace;overflow:hidden}
body::before{
  content:"";position:fixed;inset:0;z-index:0;pointer-events:none;
  background:
    radial-gradient(circle at 20% 20%, rgba(115,101,152,.12), transparent 24%),
    radial-gradient(circle at 82% 74%, rgba(91,112,145,.12), transparent 28%),
    linear-gradient(rgba(255,255,255,.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,.018) 1px, transparent 1px);
  background-size:auto, auto, 36px 36px, 36px 36px;
  mix-blend-mode:screen;
}
body::after{
  content:"";position:fixed;inset:0;pointer-events:none;z-index:2;
  background:radial-gradient(ellipse at center, transparent 30%, rgba(0,0,0,.64) 100%),
             repeating-linear-gradient(0deg, rgba(255,255,255,.025) 0, rgba(255,255,255,.025) 1px, transparent 1px, transparent 4px);
}

#map{position:fixed;inset:0;z-index:var(--z-map);background:#060607}
.leaflet-container{background:#060607;font-family:"IBM Plex Mono", monospace}
.leaflet-control-attribution{
  background:rgba(7,7,8,.72)!important;color:#8c8890!important;border-top-left-radius:8px;padding:3px 7px!important;font-size:10px;
}
.leaflet-control-attribution a{color:#b9b4c9!important}
.leaflet-control-zoom{display:none}

.loading{
  position:fixed;inset:0;display:grid;place-items:center;gap:12px;align-content:center;z-index:var(--z-modal);
  background:#070708;color:var(--ink);letter-spacing:.18em;text-transform:uppercase;font-size:12px;
}
.sigil-loader{font-size:46px;animation:pulse 1.2s infinite ease-in-out;color:var(--purple);text-shadow:0 0 24px rgba(139,120,165,.7)}
@keyframes pulse{0%,100%{transform:scale(.92);opacity:.5}50%{transform:scale(1.08);opacity:1}}

.map-header{
  position:fixed;top:18px;left:18px;right:18px;z-index:650;
  display:grid;grid-template-columns:minmax(290px, 1fr) minmax(340px, auto);gap:18px;align-items:start;
  pointer-events:none;
}
.title-block{
  pointer-events:auto;max-width:820px;padding:18px 20px 16px;border:1px solid rgba(160,154,171,.18);border-radius:18px;
  background:linear-gradient(135deg, rgba(13,13,17,.86), rgba(13,13,17,.48));box-shadow:var(--shadow);backdrop-filter:blur(10px);
}
.kicker{margin:0 0 6px;text-transform:uppercase;color:#9e97ae;font-size:11px;letter-spacing:.26em}
h1{
  margin:0;font-family:"Archivo Black","Arial Black",sans-serif;line-height:.91;font-size:clamp(28px,4.5vw,62px);
  letter-spacing:-.05em;text-transform:uppercase;
  text-shadow:0 0 1px #fff, 0 12px 35px rgba(0,0,0,.9);
}
.subtitle{margin:9px 0 0;max-width:620px;color:#bbb5b7;font-size:13px;line-height:1.35}

.controls-wrap{
  pointer-events:auto;justify-self:end;display:flex;gap:8px;align-items:flex-start;
  padding:8px;border:1px solid rgba(160,154,171,.16);border-radius:16px;background:rgba(12,12,15,.78);box-shadow:var(--shadow);backdrop-filter:blur(12px);
}
.search-shell{position:relative;width:min(380px,38vw)}
.search-shell i{position:absolute;left:12px;top:13px;color:#8f88a8;font-size:14px}
#bandSearch{
  width:100%;height:40px;border:1px solid #3b3744;border-radius:12px;background:#0c0c10;color:var(--ink);
  outline:none;padding:0 40px 0 36px;font-family:"IBM Plex Mono",monospace;font-size:13px;
}
#bandSearch:focus{border-color:#8879a7;box-shadow:0 0 0 3px rgba(136,121,167,.18)}
#clearSearch{position:absolute;right:7px;top:5px;width:30px;height:30px;border:0;border-radius:9px;background:transparent;color:#9d98a2;font-size:20px;cursor:pointer}
.suggestions{
  position:absolute;top:46px;left:0;right:0;max-height:270px;overflow:auto;background:#101015f5;border:1px solid #3a3542;border-radius:14px;
  display:none;box-shadow:var(--shadow);padding:6px;
}
.suggestion{padding:9px 10px;border-radius:10px;cursor:pointer;color:#ddd7d7;font-size:12px}
.suggestion:hover,.suggestion.active{background:linear-gradient(90deg,rgba(139,120,165,.26),rgba(110,127,158,.16))}
.suggestion small{display:block;color:#8f8992;margin-top:2px}

.ghost-btn{
  height:40px;border:1px solid #3b3744;border-radius:12px;background:#0c0c10;color:#c8c2c6;
  display:flex;align-items:center;gap:8px;padding:0 12px;font-family:"IBM Plex Mono",monospace;cursor:pointer;
}
.ghost-btn:hover{border-color:#7d728f;color:#fff}
.genre-panel{
  position:fixed;top:90px;right:18px;z-index:var(--z-ui);width:305px;max-width:calc(100vw - 36px);
  background:rgba(13,13,18,.92);border:1px solid rgba(158,151,174,.22);border-radius:18px;box-shadow:var(--shadow);backdrop-filter:blur(14px);
  padding:14px;
}
.panel-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;text-transform:uppercase;letter-spacing:.14em;font-size:11px;color:#c4becb}
.panel-head button,.filter-actions button{
  border:1px solid #3d3846;background:#0b0b0f;color:#bdb7c4;border-radius:10px;padding:5px 8px;cursor:pointer;font-family:"IBM Plex Mono",monospace;
}
.genre-checks{display:grid;gap:7px}
.genre-check{display:flex;align-items:center;gap:9px;font-size:12px;color:#cac5ca}
.genre-check input{accent-color:#8b78a5}
.swatch{width:15px;height:15px;border-radius:50%;display:inline-block;border:1px solid rgba(255,255,255,.28);box-shadow:0 0 12px currentColor}
.filter-actions{display:flex;gap:8px;margin-top:12px}

.legend{
  position:fixed;right:18px;bottom:22px;z-index:var(--z-ui);width:260px;color:#c8c2c8;
  background:rgba(13,13,17,.80);border:1px solid rgba(160,154,171,.18);border-radius:18px;box-shadow:var(--shadow);backdrop-filter:blur(12px);overflow:hidden;
}
.legend-toggle{
  width:100%;background:#0c0c10;border:0;border-bottom:1px solid #302d36;color:#bcb5c5;text-transform:uppercase;letter-spacing:.18em;
  font-family:"IBM Plex Mono",monospace;padding:10px 12px;cursor:pointer;text-align:left;
}
.legend-body{padding:13px}
.legend-title{font-size:11px;text-transform:uppercase;letter-spacing:.18em;color:#928ca1;margin-bottom:9px}
.legend-item{display:flex;align-items:center;gap:8px;margin:7px 0;font-size:11px}
.legend-note{font-size:10px;color:#858088;line-height:1.35;margin:11px 0 0}
.legend.collapsed .legend-body{display:none}

.about-btn{
  position:fixed;left:18px;bottom:22px;z-index:var(--z-ui);border:1px solid rgba(160,154,171,.18);border-radius:999px;
  background:rgba(13,13,17,.78);color:#bdb7c5;padding:9px 12px;font-family:"IBM Plex Mono",monospace;font-size:12px;cursor:pointer;box-shadow:var(--shadow);
}
.about-btn:hover{color:#fff;border-color:#807590}
.about-btn span{margin-left:6px}

.goth-div-icon{background:transparent;border:0}
.goth-marker{position:relative;width:30px;height:30px;transform:translate(-15px,-15px);filter:drop-shadow(0 7px 12px rgba(0,0,0,.82));}
.goth-marker svg{width:30px;height:30px;overflow:visible}
.goth-marker .halo{fill:rgba(0,0,0,.65);stroke:rgba(255,255,255,.16);stroke-width:1}
.goth-marker .body{fill:var(--symbol-fill);stroke:#0b0b0d;stroke-width:1.3}
.goth-marker .shine{stroke:rgba(255,255,255,.42);stroke-width:.9;fill:none}
.goth-marker.selected{animation:selected-pulse 1.4s infinite ease-in-out;z-index:600!important}
.goth-marker.selected .body{fill:#8b78a5;stroke:#c6c1df;stroke-width:1.6}
.goth-marker.selected .halo{fill:rgba(110,127,158,.25);stroke:#9a8cc3;stroke-width:2}
@keyframes selected-pulse{0%,100%{filter:drop-shadow(0 0 12px rgba(139,120,165,.72)) drop-shadow(0 9px 15px rgba(0,0,0,.9));transform:translate(-15px,-15px) scale(1)}50%{filter:drop-shadow(0 0 25px rgba(110,127,158,.86)) drop-shadow(0 9px 15px rgba(0,0,0,.9));transform:translate(-15px,-15px) scale(1.18)}}

.marker-cluster-small,.marker-cluster-medium,.marker-cluster-large{background:rgba(22,22,28,.42)}
.marker-cluster div{
  background:linear-gradient(135deg,rgba(125,119,140,.92),rgba(72,75,89,.92));color:#f0edf2;border:1px solid #c7c0d0;
  font-family:"Archivo Black",sans-serif;text-shadow:0 1px 5px #000;
}

.leaflet-popup{margin-bottom:20px}
.leaflet-popup-content-wrapper{
  background:rgba(13,13,17,.96);color:#e7e1e5;border:1px solid #55505e;border-radius:16px;
  box-shadow:0 18px 52px rgba(0,0,0,.75);backdrop-filter:blur(12px);
}
.leaflet-popup-tip-container{display:none}
.leaflet-popup-content{margin:0;width:330px!important;max-width:calc(100vw - 52px);font-family:"IBM Plex Mono",monospace;}
.popup-card{padding:16px}
.popup-rank{font-family:"UnifrakturMaguntia",serif;color:#a89bc5;font-size:22px;margin:0 0 2px;text-shadow:0 0 12px rgba(139,120,165,.45)}
.popup-title{font-family:"Archivo Black",sans-serif;font-size:24px;text-transform:uppercase;letter-spacing:-.035em;line-height:.95;margin:0 0 8px}
.popup-meta{color:#aaa4ad;font-size:11px;margin-bottom:9px;line-height:1.4}
.popup-genre{display:inline-block;border:1px solid #504b58;border-radius:999px;padding:4px 8px;margin:0 0 9px;color:#ddd6e2;background:#111117;font-size:10px}
.popup-bio{font-size:12px;line-height:1.45;color:#d2ccd0;margin:0 0 10px}
.popup-members{border-top:1px solid #332f38;padding-top:9px;color:#aaa4aa;font-size:10px;line-height:1.35;max-height:92px;overflow:auto}
.popup-links{display:flex;gap:8px;margin-top:12px}
.popup-links a{flex:1;text-align:center;border:1px solid #413b4e;border-radius:10px;padding:8px 6px;text-decoration:none;color:#ddd7e4;background:#0b0b0f;font-size:11px}
.popup-links a:hover{border-color:#8879a7;background:#15131c}
.leaflet-popup-close-button{color:#c1bac8!important;font-size:22px!important;padding:8px 10px 0 0!important}


/* Fail-safe: keep the About/source modal closed even if JavaScript or a CDN fails before the app initializes. */
.modal-overlay[hidden],
.genre-panel[hidden],
.suggestions[hidden]{
  display:none !important;
}

.modal-overlay{
  position:fixed;inset:0;z-index:var(--z-modal);background:rgba(0,0,0,.66);display:grid;place-items:center;padding:24px;
}
.about-modal{
  width:min(760px,94vw);max-height:86vh;overflow:auto;background:#101015;color:#ddd7df;border:1px solid #5d5667;border-radius:20px;
  box-shadow:0 30px 90px rgba(0,0,0,.8);padding:22px;position:relative;
}
.about-modal h2{font-family:"Archivo Black",sans-serif;text-transform:uppercase;letter-spacing:-.035em;margin:0 0 12px;font-size:32px}
.about-modal h3{margin:20px 0 8px;font-size:13px;text-transform:uppercase;letter-spacing:.16em;color:#afa6c2}
.about-modal p,.about-modal li{font-size:12px;line-height:1.55;color:#c9c3cc}
.about-modal a{color:#b8acd9}
.modal-close{position:absolute;right:14px;top:12px;border:0;background:transparent;color:#d4ced9;font-size:28px;cursor:pointer}
.download-row{display:flex;flex-wrap:wrap;gap:10px}
.download-row a{border:1px solid #4b4554;border-radius:12px;padding:9px 11px;text-decoration:none;background:#0b0b0f}
.source-list{max-height:220px;overflow:auto;border:1px solid #35313b;border-radius:12px;background:#0b0b0f;padding:8px}
.source-item{border-bottom:1px solid #292631;padding:8px 4px;font-size:11px;color:#bbb5bf}
.source-item:last-child{border-bottom:0}
.made-with{border-top:1px solid #332f38;padding-top:12px;margin-top:18px;color:#8f8993!important}

@media(max-width:900px){
  .map-header{grid-template-columns:1fr;gap:10px}
  .controls-wrap{justify-self:stretch;flex-wrap:wrap}
  .search-shell{width:100%;flex-basis:100%}
  h1{font-size:34px}
  .subtitle{display:none}
  .legend{width:225px}
}
@media(max-width:620px){
  .map-header{top:10px;left:10px;right:10px}
  .title-block{padding:13px 14px}
  .kicker{font-size:9px}
  .ghost-btn span{display:none}
  .legend{display:none}
}


/* UX patch: keep band popups visually above the title/controls and offset them right of the point. */
.leaflet-popup-pane{z-index:1200!important;pointer-events:auto}
.leaflet-popup.goth-popup{margin-left:0;margin-bottom:0}
.leaflet-popup.goth-popup .leaflet-popup-content-wrapper{position:relative}
