{"id":429,"date":"2026-03-02T12:54:25","date_gmt":"2026-03-02T12:54:25","guid":{"rendered":"https:\/\/grossenoix.com\/?page_id=429"},"modified":"2026-03-02T15:32:33","modified_gmt":"2026-03-02T15:32:33","slug":"slot","status":"publish","type":"page","link":"https:\/\/grossenoix.com\/index.php\/slot\/","title":{"rendered":"SLOT"},"content":{"rendered":"\n\n\n<meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  <title>HEADRUSH \u2014 UI FRAME (3 REELS + PROGRESSIVE + MARQUEE + BET + CREDITS)<\/title>\n\n  <style>\n    :root{\n      \/* ========= ASSET ========= *\/\n      --ui-frame: url(\"https:\/\/grossenoix.com\/wp-content\/uploads\/2026\/03\/bk_slot.jpg\");\n\n      \/* ========= GEOMETRY ========= *\/\n      --reels-x: 12.5%;\n      --reels-y: 19.0%;\n      --reels-w: 75%;\n      --reels-h: 46%;\n\n      \/* Buttons (click zones on the art) *\/\n      --spin-x: 36%;\n      --spin-y: calc(74% + 80px);   \/* \u2705 moved DOWN 80px *\/\n      --spin-w: 28%;\n      --spin-h: 14%;\n\n      --maxbet-x: 9.5%;\n      --maxbet-y: calc(84% + 80px); \/* \u2705 moved DOWN 80px *\/\n      --maxbet-w: 20%;\n      --maxbet-h: 9%;\n\n      --auto-x: 62%;\n      --auto-y: calc(84% + 80px);   \/* \u2705 moved DOWN 80px *\/\n      --auto-w: 13%;\n      --auto-h: 9%;\n\n      --stop-x: 77%;\n      --stop-y: calc(84% + 80px);   \/* \u2705 moved DOWN 80px *\/\n      --stop-w: 14%;\n      --stop-h: 9%;\n\n      \/* \u2705 VAULT moved + brought UP 20px *\/\n      --vault-x: 3.0%;\n      --vault-y: calc(6.0% - 20px);\n      --vault-w: 9.5%;\n      --vault-h: 7.5%;\n\n      \/* + \/ - bet buttons (small hit zones inside the bet plate) *\/\n      --betminus-x: 11.3%;\n      --betminus-y: 69.1%;\n      --betminus-w: 6.4%;\n      --betminus-h: 4.6%;\n\n      --betplus-x: 29.2%;\n      --betplus-y: 69.1%;\n      --betplus-w: 6.4%;\n      --betplus-h: 4.6%;\n\n      \/* Reset bet (small hit zone on bet plate, center-bottom of the plate) *\/\n      --betreset-x: 19.0%;\n      --betreset-y: 72.1%;\n      --betreset-w: 8.5%;\n      --betreset-h: 3.8%;\n\n      \/* ========= HUD ZONES ========= *\/\n\n      \/* \ud83d\udd34 Progressive Jackpot (brought UP 20px) *\/\n      --progressive-x: 30%;\n      --progressive-y: calc(6% - 20px);\n      --progressive-w: 48%;\n      --progressive-h: 6.8%;\n\n      \/* \ud83d\udfe2 Marquee ticker (brought UP 20px) *\/\n      --marquee-x: 9%;\n      --marquee-y: calc(14.5% - 20px);\n      --marquee-w: 82%;\n      --marquee-h: 4.8%;\n\n      \/* \ud83d\udfe3 Amount of bet (pink area) *\/\n      --betamount-x: 8%;\n      --betamount-y: 78%;\n      --betamount-w: 30%;\n      --betamount-h: 7%;\n\n      \/* \ud83d\udd35 Total credits (blue area) *\/\n      --credits-x: 62%;\n      --credits-y: 78%;\n      --credits-w: 30%;\n      --credits-h: 7%;\n\n      \/* ========= SLOT params ========= *\/\n      --cellH: 120px;\n      --accent: #c4a45d;\n    }\n\n    *{ box-sizing:border-box; }\n    html,body{ height:100%; margin:0; background:#050505; color:#fff; font-family: Impact, system-ui, sans-serif; }\n\n    .video-bg{\n      position:fixed; inset:0;\n      width:100%; height:100%;\n      object-fit:cover; z-index:-3;\n      filter: grayscale(1) brightness(.18);\n    }\n\n    .wrap{\n      min-height:100%;\n      display:grid;\n      place-items:center;\n      padding: clamp(10px, 2vw, 28px);\n    }\n\n    .stage{\n      position:relative;\n      width:min(520px, 94vw);\n      aspect-ratio: 2 \/ 3;\n      border-radius: 18px;\n      overflow:hidden;\n      background:#000;\n      box-shadow: 0 40px 120px rgba(0,0,0,.85);\n    }\n\n    .frame{\n      position:absolute; inset:0;\n      background-image: var(--ui-frame);\n      background-size: 100% 100%;\n      background-repeat:no-repeat;\n      z-index: 1;\n      pointer-events:none;\n    }\n\n    \/* ===== REELS WINDOW (3 cols) ===== *\/\n    .reels-window{\n      position:absolute;\n      left: var(--reels-x);\n      top: var(--reels-y);\n      width: var(--reels-w);\n      height: var(--reels-h);\n      z-index: 2;\n      background: transparent;\n      border: none;\n      border-radius: 12px;\n      overflow:hidden;\n    }\n\n    .reels-container{\n      width:100%; height:100%;\n      display:grid;\n      grid-template-columns: repeat(3, 1fr);\n      gap: 0.8%;\n      padding: 0.6%;\n    }\n\n    .reel{\n      height:100%;\n      background: transparent;\n      overflow:hidden;\n      position:relative;\n      border-radius: 10px;\n      box-shadow: inset 0 0 0 1px rgba(255,255,255,.06);\n    }\n\n    .track{ will-change: transform; }\n\n    .cell{\n      height: var(--cellH);\n      display:flex;\n      align-items:center;\n      justify-content:center;\n      border-bottom: 1px solid rgba(255,255,255,.04);\n    }\n\n    .sym{\n      width:85%;\n      height:85%;\n      object-fit:contain;\n      filter: grayscale(1) contrast(1.05);\n    }\n\n    \/* HIT ZONES : invisible but clickable *\/\n    .hit{\n      position:absolute;\n      z-index: 7;\n      background: rgba(255,255,255,0);\n      border: none;\n      box-shadow: none;\n      cursor:pointer;\n      user-select:none;\n      -webkit-tap-highlight-color: transparent;\n    }\n    .hit:active{ transform: scale(.99); }\n\n    .hit.spin{ left: var(--spin-x); top: var(--spin-y); width: var(--spin-w); height: var(--spin-h); border-radius: 999px; }\n    .hit.maxbet{ left: var(--maxbet-x); top: var(--maxbet-y); width: var(--maxbet-w); height: var(--maxbet-h); border-radius: 14px; }\n    .hit.auto{ left: var(--auto-x); top: var(--auto-y); width: var(--auto-w); height: var(--auto-h); border-radius: 14px; }\n    .hit.stop{ left: var(--stop-x); top: var(--stop-y); width: var(--stop-w); height: var(--stop-h); border-radius: 14px; }\n\n    \/* \u2705 vault moved (up) *\/\n    .hit.vault{ left: var(--vault-x); top: var(--vault-y); width: var(--vault-w); height: var(--vault-h); border-radius: 14px; }\n\n    \/* Bet +\/- reset hit zones *\/\n    .hit.betminus{ left: var(--betminus-x); top: var(--betminus-y); width: var(--betminus-w); height: var(--betminus-h); border-radius: 10px; }\n    .hit.betplus{ left: var(--betplus-x); top: var(--betplus-y); width: var(--betplus-w); height: var(--betplus-h); border-radius: 10px; }\n    .hit.betreset{ left: var(--betreset-x); top: var(--betreset-y); width: var(--betreset-w); height: var(--betreset-h); border-radius: 10px; }\n\n    .hit:hover{\n      outline: 1px solid rgba(196,164,93,.15);\n      outline-offset: -1px;\n    }\n\n    \/* ===== HUD: two-line layout ===== *\/\n    .hudbox{\n      position:absolute;\n      z-index: 6;\n      display:flex;\n      flex-direction:column;\n      align-items:center;\n      justify-content:center;\n      pointer-events:none;\n      text-shadow: 0 0 18px rgba(0,0,0,.9);\n      letter-spacing: .06em;\n      font-family: Impact, system-ui, sans-serif;\n      line-height: 1.05;\n    }\n\n    .hudbox .label{\n      font-size: clamp(10px, 1.35vw, 12px);\n      opacity:.78;\n      text-transform: uppercase;\n      margin-bottom: 4px;\n    }\n\n    .hudbox .value{\n      font-size: clamp(18px, 2.2vw, 26px);\n      color: var(--accent);\n      font-weight: 900;\n    }\n\n    #progressiveHUD{\n      left:var(--progressive-x);\n      top:var(--progressive-y);\n      width:var(--progressive-w);\n      height:var(--progressive-h);\n    }\n\n    #betAmountHUD{\n      left:var(--betamount-x);\n      top:var(--betamount-y);\n      width:var(--betamount-w);\n      height:var(--betamount-h);\n    }\n\n    #creditsHUD{\n      left:var(--credits-x);\n      top:var(--credits-y);\n      width:var(--credits-w);\n      height:var(--credits-h);\n    }\n\n    \/* \ud83d\udfe2 Marquee ticker (bigger typography + slower) *\/\n    .marquee{\n      position:absolute;\n      left:var(--marquee-x);\n      top:var(--marquee-y);\n      width:var(--marquee-w);\n      height:var(--marquee-h);\n      overflow:hidden;\n      z-index:6;\n      display:flex;\n      align-items:center;\n      font-weight:900;\n      letter-spacing:.16em;\n      font-size: clamp(16px, 1.9vw, 20px); \/* \u2705 bigger type *\/\n      color: var(--accent);\n      text-transform:uppercase;\n      pointer-events:none;\n      text-shadow: 0 0 18px rgba(0,0,0,.9);\n    }\n\n    .marquee-track{\n      display:inline-block;\n      white-space:nowrap;\n      padding-left: 100%;\n      animation: scrollText 34s linear infinite; \/* \u2705 slower *\/\n    }\n\n    @keyframes scrollText{\n      0%{ transform:translateX(0); }\n      100%{ transform:translateX(-100%); }\n    }\n\n    #winDisplay{\n      position:absolute;\n      left:0; right:0;\n      top: 45%;\n      text-align:center;\n      color: var(--accent);\n      font-size: clamp(28px, 4vw, 56px);\n      display:none;\n      z-index: 8;\n      pointer-events:none;\n      text-shadow: 0 0 25px rgba(0,0,0,.9);\n      letter-spacing: .06em;\n    }\n\n    #progressiveHUD.glow{\n      animation: jackpotGlow 1.2s ease-in-out infinite alternate;\n    }\n\n    @keyframes jackpotGlow{\n      from{\n        text-shadow: 0 0 12px rgba(196,164,93,.4),\n                     0 0 20px rgba(196,164,93,.3);\n      }\n      to{\n        text-shadow: 0 0 22px rgba(196,164,93,.9),\n                     0 0 45px rgba(196,164,93,.8);\n      }\n    }\n\n    .overlay-admin{\n      position:fixed; inset:0;\n      background: rgba(0,0,0,.94);\n      display:none;\n      place-items:center;\n      padding:20px;\n      z-index: 999;\n    }\n    .modal{\n      width:min(640px, 96vw);\n      background:#101010;\n      border: 2px solid var(--accent);\n      padding: 20px;\n    }\n    input, select{\n      width:100%;\n      padding:10px;\n      margin:10px 0;\n      background:#000;\n      border:1px solid rgba(255,255,255,.18);\n      color:#fff;\n    }\n    .btn{\n      width:100%;\n      padding:12px 14px;\n      background:#1a1a1a;\n      border:1px solid rgba(255,255,255,.18);\n      color:#fff;\n      cursor:pointer;\n      text-transform:uppercase;\n      letter-spacing:.08em;\n      font-weight: 800;\n    }\n    .btn.accent{ border-color: var(--accent); color: var(--accent); }\n  <\/style>\n\n\n\n  <video class=\"video-bg\" autoplay=\"\" muted=\"\" loop=\"\" playsinline=\"\">\n    <source src=\"https:\/\/assets.mixkit.co\/videos\/preview\/mixkit-smoke-filling-the-frame-on-a-black-background-48834-large.mp4\" type=\"video\/mp4\">\n  <\/video>\n\n  <div class=\"wrap\">\n    <div class=\"stage\" id=\"stage\">\n\n      <div class=\"reels-window\">\n        <div class=\"reels-container\">\n          <div class=\"reel\"><div class=\"track\" id=\"t1\"><\/div><\/div>\n          <div class=\"reel\"><div class=\"track\" id=\"t2\"><\/div><\/div>\n          <div class=\"reel\"><div class=\"track\" id=\"t3\"><\/div><\/div>\n        <\/div>\n      <\/div>\n\n      <div class=\"hudbox\" id=\"progressiveHUD\">\n        <div class=\"label\">Progressive Jackpot =<\/div>\n        <div class=\"value\">$<span id=\"progressiveVal\">50,000.00<\/span><\/div>\n      <\/div>\n\n      <div class=\"marquee\" aria-hidden=\"true\">\n        <div class=\"marquee-track\" id=\"marqueeText\">\n          HEADRUSH HIGH STAKES \u2022 WIN BIG \u2022 VIP MODE ENABLED \u2022 TRIPLE SKULL BONUS ACTIVE \u2022 PLAY RESPONSIBLY \u2022\n          HEADRUSH HIGH STAKES \u2022 WIN BIG \u2022 VIP MODE ENABLED \u2022 TRIPLE SKULL BONUS ACTIVE \u2022 PLAY RESPONSIBLY \u2022\n          HEADRUSH HIGH STAKES \u2022 WIN BIG \u2022 VIP MODE ENABLED \u2022 TRIPLE SKULL BONUS ACTIVE \u2022 PLAY RESPONSIBLY \u2022\n        <\/div>\n      <\/div>\n\n      <div class=\"hudbox\" id=\"betAmountHUD\">\n        <div class=\"label\">Amount of Bet =<\/div>\n        <div class=\"value\">$<span id=\"betAmountVal\">5.00<\/span><\/div>\n      <\/div>\n\n      <div class=\"hudbox\" id=\"creditsHUD\">\n        <div class=\"label\">Total Credits =<\/div>\n        <div class=\"value\">$<span id=\"creditsVal\">50,000.00<\/span><\/div>\n      <\/div>\n\n      <div class=\"frame\"><\/div>\n\n      <div id=\"winDisplay\">WIN!<\/div>\n\n      <span id=\"winVal\" style=\"display:none;\">0.00<\/span>\n\n      <div class=\"hit spin\" id=\"spinBtn\" aria-label=\"Spin\"><\/div>\n      <div class=\"hit maxbet\" id=\"maxBetBtn\" aria-label=\"Max Bet\"><\/div>\n      <div class=\"hit auto\" id=\"autoBtn\" aria-label=\"Auto\"><\/div>\n      <div class=\"hit stop\" id=\"stopBtn\" aria-label=\"Stop\"><\/div>\n\n      <div class=\"hit vault\" id=\"vaultBtn\" aria-label=\"Vault\"><\/div>\n\n      <div class=\"hit betminus\" id=\"betMinusBtn\" aria-label=\"Decrease Bet\"><\/div>\n      <div class=\"hit betplus\" id=\"betPlusBtn\" aria-label=\"Increase Bet\"><\/div>\n      <div class=\"hit betreset\" id=\"betResetBtn\" aria-label=\"Reset Bet\"><\/div>\n\n    <\/div>\n  <\/div>\n\n  <div class=\"overlay-admin\" id=\"vaultOverlay\">\n    <div class=\"modal\">\n      <h2 style=\"margin:0 0 10px; color:var(--accent);\">CLUBHOUSE OVERRIDE<\/h2>\n\n      <label>Win Ratio per Line (%)<\/label><input id=\"winInput\" type=\"number\" value=\"10\">\n      <label>System Max Bet ($)<\/label><input id=\"maxInput\" type=\"number\" value=\"100\">\n      <label>Stash Balance<\/label><input id=\"balInput\" type=\"number\" value=\"50000\">\n\n      <label>Flow Mode<\/label>\n      <select id=\"flowType\">\n        <option value=\"normal\">Standard Luck<\/option>\n        <option value=\"win\">Force All Lines (Big Win)<\/option>\n        <option value=\"lose\">Lock Down (No Wins)<\/option>\n      <\/select>\n\n      <button class=\"btn accent\" id=\"saveBtn\">SYNC DATABASE<\/button>\n    <\/div>\n  <\/div>\n\n  <script>\n    const PASS = \"2469\";\n\n    let credits = 50000;\n    let winChance = 10;\n    let maxBetAmt = 100;\n\n    const BET_DEFAULT = 5;\n    const BET_STEP = 1;\n    let currentWager = BET_DEFAULT;\n\n    let isSpinning = false;\n    let currentFlow = \"normal\";\n    let autoMode = false;\n    let stopRequested = false;\n\n    let progressiveJackpot = 50000;\n    const progressiveIncrement = 2.5;\n\n    const JACKPOT_TRIGGER_CHANCE = 0.35; \/\/ %\n    const JACKPOT_BASE_RESET = 50000;\n\n    let jackpotAnimating = false;\n\n    const CELL_H = parseInt(getComputedStyle(document.documentElement).getPropertyValue('--cellH')) || 120;\n\n    const SYMBOLS = [\n      { key:\"SKULL\", img:\"https:\/\/grossenoix.com\/wp-content\/uploads\/2026\/03\/skull_icon.jpg\", mult: 50 },\n      { key:\"LOGO\",  img:\"https:\/\/grossenoix.com\/wp-content\/uploads\/2026\/03\/HR_bulletlogo.jpg\", mult: 25 },\n      { key:\"PATCH\", img:\"https:\/\/grossenoix.com\/wp-content\/uploads\/2026\/03\/brass_icon.jpg\",   mult: 10 },\n      { key:\"A\",     img:\"https:\/\/grossenoix.com\/wp-content\/uploads\/2026\/03\/13_icon.jpg\",        mult: 5 }\n    ];\n\n    function setCredits(val){\n      document.getElementById('creditsVal').textContent =\n        Number(val).toLocaleString(undefined,{minimumFractionDigits:2});\n    }\n\n    function setBetAmount(val){\n      document.getElementById('betAmountVal').textContent = Number(val).toFixed(2);\n    }\n\n    function setProgressiveInstant(val){\n      document.getElementById('progressiveVal').textContent =\n        Number(val).toLocaleString(undefined,{minimumFractionDigits:2});\n    }\n\n    function setWin(val){\n      document.getElementById('winVal').textContent = Number(val).toFixed(2);\n    }\n\n    function flashText(msg, ms=650){\n      const wd = document.getElementById('winDisplay');\n      wd.textContent = msg;\n      wd.style.display = 'block';\n      setTimeout(()=> wd.style.display='none', ms);\n    }\n\n    function clamp(n, min, max){ return Math.max(min, Math.min(max, n)); }\n\n    function animateValue(from, to, duration = 900){\n      if(jackpotAnimating) return;\n      jackpotAnimating = true;\n\n      const start = performance.now();\n\n      function easeOutCubic(t){\n        return 1 - Math.pow(1 - t, 3);\n      }\n\n      function frame(now){\n        const progress = Math.min((now - start) \/ duration, 1);\n        const eased = easeOutCubic(progress);\n        const current = from + (to - from) * eased;\n\n        document.getElementById('progressiveVal').textContent =\n          current.toLocaleString(undefined,{minimumFractionDigits:2});\n\n        if(progress < 1){\n          requestAnimationFrame(frame);\n        } else {\n          jackpotAnimating = false;\n        }\n      }\n\n      requestAnimationFrame(frame);\n    }\n\n    function checkJackpotThreshold(){\n      const hud = document.getElementById('progressiveHUD');\n      if(progressiveJackpot >= 100000){\n        hud.classList.add('glow');\n      } else {\n        hud.classList.remove('glow');\n      }\n    }\n\n    function triggerJackpot(){\n      const jackpotAmount = progressiveJackpot;\n\n      credits += jackpotAmount;\n      setCredits(credits);\n\n      flashText(\"\ud83d\udc80 JACKPOT \ud83d\udc80\", 1800);\n\n      progressiveJackpot = JACKPOT_BASE_RESET;\n      animateValue(jackpotAmount, progressiveJackpot, 1200);\n\n      checkJackpotThreshold();\n      return jackpotAmount;\n    }\n\n    function changeBet(delta){\n      if(isSpinning) return;\n      currentWager = clamp(currentWager + delta, 1, maxBetAmt);\n      setBetAmount(currentWager);\n      flashText(`BET: $${currentWager.toFixed(2)}`, 450);\n    }\n\n    function resetBet(){\n      if(isSpinning) return;\n      currentWager = clamp(BET_DEFAULT, 1, maxBetAmt);\n      setBetAmount(currentWager);\n      flashText(`BET RESET`, 450);\n    }\n\n    function checkAuth(){\n      if(prompt(\"ACCESS KEY:\") === PASS){\n        document.getElementById('vaultOverlay').style.display = 'grid';\n        document.getElementById('winInput').value = winChance;\n        document.getElementById('maxInput').value = maxBetAmt;\n        document.getElementById('balInput').value = credits;\n        document.getElementById('flowType').value = currentFlow;\n      }\n    }\n\n    function saveAdmin(){\n      winChance = parseFloat(document.getElementById('winInput').value);\n      maxBetAmt = parseFloat(document.getElementById('maxInput').value);\n      credits   = parseFloat(document.getElementById('balInput').value);\n      currentFlow = document.getElementById('flowType').value;\n\n      currentWager = clamp(currentWager, 1, maxBetAmt);\n      setBetAmount(currentWager);\n      setCredits(credits);\n\n      document.getElementById('vaultOverlay').style.display = 'none';\n      flashText(\"SYNCED\", 500);\n    }\n\n    function maxBet(){\n      if(isSpinning) return;\n      currentWager = maxBetAmt;\n      setBetAmount(currentWager);\n      flashText(`MAX BET`, 600);\n    }\n\n    function toggleAuto(){\n      autoMode = !autoMode;\n      flashText(autoMode ? \"AUTO: ON\" : \"AUTO: OFF\", 600);\n      if(autoMode && !isSpinning) startSpin();\n    }\n\n    function stopAuto(){\n      stopRequested = true;\n      autoMode = false;\n      flashText(\"STOP\", 450);\n    }\n\n    async function startSpin(){\n      if(isSpinning) return;\n      if(credits < currentWager) { flashText(\"NO CREDIT\", 700); return; }\n\n      isSpinning = true;\n      stopRequested = false;\n\n      credits -= currentWager;\n      setCredits(credits);\n\n      setWin(0);\n\n      const lineWins = [false,false,false];\n      for(let r=0;r<3;r++){\n        let chance = winChance;\n        if(currentFlow === \"win\") chance = 100;\n        if(currentFlow === \"lose\") chance = 0;\n        if(Math.random()*100 < chance) lineWins[r] = true;\n      }\n\n      const results = [[],[],[]];\n      for(let c=0;c<3;c++){\n        for(let r=0;r<3;r++){\n          results[c][r] = lineWins[r] ? SYMBOLS[0] : SYMBOLS[Math.floor(Math.random()*SYMBOLS.length)];\n        }\n      }\n\n      const tracks = [1,2,3].map(i => document.getElementById('t'+i));\n      await Promise.all(tracks.map((t, i) => rollReel(t, results[i], i)));\n\n      let winTotal = 0;\n      lineWins.forEach((win)=>{\n        if(win) winTotal += currentWager * SYMBOLS[0].mult;\n      });\n\n      let jackpotWin = 0;\n      if(Math.random() * 100 < JACKPOT_TRIGGER_CHANCE){\n        jackpotWin = triggerJackpot();\n      }\n\n      if(winTotal === 0 &#038;&#038; jackpotWin === 0){\n        const previous = progressiveJackpot;\n        progressiveJackpot += progressiveIncrement;\n        animateValue(previous, progressiveJackpot, 650);\n        checkJackpotThreshold();\n      }\n\n      if(winTotal > 0){\n        credits += winTotal;\n        setCredits(credits);\n        setWin(winTotal);\n        flashText(`WIN: $${Math.round(winTotal).toLocaleString()}`, 950);\n      } else if(jackpotWin === 0){\n        setWin(0);\n      }\n\n      isSpinning = false;\n\n      if(autoMode && !stopRequested){\n        setTimeout(()=> startSpin(), 350);\n      }\n    }\n\n    async function rollReel(track, results, delay){\n      const spins = 30 + (delay*6);\n      let html = '';\n\n      for(let i=0;i<spins;i++){\n        const s = SYMBOLS[Math.floor(Math.random()*SYMBOLS.length)];\n        html += `<div class=\"cell\"><img decoding=\"async\" class=\"sym\" src=\"${s.img}\" alt=\"\"><\/div>`;\n      }\n      results.forEach(s=>{\n        html += `<div class=\"cell\"><img decoding=\"async\" class=\"sym\" src=\"${s.img}\" alt=\"\"><\/div>`;\n      });\n\n      track.innerHTML = html;\n      track.style.transition = 'none';\n      track.style.transform = 'translateY(0)';\n      track.getBoundingClientRect();\n\n      track.style.transition = `transform ${1500 + (delay*220)}ms cubic-bezier(.45,.05,.55,.95)`;\n      track.style.transform = `translateY(-${spins * CELL_H}px)`;\n\n      return new Promise(r => setTimeout(r, 1750 + (delay*220)));\n    }\n\n    window.onload = ()=>{\n      [1,2,3].forEach(i=>{\n        document.getElementById('t'+i).innerHTML =\n          `<div class=\"cell\"><img decoding=\"async\" class=\"sym\" src=\"${SYMBOLS[1].img}\" alt=\"\"><\/div>\n           <div class=\"cell\"><\/div>\n           <div class=\"cell\"><\/div>`;\n      });\n\n      setBetAmount(currentWager);\n      setCredits(credits);\n      setProgressiveInstant(progressiveJackpot);\n      checkJackpotThreshold();\n      setWin(0);\n    };\n\n    document.getElementById('spinBtn').addEventListener('click', startSpin);\n    document.getElementById('maxBetBtn').addEventListener('click', maxBet);\n    document.getElementById('autoBtn').addEventListener('click', toggleAuto);\n    document.getElementById('stopBtn').addEventListener('click', stopAuto);\n    document.getElementById('vaultBtn').addEventListener('click', checkAuth);\n\n    document.getElementById('betMinusBtn').addEventListener('click', ()=> changeBet(-BET_STEP));\n    document.getElementById('betPlusBtn').addEventListener('click', ()=> changeBet(+BET_STEP));\n    document.getElementById('betResetBtn').addEventListener('click', resetBet);\n\n    document.getElementById('saveBtn').addEventListener('click', saveAdmin);\n  <\/script>\n\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-blank-landingpage.php","meta":{"footnotes":""},"class_list":["post-429","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/grossenoix.com\/index.php\/wp-json\/wp\/v2\/pages\/429","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/grossenoix.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/grossenoix.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/grossenoix.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/grossenoix.com\/index.php\/wp-json\/wp\/v2\/comments?post=429"}],"version-history":[{"count":17,"href":"https:\/\/grossenoix.com\/index.php\/wp-json\/wp\/v2\/pages\/429\/revisions"}],"predecessor-version":[{"id":454,"href":"https:\/\/grossenoix.com\/index.php\/wp-json\/wp\/v2\/pages\/429\/revisions\/454"}],"wp:attachment":[{"href":"https:\/\/grossenoix.com\/index.php\/wp-json\/wp\/v2\/media?parent=429"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}