ui/gifexportoverlay.razor.scss
@import "Theme.scss";
// Sits over the replay. The top of the screen is left clear (the camera shrinks the replay into it —
// see GameManager.BeginGifPreview); the control panel is anchored to the bottom. Pointer-events are off
// on the clear region and on for the panel.
GifExportOverlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
pointer-events: none;
z-index: 950;
.controls {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
min-height: 38%;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 28px 40px 36px;
background-color: rgba(2, 74, 84, 0.96);
border-top: 6px solid $white;
pointer-events: all;
font-family: $font;
font-smooth: never;
}
.title {
justify-content: center;
font-size: 44px;
color: $white;
text-shadow: 3px 3px 0 $black;
margin-bottom: 16px;
}
// The two-head timeline component — size its outer box; it styles its own internals.
GifTimeline {
width: 70%;
margin-bottom: 14px;
}
.readout {
flex-direction: column;
align-items: center;
margin-bottom: 18px;
.range {
justify-content: center;
font-size: 30px;
color: $white;
font-family: $font-mono;
}
.stats {
justify-content: center;
font-size: 22px;
color: rgba($white, 0.7);
margin-top: 4px;
}
.warning {
justify-content: center;
font-size: 20px;
color: #ff9b9b;
margin-top: 6px;
}
}
// SIZE dropdown row. The dropdown needs a fixed width (a width-less one collapses to vertical text)
// and opens UPWARD (OpenUp) — the panel hugs the bottom of the screen, so a menu hanging below the
// header would fall offscreen. (The open menu only overlaps the readout, an earlier sibling, so paint
// order already draws it on top — no z-index needed here.)
.settings {
flex-direction: row;
align-items: center;
justify-content: center;
margin-bottom: 18px;
.setting-name {
font-size: 24px;
color: rgba($white, 0.7);
margin-right: 14px;
}
PixelDropdown {
width: 220px;
}
}
.buttons {
flex-direction: row;
justify-content: center;
button {
min-width: 200px;
height: 56px;
justify-content: center;
align-items: center;
margin: 0 12px;
font-size: 28px;
color: $black;
background-color: $white;
cursor: blank-hand;
&:hover { background-color: #dddd99; }
&.cancel {
background-color: #c98a8a;
&:hover { background-color: #d99a9a; }
}
&.disabled {
background-color: #6a6a6a;
color: rgba($black, 0.5);
cursor: blank-arrow;
&:hover { background-color: #6a6a6a; }
}
}
}
// ── result / failure / progress states ──
.path {
justify-content: center;
white-space: normal;
max-width: 90%;
font-family: $font-mono;
font-size: 22px;
color: rgba($white, 0.5);
margin-bottom: 10px;
}
.hint {
justify-content: center;
white-space: normal;
max-width: 80%;
font-size: 18px;
color: rgba($white, 0.5);
margin-bottom: 22px;
}
.error {
justify-content: center;
font-size: 24px;
color: #ff9b9b;
margin-bottom: 22px;
}
.progress {
width: 60%;
height: 26px;
background-color: rgba($white, 0.18);
border: 3px solid rgba($white, 0.6);
margin-bottom: 10px;
.progress-fill {
height: 100%;
background-color: #ffd584;
}
}
.progress-label {
justify-content: center;
font-size: 24px;
color: $white;
}
}