1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
//! **The visual language's tokens**, and the one home for every colour, size
//! and gap the window spends (bl-73d2; `docs/STYLE.md` is the prose).
//!
//! The language's home is the phone seat (yog-android `docs/STYLE.md`) and
//! this file carries its bytes verbatim plus the desktop's own deltas, each
//! named where it is declared. Three rules govern it and `docs/STYLE.md`
//! states them at length: **colour means state** (six states, six accents, no
//! seventh — operator ruling 2026-09-06), **no outlines** (a block is raised by
//! a tint, never boxed), and **one module** (no pane spells a colour;
//! `rules/no-literal-colour.yml` refuses one).
//!
//! **A token this build does not know keeps its word and paints plain.** That
//! is the reply vocabulary's rung 3 carried through to the glass: an
//! unrecognised state is unstyled, never restyled as a state it is not,
//! because a colour is a claim and the wrong claim is worse than none.
use Color32;
use crate;
/// The anatomy as paint: the row, the connector, the ruled block, the
/// section and the field.
/// The adapter into egui: the tokens installed as a `Style` once per frame.
pub use ;
/// **The ground ladder** — each rung brighter than the one before, asserted.
/// The glass; every pane's body; a row and a control at rest.
pub const GROUND: Color32 = from_rgb;
/// Elevation one: a field, a popup's body, a row under the pointer.
pub const SURFACE: Color32 = from_rgb;
/// Elevation two: a control while pressed or open, a selected row's tint.
pub const RAISED: Color32 = from_rgb;
/// The most a boundary may be: one point between rows or panes.
pub const HAIRLINE: Color32 = from_rgb;
/// **The ink scale.** Primary text.
pub const INK: Color32 = from_rgb;
/// Secondary: a stamp, a count, a hint, a resting row.
pub const INK_WEAK: Color32 = from_rgb;
/// A placeholder, a disabled control's words.
pub const INK_FAINT: Color32 = from_rgb;
const ATTENTION: Color32 = from_rgb;
const WORKING: Color32 = from_rgb;
const INFERENCE: Color32 = from_rgb;
const ANNOTATION: Color32 = from_rgb;
const ERROR: Color32 = from_rgb;
/// **The brand is not a seventh colour**: it is the working blue, worn where
/// the operator's own act is on the glass — the caret's field, the send, the
/// operator's message rule, the aimed and selected row.
pub const BRAND: Color32 = WORKING;
/// **The six states, and the whole of what a hue may mean.** A token names
/// the state, never the colour.
/// The six, in the order the ruling names them.
pub const STATES: = ;
/// **The accent a state wears.** Spent as ink, as a three-point rule beside a
/// block, or as a low-alpha tint — never as a full fill behind text.
/// **The same accent at tint strength** — the alpha a block or a selected row
/// is raised by, low enough that ink over it keeps its contrast.
/// How much of an accent a tint is: a wash, not a fill.
const TINT_ALPHA: f32 = 0.16;
/// **The colour a refusal or an unreadable answer is said in** — the
/// annotation accent under the name every pane already spends.
pub const NOTICE: Color32 = ANNOTATION;
/// **The two inks a QR symbol is drawn in**, and they are the only pair here
/// that is not a matter of language. A symbol is defined dark-on-light and a
/// camera is what reads it, so these are black on white whatever the window's
/// visuals are — a dark-themed pane drawing its symbol in theme colours draws
/// one a phone will not lock onto. `PAPER` and `INK` because what they mean is
/// *the ground* and *the mark*, which is what a decoder is looking for.
pub const QR_PAPER: Color32 = WHITE;
pub const QR_INK: Color32 = BLACK;
/// **A conversation's state, read onto the six.** A held driver is the model
/// at work; streaming is a tool in flight (REMOTE §11's own division, and the
/// phone's `theme::tone` reads the row tone the same way); stopped will not
/// mend itself; settled is at rest. An unknown word is unstyled.
/// The ink a conversation's badge is painted in.
/// **The wire's row tone, read onto the six** (REMOTE §11): `good` is done
/// and so at rest, `bad` is an error, `live` is the streaming tail and so
/// inference, `in-flight` is a tool running and so working; `plain` and `weak`
/// are the ink scale, not a state.
/// **Who is speaking, told by weight and never by hue.** Four speakers would
/// otherwise be four colours, and colour means state.
/// The ink a speaker's rule and header are painted in.
/// **Spacing, in points** — every gap on the glass is one of these.
/// **Desktop delta:** one step under the phone's smallest, for the gap between
/// lines that are read as one paragraph and for a control's padding down —
/// the phone's `XS` there put every covering pane past the narrowest shape
/// the layout promises (§4.32's density constraint), and a desktop reads
/// a stack of short lines as prose, not as a list of targets.
/// **Type, in points** — four sizes and no fifth. **Desktop delta:** every
/// size sits two points under the phone's (15 → 13, 20 → 18), because a
/// desktop is read at arm's length and holds three columns of prose where the
/// phone holds one — and the covering panes must fit the narrowest shape the
/// layout promises (§4.32), which the phone's body overruns.
/// **A list row's height**, in points. **Desktop delta:** the phone's
/// 48-point touch target is a thumb's; a pointer's is 24, and a list of
/// conversations at 48 a row is a list that scrolls twice as much. A control
/// is its word plus the padding and stands no taller than it needs.
pub const ROW: f32 = 24.0;
/// A block's corner. **Desktop delta:** 6 where the phone has 10, in
/// proportion to [`ROW`].
pub const RADIUS: f32 = 6.0;
/// A state's rule beside a block or a row, in points wide.
pub const RULE: f32 = 3.0;