:root{--ink:#14221f;--muted:#64706c;--line:#dfe6e2;--paper:#f7f9f7;--red:#c92f45;--red-dark:#9e2134;--background:#fff;--foreground:#14221f;--card:#fff;--card-foreground:#14221f;--popover:#fff;--popover-foreground:#14221f;--primary:#c92f45;--primary-foreground:#fff;--secondary:#f0f4f1;--secondary-foreground:#14221f;--muted-foreground:#64706c;--accent:#f0f4f1;--accent-foreground:#14221f;--destructive:#b42338;--border:#dfe6e2;--input:#dfe6e2;--ring:#c92f45;--radius:.7rem}*{box-sizing:border-box}html,body{height:100%;margin:0;font-family:"Albert Sans",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;color:var(--ink);background:var(--paper)}button,input,textarea,select{font:inherit}.directory-shell{height:100dvh;display:grid;grid-template-columns:minmax(310px,25rem) 1fr;overflow:hidden}.directory-panel{position:relative;z-index:1000;background:rgba(255,255,255,.97);border-right:1px solid var(--line);display:flex;flex-direction:column;min-width:0;box-shadow:12px 0 35px rgba(21,37,32,.08);overflow:hidden}.directory-header{min-height:104px;display:flex;align-items:center;padding:21px 24px;border-bottom:1px solid var(--line)}.directory-header h1{max-width:300px;margin:0;font-size:17px;line-height:1.28;letter-spacing:-.015em}.directory-header p{margin:6px 0 0;color:var(--muted);font-size:12px;font-weight:650}.search-box{position:relative;margin:20px 22px 11px;display:block}.search-box svg{position:absolute;left:14px;top:50%;width:19px;height:19px;transform:translateY(-50%);color:var(--muted);fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}.search-box input{width:100%;height:48px;border:1px solid var(--line);border-radius:12px;padding:0 15px 0 44px;background:var(--paper);font-size:15px;outline:none}.search-box input:focus{background:#fff;border-color:#a9b7b0;box-shadow:0 0 0 3px rgba(80,110,97,.1)}.directory-summary{display:flex;align-items:center;justify-content:space-between;padding:0 24px 14px;color:var(--muted);font-size:13px}.directory-summary button{border:0;background:none;color:var(--red-dark);font-weight:700;cursor:pointer}.place-list{list-style:none;margin:0;padding:0 12px 28px;overflow:auto;min-height:0;flex:1 1 auto;scrollbar-gutter:stable;scrollbar-width:auto;scrollbar-color:#9caaa4 #edf1ef}.place-list::-webkit-scrollbar{width:12px}.place-list::-webkit-scrollbar-track{background:#edf1ef;border-radius:999px}.place-list::-webkit-scrollbar-thumb{min-height:48px;background:#9caaa4;border:3px solid #edf1ef;border-radius:999px}.place-list::-webkit-scrollbar-thumb:hover{background:#71817a}.place-row{position:relative;display:grid;grid-template-columns:34px 1fr;gap:12px;width:100%;padding:16px 13px;border:0;border-bottom:1px solid #edf0ee;background:transparent;text-align:left;cursor:pointer;border-radius:10px}.place-row:hover,.place-row.active{background:#f0f4f1}.place-row.active:after{content:"";position:absolute;left:0;top:14px;bottom:14px;width:3px;background:var(--red);border-radius:4px}.place-letter{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;background:#edf1ee;color:#456056;font-weight:800;font-size:13px}.place-row strong{display:block;font-size:15px;line-height:1.3;margin-bottom:5px}.place-row small{display:block;color:var(--muted);font-size:13px}.directory-panel footer{margin-top:auto;padding:17px 24px;border-top:1px solid var(--line);font-size:12px;color:var(--muted)}.map-panel,.map-canvas{position:relative;height:100%;min-width:0}.leaflet-container{background:#cbd9e4;font-family:inherit}.leaflet-tile-pane{filter:grayscale(.65) saturate(.65) brightness(1.08)}.leaflet-control-zoom{border:0!important;box-shadow:0 5px 18px rgba(30,45,40,.16)!important}.leaflet-control-zoom a{border:0!important;color:var(--ink)!important}.map-pin{width:28px;height:28px;border-radius:50% 50% 50% 0;background:var(--red);border:2px solid #fff;box-shadow:0 4px 10px rgba(44,28,31,.3);transform:rotate(-45deg);position:relative}.map-pin:after{content:"";position:absolute;width:8px;height:8px;border-radius:50%;background:white;left:8px;top:8px}.leaflet-popup-content-wrapper{border-radius:14px!important;box-shadow:0 16px 40px rgba(22,36,31,.2)!important;padding:4px}.leaflet-popup-content{margin:16px 18px!important;min-width:220px}.popup-title{font-size:17px;font-weight:800;line-height:1.2;margin:0 0 6px}.popup-city{color:var(--muted);font-size:13px;margin-bottom:10px}.popup-link{color:var(--red-dark);font-size:13px;font-weight:750;text-decoration:none}.map-key{position:absolute;z-index:500;right:22px;bottom:22px;background:rgba(255,255,255,.94);border-radius:10px;padding:10px 13px;font-size:12px;box-shadow:0 5px 20px rgba(30,45,40,.13)}.map-key span{display:inline-block;width:9px;height:9px;border-radius:50%;background:var(--red);margin-right:7px}.map-key b{font-weight:400}.mobile-list,.mobile-close{display:none}.load-error{margin:15px 22px;color:#a21d31;font-size:14px}.directory-title{min-width:0}.language-switch{display:flex;align-items:center;gap:5px;margin-left:auto;color:#a1aaa6;font-size:11px;font-weight:800;white-space:nowrap}.language-switch button{border:0;background:transparent;padding:7px 2px;color:var(--muted);font-size:11px;font-weight:800;cursor:pointer}.language-switch button.active{color:var(--red-dark)}.language-switch button:focus-visible{outline:2px solid var(--red);outline-offset:2px;border-radius:3px}
.admin-page{min-height:100dvh;background:#f4f6f5;padding:28px}.admin-wrap{max-width:1180px;margin:auto}.admin-top{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:24px}.admin-top h1{margin:0;font-size:25px}.admin-top p{margin:6px 0 0;color:var(--muted)}.admin-actions{display:flex;gap:9px}.button{border:0;border-radius:10px;padding:11px 15px;font-weight:750;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:8px}.button-primary{background:var(--red);color:white}.button-secondary{background:white;color:var(--ink);border:1px solid var(--line)}button.button:disabled{opacity:.55;cursor:wait}.admin-grid{display:grid;grid-template-columns:minmax(280px,370px) 1fr;gap:20px}.admin-card{background:white;border:1px solid var(--line);border-radius:15px;box-shadow:0 8px 26px rgba(21,37,32,.05);padding:20px}.admin-card h2{margin:0 0 17px;font-size:18px}.field{display:block;margin-bottom:13px}.field span{display:block;margin-bottom:6px;font-size:13px;font-weight:700}.field input,.field textarea,.field select{width:100%;border:1px solid var(--line);border-radius:9px;padding:10px 11px;background:#fbfcfb;outline:none}.field textarea{min-height:84px;resize:vertical}.coordinate-row{display:grid;grid-template-columns:1fr 1fr;gap:9px}.check-row{display:flex;gap:18px;margin:12px 0 17px;font-size:14px}.check-row label{display:flex;align-items:center;gap:7px}.form-buttons{display:flex;gap:8px}.admin-list{list-style:none;padding:0;margin:0}.admin-item{display:grid;grid-template-columns:1fr auto;gap:15px;padding:14px 0;border-bottom:1px solid #edf0ee}.admin-item:last-child{border-bottom:0}.admin-item strong{display:block}.admin-item small{color:var(--muted)}.admin-item-actions{display:flex;gap:7px;align-items:center}.icon-button{width:38px;height:38px;border:1px solid var(--line);background:white;border-radius:9px;display:grid;place-items:center;cursor:pointer;font-size:17px}.icon-button.danger{color:#a21d31}.status{margin-top:12px;font-size:13px;color:var(--muted)}.setup-card{max-width:460px;margin:10vh auto;background:white;padding:28px;border:1px solid var(--line);border-radius:16px;box-shadow:0 8px 26px rgba(21,37,32,.05)}.setup-card h1{margin:0 0 8px}.setup-card p{color:var(--muted);line-height:1.5}.setup-card input{width:100%;height:46px;border:1px solid var(--line);border-radius:9px;padding:0 12px;margin:8px 0 12px}.forbidden{max-width:520px;margin:15vh auto;text-align:center}.forbidden h1{font-size:24px}.forbidden p{color:var(--muted)}.admin-editor{position:sticky;top:28px;align-self:start;max-height:calc(100dvh - 56px);overflow:auto;scrollbar-gutter:stable}.login-error{padding:10px 12px;background:#fff0f2;color:#8e1d2d;border-radius:9px;font-size:13px;margin:10px 0}.success-box{padding:12px;background:#edf7f0;border-radius:9px;color:#25663a;margin:12px 0}.muted{color:var(--muted)}
@media(max-width:760px){.directory-shell{display:block}.directory-panel{position:absolute;inset:0 12% 0 0;transform:translateX(-105%);transition:.25s ease}.directory-panel.is-open{transform:none}.directory-header{min-height:96px;padding:18px;gap:9px}.directory-header h1{font-size:16px;max-width:230px}.mobile-close{display:block;margin-left:0;padding:4px;border:0;background:none;color:var(--muted)}.mobile-close svg,.mobile-list svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round}.mobile-list{display:flex;position:absolute;z-index:500;left:14px;top:14px;height:43px;align-items:center;gap:9px;border:0;border-radius:10px;padding:0 15px;background:white;box-shadow:0 5px 20px rgba(30,45,40,.18);font-weight:750;color:var(--ink)}.map-key{right:14px;bottom:14px}.leaflet-control-zoom{margin-top:70px!important}.admin-page{padding:18px}.admin-grid{grid-template-columns:1fr}.admin-top{display:block}.admin-actions{margin-top:15px;flex-wrap:wrap}.admin-editor{position:static;max-height:none;overflow:visible}}

/* Address / coordinates usability patch */
.field-help{display:block;margin-top:6px;color:var(--muted);font-size:12px;line-height:1.4;font-weight:500}
.popup-address{color:var(--ink);font-size:13px;line-height:1.45;margin:-2px 0 12px;max-width:280px}
.popup-city+.popup-address{margin-top:-5px}
.popup-address+.popup-link{display:inline-block;margin-top:1px}

/* Optional organisation description in map popups */
.popup-description{font-size:13px;line-height:1.5;color:var(--ink);white-space:pre-line;overflow-wrap:anywhere;margin:0 0 12px;max-width:280px}


/* City and complete address share one flowing line in the public popup. */
.popup-location {
  color: var(--muted);
  font-size: 13px;
  line-height: 1.5;
  margin: 0 0 12px;
  max-width: 450px;
  overflow-wrap: anywhere;
}
.popup-separator { color: #98a39d; padding: 0 4px; }
.leaflet-popup-content { max-width: min(450px, calc(100vw - 90px)); }
.popup-description { max-width: 450px; }


/* Compact popup with location icon and natural address wrapping. */
.leaflet-popup-content {
  width: min(290px, calc(100vw - 100px)) !important;
  min-width: 0;
  max-width: 100%;
  overflow-wrap: break-word;
}
.popup-location {
  max-width: 100%;
  line-height: 1.5;
  overflow-wrap: anywhere;
  white-space: normal;
}
.popup-location-icon {
  display: inline-block;
  width: 13px;
  height: 13px;
  vertical-align: -2px;
  margin: 0 4px 0 5px;
  color: #a74a56;
  flex-shrink: 0;
}
.popup-description { max-width: 100%; }

/* Address takes precedence over city: no repeated Norwich etc. */
.popup-location-icon { margin: 0 5px 0 0; }
.popup-location-text { overflow-wrap: anywhere; }

/* Small, monochrome folded-map icon, with a single-space-sized gap. */
.popup-location {
  display: flex;
  align-items: flex-start;
  gap: 4px;
}
.popup-location-icon {
  display: block;
  flex: 0 0 14px;
  width: 14px;
  height: 14px;
  margin: 3px 0 0;
  color: #a74a56;
}
.popup-location-text { min-width: 0; overflow-wrap: anywhere; }

/* Single full address can be longer than the former city subtitle. */
.place-row span:not(.place-letter) { min-width: 0; }
.place-row small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; }


/* v12: alphabetical city filter (public and admin). */
.city-filter-row{margin:0 22px 13px;display:flex;flex-direction:column;gap:6px}
.city-filter-row label{font-size:12px;font-weight:700;color:var(--muted)}
.city-filter-row select{width:100%;height:43px;border:1px solid var(--line);border-radius:10px;background:var(--paper);color:var(--ink);padding:0 12px;cursor:pointer;outline:none}
.city-filter-row select:focus-visible,.admin-filters select:focus-visible,.admin-filters input:focus-visible{border-color:#a9b7b0;box-shadow:0 0 0 3px rgba(80,110,97,.1)}
.admin-filters{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:8px}
.admin-filters label{font-size:12px;font-weight:700;color:var(--muted)}
.admin-filters select,.admin-filters input{display:block;width:100%;min-width:0;height:42px;margin-top:7px;padding:0 11px;background:#fbfcfb;border:1px solid var(--line);border-radius:9px;color:var(--ink);outline:none;font-size:14px;font-weight:400}
.admin-filter-count{font-size:12px;color:var(--muted);margin:0 0 9px}
@media(max-width:980px){.admin-filters{grid-template-columns:1fr}}

/* v13: search by any fragment; A–Z sort without city selection dropdown. */
.directory-sort{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:0 22px 13px}
.directory-sort span,.admin-sort span{font-size:12px;color:var(--muted);font-weight:700;margin-right:3px}
.directory-sort button,.admin-sort button{font:inherit;font-size:12px;font-weight:700;padding:8px 11px;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--muted);cursor:pointer}
.directory-sort button.active,.admin-sort button.active{background:#edf1ee;color:var(--ink);border-color:#c9d5ce}
.directory-sort button:focus-visible,.admin-sort button:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.admin-filters{display:block;margin-bottom:10px}
.admin-sort{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:12px}
@media(max-width:760px){.directory-sort{margin-left:18px;margin-right:18px}}


/* v14 — private admin review progress (white -> green -> red -> white) */
.review-legend{display:flex;align-items:center;gap:12px 16px;flex-wrap:wrap;margin:12px 0 10px;padding:12px 13px;border:1px solid #e5eae7;border-radius:10px;background:#fafcfb;font-size:12px;color:#46554e}
.review-legend>span{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}
.review-legend-label{font-weight:750;color:var(--ink)}
.review-legend small{display:block;flex-basis:100%;font-size:11px;line-height:1.4;color:var(--muted)}
.review-dot{display:inline-block;width:15px;height:15px;border-radius:50%;border:2px solid #a5afa9;background:#fff;flex-shrink:0}
.review-dot.review-green{background:#32a568;border-color:#218354}
.review-dot.review-red{background:#d14b50;border-color:#b02e35}
.review-dot.review-white{background:#fff;border-color:#b1b9b5}
.review-toggle{width:37px;height:37px;display:grid;place-items:center;background:#fff;border:1px solid var(--line);border-radius:9px;cursor:pointer;flex-shrink:0}
.review-toggle:hover{border-color:#9aa9a0;background:#f8faf8}
.review-toggle:focus-visible{outline:2px solid var(--red);outline-offset:2px}
.admin-item.review-row-green{background:#f1faf4;border-radius:8px;padding-left:9px;padding-right:9px}
.admin-item.review-row-red{background:#fff4f4;border-radius:8px;padding-left:9px;padding-right:9px}
.admin-item.review-row-white{background:transparent}
.admin-item>div:first-child{min-width:0;overflow-wrap:anywhere}
@media(max-width:620px){.admin-item{gap:8px}.admin-item-actions{gap:4px}.review-toggle,.icon-button{width:34px;height:34px}.review-legend{gap:8px 12px}}

/* v15: optional city-only organisations (no precise GPS). */
.city-only-switch{display:flex;align-items:center;gap:9px;padding:12px 11px;border:1px solid #dce6df;border-radius:10px;background:#f7faf8;font-size:13px;font-weight:750;cursor:pointer;margin:5px 0 0}
.city-only-switch input{width:17px;height:17px;accent-color:#b43d4c;flex-shrink:0}
.city-only-explain{margin:7px 0 15px}
#cityOnlyField[hidden],#preciseLocationFields[hidden],#cityOnlyNotice[hidden]{display:none!important}
.city-only-notice{margin:0 22px 12px;padding:11px 13px;background:#f2f5f3;border:1px solid #dce5df;border-radius:9px;font-size:12px;line-height:1.5;color:#43594d}
@media(max-width:760px){.city-only-notice{margin-left:18px;margin-right:18px}}

.city-only-notice .popup-title{font-size:15px;margin:8px 0 7px}
.city-only-notice .popup-location{font-size:12px;margin-bottom:10px}
.city-only-notice .popup-description{font-size:12px;margin-bottom:10px}
.city-only-hint{font-size:12px;color:#43594d;margin:0 0 10px}
.city-only-notice .popup-link{font-size:12px}

/* v17: city-centre pins for city-only organisations. */
.map-pin-city{background:#c92f45;border-style:dashed}
.map-pin-city:after{background:#fff;width:10px;height:10px;left:7px;top:7px}


/* v18: two kinds of organisations — exact-location red vs city-centre blue. */
.map-pin-city { background:#287eb2; border:2px solid #fff; }
.map-pin-city:after { background:#fff; width:8px; height:8px; left:8px; top:8px; }
.map-key { display:flex; flex-direction:column; gap:7px; max-width:min(350px,calc(100% - 24px)); }
.map-key-row { display:flex; align-items:center; gap:7px; line-height:1.35; }
.map-key .map-key-dot { display:inline-block; width:10px; height:10px; margin:0; border-radius:50%; flex:0 0 10px; }
.map-key .map-key-dot-regular { background:var(--red); }
.map-key .map-key-dot-city { background:#287eb2; }

/* Admin list: consistent full-width rows and aligned content for every review colour. */
.admin-list .admin-item,
.admin-list .admin-item.review-row-white,
.admin-list .admin-item.review-row-green,
.admin-list .admin-item.review-row-red {
  box-sizing: border-box;
  width: 100%;
  padding: 14px 10px;
}


/* v19 — founding-year eagle. No badge background, frame or drop shadow. */
.popup-title .popup-eagle {
  display:inline-flex;
  position:relative;
  align-items:center;
  justify-content:center;
  vertical-align:-.07em;
  width:1.02em;
  height:1.02em;
  padding:0;
  margin:0 0 0 -2px;
  border:0;
  border-radius:0;
  background:transparent;
  box-shadow:none;
  filter:none;
  cursor:help;
  -webkit-tap-highlight-color:transparent;
}
.popup-title .popup-eagle img {
  display:block;
  width:.96em;
  height:.96em;
  object-fit:contain;
  border:0;
  background:none;
  box-shadow:none;
  filter:none;
}
.popup-title .popup-eagle:focus-visible {
  outline:2px solid #8c9690;
  outline-offset:2px;
  border-radius:3px;
}
.popup-eagle-tooltip {
  display:block;
  position:absolute;
  z-index:1100;
  top:calc(100% + 7px);
  left:50%;
  transform:translate(-50%,-4px);
  width:max-content;
  max-width:min(225px,calc(100vw - 120px));
  padding:7px 10px;
  border-radius:7px;
  background:#26312d;
  color:#fff;
  font:600 12px/1.35 "Albert Sans",sans-serif;
  text-align:center;
  white-space:normal;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:opacity .12s ease,transform .12s ease,visibility .12s ease;
}
.popup-eagle:hover .popup-eagle-tooltip,
.popup-eagle:focus-visible .popup-eagle-tooltip,
.popup-eagle.is-open .popup-eagle-tooltip {
  opacity:1;
  visibility:visible;
  transform:translate(-50%,0);
}
/* Touch browsers may keep :hover active after a tap. Only an open tap or
   keyboard focus should show the tooltip on a touch-only device. */
@media (hover:none) {
  .popup-eagle:hover:not(.is-open):not(:focus-visible) .popup-eagle-tooltip {
    opacity:0;
    visibility:hidden;
    transform:translate(-50%,-4px);
  }
}
@media (prefers-reduced-motion:reduce){.popup-eagle-tooltip{transition:none}}


/* v20: language selector outside the list, in the map's top-right corner. */
.map-panel > .language-switch {
  position:absolute;
  z-index:650;
  top:16px;
  right:16px;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:6px;
  margin:0;
  padding:4px 10px;
  min-height:40px;
  background:rgba(255,255,255,.97);
  border:1px solid #dfe6e2;
  border-radius:10px;
  color:#a1aaa6;
  font-size:12px;
  font-weight:800;
}
.map-panel > .language-switch button {
  padding:7px 4px;
  font-size:12px;
  line-height:1.25;
}
/* Leaflet's zoom controls are also in the top-right corner. */
.map-panel .leaflet-top.leaflet-right .leaflet-control-zoom {
  margin-top:74px!important;
}
@media (max-width:760px) {
  .map-panel > .language-switch { top:14px;right:14px; }
  .directory-header .mobile-close { margin-left:auto; flex-shrink:0; }
  /* Don't leave a partially covered language selector visible behind the open drawer. */
  .directory-panel.is-open ~ .map-panel > .language-switch { visibility:hidden; }
}


/* v22: compact third legend row for organisation age — smaller black outline eagle. */
.map-key .map-key-eagle {
  display:block;
  width:18px;
  height:18px;
  flex:0 0 18px;
  object-fit:contain;
  border:0;
  background:transparent;
  box-shadow:none;
  filter:none;
}
.map-key-row-age { cursor:help; }


/* v20: remember-me login checkbox and custom confirm modal. */
.remember-signin{display:flex;align-items:center;gap:9px;margin:0 0 16px;font-size:14px;color:#3b5149;cursor:pointer}.remember-signin input{width:16px;height:16px;margin:0;accent-color:#b42b40;flex:0 0 16px}.confirm-modal[hidden]{display:none!important}.confirm-modal{position:fixed;inset:0;z-index:2000;display:grid;place-items:center;padding:22px;background:rgba(18,28,25,.46);backdrop-filter:blur(3px)}.confirm-modal__dialog{width:min(440px,calc(100vw - 32px));background:#fff;border:1px solid #dfe6e2;border-radius:18px;box-shadow:0 20px 60px rgba(15,25,22,.25);padding:22px}.confirm-modal__title{margin:0 0 8px;font-size:21px;line-height:1.2}.confirm-modal__text{margin:0;color:#586560;line-height:1.55}.confirm-modal__actions{display:flex;justify-content:flex-end;gap:10px;margin-top:18px}.confirm-modal__actions .button{min-width:112px;justify-content:center}@media(max-width:560px){.confirm-modal{padding:16px}.confirm-modal__dialog{width:min(100%,calc(100vw - 20px));padding:18px}.confirm-modal__actions{flex-direction:column-reverse}.confirm-modal__actions .button{width:100%}}