/* ============================================================
   VIPS V2 — Public Parking page (re-theme of legacy markup)
   Depends on v2.css tokens. Light = white hero; dark = navy hero.
   ============================================================ */
body.modal-open{overflow:hidden}

/* ---------------- HERO — theme-aware, matches the landing 1:1 ----------------
   Light = white hero + dark heading; dark = navy hero + white heading. Eyebrow,
   lead, lookup card, and focus all inherit the theme-aware rules from v2.css.
   Only .hero__title is page-specific (the landing has no H1). */
.hero__title{font-size:clamp(30px,4.6vw,52px);letter-spacing:-.03em;margin:14px auto 0;line-height:1.06;color:var(--text-heading)}
.hero__title span{font-weight:500;letter-spacing:-.02em;color:var(--brand-strong)}
[data-theme="dark"] .hero__title{color:#fff}
[data-theme="dark"] .hero__title span{color:#f0a173}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]) .hero__title{color:#fff}
  :root:not([data-theme="light"]) .hero__title span{color:#f0a173}
}

/* ---------------- ID LOOKUP — reuse the landing .lookup card (styled in v2.css).
   Loader (.lookup__input.is-loading::after) + focus come from v2.css; here we
   only add the error bar, has-error border, and footer. */
.lookup-input.has-error{border-color:var(--danger);box-shadow:0 0 0 4px rgba(179,36,20,.25)}
.id-error-bar{display:none;margin-top:14px;background:var(--danger-bg);border:1px solid var(--danger-line);
  color:var(--danger);border-radius:var(--r-m);padding:10px 13px;font-size:13px;line-height:1.45}
.id-error-bar.show{display:block}
.lookup__test code{cursor:default}
.lookup__foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  margin-top:16px;padding-top:16px;border-top:1px solid rgba(127,139,160,.28);font-size:14px;color:var(--text-secondary)}
.lookup__foot a{display:inline-flex;align-items:center;gap:6px;color:var(--brand-strong);font-weight:600;text-decoration:none}
.lookup__foot a:hover{color:var(--brand-hover)}
.lookup__foot a svg{width:16px;height:16px}

/* ---------------- OPTION TILES (V2 cards) ---------------- */
.option-pair{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:20px auto 0;max-width:760px;text-align:left}
.option-tile{background:var(--surface);border:1px solid var(--line);border-radius:16px;padding:20px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.08),0 1px 2px rgba(8,28,56,.05),0 16px 32px -18px rgba(8,28,56,.18);
  display:flex;flex-direction:column;gap:9px}
.option-meta{display:flex;flex-wrap:wrap;gap:6px}
.pill{font-family:var(--font-mono);font-size:10.5px;font-weight:600;letter-spacing:.04em;
  color:var(--brand-strong);background:var(--brand-tint);border:1px solid var(--brand-line);
  border-radius:var(--pill);padding:3px 9px}
.option-tile h3{font-size:17px;letter-spacing:-.01em;color:var(--text-heading);margin:0}
.option-tile p{font-size:13.5px;color:var(--text-secondary);line-height:1.5;margin:0;flex:1}
.option-tile p strong{color:var(--text-heading)}
.option-actions{margin-top:4px}
.menu-cta{display:inline-flex;align-items:center;gap:8px;height:44px;padding:0 20px;border-radius:var(--r-s);
  background:var(--brand-strong);color:#fff;font-weight:600;font-size:14px;text-decoration:none;border:1.5px solid var(--brand-strong);transition:background .15s}
.menu-cta:hover{background:var(--brand-hover);border-color:var(--brand-hover)}

/* ---------------- SECTIONS ---------------- */
.section{padding:clamp(44px,6vw,76px) 0}
.container{max-width:1180px;margin:0 auto;padding:0 clamp(20px,4vw,40px)}
.zone-guide,.public-highlights{background:var(--surface-2)}
.steps-header{max-width:680px;margin:0 auto clamp(28px,4vw,42px);text-align:center}
.steps-kicker{font-family:var(--font-mono);font-size:12px;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;color:var(--brand-strong);margin:0 0 10px}
.section-title{font-size:clamp(22px,3vw,30px);letter-spacing:-.025em;color:var(--text-heading);margin:0 0 10px}
.section-sub{font-size:15px;color:var(--text-secondary);line-height:1.6;margin:0}

/* step cards */
.steps-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}
.step-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);padding:22px;box-shadow:var(--sh-1)}
.step-icon{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;
  background:var(--brand-tint);color:var(--brand-strong);margin-bottom:14px}
