@atelic-action/ui 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -20
- package/dist/vite/artifact-config.js +6 -4
- package/package.json +1 -1
- package/src/artifact/GradeChip.tsx +4 -3
- package/src/artifact/Paragraph.tsx +65 -0
- package/src/artifact/Shot.tsx +6 -4
- package/src/artifact/SignOff.tsx +3 -2
- package/src/artifact/index.ts +17 -6
- package/src/styles/artifact.css +27 -2152
- package/src/vite/artifact-config.ts +6 -4
- package/src/artifact/Gate.tsx +0 -340
- package/src/artifact/Note.tsx +0 -188
- package/src/artifact/Report.tsx +0 -131
- package/src/artifact/Writeup.tsx +0 -767
package/src/styles/artifact.css
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
/* The artifact documents under src/artifact: the
|
|
2
|
-
the
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
over them whatever its specificity. */
|
|
1
|
+
/* The pieces the artifact documents are built from, under src/artifact: the
|
|
2
|
+
grade chip, the sign off, the shot, and the shell's logo and print rules. The
|
|
3
|
+
composed documents (the writeup, the read, the monthly page, the note,
|
|
4
|
+
and the sealed document stage) and their sheet, with both @page rules,
|
|
5
|
+
live in @atelic-action/artifact (its styles/documents.css), which a site
|
|
6
|
+
imports after this one. This sheet sets no @page. Every rule sits in the
|
|
7
|
+
package's layer like every sheet here, so any rule a site writes outside
|
|
8
|
+
a layer still wins over it whatever its specificity. */
|
|
10
9
|
@layer atelic-ui {
|
|
11
10
|
/* =================================================================
|
|
12
|
-
SHARED: the vocabulary
|
|
13
|
-
|
|
14
|
-
used by more than one
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
SHARED: the vocabulary every document wears, the grade chip
|
|
12
|
+
(GradeChip), the sign off lockup (SignOff), and the shot (Shot). A
|
|
13
|
+
class used by more than one document lives in the base sheet chain
|
|
14
|
+
rather than in a component's stylesheet, so it can never vanish from
|
|
15
|
+
a page that does not import the component that defined it.
|
|
17
16
|
|
|
18
17
|
Tokens only, with one deliberate literal set: the four grade colors.
|
|
19
18
|
================================================================= */
|
|
@@ -36,8 +35,8 @@
|
|
|
36
35
|
min-width: 1.6em;
|
|
37
36
|
text-align: center;
|
|
38
37
|
}
|
|
39
|
-
/* The four grade colors are
|
|
40
|
-
|
|
38
|
+
/* The four grade colors are a deliberate literal set: a grade reads
|
|
39
|
+
green, yellow, orange, red
|
|
41
40
|
everywhere, whatever the brand's palette, so they are not theme tokens.
|
|
42
41
|
The orange sits between the yellow's hue and the red's so the four stay
|
|
43
42
|
apart on paper, and its letter clears AA on its own tint. */
|
|
@@ -117,1336 +116,10 @@
|
|
|
117
116
|
display: none;
|
|
118
117
|
}
|
|
119
118
|
|
|
120
|
-
/*
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
/* =================================================================
|
|
125
|
-
THE SEALED DOCUMENT STAGE: the Gate component (Gate.tsx).
|
|
126
|
-
A dark stage derived from the semantic tokens, so a client's
|
|
127
|
-
theme.css recolors it. The gate card reuses the login
|
|
128
|
-
screen's vocabulary above (eyebrow, headline, lead, form, input,
|
|
129
|
-
error); this section only stages it dark and adds the document
|
|
130
|
-
classes the decrypted HTML is written against.
|
|
131
|
-
================================================================= */
|
|
132
|
-
.atelic-ui .gate-stage {
|
|
133
|
-
--gs-stage: var(--surface-dark);
|
|
134
|
-
--gs-bright: color-mix(in srgb, var(--surface) 96%, white);
|
|
135
|
-
--gs-dim: color-mix(in srgb, var(--surface) 62%, var(--surface-dark));
|
|
136
|
-
--gs-faint: color-mix(in srgb, var(--surface) 40%, var(--surface-dark));
|
|
137
|
-
--gs-panel: color-mix(in srgb, var(--surface-dark) 88%, var(--surface));
|
|
138
|
-
--gs-border: color-mix(in srgb, var(--surface-dark) 72%, var(--surface));
|
|
139
|
-
--gs-hairline: color-mix(in srgb, var(--surface) 10%, transparent);
|
|
140
|
-
|
|
141
|
-
/* The navbar is fixed, so it adds no document height: a stage sized
|
|
142
|
-
100svh minus the nav plus a credit bar shorter than the nav leaves
|
|
143
|
-
the document shorter than the viewport, and the body's light
|
|
144
|
-
background shows beneath the credit bar. The stage therefore owns
|
|
145
|
-
the full viewport and clears the nav itself, painting dark edge to
|
|
146
|
-
edge behind the bar. */
|
|
147
|
-
min-height: 100svh;
|
|
148
|
-
padding-top: var(--nav-height);
|
|
149
|
-
background: var(--gs-stage);
|
|
150
|
-
color: var(--gs-bright);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/* Overscroll and any sub-viewport rounding still expose the page body at
|
|
154
|
-
the edges; a page carrying the stage paints its whole shell dark. */
|
|
155
|
-
.atelic-ui:has(.gate-stage) {
|
|
156
|
-
background: var(--surface-dark);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/* ---- the gate card, staged dark ---- */
|
|
160
|
-
.atelic-ui .gate-hall {
|
|
161
|
-
display: grid;
|
|
162
|
-
place-items: center;
|
|
163
|
-
min-height: calc(100svh - var(--nav-height));
|
|
164
|
-
padding-block: clamp(48px, 9vh, 96px);
|
|
165
|
-
}
|
|
166
|
-
.atelic-ui .gate-card {
|
|
167
|
-
width: 100%;
|
|
168
|
-
max-width: 520px;
|
|
169
|
-
margin-inline: auto;
|
|
170
|
-
padding: clamp(28px, 5vw, 44px);
|
|
171
|
-
border: 1px solid var(--gs-border);
|
|
172
|
-
border-radius: var(--radius-lg);
|
|
173
|
-
background: var(--gs-panel);
|
|
174
|
-
text-align: center;
|
|
175
|
-
}
|
|
176
|
-
.atelic-ui .gate-stage .gate-eyebrow {
|
|
177
|
-
margin: 0 0 12px;
|
|
178
|
-
font-size: 12.5px;
|
|
179
|
-
letter-spacing: 0.02em;
|
|
180
|
-
color: var(--gs-faint);
|
|
181
|
-
}
|
|
182
|
-
.atelic-ui .gate-stage .gate-headline {
|
|
183
|
-
margin: 0 0 12px;
|
|
184
|
-
font-family: var(--font-sans);
|
|
185
|
-
font-weight: 800;
|
|
186
|
-
letter-spacing: -0.015em;
|
|
187
|
-
font-size: clamp(26px, 3.4vw, 34px);
|
|
188
|
-
line-height: 1.12;
|
|
189
|
-
max-width: none;
|
|
190
|
-
color: var(--gs-bright);
|
|
191
|
-
}
|
|
192
|
-
.atelic-ui .gate-stage .gate-lead {
|
|
193
|
-
margin: 0 auto 26px;
|
|
194
|
-
max-width: 42ch;
|
|
195
|
-
font-size: 15px;
|
|
196
|
-
line-height: 1.6;
|
|
197
|
-
color: var(--gs-dim);
|
|
198
|
-
}
|
|
199
|
-
.atelic-ui .gate-stage .gate-input {
|
|
200
|
-
border-color: var(--gs-border);
|
|
201
|
-
background: color-mix(in srgb, var(--surface-dark) 94%, var(--surface));
|
|
202
|
-
color: var(--gs-bright);
|
|
203
|
-
}
|
|
204
|
-
.atelic-ui .gate-stage .gate-input::placeholder {
|
|
205
|
-
color: var(--gs-faint);
|
|
206
|
-
}
|
|
207
|
-
.atelic-ui .gate-stage .gate-input:focus-visible {
|
|
208
|
-
border-color: var(--primary-bright);
|
|
209
|
-
box-shadow: 0 0 0 3px var(--primary-focus-ring);
|
|
210
|
-
}
|
|
211
|
-
.atelic-ui .gate-stage .gate-error {
|
|
212
|
-
margin: 20px auto 0;
|
|
213
|
-
max-width: 46ch;
|
|
214
|
-
font-size: 14.5px;
|
|
215
|
-
line-height: 1.55;
|
|
216
|
-
color: var(--gs-dim);
|
|
217
|
-
background: none;
|
|
218
|
-
border: none;
|
|
219
|
-
padding: 0;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
/* ---- the document ----
|
|
223
|
-
Everything below styles HTML the content module authors, so the
|
|
224
|
-
selectors are element level inside .gate-content rather than a class
|
|
225
|
-
per line. A client document writes plain markup and inherits this. */
|
|
226
|
-
.atelic-ui .gate-doc {
|
|
227
|
-
/* The stage itself clears the fixed nav, so the document pads only
|
|
228
|
-
its own breathing room. */
|
|
229
|
-
padding-block: clamp(44px, 8vh, 88px) clamp(64px, 12vh, 132px);
|
|
230
|
-
}
|
|
231
|
-
.atelic-ui .gate-content {
|
|
232
|
-
/* The document column matches the chrome: .wrap and .nav-inner share
|
|
233
|
-
--max-width, so the text aligns with the header bar's edges rather
|
|
234
|
-
than sitting in a narrower centered measure. */
|
|
235
|
-
color: var(--gs-dim);
|
|
236
|
-
font-size: 16.5px;
|
|
237
|
-
line-height: 1.7;
|
|
238
|
-
}
|
|
239
|
-
.atelic-ui .gate-content h1 {
|
|
240
|
-
margin: 0 0 10px;
|
|
241
|
-
font-size: clamp(30px, 4.4vw, 46px);
|
|
242
|
-
line-height: 1.06;
|
|
243
|
-
color: var(--gs-bright);
|
|
244
|
-
text-wrap: balance;
|
|
245
|
-
}
|
|
246
|
-
.atelic-ui .gate-content h2 {
|
|
247
|
-
margin: 52px 0 14px;
|
|
248
|
-
font-size: clamp(21px, 2.6vw, 27px);
|
|
249
|
-
line-height: 1.2;
|
|
250
|
-
color: var(--gs-bright);
|
|
251
|
-
}
|
|
252
|
-
.atelic-ui .gate-content h3 {
|
|
253
|
-
margin: 28px 0 8px;
|
|
254
|
-
font-size: 17px;
|
|
255
|
-
color: var(--gs-bright);
|
|
256
|
-
}
|
|
257
|
-
.atelic-ui .gate-content p {
|
|
258
|
-
margin: 0 0 16px;
|
|
259
|
-
text-wrap: pretty;
|
|
260
|
-
}
|
|
261
|
-
.atelic-ui .gate-content ul {
|
|
262
|
-
margin: 0 0 16px;
|
|
263
|
-
padding-left: 22px;
|
|
264
|
-
display: flex;
|
|
265
|
-
flex-direction: column;
|
|
266
|
-
gap: 8px;
|
|
267
|
-
list-style: disc;
|
|
268
|
-
}
|
|
269
|
-
.atelic-ui .gate-content li {
|
|
270
|
-
display: list-item;
|
|
271
|
-
list-style: disc;
|
|
272
|
-
margin: 0;
|
|
273
|
-
}
|
|
274
|
-
.atelic-ui .gate-content li::marker {
|
|
275
|
-
color: var(--primary-bright);
|
|
276
|
-
}
|
|
277
|
-
.atelic-ui .gate-content strong {
|
|
278
|
-
color: var(--gs-bright);
|
|
279
|
-
font-weight: 600;
|
|
280
|
-
}
|
|
281
|
-
.atelic-ui .gate-content a {
|
|
282
|
-
color: var(--primary-bright);
|
|
283
|
-
text-decoration: none;
|
|
284
|
-
border-bottom: 1px solid currentColor;
|
|
285
|
-
}
|
|
286
|
-
.atelic-ui .gate-content hr {
|
|
287
|
-
margin: 44px 0;
|
|
288
|
-
border: 0;
|
|
289
|
-
border-top: 1px solid var(--gs-hairline);
|
|
290
|
-
}
|
|
291
|
-
.atelic-ui .gate-meta {
|
|
292
|
-
margin: 0 0 34px;
|
|
293
|
-
font-family: var(--font-mono);
|
|
294
|
-
font-size: 12.5px;
|
|
295
|
-
color: var(--gs-faint);
|
|
296
|
-
}
|
|
297
|
-
.atelic-ui .gate-lede {
|
|
298
|
-
font-size: 18px;
|
|
299
|
-
color: var(--gs-bright);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/* Tier cards: the shape of a three option quote. Faded panels on the
|
|
303
|
-
stage, one hairline lifted to mark the recommended option; no filled
|
|
304
|
-
color anywhere, so the CTA button stays the only saturated thing. */
|
|
305
|
-
.atelic-ui .gate-tiers {
|
|
306
|
-
display: grid;
|
|
307
|
-
/* Three explicit columns: auto-fit minted a fourth empty track at
|
|
308
|
-
document width and squeezed the cards into three quarters of the
|
|
309
|
-
row. A proposal's tier row is three builds wide by design. */
|
|
310
|
-
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
311
|
-
gap: 16px;
|
|
312
|
-
margin: 24px 0 8px;
|
|
313
|
-
}
|
|
314
|
-
@media (max-width: 860px) {
|
|
315
|
-
.atelic-ui .gate-tiers {
|
|
316
|
-
grid-template-columns: 1fr;
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
.atelic-ui .gate-tier {
|
|
320
|
-
display: flex;
|
|
321
|
-
flex-direction: column;
|
|
322
|
-
gap: 6px;
|
|
323
|
-
padding: 22px;
|
|
324
|
-
border: 1px solid var(--gs-border);
|
|
325
|
-
border-radius: var(--radius-lg);
|
|
326
|
-
background: var(--gs-panel);
|
|
327
|
-
min-width: 0;
|
|
328
|
-
}
|
|
329
|
-
.atelic-ui .gate-tier.is-picked {
|
|
330
|
-
border-color: color-mix(in srgb, var(--primary-bright) 55%, transparent);
|
|
331
|
-
}
|
|
332
|
-
.atelic-ui .gate-tier-name {
|
|
333
|
-
font-weight: 600;
|
|
334
|
-
font-size: 17px;
|
|
335
|
-
color: var(--gs-bright);
|
|
336
|
-
}
|
|
337
|
-
.atelic-ui .gate-tier-price {
|
|
338
|
-
font-family: var(--font-mono);
|
|
339
|
-
font-size: 21px;
|
|
340
|
-
color: var(--primary-bright);
|
|
341
|
-
}
|
|
342
|
-
.atelic-ui .gate-tier-note {
|
|
343
|
-
font-size: 14px;
|
|
344
|
-
line-height: 1.55;
|
|
345
|
-
color: var(--gs-dim);
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
/* Trade arithmetic on a card: a sum column sitting on the card's left,
|
|
349
|
-
digits right-aligned against each other the way a hand total lines
|
|
350
|
-
up, with any annotation (the credit's label) to the right of its
|
|
351
|
-
figure. Markup:
|
|
352
|
-
|
|
353
|
-
<div class="gate-tier-math">
|
|
354
|
-
<span class="gate-tier-was">$7,400</span>
|
|
355
|
-
<span class="gate-tier-credit">− $3,660</span>
|
|
356
|
-
<span class="gate-tier-mathlabel">install credit</span>
|
|
357
|
-
<span class="gate-tier-price">$3,740</span>
|
|
358
|
-
</div>
|
|
359
|
-
|
|
360
|
-
Amounts take grid column one (right-aligned, shared right edge);
|
|
361
|
-
labels take column two. A bare .gate-tier-price outside the math
|
|
362
|
-
block (the add-on card) keeps its standalone look. */
|
|
363
|
-
.atelic-ui .gate-tier-math {
|
|
364
|
-
display: grid;
|
|
365
|
-
grid-template-columns: max-content auto;
|
|
366
|
-
column-gap: 10px;
|
|
367
|
-
row-gap: 2px;
|
|
368
|
-
align-items: baseline;
|
|
369
|
-
justify-content: start;
|
|
370
|
-
}
|
|
371
|
-
.atelic-ui .gate-tier-math .gate-tier-was,
|
|
372
|
-
.atelic-ui .gate-tier-math .gate-tier-credit,
|
|
373
|
-
.atelic-ui .gate-tier-math .gate-tier-price {
|
|
374
|
-
grid-column: 1;
|
|
375
|
-
text-align: right;
|
|
376
|
-
}
|
|
377
|
-
/* The label never wraps, so a mark inside it (the asterisk that points
|
|
378
|
-
at the footnote under the tiers) stays on the label's line:
|
|
379
|
-
<span class="gate-tier-mathlabel">founding member credit<svg>...</svg></span> */
|
|
380
|
-
.atelic-ui .gate-tier-mathlabel {
|
|
381
|
-
grid-column: 2;
|
|
382
|
-
font-size: 13px;
|
|
383
|
-
color: var(--gs-faint);
|
|
384
|
-
white-space: nowrap;
|
|
385
|
-
}
|
|
386
|
-
.atelic-ui .gate-tier-mathlabel svg {
|
|
387
|
-
display: inline-block;
|
|
388
|
-
width: 11px;
|
|
389
|
-
height: 11px;
|
|
390
|
-
vertical-align: -1px;
|
|
391
|
-
margin-left: 2px;
|
|
392
|
-
color: var(--primary-bright);
|
|
393
|
-
}
|
|
394
|
-
.atelic-ui .gate-tier-was {
|
|
395
|
-
font-family: var(--font-mono);
|
|
396
|
-
font-size: 15px;
|
|
397
|
-
color: var(--gs-faint);
|
|
398
|
-
text-decoration: line-through;
|
|
399
|
-
}
|
|
400
|
-
.atelic-ui .gate-tier-credit {
|
|
401
|
-
font-family: var(--font-mono);
|
|
402
|
-
font-size: 14px;
|
|
403
|
-
color: var(--gs-dim);
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
/* A full width card in the tier grid, for an add-on (a monthly service
|
|
407
|
-
under one-time builds) that applies across every column. */
|
|
408
|
-
.atelic-ui .gate-tiers .gate-tier.is-addon {
|
|
409
|
-
grid-column: 1 / -1;
|
|
410
|
-
}
|
|
411
|
-
|
|
412
|
-
/* The add-ons row: two monthly cards (Operate, Operate with Paid) side
|
|
413
|
-
by side under the builds, instead of each full width. The row spans
|
|
414
|
-
the tier grid; the cards inside it sit in its own two columns, and
|
|
415
|
-
stack with the tiers on a phone.
|
|
416
|
-
<div class="gate-addons">
|
|
417
|
-
<div class="gate-tier is-addon">...</div>
|
|
418
|
-
<div class="gate-tier is-addon is-picked">...</div>
|
|
419
|
-
</div> */
|
|
420
|
-
.atelic-ui .gate-tiers .gate-addons {
|
|
421
|
-
grid-column: 1 / -1;
|
|
422
|
-
display: grid;
|
|
423
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
424
|
-
gap: 16px;
|
|
425
|
-
}
|
|
426
|
-
.atelic-ui .gate-tiers .gate-addons .gate-tier.is-addon {
|
|
427
|
-
grid-column: auto;
|
|
428
|
-
}
|
|
429
|
-
@media (max-width: 860px) {
|
|
430
|
-
.atelic-ui .gate-tiers .gate-addons {
|
|
431
|
-
grid-template-columns: 1fr;
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
|
|
435
|
-
/* The footnote under the tiers: a credit's terms in one line, led by
|
|
436
|
-
the same mark the card's label carries.
|
|
437
|
-
<p class="gate-footnote"><svg>...</svg><span>...</span></p> */
|
|
438
|
-
.atelic-ui .gate-content .gate-footnote {
|
|
439
|
-
display: flex;
|
|
440
|
-
gap: 8px;
|
|
441
|
-
align-items: flex-start;
|
|
442
|
-
margin: 14px 0 0;
|
|
443
|
-
font-size: 14px;
|
|
444
|
-
line-height: 1.5;
|
|
445
|
-
color: var(--gs-dim);
|
|
446
|
-
}
|
|
447
|
-
.atelic-ui .gate-content .gate-footnote svg {
|
|
448
|
-
width: 14px;
|
|
449
|
-
height: 14px;
|
|
450
|
-
flex: 0 0 auto;
|
|
451
|
-
margin-top: 3px;
|
|
452
|
-
color: var(--primary-bright);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
/* The icon list: the standard sent artifact list form, each line led
|
|
456
|
-
by a small lucide icon that says what the line means. The sealed
|
|
457
|
-
content inlines the SVGs. */
|
|
458
|
-
.atelic-ui .gate-content ul.icon-list {
|
|
459
|
-
list-style: none;
|
|
460
|
-
margin: 0 0 16px;
|
|
461
|
-
padding: 0;
|
|
462
|
-
display: flex;
|
|
463
|
-
flex-direction: column;
|
|
464
|
-
gap: 12px;
|
|
465
|
-
}
|
|
466
|
-
.atelic-ui .gate-content ul.icon-list li {
|
|
467
|
-
display: flex;
|
|
468
|
-
align-items: flex-start;
|
|
469
|
-
gap: 12px;
|
|
470
|
-
margin: 0;
|
|
471
|
-
list-style: none;
|
|
472
|
-
}
|
|
473
|
-
.atelic-ui .gate-content ul.icon-list svg {
|
|
474
|
-
width: 18px;
|
|
475
|
-
height: 18px;
|
|
476
|
-
flex: 0 0 auto;
|
|
477
|
-
margin-top: 3px;
|
|
478
|
-
color: var(--primary-bright);
|
|
479
|
-
}
|
|
480
|
-
/* The icon list inside a tier card, sized for the card: a tier lists
|
|
481
|
-
what it buys with icons that mean the thing, never checks. These tie
|
|
482
|
-
the document list's selectors, so they sit after them. */
|
|
483
|
-
.atelic-ui .gate-tier ul.icon-list {
|
|
484
|
-
margin: 6px 0 0;
|
|
485
|
-
gap: 8px;
|
|
486
|
-
font-size: 14px;
|
|
487
|
-
line-height: 1.5;
|
|
488
|
-
color: var(--gs-dim);
|
|
489
|
-
}
|
|
490
|
-
.atelic-ui .gate-tier ul.icon-list svg {
|
|
491
|
-
width: 16px;
|
|
492
|
-
height: 16px;
|
|
493
|
-
margin-top: 2px;
|
|
494
|
-
}
|
|
495
|
-
|
|
496
|
-
/* Numbered flow: the ordered list for a step-by-step close. */
|
|
497
|
-
.atelic-ui .gate-content ol {
|
|
498
|
-
margin: 0 0 16px;
|
|
499
|
-
padding-left: 24px;
|
|
500
|
-
display: flex;
|
|
501
|
-
flex-direction: column;
|
|
502
|
-
gap: 10px;
|
|
503
|
-
}
|
|
504
|
-
.atelic-ui .gate-content ol li {
|
|
505
|
-
display: list-item;
|
|
506
|
-
list-style: decimal;
|
|
507
|
-
margin: 0;
|
|
508
|
-
}
|
|
509
|
-
.atelic-ui .gate-content ol li::marker {
|
|
510
|
-
color: var(--primary-bright);
|
|
511
|
-
font-weight: 700;
|
|
512
|
-
}
|
|
513
|
-
|
|
514
|
-
/* Icon bullets: a checklist variant of the document list, worn by any
|
|
515
|
-
ul.gate-checks in the sealed content or inside a tier card. */
|
|
516
|
-
.atelic-ui .gate-content ul.gate-checks {
|
|
517
|
-
list-style: none;
|
|
518
|
-
padding-left: 0;
|
|
519
|
-
}
|
|
520
|
-
.atelic-ui .gate-content .gate-checks li {
|
|
521
|
-
position: relative;
|
|
522
|
-
list-style: none;
|
|
523
|
-
padding-left: 26px;
|
|
524
|
-
}
|
|
525
|
-
.atelic-ui .gate-content .gate-checks li::before {
|
|
526
|
-
/* The lucide check, masked so it takes the accent color. A glyph
|
|
527
|
-
character would trip the icons-over-emojis test; an SVG matches
|
|
528
|
-
the icon set the rest of the site draws from. */
|
|
529
|
-
content: "";
|
|
530
|
-
position: absolute;
|
|
531
|
-
left: 0;
|
|
532
|
-
top: 0.28em;
|
|
533
|
-
width: 14px;
|
|
534
|
-
height: 14px;
|
|
535
|
-
background-color: var(--primary-bright);
|
|
536
|
-
-webkit-mask:
|
|
537
|
-
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E")
|
|
538
|
-
center / contain no-repeat;
|
|
539
|
-
mask:
|
|
540
|
-
url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E")
|
|
541
|
-
center / contain no-repeat;
|
|
542
|
-
}
|
|
543
|
-
.atelic-ui .gate-tier ul.gate-checks {
|
|
544
|
-
margin: 6px 0 0;
|
|
545
|
-
display: grid;
|
|
546
|
-
gap: 8px;
|
|
547
|
-
font-size: 14px;
|
|
548
|
-
line-height: 1.5;
|
|
549
|
-
color: var(--gs-dim);
|
|
550
|
-
}
|
|
551
|
-
.atelic-ui .gate-tier .gate-checks li {
|
|
552
|
-
padding-left: 22px;
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
/* ---- the close: sign off, then the person lockup ---- */
|
|
556
|
-
.atelic-ui .gate-sign {
|
|
557
|
-
margin: 44px 0 18px;
|
|
558
|
-
/* The pitch surface sign off is the script face (voice.md rule 9),
|
|
559
|
-
the same face the writeup and the monthly page close on, centered
|
|
560
|
-
on the dark stage. */
|
|
561
|
-
font-family: var(--font-script);
|
|
562
|
-
font-size: clamp(38px, 5.5vw, 56px);
|
|
563
|
-
color: var(--secondary-soft);
|
|
564
|
-
text-align: center;
|
|
565
|
-
}
|
|
566
|
-
.atelic-ui .gate-person {
|
|
567
|
-
display: flex;
|
|
568
|
-
align-items: center;
|
|
569
|
-
justify-content: center;
|
|
570
|
-
gap: 18px;
|
|
571
|
-
text-align: left;
|
|
572
|
-
}
|
|
573
|
-
.atelic-ui .gate-person img {
|
|
574
|
-
width: 88px;
|
|
575
|
-
height: 88px;
|
|
576
|
-
border-radius: 50%;
|
|
577
|
-
object-fit: cover;
|
|
578
|
-
display: block;
|
|
579
|
-
flex: none;
|
|
580
|
-
}
|
|
581
|
-
.atelic-ui .gate-person-name {
|
|
582
|
-
display: block;
|
|
583
|
-
font-weight: 600;
|
|
584
|
-
font-size: 17px;
|
|
585
|
-
color: var(--gs-bright);
|
|
586
|
-
}
|
|
587
|
-
.atelic-ui .gate-person-role {
|
|
588
|
-
display: block;
|
|
589
|
-
margin-top: 4px;
|
|
590
|
-
font-size: 14px;
|
|
591
|
-
color: var(--gs-dim);
|
|
592
|
-
}
|
|
593
|
-
.atelic-ui .gate-person-role a {
|
|
594
|
-
color: inherit;
|
|
595
|
-
border-bottom: 1px solid currentColor;
|
|
596
|
-
}
|
|
597
|
-
.atelic-ui .gate-person-mail {
|
|
598
|
-
display: inline-flex;
|
|
599
|
-
align-items: center;
|
|
600
|
-
gap: 7px;
|
|
601
|
-
margin-top: 8px;
|
|
602
|
-
font-size: 14px;
|
|
603
|
-
font-weight: 500;
|
|
604
|
-
letter-spacing: 0.02em;
|
|
605
|
-
color: var(--primary-bright);
|
|
606
|
-
border-bottom: 1px solid currentColor;
|
|
607
|
-
padding-bottom: 1px;
|
|
608
|
-
}
|
|
609
|
-
.atelic-ui .gate-person-mail svg {
|
|
610
|
-
width: 15px;
|
|
611
|
-
height: 15px;
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
/* =================================================================
|
|
615
|
-
THE MONTHLY PAGE: one letter sheet and its hosted twin. Three
|
|
616
|
-
renderings of one DOM, the same as the writeup's:
|
|
617
|
-
|
|
618
|
-
- Screen (wide): the sheet at letter width on the surface, under the
|
|
619
|
-
artifact shell's dark header.
|
|
620
|
-
- Column (under 900px): the same sheet at phone type sizes; the leads
|
|
621
|
-
run two across and each grade row folds into a labeled block.
|
|
622
|
-
- Print: exactly one letter sheet, zero page margin, the header and
|
|
623
|
-
the credit band dropped. Content that misses the sheet is clipped,
|
|
624
|
-
never reflowed, so a print of one sheet is the check.
|
|
625
|
-
|
|
626
|
-
Tokens only (theme.css), except the printed sheet's white. The grade
|
|
627
|
-
chip and the sign off are the shared classes at the head of this sheet.
|
|
628
|
-
================================================================= */
|
|
629
|
-
.atelic-ui .rp {
|
|
630
|
-
--rp-ink: var(--ink);
|
|
631
|
-
--rp-ink-soft: var(--ink-soft);
|
|
632
|
-
--rp-ink-faint: var(--neutral-500);
|
|
633
|
-
--rp-rule: var(--hairline-strong);
|
|
634
|
-
--rp-accent: var(--primary);
|
|
635
|
-
--rp-paper: #ffffff;
|
|
636
|
-
font-family: var(--font-sans);
|
|
637
|
-
color: var(--rp-ink);
|
|
638
|
-
background: var(--surface);
|
|
639
|
-
padding: calc(var(--nav-height) + 32px) 24px 48px;
|
|
640
|
-
}
|
|
641
|
-
.atelic-ui .rp a {
|
|
642
|
-
color: inherit;
|
|
643
|
-
text-decoration: none;
|
|
644
|
-
}
|
|
645
|
-
.atelic-ui .rp a:hover {
|
|
646
|
-
color: var(--rp-accent);
|
|
647
|
-
}
|
|
648
|
-
|
|
649
|
-
/* ---- the sheet ---- */
|
|
650
|
-
.atelic-ui .rp-sheet {
|
|
651
|
-
width: 8.5in;
|
|
652
|
-
max-width: 100%;
|
|
653
|
-
margin: 0 auto;
|
|
654
|
-
padding: 0.5in 0.65in 0.45in;
|
|
655
|
-
display: flex;
|
|
656
|
-
flex-direction: column;
|
|
657
|
-
background: var(--rp-paper);
|
|
658
|
-
border-radius: 7px;
|
|
659
|
-
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.18);
|
|
660
|
-
print-color-adjust: exact;
|
|
661
|
-
-webkit-print-color-adjust: exact;
|
|
662
|
-
}
|
|
663
|
-
|
|
664
|
-
/* ---- the title and the period ---- */
|
|
665
|
-
.atelic-ui .rp-period {
|
|
666
|
-
font-family: var(--font-mono);
|
|
667
|
-
font-size: 8pt;
|
|
668
|
-
letter-spacing: 0.12em;
|
|
669
|
-
text-transform: uppercase;
|
|
670
|
-
color: var(--rp-accent);
|
|
671
|
-
}
|
|
672
|
-
.atelic-ui .rp h1 {
|
|
673
|
-
font-family: var(--font-sans);
|
|
674
|
-
font-size: 25pt;
|
|
675
|
-
font-weight: 600;
|
|
676
|
-
letter-spacing: -0.03em;
|
|
677
|
-
line-height: 1.08;
|
|
678
|
-
margin: 6pt 0 14pt;
|
|
679
|
-
text-wrap: balance;
|
|
680
|
-
color: var(--rp-ink);
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
/* ---- the leads: four questions, each a figure and one sentence ---- */
|
|
684
|
-
.atelic-ui .rp-leads {
|
|
685
|
-
display: grid;
|
|
686
|
-
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
687
|
-
gap: 0 16pt;
|
|
688
|
-
padding: 10pt 0 14pt;
|
|
689
|
-
border-top: 1.5px solid var(--rp-ink);
|
|
690
|
-
border-bottom: 1px solid var(--rp-rule);
|
|
691
|
-
}
|
|
692
|
-
.atelic-ui .rp-lead {
|
|
693
|
-
display: flex;
|
|
694
|
-
flex-direction: column;
|
|
695
|
-
gap: 3pt;
|
|
696
|
-
min-width: 0;
|
|
697
|
-
}
|
|
698
|
-
.atelic-ui .rp-q {
|
|
699
|
-
margin: 0;
|
|
700
|
-
font-family: var(--font-mono);
|
|
701
|
-
font-size: 7pt;
|
|
702
|
-
font-weight: 500;
|
|
703
|
-
letter-spacing: 0.1em;
|
|
704
|
-
line-height: 1.4;
|
|
705
|
-
text-transform: uppercase;
|
|
706
|
-
color: var(--rp-accent);
|
|
707
|
-
}
|
|
708
|
-
.atelic-ui .rp-figure {
|
|
709
|
-
font-size: 18pt;
|
|
710
|
-
font-weight: 600;
|
|
711
|
-
letter-spacing: -0.02em;
|
|
712
|
-
line-height: 1.1;
|
|
713
|
-
color: var(--rp-ink);
|
|
714
|
-
}
|
|
715
|
-
.atelic-ui .rp-lead p {
|
|
716
|
-
margin: 0;
|
|
717
|
-
font-size: 8.4pt;
|
|
718
|
-
line-height: 1.4;
|
|
719
|
-
color: var(--rp-ink-soft);
|
|
720
|
-
text-wrap: pretty;
|
|
721
|
-
}
|
|
722
|
-
|
|
723
|
-
/* ---- the seven grades: now, last month, baseline, what moved ---- */
|
|
724
|
-
.atelic-ui .rp-grades {
|
|
725
|
-
width: 100%;
|
|
726
|
-
border-collapse: collapse;
|
|
727
|
-
margin: 14pt 0 16pt;
|
|
728
|
-
font-size: 8.4pt;
|
|
729
|
-
line-height: 1.35;
|
|
730
|
-
}
|
|
731
|
-
.atelic-ui .rp-grades th {
|
|
732
|
-
text-align: left;
|
|
733
|
-
padding: 0 6pt 4pt 0;
|
|
734
|
-
border-bottom: 1.5px solid var(--rp-ink);
|
|
735
|
-
font-family: var(--font-mono);
|
|
736
|
-
font-size: 6.5pt;
|
|
737
|
-
font-weight: 500;
|
|
738
|
-
letter-spacing: 0.1em;
|
|
739
|
-
text-transform: uppercase;
|
|
740
|
-
white-space: nowrap;
|
|
741
|
-
color: var(--rp-ink-faint);
|
|
742
|
-
}
|
|
743
|
-
.atelic-ui .rp-grades td {
|
|
744
|
-
padding: 4pt 6pt 4pt 0;
|
|
745
|
-
border-bottom: 1px solid var(--rp-rule);
|
|
746
|
-
vertical-align: top;
|
|
747
|
-
color: var(--rp-ink);
|
|
748
|
-
}
|
|
749
|
-
.atelic-ui .rp-grades tr.is-tier-start:not(:first-child) td {
|
|
750
|
-
border-top: 1px solid var(--rp-ink);
|
|
751
|
-
}
|
|
752
|
-
.atelic-ui .rp-tier {
|
|
753
|
-
width: 0.85in;
|
|
754
|
-
font-family: var(--font-mono);
|
|
755
|
-
font-size: 7pt;
|
|
756
|
-
letter-spacing: 0.1em;
|
|
757
|
-
text-transform: uppercase;
|
|
758
|
-
white-space: nowrap;
|
|
759
|
-
}
|
|
760
|
-
.atelic-ui .rp-section {
|
|
761
|
-
width: 1.9in;
|
|
762
|
-
font-weight: 600;
|
|
763
|
-
white-space: nowrap;
|
|
764
|
-
}
|
|
765
|
-
.atelic-ui .rp-now,
|
|
766
|
-
.atelic-ui .rp-earlier {
|
|
767
|
-
width: 0.65in;
|
|
768
|
-
white-space: nowrap;
|
|
769
|
-
}
|
|
770
|
-
.atelic-ui .rp-grades .op-grade {
|
|
771
|
-
margin-left: 0;
|
|
772
|
-
}
|
|
773
|
-
/* The earlier letters print muted; this month's is the one judgement. */
|
|
774
|
-
.atelic-ui .rp-earlier .op-grade {
|
|
775
|
-
opacity: 0.45;
|
|
776
|
-
}
|
|
777
|
-
.atelic-ui .rp-moved {
|
|
778
|
-
color: var(--rp-ink-soft);
|
|
779
|
-
text-wrap: pretty;
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
/* ---- the close ---- */
|
|
783
|
-
.atelic-ui .rp-close {
|
|
784
|
-
margin-top: auto;
|
|
785
|
-
padding-top: 10pt;
|
|
786
|
-
border-top: 1px solid var(--rp-rule);
|
|
787
|
-
font-size: 8pt;
|
|
788
|
-
line-height: 1.6;
|
|
789
|
-
color: var(--rp-ink-faint);
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
/* ---- the column: phones and portrait tablets ---- */
|
|
793
|
-
@media screen and (max-width: 899px) {
|
|
794
|
-
.atelic-ui .rp {
|
|
795
|
-
padding: calc(var(--nav-height) + 8px) 0 0;
|
|
796
|
-
}
|
|
797
|
-
.atelic-ui .rp-sheet {
|
|
798
|
-
padding: 22px 18px 24px;
|
|
799
|
-
border-radius: 0;
|
|
800
|
-
box-shadow: none;
|
|
801
|
-
}
|
|
802
|
-
.atelic-ui .rp-period {
|
|
803
|
-
font-size: 11px;
|
|
804
|
-
}
|
|
805
|
-
.atelic-ui .rp h1 {
|
|
806
|
-
font-size: 30px;
|
|
807
|
-
margin: 8px 0 16px;
|
|
808
|
-
}
|
|
809
|
-
.atelic-ui .rp-leads {
|
|
810
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
811
|
-
gap: 18px 16px;
|
|
812
|
-
padding: 16px 0 18px;
|
|
813
|
-
}
|
|
814
|
-
.atelic-ui .rp-q {
|
|
815
|
-
font-size: 11px;
|
|
816
|
-
}
|
|
817
|
-
.atelic-ui .rp-figure {
|
|
818
|
-
font-size: 24px;
|
|
819
|
-
}
|
|
820
|
-
.atelic-ui .rp-lead p {
|
|
821
|
-
font-size: 14px;
|
|
822
|
-
line-height: 1.45;
|
|
823
|
-
}
|
|
824
|
-
.atelic-ui .rp-grades {
|
|
825
|
-
font-size: 14px;
|
|
826
|
-
}
|
|
827
|
-
.atelic-ui .rp-grades thead {
|
|
828
|
-
position: absolute;
|
|
829
|
-
width: 1px;
|
|
830
|
-
height: 1px;
|
|
831
|
-
overflow: hidden;
|
|
832
|
-
clip: rect(0, 0, 0, 0);
|
|
833
|
-
white-space: nowrap;
|
|
834
|
-
}
|
|
835
|
-
.atelic-ui .rp-grades tr {
|
|
836
|
-
display: flex;
|
|
837
|
-
flex-wrap: wrap;
|
|
838
|
-
align-items: baseline;
|
|
839
|
-
gap: 6px 14px;
|
|
840
|
-
padding: 10px 0;
|
|
841
|
-
border-bottom: 1px solid var(--rp-rule);
|
|
842
|
-
}
|
|
843
|
-
.atelic-ui .rp-grades tr.is-tier-start:not(:first-child) {
|
|
844
|
-
border-top: 1px solid var(--rp-ink);
|
|
845
|
-
}
|
|
846
|
-
.atelic-ui .rp-grades td {
|
|
847
|
-
display: block;
|
|
848
|
-
width: auto;
|
|
849
|
-
padding: 0;
|
|
850
|
-
border: none;
|
|
851
|
-
}
|
|
852
|
-
.atelic-ui .rp-grades tr.is-tier-start:not(:first-child) td {
|
|
853
|
-
border: none;
|
|
854
|
-
}
|
|
855
|
-
/* Each row folds to the tier on its own line (first row of a tier
|
|
856
|
-
only), the section, the three letters, then what moved. */
|
|
857
|
-
.atelic-ui .rp-grades .rp-tier,
|
|
858
|
-
.atelic-ui .rp-grades .rp-section,
|
|
859
|
-
.atelic-ui .rp-grades .rp-moved {
|
|
860
|
-
width: 100%;
|
|
861
|
-
}
|
|
862
|
-
.atelic-ui .rp-tier {
|
|
863
|
-
font-size: 10px;
|
|
864
|
-
}
|
|
865
|
-
.atelic-ui .rp-tier:empty {
|
|
866
|
-
display: none;
|
|
867
|
-
}
|
|
868
|
-
.atelic-ui .rp-section {
|
|
869
|
-
white-space: normal;
|
|
870
|
-
}
|
|
871
|
-
.atelic-ui .rp-now::before,
|
|
872
|
-
.atelic-ui .rp-earlier::before {
|
|
873
|
-
content: attr(data-label);
|
|
874
|
-
margin-right: 6px;
|
|
875
|
-
font-family: var(--font-mono);
|
|
876
|
-
font-size: 10px;
|
|
877
|
-
letter-spacing: 0.08em;
|
|
878
|
-
text-transform: uppercase;
|
|
879
|
-
color: var(--rp-ink-faint);
|
|
880
|
-
}
|
|
881
|
-
.atelic-ui .rp-earlier:empty {
|
|
882
|
-
display: none;
|
|
883
|
-
}
|
|
884
|
-
.atelic-ui .rp-close {
|
|
885
|
-
padding-top: 16px;
|
|
886
|
-
font-size: 13px;
|
|
887
|
-
}
|
|
888
|
-
}
|
|
889
|
-
|
|
890
|
-
/* ---- print: one letter sheet, the document alone ---- */
|
|
891
|
-
@page {
|
|
892
|
-
size: letter;
|
|
893
|
-
margin: 0;
|
|
894
|
-
}
|
|
895
|
-
@media print {
|
|
896
|
-
html,
|
|
897
|
-
body {
|
|
898
|
-
margin: 0;
|
|
899
|
-
padding: 0;
|
|
900
|
-
background: none;
|
|
901
|
-
}
|
|
902
|
-
.atelic-ui:has(.rp) .nav,
|
|
903
|
-
.atelic-ui:has(.rp) .skip-link,
|
|
904
|
-
.atelic-ui:has(.rp) .credit-bar {
|
|
905
|
-
display: none;
|
|
906
|
-
}
|
|
907
|
-
.atelic-ui .rp {
|
|
908
|
-
padding: 0;
|
|
909
|
-
background: none;
|
|
910
|
-
}
|
|
911
|
-
.atelic-ui .rp-sheet {
|
|
912
|
-
width: 8.5in;
|
|
913
|
-
height: 11in;
|
|
914
|
-
max-width: none;
|
|
915
|
-
margin: 0;
|
|
916
|
-
overflow: hidden;
|
|
917
|
-
border-radius: 0;
|
|
918
|
-
box-shadow: none;
|
|
919
|
-
}
|
|
920
|
-
}
|
|
921
|
-
|
|
922
|
-
/* =================================================================
|
|
923
|
-
THE WRITEUP: a web page first, and the printed copy from the same
|
|
924
|
-
page.
|
|
925
|
-
|
|
926
|
-
- Phone first: the base rules are the phone's. Each section is a card
|
|
927
|
-
of small blocks in one column; a table's rows stack, each fact
|
|
928
|
-
wearing its column's label, so nothing scrolls sideways.
|
|
929
|
-
- Wide (721px and up): the same cards with room: the overview on one
|
|
930
|
-
line a section, real table columns, the owner's screen beside the
|
|
931
|
-
findings.
|
|
932
|
-
- Print: the chrome steps aside, the lockup and the pointer to the
|
|
933
|
-
hosted page appear, the type comes down, and the cards flow across
|
|
934
|
-
letter pages. Nothing is clipped and no block splits across pages.
|
|
935
|
-
|
|
936
|
-
Tokens only (theme.css). The blocks inside a section (the checklist,
|
|
937
|
-
the sortable table, the charts, the stat row, the callout, the
|
|
938
|
-
disclosure) and their tones are styles/components.css's; this sheet sets
|
|
939
|
-
the document around them and their sizes here.
|
|
940
|
-
================================================================= */
|
|
941
|
-
.atelic-ui .op {
|
|
942
|
-
--op-ink: var(--ink);
|
|
943
|
-
--op-ink-soft: var(--ink-soft);
|
|
944
|
-
--op-ink-faint: var(--neutral-500);
|
|
945
|
-
--op-rule: var(--neutral-100);
|
|
946
|
-
--op-accent: var(--primary);
|
|
947
|
-
--op-card: var(--card);
|
|
948
|
-
font-family: var(--font-sans);
|
|
949
|
-
color: var(--op-ink);
|
|
950
|
-
background: var(--surface);
|
|
951
|
-
min-height: 100vh;
|
|
952
|
-
}
|
|
953
|
-
.atelic-ui .op a {
|
|
954
|
-
color: inherit;
|
|
955
|
-
text-decoration: none;
|
|
956
|
-
}
|
|
957
|
-
.atelic-ui .op-doc {
|
|
958
|
-
max-width: 920px;
|
|
959
|
-
margin: 0 auto;
|
|
960
|
-
padding: calc(var(--nav-height) + 22px) 16px 48px;
|
|
961
|
-
font-size: 16px;
|
|
962
|
-
line-height: 1.5;
|
|
963
|
-
print-color-adjust: exact;
|
|
964
|
-
-webkit-print-color-adjust: exact;
|
|
965
|
-
}
|
|
966
|
-
|
|
967
|
-
/* ---- the head: who it is for, what it is ---- */
|
|
968
|
-
.atelic-ui .op-top {
|
|
969
|
-
display: none;
|
|
970
|
-
}
|
|
971
|
-
.atelic-ui .op-meta {
|
|
972
|
-
margin: 0 0 10px;
|
|
973
|
-
font-family: var(--font-mono);
|
|
974
|
-
font-size: 12.5px;
|
|
975
|
-
letter-spacing: 0.04em;
|
|
976
|
-
color: var(--op-ink-faint);
|
|
977
|
-
}
|
|
978
|
-
.atelic-ui .op-meta b {
|
|
979
|
-
font-weight: 500;
|
|
980
|
-
color: var(--op-ink-soft);
|
|
981
|
-
}
|
|
982
|
-
/* On a phone the date takes its own line; wide, it follows a middle dot. */
|
|
983
|
-
.atelic-ui .op-meta-sep {
|
|
984
|
-
display: none;
|
|
985
|
-
}
|
|
986
|
-
.atelic-ui .op-meta-date {
|
|
987
|
-
display: block;
|
|
988
|
-
}
|
|
989
|
-
.atelic-ui .op h1 {
|
|
990
|
-
font-size: clamp(32px, 5vw, 44px);
|
|
991
|
-
font-weight: 650;
|
|
992
|
-
letter-spacing: -0.03em;
|
|
993
|
-
line-height: 1.08;
|
|
994
|
-
margin: 0;
|
|
995
|
-
text-wrap: balance;
|
|
996
|
-
color: var(--op-ink);
|
|
997
|
-
}
|
|
998
|
-
.atelic-ui .op-intro {
|
|
999
|
-
margin: 14px 0 0;
|
|
1000
|
-
max-width: 62ch;
|
|
1001
|
-
font-size: 16.5px;
|
|
1002
|
-
line-height: 1.5;
|
|
1003
|
-
color: var(--op-ink-soft);
|
|
1004
|
-
text-wrap: pretty;
|
|
1005
|
-
}
|
|
1006
|
-
|
|
1007
|
-
/* ---- the grade chip, at web sizes ---- */
|
|
1008
|
-
.atelic-ui .op .op-grade {
|
|
1009
|
-
display: inline-grid;
|
|
1010
|
-
place-items: center;
|
|
1011
|
-
margin: 0;
|
|
1012
|
-
padding: 0;
|
|
1013
|
-
width: 26px;
|
|
1014
|
-
height: 26px;
|
|
1015
|
-
border-radius: 8px;
|
|
1016
|
-
font-family: var(--font-sans);
|
|
1017
|
-
font-size: 14px;
|
|
1018
|
-
font-weight: 700;
|
|
1019
|
-
letter-spacing: 0;
|
|
1020
|
-
line-height: 1;
|
|
1021
|
-
vertical-align: middle;
|
|
1022
|
-
flex: none;
|
|
1023
|
-
}
|
|
1024
|
-
|
|
1025
|
-
/* ---- the overview: the key, then every section under its tier, each a
|
|
1026
|
-
grade, a name that links to the section, and one plain read ---- */
|
|
1027
|
-
.atelic-ui .op-ov {
|
|
1028
|
-
margin-top: 22px;
|
|
1029
|
-
scroll-margin-top: calc(var(--nav-height) + 16px);
|
|
1030
|
-
}
|
|
1031
|
-
.atelic-ui .op-ov-head {
|
|
1032
|
-
display: flex;
|
|
1033
|
-
flex-wrap: wrap;
|
|
1034
|
-
align-items: center;
|
|
1035
|
-
justify-content: space-between;
|
|
1036
|
-
gap: 8px 20px;
|
|
1037
|
-
margin-bottom: 10px;
|
|
1038
|
-
}
|
|
1039
|
-
.atelic-ui .op-ov-title {
|
|
1040
|
-
font-size: 13px;
|
|
1041
|
-
font-family: var(--font-mono);
|
|
1042
|
-
font-weight: 500;
|
|
1043
|
-
letter-spacing: 0.1em;
|
|
1044
|
-
text-transform: uppercase;
|
|
1045
|
-
color: var(--op-ink-faint);
|
|
1046
|
-
margin: 0;
|
|
1047
|
-
}
|
|
1048
|
-
.atelic-ui .op-legend {
|
|
1049
|
-
list-style: none;
|
|
1050
|
-
margin: 0;
|
|
1051
|
-
padding: 0;
|
|
1052
|
-
display: flex;
|
|
1053
|
-
flex-wrap: wrap;
|
|
1054
|
-
gap: 6px 16px;
|
|
1055
|
-
font-size: 13.5px;
|
|
1056
|
-
color: var(--op-ink-soft);
|
|
1057
|
-
}
|
|
1058
|
-
.atelic-ui .op-legend li {
|
|
1059
|
-
display: inline-flex;
|
|
1060
|
-
align-items: center;
|
|
1061
|
-
gap: 7px;
|
|
1062
|
-
}
|
|
1063
|
-
.atelic-ui .op-legend .op-grade {
|
|
1064
|
-
width: 22px;
|
|
1065
|
-
height: 22px;
|
|
1066
|
-
border-radius: 6px;
|
|
1067
|
-
font-size: 12px;
|
|
1068
|
-
}
|
|
1069
|
-
.atelic-ui .op-ov-card {
|
|
1070
|
-
background: var(--op-card);
|
|
1071
|
-
border: 1px solid var(--op-rule);
|
|
1072
|
-
border-radius: var(--radius-md);
|
|
1073
|
-
box-shadow: var(--shadow-sm);
|
|
1074
|
-
overflow: hidden;
|
|
1075
|
-
}
|
|
1076
|
-
.atelic-ui .op-ov-tier-label {
|
|
1077
|
-
padding: 7px 16px;
|
|
1078
|
-
background: var(--surface-alt);
|
|
1079
|
-
font-family: var(--font-mono);
|
|
1080
|
-
font-size: 11.5px;
|
|
1081
|
-
letter-spacing: 0.1em;
|
|
1082
|
-
text-transform: uppercase;
|
|
1083
|
-
color: var(--op-ink-soft);
|
|
1084
|
-
}
|
|
1085
|
-
.atelic-ui .op-ov-tier ul {
|
|
1086
|
-
list-style: none;
|
|
1087
|
-
margin: 0;
|
|
1088
|
-
padding: 0;
|
|
1089
|
-
}
|
|
1090
|
-
.atelic-ui .op-ov-row {
|
|
1091
|
-
position: relative;
|
|
1092
|
-
display: grid;
|
|
1093
|
-
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
1094
|
-
column-gap: 12px;
|
|
1095
|
-
row-gap: 2px;
|
|
1096
|
-
align-items: start;
|
|
1097
|
-
padding: 12px 12px 12px 16px;
|
|
1098
|
-
border-top: 1px solid var(--op-rule);
|
|
1099
|
-
}
|
|
1100
|
-
.atelic-ui .op-ov-row:hover {
|
|
1101
|
-
background: var(--surface);
|
|
1102
|
-
}
|
|
1103
|
-
.atelic-ui .op-ov-grade {
|
|
1104
|
-
grid-row: 1 / span 2;
|
|
1105
|
-
display: inline-flex;
|
|
1106
|
-
align-items: center;
|
|
1107
|
-
gap: 6px;
|
|
1108
|
-
}
|
|
1109
|
-
.atelic-ui .op-ov-grade .op-grade {
|
|
1110
|
-
width: 30px;
|
|
1111
|
-
height: 30px;
|
|
1112
|
-
border-radius: 9px;
|
|
1113
|
-
font-size: 15px;
|
|
1114
|
-
}
|
|
1115
|
-
.atelic-ui .op-ov-before .op-grade {
|
|
1116
|
-
opacity: 0.45;
|
|
1117
|
-
}
|
|
1118
|
-
.atelic-ui .op-ov-name {
|
|
1119
|
-
font-size: 16px;
|
|
1120
|
-
font-weight: 650;
|
|
1121
|
-
letter-spacing: -0.01em;
|
|
1122
|
-
line-height: 1.35;
|
|
1123
|
-
padding-top: 3px;
|
|
1124
|
-
}
|
|
1125
|
-
/* The name is the link, and it covers the row; a link inside the read
|
|
1126
|
-
sits above it. */
|
|
1127
|
-
.atelic-ui .op-ov-name a::after {
|
|
1128
|
-
content: "";
|
|
1129
|
-
position: absolute;
|
|
1130
|
-
inset: 0;
|
|
1131
|
-
}
|
|
1132
|
-
.atelic-ui .op-ov-row:hover .op-ov-name {
|
|
1133
|
-
color: var(--op-accent);
|
|
1134
|
-
}
|
|
1135
|
-
.atelic-ui .op-ov-read {
|
|
1136
|
-
grid-column: 2;
|
|
1137
|
-
font-size: 15px;
|
|
1138
|
-
line-height: 1.45;
|
|
1139
|
-
color: var(--op-ink-soft);
|
|
1140
|
-
text-wrap: pretty;
|
|
1141
|
-
}
|
|
1142
|
-
.atelic-ui .op-ov-read a {
|
|
1143
|
-
position: relative;
|
|
1144
|
-
z-index: 1;
|
|
1145
|
-
color: var(--op-accent);
|
|
1146
|
-
text-decoration: underline;
|
|
1147
|
-
text-underline-offset: 2px;
|
|
1148
|
-
}
|
|
1149
|
-
.atelic-ui .op-ov-go {
|
|
1150
|
-
grid-column: 3;
|
|
1151
|
-
grid-row: 1;
|
|
1152
|
-
margin-top: 5px;
|
|
1153
|
-
color: var(--neutral-300);
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
/* ---- a part: the tier and the question it answers ---- */
|
|
1157
|
-
.atelic-ui .op-part {
|
|
1158
|
-
margin: 34px 0 10px;
|
|
1159
|
-
scroll-margin-top: calc(var(--nav-height) + 16px);
|
|
1160
|
-
}
|
|
1161
|
-
.atelic-ui .op-part h2 {
|
|
1162
|
-
font-size: 27px;
|
|
1163
|
-
font-weight: 650;
|
|
1164
|
-
letter-spacing: -0.025em;
|
|
1165
|
-
line-height: 1.1;
|
|
1166
|
-
margin: 0;
|
|
1167
|
-
color: var(--op-ink);
|
|
1168
|
-
}
|
|
1169
|
-
.atelic-ui .op-part p {
|
|
1170
|
-
margin: 6px 0 0;
|
|
1171
|
-
font-size: 16.5px;
|
|
1172
|
-
color: var(--op-ink-soft);
|
|
1173
|
-
}
|
|
1174
|
-
|
|
1175
|
-
/* ---- a topic: one section, a card of blocks ---- */
|
|
1176
|
-
.atelic-ui .op-topic {
|
|
1177
|
-
background: var(--op-card);
|
|
1178
|
-
border: 1px solid var(--op-rule);
|
|
1179
|
-
border-radius: var(--radius-md);
|
|
1180
|
-
box-shadow: var(--shadow-sm);
|
|
1181
|
-
padding: 18px 16px 16px;
|
|
1182
|
-
margin-top: 12px;
|
|
1183
|
-
scroll-margin-top: calc(var(--nav-height) + 16px);
|
|
1184
|
-
}
|
|
1185
|
-
.atelic-ui .op-topic-head {
|
|
1186
|
-
display: flex;
|
|
1187
|
-
justify-content: space-between;
|
|
1188
|
-
align-items: flex-start;
|
|
1189
|
-
gap: 20px;
|
|
1190
|
-
}
|
|
1191
|
-
.atelic-ui .op-topic h3 {
|
|
1192
|
-
font-size: 21px;
|
|
1193
|
-
font-weight: 650;
|
|
1194
|
-
letter-spacing: -0.02em;
|
|
1195
|
-
line-height: 1.2;
|
|
1196
|
-
margin: 0;
|
|
1197
|
-
color: var(--op-ink);
|
|
1198
|
-
}
|
|
1199
|
-
.atelic-ui .op-topic h3 a {
|
|
1200
|
-
display: inline-flex;
|
|
1201
|
-
align-items: center;
|
|
1202
|
-
gap: 6px;
|
|
1203
|
-
border-bottom: 1px solid var(--neutral-200);
|
|
1204
|
-
}
|
|
1205
|
-
.atelic-ui .op-topic h3 a svg {
|
|
1206
|
-
color: var(--op-ink-faint);
|
|
1207
|
-
}
|
|
1208
|
-
.atelic-ui .op-topic h3 a:hover,
|
|
1209
|
-
.atelic-ui .op-topic h3 a:hover svg {
|
|
1210
|
-
color: var(--op-accent);
|
|
1211
|
-
border-color: var(--op-accent);
|
|
1212
|
-
}
|
|
1213
|
-
.atelic-ui .op-def {
|
|
1214
|
-
margin: 6px 0 0;
|
|
1215
|
-
font-size: 16px;
|
|
1216
|
-
line-height: 1.45;
|
|
1217
|
-
color: var(--op-ink-soft);
|
|
1218
|
-
text-wrap: pretty;
|
|
1219
|
-
}
|
|
1220
|
-
/* why the letter: the rule the section met, in a line */
|
|
1221
|
-
.atelic-ui .op-why {
|
|
1222
|
-
margin: 6px 0 0;
|
|
1223
|
-
font-size: 14.5px;
|
|
1224
|
-
line-height: 1.45;
|
|
1225
|
-
color: var(--op-ink-soft);
|
|
1226
|
-
text-wrap: pretty;
|
|
1227
|
-
}
|
|
1228
|
-
.atelic-ui .op-why b {
|
|
1229
|
-
font-weight: 650;
|
|
1230
|
-
color: var(--op-ink);
|
|
1231
|
-
}
|
|
1232
|
-
.atelic-ui .op-topic-head > .op-grade {
|
|
1233
|
-
width: 42px;
|
|
1234
|
-
height: 42px;
|
|
1235
|
-
border-radius: 12px;
|
|
1236
|
-
font-size: 21px;
|
|
1237
|
-
}
|
|
1238
|
-
|
|
1239
|
-
/* ---- blocks inside a topic, one under another ---- */
|
|
1240
|
-
.atelic-ui .op-blocks {
|
|
1241
|
-
display: grid;
|
|
1242
|
-
grid-template-columns: minmax(0, 1fr);
|
|
1243
|
-
}
|
|
1244
|
-
.atelic-ui .op-block {
|
|
1245
|
-
margin-top: 16px;
|
|
1246
|
-
padding-top: 16px;
|
|
1247
|
-
border-top: 1px solid var(--op-rule);
|
|
1248
|
-
min-width: 0;
|
|
1249
|
-
}
|
|
1250
|
-
.atelic-ui .op-block-head {
|
|
1251
|
-
margin-bottom: 12px;
|
|
1252
|
-
}
|
|
1253
|
-
.atelic-ui .op-block-head h4 {
|
|
1254
|
-
font-size: 16px;
|
|
1255
|
-
font-weight: 650;
|
|
1256
|
-
letter-spacing: -0.005em;
|
|
1257
|
-
margin: 0;
|
|
1258
|
-
color: var(--op-ink);
|
|
1259
|
-
}
|
|
1260
|
-
.atelic-ui .op-block-head p {
|
|
1261
|
-
margin: 3px 0 0;
|
|
1262
|
-
font-size: 15px;
|
|
1263
|
-
line-height: 1.45;
|
|
1264
|
-
color: var(--op-ink-soft);
|
|
1265
|
-
text-wrap: pretty;
|
|
1266
|
-
}
|
|
1267
|
-
.atelic-ui .op-note {
|
|
1268
|
-
margin: 12px 0 0;
|
|
1269
|
-
font-size: 15px;
|
|
1270
|
-
line-height: 1.5;
|
|
1271
|
-
color: var(--op-ink-soft);
|
|
1272
|
-
text-wrap: pretty;
|
|
1273
|
-
}
|
|
1274
|
-
.atelic-ui .op-note b {
|
|
1275
|
-
color: var(--op-ink);
|
|
1276
|
-
font-weight: 600;
|
|
1277
|
-
}
|
|
1278
|
-
.atelic-ui .op-dash {
|
|
1279
|
-
display: inline-block;
|
|
1280
|
-
width: 14px;
|
|
1281
|
-
height: 1.5px;
|
|
1282
|
-
vertical-align: 0.3em;
|
|
1283
|
-
background: var(--neutral-300);
|
|
1284
|
-
}
|
|
1285
|
-
|
|
1286
|
-
/* The blocks are the shared package's components. These are the writeup's
|
|
1287
|
-
sizes for them. */
|
|
1288
|
-
.atelic-ui .op-checks .checklist,
|
|
1289
|
-
.atelic-ui .op-scale .threshold-scale {
|
|
1290
|
-
font-size: 15px;
|
|
1291
|
-
}
|
|
1292
|
-
.atelic-ui .op-bar .chart-key,
|
|
1293
|
-
.atelic-ui .op-columns .chart-key {
|
|
1294
|
-
font-size: 13px;
|
|
1295
|
-
}
|
|
1296
|
-
|
|
1297
|
-
/* the table: its layout is the shared DataTable's; these are the writeup's
|
|
1298
|
-
own sizes and the two line row names. */
|
|
1299
|
-
.atelic-ui .op-table .data-table {
|
|
1300
|
-
font-size: 15px;
|
|
1301
|
-
}
|
|
1302
|
-
.atelic-ui .op-table tbody th b {
|
|
1303
|
-
display: block;
|
|
1304
|
-
font-weight: 600;
|
|
1305
|
-
}
|
|
1306
|
-
.atelic-ui .op-table tbody th a,
|
|
1307
|
-
.atelic-ui .op-table .op-sub {
|
|
1308
|
-
display: block;
|
|
1309
|
-
font-family: var(--font-mono);
|
|
1310
|
-
font-size: 12px;
|
|
1311
|
-
color: var(--op-ink-faint);
|
|
1312
|
-
overflow-wrap: anywhere;
|
|
1313
|
-
}
|
|
1314
|
-
.atelic-ui .op-table tbody th a:hover {
|
|
1315
|
-
color: var(--op-accent);
|
|
1316
|
-
}
|
|
1317
|
-
.atelic-ui .op-table tr[data-tone="bad"] th b {
|
|
1318
|
-
color: var(--tone-bad);
|
|
1319
|
-
}
|
|
1320
|
-
.atelic-ui .op-table td {
|
|
1321
|
-
white-space: nowrap;
|
|
1322
|
-
}
|
|
1323
|
-
/* A cell of running words wraps; a cell of figures never does. */
|
|
1324
|
-
.atelic-ui .op-table td:has(.op-wrap) {
|
|
1325
|
-
white-space: normal;
|
|
1326
|
-
}
|
|
1327
|
-
.atelic-ui .op-mark-cell {
|
|
1328
|
-
display: inline-flex;
|
|
1329
|
-
align-items: center;
|
|
1330
|
-
gap: 6px;
|
|
1331
|
-
color: var(--tone);
|
|
1332
|
-
font-weight: 600;
|
|
1333
|
-
}
|
|
1334
|
-
/* the icon keeps its size however long the words beside it run */
|
|
1335
|
-
.atelic-ui .op-mark-cell svg {
|
|
1336
|
-
flex: none;
|
|
1337
|
-
}
|
|
1338
|
-
.atelic-ui .op-rating {
|
|
1339
|
-
display: inline-flex;
|
|
1340
|
-
align-items: center;
|
|
1341
|
-
gap: 4px;
|
|
1342
|
-
font-weight: 600;
|
|
1343
|
-
color: var(--tone, var(--op-ink));
|
|
1344
|
-
}
|
|
1345
|
-
.atelic-ui .op-rating svg {
|
|
1346
|
-
color: var(--tone, var(--tone-warn-fill));
|
|
1347
|
-
fill: currentColor;
|
|
1348
|
-
}
|
|
1349
|
-
|
|
1350
|
-
/* a few big numbers: the shared StatRow, at the writeup's sizes */
|
|
1351
|
-
.atelic-ui .op-stats .stat-row {
|
|
1352
|
-
gap: 18px 28px;
|
|
1353
|
-
}
|
|
1354
|
-
.atelic-ui .op-stats .stat .num {
|
|
1355
|
-
font-size: 28px;
|
|
1356
|
-
font-weight: 700;
|
|
1357
|
-
letter-spacing: -0.02em;
|
|
1358
|
-
line-height: 1.1;
|
|
1359
|
-
color: var(--tone, var(--op-ink));
|
|
1360
|
-
}
|
|
1361
|
-
.atelic-ui .op-stats .stat-delta {
|
|
1362
|
-
font-size: 13px;
|
|
1363
|
-
}
|
|
1364
|
-
.atelic-ui .op-stats .stat .lbl {
|
|
1365
|
-
margin-top: 6px;
|
|
1366
|
-
font-size: 15px;
|
|
1367
|
-
}
|
|
1368
|
-
|
|
1369
|
-
/* pictures on their own: the same size, side by side */
|
|
1370
|
-
.atelic-ui .op-shots-row {
|
|
1371
|
-
display: grid;
|
|
1372
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1373
|
-
gap: 16px;
|
|
1374
|
-
max-width: 520px;
|
|
1375
|
-
align-items: start;
|
|
1376
|
-
}
|
|
1377
|
-
/* three sit on one line, on a phone as well */
|
|
1378
|
-
.atelic-ui .op-shots-row[data-count="3"] {
|
|
1379
|
-
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1380
|
-
gap: 12px;
|
|
1381
|
-
max-width: 780px;
|
|
1382
|
-
}
|
|
1383
|
-
.atelic-ui .op-shots-row .op-shot a,
|
|
1384
|
-
.atelic-ui .op-shots-row .op-shot-frame {
|
|
1385
|
-
aspect-ratio: 3 / 4;
|
|
1386
|
-
background: var(--surface);
|
|
1387
|
-
}
|
|
1388
|
-
.atelic-ui .op-shots-row .op-shot img {
|
|
1389
|
-
width: 100%;
|
|
1390
|
-
height: 100%;
|
|
1391
|
-
object-fit: contain;
|
|
1392
|
-
object-position: center;
|
|
1393
|
-
}
|
|
1394
|
-
|
|
1395
|
-
/* the native disclosure: the shared one, at the writeup's sizes */
|
|
1396
|
-
.atelic-ui .op-block.disclosure.is-native {
|
|
1397
|
-
border-top: 1px solid var(--op-rule);
|
|
1398
|
-
}
|
|
1399
|
-
.atelic-ui .op-more .disclosure-label {
|
|
1400
|
-
font-size: 16px;
|
|
1401
|
-
}
|
|
1402
|
-
.atelic-ui .op-more .disclosure-summary {
|
|
1403
|
-
font-size: 15px;
|
|
1404
|
-
line-height: 1.45;
|
|
1405
|
-
}
|
|
1406
|
-
.atelic-ui .op-more.is-native > .disclosure-body {
|
|
1407
|
-
margin-top: 0;
|
|
1408
|
-
}
|
|
1409
|
-
.atelic-ui .op-more-body {
|
|
1410
|
-
display: grid;
|
|
1411
|
-
grid-template-columns: minmax(0, 1fr);
|
|
1412
|
-
}
|
|
1413
|
-
.atelic-ui .op-more-body > .op-block:first-child {
|
|
1414
|
-
border-top: 0;
|
|
1415
|
-
margin-top: 6px;
|
|
1416
|
-
padding-top: 6px;
|
|
1417
|
-
}
|
|
1418
|
-
|
|
1419
|
-
/* findings: the shared Callout, one under another, with the owner's screen
|
|
1420
|
-
beside them */
|
|
1421
|
-
.atelic-ui .op-findings.has-shots {
|
|
1422
|
-
display: grid;
|
|
1423
|
-
grid-template-columns: minmax(0, 1fr);
|
|
1424
|
-
gap: 18px;
|
|
1425
|
-
align-items: start;
|
|
1426
|
-
}
|
|
1427
|
-
.atelic-ui .op-findings-list {
|
|
1428
|
-
display: flex;
|
|
1429
|
-
flex-direction: column;
|
|
1430
|
-
gap: 14px;
|
|
1431
|
-
}
|
|
1432
|
-
.atelic-ui .op-findings .callout {
|
|
1433
|
-
font-size: 15.5px;
|
|
1434
|
-
line-height: 1.5;
|
|
1435
|
-
}
|
|
1436
|
-
.atelic-ui .op-findings .callout a,
|
|
1437
|
-
.atelic-ui .op-note a,
|
|
1438
|
-
.atelic-ui .op-block-head p a {
|
|
1439
|
-
color: var(--op-accent);
|
|
1440
|
-
text-decoration: underline;
|
|
1441
|
-
text-underline-offset: 2px;
|
|
1442
|
-
overflow-wrap: anywhere;
|
|
1443
|
-
}
|
|
1444
|
-
.atelic-ui .op-shots {
|
|
1445
|
-
display: flex;
|
|
1446
|
-
flex-direction: column;
|
|
1447
|
-
gap: 14px;
|
|
1448
|
-
max-width: 340px;
|
|
1449
|
-
}
|
|
119
|
+
/* ---- the shot: the owner's own screen over its caption ----
|
|
120
|
+
It reads the writeup's own two tokens (--op-card, --op-ink-faint), which
|
|
121
|
+
a document maps on its root, and falls back to the theme's when it sits
|
|
122
|
+
outside one. A document sizes it and lays shots out in its own sheet. */
|
|
1450
123
|
.atelic-ui .op-shot {
|
|
1451
124
|
display: flex;
|
|
1452
125
|
flex-direction: column;
|
|
@@ -1460,7 +133,7 @@
|
|
|
1460
133
|
border-radius: var(--radius-sm);
|
|
1461
134
|
overflow: hidden;
|
|
1462
135
|
border: 1px solid var(--neutral-200);
|
|
1463
|
-
background: var(--op-card);
|
|
136
|
+
background: var(--op-card, var(--card));
|
|
1464
137
|
}
|
|
1465
138
|
.atelic-ui .op-shot a {
|
|
1466
139
|
cursor: zoom-in;
|
|
@@ -1474,823 +147,25 @@
|
|
|
1474
147
|
height: auto;
|
|
1475
148
|
display: block;
|
|
1476
149
|
}
|
|
1477
|
-
.atelic-ui .op-shot-brief {
|
|
1478
|
-
display: grid;
|
|
1479
|
-
place-items: center;
|
|
1480
|
-
min-height: 140px;
|
|
1481
|
-
border: 1px dashed var(--neutral-300);
|
|
1482
|
-
border-radius: var(--radius-sm);
|
|
1483
|
-
font-family: var(--font-mono);
|
|
1484
|
-
font-size: 12px;
|
|
1485
|
-
color: var(--op-ink-faint);
|
|
1486
|
-
padding: 12px;
|
|
1487
|
-
text-align: center;
|
|
1488
|
-
}
|
|
1489
150
|
.atelic-ui .op-shot figcaption {
|
|
1490
151
|
font-size: 12.5px;
|
|
1491
152
|
line-height: 1.45;
|
|
1492
|
-
color: var(--op-ink-faint);
|
|
1493
|
-
}
|
|
1494
|
-
|
|
1495
|
-
/* sources: the tools the readings came from */
|
|
1496
|
-
.atelic-ui .op-sources {
|
|
1497
|
-
margin-top: 16px;
|
|
1498
|
-
padding-top: 12px;
|
|
1499
|
-
border-top: 1px solid var(--op-rule);
|
|
1500
|
-
display: flex;
|
|
1501
|
-
flex-wrap: wrap;
|
|
1502
|
-
align-items: baseline;
|
|
1503
|
-
gap: 6px 16px;
|
|
1504
|
-
font-size: 13.5px;
|
|
1505
|
-
}
|
|
1506
|
-
.atelic-ui .op-sources-label {
|
|
1507
|
-
font-family: var(--font-mono);
|
|
1508
|
-
font-size: 11.5px;
|
|
1509
|
-
letter-spacing: 0.1em;
|
|
1510
|
-
text-transform: uppercase;
|
|
1511
|
-
color: var(--op-ink-faint);
|
|
1512
|
-
}
|
|
1513
|
-
.atelic-ui .op-sources ul {
|
|
1514
|
-
list-style: none;
|
|
1515
|
-
margin: 0;
|
|
1516
|
-
padding: 0;
|
|
1517
|
-
display: flex;
|
|
1518
|
-
flex-wrap: wrap;
|
|
1519
|
-
gap: 6px 18px;
|
|
1520
|
-
color: var(--op-ink-soft);
|
|
1521
|
-
}
|
|
1522
|
-
.atelic-ui .op-sources a {
|
|
1523
|
-
display: inline-flex;
|
|
1524
|
-
align-items: center;
|
|
1525
|
-
gap: 3px;
|
|
1526
|
-
color: var(--op-accent);
|
|
1527
|
-
font-weight: 550;
|
|
1528
|
-
}
|
|
1529
|
-
.atelic-ui .op-sources a:hover {
|
|
1530
|
-
text-decoration: underline;
|
|
1531
|
-
text-underline-offset: 2px;
|
|
1532
|
-
}
|
|
1533
|
-
|
|
1534
|
-
/* ---- the rented line: paid's facts in one line, ungraded ---- */
|
|
1535
|
-
.atelic-ui .op-rented {
|
|
1536
|
-
display: flex;
|
|
1537
|
-
flex-direction: column;
|
|
1538
|
-
gap: 6px;
|
|
1539
|
-
margin: 18px 0 0;
|
|
1540
|
-
padding: 16px;
|
|
1541
|
-
background: var(--surface-alt);
|
|
1542
|
-
border-radius: var(--radius-md);
|
|
1543
|
-
font-size: 15.5px;
|
|
1544
|
-
line-height: 1.5;
|
|
1545
|
-
color: var(--op-ink);
|
|
1546
|
-
text-wrap: pretty;
|
|
1547
|
-
}
|
|
1548
|
-
.atelic-ui .op-rented-label {
|
|
1549
|
-
flex: none;
|
|
1550
|
-
font-family: var(--font-mono);
|
|
1551
|
-
font-size: 11.5px;
|
|
1552
|
-
letter-spacing: 0.1em;
|
|
1553
|
-
text-transform: uppercase;
|
|
1554
|
-
color: var(--op-ink-soft);
|
|
1555
|
-
}
|
|
1556
|
-
|
|
1557
|
-
/* ---- the markets table: on a phone each market stacks, its letters on
|
|
1558
|
-
one line with their column's label; wide, it is a table ---- */
|
|
1559
|
-
.atelic-ui .op-markets-table {
|
|
1560
|
-
display: block;
|
|
1561
|
-
width: 100%;
|
|
1562
|
-
margin-top: 18px;
|
|
1563
|
-
font-size: 15px;
|
|
1564
|
-
line-height: 1.4;
|
|
1565
|
-
}
|
|
1566
|
-
.atelic-ui .op-markets-table tbody {
|
|
1567
|
-
display: block;
|
|
1568
|
-
}
|
|
1569
|
-
.atelic-ui .op-markets-table thead {
|
|
1570
|
-
position: absolute;
|
|
1571
|
-
width: 1px;
|
|
1572
|
-
height: 1px;
|
|
1573
|
-
overflow: hidden;
|
|
1574
|
-
clip: rect(0, 0, 0, 0);
|
|
1575
|
-
white-space: nowrap;
|
|
1576
|
-
}
|
|
1577
|
-
.atelic-ui .op-markets-table tbody tr {
|
|
1578
|
-
display: flex;
|
|
1579
|
-
flex-wrap: wrap;
|
|
1580
|
-
align-items: center;
|
|
1581
|
-
column-gap: 16px;
|
|
1582
|
-
row-gap: 6px;
|
|
1583
|
-
padding: 12px 0;
|
|
1584
|
-
border-bottom: 1px solid var(--op-rule);
|
|
1585
|
-
}
|
|
1586
|
-
.atelic-ui .op-markets-table tbody tr:last-child {
|
|
1587
|
-
border-bottom: 0;
|
|
1588
|
-
}
|
|
1589
|
-
.atelic-ui .op-markets-table th,
|
|
1590
|
-
.atelic-ui .op-markets-table td {
|
|
1591
|
-
text-align: left;
|
|
1592
|
-
color: var(--op-ink);
|
|
1593
|
-
}
|
|
1594
|
-
.atelic-ui .op-markets-table .op-markets-market,
|
|
1595
|
-
.atelic-ui .op-markets-table .op-markets-read {
|
|
1596
|
-
width: 100%;
|
|
1597
|
-
}
|
|
1598
|
-
.atelic-ui .op-markets-market {
|
|
1599
|
-
font-weight: 600;
|
|
1600
|
-
}
|
|
1601
|
-
.atelic-ui .op-markets-place {
|
|
1602
|
-
display: block;
|
|
1603
|
-
font-weight: 400;
|
|
1604
|
-
font-size: 12.5px;
|
|
1605
|
-
color: var(--op-ink-faint);
|
|
1606
|
-
}
|
|
1607
|
-
.atelic-ui .op-markets-col,
|
|
1608
|
-
.atelic-ui .op-markets-label {
|
|
1609
|
-
font-family: var(--font-mono);
|
|
1610
|
-
font-size: 11.5px;
|
|
1611
|
-
font-weight: 400;
|
|
1612
|
-
letter-spacing: 0.08em;
|
|
1613
|
-
text-transform: uppercase;
|
|
1614
|
-
color: var(--op-ink-soft);
|
|
1615
|
-
white-space: nowrap;
|
|
1616
|
-
}
|
|
1617
|
-
.atelic-ui .op-markets-label {
|
|
1618
|
-
margin-right: 6px;
|
|
1619
|
-
}
|
|
1620
|
-
.atelic-ui .op-markets-grade {
|
|
1621
|
-
white-space: nowrap;
|
|
1622
|
-
}
|
|
1623
|
-
.atelic-ui .op-markets-table .op-markets-read {
|
|
1624
|
-
color: var(--op-ink-soft);
|
|
1625
|
-
text-wrap: pretty;
|
|
1626
|
-
}
|
|
1627
|
-
|
|
1628
|
-
/* ---- the close ---- */
|
|
1629
|
-
.atelic-ui .op-close {
|
|
1630
|
-
margin-top: 44px;
|
|
1631
|
-
padding-top: 22px;
|
|
1632
|
-
border-top: 1px solid var(--neutral-200);
|
|
1633
|
-
display: flex;
|
|
1634
|
-
flex-direction: column;
|
|
1635
|
-
align-items: flex-start;
|
|
1636
|
-
gap: 14px;
|
|
1637
|
-
font-size: 14px;
|
|
1638
|
-
line-height: 1.6;
|
|
1639
|
-
color: var(--op-ink-faint);
|
|
1640
|
-
}
|
|
1641
|
-
.atelic-ui .op-close b {
|
|
1642
|
-
font-weight: 500;
|
|
1643
|
-
color: var(--op-ink);
|
|
1644
|
-
}
|
|
1645
|
-
/* The sign off lockup itself (.op-who, .op-sign) is shared with the monthly
|
|
1646
|
-
page, so it lives with the shared classes at the head of this sheet. */
|
|
1647
|
-
.atelic-ui .op .op-sign {
|
|
1648
|
-
font-size: 24px;
|
|
1649
|
-
margin-bottom: 8px;
|
|
1650
|
-
}
|
|
1651
|
-
.atelic-ui .op .op-who {
|
|
1652
|
-
gap: 14px;
|
|
1653
|
-
}
|
|
1654
|
-
.atelic-ui .op .op-who img {
|
|
1655
|
-
width: 56px;
|
|
1656
|
-
height: 56px;
|
|
1657
|
-
}
|
|
1658
|
-
/* The pointer to the hosted page belongs to the printed copy alone. */
|
|
1659
|
-
.atelic-ui .op-twin {
|
|
1660
|
-
display: none;
|
|
1661
|
-
}
|
|
1662
|
-
.atelic-ui .op-sr-only {
|
|
1663
|
-
position: absolute;
|
|
1664
|
-
width: 1px;
|
|
1665
|
-
height: 1px;
|
|
1666
|
-
padding: 0;
|
|
1667
|
-
margin: -1px;
|
|
1668
|
-
overflow: hidden;
|
|
1669
|
-
clip: rect(0, 0, 0, 0);
|
|
1670
|
-
white-space: nowrap;
|
|
1671
|
-
border: 0;
|
|
1672
|
-
}
|
|
1673
|
-
|
|
1674
|
-
/* ---- wide: the same page with room ---- */
|
|
1675
|
-
@media print, (min-width: 721px) {
|
|
1676
|
-
.atelic-ui .op-meta-sep,
|
|
1677
|
-
.atelic-ui .op-meta-date {
|
|
1678
|
-
display: inline;
|
|
1679
|
-
}
|
|
1680
|
-
.atelic-ui .op-doc {
|
|
1681
|
-
padding: calc(var(--nav-height) + 32px) 24px 64px;
|
|
1682
|
-
}
|
|
1683
|
-
.atelic-ui .op-intro {
|
|
1684
|
-
font-size: 18px;
|
|
1685
|
-
}
|
|
1686
|
-
.atelic-ui .op-ov-tier-label {
|
|
1687
|
-
padding: 7px 20px;
|
|
1688
|
-
}
|
|
1689
|
-
.atelic-ui .op-ov-row {
|
|
1690
|
-
grid-template-columns: auto 232px minmax(0, 1fr) auto;
|
|
1691
|
-
column-gap: 16px;
|
|
1692
|
-
padding: 11px 14px 11px 20px;
|
|
1693
|
-
}
|
|
1694
|
-
.atelic-ui .op-ov-grade {
|
|
1695
|
-
grid-row: 1;
|
|
1696
|
-
}
|
|
1697
|
-
.atelic-ui .op-ov-read {
|
|
1698
|
-
grid-column: 3;
|
|
1699
|
-
padding-top: 4px;
|
|
1700
|
-
}
|
|
1701
|
-
.atelic-ui .op-ov-go {
|
|
1702
|
-
grid-column: 4;
|
|
1703
|
-
}
|
|
1704
|
-
.atelic-ui .op-part {
|
|
1705
|
-
margin: 40px 0 12px;
|
|
1706
|
-
}
|
|
1707
|
-
.atelic-ui .op-part h2 {
|
|
1708
|
-
font-size: 30px;
|
|
1709
|
-
}
|
|
1710
|
-
.atelic-ui .op-part p {
|
|
1711
|
-
font-size: 17px;
|
|
1712
|
-
}
|
|
1713
|
-
.atelic-ui .op-topic {
|
|
1714
|
-
padding: 22px 26px 18px;
|
|
1715
|
-
}
|
|
1716
|
-
.atelic-ui .op-topic h3 {
|
|
1717
|
-
font-size: 23px;
|
|
1718
|
-
}
|
|
1719
|
-
.atelic-ui .op-topic-head > .op-grade {
|
|
1720
|
-
width: 46px;
|
|
1721
|
-
height: 46px;
|
|
1722
|
-
border-radius: 13px;
|
|
1723
|
-
font-size: 23px;
|
|
1724
|
-
}
|
|
1725
|
-
.atelic-ui .op-findings.has-shots {
|
|
1726
|
-
grid-template-columns: minmax(0, 1fr) 250px;
|
|
1727
|
-
gap: 28px;
|
|
1728
|
-
}
|
|
1729
|
-
.atelic-ui .op-findings .op-shots {
|
|
1730
|
-
max-width: none;
|
|
1731
|
-
}
|
|
1732
|
-
.atelic-ui .op-rented {
|
|
1733
|
-
flex-direction: row;
|
|
1734
|
-
align-items: baseline;
|
|
1735
|
-
gap: 16px;
|
|
1736
|
-
padding: 16px 26px;
|
|
1737
|
-
}
|
|
1738
|
-
.atelic-ui .op-close {
|
|
1739
|
-
flex-direction: row;
|
|
1740
|
-
justify-content: space-between;
|
|
1741
|
-
align-items: flex-end;
|
|
1742
|
-
}
|
|
1743
|
-
|
|
1744
|
-
/* the markets as a real table */
|
|
1745
|
-
.atelic-ui .op-markets-table {
|
|
1746
|
-
display: table;
|
|
1747
|
-
border-collapse: collapse;
|
|
1748
|
-
}
|
|
1749
|
-
.atelic-ui .op-markets-table tbody {
|
|
1750
|
-
display: table-row-group;
|
|
1751
|
-
}
|
|
1752
|
-
.atelic-ui .op-markets-table thead {
|
|
1753
|
-
position: static;
|
|
1754
|
-
width: auto;
|
|
1755
|
-
height: auto;
|
|
1756
|
-
overflow: visible;
|
|
1757
|
-
clip: auto;
|
|
1758
|
-
}
|
|
1759
|
-
.atelic-ui .op-markets-table tbody tr {
|
|
1760
|
-
display: table-row;
|
|
1761
|
-
padding: 0;
|
|
1762
|
-
border: 0;
|
|
1763
|
-
}
|
|
1764
|
-
.atelic-ui .op-markets-table th,
|
|
1765
|
-
.atelic-ui .op-markets-table td {
|
|
1766
|
-
display: table-cell;
|
|
1767
|
-
padding: 10px 14px 10px 0;
|
|
1768
|
-
border-bottom: 1px solid var(--op-rule);
|
|
1769
|
-
vertical-align: top;
|
|
1770
|
-
}
|
|
1771
|
-
.atelic-ui .op-markets-table thead th {
|
|
1772
|
-
padding-top: 0;
|
|
1773
|
-
padding-bottom: 8px;
|
|
1774
|
-
border-bottom: 1.5px solid var(--op-ink);
|
|
1775
|
-
vertical-align: bottom;
|
|
1776
|
-
}
|
|
1777
|
-
.atelic-ui .op-markets-table tbody tr:last-child th,
|
|
1778
|
-
.atelic-ui .op-markets-table tbody tr:last-child td {
|
|
1779
|
-
border-bottom: 0;
|
|
1780
|
-
}
|
|
1781
|
-
.atelic-ui .op-markets-table .op-markets-market {
|
|
1782
|
-
width: 170px;
|
|
1783
|
-
}
|
|
1784
|
-
.atelic-ui .op-markets-table .op-markets-read {
|
|
1785
|
-
width: auto;
|
|
1786
|
-
}
|
|
1787
|
-
.atelic-ui .op-markets-col {
|
|
1788
|
-
width: 64px;
|
|
1789
|
-
}
|
|
1790
|
-
.atelic-ui .op-markets-label {
|
|
1791
|
-
display: none;
|
|
1792
|
-
}
|
|
1793
|
-
}
|
|
1794
|
-
|
|
1795
|
-
/* ---- print: the same page, on letter paper ---- */
|
|
1796
|
-
@page {
|
|
1797
|
-
size: letter;
|
|
1798
|
-
margin: 0.5in 0.55in 0.6in;
|
|
1799
|
-
@bottom-right {
|
|
1800
|
-
content: counter(page) " / " counter(pages);
|
|
1801
|
-
font-family: ui-monospace, "SF Mono", monospace;
|
|
1802
|
-
font-size: 7.5pt;
|
|
1803
|
-
color: #75858f;
|
|
1804
|
-
}
|
|
153
|
+
color: var(--op-ink-faint, var(--neutral-500));
|
|
1805
154
|
}
|
|
1806
155
|
@media print {
|
|
1807
|
-
html,
|
|
1808
|
-
body {
|
|
1809
|
-
margin: 0;
|
|
1810
|
-
padding: 0;
|
|
1811
|
-
background: none;
|
|
1812
|
-
}
|
|
1813
|
-
/* The sheet is the page at three quarters size. The zoom sits on the root,
|
|
1814
|
-
where the browser sizes each block for its page breaks at the printed
|
|
1815
|
-
size; on the document it measured them full size and broke early. */
|
|
1816
|
-
html:has(.atelic-ui .op-doc) {
|
|
1817
|
-
zoom: 0.74;
|
|
1818
|
-
}
|
|
1819
|
-
.atelic-ui .nav,
|
|
1820
|
-
.atelic-ui .credit-bar,
|
|
1821
|
-
.atelic-ui .skip-link,
|
|
1822
|
-
.atelic-ui .op-ov-go,
|
|
1823
|
-
.atelic-ui .op-topic h3 a svg {
|
|
1824
|
-
display: none;
|
|
1825
|
-
}
|
|
1826
|
-
.atelic-ui,
|
|
1827
|
-
.atelic-ui .op {
|
|
1828
|
-
background: none;
|
|
1829
|
-
min-height: 0;
|
|
1830
|
-
}
|
|
1831
|
-
.atelic-ui .op-doc {
|
|
1832
|
-
max-width: none;
|
|
1833
|
-
padding: 0;
|
|
1834
|
-
}
|
|
1835
|
-
.atelic-ui .op-top {
|
|
1836
|
-
display: flex;
|
|
1837
|
-
align-items: center;
|
|
1838
|
-
gap: 12px;
|
|
1839
|
-
margin-bottom: 18px;
|
|
1840
|
-
}
|
|
1841
|
-
.atelic-ui .op-mark {
|
|
1842
|
-
font-weight: 600;
|
|
1843
|
-
font-size: 22px;
|
|
1844
|
-
letter-spacing: -0.045em;
|
|
1845
|
-
display: inline-flex;
|
|
1846
|
-
align-items: center;
|
|
1847
|
-
gap: 0.38em;
|
|
1848
|
-
color: var(--op-ink);
|
|
1849
|
-
font-family: var(--font-brand);
|
|
1850
|
-
}
|
|
1851
|
-
.atelic-ui .op-run {
|
|
1852
|
-
display: inline-block;
|
|
1853
|
-
width: 1.7em;
|
|
1854
|
-
height: 2px;
|
|
1855
|
-
background: linear-gradient(90deg, var(--op-accent), transparent);
|
|
1856
|
-
}
|
|
1857
|
-
.atelic-ui .op-x {
|
|
1858
|
-
font-family: var(--font-mono);
|
|
1859
|
-
font-size: 16px;
|
|
1860
|
-
color: var(--op-ink-faint);
|
|
1861
|
-
line-height: 1;
|
|
1862
|
-
}
|
|
1863
|
-
.atelic-ui .op-recipient {
|
|
1864
|
-
height: 30px;
|
|
1865
|
-
width: auto;
|
|
1866
|
-
display: block;
|
|
1867
|
-
}
|
|
1868
|
-
.atelic-ui .op-ov-card,
|
|
1869
|
-
.atelic-ui .op-topic {
|
|
1870
|
-
box-shadow: none;
|
|
1871
|
-
border-color: var(--neutral-200);
|
|
1872
|
-
}
|
|
1873
|
-
.atelic-ui .op-topic h3 a {
|
|
1874
|
-
border-bottom: 0;
|
|
1875
|
-
}
|
|
1876
|
-
/* A small block stays whole; a table or a disclosure may run over a
|
|
1877
|
-
page, row by row, with its heading kept beside its first rows. */
|
|
1878
|
-
.atelic-ui .op-ov,
|
|
1879
|
-
.atelic-ui .op-block,
|
|
1880
|
-
.atelic-ui .op-rented,
|
|
1881
|
-
.atelic-ui .op-close,
|
|
1882
|
-
.atelic-ui .op-topic-head,
|
|
1883
|
-
.atelic-ui .op-block-head,
|
|
1884
|
-
.atelic-ui .op-markets-table tr,
|
|
1885
|
-
.atelic-ui .data-table tr {
|
|
1886
|
-
break-inside: avoid;
|
|
1887
|
-
}
|
|
1888
|
-
.atelic-ui .op-block.op-table,
|
|
1889
|
-
.atelic-ui .op-block.op-more,
|
|
1890
|
-
.atelic-ui .op-block.op-checks,
|
|
1891
|
-
.atelic-ui .op-block.op-findings,
|
|
1892
|
-
.atelic-ui .op-markets {
|
|
1893
|
-
break-inside: auto;
|
|
1894
|
-
}
|
|
1895
|
-
/* A list of checks or findings runs over a page item by item, so a
|
|
1896
|
-
section starts in whatever space the last one left. */
|
|
1897
|
-
.atelic-ui .op-checks .checklist > li,
|
|
1898
|
-
.atelic-ui .op-findings .callout {
|
|
1899
|
-
break-inside: avoid;
|
|
1900
|
-
}
|
|
1901
|
-
.atelic-ui .op-part,
|
|
1902
|
-
.atelic-ui .is-native > .disclosure-head {
|
|
1903
|
-
break-inside: avoid;
|
|
1904
|
-
break-after: avoid;
|
|
1905
|
-
}
|
|
1906
|
-
.atelic-ui .op-topic-head,
|
|
1907
|
-
.atelic-ui .op-block-head,
|
|
1908
|
-
.atelic-ui .is-native > .disclosure-head,
|
|
1909
|
-
.atelic-ui .data-table thead {
|
|
1910
|
-
break-after: avoid;
|
|
1911
|
-
}
|
|
1912
156
|
.atelic-ui .op-shot a {
|
|
1913
157
|
cursor: auto;
|
|
1914
158
|
}
|
|
1915
|
-
.atelic-ui .op-twin {
|
|
1916
|
-
display: flex;
|
|
1917
|
-
align-items: center;
|
|
1918
|
-
gap: 14px;
|
|
1919
|
-
}
|
|
1920
|
-
.atelic-ui .op-twin-text {
|
|
1921
|
-
text-align: right;
|
|
1922
|
-
font-family: var(--font-mono);
|
|
1923
|
-
font-size: 12px;
|
|
1924
|
-
letter-spacing: 0.04em;
|
|
1925
|
-
}
|
|
1926
|
-
.atelic-ui .op-twin-text b {
|
|
1927
|
-
display: block;
|
|
1928
|
-
font-family: var(--font-sans);
|
|
1929
|
-
font-size: 16px;
|
|
1930
|
-
font-weight: 600;
|
|
1931
|
-
letter-spacing: -0.01em;
|
|
1932
|
-
margin-top: 2px;
|
|
1933
|
-
}
|
|
1934
|
-
.atelic-ui .op-qr {
|
|
1935
|
-
width: 96px;
|
|
1936
|
-
height: 96px;
|
|
1937
|
-
display: block;
|
|
1938
|
-
}
|
|
1939
|
-
}
|
|
1940
|
-
|
|
1941
|
-
/* =================================================================
|
|
1942
|
-
THE NOTE: the first touch set as a page (Note.tsx). A letter, not a
|
|
1943
|
-
report, read on a phone first. Its column is the writeup's 920px,
|
|
1944
|
-
centered under the header with the header's own gutters, and every
|
|
1945
|
-
line of text runs the column's full width.
|
|
1946
|
-
|
|
1947
|
-
- The two lanes are separate sections stacked top to bottom at
|
|
1948
|
-
every width and on paper, never side by side.
|
|
1949
|
-
- Phone first: a finding is its Callout with the owner's screen
|
|
1950
|
-
under it. Wide (721px and up) and on paper, a finding with a
|
|
1951
|
-
screen is one row, the words left and the screen right, top
|
|
1952
|
-
aligned; the screen's column sizes to the picture, a phone crop
|
|
1953
|
-
about 260px and a wide card up to 45% of the row. A finding
|
|
1954
|
-
with no screen takes the full width.
|
|
1955
|
-
- Print: one letter sheet. The chrome steps aside (the writeup's print
|
|
1956
|
-
rules already hide the header and the credit band on any artifact
|
|
1957
|
-
page), the type comes down, and the screens shrink. The note sets
|
|
1958
|
-
no @page of its own: the writeup's, the later one in this sheet,
|
|
1959
|
-
sets letter paper for every artifact page.
|
|
1960
|
-
|
|
1961
|
-
Tokens only. The finding is the shared Callout (styles/components.css),
|
|
1962
|
-
the screen the writeup's .op-shot, the sign off the shared .op-who;
|
|
1963
|
-
this sheet sets the letter around them and their sizes here.
|
|
1964
|
-
================================================================= */
|
|
1965
|
-
/* The borrowed .op-shot reads the writeup's own two tokens, mapped here as
|
|
1966
|
-
the writeup's .op root maps them. */
|
|
1967
|
-
.atelic-ui .nt {
|
|
1968
|
-
--op-card: var(--card);
|
|
1969
|
-
--op-ink-faint: var(--neutral-500);
|
|
1970
|
-
font-family: var(--font-sans);
|
|
1971
|
-
color: var(--ink);
|
|
1972
|
-
background: var(--surface);
|
|
1973
|
-
}
|
|
1974
|
-
/* The writeup's column (.op-doc, 920px), centered under the header and
|
|
1975
|
-
held off the edges by the header's gutters (chrome.css, .nav-inner). */
|
|
1976
|
-
.atelic-ui .nt-doc {
|
|
1977
|
-
max-width: calc(920px + 2 * var(--gutter));
|
|
1978
|
-
margin: 0 auto;
|
|
1979
|
-
padding: calc(var(--nav-height) + 22px) var(--gutter) 48px;
|
|
1980
|
-
font-size: 17px;
|
|
1981
|
-
line-height: 1.6;
|
|
1982
|
-
print-color-adjust: exact;
|
|
1983
|
-
-webkit-print-color-adjust: exact;
|
|
1984
|
-
}
|
|
1985
|
-
.atelic-ui .nt a {
|
|
1986
|
-
color: var(--primary);
|
|
1987
|
-
text-decoration: underline;
|
|
1988
|
-
text-underline-offset: 2px;
|
|
1989
|
-
text-decoration-thickness: 1px;
|
|
1990
|
-
overflow-wrap: anywhere;
|
|
1991
|
-
}
|
|
1992
|
-
.atelic-ui .nt a:hover {
|
|
1993
|
-
text-decoration-thickness: 2px;
|
|
1994
|
-
}
|
|
1995
|
-
|
|
1996
|
-
/* ---- the head: who it is for, then the title ---- */
|
|
1997
|
-
.atelic-ui .nt-meta {
|
|
1998
|
-
margin: 0 0 10px;
|
|
1999
|
-
font-family: var(--font-mono);
|
|
2000
|
-
font-size: 12.5px;
|
|
2001
|
-
letter-spacing: 0.04em;
|
|
2002
|
-
color: var(--neutral-500);
|
|
2003
|
-
}
|
|
2004
|
-
.atelic-ui .nt-meta b {
|
|
2005
|
-
font-weight: 500;
|
|
2006
|
-
color: var(--ink-soft);
|
|
2007
|
-
}
|
|
2008
|
-
.atelic-ui .nt-meta-date {
|
|
2009
|
-
white-space: nowrap;
|
|
2010
|
-
}
|
|
2011
|
-
.atelic-ui .nt h1 {
|
|
2012
|
-
font-size: clamp(30px, 6vw, 40px);
|
|
2013
|
-
font-weight: 650;
|
|
2014
|
-
letter-spacing: -0.03em;
|
|
2015
|
-
line-height: 1.1;
|
|
2016
|
-
margin: 0;
|
|
2017
|
-
text-wrap: balance;
|
|
2018
|
-
color: var(--ink);
|
|
2019
|
-
}
|
|
2020
|
-
|
|
2021
|
-
/* ---- the opener: the letter's first paragraph ---- */
|
|
2022
|
-
.atelic-ui .nt-opener {
|
|
2023
|
-
margin: 18px 0 0;
|
|
2024
|
-
font-size: 18px;
|
|
2025
|
-
line-height: 1.6;
|
|
2026
|
-
color: var(--ink);
|
|
2027
|
-
text-wrap: pretty;
|
|
2028
|
-
}
|
|
2029
|
-
|
|
2030
|
-
/* ---- the two lanes, each a heading and its findings, one above the
|
|
2031
|
-
other at every width ---- */
|
|
2032
|
-
.atelic-ui .nt-lanes {
|
|
2033
|
-
display: grid;
|
|
2034
|
-
grid-template-columns: minmax(0, 1fr);
|
|
2035
|
-
gap: 26px;
|
|
2036
|
-
margin-top: 30px;
|
|
2037
|
-
padding-top: 24px;
|
|
2038
|
-
border-top: 1px solid var(--neutral-100);
|
|
2039
|
-
}
|
|
2040
|
-
.atelic-ui .nt-lane {
|
|
2041
|
-
min-width: 0;
|
|
2042
|
-
}
|
|
2043
|
-
.atelic-ui .nt-lane h2 {
|
|
2044
|
-
margin: 0 0 14px;
|
|
2045
|
-
font-size: 19px;
|
|
2046
|
-
font-weight: 650;
|
|
2047
|
-
letter-spacing: -0.015em;
|
|
2048
|
-
line-height: 1.25;
|
|
2049
|
-
color: var(--ink);
|
|
2050
|
-
}
|
|
2051
|
-
.atelic-ui .nt-findings {
|
|
2052
|
-
list-style: none;
|
|
2053
|
-
margin: 0;
|
|
2054
|
-
padding: 0;
|
|
2055
|
-
display: flex;
|
|
2056
|
-
flex-direction: column;
|
|
2057
|
-
gap: 18px;
|
|
2058
|
-
}
|
|
2059
|
-
.atelic-ui .nt-finding .callout {
|
|
2060
|
-
font-size: 16px;
|
|
2061
|
-
line-height: 1.5;
|
|
2062
|
-
}
|
|
2063
|
-
/* The screen is a thumbnail under its finding, set in from the icon so it
|
|
2064
|
-
lines up with the words. It keeps its own shape, held to 200px tall and
|
|
2065
|
-
never the lane's full width; a click opens the full picture. */
|
|
2066
|
-
.atelic-ui .nt-finding .op-shot {
|
|
2067
|
-
margin: 10px 0 0 28px;
|
|
2068
|
-
}
|
|
2069
|
-
.atelic-ui .nt-finding .op-shot a,
|
|
2070
|
-
.atelic-ui .nt-finding .op-shot-frame {
|
|
2071
|
-
width: fit-content;
|
|
2072
|
-
max-width: 100%;
|
|
2073
|
-
}
|
|
2074
|
-
.atelic-ui .nt-finding .op-shot img {
|
|
2075
|
-
width: auto;
|
|
2076
|
-
max-width: min(100%, 280px);
|
|
2077
|
-
max-height: 200px;
|
|
2078
|
-
}
|
|
2079
|
-
/* A linked thumbnail says it opens: the badge in its corner, and the
|
|
2080
|
-
frame takes the accent on hover and focus. */
|
|
2081
|
-
.atelic-ui .nt-finding .op-shot a {
|
|
2082
|
-
position: relative;
|
|
2083
|
-
color: inherit;
|
|
2084
|
-
text-decoration: none;
|
|
2085
|
-
transition:
|
|
2086
|
-
border-color 0.15s ease,
|
|
2087
|
-
box-shadow 0.15s ease;
|
|
2088
|
-
}
|
|
2089
|
-
.atelic-ui .nt-finding .op-shot a:hover,
|
|
2090
|
-
.atelic-ui .nt-finding .op-shot a:focus-visible {
|
|
2091
|
-
border-color: var(--primary);
|
|
2092
|
-
box-shadow: 0 0 0 2px color-mix(in srgb, var(--primary) 25%, transparent);
|
|
2093
|
-
}
|
|
2094
|
-
.atelic-ui .nt-finding .op-shot-open {
|
|
2095
|
-
position: absolute;
|
|
2096
|
-
right: 4px;
|
|
2097
|
-
bottom: 4px;
|
|
2098
|
-
display: flex;
|
|
2099
|
-
align-items: center;
|
|
2100
|
-
justify-content: center;
|
|
2101
|
-
width: 20px;
|
|
2102
|
-
height: 20px;
|
|
2103
|
-
border-radius: 50%;
|
|
2104
|
-
background: color-mix(in srgb, var(--ink) 72%, transparent);
|
|
2105
|
-
color: var(--surface);
|
|
2106
|
-
}
|
|
2107
|
-
.atelic-ui .nt-finding .op-shot a:hover .op-shot-open,
|
|
2108
|
-
.atelic-ui .nt-finding .op-shot a:focus-visible .op-shot-open {
|
|
2109
|
-
background: var(--primary);
|
|
2110
|
-
}
|
|
2111
|
-
/* The caption wraps to the picture's width and never sets the column's. */
|
|
2112
|
-
.atelic-ui .nt-finding .op-shot figcaption {
|
|
2113
|
-
width: 0;
|
|
2114
|
-
min-width: 100%;
|
|
2115
|
-
font-size: 12.5px;
|
|
2116
|
-
line-height: 1.45;
|
|
2117
|
-
color: var(--neutral-500);
|
|
2118
|
-
}
|
|
2119
|
-
|
|
2120
|
-
/* ---- where the work would start ---- */
|
|
2121
|
-
.atelic-ui .nt-start {
|
|
2122
|
-
margin-top: 30px;
|
|
2123
|
-
padding-top: 24px;
|
|
2124
|
-
border-top: 1px solid var(--neutral-100);
|
|
2125
|
-
}
|
|
2126
|
-
.atelic-ui .nt-start-lead {
|
|
2127
|
-
margin: 0 0 10px;
|
|
2128
|
-
font-weight: 650;
|
|
2129
|
-
color: var(--ink);
|
|
2130
|
-
}
|
|
2131
|
-
/* The site base strips list markers; the steps want theirs back. */
|
|
2132
|
-
.atelic-ui .nt-start ul {
|
|
2133
|
-
margin: 0;
|
|
2134
|
-
padding-left: 1.2em;
|
|
2135
|
-
list-style: disc;
|
|
2136
|
-
display: grid;
|
|
2137
|
-
gap: 8px;
|
|
2138
|
-
color: var(--ink-soft);
|
|
2139
|
-
}
|
|
2140
|
-
.atelic-ui .nt-start li {
|
|
2141
|
-
padding-left: 2px;
|
|
2142
|
-
}
|
|
2143
|
-
.atelic-ui .nt-start li::marker {
|
|
2144
|
-
color: var(--primary);
|
|
2145
|
-
}
|
|
2146
|
-
.atelic-ui .nt-start b {
|
|
2147
|
-
font-weight: 600;
|
|
2148
|
-
color: var(--ink);
|
|
2149
|
-
}
|
|
2150
|
-
|
|
2151
|
-
/* ---- the close: who is writing, the offer, then the sign off ---- */
|
|
2152
|
-
.atelic-ui .nt-close {
|
|
2153
|
-
margin-top: 30px;
|
|
2154
|
-
padding-top: 24px;
|
|
2155
|
-
border-top: 1px solid var(--neutral-100);
|
|
2156
|
-
}
|
|
2157
|
-
.atelic-ui .nt-close p {
|
|
2158
|
-
margin: 0 0 14px;
|
|
2159
|
-
text-wrap: pretty;
|
|
2160
|
-
}
|
|
2161
|
-
.atelic-ui .nt-close .op-who {
|
|
2162
|
-
margin-top: 22px;
|
|
2163
|
-
gap: 14px;
|
|
2164
|
-
font-size: 14px;
|
|
2165
|
-
line-height: 1.6;
|
|
2166
|
-
color: var(--neutral-500);
|
|
2167
|
-
}
|
|
2168
|
-
.atelic-ui .nt-close .op-who img {
|
|
2169
|
-
width: 56px;
|
|
2170
|
-
height: 56px;
|
|
2171
|
-
}
|
|
2172
|
-
.atelic-ui .nt-close .op-sign {
|
|
2173
|
-
font-size: 24px;
|
|
2174
|
-
margin-bottom: 8px;
|
|
2175
|
-
}
|
|
2176
|
-
/* The sign off's own links read as the writeup's do: quiet, in the text color. */
|
|
2177
|
-
.atelic-ui .nt-close .op-who a {
|
|
2178
|
-
color: inherit;
|
|
2179
|
-
text-decoration: none;
|
|
2180
|
-
}
|
|
2181
|
-
|
|
2182
|
-
/* ---- wide: more room, and each screen beside its finding ---- */
|
|
2183
|
-
@media (min-width: 721px) {
|
|
2184
|
-
.atelic-ui .nt-doc {
|
|
2185
|
-
padding-top: calc(var(--nav-height) + 36px);
|
|
2186
|
-
padding-bottom: 64px;
|
|
2187
|
-
}
|
|
2188
|
-
.atelic-ui .nt-lanes {
|
|
2189
|
-
gap: 32px;
|
|
2190
|
-
}
|
|
2191
|
-
}
|
|
2192
|
-
|
|
2193
|
-
/* A finding with a screen is one row: the words left, the screen right,
|
|
2194
|
-
top aligned. The screen is a thumbnail about as tall as a three line
|
|
2195
|
-
finding, so a phone crop reads as a tall one about 80px wide and a
|
|
2196
|
-
wide card as a short wide one; the column shrinks to it, held to 45%
|
|
2197
|
-
of the row, with room enough for the caption under it. */
|
|
2198
|
-
@media print, (min-width: 721px) {
|
|
2199
|
-
.atelic-ui .nt-finding.has-shot {
|
|
2200
|
-
display: grid;
|
|
2201
|
-
grid-template-columns: minmax(0, 1fr) fit-content(45%);
|
|
2202
|
-
column-gap: 32px;
|
|
2203
|
-
align-items: start;
|
|
2204
|
-
}
|
|
2205
|
-
.atelic-ui .nt-finding.has-shot .op-shot {
|
|
2206
|
-
margin: 0;
|
|
2207
|
-
min-width: 150px;
|
|
2208
|
-
}
|
|
2209
|
-
.atelic-ui .nt-finding .op-shot img {
|
|
2210
|
-
max-width: 100%;
|
|
2211
|
-
max-height: 170px;
|
|
2212
|
-
}
|
|
2213
|
-
.atelic-ui .nt-finding .op-shot figcaption {
|
|
2214
|
-
font-size: 12px;
|
|
2215
|
-
}
|
|
2216
159
|
}
|
|
2217
160
|
|
|
2218
|
-
/* ---- print:
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
are held short with room for their captions, and the badge drops. */
|
|
161
|
+
/* ---- print: the shell's chrome steps aside on every artifact page ----
|
|
162
|
+
ArtifactShell's header, credit band, and skip link belong to the screen;
|
|
163
|
+
a printed document is the page alone. */
|
|
2222
164
|
@media print {
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
.atelic-ui .nt {
|
|
2227
|
-
background: none;
|
|
2228
|
-
}
|
|
2229
|
-
.atelic-ui .nt-doc {
|
|
2230
|
-
max-width: none;
|
|
2231
|
-
padding: 0;
|
|
2232
|
-
font-size: 15px;
|
|
2233
|
-
line-height: 1.45;
|
|
2234
|
-
}
|
|
2235
|
-
.atelic-ui .nt h1 {
|
|
2236
|
-
font-size: 32px;
|
|
2237
|
-
}
|
|
2238
|
-
.atelic-ui .nt-opener {
|
|
2239
|
-
margin-top: 12px;
|
|
2240
|
-
font-size: 16px;
|
|
2241
|
-
}
|
|
2242
|
-
.atelic-ui .nt-lanes,
|
|
2243
|
-
.atelic-ui .nt-start,
|
|
2244
|
-
.atelic-ui .nt-close {
|
|
2245
|
-
margin-top: 16px;
|
|
2246
|
-
padding-top: 14px;
|
|
2247
|
-
}
|
|
2248
|
-
.atelic-ui .nt-lanes {
|
|
2249
|
-
gap: 18px;
|
|
2250
|
-
}
|
|
2251
|
-
.atelic-ui .nt-lane h2 {
|
|
2252
|
-
margin-bottom: 10px;
|
|
2253
|
-
break-after: avoid;
|
|
2254
|
-
}
|
|
2255
|
-
.atelic-ui .nt-findings {
|
|
2256
|
-
gap: 14px;
|
|
2257
|
-
}
|
|
2258
|
-
.atelic-ui .nt-finding .callout {
|
|
2259
|
-
font-size: 14.5px;
|
|
2260
|
-
}
|
|
2261
|
-
.atelic-ui .nt-finding.has-shot {
|
|
2262
|
-
grid-template-columns: minmax(0, 1fr) fit-content(40%);
|
|
2263
|
-
column-gap: 24px;
|
|
2264
|
-
}
|
|
2265
|
-
.atelic-ui .nt-finding.has-shot .op-shot {
|
|
2266
|
-
min-width: 1.6in;
|
|
2267
|
-
}
|
|
2268
|
-
.atelic-ui .nt-finding .op-shot img {
|
|
2269
|
-
max-height: 1.5in;
|
|
2270
|
-
}
|
|
2271
|
-
.atelic-ui .nt-finding .op-shot-open {
|
|
165
|
+
.atelic-ui .nav,
|
|
166
|
+
.atelic-ui .credit-bar,
|
|
167
|
+
.atelic-ui .skip-link {
|
|
2272
168
|
display: none;
|
|
2273
169
|
}
|
|
2274
|
-
.atelic-ui .nt-finding .op-shot figcaption {
|
|
2275
|
-
font-size: 11.5px;
|
|
2276
|
-
line-height: 1.35;
|
|
2277
|
-
}
|
|
2278
|
-
.atelic-ui .nt-finding .op-shot a {
|
|
2279
|
-
cursor: auto;
|
|
2280
|
-
}
|
|
2281
|
-
.atelic-ui .nt-start ul {
|
|
2282
|
-
gap: 4px;
|
|
2283
|
-
}
|
|
2284
|
-
.atelic-ui .nt-close p {
|
|
2285
|
-
margin-bottom: 10px;
|
|
2286
|
-
}
|
|
2287
|
-
.atelic-ui .nt-close .op-who {
|
|
2288
|
-
margin-top: 14px;
|
|
2289
|
-
}
|
|
2290
|
-
.atelic-ui .nt-finding,
|
|
2291
|
-
.atelic-ui .nt-start,
|
|
2292
|
-
.atelic-ui .nt-close {
|
|
2293
|
-
break-inside: avoid;
|
|
2294
|
-
}
|
|
2295
170
|
}
|
|
2296
171
|
}
|