/* ============================================================
   Villgeo map — styles ported from the Claude Design handoff
   (design/handoff/project/Villgeo Map.dc.html)
   ============================================================ */

:root {
  --vg-forest: #1A3A2E;      /* base background, headings on cream */
  --vg-deep: #16332B;        /* map background / lowest relief */
  --vg-cream: #FAF6EF;       /* surfaces, text on dark */
  --vg-amber: #C77F2A;       /* anchors + one CTA only */
  --vg-amber-dark: #b57226;
  --vg-green: #2E5943;       /* secondary UI accents */
  --vg-verified: #3B6D4F;    /* trusted state only */
  --vg-ink: #4a4438;         /* body copy — warm ink, never cool gray */
  --vg-muted: #8a8272;
  --vg-serif: 'Instrument Serif', serif;
  --vg-sans: 'Hanken Grotesk', system-ui, sans-serif;
}

html, body { margin: 0; height: 100%; background: var(--vg-forest); overflow: hidden; }

@keyframes vgDrawerIn { from { transform: translateX(30px); opacity: 0 } to { transform: translateX(0); opacity: 1 } }
@keyframes vgSheetIn  { from { transform: translateY(60px); opacity: 0 } to { transform: translateY(0); opacity: 1 } }
@keyframes vgSpin     { to { transform: rotate(360deg) } }
@keyframes vgFadeIn   { from { opacity: 0 } to { opacity: 1 } }

#app {
  position: fixed; inset: 0;
  background: var(--vg-forest);
  overflow: hidden;
  font-family: var(--vg-sans);
}

#vg-map { position: absolute; inset: 0; }
#vg-atmo { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }

.vg-dusk { position: absolute; inset: 0; background: rgba(199,127,42,0.08); pointer-events: none; }

.vg-topfade {
  position: absolute; inset: 0 0 auto 0; height: 130px;
  background: linear-gradient(180deg, rgba(10,24,18,0.42), rgba(10,24,18,0));
  pointer-events: none;
}

/* ---------- brand ---------- */
.vg-brand {
  position: absolute; top: 22px; left: 50%; transform: translateX(-50%);
  display: flex; flex-direction: column; align-items: center; gap: 2px;
  pointer-events: none;
}
.vg-brand-name {
  font: 400 32px/1 var(--vg-serif);
  color: var(--vg-cream); letter-spacing: 0.01em;
  text-shadow: 0 1px 10px rgba(10,24,18,0.45);
}
.vg-brand-sub {
  font: 500 11px/1.3 var(--vg-sans);
  color: rgba(250,246,239,0.78);
  letter-spacing: 0.18em; text-transform: uppercase;
}

