/**
 * OfficePlace — "Desk" redesign layer.
 * Loaded after op-core.css, so this wins the cascade. op-core.css keeps the
 * structure and plugin-only rules; this file carries the whole redesign:
 * light header, a data-forward listings table with a filter rail, rate per m²
 * everywhere, a compare flow, and a monospace numeric face for figures.
 * Every op-* class name is unchanged so it still maps to the plugin output.
 * The previous design pass lives in op-design.css (not loaded here) for reference.
 */

/* ------------------------------------------------------------ tokens */
:root {
	--op-ink:        #232C34;   /* headings, primary text, dark ground */
	--op-ink-2:      #323E48;   /* secondary ink */
	--op-muted:      #5b6a77;   /* muted UI text */
	--op-soft:       #616d78;   /* muted meta on white (AA) */
	--op-line:       #e3e8ea;   /* borders */
	--op-line-2:     #eef1f0;   /* faint row rules */
	--op-bg:         #f6f8f7;   /* section ground */
	--op-green:      #93D500;   /* accent, safe on dark */
	--op-green-text: #4a6b00;   /* accent text on white (AA) */
	--op-green-tint: #eef8d9;   /* soft green fill */
	--op-green-chip: #f7fbee;   /* chip fill */
	--op-green-cbrd: #cfe0a8;   /* chip border */
	--op-mono: var(--op-font-mono);
}

