PageSourceSearch

https://oracleoftime.com/wp-content/uploads/siteground-optimizer-a…ined-js-b7b32a4e1298f40f260545e49b856659.js

js oracleoftime.com collected 2026-09-25 04:23:35 UTC 172,784 bytes, 3,549 lines download raw bytes

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 &rarr;";
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 &rarr;";
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.