.step-icon svg{width:22px;height:22px}
.step-card h3{font-size:16px;letter-spacing:-.01em;color:var(--text-heading);margin:0 0 6px}
.step-card p{font-size:13.5px;color:var(--text-secondary);line-height:1.55;margin:0}

/* "Park in 4 quick steps" — full-width feature rows (icon · title · content) */
.steps-rows{display:flex;flex-direction:column;gap:14px;max-width:900px;margin:0 auto}
.step-row{display:flex;gap:18px;align-items:flex-start;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-l);padding:22px 24px;box-shadow:var(--sh-1)}
.step-row .step-icon{margin-bottom:0}
.step-row__body{flex:1;min-width:0}
.step-row__body h3{font-size:17px;letter-spacing:-.01em;color:var(--text-heading);margin:0 0 6px}
.step-row__body > p{font-size:14px;color:var(--text-secondary);line-height:1.6;margin:0}
/* sub-ways nested inside step 1 */
.step-ways{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;margin-top:18px}
.step-way{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-m);padding:14px 15px}
.step-way__ic{width:34px;height:34px;border-radius:9px;display:grid;place-items:center;
  background:var(--brand-tint);color:var(--brand-strong);margin-bottom:10px}
.step-way__ic svg{width:18px;height:18px}
.step-way h4{font-size:14px;letter-spacing:-.01em;color:var(--text-heading);margin:0 0 5px}
.step-way p{font-size:13px;color:var(--text-secondary);line-height:1.5;margin:0}
@media (max-width:560px){.step-row{flex-direction:column;gap:12px}}

/* ---------------- PUBLIC LOCATIONS — map (Leaflet) ---------------- */
.locations-map{margin-bottom:20px}
.locations-map__canvas{position:relative;z-index:0;height:clamp(320px,46vw,460px);
  border-radius:var(--r-l);border:1px solid var(--line);box-shadow:var(--sh-1);overflow:hidden;background:var(--surface-2)}
