/* Theme definitions adapted from @observablehq/framework 1.13.4
Copyright 2023-2024 Observable, Inc.

Permission to use, copy, modify, and/or distribute this software for any purpose
with or without fee is hereby granted, provided that the above copyright notice
and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
THIS SOFTWARE.
*/
:root,html[data-theme=light] {
  --theme-foreground:#1b1e23;
  --theme-foreground-focus:#3b5fc0;
  --theme-background-a:#ffffff;
  --theme-background-b:color-mix(in srgb,var(--theme-foreground) 4%,var(--theme-background-a));
  --theme-background:var(--theme-background-a);
  --theme-background-alt:var(--theme-background-b);
  --theme-foreground-alt:color-mix(in srgb,var(--theme-foreground) 90%,var(--theme-background-a));
  --theme-foreground-muted:color-mix(in srgb,var(--theme-foreground) 60%,var(--theme-background-a));
  --theme-foreground-faint:color-mix(in srgb,var(--theme-foreground) 50%,var(--theme-background-a));
  --theme-foreground-fainter:color-mix(in srgb,var(--theme-foreground) 30%,var(--theme-background-a));
  --theme-foreground-faintest:color-mix(in srgb,var(--theme-foreground) 14%,var(--theme-background-a));
  color-scheme:light;
}
html[data-theme=dark] {
  --theme-foreground:#dfdfd6;
  --theme-foreground-focus:oklch(0.712564 0.257662 265.758);
  --theme-background-b:#161616;
  --theme-background-a:color-mix(in srgb,var(--theme-foreground) 4%,var(--theme-background-b));
  --theme-background:var(--theme-background-a);
  --theme-background-alt:var(--theme-background-b);
  --theme-foreground-alt:color-mix(in srgb,var(--theme-foreground) 90%,var(--theme-background-b));
  --theme-foreground-muted:color-mix(in srgb,var(--theme-foreground) 60%,var(--theme-background-b));
  --theme-foreground-faint:color-mix(in srgb,var(--theme-foreground) 50%,var(--theme-background-b));
  --theme-foreground-fainter:color-mix(in srgb,var(--theme-foreground) 30%,var(--theme-background-b));
  --theme-foreground-faintest:color-mix(in srgb,var(--theme-foreground) 14%,var(--theme-background-b));
  color-scheme:dark;
}
@media (prefers-color-scheme:dark) {
  :root:not([data-theme=light]) {
  --theme-foreground:#dfdfd6;
  --theme-foreground-focus:oklch(0.712564 0.257662 265.758);
  --theme-background-b:#161616;
  --theme-background-a:color-mix(in srgb,var(--theme-foreground) 4%,var(--theme-background-b));
  --theme-background:var(--theme-background-a);
  --theme-background-alt:var(--theme-background-b);
  --theme-foreground-alt:color-mix(in srgb,var(--theme-foreground) 90%,var(--theme-background-b));
  --theme-foreground-muted:color-mix(in srgb,var(--theme-foreground) 60%,var(--theme-background-b));
  --theme-foreground-faint:color-mix(in srgb,var(--theme-foreground) 50%,var(--theme-background-b));
  --theme-foreground-fainter:color-mix(in srgb,var(--theme-foreground) 30%,var(--theme-background-b));
  --theme-foreground-faintest:color-mix(in srgb,var(--theme-foreground) 14%,var(--theme-background-b));
  color-scheme:dark;
  }
}

