/* ===========================================================================
   SYN//ARCHIVE — Geography & Map (2.0-EXP rebuild)
   Dependency-free interactive: regional locator + island district drill-down.
   Matches the SYN//ARCHIVE dossier system (syn-theme.css tokens).
   =========================================================================== */

.geo {
    max-width: var(--wrap, 1200px);
    margin: 0 auto;
    padding: 18px 22px 80px;
    --geo-accent: var(--page-accent, var(--signal));
}

/* ---- Shared block shell ---- */
.geo-block { margin-top: 30px; }
.geo-block-head { margin-bottom: 16px; }
.geo-block-head .eyebrow {
    font-family: var(--font-mono);
    font-size: 0.7rem;
    letter-spacing: 0.26em;
    color: var(--geo-accent);
    text-transform: uppercase;
}
.geo-block-head h2 {
    font-family: var(--font-display);
    font-weight: 700;
    font-size: clamp(1.3rem, 2.4vw, 1.9rem);
    letter-spacing: 0.02em;
    margin: 8px 0 6px;
}
.geo-block-head h2 .ghost {
    color: transparent;
    -webkit-text-stroke: 1px var(--line);
    text-stroke: 1px var(--line);
}
.geo-block-head p {
    color: var(--ash);
    max-width: 64ch;
    font-size: 0.96rem;
    margin: 0;
}

.geo-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.65fr) minmax(280px, 1fr);
    gap: 20px;
    align-items: stretch;
}

/* ---- Map panel (the dossier frame around an SVG) ---- */
.geo-panel {
    position: relative;
    background:
        radial-gradient(130% 120% at 18% 0%, rgba(69, 214, 255, 0.05), transparent 60%),
        var(--panel);
    border: 1px solid var(--line-soft);
    border-radius: 14px;
    overflow: hidden;
    min-height: 220px;
    display: flex;
}
.geo-panel::before {
    /* corner registration ticks — archive frame */
    content: "";
    position: absolute;
    inset: 10px;
    border: 1px solid rgba(151, 161, 186, 0.10);
    border-radius: 8px;
    pointer-events: none;
}
.geo-panel::after {
    /* faint scanlines */
    content: "";
    position: absolute;
    inset: 0;
    background: repeating-linear-gradient(180deg, rgba(255, 255, 255, 0.018) 0 1px, transparent 1px 4px);
    pointer-events: none;
    mix-blend-mode: overlay;
}
.geo-panel svg { display: block; width: 100%; height: auto; position: relative; z-index: 1; }

/* ---- Readout side panel ---- */
.geo-read {
    background: var(--panel);
    border: 1px solid var(--line-soft);
    border-radius: 14px;
    padding: 20px 20px 22px;
    display: flex;
    flex-direction: column;
    gap: 12px;
}
.geo-read .read-kicker {
    font-family: var(--font-mono);
    font-size: 0.66rem;
    letter-spacing: 0.26em;
    color: var(--ash);
    text-transform: uppercase;
}
.geo-read h3 {
    font-family: var(--font-display);
    font-size: 1.25rem;
    letter-spacing: 0.02em;
    margin: 0;
    line-height: 1.15;
}
.geo-read .read-tagline {
    font-family: var(--font-mono);
    font-size: 0.72rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--geo-accent);
}
.geo-read p { color: var(--ash); font-size: 0.92rem; margin: 0; line-height: 1.6; }
.geo-read .read-detail { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 8px; }
.geo-read .read-detail li {
    color: var(--ash);
    font-size: 0.86rem;
    line-height: 1.5;
    padding-left: 16px;
    position: relative;
}
.geo-read .read-detail li::before {
    content: "";
    position: absolute;
    left: 0; top: 0.6em;
    width: 6px; height: 6px;
    background: var(--read-accent, var(--geo-accent));
    transform: rotate(45deg);
}
.geo-read .read-empty {
    color: var(--ash);
    font-size: 0.9rem;
    line-height: 1.6;
    opacity: 0.85;
}
.geo-read .read-empty ol { margin: 10px 0 0; padding-left: 18px; display: grid; gap: 7px; }
.geo-read .read-empty li { font-size: 0.88rem; }
.geo-read .read-empty b { color: var(--bone); }

