Generated 2026-03-01. 71 items across reuse, quality, and efficiency.
_games.scss — --bg-color, --border-color, --accent-color, --text-muted (lines 322–440) are never defined. Should be --background-main, --translucent-medium, --page-accent, --sec-text-color.ipod.js:222 calls undefined playNextSong() — runtime error when any song finishes. Also currentSong (lines 121, 222, 296) is never declared, making it an implicit global.empty_fullscreen.html:29 has stale theme list — missing "matcha". Also duplicates theme-reading logic instead of loading url-params.js.initSwitch re-bound on every type change in gradient-generator.js:63,131 — accumulates duplicate event listeners.default.html:121–131). Should be conditional via front-matter flag or at minimum async/defer.defer (default.html:74). Render-blocking, unversioned CDN load.resize listeners on heavy canvas renders (lastfm-blog.js:226,410,605). Full canvas repaints at 60fps during resize. Add debounce/throttle.gradient-generator.js:170–171). generateHighResolution() fires synchronously on every preview update. Debounce or defer to download.circle-camera.js:87–91). Create once and reuse.getComputedStyle called every animation frame (circle-camera.js:100). Cache and re-read only on theme change.JSON.parse(JSON.stringify(...)) deep clone every Game of Life tick (gameoflife.js:110). Use double-buffer swap.gameoflife.js:157–196). Track dirty set.setInterval for Flappy Bird game loop (flappybird.js:98,293). Switch to requestAnimationFrame.3am-analysis.json (lastfm-blog.js:614 and :236). Share the data.random-wiki.js:23–50). Summary endpoint already returns everything needed.css() helper called 3–4 times per render in lastfm-blog.js. Cache values per theme change instead.querySelector per cell in Minesweeper flood-fill (minesweeper.js:199,255,268,278). Hundreds of attribute-selector queries on expert board. Cache in a 2D array at init.querySelectorAll('.guess-row') on every guess (colordle.js:148,291). Query once and cache.updateNavigationButtonStates re-queries elements already captured in outer scope (historical-browser.js:107–108).updateThemeSwitch/updateFontSwitch re-query DOM on every change (theme-manager.js:55–63, font-manager.js:26–33). Cache selectors at init.showColorDetails clones buttons via cloneNode on every click (color-palette.js:416–434). Use event delegation.renderMusicGrid double-queries grid children + O(n) scan per click (lastfm.js:149–168). Use event delegation.setTimeout loop in iPod (ipod.js:237–262). updateProgress() re-schedules forever even after player is nulled.setInterval in location-time.js:18 never cleared.drawArtistLifecycle missing from resize re-render list in lastfm-blog.js. All other charts re-render on resize; this one doesn’t.camera-to-ascii.js:8, circle-camera.js:9, flappybird.js:13, gameoflife.js:10.getCSSVariable helper — duplicated in lastfm-blog.js:62, gameoflife.js:35, circle-camera.js:17.camera-to-ascii.js:29–54, circle-camera.js:43–75 + fullscreen toggle.calculateOptimalFontSize into ascii-utils.js — duplicated in photo-to-ascii.js:11–13, camera-to-ascii.js:24–27.photo-to-ascii.js:18–29, color-palette.js:16–30.[data-copy] pattern from ui-components.js — reimplemented in color-palette.js:421–434, colordle.js:354–366.triggerDownload(blob, filename) utility — duplicated in photo-to-ascii.js:116–125, gradient-generator.js:329–336.rgbToHex/hexToRgb color utils — color-palette.js:438, gradient-generator.js:194.lastfm-blog.js — triplicated at lines 164–177, 330–344, 554–567.lastfm-blog.js — triplicated at lines 151–154, 317–320, 541–544.themechange event from theme-manager.js — eliminates duplicate MutationObserver in gameoflife.js:56–63 and lastfm-blog.js:641–646.url-params.js:11, theme-manager.js:67, empty_fullscreen.html:29.historical-browser.js:131–175 into navigateToHistoryIndex(newIndex).initSwitch from inline <script> in selection-switch.html to a standalone JS file loaded once.backdrop-filter: blur(10px) with @include translucent-surface or a dedicated mixin.outline pattern (9 occurrences) into a mixin or use shorthand.$breakpoint-tablet: 768px variable — hardcoded in _games.scss:18, _grids.scss:72 vs $breakpoint-mobile: 600px.@include no-select in _post.scss:131–135 and _ipod.scss:32–35 instead of manual vendor prefixes.@include system-font in _games.scss:209 and _forms.scss:176 instead of hardcoded 'Inter'.@include mono-font in _post.scss:119 instead of hardcoded "IBM Plex Mono"._buttons.scss:28,31 with CSS custom properties._cards.scss:79,89,95,103 with named custom properties.canvas-helpers.js — CanvasUtils has zero consumers.about.html layout classes (about__back, about__title, about__content) or remove the classes.music-loading, masonry-gallery, album-description in r2-album.html or remove the classes.font-weight: 500 in _games.scss:59,61.display: inline overridden by display: block in _post.scss:10–12.font-weight: 200 in _post.scss:115,120.text-decoration-color and text-decoration-thickness in _post.scss:100–103.userSelect styles in ipod.js:3–6 — already handled by CSS @include no-select.currentTheme variable in theme-manager.js:3 — derive from data-theme attribute.currentFont variable in font-manager.js:3 — derive from CSS custom property.isInitialLoad flag in theme-manager.js:4 — redundant with skipTransition parameter.generatedImageData in gradient-generator.js:25 — canvas already holds the data.loadAlbum params (r2-gallery.js:8) — derive containerId/loadingId from album.renderGradientToCanvas params (gradient-generator.js:218) — derive ctx from canvas.switchManager.setActive call in minesweeper.js:299.onclick in header.html with addEventListener for consistency."theme", "font", "colordle-stats", etc.).lastfm-blog.js.--spacing-lg used as font-size in _games.scss:226–244 — use a typography token.about.html standalone back link with shared header breadcrumb.switchManager from raw global into a proper module.