body { font-family: system-ui, -apple-system, Segoe UI, sans-serif; margin:0; background:#f7f7f7; color:#222; }
header { min-height:64px; display:flex; align-items:center; justify-content:space-between; padding:0 24px; background:#fff; border-bottom:1px solid #ddd; position:sticky; top:0; z-index:10; }
header nav { display:flex; align-items:center; gap:18px; flex-wrap:wrap; }
a { color:#0b5cad; text-decoration:none; }
.brand { font-weight:700; color:#222; }
.brand-row { display:flex; align-items:center; gap:12px; min-width:0; }
.brand-with-logo { display:inline-flex; align-items:center; gap:10px; color:#222; }
.brand-logo-placeholder {
  width:54px;
  aspect-ratio:3 / 2;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  border:1px solid #d0d7de;
  border-radius:8px;
  background:#f6f8fa;
  overflow:hidden;
  flex:0 0 auto;
}
.brand-logo-placeholder img { width:100%; height:100%; object-fit:contain; display:block; }
.brand-logo-placeholder.is-empty::after { content:"Logo"; font-size:0.72rem; color:#667085; font-weight:600; }
.contribution-banner {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:18px;
  background:#fffaf0;
  border:1px solid #ead7ac;
  border-radius:14px;
  padding:12px 16px;
  margin-bottom:18px;
  box-shadow:0 1px 2px rgba(30, 20, 0, 0.04);
}
.contribution-text { display:flex; flex-direction:column; gap:3px; min-width:0; }
.contribution-text p { margin:0; color:#5a4930; line-height:1.42; }
.dictionary-definition { font-family: Georgia, 'Times New Roman', serif; font-size:0.98rem; line-height:1.36; }
.dictionary-definition strong { color:#2f2618; font-variant:small-caps; letter-spacing:0.02em; }
.contribution-button,
.contribution-button:link,
.contribution-button:visited {
  white-space:nowrap;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  align-self:center;
  min-height:38px;
  padding:8px 15px;
  border:1px solid #4b3822;
  border-radius:999px;
  background:#4b3822;
  color:#fff !important;
  font-weight:650;
  text-decoration:none !important;
  box-shadow:0 1px 2px rgba(0, 0, 0, 0.12);
}
.contribution-button:hover { background:#60472b; border-color:#60472b; color:#fff !important; text-decoration:none !important; }
.contribution-button:focus-visible { outline:3px solid rgba(126, 87, 36, 0.28); outline-offset:2px; }
.contribution-button:active { transform:translateY(1px); }
@media (max-width: 700px) {
  header { align-items:flex-start; flex-direction:column; gap:8px; padding:10px 16px; }
  header nav { gap:14px; }
  .contribution-banner { align-items:flex-start; flex-direction:column; }
  .contribution-button { align-self:flex-start; }
}

main { padding:24px; }
.hero, .panel { background:#fff; border:1px solid #ddd; border-radius:12px; padding:18px; margin-bottom:18px; }
.narrow { max-width:420px; margin:auto; }
#map { height:560px; border:1px solid #ddd; border-radius:12px; margin-bottom:18px; background:#e8e8e8; }
table { width:100%; border-collapse:collapse; background:#fff; }
th, td { padding:8px 10px; border-bottom:1px solid #eee; text-align:left; vertical-align:top; }
th { background:#fafafa; }
.grid { display:grid; grid-template-columns:160px 1fr; gap:8px; }
.photos { display:grid; grid-template-columns:repeat(auto-fill,minmax(180px,1fr)); gap:12px; }
.photos img { width:100%; border-radius:8px; border:1px solid #ddd; }
form label { display:block; margin:12px 0; }
input, select, button { padding:8px; border:1px solid #ccc; border-radius:8px; }
button { background:#111; color:white; cursor:pointer; }
.inline-form { display:flex; gap:8px; flex-wrap:wrap; }
.admin-tools { margin-top: 8px; }
.ignored-row { opacity: 0.55; background: #fff5f5; }
.ignored-row td { color: #666; }
.compact-form { margin: 0; }
.compact-form button { padding: 5px 8px; font-size: 0.9rem; }
.danger-panel { border-color: #f0b5b5; background: #fffafa; }

.sort-button {
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  font-weight: 700;
  cursor: pointer;
  padding: 0;
}
.sort-button:hover {
  text-decoration: underline;
}
.sort-button[data-sort-active="asc"]::after {
  content: " ▲";
  font-size: 0.8em;
}
.sort-button[data-sort-active="desc"]::after {
  content: " ▼";
  font-size: 0.8em;
}

.hint { color: #555; font-size: 0.95rem; }
.geo-admin-form { display: grid; gap: 0.9rem; max-width: 920px; }
.geo-admin-form label { display: grid; gap: 0.35rem; font-weight: 600; }
.geo-admin-form input, .geo-admin-form select { padding: 0.55rem; border: 1px solid #d0d7de; border-radius: 6px; }
.geo-search-row { display: flex; gap: 0.5rem; }
.geo-search-row input { flex: 1; }
.geo-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0.8rem; }
.geo-results { display: grid; gap: 0.35rem; }
.geo-result-item { text-align: left; padding: 0.5rem; border: 1px solid #d0d7de; border-radius: 6px; background: #fff; color: #222; cursor: pointer; width: 100%; }
.geo-result-item:focus { outline: 2px solid #0b5cad; outline-offset: 2px; }
.geo-result-item:hover { background: #f6f8fa; color: #222; }
@media (max-width: 700px) { .geo-search-row, .geo-grid { grid-template-columns: 1fr; display: grid; } }

.table-wrap { overflow-x: auto; border: 1px solid #eee; border-radius: 12px; background: #fff; }
.filter-row th { background: #fff; padding: 4px 6px; }
.column-filter { width: 100%; box-sizing: border-box; padding: 5px 6px; font-size: 0.85rem; }
.column-panel { background: #fff; border: 1px solid #ddd; border-radius: 12px; padding: 12px 16px; margin-bottom: 12px; }
.column-panel summary { cursor: pointer; font-weight: 700; }
.column-chooser { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 8px 12px; margin-top: 12px; }
.column-chooser label { display: flex; align-items: center; gap: 6px; margin: 0; }
.column-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.column-actions button { padding: 6px 10px; }
.is-hidden-column { display: none !important; }
.is-filtered-out { display: none !important; }
.description-text { white-space: pre-line; }
.bulk-admin-form { display: grid; gap: 14px; }
.bulk-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px 14px; }
.bulk-grid label, .bulk-admin-form > label { display: grid; gap: 5px; font-weight: 600; margin: 0; }
.bulk-grid input, .bulk-grid select, .bulk-admin-form input { width: 100%; box-sizing: border-box; }
.ai-analysis-box { display: grid; grid-template-columns: minmax(240px, 420px) auto 1fr; gap: 10px 12px; align-items: end; margin: 12px 0 18px; padding: 12px; border: 1px solid #d8dee4; border-radius: 10px; background: #f6f8fa; }
.ai-analysis-box label { display: grid; gap: 5px; font-weight: 600; margin: 0; }
.ai-analysis-box input { width: 100%; box-sizing: border-box; }
.ai-analysis-box .hint { grid-column: 1 / -1; margin: 0; }
.ai-analysis-status { color: #555; align-self: center; }
.ai-analysis-status.is-error { color: #b42318; font-weight: 600; }
@media (max-width: 800px) { .ai-analysis-box { grid-template-columns: 1fr; } }

.ai-location-analysis {
  margin-top: 1rem;
  padding: 1rem;
  border: 1px solid #d6dde5;
  border-radius: 0.75rem;
  background: #f8fafc;
}
.ai-location-analysis h3 {
  margin-top: 0;
}
.ai-location-grid {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 0.35rem 1rem;
  margin: 0.75rem 0;
}
.ai-location-grid dt {
  font-weight: 700;
}
.ai-location-grid dd {
  margin: 0;
}

.server-update-panel {
  border: 1px solid #d6dce2;
  border-radius: 12px;
  padding: 12px;
  margin: 12px 0 18px;
  background: #f8fafc;
}
.server-update-row {
  display: flex;
  gap: 12px;
  align-items: center;
  flex-wrap: wrap;
}
.server-update-status {
  margin-top: 8px;
  font-size: 0.95rem;
}
.server-update-progress {
  height: 8px;
  border-radius: 999px;
  background: #e6ebef;
  overflow: hidden;
  margin-top: 10px;
}
.server-update-progress-bar {
  height: 100%;
  width: 0%;
  background: #2f6feb;
  transition: width 0.25s ease;
}

.field-label-line {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  justify-content: space-between;
}
.field-source-badge {
  display: inline-flex;
  align-items: center;
  width: fit-content;
  border-radius: 999px;
  padding: 0.12rem 0.45rem;
  font-size: 0.76rem;
  font-weight: 600;
  background: #eef2f7;
  color: #475569;
  white-space: nowrap;
}

.field-source-badge.source-icon {
  padding: 0;
  background: transparent;
  color: inherit;
  font-size: 1rem;
  line-height: 1;
  cursor: help;
}
.field-source-badge.source-icon.is-human {
  color: #12805c;
}
.field-source-badge.source-icon.is-ai {
  color: #475569;
}
.field-source-badge.source-icon.is-empty {
  display: none;
}

.admin-field-action {
  margin-top: 0.35rem;
  width: fit-content;
  padding: 0.25rem 0.55rem;
  font-size: 0.82rem;
}
.analysis-fields-table td:nth-child(1) {
  font-weight: 600;
}
.analysis-fields-table td:nth-child(2) {
  white-space: pre-wrap;
}


.table-source-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-left: 0.35rem;
  font-size: 0.95rem;
  vertical-align: baseline;
  cursor: help;
}
.table-source-icon.is-human {
  color: #12805c;
}
.table-source-icon.is-ai {
  color: #475569;
}
.cell-value:empty + .table-source-icon {
  display: none;
}

.map-controls {
  display: flex;
  gap: 1rem;
  align-items: center;
  flex-wrap: wrap;
  margin: 0 0 0.75rem;
  padding: 0.75rem 1rem;
  border: 1px solid #ddd;
  border-radius: 12px;
  background: #fff;
}
.map-controls label {
  display: flex;
  gap: 0.5rem;
  align-items: center;
  margin: 0;
  font-weight: 600;
}
.map-controls select {
  min-width: 220px;
}

.duplicate-panel table {
  width: 100%;
}
.duplicate-table td,
.duplicate-table th {
  vertical-align: top;
}
.duplicate-actions {
  min-width: 14rem;
}
.duplicate-actions .inline-form {
  display: inline-block;
  margin: 0 0.25rem 0.25rem 0;
}

.brand-row {
  display: flex;
  align-items: center;
  gap: 0.75rem;
}

.language-toggle {
  border: 1px solid #d0d5dd;
  background: #ffffff;
  color: #1f2937;
  border-radius: 999px;
  padding: 0.25rem 0.65rem;
  font-size: 0.85rem;
  font-weight: 700;
  line-height: 1.2;
  cursor: pointer;
}

.language-toggle:hover {
  background: #f3f4f6;
}

.table-status {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin: 0 0 0.6rem;
  color: #374151;
}

.range-filter {
  margin-top: 0.35rem;
  min-width: 150px;
}

.range-filter-values {
  display: flex;
  justify-content: space-between;
  gap: 0.5rem;
  font-size: 0.72rem;
  color: #555;
  margin-bottom: 0.15rem;
}

.range-filter-sliders {
  display: grid;
  gap: 0.15rem;
}

.range-filter input[type="range"] {
  width: 100%;
  padding: 0;
}

/* Drag-and-drop column ordering */
.sortable-table th.draggable-column {
  cursor: grab;
  user-select: none;
}
.sortable-table th.is-dragging-column {
  opacity: 0.45;
  cursor: grabbing;
}
.sortable-table th.is-drop-target {
  outline: 2px dashed #2563eb;
  outline-offset: -4px;
  background: #eff6ff;
}

.pending-duplicates-panel {
  margin: 1rem 0 1.25rem;
  padding: 1rem;
  border: 1px solid #ddd;
  border-radius: 12px;
  background: #fff;
}
.pending-duplicates-list {
  margin: 0.75rem 0 0;
  padding-left: 1.25rem;
}
.pending-duplicates-list li {
  margin: 0.35rem 0;
}
.pending-duplicates-list a {
  font-weight: 700;
}

.duplicate-group-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-left: 0.35rem;
  padding: 0.05rem 0.35rem;
  border-radius: 999px;
  background: #e0f2fe;
  color: #075985;
  font-size: 0.75rem;
  font-weight: 700;
}

.source-ref-list {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 0.15rem;
  align-items: center;
}

.source-ref-list a,
.map-source-ref-list a {
  white-space: nowrap;
}

.source-ref-separator {
  color: #9ca3af;
}

.map-source-ref-list {
  margin-top: 0.25rem;
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
}

.id-ref-list {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  align-items: center;
}

.id-ref-list a {
  white-space: nowrap;
}

.table-conflict-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  margin-left: 0.25rem;
  min-width: 1.1rem;
  height: 1.1rem;
  border-radius: 999px;
  font-size: 0.75rem;
  font-weight: 700;
  color: #92400e;
  background: #fef3c7;
  cursor: help;
}


.manual-duplicate-form {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  align-items: end;
}
.manual-duplicate-form label {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  min-width: 220px;
}
.manual-duplicate-form input {
  max-width: 320px;
}
.user-chip { font-size: 0.9rem; opacity: 0.8; margin: 0 0.5rem; }
.restricted-box { padding: 1rem; border: 1px dashed #999; border-radius: 0.75rem; background: #fafafa; color: #555; }
.timeline { border-left: 3px solid #ddd; margin-left: 0.75rem; padding-left: 1rem; }
.timeline-item { position: relative; margin: 0 0 1rem; padding: 0.75rem; border-radius: 0.75rem; background: #fafafa; }
.timeline-item::before { content: ""; position: absolute; left: -1.55rem; top: 1rem; width: 0.75rem; height: 0.75rem; border-radius: 50%; background: #777; }
.timeline-price_drop::before { background: #1f9d55; }
.timeline-price_raise::before { background: #d64545; }
.timeline-ad_missing_from_search::before, .timeline-ad_offline_confirmed::before { background: #555; }
.timeline-ad_reappeared::before, .timeline-first_seen::before { background: #2b6cb0; }
.timeline-date { font-size: 0.85rem; color: #666; margin-bottom: 0.25rem; }
.user-form, .stats-filters { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; align-items: end; }
.user-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.stats-panel { break-inside: avoid; }
.checkbox-row { display: flex; align-items: center; gap: 0.5rem; }

.user-chip { margin-right: 0.75rem; }
.property-id-link { font-weight: 700; }
.timeline { list-style: none; margin: 1rem 0 0; padding: 0; position: relative; }
.timeline::before { content: ""; position: absolute; left: 1rem; top: 0.25rem; bottom: 0.25rem; width: 3px; background: #d0d7de; border-radius: 999px; }
.timeline-item { position: relative; margin: 0 0 1rem 0; padding: 0.75rem 0.75rem 0.75rem 2.75rem; border: 1px solid #e5e7eb; border-radius: 0.75rem; background: #fff; }
.timeline-item::before { content: ""; position: absolute; left: 0.58rem; top: 1rem; width: 0.85rem; height: 0.85rem; border-radius: 999px; background: #6b7280; border: 3px solid #fff; box-shadow: 0 0 0 2px #d0d7de; }
.timeline-item.is-online::before { background: #12805c; }
.timeline-item.is-offline::before { background: #b42318; }
.timeline-item.is-price::before { background: #2f6feb; }
.timeline-item time { display: block; color: #6b7280; font-size: 0.85rem; margin-bottom: 0.25rem; }
.timeline-item strong { display: inline-block; margin-right: 0.5rem; }
.timeline-item small { display: block; margin-top: 0.25rem; color: #6b7280; }
.stats-sortable-table th.is-clickable { cursor: pointer; }
.stats-sortable-table th[data-direction="asc"]::after { content: " ▲"; font-size: 0.8em; }
.stats-sortable-table th[data-direction="desc"]::after { content: " ▼"; font-size: 0.8em; }
.source-ref-list { display: inline-flex; flex-wrap: wrap; gap: 0.25rem; align-items: center; }

.stats-panel-header { display: flex; justify-content: space-between; gap: 1rem; align-items: center; flex-wrap: wrap; }
.stats-actions { display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap; }
.stats-raw-details { margin-top: 0.35rem; color: #555; font-size: 0.9em; }
.stats-raw-details summary { cursor: pointer; }
.stats-raw-details ul { margin: 0.35rem 0 0 1.25rem; padding: 0; }
.is-hidden { display: none !important; }
.muted { color: #666; }

.lbc-runtime-form {
  display: grid;
  gap: 0.75rem;
}
.lbc-runtime-form textarea {
  width: 100%;
  max-width: 100%;
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 0.85rem;
}
.lbc-runtime-form input[type="number"] {
  max-width: 12rem;
}
.pending-error-details {
  margin-top: 0.75rem;
}
.pending-error-details ul {
  margin: 0.5rem 0 0;
  padding-left: 1.25rem;
}
