aboutsummaryrefslogtreecommitdiffstats
path: root/frontend-vanilla/public
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-02-18 21:52:21 +0000
committerClaude <noreply@anthropic.com>2026-02-18 21:52:21 +0000
commit1362f00d39e90aef8a8338887222541a5a992178 (patch)
tree11a98c935af0b3da96580425c2ca71ea5686e356 /frontend-vanilla/public
parent7776e81b39130c211eb0ec566c6467a28a9fa64c (diff)
downloadneko-1362f00d39e90aef8a8338887222541a5a992178.tar.gz
neko-1362f00d39e90aef8a8338887222541a5a992178.tar.bz2
neko-1362f00d39e90aef8a8338887222541a5a992178.zip
Fix theme performance regressions affecting mobile scroll
The new theme CSS files introduced several patterns that cause scroll jank and memory pressure, especially on mobile: - terminal.css: Full-viewport fixed pseudo-element with repeating gradient scanlines forced GPU compositing on every scroll frame. Now limited to desktop only with will-change layer promotion. - codex.css/sakura.css: text-rendering: optimizeLegibility on body triggered expensive kerning/ligature computation on all text. - codex.css: font-feature-settings forced text shaper on every glyph. - codex.css: hyphens: auto required dictionary lookups during layout. - style.css: transition: all on buttons and sidebar links caused unnecessary animation work during scroll hover state changes. - main.ts: checkReadItems did O(n) individual querySelector calls per scroll tick; switched to single querySelectorAll batch query. - Polling interval reduced from 1s to 3s (scroll handler already covers the normal case, polling is just a robustness fallback). https://claude.ai/code/session_0187FXrbScDSWfbNEk9SfJaj
Diffstat (limited to 'frontend-vanilla/public')
-rw-r--r--frontend-vanilla/public/themes/codex.css11
-rw-r--r--frontend-vanilla/public/themes/sakura.css3
-rw-r--r--frontend-vanilla/public/themes/terminal.css42
3 files changed, 34 insertions, 22 deletions
diff --git a/frontend-vanilla/public/themes/codex.css b/frontend-vanilla/public/themes/codex.css
index ece9e2d..50942e6 100644
--- a/frontend-vanilla/public/themes/codex.css
+++ b/frontend-vanilla/public/themes/codex.css
@@ -49,8 +49,11 @@ body {
background-color: var(--bg-color);
color: var(--text-color);
-webkit-font-smoothing: antialiased;
- text-rendering: optimizeLegibility;
- font-feature-settings: 'liga' 1, 'kern' 1, 'onum' 1;
+ /* text-rendering: optimizeLegibility triggers expensive kerning/ligature
+ computation on all text. On mobile with long feed content this causes
+ significant layout slowdowns during scroll. The default 'auto' lets
+ the browser optimize per-element. font-feature-settings similarly
+ forces the shaper to run on every glyph. Removed for performance. */
}
/* ---- Sidebar: Table of Contents ---- */
@@ -236,8 +239,8 @@ body {
font-size: 1rem;
line-height: 1.75;
color: var(--text-color);
- hyphens: auto;
- -webkit-hyphens: auto;
+ /* hyphens: auto removed -- requires dictionary lookups during layout for
+ every line break, expensive with long feed content during scroll. */
}
.item-description a {
diff --git a/frontend-vanilla/public/themes/sakura.css b/frontend-vanilla/public/themes/sakura.css
index f0fc990..48a1c0a 100644
--- a/frontend-vanilla/public/themes/sakura.css
+++ b/frontend-vanilla/public/themes/sakura.css
@@ -57,7 +57,8 @@ body {
background-color: var(--bg-color);
color: var(--text-color);
-webkit-font-smoothing: antialiased;
- text-rendering: optimizeLegibility;
+ /* text-rendering: optimizeLegibility removed -- causes expensive text
+ shaping on all content, leading to scroll jank on mobile. */
}
/* ---- Sidebar ---- */
diff --git a/frontend-vanilla/public/themes/terminal.css b/frontend-vanilla/public/themes/terminal.css
index dd9c1b2..48164c9 100644
--- a/frontend-vanilla/public/themes/terminal.css
+++ b/frontend-vanilla/public/themes/terminal.css
@@ -52,23 +52,31 @@ body {
-webkit-font-smoothing: antialiased;
}
-/* Subtle scanline overlay -- only in dark mode */
-.theme-dark body::after {
- content: '';
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- pointer-events: none;
- z-index: 9999;
- background: repeating-linear-gradient(
- to bottom,
- transparent,
- transparent 2px,
- rgba(0, 0, 0, 0.03) 2px,
- rgba(0, 0, 0, 0.03) 4px
- );
+/* Subtle scanline overlay -- only in dark mode, desktop only.
+ The fixed full-viewport pseudo-element with a repeating gradient
+ forces GPU compositing on every scroll frame. On mobile this causes
+ severe jank and memory pressure, so we limit it to large screens
+ and promote it to its own layer with will-change to avoid repainting
+ the content beneath it. */
+@media (min-width: 1025px) {
+ .theme-dark body::after {
+ content: '';
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ pointer-events: none;
+ z-index: 9999;
+ background: repeating-linear-gradient(
+ to bottom,
+ transparent,
+ transparent 2px,
+ rgba(0, 0, 0, 0.03) 2px,
+ rgba(0, 0, 0, 0.03) 4px
+ );
+ will-change: transform;
+ }
}
/* ---- Sidebar ---- */