1<!DOCTYPE HTML> 2 3<html lang="en" prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# place: http://ogp.me/ns/place# business: http://ogp.me/ns/business#" class="ua-chrome"> 4 5<head> 6 <title>The Gallery Real Estate</title> 7
7<script> 8 window.cowtools_basepath = "/js/cowtools"; 9 window.LeafletMapDefaultOptions = { tileLayers: 'bwmaps', "fitBoundsPadding": 72,} 10 </script>
10 11 12 <!-- 13____ _ _ ___ _ _ 14| _ \ | | / __| || | 15| _/ |_| \__ \ __ | 16|_| \___/|___/_||_| 17 18Real Estate Web Solutions - https://pushcreative.property/ 19 20Copyright © Push Creative. All Rights Reserved. 21 22--> 23
24<script>const __loadcss = (el) => { el.rel='stylesheet';el.onload=null; }</script>
24<link rel="dns-prefetch" href="https://thegalleryre.edge.pushcreative.com.au"><link rel="preconnect" href="https://thegalleryre.edge.pushcreative.com.au"><link rel="stylesheet" href="/css/beforeload.css?asset_version=sdfv3"> 25<link rel="stylesheet" href="/css/site.css?asset_version=sdfv3"> 26<link rel="stylesheet" href="/css/fonts_local.css?asset_version=sdfv3"> 27<link rel="stylesheet" href="/css/fonts_remote.css?asset_version=sdfv3"> 28<meta name="description" content="The Gallery Real Estate is a boutique real estate and rental agency in Sydney specialising in property management and leasing across the inner city. Based at 780 Bourke Street, Redfern." /> 29<meta property="og:locale" content="en_AU" /> 30<meta property="og:site_name" content="The Gallery Real Estate" /> 31<meta property="og:type" content="website" /> 32<meta property="og:url" content="https://www.thegalleryrealestate.com.au/" /> 33<meta name="robots" content="INDEX" /> 34<meta property="twitter:card" content="summary" /> 35<meta property="twitter:description" content="The Gallery Real Estate is a boutique real estate and rental agency in Sydney specialising in property management and leasing across the inner city. Based at 780 Bourke Street, Redfern." /> 36<meta property="twitter:title" content="The Gallery Real Estate" /> 37<meta property="twitter:url" content="https://www.thegalleryrealestate.com.au/" /> 38<meta name="viewport" content="initial-scale=1.0,width=device-width,user-scalable=no,viewport-fit=cover" />
39<script src="/js/cowtools/customelements.js?asset_version=sdfv3" defer></script>
vendor: 1 bytes, line 39
39
40<script src="/js/cowtools/cowtools.js?asset_version=sdfv3" defer></script>
vendor: 1 bytes, line 40
40
41<script src="/js/cowtools/leaflet-map.js?asset_version=sdfv3" defer></script>
vendor: 1 bytes, line 41
41
42<script src="/js/poi-item.js?asset_version=sdfv3" defer></script>
vendor: 1 bytes, line 42
42
43<script src="/js/flourishes.js?asset_version=sdfv3" defer></script>
vendor: 1 bytes, line 43
43
44<script src="/js/cssvars.js?asset_version=sdfv3" defer></script>
44<link rel="preload" href="/css/beforeload.css" as="style"> 45 <link rel="canonical" href="https://www.thegalleryrealestate.com.au/"> 46 <link rel="icon" sizes="16x16" href="/imagecache/bestfit/16x16/_files/_assets/touch-icon.png" type="image/png"> <link rel="apple-touch-icon-precomposed" sizes="16x16" href="/imagecache/bestfit/16x16/_files/_assets/touch-icon.png" type="image/png"> <link rel="icon" sizes="32x32" href="/imagecache/bestfit/32x32/_files/_assets/touch-icon.png" type="image/png"> <link rel="apple-touch-icon-precomposed" sizes="32x32" href="/imagecache/bestfit/32x32/_files/_assets/touch-icon.png" type="image/png"> <link rel="icon" sizes="72x72" href="/imagecache/bestfit/72x72/_files/_assets/touch-icon.png" type="image/png"> <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/imagecache/bestfit/72x72/_files/_assets/touch-icon.png" type="image/png"> <link rel="icon" sizes="120x120" href="/imagecache/bestfit/120x120/_files/_assets/touch-icon.png" type="image/png"> <link rel="apple-touch-icon-precomposed" sizes="120x120" href="/imagecache/bestfit/120x120/_files/_assets/touch-icon.png" type="image/png"> <link rel="icon" sizes="180x180" href="/imagecache/bestfit/180x180/_files/_assets/touch-icon.png" type="image/png"> <link rel="apple-touch-icon-precomposed" sizes="180x180" href="/imagecache/bestfit/180x180/_files/_assets/touch-icon.png" type="image/png"><meta name="format-detection" content="address=no" /><meta name="format-detection" content="telephone=no" /> 47 48 <!-- Start HEAD Includes --> 49<!-- Meta Pixel -->
50<script>
vendor: 398 bytes, lines 50-59
50 51!function(f,b,e,v,n,t,s) 52{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 53n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 54if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 55n.queue=[];t=b.createElement(e);t.async=!0; 56t.src=v;s=b.getElementsByTagName(e)[0]; 57s.parentNode.insertBefore(t,s)}(window,document,'script', 58'https://connect.facebook.net/en_US/fbevents.js'); 59fbq('init', '
59455395055121972
vendor: 30 bytes, lines 59-60
59'); 60fbq('track', 'PageView');
61</script>
61 62<!-- End Meta Pixel --> 63<!-- Google Tag Manager -->
64<script>
vendor: 327 bytes, lines 64-68
64(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 65new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 66j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 67'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 68})(window,document,'script','dataLayer','
68GTM-WPQHJCP9
vendor: 3 bytes, line 68
68');
68</script>
68 69<!-- End Google Tag Manager --> 70 71<!-- TGRE AI Search Visibility: schema + meta supplement (deployed 2026-05-25) -->
72<script type="application/ld+json"> 73{ 74 "@context": "https://schema.org", 75 "@graph": [ 76 { 77 "@type": ["RealEstateAgent", "LocalBusiness", "Organization"], 78 "@id": "https://www.thegalleryrealestate.com.au/#org", 79 "name": "The Gallery Real Estate", 80 "alternateName": "The Gallery Real Estate Agency Pty Limited", 81 "legalName": "The Gallery Real Estate Agency Pty Limited", 82 "logo": { 83 "@type": "ImageObject", 84 "url": "https://www.thegalleryrealestate.com.au/imagecache/bestfit/512x512/_files/_assets/touch-icon.png", 85 "width": 512, 86 "height": 512 87 }, 88 "image": [ 89 "https://www.thegalleryrealestate.com.au/imagecache/fitwithin/1280x1280/_files/tgre-shoot-day/984e9f9c-4c74-4c0f-b23d-8dca824e50ab.jpg", 90 "https://www.thegalleryrealestate.com.au/imagecache/fitwithin/1280x1280/_files/tgre-shoot-day/76e113cd-bdcc-4ba3-b5b9-ef309ea8b87a-1-201-a.jpg", 91 "https://www.thegalleryrealestate.com.au/imagecache/fitwithin/1280x1280/_files/tgre-shoot-day/tgre-studio-julianrinaldi-171.jpg" 92 ], 93 "description": "The Gallery Real Estate is a boutique real estate agency in Redfern specialising in property management and leasing across Inner Sydney. Our office is at 780 Bourke Street, Redfern.", 94 "slogan": "The art of property management", 95 "foundingDate": "2020", 96 "founder": { 97 "@id": "https://www.thegalleryrealestate.com.au/team/thomas-tamine#person" 98 }, 99 "telephone": "+61289993341", 100 "email": "[email protected]", 101 "address": { 102 "@type": "PostalAddress", 103 "streetAddress": "780 Bourke Street", 104 "addressLocality": "Redfern", 105 "addressRegion": "NSW", 106 "postalCode": "2016", 107 "addressCountry": "AU" 108 }, 109 "geo": { 110 "@type": "GeoCoordinates", 111 "latitude": -33.8969879, 112 "longitude": 151.2154480 113 }, 114 "areaServed": [ 115 { "@type": "City", "name": "Redfern" }, 116 { "@type": "City", "name": "Surry Hills" }, 117 { "@type": "City", "name": "Waterloo" }, 118 { "@type": "City", "name": "Zetland" }, 119 { "@type": "City", "name": "Moore Park" }, 120 { "@type": "Place", "name": "Moore Park Gardens" }, 121 { "@type": "City", "name": "Darlinghurst" }, 122 { "@type": "City", "name": "Paddington" }, 123 { "@type": "City", "name": "Newtown" }, 124 { "@type": "City", "name": "Erskineville" }, 125 { "@type": "City", "name": "Alexandria" }, 126 { "@type": "City", "name": "Chippendale" }, 127 { "@type": "City", "name": "Glebe" }, 128 { "@type": "City", "name": "Pyrmont" }, 129 { "@type": "City", "name": "Ultimo" }, 130 { "@type": "City", "name": "Potts Point" }, 131 { "@type": "City", "name": "Croydon Park" }, 132 { "@type": "City", "name": "Ashfield" }, 133 { "@type": "City", "name": "Dulwich Hill" }, 134 { "@type": "City", "name": "Leichhardt" }, 135 { "@type": "City", "name": "Strathfield" }, 136 { "@type": "City", "name": "Homebush" }, 137 { "@type": "City", "name": "Burwood" }, 138 { "@type": "City", "name": "Rosebery" }, 139 { "@type": "City", "name": "Sydney" } 140 ], 141 "knowsAbout": [ 142 "Residential property management", 143 "Investment property leasing", 144 "Tenant placement and screening", 145 "Routine inspections", 146 "NSW Residential Tenancies Act 2010", 147 "Inner Sydney residential rental market", 148 "Strata investment management" 149 ], 150 "openingHoursSpecification": [ 151 { 152 "@type": "OpeningHoursSpecification", 153 "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], 154 "opens": "09:00", 155 "closes": "17:00" 156 } 157 ], 158 "priceRange": "$", 159 "currenciesAccepted": "AUD", 160 "paymentAccepted": "Direct debit, EFT, BPAY", 161 "identifier": [ 162 { 163 "@type": "PropertyValue", 164 "name": "ABN", 165 "value": "99 643 017 074" 166 }, 167 { 168 "@type": "PropertyValue", 169 "name": "NSW Corporation Licence", 170 "value": "10103433" 171 } 172 ], 173 "aggregateRating": { 174 "@type": "AggregateRating", 175 "ratingValue": "4.9", 176 "bestRating": "5", 177 "worstRating": "1", 178 "ratingCount": "157", 179 "reviewCount": "157" 180 }, 181 "sameAs": [ 182 "https://www.facebook.com/thegalleryrealestate", 183 "https://www.instagram.com/thegalleryrealestate", 184 "https://au.linkedin.com/company/the-gallery-real-estate", 185 "https://www.ratemyagent.com.au/real-estate-agency/the-gallery-real-estate-az020", 186 "https://www.commercialrealestate.com.au/real-estate-agents/the-gallery-real-estate-33488", 187 "https://www.youtube.com/@thegalleryrealestate6269" 188 ], 189 "employee": [ 190 { "@id": "https://www.thegalleryrealestate.com.au/team/thomas-tamine#person" }, 191 { "@id": "https://www.thegalleryrealestate.com.au/team/christine-lucasan#person" }, 192 { "@id": "https://www.thegalleryrealestate.com.au/team/daphne-huang#person" }, 193 { "@id": "https://www.thegalleryrealestate.com.au/team/brooke-constantinidis#person" } 194 ] 195 }, 196 { 197 "@type": "Person", 198 "@id": "https://www.thegalleryrealestate.com.au/team/thomas-tamine#person", 199 "name": "Thomas Tamine", 200 "givenName": "Thomas", 201 "familyName": "Tamine", 202 "jobTitle": "Principal & Licensee", 203 "worksFor": { "@id": "https://www.thegalleryrealestate.com.au/#org" }, 204 "url": "https://www.thegalleryrealestate.com.au/team/thomas-tamine", 205 "telephone": "+61289993341", 206 "email": "[email protected]", 207 "knowsAbout": [ 208 "Property management", 209 "NSW residential tenancy law", 210 "Investment property strategy", 211 "Sydney inner-city rental market" 212 ], 213 "hasCredential": {
214 "@type": "EducationalOccupationalCredential", 215 "credentialCategory": "license", 216 "name": "NSW Class 1 Real Estate Licence", 217 "identifier": "10103433" 218 } 219 }, 220 { 221 "@type": "Person", 222 "@id": "https://www.thegalleryrealestate.com.au/team/christine-lucasan#person", 223 "name": "Christine Lucasan", 224 "givenName": "Christine", 225 "familyName": "Lucasan", 226 "jobTitle": "Business Operations Manager", 227 "worksFor": { "@id": "https://www.thegalleryrealestate.com.au/#org" } 228 }, 229 { 230 "@type": "Person", 231 "@id": "https://www.thegalleryrealestate.com.au/team/daphne-huang#person", 232 "name": "Daphne Huang", 233 "givenName": "Daphne", 234 "familyName": "Huang", 235 "jobTitle": "Portfolio & Inspections Manager", 236 "worksFor": { "@id": "https://www.thegalleryrealestate.com.au/#org" } 237 }, 238 { 239 "@type": "Person", 240 "@id": "https://www.thegalleryrealestate.com.au/team/brooke-constantinidis#person", 241 "name": "Brooke Constantinidis", 242 "givenName": "Brooke", 243 "familyName": "Constantinidis", 244 "jobTitle": "Portfolio Manager", 245 "worksFor": { "@id": "https://www.thegalleryrealestate.com.au/#org" } 246 } 247 ] 248} 249</script>
249 250 251<meta name="geo.region" content="AU-NSW"> 252<meta name="geo.placename" content="Redfern"> 253<meta name="geo.position" content="-33.8969879;151.2154480"> 254<meta name="ICBM" content="-33.8969879, 151.2154480"> 255 256<meta name="author" content="The Gallery Real Estate"> 257<meta name="robots" content="index, follow, max-image-preview:large"> 258 259<meta name="theme-color" content="#D46144"> 260 261<!-- TGRE blog post reading rhythm (added 2026-07-12) --> 262<style> 263body.pageclass-post section:not(.hero) .user-content p, 264body.pageclass-post section:not(.hero) .user-content li { font-size: 1.05rem; line-height: 1.8; } 265body.pageclass-post section:not(.hero) .user-content p { margin-bottom: 1.4em; } 266body.pageclass-post section:not(.hero) .user-content h2 { margin-top: 2.8rem; margin-bottom: 1rem; line-height: 1.25; } 267body.pageclass-post section:not(.hero) .user-content h3 { margin-top: 2.4rem; margin-bottom: 1rem; } 268body.pageclass-post section:not(.hero) .user-content ul:not([class]) { margin-top: 1rem; margin-bottom: 2rem; } 269body.pageclass-post section:not(.hero) .user-content ul:not([class]) > li { margin-bottom: 0.9rem; } 270body.pageclass-post section:not(.hero) .user-content img { margin: 3.25rem 0; border-radius: 16px; } 271body.pageclass-post section:not(.hero) .user-content p:has(> img) { margin: 0; } 272</style> 273 274 275 276<!-- Unified TGRE tab icon (SVG, matches dashboard / proposals / tours) --> 277<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA5NiA5NiI+CiAgPGNpcmNsZSBjeD0iNDgiIGN5PSI0OCIgcj0iNDgiIGZpbGw9IiNkMjVhM2MiLz4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNCAyNC40KSBzY2FsZSgwLjYxNCkiIGZpbGw9IiNmZmZmZmYiPgogICAgPHBhdGggZD0iTTQwLDE3LjFjNC40LDAsOC4zLDEuMiwxMS43LDMuNXM2LDUuNSw3LjcsOS41bDkuMS0yLjNjLTIuNS01LjktNi4yLTEwLjctMTEuMi0xNC4yLTUuMS0zLjYtMTAuOC01LjMtMTcuMy01LjNzLTE2LjMsMy4xLTIyLjUsOS40Yy02LjIsNi4zLTkuMywxMy44LTkuMywyMi43cy4yLDMuNy40LDUuNWg5LjRjLS40LTEuNy0uNi0zLjYtLjYtNS41LDAtNi41LDIuMS0xMiw2LjQtMTYuNSw0LjMtNC41LDkuNi02LjcsMTYuMS02LjdaIi8+CiAgICA8cG9seWdvbiBwb2ludHM9IjM5LjkgMzggMzkuOSA0NS44IDYyLjIgNDUuOCA2Mi4yIDY4LjIgNzAgNjguMiA3MCA0NS44IDcwIDM4LjEgNzAgMzggMzkuOSAzOCIvPgogIDwvZz4KPC9zdmc+Cg=="> 278 279 280<!-- Google Search Console verification --> 281<meta name="google-site-verification" content="YxgRoxqrI9LlwdVkQN3NKE9XUEnGEkLwyO2iAFHqmho" /> 282 283 284 285<!-- Google tag (gtag.js) - Google Ads conversion tracking (added 2026-07-13) -->
vendor: 64 bytes, lines 285-286
285 286<script async src="https://www.googletagmanager.com/gtag/js?id=
286AW-10897444681
vendor: 12 bytes, line 286
286"></script>
287<script> 288
vendor: 134 bytes, lines 288-292
288window.dataLayer = window.dataLayer || []; 289 function gtag(){dataLayer.push(arguments);} 290 gtag('js', new Date()); 291 292 gtag('config', '
292AW-10897444681
vendor: 4 bytes, line 292
292');
293</script>
293 294 295 296 297<!-- Google Ads conversion events: fire on lead-form submit + thank-you pages (added 2026-07-13; enhanced conversions user_data added 2026-08-04 to resolve Ads diagnostics "needs attention") -->
298<script> 299(function() { 300 function normalisePhone(raw) { 301 var digits = raw.replace(/[^\d+]/g, ''); 302 if (!digits) return ''; 303 if (digits.charAt(0) === '+') return digits; 304 if (digits.charAt(0) === '0') return '+61' + digits.substring(1); 305 if (digits.indexOf('61') === 0) return '+' + digits; 306 return '+61' + digits; 307 } 308 // Contact conversion on any thank-you / confirmation page 309 document.addEventListener('DOMContentLoaded', function() { 310 if (/thank|confirmation/i.test(window.location.pathname)) { 311 if (typeof gtag === 'function') { 312 gtag('event', 'conversion', {'send_to': 'AW-10897444681/8_yDCL-j0NEZEMmep8wo'}); 313 } 314 } 315 }); 316 // Submit-lead-form conversion: landlord leads only, and only once the form has actually gone through. 317 // PUSH fires htmlformSuccess after the server accepts a submission. Counted forms: 13 Request Property 318 // Management Advice, 1 Contact Form. Repair, pet and tenant forms are deliberately not counted. (24 Sep 2026) 319 var TGRE_LEAD_FORMS = { '13': true, '1': true }; 320 function tgreFormId(el) { 321 if (!el) return ''; 322 var f = el.tagName === 'FORM' ? el : (el.querySelector && el.querySelector('form')); 323 var m = f && f.id ? /^htmlform(\d+)_/.exec(f.id) : null; 324 if (m) return m[1]; 325 var wrap = el.closest ? el.closest('[data-pushform-id]') : null; 326 return wrap ? String(wrap.getAttribute('data-pushform-id')) : ''; 327 } 328 function tgreLeadConversion(form) { 329 if (typeof gtag !== 'function') return; 330 if (form && form.querySelector) { 331 var emailEl = form.querySelector('input[type="email"], input[name*="email" i]'); 332 var phoneEl = form.querySelector('input[type="tel"], input[name*="phone" i], input[name*="mobile" i]'); 333 var email = emailEl && emailEl.value ? emailEl.value.trim().toLowerCase() : ''; 334 var phone = phoneEl && phoneEl.value ? normalisePhone(phoneEl.value.trim()) : ''; 335 if (email || phone) { 336 var userData = {}; 337 if (email) userData.email = email; 338 if (phone) userData.phone_number = phone; 339 gtag('set', 'user_data', userData); 340 } 341 } 342 gtag('event', 'conversion', {'send_to': 'AW-10897444681/WH-yCPXd_dAZEMmep8wo'}); 343 } 344 window.addEventListener('htmlformSuccess', function(e) { 345 var d = (e && e.detail) || {}; 346 var form = (d.instance && d.instance.formElement) || d.form; 347 if (TGRE_LEAD_FORMS[tgreFormId(form)]) tgreLeadConversion(form); 348 }); 349 // The rental appraisal form (TG-OS) lands on /thank-you after a real submission; tenants land on /thank-you-rental 350 document.addEventListener('DOMContentLoaded', function() { 351 if (/^\/thank-you\/?$/i.test(window.location.pathname)) tgreLeadConversion(null); 352 }); 353})(); 354</script>
354 355 356 357 358<!-- TGRE stat counter sizing: keep 4-up counter strips from colliding (added 2026-07-14) --> 359<style> 360.tgre-counter{font-size:clamp(2.2rem,4vw,3.4rem)!important;line-height:1.1;display:inline-block;font-variant-numeric:tabular-nums;} 361</style> 362 363<!-- TGRE story rings + viewer styles v2 (footer + homepage hero; CSS lives here because PUSH strips style tags from the rendered footer - updated 2026-07-14) --> 364<style> 365/* ===== TGRE footer CTA row ===== */ 366.tgre-foot-cta{display:flex;align-items:center;justify-content:space-between;gap:32px;flex-wrap:nowrap;} 367.tgre-foot-cta-main{flex:1 1 auto;min-width:0;} 368.tgre-foot-cta-main h2{margin-bottom:.4em;} 369 370/* ===== Story ring strip (footer + hero) ===== */ 371.tgre-ps-strip{display:flex;gap:44px;align-items:flex-start;flex:0 0 auto;} 372.tgre-ps-trigger{display:flex;flex-direction:column;align-items:center;gap:10px;text-decoration:none;color:inherit;cursor:pointer;flex:0 0 auto;} 373.tgre-ps-ring{position:relative;width:92px;height:92px;border-radius:50%;padding:4px;transition:transform .25s ease;} 374.tgre-ps-ring::before{content:'';position:absolute;inset:0;border-radius:50%;background:conic-gradient(from 210deg,#d46144,#e8926a,#b8492e,#d46144);animation:tgre-ps-spin 7s linear infinite;} 375.tgre-ps-trigger:hover .tgre-ps-ring{transform:scale(1.05);} 376.tgre-ps-trigger:hover .tgre-ps-ring::before{animation-play-state:paused;} 377.tgre-ps-ring-inner{position:relative;width:100%;height:100%;border-radius:50%;background:#fff;border:3px solid #F9F2ED;display:flex;align-items:center;justify-content:center;overflow:hidden;box-sizing:border-box;} 378.tgre-ps-ring-inner img{width:58%;height:58%;object-fit:contain;display:block;} 379.tgre-ps-trigger-label{font-size:.85rem;font-weight:600;letter-spacing:.02em;text-align:center;line-height:1.3;white-space:nowrap;} 380.tgre-ps-trigger-hint{display:block;font-size:.72rem;font-weight:400;opacity:.55;margin-top:2px;} 381@keyframes tgre-ps-spin{to{transform:rotate(1turn);}} 382 383/* Hero variant: sits at the bottom of the homepage hero */ 384.tgre-ps-strip-hero{margin-top:10px;} 385.tgre-ps-strip-hero .tgre-ps-trigger-hint{opacity:.75;} 386 387@media (max-width:899px){ 388 .tgre-foot-cta{display:block;} 389 .tgre-foot-cta .tgre-ps-strip{margin-top:28px;gap:32px;} 390 .tgre-ps-ring{width:72px;height:72px;padding:3px;} 391 .tgre-ps-trigger-label{font-size:.8rem;} 392} 393 394/* ===== Story viewer overlay ===== */ 395.tgre-ps-overlay{position:fixed;inset:0;z-index:999999;background:rgba(12,12,13,.94);display:none;align-items:center;justify-content:center;} 396.tgre-ps-overlay.is-open{display:flex;} 397.tgre-ps-card{position:relative;width:min(430px,100vw);height:min(94vh,764px);background:linear-gradient(175deg,#1b1a19 0%,#181819 55%,#251b15 100%);border-radius:18px;overflow:hidden;font-family:inherit;cursor:pointer;touch-action:none;} 398.tgre-ps-card a,.tgre-ps-card button{cursor:pointer;} 399@media (max-width:520px){.tgre-ps-card{width:100vw;height:100vh;height:100dvh;border-radius:0;}} 400 401.tgre-ps-bars{position:absolute;top:10px;left:10px;right:10px;display:flex;gap:5px;z-index:6;} 402.tgre-ps-bar{flex:1;height:3px;border-radius:3px;background:rgba(255,255,255,.28);overflow:hidden;} 403.tgre-ps-bar span{display:block;height:100%;width:0;background:#d46144;} 404 405.tgre-ps-head{position:absolute;top:24px;left:14px;right:10px;display:flex;align-items:center;gap:10px;z-index:6;} 406.tgre-ps-head-avatar{width:36px;height:36px;border-radius:50%;padding:2px;background:conic-gradient(from 210deg,#d46144,#e8a87c,#f3d5b5,#d46144);flex:0 0 auto;} 407.tgre-ps-head-avatar span{width:100%;height:100%;border-radius:50%;background:#fff;display:flex;align-items:center;justify-content:center;} 408.tgre-ps-head-avatar img{width:60%;height:60%;object-fit:contain;} 409.tgre-ps-head-name{color:#F9F2ED;font-size:.82rem;font-weight:600;line-height:1.2;} 410.tgre-ps-head-name small{display:block;font-weight:400;opacity:.6;font-size:.72rem;} 411.tgre-ps-close{margin-left:auto;background:none;border:0;color:#F9F2ED;font-size:1.9rem;line-height:1;cursor:pointer;padding:6px 10px;opacity:.85;} 412.tgre-ps-close:hover{opacity:1;} 413 414.tgre-ps-slide{position:absolute;inset:0;padding:96px 34px 44px;display:flex;flex-direction:column;justify-content:center;opacity:0;visibility:hidden;transition:opacity .3s ease;z-index:1;} 415.tgre-ps-slide::before{content:'';position:absolute;inset:0;background:radial-gradient(120% 65% at 50% 52%,rgba(212,97,68,.13),rgba(212,97,68,0) 62%);pointer-events:none;} 416.tgre-ps-slide.is-active{opacity:1;visibility:visible;z-index:2;} 417.tgre-ps-slide > *{position:relative;} 418.tgre-ps-kicker{color:#d46144;font-size:.72rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;margin:0 0 14px;} 419.tgre-ps-slide h3{color:#F9F2ED;font-size:1.9rem;line-height:1.15;margin:0 0 16px;font-weight:600;}
420.tgre-ps-slide h3 em{color:#d46144;font-style:italic;} 421.tgre-ps-slide p{color:rgba(249,242,237,.78);font-size:.98rem;line-height:1.55;margin:0 0 6px;} 422.tgre-ps-stat{color:#F9F2ED;font-size:.85rem;margin-top:14px;padding-top:14px;border-top:1px solid rgba(212,97,68,.4);} 423.tgre-ps-stat strong{color:#d46144;font-size:1.05rem;} 424 425/* Cream brand panel on each story's final CTA slide */ 426.tgre-ps-panel{background:#F9F2ED;border-radius:16px;padding:26px 24px;} 427.tgre-ps-panel h3{color:#3c3835;} 428.tgre-ps-panel h3 em{color:#d46144;} 429.tgre-ps-panel p{color:rgba(60,56,53,.8);} 430.tgre-ps-panel .tgre-ps-cta{margin-top:18px;} 431.tgre-ps-panel .tgre-ps-cta a.tgre-ps-link{color:#3c3835;opacity:.75;} 432.tgre-ps-panel .tgre-ps-cta a.tgre-ps-link:hover{opacity:1;} 433 434.tgre-ps-cta{display:flex;flex-direction:column;align-items:flex-start;gap:12px;margin-top:22px;position:relative;z-index:5;} 435.tgre-ps-cta a.tgre-ps-btn{display:inline-block;background:#d46144;color:#fff;text-decoration:none;font-weight:600;font-size:.95rem;padding:13px 26px;border-radius:999px;} 436.tgre-ps-cta a.tgre-ps-btn:hover{background:#c05539;color:#fff;} 437.tgre-ps-cta a.tgre-ps-link{color:#F9F2ED;font-size:.88rem;text-decoration:underline;text-underline-offset:3px;opacity:.8;} 438.tgre-ps-cta a.tgre-ps-link:hover{opacity:1;} 439</style> 440 441 442 443<!-- TGRE editorial homepage draft styles (added 2026-07-15; used by /home-preview-jul26 only, inert elsewhere) --> 444<style> 445.tgre-ed-marker{display:block;font-family:geist-wf,sans-serif;font-weight:700;font-size:12px;letter-spacing:.28em;text-transform:uppercase;color:#d46144;margin-bottom:18px;} 446.tgre-ed-statement{text-align:center;max-width:1000px;margin:0 auto;} 447.tgre-ed-statement h2{max-width:none;font-size:clamp(34px,4.6vw,58px);line-height:1.08;margin:0 auto 20px;} 448.tgre-ed-statement p{max-width:56ch;margin:0 auto;} 449.tgre-ed-ctas{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;margin-top:28px;} 450.tgre-ed-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(24px,3vw,48px);align-items:end;margin-top:40px;} 451.tgre-ed-stat .fig{position:relative;font-family:aventa-wf,sans-serif;font-weight:400;line-height:.9;font-size:clamp(56px,8vw,118px);letter-spacing:-.03em;color:#f8f8f8;} 452.tgre-ed-stat.key .fig{color:#d46144;} 453.tgre-ed-stat .fig .ghost{position:absolute;left:0;top:0;font-size:.6em;color:rgba(255,255,255,.16);text-decoration:line-through;text-decoration-thickness:3px;transform:translate(1.15em,-.2em);} 454.tgre-ed-stat .cap{margin-top:12px;font-size:14px;line-height:1.45;color:rgba(255,255,255,.72);max-width:24ch;} 455.tgre-ed-stat .cap b{color:#fff;} 456.tgre-ed-statfoot{margin-top:40px;font-size:12px;letter-spacing:.06em;color:rgba(255,255,255,.4);max-width:none;} 457.tgre-ed-report{background:#fff;border-radius:18px;padding:clamp(30px,5vw,56px);display:flex;align-items:center;justify-content:space-between;gap:32px;flex-wrap:wrap;box-shadow:0 24px 60px -42px rgba(24,24,25,.35);} 458.tgre-ed-report .lead{flex:1 1 420px;min-width:260px;} 459.tgre-ed-report h2{max-width:none;font-size:clamp(28px,3.6vw,44px);margin:0 0 12px;} 460.tgre-ed-report p{max-width:52ch;margin:0;} 461.tgre-ed-report .tgre-ed-marker{margin-bottom:12px;} 462.tgre-ed-panels{display:grid;grid-template-columns:1fr 1fr;gap:clamp(16px,2vw,24px);margin-top:36px;} 463.tgre-ed-panel{position:relative;display:flex;align-items:flex-end;min-height:clamp(300px,30vw,430px);border-radius:16px;overflow:hidden;text-decoration:none!important;color:#fff;} 464.tgre-ed-panel img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;transition:transform .8s ease;} 465.tgre-ed-panel::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;background:linear-gradient(180deg,rgba(24,24,25,.05),rgba(24,24,25,.85));} 466.tgre-ed-panel:hover img{transform:scale(1.05);} 467.tgre-ed-panel>div{position:relative;z-index:2;padding:clamp(22px,3vw,34px);} 468.tgre-ed-panel h3{color:#fff;font-family:aventa-wf,sans-serif;font-weight:400;font-size:clamp(24px,2.6vw,32px);margin:0 0 10px;max-width:none;} 469.tgre-ed-panel p{color:rgba(255,255,255,.85);margin:0 0 18px;max-width:40ch;font-size:15px;line-height:1.55;} 470.tgre-ed-panel .pill{display:inline-flex;align-items:center;height:36px;padding:0 18px;border-radius:18px;border:1.5px solid rgba(255,255,255,.85);font-size:13px;font-weight:700;color:#fff;transition:background .3s,color .3s;} 471.tgre-ed-panel:hover .pill{background:#fff;color:#181819;border-color:#fff;} 472.tgre-ed-close{text-align:center;} 473.tgre-ed-close h2{max-width:none;font-size:clamp(36px,5.4vw,64px);margin:0 auto 16px;} 474.tgre-ed-close p{margin-left:auto;margin-right:auto;} 475.tgre-ed-close .foot{margin-top:44px;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.55);max-width:none;} 476@media(max-width:820px){ 477.tgre-ed-stats{grid-template-columns:repeat(2,1fr);gap:36px 20px;} 478.tgre-ed-panels{grid-template-columns:1fr;} 479} 480</style> 481 482 483 484<!-- TGRE editorial panels: CKEditor-safe overlay link (added 2026-07-16) --> 485<style> 486.tgre-ed-panel{cursor:pointer;} 487.tgre-ed-panel-link{position:absolute;inset:0;z-index:5;font-size:0;line-height:0;text-decoration:none;} 488</style> 489 490 491 492<!-- TGRE footer v2: areas strip, trust row, CTA sublink (added 2026-07-16) --> 493<style> 494.tgre-foot-areas{margin-top:30px;font-size:13px;opacity:.68;} 495.tgre-foot-areas a{text-decoration:underline;text-underline-offset:3px;} 496.tgre-foot-trust{margin-top:10px;font-size:11px;letter-spacing:.08em;text-transform:uppercase;opacity:.45;} 497.tgre-foot-sub{display:inline-block;margin-top:10px;font-size:13.5px;text-decoration:underline;text-underline-offset:3px;opacity:.75;} 498</style> 499 500 501<style> 502/* TGRE: hide the template-injected Office Details block on the Contact page (16 Jul 2026) */ 503html:has(link[rel="canonical"][href*="/contact-us"]) section.content-container:has(.office){display:none!important} 504</style> 505 506 507<style> 508/* ===== TGRE Motion v3 (19 Jul 2026) â scroll reveal + micro-interactions. 509 v3 over v2: one site-wide settle curve cubic-bezier(.22,1,.36,1), softer 4px 510 blur-in, pre-reveal will-change promotion, hover timing unified. CSS-only. 511 Gated on html.tgre-motion (added by the Motion script in Body End Includes; 512 never added when prefers-reduced-motion). v2 over v1: soft blur-in, a touch 513 more travel, image zoom-settle reveal (offset-pair + editorial panels), a 514 growing accent line under stat figures, longer marker underline. 515 Delete this block to disable. ===== */ 516html.tgre-motion .tgre-mo{opacity:0;transform:translateY(34px);filter:blur(4px);transition:opacity .6s cubic-bezier(.22,1,.36,1),transform .6s cubic-bezier(.22,1,.36,1),filter .6s cubic-bezier(.22,1,.36,1)} 517html.tgre-motion .tgre-mo.tgre-in{opacity:1;transform:none;filter:none} 518html.tgre-motion .tgre-mo .grid>div,html.tgre-motion .tgre-mo .tgre-ed-stat,html.tgre-motion .tgre-mo .tgre-ed-panel{opacity:0;transform:translateY(24px);transition:opacity .5s cubic-bezier(.22,1,.36,1),transform .5s cubic-bezier(.22,1,.36,1)} 519html.tgre-motion .tgre-mo.tgre-in .grid>div,html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat,html.tgre-motion .tgre-mo.tgre-in .tgre-ed-panel{opacity:1;transform:none} 520html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(2),html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(2),html.tgre-motion .tgre-mo.tgre-in .tgre-ed-panel:nth-child(2){transition-delay:.
52008s} 521html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(3),html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(3){transition-delay:.16s} 522html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(4),html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(4){transition-delay:.24s} 523html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(5){transition-delay:.32s} 524html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(6){transition-delay:.4s} 525html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(n+7){transition-delay:.48s} 526html.tgre-motion .tgre-ed-marker{opacity:0;transform:translateX(-18px);transition:opacity .8s cubic-bezier(.22,1,.36,1),transform .8s cubic-bezier(.22,1,.36,1)} 527html.tgre-motion .tgre-ed-marker.tgre-in{opacity:1;transform:none} 528html.tgre-motion .tgre-ed-marker::after{content:"";display:inline-block;vertical-align:middle;width:0;height:2px;background:#d46144;margin-left:12px;transition:width 1s .35s cubic-bezier(.22,1,.36,1)} 529html.tgre-motion .tgre-ed-marker.tgre-in::after{width:44px} 530/* v2 image reveal â safe zoom-settle: never uses opacity/clip, so a dropped value cannot hide a photo */ 531html.tgre-motion .tgre-mo .offset-pair .image img,html.tgre-motion .tgre-mo .tgre-ed-panel img{transform:scale(1.07);transition:transform 1s cubic-bezier(.22,1,.36,1)} 532html.tgre-motion .tgre-mo.tgre-in .offset-pair .image img,html.tgre-motion .tgre-mo.tgre-in .tgre-ed-panel img{transform:none} 533/* v2 growing accent line under stat figures (additive; absent if unsupported, never breaks layout) */ 534html.tgre-motion .tgre-mo .tgre-ed-stat .fig::after{content:"";display:block;width:0;height:2px;background:#d46144;margin-top:14px;transition:width .85s .2s cubic-bezier(.22,1,.36,1)} 535html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat .fig::after{width:44px} 536html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(2) .fig::after{transition-delay:.3s} 537html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(3) .fig::after{transition-delay:.4s} 538html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(4) .fig::after{transition-delay:.5s} 539/* v3 pre-reveal compositor promotion: prevents first-frame jank; selector stops matching once revealed */ 540html.tgre-motion .tgre-mo:not(.tgre-in),html.tgre-motion .tgre-mo:not(.tgre-in) .grid>div,html.tgre-motion .tgre-mo:not(.tgre-in) .tgre-ed-stat,html.tgre-motion .tgre-mo:not(.tgre-in) .tgre-ed-panel{will-change:opacity,transform} 541@media (hover:hover){ 542html.tgre-motion .pushbutton{transition:transform .25s cubic-bezier(.22,1,.36,1),box-shadow .25s ease} 543html.tgre-motion .pushbutton:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(24,24,25,.14)} 544html.tgre-motion .tgre-ed-panel{transition:transform .3s cubic-bezier(.22,1,.36,1),box-shadow .3s ease,opacity .6s cubic-bezier(.22,1,.36,1)} 545html.tgre-motion .tgre-mo.tgre-in .tgre-ed-panel:hover{transform:translateY(-4px);box-shadow:0 24px 60px rgba(24,24,25,.16)} 546html.tgre-motion .offset-pair .image{overflow:hidden} 547html.tgre-motion .tgre-mo.tgre-in .offset-pair:hover .image img{transform:scale(1.05)} 548html.tgre-motion .tgre-mo.tgre-in .tgre-ed-panel:hover img{transform:scale(1.06)} 549} 550@media (prefers-reduced-motion:reduce){ 551html.tgre-motion .tgre-mo,html.tgre-motion .tgre-mo .grid>div,html.tgre-motion .tgre-mo .tgre-ed-stat,html.tgre-motion .tgre-mo .tgre-ed-panel,html.tgre-motion .tgre-ed-marker{opacity:1;transform:none;filter:none;transition:none} 552html.tgre-motion .tgre-mo .offset-pair .image img,html.tgre-motion .tgre-mo .tgre-ed-panel img{transform:none} 553html.tgre-motion .tgre-ed-stat .fig::after{width:44px;transition:none} 554} 555</style> 556 557<!-- TGRE rounded imagery: consistent 16px radius on offset-pair and pushimage blocks site-wide (17 Jul 2026) --> 558<style> 559.offset-pair .image,.pushimage{border-radius:16px;overflow:hidden} 560.offset-pair .image img,.pushimage img{border-radius:16px} 561</style> 562 563<!-- TGRE footer brand bar + button width cap + Motion v2 parallax (17 Jul 2026) --> 564<style> 565.tgre-foot-brandbar{margin-top:36px;padding-top:26px;border-top:1px solid rgba(24,24,25,.12)} 566.tgre-foot-tag{font-size:14.5px;line-height:1.6;opacity:.85;max-width:64ch;margin:0} 567.tgre-foot-meta{font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;opacity:.55;margin:10px 0 0} 568.tgre-foot-legal{font-size:12px;opacity:.5;margin:8px 0 0} 569.tgre-foot-legal a{text-decoration:underline;text-underline-offset:3px} 570@media(min-width:640px){.pushblock a.pushbutton[data-halign="stretch"]{max-width:420px}} 571</style> 572 573<!-- Immersive .rj engine (v2 animation: slow reveals, write-on words, consistent underline, ken-bur
573ns) 19 Jul 2026 --> 574<style> 575html:has(.rj) main.siteMain>section.hero.content-container{display:none!important} 576html:has(.rj) main.siteMain>.user-content{padding:0!important;margin:0!important;max-width:none!important} 577.rj{--e:cubic-bezier(.22,1,.36,1);position:relative;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);background:#141312;color:#F9F2ED;overflow:hidden;font-family:geist-wf,sans-serif;line-height:1.5} 578.rj *{box-sizing:border-box} 579.rj em{font-style:italic;color:#d46144} 580.rj h2{font-family:aventa-wf,sans-serif;font-weight:600;letter-spacing:-.02em;line-height:1.05;color:#F9F2ED;max-width:none} 581.rj p{margin:0} 582.rj-hero{min-height:92vh;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:12vh 24px;background:radial-gradient(120% 90% at 50% 0%,#241a15,#141312 62%)} 583.rj-eyebrow{font-size:12px;font-weight:700;letter-spacing:.28em;text-transform:uppercase;color:#d46144;margin-bottom:22px} 584.rj-h1{font-family:aventa-wf,sans-serif;font-weight:700;font-size:clamp(44px,8vw,110px);line-height:1.02;letter-spacing:-.03em;margin:0} 585.rj-sub{margin-top:22px!important;max-width:52ch;font-size:clamp(16px,2vw,21px);color:rgba(249,242,237,.72)} 586.rj-teaser{margin-top:32px;display:flex;gap:26px;flex-wrap:wrap;justify-content:center;font-size:13px;color:rgba(249,242,237,.6)} 587.rj-teaser b{color:#d46144;font-family:aventa-wf,sans-serif;font-weight:600} 588.rj-hero>*{opacity:0;transform:translateY(24px);animation:rjUp 1.2s var(--e) forwards} 589.rj-hero>*:nth-child(2){animation-delay:.18s}.rj-hero>*:nth-child(3){animation-delay:.36s}.rj-hero>*:nth-child(4){animation-delay:.54s} 590@keyframes rjUp{to{opacity:1;transform:none}} 591.rj-act{min-height:60vh;display:flex;flex-direction:column;justify-content:center;padding:12vh clamp(24px,7vw,110px)} 592.rj-num{font-family:aventa-wf,sans-serif;font-weight:700;font-size:clamp(60px,12vw,180px);color:rgba(249,242,237,.08);line-height:.8;letter-spacing:-.04em} 593.rj-lbl{font-size:12px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:#d46144;margin:18px 0 10px} 594.rj-ah{font-size:clamp(30px,5vw,64px);max-width:18ch} 595.rj-ap{margin-top:16px!important;max-width:44ch;color:rgba(249,242,237,.72);font-size:clamp(15px,1.6vw,19px)} 596.rj-scene{min-height:100vh;display:flex;align-items:center;gap:clamp(24px,5vw,84px);padding:9vh clamp(24px,7vw,110px);position:relative} 597.rj-scene.rev{flex-direction:row-reverse} 598.rj-media{flex:0 0 auto;width:min(58vw,860px);aspect-ratio:3/2;border-radius:20px;overflow:hidden;position:relative;box-shadow:0 50px 110px -50px rgba(0,0,0,.85)} 599.rj-media img{width:100%;height:100%;object-fit:cover;display:block} 600.rj-txt{flex:1 1 auto;min-width:260px;max-width:520px} 601.rj-day{font-size:12px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#d46144;margin-bottom:14px} 602.rj-sh{font-size:clamp(30px,4.6vw,56px)} 603.rj-body{margin-top:18px!important;font-size:clamp(15px,1.5vw,18px);color:rgba(249,242,237,.76)} 604.rj-link{display:inline-block;margin-top:18px;color:#d46144!important;font-weight:600;font-size:15px;text-decoration:none;border-bottom:1px solid rgba(212,97,68,.5);padding-bottom:2px} 605.rj-stat{margin-top:24px;display:inline-flex;align-items:baseline;gap:10px;padding:12px 20px;border:1px solid rgba(212,97,68,.4);border-radius:999px;background:rgba(212,97,68,.08)} 606.rj-stat b{font-family:aventa-wf,sans-serif;font-size:28px;color:#d46144;font-weight:600;line-height:1} 607.rj-stat span{font-size:13px;color:rgba(249,242,237,.82)} 608.rj-scene.bleed{padding:0;display:block} 609.rj-scene.bleed .rj-media{width:100%;height:100vh;aspect-ratio:auto;border-radius:0;box-shadow:none;opacity:1!important;transform:none!important} 610.rj-scene.bleed .rj-txt{position:absolute;left:clamp(24px,7vw,110px);right:24px;bottom:15vh;max-width:640px;z-index:3} 611.rj-scene.bleed::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(20,19,18,.1) 40%,rgba(20,19,18,.92));z-index:2} 612.rj-emph{position:relative;display:inline-block} 613.rj-emph svg{position:absolute;left:-1%;bottom:-.16em;width:102%;height:.34em;overflow:visible}
614.rj-emph svg path{fill:none;stroke:#d46144;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.92;transition:stroke-dashoffset 1.5s 1.6s cubic-bezier(.22,.7,.2,1)} 615@supports ((background-clip:text) or (-webkit-background-clip:text)){ 616html.rj-anim .rj-emph em{color:transparent;background:linear-gradient(90deg,#d46144,#d46144) left center/0% 100% no-repeat;-webkit-background-clip:text;background-clip:text;transition:background-size 1.5s cubic-bezier(.3,.5,.2,1)} 617html.rj-anim .rj-emph.rj-lit em{background-size:100% 100%} 618} 619.rj-scene .rj-txt>*,.rj-act>*,.rj-cta>*{opacity:0;transform:translateY(26px);filter:blur(4px);transition:opacity 1.3s var(--e),transform 1.3s var(--e),filter 1.3s var(--e)} 620.rj-scene .rj-media{opacity:0;transform:scale(.955);transition:opacity 1.4s var(--e),transform 1.9s var(--e)} 621.rj-scene.rj-in .rj-txt>*,.rj-act.rj-in>*,.rj-cta.rj-in>*{opacity:1;transform:none;filter:none} 622.rj-scene.rj-in .rj-media{opacity:1;transform:none} 623.rj-scene.rj-in .rj-txt>*:nth-child(2){transition-delay:.14s}.rj-scene.rj-in .rj-txt>*:nth-child(3){transition-delay:.28s}.rj-scene.rj-in .rj-txt>*:nth-child(4){transition-delay:.42s}.rj-scene.rj-in .rj-txt>*:nth-child(5){transition-delay:.56s} 624.rj-act.rj-in>*:nth-child(2){transition-delay:.14s}.rj-act.rj-in>*:nth-child(3){transition-delay:.28s}.rj-act.rj-in>*:nth-child(4){transition-delay:.42s} 625.rj-scene:not(.rj-in) .rj-txt>*,.rj-act:not(.rj-in)>*,.rj-cta:not(.rj-in)>*,.rj-scene:not(.rj-in) .rj-media{will-change:opacity,transform} 626html.rj-anim .rj-scene.rj-in .rj-media img{animation:rjKen 20s ease-in-out infinite alternate} 627@keyframes rjKen{from{transform:scale(1.01)}to{transform:scale(1.07)}} 628.rj-cta{min-height:auto;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:14vh 24px;background:linear-gradient(rgba(20,19,18,.82),rgba(20,19,18,.9)),url('https://www.thegalleryrealestate.com.au/imagecache/fitwithin/1600x1600/_files/tgre-shoot-day/984e9f9c-4c74-4c0f-b23d-8dca824e50ab.jpg') center/cover;background-blend-mode:normal} 629.rj-cta .rj-lbl{color:#d46144} 630.rj-cta-h{font-size:clamp(32px,5.4vw,64px);color:#F9F2ED;max-width:16ch} 631.rj-cta-h em{color:#d46144} 632.rj-cta-p{margin-top:18px!important;max-width:46ch;color:rgba(249,242,237,.72);font-size:clamp(16px,1.7vw,19px)} 633.rj-btns{margin-top:30px;display:flex;gap:14px;justify-content:center;flex-wrap:wrap} 634.rj-b1{background:transparent;border:1.5px solid rgba(249,242,237,.5);color:#F9F2ED!important;text-decoration:none;font-weight:600;padding:14px 28px;border-radius:999px;font-size:15px;transition:border-color .2s} 635.rj-b1:hover{border-color:#F9F2ED} 636.rj-b2{background:#d46144;border:1.5px solid #d46144;color:#fff!important;text-decoration:none;font-weight:600;padding:14px 28px;border-radius:999px;font-size:15px} 637@media(max-width:860px){ 638 .rj-scene,.rj-scene.rev{flex-direction:column;padding:7vh 22px;gap:24px;min-height:auto} 639 .rj-media{width:100%}.rj-txt{max-width:none} 640 .rj-scene.bleed .rj-txt{bottom:10vh;left:22px;right:22px} 641 .rj-act{padding:9vh 22px;min-height:auto} 642} 643@media(prefers-reduced-motion:reduce){ 644 .rj-hero>*{animation:none;opacity:1;transform:none} 645 .rj-scene .rj-txt>*,.rj-act>*,.rj-cta>*,.rj-scene .rj-media{opacity:1!important;transform:none!important;filter:none!important} 646 .rj-emph svg path{stroke-dashoffset:0!important} 647 html.rj-anim .rj-emph em{color:#d46144;background:none} 648 html.rj-anim .rj-scene.rj-in .rj-media img{animation:none} 649} 650</style> 651 652<!-- TGRE word annotations v3: write-on + underline + double underline + circle + red tick + drawn arrow (.tg-*) 19 Jul 2026 --> 653<style> 654.tg-wo{position:relative;display:inline-block} 655.tg-annot{position:absolute;overflow:visible;pointer-events:none} 656.tg-ul .tg-annot{left:-1%;bottom:-.14em;width:102%;height:.3em} 657.tg-circ .tg-annot{left:-50%;top:-31%;width:166%;height:170%} 658.tg-arr{left:0;top:0;bottom:auto} 659.tgre-subs summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:12px;font-weight:600;font-size:15px;padding:14px 24px;border:1.5px solid rgba(24,24,25,.28);border-radius:999px;user-select:none;transition:border-color .25s,color .25s} 660.tgre-subs summary::-webkit-details-marker{display:none} 661.tgre-subs summary::after{content:"+";font-weight:600;font-size:17px;line-height:1;transition:transform .35s cubic-bezier(.22,1,.36,1)} 662.tgre-subs summary:hover{border-color:#d46144;color:#d46144} 663.tgre-subs[open] summary::after{transform:rotate(45deg)} 664.tgre-subs[open] summary{margin-bottom:20px} 665.tgre-subs[open] .grid{animation:tgreSubsIn .55s cubic-bezier(.22,1,.36,1)} 666@keyframes tgreSubsIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}} 667.tg-arr path{transition:stroke-dashoffset 1.4s 1.55s cubic-bezier(.22,.7,.2,1)} 668.tg-ul2 .tg-annot{left:-1%;bottom:-.36em;width:102%;height:.55em} 669.tg-ul2 .tg-annot path:nth-of-type(2){transition-delay:2.45s;transition-duration:.9s} 670.tg-annot path{fill:none;stroke:#d46144;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.92;transition:stroke-dashoffset 1.5s 1.6s cubic-bezier(.22,.7,.2,1)} 671.tg-circ .tg-annot path{transition:stroke-dashoffset 1s 1.4s cubic-bezier(.22,.7,.2,1)} 672.tg-tk{display:inline-block;width:.58em;height:.58em;margin-left:.16em;overflow:visible;vertical-align:-.02em} 673.tg-tk path{fill:none;stroke:#d46144;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.95;transition:stroke-dashoffset .5s 1.6s cubic-bezier(.3,.6,.3,1)} 674.tg-tk .tk-b{transition-delay:1.95s} 675@supports ((background-clip:text) or (-webkit-background-clip:text)){ 676html.tg-anim .tg-wo{color:transparent;background:linear-gradient(90deg,#d46144,#d46144) left center/0% 100% no-repeat;-webkit-background-clip:text;background-clip:text;transition:background-size 1.5s cubic-bezier(.3,.5,.2,1)} 677html.tg-anim .tg-wo.tg-lit{background-size:100% 100%} 678} 679@media(prefers-reduced-motion:reduce){html.tg-anim .tg-wo{color:#d46144;background:none}.tg-annot path,.tg-tk path{stroke-dashoffset:0!important}} 680</style> 681<style> 682/* TGRE mobile speed: all reveal/draw animations 25% faster under 860px (19 Jul 2026) */ 683@media(max-width:860px){ 684html.tgre-motion .tgre-mo{transition:opacity .45s cubic-bezier(.22,1,.36,1),transform .45s cubic-bezier(.22,1,.36,1),filter .45s cubic-bezier(.22,1,.36,1)} 685html.tgre-motion .tgre-mo .grid>div,html.tgre-motion .tgre-mo .tgre-ed-stat,html.tgre-motion .tgre-mo .tgre-ed-panel{transition:opacity .38s cubic-bezier(.22,1,.36,1),transform .38s cubic-bezier(.22,1,.36,1)} 686html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(2),html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(2),html.tgre-motion .tgre-mo.tgre-in .tgre-ed-panel:nth-child(2){transition-delay:.
68605s} 687html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(3),html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(3){transition-delay:.11s} 688html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(4),html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(4){transition-delay:.17s} 689html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(5){transition-delay:.22s} 690html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(6){transition-delay:.27s} 691html.tgre-motion .tgre-mo.tgre-in .grid>div:nth-child(n+7){transition-delay:.32s} 692html.tgre-motion .tgre-ed-marker{transition:opacity .54s cubic-bezier(.22,1,.36,1),transform .54s cubic-bezier(.22,1,.36,1)} 693html.tgre-motion .tgre-ed-marker::after{transition:width .68s .24s cubic-bezier(.22,1,.36,1)} 694html.tgre-motion .tgre-mo .offset-pair .image img,html.tgre-motion .tgre-mo .tgre-ed-panel img{transition:transform .68s cubic-bezier(.22,1,.36,1)} 695html.tgre-motion .tgre-mo .tgre-ed-stat .fig::after{transition:width .58s .14s cubic-bezier(.22,1,.36,1)} 696html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(2) .fig::after{transition-delay:.2s} 697html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(3) .fig::after{transition-delay:.27s} 698html.tgre-motion .tgre-mo.tgre-in .tgre-ed-stat:nth-child(4) .fig::after{transition-delay:.34s} 699html.tg-anim .tg-wo{transition:background-size .77s cubic-bezier(.3,.5,.2,1)} 700.tg-annot path{transition:stroke-dashoffset .77s .81s cubic-bezier(.22,.7,.2,1)} 701.tg-circ .tg-annot path{transition:stroke-dashoffset .51s .71s cubic-bezier(.22,.7,.2,1)} 702.tg-tk path{transition:stroke-dashoffset .26s .81s cubic-bezier(.3,.6,.3,1)} 703.tg-tk .tk-b{transition-delay:.98s} 704.tg-arr path{transition:stroke-dashoffset .71s .78s cubic-bezier(.22,.7,.2,1)} 705.tg-ul2 .tg-annot path:nth-of-type(2){transition-delay:1.25s;transition-duration:.46s} 706html.rj-anim .rj-emph em{transition:background-size .77s cubic-bezier(.3,.5,.2,1)} 707.rj-emph svg path{transition:stroke-dashoffset .77s .81s cubic-bezier(.22,.7,.2,1)} 708.rj-scene .rj-txt>*,.rj-act>*,.rj-cta>*{transition:opacity .88s var(--e),transform .88s var(--e),filter .88s var(--e)} 709.rj-scene .rj-media{transition:opacity .95s var(--e),transform 1.28s var(--e)} 710.rj-scene.rj-in .rj-txt>*:nth-child(2){transition-delay:.1s}.rj-scene.rj-in .rj-txt>*:nth-child(3){transition-delay:.19s}.rj-scene.rj-in .rj-txt>*:nth-child(4){transition-delay:.29s}.rj-scene.rj-in .rj-txt>*:nth-child(5){transition-delay:.38s} 711.rj-act.rj-in>*:nth-child(2){transition-delay:.1s}.rj-act.rj-in>*:nth-child(3){transition-delay:.19s}.rj-act.rj-in>*:nth-child(4){transition-delay:.29s} 712.rj-hero>*{animation-duration:.81s} 713.rj-hero>*:nth-child(2){animation-delay:.12s}.rj-hero>*:nth-child(3){animation-delay:.24s}.rj-hero>*:nth-child(4){animation-delay:.37s} 714} 715</style> 716 717<style> 718/* TGRE hand-written hero word (.tg-hw) 19 Jul 2026 â marker-writes "specialists." in the hero. 719 Rollback: remove this block + restore the hero em on page 25 (backup page-25-backup-2026-07-19-pre-tghw.html). */ 720.tg-hw{display:block;width:5.34em;max-width:94%;height:auto;overflow:visible;margin-top:.06em} 721html.tg-anim .tg-hw .pen{animation-name:tgHw;animation-timing-function:linear;animation-fill-mode:forwards} 722@keyframes tgHw{to{stroke-dashoffset:0}} 723html:not(.tg-anim) .tg-hw .pen,html:not(.tg-anim) .tg-hw .ul-path{stroke-dashoffset:0!important;animation:none!important} 724@media(prefers-reduced-motion:reduce){.tg-hw .pen,.tg-hw .ul-path{animation:none!important;stroke-dashoffset:0!important}} 725</style> 726 727 728 729<!-- TGRE homepage stat tidy + hand-written margin note (20 Jul 2026) --> 730<link rel="preconnect" href="https://fonts.googleapis.com"> 731<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 732<link href="https://fonts.googleapis.com/css2?family=Kalam:wght@400;700&display=swap" rel="stylesheet"> 733<style> 734/* Drop the animated accent line under the stat figures and lift the grey captions */ 735.tgre-ed-stats .tgre-ed-stat .fig::after{display:none!important} 736.tgre-ed-stats .tgre-ed-stat .cap{margin-top:5px!important} 737/* Hand-written marker note, angled above a heading word (e.g. "We heart MPG") */ 738.tg-hn-wrap{position:relative;display:inline-block} 739.tg-hn{position:absolute;
739left:46%;top:-1.15em;width:3.15em;height:auto;pointer-events:none;transform:rotate(-10deg)} 740.tg-hn svg{display:block;width:100%;height:auto;overflow:visible} 741.tg-hn path{fill:none;stroke:#d46144;stroke-width:9;stroke-linecap:round;stroke-linejoin:round} 742.tg-hn .tg-heart-fill{fill:#d46144;stroke:none;opacity:0;transition:opacity .5s ease 1.5s} 743.tg-hn.tg-lit .tg-heart-fill{opacity:1} 744@media(max-width:860px){.tg-hn{left:26%;top:-1.2em}} 745</style> 746 747 748<style> 749/* Handwritten section marker (S8 close): "The Invitation" in the Kalam marker hand (20 Jul 2026) */ 750.tg-hw-marker{display:block;width:min(210px,45vw);margin:0 auto 18px;transform:rotate(-3deg)} 751.tg-hw-marker svg{display:block;width:100%;height:auto;overflow:visible} 752.tg-hw-marker path{fill:none;stroke:#d46144;stroke-width:6.5;stroke-linecap:round;stroke-linejoin:round} 753html:not(.tg-anim) .tg-hn path,html:not(.tg-anim) .tg-hw-marker path{stroke-dashoffset:0!important} 754html:not(.tg-anim) .tg-hn .tg-heart-fill{opacity:1} 755@media(prefers-reduced-motion:reduce){.tg-hn path,.tg-hw-marker path{stroke-dashoffset:0!important;transition:none!important}.tg-hn .tg-heart-fill{opacity:1!important;transition:none!important}} 756</style> 757 758 759<style> 760/* "The Invitation" writes on slower, at pen speed (20 Jul 2026) */ 761/* (superseded by stroke-drawn SVG) */ 762</style> 763<style> 764/* Homepage review band v3 (hand-drawn stars + quote mark), invitation sizing, mobile footer trim, proof-gap fix (20 Jul 2026) */ 765.tgre-rev{position:relative;text-align:center;max-width:900px;margin:0 auto} 766.tgre-rev p{max-width:none;margin-left:auto;margin-right:auto} 767.tgre-rev-qmark{position:absolute;left:50%;top:-58px;transform:translateX(-50%) rotate(-6deg);width:230px;pointer-events:none;opacity:.16} 768.tgre-rev-qmark svg{display:block;width:100%;height:auto;overflow:visible} 769.tgre-rev-qmark path{fill:none;stroke:#d46144;stroke-width:24;stroke-linecap:round} 770.tgre-rev-stars{display:flex;gap:12px;justify-content:center;align-items:center;margin:0 0 20px;position:relative} 771.tgre-rev-stars .tg-star{width:22px;height:22px;overflow:visible;transform:rotate(-8deg)} 772.tgre-rev-stars .tg-star:nth-child(2n){transform:rotate(6deg)} 773.tgre-rev-stars .st{fill:none;stroke:#d46144;stroke-width:7;stroke-linecap:round;stroke-linejoin:round} 774.tgre-rev-stars .tg-star-fill{fill:#d46144;opacity:0;transition:opacity .35s ease} 775.tgre-rev-stars.tg-lit .tg-star-fill{opacity:1} 776.tgre-rev-rot{display:grid} 777.tgre-rev-slide{grid-area:1/1;opacity:0;animation:tgreRevCycle 15s infinite} 778.tgre-rev-slide:nth-child(2){animation-delay:5s} 779.tgre-rev-slide:nth-child(3){animation-delay:10s} 780@keyframes tgreRevCycle{0%{opacity:0;transform:translateY(10px)}2.5%,31.5%{opacity:1;transform:none}34%,100%{opacity:0;transform:none}} 781.tgre-rev h2{max-width:none;font-size:clamp(30px,4.2vw,52px);line-height:1.12;margin:0 0 16px;position:relative} 782.tgre-rev-name{font-weight:600;margin:0} 783.tgre-rev .pushbutton-wrap{display:flex;justify-content:center} 784.tgre-rev-link{display:block;width:min(240px,58vw);margin:0 auto;transition:transform .25s ease} 785.tgre-rev-link:hover{transform:scale(1.05) rotate(-1.5deg)} 786.tgre-rev-link svg{display:block;width:100%;height:auto;overflow:visible} 787.tgre-rev-link path{fill:none;stroke:#d46144;stroke-width:6.5;stroke-linecap:round;stroke-linejoin:round} 788html:not(.tg-anim) .tgre-rev-stars path,html:not(.tg-anim) .tgre-rev-qmark path,html:not(.tg-anim) .tgre-rev-link path{stroke-dashoffset:0!important} 789html:not(.tg-anim) .tgre-rev-stars .tg-star-fill{opacity:1} 790@media(prefers-reduced-motion:reduce){.tgre-rev-slide{animation:none}.tgre-rev-rot .tgre-rev-slide:first-child{opacity:1}.tgre-rev-stars path,.tgre-rev-qmark path,.tgre-rev-link path{stroke-dashoffset:0!important;transition:none!important}.tgre-rev-stars .tg-star-fill{opacity:1!important}} 791@media(max-width:860px){.tg-hw-marker{width:100px;margin-bottom:12px}.tgre-rev-qmark{width:160px;top:-40px}.tgre-rev-stars .tg-star{width:18px;height:18px}} 792@media(max-width:899px){.tgre-foot-cta-main{display:none!important}} 793/* Proof band: close the dead air between the stats and the awards */ 794section:has(.tgre-ed-stats){padding-bottom:26px!important} 795section:has(.tgre-ed-stats)+section{padding-top:20px!important}
796/* Tighter reviews + rental report bands */ 797section:has(.tgre-rev){padding-top:48px!important;padding-bottom:48px!important} 798section:has(.tgre-ed-report){padding-top:14px!important;padding-bottom:14px!important} 799</style> 800 801 802<style>/* [rental-appraisal embed preview 267 - remove when preview retired] hide theme title band so the embedded form's own hero leads */ 803html:has(link[rel="canonical"][href*="/rental-appraisal-preview"]) main.siteMain>section.hero.content-container{display:none!important}</style> 804 805 806<style>/* [rental-appraisal embed page 155] hide theme hero band so the embedded form leads, like the preview */ 807html:has(link[rel="canonical"][href*="/request-a-rental-appraisal"]) main.siteMain>section.hero{display:none!important}</style> 808 809 810<style>/* [form embed pages 182/229/198/268/272] hide theme hero band so the embedded form leads, like page 155 */ 811html:has(link[rel="canonical"][href*="/mpg-parcel-drop-off"]) main.siteMain>section.hero, 812html:has(link[rel="canonical"][href*="/landlordonboarding"]) main.siteMain>section.hero, 813html:has(link[rel="canonical"][href*="/rental-report"]) main.siteMain>section.hero, 814html:has(link[rel="canonical"][href*="/moore-park-gardens-rental-enquiry"]) main.siteMain>section.hero, 815html:has(link[rel="canonical"][href*="/tenant-enquiry"]) main.siteMain>section.hero{display:none!important}</style> 816 817 818 819<style> 820/* Footer arrow: triangle head drawn then coloured in (21 Jul 2026) */ 821.tg-arr .tg-arr-head{fill:#d46144;stroke:none;fill-opacity:0;transition:fill-opacity .5s ease 2.9s} 822.tg-wo.tg-lit .tg-arr-head{fill-opacity:.92} 823html:not(.tg-anim) .tg-arr .tg-arr-head{fill-opacity:.92} 824@media(max-width:860px){.tg-arr .tg-arr-head{transition:fill-opacity .4s ease 1.5s}} 825@media(prefers-reduced-motion:reduce){.tg-arr .tg-arr-head{fill-opacity:.92!important;transition:none!important}} 826</style> 827 828 829 830<style> 831/* Hero "specialists" â underline draws AFTER the word fully reveals (22 Jul 2026) */ 832.pushblock.bg-cover .tg-wo.tg-ul .tg-annot path{transition:stroke-dashoffset 1.2s 2s cubic-bezier(.22,.7,.2,1)} 833@media(max-width:860px){.pushblock.bg-cover .tg-wo.tg-ul .tg-annot path{transition:stroke-dashoffset .85s 1.15s cubic-bezier(.22,.7,.2,1)}} 834</style> 835 836 837 838<style> 839/* Hero "specialists" underline â self-contained draw on load, after the word reveals (22 Jul 2026). 840 Decoupled from the scroll-reveal engine so it animates above the fold. */ 841.tg-hero-ul{position:relative;display:inline-block} 842.tg-hero-annot{position:absolute;left:-1%;bottom:-.14em;width:102%;height:.3em;overflow:visible;pointer-events:none} 843.tg-hero-annot path{fill:none;stroke:#d46144;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:.92;stroke-dasharray:135;stroke-dashoffset:135;animation:tgHeroUL 1.2s cubic-bezier(.22,.7,.2,1) 1.7s both} 844@keyframes tgHeroUL{from{stroke-dashoffset:135}to{stroke-dashoffset:0}} 845@media(max-width:860px){.tg-hero-annot path{animation-duration:.85s;animation-delay:.95s}} 846@media(prefers-reduced-motion:reduce){.tg-hero-annot path{animation:none;stroke-dashoffset:0}} 847</style> 848 849<style> 850/* Landlords â collapsible "suburbs we cover" toggle */ 851.tgre-suburb-toggle{margin-top:4px;} 852.tgre-suburb-toggle .tgre-suburb-toggle-summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:16px;font-family:aventa-wf,sans-serif;font-weight:600;font-size:17px;line-height:1.2;padding:16px 20px;border:1px solid rgba(24,24,25,.15);border-radius:12px;transition:border-color .2s ease,background-color .2s ease;} 853.tgre-suburb-toggle .tgre-suburb-toggle-summary::-webkit-details-marker{display:none;} 854.tgre-suburb-toggle .tgre-suburb-toggle-summary:hover{border-color:#d46144;background-color:rgba(212,97,68,.04);} 855.tgre-suburb-toggle .tgre-suburb-toggle-icon{flex:none;font-size:26px;line-height:1;color:#d46144;font-family:aventa-wf,sans-serif;transition:transform .25s ease;} 856.tgre-suburb-toggle[open] .tgre-suburb-toggle-summary{border-color:#d46144;} 857.tgre-suburb-toggle[open] .tgre-suburb-toggle-icon{transform:rotate(45deg);} 858</style> 859 860 861<!-- Google tag (gtag.js) -->
vendor: 64 bytes, lines 861-862
861 862<script async src="https://www.googletagmanager.com/gtag/js?id=
862G-CTLK2T653P
vendor: 13 bytes, lines 862-863
862"> 863</script>
864<script> 865
vendor: 134 bytes, lines 865-869
865window.dataLayer = window.dataLayer || []; 866 function gtag(){dataLayer.push(arguments);} 867 gtag('js', new Date()); 868 869 gtag('config', '
869G-CTLK2T653P
vendor: 4 bytes, line 869
869');
870</script>
870 871 872 873 874<style> 875/* ===== TGRE Interaction v1 (11 Aug 2026) â motion audit fixes approved by Tom. 876 Press feedback, sticky header, symmetric menu exits, story overlay 877 materialise, burger hit area, suburbs toggle ease, scrim fades, 878 reduced-motion coverage. Cream and terracotta only, no blur. ===== */ 879 880/* 1 · Instant press feedback: the press lands immediately, release stays smooth */ 881.btn, .button { 882 transition: color .3s, padding .3s, box-shadow .25s cubic-bezier(.22,1,.36,1), background-color .3s, transform .25s cubic-bezier(.22,1,.36,1); 883} 884.btn:active, .button:active, 885.siteHeader ul.superMenu > li:last-child > a:active { 886 transition: none; 887 transform: scale(.97); 888} 889html.tgre-motion .pushbutton:active { 890 transition: none; 891 transform: translateY(0) scale(.97); 892} 893 894/* 2 · Sticky header: cream, ink text, hides scrolling down, returns on scroll-up. 895 Animates top (not transform) so the mega-menu's fixed dim keeps its 896 viewport anchor. Classes driven by the Interaction v1 JS in Body End. */ 897html.tgre-hd-fixed .siteHeader { 898 position: fixed; 899 top: 0; left: 0; right: 0; 900 z-index: 1000; 901 background: #F6F1EA; 902 box-shadow: 0 1px 0 rgba(24,24,25,.07), 0 10px 30px rgba(24,24,25,.08); 903 transition: top .38s cubic-bezier(.22,1,.36,1); 904} 905html.tgre-hd-hide .siteHeader { top: -110px; } 906html.tgre-hd-prep .siteHeader { transition: none; } 907html.tgre-hd-fixed .siteHeader-logo { color: #181819; } 908html.tgre-hd-fixed .siteHeader ul.superMenu > li:not(:last-child) > a { color: #181819; } 909html.tgre-hd-fixed .siteHeader ul.superMenu > li:not(:last-child) > a:hover { background-color: rgba(212,97,68,.16); } 910html.tgre-hd-fixed .siteHeader-burgerMenu { color: #181819; } 911 912/* 3 · Menus leave the way they arrived */ 913html #sidenav-main { 914 transition: transform .5s cubic-bezier(.3,1,0,1), opacity .5s cubic-bezier(.3,1,0,1), 915 visibility 0s linear .5s, clip-path 0s linear .5s; 916} 917html #sidenav-main + .sidenav-overlay { 918 display: block; 919 opacity: 0; 920 pointer-events: none; 921 transition: opacity .4s cubic-bezier(.22,1,.36,1); 922} 923html #sidenav-main.active + .sidenav-overlay { display: block; opacity: 1; pointer-events: auto; } 924html .superMenuPanel::after { transition: opacity .3s; } 925 926/* 4 · Story overlay materialises in and out (was an instant display pop) */ 927html .tgre-ps-overlay { 928 display: flex; 929 opacity: 0; 930 visibility: hidden; 931 pointer-events: none; 932 transition: opacity .3s cubic-bezier(.22,1,.36,1), visibility 0s linear .3s; 933} 934html .tgre-ps-overlay .tgre-ps-card { 935 transform: scale(.95) translateY(14px); 936 transition: transform .3s cubic-bezier(.22,1,.36,1); 937} 938html .tgre-ps-overlay.is-open { 939 opacity: 1; visibility: visible; pointer-events: auto; 940 transition: opacity .3s cubic-bezier(.22,1,.36,1), visibility 0s; 941} 942html .tgre-ps-overlay.is-open .tgre-ps-card { transform: none; } 943 944/* 5 · Burger hit area: 52Ã20 visual, ~68Ã48 touch target, zero visual change */ 945.siteHeader-burgerMenu { position: relative; } 946.siteHeader-burgerMenu::after { content: ""; position: absolute; inset: -14px -8px; } 947 948/* 6 · Suburbs toggle unfolds (progressive enhancement, newer browsers only) */ 949details.tgre-suburb-toggle { interpolate-size: allow-keywords; } 950@supports (interpolate-size: allow-keywords) { 951 details.tgre-suburb-toggle::details-content { 952 block-size: 0; overflow: clip; 953 transition: block-size .35s cubic-bezier(.22,1,.36,1), content-visibility .35s allow-discrete; 954 } 955 details.tgre-suburb-toggle[open]::details-content { block-size: auto; } 956} 957 958/* 8 · Mega menu settles: fade + content settle instead of max-height unroll. 959 Transform lives on the CHILDREN â a transform on .superMenuPanel itself would 960 re-anchor its position:fixed ::after dim to the panel box and break it. */ 961html .superMenuPanel { 962 max-height: 30rem; 963 opacity: 0; 964 visibility: hidden; 965 transition: opacity .28s cubic-bezier(.22,1,.36,1), visibility 0s linear .28s; 966} 967html .superMenuPanel > * { 968 transform: translateY(-8px); 969 transition: transform .28s cubic-bezier(.22,1,.36,1); 970} 971html .superMenuPanel.mutex-on { 972 opacity: 1; 973 visibility: visible; 974 transition: opacity .28s cubic-bezier(.22,1,.36,1), visibility 0s; 975} 976html .superMenuPanel.mutex-on > * { transform: none; } 977 978/* 9 · Display headings tracked slightly tighter */ 979h1, h2 { letter-spacing: -0.015em; } 980 981</style> 982 983<style> 984/* TGRE suburb market table v1 (11 Aug 2026) â pairs with update-suburb-market-bands.py */ 985.tgre-mkt-table{background:#fff;border:1px solid rgba(24,24,25,.12);border-radius:16px;padding:22px 24px;margin:26px 0;overflow-x:auto} 986.tgre-mkt-table table{width:100%;border-collapse:collapse;font-size:.92rem;min-width:520px} 987.tgre-mkt-table th{text-align:left;font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:rgba(24,24,25,.5);padding:6px 8px;border-bottom:1px solid rgba(24,24,25,.12)} 988.tgre-mkt-table td{padding:9px 8px;border-bottom:1px solid rgba(24,24,25,.06)} 989.tgre-mkt-table td:first-child{color:rgba(24,24,25,.62)} 990.tgre-mkt-table td.fig{font-weight:600} 991.tgre-mkt-table tr:last-child td{border-bottom:0} 992</style> 993 994 995<style> 996/* TGRE contact office photo v1 (13 Aug 2026) â photo-as-directions-control + tappable contact rows on /contact-us */ 997.tgre-oshot{display:block;margin:2rem 0 0;text-decoration:none;border-radius:6px;overflow:hidden;position:relative;transition:transform .32s cubic-bezier(.22,1,.36,1);-webkit-tap-highlight-color:transparent} 998.tgre-oshot:active{transform:scale(.984);transition-duration:.1s} 999.tgre-oshot img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;transition:transform .6s cubic-bezier(.22,1,.36,1)} 1000@media(hover:hover){.tgre-oshot:hover img{transform:scale(1.03)}} 1001.tgre-oshot-chip{position:absolute;
1001left:14px;bottom:14px;display:inline-flex;align-items:center;gap:.45rem;padding:.55rem .95rem;border-radius:999px;font-size:.82rem;font-weight:500;color:#fff;background:rgba(24,24,25,.42);backdrop-filter:blur(14px) saturate(160%);-webkit-backdrop-filter:blur(14px) saturate(160%);border-top:1px solid rgba(255,255,255,.28);pointer-events:none} 1002.tgre-oshot-chip svg{width:13px;height:13px;flex:none} 1003@media(prefers-reduced-transparency:reduce){.tgre-oshot-chip{background:rgba(24,24,25,.92);backdrop-filter:none;-webkit-backdrop-filter:none}} 1004.tgre-oshot-cap{font-size:.78rem;opacity:.72;margin-top:.7rem;max-width:480px;letter-spacing:.02em} 1005.tgre-crows{margin-top:1.75rem;border-top:1px solid rgba(24,24,25,.14)} 1006.tgre-crow{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;padding:1.05rem .25rem;border-bottom:1px solid rgba(24,24,25,.14);text-decoration:none;transition:background .25s ease,transform .25s ease;border-radius:2px;-webkit-tap-highlight-color:transparent} 1007a.tgre-crow:active{background:rgba(212,97,68,.08);transform:scale(.99);transition-duration:.08s} 1008.tgre-crow-k{font-size:.76rem;letter-spacing:.14em;text-transform:uppercase;opacity:.66;font-weight:600;flex:none} 1009.tgre-crow-v{font-weight:500;text-align:right} 1010.tgre-crow-v small{display:block;font-weight:400;opacity:.66;font-size:.82rem} 1011@media(prefers-reduced-motion:reduce){.tgre-oshot,.tgre-oshot img,.tgre-crow{transition:none}} 1012</style> 1013 1014 1015<!-- TGRE visit beacon â added 14 Aug 2026. Feeds the Marketing Hub's Website 1016 lane (TG-OS /marketing.html). Our own first-party counter: cookieless, no 1017 personal data, one localStorage flag per bucket to tell a repeat visit from 1018 a new one. It exists because we deliberately do not read GA4, and the GTM 1019 container on this site is not owned by TGRE. 1020 â IDS ARE BUCKETED ON PURPOSE. The counter's ?all=1 read does two blob 1021 reads PER REGISTERED ID, so an id per URL would make the hub slower with 1022 every blog post published. Eight buckets, fixed. To add one, edit MAP. -->
1023<script> 1024(function () { 1025 try { 1026 var MAP = { 1027 '': 'home', 1028 'landlords': 'landlords', 1029 'switch-to-the-gallery': 'switch', 1030 'owner-guide': 'owner-guide', 1031 'contact-us': 'contact', 1032 'properties-for-lease': 'for-lease', 1033 'about-us': 'about' 1034 }; 1035 var path = location.pathname.replace(/^\/+|\/+$/g, '').toLowerCase(); 1036 var bucket = path.indexOf('post/') === 0 ? 'blog' : (MAP[path] || 'other'); 1037 var id = 'web-' + bucket; 1038 var first = true; 1039 try { 1040 var k = 'tgre_v_' + id; 1041 first = !localStorage.getItem(k); 1042 if (first) localStorage.setItem(k, '1'); 1043 } catch (e) { first = false; } 1044 fetch( 1045 'https://moorepark.thegalleryrealestate.com.au/count?id=' + id + (first ? '&new=1' : ''), 1046 { method: 'POST', keepalive: true, mode: 'no-cors', credentials: 'omit' } 1047 ).catch(function () {}); 1048 } catch (e) {} 1049})(); 1050</script>
1050 1051 1052 1053<!-- TGRE Switch scroll page. Runs only on /switch. Engine, styles, fonts and stills are hosted at team.thegalleryrealestate.com.au/switch/ (TG-OS repo, public/switch). -->
1054<script>(function(){if(location.pathname.replace(/\/$/,'')!=='/switch')return;document.documentElement.classList.add('tg-switch');var B='https://team.thegalleryrealestate.com.au/switch/';['https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap',B+'scrollcraft.css',B+'switch.css'].forEach(function(h){var l=document.createElement('link');l.rel='stylesheet';l.href=h;document.head.appendChild(l);});[B+'scrollcraft.js',B+'switch.js'].forEach(function(u){var s=document.createElement('script');s.src=u;s.async=false;document.head.appendChild(s);});})();</script>
1054 1055 1056 1057 1058<!-- TGRE footer award marks (22 Sep 2026): the three 2026 award marks plus the three PMX 2026 finalist seals, bottom left of the theme footer under the address, same height. Order: Local Business Awards, Champion Awards, Sydney Design Awards Gold, PMX Innovation, PMX Office of the Year, PMX Team of the Year. The PMX seals carry a short caption (Innovation / Small office / Team) that fades in when the footer is on screen, out after 5s, back after 2s. Pairs with the "TGRE footer award marks" script in Body End Includes. Supersedes the 18 Sep 2026 block; phone pass of 11 Sep kept (marks 60px, social icons one row, G logo on its own centred row). Phones: PMX seals on their own row. Desktop copyright text is right-aligned so it clears the marks. --> 1059<style> 1060.tgre-foot-awards{grid-area:copyright;justify-self:start;align-self:start;display:flex;flex-wrap:wrap;align-items:flex-start;gap:18px;margin-top:-1.5rem;line-height:0} 1061.tgre-foot-award{display:flex;flex-direction:column;align-items:center;line-height:0;text-decoration:none;color:inherit} 1062.tgre-foot-award img{height:82px;width:auto;display:block;border-radius:3px;box-shadow:0 6px 18px rgba(24,24,25,.14);transition:transform .25s ease,box-shadow .25s ease} 1063.tgre-foot-award.is-clear img{border-radius:0;box-shadow:none} 1064.tgre-foot-award:hover img{transform:translateY(-2px);box-shadow:0 10px 24px rgba(24,24,25,.18)} 1065.tgre-foot-award.is-clear:hover img{box-shadow:none} 1066.tgre-foot-cap{display:block;line-height:1.25;margin-top:7px;font-size:10px;letter-spacing:.06em;white-space:nowrap;color:inherit;opacity:0;transition:opacity .7s ease} 1067.tgre-foot-awards.is-on .tgre-foot-cap,.tgre-foot-award:hover .tgre-foot-cap,.tgre-foot-award:focus-visible .tgre-foot-cap{opacity:.7} 1068.tgre-foot-break{display:none} 1069@media (prefers-reduced-motion:reduce){.tgre-foot-cap{transition:none;opacity:.7}} 1070@media (min-width:1025px){footer .siteFooter-copyright{text-align:right}} 1071@media (max-width:1024px){.tgre-foot-awards{grid-area:auto;grid-column:1/-1;justify-self:center;justify-content:center;margin-top:-1.25rem}} 1072@media (max-width:640px){ 1073 .siteFooter{grid-template-columns:1fr 1fr;grid-template-areas:"nav nav" "address social" "mark mark" "copyright copyright"} 1074 .siteFooter-logo{justify-self:center;width:52px;height:56px} 1075 .siteFooter-social{display:flex;justify-content:flex-end;gap:8px;margin:0;padding:0} 1076 .siteFooter-social li{margin:0} 1077 .siteFooter-copyright{margin-top:.5rem} 1078 .tgre-foot-awards{margin-top:-.5rem;margin-bottom:.75rem;gap:14px;row-gap:16px} 1079 .tgre-foot-award img{height:60px} 1080 .tgre-foot-cap{margin-top:5px;font-size:9px} 1081 .tgre-foot-break{display:block;flex-basis:100%;height:0} 1082} 1083</style> 1084 1085 1086 1087<!-- TGRE blog 82 hero (9 Sep 2026): the Gold hero is composed for desktop crops; on phones the theme lays the h1 over the whole image, so hide it there and let the dark hero carry the title. Scoped by filename, touches nothing else. --> 1088<style> 1089@media (max-width:768px){body.pageclass-post section.hero img[src*="design-awards-gold-hero"]{display:none}} 1090</style> 1091 1092<!-- TGRE blog 93 hero (18 Sep 2026): the PMX finalists hero is composed for desktop crops (seals in the right column); on phones the h1 sits over them, so hide it there like blog 82. Scoped by filename. --> 1093<style> 1094@media (max-width:768px){body.pageclass-post section.hero img[src*="pmx-finalists-hero"]{display:none}} 1095</style> 1096 1097 1098 1099<!-- TGRE blog 82 Insights tile (9 Sep 2026): the Gold hero's composition sits in the right column for the post hero, so the feed tile crops to that side instead of the empty centre. Scoped by filename. --> 1100<style> 1101.blogTile-image img[src*="design-awards-gold-hero"]{object-position:91% 50%} 1102</style> 1103 1104 1105<style> 1106/* TGRE Interaction v1.1 (11 Sep 2026) â iOS Safari drew a second, ghost copy of the site header at the top of the page when the sticky
1106script flipped .siteHeader from absolute to fixed on scroll-up (Tom saw it on /thank-you). Keep the header on its own compositing layer on small screens so the flip repaints in one go. Mobile only: a transform on the header would become the containing block for the mega-menu's fixed dim on desktop. */ 1107@media (max-width: 900px) { 1108 .siteHeader { -webkit-backface-visibility: hidden; backface-visibility: hidden; -webkit-transform: translateZ(0); transform: translateZ(0); } 1109 html.tgre-hd-prep .siteHeader { transition: none !important; } 1110} 1111</style> 1112 1113 1114 1115<!-- TGRE Should we rent it out? guide (21 Sep 2026). Runs only on /should-we-rent-it-out. Styles, engine and data are hosted at team.thegalleryrealestate.com.au/rent-it-out/ (TG-OS repo, public/rent-it-out). -->
1116<script>(function(){if(location.pathname.replace(/\/$/,'')!=='/should-we-rent-it-out')return;document.documentElement.classList.add('tg-rio');var B='https://team.thegalleryrealestate.com.au/rent-it-out/';['https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Kalam:wght@700&display=swap',B+'guide.css'].forEach(function(h){var l=document.createElement('link');l.rel='stylesheet';l.href=h;document.head.appendChild(l);});var s=document.createElement('script');s.src=B+'guide.js';s.async=false;document.head.appendChild(s);})();</script>
1116 1117<!-- End HEAD Includes --> 1118 1119</head> 1120 1121<body data-template-id="1" data-depth="1" data-page-id="25" data-lineage="/0001/000p" data-path="home" class="overlay-header pageclass-home"> 1122 1123 1124 <div id="site"> 1125 <header class="siteHeader"> 1126 <a href="/" class="siteHeader-logo"> 1127 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 362.4606 64.4578"> 1128 <path d="M225.8945,0h6.351v52.31h-6.351V0ZM211.3225,12.071h6.352v40.239h-6.352v-5.0457c-3.6632,3.4887-8.6087,5.6436-14.0662,5.6436-11.277,0-20.418-9.143-20.418-20.419s9.141-20.418,20.418-20.418c5.4575,0,10.403,2.1545,14.0662,5.6431v-5.6429ZM211.3225,36.466v-7.9542c-1.7342-6.1435-7.3677-10.6509-14.0662-10.6509-8.079,0-14.629,6.549-14.629,14.628s6.55,14.629,14.629,14.629c6.6985,0,12.332-4.5082,14.0662-10.6519ZM241.2125,52.31h6.352V0h-6.352v52.31ZM293.1732,29.5937c.348,1.942.374,3.661.074,5.155h-33.926c.348,3.687,1.843,6.677,4.4839,8.968,2.64,2.292,5.803,3.436,9.491,3.436,2.541,0,4.931-.57,7.174-1.718,2.241-1.145,4.059-2.69,5.454-4.633l5.754,1.345c-1.594,3.24-4.098,5.842-7.51,7.809-3.413,1.969-7.037,2.952-10.872,2.952-5.68,0-10.488-2.005-14.423-6.016-3.936-4.009-5.9041-8.829-5.9041-14.46,0-5.678,1.98-10.499,5.941-14.459s8.756-5.941,14.386-5.941c5.031,0,9.427,1.6819,13.189,5.0439,3.761,3.3621,5.989,7.536,6.688,12.518ZM286.9702,29.7427c-.448-3.388-1.955-6.2401-4.52-8.557-2.567-2.317-5.643-3.475-9.229-3.475-3.637,0-6.763,1.158-9.379,3.475-2.6151,2.317-4.122,5.169-4.521,8.557h27.649ZM355.9586,12.7046l-12.479,32.8051-13.227-32.8051h-6.501l16.6639,39.4561-1.909,4.6c-.48,1.157-1.61,1.911-2.863,1.911h-10.016l.086,5.786h11.085c2.954,0,5.612-1.797,6.713-4.539l18.949-47.2141h-6.502ZM157.3014,12.9878h14.039v5.786h-5.285c3.507,3.861,5.284,8.408,5.284,13.658,0,5.631-1.981,10.451-5.941,14.46-3.917,3.967-8.654,5.963-14.203,6.007v.005h-.096c-.029,0-.056.004-.086.004-.029,0-.0569-.004-.086-.004h-11.394c-1.637,0-2.969,1.293-2.969,2.884,0,1.59,1.332,2.884,2.969,2.884h27.524v5.786h-27.524c-4.828,0-8.756-3.889-8.756-8.67,0-4,2.763-7.342,6.487-8.3391-.198-.189-.404-.3589-.599-.5569-3.935-4.009-5.903-8.829-5.903-14.46s1.968-10.435,5.903-14.422c3.935-3.985,8.717-5.978,14.348-5.978,2.229,0,4.321.327,6.288.956ZM161.1764,22.1198c-2.791-2.839-6.178-4.259-10.163-4.259s-7.36,1.42-10.125,4.259c-2.765,2.84-4.1479,6.277-4.1479,10.312,0,4.086,1.383,7.536,4.1479,10.351,2.765,2.814,6.139,4.221,10.125,4.221,4.036,0,7.435-1.419,10.201-4.259,2.765-2.839,4.147-6.278,4.147-10.313s-1.395-7.472-4.185-10.312ZM298.3453,19.9376v32.372h6.351v-30.865c0-1.712,1.388-3.1,3.1-3.1h13.116v-5.64h-15.334c-3.995,0-7.233,3.238-7.233,7.233ZM14.423,43.7739l.075-25.5389h10.786v-5.53h-10.786V.001h-6.277v12.704H0v5.53h8.221l-.075,26.611c0,4.296,2.227,7.464,7.253,7.464h9.96v-6.128h-8.542c-1.211,0-2.394-.691-2.394-2.408ZM51.906,12.0317c-3.09,0-5.805.6981-8.146,2.093-2.342,1.395-4.16,3.188-5.455,5.381V.0007h-6.352v52.309h6.352v-20.252c0-4.084,1.17-7.459,3.513-10.125,2.341-2.6639,5.33-3.9969,8.967-3.9969,3.237,0,5.965,1.082,8.182,3.25,2.216,2.167,3.326,5.194,3.326,9.079v22.045h6.3521v-23.987c0-4.933-1.644-8.881-4.932-11.845-3.289-2.964-7.225-4.446-11.807-4.446ZM113.3576,29.5937c.348,1.942.374,3.661.074,5.155h-33.926c.348,3.687,1.843,6.677,4.4839,8.968,2.64,2.292,5.803,3.436,9.491,3.436,2.541,0,4.931-.57,7.174-1.718,2.241-1.145,4.059-2.69,5.454-4.633l5.754,1.345c-1.594,3.24-4.098,5.842-7.51,7.809-3.413,1.969-7.037,2.952-10.872,2.952-5.68,0-10.488-2.005-14.423-6.016-3.936-4.009-5.9041-8.829-5.9041-14.46,0-5.678,1.981-10.499,5.941-14.459,3.961-3.96,8.756-5.941,14.386-5.941,5.031,0,9.427,1.6819,13.189,5.0439,3.761,3.3621,5.989,7.536,6.688,12.518ZM107.1546,29.7427c-.448-3.388-1.955-6.2401-4.52-8.557-2.567-2.317-5.643-3.475-9.229-3.475-3.637,0-6.763,1.158-9.379,3.475-2.6151,2.317-4.122,5.169-4.521,8.557h27.649Z" fill="currentColor"/> 1129</svg> </a> 1130 <nav class="siteHeader-nav"> 1131 <ul class="superMenu"> <li><a class="" href="/properties-for-lease">Properties</a></li> 1132 <li><a class="hasChildren" href="/landlords">Landlords</a></li> 1133 <li><a class="hasChildren" href="/tenant-information">Tenants</a></li> 1134 <li><a class="" href="/moore-park-gardens">Moore Park Gardens</a></li> 1135 <li><a class="" href="/insights">Insights</a></li> 1136 <li><a class="hasChildren" data-mutex-trigger="#menu-about-us" href="/about-us">About</a></li> 1137 <li><a class="" href="/contact-us">Contact Us</a></li> 1138 </ul> 1139 <button class="siteHeader-burgerMenu" data-class-toggle="active" data-class-toggle-target="#sidenav-main"> 1140 <small>Menu </small><span title="menu" class="siteHeader-burgerMenu-icon"><i class="sd">≡</i></span> 1141 </button> 1142 </nav> 1143 <div class="superMenuPanelContent"> <div class="superMenuPanel" id="menu-about-us"> <div data-mutex-content="" class="bg-none"> <div class="superMenuPanel-subnav"> <h2>About</h2> <auto-grid gap="var(--cwh)" colwidth="240px" maxcols="3"><div class="superMenu-desclink"> <a target="" href="/our-difference">Our Difference</a> <div class="muted">The difference is focus. A boutique Sydney real estate agency specialising in property management and leasing, with a median 7 days to lease and a 4.9 rating.</div> <p><span class="btn btn-sml">Learn More</span></p> </div> <div class="superMenu-desclink"> <a target="" href="/team-profiles">Our Team</a> <div class="muted">Meet the people behind The Gallery. An onsite specialist team combining experience, care and deep knowledge of Sydney from our base at Moore Park Gardens.</div> <p><span class="btn btn-sml">Learn More</span></p> </div> <div class="superMenu-desclink"> <a target="" href="/testimonials">Testimonials</a> <div class="muted">Hear from landlords and tenants. See why so many trust The Gallery for reliable, personal and professional management.</div> <p><span class="btn btn-sml">Learn More</span></p> </div> </auto-grid> </div> </div> </div> <div class="superMenuPanel" id="menu-MPG"> <div data-mutex-content="" class="bg-none"> <div class="superMenuPanel-subnav"> <h2>MPG</h2> <auto-grid gap="var(--cwh)" colwidth="240px" maxcols="3"></auto-grid> </div> </div> </div> </div> </header> 1144 1145 <main class="siteMain"> 1146 1147 <div class="user-content"> 1148 <div class="pushblock bg-cover" data-bg="image-dark" data-bgwidth="full" data-halign="left" data-minheight="full" data-vpadding="generous" data-width="extranarrow" style=""><video loop="" muted="" preload="metadata" autoplay="" playsinline="" class="data-bg-src-mp4"><source type="video/mp4" src="/_files/video/tgre-video-homepage-2.mp4"></video> 1149<div class="pushblock-flex"> 1150<div class="pushblock-inner"> 1151<div class="pushspacer" data-size="standard" role="presentation">Â </div> 1152<div class="pushspacer" data-size="standard" role="presentation">Â </div> 1153<h1 class="super"><big>Property management <span class="tg-hero-ul tg-wo">specialists.</span></big></h1> 1154<p>Sydney's boutique real estate agency for property management and leasing. Exceptional care for your property and your tenants.</p> 1155<div class="pushspacer" data-size="xtight" role="presentation">Â </div> 1156<div class="tgre-ps-strip tgre-ps-strip-hero">
1156<a aria-label="Watch how renting your property works" class="tgre-ps-trigger" data-tgre-story="lease" href="/owner-guide"><span class="tgre-ps-ring"><span class="tgre-ps-ring-inner"><img alt="The Gallery" src="/_files/logos/tgre-icon-rgb-red.svg" decoding="async" loading="lazy"></span></span> <span class="tgre-ps-trigger-label">Rent your property<span class="tgre-ps-trigger-hint">Tap to watch</span></span> </a> <a aria-label="Watch how switching agents works" class="tgre-ps-trigger" data-tgre-story="switch" href="/switch-to-the-gallery"> <span class="tgre-ps-ring"><span class="tgre-ps-ring-inner"><img alt="The Gallery" src="/_files/logos/tgre-icon-rgb-red.svg" decoding="async" loading="lazy"></span></span> <span class="tgre-ps-trigger-label">Switching agents<span class="tgre-ps-trigger-hint">Tap to watch</span></span> </a></div> 1157</div> 1158</div> 1159</div> 1160<!-- ============ SECTION: HERO — END ============ --><!-- ============ SECTION: 01 FOCUS (split statement) — START ============ --> 1161<div class="pushblock" data-bg="bg-none" data-bg-src="" data-bgwidth="full" data-halign="center" data-minheight="none" data-vpadding="generous" data-width="default" style=""> 1162<div class="pushblock-flex"> 1163<div class="pushblock-inner"> 1164<p><span class="tgre-ed-marker">Focus</span></p> 1165<div class="pushsplit-wrap" data-split-ratio="1_1" data-valign="start"> 1166<div class="pushsplit "> 1167<div class="pushsplit-first"> 1168<h2>Property management is all we do. <em>So we do it <span class="tg-circ tg-wo">better</span>.</em></h2> 1169</div> 1170<div class="pushsplit-last"> 1171<p>At The Gallery, property management is never the side business. No sales campaigns pulling focus, no juggled priorities.</p> 1172<p>We're a boutique real estate agency managing residential investment properties across the inner city with precision, pride and personal attention.</p> 1173<div class="pushspacer" data-size="tight" role="presentation">Â </div> 1174<div class="pushgrid " data-bgcolor="bg-auto" data-cellcount="2" data-columns="2" data-valign="top"> 1175<div class="grid grid-1 grid-sml-2"> 1176<div> 1177<div class="pushbutton-wrap"><a class="pushbutton " data-halign="stretch" href="/landlords">Landlord services</a></div> 1178</div> 1179<div> 1180<div class="pushbutton-wrap"><a class="pushbutton " data-halign="stretch" href="/landlordonenquiry">Landlord enquiry</a></div> 1181</div> 1182</div> 1183</div> 1184</div> 1185</div> 1186</div> 1187</div> 1188</div> 1189</div> 1190<!-- ============ SECTION: 01 FOCUS — END ============ --><!-- ============ SECTION: AWARD-WINNING (part of the dark band) — START ============ --> 1191<div class="pushblock" data-bg="bg-dark" data-bg-src="" data-bgwidth="full" data-halign="left" data-minheight="none" data-vpadding="generous" data-width="default" style=""> 1192<div class="pushblock-flex"> 1193<div class="pushblock-inner"> 1194<h2><em class="tg-ul tg-wo">Award-winning</em> property management.</h2> 1195<p>Recognised in 2026 for the agency we've built and the way we work.</p> 1196<div class="pushspacer" data-size="xtight" role="presentation">Â </div> 1197<div class="pushgrid " data-bgcolor="bg-auto" data-cellcount="3" data-columns="3" data-valign="top"> 1198<div class="grid grid-1 grid-sml-2 grid-med-3"> 1199<div> 1200<div class="image" style="border-radius:16px;overflow:hidden;"><a href="/post/the-gallery-real-estate-named-2026-outstanding-real-estate-agency" style="display:block;text-decoration:none;"><img alt="The Gallery Real Estate, 2026 Outstanding Real Estate Agency" class="fixed-aspect img-cover widescreen" data-src="/imagecache/fitwithin/[[longside]]x[[longside]]/_files/monthly-update/2c1888f0-414f-4b7e-9739-81dc1d52e68f.jpg" loading="lazy" src="/imagecache/fitwithin/1280x1280/_files/monthly-update/2c1888f0-414f-4b7e-9739-81dc1d52e68f.jpg" decoding="async"></a></div> 1201<div class="pushspacer" data-size="xtight" role="presentation">Â </div> 1202<p><a href="/post/the-gallery-real-estate-named-2026-outstanding-real-estate-agency" style="display:block;text-decoration:none;"><strong>2026 Outstanding Real Estate Agency</strong><br> 1203The Gallery Real Estate</a></p> 1204</div> 1205<div> 1206<div class="image" style="border-radius:16px;overflow:hidden;"><a href="/post/thomas-tamine-named-2026-young-small-business-champion-entrepreneur" style="display:block;text-decoration:none;"><img alt="Thomas Tamine, 2026 Young Business Champion Entrepreneur of the Year" class="fixed-aspect img-cover widescreen" data-src="/imagecache/fitwithin/[[longside]]x[[longside]]/_files/monthly-update/1a09d653-211c-49ff-80dd-e555204c6370-1-201-a.jpg" loading="lazy" src="/imagecache/fitwithin/1280x1280/_files/monthly-update/1a09d653-211c-49ff-80dd-e555204c6370-1-201-a.jpg" decoding="async"></a></div> 1207<div class="pushspacer" data-size="xtight" role="presentation">Â </div> 1208<p><a href="/post/thomas-tamine-named-2026-young-small-business-champion-entrepreneur" style="display:block;text-decoration:none;"><strong>2026 Young Business Champion</strong><br></a><a href="https://www.thegalleryrealestate.com.au/team/thomas-tamine">Thomas Tamine</a>, Entrepreneur of the Year</p> 1209</div> 1210<div> 1211<div class="image" style="border-radius:16px;overflow:hidden;"><a href="/post/the-gallery-real-estate-wins-gold-2026-sydney-design-awards" style="display:block;text-decoration:none;"><img alt="The Gallery Real Estate, Gold at the 2026 Sydney Design Awards for identity and branding" class="fixed-aspect img-cover widescreen" loading="lazy" src="https://tgre-social-assets.netlify.app/blog/2026-09-09-sydney-design-awards-gold/gold-mark.png" decoding="async"></a></div> 1212<div class="pushspacer" data-size="xtight" role="presentation">Â </div> 1213<p><a href="/post/the-gallery-real-estate-wins-gold-2026-sydney-design-awards" style="display:block;text-decoration:none;"><strong>2026 Sydney Design Awards, Gold</strong><br> 1214The Gallery Real Estate, identity and branding</a></p> 1215</div> 1216</div> 1217</div> 1218</div> 1219</div> 1220</div> 1221<!-- ============ SECTION: AWARD-WINNING — END ============ --><!-- ============ SECTION: 02 PROOF / THE NUMBERS — START ============ --> 1222<div class="pushblock" data-bg="bg-dark" data-bg-src="" data-bgwidth="full" data-halign="left" data-minheight="none" data-vpadding="generous" data-width="default" style=""> 1223<div class="pushblock-flex"> 1224<div class="pushblock-inner"> 1225<p><span class="tgre-ed-marker">Proof</span></p> 1226<h2>Our <em>numbers</em>, <span class="tg-tick tg-wo" style="background-image:linear-gradient(90deg,#fff,#fff); color:#ffffff">simply</span></h2> 1227<div class="tgre-ed-stats"> 1228<div class="tgre-ed-stat key"> 1229<div class="fig" style="font-size:clamp(40px,5.5vw,78px);line-height:1.1;">7</div> 1230<div class="cap"><strong>Days median to lease.</strong> The market median is 20.</div> 1231</div> 1232<div class="tgre-ed-stat"> 1233<div class="fig" style="font-size:clamp(40px,5.5vw,78px);line-height:1.1;">3Ã</div> 1234<div class="cap"><strong>The enquiries</strong> versus the market average.</div> 1235</div> 1236<div class="tgre-ed-stat"> 1237<div class="fig" style="font-size:clamp(40px,5.5vw,78px);line-height:1.1;">6Ã</div> 1238<div class="cap"><strong>The applications</strong> versus the market average.</div> 1239</div> 1240<div class="tgre-ed-stat"> 1241<div class="fig" style="font-size:clamp(40px,5.5vw,78px);line-height:1.1;">$500M+</div> 1242<div class="cap"><strong>Assets under management.</strong></div> 1243</div> 1244</div> 1245</div> 1246</div> 1247</div> 1248<!-- ============ SECTION: 02 PROOF / THE NUMBERS — END ============ --><!-- ============ SECTION: THE CRAFT TRIO (03 craft / 04 tenants / 05 onsite) — START Three photo sections inside ONE wrapper. To delete one: remove its inner sub-banner chunk plus the spacer line above it. Keep the outer wrapper (first 3 opening divs / last 3 closing divs). ============ --> 1249<div class="pushblock" data-bg="bg-none" data-bg-src="" data-bgwidth="full" data-halign="center" data-minheight="none" data-vpadding="generous" data-width="default" style=""> 1250<div class="pushblock-flex"> 1251<div class="pushblock-inner"><!-- ---- 03 THE CRAFT (image left) — start ---- --> 1252<div class="offset-pair-wrap "> 1253<div class="offset-pair left"> 1254<div class="image" style="border-radius:16px;overflow:hidden;"><img class="fixed-aspect fourfifths img-cover" data-src="/imagecache/fitwithin/[[longside]]x[[longside]]/_files/tgre-shoot-day/76e113cd-bdcc-4ba3-b5b9-ef309ea8b87a-1-201-a.jpg" loading="lazy" src="/imagecache/fitwithin/1280x1280/_files/tgre-shoot-day/76e113cd-bdcc-4ba3-b5b9-ef309ea8b87a-1-201-a.jpg" style="" decoding="async" alt="" role="presentation"></div>
1255<div class="content-container bg-auto"> 1256<div class="user-content"> 1257<p><span class="tgre-ed-marker">The craft</span></p> 1258<h2><span class="tg-ul tg-wo">Built for</span> property management. <br> 1259Refined to <span class="tg-tick tg-wo">perfection.</span></h2> 1260<p>Property management is our entire focus. We've built a specialist service designed to make owning property easier, more rewarding and more human. From finding the right tenant to delivering a seamless, tech-enabled experience, we manage with precision, pride and personal care.</p> 1261<div class="pushgrid " data-bgcolor="bg-auto" data-cellcount="2" data-columns="2" data-valign="top"> 1262<div class="grid grid-1 grid-sml-2"> 1263<div> 1264<div class="pushbutton-wrap"><a class="pushbutton " data-halign="stretch" href="/landlords">Learn more</a></div> 1265</div> 1266<div> 1267<div class="pushbutton-wrap"><a class="pushbutton " data-halign="stretch" href="/landlordonenquiry">Landlord enquiry</a></div> 1268</div> 1269</div> 1270</div> 1271</div> 1272</div> 1273</div> 1274</div> 1275<!-- ---- 03 THE CRAFT — end ---- --> 1276<div class="pushspacer" data-size="standard" role="presentation"> </div> 1277<!-- ---- 04 FOR TENANTS (image right) — start ---- --> 1278<div class="offset-pair-wrap "> 1279<div class="offset-pair right"> 1280<div class="image" style="border-radius:16px;overflow:hidden;"><img class="fixed-aspect fourfifths img-cover" data-src="/imagecache/fitwithin/[[longside]]x[[longside]]/_files/tgre-shoot-day/984e9f9c-4c74-4c0f-b23d-8dca824e50ab.jpg" loading="lazy" src="/imagecache/fitwithin/1280x1280/_files/tgre-shoot-day/984e9f9c-4c74-4c0f-b23d-8dca824e50ab.jpg" style="" decoding="async" alt="" role="presentation"></div> 1281<div class="content-container bg-auto"> 1282<div class="user-content"> 1283<p><span class="tgre-ed-marker">For tenants</span></p> 1284<h2><span class="tg-ul2 tg-wo">Trusted</span> by owners. <br> 1285Respected by tenants.</h2> 1286<p>At The Gallery, tenants aren't an afterthought. They're part of our promise. We treat tenants like people, not problems, with warm communication, quick responses and a process that just works. Because we're not just managing property. We're looking after someone's home.</p> 1287<div class="pushgrid " data-bgcolor="bg-auto" data-cellcount="2" data-columns="2" data-valign="top"> 1288<div class="grid grid-1 grid-sml-2"> 1289<div> 1290<div class="pushbutton-wrap"><a class="pushbutton " data-halign="stretch" href="/tenant-information">Learn more</a></div> 1291</div> 1292<div> 1293<div class="pushbutton-wrap"><a class="pushbutton " data-halign="stretch" href="/properties-for-lease">Properties for lease</a></div> 1294</div> 1295</div> 1296</div> 1297</div> 1298</div> 1299</div> 1300</div> 1301<!-- ---- 04 FOR TENANTS — end ---- --> 1302<div class="pushspacer" data-size="standard" role="presentation"> </div> 1303<!-- ---- 05 ONSITE ADVANTAGE / MPG (image left) — start ---- --> 1304<div class="offset-pair-wrap "> 1305<div class="offset-pair left"> 1306<div class="image" style="border-radius:16px;overflow:hidden;"><img alt="Moore Park Gardens onsite specialists" class="fixed-aspect fourfifths img-cover" data-src="/imagecache/fitwithin/[[longside]]x[[longside]]/_files/tgre-shoot-day/tgre-studio-julianrinaldi-171.jpg" loading="lazy" src="/imagecache/fitwithin/1280x1280/_files/tgre-shoot-day/tgre-studio-julianrinaldi-171.jpg" style="" decoding="async"></div> 1307<div class="content-container bg-auto"> 1308<div class="user-content"> 1309<p><span class="tgre-ed-marker">Advantage</span></p> 1310<h2>Moore Park <span class="tg-hn-wrap"><span class="tg-hn tg-wo" style="left:52%; top:-1.5em; width:4.77em"></span>Gardens</span></h2> 1311<p>We live and work inside the Moore Park Gardens community at <strong>780 Bourke Street</strong>. Faster support, building-specific know-how and calm, clear communication for owners and residents.</p> 1312<div class="pushgrid " data-bgcolor="bg-auto" data-cellcount="2" data-columns="2" data-valign="top"> 1313<div class="grid grid-1 grid-sml-2"> 1314<div> 1315<div class="pushbutton-wrap"><a class="pushbutton " data-halign="stretch" href="/moore-park-gardens">Explore Moore Park Gardens</a></div> 1316</div> 1317<div> 1318<div class="pushbutton-wrap"><a class="pushbutton " data-halign="stretch" href="/landlordonenquiry">Landlord enquiry</a></div> 1319</div> 1320</div> 1321</div> 1322</div> 1323</div> 1324</div> 1325</div> 1326<!-- ---- 05 ONSITE ADVANTAGE — end ---- --></div> 1327</div> 1328</div> 1329<!-- ============ SECTION: THE CRAFT TRIO — END ============ --><!-- ============ SECTION: 06 LATRELL — START ============ --> 1330<div class="pushblock" data-bg="bg-dark" data-bg-src="" data-bgwidth="full" data-halign="center" data-minheight="none" data-vpadding="generous" data-width="default" style=""> 1331<div class="pushblock-flex"> 1332<div class="pushblock-inner"> 1333<div class="pushsplit-wrap" data-split-ratio="1_1" data-valign="center"> 1334<div class="pushsplit "> 1335<div class="pushsplit-first"> 1336<p><span class="tgre-ed-marker">In his words</span></p> 1337<h2>A word from <em>Latrell.</em></h2> 1338<p>A professional rugby league player for the South Sydney Rabbitohs and a proud Gallery landlord. Here's what working with us looks like, in his words.<
1338/p> 1339</div> 1340<div class="pushsplit-last"> 1341<div class="push-video"> 1342<div class="video" style="border-radius:16px;overflow:hidden;"> 1343<div class="fixed-aspect widescreen"><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="315" loading="lazy" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/D_ZMkD6t_DM?si=rnJ4xyPKaijA9_y2&modestbranding=1&rel=0" title="Latrell Mitchell, A word from Latrell" width="560"></iframe></div> 1344</div> 1345</div> 1346</div> 1347</div> 1348</div> 1349</div> 1350</div> 1351</div> 1352<!-- ============ SECTION: 06 LATRELL — END ============ --><!-- ============ SECTION: RENTAL REPORT BAND — START ============ --> 1353<div class="pushblock" data-bg="bg-none" data-bg-src="" data-bgwidth="full" data-halign="center" data-minheight="none" data-vpadding="tight" data-width="default" style=""> 1354<div class="pushblock-flex"> 1355<div class="pushblock-inner"> 1356<div class="tgre-ed-report"> 1357<div class="lead"> 1358<h2>What could your property <em>rent for?</em></h2> 1359<p>An instant, data-backed estimate of your rental value with a snapshot of running costs and returns. Ready in minutes.</p> 1360</div> 1361<div class="pushbutton-wrap"><a class="pushbutton " data-halign="left" href="/rental-report" target="_blank">Get my instant rental report</a></div> 1362</div> 1363</div> 1364</div> 1365</div> 1366<!-- ============ SECTION: RENTAL REPORT BAND — END ============ --><!-- ============ SECTION: REVIEWS (static band) — START ============ --> 1367<div class="pushblock" data-bg="bg-light" data-bg-src="" data-bgwidth="full" data-halign="center" data-minheight="none" data-vpadding="generous" data-width="default" style=""> 1368<div class="pushblock-flex"> 1369<div class="pushblock-inner"> 1370<div class="tgre-rev"><span aria-hidden="true" class="tg-wo tgre-rev-qmark"></span> 1371<p aria-label="Rated 4.9 out of 5" class="tgre-rev-stars tg-wo">Â </p> 1372<div class="tgre-rev-rot"> 1373<div class="tgre-rev-slide"> 1374<h2>"Excellent <em>personalised service.</em>"</h2> 1375<p class="tgre-rev-name">Garry Deverell, Gallery owner</p> 1376</div> 1377<div class="tgre-rev-slide"> 1378<h2>"Amazing experience with Thomas at <em>Gallery Real Estate!</em>"</h2> 1379<p class="tgre-rev-name">Adarsha Sigdel</p> 1380</div> 1381<div class="tgre-rev-slide"> 1382<h2>"My experience with The Gallery, as an owner, has been <em>very positive.</em>"</h2> 1383<p class="tgre-rev-name">Juliet Roberts, Gallery owner</p> 1384</div> 1385</div> 1386</div> 1387</div> 1388</div> 1389</div> 1390<!-- ============ SECTION: REVIEWS — END ============ --><!-- ============ SECTION: FIND YOUR NEXT HOME (image band) — START ============ --> 1391<div class="pushblock bg-cover" data-bg="image-dark" data-bg-src="/imagecache/fitwithin/[[vmax]]x[[vmax]]/_files/tgre-shoot-day/76e113cd-bdcc-4ba3-b5b9-ef309ea8b87a-1-201-a.jpg" data-bgwidth="full" data-halign="left" data-minheight="half" data-vpadding="generous" data-width="default" style=""> 1392<div class="pushblock-flex"> 1393<div class="pushblock-inner"> 1394<h2>Find your <em class="tg-ul tg-wo">next home.</em></h2> 1395<p>Considered homes across inner Sydney, managed with care. See what's available now.</p> 1396<div class="pushspacer" data-size="xtight" role="presentation">Â </div> 1397<div class="pushbutton-wrap"><a class="pushbutton " data-halign="left" href="/properties-for-lease">Properties for lease</a></div> 1398</div> 1399</div> 1400</div> 1401<!-- ============ SECTION: FIND YOUR NEXT HOME — END ============ --><!-- ============ SECTION: 08 THE INVITATION (close) — START ============ --> 1402<div class="pushblock" data-bg="bg-dark" data-bg-src="" data-bgwidth="full" data-halign="center" data-minheight="half" data-vpadding="generous" data-width="default" style=""> 1403<div class="pushblock-flex"> 1404<div class="pushblock-inner"> 1405<div class="tgre-ed-close"><span class="tg-hw-marker tg-wo"></span> 1406<h2 class="text-center">Let's talk about <em class="tg-ul tg-wo">your property.</em></h2> 1407<p class="text-center">Twenty minutes with our team. No pitch, no pressure. A clear view of where your property sits and what makes sense from here.</p> 1408<div class="tgre-ed-ctas"> 1409<div class="pushbutton-wrap"><a class="pushbutton " data-halign="left" href="/Bookacall">Book a call with our team</a></div> 1410<div class="pushbutton-wrap"><a class="pushbutton " data-halign="left" href="/landlordonenquiry" style="background:#d46144;border-color:#d46144;color:#fff;">Landlord enquiry</a></div> 1411</div> 1412</div> 1413</div> 1414</div> 1415</div> 1416<!-- ============ SECTION: 08 THE INVITATION — END ============ --> </div> 1417<!-- 1418<div class="splash"> 1419 1420 1421 1422</div> --> 1423 1424 1425</main> 1426 1427<footer class="siteFooter bg-none"> 1428 1429 <div class="siteFooter-nav"> 1430 <div class="tgre-foot-cta"> 1431<div class="tgre-foot-cta-main"> 1432<div class="pushspacer" data-size="xtight" role="presentation">Â </div> 1433<h2>What could your property <em><span class="tg-arrow tg-wo">rent for?</span></em></h2> 1434<div class="pushbutton-wrap"><a class="pushbutton " data-halign="left" href="/rental-report" style="background:#d46144;border-color:#d46144;color:#fff;">Get my instant report</a></div> 1435</div> 1436</div> 1437<div class="pushspacer" data-size="xtight" role="presentation">Â </div>
1438<div class="pushgrid " data-bgcolor="bg-auto" data-cellcount="5" data-columns="5" data-valign="top" data-widget="pushgrid2"> 1439<div class="grid grid-1 grid-sml-2 grid-med-5"> 1440<div> 1441<h3><a href="/properties-for-lease">Properties</a></h3> 1442<ul><li><a href="/properties-for-lease">For Lease</a></li> <li><a href="/leased-properties">Leased</a></li> <li><a href="/moore-park-gardens">Moore Park Gardens</a></li> <li><a href="/mpg-parcel-drop-off">MPG Parcel Locator</a></li> <li><a href="/suburb-profiles">Suburb Profiles</a></li> 1443</ul></div> 1444<div> 1445<h3><a href="/landlords">Landlords</a></h3> 1446<ul><li class="tgre-foot-hot"><a href="/rental-report">Free Rental Report</a></li> <li><a href="/owner-guide">Owner Guide</a></li> <li><a href="/how-we-rent-your-home">How We Rent Your Home</a></li> <li><a href="https://app.propertyme.com/" target="_blank">Owner Portal</a></li> <li><a href="/request-a-rental-appraisal">Request an Appraisal</a></li> <li><a href="/switch-to-the-gallery">Switch to The Gallery</a></li> <li><a href="/landlordonenquiry">Landlord Enquiry</a></li> 1447</ul></div> 1448<div> 1449<h3><a href="/tenant-information">Tenants</a></h3> 1450<ul><li><a href="/tenant-information">Tenant Services</a></li> <li><a href="/moore-park-gardens-rental-enquiry">Rent in MPG</a></li> <li><a href="/tenant-enquiry">Tenant Enquiry</a></li> <li><a href="/tenant-portal">Tenant Portal</a></li> <li><a href="/emergency-contacts">Emergency Contacts</a></li> 1451</ul></div> 1452<div> 1453<h3><a href="/about-us">About</a></h3> 1454<ul><li><a href="/about-us">About Us</a></li> <li><a href="/our-story">Our Story</a></li> <li><a href="/team-profiles">Team</a></li> <li><a href="/our-difference">Our Difference</a></li> <li><a href="/developers">Developers</a></li> <li><a href="/testimonials">Testimonials</a></li> <li><a href="/insights">Insights</a></li> 1455</ul></div> 1456<div> 1457<h3><a href="/contact-us">Contact</a></h3> 1458<ul><li><a href="/contact-us">Contact Us</a></li> <li><a href="/Bookacall">Book a Call</a></li> <li><a href="/Privacypolicy">Privacy Policy</a></li> 1459</ul></div> 1460</div> 1461</div> 1462<div aria-label="Renting your property with The Gallery" aria-modal="true" class="tgre-ps-overlay" id="tgre-ps-lease" role="dialog"> 1463<div class="tgre-ps-card"> 1464<div class="tgre-ps-bars">Â </div> 1465<div class="tgre-ps-head"><span class="tgre-ps-head-avatar"><span><img alt="" src="/_files/logos/tgre-icon-rgb-red.svg" decoding="async" loading="lazy"></span></span> <span class="tgre-ps-head-name">thegalleryrealestate<small>Rent your property</small></span>Ã</div> 1466<div class="tgre-ps-slide"> 1467<p class="tgre-ps-kicker">Day 1</p> 1468<h3>A plan for <em>your property.</em></h3> 1469<p>We chat about your situation and what you want from the property. Pricing, presentation and strategy agreed before anything is signed.</p> 1470</div> 1471<div class="tgre-ps-slide"> 1472<p class="tgre-ps-kicker">Days 2 to 5</p> 1473<h3>Photographed, listed, <em>live.</em></h3> 1474<p>Professional photography and considered copy, live on realestate.com.au and Domain within days.</p> 1475<p class="tgre-ps-stat"><strong>3x</strong> the enquiry of the market average</p> 1476</div> 1477<div class="tgre-ps-slide"> 1478<p class="tgre-ps-kicker">The first weekend</p> 1479<h3>Open homes, <em>hosted properly.</em></h3> 1480<p>Open homes start the first weekend. Every enquiry is followed up and you get a report after each one.</p> 1481</div> 1482<div class="tgre-ps-slide"> 1483<p class="tgre-ps-kicker">Week 1 to 2</p> 1484<h3>The right tenant, <em>not the first tenant.</em></h3> 1485<p>Every application screened. Income, rental history and references verified, then you get a clear recommendation. The decision is always yours.</p> 1486<p class="tgre-ps-stat"><strong>6x</strong> the market average in applications</p> 1487</div> 1488<div class="tgre-ps-slide"> 1489<p class="tgre-ps-kicker">Day 7, our median</p> 1490<h3><em>Leased.</em></h3> 1491<p>You approve the application, the lease is signed digitally and the deposit is paid.</p> 1492<p class="tgre-ps-stat"><strong>7 days</strong> median time on market</p> 1493</div> 1494<div class="tgre-ps-slide"> 1495<p class="tgre-ps-kicker">About 2 weeks to move-in</p> 1496<h3>Move-in, <em>locked in.</em></h3> 1497<p>Most tenants move in around two weeks after approval. Bond lodged with Rental Bonds Online and every date confirmed in writing.</p> 1498</div> 1499<div class="tgre-ps-slide"> 1500<p class="tgre-ps-kicker">Move-in day</p> 1501<h3>Everything ready for <em>your tenant.</em></h3> 1502<p>A detailed condition report completed and keys handed over. The tenancy
1502starts exactly as it should.</p> 1503</div> 1504<div class="tgre-ps-slide"> 1505<p class="tgre-ps-kicker">End of month 1</p> 1506<h3>Your first <em>statement.</em></h3> 1507<p>Rent flows from day one. Your monthly statement itemises every dollar in and out, straight to your inbox.</p> 1508</div> 1509<div class="tgre-ps-slide"> 1510<p class="tgre-ps-kicker">Within 3 months</p> 1511<h3>Your first <em>routine inspection.</em></h3> 1512<p>We walk through the property and send you a full report with a 3D virtual tour. You see exactly how your property is being kept, from anywhere.</p> 1513</div> 1514<div class="tgre-ps-slide"> 1515<p class="tgre-ps-kicker">Every week after</p> 1516<h3>Managed like it's <em>our own.</em></h3> 1517<p>Rent monitored daily, routine inspections on schedule, maintenance handled fast and a clear statement every month. You always know where your property stands.</p> 1518</div> 1519<div class="tgre-ps-slide"> 1520<div class="tgre-ps-panel"> 1521<p class="tgre-ps-kicker">Ready when you are</p> 1522<h3>Start with a <em>conversation.</em></h3> 1523<p>A quick call with our team about your property, your timing and your number. No obligation.</p> 1524<div class="tgre-ps-cta"><a class="tgre-ps-btn" href="/Bookacall">Book a call with our team</a> <a class="tgre-ps-link" href="/rental-report">Or get my instant rental report</a></div> 1525</div> 1526</div> 1527</div> 1528</div> 1529<div aria-label="Switching agents to The Gallery" aria-modal="true" class="tgre-ps-overlay" id="tgre-ps-switch" role="dialog"> 1530<div class="tgre-ps-card"> 1531<div class="tgre-ps-bars"> </div> 1532<div class="tgre-ps-head"><span class="tgre-ps-head-avatar"><span><img alt="" src="/_files/logos/tgre-icon-rgb-red.svg" decoding="async" loading="lazy"></span></span> <span class="tgre-ps-head-name">thegalleryrealestate<small>Switching agents</small></span>Ã</div> 1533<div class="tgre-ps-slide"> 1534<p class="tgre-ps-kicker">Step 1 · Five minutes</p> 1535<h3>Tell us what's <em>not working.</em></h3> 1536<p>A quick call or the form. We review your current agreement, check the notice period and map the handover before you commit to anything.</p> 1537</div> 1538<div class="tgre-ps-slide"> 1539<p class="tgre-ps-kicker">Step 2 · We take it from here</p> 1540<h3>You never chase <em>anyone.</em></h3> 1541<p>We give notice to your current agent and coordinate the whole changeover. Your tenant keeps their home and the rent never skips a beat.</p> 1542</div> 1543<div class="tgre-ps-slide"> 1544<p class="tgre-ps-kicker">Step 3 · The handover</p> 1545<h3>Everything transfers <em>to us.</em></h3> 1546<p>Keys, files, tenancy records and bond all move across to The Gallery. Nothing gets lost and you are never the go-between.</p> 1547<p class="tgre-ps-stat"><strong>30 days</strong> or less for most handovers, set by your agreement's notice period</p> 1548</div> 1549<div class="tgre-ps-slide"> 1550<p class="tgre-ps-kicker">Step 4 · No missed rent</p> 1551<h3>Payments continue <em>seamlessly.</em></h3> 1552<p>Rent redirects to us from handover day and your payment schedule stays exactly the same. Not a dollar out of place.</p> 1553</div> 1554<div class="tgre-ps-slide"> 1555<p class="tgre-ps-kicker">Step 5 · Your first month</p> 1556<h3>We check everything and <em>meet your tenant.</em></h3> 1557<p>Rent, compliance, maintenance history and lease dates reviewed line by line. We inspect the property and introduce ourselves to your tenant within the first month.</p> 1558</div> 1559<div class="tgre-ps-slide"> 1560<p class="tgre-ps-kicker">Step 6 · From then on</p> 1561<h3>Managed <em>properly.</em></h3> 1562<p>Rent monitored daily, routine inspections on schedule, maintenance handled fast and a clear statement every month. You feel the difference quickly.</p> 1563</div> 1564<div class="tgre-ps-slide"> 1565<div class="tgre-ps-panel"> 1566<p class="tgre-ps-kicker">Ready when you are</p> 1567<h3>Switching is easier <em>than you think.</em></h3> 1568<p>One call with our team and we handle the rest.</p> 1569<div class="tgre-ps-cta"><a class="tgre-ps-btn" href="/Bookacall">Book a call with our team</a> <a class="tgre-ps-link" href="/rental-report">Or get my instant rental report</a></div> 1570</div> 1571</div> 1572</div> 1573</div> </div> 1574 1575 <div class="siteFooter-address"> 1576 780 Bourke Street<br> Redfern 2016<br> 1577 02 8999 3341 </div> 1578 1579 <div class="siteFooter-footertext"> 1580 <p> </div> 1581 1582 <div class="siteFooter-logo"> 1583 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 115.83 112.281"> 1584 <path d="M115.83,55.646v56.635h-14.624v-42.011h-41.861v-14.624h56.485ZM81.5359,23.199c6.387,4.371,11.207,10.314,14.457,17.821l16.981-4.371c-4.597-11.097-11.628-19.977-21.098-26.647C82.4039,3.337,71.6169,0,59.515,0c-16.476,0-30.515,5.883-42.112,17.651C5.802,29.419,0,43.599,0,60.184c0,3.536.319,6.939.843,10.257h17.573c-.704-3.264-1.1-6.668-1.1-10.257,0-12.214,4.008-22.5259,12.022-30.934,8.01-8.402,18.071-12.606,30.177-12.606,8.292,0,15.634,2.185,22.021,6.555Z" fill="currentColor"/> 1585</svg> </div> 1586 1587 <ul class="siteFooter-social"> 1588 <li><a target="_blank" href="https://www.facebook.com/thegalleryrealestate"><i class="soc">f</i></a></li> <li><a target="_blank" href="https://www.youtube.com/@thegalleryrealestate6269"><i class="soc">y</i></a></li> <li><a target="_blank" href="https://www.linkedin.com/company/the-gallery-real-estate"><i class="soc">l</i></a></li> <li><a target="_blank" href="https://www.instagram.com/thegalleryrealestate/"><i class="soc">i</i></a></li> </ul> 1589 1590 <div class="siteFooter-copyright">
1591 Copyright © 2026 The Gallery Real Estate Agency Pty Limited (ABN 99 643 017 074)<br> 1592 <a href="https://pushcreative.com.au/?utm_campaign=www.thegalleryrealestate.com.au&utm_source=website&utm_medium=referrer" target="_blank" rel="noreferrer noopener">Website by Push</a> 1593 </div> 1594 1595</footer> 1596 1597 1598 1599<aside class="sidenav-right" id="sidenav-main"> 1600 <i class="sd" title="Close Menu" data-class-cancel="active" data-class-cancel-target="#sidenav-main">×</i> 1601 <main> 1602 <ul class="collapse-menu"> <li depth="1" class=""> <a target="" href="/properties-for-lease">Properties</a> </li> <li depth="1" class="hasChildren "> <button class="collapse-toggle" aria-label="toggle"></button><a target="" href="/landlords">Landlords</a> <ul depth="2"> <li depth="2" class=""> <a target="" href="/owner-guide">Owner Guide</a> </li> <li depth="2" class=""> <a target="" href="/landlordonenquiry">New Landlord Enquiry</a> </li> <li depth="2" class=""> <a target="" href="/switch-to-the-gallery">Switch to The Gallery</a> </li> <li depth="2" class=""> <a target="" href="/request-a-rental-appraisal">Rental Appraisal</a> </li> <li depth="2" class=""> <a target="" href="/landlord-portal">Landlord Portal</a> </li> <li depth="2" class=""> <a target="" href="/what-makes-a-good-property-manager">What Makes a Good Property Manager?</a> </li> <li depth="2" class=""> <a target="" href="/Bookacall">Book a Call</a> </li> <li depth="2" class=""> <a target="" href="/property-management-fees">Property Management Fees</a> </li> </ul> </li> <li depth="1" class="hasChildren "> <button class="collapse-toggle" aria-label="toggle"></button><a target="" href="/tenant-information">Tenants</a> <ul depth="2"> <li depth="2" class=""> <a target="" href="/emergency-contacts">Emergency Contacts</a> </li> <li depth="2" class=""> <a target="" href="/tenant-portal">Tenant Portal</a> </li> <li depth="2" class=""> <a target="" href="/moore-park-gardens-rental-enquiry">Moore Park Gardens Rental Enquiry</a> </li> </ul> </li> <li depth="1" class=""> <a target="" href="/moore-park-gardens">Moore Park Gardens</a> </li> <li depth="1" class=""> <a target="" href="/insights">Insights</a> </li> <li depth="1" class="hasChildren "> <button class="collapse-toggle" aria-label="toggle"></button><a target="" href="/about-us">About</a> <ul depth="2"> <li depth="2" class=""> <a target="" href="/our-difference">Our Difference</a> </li> <li depth="2" class=""> <a target="" href="/team-profiles">Our Team</a> </li> <li depth="2" class=""> <a target="" href="/testimonials">Testimonials</a> </li> </ul> </li> <li depth="1" class=""> <a target="" href="/contact-us">Contact Us</a> </li> </ul> </main> 1603 <footer> 1604 <ul class="social text-center"> 1605 <li><a target="_blank" href="https://www.facebook.com/thegalleryrealestate"><i class="soc">f</i></a></li> <li><a target="_blank" href="https://www.youtube.com/@thegalleryrealestate6269"><i class="soc">y</i></a></li> <li><a target="_blank" href="https://www.linkedin.com/company/the-gallery-real-estate"><i class="soc">l</i></a></li> <li><a target="_blank" href="https://www.instagram.com/thegalleryrealestate/"><i class="soc">i</i></a></li> </ul> 1606 </footer> 1607</aside> 1608<div class="sidenav-overlay" data-class-cancel="active" data-class-cancel-target="[class*='sidenav-']"></div> 1609 1610 1611</div> 1612
1613<script type="application/ld+json">{"@context":"https:\/\/schema.org","@graph":[{"@context":"https:\/\/schema.org","@type":"WebSite","@id":"https:\/\/www.thegalleryrealestate.com.au\/#website","url":"https:\/\/www.thegalleryrealestate.com.au\/","name":"The Gallery Real Estate","description":"The Gallery Real Estate is a boutique real estate agency in Redfern specialising in property management and leasing across Inner Sydney. Our office is at 780 Bourke Street, Redfern.","inLanguage":"en-AU","publisher":{"@id":"https:\/\/www.thegalleryrealestate.com.au\/#org"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.thegalleryrealestate.com.au\/?qs={search_term_string}"},"query-input":"required name=search_term_string"}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.thegalleryrealestate.com.au\/#breadcrumbs","itemListElement":[{"@type":"ListItem","position":1,"item":"https:\/\/www.thegalleryrealestate.com.au\/","name":"The Gallery Real Estate"}]},{"@context":"https:\/\/schema.org","@type":"Organization","@id":"https:\/\/www.thegalleryrealestate.com.au\/#org","name":"The Gallery Real Estate","url":"https:\/\/www.thegalleryrealestate.com.au\/","sameAs":["https:\/\/www.facebook.com\/thegalleryrealestate","https:\/\/www.youtube.com\/@thegalleryrealestate6269","https:\/\/www.linkedin.com\/company\/the-gallery-real-estate","https:\/\/www.instagram.com\/thegalleryrealestate\/"],"logo":"https:\/\/www.thegalleryrealestate.com.au\/_files\/logos\/tgre-icon-rgb-red.svg"}]}</script>
1613 1614<aside id="asyncPanel" class="asyncPanel"> 1615 <div class="asyncPanel-content"> 1616 <async-include src=""></async-include> 1617 </div> 1618</aside> 1619 1620<!-- Start BODY End Includes --> 1621<!-- Google Tag Manager (noscript) --> 1622 1623<!-- TGRE Animated Counters -->
1624<script> 1625(function() { 1626 function animateCounters() { 1627 document.querySelectorAll('.tgre-counter').forEach(function(el) { 1628 if (el.dataset.animated) return; 1629 var rect = el.getBoundingClientRect(); 1630 if (rect.top > window.innerHeight || rect.bottom < 0) return; 1631 el.dataset.animated = 'true'; 1632 var target = parseFloat(el.dataset.target); 1633 var decimals = parseInt(el.dataset.decimals) || 0; 1634 var suffix = el.dataset.suffix || ''; 1635 var prefix = el.dataset.prefix || ''; 1636 var duration = 2000; 1637 var start = performance.now(); 1638 function step(now) { 1639 var elapsed = now - start; 1640 var progress = Math.min(elapsed / duration, 1); 1641 var eased = 1 - Math.pow(1 - progress, 3); 1642 var current = (target * eased).toFixed(decimals); 1643 el.textContent = prefix + current + suffix; 1644 if (progress < 1) requestAnimationFrame(step); 1645 } 1646 requestAnimationFrame(step); 1647 }); 1648 } 1649 window.addEventListener('scroll', animateCounters, { passive: true }); 1650 window.addEventListener('load', animateCounters); 1651})(); 1652</script>
vendor: 69 bytes, lines 1652-1653
1652 1653<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
1653GTM-WPQHJCP9
vendor: 85 bytes, lines 1653-1654
1653" 1654height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
1655<!-- End Google Tag Manager (noscript) --> 1656 1657<!-- TGRE YouTube Video Embeds -->
1658<script> 1659(function() { 1660 function embedVideo(el, id) { 1661 el.innerHTML = '<div style="position:relative;padding-bottom:56.25%;height:0;overflow:hidden;border-radius:12px;">' + 1662 '<iframe src="https://www.youtube.com/embed/' + id + '?modestbranding=1&rel=0" ' + 1663 'style="position:absolute;top:0;left:0;width:100%;height:100%;border:0;border-radius:12px;" ' + 1664 'allow="accelerometer;autoplay;clipboard-write;encrypted-media;gyroscope;picture-in-picture;web-share" ' + 1665 'loading="lazy" allowfullscreen title="The Gallery Real Estate"></iframe>' + 1666 '<div style="position:absolute;top:0;right:0;width:180px;height:50px;background:transparent;z-index:10;pointer-events:auto;cursor:default;"></div>' + 1667 '</div>'; 1668 } 1669 // Single video embed (switch + landlord enquiry pages) 1670 var legacy = document.getElementById('tgre-video-embed'); 1671 if (legacy) embedVideo(legacy, 'uZLKavldzP8'); 1672 // Multi-video embeds (owner guide + any future pages) 1673 document.querySelectorAll('[data-tgre-yt]').forEach(function(el) { 1674 var id = el.getAttribute('data-tgre-yt'); 1675 if (id) embedVideo(el, id); 1676 }); 1677})(); 1678</script>
1678 1679<style> 1680@media (max-width: 899px) { 1681 .tgre-desktop-only { display: none !important; } 1682} 1683@media (min-width: 900px) { 1684 .tgre-mobile-only { display: none !important; } 1685} 1686</style> 1687<!-- TGRE Lead Relay: mirrors the landlord enquiry form to Grow CRM (added 2026-07-07) -->
1688<script> 1689(function() { 1690 var RELAY = 'https://tgre-team.netlify.app/api/lead'; 1691 function fv(form, suffix) { 1692 var el = form.querySelector('[name$="_field_' + suffix + '"]'); 1693 return el ? el.value.trim() : ''; 1694 } 1695 document.addEventListener('submit', function(e) { 1696 var form = e.target; 1697 if (!form || !form.getAttribute) return; 1698 if (form.getAttribute('data-form-name') !== 'Request Property Management Advice') return; 1699 var payload = { 1700 name: fv(form, '164'), 1701 email: fv(form, '165'), 1702 phone: fv(form, '166'), 1703 property_address: fv(form, '167'), 1704 message: fv(form, '172'), 1705 source_page: window.location.href 1706 }; 1707 if (!payload.email && !payload.phone) return; 1708 var key = JSON.stringify(payload); 1709 if (form.__tgreLeadSent === key) return; 1710 form.__tgreLeadSent = key; 1711 try { 1712 fetch(RELAY, { method: 'POST', headers: {'Content-Type': 'application/json'}, body: key, keepalive: true }).catch(function(){}); 1713 } catch (err) {} 1714 }, true); 1715})(); 1716</script>
1716 1717 1718 1719 1720<!-- TGRE Tenant Lead Relay: mirrors the Moore Park Gardens rental enquiry form to Grow CRM (added 2026-07-13) -->
1721<script> 1722(function() { 1723 var RELAY = 'https://tgre-team.netlify.app/api/tenant-lead'; 1724 function fv(form, suffix) { 1725 var el = form.querySelector('[name$="_field_' + suffix + '"]'); 1726 return el ? el.value.trim() : ''; 1727 } 1728 function fvList(form, suffix) { 1729 var els = form.querySelectorAll('[name$="_field_' + suffix + '[]"]:checked'); 1730 var vals = []; 1731 els.forEach(function(el) { vals.push(el.value); }); 1732 return vals; 1733 } 1734 document.addEventListener('submit', function(e) { 1735 var form = e.target; 1736 if (!form || !form.getAttribute) return; 1737 if (form.getAttribute('data-form-name') !== 'Moore Park Gardens Rental Enquiry') return; 1738 var payload = { 1739 name: fv(form, '200'), 1740 email: fv(form, '201'), 1741 phone: fv(form, '211'), 1742 bedrooms: fvList(form, '220'), 1743 bathrooms: fvList(form, '223'), 1744 car_space: fvList(form, '224'), 1745 move_timing: fvList(form, '225'), 1746 weekly_rent: fv(form, '216'), 1747 situation: fvList(form, '219'), 1748 notes: fv(form, '218'), 1749 source_page: window.location.href 1750 }; 1751 if (!payload.email && !payload.phone) return; 1752 var key = JSON.stringify(payload); 1753 if (form.__tgreTenantLeadSent === key) return; 1754 form.__tgreTenantLeadSent = key; 1755 try { 1756 fetch(RELAY, { method: 'POST', headers: {'Content-Type': 'application/json'}, body: key, keepalive: true }).catch(function(){}); 1757 } catch (err) {} 1758 }, true); 1759})(); 1760</script>
1760 1761 1762
1763<script> 1764/* ===== TGRE Motion v1 â reveal-on-scroll + stat count-up. Progressive enhancement: 1765 exits (leaving everything visible and static) without IO support or with 1766 prefers-reduced-motion. Above-fold sections are marked .tgre-in in the same 1767 frame as .tgre-mo, so nothing visible ever hides. Safety: 4s force-reveal. ===== */ 1768(function(){ 1769 if(!('IntersectionObserver' in window))return; 1770 if(window.matchMedia('(prefers-reduced-motion: reduce)').matches)return; 1771 function init(){ 1772 document.documentElement.classList.add('tgre-motion'); 1773 var vh=window.innerHeight; 1774 var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('tgre-in');io.unobserve(e.target);}});},{rootMargin:'0px 0px 22% 0px',threshold:0.01}); 1775 [].slice.call(document.querySelectorAll('.pushblock-inner')).forEach(function(el){ 1776 var r=el.getBoundingClientRect(); 1777 el.classList.add('tgre-mo'); 1778 if(r.top<vh*0.98){el.classList.add('tgre-in');}else{io.observe(el);} 1779 }); 1780 var mio=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){e.target.classList.add('tgre-in');mio.unobserve(e.target);}});},{threshold:0.25}); 1781 [].slice.call(document.querySelectorAll('.tgre-ed-marker')).forEach(function(m){mio.observe(m);}); 1782 function fig(el){ 1783 var t=el.textContent.trim(); 1784 var m=t.match(/^([^0-9]*)([0-9][0-9.,]*)([^0-9]*)$/); 1785 if(!m)return; 1786 var num=parseFloat(m[2].replace(/,/g,'')); 1787 if(!isFinite(num))return; 1788 var dec=(m[2].split('.')[1]||'').length,start=null,dur=1400; 1789 function step(ts){ 1790 if(!start)start=ts; 1791 var p=Math.min(1,(ts-start)/dur),e=1-Math.pow(1-p,3); 1792 el.textContent=m[1]+(num*e).toFixed(dec)+m[3]; 1793 if(p<1)requestAnimationFrame(step);else el.textContent=t; 1794 } 1795 requestAnimationFrame(step); 1796 } 1797 var fio=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){fio.unobserve(e.target);fig(e.target);}});},{threshold:0.25}); 1798 [].slice.call(document.querySelectorAll('.tgre-ed-stats .fig')).forEach(function(f){fio.observe(f);}); 1799 var moTick=false; 1800 function moSweep(){moTick=false;var els=document.querySelectorAll('.tgre-mo:not(.tgre-in)');if(!els.length){document.removeEventListener('scroll',moQ,{capture:true});window.removeEventListener('resize',moQ);return;}[].slice.call(els).forEach(function(el){var r=el.getBoundingClientRect();if(r.top<window.innerHeight*0.96){el.classList.add('tgre-in');}});} 1801 function moQ(){if(!moTick){moTick=true;requestAnimationFrame(moSweep);}} 1802 document.addEventListener('scroll',moQ,{passive:true,capture:true}); 1803 window.addEventListener('resize',moQ,{passive:true}); 1804 setTimeout(moSweep,3000); 1805 }
1806 if(document.readyState==='complete'){init();}else{window.addEventListener('load',init);} 1807})(); 1808</script>
1808 1809 1810<!-- TGRE Story Viewer: binds [data-tgre-story] rings to the overlay decks in the footer snippet. 1811 Restored 2026-07-18 after a Footer Content UI edit stripped it. Lives here so footer edits can't strip it again. -->
1812<script> 1813(function(){ 1814function lock(on){document.documentElement.style.overflow=on?'hidden':'';} 1815function init(key){ 1816 var overlay=document.getElementById('tgre-ps-'+key); 1817 var triggers=document.querySelectorAll('[data-tgre-story="'+key+'"]'); 1818 if(!overlay||!triggers.length)return; 1819 var card=overlay.querySelector('.tgre-ps-card'), 1820 slides=overlay.querySelectorAll('.tgre-ps-slide'), 1821 bars=overlay.querySelector('.tgre-ps-bars'), 1822 closeBtn=overlay.querySelector('.tgre-ps-close'), 1823 DUR=6000,cur=0,timer=null,fills=[]; 1824 for(var i=0;i<slides.length;i++){ 1825 var b=document.createElement('div');b.className='tgre-ps-bar'; 1826 var f=document.createElement('span');b.appendChild(f);bars.appendChild(b);fills.push(f); 1827 } 1828 function show(n){ 1829 if(n<0)n=0; 1830 if(n>=slides.length){close();return;} 1831 cur=n; 1832 for(var i=0;i<slides.length;i++){ 1833 slides[i].classList.toggle('is-active',i===n); 1834 fills[i].style.transition='none'; 1835 fills[i].style.width=i<n?'100%':'0'; 1836 } 1837 void fills[n].offsetWidth; 1838 fills[n].style.transition='width '+DUR+'ms linear'; 1839 fills[n].style.width='100%'; 1840 clearTimeout(timer); 1841 if(n<slides.length-1){timer=setTimeout(function(){show(cur+1);},DUR);} 1842 } 1843 function open(e){ 1844 if(e)e.preventDefault(); 1845 overlay.classList.add('is-open'); 1846 lock(true); 1847 card.style.transition='';card.style.transform=''; 1848 show(0); 1849 } 1850 function close(){ 1851 overlay.classList.remove('is-open'); 1852 lock(false); 1853 clearTimeout(timer); 1854 card.style.transition='';card.style.transform=''; 1855 } 1856 overlay._close=close; 1857 overlay._next=function(){show(cur+1);}; 1858 overlay._prev=function(){show(cur-1);}; 1859 for(var t=0;t<triggers.length;t++){triggers[t].addEventListener('click',open);} 1860 if(closeBtn)closeBtn.addEventListener('click',function(e){e.stopPropagation();close();}); 1861 overlay.addEventListener('click',function(e){if(e.target===overlay)close();}); 1862 var sy=null,sx=null,dy=0,dx=0,swiped=false; 1863 card.addEventListener('touchstart',function(e){ 1864 sy=e.touches[0].clientY;sx=e.touches[0].clientX;dy=0;dx=0; 1865 },{passive:true}); 1866 card.addEventListener('touchmove',function(e){ 1867 if(sy===null)return; 1868 dy=e.touches[0].clientY-sy;dx=e.touches[0].clientX-sx; 1869 if(dy>0&&dy>Math.abs(dx)){ 1870 card.style.transition='none'; 1871 card.style.transform='translateY('+dy+'px)'; 1872 } 1873 },{passive:true}); 1874 card.addEventListener('touchend',function(){ 1875 if(Math.abs(dy)>10||Math.abs(dx)>10)swiped=true; 1876 if(dy>110&&dy>Math.abs(dx)){sy=null;close();return;} 1877 card.style.transition='transform .25s ease'; 1878 card.style.transform=''; 1879 sy=null; 1880 }); 1881 card.addEventListener('click',function(e){ 1882 if(swiped){swiped=false;return;} 1883 if(e.target.closest('a,button'))return; 1884 var r=card.getBoundingClientRect(); 1885 if((e.clientX-r.left)<r.width*0.3){show(cur-1);}else{show(cur+1);} 1886 }); 1887} 1888init('lease'); 1889init('switch'); 1890document.addEventListener('keydown',function(e){ 1891 var ov=document.querySelector('.tgre-ps-overlay.is-open'); 1892 if(!ov)return; 1893 if(e.key==='Escape')ov._close(); 1894 if(e.key==='ArrowRight')ov._next(); 1895 if(e.key==='ArrowLeft')ov._prev(); 1896}); 1897})(); 1898</script>
1898 1899 1900<!-- TGRE theme footer: trim the locked copyright bar to its first line (added 2026-07-18) -->
1901<script> 1902(function(){ 1903 var bars = document.querySelectorAll('.siteFooter-copyright'); 1904 for (var i = 0; i < bars.length; i++) { 1905 var br = bars[i].querySelector('br'); 1906 if (!br) continue; 1907 while (br.nextSibling) { br.parentNode.removeChild(br.nextSibling); } 1908 br.parentNode.removeChild(br); 1909 } 1910})(); 1911</script>
1911 1912 1913<!-- Immersive .rj engine JS (v2): write-on words + underline-after + consistent wave + ken-burns, gated to .rj (19 Jul 2026) -->
1914<script> 1915(function(){ 1916 var rj=document.querySelector('.rj'); if(!rj) return; 1917 var RM=matchMedia('(prefers-reduced-motion: reduce)').matches; 1918 if(!RM) document.documentElement.classList.add('rj-anim'); 1919 function wavePath(W){var y=8;return 'M 2 '+(y+0.6).toFixed(1)+' C '+(W*0.28).toFixed(1)+' '+(y-1.5).toFixed(1)+', '+(W*0.62).toFixed(1)+' '+(y+1.7).toFixed(1)+', '+(W-2).toFixed(1)+' '+(y-0.2).toFixed(1);} 1920 var emphs=[]; 1921 rj.querySelectorAll('h2 em, .rj-h1 em').forEach(function(em){ 1922 var w=document.createElement('span'); w.className='rj-emph'; 1923 em.parentNode.insertBefore(w,em); w.appendChild(em); 1924 if(em.classList.contains('ul')){var svg=document.createElementNS('http://www.w3.org/2000/svg','svg'); svg.setAttribute('preserveAspectRatio','none'); 1925 var p=document.createElementNS('http://www.w3.org/2000/svg','path'); svg.appendChild(p); w.appendChild(svg); 1926 emphs.push({w:w,svg:svg,p:p});} 1927 }); 1928 function sizeUnderlines(){emphs.forEach(function(o){var W=Math.max(20,Math.round(o.w.getBoundingClientRect().width));o.svg.setAttribute('viewBox','0 0 '+W+' 14');o.p.setAttribute('d',wavePath(W));var L=o.p.getTotalLength();o.p.style.strokeDasharray=L;if(!o.p.dataset.drawn)o.p.style.strokeDashoffset=RM?0:L;});} 1929 sizeUnderlines(); 1930 function drawUnderlines(el){el.querySelectorAll('.rj-emph').forEach(function(w){w.classList.add('rj-lit');var p=w.querySelector('path');if(p){p.dataset.drawn='1';p.style.strokeDashoffset=0;}});} 1931 function countUp(el){if(RM)return;var t=el.textContent.trim(),m=t.match(/^([^0-9]*)([0-9]+)(.*)$/);if(!m)return;var pre=m[1],num=+m[2],suf=m[3],s=null;function st(ts){if(!s)s=ts;var pr=Math.min(1,(ts-s)/1600),e=1-Math.pow(1-pr,3);el.textContent=pre+Math.round(num*e)+suf;if(pr<1)requestAnimationFrame(st);else el.textContent=t;}requestAnimationFrame(st);} 1932 function fire(t){t.classList.add('rj-in');drawUnderlines(t);t.querySelectorAll('[data-count]').forEach(countUp);} 1933 var hero=rj.querySelector('.rj-hero'); 1934 function heroGo(){if(hero){hero.classList.add('rj-in');drawUnderlines(hero);}} 1935 if(RM){if(hero)hero.classList.add('rj-in');return;} 1936 requestAnimationFrame(function(){requestAnimationFrame(heroGo);}); 1937 if(!('IntersectionObserver' in window)){rj.querySelectorAll('.rj-scene,.rj-act,.rj-cta').forEach(fire);return;} 1938 var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){fire(e.target);io.unobserve(e.target);}});},{threshold:.2,rootMargin:'0px 0px -8% 0px'}); 1939 rj.querySelectorAll('.rj-scene,.rj-act,.rj-cta').forEach(function(s){io.observe(s);}); 1940 var rt;addEventListener('resize',function(){clearTimeout(rt);rt=setTimeout(sizeUnderlines,200);}); 1941 setTimeout(function(){var vh=innerHeight;rj.querySelectorAll('.rj-scene:not(.rj-in),.rj-act:not(.rj-in),.rj-cta:not(.rj-in)').forEach(function(s){var r=s.getBoundingClientRect();if(r.top<vh&&r.bottom>0)fire(s);});},3500); 1942})(); 1943</script>
1943 1944 1945<!-- TGRE word annotations engine v4.1 (.tg-wo): underline, double underline, circle, tick, target-seeking arrow with drawn-then-filled triangle head. 21 Jul 2026 -->
1946<script> 1947(function(){ 1948 var wos=[].slice.call(document.querySelectorAll('.tg-wo')); if(!wos.length) return; 1949 var RM=matchMedia('(prefers-reduced-motion: reduce)').matches; 1950 if(!RM) document.documentElement.classList.add('tg-anim'); 1951 function pencil(W,y,f){y=y||8;f=f||1;return 'M 2 '+(y+0.6*f).toFixed(1)+' C '+(W*0.28).toFixed(1)+' '+(y-1.5*f).toFixed(1)+', '+(W*0.62).toFixed(1)+' '+(y+1.7*f).toFixed(1)+', '+(W-2).toFixed(1)+' '+(y-0.2*f).toFixed(1);} 1952 function circ(){var cx=50,cy=30,rx=47,ry=25,k=0.5523,d='M '+(cx+rx)+' '+cy;d+=' C '+(cx+rx)+' '+(cy+ry*k)+', '+(cx+rx*k)+' '+(cy+ry)+', '+cx+' '+(cy+ry);d+=' C '+(cx-rx*k)+' '+(cy+ry)+', '+(cx-rx)+' '+(cy+ry*k)+', '+(cx-rx)+' '+cy;d+=' C '+(cx-rx)+' '+(cy-ry*k)+', '+(cx-rx*k)+' '+(cy-ry)+', '+cx+' '+(cy-ry);d+=' C '+(cx+rx*k)+' '+(cy-ry)+', '+(cx+rx)+' '+(cy-ry*k)+', '+(cx+rx)+' '+cy;d+=' C '+(cx+rx)+' '+(cy+ry*0.42)+', '+(cx+rx*0.93)+' '+(cy+ry*0.74)+', '+(cx+rx*0.55)+' '+(cy+ry*0.98);return d;} 1953 function mk(cls,vb,d){var s=document.createElementNS('http://www.w3.org/2000/svg','svg');s.setAttribute('class',cls);s.setAttribute('preserveAspectRatio','none');s.setAttribute('viewBox',vb);var p=document.createElementNS('http://www.w3.org/2000/svg','path');if(d)p.setAttribute('d',d);s.appendChild(p);return[s,p];} 1954 var uls=[],arrows=[]; 1955 wos.forEach(function(el){ 1956 if(el.classList.contains('tg-tick')){var ts=document.createElementNS('http://www.w3.org/2000/svg','svg');ts.setAttribute('class','tg-tk');ts.setAttribute('preserveAspectRatio','none');ts.setAttribute('viewBox','0 0 100 100');var pa=document.createElementNS('http://www.w3.org/2000/svg','path');pa.setAttribute('class','tk-a');pa.setAttribute('d','M 7 46 C 15 57, 24 72, 41 91');pa.style.strokeWidth='16';var pb=document.createElementNS('http://www.w3.org/2000/svg','path');pb.setAttribute('class','tk-b');pb.setAttribute('d','M 41 91 C 53 68, 71 40, 86 20 C 91 13, 96 8, 100 1');pb.style.strokeWidth='8';ts.appendChild(pa);ts.appendChild(pb);el.appendChild(ts);} 1957 if(el.classList.contains('tg-circ')){var cc=mk('tg-annot','0 0 100 60',circ());el.appendChild(cc[0]);} 1958 if(el.classList.contains('tg-arrow')){var ar=mk('tg-annot tg-arr','0 0 100 90',null);var hd=document.createElementNS('http://www.w3.org/2000/svg','path');hd.setAttribute('class','tg-arr-head');ar[0].appendChild(hd);el.appendChild(ar[0]);arrows.push({el:el,svg:ar[0],p:ar[1],f:hd});} 1959 if(el.classList.contains('tg-ul')){var u=mk('tg-annot','0 0 100 14',null);el.appendChild(u[0]);uls.push({el:el,svg:u[0],ps:[u[1]],two:false});} 1960 if(el.classList.contains('tg-ul2')){var v=mk('tg-annot','0 0 100 17',null);var p2=document.createElementNS('http://www.w3.org/2000/svg','path');v[0].appendChild(p2);el.appendChild(v[0]);uls.push({el:el,svg:v[0],ps:[v[1],p2],two:true});} 1961 }); 1962 function findTarget(el){ 1963 var box=el.closest('.pushblock-inner')||el.closest('.tgre-foot-cta-main')||el.closest('.pushblock')||el.parentElement; 1964 if(!box) return null; 1965 var btns=box.querySelectorAll('a.pushbutton'); 1966 for(var i=0;i<btns.length;i++){ 1967 if(el.compareDocumentPosition(btns[i]) & 4) return btns[i]; 1968 } 1969 return null; 1970 } 1971 function arrowPath(a){ 1972 var tgt=findTarget(a.el); 1973 if(!tgt){a.svg.style.display='none';return;} 1974 a.svg.style.display=''; 1975 var wr=a.el.getBoundingClientRect(),tr=tgt.getBoundingClientRect(); 1976 var relL=tr.left-wr.left,relR=tr.right-wr.left,relTop=tr.top-wr.top; 1977 var btnMid=relTop+tr.height*0.5,btnBot=relTop+tr.height; 1978 var beside=tr.top<wr.bottom-4; 1979 var maxX=document.documentElement.clientWidth-wr.left-8; 1980 var sx,sy,segs=[]; 1981 if(beside){ 1982 var right=tr.left>wr.right; 1983 sx=wr.width*0.55;sy=wr.height+3; 1984 var exb=(right?tr.left-8:tr.right+8)-wr.left,eyb=btnMid; 1985 var lenb=Math.max(1,Math.hypot(exb-sx,eyb-sy)); 1986 var db=Math.max(30,Math.min(70,lenb*0.18)); 1987 var rb2=Math.min(120,Math.max(50,lenb*0.22)); 1988 segs.push([sx+(exb-sx)*0.3,sy+db,exb+(right?-rb2:rb2),eyb+14,exb,eyb]); 1989 }else{ 1990 sx=wr.width*0.7;sy=wr.height+4; 1991 if(maxX-wr.width<44){a.svg.style.display='none';return;} 1992 var ex0=Math.min(relR+8,maxX-18),ey0=btnMid; 1993 if(Math.abs(ex0-sx)>=140){ 1994 var drop=Math.max(34,Math.min(90,(ey0-sy)*0.5+26)); 1995 var reach=Math.min(140,Math.max(60,Math.abs(ex0-sx)*0.22)); 1996 segs.push([sx+(ex0-sx)*0.28,sy+drop,ex0+reach,ey0+14,ex0,ey0]); 1997 }else{ 1998 sx=wr.width+2;sy=wr.height*0.5; 1999 segs.push([Math.min(relR+46,maxX),sy+8,Math.min(ex0+48,maxX),ey0+16,ex0,ey0]); 2000 } 2001 } 2002 var last=segs[segs.length-1]; 2003 var ex=last[4],ey=last[5]; 2004 var tx=ex-last[2],ty=ey-last[3],tl=Math.sqrt(tx*tx+ty*ty)||1;tx/=tl;ty/=tl; 2005 function barb(ang){var r=ang*Math.PI/180,ct=Math.cos(r),st=Math.sin(r);var bx=tx*ct-ty*st,by=tx*st+ty*ct;return[(ex-bx*13),(ey-by*13)];} 2006 var b1=barb(26),b2=barb(-26); 2007 var xs=[sx,ex,b1[0],b2[0]],ys=[sy,ey,b1[1],b2[1]];
2008 segs.forEach(function(g){xs.push(g[0],g[2],g[4]);ys.push(g[1],g[3],g[5]);}); 2009 var pad=26; 2010 var minX=Math.min.apply(null,xs.concat([0]))-pad,mX=Math.max.apply(null,xs)+pad; 2011 var minY=Math.min.apply(null,ys.concat([0]))-pad,mY=Math.max.apply(null,ys)+pad; 2012 a.svg.style.left=minX+'px';a.svg.style.top=minY+'px'; 2013 a.svg.style.width=(mX-minX)+'px';a.svg.style.height=(mY-minY)+'px'; 2014 a.svg.setAttribute('viewBox','0 0 '+Math.ceil(mX-minX)+' '+Math.ceil(mY-minY)); 2015 function q(x,y){return (x-minX).toFixed(1)+' '+(y-minY).toFixed(1);} 2016 var d='M '+q(sx,sy); 2017 segs.forEach(function(g){d+=' C '+q(g[0],g[1])+', '+q(g[2],g[3])+', '+q(g[4],g[5]);}); 2018 var hp='M '+q(b1[0],b1[1])+' L '+q(ex,ey)+' L '+q(b2[0],b2[1])+' Z';d+=' '+hp;a.f.setAttribute('d',hp); 2019 a.p.setAttribute('d',d); 2020 } 2021 function setDash(p){var L=p.getTotalLength();p.style.strokeDasharray=L;if(!p.dataset.drawn)p.style.strokeDashoffset=RM?0:L;} 2022 function size(){ 2023 uls.forEach(function(a){var W=Math.max(20,Math.round(a.el.getBoundingClientRect().width));a.svg.setAttribute('viewBox','0 0 '+W+' '+(a.two?17:14));a.ps[0].setAttribute('d',pencil(W,a.two?5.5:8,1));if(a.two)a.ps[1].setAttribute('d',pencil(W,11.5,-1));}); 2024 arrows.forEach(arrowPath); 2025 document.querySelectorAll('.tg-annot path,.tg-tk path').forEach(setDash);} 2026 size(); 2027 if(document.documentElement.clientWidth<=860){ 2028 document.querySelectorAll('.tg-hw .pen').forEach(function(pp){ 2029 ['animationDuration','animationDelay'].forEach(function(k){ 2030 var v=parseFloat(pp.style[k]); 2031 if(v)pp.style[k]=(v*0.75).toFixed(2)+'s'; 2032 }); 2033 }); 2034 } 2035 function lit(el){el.classList.add('tg-lit');el.querySelectorAll('svg path').forEach(function(p){p.dataset.drawn='1';p.style.strokeDashoffset=0;});} 2036 if(RM) return; 2037 if(!('IntersectionObserver' in window)){wos.forEach(lit);return;} 2038 var io=new IntersectionObserver(function(es){es.forEach(function(e){if(e.isIntersecting){lit(e.target);io.unobserve(e.target);}});},{threshold:.3}); 2039 wos.forEach(function(el){io.observe(el);}); 2040 var rt;addEventListener('resize',function(){clearTimeout(rt);rt=setTimeout(size,200);}); 2041 addEventListener('load',size); 2042})(); 2043</script>
2043 2044 2045 2046 2047<!-- TGRE Animated Counters v2 (29 Jul 2026) - supersedes the v1 block above. 2048 v1 bound to window 'scroll', but this theme scrolls an inner container, so 2049 window scroll never fired and counters stayed on their "0" placeholder on 2050 8 live pages. v2 uses IntersectionObserver, which is scroll-container 2051 agnostic, and can never leave a 0 on screen: reduced-motion and no-IO 2052 paths write the final value immediately, and a watchdog settles anything 2053 visible that did not animate. Takes ownership by setting data-animated so 2054 the v1 handler above no-ops. -->
2055<script> 2056(function(){ 2057 var els = [].slice.call(document.querySelectorAll('.tgre-counter')); 2058 if (!els.length) return; 2059 2060 function decimalsFor(el){ 2061 if (el.hasAttribute('data-decimals')) return parseInt(el.getAttribute('data-decimals'), 10) || 0; 2062 var raw = el.getAttribute('data-target') || ''; 2063 return (raw.split('.')[1] || '').length; 2064 } 2065 function format(el, n){ 2066 return (el.getAttribute('data-prefix') || '') + n.toFixed(decimalsFor(el)) + (el.getAttribute('data-suffix') || ''); 2067 } 2068 function settle(el){ 2069 var t = parseFloat(el.getAttribute('data-target')); 2070 if (isFinite(t)) el.textContent = format(el, t); 2071 el.dataset.done = '1'; 2072 } 2073 2074 els.forEach(function(el){ el.dataset.animated = 'true'; }); 2075 2076 var reduced = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 2077 if (reduced || !('IntersectionObserver' in window)) { els.forEach(settle); return; } 2078 2079 function run(el){ 2080 if (el.dataset.done) return; 2081 var target = parseFloat(el.getAttribute('data-target')); 2082 if (!isFinite(target)) return; 2083 el.dataset.done = '1'; 2084 var dur = 1600, start = null; 2085 function step(ts){ 2086 if (!start) start = ts; 2087 var p = Math.min(1, (ts - start) / dur); 2088 var eased = 1 - Math.pow(1 - p, 3); 2089 el.textContent = format(el, target * eased); 2090 if (p < 1) requestAnimationFrame(step); 2091 else el.textContent = format(el, target); 2092 } 2093 requestAnimationFrame(step); 2094 } 2095 2096 var io = new IntersectionObserver(function(entries){ 2097 entries.forEach(function(en){ 2098 if (en.isIntersecting) { io.unobserve(en.target); run(en.target); } 2099 }); 2100 }, { threshold: 0.25 });
2101 els.forEach(function(el){ io.observe(el); }); 2102 2103 setTimeout(function(){ 2104 els.forEach(function(el){ 2105 if (el.dataset.done) return; 2106 var r = el.getBoundingClientRect(); 2107 if (r.top < (window.innerHeight || 0) && r.bottom > 0) settle(el); 2108 }); 2109 }, 4000); 2110})(); 2111</script>
2111 2112 2113 2114 2115<!-- TGRE Animated Counters v3 (29 Jul 2026) - supersedes v1 and v2 above. 2116 Both earlier versions could leave a "0" on screen: v1 bound window 2117 'scroll', which never fires because this theme scrolls an inner container; 2118 v2 relied on IntersectionObserver + requestAnimationFrame, which are 2119 throttled or deferred in some contexts. v3 inverts the risk. The correct 2120 final value is written immediately and unconditionally, so a visitor can 2121 never see 0. The count-up is then a pure enhancement layered on top, driven 2122 by the same document-capture scroll sweep the TGRE Motion script uses on 2123 this theme. If any of that fails, the real number is already on screen. 2124 v1 and v2 are inert (v3 claims data-animated) and can be deleted. -->
2125<script> 2126(function(){ 2127 var els = [].slice.call(document.querySelectorAll('.tgre-counter')); 2128 if (!els.length) return; 2129 2130 function decimalsFor(el){ 2131 if (el.hasAttribute('data-decimals')) return parseInt(el.getAttribute('data-decimals'), 10) || 0; 2132 return ((el.getAttribute('data-target') || '').split('.')[1] || '').length; 2133 } 2134 function format(el, n){ 2135 return (el.getAttribute('data-prefix') || '') + n.toFixed(decimalsFor(el)) + (el.getAttribute('data-suffix') || ''); 2136 } 2137 2138 // 1. Correctness, unconditional. Neutralise v1/v2 and write the real value now. 2139 els.forEach(function(el){ 2140 el.dataset.animated = 'true'; 2141 el.dataset.done = '1'; 2142 var t = parseFloat(el.getAttribute('data-target')); 2143 if (isFinite(t)) el.textContent = format(el, t); 2144 }); 2145 2146 // 2. Animation, best effort only. 2147 if (!window.requestAnimationFrame) return; 2148 if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; 2149 2150 var pending = els.filter(function(el){ return isFinite(parseFloat(el.getAttribute('data-target'))); }); 2151 2152 function animate(el){ 2153 var target = parseFloat(el.getAttribute('data-target')); 2154 var dur = 1600, start = null; 2155 function step(ts){ 2156 if (!start) start = ts; 2157 var p = Math.min(1, (ts - start) / dur); 2158 el.textContent = format(el, target * (1 - Math.pow(1 - p, 3))); 2159 if (p < 1) requestAnimationFrame(step); 2160 else el.textContent = format(el, target); 2161 } 2162 requestAnimationFrame(step); 2163 } 2164 2165 var ticking = false; 2166 function sweep(){ 2167 ticking = false; 2168 var vh = window.innerHeight || 0; 2169 pending = pending.filter(function(el){ 2170 var r = el.getBoundingClientRect(); 2171 if (r.top < vh * 0.9 && r.bottom > 0) { animate(el); return false; } 2172 return true; 2173 }); 2174 if (!pending.length) { 2175 document.removeEventListener('scroll', queue, { capture: true }); 2176 window.removeEventListener('resize', queue); 2177 } 2178 } 2179 function queue(){ if (!ticking) { ticking = true; requestAnimationFrame(sweep); } } 2180 2181 document.addEventListener('scroll', queue, { passive: true, capture: true }); 2182 window.addEventListener('resize', queue, { passive: true }); 2183 queue(); 2184})(); 2185</script>
2185 2186 2187 2188<!-- TGRE MPG Parcel Locator embed: grows the iframe with its content and 2189 darkens the page around it in dark mode. Inert on every other page. -->
2190<script> 2191(function(){ 2192 var f = document.getElementById("tgreLocator"); 2193 if (!f) return; 2194 window.addEventListener("message", function(e){ 2195 if (e.data && e.data.tgreLocator) f.style.height = e.data.tgreLocator + "px"; 2196 }); 2197 var css = document.createElement("style"); 2198 css.textContent = "@media (prefers-color-scheme: dark){" + 2199 "body, main.siteMain, .pushblock[data-bg='bg-none']{background:#211f1d !important;color:#f2ece5}" + 2200 "main.siteMain h1{color:#f2ece5}" + 2201 "main.siteMain h1 em{color:#D46144}" + 2202 "}"; 2203 document.head.appendChild(css); 2204})(); 2205</script>
2205 2206 2207 2208<!-- TGRE MPG Parcel Locator: the headline image exists only for the share 2209 card, so hide the hero rendering of it on this page. -->
2210<script> 2211(function(){ 2212 if (!document.getElementById("tgreLocator")) return; 2213 var css = document.createElement("style"); 2214 css.textContent = ".hero img[slot='image'],.hero .hero-image,.hero-image{display:none !important}"; 2215 document.head.appendChild(css); 2216})(); 2217</script>
2217 2218 2219
2220<script> 2221/* TGRE MPG Parcel Locator: compact the hero â the image is share-card only, 2222 so without it the block should hug its text. */ 2223(function(){ 2224 if (!document.getElementById("tgreLocator")) return; 2225 var css = document.createElement("style"); 2226 css.textContent = ".hero{min-height:0 !important;padding-top:2.5rem;padding-bottom:2.5rem}"; 2227 document.head.appendChild(css); 2228})(); 2229</script>
2229 2230 2231 2232 2233<!-- TGRE Interaction v1 (11 Aug 2026): sticky header show-on-scroll-up. Pairs with the "TGRE Interaction v1" style block in Head Includes. 2234 Theme scrolls an inner container, so the scroll listener is document-level 2235 with capture, same pattern as TGRE Motion. Fail-safe: without JS the header 2236 simply keeps its native behaviour. -->
2237<script> 2238(function(){ 2239 var de = document.documentElement; 2240 var hd = document.querySelector('.siteHeader'); 2241 if (hd) { 2242 var lastY = 0, fixed = false, hidden = false, ticking = false; 2243 function getY(){ return window.scrollY || de.scrollTop || document.body.scrollTop || 0; } 2244 function prep(){ 2245 de.classList.add('tgre-hd-prep'); 2246 requestAnimationFrame(function(){ requestAnimationFrame(function(){ de.classList.remove('tgre-hd-prep'); }); }); 2247 } 2248 function apply(){ 2249 ticking = false; 2250 var y = getY(), dy = y - lastY; lastY = y; 2251 if (y <= 70) { 2252 if (fixed) { prep(); de.classList.remove('tgre-hd-fixed','tgre-hd-hide'); fixed = false; hidden = false; } 2253 return; 2254 } 2255 if (!fixed) { 2256 prep(); de.classList.add('tgre-hd-fixed'); de.classList.add('tgre-hd-hide'); 2257 fixed = true; hidden = true; return; 2258 } 2259 if (dy > 2 && y > 160 && !hidden) { de.classList.add('tgre-hd-hide'); hidden = true; } 2260 else if (dy < -2 && hidden) { de.classList.remove('tgre-hd-hide'); hidden = false; } 2261 } 2262 function queue(){ if (!ticking) { ticking = true; requestAnimationFrame(apply); } } 2263 document.addEventListener('scroll', queue, { passive: true, capture: true }); 2264 window.addEventListener('resize', queue, { passive: true }); 2265 queue(); 2266 } 2267})(); 2268</script>
2268 2269 2270 2271 2272<!-- TGRE footer award marks (22 Sep 2026): appends the three 2026 award marks and the three PMX 2026 finalist seals (with captions that show 5s / hide 2s while the footer is on screen) to the locked theme footer, bottom left. Styled by the "TGRE footer award marks" block in Head Includes. -->
2273<script> 2274(function(){ 2275 var bar = document.querySelector('footer .siteFooter-copyright'); 2276 if (!bar || document.querySelector('.tgre-foot-awards')) return; 2277 var BASE = 'https://tgre-social-assets.netlify.app/awards/'; 2278 var MARKS = [ 2279 { file: 'local-business-awards-2026-winner.png', w: 56, href: '/our-story', label: '2026 Local Business Awards, Most Outstanding Real Estate Agency', alt: 'Local Business Awards 2026, Winner, City Suburbs', clear: false }, 2280 { file: 'champion-awards-2026-winner.png', w: 40, href: '/our-story', label: '2026 Australian Small Business Champion Awards, Young Business Champion, Entrepreneur of the Year', alt: 'Australian Small Business Champion Awards 2026, Winner', clear: true }, 2281 { file: 'sydney-design-awards-2026-gold.png', w: 64, href: '/post/the-gallery-real-estate-wins-gold-2026-sydney-design-awards', label: '2026 Sydney Design Awards, Gold for identity and branding', alt: 'Sydney Design Awards 2026, Better Future, Gold', clear: false }, 2282 { file: 'pmx-2026-finalist-innovation.png', w: 86, href: '/post/the-gallery-real-estate-finalist-2026-property-management-excellence-awards', label: 'Finalist, Innovation in Property Management, Property Management Excellence Awards 2026', alt: 'PMX 2026 Finalist, Innovation in Property Management', clear: true, cap: 'Innovation', pmx: true }, 2283 { file: 'pmx-2026-finalist-office-of-the-year-small.png', w: 87, href: '/post/the-gallery-real-estate-finalist-2026-property-management-excellence-awards', label: 'Finalist, Property Management Office of the Year, Small Office, Property Management Excellence Awards 2026', alt: 'PMX 2026 Finalist, Property Management Office of the Year, Small Office', clear: true, cap: 'Small office' }, 2284 { file: 'pmx-2026-finalist-team-of-the-year.png', w: 87, href: '/post/the-gallery-real-estate-finalist-2026-property-management-excellence-awards', label: 'Finalist, Property Management Team of the Year, Property Management Excellence Awards 2026', alt: 'PMX 2026 Finalist, Property Management Team of the Year', clear: true, cap: 'Team' } 2285 ]; 2286 var wrap = document.createElement('div'); 2287 wrap.className = 'tgre-foot-awards'; 2288 MARKS.forEach(function(m){ 2289 if (m.pmx) { var br = document.createElement('span'); br.className = 'tgre-foot-break'; wrap.appendChild(br); } 2290 var a = document.createElement('a'); 2291 a.className = 'tgre-foot-award' + (m.clear ? ' is-clear' : ''); 2292 a.href = m.href; 2293 a.setAttribute('aria-label', m.label); 2294 var img = document.createElement('img'); 2295 img.src = BASE + m.file; 2296 img.alt = m.alt; 2297 img.loading = 'lazy'; 2298 img.width = m.w; img.height = 82; 2299 a.appendChild(img); 2300 if (m.cap) { var c = document.createElement('span'); c.className = 'tgre-foot-cap'; c.setAttribute('aria-hidden', 'true'); c.textContent = m.cap; a.appendChild(c); } 2301 wrap.appendChild(a); 2302 }); 2303 bar.parentNode.appendChild(wrap); 2304 2305 /* captions: on 5s, off 2s, only while the footer is on screen */ 2306 var still = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 2307 if (still || !('IntersectionObserver' in window)) { wrap.classList.add('is-on'); return; } 2308 var timer = null; 2309 function on(){ wrap.classList.add('is-on'); timer = setTimeout(off, 5000); } 2310 function off(){ wrap.classList.remove('is-on'); timer = setTimeout(on, 2000); } 2311 function stop(){ clearTimeout(timer); timer = null; wrap.classList.remove('is-on'); } 2312 new IntersectionObserver(function(entries){ 2313 entries.forEach(function(e){ if (e.isIntersecting) { if (!timer) on(); } else { stop(); } }); 2314 }, { threshold: 0.2 }).observe(wrap); 2315})(); 2316</script>
2316 2317<!-- End BODY End Includes --> 2318 2319</body> 2320 2321</html> 2322 2323
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.