/* VESL palette. Dark mode pairs neutral charcoal with vivid coral. */
:root,:root[data-theme="light"]{
  --paper:#f7f7f8;--surface:#ffffff;--surface-2:#eeeeF0;--soft:#eeeeF0;--white:#ffffff;
  --ink:#222222;--text:#222222;--muted:#62626b;--dim:#71717b;--line:#dedee3;
  --accent:#c71948;--action:#d91b4c;--action-text:#ffffff;--accent-soft:#fff0f3;
  --coral:var(--accent);--green:var(--accent);--vesl-acc:var(--accent);--bg:var(--surface);
  
  --west:#7560ae;--midwest:#347e74;--southwest:#ae633f;--southeast:#927521;--northeast:#a45488;
  color-scheme:light;color:var(--ink);background:var(--paper);
}
:root[data-theme="dark"]{
  --paper:#121212;--surface:#1b1b1d;--surface-2:#29292d;--soft:#29292d;--white:#1b1b1d;
  --ink:#fafafa;--text:#fafafa;--muted:#b8b8c0;--dim:#a3a3ad;--line:#38383d;
  --accent:#ff637e;--action:#e51d50;--action-text:#ffffff;--accent-soft:#3b202a;--bg:var(--surface);
  --west:#b8a5ee;--midwest:#80c8bc;--southwest:#efa67b;--southeast:#d6bc77;--northeast:#da97c3;
  color-scheme:dark;
}
:root[data-theme] body{background:var(--paper);color:var(--ink);}
:root[data-theme] ::selection{background:var(--accent-soft);color:var(--ink)}
:root[data-theme] :is(button,a,input,textarea,select,summary,[tabindex]):focus-visible{outline-color:var(--accent)}
/* Existing geometry and typography are deliberately unchanged. */
:root[data-theme] .site-header{background:var(--surface);border-color:var(--line);box-shadow:0 1px 0 var(--line)}
:root[data-theme] :is(.explorer,.results-panel,.feed-main,.sports-rail,.city-dashboard,.channel-top,.channel-reading-body,.article-reader){background:var(--surface);color:var(--ink);border-color:var(--line)}
:root[data-theme] :is(.host-post,.source-post,.feed-item,.ln-quick-post){background:transparent;color:var(--ink);border-color:var(--line)}
:root[data-theme] :is(.results-heading h2,.station-heading h2,.article-reader h1){color:var(--ink)}
:root[data-theme] :is(.search-trigger,.location-button,.theme-toggle,.city-hop-header,.small-icon,.dialog-search,.score-card,.game-back){background:var(--paper);border-color:var(--line);color:var(--ink);box-shadow:none}
:root[data-theme] :is(.search-trigger:hover,.location-button:hover,.theme-toggle:hover,.city-hop-header:hover,.score-card:hover,.city-option:hover){background:var(--surface-2);border-color:var(--muted);color:var(--ink)}
:root[data-theme] .search-trigger kbd{background:var(--surface);color:var(--muted);border-color:var(--line)}
:root[data-theme] .site-header nav{background:var(--paper);border-color:var(--line)}
:root[data-theme] .site-header .nav-item{color:var(--muted)}
:root[data-theme] .site-header .nav-item:is(.active,[aria-pressed=true]){background:var(--accent-soft);color:var(--accent)}
:root[data-theme] :is(.channel-indicator,.score-rail-pulse){background:var(--accent);box-shadow:none}
:root[data-theme] :is(.host-ai-badge,.ai-badge,.presenter-ai,.source-original,.source-origin){background:var(--accent-soft);color:var(--accent);border-color:var(--line)}
:root[data-theme] :is(.ln-quick-submit,.ln-post-fab,.ask-button,.primary-button),:root[data-theme] #local-network .ln-primary{background:var(--action)!important;color:var(--action-text)!important;border-color:transparent;box-shadow:none}
:root[data-theme] :is(.ln-compose-avatar,.ln-avatar,.agent-emblem){background:var(--accent-soft)!important;color:var(--accent)!important}
:root[data-theme] :is(.feed-view-tabs,.discovery-toolbar,.category-tabs,.ln-quick-post){border-color:var(--line);background:transparent}
:root[data-theme] :is(.feed-view-tabs button,.category-tabs button){color:var(--muted)}
:root[data-theme] :is(.feed-view-tabs button[aria-pressed=true],.feed-view-tabs button.selected){color:var(--ink)}
:root[data-theme] :is(.feed-view-tabs button.selected,.feed-view-tabs button[aria-pressed=true]):after{background:var(--accent)}
:root[data-theme] :is(.score-tabs button,.score-rail-tabs button){background:var(--paper);color:var(--muted);border-color:var(--line);box-shadow:none}
:root[data-theme] :is(.score-tabs button,.score-rail-tabs button)[aria-pressed=true]{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);box-shadow:none}
:root[data-theme] :is(.score-card-heading,.score-rail-kicker,.host-city,.source-post-city,.source-media-metrics a,.source-media-role,.article-reader a){color:var(--accent)}
:root[data-theme] :is(.score-card-bottom,.article-reader footer,.article-notes,.feed-actions){border-color:var(--line)}
:root[data-theme] :is(.game-hero,.score-visual,.feed-forecast){background:var(--paper);border-color:var(--line);box-shadow:none}
:root[data-theme] .game-hero:after{background:var(--accent)}
:root[data-theme] dialog{background:var(--surface);color:var(--ink);border-color:var(--line);box-shadow:0 24px 90px #16160f38}
:root[data-theme] dialog::backdrop{background:#11150f99;backdrop-filter:blur(5px)}
:root[data-theme] #local-network.ln-tipping{background:var(--surface);color:var(--ink);border-color:var(--line)}
:root[data-theme] #local-network .ln-tip-heading h2{color:var(--ink)}
:root[data-theme] #local-network #ln-tip input{background:var(--paper);color:var(--ink);border-color:var(--line)}
:root[data-theme] :is(.dialog-search input,#ask-input){background:transparent;color:var(--ink)}
:root[data-theme] .mobile-nav{background:var(--surface);border-color:var(--line)}
:root[data-theme] .mobile-nav button{color:var(--muted)}
:root[data-theme] .mobile-nav button[aria-current=page]{background:var(--accent-soft);color:var(--accent)}
:root[data-theme] .mobile-ask{background:var(--paper);color:var(--accent)}

:root[data-theme] .ln-header-post{background:var(--action)!important;color:var(--action-text)!important;border-color:transparent}
:root[data-theme] .ai-tag{background:var(--accent-soft)!important;color:var(--accent)!important;border-color:var(--line)}
:root[data-theme] .sports-rail [data-score-sport]{background:var(--paper);color:var(--muted);border-color:var(--line);box-shadow:none}
:root[data-theme] .sports-rail [data-score-sport][aria-selected=true]{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);box-shadow:none}
:root[data-theme] .results-panel .discovery-toolbar>.category-tabs{background:transparent!important}
:root[data-theme] :is(.map-panel,.map-explore-content){background:var(--paper)!important;color:var(--ink)}
:root[data-theme] :is(.radar-toggle,.region-button){background:var(--surface);border-color:var(--line);color:var(--muted)}
:root[data-theme] :is(.city-preview-kicker,.city-preview-header .eyebrow,.feed-header-kicker,.newsroom-link,.post-byline a,.post-engagement button,.source-media-role){color:var(--accent)}
:root[data-theme] .results-panel .category-tabs button.selected{color:var(--accent)!important}

:root[data-theme] .tile-wordmark>span{background:var(--ink);color:var(--surface)}
:root[data-theme] .tile-wordmark>span:first-child{background:var(--action);color:var(--action-text)}
:root[data-theme] .mobile-nav .ln-mobile-post svg{background:var(--action);color:var(--action-text)}

/* Map colors share the theme tokens; geography and signal meaning stay intact. */
:root[data-theme] .modern-map .glocal-map-svg{background:transparent}
:root[data-theme] .modern-map [data-region="west"]{--map-region:var(--west)}
:root[data-theme] .modern-map [data-region="midwest"]{--map-region:var(--midwest)}
:root[data-theme] .modern-map [data-region="southwest"]{--map-region:var(--southwest)}
:root[data-theme] .modern-map [data-region="southeast"]{--map-region:var(--southeast)}
:root[data-theme] .modern-map [data-region="northeast"]{--map-region:var(--northeast)}
:root[data-theme] .modern-map .glocal-map-svg .gm-state{fill:color-mix(in srgb,var(--map-region,var(--muted)) 30%,var(--paper))!important;stroke:var(--paper)}
:root[data-theme] .modern-map .glocal-map-svg .gm-state.is-active{fill:color-mix(in srgb,var(--map-region,var(--muted)) 42%,var(--paper))!important}
:root[data-theme] .modern-map .glocal-map-svg .gm-state:is(.is-hovered,:focus){fill:color-mix(in srgb,var(--map-region,var(--muted)) 60%,var(--paper))!important;stroke:var(--accent)}
:root[data-theme] .modern-map .glocal-map-svg .gm-region rect{fill:var(--surface);stroke:var(--map-region,var(--line))}
:root[data-theme] .modern-map .glocal-map-svg .gm-region text{fill:var(--ink)}
:root[data-theme] .modern-map .glocal-map-svg .gm-region:is(:hover,:focus) rect{fill:var(--accent-soft);stroke:var(--accent)}
:root[data-theme] .modern-map .glocal-map-svg .gm-region:is(:hover,:focus) text{fill:var(--accent)}
:root[data-theme] .modern-map .glocal-map-svg .gm-city text{fill:var(--ink);stroke:var(--paper)}
:root[data-theme] .modern-map .glocal-map-svg .gm-city line{stroke:var(--muted)}
:root[data-theme] .modern-map .glocal-map-svg .gm-city:not(.has-signal) .gm-dot{fill:var(--ink);stroke:var(--paper)}
:root[data-theme] .modern-map .glocal-map-svg .gm-city:is(.is-selected,:hover,:focus) .gm-dot{fill:var(--accent);stroke:var(--paper)}
:root[data-theme] .modern-map .glocal-map-svg .gm-city.is-selected text{fill:var(--accent);stroke:var(--paper)}
:root[data-theme] .modern-map .glocal-map-svg .gm-city.is-selected .gm-halo{fill:var(--accent)}
:root[data-theme] .modern-map .glocal-map-svg .gm-city:focus .gm-hit{stroke:var(--accent)}
:root[data-theme] .feed-update-notice>.feed-new-updates{background:var(--accent-soft);color:var(--accent);border-color:var(--accent);box-shadow:none}
:root[data-theme] .feed-update-notice>.feed-new-updates:hover{background:var(--action);color:var(--action-text);border-color:var(--action)}

:root[data-theme] :is(.map-top,.map-heading){background:transparent;color:var(--muted);border-color:var(--line)}

/* Keep city topics reachable while the feed scrolls. */
:root[data-theme] .results-panel .discovery-toolbar{position:sticky;top:0;z-index:6;background:var(--surface);border-bottom:1px solid var(--line)}
@media(max-width:760px){:root[data-theme] .results-panel .discovery-toolbar{top:60px}}

/* Put initial spacing inside the content, not the sticky scrollport. */
@media(min-width:761px){:root[data-theme] .results-panel{padding-top:0}:root[data-theme] .results-panel .feed-main{padding-top:25px}}

/* Updates occupy their own row directly beneath the sticky categories. */
:root[data-theme] .feed-update-notice{top:var(--category-bar-height,64px);height:auto;z-index:5;background:var(--surface);padding:8px 0;border-bottom:1px solid var(--line)}
:root[data-theme] .feed-update-notice:has(>.feed-new-updates[hidden]){display:none}
:root[data-theme] .feed-update-notice>.feed-new-updates{margin:0 auto}
@media(max-width:760px){:root[data-theme] .feed-update-notice{top:calc(60px + var(--category-bar-height,64px))}}
/* Opaque edge-to-edge sticky surfaces cover the feed gutters while scrolling. */
:root[data-theme] .results-panel .discovery-toolbar,:root[data-theme] .results-panel .feed-update-notice{box-shadow:none;clip-path:none;margin-left:calc(-1 * var(--feed-left-gutter,0px));margin-right:calc(-1 * var(--feed-right-gutter,0px));padding-left:var(--feed-left-gutter,0px);padding-right:var(--feed-right-gutter,0px);width:auto}

/* The first feed render replaces this loading indicator with stories. */
.feed-loading{display:flex;align-items:center;justify-content:center;gap:12px;min-height:160px;color:var(--muted,#737373);font-size:14px}
.feed-spinner{width:22px;height:22px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:feed-spin .8s linear infinite}
@keyframes feed-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.feed-spinner{animation:none}}

/* Anchor startup feedback to the visible feed, before its layout is initialized. */
.feed-main{position:relative}
#feed-loading{position:absolute;top:145px;left:0;right:0;z-index:8;min-height:100px;background:var(--surface,#fff);color:var(--ink,#222)}
