clio.css 0.9.1 → 0.12.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.
Files changed (86) hide show
  1. package/AGENTS.md +10 -6
  2. package/EVIDENCE.md +130 -9
  3. package/README.md +96 -3
  4. package/THIRD-PARTY.md +37 -3
  5. package/dist/art/cursors/arrow-2x.png +0 -0
  6. package/dist/art/cursors/arrow-3x.png +0 -0
  7. package/dist/art/cursors/arrow.png +0 -0
  8. package/dist/art/cursors/ibeam-2x.png +0 -0
  9. package/dist/art/cursors/ibeam-3x.png +0 -0
  10. package/dist/art/cursors/ibeam.png +0 -0
  11. package/dist/art/cursors/watch-2x.png +0 -0
  12. package/dist/art/cursors/watch-3x.png +0 -0
  13. package/dist/art/cursors/watch.png +0 -0
  14. package/dist/art/drawingboard/help-button.png +0 -0
  15. package/dist/art/drawingboard/parts/chasing-arrows.png +0 -0
  16. package/dist/art/drawingboard/parts/disclosure-open.png +0 -0
  17. package/dist/art/drawingboard/parts/disclosure.png +0 -0
  18. package/dist/art/drawingboard/parts/hpair-dec-on.png +0 -0
  19. package/dist/art/drawingboard/parts/hpair-inc-on.png +0 -0
  20. package/dist/art/drawingboard/parts/hpair-off.png +0 -0
  21. package/dist/art/drawingboard/parts/hpair.png +0 -0
  22. package/dist/art/drawingboard/parts/little-arrows-disabled.png +0 -0
  23. package/dist/art/drawingboard/parts/little-arrows-down.png +0 -0
  24. package/dist/art/drawingboard/parts/little-arrows-up.png +0 -0
  25. package/dist/art/drawingboard/parts/little-arrows.png +0 -0
  26. package/dist/art/drawingboard/parts/menu-scroll-down.png +0 -0
  27. package/dist/art/drawingboard/parts/menu-scroll-up.png +0 -0
  28. package/dist/art/drawingboard/parts/slider-thumb.png +0 -0
  29. package/dist/art/drawingboard/parts/vpair-dec-on.png +0 -0
  30. package/dist/art/drawingboard/parts/vpair-inc-on.png +0 -0
  31. package/dist/art/drawingboard/parts/vpair-off.png +0 -0
  32. package/dist/art/drawingboard/parts/vpair.png +0 -0
  33. package/dist/art/drawingboard/slider-track.png +0 -0
  34. package/dist/art/drawingboard/window-bottom-inactive-tiled.svg +1 -0
  35. package/dist/art/drawingboard/window-bottom-tiled.svg +1 -0
  36. package/dist/art/drawingboard/window-top-inactive-tiled.svg +1 -0
  37. package/dist/art/drawingboard/window-top-tiled.svg +1 -0
  38. package/dist/art/platinum/balloon-tail.png +0 -0
  39. package/dist/art/platinum/balloon.png +0 -0
  40. package/dist/art/platinum/bevel-held.png +0 -0
  41. package/dist/art/platinum/bevel-menu-arrow.png +0 -0
  42. package/dist/art/platinum/bevel.png +0 -0
  43. package/dist/art/platinum/chasing-arrows.png +0 -0
  44. package/dist/art/platinum/disclosure-open.png +0 -0
  45. package/dist/art/platinum/disclosure.png +0 -0
  46. package/dist/art/platinum/help-button.png +0 -0
  47. package/dist/art/platinum/little-arrows-disabled.png +0 -0
  48. package/dist/art/platinum/little-arrows.png +0 -0
  49. package/dist/art/platinum/slider-thumb.png +0 -0
  50. package/dist/art/platinum/slider-track.png +0 -0
  51. package/dist/art/platinum/sort-direction.png +0 -0
  52. package/dist/art/platinum/utility-close.png +0 -0
  53. package/dist/art/platinum/utility-collapse-side.png +0 -0
  54. package/dist/art/platinum/utility-collapse.png +0 -0
  55. package/dist/art/platinum/utility-dots.png +0 -0
  56. package/dist/art/platinum/utility-zoom.png +0 -0
  57. package/dist/art/system7/disclosure-open.png +0 -0
  58. package/dist/art/system7/disclosure.png +0 -0
  59. package/dist/art/system7/little-arrows.png +0 -0
  60. package/dist/art/system7/menu-scroll-down.png +0 -0
  61. package/dist/art/system7/menu-scroll-up.png +0 -0
  62. package/dist/clio.css +3632 -1044
  63. package/dist/clio.drawingboard.css +2650 -324
  64. package/dist/clio.drawingboard.min.css +2 -2
  65. package/dist/clio.js +1024 -0
  66. package/dist/clio.min.css +2 -2
  67. package/dist/clio.min.js +13 -0
  68. package/dist/clio.platinum.css +3096 -856
  69. package/dist/clio.platinum.min.css +2 -2
  70. package/dist/clio.system6.css +1640 -174
  71. package/dist/clio.system6.min.css +2 -2
  72. package/dist/clio.system7.css +1685 -181
  73. package/dist/clio.system7.min.css +2 -2
  74. package/dist/components.json +1102 -21
  75. package/dist/fonts/ClioSans97Plain.woff2 +0 -0
  76. package/dist/fonts/ClioSans97PlainExact.woff2 +0 -0
  77. package/dist/fonts/ClioSans97TitlePlain.woff2 +0 -0
  78. package/dist/fonts/ClioSans97TitlePlainExact.woff2 +0 -0
  79. package/dist/fonts/FusionPixel12-JA.woff2 +0 -0
  80. package/dist/fonts/FusionPixel12-KO.woff2 +0 -0
  81. package/dist/fonts/FusionPixel12-SC.woff2 +0 -0
  82. package/dist/fonts/FusionPixel12-TC.woff2 +0 -0
  83. package/dist/fonts/OFL-FusionPixel.txt +399 -0
  84. package/dist/fonts/Virtue.woff2 +0 -0
  85. package/llms.txt +14 -1
  86. package/package.json +6 -3
@@ -1,4 +1,4 @@
1
- /*! clio.css 0.9.1 (Drawing Board default) | MIT | https://surfine.github.io/clio.css/
1
+ /*! clio.css 0.12.0 (Drawing Board default) | MIT | https://surfine.github.io/clio.css/
2
2
  * Classic Mac OS interface CSS: System 6, System 7, Mac OS 8.5 Drawing Board and Mac OS 9 Platinum.
3
3
  * Measured values traced to AI System 6; see EVIDENCE.md.
4
4
  * Includes art from system.css (MIT) and pixel reconstructions of Apple control art; see THIRD-PARTY.md. */
@@ -28,6 +28,16 @@
28
28
  /* Clio Sans '97: Charcoal 12 rebuilt the same way from Mac OS 9.0's Key Caps
29
29
  (fonts-src/clio-sans-97.txt). Charcoal has one weight, so the face covers
30
30
  every weight and the browser never thickens it. */
31
+ /* Each colour face is declared twice: the Plain file alone first, then both. An
32
+ engine that cannot parse tech() (Safari before 17) drops the second rule and
33
+ keeps the first instead of losing the face. */
34
+ @font-face {
35
+ font-family: "Clio Sans '97";
36
+ src: url("fonts/ClioSans97Plain.woff2") format("woff2");
37
+ font-weight: 100 900;
38
+ font-display: swap;
39
+ }
40
+
31
41
  @font-face {
32
42
  font-family: "Clio Sans '97";
33
43
  src: url("fonts/ClioSans97.woff2") format("woff2") tech(color-COLRv1),
@@ -38,9 +48,18 @@
38
48
 
39
49
  /* Clio Sans '97's antialiasing is COLRv1 colour layers. A browser without
40
50
  COLRv1 (Safari) would paint every layer solid, so it gets the Plain file:
41
- the outlines alone, each pixel at least half covered. */
51
+ the same levels as COLRv0 layers, which Safari draws (fully covered pixels
52
+ in the text colour, the others black at their alpha unless a palette below
53
+ recolours them), over outlines for browsers with no colour fonts. */
42
54
  /* Clio Sans '97 Title: the same face as window titles draw it (a few faint
43
55
  pixels fewer than menus and buttons), for title bars only. */
56
+ @font-face {
57
+ font-family: "Clio Sans '97 Title";
58
+ src: url("fonts/ClioSans97TitlePlain.woff2") format("woff2");
59
+ font-weight: 100 900;
60
+ font-display: swap;
61
+ }
62
+
44
63
  @font-face {
45
64
  font-family: "Clio Sans '97 Title";
46
65
  src: url("fonts/ClioSans97Title.woff2") format("woff2") tech(color-COLRv1),
@@ -56,10 +75,24 @@
56
75
  page that recolours a title or a button label also sets --clio-font-window-title
57
76
  or --clio-font-button back to a stack without "Exact", and gets Clio Sans
58
77
  '97 in its colour, within one level of the real screen. */
78
+ @font-face {
79
+ font-family: "Clio Sans '97 Exact";
80
+ src: url("fonts/ClioSans97PlainExact.woff2") format("woff2");
81
+ font-weight: 100 900;
82
+ font-display: swap;
83
+ }
84
+
59
85
  @font-face {
60
86
  font-family: "Clio Sans '97 Exact";
61
87
  src: url("fonts/ClioSans97Exact.woff2") format("woff2") tech(color-COLRv1),
62
- url("fonts/ClioSans97Plain.woff2") format("woff2");
88
+ url("fonts/ClioSans97PlainExact.woff2") format("woff2");
89
+ font-weight: 100 900;
90
+ font-display: swap;
91
+ }
92
+
93
+ @font-face {
94
+ font-family: "Clio Sans '97 Title Exact";
95
+ src: url("fonts/ClioSans97TitlePlainExact.woff2") format("woff2");
63
96
  font-weight: 100 900;
64
97
  font-display: swap;
65
98
  }
@@ -67,7 +100,7 @@
67
100
  @font-face {
68
101
  font-family: "Clio Sans '97 Title Exact";
69
102
  src: url("fonts/ClioSans97TitleExact.woff2") format("woff2") tech(color-COLRv1),
70
- url("fonts/ClioSans97TitlePlain.woff2") format("woff2");
103
+ url("fonts/ClioSans97TitlePlainExact.woff2") format("woff2");
71
104
  font-weight: 100 900;
72
105
  font-display: swap;
73
106
  }
@@ -213,6 +246,126 @@
213
246
  14 #9c9c94;
214
247
  }
215
248
 
249
+ @font-palette-values --clio-aa-rdoc-title {
250
+ font-family: "Clio Sans '97 Title Exact";
251
+ override-colors:
252
+ 0 #101010,
253
+ 1 #212121,
254
+ 2 #323232,
255
+ 3 #444444,
256
+ 4 #555555,
257
+ 5 #666666,
258
+ 6 #777777,
259
+ 7 #878787,
260
+ 8 #989898,
261
+ 9 #a9a9a9,
262
+ 10 #bababa,
263
+ 11 #cccccc,
264
+ 12 #dddddd,
265
+ 13 #eeeeee,
266
+ 14 #ffffff;
267
+ }
268
+
269
+ @font-palette-values --clio-aa-rdoc-title-inactive {
270
+ font-family: "Clio Sans '97 Title Exact";
271
+ override-colors:
272
+ 0 #eeeeee,
273
+ 1 #dddddd,
274
+ 2 #cccccc,
275
+ 3 #bababa,
276
+ 4 #a9a9a9,
277
+ 5 #989898,
278
+ 6 #878787,
279
+ 7 #777777,
280
+ 8 #666666,
281
+ 9 #555555,
282
+ 10 #444444,
283
+ 11 #323232,
284
+ 12 #212121,
285
+ 13 #101010,
286
+ 14 #000000;
287
+ }
288
+
289
+ /* COLRv0 edge levels in other text colours (Safari; Chrome's COLRv1 file
290
+ follows the text colour by itself and ignores these): white for chosen
291
+ menu titles, items and icon labels, #6f6f6f for dimmed items. */
292
+ @font-palette-values --clio-aa-white {
293
+ font-family: "Clio Sans '97";
294
+ override-colors:
295
+ 0 rgb(255 255 255 / 0.0667),
296
+ 1 rgb(255 255 255 / 0.1333),
297
+ 2 rgb(255 255 255 / 0.2000),
298
+ 3 rgb(255 255 255 / 0.2667),
299
+ 4 rgb(255 255 255 / 0.3333),
300
+ 5 rgb(255 255 255 / 0.4000),
301
+ 6 rgb(255 255 255 / 0.4667),
302
+ 7 rgb(255 255 255 / 0.5333),
303
+ 8 rgb(255 255 255 / 0.6000),
304
+ 9 rgb(255 255 255 / 0.6667),
305
+ 10 rgb(255 255 255 / 0.7333),
306
+ 11 rgb(255 255 255 / 0.8000),
307
+ 12 rgb(255 255 255 / 0.8667),
308
+ 13 rgb(255 255 255 / 0.9333);
309
+ }
310
+
311
+ @font-palette-values --clio-aa-6f6f6f {
312
+ font-family: "Clio Sans '97";
313
+ override-colors:
314
+ 0 rgb(111 111 111 / 0.0667),
315
+ 1 rgb(111 111 111 / 0.1333),
316
+ 2 rgb(111 111 111 / 0.2000),
317
+ 3 rgb(111 111 111 / 0.2667),
318
+ 4 rgb(111 111 111 / 0.3333),
319
+ 5 rgb(111 111 111 / 0.4000),
320
+ 6 rgb(111 111 111 / 0.4667),
321
+ 7 rgb(111 111 111 / 0.5333),
322
+ 8 rgb(111 111 111 / 0.6000),
323
+ 9 rgb(111 111 111 / 0.6667),
324
+ 10 rgb(111 111 111 / 0.7333),
325
+ 11 rgb(111 111 111 / 0.8000),
326
+ 12 rgb(111 111 111 / 0.8667),
327
+ 13 rgb(111 111 111 / 0.9333);
328
+ }
329
+
330
+ /* Drawing Board's menu text (#313131) and dimmed text (#8c8c8c), for Safari's COLRv0 file. */
331
+ @font-palette-values --clio-aa-313131 {
332
+ font-family: "Clio Sans '97";
333
+ override-colors:
334
+ 0 rgb(49 49 49 / 0.0667),
335
+ 1 rgb(49 49 49 / 0.1333),
336
+ 2 rgb(49 49 49 / 0.2000),
337
+ 3 rgb(49 49 49 / 0.2667),
338
+ 4 rgb(49 49 49 / 0.3333),
339
+ 5 rgb(49 49 49 / 0.4000),
340
+ 6 rgb(49 49 49 / 0.4667),
341
+ 7 rgb(49 49 49 / 0.5333),
342
+ 8 rgb(49 49 49 / 0.6000),
343
+ 9 rgb(49 49 49 / 0.6667),
344
+ 10 rgb(49 49 49 / 0.7333),
345
+ 11 rgb(49 49 49 / 0.8000),
346
+ 12 rgb(49 49 49 / 0.8667),
347
+ 13 rgb(49 49 49 / 0.9333);
348
+ }
349
+
350
+ @font-palette-values --clio-aa-8c8c8c {
351
+ font-family: "Clio Sans '97";
352
+ override-colors:
353
+ 0 rgb(140 140 140 / 0.0667),
354
+ 1 rgb(140 140 140 / 0.1333),
355
+ 2 rgb(140 140 140 / 0.2000),
356
+ 3 rgb(140 140 140 / 0.2667),
357
+ 4 rgb(140 140 140 / 0.3333),
358
+ 5 rgb(140 140 140 / 0.4000),
359
+ 6 rgb(140 140 140 / 0.4667),
360
+ 7 rgb(140 140 140 / 0.5333),
361
+ 8 rgb(140 140 140 / 0.6000),
362
+ 9 rgb(140 140 140 / 0.6667),
363
+ 10 rgb(140 140 140 / 0.7333),
364
+ 11 rgb(140 140 140 / 0.8000),
365
+ 12 rgb(140 140 140 / 0.8667),
366
+ 13 rgb(140 140 140 / 0.9333);
367
+ }
368
+
216
369
  /* Clio Sans '97 Display: Charcoal's outlines, traced from Mac OS 9.0 drawing it
217
370
  at 72 points (fonts/ClioSans97Display.woff2, tooling/trace-outline.py), for
218
371
  every size that is not 12px or a multiple of it. */
@@ -270,6 +423,12 @@
270
423
  fallback colour where background-clip: text is missing. */
271
424
  --clio-disabled-dither: var(--clio-art-s6-gray50);
272
425
  --clio-disabled-fill: transparent;
426
+ /* A dimmed pop-up menu: the whole control (frame, shadow, title, arrow) drawn
427
+ through the 50% gray, the ink where x + y is odd surviving (System 7.5.3,
428
+ Memory's Select Hard Disk with virtual memory off, measured). The pattern
429
+ starts at the control's corner, not the screen's. */
430
+ --clio-popup-disabled-mask: var(--clio-art-s6-gray50) 0 0 / 2px 2px; /* a crisp 2x2 picture: a gradient blurs at 2x in Firefox */
431
+ --clio-popup-disabled-fg: var(--clio-ink);
273
432
  --clio-selection-bg: #000000;
274
433
  --clio-selection-fg: #ffffff;
275
434
 
@@ -279,6 +438,7 @@
279
438
  /* Geneva 9: the Finder info line, icon names, status lines. */
280
439
  --clio-font-small: "Clio Text '84 9", Geneva, "Helvetica Neue", Arial, sans-serif;
281
440
  --clio-text-smoothing: none;
441
+ --clio-text-smoothing-moz: grayscale; /* Firefox's nearest to none */
282
442
  --clio-font-mono: Monaco, Menlo, Consolas, "Courier New", monospace;
283
443
  /* Chrome type at sizes other than 12px and its multiples (.display): an
284
444
  outline face, smoothed. */
@@ -298,6 +458,12 @@
298
458
  --clio-radius: 0;
299
459
  --clio-control-height: 20px;
300
460
  --clio-field-height: 20px;
461
+ /* clio.js's insertion point: the font's line height, 16px for 12pt (System
462
+ 7.5.3, Find File's 20px field: rows 2-17), whatever the field's line-height. */
463
+ --clio-caret-height: 16px;
464
+ /* ...and its blink: CaretTime, 32 ticks lit and 32 dark (System 6.0.8 and 7.5.3 Find File;
465
+ PRAM's factory value in the Mac IIx and Quadra 650 ROMs). */
466
+ --clio-caret-ticks: 32;
301
467
  --clio-row-height: 16px;
302
468
  --clio-gap: 8px;
303
469
 
@@ -422,6 +588,7 @@
422
588
  /* Edit text: 1px frame, text inset 3px (Control Panel RAM cache field). */
423
589
  --clio-field-padding: 3px;
424
590
  --clio-field-focus-shadow: none;
591
+ --clio-field-focus-outline: var(--clio-focus-outline);
425
592
 
426
593
  /* Pop-up menus */
427
594
  --clio-popup-bg: var(--clio-paper);
@@ -440,12 +607,43 @@
440
607
  QuickDraw's ltGray, one dot in four. */
441
608
  --clio-scrollbar-size: 15px;
442
609
  --clio-scrollbar-track: var(--clio-art-s6-ltgray) 0 0 / 4px 2px repeat, #ffffff;
610
+ /* clio.js scroll bars: System 6 and 7 drag an outline of the box and scroll
611
+ on release; the box keeps one length, whatever the document's. */
612
+ --clio-scrollbar-thumb-length: 16px;
613
+ --clio-scrollbar-thumb-tracking: outline;
614
+ --clio-scrollbar-thumb-overlap: 0px;
615
+ --clio-scrollbar-thumb-after: none;
616
+ /* clio.js: a held arrow or lane repeats at once (System 6 and 7's TrackControl
617
+ calls the action on every pass while the button is down) */
618
+ --clio-scrollbar-repeat-delay: 0ms;
619
+ /* clio.js menus: System 6 and 7 menus stay open only while the button is held */
620
+ --clio-menu-sticky: 0;
621
+ /* clio.js: the grey outline of a dragged window (System 6.0.8 and 7.5.3: 1px) */
622
+ --clio-drag-outline-width: 1px;
623
+ /* ... around the window and its 1px shadow (both measured) */
624
+ --clio-drag-outline-extra: 1px;
625
+ /* clio.zoomRects() (System 7.5.3, measured): 8 outlines at (1.6^k - 1) / (1.6^8 - 1)
626
+ of the way, 4 on screen at once */
627
+ --clio-zoom-count: 8;
628
+ --clio-zoom-steps: 8;
629
+ --clio-zoom-ratio: 1.6;
630
+ --clio-zoom-offset: 1;
631
+ --clio-zoom-keep: 4;
632
+ --clio-drag-outline-shadow-inset: 0px; /* System 6: the region is the whole rectangle, though the shadow is drawn from a pixel in */
633
+ /* clio.js: a dragged scroll box leaves its frame XORed with dkGray (System
634
+ 6.0.8, measured): white where dkGray is set, in step with the lane's ltGray,
635
+ inverting what is under it, so over the lane it comes out solid black. */
636
+ --clio-scrollbar-ghost: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='2' shape-rendering='crispEdges'%3E%3Cpath fill='%23fff' d='M1 0h3v1H1zM0 1h2v1H0zM3 1h1v1H3z'/%3E%3C/svg%3E") 0 0 / 4px 2px repeat;
637
+ --clio-scrollbar-ghost-blend: difference;
638
+ /* clio.js: the box sits inside the bar's line, 14px wide (System 6.0.8, System Folder list) */
639
+ --clio-scrollbar-thumb-inset: 1px;
443
640
  --clio-scrollbar-track-shadow: none;
444
641
  --clio-scrollbar-thumb-bg: var(--clio-paper);
445
642
  --clio-scrollbar-thumb-border: 1px solid var(--clio-ink);
446
643
  --clio-scrollbar-thumb-shadow: none;
447
644
  --clio-scrollbar-button-bg: var(--clio-paper);
448
645
  --clio-scrollbar-button-shadow: none;
646
+ --clio-scrollbar-button-bevel: none;
449
647
  --clio-scrollbar-up: var(--clio-art-s6-up);
450
648
  --clio-scrollbar-up-on: var(--clio-art-s6-up-on);
451
649
  --clio-scrollbar-down: var(--clio-art-s6-down);
@@ -548,6 +746,99 @@
548
746
  --clio-art-s6-grow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M2 2h7v1h-7zM2 3h1v1h-1zM8 3h1v1h-1zM2 4h1v1h-1zM8 4h5v1h-5zM2 5h1v1h-1zM8 5h1v1h-1zM12 5h1v1h-1zM2 6h1v1h-1zM8 6h1v1h-1zM12 6h1v1h-1zM2 7h1v1h-1zM8 7h1v1h-1zM12 7h1v1h-1zM2 8h7v1h-7zM12 8h1v1h-1zM4 9h1v1h-1zM12 9h1v1h-1zM4 10h1v1h-1zM12 10h1v1h-1zM4 11h1v1h-1zM12 11h1v1h-1zM4 12h9v1h-9z'/%3E%3C/svg%3E");
549
747
  --clio-art-s6-dkgray: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='2' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M0 0h1v1h-1zM2 0h2v1h-2zM0 1h3v1h-3z'/%3E%3Cpath fill='%23fff' d='M1 0h1v1h-1zM3 1h1v1h-1z'/%3E%3C/svg%3E");
550
748
  --clio-art-s6-menucheck: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='8' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M8 0h1v1h-1zM7 1h2v1h-2zM6 2h2v1h-2zM5 3h2v1h-2zM0 4h1v1h-1zM4 4h2v1h-2zM0 5h2v1h-2zM3 5h2v1h-2zM1 6h3v1h-3zM2 7h1v1h-1z'/%3E%3C/svg%3E");
749
+ /* Disclosure triangle: System 6 had none; it takes System 7's (Finder list
750
+ view, 11px, black with a blue and white checker). */
751
+ --clio-disclosure-size: 11px;
752
+ --clio-disclosure-gap: 4px;
753
+ --clio-art-disclosure: url("art/system7/disclosure.png");
754
+ --clio-art-disclosure-open: url("art/system7/disclosure-open.png");
755
+
756
+ /* List view (Finder, View by Name; System 7.5.3): headers on the window's
757
+ white, the sorted one underlined, a double rule (black, white, black) below. */
758
+ --clio-list-view-bg: var(--clio-paper);
759
+ --clio-list-view-row: 16px;
760
+ --clio-list-view-header-height: 20px;
761
+ --clio-list-view-header-padding: 0 4px 3px;
762
+ --clio-list-view-header-bg: linear-gradient(var(--clio-ink), var(--clio-ink)) 0 calc(100% - 2px) / 100% 1px no-repeat, linear-gradient(var(--clio-ink), var(--clio-ink)) 0 100% / 100% 1px no-repeat;
763
+ --clio-list-view-sorted-header-bg: var(--clio-list-view-header-bg);
764
+ --clio-list-view-sorted-decoration: underline;
765
+ --clio-list-view-sorted-bg: transparent;
766
+ --clio-list-view-sort-width: 0;
767
+
768
+ /* Slider: System 6 had none; it takes Platinum's (Mouse control panel,
769
+ Mac OS 9.0) until an era draws its own. */
770
+ --clio-slider-height: 16px;
771
+ --clio-slider-track-height: 7px;
772
+ --clio-slider-track-top: 3px;
773
+ --clio-slider-track-slice: 3px;
774
+ --clio-slider-track-slice-n: 3;
775
+ --clio-slider-thumb-width: 15px;
776
+ --clio-slider-thumb-height: 16px;
777
+ --clio-art-slider-track: url("art/platinum/slider-track.png");
778
+ --clio-art-slider-thumb: url("art/platinum/slider-thumb.png");
779
+ --clio-slider-tick-gap: 0px;
780
+ --clio-slider-tick-count: 5;
781
+ --clio-slider-tick-offset: 9px;
782
+ --clio-slider-tick-run: 18px;
783
+ --clio-slider-tick-light: #ffffff;
784
+ --clio-slider-tick-ink: #000000;
785
+ --clio-slider-tick-shade: #888888;
786
+
787
+ /* Little arrows: System 6 had none; it takes System 7's (Memory control
788
+ panel, Cache Size: 15x25). Held and dimmed states are not on System 7's
789
+ screens and keep the normal picture. */
790
+ --clio-little-arrows-width: 15px;
791
+ --clio-little-arrows-height: 25px;
792
+ --clio-art-little-arrows: url("art/system7/little-arrows.png");
793
+ --clio-art-little-arrows-up: var(--clio-art-little-arrows);
794
+ --clio-art-little-arrows-down: var(--clio-art-little-arrows);
795
+ --clio-art-little-arrows-disabled: var(--clio-art-little-arrows);
796
+
797
+ /* Bevel button: System 6 and 7 had none; they take Platinum's
798
+ (Navigation Services, Mac OS 9.0). */
799
+ --clio-bevel-min: 20px;
800
+ --clio-bevel-padding: 0 2px;
801
+ --clio-bevel-slice: 3px;
802
+ --clio-bevel-slice-n: 3;
803
+ --clio-art-bevel: url("art/platinum/bevel.png");
804
+ --clio-art-bevel-held: url("art/platinum/bevel-held.png");
805
+ --clio-art-bevel-menu-arrow: url("art/platinum/bevel-menu-arrow.png");
806
+ --clio-bevel-arrow-right: 5px;
807
+ --clio-bevel-arrow-bottom: 4px;
808
+ --clio-bevel-arrow-width: 3px;
809
+ --clio-bevel-arrow-height: 2px;
810
+
811
+ /* Chasing arrows: Platinum's three frames (Network Browser, Mac OS 9.0). */
812
+ --clio-art-chasing-arrows: url("art/platinum/chasing-arrows.png");
813
+ --clio-chasing-arrows-frames: 3;
814
+
815
+ /* Separator: a 1px ink line. */
816
+ --clio-separator-height: 1px;
817
+ --clio-separator-margin: 8px 0;
818
+ --clio-separator-bg: var(--clio-ink);
819
+
820
+ /* Help button: Platinum's (Keyboard control panel, Mac OS 9.0). */
821
+ --clio-art-help-button: url("art/platinum/help-button.png");
822
+ --clio-image-well-bg: #ffffff;
823
+
824
+ /* Utility window: the document window's parts at the size of System 7's
825
+ floating windows (inferred: none was on the captured screens). */
826
+ --clio-utility-titlebar-height: 13px;
827
+ --clio-utility-titlebar-row: 11px;
828
+ --clio-utility-box-size: 9px;
829
+ --clio-utility-slot: 13px;
830
+ --clio-utility-title-size: 9px;
831
+
832
+ /* Help balloon: Mac OS 9.0's (Balloon Help), the same in every era. */
833
+ --clio-art-balloon: url("art/platinum/balloon.png");
834
+ --clio-art-balloon-tail: url("art/platinum/balloon-tail.png");
835
+
836
+ /* Scrolling menu arrows: System 6 and 7 (Control Panels submenu, System
837
+ 7.5.3), black, 5px in from the item's left (up arrow inferred, mirrored). */
838
+ --clio-art-menu-scroll-down: url("art/system7/menu-scroll-down.png");
839
+ --clio-art-menu-scroll-up: url("art/system7/menu-scroll-up.png");
840
+ --clio-menu-scroll-left: 5px;
841
+
551
842
  /* Frames cut from captures by tooling/frame-art.py. */
552
843
  --clio-art-frame-s6-button: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAgMAAACd/+6DAAAACVBMVEUAAAAAAAD///+D3c/SAAAAAXRSTlMAQObYZgAAACpJREFUeJxjYAxgYBINZWBiYWFgCmB0YGJgYABhBqmVDEx//jAwMAYwAAA66QRtNyAoFwAAAABJRU5ErkJggg==");
553
844
  --clio-art-frame-s6-button-held: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAQMAAADaX5RTAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAB1JREFUeJxjkGFgSmZgYmBg/N/IxABiMNSDSRkGACm1Aqb7EOVpAAAAAElFTkSuQmCC");
@@ -557,6 +848,7 @@
557
848
  --clio-art-frame-p9-ring: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANBAMAAACAxflPAAAAG1BMVEUAAAAAAAB3d3fd3d3MzMy7u7uqqqoiIiKIiIhznn7oAAAAAXRSTlMAQObYZgAAAFpJREFUeJxjZGDnYmB7ycDCwKPAwPjzAwujgjEDg+x6xuLDrx6oOXEwCCcxMDAlCTAx/GMAISYGCEDQTGAOUyKLAoOKQgIjY6gAA9PO+4wMElwMDO8+MELNBwCaGBDQEM8mggAAAABJRU5ErkJggg==");
558
849
  --clio-art-frame-p9-button-disabled: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAgMAAACd/+6DAAAACVBMVEUAAACIiIjd3d2RXqmqAAAAAXRSTlMAQObYZgAAACFJREFUeJxjYA1hYBINZWAKYHRgYmBgQMYMUisZGFhDGAAtsQJ9dgAT/gAAAABJRU5ErkJggg==");
559
850
  --clio-art-frame-p9-popup: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHBAMAAAA2fErgAAAAGFBMVEUAAAAAAAB3d3fd3d27u7uqqqoiIiL///+EaqngAAAAAXRSTlMAQObYZgAAACtJREFUeJxjYEhMYGBi5H/IwJh+klWbQYCBQYAl/OQnOwbGAEUGpv+C9gwAea0HTcaLsPwAAAAASUVORK5CYII=");
851
+ --clio-art-frame-p9-popup-open: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHBAMAAAA2fErgAAAAGFBMVEUAAAAAAADd3d1mZmZEREQiIiKIiIj///+MKsksAAAAAXRSTlMAQObYZgAAACtJREFUeJxjEBQMYGBii//IwCjOKSbFIMDAIMAozun2iomB4fcGJgbG9wwAWK0GLJJZmp8AAAAASUVORK5CYII="); /* 7x7, slice 3 */
560
852
  --clio-art-frame-p9-popup-disabled: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHAgMAAAC5PL9AAAAACVBMVEUAAACIiIjd3d2RXqmqAAAAAXRSTlMAQObYZgAAAB1JREFUeJxjZLVmEg5gChBhcGBh0ljAtOENI6s1ACDmA/qjrWTUAAAAAElFTkSuQmCC");
561
853
  --clio-art-s6-gray50: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2' height='2' shape-rendering='crispEdges'%3E%3Cpath d='M1 0h1v1H1zM0 1h1v1H0z'/%3E%3C/svg%3E");
562
854
  --clio-art-s6-menucheck-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='8' shape-rendering='crispEdges'%3E%3Cpath fill='%23fff' d='M8 0h1v1h-1zM7 1h2v1h-2zM6 2h2v1h-2zM5 3h2v1h-2zM0 4h1v1h-1zM4 4h2v1h-2zM0 5h2v1h-2zM3 5h2v1h-2zM1 6h3v1h-3zM2 7h1v1h-1z'/%3E%3C/svg%3E");
@@ -566,6 +858,15 @@
566
858
  --clio-art-s6-strip-menu: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='7' shape-rendering='crispEdges'%3E%3Cpath d='M0 0h1v7H0zM1 1h1v5H1zM2 2h1v3H2zM3 3h1v1H3z'/%3E%3C/svg%3E");
567
859
  --clio-art-s6-strip-handle: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='24' shape-rendering='crispEdges'%3E%3Cpath fill='%23fff' d='M0 1h9l8 8v6l-8 8H0z'/%3E%3Cpath d='M0 0h10v1H0zM10 1h1v1h-1zM11 2h1v1h-1zM12 3h1v1h-1zM13 4h1v1h-1zM14 5h1v1h-1zM15 6h1v1h-1zM16 7h1v1h-1zM17 8h1v8h-1zM16 16h1v1h-1zM15 17h1v1h-1zM14 18h1v1h-1zM13 19h1v1h-1zM12 20h1v1h-1zM11 21h1v1h-1zM10 22h1v1h-1zM0 23h10v1H0zM5 6h1v1H5zM5 9h1v1H5zM5 12h1v1H5zM5 15h1v1H5zM5 18h1v1H5z'/%3E%3C/svg%3E");
568
860
  --clio-art-s6-strip-tab: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='24' shape-rendering='crispEdges'%3E%3Cpath fill='%23fff' d='M0 1h9l8 8v6l-8 8H0z'/%3E%3Cpath d='M0 0h10v1H0zM10 1h1v1h-1zM11 2h1v1h-1zM12 3h1v1h-1zM13 4h1v1h-1zM14 5h1v1h-1zM15 6h1v1h-1zM16 7h1v1h-1zM17 8h1v8h-1zM16 16h1v1h-1zM15 17h1v1h-1zM14 18h1v1h-1zM13 19h1v1h-1zM12 20h1v1h-1zM11 21h1v1h-1zM10 22h1v1h-1zM0 23h10v1H0zM5 6h1v1H5zM5 9h1v1H5zM5 12h1v1H5zM5 15h1v1H5zM5 18h1v1H5z'/%3E%3C/svg%3E");
861
+ /* Rounded-corner window (rDocProc): corner masks and frame curves, tooling/rare-art.py. */
862
+ --clio-art-rdoc-mask-tl: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M5 0h1v1h-1zM3 1h3v1h-3zM2 2h4v1h-4zM1 3h5v1h-5zM1 4h5v1h-5zM0 5h6v1h-6z'/%3E%3C/svg%3E");
863
+ --clio-art-rdoc-frame-tl: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M5 0h1v1h-1zM3 1h3v1h-3zM2 2h2v1h-2zM1 3h2v1h-2zM1 4h1v1h-1zM0 5h2v1h-2z'/%3E%3C/svg%3E");
864
+ --clio-art-rdoc-mask-tr: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M0 0h1v1h-1zM0 1h3v1h-3zM0 2h4v1h-4zM0 3h5v1h-5zM0 4h5v1h-5zM0 5h6v1h-6z'/%3E%3C/svg%3E");
865
+ --clio-art-rdoc-frame-tr: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M0 0h1v1h-1zM0 1h3v1h-3zM2 2h2v1h-2zM3 3h2v1h-2zM4 4h1v1h-1zM4 5h2v1h-2z'/%3E%3C/svg%3E");
866
+ --clio-art-rdoc-mask-bl: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M0 0h6v1h-6zM1 1h5v1h-5zM1 2h5v1h-5zM2 3h4v1h-4zM3 4h3v1h-3zM5 5h1v1h-1z'/%3E%3C/svg%3E");
867
+ --clio-art-rdoc-frame-bl: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M0 0h2v1h-2zM1 1h1v1h-1zM1 2h2v1h-2zM2 3h2v1h-2zM3 4h3v1h-3zM5 5h1v1h-1z'/%3E%3C/svg%3E");
868
+ --clio-art-rdoc-mask-br: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M0 0h6v1h-6zM0 1h5v1h-5zM0 2h5v1h-5zM0 3h4v1h-4zM0 4h3v1h-3zM0 5h1v1h-1z'/%3E%3C/svg%3E");
869
+ --clio-art-rdoc-frame-br: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M4 0h2v1h-2zM4 1h1v1h-1zM3 2h2v1h-2zM2 3h2v1h-2zM0 4h3v1h-3zM0 5h1v1h-1z'/%3E%3C/svg%3E");
569
870
  }
