PluginProbe
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin / 1.1.9
OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin v1.1.9
1.1.9 1.1.8 1.1.7 1.1.6 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.0.1 1.0.0 0.9.8 0.9.7 0.9.6 0.9.4 0.9.5 0.9.3 0.9.2 0.9.1 0.9.0 0.8.9 0.8.8 0.8.7 0.8.6 All 33 releases
desktop-mode / apps / code-blue / code-blue.css

code-blue.css in OpenStation: Desktop Windows, Dock & Virtual Desktops for WP Admin 1.1.9, at apps/code-blue/code-blue.css

398 lines 9.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * Code Blue — window styles.
3 *
4 * Only what the `<os-*>` components don't already carry: the fixed-
5 * height regions, the card chrome, the stat-tile typography, the
6 * issue rows. Every colour reads a token with the pre-brand admin
7 * literal as its floor, and the four severity tones resolve through
8 * the status tokens.
9 */
10
11 .os-cb {
12 block-size: 100%;
13 padding: 12px 14px;
14 box-sizing: border-box;
15 /* The window never page-scrolls: every region is fixed-height and
16 only the issue list scrolls, so a long list can't crush the chart. */
17 overflow: hidden;
18 }
19
20 .os-cb > :not( .os-cb__issues ) {
21 flex: none;
22 }
23
24 /*
25 * A narrow container — a phone, or a desktop window pulled in — has no
26 * height to spare for fixed regions: the toolbar wraps to three rows,
27 * the stat tiles to two, the chart keeps its height, and the issue list
28 * was left its 120px minimum with its own scrollbar inside it, which a
29 * thumb reads as "this does not scroll". So at this width the window
30 * page-scrolls instead: every region takes its natural height and the
31 * root is the one scroller. The two fields stop demanding 200px each
32 * and share the row.
33 */
34 @container ( max-width: 640px ) {
35 .os-cb {
36 overflow-y: auto;
37 -webkit-overflow-scrolling: touch;
38 }
39
40 .os-cb__source,
41 .os-cb__search {
42 min-inline-size: 0;
43 flex: 1 1 140px;
44 }
45
46 .os-cb > .os-cb__issues {
47 flex: none;
48 min-block-size: 0;
49 }
50
51 .os-cb__list {
52 flex: none;
53 overflow-y: visible;
54 }
55 }
56
57 /* The same, keyed on the shell's phone mode: the phone experience at
58 any width (a wide browser previewing it, a phone turned sideways),
59 which no size query can express. */
60 html[data-os-mode="mobile"] .os-cb {
61 overflow-y: auto;
62 -webkit-overflow-scrolling: touch;
63 }
64
65 html[data-os-mode="mobile"] .os-cb__source,
66 html[data-os-mode="mobile"] .os-cb__search {
67 min-inline-size: 0;
68 flex: 1 1 140px;
69 }
70
71 html[data-os-mode="mobile"] .os-cb > .os-cb__issues {
72 flex: none;
73 min-block-size: 0;
74 }
75
76 html[data-os-mode="mobile"] .os-cb__list {
77 flex: none;
78 overflow-y: visible;
79 }
80
81 .os-cb__source,
82 .os-cb__search {
83 min-inline-size: 200px;
84 }
85
86 /* The toolbar aligns to its bottom edge; the switch track is shorter
87 than the buttons beside it, so lift it onto their visual centre. */
88 .os-cb__auto {
89 margin-block-end: 6px;
90 }
91
92 /* ---------- Severity swatches ---------------------------------------- */
93
94 /* The tone-to-colour mapping itself lives in app-runtime.css (the
95 shared `data-tone` contract); these consumers only read it back. */
96 .os-cb-swatch {
97 display: inline-block;
98 inline-size: 10px;
99 block-size: 10px;
100 border-radius: 3px;
101 flex: none;
102 background: var( --os-app-tone, var( --os-ui-fg-muted, #646970 ) );
103 }
104
105 /* ---------- Stat tiles ---------------------------------------------- */
106
107 /* Column count lives here rather than in a `columns` attribute so the
108 container query below can override it (the attribute writes an
109 inline style, which would win). */
110 .os-cb__stats {
111 --os-ui-grid-columns: repeat( 5, minmax( 0, 1fr ) );
112 }
113
114 @container ( max-width: 760px ) {
115 .os-cb__stats {
116 --os-ui-grid-columns: repeat( 3, minmax( 0, 1fr ) );
117 }
118 }
119
120 /* The tiles are the kit's <os-stat>; only Code Blue's variations on
121 its defaults live here: neutral (not accent) values on an elevated
122 card surface, at the old tile's size and weight. */
123 .os-cb__stats os-stat {
124 --os-ui-stat-bg: var( --os-ui-surface-elevated, #fff );
125 --os-ui-stat-value-color: var( --os-ui-fg, #1d2327 );
126 --os-ui-stat-value-size: 22px;
127 }
128
129 /* ---------- Cards --------------------------------------------------- */
130
131 .os-cb__card {
132 display: block;
133 border: 1px solid var( --os-ui-border, #dcdcde );
134 border-radius: 8px;
135 background: var( --os-ui-surface-elevated, #fff );
136 overflow: hidden;
137 }
138
139 .os-cb__card-head,
140 .os-cb__chart::part( head ) {
141 display: flex;
142 align-items: center;
143 justify-content: space-between;
144 gap: 10px;
145 flex-wrap: wrap;
146 margin: 0;
147 padding: 10px 14px;
148 border-block-end: 1px solid var( --os-ui-border, #dcdcde );
149 }
150
151 .os-cb__card-title {
152 margin: 0;
153 font-size: 13px;
154 font-weight: 600;
155 color: var( --os-ui-fg, #1d2327 );
156 }
157
158 .os-cb__chart::part( chart ) {
159 padding: 8px 6px 4px;
160 }
161
162 /* ---------- Issues -------------------------------------------------- */
163
164 .os-cb__issues {
165 display: flex;
166 flex-direction: column;
167 flex: 1;
168 min-block-size: 120px;
169 }
170
171 .os-cb__list {
172 margin: 0;
173 padding: 0;
174 list-style: none;
175 flex: 1;
176 min-block-size: 0;
177 overflow-y: auto;
178 }
179
180 .os-cb__list-empty {
181 padding: 20px;
182 list-style: none;
183 }
184
185 .os-cb-issue {
186 border-block-end: 1px solid var( --os-ui-border, #dcdcde );
187 border-inline-start: 3px solid var( --os-app-tone, transparent );
188 }
189
190 .os-cb-issue:last-child {
191 border-block-end: none;
192 }
193
194 /*
195 * The whole row is the control — an error list is scanned, and asking
196 * for a chevron would be asking for aim. It stays a `<button>`, which
197 * means the text inside it cannot be selected: every engine suppresses
198 * selection inside a form control. Copying is the detail panel's job
199 * instead, where the message and the trace are `<os-code copy>` and
200 * plain selectable markup rather than button content.
201 */
202 .os-cb-issue__row {
203 display: flex;
204 align-items: flex-start;
205 gap: 10px;
206 inline-size: 100%;
207 padding: 8px 12px;
208 border: none;
209 background: transparent;
210 color: inherit;
211 font: inherit;
212 text-align: start;
213 cursor: pointer;
214 }
215
216 .os-cb-issue__row:hover {
217 background: var( --os-ui-surface-subtle, rgba( 0, 0, 0, 0.03 ) );
218 }
219
220 .os-cb-issue__row:focus-visible {
221 outline: 2px solid var( --os-ui-accent, #2271b1 );
222 outline-offset: -2px;
223 }
224
225 .os-cb-issue__level {
226 display: inline-flex;
227 align-items: center;
228 gap: 6px;
229 flex: none;
230 inline-size: 150px;
231 min-block-size: 18px;
232 overflow: hidden;
233 }
234
235 .os-cb-issue__label {
236 font-size: 11px;
237 text-transform: uppercase;
238 letter-spacing: 0.03em;
239 color: var( --os-ui-fg-muted, #646970 );
240 white-space: nowrap;
241 overflow: hidden;
242 text-overflow: ellipsis;
243 }
244
245 /*
246 * The message wraps rather than ellipsising. A fatal error is
247 * routinely longer than any window anyone wants to open, and reading
248 * one should not cost a resize — the row grows by a line or two
249 * instead, which a list that scrolls can afford.
250 */
251 .os-cb-issue__message {
252 flex: 1;
253 min-inline-size: 0;
254 font-family: var( --os-ui-font-mono, ui-monospace, Menlo, Consolas, monospace );
255 font-size: 12px;
256 line-height: 18px;
257 white-space: pre-wrap;
258 overflow-wrap: anywhere;
259 }
260
261 .os-cb-issue__meta {
262 display: inline-flex;
263 align-items: center;
264 gap: 10px;
265 flex: none;
266 min-block-size: 18px;
267 color: var( --os-ui-fg-muted, #646970 );
268 font-size: 12px;
269 }
270
271 .os-cb-issue__file {
272 font-family: var( --os-ui-font-mono, ui-monospace, Menlo, Consolas, monospace );
273 font-size: 11px;
274 max-inline-size: 200px;
275 white-space: nowrap;
276 overflow: hidden;
277 text-overflow: ellipsis;
278 direction: rtl; /* Ellipsize the start of long basenames, keep the :line end visible. */
279 text-align: end;
280 }
281
282 .os-cb-issue__when {
283 min-inline-size: 48px;
284 text-align: end;
285 }
286
287 @container ( max-width: 640px ) {
288 .os-cb-issue__level {
289 inline-size: auto;
290 }
291
292 .os-cb-issue__label,
293 .os-cb-issue__file {
294 display: none;
295 }
296 }
297
298 /*
299 * The origin badge outlives the file path at narrow widths: "which
300 * plugin" survives a resize that "which file" does not, and it is the
301 * more useful half of the pair when only one fits.
302 */
303 @container ( max-width: 480px ) {
304 .os-cb-issue__origin {
305 display: none;
306 }
307 }
308
309 .os-cb-issue__detail {
310 display: flex;
311 flex-direction: column;
312 gap: 10px;
313 padding: 4px 14px 14px 22px;
314 }
315
316 /*
317 * The message again, in full and with a copy button — the row above
318 * shows the same text, but that row is a `<button>`, so this is the
319 * only place a reader can take the error away with them. Everything in
320 * the detail panel is plain markup outside the control: selectable by
321 * drag, and copyable by button for the two things anyone ever copies.
322 */
323 .os-cb-issue__full {
324 font-size: 12px;
325 --os-ui-code-block-max-block-size: 220px;
326 }
327
328 .os-cb-issue__facts {
329 display: grid;
330 grid-template-columns: auto 1fr;
331 gap: 2px 14px;
332 margin: 0;
333 font-size: 12px;
334 align-items: baseline;
335 }
336
337 /*
338 * The file path is a copy target too (it is what gets pasted into an
339 * editor), but it sits in a definition list, not a snippet box — so
340 * the badge chrome comes off and only the copy affordance stays.
341 */
342 .os-cb-issue__facts os-code {
343 --os-ui-code-bg: transparent;
344 --os-ui-code-border: none;
345 --os-ui-code-padding: 0;
346 --os-ui-code-font-size: 1em;
347 }
348
349 .os-cb-issue__facts dt {
350 color: var( --os-ui-fg-muted, #646970 );
351 }
352
353 .os-cb-issue__facts dd {
354 margin: 0;
355 font-family: var( --os-ui-font-mono, ui-monospace, Menlo, Consolas, monospace );
356 overflow-wrap: anywhere;
357 }
358
359 /*
360 * The two things anyone does with an error they cannot immediately
361 * fix: hand it to someone else, or go and look it up.
362 */
363 .os-cb-issue__actions {
364 margin-block-start: 2px;
365 }
366
367 .os-cb-issue__search {
368 font-size: 12px;
369 align-self: center;
370 color: var( --os-ui-accent, #2271b1 );
371 text-decoration: none;
372 }
373
374 .os-cb-issue__search:hover,
375 .os-cb-issue__search:focus-visible {
376 text-decoration: underline;
377 }
378
379 .os-cb-issue__times {
380 font-size: 11px;
381 }
382
383 .os-cb-issue__times-label {
384 color: var( --os-ui-fg-muted, #646970 );
385 }
386
387 .os-cb-issue__trace {
388 font-size: 11px;
389 --os-ui-code-block-max-block-size: 320px;
390 }
391
392 /* ---------- Footer -------------------------------------------------- */
393
394 .os-cb__footer {
395 font-size: 12px;
396 color: var( --os-ui-fg-muted, #646970 );
397 }
398