@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Inter:wght@400;500;600;700&display=swap');

:root { --ink:#17382d; --muted:#68776e; --paper:#faf9f5; --line:#e4e9e2; --green:#0d513b; --coral:#c96f58; --violet:#725e9f; --gold:#c79a43; --blue:#2678a6; }
* { box-sizing:border-box; }
body { margin:0; height:100dvh; overflow:hidden; font-family:Inter,Arial,sans-serif; color:var(--ink); background:var(--paper); display:grid; grid-template:80px minmax(0,1fr) / minmax(0,1fr) clamp(370px,23vw,450px); }

.topbar { grid-column:1 / -1; display:flex; align-items:center; gap:20px; padding:0 26px; border-bottom:1px solid var(--line); background:#fffefa; z-index:10; }
.brand { color:var(--green); text-decoration:none; font:700 18px/1 Inter,sans-serif; letter-spacing:-.8px; white-space:nowrap; }.brand span { color:var(--gold); }
.admin-link { color:var(--muted); font-size:10px; white-space:nowrap; text-decoration:none; }.admin-link:hover { color:var(--green); }
.intro { max-width:240px; margin:0; color:var(--muted); font-size:11px; line-height:1.5; }.stats { display:flex; flex-direction:column; align-items:flex-start; gap:2px; white-space:nowrap; }.stats-count { display:flex; align-items:baseline; gap:7px; }.stats strong { font:500 18px 'DM Mono',monospace; }.stats span { color:var(--muted); font-size:10px; }.stats small { color:var(--muted); font-size:9px; }
.filters { display:flex; align-items:end; gap:10px; margin-left:auto; }.filters label { display:block; color:var(--muted); font-size:9px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; }.filters label span { display:flex; gap:4px; margin-top:5px; }.filters input,.filters select { width:70px; padding:6px 0; border:0; border-bottom:1px solid var(--line); border-radius:0; outline:0; background:transparent; color:var(--ink); font:11px Inter,sans-serif; }.filters select { width:155px; }.filters #category { width:195px; }.filters input:focus,.filters select:focus { border-color:var(--green); }.filters button { padding:6px 0; color:var(--green); border:0; background:none; font:600 10px Inter,sans-serif; cursor:pointer; white-space:nowrap; }
.legend { position:absolute; top:16px; right:16px; z-index:500; display:flex; flex-wrap:wrap; align-items:center; justify-content:center; gap:8px 16px; max-width:calc(100% - 32px); padding:10px 14px; border:1px solid var(--line); border-radius:6px; background:rgba(255,254,250,.96); box-shadow:0 2px 10px #17382d18; pointer-events:none; }.legend p { display:flex; align-items:center; gap:7px; margin:0; color:var(--ink); font-size:11px; font-weight:600; white-space:nowrap; }.dot { width:10px; height:10px; border-radius:50%; display:inline-block; flex:none; }.office { background:var(--violet); }.street { background:var(--gold); }.municipality-wide { width:11px; height:11px; background:var(--blue); border-radius:2px; transform:rotate(45deg); }.note { display:none; }
.header-legend { display:none; }
.filter-toggle,.mobile-view-switch { display:none; }

main { grid-column:1; grid-row:2; position:relative; min-width:0; min-height:0; } #map { height:100%; width:100%; background:#eef1ee; } #loading { position:absolute; top:18px; left:18px; padding:8px 10px; background:#fff; border:1px solid var(--line); color:var(--muted); font-size:11px; z-index:500; }
.leaflet-control-zoom { border:1px solid var(--line)!important; border-radius:0!important; box-shadow:none!important; }.leaflet-control-zoom a { color:var(--ink)!important; border-color:var(--line)!important; }.leaflet-control-attribution { font-size:9px!important; }
.map-pin { width:15px; height:15px; border-radius:50% 50% 50% 0; transform:rotate(-45deg); border:2px solid #fff; box-shadow:0 1px 5px #15221d44; }.map-pin i { display:block; width:4px; height:4px; margin:3.5px; background:#fff; border-radius:50%; }.pin-street { background:var(--gold); }
.pin-office { width:19px; height:19px; background:var(--violet); box-shadow:0 2px 7px #15221d77; }.pin-office i { width:5px; height:5px; margin:5px; }
.pin-municipality_wide { width:20px; height:20px; margin:2px; border-radius:4px; transform:rotate(45deg); background:var(--blue); box-shadow:0 2px 7px #15221d77; }.pin-municipality_wide i { width:6px; height:6px; margin:5px; border-radius:1px; }
.map-cluster { width:30px; height:30px; display:grid; place-items:center; border:2px solid #fff; border-radius:50%; background:var(--ink); color:#fff; box-shadow:0 2px 7px #15221d55; font:700 11px Inter,sans-serif; }
.map-cluster.cluster-office,.map-cluster.cluster-municipality_wide { width:24px; height:24px; font-size:9px; }.map-cluster.cluster-office { background:var(--violet); }.map-cluster.cluster-municipality_wide { background:var(--blue); }

.details { grid-column:2; grid-row:2; min-height:0; overflow-y:auto; overscroll-behavior:contain; padding:34px 28px; border-left:1px solid var(--line); background:#fff; }.details-placeholder { margin-top:180px; color:var(--muted); }.details-placeholder span,.details .detail-label { color:var(--green); font:500 9px 'DM Mono',monospace; letter-spacing:.08em; text-transform:uppercase; }.details h2 { margin:9px 0 6px; font-size:16px; font-weight:600; letter-spacing:-.02em; line-height:1.35; }.details p { margin:0; font-size:11px; line-height:1.65; }.details ul { margin:24px 0 0; padding:0; list-style:none; }.details li { padding:16px 0; border-top:1px solid var(--line); }.details li h3 { margin:7px 0; font-size:12px; font-weight:500; line-height:1.55; }.details .meta { color:var(--muted); font-size:10px; }.details a { color:var(--green); font-size:10px; font-weight:700; text-decoration:none; }.details a:hover { text-decoration:underline; }
.detail-actions { display:flex; flex-wrap:wrap; align-items:center; gap:12px; margin-top:9px; }.details button { border:0; background:none; padding:0; color:var(--green); font:600 10px Inter,sans-serif; cursor:pointer; }.details button:hover { text-decoration:underline; }.report-form { margin-top:12px; padding:12px; background:#f3f7f4; }.report-form[hidden] { display:none; }.report-form label { display:block; margin-bottom:9px; color:var(--muted); font-size:10px; }.report-form input,.report-form textarea { display:block; width:100%; margin-top:4px; padding:7px; border:1px solid var(--line); border-radius:3px; background:#fff; color:var(--ink); font:11px Inter,sans-serif; }.report-form button { margin-top:3px; }.report-form .report-message { margin-top:8px; color:var(--green); }.place-list .place-choice { width:100%; display:flex; flex-direction:column; align-items:flex-start; gap:5px; padding:4px 0; text-align:left; }.place-choice strong { color:var(--ink); font-size:12px; }.place-choice span { color:var(--muted); font-size:10px; }
.contract-open { display:block; width:100%; text-align:left; }.contract-open h3 { color:var(--ink); font-size:13px; font-weight:600; }.contract-open span { display:block; margin:7px 0 9px; color:var(--green); font-size:10px; }.details .back-place { display:block; margin-bottom:24px; font-size:11px; }.details .contract-title { margin:12px 0; color:var(--green); font-size:20px; line-height:1.35; }.contract-subject { color:var(--muted); }.contract-facts { display:grid; grid-template-columns:1fr 1fr; gap:14px; margin:23px 0; padding:17px; border-radius:8px; background:#f3f7f2; }.contract-facts dt { color:var(--muted); font-size:9px; text-transform:uppercase; letter-spacing:.05em; }.contract-facts dd { margin:5px 0 0; font-size:11px; font-weight:600; line-height:1.4; }.details h3 { margin:22px 0 10px; font-size:13px; }.details ul.positions,.details ul.parties { margin:0; }.details .position-row { display:block; }.position-row strong { display:block; font-size:12px; }.position-row .meta { display:block; margin-top:3px; }.position-actions { display:flex; gap:12px; margin-top:9px; }.party-section { margin-top:8px; }.party { display:flex; flex-direction:column; gap:3px; padding:9px 0; font-size:11px; }.party strong { font-weight:600; }.party span { color:var(--muted); font-size:10px; }.party-section .detail-label { display:block; margin-top:14px; }.contract-id { margin:22px 0 14px!important; color:var(--muted); font-size:10px!important; }.details .source-button { display:inline-block; padding:10px 12px; border-radius:5px; background:var(--green); color:#fff; font-size:11px; }.details .source-button:hover { color:#fff; text-decoration:none; background:#073e2d; }
.details .transcript-toggle { display:block; width:max-content; max-width:100%; margin-top:18px; font-size:11px; text-decoration:underline; text-underline-offset:3px; }.transcript-section { margin-top:16px; padding-top:4px; border-top:1px solid var(--line); }.transcript-section[hidden] { display:none; }.details .transcript-status { margin:10px 0; color:var(--muted); }.transcript-text { margin:12px 0 0; white-space:pre-wrap; overflow-wrap:anywhere; color:var(--ink); font:11px/1.6 'DM Mono',monospace; }

.details .back-search { display:block; margin-bottom:24px; font-size:11px; }
.search-form { margin-bottom:24px; padding-bottom:20px; border-bottom:1px solid var(--line); }
.list-toolbar { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:10px; margin:-8px 0 23px; padding-bottom:18px; border-bottom:1px solid var(--line); }
.list-toolbar label { color:var(--muted); font-size:10px; }
.list-toolbar .review-only-filter { display:flex; align-items:center; gap:5px; color:var(--ink); white-space:nowrap; cursor:pointer; }
.review-only-filter input { accent-color:var(--coral); }
.review-badge { display:inline-block!important; width:auto; margin:0 0 5px!important; padding:3px 6px; border-radius:3px; background:#fff0e9; color:#9b3f2e!important; font-size:9px!important; font-weight:700; }
.review-warning { margin:10px 0!important; padding:10px; border-left:3px solid var(--coral); background:#fff7f2; }
.list-toolbar select { max-width:190px; padding:7px 9px; border:1px solid var(--line); border-radius:4px; background:#fff; color:var(--ink); font:11px Inter,sans-serif; }
.details .back-scope,.details .back-list { display:block; margin-bottom:18px; font-size:11px; }
.scope-caption { margin-bottom:12px!important; color:var(--muted); }
.contract-list-open { display:block; width:100%; text-align:left; }
.contract-list-open h3 { color:var(--ink); font-size:12px; font-weight:600; }
.contract-list-open span { display:block; margin:7px 0; font-size:10px; }
.search-form label { display:block; margin-bottom:8px; color:var(--green); font:500 10px 'DM Mono',monospace; }
.search-controls { display:flex; gap:7px; }
.search-controls input { min-width:0; flex:1; padding:9px 10px; border:1px solid var(--line); border-radius:5px; font:12px Inter,sans-serif; }
.details .search-controls button { padding:9px 10px; border-radius:5px; background:var(--green); color:#fff; }
.search-empty { margin-top:22px!important; }
.details ul.search-results { margin-top:18px; }
.search-result h3 { margin:7px 0!important; line-height:1.4; }
.search-excerpt { margin:10px 0!important; color:var(--ink); overflow-wrap:anywhere; }
.search-suggestions { display:flex; flex-wrap:wrap; align-items:center; gap:6px; margin:10px 0 13px; }
.search-suggestions span { width:100%; color:var(--muted); font-size:10px; }
.details .search-suggestion { padding:5px 8px; border:1px solid var(--line); border-radius:4px; background:#f3f7f2; }
.search-highlight { padding:1px 2px; border-radius:2px; background:#ffdf7a; color:#26311b; font-weight:700; }
.admin-edit { margin:24px 0; padding:15px; border:1px solid #b9d4bf; border-radius:7px; background:#f1f7f1; }.admin-edit h3 { margin:0 0 7px; color:var(--green); }.admin-edit>p { margin-bottom:12px; color:var(--muted); }.admin-edit label { display:block; margin:10px 0; color:var(--ink); font-size:10px; font-weight:700; }.admin-edit input,.admin-edit select,.admin-edit textarea { display:block; width:100%; min-width:0; margin-top:4px; padding:7px; border:1px solid #cbd9cc; border-radius:4px; background:#fff; color:var(--ink); font:11px Inter,sans-serif; }.admin-edit-locations>strong { display:block; margin:17px 0 8px; font-size:11px; }.admin-location-row { display:grid; grid-template-columns:1fr 1fr; gap:0 8px; padding:10px 0; border-top:1px solid #d6e4d8; }.admin-location-row label { margin:3px 0; }.admin-row-actions,.admin-edit-actions { display:flex; flex-wrap:wrap; gap:10px; margin:9px 0; }.details .admin-edit button { padding:6px 8px; border-radius:4px; background:#e1ede3; }.details .admin-edit [type="submit"] { background:var(--green); color:#fff; }.details .admin-edit-status { margin-top:8px; color:var(--green); }
.search-result .search-open { margin-top:10px; }
.search-pagination { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:16px 0; border-top:1px solid var(--line); font-size:11px; }
.details-placeholder { margin-top:90px; }

@media (min-width:901px) {
  body { grid-template-rows:auto minmax(0,1fr); }
  .topbar { min-height:80px; gap:clamp(12px,1vw,20px); padding-inline:clamp(18px,1.6vw,26px); }
}
@media (min-width:901px) and (max-width:1550px) { .intro { display:none; } }
@media (min-width:901px) and (max-width:1250px) {
  .topbar { flex-wrap:wrap; align-content:center; gap:8px 16px; padding-block:11px; }
  .filters { order:5; width:100%; margin-left:0; }
}
@media (min-width:1850px) {
  .header-legend { position:static; display:flex; flex-wrap:nowrap; gap:11px; max-width:none; padding:0 0 0 20px; border:0; border-left:1px solid var(--line); border-radius:0; background:none; box-shadow:none; }
  .header-legend p { gap:5px; color:var(--muted); font-size:9px; }
  .header-legend .dot { width:7px; height:7px; }
  .header-legend .municipality-wide { width:10px; height:10px; }
  .map-legend { display:none; }
}
@media (max-width:900px) {
  body { grid-template-rows:auto auto minmax(0,1fr); grid-template-columns:minmax(0,1fr); height:100dvh; overflow:hidden; }
  .topbar { grid-column:1; grid-row:1; display:grid; grid-template-columns:minmax(0,1fr) auto auto; align-items:center; gap:6px 12px; min-height:0; max-height:46dvh; overflow-y:auto; padding:10px 16px; }
  .brand { grid-column:1; grid-row:1; font-size:19px; }
  .admin-link { grid-column:2; grid-row:1; font-size:12px; min-height:40px; display:flex; align-items:center; }
  .intro { display:none; }
  .stats { grid-column:1 / -1; grid-row:2; flex-direction:row; flex-wrap:wrap; align-items:baseline; gap:2px 12px; white-space:normal; }
  .stats strong { font-size:17px; }
  .stats span,.stats small { font-size:11px; }
  .filter-toggle { grid-column:3; grid-row:1; display:flex; align-items:center; gap:5px; min-height:40px; padding:0 9px; border:1px solid var(--line); border-radius:5px; background:#fff; color:var(--green); font:600 12px Inter,sans-serif; cursor:pointer; }
  .filter-toggle span { font-size:18px; line-height:1; transition:transform .15s; }
  .mobile-filters-open .filter-toggle span { transform:rotate(180deg); }
  .filters { grid-column:1 / -1; grid-row:3; display:none; width:100%; margin:5px 0 0; padding:12px 0 2px; border-top:1px solid var(--line); grid-template-columns:repeat(2,minmax(0,1fr)); align-items:end; gap:14px; }
  .mobile-filters-open .filters { display:grid; }
  .filters label { min-width:0; font-size:11px; }
  .filters label span { gap:8px; }
  .filters input,.filters select,.filters #category { width:100%; min-width:0; min-height:40px; padding:8px 2px; font-size:16px; }
  .filters label span input { flex:1 1 0; width:0; }
  .filters button { min-height:40px; text-align:left; font-size:13px; }
  .mobile-view-switch { grid-column:1; grid-row:2; display:grid; grid-template-columns:1fr 1fr; padding:5px 16px; gap:5px; border-bottom:1px solid var(--line); background:#fffefa; }
  .mobile-view-switch button { min-height:40px; border:0; border-radius:5px; background:transparent; color:var(--muted); font:600 14px Inter,sans-serif; cursor:pointer; }
  .mobile-view-switch button[aria-pressed="true"] { background:var(--green); color:#fff; }
  main,.details { grid-column:1; grid-row:3; min-height:0; }
  body[data-mobile-view="list"] main,body[data-mobile-view="map"] .details { display:none; }
  .details { padding:20px clamp(16px,4vw,32px) calc(24px + env(safe-area-inset-bottom)); border:0; }
  .details-placeholder { margin-top:32px; }
  .details h2 { font-size:19px; }
  .details p,.details li h3,.details .contract-list-open h3 { font-size:13px; }
  .details .meta,.details a,.details button,.details .contract-open span,.details .contract-list-open span { font-size:12px; }
  .details .contract-title { font-size:21px; }
  .details .search-controls input,.list-toolbar select,.report-form input,.report-form textarea,.admin-edit input,.admin-edit select,.admin-edit textarea { font-size:16px; }
  .details .search-controls button { min-height:44px; padding:9px 14px; font-size:13px; }
  .details .place-choice,.details .contract-open,.details .contract-list-open { min-height:44px; }
  .details .admin-edit button,.details .report-form button,.details .search-suggestion,.details .focus-location { min-height:38px; }
  .leaflet-control-zoom a { width:38px!important; height:38px!important; line-height:38px!important; }
  .leaflet-bottom { bottom:env(safe-area-inset-bottom); }
  .legend { top:10px; right:10px; max-width:calc(100% - 20px); padding:8px 10px; gap:6px 11px; }
  .legend p { font-size:10px; }
  #loading { top:64px; left:10px; }
}
@media (max-width:560px) {
  .filters { grid-template-columns:minmax(0,1fr); }
  .filters button { width:100%; text-align:center; border:1px solid var(--line); border-radius:5px; }
  .list-toolbar { align-items:flex-start; }
  .list-toolbar select { max-width:100%; }
  .admin-location-row { grid-template-columns:minmax(0,1fr); }
}
@media (max-width:360px) {
  .topbar { gap:4px 7px; padding:8px 10px; }
  .mobile-view-switch { padding:5px 10px; }
  .brand { font-size:17px; }
  .admin-link { font-size:11px; }
  .filter-toggle { padding:0 7px; }
  .contract-facts { grid-template-columns:minmax(0,1fr); }
}
