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

An icon set where every mark has a number and a stated meaning, rather than a bag of glyphs. The precedent is Ron Cobb's Semiotic Standard, and the precedent is all that transfers — 🔴 the artwork, the names and the trademarks are not ours to relicense, and the idea was the valuable half anyway. These are authored here, in tools/icons.py, which is the register and the source.

The frame is the category and the mark is the meaning. That is decoration needs a rule applied to iconography, and it gives the set a property almost no icon font has: an unfamiliar symbol is still half-readable, because the triangle tells you it is a hazard before you have worked out what is inside it. The number carries the same information, so a symbol referred to by number alone is also half-understood — and because both say it, they can be checked against each other. They are: tools/gen_icons.py refuses to emit if any symbol has drifted out of its family.

The set is eight families of at most nine marks, which is what two digits can number. The first five report on a machine — what it is doing, what will hurt you, which part you are looking at, what is moving through it, what you may do to it. The last three are about the ship and the people in it, which is the half of the precedent a console-only set leaves out and the half that is actually painted on bulkheads. 🔴 The ninth tens digit is deliberately unspent: a register that fills its own numbering the moment it can has no room to be wrong about a category later.

A mark never crowds its frame, because the frame is what carries the category and it has to survive being looked at quickly. tools/clearance.py measures the visible gap on every symbol and refuses if any is tight — and the margin is not one number, because the frames are not the same size inside. The margin is one ninth of the room the frame has: the state circle holds an inscribed disc of 9.00 and the hazard triangle holds 5.40, so one figure generous enough for the circle would shrink hazard marks back to the size that already failed a pass. Every frame gives up the same proportion of its interior instead.

The register

demo/icon.html, from this page
import 'overscan'
import 'overscan/overscan.css'

<ov-icon name="nominal"></ov-icon>

statea condition of the thing being reported on

11 nominalreading is within its declared range and current
12 cautionreading is real and outside its comfortable band
13 faultthe thing reporting is broken, not the reading
14 offlinenothing is reporting and nothing is expected to
15 no readingno value has arrived. deliberately a dash, which is the refusal idiom the segment readouts use, and deliberately not a zero
16 standbypowered, correct, and doing nothing. the hollow dot is the empty end of the fill ladder that 11 fills and 17 half-fills
17 degradedrunning, and not at full capability. ⭐ the half-filled dot is the middle of the ladder, so the three states are one gradient rather than three unrelated marks
18 stalea value did arrive and is too old to be trusted. ⭐ NOT the same as 15: this one has a number to show you and is telling you not to believe it
19 projectedthis value was computed forward, not measured. ⭐ the solid dot is the last real reading and the dashes are what comes after it, because a readout that refuses to invent still has to be allowed to extrapolate OUT LOUD. ⚠️ the first drawing was a solid line going dashed as it rose, and a diagonal inside the state circle is 14 offline - a mark cannot borrow the negation slash to mean something that is not negation
variation: name="caution"
import 'overscan'
import 'overscan/overscan.css'

<ov-icon name="caution"></ov-icon>

hazarda danger present at this location

21 pressurepressure differential across this boundary
22 thermalsurface or medium at a harmful temperature
23 electricallive conductor present
24 radiationionising source
25 vacuumthis space is or may become unpressurised. the dash is the same absence mark 15 carries, and the frame is what says which kind
26 corrosivea substance here attacks what it touches, including you
27 contaminatedthe atmosphere here is present and must not be breathed. ⭐ the mark is 34 atmosphere wearing the slash, which is the whole system working: a borrowed mark and a known modifier, read in the frame that says danger
variation: name="fault"
import 'overscan'
import 'overscan/overscan.css'

<ov-icon name="fault"></ov-icon>

systema subsystem, named rather than described

31 powerelectrical supply
32 commssignal link to somewhere else
33 coolantheat transfer loop
34 atmospherebreathable supply and its handling
35 storageheld material or held data
36 propulsionthrust, and the machinery that makes it
37 navigationwhere the vehicle is and where it is pointed. ⚠️ drawn as an outline this is a capital A, and deepening the notch does not help because the SILHOUETTE is what reads as the letter. filling it does: letterforms are strokes, so a solid shape cannot be one. same class of mistake as the bowtie 39 had to be redrawn out of
38 computeprocessing, and the machine that does it. the mark is a clock because a clock is the part of a computer you can actually point at
39 structurehull, frame, and whatever everything else is bolted to. ⚠️ drawn first as a braced bay, which is an X between two rails and therefore a BOWTIE at size - the same mistake the hazard marks already cost a pass. a beam section is the thing itself and cannot collapse
variation: name="offline"
import 'overscan'
import 'overscan/overscan.css'

