ui/helpoverlay.razor.scss
// First-run help overlay. Tokens inlined from _tokens.scss (see note there). Zero font-size /
// letter-spacing (glyph-corruption law); key chips use the body font (no mono). Every text is a
// <span> and each .row holds ONLY element children (key chip + description span) — mixing a bare
// text node with an element child corrupted the descriptions to solid blocks on the first cut.

HelpOverlay {
	position: absolute;
	inset: 0;
	pointer-events: none;
	font-family: Poppins, sans-serif;

	.backdrop {
		position: absolute;
		inset: 0;
		pointer-events: all;
		align-items: center;
		justify-content: center;
		background-color: rgba( 0, 0, 0, 0.45 );
		backdrop-filter: blur( 10px );
	}

	.card {
		flex-direction: column;
		width: 470px;
		padding: 28px 32px;
		gap: 12px;
		background-color: rgba( 15, 17, 21, 0.94 );
		border: 1px solid rgba( 255, 255, 255, 0.10 );
		border-radius: 18px;
		box-shadow: 0 20px 60px rgba( 0, 0, 0, 0.6 );
	}

	.head {
		flex-direction: column;
		gap: 4px;
		.title { font-weight: 700; color: #F2F4F7; }
		.sub { color: #F2F4F7; }
	}

	.section {
		color: #4AD9F2;
		font-weight: 700;
		margin-top: 4px;
	}

	.rows {
		flex-direction: column;
		gap: 8px;
	}

	.row {
		flex-direction: row;
		align-items: center;
		gap: 14px;

		.key {
			justify-content: center;
			align-items: center;
			width: 96px;
			flex-shrink: 0;
			color: #E8EAED;
			font-weight: 600;
			border: 1px solid rgba( 255, 255, 255, 0.12 );
			border-radius: 6px;
			padding: 6px 0;
			background-color: rgba( 255, 255, 255, 0.06 );
		}

		.d { color: #E8EAED; }
	}

	.footwrap {
		flex-direction: column;
		gap: 2px;
		margin-top: 2px;
		.foot { color: #F2F4F7; }
	}

	.btn {
		margin-top: 6px;
		justify-content: center;
		align-items: center;
		font-weight: 700;
		color: #0A161A;
		background-color: #4AD9F2;
		border-radius: 10px;
		padding: 13px 0;
		cursor: pointer;
		transition: all 0.12s ease;
		&:hover { background-color: #58E1F7; }
	}
}