/**
 * Nearside home — ONE job only.
 * “Find businesses near you that match who you sell to.”
 * Map is the product. Search is the only action.
 */

:root {
  --ns-ink: #1c1917;
  --ns-stone: #57534e;
  --ns-line: #e7e5e4;
  --ns-clay: #c2410c;
  --ns-clay-deep: #9a3412;
  --ns-moss: #3f6212;
  --ns-moss-soft: #ecfccb;
  --ns-card: #ffffff;
  --ns-map-bg: #e2e8e0; /* soft map green while tiles load — never black */
  --ns-shadow: 0 8px 32px rgba(28, 25, 23, 0.14), 0 2px 8px rgba(28, 25, 23, 0.08);
  --ns-font: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

  --bg: var(--ns-map-bg);
  --card: var(--ns-card);
  --text: var(--ns-ink);
  --muted: var(--ns-stone);
  --accent: var(--ns-clay);
  --ok: var(--ns-moss);
  --border: var(--ns-line);
  font-family: var(--ns-font);
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  min-height: 100%;
  height: 100%;
  background: var(--ns-map-bg) !important;
  color: var(--ns-ink);
  font-family: var(--ns-font);
  font-size: 16px;
  line-height: 1.4;
  -webkit-font-smoothing: antialiased;
}

.sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* Map always visible */
.map-stage {
  position: fixed !important;
  inset: 0 !important;
  z-index: 0 !important;
  background: var(--ns-map-bg) !important;
}
.map-canvas,
.map-canvas-world {
  width: 100% !important;
  height: 100% !important;
  min-height: 100vh !important;
  min-height: 100dvh !important;
  background: var(--ns-map-bg) !important;
}
.leaflet-container {
  background: var(--ns-map-bg) !important;
  font: inherit !important;
}
.leaflet-control-attribution {
  font-size: 10px !important;
  background: rgba(255, 255, 255, 0.9) !important;
  color: var(--ns-stone) !important;
}
.leaflet-control-zoom a {
  background: #fff !important;
  color: var(--ns-ink) !important;
  border-color: var(--ns-line) !important;
}

/* Quiet scan FX */
.t-vision { opacity: 0.35; }
.t-scan-bar {
  background: linear-gradient(180deg, transparent, rgba(194, 65, 12, 0.12), transparent) !important;
  height: 2px !important;
  box-shadow: none !important;
}
.t-radar, .t-reticle { opacity: 0.15 !important; }

/* Landing shell — NO heavy dark wash */
.landing-ui {
  position: fixed;
  inset: 0;
  z-index: 20;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  pointer-events: none;
  background: transparent !important; /* map fully visible */
}
/* Keep search dock on the map floor by default */
.landing-ui.landing-simple {
  justify-content: space-between;
}
.landing-ui.landing-simple .prompt-dock {
  margin-top: auto;
}
.landing-ui > * { pointer-events: auto; }

.landing-top {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.75rem 1rem;
  background: transparent !important;
}

.landing-top .brand-mark,
.brand-mark {
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  margin: 0 !important;
  flex: 1;
  min-width: 0;
  font-weight: 700;
  font-size: 0.95rem;
  letter-spacing: -0.02em;
  text-transform: none !important;
  color: var(--ns-ink) !important;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
}

.brand-dot {
  width: 0.65rem;
  height: 0.65rem;
  border-radius: 50%;
  background: var(--ns-clay);
  flex-shrink: 0;
}

.landing-loc {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  font-size: 0.75rem;
  font-weight: 500;
  color: var(--ns-stone);
  background: rgba(255, 255, 255, 0.95);
  border: 1px solid var(--ns-line);
  border-radius: 999px;
  padding: 0.35rem 0.7rem;
  max-width: 40vw;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);
}
.loc-dot {
  width: 0.4rem;
  height: 0.4rem;
  border-radius: 50%;
  background: var(--ns-moss);
  flex-shrink: 0;
}

