Skip to content

fix(site): update text link hover style to gold underline#1149

Merged
decepulis merged 5 commits intomainfrom
claude/brainstorm-retro-hover-styles-ENRHy
Apr 14, 2026
Merged

fix(site): update text link hover style to gold underline#1149
decepulis merged 5 commits intomainfrom
claude/brainstorm-retro-hover-styles-ENRHy

Conversation

@decepulis
Copy link
Copy Markdown
Collaborator

@decepulis decepulis commented Mar 27, 2026

Summary

Closes #810.

Text links currently lose their underline on hover, which removes the visual affordance that something is a link. This PR changes the hover behavior so the underline stays visible but shifts to gold (decoration-gold), giving clear interactive feedback without losing the link signal.

  • Replaces intent:no-underlineintent:decoration-gold across all text links and link-styled buttons
  • Replaces group-intent:no-underlinegroup-intent:decoration-gold on blog post card titles
  • Updates the shared typography styles that apply to all MDX-rendered links
  • Updates the corresponding test assertion

Scope: This only affects underlined text links and link-styled buttons. Navigation links, buttons, and other interactive elements that use intent:bg-* hover styles are unchanged. Links that use intent:underline (add underline on hover) are also left as-is.

Design note

This is the most conservative of the styles we explored — it preserves the existing underline pattern and simply adds a color shift for feedback. The door is still open to something more forward and branded (chromatic aberration, color inversion, etc.) if we want to lean harder into the retro/VHS aesthetic down the road.

Test plan

  • Hover text links in blog posts, footer, docs, legacy banner, edit page button
  • Hover link-styled buttons (renderer select, uploader retry)
  • Hover blog post card titles (grouped link)
  • Verify intent:bg-* nav/button hover styles are unaffected
  • Check both light and dark mode
  • Keyboard focus (Tab to links) shows the same gold underline

https://claude.ai/code/session_01Bde6SETLP8nGm6mFVeednB


Note

Low Risk
Low risk visual-only change: updates Tailwind hover intent classes for underlined text links and link-styled buttons, plus a small test assertion update.

Overview
Updates text-link hover styling across the site so underlines no longer disappear on hover; they remain visible and switch to a gold decoration.

Replaces intent:no-underline with intent:decoration-gold (and group-intent equivalents) in footers, the legacy banner, blog post cards, docs “Edit page” link, and installation UI link/buttons. Also updates shared typography link classes used by MDX/inline markdown and adjusts the related renderInlineMarkdown test expectation.

Reviewed by Cursor Bugbot for commit 3587b0a. Bugbot is set up for automated code reviews on this repo. Configure here.

Test page at /hover-styles showing 8 different link hover style
proposals for issue #810. Includes VHS/retro-themed options like
chromatic aberration, scanlines, color inversion, and bracket markers.

https://claude.ai/code/session_01Bde6SETLP8nGm6mFVeednB
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
v10-sandbox Ready Ready Preview, Comment Apr 14, 2026 4:39pm

Request Review

@netlify
Copy link
Copy Markdown

netlify bot commented Mar 27, 2026

Deploy Preview for vjs10-site ready!

Name Link
🔨 Latest commit 3587b0a
🔍 Latest deploy log https://app.netlify.com/projects/vjs10-site/deploys/69de6db112d98a0008b92256
😎 Deploy Preview https://deploy-preview-1149--vjs10-site.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 27, 2026

📦 Bundle Size Report

🎨 @videojs/html — no changes
Presets (7)
Entry Size
/video (default) 27.83 kB
/video (default + hls) 159.90 kB
/video (minimal) 25.40 kB
/video (minimal + hls) 157.52 kB
/audio (default) 25.89 kB
/audio (minimal) 23.50 kB
/background 4.16 kB
Media (8)
Entry Size
/media/background-video 1.04 kB
/media/container 1.73 kB
/media/dash-video 236.46 kB
/media/hls-video 133.26 kB
/media/mux-audio 155.86 kB
/media/mux-video 155.79 kB
/media/native-hls-video 3.43 kB
/media/simple-hls-video 15.71 kB
Players (3)
Entry Size
/video/player 6.74 kB
/audio/player 5.06 kB
/background/player 3.86 kB
Skins (17)
Entry Type Size
/video/minimal-skin.css css 3.47 kB
/video/skin.css css 3.49 kB
/video/minimal-skin js 25.37 kB
/video/minimal-skin.tailwind js 25.56 kB
/video/skin js 27.86 kB
/video/skin.tailwind js 27.93 kB
/audio/minimal-skin.css css 2.53 kB
/audio/skin.css css 2.50 kB
/audio/minimal-skin js 23.50 kB
/audio/minimal-skin.tailwind js 23.68 kB
/audio/skin js 25.91 kB
/audio/skin.tailwind js 26.02 kB
/background/skin.css css 117 B
/background/skin js 1.14 kB
/base.css css 157 B
/shared.css css 88 B
/skin-element js 1.35 kB
UI Components (24)
Entry Size
/ui/alert-dialog 969 B
/ui/alert-dialog-close 479 B
/ui/alert-dialog-description 378 B
/ui/alert-dialog-title 374 B
/ui/buffering-indicator 2.18 kB
/ui/captions-button 2.41 kB
/ui/compounds 3.86 kB
/ui/controls 2.08 kB
/ui/error-dialog 2.61 kB
/ui/fullscreen-button 2.40 kB
/ui/hotkey 1.70 kB
/ui/mute-button 2.37 kB
/ui/pip-button 2.39 kB
/ui/play-button 2.37 kB
/ui/playback-rate-button 2.43 kB
/ui/popover 1.88 kB
/ui/poster 1.97 kB
/ui/seek-button 2.41 kB
/ui/slider 1.50 kB
/ui/thumbnail 2.53 kB
/ui/time 2.24 kB
/ui/time-slider 3.68 kB
/ui/tooltip 1.98 kB
/ui/volume-slider 2.47 kB

