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
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
//! **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:** the
/// body sits one point under the phone's and the heading two (15 → 14,
/// 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. The body was 13 through the first pass and read as
/// spartan at 1440×900 (bl-f251); 14 is the point the density constraint
/// still admits.
///
/// [`type_scale::LEADING`] is the line height a paragraph of the transcript
/// is laid at — one and a half bodies — where a control, a row and a label
/// keep the font's own. Prose is read line after line and a list is scanned;
/// the air between the lines is what tells the two apart on a dark ground.
/// **The glyph an act wears** (bl-f251) — an icon is a token exactly as a
/// colour is: a pane asks for one by the name of the act, and this is the one
/// place the character is spelled. Three, and each is the plainest sign for
/// what the act does to the turn: a bolt cuts in, a play mark advances, a
/// square stops. Every one is asserted to have a glyph in the body font
/// (`tests`), because a tofu box is a control with no word on it.
/// **An act's glyph and its word, as one run** — the one spelling of the
/// compact control, so a test aims a click at what the operator reads.
/// **How tall the composer's field stands, in lines** (bl-f251). Three, so
/// the field is the pane's focal element rather than a bar along its foot:
/// a paragraph is composed in it and the height says so before a word is
/// typed. Lines rather than points because the height follows the type
/// scale, and Shift+Enter breaks one inside it.
pub const COMPOSER_ROWS: u8 = 3;
/// **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;