/* ------------------------------------------------------------ base */
.op-page,
.op-single,
.op-archive { background: #fff; }
body { color: var(--op-ink); }
/* Bands (hero, footer, page heads) run edge to edge; the CONTENT inside them
   centres at a comfortable max width so nothing sprawls on wide monitors.
   --op-cw is the wide content width; single-column pages use --op-cw-narrow. */
:root { --op-cw: 1400px; --op-cw-narrow: 1140px; }
/* The full-bleed header bands break out with calc(50% - 50vw). When a classic
   (non-overlay) scrollbar is present, 50vw counts the scrollbar width, so the
   band ends up a hair wider than the content and a horizontal scrollbar can
   flicker in and out as you scroll (the "shake"). Clipping horizontal overflow
   at the root removes it on every platform, without creating a scroll container
   (so the sticky nav and nested scroll strips keep working). */
html { overflow-x: clip; }
.op-wrap { max-width: var(--op-cw-narrow); margin: 0 auto; padding: 0 clamp(20px, 3.5vw, 60px); }
/* Hello Elementor caps .site-main (and content wrappers) at 1140px — remove it so
   the plugin's own full-bleed sections and op-wrap gutters control the width. */
/* Hello Elementor + op-core cap .site-main at ~1140-1180px. Remove it so the
   plugin's own full-bleed sections and op-wrap gutters control width. Article
   prose keeps its readable column via .op-prose / the single-post rules below. */
main.site-main, body .site-main { max-width: none !important; width: auto !important; padding: 0 !important; margin: 0 !important; }

/* Numeric / data face helper */
.op-num { font-family: var(--op-mono); font-variant-numeric: tabular-nums; }

/* ------------------------------------------------------------ header (light) */
.op-site-head {
	position: sticky; top: 0; z-index: 9000;
	background: rgba(255,255,255,.75); -webkit-backdrop-filter: saturate(1.5) blur(16px); backdrop-filter: saturate(1.5) blur(16px);
	border-bottom: 1px solid rgba(0,0,0,.07); box-shadow: 0 1px 0 rgba(0,0,0,.02);
}
.op-site-head-in {
	display: flex; align-items: center; gap: 30px;
	height: 64px; max-width: var(--op-cw); margin: 0 auto; padding: 0 clamp(20px, 3.5vw, 60px);
}
.op-logo { display: flex; align-items: center; gap: 8px; text-decoration: none; flex: none; }
.op-logo-mark { display: inline-flex; }
.op-logo-mark svg { height: 22px; width: auto; }
/* Wordmark logo: OFFICE heavy + PLACE light, green tittle over the "I", green
   underline bar. Sized in em so the dot + bar track the font size everywhere. */
.op-logo-word { position: relative; display: inline-block; font-family: var(--op-font-head); font-weight: 400; font-size: 19px; letter-spacing: .01em; line-height: 1; color: var(--op-ink); padding-bottom: .34em; }
.op-logo-word b { font-weight: 800; letter-spacing: -.005em; }
.op-logo-dot { position: relative; font-style: normal; }
.op-logo-dot::after { content: ""; position: absolute; left: 50%; top: -.30em; width: .26em; height: .26em; border-radius: 50%; background: var(--op-green); transform: translateX(-50%); }
.op-logo-word::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: .18em; background: var(--op-green); }
/* Nav */
.op-site-nav { display: flex; }
.op-nav-list { display: flex; flex-wrap: nowrap; gap: 20px; list-style: none; margin: 0; padding: 0; align-items: center; }
.op-nav-list a {
	font-family: var(--op-font-body); font-weight: 500; font-size: 13.5px;
	color: var(--op-muted); text-decoration: none; padding-bottom: 3px; border-bottom: 2px solid transparent;
	white-space: nowrap;
}
.op-nav-list a:hover { color: var(--op-ink); }
.op-nav-list .is-current > a,
.op-nav-list .current-menu-item > a { color: var(--op-ink); border-bottom-color: var(--op-green); }
.op-caret { margin-left: 3px; }
/* Services dropdown */
.op-nav-list .op-has-sub { position: relative; }
.op-nav-list .op-sub {
	position: absolute; left: 0; top: 100%; min-width: 210px; margin: 0; padding: 8px;
	list-style: none; background: #fff; border: 1px solid var(--op-line); box-shadow: 0 12px 30px rgba(35,44,52,.12);
	opacity: 0; visibility: hidden; transform: translateY(4px); transition: opacity .16s, transform .16s, visibility .16s;
	z-index: 30;
}
.op-nav-list .op-has-sub:hover .op-sub,
.op-nav-list .op-has-sub:focus-within .op-sub { opacity: 1; visibility: visible; transform: translateY(0); }
.op-nav-list .op-sub a { display: block; padding: 8px 10px; border: 0; font-size: 13px; color: var(--op-muted); }
.op-nav-list .op-sub a:hover { color: var(--op-ink); background: var(--op-bg); }
/* Right-side controls */
.op-head-call, .op-head-saved, .op-head-list { flex: none; }
.op-head-saved {
	margin-left: auto; display: inline-flex; align-items: center; gap: 8px;
	min-height: 44px; padding: 0 12px; border: 1px solid var(--op-line);
	color: var(--op-ink-2); text-decoration: none;
	font-family: var(--op-font-body); font-weight: 500; font-size: 13px;
}
.op-head-saved:hover { border-color: var(--op-ink); color: var(--op-ink); }
.op-head-saved-icon { display: none; }
.op-fav-count {
	position: static; background: var(--op-green-tint); color: var(--op-green-text);
	font-family: var(--op-mono); font-weight: 700; font-size: 12px; padding: 2px 6px;
	min-width: 0; height: auto; border-radius: 0;
}
.op-head-call {
	display: inline-flex; align-items: center; gap: 7px; min-height: 44px; padding: 0 8px;
	color: var(--op-ink); text-decoration: none;
	font-family: var(--op-mono); font-weight: 500; font-size: 13.5px;
}
.op-head-call:hover { color: var(--op-green-text); background: none; border: 0; }
.op-head-call svg { flex: none; }
.op-head-list {
	display: inline-flex; align-items: center; min-height: 44px; padding: 0 18px;
	background: var(--op-ink); color: #fff; text-decoration: none;
	font-family: var(--op-font-head); font-weight: 700; font-size: 13px; letter-spacing: .02em; white-space: nowrap;
}
.op-head-list:hover { background: #000; color: #fff; }
/* The Elementor kit colours anchor text green; on dark-background buttons that
   reads as low-contrast green-on-navy. Force legible white text on every dark
   button (these are all <a> links, so the kit wins without !important). */
.op-head-list, .op-head-list:link, .op-head-list:visited, .op-head-list:hover,
.op-view-format a.is-active, .op-view-format a.is-active:hover,
.op-btn-dark, .op-btn-dark:link, .op-btn-dark:visited, .op-btn-dark:hover,
.op-view-map-toggle button.is-active { color: #fff !important; }
/* Mobile nav toggle */
.op-nav-toggle { display: none; background: none; border: 0; cursor: pointer; padding: 8px; margin-left: 4px; }
.op-nav-toggle span { display: block; width: 22px; height: 2.5px; background: var(--op-ink); margin: 4.5px 0; border-radius: 2px; }

/* ------------------------------------------------------------ search bar */
.op-searchx {
	background: #fff; border: 1px solid #cfd7d9; padding: 6px; border-radius: 0; box-shadow: none;
}
.op-searchx-hero { max-width: 720px; }
.op-searchx-main { display: flex; flex-wrap: nowrap; align-items: center; gap: 6px; }
.op-searchx-kw { display: flex; align-items: center; flex: 1 1 280px; min-width: 200px; padding: 0 10px; border: 0; box-shadow: none; }
.op-searchx-kw svg { color: var(--op-soft); }
.op-searchx-kw input { border: 0; outline: 0; width: 100%; padding: 12px 0; font: 400 15px var(--op-font-body); color: var(--op-ink); background: none; }
.op-searchx-sel {
	-webkit-appearance: none; -moz-appearance: none; appearance: none;
	flex: 0 0 auto; border: 1px solid var(--op-line); color: var(--op-ink-2);
	font: 500 13px var(--op-font-body); padding: 11px 36px 11px 12px; border-radius: 0;
	background: var(--op-bg) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%237c8894' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 13px center;
}
.op-searchx-sel:focus, .op-searchx-kw:focus-within { outline: 0; border-color: var(--op-green); box-shadow: none; }
.op-searchx-more {
	flex: 0 0 auto; background: none; border: 1px solid var(--op-line); cursor: pointer;
	font: 500 13px var(--op-font-body); color: var(--op-muted); padding: 11px 12px;
}
.op-searchx-badge { font-family: var(--op-mono); font-weight: 700; background: var(--op-green-tint); color: var(--op-green-text); padding: 1px 6px; }
.op-searchx-go {
	flex: 0 0 auto; border: 0; background: var(--op-green); color: var(--op-ink);
	font: 700 13px var(--op-font-head); letter-spacing: .04em; padding: 12px 24px; cursor: pointer; border-radius: 0;
}
.op-searchx-go:hover { background: #86c400; }
.op-searchx-adv { display: flex; flex-wrap: wrap; gap: 12px; padding: 12px 6px 4px; }
.op-searchx-adv[hidden] { display: none; }
.op-searchx-advf { display: flex; flex-direction: column; gap: 5px; font: 500 12px var(--op-font-body); color: var(--op-ink-2); }
.op-searchx-advf select, .op-searchx-advf input { border: 1px solid var(--op-line); padding: 9px 10px; font: 400 13px var(--op-font-body); border-radius: 0; }
.op-searchx-clear { color: var(--op-green-text); font-weight: 600; align-self: center; }

/* ------------------------------------------------------------ buttons */
.op-btn {
	display: inline-flex; align-items: center; justify-content: center; gap: 7px;
	font-family: var(--op-font-head); font-weight: 700; font-size: 13px; letter-spacing: .02em;
	padding: 12px 22px; border-radius: 0; border: 1px solid transparent; cursor: pointer;
	text-decoration: none; white-space: nowrap; transition: background .15s, color .15s, border-color .15s;
}
.op-btn-green { background: var(--op-green); color: var(--op-ink); border-color: var(--op-green); }
.op-btn-green:hover { background: #86c400; border-color: #86c400; color: var(--op-ink); }
.op-btn-ghost { background: #fff; color: var(--op-ink); border-color: var(--op-ink); }
.op-btn-ghost:hover { background: var(--op-ink); color: #fff; }
.op-btn-dark { background: var(--op-ink); color: #fff; border-color: var(--op-ink); }
.op-btn-dark:hover { background: #000; color: #fff; }
/* Desk buttons are square (op-core's .op-btn.op-btn rounds them to 7px) */
.op-btn.op-btn, .op-searchx-go, .op-search-go { border-radius: 0; }

/* ------------------------------------------------------------ badges, kickers, chips */
.op-badge {
	display: inline-block; font-family: var(--op-font-head); font-weight: 700; font-size: 9.5px;
	letter-spacing: .08em; text-transform: uppercase; padding: 3px 7px; border-radius: 0;
}
.op-badge-status { background: var(--op-green); color: var(--op-ink); box-shadow: none; }
.op-badge-grade { background: rgba(35,44,52,.85); color: #fff; }
.op-badge-area { background: var(--op-green-chip); color: var(--op-green-text); border: 1px solid var(--op-green-cbrd); font-weight: 600; }
.op-kick {
	font-family: var(--op-font-head); font-weight: 700; text-transform: uppercase; letter-spacing: .14em;
	font-size: 12px; color: var(--op-green-text); margin: 0 0 10px;
}
/* chips (amenities, applied filters) */
.op-chip {
	display: inline-flex; align-items: center; gap: 7px; white-space: nowrap;
	font: 500 11.5px var(--op-font-body); padding: 4px 8px; border: 1px solid var(--op-line); color: var(--op-muted); background: #fff;
}
.op-chip-green { color: var(--op-green-text); background: var(--op-green-chip); border-color: var(--op-green-cbrd); }

/* ------------------------------------------------------------ footer */
.op-site-foot { background: var(--op-ink); color: #c6cfd5; }
/* Align footer content with the header + page content (same centred max width). */
.op-site-foot .op-foot-cols { max-width: var(--op-cw); padding-left: clamp(20px, 3.5vw, 60px); padding-right: clamp(20px, 3.5vw, 60px); }
/* Footer sits on dark ink, so the wordmark text is light (dot + bar stay green). */
.op-site-foot .op-logo-word, .op-foot-logo .op-logo-word { color: #fff; }
.op-foot-col h5 { font-family: var(--op-font-head); color: #fff; }
.op-foot-col a { color: #c6cfd5; }
.op-foot-col a:hover { color: var(--op-green); }
.op-foot-alerts input[type="email"] { border-radius: 0; }
.op-foot-base a:hover { color: var(--op-green); }
.op-social-link { border-radius: 0; }

/* ============================================================ results (Desk) */
.op-wrap-wide { max-width: var(--op-cw); margin: 0 auto; padding: 0 clamp(20px, 3.5vw, 60px); }
.op-archive { background: #fff; padding-bottom: 60px; }

/* keyword strip */
.op-search-strip {
	display: flex; gap: 6px; align-items: center; background: var(--op-bg);
	border: 1px solid var(--op-line); padding: 6px; margin: 20px 0 24px;
}
.op-search-strip .op-searchx-kw { flex: 1 1 auto; background: #fff; border: 1px solid var(--op-line); padding: 0 12px; }
.op-search-strip .op-searchx-kw input { border: 0; outline: 0; width: 100%; padding: 12px 8px; font: 400 15px var(--op-font-body); background: none; color: var(--op-ink); }
.op-search-go { flex: none; }

/* body grid: rail + results */
.op-archive-body { display: grid; grid-template-columns: 244px 1fr; gap: 32px; align-items: start; }

/* filter rail */
.op-rail { border: 1px solid var(--op-line); position: sticky; top: 80px;
	/* Natural height, no inner scrollbar. The filter set is short enough to show
	   in full; it scrolls with the page rather than inside its own box. */ }
.op-rail-head { display: flex; align-items: center; justify-content: space-between; padding: 13px 16px; border-bottom: 1px solid var(--op-line); }
.op-rail-title { margin: 0; font: 700 11px var(--op-font-head); letter-spacing: .14em; text-transform: uppercase; color: var(--op-ink); }
.op-rail-reset { font: 500 12.5px var(--op-font-body); color: var(--op-green-text); text-decoration: none; }
.op-rail-field { padding: 14px 16px; border-bottom: 1px solid var(--op-line-2); }
.op-rail-field label { display: block; font: 500 12.5px var(--op-font-body); color: var(--op-ink-2); margin-bottom: 8px; }
.op-rail-field select, .op-rail-field input {
	width: 100%; border: 1px solid var(--op-line); padding: 10px; border-radius: 0;
	font: 400 13px var(--op-font-body); color: var(--op-ink); background: #fff;
}
.op-rail-field input { font-family: var(--op-mono); }
.op-rail-field select:focus, .op-rail-field input:focus { outline: 0; border-color: var(--op-green); }
.op-rail-apply { margin: 16px; width: calc(100% - 32px); }
.op-rail-two { display: flex; gap: 8px; }
.op-rail-two input { width: 100%; }
.op-size-chips { display: flex; gap: 6px; margin-top: 10px; flex-wrap: wrap; }
.op-size-chip { font: 500 11.5px var(--op-font-body); color: var(--op-muted); border: 1px solid var(--op-line); background: #fff; padding: 6px 9px; cursor: pointer; white-space: nowrap; }
.op-size-chip:hover { border-color: var(--op-ink); color: var(--op-ink); }
.op-size-chip.is-active { color: var(--op-green-text); border-color: var(--op-green-cbrd); background: var(--op-green-chip); }
.op-rail-legend { font: 500 12.5px var(--op-font-body); color: var(--op-ink-2); margin: 0 0 10px; }
.op-rail-checks { display: flex; flex-direction: column; gap: 10px; }
.op-check { display: flex; gap: 9px; align-items: center; min-height: 24px; cursor: pointer; font: 400 13px var(--op-font-body); color: var(--op-muted); }
.op-check input { width: 15px; height: 15px; accent-color: var(--op-green-text); flex: none; }
/* strip carries keyword + the three dropdowns + Search (matches the mockup) */
.op-search-strip { flex-wrap: wrap; }
.op-search-strip .op-searchx-kw { flex: 1 1 260px; min-width: 200px; }
.op-search-strip .op-searchx-sel { flex: 0 0 auto; width: 150px; min-width: 132px; background-color: var(--op-bg); }
/* "To Let or For Sale" is the longest option and was clipping in the 150px box */
.op-search-strip select[name="status"].op-searchx-sel { width: 178px; }
.op-search-strip .op-searchx-sel { padding-right: 30px; text-overflow: ellipsis; }
.op-search-strip .op-search-go { flex: 0 0 auto; }
.op-applied-chip-green { color: var(--op-green-text); background: var(--op-green-chip); border-color: var(--op-green-cbrd); }

/* results header */
.op-results { min-width: 0; }
.op-results-top { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 12px; }
.op-results-top h1 { font: 700 24px var(--op-font-head); color: var(--op-ink); margin: 0 0 5px; letter-spacing: -.02em; }
.op-results-count { font: 400 13px var(--op-font-mono); color: var(--op-soft); margin: 0; }
.op-results-controls { display: flex; align-items: center; gap: 10px; flex: none; }
.op-view-toggle { display: flex; border: 1px solid var(--op-line); }
.op-view-toggle button {
	border: 0; background: #fff; color: var(--op-muted); cursor: pointer;
	font: 700 11.5px var(--op-font-head); letter-spacing: .08em; padding: 10px 14px; text-transform: uppercase;
}
.op-view-toggle button.is-active { background: var(--op-ink); color: #fff; }
.op-sort { border: 1px solid var(--op-line); background: #fff; padding: 10px; font: 500 13px var(--op-font-body); color: var(--op-ink-2); border-radius: 0; }

/* applied chips */
.op-applied { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; padding-bottom: 14px; border-bottom: 1px solid var(--op-ink); margin-bottom: 2px; }
.op-applied-label { font: 400 12.5px var(--op-font-body); color: var(--op-soft); }
.op-applied-chip {
	display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; text-decoration: none;
	font: 500 12.5px var(--op-font-body); color: var(--op-ink); background: var(--op-bg); border: 1px solid var(--op-line); padding: 6px 10px;
}
.op-applied-chip:hover { border-color: var(--op-ink); }

/* the table */
.op-archive-split { display: block; }
.op-table { width: 100%; }
.op-row {
	display: grid; grid-template-columns: 40px 116px minmax(0,1fr) 92px 56px 104px 150px 44px;
	column-gap: 12px; align-items: center; border-bottom: 1px solid var(--op-line-2); padding: 16px 0;
}
.op-row-head { padding: 9px 0; border-bottom: 1px solid var(--op-line); }
.op-row-head span { font: 700 10.5px var(--op-font-head); letter-spacing: .12em; text-transform: uppercase; color: var(--op-soft); }
.op-row-head .op-col { text-align: right; }
.op-row-check { display: flex; align-items: center; justify-content: center; width: 40px; height: 44px; cursor: pointer; }
.op-row-check input { width: 16px; height: 16px; accent-color: var(--op-green-text); cursor: pointer; }
.op-card-row { display: contents; text-decoration: none; }
.op-card-row .op-card-img {
	position: relative; display: block; width: 104px; height: 74px; overflow: hidden; background: #dde4ea;
}
.op-card-row .op-card-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.op-card-row .op-card-noimg { display: block; width: 100%; height: 100%;
	background: repeating-linear-gradient(45deg, #dde4ea, #dde4ea 10px, #d2dae1 10px, #d2dae1 20px); }
.op-card-row .op-badge-status { position: absolute; left: 0; top: 0; }
.op-card-row .op-card-body { display: block; padding: 0 16px; min-width: 0; }
.op-card-row .op-card-title { display: block; font: 700 15.5px var(--op-font-head); color: var(--op-ink); margin: 0 0 4px; }
.op-card-row .op-card-meta { display: block; font: 400 12.5px var(--op-font-body); color: var(--op-soft); margin: 0 0 6px; }
.op-card-tags { display: flex; gap: 6px; flex-wrap: wrap; }
.op-card-row .op-col { text-align: right; font: 500 14px var(--op-font-mono); color: var(--op-ink-2); }
.op-card-row .op-col-price { text-align: right; font: 700 15px var(--op-font-head); color: var(--op-ink); white-space: nowrap; }
.op-row .op-fav {
	position: static; justify-self: end; width: 44px; height: 44px; border: 1px solid var(--op-line);
	background: #fff; color: var(--op-soft); display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: none;
}
.op-row .op-fav.is-saved { border-color: var(--op-green); background: var(--op-green-tint); color: var(--op-green-text); }
.op-row .op-fav.is-saved svg path { fill: var(--op-green); stroke: var(--op-green); }
.op-row.is-checked { background: #fbfdf6; }

/* pagination */
.op-pagination { display: flex; gap: 6px; align-items: center; margin-top: 20px; }
.op-pagination .page-numbers {
	min-width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center; padding: 0 12px;
	border: 1px solid var(--op-line); color: var(--op-ink-2); text-decoration: none; font: 500 13px var(--op-font-mono);
}
.op-pagination .page-numbers.current { background: var(--op-ink); color: #fff; border-color: var(--op-ink); }
.op-pagination .page-numbers:hover { border-color: var(--op-ink); }

/* v3: three-panel results = filter rail + listings + sticky map (desktop) */
.op-archive .op-wrap-wide { max-width: 1520px; }
.op-archive-split { display: grid; gap: 24px; align-items: start; }
.op-split-cards { grid-template-columns: minmax(0, 1fr) 400px; }
.op-split-table { grid-template-columns: 1fr; }
.op-map-archive { border: 1px solid var(--op-line); position: sticky; top: 78px; height: calc(100vh - 96px); min-height: 520px; }
.op-card-grid { align-content: start; }
/* card/table hover sync with the map */
.op-card.is-maphover { border-color: var(--op-green) !important; box-shadow: 0 0 0 2px var(--op-green-tint); }
.op-row.is-maphover { background: #f6fbe9; }
/* Cards / Table format toggle (anchor links) */
.op-view-format a { display: inline-flex; align-items: center; border: 0; background: #fff; color: var(--op-muted); cursor: pointer;
	font: 700 11.5px var(--op-font-head); letter-spacing: .08em; padding: 10px 14px; text-transform: uppercase; text-decoration: none; }
.op-view-format a.is-active { background: var(--op-ink); color: #fff; }
/* Toolbar controls: identical height so the Cards/Table toggle and the sort
   dropdown sit on the same line (item 6 alignment). */
.op-results-controls { align-items: center; }
.op-results-controls .op-view-toggle { height: 42px; margin: 0; }
.op-view-toggle { height: 42px; }
.op-view-toggle a, .op-view-toggle button { display: inline-flex; align-items: center; height: 100%; padding-top: 0; padding-bottom: 0; }
.op-results-controls .op-sort { height: 42px; padding: 0 14px; line-height: 1; }
/* the List/Map toggle is only for mobile (desktop always shows the split) */
@media (min-width: 901px) { .op-view-map-toggle { display: none; } }
@media (max-width: 900px) {
	.op-archive-split { grid-template-columns: 1fr; }
	.op-map-archive { display: none; position: static; height: 66vh; min-height: 0; top: 0; }
	#op-archive-body.is-map .op-results-col { display: none; }
	#op-archive-body.is-map .op-map-archive { display: block; }
}

/* compare bar */
.op-compare-bar {
	position: sticky; bottom: 0; z-index: 500; display: flex; align-items: center; justify-content: space-between;
	gap: 12px; padding: 12px 18px; background: var(--op-ink); margin-top: 22px;
}
/* display:flex above beats the browser's [hidden]{display:none}, so setting the
   hidden attribute never actually hid the bar — Clear/remove-to-empty left it on
   screen showing a stale count. Force it hidden when the attribute is set. */
.op-compare-bar[hidden] { display: none !important; }
.op-compare-count { margin: 0; font: 500 13px var(--op-font-body); color: #c6cfd5; }
.op-compare-count .op-num { color: var(--op-green); font-weight: 700; }
.op-compare-actions { display: flex; gap: 10px; align-items: center; }
.op-compare-clear { background: none; border: 0; color: #c6cfd5; cursor: pointer; font: 500 12.5px var(--op-font-body); padding: 8px; }
.op-compare-clear:hover { color: #fff; }
/* collapse toggle: minimise the bar to a compact pill so it's out of the way */
.op-compare-toggle { order: -1; background: none; border: 0; color: #c6cfd5; cursor: pointer; padding: 6px; margin: -4px 2px -4px -6px; display: inline-flex; align-items: center; }
.op-compare-toggle:hover { color: #fff; }
.op-compare-toggle svg { transition: transform .2s; }
.op-compare-bar.is-min { width: fit-content; margin-left: auto; padding: 8px 12px 8px 6px; gap: 8px; }
.op-compare-bar.is-min .op-compare-count, .op-compare-bar.is-min .op-compare-clear { display: none; }
.op-compare-bar.is-min .op-compare-toggle svg { transform: rotate(180deg); }

/* results mobile */
@media (max-width: 900px) {
	.op-archive-body { grid-template-columns: 1fr; gap: 18px; }
	.op-rail { position: static; }
}
@media (max-width: 680px) {
	.op-row, .op-row-head { grid-template-columns: 36px 84px 1fr auto; grid-auto-rows: auto; row-gap: 6px; padding: 14px 0; }
	.op-row-head { display: none; }
	.op-card-row .op-card-img { width: 84px; height: 62px; }
	.op-card-row .op-card-body { grid-column: 3 / 5; padding: 0 0 0 12px; }
	.op-card-row .op-col-size, .op-card-row .op-col-grade, .op-card-row .op-col-rate {
		grid-column: 2 / 4; text-align: left; padding-left: 12px; font-size: 12.5px; color: var(--op-soft);
	}
	.op-card-row .op-col-size::after { content: " floor"; color: var(--op-soft); }
	.op-card-row .op-col-rate::after { content: " / m²"; }
	.op-card-row .op-col-grade::before { content: "Grade "; }
	.op-card-row .op-col-price { grid-column: 3 / 5; text-align: right; }
	.op-row .op-fav { grid-row: 1; grid-column: 4; }
	.op-row-check { grid-row: 1; }
}

/* ============================================================ property detail */
.op-single { background: #fff; }
.op-single .op-wrap { max-width: 1280px; }
.op-crumbs { font: 400 12.5px var(--op-font-body); color: var(--op-soft); padding: 14px 0; }
.op-crumbs a { color: var(--op-green-text); text-decoration: none; }
.op-crumbs a:hover { color: var(--op-ink); }
.op-single-top { display: flex; align-items: flex-end; justify-content: space-between; gap: 40px; padding-bottom: 18px; border-bottom: 1px solid var(--op-ink); margin: 4px 0 0; }
.op-single-top-head h1 { font: 700 clamp(24px, 3.2vw, 34px) var(--op-font-head); line-height: 1.1; letter-spacing: -.025em; color: var(--op-ink); margin: 0 0 9px; }
.op-single-sub { font: 400 14px var(--op-font-body); color: var(--op-muted); margin: 0; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.op-single-addr { color: var(--op-ink-2); font-weight: 500; }
.op-single-sub .op-ref { font: 500 12.5px var(--op-font-mono); color: var(--op-soft); border: 1px solid var(--op-line); padding: 3px 7px; margin-left: 4px; }
.op-single-top-price { text-align: right; flex: none; }
.op-single-top-price .op-badge-status { margin-bottom: 9px; }
.op-single-price { font: 700 clamp(22px, 3vw, 30px) var(--op-font-head); color: var(--op-ink); margin: 0; letter-spacing: -.02em; white-space: nowrap; }
.op-single-rate { font: 500 13px var(--op-font-mono); color: var(--op-soft); margin: 5px 0 0; white-space: nowrap; }

/* Property gallery: a large main image + a horizontal thumbnail strip (click a
   thumb to swap it in; click the main to open the full-screen lightbox). */
.op-gallery { display: block; grid-template-columns: none; margin: 18px 0 0; }
.op-gallery-main { height: 460px; overflow: hidden; background: #dde4ea; position: relative; cursor: zoom-in; }
.op-gallery-main img { width: 100%; height: 100%; object-fit: cover; display: block; }
.op-gallery-main .op-card-noimg { display: block; width: 100%; height: 100%; cursor: default;
	background: repeating-linear-gradient(135deg, #e4e9e7 0 8px, #eef1f0 8px 16px); }
.op-gallery-count { position: absolute; right: 14px; bottom: 14px; display: inline-flex; align-items: center; gap: 7px;
	padding: 8px 13px; background: rgba(18,24,30,.72); color: #fff; font: 600 12.5px var(--op-font-body);
	-webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); pointer-events: none; }
.op-gallery-strip { display: flex; gap: 8px; margin-top: 8px; overflow-x: auto; padding-bottom: 4px; scrollbar-width: thin; }
.op-gallery-thumb-btn { flex: 0 0 auto; width: 116px; height: 78px; padding: 0; border: 0; background: #dde4ea;
	overflow: hidden; cursor: pointer; position: relative; opacity: .72; transition: opacity .15s, box-shadow .15s; }
.op-gallery-thumb-btn img { width: 100%; height: 100%; object-fit: cover; display: block; }
.op-gallery-thumb-btn:hover { opacity: 1; }
.op-gallery-thumb-btn.is-active { opacity: 1; box-shadow: inset 0 0 0 3px var(--op-green); }

.op-single-layout { display: grid; grid-template-columns: 1fr 336px; gap: 44px; margin-top: 36px; align-items: start; }
.op-single-main { min-width: 0; }
.op-facts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--op-line); border: 1px solid var(--op-line); margin: 0 0 34px; }
.op-fact { background: #fff; padding: 16px 18px; }
.op-fact-n { display: block; white-space: nowrap; font: 700 21px var(--op-font-mono); color: var(--op-ink); }
.op-fact-l { display: block; font: 400 12.5px var(--op-font-body); color: var(--op-soft); margin-top: 4px; text-transform: none; letter-spacing: 0; }
.op-single-block { margin-bottom: 34px; }
.op-single-block h2 { font: 700 20px var(--op-font-head); color: var(--op-ink); margin: 0 0 14px; letter-spacing: -.015em; }
.op-single-desc { font: 400 15px/1.7 var(--op-font-body); color: #4a5762; max-width: 66ch; }
.op-features { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--op-line); border: 1px solid var(--op-line); }
.op-feature { background: #fff; padding: 12px 14px; font: 400 13.5px var(--op-font-body); color: var(--op-ink-2); display: flex; align-items: center; gap: 8px; }
.op-feature svg { color: var(--op-green-text); flex: none; }
.op-map-single { height: 280px; border: 1px solid var(--op-line); }

/* sidebar */
.op-single-side { position: sticky; top: 16px; }
.op-single-actions-row { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: var(--op-line); border: 1px solid var(--op-line); margin-bottom: 16px; }
.op-single-actions-row .op-mini-btn { position: static; border: 0; border-radius: 0; background: #fff; min-height: 48px; width: auto; height: auto;
	display: flex; align-items: center; justify-content: center; gap: 6px; font: 500 12.5px var(--op-font-body); color: var(--op-ink-2); cursor: pointer; box-shadow: none; }
.op-single-actions-row .op-mini-btn:hover { background: var(--op-bg); color: var(--op-ink); transform: none; }
.op-single-actions-row .op-mini-btn.is-saved { color: var(--op-green-text); background: var(--op-green-tint); }
/* Property-page broker card: same style as the Brokers page (centred, circular
   photo, name, role, contact buttons). */
/* Property-page broker card — matches the brokers-page card: rounded white card,
   circular headshot, green name, role, then Call (outline) + WhatsApp (teal). */
.op-broker-card-listing { border: 1px solid var(--op-line); padding: 28px 24px 24px; margin-bottom: 16px; background: #fff; border-radius: 16px; box-shadow: 0 1px 2px rgba(20,30,40,.05); text-align: center; }
.op-broker-card-listing .op-broker-kick { display: none; }
.op-broker-card-listing .op-broker-photo { display: block; width: 130px; height: 130px; margin: 0 auto 16px; border-radius: 50%; overflow: hidden; background: #dde4ea; }
.op-broker-card-listing .op-broker-photo img { width: 100%; height: 100%; object-fit: cover; object-position: center 15%; display: block; }
.op-broker-card-listing h3 { font: 700 21px var(--op-font-head); margin: 0 0 4px; letter-spacing: -.01em; }
.op-broker-card-listing h3 a { color: var(--op-green-text); text-decoration: none; }
.op-broker-card-listing h3 a:hover { color: var(--op-ink); }
.op-broker-card-listing .op-broker-role { font: 400 14px var(--op-font-body); color: var(--op-soft); margin: 0 0 20px; }
.op-broker-card-listing .op-broker-ppra, .op-broker-card-listing .op-broker-email, .op-broker-card-listing .op-broker-listings { display: none; }
.op-broker-card-listing .op-broker-contact { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin: 0; }
.op-broker-card-listing .op-broker-contact .op-btn { justify-content: center; padding: 12px 0; }
/* Broker directory: compact cards with a circular headshot, centred, many per row
   (best-practice team grid). Overrides the op-core avatar + the old big portrait. */
.op-grid.op-brokers, .op-brokers.op-grid-3 { grid-template-columns: repeat(auto-fill, minmax(176px, 1fr)); gap: 14px; }
.op-brokers .op-broker-card { text-align: center; border: 1px solid var(--op-line); background: #fff; padding: 20px 14px 16px; display: flex; flex-direction: column; align-items: center; }
.op-brokers .op-broker-photo { display: block; width: 82px; height: 82px; aspect-ratio: 1; margin: 0 auto 12px; border-radius: 50%; overflow: hidden; background: #dde4ea; flex: none; }
.op-brokers .op-broker-photo img { width: 100%; height: 100%; object-fit: cover; object-position: center 12%; display: block; }
.op-brokers .op-broker-card h3 { margin: 0 0 2px; }
.op-brokers .op-broker-namelink { font: 700 15.5px/1.25 var(--op-font-head); color: var(--op-ink); text-decoration: none; }
.op-brokers .op-broker-namelink:hover { color: var(--op-green-text); }
.op-brokers .op-broker-role { font: 400 12px/1.35 var(--op-font-body); color: var(--op-soft); margin: 0 0 14px; min-height: 32px; }
.op-brokers .op-broker-contact { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; width: 100%; margin-top: auto; }
.op-brokers .op-broker-contact .op-btn { padding: 10px 0; font-size: 12.5px; }
.op-broker-role { font: 400 12.5px var(--op-font-body); color: var(--op-soft); margin: 2px 0 0; }
.op-broker-ppra { font: 400 11.5px var(--op-font-mono); color: var(--op-soft); margin: 8px 0 12px; }
.op-broker-contact { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.op-broker-contact .op-btn { padding: 13px 0; }
.op-broker-email { margin: 12px 0 0; font-size: 13px; }
.op-broker-email a { color: var(--op-green-text); }
.op-broker-listings { display: inline-block; margin-top: 12px; color: var(--op-green-text); font-weight: 600; font-size: 13px; text-decoration: none; }
.op-enquiry-panel { border: 1px solid var(--op-line); border-radius: 0; padding: 0; background: #fff; }
.op-enquiry-panel .op-side-title, .op-enquiry-panel h3 { font: 700 16px var(--op-font-head); color: var(--op-ink); margin: 0; padding: 16px 18px; border-bottom: 1px solid var(--op-line); }
.op-enquiry-panel .op-enquiry { padding: 22px; }
.op-enquiry form { border: 0; box-shadow: none; padding: 0; background: none; }
/* Even vertical rhythm: op-core left the Name/Email row with no bottom margin,
   so the Phone field crowded up under it. Space every field block equally. */
.op-enquiry .op-form-row { gap: 16px; margin: 0 0 16px; }
.op-enquiry .op-field { margin: 0 0 16px; }
.op-enquiry .op-form-row .op-field { margin: 0; }
.op-enquiry .op-field > label { display: block; margin: 0 0 7px; line-height: 1.2; }
.op-enquiry .op-field input, .op-enquiry .op-field textarea { margin-top: 0; width: 100%; box-sizing: border-box; }
.op-enquiry-form > .op-field:last-of-type { margin-bottom: 20px; }
.op-enquiry .op-field input, .op-enquiry .op-field textarea { border: 1px solid #cfd7d9; border-radius: 0; padding: 12px 13px; font: 400 14px var(--op-font-body); }
.op-enquiry .op-field input:focus, .op-enquiry .op-field textarea:focus { outline: 0; border-color: var(--op-green); box-shadow: none; }
.op-enquiry .op-btn-green { width: 100%; padding: 15px; }
.op-req { color: var(--op-green-text); }
.op-opt { color: var(--op-soft); font-weight: 400; }
.op-form-trust { font: 400 12px/1.55 var(--op-font-body); color: var(--op-soft); margin: 11px 0 0; }
.op-notice { border-radius: 0; padding: 13px 16px; margin-bottom: 14px; font-size: 14px; }
.op-notice-ok { background: var(--op-green-tint); border: 1px solid var(--op-green-cbrd); color: var(--op-green-text); }
.op-notice-ok strong { display: block; margin-bottom: 3px; }
.op-notice-err { background: #fbeeec; border: 1px solid #e6c0b8; color: #93402e; }

/* mobile sticky action bar (detail) */
.op-single-actions { position: fixed; left: 0; right: 0; bottom: 0; z-index: 600; display: none; gap: 8px; padding: 10px 14px; background: #fff; border-top: 1px solid var(--op-line); }
.op-single-actions .op-btn { flex: 1; min-height: 46px; }

/* ============================================================ tile card (block) */
.op-card:not(.op-card-row) {
	display: block; background: #fff; border: 1px solid var(--op-line); border-radius: 0;
	overflow: hidden; text-decoration: none; color: var(--op-ink); box-shadow: none; transition: border-color .15s, transform .15s;
}
.op-card.op-card-row { display: contents; }
.op-card:not(.op-card-row):hover { border-color: var(--op-ink); transform: translateY(-2px); }
.op-card:not(.op-card-row) .op-card-img { position: relative; aspect-ratio: 16 / 10; background: #dde4ea; }
.op-card:not(.op-card-row) .op-card-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.op-card-noimg { display: block; width: 100%; height: 100%; background: repeating-linear-gradient(135deg, #e4e9e7 0 8px, #eef1f0 8px 16px); }
.op-card:not(.op-card-row) .op-card-img .op-badge-status { position: absolute; left: 0; top: 0; }
.op-card:not(.op-card-row) .op-card-img .op-badge-grade { position: absolute; right: 0; top: 0; }
.op-card:not(.op-card-row) .op-card-body { display: block; padding: 14px 16px; }
.op-card:not(.op-card-row) .op-card-title { display: block; font: 700 15px var(--op-font-head); color: var(--op-ink); margin: 0 0 5px; line-height: 1.3; }
.op-card:not(.op-card-row) .op-card-meta { display: block; font: 400 12.5px var(--op-font-body); color: var(--op-soft); margin: 0 0 8px; }
.op-card:not(.op-card-row) .op-card-price { display: block; font: 700 15px var(--op-font-head); color: var(--op-ink); margin: 0; }
.op-grid { display: grid; gap: 16px; }
.op-grid-3 { grid-template-columns: repeat(3, 1fr); }
.op-grid-2 { grid-template-columns: repeat(2, 1fr); }
/* fav heart on tile cards */
.op-card:not(.op-card-row) .op-fav { position: absolute; top: 10px; right: 10px; width: 40px; height: 40px; border-radius: 50%;
	background: rgba(255,255,255,.94); border: 0; color: var(--op-ink-2); display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: 0 2px 8px rgba(38,48,58,.18); z-index: 2; }
.op-card:not(.op-card-row) .op-fav.is-saved { color: var(--op-green-text); }
.op-card:not(.op-card-row) .op-fav.is-saved svg path { fill: var(--op-green); stroke: var(--op-green); }
/* Compare toggle on each card (top-left, opposite the save heart) — clearly
   labelled so the compare feature is discoverable in the default Cards view. */
.op-card:not(.op-card-row) .op-cmp-btn { position: absolute; top: 10px; left: 10px; z-index: 2;
	display: inline-flex; align-items: center; gap: 6px; padding: 6px 11px 6px 9px; border: 0; border-radius: 999px;
	background: rgba(255,255,255,.94); color: var(--op-ink-2); font: 700 11.5px var(--op-font-head); letter-spacing: .01em;
	cursor: pointer; box-shadow: 0 2px 8px rgba(38,48,58,.18); }
.op-card:not(.op-card-row) .op-cmp-btn:hover { color: var(--op-ink); }
.op-card:not(.op-card-row) .op-cmp-btn.is-active { background: var(--op-green); color: var(--op-ink); }
.op-cmp-btn svg { flex: none; }
.op-empty { background: var(--op-bg); border: 1px solid var(--op-line); padding: 26px; text-align: center; color: var(--op-soft); }
.op-empty a { color: var(--op-green-text); }

/* detail mobile */
@media (max-width: 900px) {
	.op-single-layout { grid-template-columns: 1fr; gap: 28px; }
	.op-single-side { position: static; }
	.op-grid-3 { grid-template-columns: 1fr 1fr; }
	.op-single-actions { display: flex; }
	.op-single .op-wrap { padding-bottom: 70px; }
}
@media (max-width: 640px) {
	.op-single-top { flex-direction: column; align-items: flex-start; gap: 14px; }
	.op-single-top-price { text-align: left; }
	.op-gallery-main { height: 300px; }
	.op-gallery-thumb-btn { width: 96px; height: 66px; }
	.op-facts, .op-features { grid-template-columns: 1fr 1fr; }
	.op-grid-3 { grid-template-columns: 1fr; }
}

/* ============================================================ compare */
.op-comparepage { background: #fff; padding-bottom: 48px; }
.op-compare-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin: 14px 0 20px; }
.op-compare-head h1 { font: 700 28px var(--op-font-head); color: var(--op-ink); margin: 0 0 5px; letter-spacing: -.025em; }
.op-compare-sub { font: 400 13px var(--op-font-mono); color: var(--op-soft); margin: 0; }
.op-compare { display: grid; border: 1px solid var(--op-line); border-bottom: 0; }
.op-compare-corner { border-bottom: 1px solid var(--op-line); }
.op-compare-col { padding: 16px; border-left: 1px solid var(--op-line); border-bottom: 1px solid var(--op-line); position: relative; }
.op-compare-photo { display: block; height: 96px; margin-bottom: 12px; overflow: hidden; background: #dde4ea; }
.op-compare-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.op-compare-photo .op-card-noimg { display: block; width: 100%; height: 100%; }
.op-compare-name { font: 700 15px var(--op-font-head); color: var(--op-ink); margin: 0 0 4px; line-height: 1.3; }
.op-compare-meta { font: 400 12px var(--op-font-mono); color: var(--op-soft); margin: 0; }
.op-compare-remove { position: absolute; top: 8px; right: 8px; width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; border: 1px solid var(--op-line); border-radius: 50%; background: rgba(255,255,255,.94); color: var(--op-soft); text-decoration: none; cursor: pointer; font-size: 13px; line-height: 1; padding: 0; z-index: 3; transition: background .15s, color .15s, border-color .15s; }
.op-compare-remove:hover, .op-compare-remove:focus { background: var(--op-ink); border-color: var(--op-ink); color: #fff; outline: none; }
.op-compare-row { padding: 13px 16px; background: var(--op-bg); font: 500 12.5px var(--op-font-body); color: var(--op-ink-2); border-bottom: 1px solid var(--op-line-2); display: flex; align-items: center; }
.op-compare-cell { padding: 13px 16px; border-left: 1px solid var(--op-line); border-bottom: 1px solid var(--op-line-2); font: 500 14px var(--op-font-mono); color: var(--op-ink); display: flex; align-items: center; gap: 8px; }
.op-compare-cell.is-big { font: 700 16px var(--op-font-head); }
.op-compare-best { background: var(--op-green-chip); }
.op-best-tag { font: 700 10px var(--op-font-head); letter-spacing: .08em; color: var(--op-green-text); }
.op-compare-row.op-compare-foot { border-bottom: 1px solid var(--op-line); background: var(--op-bg); }
.op-compare-cell.op-compare-foot { padding: 16px; border-bottom: 1px solid var(--op-line); }
.op-compare-cell.op-compare-foot .op-btn { width: 100%; justify-content: center; }
.op-compare-cta { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 18px; padding: 14px 18px; background: var(--op-ink); }
.op-compare-cta p { margin: 0; font: 500 13.5px var(--op-font-body); color: #c6cfd5; }
/* Download-PDF button + print-only branding */
.op-compare-head-actions { display: flex; align-items: center; gap: 10px; flex: none; }
.op-compare-pdf { display: inline-flex; align-items: center; gap: 8px; }
.op-print-only { display: none; }

@media print {
	/* Print/Save-as-PDF: strip the site chrome, show a clean branded document. */
	.op-site-head, .op-site-foot, .op-compare-bar, .op-nav-toggle,
	.op-compare-head, .op-compare-head-actions, .op-compare-remove, .op-compare-cta,
	a[href*="wa.me"], .op-whatsapp-float, #wpadminbar { display: none !important; }
	/* The theme's print stylesheet appends the raw URL after every link
	   ( a:after { content: attr(href) } ), which printed "View listing (/property/…)"
	   and made the two buttons overlap. Suppress it and pin the button width. */
	a[href]:after, a[href]:before { content: "" !important; }
	.op-compare-cell.op-compare-foot .op-btn { width: 100% !important; box-sizing: border-box;
		white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
	html, body { margin: 0 !important; padding: 0 !important; background: #fff !important; }
	.op-comparepage { padding: 0 !important; }
	.op-crumbs { display: none !important; }
	.op-print-only { display: block !important; }
	.op-print-head { display: flex !important; align-items: baseline; justify-content: space-between;
		border-bottom: 3px solid var(--op-green); padding-bottom: 10px; margin-bottom: 18px;
		page-break-before: always; }
	.op-print-head .op-logo-word { font-size: 22px; }
	.op-print-title { font: 700 13px var(--op-font-head); color: var(--op-ink); letter-spacing: .02em; }
	.op-print-foot { margin-top: 20px; padding-top: 12px; border-top: 1px solid var(--op-line);
		font: 400 11px var(--op-font-mono); color: var(--op-soft); text-align: center; }
	.op-compare { break-inside: avoid; }
	.op-compare-photo img { max-height: 120px; }

	/* ---- Brochure cover (page 1) ---- */
	.op-print-cover { display: flex !important; flex-direction: column; justify-content: space-between;
		min-height: calc(100vh - 28mm); page-break-after: always; }
	.op-print-cover-top .op-logo-word { font-size: 30px; }
	.op-print-kick { font: 700 11px var(--op-font-mono); letter-spacing: .2em; text-transform: uppercase;
		color: var(--op-green-text); margin: 0 0 12px; }
	.op-print-cover-mid h1 { font: 700 44px/1.05 var(--op-font-head); color: var(--op-ink); margin: 0 0 10px; letter-spacing: -.025em; }
	.op-print-cover-sub { font: 400 15px var(--op-font-mono); color: var(--op-soft); margin: 0 0 30px; }
	.op-print-cover-list { list-style: none; margin: 0; padding: 0; border-top: 2px solid var(--op-green); }
	.op-print-cover-list li { display: flex; justify-content: space-between; align-items: baseline; gap: 20px;
		padding: 13px 0; border-bottom: 1px solid var(--op-line); }
	.op-pcl-name { font: 700 15.5px var(--op-font-head); color: var(--op-ink); }
	.op-pcl-meta { font: 400 12.5px var(--op-font-mono); color: var(--op-soft); white-space: nowrap; }
	.op-print-cover-foot { font: 400 11px var(--op-font-mono); color: var(--op-soft);
		border-top: 1px solid var(--op-line); padding-top: 12px; }

	/* ---- Brochure: one full page per property ---- */
	.op-print-property { display: flex !important; flex-direction: column; page-break-after: always;
		min-height: calc(100vh - 28mm); }
	.op-print-prop-head { display: flex; align-items: baseline; justify-content: space-between;
		border-bottom: 3px solid var(--op-green); padding-bottom: 8px; margin-bottom: 16px; }
	.op-print-prop-head .op-logo-word { font-size: 18px; }
	.op-print-prop-idx { font: 700 11px var(--op-font-mono); color: var(--op-soft); letter-spacing: .04em; }
	.op-print-prop-photo { height: 82mm; overflow: hidden; background: #dde4ea; margin-bottom: 16px; }
	.op-print-prop-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
	/* The theme's print reset does * { background: transparent !important } to save
	   ink; force the brand backgrounds we actually want in the brochure back on. */
	.op-print-prop-status { display: inline-block; font: 700 10px var(--op-font-head); letter-spacing: .08em;
		text-transform: uppercase; background: var(--op-green) !important; color: #14210a !important; padding: 4px 10px; margin-bottom: 9px; }
	.op-compare-best { background: var(--op-green-chip) !important; }
	.op-print-cover-list { }
	.op-print-prop-titles h2 { font: 700 26px/1.15 var(--op-font-head); color: var(--op-ink); margin: 0 0 4px; letter-spacing: -.01em; }
	.op-print-prop-area { font: 400 13px var(--op-font-mono); color: var(--op-soft); margin: 0 0 18px; }
	.op-print-facts { display: grid; grid-template-columns: repeat(3, 1fr); border: 1px solid var(--op-line);
		border-right: 0; border-bottom: 0; }
	.op-print-fact { padding: 13px 15px; border-right: 1px solid var(--op-line); border-bottom: 1px solid var(--op-line); }
	.op-print-fact-l { display: block; font: 700 9.5px var(--op-font-mono); letter-spacing: .09em;
		text-transform: uppercase; color: var(--op-soft); margin-bottom: 5px; }
	.op-print-fact-v { font: 700 17px var(--op-font-head); color: var(--op-ink); }
	.op-print-line { display: flex; gap: 16px; align-items: baseline; padding: 12px 0; border-bottom: 1px solid var(--op-line); }
	.op-print-line .op-print-fact-l { margin: 0; flex: 0 0 120px; }
	.op-print-line-v { font: 500 14px var(--op-font-body); color: var(--op-ink); }
	.op-print-prop-foot { margin-top: auto; padding-top: 12px; border-top: 1px solid var(--op-line);
		font: 400 11px var(--op-font-mono); color: var(--op-soft); }

	* { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; }
	@page { margin: 14mm; }
}
@media (max-width: 720px) {
	.op-compare-head { flex-direction: column; align-items: flex-start; gap: 12px; }
	.op-compare { grid-template-columns: 108px repeat(2, minmax(0,1fr)) !important; overflow-x: auto; }
	.op-compare-cell, .op-compare-row { padding: 10px; font-size: 12.5px; }
}

/* ============================================================ home (Desk) */
.op-home { background: #fff; }
.op-home a { text-decoration: none; }
.op-section-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
.op-section-head h2 { font: 700 26px var(--op-font-head); color: var(--op-ink); margin: 0; letter-spacing: -.02em; }
.op-section-link { font: 500 13.5px var(--op-font-body); color: var(--op-green-text); text-decoration: none; white-space: nowrap; }

/* hero — dark video band with content + a floating stock board over it */
.op-hero-video-band { position: relative; background: var(--op-ink); border-bottom: 4px solid var(--op-green);
	padding: clamp(44px,6.5vw,84px) 0 clamp(40px,5.5vw,68px); overflow: hidden;
	/* Full-bleed: after the Elementor conversion the hero sits in a boxed section;
	   break it back out to the viewport edges. The inner .op-wrap-wide keeps the
	   hero content and stock board at reading width. */
	margin-left: calc(50% - 50vw); margin-right: calc(50% - 50vw); }
.op-hero-bg { position: absolute; inset: 0; z-index: 0;
	background: #232C34 url('../img/hero-capetown.jpg') center/cover no-repeat; }
.op-hero-bg::after { content: ""; position: absolute; inset: 0;
	background: linear-gradient(90deg, rgba(18,24,30,.88) 0%, rgba(18,24,30,.66) 55%, rgba(18,24,30,.5) 100%); }
.op-hero-video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; opacity: 0; transition: opacity .8s ease; }
.op-hero-video.is-live { opacity: 1; }
/* lift ALL hero content (grid + the search bar below it) above the video */
.op-hero-video-band > .op-wrap-wide { position: relative; z-index: 2; }
.op-hero-grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: clamp(28px,4vw,56px); align-items: center; }
.op-hero-kick { letter-spacing: .18em; margin: 0 0 16px; }
.op-hero-video-band .op-hero-kick { color: var(--op-green); }
.op-hero-h1 { font: 700 clamp(32px,4.6vw,46px) var(--op-font-head); line-height: 1.08; letter-spacing: -.025em; color: #fff; margin: 0 0 18px; max-width: 18ch; text-shadow: 0 1px 20px rgba(0,0,0,.25); }
.op-hero-sub { font: 400 16px/1.6 var(--op-font-body); color: #d7dee4; max-width: 48ch; margin: 0 0 28px; }
.op-hero-video-band .op-stockboard { box-shadow: 0 30px 60px -14px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.30); }
/* full-width search bar, its own row below the headline + stat board */
/* Frosted-glass search bar: translucent white over the hero video, not a solid slab. */
/* True glassmorphism: transparent dark glass, real backdrop blur, a bright edge
   highlight and light text. Sits over the hero video as a frosted panel. */
.op-hero-search { background: rgba(15,21,27,.30); -webkit-backdrop-filter: blur(26px) saturate(1.7); backdrop-filter: blur(26px) saturate(1.7); border: 1px solid rgba(255,255,255,.22); padding: 0; box-shadow: 0 30px 60px -14px rgba(0,0,0,.55), inset 0 1px 0 rgba(255,255,255,.30); max-width: none; margin-top: clamp(24px, 3vw, 40px); }
.op-hero-search-main { display: flex; flex-wrap: nowrap; align-items: stretch; gap: 0; }
.op-hero-search-main .op-searchx-kw { display: flex; align-items: center; gap: 10px; flex: 1 1 auto; min-width: 200px; padding: 0 22px; }
.op-hero-search-main .op-searchx-kw svg { color: rgba(255,255,255,.72); flex: none; }
.op-hero-search-main .op-searchx-kw input { border: 0; outline: 0; width: 100%; padding: 20px 0; font: 400 16px var(--op-font-body); background: none; color: #fff; }
.op-hero-search-main .op-searchx-kw input::placeholder { color: rgba(255,255,255,.66); opacity: 1; }
.op-hero-search-main .op-searchx-sel { flex: 0 0 auto; width: auto; min-width: 172px; border: 0; border-left: 1px solid rgba(255,255,255,.16); padding: 0 46px 0 18px; font: 500 14.5px var(--op-font-body); color: #fff; cursor: pointer; border-radius: 0;
	background: transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='13' height='13' viewBox='0 0 24 24' fill='none' stroke='%23e2e8ec' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 18px center; }
.op-hero-search-main .op-searchx-sel option { color: #1a2027; } /* native dropdown list stays readable */
.op-hero-search-main .op-searchx-sel:focus { outline: 0; box-shadow: inset 0 0 0 2px rgba(147,213,0,.55); }
.op-hero-search-main .op-searchx-go { flex: 0 0 auto; border: 0; background: var(--op-green); color: var(--op-ink); font: 700 14.5px var(--op-font-head); letter-spacing: .04em; padding: 0 44px; margin: 0; cursor: pointer; }
.op-hero-search-main .op-searchx-go:hover { background: #86c400; }
.op-hero-search-foot { display: flex; align-items: center; gap: 14px; padding: 13px 22px; border-top: 1px solid rgba(255,255,255,.14); font: 400 13px var(--op-font-mono); color: rgba(255,255,255,.7); }
.op-hero-search-foot a { color: #bdea52; text-decoration: none; font-family: var(--op-font-body); font-weight: 600; }
.op-hero-sep { width: 1px; height: 14px; background: var(--op-line); }
@media (max-width: 820px) {
	.op-hero-search-main { flex-wrap: wrap; }
	.op-hero-search-main .op-searchx-kw { flex: 1 1 100%; border-bottom: 1px solid var(--op-line); }
	.op-hero-search-main .op-searchx-sel { flex: 1 1 40%; border-left: 0; border-right: 1px solid var(--op-line); border-bottom: 1px solid var(--op-line); min-width: 0; padding: 14px 40px 14px 16px; }
	.op-hero-search-main .op-searchx-go { flex: 1 1 100%; padding: 16px; }
}

/* stock board */
.op-stockboard { border: 1px solid rgba(255,255,255,.22); background: rgba(15,21,27,.30); -webkit-backdrop-filter: blur(26px) saturate(1.7); backdrop-filter: blur(26px) saturate(1.7); max-width: 312px; }
.op-stockboard-head { font: 700 9px var(--op-font-head); letter-spacing: .14em; text-transform: uppercase; color: rgba(255,255,255,.6); margin: 0; padding: 8px 14px; border-bottom: 1px solid rgba(255,255,255,.14); }
.op-stockboard-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0; }
/* square cells, hairline dividers only (no rounded per-cell border) */
.op-stockboard-grid .op-stat { padding: 9px 14px; border: 0; border-radius: 0; text-align: left; background: transparent; }
.op-stockboard-grid .op-stat:nth-child(1), .op-stockboard-grid .op-stat:nth-child(3) { border-right: 1px solid rgba(255,255,255,.12); }
.op-stockboard-grid .op-stat:nth-child(1), .op-stockboard-grid .op-stat:nth-child(2) { border-bottom: 1px solid rgba(255,255,255,.12); }
.op-stat-n { font: 700 18px/1.05 var(--op-font-mono); color: #fff; margin: 0; letter-spacing: -.01em; }
.op-stat-l { font: 400 11px var(--op-font-body); color: rgba(255,255,255,.62); margin: 2px 0 0; }
.op-stockboard-link { display: block; padding: 8px 14px; border-top: 1px solid rgba(255,255,255,.14); font: 600 11.5px var(--op-font-body); color: #bdea52; text-decoration: none; background: transparent; }

/* three paths */
.op-paths { background: #fff; border-bottom: 1px solid var(--op-line); }
.op-paths-grid { display: grid; grid-template-columns: repeat(3,1fr); }
.op-path { text-decoration: none; padding: 28px; border-right: 1px solid var(--op-line-2); display: block; }
.op-paths-grid .op-path:last-child { border-right: 0; }
.op-path-kick { font: 700 10.5px var(--op-font-head); letter-spacing: .16em; text-transform: uppercase; color: var(--op-green-text); margin: 0 0 10px; }
.op-path h3 { font: 700 19px var(--op-font-head); color: var(--op-ink); margin: 0 0 7px; letter-spacing: -.01em; }
.op-path-desc { font: 400 13.5px/1.55 var(--op-font-body); color: var(--op-muted); margin: 0 0 12px; max-width: 34ch; }
.op-path-go { font: 500 13px var(--op-font-body); color: var(--op-green-text); }
.op-path:hover h3 { color: var(--op-green-text); }

/* featured + areas sections */
.op-home-featured { background: #fff; padding: 44px 0 20px; }
.op-home-areas { background: #fff; padding: 36px 0 48px; }
.op-node-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: 1px; background: var(--op-line); border: 1px solid var(--op-line); }
.op-node { background: #fff; padding: 18px; text-decoration: none; display: block; }
.op-node-name { font: 700 16px var(--op-font-head); color: var(--op-ink); margin: 0 0 12px; }
.op-node-n { font: 700 22px var(--op-font-mono); color: var(--op-ink); margin: 0 0 3px; }
.op-node-l { font: 400 12px var(--op-font-body); color: var(--op-soft); margin: 0 0 10px; }
.op-node-tag { font: 400 12.5px var(--op-font-body); color: var(--op-green-text); margin: 0; }
.op-node:hover { background: var(--op-bg); }

/* alerts band */
.op-alerts-band { background: var(--op-ink); padding: 44px 0; }
.op-alerts-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 56px; align-items: center; }
.op-kick-light { color: var(--op-green); }
.op-alerts-band h2 { font: 700 28px/1.15 var(--op-font-head); color: #fff; margin: 0 0 10px; letter-spacing: -.02em; }
.op-alerts-sub { font: 400 14.5px/1.6 var(--op-font-body); color: #b9c3ca; margin: 0; max-width: 44ch; }
.op-alerts-form { display: flex; gap: 10px; align-items: stretch; }
.op-alerts-form input { flex: 1; border: 1px solid rgba(255,255,255,.22); background: rgba(255,255,255,.07); color: #fff; font: 400 14.5px var(--op-font-body); padding: 13px 14px; outline: 0; }
.op-alerts-form input::placeholder { color: #8b98a1; }
.op-alerts-form .op-btn { flex: none; }

/* tail: news + brokers */
.op-home-tail { background: #fff; padding: 44px 0 48px; }
.op-tail-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 56px; }
.op-news-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 28px 26px; margin-top: 6px; }
.op-news-card { display: block; text-decoration: none; }
.op-news-thumb { display: block; width: 100%; aspect-ratio: 16 / 10; overflow: hidden; background: #dde4ea; border-radius: 3px; margin-bottom: 14px; }
.op-news-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .5s ease; }
.op-news-card:hover .op-news-thumb img { transform: scale(1.04); }
.op-news-date { display: block; font: 400 12px var(--op-font-mono); color: var(--op-soft); margin-bottom: 6px; }
.op-news-card .op-card-title { display: block; font: 700 18px/1.34 var(--op-font-head); color: var(--op-ink); margin-bottom: 8px; }
.op-news-ex { display: block; font: 400 14px/1.55 var(--op-font-body); color: var(--op-muted); }
.op-home-brokers { border: 1px solid var(--op-line); padding: 22px; height: fit-content; }
.op-home-broker { display: flex; gap: 14px; align-items: flex-start; padding-bottom: 16px; border-bottom: 1px solid var(--op-line-2); margin-bottom: 16px; }
.op-home-broker .op-broker-photo { width: 56px; height: 56px; flex: none; margin: 0; overflow: hidden; background: #dde4ea; border-radius: 50%; }
.op-home-broker .op-broker-photo img { width: 100%; height: 100%; object-fit: cover; }
.op-home-broker > span:last-child { padding-top: 2px; min-width: 0; }
.op-home-broker .op-broker-namelink { display: block; font: 700 15px/1.3 var(--op-font-head); color: var(--op-ink); text-decoration: none; margin-bottom: 3px; }
.op-home-broker .op-broker-role { display: block; font: 400 12.5px/1.4 var(--op-font-body); color: var(--op-soft); }
.op-home-broker .op-broker-ppra { display: block; font: 400 11.5px var(--op-font-mono); color: var(--op-soft); margin-top: 4px; }

/* home mobile */
@media (max-width: 900px) {
	.op-hero-grid, .op-alerts-grid, .op-tail-grid { grid-template-columns: 1fr; gap: 28px; }
	.op-paths-grid { grid-template-columns: 1fr; }
	.op-path { border-right: 0; border-bottom: 1px solid var(--op-line-2); }
	.op-node-grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 600px) {
	.op-node-grid { grid-template-columns: 1fr; }
	.op-alerts-form { flex-direction: column; align-items: stretch; }
	.op-section-head { flex-direction: column; align-items: flex-start; gap: 6px; }
}

/* ============================================================ content pages */
/* Full-bleed grey header band, but the header CONTENT stays in the same Elementor
   column as the page body below it, so the title lines up with the body instead
   of sitting indented. The band runs edge to edge via a 100vw background layer;
   html{overflow-x:clip} keeps that from adding a horizontal scrollbar. */
.op-pagehead { position: relative; padding: clamp(28px,4vw,44px) 0; }
/* Charcoal page-header band. Brief priority 1: inner pages read as washed out
   because the corporate charcoal only appears on the homepage. Leading every
   inner page with a charcoal header (matching the home hero) restores the
   charcoal/white rhythm the client signed off on. Colours mirror the hero:
   green kicker, white title, muted-light intro. */
.op-pagehead::before { content: ""; position: absolute; top: 0; bottom: 0; left: 50%; transform: translateX(-50%); width: 100vw; background: var(--op-ink); z-index: 0; }
.op-pagehead > .op-wrap-wide { position: relative; z-index: 1; max-width: none; padding: 0; }
/* Close the thin white strip between the nav and the header band: Elementor's
   default section/column wrappers add ~10px of top padding, which shows above
   the full-bleed band. Neutralise the top space on whichever wrapper holds the
   header band (classic .elementor-* markup or optimized .e-con containers). */
.elementor-element-populated:has(.op-pagehead),
.elementor-element-populated:has(.op-hero-video-band),
.elementor-widget-wrap:has(> .elementor-widget .op-pagehead),
.elementor-widget-wrap:has(> .elementor-widget .op-hero-video-band),
.elementor-section:has(.op-pagehead) > .elementor-container,
.elementor-section:has(.op-hero-video-band) > .elementor-container,
.e-con:has(.op-pagehead), .e-con:has(.op-hero-video-band),
.e-con-inner:has(.op-pagehead), .e-con-inner:has(.op-hero-video-band) { padding-top: 0 !important; margin-top: 0 !important; }
.elementor-widget:has(.op-pagehead), .elementor-widget:has(.op-hero-video-band) { margin-top: 0 !important; }

/* --- Undo the Elementor 1140px box on full-width page bodies --- */
/* The conversion trapped the whole home page in a 1140px column, so the city
   band and the "latest from the desk" section were squashed. Let the home body
   fill the width; each block's own inner wrap (op-wrap / op-wrap-wide) still
   holds its text to reading width. */
body.home .elementor-section > .elementor-container { max-width: 100%; }
body.home .elementor-widget-wrap.elementor-element-populated { padding-left: 0; padding-right: 0; }
/* Area Guides directory keeps the default boxed width so it lines up with the
   boxed page header above it (the header no longer breaks out its content). */
.op-guides-wrap { max-width: none; padding: 0; }

.op-pagehead .op-kick { margin: 0 0 10px; color: var(--op-green); }
.op-pagehead h1 { font: 700 clamp(26px,3.4vw,34px) var(--op-font-head); color: #fff; margin: 0; letter-spacing: -.02em; }
.op-pagehead-intro { font: 400 16px/1.6 var(--op-font-body); color: #c6cfd5; margin: 10px 0 0; max-width: 62ch; }
.op-page-body { background: #fff; padding: 40px 0 60px; }
.op-prose { max-width: 68ch; font: 400 15.5px/1.75 var(--op-font-body); color: #4a5762; }
.op-prose h2 { font: 700 20px var(--op-font-head); color: var(--op-ink); margin: 26px 0 8px; letter-spacing: -.015em; }
.op-prose h2:first-child { margin-top: 0; }
.op-prose p { margin: 0 0 16px; }
.op-prose ul { margin: 0 0 16px; padding-left: 20px; }
.op-prose li { margin-bottom: 8px; }
.op-prose a { color: var(--op-green-text); }
/* broker + area shortcode grids sit on the Desk grid */
.op-page-body .op-grid, .op-page-body .op-broker-grid, .op-page-body .op-area-grid { margin-top: 8px; }

/* ============================================================ areas directory */
.op-areas-tools { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin: 0 0 22px; }
.op-areas-search { flex: 1 1 340px; max-width: 460px; display: block; }
.op-areas-search input { width: 100%; padding: 13px 16px 13px 44px; font: 400 15px var(--op-font-body); color: var(--op-ink);
	border: 1px solid var(--op-line); border-radius: 0; background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%237c8894' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4.3-4.3'/%3E%3C/svg%3E") no-repeat 16px center; }
.op-areas-search input:focus { outline: none; border-color: var(--op-green); box-shadow: 0 0 0 3px var(--op-green-tint); }
.op-areas-count { margin: 0; font: 500 13px var(--op-font-mono); color: var(--op-soft); white-space: nowrap; }

/* Two tiers: areas that actually have stock lead as rich cards; the long tail
   is a compact A-Z directory so 100+ nodes stay browsable, not a wall of noise. */
.op-areas-sec { margin: 0 0 34px; }
.op-areas-sec:last-child { margin-bottom: 0; }
.op-areas-sechead { display: flex; align-items: baseline; gap: 12px; margin: 0 0 16px; padding-bottom: 10px; border-bottom: 1px solid var(--op-line); }
.op-areas-sechead h2 { margin: 0; font: 700 18px/1.2 var(--op-font-head); letter-spacing: -.01em; color: var(--op-ink); }
.op-areas-secn { font: 700 12px var(--op-font-mono); color: var(--op-soft); background: #eef1f4; border-radius: 999px; padding: 2px 10px; }

.op-areas-grid { display: grid; gap: 12px; }
.op-areas-grid-stock { grid-template-columns: repeat(auto-fill, minmax(224px, 1fr)); }
.op-areas-grid-guide { grid-template-columns: repeat(auto-fill, minmax(172px, 1fr)); gap: 8px; }

.op-area-card { position: relative; display: flex; align-items: center; gap: 13px; padding: 14px 16px;
	border: 1px solid var(--op-line); border-radius: 14px; background: #fff; text-decoration: none;
	transition: border-color .15s, transform .15s, box-shadow .15s; }
.op-area-card:hover { border-color: var(--op-green); transform: translateY(-2px); box-shadow: 0 10px 24px rgba(20,26,32,.09); }
.op-area-name { font: 700 15px/1.25 var(--op-font-head); color: var(--op-ink); margin: 0; text-transform: none; }
.op-area-card:hover .op-area-name { color: var(--op-green-text); }
.op-area-tag { display: block; margin-top: 2px; font: 600 12.5px var(--op-font-body); color: var(--op-soft); }

.op-area-card.has-stock .op-area-count { flex: 0 0 auto; width: 48px; height: 48px; display: grid; place-items: center;
	border-radius: 12px; background: var(--op-green); color: #16230a; font: 800 19px/1 var(--op-font-head); }
.op-area-card.has-stock .op-area-body { display: flex; flex-direction: column; min-width: 0; }
.op-area-card.has-stock .op-area-tag-stock { color: var(--op-green-text); font-weight: 700; }

.op-area-card.op-area-guide { flex-direction: column; align-items: flex-start; gap: 1px; padding: 12px 14px; border-radius: 11px; }
.op-area-card.op-area-guide .op-area-name { font-size: 14px; }
.op-area-card.op-area-guide .op-area-tag { font: 700 11px var(--op-font-mono); letter-spacing: .02em; }
.op-areas-none { margin-top: 20px; }

/* ============================================================ calculators */
.op-calc { border: 1px solid var(--op-line); background: #fff; max-width: 760px; }
.op-calc-tabs { display: flex; flex-wrap: wrap; border-bottom: 1px solid var(--op-line); }
.op-calc-tab { border: 0; background: #fff; cursor: pointer; padding: 14px 18px; font: 700 12px var(--op-font-head);
	letter-spacing: .06em; text-transform: uppercase; color: var(--op-muted); border-bottom: 2px solid transparent; margin-bottom: -1px; }
/* The tabs are native <button>s, so a leftover Elementor/theme button state was
   bleeding a pink hover + blue focus ring through. Pin every state to the Desk look. */
.op-calc-tab:hover, .op-calc-tab:focus, .op-calc-tab:active { background: #fff !important; color: var(--op-ink) !important; outline: none !important; box-shadow: none !important; }
.op-calc-tab:focus-visible { box-shadow: inset 0 -3px 0 var(--op-green) !important; }
.op-calc-tab.is-active { color: var(--op-ink) !important; background: #fff !important; border-bottom-color: var(--op-green); }
.op-calc-panel { padding: 22px; }
.op-calc-panel[hidden] { display: none; }
.op-calc .op-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
.op-calc .op-form-row-3 { grid-template-columns: repeat(3, 1fr); }
.op-calc-panel label { display: block; font: 500 12.5px var(--op-font-body); color: var(--op-ink-2); margin-bottom: 7px; }
.op-calc-panel input { width: 100%; border: 1px solid var(--op-line); padding: 11px 12px; font: 400 14px var(--op-font-mono); color: var(--op-ink); border-radius: 0; background: #fff; }
.op-calc-panel input:focus { outline: 0; border-color: var(--op-green); }
.op-calc-results { display: flex; flex-wrap: wrap; gap: 0; background: var(--op-ink); padding: 20px 22px; margin-top: 6px; }
/* Stats sit directly on the dark panel: no white card, square, hairline dividers.
   Without this they inherit op-core's white .op-stat card and the white numbers
   vanish against it. */
.op-calc-results .op-stat { background: transparent; border: 0; border-radius: 0; box-shadow: none; margin: 0; padding: 4px 28px; text-align: left; flex: 1 1 0; min-width: 130px; }
.op-calc-results .op-stat:first-child { padding-left: 0; }
.op-calc-results .op-stat + .op-stat { border-left: 1px solid rgba(255,255,255,.14); }
.op-calc-results .op-stat-big { font: 700 26px var(--op-font-mono); color: #fff; margin: 0; }
.op-calc-results .op-stat-cap { font: 400 12px var(--op-font-body); color: #b9c3ca; margin: 4px 0 0; }
.op-calc-note { font: 400 12px var(--op-font-body); color: var(--op-soft); margin: 12px 0 0; }
@media (max-width: 600px) { .op-calc .op-form-row, .op-calc .op-form-row-3 { grid-template-columns: 1fr; } }

/* ============================================================ services grid */
.op-services-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 0; border: 1px solid var(--op-line); border-bottom: 0; }
.op-service { position: relative; padding: 34px 36px; border-bottom: 1px solid var(--op-line); scroll-margin-top: 88px; transition: box-shadow .3s, background .3s; }
/* When reached from the Services nav dropdown (#tenant-representation, etc.),
   briefly highlight the target card so the jump is obvious. */
.op-service:target { box-shadow: inset 3px 0 0 var(--op-green); background: var(--op-green-tint); }
.op-service:nth-child(odd) { border-right: 1px solid var(--op-line); }
.op-service-num { display: block; font: 700 13px var(--op-font-mono); color: var(--op-green-text); letter-spacing: .06em; margin-bottom: 14px; }
.op-service-title { font: 700 20px/1.2 var(--op-font-head); color: var(--op-ink); margin: 0 0 8px; }
.op-service-copy { font: 400 14.5px/1.6 var(--op-font-body); color: var(--op-soft); margin: 0; max-width: 46ch; }
@media (max-width: 720px) {
	.op-services-grid { grid-template-columns: 1fr; }
	.op-service:nth-child(odd) { border-right: 0; }
	.op-service { padding: 26px 22px; }
}

/* ============================================================ contact page */
.op-contact { display: grid; grid-template-columns: minmax(0,1fr) 440px; gap: 44px; align-items: start; }
.op-contact-h { font: 700 18px var(--op-font-head); color: var(--op-ink); margin: 0 0 16px; }
.op-contact-now { border: 1px solid var(--op-line); border-top: 3px solid var(--op-green); padding: 22px 24px; margin-bottom: 34px; background: var(--op-bg); }
.op-contact-now .op-contact-h { margin-bottom: 14px; }
.op-contact-now-btns { display: flex; gap: 10px; flex-wrap: wrap; }
.op-contact-hours { margin: 14px 0 0; font: 400 13px var(--op-font-body); color: var(--op-soft); }
.op-contact-offices { display: grid; grid-template-columns: 1fr 1fr; gap: 26px 34px; }
.op-contact-office h3 { font: 700 15.5px var(--op-font-head); color: var(--op-ink); margin: 0 0 5px; }
.op-branch-address { font: 400 13.5px/1.5 var(--op-font-body); color: var(--op-soft); margin: 0 0 8px; }
.op-contact-office-links { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font: 500 13px var(--op-font-body); margin: 0; }
.op-contact-office-links a { color: var(--op-green-text); text-decoration: none; }
.op-contact-office-links a:hover { text-decoration: underline; }
.op-dot { color: var(--op-line-2); }
.op-contact-form { position: sticky; top: 90px; }
.op-branch-directions { display: inline-block; margin-top: 12px; font: 600 13px var(--op-font-body); color: var(--op-green-text); text-decoration: none; }
@media (max-width: 900px) { .op-contact { grid-template-columns: 1fr; gap: 34px; } .op-contact-form { position: static; } }
@media (max-width: 540px) { .op-contact-offices { grid-template-columns: 1fr; } .op-contact-now-btns .op-btn { flex: 1 1 100%; } }

/* ============================================================ sell / let landlord page */
.op-sell-h { font: 700 20px var(--op-font-head); color: var(--op-ink); margin: 0 0 20px; }
.op-sell-steps { margin-bottom: 46px; }
.op-sell-steps-grid { display: grid; grid-template-columns: repeat(4, 1fr); border: 1px solid var(--op-line); border-right: 0; }
.op-sell-step { padding: 24px 24px 26px; border-right: 1px solid var(--op-line); }
.op-sell-step-n { display: block; font: 700 13px var(--op-font-mono); color: var(--op-green-text); letter-spacing: .06em; margin-bottom: 12px; }
.op-sell-step h3 { font: 700 16px var(--op-font-head); color: var(--op-ink); margin: 0 0 8px; }
.op-sell-step p { font: 400 13.5px/1.6 var(--op-font-body); color: var(--op-soft); margin: 0; }
.op-sell-why { margin-bottom: 46px; }
.op-sell-why-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.op-sell-card { border: 1px solid var(--op-line); border-top: 3px solid var(--op-green); padding: 22px 22px 24px; background: #fff; }
.op-sell-card h3 { font: 700 16px var(--op-font-head); color: var(--op-ink); margin: 0 0 8px; }
.op-sell-card p { font: 400 13.5px/1.6 var(--op-font-body); color: var(--op-soft); margin: 0; }
.op-sell-cta { background: var(--op-ink); }
.op-sell-cta-in { display: grid; grid-template-columns: minmax(0,1fr) 440px; gap: 40px; padding: 40px; align-items: center; }
.op-sell-cta-copy h2 { font: 800 26px var(--op-font-head); color: #fff; margin: 0 0 10px; letter-spacing: -.01em; }
.op-sell-cta-copy p { font: 400 15px/1.6 var(--op-font-body); color: rgba(255,255,255,.75); margin: 0; max-width: 46ch; }
.op-sell-cta-form .op-enquiry-panel { background: #fff; }
@media (max-width: 860px) {
	.op-sell-steps-grid { grid-template-columns: 1fr 1fr; border-right: 1px solid var(--op-line); }
	.op-sell-step:nth-child(2n) { border-right: 0; }
	.op-sell-why-grid { grid-template-columns: 1fr; }
	.op-sell-cta-in { grid-template-columns: 1fr; padding: 28px 22px; }
}

/* ============================================================ map markers */
.op-price-pin { display: flex; align-items: center; justify-content: center; background: none; border: 0; }
.op-price-pin-in { display: inline-block; background: var(--op-ink); color: #fff; font: 700 12.5px/1 var(--op-font-head);
	padding: 7px 10px; border-radius: 999px; white-space: nowrap; box-shadow: 0 2px 6px rgba(0,0,0,.3); border: 2px solid #fff; cursor: pointer; }
.op-price-pin.is-active .op-price-pin-in, .op-price-pin:hover .op-price-pin-in { background: var(--op-green); color: var(--op-ink); z-index: 5; }
.op-cluster { background: none; }
.op-cluster span { display: flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 50%;
	background: var(--op-green); color: var(--op-ink); font: 700 15px var(--op-font-head); border: 3px solid #fff; box-shadow: 0 2px 8px rgba(0,0,0,.28); }
.op-map-pop { display: block; width: 210px; text-decoration: none; color: var(--op-ink); }
.op-map-pop img { width: 100%; height: 108px; object-fit: cover; display: block; }
.op-map-pop-b { display: block; padding: 8px 2px 2px; }
.op-map-pop-b strong { display: block; font-size: 14px; line-height: 1.3; }
.op-map-pop-b em { display: block; font-style: normal; color: var(--op-green-text); font-weight: 700; margin-top: 3px; }
.leaflet-popup-content { margin: 10px; }
.leaflet-popup-content-wrapper { border-radius: 0; }

/* ============================================================ gallery lightbox */
.op-lightbox { position: fixed; inset: 0; z-index: 10000; background: rgba(18,24,30,.94);
	display: none; align-items: center; justify-content: center; padding: 40px; }
.op-lightbox.is-open { display: flex; }
.op-lightbox img { max-width: 92vw; max-height: 86vh; object-fit: contain; box-shadow: 0 20px 60px rgba(0,0,0,.5); }
.op-lb-close { position: absolute; top: 16px; right: 20px; width: 44px; height: 44px; border: 0;
	background: rgba(255,255,255,.1); color: #fff; font-size: 26px; line-height: 1; cursor: pointer; }
.op-lb-close:hover { background: rgba(255,255,255,.22); }
.op-lb-nav { position: absolute; top: 50%; transform: translateY(-50%); width: 52px; height: 52px; border: 0;
	background: rgba(255,255,255,.1); color: #fff; font-size: 30px; line-height: 1; cursor: pointer; }
.op-lb-nav:hover { background: rgba(255,255,255,.22); }
.op-lb-prev { left: 20px; }
.op-lb-next { right: 20px; }
.op-lb-count { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); color: #d7dee4; font: 500 13px var(--op-font-mono); }
@media (max-width: 600px) { .op-lightbox { padding: 16px; } .op-lb-nav { width: 42px; height: 42px; font-size: 24px; } }

/* ------------------------------------------------------------ WhatsApp float */
.op-wa-float {
	position: fixed; right: 20px; bottom: 20px; z-index: 8000;
	width: 52px; height: 52px; border-radius: 50%; background: #25D366; color: #fff;
	display: flex; align-items: center; justify-content: center; text-decoration: none;
	box-shadow: 0 6px 20px rgba(37,211,102,.4);
}
.op-wa-float:hover { background: #1fbe5a; }
.op-wa-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }

/* ------------------------------------------------------------ mobile chrome */
@media (max-width: 900px) {
	.op-site-nav {
		position: fixed; inset: 64px 0 auto 0; background: #fff; border-bottom: 1px solid var(--op-line);
		transform: translateY(-8px); opacity: 0; visibility: hidden; transition: all .18s; padding: 8px 0;
	}
	.op-site-nav.is-open { transform: none; opacity: 1; visibility: visible; }
	.op-nav-list { flex-direction: column; gap: 0; }
	.op-nav-list li { border-bottom: 1px solid var(--op-line-2); }
	.op-nav-list a { display: block; padding: 14px 20px; font-size: 15px; border-bottom: 0; }
	.op-nav-list .op-sub { position: static; opacity: 1; visibility: visible; transform: none; border: 0; box-shadow: none; padding: 0 0 8px 16px; }
	/* Slim the mobile header so the menu button is always reachable:
	   drop the phone pill and the "Shortlist" text (keep the heart + count). */
	.op-head-list, .op-head-call { display: none; }
	.op-head-saved { margin-left: auto; gap: 6px; padding: 0 10px; min-width: 44px; }
	.op-head-saved-icon { display: inline-flex; }
	.op-head-saved-label { display: none; }
	.op-nav-toggle { display: block; flex: none; }
}

/* ==================================================================
   Design-audit fixes — Aug 2026
   ================================================================== */

/* [9] Theme reset.css paints every bare <button>/<input type=submit> a debug
   pink (#CC3366) for text, border and hover/focus background. Neutralise it for
   anything that is not one of our own components (which set their own look). */
button:not([class*="op-"]):not([class*="elementor"]),
input[type="button"]:not([class*="op-"]),
input[type="submit"]:not([class*="op-"]),
input[type="reset"]:not([class*="op-"]) { color: inherit; border-color: currentColor; }
button:not([class*="op-"]):not([class*="elementor"]):hover,
button:not([class*="op-"]):not([class*="elementor"]):focus,
input[type="button"]:not([class*="op-"]):hover, input[type="button"]:not([class*="op-"]):focus,
input[type="submit"]:not([class*="op-"]):hover, input[type="submit"]:not([class*="op-"]):focus,
input[type="reset"]:not([class*="op-"]):hover, input[type="reset"]:not([class*="op-"]):focus {
	background-color: transparent !important; color: inherit;
}

/* [5] Button contrast.
   - Ghost buttons were flipping to white text on a light-grey hover (invisible).
     Give them a solid dark hover so the white label reads (>8:1).
   - Primary green buttons get a crisp near-black label (11:1) not muddy slate. */
.op-btn.op-btn-ghost:hover, .op-btn-ghost:hover, .op-rail-apply:hover {
	background-color: var(--op-grey-dark) !important; border-color: var(--op-grey-dark) !important; color: #fff !important;
}
.op-btn-green, .op-btn.op-btn-green, .op-search-go, .op-searchx-go,
.op-cmp-btn, .op-badge-status, .op-area-tag-stock, .op-compare-pdf {
	color: #111c07 !important;
}

/* [6] Results toolbar: Cards/Table, List/Map and the sort dropdown share one
   40px baseline, vertically centred. */
.op-results-controls { align-items: center; }
.op-results-controls > *,
.op-results-controls .op-view-toggle,
.op-results-controls .op-sort { height: 40px; box-sizing: border-box; }
.op-results-controls .op-sort { padding: 0 34px 0 12px; display: inline-flex; align-items: center; line-height: 1; }
.op-results-controls .op-view-toggle a,
.op-results-controls .op-view-toggle button { display: inline-flex; align-items: center; height: 100%; }

/* [2] Properties search bar: sticks under the header as you scroll results.
   Charcoal frosted-glass panel so the primary search stops disappearing into
   white (API brief, Priority 1 contrast). White controls pop against it. */
.op-search-strip {
	position: sticky; top: 64px; z-index: 50;
	background: rgba(35,44,52,.94) !important;
	-webkit-backdrop-filter: blur(16px) saturate(1.4);
	backdrop-filter: blur(16px) saturate(1.4);
	border: 1px solid rgba(35,44,52,.94) !important;
	box-shadow: 0 10px 28px rgba(20,30,40,.22);
}

/* [8] News keyword search bar */
.op-news-search { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 0 0 26px; }
.op-news-search-field { display: flex; align-items: center; gap: 10px; flex: 1 1 360px; min-width: 220px;
	background: #fff; border: 1px solid var(--op-line); padding: 0 14px; color: var(--op-soft); }
.op-news-search-field input { flex: 1 1 auto; border: 0; outline: 0; background: none; padding: 13px 0;
	font: 400 15px var(--op-font-body); color: var(--op-ink); }
.op-news-search-field:focus-within { border-color: var(--op-green); box-shadow: 0 0 0 3px var(--op-green-tint); }
.op-news-search .op-btn { flex: 0 0 auto; }
.op-news-search-clear { flex: 0 0 auto; font: 600 13px var(--op-font-body); color: var(--op-soft); text-decoration: none; }
.op-news-search-clear:hover { color: var(--op-green-text); }

/* ==================================================================
   Compare — empty state, enquiry modal, brochure polish (Aug 2026)
   ================================================================== */

/* Graceful state when there are fewer than two listings to compare */
.op-compare-empty { max-width: 560px; margin: 26px auto 60px; text-align: center; }
.op-compare-empty .op-kick { color: var(--op-green-text); }
.op-compare-empty h1 { font: 700 30px var(--op-font-head); color: var(--op-ink); margin: 6px 0 12px; letter-spacing: -.02em; }
.op-compare-empty-lead { font: 400 15px/1.6 var(--op-font-body); color: var(--op-soft); margin: 0 0 24px; }
.op-compare-empty-one { display: inline-flex; align-items: center; gap: 12px; text-decoration: none; border: 1px solid var(--op-line); border-radius: 14px; padding: 10px 16px 10px 10px; margin: 0 auto 24px; }
.op-compare-empty-one img { width: 64px; height: 48px; object-fit: cover; border-radius: 8px; }
.op-compare-empty-one-t { font: 700 14px var(--op-font-head); color: var(--op-ink); }
.op-compare-empty > .op-btn { display: inline-flex; }

/* Enquiry modal (popup) */
.op-modal { position: fixed; inset: 0; z-index: 12000; display: flex; align-items: center; justify-content: center; padding: 20px; }
.op-modal-backdrop { position: absolute; inset: 0; background: rgba(15,21,27,.55); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
.op-modal-card { position: relative; z-index: 1; width: 100%; max-width: 460px; max-height: 90vh; overflow: auto; background: #fff; border-radius: 16px; padding: 26px 26px 28px; box-shadow: 0 30px 70px -20px rgba(0,0,0,.5); animation: opModalIn .18s ease; }
@keyframes opModalIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.op-modal-x { position: absolute; top: 14px; right: 14px; width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; border: 0; border-radius: 50%; background: var(--op-bg); color: var(--op-soft); cursor: pointer; font-size: 14px; line-height: 1; }
.op-modal-x:hover { background: var(--op-ink); color: #fff; }
.op-modal-card .op-kick { color: var(--op-green-text); margin: 0; }
.op-modal-card h2 { font: 700 22px var(--op-font-head); color: var(--op-ink); margin: 4px 0 14px; letter-spacing: -.01em; }
.op-modal-props { list-style: none; margin: 0 0 18px; padding: 13px 16px; background: var(--op-bg); border-radius: 12px; font: 600 13px var(--op-font-body); color: var(--op-ink-2); }
.op-modal-props li { padding: 3px 0; }
.op-modal-form label { display: block; font: 600 12.5px var(--op-font-body); color: var(--op-ink-2); margin: 0 0 12px; }
.op-modal-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.op-modal-form input, .op-modal-form textarea { display: block; width: 100%; margin-top: 5px; border: 1px solid var(--op-line); border-radius: 9px; padding: 10px 12px; font: 400 14px var(--op-font-body); color: var(--op-ink); background: #fff; }
.op-modal-form input:focus, .op-modal-form textarea:focus { outline: none; border-color: var(--op-green); box-shadow: 0 0 0 3px var(--op-green-tint); }
.op-modal-form textarea { resize: vertical; min-height: 66px; }
.op-modal-err { color: #b42318; font: 600 12.5px var(--op-font-body); margin: 2px 0 12px; }
.op-modal-send { width: 100%; justify-content: center; margin-top: 4px; }
.op-modal-done { text-align: center; padding: 12px 0 4px; }
.op-modal-tick { display: inline-flex; align-items: center; justify-content: center; width: 54px; height: 54px; border-radius: 50%; background: var(--op-green); color: #14210a; font-size: 26px; margin-bottom: 12px; }
.op-modal-done h2 { margin: 0 0 8px; }
.op-modal-done p { font: 400 14.5px/1.6 var(--op-font-body); color: var(--op-soft); margin: 0 0 20px; }
@media (max-width: 460px) { .op-modal-row { grid-template-columns: 1fr; } }

/* Brochure polish (print only) */
@media print {
	.op-print-cover-top { display: flex; justify-content: space-between; align-items: baseline; }
	.op-print-cover-tag { font: 400 11px var(--op-font-mono); color: var(--op-soft); }
	.op-print-cover-hero { height: 68mm; overflow: hidden; margin: 20px 0; }
	.op-print-cover-hero img { width: 100%; height: 100%; object-fit: cover; }
	.op-print-cover-mid h1 { font-size: 38px; line-height: 1.08; }
	.op-print-cover-sub { max-width: 92%; }

	.op-print-prop-photo { position: relative; }
	.op-print-prop-status { position: absolute; top: 12px; left: 12px; margin: 0 !important; }
	.op-print-prop-price { display: flex; align-items: baseline; gap: 14px; margin: 0 0 16px; padding: 0 0 14px; border-bottom: 1px solid var(--op-line); }
	.op-print-prop-price-v { font: 700 30px var(--op-font-head); color: var(--op-ink); letter-spacing: -.02em; }
	.op-print-prop-price-rate { font: 400 14px var(--op-font-mono); color: var(--op-soft); }
	.op-print-facts { grid-template-columns: repeat(4, 1fr); }
	.op-print-broker { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--op-line); display: flex; flex-direction: column; gap: 3px; }
	.op-print-broker .op-print-fact-l { margin-bottom: 3px; }
	.op-print-broker-name { font: 700 16px var(--op-font-head); color: var(--op-ink); }
	.op-print-broker-c { font: 400 12px var(--op-font-mono); color: var(--op-soft); }

	/* Keep the summary table on the page for 3-4 columns */
	.op-compare-n3 .op-compare-cell, .op-compare-n4 .op-compare-cell,
	.op-compare-n3 .op-compare-row, .op-compare-n4 .op-compare-row { padding: 8px 9px; font-size: 10.5px; }
	.op-compare-n4 .op-compare-cell.is-big { font-size: 12px; }
	.op-compare-n3 .op-compare-name, .op-compare-n4 .op-compare-name { font-size: 11px; }
}

/* ==================================================================
   Compare fixes round 2 — Aug 2026 (real-PDF verified)
   ================================================================== */

/* [Save + Clear] reset.css paints a debug pink on button:hover; these two op-
   buttons set a base background but no hover background, so the pink leaked
   through. Re-declare the hover background (same specificity, loaded later). */
.op-fav:hover, .op-fav:focus { background: rgba(255,255,255,.92); }
.op-compare-clear:hover, .op-compare-clear:focus { background: none; color: #fff; }

/* [PDF] The on-screen comparison uses CSS grid, which scrambles when it breaks
   across PDF pages. In print we hide the grid and show a real <table>, which
   paginates cleanly (header repeats, rows never reflow). */
.op-print-table { display: none; }
@media print {
	.op-compare { display: none !important; }
	.op-print-table { display: table !important; width: 100%; border-collapse: collapse; table-layout: fixed; margin-top: 4px; font-family: var(--op-font-body); }
	.op-print-table thead { display: table-header-group; }
	.op-print-table tr { page-break-inside: avoid; }
	.op-print-table th, .op-print-table td { border: 1px solid var(--op-line); padding: 8px 9px; text-align: left; vertical-align: top; font-size: 11px; line-height: 1.3; word-wrap: break-word; }
	.op-print-table thead th { background: var(--op-bg) !important; border-bottom: 2px solid var(--op-ink); }
	.op-print-table thead .op-pt-corner { border: 0; background: transparent !important; }
	.op-pt-name { display: block; font: 700 12px var(--op-font-head); color: var(--op-ink); }
	.op-pt-area { display: block; font: 400 10px var(--op-font-body); color: var(--op-soft); margin-top: 2px; }
	.op-print-table tbody th { width: 92px; font: 700 9px var(--op-font-body); letter-spacing: .05em; text-transform: uppercase; color: var(--op-soft); background: #fff !important; }
	.op-print-table td.op-pt-big { font: 700 13px var(--op-font-head); color: var(--op-ink); }
	.op-print-table td.op-pt-best { background: var(--op-green-chip) !important; }
	.op-pt-tag { display: inline-block; font: 700 8px var(--op-font-head); letter-spacing: .06em; color: var(--op-green-text); }

	/* [brochure] no monospace in the printed pages — it read like code, not a
	   document. Force the body typeface across the cover, property pages, table. */
	.op-print-cover .op-num, .op-print-property .op-num, .op-print-head .op-num,
	.op-print-fact-l, .op-print-cover-tag, .op-print-prop-idx,
	.op-print-cover-sub, .op-print-prop-area, .op-print-prop-price-rate,
	.op-print-broker-c, .op-print-prop-foot, .op-print-cover-foot, .op-print-foot,
	.op-print-cover-list .op-pcl-meta, .op-print-title {
		font-family: var(--op-font-body) !important; letter-spacing: normal !important;
	}
}

@media print {
	/* Bottom contact strip on each brochure property page — fills the page and
	   gives every listing a clear call to action. */
	.op-print-prop-cta { margin-top: auto; display: flex; justify-content: space-between; align-items: center; gap: 16px;
		padding: 16px 20px; background: var(--op-ink) !important; }
	.op-print-prop-cta-t { font: 700 15px var(--op-font-head); color: #fff !important; }
	.op-print-prop-cta-c { font: 400 12.5px var(--op-font-body) !important; color: rgba(255,255,255,.86) !important; letter-spacing: normal !important; }
	.op-print-property .op-print-prop-foot { margin-top: 14px; }
}

/* =================================================================
   API Property Group revision brief — design pass (v1.7.0)
   Loaded last, so these rules win. Grouped by brief item.
   ================================================================= */

/* --- Cards: deactivate the heart (kept in markup), fix the overlap,
   move Compare to the right of the card just below the grade badge,
   and make it prominent. Compare is now the single shortlist. -------- */
.op-card:not(.op-card-row) .op-fav { display: none !important; }
.op-card:not(.op-card-row) .op-cmp-btn {
	top: 10px; right: 10px; left: auto; bottom: auto;
	background: #323E48; color: #fff !important;
	box-shadow: 0 2px 10px rgba(38,48,58,.30);
	padding: 7px 13px 7px 11px; font-size: 12px; }
.op-card:not(.op-card-row) .op-cmp-btn .op-cmp-btn-label { color: #fff !important; }
.op-card:not(.op-card-row) .op-cmp-btn svg path { stroke: #fff; }
.op-card:not(.op-card-row) .op-cmp-btn:hover { background: #26303A; color: #fff !important; }
.op-card:not(.op-card-row) .op-cmp-btn.is-active { background: var(--op-green); color: var(--op-ink); }
.op-card:not(.op-card-row) .op-cmp-btn.is-active svg path { stroke: var(--op-ink); }
/* Detail-page shortlist button (in the actions row) shares the compare list. */
.op-single-actions-row .op-cmp-mini.is-active { background: var(--op-ink); color: #fff; }
.op-single-actions-row .op-cmp-mini.is-active svg path { stroke: var(--op-green); }

/* --- Global contrast: put the busiest inner-page search block on charcoal
   so it stops disappearing into white (the brief's called-out instance). -- */
.op-search-strip { background: var(--op-ink); border-color: var(--op-ink); padding: 10px; }
.op-search-strip .op-searchx-kw { border-color: transparent; }

/* --- Home: give the "This week on the book" featured block a charcoal band
   so it alternates with the white sections above and below it. ------------- */
.op-home-featured { background: var(--op-ink); padding: 46px 0 40px; }
.op-home-featured .op-section-head h2 { color: #fff; }
.op-home-featured .op-section-head .op-kick { color: var(--op-green); }
.op-home-featured .op-section-link { color: #fff; }
.op-home-featured .op-section-link:hover { color: var(--op-green); }
.op-home-featured .op-table { background: #fff; border: 1px solid var(--op-line); padding: 4px 18px; }
.op-home-featured .op-compare-bar { margin-top: 18px; }

/* --- Services: a clear call to action at the foot of every service card. -- */
.op-service { display: flex; flex-direction: column; }
.op-service-copy { flex: 1 1 auto; }
.op-service-cta { align-self: flex-start; margin-top: 16px; font: 700 13px var(--op-font-head);
	letter-spacing: .01em; color: var(--op-green-text); text-decoration: none;
	border-bottom: 2px solid var(--op-green); padding-bottom: 2px; }
.op-service-cta:hover { color: var(--op-ink); border-color: var(--op-ink); }

/* --- Brokers page: office/city tabs + free-text suburb search, larger cards
   in fewer columns, grey card panels, a "View my properties" link per broker,
   and a supply-side "List a property" CTA band. ---------------------------- */
.op-broker-controls { display: flex; flex-wrap: wrap; gap: 14px 20px; align-items: center;
	justify-content: space-between; margin: 4px 0 24px; }
.op-broker-cities { display: flex; flex-wrap: wrap; gap: 8px; }
.op-broker-city { font: 600 13px var(--op-font-body); color: var(--op-ink-2); background: #fff;
	border: 1px solid var(--op-line); padding: 9px 15px; cursor: pointer; border-radius: 999px; transition: .15s; }
.op-broker-city:hover { border-color: var(--op-ink-2); }
.op-broker-city.is-active { background: var(--op-ink); color: #fff; border-color: var(--op-ink); }
.op-broker-suburb { display: flex; align-items: center; gap: 8px; background: #fff;
	border: 1px solid var(--op-line); padding: 0 12px; min-width: 260px; }
.op-broker-suburb svg { color: var(--op-soft); flex: none; }
.op-broker-suburb input { border: 0; outline: 0; background: none; padding: 11px 0; width: 100%;
	font: 400 14px var(--op-font-body); color: var(--op-ink); }
.op-brokers { display: grid; grid-template-columns: repeat(auto-fill, minmax(238px, 1fr)); gap: 18px; }
.op-brokers .op-broker-card { text-align: center; background: var(--op-bg); border: 1px solid var(--op-line);
	padding: 26px 20px 20px; display: flex; flex-direction: column; align-items: center; border-radius: 14px; }
.op-brokers .op-broker-photo { width: 116px; height: 116px; margin: 0 auto 14px; border-radius: 50%;
	overflow: hidden; background: #dde4ea; flex: none; }
.op-brokers .op-broker-photo img { width: 100%; height: 100%; object-fit: cover; object-position: center 12%; display: block; }
.op-brokers .op-broker-card h3 { font: 700 18px var(--op-font-head); margin: 0 0 3px; letter-spacing: -.01em; }
.op-brokers .op-broker-namelink { color: var(--op-green-text); text-decoration: none; }
.op-brokers .op-broker-namelink:hover { color: var(--op-ink); }
.op-brokers .op-broker-role { font: 400 13px var(--op-font-body); color: var(--op-soft); margin: 0 0 4px; }
.op-broker-city-tag { font: 700 10.5px var(--op-font-head); letter-spacing: .12em; text-transform: uppercase;
	color: var(--op-muted); margin: 0 0 12px; }
.op-broker-listings { display: inline-block; font: 600 12.5px var(--op-font-body); color: var(--op-green-text);
	text-decoration: none; margin: 0 0 16px; }
.op-broker-listings:hover { color: var(--op-ink); }
.op-brokers .op-broker-contact { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; width: 100%; margin: auto 0 0; }
.op-brokers .op-broker-contact .op-btn { justify-content: center; padding: 10px 0; }
.op-brokers-none { margin-top: 20px; }
.op-broker-list-cta { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between;
	gap: 20px; margin: 40px 0 0; padding: 34px clamp(22px, 4vw, 48px); background: var(--op-ink); }
.op-broker-list-cta h2 { font: 700 24px/1.2 var(--op-font-head); color: #fff; margin: 6px 0 8px; letter-spacing: -.02em; }
.op-broker-list-cta .op-broker-list-sub { font: 400 14px var(--op-font-body); color: rgba(255,255,255,.78); margin: 0; max-width: 52ch; }
.op-broker-list-cta .op-btn { flex: none; }

/* --- Listing detail: big gallery hero using the right-hand column (the
   "Anvil" reference), with a clean break before the detail content. -------- */
.op-gallery { margin: 18px 0 0; padding-bottom: 26px; border-bottom: 1px solid var(--op-line); }
.op-gallery-hasaside .op-gallery-hero { display: grid; grid-template-columns: 2.1fr 1fr; gap: 10px; }
.op-gallery-hero .op-gallery-main { height: 520px; }
.op-gallery:not(.op-gallery-hasaside) .op-gallery-main { height: 480px; }
.op-gallery-aside { display: flex; flex-direction: column; gap: 10px; }
.op-gallery-aside-btn { flex: 1; width: 100%; opacity: 1; position: relative; min-height: 0; }
.op-gallery-aside-btn img { width: 100%; height: 100%; object-fit: cover; display: block; }
.op-gallery-aside-btn.is-active { box-shadow: inset 0 0 0 3px var(--op-green); }
.op-gallery-more { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
	background: rgba(18,24,30,.52); color: #fff; font: 700 16px var(--op-font-head); letter-spacing: .01em; }

/* --- Mobile: lift the hero so the search bar is visible without scrolling
   (search moves directly under the heading, above the stock board). -------- */
@media (max-width: 760px) {
	.op-hero.op-hero-video-band { padding-top: 22px; padding-bottom: 26px; }
	.op-hero .op-wrap-wide { display: flex; flex-direction: column; }
	.op-hero-grid { display: contents; }
	.op-hero-lead { order: 1; }
	.op-hero-search { order: 2; margin-top: 16px; }
	.op-stockboard { order: 3; margin-top: 20px; }
	.op-hero-h1 { font-size: 29px; }
	.op-hero-sub { margin-bottom: 4px; }
	/* On phones the hero is full-width and stacked, so swap the desktop
	   left-to-right scrim for a vertical one: dark at the top behind the
	   heading, lighter through the middle so the video (Table Mountain)
	   shows, a gentle lift again at the base. Keeps white text legible. */
	.op-hero-video-band .op-hero-bg::after {
		background: linear-gradient(180deg, rgba(18,24,30,.72) 0%, rgba(18,24,30,.44) 46%, rgba(18,24,30,.60) 100%);
	}
}
@media (max-width: 900px) {
	.op-gallery-hasaside .op-gallery-hero { grid-template-columns: 1fr; }
	.op-gallery-aside { display: none; }
	.op-gallery-hero .op-gallery-main { height: 300px; }
	.op-broker-controls { gap: 12px; }
	.op-broker-suburb { min-width: 0; width: 100%; }
}

/* =================================================================
   Video round (v1.7.1): city feature, gallery tidy, card grade off
   ================================================================= */

/* Home city feature — Pam Golding "Lifestyle Living" style: full-bleed, tall
   image columns that butt together, a centred vertical label per city, and a
   white intro panel on the right. */
.op-cities { background: #fff; }
.op-cities-row { display: flex; align-items: stretch; height: min(76vh, 700px); min-height: 460px; }
.op-city { position: relative; flex: 1 1 0; min-width: 0; background-size: cover; background-position: center;
	text-decoration: none; overflow: hidden; display: flex; align-items: center; justify-content: center; transition: flex-grow .4s ease; }
.op-city + .op-city { border-left: 1px solid rgba(255,255,255,.16); }
.op-city-shade { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(18,24,30,.30), rgba(18,24,30,.46)); transition: background .3s; }
.op-city:hover { flex-grow: 1.5; }
.op-city:hover .op-city-shade { background: linear-gradient(180deg, rgba(18,24,30,.14), rgba(18,24,30,.32)); }
.op-city-label { position: relative; z-index: 1; writing-mode: vertical-rl; transform: rotate(180deg);
	display: flex; align-items: center; gap: 20px; }
.op-city-name { font: 300 26px var(--op-font-head); letter-spacing: .2em; text-transform: uppercase; color: #fff; white-space: nowrap; }
.op-city-go { font: 400 12px var(--op-font-body); letter-spacing: .16em; color: rgba(255,255,255,.85); white-space: nowrap; }
.op-cities-intro { flex: 0 0 27%; min-width: 240px; background: #fff; display: flex; flex-direction: column; justify-content: center; padding: 0 clamp(24px, 3vw, 52px); }
.op-cities-intro .op-kick { margin: 0 0 10px; }
.op-cities-intro h2 { font: 300 clamp(26px, 2.4vw, 32px) var(--op-font-head); letter-spacing: .03em; text-transform: uppercase; color: var(--op-ink); margin: 0 0 16px; line-height: 1.18; }
.op-cities-copy { font: 400 15px/1.7 var(--op-font-body); color: var(--op-muted); margin: 0 0 20px; }
.op-cities-link { font: 700 13px var(--op-font-head); letter-spacing: .02em; color: var(--op-green-text); text-decoration: none; }
.op-cities-link:hover { color: var(--op-ink); }
@media (max-width: 900px) {
	.op-cities-row { flex-wrap: wrap; height: auto; min-height: 0; }
	.op-cities-intro { flex: 1 1 100%; order: -1; min-width: 0; padding: 28px 20px 8px; }
	.op-city { flex: 1 1 50%; height: 300px; }
	.op-city:hover { flex-grow: 1; }
	.op-city-label { writing-mode: horizontal-tb; transform: none; flex-direction: column; gap: 4px; text-align: center; }
	.op-city-name { font-size: 22px; letter-spacing: .12em; }
}

/* Gallery hero: rounded corners, a real gap, and the right column matched to the
   main image height, so it reads as one clean block instead of "stuck on". */
.op-gallery-hasaside .op-gallery-hero { gap: 14px; }
.op-gallery-hero .op-gallery-main { border-radius: 14px; }
.op-gallery-aside { height: 520px; }
.op-gallery-thumb-btn { border-radius: 8px; }
.op-gallery-aside .op-gallery-thumb-btn { border-radius: 14px; overflow: hidden; }

/* =================================================================
   v1.7.3: authoritative gallery hero (fix overlap/height mismatch)
   ================================================================= */
.op-gallery-hasaside .op-gallery-hero { display: grid !important; grid-template-columns: 2fr 1fr; grid-template-rows: 470px !important; gap: 12px; height: 470px !important; align-items: stretch; }
.op-gallery-hasaside .op-gallery-main { height: 470px !important; min-height: 0; border-radius: 14px; overflow: hidden; }
.op-gallery-hasaside .op-gallery-main img { height: 100% !important; width: 100% !important; object-fit: cover; }
.op-gallery-hasaside .op-gallery-aside { display: grid !important; grid-template-rows: 1fr 1fr; gap: 12px; height: 470px !important; min-height: 0; }
.op-gallery-aside .op-gallery-thumb-btn { width: 100% !important; height: 100% !important; min-height: 0; border-radius: 14px; overflow: hidden; opacity: 1; }
.op-gallery-aside .op-gallery-thumb-btn img { width: 100%; height: 100%; object-fit: cover; display: block; }
.op-gallery:not(.op-gallery-hasaside) .op-gallery-main { height: 460px; border-radius: 14px; overflow: hidden; }
@media (max-width: 900px) {
	.op-gallery-hasaside .op-gallery-hero { grid-template-columns: 1fr; grid-template-rows: auto !important; height: auto !important; }
	.op-gallery-hasaside .op-gallery-aside { display: none !important; }
	.op-gallery-hasaside .op-gallery-main { height: 300px !important; }
}

/* =================================================================
   v1.7.4: Area guides (op_area pages)
   ================================================================= */
.op-areaguide { margin: 8px 0 22px; }
.op-areaguide-grid { display: grid; grid-template-columns: 1fr 300px; gap: 34px; align-items: start; }
.op-areaguide-body { font: 400 15px/1.7 var(--op-font-body); color: #4a5762; max-width: 70ch; }
.op-areaguide-body .op-kick { margin: 0 0 10px; }
.op-areaguide-body p { margin: 0 0 12px; }
.op-areaguide-facts { display: grid; gap: 1px; background: var(--op-line); border: 1px solid var(--op-line); }
.op-areaguide-fact { background: #fff; padding: 14px 16px; }
.op-areaguide-n { display: block; font: 700 22px var(--op-font-mono); color: var(--op-ink); line-height: 1.1; }
.op-areaguide-n-sm { font: 700 14px var(--op-font-head); letter-spacing: 0; }
.op-areaguide-l { display: block; font: 400 12px var(--op-font-body); color: var(--op-soft); margin-top: 4px; }
.op-areaguide-cta { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 20px;
	margin: 30px 0 0; padding: 30px clamp(22px,4vw,44px); background: var(--op-ink); }
.op-areaguide-cta h2 { font: 700 22px/1.2 var(--op-font-head); color: #fff; margin: 6px 0 8px; letter-spacing: -.01em; }
.op-areaguide-cta-sub { font: 400 14px/1.6 var(--op-font-body); color: rgba(255,255,255,.78); margin: 0; max-width: 60ch; }
.op-areaguide-cta .op-btn { flex: none; }
@media (max-width: 760px) { .op-areaguide-grid { grid-template-columns: 1fr; gap: 18px; } }

/* =================================================================
   v1.7.6: Simplified property gallery — one big main image + a
   thumbnail strip below. No side column, so it cannot overlap.
   ================================================================= */
.op-gallery { margin: 18px 0 0; padding-bottom: 26px; border-bottom: 1px solid var(--op-line); }
.op-gallery-main { height: min(58vh, 560px) !important; width: 100%; border-radius: 14px; overflow: hidden; position: relative; background: #dde4ea; cursor: zoom-in; }
.op-gallery-main img { width: 100% !important; height: 100% !important; object-fit: cover; display: block; }
.op-gallery-strip { display: flex; gap: 10px; margin-top: 10px; overflow-x: auto; padding-bottom: 4px; scrollbar-width: thin; }
.op-gallery-strip .op-gallery-thumb-btn { flex: 0 0 auto; width: 132px; height: 88px; border-radius: 10px; overflow: hidden; opacity: .7; border: 0; padding: 0; background: #dde4ea; cursor: pointer; transition: opacity .15s; }
.op-gallery-strip .op-gallery-thumb-btn:hover { opacity: 1; }
.op-gallery-strip .op-gallery-thumb-btn.is-active { opacity: 1; box-shadow: inset 0 0 0 3px var(--op-green); }
.op-gallery-strip .op-gallery-thumb-btn img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (max-width: 700px) { .op-gallery-main { height: 300px !important; } .op-gallery-strip .op-gallery-thumb-btn { width: 104px; height: 70px; } }

/* =================================================================
   v1.7.7: Area Guides section + content-page reading measure
   ================================================================= */
.op-guides-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 16px; }
.op-guide-card { display: flex; flex-direction: column; gap: 8px; padding: 22px; background: #fff; border: 1px solid var(--op-line); border-radius: 12px; text-decoration: none; transition: transform .15s, box-shadow .15s, border-color .15s; }
.op-guide-card:hover { border-color: var(--op-ink-2); box-shadow: 0 8px 22px rgba(20,30,40,.09); transform: translateY(-2px); }
.op-guide-card-name { font: 700 18px var(--op-font-head); color: var(--op-ink); letter-spacing: -.01em; }
.op-guide-card-teaser { font: 400 13.5px/1.55 var(--op-font-body); color: var(--op-muted); flex: 1; }
.op-guide-card-meta { font: 700 12px var(--op-font-head); letter-spacing: .02em; color: var(--op-green-text); }
.op-guide-back { display: inline-block; font: 600 13px var(--op-font-body); color: var(--op-green-text); text-decoration: none; margin: 0 0 14px; }
.op-guide-back:hover { color: var(--op-ink); }
.op-guide-h1 { font: 700 clamp(26px,3vw,34px) var(--op-font-head); color: var(--op-ink); letter-spacing: -.02em; margin: 0 0 8px; }
.op-guide-listings { margin: 32px 0 0; }
.op-guide-listings h2 { font: 700 20px var(--op-font-head); color: var(--op-ink); margin: 0 0 16px; }
.op-guide-all { font: 700 13px var(--op-font-head); color: var(--op-green-text); text-decoration: none; }

/* Content pages: comfortable reading measure + a light rule, so a page of plain
   text no longer stretches edge-to-edge and reads as empty. */
.op-prose { max-width: 760px; }
.op-prose p, .op-prose li { font: 400 15.5px/1.78 var(--op-font-body); color: #45525d; }
.op-prose h2, .op-prose h3 { color: var(--op-ink); letter-spacing: -.01em; }
.op-prose h2 { font-size: 22px; margin: 34px 0 12px; padding-top: 20px; border-top: 1px solid var(--op-line); }
.op-prose h2:first-child { border-top: 0; padding-top: 0; margin-top: 0; }
.op-guide-card, .op-guide-card:hover, .op-guide-card * { text-decoration: none !important; }
.op-guide-card-name { color: var(--op-green-text) !important; }
.op-guide-card:hover .op-guide-card-name { color: var(--op-ink) !important; }

/* =================================================================
   v1.7.10: Anvil-style Area Guides — A–Z directory + rich guide page
   ================================================================= */
/* Level 1: alphabetical directory */
.op-guides-index { display: flex; flex-wrap: wrap; gap: 4px; margin: 0 0 10px; }
.op-guides-index a, .op-guides-index span { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; font: 700 13px var(--op-font-head); border: 1px solid var(--op-line); border-radius: 7px; text-decoration: none; }
.op-guides-index a { color: var(--op-ink); background: #fff; }
.op-guides-index a:hover { background: var(--op-ink); color: #fff; border-color: var(--op-ink); }
.op-guides-index span { color: #c3ccd2; background: var(--op-bg); }
.op-guides-count { font: 400 13.5px var(--op-font-body); color: var(--op-muted); margin: 0 0 26px; }
.op-guides-letter { margin: 0 0 30px; scroll-margin-top: 84px; }
.op-guides-letter-h { font: 700 22px var(--op-font-head); color: var(--op-ink); margin: 0 0 12px; padding-bottom: 8px; border-bottom: 2px solid var(--op-green); display: inline-block; min-width: 34px; }
.op-guides-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 4px 26px; }
.op-guide-row { display: block; padding: 12px 0; border-top: 1px solid var(--op-line); text-decoration: none; }
.op-guide-row-name { display: block; font: 700 15px var(--op-font-head); color: var(--op-green-text); margin-bottom: 2px; }
.op-guide-row:hover .op-guide-row-name { color: var(--op-ink); }
.op-guide-row-teaser { display: block; font: 400 12.5px/1.5 var(--op-font-body); color: var(--op-muted); }

/* Level 2: single guide page */
.op-guide { max-width: 100%; }
.op-guide-crumbs { font: 400 12.5px var(--op-font-body); color: var(--op-soft); margin: 4px 0 14px; }
.op-guide-crumbs a { color: var(--op-green-text); text-decoration: none; }
.op-guide-crumbs span { color: var(--op-soft); }
.op-guide .op-guide-h1 { font: 700 clamp(26px,3.4vw,36px) var(--op-font-head); color: var(--op-ink); letter-spacing: -.02em; line-height: 1.12; margin: 0 0 10px; }
.op-guide-byline { font: 400 13px var(--op-font-body); color: var(--op-muted); margin: 0 0 26px; padding-bottom: 20px; border-bottom: 1px solid var(--op-line); }
.op-guide-byline span { color: var(--op-line); margin: 0 4px; }
.op-guide-cols { display: grid; grid-template-columns: 1fr 300px; gap: 44px; align-items: start; }
.op-guide-main { min-width: 0; }
.op-guide-article.op-prose { max-width: none; }
.op-guide-article h2.op-guide-h2, .op-guide-blank h2, .op-guide-listings h2 { font: 700 21px var(--op-font-head); color: var(--op-ink); letter-spacing: -.01em; margin: 30px 0 12px; padding-top: 22px; border-top: 1px solid var(--op-line); }
.op-guide-article.op-prose > *:first-child, .op-guide-blank h2:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
.op-guide-article p { font: 400 15.5px/1.78 var(--op-font-body); color: #45525d; margin: 0 0 14px; }
.op-guide-listings { scroll-margin-top: 84px; }
.op-guide-all { font: 700 13px var(--op-font-head); color: var(--op-green-text); text-decoration: none; }
.op-areaguide-cta { scroll-margin-top: 84px; }
/* sidebar */
.op-guide-side-inner { position: sticky; top: 84px; }
.op-guide-toc-h { font: 700 11px var(--op-font-head); letter-spacing: .14em; text-transform: uppercase; color: var(--op-ink); margin: 0 0 10px; }
.op-guide-toc { list-style: none; margin: 0 0 22px; padding: 0 0 0 14px; border-left: 2px solid var(--op-line); }
.op-guide-toc li { margin: 0; }
.op-guide-toc a { display: block; font: 400 13px/1.4 var(--op-font-body); color: var(--op-muted); text-decoration: none; padding: 5px 0; }
.op-guide-toc a:hover { color: var(--op-green-text); }
.op-guide-facts { display: grid; gap: 1px; background: var(--op-line); border: 1px solid var(--op-line); }
.op-guide-fact { background: #fff; padding: 13px 15px; }
.op-guide-fact-n { display: block; font: 700 20px var(--op-font-mono); color: var(--op-ink); line-height: 1.1; }
.op-guide-fact-sm { font: 700 13px var(--op-font-head); letter-spacing: 0; }
.op-guide-fact-l { display: block; font: 400 11.5px var(--op-font-body); color: var(--op-soft); margin-top: 3px; }
@media (max-width: 900px) {
	.op-guide-cols { grid-template-columns: 1fr; gap: 24px; }
	.op-guide-side-inner { position: static; }
	.op-guides-list { grid-template-columns: 1fr; }
}
.op-guide-row, .op-guide-row:hover, .op-guide-row * { text-decoration: none !important; }
.op-guides-index a { text-decoration: none !important; }

/* ============================================================ Tools grid */
.op-tools { max-width: var(--op-cw-narrow); margin: 0 auto; }
/* minmax(0,1fr) lets the three tracks share the row width evenly instead of
   growing to fit their content. The tiles are <button>s, which default to
   white-space:nowrap; without the reset below the descriptions refuse to wrap
   and push the grid wider than the page (sideways scroll on /tools/). */
.op-tools-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; margin-bottom: 34px; }
.op-tool-tile { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; text-align: left; white-space: normal; min-width: 0; padding: 20px; background: #fff; border: 1px solid var(--op-line); border-radius: 4px; cursor: pointer; transition: border-color .15s, box-shadow .15s, transform .15s; }
/* The tiles are <button>s and the theme's reset.css paints a debug pink on
   button:hover; pin the tile background white on every state so that pink can
   never leak through (same fix used on the other op- buttons). */
.op-tool-tile:hover, .op-tool-tile:focus, .op-tool-tile:active, .op-tool-tile:focus-visible { background: #fff; }
.op-tool-tile:hover { border-color: var(--op-green); box-shadow: 0 10px 26px -18px rgba(0,0,0,.35); transform: translateY(-2px); }
.op-tool-tile:focus-visible { outline: none; border-color: var(--op-ink); box-shadow: inset 0 0 0 2px var(--op-ink); }
.op-tool-tile.is-active { border-color: var(--op-ink); box-shadow: inset 0 0 0 1px var(--op-ink); }
.op-tool-tile-t { font: 700 16.5px var(--op-font-head); color: var(--op-ink); letter-spacing: -.01em; }
.op-tool-tile-d { font: 400 13.5px/1.55 var(--op-font-body); color: var(--op-muted); }
.op-tool-tile-go { margin-top: auto; font: 700 12.5px var(--op-font-head); color: var(--op-green-text); letter-spacing: .02em; }
.op-tool-panel { display: none; }
.op-tool-panel.is-active { display: block; }
.op-tool-h { font: 700 clamp(22px,2.6vw,28px) var(--op-font-head); color: var(--op-ink); margin: 0 0 8px; letter-spacing: -.02em; }
.op-tool-lead { font: 400 15px/1.6 var(--op-font-body); color: var(--op-muted); margin: 0 0 20px; max-width: 60ch; }
.op-tool-form { max-width: 620px; }
.op-tool-form label { display: block; font: 500 13px var(--op-font-body); color: var(--op-ink-2); margin: 0 0 14px; }
.op-tool-form input, .op-tool-form select { display: block; width: 100%; margin-top: 6px; padding: 11px 12px; border: 1px solid var(--op-line); border-radius: 3px; font: 400 15px var(--op-font-body); background: #fff; box-sizing: border-box; }
.op-tool-form input:focus, .op-tool-form select:focus { outline: 0; border-color: var(--op-green); }
.op-tool-two { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.op-tool-form .op-btn { margin-top: 6px; }
.op-tool-result { margin-top: 22px; padding: 20px; border-radius: 4px; background: var(--op-bg); border: 1px solid var(--op-line); font: 400 15px/1.6 var(--op-font-body); color: var(--op-ink-2); }
.op-tool-result.is-err { background: #fff4f2; border-color: #f2c7bd; color: #92310f; }
.op-tool-result p { margin: 0 0 8px; }
.op-tool-big { font: 700 clamp(24px,3.2vw,34px) var(--op-font-head) !important; color: var(--op-ink); letter-spacing: -.02em; }
.op-tool-verdict { font-weight: 700; color: var(--op-ink); }
.op-tool-above { color: #92310f; }
.op-tool-below { color: #1d5b2a; }
.op-tool-within { color: #1d5b2a; }
.op-tool-note { font-size: 13px; color: var(--op-muted); }
.op-tool-cta { margin-top: 14px !important; }
@media (max-width: 780px) {
	.op-tools-grid { grid-template-columns: 1fr; }
	.op-tool-two { grid-template-columns: 1fr; }
}
/* Rental benchmarking landing */
.op-rl { max-width: 760px; }
.op-rl-hero { margin-bottom: 26px; }
.op-rl-h1 { font: 700 clamp(28px,4vw,42px) var(--op-font-head); color: var(--op-ink); letter-spacing: -.025em; line-height: 1.08; margin: 8px 0 14px; }
.op-rl-sub { font: 400 clamp(15px,1.6vw,17px)/1.6 var(--op-font-body); color: var(--op-muted); max-width: 60ch; margin: 0 0 16px; }
.op-rl-points { list-style: none; padding: 0; margin: 0 0 4px; display: flex; flex-wrap: wrap; gap: 8px 20px; }
.op-rl-points li { position: relative; padding-left: 24px; font: 500 14px var(--op-font-body); color: var(--op-ink-2); }
.op-rl-points li::before { content: "✓"; position: absolute; left: 0; color: var(--op-green-text); font-weight: 700; }

/* --- Sep 2026 client feedback: pricing, broker stat, tool hints --- */
/* Secondary price (the derived monthly-or-rate shown alongside the headline). */
.op-price-alt { font-weight: 400; color: var(--op-muted); font-size: .82em; white-space: nowrap; }
/* Per-broker listing count (credibility stat on the brokers grid). */
.op-broker-count { margin: 2px 0 10px; font: 500 12.5px var(--op-font-body); color: var(--op-green-text); }
.op-broker-count strong { font-weight: 700; }
/* Small explainer line under a tool field (e.g. what "gross rate" means). */
.op-tool-hint { margin: 8px 0 0; font: 400 12.5px/1.5 var(--op-font-body); color: var(--op-muted); }

/* --- Sept 22 feedback: hide table-view heart, stronger search prominence --- */
/* Favourites are off site-wide (compare is the shortlist); the grid heart was
   already hidden, this hides the leftover one in table/list view too. */
.op-card-row .op-fav, .op-row .op-fav { display: none !important; }

/* Make the hero search read as an obvious, clickable search box: bigger, bolder
   magnifier, a green focus ring, and a subtle rest-state outline so it stands
   out against the dark hero (client: users did not realise they could search). */
.op-hero-search .op-searchx-kw svg { width: 22px; height: 22px; stroke-width: 2.4; color: var(--op-ink); }
.op-hero-search .op-searchx-kw { box-shadow: 0 0 0 2px rgba(147,213,0,.0); transition: box-shadow .15s; }
.op-hero-search .op-searchx-kw:focus-within { box-shadow: 0 0 0 3px rgba(147,213,0,.55); }
.op-hero-search .op-searchx-kw input::placeholder { color: #6b7780; opacity: 1; font-weight: 500; }

/* Closing CTA at the end of a results list (client feedback). */
.op-results-end { margin: 22px 0 6px; padding: 22px; background: var(--op-ink); color: #fff; border-radius: 6px; text-align: center; }
.op-results-end-h { margin: 0 0 4px; font: 700 17px var(--op-font-head); color: #fff; letter-spacing: -.01em; }
.op-results-end-sub { margin: 0 0 14px; font: 400 14px/1.55 var(--op-font-body); color: #c6cfd5; }

/* Compare / shortlist button on the single-listing page (client feedback). */
.op-cmp-btn-single { position: static; display: inline-flex; align-items: center; gap: 8px; width: auto; height: auto; margin-top: 12px; padding: 10px 16px; background: #fff; color: var(--op-ink); border: 1px solid var(--op-ink); border-radius: 4px; font: 700 13px var(--op-font-head); letter-spacing: .01em; cursor: pointer; transition: background .15s, color .15s, border-color .15s; }
.op-cmp-btn-single:hover { background: var(--op-ink); color: #fff; }
.op-cmp-btn-single[aria-pressed="true"] { background: var(--op-green); border-color: var(--op-green); color: var(--op-ink); }
.op-cmp-btn-single .op-cmp-btn-label { position: static; width: auto; height: auto; overflow: visible; clip: auto; opacity: 1; }

/* Compliance statement in the footer (PPRA + FFC), client feedback. */
.op-foot-compliance { max-width: 900px; margin: 18px 0 0; padding-top: 14px; border-top: 1px solid rgba(255,255,255,.12); font: 400 12px/1.6 var(--op-font-body); color: #9aa6ae; }
.op-foot-compliance a { color: #c6cfd5; text-decoration: underline; }

/* Single-listing "Download brochure" = a clean print of the listing (client feedback). */
.op-single-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.op-print-listing { cursor: pointer; }
@media print {
	.op-site-head, .op-nav, .op-nav-wrap, header, .op-site-foot, footer,
	.op-compare-bar, .op-map, #op-single-map, .op-gallery-strip, .op-single-actions,
	.op-single-actions-row, .op-single-side, .op-single-nav, .op-breadcrumb,
	.op-enquiry-panel, iframe, [id*="zipchat"], [class*="zipchat"], .op-lightbox { display: none !important; }
	.op-single-cols, .op-single-layout { display: block !important; }
	.op-single-main { width: 100% !important; max-width: 100% !important; }
	.op-gallery-main { height: auto !important; max-height: 90mm !important; }
	.op-gallery-main img { max-height: 90mm !important; width: auto !important; object-fit: contain !important; }
	body { background: #fff !important; color: #000 !important; }
	a { color: #000 !important; text-decoration: none !important; }
	.op-single-top { border-bottom: 2px solid #000; padding-bottom: 8px; }
}

/* Card price on mobile: stack the rate per m² and the monthly rental on separate
   lines so the run-on line no longer wraps awkwardly (client feedback Sep 2026).
   Each part is its own block; a very long amount wraps inside its line rather than
   clipping in a narrow two-up card. */
@media (max-width: 640px) {
	.op-card:not(.op-card-row) .op-card-price { line-height: 1.35; }
	.op-card:not(.op-card-row) .op-card-price .op-price-sep { display: none; }
	.op-card:not(.op-card-row) .op-card-price .op-price-part { display: block; }
}

/* Footer disclaimer fine print (client-supplied wording). */
.op-foot-disclaimer { max-width: 1100px; margin: 10px auto 0; font: 400 11.5px/1.6 var(--op-font-body); color: rgba(255,255,255,.55); }
.op-foot-disclaimer strong { color: rgba(255,255,255,.7); }

/* Live search suggestion dropdown (Walton's-style). */
.op-searchx-kw { position: relative; }
.op-suggest-panel {
	position: absolute; top: calc(100% + 8px); left: 0; right: 0; z-index: 60;
	background: #fff; border: 1px solid #e6eaed; border-radius: 14px;
	box-shadow: 0 24px 60px rgba(20,28,36,.22); padding: 8px 0; max-height: 400px; overflow-y: auto;
	min-width: 320px; color: var(--op-ink);
}
.op-suggest-group {
	font: 700 11px/1 var(--op-font-head); letter-spacing: .07em; text-transform: uppercase;
	color: #9aa6b0; padding: 14px 18px 8px; margin: 0;
}
.op-suggest-group + .op-suggest-item { border-top: 0; }
/* a hairline divider above every group except the first */
.op-suggest-item + .op-suggest-group { margin-top: 6px; border-top: 1px solid #eef1f3; padding-top: 14px; }
.op-suggest-item {
	display: flex; align-items: center; gap: 13px; width: 100%; text-align: left;
	background: none; border: 0; cursor: pointer; padding: 12px 18px; border-radius: 0;
	font: 500 15.5px/1.25 var(--op-font-body); color: #27333c;
}
.op-suggest-item svg { color: #aeb8c0; flex: 0 0 auto; }
.op-suggest-label { flex: 1 1 auto; }
.op-suggest-item:hover, .op-suggest-item.is-active { background: #f3f8ea; color: #182610; }
.op-suggest-item.is-active svg, .op-suggest-item:hover svg { color: #6fa400; }
@media (max-width: 640px) { .op-suggest-panel { min-width: 0; } .op-suggest-item { font-size: 15px; padding: 12px 16px; } }

/* Broker profile: "View all listings" link under their recent listings. */
.op-broker-viewall { margin: 18px 0 0; }

/* Compliance page: company entities. */
.op-compliance h3 { margin: 22px 0 4px; font: 700 17px var(--op-font-head); color: var(--op-ink); }
.op-compliance h3:first-child { margin-top: 0; }
.op-compliance p { margin: 0 0 4px; line-height: 1.7; }

/* Map cluster -> list: the "N listings in this area / Show all" bar. */
.op-map-cluster-bar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
	background: #f3f8ea; border: 1px solid #dfeccb; border-radius: 10px; padding: 10px 14px; margin: 0 0 14px;
	font: 500 14px var(--op-font-body); color: #27333c; }
.op-map-cluster-bar strong { font-weight: 700; }
.op-map-loading { padding: 24px 4px; color: #8a97a1; }