.free-quota-chip {
  display: none;
  align-items: center;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--ns-moss);
  background: var(--ns-moss-soft);
  border: 0;
  border-radius: 999px;
  padding: 0.35rem 0.65rem;
  cursor: pointer;
}
.free-quota-chip:not([hidden]) { display: inline-flex; }

button.ghost.small,
.landing-signin,
#btnLandingTokens {
  background: rgba(255, 255, 255, 0.95) !important;
  border: 1px solid var(--ns-line) !important;
  color: var(--ns-ink) !important;
  border-radius: 999px !important;
  padding: 0.4rem 0.85rem !important;
  font-weight: 600 !important;
  font-size: 0.8rem !important;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);
}
#btnLandingTokens[hidden],
#btnLandingMenu[hidden],
#landingAccount[hidden] { display: none !important; }

.landing-account {
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--ns-stone);
  background: rgba(255, 255, 255, 0.95);
  border: 1px solid var(--ns-line);
  border-radius: 999px;
  padding: 0.35rem 0.7rem;
  max-width: 7rem;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ── Map-first dock (bottom) — no center box ── */
.prompt-dock {
  width: min(560px, calc(100% - 1.5rem));
  margin: 0 auto 1.25rem; /* never vertical-center the search */
  margin-top: auto; /* pin to bottom of landing flex column */
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 0.45rem;
  flex: 0 0 auto;
  z-index: 30;
}

.home-modes {
  display: flex;
  justify-content: center;
  gap: 0.35rem;
}
.home-mode {
  display: inline-flex;
  align-items: center;
  padding: 0.35rem 0.85rem;
  border-radius: 999px;
  border: 1px solid var(--ns-line);
  background: rgba(255, 255, 255, 0.95);
  color: var(--ns-ink);
  cursor: pointer;
  font: inherit;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);
  transition: border-color 0.15s, background 0.15s;
}
.home-mode:hover { background: #fff; }
.home-mode.is-active {
  border-color: var(--ns-clay);
  background: #fff7ed;
  box-shadow: 0 0 0 1px var(--ns-clay);
}
.hm-label {
  font-size: 0.8rem;
  font-weight: 700;
}
.hm-desc { display: none; }

.home-tier-note {
  margin: 0;
  font-size: 0.68rem;
  color: var(--ns-stone);
  text-align: center;
  line-height: 1.3;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8);
}

.prompt-bar {
  display: flex;
  align-items: center;
  gap: 0.15rem;
  padding: 0.35rem 0.35rem 0.35rem 0.7rem;
  border-radius: 999px;
  background: #fff !important;
  border: 1px solid rgba(28, 25, 23, 0.1) !important;
  box-shadow: var(--ns-shadow) !important;
}
.prompt-bar:focus-within {
  background: #fff !important;
  border-color: var(--ns-clay) !important;
  box-shadow: 0 0 0 3px rgba(194, 65, 12, 0.15), var(--ns-shadow) !important;
}
.prompt-bar input {
  flex: 1;
  border: 0 !important;
  background: transparent !important;
  color: var(--ns-ink) !important;
  font-family: var(--ns-font);
  font-size: 1rem !important;
  font-weight: 500;
  padding: 0.7rem 0.4rem !important;
  margin: 0 !important;
  outline: none;
  box-shadow: none !important;
  min-width: 0;
}
.prompt-bar input::placeholder {
  color: #a8a29e !important;
  font-weight: 400;
}

