:root {
  --opengeo-muted: var(--theme-foreground-muted);
  --opengeo-line: var(--theme-foreground-faintest);
  --opengeo-panel: var(--theme-background-alt);
  --opengeo-panel-strong: color-mix(in srgb, var(--theme-background-alt) 88%, var(--theme-foreground) 12%);
  --opengeo-blue: var(--theme-foreground-focus);
  --opengeo-green: var(--theme-green);
  --opengeo-gold: var(--theme-yellow);
  --opengeo-red: var(--theme-red);
}

.platform-route-bar {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  min-height: 44px;
  padding: 0.35rem 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 0.55rem;
  background: var(--opengeo-panel);
  overflow-x: auto;
}

.platform-route-bar a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 0 0.65rem;
  border-radius: 0.4rem;
  color: var(--theme-foreground);
  text-decoration: none;
  white-space: nowrap;
}

.platform-route-bar a:hover,
.platform-route-bar a:focus-visible {
  background: var(--opengeo-panel-strong);
  color: var(--opengeo-blue);
}

.platform-route-brand {
  font-weight: 700;
}

.project-route-target {
  outline: 2px solid var(--opengeo-blue);
  outline-offset: 3px;
}

body {
  color: var(--theme-foreground);
}

a {
  color: var(--theme-foreground-focus);
}

.summary-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
  gap: 0.75rem;
  margin: 1rem 0;
}

.summary-tile {
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.85rem;
  background: var(--opengeo-panel);
  color: var(--theme-foreground);
}

.summary-tile strong {
  display: block;
  font-size: 1.7rem;
  line-height: 1.1;
}

.summary-tile span {
  color: var(--opengeo-muted);
  font-size: 0.86rem;
}

.app-entry-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.8rem;
  margin: 1rem 0 1.25rem;
}

.app-entry-card {
  display: grid;
  gap: 0.35rem;
  min-height: 7rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--opengeo-panel);
  color: var(--theme-foreground);
  padding: 0.9rem;
  text-decoration: none;
}

.app-entry-card:hover {
  border-color: var(--theme-foreground-focus);
  background: color-mix(in srgb, var(--opengeo-panel) 84%, var(--theme-foreground-focus) 16%);
}

.app-entry-card span {
  color: var(--opengeo-muted);
}

.data-table {
  width: 100%;
  border-collapse: collapse;
  margin: 0.75rem 0 1.25rem;
  font-size: 0.92rem;
}

.data-table th,
.data-table td {
  border-bottom: 1px solid var(--opengeo-line);
  padding: 0.55rem 0.45rem;
  text-align: left;
  vertical-align: top;
}

.data-table th {
  color: var(--opengeo-muted);
  font-weight: 600;
}

.badge {
  display: inline-flex;
  align-items: center;
  min-height: 1.4rem;
  border-radius: 999px;
  padding: 0 0.5rem;
  border: 1px solid var(--opengeo-line);
  background: var(--opengeo-panel);
  color: var(--opengeo-muted);
  font-size: 0.78rem;
  white-space: nowrap;
}

.badge.owner,
.badge.admin {
  border-color: color-mix(in srgb, var(--opengeo-blue) 58%, var(--theme-background));
  background: color-mix(in srgb, var(--opengeo-blue) 16%, var(--theme-background-alt));
  color: var(--theme-foreground);
}

.badge.editor,
.badge.manager {
  border-color: color-mix(in srgb, var(--opengeo-green) 58%, var(--theme-background));
  background: color-mix(in srgb, var(--opengeo-green) 14%, var(--theme-background-alt));
  color: var(--theme-foreground);
}

.badge.demo {
  border-color: color-mix(in srgb, var(--opengeo-blue) 52%, var(--theme-background));
  background: color-mix(in srgb, var(--opengeo-blue) 13%, var(--theme-background-alt));
  color: var(--theme-foreground);
}

.badge.auditor {
  border-color: color-mix(in srgb, var(--opengeo-gold) 58%, var(--theme-background));
  background: color-mix(in srgb, var(--opengeo-gold) 16%, var(--theme-background-alt));
  color: var(--theme-foreground);
}

.badge.private,
.badge.restricted {
  border-color: color-mix(in srgb, var(--opengeo-red) 58%, var(--theme-background));
  background: color-mix(in srgb, var(--opengeo-red) 15%, var(--theme-background-alt));
  color: var(--theme-foreground);
}

.toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  align-items: end;
  margin: 1rem 0;
}

.toolbar > * {
  min-width: 12rem;
}

.note {
  border-left: 3px solid var(--opengeo-blue);
  color: var(--opengeo-muted);
  padding: 0.35rem 0 0.35rem 0.85rem;
  margin: 1rem 0;
}

.platform-surface,
.platform-workspace {
  display: grid;
  gap: 1rem;
  margin: 1rem 0 2rem;
}

.platform-mode {
  width: fit-content;
  border: 1px solid var(--opengeo-line);
  border-radius: 999px;
  padding: 0.28rem 0.65rem;
  color: var(--opengeo-muted);
  background: var(--opengeo-panel);
  font-size: 0.78rem;
}

.platform-mode-fixture {
  border-color: color-mix(in srgb, var(--opengeo-gold) 60%, var(--theme-background));
  color: var(--theme-foreground);
}

.platform-state,
.platform-session,
.platform-auth,
.platform-heading,
.platform-project-header {
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 1rem;
  background: var(--opengeo-panel);
}

.platform-state h2,
.platform-state h3,
.platform-session h2,
.platform-auth h2,
.platform-heading h2,
.platform-project-header h1 {
  margin: 0 0 0.35rem;
}

.platform-state p,
.platform-session p,
.platform-auth p,
.platform-subtitle,
.platform-record-description,
.platform-note {
  color: var(--opengeo-muted);
}

.platform-state-loading {
  border-style: dashed;
}

.platform-auth-status {
  display: flex;
  align-items: center;
  width: fit-content;
  gap: 0.45rem;
  margin: 0 0 0.8rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 999px;
  padding: 0.28rem 0.62rem;
  font: 700 0.78rem/1.2 ui-sans-serif, system-ui, sans-serif;
}

.platform-auth-status::before {
  width: 0.55rem;
  height: 0.55rem;
  border-radius: 50%;
  background: var(--opengeo-muted);
  content: "";
}

.platform-auth-status-signed_in::before {
  background: var(--opengeo-green);
}

.platform-auth-status-expired::before {
  background: var(--opengeo-gold);
}

.platform-auth-managed-account {
  margin-top: 1rem;
  border-top: 1px solid var(--opengeo-line);
  padding-top: 0.75rem;
}

.platform-auth-managed-account summary {
  color: var(--opengeo-muted);
  cursor: pointer;
  font-size: 0.86rem;
}

.platform-auth-managed-account[open] summary {
  margin-bottom: 0.5rem;
  color: var(--theme-foreground);
}

.platform-state-error,
.platform-state-forbidden,
.platform-auth-configuration_error,
.platform-auth-callback_error {
  border-color: color-mix(in srgb, var(--opengeo-red) 54%, var(--theme-background));
}

.platform-eyebrow {
  margin: 0 0 0.25rem;
  color: var(--opengeo-blue);
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.platform-controls,
.platform-actions,
.platform-project-controls {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  align-items: center;
}

.platform-project-recovery-list {
  margin-top: 1rem;
  border-top: 1px solid var(--opengeo-line);
  padding-top: 1rem;
}

.platform-project-recovery-list ul {
  display: grid;
  gap: 0.45rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.platform-project-recovery-list a {
  display: flex;
  align-items: center;
  min-height: 44px;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.55rem 0.7rem;
  color: var(--theme-foreground);
  background: var(--theme-background);
  text-decoration: none;
}

.platform-project-recovery-list a:hover,
.platform-project-recovery-list a:focus-visible {
  border-color: var(--opengeo-blue);
  color: var(--opengeo-blue);
}

.platform-controls input,
.platform-controls select,
.platform-project-controls select {
  min-height: 2.35rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.4rem 0.55rem;
  color: var(--theme-foreground);
  background: var(--theme-background);
}

.platform-controls input {
  flex: 1 1 18rem;
}

.platform-button {
  display: inline-flex;
  align-items: center;
  box-sizing: border-box;
  justify-content: center;
  min-height: 2.5rem;
  max-width: 100%;
  gap: .35rem;
  border: 1px solid #245fc5;
  border-radius: 6px;
  padding: 0.38rem 0.65rem;
  color: #fff;
  background: #245fc5;
  font: inherit;
  text-decoration: none;
  cursor: pointer;
  line-height: 1.35;
  vertical-align: middle;
  white-space: normal;
  overflow-wrap: anywhere;
}

.platform-button:any-link {
  color: #fff;
}

.framework-build-history [hidden] {
  display: none !important;
}

.platform-button-secondary,
.platform-button.secondary,
.platform-button-secondary:any-link,
.platform-button.secondary:any-link,
.platform-button:disabled {
  border-color: var(--opengeo-line);
  color: var(--theme-foreground);
  background: var(--opengeo-panel);
}

.platform-button:focus-visible { outline: 2px solid var(--theme-foreground-focus); outline-offset: 3px; }
.platform-button:hover:not(:disabled) { filter: brightness(1.08); text-decoration: none; }
.platform-controls select, .platform-project-controls select { box-sizing: border-box; min-height: 2.5rem; max-width: 100%; font: inherit; }
.platform-controls label { display: inline-flex; flex-wrap: wrap; align-items: center; gap: .4rem; min-width: 0; max-width: 100%; }
.composition-directory > .platform-controls { align-items: center; }
.composition-directory > .platform-controls > label { flex: 0 1 auto; flex-wrap: nowrap; min-height: 2.5rem; cursor: pointer; }
.composition-directory > .platform-controls input[type="checkbox"] { box-sizing: border-box; width: 1rem; min-width: 1rem; height: 1rem; min-height: 0; margin: 0; padding: 0; flex: 0 0 auto; accent-color: var(--theme-foreground-focus); }
.layer-resource-reuse .platform-controls { align-items: end; margin-block: .6rem; }
.layer-resource-reuse .platform-controls label { flex: 1 1 18rem; display: grid; gap: .35rem; }
.layer-resource-reuse select { width: 100%; min-width: 0; }
.layer-resource-reuse .platform-button[hidden] { display: none; }
@media (pointer: coarse) { .platform-button, .platform-controls select { min-height: 44px; } }

.platform-button:disabled {
  cursor: default;
}

.platform-heading,
.platform-project-header {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  align-items: start;
}

.platform-project-sections {
  display: flex;
  align-items: flex-end;
  gap: 0.15rem;
  overflow-x: auto;
  border-bottom: 1px solid var(--opengeo-line);
  padding: 0.2rem 0.15rem 0;
}

.platform-project-sections .project-section-link {
  display: inline-flex;
  flex: 0 0 auto;
  min-height: 2.5rem;
  box-sizing: border-box;
  align-items: center;
  border: 1px solid transparent;
  border-bottom-width: 2px;
  border-radius: 0.35rem 0.35rem 0 0;
  padding: 0.4rem 0.75rem;
  color: color-mix(in srgb, var(--theme-foreground) 72%, var(--theme-background));
  background: transparent;
  font-family: var(--sans-serif);
  font-size: 0.82rem;
  font-weight: 600;
  line-height: 1.25;
  text-decoration: none;
  white-space: nowrap;
}

.platform-project-sections .project-section-link:hover {
  color: var(--theme-foreground);
  background: var(--opengeo-panel);
  text-decoration: none;
}

.platform-project-sections .project-section-link[aria-current="page"] {
  color: var(--theme-foreground);
  border-color: var(--opengeo-line);
  border-bottom-color: var(--opengeo-blue);
  background: color-mix(in srgb, var(--opengeo-blue) 9%, var(--theme-background));
}

.platform-project-sections .project-section-link:focus-visible {
  outline: 2px solid var(--opengeo-blue);
  outline-offset: -3px;
}

.project-application-surface {
  display: grid;
  box-sizing: border-box;
  width: min(86rem, 100%);
  min-width: 0;
  gap: 1rem;
  margin: 0 auto 3rem;
}

.project-application-content {
  display: grid;
  min-width: 0;
  gap: 1rem;
}

.project-application-content > *,
.project-print-studio,
.project-print-catalog {
  min-width: 0;
  max-width: 100%;
}

.project-print-studio,
.project-print-catalog {
  display: grid;
  gap: 1rem;
}

.platform-memberships {
  display: grid;
  gap: 0.5rem;
  padding: 0;
  list-style: none;
}

.platform-admin-panel {
  display: grid;
  gap: 0.75rem;
  overflow-x: auto;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 1rem;
  background: var(--opengeo-panel);
}

.platform-admin-panel h3,
.platform-admin-panel p {
  margin: 0;
}

.platform-admin-form {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
  gap: 0.65rem;
  align-items: end;
}

.platform-admin-form label {
  display: grid;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.platform-admin-form input,
.platform-admin-form select,
.platform-admin-table select,
.platform-admin-panel > .platform-controls select {
  width: 100%;
  min-height: 2.35rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.4rem 0.55rem;
  color: var(--theme-foreground);
  background: var(--theme-background);
}

.platform-admin-table td:last-child {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.platform-mutation-feedback:not(:empty) {
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.65rem 0.8rem;
}

.platform-mutation-error {
  border-color: color-mix(in srgb, var(--opengeo-red) 54%, var(--theme-background));
}

.platform-mutation-success {
  border-color: color-mix(in srgb, #238636 54%, var(--theme-background));
}

.platform-request-id {
  font-family: var(--monospace);
  font-size: 0.82rem;
}

.platform-catalog-search {
  display: grid;
  gap: 0.75rem;
  margin-block: 1.5rem;
  padding: 1rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  background: color-mix(in srgb, var(--opengeo-panel) 76%, transparent);
}

.platform-catalog-search h2,
.platform-catalog-search p {
  margin-block: 0;
}

.platform-catalog-controls {
  display: grid;
  grid-template-columns: minmax(14rem, 2fr) repeat(3, minmax(9rem, 1fr)) auto;
}

.platform-public-resource-detail,
.platform-public-resource-state {
  display: grid;
  gap: 1rem;
  min-width: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 1rem;
  background: var(--theme-background);
}

.platform-public-resource-heading {
  display: flex;
  align-items: start;
  justify-content: space-between;
  gap: 1rem;
}

.platform-public-resource-heading h3,
.platform-public-resource-heading p,
.platform-public-resource-state h3,
.platform-public-resource-state p,
.platform-public-resource-keywords h4 {
  margin: 0;
}

.platform-public-resource-preview {
  display: grid;
  grid-template-columns: minmax(14rem, 28rem) minmax(12rem, 1fr);
  align-items: center;
  gap: 1rem;
  margin: 0;
  border-block: 1px solid var(--opengeo-line);
  padding-block: 1rem;
}

.platform-public-resource-preview svg,
.platform-public-resource-page-preview,
.platform-public-resource-document-frame {
  width: 100%;
  min-height: 10rem;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: color-mix(in srgb, var(--opengeo-panel) 86%, var(--theme-background));
}

.platform-public-resource-preview svg {
  display: block;
}

.platform-public-map-legend {
  display: grid;
  max-height: 18rem;
  gap: 0.35rem;
  margin: 0;
  padding: 0;
  overflow: auto;
  list-style: none;
}

.platform-public-map-legend li {
  display: grid;
  grid-template-columns: 0.75rem minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.45rem;
  min-width: 0;
}

.platform-public-map-legend li[data-visible="false"] {
  opacity: 0.55;
}

.platform-public-map-legend span:not(.platform-public-map-swatch) {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-public-map-legend small {
  color: var(--opengeo-muted);
}

.platform-public-map-swatch {
  width: 0.65rem;
  height: 0.65rem;
  border: 1px solid color-mix(in srgb, currentColor 35%, transparent);
  border-radius: 50%;
}

.platform-public-resource-preview[data-preview-kind="map"] figcaption {
  grid-column: 1 / -1;
}

.platform-public-resource-preview[data-preview-kind="dataset-document"] {
  grid-template-columns: minmax(0, 1fr);
  align-items: start;
}

.platform-public-dataset-document {
  max-height: min(54rem, 70vh);
  overflow: auto;
  overscroll-behavior: contain;
}

.platform-public-dataset-document > h4 {
  margin: 0;
}

.platform-public-dataset-document-page {
  display: block;
  width: auto;
  max-width: 100%;
  height: auto;
  margin: 0.75rem auto;
  border: 1px solid var(--opengeo-line);
  background: #fff;
}

.platform-public-resource-document-frame {
  width: 100%;
  min-height: 24rem;
  color-scheme: light;
}

.platform-public-resource-world {
  fill: color-mix(in srgb, var(--opengeo-blue) 8%, var(--opengeo-panel));
  stroke: var(--opengeo-line);
  stroke-width: 2;
}

.platform-public-resource-extent {
  fill: color-mix(in srgb, var(--opengeo-blue) 34%, transparent);
  stroke: var(--opengeo-blue);
  stroke-width: 3;
}

.platform-public-resource-feature-polygons {
  fill: color-mix(in srgb, var(--opengeo-blue) 34%, transparent);
  stroke: color-mix(in srgb, var(--opengeo-blue) 88%, var(--theme-foreground));
  stroke-width: 1.1;
  vector-effect: non-scaling-stroke;
}

.platform-public-resource-feature-lines {
  fill: none;
  stroke: color-mix(in srgb, var(--opengeo-blue) 88%, var(--theme-foreground));
  stroke-width: 2;
  vector-effect: non-scaling-stroke;
}

.platform-public-resource-feature-points {
  fill: var(--opengeo-blue);
  stroke: var(--theme-background);
  stroke-width: 1;
  vector-effect: non-scaling-stroke;
}

.platform-public-resource-page-preview {
  display: grid;
  align-content: center;
  gap: 0.5rem;
  padding: 1rem;
}

.platform-public-resource-page-preview p,
.platform-public-resource-preview figcaption {
  margin: 0;
  color: var(--opengeo-muted);
}

.platform-public-resource-facts {
  display: grid;
  grid-template-columns: repeat(2, minmax(8rem, 12rem) minmax(10rem, 1fr));
  gap: 0.45rem 0.75rem;
  margin: 0;
}

.platform-public-resource-facts dt {
  color: var(--opengeo-muted);
  font-size: 0.78rem;
  font-weight: 700;
}

.platform-public-resource-facts dd {
  min-width: 0;
  margin: 0;
  overflow-wrap: anywhere;
}

.platform-public-resource-keywords ul {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin: 0.5rem 0 0;
  padding: 0;
  list-style: none;
}

.platform-public-resource-keywords li {
  border: 1px solid var(--opengeo-line);
  border-radius: 999px;
  padding: 0.2rem 0.5rem;
  font-size: 0.78rem;
}

.platform-public-resource-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

@media (max-width: 900px) {
  .platform-catalog-controls {
    grid-template-columns: 1fr 1fr;
  }

  .platform-public-resource-preview,
  .platform-public-resource-facts {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 720px) {
  .platform-heading,
  .platform-project-header,
  .project-datasets-heading,
  .project-resources-heading,
  .project-upload-fields {
    display: grid;
  }

  .platform-public-resource-heading {
    display: grid;
  }

}

.project-resources,
.project-sites,
.project-services {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
  gap: 1rem;
  margin: 1rem 0 1.5rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 1rem;
  background: color-mix(in srgb, var(--opengeo-panel) 76%, transparent);
}

.project-site-catalog {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
  gap: 1rem;
}

.project-site-card {
  padding: 1rem;
  border: 1px solid var(--theme-foreground-faintest);
  border-radius: 0.5rem;
  background: var(--theme-background-alt);
  color: var(--theme-foreground);
}

.project-site-card h3 {
  margin-block: 0.4rem;
}

.project-resource-editor-panel.observable-source-workspace {
  grid-template-columns: minmax(0, 1fr);
}

.observable-source-workspace > .platform-eyebrow,
.observable-source-workspace > h2,
.observable-source-workspace > .project-resource-feedback {
  grid-column: 1 / -1;
}

.observable-source-project {
  display: grid;
  align-content: start;
  gap: 0.65rem;
  min-width: 0;
  border-color: var(--opengeo-line);
  background: var(--theme-background-alt);
}

.framework-build-history article, .framework-workflow-status {
  border: 1px solid var(--opengeo-line);
  border-radius: 0.5rem;
  padding: 0.75rem;
  margin-block: 0.75rem;
  min-width: 0;
  overflow-wrap: anywhere;
}
.framework-build-history button { margin: 0.25rem; white-space: normal; }
.framework-build-review { margin-top: 0.75rem; }
.framework-build-review summary { cursor: pointer; }
.framework-build-review dd { margin-inline-start: 0; overflow-wrap: anywhere; font-family: monospace; }
.framework-build-review dt { margin-top: 0.5rem; font-weight: 600; }
.framework-build-review table { width: 100%; table-layout: fixed; }
.framework-build-review td, .framework-build-review th { overflow-wrap: anywhere; text-align: left; }
.observable-source-policy {
  overflow-wrap: anywhere;
  color: var(--opengeo-muted);
  font-size: 0.72rem;
}

.observable-source-revision-editor {
  display: grid;
  gap: 0.6rem;
  margin: 0.4rem 0;
}

.observable-source-revision-editor label {
  display: grid;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.publication-panel-tabs {
  display: flex;
  gap: .35rem;
  border-bottom: 1px solid var(--theme-foreground-faintest);
  margin-bottom: 1rem;
  flex-wrap: wrap;
}
.publication-panel-tabs > button {
  font: inherit;
  color: var(--theme-foreground-muted);
  background: transparent;
  border: 0;
  border-bottom: 2px solid transparent;
  padding: .6rem .65rem;
  cursor: pointer;
}
.publication-panel-tabs > button[aria-selected="true"] {
  color: var(--theme-foreground-focus);
  border-bottom-color: currentColor;
}
.publication-panels > [hidden] { display: none !important; }
.project-publishing-workspace > div > [hidden] { display: none !important; }
.project-publishing-workspace { min-width: 0; font-family: var(--sans-serif, system-ui, sans-serif); }
.project-publishing-workspace [hidden] { display: none !important; }
.project-publishing-workspace fieldset { min-width: 0; border: 1px solid var(--opengeo-line); }
.project-publishing-workspace > header { display: flex; gap: 1rem; align-items: center; flex-wrap: wrap; }
.project-publishing-workspace > header select { max-width: 100%; font: inherit; padding: .5rem; }
.publication-create { margin-top: 1rem; }
.publication-commands {display: flex; gap: .2rem; border-bottom: 1px solid var(--opengeo-line); padding: .25rem 0; position: relative; z-index: 3;}
.publication-commands > details {position: relative;}
.publication-commands summary {list-style: none; padding: .4rem .65rem; cursor: pointer; border-radius: 3px; font-size: .85rem;}
.publication-commands summary::-webkit-details-marker {display: none;}
.publication-commands summary:focus-visible {outline: 2px solid var(--theme-foreground-focus);}
.publication-commands details[open] > summary {background: var(--theme-background-alt);}
.publication-command-items {position: absolute; top: 100%; left: 0; width: max-content; max-width: calc(100vw - 3rem); padding: .3rem; background: var(--theme-background); border: 1px solid var(--opengeo-line); border-radius: 4px; box-shadow: 0 5px 18px #0005;}
.publication-commands > details:last-child .publication-command-items {left: auto; right: 0;}
.publication-command-items button {display: block; width: 100%; border: 0; border-radius: 2px; background: transparent; color: var(--theme-foreground); padding: .5rem .65rem; text-align: left; font: .85rem var(--sans-serif); cursor: pointer;}
.publication-command-items button:hover, .publication-command-items button:focus-visible {background: var(--theme-background-alt);}
.publication-command-items button:disabled {opacity: .45; cursor: default;}
.publication-new-dialog {box-sizing: border-box; width: min(40rem, calc(100vw - 2rem)); max-height: 90dvh; overflow: auto; padding: 1rem; border: 1px solid var(--opengeo-line); border-radius: 6px; color: var(--theme-foreground); background: var(--theme-background);}
.publication-new-dialog::backdrop {background: #0008;}
.publication-new-dialog > button {float: right; margin-bottom: .5rem;}
.publication-new-dialog > .publication-panels {clear: both;}
.publication-new-dialog .framework-publication-setup {display: grid; gap: .65rem; padding: .5rem 0; border: 0;}
.publication-new-dialog .framework-publication-setup h3, .publication-new-dialog .framework-publication-setup p {margin: 0;}
.publication-new-dialog .framework-publication-setup label {display: grid; gap: .25rem;}
.publication-new-dialog .framework-publication-setup input, .publication-new-dialog .framework-publication-setup select {width: 100%;}
.publication-collaborators {margin-top: .75rem; border-top: 1px solid var(--opengeo-line); padding-top: .5rem; font-size: .85rem;}
.publication-address-settings {margin: .5rem 0 1rem;}
.publication-address-settings > summary {cursor: pointer; font-size: .9rem;}
.project-publishing-workspace label.publication-checkbox,
.project-publishing-workspace label:has(> input[type="checkbox"]) {display: flex; flex-direction: row; align-items: flex-start; gap: .5rem; margin: .6rem 0;}
.project-publishing-workspace label > input[type="checkbox"] {width: 1rem; min-width: 1rem; height: 1rem; padding: 0; margin: .2rem 0 0; flex: 0 0 1rem;}
.project-publishing-workspace .publication-map-insert {padding: .65rem; border: 1px solid var(--opengeo-line); margin: .6rem 0;}
.publication-map-insert > summary {cursor: pointer; margin-bottom: .5rem;}
.publication-map-insert > label {display: grid; gap: .25rem;}
.publication-map-insert input[type="file"] {width: 100%;}
.source-editor-explorer > header {display: flex; align-items: center; justify-content: space-between; font-size: .78rem; margin-bottom: .5rem;}
.source-editor-explorer > header button {padding: .1rem .5rem;}
.source-editor-explorer input {width: 100%;}
.source-editor-explorer .framework-new-page {font-size: .8rem; margin-top: .6rem; border-top: 1px solid var(--opengeo-line); padding-top: .5rem;}
.framework-new-page label {display: grid; gap: .25rem; margin: .5rem 0;}
.source-editor-layout.source-editor-explorer-hidden {grid-template-columns: minmax(0, 1fr) minmax(220px, 30%);}
@media (max-width: 650px) {.source-editor-layout.source-editor-explorer-hidden {grid-template-columns: minmax(0, 1fr);}}
.source-file-explorer summary[data-selected="true"] {color: var(--theme-foreground-focus);}
.publication-release-form { display: flex; flex-wrap: wrap; align-items: end; gap: .75rem; padding: .75rem; min-width: 0; }
.publication-release-form label { display: grid; gap: .4rem; flex: 1 1 14rem; min-width: 0; }
.publication-release-form select, .publication-release-form input[type="text"] { box-sizing: border-box; width: 100%; min-width: 0; padding: .5rem; color: var(--theme-foreground); background: var(--theme-background); border: 1px solid var(--opengeo-line); }
.publication-release-form output { flex: 1 1 100%; min-width: 0; overflow-wrap: anywhere; }
.publication-release-history > details { padding: .65rem 0; border-bottom: 1px solid var(--opengeo-line); overflow-wrap: anywhere; }
.publication-release-history summary { cursor: pointer; }
.publication-release-history > details > details { margin-top: .5rem; color: var(--theme-foreground-muted); font-size: .8rem; }
.source-editor-toolbar { display: flex; flex-wrap: wrap; gap: .5rem; }
.source-editor-trays { display: flex; flex-wrap: wrap; align-items: start; gap: .4rem; }
.source-editor-trays > details { flex: 0 1 auto; min-width: 0; border: 1px solid var(--opengeo-line); border-radius: 4px; }
.source-editor-trays > details[open] { flex-basis: 100%; padding: 0 .65rem .65rem; }
.source-editor-trays > details > summary { cursor: pointer; padding: .4rem .65rem; font-size: .82rem; font-weight: 600; }
.source-editor-file-tray > details { border-top: 1px solid var(--opengeo-line); padding: .5rem 0; }
.source-editor-file-tray > details > summary { cursor: pointer; }
.source-editor-downloads { display: flex; align-items: center; flex-wrap: wrap; gap: .4rem; border-top: 1px solid var(--opengeo-line); padding-top: .6rem; }
.source-editor-downloads > h4 { flex-basis: 100%; margin: 0; font-size: .78rem; }
.source-editor-downloads > p { flex-basis: 100%; margin: 0; }
.publication-destinations {margin-bottom: 1rem;}
.publication-destination-row {display: flex; align-items: center; flex-wrap: wrap; gap: .6rem; padding: .65rem 0; border-bottom: 1px solid var(--theme-foreground-faintest);}
.publication-destination-row > a {overflow-wrap: anywhere; min-width: 0;}
.publication-destination-row > small {color: var(--theme-foreground-muted); flex: 1 1 12rem;}
.source-editor-toolbar > label {display: grid; gap: .25rem; flex: 1 1 18rem; min-width: 0;}
.source-editor-toolbar > p {flex-basis: 100%;}
.project-publishing-workspace input:not([type="checkbox"]):not([type="radio"]),
.project-publishing-workspace textarea,
.project-publishing-workspace select {box-sizing: border-box; min-width: 0; max-width: 100%; color: var(--theme-foreground); background: var(--theme-background); border: 1px solid var(--theme-foreground-faintest); border-radius: 4px; padding: .45rem;}
.source-editor-layout {
  display: grid;
  grid-template-columns: minmax(150px, 20%) minmax(0, 1fr) minmax(220px, 30%);
  border: 1px solid var(--theme-foreground-faintest);
  min-height: 26rem;
}
.source-editor-layout > aside {
  min-width: 0;
  padding: .65rem;
  border-right: 1px solid var(--theme-foreground-faintest);
  max-height: 65vh;
  overflow: auto;
}
.source-editor-main { min-width: 0; padding: .65rem; }
.publication-code-editor {height: 62vh; min-height: 320px; background: var(--theme-background);}
.notebook-cell-views, .notebook-cell-actions {display: flex; flex-wrap: wrap; gap: .4rem; margin: .5rem 0;}
.notebook-cell-views button[aria-pressed="true"] {border-color: var(--theme-foreground-focus); color: var(--theme-foreground-focus);}
.notebook-cell-more[open] {flex-basis: 100%;}
.notebook-cell-more > summary {cursor: pointer; border: 1px solid var(--opengeo-line); border-radius: 4px; padding: .35rem .55rem;}
.notebook-cell-more > summary:focus-visible {outline: 2px solid var(--theme-foreground-focus); outline-offset: 2px;}
.notebook-cell-more > button {margin: .4rem .4rem 0 0;}
.notebook-cell-workspace {display: grid; gap: .6rem; min-width: 0;}
.notebook-cell-workspace[hidden] {display: none;}
.notebook-cell-workspace label {display: grid; gap: .25rem; min-width: 0;}
.notebook-cell-workspace textarea {box-sizing: border-box; width: 100%; min-height: 18rem; resize: vertical; font: 13px/1.6 var(--monospace); white-space: pre-wrap; tab-size: 2;}
.notebook-cell-workspace select {max-width: 100%;}
.publication-code-editor .monaco-editor textarea.inputarea {border: 0; border-radius: 0; padding: 0; min-height: 0; max-width: none;}
.publication-code-editor .monaco-editor {text-align: left;}
.publication-file-tabs {display: flex; overflow-x: auto; border-bottom: 1px solid var(--theme-foreground-faintest); margin: -.65rem -.65rem .6rem;}
.publication-file-tabs button {white-space: nowrap; border: 0; border-right: 1px solid var(--theme-foreground-faintest); border-radius: 0; background: var(--theme-background-alt); color: var(--theme-foreground-muted); padding: .6rem .8rem; font: 12px var(--monospace);}
.publication-file-tabs button[aria-pressed="true"] {color: var(--theme-foreground); background: var(--theme-background); box-shadow: inset 0 2px var(--theme-foreground-focus);}
.publication-editor-status {font: 11px var(--monospace); padding: .35rem; color: var(--theme-foreground-muted); border-top: 1px solid var(--theme-foreground-faintest);}
.publication-document-preview {min-width: 0; border-left: 1px solid var(--theme-foreground-faintest); background: var(--theme-background-alt);}
.publication-preview-mode {display: flex; align-items: center; gap: .5rem; padding: .4rem .6rem; font: 12px var(--sans-serif); border-bottom: 1px solid var(--theme-foreground-faintest);}
.publication-preview-mode[hidden] {display: none;}
.publication-preview-mode select {width: auto; max-width: 100%; margin: 0; padding: .3rem .5rem; font: inherit;}
.publication-document-preview h4 {margin: .6rem; font: 600 11px var(--sans-serif); text-transform: uppercase; letter-spacing: .04em;}
.publication-document-preview > p {margin: .6rem; font-size: 11px; color: var(--theme-foreground-muted);}
.publication-document-preview iframe {width: 100%; height: 62vh; border: 0; background: var(--theme-background);}
.framework-project-preview [hidden] {display: none !important;}
.framework-project-preview > .platform-actions {display: flex; flex-wrap: wrap; gap: .35rem; margin: .6rem;}
.framework-project-preview > .platform-actions button {font-size: 12px; padding: .35rem .5rem;}
@media (max-width: 1000px) {
  .source-editor-layout {grid-template-columns: minmax(150px, 23%) minmax(0, 1fr);}
  .publication-document-preview {grid-column: 1 / -1; border-left: 0; border-top: 1px solid var(--theme-foreground-faintest);}
  .publication-document-preview iframe {height: 24rem;}
}
.source-editor-path { font: .8rem var(--monospace); overflow-wrap: anywhere; margin: 0 0 .5rem; }
.publication-live-preview .source-editor-layout {grid-template-columns: minmax(150px, 20%) minmax(0, 1fr);}
.publication-live-preview .source-editor-layout.source-editor-explorer-hidden {grid-template-columns: minmax(0, 1fr);}
.source-editor-layout > section {min-width: 0;}
.source-editor-layout > section > .source-editor-path {margin: .6rem;}
@media (max-width: 650px) {
  .publication-live-preview .source-editor-layout {grid-template-columns: minmax(0, 1fr);}
}
.source-file-explorer ul { list-style: none; padding-left: .8rem; margin: 0; }
.source-file-explorer > ul { padding: 0; }
.source-file-explorer summary { font-size: .85rem; padding: .3rem 0; cursor: pointer; }
.source-file-explorer button {
  display: block;
  text-align: left;
  width: 100%;
  border: 0;
  background: transparent;
  color: var(--theme-foreground);
  font: .85rem var(--sans-serif);
  padding: .3rem .4rem;
  overflow-wrap: anywhere;
  cursor: pointer;
}
.source-file-explorer button[aria-current="true"] {
  background: var(--theme-background-alt);
  color: var(--theme-foreground-focus);
  box-shadow: inset 2px 0 currentColor;
}
.source-file-explorer .source-folder-new-page {float: right; display: inline-block; width: auto; padding: 0 .35rem; font-weight: 600; color: var(--theme-foreground-muted);}
.source-file-explorer .source-folder-new-page:hover, .source-file-explorer .source-folder-new-page:focus-visible {color: var(--theme-foreground-focus); background: var(--theme-background-alt);}
@media (max-width: 650px) {
  .source-editor-layout { grid-template-columns: minmax(0, 1fr); }
  .source-editor-layout > aside { max-height: 12rem; border-right: 0; border-bottom: 1px solid var(--theme-foreground-faintest); }
}
.observable-source-revision-editor input,
.observable-source-revision-editor select,
.observable-source-revision-editor textarea {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.observable-source-revision-editor textarea {
  resize: vertical;
  min-height: 14rem;
  font-family: var(--monospace, ui-monospace, monospace);
  line-height: 1.45;
  tab-size: 2;
}

.framework-revision-data {
  min-width: 0;
  padding: 0.6rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
}

.framework-revision-data summary { cursor: pointer; font-weight: 600; }
.framework-revision-data [hidden] { display: none; }
.framework-revision-data p { margin: 0.4rem 0; font-size: 0.82rem; }
.framework-archive-facts { color: var(--opengeo-muted); overflow-wrap: anywhere; }
.framework-archive-selection, .framework-archive-binding {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto;
  gap: 0.5rem;
  align-items: end;
  margin-block: 0.6rem;
}
.framework-archive-binding { grid-template-columns: minmax(0, 1fr) auto; }
.framework-archive-binding .framework-archive-facts { grid-column: 1 / -1; grid-row: 2; }
.framework-archive-binding > button { grid-column: 2; grid-row: 1; }
.framework-revision-data input[aria-invalid="true"] { border-color: var(--theme-foreground); outline: 1px dashed currentColor; }
@media (max-width: 640px) {
  .framework-archive-selection, .framework-archive-binding { grid-template-columns: minmax(0, 1fr); }
  .framework-archive-binding > button, .framework-archive-binding .framework-archive-facts { grid-column: 1; grid-row: auto; }
}

.project-site-pages {
  padding-inline-start: 1.5rem;
}

.project-site-destination {
  margin-block: 0.7rem;
  border-block: 1px solid var(--opengeo-line);
  padding-block: 0.55rem;
}

.project-site-destination summary {
  cursor: pointer;
  font-weight: 650;
}

.project-site-destination-fields {
  display: grid;
  grid-template-columns: minmax(8rem, 0.65fr) minmax(10rem, 1fr);
  gap: 0.55rem;
  align-items: end;
}

.project-site-destination-fields label {
  display: grid;
  gap: 0.25rem;
  min-width: 0;
  font-size: 0.82rem;
  color: var(--opengeo-muted);
}

.project-site-destination-fields label:has(input[type="checkbox"]) {
  display: flex;
  grid-column: 1 / -1;
  align-items: center;
}

.project-site-destination-fields input:not([type="checkbox"]),
.project-site-destination-fields select {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.42rem 0.5rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

@media (max-width: 540px) {
  .project-site-destination-fields {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-site-destination-fields label:has(input[type="checkbox"]) {
    grid-column: auto;
  }

}

.project-site-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.6rem;
  margin-top: 1rem;
}

.project-resource-handoff {
  display: grid;
  gap: 0.2rem;
  margin-block: 0.6rem;
  padding: 0.65rem 0.75rem;
  border: 1px solid var(--opengeo-line);
  border-inline-start: 3px solid var(--opengeo-blue);
  border-radius: 0.45rem;
  background: var(--opengeo-panel);
}

.project-resource-handoff > p {
  margin: 0;
  color: var(--opengeo-muted);
}

.project-resource-handoff-controls {
  display: grid;
  grid-template-columns: minmax(12rem, 1fr) auto;
  align-items: end;
  gap: 0.45rem 0.65rem;
  margin-block-start: 0.35rem;
}

.project-resource-handoff-controls > label {
  display: grid;
  gap: 0.2rem;
}

.project-resource-handoff-controls > p {
  grid-column: 1 / -1;
  margin: 0;
}

.project-site-page-selector[data-handoff-focus="true"] {
  outline: 2px solid var(--opengeo-blue);
  outline-offset: 2px;
}

.project-resource-handoff[data-state="stale"],
.project-resource-handoff[data-state="unavailable"],
.project-resource-handoff[data-state="ineligible"] {
  border-inline-start-color: currentColor;
}

@media (max-width: 42rem) {
  .project-resource-handoff-controls {
    grid-template-columns: 1fr;
  }

  .project-resource-handoff-controls > p {
    grid-column: 1;
  }
}

.project-site-collaborators {
  margin-block: 0.7rem;
  border-block: 1px solid var(--opengeo-line);
  padding-block: 0.55rem;
}

.project-site-collaborators > summary {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 0.35rem 0.75rem;
  cursor: pointer;
}

.project-site-collaborators > summary > span {
  color: var(--opengeo-muted);
  font-size: 0.8rem;
}

.project-site-collaborator-form {
  margin-block: 0.65rem;
}

.project-site-access {
  display: grid;
  gap: 0.35rem;
  margin-block: 0.55rem;
}

.project-site-access > .platform-button {
  justify-self: start;
}

.project-site-access-content,
.project-site-access-roster,
.project-site-access-add,
.project-site-invitation-history {
  display: grid;
  gap: 0.4rem;
}

.project-site-access-content {
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr));
}

.project-site-access-content > section {
  align-content: start;
  padding: 0.55rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 0.4rem;
  background: color-mix(in srgb, var(--opengeo-panel) 85%, transparent);
}

.project-site-access-content h4 {
  margin: 0 0 0.15rem;
}

.project-site-access-row {
  display: grid;
  grid-template-columns: minmax(8rem, 1fr) minmax(7rem, auto) auto auto;
  align-items: end;
  gap: 0.35rem;
  padding-block: 0.35rem;
  border-block-start: 1px solid var(--opengeo-line);
}

.project-site-access-row > span:first-child {
  display: grid;
  min-width: 0;
}

.project-site-access-row small {
  overflow-wrap: anywhere;
}

.project-site-access-form {
  display: grid;
  grid-template-columns: minmax(10rem, 1fr) minmax(7rem, auto) auto;
  align-items: end;
  gap: 0.4rem;
}

.project-site-access-form > label,
.project-site-access-row > label {
  display: grid;
  gap: 0.2rem;
}

@media (max-width: 48rem) {
  .project-site-access-row,
  .project-site-access-form {
    grid-template-columns: 1fr;
    align-items: stretch;
  }
}

.project-site-page-selector {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 0.55rem;
  margin-block: 0.45rem;
}

.project-site-page-identity {
  display: grid;
  grid-template-columns: minmax(8rem, 1fr) auto;
  align-items: center;
  gap: 0.4rem;
  min-width: 0;
}

.project-site-page-identity strong {
  grid-column: 1 / -1;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.project-site-page-identity input,
.project-site-page-identity select {
  min-width: 0;
  width: 100%;
}

.project-site-home-choice,
.project-site-page-order {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
}

.project-site-page-order {
  gap: 0.2rem;
}

.project-site-page-order .platform-button {
  min-width: 2rem;
  min-height: 2rem;
  padding: 0.2rem 0.45rem;
}

.project-site-revision-editor {
  margin-block: 0.75rem;
  border-block: 1px solid var(--opengeo-line);
  padding-block: 0.55rem;
}

.project-site-revision-editor > summary {
  cursor: pointer;
  font-weight: 700;
}

@media (max-width: 540px) {
  .project-site-page-selector {
    grid-template-columns: auto minmax(0, 1fr) auto;
  }

  .project-site-page-identity {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-site-page-identity strong {
    grid-column: auto;
  }

  .project-site-page-order {
    grid-column: 2;
  }
}

.project-site-editor fieldset {
  margin-block: 1rem;
}

.project-positioned-layout-preview {
  position: relative;
  width: min(100%, 32rem);
  aspect-ratio: 1.414 / 1;
  margin-block: 0.75rem;
  overflow: hidden;
  border: 1px solid var(--opengeo-line);
  background: #fff;
}

.project-positioned-layout-preview:empty {
  display: none;
}

.project-positioned-layout-frame {
  position: absolute;
  border: 1px solid #176b87;
  background: color-mix(in srgb, #176b87 12%, #fff);
  color: #172026;
  font-size: 0.65rem;
  text-align: center;
  transform-origin: center;
}

.project-positioned-layout-frame[data-clip="true"] {
  overflow: hidden;
}

.project-positioned-layout-frame[data-selected="true"] {
  outline: 3px solid #f0a202;
  outline-offset: 2px;
  z-index: 2;
}

.project-positioned-layout-frame-select {
  width: 100%;
  height: 100%;
  overflow: hidden;
  border: 0;
  padding: 0.15rem;
  background: transparent;
  color: inherit;
  cursor: move;
  font: inherit;
}

.project-positioned-layout-resize {
  position: absolute;
  right: 0;
  bottom: 0;
  width: 1.35rem;
  height: 1.35rem;
  border: 0;
  border-radius: 0.25rem 0 0 0;
  background: #176b87;
  color: #fff;
  cursor: nwse-resize;
  line-height: 1;
}

.project-positioned-layout-frame.text {
  border-color: #7650a8;
  background: color-mix(in srgb, #7650a8 10%, #fff);
}

.project-positioned-layout-frame.source_panel,
.project-positioned-layout-frame.north_arrow,
.project-positioned-layout-frame.scale_bar,
.project-positioned-layout-frame.legend_frame {
  border-color: #a33b20;
  background: color-mix(in srgb, #a33b20 10%, #fff);
}

.project-positioned-layout-frame.image_frame,
.project-positioned-layout-frame.table_frame,
.project-positioned-layout-frame.chart_frame {
  border-color: #2e7d32;
  background: color-mix(in srgb, #2e7d32 10%, #fff);
}

.project-positioned-layout-add,
.project-positioned-layout-inspector {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 10rem), 1fr));
  align-items: end;
  gap: 0.65rem;
  margin-block: 0.75rem;
}

.project-positioned-layout-inspector > legend,
.project-positioned-layout-inspector > p,
.project-positioned-layout-actions {
  grid-column: 1 / -1;
}

.project-positioned-layout-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.project-service-catalog {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 28rem), 1fr));
  gap: 0.75rem;
}

.project-service-card > a {
  overflow-wrap: anywhere;
}

.project-service-card-heading {
  display: flex;
  justify-content: space-between;
  gap: 0.75rem;
  align-items: start;
}

.project-service-card-heading .badge,
.project-service-card-heading p {
  margin: 0;
}

.project-service-links {
  display: flex;
  flex-wrap: wrap;
  justify-content: end;
  gap: 0.35rem;
}

.service-connection {
  min-width: 0;
}

.service-connection[open] {
  display: grid;
  gap: 0.65rem;
}

.service-connection label {
  display: grid;
  gap: 0.3rem;
  min-width: 0;
}

.service-connection input,
.service-connection select {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
}

.service-connection p {
  overflow-wrap: anywhere;
}

.service-connection pre {
  max-height: 24rem;
  overflow: auto;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.project-service-links a {
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.35rem 0.5rem;
  white-space: nowrap;
}

.project-service-facts {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  margin: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  overflow: hidden;
}

.project-service-facts dt,
.project-service-facts dd {
  margin: 0;
  padding: 0.35rem 0.45rem;
  text-align: center;
}

.project-service-facts dt {
  grid-row: 2;
  color: var(--opengeo-muted);
  font-size: 0.72rem;
}

.project-service-facts dd {
  grid-row: 1;
  font-weight: 700;
}

.project-service-disclosure {
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  background: var(--theme-background-alt);
}

.project-service-disclosure > summary {
  cursor: pointer;
  padding: 0.5rem 0.65rem;
  font-weight: 650;
}

.project-service-disclosure[open] > summary {
  border-bottom: 1px solid var(--opengeo-line);
}

.project-service-disclosure > :not(summary) {
  margin: 0.6rem;
}

.spatial-catalog-sections,
.spatial-catalog-editor,
.spatial-catalog-list,
.project-service-published,
.project-service-advanced,
.project-service-binding-operations {
  display: grid;
  gap: 0.55rem;
}

.spatial-catalog-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.5rem;
  align-items: end;
}

.spatial-catalog-form label {
  display: grid;
  gap: 0.2rem;
  min-width: 0;
  color: var(--opengeo-muted);
  font-size: 0.78rem;
}

.spatial-catalog-form input,
.spatial-catalog-form textarea,
.spatial-catalog-form select {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 5px;
  padding: 0.38rem 0.45rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.spatial-catalog-form > .project-resource-feedback,
.spatial-catalog-form > .platform-eyebrow,
.spatial-catalog-member-order {
  grid-column: 1 / -1;
}

.spatial-catalog-row,
.spatial-catalog-member {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto auto;
  gap: 0.35rem;
  align-items: center;
  padding: 0.42rem 0.5rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: var(--theme-background);
}

.spatial-catalog-row > .project-resource-feedback {
  grid-column: 1;
}

.spatial-catalog-member-order {
  display: grid;
  gap: 0.3rem;
}

.spatial-catalog-member[data-selected="false"] {
  opacity: 0.72;
}

.platform-button.compact {
  padding: 0.22rem 0.38rem;
  min-height: 0;
  font-size: 0.76rem;
}

.project-service-binding {
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: var(--theme-background);
}

.project-service-binding > summary {
  cursor: pointer;
  padding: 0.45rem 0.55rem;
  font-size: 0.84rem;
}

.project-service-bindings {
  display: grid;
  gap: 0.55rem;
  margin: 0;
  padding-left: 1.2rem;
}

.project-service-bindings li {
  display: grid;
  gap: 0.35rem;
}

@media (max-width: 720px) {
  .project-service-card-heading,
  .project-resources-heading {
    display: grid;
  }

  .project-service-links {
    justify-content: start;
  }

  .spatial-catalog-form {
    grid-template-columns: minmax(0, 1fr);
  }

  .spatial-catalog-form > .project-resource-feedback,
  .spatial-catalog-form > .platform-eyebrow,
  .spatial-catalog-member-order {
    grid-column: 1;
  }

  .project-service-facts {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .project-service-facts dt,
  .project-service-facts dd {
    grid-row: auto;
  }

}

.project-resources-heading {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  align-items: end;
}

.project-resources-heading h2,
.project-resource-card h3,
.project-service-card h3 {
  margin: 0;
}

.project-resources-boundary,
.project-resources-empty,
.project-resource-feedback,
.project-resource-abstract,
.project-resource-keywords {
  color: var(--opengeo-muted);
}

.project-resources-boundary {
  margin: 0;
  font-family: var(--monospace);
  font-size: 0.78rem;
}

.project-resource-filters {
  display: grid;
  grid-template-columns: minmax(14rem, 2fr) repeat(3, minmax(9rem, 1fr)) auto auto;
  gap: 0.55rem;
  align-items: center;
  padding: 0.7rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--theme-background-alt);
}

.project-resource-filters input,
.project-resource-filters select {
  min-width: 0;
  width: 100%;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.project-resource-feedback {
  grid-column: 1 / -1;
  margin: 0;
  font-size: 0.82rem;
}

.project-resource-workflow-handoff {
  margin: 0.65rem 0 0;
  padding: 0.65rem 0.75rem;
  border-inline-start: 3px solid var(--accent, #4f8cff);
  background: color-mix(in srgb, var(--accent, #4f8cff) 10%, transparent);
  color: var(--muted-foreground, #aeb3bd);
}

.project-discussions {
  display: grid;
  gap: 0.75rem;
}

.project-discussions-heading,
.project-discussion-detail > header {
  display: flex;
  justify-content: space-between;
  gap: 1rem;
  align-items: start;
}

.project-discussions-heading h2,
.project-discussion-detail h3,
.project-discussion-detail p {
  margin: 0;
}

.project-discussion-create {
  min-width: min(22rem, 100%);
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--theme-background-alt);
}

.project-discussion-create > summary {
  cursor: pointer;
  padding: 0.6rem 0.75rem;
  font-weight: 700;
}

.project-discussion-create form,
.project-discussion-reply {
  display: grid;
  gap: 0.5rem;
  padding: 0.75rem;
  border-top: 1px solid var(--opengeo-line);
}

.project-discussion-create input,
.project-discussion-create textarea,
.project-discussion-create select,
.project-discussion-reply textarea,
.project-discussion-reply select,
.project-discussion-actions select,
.project-discussion-controls select {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.5rem 0.6rem;
  color: var(--theme-foreground);
  background: var(--theme-background);
}

.project-discussion-create select[multiple],
.project-discussion-reply select[multiple] {
  min-height: 4.5rem;
}

.project-discussion-notifications {
  position: relative;
  min-width: min(18rem, 100%);
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--theme-background-alt);
}

.project-discussion-notifications > summary {
  cursor: pointer;
  padding: 0.6rem 0.75rem;
  font-weight: 700;
}

.project-discussion-notification-list {
  display: grid;
  max-height: 18rem;
  margin: 0;
  padding: 0;
  overflow: auto;
  border-top: 1px solid var(--opengeo-line);
  list-style: none;
}

.project-discussion-notification-list > li {
  border-bottom: 1px solid var(--opengeo-line);
}

.project-discussion-notification-list > li:last-child {
  border-bottom: 0;
}

.project-discussion-notification-list > li:not(.unread) {
  opacity: 0.72;
}

.project-discussion-notification {
  display: grid;
  gap: 0.2rem;
  width: 100%;
  border: 0;
  padding: 0.6rem 0.75rem;
  color: var(--theme-foreground);
  background: transparent;
  text-align: left;
  cursor: pointer;
}

.project-discussion-notification small,
.project-discussion-assignment,
.project-discussion-mentions {
  color: var(--opengeo-muted);
  font-size: 0.76rem;
}

.project-discussion-create textarea,
.project-discussion-reply textarea {
  min-height: 5rem;
  resize: vertical;
}

.project-discussion-moderation {
  justify-self: start;
  margin-top: 0.15rem;
  color: var(--opengeo-muted);
  font-size: 0.76rem;
}

.project-discussion-moderation > summary {
  cursor: pointer;
  color: #d78372;
  font-weight: 700;
}

.project-discussion-moderation form {
  display: grid;
  gap: 0.45rem;
  max-width: 32rem;
  margin-top: 0.45rem;
}

.project-discussion-moderation textarea {
  box-sizing: border-box;
  width: 100%;
  min-height: 4rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.5rem 0.6rem;
  color: var(--theme-foreground);
  background: var(--theme-background);
  resize: vertical;
}

.project-discussion-moderation-summary {
  color: #d78372;
}

.project-discussion-controls,
.project-discussion-actions {
  display: flex;
  gap: 0.5rem;
  align-items: center;
  flex-wrap: wrap;
  justify-content: end;
}

.project-discussion-actions select {
  width: min(14rem, 100%);
}

.project-discussion-controls select {
  width: auto;
}

.project-discussion-workspace {
  display: grid;
  grid-template-columns: minmax(15rem, 0.8fr) minmax(0, 2fr);
  min-height: 24rem;
  overflow: hidden;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--theme-background);
}

.project-discussion-list {
  display: grid;
  align-content: start;
  border-right: 1px solid var(--opengeo-line);
  background: var(--theme-background-alt);
}

.project-discussion-list > p {
  padding: 1rem;
}

.project-discussion-list-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.25rem 0.6rem;
  width: 100%;
  border: 0;
  border-bottom: 1px solid var(--opengeo-line);
  padding: 0.75rem;
  color: var(--theme-foreground);
  background: transparent;
  text-align: left;
  cursor: pointer;
}

.project-discussion-list-item[aria-pressed="true"] {
  box-shadow: inset 3px 0 var(--theme-foreground-focus);
  background: var(--theme-background);
}

.project-discussion-list-item strong {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.project-discussion-list-item > span:not(.badge),
.project-discussion-detail header p,
.project-discussion-comments span {
  color: var(--opengeo-muted);
  font-size: 0.78rem;
}

.project-discussion-list-item > span:not(.badge) {
  grid-column: 1;
}

.project-discussion-list-badges {
  grid-column: 2;
  grid-row: 1 / span 2;
  display: flex;
  flex-wrap: wrap;
  justify-content: end;
  gap: 0.25rem;
  align-self: center;
}

.project-discussion-feature-target {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.4rem 0.65rem;
  padding: 0.5rem 0.6rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: var(--theme-background-alt);
  color: var(--opengeo-muted);
  font-size: 0.78rem;
}

.project-discussion-feature-target strong {
  color: var(--theme-foreground);
}

.project-discussion-feature-target.pending {
  grid-template-columns: minmax(0, 1fr);
}

.project-discussion-feature-target.pending small {
  color: var(--opengeo-muted);
}

.project-discussion-feature-link {
  justify-self: end;
  white-space: nowrap;
}

.project-discussion-detail {
  display: grid;
  align-content: start;
  gap: 0.9rem;
  min-width: 0;
  padding: 1rem;
}

.project-discussion-comments {
  display: grid;
  gap: 0.65rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.project-discussion-comments li {
  display: grid;
  gap: 0.3rem;
  padding: 0.75rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  overflow-wrap: anywhere;
}

.project-discussion-reply {
  padding: 0;
  border-top: 0;
}

@media (max-width: 720px) {
  .project-discussions-heading,
  .project-discussion-detail > header {
    display: grid;
  }

  .project-discussion-create {
    min-width: 0;
  }

  .project-discussion-notifications {
    min-width: 0;
  }

  .project-discussion-notifications > summary,
  .project-discussion-notification,
  .project-discussion-create select,
  .project-discussion-reply select,
  .project-discussion-actions select {
    min-height: 2.75rem;
  }

  .project-discussion-workspace {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-discussion-list {
    max-height: 14rem;
    overflow: auto;
    border-right: 0;
    border-bottom: 1px solid var(--opengeo-line);
  }

  .project-discussion-feature-target {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-discussion-feature-link {
    justify-self: stretch;
    white-space: normal;
  }
}

.project-resource-catalog {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
  gap: 0.75rem;
}

.project-resource-card,
.project-service-card {
  display: grid;
  gap: 0.7rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.9rem;
  background: var(--theme-background);
}

.project-resource-abstract,
.project-resource-keywords {
  margin: 0;
}

.project-resource-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}

.project-resource-card dl {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 0.2rem 0.75rem;
  margin: 0;
  font-size: 0.88rem;
}

.project-resource-card dt {
  color: var(--opengeo-muted);
}

.project-resource-card dd {
  margin: 0;
  overflow-wrap: anywhere;
}

.project-resource-detail {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.75rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.9rem;
  background: var(--theme-background);
}

.project-resource-detail-heading,
.project-resource-detail > .platform-eyebrow,
.project-resource-detail > .project-resource-feedback {
  grid-column: 1 / -1;
}

.project-resource-detail-heading,
.project-resource-editor-panel > header {
  display: flex;
  justify-content: space-between;
  align-items: start;
  gap: 0.75rem;
}

.project-resource-detail-heading h3,
.project-resource-editor-panel h4 {
  margin: 0;
}

.project-resource-editor-panel {
  display: grid;
  align-content: start;
  gap: 0.65rem;
  min-width: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  padding: 0.75rem;
  background: color-mix(in srgb, var(--opengeo-panel) 72%, transparent);
}

.project-resource-native-create {
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.7rem;
  background: var(--theme-background-alt);
}

.project-resource-native-create > summary {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.75rem;
  align-items: baseline;
  cursor: pointer;
}

.project-resource-native-create > summary span {
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-resource-native-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.55rem;
  margin-block-start: 0.7rem;
}

.project-resource-native-form > label {
  display: grid;
  align-content: start;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-resource-native-form input,
.project-resource-native-form select,
.project-resource-native-form textarea {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.project-resource-native-form > button,
.project-resource-native-form > p {
  grid-column: 1 / -1;
  margin: 0;
}

@media (max-width: 720px) {
  .project-resource-native-form {
    grid-template-columns: 1fr;
  }

  .project-resource-native-form > * {
    grid-column: 1;
  }
}

.project-resource-rating-summary,
.project-resource-rating small {
  margin: 0;
}

.project-resource-rating-form {
  display: flex;
  gap: 0.5rem;
  align-items: center;
}

.project-resource-rating-form select {
  min-width: 0;
  flex: 1;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  color: var(--theme-foreground);
  background: var(--theme-background);
}

.project-resource-rating-feedback {
  color: var(--opengeo-muted);
}

.project-resource-editor-panel ul,
.project-resource-history {
  margin: 0;
  padding-left: 1.2rem;
}

.project-resource-editor-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.65rem;
}

.project-resource-metadata-editor {
  grid-column: 1 / -1;
}

.resource-coverage-editor {
  grid-column: 1 / -1;
  min-width: 0;
}

.resource-coverage-editor > summary {
  cursor: pointer;
  padding-block: 0.65rem;
}

.resource-coverage-editor fieldset {
  display: grid;
  gap: 0.5rem;
  min-width: 0;
  margin: 0.5rem 0;
  padding: 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
}

.resource-coverage-editor p {
  margin: 0;
  font-size: 0.82rem;
  color: var(--opengeo-muted);
}

.resource-coverage-coordinates {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.5rem;
}

.markdown-source-studio,
.page-draft-recovery,
.project-page-structure-picker,
.project-resource-reference-picker,
.project-resource-structured-picker,
.project-page-pinned-preview,
.project-resource-advanced-content {
  grid-column: 1 / -1;
}

.page-draft-recovery {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.35rem 0.75rem;
  padding: 0.7rem 0.8rem;
  border: 1px solid color-mix(in srgb, var(--opengeo-blue) 45%, var(--opengeo-line));
  border-radius: 7px;
  background: color-mix(in srgb, var(--opengeo-blue) 7%, var(--theme-background));
}

.page-draft-recovery h5,
.page-draft-recovery p {
  margin: 0;
}

.page-draft-recovery h5,
.page-draft-recovery p {
  grid-column: 1;
}

.page-draft-recovery button {
  grid-column: 2;
  grid-row: 1 / span 2;
}

.page-draft-recovery[data-state="conflict"],
.page-draft-recovery[data-state="error"] {
  border-color: #b35a4a;
  background: color-mix(in srgb, #b35a4a 10%, var(--theme-background));
}

.page-draft-recovery[data-state="saved"],
.page-draft-recovery[data-state="recovered"] {
  border-color: #3f7d62;
  background: color-mix(in srgb, #3f7d62 10%, var(--theme-background));
}

.markdown-source-studio {
  display: grid;
  gap: 0.7rem;
  padding: 0.8rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  background: var(--theme-background);
}

.markdown-source-studio > header,
.markdown-source-pane > h6 {
  display: flex;
  justify-content: space-between;
  align-items: start;
  gap: 0.65rem;
  margin: 0;
}

.markdown-source-studio h5,
.markdown-source-studio h6 {
  margin: 0;
}

.markdown-source-controls {
  display: grid;
  grid-template-columns: minmax(10rem, 1fr) minmax(12rem, 1fr) auto auto;
  align-items: end;
  gap: 0.55rem;
}

.markdown-source-controls label,
.project-resource-advanced-content label {
  display: grid;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.markdown-source-controls input,
.markdown-source-controls select {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.markdown-source-panes {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.65rem;
}

.markdown-source-pane {
  display: grid;
  grid-template-rows: auto minmax(16rem, 1fr);
  gap: 0.45rem;
  min-width: 0;
}

.markdown-source-pane textarea,
.markdown-source-preview {
  min-height: 16rem;
  max-height: 30rem;
  box-sizing: border-box;
  overflow: auto;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.75rem;
  background: var(--theme-background-alt);
  color: var(--theme-foreground);
}

.markdown-source-pane textarea {
  resize: vertical;
  font-family: var(--monospace);
  line-height: 1.5;
}

.markdown-source-preview > :first-child {
  margin-top: 0;
}

.markdown-source-preview > :last-child {
  margin-bottom: 0;
}

.markdown-source-preview pre {
  overflow: auto;
  padding: 0.65rem;
  border-radius: 5px;
  background: var(--theme-background);
  white-space: pre-wrap;
}

.markdown-source-preview blockquote {
  margin-inline: 0;
  padding-left: 0.8rem;
  border-left: 3px solid var(--opengeo-blue);
}

.project-resource-advanced-content {
  padding: 0.65rem;
  border: 1px dashed var(--opengeo-line);
  border-radius: 7px;
}

.project-resource-advanced-content > summary {
  cursor: pointer;
  font-weight: 650;
}

.project-resource-advanced-content[open] > label {
  margin-top: 0.65rem;
}

.page-source-history-list {
  display: grid;
  gap: 0.6rem;
  padding-left: 1.25rem;
}

.page-source-history-list li {
  min-width: 0;
  padding-left: 0.25rem;
}

.page-source-history-list li .platform-button + .platform-button {
  margin-left: 0.45rem;
}

.page-source-history-output {
  max-height: 24rem;
  overflow: auto;
  margin: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.75rem;
  background: var(--theme-background-alt);
  color: var(--theme-foreground);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

.project-resource-asset-picker,
.project-page-structure-picker,
.project-resource-reference-picker,
.project-resource-structured-picker,
.project-page-pinned-preview {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: minmax(12rem, 1fr) minmax(12rem, 1fr);
  gap: 0.65rem;
  padding: 0.75rem;
  border: 1px dashed var(--opengeo-line);
  border-radius: 7px;
  background: var(--theme-background-alt);
}

.project-resource-asset-picker h5,
.project-resource-asset-picker p,
.project-page-structure-picker > h5,
.project-page-structure-picker > p,
.project-resource-reference-picker h5,
.project-resource-reference-picker p,
.project-resource-structured-picker > h5,
.project-resource-structured-picker > p,
.project-page-pinned-preview h5,
.project-page-pinned-preview p {
  grid-column: 1 / -1;
  margin: 0;
}

.project-resource-structured-group {
  display: grid;
  align-content: start;
  gap: 0.55rem;
  min-width: 0;
  padding: 0.7rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: var(--theme-background);
}

.project-resource-structured-group:last-child {
  grid-column: 1 / -1;
  grid-template-columns: 1fr 1fr;
}

.project-resource-structured-group h6,
.project-resource-structured-group p,
.project-resource-structured-group textarea {
  grid-column: 1 / -1;
  margin: 0;
}

.project-page-pinned-preview > header {
  grid-column: 1 / -1;
  display: flex;
  justify-content: space-between;
  gap: 0.65rem;
}

.project-page-preview-frame {
  grid-column: 1 / -1;
  width: 100%;
  min-height: 32rem;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: #fff;
}

.project-page-preview-frame[data-state="stale"] {
  opacity: 0.55;
}

.project-resource-editor-grid label,
.resource-metadata-exchange > label,
.project-resource-editor-panel > label {
  display: grid;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-resource-editor-grid input,
.project-resource-editor-grid select,
.project-resource-editor-grid textarea,
.resource-metadata-exchange > label input,
.resource-metadata-exchange > label select,
.project-resource-editor-panel > input,
.project-resource-editor-panel > select,
.project-resource-editor-panel > textarea,
.project-resource-editor-panel > label input,
.project-resource-editor-panel > label select,
.project-resource-editor-panel > label textarea {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.project-resource-editor-grid textarea,
.project-resource-editor-panel textarea {
  min-height: 7rem;
  resize: vertical;
}

.resource-metadata-exchange {
  display: grid;
  gap: 0.5rem;
  min-width: 0;
}

.resource-metadata-exchange [hidden] {
  display: none;
}

.resource-metadata-exchange details {
  margin-block: 0.5rem;
  min-width: 0;
}

.resource-metadata-exchange summary {
  cursor: pointer;
}

.project-resource-metadata-export {
  max-block-size: 22rem;
  overflow: auto;
  padding: 0.75rem;
  border: 1px solid var(--theme-foreground-faintest);
  background: var(--theme-background-alt);
  font-size: 0.75rem;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

@media (max-width: 1000px) {
  .project-resource-filters {
    grid-template-columns: 1fr 1fr;
  }

  .project-resource-detail {
    grid-template-columns: 1fr;
  }

  .project-resource-detail-heading {
    grid-column: auto;
  }

  .markdown-source-controls,
  .markdown-source-panes {
    grid-template-columns: 1fr;
  }

  .page-draft-recovery {
    grid-template-columns: 1fr;
  }

  .page-draft-recovery button {
    grid-column: 1;
    grid-row: auto;
  }

  .project-resource-asset-picker,
  .project-page-structure-picker,
  .project-resource-reference-picker,
  .project-resource-structured-picker,
  .project-page-pinned-preview,
  .project-resource-editor-grid {
    grid-template-columns: 1fr;
  }

  .project-resource-structured-group:last-child {
    grid-template-columns: 1fr;
  }
}

.project-datasets {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
  gap: 1rem;
  margin: 1rem 0 1.5rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 1rem;
  background: color-mix(in srgb, var(--opengeo-panel) 76%, transparent);
}

.project-datasets-heading {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 1rem;
  align-items: end;
}

.project-datasets > *,
.project-resources > *,
.project-sites > *,
.project-services > * {
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
}

.project-datasets-heading h2,
.project-dataset-card h3,
.project-upload-form h3 {
  margin: 0;
}

.project-datasets-legend,
.project-datasets-readonly,
.project-datasets-empty {
  color: var(--opengeo-muted);
}

.project-datasets-legend {
  font-family: var(--monospace);
  white-space: nowrap;
}

.project-dataset-picker {
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.85rem;
  background: var(--opengeo-panel);
}

.project-dataset-picker > summary {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem 0.75rem;
  align-items: baseline;
  cursor: pointer;
}

.project-dataset-picker > summary span {
  color: var(--opengeo-muted);
  font-size: 0.84rem;
}

.project-dataset-picker-form,
.project-dataset-picker-results {
  display: grid;
  gap: 0.6rem;
  margin-block-start: 0.8rem;
}

.project-dataset-picker-form > label {
  display: grid;
  gap: 0.3rem;
}

.project-dataset-picker-form input {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.project-dataset-picker-record {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.75rem;
  align-items: center;
  border-top: 1px solid var(--opengeo-line);
  padding-block-start: 0.6rem;
}

.project-dataset-picker-record > div {
  display: grid;
  gap: 0.2rem;
  min-width: 0;
}

.project-dataset-picker-record span {
  overflow-wrap: anywhere;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-dataset-catalog {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr));
  gap: 0.75rem;
}

.project-dataset-card {
  display: grid;
  gap: 0.75rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.9rem;
  background: var(--theme-background);
}

.project-dataset-description,
.project-dataset-tags {
  margin: 0.3rem 0 0;
  color: var(--opengeo-muted);
}

.project-dataset-badges {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}

.project-dataset-card dl {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 0.2rem 0.75rem;
  margin: 0;
  font-size: 0.88rem;
}

.project-dataset-card dt {
  color: var(--opengeo-muted);
}

.project-dataset-card dd {
  margin: 0;
}

.project-dataset-quality {
  display: grid;
  gap: 0.35rem;
  padding: 0.7rem;
  border-inline-start: 3px solid var(--opengeo-line);
  background: color-mix(in srgb, var(--theme-background-alt) 72%, transparent);
}

.project-dataset-quality[data-state="failed"] {
  border-inline-start-color: var(--opengeo-red);
}

.project-dataset-quality h4,
.project-dataset-quality p {
  margin: 0;
}

.project-dataset-error-code {
  font-family: var(--monospace);
  color: var(--opengeo-red);
}

.project-dataset-warning {
  color: var(--opengeo-gold);
}

.project-dataset-refresh {
  justify-self: start;
}

.project-catalog-filters {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
  gap: 0.55rem;
  align-items: center;
  padding: 0.7rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--theme-background-alt);
}

.project-catalog-filters input,
.project-catalog-filters select,
.project-dataset-governance-form input,
.project-dataset-governance-form select,
.project-dataset-governance-form textarea,
.project-permission-editor input,
.project-permission-editor select,
.project-feature-editor input,
.project-feature-editor select,
.project-feature-editor textarea {
  min-width: 0;
  width: 100%;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.project-catalog-feedback,
.project-catalog-error {
  margin: 0;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-catalog-error {
  color: var(--opengeo-red);
}

.project-dataset-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem;
}

.project-source-archive > div {
  display: grid;
  gap: 0.65rem;
  min-width: 0;
}

.project-source-archive label {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4rem;
}

.project-source-archive dl {
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr);
}

.project-source-archive label.project-source-archive-consent {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
}

.project-source-archive dd,
.project-source-archive p {
  overflow-wrap: anywhere;
}

.project-source-archive button {
  justify-self: start;
  max-width: 100%;
  white-space: normal;
}

.project-dataset-map-handoff {
  position: relative;
}

.project-dataset-map-handoff > summary {
  box-sizing: border-box;
  cursor: pointer;
  list-style: none;
}

.project-dataset-map-handoff > summary::-webkit-details-marker {
  display: none;
}

.project-dataset-map-choices {
  position: absolute;
  z-index: 4;
  display: grid;
  width: min(22rem, calc(100vw - 3rem));
  gap: 0.4rem;
  margin-block-start: 0.35rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.65rem;
  background: var(--theme-background-alt);
  box-shadow: 0 12px 32px rgb(0 0 0 / 22%);
}

.project-dataset-map-choices .platform-button {
  justify-content: flex-start;
  white-space: normal;
}

.project-feature-discussion-links {
  display: inline-flex;
  flex: 1 1 100%;
  flex-wrap: wrap;
  gap: 0.35rem;
}

.project-dataset-version-panel,
.project-dataset-governance-form,
.project-version-history,
.project-version-record,
.project-dataset-lineage,
.project-permission-editor,
.project-permission-editor form,
.project-feature-editor,
.project-feature-form,
.project-feature-list,
.project-feature-record,
.project-spatial-preview {
  display: grid;
  gap: 0.55rem;
}

.project-dataset-version-panel {
  padding-block-start: 0.65rem;
  border-block-start: 1px solid var(--opengeo-line);
}

.project-dataset-inspection-view[hidden],
.project-dataset-version-panel[hidden] {
  display: none;
}

.project-dataset-inspection-controls {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4rem;
  margin-block-end: 0.5rem;
}

.project-dataset-inspection-controls > span {
  flex: 1 1 16rem;
  min-width: 0;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-dataset-inspection-controls > button {
  min-width: 44px;
  min-height: 44px;
}

.project-dataset-actions > button[aria-expanded="true"] {
  color: var(--theme-foreground-focus);
  background: var(--theme-background-alt);
  border-color: currentColor;
}

.project-dataset-governance-form {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}

.project-dataset-governance-form > h4,
.project-dataset-governance-form > p,
.project-dataset-governance-form > button {
  grid-column: 1 / -1;
  margin: 0;
}

.project-dataset-governance-form > label {
  display: grid;
  align-content: start;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

@media (max-width: 720px) {
  .project-dataset-governance-form {
    grid-template-columns: 1fr;
  }

  .project-dataset-governance-form > * {
    grid-column: 1;
  }
}

.project-version-history h4,
.project-dataset-lineage h5,
.project-version-record p,
.project-permission-editor h4,
.project-feature-editor h4 {
  margin: 0;
}

.project-spatial-preview h4 {
  margin: 0;
}

.project-spatial-preview .map-frame {
  width: 100%;
  min-height: 16rem;
}

.project-repository-source-facts {
  display: grid;
  grid-template-columns: minmax(8rem, auto) minmax(0, 1fr);
  gap: 0.35rem 0.7rem;
  margin: 0;
}

.project-repository-source-facts dt {
  color: var(--opengeo-muted);
  font-size: 0.78rem;
  font-weight: 700;
}

.project-repository-source-facts dd {
  overflow-wrap: anywhere;
  margin: 0;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 0.78rem;
}

.project-repository-copy-panel,
.project-repository-copy-history,
.project-repository-copy-form {
  display: grid;
  gap: 0.65rem;
}

.project-repository-copy-panel h5 {
  margin: 0.25rem 0 0;
  font-size: 0.88rem;
}

.project-repository-copy-form {
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.7rem;
  background: color-mix(in srgb, var(--opengeo-panel) 86%, transparent);
}

.project-repository-copy-form label {
  display: grid;
  gap: 0.25rem;
  min-width: 0;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-repository-copy-form input:not([type="checkbox"]),
.project-repository-copy-form select,
.project-repository-copy-form textarea {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.project-repository-copy-form label:has(input[type="checkbox"]) {
  grid-template-columns: 1.25rem minmax(0, 1fr);
  align-items: center;
}

.project-repository-copy-form label:has(input[type="checkbox"]) > span {
  grid-column: 2;
  grid-row: 1;
}

.project-repository-copy-form input[type="checkbox"] {
  grid-column: 1;
  grid-row: 1;
  width: 1.1rem;
  height: 1.1rem;
  margin: 0;
}

.project-version-record,
.project-permission-editor,
.project-feature-record {
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.65rem;
}

.project-feature-editor textarea {
  width: 100%;
  resize: vertical;
  font-family: var(--monospace);
  font-size: 0.78rem;
}

.project-feature-canvas,
.project-feature-fields {
  display: grid;
  gap: 0.55rem;
  min-width: 0;
  margin: 0;
  padding: 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
}

.project-feature-canvas h5,
.project-feature-fields legend {
  margin: 0;
  font-weight: 700;
}

.project-feature-canvas-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.project-feature-structure-controls {
  position: relative;
}

.project-feature-structure-controls > summary {
  min-height: 2rem;
  padding: 0.42rem 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 5px;
  color: var(--theme-foreground);
  cursor: pointer;
  font-weight: 650;
  list-style-position: inside;
}

.project-feature-structure-controls[open] > summary {
  border-color: var(--opengeo-blue);
}

.project-feature-structure-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-top: 0.35rem;
}

.project-feature-structure-toolbar .platform-button {
  min-height: 2rem;
  padding: 0.35rem 0.55rem;
}

.project-feature-map {
  position: relative;
  width: 100%;
  min-height: 20rem;
  overflow: hidden;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: #102333;
}

.project-feature-canvas-status {
  min-height: 1.3rem;
  margin: 0;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-feature-polygon-structure {
  min-width: 0;
  padding: 0.55rem 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: color-mix(in srgb, var(--opengeo-panel) 86%, transparent);
}

.project-feature-polygon-structure > summary {
  cursor: pointer;
  font-weight: 700;
}

.project-feature-polygon-structure > .project-catalog-feedback {
  margin-block: 0.55rem;
}

.project-feature-polygon-structure-controls,
.project-feature-polygon-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.4rem;
}

.project-feature-polygon-structure-controls select,
.project-feature-polygon-actions select {
  min-height: 2rem;
  max-width: min(100%, 18rem);
  border: 1px solid var(--opengeo-line);
  border-radius: 5px;
  padding: 0.35rem 0.5rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.project-feature-polygon-select {
  display: inline-flex;
  align-items: center;
  min-height: 2rem;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-feature-polygon-selection {
  color: var(--opengeo-muted);
  font-size: 0.78rem;
}

.project-feature-lock-controls {
  display: inline-flex;
  flex: 1 1 18rem;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.3rem;
  min-width: 0;
  padding: 0.2rem 0.35rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 5px;
  background: color-mix(in srgb, var(--opengeo-panel) 82%, transparent);
}

.project-feature-lock-status {
  flex: 1 1 12rem;
  min-width: 0;
  color: var(--opengeo-muted);
  font-size: 0.76rem;
  line-height: 1.25;
}

.project-feature-lock-controls[data-state="own"] {
  border-color: var(--opengeo-blue);
}

.project-feature-lock-controls[data-state="other"] {
  border-color: var(--opengeo-red);
}

.project-feature-lock-controls .platform-button {
  min-height: 1.9rem;
  padding: 0.25rem 0.45rem;
  font-size: 0.76rem;
}

@media (max-width: 640px), (max-width: 1000px) and (max-height: 500px) {
  .project-feature-polygon-structure-controls select,
  .project-feature-polygon-actions select,
  .project-feature-polygon-structure-controls .platform-button,
  .project-feature-polygon-actions .platform-button,
  .project-feature-polygon-select {
    min-height: 2.75rem;
    box-sizing: border-box;
  }

  .project-feature-lock-controls {
    flex-basis: 100%;
  }

  .project-feature-lock-controls .platform-button {
    min-height: 2.75rem;
  }

  .project-feature-polygon-structure-controls select,
  .project-feature-polygon-actions select {
    max-width: 100%;
  }
}

.tile-seed-extent-picker {
  display: grid;
  gap: 0.55rem;
  min-width: 0;
  margin-block: 0.7rem;
  padding: 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: var(--theme-background);
}

.tile-seed-extent-picker h6,
.tile-seed-extent-picker p {
  margin: 0;
}

.tile-seed-extent-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.tile-seed-extent-toolbar button[data-active="true"] {
  outline: 3px solid color-mix(in srgb, #f5b642 55%, transparent);
}

.tile-seed-extent-map {
  position: relative;
  width: 100%;
  min-height: 18rem;
  overflow: hidden;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: #102333;
}

.tile-seed-extent-fields {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(8rem, 1fr));
  gap: 0.5rem;
}

.tile-seed-extent-fields label {
  display: grid;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.tile-seed-extent-fields input {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.48rem 0.55rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.tile-seed-extent-status {
  min-height: 1.3rem;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-feature-fields {
  grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
}

.project-feature-fields legend,
.project-feature-fields > .project-catalog-feedback {
  grid-column: 1 / -1;
}

.project-feature-fields.nested {
  grid-template-columns: repeat(auto-fit, minmax(9rem, 1fr));
  padding: 0.5rem;
  background: color-mix(in srgb, var(--theme-background-alt) 55%, transparent);
}

.project-feature-group {
  display: grid;
  grid-column: 1 / -1;
  gap: 0.45rem;
  min-width: 0;
  margin: 0;
  padding: 0.55rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
}

.project-feature-repeat-list {
  display: grid;
  gap: 0.45rem;
}

.project-feature-repeat-item {
  display: grid;
  gap: 0.35rem;
  min-width: 0;
  padding: 0.45rem;
  border-inline-start: 3px solid var(--opengeo-accent);
  background: color-mix(in srgb, var(--theme-background-alt) 70%, transparent);
}

.project-feature-repeat-header,
.project-feature-repeat-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
}

.project-feature-repeat-header {
  justify-content: space-between;
}

.project-feature-repeat-header .platform-button,
.project-feature-repeat-actions .platform-button {
  width: auto;
  min-height: 2.1rem;
  padding: 0.32rem 0.52rem;
}

.project-feature-field-help {
  color: var(--opengeo-muted);
  font-size: 0.76rem;
  line-height: 1.35;
}

.project-feature-schema-designer,
.project-feature-schema-list,
.project-feature-schema-row {
  display: grid;
  min-width: 0;
  gap: 0.55rem;
}

.project-feature-schema-designer {
  margin: 0;
  padding: 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
}

.project-feature-schema-designer > legend,
.project-feature-schema-row > legend {
  padding-inline: 0.25rem;
  font-weight: 700;
}

.project-feature-schema-row {
  margin: 0;
  padding: 0.55rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: color-mix(in srgb, var(--theme-background-alt) 70%, transparent);
}

.project-feature-schema-grid,
.project-feature-schema-rules,
.project-feature-schema-condition {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(10rem, 1fr));
  gap: 0.5rem;
  min-width: 0;
}

.project-feature-group-rules > .project-feature-schema-designer {
  grid-column: 1 / -1;
}

.project-feature-schema-grid label,
.project-feature-schema-rules label,
.project-feature-schema-condition label {
  display: grid;
  gap: 0.25rem;
  min-width: 0;
  color: var(--opengeo-muted);
  font-size: 0.78rem;
}

.project-feature-schema-condition {
  padding-block-start: 0.5rem;
  border-block-start: 1px dashed var(--opengeo-line);
}

.project-feature-schema-grid .project-feature-schema-required {
  grid-template-columns: 1.25rem minmax(0, 1fr);
  align-content: end;
  align-items: center;
}

.project-feature-schema-required > span {
  grid-column: 2;
}

.project-feature-editor .project-feature-schema-required input[type="checkbox"] {
  grid-column: 1;
  grid-row: 1;
  width: 1.1rem;
  height: 1.1rem;
  margin: 0;
}

.project-feature-schema-choices {
  grid-column: span 2;
}

.project-feature-schema-actions,
.project-feature-schema-toolbar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  align-items: center;
}

.project-feature-schema-actions {
  justify-content: flex-end;
}

.project-feature-schema-actions .platform-button,
.project-feature-schema-toolbar .platform-button {
  width: auto;
  min-height: 2.25rem;
  padding: 0.38rem 0.58rem;
}

.project-feature-schema-toolbar output {
  margin-inline-end: auto;
}

@media (max-width: 34rem) {
  .project-feature-schema-choices {
    grid-column: 1 / -1;
  }

  .project-feature-schema-actions .platform-button {
    flex: 1 1 6rem;
    min-height: 2.75rem;
  }

  .project-feature-fields,
  .project-feature-fields.nested {
    grid-template-columns: minmax(0, 1fr);
    padding: 0.48rem;
  }

  .project-feature-group,
  .project-feature-repeat-item {
    padding: 0.45rem;
  }

  .project-feature-repeat-header .platform-button,
  .project-feature-repeat-actions .platform-button {
    min-height: 2.75rem;
  }
}

.project-feature-record {
  min-width: 0;
}

.project-feature-record strong,
.project-feature-record pre {
  overflow-wrap: anywhere;
  font-family: var(--monospace);
  font-size: 0.76rem;
}

.project-feature-record pre {
  overflow: auto;
  max-height: 14rem;
  margin: 0;
  padding: 0.55rem;
  background: var(--theme-background-alt);
}

.project-feature-form [hidden] {
  display: none;
}

.project-feature-history[hidden] {
  display: none;
}

.project-feature-history,
.project-feature-history ol,
.project-feature-history li,
.project-feature-history details {
  display: grid;
  gap: 0.45rem;
}

.project-feature-history ol {
  margin: 0;
  padding: 0;
  list-style: none;
}

.project-feature-history li {
  min-width: 0;
  padding-block-start: 0.45rem;
  border-block-start: 1px solid var(--opengeo-line);
}

.project-feature-history-heading {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.45rem;
  min-width: 0;
}

.project-feature-history details > summary {
  cursor: pointer;
  color: var(--opengeo-muted);
  font-size: 0.82rem;
}

.project-feature-tombstones {
  padding: 0.5rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 0.55rem;
  background: color-mix(in srgb, var(--theme-background-alt) 72%, transparent);
}

.project-feature-tombstones > summary {
  cursor: pointer;
  font-weight: 700;
}

.project-feature-tombstone {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.35rem 0.65rem;
  padding-block: 0.55rem;
  border-block-start: 1px solid var(--opengeo-line);
}

.project-feature-tombstone > strong,
.project-feature-tombstone-facts {
  min-width: 0;
  overflow-wrap: anywhere;
}

.project-feature-tombstone > strong {
  font-family: var(--monospace);
  font-size: 0.76rem;
}

.project-feature-tombstone-facts {
  color: var(--opengeo-muted);
  font-size: 0.76rem;
}

.project-feature-tombstone > .project-feature-history {
  grid-column: 1 / -1;
}

@media (max-width: 34rem) {
  .project-feature-tombstone {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-feature-tombstone > .project-feature-history {
    grid-column: 1;
  }
}

.project-version-record ul,
.project-permission-editor ul {
  display: grid;
  gap: 0.4rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.project-version-record li,
.project-permission-editor li {
  display: flex;
  justify-content: space-between;
  gap: 0.5rem;
  align-items: center;
}

.project-dataset-lineage {
  padding: 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: color-mix(in srgb, var(--theme-background), var(--theme-foreground) 3%);
}

.project-dataset-lineage-records {
  display: grid;
  gap: 0.55rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.project-dataset-lineage-records > li {
  display: grid;
  justify-items: start;
  gap: 0.3rem;
}

.project-dataset-lineage-facts {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  gap: 0.2rem 0.5rem;
  margin: 0;
  color: var(--opengeo-muted);
  font-size: 0.75rem;
}

.project-dataset-lineage-facts dt {
  font-weight: 700;
}

.project-dataset-lineage-facts dd {
  min-width: 0;
  margin: 0;
  overflow-wrap: anywhere;
  font-family: var(--monospace);
}

.project-document-preview,
.project-document-preview-content {
  display: grid;
  gap: 0.75rem;
}

.project-document-preview-page {
  padding: 1rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  background: var(--theme-background);
}

.project-document-preview-page-number {
  color: var(--opengeo-muted);
  font-size: 0.8rem;
  font-weight: 700;
  text-transform: uppercase;
}

.project-document-preview-heading {
  margin: 0.75rem 0 0.35rem;
  color: var(--theme-foreground-focus);
  font-size: 1.05rem;
  font-weight: 700;
}

.project-document-preview-table {
  width: 100%;
  border-collapse: collapse;
}

.project-document-preview-table caption {
  margin-bottom: 0.35rem;
  font-weight: 700;
  text-align: left;
}

.project-document-preview-table th,
.project-document-preview-table td {
  padding: 0.4rem;
  border: 1px solid var(--opengeo-line);
  text-align: left;
  vertical-align: top;
}

.project-upload-form {
  max-width: none;
}

.project-upload-fields {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.75rem;
}

.project-upload-feedback {
  min-height: 1.5rem;
  margin: 0;
  color: var(--opengeo-muted);
}

.project-upload-feedback[data-state="error"] {
  color: var(--opengeo-red);
}

.project-upload-feedback[data-state="queued"] {
  color: #3fb950;
}

.upload-panel {
  display: grid;
  gap: 0.75rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 1rem;
  background: var(--opengeo-panel);
  color: var(--theme-foreground);
  max-width: 46rem;
}

.upload-panel label {
  display: grid;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.88rem;
}

.upload-panel input,
.upload-panel select,
.upload-panel textarea {
  width: 100%;
  box-sizing: border-box;
  color: var(--theme-foreground);
  background: var(--theme-background);
  border-color: var(--opengeo-line);
}

.map-frame {
  min-height: 24rem;
  height: min(58vh, 34rem);
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  overflow: hidden;
  background: var(--opengeo-panel);
}

.maplibregl-map {
  position: relative;
  overflow: hidden;
}

.maplibregl-canvas {
  position: absolute;
  inset: 0;
}

.map-empty {
  display: grid;
  place-items: center;
  min-height: 16rem;
  border: 1px dashed var(--opengeo-line);
  border-radius: 8px;
  color: var(--opengeo-muted);
  background: var(--opengeo-panel);
}

.workbench {
  display: grid;
  grid-template-columns: minmax(16rem, 22rem) minmax(24rem, 1fr);
  gap: 1rem;
  margin: 1rem 0;
}

.workbench-panel {
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--opengeo-panel);
  color: var(--theme-foreground);
  padding: 0.85rem;
}

.workbench-panel h3 {
  margin-top: 0;
}

.workbench-layer {
  display: grid;
  gap: 0.45rem;
  padding: 0.7rem 0;
  border-top: 1px solid var(--opengeo-line);
}

.workbench-layer:first-of-type {
  border-top: 0;
}

.workbench-layer label {
  display: flex;
  gap: 0.45rem;
  align-items: center;
  color: var(--theme-foreground);
}

.workbench-layer small {
  color: var(--opengeo-muted);
}

.workbench-layer input[type="range"] {
  width: 100%;
}

.workbench-map {
  min-height: 30rem;
}

#observablehq-center:has(.opengeo-workbench) {
  margin-right: 1rem;
}

#observablehq-center:has(.opengeo-workbench) #observablehq-toc {
  display: none;
}

#observablehq-center:has(.opengeo-workbench) #observablehq-main {
  padding-right: 0 !important;
  max-width: none;
}

#observablehq-center:has(.opengeo-workbench) #observablehq-main > p,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > h1,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > h2,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > h3 {
  max-width: 58rem;
}

.opengeo-workbench {
  --gis-panel-bg: color-mix(in srgb, var(--theme-background-alt) 92%, var(--theme-foreground) 8%);
  --gis-panel-bg-strong: color-mix(in srgb, var(--theme-background-alt) 78%, var(--theme-foreground) 22%);
  --gis-border: color-mix(in srgb, var(--theme-foreground-muted) 26%, transparent);
  --gis-shadow: 0 18px 40px rgba(0, 0, 0, 0.28);
  display: grid;
  box-sizing: border-box;
  grid-template-columns: minmax(15rem, 18rem) minmax(26rem, 1fr) minmax(17rem, 21rem);
  grid-template-rows: auto minmax(42rem, 72vh);
  gap: 0;
  overflow: hidden;
  border: 1px solid var(--gis-border);
  border-radius: 8px;
  background: var(--theme-background);
  box-shadow: var(--gis-shadow);
  margin: 1.2rem 0 2rem;
}

.gis-topbar {
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: minmax(16rem, 1fr) auto auto;
  gap: 1rem;
  align-items: center;
  min-height: 3.7rem;
  padding: 0.55rem 0.75rem;
  border-bottom: 1px solid var(--gis-border);
  background: var(--gis-panel-bg-strong);
  color: var(--theme-foreground);
}

.gis-brand {
  display: grid;
  gap: 0.12rem;
}

.gis-brand strong {
  font-size: 1rem;
}

.gis-brand span,
.gis-layer-row small,
.gis-project-card p,
.gis-statusbar,
.gis-callout span,
.gis-file-drop span,
.gis-compact-section p {
  color: var(--theme-foreground-muted);
}

.gis-menu,
.gis-top-actions,
.gis-map-toolbar,
.gis-panel-tabs {
  display: flex;
  align-items: center;
  gap: 0.35rem;
}

.gis-menu button,
.gis-panel-tabs button,
.gis-button {
  border: 1px solid var(--gis-border);
  border-radius: 6px;
  background: var(--theme-background);
  color: var(--theme-foreground);
  font: inherit;
  font-size: 0.86rem;
  line-height: 1.2;
  padding: 0.42rem 0.58rem;
  cursor: pointer;
  text-decoration: none;
}

.gis-menu button.active,
.gis-panel-tabs button.active,
.gis-button.active,
.gis-button:hover,
.gis-menu button:hover,
.gis-panel-tabs button:hover {
  border-color: var(--theme-foreground-focus);
  background: color-mix(in srgb, var(--theme-foreground-focus) 16%, var(--theme-background));
  color: var(--theme-foreground);
}

.gis-button:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}

.gis-panel {
  overflow: auto;
  background: var(--gis-panel-bg);
  color: var(--theme-foreground);
}

.gis-panel-left {
  border-right: 1px solid var(--gis-border);
}

.gis-panel-right {
  border-left: 1px solid var(--gis-border);
}

.gis-project-card,
.gis-layer-list,
.gis-bookmarks,
.gis-panel-body,
.gis-panel-tabs {
  padding: 0.75rem;
}

.gis-project-card h2,
.gis-panel-body h2 {
  margin: 0 0 0.35rem;
  font-size: 1.05rem;
}

.gis-bookmarks h3,
.gis-panel-body h3,
.gis-compact-section h3 {
  margin: 0.9rem 0 0.35rem;
  font-size: 0.86rem;
  color: var(--theme-foreground-muted);
  text-transform: uppercase;
}

.gis-layer-list {
  display: grid;
  gap: 0.55rem;
}

.gis-layer-row {
  display: grid;
  gap: 0.45rem;
  border: 1px solid var(--gis-border);
  border-radius: 8px;
  padding: 0.62rem;
  background: var(--theme-background);
}

.gis-layer-row.active {
  border-color: var(--theme-foreground-focus);
  box-shadow: inset 3px 0 0 var(--theme-foreground-focus);
}

.gis-layer-row-top {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  gap: 0.45rem;
  align-items: center;
}

.gis-layer-row-top button:not(.gis-button) {
  border: 0;
  background: transparent;
  color: var(--theme-foreground);
  font: inherit;
  text-align: left;
  padding: 0;
  cursor: pointer;
}

.gis-layer-row input[type="range"],
.gis-field input[type="range"] {
  width: 100%;
}

.gis-map-column {
  position: relative;
  display: grid;
  grid-template-rows: auto 1fr auto;
  min-width: 0;
  background: #d7e1e8;
}

.gis-map-toolbar {
  position: absolute;
  z-index: 2;
  top: 0.75rem;
  left: 0.75rem;
  padding: 0.35rem;
  border: 1px solid rgba(15, 23, 42, 0.16);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.9);
  box-shadow: 0 8px 24px rgba(15, 23, 42, 0.18);
}

.gis-map-toolbar .gis-button {
  background: #fff;
  color: #111827;
}

.gis-map {
  position: relative;
  height: 100%;
  min-height: 30rem;
  overflow: hidden;
}

.gis-map .maplibregl-map,
.gis-map .maplibregl-canvas-container,
.gis-map .maplibregl-canvas {
  position: absolute;
  inset: 0;
  width: 100% !important;
  height: 100% !important;
}

.gis-map .maplibregl-canvas {
  outline: none;
}

/* MapLibre's attribution control is part of the map interaction surface. Keep
   the small required subset of its layout here so the control remains usable
   in OpenGeo's self-contained build and cannot expand across the tool stack. */
.gis-map .maplibregl-ctrl-bottom-left,
.gis-map .maplibregl-ctrl-bottom-right,
.gis-map .maplibregl-ctrl-top-left,
.gis-map .maplibregl-ctrl-top-right {
  position: absolute;
  z-index: 6;
  pointer-events: none;
}

.gis-map .maplibregl-ctrl-bottom-left {
  bottom: 0;
  left: 0;
}

.gis-map .maplibregl-ctrl-bottom-right {
  right: 0;
  bottom: 0;
}

.gis-map .maplibregl-ctrl-top-left {
  top: 0;
  left: 0;
}

.gis-map .maplibregl-ctrl-top-right {
  top: 0;
  right: 0;
}

.gis-map .maplibregl-ctrl {
  pointer-events: auto;
}

.gis-map .maplibregl-ctrl-attrib {
  box-sizing: border-box;
  max-width: min(26rem, calc(100vw - 43rem));
  margin: 0 0.75rem 0.75rem;
  border: 1px solid rgba(15, 23, 42, 0.2);
  border-radius: 999px;
  padding: 0;
  background: rgba(255, 255, 255, 0.96);
  color: #111827;
  font: 0.68rem/1.35 system-ui, sans-serif;
  box-shadow: 0 6px 18px rgba(15, 23, 42, 0.2);
}

.gis-map .maplibregl-ctrl-attrib-inner {
  max-height: 6rem;
  overflow: auto;
  padding: 0.42rem 2.6rem 0.42rem 0.65rem;
  overscroll-behavior: contain;
}

.gis-map .maplibregl-ctrl-attrib a {
  color: #1e40af;
}

.gis-map .maplibregl-ctrl-attrib-button {
  position: absolute;
  top: 0;
  right: 0;
  display: none;
  width: 2.25rem;
  height: 2.25rem;
  box-sizing: border-box;
  place-items: center;
  border: 0;
  border-radius: 999px;
  padding: 0;
  background: #ffffff;
  color: #111827;
  cursor: pointer;
  font: 700 0.85rem/1 system-ui, sans-serif;
  list-style: none;
}

.gis-map .maplibregl-ctrl-attrib-button::before {
  content: "i";
}

.gis-map .maplibregl-ctrl-attrib-button::-webkit-details-marker {
  display: none;
}

.gis-map .maplibregl-ctrl-attrib.maplibregl-compact {
  position: relative;
  min-width: 2.25rem;
  min-height: 2.25rem;
  padding: 0;
}

.gis-map .maplibregl-ctrl-attrib.maplibregl-compact .maplibregl-ctrl-attrib-button {
  display: grid;
}

.gis-map .maplibregl-ctrl-attrib.maplibregl-compact:not(.maplibregl-compact-show) .maplibregl-ctrl-attrib-inner {
  display: none;
}

.gis-map .maplibregl-ctrl-attrib.maplibregl-compact.maplibregl-compact-show {
  border-radius: 10px;
}

.gis-map .maplibregl-ctrl-attrib-button:focus-visible,
.gis-map .maplibregl-ctrl-attrib a:focus-visible {
  outline: 3px solid #2563eb;
  outline-offset: 2px;
}

.gis-kml-screen-overlay {
  display: block;
  object-fit: contain;
  user-select: none;
}

.gis-kml-screen-overlay[hidden] {
  display: none;
}

.gis-kml-overlay-preview {
  display: block;
  width: min(100%, 18rem);
  max-height: 12rem;
  margin: 0.5rem 0;
  border: 1px solid var(--gis-border, #475569);
  border-radius: 6px;
  object-fit: contain;
  background: rgba(15, 23, 42, 0.35);
}

.gis-statusbar {
  display: flex;
  flex-wrap: nowrap;
  gap: 0.75rem;
  align-items: center;
  min-height: 2rem;
  max-height: 2.25rem;
  padding: 0.35rem 0.75rem;
  border-top: 1px solid rgba(15, 23, 42, 0.18);
  background: rgba(255, 255, 255, 0.92);
  color: #334155;
  font-size: 0.78rem;
  overflow-x: auto;
  overflow-y: hidden;
  white-space: nowrap;
}

.gis-statusbar span {
  flex: 0 0 auto;
}

.gis-panel-tabs {
  position: sticky;
  top: 0;
  z-index: 1;
  border-bottom: 1px solid var(--gis-border);
  background: var(--gis-panel-bg);
}

.gis-panel-body {
  display: grid;
  gap: 0.75rem;
}

.gis-field {
  display: grid;
  gap: 0.25rem;
  color: var(--theme-foreground-muted);
  font-size: 0.84rem;
}

.gis-field input,
.gis-field select,
.gis-field textarea,
.gis-project-card select {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--gis-border);
  border-radius: 6px;
  background: var(--theme-background);
  color: var(--theme-foreground);
  padding: 0.42rem 0.5rem;
  font: inherit;
}

.gis-field input[type="color"] {
  min-height: 2.3rem;
  padding: 0.18rem;
}

.gis-check {
  display: flex;
  gap: 0.45rem;
  align-items: center;
  color: var(--theme-foreground);
}

.gis-attribute-summary {
  display: flex;
  gap: 0.4rem;
  align-items: baseline;
}

.gis-attribute-summary strong {
  font-size: 1.45rem;
}

.gis-attribute-table,
.gis-compact-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.78rem;
}

.gis-attribute-table th,
.gis-attribute-table td,
.gis-compact-table td {
  border-bottom: 1px solid var(--gis-border);
  padding: 0.36rem 0.28rem;
  text-align: left;
  vertical-align: top;
}

.gis-attribute-table th {
  color: var(--theme-foreground-muted);
  font-weight: 600;
}

.gis-query-panel,
.gis-query-builder,
.gis-query-results {
  min-width: 0;
}

.gis-history-panel,
.gis-history-panel .gis-editor-section {
  min-width: 0;
}

.gis-history-panel .gis-editor-section {
  display: grid;
  gap: 0.55rem;
}

.gis-history-panel .gis-editor-section > p,
.gis-history-panel .gis-editor-section > small {
  margin: 0;
  overflow-wrap: anywhere;
  color: var(--gis-muted);
  line-height: 1.45;
}

.gis-history-panel .gis-key-values {
  margin: 0;
  grid-template-columns: minmax(0, 1fr);
  font-size: 0.85rem;
  line-height: 1.45;
}

.gis-history-panel .gis-key-values dt { padding-bottom: 0.15rem; border-bottom: 0; }
.gis-history-panel .gis-key-values dd { min-width: 0; padding-top: 0; overflow-wrap: anywhere; }

.gis-history-navigation {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.gis-history-navigation .gis-button {
  min-width: 0;
  padding-inline: 0.4rem;
}

.gis-history-provenance {
  border-inline-start: 3px solid var(--gis-blue);
  padding-inline-start: 0.75rem;
}

.gis-query-builder {
  display: grid;
  gap: 0.6rem;
}

.gis-query-step {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.5rem;
  min-width: 0;
  margin: 0;
  padding: 0.6rem;
  border: 1px solid var(--gis-border);
  border-radius: 7px;
}

.gis-query-step legend {
  padding-inline: 0.25rem;
  color: var(--gis-ink);
  font-size: 0.78rem;
  font-weight: 650;
}

.gis-query-step > .gis-button,
.gis-query-step > .gis-check {
  align-self: end;
}

.gis-query-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.gis-query-run-actions {
  padding-block: 0.2rem;
  border-top: 1px solid var(--gis-border);
}

.gis-query-feedback {
  margin: 0;
  padding: 0.55rem;
  border: 1px solid var(--gis-border);
  border-radius: 6px;
}

.gis-query-feedback.error {
  border-color: #ef4444;
  color: var(--gis-ink);
}

.gis-query-receipt {
  overflow-wrap: anywhere;
  color: var(--gis-muted);
  font-family: var(--monospace);
}

.gis-query-result-table {
  display: block;
  max-width: 100%;
  overflow: auto;
}

.gis-query-drawing-guide {
  border-color: #f59e0b;
}

.gis-identify-panel,
.gis-identify-groups,
.gis-identify-layer,
.gis-identify-features,
.gis-saved-query-receipts,
.gis-saved-query-list,
.gis-saved-query-item {
  display: grid;
  min-width: 0;
  gap: 0.5rem;
}

.gis-identify-layer,
.gis-saved-query-item {
  border: 1px solid var(--gis-border);
  border-radius: 7px;
  padding: 0.6rem;
  background: var(--gis-elevated);
}

.gis-identify-layer h3,
.gis-identify-layer p,
.gis-saved-query-item strong,
.gis-saved-query-item small {
  min-width: 0;
  margin: 0;
  overflow-wrap: anywhere;
}

.gis-identify-layer h3 {
  font-size: 0.86rem;
}

.gis-identify-layer p,
.gis-saved-query-item small {
  color: var(--gis-muted);
  font-size: 0.76rem;
}

.gis-identify-features .gis-button {
  width: 100%;
  text-align: left;
}

.gis-file-drop,
.gis-callout,
.gis-log {
  display: grid;
  gap: 0.35rem;
  border: 1px dashed var(--gis-border);
  border-radius: 8px;
  background: var(--theme-background);
  padding: 0.75rem;
}

.gis-file-drop input {
  max-width: 100%;
  min-width: 0;
  width: 100%;
}

.browser-layer-registration {box-sizing: border-box; width: min(36rem, calc(100vw - 2rem)); max-height: 85vh; overflow: auto; color: var(--gis-ink, var(--theme-foreground)); background: var(--gis-panel-bg, var(--theme-background)); border: 1px solid var(--gis-line, var(--theme-foreground-faintest)); font: 14px/1.5 system-ui, sans-serif; padding: 1.2rem;}
.browser-layer-registration form {display: grid; gap: .75rem; min-width: 0;}
.browser-layer-registration label {display: grid; gap: .25rem;}
.browser-layer-registration input, .browser-layer-registration select {width: 100%; min-width: 0; box-sizing: border-box; color: inherit; background: var(--gis-panel-bg, var(--theme-background)); border: 1px solid var(--gis-line, var(--theme-foreground-faintest)); font: inherit;}
.delimited-text-import label:has(input[type="checkbox"]) {display: flex; align-items: center; gap: .5rem;}
.delimited-text-import input[type="checkbox"] {width: auto; flex: 0 0 auto;}
.delimited-text-import .delimited-preview {max-height: 12rem; max-width: 100%; overflow: auto;}
.delimited-text-import table {width: 100%; font-size: .85rem;}
.delimited-text-import th, .delimited-text-import td {color: inherit; padding: .35rem .5rem; overflow-wrap: anywhere; min-width: 5rem; max-width: 12rem;}
.browser-layer-registration h2, .browser-layer-registration label, .browser-layer-registration dl, .browser-layer-registration p {color: inherit;}
.browser-layer-registration button {font: inherit; color: inherit; background: var(--gis-panel-bg, var(--theme-background)); border: 1px solid var(--gis-line, var(--theme-foreground-faintest)); padding: .45rem .65rem;}
.browser-layer-registration .source-confirmation {display: flex; align-items: start; gap: .5rem;}
.browser-layer-registration .source-confirmation input[type="checkbox"] {width: auto; flex: 0 0 auto; margin: .3rem 0 0;}
.browser-layer-registration input::placeholder {color: inherit; opacity: .65;}
.browser-layer-registration::backdrop {background: rgb(0 0 0 / 50%);}
.browser-layer-registration dd {margin: 0 0 .5rem; overflow-wrap: anywhere;}
.browser-layer-registration dt {font-weight: 600;}
.browser-project-open-dialog {box-sizing: border-box; padding: 1.2rem; border: 1px solid var(--theme-foreground-faintest); border-radius: 8px; color: var(--theme-foreground); background: var(--theme-background); font: 14px/1.5 system-ui, sans-serif; overflow-wrap: anywhere;}
.browser-project-open-dialog::backdrop {background: rgb(0 0 0 / 55%);}
.browser-project-open-dialog h2 {margin-top: 0;}
.browser-project-open-dialog label {display: grid; gap: .35rem; margin-block: 1rem;}
.browser-project-open-dialog select {box-sizing: border-box; width: 100%; min-height: 2.5rem; padding: .45rem; color: inherit; background: var(--theme-background-alt); border: 1px solid var(--theme-foreground-faintest); border-radius: 5px; font: inherit;}
.browser-project-open-dialog .platform-actions {margin-top: 1rem;}
.browser-layer-catalog article {display: grid; gap: .5rem; padding: .75rem 0; border-bottom: 1px solid var(--gis-line); min-width: 0;}
.browser-layer-catalog strong {overflow-wrap: anywhere;}

.gis-project-dataset-choice strong {overflow-wrap: anywhere;}

.gis-log {
  max-height: 12rem;
  overflow: auto;
  border-style: solid;
  font-size: 0.82rem;
}

.gis-log p {
  margin: 0;
}

.gis-durable-job-list {
  display: grid;
  gap: 0.45rem;
}

.gis-durable-jobs > .gis-inline-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem;
}

.gis-durable-job-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.25rem 0.6rem;
  align-items: center;
  border: 1px solid var(--gis-border);
  border-radius: 7px;
  padding: 0.55rem;
  background: var(--theme-background);
}

.gis-durable-job-row > span {
  grid-column: 1;
  overflow-wrap: anywhere;
  color: var(--gis-muted);
  font-family: var(--monospace);
  font-size: 0.75rem;
}

.gis-durable-job-row > .gis-button {
  grid-column: 2;
  grid-row: 1 / span 2;
}

.gis-durable-jobs-feedback {
  margin: 0;
  color: var(--gis-ink);
}

.maplibregl-popup {
  z-index: 5;
}

.maplibregl-popup-content {
  border: 1px solid rgba(15, 23, 42, 0.18);
  border-radius: 8px;
  background: #fff;
  color: #111827;
  box-shadow: 0 14px 34px rgba(15, 23, 42, 0.2);
  padding: 0.7rem 0.8rem;
}

.maplibregl-popup-close-button {
  color: #111827;
}

.gis-popup {
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  gap: 0.22rem 0.6rem;
  margin: 0.45rem 0 0;
  font-size: 0.78rem;
}

.gis-popup dt {
  color: #64748b;
}

.gis-popup dd {
  margin: 0;
}

.print-studio-shell {
  display: grid;
  grid-template-columns: minmax(15rem, 20rem) minmax(0, 1fr);
  gap: 1rem;
  align-items: start;
  margin: 1rem 0;
}

.print-studio-controls,
.export-panel,
.distance-toolbar {
  display: grid;
  gap: 0.75rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--opengeo-panel);
  color: var(--theme-foreground);
  padding: 0.85rem;
}

.print-studio-controls {
  position: sticky;
  top: 1rem;
}

.print-summary {
  display: grid;
  gap: 0.25rem;
}

.print-summary span,
.distance-toolbar span,
.export-panel small {
  color: var(--opengeo-muted);
}

.print-field {
  display: grid;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.88rem;
}

.print-field input,
.print-field select {
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  color: var(--theme-foreground);
  background: var(--theme-background);
  border: 1px solid var(--opengeo-line);
  padding: 0.35rem 0.45rem;
  font: inherit;
}

.print-button {
  border: 1px solid var(--theme-foreground-focus);
  border-radius: 6px;
  background: var(--theme-foreground-focus);
  color: var(--theme-background);
  padding: 0.45rem 0.7rem;
  font: inherit;
  cursor: pointer;
}

.print-button.secondary {
  background: var(--theme-background);
  color: var(--theme-foreground);
  border-color: var(--opengeo-line);
}

.print-button:disabled {
  cursor: not-allowed;
  opacity: 0.55;
}

.print-stage {
  overflow: auto;
  padding: 1rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background:
    linear-gradient(45deg, var(--theme-background-alt) 25%, transparent 25%),
    linear-gradient(-45deg, var(--theme-background-alt) 25%, transparent 25%),
    linear-gradient(45deg, transparent 75%, var(--theme-background-alt) 75%),
    linear-gradient(-45deg, transparent 75%, var(--theme-background-alt) 75%);
  background-color: var(--theme-background);
  background-size: 18px 18px;
  background-position: 0 0, 0 9px, 9px -9px, -9px 0;
}

.layout-canvas {
  position: relative;
  flex: none;
  background: #fff;
  color: #1f2933;
  box-shadow: 0 12px 34px rgba(0, 0, 0, 0.24);
  transform-origin: top left;
}

.layout-element {
  position: absolute;
  box-sizing: border-box;
}

.layout-element.map_frame {
  border: 0.35mm solid #1f2933;
  overflow: hidden;
}

.layout-map-frame {
  position: relative;
  width: 100%;
  height: 100%;
  background: #eaf2f1;
}

.basemap-capture,
.basemap-canvas,
.plot-overlays {
  position: absolute;
  inset: 0;
}

.basemap-canvas {
  width: 100%;
  height: 100%;
}

.basemap-capture .print-button {
  position: absolute;
  right: 2mm;
  top: 2mm;
  z-index: 3;
  font-size: 0.72rem;
}

.plot-overlays {
  pointer-events: none;
}

.plot-overlays svg {
  position: absolute;
  inset: 0;
  width: 100% !important;
  height: 100% !important;
}

.plot-overlay-empty {
  position: absolute;
  left: 2mm;
  bottom: 8mm;
  max-width: 70mm;
  padding: 1mm 2mm;
  background: rgba(255, 255, 255, 0.82);
  border: 0.2mm solid #8b98a5;
  font-size: 8pt;
}

.map-attribution {
  position: absolute;
  right: 1.5mm;
  bottom: 1mm;
  z-index: 2;
  padding: 0.5mm 1mm;
  background: rgba(255, 255, 255, 0.78);
  color: #1f2933;
  font-size: 6.5pt;
}

.layout-legend {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  border: 0.25mm solid #b8c2cc;
  background: rgba(255, 255, 255, 0.94);
  padding: 3mm;
  color: #1f2933;
  font-size: 8.5pt;
}

.legend-item {
  display: flex;
  align-items: center;
  gap: 2mm;
  margin-top: 2mm;
}

.legend-swatch {
  width: 8mm;
  height: 3mm;
  border: 0.5mm solid currentColor;
  background: transparent;
}

.layout-scale-bar {
  display: grid;
  gap: 1mm;
  color: #1f2933;
  font-size: 7.5pt;
}

.scale-rail {
  display: grid;
  grid-auto-flow: column;
  height: 3.5mm;
  border: 0.25mm solid #1f2933;
}

.scale-rail span.dark {
  background: #1f2933;
}

.scale-rail span.light {
  background: #fff;
}

.layout-north-arrow {
  color: #1f2933;
  width: 100%;
  height: 100%;
}

.layout-north-arrow svg {
  width: 100%;
  height: 100%;
}

.layout-text {
  width: 100%;
  height: 100%;
  box-sizing: border-box;
  margin: 0;
  overflow: hidden;
  color: #1f2933;
}

.layout-text.title {
  font: 700 16pt/1.1 Georgia, serif;
}

.layout-text.note {
  padding: 2mm;
  border-left: 0.8mm solid #4269d0;
  font: 8pt/1.3 system-ui, sans-serif;
}

.layout-text.attribution {
  font: 7pt/1.2 system-ui, sans-serif;
  color: #4b5563;
}

.layout-measurement {
  position: relative;
  width: 100%;
  height: 100%;
  color: #b3261e;
}

.layout-measurement svg {
  width: 100%;
  height: 100%;
}

.layout-measurement span {
  position: absolute;
  left: 3mm;
  bottom: 2mm;
  padding: 0.8mm 1.4mm;
  background: rgba(255, 255, 255, 0.88);
  color: #7f1d1d;
  font-size: 7.5pt;
}

.key-value {
  display: grid;
  grid-template-columns: minmax(9rem, 14rem) 1fr;
  gap: 0.45rem 0.8rem;
  margin: 1rem 0;
}

.key-value dt {
  color: var(--opengeo-muted);
}

.key-value dd {
  margin: 0;
}

/* OpenGeo.Tools Observable workbench */

.public-workbench-demo {
  position: fixed;
  z-index: 50;
  inset: 0;
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  width: 100%;
  height: 100dvh;
  min-height: 0;
  overflow: hidden;
  background: #1e1e1e;
}

.public-demo-notice {
  position: relative;
  z-index: 30;
  display: grid;
  grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr) minmax(15rem, 1fr);
  gap: 0.65rem 1.25rem;
  align-items: start;
  min-height: 3.35rem;
  box-sizing: border-box;
  padding: 0.5rem 0.85rem;
  border-bottom: 1px solid #323231;
  background: #161616;
  color: #dfdfd6;
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

.public-demo-notice > span {
  display: grid;
  gap: 0.4rem;
  min-width: 0;
  overflow-wrap: anywhere;
}

.public-demo-service-boundaries {
  grid-column: 1 / -1;
  font-size: 0.8rem;
  max-height: 30dvh;
  overflow: auto;
}

.public-demo-service-boundaries summary { cursor: pointer; }
.public-demo-service-boundaries p { max-width: 80ch; margin: 0.5rem 0; }

.public-demo-notice small {
  color: #b6b6af;
  line-height: 1.45;
}

.public-demo-notice a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2rem;
  border: 1px solid oklch(0.712564 0.257662 265.758);
  border-radius: 999px;
  padding: 0.35rem 0.75rem;
  color: #dfdfd6;
  text-decoration: none;
  white-space: normal;
  text-align: center;
}

.public-demo-notice a:hover {
  background: #242a4a;
}

.public-demo-notice > .public-demo-actions {
  display: flex;
  grid-auto-flow: column;
  gap: 0.5rem 0.65rem;
  align-items: center;
  align-self: center;
  justify-content: end;
}

.public-demo-actions > * {
  box-sizing: border-box;
  min-width: 0;
  max-width: 100%;
}

.public-demo-load-state {
  display: grid;
  align-content: center;
  justify-items: start;
  gap: 0.65rem;
  min-height: 0;
  box-sizing: border-box;
  padding: clamp(1.5rem, 8vw, 7rem);
  background: #1e1e1e;
  color: #dfdfd6;
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

.public-demo-load-state > strong {
  font-size: clamp(1.25rem, 2.5vw, 2rem);
}

.public-demo-load-state > p,
.public-demo-load-state > small {
  max-width: 46rem;
  margin: 0;
  color: #b8b8b1;
  line-height: 1.5;
}

.public-demo-load-state button {
  min-height: 2.75rem;
  border: 1px solid #53618f;
  border-radius: 0.45rem;
  padding: 0.55rem 0.85rem;
  background: #202943;
  color: #f4f4ee;
  font: inherit;
  cursor: pointer;
}

.public-demo-state-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.55rem;
}

.public-demo-directory {
  grid-row: 1 / -1;
  min-height: 0;
  overflow: auto;
  box-sizing: border-box;
  padding: clamp(1rem, 4vw, 3.5rem);
  background: #1e1e1e;
  color: #dfdfd6;
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

.public-demo-directory-header {
  display: grid;
  gap: 0.55rem;
  max-width: 72rem;
  margin: 0 auto 1rem;
}

.public-demo-directory-header > * {
  margin: 0;
}

.public-demo-directory-header > h1 {
  font-size: clamp(1.75rem, 4vw, 3.25rem);
  line-height: 1.05;
}

.public-demo-directory-header > p:not(.public-demo-directory-eyebrow) {
  max-width: 52rem;
  color: #b8b8b1;
  line-height: 1.5;
}

.public-demo-directory-eyebrow {
  color: #79a5ff;
  font-size: 0.75rem;
  font-weight: 750;
  letter-spacing: 0.09em;
  text-transform: uppercase;
}

.public-demo-directory-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  margin-top: 0.25rem;
}

.public-demo-directory a {
  display: inline-flex;
  min-height: 2.25rem;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  border: 1px solid #53618f;
  border-radius: 0.45rem;
  padding: 0.45rem 0.75rem;
  background: #202943;
  color: #f4f4ee;
  text-decoration: none;
}

.public-demo-directory a:hover,
.public-demo-directory a:focus-visible {
  border-color: #79a5ff;
  background: #28365a;
}

.public-demo-project-grid {
  display: grid;
  grid-template-columns: minmax(14rem, 0.7fr) minmax(22rem, 1.3fr);
  gap: 0.75rem;
  max-width: 72rem;
  margin: 0 auto;
}

.public-demo-example-section,
.public-demo-publication {
  max-width: 72rem;
  margin: 1.5rem auto;
}

.public-demo-example-section > p,
.public-demo-publication > p {
  color: #b8b8b1;
  line-height: 1.6;
  max-width: 56rem;
}

.public-demo-example-section input[type="search"] {
  box-sizing: border-box;
  width: min(100%, 32rem);
  min-height: 2.5rem;
  padding: .5rem .75rem;
  color: inherit;
  background: #171717;
  border: 1px solid #53618f;
  border-radius: .45rem;
}

.public-demo-catalog-results {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
  gap: .75rem;
  max-height: 28rem;
  overflow: auto;
}

.public-demo-publication table {
  border-collapse: collapse;
  width: min(100%, 40rem);
}

.public-demo-publication th,
.public-demo-publication td {
  text-align: left;
  border-bottom: 1px solid #53618f;
  padding: .65rem;
}

.public-demo-publication-map:has(.gis-workbench) {
  height: 38rem;
  max-height: 75vh;
  min-height: 24rem;
  display: grid;
  overflow: hidden;
  margin-bottom: 1rem;
}

.public-demo-project-card {
  display: grid;
  align-content: start;
  justify-items: start;
  gap: 0.65rem;
  min-width: 0;
  border: 1px solid #3b3b39;
  border-radius: 0.7rem;
  padding: 1rem;
  background: #171717;
}

.public-demo-project-card > h2,
.public-demo-project-card > p,
.public-demo-map-directory > h3 {
  margin: 0;
}

.public-demo-project-card > p:not(.public-demo-project-facts) {
  color: #b8b8b1;
  line-height: 1.45;
}

.public-demo-project-facts {
  color: #8f8f8a;
  font-size: 0.8rem;
}

.public-demo-project-card .platform-static-item-search {
  width: 100%;
  min-width: 0;
}

.public-demo-project-card .platform-controls label {
  flex: 1 1 12rem;
}

.public-demo-project-card .platform-controls input {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
}

.public-demo-map-directory {
  display: grid;
  gap: 0.4rem;
  width: 100%;
  margin-top: 0.4rem;
  border-top: 1px solid #323231;
  padding-top: 0.8rem;
}

.public-demo-map-group {
  overflow: hidden;
  border: 1px solid #323231;
  border-radius: 0.45rem;
  background: #1e1e1e;
}

.public-demo-map-group > summary {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.6rem;
  align-items: center;
  min-height: 2.5rem;
  box-sizing: border-box;
  padding: 0.45rem 0.65rem;
  cursor: pointer;
}

.public-demo-map-group > summary > small {
  color: #8f8f8a;
}

.public-demo-map-links {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 1px;
  border-top: 1px solid #323231;
  background: #323231;
}

.public-demo-map-links > a {
  justify-content: start;
  border: 0;
  border-radius: 0;
  background: #171717;
  text-align: left;
}

.public-workbench-demo > .opengeo-workbench {
  height: auto;
  min-height: 0;
  margin: 0;
}

.public-workbench-demo > .opengeo-workbench:has(.gis-modal-layer:not(:empty)) {
  z-index: 40;
}

#observablehq-center:has(.opengeo-workbench) {
  margin-right: 0 !important;
}

body:has(.opengeo-workbench) #observablehq-sidebar,
body:has(.opengeo-workbench) #observablehq-sidebar-toggle,
body:has(.opengeo-workbench) #observablehq-sidebar-backdrop {
  display: none !important;
}

body:has(.opengeo-workbench) {
  margin: 0 !important;
  overflow-x: hidden;
}

body:has(.opengeo-workbench) #observablehq-center {
  display: block !important;
  margin: 0 !important;
  padding-top: 0 !important;
  padding-left: 0 !important;
  max-width: none !important;
}

#observablehq-center:has(.opengeo-workbench) #observablehq-main {
  margin: 0 !important;
  padding: 0 !important;
  max-width: none !important;
}

#observablehq-center:has(.opengeo-workbench) #observablehq-toc {
  display: none !important;
}

#observablehq-center:has(.opengeo-workbench) #observablehq-footer {
  display: none !important;
}

#observablehq-center:has(.opengeo-workbench) #observablehq-main > h2,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > h3,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > p,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > table,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > .summary-grid,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > form,
#observablehq-center:has(.opengeo-workbench) #observablehq-main > .card {
  margin-left: clamp(1rem, 4vw, 3rem);
  margin-right: clamp(1rem, 4vw, 3rem);
}

.opengeo-workbench,
.browser-print-studio {
  --gis-app-bg: #f7f9fc;
  --gis-panel-bg: #ffffff;
  --gis-panel-strong: #eef3fb;
  --gis-elevated: #ffffff;
  --gis-ink: #111827;
  --gis-muted: #46546a;
  --gis-line: #c5d0df;
  --gis-blue: #245fc5;
  --gis-blue-soft: #e8f0ff;
  --gis-danger: #c2410c;
  --gis-shadow: 0 18px 42px rgba(15, 23, 42, 0.16);
  /* Shared Studio components inherit the active workbench palette. */
  --theme-background: var(--gis-panel-bg);
  --theme-background-alt: var(--gis-panel-strong);
  --theme-foreground: var(--gis-ink);
  --theme-foreground-alt: var(--gis-ink);
  --theme-foreground-muted: var(--gis-muted);
  --theme-foreground-faint: var(--gis-muted);
  --theme-foreground-fainter: var(--gis-line);
  --theme-foreground-faintest: var(--gis-line);
  --theme-foreground-focus: var(--gis-blue);
  --opengeo-muted: var(--gis-muted);
  --opengeo-line: var(--gis-line);
  --opengeo-panel: var(--gis-panel-bg);
  --opengeo-panel-strong: var(--gis-panel-strong);
  --opengeo-blue: var(--gis-blue);
  color-scheme: light;
}

.opengeo-workbench {
  display: grid;
  grid-template-columns: minmax(17rem, 20rem) minmax(0, 1fr) minmax(18rem, 22rem);
  grid-template-rows: 2.75rem minmax(0, 1fr);
  width: 100%;
  min-height: 42rem;
  height: 100vh;
  margin: 0 0 1.5rem;
  overflow: hidden;
  border: 1px solid var(--gis-line);
  border-radius: 0;
  background: var(--gis-app-bg);
  color: var(--gis-ink);
  box-shadow: var(--gis-shadow);
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

@media (prefers-color-scheme: dark) {
  .opengeo-workbench[data-color-mode="auto"] {
    --gis-app-bg: #1e1e1e;
    --gis-panel-bg: #161616;
    --gis-panel-strong: #202020;
    --gis-elevated: #242424;
    --gis-ink: #f0f0ea;
    --gis-muted: #b6b6af;
    --gis-line: #454542;
    --gis-blue: oklch(0.712564 0.257662 265.758);
    --gis-blue-soft: #242a4a;
    --gis-danger: #ff8b7c;
    --gis-shadow: 0 18px 42px rgba(0, 0, 0, 0.42);
    color-scheme: dark;
  }
}

.opengeo-workbench[data-color-mode="dark"],
.browser-print-studio[data-color-mode="dark"] {
  --gis-app-bg: #1e1e1e;
  --gis-panel-bg: #161616;
  --gis-panel-strong: #202020;
  --gis-elevated: #242424;
  --gis-ink: #f0f0ea;
  --gis-muted: #b6b6af;
  --gis-line: #454542;
  --gis-blue: oklch(0.712564 0.257662 265.758);
  --gis-blue-soft: #242a4a;
  --gis-danger: #ff8b7c;
  --gis-shadow: 0 18px 42px rgba(0, 0, 0, 0.42);
  color-scheme: dark;
}

.opengeo-workbench[data-color-mode="light"],
.browser-print-studio[data-color-mode="light"] {
  color-scheme: light;
}

.opengeo-workbench.left-collapsed {
  grid-template-columns: 0 minmax(0, 1fr) minmax(18rem, 22rem);
}

.opengeo-workbench.right-collapsed {
  grid-template-columns: minmax(17rem, 20rem) minmax(0, 1fr) 0;
}

.opengeo-workbench.left-collapsed.right-collapsed {
  grid-template-columns: 0 minmax(0, 1fr) 0;
}

.opengeo-workbench.left-collapsed .gis-panel-left,
.opengeo-workbench.right-collapsed .gis-panel-right {
  display: none;
}

.opengeo-workbench button,
.opengeo-workbench input,
.opengeo-workbench select,
.opengeo-workbench textarea {
  font: inherit;
}

.gis-topbar {
  position: relative;
  z-index: 20;
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: minmax(10.5rem, auto) auto minmax(0, 1fr) auto;
  align-items: stretch;
  gap: 0.45rem;
  min-height: 0;
  padding: 0 0.55rem;
  border-bottom: 1px solid var(--gis-line);
  background: var(--gis-panel-bg);
  color: var(--gis-ink);
}

.gis-brand {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  min-width: 0;
  color: var(--gis-blue);
  text-decoration: none;
}

.gis-brand::before {
  content: "";
  width: 1rem;
  height: 1rem;
  border: 2px solid currentColor;
  border-radius: 3px;
  box-shadow: inset 0.28rem 0 0 transparent, inset -0.28rem 0 0 transparent;
}

.gis-brand strong {
  font-size: 0.95rem;
  font-weight: 700;
  white-space: nowrap;
}

.gis-brand span {
  max-width: 18rem;
  overflow: hidden;
  color: var(--gis-muted);
  font-size: 0.78rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-menubar,
.gis-app-nav,
.gis-top-actions {
  display: flex;
  align-items: center;
  gap: 0.2rem;
  min-width: 0;
}

.gis-app-nav {
  padding-inline: 0.25rem;
  border-inline: 1px solid var(--gis-line);
  overflow-x: auto;
  scrollbar-width: thin;
}

.gis-app-nav .gis-button.active {
  border-color: color-mix(in srgb, var(--gis-blue) 48%, var(--gis-line));
  background: color-mix(in srgb, var(--gis-blue-soft) 78%, var(--gis-panel-bg));
  color: var(--gis-ink);
}

.gis-menubar {
  overflow: visible;
  scrollbar-width: thin;
}

.gis-menubar > .gis-menu-wrap > .gis-button {
  min-height: 2.05rem;
  padding-inline: 0.68rem;
  font-weight: 560;
}

.gis-menu-button {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}

.gis-menu-button::after {
  content: "";
  width: 0;
  height: 0;
  margin-top: 0.16rem;
  border-top: 0.28rem solid currentColor;
  border-inline: 0.24rem solid transparent;
  opacity: 0.72;
}

.gis-top-actions {
  justify-content: end;
  white-space: nowrap;
}

.gis-workspace-select {
  width: clamp(10rem, 18vw, 16rem);
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  background: var(--gis-elevated);
  color: var(--gis-ink);
  padding: 0.36rem 0.5rem;
  font-size: 0.82rem;
}

.gis-menu-wrap {
  position: relative;
  flex: 0 0 auto;
}

.gis-button,
.gis-menu-item,
.gis-icon-button {
  border: 1px solid transparent;
  border-radius: 6px;
  background: transparent;
  color: var(--gis-ink);
  cursor: pointer;
  line-height: 1.15;
  text-decoration: none;
}

.gis-button {
  padding: 0.42rem 0.55rem;
  font-size: 0.86rem;
}

.gis-button:hover,
.gis-button.active,
.gis-menu-item:hover {
  border-color: color-mix(in srgb, var(--gis-blue) 48%, var(--gis-line));
  background: var(--gis-blue-soft);
}

.gis-link-button {
  display: inline-flex;
  align-items: center;
}

.gis-button.danger,
.gis-icon-button.danger {
  color: var(--gis-danger);
}

.gis-button.danger:hover,
.gis-icon-button.danger:hover {
  border-color: color-mix(in srgb, var(--gis-danger) 58%, var(--gis-line));
  background: color-mix(in srgb, var(--gis-danger) 14%, transparent);
}

.gis-icon-button {
  display: inline-grid;
  place-items: center;
  min-width: 2rem;
  min-height: 1.9rem;
  padding: 0.32rem 0.45rem;
  font-size: 0.74rem;
}

.gis-menu-dropdown {
  position: absolute;
  top: calc(100% + 1px);
  left: 0;
  z-index: 80;
  width: min(24rem, 90vw);
  max-height: min(76vh, 42rem);
  overflow: auto;
  border: 1px solid var(--gis-line);
  border-radius: 7px;
  background: var(--gis-panel-bg);
  box-shadow: 0 24px 48px rgba(0, 0, 0, 0.32);
}

.gis-menu-dropdown > strong {
  display: block;
  padding: 0.85rem 0.9rem 0.55rem;
  font-size: 0.95rem;
}

.gis-menu-section {
  display: grid;
  gap: 0.1rem;
  padding: 0.35rem;
  border-top: 1px solid var(--gis-line);
}

.gis-menu-label {
  padding: 0.35rem 0.5rem 0.2rem;
  color: var(--gis-muted);
  font-size: 0.74rem;
  font-weight: 700;
  text-transform: uppercase;
}

.gis-menu-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 1rem;
  width: 100%;
  padding: 0.52rem 0.55rem;
  text-align: left;
}

.gis-menu-item kbd {
  color: var(--gis-muted);
  font-size: 0.74rem;
  font-family: inherit;
}

.gis-panel {
  min-width: 0;
  min-height: 0;
  overflow: auto;
  background: var(--gis-panel-bg);
  color: var(--gis-ink);
}

.gis-panel-left {
  display: grid;
  grid-template-rows: auto minmax(9rem, 0.78fr) minmax(14rem, 1fr) auto;
  overflow: hidden;
  border-right: 1px solid var(--gis-line);
}

.gis-panel-right {
  border-left: 1px solid var(--gis-line);
}

.gis-panel-header {
  position: sticky;
  top: 0;
  z-index: 4;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  min-height: 2.8rem;
  padding: 0.7rem 0.85rem;
  border-bottom: 1px solid var(--gis-line);
  background: color-mix(in srgb, var(--gis-panel-bg) 92%, transparent);
  backdrop-filter: blur(10px);
}

.gis-panel-header h2 {
  margin: 0;
  font-size: 0.98rem;
}

.gis-icon-row,
.gis-layer-tools {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  justify-content: end;
}

.gis-project-card,
.gis-kml-layer-editor,
.gis-layer-dock,
.gis-layer-list,
.gis-bookmarks,
.gis-search,
.gis-panel-body,
.gis-panel-tabs,
.gis-inspector-tabs {
  padding: 0.78rem;
}

.gis-kml-layer-editor {
  display: grid;
  align-content: start;
  gap: 0.7rem;
  max-height: min(46dvh, 28rem);
  min-height: 0;
  padding: 0.65rem;
  overflow: auto;
}

.gis-places-tree,
.gis-places-tree ul {
  display: grid;
  gap: 0.25rem;
  margin: 0;
  padding-left: 1rem;
  list-style: none;
}

.gis-places-tree {
  padding-left: 0;
}

.gis-places-tree summary,
.gis-places-tree button {
  color: var(--gis-ink);
  font-size: 0.8rem;
}

.gis-places-tree button {
  width: 100%;
  justify-content: start;
  text-align: left;
}

.gis-place-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.3rem;
}

.gis-place-row .gis-button:last-child,
.gis-places-tree details > .gis-button {
  width: auto;
  color: var(--gis-muted);
  font-size: 0.7rem;
}

.gis-places-tree li.selected > .gis-place-row,
.gis-places-tree li.selected > details {
  border-radius: 5px;
  outline: 2px solid color-mix(in srgb, var(--opengeo-blue) 55%, transparent);
}

.gis-places-authoring {
  border: 1px solid var(--gis-line);
  border-radius: 7px;
  padding: 0.55rem;
  background: color-mix(in srgb, var(--gis-panel-bg) 88%, var(--theme-background-alt));
}

.gis-places-authoring > summary {
  cursor: pointer;
  font-size: 0.8rem;
  font-weight: 750;
}

.gis-places-authoring .gis-form-grid {
  margin-top: 0.65rem;
}

.gis-places-authoring textarea {
  min-height: 4.5rem;
  resize: vertical;
}

.gis-portal-configuration {
  display: grid;
  min-width: 0;
  gap: 0.55rem;
  padding-top: 0.7rem;
  border-top: 1px solid var(--gis-line);
}

.gis-portal-configuration > h3,
.gis-portal-configuration h4 {
  margin: 0;
  color: var(--gis-ink);
  font-size: 0.82rem;
}

.gis-portal-configuration > p {
  margin: 0;
  color: var(--gis-muted);
  font-size: 0.74rem;
  line-height: 1.45;
}

.gis-portal-catalog,
.gis-portal-tools {
  display: grid;
  min-width: 0;
  gap: 0.35rem;
}

.gis-portal-catalog ul,
.gis-portal-tools ul {
  display: grid;
  min-width: 0;
  gap: 0.26rem;
  margin: 0;
  padding-left: 0.85rem;
  list-style: none;
}

.gis-portal-catalog > ul,
.gis-portal-tools > ul {
  padding-left: 0;
}

.gis-portal-actions {
  margin: 0.75rem 0;
}

.gis-portal-location {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.4rem;
  min-width: 0;
}

.gis-portal-location > .gis-button:first-child {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-portal-catalog li,
.gis-portal-tools li {
  display: grid;
  min-width: 0;
  gap: 0.18rem;
}

.gis-portal-catalog details,
.gis-portal-catalog summary {
  min-width: 0;
}

.gis-portal-catalog details > summary {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.35rem;
  padding: 0.25rem 0;
  cursor: pointer;
}

.gis-portal-catalog details > summary::marker {
  color: var(--gis-muted);
}

.gis-portal-catalog details > summary strong,
.gis-portal-catalog details > summary small {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-portal-coordinate-note {
  padding: 0.45rem 0.55rem;
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  background: color-mix(in srgb, var(--gis-panel-bg) 88%, var(--theme-background-alt));
}

.gis-portal-catalog-layer {
  display: grid;
  min-width: 0;
  gap: 0.35rem;
  padding: 0.5rem;
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  background: color-mix(in srgb, var(--gis-panel-bg) 92%, var(--theme-background-alt));
}

.gis-portal-catalog-layer-heading {
  display: flex;
  min-width: 0;
  align-items: center;
  justify-content: space-between;
  gap: 0.4rem;
}

.gis-portal-catalog-layer-heading strong {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-portal-source-status {
  flex: 0 0 auto;
  padding: 0.12rem 0.32rem;
  border: 1px solid var(--gis-line);
  border-radius: 999px;
  color: var(--gis-ink);
  font-size: 0.61rem;
  line-height: 1.2;
  text-transform: uppercase;
}

.gis-portal-source-status.governed {
  border-color: color-mix(in srgb, #22c55e 55%, var(--gis-line));
  background: color-mix(in srgb, #22c55e 8%, var(--gis-panel));
  color: var(--gis-ink);
}

.gis-portal-source-status.fixture {
  border-color: color-mix(in srgb, #f59e0b 60%, var(--gis-line));
  background: color-mix(in srgb, #f59e0b 8%, var(--gis-panel));
  color: var(--gis-ink);
}

.gis-portal-source-status.invalid {
  border-color: color-mix(in srgb, #ef4444 58%, var(--gis-line));
  background: color-mix(in srgb, #ef4444 8%, var(--gis-panel));
  color: var(--gis-ink);
}

.gis-portal-layer-controls {
  display: grid;
  grid-template-columns: auto auto minmax(4.5rem, 1fr) repeat(3, auto);
  min-width: 0;
  align-items: center;
  gap: 0.28rem;
  color: var(--gis-muted);
  font-size: 0.68rem;
}

.gis-portal-layer-controls input[type="range"] {
  width: 100%;
  min-width: 0;
}

.gis-portal-layer-controls .gis-icon-button {
  width: auto;
  min-width: 1.8rem;
  padding: 0.28rem 0.38rem;
}

.gis-portal-legend > summary {
  display: list-item;
  padding: 0;
  color: var(--gis-muted);
  font-size: 0.7rem;
}

.gis-portal-legend > div {
  display: grid;
  min-width: 0;
  gap: 0.25rem;
  padding: 0.35rem 0 0.15rem;
}

.gis-portal-legend p {
  margin: 0;
  color: var(--gis-ink);
  font-size: 0.7rem;
  line-height: 1.4;
}

.gis-portal-legend > div > span {
  display: flex;
  min-width: 0;
  align-items: center;
  gap: 0.35rem;
}

.gis-portal-legend i {
  width: 1.3rem;
  height: 0.75rem;
  flex: 0 0 auto;
  border: 1px solid color-mix(in srgb, var(--gis-ink) 35%, transparent);
  border-radius: 2px;
}

@media (max-width: 820px) {
  .gis-portal-layer-controls {
    grid-template-columns: auto auto minmax(3.5rem, 1fr) repeat(2, auto);
  }

  .gis-portal-layer-controls .gis-icon-button:last-child {
    grid-column: 1 / -1;
    width: 100%;
  }
}

.gis-portal-catalog small,
.gis-portal-tools small {
  overflow: hidden;
  color: var(--gis-muted);
  font-size: 0.68rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-portal-tools .gis-button {
  width: 100%;
  justify-content: start;
  overflow: hidden;
  text-align: left;
  text-overflow: ellipsis;
}

.gis-dock-heading h3 {
  margin: 0;
  color: var(--gis-muted);
  font-size: 0.74rem;
  font-weight: 800;
  letter-spacing: 0;
  text-transform: uppercase;
}

.gis-layer-dock {
  display: grid;
  grid-template-rows: minmax(0, 1fr) auto;
  gap: 0.55rem;
  min-height: 0;
  overflow: hidden;
  border-bottom: 1px solid var(--gis-line);
}

.gis-dock-heading {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 0.65rem;
}

.gis-dock-heading > .gis-icon-row {
  flex: 0 0 auto;
  flex-wrap: nowrap;
}

.gis-project-card {
  display: grid;
  gap: 0.65rem;
  border-bottom: 1px solid var(--gis-line);
  color: var(--gis-muted);
}

.gis-project-card strong {
  color: var(--gis-ink);
}

.gis-project-card p,
.gis-bookmarks p,
.gis-panel-body p,
.gis-callout span,
.gis-file-drop span,
.gis-check small,
.gis-layer-row small {
  margin: 0;
  color: var(--gis-muted);
}

.gis-basemap-control {
  display: grid;
  gap: 0.38rem;
}

.gis-basemap-templates {
  display: grid;
  gap: 0.55rem;
}

.gis-basemap-card {
  display: grid;
  gap: 0.25rem;
  width: 100%;
  border: 1px solid var(--gis-line);
  border-radius: 8px;
  background: var(--gis-panel-bg);
  color: var(--gis-ink);
  padding: 0.65rem;
  text-align: left;
  cursor: pointer;
}

.gis-basemap-card:hover,
.gis-basemap-card.active {
  border-color: var(--gis-blue);
  background: var(--gis-blue-soft);
}

.gis-basemap-card span,
.gis-basemap-card small {
  color: var(--gis-muted);
}

.gis-basemap-control span,
.gis-field > span {
  color: var(--gis-muted);
  font-size: 0.76rem;
  font-weight: 650;
}

.gis-basemap-control select,
.gis-search input,
.gis-field input,
.gis-field select,
.gis-field textarea {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  background: var(--gis-elevated);
  color: var(--gis-ink);
  padding: 0.48rem 0.55rem;
}

.gis-layer-list {
  display: grid;
  align-content: start;
  gap: 0.42rem;
  min-height: 0;
  overflow: auto;
  padding: 0;
}

.gis-empty-project-actions {
  display: grid;
  gap: 0.65rem;
  border: 1px solid color-mix(in srgb, var(--gis-blue) 42%, var(--gis-line));
  border-radius: 9px;
  padding: 0.72rem;
  background: color-mix(in srgb, var(--gis-blue-soft) 58%, var(--gis-panel-bg));
}

.gis-empty-project-actions > strong {
  font-size: 0.86rem;
}

.gis-empty-project-actions > p {
  margin: 0;
  color: var(--gis-muted);
  font-size: 0.76rem;
  line-height: 1.42;
}

.gis-empty-project-action-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.35rem;
}

.gis-empty-project-action {
  display: flex;
  min-width: 0;
  min-height: 2.35rem;
  align-items: center;
  gap: 0.4rem;
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  padding: 0.42rem 0.48rem;
  background: var(--gis-elevated);
  color: var(--gis-ink);
  cursor: pointer;
  text-align: left;
}

.gis-empty-project-action.wide {
  grid-column: 1 / -1;
}

.gis-empty-project-action > span {
  display: inline-grid;
  flex: 0 0 1rem;
  place-items: center;
  color: var(--gis-blue);
}

.gis-empty-project-action > strong {
  min-width: 0;
  font-size: 0.74rem;
  font-weight: 650;
}

.gis-empty-project-action:hover,
.gis-empty-project-action:focus-visible {
  outline: 0;
  border-color: var(--gis-blue);
  background: var(--gis-blue-soft);
  box-shadow: inset 0 0 0 1px var(--gis-blue);
}

.gis-layer-row {
  display: grid;
  gap: 0.42rem;
  border: 1px solid var(--gis-line);
  border-radius: 8px;
  padding: 0.55rem;
  background: var(--gis-elevated);
}

.gis-layer-row.active {
  border-color: var(--gis-blue);
  box-shadow: inset 3px 0 0 var(--gis-blue);
}

.gis-layer-row[data-persistence="temporary"] {
  border-color: color-mix(in srgb, #f59e0b 64%, var(--gis-line));
  background: color-mix(in srgb, #f59e0b 8%, var(--gis-elevated));
  box-shadow: inset 3px 0 0 #f59e0b;
}

.gis-layer-row[data-persistence="temporary"] > small {
  color: color-mix(in srgb, #f59e0b 76%, var(--gis-ink));
}

.gis-layer-row-top {
  display: grid;
  grid-template-columns: auto auto minmax(0, 1fr);
  gap: 0.42rem;
  align-items: center;
}

.gis-layer-row-top > button {
  min-width: 0;
  overflow: hidden;
  padding: 0;
  text-align: left;
  text-overflow: ellipsis;
  white-space: normal;
}

.gis-layer-row .gis-layer-tools {
  justify-content: start;
}

.gis-swatch {
  width: 0.85rem;
  height: 0.85rem;
  border: 1px solid rgba(255, 255, 255, 0.72);
  border-radius: 999px;
  box-shadow: 0 0 0 1px var(--gis-line);
}

.gis-search {
  display: grid;
  gap: 0.4rem;
  border-bottom: 1px solid var(--gis-line);
}

.gis-bookmark-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 0.28rem;
  align-items: center;
}

.gis-bookmark-strip strong {
  flex: 1 0 100%;
  color: var(--gis-muted);
  font-size: 0.74rem;
  text-transform: uppercase;
}

.gis-bookmark-strip span {
  color: var(--gis-muted);
  font-size: 0.78rem;
}

.gis-bookmarks {
  display: grid;
  gap: 0.4rem;
}

.gis-bookmarks h3,
.gis-panel-body h3,
.gis-compact-section h3 {
  margin: 0.45rem 0 0.1rem;
  color: var(--gis-muted);
  font-size: 0.76rem;
  font-weight: 800;
  letter-spacing: 0;
  text-transform: uppercase;
}

.gis-map-column {
  position: relative;
  display: grid;
  /* Status text must not widen the implicit map track beyond the viewport. */
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: minmax(0, 1fr) auto;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  background: #07172b;
}

.gis-map {
  position: relative;
  min-height: 0;
  height: 100%;
  overflow: hidden;
}

.gis-renderer-surface {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
}

.gis-renderer-surface[data-pending] {
  opacity: 0;
  pointer-events: none;
}

.gis-renderer-panel {
  display: grid;
  gap: 0.65rem;
  overflow-wrap: anywhere;
}
.gis-renderer-panel label { display: grid; gap: 0.3rem; }
.gis-renderer-panel input { width: 100%; min-width: 0; box-sizing: border-box; }
.gis-layer-renderer-notice { display: block; white-space: normal; padding: 0.35rem; }

.gis-map .maplibregl-map,
.gis-map .maplibregl-canvas-container,
.gis-map .maplibregl-canvas {
  position: absolute;
  inset: 0;
  width: 100% !important;
  height: 100% !important;
}

.gis-map-chrome {
  position: absolute;
  inset: 0;
  z-index: 5;
  pointer-events: none;
}

.gis-map-actions,
.gis-map-control-stack,
.gis-plugin-overlay {
  pointer-events: auto;
}

.gis-map-actions {
  position: absolute;
  top: 0.75rem;
  left: 0.75rem;
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  max-width: calc(100% - 5rem);
  padding: 0.35rem;
  border: 1px solid rgba(15, 23, 42, 0.16);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.9);
  box-shadow: 0 10px 28px rgba(15, 23, 42, 0.2);
}

.gis-map-actions .gis-button,
.gis-map-control-stack .gis-icon-button {
  background: #fff;
  color: #111827;
}

.gis-projection-disclosure {
  display: inline-flex;
  align-items: center;
  max-width: 18rem;
  padding: 0.25rem 0.5rem;
  color: #334155;
  font-size: 0.72rem;
  line-height: 1.2;
}

.gis-globe-metrics {
  display: block;
  width: fit-content;
  max-width: min(42rem, calc(100vw - 6rem));
  padding: 0.22rem 0.42rem;
  border: 1px solid rgba(51, 65, 85, 0.3);
  border-radius: 0.35rem;
  background: rgba(248, 250, 252, 0.96);
  color: #334155;
  font-size: 0.72rem;
  font-weight: 550;
  line-height: 1.25;
}

.gis-map-control-stack {
  position: absolute;
  z-index: 5;
  top: 0.75rem;
  right: 0.75rem;
  display: grid;
  gap: 0.38rem;
  box-sizing: border-box;
  max-height: calc(100% - 1.5rem);
  overflow: auto;
  overscroll-behavior: contain;
}

.gis-map-control-stack .gis-icon-button {
  border-color: rgba(15, 23, 42, 0.14);
  box-shadow: 0 8px 20px rgba(15, 23, 42, 0.18);
}

.gis-basemap-runtime-alert {
  position: absolute;
  right: 5rem;
  bottom: 0.75rem;
  left: 0.75rem;
  display: grid;
  width: min(40rem, calc(100% - 5.75rem));
  box-sizing: border-box;
  gap: 0.38rem;
  border: 1px solid color-mix(in srgb, var(--gis-warning, #d97706) 72%, var(--gis-line));
  border-left-width: 4px;
  border-radius: 10px;
  padding: 0.7rem 0.8rem;
  background: color-mix(in srgb, var(--gis-panel-bg) 96%, transparent);
  color: var(--gis-ink);
  box-shadow: 0 14px 36px rgba(2, 8, 23, 0.34);
  pointer-events: auto;
  backdrop-filter: blur(10px);
}

.gis-map-chrome:has(.gis-map-authoring-guide) .gis-basemap-runtime-alert {
  top: 0.75rem;
  bottom: auto;
}

.gis-basemap-runtime-alert[data-runtime-state="retrying"] {
  border-color: color-mix(in srgb, var(--gis-blue) 72%, var(--gis-line));
}

.gis-basemap-runtime-alert[data-runtime-state="incomplete"],
.gis-basemap-runtime-alert[data-runtime-state="limited"] {
  border-color: color-mix(in srgb, var(--gis-warning, #d97706) 58%, var(--gis-line));
}

.gis-basemap-runtime-alert > strong {
  font-size: 0.9rem;
}

.gis-basemap-runtime-alert > p {
  margin: 0;
  color: var(--gis-muted);
  font-size: 0.78rem;
  line-height: 1.4;
}

.gis-basemap-runtime-details {
  display: grid;
  gap: 0.18rem;
  margin: 0;
  padding: 0 0 0 1.1rem;
  color: var(--gis-ink);
  font-size: 0.76rem;
  line-height: 1.35;
}

.gis-basemap-runtime-details li::marker {
  color: var(--gis-warning, #d97706);
}

.gis-basemap-runtime-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.gis-basemap-runtime-actions .gis-button:first-child {
  border-color: color-mix(in srgb, var(--gis-blue) 65%, var(--gis-line));
  background: var(--gis-blue-soft);
}

.gis-plugin-overlay {
  position: absolute;
  right: 0.75rem;
  bottom: 3.4rem;
  display: grid;
  gap: 0.24rem;
  width: min(15rem, calc(100% - 1.5rem));
  padding: 0.65rem;
  border: 1px solid rgba(15, 23, 42, 0.16);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.92);
  color: #1f2937;
  font-size: 0.78rem;
  box-shadow: 0 12px 30px rgba(15, 23, 42, 0.2);
}

.gis-statusbar {
  display: flex;
  grid-row: 2;
  flex-wrap: nowrap;
  gap: 1rem;
  align-items: center;
  min-height: 2.2rem;
  max-height: 2.2rem;
  padding: 0.3rem 0.75rem;
  overflow-x: auto;
  overflow-y: hidden;
  border-top: 1px solid rgba(15, 23, 42, 0.18);
  background: rgba(255, 255, 255, 0.94);
  color: #334155;
  font-size: 0.76rem;
  white-space: nowrap;
}

.gis-statusbar span,
.gis-statusbar strong {
  flex: 0 0 auto;
}

.gis-panel-tabs,
.gis-inspector-tabs {
  position: sticky;
  top: 2.8rem;
  z-index: 3;
  display: flex;
  gap: 0.24rem;
  overflow-x: auto;
  border-bottom: 1px solid var(--gis-line);
  background: var(--gis-panel-bg);
}

.gis-panel-tabs .gis-button,
.gis-inspector-tabs .gis-button {
  flex: 0 0 auto;
  font-size: 0.78rem;
}

.gis-inspector-tabs {
  justify-content: flex-start;
}

.gis-panel-body {
  display: grid;
  gap: 0.8rem;
}

.gis-editor-section {
  display: grid;
  gap: 0.68rem;
  border: 1px solid var(--gis-line);
  border-radius: 8px;
  background: var(--gis-elevated);
  padding: 0.78rem;
}

.gis-editor-section h3 {
  margin: 0;
  color: var(--gis-ink);
  font-size: 0.9rem;
  text-transform: none;
}

.gis-editor-section > p {
  margin: -0.28rem 0 0;
  color: var(--gis-muted);
  font-size: 0.78rem;
  line-height: 1.35;
}

.gis-temporary-work-notice {
  border-color: color-mix(in srgb, #f59e0b 58%, var(--gis-line));
  box-shadow: inset 3px 0 0 #f59e0b;
}

.gis-temporary-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

.gis-temporary-geometry-editor {
  border-color: color-mix(in srgb, #f59e0b 58%, var(--gis-line));
  box-shadow: inset 3px 0 0 #f59e0b;
}

.gis-temporary-vertex-list {
  display: grid;
  gap: 0.35rem;
  max-height: 13rem;
  overflow: auto;
  overscroll-behavior: contain;
}

.gis-temporary-vertex-list .gis-button {
  justify-content: flex-start;
  min-width: 0;
  overflow-wrap: anywhere;
  text-align: left;
}

.gis-temporary-vertex-list .gis-button.active {
  border-color: color-mix(in srgb, #f59e0b 72%, var(--gis-line));
  background: color-mix(in srgb, #f59e0b 18%, var(--gis-elevated));
}

.gis-temporary-coordinate-fields {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.5rem;
}

.gis-camera-tour-panel {
  gap: 0.85rem;
}

.gis-camera-tour-keyframes {
  display: grid;
  gap: 0.35rem;
  max-height: min(18rem, 36vh);
  overflow: auto;
  padding: 0.15rem;
}

.gis-camera-tour-keyframes .gis-button {
  justify-content: flex-start;
  min-height: 2.75rem;
  text-align: left;
  white-space: normal;
}

.gis-camera-tour-keyframes .gis-button.active {
  border-color: var(--gis-accent);
  box-shadow: inset 3px 0 0 var(--gis-accent);
}

.gis-camera-tour-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-top: 0.55rem;
}

.gis-camera-tour-keyframe-editor {
  display: grid;
  gap: 0.55rem;
  margin-top: 0.7rem;
  padding-top: 0.7rem;
  border-top: 1px solid var(--gis-border);
}

.gis-camera-tour-panel [data-camera-tour-timeline="elapsed"] {
  width: 100%;
  min-height: 2.75rem;
  accent-color: var(--gis-accent);
}

.gis-camera-tour-panel [data-camera-tour-time="elapsed"] {
  display: block;
  color: var(--gis-text);
  font-variant-numeric: tabular-nums;
  margin-bottom: 0.25rem;
}

.gis-flight-panel {
  gap: 0.85rem;
}

.gis-flight-actions,
.gis-flight-control-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.45rem;
}

.gis-flight-actions .gis-button,
.gis-flight-control-grid .gis-button {
  min-height: 2.75rem;
  white-space: normal;
}

.gis-flight-control-grid .gis-button[aria-pressed="true"] {
  border-color: #0891b2;
  background: color-mix(in srgb, #06b6d4 24%, var(--gis-elevated));
  box-shadow: inset 0 0 0 1px #22d3ee;
}

.gis-flight-hud {
  position: absolute;
  top: 0.75rem;
  left: 50%;
  display: grid;
  width: min(34rem, calc(100% - 10rem));
  min-width: 18rem;
  box-sizing: border-box;
  gap: 0.35rem;
  border: 1px solid rgba(103, 232, 249, 0.8);
  border-radius: 10px;
  padding: 0.55rem 0.7rem;
  background: rgba(2, 8, 23, 0.86);
  color: #ecfeff;
  box-shadow: 0 14px 34px rgba(2, 8, 23, 0.38);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  pointer-events: auto;
  transform: translateX(-50%);
  backdrop-filter: blur(8px);
}

.gis-flight-hud:focus-visible {
  outline: 3px solid #facc15;
  outline-offset: 2px;
}

.gis-flight-hud > strong {
  color: #67e8f9;
  font-size: 0.76rem;
  letter-spacing: 0.08em;
  text-align: center;
  text-transform: uppercase;
}

.gis-flight-horizon {
  display: grid;
  height: 2.6rem;
  place-items: center;
  overflow: hidden;
  border-block: 1px solid rgba(103, 232, 249, 0.4);
}

.gis-flight-horizon > span {
  display: block;
  color: #facc15;
  font-size: 1.1rem;
  font-weight: 800;
  transform: translateY(var(--flight-pitch, 0)) rotate(calc(-1 * var(--flight-bank, 0deg)));
  transform-origin: center;
}

.gis-flight-hud-values {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.2rem 0.7rem;
}

.gis-flight-hud output {
  color: #ecfeff;
  font-size: 0.74rem;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.gis-flight-hud-help,
.gis-flight-hud small {
  color: #bae6fd;
  font-size: 0.64rem;
  line-height: 1.3;
  text-align: center;
}

@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .gis-camera-tour-panel .gis-button,
  .gis-flight-panel .gis-button {
    min-height: 44px;
  }

  .gis-flight-hud {
    top: 0.5rem;
    left: 0.5rem;
    width: calc(100% - 5.75rem);
    min-width: 0;
    max-height: calc(100% - 5.25rem - env(safe-area-inset-bottom));
    padding: 0.42rem 0.5rem;
    transform: none;
  }

  .gis-flight-hud-values {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .gis-flight-hud-help {
    display: none;
  }
}

@media (max-width: 1000px) and (max-height: 500px) {
  .gis-flight-horizon {
    height: 1.5rem;
  }

  .gis-flight-hud small {
    display: none;
  }
}

.gis-temporary-coordinate-fields > .gis-button {
  grid-column: 1 / -1;
}

.gis-temporary-work-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 0.65rem;
  align-items: center;
  border-top: 1px solid var(--gis-line);
  padding-top: 0.6rem;
}

.gis-temporary-work-item > div {
  display: grid;
  gap: 0.2rem;
  min-width: 0;
}

.gis-temporary-work-item > div:last-child {
  grid-auto-flow: column;
}

.gis-temporary-work-item small {
  color: var(--gis-muted);
  overflow-wrap: anywhere;
}

.gis-temporary-promotion-review {
  border-color: color-mix(in srgb, var(--gis-blue) 60%, var(--gis-line));
}

.gis-measurement-card.active {
  border-color: color-mix(in srgb, var(--gis-blue) 72%, var(--gis-line));
  box-shadow: inset 3px 0 0 var(--gis-blue);
}

.gis-elevation-profile {
  display: grid;
  gap: 0.25rem;
  margin: 0;
}

.gis-elevation-profile svg {
  display: block;
  width: 100%;
  min-height: 7rem;
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  background: color-mix(in srgb, var(--gis-blue-soft) 34%, var(--gis-panel-bg));
}

.gis-elevation-axis {
  fill: none;
  stroke: var(--gis-muted);
  stroke-width: 1;
}

.gis-elevation-line {
  fill: none;
  stroke: var(--gis-blue);
  stroke-linecap: round;
  stroke-linejoin: round;
  stroke-width: 3;
}

.gis-elevation-profile figcaption {
  color: var(--gis-muted);
  font-size: 0.72rem;
  line-height: 1.35;
}

.gis-project-dataset-choices {
  display: grid;
  gap: 0.5rem;
}

.gis-project-dataset-handoff {
  display: grid;
  gap: 0.2rem;
  border: 1px solid color-mix(in srgb, var(--gis-blue) 68%, var(--gis-line));
  border-radius: 8px;
  padding: 0.6rem;
  background: color-mix(in srgb, var(--gis-blue-soft) 48%, var(--gis-panel-bg));
}

.gis-project-dataset-handoff[data-state="stale"],
.gis-project-dataset-handoff[data-state="unavailable"] {
  border-color: var(--gis-danger);
  background: color-mix(in srgb, var(--gis-danger) 12%, var(--gis-panel-bg));
}

.gis-project-dataset-handoff p {
  margin: 0;
  color: var(--gis-muted);
  font-size: 0.78rem;
  line-height: 1.35;
}

.gis-project-dataset-choice {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 0.55rem;
  align-items: center;
  min-width: 0;
  border-top: 1px solid var(--gis-line);
  padding-block-start: 0.55rem;
}

.gis-project-dataset-choice > div {
  display: grid;
  gap: 0.16rem;
  min-width: 0;
}

.gis-project-dataset-choice small {
  overflow-wrap: anywhere;
  color: var(--gis-muted);
}

.gis-project-dataset-choice[data-route-target="true"] {
  border: 1px solid var(--gis-blue);
  border-radius: 7px;
  padding: 0.5rem;
}

.gis-field {
  display: grid;
  gap: 0.28rem;
}

.gis-check {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 0.45rem;
  align-items: start;
}

.gis-check small {
  grid-column: 2;
}

.gis-file-drop {
  display: grid;
  gap: 0.25rem;
  border: 1px dashed color-mix(in srgb, var(--gis-blue) 60%, var(--gis-line));
  border-radius: 10px;
  padding: 0.85rem;
  background: color-mix(in srgb, var(--gis-blue-soft) 58%, transparent);
  cursor: pointer;
}

.gis-file-drop input {
  max-width: 100%;
}

.gis-callout,
.gis-log,
.gis-sql-output,
.gis-key-values {
  border: 1px solid var(--gis-line);
  border-radius: 8px;
  background: var(--gis-elevated);
}

.gis-callout {
  display: grid;
  gap: 0.5rem;
  padding: 0.8rem;
}

.gis-log {
  display: grid;
  gap: 0.25rem;
  max-height: 14rem;
  overflow: auto;
  padding: 0.7rem;
}

.gis-log p {
  margin: 0;
}

.gis-form-grid {
  display: grid;
  gap: 0.7rem;
}

.gis-modal-layer {
  position: fixed;
  z-index: 999;
  width: 0;
  height: 0;
}

.gis-basemap-modal-backdrop {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: grid;
  place-items: center;
  padding: 1rem;
  background: rgba(2, 6, 23, 0.72);
}

.gis-basemap-dialog {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr) auto auto;
  width: min(50rem, calc(100vw - 2rem));
  max-height: min(52rem, calc(100dvh - 2rem));
  overflow: hidden;
  border: 1px solid var(--gis-line, var(--theme-foreground-faintest));
  border-radius: 10px;
  background: var(--gis-panel-bg, var(--theme-background));
  color: var(--gis-ink, var(--theme-foreground));
  box-shadow: var(--gis-shadow, 0 18px 42px rgba(0, 0, 0, 0.3));
}

.gis-basemap-dialog:focus-visible {
  outline: 3px solid var(--gis-blue);
  outline-offset: 2px;
}

.gis-basemap-dialog-header,
.gis-basemap-dialog-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.9rem 1rem;
}

.gis-basemap-dialog-header {
  border-bottom: 1px solid var(--gis-line);
}

.gis-basemap-dialog-header h2,
.gis-basemap-dialog-header p,
.gis-basemap-dialog-feedback {
  margin: 0;
}

.gis-basemap-dialog-header h2 {
  color: var(--gis-ink);
}

.gis-basemap-dialog-header p,
.gis-basemap-dialog-feedback {
  color: var(--gis-muted);
}

.gis-basemap-dialog-header p {
  margin-top: 0.2rem;
  max-width: 44rem;
  line-height: 1.4;
}

.gis-basemap-dialog-close {
  flex: 0 0 auto;
  width: 2.75rem;
  height: 2.75rem;
  padding: 0;
  font-size: 1.3rem;
}

.gis-basemap-dialog-body {
  display: grid;
  align-content: start;
  gap: 0.55rem;
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
  padding: 0.8rem 1rem;
}

.gis-basemap-catalog-group {
  border: 1px solid var(--gis-line);
  border-radius: 8px;
  background: var(--gis-elevated);
}

.gis-basemap-catalog-group > summary {
  display: grid;
  grid-template-columns: minmax(8rem, auto) minmax(0, 1fr);
  gap: 0.75rem;
  align-items: baseline;
  min-height: 2.75rem;
  box-sizing: border-box;
  padding: 0.7rem 0.8rem;
  cursor: pointer;
  color: var(--gis-ink);
}

.gis-basemap-catalog-group > summary span {
  color: var(--gis-muted);
  font-size: 0.74rem;
  line-height: 1.35;
}

.gis-basemap-catalog-group > .gis-basemap-choice-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  padding: 0 0.7rem 0.7rem;
}

.gis-basemap-connection-choice {
  display: grid;
  grid-template-columns: auto minmax(12rem, 24rem);
  align-items: center;
  gap: 0.6rem;
  padding: 0 0.7rem 0.7rem;
  color: var(--gis-muted);
  font-size: 0.74rem;
}

.gis-basemap-connection-choice select {
  min-width: 0;
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  padding: 0.45rem 0.55rem;
  background: var(--gis-panel);
  color: var(--gis-ink);
}

.gis-basemap-setup-link {
  display: inline-flex;
  min-height: 2.75rem;
  box-sizing: border-box;
  align-items: center;
  width: fit-content;
  margin: 0 0.7rem 0.7rem;
  border: 1px solid var(--gis-blue);
  border-radius: 6px;
  padding: 0.42rem 0.65rem;
  background: var(--gis-blue-soft);
  color: var(--gis-ink);
  font-size: 0.76rem;
  font-weight: 700;
  text-decoration: none;
}

.gis-basemap-setup-link:focus-visible,
.gis-basemap-setup-link:hover {
  outline: 2px solid var(--gis-blue);
  outline-offset: 2px;
}

.gis-basemap-dialog .gis-basemap-card span,
.gis-basemap-dialog .gis-basemap-card small {
  overflow: visible;
  white-space: normal;
  line-height: 1.3;
}

.gis-basemap-dialog .gis-basemap-card .gis-basemap-reviewed-facts {
  color: var(--gis-ink);
  font-size: 0.65rem;
  font-weight: 650;
}

.gis-basemap-card[data-unavailable="true"] {
  border-style: dashed;
  cursor: help;
}

.gis-basemap-card[data-unavailable="true"] .gis-basemap-preview {
  filter: grayscale(1);
}

.gis-basemap-card[data-unavailable="true"] small {
  color: var(--gis-ink);
  font-weight: 700;
}

.gis-basemap-card[data-lifecycle="retired"],
.gis-basemap-card[data-lifecycle="disabled"] {
  border-left: 3px solid var(--gis-warning, #d97706);
}

.gis-basemap-card[data-lifecycle="disabled"] {
  border-left-color: var(--gis-danger, #dc2626);
}

.gis-basemap-card .gis-basemap-governance-badge,
.gis-basemap-governance-state {
  width: max-content;
  border: 1px solid var(--gis-line-strong, var(--gis-line));
  border-radius: 999px;
  padding: 0.05rem 0.35rem;
  background: var(--gis-elevated);
  color: var(--gis-ink);
  font-size: 0.62rem;
  font-weight: 750;
  line-height: 1.35;
}

.gis-basemap-card[data-health="healthy"] .gis-basemap-governance-badge {
  border-color: color-mix(in srgb, var(--gis-success, #16a34a) 55%, var(--gis-line));
}

.gis-basemap-card[data-health="degraded"] .gis-basemap-governance-badge,
.gis-basemap-card[data-lifecycle="retired"] .gis-basemap-governance-badge {
  border-color: var(--gis-warning, #d97706);
}

.gis-basemap-card[data-lifecycle="disabled"] .gis-basemap-governance-badge {
  border-color: var(--gis-danger, #dc2626);
}

.gis-basemap-dialog-feedback {
  display: grid;
  gap: 0.55rem;
  border-top: 1px solid var(--gis-line);
  padding: 0.65rem 1rem;
  min-height: 1.25rem;
  line-height: 1.4;
}

.gis-basemap-dialog-feedback p {
  margin: 0;
}

.gis-basemap-dialog-feedback progress {
  width: min(20rem, 100%);
  accent-color: var(--gis-blue);
}

.gis-basemap-dialog-feedback[data-activation-state="failed"] {
  border-left: 3px solid var(--gis-warning, #d97706);
}

.gis-basemap-dialog-feedback[data-activation-state="active"] {
  border-left: 3px solid var(--gis-success, #16a34a);
}

.gis-basemap-activation-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.45rem;
}

.gis-basemap-activation-actions .gis-button:first-child {
  border-color: var(--gis-blue);
  background: var(--gis-blue-soft);
}

.gis-basemap-activation-probe {
  position: fixed;
  left: -10000px;
  top: -10000px;
  width: 256px;
  height: 256px;
  overflow: hidden;
  opacity: 0;
  pointer-events: none;
}

.gis-basemap-dialog-footer {
  border-top: 1px solid var(--gis-line);
}

.gis-basemap-dialog-footer .gis-key-values {
  min-width: 14rem;
}

.gis-basemap-dialog-footer .gis-field {
  min-width: 12rem;
}

.gis-basemap-dialog-footer > .gis-button {
  border-color: var(--gis-blue);
  background: var(--gis-blue-soft);
  padding: 0.55rem 0.9rem;
  font-weight: 700;
}

.gis-preservation-dialog {
  grid-template-rows: auto minmax(0, 1fr) auto;
  width: min(42rem, calc(100vw - 2rem));
}

.gis-preservation-body {
  gap: 0.75rem;
}

.gis-preservation-body > .gis-editor-section {
  margin: 0;
}

.gis-preservation-dialog .gis-field > span {
  color: var(--gis-ink);
}

.gis-preservation-live {
  border-left: 3px solid var(--gis-success, #16a34a);
}

.gis-preservation-feedback {
  margin: 0;
  border-left: 3px solid var(--gis-warning, #d97706);
  padding: 0.65rem 0.75rem;
  background: var(--gis-elevated);
  color: var(--gis-ink);
  line-height: 1.4;
}

.gis-preservation-actions {
  justify-content: flex-end;
  flex-wrap: wrap;
}

.gis-preservation-actions > .gis-button:last-child {
  border-color: var(--gis-blue);
  background: var(--gis-blue);
  color: var(--gis-on-blue, #fff);
}

.opengeo-workbench[data-color-mode="light"] .gis-preservation-actions > .gis-button:last-child {
  border-color: #2468dc;
  background: #2468dc;
}

.gis-basemap-source-tools > .gis-editor-section {
  margin: 0.7rem;
}

.gis-basemap-custom-source {
  margin: 0;
  border: 1px solid var(--gis-line);
  border-radius: 8px;
  padding: 0.8rem;
  background: var(--gis-elevated);
}

.platform-import-notice {
  margin: 0;
  border-inline-start: 3px solid var(--theme-foreground-focus);
  padding: 0.65rem 0.85rem;
  background: var(--theme-background-alt);
  color: var(--theme-foreground);
}

.platform-project-warning {
  margin: 0;
  border-inline-start: 3px solid var(--gis-warning, #d97706);
  padding: 0.65rem 0.85rem;
  background: var(--theme-background-alt);
  color: var(--theme-foreground);
}

.gis-save-as-dialog {
  position: fixed;
  top: 50%;
  left: 50%;
  z-index: 1000;
  transform: translate(-50%, -50%);
  width: min(30rem, calc(100vw - 2rem));
  border: 1px solid var(--gis-line, var(--theme-foreground-faintest));
  border-radius: 10px;
  padding: 0;
  background: var(--gis-panel-bg, var(--theme-background));
  color: var(--gis-ink, var(--theme-foreground));
  box-shadow: var(--gis-shadow, 0 18px 42px rgba(0, 0, 0, 0.3));
  outline: 100vmax solid rgba(2, 6, 23, 0.68);
}

.gis-save-as-dialog form {
  display: grid;
  gap: 0.85rem;
  padding: 1.1rem;
}

.gis-save-as-dialog h2,
.gis-save-as-feedback {
  margin: 0;
}

.gis-save-as-dialog input {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  padding: 0.55rem 0.65rem;
  background: var(--gis-elevated);
  color: var(--gis-ink);
}

.gis-save-as-actions {
  display: flex;
  justify-content: end;
  gap: 0.5rem;
}

.gis-palette-picker {
  display: grid;
  grid-template-columns: minmax(5rem, 1fr);
  gap: 0.4rem;
}

.gis-palette-picker > span {
  color: var(--gis-muted);
  font-size: 0.76rem;
  font-weight: 650;
}

.gis-palette-button {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 0;
  height: 1.9rem;
  overflow: hidden;
  border: 1px solid var(--gis-line);
  border-radius: 6px;
  background: var(--gis-panel-bg);
  cursor: pointer;
}

.gis-palette-button:hover {
  border-color: var(--gis-blue);
}

.gis-palette-button span {
  display: block;
  min-width: 0;
}

.gis-style-legend {
  display: grid;
  gap: 0.35rem;
  border: 1px solid var(--gis-line);
  border-radius: 7px;
  padding: 0.55rem;
  background: color-mix(in srgb, var(--gis-panel-bg) 82%, var(--gis-blue-soft));
}

.gis-style-legend strong {
  color: var(--gis-muted);
  font-size: 0.74rem;
  text-transform: uppercase;
}

.gis-style-legend span {
  display: flex;
  gap: 0.45rem;
  align-items: center;
  min-width: 0;
  color: var(--gis-ink);
  font-size: 0.78rem;
}

.gis-style-legend i {
  width: 0.8rem;
  height: 0.8rem;
  flex: 0 0 auto;
  border: 1px solid rgba(255, 255, 255, 0.72);
  border-radius: 999px;
  box-shadow: 0 0 0 1px var(--gis-line);
}

.gis-pattern-legend i {
  width: 4rem;
  height: 2.5rem;
  border-radius: 0.15rem;
}

.gis-pattern-legend strong,
.gis-pattern-legend span {
  overflow-wrap: anywhere;
}

.gis-action-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.4rem;
}

.gis-attribute-summary {
  display: flex;
  align-items: baseline;
  gap: 0.45rem;
}

.gis-attribute-summary strong {
  font-size: 1.6rem;
}

.gis-attribute-table,
.gis-compact-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.78rem;
}

.gis-attribute-table {
  display: block;
  max-height: 24rem;
  overflow: auto;
}

.gis-attribute-table thead,
.gis-attribute-table tbody,
.gis-attribute-table tr {
  display: table;
  width: 100%;
  table-layout: fixed;
}

.gis-attribute-table th,
.gis-attribute-table td,
.gis-compact-table td {
  border-bottom: 1px solid var(--gis-line);
  padding: 0.42rem 0.34rem;
  text-align: left;
  vertical-align: top;
}

.gis-attribute-table th {
  color: var(--gis-muted);
  font-weight: 700;
}

.gis-attribute-table tr {
  cursor: pointer;
}

.gis-attribute-table tbody tr {
  height: 44px;
}

.gis-attribute-table tr:focus-visible {
  outline: 2px solid var(--gis-blue);
  outline-offset: -2px;
}

.gis-attribute-table tr:hover,
.gis-attribute-table tr.selected {
  background: var(--gis-blue-soft);
}

.gis-attribute-table tr.selected td {
  color: var(--gis-ink);
}

.gis-compact-section {
  display: grid;
  gap: 0.35rem;
}

.gis-catalog-section {
  display: grid;
  gap: 0.5rem;
}

.gis-catalog-section h3 {
  margin: 0.35rem 0 0.1rem;
  color: var(--gis-muted);
  font-size: 0.76rem;
  font-weight: 800;
  text-transform: uppercase;
}

.gis-card-list,
.gis-catalog-list {
  display: grid;
  gap: 0.45rem;
}

.gis-catalog-card,
.gis-catalog-row {
  display: grid;
  gap: 0.18rem;
  border: 1px solid var(--gis-line);
  border-radius: 8px;
  background: var(--gis-elevated);
  color: var(--gis-ink);
  padding: 0.6rem;
  text-decoration: none;
}

.gis-catalog-card:hover,
.gis-catalog-row:hover,
.gis-catalog-card.active {
  border-color: color-mix(in srgb, var(--gis-blue) 56%, var(--gis-line));
  background: var(--gis-blue-soft);
}

.gis-catalog-card span,
.gis-catalog-card small,
.gis-catalog-row span,
.gis-catalog-row small {
  color: var(--gis-muted);
}

.gis-key-values {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
  gap: 0;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
}

.gis-key-values dt,
.gis-key-values dd {
  margin: 0;
  min-width: 0;
  padding: 0.45rem 0.5rem;
  border-bottom: 1px solid var(--gis-line);
  overflow-wrap: anywhere;
  line-height: 1.4;
}

.gis-key-values dt {
  color: var(--gis-muted);
  font-weight: 700;
}

.gis-sql-output {
  max-height: 14rem;
  overflow: auto;
  padding: 0.7rem;
  color: var(--gis-ink);
}

.maplibregl-popup-content {
  color: #111827;
}

.gis-popup {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: 0.35rem 0.75rem;
  min-width: 0;
  max-width: 100%;
  margin: 0.5rem 0 0;
  line-height: 1.45;
}

.gis-popup dt,
.gis-popup dd {
  min-width: 0;
  overflow-wrap: anywhere;
}

.gis-feature-popup {
  max-height: min(26rem, 60dvh);
  overflow: auto;
}

.gis-popup dt {
  color: #64748b;
  font-weight: 700;
}

.gis-popup dd {
  margin: 0;
}

@media (max-width: 1500px) {
  .opengeo-workbench {
    grid-template-rows: 5.35rem minmax(0, 1fr);
  }

  .gis-topbar {
    grid-template-columns: auto minmax(0, 1fr) auto;
    grid-template-rows: auto auto;
    align-items: center;
    padding-block: 0.28rem;
  }

  .gis-app-nav {
    min-width: 0;
  }

  .gis-menubar {
    grid-column: 1 / -1;
    grid-row: 2;
    min-height: 2.1rem;
  }

  .gis-top-actions {
    grid-column: 3;
    grid-row: 1;
  }
}

@media (max-width: 1120px) {
  .opengeo-workbench {
    grid-template-columns: minmax(15rem, 18rem) minmax(0, 1fr);
  }

  .opengeo-workbench .gis-panel-right {
    position: absolute;
    top: 2.75rem;
    right: 0;
    bottom: 0;
    z-index: 12;
    width: min(22rem, 88vw);
    border-left: 1px solid var(--gis-line);
    box-shadow: -14px 0 34px rgba(0, 0, 0, 0.26);
  }

  .opengeo-workbench.right-collapsed .gis-panel-right {
    display: none;
  }
}

@media (max-width: 820px) {
  .public-demo-notice {
    grid-template-columns: minmax(0, 1fr);
  }

  .public-demo-facts {
    grid-column: auto;
    grid-row: auto;
  }

  .public-demo-notice > .public-demo-actions {
    align-self: start;
    justify-content: start;
  }

  .public-workbench-demo > .opengeo-workbench {
    height: auto;
  }

  .public-demo-directory {
    padding: 1rem 0.75rem;
  }

  .public-demo-project-grid,
  .public-demo-map-links {
    grid-template-columns: minmax(0, 1fr);
  }

  .public-demo-directory a,
  .public-demo-map-group > summary {
    min-height: 2.75rem;
  }

  .opengeo-workbench,
  .opengeo-workbench.left-collapsed,
  .opengeo-workbench.right-collapsed,
  .opengeo-workbench.left-collapsed.right-collapsed {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto 14rem minmax(22rem, 1fr);
    height: auto;
    min-height: 100vh;
    min-width: 0;
    max-width: 100%;
  }

  .gis-topbar {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto auto auto;
    gap: 0.15rem;
    padding: 0.35rem;
    overflow: hidden;
  }

  .gis-brand {
    display: none;
  }

  .gis-app-nav {
    grid-column: 1;
    grid-row: 1;
  }

  .gis-top-actions {
    grid-column: 1;
    grid-row: 2;
    justify-content: start;
    overflow-x: auto;
  }

  .gis-menubar {
    grid-column: 1;
    grid-row: 3;
    overflow-x: auto;
  }

  .gis-panel-left {
    grid-row: 2;
    min-width: 0;
    border-right: 0;
    border-bottom: 1px solid var(--gis-line);
  }

  .gis-map-column {
    grid-row: 3;
    min-width: 0;
    min-height: 34rem;
  }

  .opengeo-workbench .gis-panel-right {
    position: static;
    grid-row: 4;
    width: auto;
    border-left: 0;
    border-top: 1px solid var(--gis-line);
    box-shadow: none;
  }

  .opengeo-workbench.left-collapsed .gis-panel-left,
  .opengeo-workbench.right-collapsed .gis-panel-right {
    display: none;
  }
}

@media (max-width: 640px) {
  .app-entry-grid {
    grid-template-columns: 1fr;
  }

  .key-value {
    grid-template-columns: 1fr;
  }

  .workbench {
    grid-template-columns: 1fr;
  }

  .print-studio-shell {
    grid-template-columns: 1fr;
  }

  .print-studio-controls {
    position: static;
  }
}

/* Task-first application start */

#observablehq-center:has(.opengeo-start) {
  display: block !important;
  max-width: none !important;
  margin: 0 !important;
  padding: 0 !important;
}

#observablehq-center:has(.opengeo-start) #observablehq-main {
  max-width: none !important;
  margin: 0 !important;
  padding: 0 !important;
}

body:has(.opengeo-start) #observablehq-sidebar,
body:has(.opengeo-start) #observablehq-sidebar-toggle,
body:has(.opengeo-start) #observablehq-sidebar-backdrop,
#observablehq-center:has(.opengeo-start) #observablehq-toc,
#observablehq-center:has(.opengeo-start) #observablehq-footer {
  display: none !important;
}

body:has(.opengeo-start) {
  margin: 0 !important;
  background: var(--theme-background);
  overflow-x: hidden;
}

.opengeo-start {
  --start-bg: var(--theme-background);
  --start-surface: var(--theme-background-alt);
  --start-surface-soft: color-mix(in srgb, var(--theme-foreground) 5%, var(--theme-background-alt));
  --start-text: var(--theme-foreground);
  --start-muted: var(--theme-foreground-muted);
  --start-line: var(--theme-foreground-faintest);
  --start-accent: var(--theme-foreground);
  --start-accent-soft: color-mix(in srgb, var(--theme-foreground) 7%, var(--theme-background-alt));
  --start-focus: var(--theme-foreground-focus);
  --start-green: var(--theme-green);
  --start-shadow: 0 14px 36px color-mix(in srgb, black 30%, transparent);
  color-scheme: dark;
  display: grid;
  grid-template-columns: 14.5rem minmax(0, 1fr);
  grid-template-rows: 4.25rem minmax(calc(100vh - 4.25rem), auto);
  min-height: 100vh;
  background: var(--start-bg);
  color: var(--start-text);
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

.opengeo-icon {
  width: 1.25rem;
  height: 1.25rem;
  flex: 0 0 auto;
}

.start-header {
  position: sticky;
  top: 0;
  z-index: 20;
  grid-column: 1 / -1;
  display: grid;
  grid-template-columns: 14.5rem minmax(16rem, 42rem) minmax(12rem, 1fr);
  align-items: center;
  gap: 1.5rem;
  min-height: 4.25rem;
  padding: 0 1.25rem;
  border-bottom: 1px solid var(--start-line);
  background: color-mix(in srgb, var(--start-surface) 94%, transparent);
  backdrop-filter: blur(14px);
}

.start-brand,
.start-rail-link,
.start-action-card,
.start-project-row,
.start-compact-link,
.start-text-link,
.start-account {
  color: inherit;
  text-decoration: none;
}

.opengeo-start a[href] {
  color: inherit;
  text-decoration: none;
}

.opengeo-start a[href]:focus-visible,
.start-more summary:focus-visible {
  outline: 2px solid var(--start-focus);
  outline-offset: 3px;
}

.start-brand {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  color: var(--start-accent);
  font-size: 1.02rem;
}

.start-brand .opengeo-icon {
  width: 1.55rem;
  height: 1.55rem;
}

.start-global-search {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  min-height: 2.65rem;
  border: 1px solid transparent;
  border-radius: 999px;
  padding: 0 1rem;
  background: var(--start-surface-soft);
  color: var(--start-muted);
}

.start-global-search:focus-within {
  border-color: var(--start-focus);
  background: var(--start-surface);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--start-focus) 16%, transparent);
}

.start-global-search input {
  width: 100%;
  border: 0;
  outline: 0;
  background: transparent;
  color: var(--start-text);
  font: inherit;
}

.start-header-actions {
  display: flex;
  align-items: center;
  justify-content: end;
  gap: 1rem;
}

.start-text-link {
  color: var(--start-muted);
  font-size: 0.9rem;
  font-weight: 650;
}

.start-text-link:hover,
.start-account:hover {
  color: var(--start-text);
}

.start-account {
  border: 1px solid var(--start-line);
  border-radius: 999px;
  padding: 0.58rem 0.9rem;
  background: var(--start-surface);
  font-size: 0.88rem;
  font-weight: 650;
}

.start-rail {
  position: sticky;
  top: 4.25rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  height: calc(100vh - 4.25rem);
  padding: 1.25rem 0.8rem;
  border-right: 1px solid var(--start-line);
  background: var(--start-surface);
}

.start-rail nav,
.start-rail-lower {
  display: grid;
  gap: 0.35rem;
}

.start-rail-link {
  display: flex;
  align-items: center;
  gap: 0.8rem;
  min-height: 2.8rem;
  border-radius: 8px;
  padding: 0 0.85rem;
  color: var(--start-muted);
  font-size: 0.9rem;
  font-weight: 600;
}

.start-rail-link:hover,
.start-rail-link.active {
  background: var(--start-accent-soft);
  color: var(--start-accent);
}

.start-main {
  width: min(74rem, calc(100% - 3rem));
  margin: 0 auto;
  padding: clamp(2.5rem, 7vh, 5rem) 0 4rem;
}

.start-intro {
  max-width: 48rem;
}

.start-eyebrow {
  margin: 0 0 0.65rem;
  color: var(--start-accent);
  font-size: 0.76rem;
  font-weight: 800;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.start-intro h1 {
  margin: 0;
  color: var(--start-text);
  font-size: clamp(2rem, 4vw, 3.25rem);
  font-weight: 680;
  letter-spacing: -0.035em;
  line-height: 1.04;
}

.start-intro > p:last-child {
  max-width: 42rem;
  margin: 1rem 0 0;
  color: var(--start-muted);
  font-size: 1.04rem;
  line-height: 1.6;
}

.start-action-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1rem;
  margin: 2rem 0 3rem;
}

.start-action-card {
  position: relative;
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  grid-template-rows: auto auto auto;
  gap: 0.35rem 0.8rem;
  min-height: 10rem;
  border: 1px solid var(--start-line);
  border-radius: 14px;
  padding: 1.15rem;
  background: var(--start-surface);
  box-shadow: 0 8px 20px color-mix(in srgb, black 16%, transparent);
  transition: transform 140ms ease, border-color 140ms ease, box-shadow 140ms ease;
}

.start-action-card:hover {
  transform: translateY(-2px);
  border-color: var(--start-muted);
  box-shadow: var(--start-shadow);
}

.start-action-card > .opengeo-icon:first-child {
  grid-row: 1 / span 3;
  display: grid;
  place-items: center;
  width: 2.8rem;
  height: 2.8rem;
  border-radius: 10px;
  padding: 0.68rem;
  background: var(--start-accent-soft);
  color: var(--start-accent);
  box-sizing: border-box;
}

.start-action-card > .opengeo-icon:last-child {
  grid-column: 3;
  grid-row: 1;
  color: var(--start-muted);
}

.start-action-card strong {
  color: var(--start-text);
  font-size: 1rem;
}

.start-action-card span {
  grid-column: 2 / -1;
  color: var(--start-muted);
  font-size: 0.86rem;
  line-height: 1.45;
}

.start-action-card small {
  grid-column: 2 / -1;
  align-self: end;
  color: var(--start-accent);
  font-weight: 700;
}

.start-recent {
  overflow: hidden;
  border: 1px solid var(--start-line);
  border-radius: 14px;
  background: var(--start-surface);
}

.start-recent > header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 1rem 1.15rem;
  border-bottom: 1px solid var(--start-line);
}

.start-recent h2 {
  margin: 0;
  font-size: 1rem;
}

.start-project-row {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto 8.5rem auto;
  align-items: center;
  gap: 1rem;
  min-height: 4.25rem;
  padding: 0.7rem 1.15rem;
  border-bottom: 1px solid var(--start-line);
}

.start-project-row:last-child {
  border-bottom: 0;
}

.start-project-row:hover {
  background: var(--start-accent-soft);
}

.start-project-identity {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  gap: 0.15rem 0.75rem;
  align-items: center;
  min-width: 0;
}

.start-project-identity .opengeo-icon {
  grid-row: 1 / span 2;
  color: var(--start-muted);
}

.start-project-identity strong {
  color: var(--start-text);
}

.start-project-row > .opengeo-icon:last-child {
  color: var(--start-muted);
}

.start-project-identity span {
  overflow: hidden;
  color: var(--start-muted);
  font-size: 0.8rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.start-classification {
  border: 1px solid var(--start-line);
  border-radius: 999px;
  padding: 0.2rem 0.55rem;
  color: var(--start-muted);
  font-size: 0.72rem;
  text-transform: capitalize;
}

.start-classification.public {
  border-color: color-mix(in srgb, var(--start-green) 36%, var(--start-line));
  color: var(--start-green);
}

.start-project-row time {
  color: var(--start-muted);
  font-size: 0.8rem;
}

.start-search-empty {
  margin: 0;
  padding: 1.35rem 1.15rem;
  color: var(--start-muted);
  text-align: center;
}

.start-more {
  margin-top: 1.25rem;
  border: 1px solid var(--start-line);
  border-radius: 12px;
  background: var(--start-surface);
}

.start-more summary {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.7rem;
  padding: 0.9rem 1rem;
  color: var(--start-muted);
  cursor: pointer;
  font-size: 0.88rem;
  font-weight: 650;
  list-style: none;
}

.start-more summary::-webkit-details-marker {
  display: none;
}

.start-more[open] summary > .opengeo-icon:last-child {
  transform: rotate(90deg);
}

.start-more-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.7rem;
  padding: 0 1rem 1rem;
}

.start-compact-link {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.7rem;
  border: 1px solid var(--start-line);
  border-radius: 9px;
  padding: 0.75rem;
}

.start-compact-link:hover {
  border-color: var(--start-muted);
  background: var(--start-accent-soft);
}

.start-compact-link > .opengeo-icon:first-child {
  color: var(--start-muted);
}

.start-compact-link > span {
  display: grid;
  gap: 0.15rem;
}

.start-compact-link small {
  color: var(--start-muted);
}

@media (max-width: 900px) {
  .opengeo-start {
    grid-template-columns: 4.5rem minmax(0, 1fr);
  }

  .start-header {
    grid-template-columns: 3rem minmax(0, 1fr) auto;
    gap: 0.75rem;
  }

  .start-brand strong,
  .start-rail-link span,
  .start-header-actions .start-text-link {
    display: none;
  }

  .start-rail-link {
    justify-content: center;
    padding: 0;
  }

  .start-action-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 640px) {
  .opengeo-start {
    display: block;
  }

  .start-header {
    position: sticky;
    grid-template-columns: auto minmax(0, 1fr) auto;
    padding: 0 0.75rem;
  }

  .start-rail {
    position: fixed;
    top: auto;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 30;
    display: block;
    width: auto;
    height: auto;
    padding: 0.35rem;
    border-top: 1px solid var(--start-line);
    border-right: 0;
  }

  .start-rail nav {
    grid-template-columns: repeat(4, 1fr);
  }

  .start-rail-lower {
    display: none;
  }

  .start-rail-link {
    display: grid;
    justify-items: center;
    gap: 0.15rem;
    font-size: 0.68rem;
  }

  .start-rail-link span {
    display: block;
  }

  .start-main {
    width: calc(100% - 1.5rem);
    padding-top: 2rem;
    padding-bottom: 6rem;
  }

  .start-project-row {
    grid-template-columns: minmax(0, 1fr) auto;
  }

  .start-project-row > .start-classification,
  .start-project-row > time {
    display: none;
  }

  .start-more-grid {
    grid-template-columns: 1fr;
  }
}

.start-library-strip {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 0.75rem;
  margin-top: 1.25rem;
  border: 1px solid var(--start-line);
  border-radius: 12px;
  padding: 0.9rem 1rem;
  background: var(--start-surface);
}

.start-library-strip > .opengeo-icon:first-child {
  color: var(--start-muted);
}

.start-library-strip > span {
  display: grid;
  gap: 0.15rem;
}

.start-library-strip small {
  color: var(--start-muted);
}

/* Unified public publication catalog */

body:has(.public-library) #observablehq-sidebar,
body:has(.public-library) #observablehq-sidebar-toggle,
body:has(.public-library) #observablehq-sidebar-backdrop,
#observablehq-center:has(.public-library) #observablehq-toc,
#observablehq-center:has(.public-library) #observablehq-footer {
  display: none !important;
}

#observablehq-center:has(.public-library) {
  display: block !important;
  max-width: none !important;
  margin: 0 !important;
}

#observablehq-center:has(.public-library) #observablehq-main {
  width: min(76rem, calc(100% - 2rem));
  max-width: none !important;
  margin: 0 auto !important;
  padding: clamp(2rem, 6vw, 5rem) 0 4rem !important;
}

.public-library {
  --library-surface: var(--opengeo-panel, #fff);
  --library-line: var(--opengeo-line, #d7deea);
  --library-muted: var(--opengeo-muted, #637087);
  display: grid;
  gap: 1.25rem;
  color: var(--theme-foreground);
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

.public-library-header {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 2rem;
}

.public-library-header h1 {
  max-width: 18ch;
  margin: 0.25rem 0 0.5rem;
  font-size: clamp(2.25rem, 5vw, 4.25rem);
  line-height: 0.98;
  letter-spacing: -0.045em;
}

.public-library-header p:last-child {
  max-width: 58rem;
  margin: 0;
  color: var(--library-muted);
}

.public-library-app-link {
  flex: 0 0 auto;
  border: 1px solid var(--library-line);
  border-radius: 999px;
  padding: 0.65rem 0.9rem;
  color: var(--theme-foreground-focus);
  font-weight: 700;
  text-decoration: none;
}

.public-library-notice {
  display: grid;
  gap: 0.2rem;
  border: 1px solid color-mix(in srgb, var(--theme-foreground-focus) 35%, var(--library-line));
  border-radius: 10px;
  padding: 0.85rem 1rem;
  background: color-mix(in srgb, var(--library-surface) 88%, var(--theme-foreground-focus) 12%);
}

.public-library-notice span,
.public-library-status {
  color: var(--library-muted);
}

.public-library-controls {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(11rem, 15rem);
  gap: 0.6rem;
  border: 1px solid var(--library-line);
  border-radius: 10px;
  padding: 0.65rem;
  background: var(--library-surface);
}

.public-library-controls input,
.public-library-controls select {
  min-width: 0;
  border: 1px solid var(--library-line);
  border-radius: 7px;
  padding: 0.65rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.public-library-status {
  margin: 0;
  font-size: 0.82rem;
}

.public-library-results {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.75rem;
}

.public-library-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.75rem;
  min-height: 7rem;
  border: 1px solid var(--library-line);
  border-radius: 10px;
  padding: 0.9rem;
  background: var(--library-surface);
  color: var(--theme-foreground);
  text-decoration: none;
}

.public-library-card:hover {
  border-color: var(--theme-foreground-focus);
  background: color-mix(in srgb, var(--library-surface) 88%, var(--theme-foreground-focus) 12%);
}

.public-library-card > span:first-child {
  display: grid;
  gap: 0.3rem;
}

.public-library-card small {
  color: var(--theme-foreground-focus);
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.public-library-card span span {
  color: var(--library-muted);
  font-size: 0.78rem;
}

.public-library-open {
  color: var(--theme-foreground-focus);
  font-weight: 700;
}

@media (max-width: 900px) {
  .public-library-results {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 640px) {
  .start-library-strip {
    grid-template-columns: auto minmax(0, 1fr) auto;
  }

  .start-library-strip .start-text-link {
    display: none;
  }

  .public-library-header {
    align-items: start;
    flex-direction: column;
  }

  .public-library-controls,
  .public-library-results {
    grid-template-columns: 1fr;
  }
}

/* Focused project directory and progressive project administration */

body:has(.platform-directory) #observablehq-sidebar,
body:has(.platform-directory) #observablehq-sidebar-toggle,
body:has(.platform-directory) #observablehq-sidebar-backdrop,
#observablehq-center:has(.platform-directory) #observablehq-toc,
#observablehq-center:has(.platform-directory) #observablehq-footer {
  display: none !important;
}

#observablehq-center:has(.platform-directory) {
  display: block !important;
  max-width: none !important;
  margin: 0 !important;
}

#observablehq-center:has(.platform-directory) #observablehq-main {
  width: min(72rem, calc(100% - 3rem));
  max-width: none !important;
  margin: 0 auto !important;
  padding: clamp(2rem, 6vh, 4rem) 0 !important;
}

.platform-directory {
  gap: 1.2rem;
  color: var(--theme-foreground);
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}

.platform-directory .platform-mode {
  order: -2;
}

.platform-directory .platform-heading {
  align-items: center;
  border: 0;
  padding: 0;
  background: transparent;
}

.platform-directory .platform-heading h1 {
  margin: 0;
  font-size: clamp(2rem, 4vw, 3rem);
  letter-spacing: -0.035em;
}

.platform-directory-identity {
  display: flex;
  align-items: center;
  gap: 0.65rem;
  flex-wrap: wrap;
  justify-content: flex-end;
}

.platform-site-switcher {
  position: relative;
  min-width: min(18rem, 100%);
}

.platform-site-switcher > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
  min-height: 2.75rem;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.38rem 0.65rem;
  background: var(--opengeo-panel);
  cursor: pointer;
  list-style: none;
}

.platform-site-switcher > summary::-webkit-details-marker {
  display: none;
}

.platform-site-switcher > summary > span:first-child,
.platform-site-switcher-item {
  display: grid;
  gap: 0.12rem;
}

.platform-site-switcher small {
  color: var(--opengeo-muted);
  font-size: 0.68rem;
}

.platform-site-switcher[open] .platform-site-switcher-caret {
  transform: rotate(180deg);
}

.platform-site-switcher-list {
  position: absolute;
  z-index: 20;
  top: calc(100% + 0.35rem);
  right: 0;
  display: grid;
  gap: 0.35rem;
  width: min(22rem, calc(100vw - 2rem));
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 0.55rem;
  background: var(--theme-background);
  box-shadow: 0 12px 28px color-mix(in srgb, #000 34%, transparent);
}

.platform-site-switcher-item {
  min-height: 2.75rem;
  box-sizing: border-box;
  border: 1px solid transparent;
  border-radius: 7px;
  padding: 0.55rem 0.65rem;
  color: var(--theme-foreground);
  text-decoration: none;
}

a.platform-site-switcher-item:hover,
a.platform-site-switcher-item:focus-visible {
  border-color: var(--opengeo-blue);
  background: color-mix(in srgb, var(--opengeo-panel) 82%, var(--opengeo-blue) 18%);
}

.platform-site-switcher-item.current {
  border-color: color-mix(in srgb, var(--opengeo-blue) 45%, var(--opengeo-line));
  background: var(--opengeo-panel);
}

.platform-site-switcher-list > .platform-note {
  margin: 0;
  padding: 0.35rem 0.5rem 0.1rem;
  font-size: 0.72rem;
}

.platform-resource-navigation {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: 0.35rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 0.35rem;
  background: var(--opengeo-panel);
}

.platform-resource-navigation-item {
  display: grid;
  align-content: center;
  gap: 0.12rem;
  min-height: 2.75rem;
  box-sizing: border-box;
  border: 1px solid transparent;
  border-radius: 7px;
  padding: 0.38rem 0.62rem;
  color: var(--theme-foreground);
  text-decoration: none;
}

.platform-resource-navigation-item > span {
  display: flex;
  align-items: center;
  gap: 0.45rem;
}

.platform-resource-navigation-item small {
  overflow: hidden;
  color: var(--opengeo-muted);
  font-size: 0.68rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-resource-navigation-item:hover,
.platform-resource-navigation-item:focus-visible {
  border-color: color-mix(in srgb, var(--opengeo-blue) 55%, var(--opengeo-line));
  background: color-mix(in srgb, var(--opengeo-panel) 82%, var(--opengeo-blue) 18%);
}

.platform-resource-navigation-item[aria-current="page"] {
  border-color: var(--opengeo-blue);
  background: color-mix(in srgb, var(--opengeo-panel) 78%, var(--opengeo-blue) 22%);
  color: var(--opengeo-blue);
}

.platform-resource-count {
  min-width: 1.4rem;
  border-radius: 999px;
  padding: 0.08rem 0.35rem;
  background: color-mix(in srgb, var(--theme-background) 76%, transparent);
  color: var(--opengeo-muted);
  font-size: 0.68rem;
  text-align: center;
}

.platform-publication-directory {
  display: grid;
  gap: 0.7rem;
  min-width: 0;
  overflow-x: auto;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 0.9rem;
  background: var(--opengeo-panel);
}

.platform-publication-directory > h2,
.platform-publication-directory > p {
  margin: 0;
}

.platform-publication-table {
  width: 100%;
  min-width: 46rem;
}

.platform-publication-table tr[data-primary="true"] {
  background: color-mix(in srgb, var(--opengeo-blue) 10%, transparent);
}

.platform-publication-identity {
  display: grid;
  gap: 0.15rem;
}

.platform-publication-identity a {
  font-weight: 700;
}

.platform-publication-identity small {
  color: var(--opengeo-muted);
}

.platform-publication-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
}

.platform-publication-actions .platform-button {
  min-height: 2rem;
  padding: 0.32rem 0.52rem;
  white-space: nowrap;
}

.platform-directory-actions {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0.75rem;
}

.platform-directory-action {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  gap: 0.75rem;
  min-height: 4.8rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 0.8rem;
  background: var(--opengeo-panel);
  color: var(--theme-foreground);
  text-decoration: none;
}

.platform-directory-action:hover {
  border-color: var(--opengeo-blue);
  background: color-mix(in srgb, var(--opengeo-panel) 82%, var(--opengeo-blue) 18%);
}

.platform-directory-action-icon {
  display: grid;
  place-items: center;
  width: 2.5rem;
  height: 2.5rem;
  border-radius: 8px;
  background: color-mix(in srgb, var(--opengeo-blue) 14%, var(--theme-background));
  color: var(--opengeo-blue);
  font-size: 1.25rem;
}

.platform-directory-action > span:last-child {
  display: grid;
  gap: 0.2rem;
}

.platform-project-creation {
  display: grid;
  gap: 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 1rem;
  background: var(--opengeo-panel);
}

.project-visibility-settings {
  display: grid;
  gap: 0.55rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 0.85rem;
  background: var(--opengeo-panel);
}

.project-visibility-settings h2,
.project-visibility-settings p {
  margin: 0;
}

.project-visibility-settings .platform-inline-admin-form {
  grid-template-columns: minmax(10rem, 0.5fr) auto minmax(12rem, 1fr);
  align-items: center;
}

.platform-project-creation h2,
.platform-project-creation p {
  margin: 0;
}

.platform-project-creation-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.65rem;
}

.platform-project-creation-form input,
.platform-project-creation-form select,
.platform-project-creation-form textarea {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.55rem 0.65rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
}

.platform-labeled-field {
  display: grid;
  align-content: start;
  gap: 0.35rem;
  min-width: 0;
  color: var(--theme-foreground);
  font-size: 0.82rem;
  font-weight: 650;
}

.platform-labeled-field > input,
.platform-labeled-field > select,
.platform-labeled-field > textarea {
  font: inherit;
  font-weight: 400;
}

.platform-field-wide {
  grid-column: 1 / -1;
}

.platform-checkbox-field {
  grid-template-columns: auto auto;
  justify-content: start;
  align-items: center;
}

.platform-checkbox-field > span {
  order: 2;
}

.platform-project-creation-form textarea,
.platform-project-creation-form .platform-actions,
.platform-project-creation-form .platform-note,
.platform-project-creation-form .platform-publication-address {
  grid-column: 1 / -1;
}

.platform-publication-address {
  color: var(--opengeo-muted);
  overflow-wrap: anywhere;
}

.platform-directory-action small {
  color: var(--opengeo-muted);
}

.platform-project-directory {
  display: grid;
  gap: 0.75rem;
}

.platform-project-directory-heading {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 1rem;
}

.platform-project-directory-heading h2,
.platform-project-directory-heading p {
  margin: 0;
}

.platform-project-directory > .platform-controls {
  align-items: center;
  margin: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 0.65rem;
  background: var(--opengeo-panel);
}

.platform-project-list {
  display: grid;
  gap: 0.55rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.platform-project-row {
  display: grid;
  grid-template-columns: minmax(14rem, 1.4fr) minmax(24rem, 1fr) auto;
  align-items: center;
  gap: 1rem;
  min-height: 4.75rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 0.8rem 0.9rem;
  background: var(--opengeo-panel);
  color: var(--theme-foreground);
  text-decoration: none;
}

.platform-project-row:hover,
.platform-project-row:focus-visible {
  border-color: var(--opengeo-blue);
  background: color-mix(in srgb, var(--opengeo-panel) 82%, var(--opengeo-blue) 18%);
}

.platform-project-row:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--opengeo-blue) 45%, transparent);
  outline-offset: 2px;
}

.platform-project-row-identity,
.platform-project-row-title {
  display: grid;
  gap: 0.22rem;
  min-width: 0;
}

.platform-project-row-title {
  grid-template-columns: minmax(0, max-content) auto;
  align-items: center;
  justify-content: start;
}

.platform-project-row-title strong {
  overflow-wrap: anywhere;
}

.platform-project-kind {
  border: 1px solid color-mix(in srgb, var(--opengeo-blue) 55%, var(--opengeo-line));
  border-radius: 999px;
  padding: 0.12rem 0.4rem;
  color: var(--opengeo-blue);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.platform-project-kind.published {
  border-color: color-mix(in srgb, #2ba868 62%, var(--opengeo-line));
  color: color-mix(in srgb, #2ba868 72%, var(--theme-foreground));
}

.platform-project-kind.internal {
  border-color: var(--opengeo-line);
  color: var(--opengeo-muted);
}

.platform-project-row-metadata {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 0.55rem;
}

.platform-project-row-value {
  display: grid;
  align-content: center;
  gap: 0.2rem;
  min-width: 0;
}

.platform-project-row-value > small {
  color: var(--opengeo-muted);
  font-size: 0.68rem;
}

.platform-project-row-value > span:last-child {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-project-row-open {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 4.5rem;
  min-height: 2.75rem;
  border: 1px solid var(--opengeo-blue);
  border-radius: 7px;
  color: var(--opengeo-blue);
  font-weight: 700;
}

.platform-project-row-open::after {
  content: "›";
  margin-left: 0.35rem;
  font-size: 1.2rem;
}

.platform-directory-advanced {
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  background: var(--opengeo-panel);
}

.platform-directory-advanced > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.9rem 1rem;
  cursor: pointer;
  list-style: none;
}

.platform-directory-advanced > summary::-webkit-details-marker {
  display: none;
}

.platform-directory-advanced > summary {
  justify-content: start;
}

.platform-directory-advanced > summary span {
  color: var(--opengeo-muted);
}

.platform-directory-advanced > .platform-catalog-search {
  padding: 1rem;
  border-top: 1px solid var(--opengeo-line);
}

.platform-source-capability-directory {
  display: grid;
  gap: 0.75rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 10px;
  padding: 0.85rem;
  background: var(--opengeo-panel);
}

.platform-source-capability-directory > header {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 1rem;
}

.platform-source-capability-directory > header h2,
.platform-source-capability-directory > header p,
.platform-source-capability-group h3 {
  margin: 0;
}

.platform-source-capability-count {
  flex: none;
  border: 1px solid var(--opengeo-line);
  border-radius: 999px;
  padding: 0.22rem 0.55rem;
  color: var(--opengeo-muted);
  font-size: 0.72rem;
  white-space: nowrap;
}

.platform-source-capability-controls {
  display: grid;
  grid-template-columns: minmax(12rem, 1fr) minmax(10rem, auto);
  gap: 0.5rem;
}

.platform-source-capability-controls input,
.platform-source-capability-controls select {
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  padding: 0.5rem 0.6rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
  font: inherit;
}

.platform-source-capability-results,
.platform-source-capability-group,
.platform-source-capability-list {
  display: grid;
  gap: 0.5rem;
}

.platform-source-capability-group {
  border-top: 1px solid var(--opengeo-line);
  padding-top: 0.65rem;
}

.platform-source-capability-group h3 {
  color: var(--opengeo-muted);
  font-size: 0.72rem;
  letter-spacing: 0.055em;
  text-transform: uppercase;
}

.platform-source-capability-record {
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--theme-background);
}

.platform-source-capability-record > summary {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.75rem;
  padding: 0.55rem 0.65rem;
  cursor: pointer;
  list-style: none;
}

.platform-source-capability-record > summary::-webkit-details-marker {
  display: none;
}

.platform-source-capability-record > summary > span:first-child,
.platform-source-capability-state {
  display: grid;
  gap: 0.1rem;
  min-width: 0;
}

.platform-source-capability-record > summary small {
  overflow: hidden;
  color: var(--opengeo-muted);
  font-size: 0.68rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-source-capability-state {
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  padding: 0.3rem 0.45rem;
  font-size: 0.72rem;
  text-align: right;
}

.platform-source-capability-state.bounded-current {
  border-color: color-mix(in srgb, #2ba868 62%, var(--opengeo-line));
}

.platform-source-capability-state.metadata-only,
.platform-source-capability-state.connection-only {
  border-color: color-mix(in srgb, var(--opengeo-blue) 55%, var(--opengeo-line));
}

.platform-source-capability-body {
  display: grid;
  gap: 0.65rem;
  border-top: 1px solid var(--opengeo-line);
  padding: 0.65rem;
}

.platform-source-operation-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(8.5rem, 1fr));
  gap: 0.4rem;
  margin: 0;
}

.platform-source-operation-grid > div {
  display: grid;
  align-content: start;
  gap: 0.12rem;
  min-width: 0;
  border-left: 3px solid var(--opengeo-line);
  padding: 0.35rem 0.45rem;
  background: var(--opengeo-panel);
}

.platform-source-operation-grid > div[data-status="available"],
.platform-source-operation-grid > div[data-status="bounded"] {
  border-left-color: #2ba868;
}

.platform-source-operation-grid > div[data-status="preserve-only"] {
  border-left-color: var(--opengeo-blue);
}

.platform-source-operation-grid dt {
  color: var(--opengeo-muted);
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

.platform-source-operation-grid dd {
  margin: 0;
  font-size: 0.78rem;
  font-weight: 700;
}

.platform-source-operation-grid small {
  color: var(--opengeo-muted);
  font-size: 0.67rem;
  line-height: 1.35;
}

.platform-source-capability-limits {
  display: grid;
  gap: 0.25rem;
  color: var(--opengeo-muted);
  font-size: 0.72rem;
}

.platform-source-capability-limits ul {
  margin: 0;
  padding-left: 1.1rem;
}

.platform-directory-admin-body {
  display: grid;
  gap: 0.85rem;
  padding: 1rem;
  border-top: 1px solid var(--opengeo-line);
}

.platform-directory-admin-body > h2,
.platform-directory-admin-body > p,
.platform-connection-form > h3 {
  margin: 0;
}

.platform-compact-records,
.platform-connection-records {
  display: grid;
  gap: 0.6rem;
}

.platform-basemap-connections {
  display: grid;
  gap: 0.75rem;
  margin-top: 0.75rem;
  border-top: 1px solid var(--opengeo-line);
  padding-top: 1rem;
}

.platform-basemap-connections > h2,
.platform-basemap-connections > p {
  margin: 0;
}

.platform-compact-record {
  display: grid;
  grid-template-columns: minmax(10rem, 1fr) minmax(12rem, 2fr) auto;
  align-items: center;
  gap: 0.75rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.7rem;
  color: var(--theme-foreground);
}

.platform-compact-record > span:not(.badge) {
  color: var(--opengeo-muted);
}

.platform-inline-admin-form,
.platform-connection-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: end;
  gap: 0.65rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.85rem;
  background: color-mix(in srgb, var(--opengeo-panel) 88%, var(--theme-background) 12%);
}

.platform-inline-admin-form > input,
.platform-inline-admin-form > select,
.platform-connection-form input,
.platform-connection-form select,
.platform-connection-form textarea {
  width: 100%;
  min-width: 0;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.55rem 0.65rem;
  background: var(--theme-background);
  color: var(--theme-foreground);
  font: inherit;
  resize: vertical;
}

.platform-inline-admin-form > .platform-note,
.platform-connection-form > .platform-note {
  grid-column: 1 / -1;
  margin: 0;
}

.platform-connection-record {
  overflow: clip;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--theme-background);
}

.platform-connection-record > summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  padding: 0.8rem;
  cursor: pointer;
  list-style: none;
  color: var(--theme-foreground);
}

.platform-connection-record > summary::-webkit-details-marker {
  display: none;
}

.platform-connection-record > summary > span:first-child {
  display: grid;
  gap: 0.2rem;
  min-width: 0;
}

.platform-connection-record > summary small {
  overflow: hidden;
  color: var(--opengeo-muted);
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-connection-record-body {
  display: grid;
  gap: 0.75rem;
  padding: 0.85rem;
  border-top: 1px solid var(--opengeo-line);
}

.platform-secret-form {
  border-color: color-mix(in srgb, var(--opengeo-blue) 38%, var(--opengeo-line));
}

.platform-connection-verification,
.platform-connection-repository {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.45rem 0.75rem;
  border: 1px solid color-mix(in srgb, var(--opengeo-blue) 38%, var(--opengeo-line));
  border-radius: 8px;
  padding: 0.85rem;
  background: color-mix(in srgb, var(--opengeo-panel) 88%, var(--theme-background) 12%);
}

.platform-connection-verification > h3,
.platform-connection-verification > p,
.platform-connection-verification > .platform-source-overview,
.platform-connection-repository > h3,
.platform-connection-repository > p,
.platform-connection-repository > .platform-repository-browser {
  grid-column: 1;
  margin: 0;
}

.platform-connection-verification > button,
.platform-connection-repository > button {
  grid-column: 2;
  grid-row: 1 / span 3;
}

.platform-connection-verification > .platform-source-overview {
  grid-column: 1 / -1;
}

.platform-source-overview-controls {
  display: flex;
  grid-column: 2;
  grid-row: 1 / span 2;
  align-items: stretch;
  flex-direction: column;
  gap: 0.35rem;
}

.platform-source-overview-controls > * {
  margin: 0;
}

.platform-source-overview {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(12rem, 0.8fr);
  gap: 0.75rem;
  min-width: 0;
  padding-top: 0.25rem;
  border-top: 1px solid var(--opengeo-line);
}

.platform-source-overview > .platform-note {
  grid-column: 1 / -1;
  margin: 0;
}

.platform-source-overview-facts {
  display: grid;
  grid-template-columns: minmax(7rem, auto) minmax(0, 1fr);
  align-content: start;
  gap: 0.3rem 0.65rem;
  margin: 0;
}

.platform-source-overview-facts dt {
  color: var(--opengeo-muted);
  font-size: 0.78rem;
  font-weight: 700;
}

.platform-source-overview-facts dd {
  overflow-wrap: anywhere;
  margin: 0;
  font-size: 0.82rem;
}

.platform-source-projects {
  min-width: 0;
}

.platform-source-projects > h4,
.platform-source-projects > p {
  margin: 0;
}

.platform-source-projects > ul {
  display: grid;
  gap: 0.35rem;
  margin: 0.4rem 0 0;
  padding: 0;
  list-style: none;
}

.platform-source-projects li {
  display: grid;
  gap: 0.1rem;
}

.platform-repository-browser {
  display: grid;
  gap: 0.55rem;
  min-width: 0;
  padding-top: 0.35rem;
}

.platform-repository-toolbar {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 0.35rem;
}

.platform-repository-location {
  overflow: hidden;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 0.82rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-repository-list {
  display: grid;
  gap: 0;
  margin: 0;
  padding: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  list-style: none;
  overflow: hidden;
}

.platform-repository-list > li {
  display: grid;
  grid-template-columns: minmax(10rem, 1fr) minmax(8rem, auto);
  align-items: center;
  gap: 0.5rem;
  min-width: 0;
  padding: 0.35rem 0.55rem;
  border-bottom: 1px solid var(--opengeo-line);
}

.platform-repository-list > li:last-child {
  border-bottom: 0;
}

.platform-repository-folder,
.platform-repository-object-name {
  overflow: hidden;
  min-width: 0;
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-repository-folder {
  justify-self: stretch;
  justify-content: flex-start;
}

.platform-repository-object-name {
  justify-self: stretch;
  justify-content: flex-start;
  border-color: transparent;
  padding-inline: 0.35rem;
  background: transparent;
}

.platform-repository-object-name:hover,
.platform-repository-object-name:focus-visible,
.platform-repository-version:hover,
.platform-repository-version:focus-visible {
  border-color: color-mix(in srgb, var(--opengeo-blue) 55%, var(--opengeo-line));
}

.platform-repository-object-controls {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.platform-repository-version-list {
  display: grid;
  gap: 0;
  margin: 0;
  padding: 0;
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  list-style: none;
  overflow: hidden;
}

.platform-repository-version-list > li {
  display: grid;
  grid-template-columns: minmax(12rem, 1fr) minmax(8rem, auto);
  align-items: center;
  gap: 0.5rem;
  min-width: 0;
  padding: 0.35rem 0.55rem;
  border-bottom: 1px solid var(--opengeo-line);
}

.platform-repository-version-list > li:last-child {
  border-bottom: 0;
}

.platform-repository-version {
  justify-self: stretch;
  justify-content: flex-start;
  overflow: hidden;
  min-width: 0;
  border-color: transparent;
  padding-inline: 0.35rem;
  background: transparent;
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-repository-facts {
  overflow: hidden;
  color: var(--opengeo-muted);
  text-align: right;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-repository-object-detail {
  display: grid;
  gap: 0.45rem;
  min-width: 0;
  border: 1px solid color-mix(in srgb, var(--opengeo-blue) 38%, var(--opengeo-line));
  border-radius: 7px;
  padding: 0.7rem;
  background: var(--opengeo-panel);
}

.platform-repository-object-detail[hidden] {
  display: none;
}

.platform-repository-object-detail > * {
  margin: 0;
}

.platform-repository-object-facts {
  display: grid;
  grid-template-columns: minmax(7rem, auto) minmax(0, 1fr);
  gap: 0.3rem 0.65rem;
  margin: 0;
}

.platform-repository-object-facts dt {
  color: var(--opengeo-muted);
  font-size: 0.78rem;
  font-weight: 700;
}

.platform-repository-object-facts dd {
  overflow-wrap: anywhere;
  margin: 0;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 0.78rem;
}

.platform-repository-registration {
  display: grid;
  gap: 0.45rem;
  margin-top: 0.2rem;
  border-top: 1px solid var(--opengeo-line);
  padding-top: 0.65rem;
}

.platform-repository-registration > h5,
.platform-repository-registration > p {
  margin: 0;
}

.platform-repository-registration-form {
  padding: 0.65rem;
}

.platform-repository-registration > .platform-button {
  justify-self: start;
}

.project-connection-catalog {
  display: grid;
  gap: 0.7rem;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  padding: 0.85rem;
  background: var(--opengeo-panel);
}

.project-federations {
  overflow: hidden;
  border: 1px solid var(--opengeo-line);
  border-radius: 8px;
  background: var(--opengeo-panel);
}

.project-federations > summary {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.25rem 0.75rem;
  padding: 0.8rem 0.85rem;
  cursor: pointer;
}

.project-federations > summary::marker {
  color: var(--opengeo-blue);
}

.project-federations > summary > span {
  text-align: right;
}

.project-federations-body {
  display: grid;
  gap: 0.75rem;
  border-top: 1px solid var(--opengeo-line);
  padding: 0.85rem;
}

.project-federations-body > p,
.project-federation-card h4,
.project-federation-card p,
.project-federation-inspection h5,
.project-federation-import p {
  margin: 0;
}

.project-federation-boundary {
  color: var(--opengeo-muted);
  font-size: 0.76rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

.project-federation-connect,
.project-federation-card {
  border: 1px solid var(--opengeo-line);
  border-radius: 7px;
  background: color-mix(in srgb, var(--opengeo-panel) 84%, var(--opengeo-background));
}

.project-federation-connect > summary,
.project-federation-import > summary,
.project-federation-export > summary {
  padding: 0.55rem 0.65rem;
  cursor: pointer;
  font-weight: 700;
}

.project-federation-form {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  align-items: end;
  gap: 0.6rem;
  border-top: 1px solid var(--opengeo-line);
  padding: 0.7rem;
}

.project-federation-form > label,
.project-federation-import form > label {
  display: grid;
  gap: 0.3rem;
  color: var(--opengeo-muted);
  font-size: 0.78rem;
  font-weight: 700;
}

.project-federation-form input,
.project-federation-import textarea {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.52rem 0.58rem;
  background: var(--opengeo-background);
  color: var(--theme-foreground);
}

.project-federation-checkbox {
  display: flex !important;
  min-height: 2.25rem;
  align-items: center;
  gap: 0.45rem !important;
}

.project-federation-checkbox input {
  width: auto;
}

.project-federation-import {
  grid-column: 1 / -1;
  border-top: 1px solid var(--opengeo-line);
}

.project-federation-import form {
  display: grid;
  gap: 0.55rem;
  padding: 0 0.7rem 0.7rem;
}

.project-federation-import textarea {
  min-height: 12rem;
  resize: vertical;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 0.76rem;
}

.project-federation-list {
  display: grid;
  gap: 0.65rem;
}

.project-federation-card {
  display: grid;
  gap: 0.65rem;
  padding: 0.7rem;
}

.project-federation-card > header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: start;
  gap: 0.6rem;
}

.project-federation-card > header > div {
  display: grid;
  gap: 0.2rem;
  min-width: 0;
}

.project-federation-card > header a {
  overflow: hidden;
  color: var(--opengeo-muted);
  font-size: 0.78rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.project-federation-facts {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.15rem 0.75rem;
  margin: 0;
}

.project-federation-facts dt {
  color: var(--opengeo-muted);
  font-size: 0.74rem;
  font-weight: 700;
}

.project-federation-facts dd {
  overflow-wrap: anywhere;
  margin: 0 0 0.35rem;
  font-size: 0.8rem;
}

.project-federation-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
}

.project-federation-export {
  position: relative;
}

.project-federation-export > summary {
  display: inline-flex;
  min-height: 2rem;
  box-sizing: border-box;
  align-items: center;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.38rem 0.6rem;
  list-style: none;
}

.project-federation-export > pre {
  max-height: 18rem;
  max-width: min(44rem, 80vw);
  overflow: auto;
  border: 1px solid var(--opengeo-line);
  border-radius: 6px;
  padding: 0.6rem;
  background: var(--opengeo-background);
  font-size: 0.72rem;
  white-space: pre-wrap;
}

.project-federation-inspection {
  display: grid;
  gap: 0.8rem;
  border-top: 1px solid var(--opengeo-line);
  padding-top: 0.65rem;
}

.project-federated-resource-list,
.project-federation-harvests {
  display: grid;
  gap: 0.4rem;
  margin: 0.45rem 0 0;
  padding: 0;
  list-style: none;
}

.project-federated-resource,
.project-federation-harvests > li {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
  align-items: center;
  gap: 0.5rem;
  border-top: 1px solid var(--opengeo-line);
  padding-top: 0.45rem;
  font-size: 0.8rem;
}

.project-federated-resource > div:first-child {
  display: grid;
  min-width: 0;
}

.project-federated-resource > div:first-child span {
  overflow: hidden;
  color: var(--opengeo-muted);
  text-overflow: ellipsis;
  white-space: nowrap;
}

.project-federated-resource-history {
  grid-column: 1 / -1;
  color: var(--opengeo-muted);
}

.project-federated-resource-history ol {
  margin: 0;
  padding-left: 1.2rem;
}

.project-connection-catalog > header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.35rem 0.75rem;
}

.project-connection-catalog > header h3,
.project-connection-catalog > header p {
  margin: 0;
}

.project-connection-catalog > header p {
  grid-column: 1;
}

.project-connection-catalog > header a {
  grid-column: 2;
  grid-row: 1 / span 2;
}

.project-connection-list {
  display: grid;
  gap: 0.5rem;
}

.project-connection-record {
  display: grid;
  grid-template-columns: minmax(12rem, 1fr) auto auto auto;
  align-items: center;
  gap: 0.7rem;
  min-width: 0;
  border-top: 1px solid var(--opengeo-line);
  padding-top: 0.65rem;
  color: var(--theme-foreground);
}

.project-connection-record > div {
  display: grid;
  min-width: 0;
}

.project-connection-record > div span,
.project-connection-record > span:not(.badge) {
  overflow: hidden;
  color: var(--opengeo-muted);
  text-overflow: ellipsis;
  white-space: nowrap;
}

.platform-workspace:has(.opengeo-workbench) {
  grid-template-columns: minmax(0, 1fr);
  gap: 0;
  margin: 0;
}

.platform-workspace:has(.opengeo-workbench) > .platform-mode {
  position: absolute;
  z-index: 35;
  right: 0.65rem;
  bottom: 0.45rem;
  max-width: 18rem;
  overflow: hidden;
  border-color: color-mix(in srgb, var(--gis-line, var(--opengeo-line)) 70%, transparent);
  background: color-mix(in srgb, var(--gis-panel-bg, var(--opengeo-panel)) 92%, transparent);
  color: var(--gis-muted, var(--opengeo-muted));
  pointer-events: none;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Progressive disclosure inside the familiar GIS workbench. */

.gis-panel-left {
  grid-template-rows: auto minmax(0, 1fr) auto;
}

.gis-left-panel-header {
  display: flex;
  align-items: center;
  padding: 0.35rem 0.45rem;
}

.gis-left-panel-controls {
  display: flex;
  min-width: 0;
  margin-left: auto;
  align-items: center;
  gap: 0.08rem;
}

.gis-left-panel-actions {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  width: 100%;
  min-width: 0;
  gap: 0.2rem;
}

.gis-left-panel-actions .gis-button {
  width: 100%;
  min-width: 0;
  min-height: 1.9rem;
  padding: 0.3rem 0.4rem;
  font-size: 0.76rem;
}

.gis-layer-dock {
  border-bottom: 0;
}

.gis-layer-row {
  gap: 0.28rem;
  padding: 0.48rem;
}

.gis-layer-row-top {
  grid-template-columns: auto auto minmax(0, 1fr) auto;
}

.gis-layer-more {
  position: relative;
}

.gis-layer-more > summary {
  display: grid;
  place-items: center;
  min-width: 1.8rem;
  min-height: 1.7rem;
  border-radius: 5px;
  color: var(--gis-muted);
  cursor: pointer;
  font-weight: 800;
  letter-spacing: 0.08em;
  list-style: none;
}

.gis-layer-more > summary::-webkit-details-marker {
  display: none;
}

.gis-layer-more > summary:hover,
.gis-layer-more[open] > summary {
  background: var(--gis-blue-soft);
  color: var(--gis-blue);
}

.gis-layer-more > .gis-layer-popover {
  position: absolute;
  top: calc(100% + 0.2rem);
  right: 0;
  z-index: 25;
  width: 12.5rem;
  box-sizing: border-box;
  overflow: hidden;
  border: 1px solid var(--gis-line);
  border-radius: 8px;
  background: var(--gis-panel-bg);
  box-shadow: 0 16px 32px rgba(15, 23, 42, 0.22);
}

.gis-layer-popover > .gis-layer-tools {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.2rem;
  padding: 0.45rem;
}

.gis-layer-popover > .gis-layer-opacity {
  display: grid;
  gap: 0.25rem;
  padding: 0.45rem;
  border-top: 1px solid var(--gis-line);
  color: var(--gis-muted);
  font-size: 0.72rem;
}

.gis-layer-opacity input {
  width: 100%;
}

.gis-map-actions {
  border-radius: 999px;
  padding: 0.25rem;
}

.gis-map-actions .gis-button {
  border-radius: 999px;
}

@media (max-width: 1100px) {
  .platform-directory-actions {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .platform-project-row {
    grid-template-columns: minmax(0, 1fr) auto;
  }

  .platform-project-row-metadata {
    grid-column: 1;
    grid-row: 2;
  }

  .platform-project-row-open {
    grid-column: 2;
    grid-row: 1 / span 2;
  }
}

@media (max-width: 760px) {
  .platform-resource-navigation {
    display: flex;
    overflow-x: auto;
    overscroll-behavior-inline: contain;
    scrollbar-width: thin;
  }

  .platform-resource-navigation-item {
    flex: 0 0 min(10rem, 44vw);
  }

  .platform-directory-actions {
    grid-template-columns: 1fr;
  }

  .platform-project-creation-form {
    grid-template-columns: 1fr;
  }

  .platform-project-creation-form > * {
    grid-column: 1;
  }

  .platform-inline-admin-form,
  .platform-connection-form,
  .platform-connection-verification,
  .platform-connection-repository,
  .platform-compact-record,
  .project-connection-record,
  .project-dataset-picker-record,
  .project-connection-catalog > header {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-visibility-settings .platform-inline-admin-form {
    grid-template-columns: minmax(0, 1fr);
  }

  .platform-inline-admin-form > *,
  .platform-connection-form > *,
  .platform-connection-verification > *,
  .platform-connection-repository > *,
  .platform-field-wide {
    grid-column: 1;
  }

  .platform-connection-verification > button,
  .platform-connection-repository > button {
    grid-row: auto;
  }

  .platform-source-overview-controls {
    grid-column: 1;
    grid-row: auto;
    flex-direction: row;
    flex-wrap: wrap;
  }

  .platform-source-overview,
  .platform-source-overview-facts {
    grid-template-columns: minmax(0, 1fr);
  }

  .platform-repository-list > li {
    grid-template-columns: minmax(0, 1fr);
  }

  .platform-repository-version-list > li {
    grid-template-columns: minmax(0, 1fr);
  }

  .platform-repository-facts {
    text-align: left;
  }

  .platform-repository-object-facts {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-repository-source-facts {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-connection-catalog > header a,
  .project-connection-catalog > header p {
    grid-column: 1;
    grid-row: auto;
  }

  .project-federations > summary,
  .project-federation-card > header,
  .project-federation-form,
  .project-federation-facts,
  .project-federated-resource,
  .project-federation-harvests > li {
    grid-template-columns: minmax(0, 1fr);
  }

  .project-federations > summary > span {
    text-align: left;
  }

  .project-federation-import,
  .project-federated-resource-history {
    grid-column: 1;
  }

  .platform-directory .platform-heading {
    align-items: start;
    flex-direction: column;
  }

  .platform-directory-identity {
    width: 100%;
    flex-wrap: wrap;
  }

  .platform-site-switcher {
    width: 100%;
  }

  .platform-site-switcher-list {
    right: auto;
    left: 0;
  }

  .platform-project-directory-heading {
    align-items: start;
    flex-direction: column;
  }

  .platform-project-row {
    grid-template-columns: minmax(0, 1fr);
  }

  .platform-project-row-metadata {
    grid-column: 1;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .platform-project-row-open {
    grid-column: 1;
    grid-row: auto;
    width: 100%;
  }

  .platform-project-row-value > span:last-child {
    white-space: normal;
  }

  .platform-source-capability-directory > header,
  .platform-source-capability-record > summary {
    align-items: start;
    grid-template-columns: minmax(0, 1fr);
  }

  .platform-source-capability-directory > header {
    display: grid;
  }

  .platform-source-capability-count {
    justify-self: start;
  }

  .platform-source-capability-controls {
    grid-template-columns: minmax(0, 1fr);
  }

  .platform-source-capability-state {
    justify-self: start;
    text-align: left;
  }

  .platform-source-capability-record > summary small {
    white-space: normal;
  }
}

/* The map keeps the frequent file, data, drawing and inspection actions direct.
   Full GIS commands remain in the adjacent menus and the Layers panel. */
.opengeo-workbench {
  grid-template-rows: auto minmax(0, 1fr);
}

.gis-topbar {
  grid-template-columns: minmax(12rem, auto) minmax(0, 1fr) auto;
  grid-template-rows: auto auto;
  gap: 0.32rem 0.55rem;
  padding-block: 0.32rem;
}

.gis-topbar > .gis-brand {
  grid-column: 1;
  grid-row: 1;
}

.gis-topbar > .gis-app-nav {
  grid-column: 2;
  grid-row: 1;
}

.gis-topbar > .gis-top-actions {
  grid-column: 3;
  grid-row: 1;
}

.gis-toolstrip {
  grid-column: 1 / -1;
  grid-row: 2;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  align-items: start;
  gap: 0.3rem 0.55rem;
  min-width: 0;
  padding-top: 0.28rem;
  border-top: 1px solid var(--gis-line);
}

.gis-toolstrip > .gis-primary-toolbar { grid-column: 1; grid-row: 2; }

.gis-primary-toolbar {
  display: flex;
  flex: 0 1 auto;
  flex-wrap: wrap;
  align-items: stretch;
  gap: 0.3rem;
  min-width: 0;
}

.gis-primary-command-group {
  display: flex;
  flex: 0 0 auto;
  align-items: stretch;
  overflow: hidden;
  border: 1px solid var(--gis-line);
  border-radius: 7px;
  background: var(--gis-elevated);
}

.gis-primary-command {
  display: inline-flex;
  align-items: center;
  gap: 0.32rem;
  min-height: 2.1rem;
  padding: 0.34rem 0.48rem;
  border: 0;
  border-right: 1px solid var(--gis-line);
  background: transparent;
  color: var(--gis-ink);
  cursor: pointer;
  font: inherit;
  font-size: 0.76rem;
  white-space: nowrap;
}

.gis-primary-command:last-child {
  border-right: 0;
}

.gis-primary-command > span {
  display: inline-grid;
  place-items: center;
  min-width: 1rem;
  color: var(--gis-blue);
  font-size: 0.92rem;
}

.gis-command-icon svg {
  width: 1rem;
  height: 1rem;
  overflow: visible;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.8;
  stroke-linecap: round;
  stroke-linejoin: round;
}

.gis-primary-command > strong {
  font-weight: 650;
}

.gis-primary-command:hover,
.gis-primary-command:focus-visible,
.gis-primary-command.active {
  outline: 0;
  background: var(--gis-blue-soft);
  box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--gis-blue) 62%, transparent);
}

.gis-primary-command:disabled {
  cursor: not-allowed;
  opacity: 0.42;
}

.gis-toolstrip > .gis-menubar {
  grid-column: 1;
  grid-row: 1;
  display: flex;
  width: 100%;
  box-sizing: border-box;
  flex-wrap: wrap;
  align-items: flex-start;
  align-content: flex-start;
  min-width: 0;
  overflow: visible;
}

.gis-menu-wrap[data-menu="more"] {
  display: none;
}

.gis-layer-row-top {
  grid-template-columns: auto auto minmax(0, 1fr) auto auto auto;
}

.gis-layer-order-controls {
  display: inline-flex;
  overflow: hidden;
  border: 1px solid var(--gis-line);
  border-radius: 5px;
}

.gis-layer-order-controls .gis-icon-button {
  min-width: 1.8rem;
  min-height: 1.8rem;
  padding: 0.16rem 0.28rem;
  border: 0;
  border-right: 1px solid var(--gis-line);
  border-radius: 0;
  font-size: 0.82rem;
}

.gis-layer-order-controls .gis-icon-button:last-child {
  border-right: 0;
}

.gis-map-authoring-guide {
  position: absolute;
  bottom: 2.8rem;
  left: 50%;
  display: grid;
  width: min(34rem, calc(100% - 8rem));
  gap: 0.28rem;
  padding: 0.65rem 0.75rem;
  transform: translateX(-50%);
  border: 1px solid color-mix(in srgb, #38bdf8 72%, #fff);
  border-radius: 10px;
  background: color-mix(in srgb, #07172b 93%, transparent);
  color: #f8fafc;
  box-shadow: 0 14px 38px rgba(2, 8, 23, 0.4);
  pointer-events: none;
}

.gis-map-authoring-guide > strong {
  font-size: 0.9rem;
}

.gis-map-authoring-guide > span {
  color: #cbd5e1;
  font-size: 0.78rem;
  line-height: 1.35;
}

.gis-map-authoring-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
  pointer-events: auto;
}

.gis-map-authoring-actions .gis-button {
  border-color: rgba(148, 163, 184, 0.48);
  background: #172033;
  color: #f8fafc;
}

.gis-statusbar .gis-projection-disclosure {
  max-width: none;
  padding: 0;
  color: inherit;
  white-space: nowrap;
}

.gis-statusbar .gis-globe-metrics {
  max-width: none;
  padding: 0;
  border: 0;
  background: transparent;
  color: inherit;
  font-size: 0.7rem;
  font-weight: 550;
  white-space: nowrap;
}

/* Reserve an explicit lane for the vertical map controls at every width. */
.gis-map-actions {
  right: 5.75rem;
  max-width: none;
  box-sizing: border-box;
}

@media (max-width: 1500px) {
  .opengeo-workbench {
    grid-template-rows: auto minmax(0, 1fr);
  }

  .gis-topbar {
    grid-template-columns: minmax(10rem, auto) minmax(0, 1fr) auto;
    grid-template-rows: auto auto;
  }

  .gis-toolstrip {
    grid-column: 1 / -1;
    grid-row: 2;
  }
}

@media (max-width: 820px) {
  .opengeo-workbench,
  .opengeo-workbench.left-collapsed,
  .opengeo-workbench.right-collapsed,
  .opengeo-workbench.left-collapsed.right-collapsed {
    grid-template-rows: auto 26rem minmax(22rem, 1fr);
  }

  .gis-topbar {
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto auto auto;
    overflow: visible;
  }

  .gis-topbar > .gis-app-nav {
    grid-column: 1;
    grid-row: 1;
  }

  .gis-topbar > .gis-top-actions {
    grid-column: 1;
    grid-row: 2;
  }

  .gis-toolstrip {
    grid-column: 1;
    grid-row: 3;
    display: grid;
  }

  .gis-primary-toolbar {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    max-width: 100%;
    overflow: visible;
  }

  .gis-primary-command-group {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    width: 100%;
  }

  .gis-primary-command {
    min-width: 0;
    border-right: 1px solid var(--gis-line);
    border-bottom: 1px solid var(--gis-line);
  }

  .gis-primary-command:nth-child(2n) {
    border-right: 0;
  }

  .gis-primary-command:nth-last-child(-n + 2) {
    border-bottom: 0;
  }

  .gis-toolstrip > .gis-menubar {
    flex-wrap: nowrap;
  }

  .gis-menubar > .gis-menu-wrap:not([data-menu="project"]):not([data-menu="layer"]):not([data-menu="more"]) {
    display: none;
  }

  .gis-menu-wrap[data-menu="more"] {
    display: block;
  }

  .gis-map-authoring-guide {
    bottom: 2.6rem;
    right: 5.75rem;
    left: 0.5rem;
    width: auto;
    transform: none;
  }
}

/* The Studio opens on a usable map. Project/file choices remain prominent in a
   dismissible start panel, while the drawing toolbar stays visible behind it. */
.opengeo-start {
  display: block;
  min-height: 100vh;
}

.opengeo-start:has(.opengeo-workbench[data-color-mode="light"]) {
  --start-bg: #f7f9fc;
  --start-surface: #ffffff;
  --start-surface-soft: #eef3fb;
  --start-text: #111827;
  --start-muted: #46546a;
  --start-line: #c5d0df;
  --start-accent: #174ea6;
  --start-accent-soft: #e8f0ff;
  --start-focus: #2f74f5;
  --start-green: #18794e;
  --start-shadow: 0 14px 36px rgba(15, 23, 42, 0.2);
  color-scheme: light;
}

.start-workbench-frame {
  position: relative;
  min-height: 100vh;
  overflow: hidden;
}

.start-workbench-frame > .opengeo-workbench {
  width: 100%;
  min-height: 100vh;
  margin: 0;
  border: 0;
  border-radius: 0;
  box-shadow: none;
}

.start-map-overlay {
  position: absolute;
  inset: 0;
  z-index: 80;
  display: grid;
  box-sizing: border-box;
  place-items: center;
  padding: clamp(0.75rem, 3vw, 2.5rem);
  background: color-mix(in srgb, #020617 58%, transparent);
  backdrop-filter: blur(3px);
}

.start-map-overlay[hidden] {
  display: none;
}

.start-map-dialog.start-main {
  position: relative;
  width: min(62rem, 100%);
  max-height: min(48rem, calc(100vh - 2rem));
  box-sizing: border-box;
  overflow: auto;
  margin: 0;
  border: 1px solid var(--start-line);
  border-radius: 16px;
  padding: clamp(1rem, 3vw, 2rem);
  background: color-mix(in srgb, var(--start-bg) 96%, transparent);
  color: var(--start-text);
  box-shadow: 0 28px 80px rgba(0, 0, 0, 0.52);
}

.start-map-dialog .start-intro h1 {
  font-size: clamp(1.75rem, 4vw, 2.65rem);
}

.start-map-dialog .start-intro > p:last-child {
  margin-top: 0.65rem;
}

.start-map-dialog .start-action-grid {
  gap: 0.7rem;
  margin: 1.25rem 0;
}

.start-map-dialog .start-action-card {
  min-height: 7.5rem;
  padding: 0.9rem;
}

.start-map-close {
  position: sticky;
  z-index: 2;
  top: 0;
  float: right;
  display: grid;
  width: 2.25rem;
  height: 2.25rem;
  place-items: center;
  border: 1px solid var(--start-line);
  border-radius: 999px;
  background: var(--start-surface);
  color: var(--start-text);
  cursor: pointer;
  font: inherit;
  font-size: 1.4rem;
  line-height: 1;
}

.start-map-close:hover,
.start-map-close:focus-visible,
.start-empty-map:hover,
.start-empty-map:focus-visible {
  outline: 2px solid var(--start-focus);
  outline-offset: 2px;
}

.start-empty-map {
  grid-column: 1 / -1;
  min-height: 2.75rem;
  border: 1px solid var(--start-line);
  border-radius: 9px;
  background: var(--start-accent-soft);
  color: var(--start-text);
  cursor: pointer;
  font: inherit;
  font-weight: 700;
}

/* Observable's page theme remains dark while the workbench can switch modes.
   Workbench controls therefore take their text color from the workbench palette. */
.opengeo-workbench .gis-panel,
.opengeo-workbench .gis-panel-header h2,
.opengeo-workbench .gis-button,
.opengeo-workbench .gis-button.active,
.opengeo-workbench .gis-menu-item {
  color: var(--gis-ink);
}

.opengeo-workbench .gis-layer-row-top button:not(.gis-button) {
  color: var(--gis-ink);
}

.opengeo-workbench .gis-brand span,
.opengeo-workbench .gis-layer-row small,
.opengeo-workbench .gis-callout span,
.opengeo-workbench .gis-file-drop span,
.opengeo-workbench .gis-compact-section p {
  color: var(--gis-muted);
}

.opengeo-workbench .gis-map-control-stack .gis-icon-button {
  background: var(--gis-elevated);
  color: var(--gis-ink);
  border-color: var(--gis-line);
  box-shadow: none;
  min-width: 0;
  padding-inline: 3px;
  font-size: 0.78rem;
}

.gis-map-control-stack { grid-template-columns: repeat(2, 64px); padding: 6px; border: 1px solid var(--gis-line); border-radius: 12px; background: color-mix(in srgb, var(--gis-panel-bg) 96%, transparent); box-shadow: 0 3px 12px #0003; }
.opengeo-workbench .gis-map-control-stack .gis-icon-button:hover:not(:disabled) { background: var(--gis-blue-soft); border-color: var(--gis-blue); }
.opengeo-workbench .gis-map-control-stack .gis-icon-button:focus-visible { outline: 2px solid var(--gis-blue); outline-offset: 2px; }

.opengeo-workbench .gis-map-control-stack [aria-pressed="true"] {
  background: var(--gis-blue-soft);
  border-color: var(--gis-blue);
  color: var(--gis-ink);
  box-shadow: inset 0 0 0 1px var(--gis-blue);
}

.opengeo-workbench .gis-map-control-stack .gis-icon-button:disabled { background: var(--gis-panel-strong); color: var(--gis-muted); border-style: dashed; opacity: 1; box-shadow: none; }
.gis-map-control-stack > .gis-camera-controls { border: 0; background: transparent; box-shadow: none; }

.gis-camera-controls {
  width: 100%;
  grid-column: 1 / -1;
  box-sizing: border-box;
  padding: 4px;
  border: 1px solid var(--gis-line);
  border-radius: 14px;
  background: color-mix(in srgb, var(--gis-panel-bg) 94%, transparent);
  color: var(--gis-ink);
  box-shadow: 0 3px 12px #0003;
}

.gis-camera-center {
  position: absolute;
  inset: 50% auto auto 50%;
  transform: translate(-50%, -50%);
  width: 44px;
  height: 44px;
  padding: 0;
  border: 1px solid var(--gis-line);
  border-radius: 50%;
  background: var(--gis-panel-bg);
  color: var(--gis-ink);
  font: 600 16px/1 system-ui;
  cursor: pointer;
}

.gis-camera-center[data-displaced="true"] { color: var(--gis-blue); border-color: var(--gis-blue); }
.gis-camera-center:hover { background: var(--gis-blue-soft); }
.gis-camera-center:active { background: var(--gis-blue); color: var(--gis-panel-bg); }
.gis-camera-controls :focus-visible { outline: 2px solid var(--gis-blue); outline-offset: 2px; }
.gis-camera-controls :disabled { opacity: 0.4; cursor: default; }
.gis-camera-tilt { display: grid; font: 12px/1.4 system-ui; text-align: center; }
.gis-camera-tilt input { width: 100%; min-width: 0; margin: 0; accent-color: var(--gis-blue); }

.gis-camera-compass { position: relative; width: 96px; height: 96px; margin: 2px auto 6px; }
.gis-camera-ring { position: absolute; inset: 0; border: 1px solid var(--gis-line); background: var(--gis-elevated); border-radius: 50%; cursor: grab; touch-action: none; box-sizing: border-box; }
.gis-camera-ring:hover { border-color: var(--gis-blue); }
.gis-camera-ring:active { cursor: grabbing; border-color: var(--gis-blue); }
.gis-camera-ring[aria-disabled="true"] { cursor: default; opacity: 0.5; }
.gis-camera-north-marker { position: absolute; inset: 6px; border-radius: 50%; transform: rotate(var(--camera-bearing, 0deg)); pointer-events: none; }
.gis-camera-north-marker::before { content: ""; position: absolute; top: 0; left: calc(50% - 2px); width: 4px; height: 12px; border-radius: 2px; background: var(--gis-blue); }
.gis-camera-help { position: relative; font: 11px/1.4 system-ui; }
.gis-camera-help summary { cursor: pointer; text-align: center; padding-block: 5px; }
.gis-camera-help p { position: absolute; z-index: 10; right: 0; width: min(260px, calc(100vw - 40px)); margin: 4px 0; padding: 10px; border: 1px solid var(--gis-line); border-radius: 6px; background: var(--gis-panel-bg); color: var(--gis-ink); box-shadow: 0 3px 12px #0003; font: 13px/1.5 system-ui; }

.gis-history-selected-date { display: block; font-weight: 700; font-variant-numeric: tabular-nums; }
.gis-history-date-ticks { display: flex; justify-content: space-between; height: 6px; margin-inline: 8px; }
.gis-history-date-ticks span { width: 1px; height: 6px; background: currentColor; opacity: 0.55; }
.gis-esri-basemaps > :not(summary) { margin: 0.65rem; }
.gis-esri-basemaps > label { display: block; }
.gis-esri-basemaps > select, .gis-esri-basemaps input[type="password"] { max-width: calc(100% - 1.3rem); min-height: 44px; }
.gis-esri-basemaps input[type="password"] { display: block; width: 100%; }
.gis-esri-basemaps input[type="checkbox"] { width: 24px; height: 24px; vertical-align: middle; }
.gis-esri-basemaps [hidden] { display: none; }
.gis-esri-basemaps .gis-esri-apply {border-color: var(--gis-blue); background: var(--gis-blue-soft); font-weight: 600; min-height: 44px;}
.gis-esri-basemaps [role="status"] {color: var(--gis-ink); overflow-wrap: anywhere;}

.gis-map-chrome:has(.gis-map-authoring-guide, .gis-temporary-edit-guide) .gis-camera-controls { display: none; }
.gis-map-chrome:has(.gis-map-authoring-guide, .gis-temporary-edit-guide) .gis-map-control-stack { grid-template-columns: 54px; }

@media (pointer: coarse) {
  .gis-map-control-stack { grid-template-columns: repeat(2, 84px); }
  .gis-camera-compass { width: 136px; height: 136px; }
  .gis-camera-help summary { min-height: 44px; box-sizing: border-box; display: grid; place-items: center; }
  .gis-camera-tilt input { min-height: 44px; }
  .gis-map-chrome:has(.gis-map-authoring-guide, .gis-temporary-edit-guide) .gis-map-control-stack { grid-template-columns: 72px; }
}

@media (max-width: 1000px) and (max-height: 500px) {
  .gis-map-control-stack {
    grid-template-columns: 148px 54px;
    max-height: calc(100% - 1.5rem);
    overflow: auto;
    overscroll-behavior: contain;
  }

  .gis-camera-controls { grid-column: 1; grid-row: 1 / span 3; }
  .gis-camera-compass { width: 136px; height: 136px; }
  .gis-camera-tilt { grid-template-columns: 3.5rem minmax(0, 1fr); align-items: center; }
  .gis-camera-tilt input { min-height: 44px; }
}

.opengeo-workbench .gis-statusbar {
  border-color: var(--gis-line);
  background: var(--gis-panel-bg);
  color: var(--gis-ink);
}

/* Compact project contents follow a familiar file-tree pattern. */
.gis-content-tree,
.gis-content-tree ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

.gis-content-tree-root,
.gis-content-tree-group {
  min-width: 0;
}

.gis-content-tree-group > summary {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto;
  align-items: center;
  gap: 0.4rem;
  min-height: 2rem;
  padding: 0.28rem 0.4rem;
  border-radius: 5px;
  color: var(--gis-ink);
  cursor: pointer;
  list-style: none;
}

.gis-content-tree-group > summary::-webkit-details-marker {
  display: none;
}

.gis-content-tree-group > summary:hover {
  background: var(--gis-blue-soft);
}

.gis-content-tree-group > summary small {
  flex: 0 0 auto;
  color: var(--gis-muted);
  font-size: 0.68rem;
}

.gis-content-tree-group > summary strong {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-content-tree-group > summary .gis-tree-icon {
  transition: transform 120ms ease;
}

.gis-content-tree-group[open] > summary .gis-tree-icon {
  transform: rotate(90deg);
}

.gis-example-map-tree {
  margin-bottom: 0.35rem;
  padding-bottom: 0.45rem;
  border-bottom: 1px solid var(--gis-line);
}

.gis-example-map-disclosure > summary {
  color: var(--gis-blue);
}

.gis-example-map-page > button {
  display: grid;
  width: 100%;
  min-height: 2.05rem;
  box-sizing: border-box;
  gap: 0.08rem;
  border: 0;
  border-radius: 4px;
  padding: 0.3rem 0.42rem;
  background: transparent;
  color: var(--gis-ink);
  cursor: pointer;
  font: inherit;
  font-size: 0.75rem;
  text-align: left;
}

.gis-example-map-page > button small {
  overflow: hidden;
  color: var(--gis-muted);
  font-size: 0.65rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-example-map-page > button:hover,
.gis-example-map-page > button:focus-visible,
.gis-example-map-page > button.active {
  outline: 0;
  background: var(--gis-blue-soft);
  box-shadow: inset 2px 0 0 var(--gis-blue);
}

.gis-layer-tree-group > summary {
  grid-template-columns: auto auto minmax(0, 1fr) auto auto auto;
}

.gis-layer-group-order-controls {
  align-self: center;
}

.gis-layer-tree-group > summary input[type="checkbox"] {
  width: 1rem;
  height: 1rem;
  margin: 0;
  accent-color: var(--gis-blue);
}

.gis-content-tree-group > ul {
  position: relative;
  display: grid;
  gap: 0.08rem;
  padding-left: 1.15rem;
}

.gis-content-tree-group > ul::before {
  position: absolute;
  top: 0;
  bottom: 0.7rem;
  left: 0.55rem;
  width: 1px;
  background: var(--gis-line);
  content: "";
}

.gis-tree-icon {
  display: inline-grid;
  width: 1rem;
  place-items: center;
  color: var(--gis-muted);
  font-size: 0.72rem;
}

.gis-content-tree .gis-layer-row {
  gap: 0.12rem;
  border: 0;
  border-radius: 4px;
  padding: 0.24rem 0.3rem;
  background: transparent;
  box-shadow: none;
}

.gis-content-tree .gis-layer-row:hover,
.gis-content-tree .gis-layer-row.active {
  background: var(--gis-blue-soft);
  box-shadow: inset 2px 0 0 var(--gis-blue);
}

.gis-content-tree .gis-layer-row > small {
  overflow: hidden;
  padding-left: 3.1rem;
  font-size: 0.67rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-content-tree .gis-layer-order-controls {
  opacity: 1;
  pointer-events: auto;
}

.gis-content-tree .gis-layer-row:hover .gis-layer-order-controls,
.gis-content-tree .gis-layer-row.active .gis-layer-order-controls,
.gis-content-tree .gis-layer-row:focus-within .gis-layer-order-controls {
  opacity: 1;
  pointer-events: auto;
}

.gis-layer-tree-legend {
  margin-left: 3.1rem;
  color: var(--gis-muted);
  font-size: 0.68rem;
}

.gis-layer-tree-legend > summary {
  min-height: 1.6rem;
  cursor: pointer;
}

.gis-layer-tree-legend .gis-style-legend {
  margin: 0.2rem 0 0.4rem;
}

.gis-basemap-tree-row > button {
  display: flex;
  width: 100%;
  min-height: 1.9rem;
  align-items: center;
  gap: 0.35rem;
  border: 0;
  border-radius: 4px;
  padding: 0.26rem 0.35rem;
  background: transparent;
  color: var(--gis-muted);
  cursor: pointer;
  font: inherit;
  font-size: 0.74rem;
  text-align: left;
}

.gis-basemap-tree-row .gis-basemap-governance-state {
  margin-left: auto;
  flex: 0 0 auto;
}

.gis-basemap-tree-row > button:hover,
.gis-basemap-tree-row > button:focus-visible {
  outline: 0;
  background: var(--gis-blue-soft);
  color: var(--gis-ink);
}

/* The project-contents panel gives its height to one layer tree. KML content,
   feature search, bookmarks, and imported portal settings are compact
   disclosures in this same workflow; project navigation and source ingestion
   remain in Projects, Catalog, and Add data. */
.gis-left-panel-header {
  align-items: center;
  gap: 0.25rem;
  min-height: 2.35rem;
  box-sizing: border-box;
  padding: 0.22rem 0.3rem;
}

.gis-left-panel-close,
.gis-layer-toolbar .gis-svg-icon-button {
  min-width: 1.85rem;
  min-height: 1.85rem;
  padding: 0.25rem;
}

.gis-svg-icon-button .gis-command-icon,
.gis-svg-icon-button .gis-command-icon svg {
  width: 1rem;
  height: 1rem;
}

.gis-layer-dock {
  grid-template-rows: minmax(0, 1fr) auto;
  gap: 0;
  padding: 0;
}

.gis-layer-toolbar {
  flex-wrap: nowrap;
  gap: 0.08rem;
}

.gis-layer-list {
  padding: 0.2rem 0.28rem 0.4rem;
}

.gis-content-tree-group > summary {
  min-height: 1.85rem;
  gap: 0.28rem;
  padding: 0.18rem 0.25rem;
}

.gis-content-tree-group > ul {
  gap: 0;
  padding-left: 0.9rem;
}

.gis-content-tree-group > ul::before {
  left: 0.42rem;
}

.gis-content-tree .gis-layer-row {
  min-height: 1.8rem;
  box-sizing: border-box;
  padding: 0.16rem 0.22rem;
}

.gis-content-tree .gis-layer-row-top {
  gap: 0.28rem;
}

.gis-content-tree .gis-layer-row-top > button {
  white-space: nowrap;
}

.gis-content-tree .gis-layer-order-controls .gis-icon-button,
.gis-content-tree .gis-layer-more > summary {
  min-width: 1.55rem;
  min-height: 1.55rem;
  padding: 0.1rem 0.2rem;
}

.gis-layer-popover-meta {
  display: block;
  overflow: hidden;
  padding: 0.5rem 0.55rem 0.35rem;
  color: var(--gis-muted);
  font-size: 0.68rem;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-layer-popover .gis-layer-tree-legend {
  margin: 0;
  padding: 0.25rem 0.5rem 0.4rem;
  border-top: 1px solid var(--gis-line);
}

.gis-layer-popover .gis-layer-tree-legend > summary {
  min-height: 1.8rem;
  display: flex;
  align-items: center;
}

.gis-bookmark-strip,
.gis-search,
.gis-kml-contents,
.gis-portal-configuration-disclosure {
  margin: 0;
  border: 0;
  border-top: 1px solid var(--gis-line);
  background: var(--gis-panel-bg);
}

.gis-bookmark-strip > summary,
.gis-search > summary,
.gis-kml-contents > summary,
.gis-portal-configuration-disclosure > summary {
  min-height: 2.1rem;
  box-sizing: border-box;
  padding: 0.42rem 0.55rem;
  color: var(--gis-muted);
  cursor: pointer;
  font-size: 0.72rem;
  font-weight: 700;
  list-style-position: inside;
}

.gis-bookmark-strip > div,
.gis-search-body {
  display: grid;
  gap: 0.25rem;
  padding: 0.25rem 0.45rem 0.45rem;
}

.gis-bookmark-strip .gis-button {
  overflow: hidden;
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.gis-search {
  display: block;
  padding: 0;
}

.gis-layer-support {
  min-height: 0;
  max-height: min(52dvh, 32rem);
  overflow: auto;
  border-top: 1px solid var(--gis-line);
}

.gis-layer-support > details:first-child {
  border-top: 0;
}

.gis-kml-contents,
.gis-portal-configuration-disclosure {
  margin: 0;
  border: 0;
  border-top: 1px solid var(--gis-line);
  background: var(--gis-panel-bg);
}

.gis-portal-configuration-disclosure > .gis-portal-configuration {
  margin: 0;
  border: 0;
  border-top: 1px solid var(--gis-line);
  border-radius: 0;
}

@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .gis-content-tree-group > summary,
  .gis-example-map-page > button,
  .gis-basemap-tree-row > button,
  .gis-layer-tree-legend > summary {
    min-height: 2.75rem;
  }

  .gis-layer-tree-group > summary input[type="checkbox"],
  .gis-layer-row-top > input[type="checkbox"] {
    width: 2.75rem;
    height: 2.75rem;
    margin: 0;
  }

  .gis-content-tree .gis-layer-order-controls {
    opacity: 1;
    pointer-events: auto;
  }

  .gis-layer-order-controls .gis-icon-button,
  .gis-layer-more > summary {
    min-width: 2.75rem;
    min-height: 2.75rem;
  }

  .gis-left-panel-header {
    min-height: 3rem;
    padding: 0.2rem 0.3rem;
  }

  .gis-left-panel-close,
  .gis-layer-toolbar .gis-svg-icon-button,
  .gis-bookmark-strip > summary,
  .gis-search > summary,
  .gis-kml-contents > summary,
  .gis-portal-configuration-disclosure > summary {
    min-height: 2.75rem;
  }


  .gis-panel-left {
    grid-template-rows: auto minmax(0, 1fr) auto;
  }

  .gis-layer-dock {
    grid-template-rows: minmax(0, 1fr) auto;
  }
}

.gis-empty-tree-note {
  display: grid;
  gap: 0.2rem;
  margin: 0.45rem 0.25rem;
  padding: 0.55rem;
  border-top: 1px solid var(--gis-line);
  color: var(--gis-ink);
  font-size: 0.75rem;
}

.gis-empty-tree-note span {
  color: var(--gis-muted);
  line-height: 1.4;
}

/* GeoLibre-comparable basemap organization with quick visual recognition. */
.gis-basemap-group {
  display: grid;
  gap: 0.4rem;
}

.gis-basemap-group > h4 {
  margin: 0;
  color: var(--gis-muted);
  font-size: 0.72rem;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

.gis-basemap-choice-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.4rem;
}

.gis-basemap-card {
  grid-template-columns: 2.4rem minmax(0, 1fr);
  grid-auto-rows: min-content;
  align-content: start;
  gap: 0.08rem 0.5rem;
  min-width: 0;
}

.gis-basemap-card .gis-basemap-preview {
  grid-column: 1;
  grid-row: 1 / span 6;
  display: block;
  width: 2.4rem;
  height: 2.4rem;
  border: 1px solid var(--gis-line);
  border-radius: 5px;
  background: linear-gradient(145deg, #dbeafe 0 38%, #bfdbce 38% 62%, #d9d1b9 62% 100%);
}

.gis-basemap-preview[data-basemap*="dark"] {
  background: linear-gradient(145deg, #0f172a, #334155 52%, #0f766e);
}

.gis-basemap-preview[data-basemap*="fiord"] {
  background: linear-gradient(145deg, #d9e4e7, #6f8c97 54%, #334e5a);
}

.gis-basemap-preview[data-basemap*="bright"],
.gis-basemap-preview[data-basemap*="voyager"] {
  background: linear-gradient(145deg, #fef3c7, #86efac 45%, #60a5fa);
}

.gis-basemap-preview[data-basemap="blank"] {
  background: var(--gis-elevated);
}

.gis-basemap-preview[data-basemap="blue-marble"] {
  background:
    radial-gradient(ellipse at 66% 36%, #5f8f50 0 13%, transparent 14%),
    radial-gradient(ellipse at 44% 63%, #9f8657 0 12%, transparent 13%),
    radial-gradient(circle at 48% 48%, #b9d8e8 0 53%, transparent 54%),
    #173b67;
}

.gis-basemap-preview[data-basemap="city-lights"] {
  background:
    radial-gradient(circle at 65% 32%, #ffe082 0 3%, transparent 4%),
    radial-gradient(circle at 42% 45%, #f59e0b 0 2%, transparent 3%),
    radial-gradient(circle at 72% 68%, #fde68a 0 2%, transparent 3%),
    radial-gradient(circle at 32% 72%, #fb923c 0 2%, transparent 3%),
    radial-gradient(circle at 50% 50%, #23334b 0 55%, #030712 56%);
}

.gis-basemap-preview[data-basemap="usgs-imagery"] {
  background:
    linear-gradient(28deg, transparent 0 47%, #d9d3bd 48% 54%, transparent 55%),
    linear-gradient(132deg, #355f35 0 30%, #7e9562 31% 56%, #6f5738 57% 72%, #2f5d76 73%);
}

.gis-basemap-preview[data-basemap="shaded-relief"],
.gis-basemap-preview[data-basemap="open-terrain"] {
  background:
    linear-gradient(145deg, transparent 0 42%, rgba(255, 255, 255, 0.6) 43% 49%, transparent 50%),
    linear-gradient(35deg, #334934 0 28%, #78956b 29% 52%, #b9ac82 53% 72%, #6f6b61 73%);
}

.gis-basemap-card > :not(.gis-basemap-preview) { grid-column: 2; }
.gis-basemap-card .gis-basemap-governance-badge { justify-self: start; align-self: start; height: auto; }
.gis-basemap-dialog .gis-basemap-card { padding: 10px; }
.gis-basemap-dialog .gis-basemap-card strong { font-size: 0.85rem; }
.gis-basemap-dialog .gis-basemap-card span,
.gis-basemap-dialog .gis-basemap-card small { font-size: 0.72rem; }
.gis-basemap-dialog-footer { gap: 12px; padding-block: 10px; font: 13px/1.4 system-ui; }
.gis-basemap-dialog-footer > [data-basemap-current] { flex: 1; min-width: 0; }
.gis-basemap-dialog-footer .gis-field { width: 160px; min-width: 0; margin: 0; }
.gis-basemap-dialog-feedback { font: 13px/1.4 system-ui; padding-block: 8px; max-height: 5rem; overflow: auto; }
.gis-basemap-history-link { width: 100%; text-align: left; }
.gis-open-terrain-catalog .gis-basemap-choice-grid { grid-template-columns: 1fr; }
.gis-open-terrain-catalog p { margin: 0; font: 13px/1.4 system-ui; }
.gis-basemap-dialog button:disabled { opacity: 0.55; cursor: not-allowed; }
.gis-map-view-help { position: relative; grid-column: 1 / -1; padding: 5px; border-radius: 6px; background: var(--gis-panel-bg); color: var(--gis-ink); font: 11px/1.4 system-ui; }
.gis-map-view-help summary { cursor: pointer; }
.gis-map-view-help[open] { width: min(250px, calc(100vw - 48px)); justify-self: end; }
.gis-map-view-help p { margin: 6px 0; }
.gis-map-control-stack button:disabled { opacity: 0.5; cursor: not-allowed; }
@media (pointer: coarse) { .gis-map-view-help summary { min-height: 44px; display: flex; align-items: center; } }

.gis-terrain-card[aria-pressed="true"] {
  border-color: var(--gis-blue);
  background: var(--gis-blue-soft);
}

.gis-basemap-card strong,
.gis-basemap-card span,
.gis-basemap-card small {
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
}

.gis-basemap-card span,
.gis-basemap-card small {
  font-size: 0.67rem;
  white-space: nowrap;
}

@media (max-width: 640px) {
  .start-map-overlay {
    align-items: start;
    padding: 0.5rem;
  }

  .start-map-dialog.start-main {
    max-height: calc(100vh - 1rem);
    border-radius: 12px;
    padding: 0.85rem;
  }

  .start-map-dialog .start-action-grid,
  .gis-basemap-choice-grid {
    grid-template-columns: 1fr;
  }

  .gis-basemap-modal-backdrop {
    align-items: stretch;
    padding: 0.4rem;
  }

  .gis-basemap-dialog {
    width: calc(100vw - 0.8rem);
    max-height: calc(100dvh - 0.8rem);
  }

  .gis-basemap-dialog-header,
  .gis-basemap-dialog-footer {
    align-items: stretch;
  }

  .gis-basemap-dialog-header {
    grid-template-columns: minmax(0, 1fr) auto;
  }

  .gis-basemap-dialog-footer {
    display: grid;
    grid-template-columns: 1fr;
  }

  .gis-basemap-dialog-footer .gis-key-values,
  .gis-basemap-dialog-footer .gis-field {
    min-width: 0;
  }

  .gis-basemap-dialog-footer .gis-key-values {
    display: none;
  }

  .gis-basemap-catalog-group > summary {
    grid-template-columns: 1fr;
    gap: 0.2rem;
  }

  .gis-basemap-catalog-group > .gis-basemap-choice-grid {
    grid-template-columns: 1fr;
  }

  .gis-basemap-connection-choice {
    grid-template-columns: 1fr;
  }

  .start-map-dialog .start-action-card {
    min-height: 6rem;
  }
}

@media (max-width: 640px), (max-width: 1000px) and (max-height: 500px) {
  .gis-query-panel .gis-button,
  .gis-query-panel input:not([type="range"]),
  .gis-query-panel select,
  .gis-query-panel summary,
  .gis-identify-panel .gis-button {
    min-height: 2.75rem;
    box-sizing: border-box;
  }

  .gis-history-panel .gis-button,
  .gis-history-panel input:not([type="range"]),
  .gis-history-panel select,
  .gis-history-panel a[href] {
    min-height: 2.75rem;
    box-sizing: border-box;
  }

  .gis-history-navigation {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .gis-query-step {
    grid-template-columns: 1fr;
  }

  .gis-durable-jobs .gis-button,
  .gis-pmtiles-derivative-editor .gis-button,
  .gis-pmtiles-derivative-editor input:not([type="range"]),
  .gis-pmtiles-derivative-editor select,
  .gis-pmtiles-derivative-editor textarea,
  .gis-basemap-dialog button:not(.gis-basemap-card),
  .gis-basemap-dialog a[href],
  .gis-basemap-dialog input:not([type="range"]),
  .gis-basemap-dialog select,
  .gis-basemap-dialog textarea,
  .gis-basemap-dialog summary {
    min-height: 2.75rem;
    box-sizing: border-box;
  }

  .gis-map .maplibregl-ctrl-attrib {
    max-width: calc(100vw - 5.5rem);
  }

  .gis-map .maplibregl-ctrl-attrib.maplibregl-compact,
  .gis-map .maplibregl-ctrl-attrib-button {
    min-width: 2.75rem;
    min-height: 2.75rem;
  }
}

@media (max-width: 1000px) and (max-height: 500px) {
  .gis-basemap-modal-backdrop {
    padding: 0.25rem;
  }

  .gis-basemap-dialog {
    width: calc(100vw - 0.5rem);
    max-height: calc(100dvh - 0.5rem);
  }

  .gis-basemap-dialog-header,
  .gis-basemap-dialog-body,
  .gis-basemap-dialog-feedback,
  .gis-basemap-dialog-footer {
    padding: 0.5rem 0.65rem;
  }

  .gis-basemap-dialog-header p {
    font-size: 0.74rem;
    line-height: 1.25;
  }

  .gis-basemap-dialog-feedback {
    max-height: 4.75rem;
    overflow: auto;
    overscroll-behavior: contain;
  }

  .gis-basemap-dialog-footer .gis-key-values {
    display: none;
  }

  .gis-basemap-dialog-footer .gis-field {
    min-width: min(16rem, 56vw);
  }
}

@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .gis-map .maplibregl-ctrl-bottom-right {
    right: auto;
    bottom: 0.5rem;
    left: 0.5rem;
  }

  .gis-map .maplibregl-ctrl-attrib {
    margin: 0;
  }

  .gis-map-column:has(.gis-basemap-runtime-alert) .gis-map .maplibregl-ctrl-bottom-right,
  .gis-map-column:has(.gis-map-authoring-guide) .gis-map .maplibregl-ctrl-bottom-right {
    top: 0.5rem;
    bottom: auto;
  }
}

/* Phone workbench: preserve a full map, put frequent drawing actions within
   thumb reach, and keep the complete desktop command set in one modal sheet.
   Short phone-landscape viewports use the same shell as portrait phones. */
.gis-mobile-toolbar {
  display: none;
}

.gis-mobile-command-backdrop {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: grid;
  align-items: end;
  background: rgba(2, 6, 23, 0.72);
}

.gis-mobile-command-sheet {
  display: grid;
  grid-template-rows: auto minmax(0, 1fr);
  box-sizing: border-box;
  width: 100%;
  max-height: min(82dvh, 44rem);
  overflow: hidden;
  border: 1px solid var(--gis-line);
  border-bottom: 0;
  border-radius: 16px 16px 0 0;
  background: var(--gis-panel-bg);
  color: var(--gis-ink);
  box-shadow: 0 -18px 48px rgba(0, 0, 0, 0.4);
}

.gis-mobile-command-sheet:focus-visible {
  outline: 3px solid var(--gis-blue);
  outline-offset: -4px;
}

.gis-mobile-command-sheet > header {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: start;
  gap: 0.75rem;
  padding: 0.85rem 0.9rem;
  border-bottom: 1px solid var(--gis-line);
}

.gis-mobile-command-sheet h2,
.gis-mobile-command-sheet p {
  margin: 0;
}

.gis-mobile-command-sheet h2 {
  font-size: 1.05rem;
}

.gis-mobile-command-sheet p {
  margin-top: 0.2rem;
  color: var(--gis-muted);
  font-size: 0.76rem;
  line-height: 1.35;
}

.gis-mobile-command-sheet > header .gis-icon-button {
  min-width: 2.75rem;
  min-height: 2.75rem;
  font-size: 1.25rem;
}

.gis-mobile-command-categories {
  min-height: 0;
  overflow: auto;
  overscroll-behavior: contain;
  padding: 0.55rem 0.55rem max(0.8rem, env(safe-area-inset-bottom));
}

.gis-mobile-command-essentials {
  display: grid;
  gap: 0.5rem;
  padding: 0.2rem 0.1rem 0.75rem;
  border-bottom: 1px solid var(--gis-line);
}

.gis-mobile-command-essentials h3 {
  margin: 0;
  padding: 0.25rem 0.45rem 0;
  color: var(--gis-muted);
  font-size: 0.72rem;
  letter-spacing: 0.045em;
  text-transform: uppercase;
}

.gis-mobile-command-navigation {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.35rem;
  padding: 0.65rem 0.1rem;
  border-bottom: 1px solid var(--gis-line);
}

.gis-mobile-command-navigation h3 {
  grid-column: 1 / -1;
  margin: 0;
  padding: 0.25rem 0.45rem 0;
  color: var(--gis-muted);
  font-size: 0.72rem;
  letter-spacing: 0.045em;
  text-transform: uppercase;
}

.gis-mobile-command-navigation a {
  box-sizing: border-box;
  min-height: 2.75rem;
  justify-content: flex-start;
  border: 1px solid var(--gis-line);
  border-radius: 7px;
  background: var(--gis-elevated);
  white-space: normal;
}

.gis-mobile-command-essential-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 0.35rem;
}

.gis-mobile-essential-command {
  box-sizing: border-box;
  justify-content: flex-start;
  min-width: 0;
  min-height: 2.75rem;
  border: 1px solid var(--gis-line);
  border-radius: 7px;
  background: var(--gis-elevated);
  white-space: normal;
}

.gis-mobile-essential-command > strong {
  overflow: hidden;
  text-overflow: ellipsis;
}

.gis-mobile-command-category {
  border-bottom: 1px solid var(--gis-line);
}

.gis-mobile-command-category > summary {
  display: flex;
  min-height: 3rem;
  box-sizing: border-box;
  align-items: center;
  padding: 0.65rem 0.55rem;
  color: var(--gis-ink);
  cursor: pointer;
}

.gis-mobile-command-category > .gis-menu-section {
  padding: 0.3rem 0.15rem 0.55rem;
}

.gis-mobile-command-category .gis-menu-item {
  min-height: 2.75rem;
}

@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .start-workbench-frame,
  .start-workbench-frame > .opengeo-workbench {
    height: 100dvh;
    min-height: 0;
    max-height: 100dvh;
  }

  .platform-workspace:has(.opengeo-workbench) > .platform-mode {
    display: none;
  }

  .platform-workspace:has(.opengeo-workbench) > .observable-source-workspace {
    display: none;
  }

  .opengeo-workbench,
  .opengeo-workbench.left-collapsed,
  .opengeo-workbench.right-collapsed,
  .opengeo-workbench.left-collapsed.right-collapsed {
    position: fixed;
    inset: 0;
    grid-template-columns: minmax(0, 1fr);
    grid-template-rows: auto minmax(0, 1fr);
    width: 100%;
    height: 100dvh;
    min-height: 0;
    max-height: 100dvh;
    overflow: hidden;
  }

  .public-workbench-demo > .opengeo-workbench {
    z-index: 35;
    height: 100dvh;
  }

  .gis-topbar {
    box-sizing: border-box;
    grid-template-columns: minmax(0, 1fr) auto;
    grid-template-rows: auto;
    gap: 0.35rem;
    min-height: 3.25rem;
    padding: 0.35rem;
    overflow: hidden;
  }

  .gis-topbar > .gis-app-nav {
    grid-column: 1;
    grid-row: 1;
    min-width: 0;
    overflow: hidden;
    border: 0;
    padding: 0;
  }

  .gis-app-nav > a,
  .gis-app-nav > button {
    display: none;
  }

  .gis-workspace-select {
    display: block;
    width: 100%;
    min-height: 2.65rem;
    font-size: 0.88rem;
  }

  .gis-topbar > .gis-top-actions {
    position: static;
    grid-column: 2;
    grid-row: 1;
    display: flex;
    justify-content: end;
    overflow: visible;
  }

  .gis-role-badge,
  .gis-save-as-command,
  .gis-theme-command {
    display: none;
  }

  .gis-save-command {
    min-height: 2.65rem;
    border-color: color-mix(in srgb, var(--gis-blue) 60%, var(--gis-line));
    background: var(--gis-blue-soft);
    font-weight: 700;
  }

  .gis-toolstrip {
    display: none !important;
  }

  .gis-map-column {
    grid-column: 1;
    grid-row: 2;
    min-height: 0;
    height: auto;
    padding-bottom: calc(4.25rem + env(safe-area-inset-bottom));
  }

  .gis-panel-left,
  .opengeo-workbench .gis-panel-right {
    position: absolute;
    right: 0;
    bottom: calc(4.25rem + env(safe-area-inset-bottom));
    left: 0;
    z-index: 45;
    grid-row: auto;
    width: 100%;
    height: min(58dvh, 32rem);
    box-sizing: border-box;
    overflow: hidden;
    border: 1px solid var(--gis-line);
    border-width: 1px 0 0;
    border-radius: 14px 14px 0 0;
    box-shadow: 0 -16px 42px rgba(0, 0, 0, 0.34);
  }

  .opengeo-workbench .gis-panel-right {
    z-index: 46;
  }

  .opengeo-workbench.left-collapsed .gis-panel-left,
  .opengeo-workbench.right-collapsed .gis-panel-right {
    display: none;
  }

  .gis-panel-header {
    min-height: 3rem;
    padding: 0.45rem 0.6rem;
  }

  .gis-left-panel-header {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
  }

  .gis-left-panel-actions {
    flex-wrap: nowrap;
    overflow-x: auto;
  }

  .gis-left-panel-actions .gis-button {
    min-height: 2.75rem;
  }

  .gis-mobile-toolbar {
    position: absolute;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 60;
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    height: calc(4.25rem + env(safe-area-inset-bottom));
    box-sizing: border-box;
    align-items: stretch;
    padding: 0.2rem 0.15rem max(0.2rem, env(safe-area-inset-bottom));
    border-top: 1px solid var(--gis-line);
    background: color-mix(in srgb, var(--gis-panel-bg) 96%, transparent);
    box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.24);
    backdrop-filter: blur(12px);
  }

  .gis-mobile-command {
    display: grid;
    grid-template-rows: 1.55rem auto;
    min-width: 0;
    min-height: 3.75rem;
    place-items: center;
    gap: 0.1rem;
    border: 0;
    border-radius: 7px;
    padding: 0.22rem 0.08rem;
  }

  .gis-mobile-command .gis-command-icon {
    width: 1.35rem;
    height: 1.35rem;
  }

  .gis-mobile-command strong {
    width: 100%;
    overflow: hidden;
    font-size: 0.63rem;
    text-align: center;
    text-overflow: ellipsis;
    white-space: nowrap;
  }

  .gis-map-control-stack .gis-icon-button {
    min-width: 2.75rem;
    min-height: 2.75rem;
    box-sizing: border-box;
  }

  .gis-basemap-runtime-alert {
    right: 0.5rem;
    bottom: calc(4.75rem + env(safe-area-inset-bottom));
    left: 0.5rem;
    width: auto;
    max-height: calc(100% - 9rem - env(safe-area-inset-bottom));
    overflow: auto;
    padding: 0.65rem;
  }

  .gis-map-chrome:has(.gis-map-authoring-guide) .gis-basemap-runtime-alert {
    top: 0.5rem;
    right: 4.75rem;
    bottom: auto;
  }

  .gis-basemap-runtime-actions .gis-button {
    min-height: 2.75rem;
  }

  .gis-map-authoring-guide {
    right: 5.75rem;
    bottom: calc(4.75rem + env(safe-area-inset-bottom));
    left: 0.5rem;
    width: auto;
    max-width: none;
    transform: none;
  }

  .gis-map-authoring-actions .gis-button {
    min-height: 2.75rem;
    box-sizing: border-box;
  }

  .gis-temporary-coordinate-fields {
    grid-template-columns: minmax(0, 1fr);
  }

  .gis-temporary-coordinate-fields > .gis-button {
    grid-column: auto;
  }

  .gis-statusbar {
    min-width: 0;
    overflow-x: auto;
    scrollbar-width: none;
  }
}

/* Service discovery can contain long URLs and field lists. Keep every grid
   track within the inspector instead of allowing min-content width to expand
   the panel beyond its map column. */
.gis-panel-body,
.gis-panel-body > *,
.gis-form-grid,
.gis-source-discovery,
.gis-source-discovery > * {
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}

@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .gis-panel-right .gis-button,
  .gis-panel-right .gis-icon-button,
  .gis-panel-right .gis-field input,
  .gis-panel-right .gis-field select,
  .gis-panel-right .gis-field textarea,
  .gis-panel-right .gis-source-manual-registration > summary,
  .gis-panel-right .gis-check {
    min-height: 2.75rem;
    box-sizing: border-box;
  }
}

@media print {
  @page {
    margin: 0;
  }

  body {
    background: #fff;
  }

  body > header,
  body > aside,
  nav,
  footer,
  .observablehq-header,
  .observablehq-sidebar,
  .observablehq-toc,
  .print-studio-controls,
  .summary-grid,
  main.observablehq > h1,
  main.observablehq > h2,
  main.observablehq > p,
  main.observablehq > table,
  .basemap-capture .print-button {
    display: none !important;
  }

  main.observablehq {
    margin: 0 !important;
    max-width: none !important;
    padding: 0 !important;
  }

  .print-stage {
    overflow: visible;
    padding: 0;
    border: 0;
    background: #fff;
  }

  .layout-canvas {
    box-shadow: none;
  }
}
/* Direct image-overlay controls stay on the map; transparent areas do not
   capture map gestures. Handles retain touch-sized hit targets. */
.gis-image-overlay-editor { position: absolute; inset: 0; z-index: 6; pointer-events: none; overflow: hidden; }
.gis-image-overlay-outline { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.gis-image-overlay-outline polygon { fill: none; stroke: #4f88ff; stroke-width: 2; stroke-dasharray: 5 3; }
.gis-image-overlay-tools { position: absolute; top: 8px; left: 8px; max-width: calc(100% - 96px); display: flex; flex-wrap: wrap; align-items: center; gap: 4px 10px; padding: 6px 8px; background: var(--theme-background, #fff); color: var(--theme-foreground, #222); border: 1px solid #4f88ff; border-radius: 6px; pointer-events: auto; z-index: 2; font: 13px system-ui; }
.gis-image-overlay-tools label { display: flex; align-items: center; gap: 5px; }
.gis-image-overlay-tools input[type="range"] { width: 90px; min-height: 32px; }
.gis-image-overlay-tools button { min-height: 36px; }
.gis-image-overlay-help { flex-basis: 100%; font-size: 11px; }
.gis-image-overlay-handle { position: absolute; transform: translate(-50%, -50%); width: 44px; height: 44px; padding: 0; border: 0; background: transparent; pointer-events: auto; touch-action: none; cursor: move; color: #164ba7; font: bold 24px system-ui; }
.gis-image-overlay-handle::before { content: ""; position: absolute; inset: 16px; background: #fff; border: 2px solid #164ba7; border-radius: 2px; z-index: -1; }
.gis-image-overlay-handle.handle-move::before, .gis-image-overlay-handle.handle-rotate::before { inset: 6px; border-radius: 50%; }
.gis-image-overlay-handle:focus-visible { outline: 3px solid #4f88ff; border-radius: 4px; }
.gis-image-overlay-handle.handle-nw, .gis-image-overlay-handle.handle-se { cursor: nwse-resize; }
.gis-image-overlay-handle.handle-ne, .gis-image-overlay-handle.handle-sw { cursor: nesw-resize; }
.gis-image-overlay-handle.handle-n, .gis-image-overlay-handle.handle-s { cursor: ns-resize; }
.gis-image-overlay-handle.handle-e, .gis-image-overlay-handle.handle-w { cursor: ew-resize; }
@media (pointer: coarse) { .gis-image-overlay-tools button, .gis-image-overlay-tools label { min-height: 44px; } }

.resource-style-version-editor { min-width: 0; max-width: 100%; margin-block: 0.5rem; overflow-wrap: anywhere; }
.resource-style-version-editor > summary { cursor: pointer; padding-block: 0.5rem; }
.resource-style-version-editor > label { display: grid; gap: 0.3rem; margin-block: 0.65rem; }
.resource-style-version-editor input, .resource-style-version-editor textarea { box-sizing: border-box; min-width: 0; width: 100%; padding: 0.48rem 0.55rem; border: 1px solid var(--opengeo-line, #888); border-radius: 6px; background: var(--theme-background, #fff); color: var(--theme-foreground, #222); }
.resource-style-version-editor textarea { resize: vertical; font-family: ui-monospace, monospace; }
.resource-style-version-editor pre { max-height: 24rem; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; }
.resource-style-version-actions { display: flex; flex-wrap: wrap; gap: 0.4rem; }
@media (pointer: coarse) {
  .resource-style-version-actions button, .resource-style-version-editor > summary { min-height: 44px; }
}

.gis-panel-resizers { position: absolute; inset: 0; pointer-events: none; z-index: 47; }
.gis-panel-resize-grip { position: absolute; pointer-events: auto; touch-action: none; cursor: col-resize; }
.gis-panel-resize-grip:hover, .gis-panel-resize-grip:focus-visible { background: color-mix(in srgb, var(--gis-blue) 35%, transparent); outline: 2px solid var(--gis-blue); }
.gis-panel-resize-grip[data-compact="true"] { cursor: row-resize; }
.gis-panel-resize-grip[data-compact="true"]::after { content: ""; position: absolute; top: 4px; left: calc(50% - 22px); width: 44px; height: 4px; border-radius: 2px; background: var(--gis-muted); }
.gis-panel-reopen { position: absolute; pointer-events: auto; min-height: 36px; background: var(--gis-panel-bg); color: var(--gis-ink); border: 1px solid var(--gis-line); border-radius: 5px; padding: 4px 10px; }
.gis-shape-midpoint::before { inset: 8px; border-radius: 50%; }
@media (min-width: 821px) and (min-height: 501px), (min-width: 1001px) {
  .opengeo-workbench .gis-panel-left { grid-column: 1; grid-row: 2; }
  .opengeo-workbench .gis-map-column { grid-column: 2; grid-row: 2; }
  .opengeo-workbench .gis-panel-right { grid-column: 3; grid-row: 2; }
  .opengeo-workbench { grid-template-columns: var(--gis-left-width, 320px) minmax(0, 1fr) var(--gis-right-width, 352px); }
  .opengeo-workbench.left-collapsed { grid-template-columns: 0 minmax(0, 1fr) var(--gis-right-width, 352px); }
  .opengeo-workbench.right-collapsed { grid-template-columns: var(--gis-left-width, 320px) minmax(0, 1fr) 0; }
  .opengeo-workbench.left-collapsed.right-collapsed { grid-template-columns: 0 minmax(0, 1fr) 0; }
}
@media (min-width: 821px) and (max-width: 1120px) and (min-height: 501px), (min-width: 1001px) and (max-width: 1120px) {
  .opengeo-workbench, .opengeo-workbench.right-collapsed { grid-template-columns: var(--gis-left-width, 320px) minmax(0, 1fr); }
  .opengeo-workbench.left-collapsed, .opengeo-workbench.left-collapsed.right-collapsed { grid-template-columns: 0 minmax(0, 1fr); }
  .opengeo-workbench .gis-panel-right { width: var(--gis-right-width, 352px); top: var(--gis-map-top, 2.75rem); }
}
@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .opengeo-workbench .gis-panel-left { height: var(--gis-left-height, 58dvh); }
  .opengeo-workbench .gis-panel-right { height: var(--gis-right-height, 58dvh); }
  .gis-panel-header { padding-top: 14px; }
}

/* Compact desktop chrome; map tools keep their existing touch layout. */
.gis-account-controls { position: relative; display: flex; align-items: center; gap: 0.4rem; flex-shrink: 0; }
.gis-account-navigation-error { position: absolute; top: 100%; right: 0; z-index: 100; width: min(22rem, calc(100vw - 2rem)); box-sizing: border-box; margin: 0.4rem 0 0; padding: 0.75rem; border: 1px solid var(--gis-line); border-radius: 6px; background: var(--gis-panel-bg); color: var(--gis-ink); white-space: normal; overflow-wrap: anywhere; font: 13px/1.5 system-ui, sans-serif; }
.gis-account-identity { max-width: 8rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.75rem; }
.gis-account-dialog { width: min(28rem, calc(100vw - 3rem)); max-height: calc(100dvh - 3rem); overflow-y: auto; white-space: normal; overflow-wrap: anywhere; box-sizing: border-box; padding: 1.25rem; border: 1px solid var(--gis-line); border-radius: 8px; background: var(--gis-panel-bg); color: var(--gis-ink); font: 14px/1.5 system-ui, sans-serif; }
.gis-account-dialog::backdrop { background: rgb(0 0 0 / 45%); }
.gis-account-dialog h2 { margin: 0; font: 600 1.15rem/1.4 system-ui, sans-serif; }
.gis-account-dialog-actions { display: flex; flex-wrap: wrap; justify-content: end; gap: 0.5rem; }
.gis-account-dialog-actions button { min-height: 44px; max-width: 100%; white-space: normal; overflow-wrap: anywhere; padding: 0.5rem 0.75rem; border: 1px solid var(--gis-line); border-radius: 5px; background: var(--gis-elevated); color: var(--gis-ink); font: inherit; cursor: pointer; }
.gis-account-dialog button:focus-visible { outline: 2px solid var(--gis-blue); outline-offset: 2px; }
.start-welcome-preference { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; margin-top: 1rem; }
.start-welcome-preference select { max-width: 100%; min-width: 0; padding: 0.5rem; color: inherit; background: var(--theme-background); border: 1px solid var(--opengeo-line); border-radius: 5px; }
.instance-catalog nav { display: flex; flex-wrap: wrap; gap: 0.75rem; }
.instance-catalog-results { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr)); gap: 0.75rem; }
.instance-catalog-results article { min-width: 0; padding: 0.75rem; border: 1px solid var(--opengeo-line); border-radius: 6px; overflow-wrap: anywhere; }
.instance-catalog-results article > a { display: block; }
@media (min-width: 821px) and (min-height: 501px), (min-width: 1001px) {
  .gis-topbar { gap: 4px 8px; padding: 5px 8px; grid-template-columns: auto minmax(0, 1fr) auto; }
  .gis-brand strong { font-size: 13px; }
  .gis-brand span { display: none; }
  .gis-topbar .gis-button, .gis-topbar .gis-workspace-select { font-size: 13px; min-height: 30px; padding: 4px 7px; }
  .gis-topbar .gis-app-nav > a { font-size: 13px; min-height: 30px; padding: 4px 7px; box-sizing: border-box; }
  .gis-topbar button, .gis-topbar select, .gis-topbar .gis-app-nav > a { line-height: 20px; }
  .gis-topbar .gis-account-dialog button { min-height: 44px; }
  .gis-topbar .gis-workspace-select { max-width: 220px; }
  .gis-toolstrip { gap: 3px 6px; padding-top: 4px; }
  .gis-primary-toolbar { gap: 3px; flex-wrap: nowrap; }
  .gis-primary-command { min-height: 30px; padding: 3px 7px; font-size: 12px; gap: 4px; }
  .gis-primary-command > strong { font-size: inherit; line-height: inherit; }
  .gis-primary-command { box-sizing: border-box; }
  .gis-primary-command-group { border-radius: 4px; }
  .gis-toolstrip > .gis-menubar { gap: 1px; }
  .gis-menubar > .gis-menu-wrap > .gis-button { padding: 3px 8px; min-height: 28px; font-size: 13px; }
  .gis-menubar > .gis-menu-wrap { line-height: 1; }
  .gis-panel-header { padding-block: 6px; font-size: 13px; }
  .gis-layer-row { font-size: 13px; }
}
@media (max-width: 1250px) {
  .gis-account-identity { display: none; }
}
@media (min-width: 821px) and (max-width: 1300px) and (min-height: 501px) {
  .opengeo-workbench .gis-menubar > .gis-menu-wrap:is(
    [data-menu="add"], [data-menu="processing"], [data-menu="controls"],
    [data-menu="plugins"], [data-menu="settings"], [data-menu="help"]
  ) { display: none; }
  .opengeo-workbench .gis-menubar > .gis-menu-wrap[data-menu="more"] { display: block; }
}
@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .gis-account-command { min-height: 44px; padding-inline: 8px; font-size: 13px; }
}

/* Keep routine map facts readable; secondary diagnostics open on demand. */
.observablehq--block:has(.opengeo-workbench) { margin: 0; }
.platform-workspace:has(> .opengeo-workbench) { display: flex; flex-direction: column; box-sizing: border-box; height: 100dvh; min-height: 0; overflow: hidden; }
.platform-workspace > .opengeo-workbench { flex: 1 1 0; box-sizing: border-box; height: auto; min-height: 0; margin: 0; }
.platform-workspace:has(> .opengeo-workbench) > .platform-project-sections { flex: 0 0 auto; }
.platform-workspace:has(> .opengeo-workbench) > .platform-mode { display: none; }
.gis-primary-toolbar[hidden] { display: none; }
.gis-toolstrip .gis-quick-tools-toggle { align-self: flex-start; font: 12px/1.4 system-ui; padding: 3px 8px; }
.opengeo-workbench .gis-statusbar { position: relative; z-index: 48; box-sizing: border-box; overflow: visible; gap: 10px; min-height: 28px; max-height: 28px; padding: 3px 8px; background: var(--gis-panel-bg); color: var(--gis-ink); font: 11px/1.5 system-ui; }
.gis-statusbar > [data-status-field="coords"],
.gis-statusbar > [data-status-field="zoom"],
.gis-statusbar > [data-status-field="bearing"],
.gis-statusbar > [data-status-field="pitch"] { font-variant-numeric: tabular-nums; }
.gis-statusbar > [data-status-field="coords"] { max-width: 26ch; overflow: hidden; text-overflow: ellipsis; }
.gis-statusbar > [data-status-field="message"] { flex: 1 1 0; min-width: 0; overflow: hidden; text-overflow: ellipsis; font-weight: 400; }
.gis-statusbar > .gis-loading-disclosure { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.gis-status-details { flex: 0 0 auto; margin-left: auto; }
.gis-status-details > summary { cursor: pointer; padding: 2px 4px; }
.gis-status-details-panel { position: absolute; z-index: 20; bottom: calc(100% + 4px); right: 4px; display: grid; gap: 8px; width: min(360px, calc(100vw - 24px)); box-sizing: border-box; padding: 12px; border: 1px solid var(--gis-line); border-radius: 8px; background: var(--gis-panel-bg); color: var(--gis-ink); box-shadow: 0 4px 18px #0004; white-space: normal; }
.gis-status-details-panel span { white-space: normal; overflow-wrap: anywhere; }
.gis-status-details-panel .gis-globe-metrics { display: block; }
@media (max-width: 1100px) {
  .gis-statusbar > [data-status-field="bearing"], .gis-statusbar > [data-status-field="pitch"] { display: none; }
}
@media (max-width: 820px) {
  .gis-statusbar > [data-status-field="layers"], .gis-statusbar > [data-status-field="message"] { display: none; }
  .gis-statusbar > .gis-loading-disclosure[data-failed="0"][data-pending="0"] { display: none; }
  .gis-statusbar > [data-status-field="coords"] { flex-shrink: 1; }
  .gis-status-details > summary { min-height: 38px; display: flex; align-items: center; }
  .opengeo-workbench .gis-statusbar { min-height: 44px; max-height: 44px; }
}
.platform-directory-loading { max-width: 44rem; }
.platform-directory-loading ol { display: flex; flex-wrap: wrap; gap: .5rem; list-style: none; margin: .75rem 0; padding: 0; }
.platform-directory-loading li { border: 1px solid var(--theme-foreground-faintest); border-radius: .35rem; padding: .4rem .65rem; font-size: .85rem; }
.platform-directory-loading li[data-state="complete"] { border-color: var(--theme-foreground-focus); }
.platform-directory-loading li[data-state="loading"] { background: var(--theme-background-alt); font-weight: 600; }
.platform-directory-loading p { white-space: normal; overflow-wrap: anywhere; }
.source-details { min-width: 0; }
.source-details pre { white-space: pre-wrap; overflow-wrap: anywhere; max-height: 24rem; overflow: auto; }
.source-details dd { min-width: 0; overflow-wrap: anywhere; }
.source-details .platform-actions { display: flex; flex-wrap: wrap; gap: .5rem; }
.publication-workspace-directory {margin-block: .75rem; min-width: 0; font: 13px/1.35 var(--sans-serif, system-ui, sans-serif);}
.publication-workspace-directory [hidden] {display: none !important;}
.publication-workspace-directory > input {width: min(100%, 32rem); margin-block: .5rem;}
.publication-workspace-directory td {vertical-align: top; padding: .4rem .55rem;}
.publication-workspace-directory td small {display: block; color: var(--theme-foreground-muted); margin-top: .15rem; max-width: 30rem; font-size: .75rem;}
.publication-workspace-directory td:last-child {min-width: 10rem;}
.publication-workspace-directory td:last-child a {display: inline-block; margin: 0 .4rem .15rem 0;}
.publication-directory-controls {display: flex; align-items: center; flex-wrap: wrap; gap: .5rem 1rem;}
.publication-search-filter {display: flex; gap: .4rem; align-items: center; flex: 1 1 18rem;}
.publication-search-filter input {min-width: 0; flex: 1; min-height: 32px; font: inherit;}
.publication-directory-controls .publication-testing-filter {display: inline-flex; flex-wrap: nowrap; gap: .35rem; align-items: center;}
.publication-directory-controls input[type="checkbox"] {width: 1rem; height: 1rem; min-height: 0; margin: 0; padding: 0; flex: 0 0 auto; accent-color: var(--theme-foreground-focus);}
.publication-workspace-scroll {max-height: 65dvh; overflow: auto; border: 1px solid var(--theme-foreground-faintest); border-radius: 4px;}
.publication-workspace-scroll:focus-visible {outline: 2px solid var(--theme-foreground-focus); outline-offset: 2px;}
.publication-workspace-table {width: 100%; min-width: 38rem; margin: 0; font: inherit; table-layout: fixed;}
.publication-workspace-table caption {text-align: left; padding: .4rem .55rem; color: var(--theme-foreground-muted); font-size: .75rem;}
.publication-workspace-table th {position: sticky; top: 0; z-index: 1; background: var(--theme-background-alt); padding: .4rem .55rem;}
.publication-workspace-table th:first-child {width: 34%;}
.publication-workspace-table th:nth-child(2) {width: 38%;}
.publication-workspace-table td {overflow-wrap: anywhere;}
.publication-workspace-table strong {font-size: .85rem;}
.publication-endpoint-link, .publication-source-link {font: inherit;}
.publication-endpoint + .publication-endpoint {margin-top: .3rem;}
.publication-source-details {margin-top: .2rem; font-size: .75rem;}
.publication-source-details p {margin: .3rem 0;}
@media (max-width: 600px) {
  .publication-search-filter input {font-size: 16px; min-height: 44px;}
  .publication-testing-filter {min-height: 44px;}
  .publication-workspace-scroll {max-height: 70dvh;}
}
.layer-catalog-directory {min-width:0;font-size:.85rem;}
.catalog-directory-tools {display:flex;gap:.75rem;align-items:center;flex-wrap:wrap;margin:.5rem 0;}
.catalog-directory-tools small {color:var(--theme-foreground-muted);}
.catalog-dataset-group {border:1px solid var(--theme-foreground-faintest);margin:.6rem 0;border-radius:4px;}
.catalog-dataset-group > summary {padding:.65rem;cursor:pointer;background:var(--theme-background-alt);overflow-wrap:anywhere;}
.catalog-dataset-group > summary span {font-size:.75rem;margin-left:.7rem;color:var(--theme-foreground-muted);}
.catalog-dataset-group > summary small {display:block;margin:.2rem 0 0 1rem;color:var(--theme-foreground-muted);}
.catalog-source-group {margin:.75rem 0;border-left:2px solid var(--theme-foreground-faintest);padding-left:.5rem;}
.catalog-source-group > summary {padding:.5rem;cursor:pointer;overflow-wrap:anywhere;}
.catalog-source-group > summary span {margin-left:.6rem;font-size:.75rem;color:var(--theme-foreground-muted);}
.catalog-source-group > summary small {display:block;margin:.2rem 0 0 1rem;color:var(--theme-foreground-muted);font-size:.75rem;}
.catalog-source-group > .catalog-dataset-group {margin-left:.5rem;}
.catalog-directory-tools select {font:inherit;max-width:100%;color:var(--theme-foreground);background:var(--theme-background);border:1px solid var(--theme-foreground-faintest);border-radius:3px;padding:.3rem .5rem;}
.catalog-directory-scroll {overflow-x:auto;}
.catalog-layer-table {width:100%;max-width:none;table-layout:fixed;margin:0;border-collapse:collapse;min-width:38rem;}
.catalog-layer-table th, .catalog-layer-table td {padding:.5rem .65rem;text-align:left;border-bottom:1px solid var(--theme-foreground-faintest);vertical-align:middle;overflow-wrap:anywhere;}
.catalog-layer-table th {font-size:.75rem;font-weight:500;color:var(--theme-foreground-muted);}
.catalog-layer-table th:first-child {width:42%;}
.catalog-layer-table th:nth-child(2) {width:25%;}
.catalog-layer-table th:last-child {width:12%;}
.layer-catalog-entry:hover {background:var(--theme-background-alt);}
.catalog-layer-toggle {display:flex;gap:.45rem;align-items:baseline;width:100%;border:0;background:transparent;color:var(--theme-foreground-focus);font:inherit;text-align:left;cursor:pointer;padding:0;}
.catalog-layer-toggle::before {content:"▸";color:var(--theme-foreground-muted);}
.catalog-layer-toggle[aria-expanded="true"]::before {content:"▾";}
.layer-catalog-entry .platform-catalog-open-map {margin-top:.35rem;}
.catalog-layer-detail {background:var(--theme-background-alt);}
.catalog-layer-detail[hidden] {display:none;}
.catalog-layer-detail p {margin:.3rem 0 .7rem;max-width:80ch;}
.platform-catalog-resource-row .platform-catalog-open-map {display:inline-block;margin-top:.3rem;}
.platform-catalog-map-row td {padding:.5rem 1rem 1rem;}
.platform-catalog-map-container[hidden] {display:none;}
.platform-catalog-map-container .map-frame {width:100%;min-width:0;}
.layer-catalog-ramp {display:flex;max-width:7rem;height:.3rem;margin:.3rem 0 0;border:1px solid var(--theme-foreground-faintest);}
.layer-catalog-ramp span {flex:1;}
.layer-catalog-actions {display:flex;gap:.5rem;flex-wrap:wrap;}
.catalog-directory-tools button, .layer-catalog-actions button {font:inherit;color:var(--theme-foreground);background:var(--theme-background);border:1px solid var(--theme-foreground-faintest);border-radius:3px;padding:.3rem .5rem;cursor:pointer;}
.layer-catalog-actions {align-items:center;gap:1rem;}
.studio-navigation.platform-route-bar {display:flex;align-items:center;flex-wrap:wrap;gap:.25rem;padding:.35rem .5rem;border:1px solid var(--theme-foreground-faintest);border-radius:4px;background:var(--theme-background);font:13px/1.4 ui-sans-serif,system-ui,sans-serif;}
.studio-navigation a {min-height:1.6rem;padding:.2rem .5rem;text-decoration:none;color:var(--theme-foreground);border:1px solid transparent;border-radius:4px;white-space:nowrap;}
.studio-navigation a:hover {background:var(--theme-background-alt);}
.studio-navigation a[aria-current="page"] {border-color:var(--theme-foreground-focus);background:var(--theme-background-alt);}
.studio-navigation-brand {font-weight:650;margin-right:.25rem;}
.studio-navigation-brand::before {content:"";display:inline-block;width:1rem;height:1rem;border:2px solid currentColor;border-radius:2px;vertical-align:middle;margin-right:.5rem;}
@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .studio-navigation.platform-route-bar {flex-wrap:nowrap;max-width:100%;min-width:0;box-sizing:border-box;overflow-x:auto;gap:.15rem;}
  .studio-navigation a {display:flex;flex:0 0 auto;align-items:center;min-height:44px;box-sizing:border-box;padding:.3rem .5rem;}
  .studio-navigation a:focus-visible {outline:2px solid var(--theme-foreground-focus);outline-offset:-2px;}
}
.platform-directory > .studio-navigation {order:-3;position:sticky;top:0;z-index:20;}
#observablehq-center:has(.platform-directory) #observablehq-main {width:calc(100% - 2rem);padding:1rem 0 !important;}
.platform-directory .platform-heading h1 {font-size:1.8rem;}
.platform-directory .platform-subtitle {font-size:.9rem;}
.platform-directory .platform-mode {font-size:.7rem;margin:0;}
.platform-directory:has(.platform-heading) > .platform-mode {display:none;}
.platform-directory {grid-template-columns:minmax(0,1fr);gap:.75rem;}
.platform-directory .platform-heading p {margin:.25rem 0;}
.platform-directory .platform-resource-navigation {display:flex;flex-wrap:wrap;border-radius:4px;}
.platform-directory .platform-resource-navigation-item {min-height:0;padding:.4rem .65rem;font-size:.85rem;}
.platform-directory .platform-resource-navigation-item small {display:none;}
.platform-directory .platform-catalog-search {grid-template-columns:minmax(0,1fr);min-width:0;margin:.25rem 0;padding:.75rem;border-radius:4px;}
.platform-directory .platform-catalog-search > .platform-eyebrow {display:none;}
.platform-directory .platform-catalog-controls {grid-template-columns:repeat(auto-fit,minmax(min(100%,12rem),1fr));}
.platform-directory .platform-catalog-controls > * {min-width:0;max-width:100%;}
.catalog-directory-filters {grid-column:1 / -1;font-size:.8rem;}
.catalog-directory-filters > summary {cursor:pointer;color:var(--theme-foreground-muted);}
.catalog-directory-filters > .platform-controls {display:flex;flex-wrap:wrap;padding:.5rem 0;border:0;}
.catalog-directory-filters select {min-width:0;max-width:100%;flex:1 1 12rem;}
.platform-directory .platform-catalog-search h2 {font-size:1.15rem;}
.platform-catalog-search > div:has(> .platform-catalog-table) {min-width:0;overflow-x:auto;}
.platform-catalog-table {width:100%;max-width:none;min-width:52rem;table-layout:fixed;}
.platform-catalog-table th:first-child {width:25%;}
.platform-catalog-table th:nth-child(2) {width:16%;}
.platform-catalog-table th:nth-child(3) {width:7%;}
.platform-catalog-table th:nth-child(4) {width:22%;}
.platform-catalog-table th,.platform-catalog-table td {vertical-align:top;overflow-wrap:anywhere;padding:.55rem .65rem;}
.catalog-preservation-status {display:grid;gap:.35rem;align-content:start;}
.catalog-preservation-status small {font-size:.75rem;line-height:1.35;color:var(--theme-foreground-muted);}
.catalog-preservation-status .platform-badge {width:fit-content;white-space:normal;}
.layer-archive-inventory {display:grid;gap:.75rem;scroll-margin-top:1rem;}
.layer-archive-inventory > h2 {margin-bottom:0;}
.platform-directory .platform-project-list {max-width:none;width:100%;gap:0;border:1px solid var(--theme-foreground-faintest);border-radius:4px;overflow:hidden;}
.platform-directory .platform-project-list > li {max-width:none;margin:0;padding:0;}
.platform-directory a.platform-project-row {grid-template-columns:minmax(0,1fr) minmax(19rem,.65fr) auto;min-height:0;padding:.65rem .75rem;border:0;border-bottom:1px solid var(--theme-foreground-faintest);border-radius:0;font-size:.85rem;text-decoration:none;gap:1rem;}
.platform-directory .platform-project-row-title {display:flex;flex-wrap:wrap;}
.platform-directory .platform-project-row .platform-record-description {display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.8rem;color:var(--theme-foreground-muted);}
.platform-directory .platform-project-row-metadata {grid-column:auto;grid-row:auto;}
.platform-directory .platform-project-row-open {grid-column:auto;grid-row:auto;min-height:1.75rem;min-width:2.5rem;width:auto;border:0;font-size:.8rem;}
@media(max-width:760px) {
  .platform-directory a.platform-project-row {grid-template-columns:minmax(0,1fr) auto;gap:.4rem;}
  .platform-directory .platform-project-row-metadata {grid-column:1;grid-row:2;grid-template-columns:repeat(4,minmax(0,1fr));}
  .platform-directory .platform-project-row-open {grid-column:2;grid-row:1 / span 2;}
}
.catalog-layer-preview {margin-block: 1rem; padding-block: 0.8rem; border-block: 1px solid var(--theme-foreground-faintest);}
.catalog-layer-preview img {display: block; width: 100%; height: auto; object-fit: contain; background: var(--theme-background-alt);}
.catalog-layer-preview .map-frame {width: 100%; min-width: 0;}
.catalog-layer-preview p {font-size: 0.875rem; color: var(--theme-foreground-muted);}
.catalog-layer-access {display: flex; flex-wrap: wrap; gap: 0.6rem;}
.catalog-layer-access h4, .catalog-layer-access p {flex-basis: 100%; margin-block: 0.3rem;}
.layer-catalog-entry:has(.catalog-layer-preview) {grid-column: 1 / -1;}
.static-map-export-dialog {
  width: min(640px, calc(100vw - 40px));
  max-height: 85dvh;
  overflow: auto;
  padding: 1.25rem;
  color: var(--theme-foreground);
  background: var(--theme-background);
  border: 1px solid var(--theme-foreground-faintest);
  border-radius: 6px;
  font: 14px/1.5 system-ui, sans-serif;
}
.static-map-export-dialog::backdrop {background: #0008;}
.static-map-export-dialog label {display: block; margin: .7rem 0;}
.static-map-export-dialog fieldset {margin: 1rem 0; max-height: 35dvh; overflow: auto;}
.static-map-export-dialog button {margin-right: .5rem;}
.publication-map-picker {box-sizing: border-box; width: min(760px, 96vw); max-width: 96vw; max-height: 94dvh; overflow: auto; background: var(--theme-background); color: var(--theme-foreground); border: 1px solid var(--theme-foreground-faintest); padding: .75rem; font: 14px/1.4 var(--sans-serif, system-ui, sans-serif);}
.publication-map-picker.is-previewing {width: min(1400px, 96vw);}
.publication-map-picker [hidden] {display: none !important;}
.publication-map-picker h2 {font: 600 1.15rem/1.3 var(--sans-serif, system-ui, sans-serif); margin: 0 0 .4rem;}
.publication-map-picker p {margin: .4rem 0 .65rem; font: inherit;}
.publication-map-picker::backdrop {background: #0009;}
.publication-map-picker-controls {display: flex; gap: .5rem; flex-wrap: wrap; align-items: flex-end; position: sticky; top: -.75rem; z-index: 2; padding-block: .4rem; background: var(--theme-background);}
.publication-map-picker-field {display: grid; gap: .2rem; flex: 1 1 13rem; min-width: 0; font-size: .8rem;}
.publication-map-picker-controls select {width: 100%; min-width: 0; min-height: 32px; padding: .35rem; font: inherit; color: var(--theme-foreground); background: var(--theme-background-alt); border: 1px solid var(--theme-foreground-faintest); border-radius: 4px;}
.publication-map-picker-controls .platform-button {min-height: 32px; font: inherit; padding: .35rem .6rem;}
.publication-map-picker-view .opengeo-workbench {height: 65dvh; min-height: 400px;}
.publication-map-picker-view .gis-topbar {display: none;}
.style-library {font-family: var(--sans-serif, system-ui, sans-serif);}
.style-library > p, .style-presets p {margin-block: .4rem; max-width: 70rem;}
.style-library .style-presets {margin-block: .75rem;}
.style-presets h2 {font-size: 1rem; margin-block: .5rem;}
.style-preset-grid {display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 9rem), 1fr)); gap: .5rem;}
.style-preset-card {display: grid; gap: .25rem; min-width: 0; text-align: left; padding: .5rem; border: 1px solid var(--theme-foreground-faintest); border-radius: 4px; background: var(--theme-background-alt); color: var(--theme-foreground); font: inherit; cursor: pointer;}
.style-library .style-preset-card img, .style-library .style-preset-card svg {width: 100%; height: 48px; object-fit: cover;}
.style-preset-card strong {font-size: .9rem;}
.style-preset-card span {font-size: .75rem; color: var(--theme-foreground-muted);}
.style-preset-card[aria-pressed="true"] {border-color: var(--theme-foreground-focus); box-shadow: inset 0 0 0 1px var(--theme-foreground-focus);}
.style-preset-card:focus-visible {outline: 2px solid var(--theme-foreground-focus); outline-offset: 2px;}
.style-library .style-designer {display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; margin-block: 1rem;}
.style-designer h2 {flex-basis: 100%; font-size: 1rem; margin: .25rem 0;}
.style-designer label {display: flex; gap: .35rem; align-items: center; min-width: 0; font-size: .85rem;}
.style-designer input:not([type="color"]):not([type="checkbox"]), .style-designer select {min-height: 32px; max-width: 100%; font: inherit;}
.style-library input:not([type="range"]):not([type="checkbox"]), .style-library select {box-sizing: border-box; color: var(--theme-foreground); background: var(--theme-background-alt); border: 1px solid var(--theme-foreground-faintest); border-radius: 4px; padding: .3rem .4rem;}
.style-library > select {width: 100%; min-height: 32px; margin-block: .2rem; font: inherit;}
.style-library button:not(.style-preset-card) {min-height: 32px; color: var(--theme-foreground); background: var(--theme-background-alt); border: 1px solid var(--theme-foreground-faintest); border-radius: 4px; padding: .3rem .55rem; font: inherit;}
.style-library button:disabled {opacity: .55;}
.style-library [hidden] {display: none !important;}
.style-library > h2 {font-size: 1rem; margin-block: .5rem;}
.gis-style-swatch-slot {display: inline-flex; align-items: center; justify-content: center; min-width: 0;}
.opengeo-workbench .gis-style-swatch-slot > .gis-style-swatch {
  display: grid;
  place-items: center;
  box-sizing: border-box;
  min-width: .95rem;
  max-width: .95rem;
  min-height: .95rem;
  width: .95rem;
  height: .95rem;
  padding: 0;
  cursor: pointer;
  overflow: visible;
}
.gis-style-swatch img {width: 100%; height: 100%; object-fit: contain; pointer-events: none;}
.gis-style-swatch:focus-visible {outline: 2px solid var(--gis-blue); outline-offset: 3px;}
.gis-style-library-link {display: inline-flex; margin-block: .35rem .6rem; color: var(--gis-ink); text-underline-offset: .2em;}
.gis-point-symbol-grid {display: grid; grid-template-columns: repeat(auto-fit, minmax(4.5rem, 1fr)); gap: .4rem; margin-block: .5rem;}
.gis-point-symbol-choice {display: grid; justify-items: center; gap: .25rem; min-width: 0; padding: .4rem; color: var(--gis-ink); background: var(--gis-elevated); border: 1px solid var(--gis-line); border-radius: .3rem; font: inherit; cursor: pointer;}
.gis-point-symbol-choice img {width: 2rem; height: 2rem; object-fit: contain;}
.gis-point-symbol-choice[aria-pressed="true"] {border-color: var(--gis-blue); box-shadow: inset 0 0 0 1px var(--gis-blue);}
.gis-point-symbol-choice:focus-visible {outline: 2px solid var(--gis-blue); outline-offset: 2px;}
.gis-point-category-symbols {display: grid; gap: .4rem;}
.gis-point-category-symbols label {display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: .3rem .6rem; min-width: 0;}
.gis-point-style-batch {margin-block: .7rem; padding-block: .5rem; border-top: 1px solid var(--gis-line);}
.gis-point-style-batch > summary {cursor: pointer; font-weight: 600;}
.gis-point-style-target {display: flex; align-items: start; gap: .4rem; margin-block: .4rem; overflow-wrap: anywhere;}
.gis-point-style-target input[type="checkbox"] {flex: 0 0 auto; width: 1rem; height: 1rem; min-height: 0; margin-top: .15rem;}
.gis-point-style-feedback, .gis-style-readonly {color: var(--gis-muted); overflow-wrap: anywhere;}
.style-point-designer {margin-block: 1rem; padding-block: .7rem; border-block: 1px solid var(--theme-foreground-faintest);}
.style-point-designer h2 {margin-block: .2rem .5rem; font-size: 1rem;}
.style-point-preview {display: block; box-sizing: content-box; width: 3rem; height: 3rem; max-width: 100%; padding: .6rem; object-fit: contain; border: 1px solid var(--theme-foreground-faintest); border-radius: .25rem; background: var(--theme-background-alt);}
.style-point-preview img, .style-point-preview svg {width: 3rem; height: 3rem; object-fit: contain;}
.style-point-controls, .style-point-actions {display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem; margin-block: .6rem;}
.style-point-controls label {display: grid; gap: .25rem; min-width: 0; max-width: 100%;}
.style-point-designer pre {max-height: 16rem; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere;}
.style-designer > div {flex-basis: 100%;}
@media (max-width: 600px) {
  .publication-map-picker-controls .platform-button, .publication-map-picker-controls select {min-height: 44px;}
  .publication-map-picker-controls select {font-size: 16px;}
  .publication-map-picker-field {flex-basis: 100%;}
  .publication-map-picker-view .opengeo-workbench {height: 65dvh; min-height: 280px;}
  .style-designer input:not([type="color"]):not([type="checkbox"]), .style-designer select {min-height: 44px; font-size: 16px;}
  .style-library > select, .style-library button:not(.style-preset-card) {min-height: 44px;}
}

.layer-resource { max-width: 80rem; }
.layer-resource > section { margin-block: 1.5rem; }
.layer-resource-inspection { margin-block: 1rem; }
.layer-resource-archive-preview { padding: .75rem; border: 1px solid var(--theme-foreground-faintest); border-radius: .4rem; background: var(--theme-background-alt); }
.layer-resource-archive-preview .map-frame { width: 100%; min-width: 0; max-height: 65dvh; }
.layer-resource pre { max-height: 32rem; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; }
.layer-resource dd { overflow-wrap: anywhere; }

.layer-resource-page, .layer-resource { font-family: var(--sans-serif, system-ui, sans-serif); }
.layer-resource h4, .layer-resource p { overflow-wrap: anywhere; }
.layer-resource > h1 { font-size: clamp(1.35rem, 2.4vw, 2rem); line-height: 1.2; margin-block: .6rem; }
.layer-resource > p { margin-block: .5rem; }
.layer-resource > .platform-catalog-open-map {margin-block:.65rem;}
.layer-metadata-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr)); gap: .65rem; margin-block: 1rem; }
.layer-metadata-card { min-width: 0; padding: .75rem; border: 1px solid var(--theme-foreground-faintest); border-radius: .4rem; background: var(--theme-background-alt); }
.layer-metadata-card h2 { margin: 0 0 .6rem; font-size: 1rem; line-height: 1.3; }
.layer-metadata-card h3 { font-size: .9rem; }
.layer-metadata-card p { font-size: .85rem; margin-block: .5rem; }
.layer-metadata-wide { grid-column: 1 / -1; }
.layer-metadata-facts { display: grid; grid-template-columns: minmax(6rem, .85fr) minmax(0, 1.15fr); gap: .25rem .6rem; margin: 0; font-size: .8rem; line-height: 1.4; }
.layer-metadata-facts dt { color: var(--theme-foreground-muted); font-weight: 600; }
.layer-metadata-facts dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.layer-resource .layer-metadata-note { font-size: .78rem; color: var(--theme-foreground-muted); line-height: 1.4; }
.layer-metadata-card summary { cursor: pointer; font-weight: 600; font-size: .85rem; }
.layer-schema-scroll { overflow: auto; max-height: 28rem; margin-top: .5rem; }
.layer-schema-scroll table { width: 100%; max-width: none; margin: 0; font-size: .8rem; table-layout: fixed; }
.layer-schema-scroll th, .layer-schema-scroll td { padding: .4rem .5rem; vertical-align: top; overflow-wrap: anywhere; }
.layer-schema-scroll th { position: sticky; top: 0; background: var(--theme-background-alt); }
.layer-schema-scroll small { display: block; color: var(--theme-foreground-muted); }
.layer-schema-scroll pre { max-width: 100%; font-size: .72rem; }
.layer-resource > section { border-top: 1px solid var(--theme-foreground-faintest); padding-top: .75rem; margin-block: 1rem; }
@media (max-width: 520px) { .layer-schema-scroll table { min-width: 32rem; } }
.resource-knowledge > div > section { padding-block: 1rem; border-top: 1px solid var(--opengeo-line); }
.resource-knowledge article { margin-block: 1rem; }
.resource-knowledge label { display: block; margin-block: 1rem; }
.resource-knowledge textarea { display: block; box-sizing: border-box; width: 100%; font-family: var(--monospace, monospace); }
.resource-knowledge label > input, .resource-knowledge label > select { display: block; box-sizing: border-box; width: 100%; max-width: 40rem; margin-top: 0.35rem; }

.collection-gallery,
.collection-member-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 17rem), 1fr));
  gap: 1rem;
  margin-block: 1rem;
}
.collection-card,
.collection-member-card {
  min-width: 0;
  border: 1px solid var(--theme-foreground-faint, #cbd5e1);
  border-radius: .5rem;
  padding: 1rem;
  overflow-wrap: anywhere;
}
.collection-card p { margin-block: .5rem; }
.collection-card-preview {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: .5rem;
  min-height: 7rem;
  align-content: center;
  background: var(--theme-background-alt, #f1f5f9);
  padding: .75rem;
  border-radius: .25rem;
}
.collection-card-preview p { font-size: .85rem; }
.collection-card-title { margin-top: .75rem; font-size: 1.05rem; font-weight: 600; text-align: left; }
.collection-card time { font-size: .85rem; }
.collection-member-grid { padding-left: 1.5rem; }
.collection-member-card a { display: block; margin-bottom: .75rem; }
.collection-member-card button { margin: .25rem; }
.collection-card-preview figure { margin: 0; min-width: 0; }
.collection-card-preview img { display: block; width: 100%; height: auto; object-fit: contain; }
.collection-card-preview figcaption { font-size: .75rem; overflow-wrap: anywhere; }

.map-preview-status { position: absolute; bottom: 1.7rem; left: .5rem; z-index: 2; max-width: calc(100% - 1rem); background: var(--theme-background); padding: .25rem .5rem; font-size: .85rem; pointer-events: none; }
/* Standalone Layer previews have their own controls, outside the workbench. */
.map-frame .maplibregl-ctrl-top-left,
.map-frame .maplibregl-ctrl-bottom-left,
.map-frame .maplibregl-ctrl-bottom-right { position: absolute; z-index: 3; pointer-events: none; }
.map-frame .maplibregl-ctrl-top-left { top: .5rem; left: .5rem; }
.map-frame .maplibregl-ctrl-bottom-left { bottom: .25rem; left: .5rem; }
.map-frame .maplibregl-ctrl-bottom-right { bottom: .25rem; right: .5rem; max-width: 65%; }
.map-frame .maplibregl-ctrl { pointer-events: auto; background: var(--theme-background); }
.map-frame .maplibregl-ctrl-group { display: grid; border: 1px solid var(--opengeo-line); border-radius: .3rem; }
.map-frame .maplibregl-ctrl-group button { width: 2.75rem; height: 2.75rem; font-size: 1.4rem; }
.map-frame .maplibregl-ctrl-zoom-in::after { content: "+"; }
.map-frame .maplibregl-ctrl-zoom-out::after { content: "−"; }
.map-frame .maplibregl-ctrl-attrib { padding: .15rem .4rem; font-size: .7rem; }
.map-frame .maplibregl-ctrl-attrib-button { display: none; }
.map-frame .maplibregl-ctrl-scale { border: 1px solid currentColor; border-top: 0; padding: .1rem .25rem; font-size: .7rem; }
@media (max-width: 640px) {
  .catalog-layer-detail > td { white-space: normal; }
  .catalog-layer-detail > td > p,
  .catalog-layer-detail > td > div,
  .catalog-layer-preview { max-width: calc(100vw - 5rem); white-space: normal; }
}

.catalog-project-save { width: min(34rem, 90vw); color: var(--theme-foreground); background: var(--theme-background); border: 1px solid var(--opengeo-line); }
.catalog-project-save::backdrop { background: #0008; }
.catalog-project-save label:not([hidden]) { display: block; margin: .75rem 0; }
.catalog-project-save input, .catalog-project-save select { max-width: 100%; }

/* Metadata authoring remains reachable beside the fixed-height map workspace. */
.authored-resource-metadata { box-sizing: border-box; min-width: 0; max-width: 100%; }
.authored-resource-metadata > summary { padding: 0.6rem 0.8rem; cursor: pointer; }
.authored-resource-metadata > .resource-knowledge { padding: 0.8rem; min-width: 0; overflow-wrap: anywhere; }
.platform-workspace > .authored-resource-metadata { flex: 0 0 auto; width: 100%; border-bottom: 1px solid var(--opengeo-line); }
.platform-workspace > .authored-resource-metadata[open] {
  flex: 0 1 auto;
  min-height: 0;
  max-height: min(55dvh, max(3rem, calc(100dvh - 20rem)));
  overflow: auto;
}
.platform-workspace > .authored-resource-metadata > .resource-knowledge { max-height: none; overflow: visible; }
.authored-resource-metadata textarea { max-height: 32dvh; }
@media (max-width: 820px), (max-width: 1000px) and (max-height: 500px) {
  .platform-workspace:has(> .authored-resource-metadata) > .opengeo-workbench {
    position: relative;
    inset: auto;
    max-height: none;
  }
}
.collection-member-card figure { margin: .75rem 0; min-width: 0; }
.collection-member-card img { display: block; width: 100%; max-height: 16rem; height: auto; object-fit: contain; }
.collection-member-card figcaption { font-size: .8rem; overflow-wrap: anywhere; }


.gis-layer-archive-control { grid-column: 1 / -1; }
.gis-layer-archive-dialog {
  box-sizing: border-box;
  width: min(30rem, calc(100vw - 2rem));
  max-height: calc(100dvh - 2rem);
  overflow: auto;
  padding: 1.2rem;
  border: 1px solid var(--gis-line, #888);
  border-radius: 10px;
  background: var(--gis-panel-bg, #171717);
  color: var(--gis-ink, #eee);
  font: 0.9rem/1.5 system-ui;
  overflow-wrap: anywhere;
}
.gis-layer-archive-dialog::backdrop { background: rgb(0 0 0 / 55%); }
.gis-layer-archive-dialog > button,
.gis-layer-archive-dialog > select {
  display: block;
  box-sizing: border-box;
  width: 100%;
  min-height: 2.75rem;
  margin-block: 0.5rem;
  white-space: normal;
  font: inherit;
}
.gis-layer-archive-dialog > label { display: block; margin-block: 0.8rem; }

/* Help belongs inside the scrollable controller, never in a clipped popover. */
.opengeo-workbench .gis-map-control-stack {
  max-width: calc(100% - 1.5rem);
  overflow-x: hidden;
}
.opengeo-workbench .gis-map-control-stack:has(.gis-camera-help[open], .gis-map-view-help[open]) {
  width: min(300px, calc(100% - 1.5rem));
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.opengeo-workbench .gis-map-control-stack > .gis-camera-controls {
  min-width: 0;
  grid-column: 1 / -1;
  grid-row: auto;
}
.opengeo-workbench .gis-camera-help p {
  position: static;
  width: auto;
  max-width: 100%;
  box-sizing: border-box;
  overflow-wrap: anywhere;
  box-shadow: none;
}
.opengeo-workbench .gis-map-view-help[open] {
  width: auto;
  min-width: 0;
  justify-self: stretch;
  overflow-wrap: anywhere;
}
/* Visibility actions stay above the map, including in map-only mode. */
.opengeo-workbench .gis-map-column { grid-template-rows: minmax(0, 1fr) auto auto; }
.opengeo-workbench .gis-map-attribution { background: var(--gis-panel-bg); color: var(--gis-ink); font: 11px/1.4 system-ui; }
.opengeo-workbench .gis-map-attribution .maplibregl-ctrl-attrib { float: none; margin: 0; padding: 2px 6px; background: transparent; text-align: right; }
.opengeo-workbench .gis-map-attribution a { color: inherit; }
.opengeo-workbench .gis-map-attribution .maplibregl-ctrl-attrib-button { display: none; }
.opengeo-workbench.gis-map-controls-hidden .gis-map-chrome > .gis-map-control-stack,
.opengeo-workbench.gis-map-controls-hidden .gis-map .maplibregl-control-container,
.opengeo-workbench.gis-map-controls-hidden .gis-panel-reopen { display: none; }
.opengeo-workbench.gis-map-only[class] {
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: auto minmax(0, 1fr);
}
.opengeo-workbench.gis-map-only > .gis-panel-resizers,
.opengeo-workbench.gis-map-only > .gis-panel,
.opengeo-workbench.gis-map-only > .gis-mobile-toolbar,
.opengeo-workbench.gis-map-only .gis-statusbar,
.opengeo-workbench.gis-map-only .gis-topbar > :not(.gis-toolstrip),
.opengeo-workbench.gis-map-only .gis-toolstrip > :not(.gis-menubar),
.opengeo-workbench.gis-map-only .gis-quick-tools-toggle { display: none; }
.opengeo-workbench.gis-map-only > .gis-topbar { grid-row: 1; grid-template-columns: minmax(0, 1fr); }
.opengeo-workbench.gis-map-only .gis-toolstrip { display: flex !important; padding: 0; }
.opengeo-workbench.gis-map-only > .gis-topbar { overflow: visible; }
.opengeo-workbench.gis-map-only > .gis-map-column {
  grid-column: 1 / -1;
  grid-row: 2;
  grid-template-rows: minmax(0, 1fr) auto;
  padding: 0;
}
.opengeo-workbench .gis-menubar > .gis-menu-wrap[data-menu="controls"] { display: block; }
.opengeo-workbench.gis-map-only .gis-menubar { display: flex; }

.opengeo-workbench.gis-map-only .gis-menubar > .gis-menu-wrap[data-menu="controls"] { display: block !important; }
.opengeo-workbench.gis-map-only .gis-menubar > .gis-menu-wrap:not([data-menu="controls"]) { display: none; }

.gis-controls-command { min-width: 2.75rem; min-height: 2.75rem; font-size: 1.25rem; }
.opengeo-workbench.gis-map-only .gis-topbar > .gis-top-actions { display: flex; grid-column: 2; grid-row: 1; }
.opengeo-workbench.gis-map-only .gis-top-actions > :not(.gis-map-only-command) { display: none; }
.opengeo-workbench.gis-map-only > .gis-topbar { grid-template-columns: minmax(0, 1fr) auto; }
.opengeo-workbench.gis-map-only .gis-toolstrip { grid-column: 1; grid-row: 1; }
.gis-map-only-command { min-height: 2.75rem; white-space: nowrap; }
@media (max-width: 820px) {
  .gis-top-actions { gap: 0.2rem; }
  .gis-top-actions .gis-save-command { max-width: 3.8rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .gis-top-actions .gis-controls-command { min-width: 2.75rem; padding-inline: 0.25rem; }
  .gis-top-actions .gis-map-only-command { padding-inline: 0.35rem; font-size: 0.8rem; }
}

.platform-account-navigation { display: flex; flex-wrap: wrap; gap: .5rem; margin-block: .5rem 1rem; }
.platform-account-navigation a[aria-current="page"] { border-color: var(--theme-foreground-focus); }
.platform-account-menu { position: relative; }
.platform-account-menu > summary { cursor: pointer; padding: .55rem .7rem; border: 1px solid var(--theme-foreground-faint); border-radius: .4rem; }
.platform-account-menu[open] > .platform-account-navigation { position: absolute; right: 0; top: 100%; z-index: 30; min-width: 14rem; padding: .6rem; border: 1px solid var(--theme-foreground-faint); border-radius: .4rem; background: var(--theme-background); box-shadow: 0 4px 14px #0003; }
.platform-account-menu .platform-account-navigation > a { flex: 1 1 100%; }
.platform-account-menu-body { position: absolute; right: 0; top: 100%; z-index: 30; box-sizing: border-box; width: min(20rem, calc(100vw - 2rem)); padding: .6rem; border: 1px solid var(--theme-foreground-faint); border-radius: .4rem; background: var(--theme-background); box-shadow: 0 4px 14px #0003; }
.platform-account-work-download > button { width: 100%; margin-top: .4rem; }
.platform-account-download-dialog { box-sizing: border-box; width: min(40rem, calc(100vw - 2rem)); max-height: calc(100dvh - 2rem); overflow: auto; overflow-wrap: anywhere; white-space: normal; padding: 1rem; border: 1px solid var(--theme-foreground-faint); border-radius: 6px; color: var(--theme-foreground); background: var(--theme-background); font: 14px/1.5 system-ui, sans-serif; }
.platform-account-download-dialog::backdrop { background: #0008; }
.platform-account-download-dialog .platform-actions { display: flex; flex-wrap: wrap; gap: .5rem; }
.platform-account-download-dialog [hidden] { display: none; }
/* Keep renderer failures readable without covering the catalog or map chrome. */
.gis-map-startup-error {
  position: absolute;
  inset: 1rem;
  margin: auto;
  width: min(28rem, calc(100% - 2rem));
  height: fit-content;
  max-height: calc(100% - 2rem);
  overflow: auto;
  box-sizing: border-box;
  padding: 1rem;
  border: 1px solid var(--theme-foreground-faint, #777);
  border-radius: .5rem;
  background: var(--theme-background, #202020);
  color: var(--theme-foreground, #eee);
}


/* Shared capture controls remain reachable inside the temporary demo dialog. */
.project-feature-fields > label:has(.project-feature-attachment) { grid-column: 1 / -1; min-width: 0; }
.project-feature-attachment { display: grid; gap: .45rem; min-width: 0; max-width: 100%; font-family: var(--sans-serif, system-ui, sans-serif); }
.project-feature-attachment .project-feature-attachment-actions { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; min-width: 0; }
.project-feature-attachment .platform-button { min-height: 32px; max-width: 100%; padding: .35rem .6rem; font: inherit; font-size: .82rem; line-height: 1.35; white-space: normal; overflow-wrap: anywhere; }
.project-feature-attachment input { box-sizing: border-box; min-width: 0; max-width: 100%; font: inherit; }
.project-feature-attachment-search > input { flex: 1 1 12rem; width: auto; }
.project-feature-attachment input[type="file"] { flex: 1 1 16rem; width: auto; }
.project-feature-attachment-file-options { min-width: 0; border-block-start: 1px solid var(--opengeo-line); padding-block-start: .35rem; }
.project-feature-attachment-file-options > summary { width: fit-content; max-width: 100%; cursor: pointer; padding-block: .35rem; font-size: .85rem; }
.project-feature-attachment-file-options > div { margin-block-start: .4rem; }
.project-feature-attachment [hidden], .project-feature-attachment section:empty { display: none; }
.project-feature-attachment p { margin: 0; font-size: .82rem; overflow-wrap: anywhere; }
.project-feature-attachment section { min-width: 0; max-width: 100%; overflow: auto; }
.project-feature-attachment button:focus-visible, .project-feature-attachment summary:focus-visible { outline: 2px solid var(--opengeo-blue, #1565c0); outline-offset: 2px; }
@media (max-width: 640px), (pointer: coarse) {
  .project-feature-attachment .platform-button, .project-feature-attachment input, .project-feature-attachment summary { min-height: 44px; }
  .project-feature-attachment input { font-size: 1rem; }
}
.public-demo-capture { box-sizing: border-box; padding: 1rem; }
.public-demo-capture-header { display: flex; align-items: center; justify-content: space-between; gap: .75rem; position: sticky; top: -1rem; z-index: 2; margin: -1rem -1rem .5rem; padding: .6rem 1rem; background: var(--theme-background, #1b1b1b); border-bottom: 1px solid var(--theme-foreground-faintest, #444); }
.public-demo-capture-header h2 { margin: 0; font: 600 1rem/1.4 var(--sans-serif, system-ui, sans-serif); }
.public-demo-capture-header button { flex: 0 0 auto; min-height: 44px; font: inherit; }
.public-demo-capture .project-field-observation-form > label { display: grid; gap: .35rem; margin-block: .6rem; }
.public-demo-capture input,
.public-demo-capture textarea { max-width: 100%; box-sizing: border-box; }
.public-demo-capture pre { white-space: pre-wrap; overflow-wrap: anywhere; }
.public-demo-notice > .public-demo-actions { flex-wrap: wrap; }
@media (max-width: 820px) {
  .public-demo-notice > .public-demo-actions { flex-direction: row; align-items: center; }
}
.opengeo-start > [hidden] { display: none !important; }

/* Controller visibility lives at the controller; toolbar visibility lives with tools. */
.gis-controller-heading {
  grid-column: 1 / -1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 4px;
  font: 11px/1.4 system-ui;
}
.opengeo-workbench .gis-controller-heading .gis-controls-close {
  width: 28px;
  min-width: 28px;
  height: 28px;
  min-height: 28px;
  padding: 0;
  font-size: 20px;
}

.opengeo-workbench .gis-toolbar-visibility {
  display: inline-flex;
  flex: 0 0 auto;
  flex-wrap: nowrap;
  align-items: center;
  gap: 4px;
  margin-inline-start: auto;
}
.opengeo-workbench .gis-toolbar-visibility > .gis-controls-command {
  flex-shrink: 0;
  border: 1px solid var(--gis-line);
  border-radius: 4px;
  min-height: 30px;
  min-width: 34px;
}
.opengeo-workbench .gis-toolbar-visibility > .gis-quick-tools-toggle {
  align-self: center;
  min-height: 30px;
  border: 1px solid var(--gis-line);
  border-radius: 4px;
  background: var(--gis-panel-bg);
  white-space: nowrap;
}

/* Folder editing stays in the Layers panel and uses separate selection controls. */
.gis-layer-folders { padding: .5rem; border-bottom: 1px solid var(--theme-foreground-faintest, #444); }
.gis-layer-folders summary { cursor: pointer; font-weight: 600; }
.gis-layer-folders form { display: grid; gap: .5rem; min-width: 0; }
.gis-layer-folders input:not([type=checkbox]), .gis-layer-folders select { width: 100%; box-sizing: border-box; min-width: 0; }
.gis-layer-folders fieldset { max-height: 16rem; overflow: auto; min-width: 0; }
.gis-layer-folders label { display: flex; gap: .4rem; align-items: start; overflow-wrap: anywhere; }
.gis-layer-folders input[type=checkbox] { flex: none; }
.composition-directory { width: 100%; overflow-x: auto; }
.composition-directory td small { display: block; }
.gis-layer-dock { grid-template-rows: auto minmax(0, 1fr) auto auto; }
.gis-layer-folders { min-height: 0; max-height: 45vh; overflow: auto; }

.style-library { display: grid; gap: .75rem; max-width: 64rem; }
.style-library select, .style-library input { max-width: 100%; }
.style-library article { padding: .75rem; border: 1px solid var(--theme-foreground-faintest, #555); }
.style-designer { display: flex; flex-wrap: wrap; gap: .75rem; align-items: center; }
.style-designer h2, .style-designer > div { flex-basis: 100%; }
.style-library img { max-width: 100%; height: auto; border: 1px solid #777; }

/* Optional information expands below the compact layer controls. */
.gis-layer-info-toggle {
  flex: 0 0 auto;
  min-width: 1.6rem;
  min-height: 1.7rem;
  padding: 0.12rem;
  color: var(--gis-ink);
  background: transparent;
  border: 1px solid transparent;
  border-radius: 0.2rem;
}
.gis-layer-info-toggle:hover,
.gis-layer-info-toggle[aria-expanded="true"] { background: var(--gis-blue-soft); }
.gis-layer-info-toggle:focus-visible { outline: 2px solid var(--gis-blue); }
.gis-layer-info { padding: 0.5rem; overflow-wrap: anywhere; white-space: normal; }
.gis-layer-info[hidden] { display: none; }
.gis-layer-info strong { display: block; font-size: 0.85rem; }
.gis-layer-info p { margin: 0.35rem 0; font-size: 0.78rem; }
.gis-layer-info dl { display: grid; grid-template-columns: auto minmax(0,1fr); gap: 0.2rem 0.6rem; font-size: 0.75rem; margin: 0.4rem 0 0; }
.gis-layer-info dd { margin: 0; }

.gis-feature-halo-controls { display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 0.35rem; padding: 0.4rem; }
.gis-feature-halo-controls label, .gis-feature-halo-controls p { grid-column: 1 / -1; }
.gis-feature-halo-controls p { font-size: 0.75rem; margin: 0; }
.gis-feature-halo-controls input[type="range"] { min-width: 0; width: 100%; }
.gis-feature-halo-controls .gis-feature-halo-slider { grid-column: 1; min-width: 0; font-size: 0.8rem; }
.gis-feature-halo-controls output { align-self: end; padding-bottom: 0.3rem; font-size: 0.8rem; }
.gis-renderer-panel [hidden] { display: none; }

.gis-renderer-paused {
  position: absolute;
  inset: 1rem;
  z-index: 5;
  display: grid;
  align-content: center;
  justify-items: center;
  gap: 0.75rem;
  padding: 1rem;
  background: var(--theme-background);
  text-align: center;
}
.gis-renderer-paused p { max-width: 36rem; }

.map-preview-raster-refresh { position: absolute; bottom: 4rem; left: .5rem; z-index: 3; max-width: calc(100% - 1rem); }
.map-preview-area { position: absolute; top: .5rem; right: .5rem; z-index: 3; display: flex; flex-wrap: wrap; gap: .4rem; max-width: calc(100% - 4rem); background: var(--theme-background); padding: .5rem; }
.map-preview-area label { display: grid; font-size: .8rem; }
.map-preview-area input { width: 6rem; max-width: 100%; }

/* Anonymous Publication practice: local source and review, separate from Studio. */
.public-workbench-demo[data-surface="demo-publication-workspace"] {display: block; overflow-y: auto;}
.public-demo-publication-workspace {font: 14px/1.5 system-ui, sans-serif; margin: 1rem auto; padding: .8rem; max-width: 90rem; min-width: 0; border: 1px solid var(--opengeo-line); border-radius: 6px;}
.public-demo-publication-preview-tools {display: flex; gap: .5rem; flex-wrap: wrap;}
.public-demo-publication-workspace > header {display: flex; align-items: center; flex-wrap: wrap; gap: .6rem; justify-content: space-between;}
.public-demo-publication-workspace h1 {font-size: 1.3rem; margin: 0;}
.public-demo-publication-workspace h2 {font-size: .9rem; margin: .4rem 0;}
.public-demo-publication-notice {font-size: .82rem; color: var(--theme-foreground-muted); max-width: 80rem; margin: .6rem 0;}
.public-demo-publication-actions {display: flex; flex-wrap: wrap; gap: .4rem; margin: .5rem 0;}
.public-demo-publication-files {display: grid; grid-template-columns: minmax(150px, 20%) minmax(0, 1fr); border: 1px solid var(--opengeo-line);}
.public-demo-publication-files > aside {padding: .5rem; border-right: 1px solid var(--opengeo-line); overflow: auto;}
.public-demo-publication-files > section {min-width: 0; padding: .5rem;}
.public-demo-publication-path {display: block; font: .8rem var(--monospace); padding: .3rem; overflow-wrap: anywhere;}
.public-demo-publication-workspace input:not([type="checkbox"]), .public-demo-publication-workspace select, .public-demo-publication-workspace textarea {box-sizing: border-box; max-width: 100%; min-width: 0; color: var(--theme-foreground); background: var(--theme-background); border: 1px solid var(--opengeo-line); border-radius: 4px; padding: .45rem;}
.public-demo-publication-workspace textarea[aria-label="Publication source"] {width: 100%; min-height: 28rem; font: 13px/1.6 var(--monospace); resize: vertical;}
.public-demo-publication-workspace [data-publication-panel] > section {padding: .6rem;}
.public-demo-publication-workspace iframe {display: block; width: 100%; height: 62vh; min-height: 320px; border: 1px solid var(--opengeo-line); margin: .6rem 0; box-sizing: border-box;}
.public-demo-publication-workspace label {display: grid; gap: .3rem; margin: .6rem 0;}
.public-demo-publication-workspace .public-demo-publication-consent {display: flex; gap: .5rem; align-items: flex-start;}
.public-demo-publication-consent input {width: 1rem; height: 1rem; margin-top: .3rem; flex: 0 0 1rem;}
.public-demo-publication-dialog {box-sizing: border-box; width: min(36rem, calc(100vw - 2rem)); max-height: 90vh; overflow: auto; color: var(--theme-foreground); background: var(--theme-background); border: 1px solid var(--opengeo-line); border-radius: 6px;}
.public-demo-publication-dialog::backdrop {background: #0008;}
.public-demo-publication-dialog form {display: grid; gap: .7rem;}
@media (max-width: 600px) {.public-demo-publication-files {grid-template-columns: minmax(0, 1fr);} .public-demo-publication-files > aside {border-right: 0; border-bottom: 1px solid var(--opengeo-line); max-height: 12rem;} .public-demo-publication-workspace .publication-code-editor {height: 50vh;}}

.studio-skip-link { position:fixed; top:0.5rem; left:0.5rem; z-index:10000; transform:translateY(-180%); padding:0.75rem 1rem; background:#fff; color:#143451; border:2px solid #143451; border-radius:0.25rem; font-weight:600; }
.studio-skip-link:focus { transform:none; outline:3px solid #4f8cff; outline-offset:2px; }
#observablehq-main:focus { outline:2px solid var(--opengeo-blue); outline-offset:3px; }

[data-studio-skip-target]:focus { outline:2px solid var(--opengeo-blue); outline-offset:3px; }

/* Keep native controls and disabled labels readable in either app palette. */
:where(.platform-surface, .platform-directory, .platform-workspace, .project-print-editor, .opengeo-workbench) :is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]), select, textarea) {
  color: var(--theme-foreground);
  background-color: var(--theme-background);
  border-color: color-mix(in srgb, var(--theme-foreground) 50%, var(--theme-background));
}

:where(.platform-surface, .platform-directory, .platform-workspace, .project-print-editor, .opengeo-workbench) :is(input, textarea)::placeholder {
  color: var(--theme-foreground-muted);
  opacity: 1;
}

:is(.platform-surface, .platform-directory, .platform-workspace, .project-print-editor, .opengeo-workbench) :is(button, input, select, textarea):disabled {
  color: var(--theme-foreground-muted);
  background-color: var(--theme-background-alt);
  opacity: 1;
}

/* Raster controls sit above the interactive canvas in both themes. */
.browser-print-studio { box-sizing: border-box; width: calc(100vw - 2rem); max-width: 100rem; max-height: calc(100dvh - 2rem); overflow: auto; padding: 1rem; border: 1px solid var(--theme-foreground-faint); border-radius: .4rem; color: var(--theme-foreground); background: var(--theme-background); font: 14px/1.5 system-ui, sans-serif; }
.browser-print-studio::backdrop { background: #0009; }
.browser-print-studio > button { min-height: 2.75rem; margin-bottom: .75rem; }
.browser-print-studio .project-print-editor { min-width: 0; }
.browser-print-studio .opengeo-workbench { height: 100%; min-height: 360px; }
.local-project-library, .local-project-title { max-width: 44rem; }
.local-project-title input { display: block; box-sizing: border-box; width: 100%; margin-block: .75rem; padding: .6rem; color: var(--theme-foreground); background: var(--theme-background); border: 1px solid var(--opengeo-line); }
.local-project-card { padding: .8rem; margin-block: .7rem; border: 1px solid var(--opengeo-line); border-radius: .35rem; }
.local-project-card h3 { margin-block: 0 .3rem; }
.local-project-card small { display: block; margin-bottom: .6rem; }
.local-project-card :is(button, a), .local-project-title button { display: inline-block; margin: .2rem .4rem .2rem 0; }

.map-preview-raster-controls { position: absolute; z-index: 4; top: .5rem; right: .5rem; box-sizing: border-box; width: min(24rem, calc(100% - 4.5rem)); max-height: calc(100% - 5rem); overflow: auto; padding: .6rem; border: 1px solid var(--opengeo-line); border-radius: .35rem; color: var(--theme-foreground); background: var(--theme-background); }
.map-preview-raster-controls > button { margin: 0 .3rem .4rem 0; }
.map-preview-raster-controls fieldset { min-width: 0; margin: .25rem 0 0; padding: .5rem; }
.map-preview-raster-controls label { display: block; margin: .35rem 0; }
.map-preview-raster-controls input { display: block; width: 100%; min-width: 0; box-sizing: border-box; }
.map-preview-raster-controls p { margin: .5rem 0; font-size: .85rem; line-height: 1.4; }

.gis-profile-line-of-sight { margin-top: .65rem; }
.gis-profile-line-of-sight form { display: grid; gap: .5rem; margin-block: .5rem; }
.gis-profile-line-of-sight label { display: flex; flex-direction: column; gap: .2rem; }
.gis-profile-line-of-sight .gis-line-of-sight-curvature { flex-direction: row; align-items: center; }
.gis-profile-line-of-sight input[type="number"] { width: 100%; min-width: 0; box-sizing: border-box; }
.gis-profile-line-of-sight p { font-size: .85rem; line-height: 1.4; }

.gis-grid-viewshed { margin-top: .65rem; color: var(--gis-ink, var(--theme-foreground)); }
.gis-grid-viewshed form { display: grid; gap: .5rem; margin-block: .5rem; }
.gis-grid-viewshed label { display: flex; flex-direction: column; gap: .2rem; }
.gis-grid-viewshed .gis-viewshed-check { flex-direction: row; align-items: center; }
.gis-grid-viewshed .gis-viewshed-check input[type="checkbox"] { width: auto; flex: 0 0 auto; margin: 0; }
.gis-grid-viewshed :is(input[type="number"], select, canvas) { box-sizing: border-box; width: 100%; min-width: 0; max-width: 100%; }
.gis-grid-viewshed canvas { height: auto; image-rendering: pixelated; cursor: crosshair; }
.gis-grid-viewshed p { font-size: .85rem; line-height: 1.4; }
.gis-grid-viewshed :is(button, input, select) { color: var(--gis-ink, var(--theme-foreground)); background-color: var(--gis-elevated, var(--theme-background-alt)); border: 1px solid var(--gis-line, var(--opengeo-line)); font: inherit; }
.gis-grid-viewshed .gis-key-values :is(dt, dd) { color: inherit; border-color: var(--gis-line, var(--opengeo-line)); }
.gis-viewshed-legend { padding: 0; list-style: none; }
.gis-viewshed-legend span { display: inline-block; width: .8rem; height: .8rem; margin-right: .4rem; border: 1px solid currentColor; }

.gis-polygon3d-editor { max-width: 52rem; }
.gis-polygon3d-editor form { display: grid; gap: .6rem; }
.gis-polygon3d-editor label { display: flex; flex-direction: column; gap: .25rem; }
.gis-polygon3d-editor :is(input,select) { box-sizing: border-box; width: 100%; min-width: 0; padding: .4rem; color: var(--theme-foreground); background: var(--theme-background); border: 1px solid var(--opengeo-line); }
.gis-polygon3d-editor table { table-layout: fixed; width: 100%; font-size: .85rem; }
.gis-polygon3d-editor :is(th,td) { padding: .2rem; }
.gis-polygon3d-editor :is(table,tbody,tr,th,td,h2,label) { color: inherit; }
.gis-polygon3d-editor button { min-height: 2.25rem; color: var(--theme-foreground); background: var(--theme-background-alt); border: 1px solid var(--opengeo-line); padding: .4rem; }
.gis-polygon3d-editor button:disabled { color: var(--theme-foreground-muted); }
.gis-polygon3d-editor dl { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: .4rem; }
.gis-polygon3d-editor dd { margin: 0; overflow-wrap: anywhere; }
.gis-polygon3d-editor svg { display: block; width: 100%; max-height: 16rem; }
.gis-polygon3d-editor svg polygon { fill: color-mix(in srgb, var(--opengeo-blue) 25%, transparent); stroke: var(--theme-foreground); stroke-width: 1; }
.gis-polygon3d-editor svg text { fill: var(--theme-foreground); font: 12px system-ui, sans-serif; }

@media (max-width: 600px) {
  .gis-polygon3d-editor table thead { display: none; }
  .gis-polygon3d-editor :is(table,tbody,tr,td) { display: block; width: auto; }
  .gis-polygon3d-editor tr { border-block-end: 1px solid var(--opengeo-line); margin-block-end: .5rem; padding-block: .4rem; }
  .gis-polygon3d-editor td[data-field]::before { content: attr(data-field); display: block; margin-block-end: .2rem; }
}

/* Shared symbology gallery and Styles template controls. */
.symbology-gallery { display: grid; gap: .65rem; min-width: 0; font-family: var(--sans-serif, system-ui, sans-serif); }
.symbology-gallery > h2, .symbology-gallery > p { margin: 0; }
.symbology-gallery-overview, .symbology-gallery-count { font-size: .8rem; color: color-mix(in srgb, var(--theme-foreground) 72%, var(--theme-background)); }
.symbology-gallery-collections { display: flex; flex-wrap: wrap; gap: .4rem; }
.symbology-gallery-collections button { padding: .4rem .65rem; border: 1px solid var(--opengeo-line); border-radius: .3rem; color: var(--theme-foreground); background: var(--theme-background-alt); font: inherit; font-size: .8rem; }
.symbology-gallery-collections button[aria-pressed="true"] { border-color: var(--opengeo-blue); background: color-mix(in srgb, var(--opengeo-blue) 12%, var(--theme-background)); }
.symbology-gallery-references { display: grid; gap: .6rem; min-width: 0; padding-top: .8rem; border-top: 1px solid var(--opengeo-line); }
.symbology-gallery-references :is(h3, h4, p) { margin: 0; }
.symbology-gallery-reference-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr)); gap: .7rem; }
.symbology-gallery-reference-grid article { display: grid; gap: .5rem; align-content: start; min-width: 0; padding: .8rem; border: 1px solid var(--opengeo-line); border-radius: .4rem; color: var(--theme-foreground); background: var(--theme-background-alt); font-size: .85rem; }
.symbology-gallery-reference-grid :is(a, p, button) { overflow-wrap: anywhere; }
.symbology-gallery-reference-grid ul { margin: 0; padding-inline-start: 1.2rem; }
.symbology-gallery-reference-grid li + li { margin-top: .35rem; }
.symbology-gallery-reference-grid button { justify-self: start; font: inherit; }
.symbology-gallery-reference-note { font-size: .78rem; color: color-mix(in srgb, var(--theme-foreground) 75%, var(--theme-background)); }
.symbology-gallery-filters { display: flex; flex-wrap: wrap; gap: .5rem; align-items: end; }
.symbology-gallery-filters label { display: grid; gap: .2rem; flex: 1 1 9rem; min-width: 0; font-size: .8rem; }
.symbology-gallery-filters label:first-child { flex: 2 1 15rem; }
.symbology-gallery-filters :is(input, select) { box-sizing: border-box; width: 100%; min-width: 0; min-height: 44px; font: inherit; color: var(--theme-foreground); background: var(--theme-background-alt); border: 1px solid var(--opengeo-line); border-radius: .3rem; padding: .45rem; }
.symbology-gallery button { min-height: 44px; cursor: pointer; }
.symbology-gallery button:disabled { cursor: default; }
.symbology-gallery-workspace { display: grid; grid-template-columns: minmax(0, 1fr) minmax(14rem, 18rem); gap: .8rem; align-items: start; min-width: 0; }
.symbology-gallery-results { display: grid; gap: .65rem; min-width: 0; }
.symbology-gallery-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 8.5rem), 1fr)); gap: .5rem; min-width: 0; }
.symbology-gallery button.symbology-gallery-card { display: grid; grid-template-rows: 4.5rem auto auto; gap: .35rem; align-content: start; box-sizing: border-box; min-width: 0; padding: .55rem; border: 1px solid var(--opengeo-line); border-radius: .4rem; color: var(--theme-foreground); background: var(--theme-background-alt); text-align: left; font: inherit; }
.symbology-gallery button.symbology-gallery-card:hover { border-color: var(--opengeo-blue); background: var(--opengeo-panel-strong); }
.symbology-gallery button.symbology-gallery-card[aria-pressed="true"] { border-color: var(--opengeo-blue); box-shadow: inset 0 0 0 1px var(--opengeo-blue); background: color-mix(in srgb, var(--opengeo-blue) 9%, var(--theme-background)); }
.symbology-gallery-card strong { font-size: .82rem; line-height: 1.3; overflow-wrap: anywhere; }
.symbology-gallery-card > span { font-size: .72rem; line-height: 1.3; color: color-mix(in srgb, var(--theme-foreground) 72%, var(--theme-background)); overflow-wrap: anywhere; }
.symbology-gallery-card-preview, .symbology-gallery-detail-preview { display: grid; place-items: center; min-width: 0; overflow: hidden; border-radius: .2rem; background: #f5f5f2; }
.symbology-gallery-card-preview { height: 4.5rem; }
.symbology-gallery-card-preview > :is(img, svg) { display: block; width: 100%; max-width: 100%; height: 100%; max-height: 4.5rem; object-fit: contain; }
.symbology-gallery-detail { position: sticky; top: .8rem; display: grid; gap: .65rem; align-content: start; min-width: 0; padding: .8rem; border: 1px solid var(--opengeo-line); border-radius: .4rem; background: var(--theme-background-alt); }
.symbology-gallery-detail h3, .symbology-gallery-detail p { margin: 0; font-size: .9rem; }
.symbology-gallery-detail-preview { min-height: 8rem; }
.symbology-gallery-detail-preview > :is(img, svg) { display: block; width: 100%; max-width: 100%; height: 8rem; object-fit: contain; }
.symbology-gallery-detail dl { display: grid; gap: .2rem; margin: 0; font-size: .8rem; }
.symbology-gallery-detail dt { font-weight: 600; }
.symbology-gallery-detail dd { margin: 0 0 .4rem; overflow-wrap: anywhere; }
.symbology-gallery-detail a { font-size: .8rem; overflow-wrap: anywhere; }
.symbology-gallery-pagination { display: flex; gap: .5rem; align-items: center; justify-content: center; font-size: .8rem; }
.symbology-gallery-status { min-height: 1.5em; font-size: .85rem; }
.symbology-gallery-selection-notice { font-size: .85rem; }
.symbology-gallery-preset-designer { display: grid; gap: .65rem; min-width: 0; padding: .8rem; border: 1px solid var(--opengeo-line); border-radius: .4rem; background: var(--theme-background-alt); }
.symbology-gallery-preset-fields { display: flex; flex-wrap: wrap; gap: .6rem; min-width: 0; }
.symbology-gallery-preset-fields label { display: grid; gap: .25rem; flex: 1 1 15rem; min-width: 0; font-size: .85rem; }
.symbology-gallery-preset-fields input { box-sizing: border-box; width: 100%; min-width: 0; min-height: 44px; font: inherit; }
.symbology-gallery-preset-preview { display: grid; place-items: center; height: 8rem; min-width: 0; overflow: hidden; border: 1px solid var(--opengeo-line); border-radius: .2rem; background: #f5f5f2; }
.symbology-gallery-preset-preview > :is(img, svg) { display: block; width: 100%; max-width: 100%; height: 100%; object-fit: contain; }
.symbology-gallery-preset-designer pre { max-height: 15rem; overflow: auto; font-size: .8rem; }
.symbology-gallery-preset-actions { display: flex; flex-wrap: wrap; gap: .5rem; }
.symbology-gallery :is(button, input, select, a):focus-visible { outline: 2px solid var(--opengeo-blue); outline-offset: 3px; }
.symbology-gallery [hidden] { display: none !important; }
@media (max-width: 760px) {
  .symbology-gallery-workspace { grid-template-columns: minmax(0, 1fr); }
  .symbology-gallery-detail { position: static; grid-row: 1; }
  .symbology-gallery-detail[data-empty="true"] { display: none; }
  .symbology-gallery-filters label { flex-basis: calc(50% - .5rem); }
  .symbology-gallery-filters label:first-child { flex-basis: 100%; }
  .symbology-gallery-filters :is(input, select) { font-size: 16px; }
}
/* End shared symbology gallery. */