<ov-icon name="offline"></ov-icon>

flowsomething moving through a channel

41 intakeflow entering the system here
42 exhaustflow leaving the system here
43 circulateflow returning to where it came from
44 blockedflow that cannot pass. ⚠️ the first drawing was 41 with the wall doubled, and at 30px the two were indistinguishable - which is a real failure in a set whose whole claim is that you can read it. it now carries the slash, the same negation 14 carries
45 ventflow released to the outside, on purpose
46 leakflow leaving the channel where nothing was meant to leave. ⭐ 45 is the same event authorised, and keeping them apart is most of why this register exists
47 filteredflow passes, and something is taken out of it on the way
48 surgeflow above its rated rate. the doubled chevron is the fast end of the rate ladder 49 sits at the slow end of
49 trickleflow present and below its rated rate. ⭐ the broken line is the rate, drawn rather than labelled - which is the same argument as the fill ladder in the state circle

actionan operation the reader can perform

51 engagestart, and keep running
52 holdsuspend without releasing the state
53 purgeempty this, discarding what is in it
54 isolatebreak the connection and leave both sides intact
55 overrideproceed past a refusal. the only symbol in the set for doing something the system has already declined, so it is deliberately not comfortable
56 abortstop now and do not resume. 52 keeps the state and this one does not
57 resetreturn to the declared starting state. ⚠️ the head is solid because a stroked one left a ring with a nub, and a ring with a nub is 31 power
58 acknowledgeyou have seen it, and it stops asking. ⭐ it does not stop being true, which is why this is not the same control as 56
59 stepadvance exactly one increment and stop. ⚠️ 51 with a wall added, which is the 41-against-44 shape of mistake - it survives only because the transport idiom is already learned everywhere, and it was checked against 51 at 30px before it was kept

wayfindinga place, and the way into or out of it

61 airlocka chamber with a door at each end, to be passed one at a time
62 hatcha single closure that can be dogged shut against pressure
63 laddera route between decks, climbed
64 corridora route along this deck, walked
65 decka level. the long stroke is the one you are standing on
66 muster stationwhere people gather when something has gone wrong. ⭐ it is 71 crew present, twice, read in the frame that means A PLACE - which is the clearest case in the set of the frame doing the work
67 exitthe way out of this space, in an emergency
68 positionyou are here. the only symbol in the set that means something different depending on where it is printed, which is why it is a pin and not a dot
69 restricteda doorway you may not go through. the slash is the same negation 14, 44 and 76 carry

crewsomething required of the person standing here

71 crew presentthis space is occupied
72 suit requireddo not be here without a pressure suit. ⚠️ the visor was first a chord across a circle, which is the 15 absence dash wearing a different frame and therefore already spoken for
73 eye protectiondo not be here without eye protection
74 hearing protectiondo not be here without hearing protection
75 medicaltreatment, and the people qualified to give it
76 unmannednobody is meant to be in here. ⭐ it is the crew figure negated, so a person in this space is the anomaly rather than the default

maintenancehardware, and the servicing it expects

81 fastenera bolted joint. ⭐ a bolt says THIS FACE IS FIXED, which is exactly what stops the bolts on a rack faceplate being decoration
82 seala gasket or ring that is consumed by being opened, and is replaced rather than reused
83 filter elementa consumable that gets dirty on purpose so nothing downstream does
84 fusea part that is meant to fail, so that the expensive part does not
85 calibration pointwhere an instrument is told what true is. ⭐ every readout in this kit that refuses to invent a value is relying on somebody having come here
86 lockoutdeliberately dead for servicing, and not to be re-energised by anyone who did not kill it. the most important mark in this family

Asking what one means

measuring…

The refusal, which is the whole difference

a name in the register
Draws symbol 33, states its meaning on the element, and takes its accessible name from the register rather than from whatever the caller happened to type.
a name that is not
🔴 There is no generic fallback glyph. A question mark, a blank, or a nearest-match would all be the display inventing a meaning nobody assigned, which is the same failure as a seven-segment readout closing the gap on 1.5. Symbol 00 is reserved for saying the register has no answer, and it is not a symbol in the set.
a caller's own label
The register supplies the accessible name and a caller may override it, because "disconnect the loop" is a better button label than "isolate". It cannot silently have no name, which is where icon-only controls usually fail.

Ten themes

Every stroke is currentColor, so a symbol takes the surrounding ink and therefore the theme, with no per-theme rule anywhere and no second implementation.

terminal
industrial
cyber
antiseptic
esper
neo
machina
holo
aegis
vector