.locations-map__hint{margin:10px 2px 0;font-size:12.5px;color:var(--text-muted);display:flex;align-items:center;gap:7px}
.locations-map__hint svg{width:15px;height:15px;color:var(--brand-strong);flex:none}
/* on-brand circular count marker (city aggregate / total) */
.city-marker{background:transparent;border:0}
.city-marker span{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;
  background:var(--brand-strong);color:#fff;font-family:var(--font-mono);font-weight:600;font-size:13px;
  border:2px solid #fff;box-shadow:0 2px 7px rgba(8,28,56,.4)}
.city-marker--total span{width:46px;height:46px;font-size:15px;background:var(--navy);border-width:2.5px}
/* city / total name label sitting on top of the count bubble */
.leaflet-tooltip.city-label{background:var(--navy);color:#fff;border:0;border-radius:6px;
  font-family:var(--font-sans);font-weight:600;font-size:12px;padding:3px 9px;box-shadow:var(--sh-2);white-space:nowrap}
.leaflet-tooltip.city-label::before{border-top-color:var(--navy)}
/* individual property marker + name label (high zoom) */
.prop-marker{background:transparent;border:0}
.prop-marker span{display:block;width:14px;height:14px;border-radius:50%;background:var(--navy);
  border:2.5px solid #fff;box-shadow:0 1px 4px rgba(8,28,56,.45)}
.prop-marker--ev span{background:var(--brand-strong)}
.leaflet-tooltip.prop-label{background:#fff;color:var(--navy);border:1px solid var(--line);
  border-radius:6px;font-family:var(--font-sans);font-weight:600;font-size:11.5px;padding:2px 7px;
  box-shadow:var(--sh-1);white-space:nowrap}
.leaflet-tooltip.prop-label::before{display:none}
/* property popup: name · city · zone count · register CTA */
.map-pop__name{display:block;font-family:var(--font-sans);font-weight:600;font-size:14px;color:var(--navy)}
.map-pop__sub{display:block;margin-top:1px;font-size:12px;color:var(--text-muted)}
.map-pop__zones{display:block;margin-top:7px;font-size:13px;color:var(--text-secondary)}
.map-pop__zones strong{font-family:var(--font-mono);color:var(--brand-strong);font-size:14px}
.map-pop__cta{display:inline-flex;align-items:center;gap:6px;margin-top:11px;padding:8px 13px;border-radius:8px;
  background:var(--brand-strong);color:#fff;font-weight:600;font-size:12.5px;text-decoration:none;line-height:1}
.map-pop__cta:hover{background:var(--brand-hover)}
.map-pop__cta svg{width:14px;height:14px}
/* public-index marker popup = navy card with white text (scoped so the
   find-zone-id popups stay on the themed surface). Orange accent fonts go white. */
#locationsMap .leaflet-popup-content-wrapper{background:var(--navy);color:#fff;border-color:rgba(255,255,255,.14)}
#locationsMap .leaflet-popup-tip{background:var(--navy);border-color:rgba(255,255,255,.14)}
#locationsMap .leaflet-popup-close-button{color:rgba(255,255,255,.7)}
#locationsMap .leaflet-popup-close-button:hover{color:#fff}
#locationsMap .map-pop__name{color:#fff}
#locationsMap .map-pop__sub{color:#c3d2e2}
#locationsMap .map-pop__zones{color:#dbe5f0}
#locationsMap .map-pop__zones strong{color:#fff}
/* themed popup — adapts to light/dark (Leaflet defaults to white) */
.leaflet-popup-content-wrapper{background:var(--surface);color:var(--text);border:1px solid var(--line);border-radius:10px;box-shadow:var(--sh-2)}
.leaflet-popup-tip{background:var(--surface);border:1px solid var(--line);box-shadow:var(--sh-2)}
.leaflet-popup-content{margin:11px 14px;line-height:1.35}
.leaflet-popup-close-button{color:var(--text-muted)}
.leaflet-popup-close-button:hover{color:var(--text-heading);background:transparent}
.city-pop__name{display:block;font-family:var(--font-sans);font-weight:600;font-size:14px;color:var(--navy)}
.city-pop__count{display:block;margin-top:2px;font-family:var(--font-mono);font-size:12px;color:var(--brand-strong)}

/* ---------------- PUBLIC LOCATIONS — Canadian cities + counts ---------------- */
.city-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px}
.city-card{display:flex;align-items:center;gap:13px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-l);padding:15px 17px;box-shadow:var(--sh-1);transition:border-color .2s,box-shadow .2s}
.city-card:hover{border-color:var(--brand-line);box-shadow:var(--sh-2)}
/* The cards drive the map now, so they are <button>s rather than <div>s — which means undoing the
   button defaults (centred text, UA font, native background) that would otherwise show through. */
.city-card{width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer;appearance:none}
.city-card:focus-visible{outline:none;border-color:var(--brand);box-shadow:var(--focus-ring)}
.city-card.is-active{border-color:var(--brand);box-shadow:var(--sh-2)}
.city-card.is-active .city-card__count{color:var(--brand-strong)}
.city-card__name,.city-card__count{display:block}
.city-grid__empty{grid-column:1/-1;margin:0;padding:18px;text-align:center;color:var(--text-secondary);
  border:1px dashed var(--line);border-radius:var(--r-l);background:var(--surface)}
.city-card__ic{flex:none;width:42px;height:42px;border-radius:11px;display:grid;place-items:center;
  background:linear-gradient(160deg,#16365f,var(--navy));color:#fff}
.city-card__ic svg{width:21px;height:21px}
.city-card__txt{min-width:0}
.city-card__name{font-size:15px;font-weight:600;letter-spacing:-.01em;color:var(--text-heading);margin:0}
.city-card__count{font-size:12.5px;color:var(--text-secondary);margin:2px 0 0;font-family:var(--font-mono)}

/* ---------------- PUBLIC LOCATIONS (JS-rendered cards) ---------------- */
.locations-wrap{margin-top:8px}
.parking-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}
.parking-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;overflow:hidden;box-shadow:var(--sh-1);transition:border-color .2s,box-shadow .2s}
.parking-card:hover,.parking-card.is-open{border-color:var(--brand-line);box-shadow:var(--sh-2)}
.parking-card .parking-info{display:flex;gap:12px;padding:14px;align-items:flex-start}
.parking-thumb{flex:none;width:52px;height:52px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,#16365f,var(--navy));color:#fff}
.parking-thumb svg{width:24px;height:24px}
.parking-main{flex:1;min-width:0}
.parking-head{display:flex;align-items:center;gap:8px}
.parking-card h4{margin:0;font-size:14px;font-weight:600;color:var(--text-heading)}
.parking-badge{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:2px 7px;border-radius:var(--pill);flex:none}
.parking-badge--ev{background:var(--success-bg);color:var(--success)}
.parking-card .parking-address{margin:3px 0 0;font-size:12.5px;color:var(--text-muted);line-height:1.45}
.parking-card .parking-meta{display:flex;align-items:center;gap:8px;margin-top:6px;font-size:11.5px;color:var(--text-secondary)}
.meta-dot{width:3px;height:3px;border-radius:50%;background:var(--ink-faint)}
.parking-card .zone-toggle{display:inline-flex;align-items:center;gap:5px;border:0;background:none;color:var(--brand-strong);font-weight:600;font-size:13px;cursor:pointer;padding:0;margin-top:8px}
.zone-toggle-caret{width:14px;height:14px;transition:transform .2s}
.parking-card.is-open .zone-toggle-caret{transform:rotate(180deg)}
.parking-card .zone-details{display:none;padding:0 14px 12px}
.parking-card.is-open .zone-details{display:block}
.parking-card .zone-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 0;border-top:1px solid var(--line)}
.parking-card .zone-street{font-size:12.5px;color:var(--text-secondary)}
.parking-card .zone-id{font-family:var(--font-mono);font-size:13px;color:var(--text-heading);margin-left:8px}
.parking-card .zone-register-btn{border:1.5px solid var(--brand-strong);background:var(--surface);color:var(--brand-strong);border-radius:7px;padding:5px 11px;font-size:12px;font-weight:600;cursor:pointer;white-space:nowrap}
.parking-card .zone-register-btn:hover{background:var(--brand-strong);color:#fff}
.locations-actions{margin-top:26px;text-align:center}

/* public choice modal */
.public-choice-kicker{font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand-strong);font-weight:600;margin:0}
.public-choice-note{color:var(--text-secondary);font-size:14px;line-height:1.55;margin:8px 0 18px}
.public-choice-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.public-choice-card{border:1px solid var(--line);border-radius:var(--r-l);padding:18px;background:var(--surface-2);display:flex;flex-direction:column;gap:8px}
.public-choice-illustration{width:46px;height:46px;border-radius:12px;display:grid;place-items:center;background:var(--brand-tint)}
.public-choice-illustration svg{width:30px;height:30px}
.public-choice-card h3{font-size:16px;color:var(--text-heading);margin:0}
.public-choice-card p{font-size:13px;color:var(--text-secondary);line-height:1.5;margin:0;flex:1}
.public-choice-card .btn{width:100%;margin-top:4px}
.public-choice-signup{margin-top:16px;text-align:center;font-size:14px;color:var(--text-secondary)}
.public-choice-link{border:0;background:0;color:var(--brand-strong);font-weight:600;cursor:pointer;text-decoration:underline;text-underline-offset:3px;font:inherit;padding:0}

/* ---------------- responsive ---------------- */
@media (max-width:760px){
  .option-pair{grid-template-columns:1fr}
  .public-choice-grid{grid-template-columns:1fr}
}
@media (max-width:560px){
  .lookup-row{flex-direction:column}
  .lookup-btn{width:100%;height:50px}
}

/* ---- toast (window.vipsNotify) ---- */
.vips-toast-wrap{position:fixed;top:18px;right:18px;z-index:400;display:flex;flex-direction:column;gap:10px;pointer-events:none}
.vips-toast{min-width:220px;max-width:340px;padding:12px 15px;border-radius:var(--r-m);background:var(--surface);color:var(--text-heading);
  border:1px solid var(--line);border-left:4px solid var(--brand-strong);box-shadow:var(--sh-3);font-size:13px;line-height:1.45;
  opacity:0;transform:translateX(12px);transition:opacity .22s,transform .22s}
.vips-toast.show{opacity:1;transform:none}
.vips-toast--warning{border-left-color:var(--warning)}
.vips-toast--success{border-left-color:var(--success)}
.vips-toast--error{border-left-color:var(--danger)}
