{ if (e.clientY < 60 || window.innerHeight - e.clientY < 60) showUi(); }}>
{store.activeManga?.title} / {displayChapter?.name} {store.pageNumber} / {visibleChunkLastPage || "…"}
{#if zoomOpen}
{ captureZoomAnchor(); updateSettings({ readerZoom: clampZoom(Number(e.currentTarget.value) / 100) }); restoreZoomAnchor(); }} />
{/if}
{#if style === "double"} {/if} {#if style === "longstrip"} {/if} {#if !autoNext} {/if}
{#if markerOpen}
e.stopPropagation()} onmouseenter={() => { uiVisible = true; if (hideTimer) { clearTimeout(hideTimer); hideTimer = null; } }} >
{markerEditId ? "Edit marker" : "New marker"} · p.{store.pageNumber} {#if markerEditId} {/if}
{#each MARKER_COLORS as c} {/each}
{/if}
{#if showResumeBanner} {/if}
1} style={effectiveWidth != null ? `--effective-width:${effectiveWidth}px` : ""} role="presentation" tabindex="-1" onclick={handleTap} onmousedown={onInspectMouseDown} onwheel={(e) => { if (e.ctrlKey || style !== "longstrip") e.preventDefault(); }} onkeydown={(e) => { if (e.key === " " && style === "longstrip") { e.preventDefault(); containerEl?.scrollBy({ top: containerEl.clientHeight * 0.85, behavior: "smooth" }); } }} > {#if loading}
{/if} {#if error}

{error}

{/if} {#if style === "longstrip"} {#each stripToRender as chunk} {#each chunk.urls as url, i} {#await resolveUrl(url, chunk.urls.length - i)} {chunk.chapterName} – Page {i + 1} {:then src} {chunk.chapterName} – Page {i + 1} {/await} {/each} {/each}
{:else if style === "fade" && pageReady}
{#await resolveUrl(store.pageUrls[store.pageNumber - 1], 999)} Page {store.pageNumber} {:then src} Page {store.pageNumber} {/await}
{:else if style === "double" && pageReady}
{#if pageGroups.length}
{#each currentGroup as pg, i} {#await resolveUrl(store.pageUrls[pg - 1], 999)} Page {pg} {:then src} Page {pg} {/await} {/each}
{:else}
{/if}
{:else if pageReady}
{#await resolveUrl(store.pageUrls[store.pageNumber - 1], 999)} Page {store.pageNumber} {:then src} Page {store.pageNumber} {/await}
{/if}
{#if sliderMax > 1}
sliderHover = true} onmouseleave={() => { sliderHover = false; sliderDragging = false; }} onmousedown={(e) => { sliderDragging = true; const rect = (e.currentTarget as HTMLElement).getBoundingClientRect(); const ratio = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width)); jumpToPage(Math.round(1 + (rtl ? 1 - ratio : ratio) * (sliderMax - 1))); }} onmousemove={(e) => { if (!sliderDragging) return; const rect = (e.currentTarget as HTMLElement).getBoundingClientRect(); const ratio = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width)); jumpToPage(Math.round(1 + (rtl ? 1 - ratio : ratio) * (sliderMax - 1))); }} onmouseup={() => sliderDragging = false} >
{#if currentBookmark && currentBookmark.chapterId === displayChapter?.id} {@const bOrd = rtl ? lastPage - currentBookmark.pageNumber + 1 : currentBookmark.pageNumber} {@const bPct = lastPage > 1 ? ((bOrd - 1) / (lastPage - 1)) * 100 : 0}
{/if} {#each activeChapterMarkers as m (m.id)} {@const mOrd = rtl ? lastPage - m.pageNumber + 1 : m.pageNumber} {@const mPct = lastPage > 1 ? ((mOrd - 1) / (lastPage - 1)) * 100 : 0}
{/each} {#if sliderHover || sliderDragging}
{sliderPage} / {sliderMax}
{/if}
{/if}
{#if dlOpen && store.activeChapter} {@const queueable = adjacent.remaining.filter(c => !c.isDownloaded)}
dlOpen = false}>
e.stopPropagation()}>

Download

e.stopPropagation()}> {nextN}
{/if}