{
  "version": 3,
  "sources": ["/cdn/shop/t/67/assets/hbn-wait-game.js?hbn_build=20260909-02"],
  "sourcesContent": ["(() => {\r\n  'use strict';\r\n\r\n  const STORAGE_KEYS = {\r\n    match3: 'hbn_wait_game_best_v1',\r\n    bubble: 'hbn_bubble_shooter_best_v1'\r\n  };\r\n  const MOBILE_QUERY = '(max-width: 749px)';\r\n  const ROWS = 7;\r\n  const NORMAL_TYPES_PER_GAME = 5;\r\n  const SUCCESSFUL_MATCHES_BEFORE_BOOK = 5;\r\n  const SWIPE_THRESHOLD_PX = 18;\r\n  const HINT_DELAY_MS = 9000;\r\n  const INVALID_MOVES_BEFORE_HINT = 3;\r\n  const HINT_VISIBLE_MS = 3800;\r\n  const BUBBLE_COLS = 8;\r\n  const BUBBLE_INITIAL_ROWS = 5;\r\n  const BUBBLE_MAX_ROWS = 9;\r\n  const BUBBLE_SHOTS_BEFORE_SPECIAL = 4;\r\n  const BUBBLE_MISSES_BEFORE_ROW = 5;\r\n  const BUBBLE_WIDTH = 680;\r\n  const BUBBLE_HEIGHT = 720;\r\n  const BUBBLE_RADIUS = 40;\r\n  const BUBBLE_ROW_STEP = 69;\r\n\r\n  const SCORE_BY_MATCH_SIZE = {\r\n    3: 30,\r\n    4: 80,\r\n    5: 150,\r\n    6: 240\r\n  };\r\n\r\n  const SPECIAL_BONUS = {\r\n    star: 80,\r\n    crystal: 80,\r\n    wreath: 120,\r\n    crown: 180,\r\n    globe: 220,\r\n    book: 300\r\n  };\r\n\r\n  const SPECIAL_GUIDE_ITEMS = [\r\n    {\r\n      id: 'star',\r\n      name: 'Star',\r\n      unlock: '4 across',\r\n      power: 'Clears a full row'\r\n    },\r\n    {\r\n      id: 'crystal',\r\n      name: 'Crystal',\r\n      unlock: '4 down',\r\n      power: 'Clears a full column'\r\n    },\r\n    {\r\n      id: 'wreath',\r\n      name: 'Wreath',\r\n      unlock: 'Intersecting matches',\r\n      power: 'Clears a 3 \u00D7 3 area'\r\n    },\r\n    {\r\n      id: 'crown',\r\n      name: 'Crown',\r\n      unlock: '3-match in cascade \u00D72',\r\n      power: 'Clears a row and column'\r\n    },\r\n    {\r\n      id: 'globe',\r\n      name: 'Globe',\r\n      unlock: '5 in a row',\r\n      power: 'Removes all tiles of one kind'\r\n    },\r\n    {\r\n      id: 'book',\r\n      name: 'Magic book',\r\n      unlock: 'Every 5th successful match',\r\n      power: 'Clears the whole board'\r\n    }\r\n  ];\r\n\r\n  const BUBBLE_GUIDE_ITEMS = [\r\n    {\r\n      id: 'aim',\r\n      name: 'Aim and shoot',\r\n      description: 'Drag or tap to choose a direction',\r\n      assetIds: ['basket', 'dino']\r\n    },\r\n    {\r\n      id: 'match',\r\n      name: 'Connect 3 or more',\r\n      description: 'Matching items pop together',\r\n      assetIds: ['martian', 'blanket']\r\n    },\r\n    {\r\n      id: 'drop',\r\n      name: 'Drop floating groups',\r\n      description: 'Cut them loose for extra points',\r\n      assetIds: ['dragon', 'seashell', 'train']\r\n    }\r\n  ];\r\n\r\n  const clampMatchScore = length => SCORE_BY_MATCH_SIZE[Math.min(Math.max(length, 3), 6)] || 0;\r\n\r\n  class HbnBubbleShooter {\r\n    constructor(host, mount) {\r\n      this.host = host;\r\n      this.mount = mount;\r\n      this.normalAssets = host.normalAssets;\r\n      this.specialAssets = host.specialAssets;\r\n      this.activeTypes = host.chooseNormalTypes();\r\n      this.board = new Map();\r\n      this.images = new Map();\r\n      this.specialBag = [];\r\n      this.currentShot = null;\r\n      this.projectile = null;\r\n      this.particles = [];\r\n      this.aimAngle = -Math.PI / 2;\r\n      this.pointerId = null;\r\n      this.active = false;\r\n      this.paused = true;\r\n      this.misses = 0;\r\n      this.powerCharge = 0;\r\n      this.specialQueued = false;\r\n      this.frameId = null;\r\n      this.lastFrameTime = 0;\r\n      this.roundTimer = null;\r\n\r\n      this.build();\r\n      this.loadImages();\r\n      this.bindEvents();\r\n      this.startRound(false);\r\n    }\r\n\r\n    text(key, fallback = '') {\r\n      return this.host.text(key, fallback);\r\n    }\r\n\r\n    build() {\r\n      this.element = document.createElement('div');\r\n      this.element.className = 'hbn-bubble-shooter';\r\n      this.element.hidden = true;\r\n\r\n      const hud = document.createElement('div');\r\n      hud.className = 'hbn-bubble-hud';\r\n\r\n      const next = document.createElement('div');\r\n      next.className = 'hbn-bubble-hud-card hbn-bubble-next';\r\n      const nextLabel = document.createElement('span');\r\n      nextLabel.className = 'hbn-bubble-hud-label';\r\n      nextLabel.textContent = this.text('bubbleNext', 'Next shot');\r\n      this.nextImage = document.createElement('img');\r\n      this.nextImage.className = 'hbn-bubble-next-image';\r\n      this.nextImage.alt = '';\r\n      next.append(nextLabel, this.nextImage);\r\n\r\n      const charge = document.createElement('div');\r\n      charge.className = 'hbn-bubble-hud-card';\r\n      const chargeLabel = document.createElement('span');\r\n      chargeLabel.className = 'hbn-bubble-hud-label';\r\n      chargeLabel.textContent = this.text('bubblePower', 'Magic charge');\r\n      this.chargeDots = document.createElement('span');\r\n      this.chargeDots.className = 'hbn-bubble-meter';\r\n      charge.append(chargeLabel, this.chargeDots);\r\n\r\n      const misses = document.createElement('div');\r\n      misses.className = 'hbn-bubble-hud-card';\r\n      const missesLabel = document.createElement('span');\r\n      missesLabel.className = 'hbn-bubble-hud-label';\r\n      missesLabel.textContent = this.text('bubbleMisses', 'Misses');\r\n      this.missDots = document.createElement('span');\r\n      this.missDots.className = 'hbn-bubble-meter is-misses';\r\n      misses.append(missesLabel, this.missDots);\r\n\r\n      hud.append(next, charge, misses);\r\n\r\n      const canvasWrap = document.createElement('div');\r\n      canvasWrap.className = 'hbn-bubble-canvas-wrap';\r\n      this.canvas = document.createElement('canvas');\r\n      this.canvas.className = 'hbn-bubble-canvas';\r\n      this.canvas.width = BUBBLE_WIDTH;\r\n      this.canvas.height = BUBBLE_HEIGHT;\r\n      this.canvas.tabIndex = 0;\r\n      this.canvas.setAttribute('role', 'application');\r\n      this.canvas.setAttribute(\r\n        'aria-label',\r\n        this.text('bubbleBoardLabel', 'Bubble Shooter board. Aim with the pointer or arrow keys and press Space to shoot.')\r\n      );\r\n      this.ctx = this.canvas.getContext('2d');\r\n      canvasWrap.appendChild(this.canvas);\r\n\r\n      const hint = document.createElement('p');\r\n      hint.className = 'hbn-bubble-control-hint';\r\n      hint.textContent = this.text('bubbleControls', 'Drag or tap to aim. Use arrow keys and Space on a keyboard.');\r\n\r\n      this.element.append(hud, canvasWrap, hint);\r\n      this.mount.insertBefore(this.element, this.host.gameFooterElement || null);\r\n    }\r\n\r\n    loadImages() {\r\n      const assets = [\r\n        ...this.normalAssets,\r\n        ...Object.entries(this.specialAssets).map(([id, asset]) => ({ id, ...asset }))\r\n      ];\r\n\r\n      assets.forEach(asset => {\r\n        if (!asset?.src || this.images.has(asset.src)) return;\r\n        const image = new Image();\r\n        image.decoding = 'async';\r\n        image.onload = () => this.draw();\r\n        image.src = asset.src;\r\n        this.images.set(asset.src, image);\r\n      });\r\n    }\r\n\r\n    bindEvents() {\r\n      this.canvas.addEventListener('pointerdown', event => this.onPointerDown(event));\r\n      this.canvas.addEventListener('pointermove', event => this.onPointerMove(event));\r\n      this.canvas.addEventListener('pointerup', event => this.onPointerUp(event));\r\n      this.canvas.addEventListener('pointercancel', event => this.onPointerCancel(event));\r\n      this.canvas.addEventListener('keydown', event => this.onKeydown(event));\r\n      this.canvas.addEventListener('contextmenu', event => event.preventDefault());\r\n    }\r\n\r\n    setActive(isActive) {\r\n      this.active = Boolean(isActive);\r\n      this.element.hidden = !this.active;\r\n      if (!this.active) {\r\n        this.pointerId = null;\r\n        this.pause();\r\n        return;\r\n      }\r\n\r\n      this.updateHud();\r\n      this.draw();\r\n    }\r\n\r\n    pause() {\r\n      this.paused = true;\r\n      if (this.frameId !== null) window.cancelAnimationFrame(this.frameId);\r\n      this.frameId = null;\r\n      this.lastFrameTime = 0;\r\n    }\r\n\r\n    resume() {\r\n      if (!this.active) return;\r\n      this.paused = false;\r\n      this.draw();\r\n      if (this.projectile || this.particles.length) this.requestFrame();\r\n    }\r\n\r\n    focus() {\r\n      this.canvas.focus({ preventScroll: true });\r\n    }\r\n\r\n    startRound(rotateTypes = true) {\r\n      window.clearTimeout(this.roundTimer);\r\n      this.roundTimer = null;\r\n      if (rotateTypes) this.activeTypes = this.host.chooseNormalTypes(this.activeTypes);\r\n      this.board.clear();\r\n      this.projectile = null;\r\n      this.particles = [];\r\n      this.misses = 0;\r\n\r\n      for (let row = 0; row < BUBBLE_INITIAL_ROWS; row += 1) {\r\n        for (let col = 0; col < BUBBLE_COLS; col += 1) {\r\n          const source = this.host.pick(this.activeTypes);\r\n          this.board.set(this.key(row, col), this.normalTile(row, col, source.id));\r\n        }\r\n      }\r\n\r\n      this.currentShot = this.chooseNextShot();\r\n      this.updateHud();\r\n      this.draw();\r\n    }\r\n\r\n    scheduleNewRound(rotateTypes = true) {\r\n      window.clearTimeout(this.roundTimer);\r\n      this.host.showMessage(this.text('bubbleNewRound', 'A new wave of magic!'));\r\n      this.roundTimer = window.setTimeout(() => {\r\n        this.roundTimer = null;\r\n        this.startRound(rotateTypes);\r\n      }, this.host.reducedMotion ? 80 : 520);\r\n    }\r\n\r\n    normalTile(row, col, type) {\r\n      return { row, col, kind: 'normal', type };\r\n    }\r\n\r\n    specialTile(row, col, special) {\r\n      return { row, col, kind: 'special', special };\r\n    }\r\n\r\n    chooseNextShot() {\r\n      if (this.specialQueued) {\r\n        this.specialQueued = false;\r\n        const available = Object.keys(this.specialAssets).filter(id => this.specialAssets[id]?.src);\r\n        if (!this.specialBag.length) this.specialBag = this.host.shuffle([...available]);\r\n        const special = this.specialBag.shift();\r\n        if (special) return { kind: 'special', special };\r\n      }\r\n\r\n      const typesOnBoard = new Set(\r\n        [...this.board.values()].filter(tile => tile.kind === 'normal').map(tile => tile.type)\r\n      );\r\n      const candidates = this.activeTypes.filter(asset => typesOnBoard.has(asset.id));\r\n      const source = this.host.pick(candidates.length ? candidates : this.activeTypes);\r\n      return { kind: 'normal', type: source?.id || this.activeTypes[0]?.id };\r\n    }\r\n\r\n    updateHud() {\r\n      const asset = this.assetFor(this.currentShot);\r\n      if (this.nextImage) {\r\n        this.nextImage.src = asset?.src || '';\r\n        this.nextImage.classList.toggle('is-special', this.currentShot?.kind === 'special');\r\n      }\r\n\r\n      this.renderMeter(this.chargeDots, BUBBLE_SHOTS_BEFORE_SPECIAL, this.powerCharge);\r\n      this.renderMeter(this.missDots, BUBBLE_MISSES_BEFORE_ROW, this.misses);\r\n    }\r\n\r\n    renderMeter(container, total, filled) {\r\n      if (!container) return;\r\n      container.innerHTML = '';\r\n      for (let index = 0; index < total; index += 1) {\r\n        const dot = document.createElement('i');\r\n        if (index < filled) dot.className = 'is-filled';\r\n        container.appendChild(dot);\r\n      }\r\n    }\r\n\r\n    assetFor(tile) {\r\n      if (!tile) return null;\r\n      if (tile.kind === 'special') return this.specialAssets[tile.special] || null;\r\n      return this.normalAssets.find(asset => asset.id === tile.type) || null;\r\n    }\r\n\r\n    key(row, col) {\r\n      return `${row}:${col}`;\r\n    }\r\n\r\n    centerFor(row, col) {\r\n      return {\r\n        x: BUBBLE_RADIUS + (col * BUBBLE_RADIUS * 2) + (row % 2 ? BUBBLE_RADIUS : 0),\r\n        y: BUBBLE_RADIUS + (row * BUBBLE_ROW_STEP)\r\n      };\r\n    }\r\n\r\n    shooterOrigin() {\r\n      return { x: BUBBLE_WIDTH / 2, y: BUBBLE_HEIGHT - (BUBBLE_RADIUS * 1.18) };\r\n    }\r\n\r\n    onPointerDown(event) {\r\n      if (!this.canInteract() || event.button > 0) return;\r\n      event.preventDefault();\r\n      this.host.registerActivity();\r\n      this.pointerId = event.pointerId;\r\n      this.updateAim(event);\r\n      try {\r\n        this.canvas.setPointerCapture(event.pointerId);\r\n      } catch (_) {\r\n        // Tap controls still work when pointer capture is unavailable.\r\n      }\r\n    }\r\n\r\n    onPointerMove(event) {\r\n      if (!this.canInteract()) return;\r\n      if (this.pointerId === event.pointerId || event.pointerType === 'mouse') {\r\n        this.updateAim(event);\r\n      }\r\n    }\r\n\r\n    onPointerUp(event) {\r\n      if (this.pointerId !== event.pointerId) return;\r\n      event.preventDefault();\r\n      this.updateAim(event);\r\n      this.pointerId = null;\r\n      try {\r\n        this.canvas.releasePointerCapture(event.pointerId);\r\n      } catch (_) {\r\n        // The browser may already have released the pointer.\r\n      }\r\n      this.shoot();\r\n    }\r\n\r\n    onPointerCancel(event) {\r\n      if (this.pointerId === event.pointerId) this.pointerId = null;\r\n    }\r\n\r\n    onKeydown(event) {\r\n      if (!this.canInteract()) return;\r\n      if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\r\n        event.preventDefault();\r\n        this.host.registerActivity();\r\n        const direction = event.key === 'ArrowLeft' ? -1 : 1;\r\n        this.aimAngle = this.clampAngle(this.aimAngle + (direction * 0.075));\r\n        this.draw();\r\n        return;\r\n      }\r\n\r\n      if (event.key === ' ' || event.key === 'Enter') {\r\n        event.preventDefault();\r\n        this.host.registerActivity();\r\n        this.shoot();\r\n      }\r\n    }\r\n\r\n    updateAim(event) {\r\n      const rect = this.canvas.getBoundingClientRect();\r\n      if (!rect.width || !rect.height) return;\r\n      const x = ((event.clientX - rect.left) / rect.width) * BUBBLE_WIDTH;\r\n      const y = ((event.clientY - rect.top) / rect.height) * BUBBLE_HEIGHT;\r\n      const origin = this.shooterOrigin();\r\n      this.aimAngle = this.clampAngle(Math.atan2(Math.min(y, origin.y - 1) - origin.y, x - origin.x));\r\n      this.draw();\r\n    }\r\n\r\n    clampAngle(angle) {\r\n      return Math.max(-Math.PI + 0.28, Math.min(-0.28, angle));\r\n    }\r\n\r\n    canInteract() {\r\n      return this.active && !this.paused && !this.projectile && Boolean(this.currentShot);\r\n    }\r\n\r\n    shoot() {\r\n      if (!this.canInteract()) return;\r\n      const origin = this.shooterOrigin();\r\n      const speed = 760;\r\n      this.projectile = {\r\n        ...this.currentShot,\r\n        x: origin.x,\r\n        y: origin.y,\r\n        vx: Math.cos(this.aimAngle) * speed,\r\n        vy: Math.sin(this.aimAngle) * speed\r\n      };\r\n      this.currentShot = null;\r\n      this.updateHud();\r\n      this.requestFrame();\r\n    }\r\n\r\n    requestFrame() {\r\n      if (this.frameId !== null || this.paused || !this.active) return;\r\n      this.frameId = window.requestAnimationFrame(timestamp => this.onFrame(timestamp));\r\n    }\r\n\r\n    onFrame(timestamp) {\r\n      this.frameId = null;\r\n      if (this.paused || !this.active) return;\r\n      const elapsed = this.lastFrameTime ? Math.min(32, timestamp - this.lastFrameTime) : 16;\r\n      this.lastFrameTime = timestamp;\r\n\r\n      if (this.projectile) this.advanceProjectile(elapsed / 1000);\r\n      this.advanceParticles(elapsed / 1000);\r\n      this.draw();\r\n\r\n      if (this.projectile || this.particles.length) this.requestFrame();\r\n      else this.lastFrameTime = 0;\r\n    }\r\n\r\n    advanceProjectile(delta) {\r\n      const steps = 4;\r\n      const stepDelta = delta / steps;\r\n\r\n      for (let step = 0; step < steps && this.projectile; step += 1) {\r\n        const shot = this.projectile;\r\n        shot.x += shot.vx * stepDelta;\r\n        shot.y += shot.vy * stepDelta;\r\n\r\n        if (shot.x <= BUBBLE_RADIUS) {\r\n          shot.x = BUBBLE_RADIUS;\r\n          shot.vx = Math.abs(shot.vx);\r\n        } else if (shot.x >= BUBBLE_WIDTH - BUBBLE_RADIUS) {\r\n          shot.x = BUBBLE_WIDTH - BUBBLE_RADIUS;\r\n          shot.vx = -Math.abs(shot.vx);\r\n        }\r\n\r\n        const collision = this.findCollision(shot);\r\n        if (shot.y <= BUBBLE_RADIUS || collision) {\r\n          this.settleProjectile(collision);\r\n        }\r\n      }\r\n    }\r\n\r\n    findCollision(shot) {\r\n      const collisionDistance = (BUBBLE_RADIUS * 2) - 4;\r\n      return [...this.board.values()].find(tile => {\r\n        const center = this.centerFor(tile.row, tile.col);\r\n        return Math.hypot(center.x - shot.x, center.y - shot.y) <= collisionDistance;\r\n      }) || null;\r\n    }\r\n\r\n    settleProjectile(collision) {\r\n      const shot = this.projectile;\r\n      this.projectile = null;\r\n      const cell = this.findSnapCell(shot);\r\n\r\n      if (!cell) {\r\n        this.currentShot = { kind: shot.kind, type: shot.type, special: shot.special };\r\n        this.addTopRow();\r\n        this.updateHud();\r\n        return;\r\n      }\r\n\r\n      const placed = shot.kind === 'special'\r\n        ? this.specialTile(cell.row, cell.col, shot.special)\r\n        : this.normalTile(cell.row, cell.col, shot.type);\r\n      const placedKey = this.key(cell.row, cell.col);\r\n      this.board.set(placedKey, placed);\r\n\r\n      if (placed.kind === 'special') {\r\n        const targetType = collision?.kind === 'normal' ? collision.type : this.nearestNormalType(placed);\r\n        this.resolveSpecial(placedKey, targetType);\r\n      } else {\r\n        this.resolveNormalShot(placedKey);\r\n      }\r\n\r\n      if (this.roundTimer !== null) {\r\n        this.currentShot = null;\r\n      } else if (!this.board.size) {\r\n        this.currentShot = null;\r\n        this.scheduleNewRound(true);\r\n      } else {\r\n        this.currentShot = this.chooseNextShot();\r\n      }\r\n\r\n      this.updateHud();\r\n      this.draw();\r\n    }\r\n\r\n    findSnapCell(shot) {\r\n      const candidates = [];\r\n      for (let row = 0; row < BUBBLE_MAX_ROWS; row += 1) {\r\n        for (let col = 0; col < BUBBLE_COLS; col += 1) {\r\n          const key = this.key(row, col);\r\n          if (this.board.has(key)) continue;\r\n          if (row > 0 && !this.neighborKeys(row, col).some(neighbor => this.board.has(neighbor))) continue;\r\n          const center = this.centerFor(row, col);\r\n          candidates.push({ row, col, distance: Math.hypot(center.x - shot.x, center.y - shot.y) });\r\n        }\r\n      }\r\n\r\n      candidates.sort((first, second) => first.distance - second.distance);\r\n      return candidates[0] || null;\r\n    }\r\n\r\n    neighborKeys(row, col) {\r\n      const origin = this.centerFor(row, col);\r\n      const keys = [];\r\n      for (let candidateRow = Math.max(0, row - 1); candidateRow <= Math.min(BUBBLE_MAX_ROWS - 1, row + 1); candidateRow += 1) {\r\n        for (let candidateCol = Math.max(0, col - 1); candidateCol <= Math.min(BUBBLE_COLS - 1, col + 1); candidateCol += 1) {\r\n          if (candidateRow === row && candidateCol === col) continue;\r\n          const center = this.centerFor(candidateRow, candidateCol);\r\n          if (Math.hypot(center.x - origin.x, center.y - origin.y) <= (BUBBLE_RADIUS * 2.08)) {\r\n            keys.push(this.key(candidateRow, candidateCol));\r\n          }\r\n        }\r\n      }\r\n      return keys;\r\n    }\r\n\r\n    clusterFor(startKey) {\r\n      const start = this.board.get(startKey);\r\n      if (!start || start.kind !== 'normal') return [];\r\n      const visited = new Set([startKey]);\r\n      const queue = [startKey];\r\n\r\n      while (queue.length) {\r\n        const key = queue.shift();\r\n        const tile = this.board.get(key);\r\n        this.neighborKeys(tile.row, tile.col).forEach(neighborKey => {\r\n          const neighbor = this.board.get(neighborKey);\r\n          if (visited.has(neighborKey) || neighbor?.kind !== 'normal' || neighbor.type !== start.type) return;\r\n          visited.add(neighborKey);\r\n          queue.push(neighborKey);\r\n        });\r\n      }\r\n      return [...visited];\r\n    }\r\n\r\n    connectedKeys() {\r\n      const connected = new Set();\r\n      const queue = [];\r\n      this.board.forEach((tile, key) => {\r\n        if (tile.row === 0) {\r\n          connected.add(key);\r\n          queue.push(key);\r\n        }\r\n      });\r\n\r\n      while (queue.length) {\r\n        const key = queue.shift();\r\n        const tile = this.board.get(key);\r\n        if (!tile) continue;\r\n        this.neighborKeys(tile.row, tile.col).forEach(neighborKey => {\r\n          if (!this.board.has(neighborKey) || connected.has(neighborKey)) return;\r\n          connected.add(neighborKey);\r\n          queue.push(neighborKey);\r\n        });\r\n      }\r\n      return connected;\r\n    }\r\n\r\n    resolveNormalShot(placedKey) {\r\n      const cluster = this.clusterFor(placedKey);\r\n      if (cluster.length < 3) {\r\n        this.misses += 1;\r\n        if (this.misses >= BUBBLE_MISSES_BEFORE_ROW) this.addTopRow();\r\n        return;\r\n      }\r\n\r\n      this.misses = 0;\r\n      this.removeKeys(cluster, false);\r\n      const connected = this.connectedKeys();\r\n      const floating = [...this.board.keys()].filter(key => !connected.has(key));\r\n      this.removeKeys(floating, true);\r\n\r\n      const points = (cluster.length * 20) + (floating.length * 30);\r\n      this.host.updateScore(points, true, 'bubble');\r\n      this.host.showMessage(`+${points}`);\r\n      this.powerCharge += 1;\r\n      if (this.powerCharge >= BUBBLE_SHOTS_BEFORE_SPECIAL) {\r\n        this.powerCharge = 0;\r\n        this.specialQueued = true;\r\n        this.host.showMessage(this.text('bubbleSpecialReady', 'Your next shot is magical!'));\r\n      }\r\n    }\r\n\r\n    resolveSpecial(placedKey, targetType) {\r\n      const tile = this.board.get(placedKey);\r\n      if (!tile || tile.kind !== 'special') return;\r\n      const affected = this.specialEffectKeys(tile, targetType);\r\n      this.removeKeys(affected, false);\r\n      const connected = this.connectedKeys();\r\n      const floating = [...this.board.keys()].filter(key => !connected.has(key));\r\n      this.removeKeys(floating, true);\r\n\r\n      const points = (SPECIAL_BONUS[tile.special] || 80) + (affected.size * 10) + (floating.length * 30);\r\n      this.host.updateScore(points, true, 'bubble');\r\n      this.host.showMessage(`+${points}`);\r\n      this.misses = 0;\r\n\r\n      // The empty-board transition rotates the five active story items once.\r\n      // Keeping that responsibility in startRound avoids a double rotation after the book.\r\n    }\r\n\r\n    specialEffectKeys(tile, targetType) {\r\n      const affected = new Set([this.key(tile.row, tile.col)]);\r\n      const origin = this.centerFor(tile.row, tile.col);\r\n\r\n      this.board.forEach((candidate, key) => {\r\n        const center = this.centerFor(candidate.row, candidate.col);\r\n        if (tile.special === 'star' && candidate.row === tile.row) affected.add(key);\r\n        if (tile.special === 'crystal' && Math.abs(center.x - origin.x) <= BUBBLE_RADIUS * 0.72) affected.add(key);\r\n        if (tile.special === 'wreath' && Math.hypot(center.x - origin.x, center.y - origin.y) <= BUBBLE_RADIUS * 3.25) affected.add(key);\r\n        if (tile.special === 'crown' && (candidate.row === tile.row || Math.abs(center.x - origin.x) <= BUBBLE_RADIUS * 0.72)) affected.add(key);\r\n        if (tile.special === 'globe' && candidate.kind === 'normal' && candidate.type === targetType) affected.add(key);\r\n        if (tile.special === 'book') affected.add(key);\r\n      });\r\n      return affected;\r\n    }\r\n\r\n    nearestNormalType(tile) {\r\n      const origin = this.centerFor(tile.row, tile.col);\r\n      const normals = [...this.board.values()].filter(candidate => candidate.kind === 'normal');\r\n      normals.sort((first, second) => {\r\n        const firstCenter = this.centerFor(first.row, first.col);\r\n        const secondCenter = this.centerFor(second.row, second.col);\r\n        return Math.hypot(firstCenter.x - origin.x, firstCenter.y - origin.y)\r\n          - Math.hypot(secondCenter.x - origin.x, secondCenter.y - origin.y);\r\n      });\r\n      return normals[0]?.type || this.activeTypes[0]?.id;\r\n    }\r\n\r\n    removeKeys(keys, falling) {\r\n      keys.forEach(key => {\r\n        const tile = this.board.get(key);\r\n        if (!tile) return;\r\n        const center = this.centerFor(tile.row, tile.col);\r\n        this.particles.push({\r\n          ...tile,\r\n          x: center.x,\r\n          y: center.y,\r\n          alpha: 1,\r\n          scale: 1,\r\n          vy: falling ? 120 : 0,\r\n          falling\r\n        });\r\n        this.board.delete(key);\r\n      });\r\n      if (this.particles.length) this.requestFrame();\r\n    }\r\n\r\n    addTopRow() {\r\n      this.misses = 0;\r\n      const shifted = new Map();\r\n      let reachedBottom = false;\r\n      this.board.forEach(tile => {\r\n        const row = tile.row + 1;\r\n        if (row >= BUBBLE_MAX_ROWS) reachedBottom = true;\r\n        const moved = { ...tile, row };\r\n        shifted.set(this.key(row, tile.col), moved);\r\n      });\r\n\r\n      if (reachedBottom) {\r\n        this.board.clear();\r\n        this.currentShot = null;\r\n        this.scheduleNewRound(true);\r\n        return;\r\n      }\r\n\r\n      this.board = shifted;\r\n      for (let col = 0; col < BUBBLE_COLS; col += 1) {\r\n        const source = this.host.pick(this.activeTypes);\r\n        this.board.set(this.key(0, col), this.normalTile(0, col, source.id));\r\n      }\r\n      this.host.showMessage(this.text('bubbleNewRow', 'The magic is moving closer...'));\r\n    }\r\n\r\n    advanceParticles(delta) {\r\n      this.particles.forEach(particle => {\r\n        if (particle.falling) {\r\n          particle.vy += 760 * delta;\r\n          particle.y += particle.vy * delta;\r\n          particle.alpha -= 0.72 * delta;\r\n        } else {\r\n          particle.scale = Math.max(0, particle.scale - (3.4 * delta));\r\n          particle.alpha -= 2.7 * delta;\r\n        }\r\n      });\r\n      this.particles = this.particles.filter(particle => particle.alpha > 0 && particle.y < BUBBLE_HEIGHT + 100);\r\n    }\r\n\r\n    draw() {\r\n      if (!this.ctx) return;\r\n      const ctx = this.ctx;\r\n      ctx.clearRect(0, 0, BUBBLE_WIDTH, BUBBLE_HEIGHT);\r\n\r\n      const background = ctx.createLinearGradient(0, 0, 0, BUBBLE_HEIGHT);\r\n      background.addColorStop(0, 'rgba(255,255,255,0.88)');\r\n      background.addColorStop(0.62, 'rgba(244,231,255,0.72)');\r\n      background.addColorStop(1, 'rgba(224,211,248,0.92)');\r\n      ctx.fillStyle = background;\r\n      ctx.fillRect(0, 0, BUBBLE_WIDTH, BUBBLE_HEIGHT);\r\n\r\n      const dangerY = this.centerFor(BUBBLE_MAX_ROWS - 1, 0).y - (BUBBLE_ROW_STEP * 0.5);\r\n      ctx.save();\r\n      ctx.setLineDash([8, 12]);\r\n      ctx.strokeStyle = 'rgba(151, 84, 198, 0.22)';\r\n      ctx.lineWidth = 2;\r\n      ctx.beginPath();\r\n      ctx.moveTo(18, dangerY);\r\n      ctx.lineTo(BUBBLE_WIDTH - 18, dangerY);\r\n      ctx.stroke();\r\n      ctx.restore();\r\n\r\n      this.board.forEach(tile => {\r\n        const center = this.centerFor(tile.row, tile.col);\r\n        this.drawBubble(tile, center.x, center.y);\r\n      });\r\n\r\n      this.particles.forEach(particle => {\r\n        this.drawBubble(particle, particle.x, particle.y, particle.scale, particle.alpha);\r\n      });\r\n\r\n      if (this.projectile) {\r\n        this.drawBubble(this.projectile, this.projectile.x, this.projectile.y, 1, 1, true);\r\n      } else if (this.currentShot) {\r\n        this.drawAimGuide();\r\n        const origin = this.shooterOrigin();\r\n        this.drawBubble(this.currentShot, origin.x, origin.y, 1, 1, true);\r\n      }\r\n    }\r\n\r\n    drawAimGuide() {\r\n      const ctx = this.ctx;\r\n      const origin = this.shooterOrigin();\r\n      const length = 215;\r\n      ctx.save();\r\n      ctx.setLineDash([4, 11]);\r\n      ctx.lineCap = 'round';\r\n      ctx.lineWidth = 5;\r\n      ctx.strokeStyle = 'rgba(116, 62, 157, 0.46)';\r\n      ctx.beginPath();\r\n      ctx.moveTo(\r\n        origin.x + (Math.cos(this.aimAngle) * (BUBBLE_RADIUS + 8)),\r\n        origin.y + (Math.sin(this.aimAngle) * (BUBBLE_RADIUS + 8))\r\n      );\r\n      ctx.lineTo(\r\n        origin.x + (Math.cos(this.aimAngle) * length),\r\n        origin.y + (Math.sin(this.aimAngle) * length)\r\n      );\r\n      ctx.stroke();\r\n      ctx.restore();\r\n    }\r\n\r\n    drawBubble(tile, x, y, scale = 1, alpha = 1, emphasized = false) {\r\n      const ctx = this.ctx;\r\n      const asset = this.assetFor(tile);\r\n      const image = asset?.src ? this.images.get(asset.src) : null;\r\n      const radius = BUBBLE_RADIUS * scale;\r\n      ctx.save();\r\n      ctx.globalAlpha = Math.max(0, alpha);\r\n      ctx.translate(x, y);\r\n\r\n      if (tile.kind === 'special' || emphasized) {\r\n        ctx.shadowColor = tile.kind === 'special' ? 'rgba(241, 177, 45, 0.86)' : 'rgba(147, 79, 205, 0.34)';\r\n        ctx.shadowBlur = tile.kind === 'special' ? 22 : 10;\r\n      } else {\r\n        ctx.shadowColor = 'rgba(69, 33, 93, 0.16)';\r\n        ctx.shadowBlur = 8;\r\n      }\r\n\r\n      const fill = ctx.createRadialGradient(-radius * 0.25, -radius * 0.34, radius * 0.12, 0, 0, radius);\r\n      fill.addColorStop(0, '#ffffff');\r\n      fill.addColorStop(0.68, tile.kind === 'special' ? '#fff4bd' : '#fbf7ff');\r\n      fill.addColorStop(1, tile.kind === 'special' ? '#dfc2ff' : '#e5d6f2');\r\n      ctx.fillStyle = fill;\r\n      ctx.strokeStyle = tile.kind === 'special' ? 'rgba(224, 166, 27, 0.86)' : 'rgba(113, 64, 150, 0.20)';\r\n      ctx.lineWidth = Math.max(1.5, radius * 0.045);\r\n      ctx.beginPath();\r\n      ctx.arc(0, 0, radius * 0.94, 0, Math.PI * 2);\r\n      ctx.fill();\r\n      ctx.stroke();\r\n\r\n      ctx.shadowBlur = 0;\r\n      if (image?.complete && image.naturalWidth) {\r\n        const size = radius * 1.52;\r\n        ctx.drawImage(image, -size / 2, -size / 2, size, size);\r\n      }\r\n\r\n      ctx.fillStyle = 'rgba(255,255,255,0.72)';\r\n      ctx.beginPath();\r\n      ctx.ellipse(-radius * 0.28, -radius * 0.34, radius * 0.18, radius * 0.10, -0.55, 0, Math.PI * 2);\r\n      ctx.fill();\r\n      ctx.restore();\r\n    }\r\n  }\r\n\r\n  class HbnWaitGame {\r\n    constructor(root, config) {\r\n      this.root = root;\r\n      this.config = config;\r\n      this.instanceMode = config.mode === 'standalone' ? 'standalone' : 'preview';\r\n      this.isStandalone = this.instanceMode === 'standalone';\r\n      this.normalAssets = Array.isArray(config.normalTiles)\r\n        ? config.normalTiles.filter(item => item?.id && item.id !== 'door')\r\n        : [];\r\n      this.specialAssets = config.specialTiles || {};\r\n      this.i18n = config.i18n || {};\r\n\r\n      this.progressView = this.findElement('progress', '#hbnWaitProgressView');\r\n      this.gameView = this.findElement('game', '#hbnWaitGameView');\r\n      this.openButton = this.findElement('open', '#hbnWaitGameOpen');\r\n      this.backButton = this.findElement('back', '#hbnWaitGameBack');\r\n      this.boardElement = this.findElement('board', '#hbnWaitGameBoard');\r\n      this.scoreElement = this.findElement('score', '#hbnWaitGameScore');\r\n      this.bestElement = this.findElement('best', '#hbnWaitGameBest');\r\n      this.messageElement = this.findElement('message', '#hbnWaitGameMessage');\r\n      this.liveElement = this.findElement('live', '#hbnWaitGameLive');\r\n      this.readyOverlay = this.findElement('ready', '#hbnWaitGameReadyOverlay');\r\n      this.viewPreviewButton = this.findElement('view-preview', '#hbnWaitGameViewPreview');\r\n      this.unlockGuideElement = this.findElement('unlock-guide', null);\r\n      this.powerGuideElement = this.findElement('power-guide', null);\r\n      this.titleElement = this.gameView?.querySelector('.hbn-wait-game-title') || null;\r\n      this.instructionsElement = this.gameView?.querySelector('.hbn-wait-game-instructions') || null;\r\n      this.scoresElement = this.gameView?.querySelector('.hbn-wait-game-scores') || null;\r\n      this.playAreaElement = this.gameView?.querySelector('.hbn-wait-game-play-area') || null;\r\n      this.stageElement = this.gameView?.querySelector('.hbn-wait-game-stage') || null;\r\n      this.boardWrapElement = this.boardElement?.closest('.hbn-wait-game-board-wrap') || null;\r\n      this.gameFooterElement = this.gameView?.querySelector('.hbn-wait-game-footer') || null;\r\n      this.match3Title = this.titleElement?.textContent?.trim() || this.text('match3Title', 'Match the magic');\r\n      this.match3Instructions = this.instructionsElement?.textContent?.trim()\r\n        || this.text('match3Instructions', 'Swap neighboring items to match 3 or more in a row.');\r\n\r\n      this.rows = ROWS;\r\n      this.cols = this.getColumnCount();\r\n      this.board = [];\r\n      this.selectedTypes = [];\r\n      this.scoresByGame = { match3: 0, bubble: 0 };\r\n      this.bestsByGame = {\r\n        match3: this.readBestScore('match3'),\r\n        bubble: this.readBestScore('bubble')\r\n      };\r\n      this.score = 0;\r\n      this.best = this.bestsByGame.match3;\r\n      this.activeGame = null;\r\n      this.bubbleGame = null;\r\n      this.selectedIndex = null;\r\n      this.pointer = null;\r\n      this.tileSerial = 0;\r\n      this.busy = false;\r\n      this.loading = false;\r\n      this.initialized = false;\r\n      this.assetsLoaded = false;\r\n      this.mode = 'progress';\r\n      this.generationActive = this.isStandalone;\r\n      this.stepActive = this.isStandalone || this.isStepFiveActive();\r\n      this.previewReady = false;\r\n      this.hiddenByDocument = document.hidden;\r\n      this.resizeTimer = null;\r\n      this.invalidMoveCount = 0;\r\n      this.matchesTowardBook = 0;\r\n      this.hintIndexes = new Set();\r\n      this.hintTimer = null;\r\n      this.hintVisibleTimer = null;\r\n      this.hintDelayMs = Number(config.hintDelayMs) > 0 ? Number(config.hintDelayMs) : HINT_DELAY_MS;\r\n      this.invalidMovesBeforeHint = Number(config.invalidMovesBeforeHint) > 0\r\n        ? Number(config.invalidMovesBeforeHint)\r\n        : INVALID_MOVES_BEFORE_HINT;\r\n\r\n      this.reducedMotion = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches === true;\r\n\r\n      this.setupGamePicker();\r\n      this.bindEvents();\r\n      this.updateScore(0, false, 'match3');\r\n      this.renderSpecialGuides();\r\n      this.root.classList.add('hbn-wait-game-is-ready');\r\n      if (this.openButton) this.openButton.hidden = false;\r\n    }\r\n\r\n    findElement(role, fallbackSelector) {\r\n      return this.root.querySelector(`[data-hbn-game-role=\"${role}\"]`)\r\n        || (fallbackSelector ? this.root.querySelector(fallbackSelector) : null);\r\n    }\r\n\r\n    text(key, fallback = '') {\r\n      return this.i18n[key] || fallback;\r\n    }\r\n\r\n    setupGamePicker() {\r\n      if (!this.gameView || !this.playAreaElement || !this.stageElement) return;\r\n\r\n      this.gamePickerElement = document.createElement('div');\r\n      this.gamePickerElement.className = 'hbn-game-picker';\r\n      this.gamePickerElement.hidden = true;\r\n\r\n      const choices = document.createElement('div');\r\n      choices.className = 'hbn-game-picker__choices';\r\n      choices.append(\r\n        this.createGameChoice({\r\n          id: 'match3',\r\n          name: this.text('match3Name', 'Match-3'),\r\n          description: this.text('match3ChoiceDescription', 'Swap neighboring items and build magical matches.'),\r\n          assetIds: ['basket', 'dragon', 'martian'],\r\n          bubbleStyle: false\r\n        }),\r\n        this.createGameChoice({\r\n          id: 'bubble',\r\n          name: this.text('bubbleName', 'Bubble Shooter'),\r\n          description: this.text('bubbleChoiceDescription', 'Aim, shoot and connect matching story treasures.'),\r\n          assetIds: ['blanket', 'seashell', 'train', 'dino'],\r\n          bubbleStyle: true\r\n        })\r\n      );\r\n\r\n      const pickerBack = document.createElement('button');\r\n      pickerBack.type = 'button';\r\n      pickerBack.className = 'hbn-wait-game-back hbn-game-picker__back';\r\n      pickerBack.textContent = this.backButton?.textContent?.trim()\r\n        || this.text('backToProgress', 'Back to progress');\r\n      pickerBack.addEventListener('click', () => this.showProgress());\r\n\r\n      this.gamePickerElement.append(choices, pickerBack);\r\n      this.gameView.insertBefore(this.gamePickerElement, this.playAreaElement);\r\n\r\n      if (this.gameFooterElement && this.backButton) {\r\n        this.changeGameButton = document.createElement('button');\r\n        this.changeGameButton.type = 'button';\r\n        this.changeGameButton.className = 'hbn-wait-game-back hbn-wait-game-change';\r\n        this.changeGameButton.textContent = this.text('changeGame', 'Choose another game');\r\n        this.changeGameButton.addEventListener('click', () => this.showGamePicker(true));\r\n        this.gameFooterElement.insertBefore(this.changeGameButton, this.backButton);\r\n      }\r\n\r\n      this.playAreaElement.hidden = true;\r\n    }\r\n\r\n    createGameChoice({ id, name, description, assetIds, bubbleStyle }) {\r\n      const button = document.createElement('button');\r\n      button.type = 'button';\r\n      button.className = `hbn-game-choice is-${id}`;\r\n      button.dataset.gameChoice = id;\r\n      button.addEventListener('click', () => this.selectGame(id));\r\n\r\n      const artwork = document.createElement('span');\r\n      artwork.className = `hbn-game-choice__art${bubbleStyle ? ' is-bubbles' : ''}`;\r\n      const assets = assetIds\r\n        .map(assetId => this.normalAssets.find(asset => asset.id === assetId))\r\n        .filter(Boolean)\r\n        .slice(0, bubbleStyle ? 4 : 3);\r\n\r\n      assets.forEach((asset, index) => {\r\n        const tile = document.createElement('span');\r\n        tile.className = 'hbn-game-choice__tile';\r\n        tile.style.setProperty('--hbn-choice-index', String(index));\r\n        const image = document.createElement('img');\r\n        image.src = asset.src;\r\n        image.alt = '';\r\n        image.loading = 'lazy';\r\n        image.decoding = 'async';\r\n        tile.appendChild(image);\r\n        artwork.appendChild(tile);\r\n      });\r\n\r\n      const copy = document.createElement('span');\r\n      copy.className = 'hbn-game-choice__copy';\r\n      const title = document.createElement('strong');\r\n      title.className = 'hbn-game-choice__title';\r\n      title.textContent = name;\r\n      const text = document.createElement('span');\r\n      text.className = 'hbn-game-choice__description';\r\n      text.textContent = description;\r\n      const action = document.createElement('span');\r\n      action.className = 'hbn-game-choice__action';\r\n      action.textContent = this.text('chooseGameAction', 'Play');\r\n      copy.append(title, text, action);\r\n      button.append(artwork, copy);\r\n      return button;\r\n    }\r\n\r\n    showGamePicker(shouldFocus = false) {\r\n      if (this.mode !== 'game' || this.previewReady) return;\r\n      this.activeGame = null;\r\n      this.gamePickerElement.hidden = false;\r\n      this.playAreaElement.hidden = true;\r\n      if (this.scoresElement) this.scoresElement.hidden = true;\r\n      if (this.changeGameButton) this.changeGameButton.hidden = true;\r\n      this.bubbleGame?.setActive(false);\r\n      this.setHeaderCopy(\r\n        this.text('pickerTitle', 'Choose a game'),\r\n        this.text('pickerInstructions', 'Pick a little adventure and play for as long as you like.')\r\n      );\r\n      this.root.classList.add('is-game-picker');\r\n      this.root.classList.remove('is-match3-game', 'is-bubble-game');\r\n      this.pauseGame();\r\n\r\n      if (shouldFocus) {\r\n        window.requestAnimationFrame(() => {\r\n          this.gamePickerElement?.querySelector('[data-game-choice]')?.focus({ preventScroll: true });\r\n        });\r\n      }\r\n    }\r\n\r\n    selectGame(gameId) {\r\n      if (this.mode !== 'game' || this.previewReady || !['match3', 'bubble'].includes(gameId)) return;\r\n      this.activeGame = gameId;\r\n      this.gamePickerElement.hidden = true;\r\n      this.playAreaElement.hidden = false;\r\n      if (this.scoresElement) this.scoresElement.hidden = false;\r\n      if (this.changeGameButton) this.changeGameButton.hidden = false;\r\n      this.root.classList.remove('is-game-picker', 'is-match3-game', 'is-bubble-game');\r\n      this.root.classList.add(gameId === 'bubble' ? 'is-bubble-game' : 'is-match3-game');\r\n\r\n      if (gameId === 'match3') {\r\n        if (this.boardWrapElement) this.boardWrapElement.hidden = false;\r\n        this.bubbleGame?.setActive(false);\r\n        if (!this.initialized) this.initializeBoard();\r\n        this.renderSpecialGuides();\r\n        this.setHeaderCopy(this.match3Title, this.match3Instructions);\r\n      } else {\r\n        if (this.boardWrapElement) this.boardWrapElement.hidden = true;\r\n        if (!this.bubbleGame) this.bubbleGame = new HbnBubbleShooter(this, this.stageElement);\r\n        this.bubbleGame.setActive(true);\r\n        this.renderBubbleGuides();\r\n        this.setHeaderCopy(\r\n          this.text('bubbleTitle', 'Shoot the magic'),\r\n          this.text('bubbleInstructions', 'Aim and connect 3 matching items. Floating groups fall for extra points.')\r\n        );\r\n      }\r\n\r\n      this.updateScoreDisplay(gameId);\r\n      this.syncPausedState();\r\n      window.requestAnimationFrame(() => {\r\n        if (gameId === 'bubble') this.bubbleGame?.focus();\r\n        else this.boardElement?.focus({ preventScroll: true });\r\n      });\r\n    }\r\n\r\n    setHeaderCopy(title, instructions) {\r\n      if (this.titleElement) this.titleElement.textContent = title;\r\n      if (this.instructionsElement) this.instructionsElement.textContent = instructions;\r\n    }\r\n\r\n    renderBubbleGuides() {\r\n      this.renderBubbleRulesGuide(this.unlockGuideElement);\r\n      this.renderBubblePowerGuide(this.powerGuideElement);\r\n    }\r\n\r\n    renderBubbleRulesGuide(container) {\r\n      if (!container) return;\r\n      const title = document.createElement('h5');\r\n      const intro = document.createElement('p');\r\n      const list = document.createElement('div');\r\n      container.innerHTML = '';\r\n      container.classList.remove('is-unlock', 'is-power');\r\n      container.classList.add('is-unlock', 'is-bubble-guide');\r\n      title.className = 'hbn-game-guide-title';\r\n      title.textContent = this.text('bubbleGuideTitle', 'How to play');\r\n      intro.className = 'hbn-game-guide-intro';\r\n      intro.textContent = this.text('bubbleGuideIntro', 'Aim, shoot and connect');\r\n      list.className = 'hbn-game-guide-list';\r\n\r\n      BUBBLE_GUIDE_ITEMS.forEach(item => {\r\n        const asset = item.assetIds\r\n          .map(id => this.normalAssets.find(candidate => candidate.id === id))\r\n          .find(Boolean);\r\n        if (!asset?.src) return;\r\n        const card = document.createElement('article');\r\n        const icon = document.createElement('img');\r\n        const copy = document.createElement('div');\r\n        const name = document.createElement('strong');\r\n        const description = document.createElement('span');\r\n        card.className = 'hbn-game-guide-card';\r\n        card.dataset.rule = item.id;\r\n        icon.className = 'hbn-game-guide-icon';\r\n        icon.src = asset.src;\r\n        icon.alt = '';\r\n        icon.loading = 'lazy';\r\n        copy.className = 'hbn-game-guide-copy';\r\n        name.className = 'hbn-game-guide-name';\r\n        name.textContent = this.text(`bubbleRule${this.capitalize(item.id)}Name`, item.name);\r\n        description.className = 'hbn-game-guide-description';\r\n        description.textContent = this.text(\r\n          `bubbleRule${this.capitalize(item.id)}Description`,\r\n          item.description\r\n        );\r\n        copy.append(name, description);\r\n        card.append(icon, copy);\r\n        list.appendChild(card);\r\n      });\r\n      container.append(title, intro, list);\r\n    }\r\n\r\n    renderBubblePowerGuide(container) {\r\n      if (!container) return;\r\n      const title = document.createElement('h5');\r\n      const intro = document.createElement('p');\r\n      const list = document.createElement('div');\r\n      container.innerHTML = '';\r\n      container.classList.remove('is-unlock', 'is-power');\r\n      container.classList.add('is-power', 'is-bubble-guide');\r\n      title.className = 'hbn-game-guide-title';\r\n      title.textContent = this.text('guidePowerTitle', 'Magic powers');\r\n      intro.className = 'hbn-game-guide-intro';\r\n      intro.textContent = this.text('bubblePowerGuideIntro', 'Every 4 successful shots charges a special');\r\n      list.className = 'hbn-game-guide-list';\r\n      SPECIAL_GUIDE_ITEMS.forEach(item => {\r\n        if (!this.specialAssets[item.id]?.src) return;\r\n        list.appendChild(this.createSpecialGuideCard(item, 'power'));\r\n      });\r\n      container.append(title, intro, list);\r\n    }\r\n\r\n    renderSpecialGuides() {\r\n      this.renderSpecialGuide(this.unlockGuideElement, 'unlock');\r\n      this.renderSpecialGuide(this.powerGuideElement, 'power');\r\n    }\r\n\r\n    renderSpecialGuide(container, guideType) {\r\n      if (!container) return;\r\n\r\n      const isUnlockGuide = guideType === 'unlock';\r\n      const title = document.createElement('h5');\r\n      const intro = document.createElement('p');\r\n      const list = document.createElement('div');\r\n\r\n      container.innerHTML = '';\r\n      container.classList.remove('is-unlock', 'is-power', 'is-bubble-guide');\r\n      container.classList.add(`is-${guideType}`);\r\n      title.className = 'hbn-game-guide-title';\r\n      title.textContent = this.text(\r\n        isUnlockGuide ? 'guideUnlockTitle' : 'guidePowerTitle',\r\n        isUnlockGuide ? 'How to unlock' : 'Magic powers'\r\n      );\r\n      intro.className = 'hbn-game-guide-intro';\r\n      intro.textContent = this.text(\r\n        isUnlockGuide ? 'guideUnlockIntro' : 'guidePowerIntro',\r\n        isUnlockGuide ? 'Match ordinary tiles' : 'Swap a special with a neighbor'\r\n      );\r\n      list.className = 'hbn-game-guide-list';\r\n\r\n      SPECIAL_GUIDE_ITEMS.forEach(item => {\r\n        if (!this.specialAssets[item.id]?.src) return;\r\n        list.appendChild(this.createSpecialGuideCard(item, guideType));\r\n      });\r\n\r\n      container.append(title, intro, list);\r\n    }\r\n\r\n    createSpecialGuideCard(item, guideType) {\r\n      const card = document.createElement('article');\r\n      const icon = document.createElement('img');\r\n      const copy = document.createElement('div');\r\n      const name = document.createElement('strong');\r\n      const description = document.createElement('span');\r\n      const isUnlockGuide = guideType === 'unlock';\r\n\r\n      card.className = 'hbn-game-guide-card';\r\n      card.dataset.special = item.id;\r\n      icon.className = 'hbn-game-guide-icon';\r\n      icon.src = this.specialAssets[item.id].src;\r\n      icon.alt = '';\r\n      icon.loading = 'lazy';\r\n      icon.decoding = 'async';\r\n      copy.className = 'hbn-game-guide-copy';\r\n      name.className = 'hbn-game-guide-name';\r\n      name.textContent = this.text(`special${this.capitalize(item.id)}Name`, item.name);\r\n      description.className = 'hbn-game-guide-description';\r\n      description.textContent = this.text(\r\n        `${isUnlockGuide ? 'specialUnlock' : 'specialPower'}${this.capitalize(item.id)}`,\r\n        isUnlockGuide ? item.unlock : item.power\r\n      );\r\n\r\n      copy.append(name, description);\r\n      card.append(icon, copy);\r\n      return card;\r\n    }\r\n\r\n    capitalize(value) {\r\n      return value ? value.charAt(0).toUpperCase() + value.slice(1) : '';\r\n    }\r\n\r\n    getColumnCount() {\r\n      return window.matchMedia?.(MOBILE_QUERY).matches ? 6 : 7;\r\n    }\r\n\r\n    isStepFiveActive() {\r\n      return document.querySelector('.step-content[data-step=\"5\"]')?.classList.contains('active') === true;\r\n    }\r\n\r\n    readBestScore(gameId = 'match3') {\r\n      try {\r\n        const storageKey = STORAGE_KEYS[gameId] || STORAGE_KEYS.match3;\r\n        const stored = Number.parseInt(window.sessionStorage.getItem(storageKey) || '0', 10);\r\n        return Number.isFinite(stored) && stored > 0 ? stored : 0;\r\n      } catch (_) {\r\n        return 0;\r\n      }\r\n    }\r\n\r\n    saveBestScore(gameId = 'match3') {\r\n      const best = this.bestsByGame[gameId] || 0;\r\n      try {\r\n        const storageKey = STORAGE_KEYS[gameId] || STORAGE_KEYS.match3;\r\n        window.sessionStorage.setItem(storageKey, String(best));\r\n      } catch (_) {\r\n        // sessionStorage can be unavailable in strict privacy modes.\r\n      }\r\n\r\n      window.HBNWaitGameInstances?.forEach(instance => {\r\n        if (instance === this || (instance.bestsByGame?.[gameId] || 0) >= best) return;\r\n        instance.bestsByGame[gameId] = best;\r\n        if (instance.activeGame === gameId) instance.updateScoreDisplay(gameId);\r\n      });\r\n    }\r\n\r\n    bindEvents() {\r\n      this.openButton?.addEventListener('click', () => this.openGame());\r\n      this.backButton?.addEventListener('click', () => this.showProgress());\r\n      this.viewPreviewButton?.addEventListener('click', () => {\r\n        this.root.dispatchEvent(new CustomEvent('hbn:wait-game:view-preview', { bubbles: true }));\r\n      });\r\n\r\n      this.boardElement?.addEventListener('pointerdown', event => this.onPointerDown(event));\r\n      this.boardElement?.addEventListener('pointerup', event => this.onPointerUp(event));\r\n      this.boardElement?.addEventListener('pointercancel', event => this.onPointerCancel(event));\r\n      this.boardElement?.addEventListener('keydown', event => this.onBoardKeydown(event));\r\n      this.boardElement?.addEventListener('dragstart', event => event.preventDefault());\r\n      this.boardElement?.addEventListener('contextmenu', event => event.preventDefault());\r\n\r\n      document.addEventListener('visibilitychange', () => {\r\n        this.hiddenByDocument = document.hidden;\r\n        this.syncPausedState();\r\n      });\r\n\r\n      window.addEventListener('resize', () => {\r\n        window.clearTimeout(this.resizeTimer);\r\n        this.resizeTimer = window.setTimeout(() => this.handleBreakpointChange(), 180);\r\n      }, { passive: true });\r\n    }\r\n\r\n    async openGame() {\r\n      if (this.previewReady || this.busy || this.loading) return;\r\n\r\n      if (!this.assetsLoaded) {\r\n        this.loading = true;\r\n        this.openButton?.setAttribute('aria-busy', 'true');\r\n        this.openButton?.classList.add('is-loading');\r\n\r\n        await this.preloadAssets();\r\n        if (this.previewReady) {\r\n          this.loading = false;\r\n          this.openButton?.removeAttribute('aria-busy');\r\n          this.openButton?.classList.remove('is-loading');\r\n          return;\r\n        }\r\n\r\n        this.loading = false;\r\n        this.openButton?.removeAttribute('aria-busy');\r\n        this.openButton?.classList.remove('is-loading');\r\n      }\r\n\r\n      this.mode = 'game';\r\n      if (this.progressView) this.progressView.hidden = true;\r\n      if (this.gameView) this.gameView.hidden = false;\r\n      this.root.classList.add('is-game-mode');\r\n\r\n      this.pauseLottie();\r\n      this.showGamePicker(true);\r\n    }\r\n\r\n    showProgress() {\r\n      if (this.previewReady) return;\r\n\r\n      this.mode = 'progress';\r\n      if (this.progressView) this.progressView.hidden = false;\r\n      if (this.gameView) this.gameView.hidden = true;\r\n      this.root.classList.remove('is-game-mode', 'is-game-picker', 'is-match3-game', 'is-bubble-game');\r\n      this.clearSelection();\r\n      this.bubbleGame?.setActive(false);\r\n      this.activeGame = null;\r\n      this.pauseGame();\r\n      this.resumeLottie();\r\n    }\r\n\r\n    setGenerationActive(isActive) {\r\n      this.generationActive = Boolean(isActive);\r\n      this.syncPausedState();\r\n    }\r\n\r\n    isGameOpen() {\r\n      return this.mode === 'game';\r\n    }\r\n\r\n    setStepActive(isActive) {\r\n      this.stepActive = Boolean(isActive);\r\n      this.syncPausedState();\r\n    }\r\n\r\n    notifyError() {\r\n      this.previewReady = false;\r\n      if (this.readyOverlay) this.readyOverlay.hidden = true;\r\n      this.showProgress();\r\n      this.pauseGame();\r\n    }\r\n\r\n    notifyPreviewReady() {\r\n      this.previewReady = true;\r\n      this.pauseGame();\r\n\r\n      const gameOwnsReadyState = this.mode === 'game' && this.stepActive && this.generationActive;\r\n      if (gameOwnsReadyState) {\r\n        if (this.readyOverlay) this.readyOverlay.hidden = false;\r\n        this.announce(this.text('previewReady', 'Your preview is ready'));\r\n      }\r\n\r\n      return gameOwnsReadyState;\r\n    }\r\n\r\n    syncPausedState() {\r\n      const shouldRun = (\r\n        this.mode === 'game' &&\r\n        Boolean(this.activeGame) &&\r\n        this.generationActive &&\r\n        this.stepActive &&\r\n        !this.hiddenByDocument &&\r\n        !this.previewReady\r\n      );\r\n\r\n      if (shouldRun) this.resumeGame();\r\n      else this.pauseGame();\r\n    }\r\n\r\n    pauseGame() {\r\n      this.root.classList.add('is-game-paused');\r\n      if (this.boardElement) this.boardElement.setAttribute('aria-disabled', 'true');\r\n      this.clearHintTimers();\r\n      this.hideHint();\r\n      this.bubbleGame?.pause();\r\n    }\r\n\r\n    resumeGame() {\r\n      this.root.classList.remove('is-game-paused');\r\n      if (this.activeGame === 'bubble') {\r\n        this.bubbleGame?.resume();\r\n        return;\r\n      }\r\n      if (this.activeGame === 'match3') {\r\n        if (this.boardElement) this.boardElement.setAttribute('aria-disabled', 'false');\r\n        this.scheduleHint();\r\n      }\r\n    }\r\n\r\n    clearHintTimers() {\r\n      window.clearTimeout(this.hintTimer);\r\n      window.clearTimeout(this.hintVisibleTimer);\r\n      this.hintTimer = null;\r\n      this.hintVisibleTimer = null;\r\n    }\r\n\r\n    hideHint() {\r\n      this.hintIndexes.clear();\r\n      this.boardElement?.querySelectorAll('.is-hint').forEach(cell => {\r\n        cell.classList.remove('is-hint');\r\n      });\r\n    }\r\n\r\n    registerActivity() {\r\n      this.clearHintTimers();\r\n      this.hideHint();\r\n      this.scheduleHint();\r\n    }\r\n\r\n    scheduleHint(delay = this.hintDelayMs) {\r\n      window.clearTimeout(this.hintTimer);\r\n      this.hintTimer = null;\r\n\r\n      if (!this.canInteract()) return;\r\n\r\n      this.hintTimer = window.setTimeout(() => {\r\n        this.hintTimer = null;\r\n        void this.showHint();\r\n      }, delay);\r\n    }\r\n\r\n    async showHint() {\r\n      if (!this.canInteract()) return;\r\n\r\n      const move = this.findPossibleMove();\r\n      if (!move) {\r\n        await this.shuffleBoard();\r\n        return;\r\n      }\r\n\r\n      this.clearSelection();\r\n      this.invalidMoveCount = 0;\r\n      this.hintIndexes = new Set(move);\r\n      this.renderBoard();\r\n      this.announce(this.text('hint', 'Try swapping these two items'));\r\n\r\n      window.clearTimeout(this.hintVisibleTimer);\r\n      this.hintVisibleTimer = window.setTimeout(() => {\r\n        this.hintVisibleTimer = null;\r\n        this.hideHint();\r\n        this.scheduleHint();\r\n      }, HINT_VISIBLE_MS);\r\n    }\r\n\r\n    pauseLottie() {\r\n      if (this.isStandalone) return;\r\n      const player = this.root.querySelector('#elephantLottie');\r\n      if (typeof player?.pause === 'function') player.pause();\r\n      if (typeof window.stopLottieTextSpinner === 'function') window.stopLottieTextSpinner();\r\n    }\r\n\r\n    resumeLottie() {\r\n      if (this.isStandalone) return;\r\n      if (!this.generationActive || !this.stepActive || this.previewReady) return;\r\n      const player = this.root.querySelector('#elephantLottie');\r\n      if (typeof player?.play === 'function') player.play();\r\n      if (typeof window.startLottieTextSpinner === 'function') window.startLottieTextSpinner();\r\n    }\r\n\r\n    preloadAssets() {\r\n      if (this.assetsLoaded) return Promise.resolve();\r\n\r\n      const sources = [\r\n        ...this.normalAssets.map(item => item.src),\r\n        ...Object.values(this.specialAssets).map(item => item.src)\r\n      ].filter(Boolean);\r\n\r\n      return Promise.allSettled(sources.map(src => new Promise(resolve => {\r\n        const image = new Image();\r\n        image.onload = resolve;\r\n        image.onerror = resolve;\r\n        image.src = src;\r\n      }))).then(() => {\r\n        this.assetsLoaded = true;\r\n      });\r\n    }\r\n\r\n    initializeBoard() {\r\n      this.cols = this.getColumnCount();\r\n      this.selectedTypes = this.chooseNormalTypes();\r\n      this.generatePlayableBoard();\r\n      this.initialized = true;\r\n      this.renderBoard();\r\n    }\r\n\r\n    chooseNormalTypes(previousTypes = []) {\r\n      if (this.normalAssets.length <= NORMAL_TYPES_PER_GAME) {\r\n        return this.shuffle([...this.normalAssets]);\r\n      }\r\n\r\n      const previousIds = new Set(previousTypes.map(asset => asset.id));\r\n      const enteringTypes = this.shuffle(\r\n        this.normalAssets.filter(asset => !previousIds.has(asset.id))\r\n      );\r\n      const returningTypes = this.shuffle(\r\n        this.normalAssets.filter(asset => previousIds.has(asset.id))\r\n      );\r\n      const requiredEnteringTypes = enteringTypes.slice(0, NORMAL_TYPES_PER_GAME);\r\n      const returningSlots = NORMAL_TYPES_PER_GAME - requiredEnteringTypes.length;\r\n\r\n      return this.shuffle([\r\n        ...requiredEnteringTypes,\r\n        ...returningTypes.slice(0, returningSlots)\r\n      ]);\r\n    }\r\n\r\n    rotateNormalTypes() {\r\n      this.selectedTypes = this.chooseNormalTypes(this.selectedTypes);\r\n    }\r\n\r\n    handleBreakpointChange() {\r\n      const nextColumns = this.getColumnCount();\r\n      if (!this.initialized || nextColumns === this.cols) return;\r\n\r\n      this.cols = nextColumns;\r\n      this.clearHintTimers();\r\n      this.hideHint();\r\n      this.clearSelection();\r\n      this.generatePlayableBoard();\r\n      this.renderBoard();\r\n      this.scheduleHint();\r\n    }\r\n\r\n    generatePlayableBoard() {\r\n      const maxAttempts = 120;\r\n      this.hintIndexes.clear();\r\n\r\n      for (let attempt = 0; attempt < maxAttempts; attempt += 1) {\r\n        const nextBoard = new Array(this.rows * this.cols).fill(null);\r\n\r\n        for (let row = 0; row < this.rows; row += 1) {\r\n          for (let col = 0; col < this.cols; col += 1) {\r\n            const index = this.indexFor(row, col);\r\n            const candidates = this.selectedTypes.filter(asset => {\r\n              const leftOne = col >= 1 ? nextBoard[index - 1] : null;\r\n              const leftTwo = col >= 2 ? nextBoard[index - 2] : null;\r\n              const upOne = row >= 1 ? nextBoard[index - this.cols] : null;\r\n              const upTwo = row >= 2 ? nextBoard[index - (this.cols * 2)] : null;\r\n\r\n              const makesHorizontalMatch = leftOne?.type === asset.id && leftTwo?.type === asset.id;\r\n              const makesVerticalMatch = upOne?.type === asset.id && upTwo?.type === asset.id;\r\n              return !makesHorizontalMatch && !makesVerticalMatch;\r\n            });\r\n\r\n            const source = this.pick(candidates.length ? candidates : this.selectedTypes);\r\n            nextBoard[index] = this.createNormalTile(source.id);\r\n          }\r\n        }\r\n\r\n        this.board = nextBoard;\r\n        if (this.hasPossibleMove()) return;\r\n      }\r\n\r\n      // Deterministic fallback: no starting matches and a guaranteed swap at the top-left.\r\n      const fallbackTypes = this.selectedTypes.map(asset => asset.id);\r\n      this.board = Array.from({ length: this.rows * this.cols }, (_, index) => {\r\n        const row = Math.floor(index / this.cols);\r\n        const col = index % this.cols;\r\n        return this.createNormalTile(fallbackTypes[(row + (col * 2)) % fallbackTypes.length]);\r\n      });\r\n\r\n      const firstType = fallbackTypes[0];\r\n      const secondType = fallbackTypes[1];\r\n      this.board[this.indexFor(0, 0)] = this.createNormalTile(firstType);\r\n      this.board[this.indexFor(0, 1)] = this.createNormalTile(secondType);\r\n      this.board[this.indexFor(0, 2)] = this.createNormalTile(firstType);\r\n      this.board[this.indexFor(1, 1)] = this.createNormalTile(firstType);\r\n    }\r\n\r\n    createNormalTile(type) {\r\n      this.tileSerial += 1;\r\n      return { uid: this.tileSerial, kind: 'normal', type };\r\n    }\r\n\r\n    createSpecialTile(special) {\r\n      this.tileSerial += 1;\r\n      return { uid: this.tileSerial, kind: 'special', special };\r\n    }\r\n\r\n    getAsset(tile) {\r\n      if (!tile) return null;\r\n      if (tile.kind === 'special') return this.specialAssets[tile.special] || null;\r\n      return this.normalAssets.find(item => item.id === tile.type) || null;\r\n    }\r\n\r\n    renderBoard(options = {}) {\r\n      if (!this.boardElement) return;\r\n\r\n      const matched = options.matched || new Set();\r\n      const activated = options.activated || new Set();\r\n      const newTiles = options.newTiles || new Set();\r\n      const invalid = options.invalid || new Set();\r\n      const hinted = options.hinted || this.hintIndexes;\r\n\r\n      this.boardElement.style.setProperty('--hbn-game-cols', String(this.cols));\r\n      this.boardElement.style.setProperty('--hbn-game-rows', String(this.rows));\r\n      this.boardElement.innerHTML = '';\r\n\r\n      const fragment = document.createDocumentFragment();\r\n\r\n      this.board.forEach((tile, index) => {\r\n        const cell = document.createElement('button');\r\n        const row = Math.floor(index / this.cols);\r\n        const col = index % this.cols;\r\n        const asset = this.getAsset(tile);\r\n\r\n        cell.type = 'button';\r\n        cell.className = 'hbn-game-cell';\r\n        cell.dataset.index = String(index);\r\n        cell.setAttribute('role', 'gridcell');\r\n        cell.setAttribute('aria-rowindex', String(row + 1));\r\n        cell.setAttribute('aria-colindex', String(col + 1));\r\n        cell.setAttribute(\r\n          'aria-label',\r\n          this.text('tileLabel', 'Game item, row {row}, column {column}')\r\n            .replace('{row}', String(row + 1))\r\n            .replace('{column}', String(col + 1))\r\n        );\r\n\r\n        if (tile?.kind === 'special') {\r\n          cell.classList.add('is-special', `is-special-${tile.special}`);\r\n          cell.dataset.special = tile.special;\r\n        }\r\n        if (index === this.selectedIndex) cell.classList.add('is-selected');\r\n        if (matched.has(index)) cell.classList.add('is-matched');\r\n        if (activated.has(index)) cell.classList.add('is-activated');\r\n        if (newTiles.has(index)) cell.classList.add('is-new');\r\n        if (invalid.has(index)) cell.classList.add('is-invalid');\r\n        if (hinted.has(index)) cell.classList.add('is-hint');\r\n\r\n        if (asset?.src) {\r\n          const image = document.createElement('img');\r\n          image.src = asset.src;\r\n          image.alt = '';\r\n          image.draggable = false;\r\n          image.decoding = 'async';\r\n          cell.appendChild(image);\r\n        }\r\n\r\n        fragment.appendChild(cell);\r\n      });\r\n\r\n      this.boardElement.appendChild(fragment);\r\n      this.boardElement.setAttribute('aria-rowcount', String(this.rows));\r\n      this.boardElement.setAttribute('aria-colcount', String(this.cols));\r\n    }\r\n\r\n    onPointerDown(event) {\r\n      if (!this.canInteract() || event.button > 0) return;\r\n      const cell = event.target.closest('.hbn-game-cell');\r\n      if (!cell || !this.boardElement.contains(cell)) return;\r\n\r\n      event.preventDefault();\r\n      this.registerActivity();\r\n      this.pointer = {\r\n        id: event.pointerId,\r\n        index: Number(cell.dataset.index),\r\n        x: event.clientX,\r\n        y: event.clientY\r\n      };\r\n\r\n      try {\r\n        this.boardElement.setPointerCapture(event.pointerId);\r\n      } catch (_) {\r\n        // Pointer capture is an enhancement; tap controls still work without it.\r\n      }\r\n    }\r\n\r\n    onPointerUp(event) {\r\n      if (!this.pointer || this.pointer.id !== event.pointerId) return;\r\n      event.preventDefault();\r\n\r\n      const start = this.pointer;\r\n      this.pointer = null;\r\n\r\n      try {\r\n        this.boardElement.releasePointerCapture(event.pointerId);\r\n      } catch (_) {\r\n        // The pointer may already have been released by the browser.\r\n      }\r\n\r\n      if (!this.canInteract()) return;\r\n\r\n      const dx = event.clientX - start.x;\r\n      const dy = event.clientY - start.y;\r\n\r\n      if (Math.max(Math.abs(dx), Math.abs(dy)) >= SWIPE_THRESHOLD_PX) {\r\n        const target = this.neighborInDirection(\r\n          start.index,\r\n          Math.abs(dx) > Math.abs(dy)\r\n            ? (dx > 0 ? 'right' : 'left')\r\n            : (dy > 0 ? 'down' : 'up')\r\n        );\r\n\r\n        if (target !== null) this.attemptSwap(start.index, target);\r\n        return;\r\n      }\r\n\r\n      this.handleTap(start.index);\r\n    }\r\n\r\n    onPointerCancel(event) {\r\n      if (this.pointer?.id === event.pointerId) this.pointer = null;\r\n    }\r\n\r\n    onBoardKeydown(event) {\r\n      if (!this.canInteract()) return;\r\n      const cell = event.target.closest('.hbn-game-cell');\r\n      if (!cell) return;\r\n\r\n      const index = Number(cell.dataset.index);\r\n      const keyDirections = {\r\n        ArrowLeft: 'left',\r\n        ArrowRight: 'right',\r\n        ArrowUp: 'up',\r\n        ArrowDown: 'down'\r\n      };\r\n\r\n      if (event.key === 'Enter' || event.key === ' ') {\r\n        event.preventDefault();\r\n        this.registerActivity();\r\n        this.handleTap(index);\r\n        return;\r\n      }\r\n\r\n      const direction = keyDirections[event.key];\r\n      if (!direction) return;\r\n\r\n      event.preventDefault();\r\n      this.registerActivity();\r\n      const target = this.neighborInDirection(index, direction);\r\n      if (target !== null) this.attemptSwap(index, target);\r\n    }\r\n\r\n    canInteract() {\r\n      return (\r\n        this.initialized &&\r\n        !this.busy &&\r\n        !this.previewReady &&\r\n        !this.hiddenByDocument &&\r\n        this.generationActive &&\r\n        this.stepActive &&\r\n        this.activeGame === 'match3' &&\r\n        this.mode === 'game'\r\n      );\r\n    }\r\n\r\n    handleTap(index) {\r\n      if (this.selectedIndex === null) {\r\n        this.selectedIndex = index;\r\n        this.renderBoard();\r\n        return;\r\n      }\r\n\r\n      if (this.selectedIndex === index) {\r\n        this.clearSelection();\r\n        this.renderBoard();\r\n        return;\r\n      }\r\n\r\n      if (this.areAdjacent(this.selectedIndex, index)) {\r\n        const first = this.selectedIndex;\r\n        this.clearSelection();\r\n        this.attemptSwap(first, index);\r\n        return;\r\n      }\r\n\r\n      this.selectedIndex = index;\r\n      this.renderBoard();\r\n    }\r\n\r\n    clearSelection() {\r\n      this.selectedIndex = null;\r\n    }\r\n\r\n    neighborInDirection(index, direction) {\r\n      const row = Math.floor(index / this.cols);\r\n      const col = index % this.cols;\r\n      let nextRow = row;\r\n      let nextCol = col;\r\n\r\n      if (direction === 'left') nextCol -= 1;\r\n      if (direction === 'right') nextCol += 1;\r\n      if (direction === 'up') nextRow -= 1;\r\n      if (direction === 'down') nextRow += 1;\r\n\r\n      if (nextRow < 0 || nextRow >= this.rows || nextCol < 0 || nextCol >= this.cols) return null;\r\n      return this.indexFor(nextRow, nextCol);\r\n    }\r\n\r\n    areAdjacent(first, second) {\r\n      const firstRow = Math.floor(first / this.cols);\r\n      const firstCol = first % this.cols;\r\n      const secondRow = Math.floor(second / this.cols);\r\n      const secondCol = second % this.cols;\r\n      return Math.abs(firstRow - secondRow) + Math.abs(firstCol - secondCol) === 1;\r\n    }\r\n\r\n    async attemptSwap(first, second) {\r\n      if (!this.canInteract() || !this.areAdjacent(first, second)) return;\r\n\r\n      this.busy = true;\r\n      this.clearHintTimers();\r\n      this.hideHint();\r\n      this.clearSelection();\r\n      this.swapTiles(first, second);\r\n      this.renderBoard();\r\n      await this.delay(120);\r\n\r\n      const firstTile = this.board[first];\r\n      const secondTile = this.board[second];\r\n      const specialIndexes = [first, second].filter(index => this.board[index]?.kind === 'special');\r\n\r\n      if (specialIndexes.length) {\r\n        const targetType = firstTile?.kind === 'normal'\r\n          ? firstTile.type\r\n          : (secondTile?.kind === 'normal' ? secondTile.type : null);\r\n\r\n        await this.resolveSpecialActivation(specialIndexes, targetType);\r\n        this.invalidMoveCount = 0;\r\n        this.busy = false;\r\n        this.scheduleHint();\r\n        return;\r\n      }\r\n\r\n      const matches = this.findMatches();\r\n      if (!matches.indices.size) {\r\n        this.renderBoard({ invalid: new Set([first, second]) });\r\n        await this.delay(190);\r\n        this.swapTiles(first, second);\r\n        this.renderBoard();\r\n        this.invalidMoveCount += 1;\r\n        this.busy = false;\r\n\r\n        if (this.invalidMoveCount >= this.invalidMovesBeforeHint) {\r\n          this.invalidMoveCount = 0;\r\n          void this.showHint();\r\n        } else {\r\n          this.scheduleHint();\r\n        }\r\n        return;\r\n      }\r\n\r\n      this.invalidMoveCount = 0;\r\n      const bookEarned = this.registerSuccessfulMatch();\r\n      await this.resolveMatchCascades(matches, 1, [second, first], bookEarned);\r\n      this.busy = false;\r\n      this.scheduleHint();\r\n    }\r\n\r\n    swapTiles(first, second) {\r\n      [this.board[first], this.board[second]] = [this.board[second], this.board[first]];\r\n    }\r\n\r\n    findMatches() {\r\n      const groups = [];\r\n\r\n      for (let row = 0; row < this.rows; row += 1) {\r\n        let col = 0;\r\n        while (col < this.cols) {\r\n          const start = col;\r\n          const tile = this.board[this.indexFor(row, col)];\r\n          const type = tile?.kind === 'normal' ? tile.type : null;\r\n\r\n          while (\r\n            type &&\r\n            col + 1 < this.cols &&\r\n            this.board[this.indexFor(row, col + 1)]?.kind === 'normal' &&\r\n            this.board[this.indexFor(row, col + 1)]?.type === type\r\n          ) {\r\n            col += 1;\r\n          }\r\n\r\n          const length = col - start + 1;\r\n          if (type && length >= 3) {\r\n            groups.push({\r\n              orientation: 'horizontal',\r\n              type,\r\n              indices: Array.from({ length }, (_, offset) => this.indexFor(row, start + offset))\r\n            });\r\n          }\r\n          col += 1;\r\n        }\r\n      }\r\n\r\n      for (let col = 0; col < this.cols; col += 1) {\r\n        let row = 0;\r\n        while (row < this.rows) {\r\n          const start = row;\r\n          const tile = this.board[this.indexFor(row, col)];\r\n          const type = tile?.kind === 'normal' ? tile.type : null;\r\n\r\n          while (\r\n            type &&\r\n            row + 1 < this.rows &&\r\n            this.board[this.indexFor(row + 1, col)]?.kind === 'normal' &&\r\n            this.board[this.indexFor(row + 1, col)]?.type === type\r\n          ) {\r\n            row += 1;\r\n          }\r\n\r\n          const length = row - start + 1;\r\n          if (type && length >= 3) {\r\n            groups.push({\r\n              orientation: 'vertical',\r\n              type,\r\n              indices: Array.from({ length }, (_, offset) => this.indexFor(start + offset, col))\r\n            });\r\n          }\r\n          row += 1;\r\n        }\r\n      }\r\n\r\n      return {\r\n        groups,\r\n        indices: new Set(groups.flatMap(group => group.indices))\r\n      };\r\n    }\r\n\r\n    chooseSpecial(matches, cascadeLevel, preferredIndexes = []) {\r\n      const groups = matches.groups;\r\n      if (!groups.length) return null;\r\n\r\n      const longest = groups.reduce((best, group) => (\r\n        group.indices.length > best.indices.length ? group : best\r\n      ), groups[0]);\r\n\r\n      const horizontalIndexes = new Set(\r\n        groups.filter(group => group.orientation === 'horizontal').flatMap(group => group.indices)\r\n      );\r\n      const intersection = groups\r\n        .filter(group => group.orientation === 'vertical')\r\n        .flatMap(group => group.indices)\r\n        .find(index => horizontalIndexes.has(index));\r\n\r\n      let special = null;\r\n      if (longest.indices.length >= 5) special = 'globe';\r\n      else if (intersection !== undefined) special = 'wreath';\r\n      else if (longest.indices.length === 4) {\r\n        special = longest.orientation === 'horizontal' ? 'star' : 'crystal';\r\n      } else if (cascadeLevel >= 2) {\r\n        special = 'crown';\r\n      }\r\n\r\n      if (!special || !this.specialAssets[special]) return null;\r\n\r\n      const preferred = preferredIndexes.find(index => matches.indices.has(index));\r\n      const spawnIndex = preferred ?? intersection ?? longest.indices[Math.floor(longest.indices.length / 2)];\r\n      return { special, spawnIndex };\r\n    }\r\n\r\n    registerSuccessfulMatch() {\r\n      if (!this.specialAssets.book) return false;\r\n\r\n      this.matchesTowardBook = (Number(this.matchesTowardBook) || 0) + 1;\r\n      if (this.matchesTowardBook < SUCCESSFUL_MATCHES_BEFORE_BOOK) return false;\r\n\r\n      this.matchesTowardBook = 0;\r\n      return true;\r\n    }\r\n\r\n    async resolveMatchCascades(\r\n      initialMatches,\r\n      initialCascadeLevel = 1,\r\n      preferredIndexes = [],\r\n      forceBook = false\r\n    ) {\r\n      let matches = initialMatches;\r\n      let cascadeLevel = initialCascadeLevel;\r\n      let preferred = preferredIndexes;\r\n      let resolvedRounds = 0;\r\n\r\n      while (matches.indices.size && !this.previewReady && resolvedRounds < 30) {\r\n        resolvedRounds += 1;\r\n        const preferredBookIndex = preferred.find(index => matches.indices.has(index));\r\n        const fallbackBookIndex = matches.groups[0]?.indices[Math.floor(matches.groups[0].indices.length / 2)];\r\n        const specialPlan = forceBook && resolvedRounds === 1 && this.specialAssets.book\r\n          ? { special: 'book', spawnIndex: preferredBookIndex ?? fallbackBookIndex }\r\n          : this.chooseSpecial(matches, cascadeLevel, preferred);\r\n        const roundScore = matches.groups.reduce(\r\n          (sum, group) => sum + clampMatchScore(group.indices.length),\r\n          0\r\n        ) * cascadeLevel;\r\n\r\n        this.renderBoard({ matched: matches.indices });\r\n        this.updateScore(roundScore);\r\n\r\n        if (cascadeLevel > 1) {\r\n          this.showMessage(\r\n            this.text('combo', 'Combo x{count}').replace('{count}', String(cascadeLevel))\r\n          );\r\n        }\r\n\r\n        await this.delay(220);\r\n\r\n        matches.indices.forEach(index => {\r\n          this.board[index] = null;\r\n        });\r\n\r\n        if (specialPlan) {\r\n          this.board[specialPlan.spawnIndex] = this.createSpecialTile(specialPlan.special);\r\n        }\r\n\r\n        const newTiles = this.collapseAndRefill();\r\n        this.renderBoard({ newTiles });\r\n        await this.delay(230);\r\n\r\n        matches = this.findMatches();\r\n        cascadeLevel += 1;\r\n        preferred = [];\r\n      }\r\n\r\n      if (matches.indices.size && !this.previewReady) {\r\n        await this.shuffleBoard();\r\n        return;\r\n      }\r\n\r\n      if (!this.previewReady && !this.hasPossibleMove()) {\r\n        await this.shuffleBoard();\r\n      }\r\n    }\r\n\r\n    async resolveSpecialActivation(seedIndexes, targetType) {\r\n      const activated = new Set();\r\n      const affected = new Set(seedIndexes);\r\n      const queue = [...seedIndexes];\r\n\r\n      while (queue.length) {\r\n        const index = queue.shift();\r\n        const tile = this.board[index];\r\n        if (!tile || tile.kind !== 'special' || activated.has(index)) continue;\r\n\r\n        activated.add(index);\r\n        const effectIndexes = this.effectIndexes(index, tile.special, targetType);\r\n\r\n        effectIndexes.forEach(effectIndex => {\r\n          if (effectIndex < 0 || effectIndex >= this.board.length) return;\r\n          if (!affected.has(effectIndex)) affected.add(effectIndex);\r\n          if (this.board[effectIndex]?.kind === 'special' && !activated.has(effectIndex)) {\r\n            queue.push(effectIndex);\r\n          }\r\n        });\r\n      }\r\n\r\n      const bonus = [...activated].reduce((sum, index) => {\r\n        return sum + (SPECIAL_BONUS[this.board[index]?.special] || 0);\r\n      }, 0);\r\n      const bookWasActivated = [...activated].some(\r\n        index => this.board[index]?.special === 'book'\r\n      );\r\n      const points = bonus + (affected.size * 10);\r\n\r\n      this.renderBoard({ matched: affected, activated });\r\n      this.updateScore(points);\r\n      this.showPoints(points, seedIndexes[0]);\r\n      await this.delay(260);\r\n\r\n      affected.forEach(index => {\r\n        this.board[index] = null;\r\n      });\r\n\r\n      if (bookWasActivated) this.rotateNormalTypes();\r\n\r\n      const newTiles = this.collapseAndRefill();\r\n      this.renderBoard({ newTiles });\r\n      await this.delay(230);\r\n\r\n      const cascades = this.findMatches();\r\n      if (cascades.indices.size) {\r\n        await this.resolveMatchCascades(cascades, 1);\r\n      } else if (!this.hasPossibleMove()) {\r\n        await this.shuffleBoard();\r\n      }\r\n    }\r\n\r\n    effectIndexes(index, special, targetType) {\r\n      const row = Math.floor(index / this.cols);\r\n      const col = index % this.cols;\r\n\r\n      if (special === 'star') {\r\n        return Array.from({ length: this.cols }, (_, currentCol) => this.indexFor(row, currentCol));\r\n      }\r\n\r\n      if (special === 'crystal') {\r\n        return Array.from({ length: this.rows }, (_, currentRow) => this.indexFor(currentRow, col));\r\n      }\r\n\r\n      if (special === 'wreath') {\r\n        const indexes = [];\r\n        for (let currentRow = row - 1; currentRow <= row + 1; currentRow += 1) {\r\n          for (let currentCol = col - 1; currentCol <= col + 1; currentCol += 1) {\r\n            if (currentRow >= 0 && currentRow < this.rows && currentCol >= 0 && currentCol < this.cols) {\r\n              indexes.push(this.indexFor(currentRow, currentCol));\r\n            }\r\n          }\r\n        }\r\n        return indexes;\r\n      }\r\n\r\n      if (special === 'crown') {\r\n        const rowIndexes = Array.from(\r\n          { length: this.cols },\r\n          (_, currentCol) => this.indexFor(row, currentCol)\r\n        );\r\n        const columnIndexes = Array.from(\r\n          { length: this.rows },\r\n          (_, currentRow) => this.indexFor(currentRow, col)\r\n        );\r\n        return [...new Set([...rowIndexes, ...columnIndexes])];\r\n      }\r\n\r\n      if (special === 'globe') {\r\n        const chosenType = targetType || this.mostCommonNormalType();\r\n        return this.board.reduce((indexes, tile, tileIndex) => {\r\n          if (tile?.kind === 'normal' && tile.type === chosenType) indexes.push(tileIndex);\r\n          return indexes;\r\n        }, [index]);\r\n      }\r\n\r\n      if (special === 'book') {\r\n        return Array.from({ length: this.board.length }, (_, tileIndex) => tileIndex);\r\n      }\r\n\r\n      return [index];\r\n    }\r\n\r\n    mostCommonNormalType() {\r\n      const counts = new Map();\r\n      this.board.forEach(tile => {\r\n        if (tile?.kind !== 'normal') return;\r\n        counts.set(tile.type, (counts.get(tile.type) || 0) + 1);\r\n      });\r\n\r\n      return [...counts.entries()].sort((first, second) => second[1] - first[1])[0]?.[0] || this.selectedTypes[0]?.id;\r\n    }\r\n\r\n    collapseAndRefill() {\r\n      const newTiles = new Set();\r\n\r\n      for (let col = 0; col < this.cols; col += 1) {\r\n        const remaining = [];\r\n\r\n        for (let row = this.rows - 1; row >= 0; row -= 1) {\r\n          const tile = this.board[this.indexFor(row, col)];\r\n          if (tile) remaining.push(tile);\r\n        }\r\n\r\n        for (let row = this.rows - 1; row >= 0; row -= 1) {\r\n          const index = this.indexFor(row, col);\r\n          const tile = remaining.shift();\r\n\r\n          if (tile) {\r\n            this.board[index] = tile;\r\n          } else {\r\n            this.board[index] = this.createNormalTile(this.pick(this.selectedTypes).id);\r\n            newTiles.add(index);\r\n          }\r\n        }\r\n      }\r\n\r\n      return newTiles;\r\n    }\r\n\r\n    findPossibleMove() {\r\n      const specialIndex = this.board.findIndex(tile => tile?.kind === 'special');\r\n      if (specialIndex >= 0) {\r\n        const neighbor = ['right', 'left', 'down', 'up']\r\n          .map(direction => this.neighborInDirection(specialIndex, direction))\r\n          .find(index => index !== null);\r\n\r\n        return neighbor === undefined ? null : [specialIndex, neighbor];\r\n      }\r\n\r\n      for (let index = 0; index < this.board.length; index += 1) {\r\n        const right = this.neighborInDirection(index, 'right');\r\n        const down = this.neighborInDirection(index, 'down');\r\n\r\n        for (const neighbor of [right, down]) {\r\n          if (neighbor === null) continue;\r\n          this.swapTiles(index, neighbor);\r\n          const hasMatch = this.findMatches().indices.size > 0;\r\n          this.swapTiles(index, neighbor);\r\n          if (hasMatch) return [index, neighbor];\r\n        }\r\n      }\r\n\r\n      return null;\r\n    }\r\n\r\n    hasPossibleMove() {\r\n      return this.findPossibleMove() !== null;\r\n    }\r\n\r\n    async shuffleBoard() {\r\n      const ownsBusyState = !this.busy;\r\n      if (ownsBusyState) this.busy = true;\r\n      this.clearHintTimers();\r\n      this.hideHint();\r\n      this.clearSelection();\r\n      this.showMessage(this.text('shuffle', 'Mixing the magic...'));\r\n      await this.delay(260);\r\n      this.generatePlayableBoard();\r\n      this.renderBoard({ newTiles: new Set(this.board.map((_, index) => index)) });\r\n      await this.delay(220);\r\n\r\n      if (ownsBusyState) {\r\n        this.busy = false;\r\n        this.scheduleHint();\r\n      }\r\n    }\r\n\r\n    updateScore(points, animate = true, gameId = this.activeGame || 'match3') {\r\n      const nextScore = (this.scoresByGame[gameId] || 0) + (Number(points) || 0);\r\n      const storedBest = this.readBestScore(gameId);\r\n      const nextBest = Math.max(this.bestsByGame[gameId] || 0, storedBest, nextScore);\r\n      const beatBest = nextBest > (this.bestsByGame[gameId] || 0);\r\n      this.scoresByGame[gameId] = nextScore;\r\n      this.bestsByGame[gameId] = nextBest;\r\n\r\n      if (beatBest) this.saveBestScore(gameId);\r\n      if (this.activeGame === gameId || (!this.activeGame && gameId === 'match3')) {\r\n        this.updateScoreDisplay(gameId);\r\n      }\r\n\r\n      if (animate && points > 0 && this.scoreElement && this.activeGame === gameId) {\r\n        this.scoreElement.classList.remove('is-bumped');\r\n        void this.scoreElement.offsetWidth;\r\n        this.scoreElement.classList.add('is-bumped');\r\n      }\r\n    }\r\n\r\n    updateScoreDisplay(gameId = this.activeGame || 'match3') {\r\n      this.score = this.scoresByGame[gameId] || 0;\r\n      this.best = Math.max(this.bestsByGame[gameId] || 0, this.readBestScore(gameId));\r\n      this.bestsByGame[gameId] = this.best;\r\n      if (this.scoreElement) this.scoreElement.textContent = String(this.score);\r\n      if (this.bestElement) this.bestElement.textContent = String(this.best);\r\n    }\r\n\r\n    showMessage(message) {\r\n      if (!this.messageElement || !message) return;\r\n      this.messageElement.textContent = message;\r\n      this.messageElement.hidden = false;\r\n      window.clearTimeout(this.messageTimer);\r\n      this.messageTimer = window.setTimeout(() => {\r\n        if (this.messageElement) this.messageElement.hidden = true;\r\n      }, 1100);\r\n      this.announce(message);\r\n    }\r\n\r\n    showPoints(points, index) {\r\n      const cell = this.boardElement?.querySelector(`[data-index=\"${index}\"]`);\r\n      if (!cell || points <= 0) return;\r\n\r\n      const badge = document.createElement('span');\r\n      badge.className = 'hbn-game-points';\r\n      badge.textContent = `+${points}`;\r\n      cell.appendChild(badge);\r\n    }\r\n\r\n    announce(message) {\r\n      if (!this.liveElement) return;\r\n      this.liveElement.textContent = '';\r\n      window.setTimeout(() => {\r\n        if (this.liveElement) this.liveElement.textContent = message;\r\n      }, 20);\r\n    }\r\n\r\n    delay(milliseconds) {\r\n      const duration = this.reducedMotion ? Math.min(milliseconds, 40) : milliseconds;\r\n      return new Promise(resolve => window.setTimeout(resolve, duration));\r\n    }\r\n\r\n    indexFor(row, col) {\r\n      return (row * this.cols) + col;\r\n    }\r\n\r\n    pick(items) {\r\n      return items[Math.floor(Math.random() * items.length)];\r\n    }\r\n\r\n    shuffle(items) {\r\n      for (let index = items.length - 1; index > 0; index -= 1) {\r\n        const swapIndex = Math.floor(Math.random() * (index + 1));\r\n        [items[index], items[swapIndex]] = [items[swapIndex], items[index]];\r\n      }\r\n      return items;\r\n    }\r\n  }\r\n\r\n  function configForRoot(root) {\r\n    const localConfig = root.querySelector('[data-hbn-game-config]');\r\n    if (localConfig?.textContent) {\r\n      try {\r\n        return JSON.parse(localConfig.textContent);\r\n      } catch (error) {\r\n        console.error('HBN Match-3: invalid section configuration.', error);\r\n        return null;\r\n      }\r\n    }\r\n\r\n    if (root.id === 'previewLottieSection' && window.hbnWaitGameConfig) {\r\n      return { ...window.hbnWaitGameConfig, mode: 'preview' };\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  function boot(scope = document) {\r\n    const roots = [];\r\n\r\n    if (scope.matches?.('[data-hbn-wait-game-root], #previewLottieSection')) {\r\n      roots.push(scope);\r\n    }\r\n\r\n    scope.querySelectorAll?.('[data-hbn-wait-game-root], #previewLottieSection').forEach(root => {\r\n      if (!roots.includes(root)) roots.push(root);\r\n    });\r\n\r\n    roots.forEach(root => {\r\n      if (root.dataset.hbnGameMounted === 'true') return;\r\n\r\n      const config = configForRoot(root);\r\n      if (!config || !Array.isArray(config.normalTiles) || config.normalTiles.length < 5) return;\r\n\r\n      const game = new HbnWaitGame(root, config);\r\n      root.dataset.hbnGameMounted = 'true';\r\n      window.HBNWaitGameInstances = window.HBNWaitGameInstances || [];\r\n      window.HBNWaitGameInstances.push(game);\r\n\r\n      if (game.isStandalone) {\r\n        window.HBNStandaloneGames = window.HBNStandaloneGames || [];\r\n        window.HBNStandaloneGames.push(game);\r\n      } else {\r\n        window.HBNWaitGame = game;\r\n      }\r\n    });\r\n  }\r\n\r\n  if (document.readyState === 'loading') {\r\n    document.addEventListener('DOMContentLoaded', boot, { once: true });\r\n  } else {\r\n    boot();\r\n  }\r\n\r\n  if (!window.__hbnWaitGameSectionLoadBound) {\r\n    document.addEventListener('shopify:section:load', event => boot(event.target));\r\n    window.__hbnWaitGameSectionLoadBound = true;\r\n  }\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
