{
  "version": 3,
  "sources": ["/cdn/shop/t/161/assets/footer-ruby-fly.js?bk=footer-ruby-fly-v30"],
  "sourcesContent": ["/**\n * Toggle footer ruby between mark-column rest and chrome gold-emblem seat.\n * Translate lives on button.footer__brand-mark-link so click + tilt hitbox\n * travel with the visual; gem stage keeps pointer tilt when parked. Pick-up /\n * put-down bookend elevated state: fine-pointer hover lift/release, or mobile\n * animated fly lift\u2192travel\u2192land (no double fire when hover then fly). Seat\n * travel uses CSS transform ease-out (cubic-bezier(0.16, 1, 0.3, 1); duration\n * from flight.wav via --footer-ruby-fly-duration) and plays footer-ruby-fly.wav\n * on animated travel. During flight, banks stage to --footer-ruby-fly-tilt-max\n * (12deg) along seat-to-seat travel (sin(\u03C0t) over synced flyMs). Layout track\n * stays in the mark column. Empty keyhole seat (content hit target) plays\n * locked.wav + deny-shakes the chrome keyhole when ruby is at emblem, then\n * silver ShareShade-scribes Sorry. above the keyhole and the body below once\n * per emblem stay (handwriting4 once, CSS stagger/draw scaled to clip; stop on\n * deactivate; repeat seat clicks still lock-SFX + deny-shake; seat click always\n * re-arms the stay timer). Leaving the mark (goToEmblem) arms a 10s auto-home\n * dwell whether or not the keyhole was clicked; timeout starts fog-poof when\n * sorry was shown then after HOME_LEAD_MS (250) flies ruby home (goToMark);\n * no-sorry timeout homes immediately; manual home has no lead. Fog uses\n * extreme blur + opacity + extinguish.wav; ShareShade mask stays on inner\n * .footer-ruby-sorry-shade so blur can bloom; same vanish whenever presented\n * text is reset (including ruby home). Keyhole gold trim stays separate. Honors\n * prefers-reduced-motion (skips lift/rest / lock / fly / handwriting /\n * extinguish SFX + shake). Footer SFX use a Web Audio buffer pool (decode once,\n * start(0) on trigger; unlock AudioContext on first page gesture / hover /\n * mark/seat click; never start BufferSource while suspended). Home stays on\n * wordmark.\n */\n(function () {\n  var sfxDocUnlockBound = false;\n  var FLY_PROP_X = '--footer-ruby-fly-x';\n  var FLY_PROP_Y = '--footer-ruby-fly-y';\n  var TILT_RX = '--footer-ruby-tilt-rx';\n  var TILT_RY = '--footer-ruby-tilt-ry';\n  var TILT_NX = '--footer-tilt-nx';\n  var TILT_NY = '--footer-tilt-ny';\n  var CLASS_FLYING = 'footer-ruby-gem--flying';\n  var CLASS_AT_EMBLEM = 'footer-ruby-gem--at-emblem';\n  var CLASS_FOOTER_AT_EMBLEM = 'footer--ruby-at-emblem';\n  var CLASS_DENY_SHAKE = 'is-footer-ruby-keyhole-deny-shake';\n  var CLASS_SORRY_SCRIBING = 'is-footer-ruby-sorry-scribing';\n  var CLASS_SORRY_VANISHING = 'is-footer-ruby-sorry-vanishing';\n  var LIFT_PX = -12;\n  var DENY_SHAKE_MS = 500;\n  var FLY_MS = 700;\n  var SORRY_DWELL_MS_DEFAULT = 10000;\n  var SORRY_VANISH_MS_DEFAULT = 850;\n  var LOCKED_VOLUME = 0.35;\n  var EXTINGUISH_VOLUME = 0.35;\n  var HANDWRITING_VOLUME = 0.288;\n  var PICK_PUT_VOLUME = 0.35;\n  var FLY_VOLUME = 0.35;\n  var HOME_LEAD_MS = 250;\n  var SORRY_SCRIBE_STAGGER_S = 0.055;\n  var SORRY_SCRIBE_DRAW_S = 0.45;\n\n  function reducedMotion() {\n    return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n  }\n\n  function parseFlyPx(raw) {\n    var n = parseFloat(raw);\n    return Number.isFinite(n) ? n : 0;\n  }\n\n  function readFlyOffset(host) {\n    var cs = getComputedStyle(host);\n    return {\n      x: parseFlyPx(cs.getPropertyValue(FLY_PROP_X)),\n      y: parseFlyPx(cs.getPropertyValue(FLY_PROP_Y)),\n    };\n  }\n\n  function writeFly(host, x, y) {\n    host.style.setProperty(FLY_PROP_X, x + 'px');\n    host.style.setProperty(FLY_PROP_Y, y + 'px');\n  }\n\n  function clearFly(host) {\n    host.style.setProperty(FLY_PROP_X, '0px');\n    host.style.setProperty(FLY_PROP_Y, '0px');\n  }\n\n  function deltaToEmblem(host, gem, emblem) {\n    var gr = gem.getBoundingClientRect();\n    var er = emblem.getBoundingClientRect();\n    if (gr.width < 1 || er.width < 1) return null;\n    var off = readFlyOffset(host);\n    var gcx = gr.left + gr.width / 2 - off.x;\n    var gcy = gr.top + gr.height / 2 - off.y;\n    var ecx = er.left + er.width / 2;\n    var ecy = er.top + er.height / 2;\n    return { x: ecx - gcx, y: ecy - gcy };\n  }\n\n  function setPressed(btn, atEmblem) {\n    btn.setAttribute('aria-pressed', atEmblem ? 'true' : 'false');\n  }\n\n  function setSeatActive(seat, active) {\n    if (!seat) return;\n    if (active) {\n      seat.removeAttribute('aria-hidden');\n      seat.setAttribute('tabindex', '0');\n    } else {\n      seat.setAttribute('aria-hidden', 'true');\n      seat.setAttribute('tabindex', '-1');\n    }\n  }\n\n  function playDenyShake(keyhole, onDone) {\n    if (!keyhole || reducedMotion()) {\n      if (onDone) onDone();\n      return;\n    }\n    keyhole.classList.remove(CLASS_DENY_SHAKE);\n    void keyhole.offsetWidth;\n    keyhole.classList.add(CLASS_DENY_SHAKE);\n    var done = false;\n    function clear() {\n      if (done) return;\n      done = true;\n      keyhole.classList.remove(CLASS_DENY_SHAKE);\n      keyhole.removeEventListener('animationend', onEnd);\n      if (onDone) onDone();\n    }\n    function onEnd(event) {\n      if (event.target !== keyhole) return;\n      clear();\n    }\n    keyhole.addEventListener('animationend', onEnd);\n    window.setTimeout(clear, DENY_SHAKE_MS);\n  }\n\n  function bindFly(btn) {\n    if (btn.dataset.footerRubyFlyBound === '1') return;\n    btn.dataset.footerRubyFlyBound = '1';\n\n    var footer = btn.closest('.footer');\n    if (!footer) return;\n    var gem = btn.querySelector('.footer-ruby-gem');\n    var emblem = footer.querySelector('.footer__chrome .footer-gold-emblem');\n    var keyhole = footer.querySelector('.footer-ruby-keyhole');\n    var seat = footer.querySelector('.footer-ruby-keyhole-seat');\n    var sorryHosts = Array.prototype.slice.call(\n      footer.querySelectorAll('[data-footer-ruby-sorry-scribe]')\n    );\n    var sorryA11y = footer.querySelector('[data-footer-ruby-sorry-a11y]');\n    if (!gem || !emblem) return;\n\n    var flying = false;\n    var atEmblem = false;\n    var sorryFetches = {};\n    var sorryMaskRaf = 0;\n    var sorryMaskActive = {};\n    var sorryDwellTimer = 0;\n    var homeLeadTimer = 0;\n    var sorryVanishPending = false;\n    var markCol =\n      btn.closest('.footer__brand-mark-col') || footer.querySelector('.footer__brand-mark-col');\n    var travelTiltRaf = 0;\n    var lockedSrc =\n      (markCol && markCol.getAttribute('data-footer-ruby-keyhole-locked-src')) || '';\n    var extinguishSrc =\n      (markCol && markCol.getAttribute('data-footer-ruby-sorry-extinguish-src')) ||\n      '';\n    var handwritingSrc =\n      (markCol && markCol.getAttribute('data-footer-ruby-sorry-handwriting-src')) ||\n      '';\n    var handwritingStarted = false;\n    var handwritingSource = null;\n    var pickUpSrc =\n      (markCol && markCol.getAttribute('data-footer-ruby-pick-up-src')) || '';\n    var putDownSrc =\n      (markCol && markCol.getAttribute('data-footer-ruby-put-down-src')) || '';\n    var flySrc =\n      (markCol && markCol.getAttribute('data-footer-ruby-fly-src')) || '';\n    var flyMs = FLY_MS;\n    var elevated = false;\n    var pickHeardForElevation = false;\n    var fineHoverMq = window.matchMedia('(hover: hover) and (pointer: fine)');\n    var sfxCtx = null;\n    var sfxBuffers = {};\n    var sfxLoadPromises = {};\n\n    function ensureAudioCtx() {\n      if (sfxCtx) return sfxCtx;\n      var AC = window.AudioContext || window.webkitAudioContext;\n      if (!AC) return null;\n      sfxCtx = new AC();\n      return sfxCtx;\n    }\n\n    function whenCtxRunning(cb) {\n      var ctx = ensureAudioCtx();\n      if (!ctx || typeof cb !== 'function') return;\n      if (ctx.state === 'running') {\n        cb(ctx);\n        return;\n      }\n      if (ctx.state !== 'suspended') return;\n      var resumeResult;\n      try {\n        resumeResult = ctx.resume();\n      } catch (e) {\n        return;\n      }\n      if (resumeResult && typeof resumeResult.then === 'function') {\n        resumeResult\n          .then(function () {\n            if (ctx.state === 'running') cb(ctx);\n          })\n          .catch(function () {\n            /* ignore */\n          });\n        return;\n      }\n      if (ctx.state === 'running') cb(ctx);\n    }\n\n    function unlockSfx() {\n      whenCtxRunning(function () {\n        if (elevated && !pickHeardForElevation) playPickUpSound();\n      });\n    }\n\n    function loadSfx(key, url) {\n      if (!key || !url) return Promise.resolve(null);\n      if (sfxBuffers[key]) return Promise.resolve(sfxBuffers[key]);\n      if (sfxLoadPromises[key]) return sfxLoadPromises[key];\n      var ctx = ensureAudioCtx();\n      if (!ctx) return Promise.resolve(null);\n      sfxLoadPromises[key] = fetch(url)\n        .then(function (response) {\n          if (!response.ok) throw new Error('sfx fetch failed');\n          return response.arrayBuffer();\n        })\n        .then(function (ab) {\n          return ctx.decodeAudioData(ab.slice(0));\n        })\n        .then(function (buffer) {\n          sfxBuffers[key] = buffer;\n          return buffer;\n        })\n        .catch(function () {\n          delete sfxLoadPromises[key];\n          return null;\n        });\n      return sfxLoadPromises[key];\n    }\n\n    function playSfx(key, volume, options) {\n      var opts = options || {};\n      var buffer = sfxBuffers[key];\n      if (!buffer) return null;\n      whenCtxRunning(function (ctx) {\n        if (key === 'pickUp' && (!elevated || pickHeardForElevation)) return;\n        try {\n          var source = ctx.createBufferSource();\n          var gain = ctx.createGain();\n          var vol = typeof volume === 'number' ? volume : 1;\n          gain.gain.value = vol;\n          source.buffer = buffer;\n          source.connect(gain);\n          gain.connect(ctx.destination);\n          source.start(0);\n          if (key === 'pickUp') pickHeardForElevation = true;\n          if (opts.trackHandwriting) {\n            handwritingSource = source;\n            source.onended = function () {\n              if (handwritingSource === source) handwritingSource = null;\n            };\n          }\n        } catch (e) {\n          /* ignore */\n        }\n      });\n      return null;\n    }\n\n    function applyFlyDuration(buffer) {\n      if (!buffer || !(buffer.duration > 0.05)) return;\n      flyMs = Math.round(buffer.duration * 1000);\n      btn.style.setProperty('--footer-ruby-fly-duration', flyMs + 'ms');\n    }\n\n    function preloadAllSfx() {\n      var jobs = [];\n      if (lockedSrc) jobs.push(loadSfx('locked', lockedSrc));\n      if (pickUpSrc) jobs.push(loadSfx('pickUp', pickUpSrc));\n      if (putDownSrc) jobs.push(loadSfx('putDown', putDownSrc));\n      if (flySrc) {\n        jobs.push(\n          loadSfx('fly', flySrc).then(function (buffer) {\n            applyFlyDuration(buffer);\n            return buffer;\n          })\n        );\n      }\n      if (extinguishSrc) jobs.push(loadSfx('extinguish', extinguishSrc));\n      if (handwritingSrc) jobs.push(loadSfx('handwriting', handwritingSrc));\n      if (!jobs.length) return Promise.resolve();\n      return Promise.all(jobs);\n    }\n\n    function playLockedSound() {\n      if (reducedMotion() || !lockedSrc) return;\n      playSfx('locked', LOCKED_VOLUME);\n    }\n\n    function playPickUpSound() {\n      if (reducedMotion() || !pickUpSrc) return;\n      playSfx('pickUp', PICK_PUT_VOLUME);\n    }\n\n    function playPutDownSound() {\n      if (reducedMotion() || !putDownSrc) return;\n      playSfx('putDown', PICK_PUT_VOLUME);\n    }\n\n    function playFlySound() {\n      if (reducedMotion() || !flySrc) return;\n      playSfx('fly', FLY_VOLUME);\n    }\n\n    function setElevated(next) {\n      if (next === elevated) return;\n      elevated = next;\n      if (next) {\n        pickHeardForElevation = false;\n        playPickUpSound();\n      } else {\n        pickHeardForElevation = false;\n        playPutDownSound();\n      }\n    }\n\n    function isFineHovered() {\n      return fineHoverMq.matches && btn.matches(':hover');\n    }\n\n    function playExtinguishSound() {\n      if (reducedMotion() || !extinguishSrc) return;\n      playSfx('extinguish', EXTINGUISH_VOLUME);\n    }\n\n    function hostScribeSpanS(host) {\n      if (!host) return 0;\n      var letters = host.querySelectorAll('.footer-ruby-sorry-scribe__letter');\n      var maxIdx = 0;\n      var found = false;\n      for (var i = 0; i < letters.length; i++) {\n        var raw = getComputedStyle(letters[i]).getPropertyValue('--letter-index');\n        var idx = parseFloat(raw);\n        if (!Number.isFinite(idx)) continue;\n        found = true;\n        if (idx > maxIdx) maxIdx = idx;\n      }\n      if (!found) return 0;\n      return maxIdx * SORRY_SCRIBE_STAGGER_S + SORRY_SCRIBE_DRAW_S;\n    }\n\n    function fitSorryScribeToHandwriting(duration) {\n      if (!markCol || !(duration > 0.05) || !Number.isFinite(duration)) return;\n      var total = 0;\n      sorryHosts.forEach(function (host) {\n        if (host.querySelector('svg')) total += hostScribeSpanS(host);\n      });\n      if (!(total > 0.05)) return;\n      var scale = duration / total;\n      markCol.style.setProperty(\n        '--footer-ruby-sorry-scribe-stagger',\n        SORRY_SCRIBE_STAGGER_S * scale + 's'\n      );\n      markCol.style.setProperty(\n        '--footer-ruby-sorry-scribe-draw',\n        SORRY_SCRIBE_DRAW_S * scale + 's'\n      );\n    }\n\n    function clearSorryScribeFit() {\n      if (!markCol) return;\n      markCol.style.removeProperty('--footer-ruby-sorry-scribe-stagger');\n      markCol.style.removeProperty('--footer-ruby-sorry-scribe-draw');\n    }\n\n    function stopHandwritingSound() {\n      handwritingStarted = false;\n      if (!handwritingSource) return;\n      try {\n        handwritingSource.stop(0);\n      } catch (e) {\n        /* ignore */\n      }\n      handwritingSource = null;\n    }\n\n    function whenHandwritingReady(done) {\n      if (typeof done !== 'function') return;\n      if (reducedMotion() || !handwritingSrc) {\n        done(0);\n        return;\n      }\n      if (sfxBuffers.handwriting && sfxBuffers.handwriting.duration > 0.05) {\n        done(sfxBuffers.handwriting.duration);\n        return;\n      }\n      loadSfx('handwriting', handwritingSrc).then(function (buffer) {\n        done(buffer && buffer.duration > 0.05 ? buffer.duration : 0);\n      });\n    }\n\n    function playHandwritingSound() {\n      if (reducedMotion() || !handwritingSrc || handwritingStarted) return;\n      if (!sfxBuffers.handwriting) return;\n      handwritingStarted = true;\n      playSfx('handwriting', HANDWRITING_VOLUME, { trackHandwriting: true });\n    }\n\n    function readTiltMaxDeg() {\n      var raw = getComputedStyle(gem)\n        .getPropertyValue('--footer-ruby-fly-tilt-max')\n        .trim();\n      var parsed = parseFloat(raw);\n      return Number.isFinite(parsed) ? parsed : 12;\n    }\n\n    function writeTravelTilt(rxDeg, ryDeg) {\n      var max = readTiltMaxDeg();\n      var nx = max ? Math.max(-1, Math.min(1, -ryDeg / max)) : 0;\n      var ny = max ? Math.max(-1, Math.min(1, rxDeg / max)) : 0;\n      gem.style.setProperty(TILT_RX, rxDeg + 'deg');\n      gem.style.setProperty(TILT_RY, ryDeg + 'deg');\n      gem.style.setProperty(TILT_NX, String(nx));\n      gem.style.setProperty(TILT_NY, String(ny));\n    }\n\n    function clearTravelTilt() {\n      gem.style.removeProperty(TILT_RX);\n      gem.style.removeProperty(TILT_RY);\n      gem.style.removeProperty(TILT_NX);\n      gem.style.removeProperty(TILT_NY);\n    }\n\n    function stopTravelTilt() {\n      if (travelTiltRaf) {\n        cancelAnimationFrame(travelTiltRaf);\n        travelTiltRaf = 0;\n      }\n    }\n\n    /**\n     * Bank to max along seat-to-seat travel; amplitude sin(\u03C0t) over flyMs\n     * eases out of and back into rest (ignore fly-lift for direction).\n     */\n    function startTravelTilt(dx, dy) {\n      stopTravelTilt();\n      var len = Math.sqrt(dx * dx + dy * dy);\n      if (!(len > 0.5)) {\n        clearTravelTilt();\n        return;\n      }\n      var max = readTiltMaxDeg();\n      var ux = dx / len;\n      var uy = dy / len;\n      var peakRx = uy * max;\n      var peakRy = -ux * max;\n      var t0 = performance.now();\n      var dur = flyMs > 0 ? flyMs : FLY_MS;\n\n      function tick(now) {\n        travelTiltRaf = 0;\n        var t = (now - t0) / dur;\n        if (t >= 1) {\n          clearTravelTilt();\n          return;\n        }\n        var amp = Math.sin(Math.PI * Math.max(0, t));\n        writeTravelTilt(peakRx * amp, peakRy * amp);\n        travelTiltRaf = requestAnimationFrame(tick);\n      }\n\n      travelTiltRaf = requestAnimationFrame(tick);\n    }\n\n    function sorryAlreadyDrawn() {\n      return sorryHosts.some(function (host) {\n        return (\n          host.classList.contains(CLASS_SORRY_SCRIBING) &&\n          host.querySelector('svg')\n        );\n      });\n    }\n\n    function sorryHostKey(host) {\n      return host.getAttribute('data-footer-ruby-sorry-scribe') || 'default';\n    }\n\n    /** Inner shade owns ShareShade mask; outer host owns blur fog. */\n    function sorryShade(host) {\n      if (!host) return null;\n      return (\n        host.querySelector('.footer-ruby-sorry-shade[data-footer-sorry-silver]') ||\n        host.querySelector('[data-footer-sorry-silver]') ||\n        host\n      );\n    }\n\n    /**\n     * White SVG data-URL for shade CSS mask (social-icon ShareShade). Bake live\n     * __mask-stroke dashoffset so the scribe reveal advances in gilt.\n     */\n    function whiteSorryMaskFromSvg(svg) {\n      var clone = svg.cloneNode(true);\n      var liveStrokes = svg.querySelectorAll(\n        '.footer-ruby-sorry-scribe__mask-stroke'\n      );\n      var cloneStrokes = clone.querySelectorAll(\n        '.footer-ruby-sorry-scribe__mask-stroke'\n      );\n      var n = Math.min(liveStrokes.length, cloneStrokes.length);\n      for (var i = 0; i < n; i++) {\n        var cs = window.getComputedStyle(liveStrokes[i]);\n        var dashArray = cs.strokeDasharray || '1';\n        var dashOffset = String(parseFloat(cs.strokeDashoffset));\n        if (!Number.isFinite(parseFloat(dashOffset))) dashOffset = '1';\n        cloneStrokes[i].setAttribute('stroke-dasharray', dashArray);\n        cloneStrokes[i].setAttribute('stroke-dashoffset', dashOffset);\n        cloneStrokes[i].style.animation = 'none';\n        cloneStrokes[i].style.strokeDasharray = dashArray;\n        cloneStrokes[i].style.strokeDashoffset = dashOffset;\n      }\n      clone.querySelectorAll('*').forEach(function (node) {\n        if (node.hasAttribute && node.hasAttribute('fill')) {\n          var f = node.getAttribute('fill');\n          if (f && f !== 'none') node.setAttribute('fill', '#fff');\n        }\n        if (node.hasAttribute && node.hasAttribute('stroke')) {\n          var s = node.getAttribute('stroke');\n          if (s && s !== 'none') node.setAttribute('stroke', '#fff');\n        }\n      });\n      var xml = new XMLSerializer().serializeToString(clone);\n      return (\n        'url(\"data:image/svg+xml;charset=utf-8,' +\n        encodeURIComponent(xml) +\n        '\")'\n      );\n    }\n\n    function refreshSorryMask(host) {\n      if (!host) return;\n      var shade = sorryShade(host);\n      var svg = host.querySelector('svg');\n      if (!shade || !svg) return;\n      shade.style.setProperty('--footer-sorry-mask', whiteSorryMaskFromSvg(svg));\n    }\n\n    function stopSorryMaskLoop() {\n      if (sorryMaskRaf) {\n        cancelAnimationFrame(sorryMaskRaf);\n        sorryMaskRaf = 0;\n      }\n    }\n\n    function tickSorryMasks() {\n      sorryMaskRaf = 0;\n      var keys = Object.keys(sorryMaskActive);\n      if (!keys.length) return;\n      sorryHosts.forEach(function (host) {\n        if (sorryMaskActive[sorryHostKey(host)]) refreshSorryMask(host);\n      });\n      sorryMaskRaf = requestAnimationFrame(tickSorryMasks);\n    }\n\n    function startSorryMaskLoop() {\n      if (sorryMaskRaf) return;\n      sorryMaskRaf = requestAnimationFrame(tickSorryMasks);\n    }\n\n    function beginSorryHostScribe(host, onDone) {\n      if (!host || !host.querySelector('svg')) {\n        if (onDone) onDone();\n        return;\n      }\n      var key = sorryHostKey(host);\n      host.classList.add(CLASS_SORRY_SCRIBING);\n      refreshSorryMask(host);\n      if (reducedMotion()) {\n        /* CSS forces dashoffset 0; one-shot mask is enough. */\n        refreshSorryMask(host);\n        if (onDone) onDone();\n        return;\n      }\n      playHandwritingSound();\n      sorryMaskActive[key] = true;\n      startSorryMaskLoop();\n      whenSorryHostDone(host, function () {\n        refreshSorryMask(host);\n        delete sorryMaskActive[key];\n        if (!Object.keys(sorryMaskActive).length) stopSorryMaskLoop();\n        if (onDone) onDone();\n      });\n    }\n\n    function cancelHomeLead() {\n      if (homeLeadTimer) {\n        window.clearTimeout(homeLeadTimer);\n        homeLeadTimer = 0;\n      }\n    }\n\n    function cancelSorryDwell() {\n      cancelHomeLead();\n      if (sorryDwellTimer) {\n        window.clearTimeout(sorryDwellTimer);\n        sorryDwellTimer = 0;\n      }\n    }\n\n    function readCssTimeMs(host, prop, fallbackMs) {\n      if (!host) return fallbackMs;\n      var raw = getComputedStyle(host).getPropertyValue(prop);\n      var sec = parseCssTime(raw);\n      if (!sec) return fallbackMs;\n      return Math.round(sec * 1000);\n    }\n\n    function sorryIsPresented() {\n      return sorryHosts.some(function (host) {\n        return (\n          host.classList.contains(CLASS_SORRY_SCRIBING) ||\n          host.classList.contains(CLASS_SORRY_VANISHING) ||\n          !!host.querySelector('svg')\n        );\n      });\n    }\n\n    function resetSorryScribe() {\n      cancelSorryDwell();\n      stopHandwritingSound();\n      clearSorryScribeFit();\n      stopSorryMaskLoop();\n      sorryMaskActive = {};\n      sorryVanishPending = false;\n      sorryHosts.forEach(function (host) {\n        host.classList.remove(CLASS_SORRY_SCRIBING);\n        host.classList.remove(CLASS_SORRY_VANISHING);\n        host.setAttribute('aria-hidden', 'true');\n        var shade = sorryShade(host);\n        if (shade && shade !== host) {\n          shade.style.removeProperty('--footer-sorry-mask');\n          shade.innerHTML = '';\n        } else {\n          host.style.removeProperty('--footer-sorry-mask');\n          host.innerHTML = '';\n        }\n      });\n      sorryFetches = {};\n      if (sorryA11y) sorryA11y.textContent = '';\n    }\n\n    function vanishSorryScribe(done) {\n      cancelSorryDwell();\n      if (sorryVanishPending) {\n        if (done) done();\n        return;\n      }\n      stopHandwritingSound();\n      clearSorryScribeFit();\n      var hosts = sorryHosts.filter(function (host) {\n        return (\n          host.querySelector('svg') &&\n          (host.classList.contains(CLASS_SORRY_SCRIBING) ||\n            host.classList.contains(CLASS_SORRY_VANISHING))\n        );\n      });\n      if (!hosts.length) {\n        resetSorryScribe();\n        if (done) done();\n        return;\n      }\n      if (reducedMotion()) {\n        resetSorryScribe();\n        if (done) done();\n        return;\n      }\n      sorryVanishPending = true;\n      playExtinguishSound();\n      stopSorryMaskLoop();\n      sorryMaskActive = {};\n      if (sorryA11y) sorryA11y.textContent = '';\n      var vanishMs = readCssTimeMs(\n        markCol,\n        '--footer-ruby-sorry-vanish',\n        SORRY_VANISH_MS_DEFAULT\n      );\n      var left = hosts.length;\n      var finished = false;\n      function finishAll() {\n        if (finished) return;\n        finished = true;\n        sorryVanishPending = false;\n        resetSorryScribe();\n        if (done) done();\n      }\n      hosts.forEach(function (host) {\n        var hostDone = false;\n        host.classList.add(CLASS_SORRY_SCRIBING);\n        host.classList.add(CLASS_SORRY_VANISHING);\n        function finishHost() {\n          if (hostDone) return;\n          hostDone = true;\n          host.removeEventListener('animationend', onEnd);\n          left -= 1;\n          if (left <= 0) finishAll();\n        }\n        function onEnd(event) {\n          if (\n            event &&\n            event.animationName &&\n            event.animationName.indexOf('footer-ruby-sorry-vanish') === -1\n          ) {\n            return;\n          }\n          finishHost();\n        }\n        host.addEventListener('animationend', onEnd);\n        window.setTimeout(finishHost, vanishMs + 80);\n      });\n    }\n\n    function scheduleSorryDwell() {\n      cancelSorryDwell();\n      if (!atEmblem) return;\n      var dwellMs = readCssTimeMs(\n        markCol,\n        '--footer-ruby-sorry-dwell',\n        SORRY_DWELL_MS_DEFAULT\n      );\n      sorryDwellTimer = window.setTimeout(function () {\n        sorryDwellTimer = 0;\n        if (!atEmblem) return;\n        if (sorryIsPresented()) {\n          vanishSorryScribe();\n          cancelHomeLead();\n          homeLeadTimer = window.setTimeout(function () {\n            homeLeadTimer = 0;\n            if (atEmblem) goToMark(true);\n          }, HOME_LEAD_MS);\n          return;\n        }\n        goToMark(true);\n      }, dwellMs);\n    }\n\n    function ensureSorrySvg(host) {\n      if (!host) return Promise.resolve(null);\n      var shade = sorryShade(host);\n      var existing = host.querySelector('svg');\n      if (existing) return Promise.resolve(existing);\n      var key = host.getAttribute('data-footer-ruby-sorry-scribe') || 'default';\n      if (sorryFetches[key]) return sorryFetches[key];\n      var src = host.getAttribute('data-src');\n      if (!src || !shade) return Promise.resolve(null);\n      sorryFetches[key] = fetch(src)\n        .then(function (response) {\n          if (!response.ok) throw new Error('footer sorry scribe fetch failed');\n          return response.text();\n        })\n        .then(function (svgText) {\n          shade.innerHTML = svgText.replace(/^\\s*<\\?xml[^?]*\\?>\\s*/i, '');\n          return shade.querySelector('svg');\n        })\n        .catch(function () {\n          delete sorryFetches[key];\n          return null;\n        });\n      return sorryFetches[key];\n    }\n\n    function parseCssTime(raw) {\n      if (!raw) return 0;\n      var s = String(raw).trim();\n      if (s.endsWith('ms')) return parseFloat(s) / 1000 || 0;\n      if (s.endsWith('s')) return parseFloat(s) || 0;\n      return parseFloat(s) || 0;\n    }\n\n    function sorryScribeFallbackMs(host) {\n      var strokes = host.querySelectorAll(\n        '.footer-ruby-sorry-scribe__mask-stroke'\n      );\n      var latest = 0;\n      for (var i = 0; i < strokes.length; i++) {\n        var cs = window.getComputedStyle(strokes[i]);\n        var end =\n          parseCssTime(cs.animationDelay) + parseCssTime(cs.animationDuration);\n        if (end > latest) latest = end;\n      }\n      return Math.ceil((latest + 0.08) * 1000);\n    }\n\n    function whenSorryHostDone(host, done) {\n      var strokes = host.querySelectorAll(\n        '.footer-ruby-sorry-scribe__mask-stroke'\n      );\n      if (!strokes.length || reducedMotion()) {\n        done();\n        return;\n      }\n      var left = strokes.length;\n      var finished = false;\n      function finish() {\n        if (finished) return;\n        finished = true;\n        done();\n      }\n      function onEnd(event) {\n        if (\n          event &&\n          event.animationName &&\n          event.animationName.indexOf('footer-ruby-sorry-scribe-draw') === -1\n        ) {\n          return;\n        }\n        left -= 1;\n        if (left <= 0) finish();\n      }\n      for (var i = 0; i < strokes.length; i++) {\n        strokes[i].addEventListener('animationend', onEnd);\n      }\n      window.setTimeout(finish, sorryScribeFallbackMs(host));\n    }\n\n    function resolveSorryHost(role) {\n      for (var i = 0; i < sorryHosts.length; i++) {\n        if (sorryHosts[i].getAttribute('data-footer-ruby-sorry-scribe') === role) {\n          return sorryHosts[i];\n        }\n      }\n      return null;\n    }\n\n    function startSorryScribe() {\n      if (!sorryHosts.length || !atEmblem) return;\n      /* Once drawn for this emblem stay, keep the line; deny-shake still plays. */\n      if (sorryAlreadyDrawn()) return;\n      Promise.all(sorryHosts.map(ensureSorrySvg)).then(function () {\n        if (!atEmblem || sorryAlreadyDrawn()) return;\n        var above = resolveSorryHost('above');\n        var below = resolveSorryHost('below');\n        var first = above || sorryHosts[0];\n        var second = above && below ? below : null;\n        if (!first || !first.querySelector('svg')) return;\n        if (sorryA11y) {\n          sorryA11y.textContent = sorryA11y.getAttribute('data-label') || '';\n        }\n        function runScribe() {\n          if (!atEmblem || sorryAlreadyDrawn()) return;\n          beginSorryHostScribe(first, function () {\n            window.dispatchEvent(new Event('resize'));\n            if (!second || !second.querySelector('svg') || !atEmblem) {\n              return;\n            }\n            beginSorryHostScribe(second, function () {\n              window.dispatchEvent(new Event('resize'));\n            });\n          });\n          window.dispatchEvent(new Event('resize'));\n        }\n        whenHandwritingReady(function (duration) {\n          if (!atEmblem || sorryAlreadyDrawn()) return;\n          if (duration > 0.05) fitSorryScribeToHandwriting(duration);\n          runScribe();\n        });\n      });\n    }\n\n    function setAtEmblemState(next) {\n      atEmblem = next;\n      if (next) footer.classList.add(CLASS_FOOTER_AT_EMBLEM);\n      else footer.classList.remove(CLASS_FOOTER_AT_EMBLEM);\n      setSeatActive(seat, next);\n      setPressed(btn, next);\n      if (next) gem.classList.add(CLASS_AT_EMBLEM);\n      else gem.classList.remove(CLASS_AT_EMBLEM);\n      if (!next) {\n        cancelSorryDwell();\n        if (sorryIsPresented()) vanishSorryScribe();\n        else resetSorryScribe();\n      }\n    }\n\n    function endFlight() {\n      flying = false;\n      gem.classList.remove(CLASS_FLYING);\n      btn.style.removeProperty('--footer-ruby-fly-lift');\n      stopTravelTilt();\n      clearTravelTilt();\n      if (!isFineHovered()) setElevated(false);\n    }\n\n    function onTransitionEnd(event) {\n      if (event.target !== btn) return;\n      if (event.propertyName !== 'transform') return;\n      endFlight();\n    }\n\n    btn.addEventListener('transitionend', onTransitionEnd);\n\n    function goToEmblem(animate) {\n      var delta = deltaToEmblem(btn, gem, emblem);\n      if (!delta) return;\n      setAtEmblemState(true);\n      scheduleSorryDwell();\n      if (!animate || reducedMotion()) {\n        writeFly(btn, delta.x, delta.y);\n        endFlight();\n        return;\n      }\n      flying = true;\n      gem.classList.add(CLASS_FLYING);\n      /* Hold fly-lift for the whole seat translate; endFlight clears it. */\n      btn.style.setProperty('--footer-ruby-fly-lift', LIFT_PX + 'px');\n      setElevated(true);\n      playFlySound();\n      startTravelTilt(delta.x, delta.y);\n      requestAnimationFrame(function () {\n        requestAnimationFrame(function () {\n          writeFly(btn, delta.x, delta.y);\n        });\n      });\n    }\n\n    function goToMark(animate) {\n      var cur = readFlyOffset(btn);\n      setAtEmblemState(false);\n      if (!animate || reducedMotion()) {\n        clearFly(btn);\n        endFlight();\n        return;\n      }\n      flying = true;\n      gem.classList.add(CLASS_FLYING);\n      btn.style.setProperty('--footer-ruby-fly-lift', LIFT_PX + 'px');\n      setElevated(true);\n      playFlySound();\n      startTravelTilt(-cur.x, -cur.y);\n      requestAnimationFrame(function () {\n        requestAnimationFrame(function () {\n          clearFly(btn);\n        });\n      });\n    }\n\n    function remeasureIfParked() {\n      if (!atEmblem || flying) return;\n      var prev = btn.style.transition;\n      btn.style.transition = 'none';\n      var delta = deltaToEmblem(btn, gem, emblem);\n      if (delta) writeFly(btn, delta.x, delta.y);\n      void btn.offsetWidth;\n      btn.style.transition = prev;\n    }\n\n    btn.addEventListener('click', function () {\n      unlockSfx();\n      if (flying) return;\n      if (atEmblem) goToMark(true);\n      else goToEmblem(true);\n    });\n\n    if (fineHoverMq.matches) {\n      btn.addEventListener('pointerenter', function () {\n        unlockSfx();\n        setElevated(true);\n      });\n      btn.addEventListener('pointerleave', function () {\n        if (!flying) setElevated(false);\n      });\n    }\n\n    if (!sfxDocUnlockBound) {\n      sfxDocUnlockBound = true;\n      function earlyUnlock() {\n        unlockSfx();\n      }\n      document.addEventListener('pointerdown', earlyUnlock, true);\n      document.addEventListener('touchstart', earlyUnlock, true);\n      document.addEventListener('keydown', earlyUnlock, true);\n    }\n\n    if (seat) {\n      seat.addEventListener('click', function (event) {\n        event.preventDefault();\n        unlockSfx();\n        if (!atEmblem) return;\n        playLockedSound();\n        playDenyShake(keyhole, startSorryScribe);\n        scheduleSorryDwell();\n      });\n    }\n    preloadAllSfx();\n\n    window.addEventListener('resize', remeasureIfParked);\n    if (window.visualViewport) {\n      window.visualViewport.addEventListener('resize', remeasureIfParked);\n    }\n\n    clearFly(btn);\n    setAtEmblemState(false);\n  }\n\n  function init() {\n    document.querySelectorAll('button.footer__brand-mark-link').forEach(bindFly);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": ["earlyUnlock"]
}
