/* ============================================================
   JBS Interactive Property Map — component styles
   Ported from jbs/map.html. Everything is scoped under .jbs-map so
   the mockup's generic helper classes (.btn, .chip, .eyebrow ...)
   never collide with Elementor / theme styles. Shared header, footer,
   CTA band and scroll-to-top are theme-owned and NOT included here.
   Design tokens are (re)declared on :root so they resolve site-wide.
   ============================================================ */
:root{
  --red:#FF0533;
  --red-deep:#D40029;
  --red-tint:#FFE9ED;
  --red-tint-border:#FFC3CE;

  --ink:#16181C;
  --ink-soft:#43474E;
  --stone:#6E695E;
  --sand:#A99C86;

  --paper:#FBF8F3;
  --cream:#F2ECE3;
  --cream-deep:#EDE6DB;
  --line:#EFE9DF;
  --line-deep:#E2D9CC;

  --serif:'Newsreader',Georgia,serif;
  --sans:'Mulish',-apple-system,BlinkMacSystemFont,sans-serif;

  --radius:12px;
  --jbs-map-max:1200px;
}

/* ---- wrapper + base ---- */
.jbs-map{
  max-width:var(--jbs-map-max);margin:0 auto;padding:0;
  font-family:var(--sans);color:var(--ink);line-height:1.6;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
.jbs-map *{box-sizing:border-box}
.jbs-map img{max-width:100%;display:block}
.jbs-map a{color:inherit;text-decoration:none}
.jbs-map button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}
/* Neutralise the Elementor global-kit button padding (16px 28px), which would
   otherwise inflate our fixed-size / self-padded buttons via border-box. */
.jbs-map .map-pin,
.jbs-map .popup-close{padding:0}

/* ---- helpers ---- */
.jbs-map .eyebrow{font-size:11.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--stone)}
.jbs-map .h-section{font-family:var(--serif);font-size:clamp(30px,3.4vw,40px);font-weight:600;letter-spacing:-.015em;line-height:1.06;color:var(--ink)}
.jbs-map .lede{font-size:16px;line-height:1.6;color:var(--ink-soft)}
.jbs-map .sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