570
871
 
571
872
  /* Base. clio.css styles elements only inside its own components, plus bare
@@ -580,7 +881,7 @@
580
881
  }
581
882
 
582
883
  :where(.window, .menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"],
583
- .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) {
884
+ .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .rounded-window, .clio) {
584
885
  box-sizing: border-box;
585
886
  color: var(--clio-ink);
586
887
  font-family: var(--clio-font-chrome);
@@ -590,6 +891,7 @@
590
891
  font-synthesis: none;
591
892
  line-height: 16px;
592
893
  -webkit-font-smoothing: var(--clio-font-smoothing);
894
+ -moz-osx-font-smoothing: grayscale; /* Firefox on macOS otherwise thickens the pixel squares with a grey fringe */
593
895
  }
594
896
 
595
897
  :where(.window, .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) *,
@@ -603,6 +905,7 @@
603
905
  font-family: var(--clio-font-text);
604
906
  font-stretch: var(--clio-font-stretch-text);
605
907
  -webkit-font-smoothing: var(--clio-text-smoothing);
908
+ -moz-osx-font-smoothing: var(--clio-text-smoothing-moz);
606
909
  }
607
910
 
608
911
  :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(h1, h2, h3, h4, .heading) {
@@ -669,6 +972,37 @@
669
972
  white-space: nowrap;
670
973
  }
671
974
 
975
+ /* Cursors: the arrow, the I-beam and the watch redrawn pixel for pixel from System 7.5.3
976
+ and Mac OS 9.0 (tooling/cursor-art.py; the arrow is the same in both), at
977
+ 1x, 2x and 3x. On by default; class="clio-system-cursors" on <html> gives
978
+ the system's own back. The Mac had no pointing hand: links and buttons
979
+ inside clio.css's windows keep the arrow. aria-busy="true" shows the watch
980
+ (its first frame; hot spot 8,8). */
981
+ :where(:root) {
982
+ --clio-cursor-arrow: image-set(url("art/cursors/arrow.png") 1x, url("art/cursors/arrow-2x.png") 2x, url("art/cursors/arrow-3x.png") 3x) 1 1, default;
983
+ --clio-cursor-text: image-set(url("art/cursors/ibeam.png") 1x, url("art/cursors/ibeam-2x.png") 2x, url("art/cursors/ibeam-3x.png") 3x) 3 4, text;
984
+ --clio-cursor-wait: image-set(url("art/cursors/watch.png") 1x, url("art/cursors/watch-2x.png") 2x, url("art/cursors/watch-3x.png") 3x) 8 8, wait;
985
+ cursor: var(--clio-cursor-arrow);
986
+ }
987
+
988
+ :where(:root.clio-system-cursors) {
989
+ --clio-cursor-arrow: default;
990
+ --clio-cursor-text: text;
991
+ --clio-cursor-wait: wait;
992
+ }
993
+
994
+ :where(input:not([type="checkbox"], [type="radio"], [type="range"], [type="button"], [type="submit"], [type="reset"], [type="color"], [type="file"], [type="image"]), textarea, [contenteditable]:not([contenteditable="false"])) {
995
+ cursor: var(--clio-cursor-text);
996
+ }
997
+
998
+ :where(.window, .menu-bar, [role="menubar"], .menu, [role="menu"], .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .control-strip, .clio, .desktop) :where(a:any-link, button, label, summary, select, [role="button"], [role="tab"]) {
999
+ cursor: var(--clio-cursor-arrow);
1000
+ }
1001
+
1002
+ :where([aria-busy="true"]), :where([aria-busy="true"]) * {
1003
+ cursor: var(--clio-cursor-wait);
1004
+ }
1005
+
672
1006
  /* Windows.
673
1007
  Markup: .window > .title-bar (> .close, .title, .resize [, .shade]) >
674
1008
  optional .details-bar > .window-pane. system.css markup (.title-bar
@@ -760,7 +1094,7 @@
760
1094
  font-size: 0;
761
1095
  appearance: none;
762
1096
  -webkit-appearance: none;
763
- cursor: default;
1097
+ cursor: var(--clio-cursor-arrow);
764
1098
  touch-action: manipulation;
765
1099
  }
766
1100
 
@@ -785,7 +1119,7 @@
785
1119
 
786
1120
  /* Held close or zoom box: System 6 draws the same starburst in both
787
1121
  (measured, 6.0.8); the zoom box's inner square goes while it is held. */
788
- .title-bar > :is(.close, .close-box, .resize, .resize-box, .zoom):is(:active, .active) {
1122
+ .title-bar > :is(.close, .close-box, .resize, .resize-box, .zoom):is(:active:where(:not([data-clio-off])), .active) {
789
1123
  background: var(--clio-art-s6-burst) 0 0 / 11px 11px no-repeat border-box, var(--clio-paper);
790
1124
  }
791
1125
 
@@ -803,7 +1137,7 @@
803
1137
  box-sizing: border-box;
804
1138
  }
805
1139
 
806
- .title-bar > :is(.resize, .resize-box, .zoom):is(:active, .active)::before {
1140
+ .title-bar > :is(.resize, .resize-box, .zoom):is(:active:where(:not([data-clio-off])), .active)::before {
807
1141
  opacity: 0;
808
1142
  }
809
1143
 
@@ -858,9 +1192,15 @@
858
1192
  white-space: nowrap;
859
1193
  }
860
1194
 
1195
+ /* A separator line between groups in a window or dialog (Mac OS 8 HIG:
1196
+ "Separator Lines"): <hr class="separator"> or <div class="separator">. */
861
1197
  :where(.separator) {
862
1198
  flex: none;
863
- border-top: var(--clio-border);
1199
+ box-sizing: border-box;
1200
+ height: var(--clio-separator-height);
1201
+ margin: var(--clio-separator-margin);
1202
+ border: 0;
1203
+ background: var(--clio-separator-bg);
864
1204
  }
865
1205
 
866
1206
  /* A status line under the pane. */
@@ -876,6 +1216,17 @@
876
1216
  line-height: 14px;
877
1217
  }
878
1218
 
1219
+ /* Collapsed (WindowShade; clio.js toggles .collapsed from the collapse box):
1220
+ only the title bar stays. */
1221
+ :where(.window.collapsed) {
1222
+ height: auto !important;
1223
+ min-height: 0 !important;
1224
+ }
1225
+
1226
+ :where(.window.collapsed) > :not(.title-bar) {
1227
+ display: none !important;
1228
+ }
1229
+
879
1230
  /* Menu bar and menus.
880
1231
  Markup: <ul role="menubar" class="menu-bar"> <li role="none"><button
881
1232
  role="menuitem" aria-haspopup="true" aria-expanded="false">File</button>
@@ -923,12 +1274,12 @@
923
1274
  white-space: nowrap;
924
1275
  appearance: none;
925
1276
  -webkit-appearance: none;
926
- cursor: default;
1277
+ cursor: var(--clio-cursor-arrow);
927
1278
  }
928
1279
 
929
1280
  :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a, span):is([aria-expanded="true"], .active),
930
1281
  :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li.open > :is(button, a, span),
931
- :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a):active,
1282
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a):active:where(:not([data-clio-off])),
932
1283
  :where([role="menu-bar"]) > [role="menu-item"]:is(:focus, :focus-within) {
933
1284
  background: var(--clio-menu-title-active-bg);
934
1285
  box-shadow: var(--clio-menu-title-active-shadow);
@@ -978,6 +1329,12 @@
978
1329
  display: block;
979
1330
  }
980
1331
 
1332
+ /* With clio.js (data-clio-menus) a menu opens from the pointer or the arrow
1333
+ keys, not merely because focus sits on its title. */
1334
+ :where([data-clio-menus]) li:focus-within:not(.open) > :is(.menu, ul[role="menu"]) {
1335
+ display: none;
1336
+ }
1337
+
981
1338
  /* ---- Menu items ---------------------------------------------------------- */
982
1339
  :where(.menu, [role="menu"]) > li {
983
1340
  position: relative;
@@ -988,7 +1345,7 @@
988
1345
  font-weight: var(--clio-menu-item-weight);
989
1346
  line-height: var(--clio-menu-item-height);
990
1347
  white-space: nowrap;
991
- cursor: default;
1348
+ cursor: var(--clio-cursor-arrow);
992
1349
  }
993
1350
 
994
1351
  :where(.menu, [role="menu"]) > li:has(> :is(a, button)) {
@@ -1014,11 +1371,11 @@
1014
1371
  text-decoration: none;
1015
1372
  appearance: none;
1016
1373
  -webkit-appearance: none;
1017
- cursor: default;
1374
+ cursor: var(--clio-cursor-arrow);
1018
1375
  }
1019
1376
 
1020
- :where(.menu, [role="menu"]) > li:not(.disabled, [aria-disabled="true"], .separator, [role="separator"]):is(:hover, :focus-within, .active),
1021
- :where(.menu, [role="menu"]) > li > :is(a, button):not([aria-disabled="true"], :disabled):is(:hover, :focus-visible, .active) {
1377
+ :where(.menu, [role="menu"]) > li:not(.disabled, [aria-disabled="true"], .separator, [role="separator"]):is(:hover, :focus-within, .active):where(:not([data-clio-blink])),
1378
+ :where(.menu, [role="menu"]) > li > :is(a, button):not([aria-disabled="true"], :disabled):is(:hover, :focus-visible, .active):where(:not([data-clio-blink])) {
1022
1379
  background: var(--clio-menu-item-active-bg);
1023
1380
  box-shadow: var(--clio-menu-item-active-shadow);
1024
1381
  color: var(--clio-menu-item-active-fg);
@@ -1056,8 +1413,8 @@
1056
1413
  background: var(--clio-art-s6-menucheck) 0 0 / 9px 8px no-repeat;
1057
1414
  }
1058
1415
 
1059
- :where(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"]):is(:hover, :focus-within, .active)::before,
1060
- :where(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked):is(:hover, :focus-visible, .active)::before {
1416
+ :where(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"]):is(:hover, :focus-within, .active):where(:not([data-clio-blink]))::before,
1417
+ :where(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked):is(:hover, :focus-visible, .active):where(:not([data-clio-blink]))::before {
1061
1418
  background-image: var(--clio-art-s6-menucheck-on);
1062
1419
  }
1063
1420
 
@@ -1074,7 +1431,7 @@
1074
1431
  background: var(--clio-art-s6-submenu) 0 0 / 6px 11px no-repeat;
1075
1432
  }
1076
1433
 
1077
- :where(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"])):is(:hover, :focus-within, .active)::after {
1434
+ :where(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"])):is(:hover, :focus-within, .active):where(:not([data-clio-blink]))::after {
1078
1435
  background-image: var(--clio-art-s6-submenu-on);
1079
1436
  }
1080
1437
 
@@ -1094,6 +1451,33 @@
1094
1451
  border-bottom: 1px dotted var(--clio-ink);
1095
1452
  }
1096
1453
 
1454
+ /* ---- Scrolling menus, menu bar extras, item icons ------------------------------
1455
+ A menu longer than the screen ends in a scroll arrow row: <li class="scroll-down"
1456
+ aria-hidden="true"> (or "scroll-up" at the top). Menu bar items pushed to
1457
+ the right (the Help and Application menus) take class "menu-extras"; an
1458
+ icon in a title or an item is an <img> 16px square. */
1459
+ :where(.menu, [role="menu"]) > :where(li.scroll-down, li.scroll-up) {
1460
+ min-height: var(--clio-menu-item-height);
1461
+ padding: 0;
1462
+ background: var(--clio-art-menu-scroll-down) var(--clio-menu-scroll-left) 50% / auto no-repeat;
1463
+ }
1464
+
1465
+ :where(.menu, [role="menu"]) > :where(li.scroll-up) {
1466
+ background-image: var(--clio-art-menu-scroll-up);
1467
+ }
1468
+
1469
+ :where(.menu-bar, [role="menubar"]) > :where(li.menu-extras) {
1470
+ margin-left: auto;
1471
+ }
1472
+
1473
+ :where(.menu-bar, [role="menubar"], .menu, [role="menu"]) :where(img) {
1474
+ width: 16px;
1475
+ height: 16px;
1476
+ margin-right: 4px;
1477
+ vertical-align: -3px;
1478
+ image-rendering: pixelated;
1479
+ }
1480
+
1097
1481
  /* Controls. Bare elements are styled through :where(), so the rules carry no
1098
1482
  specificity. State model (from AI System 6's fidelity contract): hover never
1099
1483
  changes a push button; pressed comes only from pointer-down, Space or
@@ -1120,18 +1504,19 @@
1120
1504
  font-stretch: var(--clio-font-stretch-text);
1121
1505
  font-weight: var(--clio-button-weight);
1122
1506
  -webkit-font-smoothing: var(--clio-font-smoothing);
1507
+ -moz-osx-font-smoothing: grayscale; /* Firefox on macOS otherwise thickens the pixel squares with a grey fringe */
1123
1508
  line-height: 14px;
1124
1509
  text-align: center;
1125
1510
  text-decoration: none;
1126
1511
  white-space: nowrap;
1127
1512
  appearance: none;
1128
1513
  -webkit-appearance: none;
1129
- cursor: default;
1514
+ cursor: var(--clio-cursor-arrow);
1130
1515
  touch-action: manipulation;
1131
1516
  -webkit-tap-highlight-color: transparent;
1132
1517
  }
1133
1518
 
1134
- :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]):not(:disabled, .disabled):is(:active, .active) {
1519
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]):not(:disabled, .disabled):is(:active:where(:not([data-clio-off])), .active) {
1135
1520
  background: var(--clio-button-active-bg);
1136
1521
  box-shadow: var(--clio-button-active-shadow);
1137
1522
  border-image-source: var(--clio-button-frame-held);
@@ -1195,7 +1580,7 @@
1195
1580
  vertical-align: -2px;
1196
1581
  appearance: none;
1197
1582
  -webkit-appearance: none;
1198
- cursor: default;
1583
+ cursor: var(--clio-cursor-arrow);
1199
1584
  }
1200
1585
 
1201
1586
  :where(input[type="checkbox"]):checked {
@@ -1203,7 +1588,7 @@
1203
1588
  background-origin: var(--clio-check-mark-origin);
1204
1589
  }
1205
1590
 
1206
- :where(input[type="checkbox"]):not(:disabled):active {
1591
+ :where(input[type="checkbox"]):not(:disabled):active:where(:not([data-clio-off])) {
1207
1592
  border-width: var(--clio-check-pressed-border-width);
1208
1593
  }
1209
1594
 
@@ -1225,18 +1610,18 @@
1225
1610
  vertical-align: -2px;
1226
1611
  appearance: none;
1227
1612
  -webkit-appearance: none;
1228
- cursor: default;
1613
+ cursor: var(--clio-cursor-arrow);
1229
1614
  }
1230
1615
 
1231
1616
  :where(input[type="radio"]):checked {
1232
1617
  background: var(--clio-radio-on);
1233
1618
  }
1234
1619
 
1235
- :where(input[type="radio"]):not(:disabled):active {
1620
+ :where(input[type="radio"]):not(:disabled):active:where(:not([data-clio-off])) {
1236
1621
  background: var(--clio-radio-pressed);
1237
1622
  }
1238
1623
 
1239
- :where(input[type="radio"]):checked:not(:disabled):active {
1624
+ :where(input[type="radio"]):checked:not(:disabled):active:where(:not([data-clio-off])) {
1240
1625
  background: var(--clio-radio-pressed-on);
1241
1626
  }
1242
1627
 
@@ -1300,7 +1685,7 @@
1300
1685
  }
1301
1686
 
1302
1687
  :where(input, textarea):focus-visible {
1303
- outline: var(--clio-focus-outline);
1688
+ outline: var(--clio-field-focus-outline, var(--clio-focus-outline));
1304
1689
  outline-offset: var(--clio-focus-offset);
1305
1690
  box-shadow: var(--clio-field-focus-shadow);
1306
1691
  }
@@ -1336,10 +1721,14 @@
1336
1721
  font-stretch: var(--clio-font-stretch-text);
1337
1722
  font-weight: var(--clio-popup-weight);
1338
1723
  -webkit-font-smoothing: var(--clio-font-smoothing);
1724
+ -moz-osx-font-smoothing: grayscale; /* Firefox on macOS otherwise thickens the pixel squares with a grey fringe */
1339
1725
  line-height: 16px;
1726
+ white-space: nowrap; /* one line, cut short with an ellipsis, as the Mac truncated a pop-up's title */
1727
+ overflow: hidden;
1728
+ text-overflow: ellipsis;
1340
1729
  appearance: none;
1341
1730
  -webkit-appearance: none;
1342
- cursor: default;
1731
+ cursor: var(--clio-cursor-arrow);
1343
1732
  }
1344
1733
 
1345
1734
  :where(select):focus-visible {
@@ -1348,7 +1737,93 @@
1348
1737
  }
1349
1738
 
1350
1739
  :where(select):disabled {
1351
- color: var(--clio-disabled);
1740
+ color: var(--clio-popup-disabled-fg, var(--clio-disabled));
1741
+ opacity: 1; /* Chrome fades a disabled select it draws itself; the Mac did not */
1742
+ mask: var(--clio-popup-disabled-mask, none);
1743
+ mask-clip: no-clip; /* the shadow outside the frame is dimmed too */
1744
+ }
1745
+
1746
+ /* The open pop-up menu. Where the browser lets CSS draw it (appearance:
1747
+ base-select: Chrome 135, Safari 27), it is the era's menu, laid over the
1748
+ button with the current item on the button's row (clio.js sets
1749
+ --clio-picker-shift; without it the first item sits there). clio.js draws
1750
+ the same menu as elements elsewhere. */
1751
+ @supports (appearance: base-select) {
1752
+ /* a mouse or trackpad only: on touch screens the system's own picker
1753
+ (the iOS wheel, Android's sheet) stays, as it is the better tool there */
1754
+ @media (pointer: fine) {
1755
+ :where(select:not([multiple], [size]:not([size="1"]))),
1756
+ :where(select:not([multiple], [size]:not([size="1"])))::picker(select) {
1757
+ appearance: base-select;
1758
+ }
1759
+
1760
+ /* keep the closed button laid out as before (the base-select default is a
1761
+ centred inline-flex box, a pixel off the measured text) */
1762
+ :where(select:not([multiple], [size]:not([size="1"]))) {
1763
+ display: inline-block;
1764
+ align-items: normal;
1765
+ gap: normal;
1766
+ text-align: start;
1767
+ }
1768
+
1769
+ :where(select)::picker-icon {
1770
+ display: none; /* the era's arrow is the button's own art */
1771
+ }
1772
+
1773
+ :where(select)::picker(select) {
1774
+ position-area: span-block-end span-inline-end; /* top and left on the button's */
1775
+ position-try-fallbacks: none;
1776
+ inset: auto;
1777
+ min-width: anchor-size(width);
1778
+ margin: 0;
1779
+ padding: 0;
1780
+ translate: 0 var(--clio-picker-shift, 0px);
1781
+ border: var(--clio-menu-border);
1782
+ border-top-width: var(--clio-menu-border-top-width, 1px);
1783
+ border-radius: 0; /* Safari rounds its picker */
1784
+ background: var(--clio-menu-bg);
1785
+ box-shadow: var(--clio-menu-shadow);
1786
+ color: var(--clio-ink);
1787
+ }
1788
+
1789
+ :where(select) option {
1790
+ position: relative;
1791
+ display: flex;
1792
+ align-items: center;
1793
+ min-height: var(--clio-menu-item-height);
1794
+ padding: var(--clio-menu-item-padding);
1795
+ font: inherit;
1796
+ font-weight: var(--clio-menu-item-weight, inherit);
1797
+ line-height: var(--clio-menu-item-height);
1798
+ white-space: nowrap;
1799
+ outline: none;
1800
+ }
1801
+
1802
+ :where(select) option:is(:hover, :focus-visible):not(:disabled) {
1803
+ background: var(--clio-menu-item-active-bg);
1804
+ box-shadow: var(--clio-menu-item-active-shadow);
1805
+ color: var(--clio-menu-item-active-fg);
1806
+ }
1807
+
1808
+ :where(select) option:disabled {
1809
+ color: var(--clio-disabled);
1810
+ }
1811
+
1812
+ :where(select) option::checkmark {
1813
+ content: "";
1814
+ position: absolute;
1815
+ top: 50%;
1816
+ left: 3px;
1817
+ width: 9px;
1818
+ height: 8px;
1819
+ margin-top: -4px;
1820
+ background: var(--clio-art-s6-menucheck) 0 0 / 9px 8px no-repeat;
1821
+ }
1822
+
1823
+ :where(select) option:is(:hover, :focus-visible)::checkmark {
1824
+ background-image: var(--clio-art-s6-menucheck-on);
1825
+ }
1826
+ }
1352
1827
  }