/* ---------- map controls ---------- */
.vg-ctrls {
  position: absolute; top: 22px; right: 22px;
  display: flex; flex-direction: column; gap: 8px;
}
.vg-ctrl {
  width: 40px; height: 40px; display: grid; place-items: center;
  background: rgba(250,246,239,0.94); border: none; border-radius: 11px;
  box-shadow: 0 2px 10px rgba(10,24,18,0.25);
  font: 400 20px/1 var(--vg-sans); color: var(--vg-forest);
  cursor: pointer;
}
.vg-ctrl:hover { background: #ffffff; }
.vg-ctrl--pivot { font: 400 17px/1 var(--vg-sans); color: var(--vg-green); }
.vg-ctrl--north { font: 600 13px/1 var(--vg-sans); color: var(--vg-green); }

/* ---------- attribution ---------- */
.vg-attrib {
  position: absolute; right: 22px; bottom: 20px;
  font: 400 10px/1 var(--vg-sans);
  color: rgba(250,246,239,0.55);
  pointer-events: none;
}

/* ---------- toast ---------- */
.vg-toast {
  position: absolute; left: 50%; bottom: 64px; transform: translateX(-50%);
  background: rgba(10,24,18,0.85); color: var(--vg-cream);
  border-radius: 999px; padding: 10px 18px;
  font: 500 12.5px/1 var(--vg-sans);
  animation: vgFadeIn 0.25s ease;
  pointer-events: none; white-space: nowrap;
  z-index: 7;
}

/* ---------- shared chips / badges ---------- */
.vg-chips { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.vg-chip-type {
  font: 600 10px/1 var(--vg-sans); color: var(--vg-amber);
  letter-spacing: 0.14em; text-transform: uppercase;
  border: 1px solid rgba(199,127,42,0.45); border-radius: 999px;
  padding: 5px 10px;
}
.vg-chip-type--sm { font-size: 9.5px; letter-spacing: 0.13em; padding: 4px 9px; }
.vg-badge {
  display: inline-flex; align-items: center; gap: 5px;
  font: 600 10px/1 var(--vg-sans);
  letter-spacing: 0.1em; text-transform: uppercase;
}
.vg-badge[hidden] { display: none; }
.vg-badge--sm { font-size: 9.5px; gap: 4px; }
.vg-badge-dot { width: 6px; height: 6px; border-radius: 50%; }
.vg-badge--sm .vg-badge-dot { width: 5px; height: 5px; }
.vg-badge--verified { color: var(--vg-verified); }
.vg-badge--verified .vg-badge-dot { background: var(--vg-verified); }
.vg-badge--pending { color: var(--vg-muted); }
.vg-badge--pending .vg-badge-dot { background: #c9bfa9; }

/* ---------- action buttons ---------- */
.vg-btn-primary {
  display: grid; place-items: center;
  background: var(--vg-amber); border: none; border-radius: 12px;
  padding: 14px;
  font: 600 14px/1 var(--vg-sans); color: var(--vg-cream);
  letter-spacing: 0.02em; cursor: pointer;
}
.vg-btn-primary:hover { background: var(--vg-amber-dark); }
.vg-btn-primary--sm { border-radius: 11px; padding: 13px; font-size: 13px; letter-spacing: 0; }
.vg-btn-secondary {
  display: grid; place-items: center;
  background: transparent;
  border: 1.5px solid rgba(26,58,46,0.3); border-radius: 12px;
  padding: 12.5px;
  font: 600 13.5px/1 var(--vg-sans); color: var(--vg-forest);
  cursor: pointer;
}
.vg-btn-secondary:hover { background: rgba(26,58,46,0.06); }
.vg-btn-secondary--sm { border-radius: 11px; padding: 12px 16px; font-size: 12.5px; }

/* ---------- anchor drawer (desktop) ---------- */
.vg-drawer {
  position: absolute; top: 18px; right: 18px; bottom: 18px; width: 404px;
  background: var(--vg-cream); border-radius: 18px;
  box-shadow: 0 18px 60px rgba(10,24,18,0.45);
  display: none; flex-direction: column; overflow: hidden;
  z-index: 5;
}
.vg-drawer.is-open { animation: vgDrawerIn 0.32s ease; }
@media (min-width: 641px) { .vg-drawer.is-open { display: flex; } }

.vg-drawer-hero {
  position: relative; height: 180px; flex: none;
  background: repeating-linear-gradient(-45deg, #EDE4D3, #EDE4D3 10px, #E4DAC6 10px, #E4DAC6 20px);
}
.vg-drawer-hero-label {
  position: absolute; inset: 0; display: grid; place-items: center;
  font: 500 11px/1.4 ui-monospace, Menlo, monospace;
  color: var(--vg-muted); text-align: center;
}
.vg-drawer-close {
  position: absolute; top: 14px; right: 14px;
  width: 32px; height: 32px; display: grid; place-items: center;
  background: rgba(250,246,239,0.95); border: none; border-radius: 50%;
  font: 400 16px/1 var(--vg-sans); color: var(--vg-forest);
  box-shadow: 0 2px 8px rgba(10,24,18,0.15); cursor: pointer;
}
.vg-drawer-close:hover { background: #ffffff; }

.vg-drawer-body {
  flex: 1; overflow: auto; padding: 22px 26px 24px;
  display: flex; flex-direction: column; gap: 14px;
}
.vg-drawer-head { flex: none; display: flex; flex-direction: column; gap: 8px; }
.vg-drawer-name { margin: 0; font: 400 31px/1.1 var(--vg-serif); color: var(--vg-forest); }
.vg-drawer-desc { margin: 0; flex: none; font: 400 13.5px/1.6 var(--vg-sans); color: var(--vg-ink); }

.vg-facts {
  flex: none; display: grid; grid-template-columns: 1fr 1fr; gap: 1px;
  background: rgba(26,58,46,0.12);
  border: 1px solid rgba(26,58,46,0.12);
  border-radius: 12px; overflow: hidden;
}
.vg-fact { background: var(--vg-cream); padding: 11px 14px; }
.vg-fact-label {
  font: 600 9.5px/1 var(--vg-sans); color: var(--vg-muted);
  letter-spacing: 0.12em; text-transform: uppercase; margin-bottom: 5px;
}
.vg-fact-value { font: 500 12.5px/1.3 var(--vg-sans); color: var(--vg-forest); }

.vg-drawer-actions { flex: none; display: flex; flex-direction: column; gap: 9px; margin-top: 2px; }

/* ---------- anchor bottom sheet (mobile) ---------- */
.vg-sheet {
  position: absolute; left: 0; right: 0; bottom: 0;
  background: var(--vg-cream); border-radius: 20px 20px 0 0;
  box-shadow: 0 -10px 34px rgba(10,24,18,0.35);
  padding: 10px 22px 22px;
  display: none; flex-direction: column; gap: 11px;
  z-index: 5;
}
.vg-sheet.is-open { animation: vgSheetIn 0.32s ease; }
@media (max-width: 640px) { .vg-sheet.is-open { display: flex; } }

.vg-sheet-handle {
  width: 40px; height: 4px; border-radius: 2px;
  background: rgba(26,58,46,0.22); margin: 0 auto;
}
.vg-sheet .vg-chips { gap: 9px; }
.vg-sheet-close {
  margin-left: auto; width: 30px; height: 30px; display: grid; place-items: center;
  background: rgba(26,58,46,0.08); border: none; border-radius: 50%;
  font: 400 15px/1 var(--vg-sans); color: var(--vg-forest); cursor: pointer;
}
.vg-sheet-name { margin: 0; font: 400 24px/1.12 var(--vg-serif); color: var(--vg-forest); }
.vg-sheet-desc { margin: 0; font: 400 12.5px/1.55 var(--vg-sans); color: var(--vg-ink); }
.vg-sheet-meta { font: 500 11px/1.4 var(--vg-sans); color: var(--vg-muted); }
.vg-sheet-actions { display: flex; gap: 8px; margin-top: 2px; }
.vg-sheet-actions .vg-btn-primary--sm { flex: 1; }
.vg-sheet-actions .vg-btn-secondary--sm { flex: none; }

/* ---------- explore menu ---------- */
.vg-menu-wrap {
  position: absolute; left: 50%; bottom: 26px; transform: translateX(-50%);
  width: min(310px, calc(100% - 44px));
  display: flex; flex-direction: column; align-items: stretch;
  z-index: 6;
}
/* Bottom sheet replaces the menu bar on narrow screens (mockup 1c) */
@media (max-width: 640px) {
  body.vg-has-selection .vg-menu-wrap { display: none; }
}
.vg-menu-card {
  background: rgba(250,246,239,0.97); border-radius: 14px;
  box-shadow: 0 10px 34px rgba(10,24,18,0.32);
  overflow: hidden; backdrop-filter: blur(6px);
}
.vg-menu-items {
  padding: 8px 8px 6px;
  display: flex; flex-direction: column; gap: 2px;
  border-bottom: 1px solid rgba(26,58,46,0.1);
}
.vg-menu-items[hidden] { display: none; }
.vg-menu-item {
  padding: 11px 14px; border-radius: 9px;
  display: flex; align-items: center; gap: 12px;
  cursor: pointer;
}
.vg-menu-item:hover { background: rgba(26,58,46,0.06); }
.vg-menu-item--link { text-decoration: none; color: inherit; }
.vg-menu-icon { font: 400 16px/1 var(--vg-sans); color: var(--vg-green); width: 20px; text-align: center; }
.vg-menu-title { font: 600 13px/1.2 var(--vg-sans); color: var(--vg-forest); }
.vg-menu-sub { font: 400 11px/1.2 var(--vg-sans); color: var(--vg-muted); }

.vg-menu-toggle {
  width: 100%; border: none; background: transparent;
  display: flex; align-items: center; gap: 0; padding: 0;
  cursor: pointer; text-align: left;
}
.vg-menu-toggle-icon {
  flex: none; width: 52px; align-self: stretch;
  display: grid; place-items: center;
  background: var(--vg-green); color: var(--vg-cream);
  font: 400 18px/1 var(--vg-sans);
}
.vg-menu-toggle-label {
  flex: 1; padding: 15px 16px;
  font: 600 13px/1 var(--vg-sans); color: var(--vg-forest);
  letter-spacing: 0.14em; text-transform: uppercase;
}
.vg-menu-toggle-caret { flex: none; padding-right: 18px; font: 600 15px/1 var(--vg-sans); color: var(--vg-green); }

/* ---------- "Why Villgeo" overlay ---------- */
.vg-about { position: absolute; inset: 0; z-index: 9; display: grid; place-items: center; padding: 24px; }
.vg-about[hidden] { display: none; }
.vg-about-scrim {
  position: absolute; inset: 0;
  background: rgba(10,24,18,0.6);
  animation: vgFadeIn 0.25s ease;
}
.vg-about-card {
  position: relative;
  width: min(600px, 100%);
  max-height: calc(100% - 32px);
  overflow-y: auto;
  background: var(--vg-cream);
  border-radius: 18px;
  box-shadow: 0 18px 60px rgba(10,24,18,0.5);
  padding: 30px 34px 34px;
  animation: vgSheetIn 0.32s ease;
}
.vg-about-close {
  position: absolute; top: 14px; right: 14px;
  width: 32px; height: 32px; display: grid; place-items: center;
  background: rgba(26,58,46,0.08); border: none; border-radius: 50%;
  font: 400 16px/1 var(--vg-sans); color: var(--vg-forest); cursor: pointer;
}
.vg-about-close:hover { background: rgba(26,58,46,0.14); }
.vg-about-kicker {
  font: 600 10px/1 var(--vg-sans); color: var(--vg-amber);
  letter-spacing: 0.18em; text-transform: uppercase;
  margin-bottom: 14px;
}
.vg-about-section { margin-bottom: 26px; }
.vg-about-section:last-child { margin-bottom: 0; }
.vg-about-section h2 {
  margin: 0 0 8px;
  font: 400 25px/1.15 var(--vg-serif); color: var(--vg-forest);
}
.vg-about-section p {
  margin: 0;
  font: 400 13.5px/1.6 var(--vg-sans); color: var(--vg-ink);
}
.vg-about-list {
  margin: 12px 0 0; padding: 0; list-style: none;
  display: flex; flex-direction: column; gap: 8px;
}
.vg-about-list li {
  position: relative; padding-left: 18px;
  font: 400 13px/1.55 var(--vg-sans); color: var(--vg-ink);
}
.vg-about-list li::before {
  content: ''; position: absolute; left: 2px; top: 7px;
  width: 6px; height: 6px; border-radius: 50%;
  background: var(--vg-amber);
}
.vg-about-list b { font-weight: 600; color: var(--vg-forest); }
.vg-about-chips { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 13px; }
.vg-about-chips span {
  font: 600 10.5px/1 var(--vg-sans); color: var(--vg-green);
  letter-spacing: 0.06em; text-transform: uppercase;
  border: 1px solid rgba(46,89,67,0.35); border-radius: 999px;
  padding: 6px 11px;
}
@media (max-width: 640px) {
  .vg-about { padding: 14px; }
  .vg-about-card { padding: 24px 22px 26px; }
  .vg-about-section h2 { font-size: 21px; }
}

/* ---------- loading / error covers ---------- */
.vg-cover {
  position: absolute; inset: 0; background: var(--vg-forest);
  display: grid; place-items: center; z-index: 10;
}
.vg-cover--error { z-index: 11; }
.vg-cover[hidden] { display: none; }
.vg-cover-stack { display: flex; flex-direction: column; align-items: center; gap: 16px; }
.vg-cover-stack--error { max-width: 320px; text-align: center; gap: 10px; }
.vg-cover-word { font: 400 40px/1 var(--vg-serif); color: var(--vg-cream); }
.vg-spinner {
  width: 26px; height: 26px; border-radius: 50%;
  border: 2.5px solid rgba(250,246,239,0.2);
  border-top-color: var(--vg-amber);
  animation: vgSpin 0.9s linear infinite;
}
.vg-cover-caption {
  font: 500 11px/1 var(--vg-sans); color: rgba(250,246,239,0.6);
  letter-spacing: 0.14em; text-transform: uppercase;
}
.vg-error-title { font: 400 26px/1.2 var(--vg-serif); color: var(--vg-cream); }
.vg-error-text { font: 400 13px/1.5 var(--vg-sans); color: rgba(250,246,239,0.7); }
