About this set
Five transparent outline buttons for dark backgrounds, each with a different way of filling in on hover. Simple fill swaps to a solid light background with a dark label. Neon fill does the same in cyan and adds a soft glow. Slide fill moves a violet layer in from the left, and Rise fill grows a pink layer up from the bottom; both use a pseudo-element placed behind the label inside an isolated, overflow-hidden button, so the label always stays on top. Dashed keeps a grey dashed border that turns solid and brighter on hover. Use ghost buttons as secondary actions on dark heroes, footers and cards, next to a solid primary button. Each colour is two custom properties: –gh-c for the border, label and fill, and –gh-ink for the label once the button is filled, which keeps the hover state readable. All border and label colours reach at least 4.5:1 against the dark #101623 page. The arrows in the Slide and Rise labels are decorative and hidden from screen readers. The Bootstrap version maps the same two colours onto the –bs-btn-* colour variables of .btn.
What’s included
- Five hover fills: simple, neon glow, slide, rise and dashed-to-solid
- Pseudo-element fills kept behind the label with isolation: isolate
- Two custom properties per colour: --gh-c and --gh-ink
- Readable labels on the dark page and on every fill
- Transitions removed under prefers-reduced-motion
Accessibility
Each control is a native button named by its visible text; the arrow glyphs are wrapped in aria-hidden spans so they are not read out. Tab reaches every button and focus draws a 2px outline in the button's own colour, 3px outside the border. Under prefers-reduced-motion the colour change and the sliding fills happen without animation.
Customise it
Change --gh-c and --gh-ink on .gh or a modifier such as .gh-slide in plain CSS, or on .btn-ghost-* in Bootstrap, where they feed --bs-btn-color, --bs-btn-border-color and --bs-btn-hover-bg. In Tailwind edit the border-, text-, hover:bg- and before:bg- colour utilities.

