/* Framework owns appearance; legacy site components consume its semantic roles. */
:root {
  --og-bg:var(--theme-background); --og-bg-soft:var(--theme-background-alt);
  --og-panel:var(--theme-background); --og-panel-strong:var(--theme-background-alt);
  --og-panel-border:var(--theme-foreground-faintest);
  --og-text:var(--theme-foreground); --og-text-muted:var(--theme-foreground-muted);
  --og-text-soft:var(--theme-foreground-faint);
  --og-accent:var(--theme-foreground-focus); --og-accent-strong:var(--theme-foreground-focus);
  --og-accent-soft:var(--theme-background-alt); --og-danger:var(--theme-red,#ff725c);
  --og-radius:4px; --og-shadow:none;
}
html {scroll-behavior:smooth;}
body {font-family:"Source Serif 4",Georgia,serif;color:var(--theme-foreground);background:var(--theme-background);}
h1,h2,h3,h4,h5,h6,th,.site-brand strong,.site-primary-nav,.eyebrow,.card-kicker,.status-pill,.meta-badge {font-family:"IBM Plex Sans",system-ui,sans-serif;}
code,pre,.site-brand-mark {font-family:"IBM Plex Mono",monospace;}
a,a:hover {color:var(--theme-foreground-focus);}
p,li {line-height:1.65;}
/* Native Framework table defaults, without card surfaces or clipped corners. */
table {width:100%;font:13px/1.2 var(--sans-serif,system-ui,sans-serif);border-collapse:collapse;margin:1rem 0;background:transparent;border:0;border-radius:0;overflow:visible;}
th {color:var(--theme-foreground);text-align:left;vertical-align:bottom;}
td {color:var(--theme-foreground-alt);vertical-align:top;}
th,td {padding:3px 6.5px 3px 0;border:0;background:transparent;}
th:last-child,td:last-child {padding-right:0;}
tr:not(:last-child) {border-bottom:solid 1px var(--theme-foreground-faintest);}
thead tr {border-bottom:solid 1px var(--theme-foreground-fainter);}
blockquote {margin:1.5rem 0;padding:0 1rem;border-left:3px solid var(--theme-foreground-fainter);color:var(--theme-foreground-alt);}
pre,.observablehq pre {background:var(--theme-background-alt);border:1px solid var(--theme-foreground-faintest);border-radius:4px;}
hr {border:0;border-top:1px solid var(--theme-foreground-faintest);margin:2.5rem 0;}
.data-panel {min-width:0;max-width:100%;overflow-x:auto;}

#observablehq-header {
  position: sticky;
  top: 0;
  z-index: 40;
  backdrop-filter: blur(14px);
  background:var(--theme-background-alt);
  border-bottom: 1px solid var(--theme-foreground-faintest);
}

.site-header-shell,
.site-footer-shell,
#observablehq-main,
#observablehq-footer {
  max-width: 1180px;
  margin: 0 auto;
}

.site-header-bar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem 2rem;
  padding: 1rem 1.5rem;
}

.site-brand {
  display: inline-flex;
  align-items: center;
  gap: 0.85rem;
  text-decoration: none;
  color: var(--og-text);
}

.site-brand-mark {
  width: 2.4rem;
  height: 2.4rem;
  border-radius: 0.8rem;
  display: grid;
  place-items: center;
  color: var(--theme-foreground);
  background:var(--theme-background-alt);
  box-shadow: inset 0 0 0 1px rgba(16, 23, 22, 0.2);
}

.site-brand-copy {
  display: grid;
  gap: 0.05rem;
}

.site-brand-copy strong {
  font-size: 0.95rem;
  letter-spacing: 0.02em;
}

.site-brand-copy span {
  color: var(--og-text-soft);
  font-size: 0.78rem;
}

.site-primary-nav {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 0.45rem;
}

.site-primary-nav a {
  padding: 0.45rem 0.75rem;
  border-radius: 999px;
  color: var(--og-text-muted);
  text-decoration: none;
  font-size: 0.85rem;
}

.site-primary-nav a:hover,
.site-primary-nav a.is-active {
  color: var(--og-text);
  background:var(--theme-background-alt);
}

#observablehq-main {
  padding: 2.5rem 1.5rem 4rem;
}

#observablehq-main h1 {
  font-size: clamp(2.35rem, 4vw, 4.5rem);
  line-height: 1.02;
  margin-bottom: 0.75rem;
  letter-spacing: -0.03em;
}

