- addCh() no longer calls renderTab() so search results survive ADD clicks
- Progress bar hit target expanded to 16px (visual stays 3px, 6px on hover)
- np-strip gets pointer-events:none so scrubber clicks aren't blocked
- pb-thumb reanchored with top:50% translateY(-50%) for any bar height
- apiFetch() and validateKey() wrap fetch in try-catch for network errors
- stopVideo() in loadCh() wrapped in try-catch for consistency
- Comments added throughout: section banners, function docs, inline notes
Co-Authored-By: claude-flow <ruv@ruv.net>
Layout:
- Move NOW PLAYING ticker into #np-strip above scrubber; #bb is controls-only at 46px
- --bot-h: 76px → 46px; #tc repositioned to clear new ticker strip
- #np-strip added to idle slide-out animation
Bug fixes:
- Channel bug (#ch-bug) now hides during title card display, restores after
- Reset A.npTitle/A.npArtist in loadCh() so ticker always updates on channel change
- Hamburger (☰) and C key always open to MY LIST tab
Visual:
- .gt gradient 140px → 72px, .gb gradient 220px → 140px (less intrusive)
Co-Authored-By: claude-flow <ruv@ruv.net>
- Remove margin-top:-10px from #np-ticker — leftover from old single-row layout,
combined with overflow:hidden on .np-wrap it was pushing text top outside the
container and clipping it
- Increase iframe overscan 1.04→1.12 (6% per side instead of 2%), pushing the
YouTube title overlay ~115px off-screen at 1920px viewport width
Co-Authored-By: claude-flow <ruv@ruv.net>
- Add secondary .btn-s (cyan outline) button above ENTER VIDFLOW that opens the API key guide modal
- Simplify the hint text — the button makes the action self-evident
- Increase .sp-skip font-size 11px → 13px, brighten demo mode link color
- Wire #get-key-btn in initApiGuide() alongside existing #api-guide-btn
Co-Authored-By: claude-flow <ruv@ruv.net>
Corrected based on actual Google Cloud Console experience:
- Step 3 is now 'Create credentials' button on the API details page (not left sidebar)
- Choose Public data → Next to generate the key
- Key shown immediately on screen; can copy and use as-is
- Optional restriction flow: Restrict key → type youtube → select API → OK → Save → Credentials sidebar → Show key
Co-Authored-By: claude-flow <ruv@ruv.net>
- Remove overflow:hidden from .bb-top; give .np-wrap explicit 26px height to stop ticker text being vertically clipped
- Remove redundant gear icon from top bar (settings accessible via hamburger menu)
- ENDED state: try nextVideo(), fallback to playVideoAt(0) after 1.2s so last-video playlists loop
- Persist shuffle state to localStorage from both the toolbar button and S keyboard shortcut
- Replace setup hint with direct YouTube API link + "What's an API key?" modal with 4-step guide for first-time users
Co-Authored-By: claude-flow <ruv@ruv.net>
- Bottom bar: two-row layout — ticker above centered controls
- Ticker speed halved (0.5px/frame) and longer bottom bar (76px)
- Pop-out overlay: shows "PLAYING IN MINI PLAYER" when popup is open
- Pop-out re-press: focuses existing popup window instead of opening a new one
- Clear overlay and popoutWin ref when video returns from popup
Co-Authored-By: claude-flow <ruv@ruv.net>
- Fix keyboard shortcuts breaking after +/- channel change (window.focus on PLAYING)
- Fix + and gear buttons not staying open (document close handler exclusions)
- Remove hotkey hint bar (moved to settings panel later)
- Title truncation: 2-line clamp for playlist and channel list titles
- sizePW: 4% buffer ensures YouTube native title never bleeds into viewport
- Mobile: hide pop-out button on ≤600px
Co-Authored-By: claude-flow <ruv@ruv.net>
Includes all spec features plus pop-out player with bidirectional video transfer:
- YouTube IFrame API + Data API v3 channel management
- Idle/broadcast mode, channel flip animation, NCO onboarding
- Pop-out player (⧉/P) transfers video to popup; P closes and returns it
Co-Authored-By: claude-flow <ruv@ruv.net>