1353
1828
 
1354
1829
  /* A list box: <select multiple> or <select size="n">. */
@@ -1391,7 +1866,7 @@
1391
1866
  padding: 0 4px;
1392
1867
  line-height: var(--clio-list-row);
1393
1868
  white-space: nowrap;
1394
- cursor: default;
1869
+ cursor: var(--clio-cursor-arrow);
1395
1870
  }
1396
1871
 
1397
1872
  :where(.listbox, [role="listbox"]) > :is(li, [role="option"]):is([aria-selected="true"], .selected) {
@@ -1477,7 +1952,7 @@
1477
1952
  font-family: var(--clio-font-chrome);
1478
1953
  font-size: var(--clio-font-size);
1479
1954
  font-weight: var(--clio-chrome-weight);
1480
- cursor: default;
1955
+ cursor: var(--clio-cursor-arrow);
1481
1956
  }
1482
1957
 
1483
1958
  :where([role="tablist"], .tabs) > :is([role="tab"], li, button):is([aria-selected="true"], .active) {
@@ -1513,7 +1988,7 @@
1513
1988
  font-family: var(--clio-font-small);
1514
1989
  font-size: var(--clio-font-size-small);
1515
1990
  text-align: center;
1516
- cursor: default;
1991
+ cursor: var(--clio-cursor-arrow);
1517
1992
  }
1518
1993
 
1519
1994
  :where(.icon) > :is(img, svg, .icon-image) {
@@ -1539,218 +2014,1131 @@
1539
2014
  color: var(--clio-label-selected-fg);
1540
2015
  }
1541
2016
 
1542
- /* Dialogs and alerts.
1543
- .modal-dialog / .alert-box: the double-framed modal box (dBoxProc).
1544
- .standard-dialog: the plain box with a drop shadow (altDBoxProc).
1545
- .modeless-dialog: a movable dialog, which is a .window.
1546
- Use them on <dialog> or on a <div role="dialog">. system.css's
1547
- .outer-border / .inner-border wrappers are accepted and draw nothing extra. */
1548
- :where(.modal-dialog, .alert-box, dialog.modal) {
1549
- box-sizing: border-box;
1550
- max-width: 100%;
1551
- margin: 0;
1552
- padding: var(--clio-modal-padding);
1553
- border: var(--clio-modal-border);
1554
- background: var(--clio-dialog-bg);
1555
- box-shadow: var(--clio-modal-frame);
1556
- color: var(--clio-ink);
1557
- }
2017
+ /* Controls the classic guidelines add to the first set (Macintosh Human
2018
+ Interface Guidelines 1992, ch. 7; Mac OS 8 Human Interface Guidelines,
2019
+ ch. 2), each drawn per era from tokens. COVERAGE.md lists them all. */
1558
2020
 