.prompt-mic {
  width: 2.35rem;
  height: 2.35rem;
  border-radius: 999px;
  background: transparent;
  color: #a8a29e;
  border: 0;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.prompt-mic:hover { color: var(--ns-ink); background: #e7e5e4; }
.prompt-mic.listening {
  color: #fff;
  background: var(--ns-clay);
}

.prompt-go {
  height: 2.5rem;
  min-width: 3.4rem;
  padding: 0 1.1rem;
  border-radius: 999px !important;
  border: 0;
  background: var(--ns-clay) !important;
  color: #fff !important;
  font-weight: 700;
  font-size: 0.9rem;
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  flex-shrink: 0;
  position: relative;
}
.prompt-go:hover { background: var(--ns-clay-deep) !important; }
.prompt-go:disabled { opacity: 0.7; cursor: wait; }
.prompt-go.is-running {
  background: var(--ns-clay-deep) !important;
  cursor: wait;
}
.prompt-go.is-running .prompt-go-label {
  opacity: 0;
  width: 0;
  overflow: hidden;
}
.prompt-go-spin {
  display: none;
  width: 1rem;
  height: 1rem;
  border: 2px solid rgba(255, 255, 255, 0.35);
  border-top-color: #fff;
  border-radius: 50%;
  animation: ns-spin 0.7s linear infinite;
}
.prompt-go.is-running .prompt-go-spin {
  display: block;
}
@keyframes ns-spin {
  to { transform: rotate(360deg); }
}

.foot-chips {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.35rem;
  margin-top: 0;
}
.foot-chips .chip,
.chip {
  font-size: 0.75rem !important;
  font-weight: 500;
  padding: 0.35rem 0.7rem !important;
  border-radius: 999px !important;
  background: rgba(255, 255, 255, 0.95) !important;
  border: 1px solid var(--ns-line) !important;
  color: var(--ns-ink) !important;
  cursor: pointer;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06) !important;
}
.foot-chips .chip:hover,
.chip:hover {
  border-color: var(--ns-clay) !important;
  color: var(--ns-clay-deep) !important;
  background: #fff7ed !important;
}

.prompt-status {
  text-align: center;
  min-height: 1.25em;
  margin: 0.5rem 0 0;
  font-size: 0.84rem;
  color: var(--ns-stone);
  font-weight: 500;
  transition: color 0.15s ease, opacity 0.15s ease;
}
.prompt-status.error { color: #b91c1c; }
.prompt-status.ok { color: var(--ns-moss); }
.prompt-status.is-live {
  color: var(--ns-clay-deep);
  font-weight: 600;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
  width: 100%;
}
.prompt-status.is-live::before {
  content: "";
  width: 0.45rem;
  height: 0.45rem;
  border-radius: 50%;
  background: var(--ns-clay);
  animation: ns-pulse 1.1s ease-in-out infinite;
  flex-shrink: 0;
}

/* Full-width running banner under dock — always visible while searching */
.search-running-bar {
  display: none;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  margin: 0.55rem auto 0;
  padding: 0.45rem 0.85rem;
  width: fit-content;
  max-width: calc(100% - 0.5rem);
  border-radius: 999px;
  background: rgba(28, 25, 23, 0.88);
  color: #fff;
  font-size: 0.8rem;
  font-weight: 600;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);
  pointer-events: none;
  z-index: 5;
}
.search-running-bar.is-on {
  display: inline-flex;
}
.search-running-bar .srb-spin {
  width: 0.85rem;
  height: 0.85rem;
  border: 2px solid rgba(255, 255, 255, 0.3);
  border-top-color: #fff;
  border-radius: 50%;
  animation: ns-spin 0.7s linear infinite;
  flex-shrink: 0;
}
.search-running-bar .srb-text {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 18rem;
}

.prompt-dock.is-searching {
  outline: 2px solid rgba(194, 65, 12, 0.35);
  outline-offset: 2px;
}
.prompt-dock.is-searching .prompt-bar {
  box-shadow: 0 0 0 3px rgba(194, 65, 12, 0.12);
}

.landing-foot-empty {
  height: 0.5rem;
  padding: 0 !important;
  margin: 0 !important;
  overflow: hidden;
}

/* ── Hunting: card docks to bottom, map open ── */
.landing-ui.is-hunting {
  background: transparent !important;
  justify-content: space-between;
  pointer-events: none;
}
.landing-ui.is-hunting > * { pointer-events: none; }
.landing-ui.is-hunting .landing-top,
.landing-ui.is-hunting .prompt-dock {
  pointer-events: auto;
}
.landing-ui.is-hunting .home-modes,
.landing-ui.is-hunting .home-tier-note,
.landing-ui.is-hunting .foot-chips {
  display: none !important;
}
.landing-ui.is-hunting .prompt-dock {
  margin: auto auto 0.85rem;
  width: min(520px, calc(100% - 1.5rem));
}

/* Hunt progress */
.hunt-osd,
.hunt-osd.t-osd {
  top: 4rem !important;
  left: 0.75rem !important;
  width: min(16rem, calc(100vw - 1.5rem)) !important;
  background: #fff !important;
  border: 1px solid var(--ns-line) !important;
  border-radius: 14px !important;
  box-shadow: var(--ns-shadow) !important;
  color: var(--ns-ink) !important;
  font-family: var(--ns-font) !important;
}
.osd-head {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.55rem 0.65rem;
  border-bottom: 1px solid var(--ns-line);
  background: #fafaf9 !important;
}
.osd-brand {
  font-size: 0.78rem !important;
  font-weight: 700 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  color: var(--ns-clay) !important;
  background: none !important;
  border: 0 !important;
  padding: 0 !important;
}
.osd-pulse {
  width: 0.4rem;
  height: 0.4rem;
  border-radius: 50%;
  background: var(--ns-clay);
  animation: ns-pulse 1.2s ease-in-out infinite;
}
.osd-status {
  flex: 1;
  font-size: 0.76rem !important;
  font-weight: 500;
  color: var(--ns-ink) !important;
}
.osd-metrics {
  font-size: 0.68rem;
  color: var(--ns-stone);
  display: inline-flex;
  gap: 0.35rem;
}
.osd-metrics b { color: var(--ns-ink); }
.osd-minimize {
  background: transparent !important;
  border: 0 !important;
  color: var(--ns-stone) !important;
  width: 1.4rem;
  height: 1.4rem;
}
.osd-subhead {
  display: flex;
  gap: 0.4rem;
  padding: 0.25rem 0.65rem;
  font-size: 0.66rem;
  color: var(--ns-stone);
  border-bottom: 1px solid var(--ns-line);
  background: #fff !important;
  text-transform: none !important;
  letter-spacing: 0 !important;
}
.osd-console {
  max-height: 7rem;
  overflow: auto;
  padding: 0.4rem 0.65rem;
  font-size: 0.7rem;
  color: var(--ns-stone);
  background: transparent !important;
  font-family: var(--ns-font) !important;
}
.osd-roster {
  padding: 0.25rem 0.5rem 0.5rem;
  max-height: 6rem;
  overflow: auto;
}

.scan-page { background: #f7f4ef !important; color: var(--ns-ink) !important; }
.scan-page-top {
  background: #fff !important;
  border-bottom: 1px solid var(--ns-line) !important;
}

/* Token / auth */
.token-modal-card {
  background: #fff !important;
  border: 1px solid var(--ns-line) !important;
  border-radius: 18px !important;
  box-shadow: var(--ns-shadow) !important;
  color: var(--ns-ink) !important;
}
.token-modal-card .eyebrow {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--ns-clay);
}
.token-modal-card h2 {
  font-weight: 700;
  letter-spacing: -0.02em;
}
.token-pack {
  background: #fafaf9 !important;
  border: 1px solid var(--ns-line) !important;
  border-radius: 12px !important;
  color: var(--ns-ink) !important;
}
.token-pack.featured {
  border-color: var(--ns-clay) !important;
  background: #fff7ed !important;
}
.token-pack .tp-n { font-size: 1.25rem; font-weight: 700; }
.token-pack .tp-p { font-weight: 700; color: var(--ns-clay); }
.token-quota-pill {
  background: var(--ns-moss-soft) !important;
  color: var(--ns-moss) !important;
  border: 0 !important;
  border-radius: 999px;
  padding: 0.35rem 0.65rem;
  font-size: 0.78rem;
  font-weight: 600;
}

.journey-card.auth-glass,
.auth-glass {
  background: #fff !important;
  border: 1px solid var(--ns-line) !important;
  border-radius: 18px !important;
  box-shadow: var(--ns-shadow) !important;
  color: var(--ns-ink) !important;
  backdrop-filter: none !important;
  max-width: 24rem;
  margin: 12vh auto;
  padding: 1.5rem !important;
}
.auth-glass h2 { font-weight: 700; letter-spacing: -0.02em; }
.oauth-btn {
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  padding: 0.75rem 1rem !important;
  border-radius: 12px !important;
  border: 1px solid var(--ns-line) !important;
  background: #fff !important;
  color: var(--ns-ink) !important;
  font-weight: 600 !important;
  margin-bottom: 0.4rem;
}
.link-back {
  background: none;
  border: 0;
  color: var(--ns-clay);
  font-weight: 600;
  cursor: pointer;
  padding: 0;
  margin-bottom: 0.6rem;
}

/* App shell */
.topbar {
  background: rgba(255, 255, 255, 0.95) !important;
  border-bottom: 1px solid var(--ns-line) !important;
  color: var(--ns-ink) !important;
}
.topbar-brand strong { font-weight: 700; color: var(--ns-ink); }
.ws-name { color: var(--ns-stone) !important; }
.badge-btn {
  background: #fff !important;
  border: 1px solid var(--ns-line) !important;
  border-radius: 999px !important;
  color: var(--ns-ink) !important;
}
.sidebar, .mobile-tabs {
  background: #fff !important;
  border-color: var(--ns-line) !important;
}
.nav-item {
  color: var(--ns-stone) !important;
  border-radius: 10px !important;
  font-weight: 600;
}
.nav-item.active {
  background: #fff7ed !important;
  color: var(--ns-clay-deep) !important;
}
.map-side, .side-panel, .page-pad {
  background: #fff !important;
  color: var(--ns-ink) !important;
  border-color: var(--ns-line) !important;
}
.map-side h2, .page-pad h2, .side-panel h2 {
  font-weight: 700;
  letter-spacing: -0.02em;
}
.card-inner, .company-list, .lead-detail, .campaign-table {
  background: #fafaf9 !important;
  border-color: var(--ns-line) !important;
  border-radius: 12px !important;
}
.map-toolbar {
  background: rgba(255, 255, 255, 0.95) !important;
  border: 1px solid var(--ns-line) !important;
  border-radius: 999px !important;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
}
button:not(.ghost):not(.secondary):not(.oauth-btn):not(.chip):not(.token-pack):not(.prompt-mic):not(.nav-item):not(.badge-btn):not(.free-quota-chip):not(.foot-link):not(.link-back):not(.osd-minimize):not(.token-modal-close) {
  background: var(--ns-clay);
  color: #fff;
  border-radius: 10px;
  font-weight: 600;
}
button.secondary {
  background: #f5f5f4 !important;
  color: var(--ns-ink) !important;
  border: 1px solid var(--ns-line) !important;
  border-radius: 10px !important;
}
input, select, textarea {
  background: #fff !important;
  border: 1px solid var(--ns-line) !important;
  color: var(--ns-ink) !important;
  border-radius: 10px !important;
  font-family: var(--ns-font);
}
label { color: var(--ns-stone); }
.out, pre.out {
  background: #fafaf9 !important;
  border: 1px solid var(--ns-line) !important;
  color: var(--ns-stone) !important;
  border-radius: 10px !important;
}
.hint, .micro, .muted { color: var(--ns-stone) !important; }

@keyframes ns-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.45; }
}

@media (max-width: 640px) {
  .home-title { font-size: 1.2rem; }
  .landing-loc { max-width: 30vw; }
  .hunt-osd, .hunt-osd.t-osd {
    bottom: 5.5rem !important;
    top: auto !important;
  }
}
