Skip to content

Light the key housing instead of outlining it on hover - #114

Merged
LynxTWO merged 1 commit into
masterfrom
feat/seam-light
Aug 24, 2026
Merged

LynxTWO merged 1 commit into
masterfrom
feat/seam-light

Conversation

@LynxTWO

@LynxTWO LynxTWO commented Aug 24, 2026

Copy link
Copy Markdown
Owner

Owner report 2026-08-23: the hover outline popped up and then persisted through the press. Stacked on #113, which is stacked on #112.

An outline is a UI convention wearing a console's clothes. A real key sits in a lit housing, and what changes as it moves is how much of that light gets past it. So there is a lamp behind the cap now, seen through the seam: hover brings it to a low glow, press takes it up continuously with the press rather than flipping between two states.

The asymmetry came free. The soft-body homography already shrinks and tilts a pressed face, so the cap pulls away from the housing further on one side and more of the lamp shows exactly there. The physics had it; the lamp only needed putting behind it. No per-edge logic.

Colour: warm amber-gold, #F0A24A dark and #C9762A light (a glow barely registers on a pale console, same lesson as the wells). Warm because the console is cool green-grey with a teal accent, so a warm light reads as illumination from inside the box rather than one more status colour. A test pins both that it is warm and that it is far enough from the accent to read as a different fixture.

The first attempt was wrong and rendering caught it. I sat the lamp 1.5 DIP proud of the face so a lit ring always existed - and it rendered as an amber outline, the exact thing being removed. Light at a seam is diffuse; a hard-edged stroke of any colour is a border. Ring gone, bloom carries it.

The restraint lives in the opacity ramp, not the hue: 0 at rest, 0.34 hover, 0.85 held. The C# ramp constants and the XAML setters are pinned equal by test, because if they drift the lamp jumps the instant a key is touched and nothing else would notice.

Also turns the standby legend down on your note - KeyStandby to #42786F/#577F79 and the glow from 0.30 to 0.20. That is the floor of its own contract at 3.2:1 to 3.8:1; below 3:1 it stops meeting even the large-text threshold, so it cannot go dimmer without moving the floor.

192 tests green. Rendered rest, hover and a corner press in both themes.

The hover outline popped up and then sat there through the press. An
outline is a UI convention wearing a console's clothes: a real key sits
in a lit housing, and what changes as it moves is how much of that
light gets past it.

So there is a lamp behind the cap now, seen through the seam around it.
Approaching a key brings it up to a low glow; pressing takes it up with
the press, continuously, rather than flipping between two states.

The asymmetry came free. The homography already shrinks and tilts a
pressed face, so the cap pulls away from the housing further on one
side and more of the lamp shows exactly there. The physics had it; the
lamp only needed putting behind it.

Warm amber-gold, deeper on the light bench where a glow barely
registers. Warm because the console is cool green-grey with a teal
accent, so a warm light reads as illumination from inside the box
rather than as one more status colour.

The first attempt sat the lamp a hair proud of the face so a lit ring
always existed, and it rendered as an amber outline - exactly the thing
being removed. Light at a seam is diffuse; a hard-edged stroke of any
colour is a border. The ring is gone and the bloom carries it.

The restraint is in the opacity ramp rather than the hue, and the ramp
constants are pinned equal to the style setters by test: if they drift
the lamp jumps the instant a key is touched, and nothing else in the
suite would see it.

Also turns the standby legend down to the floor of its contract, which
is as dim as it goes while still meeting the large-text threshold.
@LynxTWO
LynxTWO merged commit 715b9e5 into master Aug 24, 2026
6 checks passed
@LynxTWO
LynxTWO deleted the feat/seam-light branch August 24, 2026 02:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant