1<!DOCTYPE html><!-- Last Published: Wed Sep 09 2026 16:57:33 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="ags-prod.webflow.io" data-wf-page="68a742cc2e51325fb51b1f37" data-wf-site="6893c2c851dca9d751167409" lang="en-US"><head><meta charset="utf-8"/><link href="https://cdn.prod.website-files.com" rel="preconnect" crossorigin="anonymous"/><title>AGS | Global Gaming Supplier</title><meta content="Delivering the most electrifying gaming experiences in the world. AGS is a global gaming supplier of high-performing slots, tables, online games, and lottery." name="description"/><meta content="AGS | Global Gaming Supplier" property="og:title"/><meta content="Delivering the most electrifying gaming experiences in the world. AGS is a global gaming supplier of high-performing slots, tables, online games, and lottery." property="og:description"/><meta content="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e43462bddb221414e48206_Open_Graph_Image.png" property="og:image"/><meta content="AGS | Global Gaming Supplier" name="twitter:title"/><meta content="Delivering the most electrifying gaming experiences in the world. AGS is a global gaming supplier of high-performing slots, tables, online games, and lottery." name="twitter:description"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><link href="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/css/ags-prod.webflow.shared.38f4de021.min.css" rel="stylesheet" type="text/css" integrity="sha384-OPTeAhjj6uy2ApgFQD6J9RBRaaAr208kfmye7CWDoUzSy6gdwzRxTNyTTpsonWgy" crossorigin="anonymous"/><style>@media (min-width:992px) {html.w-mod-js:not(.w-mod-ix) [data-w-id="80f3d70d-33c3-923f-4444-37eac15e154f"] {-webkit-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="2fa6f405-3672-ac43-6ea5-4f7b0ac75f85"] {-webkit-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}html.w-mod-js:not(.w-mod-ix) [data-w-id="54fa2044-e33e-aea0-3216-49b681c686d3"] {-webkit-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-moz-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);-ms-transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);transform:translate3d(0, 8rem, 0) scale3d(1, 1, 1) rotateX(0) rotateY(0) rotateZ(0) skew(0, 0);opacity:0;}}</style><style>html.w-mod-js:not(.w-mod-ix3) :is([data-stack-card="card"], .timeline_paragraph-wrapper, .timeline_extention, .footer_background-image, .navbar_search-element) {visibility: hidden !important;}</style>
1<script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script>
1<link href="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6899a38844254b6323cf7b13_Favicon.png" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6899a38a9671b226730d1c79_Webclip.png" rel="apple-touch-icon"/><link href="https://playags.com" rel="canonical"/>
1<script type="application/ld+json"> 2{ 3 "@context": "https://schema.org", 4 "@type": "Organization", 5 "name": "AGS", 6 "alternateName": "American Gaming Systems", 7 "description": "Global gaming supplier of high-performing slots, tables, online games, and lottery.", 8 "url": "https://www.playags.com", 9 "logo": { 10 "@type": "ImageObject", 11 "url": "https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894c4313cc655199bed2e13_LOG.avif", 12 "caption": "AGS logo with orange lightning bolt" 13 }, 14 "inLanguage": "en-US", 15 "sameAs": [ 16 "https://www.linkedin.com/company/american-gaming-systems/", 17 "https://www.facebook.com/AmericanGamingSystems", 18 "https://www.youtube.com/user/AmericanGamingSys", 19 "https://www.instagram.com/play_ags/", 20 "https://www.tiktok.com/@playags/video/7473618273737772331", 21 "https://x.com/PlayAGS" 22 ], 23 "areaServed": [ 24 { 25 "@type": "Country", 26 "name": "United States" 27 }, 28 { 29 "@type": "Country", 30 "name": "Argentina" 31 }, 32 { 33 "@type": "Country", 34 "name": "Canada" 35 }, 36 { 37 "@type": "Country", 38 "name": "Aruba" 39 }, 40 { 41 "@type": "Country", 42 "name": "Mexico" 43 }, 44 { 45 "@type": "Country", 46 "name": "Bonaire" 47 }, 48 { 49 "@type": "Country", 50 "name": "Australia" 51 }, 52 { 53 "@type": "Country", 54 "name": "Chile" 55 }, 56 { 57 "@type": "Country", 58 "name": "England" 59 }, 60 { 61 "@type": "Country", 62 "name": "Curacao" 63 }, 64 { 65 "@type": "Country", 66 "name": "Cyprus" 67 }, 68 { 69 "@type": "Country", 70 "name": "Malaysia" 71 }, 72 { 73 "@type": "Country", 74 "name": "Puerto Rico" 75 }, 76 { 77 "@type": "Country", 78 "name": "Panama" 79 }, 80 { 81 "@type": "Country", 82 "name": "Brazil" 83 }, 84 { 85 "@type": "Country", 86 "name": "Paraguay" 87 }, 88 { 89 "@type": "Country", 90 "name": "Colombia" 91 }, 92 { 93 "@type": "Country", 94 "name": "Peru" 95 }, 96 { 97 "@type": "Country", 98 "name": "Italy" 99 }, 100 { 101 "@type": "Country", 102 "name": "Philippines" 103 }, 104 { 105 "@type": "Country", 106 "name": "Romania" 107 }, 108 { 109 "@type": "Country", 110 "name": "South Africa" 111 }, 112 { 113 "@type": "Country", 114 "name": "Malta" 115 }, 116 { 117 "@type": "Country", 118 "name": "St Martin" 119 }, 120 { 121 "@type": "Country", 122 "name": "Finland" 123 }, 124 { 125 "@type": "Country", 126 "name": "Uruguay" 127 } 128 ], 129 "makesOffer": [ 130 { 131 "@type": "Offer", 132 "itemOffered": { 133 "@type": "Product", 134 "name": "Slot Games and Cabinets", 135 "description": "Class II, Class III, and historical horse racing games for markets worldwide" 136 } 137 }, 138 { 139 "@type": "Offer", 140 "itemOffered": { 141 "@type": "Product", 142 "name": "Table Products", 143 "description": "Progressives, shufflers, side bets, and table equipment for casino floors" 144 } 145 }, 146 { 147 "@type": "Offer", 148 "itemOffered": { 149 "@type": "Product", 150 "name": "Online Gaming", 151 "description": "Real-money online slots, table games, and instant win titles for global markets" 152 } 153 }, 154 { 155 "@type": "Offer", 156 "itemOffered": { 157 "@type": "Product", 158 "name": "Lottery", 159 "description": "Game content designed for state and municipal lottery programs" 160 } 161 } 162 ], 163 "slogan": "Fortune favors the bolt" 164} 165</script>
165<!-- Google Consent Mode v2 defaults - must run before CookieYes and GTM -->
166<script> 167 window.dataLayer = window.dataLayer || []; 168 function gtag() { 169 dataLayer.push(arguments); 170 } 171 gtag('consent', 'default', { 172 ad_storage: 'denied', 173 analytics_storage: 'denied', 174 ad_user_data: 'denied', 175 ad_personalization: 'denied', 176 functionality_storage: 'granted', 177 security_storage: 'granted', 178 wait_for_update: 500, 179 }); 180</script>
180 181<!-- CookieYes -->
182<script id="cookieyes" type="text/javascript" src="https://cdn-cookieyes.com/client_data/68ee36e78c58dd1c60da61e258d7893b/script.js"></script>
182 183 184<!-- OPTIMIZED HEADER CODE FOR VERCEL --> 185<!-- DNS prefetch and preconnect for faster external resource loading --> 186<!-- Preconnect to CDNs and external resources --> 187<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin /> 188<link rel="dns-prefetch" href="https://cdn.jsdelivr.net" /> 189<link rel="preconnect" href="https://www.googletagmanager.com" /> 190<link rel="dns-prefetch" href="https://www.googletagmanager.com" /> 191<link rel="preconnect" href="https://use.typekit.net" crossorigin /> 192<link rel="dns-prefetch" href="https://use.typekit.net" /> 193<link rel="preconnect" href="https://cdn.prod.website-files.com" /> 194<link rel="dns-prefetch" href="https://cdn.prod.website-files.com" /> 195 196<!-- PERFORMANCE FIX #1: Preload LCP images with high priority --> 197<!-- Note: Removed preload links - they may be causing display issues --> 198<!-- The fetchpriority will be set via JavaScript instead --> 199 200<!-- Defer GTM - Load it after page interactive -->
201<script> 202 // Defer GTM to reduce main thread blocking 203 window.addEventListener('load', function () { 204 setTimeout(function () {
vendor: 455 bytes, lines 204-214
204 205 (function (w, d, s, l, i) { 206 w[l] = w[l] || []; 207 w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); 208 var f = d.getElementsByTagName(s)[0], 209 j = d.createElement(s), 210 dl = l != 'dataLayer' ? '&l=' + l : ''; 211 j.async = true; 212 j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; 213 f.parentNode.insertBefore(j, f); 214 })(window, document, 'script', 'dataLayer', '
214GTM-WG7CSMRW
vendor: 8 bytes, lines 214-215
214'); 215
215}, 1000); 216 }); 217</script>
217 218 219<!-- Critical inline CSS - Keep this to prevent render blocking --> 220<style> 221 /* Splide core styles */ 222 .splide, 223 .splide__track { 224 overflow: visible; 225 } 226 .splide__sr { 227 display: none !important; 228 } 229 230 /* Swiper styles */ 231 .swiper-pagination-bullets.swiper-pagination-horizontal { 232 width: auto; 233 } 234 235 /* Hide elements during load */ 236 [data-hide-load] { 237 opacity: 0; 238 } 239 240 /* Font smoothing for better rendering */ 241 body { 242 -webkit-font-smoothing: antialiased; 243 -moz-osx-font-smoothing: grayscale; 244 text-rendering: optimizeLegibility; 245 } 246 247 /* PERFORMANCE FIX #2: Critical CSS for hero images */ 248 .slots-header_element { 249 display: block; 250 max-width: 100%; 251 } 252 .slots-header_element img { 253 display: block; 254 width: 100%; 255 height: auto; 256 } 257 .games_image { 258 display: block; 259 max-width: 100%; 260 } 261</style> 262 263<!-- Defer non-critical CSS with preload + print trick --> 264<!-- This prevents render-blocking while still loading the styles --> 265<link 266 rel="preload" 267 href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css" 268 as="style" 269 onload=" 270 this.onload = null; 271 this.rel = 'stylesheet'; 272 " 273/> 274<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/css/splide-core.min.css" /></noscript> 275<link 276 rel="preload" 277 href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" 278 as="style" 279 onload=" 280 this.onload = null; 281 this.rel = 'stylesheet'; 282 " 283/> 284<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" /></noscript> 285 286<!-- Fallback polyfill for preload -->
287<script> 288 /*! loadCSS. [c]2017 Filament Group, Inc. MIT License */ 289 !(function (n) { 290 'use strict'; 291 n.loadCSS || (n.loadCSS = function () {}); 292 var o = (loadCSS.relpreload = {}); 293 if ( 294 ((o.support = (function () { 295 var e; 296 try { 297 e = n.document.createElement('link').relList.supports('preload'); 298 } catch (t) { 299 e = !1; 300 } 301 return function () { 302 return e; 303 }; 304 })()), 305 (o.bindMediaToggle = function (t) { 306 var e = t.media || 'all'; 307 function a() { 308 (t.addEventListener ? t.removeEventListener('load', a) : t.attachEvent && t.detachEvent('onload', a), t.setAttribute('onload', null), (t.media = e)); 309 } 310 (t.addEventListener ? t.addEventListener('load', a) : t.attachEvent && t.attachEvent('onload', a), 311 setTimeout(function () { 312 ((t.rel = 'stylesheet'), (t.media = 'only x')); 313 }), 314 setTimeout(a, 3e3)); 315 }), 316 !o.support()) 317 ) { 318 ((o.poly = function () { 319 if (!n.document.getElementsByTagName('link')) return; 320 for (var t = n.document.getElementsByTagName('link'), e = 0; e < t.length; e++) { 321 var a = t[e]; 322 'preload' !== a.rel || 'style' !== a.getAttribute('as') || a.getAttribute('data-loadcss') || (a.setAttribute('data-loadcss', !0), o.bindMediaToggle(a)); 323 } 324 }), 325 o.poly()); 326 var t = n.setInterval(o.poly, 500); 327 n.addEventListener 328 ? n.addEventListener('load', function () { 329 (o.poly(), n.clearInterval(t)); 330 }) 331 : n.attachEvent && 332 n.attachEvent('onload', function () { 333 (o.poly(), n.clearInterval(t)); 334 }); 335 } 336 'undefined' != typeof exports ? (exports.loadCSS = loadCSS) : (n.loadCSS = loadCSS); 337 })('undefined' != typeof global ? global : this); 338</script>
338</head><body><div class="page-wrapper"><div class="global-styles"><div class="style-overrides w-embed"><style> 339 * { 340 -webkit-font-smoothing: antialiased; 341 -moz-osx-font-smoothing: grayscale; 342 -o-font-smoothing: antialiased; 343 } 344 345 /* Ensure all elements inherit the color from its parent */ 346 a, 347 .w-input, 348 .w-select, 349 .w-tab-link, 350 .w-nav-link, 351 .w-nav-brand, 352 .w-dropdown-btn, 353 .w-dropdown-toggle, 354 .w-slider-arrow-left, 355 .w-slider-arrow-right, 356 .w-dropdown-link { 357 color: inherit; 358 text-decoration: inherit; 359 } 360 361 /* Focus state style for keyboard navigation for the focusable elements */ 362 *[tabindex]:focus-visible, 363 input[type="file"]:focus-visible { 364 outline: 0.125rem solid #4d65ff; 365 outline-offset: 0.125rem; 366 } 367 368 /* Get rid of top margin on first element in any rich text element */ 369 .w-richtext > :not(div):first-child, .w-richtext > div:first-child > :first-child { 370 margin-top: 0 !important; 371 } 372 373 /* Get rid of bottom margin on last element in any rich text element */ 374 .w-richtext>:last-child, .w-richtext ol li:last-child, .w-richtext ul li:last-child { 375 margin-bottom: 0 !important; 376 } 377 378 /* Prevent all click and hover interaction with an element */ 379 .pointer-events-off { 380 pointer-events: none; 381 } 382 383 /* Enables all click and hover interaction with an element */ 384 .pointer-events-on { 385 pointer-events: auto; 386 } 387 388 /* Create a class of .div-square which maintains a 1:1 dimension of a div */ 389 .div-square::after { 390 content: ""; 391 display: block; 392 padding-bottom: 100%; 393 } 394 395 /* Make sure containers never lose their center alignment */ 396 .container-medium,.container-small, .container-large { 397 margin-right: auto !important; 398 margin-left: auto !important; 399 } 400 401 /* Apply "..." after 4 lines of text */ 402 .text-style-4lines { 403 display: -webkit-box; 404 overflow: hidden; 405 -webkit-line-clamp: 4; 406 -webkit-box-orient: vertical; 407 } 408 409 /* Apply "..." after 3 lines of text */ 410 .text-style-3lines { 411 display: -webkit-box; 412 overflow: hidden; 413 -webkit-line-clamp: 3; 414 -webkit-box-orient: vertical; 415 } 416 417 /* Apply "..." after 2 lines of text */ 418 .text-style-2lines { 419 display: -webkit-box; 420 overflow: hidden; 421 -webkit-line-clamp: 2; 422 -webkit-box-orient: vertical; 423 } 424 425 /* Adds inline flex display */ 426 .display-inlineflex { 427 display: inline-flex; 428 } 429 430 /* These classes are never overwritten */ 431 .hide { 432 display: none !important; 433 } 434 435 /* Remove default Webflow chevron from form select */ 436 select{ 437 -webkit-appearance:none; 438 } 439 440 441 @media screen and (max-width: 991px) { 442 .hide, .hide-tablet { 443 display: none !important; 444 } 445 } 446 @media screen and (max-width: 767px) { 447 .hide-mobile-landscape{ 448 display: none !important; 449 } 450 } 451 @media screen and (max-width: 479px) { 452 .hide-mobile{ 453 display: none !important; 454 } 455 } 456 457 .margin-0 { 458 margin: 0rem !important; 459 } 460 461 .padding-0 { 462 padding: 0rem !important; 463 } 464 465 .spacing-clean { 466 padding: 0rem !important; 467 margin: 0rem !important; 468 } 469 470 .margin-top { 471 margin-right: 0rem !important; 472 margin-bottom: 0rem !important; 473 margin-left: 0rem !important; 474 } 475 476 .padding-top { 477 padding-right: 0rem !important; 478 padding-bottom: 0rem !important; 479 padding-left: 0rem !important; 480 } 481 482 .margin-right { 483 margin-top: 0rem !important; 484 margin-bottom: 0rem !important; 485 margin-left: 0rem !important; 486 } 487 488 .padding-right { 489 padding-top: 0rem !important; 490 padding-bottom: 0rem !important; 491 padding-left: 0rem !important; 492 } 493 494 .margin-bottom { 495 margin-top: 0rem !important; 496 margin-right: 0rem !important; 497 margin-left: 0rem !important; 498 } 499 500 .padding-bottom { 501 padding-top: 0rem !important; 502 padding-right: 0rem !important; 503 padding-left: 0rem !important; 504 } 505 506 .margin-left { 507 margin-top: 0rem !important; 508 margin-right: 0rem !important; 509 margin-bottom: 0rem !important; 510 } 511 512 .padding-left { 513 padding-top: 0rem !important; 514 padding-right: 0rem !important; 515 padding-bottom: 0rem !important; 516 } 517 518 .margin-horizontal { 519 margin-top: 0rem !important; 520 margin-bottom: 0rem !important; 521 } 522 523 .padding-horizontal { 524 padding-top: 0rem !important; 525 padding-bottom: 0rem !important; 526 } 527 528 .margin-vertical { 529 margin-right: 0rem !important; 530 margin-left: 0rem !important; 531 } 532 533 .padding-vertical { 534 padding-right: 0rem !important; 535 padding-left: 0rem !important; 536 } 537 538 /* Apply "..." at 100% width */ 539 .truncate-width { 540 width: 100%; 541 white-space: nowrap; 542 overflow: hidden; 543 text-overflow: ellipsis; 544 } 545 /* Removes native scrollbar */ 546 .no-scrollbar {
547 -ms-overflow-style: none; 548 overflow: -moz-scrollbars-none; 549 } 550 551 .no-scrollbar::-webkit-scrollbar { 552 display: none; 553 } 554 555 .is-disabed{ 556 opacity: 0.5; 557 pointer-events: none; 558 } 559 560 .wf-empty { 561 outline: 0px dashed #555 !important; 562 outline-offset: -1px !important; 563 box-shadow: inset 0 0 0 4px rgba(0, 0, 0, 0), inset 0 0 0 4px rgba(255, 255, 255, 0), inset 0 0 0 1px rgba(255, 255, 255, 0); 564 padding-bottom: 75px; 565 padding-right: 75px; 566 font-size: 0; 567 line-height: 0; 568 vertical-align: middle; 569 } 570 571 /*Fluid Responsive Code*/ 572 html { font-size: 1rem; } 573 @media screen and (max-width:1440px) { html { font-size: calc(0.4977678571428572rem + 0.5580357142857142vw); } } 574 @media screen and (max-width:992px) { html { font-size: 1rem; } } 575 576 577 /* 578 html { font-size: 1rem; } 579 @media screen and (max-width:1440px) { html { font-size: calc(0.0758928571428572rem + 1.0267857142857142vw); } } 580 @media screen and (max-width:991px) { html { font-size: calc(0.0006608280254774002rem + 1.9171974522293vw); } } 581 @media screen and (max-width:834px) { html { font-size: calc(-0.003600746268656141rem + 1.925373134328357vw); } } 582 @media screen and (max-width:767px) { html { font-size: calc(0.0007485029940121901rem + 2.6646706586826343vw); } } 583 @media screen and (max-width:600px) { html { font-size: calc(-0.0010330578512397492rem + 2.669421487603306vw); } } 584 @media screen and (max-width:479px) { html { font-size: calc(0.00035112359550615313rem + 4.101123595505616vw); } } 585 @media screen and (max-width:390px) { html { font-size: calc(-0.26587499999999975rem + 5.1933333333333325vw); } } 586 @media screen and (max-width:240px) { html { font-size: 0.513125rem; } } 587 */ 588 /* Base: all highlighted countries dimmed */ 589 .locations_map-block .highcharts-point { 590 opacity: 0.7; 591 transition: opacity .2s ease; 592 } 593 /* Active (clicked) country */ 594 .locations_map-block .highcharts-point.is-active { 595 opacity: 1; 596 } 597 598 .locations_map-block .custom-tooltip { 599 border-radius: 0.2rem; 600 background: #FF6D00; 601 color: #000; 602 font-size: 0.8rem; 603 font-family: var(--_typography---font-styles--tagline); 604 font-weight: 600; 605 line-height: 0.7rem; /* 89% of font size */ 606 letter-spacing: 0.035rem; 607 text-transform: uppercase; 608 padding: 0.6rem; 609 } 610 611 .is-disabled{ 612 opacity: 0.3; 613 } 614 615 .wf-design-mode .fs-consent_component{ 616 display: none; 617 } 618</style></div><div class="color-schemes w-embed"><style> 619.color-scheme-1 {} 620 621 622.w-slider-dot { 623 background-color: var(--color-scheme-1--text); 624 opacity: 0.20; 625} 626 627.w-slider-dot.w-active { 628 background-color: var(--color-scheme-1--text); 629 opacity: 1; 630} 631 632/* Override .w-slider-nav-invert styles */ 633.w-slider-nav-invert .w-slider-dot { 634 background-color: var(--color-scheme-1--text) !important; 635 opacity: 0.20 !important; 636} 637 638.w-slider-nav-invert .w-slider-dot.w-active { 639 background-color: var(--color-scheme-1--text) !important; 640 opacity: 1 !important; 641} 642 643</style></div><div class="css-animations w-embed"><style> 644 645 [data-image-global-ease]{ 646 transition-property: all; 647 transition-duration: 380ms; 648 transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1); 649 } 650 651 .is-active-accordion .benefits-perks_accordion-overlay{ 652 opacity: 1; 653 } 654 655 .is-active-accordion .benefits-perks_chevron{ 656 transform: rotate(90deg); 657 color: black; 658 } 659 660 661 @media only screen and (min-width: 992px){ 662 /*Blog Hover*/ 663 .newsroom-render_item:hover .newsroom-render_image, 664 [data-hover-card="item"]:hover [data-hover-card="image"]{ 665 filter: grayscale(0%); 666 } 667 668 [data-hover-card="item"]:hover{ 669 transform: translateY(-0.625rem); 670 } 671 672 /*Card Hover Interaction*/ 673 [data-image-scale='image'] { 674 transition-property: transform; 675 transition-duration: 540ms; 676 transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1); 677 } 678 679 [data-image-scale='card']:hover [data-image-scale='image'] { 680 transform: scale(1.1); 681 } 682 683 /*Opacity Interactions*/ 684 .feature-style-1_card:hover .feature-style-1_background-wrapper, 685 .feature-style-1_card:hover .feature-style-1_image.is-absolute, 686 .game-bacon_item:hover .game-bacon_background-wrapper, 687 .games_item:hover .games_background-wrapper, 688 .games_item:hover .data-games-item, 689 .stats_card:hover .stats_card-overlay, 690 [data-opacity-element="card"]:hover [data-opacity-element="overlay"] { 691 opacity: 1; 692 } 693 694 .games_item:hover .text-style-tagline, 695 [data-hover-card="item"]:hover [data-hover-card="tagline-dark"]{ 696 color: black !important; 697 } 698 699 700 .awards-champs_item:hover .awards-champs_shape, 701 .awards-champs_item:hover .awards-champs_tagline, 702 .programs_item:hover .programs_icon 703 { 704 color: white; 705 } 706 707 .feature-style-1_card:hover .feature-style-1_background-flash, 708 .games_item:hover .games_background-flash{ 709 /* transform: translateY(0%); */ 710 transform: scale(1); 711 } 712 713 .feature-style-1_card:hover .button, 714 .games_item:hover .button { 715 background-image: linear-gradient(to bottom, var(--_primitives---colors--white), var(--_primitives---colors--white)); 716 color: var(--_primitives---colors--neutral-darkest); 717 } 718 } 719 720 @media only screen and (max-width: 992px){ 721 .games_item .games_background-wrapper, 722 .games_item .data-games-item, 723 .feature-style-1_card .button-overlay, 724 .games_item .button-overlay 725 { 726 opacity: 1; 727 } 728 729 .games_item .text-style-tagline { 730 color: var(--_primitives---colors--blaze-orange); 731 } 732 733 .feature-style-1_card .feature-style-1_background-flash, 734 .games_item .games_background-flash{ 735 /* transform: translateY(0%); */ 736 transform: scale(1); 737 } 738 739 } 740 741 742</style></div></div><div data-animation="default" class="navbar_component w-nav" data-easing2="ease" fs-scrolldisable-element="smart-nav" data-easing="ease" data-collapse="medium" data-w-id="659f7c84-075d-4fb4-0386-966e523d40ba" role="banner" data-duration="400"><div class="navbar_container"><a href="/" aria-current="page" class="navbar_logo-link w-nav-brand w--current"><img width="252" height="85" alt="Orange lightning bolt logo with AGS letters in black" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894c4313cc655199bed2e13_LOG).avif" loading="eager" class="navbar_logo"/></a><nav role="navigation" class="navbar_menu w-nav-menu"><div class="navbar_menu-left"><div data-delay="50" data-hover="true" data-w-id="66faa694-d73d-3197-2a2c-fc4418b885b8" class="navbar_menu-dropdown w-dropdown"><div class="navbar_dropdown-toggle w-dropdown-toggle"><div class="text-block-8">About</div><div class="dropdown-chevron w-embed">
742<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 743<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/> 744</svg></div></div><nav class="navbar_dropdown-list w-dropdown-list"><div class="navbar_container"><div class="navbar_dropdown-content"><div class="navbar_dropdown-content-left"><div class="navbar_dropdown-column"><div class="navbar_link-list-title">About AGS</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885c5-523d40ba" href="/company/about-ags" class="navbar_dropdown-link w-inline-block"><div>Mission & History</div></a><a id="w-node-_690212cc-7fd4-d928-c4f2-85cfe1a86d0a-523d40ba" href="/company/leadership" class="navbar_dropdown-link w-inline-block"><div>Leadership &Â Culture</div></a><a id="w-node-_3ff43c06-64d8-1264-f0ed-77aacfe19b50-523d40ba" href="https://newsroom.playags.com/" class="navbar_dropdown-link w-inline-block"><div>Newsroom</div></a></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Working at AGS</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885cf-523d40ba" href="/company/benefits-perks-offerings" class="navbar_dropdown-link w-inline-block"><div>Benefits, Perks & Offerings</div></a><a id="w-node-_19b4cd10-91c2-0353-021f-483d2c49b995-523d40ba" href="https://jobs.jobvite.com/agscareer" class="navbar_dropdown-link w-inline-block"><div>Open Positions</div></a></div></div></div></div></div></nav></div><div data-delay="50" data-hover="true" data-w-id="66faa694-d73d-3197-2a2c-fc4418b885d5" class="navbar_menu-dropdown w-dropdown"><div class="navbar_dropdown-toggle w-dropdown-toggle"><div class="text-block-11">Slots</div><div class="dropdown-chevron w-embed"><svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 745<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/> 746</svg></div></div><nav class="navbar_dropdown-list w-dropdown-list"><div class="navbar_container"><div class="navbar_dropdown-content"><div class="navbar_dropdown-content-left"><div class="navbar_dropdown-column"><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885e0-523d40ba" href="/slots" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">About Slots</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885e3-523d40ba" href="/slots/cabinets" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Slot Cabinets</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b885e6-523d40ba" href="/slots/rakin-bacon" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Rakin' Bacon!</div></a><a id="w-node-_4f550f74-3ac2-3537-3787-50176bdeedef-523d40ba" href="/directory" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink navbar_link-list-orangelink">All Games</div></a></div></div><div class="navbar_dropdown-line"></div><div class="navbar_dropdown-column-wrapper"><div id="new-games-nav-bar" class="navbar_dropdown-column"><div class="navbar_link-list-title">New Games</div><div class="w-dyn-list"><div role="list" class="navbar_dropdown-link-list w-dyn-items"><div role="listitem" class="w-dyn-item"><a href="/directory/games/captain-jackpots-voyage" class="navbar_dropdown-link w-inline-block"><div>Captain Jackpots Voyage</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/captain-riches-adventure" class="navbar_dropdown-link w-inline-block"><div>Captain Riches Adventure</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/gold-inferno-wild-stacks" class="navbar_dropdown-link w-inline-block"><div>Gold Inferno Wild Stacks</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/mega-diamond-wild-stacks" class="navbar_dropdown-link w-inline-block"><div>Mega Diamond Wild Stacks</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/imperial-dynasty" class="navbar_dropdown-link w-inline-block"><div>Imperial Dynasty</div></a></div><div role="listitem" class="w-dyn-item"><a href="/directory/games/chili-fiesta" class="navbar_dropdown-link w-inline-block"><div>Chili Fiesta</div></a></div></div></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Signature Collections</div><div class="navbar_dropdown-link-list"><a id="w-node-_0ed7b267-2ad6-e101-b129-0911e1dbc3c0-523d40ba" href="https://www.playags.com/directory/games/signature-collection/river-dragons" class="navbar_dropdown-link w-inline-block"><div>River Dragons Collection</div></a><a id="w-node-_0ed7b267-2ad6-e101-b129-0911e1dbc3c3-523d40ba" href="https://www.playags.com/directory/games/signature-collection/rakin-bacon" class="navbar_dropdown-link w-inline-block"><div>Rakin' Bacon Collection</div></a><a id="w-node-_0ed7b267-2ad6-e101-b129-0911e1dbc3c6-523d40ba" href="https://www.playags.com/directory/games/signature-collection/barnyard" class="navbar_dropdown-link w-inline-block"><div>Barnyard Collection</div></a><a id="w-node-_0ed7b267-2ad6-e101-b129-0911e1dbc3c9-523d40ba" href="https://www.playags.com/directory/games/signature-collection/fu-nan-fu-nu" class="navbar_dropdown-link w-inline-block"><div>Fu Nan Fu Nu Collection</div></a><a id="w-node-_34c848bc-2554-feac-b5ab-96c293f6da7e-523d40ba" href="https://www.playags.com/directory/games/signature-collection/triple-coin-treasures" class="navbar_dropdown-link w-inline-block"><div>Triple Coin Treasures Collection</div></a></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Cabinets</div><div class="navbar_dropdown-link-list"><a id="w-node-_147200e8-f609-1a79-4cb3-a0cf5661eeaf-523d40ba" href="/slots/cabinets/glo" class="navbar_dropdown-link w-inline-block"><div>GlÅ</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88623-523d40ba" href="/slots/cabinets/spectra" class="navbar_dropdown-link w-inline-block"><div>Spectra</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8861d-523d40ba" href="/slots/cabinets/revel" class="navbar_dropdown-link w-inline-block"><div>Revel</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8861a-523d40ba" href="/slots/cabinets/orion" class="navbar_dropdown-link w-inline-block"><div>Orion</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88620-523d40ba" href="/slots/cabinets/big-red" class="navbar_dropdown-link w-inline-block"><div>Big Red</div></a></div></div></div></div></div></div></nav></div><div data-delay="50" data-hover="true" data-w-id="66faa694-d73d-3197-2a2c-fc4418b88626" class="navbar_menu-dropdown w-dropdown"><div class="navbar_dropdown-toggle w-dropdown-toggle"><div class="text-block-12">Table Products</div><div class="dropdown-chevron w-embed">
746<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 747<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/> 748</svg></div></div><nav class="navbar_dropdown-list w-dropdown-list"><div class="navbar_container"><div class="navbar_dropdown-content"><div class="navbar_dropdown-content-left"><div id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8862f-523d40ba" class="navbar_dropdown-column"><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88631-523d40ba" href="/tables" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">About Tables</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88634-523d40ba" href="/tables/shufflers" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Shufflers</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88637-523d40ba" href="/directory/tables/felt-content/side-bets" target="_blank" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Felt Content</div></a><a id="w-node-_38ff28f8-7794-d959-fe0e-df5e89eaa865-523d40ba" href="/directory/tables/" target="_blank" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink navbar_link-list-orangelink">All Table Products</div></a></div></div><div id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8863a-523d40ba" class="navbar_dropdown-line"></div><div class="navbar_dropdown-column-wrapper"><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Progressives</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8863f-523d40ba" href="/tables/progressives/stax" class="navbar_dropdown-link w-inline-block"><div>Stax</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88642-523d40ba" href="/tables/progressives/bonus-spin-xtreme" class="navbar_dropdown-link w-inline-block"><div>Bonus Spin Xtreme</div></a></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Shufflers</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88649-523d40ba" href="/directory/tables/table-equipment/pax-s-specialty-game-shuffler" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Pax S</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8864c-523d40ba" href="/directory/tables/table-equipment/dex-s-poker-room-shuffler" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Dex S</div></a></div></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Popular Games</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88653-523d40ba" href="/directory/tables/progressive-platforms/stax-progressive/royal-9-baccarat" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Royal 9</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88656-523d40ba" href="/directory/tables/progressive-platforms/stax-progressive/jackpot-holdem" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Jackpot Holdâem</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88659-523d40ba" href="/directory/tables/progressive-platforms/stax-progressive/blackjack-match" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Blackjack Match</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8865c-523d40ba" href="/directory/tables/progressive-platforms/stax-progressive/super-4-blackjack" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Super 4 Blackjack</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8865f-523d40ba" href="/directory/tables/felt-content/premium-game/criss-cross-poker" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Criss Cross Poker</div></a></div></div></div></div></div></div></nav></div><div data-delay="300" data-hover="true" data-w-id="66faa694-d73d-3197-2a2c-fc4418b88662" class="navbar_menu-dropdown w-dropdown"><div class="navbar_dropdown-toggle w-dropdown-toggle"><div class="text-block-9">Online Gaming</div><div class="dropdown-chevron w-embed">
748<svg width=" 100%" height=" 100%" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 749<path fill-rule="evenodd" clip-rule="evenodd" d="M2.55806 6.29544C2.46043 6.19781 2.46043 6.03952 2.55806 5.94189L3.44195 5.058C3.53958 4.96037 3.69787 4.96037 3.7955 5.058L8.00001 9.26251L12.2045 5.058C12.3021 4.96037 12.4604 4.96037 12.5581 5.058L13.4419 5.94189C13.5396 6.03952 13.5396 6.19781 13.4419 6.29544L8.17678 11.5606C8.07915 11.6582 7.92086 11.6582 7.82323 11.5606L2.55806 6.29544Z" fill="currentColor"/> 750</svg></div></div><nav class="navbar_dropdown-list w-dropdown-list"><div class="navbar_container"><div class="navbar_dropdown-content"><div class="navbar_dropdown-content-left"><div id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8866b-523d40ba" class="navbar_dropdown-column"><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8866d-523d40ba" href="/online-gaming" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">About AGSi</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88670-523d40ba" href="/online-gaming/omnichannel" class="navbar_dropdown-link w-inline-block"><div class="navbar_link-list-title navbar_link-list-largelink">Omnichannel</div></a></div></div><div id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88673-523d40ba" class="navbar_dropdown-line"></div><div class="navbar_dropdown-column"><div class="navbar_link-list-title">Real-Money Online Games</div><div class="navbar_dropdown-link-list"><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88678-523d40ba" href="https://interactive.playags.com/game-types/video-slots/" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Video Slots</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8867b-523d40ba" href="https://interactive.playags.com/game-types/steppers/" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Steppers</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b8867e-523d40ba" href="https://interactive.playags.com/game-types/ultratap/" target="_blank" class="navbar_dropdown-link w-inline-block"><div>UltraTap</div></a><a id="w-node-_66faa694-d73d-3197-2a2c-fc4418b88681-523d40ba" href="https://interactive.playags.com/game-types/table-games/" target="_blank" class="navbar_dropdown-link w-inline-block"><div>Table Games</div></a></div></div></div></div></div></nav></div></div><div class="navbar_menu-right"><a href="https://jobs.jobvite.com/agscareer" class="navbar_dropdown-toggle open-positions">Open Positions</a><div class="navbar_form-wrapper w-form"><form id="email-form-2" name="email-form-2" data-name="Email Form 2" method="get" data-search-canvas="form" class="navbar_form" data-wf-page-id="68a742cc2e51325fb51b1f37" data-wf-element-id="41ecb425-273b-a98a-38ec-2170064dbf0c"><div class="navbar_input-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 28 28" fill="none" vector-effect="non-scaling-stroke" preserveAspectRatio="none" class="navbar_search"><circle cx="13.5108" cy="12.8925" r="6.68211" transform="rotate(-45 13.5108 12.8925)" stroke="currentColor" stroke-width="1.5"></circle><line x1="18.3694" y1="17.3083" x2="23.9339" y2="22.8728" stroke="currentColor" stroke-width="1.5"></line></svg><input class="navbar_input-v2 w-input" maxlength="256" name="name" data-name="Name" placeholder="Search" data-search-canvas="input" type="text" id="header-search"/></div><input type="submit" data-wait="Please wait..." aria-label="Search button" data-search-canvas="button" class="navbar_form_button w-button" value=""/></form><div class="w-form-done"><div>Thank you! Your submission has been received!</div></div><div class="w-form-fail"><div>Oops! Something went wrong while submitting the form.</div></div></div><a aria-label="Contact us" href="https://portal.playags.com/login" class="navbar_contact-button w-inline-block"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 24 24" fill="none" vector-effect="non-scaling-stroke" preserveAspectRatio="none" class="navbar_contact-icon"><g opacity="0.5"><path d="M5.12104 17.8037C7.15267 16.6554 9.4998 16 12 16C14.5002 16 16.8473 16.6554 18.879 17.8037M15 10C15 11.6569 13.6569 13 12 13C10.3431 13 9 11.6569 9 10C9 8.34315 10.3431 7 12 7C13.6569 7 15 8.34315 15 10ZM21 12C2
7501 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3C16.9706 3 21 7.02944 21 12Z" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path></g></svg></a></div></nav><div class="navbar_menu-button w-nav-button"><div class="menu-icon3"><div class="menu-icon3_line-top"></div><div class="menu-icon3_line-middle"></div><div class="menu-icon3_line-bottom"></div></div></div></div></div><main class="main-wrapper"><header class="section_slots-header"><div class="padding-global"><div class="container-large"><div class="slots-header_component"><div class="w-layout-grid slots-header_content"><div class="slots-header_content-left"><div class="text-style-tagline">Slots. TABLES. ONLINE.</div><div class="spacer-xsmall"></div><h1 class="slots-header_heading"><div class="slots-header_rotate_wrapper"><span data-text-rotate="track" class="slots-header_rotate_track"><span class="slots-header_text">Slot</span><span class="slots-header_text">Table</span><span class="slots-header_text">Online</span><span class="slots-header_text">Slot</span></span></div><span class="slots-header_text">GAMES</span><span class="slots-header_text">THAT HIT</span></h1></div><div id="w-node-d670abfb-9bce-3ef0-de44-b6e89b9ce4a4-b51b1f37" class="slots-header_image-wrapper"><div class="slots-header_image-int"><img class="slots-header_element is-1" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68f010f7791169b79d98cbd0_7aad2b883833609de9747594e0c71917_fk4uap3qcytds7jsja9y.avif" width="405" height="405" alt="Shiny golden piggy bank with a large dollar sign on its side." sizes="(max-width: 479px) 105px, (max-width: 991px) 49vw, 405px" data-w-id="80f3d70d-33c3-923f-4444-37eac15e154f" loading="eager" fetchpriority="high" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68f010f7791169b79d98cbd0_7aad2b883833609de9747594e0c71917_fk4uap3qcytds7jsja9y-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68f010f7791169b79d98cbd0_7aad2b883833609de9747594e0c71917_fk4uap3qcytds7jsja9y.avif 810w"/><img class="slots-header_element is-2" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed245b42befd11abac0f_0c86bb1474e56316cf7ac961a37c78d3_Dragon%20Green%201.avif" width="623" height="621" alt="Green AGS dragon with blue eyes, yellow spikes, and fiery tail" sizes="(max-width: 479px) 105px, 49vw" data-w-id="2fa6f405-3672-ac43-6ea5-4f7b0ac75f85" loading="eager" fetchpriority="high" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed245b42befd11abac0f_0c86bb1474e56316cf7ac961a37c78d3_Dragon%20Green%201-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed245b42befd11abac0f_0c86bb1474e56316cf7ac961a37c78d3_Dragon%20Green%201-p-800.avif 800w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed245b42befd11abac0f_0c86bb1474e56316cf7ac961a37c78d3_Dragon%20Green%201.avif 1246w"/><img class="slots-header_element is-3" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed24638caa9b7c341696_2be750d9c118a4926eeb534c94f2cd0b_DonkeyStage3%201.avif" width="551" height="551" alt="Colorful AGS cartoon pinata with cute horse-like character in red and yellow" sizes="(max-width: 479px) 105px, 49vw" data-w-id="54fa2044-e33e-aea0-3216-49b681c686d3" loading="eager" fetchpriority="high" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed24638caa9b7c341696_2be750d9c118a4926eeb534c94f2cd0b_DonkeyStage3%201-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e2ed24638caa9b7c341696_2be750d9c118a4926eeb534c94f2cd0b_DonkeyStage3%201.avif 1101w"/></div></div></div></div></div></div><div class="slots-header_shape-wrapper"><svg xmlns="http://www.w3.org/2000/svg" width="100%" viewBox="0 0 953 911" fill="none" vector-effect="non-scaling-stroke" preserveAspectRatio="none" class="slots-header_shape hide"><g clip-path="url(#clip0_5001_1235)"><g clip-path="url(#clip1_5001_1235)"><path d="M127.535 911L378.019 419H220.258C218.696 419 217.684 417.347 218.389 415.951L467.528 -73H1075.54V911
750H127.535Z" fill="white"></path></g></g></svg><div data-is-ix2-target="1" class="lottie-animation" data-w-id="4edc1686-c6e6-8099-d52b-28229dae52c8" data-animation-type="lottie" data-src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68cb1536aace7f380514f29b_Stackit-Lightening.json" data-loop="0" data-direction="1" data-autoplay="0" data-renderer="svg" data-default-duration="0" data-duration="3" data-loading="eager" data-ix2-initial-state="0"></div></div></header><section class="section_content-style-1"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div data-text-parallax="" class="content-style-1_component"><div class="max-width-xlarge align-center"><div class="text-style-tagline">FORTUNE FAVORS THE BOLT</div><div class="spacer-xsmall"></div><h2 class="heading-style-h4 is-small-mobile text-style-body">Meet the highest performing team and products in modern gaming. Since 2005 weâve worked closely with operators to deliver the most electrifying gaming experiences in the world. <br/><span class="text-weight-semibold">At AGS, we win together.</span></h2><div class="spacer-medium"></div><div class="max-width-large is-wider align-center"><a data-opacity-element="card" data-wf--button--variant="base" href="/company/about-ags" class="button w-inline-block"><div class="button-text">Go bolt</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div></div></div></div></div></div></section><section class="section_games"><div class="padding-global"><div class="container-large"><div class="padding-section-medium"><div class="games_component"><div class="w-layout-grid games_item"><div class="games_image-wrapper is-6"><div class="games_image is-slots-1-absolute"><canvas data-src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68e3db43e4e4ec745c6f62a5_ags_slot_machine.riv" data-type="scroll" data-state-machine="State Machine 1" data-artboard="Artboard" data-autoplay="true" data-scroll-threshold="0.4" class="rive-animation is-slots-1-absolute-rive"></canvas></div><img width="420" height="148" alt="Three cartoon piggy banks on a large pile of gold coins, each with distinct accessories and expressions." src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68ff9f691428cd8958637dc4_ThreePigs_Performant.avif" loading="eager" class="games_image is-slots-1"/></div><div class="games_content-left"><div class="text-style-tagline">POWER UP YOUR SLOTS</div><div class="spacer-xsmall"></div><h2 class="heading-style-h1">Striking slots</h2><div class="spacer-small"></div><p class="text-size-medium">Every spin loaded. Every jackpot explosive. Our slot games leverage razor-sharp intuition to give you that raw, untamed thrill.</p><div class="spacer-medium"></div><div class="button-group"><a data-opacity-element="card" data-wf--button--variant="base" href="/slots" class="button w-inline-block"><div class="button-text">SPIN THAT THING</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div></div><div class="games_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="games_background-flash"/></div></div><div class="w-layout-grid games_item is-alternate"><div class="games_image-wrapper is-slots-2"><img width="562" height="1051" alt="Red Dragon gambling wheel with progressive jackpot and betting options" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a757459ab3bb2de217e203_red%20dragon.avif" loading="eager" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a757459ab3bb2de217e203_red%20dragon-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a757459ab3bb2de217e203_red%20dragon.avif 1124w" sizes="(max-width: 479px) 48vw, 49vw" class="games_image is-slots-2"/></div><div class="games_content-left is-alternate"><div class="text-style-tagline">FEEL THE BOLT</div><div class="spacer-xsmall"></div><h2 class="heading-style-h1">Electrifying<br/>Tables</h2><div class="spacer-small"></div><p class="text-size-medium">Where calculated risks meet pure chance, our table games deliver that real deal experience that keeps your heart racing. </p><div class="spacer-medium"></div><div class="button-group"><a data-opacity-element="card" data-wf--button--variant="base" href="/tables" class="button w-inline-block"><div class="button-text">Light Up</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div></div><div class="games_background-wrapper is-alternate"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="games_background-flash is-alternate"/></div></div><div class="w-layout-grid games_item"><div class="games_image-wrapper is-slots-3"><img width="167" height="209" alt="Smartphone screen displaying the Diamond Rush game with prize amounts $3,000, $500, and $100 in the Diamond District section." src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68ffa7296a32ded55c2be815_DiamondRush_Performant.avif" loading="eager" class="games_image is-slots-3-absolute"/><img width="420" height="305" alt="Smartphone screen displaying a Money Charge Bonus Capital Gains game with prize tiers: $10,000 grand, $500 major, $50 minor, $10 mini, and option to select a vault." src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68ffa729c788ad02a2176e42_MoneyCharge_Performant.avif" loading="eager" class="games_image is-slots-3"/><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68ffa729bd7668f47b76be15_Sparkle_Performant.avif" loading="lazy" width="112" height="109" alt="Three golden sparkling stars with a glowing effect on a transparent background." class="games_image is-slot-3-glow"/></div><div class="games_content-left is-wider"><div class="text-style-tagline">Playing it Forward</div><div class="spacer-xsmall"></div><h2 class="heading-style-h1">CHARGE UP YOUR INTERACTIVE</h2><div class="spacer-small"></div><p class="text-size-medium">We don't just push boundaries, we obliterate them. Our interactive solutions merge digital with wild innovation that keeps you absolutely locked in.</p><div class="spacer-medium"></div><div class="button-group"><a data-opacity-element="card" data-wf--button--variant="base" href="/online-gaming" class="button w-inline-block"><div class="button-text">INTO THE FUTURE</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div></div><div class="games_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="games_background-flash"/></div></div></div></div></div></div><div class="css-animations w-embed"><style> 751 @media only screen and (min-width: 992px){ 752 /*Game Section Interactions*/ 753 754 .games_item:hover .games_image.is-slots-1-absolute { 755 transform: scale(1) translateY(-5%); 756 opacity: 1; 757 } 758 759 .games_item:hover .games_image.is-slots-2-absolute{ 760 opacity: 1; 761 } 762 763 .games_item:hover .games_image.is-slot-3-glow{ 764 opacity: 1; 765 } 766 767 .games_item:hover .games_image.is-slots-3-absolute{ 768 transform: translateX(13%); 769 } 770 771 772 .games_item:hover .games_image.is-3 , .games_item:hover .games_image.is-4 { 773 transform: scale(1.03) translateY(-5%); 774 } 775 776 .games_item:hover .games_image.is-5 { 777 transform: scale(1.03) translateY(-5%); 778 } 779 780 .games_item:hover .games_image.is-5-1 { 781 transform: translateX(32%) rotate(12deg) scale(0.85); 782 } 783 784 .games_item:hover .games_image.is-5-2 { 785 transform: translateX(-32%) rotate(-12deg) scale(0.85); 786 } 787 788 } 789</style></div></section><section class="section_stats"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="stats_component"><div class="max-width-large"><div class="text-style-tagline">Striking performance</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">IT JUST HITS</h2></div><div class="spacer-large"></div><div class="stats_grid"><div id="w-node-_4a3ea43f-71f7-0a3a-ad91-4517c00f7f91-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">40K+</h3><p class="text-size-xlarge is-small-tablet">Active AGS slot games deployed worldwide</p></div><div class="stats_card-overlay"></div></div><div id="w-node-c31d3cf0-eb30-b846-006f-c08cae2d6c8d-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">800+</h3><p class="text-size-xlarge is-small-tablet">Total AGS products developed â slots, cabinets, tables, and online content</p></div><div class="stats_card-overlay"></div></div><div id="w-node-b46a60fc-f5a4-bc71-8753-c71b76954750-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">600+</h3><p class="text-size-xlarge is-small-tablet">Casino and operator partners around the globe</p></div><div class="stats_card-overlay"></div></div><div id="w-node-_24a30f64-5b86-d00f-d385-d35650f07801-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">25</h3><p class="text-size-xlarge is-small-tablet">Countries with AGS products live across slots, tables, interactive, and lottery</p></div><div class="stats_card-overlay"></div></div><div id="w-node-_2ff2a86a-caaf-92c0-ebf6-a6b959e004e4-b51b1f37" class="stats_card"><div class="stats_card-content"><h3 class="heading-style-h1 is-big-tablet">10</h3><p class="text-size-xlarge is-small-tablet">In-house game studios fueling slot & online innovation</p></div><div class="stats_card-overlay"></div></div></div></div></div></div></div></section><section class="section_feature-style-1 text-style-wrap-balance"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="feature-style-1_component"><div><div class="text-style-tagline">Pure entertainment. <span class="text-style-block-mobile">At your service.</span></div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">OPTIONS FOR EVERY <span class="text-style-block-mobile">INCH OF YOUR FLOOR</span></h2></div><div class="spacer-large"></div><div class="feature-style-1_grid"><div class="feature-style-1_card"><div class="feature-style-1_card-in"><h3 class="heading-style-h2">SLOT <br/>CABINETS</h3><p class="text-size-medium">Signature lighting that strikes across the floor.</p><a data-opacity-element="card" data-wf--button--variant="base" href="/slots/cabinets" class="button w-inline-block"><div class="button-text">LIGHT UP</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77cb49445fabe8c9889b0_2436ee4c0e29bf5f638caa83ebd33409_Slot%20Cabinets.avif" loading="lazy" width="356" height="550" alt="Bacon Link slot machine with golden pig and $10,000 jackpot display" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77cb49445fabe8c9889b0_2436ee4c0e29bf5f638caa83ebd33409_Slot%20Cabinets-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77cb49445fabe8c9889b0_2436ee4c0e29bf5f638caa83ebd33409_Slot%20Cabinets.avif 712w" sizes="(max-width: 479px) 100vw, 356px" class="feature-style-1_image"/><div class="feature-style-1_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="feature-style-1_background-flash"/></div></div><div class="feature-style-1_card"><div class="feature-style-1_card-in"><h3 class="heading-style-h2">CARD <br/>SHUFFLERS</h3><p class="text-size-medium">Precision-engineered for reliable performance.</p><a data-opacity-element="card" data-wf--button--variant="base" href="/tables/shufflers" class="button w-inline-block"><div class="button-text">DEAL ME IN</div><div data-opacity-element="overlay" class="button-overlay"></div></a></div><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77d2
789c2465ea0b93f7d75f_card%20shufflers.avif" loading="lazy" width="464" height="550" alt="Black electronic device with open lid and complex internal components" class="feature-style-1_image is-2"/><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a79cc8d1f6748c13193491_stars.avif" loading="lazy" width="473" height="574" alt="Sparkling yellow star-like light bursts scattered on white background" class="feature-style-1_image is-absolute"/><div class="feature-style-1_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894cd7aabe0668757fa97de_flash.svg" loading="lazy" width="553" height="603" alt="" class="feature-style-1_background-flash"/></div></div></div></div></div></div></div></section><section class="section_feature-style-2"><div class="w-layout-grid feature-style-2_component"><div id="w-node-ce298aac-2d73-bfd3-6568-f2649a97ef3b-b51b1f37" class="feature-style-2_content"><div class="feature-style-2_content-in"><div class="text-style-tagline">Game Here Now</div><div class="spacer-small"></div><h2 class="heading-style-h2"><span class="text-style-block-desktop">Wherever </span>Players Game</h2><div class="spacer-small"></div><p class="text-size-large">Online or on-site, we deliver exceptional real-money gaming experiences across every environment to keep the electricity alive.</p><div class="spacer-small"></div><a data-opacity-element="card" data-wf--button--variant="is-light" href="/online-gaming/omnichannel" class="button w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489 w-inline-block"><div class="button-text">See Omnichannel</div><div data-opacity-element="overlay" class="button-overlay w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489"></div></a></div></div><div class="feature-style-2_image-wrapper"><img width="762" height="691" alt="Triple Treasure slot machine with progressive jackpot and mobile app display" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77f5b7804d628a4414938_onmi%20image.avif" loading="eager" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77f5b7804d628a4414938_onmi%20image-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a77f5b7804d628a4414938_onmi%20image.avif 1524w" sizes="(max-width: 479px) 48vw, 49vw" class="feature-style-2_image"/></div></div></section><section class="section_locations"><div class="padding-global"><div class="container-large"><div class="padding-section-medium"><div class="locations_component"><div class="locations_top-content"><div class="text-style-tagline">bolt around the world</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">found wherever thereâs high-voltage</h2></div><div data-current="all" data-easing="ease" data-duration-in="300" data-duration-out="100" class="locations_tabs w-tabs"><div class="locations_tab-menu w-tab-menu"><a data-w-tab="all" class="locations_tab-link w-inline-block w-tab-link w--current"><div>ALL</div></a><a data-w-tab="slots" class="locations_tab-link w-inline-block w-tab-link"><div>Slots</div></a><a data-w-tab="online gaming" class="locations_tab-link w-inline-block w-tab-link"><div>Online GAMING</div></a><a data-w-tab="tables" class="locations_tab-link w-inline-block w-tab-link"><div>Tables</div></a><a data-w-tab="lottery" class="locations_tab-link w-inline-block w-tab-link"><div>Lottery</div></a></div><div class="locations_tab-content w-tab-content"><div data-w-tab="all" class="locations_tab-pane w-tab-pane w--tab-active"><div class="locations_map-block"><div data-country-value="" id="w-node-_62e32a6b-1b9d-6bf5-9e49-673acd39714d-b51b1f37" class="locations_text">Global gaming supplier of high-performing slots, tables, online games, and lottery.</div><div id="w-node-_62e32a6b-1b9d-6bf5-9e49-673acd39719e-b51b1f37" class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div class="locations_table-wrapper"><div class="text-style-tagline text-color-white">AGS LOCATIONS</div><div data-map-country-wrapper="" class="locations_table"><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="USA" class="locations_table-item"><span>USA</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ARG" class="locations_table-item"><span>Argentina</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="CAN" class="locations_table-item"><span>Canada</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ABW" class="locations_table-item"><span>Aruba</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="MEX" class="locations_table-item"><span>Mexico</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="BES" class="locations_table-item"><span>Bonaire</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="AUS" class="locations_table-item"><span>Australia</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="CHL" class="locations_table-item"><span>Chile</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="GBR" class="locations_table-item"><span>England</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="CUR" class="locations_table-item"><span>Curacao</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="CYP" class="locations_table-item"><span>Cyprus</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="MYS" class="locations_table-item"><span>Malaysia</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PRI" class="locations_table-item"><span>Puerto Rico</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PAN" class="locations_table-item"><span>Panama</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="BRA" class="locations_table-item"><span>Brazil</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PRY" class="locations_table-item"><span>Paraguay</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="COL" class="locations_table-item"><span>Colombia</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PER" class="locations_table-item"><span>Peru</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ITA" class="locations_table-item"><span>Italy</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="PHL" class="locations_table-item"><span>Philippines</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ROU" class="locations_table-item"><span>Romania</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="ZAF" class="locations_table-item"><span>South Africa</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="MLT" class="locations_table-item"><span>Malta</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="SMA" class="locations_table-item"><span>St Martin</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="FIN" class="locations_table-item"><span>Finland</span></div><div data-value="Global gaming supplier of high-performing slots, tables, online games, and lottery." data-map-country-selector=" " data-code="URY" class="locations_table-item"><span>Uruguay</span></div></div></div></div></div><div data-w-tab="slots" class="locations_tab-pane w-tab-pane"><div data-wf--slots-map--variant="base" class="locations_map-block"><div data-country-value="" id="w-node-_055d88b1-abfa-cb11-1983-22f72f94631d-2f94631c" class="locations_text">Class II, Class III, and historical horse racing games for markets worldwide.</div><div id="w-node-_055d88b1-abfa-cb11-1983-22f72f946353-2f94631c" class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div data-map-country-wrapper="" id="w-node-_055d88b1-abfa-cb11-1983-22f72f94631f-2f94631c" class="locations_table is-slots"><div data-value="Offering Class II, Class III, and HHR games nationwide, delivering high-performing slots to diverse casino markets." data-map-country-selector=" " data-code="USA" class="locations_table-item"><span>USA</span></div><div data-value="Supplying Class II and Class III slot experiences built for Canadian players and operator needs." data-map-country-selector=" " data-code="CAN" class="locations_table-item"><span>Canada</span></div><div data-value="Bringing Class II and Class III games to Mexican casinos, blending local appeal with global performance." data-map-country-selector=" " data-code="MEX" class="locations_table-item"><span>Mexico</span></div><div data-value="Delivering Class III slots to Puerto Rican casinos, combining engaging play with reliable results." data-map-country-selector=" " data-code="PRI" class="locations_table-item"><span>Puerto Rico</span></div><div data-value="Bringing Class III slots to Argentinaâs gaming floors, tuned for local player preferences." data-map-country-selector=" " data-code="ARG" class="locations_table-item"><span>Argentina</span></div><div data-value="Delivering Class III slot entertainment to Arubaâs vibrant resort and casino market." data-map-country-selector=" " data-code="ABW" class="locations_table-item"><span>Aruba</span></div><div data-value="Offering Class III slot games to Bonaireâs casino players and visitors." data-map-country-selector=" " data-code="BES" class="locations_table-item"><span>Bonaire</span></div><div data-value="Supplying top-performing Class III slot content to Chileâs land-based casino market." data-map-country-selector=" " data-code="CHL" class="locations_table-item"><span>Chile</span></div><div data-value="Providing Class III slot entertainment for Curacaoâs bustling casino industry." data-map-country-selector=" " data-code="CUR" class="locations_table-item"><span>Curacao</span></div><div data-value="Delivering Class III slot games designed for Malaysiaâs dynamic casino environment." data-map-country-selector=" " data-code="MYS" class="locations_table-item"><span>Malaysia</span></div><div data-value="Bringing Class III slot innovation to Panamaâs casino operators and players." data-map-country-selector=" " data-code="PAN" class="locations_table-item"><span>Panama</span></div><div data-value="Supplying Class III slots to Paraguayâs growing land-based gaming market." data-map-country-selector=" " data-code="PRY" class="locations_table-item"><span>Paraguay</span></div><div data-value="Delivering engaging Class III slot experiences to casinos across Peru." data-map-country-selector=" " data-code="PER" class="locations_table-item"><span>Peru</span></div><div data-value="Offering Class III slot content tailored for the Philippinesâ diverse gaming venues." data-map-country-selector=" " data-code="PHL" class="locations_table-item"><span>Philippines</span></div><div data-value="Supplying historical horse racing games to South Africaâs gaming market with strong player appeal." data-map-country-selector=" " data-code="ZAF" class="locations_table-item"><span>South Africa</span></div><div data-value="Bringing Class III slot entertainment to St Martinâs casino scene." data-map-country-selector=" " data-code="SMA" class="locations_table-item"><span>St Martin</span></div><div data-value="Class II, Class III, and historical horse racing games for markets worldwide." data-map-country-selector=" " data-code="URY" class="locations_table-item"><span>Uruguay</span></div></div></div></div><div data-w-tab="online gaming" class="locations_tab-pane w-tab-pane"><div class="locations_map-block"><div data-country-value="" id="w-node-ec297568-53e0-1fdd-08fa-33d0c50a1400-c50a13ff" class="locations_text">Real-money online slots, table games, and instant win titles for global markets.</div><div class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div data-map-country-wrapper="" class="locations_table is-og"><div data-value="Offering Class III slots, table games, and instant win titles to real-money online casino operators across the country." data-map-country-selector=" " data-code="USA" class="locations_table-item"><span>USA</span></div><div data-value="Providing real-money online games to licensed operators serving Canadian players." data-map-country-selector=" " data-code="CAN" class="locations_table-item"><span>Canada</span></div><div data-value="Delivering real-money online games to operators in Mexicoâs growing market." data-map-country-selector=" " data-code="MEX" class="locations_table-item"><span>Mexico</span></div><div data-value="Supplying real-money online games to licensed gaming operators in England." data-map-country-selector=" " data-code="GBR" class="locations_table-item"><span>England</span></div><div data-value="Offering real-money online games in Portuguese for Brazilâs regulated gam
789ing market." data-map-country-selector=" " data-code="BRA" class="locations_table-item"><span>Brazil</span></div><div data-value="Delivering real-money online games to licensed operators across Colombia." data-map-country-selector=" " data-code="COL" class="locations_table-item"><span>Colombia</span></div><div data-value="Providing real-money online games to regulated gaming operators in Italy." data-map-country-selector=" " data-code="ITA" class="locations_table-item"><span>Italy</span></div><div data-value="Supplying real-money online games to licensed casino operators in Romania." data-map-country-selector=" " data-code="ROU" class="locations_table-item"><span>Romania</span></div><div data-value="Offering real-money online games to operators based in Maltaâs gaming hub." data-map-country-selector=" " data-code="MLT" class="locations_table-item"><span>Malta</span></div><div data-value="Delivering real-money online games to licensed operators serving Finland." data-map-country-selector=" " data-code="FIN" class="locations_table-item"><span>Finland</span></div></div></div></div><div data-w-tab="tables" class="locations_tab-pane w-tab-pane"><div data-wf--tables-map--variant="base" class="locations_map-block"><div data-country-value="" id="w-node-_5cef56c3-2d20-e63a-9bd8-0d4463ef26ef-63ef26ee" class="locations_text">Progressives, shufflers, side bets, and table equipment for casino floors.</div><div class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div data-map-country-wrapper="" class="locations_table is-tables"><div data-value="Offering award-winning progressive systems, card shufflers, side bets, premium felts, and table game equipment nationwide." data-map-country-selector=" " data-code="USA" class="locations_table-item"><span>USA</span></div><div data-value="Providing progressive systems, card shufflers, side bets, premium felts, and table equipment to casinos across Canada." data-map-country-selector=" " data-code="CAN" class="locations_table-item"><span>Canada</span></div><div data-value="Delivering card shufflers and progressive systems to casinos in Mexico." data-map-country-selector=" " data-code="MEX" class="locations_table-item"><span>Mexico</span></div><div data-value="Offering premium table games, shufflers, progressive systems, and side bets to casinos in Australia." data-map-country-selector=" " data-code="AUS" class="locations_table-item"><span>Australia</span></div><div data-value="Bringing engaging side bet options to casino tables in Puerto Rico." data-map-country-selector=" " data-code="PRI" class="locations_table-item"><span>Puerto Rico</span></div></div></div></div><div data-w-tab="lottery" class="locations_tab-pane w-tab-pane"><div class="locations_map-block"><div data-country-value="" id="w-node-_63ebd47e-1977-f74f-2289-a3b46cbde9de-6cbde9dd" class="locations_text">Game content designed for state and municipal lottery programs.</div><div class="locations_map-wrapper"><div data-map-container="" class="locations_map-image"></div></div><div data-map-country-wrapper="" class="locations_table"><div data-value="Game content designed for state and municipal lottery programs." data-map-country-selector=" " data-code="BRA" class="locations_table-item"><span>Brazil</span></div></div></div></div></div></div></div></div></div></div></section><section class="section_newsroom-render"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="newsroom-render_component"><div class="max-width-large"><div class="text-style-tagline">The Latest on AGS</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">Real experience. Wild innovation.</h2><div class="spacer-xsmall"></div><p class="text-size-large">News on the gaming industryâs wild card.</p></div><div class="spacer-large"></div><div class="newsroom-render_list-wrapper"><div class="newsroom-render_list"></div></div><div><div class="spacer-xlarge"></div><div class="button-group"><a data-opacity-element="card" data-wf--button--variant="is-light" href="https://newsroom.playags.com/" target="_blank" class="button w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489 w-inline-block"><div class="button-text">SEE THE LATEST</div><div data-opacity-element="overlay" class="button-overlay w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489"></div></a></div></div></div></div></div></div></section><section data-swiper-slider-wf="media" class="section_media"><div class="padding-global"><div class="container-large"><div class="padding-section-large"><div class="media_component"><div><div class="text-style-tagline">CHANGING THE GAME</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">Always in it for THE Pure Entertainment</h2></div><div class="spacer-large"></div><div><div class="w-embed w-script"><!-- Elfsight Social Feed | AGS Social Feed (main) - LAZY LOADED FOR PERFORMANCE --> 790<div class="elfsight-app-e193ac26-5cf6-4172-8f79-0f7db8b2aef3" data-elfsight-app-lazy> 791 <div style="padding: 60px 20px; text-align: center; color: #999; font-size: 14px;"> 792 Loading social feed... 793 </div> 794</div> 795
796<script> 797// Lazy load Elfsight on user interaction 798(function() { 799 let elfsightLoaded = false; 800 801 function loadElfsightNow() { 802 if (elfsightLoaded) return; 803 elfsightLoaded = true; 804 805 const script = document.createElement('script'); 806 script.src = 'https://elfsightcdn.com/platform.js'; 807 script.defer = true; 808 document.body.appendChild(script); 809 } 810 811 // Expose function globally so main performance script can call it 812 window.loadElfsight = loadElfsightNow; 813 814 // Fallback: if main script doesn't exist, load on scroll 815 window.addEventListener('scroll', function() { 816 if (window.scrollY > 300) { 817 loadElfsightNow(); 818 } 819 }, { once: true, passive: true }); 820})(); 821</script>
821</div></div><div class="spacer-small"></div><div class="social-icons_component"><div class="w-layout-grid social-icons_list"><a aria-label="Social Handle" href="https://www.linkedin.com/company/american-gaming-systems" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 822<path fill-rule="evenodd" clip-rule="evenodd" d="M4.5 3C3.67157 3 3 3.67157 3 4.5V19.5C3 20.3284 3.67157 21 4.5 21H19.5C20.3284 21 21 20.3284 21 19.5V4.5C21 3.67157 20.3284 3 19.5 3H4.5ZM8.52076 7.00272C8.52639 7.95897 7.81061 8.54819 6.96123 8.54397C6.16107 8.53975 5.46357 7.90272 5.46779 7.00413C5.47201 6.15897 6.13998 5.47975 7.00764 5.49944C7.88795 5.51913 8.52639 6.1646 8.52076 7.00272ZM12.2797 9.76176H9.75971H9.7583V18.3216H12.4217V18.1219C12.4217 17.742 12.4214 17.362 12.4211 16.9819V16.9818V16.9816V16.9815V16.9812C12.4203 15.9674 12.4194 14.9532 12.4246 13.9397C12.426 13.6936 12.4372 13.4377 12.5005 13.2028C12.7381 12.3253 13.5271 11.7586 14.4074 11.8979C14.9727 11.9864 15.3467 12.3141 15.5042 12.8471C15.6013 13.1803 15.6449 13.5389 15.6491 13.8863C15.6605 14.9339 15.6589 15.9815 15.6573 17.0292V17.0294C15.6567 17.3992 15.6561 17.769 15.6561 18.1388V18.3202H18.328V18.1149C18.328 17.6629 18.3278 17.211 18.3275 16.7591V16.759V16.7588C18.327 15.6293 18.3264 14.5001 18.3294 13.3702C18.3308 12.8597 18.276 12.3563 18.1508 11.8627C17.9638 11.1286 17.5771 10.5211 16.9485 10.0824C16.5027 9.77019 16.0133 9.5691 15.4663 9.5466C15.404 9.54401 15.3412 9.54062 15.2781 9.53721L15.2781 9.53721L15.2781 9.53721C14.9984 9.52209 14.7141 9.50673 14.4467 9.56066C13.6817 9.71394 13.0096 10.0641 12.5019 10.6814C12.4429 10.7522 12.3852 10.8241 12.2991 10.9314L12.2991 10.9315L12.2797 10.9557V9.76176ZM5.68164 18.3244H8.33242V9.76733H5.68164V18.3244Z" fill="CurrentColor"/> 823</svg></div></a><a aria-label="Social Handle" href="https://www.facebook.com/AmericanGamingSystems" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 824<path d="M22 12.0611C22 6.50451 17.5229 2 12 2C6.47715 2 2 6.50451 2 12.0611C2 17.0828 5.65684 21.2452 10.4375 22V14.9694H7.89844V12.0611H10.4375V9.84452C10.4375 7.32296 11.9305 5.93012 14.2146 5.93012C15.3088 5.93012 16.4531 6.12663 16.4531 6.12663V8.60261H15.1922C13.95 8.60261 13.5625 9.37822 13.5625 10.1739V12.0611H16.3359L15.8926 14.9694H13.5625V22C18.3432 21.2452 22 17.083 22 12.0611Z" fill="CurrentColor"/> 825</svg></div></a><a aria-label="Social Handle" href="https://www.youtube.com/user/AmericanGamingSys" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 826<path fill-rule="evenodd" clip-rule="evenodd" d="M20.5686 4.77345C21.5163 5.02692 22.2555 5.76903 22.5118 6.71673C23.1821 9.42042 23.1385 14.5321 22.5259 17.278C22.2724 18.2257 21.5303 18.965 20.5826 19.2213C17.9071 19.8831 5.92356 19.8015 3.40294 19.2213C2.45524 18.9678 1.71595 18.2257 1.45966 17.278C0.827391 14.7011 0.871044 9.25144 1.44558 6.73081C1.69905 5.78311 2.44116 5.04382 3.38886 4.78753C6.96561 4.0412 19.2956 4.282 20.5686 4.77345ZM9.86682 8.70227L15.6122 11.9974L9.86682 15.2925V8.70227Z" fill="CurrentColor"/> 827</svg></div></a><a aria-label="Social Handle" href="https://www.instagram.com/play_ags/" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed"><svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 828<path fill-rule="evenodd" clip-rule="evenodd" d="M16 3H8C5.23858 3 3 5.23858 3 8V16C3 18.7614 5.23858 21 8 21H16C18.7614 21 21 18.7614 21 16V8C21 5.23858 18.7614 3 16 3ZM19.25 16C19.2445 17.7926 17.7926 19.2445 16 19.25H8C6.20735 19.2445 4.75549 17.7926 4.75 16V8C4.75549 6.20735 6.20735 4.75549 8 4.75H16C17.7926 4.75549 19.2445 6.20735 19.25 8V16ZM16.75 8.25C17.3023 8.25 17.75 7.80228 17.75 7.25C17.75 6.69772 17.3023 6.25 16.75 6.25C16.1977 6.25 15.75 6.69772 15.75 7.25C15.75 7.80228 16.1977 8.25 16.75 8.25ZM12 7.5C9.51472 7.5 7.5 9.51472 7.5 12C7.5 14.4853 9.51472 16.5 12 16.5C14.4853 16.5 16.5 14.4853 16.5 12C16.5027 10.8057 16.0294 9.65957 15.1849 8.81508C14.3404 7.97059 13.1943 7.49734 12 7.5ZM9.25 12C9.25 13.5188 10.4812 14.75 12 14.75C13.5188 14.75 14.75 13.5188 14.75 12C14.75 10.4812 13.5188 9.25 12 9.25C10.4812 9.25 9.25 10.4812 9.25 12Z" fill="CurrentColor"/> 829</svg></div></a><a aria-label="Social Handle" href="https://x.com/PlayAGS" target="_blank" class="social-icons_link w-inline-block"><div class="social-icons_icon w-embed">
829<svg width="100%" height="100%" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> 830<path d="M17.1761 4H19.9362L13.9061 10.7774L21 20H15.4456L11.0951 14.4066L6.11723 20H3.35544L9.80517 12.7508L3 4H8.69545L12.6279 9.11262L17.1761 4ZM16.2073 18.3754H17.7368L7.86441 5.53928H6.2232L16.2073 18.3754Z" fill="CurrentColor"/> 831</svg></div></a></div></div></div></div></div></div><div class="ui-background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a789c09f11aedd8076f5f2_dark%20shape.avif" loading="lazy" width="1280" height="1363" alt="Black geometric shapes with sharp angular lines and high contrast" srcset="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a789c09f11aedd8076f5f2_dark%20shape-p-500.avif 500w, https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68a789c09f11aedd8076f5f2_dark%20shape.avif 2559w" sizes="100vw" class="ui-background-image"/></div><div class="js-code w-embed w-script">
831<script> 832 document.addEventListener("DOMContentLoaded", function () { 833 if (typeof Swiper === "undefined") { 834 console.warn("[Swiper] Not found. Load swiper-bundle.min.js before this script."); 835 return; 836 } 837 838 document 839 .querySelectorAll("[data-swiper-slider-wf='media']") 840 .forEach(function (slider) { 841 var swiperElement = slider.querySelector(".swiper"); 842 var nextElement = slider.querySelector(".swiper-next"); 843 var prevElement = slider.querySelector(".swiper-prev"); 844 if (!swiperElement) return; 845 846 var navigation = 847 nextElement && prevElement 848 ? { nextEl: nextElement, prevEl: prevElement, disabledClass: "is-disabled" } 849 : undefined; 850 851 // --- Init --- 852 var swiper = new Swiper(swiperElement, { 853 // Core 854 speed: 500, 855 loop: false, 856 rewind: false, 857 autoHeight: false, 858 centeredSlides: false, 859 followFinger: true, 860 freeMode: false, 861 slideToClickedSlide: false, 862 // Layout 863 slidesPerView: 1, 864 spaceBetween: 16, 865 866 // Controls 867 mousewheel: { forceToAxis: true }, 868 keyboard: { enabled: true, onlyInViewport: true }, 869 navigation: navigation, 870
871 // Breakpoints 872 breakpoints: { 873 480: { slidesPerView: 1.5, spaceBetween: 16 }, 874 768: { slidesPerView: 2, spaceBetween: 16 }, 875 992: { slidesPerView: 3.5, spaceBetween: 16 } 876 } 877 }); 878 }); 879 }); 880</script>
880</div></section><section class="section_cta-style-1"><div class="cta-style-1_image-wrapper"><img width="1134" height="385" alt="Large group of diverse people posing together indoors at a gaming or technology event with slot machines and electronic displays in the background." src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/68f2c1d6323f74d6ec5a430d_gib1vdn3fh43bguczzcw.avif" loading="lazy" class="cta-style-1_image"/></div><div class="padding-global"><div class="container-large"><div class="cta-style-1_component"><div class="max-width-large is-wider-50 align-center"><div class="text-style-tagline">WE GET IT. WE LOVE IT. WE GAME.</div><div class="spacer-xsmall"></div><h2 class="heading-style-h2">CHARACTERS WELCOME</h2><div class="spacer-xsmall"></div><p class="text-size-large">Everything we do is led by our love of gaming and <br/>challenging the status quo. â¨</p><div class="spacer-medium"></div><div class="button-group is-center"><a data-opacity-element="card" data-wf--button--variant="is-light" href="https://jobs.jobvite.com/agscareer" target="_blank" class="button w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489 w-inline-block"><div class="button-text">JOIN OUR CREW</div><div data-opacity-element="overlay" class="button-overlay w-variant-3d2afeca-9a26-7522-c51c-77d5e7f83489"></div></a></div></div></div></div></div><div class="cta-style-1_overlay"></div></section></main><footer class="footer_component"><div class="padding-global"><div class="container-large"><div class="footer_content"><a href="/" aria-label="Go to home" aria-current="page" class="footer_logo-link w-nav-brand w--current"><img width="361" height="121" alt="Blank white image with no visible content or details" src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894df8fcacf0bce086c842f_logo.png" loading="lazy" class="footer_logo"/></a><div class="w-layout-grid footer_list-wrapper"><div class="footer_link-column"><div class="footer_link-title">WHO WE ARE</div><div class="footer_link-list"><a href="/company/about-ags" class="footer_link">Mission & History</a><a href="/company/leadership" class="footer_link">Leadership & Culture</a><a href="/company/benefits-perks-offerings" class="footer_link">Benefits, Perks & Programs</a><a href="https://newsroom.playags.com/" target="_blank" class="footer_link">Newsroom</a></div></div><div class="footer_link-column"><div class="footer_link-title">OPERATIONS and Contact</div><div class="footer_link-list"><a href="/operations-and-contact/locations" class="footer_link">Locations</a><a href="/operations-and-contact/get-in-touch" class="footer_link">Get in Touch</a><a href="/operations-and-contact/field-service-support" class="footer_link">Field Service Support</a><a href="https://jobs.jobvite.com/agscareer" class="footer_link">Open Positions</a></div></div><div class="footer_link-column"><div class="footer_link-title">COMPLIANCE</div><div class="footer_link-list"><a href="/compliance/license-information" class="footer_link">License Information</a><a href="/compliance/federal-health-care-price" class="footer_link">Federal Health Care Price</a><a href="/compliance/privacy-policy" class="footer_link">Privacy Policy</a><a href="/compliance/cookie-policy" class="footer_link">Cookie Policy</a><a href="/compliance/terms-and-conditions" class="footer_link">Terms and Conditions</a></div></div><div class="footer_link-column"><div class="footer_link-title">Follow us on social</div><div class="footer_link-list"><a href="https://www.linkedin.com/company/american-gaming-systems/" target="_blank" class="footer_link">LinkedIn</a><a href="https://www.facebook.com/AmericanGamingSystems" target="_blank" class="footer_link">Facebook</a><a href="https://www.youtube.com/user/AmericanGamingSys" target="_blank" class="footer_link">Youtube</a><a href="https://www.instagram.com/play_ags/" target="_blank" class="footer_link">Instagram</a><a href="https://www.tiktok.com/@playags/video/7473618273737772331" target="_blank" class="footer_link">Tiktok</a><a href="https://x.com/PlayAGS" target="_blank" class="footer_link">X</a></div></div></div></div></div></div><div class="footer_background-wrapper"><img src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894e16c5e2515a5485f2fd0_shape.svg" loading="lazy" width="569" height="658" alt="" class="footer_background-image"/></div><div class="w-embed w-script"><!-- Search Code Start Here --> 881 882<!-- 883 Webflow Unified Search Widget 884 ============================== 885 This uses the same search logic as Next.js by calling the /api/search endpoint 886 887 Instructions: 888 1. Copy this entire file content 889 2. Paste into a Webflow Embed element (in the <head> or before </body>) 890 3. API routing (see resolvePlayagsApiConfig in script): 891 - staging.playags.com or ags--staging.webflow.io â https://staging.playags.com/directory/api 892 - playags.com or ags-prod.webflow.io â https://www.playags.com/directory/api 893 - Vercel preview / localhost â same-origin /api 894 4. Make sure you have an element with id="header-search" to trigger the search 895 5. The search will work exactly like the Next.js version 896--> 897 898<link rel="stylesheet" href="https://use.typekit.net/aun5yhc.css" /> 899<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" /> 900 901<style> 902 /* ----- Base Fonts (matching Next.js) ----- */ 903 .ts-modal-overlay, 904 .ts-modal-container, 905 .ts-search-header, 906 .ts-results-container { 907 font-family: 'stevie-sans', sans-serif; 908 } 909 910 /* ----- Modal shell ----- */ 911 .ts-modal-overlay { 912 position: fixed; 913 inset: 0; 914 background: rgba(0, 0, 0, 0.5); 915 display: none;
916 align-items: flex-start; 917 justify-content: flex-end; 918 z-index: 99999; 919 opacity: 0; 920 transition: opacity 0.2s ease-in-out; 921 } 922 923 .ts-modal-overlay.open { 924 display: flex; 925 opacity: 1; 926 } 927 928 .ts-modal-container { 929 width: 100%; 930 max-width: 100%; 931 height: 100vh; 932 border-left: 1px solid #e5e7eb; 933 box-shadow: -4px 0 6px -1px rgba(0, 0, 0, 0.1); 934 overflow: hidden; 935 transform: translateX(100%); 936 transition: transform 0.3s ease-out; 937 } 938 939 .ts-modal-overlay.open .ts-modal-container { 940 transform: translateX(0); 941 } 942 943 /* Prevent background scroll when modal open */ 944 body.ts-no-scroll { 945 overflow: hidden; 946 } 947 948 /* ----- Header with logo, search, cancel (12-column grid) ----- */ 949 .ts-search-header { 950 display: grid; 951 grid-template-columns: repeat(12, 1fr); 952 gap: 8px 16px; 953 padding: 16px 44px; 954 align-items: center; 955 background: white; 956 } 957 958 @media (max-width: 640px) { 959 .ts-search-header { 960 gap: 8px; 961 padding: 16px; 962 } 963 } 964 965 .ts-logo-container { 966 display: none; 967 } 968 969 @media (min-width: 1080px) { 970 .ts-logo-container { 971 display: flex; 972 align-items: center; 973 grid-column: span 2; 974 } 975 } 976 977 .ts-logo { 978 height: 32px; 979 width: auto; 980 } 981 982 @media (min-width: 640px) { 983 .ts-logo { 984 height: 44px; 985 } 986 } 987 988 .ts-search-input-container { 989 grid-column: span 10; 990 display: flex; 991 align-items: center; 992 gap: 8px; 993 background: #f7f4f0; 994 border-radius: 8px; 995 padding: 8px 12px; 996 max-height: 40px; 997 } 998 999 @media (min-width: 1080px) { 1000 .ts-search-input-container { 1001 grid-column: span 8; 1002 padding: 10px 12px; 1003 } 1004 } 1005 1006 .ts-search-icon { 1007 width: 16px; 1008 height: 16px; 1009 color: #6b7280; 1010 flex-shrink: 0; 1011 } 1012 1013 @media (min-width: 640px) { 1014 .ts-search-icon { 1015 width: 18px; 1016 height: 18px; 1017 } 1018 } 1019 1020 .ts-search-input { 1021 flex: 1; 1022 height: 32px; 1023 background: #f7f4f0; 1024 border: 0; 1025 outline: 0; 1026 /* Must stay >= 16px: iOS Safari auto-zooms the page when a focused 1027 input has a smaller font, cropping the Cancel button (PAGS-129) */ 1028 font-size: 16px; 1029 opacity: 0.55; 1030 color: #111827; 1031 } 1032 1033 @media (min-width: 640px) { 1034 .ts-search-input { 1035 height: 40px; 1036 font-size: 18px; 1037 } 1038 } 1039 1040 .ts-search-input::placeholder { 1041 color: #6b7280; 1042 } 1043 1044 .ts-cancel-button { 1045 grid-column: span 2; 1046 display: flex; 1047 justify-content: flex-end; 1048 } 1049 1050 @media (min-width: 1080px) { 1051 .ts-cancel-button { 1052 grid-column: span 2; 1053 } 1054 } 1055 1056 .ts-cancel-btn { 1057 padding: 4px 8px; 1058 font-size: 12px; 1059 font-weight: 500; 1060 background: transparent; 1061 border: 0; 1062 cursor: pointer; 1063 color: #111827; 1064 border-radius: 6px; 1065 transition: background-color 0.2s; 1066 } 1067 1068 @media (min-width: 640px) { 1069 .ts-cancel-btn { 1070 padding: 8px 16px; 1071 font-size: 14px; 1072 } 1073 } 1074 1075 .ts-cancel-btn:hover { 1076 background: rgba(0, 0, 0, 0.05); 1077 } 1078 1079 /* ----- Popular search terms row ----- */ 1080 .ts-popular-row { 1081 display: grid; 1082 grid-template-columns: repeat(12, 1fr); 1083 gap: 8px 16px; 1084 padding: 0 44px 16px; 1085 background: #fff; 1086 } 1087 1088 @media (max-width: 640px) { 1089 .ts-popular-row { 1090 gap: 8px; 1091 padding: 0 16px 16px; 1092 } 1093 } 1094 1095 .ts-popular-container { 1096 grid-column: span 12 / span 12; 1097 grid-column-start: 1; 1098 } 1099 1100 @media (min-width: 1080px) { 1101 .ts-popular-container { 1102 grid-column: span 8 / span 8; 1103 grid-column-start: 3; 1104 } 1105 } 1106 1107 .ts-popular-title { 1108 font-size: 12px; 1109 font-weight: 500; 1110 color: #111827; 1111 margin-bottom: 8px; 1112 } 1113 1114 @media (min-width: 1080px) { 1115 .ts-popular-title { 1116 font-size: 14px; 1117 margin-bottom: 12px; 1118 } 1119 } 1120 1121 .ts-popular-terms { 1122 display: flex; 1123 flex-wrap: wrap; 1124 gap: 4px 8px; 1125 } 1126 1127 @media (min-width: 1080px) { 1128 .ts-popular-terms { 1129 gap: 8px; 1130 } 1131 } 1132 1133 .ts-popular-term { 1134 padding: 4px 8px; 1135 font-size: 12px; 1136 background: #f7f4f0; 1137 border: 0; 1138 border-radius: 2px; 1139 cursor: pointer; 1140 color: #374151; 1141 opacity: 0.55; 1142 transition: background-color 0.2s; 1143 } 1144 1145 @media (min-width: 1080px) { 1146 .ts-popular-term { 1147 padding: 6px 12px; 1148 font-size: 14px; 1149 } 1150 } 1151 1152 .ts-popular-term:hover, 1153 .ts-popular-term:focus { 1154 background: rgba(247, 244, 240, 0.8); 1155 outline: 2px solid #d1d5db; 1156 outline-offset: 0; 1157 } 1158 1159 /* ----- Results area ----- */ 1160 .ts-results-container { 1161 max-height: 70vh; 1162 overflow-y: auto; 1163 background: white; 1164 padding: 16px 44px 24px; 1165 display: grid; 1166 } 1167 1168 @media (max-width: 640px) { 1169 .ts-results-container { 1170 padding: 16px; 1171 } 1172 } 1173 1174 .ts-loading, 1175 .ts-empty { 1176 display: flex; 1177 flex-direction: column; 1178 align-items: center; 1179 justify-content: center; 1180 padding: 40px 20px; 1181 text-align: center; 1182 color: #6b7280; 1183 font-size: 14px; 1184 } 1185 1186 .ts-loading-icon, 1187 .ts-empty-icon { 1188 font-size: 16px; 1189 margin-bottom: 8px; 1190 opacity: 0.5; 1191 } 1192 1193 .ts-spinner { 1194 animation: spin 1s linear infinite; 1195 } 1196 1197 @keyframes spin { 1198 from { 1199 transform: rotate(0deg); 1200 } 1201 to { 1202 transform: rotate(360deg); 1203 } 1204 } 1205 1206 .ts-error { 1207 padding: 20px; 1208 text-align: center; 1209 color: #dc2626; 1210 background: #fef2f2; 1211 border: 1px solid #fecaca; 1212 border-radius: 8px; 1213 font-size: 14px; 1214 } 1215 1216 /* ----- Result groups ----- */ 1217 .ts-result-group { 1218 margin-bottom: 32px; 1219 justify-self: center; 1220 } 1221 1222 .ts-result-group:last-child { 1223 margin-bottom: 0; 1224 } 1225 1226 .ts-result-group-title { 1227 font-family: stevie-sans, sans-serif; 1228 font-size: 14px; 1229 font-weight: 600; 1230 color: #111827; 1231 margin-bottom: 16px; 1232 } 1233 1234 .ts-result-count { 1235 font-weight: 400; 1236 color: #6b7280; 1237 margin-left: 4px; 1238 } 1239 1240 .ts-table-category { 1241 margin-bottom: 24px; 1242 } 1243 1244 .ts-table-category:last-child { 1245 margin-bottom: 0; 1246 } 1247 1248 .ts-table-category-title { 1249 font-family: stevie-sans, sans-serif; 1250 font-size: 12px; 1251 font-weight: 600; 1252 color: #374151; 1253 margin-bottom: 12px; 1254 } 1255 1256 /* ----- Result grid ----- */ 1257 .ts-results-grid { 1258 display: grid; 1259 grid-template-columns: repeat(1, 275px); 1260 gap: 18px; 1261 } 1262 1263 @media (min-width: 600px) { 1264 .ts-results-grid { 1265 grid-template-columns: repeat(2, 1fr); 1266 } 1267 } 1268 1269 @media (min-width: 768px) { 1270 .ts-results-grid { 1271 grid-template-columns: repeat(2, 275px); 1272 } 1273 } 1274 1275 @media (min-width: 1024px) { 1276 .ts-results-grid { 1277 grid-template-columns: repeat(3, 275px); 1278 } 1279 } 1280 1281 @media (min-width: 1280px) { 1282 .ts-results-grid { 1283 grid-template-columns: repeat(4, 275px); 1284 } 1285 } 1286 1287 /* ----- Result card (matching GameTile) ----- */ 1288 .ts-result-card { 1289 width: 100%; 1290 height: 183px; 1291 background: white; 1292 border: 1px solid #e5e7eb; 1293 border-radius: 8px; 1294 overflow: hidden; 1295 cursor: pointer; 1296 transition: all 0.3s ease; 1297 position: relative; 1298 } 1299 1300 @media (min-width: 640px) { 1301 .ts-result-card { 1302 max-width: 275px; 1303 } 1304 } 1305 1306 .ts-result-card:hover { 1307 transform: scale(1.05); 1308 box-shadow: 1309 0 10px 15px -3px rgba(0, 0, 0, 0.1), 1310 0 4px 6px -2px rgba(0, 0, 0, 0.05); 1311 } 1312 1313 /* Card with image */ 1314 .ts-card-image-container { 1315 max-width: 275px; 1316 max-height: 183px; 1317 position: relative; 1318 width: 100%; 1319 height: 100%; 1320 overflow: hidden; 1321 } 1322 1323 /* When card has a caption (information articles), reduce image container height */ 1324 .ts-result-card:has(.ts-card-caption) .ts-card-image-container { 1325 height: calc(100% - 48px); 1326 } 1327 1328 .ts-card-image { 1329 width: 100%; 1330 height: 100%; 1331 object-fit: cover; 1332 transition: transform 0.3s ease; 1333 } 1334 1335 .ts-result-card:hover .ts-card-image { 1336 transform: scale(1.1); 1337 } 1338 1339 .ts-card-overlay { 1340 width: 100%; 1341 position: absolute; 1342 inset-x: 0; 1343 bottom: 0; 1344 background: linear-gradient(to top, rgba(0, 0, 0, 0.8) 0%, rgba(0, 0, 0, 0.8) 55%, transparent 100%); 1345 padding: 8px; 1346 transform: translateY(100%); 1347 transition: transform 0.3s ease-in-out; 1348 } 1349 1350 .ts-result-card:hover .ts-card-overlay { 1351 transform: translateY(0); 1352 } 1353 1354 .ts-card-title { 1355 font-family: 'termina', sans-serif; 1356 font-size: 14px; 1357 font-weight: 600; 1358 color: white; 1359 margin-bottom: 4px; 1360 line-height: 1.2; 1361 } 1362 1363 .ts-card-description { 1364 font-size: 12px; 1365 color: white; 1366 line-height: 1.4; 1367 opacity: 0.9; 1368 } 1369 1370 /* Card caption for information articles */ 1371 .ts-card-caption { 1372 font-family: 'termina', sans-serif; 1373 padding: 12px; 1374 background: white; 1375 font-size: 14pt; 1376 line-height: 1.2; 1377 color: #111827; 1378 white-space: nowrap; 1379 overflow: hidden; 1380 text-overflow: ellipsis; 1381 height: 48px; 1382 display: flex; 1383 align-items: center; 1384 } 1385 1386 /* Card without image (information items) */ 1387 .ts-card-info { 1388 width: 100%; 1389 height: 100%; 1390 background: black; 1391 display: flex; 1392 align-items: center; 1393 justify-content: center; 1394 padding: 16px; 1395 } 1396 1397 .ts-card-info-content { 1398 text-align: center; 1399 } 1400 1401 .ts-card-info-title { 1402 font-family: 'termina', sans-serif; 1403 font-size: 14px; 1404 font-weight: 600; 1405 color: white; 1406 margin-bottom: 8px; 1407 } 1408 1409 .ts-card-info-description { 1410 font-size: 12px; 1411 color: #d1d5db; 1412 line-height: 1.4; 1413 } 1414</style> 1415 1416<!-- Modal container (hidden by default) --> 1417<div id="ts-search-modal" class="ts-modal-overlay" role="dialog" aria-modal="true" aria-hidden="true"> 1418 <div class="ts-modal-container" role="document"> 1419 <!-- Header: Logo (2 cols) | Search (8 cols) | Cancel (2 cols) --> 1420 <div class="ts-search-header"> 1421 <div class="ts-logo-container"> 1422 <img src="https://www.playags.com/ags-logo.svg" alt="AGS" class="ts-logo" id="ts-logo" /> 1423 </div> 1424 1425 <div class="ts-search-input-container"> 1426 <i class="fas fa-search ts-search-icon"></i> 1427 <input type="text" id="search-input" class="ts-search-input" placeholder="Search games, cabinets, tables..." autocomplete="off" autofocus /> 1428 </div> 1429 1430 <div class="ts-cancel-button"> 1431 <button type="button" class="ts-cancel-btn" id="ts-modal-close" aria-label="Close search">Cancel</button> 1432 </div> 1433 </div> 1434 1435 <!-- Popular search terms row (aligned with search input) --> 1436 <div class="ts-popular-row" id="ts-popular-row" style="display: none"> 1437 <div class="ts-popular-container"> 1438 <p class="ts-popular-title">Popular search terms</p> 1439 <div class="ts-popular-terms" id="ts-popular-terms"></div> 1440 </div> 1441 </div> 1442 1443 <!-- Results container --> 1444 <div id="search-results" class="ts-results-container"> 1445 <div class="ts-empty"> 1446 <i class="fas fa-search ts-empty-icon"></i> 1447 <p>Start typing to search across all content</p> 1448 </div> 1449 </div> 1450 </div> 1451</div> 1452
1453<script> 1454 (function () { 1455 'use strict'; 1456 1457 // ============================================ 1458 // CONFIGURATION 1459 // ============================================ 1460 function resolvePlayagsApiConfig() { 1461 const host = window.location.hostname; 1462 1463 if (host.includes('staging.playags.com') || host.includes('ags--staging.webflow.io') || host.includes('ags-dev.webflow.io')) { 1464 return { 1465 siteOrigin: 'https://staging.playags.com', 1466 apiBase: 'https://staging.playags.com/directory/api', 1467 basePath: '/directory', 1468 }; 1469 } 1470 1471 if (host.includes('playags.com') || host.includes('ags-prod.webflow.io')) { 1472 return { 1473 siteOrigin: 'https://www.playags.com', 1474 apiBase: 'https://www.playags.com/directory/api', 1475 basePath: '/directory', 1476 }; 1477 } 1478 1479 return { 1480 siteOrigin: window.location.origin, 1481 apiBase: `${window.location.origin}/api`, 1482 basePath: '', 1483 }; 1484 } 1485 1486 const { siteOrigin: SITE_ORIGIN, apiBase: API_BASE, basePath: BASE_PATH } = resolvePlayagsApiConfig(); 1487 const API_URL = `${API_BASE}/search`; 1488 1489 // ============================================ 1490 // HELPER FUNCTIONS (minimal logic) 1491 // ============================================ 1492 1493 // Get type label - fallback if API doesn't provide it 1494 function getTypeLabel(type, typeLabels) { 1495 if (typeLabels && typeLabels[type]) { 1496 return typeLabels[type]; 1497 } 1498 1499 // Simple fallback (shouldn't be needed if API works correctly) 1500 const labels = { 1501 game: 'Games', 1502 cabinet: 'Cabinets', 1503 table: 'Tables', 1504 signature_collection: 'Collections', 1505 information: 'More information', 1506 }; 1507 1508 return labels[type] || 'Content'; 1509 } 1510 1511 // ============================================ 1512 // SEARCH FUNCTIONALITY 1513 // ============================================ 1514 1515 function addBasePath(path) { 1516 if (!path) return path; 1517 if (path.startsWith('http://') || path.startsWith('https://')) { 1518 return path; 1519 } 1520 // If path already starts with base path, don't add it again 1521 if (BASE_PATH && path.startsWith(BASE_PATH)) { 1522 return path; 1523 } 1524 return `${BASE_PATH}${path}`; 1525 } 1526 1527 function escapeHtml(text) { 1528 const div = document.createElement('div'); 1529 div.textContent = text; 1530 return div.innerHTML; 1531 } 1532 1533 // Fetch OpenGraph image from API 1534 async function fetchOpenGraphImage(url) { 1535 if (!url) return null; 1536 1537 try { 1538 // Convert relative URLs to absolute 1539 let absoluteUrl = url; 1540 if (!url.startsWith('http://') && !url.startsWith('https://')) { 1541 if (url.startsWith('/')) { 1542 absoluteUrl = `${SITE_ORIGIN}${url}`; 1543 } else { 1544 absoluteUrl = `${SITE_ORIGIN}/${url}`; 1545 } 1546 } 1547 1548 // Use the opengraph API endpoint (same base as search API) 1549 const response = await fetch(`${API_BASE}/opengraph?url=${encodeURIComponent(absoluteUrl)}`); 1550 1551 if (!response.ok) { 1552 return null; 1553 } 1554 1555 const data = await response.json(); 1556 return data.image || null; 1557 } catch (error) { 1558 console.error('Error fetching OpenGraph image:', error); 1559 return null; 1560 } 1561 } 1562 1563 let searchTimeout = null; 1564 1565 async function performSearch(query) { 1566 const resultsContainer = document.getElementById('search-results'); 1567 const popularRow = document.getElementById('ts-popular-row'); 1568 1569 if (!query.trim()) { 1570 if (resultsContainer) { 1571 resultsContainer.innerHTML = ` 1572 <div class="ts-empty"> 1573 <i class="fas fa-search ts-empty-icon"></i> 1574 <p>Start typing to search across all content</p> 1575 </div> 1576 `; 1577 } 1578 if (popularRow) popularRow.style.display = 'grid'; 1579 return; 1580 } 1581 1582 // Hide popular search terms when showing results 1583 if (popularRow) popularRow.style.display = 'none'; 1584 1585 if (resultsContainer) { 1586 resultsContainer.innerHTML = '<div class="ts-loading"><i class="fas fa-spinner ts-spinner ts-loading-icon"></i>Searching...</div>'; 1587 } 1588
1589 try { 1590 const response = await fetch(`${API_URL}?q=${encodeURIComponent(query.trim())}&limit=30`); 1591 1592 if (!response.ok) { 1593 throw new Error(`HTTP error! status: ${response.status}`); 1594 } 1595 1596 // API returns all processed data - just use it directly 1597 const data = await response.json(); 1598 1599 await renderResults(data, query); 1600 } catch (error) { 1601 console.error('Search error:', error); 1602 if (resultsContainer) { 1603 resultsContainer.innerHTML = ` 1604 <div class="ts-error"> 1605 <i class="fas fa-exclamation-triangle"></i> 1606 Error searching. Please try again. 1607 </div> 1608 `; 1609 } 1610 } 1611 } 1612 1613 async function renderResults(data, query) { 1614 const resultsContainer = document.getElementById('search-results'); 1615 if (!resultsContainer) return; 1616 1617 // Use data directly from API - no processing needed 1618 const { grouped, tableCategories, otherTypes, tablesShouldComeBeforeGames, typeLabels } = data; 1619 1620 if (!grouped || Object.keys(grouped).length === 0) { 1621 resultsContainer.innerHTML = ` 1622 <div class="ts-empty"> 1623 <i class="fas fa-search ts-empty-icon"></i> 1624 <p>No results found for "${escapeHtml(query)}"</p> 1625 </div> 1626 `; 1627 return; 1628 } 1629 1630 let html = ''; 1631 1632 // More information ALWAYS first (from API order) 1633 if (grouped['information'] && grouped['information'].length > 0) { 1634 html += await renderTypeSection('information', grouped['information'], typeLabels || {}); 1635 } 1636 1637 // Show tables first if API says so 1638 if (tablesShouldComeBeforeGames && tableCategories && tableCategories.length > 0) { 1639 html += renderTableCategories(tableCategories, grouped, typeLabels || {}); 1640 } 1641 1642 // Other types (games, cabinets, etc.) - exclude information (from API order) 1643 if (otherTypes) { 1644 for (const type of otherTypes.filter((t) => t !== 'information')) { 1645 html += await renderTypeSection(type, grouped[type], typeLabels || {}); 1646 } 1647 } 1648 1649 // Tables section - show after games if API says so 1650 if (!tablesShouldComeBeforeGames && tableCategories && tableCategories.length > 0) { 1651 html += renderTableCategories(tableCategories, grouped, typeLabels || {}); 1652 } 1653 1654 resultsContainer.innerHTML = html; 1655 } 1656 1657 async function renderTypeSection(type, results, typeLabels) { 1658 if (!results || results.length === 0) return ''; 1659 1660 // Use type label from API, fallback to helper function 1661 const typeLabel = getTypeLabel(type, typeLabels); 1662 const isInformation = type === 'information'; 1663 1664 // For information articles, fetch OpenGraph images for those without images 1665 if (isInformation) { 1666 for (const result of results) { 1667 if (!result.image && result.url) { 1668 // Fetch OpenGraph image asynchronously 1669 const ogImage = await fetchOpenGraphImage(result.url); 1670 if (ogImage) { 1671 result.image = ogImage; 1672 } 1673 } 1674 } 1675 } 1676 1677 const itemsHtml = results 1678 .map((result) => { 1679 const finalUrl = addBasePath(result.url); 1680 const isInfoItem = isInformation && !result.image; 1681 1682 if (isInfoItem) { 1683 return ` 1684 <div class="ts-result-card" onclick="window.location.href='${finalUrl}'"> 1685 <div class="ts-card-info"> 1686 <div class="ts-card-info-content"> 1687 <div class="ts-card-info-title">${escapeHtml(result.title)}</div> 1688 ${result.description ? `<div class="ts-card-info-description">${escapeHtml(result.description.length > 50 ? result.description.substring(0, 50) + '...' : result.description)}</div>` : ''} 1689 </div> 1690 </div> 1691 </div> 1692 `; 1693 } 1694 1695 // Information with image (OpenGraph thumbnail) 1696 if (isInformation && result.image) { 1697 const escapedTitle = escapeHtml(result.title); 1698 return ` 1699 <div class="ts-result-card" onclick="window.location.href='${finalUrl}'"> 1700 <div class="ts-card-image-container"> 1701 <img src="${escapeHtml(result.image)}" alt="${escapedTitle}" class="ts-card-image" onerror="this.onerror=null; this.style.display='none'; const card=this.closest('.ts-result-card'); if(card){const caption=card.querySelector('.ts-card-caption'); if(card && !card.querySelector('.ts-card-info')){card.innerHTML='<div class=\\'ts-card-info\\'><div class=\\'ts-card-info-content\\'><div class=\\'ts-card-info-title\\'>${escapedTitle}</div></div></div>';}}"> 1702 </div> 1703 <div class="ts-card-caption">${escapedTitle}</div> 1704 </div> 1705 `; 1706 } 1707 1708 // Regular card with image 1709 return ` 1710 <div class="ts-result-card" onclick="window.location.href='${finalUrl}'"> 1711 <div class="ts-card-image-container"> 1712 ${result.image ? `<img src="${escapeHtml(result.image)}" alt="${escapeHtml(result.title)}" class="ts-card-image">` : ''} 1713 <div class="ts-card-overlay"> 1714 <div class="ts-card-title">${escapeHtml(result.title)}</div> 1715 ${result.description && result.type !== 'signature_collection' ? `<div class="ts-card-description">${escapeHtml(result.description.length > 50 ? result.description.substring(0, 50) + '...' : result.description)}</div>` : ''} 1716 </div> 1717 </div> 1718 </div> 1719 `; 1720 }) 1721 .join(''); 1722 1723 return ` 1724 <div class="ts-result-group"> 1725 <h3 class="ts-result-group-title">${typeLabel} <span class="ts-result-count">(${results.length})</span></h3> 1726 <div class="ts-results-grid"> 1727 ${itemsHtml} 1728 </div> 1729 </div> 1730 `; 1731 } 1732 1733 function renderTableCategories(tableCategories, grouped, typeLabels) { 1734 if (!tableCategories || tableCategories.length === 0) return ''; 1735 1736 const totalTableCount = tableCategories.reduce((sum, key) => sum + (grouped[key]?.length || 0), 0); 1737 1738 let html = ` 1739 <div class="ts-result-group"> 1740 <h3 class="ts-result-group-title">Tables <span class="ts-result-count">(${totalTableCount})</span></h3> 1741 `; 1742
1743 tableCategories.forEach((category) => { 1744 const results = grouped[category] || []; 1745 if (results.length === 0) return; 1746 1747 // Use type label from API, fallback to helper function 1748 const categoryLabel = getTypeLabel(category, typeLabels); 1749 1750 const itemsHtml = results 1751 .map((result) => { 1752 const finalUrl = addBasePath(result.url); 1753 return ` 1754 <div class="ts-result-card" onclick="window.location.href='${finalUrl}'"> 1755 <div class="ts-card-image-container"> 1756 ${result.image ? `<img src="${escapeHtml(result.image)}" alt="${escapeHtml(result.title)}" class="ts-card-image">` : ''} 1757 <div class="ts-card-overlay"> 1758 <div class="ts-card-title">${escapeHtml(result.title)}</div> 1759 ${result.description ? `<div class="ts-card-description">${escapeHtml(result.description.length > 50 ? result.description.substring(0, 50) + '...' : result.description)}</div>` : ''} 1760 </div> 1761 </div> 1762 </div> 1763 `; 1764 }) 1765 .join(''); 1766 1767 html += ` 1768 <div class="ts-table-category"> 1769 <h4 class="ts-table-category-title">${categoryLabel} <span class="ts-result-count">(${results.length})</span></h4> 1770 <div class="ts-results-grid"> 1771 ${itemsHtml} 1772 </div> 1773 </div> 1774 `; 1775 }); 1776 1777 html += '</div>'; 1778 return html; 1779 } 1780 1781 // ============================================ 1782 // MODAL MANAGEMENT 1783 // ============================================ 1784 1785 const modal = document.getElementById('ts-search-modal'); 1786 const closeBtn = document.getElementById('ts-modal-close'); 1787 const searchInput = document.getElementById('search-input'); 1788 let lastActiveElement = null; 1789 let hasSearched = false; 1790 1791 function openModal() { 1792 lastActiveElement = document.activeElement; 1793 modal.classList.add('open'); 1794 modal.setAttribute('aria-hidden', 'false'); 1795 document.body.classList.add('ts-no-scroll'); 1796 1797 // Reset state 1798 hasSearched = false; 1799 const results = document.getElementById('search-results'); 1800 const popularRow = document.getElementById('ts-popular-row'); 1801 1802 if (searchInput) searchInput.value = ''; 1803 1804 if (results) { 1805 results.innerHTML = ` 1806 <div class="ts-empty"> 1807 <i class="fas fa-search ts-empty-icon"></i> 1808 <p>Start typing to search across all content</p> 1809 </div> 1810 `; 1811 } 1812 1813 // Show popular search terms 1814 if (popularRow) { 1815 popularRow.style.display = 'grid'; 1816 loadPopularSearchTerms(); 1817 } 1818 1819 setTimeout(() => { 1820 if (searchInput) searchInput.focus(); 1821 }, 100); 1822 } 1823 1824 function closeModal() { 1825 modal.classList.remove('open'); 1826 modal.setAttribute('aria-hidden', 'true'); 1827 document.body.classList.remove('ts-no-scroll'); 1828 1829 // Hide popular search terms 1830 const popularRow = document.getElementById('ts-popular-row'); 1831 if (popularRow) popularRow.style.display = 'none'; 1832 1833 if (lastActiveElement && lastActiveElement.focus) { 1834 setTimeout(() => lastActiveElement.focus(), 0); 1835 } 1836 } 1837 1838 // Close on overlay click 1839 modal.addEventListener('click', (e) => { 1840 if (e.target === modal) closeModal(); 1841 }); 1842 1843 // Close on ESC 1844 document.addEventListener('keydown', (e) => { 1845 if (e.key === 'Escape' && modal.classList.contains('open')) { 1846 e.preventDefault(); 1847 closeModal(); 1848 } 1849 }); 1850 1851 if (closeBtn) closeBtn.addEventListener('click', closeModal); 1852 1853 // Search input debouncing 1854 if (searchInput) { 1855 searchInput.addEventListener('input', (e) => { 1856 const query = e.target.value; 1857 1858 // Clear existing timeout 1859 if (searchTimeout) { 1860 clearTimeout(searchTimeout); 1861 } 1862 1863 // Debounce search 1864 searchTimeout = setTimeout(() => { 1865 hasSearched = true; 1866 performSearch(query); 1867 }, 300); 1868 }); 1869 } 1870 1871 // ============================================ 1872 // POPULAR SEARCH TERMS 1873 // ============================================ 1874 1875 async function loadPopularSearchTerms() {
1876 try { 1877 const response = await fetch(`${API_BASE}/popular-search-terms`); 1878 1879 if (!response.ok) { 1880 return; 1881 } 1882 1883 const terms = await response.json(); 1884 1885 const container = document.getElementById('ts-popular-terms'); 1886 if (!container) return; 1887 1888 if (!terms || terms.length === 0) { 1889 container.innerHTML = ''; 1890 return; 1891 } 1892 1893 container.innerHTML = terms 1894 .map((term) => { 1895 const searchQuery = term.link || term.title || ''; 1896 const displayTitle = term.title || ''; 1897 const escapedQuery = searchQuery.replace(/'/g, "\\'").replace(/"/g, '"'); 1898 const escapedTitle = displayTitle.replace(/</g, '<').replace(/>/g, '>').replace(/'/g, ''').replace(/"/g, '"'); 1899 1900 return ` 1901 <button 1902 class="ts-popular-term" 1903 onclick="handlePopularSearch('${escapedQuery}')" 1904 > 1905 ${escapedTitle} 1906 </button> 1907 `; 1908 }) 1909 .join(''); 1910 } catch (error) { 1911 console.error('Error loading popular search terms:', error); 1912 const container = document.getElementById('ts-popular-terms'); 1913 if (container) { 1914 container.innerHTML = ''; 1915 } 1916 } 1917 } 1918 1919 window.handlePopularSearch = function (linkOrQuery) { 1920 if (linkOrQuery.startsWith('http')) { 1921 window.location.href = linkOrQuery; 1922 } else if (searchInput) { 1923 searchInput.value = linkOrQuery; 1924 hasSearched = true; 1925 performSearch(linkOrQuery); 1926 } 1927 }; 1928 1929 // ============================================ 1930 // TRIGGER ATTACHMENT 1931 // ============================================ 1932 1933 function attachTrigger() { 1934 const trigger = document.getElementById('header-search'); 1935 if (trigger) { 1936 trigger.addEventListener('click', (e) => { 1937 e.preventDefault(); 1938 openModal(); 1939 }); 1940 } 1941 } 1942 1943 // Keyboard shortcut (Cmd/Ctrl + K) 1944 document.addEventListener('keydown', (e) => { 1945 if ((e.metaKey || e.ctrlKey) && e.key === 'k') { 1946 e.preventDefault(); 1947 if (modal.classList.contains('open')) { 1948 closeModal(); 1949 } else { 1950 openModal(); 1951 } 1952 } 1953 }); 1954 1955 // ============================================ 1956 // INITIALIZATION 1957 // ============================================ 1958 1959 if (document.readyState === 'loading') { 1960 document.addEventListener('DOMContentLoaded', attachTrigger); 1961 } else { 1962 attachTrigger(); 1963 } 1964 1965 console.log('â Unified search initialized'); 1966 })(); 1967</script>
1967 1968 1969<!-- Search Code Finish Here --> 1970 1971<!-- Latest games Code Start Here --> 1972 1973<!-- Webflow New Games Update Widget --> 1974<!-- Embed this code in Webflow's custom code section (before </body> tag) -->
1975<script> 1976 (function () { 1977 'use strict'; 1978 1979 // Number of games to fetch 1980 const NUM_GAMES = 6; 1981 1982 function resolvePlayagsApiConfig() { 1983 const host = window.location.hostname; 1984 1985 if (host.includes('staging.playags.com') || host.includes('ags--staging.webflow.io') || host.includes('ags-dev.webflow.io')) { 1986 return { 1987 apiBase: 'https://staging.playags.com/directory/api', 1988 basePath: '/directory', 1989 }; 1990 } 1991 1992 if (host.includes('playags.com') || host.includes('ags-prod.webflow.io')) { 1993 return { 1994 apiBase: 'https://www.playags.com/directory/api', 1995 basePath: '/directory', 1996 }; 1997 } 1998 1999 return { 2000 apiBase: `${window.location.origin}/api`, 2001 basePath: '', 2002 }; 2003 } 2004 2005 const { apiBase: API_BASE, basePath: BASE_PATH } = resolvePlayagsApiConfig(); 2006 const NEW_GAMES_API_URL = `${API_BASE}/new-games`; 2007 2008 /** 2009 * Add base path to URL 2010 */ 2011 function addBasePath(path) { 2012 if (!path) return path; 2013 if (path.startsWith('http://') || path.startsWith('https://')) { 2014 return path; 2015 } 2016 return `${BASE_PATH}${path}`; 2017 } 2018 2019 /** 2020 * Fetch latest games from backend API 2021 */ 2022 async function fetchLatestGames() { 2023 try { 2024 const response = await fetch(`${NEW_GAMES_API_URL}?limit=${NUM_GAMES}`); 2025 if (!response.ok) { 2026 return []; 2027 } 2028 2029 const data = await response.json(); 2030 return Array.isArray(data?.games) ? data.games : []; 2031 } catch (error) { 2032 console.error('[New Games] Error fetching latest games from API:', error); 2033 return []; 2034 } 2035 } 2036 2037 /** 2038 * Update a single game slide 2039 */ 2040 function updateGameSlide(slideElement, game, index) { 2041 const linkElement = slideElement.querySelector('a.new-games_image-wrapper'); 2042 const imageElement = slideElement.querySelector('img.new-games_image'); 2043 2044 if (!linkElement || !imageElement) { 2045 return false; 2046 } 2047 2048 // Update link 2049 const gameUrl = addBasePath(game.path); 2050 linkElement.href = gameUrl; 2051 linkElement.setAttribute('aria-label', `Game ${index + 1}: ${game.title}`); 2052 2053 // Update image 2054 if (game.image) { 2055 // Update src 2056 imageElement.src = game.image; 2057 2058 // Update srcset if it exists 2059 const srcset = imageElement.getAttribute('srcset'); 2060 if (srcset) { 2061 // Try to generate responsive srcset from the image URL 2062 // This is a simple approach - you may need to adjust based on your CDN 2063 const baseUrl = game.image.split('?')[0]; // Remove query params 2064 const extension = baseUrl.split('.').pop(); 2065 const baseName = baseUrl.replace(`.${extension}`, ''); 2066 2067 // Generate srcset for common sizes 2068 const srcsetParts = [`${baseName}-p-500.${extension} 500w`, `${baseName}.${extension} 640w`]; 2069 imageElement.setAttribute('srcset', srcsetParts.join(', ')); 2070 } 2071 2072 // Update alt text 2073 imageElement.alt = game.title || ''; 2074 2075 // Update sizes if needed 2076 if (!imageElement.getAttribute('sizes')) { 2077 imageElement.setAttribute('sizes', '100vw'); 2078 } 2079 } 2080 2081 return true; 2082 } 2083 2084 /** 2085 * Wait for element to appear in DOM 2086 */ 2087 function waitForElement(selector, timeout = 10000) { 2088 return new Promise((resolve, reject) => { 2089 const element = document.querySelector(selector); 2090 if (element) { 2091 resolve(element); 2092 return; 2093 } 2094 2095 const observer = new MutationObserver((mutations, obs) => { 2096 const element = document.querySelector(selector); 2097 if (element) { 2098 obs.disconnect(); 2099 resolve(element); 2100 } 2101 }); 2102 2103 observer.observe(document.body, { 2104 childList: true, 2105 subtree: true, 2106 }); 2107 2108 setTimeout(() => { 2109 observer.disconnect(); 2110 reject(new Error(`Element ${selector} not found within ${timeout}ms`)); 2111 }, timeout); 2112 }); 2113 } 2114 2115 /** 2116 * Hide slides initially until we load data from Typesense 2117 */ 2118 function hideSlidesInitially() { 2119 const sliderWrapper = document.querySelector('.new-games_slider-wrapper'); 2120 if (sliderWrapper) { 2121 sliderWrapper.style.opacity = '0'; 2122 sliderWrapper.style.visibility = 'hidden'; 2123 } 2124 } 2125 2126 /** 2127 * Show slides after data is loaded 2128 */ 2129 function showSlides() { 2130 const sliderWrapper = document.querySelector('.new-games_slider-wrapper'); 2131 if (sliderWrapper) { 2132 sliderWrapper.style.opacity = '1'; 2133 sliderWrapper.style.visibility = 'visible'; 2134 sliderWrapper.style.transition = 'opacity 0.3s ease-in-out'; 2135 } 2136 } 2137 2138 /** 2139 * Show slides even if update failed (fallback to original content) 2140 */ 2141 function showSlidesFallback() { 2142 const sliderWrapper = document.querySelector('.new-games_slider-wrapper'); 2143 if (sliderWrapper) { 2144 sliderWrapper.style.opacity = '1'; 2145 sliderWrapper.style.visibility = 'visible'; 2146 } 2147 } 2148 2149 /** 2150 * Update navigation bar dropdown with latest games 2151 */ 2152 function updateNavBarDropdown(games) { 2153 const navBar = document.querySelector('#new-games-nav-bar'); 2154 if (!navBar) { 2155 return; 2156 } 2157 2158 const items = navBar.querySelectorAll('.w-dyn-item'); 2159 2160 if (items.length === 0) { 2161 return; 2162 } 2163 2164 // Update each nav item with a game
2165 items.forEach((item, index) => { 2166 if (index < games.length) { 2167 const link = item.querySelector('a.navbar_dropdown-link'); 2168 const textDiv = link?.querySelector('div'); 2169 2170 if (link && textDiv) { 2171 // Update link href 2172 link.href = addBasePath(games[index].path); 2173 2174 // Update text content 2175 textDiv.textContent = games[index].title; 2176 } 2177 } 2178 }); 2179 } 2180 2181 /** 2182 * Update all game slides 2183 */ 2184 async function updateGameSlides(games) { 2185 let sliderWrapper; 2186 try { 2187 sliderWrapper = await waitForElement('.new-games_slider-wrapper', 10000); 2188 } catch (error) { 2189 console.error('[New Games] New games slider wrapper not found'); 2190 showSlidesFallback(); 2191 return; 2192 } 2193 2194 const slides = sliderWrapper.querySelectorAll('.swiper-slide.is-new-games'); 2195 2196 if (slides.length === 0) { 2197 showSlidesFallback(); 2198 return; 2199 } 2200 2201 // Update each slide with a game 2202 slides.forEach((slide, index) => { 2203 if (index < games.length) { 2204 updateGameSlide(slide, games[index], index); 2205 } 2206 }); 2207 2208 // If we have a Swiper instance, reinitialize it 2209 if (typeof Swiper !== 'undefined' && sliderWrapper.swiper) { 2210 try { 2211 sliderWrapper.swiper.update(); 2212 sliderWrapper.swiper.updateSlides(); 2213 sliderWrapper.swiper.updateSlidesClasses(); 2214 } catch (error) { 2215 console.warn('[New Games] Could not update Swiper instance:', error); 2216 } 2217 } 2218 2219 // Show slides after updates are complete 2220 showSlides(); 2221 } 2222 2223 /** 2224 * Main function to update new games 2225 */ 2226 async function updateNewGames() { 2227 const games = await fetchLatestGames(); 2228 2229 if (games.length === 0) { 2230 showSlidesFallback(); 2231 return; 2232 } 2233 2234 // Update navigation bar dropdown 2235 updateNavBarDropdown(games); 2236 2237 // Update slides (will wait for element if needed) 2238 try { 2239 await updateGameSlides(games); 2240 } catch (error) { 2241 console.error('[New Games] Error updating slides:', error); 2242 showSlidesFallback(); 2243 } 2244 } 2245 2246 // Run the update 2247 // Wait for DOM to be ready 2248 function init() { 2249 // Wait a bit for Webflow's scripts to initialize 2250 if (document.readyState === 'loading') { 2251 document.addEventListener('DOMContentLoaded', () => { 2252 setTimeout(updateNewGames, 1000); // Give Webflow time to initialize 2253 }); 2254 } else { 2255 setTimeout(updateNewGames, 1000); 2256 } 2257 } 2258 2259 // Hide slides immediately when script loads 2260 if (document.readyState === 'loading') { 2261 document.addEventListener('DOMContentLoaded', () => { 2262 hideSlidesInitially(); 2263 }); 2264 } else { 2265 hideSlidesInitially(); 2266 } 2267 2268 // Start initialization 2269 init(); 2270 })(); 2271</script>
2271 2272 2273<!-- Latest games Code Finish Here --></div></footer></div>
2273<script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=6893c2c851dca9d751167409" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.schunk.36b8fb49256177c8.js" type="text/javascript" integrity="sha384-4abIlA5/v7XaW1HMXKBgnUuhnjBYJ/Z9C1OSg4OhmVw9O3QeHJ/qJqFBERCDPv7G" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.schunk.da2b902111ca5f94.js" type="text/javascript" integrity="sha384-lzZWhl8oDVFR4Gxx1JYRT2y4m6dQQSM/9WeaLPmfUaYQyvd2RDVwC381Mssakm8W" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.schunk.d41edee7ca7cf92a.js" type="text/javascript" integrity="sha384-8PWkBPqpZlQlZ4GOpZq0J1fqkSAoCAfgzoP6bMFSv/35Xm6FByJsogkMKeIJOlal" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.schunk.121b0d7ff03e0f4a.js" type="text/javascript" integrity="sha384-xmxYNW5cjPqRkOstIN2AtIcrlQOgIF4k5PmI7WPxkrTXkUGtbSKaezRTaxUTpIEs" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/6893c2c851dca9d751167409/js/webflow.72681053.461c4572ef814cb9.js" type="text/javascript" integrity="sha384-AsXQendwxpmbDRSu8dFxGGSD5i29+mkQ2iztcuGeu0fPPwf8bC2xcOz1DadZm4oH" crossorigin="anonymous"></script>
2273<script src="https://cdn.prod.website-files.com/gsap/3.15.0/gsap.min.js" type="text/javascript"></script>
2273<script src="https://cdn.prod.website-files.com/gsap/3.15.0/ScrollTrigger.min.js" type="text/javascript"></script>
2273<script src="https://cdn.prod.website-files.com/gsap/3.15.0/SplitText.min.js" type="text/javascript"></script>
2273<script src="https://cdn.prod.website-files.com/gsap/3.15.0/TextPlugin.min.js" type="text/javascript"></script>
2273<script type="text/javascript">gsap.registerPlugin(ScrollTrigger,SplitText,TextPlugin);</script>
2273<!-- OPTIMIZED WEBFLOW FOOTER - ALL FEATURES WORKING + PERFORMANCE IMPROVEMENTS --> 2274<!-- Copy this ENTIRE block to Webflow â Project Settings â Custom Code â Footer Code (before </body>) --> 2275 2276<style> 2277 a[href*="webflow.com"][href*="badge"] { display: none !important; } 2278 .w-webflow-badge { display: none !important; } 2279</style> 2280 2281<!-- Load libraries with defer for non-blocking (except Highcharts which is needed immediately) -->
2282<script defer src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide.min.js"></script>
vendor: 1 bytes, line 2282
2282
2283<script defer src="https://cdn.jsdelivr.net/npm/@splidejs/[email protected]/dist/js/splide-extension-auto-scroll.min.js"></script>
vendor: 1 bytes, line 2283
2283
2284<script defer src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
vendor: 1 bytes, line 2284
2284
2285<script defer src="https://cdn.jsdelivr.net/npm/@finsweet/attributes-accordion@1/accordion.js"></script>
vendor: 1 bytes, line 2285
2285
2286<script defer src="https://unpkg.com/@rive-app/[email protected]"></script>
2286 2287 2288<!-- Highcharts - Load immediately (map needs this) -->
2289<script src="https://code.highcharts.com/maps/highmaps.js"></script>
vendor: 1 bytes, line 2289
2289
2290<script src="https://code.highcharts.com/maps/modules/data.js"></script>
vendor: 1 bytes, line 2290
2290
2291<script src="https://code.highcharts.com/maps/modules/accessibility.js"></script>
2291 2292 2293<!-- CRITICAL: Super aggressive Elfsight lazy load -->
2294<script> 2295(function() { 2296 let elfsightLoaded = false; 2297 2298 function loadElfsight() { 2299 if (elfsightLoaded) return; 2300 elfsightLoaded = true; 2301 2302 console.log('â° Loading Elfsight widget...'); 2303 2304 var elfsightScript = document.createElement('script'); 2305 elfsightScript.src = 'https://static.elfsight.com/platform/platform.js'; 2306 elfsightScript.async = true; 2307 elfsightScript.setAttribute('data-use-service-core', ''); 2308 2309 elfsightScript.onload = function() { 2310 console.log('â Elfsight loaded'); 2311 }; 2312 2313 document.body.appendChild(elfsightScript); 2314 } 2315 2316 // Load on scroll (after user starts scrolling) 2317 let scrollTimer; 2318 let hasScrolled = false; 2319 2320 window.addEventListener('scroll', function() { 2321 if (!hasScrolled) { 2322 hasScrolled = true; 2323 clearTimeout(scrollTimer); 2324 scrollTimer = setTimeout(loadElfsight, 2000); 2325 } 2326 }, { passive: true }); 2327 2328 // Load on any user interaction 2329 const interactions = ['click', 'touchstart', 'keydown']; 2330 interactions.forEach(function(event) { 2331 document.addEventListener(event, function() { 2332 setTimeout(loadElfsight, 1000); 2333 }, { once: true, passive: true }); 2334 }); 2335 2336 // Fallback - load after 8 seconds if no interaction 2337 window.addEventListener('load', function() { 2338 setTimeout(function() { 2339 if (!elfsightLoaded) { 2340 console.log('â° Loading Elfsight (fallback timer)'); 2341 loadElfsight(); 2342 } 2343 }, 8000); 2344 }); 2345})(); 2346</script>
vendor: 69 bytes, lines 2346-2348
2346 2347 2348<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
2348GTM-WG7CSMRW
vendor: 84 bytes, lines 2348-2349
2348" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 2349
2350<script> 2351// ============================================ 2352// SEARCH FUNCTIONALITY 2353// ============================================ 2354document.addEventListener("DOMContentLoaded", () => { 2355 const form = document.querySelector('[data-search-canvas="form"]'); 2356 const input = document.querySelector('[data-search-canvas="input"]'); 2357 const button = document.querySelector('[data-search-canvas="button"]'); 2358 2359 if (!form || !input || !button) return; 2360 2361 form.addEventListener("submit", (e) => { 2362 e.preventDefault(); 2363 const value = input.value.trim(); 2364 if (value) { 2365 window.open(`/directory/?search=${encodeURIComponent(value)}`, "_blank"); 2366 } 2367 }); 2368 2369 button.addEventListener("click", (e) => { 2370 e.preventDefault(); 2371 const value = input.value.trim(); 2372 if (value) { 2373 window.open(`/directory/?search=${encodeURIComponent(value)}`, "_blank"); 2374 } 2375 }); 2376 2377 input.addEventListener("input", () => { 2378 if (input.value.trim() !== "") { 2379 button.classList.add("is-active"); 2380 } else { 2381 button.classList.remove("is-active"); 2382 } 2383 }); 2384}); 2385 2386// ============================================ 2387// GSAP OPACITY REVEAL 2388// ============================================ 2389window.addEventListener("load", function () { 2390 if (typeof gsap !== 'undefined') { 2391 gsap.set("[data-hide-load]", { opacity: 1 }); 2392 } 2393}); 2394</script>
2394 2395 2396<noscript><style>[data-hide-load]{opacity: 1;}</style></noscript> 2397
2398<script> 2399// ============================================ 2400// UNIVERSAL SWIPER SLIDER 2401// ============================================ 2402(function UniversalSwiperSlider() { 2403 document.addEventListener("DOMContentLoaded", function () { 2404 if (typeof Swiper === "undefined") { 2405 console.warn("[UniversalSwiperSlider] Swiper not found. Load swiper-bundle.min.js before this script."); 2406 return; 2407 } 2408 2409 const ussParse = (val) => { 2410 if (val === undefined || val === null || val === "") return undefined; 2411 if (val === "true") return true; 2412 if (val === "false") return false; 2413 if (!isNaN(val)) return Number(val); 2414 return val; 2415 }; 2416 2417 const ussParseJSON = (str) => { 2418 if (!str) return undefined; 2419 try { return JSON.parse(str); } 2420 catch (e) { 2421 console.warn("[UniversalSwiperSlider] Invalid JSON:", str); 2422 return undefined; 2423 } 2424 }; 2425 2426 document.querySelectorAll("[data-universal-swiper-slider]").forEach(function (ussSliderEl) { 2427 const ussSwiperSelector = ussSliderEl.getAttribute("data-swiper-container") || ".swiper"; 2428 const ussNextSelector = ussSliderEl.getAttribute("data-swiper-nav-next") || ".swiper-next"; 2429 const ussPrevSelector = ussSliderEl.getAttribute("data-swiper-nav-prev") || ".swiper-prev"; 2430 2431 const ussContainerEl = ussSliderEl.querySelector(ussSwiperSelector); 2432 const ussNextEl = ussSliderEl.querySelector(ussNextSelector); 2433 const ussPrevEl = ussSliderEl.querySelector(ussPrevSelector); 2434 2435 if (!ussContainerEl) { 2436 console.warn("[UniversalSwiperSlider] Container not found for", ussSliderEl); 2437 return; 2438 } 2439 2440 const ussSpeed = ussParse(ussSliderEl.getAttribute("data-swiper-speed")); 2441 const ussLoop = ussParse(ussSliderEl.getAttribute("data-swiper-loop")); 2442 const ussRewind = ussParse(ussSliderEl.getAttribute("data-swiper-rewind")); 2443 const ussAutoHeight = ussParse(ussSliderEl.getAttribute("data-swiper-auto-height")); 2444 const ussCenteredSlides = ussParse(ussSliderEl.getAttribute("data-swiper-centered")); 2445 const ussFollowFinger = ussParse(ussSliderEl.getAttribute("data-swiper-follow-finger")); 2446 const ussFreeMode = ussParse(ussSliderEl.getAttribute("data-swiper-free-mode")); 2447 const ussSlideToClicked = ussParse(ussSliderEl.getAttribute("data-swiper-slide-to-clicked")); 2448 const ussSlidesPerView = ussParse(ussSliderEl.getAttribute("data-swiper-slides-per-view")); 2449 const ussSpaceBetween = ussParse(ussSliderEl.getAttribute("data-swiper-space-between")); 2450 const ussMousewheel = ussParse(ussSliderEl.getAttribute("data-swiper-mousewheel")); 2451 const ussKeyboard = ussParse(ussSliderEl.getAttribute("data-swiper-keyboard")); 2452 2453 const ussBreakpointsJSON = ussParseJSON(ussSliderEl.getAttribute("data-swiper-breakpoints")); 2454 const ussOptionsJSON = ussParseJSON(ussSliderEl.getAttribute("data-swiper-options")); 2455 2456 const ussNavigation = ussNextEl && ussPrevEl 2457 ? { nextEl: ussNextEl, prevEl: ussPrevEl, disabledClass: "is-disabled" } 2458 : undefined; 2459 2460 const ussDefaults = { 2461 speed: 500, 2462 loop: false, 2463 rewind: false, 2464 autoHeight: false, 2465 centeredSlides: false, 2466 followFinger: true, 2467 freeMode: false, 2468 slideToClickedSlide: false, 2469 slidesPerView: 1, 2470 spaceBetween: 16, 2471 mousewheel: { forceToAxis: true }, 2472 keyboard: { enabled: true, onlyInViewport: true }, 2473 navigation: ussNavigation, 2474 breakpoints: { 2475 480: { slidesPerView: 1, spaceBetween: 16 }, 2476 768: { slidesPerView: 2, spaceBetween: 16 }, 2477 992: { slidesPerView: 2.5, spaceBetween: 16 } 2478 } 2479 }; 2480 2481 const ussAttrOverrides = { 2482 ...(ussSpeed !== undefined ? { speed: ussSpeed } : {}), 2483 ...(ussLoop !== undefined ? { loop: ussLoop } : {}), 2484 ...(ussRewind !== undefined ? { rewind: ussRewind } : {}), 2485 ...(ussAutoHeight !== undefined ? { autoHeight: ussAutoHeight } : {}), 2486 ...(ussCenteredSlides !== undefined ? { centeredSlides: ussCenteredSlides } : {}), 2487 ...(ussFollowFinger !== undefined ? { followFinger: ussFollowFinger } : {}), 2488 ...(ussFreeMode !== undefined ? { freeMode: ussFreeMode } : {}), 2489 ...(ussSlideToClicked !== undefined ? { slideToClickedSlide: ussSlideToClicked } : {}), 2490 ...(ussSlidesPerView !== undefined ? { slidesPerView: ussSlidesPerView } : {}), 2491 ...(ussSpaceBetween !== undefined ? { spaceBetween: ussSpaceBetween } : {}), 2492 ...(ussMousewheel !== undefined 2493 ? (ussMousewheel ? { mousewheel: { forceToAxis: true } } : { mousewheel: false }) 2494 : {}), 2495 ...(ussKeyboard !== undefined 2496 ? (ussKeyboard ? { keyboard: { enabled: true, onlyInViewport: true } } : { keyboard: false }) 2497 : {}), 2498 ...(ussBreakpointsJSON ? { breakpoints: ussBreakpointsJSON } : {}) 2499 }; 2500 2501 const ussFinalOptions = Object.assign({}, ussDefaults, ussAttrOverrides, ussOptionsJSON || {}); 2502 const ussSwiperInstance = new Swiper(ussContainerEl, ussFinalOptions);
2503 ussSliderEl._universalSwiper = ussSwiperInstance; 2504 }); 2505 }); 2506})(); 2507</script>
2507 2508
2509<script> 2510// ============================================ 2511// HIGHCHARTS MAP (Your Original Code) 2512// ============================================ 2513(() => { 2514 let topoPromise; 2515 function getWorldTopo() { 2516 if (!topoPromise) { 2517 topoPromise = fetch('https://code.highcharts.com/mapdata/custom/world.topo.json') 2518 .then(r => r.json()); 2519 } 2520 return topoPromise; 2521 } 2522 2523 function getSelectors(block) { 2524 return Array.from(block.querySelectorAll('[data-map-country-selector]')); 2525 } 2526 2527 function buildHighlightSet(block) { 2528 const set = new Set(); 2529 getSelectors(block).forEach(el => { 2530 const code = (el.getAttribute('data-code') || '').trim().toUpperCase(); 2531 if (code) set.add(code); 2532 }); 2533 return set; 2534 } 2535 2536 function buildValuesMap(block) { 2537 const values = {}; 2538 getSelectors(block).forEach(el => { 2539 const code = (el.getAttribute('data-code') || '').trim().toUpperCase(); 2540 if (!code) return; 2541 values[code] = (el.getAttribute('data-value') || '').trim(); 2542 }); 2543 return values; 2544 } 2545 2546 function setActive(series, point, block, valuesMap) { 2547 const DIM_OPACITY = 0.8; 2548 2549 // Reset classes and opacities 2550 series.points.forEach(p => { 2551 if (p.graphic) { 2552 p.graphic.removeClass('is-active'); 2553 p.graphic.attr({ opacity: 1 }); 2554 } 2555 }); 2556 2557 // If we have a selected point, mark it active and dim the rest 2558 if (point && point.graphic) { 2559 point.graphic.addClass('is-active'); 2560 // Dim others 2561 series.points.forEach(p => { 2562 if (p !== point && p.graphic) { 2563 p.graphic.attr({ opacity: DIM_OPACITY }); 2564 } 2565 }); 2566 } 2567 2568 // Update readout 2569 const out = block.querySelector('[data-country-value]'); 2570 if (out && point) { 2571 const iso = point.code || point['iso-a3']; 2572 const v = (valuesMap[iso] || '').trim(); 2573 out.textContent = v.length ? v : (point.name || ''); 2574 } 2575 } 2576 2577 function initBlock(block, topology) { 2578 const mapEl = block.querySelector('[data-map-container]'); 2579 if (!mapEl) return; 2580 2581 const highlightSet = buildHighlightSet(block); 2582 const valuesMap = buildValuesMap(block); 2583 const data = Array.from(highlightSet).map(code => ({ code, value: 1 })); 2584 2585 const chart = Highcharts.mapChart(mapEl, { 2586 chart: { map: topology, backgroundColor: 'transparent' }, 2587 title: { text: '' }, 2588 credits: { enabled: false }, 2589 legend: { enabled: false }, 2590 accessibility: { enabled: false, keyboardNavigation: { enabled: false } }, 2591 mapNavigation: { enabled: false }, 2592 tooltip: { 2593 useHTML: true, 2594 backgroundColor: 'transparent', 2595 borderWidth: 0, 2596 shadow: false, 2597 formatter: function () { 2598 return `<div class="custom-tooltip">${this.point?.name || ''}</div>`; 2599 } 2600 }, 2601 series: [{ 2602 data, 2603 joinBy: ['iso-a3','code'], 2604 borderColor: 'rgba(134,134,134,0.5)', 2605 borderWidth: 0.5, 2606 color: { 2607 linearGradient: { x1: 0, y1: 0, x2: 1, y2: 0 }, 2608 stops: [[0,'#FFA912'], [1,'#EF3800']] 2609 }, 2610 nullColor: 'rgba(0,0,0,0)', 2611 states: { 2612 hover: { borderColor: 'rgba(134,134,134,0.5)', borderWidth: 0.5 }, 2613 select: { enabled: false }, 2614 inactive:{ enabled: false } 2615 }, 2616 point: { 2617 events: { 2618 click: function () {
2619 setActive(this.series, this, block, valuesMap); 2620 chart.tooltip.refresh(this); 2621 } 2622 } 2623 } 2624 }] 2625 }); 2626 2627 const series = chart.series[0]; 2628 2629 const findPointByISO = (iso) => series.points.find(p => (p.code || p['iso-a3']) === iso); 2630 2631 // Bind list interactions 2632 getSelectors(block).forEach(el => { 2633 const getISO = () => (el.getAttribute('data-code') || '').trim().toUpperCase(); 2634 2635 el.addEventListener('click', () => { 2636 const iso = getISO(); 2637 if (!iso) return; 2638 const pt = findPointByISO(iso); 2639 if (!pt) return; 2640 setActive(series, pt, block, valuesMap); 2641 chart.tooltip.refresh(pt); 2642 }); 2643 2644 const showTip = () => { 2645 const iso = getISO(); 2646 if (!iso) return; 2647 const pt = findPointByISO(iso); 2648 if (!pt) return; 2649 pt.setState('hover'); 2650 chart.tooltip.refresh(pt); 2651 }; 2652 2653 const hideTip = () => { 2654 const iso = getISO(); 2655 if (!iso) return; 2656 const pt = findPointByISO(iso); 2657 if (pt) pt.setState(); 2658 chart.tooltip.hide(0); 2659 }; 2660 2661 el.addEventListener('mouseenter', showTip); 2662 el.addEventListener('mouseleave', hideTip); 2663 el.addEventListener('focusin', showTip); 2664 el.addEventListener('focusout', hideTip); 2665 }); 2666 } 2667 2668 getWorldTopo().then(topology => { 2669 document.querySelectorAll('.locations_map-block').forEach(block => initBlock(block, topology)); 2670 }); 2671})(); 2672</script>
2672 2673
2674<script> 2675// ============================================ 2676// NEWSROOM INTEGRATION 2677// ============================================ 2678const jsonUrl = "https://rss.globenewswire.com/JsonFeed/organization/aRc3VEsdJx4qXYUc-W1GfA==/content/fulltext/attachments/all/StartDate/20240822"; 2679 2680fetch(jsonUrl) 2681 .then(response => response.json()) 2682 .then(data => { 2683 const list = document.querySelector(".newsroom-render_list"); 2684 if (!list) return; 2685 2686 list.innerHTML = ""; 2687 2688 data.slice(0, 3).forEach(item => { 2689 const newsItem = document.createElement("div"); 2690 newsItem.classList.add("newsroom-render_item"); 2691 2692 const imageUrl = item.Attachments?.[0]?.Url 2693 || "https://cdn.prod.website-files.com/6893c2c851dca9d751167409/6894ddaf39fa3a2fde6541ad_greyimg.jpg"; 2694 2695 newsItem.innerHTML = ` 2696 <a data-hover-card="card" href="${item.Url}" class="newsroom-render_link w-inline-block"> 2697 <div class="newsroom-render_image-wrapper" data-hover-card="image"> 2698 <img loading="lazy" alt="${item.Title}" src="${imageUrl}" class="newsroom-render_image"> 2699 </div> 2700 <div class="newsroom-render_item-content"> 2701 <h3 class="newsroom-render_heading">${item.Title}</h3> 2702 <div class="spacer-xsmall"></div> 2703 <p class="newsroom-render_summary">${item.ContentSummary}</p> 2704 <div class="spacer-small"></div> 2705 <div class="button-group"> 2706 <div class="button is-link"> 2707 <div>Read more</div> 2708 <div class="icon-embed-xxsmall w-embed"> 2709 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"> 2710 <path d="M6 3L11 8L6 13" stroke="CurrentColor" stroke-width="1.5"></path> 2711 </svg> 2712 </div> 2713 </div> 2714 </div> 2715 </div> 2716 </a> 2717 `; 2718 2719 list.appendChild(newsItem); 2720 }); 2721 }) 2722 .catch(error => { 2723 console.error("Error fetching newsroom JSON:", error); 2724 }); 2725</script>
2725 2726
2727<script> 2728// ============================================ 2729// RIVE ANIMATIONS 2730// ============================================ 2731document.addEventListener('DOMContentLoaded', function () { 2732 const riveElements = document.querySelectorAll('.rive-animation'); 2733 2734 riveElements.forEach(canvas => { 2735 const src = canvas.getAttribute('data-src'); 2736 const type = canvas.getAttribute('data-type'); 2737 const stateMachine = canvas.getAttribute('data-state-machine'); 2738 const artboard = canvas.getAttribute('data-artboard'); 2739 const autoplay = canvas.getAttribute('data-autoplay') === 'true'; 2740 const scrollThreshold = parseFloat(canvas.getAttribute('data-scroll-threshold')) || 0.4; 2741 2742 let riveInstance = null; 2743 let hasPlayed = false; 2744 2745 function fitCanvasToCSS() { 2746 const dpr = window.devicePixelRatio || 1; 2747 const rect = canvas.getBoundingClientRect(); 2748 canvas.width = rect.width * dpr; 2749 canvas.height = rect.height * dpr; 2750 } 2751 2752 function loadRive() { 2753 if (riveInstance) { 2754 riveInstance.cleanup(); 2755 } 2756 fitCanvasToCSS(); 2757 riveInstance = new rive.Rive({ 2758 src: src, 2759 canvas: canvas, 2760 autoplay: autoplay, 2761 artboard: artboard, 2762 stateMachines: stateMachine ? [stateMachine] : [] 2763 }); 2764 } 2765 2766 function init() { 2767 if (hasPlayed) return; 2768 hasPlayed = true; 2769 loadRive(); 2770 } 2771 2772 if (type === 'page-load') { 2773 init(); 2774 } else if (type === 'scroll') { 2775 const observer = new IntersectionObserver((entries, obs) => { 2776 entries.forEach(entry => { 2777 if (entry.isIntersecting && entry.intersectionRatio >= scrollThreshold) { 2778 init(); 2779 obs.unobserve(canvas); 2780 } 2781 }); 2782 }, { 2783 threshold: buildThresholdList(scrollThreshold) 2784 }); 2785 observer.observe(canvas); 2786 } 2787 2788 let resizeTimer; 2789 window.addEventListener('resize', () => { 2790 clearTimeout(resizeTimer); 2791 resizeTimer = setTimeout(() => { 2792 if (hasPlayed && riveInstance) { 2793 fitCanvasToCSS(); 2794 riveInstance.resizeDrawingSurfaceToCanvas(); 2795 } 2796 }, 200); 2797 }); 2798 }); 2799 2800 function buildThresholdList(mainThreshold) { 2801 const thresholds = []; 2802 for (let i = 0; i <= 1.0; i += 0.1) { 2803 thresholds.push(i); 2804 } 2805 if (!thresholds.includes(mainThreshold)) { 2806 thresholds.push(mainThreshold); 2807 } 2808 return thresholds.sort(); 2809 } 2810}); 2811</script>
2811<script> 2812 // Respect prefers-reduced-motion 2813 const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches; 2814 // Set initial "not drawn" state 2815 gsap.set("#bolt-stroke", { strokeDasharray: 1, strokeDashoffset: 1 }); 2816 gsap.set("#bolt-mask", { strokeDasharray: 1, strokeDashoffset: 1 }); 2817 if (reduce) { 2818 // Jump to finished if user prefers less motion 2819 gsap.set("#bolt-stroke", { strokeDashoffset: 0 }); 2820 gsap.set("#bolt-mask", { strokeDashoffset: 0 }); 2821 } else { 2822 // Timeline: draw outline, then sweep-fill (slightly overlapped so it feels snappy) 2823 const tl = gsap.timeline({ defaults: { ease: "power3.out" } }); 2824 tl.to("#bolt-stroke", { duration: 1.2, strokeDashoffset: 0 }) 2825 .to("#bolt-mask", { duration: 0.9, strokeDashoffset: 0 }, "-=0.6"); 2826 } 2827</script>
2827 2828 2829<!-- PERFORMANCE FIXES: Defer heavy third-party scripts -->
2830<script> 2831(function() { 2832 'use strict'; 2833 2834 const loaded = { 2835 elfsight: false, 2836 consent: false 2837 }; 2838 2839 // PERFORMANCE FIX #3: Trigger Elfsight lazy load 2840 function loadElfsight() { 2841 if (loaded.elfsight) return; 2842 loaded.elfsight = true; 2843 2844 // Call the Elfsight loader that's defined in the embed code 2845 if (typeof window.loadElfsight === 'function') { 2846 window.loadElfsight(); 2847 } 2848 } 2849 2850 // PERFORMANCE FIX #4: Defer ConsentPro (if you find it) 2851 function loadConsent() { 2852 if (loaded.consent) return; 2853 loaded.consent = true; 2854 // Add ConsentPro script here once you find it 2855 } 2856 2857 // STRATEGY 1: Load on user interaction 2858 let interacted = false; 2859 function handleInteraction() { 2860 if (interacted) return; 2861 interacted = true; 2862 loadElfsight(); 2863 } 2864 2865 // Load on scroll (user scrolls past 200px) 2866 let scrollTriggered = false; 2867 window.addEventListener('scroll', function() { 2868 if (scrollTriggered) return; 2869 if (window.scrollY > 200) { 2870 scrollTriggered = true; 2871 loadElfsight(); 2872 } 2873 }, { passive: true }); 2874 2875 // Or on first click/touch/mousemove 2876 ['click', 'touchstart', 'mousemove'].forEach(function(event) { 2877 document.addEventListener(event, handleInteraction, { once: true, passive: true }); 2878 }); 2879 2880 // STRATEGY 2: Load after page is fully interactive 2881 window.addEventListener('load', function() { 2882 setTimeout(function() { 2883 loadConsent(); 2884 2885 // Fallback: load Elfsight after 3s if user hasn't interacted 2886 setTimeout(function() { 2887 if (!loaded.elfsight) loadElfsight(); 2888 }, 3000); 2889 }, 2000); 2890 }); 2891 2892 // PERFORMANCE FIX #1B: Set fetchpriority on LCP images via JS fallback 2893 document.addEventListener('DOMContentLoaded', function() { 2894 // Target hero images 2895 const heroImages = document.querySelectorAll('.slots-header_element img, .games_image img'); 2896 heroImages.forEach(function(img, index) { 2897 if (index < 3 && !img.hasAttribute('fetchpriority')) { 2898 img.setAttribute('fetchpriority', 'high'); 2899 } 2900 }); 2901 }); 2902})(); 2903</script>
2903</body></html>
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.