:root{
  --cyan:#00FFF2; --cyan-2:#0bb5ad; --cyan-soft:rgba(0,255,242,.45); --cyan-line:rgba(0,255,242,.22); --cyan-faint:rgba(0,255,242,.08);
  --bg:#060913; --bg-2:#080d1a; --card:linear-gradient(150deg,#0f1525 0%,#0b1020 100%); --panel:#0b111f;
  --glass:rgba(255,255,255,.05); --white:#fff; --t-1:#c5cce0; --t-2:#9ba3bc; --t-3:#7c849e; --line-2:#1e2a40;
  --gold:#f5c842; --green:#34d399; --red:#ff5d6c; --violet:#b98bff; --blue:#5aa9ff;
  --mono:'JetBrains Mono',monospace; --font:'DM Sans',system-ui,sans-serif;
  --sup:#00FFF2; --bjj:#b98bff; --spa:#ff8fe0; --gym:#f5c842;   /* category colors */
  --glow:0 0 22px rgba(0,255,242,.45);
  --surface:rgba(13,19,33,.92); --surface-2:rgba(13,19,33,.96);
  --topbar-bg:linear-gradient(#060913f2,#060913bf 55%,transparent); --map-bg:#0a0f1c;
  --safe-t:env(safe-area-inset-top,0px); --safe-b:env(safe-area-inset-bottom,0px);
}
html[data-theme="light"]{
  --cyan:#06b6ac; --cyan-soft:rgba(6,182,172,.5); --cyan-line:rgba(6,182,172,.3); --cyan-faint:rgba(6,182,172,.1);
  --bg:#eaeff6; --bg-2:#dde5ef; --card:linear-gradient(150deg,#ffffff,#f1f5fa); --panel:#ffffff;
  --glass:rgba(13,25,48,.05); --white:#0c1524; --t-1:#2c3547; --t-2:#586279; --t-3:#8792a6; --line-2:#d9e1ec;
  --surface:rgba(255,255,255,.94); --surface-2:rgba(255,255,255,.97);
  --topbar-bg:linear-gradient(#eaeff6f2,#eaeff6bf 55%,transparent); --map-bg:#e8edf3;
  --glow:0 0 16px rgba(6,182,172,.28);
}
html[data-theme="light"] .leaflet-bar a{background:#ffffff!important;color:#2c3547!important;border-color:#d9e1ec!important;}
html[data-theme="light"] .leaflet-bar a:hover{background:#eef3f8!important;color:var(--cyan)!important;}
html[data-theme="light"] .leaflet-control-attribution{background:rgba(255,255,255,.82)!important;color:#7a869c!important;}
html[data-theme="light"] .leaflet-control-attribution a{color:#5a6478!important;}
html[data-theme="light"] .gate{background:radial-gradient(120% 90% at 50% -10%,#dbe8f5 0%,#eaeff6 60%);}
html[data-theme="light"] .oauth{border:1px solid var(--line-2);}
html[data-theme="light"] .pin .dot{border-color:rgba(255,255,255,.95);box-shadow:0 3px 8px rgba(20,40,70,.35);}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;height:100%;background:var(--bg);color:var(--white);font-family:var(--font);overflow:hidden;-webkit-font-smoothing:antialiased;}
#app{position:fixed;inset:0;}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit;}
a{color:var(--cyan);text-decoration:none;}
.hide{display:none!important;}

/* ---------- map ---------- */
#map{position:absolute;inset:0;background:var(--map-bg);z-index:1;}
.leaflet-container{background:var(--map-bg);font-family:var(--font);}
.leaflet-control-attribution{background:rgba(6,9,19,.7)!important;color:#6b7690!important;font-size:9px!important;}
.leaflet-control-attribution a{color:#8a95b0!important;}
.leaflet-bar{border:none!important;box-shadow:0 6px 20px rgba(0,0,0,.5)!important;}
.leaflet-bar a{background:#0f1626!important;color:#cfe!important;border-color:#1e2a40!important;}
.leaflet-bar a:hover{background:#16203a!important;color:var(--cyan)!important;}
.leaflet-popup-content-wrapper,.leaflet-popup-tip{display:none;}

/* pin markers */
.pin{width:30px;height:30px;position:relative;transform:translate(-50%,-100%);}
.pin .dot{width:26px;height:26px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);border:2px solid rgba(255,255,255,.85);
  box-shadow:0 3px 8px rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;}
.pin .ic{transform:rotate(45deg);font-size:12px;line-height:1;}
.pin.sel .dot{box-shadow:0 0 0 3px var(--cyan),0 0 18px var(--cyan);}
.pin .ring{position:absolute;top:-4px;right:-4px;width:13px;height:13px;border-radius:50%;border:2px solid #060913;}

/* ---------- top bar ---------- */
.topbar{position:absolute;top:0;left:0;right:0;z-index:20;padding:calc(8px + var(--safe-t)) 10px 8px;
  background:var(--topbar-bg);pointer-events:none;}
.topbar>*{pointer-events:auto;}
.tb-row{display:flex;align-items:center;gap:8px;}
.brand{display:flex;align-items:center;gap:8px;flex:none;}
.brand img{height:22px;}
.brand b{font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--cyan);white-space:nowrap;}
.srch{flex:1;display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;padding:9px 12px;min-width:0;}
.srch svg{width:16px;height:16px;stroke:var(--t-3);fill:none;stroke-width:2;flex:none;}
.srch input{flex:1;background:none;border:none;color:#fff;font:inherit;font-size:14px;outline:none;min-width:0;}
.acct{width:38px;height:38px;flex:none;border-radius:50%;background:linear-gradient(135deg,var(--cyan),var(--violet));display:grid;place-items:center;color:#04121a;font-weight:800;font-size:13px;}
.chips{display:flex;gap:6px;overflow-x:auto;padding:9px 1px 2px;scrollbar-width:none;}
.chips::-webkit-scrollbar{display:none;}
.chip{flex:none;display:flex;align-items:center;gap:5px;font-size:12px;font-weight:700;color:var(--t-2);
  background:var(--surface);border:1px solid var(--line-2);border-radius:999px;padding:6px 11px;white-space:nowrap;}
.chip .cdot{width:8px;height:8px;border-radius:50%;}
.chip.on{color:#04121a;background:var(--cyan);border-color:var(--cyan);}
.chip.on .cdot{outline:1px solid rgba(0,0,0,.25);}

/* ---------- floating buttons ---------- */
.fabs{position:absolute;right:12px;bottom:calc(20px + var(--safe-b));z-index:15;display:flex;flex-direction:column;gap:10px;}
.fab{width:48px;height:48px;border-radius:14px;background:var(--surface-2);border:1px solid var(--line-2);
  display:grid;place-items:center;box-shadow:0 8px 22px rgba(0,0,0,.35);position:relative;}
.fab svg{width:22px;height:22px;stroke:var(--cyan);fill:none;stroke-width:2;}
.fab.primary{background:var(--cyan);}.fab.primary svg{stroke:#04121a;}
.fab .badge{position:absolute;top:-6px;right:-6px;min-width:20px;height:20px;padding:0 5px;border-radius:999px;background:var(--violet);color:#fff;font-size:11px;font-weight:800;display:grid;place-items:center;}
.count-pill{position:absolute;left:12px;bottom:calc(74px + var(--safe-b));z-index:15;background:var(--surface-2);border:1px solid var(--line-2);border-radius:999px;padding:8px 14px;font-size:12.5px;font-weight:700;color:var(--t-1);box-shadow:0 8px 22px rgba(0,0,0,.35);}
.count-pill b{color:var(--cyan);}

/* ---------- sheet (detail + list + info) ---------- */
.sheet{position:absolute;left:0;right:0;bottom:0;z-index:30;background:var(--panel);border-top:1px solid var(--cyan-line);
  border-radius:20px 20px 0 0;box-shadow:0 -18px 50px rgba(0,0,0,.6);transform:translateY(105%);transition:transform .28s cubic-bezier(.22,1,.36,1);
  max-height:86vh;display:flex;flex-direction:column;padding-bottom:var(--safe-b);}
.sheet.show{transform:translateY(0);}
.sheet .grip{width:40px;height:4px;border-radius:99px;background:#2a3752;margin:8px auto 2px;flex:none;}
.sheet .sc{overflow-y:auto;padding:6px 18px 22px;-webkit-overflow-scrolling:touch;}
.sheet-x{position:absolute;top:10px;right:12px;width:32px;height:32px;border-radius:50%;background:var(--glass);border:1px solid var(--line-2);color:var(--t-2);font-size:18px;display:grid;place-items:center;z-index:2;}
@media(min-width:760px){
  .sheet{left:auto;right:14px;bottom:14px;top:118px;width:420px;border-radius:18px;border:1px solid var(--cyan-line);transform:translateX(130%);max-height:none;}
  .sheet.show{transform:translateX(0);}
  .sheet .grip{display:none;}
}

/* ---------- detail ---------- */
.d-cat{display:inline-flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:4px 10px;border-radius:999px;}
.d-name{font-size:22px;font-weight:900;line-height:1.15;margin:8px 0 4px;padding-right:30px;}
.d-addr{font-size:13.5px;color:var(--t-2);line-height:1.5;}
.d-meta{font-size:13px;color:var(--t-1);margin-top:8px;line-height:1.6;}
.d-meta b{color:#fff;}
.actions{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin:14px 0 6px;}
.act{display:flex;flex-direction:column;align-items:center;gap:5px;background:var(--glass);border:1px solid var(--line-2);border-radius:14px;padding:11px 6px;font-size:12px;font-weight:700;color:var(--t-1);}
.act svg{width:20px;height:20px;stroke:var(--cyan);fill:none;stroke-width:2;}
.act:active{background:var(--cyan-faint);border-color:var(--cyan-line);}
.sec-t{font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--t-3);margin:18px 0 8px;}
.status-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;}
.st{padding:9px 6px;border-radius:11px;border:1.5px solid var(--line-2);background:var(--glass);font-size:12.5px;font-weight:800;color:var(--t-2);display:flex;align-items:center;justify-content:center;gap:5px;}
.st .sd{width:9px;height:9px;border-radius:50%;}
.st.on{color:#fff;border-color:currentColor;}
.field{margin-top:12px;}
.field label{display:block;font-size:12px;font-weight:700;color:var(--t-2);margin-bottom:5px;}
.field input,.field select,.field textarea{width:100%;background:var(--glass);border:1px solid var(--line-2);border-radius:11px;color:#fff;font:inherit;font-size:14px;padding:11px 12px;outline:none;}
.field textarea{min-height:74px;resize:vertical;}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.toggle{display:flex;align-items:center;justify-content:space-between;background:var(--glass);border:1px solid var(--line-2);border-radius:11px;padding:11px 13px;margin-top:12px;font-size:13.5px;font-weight:700;}
.tg{width:44px;height:26px;border-radius:99px;background:#26324a;position:relative;transition:background .18s;flex:none;}
.tg::after{content:'';position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#fff;transition:transform .18s;}
.tg.on{background:var(--green);}.tg.on::after{transform:translateX(18px);}
.btn{display:block;width:100%;text-align:center;border-radius:13px;padding:13px;font-weight:800;font-size:15px;}
.btn.primary{background:var(--cyan);color:#04121a;box-shadow:var(--glow);margin-top:16px;}
.btn.ghost{background:var(--glass);border:1px solid var(--line-2);color:var(--t-1);}
.saved-note{font-size:11.5px;color:var(--t-3);text-align:center;margin-top:8px;}

/* ---------- list ---------- */
.list-row{display:flex;align-items:center;gap:11px;padding:12px 4px;border-bottom:1px solid var(--line-2);}
.list-row .lr-ic{width:34px;height:34px;flex:none;border-radius:10px;display:grid;place-items:center;font-size:15px;}
.list-row .lr-main{flex:1;min-width:0;}
.list-row .lr-nm{font-weight:800;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.list-row .lr-sub{font-size:12px;color:var(--t-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px;}
.list-row .lr-st{flex:none;width:11px;height:11px;border-radius:50%;}
.sheet-hd{display:flex;align-items:center;justify-content:space-between;padding:2px 2px 10px;}
.sheet-hd h2{font-size:19px;font-weight:900;margin:0;}
.seg{display:flex;width:max-content;max-width:100%;gap:3px;background:var(--glass);border:1px solid var(--line-2);border-radius:999px;padding:3px;margin-bottom:6px;overflow-x:auto;scrollbar-width:none;}
.seg::-webkit-scrollbar{display:none;}
.seg button{flex:none;white-space:nowrap;font-size:12px;font-weight:800;color:var(--t-2);padding:6px 12px;border-radius:999px;}
.seg button.on{background:var(--cyan);color:#04121a;}

/* ---------- info / pitch ---------- */
.info-block{background:var(--card);border:1px solid var(--line-2);border-radius:16px;padding:16px 17px;margin-bottom:12px;}
.info-block h3{margin:0 0 8px;font-size:15px;color:var(--cyan);font-weight:800;}
.info-block p{font-size:13.5px;color:var(--t-1);line-height:1.6;margin:0 0 8px;}
.info-block ol,.info-block ul{margin:6px 0;padding-left:18px;font-size:13.5px;color:var(--t-1);line-height:1.7;}
.pitch-q{background:var(--glass);border-left:3px solid var(--cyan);border-radius:0 10px 10px 0;padding:9px 13px;margin:7px 0;font-size:13.5px;color:#fff;font-weight:600;}
.pdf-row{display:flex;align-items:center;gap:11px;background:var(--glass);border:1px solid var(--line-2);border-radius:13px;padding:13px 15px;margin-bottom:9px;}
.pdf-row svg{width:24px;height:24px;stroke:var(--cyan);fill:none;stroke-width:1.8;flex:none;}
.pdf-row .pr-main{flex:1;}
.pdf-row b{display:block;font-size:14px;}
.pdf-row span{font-size:12px;color:var(--t-3);}
.pdf-row .go{font-size:12px;font-weight:800;color:var(--cyan);}

/* ---------- login gate ---------- */
.gate{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:24px;overflow-y:auto;
  background:radial-gradient(120% 90% at 50% -10%,#0d2036 0%,#060913 60%);}
.gate-card{width:100%;max-width:400px;background:var(--card);border:1px solid var(--cyan-line);border-radius:22px;padding:28px 24px;text-align:center;box-shadow:0 30px 80px rgba(0,0,0,.6);}
.gate-card img{height:30px;margin-bottom:14px;}
.gate-card .eyebrow{font-size:11px;font-weight:800;letter-spacing:.24em;text-transform:uppercase;color:var(--cyan);}
.gate-card h1{font-size:22px;font-weight:900;margin:6px 0 4px;}
.gate-card .sub{font-size:13px;color:var(--t-3);margin-bottom:18px;line-height:1.5;}
.gate-card input{width:100%;background:var(--glass);border:1px solid var(--line-2);border-radius:12px;color:#fff;font:inherit;font-size:16px;padding:13px 14px;margin-bottom:10px;outline:none;}
.oauth{width:100%;display:flex;align-items:center;justify-content:center;gap:9px;background:#fff;color:#1a1a1a;font-weight:800;font-size:15px;border-radius:12px;padding:13px;margin-bottom:12px;}
.divider{display:flex;align-items:center;gap:10px;color:var(--t-3);font-size:12px;margin:6px 0 12px;}
.divider::before,.divider::after{content:'';flex:1;height:1px;background:var(--line-2);}
.gate-err{background:rgba(255,93,108,.1);border:1px solid rgba(255,93,108,.4);color:#ffb4bc;border-radius:11px;padding:10px 13px;font-size:13px;margin-bottom:11px;text-align:left;}
.gate-cta{display:block;width:100%;margin-top:8px;padding:9px;border-radius:10px;background:var(--cyan);color:#04121a;font-weight:800;font-size:13.5px;}
.gate-link{color:var(--cyan);font-weight:700;cursor:pointer;}
.pending-ic{width:56px;height:56px;border-radius:50%;background:var(--cyan-faint);border:1px solid var(--cyan-line);display:grid;place-items:center;margin:0 auto 14px;}
.pending-ic svg{width:28px;height:28px;stroke:var(--cyan);fill:none;stroke-width:2;}

/* ---------- toast + misc ---------- */
.toast{position:fixed;left:50%;bottom:calc(30px + var(--safe-b));transform:translateX(-50%);z-index:200;background:var(--cyan);color:#04121a;font-weight:800;font-size:13px;padding:11px 20px;border-radius:999px;box-shadow:var(--glow);opacity:0;transition:opacity .2s;pointer-events:none;}
.toast.show{opacity:1;}
.spin{width:34px;height:34px;border:3px solid var(--line-2);border-top-color:var(--cyan);border-radius:50%;animation:spin 1s linear infinite;margin:40px auto;}
@keyframes spin{to{transform:rotate(360deg);}}
.ovl{position:fixed;inset:0;z-index:29;background:rgba(3,6,14,.5);opacity:0;pointer-events:none;transition:opacity .2s;}
.ovl.show{opacity:1;pointer-events:auto;}
