GH GambleHub

Hover effects and interactivity

1) Guidance role in UX

Hover/press/focus is a feedback language. The user must instantly understand:
  • "Is it interactive?" (hover/cursor/highlight)
  • "Where am I?" (focus style),
  • "What happens by click?" (status and affordance),
  • "Did the action work?" (active/pressed and subsequent feedback).

Principle: Effects reinforce meaning, not replace it. Key information and access to the action should not be hidden only behind the hover.

2) State model and semantics

Base set: 'default' → 'hover' → 'focus' → 'active/pressed' → 'disabled' → 'loading' (optional).
For links we add 'visited', for switches - 'checked'.

Distinguishing requirements:
  • Between states - a visual difference in shape/thickness/icon, not just color.
  • Text/icon contrast to background: ≥ 4. 5:1 (plain text), ≥ 3:1 (large/bold).
  • Focus is visible without pointing (keyboard/screen reader).

3) Devices and media requests

Not everything has a hover. Plan interactivity for different types of input:
css
/ There is an exact pointer and hover (mouse/trackpad )/
@ media (hover: hover) and (pointer: fine) {/hover effects/}

/ No hover or rough pointer (touch/remote control )/
@ media (hover: none), (pointer: coarse) {/alternatives to hover/}

/ Any type of pointer (hybrid devices )/
@ media (any-hover: hover) {/minimal improvements/}
Rules:
  • On touch devices, pointing effects are not critical for detecting action - use explicit affordances: color/icon/frame/hint.
  • Do not hide navigation/controls only "under hover."

4) Durations and curves

Short and predictable:
  • Hover: 120-180ms
  • Focus: 120-180ms
  • Active/Pressed: 80–120 мс
  • Ripple/ink (if used): ≤ 240 ms, 1 cycle

The default curve is' cubic-bezier (0. 2, 0, 0. 2, 1)`

Active - faster ('cubic-bezier (0. 4, 0, 1, 1) '), the output is softer (' cubic-bezier (0, 0, 0. 2, 1)`).

5) Design system tokens (example)

json
{
"interactive": {
"duration": { "hover": 160, "focus": 160, "active": 90 },
"easing": { "std": "cubic-bezier(0. 2,0,0. 2,1)", "acc": "cubic-bezier(0. 4,0,1,1)" },
"shadow": { "hover": "var(--elev-2)", "focus": "0 0 0 3px var(--focus-ring)" },
"opacity": { "disabled": 0. 38, "muted": 0. 64 }
}
}

6) Buttons: reference pattern

Default: readable text ≥ 4. 5:1 to fill.
Hover: − Δ L background 0. 02–0. 04, light shadow, pointer '.
Active: − more Δ L 0. 02–0. 04, shortened shadow/indentation (scale 0. 98), lasts. 80-100 ms.
Focus: contrast ring 2-3 px without blur.
Disabled: курсор `not-allowed`/`default`, opacity ≤ 0. 38, no hover effects.

css
.button {
transition: background-color. 16s var(--ease), transform. 09s var(--ease-acc), box-shadow. 16s var(--ease);
}
@media (hover:hover) and (pointer:fine) {
.button:hover  { background: var(--btn-bg-hover); box-shadow: var(--shadow-hover); }
}
.button:active  { transform: scale(.98); }
.button:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--focus-ring); }
.button[disabled] { opacity:.38; pointer-events: none; }

7) Links and text actions

Distinguishing not only by color: underline by default or on hover/focus.
For guidance: underline enhancement (thickness/offset), slight change in tone.
'Visited'is a different shade of the same palette, the contrast is preserved.

css a { text-decoration: underline; text-underline-offset:.12em; }
@media (hover:hover) and (pointer:fine) {
a:hover { text-underline-offset:.2em; }
}
a:focus-visible { outline: none; box-shadow: 0 0 0 3px var(--focus-ring); }

8) Cards, lists, tables

Cards:
  • Hover: soft shadow/frame highlight, cursor'pointer' only if the whole card is clickable.
  • Active: short indentation, title highlight.
  • Focus: a visible ring around the card, not just inside.
Table rows:
  • Hover background with Δ L 0. 02–0. 04; the active row is a clear border.
  • Clicks on a line are allowed only with explicit affordance ("→" icon, hint).
Lists:
  • Carefully limit the "ladder" of cascade delays - a maximum of 6-8 elements (stagger 20-30 ms).

9) Input forms and fields

Hover for fields: thin backlighting of the frame (Δ L ~ 0. 05), without changing the block size.
Focus: contrast ring + frame color change; placeholder remains distinguishable (≥ 3:1).
Error: color + icon/text; short "shake" is valid ≤ 6 px, ≤ 140 ms, once.

10) Icons and small targets