#observablehq-main h2 {
  margin-top: 2.8rem;
  margin-bottom: 0.7rem;
  font-size: clamp(1.5rem, 2vw, 2rem);
  letter-spacing: -0.02em;
}

#observablehq-main h3 {
  margin-top: 2rem;
  margin-bottom: 0.5rem;
  font-size: 1.15rem;
}

.page-intro,
.home-hero {
  padding: clamp(1.35rem, 3vw, 2rem);
  margin-bottom: 1.75rem;
  border: 1px solid var(--og-panel-border);
  border-radius: calc(var(--og-radius) + 6px);
  background:var(--theme-background-alt);
  box-shadow: var(--og-shadow);
}

.eyebrow {
  text-transform: uppercase;
  letter-spacing: 0.14em;
  font-size: 0.78rem;
  color: var(--og-accent);
  margin: 0 0 0.85rem;
}

.page-deck,
.hero-deck {
  max-width: 50rem;
  font-size: 1.1rem;
  color: var(--og-text-muted);
  margin-bottom: 0;
}

.badge-row,
.hero-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin-top: 1rem;
}

.meta-badge,
.hero-actions a {
  display: inline-flex;
  align-items: center;
  min-height: 2rem;
  padding: 0.35rem 0.7rem;
  border-radius: 999px;
  background:var(--theme-background-alt);
  border: 1px solid var(--theme-foreground-faintest);
  color: var(--og-text);
  text-decoration: none;
  font-size: 0.8rem;
}

.hero-actions a.primary-link {
  background:var(--theme-background-alt);
}

.card-grid,
.related-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 1rem;
  margin: 1.2rem 0 2rem;
}

.site-card,
.related-link,
.stat-block,
.callout {
  border-radius: var(--og-radius);
  border: 1px solid var(--og-panel-border);
  background:var(--theme-background-alt);
  box-shadow: var(--og-shadow);
}

.site-card,
.related-link {
  display: block;
  padding: 1rem 1rem 1.1rem;
  text-decoration: none;
  color: var(--og-text);
}

.site-card:hover,
.related-link:hover {
  transform: translateY(-2px);
  border-color: var(--theme-foreground-faintest);
}

.site-card.is-planned {
  opacity: 0.88;
}

.card-kicker {
  margin: 0 0 0.55rem;
  color: var(--og-accent);
  text-transform: uppercase;
  letter-spacing: 0.1em;
  font-size: 0.74rem;
}

.site-card h3,
.related-link span {
  margin: 0 0 0.45rem;
  font-size: 1.08rem;
}

.site-card p,
.related-link small,
.site-footer-shell p {
  color: var(--og-text-muted);
}

.status-pill {
  display: inline-flex;
  margin-top: 0.75rem;
  padding: 0.24rem 0.6rem;
  border-radius: 999px;
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}

.status-pill.is-live {
  color:var(--theme-foreground);
  background:var(--theme-background-alt);
}

.status-pill.is-planned {
  color:var(--theme-foreground);
  background:var(--theme-background-alt);
}

.callout {
  margin: 1.25rem 0 1.5rem;
  padding: 1rem 1.05rem;
}

.callout strong {
  display: block;
  margin-bottom: 0.3rem;
  font-family: "IBM Plex Sans", sans-serif;
}

.callout p {
  margin: 0;
  color: var(--og-text-muted);
}

.callout-warning {
  border-color: var(--theme-foreground-faintest);
  background:var(--theme-background-alt);
}

.callout-note {
  border-color: var(--theme-foreground-faintest);
}

.stat-band {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 1rem;
  margin: 1.25rem 0 2rem;
}

.stat-block {
  padding: 1rem;
}

.stat-block strong {
  display: block;
  font-size: 1.7rem;
  font-family: "IBM Plex Sans", sans-serif;
}

.stat-block span {
  color: var(--og-text-soft);
  font-size: 0.9rem;
}

.diagram-frame {
  margin: 1.5rem 0 2rem;
  padding: 0.75rem;
  border-radius: var(--og-radius);
  background:var(--theme-background-alt);
  border: 1px solid var(--og-panel-border);
}