1559
- :where(.standard-dialog) {
2021
+ /* ---- Disclosure triangle ---------------------------------------------------
2022
+ Markup: <button class="disclosure" aria-expanded="false" aria-label="Show">
2023
+ or <details><summary>…</summary>…</details>. System 7 brought it to the
2024
+ Finder's list views; System 6 had none (it uses System 7's). */
2025
+ :where(.disclosure) {
2026
+ display: inline-block;
1560
2027
  box-sizing: border-box;
1561
- max-width: 100%;
2028
+ width: var(--clio-disclosure-size);
2029
+ height: var(--clio-disclosure-size);
2030
+ min-width: 0;
2031
+ min-height: 0;
1562
2032
  margin: 0;
1563
- padding: 12px 14px;
1564
- border: var(--clio-plain-dialog-border);
1565
- background: var(--clio-dialog-bg);
1566
- box-shadow: var(--clio-plain-dialog-shadow);
1567
- color: var(--clio-ink);
1568
- }
1569
-
1570
- :where(dialog):is(.modal-dialog, .alert-box, .standard-dialog, .modal)::backdrop {
1571
- background: transparent;
1572
- }
1573
-
1574
- :where(.modal-dialog, .alert-box, .standard-dialog) :where(.outer-border, .inner-border) {
1575
2033
  padding: 0;
1576
2034
  border: 0;
2035
+ background: var(--clio-art-disclosure) 0 0 / var(--clio-disclosure-size) var(--clio-disclosure-size) no-repeat;
2036
+ box-shadow: none;
2037
+ vertical-align: middle;
2038
+ appearance: none;
2039
+ -webkit-appearance: none;
2040
+ cursor: var(--clio-cursor-arrow);
1577
2041
  }
1578
2042
 
1579
- /* Alert layout: icon on the left, message, buttons bottom-right. */
1580
- :where(.alert-box) {
1581
- display: grid;
1582
- grid-template-columns: auto 1fr;
1583
- column-gap: 16px;
1584
- row-gap: 12px;
1585
- align-items: start;
2043
+ :where(.disclosure):is([aria-expanded="true"], .open) {
2044
+ background-image: var(--clio-art-disclosure-open);
1586
2045
  }
1587
2046
 
1588
- :where(.alert-box) > :where(.alert-icon) {
1589
- grid-row: 1;
1590
- width: 32px;
1591
- height: 32px;
2047
+ :where(details) > :where(summary) {
2048
+ display: flex;
2049
+ align-items: center;
2050
+ gap: var(--clio-disclosure-gap);
2051
+ list-style: none;
2052
+ cursor: var(--clio-cursor-arrow);
1592
2053
  }
1593
2054
 
1594
- :where(.alert-box) > :where(.alert-contents, .modal-contents, p) {
1595
- grid-column: 2;
1596
- margin: 0;
2055
+ :where(details) > :where(summary)::-webkit-details-marker {
2056
+ display: none;
1597
2057
  }
1598
2058
 
1599
- :where(.alert-box) > :where(.alert-buttons, .dialog-buttons) {
1600
- grid-column: 1 / -1;
2059
+ :where(details) > :where(summary)::before {
2060
+ content: "";
2061
+ flex: none;
2062
+ width: var(--clio-disclosure-size);
2063
+ height: var(--clio-disclosure-size);
2064
+ background: var(--clio-art-disclosure) 0 0 / var(--clio-disclosure-size) var(--clio-disclosure-size) no-repeat;
1601
2065
  }
1602
2066
 
1603
- :where(.dialog-buttons, .alert-buttons) {
1604
- display: flex;
1605
- flex-wrap: wrap;
1606
- justify-content: flex-end;
1607
- gap: 12px;
1608
- margin-top: 12px;
2067
+ :where(details[open]) > :where(summary)::before {
2068
+ background-image: var(--clio-art-disclosure-open);
1609
2069
  }
1610
2070
 
1611
- /* An alert icon drawn here, not Apple's: a rounded speech box with "!". */
1612
- :where(.alert-icon.caution, .alert-icon.note, .alert-icon.stop) {
1613
- display: block;
1614
- box-sizing: border-box;
1615
- border: 2px solid var(--clio-ink);
1616
- border-radius: 6px;
1617
- background: var(--clio-paper);
1618
- color: var(--clio-ink);
1619
- font: 700 22px/28px var(--clio-font-display);
1620
- text-align: center;
2071
+ /* ---- List view --------------------------------------------------------------
2072
+ The Finder's list view: column headers, the sorted column marked, rows of
2073
+ name and details. Markup: <table class="list-view"> with <th aria-sort> on
2074
+ the sorted column and an optional empty <th class="sort-direction">.
2075
+ System 7: plain headers in the small font, the sorted one underlined, a
2076
+ double rule below (Finder, View by Name). */
2077
+ :where(.list-view) {
2078
+ border-collapse: collapse;
2079
+ border-spacing: 0;
2080
+ background: var(--clio-list-view-bg);
2081
+ font-family: var(--clio-font-small);
2082
+ font-size: var(--clio-font-size-small);
2083
+ line-height: var(--clio-list-view-row);
1621
2084
  }
1622
2085
 
1623
- :where(.alert-icon.caution)::before { content: "!"; }
1624
- :where(.alert-icon.note)::before { content: "i"; }
1625
- :where(.alert-icon.stop) { border-radius: 50%; }
1626
- :where(.alert-icon.stop)::before { content: "\00D7"; }
1627
-
1628
- /* Scroll bars, for scroll areas clio.css owns (.window-pane, .listbox,
1629
- textarea, list-box selects) and for anything you mark with .clio-scroll.
1630
- Add class="clio-scrollbars" to <html> to give every scroll area the era's
1631
- scroll bar.
1632
-
1633
- WebKit/Blink draw the full bar: two arrow boxes, the patterned lane and the
1634
- scroll box. The scroll box is proportional to the content here (a browser
1635
- limit), where System 6 drew a fixed 16px square. Firefox has no scroll bar
1636
- parts, so it gets the era's colours through scrollbar-color. */
1637
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar,
1638
- :where(html.clio-scrollbars)::-webkit-scrollbar {
1639
- width: var(--clio-scrollbar-size);
1640
- height: var(--clio-scrollbar-size);
1641
- background: var(--clio-paper);
2086
+ :where(.list-view) :where(th, td) {
2087
+ box-sizing: border-box;
1642
2088
  }
1643
2089
 
1644
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track,
1645
- :where(html.clio-scrollbars)::-webkit-scrollbar-track {
1646
- background: var(--clio-scrollbar-track);
1647
- box-shadow: var(--clio-scrollbar-track-shadow);
2090
+ :where(.list-view) :where(th) {
2091
+ height: var(--clio-list-view-header-height);
2092
+ padding: var(--clio-list-view-header-padding);
2093
+ background: var(--clio-list-view-header-bg);
2094
+ font-weight: normal;
2095
+ line-height: 14px;
2096
+ text-align: left;
2097
+ vertical-align: top;
2098
+ white-space: nowrap;
1648
2099
  }
1649
2100
 
1650
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track:vertical,
1651
- :where(html.clio-scrollbars)::-webkit-scrollbar-track:vertical {
1652
- border-left: 1px solid var(--clio-ink);
2101
+ :where(.list-view) :where(th[aria-sort]:not([aria-sort="none"])) {
2102
+ background: var(--clio-list-view-sorted-header-bg);
2103
+ text-decoration: var(--clio-list-view-sorted-decoration);
2104
+ text-underline-offset: 2px;
1653
2105
  }
1654
2106
 
1655
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track:horizontal,
1656
- :where(html.clio-scrollbars)::-webkit-scrollbar-track:horizontal {
1657
- border-top: 1px solid var(--clio-ink);
2107
+ :where(.list-view) :where(td) {
2108
+ height: var(--clio-list-view-row);
2109
+ padding: 0 4px;
2110
+ vertical-align: middle;
2111
+ white-space: nowrap;
1658
2112
  }
1659
2113
 
1660
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb,
1661
- :where(html.clio-scrollbars)::-webkit-scrollbar-thumb {
1662
- min-width: var(--clio-scrollbar-size);
1663
- min-height: var(--clio-scrollbar-size);
1664
- border: var(--clio-scrollbar-thumb-border);
1665
- background: var(--clio-scrollbar-thumb-bg);
1666
- box-shadow: var(--clio-scrollbar-thumb-shadow);
2114
+ :where(.list-view) :where(td.sorted) {
2115
+ background: var(--clio-list-view-sorted-bg);
1667
2116
  }
1668
2117
 
1669
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb:horizontal,
1670
- :where(html.clio-scrollbars)::-webkit-scrollbar-thumb:horizontal {
1671
- background: var(--clio-scrollbar-thumb-bg-horizontal, var(--clio-scrollbar-thumb-bg));
1672
- box-shadow: var(--clio-scrollbar-thumb-shadow-horizontal, var(--clio-scrollbar-thumb-shadow));
2118
+ :where(.list-view) :where(.sort-direction) {
2119
+ width: var(--clio-list-view-sort-width);
2120
+ padding: 0;
1673
2121
  }
1674
2122
 
1675
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:start:decrement,
1676
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:end:increment,
1677
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:start:decrement,
1678
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:end:increment {
1679
- display: block;
1680
- width: var(--clio-scrollbar-size);
1681
- height: var(--clio-scrollbar-size);
1682
- background-color: var(--clio-scrollbar-button-bg);
1683
- background-position: center;
1684
- background-repeat: no-repeat;
1685
- box-shadow: var(--clio-scrollbar-button-shadow);
2123
+ /* ---- Slider ------------------------------------------------------------------
2124
+ <input type="range">, the Appearance slider (Mac OS 8 HIG: "Sliders and Tick
2125
+ Marks"). Add class "ticks" and --clio-slider-tick-count for tick marks under
2126
+ the track. System 6 and System 7 had no slider in the Toolbox; System 7.5's
2127
+ control panels drew their own (see the System 7 layer). */
2128
+ :where(input[type="range"]) {
2129
+ box-sizing: border-box;
2130
+ height: var(--clio-slider-height);
2131
+ margin: 0;
2132
+ /* Chrome centres the track in the content box: the padding puts it
2133
+ --clio-slider-track-top below the thumb's top. */
2134
+ padding: 0 0 calc(var(--clio-slider-height) - var(--clio-slider-track-height) - 2 * var(--clio-slider-track-top));
2135
+ background: transparent;
2136
+ appearance: none;
2137
+ -webkit-appearance: none;
2138
+ cursor: var(--clio-cursor-arrow);
1686
2139
  }
1687
2140
 
1688
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:decrement,
1689
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:decrement {
1690
- border-left: 1px solid var(--clio-ink);
1691
- border-bottom: 1px solid var(--clio-ink);
1692
- background-image: var(--clio-scrollbar-up);
2141
+ :where(input[type="range"].ticks) {
2142
+ /* A whole number of pixels: each engine rounds a fractional period its own way. */
2143
+ --clio-slider-tick-spacing: round((100% - var(--clio-slider-tick-run)) / (var(--clio-slider-tick-count) - 1), 1px);
2144
+ height: calc(var(--clio-slider-height) + var(--clio-slider-tick-gap) + 4px);
2145
+ background:
2146
+ repeating-linear-gradient(to right, var(--clio-slider-tick-light) 0 1px, var(--clio-slider-tick-ink) 1px 2px, var(--clio-slider-tick-shade) 2px 3px, transparent 3px var(--clio-slider-tick-spacing)) var(--clio-slider-tick-offset) 100% / 100% 3px no-repeat,
2147
+ repeating-linear-gradient(to right, var(--clio-slider-tick-light) 0 2px, transparent 2px var(--clio-slider-tick-spacing)) var(--clio-slider-tick-offset) calc(100% - 3px) / 100% 1px no-repeat;
1693
2148
  }
1694
2149
 
1695
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:increment,
1696
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:increment {
1697
- border-left: 1px solid var(--clio-ink);
1698
- border-top: 1px solid var(--clio-ink);
1699
- background-image: var(--clio-scrollbar-down);
2150
+ :where(input[type="range"])::-webkit-slider-runnable-track {
2151
+ box-sizing: border-box;
2152
+ height: var(--clio-slider-track-height);
2153
+ border-style: solid;
2154
+ border-width: var(--clio-slider-track-slice);
2155
+ border-color: transparent;
2156
+ border-image: var(--clio-art-slider-track) var(--clio-slider-track-slice-n) fill / var(--clio-slider-track-slice) stretch;
1700
2157
  }
1701
2158
 
1702
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:decrement,
1703
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:decrement {
1704
- border-top: 1px solid var(--clio-ink);
1705
- border-right: 1px solid var(--clio-ink);
1706
- background-image: var(--clio-scrollbar-left);
2159
+ :where(input[type="range"])::-webkit-slider-thumb {
2160
+ width: var(--clio-slider-thumb-width);
2161
+ height: var(--clio-slider-thumb-height);
2162
+ /* the thumb sits in the track's content box, inside the border-image slice */
2163
+ margin-top: calc(-1 * (var(--clio-slider-track-top) + var(--clio-slider-track-slice)));
2164
+ border: 0;
2165
+ background: var(--clio-art-slider-thumb) 0 0 / 100% 100% no-repeat;
2166
+ appearance: none;
2167
+ -webkit-appearance: none;
1707
2168
  }
1708
2169
 
1709
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:increment,
1710
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:increment {
1711
- border-top: 1px solid var(--clio-ink);
1712
- border-left: 1px solid var(--clio-ink);
1713
- background-image: var(--clio-scrollbar-right);
2170
+ /* Firefox: the same track and thumb through its own parts. Its thumb travels
2171
+ the whole content box: the padding keeps it inside the track's ends, as
2172
+ Chrome's and the Mac's (Mouse control panel at both ends), and the track
2173
+ reaches back over the padding. */
2174
+ @supports selector(::-moz-range-thumb) {
2175
+ :where(input[type="range"]) {
2176
+ padding-inline: var(--clio-slider-track-slice);
2177
+ }
1714
2178
  }
1715
2179
 
1716
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:decrement:active,
1717
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:decrement:active {
1718
- background-image: var(--clio-scrollbar-up-on);
2180
+ :where(input[type="range"])::-moz-range-track {
2181
+ margin-inline: calc(-1 * var(--clio-slider-track-slice));
1719
2182
  }
1720
2183
 
1721
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:increment:active,
1722
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:increment:active {
1723
- background-image: var(--clio-scrollbar-down-on);
2184
+ :where(input[type="range"])::-moz-range-track {
2185
+ box-sizing: border-box;
2186
+ height: var(--clio-slider-track-height);
2187
+ border-style: solid;
2188
+ border-width: var(--clio-slider-track-slice);
2189
+ border-color: transparent;
2190
+ border-image: var(--clio-art-slider-track) var(--clio-slider-track-slice-n) fill / var(--clio-slider-track-slice) stretch;
2191
+ }
2192
+
2193
+ :where(input[type="range"])::-moz-range-thumb {
2194
+ box-sizing: border-box;
2195
+ width: var(--clio-slider-thumb-width);
2196
+ height: var(--clio-slider-thumb-height);
2197
+ border: 0;
2198
+ border-radius: 0;
2199
+ background: var(--clio-art-slider-thumb) 0 0 / 100% 100% no-repeat;
2200
+ /* Firefox centres the thumb in the content box (its top lands half a pixel
2201
+ above, then on the pixel below); this brings its top to the content box's. */
2202
+ translate: 0 round(down, (var(--clio-slider-thumb-height) - var(--clio-slider-track-height) - 2 * var(--clio-slider-track-top)) / 2, 1px);
2203
+ }
2204
+
2205
+ /* ---- Little arrows -----------------------------------------------------------
2206
+ The up/down pair beside a number or clock field (Mac OS 8 HIG: "Little
2207
+ Arrows"; System 7's control panels drew them too). Markup:
2208
+ <span class="little-arrows" role="group" aria-label="Cache size">
2209
+ <button class="up" aria-label="Increase"></button>
2210
+ <button class="down" aria-label="Decrease"></button></span>
2211
+ Add aria-disabled="true" (or disabled buttons) for the dimmed pair. */
2212
+ :where(.little-arrows) {
2213
+ display: inline-flex;
2214
+ flex-direction: column;
2215
+ width: var(--clio-little-arrows-width);
2216
+ height: var(--clio-little-arrows-height);
2217
+ background: var(--clio-art-little-arrows) 0 0 / 100% 100% no-repeat;
2218
+ vertical-align: middle;
2219
+ }
2220
+
2221
+ :where(.little-arrows) > :where(button) {
2222
+ flex: 1 1 50%;
2223
+ min-width: 0;
2224
+ min-height: 0;
2225
+ margin: 0;
2226
+ padding: 0;
2227
+ border: 0;
2228
+ border-image: none;
2229
+ background: transparent;
2230
+ box-shadow: none;
2231
+ appearance: none;
2232
+ -webkit-appearance: none;
2233
+ }
2234
+
2235
+ :where(.little-arrows) > :where(button)::before,
2236
+ :where(.little-arrows) > :where(button)::after {
2237
+ content: none;
2238
+ }
2239
+
2240
+ :where(.little-arrows):has(> .up:active:where(:not([data-clio-off]))) {
2241
+ background-image: var(--clio-art-little-arrows-up, var(--clio-art-little-arrows));
2242
+ }
2243
+
2244
+ :where(.little-arrows):has(> .down:active:where(:not([data-clio-off]))) {
2245
+ background-image: var(--clio-art-little-arrows-down, var(--clio-art-little-arrows));
2246
+ }
2247
+
2248
+ :where(.little-arrows):is([aria-disabled="true"], :has(> button:disabled)) {
2249
+ background-image: var(--clio-art-little-arrows-disabled, var(--clio-art-little-arrows));
2250
+ }
2251
+
2252
+ /* ---- Bevel button ------------------------------------------------------------
2253
+ A square bevelled button for an icon or a short label, which can act as a
2254
+ push button, a toggle (aria-pressed) or a menu (class "menu", aria-haspopup)
2255
+ (Mac OS 8 HIG: "Bevel Buttons"). Earlier eras had none and use push buttons'
2256
+ square cousin from Platinum. */
2257
+ :where(.bevel) {
2258
+ display: inline-flex;
2259
+ align-items: center;
2260
+ justify-content: center;
2261
+ box-sizing: border-box;
2262
+ min-width: var(--clio-bevel-min);
2263
+ min-height: var(--clio-bevel-min);
2264
+ margin: 0;
2265
+ padding: var(--clio-bevel-padding);
2266
+ border: var(--clio-bevel-slice) solid transparent;
2267
+ border-radius: 0;
2268
+ border-image: var(--clio-art-bevel) var(--clio-bevel-slice-n) fill / var(--clio-bevel-slice) stretch;
2269
+ background: transparent;
2270
+ box-shadow: none;
2271
+ color: var(--clio-ink);
2272
+ font: inherit;
2273
+ appearance: none;
2274
+ -webkit-appearance: none;
2275
+ cursor: var(--clio-cursor-arrow);
2276
+ }
2277
+
2278
+ :where(.bevel):is(:active:where(:not([data-clio-off])), .active, [aria-pressed="true"]):not(:disabled) {
2279
+ border-image-source: var(--clio-art-bevel-held);
2280
+ }
2281
+
2282
+ :where(.bevel) {
2283
+ position: relative;
2284
+ }
2285
+
2286
+ :where(.bevel)::before,
2287
+ :where(.bevel)::after {
2288
+ content: none;
2289
+ }
2290
+
2291
+ /* The menu arrow, over the face (border-image fill paints over backgrounds). */
2292
+ :where(.bevel.menu, .bevel[aria-haspopup])::after {
2293
+ content: "";
2294
+ position: absolute;
2295
+ right: calc(var(--clio-bevel-arrow-right) - var(--clio-bevel-slice));
2296
+ bottom: calc(var(--clio-bevel-arrow-bottom) - var(--clio-bevel-slice));
2297
+ width: var(--clio-bevel-arrow-width);
2298
+ height: var(--clio-bevel-arrow-height);
2299
+ background: var(--clio-art-bevel-menu-arrow) 0 0 / 100% 100% no-repeat;
2300
+ }
2301
+
2302
+ /* ---- Keyboard focus on lists ---------------------------------------------------
2303
+ Mac OS 8 draws the same ring round a list box that has the keyboard focus
2304
+ (Appearance, Desktop tab, the pattern list); text fields take it from
2305
+ --clio-field-focus-shadow. */
2306
+ :where(.listbox, [role="listbox"], select[multiple]):is(:focus-visible, :focus-within) {
2307
+ box-shadow: var(--clio-list-focus-shadow, var(--clio-list-shadow));
2308
+ }
2309
+
2310
+ /* ---- Chasing arrows ------------------------------------------------------------
2311
+ The asynchronous progress indicator (Mac OS 8 HIG: "Asynchronous Arrows").
2312
+ Markup: <span class="chasing-arrows" role="status" aria-label="Looking…">.
2313
+ It turns by stepping through the era's frames; with reduced motion it
2314
+ stands still on the first. Earlier eras had a spinning watch cursor
2315
+ instead, and use Platinum's arrows. */
2316
+ :where(.chasing-arrows) {
2317
+ position: relative;
2318
+ display: inline-block;
2319
+ width: 16px;
2320
+ height: 16px;
2321
+ overflow: hidden;
2322
+ vertical-align: middle;
2323
+ }
2324
+
2325
+ /* The frames side by side on a strip that moves a frame at a time (transform
2326
+ only, so the turning stays off the main thread). */
2327
+ :where(.chasing-arrows)::before {
2328
+ content: "";
2329
+ position: absolute;
2330
+ top: 0;
2331
+ left: 0;
2332
+ width: calc(16px * var(--clio-chasing-arrows-frames));
2333
+ height: 16px;
2334
+ background: var(--clio-art-chasing-arrows) 0 0 / 100% 100% no-repeat;
2335
+ animation: clio-chase calc(var(--clio-chasing-arrows-frames) * 0.12s) steps(var(--clio-chasing-arrows-frames)) infinite;
2336
+ }
2337
+
2338
+ @keyframes clio-chase {
2339
+ to { transform: translateX(calc(-16px * var(--clio-chasing-arrows-frames))); }
2340
+ }
2341
+
2342
+ @media (prefers-reduced-motion: reduce) {
2343
+ :where(.chasing-arrows)::before { animation: none; }
2344
+ }
2345
+
2346
+ /* ---- Help button -----------------------------------------------------------------
2347
+ The square button with the help icon in a dialog's lower left (Mac OS 8 HIG:
2348
+ "Help Button Layout"). <button class="help-button" aria-label="Help">.
2349
+ Earlier eras put a "Help" push button there instead, and use Platinum's. */
2350
+ :where(.help-button) {
2351
+ box-sizing: border-box;
2352
+ width: 21px;
2353
+ min-width: 0;
2354
+ height: 20px;
2355
+ min-height: 0;
2356
+ margin: 0;
2357
+ padding: 0;
2358
+ border: 0;
2359
+ border-radius: 0;
2360
+ border-image: none;
2361
+ background: var(--clio-art-help-button) 0 0 / 21px 20px no-repeat;
2362
+ box-shadow: none;
2363
+ color: transparent;
2364
+ font-size: 0;
2365
+ appearance: none;
2366
+ -webkit-appearance: none;
2367
+ cursor: var(--clio-cursor-arrow);
2368
+ }
2369
+
2370
+ :where(.help-button)::before,
2371
+ :where(.help-button)::after {
2372
+ content: none;
2373
+ }
2374
+
2375
+ /* ---- Image well ---------------------------------------------------------------------
2376
+ A sunken well that holds a picture or an icon (Mac OS 8 HIG: "Image Wells"),
2377
+ drawn like the era's field frame round a white face (inferred: no image
2378
+ well was on the captured screens). <div class="image-well"><img …></div> */
2379
+ :where(.image-well) {
2380
+ display: inline-flex;
2381
+ align-items: center;
2382
+ justify-content: center;
2383
+ box-sizing: border-box;
2384
+ border: var(--clio-field-border);
2385
+ background: var(--clio-image-well-bg);
2386
+ box-shadow: var(--clio-field-shadow);
2387
+ }
2388
+
2389
+ /* ---- Group boxes: secondary, and titled by a check box ---------------------------
2390
+ <fieldset class="secondary"> is the lighter group for a subordinate set
2391
+ (Mac OS 8 HIG: "Group Boxes"). A check box or pop-up menu as the title goes
2392
+ in the legend: <legend><label><input type="checkbox"> Use a server</label></legend>.
2393
+ Before Mac OS 8 every group box is the one kind. */
2394
+ :where(fieldset > legend) > :where(label) {
2395
+ display: inline-flex;
2396
+ align-items: center;
2397
+ gap: 4px;
2398
+ }
2399
+
2400
+ /* ---- Utility window ------------------------------------------------------------------
2401
+ A floating palette (Mac OS 8 HIG: "Utility Windows"; HIG 1992: floating
2402
+ windows): <div class="window utility"> with the usual .title-bar. Its title
2403
+ bar is thinner, its boxes smaller and its title in the small font. Before
2404
+ Mac OS 8 the eras draw it from the document window's parts (inferred). */
2405
+ :where(.window.utility) {
2406
+ --clio-titlebar-height: var(--clio-utility-titlebar-height);
2407
+ --clio-titlebar-row: var(--clio-utility-titlebar-row);
2408
+ --clio-box-size: var(--clio-utility-box-size);
2409
+ --clio-titlebar-slot: var(--clio-utility-slot);
2410
+ min-width: 80px;
2411
+ }
2412
+
2413
+ :where(.window.utility) > :where(.title-bar) > :is(.title, h1, h2, h3) {
2414
+ font-size: var(--clio-utility-title-size, var(--clio-title-font-size));
2415
+ }
2416
+
2417
+ /* ---- Help balloon ------------------------------------------------------------------
2418
+ Balloon Help (HIG 1992, ch. 11; Mac OS 8 and 9 kept it): a white balloon
2419
+ with a rounded outline, a 2px drop on the right and below, and a tail rising
2420
+ from its top edge near the right towards the object it describes.
2421
+ <div class="balloon" role="tooltip">…</div>. The tail's tip, under the
2422
+ pointer in the capture, is inferred. */
2423
+ :where(.balloon) {
2424
+ position: relative;
2425
+ box-sizing: border-box;
2426
+ width: max-content;
2427
+ max-width: 260px;
2428
+ margin-top: 14px;
2429
+ padding: 8px 12px 10px 10px;
2430
+ border: 10px solid transparent;
2431
+ border-image: var(--clio-art-balloon) 10 fill / 10px stretch;
2432
+ font-family: var(--clio-font-small);
2433
+ font-size: var(--clio-font-size-small);
2434
+ line-height: 13px;
2435
+ }
2436
+
2437
+ :where(.balloon) {
2438
+ padding: 0 2px 0 0;
2439
+ }
2440
+
2441
+ :where(.balloon)::before {
2442
+ content: "";
2443
+ position: absolute;
2444
+ top: -23px;
2445
+ right: -5px;
2446
+ width: 12px;
2447
+ height: 14px;
2448
+ background: var(--clio-art-balloon-tail) 0 0 / 12px 14px no-repeat;
2449
+ }
2450
+
2451
+ /* The rare controls (ROADMAP "Can wait" 10): the rounded-corner window, placards,
2452
+ split bars and the side-title utility window (its Platinum drawing is in
2453
+ 90-platinum.css). Measured in Infinite Mac; see EVIDENCE.md. */
2454
+
2455
+ /* ---- Rounded-corner window (rDocProc, desk accessories) ----------------------
2456
+ <div class="rounded-window"> > <div class="rounded-title"> (> .close, h2) and
2457
+ any content. The Calculator draws the same window in System 6.0.8, 7.5.3,
2458
+ Mac OS 8.5 (Drawing Board) and 9.0: a 1px black frame whose corners step in
2459
+ 5, 3, 2, 1, 1 pixels; a 17-row black title bar ruled below, the title in
2460
+ white centred in the space right of an 11px white close box at (9,4). In the
2461
+ background the bar turns white, the title black, and the close box goes. */
2462
+ :where(.rounded-window) {
2463
+ --clio-rounded-bg: #ffffff;
2464
+ position: relative;
2465
+ display: flex;
2466
+ flex-direction: column;
2467
+ box-sizing: border-box;
2468
+ min-width: 60px;
2469
+ border: 1px solid #000000;
2470
+ background: var(--clio-rounded-bg);
2471
+ -webkit-mask:
2472
+ var(--clio-art-rdoc-mask-tl) left top / 6px 6px no-repeat,
2473
+ var(--clio-art-rdoc-mask-tr) right top / 6px 6px no-repeat,
2474
+ var(--clio-art-rdoc-mask-bl) left bottom / 6px 6px no-repeat,
2475
+ var(--clio-art-rdoc-mask-br) right bottom / 6px 6px no-repeat,
2476
+ linear-gradient(#000000, #000000) 0 6px / 100% calc(100% - 12px) no-repeat,
2477
+ linear-gradient(#000000, #000000) 6px 0 / calc(100% - 12px) 100% no-repeat;
2478
+ mask:
2479
+ var(--clio-art-rdoc-mask-tl) left top / 6px 6px no-repeat,
2480
+ var(--clio-art-rdoc-mask-tr) right top / 6px 6px no-repeat,
2481
+ var(--clio-art-rdoc-mask-bl) left bottom / 6px 6px no-repeat,
2482
+ var(--clio-art-rdoc-mask-br) right bottom / 6px 6px no-repeat,
2483
+ linear-gradient(#000000, #000000) 0 6px / 100% calc(100% - 12px) no-repeat,
2484
+ linear-gradient(#000000, #000000) 6px 0 / calc(100% - 12px) 100% no-repeat;
2485
+ }
2486
+
2487
+ /* The frame's curve inside each corner, over the title bar and the content. */
2488
+ .rounded-window::after {
2489
+ content: "";
2490
+ position: absolute;
2491
+ inset: -1px;
2492
+ z-index: 1;
2493
+ background:
2494
+ var(--clio-art-rdoc-frame-tl) left top / 6px 6px no-repeat,
2495
+ var(--clio-art-rdoc-frame-tr) right top / 6px 6px no-repeat,
2496
+ var(--clio-art-rdoc-frame-bl) left bottom / 6px 6px no-repeat,
2497
+ var(--clio-art-rdoc-frame-br) right bottom / 6px 6px no-repeat;
2498
+ pointer-events: none;
2499
+ }
2500
+
2501
+ .rounded-window > .rounded-title {
2502
+ position: relative;
2503
+ display: flex;
2504
+ flex: none;
2505
+ justify-content: center;
2506
+ box-sizing: border-box;
2507
+ height: 18px;
2508
+ padding: 1px 1px 0 18px;
2509
+ border-bottom: 1px solid #000000;
2510
+ background: #000000;
2511
+ color: #ffffff;
2512
+ font-family: var(--clio-font-window-title, var(--clio-font-chrome));
2513
+ user-select: none;
2514
+ -webkit-user-select: none;
2515
+ }
2516
+
2517
+ .rounded-window > .rounded-title > :is(.title, h1, h2, h3) {
2518
+ margin: 0;
2519
+ overflow: hidden;
2520
+ color: inherit;
2521
+ font: inherit;
2522
+ font-size: var(--clio-title-font-size);
2523
+ font-stretch: var(--clio-font-stretch-title);
2524
+ font-weight: var(--clio-chrome-weight);
2525
+ line-height: 16px;
2526
+ text-overflow: ellipsis;
2527
+ white-space: nowrap;
2528
+ }
2529
+
2530
+ .rounded-window > .rounded-title > :is(button.close, .close) {
2531
+ position: absolute;
2532
+ top: 3px;
2533
+ left: 8px;
2534
+ box-sizing: border-box;
2535
+ width: 11px;
2536
+ min-width: 0;
2537
+ height: 11px;
2538
+ min-height: 0;
2539
+ margin: 0;
2540
+ padding: 0;
2541
+ border: 1px solid #ffffff;
2542
+ border-image: none;
2543
+ border-radius: 0;
2544
+ background: transparent;
2545
+ box-shadow: none;
2546
+ font-size: 0;
2547
+ appearance: none;
2548
+ -webkit-appearance: none;
2549
+ cursor: var(--clio-cursor-arrow);
2550
+ }
2551
+
2552
+ .rounded-window > .rounded-title > :is(button.close, .close)::before,
2553
+ .rounded-window > .rounded-title > :is(button.close, .close)::after {
2554
+ content: none;
2555
+ }
2556
+
2557
+ .rounded-window > .rounded-title > :is(button.close, .close):focus-visible {
2558
+ outline: 1px dotted #ffffff;
2559
+ outline-offset: 1px;
2560
+ }
2561
+
2562
+ .rounded-window.inactive > .rounded-title {
2563
+ background: #ffffff;
2564
+ color: #000000;
2565
+ }
2566
+
2567
+ .rounded-window.inactive > .rounded-title > :is(button.close, .close) {
2568
+ visibility: hidden;
2569
+ }
2570
+
2571
+ /* ---- Placard ------------------------------------------------------------------
2572
+ A framed strip for status at the foot of a window, beside the horizontal scroll
2573
+ bar (Mac OS 8 HIG: "Placards"). The control came with the Appearance Manager;
2574
+ before it, the eras draw a 1px frame on the paper (adapted). */
2575
+ :where(.placard) {
2576
+ display: inline-flex;
2577
+ align-items: center;
2578
+ box-sizing: border-box;
2579
+ min-height: 16px;
2580
+ margin: 0;
2581
+ padding: 0 4px;
2582
+ border: 1px solid var(--clio-ink);
2583
+ border-radius: 0;
2584
+ background: var(--clio-paper);
2585
+ box-shadow: none;
2586
+ color: var(--clio-ink);
2587
+ font-family: var(--clio-font-small);
2588
+ font-size: var(--clio-font-size-small, 9px);
2589
+ line-height: 12px;
2590
+ white-space: nowrap;
2591
+ }
2592
+
2593
+ /* ---- Split bar and split line ---------------------------------------------------
2594
+ <div class="split-view"> > .split-bar (above the vertical scroll bar), panes,
2595
+ and a .split-line between two panes. Apple's guidelines (1992) give the split
2596
+ bar as a control 5 pixels high by the width of the scroll bar, at its top, and
2597
+ the split line as two lines with a one-pixel space; BBEdit 5.1 in Mac OS 9 draws
2598
+ it 7 rows high (90-platinum.css). Moving it is the application's: clio.css only
2599
+ draws it. */
2600
+ :where(.split-view) {
2601
+ display: flex;
2602
+ flex-direction: column;
2603
+ min-height: 0;
2604
+ background: var(--clio-split-bg, var(--clio-pane-bg));
2605
+ }
2606
+
2607
+ :where(.split-view) > :where(.split-bar) {
2608
+ align-self: flex-end;
2609
+ }
2610
+
2611
+ :where(.split-bar) {
2612
+ flex: none;
2613
+ box-sizing: border-box;
2614
+ width: var(--clio-scrollbar-size);
2615
+ height: var(--clio-split-bar-height, 5px);
2616
+ background: var(--clio-split-ink, var(--clio-ink));
2617
+ cursor: row-resize;
2618
+ }
2619
+
2620
+ :where(.split-line) {
2621
+ --clio-split-line-1: 1px;
2622
+ flex: none;
2623
+ box-sizing: border-box;
2624
+ height: var(--clio-split-bar-height, 5px);
2625
+ margin: 0;
2626
+ border: 0;
2627
+ background:
2628
+ linear-gradient(var(--clio-split-ink, var(--clio-ink)), var(--clio-split-ink, var(--clio-ink))) right top / var(--clio-scrollbar-size) 100% no-repeat,
2629
+ linear-gradient(var(--clio-split-ink, var(--clio-ink)), var(--clio-split-ink, var(--clio-ink))) 0 var(--clio-split-line-1) / 100% 1px no-repeat,
2630
+ linear-gradient(var(--clio-split-ink, var(--clio-ink)), var(--clio-split-ink, var(--clio-ink))) 0 calc(var(--clio-split-line-1) + 2px) / 100% 1px no-repeat,
2631
+ var(--clio-split-bg, var(--clio-pane-bg));
2632
+ cursor: row-resize;
2633
+ }
2634
+
2635
+ /* Dialogs and alerts.
2636
+ .modal-dialog / .alert-box: the double-framed modal box (dBoxProc).
2637
+ .standard-dialog: the plain box with a drop shadow (altDBoxProc).
2638
+ .modeless-dialog: a movable dialog, which is a .window.
2639
+ Use them on <dialog> or on a <div role="dialog">. system.css's
2640
+ .outer-border / .inner-border wrappers are accepted and draw nothing extra. */
2641
+ :where(.modal-dialog, .alert-box, dialog.modal) {
2642
+ box-sizing: border-box;
2643
+ max-width: 100%;
2644
+ margin: 0;
2645
+ padding: var(--clio-modal-padding);
2646
+ border: var(--clio-modal-border);
2647
+ background: var(--clio-dialog-bg);
2648
+ box-shadow: var(--clio-modal-frame);
2649
+ color: var(--clio-ink);
2650
+ }
2651
+
2652
+ :where(.standard-dialog) {
2653
+ box-sizing: border-box;
2654
+ max-width: 100%;
2655
+ margin: 0;
2656
+ padding: 12px 14px;
2657
+ border: var(--clio-plain-dialog-border);
2658
+ background: var(--clio-dialog-bg);
2659
+ box-shadow: var(--clio-plain-dialog-shadow);
2660
+ color: var(--clio-ink);
2661
+ }
2662
+
2663
+ :where(dialog):is(.modal-dialog, .alert-box, .standard-dialog, .modal)::backdrop {
2664
+ background: transparent;
2665
+ }
2666
+
2667
+ :where(.modal-dialog, .alert-box, .standard-dialog) :where(.outer-border, .inner-border) {
2668
+ padding: 0;
2669
+ border: 0;
2670
+ }
2671
+
2672
+ /* Alert layout: icon on the left, message, buttons bottom-right. */
2673
+ :where(.alert-box) {
2674
+ display: grid;
2675
+ grid-template-columns: auto 1fr;
2676
+ column-gap: 16px;
2677
+ row-gap: 12px;
2678
+ align-items: start;
2679
+ }
2680
+
2681
+ :where(.alert-box) > :where(.alert-icon) {
2682
+ grid-row: 1;
2683
+ width: 32px;
2684
+ height: 32px;
2685
+ }
2686
+
2687
+ :where(.alert-box) > :where(.alert-contents, .modal-contents, p) {
2688
+ grid-column: 2;
2689
+ margin: 0;
2690
+ }
2691
+
2692
+ :where(.alert-box) > :where(.alert-buttons, .dialog-buttons) {
2693
+ grid-column: 1 / -1;
2694
+ }
2695
+
2696
+ :where(.dialog-buttons, .alert-buttons) {
2697
+ display: flex;
2698
+ flex-wrap: wrap;
2699
+ justify-content: flex-end;
2700
+ gap: 12px;
2701
+ margin-top: 12px;
2702
+ }
2703
+
2704
+ /* An alert icon drawn here, not Apple's: a rounded speech box with "!". */
2705
+ :where(.alert-icon.caution, .alert-icon.note, .alert-icon.stop) {
2706
+ display: block;
2707
+ box-sizing: border-box;
2708
+ border: 2px solid var(--clio-ink);
2709
+ border-radius: 6px;
2710
+ background: var(--clio-paper);
2711
+ color: var(--clio-ink);
2712
+ font: 700 22px/28px var(--clio-font-display);
2713
+ text-align: center;
2714
+ }
2715
+
2716
+ :where(.alert-icon.caution)::before { content: "!"; }
2717
+ :where(.alert-icon.note)::before { content: "i"; }
2718
+ :where(.alert-icon.stop) { border-radius: 50%; }
2719
+ :where(.alert-icon.stop)::before { content: "\00D7"; }
2720
+
2721
+ /* Scroll bars, for scroll areas clio.css owns (.window-pane, .listbox,
2722
+ textarea, list-box selects) and for anything you mark with .clio-scroll.
2723
+ Add class="clio-scrollbars" to <html> to give every scroll area the era's
2724
+ scroll bar.
2725
+
2726
+ WebKit/Blink draw the full bar: two arrow boxes, the patterned lane and the
2727
+ scroll box. The scroll box is proportional to the content here (a browser
2728
+ limit), where System 6 drew a fixed 16px square. Firefox has no scroll bar
2729
+ parts, so it gets the era's colours through scrollbar-color. */
2730
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar,
2731
+ :where(html.clio-scrollbars)::-webkit-scrollbar {
2732
+ width: var(--clio-scrollbar-size);
2733
+ height: var(--clio-scrollbar-size);
2734
+ background: var(--clio-paper);
2735
+ }
2736
+
2737
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb {
2738
+ width: var(--clio-scrollbar-size);
2739
+ height: var(--clio-scrollbar-size);
2740
+ background: var(--clio-paper);
2741
+ }
2742
+
2743
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track,
2744
+ :where(html.clio-scrollbars)::-webkit-scrollbar-track {
2745
+ background: var(--clio-scrollbar-track);
2746
+ box-shadow: var(--clio-scrollbar-track-shadow);
2747
+ }
2748
+
2749
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-track {
2750
+ background: var(--clio-scrollbar-track);
2751
+ box-shadow: var(--clio-scrollbar-track-shadow);
2752
+ }
2753
+
2754
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track:vertical,
2755
+ :where(html.clio-scrollbars)::-webkit-scrollbar-track:vertical {
2756
+ border-left: 1px solid var(--clio-ink);
2757
+ }
2758
+
2759
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-v > .clio-sb-track {
2760
+ border-left: 1px solid var(--clio-ink);
2761
+ }
2762
+
2763
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track:horizontal,
2764
+ :where(html.clio-scrollbars)::-webkit-scrollbar-track:horizontal {
2765
+ border-top: 1px solid var(--clio-ink);
2766
+ }
2767
+
2768
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-track {
2769
+ border-top: 1px solid var(--clio-ink);
2770
+ }
2771
+
2772
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb,
2773
+ :where(html.clio-scrollbars)::-webkit-scrollbar-thumb {
2774
+ min-width: var(--clio-scrollbar-size);
2775
+ min-height: var(--clio-scrollbar-size);
2776
+ border: var(--clio-scrollbar-thumb-border);
2777
+ background: var(--clio-scrollbar-thumb-bg);
2778
+ box-shadow: var(--clio-scrollbar-thumb-shadow);
2779
+ }
2780
+
2781
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-thumb {
2782
+ min-width: var(--clio-scrollbar-size);
2783
+ min-height: var(--clio-scrollbar-size);
2784
+ border: var(--clio-scrollbar-thumb-border);
2785
+ background: var(--clio-scrollbar-thumb-bg);
2786
+ box-shadow: var(--clio-scrollbar-thumb-shadow);
2787
+ }
2788
+
2789
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb:horizontal,
2790
+ :where(html.clio-scrollbars)::-webkit-scrollbar-thumb:horizontal {
2791
+ background: var(--clio-scrollbar-thumb-bg-horizontal, var(--clio-scrollbar-thumb-bg));
2792
+ box-shadow: var(--clio-scrollbar-thumb-shadow-horizontal, var(--clio-scrollbar-thumb-shadow));
2793
+ }
2794
+
2795
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-thumb {
2796
+ background: var(--clio-scrollbar-thumb-bg-horizontal, var(--clio-scrollbar-thumb-bg));
2797
+ box-shadow: var(--clio-scrollbar-thumb-shadow-horizontal, var(--clio-scrollbar-thumb-shadow));
2798
+ }
2799
+
2800
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:start:decrement,
2801
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:end:increment,
2802
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:start:decrement,
2803
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:end:increment {
2804
+ display: block;
2805
+ width: var(--clio-scrollbar-size);
2806
+ height: var(--clio-scrollbar-size);
2807
+ background-color: var(--clio-scrollbar-button-bg);
2808
+ background-position: center;
2809
+ background-repeat: no-repeat;
2810
+ box-shadow: var(--clio-scrollbar-button-shadow);
2811
+ }
2812
+
2813
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-button:not(.clio-sb-never).clio-sb-dec,
2814
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-button:not(.clio-sb-never).clio-sb-inc {
2815
+ display: block;
2816
+ width: var(--clio-scrollbar-size);
2817
+ height: var(--clio-scrollbar-size);
2818
+ background-color: var(--clio-scrollbar-button-bg);
2819
+ background-position: center;
2820
+ background-repeat: no-repeat;
2821
+ box-shadow: var(--clio-scrollbar-button-shadow);
2822
+ }
2823
+
2824
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:decrement,
2825
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:decrement {
2826
+ border-left: 1px solid var(--clio-ink);
2827
+ border-bottom: 1px solid var(--clio-ink);
2828
+ background-image: var(--clio-scrollbar-up), var(--clio-scrollbar-button-bevel);
2829
+ }
2830
+
2831
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-v > .clio-sb-button.clio-sb-dec {
2832
+ border-left: 1px solid var(--clio-ink);
2833
+ border-bottom: 1px solid var(--clio-ink);
2834
+ background-image: var(--clio-scrollbar-up), var(--clio-scrollbar-button-bevel);
2835
+ }
2836
+
2837
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:increment,
2838
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:increment {
2839
+ border-left: 1px solid var(--clio-ink);
2840
+ border-top: 1px solid var(--clio-ink);
2841
+ background-image: var(--clio-scrollbar-down), var(--clio-scrollbar-button-bevel);
2842
+ }
2843
+
2844
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-v > .clio-sb-button.clio-sb-inc {
2845
+ border-left: 1px solid var(--clio-ink);
2846
+ border-top: 1px solid var(--clio-ink);
2847
+ background-image: var(--clio-scrollbar-down), var(--clio-scrollbar-button-bevel);
2848
+ }
2849
+
2850
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:decrement,
2851
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:decrement {
2852
+ border-top: 1px solid var(--clio-ink);
2853
+ border-right: 1px solid var(--clio-ink);
2854
+ background-image: var(--clio-scrollbar-left), var(--clio-scrollbar-button-bevel);
2855
+ }
2856
+
2857
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-button.clio-sb-dec {
2858
+ border-top: 1px solid var(--clio-ink);
2859
+ border-right: 1px solid var(--clio-ink);
2860
+ background-image: var(--clio-scrollbar-left), var(--clio-scrollbar-button-bevel);
2861
+ }
2862
+
2863
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:increment,
2864
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:increment {
2865
+ border-top: 1px solid var(--clio-ink);
2866
+ border-left: 1px solid var(--clio-ink);
2867
+ background-image: var(--clio-scrollbar-right), var(--clio-scrollbar-button-bevel);
2868
+ }
2869
+
2870
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-button.clio-sb-inc {
2871
+ border-top: 1px solid var(--clio-ink);
2872
+ border-left: 1px solid var(--clio-ink);
2873
+ background-image: var(--clio-scrollbar-right), var(--clio-scrollbar-button-bevel);
2874
+ }
2875
+
2876
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:decrement:active,
2877
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:decrement:active {
2878
+ background-image: var(--clio-scrollbar-up-on), var(--clio-scrollbar-button-bevel-on, none);
2879
+ }
2880
+
2881
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-v > .clio-sb-button.clio-sb-dec.clio-held {
2882
+ background-image: var(--clio-scrollbar-up-on), var(--clio-scrollbar-button-bevel-on, none);
2883
+ }
2884
+
2885
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:increment:active,
2886
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:increment:active {
2887
+ background-image: var(--clio-scrollbar-down-on), var(--clio-scrollbar-button-bevel-on, none);
2888
+ }
2889
+
2890
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-v > .clio-sb-button.clio-sb-inc.clio-held {
2891
+ background-image: var(--clio-scrollbar-down-on), var(--clio-scrollbar-button-bevel-on, none);
1724
2892
  }
1725
2893
 
1726
2894
  :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:decrement:active,
1727
2895
  :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:decrement:active {
1728
- background-image: var(--clio-scrollbar-left-on);
2896
+ background-image: var(--clio-scrollbar-left-on), var(--clio-scrollbar-button-bevel-on, none);
2897
+ }
2898
+
2899
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-button.clio-sb-dec.clio-held {
2900
+ background-image: var(--clio-scrollbar-left-on), var(--clio-scrollbar-button-bevel-on, none);
2901
+ }
2902
+
2903
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:increment:active,
2904
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:increment:active {
2905
+ background-image: var(--clio-scrollbar-right-on), var(--clio-scrollbar-button-bevel-on, none);
2906
+ }
2907
+
2908
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-button.clio-sb-inc.clio-held {
2909
+ background-image: var(--clio-scrollbar-right-on), var(--clio-scrollbar-button-bevel-on, none);
2910
+ }
2911
+
2912
+ /* Only the single arrow box at each end, as on the Mac. */
2913
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:start:increment,
2914
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:end:decrement,
2915
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:start:increment,
2916
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:end:decrement {
2917
+ display: none;
2918
+ }
2919
+
2920
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-corner,
2921
+ :where(html.clio-scrollbars)::-webkit-scrollbar-corner {
2922
+ border-top: 1px solid var(--clio-ink);
2923
+ border-left: 1px solid var(--clio-ink);
2924
+ background: var(--clio-scrollbar-corner);
2925
+ }
2926
+
2927
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb-corner {
2928
+ border-top: 1px solid var(--clio-ink);
2929
+ border-left: 1px solid var(--clio-ink);
2930
+ background: var(--clio-scrollbar-corner);
2931
+ }
2932
+
2933
+ @supports not selector(::-webkit-scrollbar) {
2934
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, html.clio-scrollbars, .clio-scrollbars *) {
2935
+ scrollbar-color: var(--clio-scrollbar-thumb-color, var(--clio-ink)) var(--clio-scrollbar-track-color, #c0c0c0);
2936
+ }
2937
+ }
2938
+
2939
+ /* Scroll bars drawn by clio.js (optional): the same parts as the browser's
2940
+ scroll bar, as elements, so the scroll box keeps its era's fixed length, an
2941
+ arrow repeats while held and a dragged box can leave an outline behind.
2942
+ The parts take every ::-webkit-scrollbar rule (the build copies each one onto
2943
+ .clio-sb-*); this file only places them. clio.js sets each bar's geometry. */
2944
+ .clio-sb-host {
2945
+ box-sizing: border-box; /* the bar comes out of the box, as the browser's does (everything in a clio.css window already is) */
2946
+ scrollbar-width: none;
2947
+ }
2948
+
2949
+ .clio-sb-host::-webkit-scrollbar {
2950
+ display: none;
2951
+ }
2952
+
2953
+ /* The bar sits in the scroller's padding, which grows by the bar's width. */
2954
+ .clio-sb-host.clio-sb-y {
2955
+ padding-right: calc(var(--clio-sb-pr, 0px) + var(--clio-scrollbar-size));
2956
+ }
2957
+
2958
+ .clio-sb-host.clio-sb-x {
2959
+ padding-bottom: calc(var(--clio-sb-pb, 0px) + var(--clio-scrollbar-size));
2960
+ }
2961
+
2962
+ /* A zero-size first child that sticks to the scroller's corner, so the bars
2963
+ inside it stay put while the content moves. */
2964
+ .clio-sb-anchor {
2965
+ position: sticky;
2966
+ top: var(--clio-sb-pt, 0px);
2967
+ left: var(--clio-sb-pl, 0px);
2968
+ z-index: 2;
2969
+ display: block;
2970
+ width: 0;
2971
+ height: 0;
2972
+ margin: 0;
2973
+ padding: 0;
2974
+ border: 0;
2975
+ float: none;
2976
+ }
2977
+
2978
+ .clio-sb-anchor > :is(.clio-sb, .clio-sb-corner) {
2979
+ position: absolute;
2980
+ box-sizing: border-box;
2981
+ overflow: hidden;
2982
+ user-select: none;
2983
+ -webkit-user-select: none;
2984
+ touch-action: none;
2985
+ }
2986
+
2987
+ .clio-sb-anchor > .clio-sb > * {
2988
+ position: absolute;
2989
+ box-sizing: border-box;
2990
+ margin: 0;
2991
+ }
2992
+
2993
+ .clio-sb-anchor > .clio-sb-v > .clio-sb-dec { top: 0; left: 0; }
2994
+ .clio-sb-anchor > .clio-sb-v > .clio-sb-inc { bottom: 0; left: 0; }
2995
+ .clio-sb-anchor > .clio-sb-v > .clio-sb-track { top: var(--clio-scrollbar-size); bottom: var(--clio-scrollbar-size); left: 0; right: 0; }
2996
+ .clio-sb-anchor > .clio-sb-v > .clio-sb-thumb { top: var(--clio-scrollbar-size); left: var(--clio-scrollbar-thumb-inset, 0px); right: 0; min-width: 0; } /* the bar's min-width is the box's length */
2997
+ .clio-sb-anchor > .clio-sb-h > .clio-sb-dec { left: 0; top: 0; }
2998
+ .clio-sb-anchor > .clio-sb-h > .clio-sb-inc { right: 0; top: 0; }
2999
+ .clio-sb-anchor > .clio-sb-h > .clio-sb-track { left: var(--clio-scrollbar-size); right: var(--clio-scrollbar-size); top: 0; bottom: 0; }
3000
+ .clio-sb-anchor > .clio-sb-h > .clio-sb-thumb { left: var(--clio-scrollbar-size); top: var(--clio-scrollbar-thumb-inset, 0px); bottom: 0; min-height: 0; }
3001
+
3002
+ /* Smart Scrolling (Mac OS 8/9, Appearance > Options): both arrows at the far
3003
+ end, the up or left arrow first. */
3004
+ .clio-sb-anchor > .clio-sb-v.clio-sb-smart > .clio-sb-dec { top: auto; bottom: var(--clio-scrollbar-size); }
3005
+ .clio-sb-anchor > .clio-sb-v.clio-sb-smart > .clio-sb-track { top: 0; bottom: calc(2 * var(--clio-scrollbar-size)); }
3006
+ .clio-sb-anchor > .clio-sb-v.clio-sb-smart > .clio-sb-thumb { top: 0; }
3007
+ .clio-sb-anchor > .clio-sb-h.clio-sb-smart > .clio-sb-dec { left: auto; right: var(--clio-scrollbar-size); }
3008
+ .clio-sb-anchor > .clio-sb-h.clio-sb-smart > .clio-sb-track { left: 0; right: calc(2 * var(--clio-scrollbar-size)); }
3009
+ .clio-sb-anchor > .clio-sb-h.clio-sb-smart > .clio-sb-thumb { left: 0; }
3010
+
3011
+ /* QuickDraw kept a lane's pattern in step with the screen (System 6.0.8, System
3012
+ 7.5.3): clio.js sets --clio-sb-px/-py on each bar to keep it in step with the
3013
+ page. A rule, not a token: the offsets belong to each bar. Eras whose tracks
3014
+ have their own rules (Drawing Board) place their layers themselves. */
3015
+ .clio-sb-anchor > .clio-sb > .clio-sb-track {
3016
+ background-position: var(--clio-sb-px, 0px) var(--clio-sb-py, 0px);
3017
+ }
3018
+
3019
+ /* The arrows lie over the box's ends and its shadow. */
3020
+ .clio-sb-anchor > .clio-sb > .clio-sb-button { z-index: 1; }
3021
+
3022
+ /* Mac OS 8/9: the lane's top shading also falls just past the box's far end
3023
+ (--clio-scrollbar-thumb-after, drawn only by clio.js's bars). */
3024
+ .clio-sb-anchor > .clio-sb > .clio-sb-thumb::after {
3025
+ content: "";
3026
+ position: absolute;
3027
+ background: var(--clio-scrollbar-thumb-after, none);
3028
+ }
3029
+
3030
+ .clio-sb-anchor > .clio-sb-v > .clio-sb-thumb::after { top: calc(100% + 1px); left: 0; right: 0; height: 2px; } /* past the box's end line */
3031
+ .clio-sb-anchor > .clio-sb-h > .clio-sb-thumb::after { left: calc(100% + 1px); top: 0; bottom: 0; width: 2px; }
3032
+
3033
+ /* Nothing to scroll: the lane stays, the box goes (as on the Mac). */
3034
+ .clio-sb-anchor > .clio-sb.clio-sb-off > .clio-sb-thumb {
3035
+ display: none;
1729
3036
  }
1730
3037
 
1731
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:increment:active,
1732
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:increment:active {
1733
- background-image: var(--clio-scrollbar-right-on);
3038
+ /* The outline a dragged scroll box leaves in System 6 and 7: the box's frame,
3039
+ drawn over the lane, until the button comes up. */
3040
+ .clio-sb-anchor > .clio-sb > .clio-sb-ghost {
3041
+ z-index: 1;
3042
+ padding: 1px;
3043
+ background: var(--clio-scrollbar-ghost, #000000);
3044
+ background-position: calc(var(--clio-sb-px, 0px) + var(--clio-sb-gx, 0px)) calc(var(--clio-sb-py, 0px) + var(--clio-sb-gy, 0px)); /* in step with the lane's pattern */
3045
+ mix-blend-mode: var(--clio-scrollbar-ghost-blend, normal);
3046
+ mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
3047
+ pointer-events: none;
1734
3048
  }
1735
3049
 
1736
- /* Only the single arrow box at each end, as on the Mac. */
1737
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:start:increment,
1738
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:end:decrement,
1739
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:start:increment,
1740
- :where(html.clio-scrollbars)::-webkit-scrollbar-button:end:decrement {
1741
- display: none;
3050
+ /* clio.js outlines (a dragged window, zoom rects): QuickDraw's grey pattern,
3051
+ inverting what lies under it, in step with the screen. */
3052
+ .clio-outline {
3053
+ /* The outline is the frame of the window's structure region (QuickDraw's
3054
+ InsetRgn, rows and columns apart): the frame and its 1px shadow, which starts
3055
+ --clio-drag-outline-shadow-inset in from the top-right and bottom-left corners,
3056
+ so the region and the band step in there (all measured). e, k, w below. */
3057
+ --e: var(--clio-drag-outline-extra, 0px);
3058
+ --k: var(--clio-drag-outline-shadow-inset, 1px);
3059
+ --w: var(--clio-drag-outline-width, 1px);
3060
+ position: fixed;
3061
+ z-index: 2147483000;
3062
+ box-sizing: border-box;
3063
+ margin: 0;
3064
+ /* gray inverts the pixels whose x + y is odd on the screen (System 6.0.8, 7.5.3
3065
+ and Mac OS 9.0, measured); clio.js sets the position that keeps it to the page */
3066
+ background: repeating-conic-gradient(#ffffff 0 25%, transparent 0 50%) 0 0 / 2px 2px;
3067
+ mix-blend-mode: difference;
3068
+ /* the band (box less content box), the region's two notches taken out and the
3069
+ two pieces of the inset region they remove put back: every piece lies wholly
3070
+ in or out of what is below it, so xor does each */
3071
+ mask:
3072
+ linear-gradient(#000 0 0) left 0 bottom 0 / var(--k) var(--e) no-repeat border-box exclude,
3073
+ linear-gradient(#000 0 0) right 0 top 0 / var(--e) var(--k) no-repeat border-box exclude,
3074
+ linear-gradient(#000 0 0) left var(--w) bottom var(--w) / var(--k) var(--e) no-repeat border-box exclude,
3075
+ linear-gradient(#000 0 0) right var(--w) top var(--w) / var(--e) var(--k) no-repeat border-box exclude,
3076
+ linear-gradient(#000 0 0) content-box exclude,
3077
+ linear-gradient(#000 0 0) border-box;
3078
+ pointer-events: none;
3079
+ image-rendering: pixelated;
1742
3080
  }
1743
3081
 
1744
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-corner,
1745
- :where(html.clio-scrollbars)::-webkit-scrollbar-corner {
1746
- border-top: 1px solid var(--clio-ink);
1747
- border-left: 1px solid var(--clio-ink);
1748
- background: var(--clio-scrollbar-corner);
3082
+ /* clio.js: the move button of a movable window and the live region. Out of
3083
+ sight but in reach; with keyboard focus the title bar shows the ring. */
3084
+ :is(.clio-move, .clio-live) {
3085
+ /* !important: the title bar's own button rules (the close box's art and
3086
+ place) must not reach it */
3087
+ position: absolute !important;
3088
+ width: 1px !important;
3089
+ height: 1px !important;
3090
+ margin: -1px !important;
3091
+ padding: 0 !important;
3092
+ overflow: hidden !important;
3093
+ clip-path: inset(50%) !important;
3094
+ white-space: nowrap !important;
3095
+ border: 0 !important;
3096
+ background: none !important;
3097
+ box-shadow: none !important;
3098
+ }
3099
+
3100
+ .title-bar:has(> .clio-move:focus-visible) {
3101
+ outline: var(--clio-focus-outline);
3102
+ outline-offset: -1px;
1749
3103
  }
1750
3104
 
1751
- @supports not selector(::-webkit-scrollbar) {
1752
- :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, html.clio-scrollbars, .clio-scrollbars *) {
1753
- scrollbar-color: var(--clio-scrollbar-thumb-color, var(--clio-ink)) var(--clio-scrollbar-track-color, #c0c0c0);
3105
+
3106
+ /* clio.js: a movable window's title bar takes a finger's drag itself (on a
3107
+ touch screen the browser would otherwise pan the page and cancel the drag). */
3108
+ .clio-drag-bar {
3109
+ touch-action: none;
3110
+ }
3111
+
3112
+ /* ---- clio.js: the insertion point --------------------------------------------
3113
+ TextEdit inverted a 1px line for its caret, as tall as the line: white in a
3114
+ difference blend inverts what is under it the same way. The field's own caret
3115
+ is hidden only while clio.js draws this one. */
3116
+ .clio-caret {
3117
+ position: absolute;
3118
+ z-index: 2147483646;
3119
+ width: 1px;
3120
+ background: #ffffff;
3121
+ mix-blend-mode: difference;
3122
+ pointer-events: none;
3123
+ }
3124
+
3125
+ .clio-caret-off,
3126
+ .clio-caret[hidden] {
3127
+ visibility: hidden;
3128
+ }
3129
+
3130
+ .clio-caret-field {
3131
+ caret-color: transparent;
3132
+ }
3133
+
3134
+ /* Forced colours repaint the line and may drop the blend: the system's caret instead. */
3135
+ @media (forced-colors: active) {
3136
+ .clio-caret {
3137
+ display: none;
3138
+ }
3139
+
3140
+ .clio-caret-field {
3141
+ caret-color: auto;
1754
3142
  }
1755
3143
  }
1756
3144
 
@@ -1814,7 +3202,7 @@
1814
3202
  border-radius: 0;
1815
3203
  appearance: none;
1816
3204
  -webkit-appearance: none;
1817
- cursor: default;
3205
+ cursor: var(--clio-cursor-arrow);
1818
3206
  }
1819
3207
 
1820
3208
  /* Scroll arrows: 13px cells, sunken and hollow while there is nothing to scroll. */
@@ -1843,8 +3231,8 @@
1843
3231
  background-image: var(--clio-strip-forward);
1844
3232
  }
1845
3233
 
1846
- :where(.control-strip) > .control-strip-scroll:not(:disabled):active,
1847
- :where(.control-strip-module):not(:disabled):is(:active, [aria-expanded="true"]) {
3234
+ :where(.control-strip) > .control-strip-scroll:not(:disabled):active:where(:not([data-clio-off])),
3235
+ :where(.control-strip-module):not(:disabled):is(:active:where(:not([data-clio-off])), [aria-expanded="true"]) {
1848
3236
  background-color: var(--clio-strip-pressed-bg);
1849
3237
  box-shadow: var(--clio-strip-pressed-shadow);
1850
3238
  }
@@ -1878,7 +3266,7 @@
1878
3266
  color: var(--clio-ink);
1879
3267
  appearance: none;
1880
3268
  -webkit-appearance: none;
1881
- cursor: default;
3269
+ cursor: var(--clio-cursor-arrow);
1882
3270
  }
1883
3271
 
1884
3272
  :where(.control-strip-module) > :is(svg, img, .sys-icon) {
@@ -1944,11 +3332,21 @@
1944
3332
  (GUIdebook, Infinite Mac). P-numbers in comments are AI System 6's patch
1945
3333
  ids; see EVIDENCE.md. */
1946
3334
  :root {
3335
+ /* A raised edge: white along the top and left, #999 along the bottom and
3336
+ right, the two other corners left to the face (windows, pop-up menus). */
3337
+ --clio-p9-bevel:
3338
+ linear-gradient(#ffffff, #ffffff) 0 0 / calc(100% - 1px) 1px no-repeat,
3339
+ linear-gradient(#ffffff, #ffffff) 0 0 / 1px calc(100% - 1px) no-repeat,
3340
+ linear-gradient(#999999, #999999) 1px 100% / calc(100% - 1px) 1px no-repeat,
3341
+ linear-gradient(#999999, #999999) 100% 1px / 1px calc(100% - 1px) no-repeat;
1947
3342
  --clio-ink: #000000;
1948
3343
  --clio-paper: #dddddd;
1949
3344
  --clio-face: #dddddd;
1950
3345
  --clio-disabled: #6f6f6f;
1951
3346
  --clio-disabled-dither: none;
3347
+ --clio-popup-disabled-mask: none;
3348
+ --clio-caret-ticks: 48; /* Mac OS 9.0 General Controls' middle setting: about 795 ms (measured) */
3349
+ --clio-popup-disabled-fg: var(--clio-disabled);
1952
3350
  /* Push button, disabled button and default ring: the real pixel frames
1953
3351
  (tooling/frame-art.py: Mac OS 9.0 Appearance and GUIdebook's Mac OS 9.0). */
1954
3352
  --clio-button-frame: var(--clio-art-frame-p9-button);
@@ -1968,10 +3366,44 @@
1968
3366
  --clio-font-display: Charcoal, "Charcoal CY", "Clio Sans '97 Display", "Clio Asap", "Helvetica Neue", Arial, sans-serif;
1969
3367
  --clio-font-window-title: Charcoal, "Charcoal CY", "Clio Sans '97 Title Exact", "Clio Sans '97 Title", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
1970
3368
  --clio-font-button: Charcoal, "Charcoal CY", "Clio Sans '97 Exact", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
3369
+ /* List view (Finder, Mac OS 9.0): 21px bevelled headers, the sorted one sunk
3370
+ dark; the sorted column's rows #ddd, the others #eee, 19px rows. Drawn
3371
+ with background lines (List view rules), not tokens alone. */
3372
+ --clio-list-view-bg: #eeeeee;
3373
+ --clio-list-view-row: 19px;
3374
+ --clio-list-view-header-height: 21px;
3375
+ --clio-list-view-header-padding: 3px 4px 0;
3376
+ --clio-list-view-sorted-decoration: none;
3377
+ --clio-list-view-sorted-bg: #dddddd;
3378
+ --clio-list-view-sort-width: 15px;
3379
+ /* Separator (Mouse control panel, Mac OS 9.0): etched, #888 then white one
3380
+ row lower and one column further right. */
3381
+ --clio-separator-height: 2px;
3382
+ --clio-separator-bg: linear-gradient(#888888, #888888) 0 0 / calc(100% - 1px) 1px no-repeat, linear-gradient(#ffffff, #ffffff) 1px 1px / calc(100% - 1px) 1px no-repeat;
3383
+ /* Keyboard focus on a field or list: a 2px ring of the highlight colour's
3384
+ dark (#6666cc for Purple), its outer corners left out (Date & Time). */
3385
+ --clio-focus-ring-colour: #6666cc;
3386
+ --clio-focus-ring: 0 -1px 0 1px var(--clio-focus-ring-colour), 0 1px 0 1px var(--clio-focus-ring-colour), -1px 0 0 1px var(--clio-focus-ring-colour), 1px 0 0 1px var(--clio-focus-ring-colour);
3387
+ --clio-field-focus-shadow: var(--clio-focus-ring);
3388
+ --clio-field-focus-outline: none;
3389
+ --clio-list-focus-shadow: var(--clio-focus-ring);
3390
+ /* Little arrows (Date & Time, Mac OS 9.0): 13x23; dimmed while their field is
3391
+ not being edited. Held states were under the pointer and keep the normal. */
3392
+ --clio-little-arrows-width: 13px;
3393
+ --clio-little-arrows-height: 23px;
3394
+ --clio-art-little-arrows: url("art/platinum/little-arrows.png");
3395
+ --clio-art-little-arrows-up: url("art/platinum/little-arrows.png");
3396
+ --clio-art-little-arrows-down: url("art/platinum/little-arrows.png");
3397
+ --clio-art-little-arrows-disabled: url("art/platinum/little-arrows-disabled.png");
3398
+ /* Disclosure triangle: 13px with its shadow (Finder list view, Mac OS 9.0). */
3399
+ --clio-disclosure-size: 13px;
3400
+ --clio-art-disclosure: url("art/platinum/disclosure.png");
3401
+ --clio-art-disclosure-open: url("art/platinum/disclosure-open.png");
1971
3402
  --clio-font-text: Geneva, "Clio Asap", "Helvetica Neue", Arial, sans-serif;
1972
3403
  --clio-font-size: 12px;
1973
3404
  --clio-font-smoothing: none;
1974
3405
  --clio-text-smoothing: auto;
3406
+ --clio-text-smoothing-moz: auto;
1975
3407
  --clio-font-small: var(--clio-font-text);
1976
3408
  --clio-font-size-small: 10px;
1977
3409
  --clio-chrome-weight: 700;
@@ -2082,7 +3514,6 @@
2082
3514
  --clio-field-border: 1px solid #000000;
2083
3515
  --clio-field-shadow: -1px -1px 0 #888888, 1px 1px 0 #ffffff;
2084
3516
  --clio-field-padding: 2px 3px;
2085
- --clio-field-focus-shadow: -1px -1px 0 #888888, 1px 1px 0 #ffffff;
2086
3517
 
2087
3518
  /* Pop-up menus, measured from Mac OS 9.0 (Appearance tab, "Apple platinum"):
2088
3519
  20px, black frame, #ddd face with a white top line and #aaa foot; a #aaa
@@ -2110,15 +3541,61 @@
2110
3541
  linear-gradient(#aaaaaa, #aaaaaa) left 0 bottom 0 / calc(100% - 21px) 1px no-repeat;
2111
3542
 
2112
3543
  /* Scroll bars (P16, P17, P27) */
2113
- --clio-scrollbar-size: 16px;
3544
+ --clio-scrollbar-size: 15px;
3545
+ /* Mac OS 9.0 Finder (frames hig/platinum9/finder-*): a 15-row box between
3546
+ black lines, dragged live; the bar is its black line and 14px, the window's
3547
+ frame closing it. The arrow boxes' light and shade stop a pixel short of
3548
+ the far corners. */
3549
+ --clio-scrollbar-thumb-length: 17px;
3550
+ --clio-scrollbar-thumb-inset: 0px;
3551
+ --clio-scrollbar-thumb-overlap: 1px;
3552
+ --clio-scrollbar-thumb-after:
3553
+ linear-gradient(#cccccc, #cccccc) 100% 0 / 1px 2px no-repeat,
3554
+ linear-gradient(#bbbbbb, #bbbbbb) calc(100% - 1px) 1px / 1px 1px no-repeat,
3555
+ linear-gradient(#777777, #777777) 0 0 / 100% 1px no-repeat,
3556
+ linear-gradient(#777777, #777777) 0 0 / 1px 2px no-repeat,
3557
+ #888888;
3558
+ --clio-scrollbar-button-bevel: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath fill='%23fff' d='M0 0h13v1H0zM0 1h1v12H0z'/%3E%3Cpath fill='%23bbb' d='M1 13h13v1H1zM13 1h1v12h-1z'/%3E%3C/svg%3E");
3559
+ /* held: #555 along the top and left, #999 along the bottom and right, the two
3560
+ other corners left the face's #777 (Mac OS 9.0 Finder, frame arrow-held) */
3561
+ --clio-scrollbar-button-bevel-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath fill='%23555' d='M0 0h13v1H0zM0 1h1v12H0z'/%3E%3Cpath fill='%23999' d='M1 13h13v1H1zM13 1h1v12h-1z'/%3E%3C/svg%3E");
3562
+ --clio-scrollbar-thumb-tracking: live;
3563
+ --clio-scrollbar-repeat-delay: 200ms; /* Mac OS 9.0 Finder: one step, then a pause of about 0.2 s */
3564
+ /* Mac OS 8 and 9 keep a clicked menu open (clio.js) */
3565
+ --clio-menu-sticky: 1;
3566
+ --clio-drag-outline-width: 2px; /* Mac OS 9.0: a 2px band */
3567
+ --clio-drag-outline-shadow-inset: 2px; /* the shadow starts 2px in from the corners */
3568
+ /* Zoom rects (Mac OS 9.0 opening Games, measured): 6 outlines in the 2px band at
3569
+ 1.4^(k - 7) of the way, all on screen until the window draws */
3570
+ --clio-zoom-count: 6;
3571
+ --clio-zoom-steps: 7;
3572
+ --clio-zoom-ratio: 1.4;
3573
+ --clio-zoom-offset: 0;
3574
+ --clio-zoom-keep: 0;
2114
3575
  --clio-scrollbar-track: #aaaaaa;
2115
- --clio-scrollbar-track-shadow: inset 1px 1px #777777, inset 2px 2px #888888, inset -1px -1px #cccccc, inset -2px -2px #bbbbbb;
2116
- --clio-scrollbar-thumb-bg: var(--clio-art-p-grip-v) center / 8px 8px no-repeat, #9999ff;
2117
- --clio-scrollbar-thumb-bg-horizontal: var(--clio-art-p-grip-h) center / 8px 8px no-repeat, #9999ff;
3576
+ /* The lane: #777 and #888 along the top and left, #bbb and #ccc down the
3577
+ right, nothing along the bottom (frames finder-scroll-*). */
3578
+ --clio-scrollbar-track-shadow: inset -1px 0 #cccccc, inset 1px 1px #777777, inset -2px 0 #bbbbbb, inset 2px 2px #888888;
3579
+ /* The box: light and shade a pixel short of the far corners, a #eee corner;
3580
+ the grip rounds up and left, as QuickDraw's halving does. */
3581
+ --clio-scrollbar-thumb-bg: var(--clio-art-p-grip-v) 50% calc(50% - 0.5px) / 8px 8px no-repeat,
3582
+ linear-gradient(#eeeeee, #eeeeee) 0 0 / 1px 1px no-repeat,
3583
+ linear-gradient(#ccccff, #ccccff) 1px 0 / calc(100% - 2px) 1px no-repeat,
3584
+ linear-gradient(#ccccff, #ccccff) 0 1px / 1px calc(100% - 2px) no-repeat,
3585
+ linear-gradient(#6666cc, #6666cc) 100% 1px / 1px calc(100% - 1px) no-repeat,
3586
+ linear-gradient(#6666cc, #6666cc) 1px 100% / calc(100% - 1px) 1px no-repeat,
3587
+ #9999ff;
3588
+ --clio-scrollbar-thumb-bg-horizontal: var(--clio-art-p-grip-h) calc(50% - 0.5px) 50% / 8px 8px no-repeat,
3589
+ linear-gradient(#eeeeee, #eeeeee) 0 0 / 1px 1px no-repeat,
3590
+ linear-gradient(#ccccff, #ccccff) 1px 0 / calc(100% - 2px) 1px no-repeat,
3591
+ linear-gradient(#ccccff, #ccccff) 0 1px / 1px calc(100% - 2px) no-repeat,
3592
+ linear-gradient(#6666cc, #6666cc) 100% 1px / 1px calc(100% - 1px) no-repeat,
3593
+ linear-gradient(#6666cc, #6666cc) 1px 100% / calc(100% - 1px) 1px no-repeat,
3594
+ #9999ff;
2118
3595
  --clio-scrollbar-thumb-border: 1px solid #000000;
2119
- --clio-scrollbar-thumb-shadow: inset 1px 1px #ccccff, inset -1px -1px #6666cc;
3596
+ --clio-scrollbar-thumb-shadow: none;
2120
3597
  --clio-scrollbar-button-bg: #dddddd;
2121
- --clio-scrollbar-button-shadow: inset 1px 1px #ffffff, inset -1px -1px #bbbbbb;
3598
+ --clio-scrollbar-button-shadow: none;
2122
3599
  --clio-scrollbar-up: var(--clio-art-p-up);
2123
3600
  --clio-scrollbar-up-on: var(--clio-art-p-up);
2124
3601
  --clio-scrollbar-down: var(--clio-art-p-down);
@@ -2234,7 +3711,8 @@
2234
3711
  --clio-art-p9-submenu-on: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAYAAAALAQMAAABmnG7VAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAB9JREFUeJxjaGA4wPCA4QPDD4Y/TH+YfjB9YHrAdAAAZSIJk3jnGdQAAAAASUVORK5CYII=");
2235
3712
  --clio-art-p9-dropdown: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAKAQMAAABCAtZOAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABlJREFUeJxjEGDSYHJh+McAAv8YahgsGAQAHygDQTD2iPAAAAAASUVORK5CYII=");
2236
3713
  --clio-art-p9-dropdown-off: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAKAQMAAABCAtZOAAAABlBMVEUAAACIiIhaeOqmAAAAAXRSTlMAQObYZgAAABlJREFUeJxjEGDSYHJh+McAAv8YahgsGAQAHygDQTD2iPAAAAAASUVORK5CYII=");
2237
- --clio-art-p9-menucheck: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAICAYAAAArzdW1AAAAP0lEQVR42mNgIAyMiFHwnxgFK2ECLgwMDKFYFJxB1nUGKmiEpOAOAwODALKilVCJ/7gUwMAdQgoYoBIrsSkAAK+iEhBS63EWAAAAAElFTkSuQmCC");
3714
+ --clio-art-p9-menucheck: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAATUlEQVR42o3MwQ2AIBAEwIkdaC2UYAsWZw2UIjXQCn4gIcSA+7ydPeYJuGFboAfH6lNB7I8nrg+UxnWqRehQxj7CWMsyQy35D1LLOEMvsWESqM0p+dQAAAAASUVORK5CYII="); /* 10x8 */
3715
+ --clio-art-p9-popup-open-arrows: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAASBAMAAABLIvhaAAAAGFBMVEUAAAAAAABERERVVVVmZmZ3d3eIiIj////aSdSVAAAAAXRSTlMAQObYZgAAAFdJREFUeJxVjtENgDAIRF8LC7iCE3QCB3YXk07iBiRGaKmS+3i54whlZ8yt26ByLKTOnMCWKJLYwq4gLlCw61OLUZAGb1DBXLHQ6RPNzai5+buwPkvkfAD7IAw5cOa/LwAAAABJRU5ErkJggg=="); /* 19x18 */
2238
3716
  }
2239
3717
 
2240
3718
  /* ---- Window ---------------------------------------------------------------- */
@@ -2242,10 +3720,7 @@
2242
3720
  right and bottom (GUIdebook Appearance window, x=4 and x=width-5). */
2243
3721
  :root .window:not(.inactive) {
2244
3722
  background:
2245
- linear-gradient(#ffffff, #ffffff) 0 0 / calc(100% - 1px) 1px no-repeat,
2246
- linear-gradient(#ffffff, #ffffff) 0 0 / 1px calc(100% - 1px) no-repeat,
2247
- linear-gradient(#999999, #999999) 1px 100% / calc(100% - 1px) 1px no-repeat,
2248
- linear-gradient(#999999, #999999) 100% 1px / 1px calc(100% - 1px) no-repeat,
3723
+ var(--clio-p9-bevel),
2249
3724
  linear-gradient(#999999, #999999) 3px 19px / 1px calc(100% - 22px) no-repeat,
2250
3725
  linear-gradient(#ffffff, #ffffff) right 3px top 20px / 1px calc(100% - 23px) no-repeat,
2251
3726
  linear-gradient(#ffffff, #ffffff) left 3px bottom 3px / calc(100% - 6px) 1px no-repeat,
@@ -2273,10 +3748,12 @@
2273
3748
  /* Six ridges: white lines, and #777 lines one pixel to their right (the
2274
3749
  ridge's shade), between the box slots (Mac OS 9.0, both ends measured). */
2275
3750
  --clio-tb-ridges: calc(100% - var(--clio-tb-close) - var(--clio-tb-zoom) - var(--clio-tb-shade) - 1px);
3751
+ /* The ridges are 12px tiles over an opaque bar: a hard stop to transparent in a
3752
+ covering layer leaves WebKit's covering rows a hair translucent (±1 per channel). */
2276
3753
  background:
2277
- linear-gradient(to bottom, #cccccc 0 1px, transparent 1px 13px, #cccccc 13px 17px, #999999 17px 18px),
2278
- repeating-linear-gradient(to bottom, #ffffff 0 1px, transparent 1px 2px) var(--clio-tb-close) 1px / var(--clio-tb-ridges) 2px repeat-y,
2279
- repeating-linear-gradient(to bottom, transparent 0 1px, #777777 1px 2px) calc(var(--clio-tb-close) + 1px) 1px / var(--clio-tb-ridges) 2px repeat-y,
3754
+ repeating-linear-gradient(to bottom, #ffffff 0 1px, transparent 1px 2px) var(--clio-tb-close) 1px / var(--clio-tb-ridges) 12px no-repeat,
3755
+ repeating-linear-gradient(to bottom, transparent 0 1px, #777777 1px 2px) calc(var(--clio-tb-close) + 1px) 1px / var(--clio-tb-ridges) 12px no-repeat,
3756
+ linear-gradient(to bottom, #cccccc 0 17px, #999999 17px 18px) 0 0 / 100% 18px no-repeat,
2280
3757
  #cccccc;
2281
3758
  }
2282
3759
 
@@ -2317,7 +3794,7 @@
2317
3794
  0 1px 0 #ffffff;
2318
3795
  }
2319
3796
 
2320
- :root .title-bar > :is(button, .close, .close-box, .resize, .resize-box, .zoom, .shade, .shade-box, .collapse):is(:active, .active) {
3797
+ :root .title-bar > :is(button, .close, .close-box, .resize, .resize-box, .zoom, .shade, .shade-box, .collapse):is(:active:where(:not([data-clio-off])), .active) {
2321
3798
  background: linear-gradient(to bottom right, #444444, #bbbbbb);
2322
3799
  box-shadow: -1px -1px 0 #888888, 1px 1px 0 #ffffff, inset -1px -1px 0 #999999;
2323
3800
  }
@@ -2376,7 +3853,7 @@
2376
3853
  box-shadow: var(--clio-button-shadow);
2377
3854
  }
2378
3855
 
2379
- :root :is(.default, .btn-default):not(:disabled, .disabled):is(:active, .active) {
3856
+ :root :is(.default, .btn-default):not(:disabled, .disabled):is(:active:where(:not([data-clio-off])), .active) {
2380
3857
  box-shadow: var(--clio-button-active-shadow);
2381
3858
  }
2382
3859
 
@@ -2396,7 +3873,7 @@
2396
3873
  box-shadow: 0 0 0 1px #888888;
2397
3874
  }
2398
3875
 
2399
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):is(:disabled, .disabled) {
3876
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):is(:disabled, .disabled) {
2400
3877
  background: transparent;
2401
3878
  box-shadow: none;
2402
3879
  border-image: var(--clio-button-frame-disabled) var(--clio-button-frame-slice) fill / calc(var(--clio-button-frame-slice) * 1px) stretch;
@@ -2426,24 +3903,24 @@
2426
3903
  background: var(--clio-art-p9-radio-on) 0 0 / 12px 12px no-repeat;
2427
3904
  }
2428
3905
 
2429
- :root input[type="radio"]:not(:disabled):active {
3906
+ :root input[type="radio"]:not(:disabled):active:where(:not([data-clio-off])) {
2430
3907
  background: var(--clio-art-p9-radio-pressed) 0 0 / 12px 12px no-repeat;
2431
3908
  }
2432
3909
 
2433
3910
  /* Held while on: not captured; the on ball stays (inferred). */
2434
- :root input[type="radio"]:checked:not(:disabled):active {
3911
+ :root input[type="radio"]:checked:not(:disabled):active:where(:not([data-clio-off])) {
2435
3912
  background: var(--clio-art-p9-radio-on) 0 0 / 12px 12px no-repeat;
2436
3913
  }
2437
3914
 
2438
3915
  /* Held while checked: the mark over the held box (inferred; only the empty
2439
3916
  box was captured held). */
2440
- :root input[type="checkbox"]:checked:not(:disabled):active {
3917
+ :root input[type="checkbox"]:checked:not(:disabled):active:where(:not([data-clio-off])) {
2441
3918
  background:
2442
3919
  var(--clio-art-p9-check) 0 0 / 10px 10px no-repeat padding-box,
2443
3920
  var(--clio-art-p9-checkbox-pressed) -1px -1px / 12px 12px no-repeat;
2444
3921
  }
2445
3922
 
2446
- :root input[type="checkbox"]:not(:disabled):active {
3923
+ :root input[type="checkbox"]:not(:disabled):active:where(:not([data-clio-off])) {
2447
3924
  border-color: transparent;
2448
3925
  background: var(--clio-art-p9-checkbox-pressed) -1px -1px / 12px 12px no-repeat;
2449
3926
  box-shadow: none;
@@ -2461,24 +3938,37 @@
2461
3938
 
2462
3939
  :root :is(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"])::before,
2463
3940
  :root :is(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked)::before {
2464
- left: 7px;
2465
- width: 9px;
3941
+ left: 8px; /* the art's first column is the glyph's (it used to start a column early) */
3942
+ width: 10px;
2466
3943
  height: 8px;
2467
3944
  margin-top: -4px;
2468
- background: var(--clio-art-p-check) 0 0 / 9px 8px no-repeat;
3945
+ background: var(--clio-art-p-check) 0 0 / 10px 8px no-repeat;
2469
3946
  }
2470
3947
 
2471
- :root :is(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"]):is(:hover, :focus-within, .active)::before,
2472
- :root :is(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked):is(:hover, :focus-visible, .active)::before {
3948
+ :root :is(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"]):is(:hover, :focus-within, .active):where(:not([data-clio-blink]))::before,
3949
+ :root :is(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked):is(:hover, :focus-visible, .active):where(:not([data-clio-blink]))::before {
2473
3950
  filter: invert(1);
2474
3951
  }
2475
3952
 
3953
+ /* The same check mark in an open pop-up menu drawn by the browser (base-select). */
3954
+ @supports (appearance: base-select) {
3955
+ :root select option::checkmark {
3956
+ left: 8px;
3957
+ width: 10px;
3958
+ background: var(--clio-art-p-check) 0 0 / 10px 8px no-repeat;
3959
+ }
3960
+
3961
+ :root select option:is(:hover, :focus-visible)::checkmark {
3962
+ filter: invert(1);
3963
+ }
3964
+ }
3965
+
2476
3966
  :root :is(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"]))::after,
2477
3967
  :root :is(.menu, [role="menu"]) > li > [aria-haspopup="true"]::after {
2478
3968
  background-image: var(--clio-art-p-submenu);
2479
3969
  }
2480
3970
 
2481
- :root :is(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"])):is(:hover, :focus-within, .active)::after {
3971
+ :root :is(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"])):is(:hover, :focus-within, .active):where(:not([data-clio-blink]))::after {
2482
3972
  background-image: var(--clio-art-p-submenu-on);
2483
3973
  }
2484
3974
 
@@ -2510,119 +4000,519 @@
2510
4000
  line-height: 18px;
2511
4001
  }
2512
4002
 
2513
- :root :is([role="tablist"], .tabs) > :is([role="tab"], li, button):not(:disabled):active {
2514
- border-image-source: var(--clio-art-p-tab-pressed);
4003
+ :root :is([role="tablist"], .tabs) > :is([role="tab"], li, button):not(:disabled):active:where(:not([data-clio-off])) {
4004
+ border-image-source: var(--clio-art-p-tab-pressed);
4005
+ background: transparent;
4006
+ color: #ffffff;
4007
+ }
4008
+
4009
+ :root :is([role="tablist"], .tabs) > :is([role="tab"], li, button):is([aria-selected="true"], .active) {
4010
+ z-index: 1;
4011
+ padding-top: 0;
4012
+ border-image-source: var(--clio-art-p-tab-selected);
4013
+ background: transparent;
4014
+ color: #000000;
4015
+ }
4016
+
4017
+ :root :is([role="tabpanel"], .tab-panel) {
4018
+ border-top: 0;
4019
+ box-shadow: inset 1px 0 0 #ffffff, inset -1px -1px 0 #888888;
4020
+ }
4021
+
4022
+ /* ---- Scroll arrow art sits on the bevelled box ---------------------------- */
4023
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal {
4024
+ background-position: 0 1px, 0 0; /* the vertical boxes' art one pixel to the right, the horizontal one pixel down */
4025
+ }
4026
+
4027
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-button {
4028
+ background-position: 0 1px, 0 0; /* the vertical boxes' art one pixel to the right, the horizontal one pixel down */
4029
+ }
4030
+
4031
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button,
4032
+ :root:is(html.clio-scrollbars)::-webkit-scrollbar-button {
4033
+ background-position: 1px 0, 0 0;
4034
+ background-size: 14px 14px, 100% 100%;
4035
+ }
4036
+
4037
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-button {
4038
+ background-position: 1px 0, 0 0;
4039
+ background-size: 14px 14px, 100% 100%;
4040
+ }
4041
+
4042
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:active,
4043
+ :root:is(html.clio-scrollbars)::-webkit-scrollbar-button:active {
4044
+ /* Held (Mac OS 9.0 Finder, the down arrow held; frame arrow-held): a #777
4045
+ face in --clio-scrollbar-button-bevel-on's #555 and #999 bevel. */
4046
+ background-color: #777777;
4047
+ box-shadow: none;
4048
+ }
4049
+
4050
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-button.clio-held {
4051
+ /* Held (Mac OS 9.0 Finder, the down arrow held; frame arrow-held): a #777
4052
+ face in --clio-scrollbar-button-bevel-on's #555 and #999 bevel. */
4053
+ background-color: #777777;
4054
+ box-shadow: none;
4055
+ }
4056
+
4057
+ :root :is(fieldset) > legend {
4058
+ background: var(--clio-pane-bg);
4059
+ }
4060
+
4061
+ /* WebKit starts a fieldset's padding box below the whole legend (clientTop is the
4062
+ legend's height), so the dots would fill the band between the drawn top line and
4063
+ the legend's foot: the first layer covers that band with the pane in every engine. */
4064
+ :root fieldset {
4065
+ background:
4066
+ linear-gradient(var(--clio-pane-bg), var(--clio-pane-bg)) 1px 1px / calc(100% - 2px) calc(var(--clio-font-size) * 1.5) no-repeat border-box,
4067
+ linear-gradient(var(--clio-pane-bg), var(--clio-pane-bg)) 0 0 / 100% 100% no-repeat padding-box,
4068
+ var(--clio-art-p9-group-dots) 0 0 / 2px 2px fixed border-box;
4069
+ image-rendering: pixelated; /* keep the dots from blending into one grey */
4070
+ }
4071
+
4072
+ /* The title's gap opens 13px after the corner (General Controls, "Desktop"). */
4073
+ :root fieldset > legend {
4074
+ margin-left: 2px;
4075
+ }
4076
+
4077
+ /* Disabled pop-up menu: #888 frame, flat face, the #aaa divider and a grey
4078
+ arrow (Mac OS 9.0 Appearance, "Position Automatically"). Browsers also fade
4079
+ a disabled <select>; Mac OS did not. */
4080
+ :root select:disabled {
4081
+ border-color: #888888;
4082
+ background:
4083
+ var(--clio-art-p-dropdown-off) right 7px top 4px / 7px 10px no-repeat,
4084
+ linear-gradient(#aaaaaa, #aaaaaa) right 20px top 0 / 1px 100% no-repeat,
4085
+ #dddddd;
4086
+ background-clip: padding-box;
4087
+ box-shadow: none;
4088
+ color: #888888;
4089
+ opacity: 1;
4090
+ border-image-source: var(--clio-art-frame-p9-popup-disabled);
4091
+ }
4092
+
4093
+ /* The face stays inside the frame, so the rounded corners show what is behind. */
4094
+ :root select {
4095
+ background-clip: padding-box;
4096
+ }
4097
+
4098
+ /* Indeterminate progress (no value): Mac OS 9's stripes, one 16px period
4099
+ repeated (Finder copy window). Static: clio.css adds no motion. */
4100
+ :root progress:indeterminate,
4101
+ :root progress:indeterminate::-webkit-progress-bar {
4102
+ background: var(--clio-art-p9-progress-pole) 0 0 / 16px 10px repeat-x;
4103
+ }
4104
+
4105
+ :root .title-bar > :is(.title, h1, h2, h3)::after {
4106
+ content: "";
4107
+ position: absolute;
4108
+ top: 0;
4109
+ right: -1px;
4110
+ width: 1px;
4111
+ height: 12px;
4112
+ background: repeating-linear-gradient(to bottom, transparent 0 1px, #cccccc 1px 2px);
4113
+ }
4114
+
4115
+ :root .window.inactive > .title-bar > :is(.title, h1, h2, h3)::after,
4116
+ :root .inactive-title-bar > :is(.title, h1, h2, h3)::after {
4117
+ content: none;
4118
+ }
4119
+
4120
+ /* ---- Antialiasing as Mac OS blends it -------------------------------------
4121
+ Window titles and push button labels in their own colours on their own
4122
+ backgrounds take the exact palettes (src/00-fonts.css). */
4123
+ :root .title-bar > :is(.title, h1, h2, h3) {
4124
+ font-palette: --clio-aa-p9-title;
4125
+ }
4126
+
4127
+ :root :is(.window.inactive > .title-bar, .inactive-title-bar) > :is(.title, h1, h2, h3) {
4128
+ font-palette: --clio-aa-p9-title-inactive;
4129
+ }
4130
+
4131
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button) {
4132
+ font-family: var(--clio-font-button);
4133
+ font-palette: --clio-aa-p9-button;
4134
+ }
4135
+
4136
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):not(:disabled, .disabled):is(:active:where(:not([data-clio-off])), .active) {
4137
+ font-palette: --clio-aa-p9-button-held;
4138
+ }
4139
+
4140
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):is(:disabled, .disabled) {
4141
+ font-palette: --clio-aa-p9-button-disabled;
4142
+ }
4143
+
4144
+ /* ---- List view headers -----------------------------------------------------
4145
+ Measured row by row (Finder list view, Mac OS 9.0). A header: #666 above,
4146
+ white light along its top and left, #ccc, #888 shade and a #333 rule below;
4147
+ the #666 column on its left is the divider. The sorted header is sunk:
4148
+ #111 top and left, #444 right and below (#222 at the two odd corners), a
4149
+ #555 then #aaa inner bevel round #888. The sort-direction cell adds an #888
4150
+ shade on its right. */
4151
+ :root .list-view th {
4152
+ background:
4153
+ linear-gradient(#666666, #666666) 0 0 / 100% 1px no-repeat,
4154
+ linear-gradient(#666666, #666666) 0 0 / 1px calc(100% - 1px) no-repeat,
4155
+ linear-gradient(#555555, #555555) 0 100% / 1px 1px no-repeat,
4156
+ linear-gradient(#333333, #333333) 1px 100% / 100% 1px no-repeat,
4157
+ linear-gradient(#ffffff, #ffffff) 1px 1px / 100% 1px no-repeat,
4158
+ linear-gradient(#ffffff, #ffffff) 1px 1px / 1px calc(100% - 3px) no-repeat,
4159
+ linear-gradient(#888888, #888888) 2px calc(100% - 1px) / 100% 1px no-repeat,
4160
+ #cccccc;
4161
+ }
4162
+
4163
+ :root .list-view th[aria-sort]:not([aria-sort="none"]) {
4164
+ background:
4165
+ linear-gradient(#222222, #222222) 100% 0 / 1px 1px no-repeat,
4166
+ linear-gradient(#222222, #222222) 0 100% / 1px 1px no-repeat,
4167
+ linear-gradient(#111111, #111111) 0 0 / calc(100% - 1px) 1px no-repeat,
4168
+ linear-gradient(#111111, #111111) 0 0 / 1px calc(100% - 1px) no-repeat,
4169
+ linear-gradient(#444444, #444444) 100% 1px / 1px 100% no-repeat,
4170
+ linear-gradient(#444444, #444444) 1px 100% / 100% 1px no-repeat,
4171
+ linear-gradient(#777777, #777777) calc(100% - 1px) 1px / 1px 1px no-repeat,
4172
+ linear-gradient(#777777, #777777) 1px calc(100% - 1px) / 1px 1px no-repeat,
4173
+ linear-gradient(#555555, #555555) 1px 1px / calc(100% - 3px) 1px no-repeat,
4174
+ linear-gradient(#555555, #555555) 1px 1px / 1px calc(100% - 3px) no-repeat,
4175
+ linear-gradient(#aaaaaa, #aaaaaa) calc(100% - 1px) 2px / 1px calc(100% - 3px) no-repeat,
4176
+ linear-gradient(#aaaaaa, #aaaaaa) 2px calc(100% - 1px) / calc(100% - 3px) 1px no-repeat,
4177
+ #888888;
4178
+ }
4179
+
4180
+ :root .list-view th.sort-direction {
4181
+ background:
4182
+ linear-gradient(#888888, #888888) 100% 2px / 1px calc(100% - 3px) no-repeat,
4183
+ linear-gradient(#cccccc, #cccccc) 100% 1px / 1px 1px no-repeat,
4184
+ linear-gradient(#666666, #666666) 0 0 / 100% 1px no-repeat,
4185
+ linear-gradient(#666666, #666666) 0 0 / 1px calc(100% - 1px) no-repeat,
4186
+ linear-gradient(#555555, #555555) 0 100% / 1px 1px no-repeat,
4187
+ linear-gradient(#333333, #333333) 1px 100% / 100% 1px no-repeat,
4188
+ linear-gradient(#ffffff, #ffffff) 1px 1px / 100% 1px no-repeat,
4189
+ linear-gradient(#ffffff, #ffffff) 1px 1px / 1px calc(100% - 3px) no-repeat,
4190
+ linear-gradient(#888888, #888888) 2px calc(100% - 1px) / 100% 1px no-repeat,
4191
+ url("art/platinum/sort-direction.png") 4px 6px / 8px 7px no-repeat,
4192
+ #cccccc;
4193
+ }
4194
+
4195
+ :root :is(input:not([type]), input[type="text"], input[type="search"], input[type="email"], input[type="url"], input[type="password"], input[type="number"], input[type="tel"], textarea):focus-visible {
4196
+ box-shadow: var(--clio-field-focus-shadow);
4197
+ }
4198
+
4199
+ /* Secondary group box (Sound, "Settings for selected device"): one #888 line,
4200
+ no light. */
4201
+ :root fieldset.secondary {
4202
+ border: 1px solid #888888;
4203
+ background: transparent;
4204
+ box-shadow: none;
4205
+ }
4206
+
4207
+ /* ---- Utility window (Application Switcher, Mac OS 9.0) --------------------------
4208
+ 1px black outline and a 1px black drop; white light on the top and left,
4209
+ #999 shade on the right; a 13-row title bar of #ccc with a 3px dot pattern
4210
+ (white, #777 one down and right) in rows 3-10, 9x9 boxes, and a #999 rule
4211
+ under it. */
4212
+ :root .window.utility {
4213
+ --clio-utility-titlebar-height: 14px;
4214
+ --clio-utility-box-size: 10px;
4215
+ padding: 0;
4216
+ border: 1px solid #000000;
4217
+ background:
4218
+ linear-gradient(#ffffff, #ffffff) 0 0 / calc(100% - 1px) 1px no-repeat,
4219
+ linear-gradient(#ffffff, #ffffff) 0 0 / 1px 100% no-repeat,
4220
+ linear-gradient(#999999, #999999) 100% 1px / 1px 100% no-repeat,
4221
+ #cccccc;
4222
+ box-shadow: none;
4223
+ isolation: isolate;
4224
+ }
4225
+
4226
+ /* The drop: 1px of black right and below, from the second row and column. */
4227
+ :root .window.utility::before {
4228
+ content: "";
4229
+ position: absolute;
4230
+ top: 1px;
4231
+ right: -2px;
4232
+ bottom: -2px;
4233
+ left: 1px;
4234
+ z-index: -1;
4235
+ background:
4236
+ linear-gradient(#000000, #000000) 100% 0 / 1px 100% no-repeat,
4237
+ linear-gradient(#000000, #000000) 0 100% / 100% 1px no-repeat;
4238
+ }
4239
+
4240
+ :root .window.utility > .title-bar {
4241
+ height: 13px;
4242
+ margin: 1px 1px 0;
4243
+ padding: 0 26px 0 12px;
4244
+ border-bottom: 0;
4245
+ background:
4246
+ linear-gradient(#999999, #999999) 0 100% / calc(100% - 1px) 1px no-repeat,
4247
+ url("art/platinum/utility-dots.png") 0 2px / 3px 3px repeat-x,
4248
+ url("art/platinum/utility-dots.png") 0 5px / 3px 3px repeat-x,
4249
+ url("art/platinum/utility-dots.png") 0 8px / 3px 3px repeat-x,
4250
+ #cccccc;
4251
+ background-clip: padding-box, content-box, content-box, content-box, padding-box;
4252
+ }
4253
+
4254
+ :root .window.utility > .title-bar > :is(.close, .close-box, .resize, .resize-box, .zoom, .shade, .shade-box, .collapse) {
4255
+ position: absolute;
4256
+ grid-area: auto;
4257
+ top: 1px;
4258
+ left: 0;
4259
+ width: 10px;
4260
+ height: 10px;
4261
+ margin: 0;
4262
+ border: 0;
4263
+ background: url("art/platinum/utility-close.png") 0 0 / 10px 10px no-repeat;
4264
+ box-shadow: none;
4265
+ }
4266
+
4267
+ :root .window.utility > .title-bar > :is(.resize, .resize-box, .zoom) {
4268
+ left: auto;
4269
+ right: 11px;
4270
+ background-image: url("art/platinum/utility-zoom.png");
4271
+ box-shadow: -4px 0 0 #cccccc, 1px 0 0 #cccccc;
4272
+ }
4273
+
4274
+ :root .window.utility > .title-bar > :is(.shade, .shade-box, .collapse) {
4275
+ left: auto;
4276
+ right: 0;
4277
+ background-image: url("art/platinum/utility-collapse.png");
4278
+ }
4279
+
4280
+ /* With no collapse box, the zoom box takes its place. */
4281
+ :root .window.utility > .title-bar:not(:has(> :is(.shade, .shade-box, .collapse))) > :is(.resize, .resize-box, .zoom) {
4282
+ right: 0;
4283
+ }
4284
+
4285
+ :root .window.utility > .title-bar > :is(button, .close, .resize, .zoom, .shade, .collapse)::before,
4286
+ :root .window.utility > .title-bar > :is(button, .close, .resize, .zoom, .shade, .collapse)::after {
4287
+ content: none;
4288
+ }
4289
+
4290
+ :root .window.utility > .title-bar > :is(.title, h1, h2, h3) {
4291
+ height: 11px;
4292
+ padding: 0 2px;
4293
+ background: #cccccc;
4294
+ font-size: 12px;
4295
+ line-height: 11px;
4296
+ }
4297
+
4298
+ /* The dots right of the title run from the right end (their phase differs
4299
+ from the left run's by one column). */
4300
+ :root .window.utility > .title-bar::after {
4301
+ content: "";
4302
+ position: absolute;
4303
+ top: 0;
4304
+ right: 25px;
4305
+ bottom: 1px;
4306
+ left: 50%;
4307
+ border: 0;
4308
+ background:
4309
+ url("art/platinum/utility-dots.png") right -1px top 2px / 3px 3px repeat-x,
4310
+ url("art/platinum/utility-dots.png") right -1px top 5px / 3px 3px repeat-x,
4311
+ url("art/platinum/utility-dots.png") right -1px top 8px / 3px 3px repeat-x,
4312
+ #cccccc;
4313
+ box-shadow: none;
4314
+ }
4315
+
4316
+ :root .window.utility > .title-bar > :is(.title, h1, h2, h3) {
4317
+ position: relative;
4318
+ z-index: 1;
4319
+ }
4320
+
4321
+ /* ---- Movable modal window (Navigation Services "Open", Mac OS 9.0) --------------
4322
+ A title bar with no close box over a dialog body: no frame band, the black
4323
+ rule under the title bar runs the whole width, and the body has the modal
4324
+ dialog's white light and #999/#555 shade inside the outline. */
4325
+ :root .window.movable-modal {
4326
+ padding: 2px 0 0;
4327
+ background:
4328
+ linear-gradient(#ffffff, #ffffff) 1px 22px / calc(100% - 3px) 1px no-repeat,
4329
+ linear-gradient(#ffffff, #ffffff) 1px 22px / 1px calc(100% - 23px) no-repeat,
4330
+ linear-gradient(#999999, #999999) calc(100% - 1px) 23px / 1px calc(100% - 24px) no-repeat,
4331
+ linear-gradient(#555555, #555555) 100% 22px / 1px calc(100% - 22px) no-repeat,
4332
+ linear-gradient(#ffffff, #ffffff) 0 0 / 100% 1px no-repeat,
4333
+ linear-gradient(#ffffff, #ffffff) 0 0 / 1px 19px no-repeat,
4334
+ linear-gradient(#cccccc, #cccccc) 0 19px / 1px 1px no-repeat,
4335
+ linear-gradient(#000000, #000000) 0 20px / 1px 1px no-repeat,
4336
+ linear-gradient(#cccccc, #cccccc) 1px 1px / 100% 1px no-repeat,
4337
+ #dddddd;
4338
+ }
4339
+
4340
+ :root .window.movable-modal > .title-bar {
4341
+ --clio-tb-close: 3px;
4342
+ margin: 0 0 0 1px;
4343
+ border-bottom: 1px solid #000000;
4344
+ box-shadow: none;
4345
+ }
4346
+
4347
+ /* the frame's light down the title bar's first column, above its #999 row */
4348
+ :root .window.movable-modal {
4349
+ --clio-mm-light: linear-gradient(#ffffff, #ffffff) 1px 1px / 1px 19px no-repeat;
4350
+ }
4351
+
4352
+ :root .window.movable-modal > .window-pane {
4353
+ border: 0;
2515
4354
  background: transparent;
2516
- color: #ffffff;
2517
4355
  }
2518
4356
 
2519
- :root :is([role="tablist"], .tabs) > :is([role="tab"], li, button):is([aria-selected="true"], .active) {
2520
- z-index: 1;
2521
- padding-top: 0;
2522
- border-image-source: var(--clio-art-p-tab-selected);
2523
- background: transparent;
2524
- color: #000000;
4357
+ /* Safari's COLRv0 edge levels in white and dimmed text (src/00-fonts.css). */
4358
+ :root :is(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a, span):is([aria-expanded="true"], .active),
4359
+ :root :is(.menu-bar, [role="menubar"], [role="menu-bar"]) > li.open > :is(button, a, span),
4360
+ :root :is(.menu, [role="menu"]) > li:not(.disabled, [aria-disabled="true"], .separator, [role="separator"]):is(:hover, :focus-within, .active):where(:not([data-clio-blink])),
4361
+ :root :is(.menu, [role="menu"]) > li > :is(a, button):not([aria-disabled="true"], :disabled):is(:hover, :focus-visible, .active):where(:not([data-clio-blink])),
4362
+ :root .icon:is(.selected, [aria-selected="true"], [aria-pressed="true"]) > :is(figcaption, span, .icon-label) {
4363
+ font-palette: --clio-aa-white;
2525
4364
  }
2526
4365
 
2527
- :root :is([role="tabpanel"], .tab-panel) {
2528
- border-top: 0;
2529
- box-shadow: inset 1px 0 0 #ffffff, inset -1px -1px 0 #888888;
4366
+ :root :is(.menu, [role="menu"]) > li:is(.disabled, [aria-disabled="true"]),
4367
+ :root :is(.menu, [role="menu"]) > li > :is(a, button):is(:disabled, [aria-disabled="true"]) {
4368
+ font-palette: --clio-aa-6f6f6f;
2530
4369
  }
2531
4370
 
2532
- /* ---- Scroll arrow art sits on the bevelled box ---------------------------- */
2533
- :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button,
2534
- :root:is(html.clio-scrollbars)::-webkit-scrollbar-button {
2535
- background-position: 1px 1px;
2536
- background-size: 14px 14px;
4371
+ /* A submenu sits inside its parent's <li>, which stays chosen while the
4372
+ pointer is in the submenu: its own items start from the black levels. */
4373
+ :root :is(.menu, [role="menu"]) :is(.menu, [role="menu"]) {
4374
+ font-palette: normal;
2537
4375
  }
2538
4376
 
2539
- :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:active,
2540
- :root:is(html.clio-scrollbars)::-webkit-scrollbar-button:active {
2541
- background-color: #666666;
2542
- box-shadow: inset 1px 1px #444444, inset -1px -1px #888888;
4377
+ /* ---- Side-title utility window (kWindowFloatSide*; Mac OS 9.0, the Appearance
4378
+ SDK's sample "Side Utility Window", frames side3) ------------------------------
4379
+ <div class="window utility side"> with the usual .title-bar (close box at the
4380
+ top, collapse box at the foot; no title is drawn). The frame is the utility
4381
+ window's: 1px black, white light on the top and left, #999 shade on the right
4382
+ and the bottom, the drop from the second row and column. The bar is 10px of #ccc
4383
+ down the left with the 3px dot pattern from 12px below its top to 12px above its
4384
+ foot; the collapse box is the title-bar one transposed. */
4385
+ :root .window.utility.side {
4386
+ flex-direction: row;
4387
+ background:
4388
+ linear-gradient(#ffffff, #ffffff) 0 0 / calc(100% - 1px) 1px no-repeat,
4389
+ linear-gradient(#ffffff, #ffffff) 0 0 / 1px calc(100% - 1px) no-repeat,
4390
+ linear-gradient(#999999, #999999) 100% 1px / 1px calc(100% - 1px) no-repeat,
4391
+ linear-gradient(#999999, #999999) 1px 100% / calc(100% - 1px) 1px no-repeat,
4392
+ #cccccc;
2543
4393
  }
2544
4394
 
2545
- :root :is(fieldset) > legend {
2546
- background: var(--clio-pane-bg);
4395
+ :root .window.utility.side > .title-bar {
4396
+ display: block;
4397
+ flex: none;
4398
+ width: 10px;
4399
+ height: auto;
4400
+ margin: 1px 0 1px 1px;
4401
+ padding: 0;
4402
+ background: url("art/platinum/utility-dots.png") 1px 12px / 3px 3px repeat, #cccccc;
4403
+ box-shadow: none;
2547
4404
  }
2548
4405
 
2549
- :root fieldset {
2550
- background:
2551
- linear-gradient(var(--clio-pane-bg), var(--clio-pane-bg)) padding-box,
2552
- var(--clio-art-p9-group-dots) 0 0 / 2px 2px fixed border-box;
2553
- image-rendering: pixelated; /* keep the dots from blending into one grey */
4406
+ /* The dots keep to columns 1 to 9 and rows 12 to 12 above the foot: a #ccc frame
4407
+ painted over the pattern's edges. */
4408
+ :root .window.utility.side > .title-bar::before {
4409
+ content: "";
4410
+ position: absolute;
4411
+ inset: 0;
4412
+ border-style: solid;
4413
+ border-color: #cccccc;
4414
+ border-width: 12px 0 12px 1px;
4415
+ pointer-events: none;
2554
4416
  }
2555
4417
 
2556
- /* The title's gap opens 13px after the corner (General Controls, "Desktop"). */
2557
- :root fieldset > legend {
2558
- margin-left: 2px;
4418
+ :root .window.utility.side > .title-bar::after {
4419
+ content: none;
2559
4420
  }
2560
4421
 
2561
- /* Disabled pop-up menu: #888 frame, flat face, the #aaa divider and a grey
2562
- arrow (Mac OS 9.0 Appearance, "Position Automatically"). Browsers also fade
2563
- a disabled <select>; Mac OS did not. */
2564
- :root select:disabled {
2565
- border-color: #888888;
2566
- background:
2567
- var(--clio-art-p-dropdown-off) right 7px top 4px / 7px 10px no-repeat,
2568
- linear-gradient(#aaaaaa, #aaaaaa) right 20px top 0 / 1px 100% no-repeat,
2569
- #dddddd;
2570
- background-clip: padding-box;
4422
+ :root .window.utility.side > .title-bar > :is(.title, h1, h2, h3) {
4423
+ position: absolute;
4424
+ width: 1px;
4425
+ height: 1px;
4426
+ overflow: hidden;
4427
+ clip-path: inset(50%);
4428
+ white-space: nowrap;
4429
+ }
4430
+
4431
+ :root .window.utility.side > .title-bar > :is(.close, .close-box, .resize, .resize-box, .zoom, .shade, .shade-box, .collapse) {
4432
+ top: 0;
4433
+ right: auto;
4434
+ left: 0;
4435
+ z-index: 1;
2571
4436
  box-shadow: none;
2572
- color: #888888;
2573
- opacity: 1;
2574
- border-image-source: var(--clio-art-frame-p9-popup-disabled);
2575
4437
  }
2576
4438
 
2577
- /* The face stays inside the frame, so the rounded corners show what is behind. */
2578
- :root select {
2579
- background-clip: padding-box;
4439
+ :root .window.utility.side > .title-bar > :is(.shade, .shade-box, .collapse, .resize, .resize-box, .zoom) {
4440
+ top: auto;
4441
+ bottom: 0;
4442
+ background-image: url("art/platinum/utility-collapse-side.png");
2580
4443
  }
2581
4444
 
2582
- /* Indeterminate progress (no value): Mac OS 9's stripes, one 16px period
2583
- repeated (Finder copy window). Static: clio.css adds no motion. */
2584
- :root progress:indeterminate,
2585
- :root progress:indeterminate::-webkit-progress-bar {
2586
- background: var(--clio-art-p9-progress-pole) 0 0 / 16px 10px repeat-x;
4445
+ :root .window.utility.side > .window-pane {
4446
+ margin: 1px 1px 1px 0;
2587
4447
  }
2588
4448
 
2589
- :root .title-bar > :is(.title, h1, h2, h3)::after {
2590
- content: "";
2591
- position: absolute;
2592
- top: 0;
2593
- right: -1px;
2594
- width: 1px;
2595
- height: 12px;
2596
- background: repeating-linear-gradient(to bottom, transparent 0 1px, #cccccc 1px 2px);
4449
+ /* In the background: a #555 frame and drop on flat #ddd; no boxes, no dots. */
4450
+ :root .window.utility.side.inactive {
4451
+ border-color: #555555;
4452
+ background: #dddddd;
2597
4453
  }
2598
4454
 
2599
- :root .window.inactive > .title-bar > :is(.title, h1, h2, h3)::after,
2600
- :root .inactive-title-bar > :is(.title, h1, h2, h3)::after {
4455
+ :root .window.utility.side.inactive::before {
4456
+ background:
4457
+ linear-gradient(#555555, #555555) 100% 0 / 1px 100% no-repeat,
4458
+ linear-gradient(#555555, #555555) 0 100% / 100% 1px no-repeat;
4459
+ }
4460
+
4461
+ :root .window.utility.side.inactive > .title-bar {
4462
+ background: #dddddd;
4463
+ }
4464
+
4465
+ :root .window.utility.side.inactive > .title-bar::before {
2601
4466
  content: none;
2602
4467
  }
2603
4468
 
2604
- /* ---- Antialiasing as Mac OS blends it -------------------------------------
2605
- Window titles and push button labels in their own colours on their own
2606
- backgrounds take the exact palettes (src/00-fonts.css). */
2607
- :root .title-bar > :is(.title, h1, h2, h3) {
2608
- font-palette: --clio-aa-p9-title;
4469
+ /* ---- Placard (Mac OS 9.0, the Appearance SDK's CDEF Tester, frame placard) -----
4470
+ 1px black, white light on the top and left, #aaa shade on the right and the
4471
+ bottom (the corners they would share stay #ddd), #ddd face. Disabled: a #555
4472
+ frame on #eee, no light or shade (frame placard-disabled). */
4473
+ :root .placard {
4474
+ border-color: #000000;
4475
+ background:
4476
+ linear-gradient(#ffffff, #ffffff) 0 0 / calc(100% - 1px) 1px no-repeat,
4477
+ linear-gradient(#ffffff, #ffffff) 0 0 / 1px calc(100% - 1px) no-repeat,
4478
+ linear-gradient(#aaaaaa, #aaaaaa) 100% 1px / 1px calc(100% - 1px) no-repeat,
4479
+ linear-gradient(#aaaaaa, #aaaaaa) 1px 100% / calc(100% - 1px) 1px no-repeat,
4480
+ #dddddd;
4481
+ color: #000000;
2609
4482
  }
2610
4483
 
2611
- :root :is(.window.inactive > .title-bar, .inactive-title-bar) > :is(.title, h1, h2, h3) {
2612
- font-palette: --clio-aa-p9-title-inactive;
4484
+ :root .placard:is(:disabled, [aria-disabled="true"], .window.inactive *) {
4485
+ border-color: #555555;
4486
+ background: #eeeeee;
4487
+ color: #555555;
2613
4488
  }
2614
4489
 
2615
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *) {
2616
- font-family: var(--clio-font-button);
2617
- font-palette: --clio-aa-p9-button;
4490
+ /* ---- Split bar (BBEdit 5.1, Mac OS 9.0, frames bb3 and split-done) -------------
4491
+ 7 rows of black across the scroll bar's width; the split line puts its two
4492
+ lines on the bar's fourth and sixth rows. */
4493
+ :root :is(.split-view, .split-bar, .split-line) {
4494
+ --clio-split-bar-height: 7px;
4495
+ --clio-split-bg: #ffffff;
4496
+ --clio-split-ink: #000000;
2618
4497
  }
2619
4498
 
2620
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):not(:disabled, .disabled):is(:active, .active) {
2621
- font-palette: --clio-aa-p9-button-held;
4499
+ :root .split-line {
4500
+ --clio-split-line-1: 3px;
2622
4501
  }
2623
4502
 
2624
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):is(:disabled, .disabled) {
2625
- font-palette: --clio-aa-p9-button-disabled;
4503
+ /* ---- Rounded-corner window (the Calculator, Mac OS 9.0 and 8.5) ----------------
4504
+ The old window definition draws it as in System 7, its title in the system font
4505
+ antialiased: white on black, black on white in the background (levels measured,
4506
+ tooling/aa-palettes.py). */
4507
+ :root .rounded-window > .rounded-title {
4508
+ font-family: Charcoal, "Charcoal CY", "Clio Sans '97 Title Exact", "Clio Sans '97 Title", "Clio Sans '97", "Clio Asap", Geneva, sans-serif;
4509
+ padding-left: 16px; /* Clio Sans '97 Title sets "Calculator" 2px narrower than the Mac's Charcoal: fitted to the capture */
4510
+ font-size: 12px;
4511
+ font-palette: --clio-aa-rdoc-title;
4512
+ }
4513
+
4514
+ :root .rounded-window.inactive > .rounded-title {
4515
+ font-palette: --clio-aa-rdoc-title-inactive;
2626
4516
  }
2627
4517
 
2628
4518
  /* Mac OS 8.5 "Drawing Board" (the beta theme Apple shipped in 8.5b6 and
@@ -2638,6 +4528,22 @@
2638
4528
  each found 1:1 in the capture. The stylesheet loads them from art/ beside
2639
4529
  itself, as it loads fonts/. See EVIDENCE.md. */
2640
4530
  :root {
4531
+ --clio-scrollbar-size: 16px;
4532
+ --clio-scrollbar-button-bevel: none;
4533
+ --clio-scrollbar-button-bevel-on: none;
4534
+ /* clio.js: the dragged region is the frame and its shadow, 7px across and 8px
4535
+ down, with the frame pieces' overrun near the corners (tooling/db-outline.py
4536
+ writes those as patches; the outline gets a 12px margin to hold them) */
4537
+ --clio-drag-outline-extra: 7px;
4538
+ --clio-drag-outline-extra-y: 8px;
4539
+ --clio-drag-outline-margin: 12px;
4540
+ --clio-db-outline-tl: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAQAAAAkGDomAAAARElEQVR42u3WwQ0AIAgEQUP/PWMHfD3iTAUbIcRzAF7pTqio9OiaUhLesNLHXDs2cUPU6lCA375ZDjQAAAAAAAAAADC6wVkT9TSjiRQAAAAASUVORK5CYII=");
4541
+ --clio-db-outline-tr: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAQAAAAkGDomAAAAZElEQVR42u3UwQ5AMBBF0Y74/1+ulSAS6YY8nLOTWFyjndZ4qd7H3pvSP0SgQIECb96Ec9birooJPKfETXD9xVvqaPQjcfsTeHxyi3+2ZuInWAnzu7q98RMEAAAAAAAAAAD4oAW4lBQeuypXEwAAAABJRU5ErkJggg==");
4542
+ --clio-db-outline-bl: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAQAAAAkGDomAAAAfElEQVR42u3XSw6AMAgFQNt4/yvj3sT6V9rMbHXxBIo6TQAAAAAAAAAAAGeV1sWI1c3l+4DzVpw/wtwSsa7nN+qZFqcKmCFcM2CWGWxWMEPI9DNY9s7u3y2vB58j31aMuLr5nh2M+sLUlOQB7cFO3iRaPHwFu/hE9Uc0ggXRch4XFPn+mwAAAABJRU5ErkJggg==");
4543
+ --clio-db-outline-br: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAQAAAAkGDomAAAATUlEQVR42u3XwQkAIAwDQO3+O+sAiviMcjdBqGDT1gAAAAAAAOBkDDMAACC8su5Ka2U16jViZU2xdzcJ8PNWeOpbuQ1Y6W8hoIACQrgJSZMT/52XbkwAAAAASUVORK5CYII=");
4544
+ /* outline patches: 176 pixels in four 80x80 corners (tooling/db-outline.py) */
4545
+ --clio-scrollbar-thumb-overlap: 0px;
4546
+ --clio-scrollbar-thumb-after: none;
2641
4547
  /* Titles sit on the textured title bar, where no palette can know the
2642
4548
  background: they keep Clio Sans '97 Title in the text colour. */
2643
4549
  --clio-font-window-title: Charcoal, "Charcoal CY", "Clio Sans '97 Title", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
@@ -2645,6 +4551,34 @@
2645
4551
  tile (64px) earlier, depending on where the window sits on screen; a page
2646
4552
  matching a particular screen can set 64px on that window or control. */
2647
4553
  --clio-db-phase: 0px;
4554
+ /* Slider (Keyboard, Key Repeat): a 1px pencil track (ppat 7024) 2px below
4555
+ the top of the theme's 9x16 thumb (1106). */
4556
+ --clio-slider-track-height: 1px;
4557
+ --clio-slider-track-top: 2px;
4558
+ --clio-slider-track-slice: 0px;
4559
+ --clio-slider-thumb-width: 9px;
4560
+ --clio-art-slider-thumb: url("art/drawingboard/parts/slider-thumb.png");
4561
+ /* Little arrows: the theme's 13x21 pictures (350: normal, up held, down held,
4562
+ dimmed), through 16 bits (Date & Time). */
4563
+ --clio-little-arrows-width: 13px;
4564
+ --clio-little-arrows-height: 21px;
4565
+ --clio-art-little-arrows: url("art/drawingboard/parts/little-arrows.png");
4566
+ --clio-art-little-arrows-up: url("art/drawingboard/parts/little-arrows-up.png");
4567
+ --clio-art-little-arrows-down: url("art/drawingboard/parts/little-arrows-down.png");
4568
+ --clio-art-little-arrows-disabled: url("art/drawingboard/parts/little-arrows-disabled.png");
4569
+ /* Chasing arrows: the theme's six frames (390). */
4570
+ --clio-art-chasing-arrows: url("art/drawingboard/parts/chasing-arrows.png");
4571
+ --clio-chasing-arrows-frames: 6;
4572
+ /* Help button: as the Keyboard control panel draws it. */
4573
+ --clio-art-help-button: url("art/drawingboard/help-button.png");
4574
+ /* Scrolling menu arrows: the theme's 364 and 389 (Control Panels submenu). */
4575
+ --clio-art-menu-scroll-down: url("art/drawingboard/parts/menu-scroll-down.png");
4576
+ --clio-art-menu-scroll-up: url("art/drawingboard/parts/menu-scroll-up.png");
4577
+ /* Disclosure triangle: the theme's 11px pictures (closed 340, open 343, which
4578
+ Mac OS draws through 16 bits), Finder list view. */
4579
+ --clio-disclosure-size: 11px;
4580
+ --clio-art-disclosure: url("art/drawingboard/parts/disclosure.png");
4581
+ --clio-art-disclosure-open: url("art/drawingboard/parts/disclosure-open.png");
2648
4582
  --clio-ink: #313131;
2649
4583
  --clio-paper: #e7ded6;
2650
4584
  --clio-face: #cdc6bd;
@@ -2765,6 +4699,8 @@
2765
4699
  --clio-field-focus-shadow: none;
2766
4700
  --clio-button-disabled-fg: #8c8c8c;
2767
4701
  --clio-button-disabled-border: 1px solid #888888;
4702
+ /* The theme's scroll box at its shortest, 7px end and 8px end. */
4703
+ --clio-scrollbar-thumb-length: 15px;
2768
4704
 
2769
4705
  /* Scroll bars: the theme's 16px arrow boxes; a #ece6e4 track with a #aaa
2770
4706
  edge, a two-pixel pencil rail down the middle and a #777 far edge; the
@@ -2783,15 +4719,17 @@
2783
4719
  --clio-scrollbar-track: linear-gradient(to right, #555555 0 1px, #ece6e4 1px 7px, #777777 7px 9px, #ece6e4 9px 15px, #555555 15px);
2784
4720
  --clio-scrollbar-track-color: #ece6e4;
2785
4721
  --clio-scrollbar-track-shadow: none;
4722
+ /* The grip lies over the ends, (length - 2) / 2 rounded down from the start:
4723
+ on the 15px box it covers the start's last pixel (Themes tab list). */
2786
4724
  --clio-scrollbar-thumb-bg:
4725
+ var(--clio-art-db-thumb-vgrip) 1px round(down, 50%, 1px) / 14px 2px no-repeat,
2787
4726
  var(--clio-art-db-thumb-top) 1px 0 / 14px 7px no-repeat,
2788
4727
  var(--clio-art-db-thumb-bottom) 1px 100% / 14px 8px no-repeat,
2789
- var(--clio-art-db-thumb-vgrip) 1px 50% / 14px 2px no-repeat,
2790
4728
  var(--clio-art-db-thumb-vstretch) 1px 0 / 14px 100% no-repeat;
2791
4729
  --clio-scrollbar-thumb-bg-horizontal:
4730
+ var(--clio-art-db-thumb-hgrip) round(down, 50%, 1px) 1px / 2px 14px no-repeat,
2792
4731
  var(--clio-art-db-thumb-left) 0 1px / 7px 14px no-repeat,
2793
4732
  var(--clio-art-db-thumb-right) 100% 1px / 8px 14px no-repeat,
2794
- var(--clio-art-db-thumb-hgrip) 50% 1px / 2px 14px no-repeat,
2795
4733
  var(--clio-art-db-thumb-hstretch) 0 1px / 100% 14px no-repeat;
2796
4734
  --clio-scrollbar-thumb-color: #cdc6bd;
2797
4735
  --clio-scrollbar-thumb-border: 0 none;
@@ -2896,8 +4834,8 @@
2896
4834
  --clio-art-db-title-underline-left: url("art/drawingboard/parts/title-underline-left.png"); /* 15x3 */
2897
4835
  --clio-art-db-title-underline: url("art/drawingboard/parts/title-underline.png"); /* 32x4 */
2898
4836
  --clio-art-db-title-underline-right: url("art/drawingboard/parts/title-underline-right.png"); /* 16x3 */
2899
- --clio-art-db-menu-underline-tiled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3Cpattern id='p' width='48' height='3' patternUnits='userSpaceOnUse'%3E%3Cimage width='48' height='3' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAADBAMAAAAnwpG3AAAAElBMVEUAAADMZmbMmWbMmZnMZjPMMzOFAtjtAAAAAXRSTlMAQObYZgAAACJJREFUeJxjFGSAAMb/DMYMDAxnwWwBBgbGUKgENmCATRAAmjoCqut/JFgAAAAASUVORK5CYII='/%3E%3C/pattern%3E%3C/defs%3E%3Crect width='100%' height='100%' fill='url(%23p)'/%3E%3C/svg%3E"); /* 48 px tile */
2900
- --clio-art-db-title-underline-tiled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3Cpattern id='p' width='32' height='4' patternUnits='userSpaceOnUse'%3E%3Cimage width='32' height='4' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAEBAMAAAAdaSDnAAAAD1BMVEUAAADMZmbMmWbMmZnMZjOW1IuaAAAAAXRSTlMAQObYZgAAACBJREFUeJxjdGGAgP+MDAwM5/4rs0D5DCA+gxGMhw8AALzeA23Id2x2AAAAAElFTkSuQmCC'/%3E%3C/pattern%3E%3C/defs%3E%3Crect width='100%' height='100%' fill='url(%23p)'/%3E%3C/svg%3E"); /* 32 px tile */
4837
+ --clio-art-db-menu-underline-tiled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3Cpattern id='p' width='48' height='3' patternUnits='userSpaceOnUse'%3E%3Cimage image-rendering='pixelated' style='image-rendering:pixelated' width='48' height='3' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAADBAMAAAAnwpG3AAAAElBMVEUAAADMZmbMmWbMmZnMZjPMMzOFAtjtAAAAAXRSTlMAQObYZgAAACJJREFUeJxjFGSAAMb/DMYMDAxnwWwBBgbGUKgENmCATRAAmjoCqut/JFgAAAAASUVORK5CYII='/%3E%3C/pattern%3E%3C/defs%3E%3Crect width='100%' height='100%' fill='url(%23p)'/%3E%3C/svg%3E"); /* 48 px tile */
4838
+ --clio-art-db-title-underline-tiled: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg'%3E%3Cdefs%3E%3Cpattern id='p' width='32' height='4' patternUnits='userSpaceOnUse'%3E%3Cimage image-rendering='pixelated' style='image-rendering:pixelated' width='32' height='4' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAEBAMAAAAdaSDnAAAAD1BMVEUAAADMZmbMmWbMmZnMZjOW1IuaAAAAAXRSTlMAQObYZgAAACBJREFUeJxjdGGAgP+MDAwM5/4rs0D5DCA+gxGMhw8AALzeA23Id2x2AAAAAElFTkSuQmCC'/%3E%3C/pattern%3E%3C/defs%3E%3Crect width='100%' height='100%' fill='url(%23p)'/%3E%3C/svg%3E"); /* 32 px tile */
2901
4839
  }
2902
4840
 
2903
4841
  /* ---- Window ----------------------------------------------------------------
@@ -2912,6 +4850,8 @@
2912
4850
  :root .window {
2913
4851
  --db-tl: url("art/drawingboard/window-tl.png");
2914
4852
  --db-top: url("art/drawingboard/window-top.png");
4853
+ --db-top-tiled: url("art/drawingboard/window-top-tiled.svg");
4854
+ --db-bottom-tiled: url("art/drawingboard/window-bottom-tiled.svg");
2915
4855
  --db-tr: url("art/drawingboard/window-tr.png");
2916
4856
  --db-ur: url("art/drawingboard/window-ur.png");
2917
4857
  --db-right: url("art/drawingboard/window-right.png");
@@ -2927,6 +4867,8 @@
2927
4867
  :root .window.inactive {
2928
4868
  --db-tl: url("art/drawingboard/window-tl-inactive.png");
2929
4869
  --db-top: url("art/drawingboard/window-top-inactive.png");
4870
+ --db-top-tiled: url("art/drawingboard/window-top-inactive-tiled.svg");
4871
+ --db-bottom-tiled: url("art/drawingboard/window-bottom-inactive-tiled.svg");
2930
4872
  --db-tr: url("art/drawingboard/window-tr-inactive.png");
2931
4873
  --db-ur: url("art/drawingboard/window-ur-inactive.png");
2932
4874
  --db-right: url("art/drawingboard/window-right-inactive.png");
@@ -2973,6 +4915,40 @@
2973
4915
  var(--db-bl) left 0 bottom 0 / 64px 32px no-repeat;
2974
4916
  }
2975
4917
 
4918
+ /* Collapsed (Infinite HD's collapse box, Mac OS 8.5 with the theme; frame
4919
+ collapsed): the theme draws the frame as for an empty window, the bottom
4920
+ corners and the foot's shadow under the title bar, which is drawn last. The
4921
+ box is the title bar and the foot's black line. Two layers do it: ::after is
4922
+ the title bar's area alone (its paper, the top edge and the top corners);
4923
+ ::before is everything outside that area (the corners' overrun, the bottom
4924
+ corners and the shadow). The edges tile from SVG patterns, which stop where
4925
+ their box does. The bottom right corner lies over the upper right edge here. */
4926
+ :root .window.collapsed {
4927
+ padding-bottom: 1px;
4928
+ }
4929
+
4930
+ :root .window.collapsed::after {
4931
+ clip-path: inset(10px 11px calc(100% - 32px) 8px);
4932
+ background:
4933
+ var(--db-tl) 4px 5px / 28px 27px no-repeat,
4934
+ var(--db-tr) right 1px top 0 / 16px 32px no-repeat,
4935
+ var(--db-top-tiled) 32px 10px / calc(100% - 49px) 22px no-repeat,
4936
+ url("art/drawingboard/paper.png") calc(14px - var(--clio-db-phase, 0px)) 32px / 128px 128px;
4937
+ }
4938
+
4939
+ :root .window.collapsed::before {
4940
+ inset: -10px -11px -18px -8px;
4941
+ clip-path: polygon(evenodd, 0 0, 100% 0, 100% 100%, 0 100%, 0 0,
4942
+ 8px 10px, calc(100% - 11px) 10px, calc(100% - 11px) 32px, 8px 32px, 8px 10px);
4943
+ background:
4944
+ var(--db-tl) 4px 5px / 28px 27px no-repeat,
4945
+ var(--db-tr) right 1px top 0 / 16px 32px no-repeat,
4946
+ var(--db-br) right 0 bottom 2px / 63px 62px no-repeat,
4947
+ var(--db-ur) right 4px top 32px / 13px 32px no-repeat,
4948
+ var(--db-bl) left 0 bottom 0 / 64px 32px no-repeat,
4949
+ var(--db-bottom-tiled) left 64px bottom 10px / calc(100% - 126px) 14px no-repeat;
4950
+ }
4951
+
2976
4952
  /* ---- Menus -----------------------------------------------------------------
2977
4953
  The shade: 2px of pencil (ppat 130, 131) down the right from 3px below the
2978
4954
  menu's top and along the foot from 4px in. A menu that is not a drop-down
@@ -3074,16 +5050,16 @@
3074
5050
  background-image: var(--clio-art-db-collapse);
3075
5051
  }
3076
5052
 
3077
- :root .title-bar > :is(button, .close, .close-box):is(:active, .active) {
5053
+ :root .title-bar > :is(button, .close, .close-box):is(:active:where(:not([data-clio-off])), .active) {
3078
5054
  background: var(--clio-art-db-close-on) 0 0 / 11px 11px no-repeat;
3079
5055
  box-shadow: none;
3080
5056
  }
3081
5057
 
3082
- :root .title-bar > :is(.resize, .resize-box, .zoom):is(:active, .active) {
5058
+ :root .title-bar > :is(.resize, .resize-box, .zoom):is(:active:where(:not([data-clio-off])), .active) {
3083
5059
  background: var(--clio-art-db-zoom-on) 0 0 / 11px 11px no-repeat;
3084
5060
  }
3085
5061
 
3086
- :root .title-bar > :is(.shade, .shade-box, .collapse):is(:active, .active) {
5062
+ :root .title-bar > :is(.shade, .shade-box, .collapse):is(:active:where(:not([data-clio-off])), .active) {
3087
5063
  background: var(--clio-art-db-collapse-on) 0 0 / 11px 11px no-repeat;
3088
5064
  }
3089
5065
 
@@ -3201,7 +5177,7 @@
3201
5177
 
3202
5178
  /* Disabled push button: not captured; the plain button's frame and face with
3203
5179
  the theme's grey label (inferred). */
3204
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):is(:disabled, .disabled) {
5180
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):is(:disabled, .disabled) {
3205
5181
  background: var(--clio-button-bg);
3206
5182
  color: #9f9a94;
3207
5183
  -webkit-text-fill-color: #9f9a94;
@@ -3229,12 +5205,12 @@
3229
5205
  background-image: var(--clio-art-db-check-mixed);
3230
5206
  }
3231
5207
 
3232
- :root input[type="checkbox"]:not(:disabled):active {
5208
+ :root input[type="checkbox"]:not(:disabled):active:where(:not([data-clio-off])) {
3233
5209
  background: var(--clio-art-db-check-pressed) 0 0 / 14px 11px no-repeat;
3234
5210
  box-shadow: none;
3235
5211
  }
3236
5212
 
3237
- :root input[type="checkbox"]:checked:not(:disabled):active {
5213
+ :root input[type="checkbox"]:checked:not(:disabled):active:where(:not([data-clio-off])) {
3238
5214
  background-image: var(--clio-art-db-check-on-pressed);
3239
5215
  }
3240
5216
 
@@ -3247,7 +5223,7 @@
3247
5223
  }
3248
5224
 
3249
5225
  :root input[type="radio"],
3250
- :root input[type="radio"]:not(:disabled):active {
5226
+ :root input[type="radio"]:not(:disabled):active:where(:not([data-clio-off])) {
3251
5227
  width: 16px;
3252
5228
  height: 12px;
3253
5229
  border: 0;
@@ -3260,7 +5236,7 @@
3260
5236
  background: var(--clio-art-db-radio-on) 0 0 / 16px 12px no-repeat;
3261
5237
  }
3262
5238
 
3263
- :root input[type="radio"]:checked:not(:disabled):active {
5239
+ :root input[type="radio"]:checked:not(:disabled):active:where(:not([data-clio-off])) {
3264
5240
  background: var(--clio-art-db-radio-on-pressed) 0 0 / 16px 12px no-repeat;
3265
5241
  }
3266
5242
 
@@ -3279,12 +5255,12 @@
3279
5255
  /* ---- Menus ------------------------------------------------------------------ */
3280
5256
  :root :is(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"]))::after,
3281
5257
  :root :is(.menu, [role="menu"]) > li > [aria-haspopup="true"]::after,
3282
- :root :is(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"])):is(:hover, :focus-within, .active)::after {
5258
+ :root :is(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"])):is(:hover, :focus-within, .active):where(:not([data-clio-blink]))::after {
3283
5259
  background-image: var(--clio-art-db-submenu);
3284
5260
  }
3285
5261
 
3286
- :root :is(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"]):is(:hover, :focus-within, .active)::before,
3287
- :root :is(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked):is(:hover, :focus-visible, .active)::before {
5262
+ :root :is(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"]):is(:hover, :focus-within, .active):where(:not([data-clio-blink]))::before,
5263
+ :root :is(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked):is(:hover, :focus-visible, .active):where(:not([data-clio-blink]))::before {
3288
5264
  filter: none;
3289
5265
  }
3290
5266
 
@@ -3307,7 +5283,7 @@
3307
5283
  line-height: 20px;
3308
5284
  }
3309
5285
 
3310
- :root :is([role="tablist"], .tabs) > :is([role="tab"], li, button):not(:disabled):active {
5286
+ :root :is([role="tablist"], .tabs) > :is([role="tab"], li, button):not(:disabled):active:where(:not([data-clio-off])) {
3311
5287
  border-image-source: var(--clio-art-db-tab-pressed);
3312
5288
  color: #313131;
3313
5289
  }
@@ -3346,6 +5322,10 @@
3346
5322
  border: 0;
3347
5323
  }
3348
5324
 
5325
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-track {
5326
+ border: 0;
5327
+ }
5328
+
3349
5329
  /* The scroll box is the theme's 15px picture at its shortest (7px end + 8px end). */
3350
5330
  :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb,
3351
5331
  :root:is(html.clio-scrollbars)::-webkit-scrollbar-thumb {
@@ -3353,6 +5333,11 @@
3353
5333
  min-height: 15px;
3354
5334
  }
3355
5335
 
5336
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-thumb {
5337
+ min-width: 15px;
5338
+ min-height: 15px;
5339
+ }
5340
+
3356
5341
  /* Tracks: #ece6e4 ruled by pattern pens (ppat 7045-7049) tiled from the
3357
5342
  track's start: the edges and a double centre line. Rules, not tokens: the
3358
5343
  pens read the scroller's own --clio-db-phase. */
@@ -3366,6 +5351,15 @@
3366
5351
  #ece6e4;
3367
5352
  }
3368
5353
 
5354
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-track {
5355
+ background:
5356
+ url("art/drawingboard/track-v-left.png") 0 0 / 1px 128px repeat-y,
5357
+ url("art/drawingboard/track-v-mid1.png") 7px 0 / 1px 256px repeat-y,
5358
+ url("art/drawingboard/track-v-mid2.png") 8px 0 / 1px 256px repeat-y,
5359
+ url("art/drawingboard/track-v-right.png") 15px 0 / 1px 128px repeat-y,
5360
+ #ece6e4;
5361
+ }
5362
+
3369
5363
  :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track:horizontal,
3370
5364
  :root:is(html.clio-scrollbars)::-webkit-scrollbar-track:horizontal {
3371
5365
  background:
@@ -3376,10 +5370,33 @@
3376
5370
  #ece6e4;
3377
5371
  }
3378
5372
 
5373
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-track {
5374
+ background:
5375
+ url("art/drawingboard/track-h-top.png") calc(0px - var(--clio-db-phase, 0px)) 0 / 128px 1px repeat-x,
5376
+ url("art/drawingboard/track-h-mid1.png") calc(0px - var(--clio-db-phase, 0px)) 7px / 256px 1px repeat-x,
5377
+ url("art/drawingboard/track-h-mid2.png") calc(0px - var(--clio-db-phase, 0px)) 8px / 256px 1px repeat-x,
5378
+ url("art/drawingboard/track-h-bottom.png") calc(0px - var(--clio-db-phase, 0px)) 15px / 128px 1px repeat-x,
5379
+ #ece6e4;
5380
+ }
5381
+
3379
5382
  :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button,
3380
5383
  :root:is(html.clio-scrollbars)::-webkit-scrollbar-button,
3381
5384
  :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:active,
3382
- :root:is(html.clio-scrollbars)::-webkit-scrollbar-button:active {
5385
+ :root:is(html.clio-scrollbars)::-webkit-scrollbar-button:active,
5386
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal,
5387
+ :root:is(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal {
5388
+ /* :horizontal outweighs the Platinum rule that moves that art a pixel down. */
5389
+ border: 0;
5390
+ background-color: transparent;
5391
+ background-position: 0 0;
5392
+ background-size: 16px 16px;
5393
+ box-shadow: none;
5394
+ }
5395
+
5396
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-button,
5397
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb > .clio-sb-button.clio-held,
5398
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *) > .clio-sb-anchor > .clio-sb.clio-sb-h > .clio-sb-button {
5399
+ /* :horizontal outweighs the Platinum rule that moves that art a pixel down. */
3383
5400
  border: 0;
3384
5401
  background-color: transparent;
3385
5402
  background-position: 0 0;
@@ -3414,7 +5431,7 @@
3414
5431
  rows; held: 7127, 7126, tiled from the second column and row). A default
3415
5432
  button instead wears a 3px pencil band (ppat 7085 rows, 7086 columns) whose
3416
5433
  inner line is the box's edge, 2px outside it. Insets are from the padding box. */
3417
- :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *)::before {
5434
+ :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button)::before {
3418
5435
  content: "";
3419
5436
  position: absolute;
3420
5437
  top: 0;
@@ -3430,14 +5447,14 @@
3430
5447
  pointer-events: none;
3431
5448
  }
3432
5449
 
3433
- :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *, :disabled, .disabled):is(:active, .active)::before {
5450
+ :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button, :disabled, .disabled):is(:active:where(:not([data-clio-off])), .active)::before {
3434
5451
  left: 0;
3435
5452
  background:
3436
5453
  url("art/drawingboard/pens/button-held-shade-right.png") right 0 top 0 / 1px 16px repeat-y,
3437
5454
  url("art/drawingboard/pens/button-held-shade-bottom.png") left 0 bottom 0 / 32px 1px repeat-x;
3438
5455
  }
3439
5456
 
3440
- :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):is(.default, .btn-default)::before {
5457
+ :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):is(.default, .btn-default)::before {
3441
5458
  inset: -3px;
3442
5459
  background:
3443
5460
  url("art/drawingboard/pens/button-default-left-3.png") left 0 bottom 3px / 1px 16px repeat-y,
@@ -3456,11 +5473,11 @@
3456
5473
 
3457
5474
  /* The pencil overruns at a push button's corners, outside its box: Button*
3458
5475
  pieces round a plain button, *Default pieces round the default one. */
3459
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *) {
5476
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button) {
3460
5477
  position: relative;
3461
5478
  }
3462
5479
 
3463
- :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *)::after {
5480
+ :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button)::after {
3464
5481
  content: "";
3465
5482
  position: absolute;
3466
5483
  inset: -6px; /* from the padding box: 5px outside the frame */
@@ -3472,7 +5489,7 @@
3472
5489
  pointer-events: none;
3473
5490
  }
3474
5491
 
3475
- :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *, :disabled, .disabled):is(:active, .active)::after {
5492
+ :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button, :disabled, .disabled):is(:active:where(:not([data-clio-off])), .active)::after {
3476
5493
  background:
3477
5494
  var(--clio-art-db-btn-tl) left 3px top 3px / 7px 3px no-repeat,
3478
5495
  var(--clio-art-db-btn-tr) right 2px top 3px / 4px 3px no-repeat,
@@ -3480,11 +5497,11 @@
3480
5497
  var(--clio-art-db-btn-bl) left 3px bottom 2px / 7px 4px no-repeat;
3481
5498
  }
3482
5499
 
3483
- :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):is(.default, .btn-default) {
5500
+ :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):is(.default, .btn-default) {
3484
5501
  border-image-source: none;
3485
5502
  }
3486
5503
 
3487
- :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):is(.default, .btn-default)::after {
5504
+ :root :is(button, .btn, .btn-default):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):is(.default, .btn-default)::after {
3488
5505
  background:
3489
5506
  url("art/drawingboard/pens/button-default-corner-tl.png") left 5px top 5px / 5px 5px no-repeat,
3490
5507
  url("art/drawingboard/pens/button-default-corner-tr.png") right 5px top 5px / 5px 5px no-repeat,
@@ -3515,15 +5532,193 @@
3515
5532
 
3516
5533
  /* ---- Antialiasing as Mac OS blends it: #333 labels on #cec6b5 (their solid
3517
5534
  pixels #313131, from a 16-bit buffer); grey when disabled. */
3518
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *),
3519
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):not(:disabled, .disabled):is(:active, .active) {
5535
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button),
5536
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):not(:disabled, .disabled):is(:active:where(:not([data-clio-off])), .active) {
3520
5537
  font-palette: --clio-aa-db-button;
3521
5538
  }
3522
5539
 
3523
- :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .control-strip *):is(:disabled, .disabled) {
5540
+ :root :is(button, .btn, .btn-default, input[type="button"], input[type="submit"], input[type="reset"]):not(.icon, [role="tab"], [role="menuitem"], .title-bar > *, .rounded-title > *, .control-strip *, .disclosure, .little-arrows > *, .help-button):is(:disabled, .disabled) {
3524
5541
  font-palette: --clio-aa-db-button-disabled;
3525
5542
  }
3526
5543
 
5544
+ /* ---- List view headers (Finder list view, Mac OS 8.5): a #9f9a94 pencil line
5545
+ above and below; plain headers #cdc6bd with a #555 line at the foot, the
5546
+ sorted one #9f9a94 with the #555 line at the top and #333 on its left; #888
5547
+ between columns. Colours are each line's dominant one: the theme draws
5548
+ these lines with pattern pens, not reproduced here. */
5549
+ :root .list-view th {
5550
+ background:
5551
+ linear-gradient(#9f9a94, #9f9a94) 0 0 / 100% 1px no-repeat,
5552
+ linear-gradient(#9f9a94, #9f9a94) 0 100% / 100% 1px no-repeat,
5553
+ linear-gradient(#555555, #555555) 0 calc(100% - 1px) / 100% 1px no-repeat,
5554
+ linear-gradient(#888888, #888888) 0 1px / 1px calc(100% - 2px) no-repeat,
5555
+ #cdc6bd;
5556
+ }
5557
+
5558
+ :root .list-view th[aria-sort]:not([aria-sort="none"]) {
5559
+ background:
5560
+ linear-gradient(#9f9a94, #9f9a94) 0 0 / 100% 1px no-repeat,
5561
+ linear-gradient(#555555, #555555) 0 1px / 100% 1px no-repeat,
5562
+ linear-gradient(#333333, #333333) 0 1px / 1px calc(100% - 2px) no-repeat,
5563
+ #9f9a94;
5564
+ }
5565
+
5566
+ :root .list-view th.sort-direction {
5567
+ background:
5568
+ linear-gradient(#555555, #555555) 100% 1px / 1px calc(100% - 2px) no-repeat,
5569
+ linear-gradient(#9f9a94, #9f9a94) 0 0 / 100% 1px no-repeat,
5570
+ linear-gradient(#9f9a94, #9f9a94) 0 100% / 100% 1px no-repeat,
5571
+ linear-gradient(#555555, #555555) 0 calc(100% - 1px) / 100% 1px no-repeat,
5572
+ linear-gradient(#888888, #888888) 0 1px / 1px calc(100% - 2px) no-repeat,
5573
+ #cdc6bd;
5574
+ }
5575
+
5576
+ :root .list-view {
5577
+ --clio-list-view-bg: #e7ded6;
5578
+ --clio-list-view-sorted-bg: #d6c6b5;
5579
+ }
5580
+
5581
+ :root input[type="range"]::-webkit-slider-runnable-track {
5582
+ border: 0;
5583
+ border-image: none;
5584
+ background: url("art/drawingboard/slider-track.png") calc(0px - var(--clio-db-phase, 0px)) 0 / 64px 1px repeat-x;
5585
+ }
5586
+
5587
+ :root input[type="range"]::-moz-range-track {
5588
+ border: 0;
5589
+ border-image: none;
5590
+ background: url("art/drawingboard/slider-track.png") calc(0px - var(--clio-db-phase, 0px)) 0 / 64px 1px repeat-x;
5591
+ }
5592
+
5593
+ /* Bevel buttons: drawn as the theme's push button (its pens, corner pixels,
5594
+ hatch and shade); the Navigation Services bevel buttons were not matched
5595
+ pen for pen (inferred). */
5596
+ :root .bevel {
5597
+ border-width: 1px;
5598
+ border-image: url("art/drawingboard/pens/button-corners.png") 5 / 5px stretch;
5599
+ background: var(--clio-button-bg);
5600
+ }
5601
+
5602
+ :root .bevel:is(:active:where(:not([data-clio-off])), .active, [aria-pressed="true"]):not(:disabled) {
5603
+ border-image-source: url("art/drawingboard/pens/button-held-corners.png");
5604
+ background: var(--clio-button-active-bg);
5605
+ }
5606
+
5607
+ /* Drawing Board's chosen items stay #313131 (underlined, not inverted) and its
5608
+ dimmed text is #8c8c8c. Browsers with COLRv1 draw the edge levels in the text
5609
+ colour; Safari's COLRv0 file draws them from these palettes. */
5610
+ :root :is(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a, span),
5611
+ :root :is(.menu, [role="menu"]) > li,
5612
+ :root :is(.menu, [role="menu"]) > li > :is(a, button) {
5613
+ font-palette: --clio-aa-313131 !important; /* outranks the shared chosen-item rule */
5614
+ }
5615
+
5616
+ :root :is(.menu, [role="menu"]) > li:is(.disabled, [aria-disabled="true"]),
5617
+ :root :is(.menu, [role="menu"]) > li > :is(a, button):is(:disabled, [aria-disabled="true"]) {
5618
+ font-palette: --clio-aa-8c8c8c !important;
5619
+ }
5620
+
5621
+ /* ---- Smart Scrolling (clio.js bars, data-clio-scrolling="smart") ----------
5622
+ Both arrows at the far end are one picture of the theme's (ScrollArrowsDbl,
5623
+ pxm# 334 and 324), each button showing its half (Mac OS 8.5 with the theme,
5624
+ Appearance > Options > Smart Scrolling, frame smart-scroll). Held, the
5625
+ picture's held state for that arrow; nothing to scroll, the dimmed one. */
5626
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-h.clio-sb-smart > .clio-sb-button {
5627
+ border: 0;
5628
+ background: url("art/drawingboard/parts/hpair.png") 0 0 / 32px 16px no-repeat;
5629
+ box-shadow: none;
5630
+ }
5631
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-h.clio-sb-smart > .clio-sb-button.clio-sb-inc { background-position: -16px 0; }
5632
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-h.clio-sb-smart > .clio-sb-dec.clio-held { background-image: url("art/drawingboard/parts/hpair-dec-on.png"); }
5633
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-h.clio-sb-smart > .clio-sb-inc.clio-held { background-image: url("art/drawingboard/parts/hpair-inc-on.png"); }
5634
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-h.clio-sb-smart.clio-sb-off > .clio-sb-button { background-image: url("art/drawingboard/parts/hpair-off.png"); }
5635
+
5636
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-v.clio-sb-smart > .clio-sb-button {
5637
+ border: 0;
5638
+ background: url("art/drawingboard/parts/vpair.png") 0 0 / 16px 32px no-repeat;
5639
+ box-shadow: none;
5640
+ }
5641
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-v.clio-sb-smart > .clio-sb-button.clio-sb-inc { background-position: 0 -16px; }
5642
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-v.clio-sb-smart > .clio-sb-dec.clio-held { background-image: url("art/drawingboard/parts/vpair-dec-on.png"); }
5643
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-v.clio-sb-smart > .clio-sb-inc.clio-held { background-image: url("art/drawingboard/parts/vpair-inc-on.png"); }
5644
+ :root .clio-sb-host > .clio-sb-anchor > .clio-sb.clio-sb-v.clio-sb-smart.clio-sb-off > .clio-sb-button { background-image: url("art/drawingboard/parts/vpair-off.png"); }
5645
+
5646
+ /* The open pop-up menu (Appearance > Appearance held; frame popup-open): its top
5647
+ on the button's with the current item there, as wide as the button less its
5648
+ 20px of arrows. */
5649
+ :root select {
5650
+ --clio-popup-menu-trim: 20px;
5651
+ --clio-popup-menu-align: top;
5652
+ }
5653
+
5654
+ /* In the open pop-up the top line is the pen shifted with the button's phase (a
5655
+ full line: the menu hangs from no bar), the text a pixel higher and 18px in,
5656
+ the check mark 1px in, and the chosen item's underline on its last rows. */
5657
+ :root ul.clio-popup-menu.menu { /* outweighs the menus' :is(.menu, ul[role="menu"]) */
5658
+ --clio-menu-item-active-bg:
5659
+ var(--clio-art-db-menu-underline-left) left 16px bottom 0 / 29px 3px no-repeat,
5660
+ var(--clio-art-db-menu-underline-right) right 15px bottom 0 / 36px 3px no-repeat,
5661
+ var(--clio-art-db-menu-underline-tiled) left 45px bottom 0 / calc(100% - 96px) 3px no-repeat;
5662
+ background:
5663
+ url("art/drawingboard/menu-top.png") calc(0px - var(--clio-db-phase, 0px)) 0 / 128px 1px repeat-x border-box,
5664
+ url("art/drawingboard/menu-left.png") 0 0 / 1px 128px repeat-y border-box,
5665
+ url("art/drawingboard/menu-right.png") right 0 top 4px / 1px 128px repeat-y border-box,
5666
+ url("art/drawingboard/menu-foot.png") calc(4px - var(--clio-db-phase, 0px)) 100% / 128px 1px repeat-x border-box,
5667
+ url("art/drawingboard/menu-paper.png") 0 0 / 64px 64px padding-box,
5668
+ #dddddd;
5669
+ }
5670
+
5671
+ :root .clio-popup-menu > li {
5672
+ min-height: 16px;
5673
+ padding-left: 18px;
5674
+ padding-bottom: 2px;
5675
+ line-height: 16px;
5676
+ }
5677
+
5678
+ :root .clio-popup-menu > li:is(.checked, [aria-checked="true"])::before {
5679
+ left: 1px;
5680
+ margin-top: -5px;
5681
+ }
5682
+
5683
+ /* With clio.js there (data-clio-popups), Drawing Board's pop-ups are not the
5684
+ browser's picker: clio.js draws the menu with the theme's paper, pens and
5685
+ shade, which a picker cannot carry. Without clio.js, base-select still does. */
5686
+ @supports (appearance: base-select) {
5687
+ @media (pointer: fine) {
5688
+ :root[data-clio-popups] :root select:not([multiple], [size]:not([size="1"])),
5689
+ :root[data-clio-popups]:root select:not([multiple], [size]:not([size="1"])) {
5690
+ appearance: none;
5691
+ }
5692
+ }
5693
+ }
5694
+
5695
+ /* The dragged outline: the plain band round the frame and shadow (inside the
5696
+ margin), with each corner's patch XORed in. */
5697
+ :root .clio-outline {
5698
+ mask:
5699
+ var(--clio-db-outline-tl) left 0 top 0 / 80px 80px no-repeat border-box exclude,
5700
+ var(--clio-db-outline-tr) right 0 top 0 / 80px 80px no-repeat border-box exclude,
5701
+ var(--clio-db-outline-bl) left 0 bottom 0 / 80px 80px no-repeat border-box exclude,
5702
+ var(--clio-db-outline-br) right 0 bottom 0 / 80px 80px no-repeat border-box exclude,
5703
+ linear-gradient(#000 0 0) content-box exclude,
5704
+ linear-gradient(#000 0 0) 12px 12px / calc(100% - 24px) calc(100% - 24px) no-repeat border-box;
5705
+ }
5706
+
5707
+ /* ---- Placard (Mac OS 8.5, the Appearance SDK's CDEF Tester, frames placard and
5708
+ placard-disabled): a #cebdb5 face in a pencil line whose shade drifts from #333 to
5709
+ #888 (drawn flat in its commonest shade, #555); disabled, a #cdc6bd face with a
5710
+ faint line along the top only. */
5711
+ :root .placard {
5712
+ border-color: #555555;
5713
+ background: #cebdb5;
5714
+ }
5715
+
5716
+ :root .placard:is(:disabled, [aria-disabled="true"], .window.inactive *) {
5717
+ border-color: #b6ada5 #cdc6bd #cdc6bd;
5718
+ background: #cdc6bd;
5719
+ color: #9f9a94;
5720
+ }
5721
+
3527
5722
  /* Adaptations the historical machines never needed. Historical sizes are
3528
5723
  calibration, not a cage: on a touch screen the controls grow to the
3529
5724
  "coarse pointer" sizes from AI System 6's fidelity contract, without any
@@ -3567,3 +5762,134 @@
3567
5762
  box-shadow: none;
3568
5763
  }
3569
5764
  }
5765
+
5766
+ /* Retina and other whole-number pixel ratios: every Mac pixel becomes a solid
5767
+ 2x2 or 3x3 block (nearest neighbour), as a 1x screen magnified would show it.
5768
+ At fractional ratios (1.25, 1.5, browser zoom) the browser's smoothing stays:
5769
+ nearest neighbour there gives uneven pixel widths. image-rendering inherits,
5770
+ so the page's own pictures, video and canvas are handed back to smoothing. */
5771
+ @media (resolution: 2dppx), (resolution: 3dppx), (resolution: 4dppx) {
5772
+ :root {
5773
+ image-rendering: pixelated;
5774
+ }
5775
+
5776
+ :where(img, picture, video, canvas, iframe, object, embed) {
5777
+ image-rendering: auto;
5778
+ }
5779
+ }
5780
+
5781
+ /* Optional chrome faces for Platinum and Drawing Board:
5782
+ data-clio-font="virtue" Virtue 3.2.1, Marty P. Pfeiffer's 1997-99 TrueType
5783
+ reworking of Charcoal, (c) Scooter Graphics
5784
+ (https://www.scootergraphics.com/). Ships as
5785
+ fonts/Virtue.woff2, unchanged, with the author's
5786
+ permission (THIRD-PARTY.md).
5787
+ data-clio-font="truth" Truth FB, David Berlow's own 2005 expansion of
5788
+ Charcoal, sold by Font Bureau. Not shipped: install
5789
+ it or add your own @font-face.
5790
+ Set the attribute on <html> or any ancestor. It changes Platinum and
5791
+ Drawing Board only; System 6 and 7 keep Chicago. Clio Sans '97 stays as the
5792
+ fallback. These are outline fonts drawn by the browser, not the measured
5793
+ pixels. */
5794
+ @font-face {
5795
+ font-family: Virtue;
5796
+ src: local("Virtue"), url("fonts/Virtue.woff2") format("woff2");
5797
+ font-display: swap;
5798
+ }
5799
+
5800
+ [data-clio-font="virtue"]:root,
5801
+ [data-clio-font="virtue"] :root,
5802
+ :root [data-clio-font="virtue"] {
5803
+ --clio-font-chrome: Virtue, "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5804
+ --clio-font-window-title: Virtue, "Clio Sans '97 Title", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5805
+ --clio-font-button: Virtue, "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5806
+ }
5807
+
5808
+ [data-clio-font="truth"]:root,
5809
+ [data-clio-font="truth"] :root,
5810
+ :root [data-clio-font="truth"] {
5811
+ --clio-font-chrome: "Truth FB", Truth, "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5812
+ --clio-font-window-title: "Truth FB", Truth, "Clio Sans '97 Title", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5813
+ --clio-font-button: "Truth FB", Truth, "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5814
+ }
5815
+
5816
+ /* Chinese, Japanese and Korean (owner decisions 9 and 10, 2026-11-14).
5817
+
5818
+ Measured: KanjiTalk 7.5.3 and Mac OS 9.0 with the Chinese Language Kits draw CJK text
5819
+ at the Roman geometry: 16px menu and text rows, the same baseline, 12px ideographs whose
5820
+ ink runs from 10px above the baseline to 1px below (tooling/emulator/measure-cjk.sh).
5821
+ So nothing moves; only the fonts change. A localized system's system font is the
5822
+ script's font, Latin included (KanjiTalk draws "Infinite HD" and OK in Osaka), so the
5823
+ CJK font leads every stack.
5824
+
5825
+ Each stack names the period bitmap interface font (Taipei, Beijing, Osaka, Seoul), then
5826
+ Clio's stand-in, Fusion Pixel 12px proportional (OFL-1.1, THIRD-PARTY.md) cut to the
5827
+ character set that bitmap font drew (Big5, GB 2312, JIS X 0208, KS X 1001), then an
5828
+ outline family of the period. The outline families come after the stand-in because
5829
+ current macOS still installs some of them (AppleGothic) as antialiased outlines.
5830
+ A browser fetches a stand-in only for an element in that language that has text in
5831
+ its unicode-range: pages without CJK text never load them. */
5832
+ @font-face {
5833
+ font-family: "Clio Pixel TC";
5834
+ src: url("fonts/FusionPixel12-TC.woff2") format("woff2");
5835
+ font-weight: 100 900;
5836
+ font-display: swap;
5837
+ unicode-range: U+20-F7, U+391-451, U+2013-203E, U+2103-2199, U+2460-247D, U+2500-2642, U+3000-3129, U+32A3, U+4E00-7E9C, U+7F36-8B9E, U+8C37-9483, U+9577-9FA4, U+FA0C-FA0D, U+FE30-FE4F, U+FF01-FFE3;
5838
+ }
5839
+
5840
+ @font-face {
5841
+ font-family: "Clio Pixel SC";
5842
+ src: url("fonts/FusionPixel12-SC.woff2") format("woff2");
5843
+ font-weight: 100 900;
5844
+ font-display: swap;
5845
+ unicode-range: U+20-1DC, U+391-451, U+2015-203B, U+2103-2193, U+2312, U+2460-2642, U+3000-3129, U+3220-3229, U+4E00-7DAE, U+7E3B-8C98, U+8D1D-8ECE, U+8F66-91DC, U+9274-99A8, U+9A6C-9B54, U+9C7C-9CE2, U+9E1F-9FA0, U+FF01-FF5E, U+FFE0-FFE5;
5846
+ }
5847
+
5848
+ @font-face {
5849
+ font-family: "Clio Pixel JA";
5850
+ src: url("fonts/FusionPixel12-JA.woff2") format("woff2");
5851
+ font-weight: 100 900;
5852
+ font-display: swap;
5853
+ unicode-range: U+20-F7, U+391-451, U+2010-203B, U+2103-21D4, U+2312, U+2500-266F, U+3000-30FE, U+4E00-7E9C, U+7F36-8B9A, U+8C37-9481, U+9577-9FA0, U+FF01-FFE5;
5854
+ }
5855
+
5856
+ @font-face {
5857
+ font-family: "Clio Pixel KO";
5858
+ src: url("fonts/FusionPixel12-KO.woff2") format("woff2");
5859
+ font-weight: 100 900;
5860
+ font-display: swap;
5861
+ unicode-range: U+20-167, U+391-451, U+2015-21D4, U+2312, U+2460-266D, U+3000-318E, U+327F, U+4E00-7E9C, U+7F36-8B9A, U+8C37-947F, U+9577-9C57, U+9CE5-9F9C, U+AC00-D79D, U+F900-FA0B, U+FF01-FF5E, U+FFE0-FFE6;
5862
+ }
5863
+
5864
+ :lang(zh) { --clio-font-cjk: Beijing, "Clio Pixel SC", Hei; }
5865
+ :is(:lang(zh-Hant), :lang(zh-TW), :lang(zh-HK), :lang(zh-MO)) { --clio-font-cjk: Taipei, "Clio Pixel TC", "Apple LiGothic"; }
5866
+ :lang(ja) { --clio-font-cjk: Osaka, "Clio Pixel JA"; }
5867
+ :lang(ko) { --clio-font-cjk: Seoul, "Clio Pixel KO", AppleGothic; }
5868
+
5869
+ /* Declared beside --clio-font-cjk, on every element in the language, so var() resolves there. */
5870
+ :is(:lang(zh), :lang(ja), :lang(ko)) {
5871
+ --clio-font-chrome: var(--clio-font-cjk), "Clio Sans '84", Chicago, "ChicagoFLF", Charcoal, Geneva, "Helvetica Neue", Arial, sans-serif;
5872
+ --clio-font-text: var(--clio-font-cjk), "Clio Text '84", Geneva, "Helvetica Neue", Arial, sans-serif;
5873
+ /* Small text keeps the 9px Latin face: the stand-in is a 12px font (KanjiTalk's Finder
5874
+ drew 8px kanji here, from a 9-point Osaka clio.css does not have). */
5875
+ --clio-font-small: "Clio Text '84 9", var(--clio-font-cjk), Geneva, "Helvetica Neue", Arial, sans-serif;
5876
+ --clio-font-display: var(--clio-font-cjk), Chicago, "ChicagoFLF", Charcoal, "Helvetica Neue", Arial, sans-serif;
5877
+ }
5878
+
5879
+ /* CJK on the Appearance Manager eras: the same order as 96-cjk.css over the
5880
+ Charcoal stacks. Measured on Mac OS 9.0 with the Chinese Language Kits: the Text
5881
+ control panel's Script pop-up draws 繁體中文 and 简体中文 in 16px rows, ink 2px below
5882
+ the row's top to 12px, 1-bit (frame p9-script-popup-open). */
5883
+ :is(:root :is(:lang(zh), :lang(ja), :lang(ko)), :root:is(:lang(zh), :lang(ja), :lang(ko))) {
5884
+ --clio-font-chrome: var(--clio-font-cjk), Charcoal, "Charcoal CY", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5885
+ --clio-font-display: var(--clio-font-cjk), Charcoal, "Charcoal CY", "Clio Sans '97 Display", "Clio Asap", "Helvetica Neue", Arial, sans-serif;
5886
+ --clio-font-window-title: var(--clio-font-cjk), Charcoal, "Charcoal CY", "Clio Sans '97 Title Exact", "Clio Sans '97 Title", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5887
+ --clio-font-button: var(--clio-font-cjk), Charcoal, "Charcoal CY", "Clio Sans '97 Exact", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5888
+ --clio-font-text: var(--clio-font-cjk), Geneva, "Clio Asap", "Helvetica Neue", Arial, sans-serif;
5889
+ --clio-font-small: Geneva, var(--clio-font-cjk), "Clio Asap", "Helvetica Neue", Arial, sans-serif;
5890
+ }
5891
+
5892
+ /* Drawing Board's own title stack (92-drawingboard.css), CJK first. */
5893
+ :is(:root :is(:lang(zh), :lang(ja), :lang(ko)), :root:is(:lang(zh), :lang(ja), :lang(ko))) {
5894
+ --clio-font-window-title: var(--clio-font-cjk), Charcoal, "Charcoal CY", "Clio Sans '97 Title", "Clio Sans '97", "Clio Asap", Geneva, "Helvetica Neue", Arial, sans-serif;
5895
+ }