.jbs-map .btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-weight:700;font-size:15px;border-radius:6px;padding:14px 28px;
  transition:transform .18s ease,box-shadow .18s ease,background .18s ease,color .18s ease;
}
.jbs-map .btn-red{background:var(--red);color:#fff;box-shadow:0 6px 18px rgba(255,5,51,.28)}
.jbs-map .btn-red:hover{background:var(--red-deep);transform:translateY(-2px);box-shadow:0 10px 26px rgba(255,5,51,.36)}
.jbs-map .btn-ghost{background:transparent;color:var(--ink);border:1.5px solid var(--ink);padding:12.5px 26px}
.jbs-map .btn-ghost:hover{background:var(--ink);color:#fff;transform:translateY(-2px)}
.jbs-map .btn-sm{font-size:14px;padding:12px 22px}
.jbs-map .link-red{
  display:inline-flex;align-items:center;gap:7px;color:var(--red);font-weight:700;font-size:14px;
  background:none;border-radius:0;box-shadow:none;
  border-bottom:1.5px solid var(--red);padding:0 0 2px;transition:gap .18s ease,color .18s ease;
}
.jbs-map .link-red:hover{gap:11px;color:var(--red-deep);background:none}

.jbs-map .reveal{opacity:0;transform:translateY(26px);transition:opacity .7s cubic-bezier(.22,.61,.36,1),transform .7s cubic-bezier(.22,.61,.36,1)}
.jbs-map .reveal.in{opacity:1;transform:none}
@media (prefers-reduced-motion:reduce){.jbs-map .reveal{opacity:1;transform:none;transition:none}}

/* ============================================================
   PAGE HEAD + FILTERS
   ============================================================ */
.jbs-map .page-head .inner{display:flex;flex-direction:column;gap:12px;max-width:680px}
.jbs-map .eyebrow-row{display:flex;align-items:center;gap:12px}
.jbs-map .tag-priority{font-size:10px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#fff;background:var(--red);border-radius:4px;padding:3px 8px}

.jbs-map .filter-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:26px 0 24px}
.jbs-map .chip{
  position:relative;display:inline-flex;align-items:center;gap:7px;
  font-size:13px;font-weight:600;color:var(--ink);background:#fff;
  border:1px solid #D9CFC0;border-radius:999px;padding:9px 16px;box-shadow:none;
  transition:border-color .18s ease,background .18s ease,color .18s ease;
}
.jbs-map .chip:hover,.jbs-map .chip:focus{background:#fff;border-color:var(--ink)}
.jbs-map .chip.on{background:var(--ink);color:#fff;border-color:var(--ink)}
.jbs-map .chip svg{transition:transform .2s ease}
.jbs-map .chip[aria-expanded="true"] svg{transform:rotate(180deg)}
.jbs-map .clear-filters{color:var(--red);font-weight:700;font-size:13px;background:none;border-radius:0;box-shadow:none;border-bottom:1.5px solid var(--red);padding:0 0 1px}
.jbs-map .clear-filters:hover{background:none}
.jbs-map .result-count{margin-left:auto;font-size:13px;color:var(--stone)}

.jbs-map .chip-menu{
  position:absolute;top:calc(100% + 8px);left:0;z-index:400;min-width:200px;
  background:#fff;border:1px solid var(--line-deep);border-radius:10px;box-shadow:none;padding:6px;
  opacity:0;transform:translateY(-6px);pointer-events:none;
  transition:opacity .2s ease,transform .2s ease;
}
.jbs-map .chip-menu.open{opacity:1;transform:none;pointer-events:auto}
.jbs-map .chip-menu button{
  display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;
  text-align:left;font-size:13.5px;font-weight:600;color:var(--ink);box-shadow:none;
  padding:10px 12px;border-radius:7px;transition:background .15s ease;
}
.jbs-map .chip-menu button:hover{background:var(--paper)}
.jbs-map .chip-menu button.sel{color:var(--red)}
.jbs-map .chip-menu button.sel::after{content:"✓";font-weight:800}
.jbs-map .sheet-backdrop{position:fixed;inset:0;z-index:930;background:rgba(22,24,28,.45);opacity:0;pointer-events:none;transition:opacity .25s ease}
.jbs-map .sheet-backdrop.show{opacity:1;pointer-events:auto}

/* ============================================================
   MAP + SPLIT VIEW
   ============================================================ */
.jbs-map .map-layout{display:grid;grid-template-columns:1.45fr 1fr;gap:20px;align-items:stretch}
/* full-width map when the synced property list is hidden (sidebar="no") */
.jbs-map--no-list .map-layout{grid-template-columns:1fr}
.jbs-map .map-frame{
  position:relative;height:640px;border-radius:var(--radius);overflow:hidden;
  border:1px solid var(--line-deep);background:#EAE3D7;
}

/* Google Maps engine: the map renders into .jbs-gmap behind the overlays
   (legend, filter bar, popup, empty state). z-index:0 contains Google's own
   high internal z-indexes so the overlays (z>=1) always sit above the map. */
.jbs-map .jbs-gmap{position:absolute;inset:0;z-index:0}
.jbs-map .map-legend{z-index:2}
.jbs-map .map-empty{z-index:3}
.jbs-map .map-attr{display:none} /* Google Maps renders its own attribution */
.jbs-map .map-world{
  position:absolute;left:calc(50% - 1536px);top:calc(50% - 1024px);
  width:3072px;height:2048px;will-change:transform;
}
.jbs-map .map-tiles{
  position:absolute;inset:0;display:grid;grid-template-columns:repeat(12,256px);
  filter:sepia(.18) saturate(.82) brightness(1.02);
}
.jbs-map .map-tiles img{width:256px;height:256px;display:block;pointer-events:none;-webkit-user-select:none;user-select:none}
.jbs-map .map-attr{
  position:absolute;right:8px;bottom:6px;z-index:5;font-size:10px;color:rgba(22,24,28,.55);
  background:rgba(255,255,255,.7);padding:2px 7px;border-radius:4px;
}
.jbs-map .map-attr a{text-decoration:underline}
.jbs-map .map-zoom{
  position:absolute;top:16px;right:16px;z-index:5;display:flex;flex-direction:column;
  background:#fff;border:1px solid var(--line-deep);border-radius:8px;overflow:hidden;
  box-shadow:0 6px 18px rgba(0,0,0,.12);
}
.jbs-map .map-zoom button{
  width:38px;height:38px;padding:0;font-size:20px;font-weight:600;line-height:1;color:var(--ink);
  display:flex;align-items:center;justify-content:center;transition:background .15s ease,color .15s ease;
}
.jbs-map .map-zoom button:hover{background:var(--paper);color:var(--red)}
.jbs-map .map-zoom button + button{border-top:1px solid var(--line)}
.jbs-map .map-legend{
  position:absolute;top:16px;left:16px;z-index:5;background:#fff;border:1px solid var(--line-deep);
  pointer-events:none;border-radius:10px;padding:13px 15px;box-shadow:0 6px 18px rgba(0,0,0,.08);
  display:flex;flex-direction:column;gap:9px;
}
.jbs-map .map-legend .t{font-size:10.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--stone)}
.jbs-map .legend-row{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:600}
.jbs-map .pin-dot{width:14px;height:14px;border-radius:50% 50% 50% 2px;flex:none}
.jbs-map .pin-dot.sold{background:var(--red)}
.jbs-map .pin-dot.rated{background:#fff;border:2px solid var(--red)}
.jbs-map .pin-dot.bought{background:var(--ink)}

.jbs-map .map-pin{
  position:absolute;width:26px;height:26px;border-radius:50% 50% 50% 3px;
  transform:translate(-50%,-100%);cursor:pointer;z-index:4;
  box-shadow:0 4px 10px rgba(0,0,0,.3);
  transition:transform .18s ease,opacity .3s ease;
}
.jbs-map .map-pin:hover{transform:translate(-50%,-100%) scale(1.18)}
.jbs-map .map-pin.sold{background:var(--red)}
.jbs-map .map-pin.bought{background:var(--ink)}
.jbs-map .map-pin.rated{background:#fff;border:2.5px solid var(--red)}
.jbs-map .map-pin.dim{opacity:.15;pointer-events:none}
.jbs-map .map-pin.active{
  width:34px;height:34px;z-index:5;
  box-shadow:0 0 0 7px rgba(255,5,51,.18),0 6px 14px rgba(0,0,0,.35);
}
.jbs-map .map-pin.active::after{
  content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:9px;height:9px;border-radius:50%;background:#fff;
}
.jbs-map .map-pin.rated.active::after{background:var(--red)}

.jbs-map .map-markers{position:absolute;inset:0}
.jbs-map .map-cluster{
  position:absolute;transform:translate(-50%,-50%);
  min-width:32px;height:32px;padding:0 9px;border-radius:999px;
  display:inline-flex;align-items:center;justify-content:center;
  background:var(--red);color:#fff;font-family:var(--sans);font-size:13px;font-weight:700;line-height:1;
  border:2px solid #fff;box-shadow:0 3px 10px rgba(0,0,0,.32);
  cursor:pointer;z-index:4;transition:transform .15s ease;
}
.jbs-map .map-cluster:hover{transform:translate(-50%,-50%) scale(1.1)}

.jbs-map .map-chooser{
  position:absolute;z-index:8;left:50%;top:50%;transform:translate(-50%,-50%) scale(.98);
  width:min(340px,calc(100% - 28px));max-height:calc(100% - 28px);
  background:#fff;border-radius:var(--radius);box-shadow:0 24px 60px rgba(22,24,28,.28);
  display:flex;flex-direction:column;overflow:hidden;
  opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;
}
.jbs-map .map-chooser.show{opacity:1;pointer-events:auto;transform:translate(-50%,-50%) scale(1)}
.jbs-map .map-chooser-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 14px;border-bottom:1px solid #eee}
.jbs-map .map-chooser-title{font-weight:700;font-size:13px}
.jbs-map .map-chooser-close{width:26px;height:26px;border-radius:50%;background:rgba(22,24,28,.08);font-size:16px;line-height:1;cursor:pointer;border:0;flex:none}
.jbs-map .map-chooser-list{overflow-y:auto;padding:6px}
.jbs-map .map-chooser-row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:9px 10px;border:0;background:none;border-radius:8px;cursor:pointer}
.jbs-map .map-chooser-row:hover{background:#f6f7f7}
.jbs-map .map-chooser-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.jbs-map .map-chooser-info b{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jbs-map .map-chooser-info small{font-size:11.5px;color:var(--stone)}
.jbs-map .map-chooser-score{font-weight:700;font-size:12px;color:var(--red);flex:none}
.jbs-map .map-chooser-more{padding:8px 12px;margin:0;font-size:11.5px;color:var(--stone);text-align:center}

.jbs-map .map-tooltip{
  position:absolute;z-index:6;background:var(--ink);color:#fff;
  font-size:11.5px;font-weight:600;padding:6px 11px;border-radius:6px;white-space:nowrap;
  transform:translate(-50%,-135%);pointer-events:none;opacity:0;transition:opacity .15s ease;
}
.jbs-map .map-tooltip.show{opacity:1}
.jbs-map .map-tooltip::after{
  content:"";position:absolute;left:50%;top:100%;transform:translateX(-50%);
  border:5px solid transparent;border-top-color:var(--ink);
}

/* popup (desktop) */
.jbs-map .map-popup{
  position:absolute;z-index:7;width:300px;background:#fff;border-radius:var(--radius);
  box-shadow:0 24px 60px rgba(22,24,28,.28);overflow:hidden;
  opacity:0;pointer-events:none;transform:translateY(10px);
  transition:opacity .25s ease,transform .25s ease;
}
.jbs-map .map-popup.show{opacity:1;pointer-events:auto;transform:translateY(0)}
.jbs-map .popup-media{position:relative;height:120px;overflow:hidden;background:#DAD1C2}
.jbs-map .popup-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.jbs-map .popup-close{
  position:absolute;top:10px;right:10px;width:26px;height:26px;border-radius:50%;z-index:3;
  background:rgba(22,24,28,.7);color:#fff;font-size:15px;line-height:1;
  display:flex;align-items:center;justify-content:center;transition:background .18s ease;
  /* Mulish's top-heavy metrics push the × ~1.3px low; nudge the glyph up.
     border-box keeps the circle at 26px, so only the glyph shifts, not the button. */
  padding-bottom:2px;
}
.jbs-map .popup-close:hover{background:var(--red)}
.jbs-map .popup-status{
  position:absolute;left:10px;bottom:10px;z-index:3;font-size:9.5px;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase;color:#fff;background:var(--red);border-radius:4px;padding:4px 8px;
}
.jbs-map .popup-status.bought{background:var(--ink)}
.jbs-map .popup-body{padding:14px 16px 16px}
.jbs-map .popup-suburb{font-size:10.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--red);margin-bottom:5px}
.jbs-map .popup-body h3{font-family:var(--serif);font-size:18px;font-weight:600;line-height:1.2;margin-top:0;margin-bottom:10px}
.jbs-map .popup-score{display:inline-flex;align-items:baseline;gap:3px;margin-top:0;margin-bottom:0;font-size:12px;color:var(--stone)}
.jbs-map .popup-score b{font-size:16px;color:var(--ink)}
.jbs-map .popup-agent{display:flex;align-items:center;gap:10px;margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
.jbs-map .popup-agent .avatar{
  width:32px;height:32px;border-radius:50%;flex:none;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  background:var(--cream);font-size:11px;font-weight:800;color:var(--stone);
}
.jbs-map .popup-agent .avatar img{width:100%;height:100%;object-fit:cover;display:block}
.jbs-map .popup-agent b{font-size:12.5px;display:block}
.jbs-map .popup-agent span{font-size:11px;color:var(--stone)}
.jbs-map .popup-actions{display:flex;gap:8px;margin-top:13px}
.jbs-map .popup-actions .btn{flex:1;font-size:12.5px;padding:10px 8px;border-radius:7px}
.jbs-map .popup-actions .btn-ghost{padding:8.5px 8px}
.jbs-map .sheet-handle{display:none}

/* --- popup loading state ---------------------------------------------------
   The card opens instantly on the light fields (suburb/address/score/status);
   the photo and agent block (avatar/name/phone) are fetched on click. While
   that's in flight we show a skeleton shimmer so the card never looks broken
   or half-empty. Two triggers: .is-loading on the popup covers the detail
   fetch; .img-pending on the media covers the photo still downloading after
   the fetch resolved (JS clears it on the img's load/error). */
@keyframes jbs-skel{to{background-position:-200% 0}}

.jbs-map .map-popup.is-loading .popup-media,
.jbs-map .popup-media.img-pending{
  background-image:linear-gradient(90deg,#DAD1C2 0%,#EBE4D7 50%,#DAD1C2 100%);
  background-size:200% 100%;animation:jbs-skel 1.15s ease-in-out infinite;
}
/* Fade the real photo in once it has painted; hide it while the skeleton shows. */
.jbs-map .popup-media img{opacity:1;transition:opacity .3s ease}
.jbs-map .map-popup.is-loading .popup-media img,
.jbs-map .popup-media.img-pending img{opacity:0}

/* Agent block → shimmer avatar + two skeleton bars for the name and phone. */
.jbs-map .map-popup.is-loading .popup-agent .avatar,
.jbs-map .map-popup.is-loading .popup-agent b,
.jbs-map .map-popup.is-loading .popup-agent span{
  color:transparent;
  background-image:linear-gradient(90deg,#E4DDD0 0%,#F2ECE1 50%,#E4DDD0 100%);
  background-size:200% 100%;animation:jbs-skel 1.15s ease-in-out infinite;
}
.jbs-map .map-popup.is-loading .popup-agent b,
.jbs-map .map-popup.is-loading .popup-agent span{display:block;border-radius:4px}
.jbs-map .map-popup.is-loading .popup-agent b{width:104px;height:11px;margin-bottom:5px}
.jbs-map .map-popup.is-loading .popup-agent span{width:76px;height:9px}

@media (prefers-reduced-motion:reduce){
  .jbs-map .map-popup.is-loading .popup-media,
  .jbs-map .popup-media.img-pending,
  .jbs-map .map-popup.is-loading .popup-agent .avatar,
  .jbs-map .map-popup.is-loading .popup-agent b,
  .jbs-map .map-popup.is-loading .popup-agent span{animation:none}
}

/* --- enquiry form in the popup (form="yes") --------------------------------
   The popup becomes a flex column so the media stays fixed and the body (with
   the form) scrolls, keeping the card within the map frame on desktop. */
.jbs-map .map-popup.has-enquiry{
  display:flex;flex-direction:column;width:330px;max-height:calc(100% - 28px);
}
.jbs-map .map-popup.has-enquiry .popup-media{flex:none}
.jbs-map .map-popup.has-enquiry .popup-body{overflow-y:auto;min-height:0}
.jbs-map .popup-enquiry{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.jbs-map .popup-enquiry-title{
  font-size:10.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:var(--ink);margin-bottom:10px;
}

/* Scoped Gravity Forms styling — compact, brand-red submit. Chained to the
   wrapper class (jbs-map-enquiry_wrapper, from the form's CSS Class Name) and
   kept inside .jbs-map so it never leaks to other forms (e.g. the newsletter). */
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper{margin:0}
/* Use GF's native 12-column grid (not flex-column) so the field widths set in
   the form editor — e.g. Name + Phone as two Half-width columns in one row —
   are honoured. GF outputs .gfield--width-half etc. which set grid-column spans;
   forcing flex-column here previously flattened every field to its own row. */
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gform_fields{
  display:grid;grid-template-columns:repeat(12,minmax(0,1fr));
  /* 8px both ways: columns keep Name+Phone hugging side-by-side, rows stack
     tight (row-gap here overrides the global .gform_wrapper .gform_fields row-gap). */
  column-gap:8px;row-gap:8px;
}
/* Default any field to the full row; GF's width modifiers below narrow it. */
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gfield{grid-column:span 12}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gfield--width-half{grid-column:span 6}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gfield--width-third{grid-column:span 4}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gfield--width-two-thirds{grid-column:span 8}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gfield--width-quarter{grid-column:span 3}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gfield_label{
  font-size:11px;font-weight:700;color:var(--ink);margin-bottom:4px;
}
/* !important throughout the inputs + button: GF's Orbital theme styles them with
   a ~(0,6,1) framework selector (.gform-theme--framework.gform-theme.gform_wrapper
   input[type=submit].button.gform_button, and the input equivalents) that
   out-specifies ours and pulls in its blue bg / 3px radius. Orbital sets no
   !important, so this wins cleanly — same approach as the newsletter form. */
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper input[type="text"],
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper input[type="email"],
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper input[type="tel"],
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper textarea{
  width:100% !important;font:inherit;font-size:13px;color:var(--ink);
  padding:9px 11px !important;border:1px solid var(--line-deep) !important;
  border-radius:8px !important;background:#fff !important;box-sizing:border-box;
  transition:border-color .15s ease;
}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper input:focus,
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper textarea:focus{
  outline:none;border-color:var(--red) !important;
}
/* Explicit height (not just min-height) — GF gives the textarea a tall `rows`
   default, so a min-height alone won't bring it down to 55px. resize stays on. */
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper textarea{height:55px;min-height:55px;resize:vertical}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gform_footer{margin:12px 0 0;padding:0}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gform_button{
  width:100% !important;font:inherit !important;font-size:13px !important;font-weight:700 !important;
  cursor:pointer;padding:11px 14px !important;border:0 !important;border-radius:8px !important;
  background:var(--red) !important;color:#fff !important;
  transition:background .18s ease,transform .05s ease;
}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gform_button:hover{background:#d1042b !important}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gform_button:active{transform:translateY(1px)}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gfield_required{color:var(--red)}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .validation_message,
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gfield_validation_message{
  font-size:11.5px;color:var(--red);margin-top:4px;background:none;border:0;padding:0;
}
.jbs-map .gform_wrapper.jbs-map-enquiry_wrapper .gform_validation_errors{display:none}
.jbs-map .gform_confirmation_message{font-size:13px;color:var(--ink);line-height:1.5}

/* empty state overlay */
.jbs-map .map-empty{
  position:absolute;inset:0;z-index:6;display:none;align-items:center;justify-content:center;
  background:rgba(234,227,215,.55);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);
}
.jbs-map .map-empty.show{display:flex}
.jbs-map .map-empty-card{
  background:#fff;border:1px solid var(--line-deep);border-radius:var(--radius);
  padding:26px 30px;text-align:center;box-shadow:0 8px 22px rgba(0,0,0,.08);max-width:260px;
}
.jbs-map .map-empty-card .ico{
  width:46px;height:46px;border-radius:50%;background:var(--cream);color:var(--stone);
  display:flex;align-items:center;justify-content:center;margin:0 auto 12px;
}
.jbs-map .map-empty-card h3{font-family:var(--serif);font-size:19px;font-weight:600}
.jbs-map .map-empty-card p{font-size:12.5px;color:var(--stone);margin:6px 0 14px;line-height:1.5}

/* synced list */
.jbs-map .map-list{
  border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;
  display:flex;flex-direction:column;background:#fff;height:640px;
}
.jbs-map .map-list-head{padding:14px 18px;border-bottom:1px solid var(--line);font-size:12.5px;font-weight:700;color:var(--stone)}
.jbs-map .map-list-scroll{overflow-y:auto;padding:8px;display:flex;flex-direction:column;gap:4px;scrollbar-width:thin}
.jbs-map .list-row{
  display:flex;gap:12px;padding:10px;border-radius:9px;border:1px solid transparent;
  text-align:left;width:100%;align-items:center;box-shadow:none;
  transition:background .15s ease,border-color .15s ease;
}
.jbs-map .list-row:hover{background:var(--paper)}
.jbs-map .list-row.hl{background:#FFF6F1;border-color:var(--red-tint-border)}
.jbs-map .list-row.sel{background:var(--cream);border-color:var(--line-deep)}
.jbs-map .list-thumb{width:62px;height:50px;border-radius:7px;flex:none;overflow:hidden;position:relative;background:#DAD1C2}
.jbs-map .list-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.jbs-map .list-row .suburb{font-size:9.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--red)}
.jbs-map .list-row h3{font-family:var(--serif);font-size:14.5px;font-weight:600;line-height:1.2;margin-top:2px}
.jbs-map .list-row .meta{font-size:10.5px;color:var(--stone);margin-top:3px}
.jbs-map .list-row .sc{margin-left:auto;flex:none;font-size:12px;font-weight:800;color:var(--ink)}
.jbs-map .list-row .sc span{font-size:9px;font-weight:600;color:var(--stone)}

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width:1020px){
  .jbs-map .map-layout{grid-template-columns:1fr}
  .jbs-map .map-list{height:420px}
}
@media (max-width:720px){
  .jbs-map{padding:0}
  .jbs-map .chip{padding:11px 18px}
  .jbs-map .map-frame{height:520px}
  .jbs-map .map-legend{top:auto;bottom:34px;left:12px;flex-direction:row;gap:12px;padding:8px 12px}
  .jbs-map .map-legend .t{display:none}
  .jbs-map .legend-row{font-size:11.5px}
  .jbs-map .legend-row .pin-dot{width:11px;height:11px}
  .jbs-map .map-list{height:380px}
  .jbs-map .result-count{width:100%;margin-left:0;order:10}

  /* popup becomes a bottom sheet pinned to the map frame */
  .jbs-map .map-popup{
    left:0 !important;right:0 !important;top:auto !important;bottom:0;
    width:auto;max-height:calc(100% - 20px);overflow-y:auto;
    border-radius:18px 18px 0 0;transform:translateY(100%);
    transition:transform .32s cubic-bezier(.22,.61,.36,1),opacity .2s ease;
  }
  .jbs-map .map-popup.show{transform:none}
  .jbs-map .sheet-handle{display:block;width:44px;height:4px;border-radius:2px;background:var(--line-deep);margin:10px auto 0}

  .jbs-map .chip-menu{
    position:fixed;left:0;right:0;bottom:0;top:auto;z-index:940;min-width:0;
    max-height:62vh;overflow-y:auto;border-radius:18px 18px 0 0;border:0;padding:14px 16px 26px;
    box-shadow:0 -20px 60px rgba(22,24,28,.3);
    transform:translateY(100%);opacity:1;transition:transform .32s cubic-bezier(.22,.61,.36,1);
  }
  .jbs-map .chip-menu.open{transform:none}
  .jbs-map .chip-menu::before{content:"";display:block;width:44px;height:4px;border-radius:2px;background:var(--line-deep);margin:0 auto 14px}
  .jbs-map .chip-menu button{padding:14px 12px;font-size:15px;border-bottom:1px solid var(--line)}
  .jbs-map .chip-menu button:last-child{border-bottom:0}
}