/* boroughs chip list */
.geo-boroughs { display: grid; gap: 8px; margin-top: 4px; }
.geo-boroughs .bq-label {
    font-family: var(--font-mono);
    font-size: 0.64rem;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--ash);
}
.geo-borough {
    border: 1px solid var(--line-soft);
    border-left: 3px solid var(--read-accent, var(--geo-accent));
    border-radius: 7px;
    padding: 8px 11px;
    background: rgba(255, 255, 255, 0.025);
    transition: background 0.18s, border-color 0.18s;
}
.geo-borough.is-active { background: rgba(255, 255, 255, 0.06); }
.geo-borough .bq-name {
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 0.95rem;
    letter-spacing: 0.01em;
}
.geo-borough .bq-desc { color: var(--ash); font-size: 0.82rem; margin-top: 2px; line-height: 1.45; }

.geo-read .read-file-link {
    margin-top: auto;
    align-self: flex-start;
    font-family: var(--font-mono);
    font-size: 0.72rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--bone);
    text-decoration: none;
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: 8px 15px;
    transition: border-color 0.2s, color 0.2s, background 0.2s;
}
.geo-read .read-file-link:hover { border-color: var(--geo-accent); color: var(--geo-accent); background: rgba(69, 214, 255, 0.06); }
.geo-read .read-file-link i { margin-left: 6px; font-size: 0.8em; }

/* ===========================================================================
   ISLAND MAP
   =========================================================================== */
.geo-island-stage { position: relative; }

/* camera group animates between overview + district zoom */
#geo-cam { transition: transform 0.62s cubic-bezier(0.22, 0.61, 0.27, 1); transform-box: view-box; }
.geo-anim-off #geo-cam { transition: none; }

.geo-island-base { fill: rgba(151, 161, 186, 0.05); stroke: rgba(151, 161, 186, 0.16); stroke-width: 2; }

.geo-district {
    fill: var(--d-accent);
    fill-opacity: 0.30;
    stroke: var(--d-accent);
    stroke-width: 2.2;
    stroke-opacity: 0.62;
    cursor: pointer;
    transition: fill-opacity 0.22s, stroke-opacity 0.22s, filter 0.22s;
}
.geo-district:hover { fill-opacity: 0.52; stroke-opacity: 1; filter: drop-shadow(0 0 14px var(--d-accent)); }
.geo-island.has-selection .geo-district { fill-opacity: 0.05; stroke-opacity: 0.18; cursor: default; }
.geo-island.has-selection .geo-district.is-selected { fill-opacity: 0.16; stroke-opacity: 0.85; }

.geo-borough-shape {
    fill: var(--d-accent);
    fill-opacity: 0;
    stroke: var(--d-accent);
    stroke-width: 1.6;
    stroke-opacity: 0;
    cursor: pointer;
    transition: fill-opacity 0.2s, stroke-opacity 0.2s, filter 0.2s;
    pointer-events: none;
}
.geo-borough-shape.is-shown { fill-opacity: 0.30; stroke-opacity: 0.9; pointer-events: auto; }
.geo-borough-shape.is-shown:hover,
.geo-borough-shape.is-hot { fill-opacity: 0.55; filter: drop-shadow(0 0 10px var(--d-accent)); }

/* labels (district + borough) — halo text like the reference */
.geo-label {
    fill: var(--bone);
    font-family: var(--font-display);
    font-weight: 700;
    letter-spacing: 0.04em;
    text-anchor: middle;
    dominant-baseline: middle;
    paint-order: stroke;
    stroke: rgba(4, 5, 12, 0.92);
    stroke-width: 5px;
    stroke-linejoin: round;
    pointer-events: none;
    text-transform: uppercase;
}
.geo-district-label { font-size: 52px; letter-spacing: 0.01em; transition: opacity 0.25s; }
.geo-island.has-selection .geo-district-label { opacity: 0; }
.geo-borough-label { opacity: 0; transition: opacity 0.3s; }
.geo-borough-label.is-shown { opacity: 1; }

