ui/replayscrubbar.razor.scss
// Self-contained scrubbable-timeline styling. Lives on the ReplayScrubBar component itself, so it
// reliably styles the component's own internals (unlike a parent stylesheet, which s&box does not
// cascade into child components). Keeps the host HUD's thin white progress bar, with a slightly
// taller transparent hit area so it's easy to grab, plus a square scrub head + hover highlight.
$white: #f8f5e6;
.replay-scrub {
// Transparent hit zone taller than the visible bar so clicks/drags land easily. The bar inside
// spans the full width, so the panel's box maps 1:1 onto the timeline for the seek math.
width: 100%;
height: 38px;
align-items: center;
justify-content: center;
position: relative;
cursor: blank-hand;
// A parent stylesheet does NOT cascade into this child component, so the replay panel's
// pointer-events:none would otherwise leave the bar unclickable. Opt back in here.
pointer-events: all;
.bar {
position: absolute;
bottom: 6px;
width: 100%;
height: 10px;
background-color: rgba($white, 0.18);
border: 2px solid rgba($white, 0.5);
.fill {
position: absolute;
left: 0;
top: 0;
height: 100%;
background-color: $white;
}
}
// One tick per small time slice. Logarithmic height keeps very busy moments
// distinct without letting a single popular moment dominate the whole control.
.reaction-tick {
position: absolute;
bottom: 16px;
width: 2px;
margin-left: -1px;
background-color: #b9aa67;
pointer-events: none;
&.cluster { width: 4px; margin-left: -2px; background-color: #ddcc80; }
&.busy { background-color: #fff0a6; }
}
// Square scrub head centred on the playback position (left: %). Marks the exact seek point and
// gives the bar an obvious grab affordance.
.head {
position: absolute;
bottom: 1px;
width: 8px;
height: 20px;
margin-left: -4px;
background-color: $white;
border: 2px solid rgba($white, 0.5);
image-rendering: pixelated;
// Highlight only when the head ITSELF is hovered (not just anywhere on the timeline).
&:hover {
border-color: $white;
box-shadow: 0 0 10px 1px rgba($white, 0.7);
}
}
// Hovering anywhere on the timeline brightens the bar (but not the head — see .head:hover above).
&:hover .bar {
border-color: $white;
}
}