ui/difficultypage.razor.scss
// Difficulty — a fullscreen page over the lobby (2026-10-05), in Map select's look: the presets and the settings down the left,
// the setting pointed at far right. Inter, solid strips with a left rule, the gold accent.
//
// ⛔ CLASS NAMES THE LOBBY DOESN'T USE (`dif…`). This page renders INSIDE the lobby's root, so every `.lobby .x` rule in
// LobbyMenu.razor.scss reaches an element of ours called `.x` (MapBrowser.razor.scss's first note, learnt the hard way).
//
// ⚠️ `pointer-events: all`, because the lobby's root is `none`: a panel that declares neither cannot be clicked in s&box.
//
// ⚠️ SIZES IN THE 1080-HIGH UI SPACE, like the lobby's and Map select's.
$gold: #ffd479;
.difpage
{
font-family: Inter;
position: absolute;
top: 0px; left: 0px; right: 0px; bottom: 0px;
width: 100%;
height: 100%;
pointer-events: all;
background-color: #000;
.difbody
{
position: absolute;
top: 0px; left: 0px; right: 0px; bottom: 0px;
width: 100%;
height: 100%;
flex-direction: row;
padding: 56px 64px;
}
// ── the left column: title, presets, settings ─────────────────────────────
.difleft
{
flex-direction: column;
width: 580px;
flex-shrink: 0;
}
.diftitle
{
font-size: 44px;
font-weight: 600;
color: #fff;
text-transform: uppercase;
letter-spacing: 2px;
}
// ⚠️ THE PRESETS ARE MAP SELECT'S TABS: an underline carries the choice, not a filled pill
.diftabs
{
flex-direction: row;
align-items: center;
flex-shrink: 0;
margin-top: 8px;
.diftab
{
flex-direction: row;
align-items: center;
padding: 8px 0px;
margin-right: 28px;
font-size: 14px;
text-transform: uppercase;
letter-spacing: 1.5px;
color: #6f747c;
border-bottom: 2px solid rgba( 0, 0, 0, 0 );
cursor: pointer;
&:hover { color: #c9cdd4; }
&.on
{
color: #fff;
border-bottom: 2px solid $gold;
}
// ⚠️ A SECTION WITH A SETTING MOVED OFF THE PRESET (2026-10-05): its rows are out of sight, so its tab says so
.difdot
{
width: 6px;
height: 6px;
margin-left: 7px;
border-radius: 3px;
background-color: $gold;
}
}
// ⚠️ "CUSTOM" BESIDE THE TABS, NOT A FOURTH TAB: it is not something to pick, it is what touching a setting makes
.difcustom
{
padding: 3px 8px;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1.2px;
color: #000;
background-color: $gold;
}
}
.difhint
{
flex-shrink: 0;
margin-top: 10px;
margin-bottom: 8px;
font-size: 13px;
color: #7d828a;
}
// ⚠️ THE SECTIONS' TABS (2026-10-05): the presets' own look, a little below them so the two rows read as two choices
.diftabs.difsections
{
margin-top: 14px;
margin-bottom: 10px;
}
// ⛔ THE LIST SCROLLS; ITS ROWS DO NOT SHRINK (Map select's rule): sixteen rows and four headings are more than the column
// holds at 1080, and squeezed rows print their labels over each other.
.diflist
{
flex-direction: column;
flex-grow: 1;
flex-shrink: 1;
overflow-y: scroll;
.difrow
{
flex-direction: row;
align-items: center;
flex-shrink: 0;
padding: 6px 10px 6px 16px;
margin-bottom: 4px;
background-color: #111317;
border-left: 2px solid #2a2e36;
.diflabel
{
flex-grow: 1;
font-size: 16px;
color: #b9bec6;
}
.difvalue
{
width: 150px;
font-size: 16px;
color: #e3e6ea;
text-align: center;
}
.difarrow
{
width: 30px;
height: 30px;
flex-shrink: 0;
align-items: center;
justify-content: center;
font-size: 20px;
color: #8d939c;
background-color: #191c22;
cursor: pointer;
&:hover
{
color: #fff;
background-color: #262a32;
}
// ⚠️ AT THE END OF ITS RANGE: dimmed, and the click does nothing (`Step`)
&.off
{
color: #33373e;
cursor: default;
&:hover { background-color: #191c22; }
}
}
&:hover
{
background-color: #191c22;
.diflabel { color: #fff; }
}
// ⚠️ "ON" IS THE SETTING DESCRIBED ON THE RIGHT, which stays lit when the cursor leaves the list
&.on
{
background-color: #1f232a;
border-left: 2px solid $gold;
.diflabel { color: #fff; }
}
// ⚠️ A VALUE MOVED OFF ITS PRESET READS GOLD, so a custom difficulty shows where it differs at a glance
&.changed .difvalue { color: $gold; }
}
}
.diffoot
{
flex-direction: row;
flex-shrink: 0;
margin-top: 18px;
.difbtn
{
padding: 10px 18px;
margin-right: 10px;
font-size: 15px;
color: #a3a8b0;
background-color: #111317;
border-left: 2px solid #2a2e36;
cursor: pointer;
&:hover
{
color: #fff;
background-color: #191c22;
border-left: 2px solid #5a5f68;
}
}
}
// ── the setting pointed at, far right ────────────────────────────────────
.difright
{
flex-direction: column;
flex-shrink: 0;
width: 600px;
margin-left: auto;
justify-content: center;
align-items: flex-start;
}
.difname
{
font-size: 52px;
font-weight: 700;
color: #fff;
text-transform: uppercase;
letter-spacing: 1px;
margin-bottom: 14px;
}
.difdesc
{
width: 600px;
font-size: 20px;
color: #c9cdd4;
}
// ⚠️ THE THREE PRESETS SIDE BY SIDE: the one it started from has a grey rule, the one the value matches now a gold one
.difcompare
{
flex-direction: row;
margin-top: 26px;
.difcol
{
flex-direction: column;
width: 180px;
padding: 14px 16px;
margin-right: 10px;
background-color: #111317;
border-top: 2px solid #2a2e36;
.difcolname
{
font-size: 12px;
text-transform: uppercase;
letter-spacing: 1.5px;
color: #6f747c;
}
.difcolval
{
margin-top: 6px;
font-size: 24px;
font-weight: 600;
color: #9ba0a8;
}
&.base { border-top: 2px solid #5a5f68; }
&.match
{
border-top: 2px solid $gold;
.difcolval { color: #fff; }
}
}
}
.difnow
{
margin-top: 18px;
font-size: 15px;
text-transform: uppercase;
letter-spacing: 1.5px;
color: #c9cdd4;
&.changed { color: $gold; }
}
// ⚠️ A SETTING THE GAMEMODE HAS NOTHING FOR (`DifficultyState.GamemodeNote`), amber under its description
.difwarn
{
width: 600px;
margin-top: 14px;
font-size: 16px;
color: #f0b44c;
}
// ⚠️ WHEN THE SETTINGS APPLY: a plain line now the page is wired (it was the amber "not wired yet" warning)
.difnote
{
margin-top: 40px;
font-size: 13px;
letter-spacing: 1px;
color: #8d939c;
}
}