.data-panel {
  margin: 1.2rem 0 2rem;
  padding: 1rem;
  border-radius: var(--og-radius);
  border: 1px solid var(--og-panel-border);
  background:var(--theme-background-alt);
  box-shadow: var(--og-shadow);
}

.geo-figure {
  margin: 1.2rem 0 1rem;
}

.geo-figure figcaption {
  display: grid;
  gap: 0.2rem;
  margin-bottom: 0.75rem;
}

.geo-figure figcaption strong {
  font-family: "IBM Plex Sans", sans-serif;
}

.geo-figure figcaption span {
  color: var(--og-text-soft);
  font-size: 0.9rem;
}

.geo-svg {
  width: 100%;
  height: auto;
  display: block;
  border-radius: calc(var(--og-radius) - 2px);
  border: 1px solid var(--theme-foreground-faintest);
  background:var(--theme-background-alt);
}

.dynamic-map-frame {
  margin: 1.2rem 0 1rem;
  border-radius: calc(var(--og-radius) - 2px);
  border: 1px solid var(--theme-foreground-faintest);
  overflow: hidden;
  background:var(--theme-background-alt);
  box-shadow: var(--og-shadow);
}

.dynamic-map {
  width: 100%;
  min-height: 360px;
}

.dynamic-map .leaflet-control-attribution,
.dynamic-map .leaflet-control-scale,
.maplibregl-ctrl-group,
.maplibregl-popup-content {
  font-family: "IBM Plex Sans", sans-serif;
}

.leaflet-popup-content-wrapper,
.leaflet-popup-tip,
.maplibregl-popup-content {
  color: var(--theme-foreground);
}

.map-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 0.65rem 1rem;
  margin: 0.65rem 0 1.5rem;
}

.legend-item {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  color: var(--og-text-muted);
  font-size: 0.9rem;
}

.legend-swatch {
  width: 0.95rem;
  height: 0.95rem;
  border-radius: 0.2rem;
  border: 1px solid var(--theme-foreground-faintest);
}

.bar-list {
  display: grid;
  gap: 0.75rem;
}

.bar-row {
  display: grid;
  gap: 0.35rem;
}

.bar-label {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  font-size: 0.92rem;
  color: var(--og-text-muted);
}

.bar-label strong {
  color: var(--og-text);
  font-family: "IBM Plex Sans", sans-serif;
}

.bar-track {
  width: 100%;
  height: 0.7rem;
  border-radius: 999px;
  background:var(--theme-background-alt);
  overflow: hidden;
}

.bar-fill {
  height: 100%;
  border-radius: 999px;
}

.code-output-panel {
  margin: 1rem 0 2rem;
}

.section-label {
  font-family: "IBM Plex Sans", sans-serif;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: var(--og-accent);
  font-size: 0.76rem;
}

.toolchain-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 1rem;
  margin: 1rem 0 2rem;
}

.toolchain-card {
  padding: 1rem;
  border-radius: var(--og-radius);
  border: 1px solid var(--og-panel-border);
  background:var(--theme-background-alt);
}

.toolchain-card strong {
  display: block;
  margin-bottom: 0.35rem;
  font-family: "IBM Plex Sans", sans-serif;
}

.control-strip {
  margin: 1rem 0 1.25rem;
}

.control-strip label {
  font-family: "IBM Plex Sans", sans-serif;
}

.control-note {
  margin-top: 0.5rem;
  color: var(--og-text-soft);
  font-size: 0.9rem;
}

.key-value-list {
  display: grid;
  gap: 0.8rem;
  margin: 0;
}

.key-value-list div {
  display: grid;
  gap: 0.15rem;
}

.key-value-list dt {
  font-family: "IBM Plex Sans", sans-serif;
  color: var(--og-text-soft);
}

.key-value-list dd {
  margin: 0;
}