Increase the click zone to 32 × 32 (desktop )/40 × 40 (mobile), even if the icon itself is 20-24 px.
Hover: changes opacity/fill/thickness, 1-2 properties maximum.
Active: short "snap" by scale 0. 98.
Focus: ring by click zone container.

11) Accessibility (A11y) and keyboard

Support ': focus-visible' (we do not show focus styles for the mouse, we show them for the keyboard).
Elements that create hover hints must have a focus equivalent (the same content appears on the Tab/Enter key).
Aria-attributes: interactives have 'role', 'aria-pressed '/' aria-expanded '/' aria-current' by situation.
Prefers-reduced-motion: replace scale/shift with minimum (opacity/fill), turn off ripples.

css
@media (prefers-reduced-motion: reduce) {
{ transition-duration:.01ms! important; animation: none! important; }
}

12) Performance

Animate only 'opacity' and 'transform'; avoid'width/height/left/top ', heavy blur/shadows on multiple elements.
Use 'will-change' sparingly; retract after transition completion.
On lists/tables - minimal effects, without "global" repaint.

13) Hover-intent and "stickiness"

On the desktop, reduce false hover triggers:
  • The delay threshold is 80-120 ms before showing a complex tooltip/menu.
  • "Stickiness" of the cursor: if the user moves from the item to the menu at an angle, we give 200-300 ms of "corridor" (Fitts triangle).
  • With a touch - replace hover with press or an explicit "more" button.

14) Tooltip/menus/dropdowns

Opening: hover-intent (desktop )/press (touch), closing - care/blur/ESC.
Position - to the source, the arrow is aligned; max-width and hyphenation are enabled.
Availability: 'role = "tooltip"', associate 'aria-descripedby'; for menu - 'role = "menu" '+ arrow control.

15) The specifics of iGaming

Coefficients/leadboards: hover highlights the row/cell, but does not change the positioning metrics (without "jumps").
Tournament/bonus cards: hover can "revive" the frame/icon, but the text CTA and conditions remain readable (≥ 4. 5:1).
Responsible notifications (18 +, limits): without distraction effects; hovering only allows underlining of links and clear focus.
Bet/buy buttons: active-feedback is mandatory (visual click/indent) and unambiguous disable after sending.

16) Examples of interface recipes

Button-CTA (light/dark):
css
.cta {
background: var(--role-primary);
color: var(--on-primary);
transition: background-color. 16s var(--ease), transform. 09s var(--ease-acc), box-shadow. 16s var(--ease);
}
@media (hover:hover) and (pointer:fine) {
.cta:hover { background: var(--role-primary-hover); box-shadow: var(--elev-2); }
}
.cta:active { transform: scale(.98); }
.cta:focus-visible { box-shadow: 0 0 0 3px var(--focus-ring); }
Card:
css
.card { transition: box-shadow. 16s var(--ease), border-color. 16s var(--ease); }
@media (hover:hover) and (pointer:fine) {
.card:hover { box-shadow: var(--elev-2); border-color: var(--border-strong); }
}
.card:focus-visible { box-shadow: 0 0 0 3px var(--focus-ring); }
Table row:
css
.table tr { transition: background-color. 12s var(--ease); }
@media (hover:hover) and (pointer:fine) {
.table tr:hover { background: var(--row-hover); }
}
.table tr:focus-visible { outline: 2px solid var(--focus-ring); outline-offset: -2px; }

17) Anti-patterns

Hide critical actions/menus only for hover.
Change sizes/layouts on hover (layout jumps).
Rely only on color to distinguish states.
Flicker, endless pulsations, "acid" glow on texts.
Lack of focus styles or their invisibility on a dark theme.
Hover 'pointer' over non-interactive elements.

18) QA checklist

Availability

  • All interactives are reachable by keyboard; focus we see.
  • Hover content is available by 'focus '/' aria'.
  • The contrast of text and icons corresponds to WCAG.

Behavior

  • Hover/active/disabled/visited are distinguishable by shape and tone.
  • No response delay> 120ms.
  • There is an alternative to hover on the touch.

Performance

  • Only 'transform '/' opacity' are animated.
  • No heavy blur/shadows on multiple elements.
  • On long lists, effects are minimized.

19) Documentation in the design system

Status table for basic components (buttons, links, cards, fields, table rows).
Duration/curve/shadow tokens and sample code for light/dark.
"Hover vs Touch" section: rules of alternatives and examples.
"Do/Don't" with short clips and contrast scores.

Brief Summary

Targeting effects are an auxiliary but critical part of the interface language. Keep them brief and predictable, keep the keyboard and touch, provide contrast and visible focus, animate only cheap properties. Then interactivity enhances clarity and speed of action, rather than hindering them.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Telegram
@Gamble_GC
Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.