{
  "version": 3,
  "sources": ["/cdn/shop/t/23/assets/dsd-originals-library-lib001.js?cachebust=libp01-r377-readonly"],
  "sourcesContent": ["(function () {\n  'use strict';\n\n  function failBoot(root, error) {\n    if (!root) return;\n    var status = root.querySelector('[data-originals-status]');\n    var message = root.querySelector('[data-originals-error]');\n    var retry = root.querySelector('[data-originals-retry]');\n    root.dataset.originalsState = 'access-blocked';\n    root.dataset.dsdOriginalsMounted = 'error';\n    if (status) status.textContent = 'Access unavailable';\n    if (message) {\n      message.textContent = 'The protected chapter service is unavailable. Retry later.';\n      message.hidden = false;\n    }\n    if (retry) {\n      retry.hidden = false;\n      retry.addEventListener('click', function () { window.location.reload(); }, { once: true });\n    }\n    if (window.console && typeof window.console.error === 'function') {\n      window.console.error('DSD Originals failed to initialize.', error);\n    }\n  }\n\n  function safeBoot(root) {\n    try {\n      boot(root);\n    } catch (error) {\n      failBoot(root, error);\n    }\n  }\n\n  function boot(root) {\n    if (!root || root.dataset.dsdOriginalsMounted === 'true' || root.dataset.dsdOriginalsMounted === 'starting') return;\n    root.dataset.dsdOriginalsMounted = 'starting';\n    var Core = window.DSDOriginalsCore;\n    var Integration = window.DSDOriginalsIntegrationR9;\n    var configNode = root.querySelector('[data-originals-config]');\n    if (!Core || !Integration || typeof Integration.create !== 'function') throw new Error('required_runtime_unavailable');\n    if (!configNode) throw new Error('library_config_unavailable');\n    var config = JSON.parse(configNode.textContent || '{}');\n    var pageViews = window.DSDOriginalsPageViews ? window.DSDOriginalsPageViews.create({ readerScope: config.signedIn === true ? config.requestScope : 'guest-page-v1', visible: !(root.closest && root.closest('[data-originals-inline-reader-host][hidden]')) }) : null;\n    if (pageViews) root.addEventListener('dsd:originals:reader-visibility', function (event) { pageViews.setVisible(Boolean(event.detail && event.detail.visible)); });\n    var publicCounts = window.DSDOriginalsPublicCounts ? window.DSDOriginalsPublicCounts.create({ root: root, visible: !(root.closest && root.closest('[data-originals-inline-reader-host][hidden]')) }) : null;\n    if (publicCounts) root.addEventListener('dsd:originals:reader-visibility', function (event) { publicCounts.setVisible(Boolean(event.detail && event.detail.visible)); });\n    var publicRoutes = window.DSDOriginalsRoutes ? window.DSDOriginalsRoutes.read(root.querySelector('[data-originals-public-routes]')) : {};\n    function parseLocationRoute() {\n      return window.DSDOriginalsRoutes ? window.DSDOriginalsRoutes.parse(location.search, location.pathname, publicRoutes) : Core.parseRoute(location.search);\n    }\n    var chapters = Array.isArray(config.chapters) && config.chapters.length ? config.chapters : [{\n      id: config.chapterId || 'chapter-01',\n      title: 'Things We Don\u2019t Say',\n      audioRevision: config.audioRevision,\n      durationSeconds: Number(config.durationSeconds || 0)\n    }];\n    var chaptersById = new Map(chapters.map(function (chapter) { return [chapter.id, chapter]; }));\n    var requestedChapterId = parseLocationRoute().chapterId;\n    var initialChapterId = chaptersById.has(requestedChapterId) ? requestedChapterId : chapters[0].id;\n    var integration = Integration.create(config);\n    root.dataset.dsdOriginalsMounted = 'true';\n    var manifest = null;\n    var timing = null;\n    var session = null;\n    var preparation = null;\n    var preparationGeneration = 0;\n    var sourceLoad = null;\n    var cancelSourceLoad = null;\n    var playRequest = null;\n    var restoredProgress = null;\n    var restoreRecheckScope = null;\n    var progressSyncAvailable = false;\n    var accountProgressCandidate = null;\n    var reconciliationBusy = false;\n    var sharedAudio = window.DSDOriginalsSocialCardLIBP01 && typeof window.DSDOriginalsSocialCardLIBP01.acquireSharedAudio === 'function'\n      ? window.DSDOriginalsSocialCardLIBP01.acquireSharedAudio(root, config) : null;\n    var audio = sharedAudio ? sharedAudio.audio : root.querySelector('[data-originals-audio]');\n    if (sharedAudio) {\n      var emptyAudio = root.querySelector('[data-originals-audio]');\n      if (emptyAudio) emptyAudio.remove();\n      root.dsdOriginalsSharedAudio = audio;\n    }\n    var activeToken = null;\n    var followEnabled = true;\n    var autoScrollUntil = 0;\n    var followScrollTargetY = null;\n    var followGlideUntil = 0;\n    var lastFollowFrameTime = 0;\n    var checkpointTimer = null;\n    var grantExpiryTimer = null;\n    var frame = 0;\n    var loadGeneration = 0;\n    var chapterGeneration = 0;\n    var invalidChapterRoute = false;\n    var handledEnd = false;\n    var destroyed = false;\n    var state = {\n      view: 'home',\n      seriesId: 'just-the-homie',\n      chapterId: initialChapterId,\n      speed: 1,\n      autoNext: true,\n      sequence: 0,\n      sessionId: window.crypto && typeof window.crypto.randomUUID === 'function'\n        ? window.crypto.randomUUID()\n        : '00000000-0000-4000-8000-' + String(Date.now()).slice(-12).padStart(12, '0')\n    };\n    if (sharedAudio) Object.defineProperty(state, 'sessionId', { get: sharedAudio.getSessionId, set: sharedAudio.setSessionId, enumerable: true });\n    var playbackObserver = sharedAudio ? sharedAudio.observer : window.DSDOriginalsPlaybackObserver\n      ? window.DSDOriginalsPlaybackObserver.create(audio, { sessionId: function () { return state.sessionId; }, requireAccountScope: true })\n      : null;\n\n    function currentChapter() {\n      return chaptersById.get(state.chapterId) || chapters[0];\n    }\n\n    function syncChapterControls() {\n      var index = chapters.findIndex(function (chapter) { return chapter.id === state.chapterId; });\n      if (!manifest) {\n        elements.duration.textContent = Core.formatTime(currentChapter().durationSeconds || 0);\n        elements.seek.max = String(currentChapter().durationSeconds || 0);\n      }\n      if (elements.previousChapter) elements.previousChapter.disabled = index <= 0;\n      if (elements.nextChapter) elements.nextChapter.disabled = index < 0 || index >= chapters.length - 1;\n      root.dataset.originalsChapterId = state.chapterId;\n      root.dataset.originalsAudioRevision = currentChapter().audioRevision;\n      root.dispatchEvent(new CustomEvent('dsd:originals-chapterchange', { detail: { chapterId: state.chapterId, audioRevision: currentChapter().audioRevision } }));\n    }\n    var elements = {\n      status: root.querySelector('[data-originals-status]'),\n      error: root.querySelector('[data-originals-error]'),\n      title: root.querySelector('[data-originals-now-title]'),\n      current: root.querySelector('[data-originals-current]'),\n      duration: root.querySelector('[data-originals-duration]'),\n      seek: root.querySelector('[data-originals-seek]'),\n      play: root.querySelector('[data-originals-action=\"play\"]'),\n      retry: root.querySelector('[data-originals-retry]'),\n      readAlong: root.querySelector('[data-originals-read-along]'),\n      followInput: root.querySelector('[data-originals-follow]'),\n      transcript: root.querySelector('[data-originals-transcript]'),\n      read: root.querySelector('[data-originals-read]'),\n      sync: root.querySelector('[data-originals-sync]'),\n      save: root.querySelector('[data-originals-save-state]'),\n      progressReconcile: root.querySelector('[data-originals-progress-reconcile]'),\n      progressChoice: root.querySelector('[data-originals-progress-choice]'),\n      resume: root.querySelector('[data-originals-resume]'),\n      noHistory: root.querySelector('[data-originals-no-history]'),\n      player: root.querySelector('[data-originals-player]'),\n      readerBar: root.querySelector('.dsd-originals-polish__reader-bar'),\n      previousChapter: root.querySelector('[data-originals-action=\"previous-chapter\"]'),\n      nextChapter: root.querySelector('[data-originals-action=\"next-chapter\"]')\n    };\n\n    var resumeGeneration = 0;\n    var resumeAccountChanged = false;\n    var resumePageHidden = false;\n    var noHistoryText = elements.noHistory ? elements.noHistory.textContent : '';\n    var seriesListen = root.querySelector('[data-originals-play=\"true\"]');\n    var seriesListenLabel = seriesListen ? seriesListen.textContent : 'Listen';\n    var seriesEntryChapterId = seriesListen ? seriesListen.dataset.originalsChapterId : state.chapterId;\n    var libraryResumeRequest = null;\n\n    function displayResume(position, hasHistory, message, chapterId) {\n      if (seriesListen) {\n        seriesListen.textContent = hasHistory ? 'Resume Listening' : seriesListenLabel;\n        seriesListen.dataset.originalsChapterId = hasHistory ? (chapterId || state.chapterId) : seriesEntryChapterId;\n      }\n      if (elements.resume) {\n        elements.resume.hidden = !hasHistory;\n        elements.resume.textContent = hasHistory ? 'Resume from ' + Core.formatTime(position) : '';\n      }\n      if (elements.noHistory) {\n        elements.noHistory.hidden = Boolean(hasHistory);\n        elements.noHistory.textContent = message || noHistoryText;\n      }\n    }\n\n    function loadLibraryResume() {\n      if (libraryResumeRequest) return libraryResumeRequest;\n      var generation = ++resumeGeneration;\n      if (destroyed || resumePageHidden || resumeAccountChanged || state.view === 'chapter' || invalidChapterRoute ||\n          manifest || session || preparation || config.signedIn !== true || typeof integration.resume !== 'function' ||\n          !/^[a-f0-9]{64}$/.test(String(config.requestScope || ''))) return Promise.resolve(false);\n      var chapter = currentChapter();\n      var scope = config.requestScope;\n      function current() {\n        return generation === resumeGeneration && !destroyed && !resumePageHidden && !resumeAccountChanged &&\n          config.signedIn === true && config.requestScope === scope && state.chapterId === chapter.id &&\n          currentChapter().audioRevision === chapter.audioRevision && state.view !== 'chapter' && !invalidChapterRoute &&\n          !manifest && !session && !preparation;\n      }\n      displayResume(0, false, 'Checking your listening place\u2026');\n      var readResume = typeof integration.seriesResume === 'function' ? integration.seriesResume(chapters) : integration.resume(chapter.id, chapter.audioRevision);\n      var pending = readResume.then(function (record) {\n        if (!current()) return false;\n        var target = record && record.chapterId === chapter.id ? chapter : record && chaptersById.get(record.chapterId);\n        if (!target || !record || record.version !== 1 || record.audioRevision !== target.audioRevision ||\n            typeof record.positionSeconds !== 'number' || !Number.isFinite(record.positionSeconds) || record.positionSeconds < 0 ||\n            !Number.isFinite(target.durationSeconds) || target.durationSeconds <= 0 || record.positionSeconds > target.durationSeconds ||\n            typeof record.completed !== 'boolean' || !Number.isSafeInteger(record.serverRevision) || record.serverRevision < 0) throw new Error('resume_contract');\n        displayResume(record.positionSeconds, record.positionSeconds > 0 || record.completed || record.serverRevision > 0, null, target.id);\n        if (elements.resume) elements.resume.dataset.originalsResumeChapterId = target.id;\n        return true;\n      }).catch(function (error) {\n        if (current()) displayResume(0, false, error && error.status === 409\n          ? 'Your account or chapter changed. Reload to check your listening place.'\n          : 'Listening place couldn\u2019t be checked. Open the chapter to retry.');\n        return false;\n      });\n      libraryResumeRequest = pending;\n      pending.then(function () { if (libraryResumeRequest === pending) libraryResumeRequest = null; });\n      return pending;\n    }\n\n    function invalidateLibraryResume() {\n      if (pageViews) pageViews.stop();\n      if (publicCounts) publicCounts.stop();\n      resumeGeneration += 1;\n      resumeAccountChanged = true;\n      integration.destroy();\n      root.dataset.originalsAccess = 'denied';\n      resetChapterState();\n      displayResume(0, false, 'Your account changed. Reload to check your listening place.');\n      setStatus('Account changed', 'access-blocked');\n      showError('Reload this page before continuing with the current account.');\n    }\n\n    function setStatus(text, kind) {\n      elements.status.textContent = text;\n      root.dataset.originalsState = kind || 'ready';\n    }\n\n    function showError(text) {\n      elements.error.textContent = text;\n      elements.error.hidden = !text;\n    }\n\n    function setPlaybackReady(ready) {\n      elements.play.disabled = !ready;\n      elements.seek.disabled = !ready;\n      elements.readAlong.disabled = !ready || Boolean(manifest && manifest.availableFormats && manifest.availableFormats.transcript === false);\n      ['[data-originals-speed]', '[data-originals-auto-next]', '[data-originals-follow]'].forEach(function (selector) {\n        var control = root.querySelector(selector);\n        if (control) control.disabled = !ready;\n      });\n      ['back15', 'forward30'].forEach(function (action) {\n        var button = root.querySelector('[data-originals-action=\"' + action + '\"]');\n        if (button) button.disabled = !ready;\n      });\n    }\n\n    function accessError(error) {\n      if (error && ['account_changed_reload', 'stale_session', 'progress_scope_mismatch'].includes(error.code)) return 'Your account changed. Reload before continuing.';\n      if (error && error.status === 401) return 'Sign in to check chapter access.';\n      if (error && error.status === 403) return 'An active DSD+ membership is required for this chapter.';\n      if (error && error.status === 409) return 'The approved audio revision changed. Reload before continuing.';\n      return 'The protected chapter service is unavailable. Retry later.';\n    }\n\n    function accessStatus(error) {\n      if (error && error.status === 401) return elements.status.dataset.signInRequired || 'Log in';\n      if (error && error.status === 403) return 'DSD+ required';\n      return 'Access unavailable';\n    }\n\n    function expiredPromotionSession() {\n      return Boolean(session && session.winningRule === 'promotion' && session.expiresAt &&\n        Number.isFinite(Date.parse(session.expiresAt)) && Date.now() >= Date.parse(session.expiresAt));\n    }\n\n    function clearGrantExpiryTimer() {\n      if (grantExpiryTimer !== null) clearTimeout(grantExpiryTimer);\n      grantExpiryTimer = null;\n    }\n\n    function scheduleGrantExpiry(activeSession) {\n      clearGrantExpiryTimer();\n      var deadline = activeSession && activeSession.expiresAt ? Date.parse(activeSession.expiresAt) : NaN;\n      if (!Number.isFinite(deadline)) return;\n      // One deadline for the active grant, not a perpetual polling loop.\n      var delay = Math.max(0, Math.min(deadline - Date.now(), 2147483647));\n      grantExpiryTimer = setTimeout(function () {\n        grantExpiryTimer = null;\n        if (destroyed || session !== activeSession || !ownsSharedChapter()) return;\n        // Browser timer throttling or a wall-clock adjustment can fire early.\n        if (!discardExpiredGrant()) scheduleGrantExpiry(activeSession);\n      }, delay);\n    }\n\n    function invalidateExpiredSession() {\n      if (!ownsSharedChapter()) return false;\n      if (!session || !session.expiresAt || !Number.isFinite(Date.parse(session.expiresAt)) || Date.now() < Date.parse(session.expiresAt)) return false;\n      var promotionEnded = expiredPromotionSession();\n      clearGrantExpiryTimer();\n      if (manifest && !audio.paused) saveProgress('pause');\n      loadGeneration += 1;\n      if (cancelSourceLoad) cancelSourceLoad();\n      audio.pause();\n      audio.removeAttribute('src');\n      audio.dataset.sourceReady = 'false';\n      audio.load();\n      cancelAnimationFrame(frame);\n      stopCheckpoint();\n      if (playbackObserver) playbackObserver.setContext(null);\n      session = null;\n      manifest = null;\n      timing = null;\n      preparationGeneration += 1;\n      preparation = null;\n      sourceLoad = null;\n      progressSyncAvailable = false;\n      activeToken = null;\n      elements.transcript.innerHTML = '';\n      elements.read.innerHTML = '';\n      delete root.dataset.originalsProseRevision;\n      setPlaybackReady(false);\n      elements.play.textContent = 'Play';\n      return promotionEnded;\n    }\n\n    function discardExpiredGrant() {\n      if (!ownsSharedChapter()) return false;\n      if (!session || !session.expiresAt || !Number.isFinite(Date.parse(session.expiresAt)) || Date.now() < Date.parse(session.expiresAt)) return false;\n      var endedOffer = invalidateExpiredSession();\n      root.dataset.originalsAccess = 'denied';\n      if (elements.retry) elements.retry.hidden = false;\n      setStatus(endedOffer ? 'Free period ended' : 'Access expired', 'access-blocked');\n      showError(endedOffer ? 'The free listening period ended. Your listening place was kept. Retry to check current access.' :\n        'Chapter access expired while loading. Retry to check current access.');\n      return true;\n    }\n\n    function setView(view, push) {\n      state.view = view;\n      if (publicCounts) publicCounts.setTarget({ view: view, seriesId: state.seriesId, chapterId: state.chapterId });\n      if (pageViews) pageViews.setTarget(view === 'series' || view === 'chapter' ? { targetType: view, seriesId: state.seriesId, ...(view === 'chapter' ? { chapterId: state.chapterId } : {}) } : null);\n      if (view === 'chapter') resumeGeneration += 1;\n      root.querySelectorAll('[data-originals-view]').forEach(function (panel) {\n        panel.hidden = panel.dataset.originalsView !== view;\n      });\n      root.querySelectorAll('[data-originals-nav]').forEach(function (button) {\n        button.setAttribute('aria-current', button.dataset.originalsNav === view ? 'page' : 'false');\n      });\n      if (view !== 'chapter' && root.dataset.originalsState === 'access-blocked') {\n        showError('');\n        setStatus('Choose a chapter to check access', 'ready');\n      }\n      if (push) {\n        var nextRoute = { view: view, seriesId: state.seriesId, chapterId: view === 'chapter' ? state.chapterId : '' };\n        history.pushState({ view: view }, '', window.DSDOriginalsRoutes ? window.DSDOriginalsRoutes.href(nextRoute, publicRoutes) : Core.routeQuery(nextRoute));\n        window.scrollTo({ top: 0, behavior: 'instant' });\n      }\n    }\n\n    function storageKey() {\n      var revision = manifest ? manifest.chapter.audioRevision : currentChapter().audioRevision;\n      var scope = session && session.progressScope ? session.progressScope : config.userScope || 'device-guest';\n      return Core.progressKey(scope, state.chapterId, revision);\n    }\n\n    function readStoredProgress() {\n      try {\n        var value = JSON.parse(localStorage.getItem(storageKey()) || 'null');\n        return value && typeof value === 'object' ? value : null;\n      } catch (error) { return null; }\n    }\n\n    function readProgress() {\n      var duration = manifest ? manifest.chapter.durationSeconds : Number(currentChapter().durationSeconds || 0);\n      return Core.safeProgress(readStoredProgress() || {}, duration);\n    }\n\n    function readInlineHandoff(remove) {\n      try {\n        var handoff = JSON.parse(sessionStorage.getItem('dsd-originals-inline-handoff-v1') || 'null');\n        var valid = handoff && handoff.chapterId === state.chapterId && handoff.audioRevision === currentChapter().audioRevision && /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(String(handoff.sessionId || '')) && Boolean(session && session.playbackScope) && handoff.playbackScope === session.playbackScope && Number.isFinite(Number(handoff.positionSeconds)) && Number(handoff.positionSeconds) >= 0 && Date.now() - Number(handoff.savedAt || 0) < 10 * 60 * 1000;\n        if (!valid) {\n          if (handoff) sessionStorage.removeItem('dsd-originals-inline-handoff-v1');\n          return null;\n        }\n        if (remove) sessionStorage.removeItem('dsd-originals-inline-handoff-v1');\n        return handoff;\n      } catch (error) {\n        try { sessionStorage.removeItem('dsd-originals-inline-handoff-v1'); } catch (_storageError) { /* Storage may be unavailable. */ }\n        return null;\n      }\n    }\n\n    function ownsSharedChapter() {\n      return !sharedAudio || typeof sharedAudio.matches !== 'function' || sharedAudio.matches(state.chapterId, currentChapter().audioRevision);\n    }\n\n    function saveProgress(reason) {\n      if (!ownsSharedChapter()) return;\n      if (!manifest || resumeAccountChanged || resumePageHidden || session && session.mode === 'read') return;\n      var generation = chapterGeneration;\n      var activeSession = session;\n      if (audio.dataset.sourceReady !== 'true' && !restoredProgress) return;\n      state.sequence += 1;\n      var position = audio.dataset.sourceReady === 'true' || reason === 'seek'\n        ? audio.currentTime\n        : restoredProgress ? restoredProgress.positionSeconds : audio.currentTime;\n      var record = {\n        chapterId: state.chapterId,\n        audioRevision: manifest.chapter.audioRevision,\n        positionSeconds: Core.clamp(position, 0, manifest.chapter.durationSeconds),\n        completed: audio.dataset.sourceReady === 'true' ? reason === 'ended' : restoredProgress.completed === true,\n        speed: state.speed,\n        autoNext: state.autoNext,\n        followAudio: followEnabled,\n        sequence: state.sequence,\n        sessionId: state.sessionId,\n        savedAt: new Date().toISOString()\n      };\n      if (session && !progressSyncAvailable) record.deviceOnly = true;\n      var savedOnDevice = false;\n      try {\n        localStorage.setItem(storageKey(), JSON.stringify(record));\n        savedOnDevice = true;\n        elements.save.textContent = session ? 'Saving' : 'Saved on this device. Account sync pending.';\n        displayResume(record.positionSeconds, true);\n      } catch (error) {\n        elements.save.textContent = 'Progress could not be saved on this device.';\n      }\n      if (session && !progressSyncAvailable) {\n        if (savedOnDevice) elements.save.textContent = config.signedIn === true ? 'Saved on this device. Account sync unavailable.' : 'Saved on this device.';\n        return;\n      }\n      if (session) {\n        var payload = {\n          chapterId: record.chapterId,\n          audioRevision: record.audioRevision,\n          positionSeconds: record.positionSeconds,\n          completed: record.completed,\n          speed: record.speed,\n          autoNext: record.autoNext,\n          followAudio: record.followAudio,\n          sequence: record.sequence,\n          sessionId: record.sessionId\n        };\n        var savedSequence = record.sequence;\n        var departure = reason === 'hidden' || reason === 'departure';\n        var immediate = departure || ['pause', 'seek', 'speed', 'preference', 'ended'].includes(reason);\n        var operation = departure ? integration.flush(payload) : integration.save(payload, immediate);\n        operation.then(function (saved) {\n          if (generation !== chapterGeneration || activeSession !== session || savedSequence !== state.sequence || resumeAccountChanged || resumePageHidden) return;\n          if (saved && !saved.queued && !saved.skipped) elements.save.textContent = 'Saved to account';\n          else if (saved && saved.queued) elements.save.textContent = 'Saved on this device. Account sync pending.';\n        }).catch(function (error) {\n          if (generation !== chapterGeneration || activeSession !== session || savedSequence !== state.sequence || resumeAccountChanged || resumePageHidden) return;\n          elements.save.textContent = error && error.status === 409\n            ? 'Saved on this device. Account changed elsewhere.'\n            : 'Saved on this device. Account sync pending.';\n        });\n      }\n    }\n\n    function applyProgress(progress, deviceOnly) {\n      restoredProgress = Core.safeProgress(progress || {}, manifest.chapter.durationSeconds);\n      restoredProgress.serverRevision = Number(progress && progress.serverRevision || 0);\n      state.speed = restoredProgress.speed;\n      state.autoNext = restoredProgress.autoNext;\n      followEnabled = restoredProgress.followAudio;\n      state.sequence = Number(progress && progress.sequence || 0);\n      syncFollowControl();\n      root.querySelector('[data-originals-speed]').value = String(state.speed);\n      root.querySelector('[data-originals-auto-next]').checked = state.autoNext;\n      var localRecord = deviceOnly ? Object.assign({}, restoredProgress, { deviceOnly: true }) : restoredProgress;\n      try { localStorage.setItem(storageKey(), JSON.stringify(localRecord)); } catch (error) {}\n      displayResume(restoredProgress.positionSeconds, restoredProgress.positionSeconds > 0 || restoredProgress.completed || restoredProgress.serverRevision > 0);\n    }\n\n    function deviceProgressMatchesAccount(deviceProgress, accountProgress, chapter) {\n      if (!deviceProgress || !accountProgress || !chapter) return false;\n      if (accountProgress.chapterId !== chapter.id || accountProgress.audioRevision !== chapter.audioRevision) return false;\n      if (!['positionSeconds', 'completed', 'speed', 'autoNext', 'followAudio'].every(function (field) {\n        return Object.prototype.hasOwnProperty.call(accountProgress, field);\n      })) return false;\n      var device = Core.safeProgress(deviceProgress, chapter.durationSeconds);\n      var account = Core.safeProgress(accountProgress, chapter.durationSeconds);\n      return Math.abs(device.positionSeconds - account.positionSeconds) <= 0.05 &&\n        device.completed === account.completed && device.speed === account.speed &&\n        device.autoNext === account.autoNext && device.followAudio === account.followAudio;\n    }\n\n    function progressFingerprint(record) {\n      return JSON.stringify(['chapterId', 'audioRevision', 'serverRevision', 'positionSeconds',\n        'completed', 'speed', 'autoNext', 'followAudio'].map(function (field) { return record && record[field]; }));\n    }\n\n    function showProgressChoice(accountRecord) {\n      accountProgressCandidate = accountRecord;\n      if (!elements.progressReconcile || !elements.progressChoice) return;\n      var deviceRecord = readStoredProgress();\n      if (!deviceRecord || deviceRecord.deviceOnly !== true || !accountRecord) {\n        elements.progressReconcile.hidden = true;\n        return;\n      }\n      elements.progressChoice.textContent = 'This device: ' + Core.formatTime(deviceRecord.positionSeconds) +\n        ' \u00B7 Account: ' + Core.formatTime(accountRecord.positionSeconds) + '. Choose which place to keep.';\n      elements.progressReconcile.hidden = false;\n    }\n\n    function reconcileProgress(useDevice) {\n      if (reconciliationBusy || !manifest || !session || !accountProgressCandidate || progressSyncAvailable) return;\n      var generation = chapterGeneration;\n      var activeSession = session;\n      var previousAccount = accountProgressCandidate;\n      if (!audio.paused) { audio.pause(); saveProgress('pause'); }\n      var deviceRecord = readStoredProgress();\n      if (!deviceRecord || deviceRecord.deviceOnly !== true) return;\n      var deviceSnapshot = JSON.stringify(deviceRecord);\n      reconciliationBusy = true;\n      elements.save.textContent = 'Checking your account place\u2026';\n      integration.progress(activeSession).then(function (freshAccount) {\n        if (generation !== chapterGeneration || activeSession !== session) return null;\n        if (JSON.stringify(readStoredProgress()) !== deviceSnapshot ||\n            progressFingerprint(freshAccount) !== progressFingerprint(previousAccount)) {\n          showProgressChoice(freshAccount);\n          elements.save.textContent = 'A place changed. Review both positions and choose again.';\n          return null;\n        }\n        if (!useDevice) {\n          progressSyncAvailable = true;\n          applyProgress(freshAccount, false);\n          if (audio.dataset.sourceReady === 'true') audio.currentTime = restoredProgress.positionSeconds;\n          elements.current.textContent = Core.formatTime(restoredProgress.positionSeconds);\n          elements.seek.value = String(restoredProgress.positionSeconds);\n          showProgressChoice(null);\n          elements.save.textContent = 'Using your account place. Account sync restored.';\n          return null;\n        }\n        if (typeof integration.reconcile !== 'function') throw new Error('progress_reconciliation_unavailable');\n        var payload = {\n          chapterId: state.chapterId, audioRevision: manifest.chapter.audioRevision,\n          positionSeconds: Number(deviceRecord.positionSeconds), completed: Boolean(deviceRecord.completed),\n          speed: deviceRecord.speed, autoNext: deviceRecord.autoNext, followAudio: deviceRecord.followAudio,\n          sequence: deviceRecord.sequence, sessionId: deviceRecord.sessionId\n        };\n        return integration.reconcile(payload).then(function (saved) {\n          if (generation !== chapterGeneration || activeSession !== session) return;\n          if (!saved || saved.skipped || !Number.isFinite(Number(saved.serverRevision)) ||\n              JSON.stringify(readStoredProgress()) !== deviceSnapshot) {\n            elements.save.textContent = 'Device place kept. Account sync still pending.';\n            return;\n          }\n          progressSyncAvailable = true;\n          applyProgress(Object.assign({}, deviceRecord, { serverRevision: saved.serverRevision }), false);\n          showProgressChoice(null);\n          elements.save.textContent = 'Device place saved to account. Account sync restored.';\n        });\n      }).catch(function (error) {\n        if (generation !== chapterGeneration || activeSession !== session) return;\n        if (error && (error.status === 401 || error.status === 403)) {\n          chapterGeneration += 1;\n          loadGeneration += 1;\n          if (cancelSourceLoad) cancelSourceLoad();\n          audio.pause();\n          audio.removeAttribute('src');\n          audio.dataset.sourceReady = 'false';\n          audio.load();\n          cancelAnimationFrame(frame);\n          stopCheckpoint();\n          if (playbackObserver) playbackObserver.setContext(null);\n          root.dataset.originalsAccess = 'denied';\n          elements.transcript.innerHTML = '';\n          elements.read.innerHTML = '';\n          delete root.dataset.originalsProseRevision;\n          showProgressChoice(null);\n          clearGrantExpiryTimer();\n          session = null;\n          manifest = null;\n          timing = null;\n          restoredProgress = null;\n          progressSyncAvailable = false;\n          reconciliationBusy = false;\n          preparation = null;\n          sourceLoad = null;\n          playRequest = null;\n          setPlaybackReady(false);\n          if (elements.retry) elements.retry.hidden = true;\n          setStatus(accessStatus(error), 'access-blocked');\n          showError(accessError(error));\n        }\n        elements.save.textContent = error && error.status === 409\n          ? 'Account place changed. Reload before syncing.'\n          : 'Device place kept. Account sync unavailable; retry later.';\n      }).finally(function () {\n        if (generation === chapterGeneration) reconciliationBusy = false;\n      });\n    }\n\n    function prepareChapter() {\n      resumeGeneration += 1;\n      if (destroyed || resumePageHidden || resumeAccountChanged) return Promise.resolve(false);\n      if (invalidChapterRoute) return Promise.resolve(false);\n      var promotionEnded = invalidateExpiredSession();\n      if (manifest && session && ownsSharedChapter()) return Promise.resolve(true);\n      if (manifest && session) resetChapterState(true);\n      if (preparation) return preparation;\n      var generation = chapterGeneration;\n      var preparationEpoch = preparationGeneration;\n      var selectedChapter = currentChapter();\n      setPlaybackReady(false);\n      elements.title.textContent = selectedChapter.title;\n      if (elements.retry) elements.retry.hidden = true;\n      setStatus('Checking ' + selectedChapter.title + ' access', 'loading');\n      showError('');\n      preparation = integration.session(state.chapterId, selectedChapter.audioRevision).then(function (activeSession) {\n        if (generation !== chapterGeneration || preparationEpoch !== preparationGeneration) return null;\n        session = activeSession;\n        if (sharedAudio && activeSession.playbackScope !== sharedAudio.scope) { sharedAudio.invalidate(); throw { status: 409, code: 'account_changed_reload' }; }\n        if (restoreRecheckScope && restoreRecheckScope !== activeSession.progressScope) {\n          // A restored tab may now belong to a different account.\n          state.sessionId = window.crypto && typeof window.crypto.randomUUID === 'function' ? window.crypto.randomUUID() : state.sessionId;\n        }\n        if (activeSession.audioRevision !== selectedChapter.audioRevision) throw { status: 409 };\n        if (sharedAudio && typeof sharedAudio.adoptChapter === 'function' && !sharedAudio.adoptChapter(activeSession, selectedChapter)) return null;\n        // A slow session response may already be outside its exclusive grant window.\n        if (discardExpiredGrant()) return null;\n        scheduleGrantExpiry(activeSession);\n        return Promise.all([\n          integration.content(activeSession),\n          activeSession.mode === 'read' ? Promise.resolve({ record: null, localOnly: true, readingOnly: true }) :\n          !activeSession.progressUrl ? Promise.resolve({ record: null, localOnly: true, guestOnly: true }) :\n          integration.progress(activeSession).then(function (record) {\n            return { record: record, localOnly: false };\n          }).catch(function (error) {\n            // The serving fallback lacks scoped POST progress reads. Keep the\n            // authorized content usable, but never retry as an unscoped GET.\n            if (error && error.status === 405 && activeSession.progressScope) return { localOnly: true };\n            throw error;\n          })\n        ]);\n      }).then(function (results) {\n        if (generation !== chapterGeneration || preparationEpoch !== preparationGeneration || !results || !ownsSharedChapter()) return false;\n        // A session can cross its exclusive end while content/progress is in flight.\n        // Do not render protected text from that now-expired grant.\n        if (discardExpiredGrant()) return false;\n        var data = results[0];\n        var progressResult = results[1];\n        manifest = data;\n        timing = data.timingMap;\n        if (playbackObserver) playbackObserver.setContext({ enabled: session.measurementEnabled === true, chapterId: state.chapterId, audioRevision: selectedChapter.audioRevision, progressScope: session.progressScope });\n        root.dataset.originalsAccess = 'granted';\n        var validation = Core.validateTimingMap(timing, data.chapter.durationSeconds, data.chapter.audioSha256, data.transcriptSha256);\n        if (!validation.valid) {\n          timing = { mode: 'none', tokens: [] };\n          elements.sync.textContent = 'Sync unavailable';\n        }\n        elements.title.textContent = data.series.title + ' - ' + data.chapter.title;\n        root.querySelectorAll('[data-originals-duration-copy]').forEach(function (node) { node.textContent = Core.formatTime(data.chapter.durationSeconds); });\n        renderTranscript();\n        renderProse();\n        if (progressResult.readingOnly === true) {\n          restoreRecheckScope = null;\n          root.dataset.originalsFormat = 'read';\n          root.querySelectorAll('[data-originals-text-mode-button]').forEach(function (button) {\n            button.setAttribute('aria-pressed', button.dataset.originalsTextModeButton === 'read' ? 'true' : 'false');\n          });\n          root.querySelectorAll('[data-originals-text-mode-panel]').forEach(function (panel) {\n            panel.hidden = panel.dataset.originalsTextModePanel !== 'read';\n          });\n          showProgressChoice(null);\n          setPlaybackReady(false);\n          if (elements.resume) elements.resume.hidden = true;\n          elements.save.textContent = 'Reading place is separate from listening progress.';\n          setStatus('Ready to read', 'ready');\n          return true;\n        }\n        root.dataset.originalsFormat = 'audio';\n        var storedProgress = readStoredProgress();\n        var unsyncedDeviceProgress = Boolean(storedProgress && (storedProgress.deviceOnly === true ||\n          (restoreRecheckScope && restoreRecheckScope === session.progressScope)));\n        var matchedAccount = unsyncedDeviceProgress && !progressResult.localOnly &&\n          deviceProgressMatchesAccount(storedProgress, progressResult.record, data.chapter);\n        if (matchedAccount) unsyncedDeviceProgress = false;\n        progressSyncAvailable = !progressResult.localOnly && !unsyncedDeviceProgress;\n        applyProgress(progressSyncAvailable ? progressResult.record : storedProgress, unsyncedDeviceProgress);\n        restoreRecheckScope = null;\n        showProgressChoice(unsyncedDeviceProgress && !progressResult.localOnly ? progressResult.record : null);\n        if (progressResult.guestOnly) elements.save.textContent = 'Progress is saved on this device.';\n        else if (progressResult.localOnly) elements.save.textContent = 'Account sync unavailable. Progress stays on this device.';\n        else if (unsyncedDeviceProgress) elements.save.textContent = 'Unsynced device progress kept. Account sync paused to protect your place.';\n        else if (matchedAccount) elements.save.textContent = 'Device progress matches your account. Account sync restored.';\n        else elements.save.textContent = progressResult.record &&\n          (Number(progressResult.record.serverRevision) > 0 || Number(progressResult.record.positionSeconds) > 1 || progressResult.record.completed === true)\n          ? 'Listening place loaded from account.' : 'Account sync ready.';\n        setPlaybackReady(true);\n        if (sharedAudio && audio.dataset.sourceReady === 'true') {\n          state.speed = Core.validSpeed(audio.playbackRate);\n          root.querySelector('[data-originals-speed]').value = String(state.speed);\n          updateTime();\n          elements.play.textContent = audio.paused ? 'Play' : 'Pause';\n          setStatus(audio.paused ? 'Paused' : 'Playing', audio.paused ? 'paused' : 'playing');\n          if (!audio.paused) { startVisualLoop(); startCheckpoint(); }\n        } else setStatus('Ready to listen', 'ready');\n        return true;\n      }).catch(function (error) {\n        if (generation !== chapterGeneration || preparationEpoch !== preparationGeneration) return false;\n        if (sharedAudio && ownsSharedChapter()) sharedAudio.invalidate();\n        var endedOfferDenied = (promotionEnded || expiredPromotionSession()) && error &&\n          (error.code === 'dsd_plus_required' || error.code === 'authentication_required' ||\n            (!error.code && (error.status === 401 || error.status === 403)));\n        clearGrantExpiryTimer();\n        session = null;\n        manifest = null;\n        timing = null;\n        progressSyncAvailable = false;\n        showProgressChoice(null);\n        elements.transcript.innerHTML = '';\n        elements.read.innerHTML = '';\n        delete root.dataset.originalsProseRevision;\n        delete root.dataset.originalsFormat;\n        root.dataset.originalsAccess = 'denied';\n        setPlaybackReady(false);\n        elements.title.textContent = selectedChapter.title;\n        if (elements.retry) elements.retry.hidden = Boolean(error && (error.status === 401 || error.status === 403));\n        setStatus(endedOfferDenied ? 'Free period ended' : accessStatus(error), 'access-blocked');\n        showError(endedOfferDenied ? 'The free listening period ended. Your listening place was kept.' : accessError(error));\n        return false;\n      }).finally(function () {\n        if (generation === chapterGeneration && preparationEpoch === preparationGeneration) preparation = null;\n      });\n      return preparation;\n    }\n\n    function resetChapterState(preservePlaybackSession) {\n      var ownsPreviousAudio = !sharedAudio || typeof sharedAudio.matches !== 'function' ||\n        sharedAudio.matches(manifest ? manifest.chapter.id : state.chapterId, manifest ? manifest.chapter.audioRevision : currentChapter().audioRevision);\n      if (!preservePlaybackSession) restoreRecheckScope = null;\n      chapterGeneration += 1;\n      loadGeneration += 1;\n      if (cancelSourceLoad) cancelSourceLoad();\n      handledEnd = false;\n      if (ownsPreviousAudio) {\n        audio.pause();\n        if (playbackObserver) playbackObserver.setContext(null);\n        audio.removeAttribute('src');\n        audio.dataset.sourceReady = 'false';\n        audio.load();\n      }\n      clearGrantExpiryTimer();\n      session = null;\n      manifest = null;\n      timing = null;\n      progressSyncAvailable = false;\n      reconciliationBusy = false;\n      showProgressChoice(null);\n      preparation = null;\n      sourceLoad = null;\n      playRequest = null;\n      restoredProgress = null;\n      if (!preservePlaybackSession && ownsPreviousAudio) state.sessionId = window.crypto && typeof window.crypto.randomUUID === 'function' ? window.crypto.randomUUID() : state.sessionId;\n      activeToken = null;\n      elements.transcript.innerHTML = '';\n      elements.read.innerHTML = '';\n      delete root.dataset.originalsProseRevision;\n      delete root.dataset.originalsFormat;\n      elements.current.textContent = '0:00';\n      elements.duration.textContent = Core.formatTime(currentChapter().durationSeconds || 0);\n      elements.seek.value = '0';\n      elements.seek.max = String(currentChapter().durationSeconds || 0);\n      elements.play.textContent = 'Play';\n      elements.title.textContent = currentChapter().title;\n      setPlaybackReady(false);\n      stopCheckpoint();\n    }\n\n    function routeHasUnavailableChapter(route) {\n      return route.view === 'chapter' &&\n        ((route.seriesId && route.seriesId !== state.seriesId) ||\n          (route.chapterId && !chaptersById.has(route.chapterId)));\n    }\n\n    function showUnavailableChapter() {\n      if (manifest && !audio.paused) saveProgress('pause');\n      invalidChapterRoute = true;\n      resetChapterState();\n      setView('chapter', false);\n      delete root.dataset.originalsChapterId;\n      delete root.dataset.originalsAudioRevision;\n      root.dataset.originalsAccess = 'denied';\n      elements.title.textContent = 'Chapter unavailable';\n      elements.duration.textContent = '0:00';\n      elements.seek.max = '0';\n      if (elements.retry) elements.retry.hidden = true;\n      setStatus('Chapter unavailable', 'access-blocked');\n      showError('This chapter is unavailable. Choose an available chapter from the library.');\n    }\n\n    function selectChapter(chapterId, requestPlayback, continuation, pushHistory) {\n      if (!chaptersById.has(chapterId)) return;\n      if (manifest && !audio.paused) saveProgress('pause');\n      if (state.chapterId !== chapterId || invalidChapterRoute) {\n        invalidChapterRoute = false;\n        state.chapterId = chapterId;\n        resetChapterState();\n      }\n      syncChapterControls();\n      setView('chapter', pushHistory !== false);\n      prepareChapter().then(function (ready) { if (ready && requestPlayback) requestPlay(continuation); });\n    }\n\n    function stepChapter(offset) {\n      var index = chapters.findIndex(function (chapter) { return chapter.id === state.chapterId; });\n      var target = chapters[index + offset];\n      if (target) selectChapter(target.id, false);\n    }\n\n    function setSource(intentional, startAtZero) {\n      var selectedGeneration = chapterGeneration;\n      var selectedChapterId = state.chapterId;\n      return prepareChapter().then(function (prepared) {\n        if (!prepared || selectedGeneration !== chapterGeneration || selectedChapterId !== state.chapterId) return false;\n        if (!session || session.mode === 'read' || !session.mediaUrl) return false;\n        if (sourceLoad) return sourceLoad;\n        if (audio.dataset.sourceReady === 'true') return true;\n        var generation = ++loadGeneration;\n        setStatus('Loading audio', 'loading');\n        audio.src = session.mediaUrl;\n        audio.preload = intentional ? 'metadata' : 'none';\n        audio.dataset.sourceReady = 'true';\n        var pending = new Promise(function (resolve) {\n        var settled = false;\n        function done(ok) {\n          if (settled) return;\n          settled = true;\n          audio.removeEventListener('loadedmetadata', ready);\n          audio.removeEventListener('error', failed);\n          if (cancelSourceLoad === cancel) cancelSourceLoad = null;\n          resolve(ok && generation === loadGeneration && selectedGeneration === chapterGeneration && selectedChapterId === state.chapterId);\n        }\n        function cancel() { done(false); }\n        function ready() {\n          if (generation !== loadGeneration || selectedGeneration !== chapterGeneration || selectedChapterId !== state.chapterId) return done(false);\n          // Metadata can arrive after a temporary grant's exclusive end.\n          if (discardExpiredGrant()) return done(false);\n          var progress = restoredProgress || readProgress();\n          var handoff = startAtZero ? null : readInlineHandoff(true);\n          if (handoff) state.sessionId = handoff.sessionId;\n          // Completion is history; an intentional rewind remains the listening place.\n          audio.currentTime = startAtZero ? 0 : (handoff ? Core.clamp(Number(handoff.positionSeconds), 0, manifest.chapter.durationSeconds) : progress.positionSeconds);\n          audio.playbackRate = progress.speed;\n          state.speed = progress.speed;\n          state.autoNext = progress.autoNext;\n          followEnabled = progress.followAudio;\n          syncFollowControl();\n          root.querySelector('[data-originals-speed]').value = String(state.speed);\n          root.querySelector('[data-originals-auto-next]').checked = state.autoNext;\n          setStatus(handoff ? 'Continued from shared player' : 'Ready', 'ready');\n          updateTime();\n          done(true);\n        }\n        function failed() {\n          if (generation !== loadGeneration || selectedGeneration !== chapterGeneration || selectedChapterId !== state.chapterId) return done(false);\n          done(false);\n          audio.removeAttribute('src');\n          audio.dataset.sourceReady = 'false';\n          clearGrantExpiryTimer();\n          session = null;\n          setStatus('Audio error', 'error');\n          showError('The chapter audio could not be loaded. Tap Play to check access and retry.');\n        }\n        audio.addEventListener('loadedmetadata', ready, { once: true });\n        audio.addEventListener('error', failed, { once: true });\n        cancelSourceLoad = cancel;\n        audio.load();\n        });\n        sourceLoad = pending;\n        pending.then(function () { if (sourceLoad === pending) sourceLoad = null; });\n        return pending;\n      });\n    }\n\n    function requestPlay(continuation) {\n      if (invalidChapterRoute) return Promise.resolve(false);\n      if (playRequest) return playRequest;\n      var selectedGeneration = chapterGeneration;\n      var selectedChapterId = state.chapterId;\n      showError('');\n      var pending = setSource(true, continuation && continuation.startAtZero === true).then(function (ready) {\n        if (!ready || selectedGeneration !== chapterGeneration || selectedChapterId !== state.chapterId) return false;\n        if (discardExpiredGrant()) return false;\n        if (continuation && continuation.startAtZero === true) {\n          audio.currentTime = 0;\n          state.speed = Core.validSpeed(continuation.speed);\n          audio.playbackRate = state.speed;\n          root.querySelector('[data-originals-speed]').value = String(state.speed);\n          state.autoNext = continuation.autoNext === true;\n          root.querySelector('[data-originals-auto-next]').checked = state.autoNext;\n          updateTime();\n        }\n        if (window.DSDGMOR && typeof window.DSDGMOR.pauseActive === 'function') window.DSDGMOR.pauseActive('originals-audio-play');\n        var result;\n        try { result = audio.play(); } catch (error) { result = Promise.reject(error); }\n        return Promise.resolve(result).then(function () {\n          if (selectedGeneration !== chapterGeneration || selectedChapterId !== state.chapterId) return false;\n          if (discardExpiredGrant()) return false;\n          handledEnd = false;\n          setStatus('Playing', 'playing');\n          elements.play.textContent = 'Pause';\n          startVisualLoop();\n          startCheckpoint();\n          return true;\n        }).catch(function () {\n          if (selectedGeneration !== chapterGeneration || selectedChapterId !== state.chapterId) return false;\n          setStatus('Tap Play to continue', 'paused');\n          elements.play.textContent = 'Play';\n          showError('Playback was blocked. Use Play to continue.');\n          return false;\n        });\n      });\n      playRequest = pending;\n      pending.then(function () { if (playRequest === pending) playRequest = null; }, function () { if (playRequest === pending) playRequest = null; });\n      return pending;\n    }\n\n    function togglePlay() {\n      if (audio.paused || audio.ended) requestPlay();\n      else {\n        audio.pause();\n        setStatus('Paused', 'paused');\n        elements.play.textContent = 'Play';\n        if (!sharedAudio) saveProgress('pause');\n        stopCheckpoint();\n      }\n    }\n\n    function seekTo(value, requestPlayback, relative) {\n      setSource(true).then(function (ready) {\n        if (!ready) return;\n        // The first deliberate skip can load media and restore a saved place.\n        // Resolve relative offsets afterwards, including queued skip clicks.\n        var target = relative ? audio.currentTime + value : value;\n        audio.currentTime = Core.clamp(target, 0, manifest.chapter.durationSeconds);\n        if (handledEnd && audio.currentTime < manifest.chapter.durationSeconds) {\n          handledEnd = false;\n          if (audio.paused) {\n            setStatus('Paused', 'paused');\n            elements.play.textContent = 'Play';\n          }\n        }\n        updateTime();\n        saveProgress('seek');\n        if (requestPlayback) requestPlay();\n      });\n    }\n\n    function updateTime() {\n      var duration = manifest ? manifest.chapter.durationSeconds : 0;\n      elements.current.textContent = Core.formatTime(Core.clamp(audio.currentTime, 0, duration));\n      elements.duration.textContent = Core.formatTime(duration);\n      elements.seek.max = String(duration);\n      if (!elements.seek.matches(':active')) elements.seek.value = String(Core.clamp(audio.currentTime, 0, duration));\n    }\n\n    function syncFollowControl() {\n      if (elements.followInput) elements.followInput.checked = followEnabled;\n      if (!elements.readAlong) return;\n      elements.readAlong.setAttribute('aria-pressed', followEnabled ? 'true' : 'false');\n      elements.readAlong.textContent = elements.readAlong.dataset.label;\n      elements.readAlong.setAttribute('aria-label', elements.readAlong.dataset.label);\n    }\n\n    function setFollowEnabled(enabled, save) {\n      followEnabled = Boolean(enabled);\n      if (!followEnabled) followScrollTargetY = null;\n      syncFollowControl();\n      if (save) {\n        if (restoredProgress) restoredProgress.followAudio = followEnabled;\n        saveProgress('preference');\n      }\n    }\n\n    function showFollowTranscript() {\n      root.querySelectorAll('[data-originals-text-mode-button]').forEach(function (button) {\n        button.setAttribute('aria-pressed', button.dataset.originalsTextModeButton === 'follow' ? 'true' : 'false');\n      });\n      root.querySelectorAll('[data-originals-text-mode-panel]').forEach(function (panel) {\n        panel.hidden = panel.dataset.originalsTextModePanel !== 'follow';\n      });\n    }\n\n    var lastPlayerTop = null;\n    var lastHeaderScrollCheck = 0;\n    var headerResizeObserver = null;\n\n    function positionPlayerBelowHeader() {\n      var headerBottom = 0;\n      document.querySelectorAll('sticky-header, .section-header, header.header-wrapper, #shopify-section-header').forEach(function (header) {\n        var rect = header.getBoundingClientRect();\n        if (rect.bottom > 0 && rect.top < window.innerHeight) headerBottom = Math.max(headerBottom, rect.bottom);\n      });\n      var playerRect = elements.player && elements.player.getBoundingClientRect();\n      // A fixed strip needs real layout clearance above the chapter header/nav.\n      // Reuse this owner and its ResizeObserver; do not mount another player.\n      if (playerRect && Number.isFinite(playerRect.height) && playerRect.height > 0) {\n        var playerHeight = Math.ceil(playerRect.height) + 'px';\n        if (root.style.getPropertyValue('--dsd-originals-player-height') !== playerHeight) {\n          root.style.setProperty('--dsd-originals-player-height', playerHeight);\n        }\n      }\n      if (playerRect) document.querySelectorAll('.dsd-floating-menu-toggle').forEach(function (menu) {\n        var rect = menu.getBoundingClientRect();\n        if (rect.width > 0 && rect.height > 0 && rect.bottom > 0 && rect.top < window.innerHeight &&\n            rect.right > playerRect.left && rect.left < playerRect.right) headerBottom = Math.max(headerBottom, rect.bottom);\n      });\n      var top = Math.max(10, Math.round(headerBottom + 10));\n      if (top !== lastPlayerTop) {\n        root.style.setProperty('--dsd-originals-player-top', top + 'px');\n        lastPlayerTop = top;\n      }\n    }\n\n    function resumeReadAlong() {\n      if (manifest && manifest.availableFormats && manifest.availableFormats.transcript === false) return;\n      if (!manifest || !timing) {\n        setStatus('Preparing chapter', 'loading');\n        prepareChapter().then(function (ready) { if (ready) resumeReadAlong(); });\n        return;\n      }\n      showFollowTranscript();\n      var sourceWasReady = audio.dataset.sourceReady === 'true';\n      var livePosition = audio.currentTime;\n      var progress = readProgress();\n      setFollowEnabled(true, false);\n      setSource(true).then(function (ready) {\n        if (!ready) return;\n        var resumeAt = sourceWasReady && livePosition > 0 && !audio.ended\n          ? livePosition\n          : progress.positionSeconds;\n        audio.currentTime = Core.clamp(resumeAt, 0, manifest.chapter.durationSeconds);\n        setFollowEnabled(true, true);\n        updateTime();\n        updateTranscript(true);\n        requestPlay();\n      });\n    }\n\n    function prefersReducedReaderMotion() {\n      return root.dataset.readerMotion === 'reduced' ||\n        (typeof window.matchMedia === 'function' && window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n    }\n\n    function followActiveLine(frameTime, forceScroll) {\n      if (sharedAudio && !sharedAudio.visible()) return;\n      if (!activeToken || !followEnabled) return;\n      var activeLine = activeToken.closest('.dsd-originals__line') || activeToken;\n      var rect = activeLine.getBoundingClientRect();\n      var viewportHeight = window.innerHeight || document.documentElement.clientHeight;\n      var targetTop = viewportHeight * 0.42;\n      var playerRect = elements.player && elements.player.getBoundingClientRect();\n      if (playerRect && playerRect.bottom > 0 && playerRect.top < viewportHeight) {\n        targetTop = Math.max(targetTop, playerRect.bottom + 18);\n      }\n      var readerRect = elements.readerBar && elements.readerBar.getBoundingClientRect();\n      if (readerRect && readerRect.bottom > 0 && readerRect.top < viewportHeight) {\n        targetTop = Math.max(targetTop, readerRect.bottom + 18);\n      }\n      targetTop = Math.min(viewportHeight - 24, targetTop);\n      var delta = rect.top - targetTop;\n      var reducedMotion = prefersReducedReaderMotion();\n      if (reducedMotion && !forceScroll) return;\n      if (forceScroll) {\n        followGlideUntil = Date.now() + (reducedMotion ? 0 : 3500);\n        autoScrollUntil = Date.now() + (reducedMotion ? 120 : 4200);\n        followScrollTargetY = Math.max(0, window.scrollY + delta);\n        window.scrollTo({ top: Math.max(0, window.scrollY + delta), behavior: reducedMotion ? 'auto' : 'smooth' });\n        lastFollowFrameTime = frameTime || performance.now();\n        return;\n      }\n      if (Date.now() < followGlideUntil) {\n        if (followScrollTargetY === null || Math.abs(window.scrollY - followScrollTargetY) > 2) return;\n        followGlideUntil = 0;\n      }\n      if (Math.abs(delta) < 0.35) {\n        lastFollowFrameTime = frameTime;\n        return;\n      }\n      var elapsed = lastFollowFrameTime ? Math.min(64, Math.max(8, frameTime - lastFollowFrameTime)) : 16.67;\n      lastFollowFrameTime = frameTime;\n      autoScrollUntil = Date.now() + 120;\n      followScrollTargetY = Math.max(0, window.scrollY + delta * (1 - Math.exp(-elapsed / 240)));\n      window.scrollBy(0, delta * (1 - Math.exp(-elapsed / 240)));\n      followScrollTargetY = window.scrollY; // Include browser clamping and integer rounding.\n    }\n\n    function updateTranscript(forceScroll) {\n      if (!timing || !timing.tokens) return;\n      var token = Core.currentToken(timing.tokens, audio.currentTime);\n      var tokenChanged = Boolean(!activeToken || !token || activeToken.dataset.tokenId !== token.id);\n      if (activeToken && tokenChanged) activeToken.removeAttribute('data-active');\n      activeToken = token ? elements.transcript.querySelector('[data-token-id=\"' + CSS.escape(token.id) + '\"]') : null;\n      if (!activeToken) return;\n      activeToken.setAttribute('data-active', 'true');\n      if (followEnabled && (forceScroll || (tokenChanged && prefersReducedReaderMotion()))) followActiveLine(performance.now(), true);\n    }\n\n    function pauseFollowOnIntent(event) {\n      // Intent is meaningful even in a silence/timing gap with no active token.\n      if (!followEnabled || state.view !== 'chapter') return;\n      if (event.type === 'keydown') {\n        if (!['ArrowUp', 'ArrowDown', 'PageUp', 'PageDown', 'Home', 'End', ' '].includes(event.key)) return;\n        if (event.target && event.target.closest('button, input, select, textarea, [contenteditable=\"true\"]')) return;\n      }\n      setFollowEnabled(false, true);\n    }\n\n    function pauseFollowAfterScroll() {\n      if (!followEnabled || state.view !== 'chapter' || !activeToken || Date.now() < Math.max(autoScrollUntil, followGlideUntil)) return;\n      // A throttled browser may deliver our scroll event after the time guard.\n      // Acknowledging its actual destination is not evidence of manual scrolling.\n      // Explicit wheel/touch/keyboard intent still disables follow immediately.\n      if (followScrollTargetY !== null && Math.abs(window.scrollY - followScrollTargetY) <= 2) return;\n      var rect = activeToken.getBoundingClientRect();\n      // Tall paragraphs may extend outside the band while still being in focus.\n      if (rect.bottom < window.innerHeight * 0.2 || rect.top > window.innerHeight * 0.78) setFollowEnabled(false, true);\n    }\n\n    function startVisualLoop() {\n      cancelAnimationFrame(frame);\n      function tick(frameTime) {\n        if (destroyed || audio.paused || document.hidden) return;\n        if (discardExpiredGrant()) return;\n        updateTime();\n        updateTranscript();\n        if (followEnabled) followActiveLine(frameTime, false);\n        frame = requestAnimationFrame(tick);\n      }\n      frame = requestAnimationFrame(tick);\n    }\n\n    function startCheckpoint() {\n      stopCheckpoint();\n      checkpointTimer = setInterval(function () { if (!audio.paused) saveProgress('checkpoint'); }, 5000);\n    }\n\n    function stopCheckpoint() {\n      if (checkpointTimer) clearInterval(checkpointTimer);\n      checkpointTimer = null;\n    }\n\n    function renderTranscript() {\n      elements.transcript.innerHTML = '';\n      if (manifest && manifest.availableFormats && manifest.availableFormats.transcript === false) {\n        elements.transcript.textContent = 'Transcript is not available with this access.';\n        elements.sync.textContent = 'Read Along unavailable';\n        return;\n      }\n      timing.tokens.forEach(function (token) {\n        var paragraph = document.createElement('p');\n        paragraph.className = 'dsd-originals__line';\n        var text = document.createElement('span');\n        text.dataset.tokenId = token.id;\n        text.textContent = token.text;\n        var play = document.createElement('button');\n        play.type = 'button';\n        play.className = 'dsd-originals__from-here';\n        play.textContent = Core.formatTime(token.start);\n        play.setAttribute('aria-label', 'Play from ' + Core.formatTime(token.start));\n        play.addEventListener('click', function () { seekTo(token.start, true); });\n        paragraph.append(play, text);\n        elements.transcript.appendChild(paragraph);\n      });\n      elements.sync.textContent = timing.mode === 'word' ? 'Word sync verified' : 'Sentence sync - word alignment remains open';\n    }\n\n    function renderProse() {\n      elements.read.innerHTML = '';\n      if (manifest && manifest.availableFormats && manifest.availableFormats.read === false) {\n        delete root.dataset.originalsProseRevision;\n        elements.read.textContent = 'Reading is not available with this access.';\n        return;\n      }\n      root.dataset.originalsProseRevision = String(manifest.chapter.proseRevision || '');\n      (manifest.proseParagraphs || []).forEach(function (text, index) {\n        var paragraph = document.createElement('p');\n        paragraph.dataset.originalsProseAnchor = 'paragraph-' + (index + 1);\n        paragraph.textContent = text;\n        elements.read.appendChild(paragraph);\n      });\n      root.dispatchEvent(new CustomEvent('dsd:originals-proseready', { detail: { chapterId: state.chapterId } }));\n    }\n\n    function bind() {\n      root.addEventListener('click', function (event) {\n        var chapterChoice = event.target.closest('[data-originals-chapter-id]');\n        if (chapterChoice && chapterChoice !== root) {\n          if (chapterChoice === seriesListen && !manifest && !session) {\n            loadLibraryResume().then(function (checked) {\n              if (resumeAccountChanged || resumePageHidden) return;\n              if (checked || config.signedIn !== true) selectChapter(seriesListen.dataset.originalsChapterId, true);\n              else { setStatus('Listening place unavailable', 'error'); showError('Your listening place could not be checked. Try Listen again; your saved position has not been changed.'); }\n            });\n            return;\n          }\n          selectChapter(chapterChoice.dataset.originalsChapterId, chapterChoice.dataset.originalsPlay === 'true');\n          return;\n        }\n        var textMode = event.target.closest('[data-originals-text-mode-button]');\n        if (textMode) {\n          var mode = textMode.dataset.originalsTextModeButton;\n          root.querySelectorAll('[data-originals-text-mode-button]').forEach(function (button) { button.setAttribute('aria-pressed', button === textMode ? 'true' : 'false'); });\n          root.querySelectorAll('[data-originals-text-mode-panel]').forEach(function (panel) { panel.hidden = panel.dataset.originalsTextModePanel !== mode; });\n        }\n        var nav = event.target.closest('[data-originals-nav]');\n        if (nav) {\n          if (nav.dataset.originalsNav === 'chapter' && invalidChapterRoute) {\n            selectChapter(state.chapterId, false);\n          } else {\n            setView(nav.dataset.originalsNav, true);\n            if (nav.dataset.originalsNav === 'chapter') prepareChapter();\n          }\n        }\n        var action = event.target.closest('[data-originals-action]');\n        if (!action) return;\n        if (action.dataset.originalsAction === 'play') togglePlay();\n        if (action.dataset.originalsAction === 'back15') seekTo(-15, false, true);\n        if (action.dataset.originalsAction === 'forward30') seekTo(30, false, true);\n        if (action.dataset.originalsAction === 'read-along') resumeReadAlong();\n        if (action.dataset.originalsAction === 'sync-device-progress') reconcileProgress(true);\n        if (action.dataset.originalsAction === 'use-account-progress') reconcileProgress(false);\n        if (action.dataset.originalsAction === 'previous-chapter') stepChapter(-1);\n        if (action.dataset.originalsAction === 'next-chapter') stepChapter(1);\n        if (action.dataset.originalsAction === 'resume') { selectChapter(elements.resume && elements.resume.dataset.originalsResumeChapterId || state.chapterId, true); }\n        if (action.dataset.originalsAction === 'restart') { setView('chapter', true); seekTo(0, true); }\n        if (action.dataset.originalsAction === 'retry') {\n          audio.removeAttribute('src');\n          audio.dataset.sourceReady = 'false';\n          clearGrantExpiryTimer();\n          session = null;\n          manifest = null;\n          timing = null;\n          restoredProgress = null;\n          prepareChapter();\n        }\n      });\n      elements.seek.addEventListener('input', function () { elements.current.textContent = Core.formatTime(elements.seek.value); });\n      elements.seek.addEventListener('change', function () { seekTo(elements.seek.value, false); });\n      root.querySelector('[data-originals-speed]').addEventListener('change', function (event) {\n        state.speed = Core.validSpeed(event.target.value);\n        if (restoredProgress) restoredProgress.speed = state.speed;\n        audio.playbackRate = state.speed;\n        audio.preservesPitch = true;\n        saveProgress('speed');\n      });\n      root.querySelector('[data-originals-auto-next]').addEventListener('change', function (event) {\n        state.autoNext = event.target.checked;\n        if (restoredProgress) restoredProgress.autoNext = state.autoNext;\n        saveProgress('preference');\n      });\n      root.querySelector('[data-originals-follow]').addEventListener('change', function (event) { setFollowEnabled(event.target.checked, true); if (event.target.checked) updateTranscript(true); });\n      window.addEventListener('wheel', pauseFollowOnIntent, { passive: true });\n      window.addEventListener('touchmove', pauseFollowOnIntent, { passive: true });\n      window.addEventListener('keydown', pauseFollowOnIntent);\n      window.addEventListener('scroll', function () {\n        if (Date.now() - lastHeaderScrollCheck >= 100) {\n          lastHeaderScrollCheck = Date.now();\n          positionPlayerBelowHeader();\n        }\n        pauseFollowAfterScroll();\n      }, { passive: true });\n      window.addEventListener('resize', positionPlayerBelowHeader, { passive: true });\n      audio.addEventListener('waiting', function () { if (ownsSharedChapter() && !discardExpiredGrant()) setStatus('Buffering', 'buffering'); });\n      audio.addEventListener('playing', function () {\n        if (!ownsSharedChapter()) return;\n        if (discardExpiredGrant()) return;\n        setStatus('Playing', 'playing');\n        if (sharedAudio && manifest) { elements.play.textContent = 'Pause'; startVisualLoop(); startCheckpoint(); }\n      });\n      audio.addEventListener('pause', function () {\n        if (!ownsSharedChapter()) return;\n        if (!audio.ended) setStatus('Paused', 'paused');\n        if (sharedAudio) { elements.play.textContent = 'Play'; stopCheckpoint(); if (!audio.ended) saveProgress('pause'); }\n      });\n      audio.addEventListener('ended', function () {\n        if (!ownsSharedChapter()) return;\n        if (discardExpiredGrant()) return;\n        if (!audio.ended || !manifest || manifest.chapter.id !== state.chapterId || handledEnd) return;\n        handledEnd = true;\n        var index = chapters.findIndex(function (chapter) { return chapter.id === state.chapterId; });\n        setStatus(chapters[index + 1] ? 'Chapter finished.' : 'You\u2019re caught up.', 'ended');\n        saveProgress('ended');\n        state.sessionId = window.crypto && typeof window.crypto.randomUUID === 'function' ? window.crypto.randomUUID() : state.sessionId;\n        stopCheckpoint();\n        elements.play.textContent = 'Replay';\n        var continuation = new CustomEvent('dsd:originals-beforeautonext', {\n          cancelable: true,\n          detail: { chapterId: state.chapterId }\n        });\n        root.dispatchEvent(continuation);\n        if (state.autoNext && !continuation.defaultPrevented) {\n          if (chapters[index + 1]) selectChapter(chapters[index + 1].id, true, {\n            startAtZero: true,\n            speed: state.speed,\n            autoNext: state.autoNext\n          });\n        }\n      });\n      document.addEventListener('play', function (event) { if (event.target && event.target.tagName === 'VIDEO' && !audio.paused) audio.pause(); }, true);\n      document.addEventListener('visibilitychange', function () {\n        if (discardExpiredGrant()) return;\n        if (document.hidden) { saveProgress('hidden'); stopCheckpoint(); }\n        else if (!audio.paused) startVisualLoop();\n      });\n      window.addEventListener('popstate', function () {\n        var route = parseLocationRoute();\n        if (routeHasUnavailableChapter(route)) {\n          showUnavailableChapter();\n          return;\n        }\n        if (route.view === 'chapter' && chaptersById.has(route.chapterId) &&\n          (route.chapterId !== state.chapterId || invalidChapterRoute)) {\n          selectChapter(route.chapterId, false, null, false);\n          return;\n        }\n        setView(route.view, false);\n        if (route.view === 'chapter') prepareChapter();\n      });\n      window.addEventListener('pagehide', function (event) {\n        saveProgress('departure');\n        resumeGeneration += 1;\n        resumePageHidden = true;\n        clearGrantExpiryTimer();\n        if (!(event && event.persisted) && headerResizeObserver) headerResizeObserver.disconnect();\n        if (playbackObserver) playbackObserver.flush();\n        if (event && event.persisted) restoreRecheckScope = session && session.progressScope || null;\n        integration.destroy();\n        resetChapterState(true);\n        displayResume(0, false);\n      });\n      window.addEventListener('pageshow', function (event) {\n        resumePageHidden = false;\n        positionPlayerBelowHeader();\n        if (event && event.persisted) {\n          if (resumeAccountChanged) return;\n          integration = Integration.create(config);\n          // A cached grant can have been canceled or narrowed while this page was frozen.\n          // Keep the saved place and playback identity, but require fresh server policy.\n          resetChapterState(true);\n          root.dataset.originalsAccess = 'checking';\n          if (state.view === 'chapter' && !invalidChapterRoute) prepareChapter();\n          else loadLibraryResume();\n          return;\n        }\n        if (discardExpiredGrant()) return;\n        if (session) scheduleGrantExpiry(session);\n      });\n      positionPlayerBelowHeader();\n      if (typeof window.ResizeObserver === 'function') {\n        headerResizeObserver = new window.ResizeObserver(positionPlayerBelowHeader);\n        document.querySelectorAll('sticky-header, .section-header, header.header-wrapper, #shopify-section-header, .dsd-floating-menu-toggle').forEach(function (header) {\n          headerResizeObserver.observe(header);\n        });\n        if (elements.player) headerResizeObserver.observe(elements.player);\n      }\n    }\n\n    var initialRoute = parseLocationRoute();\n    var initialView = initialRoute.view;\n    setView(initialView, false);\n    if (!window.location.hash && (!window.performance || !window.performance.getEntriesByType || !window.performance.getEntriesByType('navigation').some(function (entry) { return entry.type === 'back_forward'; }))) {\n      window.scrollTo({ top: 0, behavior: 'instant' });\n      window.addEventListener('pageshow', function (event) { if (!event.persisted) window.scrollTo({ top: 0, behavior: 'instant' }); }, { once: true });\n    }\n    syncChapterControls();\n    syncFollowControl();\n    bind();\n    window.addEventListener('dsd:shopify-account:changed', invalidateLibraryResume);\n    window.addEventListener('dsd:shopify-logout', invalidateLibraryResume);\n    if (routeHasUnavailableChapter(initialRoute)) showUnavailableChapter();\n    else if (initialView === 'chapter') prepareChapter().then(function (ready) {\n      var handoff = readInlineHandoff(false);\n      if (ready && handoff && handoff.playing === true) requestPlay();\n    });\n    else {\n      setStatus('Choose a chapter to check access', 'ready');\n      loadLibraryResume();\n    }\n  }\n\n  document.querySelectorAll('[data-dsd-originals-library]').forEach(safeBoot);\n  document.addEventListener('shopify:section:load', function (event) { event.target.querySelectorAll('[data-dsd-originals-library]').forEach(safeBoot); });\n})();\n"],
  "mappings": "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",
  "names": []
}
