OVERSCANUI KIT
no button at all a worn bezel with weight channels do not converge zero depth instrumented, full of smoke a field of real characters a camera looking out additive, so no shadow hairlines, no new shader no raster, so no scanlines

A bevel encodes a light direction, which means it cannot be inverted, only re-lit. That one fact decides the whole family: filter: invert(1) on a bevelled control swaps the light pair for the dark pair while leaving both on the same sides, and that swap is the definition of sunken, so every button comes out looking pressed. Nothing here inverts anything. Each theme declares where its light comes from; the rings are derived from that declaration and from the theme's own surfaces by tools/palette.py, which gates them. Sunken is the same two colours on the opposite sides, which is what a well looks like under a fixed light. The dot on each control marks the direction that theme declared.

And a bevel states an affordance. Raised means pressable, sunken means a well that takes input, and a bevel on something that is neither is lying — the same standard the ornament is held to. That is checked in audit.html rather than asserted here: every .ov-bevel has to be operable.

raised, pressable presseddeep, two rings a well that takes input refusing, so not pressable
demo/bevel.html, from this page
import 'overscan'
import 'overscan/overscan.css'

<button class="ov-bevel"></button>
terminal light 315°, rings 2px
variation: aria-pressed="true"
import 'overscan'
import 'overscan/overscan.css'

<button
  class="ov-bevel"
  aria-pressed="true"
></button>
industrial light 315°, rings 2px
variation: class="ov-bevel ov-bevel--deep"
import 'overscan'
import 'overscan/overscan.css'

<button class="ov-bevel ov-bevel--deep"></button>
cyber light 270°, rings 2px
antiseptic declines: zero depth is its register, and its surfaces sit too close to black for a shadow ring to be a ring
esper light 315°, rings 2px
neo light 315°, rings 1px
machina light 0°, rings 2px
holo lit only: additive, so a shadow is not available at all
aegis light 315°, rings 1px
vector declines: zero depth is its register, and its surfaces sit too close to black for a shadow ring to be a ring

The rack

An audio rack is the model and webaudio-controls is the reference: a faceplate with things mounted on it. That is where raised controls actually come from, and it is a stronger case for the treatment than a bevelled button on its own, because here the bevel is doing work rather than decorating. ⭐ Everything on a faceplate is either raised out of it or sunk into it, and which one says what the thing does — a knob and a button are raised because you operate them, a readout is sunk because you do not. Nothing sits flush. 🔴 Two ring sets: the faceplate is raised out of the field and the controls are raised out of the faceplate, so they cannot be lit from the same face or a knob would read exactly like the panel it is screwed to. Both come from the same declared light, so the rack still reads as one object under one lamp.

⚠️ The controls are drawn, not sprited. A sweep of 101 steps measured webaudio-controls' generated 101-frame filmstrip at 1.42° of mean error against a single continuously rotated frame at 0.00°, while being thirteen times larger — and findings 122 and 123 are why: the frame index truncates rather than rounds, so the knob is drawn below the value it holds at every one of 101 steps, and the strip is generated with the wrong divisor so a knob at maximum never reaches its own end stop. A filmstrip only earns its cost when the frames are not rotations of one another. <ov-dial> rotates one pointer, so it has nothing to gain and an error to avoid.

terminal
drive
tone
level
output 318.4
engage
bypass
industrial
drive
tone
level
output 318.4
engage
bypass
cyber
drive
tone
level
output 318.4
engage
bypass
antiseptic
drive
tone
level
output 318.4
engage
bypass
esper
drive
tone
level
output 318.4
engage
bypass
neo
drive
tone
level
output 318.4
engage
bypass
machina
drive
tone
level
output 318.4
engage
bypass
holo
drive
tone
level
output 318.4
engage
bypass
aegis
drive
tone
level
output 318.4
engage
bypass
vector
drive
tone
level
output 318.4
engage
bypass