🔴 glass variant has no CSS rule — Prop accepts 'glass' but only .solid and .ghost have styles. Glass panels render with no background.
🟡 Double pseudo-element usage — ::before (scanlines) AND ::after (border) both use clip-path. Two extra compositing layers per panel. On pages with 5+ panels, that's 10 extra layers.
🔵 Entry animation always plays — panel-fade-up runs on every panel mount. If a panel is inside a tab that switches, it re-animates. Add a noAnimation prop.
🟡 No physical keyboard input — Only d-pad navigation + click. A user can't just type on their keyboard. The NameEntry parent doesn't pass physical key presses through.
🔵 No haptic feedback on mobile — navigator.vibrate(10) on key tap would improve feel.
🔵 Mobile stacks vertically but gives equal height to both panes. The left pane might need flex: 0 0 auto on mobile so the right pane gets the remaining space.
🟡 50KB of SVG path data in track_paths.ts — This is loaded for every page that imports TrackMap even if the map isn't visible. Consider dynamic import.
🔵 viewBox="0 0 3000 1440" is fixed — The track doesn't scale to fill narrow containers well. Consider adding preserveAspectRatio="xMidYMid meet".