Sizes are marginal over the root entry point.

⚛️ @videojs/react — no changes
Presets (7)
Entry Size
/video (default) 22.62 kB
/video (default + hls) 153.58 kB
/video (minimal) 20.32 kB
/video (minimal + hls) 151.20 kB
/audio (default) 18.61 kB
/audio (minimal) 17.11 kB
/background 754 B
Media (7)
Entry Size
/media/background-video 575 B
/media/dash-video 234.92 kB
/media/hls-video 132.07 kB
/media/mux-audio 154.66 kB
/media/mux-video 154.65 kB
/media/native-hls-video 1.98 kB
/media/simple-hls-video 14.38 kB
Skins (14)
Entry Type Size
/video/minimal-skin.css css 3.40 kB
/video/skin.css css 3.42 kB
/video/minimal-skin js 20.25 kB
/video/minimal-skin.tailwind js 23.72 kB
/video/skin js 22.54 kB
/video/skin.tailwind js 23.72 kB
/audio/minimal-skin.css css 2.43 kB
/audio/skin.css css 2.39 kB
/audio/minimal-skin js 17.03 kB
/audio/minimal-skin.tailwind js 19.52 kB
/audio/skin js 18.52 kB
/audio/skin.tailwind js 19.54 kB
/background/skin.css css 90 B
/background/skin js 272 B
UI Components (19)
Entry Size
/ui/alert-dialog 1.10 kB
/ui/buffering-indicator 1.20 kB
/ui/captions-button 1.88 kB
/ui/controls 1.26 kB
/ui/error-dialog 1.71 kB
/ui/fullscreen-button 1.88 kB
/ui/mute-button 1.86 kB
/ui/pip-button 1.88 kB
/ui/play-button 1.91 kB
/ui/playback-rate-button 1.91 kB
/ui/popover 1.93 kB
/ui/poster 1.16 kB
/ui/seek-button 1.90 kB
/ui/slider 2.59 kB
/ui/thumbnail 1.46 kB
/ui/time 1.31 kB
/ui/time-slider 2.06 kB
/ui/tooltip 2.25 kB
/ui/volume-slider 2.13 kB

Sizes are marginal over the root entry point.

🧩 @videojs/core — no changes
Entries (8)
Entry Size
. 4.79 kB
/dom 11.30 kB
/dom/media/custom-media-element 1.90 kB
/dom/media/dash 234.26 kB
/dom/media/hls 131.33 kB
/dom/media/mux 153.97 kB
/dom/media/native-hls 1.24 kB
/dom/media/simple-hls 13.65 kB
🏷️ @videojs/element — no changes
Entries (2)
Entry Size
. 999 B
/context 943 B
📦 @videojs/store — no changes
Entries (3)
Entry Size
. 1.39 kB
/html 695 B
/react 360 B
🔧 @videojs/utils — no changes
Entries (10)
Entry Size
/array 104 B
/dom 1.92 kB
/events 319 B
/function 327 B
/object 275 B
/predicate 265 B
/string 148 B
/style 190 B
/time 478 B
/number 158 B
📦 @videojs/spf — no changes
Entries (3)
Entry Size
. 40 B
/dom 13.30 kB
/playback-engine 13.17 kB

ℹ️ How to interpret

All sizes are standalone totals (minified + brotli).

Icon Meaning
No change
🔺 Increased ≤ 10%
🔴 Increased > 10%
🔽 Decreased
🆕 New (no baseline)

Run pnpm size locally to check current sizes.

- Text set to P2 size to match actual site body text
- Kept: underline color shift, color inversion, chromatic aberration
- Removed: thick underline, scanlines, slide-in, brackets, combo
- Color shift & inversion: instant (no transition)
- Chromatic aberration: short 0.15s transition, underline unchanged

https://claude.ai/code/session_01Bde6SETLP8nGm6mFVeednB
…erline

Replace `intent:no-underline` with `intent:decoration-gold` across all
text links and link-styled buttons. On hover/focus, the underline now
shifts to gold instead of disappearing, preserving the link affordance.

Closes #810

https://claude.ai/code/session_01Bde6SETLP8nGm6mFVeednB
@decepulis decepulis changed the title site: brainstorm retro hover styles for text links fix(site): update text link hover style to gold underline Apr 14, 2026
@decepulis decepulis marked this pull request as ready for review April 14, 2026 16:39
@decepulis decepulis merged commit b731cba into main Apr 14, 2026
24 checks passed
@decepulis decepulis deleted the claude/brainstorm-retro-hover-styles-ENRHy branch April 14, 2026 17:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: Text Link Hover State Should Have a Visual Style

2 participants