/* floating hover name tag (HTML overlay) */
.geo-hovertag {
    position: absolute;
    z-index: 5;
    pointer-events: none;
    transform: translate(-50%, -140%);
    background: rgba(4, 5, 12, 0.92);
    border: 1px solid var(--line);
    border-left: 3px solid var(--tag-accent, var(--signal));
    border-radius: 6px;
    padding: 5px 10px;
    font-family: var(--font-mono);
    font-size: 0.72rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--bone);
    white-space: nowrap;
    opacity: 0;
    transition: opacity 0.14s;
}
.geo-hovertag.is-on { opacity: 1; }

/* BACK button */
.geo-back {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-family: var(--font-mono);
    font-size: 0.72rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--bone);
    background: rgba(4, 5, 12, 0.6);
    border: 1px solid var(--line);
    border-radius: 999px;
    padding: 8px 16px;
    cursor: pointer;
    transition: border-color 0.2s, color 0.2s, opacity 0.25s, transform 0.25s;
}
.geo-back:hover { border-color: var(--geo-accent); color: var(--geo-accent); }
.geo-back[hidden] { display: none; }
.geo-head-row { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; flex-wrap: wrap; }

/* ===========================================================================
   REGION LOCATOR
   =========================================================================== */
.geo-land { fill: rgba(151, 161, 186, 0.07); stroke: var(--signal); stroke-opacity: 0.5; stroke-width: 1.6; }
.geo-coastglow { fill: none; stroke: var(--signal); stroke-opacity: 0.16; stroke-width: 7; filter: blur(2px); }
.geo-grid-line { stroke: rgba(151, 161, 186, 0.07); stroke-width: 1; }
.geo-ring { fill: none; stroke: rgba(255, 61, 143, 0.16); stroke-width: 1; }
.geo-statewm {
    fill: rgba(151, 161, 186, 0.16);
    font-family: var(--font-mono);
    font-size: 15px;
    letter-spacing: 0.26em;
    text-anchor: middle;
    text-transform: uppercase;
    pointer-events: none;
}

.geo-city { cursor: pointer; }
.geo-city .city-hit { fill: transparent; }
.geo-city .city-dot {
    fill: var(--c-accent);
    stroke: var(--ink-0);
    stroke-width: 2.5;
    transition: r 0.18s;
}
.geo-city .city-halo {
    fill: none;
    stroke: var(--c-accent);
    stroke-opacity: 0.5;
    transition: stroke-opacity 0.2s, r 0.2s;
}
.geo-city .city-name {
    fill: var(--bone);
    font-family: var(--font-mono);
    font-size: 14px;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    paint-order: stroke;
    stroke: rgba(4, 5, 12, 0.92);
    stroke-width: 4px;
    stroke-linejoin: round;
    opacity: 0;
    transition: opacity 0.18s;
    pointer-events: none;
}
.geo-city:hover .city-name,
.geo-city.is-active .city-name { opacity: 1; }
.geo-city:hover .city-halo { stroke-opacity: 0.95; }
.geo-city.is-active .city-dot { stroke: var(--bone); }
.geo-city.is-syn .city-dot { filter: drop-shadow(0 0 8px var(--c-accent)); }
.geo-city.is-coming .city-dot { fill-opacity: 0.55; }

/* region readout: lighter, with status chip */
.geo-read .read-status {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    font-family: var(--font-mono);
    font-size: 0.66rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--ash);
}
.geo-read .read-status .dot { width: 9px; height: 9px; border-radius: 50%; background: var(--read-accent, var(--geo-accent)); }

/* ===========================================================================
   RESPONSIVE
   =========================================================================== */
@media (max-width: 900px) {
    .geo-grid { grid-template-columns: 1fr; }
    .geo-read { order: 2; }
    .geo-district-label { font-size: 32px; }
    .geo-statewm { font-size: 18px; }
    .geo-city .city-name { font-size: 17px; }
}
@media (max-width: 560px) {
    .geo { padding: 14px 14px 64px; }
    .geo-read { padding: 16px; }
}