.popup-table {
  display: grid;
  gap: 0.35rem;
  min-width: 180px;
}

.popup-table div {
  display: grid;
  gap: 0.1rem;
}

.popup-table strong {
  font-size: 0.78rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: #4d5c56;
}

.popup-table span {
  font-size: 0.9rem;
  color: var(--theme-foreground);
}

#observablehq-footer {
  padding: 0 1.5rem 3rem;
}

.site-footer-shell {
  display: flex;
  justify-content: space-between;
  gap: 1.5rem;
  padding: 1.25rem 0 0;
  border-top: 1px solid var(--theme-foreground-faintest);
}

.site-footer-links {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 0.65rem 1rem;
}

.site-footer-links a {
  color: var(--og-text-muted);
  text-decoration: none;
}

@media (max-width: 900px) {
  .site-header-bar,
  .site-footer-shell {
    flex-direction: column;
    align-items: flex-start;
  }

  .site-primary-nav,
  .site-footer-links {
    justify-content: flex-start;
  }

  #observablehq-main {
    padding-top: 1.6rem;
  }
}

@media (max-width: 640px) {
  #observablehq-main,
  #observablehq-footer {
    padding-left: 1rem;
    padding-right: 1rem;
  }

  .site-header-bar {
    padding-left: 1rem;
    padding-right: 1rem;
  }

  .page-deck,
  .hero-deck {
    font-size: 1rem;
  }
}


