1/* ========================================================= 2 Scroll refinement â runs before paint, before other JS. 3 Fixes: reload jumping to top on mobile Safari/Chrome, 4 navigation back/forward losing position, 5 layout-shift induced scroll snapping. 6 ========================================================= */ 7 (function () { 8 if ('scrollRestoration' in history) { 9 history.scrollRestoration = 'auto'; 10 } 11 var KEY = 'ot:scroll:' + location.pathname + location.search; 12 function isReload() { 13 try { 14 var nav = performance.getEntriesByType('navigation')[0]; 15 if (nav && nav.type) return nav.type === 'reload'; 16 } catch (e) {} 17 return performance.navigation && performance.navigation.type === 1; 18 } 19 var saveTimer = null; 20 function saveScroll() { 21 if (saveTimer) return; 22 saveTimer = requestAnimationFrame(function () { 23 saveTimer = null; 24 try { 25 sessionStorage.setItem(KEY, String(window.scrollY || window.pageYOffset || 0)); 26 } catch (e) {} 27 }); 28 } 29 window.addEventListener('scroll', saveScroll, { passive: true }); 30 window.addEventListener('pagehide', saveScroll); 31 window.addEventListener('beforeunload', saveScroll); 32 if (isReload()) { 33 var savedY = 0; 34 try { savedY = parseInt(sessionStorage.getItem(KEY), 10) || 0; } catch (e) {} 35 if (savedY > 0) { 36 var deadline = Date.now() + 1500; 37 var lastApplied = -1; 38 function restore() { 39 var maxY = document.documentElement.scrollHeight - window.innerHeight; 40 var targetY = Math.min(savedY, maxY); 41 if (targetY !== lastApplied) { 42 window.scrollTo(0, targetY); 43 lastApplied = targetY; 44 } 45 if (Date.now() < deadline && maxY < savedY) { 46 requestAnimationFrame(restore); 47 } 48 } 49 restore(); 50 document.addEventListener('DOMContentLoaded', restore, { once: true }); 51 window.addEventListener('load', restore, { once: true }); 52 } 53 } 54 })();; 55window.OT_BRANDS_ALL = [ 56 { n: "96Zero", u: "/tag/96zero/" }, 57 { n: "A. Lange & Söhne", u: "/tag/a-lange-sohne/" }, 58 { n: "About Vintage", u: "/tag/about-vintage/" }, 59 { n: "Aera", u: "/tag/aera/" }, 60 { n: "Aeronom", u: "/tag/aeronom/" }, 61 { n: "Aerowatch", u: "/tag/aerowatch/" }, 62 { n: "Aevig", u: "/tag/aevig/" }, 63 { n: "ÃIGI", u: "/tag/aigi/" }, 64 { n: "Airain", u: "/tag/airain/" }, 65 { n: "Akrivia", u: "/tag/akrivia/" }, 66 { n: "Alpina", u: "/tag/alpina/" }, 67 { n: "Anachronist", u: "/tag/anachronist/" }, 68 { n: "Anders & Co", u: "/tag/anders-co/" }, 69 { n: "Andersen Geneve", u: "/tag/andersen-geneve/" }, 70 { n: "Anoma", u: "/tag/anoma/" }, 71 { n: "Anonimo", u: "/tag/anonimo/" }, 72 { n: "anOrdain", u: "/tag/anordain/" }, 73 { n: "Antoine Preziuso", u: "/tag/antoine-preziuso/" }, 74 { n: "Apiar", u: "/tag/apiar/" }, 75 { n: "Aquadive", u: "/tag/aquadive/" }, 76 { n: "Arcanaut", u: "/tag/arcanaut/" }, 77 { n: "Arcange", u: "/tag/arcange/" }, 78 { n: "Armin Strom", u: "/tag/armin-strom/" }, 79 { n: "Arnold & Son", u: "/tag/arnold-son/" }, 80 { n: "Artel Rotec", u: "/tag/artel-rotec/" }, 81 { n: "Artisans de Genève", u: "/tag/artisans-de-geneve/" }, 82 { n: "Artya", u: "/tag/artya/" }, 83 { n: "Atelier de Chronométrie", u: "/tag/atelier-de-chronometrie/" }, 84 { n: "Atelier Jalaper", u: "/tag/atelier-jalaper/" }, 85 { n: "Atelier Wen", u: "/tag/atelier-wen/" }, 86 { n: "Atowak", u: "/tag/atowak/" }, 87 { n: "Audemars Piguet", u: "/tag/audemars-piguet/" }, 88 { n: "Audric Watches", u: "/tag/audric-watches/" }, 89 { n: "Autodromo", u: "/tag/autodromo/" }, 90 { n: "Avantist", u: "/tag/avantist/" }, 91 { n: "Aventi", u: "/tag/aventi/" }, 92 { n: "AVI-8", u: "/tag/avi-8/" }, 93 { n: "AWAKE", u: "/tag/awake/" }, 94 { n: "Axia", u: "/tag/axia/" }, 95 { n: "Azimuth", u: "/tag/azimuth/" }, 96 { n: "BA111OD", u: "/tag/ba111od/" }, 97 { n: "Backes & Strauss", u: "/tag/backes-strauss/" }, 98 { n: "Ball Watch", u: "/tag/ball-watch/" }, 99 { n: "Baltic", u: "/tag/baltic/" }, 100 { n: "Bamford Watch Dept", u: "/tag/bamford-watch-dept/" }, 101 { n: "Bangalore", u: "/tag/bangalore/" }, 102 { n: "Baume & Mercier", u: "/tag/baume-mercier/" }, 103 { n: "Beaubleu", u: "/tag/beaubleu/" }, 104 { n: "Beaucroft", u: "/tag/beaucroft/" }, 105 { n: "Beda'a", u: "/tag/bedaa/" }, 106 { n: "Bell & Ross", u: "/tag/bell-ross/" }, 107 { n: "Benrus", u: "/tag/benrus/" }, 108 { n: "Bernhardt", u: "/tag/bernhardt/" }, 109 { n: "Bianchet", u: "/tag/bianchet/" }, 110 { n: "Biver", u: "/tag/biver/" }, 111 { n: "Blancpain", u: "/tag/blancpain/" }, 112 { n: "BND Watches", u: "/tag/bnd-watches/" }, 113 { n: "BÅKEN", u: "/tag/boken/" }, 114 { n: "BOLDR", u: "/tag/boldr/" }, 115 { n: "Botta Design", u: "/tag/botta-design/" }, 116 { n: "Bovet", u: "/tag/bovet/" }, 117 { n: "Bravo", u: "/tag/bravo/" }, 118 { n: "Bravur", u: "/tag/bravur/" }, 119 { n: "Breguet", u: "/tag/breguet/" }, 120 { n: "Breitling", u: "/tag/breitling/" }, 121 { n: "Brellum", u: "/tag/brellum/" }, 122 { n: "Bremoir", u: "/tag/bremoir/" }, 123 { n: "Bremont", u: "/tag/bremont/" }, 124 { n: "Brew Watch Co.", u: "/tag/brew-watch-co/" }, 125 { n: "Briston", u: "/tag/briston/" }, 126 { n: "Bulgari", u: "/tag/bulgari/" }, 127 { n: "Bulova", u: "/tag/bulova/" }, 128 { n: "BWD", u: "/tag/bwd/" }, 129 { n: "BWG", u: "/tag/bwg/" }, 130 { n: "Carl F. Bucherer", u: "/tag/carl-f-bucherer/" }, 131 { n: "Carl Suchy & Söhne", u: "/tag/carl-suchy-sohne/" }, 132 { n: "Cartier", u: "/tag/cartier/" }, 133 { n: "Casio", u: "/tag/casio/" }, 134 { n: "Cauny", u: "/tag/cauny/" }, 135 { n: "Celadon", u: "/tag/celadon/" }, 136 { n: "Certina", u: "/tag/certina/" }, 137 { n: "Chanel", u: "/tag/chanel/" }, 138 { n: "Charlie Paris", u: "/tag/charlie-paris/" }, 139 { n: "Chopard", u: "/tag/chopard/" }, 140 { n: "Christophe Claret", u: "/tag/christophe-claret/" }, 141 { n: "Christopher Ward", u: "/tag/christopher-ward/" }, 142 { n: "ChronoAstra", u: "/tag/chronoastra/" }, 143 { n: "Chronoswiss", u: "/tag/chronoswiss/" }, 144 { n: "CIGA Design", u: "/tag/ciga-design/" },
145 { n: "Circula", u: "/tag/circula/" }, 146 { n: "Citizen Watches", u: "/tag/citizen-watches/" }, 147 { n: "Clemence", u: "/tag/clemence/" }, 148 { n: "CODE41", u: "/tag/code41/" }, 149 { n: "Corum", u: "/tag/corum/" }, 150 { n: "Crafter Blue", u: "/tag/crafter-blue/" }, 151 { n: "Credor", u: "/tag/credor/" }, 152 { n: "Cvstos", u: "/tag/cvstos/" }, 153 { n: "Cyrus Watches", u: "/tag/cyrus-watches/" }, 154 { n: "Czapek", u: "/tag/czapek-cie/" }, 155 { n: "Daniel Roth", u: "/tag/daniel-roth/" }, 156 { n: "De Bethune", u: "/tag/de-bethune/" }, 157 { n: "de Grisogono", u: "/tag/de-grisogono/" }, 158 { n: "De Jager", u: "/tag/de-jager/" }, 159 { n: "De Rijke & Co.", u: "/tag/de-rijke-co/" }, 160 { n: "Defakto", u: "/tag/defakto/" }, 161 { n: "Delma", u: "/tag/delma/" }, 162 { n: "Dennison", u: "/tag/dennison/" }, 163 { n: "Depancel", u: "/tag/depancel/" }, 164 { n: "Designa Individual", u: "/tag/designa-individual/" }, 165 { n: "Detrash", u: "/tag/detrash/" }, 166 { n: "Dewitt", u: "/tag/dewitt/" }, 167 { n: "Doxa", u: "/tag/doxa/" }, 168 { n: "DRACO London", u: "/tag/draco-london/" }, 169 { n: "Duckworth Prestex", u: "/tag/duckworth-prestex/" }, 170 { n: "DWISS", u: "/tag/dwiss/" }, 171 { n: "echo/neutra", u: "/tag/echo-neutra/" }, 172 { n: "Electrianz", u: "/tag/electrianz/" }, 173 { n: "Elka Watch Co.", u: "/tag/elka-watch-co/" }, 174 { n: "Elliot Brown", u: "/tag/elliot-brown/" }, 175 { n: "Emile Chouriet", u: "/tag/emile-chouriet/" }, 176 { n: "EPOS Watches", u: "/tag/epos-watches/" }, 177 { n: "Escudo", u: "/tag/escudo/" }, 178 { n: "F.P. Journe", u: "/tag/f-p-journe/" }, 179 { n: "Faberge", u: "/tag/faberge/" }, 180 { n: "Farer", u: "/tag/farer/" }, 181 { n: "Farr + Swit", u: "/tag/farr-swit/" }, 182 { n: "Favre-Leuba", u: "/tag/favre-leuba/" }, 183 { n: "Fears Watches", u: "/tag/fears-watches/" }, 184 { n: "Ferdinand Berthoud", u: "/tag/ferdinand-berthoud/" }, 185 { n: "Fiona Kruger", u: "/tag/fiona-kruger/" }, 186 { n: "Formex", u: "/tag/formex/" }, 187 { n: "Fortis", u: "/tag/fortis/" }, 188 { n: "Franck Muller", u: "/tag/franck-muller/" }, 189 { n: "Frederique Constant", u: "/tag/frederique-constant/" }, 190 { n: "Furlan Marri", u: "/tag/furlan-marri/" }, 191 { n: "G-Shock", u: "/tag/g-shock/" }, 192 { n: "Gallet", u: "/tag/gallet/" }, 193 { n: "Garmin", u: "/tag/garmin/" }, 194 { n: "Garrick", u: "/tag/garrick/" }, 195 { n: "Genius", u: "/tag/genius/" }, 196 { n: "Genus", u: "/tag/genus/" }, 197 { n: "Georg Jensen", u: "/tag/georg-jensen/" }, 198 { n: "Gerald Charles", u: "/tag/gerald-charles/" }, 199 { n: "Gerald Genta", u: "/tag/gerald-genta/" }, 200 { n: "Girard-Perregaux", u: "/tag/girard-perregaux/" }, 201 { n: "Glashütte Original", u: "/tag/glashutte-original/" }, 202 { n: "Glycine", u: "/tag/glycine/" }, 203 { n: "Golby", u: "/tag/golby/" }, 204 { n: "GoS Watches", u: "/tag/gos-watches/" }, 205 { n: "Grand Seiko", u: "/tag/grand-seiko/" }, 206 { n: "Grandeur", u: "/tag/grandeur/" }, 207 { n: "Gravithin", u: "/tag/gravithin/" }, 208 { n: "Greubel Forsey", u: "/tag/greubel-forsey/" }, 209 { n: "Gronefeld", u: "/tag/gronefeld/" }, 210 { n: "Gruppo Gamma", u: "/tag/gruppo-gamma/" }, 211 { n: "Gucci", u: "/tag/gucci/" }, 212 { n: "H. Moser & Cie", u: "/tag/h-moser-cie/" }, 213 { n: "Habring2", u: "/tag/habring2/" }, 214 { n: "Hamilton", u: "/tag/hamilton/" }, 215 { n: "Hanhart", u: "/tag/hanhart/" }, 216 { n: "Harry Winston", u: "/tag/harry-winston/" }, 217 { n: "Haute-Rive", u: "/tag/haute-rive/" }, 218 { n: "Hautlence", u: "/tag/hautlence/" }, 219 { n: "HELM Watches", u: "/tag/helm-watches/" }, 220 { n: "Herbelin", u: "/tag/herbelin/" }, 221 { n: "Hermès", u: "/tag/hermes/" }, 222 { n: "Héron", u: "/tag/heron/" }, 223 { n: "Hesili", u: "/tag/hesili/" }, 224 { n: "Holthinrichs", u: "/tag/holthinrichs/" }, 225 { n: "Horage", u: "/tag/horage/" }, 226 { n: "HTD", u: "/tag/htd/" }, 227 { n: "Hublot", u: "/tag/hublot/" }, 228 { n: "HYT", u: "/tag/hyt/" }, 229 { n: "Ianos Watches", u: "/tag/ianos-watches/" }, 230 { n: "Ichnos", u: "/tag/ichnos/" }, 231 { n: "ID Geneve", u: "/tag/id-geneve/" }, 232 { n: "Isotope", u: "/tag/isotope/" }, 233 { n: "IWC", u: "/tag/iwc/" }, 234 { n: "Jack Mason", u: "/tag/jack-mason/" }, 235 { n: "Jacob & Co", u: "/tag/jacob-co/" }, 236 { n: "Jaeger-LeCoultre", u: "/tag/jaeger-lecoultre/" }, 237 { n: "Jaquet Droz", u: "/tag/jaquet-droz/" }, 238 { n: "Junghans", u: "/tag/junghans/" }, 239 { n: "Jurmo", u: "/tag/jurmo/" }, 240 { n: "Justin Richardson", u: "/tag/justin-richardson/" }, 241 { n: "Karl-Leimon", u: "/tag/karl-leimon/" }, 242 { n: "Kees Engelbarts", u: "/tag/kees-engelbarts/" }, 243 { n: "Kerbedanz", u: "/tag/kerbedanz/" }, 244 { n: "Kienzle", u: "/tag/kienzle/" }, 245 { n: "Kieser Design", u: "/tag/kieser-design/" }, 246 { n: "Knot Designs", u: "/tag/knot-designs/" }, 247 { n: "kollokium", u: "/tag/kollokium/" }, 248 { n: "Konstantin Chaykin", u: "/tag/konstantin-chaykin/" }, 249 { n: "Krayon", u: "/tag/krayon/" }, 250 { n: "Kross Studio", u: "/tag/kross-studio/" }, 251 { n: "Kudoke", u: "/tag/kudoke/" }, 252 { n: "Kuoe Kyoto", u: "/tag/kuoe-kyoto/" }, 253 { n: "Kurono", u: "/tag/kurono/" }, 254 { n: "Laco", u: "/tag/laco/" }, 255 { n: "Laurent Ferrier", u: "/tag/laurent-ferrier/" }, 256 { n: "Lebois & Co", u: "/tag/lebois-co/" }, 257 { n: "Lederer", u: "/tag/lederer/" }, 258 { n: "Lilienthal", u: "/tag/lilienthal/" }, 259 { n: "Linde Werdelin", u: "/tag/linde-werdelin/" }, 260 { n: "Liv Watches", u: "/tag/liv-watches/" }, 261 { n: "Löbner", u: "/tag/lobner/" }, 262 { n: "Longines", u: "/tag/longines/" }, 263 { n: "Louis Chevrolet", u: "/tag/louis-chevrolet/" }, 264 { n: "Louis Erard", u: "/tag/louis-erard/" }, 265 { n: "Louis Moinet", u: "/tag/louis-moinet/" }, 266 { n: "Louis Vuitton", u: "/tag/louis-vuitton/" }, 267 { n: "Maen", u: "/tag/maen/" }, 268 { n: "Magrette", u: "/tag/magrette/" }, 269 { n: "Makina", u: "/tag/makina/" }, 270 { n: "Marathon", u: "/tag/marathon/" }, 271 { n: "March LA.B", u: "/tag/march-la-b/" }, 272 { n: "Marloe Watch Company", u: "/tag/marloe-watch-company/" }, 273 { n: "Marnaut", u: "/tag/marnaut/" }, 274 { n: "Massena LAB", u: "/tag/massena-lab/" }, 275 { n: "Matthew Mercury", u: "/tag/matthew-mercury/" }, 276 { n: "Maurice Lacroix", u: "/tag/maurice-lacroix/" }, 277 { n: "Mauron Musy", u: "/tag/mauron-musy/" }, 278 { n: "MB&F", u: "/tag/mbf/" }, 279 { n: "McQuaide", u: "/tag/mcquaide/" }, 280 { n: "Meccaniche Veloci", u: "/tag/meccaniche-veloci/" }, 281 { n: "MeisterSinger", u: "/tag/meistersinger/" }, 282 { n: "Memorigin", u: "/tag/memorigin/" }, 283 { n: "Micromilspec", u: "/tag/micromilspec/" }, 284 { n: "Mido", u: "/tag/mido/" }, 285 { n: "Millar Watches", u: "/tag/millar-watches/" }, 286 { n: "Milus", u: "/tag/milus/" }, 287 { n: "Minase", u: "/tag/minase/" }, 288 { n: "Ming Watches", u: "/tag/ming-watches/" }, 289 { n: "Möels & Co.", u: "/tag/moels-co/" }, 290 { n: "Molnar Fabry", u: "/tag/molnar-fabry/" }, 291 { n: "Monbrey", u: "/tag/monbrey/" }, 292 { n: "Mondaine", u: "/tag/mondaine/" }, 293 { n: "Monovant", u: "/tag/monovant/" }, 294 { n: "Montblanc", u: "/tag/montblanc/" }, 295 { n: "Montford", u: "/tag/montford/" }, 296 { n: "Moritz Grossmann", u: "/tag/moritz-grossmann/" }, 297 { n: "Mr Jones", u: "/tag/mr-jones/" }, 298 { n: "Mühle-Glashütte", u: "/tag/muhle-glashutte/" }, 299 { n: "Nalla Neram", u: "/tag/nalla-neram/" }, 300 { n: "Namica", u: "/tag/namica/" }, 301 { n: "Naoya Hida", u: "/tag/naoya-hida/" }, 302 { n: "Neotype", u: "/tag/neotype/" }, 303 { n: "Neucarl", u: "/tag/neucarl/" }, 304 { n: "Nivada Grenchen", u: "/tag/nivada-grenchen/" },
305 { n: "Nodus", u: "/tag/nodus/" }, 306 { n: "Nomadic", u: "/tag/nomadic/" }, 307 { n: "Nomos", u: "/tag/nomos/" }, 308 { n: "Norqain", u: "/tag/norqain/" }, 309 { n: "Oceaneva", u: "/tag/oceaneva/" }, 310 { n: "Ochs und Junior", u: "/tag/ochs-und-junior/" }, 311 { n: "Olivier Meylan", u: "/tag/olivier-meylan/" }, 312 { n: "Ollech & Wajs", u: "/tag/ollech-and-wajs/" }, 313 { n: "Omega", u: "/tag/omega/" }, 314 { n: "Omologato", u: "/tag/omologato/" }, 315 { n: "Orient", u: "/tag/orient/" }, 316 { n: "Orient Star", u: "/tag/orient-star/" }, 317 { n: "Oris", u: "/tag/oris/" }, 318 { n: "Panerai", u: "/tag/panerai/" }, 319 { n: "Parmigiani", u: "/tag/parmigiani/" }, 320 { n: "Patek Philippe", u: "/tag/patek-philippe/" }, 321 { n: "Paulin", u: "/tag/paulin/" }, 322 { n: "Pequignet", u: "/tag/pequignet/" }, 323 { n: "Perun", u: "/tag/perun/" }, 324 { n: "Philippe Dufour", u: "/tag/philippe-dufour/" }, 325 { n: "Piaget", u: "/tag/piaget/" }, 326 { n: "Pinion", u: "/tag/pinion/" }, 327 { n: "Pitot", u: "/tag/pitot/" }, 328 { n: "Pompeak", u: "/tag/pompeak/" }, 329 { n: "Porsche Design", u: "/tag/porsche-design/" }, 330 { n: "Praesidus Watch Co", u: "/tag/praesidus-watch-co/" }, 331 { n: "Protek", u: "/tag/protek/" }, 332 { n: "Purnell", u: "/tag/purnell/" }, 333 { n: "Rado", u: "/tag/rado/" }, 334 { n: "Raketa", u: "/tag/raketa/" }, 335 { n: "Ralf Tech", u: "/tag/ralf-tech/" }, 336 { n: "Raymond Weil", u: "/tag/raymond-weil/" }, 337 { n: "Rebellion Timepieces", u: "/tag/rebellion-timepieces/" }, 338 { n: "REC Watches", u: "/tag/rec-watches/" }, 339 { n: "Renaud Tixier", u: "/tag/renaud-tixier/" }, 340 { n: "Reservoir", u: "/tag/reservoir/" }, 341 { n: "Ressence", u: "/tag/ressence/" }, 342 { n: "Rexhep Rexhepi", u: "/tag/rexhep-rexhepi/" }, 343 { n: "RGM", u: "/tag/rgm/" }, 344 { n: "Richard Mille", u: "/tag/richard-mille/" }, 345 { n: "Riley Watch Co.", u: "/tag/riley-watch-co/" }, 346 { n: "RJ Watches", u: "/tag/rj-watches/" }, 347 { n: "Roger Dubuis", u: "/tag/roger-dubuis/" }, 348 { n: "Rolex", u: "/tag/rolex/" }, 349 { n: "Rosenbusch", u: "/tag/rosenbusch/" }, 350 { n: "Rotary Watches", u: "/tag/rotary-watches/" }, 351 { n: "RZE", u: "/tag/rze/" }, 352 { n: "Sartory Billard", u: "/tag/sartory-billard/" }, 353 { n: "Schofield", u: "/tag/schofield/" }, 354 { n: "Schwarz Etienne", u: "/tag/schwarz-etienne/" }, 355 { n: "Second Hour", u: "/tag/second-hour/" }, 356 { n: "seconde/seconde/", u: "/tag/seconde-seconde/" }, 357 { n: "Seiko", u: "/tag/seiko/" }, 358 { n: "Selten", u: "/tag/selten/" }, 359 { n: "Sequent", u: "/tag/sequent/" }, 360 { n: "Serica", u: "/tag/serica/" }, 361 { n: "Seryn", u: "/tag/seryn/" }, 362 { n: "SevenFriday", u: "/tag/sevenfriday/" }, 363 { n: "Sherpa", u: "/tag/sherpa/" }, 364 { n: "Sherwood", u: "/tag/sherwood/" }, 365 { n: "Signum", u: "/tag/signum/" }, 366 { n: "Simon Brette", u: "/tag/simon-brette/" }, 367 { n: "Singer Reimagined", u: "/tag/singer-reimagined/" }, 368 { n: "Singer Watches", u: "/tag/singer-watches/" }, 369 { n: "Sinn", u: "/tag/sinn/" }, 370 { n: "Skeleton Concept", u: "/tag/skeleton-concept/" }, 371 { n: "Sopwith", u: "/tag/sopwith/" }, 372 { n: "Sortie", u: "/tag/sortie/" }, 373 { n: "SOVRYGN", u: "/tag/sovrygn/" }, 374 { n: "SpaceOne", u: "/tag/spaceone/" }, 375 { n: "Speake Marin", u: "/tag/speake-marin/" }, 376 { n: "Sphaera", u: "/tag/sphaera/" }, 377 { n: "Spinnaker", u: "/tag/spinnaker/" }, 378 { n: "Squale", u: "/tag/squale/" }, 379 { n: "Stella", u: "/tag/stella/" }, 380 { n: "Stewart Dawson", u: "/tag/stewart-dawson/" }, 381 { n: "Stollenwurm", u: "/tag/stollenwurm/" }, 382 { n: "Stowa", u: "/tag/stowa/" }, 383 { n: "Straum", u: "/tag/straum/" }, 384 { n: "Strehler", u: "/tag/strehler/" }, 385 { n: "Studio Underd0g", u: "/tag/studio-underd0g/" }, 386 { n: "Swatch", u: "/tag/swatch/" }, 387 { n: "Tag Heuer", u: "/tag/tag-heuer/" }, 388 { n: "Temporal Goods", u: "/tag/temporal-goods/" }, 389 { n: "Tiffany & Co.", u: "/tag/tiffany-co/" }, 390 { n: "Timex", u: "/tag/timex/" }, 391 { n: "Tissot", u: "/tag/tissot/" }, 392 { n: "Toledano & Chan", u: "/tag/toledano-chan/" }, 393 { n: "Tolentino", u: "/tag/tolentino/" }, 394 { n: "Tool Watch Co.", u: "/tag/tool-watch-co/" }, 395 { n: "Trilobe", u: "/tag/trilobe/" }, 396 { n: "Tudor", u: "/tag/tudor/" }, 397 { n: "Tutima", u: "/tag/tutima/" }, 398 { n: "U-Boat", u: "/tag/u-boat/" }, 399 { n: "Ulysse Nardin", u: "/tag/ulysse-nardin/" }, 400 { n: "Undone", u: "/tag/undone/" }, 401 { n: "Unimatic", u: "/tag/unimatic/" }, 402 { n: "Union Glashütte", u: "/tag/union-glashutte/" }, 403 { n: "Universal Genève", u: "/tag/universal-geneve/" }, 404 { n: "Urban Jurgensen", u: "/tag/urban-jurgensen/" }, 405 { n: "Urwerk", u: "/tag/urwerk/" }, 406 { n: "Vacheron Constantin", u: "/tag/vacheron-constantin/" }, 407 { n: "Vaer", u: "/tag/vaer/" }, 408 { n: "Valimor", u: "/tag/valimor/" }, 409 { n: "Van Brauge", u: "/tag/van-brauge/" }, 410 { n: "Van Cleef & Arpels", u: "/tag/van-cleef-arpels/" }, 411 { n: "Vario", u: "/tag/vario/" }, 412 { n: "Venezianico", u: "/tag/venezianico/" }, 413 { n: "Vertex", u: "/tag/vertex/" }, 414 { n: "Victorinox", u: "/tag/victorinox/" }, 415 { n: "Vincent Calabrese", u: "/tag/vincent-calabrese/" }, 416 { n: "Vivvant", u: "/tag/vivvant/" }, 417 { n: "Von Doren", u: "/tag/von-doren/" }, 418 { n: "Vostra", u: "/tag/vostra/" }, 419 { n: "Voutilainen", u: "/tag/voutilainen/" }, 420 { n: "Vulcain", u: "/tag/vulcain/" }, 421 { n: "Waldor & Co.", u: "/tag/waldor-co/" }, 422 { n: "Wessex Watches", u: "/tag/wessex-watches/" }, 423 { n: "William Wood", u: "/tag/william-wood/" }, 424 { n: "Wolkov", u: "/tag/wolkov/" }, 425 { n: "Yema", u: "/tag/yema/" }, 426 { n: "Zannetti", u: "/tag/zannetti/" }, 427 { n: "Zanuti", u: "/tag/zanuti/" }, 428 { n: "Zenith", u: "/tag/zenith/" }, 429 { n: "Zeppelin Watches", u: "/tag/zeppelin-watches/" }, 430 { n: "Zero West", u: "/tag/zero-west/" }, 431 { n: "Zodiac", u: "/tag/zodiac-watches/" }, 432 { n: "Sea-Gull", u: "/tag/sea-gull/" }, 433 { n: "O&HoraPictor", u: "/tag/horapictor/" } 434 ]; 435; 436window.FacebookSignal = window.FacebookSignal || { 437 _held: false, 438 _releasing: false, 439 _pixelInitialized: false, 440 _pixelId: null, 441 _pixelUserInfo: {}, 442 _pixelOptions: {}, 443 _pendingPixelEvents: [], 444 _queue: [], 445 _config: {}, 446 _seenEventIds: {}, 447 _fbclid: (function () { 448 try { 449 var match = window.location.search.match(/[?&]fbclid=([^&]*)/); 450 return match ? decodeURIComponent(match[1]) : null; 451 } catch (e) { 452 return null; 453 } 454 })(), 455 456 _readCookie: function (name) { 457 try { 458 var pairs = (document.cookie || '').split(';'); 459 for (var i = 0; i < pairs.length; i++) { 460 var pair = pairs[i].replace(/^\s+/, ''); 461 if (pair.indexOf(name + '=') === 0) { 462 return decodeURIComponent(pair.substring(name.length + 1)); 463 } 464 } 465 } catch (e) {} 466 return null; 467 }, 468 469 init: function (config) { 470 this._config = config || {}; 471 this._attribution = this._config.attribution || {}; 472
473 // Read cookie directly so cached pages resolve the correct held/active 474 // state even when PHP rendered held: false. 475 var cookieState = this._readCookie('wc_facebook_signals_state'); 476 this._held = cookieState ? cookieState === 'held' : !!this._config.held; 477 478 // Sync consent immediately so fbevents.js obeys the current state. 479 if (typeof fbq === 'function') { 480 fbq('consent', this._held ? 'revoke' : 'grant'); 481 } 482 483 try { 484 var raw = window.sessionStorage.getItem('fbpix_seen_event_ids'); 485 this._seenEventIds = raw ? JSON.parse(raw) : {}; 486 } catch (e) { 487 this._seenEventIds = this._seenEventIds || {}; 488 } 489 }, 490 491 initPixel: function (pixelId, userInfo, options) { 492 this._pixelId = pixelId; 493 this._pixelUserInfo = 494 userInfo && typeof userInfo === 'object' && !Array.isArray(userInfo) 495 ? userInfo 496 : {}; 497 this._pixelOptions = options || {}; 498 if (!this._held) { 499 this._runPixelInit(); 500 } 501 }, 502 503 _runPixelInit: function () { 504 if (this._pixelInitialized || !this._pixelId || typeof fbq !== 'function') { 505 return; 506 } 507 if (this._pixelOptions && this._pixelOptions.includeCapiIntegration) { 508 var url = window.location.origin + '?ob=open-bridge'; 509 fbq('set', 'openbridge', this._pixelId, url); 510 } 511 512 if (this._config.capig === '1') { 513 fbq('optinMetaEnabledCapi', this._pixelId); 514 } 515 516 fbq('init', this._pixelId, this._pixelUserInfo, this._pixelOptions); 517 518 this._pixelInitialized = true; 519 this._flushPendingPixelEvents(); 520 }, 521 522 _flushPendingPixelEvents: function () { 523 var pending = this._pendingPixelEvents; 524 this._pendingPixelEvents = []; 525 for (var i = 0; i < pending.length; i++) { 526 var ev = pending[i]; 527 this._firePixelEvent(ev.name, ev.params, ev.method, ev.eventId); 528 } 529 }, 530 531 _fireOrQueuePixelEvent: function (name, params, method, eventId) { 532 if (!this._pixelInitialized) { 533 this._pendingPixelEvents.push({ 534 name: name, 535 params: params || {}, 536 method: method || 'track', 537 eventId: eventId || null, 538 }); 539 return; 540 } 541 this._firePixelEvent(name, params || {}, method || 'track', eventId || null); 542 }, 543 544 _firePixelEvent: function (name, params, method, eventId) { 545 method = method || 'track'; 546 if (eventId) { 547 fbq(method, name, params || {}, { eventID: eventId }); 548 } else { 549 fbq(method, name, params || {}); 550 } 551 }, 552 553 _syncCookie: function (name, serverValue, domain) { 554 if (!serverValue) { 555 return; 556 } 557 var encoded = encodeURIComponent(serverValue); 558 var match = document.cookie.match( 559 new RegExp('(?:^|;\\s*)' + name + '=([^;]*)'), 560 ); 561 var current = match ? match[1] : null; 562 if (current && current !== encoded) { 563 var cookie = 564 name + '=' + encoded + ';path=/;max-age=7776000;SameSite=Lax'; 565 if (domain) { 566 cookie += ';domain=' + domain; 567 } 568 document.cookie = cookie; 569 } 570 }, 571 572 queueEvent: function (eventData) { 573 if (!eventData || !eventData.event_name) { 574 return; 575 } 576 577 if (eventData.event_id && this._seenEventIds[eventData.event_id]) { 578 return; 579 } 580 581 eventData.event_time = 582 eventData.event_time || Math.floor(Date.now() / 1000); 583 eventData.event_source_url = 584 eventData.event_source_url || window.location.href; 585 this._queue.push(eventData); 586 587 if (eventData.event_id) { 588 this._seenEventIds[eventData.event_id] = 1; 589 try { 590 window.sessionStorage.setItem( 591 'fbpix_seen_event_ids', 592 JSON.stringify(this._seenEventIds), 593 ); 594 } catch (e) {} 595 } 596 }, 597 598 trackEvent: function (name, params, userData, method, eventId) { 599 method = method || 'track'; 600 eventId = eventId || (params && params.eventID) || null; 601 602 if (this._held) { 603 this.queueEvent({ 604 event_name: name, 605 custom_data: params || {}, 606 event_id: eventId, 607 event_time: Math.floor(Date.now() / 1000), 608 method: method, 609 }); 610 } else { 611 this._fireOrQueuePixelEvent(name, params || {}, method, eventId); 612 } 613 }, 614 615 hold: function () { 616 this._held = true; 617 fbq('consent', 'revoke'); 618 }, 619 620 release: function () { 621 var self = this; 622 623 if (!self._held || self._releasing || !self._config.ajaxUrl) { 624 return Promise.resolve({ success: true, data: { sent_count: 0 } }); 625 } 626 627 self._releasing = true; 628 629 return new Promise(function (resolve, reject) { 630 var xhr = new XMLHttpRequest(); 631 var url = 632 self._config.ajaxUrl + 633 (self._config.ajaxUrl.indexOf('?') === -1 ? '?' : '&') + 634 'action=' + 635 encodeURIComponent(self._config.releaseAction); 636 637 xhr.open('POST', url, true); 638 xhr.setRequestHeader('Content-Type', 'application/json'); 639 xhr.onload = function () { 640 if (xhr.status < 200 || xhr.status >= 300) { 641 self._releasing = false;
642 reject(new Error('Release AJAX failed: ' + xhr.status)); 643 return; 644 } 645 646 try { 647 var response = JSON.parse(xhr.responseText); 648 self._handleReleaseResponse(response.data || {}); 649 self._releasing = false; 650 resolve(response); 651 } catch (error) { 652 self._releasing = false; 653 reject(error); 654 } 655 }; 656 xhr.onerror = function () { 657 self._releasing = false; 658 reject(new Error('Network error')); 659 }; 660 var attribution = self._config.attribution || {}; 661 xhr.send( 662 JSON.stringify({ 663 events: self._queue, 664 fbclid: self._fbclid, 665 fbp: self._readCookie('_fbp') || attribution.fbp || null, 666 fbc: self._readCookie('_fbc') || attribution.fbc || null, 667 }), 668 ); 669 }); 670 }, 671 672 _handleReleaseResponse: function (data) { 673 var attr = this._config.attribution || {}; 674 var fbpValue = data.fbp || attr.fbp; 675 var fbcValue = data.fbc || attr.fbc; 676 677 if (fbpValue) { 678 var fbpCookie = 679 '_fbp=' + encodeURIComponent(fbpValue) + ';path=/;max-age=7776000;SameSite=Lax'; 680 if (attr.fbpDomain) { 681 fbpCookie += ';domain=' + attr.fbpDomain; 682 } 683 document.cookie = fbpCookie; 684 } 685 686 if (fbcValue) { 687 var fbcCookie = 688 '_fbc=' + encodeURIComponent(fbcValue) + ';path=/;max-age=7776000;SameSite=Lax'; 689 if (attr.fbcDomain) { 690 fbcCookie += ';domain=' + attr.fbcDomain; 691 } 692 document.cookie = fbcCookie; 693 } 694 695 // Update user_info with fresh AAM data from the release response, then 696 // run (or re-run) fbq('init') so the pixel has correct user_info. 697 if ( 698 data.user_info && 699 typeof data.user_info === 'object' && 700 !Array.isArray(data.user_info) 701 ) { 702 this._pixelUserInfo = data.user_info; 703 } 704 this._pixelInitialized = false; 705 this._runPixelInit(); 706 707 fbq('consent', 'grant'); 708 709 for (var i = 0; i < this._queue.length; i++) { 710 var queuedEvent = this._queue[i]; 711 var customData = queuedEvent.custom_data || {}; 712 var trackMethod = queuedEvent.method || (queuedEvent.is_custom ? 'trackCustom' : 'track'); 713 if (queuedEvent.event_id) { 714 fbq(trackMethod, queuedEvent.event_name, customData, { 715 eventID: queuedEvent.event_id, 716 }); 717 } else { 718 fbq(trackMethod, queuedEvent.event_name, customData); 719 } 720 } 721 722 this._queue = []; 723 this._held = false; 724 this._releasing = false; 725 }, 726}; 727 728window.fbwcsignal = window.fbwcsignal || {}; 729(function (api) { 730 var signalConfig = window.facebookSignalConfig || {}; 731 var cookieName = signalConfig.cookieName || ''; 732 var ajaxUrl = signalConfig.ajaxUrl || ''; 733 var signalsAction = signalConfig.signalsAction || ''; 734 var signalsNonce = signalConfig.signalsNonce || ''; 735 736 function setCookie(value) { 737 var expires = new Date(); 738 expires.setTime(expires.getTime() + 365 * 24 * 60 * 60 * 1000); 739 document.cookie = 740 cookieName + 741 '=' + 742 encodeURIComponent(value) + 743 ';expires=' + 744 expires.toUTCString() + 745 ';path=/;SameSite=Lax'; 746 } 747 748 function getCookie() { 749 var match = document.cookie.match( 750 new RegExp('(?:^|;\\s*)' + cookieName + '=([^;]*)'), 751 ); 752 return match ? decodeURIComponent(match[1]) : null; 753 } 754 755 function updateState(state) { 756 var normalizedState = state === 'active' ? 'active' : 'held'; 757 setCookie(normalizedState); 758 759 return new Promise(function (resolve, reject) { 760 var xhr = new XMLHttpRequest(); 761 xhr.open('POST', ajaxUrl, true); 762 xhr.setRequestHeader( 763 'Content-Type', 764 'application/x-www-form-urlencoded; charset=UTF-8', 765 ); 766 xhr.onload = function () { 767 if (xhr.status < 200 || xhr.status >= 300) { 768 reject(new Error('Signals AJAX failed: ' + xhr.status)); 769 return; 770 } 771 772 try { 773 var response = JSON.parse(xhr.responseText); 774 if (normalizedState === 'held') { 775 window.FacebookSignal.hold(); 776 resolve(response); 777 return; 778 } 779 780 if (window.FacebookSignal && window.FacebookSignal._held) { 781 window.FacebookSignal.release().then( 782 function () { 783 resolve(response); 784 }, 785 function (error) { 786 reject(error); 787 }, 788 ); 789 return; 790 } 791 792 resolve(response); 793 } catch (error) { 794 reject(error); 795 } 796 }; 797 xhr.onerror = function () { 798 reject(new Error('Network error')); 799 }; 800 xhr.send( 801 'action=' + 802 encodeURIComponent(signalsAction) + 803 '&security=' + 804 encodeURIComponent(signalsNonce) + 805 '&state=' + 806 encodeURIComponent(normalizedState), 807 ); 808 }); 809 } 810 811 api.hold = function () { 812 return updateState('held'); 813 }; 814 815 api.release = function () { 816 return updateState('active'); 817 }; 818 819 api.getState = function () { 820 var value = getCookie(); 821 if (value === 'active' || value === 'held') { 822 return value; 823 } 824 return null; 825 }; 826})(window.fbwcsignal); 827; 828FacebookSignal.init({"held":false,"ajaxUrl":"https:\/\/oracleoftime.com\/wp-admin\/admin-ajax.php","releaseAction":"fbpix_release_signals","pixelId":"327234531706541","attribution":{},"capig":"1"});FacebookSignal.initPixel("327234531706541",{},{"agent":"wordpress_0-7.1.2-5.2.2","includeCapiIntegration":true});; 829(function () { 830 var resizeTimer; 831 window.addEventListener('resize', function () { 832 document.body.classList.add('ot-is-resizing'); 833 clearTimeout(resizeTimer); 834 resizeTimer = setTimeout(function () { 835 document.body.classList.remove('ot-is-resizing'); 836 }, 150); 837 }); 838 })();; 839(function () { 840 var body = document.body; 841 console.log("[OT header] build 2026-07-22c \u2014 zoom-proof multicol + live scroll relayout ACTIVE"); 842 var burger = document.getElementById("otBurger"); 843 var drawer = document.getElementById("otDrawer"); 844 var menuBackdrop = document.getElementById("otBackdrop"); 845 var menuCloseBtn = document.getElementById("otMenuClose"); 846 var navbar = document.getElementById("otNavbar"); 847 var headerTop = document.getElementById("header"); 848 var topSearchBtn = document.getElementById("otTopSearchBtn"); 849 var desktopSearchBtn = document.getElementById("otDesktopSearchBtn"); 850 var searchDrop = document.getElementById("otSearchDrop"); 851 var searchDropClose = document.getElementById("otSearchDropClose"); 852 var searchBackdrop = document.getElementById("otSearchBackdrop"); 853 var mobileSearchInput = document.querySelector(".ot-mmenu__search-input"); 854 var mobileSearchClearText = document.getElementById("otMobileSearchClearText"); 855 if (!navbar) return; 856 function isMobileOrTouch() { 857 return window.matchMedia("(max-width: 1280px)").matches || 858 ("ontouchstart" in window) || 859 (navigator.maxTouchPoints > 0) || 860 window.matchMedia("(pointer: coarse)").matches; 861 } 862 function lockScroll() { 863 if (!isMobileOrTouch()) return; 864 body.classList.add("ot-lock-scroll"); 865 document.addEventListener("touchmove", handleTouchMove, { passive: false }); 866 } 867 function unlockScroll() { 868 document.removeEventListener("touchmove", handleTouchMove); 869 body.classList.remove("ot-lock-scroll"); 870 } 871 function handleTouchMove(e) { 872 var scrollEl = drawer ? drawer.querySelector(".ot-mmenu__scroll") : null; 873 if (!scrollEl || !scrollEl.contains(e.target)) { 874 e.preventDefault(); 875 return; 876 } 877 if (scrollEl.scrollHeight <= scrollEl.clientHeight) e.preventDefault(); 878 } 879 var isMenuOpen = function () { 880 return body.classList.contains("ot-menu-open"); 881 }; 882 /* ========================================================= 883 FIX: Drawer slide is driven by a requestAnimationFrame 884 loop â the same technique jQuery Sidr uses under the 885 hood. Each open/close spins up a fresh animation that 886 re-reads its starting position, so it never depends on 887 a pre-existing GPU compositor layer. This makes it 888 completely immune to iOS bfcache layer eviction â the 889 slide runs smoothly every time, identical to the old 890 Sidr-based header. 891 ========================================================= */ 892 var drawerRAF = null; 893 var drawerAnimStart = 0; 894 // cubic-bezier(.4, 0, .2, 1) â matches the old CSS easing 895 function easeInOut(t) { 896 return t < 0.5 897 ? 2 * t * t 898 : 1 - Math.pow(-2 * t + 2, 2) / 2; 899 } 900 function slideDrawer(isOpening) { 901 if (!drawer) return; 902 // Cancel any in-flight animation so we always start clean 903 if (drawerRAF) { 904 cancelAnimationFrame(drawerRAF); 905 drawerRAF = null; 906 } 907 var duration = 280; 908 var startPct = isOpening ? -100 : 0; 909 var endPct = isOpening ? 0 : -100; 910 drawerAnimStart = 0; 911 function step(timestamp) { 912 if (!drawerAnimStart) drawerAnimStart = timestamp; 913 var elapsed = timestamp - drawerAnimStart; 914 var progress = Math.min(elapsed / duration, 1); 915 var eased = easeInOut(progress); 916 var currentPct = startPct + (endPct - startPct) * eased; 917 drawer.style.transform = 918 "translate3d(" + currentPct + "%, 0, 0)"; 919 if (progress < 1) { 920 drawerRAF = requestAnimationFrame(step); 921 } else { 922 // Let CSS take over the final resting state 923 drawer.style.transform = ""; 924 drawerRAF = null; 925 } 926 } 927 drawerRAF = requestAnimationFrame(step); 928 } 929 function openMenu() { 930 closeSearch(); 931 if (drawer) drawer.setAttribute("aria-hidden", "false"); 932 if (menuBackdrop) menuBackdrop.setAttribute("aria-hidden", "false"); 933 body.classList.add("ot-menu-open"); 934 if (burger) burger.setAttribute("aria-expanded", "true"); 935 slideDrawer(true); 936 lockScroll(); 937 initDrawerAccordions(); 938 } 939 function closeMenu() { 940 body.classList.remove("ot-menu-open"); 941 if (drawer) drawer.setAttribute("aria-hidden", "true"); 942 if (menuBackdrop) menuBackdrop.setAttribute("aria-hidden", "true"); 943 if (burger) burger.setAttribute("aria-expanded", "false"); 944 slideDrawer(false); 945 unlockScroll(); 946 } 947 function toggleMenu() { 948 isMenuOpen() ? closeMenu() : openMenu(); 949 } 950 var isSearchOpen = function () { 951 return navbar.classList.contains("search-open"); 952 }; 953 function getSearchInput() { 954 return searchDrop ? searchDrop.querySelector('input[name="s"], input[type="search"]') : null; 955 } 956 function syncClearText() { 957 if (!searchDropClose) return; 958 var input = getSearchInput(); 959 if (!input) return; 960 searchDropClose.classList.toggle("is-visible", !!(input.value && input.value.trim().length)); 961 } 962 function focusSearchInput() { 963 var input = getSearchInput(); 964 if (!input) return; 965 try { input.focus({ preventScroll: true }); } catch (e) { input.focus(); } 966 var v = input.value || ""; 967 try { input.setSelectionRange(v.length, v.length); } catch (e) {} 968 } 969 function openSearch() { 970 closeMenu(); 971 navbar.classList.add("search-open"); 972 body.classList.add("ot-search-open"); 973 if (searchDrop) searchDrop.setAttribute("aria-hidden", "false"); 974 if (searchBackdrop) searchBackdrop.setAttribute("aria-hidden", "false"); 975 if (topSearchBtn) topSearchBtn.setAttribute("aria-label", "Close search"); 976 if (desktopSearchBtn) desktopSearchBtn.setAttribute("aria-label", "Close search"); 977 lockScroll(); 978 focusSearchInput(); 979 syncClearText(); 980 } 981 function closeSearch() { 982 navbar.classList.remove("search-open"); 983 body.classList.remove("ot-search-open"); 984 if (searchBackdrop) searchBackdrop.setAttribute("aria-hidden", "true"); 985 if (topSearchBtn) topSearchBtn.setAttribute("aria-label", "Search"); 986 if (desktopSearchBtn) desktopSearchBtn.setAttribute("aria-label", "Search"); 987 unlockScroll(); 988 if (searchDrop) searchDrop.setAttribute("aria-hidden", "true"); 989 var input = getSearchInput(); 990 if (input) input.value = ""; 991 syncClearText(); 992 } 993 function toggleSearch() { 994 isSearchOpen() ? closeSearch() : openSearch(); 995 } 996 if (burger) { 997 burger.addEventListener("click", function (e) { 998 e.preventDefault(); 999 e.stopPropagation(); 1000 toggleMenu(); 1001 }); 1002 } 1003 if (menuCloseBtn) { 1004 menuCloseBtn.addEventListener("click", function (e) { 1005 e.preventDefault(); 1006 closeMenu(); 1007 }); 1008 } 1009 if (menuBackdrop) { 1010 menuBackdrop.addEventListener("click", function (e) { 1011 e.preventDefault(); 1012 closeMenu(); 1013 }); 1014 } 1015 if (topSearchBtn) { 1016 topSearchBtn.addEventListener("click", function (e) { 1017 e.preventDefault(); 1018 e.stopPropagation(); 1019 toggleSearch(); 1020 }); 1021 } 1022 if (desktopSearchBtn) { 1023 desktopSearchBtn.addEventListener("click", function (e) { 1024 e.preventDefault(); 1025 e.stopPropagation(); 1026 toggleSearch(); 1027 }); 1028 } 1029 /* Clear-only: the in-field X wipes the query and refocuses. 1030 Closing the panel is the navbar trigger (now an X while 1031 open), the backdrop, or Escape. */ 1032 if (searchDropClose) { 1033 searchDropClose.addEventListener("click", function (e) { 1034 e.preventDefault(); 1035 e.stopPropagation(); 1036 var input = getSearchInput(); 1037 if (!input) return; 1038 input.value = ""; 1039 syncClearText(); 1040 focusSearchInput(); 1041 }); 1042 } 1043 if (searchDrop) { 1044 var si = getSearchInput(); 1045 if (si) { 1046 si.addEventListener("input", syncClearText); 1047 si.addEventListener("change", syncClearText); 1048 } 1049 } 1050 if (searchBackdrop) { 1051 searchBackdrop.addEventListener("click", function (e) { 1052 e.preventDefault(); 1053 closeSearch(); 1054 }); 1055 } 1056 function syncMobileClearText() { 1057 if (!mobileSearchClearText || !mobileSearchInput) return; 1058 mobileSearchClearText.classList.toggle( 1059 "is-visible", 1060 !!(mobileSearchInput.value && mobileSearchInput.value.trim().length) 1061 ); 1062 } 1063 if (mobileSearchInput) { 1064 mobileSearchInput.addEventListener("input", syncMobileClearText); 1065 mobileSearchInput.addEventListener("change", syncMobileClearText); 1066 } 1067 if (mobileSearchClearText) { 1068 mobileSearchClearText.addEventListener("click", function (e) { 1069 e.preventDefault(); 1070 e.stopPropagation(); 1071 if (!mobileSearchInput) return; 1072 mobileSearchInput.value = ""; 1073 syncMobileClearText(); 1074 try { mobileSearchInput.focus({ preventScroll: true }); } catch (err) { mobileSearchInput.focus(); } 1075 }); 1076 } 1077 syncMobileClearText(); 1078 document.addEventListener("keydown", function (e) { 1079 if (e.key === "Escape") { 1080 if (isMenuOpen()) closeMenu(); 1081 if (isSearchOpen()) closeSearch(); 1082 } 1083 }); 1084 /* Accordion timing scaled to content height: small panels 1085 snap (~220ms), big ones glide (up to ~420ms), so every 1086 panel lands with the same perceived tempo. */ 1087 function panelDuration(px) { 1088 return Math.round(Math.max(220, Math.min(420, px * 0.55))); 1089 } 1090 function toggleAccordion(li, forceState) { 1091 var panel = li.querySelector(":scope > ul.sub-menu"); 1092 var toggle = li.querySelector(":scope > .ot-mmenu__toggle"); 1093 if (!panel) return; 1094 // height takes the full duration; opacity resolves a 1095 // beat sooner so content reads before the box finishes 1096 var d = panelDuration(panel.scrollHeight); 1097 panel.style.transitionDuration = d + "ms, " + Math.round(d * 0.75
1097) + "ms"; 1098 var isOpen = typeof forceState === "boolean" ? !forceState : li.classList.contains("open"); 1099 if (isOpen) { 1100 panel.style.maxHeight = panel.scrollHeight + "px"; 1101 panel.offsetHeight; 1102 panel.style.maxHeight = ""; 1103 li.classList.remove("open"); 1104 if (toggle) toggle.setAttribute("aria-expanded", "false"); 1105 } else { 1106 panel.style.maxHeight = panel.scrollHeight + "px"; 1107 li.classList.add("open"); 1108 if (toggle) toggle.setAttribute("aria-expanded", "true"); 1109 var onEnd = function () { 1110 if (li.classList.contains("open")) { 1111 panel.style.maxHeight = "none"; 1112 } 1113 panel.removeEventListener("transitionend", onEnd); 1114 }; 1115 panel.addEventListener("transitionend", onEnd); 1116 } 1117 } 1118 function initDrawerAccordions() { 1119 var list = drawer ? drawer.querySelector(".ot-mmenu__list") : null; 1120 if (!list) return; 1121 list.querySelectorAll("li.menu-item-has-children").forEach(function (li) { 1122 var trigger = li.querySelector(":scope > a, :scope > .menu-toggle-parent"); 1123 var panel = li.querySelector(":scope > ul.sub-menu"); 1124 if (!trigger || !panel) return; 1125 if (trigger.tagName && trigger.tagName.toLowerCase() === "a") { 1126 var junk = trigger.querySelectorAll("i, span, [class*='toggle'], [class*='arrow'], [class*='caret']"); 1127 junk.forEach(function (el) { el.remove(); }); 1128 } 1129 if (!li.querySelector(".ot-mmenu__toggle")) { 1130 var btn = document.createElement("button"); 1131 btn.type = "button"; 1132 btn.className = "ot-mmenu__toggle"; 1133 btn.setAttribute("aria-label", "Toggle submenu"); 1134 btn.setAttribute("aria-expanded", "false"); 1135 btn.innerHTML = 1136 '<svg viewBox="0 0 24 24" aria-hidden="true">' + 1137 '<polyline points="6 9 12 15 18 9"/>' + 1138 '</svg>'; 1139 li.appendChild(btn); 1140 } 1141 var toggle = li.querySelector(".ot-mmenu__toggle"); 1142 panel.style.maxHeight = ""; 1143 li.classList.remove("open"); 1144 if (toggle) toggle.setAttribute("aria-expanded", "false"); 1145 }); 1146 } 1147 if (drawer) { 1148 drawer.addEventListener("click", function (e) { 1149 var toggleBtn = e.target.closest(".ot-mmenu__toggle"); 1150 if (toggleBtn) { 1151 e.preventDefault(); 1152 e.stopPropagation(); 1153 var liFromToggle = toggleBtn.closest("li.menu-item-has-children"); 1154 if (liFromToggle) toggleAccordion(liFromToggle); 1155 return; 1156 } 1157 var parentBtn = e.target.closest(".menu-toggle-parent"); 1158 if (parentBtn) { 1159 var liFromParentBtn = parentBtn.closest("li.menu-item-has-children"); 1160 if (liFromParentBtn && drawer.contains(parentBtn)) { 1161 e.preventDefault(); 1162 e.stopPropagation(); 1163 toggleAccordion(liFromParentBtn); 1164 return; 1165 } 1166 } 1167 var link = e.target.closest("a"); 1168 if (!link) return; 1169 var menuList = drawer.querySelector(".ot-mmenu__list"); 1170 if (!menuList || !menuList.contains(link)) return; 1171 var li = link.closest("li.menu-item-has-children"); 1172 if (!li) return; 1173 if (link !== li.querySelector(":scope > a")) return; 1174 var href = (link.getAttribute("href") || "").trim(); 1175 var hasRealLink = href && href !== "#" && href !== "#!" && href !== "javascript:void(0)"; 1176 if (hasRealLink) { 1177 closeMenu(); 1178 return; 1179 } 1180 e.preventDefault(); 1181 toggleAccordion(li); 1182 }); 1183 } 1184 if (headerTop) { 1185 function applyScrolled(scrolled) { 1186 navbar.classList.toggle("is-scrolled", scrolled); 1187 document.body.classList.toggle("ot-header-scrolled", scrolled); 1188 } 1189 if (document.documentElement.classList.contains("ot-prescrolled")) { 1190 navbar.classList.add("is-scrolled"); 1191 document.body.classList.add("ot-header-scrolled"); 1192 document.documentElement.classList.remove("ot-prescrolled"); 1193 } 1194 window.addEventListener("load", function () { 1195 var observer = new IntersectionObserver( 1196 function (entries) { 1197 if (!window.matchMedia("(min-width: 1280px)").matches) return; 1198 applyScrolled(!entries[0].isIntersecting); 1199 }, 1200 { threshold: 0, rootMargin: "0px" } 1201 ); 1202 observer.observe(headerTop); 1203 }); 1204 } 1205 /* ========================================================= 1206 BRANDS MEGA MENU â HARDCODED LIST 1207 The brand list lives right here: edit OT_BRANDS names/ 1208 URLs and OT_ALL_BRANDS_URL freely. JS finds the top-level 1209 nav item labelled "Brands", throws away any WP submenu it 1210 has, and builds the mega panel from this list instead â 1211 so the desktop menu is controlled entirely from this 1212 template. The SAME list also powers the mobile drawer's 1213 Brands accordion via initMobileBrands() below (2-column 1214 grid, "All Brands" first). 1215 ========================================================= */ 1216 var OT_ALL_BRANDS_URL = "/watch-brands/"; 1217 var OT_FEATURED_SLUGS = [ 1218 "a-lange-sohne", "audemars-piguet", "bell-ross", "breitling", 1219 "bulgari", "cartier", "chopard", "girard-perregaux", 1220 "grand-seiko", "hublot", "iwc", "jaeger-lecoultre", 1221 "longines", "montblanc", "omega", "oris", 1222 "panerai", "patek-philippe", "rolex", "seiko", 1223 "tag-heuer", "tudor", "vacheron-constantin", "zenith" 1224 ]; 1225 var OT_BRANDS_MAPPED = (window.OT_BRANDS_ALL || []).map(function (b) { 1226 return { name: b.n, url: b.u, slug: b.u.split("/")[2] }; 1227 }); 1228 /* desktop mega menu: curated shortlist, in the order above */ 1229 var OT_BRANDS = OT_FEATURED_SLUGS.map(function (s) { 1230 return OT_BRANDS_MAPPED.find(function (b) { return b.slug === s; }); 1231 }
1231).filter(Boolean); 1232 /* mobile drawer: everything */ 1233 var OT_BRANDS_MOBILE = OT_BRANDS_MAPPED; 1234 function initMegaMenu() { 1235 document.querySelectorAll(".ot-nav-list > li").forEach(function (li) { 1236 if (li.classList.contains("ot-mega")) return; 1237 var trigger = li.querySelector(":scope > a, :scope > .menu-toggle-parent"); 1238 if (!trigger) return; 1239 if (trigger.textContent.trim().toLowerCase() !== "brands") return; 1240 /* discard any WP-managed submenu â the hardcoded 1241 list below is the single source of truth */ 1242 var old = li.querySelector(":scope > .sub-menu"); 1243 if (old) old.parentNode.removeChild(old); 1244 li.classList.add("ot-mega"); 1245 /* needed for the shared hover-to-open CSS + the 1246 12px hover bridge under the nav item */ 1247 li.classList.add("menu-item-has-children"); 1248 var menu = document.createElement("ul"); 1249 menu.className = "sub-menu"; 1250 OT_BRANDS.forEach(function (b) { 1251 var item = document.createElement("li"); 1252 var a = document.createElement("a"); 1253 a.href = b.url; 1254 a.textContent = b.name; 1255 item.appendChild(a); 1256 menu.appendChild(item); 1257 }); 1258 var allLi = document.createElement("li"); 1259 allLi.className = "ot-mega__all"; 1260 var allA = document.createElement("a"); 1261 allA.href = OT_ALL_BRANDS_URL; 1262 allA.innerHTML = "All Brands →"; 1263 allLi.appendChild(allA); 1264 menu.appendChild(allLi); 1265 li.appendChild(menu); 1266 }); 1267 } 1268 /* ========================================================= 1269 MOBILE DRAWER BRANDS â FILTERABLE LIST 1270 Same hardcoded OT_BRANDS list as desktop, so BOTH menus 1271 are edited in one place (the array above). Fratello-style 1272 panel: filter input on top, capped-height scrollable 1273 single-column list (no wrapping), "All Brands" pinned 1274 underneath. The .ot-mbrands guard means repeat calls 1275 (openMenu re-inits accordions) never rebuild the panel. 1276 ========================================================= */ 1277 function initMobileBrands() { 1278 var list = drawer ? drawer.querySelector(".ot-mmenu__list") : null; 1279 if (!list) return; 1280 list.querySelectorAll(":scope > li").forEach(function (li) { 1281 if (li.classList.contains("ot-mbrands")) return; /* already built */ 1282 var trigger = li.querySelector(":scope > a, :scope > .menu-toggle-parent"); 1283 if (!trigger) return; 1284 if (trigger.textContent.trim().toLowerCase() !== "brands") return; 1285 var old = li.querySelector(":scope > ul.sub-menu"); 1286 if (old) old.parentNode.removeChild(old); 1287 li.classList.add("ot-mbrands"); 1288 /* ensures initDrawerAccordions() adds the chevron toggle */ 1289 li.classList.add("menu-item-has-children"); 1290 var menu = document.createElement("ul"); 1291 menu.className = "sub-menu"; 1292 /* --- filter input --- */ 1293 var filterLi = document.createElement("li"); 1294 filterLi.className = "ot-mbrands__filter"; 1295 var input = document.createElement("input"); 1296 input.type = "text"; 1297 input.placeholder = "Find a brand\u2026"; 1298 input.setAttribute("aria-label", "Filter watch brands"); 1299 input.setAttribute("autocomplete", "off"); 1300 input.setAttribute("autocorrect", "off"); 1301 input.setAttribute("spellcheck", "false"); 1302 filterLi.appendChild(input); 1303 menu.appendChild(filterLi); 1304 /* --- scrollable brand list --- */ 1305 var wrapLi = document.createElement("li"); 1306 wrapLi.className = "ot-mbrands__listwrap"; 1307 var scrollUl = document.createElement("ul"); 1308 scrollUl.className = "ot-mbrands__scroll"; 1309 var rows = []; 1310 OT_BRANDS_MOBILE.forEach(function (b) { 1311 var item = document.createElement("li"); 1312 var a = document.createElement("a"); 1313 a.href = b.url; 1314 a.textContent = b.name; 1315 item.appendChild(a); 1316 scrollUl.appendChild(item); 1317 rows.push({ li: item, name: b.name.toLowerCase() }); 1318 }); 1319 var emptyLi = document.createElement("li"); 1320 emptyLi.className = "ot-mbrands__empty"; 1321 emptyLi.textContent = "No brands match"; 1322 scrollUl.appendChild(emptyLi); 1323 wrapLi.appendChild(scrollUl); 1324 menu.appendChild(wrapLi); 1325 /* --- All Brands, pinned under the list --- */ 1326 var allLi = document.createElement("li"); 1327 allLi.className = "ot-mbrands__all"; 1328 var allA = document.createElement("a"); 1329 allA.href = OT_ALL_BRANDS_URL; 1330 allA.innerHTML = "All Brands →"; 1331 allLi.appendChild(allA); 1332 menu.appendChild(allLi); 1333 li.appendChild(menu); 1334 /* --- live filter: hide non-matching rows, show the 1335 empty message if nothing survives; scroll back to 1336 the top so results are never hidden above the fold */ 1337 input.addEventListener("input", function () { 1338 var q = input.value.trim().toLowerCase(); 1339 var any = false;
1340 rows.forEach(function (r) { 1341 var hit = !q || r.name.indexOf(q) !== -1; 1342 r.li.classList.toggle("is-hidden", !hit); 1343 if (hit) any = true; 1344 }); 1345 emptyLi.classList.toggle("is-visible", !any); 1346 scrollUl.scrollTop = 0; 1347 }); 1348 }); 1349 } 1350 function layoutMegaMenu() { 1351 if (!window.matchMedia("(min-width: 1280px)").matches) return; 1352 var wrap = document.getElementById("otNavWrap"); 1353 if (!wrap) return; 1354 document.querySelectorAll(".ot-nav-list > li.ot-mega").forEach(function (li) { 1355 var menu = li.querySelector(":scope > .sub-menu"); 1356 if (!menu) return; 1357 var w = wrap.getBoundingClientRect(); 1358 var l = li.getBoundingClientRect(); 1359 menu.style.width = w.width + "px"; 1360 menu.style.left = (w.left - l.left) + "px"; 1361 menu.style.transform = "none"; 1362 }); 1363 } 1364 /* ========================================================= 1365 DROPDOWN OVERFLOW â MULTI-COLUMN 1366 If a top-level desktop dropdown would be taller than 1367 the space left below the sticky navbar (long menus, 1368 short monitors, or when scrolled), split its items 1369 into extra columns instead of letting them get cut 1370 off at the bottom of the screen. 1371 Recalculated on mouseenter/focusin so it always uses 1372 the space available *right now* (the navbar's position 1373 changes with scroll), and on resize. 1374 The Brands mega menu (.ot-mega) is excluded â it has 1375 its own layout above. 1376 ========================================================= */ 1377 function layoutDesktopDropdowns() { 1378 if (!window.matchMedia("(min-width: 1280px)").matches) return; 1379 document.querySelectorAll(".ot-nav-list > li.menu-item-has-children:not(.ot-mega) > .sub-menu") 1380 .forEach(function (menu) { 1381 // reset to natural single-column state, wipe any stale inline styles 1382 menu.classList.remove("is-multicol"); 1383 menu.style.gridTemplateRows = ""; 1384 menu.style.transform = ""; 1385 // old per-item classes are neutralised by the v2 CSS, but clean them anyway 1386 Array.prototype.forEach.call(menu.children, function (li) { 1387 li.classList.remove("ot-col-start", "ot-col-end", "ot-col-end--mid", "ot-not-first-col"); 1388 }); 1389 if (!menu.children.length) return; 1390 var navBottom = navbar.getBoundingClientRect().bottom; 1391 var available = window.innerHeight - navBottom - 16; 1392 if (available <= 0) return; 1393 if (menu.scrollHeight <= available) return; // fits â stay single column 1394 // too tall: the v2 CSS column-count handles the actual layout 1395 menu.classList.add("is-multicol"); 1396 // only remaining pixel job: keep the panel on-screen at the right edge 1397 var rect = menu.getBoundingClientRect(); 1398 var overflowRight = rect.right - (window.innerWidth - 12); 1399 if (overflowRight > 0) { 1400 menu.style.transform = "translateX(calc(-50% - " + Math.ceil(overflowRight) + "px))"; 1401 } 1402 }); 1403 } 1404 function layoutAllDropdowns() { 1405 layoutDesktopDropdowns(); 1406 layoutMegaMenu(); 1407 } 1408 /* build the mega menu FIRST so the Brands item has its 1409 menu-item-has-children class before listeners attach */ 1410 initMegaMenu(); 1411 // recalc when the user is about to open a dropdown 1412 // (accounts for the current scroll position / viewport height) 1413 document.querySelectorAll(".ot-nav-list > li.menu-item-has-children").forEach(function (li) { 1414 li.addEventListener("mouseenter", layoutAllDropdowns); 1415 li.addEventListener("focusin", layoutAllDropdowns); 1416 }); 1417 var ddResizeTimer; 1418 window.addEventListener("resize", function () { 1419 layoutAllDropdowns(); 1420 clearTimeout(ddResizeTimer); 1421 ddResizeTimer = setTimeout(layoutAllDropdowns, 180); // re-run after zoom settles 1422 }); 1423 // re-evaluate dropdown space on scroll: when the top header scrolls 1424 // away (or comes back), open dropdowns adopt the new space immediately 1425 // instead of keeping the layout from when they were first hovered 1426 var ddScrollRAF = null; 1427 window.addEventListener("scroll", function () { 1428 if (!window.matchMedia("(min-width: 1280px)").matches) return; 1429 if (ddScrollRAF) return; 1430 ddScrollRAF = requestAnimationFrame(function () { 1431 ddScrollRAF = null; 1432 layoutAllDropdowns(); 1433 }); 1434 }, { passive: true }); 1435 1436 layoutAllDropdowns(); 1437 window.addEventListener("pageshow", function (e) { 1438 if (!e.persisted) return; 1439 if (drawerRAF) { 1440 cancelAnimationFrame(drawerRAF); 1441 drawerRAF = null; 1442 } 1443 if (drawer) drawer.style.transform = ""; 1444 }); 1445 /* mobile brands BEFORE accordions: the rebuilt Brands li 1446 needs its menu-item-has-children class in place so the 1447 accordion init gives it a chevron toggle */ 1448 initMobileBrands(); 1449 initDrawerAccordions(); 1450 1451 /* ---- FIX: release focus after clicking a top-level nav item ---- 1452 Without this, :focus-within keeps the dropdown open after 1453 the click even when the mouse has left. */ 1454 document.querySelectorAll('.ot-nav-list a, .ot-nav-list .menu-toggle-parent') 1455 .forEach(function (el) { 1456 el.addEventListener('click', function () { 1457 this.blur(); 1458 }); 1459 }); 1460 1461 var navList = document.querySelector('.ot-nav-list'); 1462 if (navList) { 1463 navList.addEventListener('mouseleave', function () { 1464 if (document.activeElement && navList.contains(document.activeElement)) { 1465 document.activeElement.blur(); 1466 } 1467 }); 1468 } 1469 1470 syncClearText(); 1471 })();; 1472document.documentElement.classList.add('js');; 1473const initialExcludeIds = [237791,185358,238212,238200,238189,238134,238161,238137,238109,238037,238060,237972,237825,237620,236707,236371,233238];; 1474document.addEventListener('DOMContentLoaded', function() { 1475 1476 let offset = 10; 1477 let excludeIds = Array.isArray(initialExcludeIds) ? [...initialExcludeIds] : []; 1478 let isLoading = false;
1479 const container = document.querySelector('.ajax-latest-container'); 1480 const button = document.getElementById('load-more-btn'); 1481 1482 function loadMorePosts() { 1483 if (isLoading) return; 1484 1485 isLoading = true; 1486 button.textContent = 'Loading...'; 1487 button.disabled = true; 1488 1489 fetch(`/wp-admin/admin-ajax.php?action=load_latest_posts&offset=${offset}&exclude=${excludeIds.join(",")}&status=publish`) 1490 .then(res => res.text()) 1491 .then(html => { 1492 const temp = document.createElement('div'); 1493 temp.innerHTML = html; 1494 1495 temp.querySelectorAll('[data-post-id]').forEach(post => { 1496 const postId = parseInt(post.getAttribute('data-post-id')); 1497 if (!excludeIds.includes(postId)) { 1498 excludeIds.push(postId); 1499 container.appendChild(post); 1500 } 1501 }); 1502 offset += temp.querySelectorAll('[data-post-id]').length; 1503 1504 button.textContent = 'Load More'; 1505 button.disabled = false; 1506 isLoading = false; 1507 }) 1508 .catch(() => { 1509 button.textContent = 'Load More'; 1510 button.disabled = false; 1511 isLoading = false; 1512 }); 1513 } 1514 1515 button.addEventListener('click', function() { 1516 loadMorePosts(); 1517 window.addEventListener('scroll', handleScroll); 1518 }); 1519 1520 function handleScroll() { 1521 if (isLoading) return; 1522 1523 const rect = container.getBoundingClientRect(); 1524 if (rect.bottom <= window.innerHeight + 300) { 1525 setTimeout(loadMorePosts, 300); 1526 } 1527 } 1528 1529 });; 1530(function() { 1531 window.mc4wp = window.mc4wp || { 1532 listeners: [], 1533 forms: { 1534 on: function(evt, cb) { 1535 window.mc4wp.listeners.push( 1536 { 1537 event : evt, 1538 callback: cb 1539 } 1540 ); 1541 } 1542 } 1543 } 1544})();; 1545(function () { 1546 function runPixelCode( response ) { 1547 if ( ! response || ! response.data || ! response.data.fb_pxl_code ) { 1548 return; 1549 } 1550 1551 try { 1552 new Function( response.data.fb_pxl_code )(); 1553 } catch ( e ) { 1554 console && console.warn 1555 && console.warn( 'Meta Pixel response parsing failed. Please check if your pixel is connected.', e ); 1556 } 1557 } 1558 1559 var radio = window.nfRadio 1560 || ( window.Backbone && window.Backbone.Radio ); 1561 if ( radio && radio.channel ) { 1562 radio.channel( 'forms' ).on( 'submit:response', runPixelCode ); 1563 } 1564 1565 if ( window.jQuery ) { 1566 window.jQuery( document ).on( 1567 'nfFormSubmitResponse', 1568 function ( event, data ) { 1569 if ( data && data.response ) { 1570 runPixelCode( data.response ); 1571 } 1572 } 1573 ); 1574 } 1575 })();; 1576(function ( $ ) { 1577 if ( ! $ || typeof document === 'undefined' ) { 1578 return; 1579 } 1580 // WPForms triggers this jQuery event and passes the AJAX response object. 1581 $( document ).on( 'wpformsAjaxSubmitSuccess', function ( event, data ) { 1582 if ( data && data.data && data.data.fb_pxl_code ) { 1583 try { 1584 new Function( data.data.fb_pxl_code )(); 1585 } catch ( e ) { 1586 console && console.warn && console.warn( 'Meta Pixel eval failed', e ); 1587 } 1588 } 1589 } ); 1590 })( window.jQuery );; 1591(function() {function maybePrefixUrlField () { 1592 const value = this.value.trim() 1593 if (value !== '' && value.indexOf('http') !== 0) { 1594 this.value = 'http://' + value 1595 } 1596} 1597 1598const urlFields = document.querySelectorAll('.mc4wp-form input[type="url"]') 1599for (let j = 0; j < urlFields.length; j++) { 1600 urlFields[j].addEventListener('blur', maybePrefixUrlField) 1601} 1602})();; 1603document.addEventListener( 'wpcf7mailsent', function( event ) { 1604 if( "fb_pxl_code" in event.detail.apiResponse){ 1605 eval(event.detail.apiResponse.fb_pxl_code); 1606 } 1607 }, false );; 1608(function () { 1609 'use strict'; 1610 1611 var DEBUG = false; 1612 1613 var BANNER_VISIBILITY = { 1614 watches: true, 1615 lifestyle: true, 1616 accessories: true, 1617 videoArchive: false, 1618 home: true, 1619 latest: true, 1620 general: false, 1621 upcomingEvents: false, 1622 genevaWatchDays: true 1623 }; 1624 1625 var BANNER_SLOT_VISIBILITY = { 1626 // Watches 1627 'watches-category-header': true, 1628 'watches-category-footer': true, 1629 'watches-post-header': true, 1630 'watches-post-content': true, 1631 'watches-post-footer': false, // temporarily hidden 1632 1633 // Lifestyle 1634 'lifestyle-category-header': true, 1635 'lifestyle-category-footer': true, 1636 'lifestyle-post-header': true, 1637 'lifestyle-post-content': true, 1638 'lifestyle-post-footer': false, // temporarily hidden 1639 1640 // Accessories 1641 'accessories-category-header': true, 1642 'accessories-category-footer': true, 1643 'accessories-post-header': true, 1644 'accessories-post-content': true, 1645 'accessories-post-footer': false, // temporarily hidden 1646 1647 // Video 1648 'video-archive-header': true, 1649 'video-archive-footer': true, 1650 'video-archive-post-header': true, 1651 'video-archive-post-content': true, 1652 'video-archive-post-footer': false, // temporarily hidden 1653 1654 // Latest 1655 'latest-header': true, 1656 'latest-footer': true, 1657 1658 // Homepage 1659 'homepage-header': true, 1660 'homepage-content': true, 1661 'homepage-footer': true, 1662 1663 // General + misc 1664 'general-header': true, 1665 'general-footer': true, 1666 'upcoming-events-header': true, 1667 'geneva-watch-days': true 1668 }; 1669 1670 function bannerSectionForSlot(key) { 1671 if (!key) return null; 1672 1673 if (key.indexOf('watches-') === 0) return 'watches'; 1674 if (key.indexOf('lifestyle-') === 0) return 'lifestyle'; 1675 if (key.indexOf('accessories-') === 0) return 'accessories'; 1676 if (key.indexOf('video-archive-') === 0) return 'videoArchive'; 1677 if (key.indexOf('homepage-') === 0) return 'home'; 1678 if (key.indexOf('latest-') === 0) return 'latest'; 1679 if (key.indexOf('general-') === 0) return 'general'; 1680 if (key.indexOf('upcoming-events-') === 0) return 'upcomingEvents'; 1681 if (key === 'geneva-watch-days') return 'genevaWatchDays'; 1682 1683 return null; 1684 } 1685 1686 function bannerSlotIsEnabled(key) { 1687 if ( 1688 Object.prototype.hasOwnProperty.call(BANNER_SLOT_VISIBILITY, key) && 1689 BANNER_SLOT_VISIBILITY[key] === false 1690 ) { 1691 return false;
1692 } 1693 1694 var section = bannerSectionForSlot(key); 1695 1696 if (!section) return true; 1697 1698 return BANNER_VISIBILITY[section] !== false; 1699 } 1700 1701 function log() { 1702 if (DEBUG && window.console && console.log) { 1703 console.log.apply(console, ['[ot-banner]'].concat([].slice.call(arguments))); 1704 } 1705 } 1706 1707 var BANNERS = { 1708 /* ============== WATCHES ============== */ 1709 1710 'watches-category-header': adAnchor({ 1711 url: 'https://oceaneva.com/discount/OracleWorld15?redirect=%2Fcollections%2Fworldtime-gmt-watch-worldtimer', 1712 alt: 'Oceaneva WorldTime 6000m Automatic - Discover More', 1713 campaign: 'oceaneva-17-08-2026', 1714 position: 'watches-category-header', 1715 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_828x240.jpg', 1716 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1717 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1718 eager: true 1719 }), 1720 1721 'watches-category-footer': adAnchor({ 1722 url: 'https://oceaneva.com/discount/OracleWorld15?redirect=%2Fcollections%2Fworldtime-gmt-watch-worldtimer', 1723 alt: 'Oceaneva WorldTime 6000m Automatic - Discover More', 1724 campaign: 'oceaneva-17-08-2026', 1725 position: 'watches-category-footer', 1726 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_600x500.jpg', 1727 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1728 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1729 eager: false 1730 }), 1731 1732 'watches-post-header': adAnchor({ 1733 url: 'https://oceaneva.com/discount/OracleWorld15?redirect=%2Fcollections%2Fworldtime-gmt-watch-worldtimer', 1734 alt: 'Oceaneva WorldTime 6000m Automatic - Discover More', 1735 campaign: 'oceaneva-17-08-2026', 1736 position: 'watches-post-header', 1737 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_828x240.jpg', 1738 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1739 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1740 eager: true 1741 }), 1742 1743 'watches-post-content': adAnchor({ 1744 url: 'https://oceaneva.com/discount/OracleWorld15?redirect=%2Fcollections%2Fworldtime-gmt-watch-worldtimer', 1745 alt: 'Oceaneva WorldTime 6000m Automatic - Discover More', 1746 campaign: 'oceaneva-17-08-2026', 1747 position: 'watches-post-content', 1748 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_600x500.jpg', 1749 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1750 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1751 eager: false 1752 }), 1753 1754 'watches-post-footer': adAnchor({ 1755 url: 'https://oceaneva.com/discount/OracleWorld15?redirect=%2Fcollections%2Fworldtime-gmt-watch-worldtimer', 1756 alt: 'Oceaneva WorldTime 6000m Automatic - Discover More', 1757 campaign: 'oceaneva-17-08-2026', 1758 position: 'watches-post-footer', 1759 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_600x500.jpg', 1760 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1761 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/08/oceaneva_worldtimer_970x250.jpg', 1762 eager: false 1763 }), 1764 1765 /* ============== LIFESTYLE ============== */ 1766 1767 'lifestyle-category-header': adAnchor({ 1768 url: 'https://www.johnlewis.com/bowers-wilkins-px8-s2-noise-cancelling-wireless-over-ear-headphones/p114031656', 1769 alt: 'Bowers & Wilkins - Discover More', 1770 campaign: 'bowers-wilkins-2025', 1771 position: 'lifestyle-category-header', 1772 mobileSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_828x240_edit.jpg', 1773 desktopSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1774 imgSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1775 eager: true 1776 }), 1777 1778 'lifestyle-category-footer': adAnchor({ 1779 url: 'https://www.johnlewis.com/bowers-wilkins-px8-s2-noise-cancelling-wireless-over-ear-headphones/p114031656', 1780 alt: 'Bowers & Wilkins - Discover More', 1781 campaign: 'bowers-wilkins-2025', 1782 position: 'lifestyle-category-footer', 1783 mobileSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_600x500.jpg', 1784 desktopSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1785 imgSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1786 eager: false 1787 }), 1788 1789 'lifestyle-post-header': adAnchor({ 1790 url: 'https://www.johnlewis.com/bowers-wilkins-px8-s2-noise-cancelling-wireless-over-ear-headphones/p114031656', 1791 alt: 'Bowers & Wilkins - Discover More', 1792 campaign: 'bowers-wilkins-2025', 1793 position: 'lifestyle-post-header', 1794 mobileSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_828x240_edit.jpg', 1795 desktopSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1796 imgSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1797 eager: true 1798 }), 1799 1800 'lifestyle-post-content': adAnchor({ 1801 url: 'https://www.johnlewis.com/bowers-wilkins-px8-s2-noise-cancelling-wireless-over-ear-headphones/p114031656', 1802 alt: 'Bowers & Wilkins - Discover More', 1803 campaign: 'bowers-wilkins-2025', 1804 position: 'lifestyle-post-content', 1805 mobileSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_600x500.jpg', 1806 desktopSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1807 imgSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1808 eager: false 1809 }), 1810 1811 'lifestyle-post-footer': adAnchor({ 1812 url: 'https://www.johnlewis.com/bowers-wilkins-px8-s2-noise-cancelling-wireless-over-ear-headphones/p114031656', 1813 alt: 'Bowers & Wilkins - Discover More', 1814 campaign: 'bowers-wilkins-2025', 1815 position: 'lifestyle-post-footer', 1816 mobileSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_600x500.jpg', 1817 desktopSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1818 imgSrc: '/wp-content/uploads/2025/10/BW_Digital-Banners_DB-Px8-S2_1056850_970x250.jpg', 1819 eager: false 1820 }), 1821 1822 /* ============== ACCESSORIES ============== */ 1823 1824 'accessories-category-header': adAnchor({ 1825 url: 'https://www.hirschthebracelet.com/', 1826 alt: 'Hirsch - Discover More', 1827 campaign: 'hirsch-2026', 1828 position: 'accessories-category-header', 1829 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-header-mobile.jpg', 1830 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-header-desktop.jpg', 1831 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-header-desktop.jpg', 1832 eager: true 1833 }), 1834 1835 'accessories-category-footer': adAnchor({ 1836 url: 'https://www.hirschthebracelet.com/', 1837 alt: 'Hirsch - Discover More', 1838 campaign: 'hirsch-2026', 1839 position: 'accessories-category-footer', 1840 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-footer-mobile.jpg', 1841 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-footer-desktop.jpg', 1842 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-footer-desktop.jpg', 1843 eager: false 1844 }), 1845 1846 'accessories-post-header': adAnchor({ 1847 url: 'https://www.hirschthebracelet.com/', 1848 alt: 'Hirsch - Discover More', 1849 campaign: 'hirsch-2026', 1850 position: 'accessories-post-header', 1851 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-post-header-mobile.jpg', 1852 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-post-header-desktop.jpg', 1853 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-post-header-desktop.jpg', 1854 eager: true 1855 }), 1856 1857 'accessories-post-content': adAnchor({ 1858 url: 'https://www.hirschthebracelet.com/', 1859 alt: 'Hirsch - Discover More', 1860 campaign: 'hirsch-2026', 1861 position: 'accessories-post-content', 1862 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-post-content-mobile.jpg', 1863 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-post-content-desktop.jpg', 1864 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-post-content-desktop.jpg', 1865 eager: false 1866 }), 1867 1868 'accessories-post-footer': adAnchor({ 1869 url: 'https://www.hirschthebracelet.com/', 1870 alt: 'Hirsch - Discover More', 1871 campaign: 'hirsch-2026', 1872 position: 'accessories-post-footer', 1873 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-footer-mobile.jpg', 1874 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-footer-desktop.jpg', 1875 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/hirsch-category-footer-desktop.jpg', 1876 eager: false 1877 }), 1878 1879 /* ============== VIDEO ARCHIVE ============== */ 1880 1881 'video-archive-header': adAnchor({ 1882 url: 'https://www.james-porter.co.uk/watches?utm_source=referral&utm_medium=banner&utm_campaign=oracleoftime&utm_c
1882ontent=video_bottom', 1883 alt: 'James Porter & Son - Discover More', 1884 mobileSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-828w.jpg', 1885 desktopSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1886 imgSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1887 eager: true 1888 }), 1889 1890 'video-archive-footer': adAnchor({ 1891 url: 'https://www.james-porter.co.uk/grand-seiko-sakura-kakushi-18k-rose-gold-62gs-38mm-sbgh368.html?utm_source=Oracle+Time+Website&utm_medium=Website&utm_campaign=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368&utm_id=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368', 1892 alt: 'James Porter & Son - Discover More', 1893 mobileSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-600w_edit.jpg', 1894 desktopSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1895 imgSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1896 eager: false 1897 }), 1898 1899 'video-archive-post-header': adAnchor({ 1900 url: 'https://www.james-porter.co.uk/grand-seiko-sakura-kakushi-18k-rose-gold-62gs-38mm-sbgh368.html?utm_source=Oracle+Time+Website&utm_medium=Website&utm_campaign=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368&utm_id=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368', 1901 alt: 'James Porter & Son - Discover More', 1902 mobileSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-828w.jpg', 1903 desktopSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1904 imgSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1905 eager: true 1906 }), 1907 1908 'video-archive-post-content': adAnchor({ 1909 url: 'https://www.james-porter.co.uk/grand-seiko-sakura-kakushi-18k-rose-gold-62gs-38mm-sbgh368.html?utm_source=Oracle+Time+Website&utm_medium=Website&utm_campaign=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368&utm_id=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368', 1910 alt: 'James Porter & Son - Discover More', 1911 mobileSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-600w_edit.jpg', 1912 desktopSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1913 imgSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1914 eager: false 1915 }), 1916 1917 'video-archive-post-footer': adAnchor({ 1918 url: 'https://www.james-porter.co.uk/grand-seiko-sakura-kakushi-18k-rose-gold-62gs-38mm-sbgh368.html?utm_source=Oracle+Time+Website&utm_medium=Website&utm_campaign=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368&utm_id=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368', 1919 alt: 'James Porter & Son - Discover More', 1920 mobileSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-600w_edit.jpg', 1921 desktopSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1922 imgSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1923 eager: false 1924 }), 1925 1926 /* ============== LATEST + HOMEPAGE ============== */ 1927 1928 'latest-header': adAnchor({ 1929 url: 'https://www.panerai.com/', 1930 alt: 'Panerai - Discover More', 1931 campaign: 'panerai-18-06-26', 1932 position: 'latest-header', 1933 mobileSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-header-mobile.jpg', 1934 desktopSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1935 imgSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1936 eager: true 1937 }), 1938 1939 'latest-footer': adAnchor({ 1940 url: 'https://www.panerai.com/', 1941 alt: 'Panerai - Discover More', 1942 campaign: 'panerai-18-06-26', 1943 position: 'latest-footer', 1944 mobileSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-content-mobile.jpg', 1945 desktopSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1946 imgSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1947 eager: false 1948 }), 1949 1950 'homepage-header': adAnchor({ 1951 url: 'https://www.panerai.com/', 1952 alt: 'Panerai - Discover More', 1953 campaign: 'panerai-18-06-26', 1954 position: 'homepage-header', 1955 mobileSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-header-mobile.jpg', 1956 desktopSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1957 imgSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1958 eager: true 1959 }), 1960 1961 'homepage-content': adAnchor({ 1962 url: 'https://www.panerai.com/', 1963 alt: 'Panerai - Discover More', 1964 campaign: 'panerai-18-06-26', 1965 position: 'homepage-content', 1966 mobileSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-content-mobile.jpg', 1967 desktopSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1968 imgSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1969 eager: false 1970 }), 1971 1972 'homepage-footer': adAnchor({ 1973 url: 'https://www.panerai.com/', 1974 alt: 'Panerai - Discover More', 1975 campaign: 'panerai-18-06-26', 1976 position: 'homepage-footer', 1977 mobileSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-content-mobile.jpg', 1978 desktopSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1979 imgSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/homepage/panerai-homepage-desktop.jpg', 1980 eager: false 1981 }), 1982 1983 /* ============== GENERAL ============== */ 1984 1985 'general-header': adAnchor({ 1986 url: 'https://www.james-porter.co.uk/grand-seiko-sakura-kakushi-18k-rose-gold-62gs-38mm-sbgh368.html?utm_source=Oracle+Time+Website&utm_medium=Website&utm_campaign=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368&utm_id=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368', 1987 alt: 'James Porter & Son - Discover More', 1988 mobileSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-828w.jpg', 1989 desktopSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1990 imgSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1991 eager: true 1992 }), 1993 1994 'general-footer': adAnchor({ 1995 url: 'https://www.james-porter.co.uk/grand-seiko-sakura-kakushi-18k-rose-gold-62gs-38mm-sbgh368.html?utm_source=Oracle+Time+Website&utm_medium=Website&utm_campaign=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368&utm_id=Grand+Seiko+x+James+Porter+%26+Son+Exclusive+SBGH368', 1996 alt: 'James Porter & Son - Discover More', 1997 mobileSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-600w_edit.jpg', 1998 desktopSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 1999 imgSrc: '/wp-content/uploads/2025/07/Grand-Seiko-x-James-Porter-970w_edit.jpg', 2000 eager: false 2001 }), 2002 2003 /* ============== MISC ============== */ 2004 2005 'upcoming-events-header': adAnchor({ 2006 url: 'https://www.timetowatches.com/', 2007 alt: 'Time to Watches 2026 - Discover More', 2008 mobileSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/Time-to-Watches-2026-mobile.jpg', 2009 desktopSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/Time-to-Watches-2026-desktop.jpg', 2010 imgSrc: 'https://oracleoftime.com/wp-content/uploads/2026/03/Time-to-Watches-2026-desktop.jpg', 2011 eager: true 2012 }), 2013 2014 'geneva-watch-days': adAnchor({ 2015 url: '/tag/geneva-watch-days/', 2016 alt: 'Geneva Watch Days 2026 - Discover More', 2017 position: 'geneva-watch-days', 2018 mobileSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/geneva-watch-days/geneva-watch-days-mobile.jpg', 2019 desktopSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/geneva-watch-days/geneva-watch-days-desktop.jpg', 2020 imgSrc: '/wp-content/themes/voice-child/template-parts/banner-slots/banners/geneva-watch-days/geneva-watch-days-desktop.jpg', 2021 eager: false, 2022 internal: true 2023 }) 2024 }; 2025 2026 /* Build one normal, static responsive banner link. */ 2027 function adAnchor(cfg) { 2028 var rel = cfg.internal ? '' : ' rel="sponsored nofollow noopener noreferrer"'; 2029 var target = cfg.internal ? '' : ' target="_blank"'; 2030 var dataAttrs = ''; 2031 2032 if (!cfg.internal && cfg.campaign) { 2033 dataAttrs = ' data-campaign="' + cfg.campaign + '"' 2034 + ' data-banner-position="' + cfg.position + '"'; 2035 } 2036 2037 return '' 2038 + '<a href="' + cfg.url + '" title="' + cfg.alt + '"' + target + rel + dataAttrs + '>' 2039 + '<picture>' 2040 + '<source media="(max-width: 767px)" srcset="' + cfg.mobileSrc + '">' 2041 + '<source media="(min-width: 768px)" srcset="' + cfg.desktopSrc + '">' 2042 + '<img src="' + cfg.imgSrc + '" alt="' + cfg.alt + '" title="' + cfg.alt + '"' 2043 + ' loading="' + (cfg.eager ? 'eager' : 'lazy') + '"' 2044 + ' data-ot-banner-img>' 2045 + '</picture>' 2046 + '</a>'; 2047 } 2048 2049 /* Find every banner placeholder and populate it from BANNERS above. */ 2050 function fillSlots() { 2051 var slots = document.querySelectorAll('.ot-banner-slot:not([data-slot-filled])'); 2052 2053 log('fillSlots running, found', slots.length, 'unfilled slot(s)'); 2054
2055 slots.forEach(function (slot) { 2056 var key = slot.getAttribute('data-slot'); 2057 2058 if (!bannerSlotIsEnabled(key)) { 2059 slot.style.display = 'none'; 2060 slot.setAttribute('data-slot-filled', 'disabled'); 2061 log('slot disabled:', key); 2062 return; 2063 } 2064 2065 var html = BANNERS[key]; 2066 2067 log('slot key:', key, '| banner found:', !!html); 2068 2069 if (!html) { 2070 slot.style.display = 'none'; 2071 slot.setAttribute('data-slot-filled', 'empty'); 2072 return; 2073 } 2074 2075 slot.innerHTML = html; 2076 slot.setAttribute('data-slot-filled', '1'); 2077 slot.removeAttribute('aria-hidden'); 2078 }); 2079 2080 initImageFailSafe(); 2081 refreshImpressionTracking(); 2082 } 2083 2084 function initImageFailSafe() { 2085 var imgs = document.querySelectorAll( 2086 '.ot-banner-slot img[data-ot-banner-img]:not([data-fail-safe-ready])' 2087 ); 2088 2089 imgs.forEach(function (img) { 2090 img.setAttribute('data-fail-safe-ready', '1'); 2091 2092 function hideBrokenBanner() { 2093 var slot = img.closest('.ot-banner-slot'); 2094 2095 if (!slot) return; 2096 2097 slot.style.display = 'none'; 2098 slot.setAttribute('data-slot-filled', 'image-error'); 2099 2100 log('image failed, hiding slot:', slot.getAttribute('data-slot')); 2101 } 2102 2103 img.addEventListener('error', hideBrokenBanner); 2104 2105 if (img.complete && img.naturalWidth === 0) { 2106 hideBrokenBanner(); 2107 } 2108 }); 2109 } 2110 2111 window.dataLayer = window.dataLayer || []; 2112 2113 var impressionObserver = null; 2114 2115 function pushEvent(eventName, link) { 2116 var campaign = link.getAttribute('data-campaign'); 2117 var pos = link.getAttribute('data-banner-position'); 2118 2119 if (!campaign || !pos) return; 2120 2121 window.dataLayer.push({ 2122 event: eventName, 2123 banner_campaign: campaign, 2124 banner_position: pos 2125 }); 2126 } 2127 2128 function impressionKey(link) { 2129 return [ 2130 window.location.pathname, 2131 link.getAttribute('data-campaign') || '', 2132 link.getAttribute('data-banner-position') || '' 2133 ].join('|'); 2134 } 2135 2136 function alreadyTracked(key) { 2137 try { 2138 return sessionStorage.getItem('ot-imp:' + key) === '1'; 2139 } catch (e) { 2140 return false; 2141 } 2142 } 2143 2144 function markTracked(key) { 2145 try { 2146 sessionStorage.setItem('ot-imp:' + key, '1'); 2147 } catch (e) {} 2148 } 2149 2150 function trackImpression(link) { 2151 var key = impressionKey(link); 2152 2153 if (alreadyTracked(key)) return; 2154 2155 markTracked(key); 2156 pushEvent('banner_impression', link); 2157 } 2158 2159 function refreshImpressionTracking() { 2160 var links = document.querySelectorAll( 2161 '.ot-banner-slot:not([data-slot-filled="image-error"]) a[data-campaign][data-banner-position]:not([data-imp-watched])' 2162 ); 2163 2164 if (!('IntersectionObserver' in window)) { 2165 links.forEach(function (link) { 2166 var slot = link.closest('.ot-banner-slot'); 2167 2168 if (slot && slot.getAttribute('data-slot-filled') === 'image-error') { 2169 return; 2170 } 2171 2172 trackImpression(link); 2173 }); 2174 2175 return; 2176 } 2177 2178 if (!impressionObserver) { 2179 impressionObserver = new IntersectionObserver(function (entries) { 2180 entries.forEach(function (entry) { 2181 var link = entry.target; 2182 var slot = link.closest('.ot-banner-slot'); 2183 2184 if (slot && slot.getAttribute('data-slot-filled') === 'image-error') { 2185 impressionObserver.unobserve(link); 2186 return; 2187 } 2188 2189 if (!entry.isIntersecting) return; 2190 2191 trackImpression(link); 2192 impressionObserver.unobserve(link); 2193 }); 2194 }, { 2195 threshold: 0.5 2196 }); 2197 } 2198 2199 links.forEach(function (link) { 2200 link.setAttribute('data-imp-watched', '1'); 2201 impressionObserver.observe(link); 2202 }); 2203 } 2204 2205 function initClickTracking() { 2206 document.addEventListener('click', function (e) { 2207 var link = e.target.closest('.ot-banner-slot a[data-campaign][data-banner-position]'); 2208 2209 if (!link) return; 2210 2211 var slot = link.closest('.ot-banner-slot'); 2212 2213 if (slot && slot.getAttribute('data-slot-filled') === 'image-error') { 2214 return; 2215 } 2216 2217 pushEvent('banner_click', link); 2218 }, true); 2219 } 2220 2221 function init() { 2222 initClickTracking(); 2223 fillSlots(); 2224 } 2225 2226 if (document.readyState === 'loading') { 2227 document.addEventListener('DOMContentLoaded', init); 2228 } else { 2229 init(); 2230 } 2231})();; 2232(function () { 2233 'use strict'; 2234 2235 document.addEventListener('DOMContentLoaded', function () { 2236 2237 // --------------------------------------------------------------------- 2238 // Suppress UA errors (optional - harmless) 2239 // --------------------------------------------------------------------- 2240 if (navigator.userAgentData === undefined) { 2241 navigator.userAgentData = {}; 2242 } 2243 2244 // --------------------------------------------------------------------- 2245 // Search Dropdown Toggle (menu-wrapper + vce-search-input) 2246 // --------------------------------------------------------------------- 2247 (function () { 2248 var menuWrapper = document.querySelector('.menu-wrapper'); 2249 var searchInput = document.querySelector('.vce-search-input'); 2250 var searchDropdown = document.querySelector('.search-dropdown-btn'); 2251 var initialTarget = null; 2252 2253 if (!menuWrapper || !searchInput || !searchDropdown) return; 2254 2255 var closeMenuHandler = function (event) { 2256 // Only close if click started on the same element and itâs outside menu + not the toggle 2257 if ( 2258 event.target === initialTarget && 2259 !menuWrapper.contains(event.target) && 2260 event.target !== searchDropdown 2261 ) { 2262 menuWrapper.classList.remove('show'); 2263 document.removeEventListener('click', closeMenuHandler, true); 2264 searchDropdown.classList.remove('search-dropdown-btn-clicked'); 2265 } 2266 }; 2267 2268 function openMenu() { 2269 menuWrapper.classList.add('show'); 2270 document.addEventListener('click', closeMenuHandler, true); 2271 searchInput.focus(); 2272 searchDropdown.classList.add('search-dropdown-btn-clicked'); 2273 } 2274 2275 document.addEventListener('mousedown', function (event) { 2276 initialTarget = event.target; 2277 }); 2278 2279 searchDropdown.addEventListener('click', function (event) { 2280 event.preventDefault(); 2281 2282 if (menuWrapper.classList.contains('show')) { 2283 menuWrapper.classList.remove('show'); 2284 document.removeEventListener('click', closeMenuHandler, true); 2285 searchDropdown.classList.remove('search-dropdown-btn-clicked'); 2286 } else { 2287 openMenu(); 2288 } 2289 }); 2290 })(); 2291 2292 // --------------------------------------------------------------------- 2293 // Sticky Navigation Observer 2294 // --------------------------------------------------------------------- 2295 (function () { 2296 var siteNavigation = document.querySelector('.site-navigation'); 2297 if (!siteNavigation) return; 2298 if (!window.matchMedia('(min-width: 1023px)').matches) return; 2299 2300 var d = document; 2301 2302 var newEl = d.createElement('div'); 2303 newEl.classList.add('myObserver'); 2304 siteNavigation.parentNode.insertBefore(newEl, siteNavigation.nextSibling); 2305 2306 var isSticky = false;
2307 2308 function updateNavLeftVisibility() { 2309 var navLeft = d.querySelector('.nav-left'); 2310 if (!navLeft) return; 2311 2312 if (isSticky && window.matchMedia('(min-width: 1023px)').matches) { 2313 navLeft.style.display = 'none'; 2314 } else { 2315 navLeft.style.display = ''; 2316 } 2317 } 2318 2319 var observer = new IntersectionObserver(function (entries) { 2320 var siteLogoHeader = d.querySelector('.site-logo-header'); 2321 var navList = d.querySelector('.nav-list'); 2322 var siteNavigationInner = d.querySelector('.site-navigation-inner'); 2323 2324 if (!siteLogoHeader || !navList || !siteNavigationInner) return; 2325 2326 if (entries[0].intersectionRatio === 0) { 2327 isSticky = true; 2328 siteLogoHeader.classList.add('display-block'); 2329 navList.classList.add('nav-list-sticky'); 2330 siteNavigation.classList.add('site-navigation-sticky'); 2331 siteNavigationInner.classList.add('site-navigation-inner-sticky'); 2332 updateNavLeftVisibility(); 2333 } else if (entries[0].intersectionRatio === 1) { 2334 isSticky = false; 2335 siteLogoHeader.classList.remove('display-block'); 2336 navList.classList.remove('nav-list-sticky'); 2337 siteNavigation.classList.remove('site-navigation-sticky'); 2338 siteNavigationInner.classList.remove('site-navigation-inner-sticky'); 2339 updateNavLeftVisibility(); 2340 } 2341 }, { threshold: [0, 1] }); 2342 2343 observer.observe(newEl); 2344 window.addEventListener('resize', updateNavLeftVisibility); 2345 })(); 2346 2347 // --------------------------------------------------------------------- 2348 // HTML5 Lifestyle Sliders (only runs on lifestyle anyway) 2349 // --------------------------------------------------------------------- 2350 (function () { 2351 if (!document.querySelector('.category-lifestyle')) return; 2352 2353 document.querySelectorAll('.html5-banner-container, .owl-one').forEach(function (element) { 2354 element.style.visibility = 'visible'; 2355 }); 2356 2357 document.querySelectorAll('.html5-container').forEach(function (sliderContainer) { 2358 var slidePictures = sliderContainer.querySelectorAll('.html5-picture'); 2359 var slideImages = sliderContainer.querySelectorAll('.html5-image'); 2360 var currentIndex = 0; 2361 2362 if (!slidePictures.length || !slideImages.length) return; 2363 2364 function showSlide(index) { 2365 slidePictures.forEach(function (slide) { slide.classList.remove('active'); }); 2366 slidePictures[index].classList.add('active'); 2367 2368 slideImages.forEach(function (image) { image.classList.add('hidden'); }); 2369 slideImages[index].classList.remove('hidden'); 2370 } 2371 2372 function startSlideShow() { 2373 setInterval(function () { 2374 currentIndex = (currentIndex + 1) % slidePictures.length; 2375 showSlide(currentIndex); 2376 }, 3000); 2377 } 2378 2379 showSlide(currentIndex); 2380 startSlideShow(); 2381 2382 slideImages.forEach(function (image) { 2383 image.addEventListener('contextmenu', function (e) { 2384 e.preventDefault(); 2385 var selectedImageIndex = Array.from(slideImages).indexOf(e.target); 2386 currentIndex = selectedImageIndex; 2387 showSlide(currentIndex); 2388 }); 2389 }); 2390 }); 2391 })(); 2392 2393 // --------------------------------------------------------------------- 2394 // Set --ot-search-top CSS var (header/admin bar + sticky nav positioning) 2395 // --------------------------------------------------------------------- 2396 (function () { 2397 var header = document.querySelector('.main-header, #header, header'); 2398 var adminBar = document.getElementById('wpadminbar'); 2399 2400 var DESKTOP_MIN = 1024; 2401 var THRESHOLD = 190; 2402 var NAV_H = 60; 2403 2404 function adminFixedH() { 2405 if (!adminBar) return 0; 2406 var cs = getComputedStyle(adminBar); 2407 return cs.position === 'fixed' ? adminBar.getBoundingClientRect().height : 0; 2408 } 2409 2410 function headerBottom() { 2411 if (!header) return 0; 2412 var r = header.getBoundingClientRect(); 2413 return Math.max(0, Math.round(r.bottom)); 2414 } 2415 2416 function setTop() { 2417 var vw = window.innerWidth || document.documentElement.clientWidth; 2418 var y = window.scrollY || window.pageYOffset; 2419 var adminH = adminFixedH(); 2420 2421 var topPx; 2422 2423 if (vw < DESKTOP_MIN) { 2424 topPx = 60; 2425 } else { 2426 topPx = (y < THRESHOLD) 2427 ? Math.max(headerBottom(), adminH + NAV_H) 2428 : (adminH + NAV_H); 2429 } 2430 2431 document.documentElement.style.setProperty('--ot-search-top', topPx + 'px'); 2432 } 2433 2434 setTop(); 2435 window.addEventListener('scroll', setTop, { passive: true }); 2436 window.addEventListener('resize', setTop); 2437 window.addEventListener('orientationchange', setTop); 2438 window.addEventListener('load', setTop); 2439 2440 if ('ResizeObserver' in window) { 2441 if (header) new ResizeObserver(setTop).observe(header); 2442 if (adminBar) new ResizeObserver(setTop).observe(adminBar); 2443 } 2444 if ('MutationObserver' in window && header) { 2445 new MutationObserver(setTop).observe(header, { attributes: true, attributeFilter: ['class', 'style'] }); 2446 } 2447 2448 document.querySelectorAll('[data-ot-search] .ot-search__toggle') 2449 .forEach(function (btn) { 2450 btn.addEventListener('click', function () { 2451 requestAnimationFrame(setTop); 2452 }, { capture: true }); 2453 }); 2454 })(); 2455 2456 // --------------------------------------------------------------------- 2457 // Legacy dropdown (if still present elsewhere) 2458 // --------------------------------------------------------------------- 2459 (function () { 2460 var toggle = document.querySelector('.search-toggle'); 2461 var dropdown = document.querySelector('.search-dropdown-form'); 2462 if (!toggle || !dropdown) return; 2463 2464 toggle.addEventListener('click', function (e) { 2465 e.preventDefault(); 2466 dropdown.classList.toggle('show-search'); 2467 2468 function handler(evt) { 2469 if (!dropdown.contains(evt.target) && !toggle.contains(evt.target)) { 2470 dropdown.classList.remove('show-search'); 2471 document.removeEventListener('click', handler); 2472 } 2473 } 2474 document.addEventListener('click', handler); 2475 }); 2476 })(); 2477 2478 // --------------------------------------------------------------------- 2479 // Clear button for main ot-search__form (non-sidr) 2480 // --------------------------------------------------------------------- 2481 (function () { 2482 var form = document.querySelector('.ot-search__form'); 2483 if (!form) return; 2484 2485 var input = form.querySelector('.ot-search__input'); 2486 var clear = form.querySelector('.ot-search__clear'); 2487 if (!input) return; 2488 2489 function updateClearVisibility() { 2490 if (!clear) return; 2491 clear.hidden = !input.value.trim().length; 2492 } 2493 2494 if (clear) { 2495 clear.addEventListener('click', function () { 2496 input.value = ''; 2497 input.focus(); 2498 updateClearVisibility(); 2499 input.dispatchEvent(new Event('input', { bubbles: true })); 2500 input.dispatchEvent(new Event('search', { bubbles: true })); 2501 }); 2502 } 2503 2504 input.addEventListener('input', updateClearVisibility); 2505 input.addEventListener('keydown', function (e) { 2506 if (e.key === 'Escape' && input.value) { 2507 e.preventDefault(); 2508 if (clear && !clear.hidden) clear.click(); 2509 else { input.value = ''; updateClearVisibility(); } 2510 } 2511 }); 2512 input.addEventListener('search', updateClearVisibility); 2513 2514 updateClearVisibility(); 2515 })(); 2516 2517 // --------------------------------------------------------------------- 2518 // Sidr burger: close search <details> before opening Sidr (VANILLA) 2519 // Keeps Sidr plugin behavior the same (still calls $.sidr) 2520 // --------------------------------------------------------------------- 2521 (function () { 2522 var trigger = document.querySelector('.vce-responsive-nav'); 2523 if (!trigger) return; 2524 2525 try { trigger.setAttribute('href', '#'); } catch (e) {} 2526 2527 function isSearchOpen() { 2528 var details = document.querySelector('details.ot-search');
2529 if (!details) return false; 2530 if (typeof details.open === 'boolean' && details.open) return true; 2531 if (details.hasAttribute('open')) return true; 2532 if (details.classList.contains('is-open')) return true; 2533 return false; 2534 } 2535 2536 function closeSearchSafely() { 2537 var details = document.querySelector('details.ot-search'); 2538 if (!details) return; 2539 2540 try { 2541 if (typeof details.open === 'boolean') details.open = false; 2542 else details.removeAttribute('open'); 2543 details.classList.remove('is-open'); 2544 } catch (err) { 2545 if (console && console.warn) console.warn('Error closing search details:', err); 2546 } 2547 } 2548 2549 function sidrToggle() { 2550 if (window.jQuery && window.jQuery.sidr) { 2551 window.jQuery.sidr('toggle', 'sidr-main'); 2552 } 2553 } 2554 2555 function sidrClose() { 2556 if (window.jQuery && window.jQuery.sidr) { 2557 window.jQuery.sidr('close', 'sidr-main'); 2558 } 2559 } 2560 2561 trigger.addEventListener('click', function (e) { 2562 e.preventDefault(); 2563 e.stopPropagation(); 2564 2565 if (isSearchOpen()) { 2566 closeSearchSafely(); 2567 setTimeout(sidrToggle, 80); 2568 } else { 2569 sidrToggle(); 2570 } 2571 }, true); 2572 2573 var mainWrapper = document.getElementById('main-wrapper'); 2574 if (mainWrapper) { 2575 mainWrapper.addEventListener('click', function (e) { 2576 if (document.body.classList.contains('sidr-open')) { 2577 e.preventDefault(); 2578 e.stopPropagation(); 2579 sidrClose(); 2580 } 2581 }, true); 2582 } 2583 2584 // These events are fired by Sidr plugin (keep same behavior as your old $(document).on(...)) 2585 document.addEventListener('opened.sidr', function () { 2586 trigger.classList.add('nav-open'); 2587 trigger.setAttribute('aria-expanded', 'true'); 2588 2589 document.querySelectorAll('.sidr-overlay, #sidr-overlay').forEach(function (el) { 2590 el.style.pointerEvents = 'none'; 2591 }); 2592 }); 2593 2594 document.addEventListener('open.sidr', function () { 2595 trigger.classList.add('nav-open'); 2596 trigger.setAttribute('aria-expanded', 'true'); 2597 2598 document.querySelectorAll('.sidr-overlay, #sidr-overlay').forEach(function (el) { 2599 el.style.pointerEvents = 'none'; 2600 }); 2601 }); 2602 2603 document.addEventListener('closed.sidr', function () { 2604 trigger.classList.remove('nav-open'); 2605 trigger.setAttribute('aria-expanded', 'false'); 2606 2607 document.querySelectorAll('.sidr-overlay, #sidr-overlay').forEach(function (el) { 2608 if (el && el.parentNode) el.parentNode.removeChild(el); 2609 }); 2610 2611 setTimeout(function () { 2612 var t = document.querySelector('.vce-responsive-nav'); 2613 if (t) t.style.pointerEvents = 'auto'; 2614 }, 0); 2615 }); 2616 2617 document.addEventListener('close.sidr', function () { 2618 trigger.classList.remove('nav-open'); 2619 trigger.setAttribute('aria-expanded', 'false'); 2620 2621 document.querySelectorAll('.sidr-overlay, #sidr-overlay').forEach(function (el) { 2622 if (el && el.parentNode) el.parentNode.removeChild(el); 2623 }); 2624 2625 setTimeout(function () { 2626 var t = document.querySelector('.vce-responsive-nav'); 2627 if (t) t.style.pointerEvents = 'auto'; 2628 }, 0); 2629 }); 2630 2631 // Some setups dispatch sidr:close custom event (keep this too) 2632 document.addEventListener('sidr:close', function () { 2633 var t = document.querySelector('.vce-responsive-nav'); 2634 if (t) t.style.zIndex = '99999'; 2635 }); 2636 })(); 2637 2638 // --------------------------------------------------------------------- 2639 // <details.ot-search> open/close UX: overlay close, outside click, escape, scroll lock, clear btn 2640 // --------------------------------------------------------------------- 2641 (function () { 2642 var siteNav = document.querySelector('.site-navigation'); 2643 var overlay = document.getElementById('ot-search-overlay'); 2644 var isMobile = function () { return window.matchMedia('(max-width: 768px)').matches; }; 2645 2646 document.querySelectorAll('details.ot-search').forEach(function (details) { 2647 var summary = details.querySelector('summary.ot-search__toggle'); 2648 var panelId = summary && summary.getAttribute('aria-controls'); 2649 var panel = panelId ? document.getElementById(panelId) : null; 2650 2651 var input = panel ? panel.querySelector('.ot-search__input') : null; 2652 var clear = panel ? panel.querySelector('.ot-search__clear') : null; 2653 2654 if (!summary) return; 2655 2656 var scrollY = 0; 2657 2658 function lockScroll() { 2659 if (!isMobile()) return; 2660 scrollY = window.scrollY || window.pageYOffset || 0; 2661 2662 document.documentElement.classList.add('ot-lock-scroll'); 2663 document.body.style.top = '-' + scrollY + 'px'; 2664 document.body.style.position = 'fixed'; 2665 document.body.style.width = '100%'; 2666 } 2667 2668 function unlockScroll() { 2669 if (!document.documentElement.classList.contains('ot-lock-scroll')) return; 2670 2671 document.documentElement.classList.remove('ot-lock-scroll'); 2672 document.body.style.position = ''; 2673 document.body.style.top = ''; 2674 document.body.style.width = ''; 2675 window.scrollTo(0, scrollY); 2676 } 2677 2678 function focusInputFromGesture() { 2679 if (!input) return; 2680 try { input.focus({ preventScroll: true }); } 2681 catch (e) { input.focus(); } 2682 2683 setTimeout(function () { 2684 try { input.focus({ preventScroll: true }); } 2685 catch (e) { input.focus(); } 2686 }, 50); 2687 } 2688 2689 // iOS-compatible focus handler (gesture chain) 2690 summary.addEventListener('click', function () {
2691 if (!details.open && input) { 2692 requestAnimationFrame(function () { 2693 if (details.open && input) input.focus(); 2694 }); 2695 } 2696 }, { capture: false }); 2697 2698 function setExpanded(isOpen) { 2699 summary.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); 2700 if (siteNav) siteNav.classList.toggle('ot-search-open', !!isOpen); 2701 } 2702 2703 var bound = false; 2704 2705 function closeIfOutside(ev) { 2706 if (!details.open) return; 2707 2708 if (overlay && (ev.target === overlay || overlay.contains(ev.target))) return; 2709 2710 var path = ev.composedPath ? ev.composedPath() : null; 2711 var insideDetails = path ? path.includes(details) : details.contains(ev.target); 2712 var insidePanel = panel ? (path ? path.includes(panel) : panel.contains(ev.target)) : false; 2713 2714 if (!insideDetails && !insidePanel) { 2715 ev.preventDefault(); 2716 ev.stopPropagation(); 2717 details.open = false; 2718 } 2719 } 2720 2721 function onEscape(ev) { 2722 if (ev.key === 'Escape' && details.open) { 2723 ev.preventDefault(); 2724 details.open = false; 2725 } 2726 } 2727 2728 function bindGlobals() { 2729 if (bound) return; 2730 bound = true; 2731 document.addEventListener('pointerdown', closeIfOutside, true); 2732 document.addEventListener('keydown', onEscape, true); 2733 } 2734 2735 function unbindGlobals() { 2736 if (!bound) return; 2737 bound = false; 2738 document.removeEventListener('pointerdown', closeIfOutside, true); 2739 document.removeEventListener('keydown', onEscape, true); 2740 } 2741 2742 function onOpen() { 2743 setExpanded(true); 2744 lockScroll(); 2745 bindGlobals(); 2746 } 2747 2748 function onClose() { 2749 setExpanded(false); 2750 unbindGlobals(); 2751 unlockScroll(); 2752 } 2753 2754 details.addEventListener('toggle', function () { 2755 if (details.open) onOpen(); 2756 else onClose(); 2757 }); 2758 2759 if (overlay) { 2760 overlay.addEventListener('pointerdown', function (e) { 2761 if (!details.open) return; 2762 e.preventDefault(); 2763 e.stopPropagation(); 2764 details.open = false; 2765 }, true); 2766 } 2767 2768 // Clear button inside details panel 2769 if (input && clear) { 2770 var toggleClear = function () { clear.hidden = !input.value.trim().length; }; 2771 2772 clear.addEventListener('pointerdown', function (e) { 2773 e.preventDefault(); 2774 e.stopPropagation(); 2775 input.value = ''; 2776 toggleClear(); 2777 focusInputFromGesture(); 2778 input.dispatchEvent(new Event('input', { bubbles: true })); 2779 input.dispatchEvent(new Event('search', { bubbles: true })); 2780 }, true); 2781 2782 input.addEventListener('input', toggleClear); 2783 input.addEventListener('search', toggleClear); 2784 toggleClear(); 2785 } 2786 2787 summary.setAttribute('role', 'button'); 2788 summary.setAttribute('aria-expanded', details.open ? 'true' : 'false'); 2789 }); 2790 })(); 2791 2792 // --------------------------------------------------------------------- 2793 // Add/remove a class on <html> when Sidr opens/closes. 2794 // --------------------------------------------------------------------- 2795 (function () { 2796 function addHtmlLock() { 2797 document.documentElement.classList.add('sidr-open-html'); 2798 } 2799 function removeHtmlLock() { 2800 document.documentElement.classList.remove('sidr-open-html'); 2801 } 2802 2803 var observer = new MutationObserver(function () { 2804 if (document.body.classList.contains('sidr-open')) addHtmlLock(); 2805 else removeHtmlLock(); 2806 }); 2807 observer.observe(document.body, { attributes: true, attributeFilter: ['class'] }); 2808 })(); 2809 2810 // --------------------------------------------------------------------- 2811 // Sidebar overlay: ensure exists + z-index + fade sync + overlay closes Sidr (VANILLA) 2812 // --------------------------------------------------------------------- 2813 (function () { 2814 2815 function blurActive() { 2816 var el = document.activeElement; 2817 if (el && (el.tagName === 'INPUT' || el.tagName === 'TEXTAREA' || el.isContentEditable)) { 2818 try { el.blur(); } catch (e) {} 2819 } 2820 2821 var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream; 2822 if (iOS) { 2823 var tmp = document.createElement('input'); 2824 tmp.setAttribute('type', 'text'); 2825 tmp.style.position = 'fixed'; 2826 tmp.style.opacity = '0'; 2827 tmp.style.pointerEvents = 'none'; 2828 tmp.style.height = '0'; 2829 tmp.style.top = '-1000px'; 2830 document.body.appendChild(tmp); 2831 tmp.focus(); 2832 setTimeout(function () { 2833 try { tmp.blur(); } catch (e) {} 2834 tmp.remove(); 2835 }, 0); 2836 } 2837 } 2838 2839 function sidrClose() { 2840 if (window.jQuery && window.jQuery.sidr) { 2841 window.jQuery.sidr('close', 'sidr-main'); 2842 } 2843 } 2844 2845 function ensureOverlay() {
2846 var overlay = document.getElementById('sidebar-overlay'); 2847 if (!overlay) { 2848 overlay = document.createElement('div'); 2849 overlay.id = 'sidebar-overlay'; 2850 overlay.setAttribute('aria-hidden', 'true'); 2851 document.body.appendChild(overlay); 2852 } 2853 return overlay; 2854 } 2855 2856 var overlay = ensureOverlay(); 2857 2858 // z-index like before: sidr-main z-index - 1 2859 var sidr = document.getElementById('sidr-main'); 2860 var sidrZ = sidr ? parseInt(getComputedStyle(sidr).zIndex, 10) : NaN; 2861 overlay.style.zIndex = (!isNaN(sidrZ)) ? String(sidrZ - 1) : '99998'; 2862 2863 function syncOverlay() { 2864 if (document.body.classList.contains('sidr-open')) { 2865 overlay.classList.add('is-visible'); 2866 overlay.style.pointerEvents = 'auto'; 2867 } else { 2868 overlay.classList.remove('is-visible'); 2869 overlay.style.pointerEvents = 'none'; 2870 } 2871 } 2872 2873 // keep in sync with body class changes 2874 var obs = new MutationObserver(syncOverlay); 2875 obs.observe(document.body, { attributes: true, attributeFilter: ['class'] }); 2876 2877 // Clicking the overlay closes Sidr 2878 function onOverlay(e) { 2879 e.preventDefault(); 2880 e.stopPropagation(); 2881 2882 if (document.body.classList.contains('sidr-open')) { 2883 blurActive(); 2884 sidrClose(); 2885 document.body.style.overflow = ''; 2886 document.body.classList.remove('sidr-open'); // mirrors your old $('body').removeClass('sidr-open') 2887 syncOverlay(); 2888 } 2889 } 2890 2891 overlay.addEventListener('click', onOverlay, true); 2892 overlay.addEventListener('touchstart', onOverlay, { capture: true, passive: false }); 2893 2894 // if Sidr triggers this, keep blur behavior 2895 document.addEventListener('sidr:close', function () { 2896 blurActive(); 2897 }, true); 2898 2899 // also re-sync after clicking the burger 2900 document.body.addEventListener('click', function (e) { 2901 if (e.target.closest('.vce-responsive-nav, #vce-responsive-nav')) { 2902 setTimeout(syncOverlay, 0); 2903 } 2904 }, true); 2905 2906 syncOverlay(); 2907 })(); 2908 2909 2910 // --------------------------------------------------------------------- 2911 // Sidr clear button behavior (mobile pointerdown + desktop click fallback) 2912 // --------------------------------------------------------------------- 2913 (function () { 2914 function isMobile() { 2915 return ( 2916 window.matchMedia('(pointer: coarse)').matches || 2917 window.matchMedia('(max-width: 768px)').matches 2918 ); 2919 } 2920 2921 function getSidrInput(form) { 2922 return form && ( 2923 form.querySelector('input.sidr-class-vce-search-input') || 2924 form.querySelector('input.sidr-class-ot-search__input') || 2925 form.querySelector('input.vce-search-input') || 2926 form.querySelector('input[type="search"]') 2927 ); 2928 } 2929 2930 function getClearBtn(target) { 2931 return target && target.closest( 2932 '.sidr .sidr-class-ot-search__clear, ' + 2933 '.sidr .ot-search__clear, ' + 2934 '.sidr .sidr-class-vce-search-clear, ' + 2935 '.sidr input[type="reset"], ' + 2936 '.sidr button[type="reset"]' 2937 ); 2938 } 2939 2940 function isReset(el) { 2941 if (!el) return false; 2942 var tag = (el.tagName || '').toLowerCase(); 2943 var t = (el.getAttribute('type') || '').toLowerCase(); 2944 return (tag === 'input' || tag === 'button') && t === 'reset'; 2945 } 2946 2947 function manualClear(input) { 2948 input.value = ''; 2949 try { input.setSelectionRange(0, 0); } catch (e) {} 2950 input.dispatchEvent(new Event('input', { bubbles: true })); 2951 input.dispatchEvent(new Event('search', { bubbles: true })); 2952 } 2953 2954 function onPointerDown(ev) { 2955 var btn = getClearBtn(ev.target); 2956 if (!btn || !isMobile()) return; 2957 2958 var form = btn.closest('form'); 2959 var input = getSidrInput(form); 2960 if (!input) return; 2961 2962 ev.preventDefault(); 2963 ev.stopPropagation(); 2964 2965 manualClear(input); 2966 2967 try { input.focus({ preventScroll: true }); } 2968 catch (e) { input.focus(); } 2969 2970 btn.dataset.otCleared = '1'; 2971 } 2972 2973 function onClick(ev) { 2974 var btn = getClearBtn(ev.target); 2975 if (!btn) return; 2976 2977 if (btn.dataset.otCleared === '1') { 2978 ev.preventDefault(); 2979 ev.stopPropagation(); 2980 delete btn.dataset.otCleared; 2981 return; 2982 } 2983 2984 var form = btn.closest('form'); 2985 var input = getSidrInput(form); 2986 if (!input) return; 2987 2988 if (isReset(btn)) { 2989 setTimeout(function () { 2990 try { input.focus({ preventScroll: true }); } 2991 catch (e) { input.focus(); } 2992 }, 0); 2993 } else { 2994 ev.preventDefault(); 2995 manualClear(input); 2996 try { input.focus({ preventScroll: true }); } 2997 catch (e) { input.focus(); } 2998 } 2999 } 3000 3001 document.addEventListener('pointerdown', onPointerDown, true); 3002 document.addEventListener('touchstart', onPointerDown, { capture: true, passive: false }); 3003 document.addEventListener('click', onClick, true); 3004 })(); 3005 3006 // --------------------------------------------------------------------- 3007 // Ensure sidebar overlay exists + z-index + fade sync + overlay closes Sidr 3008 // --------------------------------------------------------------------- 3009 (function () { 3010 if (!window.jQuery) return; 3011 var $ = window.jQuery; 3012 3013 $(function () {
3014 var $overlay = $('#sidebar-overlay'); 3015 if (!$overlay.length) { 3016 $overlay = $('<div id="sidebar-overlay" aria-hidden="true"></div>').appendTo('body'); 3017 } 3018 3019 var sidrZ = parseInt($('#sidr-main').css('z-index'), 10); 3020 if (!isNaN(sidrZ)) $overlay.css('z-index', sidrZ - 1); 3021 else $overlay.css('z-index', 99998); 3022 3023 function syncOverlay() { 3024 if ($('body').hasClass('sidr-open')) { 3025 $overlay.stop(true, true).fadeIn(150); 3026 } else { 3027 $overlay.stop(true, true).fadeOut(150); 3028 } 3029 } 3030 3031 var obs = new MutationObserver(syncOverlay); 3032 obs.observe(document.body, { attributes: true, attributeFilter: ['class'] }); 3033 3034 $('body').on('click', '.vce-responsive-nav, #vce-responsive-nav', function () { 3035 setTimeout(syncOverlay, 0); 3036 }); 3037 3038 $overlay.on('click touchstart', function (e) { 3039 e.preventDefault(); 3040 e.stopPropagation(); 3041 if ($('body').hasClass('sidr-open')) { 3042 if ($.sidr) $.sidr('close', 'sidr-main'); 3043 } 3044 }); 3045 3046 syncOverlay(); 3047 }); 3048 })(); 3049 3050 }); 3051})(); 3052; 3053document.addEventListener("DOMContentLoaded", function () { 3054 // How long an image may stay hidden before we force-reveal it. 3055 const REVEAL_TIMEOUT = 2500; 3056 3057 // How many off-screen images to preload at once after the page has 3058 // finished loading. 2-3 keeps a steady trickle without saturating 3059 // slow connections. 3060 const PRELOAD_CONCURRENCY = 2; 3061 3062 /* ---------------- fade-in (unchanged behaviour) ---------------- */ 3063 3064 function fadeInImage(img) { 3065 if (img.classList.contains("fadeIn")) return; 3066 img.classList.add("fadeIn"); 3067 } 3068 3069 function fadeInImageAnimated(img) { 3070 if (img.classList.contains("fadeIn")) return; 3071 img.style.opacity = "0"; 3072 requestAnimationFrame(() => { 3073 requestAnimationFrame(() => { 3074 img.style.opacity = ""; 3075 img.classList.add("fadeIn"); 3076 }); 3077 }); 3078 } 3079 3080 function prepareImages(scope = document) { 3081 const imgs = scope.querySelectorAll('img[loading="lazy"]:not(.fadeIn)'); 3082 imgs.forEach(img => { 3083 // If the image already finished (success OR failure), reveal it now. 3084 if (img.complete) { 3085 fadeInImage(img); 3086 return; 3087 } 3088 img.addEventListener("load", () => fadeInImage(img), { once: true }); 3089 img.addEventListener("error", () => fadeInImage(img), { once: true }); 3090 3091 // Safety net: never leave an image hidden indefinitely. 3092 setTimeout(() => fadeInImage(img), REVEAL_TIMEOUT); 3093 3094 // Anything added after the page finished loading (e.g. AJAX 3095 // "Load More" posts) joins the preload queue too. 3096 if (pageHasLoaded) queuePreload(img); 3097 }); 3098 } 3099 3100 /* ---------------- progressive preload ---------------- 3101 Native loading="lazy" waits until an image is near the viewport, 3102 so on slow connections you watch images pop in as you scroll. 3103 Once the page (and everything important) has finished loading, 3104 the connection is idle anyway â so we use it: fetch the remaining 3105 off-screen images in DOM order, a couple at a time. By the time 3106 you scroll down, they're already there. 3107 ------------------------------------------------------- */ 3108 3109 let pageHasLoaded = false; 3110 const preloadQueue = []; 3111 let activePreloads = 0; 3112 3113 // Respect users who explicitly asked to save data, and don't 3114 // background-fetch on very poor connections â native lazy loading 3115 // is the right behaviour there. 3116 function preloadAllowed() { 3117 const c = navigator.connection; 3118 if (!c) return true; 3119 if (c.saveData) return false; 3120 if (c.effectiveType === "slow-2g" || c.effectiveType === "2g") return false; 3121 return true; 3122 } 3123 3124 function queuePreload(img) { 3125 if (!preloadAllowed()) return; 3126 if (img.complete || preloadQueue.includes(img)) return; 3127 preloadQueue.push(img); 3128 pumpPreloadQueue(); 3129 } 3130 3131 function pumpPreloadQueue() { 3132 while (activePreloads < PRELOAD_CONCURRENCY && preloadQueue.length) { 3133 const img = preloadQueue.shift(); 3134 if (img.complete) continue; 3135 3136 activePreloads++; 3137 const done = () => { 3138 activePreloads--; 3139 pumpPreloadQueue(); 3140 }; 3141 img.addEventListener("load", done, { once: true }); 3142 img.addEventListener("error", done, { once: true }); 3143 3144 // Flipping to eager makes the browser fetch it immediately, 3145 // regardless of scroll position. 3146 img.loading = "eager"; 3147 3148 // Don't let one stalled request block the queue forever. 3149 setTimeout(() => { 3150 if (!img.complete) done(); 3151 }, 8000); 3152 } 3153 } 3154 3155 function startPreloading() { 3156 pageHasLoaded = true; 3157 if (!preloadAllowed()) return; 3158 3159 // DOM order = the order the user will reach them by scrolling. 3160 document 3161 .querySelectorAll('img[loading="lazy"]') 3162 .forEach(img => queuePreload(img)); 3163 } 3164 3165 if (document.readyState === "complete") { 3166 startPreloading(); 3167 } else { 3168 window.addEventListener("load", () => { 3169 // Give the browser a moment of true idle after the load event 3170 // before we start pulling extra bytes down. 3171 if ("requestIdleCallback" in window) { 3172 requestIdleCallback(startPreloading, { timeout: 2000 }); 3173 } else { 3174 setTimeout(startPreloading, 500); 3175 } 3176 }, { once: true }); 3177 } 3178 3179 /* ---------------- priority (LCP) image ---------------- */ 3180 3181 const firstImg = document.querySelector("img.fade-lcp"); 3182 if (firstImg) { 3183 if (firstImg.complete) { 3184 fadeInImageAnimated(firstImg); 3185 } else { 3186 firstImg.addEventListener("load", () => fadeInImageAnimated(firstImg), { once: true }); 3187 firstImg.addEventListener("error", () => fadeInImageAnimated(firstImg), { once: true }); 3188 setTimeout(() => fadeInImage(firstImg), REVEAL_TIMEOUT); 3189 } 3190 } 3191 3192 prepareImages(document); 3193 3194 // Reveal + queue images added later (e.g. the AJAX "Load More" posts) 3195 const mo = new MutationObserver(mutations => { 3196 mutations.forEach(m => {
3197 m.addedNodes.forEach(node => { 3198 if (!(node instanceof HTMLElement)) return; 3199 prepareImages(node); 3200 }); 3201 }); 3202 }); 3203 mo.observe(document.body, { childList: true, subtree: true }); 3204 3205 // Back/forward cache restore: re-check everything 3206 window.addEventListener("pageshow", (e) => { 3207 if (!e.persisted) return; 3208 prepareImages(document); 3209 }); 3210}); 3211;
vendor: 31,912 bytes, line 3212
3212var tns=function(){var t=window,Ai=t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.msRequestAnimationFrame||function(t){return setTimeout(t,16)},e=window,Ni=e.cancelAnimationFrame||e.mozCancelAnimationFrame||function(t){clearTimeout(t)};function Li(){for(var t,e,n,i=arguments[0]||{},a=1,r=arguments.length;a<r;a++)if(null!==(t=arguments[a]))for(e in t)i!==(n=t[e])&&void 0!==n&&(i[e]=n);return i}function Bi(t){return 0<=["true","false"].indexOf(t)?JSON.parse(t):t}function Si(t,e,n,i){if(i)try{t.setItem(e,n)}catch(t){}return n}function Hi(){var t=document,e=t.body;return e||((e=t.createElement("body")).fake=!0),e}var n=document.documentElement;function Oi(t){var e="";return t.fake&&(e=n.style.overflow,t.style.background="",t.style.overflow=n.style.overflow="hidden",n.appendChild(t)),e}function Di(t,e){t.fake&&(t.remove(),n.style.overflow=e,n.offsetHeight)}function ki(t,e,n,i){"insertRule"in t?t.insertRule(e+"{"+n+"}",i):t.addRule(e,n,i)}function Ri(t){return("insertRule"in t?t.cssRules:t.rules).length}function Ii(t,e,n){for(var i=0,a=t.length;i<a;i++)e.call(n,t[i],i)}var i="classList"in document.createElement("_"),Pi=i?function(t,e){return t.classList.contains(e)}:function(t,e){return 0<=t.className.indexOf(e)},zi=i?function(t,e){Pi(t,e)||t.classList.add(e)}:function(t,e){Pi(t,e)||(t.className+=" "+e)},Wi=i?function(t,e){Pi(t,e)&&t.classList.remove(e)}:function(t,e){Pi(t,e)&&(t.className=t.className.replace(e,""))};function qi(t,e){return t.hasAttribute(e)}function Fi(t,e){return t.getAttribute(e)}function r(t){return void 0!==t.item}function ji(t,e){if(t=r(t)||t instanceof Array?t:[t],"[object Object]"===Object.prototype.toString.call(e))for(var n=t.length;n--;)for(var i in e)t[n].setAttribute(i,e[i])}function Vi(t,e){t=r(t)||t instanceof Array?t:[t];for(var n=(e=e instanceof Array?e:[e]).length,i=t.length;i--;)for(var a=n;a--;)t[i].removeAttribute(e[a])}function Gi(t){for(var e=[],n=0,i=t.length;n<i;n++)e.push(t[n]);return e}function Qi(t,e){"none"!==t.style.display&&(t.style.display="none")}function Xi(t,e){"none"===t.style.display&&(t.style.display="")}function Yi(t){return"none"!==window.getComputedStyle(t).display}function Ki(e){if("string"==typeof e){var n=[e],i=e.charAt(0).toUpperCase()+e.substr(1);["Webkit","Moz","ms","O"].forEach(function(t){"ms"===t&&"transform"!==e||n.push(t+i)}),e=n}for(var t=document.createElement("fakeelement"),a=(e.length,0);a<e.length;a++){var r=e[a];if(void 0!==t.style[r])return r}return!1}function Ji(t,e){var n=!1;return/^Webkit/.test(t)?n="webkit"+e+"End":/^O/.test(t)?n="o"+e+"End":t&&(n=e.toLowerCase()+"end"),n}var a=!1;try{var o=Object.defineProperty({},"passive",{get:function(){a=!0}});window.addEventListener("test",null,o)}catch(t){}var u=!!a&&{passive:!0};function Ui(t,e,n){for(var i in e){var a=0<=["touchstart","touchmove"].indexOf(i)&&!n&&u;t.addEventListener(i,e[i],a)}}function _i(t,e){for(var n in e){var i=0<=["touchstart","touchmove"].indexOf(n)&&u;t.removeEventListener(n,e[n],i)}}function Zi(){return{topics:{},on:function(t,e){this.topics[t]=this.topics[t]||[],this.topics[t].push(e)},off:function(t,e){if(this.topics[t])for(var n=0;n<this.topics[t].length;n++)if(this.topics[t][n]===e){this.topics[t].splice(n,1);break}},emit:function(e,n){n.type=e,this.topics[e]&&this.topics[e].forEach(function(t){t(n,e)})}}}Object.keys||(Object.keys=function(t){var e=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.push(n);return e}),"remove"in Element.prototype||(Element.prototype.remove=function(){this.parentNode&&this.parentNode.removeChild(this)});var $i=function(H){H=Li({container:".slider",mode:"carousel",axis:"horizontal",items:1,gutter:0,edgePadding:0,fixedWidth:!1,autoWidth:!1,viewportMax:!1,slideBy:1,center:!1,controls:!0,controlsPosition:"top",controlsText:["prev","next"],controlsContainer:!1,prevButton:!1,nextButton:!1,nav:!0,navPosition:"top",navContainer:!1,navAsThumbnails:!1,arrowKeys:!1,speed:300,autoplay:!1,autoplayPosition:"top",autoplayTimeout:5e3,autoplayDirection:"forward",autoplayText:["start","stop"],autoplayHoverPause:!1,autoplayButton:!1,autoplayButtonOutput:!0,autoplayResetOnVisibility:!0,animateIn:"tns-fadeIn",animateOut:"tns-fadeOut",animateNormal:"tns-normal",animateDelay:!1,loop:!0,rewind:!1,autoHeight:!1,responsive:!1,lazyload:!1,lazyloadSelector:".tns-lazy-img",touch:!0,mouseDrag:!1,swipeAngle:15,nested:!1,preventActionWhenRunning:!1,preventScrollOnTouch:!1,freezable:!0,onInit:!1,useLocalStorage:!0,nonce:!1},H||{});var O=document,m=window,a={ENTER:13,SPACE:32,LEFT:37,RIGHT:39},e={},n=H.useLocalStorage;if(n){var t=navigator.userAgent,i=new Date;try{(e=m.localStorage)?(e.setItem(i,i),n=e.getItem(i)==i,e.removeItem(i)):n=!1,n||(e={})}catch(t){n=!1}n&&(e.tnsApp&&e.tnsApp!==t&&["tC","tPL","tMQ","tTf","t3D","tTDu","tTDe","tADu","tADe","tTE","tAE"].forEach(function(t){e.removeItem(t)}),localStorage.tnsApp=t)}var y=e.tC?Bi(e.tC):Si(e,"tC",function(){var t=document,e=Hi(),n=Oi(e),i=t.createElement("div"),a=!1;e.appendChild(i);try{for(var r,o="(10px * 10)",u=["calc"+o,"-moz-calc"+o,"-webkit-calc"+o],l=0;l<3;l++)if(r=u[l],i.style.width=r,100===i.offsetWidth){a=r.replace(o,"");break}}catch(t){}return e.fake?Di(e,n):i.remove(),a}(),n),g=e.tPL?Bi(e.tPL):Si(e,"tPL",function(){var t,e=document,n=Hi(),i=Oi(n),a=e.createElement("div"),r=e.createElement("div"),o="";a.className="tns-t-subp2",r.className="tns-t-ct";for(var u=0;u<70;u++)o+="<div></div>";return r.innerHTML=o,a.appendChild(r),n.appendChild(a),t=Math.abs(a.getBoundingClientRect().left-r.children[67].getBoundingClientRect().left)<2,n.fake?Di(n,i):a.remove(),t}(),n),D=e.tMQ?Bi(e.tMQ):Si(e,"tMQ",function(){if(window.matchMedia||window.msMatchMedia)return!0;var t,e=document,n=Hi(),i=Oi(n),a=e.createElement("div"),r=e.createElement("style"),o="@media all and (min-width:1px){.tns-mq-test{position:absolute}}";return r.type="text/css",a.className="tns-mq-test",n.appendChild(r),n.appendChild(a),r.styleSheet?r.styleSheet.cssText=o:r.appendChild(e.createTextNode(o)),t=window.getComputedStyle?window.getComputedStyle(a).position:a.currentStyle.position,n.fake?Di(n,i):a.remove(),"absolute"===t}(),n),r=e.tTf?Bi(e.tTf):Si(e,"tTf",Ki("transform"),n),o=e.t3D?Bi(e.t3D):Si(e,"t3D",function(t){if(!t)return!1;if(!window.getComputedStyle)return!1;var e,n=document,i=Hi(),a=Oi(i),r=n.createElement("p"),o=9<t.length?"-"+t.slice(0,-9).toLowerCase()+"-":"";return o+="transform",i.insertBefore(r,null),r.style[t]="translate3d(1px,1px,1px)",e=window.getComputedStyle(r).getPropertyValue(o),i.fake?Di(i,a):r.remove(),void 0!==e&&0<e.length&&"none"!==e}(r),n),x=e.tTDu?Bi(e.tTDu):Si(e,"tTDu",Ki("transitionDuration"),n),u=e.tTDe?Bi(e.tTDe):Si(e,"tTDe",Ki("transitionDelay"),n),b=e.tADu?Bi(e.tADu):Si(e,"tADu",Ki("animationDuration"),n),l=e.tADe?Bi(e.tADe):Si(e,"tADe",Ki("animationDelay"),n),s=e.tTE?Bi(e.tTE):Si(e,"tTE",Ji(x,"Transition"),n),c=e.tAE?Bi(e.tAE):Si(e,"tAE",Ji(b,"Animation"),n),f=m.console&&"function"==typeof m.console.warn,d=["container","controlsContainer","prevButton","nextButton","navContainer","autoplayButton"],v={};if(d.forEach(function(t){if("string"==typeof H[t]){var e=H[t],n=O.querySelector(e);if(v[t]=e,!n||!n.nodeName)return void(f&&console.warn("Can't find",H[t]));H[t]=n}}),!(H.container.children.length<1)){var k=H.responsive,R=H.nested,I="carousel"===H.mode;if(k){0 in k&&(H=Li(H,k[0]),delete k[0]);var p={};for(var h in k){var w=k[h];w="number"==typeof w?{items:w}:w,p[h]=w}k=p,p=null}if(I||function t(e){for(var n in e)I||("slideBy"===n&&(e[n]="page"),"edgePadding"===n&&(e[n]=!1),"autoHeight"===n&&(e[n]=!1)),"responsive"===n&&t(e[n])}(H),!I){H.axis="horizontal",H.slideBy="page",H.edgePadding=!1;var P=H.animateIn,z=H.animateOut,C=H.animateDelay,W=H.animateNormal}var M,q,F="horizontal"===H.axis,T=O.createElement("div"),j=O.createElement("div"),V=H.container,E=V.parentNode,A=V.outerHTML,G=V.children,Q=G.length,X=rn(),Y=!1;k&&En(),I&&(V.className+=" tns-vpfix");var N,L,B,S,K,J,U,_,Z,$=H.autoWidth,tt=sn("fixedWidth"),et=sn("edgePadding"),nt=sn("gutter"),it=un(),at=sn("center"),rt=$?1:Math.floor(sn("items")),ot=sn("slideBy"),ut=H.viewportMax||H.fixedWidthViewportWidth,lt=sn("arrowKeys"),st=sn("speed"),ct=H.rewind,ft=!ct&&H.loop,dt=sn("autoHeight"),vt=sn("controls"),pt=sn("controlsText"),ht=sn("nav"),mt=sn("touch"),yt=sn("mouseDrag"),gt=sn("autoplay"),xt=sn("autoplayTimeout"),bt=sn("autoplayText"),wt=sn("autoplayHoverPause"),Ct=sn("autoplayResetOnVisibility"),Mt=(U=null,_=sn("nonce"),Z=document.createElement("style"),U&&Z.setAttribute("media",U),_&&Z.setAttribute("nonce",_),document.querySelector("head").appendChild(Z),Z.sheet?Z.sheet:Z.styleSheet),Tt=H.lazyload,Et=H.lazyloadSelector,At=[],Nt=ft?(K=function(){{if($||tt&&!ut)return Q-1;var t=tt?"fixedWidth":"items",e=[];if((tt||H[t]<Q)&&e.push(H[t]),k)for(var n in k){var i=k[n][t];i&&(tt||i<Q)&&e.push(i)}return e.length||e.push(0),Math.ceil(tt?ut/Math.min.apply(null,e):Math.max.apply(null,e))}}(),J=I?Math.ceil((5*K-Q)/2):4*K-Q,J=Math.max(K,J),ln("edgePadding")?J+1:J):0,Lt=I?Q+2*Nt:Q+Nt,Bt=!(!tt&&!$||ft),St=tt?_n():null,Ht=!I||!ft,Ot=F?"left":"top",Dt="",kt="",Rt=tt?function(){return at&&!ft?Q-1:Math.ceil(-St/(tt+nt))}:$?function(){for(var t=0;t<Lt;t++)if(N[t]>=-St)return t}:function(){return at&&I&&!ft?Q-1:ft||I?Math.max(0,Lt-Math.ceil(rt)):Lt-1},It=en(sn("startIndex")),Pt=It,zt=(tn(),0),Wt=$?null:Rt(),qt=H.preventActionWhenRunning,Ft=H.swipeAngle,jt=!Ft||"?",Vt=!1,Gt=H.onInit,Qt=new Zi,Xt=" tns-slider tns-"+H.mode,Yt=V.id||(S=window.tnsId,window.tnsId=S?S+1:1,"tns"+window.tnsId),Kt=sn("disable"),Jt=!1,Ut=H.freezable,_t=!(!Ut||$)&&Tn(),Zt=!1,$t={click:oi,keydown:function(t){t=pi(t);var e=[a.LEFT,a.RIGHT].indexOf(t.keyCode);0<=e&&(0===e?we.disabled||oi(t,-1):Ce.disabled||oi(t,1))}},te={click:function(t){if(Vt){if(qt)return;ai()}var e=hi(t=pi(t));for(;e!==Ae&&!qi(e,"data-nav");)e=e.parentNode;if(qi(e,"data-nav")){var n=Se=Number(Fi(e,"data-nav")),i=tt||$?n*Q/Le:n*rt,a=le?n:Math.min(Math.ceil(i),Q-1);ri(a,t),He===n&&(Pe&&fi(),Se=-1)}},keydown:function(t){t=pi(t);var e=O.activeElement;if(!qi(e,"data-nav"))return;var n=[a.LEFT,a.RIGHT,a.ENTER,a.SPACE].indexOf(t.keyCode),i=Number(Fi(e,"data-nav"));0<=n&&(0===n?0<i&&vi(Ee[i-1]):1===n?i<Le-1&&vi(Ee[i+1]):ri(Se=i,t))}},ee={mouseover:function(){Pe&&(li(),ze=!0)},mouseout:function(){ze&&(ui(),ze=!1)}},ne={visibilitychange:function(){O.hidden?Pe&&(li(),qe=!0):qe&&(ui(),qe=!1)}},ie={keydown:function(t){t=pi(t);var e=[a.LEFT,a.RIGHT].indexOf(t.keyCode);0<=e&&oi(t,0===e?-1:1)}},ae={touchstart:xi,touchmove:bi,touchend:wi,touchcancel:wi},re={mousedown:xi,mousemove:bi,mouseup:wi,mouseleave:wi},oe=ln("controls"),ue=ln("nav"),le=!!$||H.navAsThumbnails,se=ln("autoplay"),ce=ln("touch"),fe=ln("mouseDrag"),de="tns-slide-active",ve="tns-slide-cloned",pe="tns-complete",he={load:function(t){kn(hi(t))},error:function(t){e=hi(t),zi(e,"failed"),Rn(e);var e}},me="force"===H.preventScrollOnTouch;if(oe)var ye,ge,xe=H.controlsContainer,be=H.controlsContainer?H.controlsContainer.outerHTML:"",we=H.prevButton,Ce=H.nextButton,Me=H.prevButton?H.prevButton.outerHTML:"",Te=H.nextButton?H.nextButton.outerHTML:"";if(ue)var Ee,Ae=H.navContainer,Ne=H.navContainer?H.navContainer.outerHTML:"",Le=$?Q:Mi(),Be=0,Se=-1,He=an(),Oe=He,De="tns-nav-active",ke="Carousel Page ",Re=" (Current Slide)";if(se)var Ie,Pe,ze,We,qe,Fe="forward"===H.autoplayDirection?1:-1,je=H.autoplayButton,Ve=H.autoplayButton?H.autoplayButton.outerHTML:"",Ge=["<span class='tns-visually-hidden'>"," animation</span>"];if(ce||fe)var Qe,Xe,Ye={},Ke={},Je=!1,Ue=F?function(t,e){return t.x-e.x}:function(t,e){return t.y-e.y};$||$e(Kt||_t),r&&(Ot=r,Dt="translate",o?(Dt+=F?"3d(":"3d(0px, ",kt=F?", 0px, 0px)":", 0px)"):(Dt+=F?"X(":"Y(",kt=")")),I&&(V.className=V.className.replace("tns-vpfix","")),function(){ln("gutter");T.className="tns-outer",j.className="tns-inner",T.id=Yt+"-ow",j.id=Yt+"-iw",""===V.id&&(V.id=Yt);Xt+=g||$?" tns-subpixel":" tns-no-subpixel",Xt+=y?" tns-calc":" tns-no-calc",$&&(Xt+=" tns-autowidth");Xt+=" tns-"+H.axis,V.className+=Xt,I?((M=O.createElement("div")).id=Yt+"-mw",M.className="tns-ovh",T.appendChild(M),M.appendChild(j)):T.appendChild(j);if(dt){var t=M||j;t.className+=" tns-ah"}if(E.insertBefore(T,V),j.appendChild(V),Ii(G,function(t,e){zi(t,"tns-item"),t.id||(t.id=Yt+"-item"+e),!I&&W&&zi(t,W),ji(t,{"aria-hidden":"true",tabindex:"-1"})}),Nt){for(var e=O.createDocumentFragment(),n=O.createDocumentFragment(),i=Nt;i--;){var a=i%Q,r=G[a].cloneNode(!0);if(zi(r,ve),Vi(r,"id"),n.insertBefore(r,n.firstChild),I){var o=G[Q-1-a].cloneNode(!0);zi(o,ve),Vi(o,"id"),e.appendChild(o)}}V.insertBefore(e,V.firstChild),V.appendChild(n),G=V.children}}(),function(){if(!I)for(var t=It,e=It+Math.min(Q,rt);t<e;t++){var n=G[t];n.style.left=100*(t-It)/rt+"%",zi(n,P),Wi(n,W)}F&&(g||$?(ki(Mt,"#"+Yt+" > .tns-item","font-size:"+m.getComputedStyle(G[0]).fontSize+";",Ri(Mt)),ki(Mt,"#"+Yt,"font-size:0;",Ri(Mt))):I&&Ii(G,function(t,e){var n;t.style.marginLeft=(n=e,y?y+"("+100*n+"% / "+Lt+")":100*n/Lt+"%")}));if(D){if(x){var i=M&&H.autoHeight?hn(H.speed):"";ki(Mt,"#"+Yt+"-mw",i,Ri(Mt))}i=cn(H.edgePadding,H.gutter,H.fixedWidth,H.speed,H.autoHeight),ki(Mt,"#"+Yt+"-iw",i,Ri(Mt)),I&&(i=F&&!$?"width:"+fn(H.fixedWidth,H.gutter,H.items)+";":"",x&&(i+=hn(st)),ki(Mt,"#"+Yt,i,Ri(Mt))),i=F&&!$?dn(H.fixedWidth,H.gutter,H.items):"",H.gutter&&(i+=vn(H.gutter)),I||(x&&(i+=hn(st)),b&&(i+=mn(st))),i&&ki(Mt,"#"+Yt+" > .tns-item",i,Ri(Mt))}else{I&&dt&&(M.style[x]=st/1e3+"s"),j.style.cssText=cn(et,nt,tt,dt),I&&F&&!$&&(V.style.width=fn(tt,nt,rt));var i=F&&!$?dn(tt,nt,rt):"";nt&&(i+=vn(nt)),i&&ki(Mt,"#"+Yt+" > .tns-item",i,Ri(Mt))}if(k&&D)for(var a in k){a=parseInt(a);var r=k[a],i="",o="",u="",l="",s="",c=$?null:sn("items",a),f=sn("fixedWidth",a),d=sn("speed",a),v=sn("edgePadding",a),p=sn("autoHeight",a),h=sn("gutter",a);x&&M&&sn("autoHeight",a)&&"speed"in r&&(o="#"+Yt+"-mw{"+hn(d)+"}"),("edgePadding"in r||"gutter"in r)&&(u="#"+Yt+"-iw{"+cn(v,h,f,d,p)+"}"),I&&F&&!$&&("fixedWidth"in r||"items"in r||tt&&"gutter"in r)&&(l="width:"+fn(f,h,c)+";"),x&&"speed"in r&&(l+=hn(d)),l&&(l="#"+Yt+"{"+l+"}"),("fixedWidth"in r||tt&&"gutter"in r||!I&&"items"in r)&&(s+=dn(f,h,c)),"gutter"in r&&(s+=vn(h)),!I&&"speed"in r&&(x&&(s+=hn(d)),b&&(s+=mn(d))),s&&(s="#"+Yt+" > .tns-item{"+s+"}"),(i=o+u+l+s)&&Mt.insertRule("@media (min-width: "+a/16+"em) {"+i+"}",Mt.cssRules.length)}}(),yn();var _e=ft?I?function(){var t=zt,e=Wt;t+=ot,e-=ot,et?(t+=1,e-=1):tt&&(it+nt)%(tt+nt)&&(e-=1),Nt&&(e<It?It-=Q:It<t&&(It+=Q))}:function(){if(Wt<It)for(;zt+Q<=It;)It-=Q;else if(It<zt)for(;It<=Wt-Q;)It+=Q}:function(){It=Math.max(zt,Math.min(Wt,It))},Ze=I?function(){var e,n,i,a,t,r,o,u,l,s,c;Jn(V,""),x||!st?(ti(),st&&Yi(V)||ai()):(e=V,n=Ot,i=Dt,a=kt,t=Zn(),r=st,o=ai,u=Math.min(r,10),l=0<=t.indexOf("%")?"%":"px",t=t.replace(l,""),s=Number(e.style[n].replace(i,"").replace(a,"").replace(l,"")),c=(t-s)/r*u,setTimeout(function t(){r-=u,s+=c,e.style[n]=i+s+l+a,0<r?setTimeout(t,u):o()},u)),F||Ci()}:function(){At=[];var t={};t[s]=t[c]=ai,_i(G[Pt],t),Ui(G[It],t),ei(Pt,P,z,!0),ei(It,W,P),s&&c&&st&&Yi(V)||ai()};return{version:"2.9.4",getInfo:Ei,events:Qt,goTo:ri,play:function(){gt&&!Pe&&(ci(),We=!1)},pause:function(){Pe&&(fi(),We=!0)},isOn:Y,updateSliderHeight:Fn,refresh:yn,destroy:function(){if(Mt.disabled=!0,Mt.ownerNode&&Mt.ownerNode.remove(),_i(m,{resize:Cn}),lt&&_i(O,ie),xe&&_i(xe,$t),Ae&&_i(Ae,te),_i(V,ee),_i(V,ne),je&&_i(je,{click:di}),gt&&clearInterval(Ie),I&&s){var t={};t[s]=ai,_i(V,t)}mt&&_i(V,ae),yt&&_i(V,re);var r=[A,be,Me,Te,Ne,Ve];for(var e in d.forEach(function(t,e){var n="container"===t?T:H[t];if("object"==typeof n&&n){var i=!!n.previousElementSibling&&n.previousElementSibling,a=n.parentNode;n.outerHTML=r[e],H[t]=i?i.nextElementSibling:a.firstElementChild}}),d=P=z=C=W=F=T=j=V=E=A=G=Q=q=X=$=tt=et=nt=it=rt=ot=ut=lt=st=ct=ft=dt=Mt=Tt=N=At=Nt=Lt=Bt=St=Ht=Ot=Dt=kt=Rt=It=Pt=zt=Wt=Ft=jt=Vt=Gt=Qt=Xt=Yt=Kt=Jt=Ut=_t=Zt=$t=te=ee=ne=ie=ae=re=oe=ue=le=se=ce=fe=de=pe=he=L=vt=pt=xe=be=we=Ce=ye=ge=ht=Ae=Ne=Ee=Le=Be=Se=He=Oe=De=ke=Re=gt=xt=Fe=bt=wt=je=Ve=Ct=Ge=Ie=Pe=ze=We=qe=Ye=Ke=Qe=Je=Xe=Ue=mt=yt=null,this)"rebuild"!==e&&(this[e]=null);Y=!1},rebuild:function(){return $i(Li(H,v))}}}function $e(t){t&&(vt=ht=mt=yt=lt=gt=wt=Ct=!1)}function tn(){for(var t=I?It-Nt:It;t<0;)t+=Q;return t%Q+1}function en(t){return t=t?Math.max(0,Math.min(ft?Q-1:Q-rt,t)):0,I?t+Nt:t}function nn(t){for(null==t&&(t=It),I&&(t-=Nt);t<0;)t+=Q;return Math.floor(t%Q)}function an(){var t,e=nn();return t=le?e:tt||$?Math.ceil((e+1)*Le/Q-1):Math.floor(e/rt),!ft&&I&&It===Wt&&(t=Le-1),t}function rn(){return m.innerWidth||O.documentElement.clientWidth||O.body.clientWidth}function on(t){return"top"===t?"afterbegin":"beforeend"}function un(){var t=et?2*et-nt:0;return function t(e){if(null!=e){var n,i,a=O.createElement("div");return e.appendChild(a),i=(n=a.getBoundingClientRect()).right-n.left,a.remove(),i||t(e.parentNode)}}(E)-t}function ln(t){if(H[t])return!0;if(k)for(var e in k)if(k[e][t])return!0;return!1}function sn(t,e){if(null==e&&(e=X),"items"===t&&tt)return Math.floor((it+nt)/(tt+nt))||1;var n=H[t];if(k)for(var i in k)e>=parseInt(i)&&t in k[i]&&(n=k[i][t]);return"slideBy"===t&&"page"===n&&(n=sn("items")),I||"slideBy"!==t&&"items"!==t||(n=Math.floor(n)),n}function cn(t,e,n,i,a){var r="";if(void 0!==t){var o=t;e&&(o-=e),r=F?"margin: 0 "+o+"px 0 "+t+"px;":"margin: "+t+"px 0 "+o+"px 0;"}else if(e&&!n){var u="-"+e+"px";r="margin: 0 "+(F?u+" 0 0":"0 "+u+" 0")+";"}return!I&&a&&x&&i&&(r+=hn(i)),r}function fn(t,e,n){return t?(t+e)*Lt+"px":y?y+"("+100*Lt+"% / "+n+")":100*Lt/n+"%"}function dn(t,e,n){var i;if(t)i=t+e+"px";else{I||(n=Math.floor(n));var a=I?Lt:n;i=y?y+"(100% / "+a+")":100/a+"%"}return i="width:"+i,"inner"!==R?i+";":i+" !important;"}function vn(t){var e="";!1!==t&&(e=(F?"padding-":"margin-")+(F?"right":"bottom")+": "+t+"px;");return e}function pn(t,e){var n=t.substring(0,t.length-e).toLowerCase();return n&&(n="-"+n+"-"),n}function hn(t){return pn(x,18)+"transition-duration:"+t/1e3+"s;"}function mn(t){return pn(b,17)+"animation-duration:"+t/1e3+"s;"}function yn(){if(ln("autoHeight")||$||!F){var t=V.querySelectorAll("img");Ii(t,function(t){var e=t.src;Tt||(e&&e.indexOf("data:image")<0?(t.src="",Ui(t,he),zi(t,"loading"),t.src=e):kn(t))}),Ai(function(){zn(Gi(t),function(){L=!0})}),ln("autoHeight")&&(t=In(It,Math.min(It+rt-1,Lt-1))),Tt?gn():Ai(function(){zn(Gi(t),gn)})}else I&&$n(),bn(),wn()}function gn(){if($&&1<Q){var i=ft?It:Q-1;!function t(){var e=G[i].getBoundingClientRect().left,n=G[i-1].getBoundingClientRect().right;Math.abs(e-n)<=1?xn():setTimeout(function(){t()},16)}()}else xn()}function xn(){F&&!$||(jn(),$?(St=_n(),Ut&&(_t=Tn()),Wt=Rt(),$e(Kt||_t)):Ci()),I&&$n(),bn(),wn()}function bn(){if(Vn(),T.insertAdjacentHTML("afterbegin",'<div class="tns-liveregion tns-visually-hidden" aria-live="polite" aria-atomic="true">slide <span class="current">'+Hn()+"</span> of "+Q+"</div>"),B=T.querySelector(".tns-liveregion .current"),se){var t=gt?"stop":"start";je?ji(je,{"data-action":t}):H.autoplayButtonOutput&&(T.insertAdjacentHTML(on(H.autoplayPosition),'<button type="button" data-action="'+t+'">'+Ge[0]+t+Ge[1]+bt[0]+"</button>"),je=T.querySelector("[data-action]")),je&&Ui(je,{click:di}),gt&&(ci(),wt&&Ui(V,ee),Ct&&Ui(V,ne))}if(ue){if(Ae)ji(Ae,{"aria-label":"Carousel Pagination"}),Ii(Ee=Ae.children,function(t,e){ji(t,{"data-nav":e,tabindex:"-1","aria-label":ke+(e+1),"aria-controls":Yt})});else{for(var e="",n=le?"":'style="display:none"',i=0;i<Q;i++)e+='<button type="button" data-nav="'+i+'" tabindex="-1" aria-controls="'+Yt+'" '+n+' aria-label="'+ke+(i+1)+'"></button>';e='<div class="tns-nav" aria-label="Carousel Pagination">'+e+"</div>",T.insertAdjacentHTML(on(H.navPosition),e),Ae=T.querySelector(".tns-nav"),Ee=Ae.children}if(Ti(),x){var a=x.substring(0,x.length-18).toLowerCase(),r="transition: all "+st/1e3+"s";a&&(r="-"+a+"-"+r),ki(Mt,"[aria-controls^="+Yt+"-item]",r,Ri(Mt))}ji(Ee[He],{"aria-label":ke+(He+1)+Re}),Vi(Ee[He],"tabindex"),zi(Ee[He],De),Ui(Ae,te)}oe&&(xe||we&&Ce||(T.insertAdjacentHTML(on(H.controlsPosition),'<div class="tns-controls" aria-label="Carousel Navigation" tabindex="0"><button type="button" data-controls="prev" tabindex="-1" aria-controls="'+Yt+'">'+pt[0]+'</button><button type="button" data-controls="next" tabindex="-1" aria-controls="'+Yt+'">'+pt[1]+"</button></div>"),xe=T.querySelector(".tns-controls")),we&&Ce||(we=xe.children[0],Ce=xe.children[1]),H.controlsContainer&&ji(xe,{"aria-label":"Carousel Navigation",tabindex:"0"}),(H.controlsContainer||H.prevButton&&H.nextButton)&&ji([we,Ce],{"aria-controls":Yt,tabindex:"-1"}),(H.controlsContainer||H.prevButton&&H.nextButton)&&(ji(we,{"data-controls":"prev"}),ji(Ce,{"data-controls":"next"})),ye=Qn(we),ge=Qn(Ce),Kn(),xe?Ui(xe,$t):(Ui(we,$t),Ui(Ce,$t))),An()}function wn(){if(I&&s){var t={};t[s]=ai,Ui(V,t)}mt&&Ui(V,ae,H.preventScrollOnTouch),yt&&Ui(V,re),lt&&Ui(O,ie),"inner"===R?Qt.on("outerResized",function(){Mn(),Qt.emit("innerLoaded",Ei())}):(k||tt||$||dt||!F)&&Ui(m,{resize:Cn}),dt&&("outer"===R?Qt.on("innerLoaded",Pn):Kt||Pn()),Dn(),Kt?Bn():_t&&Ln(),Qt.on("indexChanged",Wn),"inner"===R&&Qt.emit("innerLoaded",Ei()),"function"==typeof Gt&&Gt(Ei()),Y=!0}function Cn(t){Ai(function(){Mn(pi(t))})}function Mn(t){if(Y){"outer"===R&&Qt.emit("outerResized",Ei(t)),X=rn();var e,n=q,i=!1;k&&(En(),(e=n!==q)&&Qt.emit("newBreakpointStart",Ei(t)));var a,r,o,u,l=rt,s=Kt,c=_t,f=lt,d=vt,v=ht,p=mt,h=yt,m=gt,y=wt,g=Ct,x=It;if(e){var b=tt,w=dt,C=pt,M=at,T=bt;if(!D)var E=nt,A=et}if(lt=sn("arrowKeys"),vt=sn("controls"),ht=sn("nav"),mt=sn("touch"),at=sn("center"),yt=sn("mouseDrag"),gt=sn("autoplay"),wt=sn("autoplayHoverPause"),Ct=sn("autoplayResetOnVisibility"),e&&(Kt=sn("disable"),tt=sn("fixedWidth"),st=sn("speed"),dt=sn("autoHeight"),pt=sn("controlsText"),bt=sn("autoplayText"),xt=sn("autoplayTimeout"),D||(et=sn("edgePadding"),nt=sn("gutter"))),$e(Kt),it=un(),F&&!$||Kt||(jn(),F||(Ci(),i=!0)),(tt||$)&&(St=_n(),Wt=Rt()),(e||tt)&&(rt=sn("items"),ot=sn("slideBy"),(r=rt!==l)&&(tt||$||(Wt=Rt()),_e())),e&&Kt!==s&&(Kt?Bn():function(){if(!Jt)return;if(Mt.disabled=!1,V.className+=Xt,$n(),ft)for(var t=Nt;t--;)I&&Xi(G[t]),Xi(G[Lt-t-1]);if(!I)for(var e=It,n=It+Q;e<n;e++){var i=G[e],a=e<It+rt?P:W;i.style.left=100*(e-It)/rt+"%",zi(i,a)}Nn(),Jt=!1}()),Ut&&(e||tt||$)&&(_t=Tn())!==c&&(_t?(ti(Zn(en(0))),Ln()):(!function(){if(!Zt)return;et&&D&&(j.style.margin="");if(Nt)for(var t="tns-transparent",e=Nt;e--;)I&&Wi(G[e],t),Wi(G[Lt-e-1],t);Nn(),Zt=!1}(),i=!0)),$e(Kt||_t),gt||(wt=Ct=!1),lt!==f&&(lt?Ui(O,ie):_i(O,ie)),vt!==d&&(vt?xe?Xi(xe):(we&&Xi(we),Ce&&Xi(Ce)):xe?Qi(xe):(we&&Qi(we),Ce&&Qi(Ce))),ht!==v&&(ht?(Xi(Ae),Ti()):Qi(Ae)),mt!==p&&(mt?Ui(V,ae,H.preventScrollOnTouch):_i(V,ae)),yt!==h&&(yt?Ui(V,re):_i(V,re)),gt!==m&&(gt?(je&&Xi(je),Pe||We||ci()):(je&&Qi(je),Pe&&fi())),wt!==y&&(wt?Ui(V,ee):_i(V,ee)),Ct!==g&&(Ct?Ui(O,ne):_i(O,ne)),e){if(tt===b&&at===M||(i=!0),dt!==w&&(dt||(j.style.height="")),vt&&pt!==C&&(we.innerHTML=pt[0],Ce.innerHTML=pt[1]),je&&bt!==T){var N=gt?1:0,L=je.innerHTML,B=L.length-T[N].length;L.substring(B)===T[N]&&(je.innerHTML=L.substring(0,B)+bt[N])}}else at&&(tt||$)&&(i=!0);if((r||tt&&!$)&&(Le=Mi(),Ti()),(a=It!==x)?(Qt.emit("indexChanged",Ei()),i=!0):r?a||Wn():(tt||$)&&(Dn(),Vn(),Sn()),r&&!I&&function(){for(var t=It+Math.min(Q,rt),e=Lt;e--;){var n=G[e];It<=e&&e<t?(zi(n,"tns-moving"),n.style.left=100*(e-It)/rt+"%",zi(n,P),Wi(n,W)):n.style.left&&(n.style.left="",zi(n,W),Wi(n,P)),Wi(n,z)}setTimeout(function(){Ii(G,function(t){Wi(t,"tns-moving")})},300)}(),!Kt&&!_t){if(e&&!D&&(et===A&&nt===E||(j.style.cssText=cn(et,nt,tt,st,dt)),F)){I&&(V.style.width=fn(tt,nt,rt));var S=dn(tt,nt,rt)+vn(nt);u=Ri(o=Mt)-1,"deleteRule"in o?o.deleteRule(u):o.removeRule(u),ki(Mt,"#"+Yt+" > .tns-item",S,Ri(Mt))}dt&&Pn(),i&&($n(),Pt=It)}e&&Qt.emit("newBreakpointEnd",Ei(t))}}function Tn(){if(!tt&&!$)return Q<=(at?rt-(rt-1)/2:rt);var t=tt?(tt+nt)*Q:N[Q],e=et?it+2*et:it+nt;return at&&(e-=tt?(it-tt)/2:(it-(N[It+1]-N[It]-nt))/2),t<=e}function En(){for(var t in q=0,k)(t=parseInt(t))<=X&&(q=t)}function An(){!gt&&je&&Qi(je),!ht&&Ae&&Qi(Ae),vt||(xe?Qi(xe):(we&&Qi(we),Ce&&Qi(Ce)))}function Nn(){gt&&je&&Xi(je),ht&&Ae&&Xi(Ae),vt&&(xe?Xi(xe):(we&&Xi(we),Ce&&Xi(Ce)))}function Ln(){if(!Zt){if(et&&(j.style.margin="0px"),Nt)for(var t="tns-transparent",e=Nt;e--;)I&&zi(G[e],t),zi(G[Lt-e-1],t);An(),Zt=!0}}function Bn(){if(!Jt){if(Mt.disabled=!0,V.className=V.className.replace(Xt.substring(1),""),Vi(V,["style"]),ft)for(var t=Nt;t--;)I&&Qi(G[t]),Qi(G[Lt-t-1]);if(F&&I||Vi(j,["style"]),!I)for(var e=It,n=It+Q;e<n;e++){var i=G[e];Vi(i,["style"]),Wi(i,P),Wi(i,W)}An(),Jt=!0}}function Sn(){var t=Hn();B.innerHTML!==t&&(B.innerHTML=t)}function Hn(){var t=On(),e=t[0]+1,n=t[1]+1;return e===n?e+"":e+" to "+n}function On(t){null==t&&(t=Zn());var n,i,a,r=It;if(at||et?($||tt)&&(i=-(parseFloat(t)+et),a=i+it+2*et):$&&(i=N[It],a=i+it),$)N.forEach(function(t,e){e<Lt&&((at||et)&&t<=i+.5&&(r=e),.5<=a-t&&(n=e))});else{if(tt){var e=tt+nt;at||et?(r=Math.floor(i/e),n=Math.ceil(a/e-1)):n=r+Math.ceil(it/e)-1}else if(at||et){var o=rt-1;if(at?(r-=o/2,n=It+o/2):n=It+o,et){var u=et*rt/it;r-=u,n+=u}r=Math.floor(r),n=Math.ceil(n)}else n=r+rt-1;r=Math.max(r,0),n=Math.min(n,Lt-1)}return[r,n]}function Dn(){if(Tt&&!Kt){var t=On();t.push(Et),In.apply(null,t).forEach(function(t){if(!Pi(t,pe)){var e={};e[s]=function(t){t.stopPropagation()},Ui(t,e),Ui(t,he),t.src=Fi(t,"data-src");var n=Fi(t,"data-srcset");n&&(t.srcset=n),zi(t,"loading")}})}}function kn(t){zi(t,"loaded"),Rn(t)}function Rn(t){zi(t,pe),Wi(t,"loading"),_i(t,he)}function In(t,e,n){var i=[];for(n||(n="img");t<=e;)Ii(G[t].querySelectorAll(n),function(t){i.push(t)}),t++;return i}function Pn(){var t=In.apply(null,On());Ai(function(){zn(t,Fn)})}function zn(n,t){return L?t():(n.forEach(function(t,e){!Tt&&t.complete&&Rn(t),Pi(t,pe)&&n.splice(e,1)}),n.length?void Ai(function(){zn(n,t)}):t())}function Wn(){Dn(),Vn(),Sn(),Kn(),function(){if(ht&&(He=0<=Se?Se:an(),Se=-1,He!==Oe)){var t=Ee[Oe],e=Ee[He];ji(t,{tabindex:"-1","aria-label":ke+(Oe+1)}),Wi(t,De),ji(e,{"aria-label":ke+(He+1)+Re}),Vi(e,"tabindex"),zi(e,De),Oe=He}}()}function qn(t,e){for(var n=[],i=t,a=Math.min(t+e,Lt);i<a;i++)n.push(G[i].offsetHeight);return Math.max.apply(null,n)}function Fn(){var t=dt?qn(It,rt):qn(Nt,Q),e=M||j;e.style.height!==t&&(e.style.height=t+"px")}function jn(){N=[0];var n=F?"left":"top",i=F?"right":"bottom",a=G[0].getBoundingClientRect()[n];Ii(G,function(t,e){e&&N.push(t.getBoundingClientRect()[n]-a),e===Lt-1&&N.push(t.getBoundingClientRect()[i]-a)})}function Vn(){var t=On(),n=t[0],i=t[1];Ii(G,function(t,e){n<=e&&e<=i?qi(t,"aria-hidden")&&(Vi(t,["aria-hidden","tabindex"]),zi(t,de)):qi(t,"aria-hidden")||(ji(t,{"aria-hidden":"true",tabindex:"-1"}),Wi(t,de))})}function Gn(t){return t.nodeName.toLowerCase()}function Qn(t){return"button"===Gn(t)}function Xn(t){return"true"===t.getAttribute("aria-disabled")}function Yn(t,e,n){t?e.disabled=n:e.setAttribute("aria-disabled",n.toString())}function Kn(){if(vt&&!ct&&!ft){var t=ye?we.disabled:Xn(we),e=ge?Ce.disabled:Xn(Ce),n=It<=zt,i=!ct&&Wt<=It;n&&!t&&Yn(ye,we,!0),!n&&t&&Yn(ye,we,!1),i&&!e&&Yn(ge,Ce,!0),!i&&e&&Yn(ge,Ce,!1)}}function Jn(t,e){x&&(t.style[x]=e)}function Un(t){return null==t&&(t=It),$?(it-(et?nt:0)-(N[t+1]-N[t]-nt))/2:tt?(it-tt)/2:(rt-1)/2}function _n(){var t=it+(et?nt:0)-(tt?(tt+nt)*Lt:N[Lt]);return at&&!ft&&(t=tt?-(tt+nt)*(Lt-1)-Un():Un(Lt-1)-N[Lt-1]),0<t&&(t=0),t}function Zn(t){var e;if(null==t&&(t=It),F&&!$)if(tt)e=-(tt+nt)*t,at&&(e+=Un());else{var n=r?Lt:rt;at&&(t-=Un()),e=100*-t/n}else e=-N[t],at&&$&&(e+=Un());return Bt&&(e=Math.max(e,St)),e+=!F||$||tt?"px":"%"}function $n(t){Jn(V,"0s"),ti(t)}function ti(t){null==t&&(t=Zn()),V.style[Ot]=Dt+t+kt}function ei(t,e,n,i){var a=t+rt;ft||(a=Math.min(a,Lt));for(var r=t;r<a;r++){var o=G[r];i||(o.style.left=100*(r-It)/rt+"%"),C&&u&&(o.style[u]=o.style[l]=C*(r-t)/1e3+"s"),Wi(o,e),zi(o,n),i&&At.push(o)}}function ni(t,e){Ht&&_e(),(It!==Pt||e)&&(Qt.emit("indexChanged",Ei()),Qt.emit("transitionStart",Ei()),dt&&Pn(),Pe&&t&&0<=["click","keydown"].indexOf(t.type)&&fi(),Vt=!0,Ze())}function ii(t){return t.toLowerCase().replace(/-/g,"")}function ai(t){if(I||Vt){if(Qt.emit("transitionEnd",Ei(t)),!I&&0<At.length)for(var e=0;e<At.length;e++){var n=At[e];n.style.left="",l&&u&&(n.style[l]="",n.style[u]=""),Wi(n,z),zi(n,W)}if(!t||!I&&t.target.parentNode===V||t.target===V&&ii(t.propertyName)===ii(Ot)){if(!Ht){var i=It;_e(),It!==i&&(Qt.emit("indexChanged",Ei()),$n())}"inner"===R&&Qt.emit("innerLoaded",Ei()),Vt=!1,Pt=It}}}function ri(t,e){if(!_t)if("prev"===t)oi(e,-1);else if("next"===t)oi(e,1);else{if(Vt){if(qt)return;ai()}var n=nn(),i=0;if("first"===t?i=-n:"last"===t?i=I?Q-rt-n:Q-1-n:("number"!=typeof t&&(t=parseInt(t)),isNaN(t)||(e||(t=Math.max(0,Math.min(Q-1,t))),i=t-n)),!I&&i&&Math.abs(i)<rt){var a=0<i?1:-1;i+=zt<=It+i-Q?Q*a:2*Q*a*-1}It+=i,I&&ft&&(It<zt&&(It+=Q),Wt<It&&(It-=Q)),nn(It)!==nn(Pt)&&ni(e)}}function oi(t,e){if(Vt){if(qt)return;ai()}var n;if(!e){for(var i=hi(t=pi(t));i!==xe&&[we,Ce].indexOf(i)<0;)i=i.parentNode;var a=[we,Ce].indexOf(i);0<=a&&(n=!0,e=0===a?-1:1)}if(ct){if(It===zt&&-1===e)return void ri("last",t);if(It===Wt&&1===e)return void ri("first",t)}e&&(It+=ot*e,$&&(It=Math.floor(It)),ni(n||t&&"keydown"===t.type?t:null))}function ui(){Ie=setInterval(function(){oi(null,Fe)},xt),Pe=!0}function li(){clearInterval(Ie),Pe=!1}function si(t,e){ji(je,{"data-action":t}),je.innerHTML=Ge[0]+t+Ge[1]+e}function ci(){ui(),je&&si("stop",bt[1])}function fi(){li(),je&&si("start",bt[0])}function di(){Pe?(fi(),We=!0):(ci(),We=!1)}function vi(t){t.focus()}function pi(t){return mi(t=t||m.event)?t.changedTouches[0]:t}function hi(t){return t.target||m.event.srcElement}function mi(t){return 0<=t.type.indexOf("touch")}function yi(t){t.preventDefault?t.preventDefault():t.returnValue=!1}function gi(){return a=Ke.y-Ye.y,r=Ke.x-Ye.x,t=Math.atan2(a,r)*(180/Math.PI),e=Ft,n=!1,i=Math.abs(90-Math.abs(t)),90-e<=i?n="horizontal":i<=e&&(n="vertical"),n===H.axis;var t,e,n,i,a,r}function xi(t){if(Vt){if(qt)return;ai()}gt&&Pe&&li(),Je=!0,Xe&&(Ni(Xe),Xe=null);var e=pi(t);Qt.emit(mi(t)?"touchStart":"dragStart",Ei(t)),!mi(t)&&0<=["img","a"].indexOf(Gn(hi(t)))&&yi(t),Ke.x=Ye.x=e.clientX,Ke.y=Ye.y=e.clientY,I&&(Qe=parseFloat(V.style[Ot].replace(Dt,"")),Jn(V,"0s"))}function bi(t){if(Je){var e=pi(t);Ke.x=e.clientX,Ke.y=e.clientY,I?Xe||(Xe=Ai(function(){!function t(e){if(!jt)return void(Je=!1);Ni(Xe);Je&&(Xe=Ai(function(){t(e)}));"?"===jt&&(jt=gi());if(jt){!me&&mi(e)&&(me=!0);try{e.type&&Qt.emit(mi(e)?"touchMove":"dragMove",Ei(e))}catch(t){}var n=Qe,i=Ue(Ke,Ye);if(!F||tt||$)n+=i,n+="px";else{var a=r?i*rt*100/((it+nt)*Lt):100*i/(it+nt);n+=a,n+="%"}V.style[Ot]=Dt+n+kt}}(t)})):("?"===jt&&(jt=gi()),jt&&(me=!0)),("boolean"!=typeof t.cancelable||t.cancelable)&&me&&t.preventDefault()}}function wi(i){if(Je){Xe&&(Ni(Xe),Xe=null),I&&Jn(V,""),Je=!1;var t=pi(i);Ke.x=t.clientX,Ke.y=t.clientY;var a=Ue(Ke,Ye);if(Math.abs(a)){if(!mi(i)){var n=hi(i);Ui(n,{click:function t(e){yi(e),_i(n,{click:t})}})}I?Xe=Ai(function(){if(F&&!$){var t=-a*rt/(it+nt);t=0<a?Math.floor(t):Math.ceil(t),It+=t}else{var e=-(Qe+a);if(e<=0)It=zt;else if(e>=N[Lt-1])It=Wt;else for(var n=0;n<Lt&&e>=N[n];)e>N[It=n]&&a<0&&(It+=1),n++}ni(i,a),Qt.emit(mi(i)?"touchEnd":"dragEnd",Ei(i))}):jt&&oi(i,0<a?-1:1)}}"auto"===H.preventScrollOnTouch&&(me=!1),Ft&&(jt="?"),gt&&!Pe&&ui()}function Ci(){(M||j).style.height=N[It+rt]-N[It]+"px"}function Mi(){var t=tt?(tt+nt)*Q/it:Q/rt;return Math.min(Math.ceil(t),Q)}function Ti(){if(ht&&!le&&Le!==Be){var t=Be,e=Le,n=Xi;for(Le<Be&&(t=Le,e=Be,n=Qi);t<e;)n(Ee[t]),t++;Be=Le}}function Ei(t){return{container:V,slideItems:G,navContainer:Ae,navItems:Ee,controlsContainer:xe,hasControls:oe,prevButton:we,nextButton:Ce,items:rt,slideBy:ot,cloneCount:Nt,slideCount:Q,slideCountNew:Lt,index:It,indexCached:Pt,displayIndex:tn(),navCurrentIndex:He,navCurrentIndexCached:Oe,pages:Le,pagesCached:Be,sheet:Mt,isOn:Y,event:t||{}}}f&&console.warn("No slides found in",H.container)};return $i}();
3213 3214; 3215document.addEventListener('DOMContentLoaded', function () { 3216 3217 // â DEFERRED Tiny Slider INIT 3218 function initializeTinySliders() { 3219 document.querySelectorAll('.my-slider-2').forEach(slider => { 3220 const controlsText = [ 3221 '<i class="fa fa-angle-left" aria-hidden="true"></i>', 3222 '<i class="fa fa-angle-right" aria-hidden="true"></i>' 3223 ]; 3224 3225 const tnsOptions = { 3226 container: slider, 3227 items: 1, 3228 axis: "horizontal", 3229 loop: false, 3230 autoplay: false, 3231 controls: false, 3232 mouseDrag: true, 3233 navPosition: 'bottom', 3234 controlsPosition: 'bottom', 3235 autoplayPosition: 'bottom', 3236 swipeAngle: false, 3237 speed: 400, 3238 edgePadding: 100, 3239 gutter: 10, 3240 autoplayButton: false, 3241 autoplayButtonOutput: false, 3242 controlsText: controlsText, 3243 responsive: { 3244 0: { items: 1 }, 3245 768: { items: 2, controls: false }, 3246 1023: { disable: true } 3247 } 3248 }; 3249 3250 const sliderInstance = tns(tnsOptions); 3251 3252 // Accessibility fix 3253 function updateFocusableElements() { 3254 slider.querySelectorAll('[aria-hidden]').forEach(container => { 3255 const isHidden = container.getAttribute('aria-hidden') === 'true'; 3256 container.querySelectorAll('a, button, input, select, textarea, [tabindex]').forEach(el => { 3257 if (isHidden) { 3258 el.setAttribute('tabindex', '-1'); 3259 el.setAttribute('aria-hidden', 'true'); 3260 } else { 3261 el.removeAttribute('tabindex'); 3262 el.removeAttribute('aria-hidden'); 3263 } 3264 }); 3265 }); 3266 } 3267 3268 updateFocusableElements(); 3269 sliderInstance.events.on('indexChanged', updateFocusableElements); 3270 }); 3271 } 3272 3273 initializeTinySliders(); 3274 3275}); 3276; 3277let WPFormsUserJourney=window.WPFormsUserJourney||((n,s)=>{let u={init(){u.checkCleanupCookie();let e=u.getUserJourneyData();var r=Math.round(Date.now()/1e3);0!==Object.keys(e).length||""===n.referrer||n.referrer.startsWith(s.location.origin)||(e[r-2]=n.referrer+"|#|{ReferrerPageTitle}");let t=s.location.href+"|#|"+n.title;"undefined"!=typeof wpforms_user_journey&&wpforms_user_journey.page_id&&(t+="|#|"+Number(wpforms_user_journey.page_id));var o=encodeURIComponent(u.addSlashes(t)),a=u.getLatestTimeStamp(e);e[a]===o&&delete e[a],e[r]=o,e=u.getLastData(e),u.setUserJourneyInputs(e),u.setUserJourneyData(e)},getObjectKeysAsNumbers(e){return Object.keys(e).map(e=>Number.parseInt(e,10))},getLatestTimeStamp(e){e=u.getObjectKeysAsNumbers(e);return Math.max(...e).toString()},checkCleanupCookie(){u.createCookie("_wpfuj","",0),"1"===u.getCookie(wpforms_user_journey.cleanup_cookie_name)&&(localStorage.removeItem(wpforms_user_journey.storage_name),u.createCookie(wpforms_user_journey.cleanup_cookie_name,"",0))},setUserJourneyInputs(t){let o=wpforms_user_journey.storage_name;n.querySelectorAll("form.wpforms-form").forEach(e=>{let r=e.querySelector(`input[name="${o}"]`);r||((r=n.createElement("input")).type="hidden",r.name=o,e.appendChild(r)),r.value=JSON.stringify(t)})},setUserJourneyData(e){u.setLocalStorage(JSON.stringify(e))},setLocalStorage(e){try{localStorage.setItem(wpforms_user_journey.storage_name,e)}catch(e){u.debug("Error setting local storage:",e)}},getLastData(e){var r=Object.entries(e).sort(([e],[r])=>Number(e)-Number(r)),t=[];let o=2;var a=Math.floor(Date.now()/1e3)-31536e3;for(let e=r.length-1;0<=e;--e){var[s,n]=r[e];if(Number(s)<a)break;if(t.length>=wpforms_user_journey.max_data_items)break;var u=String(s).length+String(n).length+6;if(o+u>wpforms_user_journey.max_data_size)break;o+=u,t.push([s,n])}return Object.fromEntries(t)},getUserJourneyData(){let e={};try{var r=JSON.parse(u.getLocalStorage());r&&"object"==typeof r&&!Array.isArray(r)&&(e=r)}catch(e){u.debug("Error parsing JSON:",e)}return e},getLocalStorage(){let e=null;try{e=localStorage.getItem(wpforms_user_journey.storage_name)}catch(e){u.debug("Error getting local storage:",e)}return e},createCookie(e,r,t){let o="",a="";var s;wpforms_user_journey.is_ssl&&(a=";secure"),o=t?-1===t?"":((s=new Date).setTime(s.getTime()+24*t*60*60*1e3),";expires="+s.toGMTString()):";expires=Thu, 01 Jan 1970 00:00:01 GMT",n.cookie=e+"="+r+o+";path=/;samesite=strict"+a},getCookie(e){var r,t=e+"=";for(r of n.cookie.split(";")){let e=r;
3277for(;" "===e.charAt(0);)e=e.substring(1,e.length);if(0===e.indexOf(t))return e.substring(t.length,e.length)}return null},addSlashes(e){return(e+"").replace(/[\\"]/g,"\\$&")},debug(...e){wpforms_user_journey.is_debug&&console.log("User Journey:",...e)}};return u})(document,window);WPFormsUserJourney.init();; 3278(()=>{var e={9885(e){function t(){this.listeners={}}t.prototype.emit=function(e,t){this.listeners[e]=this.listeners[e]??[],this.listeners[e].forEach(e=>e.apply(null,t))},t.prototype.on=function(e,t){this.listeners[e]=this.listeners[e]??[],this.listeners[e].push(t)},e.exports=t},5626(){function e(e){const t=!!e.getAttribute("data-show-if"),n=t?e.getAttribute("data-show-if").split(":"):e.getAttribute("data-hide-if").split(":"),r=n[0],i=(n.length>1?n[1]:"*").split("|"),o=function(e,t){const n=[],r=e.querySelectorAll('input[name="'+t+'"],select[name="'+t+'"],textarea[name="'+t+'"]');for(let e=0;e<r.length;e++)("radio"!==r[e].type&&"checkbox"!==r[e].type||r[e].checked)&&n.push(r[e].value);return n}(function(e){let t=e;for(;t.parentElement;)if(t=t.parentElement,"FORM"===t.tagName)return t;return null}(e),r);let s=!1;for(let e=0;e<o.length&&!s;e++)s=i.indexOf(o[e])>-1||i.indexOf("*")>-1&&o[e].length>0;e.style.display=t?s?"":"none":s?"none":"";const a=e.querySelectorAll("input,select,textarea");for(let e=0;e<a.length;e++)(s||t)&&a[e].getAttribute("data-was-required")&&(a[e].required=!0,a[e].removeAttribute("data-was-required")),s&&t||!a[e].required||(a[e].setAttribute("data-was-required","true"),a[e].required=!1)}function t(){const t=document.querySelectorAll(".mc4wp-form [data-show-if],.mc4wp-form [data-hide-if]");for(let n=0;n<t.length;n++)e(t[n])}function n(t){if(!t.target||!t.target.form||t.target.form.className.indexOf("mc4wp-form")<0)return;const n=t.target.form.querySelectorAll("[data-show-if],[data-hide-if]");for(let t=0;t<n.length;t++)e(n[t])}document.addEventListener("keyup",n,!0),document.addEventListener("change",n,!0),document.addEventListener("mc4wp-refresh",t,!0),window.addEventListener("load",t),t()},6942(e,t,n){const r=n(2076),i=n(6564),o=function(e,t){this.id=e,this.element=t||document.createElement("form"),this.name=this.element.getAttribute("data-name")||"Form #"+this.id,this.errors=[],this.started=!1};o.prototype.setData=function(e){try{i(this.element,e)}catch(e){console.error(e)}},o.prototype.getData=function(){return r(this.element,{hash:!0,empty:!0})},o.prototype.getSerializedData=function(){return r(this.element,{hash:!1,empty:!0})},o.prototype.setResponse=function(e){this.element.querySelector(".mc4wp-response").innerHTML=e},o.prototype.reset=function(){this.setResponse(""),this.element.querySelector(".mc4wp-form-fields").style.display="",this.element.reset()},e.exports=o},9685(e,t,n){const r=n(6942),i=[],o=new(n(9885));function s(e,t){t=t||parseInt(e.getAttribute("data-id"))||0;const n=new r(t,e);return i.push(n),n}e.exports={get:function(e){e=parseInt(e);for(let t=0;t<i.length;t++)if(i[t].id===e)return i[t];return s(document.querySelector(".mc4wp-form-"+e),e)},getByElement:function(e){const t=e.form||e;for(let e=0;e<i.length;e++)if(i[e].element===t)return i[e];return s(t)},on:function(e,t){o.on(e,t)},trigger:function(e,t){"submit"===e||e.indexOf(".submit")>0?(o.emit(t[0].id+"."+e,t),o.emit(e,t)):window.setTimeout(function(){o.emit(t[0].id+"."+e,t),o.emit(e,t)},10)}}},2076(e){var t=/^(?:submit|button|image|reset|file)$/i,n=/^(?:input|select|textarea|keygen)/i,r=/(\[[^\[\]]*\])/g;function i(e,t,n){if(0===t.length)return n;var r=t.shift(),o=r.match(/^\[(.+?)\]$/);if("[]"===r)return e=e||[],Array.isArray(e)?e.push(i(null,t,n)):(e._values=e._values||[],e._values.push(i(null,t,n))),e;if(o){var s=o[1],a=+s;isNaN(a)?(e=e||{})[s]=i(e[s],t,n):(e=e||[])[a]=i(e[a],t,n)}else e[r]=i(e[r],t,n);return e}function o(e,t,n){if(t.match(r))i(e,function(e){var t=[],n=new RegExp(r),i=/^([^\[\]]*)/.exec(e);for(i[1]&&t.push(i[1]);null!==(i=n.exec(e));)t.push(i[1]);return t}(t),n);else{var o=e[t];o?(Array.isArray(o)||(e[t]=[o]),e[t].push(n)):e[t]=n}return e}function s(e,t,n){return n=n.replace(/(\r)?\n/g,"\r\n"),n=(n=encodeURIComponent(n)).replace(/%20/g,"+"),e+(e?"&":"")+encodeURIComponent(t)+"="+n}e.exports=function(e,r){"object"!=typeof r?r={hash:!!r}:void 0===r.hash&&(r.hash=!0);for(var i=r.hash?{}:"",a=r.serializer||(r.hash?o:s),c=e&&e.elements?e.elements:[],l=Object.create(null),u=0;u<c.length;++u){var f=c[u];if((r.disabled||!f.disabled)&&f.name&&n.test(f.nodeName)&&!t.test(f.type)){var d=f.name,h=f.value;if("checkbox"!==f.type&&"radio"!==f.type||f.checked||(h=void 0),r.empty){if
3278("checkbox"!==f.type||f.checked||(h=""),"radio"===f.type&&(l[f.name]||f.checked?f.checked&&(l[f.name]=!0):l[f.name]=!1),null==h&&"radio"==f.type)continue}else if(!h)continue;if("select-multiple"!==f.type)i=a(i,d,h);else{h=[];for(var p=f.options,m=!1,g=0;g<p.length;++g){var y=p[g],v=r.empty&&!y.value,w=y.value||v;y.selected&&w&&(m=!0,i=r.hash&&"[]"!==d.slice(d.length-2)?a(i,d+"[]",y.value):a(i,d,y.value))}!m&&r.empty&&(i=a(i,d,""))}}}if(r.empty)for(var d in l)l[d]||(i=a(i,d,""));return i}},6564(e){e.exports&&(e.exports=function e(t,n,r){for(const i in n){if(!n.hasOwnProperty(i))continue;const o=i;let s=n[i];if(void 0===s&&(s=""),null===s&&(s=""),void 0!==r&&(o=r+"["+i+"]"),s.constructor===Array)o+="[]";else if("object"==typeof s){e(t,s,o);continue}const a=t.elements.namedItem(o);if(!a)continue;const c=a.type||a[0].type;switch(c){default:a.value=s;break;case"radio":case"checkbox":{const e=s.constructor===Array?s:[s];for(let t=0;t<a.length;t++)a[t].checked=e.indexOf(a[t].value)>-1}break;case"select-multiple":{const e=s.constructor===Array?s:[s];for(let t=0;t<a.options.length;t++)a.options[t].selected=e.indexOf(a.options[t].value)>-1}break;case"select":case"select-one":a.value=s.toString()||s;break;case"date":a.value=new Date(s).toISOString().split("T")[0]}const l=new Event("change",{bubbles:!0});switch(c){default:a.dispatchEvent(l);break;case"radio":case"checkbox":for(let e=0;e<a.length;e++)a[e].checked&&a[e].dispatchEvent(l)}}})}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var o=t[r]={exports:{}};return e[r](o,o.exports,n),o.exports}const r=window.mc4wp||{},i=n(9685);function o(e,t){document.addEventListener(e,e=>{if(!e.target)return;const n=e.target;("string"==typeof n.className&&n.className.indexOf("mc4wp-form")>-1||"function"==typeof n.matches&&n.matches(".mc4wp-form *"))&&t.call(e,e)},!0)}n(5626),o("submit",function(e){if(e.defaultPrevented)return;const t=i.getByElement(e.target);i.trigger("submit",[t,e])}),o("focus",function(e){const t=i.getByElement(e.target);t.started||(i.trigger("started",[t,e]),t.started=!0)}),o("change",function(e){const t=i.getByElement(e.target);i.trigger("change",[t,e])}),r.listeners&&([].forEach.call(r.listeners,function(e){i.on(e.event,e.callback)}),delete r.listeners),r.forms=i,window.mc4wp=r})();; 3279var mc4wp_ajax_vars = {"loading_character":"\u2022","ajax_url":"https:\/\/oracleoftime.com\/wp-admin\/admin-ajax.php?action=mc4wp-form","error_text":"Oops. Something went wrong. Please try again later."}; 3280; 3281!function o(n,i,s){function a(e,t){if(!i[e]){if(!n[e]){var r="function"==typeof require&&require;if(!t&&r)return r(e,!0);if(c)return c(e,!0);throw(t=new Error("Cannot find module '"+e+"'")).code="MODULE_NOT_FOUND",t}r=i[e]={exports:{}},n[e][0].call(r.exports,function(t){return a(n[e][1][t]||t)},r,r.exports,o,n,i,s)}return i[e].exports}for(var c="function"==typeof require&&require,t=0;t<s.length;t++)a(s[t]);return a}({1:[function(t,e,r){function n(t){return t.innerHTML||t.value}function i(t,e){t.innerHTML?t.innerHTML=e:t.value=e}function o(t,e){this.formEl=t,this.button=t.querySelector('input[type="submit"], button[type="submit"]'),this.char=null!=e?e:"·",this.button&&(this.originalButton=this.button.cloneNode(!0))}o.prototype.start=function(){var t,e=this.button,r=this.formEl,o=this.char;e?(t=this.button.getAttribute("data-loading-text"))?i(e,t):(e.style.width=window.getComputedStyle(this.button).width,i(e,o),this.loadingInterval=window.setInterval(this.tick.bind(this),500)):r.style.opacity="0.5",r.className+=" mc4wp-loading"},o.prototype.stop=function(){var t=this.button,e=this.originalButton,r=this.formEl,o=this.loadingInterval;this.button?(t.style.width=e.style.width,i(t,n(e)),window.clearInterval(o)):r.style.opacity="",r.className=r.className.replace("mc4wp-loading","")},o.prototype.tick=function(){var t=this.button,e=this.char,r=n(t);i(t,5<=r.length?e:"".concat(r," ").concat(e))},e.exports=o},{}],2:[function(t,e,r){var o=t("./_form-loader.js"),c=window.mc4wp_ajax_vars,l=!1;function n(i){var s,a;l||((s=new o(i.element,c.loading_character)).start(),i.setResponse(""),l=!0,(a=new XMLHttpRequest).onreadystatechange=function(){if(a.readyState>=XMLHttpRequest.DONE)if(s.stop(),l=!1,200<=a.status&&a.status<400)try{var t=JSON.parse(a.responseText);e=i,r=t,(n=window.mc4wp.forms).trigger("submitted",[e,null]),r.error?(e.setResponse(r.error.message),n.trigger("error",[e,r.error.errors])):(o=e.getData(),n.trigger("success",[e,o]),n.trigger(r.data.event,[e,o]),"updated_subscriber"===r.data.event&&n.trigger("subscribed",[e,o,!0]),r.data.hide_fields&&(e.element.querySelector(".mc4wp-form-fields").style.display="none"),e.setResponse(r.data.message),e.element.reset(),r.data.redirect_to&&(window.location.href=r.data.redirect_to))}catch(t){console.error('Mailchimp for WordPress: failed to parse response: "'.concat(t,'"')),i.setResponse('<div class="mc4wp-alert mc4wp-error"><p>'.concat(c.error_text,"</p></div>"))}else console.error('MailChimp for WordPress: request error: "'.concat(a.responseText,'"'));var e,r,o,n},a.open("POST",c.ajax_url,!0),a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.setRequestHeader("Accept","application/json"),a.send(i.get
3281SerializedData()))}void 0===window.mc4wp?console.warn("Mailchimp for WordPress Premium: Unable to initialize AJAX forms feature because Mailchimp for WordPress core script is not properly loaded."):c.inited||(window.mc4wp.forms.on("submit",function(t,e){if(!(t.element.getAttribute("class").indexOf("mc4wp-ajax")<0)){document.activeElement&&"INPUT"===document.activeElement.tagName&&document.activeElement.blur();try{n(t)}catch(t){return void console.error(t)}e.preventDefault()}}),c.inited=!0)},{"./_form-loader.js":1}]},{},[2]);; 3282window.__NEWSLETTER_POPUP_CONFIG__ = {"blockPathContains":["buy-membership"],"scriptUrl":"https:\/\/oracleoftime.com\/wp-content\/plugins\/custom-newlsetter-popup\/custom-newsletter-popup-script.js"}; 3283 3284 (function () { 3285 const { 3286 blockPathContains = [], 3287 scriptUrl = '' 3288 } = (window.__NEWSLETTER_POPUP_CONFIG__ || {}); 3289 3290 let popupScriptLoaded = false; 3291 3292 function isBlockedPage() { 3293 const path = (window.location.pathname || '').toLowerCase(); 3294 3295 if (!blockPathContains || !blockPathContains.length) return false; 3296 3297 if (Array.isArray(blockPathContains)) { 3298 return blockPathContains.some(function (blocked) { 3299 return path.includes(String(blocked).toLowerCase()); 3300 }); 3301 } 3302 3303 return path.includes(String(blockPathContains).toLowerCase()); 3304 } 3305 3306 function loadPopupScript() { 3307 if (popupScriptLoaded) return; 3308 if (isBlockedPage()) return; 3309 if (!scriptUrl) return; 3310 3311 popupScriptLoaded = true; 3312 3313 const s = document.createElement('script'); 3314 s.src = scriptUrl; 3315 s.defer = true; 3316 document.body.appendChild(s); 3317 } 3318 3319 function onScrollTrigger() { 3320 if (isBlockedPage()) { 3321 window.removeEventListener('scroll', onScrollTrigger); 3322 return; 3323 } 3324 3325 const scrollY = window.scrollY || document.documentElement.scrollTop; 3326 const docHeight = document.documentElement.scrollHeight; 3327 const winHeight = window.innerHeight; 3328 const thresholdPoint = (docHeight - winHeight) * 0.4; 3329 3330 if (scrollY >= thresholdPoint) { 3331 loadPopupScript(); 3332 window.removeEventListener('scroll', onScrollTrigger); 3333 } 3334 } 3335 3336 window.addEventListener('scroll', onScrollTrigger, { passive: true }); 3337 })();; 3338window.__POPUP_CONFIG__ = {"campaignId":"geneva-watch-days-2026-09-01","campaignVersion":"2026-09-01","startISO":"2026-08-31T23:00:00Z","cutoffISO":"2026-09-06T23:00:00Z","showDelayMs":2000,"blockPathContains":["hands-on-horology","membership","buy-membership"]}; 3339 3340 (function () { 3341 const { 3342 campaignId = 'geneva-watch-days-2026-09-01', 3343 campaignVersion = '1', 3344 startISO = null, 3345 cutoffISO = null, 3346 showDelayMs = 2000, 3347 blockPathContains = [] 3348 } = (window.__POPUP_CONFIG__ || {}); 3349 3350 const STORAGE_KEY = 'fullWidthPopup:' + campaignId; 3351 const VERSION_KEY = 'fullWidthPopupVersion:' + campaignId; 3352 3353 function getState() { 3354 try { 3355 return JSON.parse(localStorage.getItem(STORAGE_KEY)) || {}; 3356 } catch (e) { 3357 return {}; 3358 } 3359 } 3360 3361 function setState(next) { 3362 try { 3363 localStorage.setItem(STORAGE_KEY, JSON.stringify(next)); 3364 } catch (e) {} 3365 } 3366 3367 function clearState() { 3368 try { 3369 localStorage.removeItem(STORAGE_KEY); 3370 localStorage.removeItem(VERSION_KEY); 3371 3372 localStorage.removeItem('fullWidthPopupClosed'); 3373 sessionStorage.removeItem('fullWidthPopupClosed'); 3374 } catch (e) {} 3375 } 3376 3377 window.fullWidthPopup_reset = clearState; 3378 3379 (function ensureVersion() { 3380 if (typeof campaignVersion !== 'string' || !campaignVersion.length) return; 3381 3382 let current = null; 3383 3384 try { 3385 current = localStorage.getItem(VERSION_KEY); 3386 } catch (e) {} 3387 3388 if (current !== campaignVersion) { 3389 clearState(); 3390 3391 try { 3392 localStorage.setItem(VERSION_KEY, campaignVersion); 3393 } catch (e) {} 3394 } 3395 })(); 3396 3397 function isBlockedPage() { 3398 if (!blockPathContains || !blockPathContains.length) return false; 3399 3400 const path = String(window.location.pathname || '').toLowerCase(); 3401 3402 if (Array.isArray(blockPathContains)) { 3403 return blockPathContains.some(function (blockedPath) { 3404 return path.includes(String(blockedPath).toLowerCase()); 3405 }); 3406 } 3407 3408 return path.includes(String(blockPathContains).toLowerCase()); 3409 } 3410 3411 function showPopup() { 3412 const popup = document.getElementById('full-width-popup');
3413 const overlay = document.getElementById('full-width-overlay'); 3414 3415 if (!popup || !overlay) return; 3416 3417 overlay.style.display = 'block'; 3418 popup.style.display = 'block'; 3419 popup.setAttribute('aria-hidden', 'false'); 3420 3421 popup.offsetHeight; 3422 3423 setTimeout(function () { 3424 popup.style.opacity = '1'; 3425 popup.style.transform = 'translate(-50%, -50%) translateY(0)'; 3426 }, 10); 3427 } 3428 3429 function closePopup() { 3430 const popup = document.getElementById('full-width-popup'); 3431 const overlay = document.getElementById('full-width-overlay'); 3432 3433 if (!popup || !overlay) return; 3434 3435 popup.style.opacity = '0'; 3436 popup.style.transform = 'translate(-50%, -50%) translateY(-50px)'; 3437 popup.setAttribute('aria-hidden', 'true'); 3438 3439 setTimeout(function () { 3440 popup.style.display = 'none'; 3441 overlay.style.display = 'none'; 3442 }, 500); 3443 3444 const st = getState(); 3445 st.lastClosedAt = Date.now(); 3446 setState(st); 3447 } 3448 3449 window.fullWidthPopup_closePopup = closePopup; 3450 3451 function shouldDisplayPopup() { 3452 const now = Date.now(); 3453 const start = startISO ? new Date(startISO).getTime() : -Infinity; 3454 const cutoff = cutoffISO ? new Date(cutoffISO).getTime() : Infinity; 3455 3456 if (Number.isFinite(start) && now < start) return false; 3457 if (Number.isFinite(cutoff) && now >= cutoff) return false; 3458 if (isBlockedPage()) return false; 3459 3460 const st = getState(); 3461 3462 if (st.hasShownOnce) return false; 3463 3464 return true; 3465 } 3466 3467 function markShownOnce() { 3468 const st = getState(); 3469 3470 st.hasShownOnce = true; 3471 st.firstShownAt = Date.now(); 3472 3473 setState(st); 3474 } 3475 3476 let hasTriggered = false; 3477 3478 function removeTriggerListeners() { 3479 window.removeEventListener('mousemove', triggerPopup); 3480 window.removeEventListener('scroll', triggerPopup); 3481 window.removeEventListener('touchstart', triggerPopup); 3482 window.removeEventListener('keydown', triggerPopup); 3483 } 3484 3485 function triggerPopup() { 3486 if (hasTriggered) return; 3487 if (!shouldDisplayPopup()) return; 3488 3489 hasTriggered = true; 3490 3491 markShownOnce(); 3492 3493 setTimeout(showPopup, Number(showDelayMs || 2000)); 3494 3495 removeTriggerListeners(); 3496 } 3497 3498 document.addEventListener('DOMContentLoaded', function () { 3499 window.addEventListener('mousemove', triggerPopup, { passive: true }); 3500 window.addEventListener('scroll', triggerPopup, { passive: true }); 3501 window.addEventListener('touchstart', triggerPopup, { passive: true }); 3502 window.addEventListener('keydown', triggerPopup); 3503 3504 setTimeout(triggerPopup, 10000); 3505 3506 const popup = document.getElementById('full-width-popup'); 3507 3508 if (popup) { 3509 popup.addEventListener('click', function (event) { 3510 if ( 3511 event.target.closest('#full-width-popup-link') || 3512 event.target.id === 'full-width-popup-close' 3513 ) { 3514 closePopup(); 3515 } 3516 }); 3517 } 3518 3519 const overlay = document.getElementById('full-width-overlay'); 3520 3521 if (overlay) { 3522 overlay.addEventListener('click', closePopup); 3523 } 3524 3525 document.addEventListener('keydown', function (event) { 3526 if (event.key === 'Escape') { 3527 closePopup(); 3528 } 3529 }); 3530 }); 3531 })();; 3532function updateButtonLabels() { 3533 var noticeButtons = document.querySelectorAll('.cky-notice-btn-wrapper button[data-cky-tag]'); 3534 3535 noticeButtons.forEach(function(button) { 3536 var buttonTag = button.getAttribute('data-cky-tag'); 3537 switch (buttonTag) { 3538 case 'donotsell-button': 3539 button.textContent = 'Do Not Sell or Share My Personal Information'; 3540 break; 3541 case 'settings-button': 3542 button.textContent = 'Manage Preferences'; 3543 break; 3544 default: 3545 } 3546 }); 3547 } 3548 3549 window.addEventListener('load', updateButtonLabels);
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.