/* Compact technical article layout; appearance comes from Framework tokens. */
#observablehq-header {background:var(--theme-background);backdrop-filter:none;}
.site-brand-mark {color:var(--theme-foreground);background:var(--theme-background-alt);box-shadow:none;border-radius:4px;}
#observablehq-main {max-width:1060px;padding:2rem 1.5rem 3rem;}
#observablehq-main h1 {font-size:clamp(2rem,4vw,3rem);line-height:1.15;max-width:28ch;}
#observablehq-main h2 {font-size:1.45rem;margin-top:2rem;}
p,li {max-width:78ch;line-height:1.65;}
a {text-underline-offset:3px;}
.page-intro,.home-hero {padding:0 0 1rem;background:none;border:0;box-shadow:none;}
.page-deck,.hero-deck {font-size:1.15rem;max-width:70ch;}
.site-card,.callout,.stat-block,.key-value-panel,.data-panel,.toolchain-card,.related-link {background:var(--theme-background);box-shadow:none;}
.site-card:hover,.related-link:hover {background:var(--theme-background-alt);box-shadow:none;transform:none;}
.site-card h3 {font-size:1.15rem;}
.status-pill,.badge-row {display:none;}
.geo-figure,.geo-figure figcaption,.geo-svg,.map-legend {background:#fff;color:#172635;}
pre code {color:var(--theme-foreground);}
button,input,select {color:var(--theme-foreground);background:var(--theme-background);border-color:var(--theme-foreground-fainter);}
:focus-visible {outline:3px solid var(--theme-foreground-focus);outline-offset:3px;}
.named-projects {display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:1.5rem;}
.named-project {border-top:1px solid var(--theme-foreground-faintest);padding-top:.5rem;}
.named-project h2 {font-size:1.15rem!important;margin-top:1rem!important;}
.named-project nav {display:flex;gap:1rem;flex-wrap:wrap;font:14px/1.5 system-ui;}
.named-project nav span {color:var(--theme-foreground-muted);}
@media(max-width:600px){#observablehq-main{padding:1.5rem 1rem}.geo-svg{max-width:100%;height:auto}.data-table{display:block;overflow:auto}pre{max-width:100%;overflow:auto}}

/* Hosted site chrome and shared reading tokens, after compiler-specific styles. */
html.opengeo-site,html.opengeo-site body { margin:0; padding:0; background:var(--og-bg); color:var(--og-text); }
html.opengeo-site { scroll-padding-top:0; scroll-behavior:auto; }
.opengeo-site body { font:17px/1.65 "Source Serif 4",Georgia,serif; }
.opengeo-site * { box-sizing:border-box; }
.opengeo-site a,.opengeo-site a:hover { color:var(--og-accent); }
.opengeo-site :focus-visible { outline:3px solid var(--og-accent); outline-offset:3px; }
.opengeo-site .site-header { position:sticky; top:0; z-index:60; background:var(--og-bg); border-bottom:1px solid var(--og-panel-border); font:14px/1.4 "IBM Plex Sans",system-ui,sans-serif; }
.opengeo-site .site-header-bar { max-width:1760px; margin:auto; display:flex; flex-direction:row; align-items:center; gap:20px; padding:16px 24px; }
.opengeo-site .site-brand { flex-shrink:0; color:var(--og-text); }
.opengeo-site .site-brand-mark { background:var(--theme-background-alt); color:var(--theme-foreground);border:1px solid var(--theme-foreground-faintest); border-radius:4px; }
.opengeo-site .site-brand-copy strong { font-size:16px; }
.opengeo-site .site-brand-copy span { color:var(--og-text-muted); }
.opengeo-site .site-primary-nav { margin-left:auto; gap:2px; flex-wrap:nowrap; }
.opengeo-site .site-primary-nav a { white-space:nowrap; color:var(--og-text-muted); padding:8px; border-radius:4px; }
.opengeo-site a[aria-current=page],.opengeo-site a[aria-current=location],.opengeo-site .site-primary-nav a:hover { background:var(--theme-background-alt); color:var(--theme-foreground); }
.opengeo-site .site-appearance { display:flex; align-items:center; gap:8px; flex-shrink:0; }
.opengeo-site #site-appearance,.opengeo-site #site-menu-toggle { font:inherit; padding:7px 8px; background:var(--og-bg); color:var(--og-text); border:1px solid var(--og-panel-border); border-radius:4px; }
.opengeo-site #site-menu-toggle { display:flex; align-items:center; justify-content:center; flex-shrink:0; width:36px; height:36px; padding:7px; border:0; background:none; color:var(--theme-foreground-muted); cursor:pointer; }
.opengeo-site #site-menu-toggle:hover { color:var(--theme-foreground); background:var(--theme-background-alt); }
.opengeo-site .site-skip { position:fixed; left:16px; top:-100px; z-index:100; padding:10px; background:var(--og-bg); }
.opengeo-site .site-skip:focus { top:8px; }
.opengeo-site .site-layout { display:grid; grid-template-columns:230px minmax(0,1000px) 192px; gap:32px; max-width:1600px; margin:0 auto; padding:32px 24px 48px; }
.opengeo-site #site-navigation,.opengeo-site #page-outline { align-self:start; position:sticky; top:calc(var(--site-header-height,88px) + 24px); max-height:calc(100dvh - var(--site-header-height,88px) - 48px); overflow:auto; font:14px/1.5 "IBM Plex Sans",system-ui,sans-serif; }
.opengeo-site #site-navigation { padding-right:16px; border-right:1px solid var(--og-panel-border); }
.opengeo-site #site-navigation a { display:block; padding:6px 8px; margin:2px 0; text-decoration:none; color:var(--og-text-muted); border-radius:4px; }
.opengeo-site #site-navigation a:hover { color:var(--og-accent); background:var(--og-accent-soft); }
.opengeo-site #site-navigation details { margin:12px 0; }
.opengeo-site #site-navigation summary { cursor:pointer; font-weight:600; padding:6px 0; color:var(--og-text); }
.opengeo-site #site-navigation details a { padding-left:16px; }
.opengeo-site #page-outline { grid-column:3; grid-row:1; padding-left:16px; border-left:1px solid var(--og-panel-border); }
.opengeo-site #page-outline h2 { margin:0; padding:6px 0; font:600 14px/1.5 "IBM Plex Sans",system-ui,sans-serif; color:var(--og-text); }
.opengeo-site #page-outline ol { list-style:none; margin:10px 0 0; padding:0; }
.opengeo-site #page-outline li { margin:5px 0; line-height:1.5; }
.opengeo-site #page-outline a { display:block; padding:4px 6px; text-decoration:none; color:var(--og-text-muted); border-radius:4px; }
.opengeo-site #page-outline .outline-subsection { padding-left:12px; font-size:13px; }
.opengeo-site .site-reading { min-width:0; grid-column:2; }
.opengeo-site #observablehq-main,.opengeo-site main { min-width:0; width:100%; max-width:none; padding:0; margin:0; grid-column:2; }
.opengeo-site main h1 { font-size:clamp(2rem,3.4vw,3rem); line-height:1.15; letter-spacing:-.025em; max-width:32ch; }
.opengeo-site main h2 { font-size:1.5rem; margin-top:2.5rem; }
.opengeo-site main h3 { font-size:1.15rem; }
.opengeo-site main [id] { scroll-margin-top:calc(var(--site-header-height,88px) + 24px); }
.opengeo-site main p,.opengeo-site main li { max-width:78ch; }
.opengeo-site main :is(h1,h2,h3,h4,th),.opengeo-site .site-footer { font-family:"IBM Plex Sans",system-ui,sans-serif; }
.opengeo-site .page-intro,.opengeo-site .home-hero { background:none; }
.opengeo-site :is(.page-deck,.hero-deck,.card-kicker,.meta-badge,.site-card p,.named-project nav span) { color:var(--og-text-muted); }
.opengeo-site :is(.site-card,.callout,.stat-block,.key-value-panel,.note) { background:var(--og-panel); border-color:var(--og-panel-border); color:var(--og-text); box-shadow:none; }
.opengeo-site .site-card:hover { background:var(--og-bg-soft); }
.opengeo-site .site-card h3 { color:var(--og-text); }
.opengeo-site table {background:transparent;border:0;border-radius:0;overflow:visible;}
.opengeo-site th {background:transparent;color:var(--theme-foreground);}
.opengeo-site td {background:transparent;color:var(--theme-foreground-alt);}
/* Inputs sticky headers and row separators outrank its bundled white/light CSS. */
.opengeo-site form[class*="-table"] thead th {background:var(--theme-background);color:var(--theme-foreground);}
.opengeo-site form[class*="-table"] tr:not(:last-child) :is(td,th) {border-bottom:1px solid var(--theme-foreground-faintest);}
.opengeo-site form[class*="-table"] thead tr :is(td,th) {border-bottom:1px solid var(--theme-foreground-fainter);}
.opengeo-site :is(pre,pre code) { background:var(--og-bg-soft); color:var(--og-text); border-color:var(--og-panel-border); }
.opengeo-site :is(button,input,select,textarea) { color:var(--og-text); background-color:var(--og-bg); border-color:var(--og-panel-border); accent-color:var(--og-accent); }
/* Cartographic examples retain their encoded palette and paper surface in both modes. */
.opengeo-site :is(.geo-figure,.geo-svg,.map-legend) { background:#fff; color:#172635; color-scheme:light; border-color:#ccd8df; }
.opengeo-site .opengeo-notebook figure {background:var(--og-bg-soft);color:var(--og-text);border-color:var(--og-panel-border);color-scheme:inherit;}
.opengeo-site .opengeo-notebook figcaption {color:var(--theme-foreground-alt);background:none;}
.opengeo-site .site-studio-link {flex-shrink:0;white-space:nowrap;font-weight:600;text-decoration:none;padding:7px 8px;border:1px solid var(--og-panel-border);border-radius:4px;}
.opengeo-site .geo-figure figcaption { background:#fff; color:#172635; }
.opengeo-site .site-pager { display:flex; justify-content:space-between; gap:24px; border-top:1px solid var(--og-panel-border); margin:48px 0 0; padding:20px 0; font:14px/1.5 "IBM Plex Sans",system-ui,sans-serif; }
.opengeo-site .site-pager a { max-width:48%; }
.opengeo-site .site-footer { max-width:1600px; margin:auto; padding:24px; border-top:1px solid var(--og-panel-border); color:var(--og-text-muted); font-size:14px; }
.opengeo-site .site-footer nav { display:flex; flex-wrap:wrap; gap:16px; }
.opengeo-site :is(#observablehq-sidebar,#observablehq-sidebar-toggle,#observablehq-sidebar-backdrop,#observablehq-toc,#observablehq-header,#observablehq-footer,#observablehq-center) { display:none!important; }
.opengeo-site #site-menu-backdrop { display:none; }
@media(max-width:1399px) {
  .opengeo-site .site-layout { grid-template-columns:210px minmax(0,1fr) 192px; gap:24px; }
  .opengeo-site .site-primary-nav { display:none; }
  .opengeo-site .site-appearance { margin-left:auto; }
}
@media(min-width:1008px) and (max-width:1247px) {
  .opengeo-site .site-layout { grid-template-columns:210px minmax(0,1fr); }
  .opengeo-site #page-outline { display:none; }
}
@media(min-width:1008px) {
  .opengeo-site.site-sidebar-collapsed #site-navigation { display:none; }
  .opengeo-site.site-sidebar-collapsed .site-layout { grid-template-columns:minmax(0,1000px) 192px; justify-content:center; }
  .opengeo-site.site-sidebar-collapsed .site-reading { grid-column:1; }
  .opengeo-site.site-sidebar-collapsed #page-outline:not([hidden]) { display:block; grid-column:2; }
}
@media(max-width:1007px) {
  .opengeo-site .site-layout { display:flex; flex-direction:column; padding:24px 20px 40px; gap:20px; }
  .opengeo-site #page-outline { display:none; }
  .opengeo-site #site-navigation { display:none; }
  .opengeo-site.site-menu-open #site-navigation { display:block; position:fixed; z-index:80; inset:var(--site-header-height,88px) auto 0 0; width:min(272px,85vw); height:calc(100dvh - var(--site-header-height,88px)); max-height:none; padding:20px 16px; overscroll-behavior:contain; background:var(--theme-background-alt); border-right:1px solid var(--og-panel-border); }
  .opengeo-site.site-menu-open #site-menu-backdrop { display:block; position:fixed; z-index:70; inset:var(--site-header-height,88px) 0 0; background:rgb(0 0 0 / .4); border:0; width:100%; }
  .opengeo-site.site-menu-open { overflow:hidden; }
}
@media(max-width:599px) {
  .opengeo-site .site-header-bar { gap:8px; padding:12px; flex-wrap:wrap; }
  .opengeo-site .site-appearance { margin-left:0; }
  .opengeo-site .site-brand { margin-right:auto; }
  .opengeo-site .site-brand-mark,.opengeo-site .site-brand-copy span,.opengeo-site .site-appearance span { display:none; }
  .opengeo-site .site-brand-copy strong { font-size:15px; }
  .opengeo-site .site-layout { padding:20px 16px 32px; }
  .opengeo-site.site-menu-open #site-navigation,.opengeo-site.site-menu-open #site-menu-backdrop { top:var(--site-header-height,64px); }
  
  .opengeo-site main [id] { scroll-margin-top:calc(var(--site-header-height,64px) + 20px); }
  .opengeo-site main { font-size:16px; }
  .opengeo-site pre { max-width:100%; overflow:auto; }
  .opengeo-site .data-table { display:block; overflow:auto; }
}
@media print {
  .opengeo-site :is(.site-header,#site-navigation,#page-outline,.site-footer,.site-pager,#site-menu-backdrop) { display:none!important; }
  .opengeo-site .site-layout { display:block; padding:0; }
  html.opengeo-site { --theme-background:#fff; --theme-background-alt:#f6f6f6; --theme-foreground:#1b1e23; --theme-foreground-alt:#1b1e23; --theme-foreground-muted:#555; --theme-foreground-focus:#3b5fc0; color-scheme:light; }
}
