clio.css 0.2.0 → 0.9.1

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 (192) hide show
  1. package/AGENTS.md +20 -4
  2. package/EVIDENCE.md +90 -30
  3. package/README.md +45 -23
  4. package/THIRD-PARTY.md +61 -10
  5. package/dist/art/drawingboard/alert-bl.png +0 -0
  6. package/dist/art/drawingboard/alert-bottom.png +0 -0
  7. package/dist/art/drawingboard/alert-br.png +0 -0
  8. package/dist/art/drawingboard/alert-left.png +0 -0
  9. package/dist/art/drawingboard/alert-right.png +0 -0
  10. package/dist/art/drawingboard/alert-tl.png +0 -0
  11. package/dist/art/drawingboard/alert-top.png +0 -0
  12. package/dist/art/drawingboard/alert-tr.png +0 -0
  13. package/dist/art/drawingboard/menu-corner-bl.png +0 -0
  14. package/dist/art/drawingboard/menu-corner-br.png +0 -0
  15. package/dist/art/drawingboard/menu-corner-tr.png +0 -0
  16. package/dist/art/drawingboard/menu-foot.png +0 -0
  17. package/dist/art/drawingboard/menu-left.png +0 -0
  18. package/dist/art/drawingboard/menu-paper.png +0 -0
  19. package/dist/art/drawingboard/menu-right.png +0 -0
  20. package/dist/art/drawingboard/menu-separator.png +0 -0
  21. package/dist/art/drawingboard/menu-shade-foot.png +0 -0
  22. package/dist/art/drawingboard/menu-shade-right.png +0 -0
  23. package/dist/art/drawingboard/menu-top.png +0 -0
  24. package/dist/art/drawingboard/menubar.png +0 -0
  25. package/dist/art/drawingboard/modal-bl.png +0 -0
  26. package/dist/art/drawingboard/modal-bottom.png +0 -0
  27. package/dist/art/drawingboard/modal-br.png +0 -0
  28. package/dist/art/drawingboard/modal-left.png +0 -0
  29. package/dist/art/drawingboard/modal-right.png +0 -0
  30. package/dist/art/drawingboard/modal-tl.png +0 -0
  31. package/dist/art/drawingboard/modal-top.png +0 -0
  32. package/dist/art/drawingboard/modal-tr.png +0 -0
  33. package/dist/art/drawingboard/paper.png +0 -0
  34. package/dist/art/drawingboard/parts/btn-bl.png +0 -0
  35. package/dist/art/drawingboard/parts/btn-br-held.png +0 -0
  36. package/dist/art/drawingboard/parts/btn-br.png +0 -0
  37. package/dist/art/drawingboard/parts/btn-tl.png +0 -0
  38. package/dist/art/drawingboard/parts/btn-tr.png +0 -0
  39. package/dist/art/drawingboard/parts/button-corner.png +0 -0
  40. package/dist/art/drawingboard/parts/check-disabled.png +0 -0
  41. package/dist/art/drawingboard/parts/check-mixed.png +0 -0
  42. package/dist/art/drawingboard/parts/check-on-disabled.png +0 -0
  43. package/dist/art/drawingboard/parts/check-on-pressed.png +0 -0
  44. package/dist/art/drawingboard/parts/check-on.png +0 -0
  45. package/dist/art/drawingboard/parts/check-pressed.png +0 -0
  46. package/dist/art/drawingboard/parts/check.png +0 -0
  47. package/dist/art/drawingboard/parts/close-on.png +0 -0
  48. package/dist/art/drawingboard/parts/close.png +0 -0
  49. package/dist/art/drawingboard/parts/collapse-on.png +0 -0
  50. package/dist/art/drawingboard/parts/collapse.png +0 -0
  51. package/dist/art/drawingboard/parts/def-bl.png +0 -0
  52. package/dist/art/drawingboard/parts/def-br.png +0 -0
  53. package/dist/art/drawingboard/parts/def-tl.png +0 -0
  54. package/dist/art/drawingboard/parts/def-tr.png +0 -0
  55. package/dist/art/drawingboard/parts/down-off.png +0 -0
  56. package/dist/art/drawingboard/parts/down-on.png +0 -0
  57. package/dist/art/drawingboard/parts/down.png +0 -0
  58. package/dist/art/drawingboard/parts/grow.png +0 -0
  59. package/dist/art/drawingboard/parts/left-off.png +0 -0
  60. package/dist/art/drawingboard/parts/left-on.png +0 -0
  61. package/dist/art/drawingboard/parts/left.png +0 -0
  62. package/dist/art/drawingboard/parts/menu-underline-left.png +0 -0
  63. package/dist/art/drawingboard/parts/menu-underline-right.png +0 -0
  64. package/dist/art/drawingboard/parts/menu-underline.png +0 -0
  65. package/dist/art/drawingboard/parts/popup-arrow-off.png +0 -0
  66. package/dist/art/drawingboard/parts/popup-arrow.png +0 -0
  67. package/dist/art/drawingboard/parts/popup-corner-off.png +0 -0
  68. package/dist/art/drawingboard/parts/popup-corner.png +0 -0
  69. package/dist/art/drawingboard/parts/progress-arrows.png +0 -0
  70. package/dist/art/drawingboard/parts/radio-disabled.png +0 -0
  71. package/dist/art/drawingboard/parts/radio-on-disabled.png +0 -0
  72. package/dist/art/drawingboard/parts/radio-on-pressed.png +0 -0
  73. package/dist/art/drawingboard/parts/radio-on.png +0 -0
  74. package/dist/art/drawingboard/parts/radio.png +0 -0
  75. package/dist/art/drawingboard/parts/right-off.png +0 -0
  76. package/dist/art/drawingboard/parts/right-on.png +0 -0
  77. package/dist/art/drawingboard/parts/right.png +0 -0
  78. package/dist/art/drawingboard/parts/submenu.png +0 -0
  79. package/dist/art/drawingboard/parts/tab-pressed.png +0 -0
  80. package/dist/art/drawingboard/parts/tab-selected.png +0 -0
  81. package/dist/art/drawingboard/parts/tab.png +0 -0
  82. package/dist/art/drawingboard/parts/thumb-bottom.png +0 -0
  83. package/dist/art/drawingboard/parts/thumb-hgrip.png +0 -0
  84. package/dist/art/drawingboard/parts/thumb-hstretch.png +0 -0
  85. package/dist/art/drawingboard/parts/thumb-left.png +0 -0
  86. package/dist/art/drawingboard/parts/thumb-right.png +0 -0
  87. package/dist/art/drawingboard/parts/thumb-top.png +0 -0
  88. package/dist/art/drawingboard/parts/thumb-vgrip.png +0 -0
  89. package/dist/art/drawingboard/parts/thumb-vstretch.png +0 -0
  90. package/dist/art/drawingboard/parts/title-underline-left.png +0 -0
  91. package/dist/art/drawingboard/parts/title-underline-right.png +0 -0
  92. package/dist/art/drawingboard/parts/title-underline.png +0 -0
  93. package/dist/art/drawingboard/parts/up-off.png +0 -0
  94. package/dist/art/drawingboard/parts/up-on.png +0 -0
  95. package/dist/art/drawingboard/parts/up.png +0 -0
  96. package/dist/art/drawingboard/parts/zoom-on.png +0 -0
  97. package/dist/art/drawingboard/parts/zoom.png +0 -0
  98. package/dist/art/drawingboard/pens/button-bottom.png +0 -0
  99. package/dist/art/drawingboard/pens/button-corners.png +0 -0
  100. package/dist/art/drawingboard/pens/button-default-bottom-2.png +0 -0
  101. package/dist/art/drawingboard/pens/button-default-bottom-3.png +0 -0
  102. package/dist/art/drawingboard/pens/button-default-bottom.png +0 -0
  103. package/dist/art/drawingboard/pens/button-default-corner-bl.png +0 -0
  104. package/dist/art/drawingboard/pens/button-default-corner-br.png +0 -0
  105. package/dist/art/drawingboard/pens/button-default-corner-tl.png +0 -0
  106. package/dist/art/drawingboard/pens/button-default-corner-tr.png +0 -0
  107. package/dist/art/drawingboard/pens/button-default-left-2.png +0 -0
  108. package/dist/art/drawingboard/pens/button-default-left-3.png +0 -0
  109. package/dist/art/drawingboard/pens/button-default-left.png +0 -0
  110. package/dist/art/drawingboard/pens/button-default-right-2.png +0 -0
  111. package/dist/art/drawingboard/pens/button-default-right-3.png +0 -0
  112. package/dist/art/drawingboard/pens/button-default-right.png +0 -0
  113. package/dist/art/drawingboard/pens/button-default-top-2.png +0 -0
  114. package/dist/art/drawingboard/pens/button-default-top-3.png +0 -0
  115. package/dist/art/drawingboard/pens/button-default-top.png +0 -0
  116. package/dist/art/drawingboard/pens/button-held-bottom.png +0 -0
  117. package/dist/art/drawingboard/pens/button-held-corners.png +0 -0
  118. package/dist/art/drawingboard/pens/button-held-left.png +0 -0
  119. package/dist/art/drawingboard/pens/button-held-right.png +0 -0
  120. package/dist/art/drawingboard/pens/button-held-shade-bottom.png +0 -0
  121. package/dist/art/drawingboard/pens/button-held-shade-right.png +0 -0
  122. package/dist/art/drawingboard/pens/button-held-top.png +0 -0
  123. package/dist/art/drawingboard/pens/button-left.png +0 -0
  124. package/dist/art/drawingboard/pens/button-right.png +0 -0
  125. package/dist/art/drawingboard/pens/button-shade-bottom.png +0 -0
  126. package/dist/art/drawingboard/pens/button-shade-right.png +0 -0
  127. package/dist/art/drawingboard/pens/button-top.png +0 -0
  128. package/dist/art/drawingboard/pens/field-bottom.png +0 -0
  129. package/dist/art/drawingboard/pens/field-corners.png +0 -0
  130. package/dist/art/drawingboard/pens/field-left.png +0 -0
  131. package/dist/art/drawingboard/pens/field-right.png +0 -0
  132. package/dist/art/drawingboard/pens/field-top.png +0 -0
  133. package/dist/art/drawingboard/pens/popup-bottom.png +0 -0
  134. package/dist/art/drawingboard/pens/popup-corners.png +0 -0
  135. package/dist/art/drawingboard/pens/popup-disabled-bottom.png +0 -0
  136. package/dist/art/drawingboard/pens/popup-disabled-corners.png +0 -0
  137. package/dist/art/drawingboard/pens/popup-disabled-left.png +0 -0
  138. package/dist/art/drawingboard/pens/popup-disabled-right.png +0 -0
  139. package/dist/art/drawingboard/pens/popup-disabled-top.png +0 -0
  140. package/dist/art/drawingboard/pens/popup-left.png +0 -0
  141. package/dist/art/drawingboard/pens/popup-right.png +0 -0
  142. package/dist/art/drawingboard/pens/popup-top.png +0 -0
  143. package/dist/art/drawingboard/tab-paper.png +0 -0
  144. package/dist/art/drawingboard/track-h-bottom.png +0 -0
  145. package/dist/art/drawingboard/track-h-mid1.png +0 -0
  146. package/dist/art/drawingboard/track-h-mid2.png +0 -0
  147. package/dist/art/drawingboard/track-h-top.png +0 -0
  148. package/dist/art/drawingboard/track-v-left.png +0 -0
  149. package/dist/art/drawingboard/track-v-mid1.png +0 -0
  150. package/dist/art/drawingboard/track-v-mid2.png +0 -0
  151. package/dist/art/drawingboard/track-v-right.png +0 -0
  152. package/dist/art/drawingboard/window-bl-inactive.png +0 -0
  153. package/dist/art/drawingboard/window-bl.png +0 -0
  154. package/dist/art/drawingboard/window-bottom-inactive.png +0 -0
  155. package/dist/art/drawingboard/window-bottom.png +0 -0
  156. package/dist/art/drawingboard/window-br-inactive.png +0 -0
  157. package/dist/art/drawingboard/window-br.png +0 -0
  158. package/dist/art/drawingboard/window-left-inactive.png +0 -0
  159. package/dist/art/drawingboard/window-left.png +0 -0
  160. package/dist/art/drawingboard/window-right-inactive.png +0 -0
  161. package/dist/art/drawingboard/window-right.png +0 -0
  162. package/dist/art/drawingboard/window-tl-inactive.png +0 -0
  163. package/dist/art/drawingboard/window-tl.png +0 -0
  164. package/dist/art/drawingboard/window-top-inactive.png +0 -0
  165. package/dist/art/drawingboard/window-top.png +0 -0
  166. package/dist/art/drawingboard/window-tr-inactive.png +0 -0
  167. package/dist/art/drawingboard/window-tr.png +0 -0
  168. package/dist/art/drawingboard/window-ur-inactive.png +0 -0
  169. package/dist/art/drawingboard/window-ur.png +0 -0
  170. package/dist/clio.css +1946 -155
  171. package/dist/clio.drawingboard.css +3569 -0
  172. package/dist/clio.drawingboard.min.css +2 -0
  173. package/dist/clio.min.css +2 -2
  174. package/dist/clio.platinum.css +809 -107
  175. package/dist/clio.platinum.min.css +2 -2
  176. package/dist/clio.system6.css +551 -32
  177. package/dist/clio.system6.min.css +2 -2
  178. package/dist/clio.system7.css +2172 -0
  179. package/dist/clio.system7.min.css +2 -0
  180. package/dist/components.json +555 -82
  181. package/dist/fonts/ClioSans84.woff2 +0 -0
  182. package/dist/fonts/ClioSans97.woff2 +0 -0
  183. package/dist/fonts/ClioSans97Display.woff2 +0 -0
  184. package/dist/fonts/ClioSans97Exact.woff2 +0 -0
  185. package/dist/fonts/ClioSans97Plain.woff2 +0 -0
  186. package/dist/fonts/ClioSans97Title.woff2 +0 -0
  187. package/dist/fonts/ClioSans97TitleExact.woff2 +0 -0
  188. package/dist/fonts/ClioSans97TitlePlain.woff2 +0 -0
  189. package/dist/fonts/ClioText84-9.woff2 +0 -0
  190. package/dist/fonts/ClioText84.woff2 +0 -0
  191. package/llms.txt +5 -4
  192. package/package.json +17 -4
@@ -0,0 +1,2172 @@
1
+ /*! clio.css 0.9.1 (System 7 default) | MIT | https://surfine.github.io/clio.css/
2
+ * Classic Mac OS interface CSS: System 6, System 7, Mac OS 8.5 Drawing Board and Mac OS 9 Platinum.
3
+ * Measured values traced to AI System 6; see EVIDENCE.md.
4
+ * Includes art from system.css (MIT) and pixel reconstructions of Apple control art; see THIRD-PARTY.md. */
5
+ /* Clio Sans '84: Chicago 12 rebuilt pixel for pixel from System 6.0.8
6
+ (fonts-src/clio-sans-84.txt). Every pixel is a square on a 1200-unit em, so
7
+ at 12px and its multiples it draws exactly the original bitmap. */
8
+ @font-face {
9
+ font-family: "Clio Sans '84";
10
+ src: url("fonts/ClioSans84.woff2") format("woff2");
11
+ font-display: swap;
12
+ }
13
+
14
+ /* Clio Text '84: Geneva 12, and Clio Text '84 9: Geneva 9, rebuilt the same
15
+ way (fonts-src/clio-text-84*.txt). */
16
+ @font-face {
17
+ font-family: "Clio Text '84";
18
+ src: url("fonts/ClioText84.woff2") format("woff2");
19
+ font-display: swap;
20
+ }
21
+
22
+ @font-face {
23
+ font-family: "Clio Text '84 9";
24
+ src: url("fonts/ClioText84-9.woff2") format("woff2");
25
+ font-display: swap;
26
+ }
27
+
28
+ /* Clio Sans '97: Charcoal 12 rebuilt the same way from Mac OS 9.0's Key Caps
29
+ (fonts-src/clio-sans-97.txt). Charcoal has one weight, so the face covers
30
+ every weight and the browser never thickens it. */
31
+ @font-face {
32
+ font-family: "Clio Sans '97";
33
+ src: url("fonts/ClioSans97.woff2") format("woff2") tech(color-COLRv1),
34
+ url("fonts/ClioSans97Plain.woff2") format("woff2");
35
+ font-weight: 100 900;
36
+ font-display: swap;
37
+ }
38
+
39
+ /* Clio Sans '97's antialiasing is COLRv1 colour layers. A browser without
40
+ COLRv1 (Safari) would paint every layer solid, so it gets the Plain file:
41
+ the outlines alone, each pixel at least half covered. */
42
+ /* Clio Sans '97 Title: the same face as window titles draw it (a few faint
43
+ pixels fewer than menus and buttons), for title bars only. */
44
+ @font-face {
45
+ font-family: "Clio Sans '97 Title";
46
+ src: url("fonts/ClioSans97Title.woff2") format("woff2") tech(color-COLRv1),
47
+ url("fonts/ClioSans97TitlePlain.woff2") format("woff2");
48
+ font-weight: 100 900;
49
+ font-display: swap;
50
+ }
51
+
52
+ /* Clio Sans '97 Exact and Clio Sans '97 Title Exact: the same glyphs with
53
+ each antialiasing level painted from a palette entry, so the palettes below
54
+ give, for clio.css's own title and button colours, the very pixels Mac OS
55
+ blends ((fg * a + bg * (255 - a)) >> 8). They ignore the text colour: a
56
+ page that recolours a title or a button label also sets --clio-font-window-title
57
+ or --clio-font-button back to a stack without "Exact", and gets Clio Sans
58
+ '97 in its colour, within one level of the real screen. */
59
+ @font-face {
60
+ font-family: "Clio Sans '97 Exact";
61
+ src: url("fonts/ClioSans97Exact.woff2") format("woff2") tech(color-COLRv1),
62
+ url("fonts/ClioSans97Plain.woff2") format("woff2");
63
+ font-weight: 100 900;
64
+ font-display: swap;
65
+ }
66
+
67
+ @font-face {
68
+ font-family: "Clio Sans '97 Title Exact";
69
+ src: url("fonts/ClioSans97TitleExact.woff2") format("woff2") tech(color-COLRv1),
70
+ url("fonts/ClioSans97TitlePlain.woff2") format("woff2");
71
+ font-weight: 100 900;
72
+ font-display: swap;
73
+ }
74
+
75
+ /* Written by tooling/aa-palettes.py. */
76
+ @font-palette-values --clio-aa-p9-title {
77
+ font-family: "Clio Sans '97 Title Exact";
78
+ override-colors:
79
+ 0 #bebebe,
80
+ 1 #b0b0b0,
81
+ 2 #a2a2a2,
82
+ 3 #959595,
83
+ 4 #878787,
84
+ 5 #7a7a7a,
85
+ 6 #6c6c6c,
86
+ 7 #5f5f5f,
87
+ 8 #515151,
88
+ 9 #444444,
89
+ 10 #363636,
90
+ 11 #282828,
91
+ 12 #1b1b1b,
92
+ 13 #0d0d0d,
93
+ 14 #000000;
94
+ }
95
+
96
+ @font-palette-values --clio-aa-p9-title-inactive {
97
+ font-family: "Clio Sans '97 Title Exact";
98
+ override-colors:
99
+ 0 #c5c5c5,
100
+ 1 #bfbfbf,
101
+ 2 #bababa,
102
+ 3 #b4b4b4,
103
+ 4 #aeaeae,
104
+ 5 #a9a9a9,
105
+ 6 #a3a3a3,
106
+ 7 #9e9e9e,
107
+ 8 #989898,
108
+ 9 #929292,
109
+ 10 #8d8d8d,
110
+ 11 #878787,
111
+ 12 #818181,
112
+ 13 #7c7c7c,
113
+ 14 #777777;
114
+ }
115
+
116
+ @font-palette-values --clio-aa-p9-button {
117
+ font-family: "Clio Sans '97 Exact";
118
+ override-colors:
119
+ 0 #cecece,
120
+ 1 #bfbfbf,
121
+ 2 #b0b0b0,
122
+ 3 #a2a2a2,
123
+ 4 #939393,
124
+ 5 #848484,
125
+ 6 #757575,
126
+ 7 #676767,
127
+ 8 #585858,
128
+ 9 #494949,
129
+ 10 #3a3a3a,
130
+ 11 #2c2c2c,
131
+ 12 #1d1d1d,
132
+ 13 #0e0e0e,
133
+ 14 #000000;
134
+ }
135
+
136
+ @font-palette-values --clio-aa-p9-button-held {
137
+ font-family: "Clio Sans '97 Exact";
138
+ override-colors:
139
+ 0 #707070,
140
+ 1 #7a7a7a,
141
+ 2 #848484,
142
+ 3 #8e8e8e,
143
+ 4 #999999,
144
+ 5 #a3a3a3,
145
+ 6 #adadad,
146
+ 7 #b7b7b7,
147
+ 8 #c1c1c1,
148
+ 9 #cbcbcb,
149
+ 10 #d6d6d6,
150
+ 11 #e0e0e0,
151
+ 12 #eaeaea,
152
+ 13 #f4f4f4,
153
+ 14 #ffffff;
154
+ }
155
+
156
+ @font-palette-values --clio-aa-p9-button-disabled {
157
+ font-family: "Clio Sans '97 Exact";
158
+ override-colors:
159
+ 0 #d5d5d5,
160
+ 1 #cecece,
161
+ 2 #c7c7c7,
162
+ 3 #c1c1c1,
163
+ 4 #bababa,
164
+ 5 #b3b3b3,
165
+ 6 #acacac,
166
+ 7 #a5a5a5,
167
+ 8 #9f9f9f,
168
+ 9 #989898,
169
+ 10 #919191,
170
+ 11 #8a8a8a,
171
+ 12 #848484,
172
+ 13 #7d7d7d,
173
+ 14 #777777;
174
+ }
175
+
176
+ @font-palette-values --clio-aa-db-button {
177
+ font-family: "Clio Sans '97 Exact";
178
+ override-colors:
179
+ 0 #c3bcac,
180
+ 1 #b9b2a3,
181
+ 2 #aea89a,
182
+ 3 #a49e91,
183
+ 4 #999488,
184
+ 5 #8f8a80,
185
+ 6 #848077,
186
+ 7 #7a766e,
187
+ 8 #6f6c65,
188
+ 9 #65625d,
189
+ 10 #5a5854,
190
+ 11 #504e4b,
191
+ 12 #454442,
192
+ 13 #3b3a39,
193
+ 14 #313131;
194
+ }
195
+
196
+ @font-palette-values --clio-aa-db-button-disabled {
197
+ font-family: "Clio Sans '97 Exact";
198
+ override-colors:
199
+ 0 #cac2b2,
200
+ 1 #c6bfaf,
201
+ 2 #c3bcad,
202
+ 3 #c0b9ab,
203
+ 4 #bdb6a9,
204
+ 5 #bab3a7,
205
+ 6 #b7b0a4,
206
+ 7 #b4ada2,
207
+ 8 #b1aaa0,
208
+ 9 #ada89e,
209
+ 10 #aaa59c,
210
+ 11 #a7a299,
211
+ 12 #a49f97,
212
+ 13 #a19c95,
213
+ 14 #9c9c94;
214
+ }
215
+
216
+ /* Clio Sans '97 Display: Charcoal's outlines, traced from Mac OS 9.0 drawing it
217
+ at 72 points (fonts/ClioSans97Display.woff2, tooling/trace-outline.py), for
218
+ every size that is not 12px or a multiple of it. */
219
+ @font-face {
220
+ font-family: "Clio Sans '97 Display";
221
+ src: url("fonts/ClioSans97Display.woff2") format("woff2");
222
+ font-weight: 100 900;
223
+ font-display: swap;
224
+ }
225
+
226
+ /* Other fonts, each with a licence that allows it:
227
+ - ChicagoFLF: a public-domain outline revival of Chicago (Robin Casady).
228
+ - Asap (variable, wdth + wght): SIL OFL 1.1, Omnibus-Type. The legal
229
+ stand-in for Charcoal that AI System 6 measured its Platinum title bar
230
+ against (width axis 113 for text, 123 for titles); now the fallback
231
+ behind Clio Sans '97.
232
+ Apple's own faces (Chicago, Geneva, Charcoal, Monaco) are never shipped;
233
+ the stacks below reach them only when the visitor already has them. */
234
+ @font-face {
235
+ font-family: "ChicagoFLF";
236
+ src: url("fonts/ChicagoFLF.woff2") format("woff2"),
237
+ url("fonts/ChicagoFLF.woff") format("woff");
238
+ font-display: swap;
239
+ }
240
+
241
+ @font-face {
242
+ font-family: "Clio Asap";
243
+ src: url("fonts/Asap-Variable.woff2") format("woff2");
244
+ font-style: normal;
245
+ font-weight: 100 900;
246
+ font-stretch: 75% 125%;
247
+ font-display: swap;
248
+ }
249
+
250
+ /* Tokens: Macintosh System 6 is the default era. Measured values come from
251
+ System 6.0.8 running in Infinite Mac, read from the emulator canvas 1:1
252
+ (tooling/capture-system6.mjs).
253
+ Every value below is traceable in EVIDENCE.md. A value marked [M] there was
254
+ measured from real pixels; [I] is inferred; [A] is a deliberate web
255
+ adaptation (contrast, focus, touch). Platinum re-declares these tokens in
256
+ 90-platinum.css under [data-era="platinum"]. */
257
+ :root,
258
+ [data-era="system6"],
259
+ [data-era="system7"] {
260
+ /* 1-bit palette. System 6 on a compact Mac had two colours. */
261
+ --clio-ink: #000000;
262
+ --clio-paper: #ffffff;
263
+ --clio-face: #ffffff;
264
+ /* [A] Disabled text: System 6 drew it through a 50% grey pattern; a solid
265
+ grey keeps 5.6:1 on white instead of a dither the browser would blur. */
266
+ --clio-disabled: #696969;
267
+ /* Dimmed text is drawn through QuickDraw's 50% gray pattern, aligned to the
268
+ screen: the ink where x + y is odd survives (measured, File menu). The
269
+ pattern is fixed to the viewport the same way; #696969 is only the
270
+ fallback colour where background-clip: text is missing. */
271
+ --clio-disabled-dither: var(--clio-art-s6-gray50);
272
+ --clio-disabled-fill: transparent;
273
+ --clio-selection-bg: #000000;
274
+ --clio-selection-fg: #ffffff;
275
+
276
+ /* Type. Chicago 12 is the system font; Geneva is the application font. */
277
+ --clio-font-chrome: "Clio Sans '84", Chicago, "ChicagoFLF", Charcoal, Geneva, "Helvetica Neue", Arial, sans-serif;
278
+ --clio-font-text: "Clio Text '84", Geneva, "Helvetica Neue", Arial, sans-serif;
279
+ /* Geneva 9: the Finder info line, icon names, status lines. */
280
+ --clio-font-small: "Clio Text '84 9", Geneva, "Helvetica Neue", Arial, sans-serif;
281
+ --clio-text-smoothing: none;
282
+ --clio-font-mono: Monaco, Menlo, Consolas, "Courier New", monospace;
283
+ /* Chrome type at sizes other than 12px and its multiples (.display): an
284
+ outline face, smoothed. */
285
+ --clio-font-display: Chicago, "ChicagoFLF", Charcoal, "Helvetica Neue", Arial, sans-serif;
286
+ --clio-font-size: 12px;
287
+ /* A bitmap face: no antialiasing, so a glyph on a half pixel stays 1-bit. */
288
+ --clio-font-smoothing: none;
289
+ /* Geneva 9: the Finder info line and icon names. */
290
+ --clio-font-size-small: 9px;
291
+ --clio-chrome-weight: 400;
292
+ --clio-font-stretch-text: normal;
293
+ --clio-font-stretch-title: normal;
294
+
295
+ /* Geometry */
296
+ --clio-line: 1px;
297
+ --clio-border: 1px solid var(--clio-ink);
298
+ --clio-radius: 0;
299
+ --clio-control-height: 20px;
300
+ --clio-field-height: 20px;
301
+ --clio-row-height: 16px;
302
+ --clio-gap: 8px;
303
+
304
+ /* Focus: [A] the era had no keyboard focus ring for buttons. A dotted frame
305
+ is how System 6 drew a dragged outline, so it reads as native and cannot
306
+ be confused with the default button's solid ring. */
307
+ --clio-focus-outline: 1px dotted var(--clio-ink);
308
+ --clio-focus-offset: 2px;
309
+
310
+ /* Desktop */
311
+ --clio-desktop: var(--clio-art-s6-desktop) 0 0 / 2px 2px repeat, #808080;
312
+
313
+ /* Window frame and title bar [M: measured at the emulator's exact 2x] */
314
+ --clio-window-bg: var(--clio-paper);
315
+ --clio-pane-bg: var(--clio-paper);
316
+ --clio-window-border: 1px solid var(--clio-ink);
317
+ --clio-window-shadow: 1px 1px 0 var(--clio-ink);
318
+ --clio-window-padding: 0;
319
+ --clio-titlebar-height: 17px;
320
+ --clio-titlebar-margin: 1px 0 0;
321
+ --clio-titlebar-padding: 2px 1px;
322
+ --clio-titlebar-border: 1px solid var(--clio-ink);
323
+ --clio-titlebar-row: 12px;
324
+ --clio-titlebar-stripe: 2px;
325
+ --clio-titlebar-bg:
326
+ linear-gradient(to bottom, var(--clio-ink) 0 1px, transparent 1px 2px)
327
+ 0 0 / 100% var(--clio-titlebar-stripe) repeat-y content-box content-box,
328
+ var(--clio-paper);
329
+ --clio-titlebar-inactive-bg: var(--clio-paper);
330
+ --clio-title-font-size: 12px;
331
+ --clio-title-bg: var(--clio-paper);
332
+ --clio-title-fg: var(--clio-ink);
333
+ --clio-title-inactive-fg: var(--clio-ink);
334
+ --clio-title-padding: 0 0.5em;
335
+ --clio-titlebar-slot: 18px;
336
+ --clio-titlebar-shade-slot: 0px;
337
+ --clio-shade-display: none;
338
+ --clio-box-size: 11px;
339
+ --clio-box-inset: 7px;
340
+ /* 1px of paper between a box and the stripes (HD window, 6.0.8). */
341
+ --clio-box-isolation: 1px;
342
+
343
+ /* Menus */
344
+ --clio-menubar-height: 20px;
345
+ --clio-menubar-bg: var(--clio-paper);
346
+ --clio-menubar-border: 1px solid var(--clio-ink);
347
+ --clio-menubar-shadow: none;
348
+ --clio-menubar-padding: 0 8px;
349
+ /* "File" highlight is 41px wide: about 9px each side of the word. */
350
+ --clio-menu-title-padding: 0 9px;
351
+ /* The open title's highlight leaves the bar's top row white. */
352
+ --clio-menu-title-inset: 1px;
353
+ --clio-menu-title-active-bg: var(--clio-ink);
354
+ --clio-menu-title-active-fg: var(--clio-paper);
355
+ --clio-menu-title-active-shadow: none;
356
+ --clio-menu-bg: var(--clio-paper);
357
+ --clio-menu-border: 1px solid var(--clio-ink);
358
+ /* A menu hangs from the bar's own rule; it draws no top line. */
359
+ --clio-menu-border-top-width: 0;
360
+ --clio-menu-shadow: 1px 1px 0 var(--clio-ink);
361
+ --clio-menu-item-height: 16px;
362
+ --clio-menu-item-padding: 0 12px 0 13px;
363
+ --clio-menu-item-weight: 400;
364
+ --clio-menu-item-active-bg: var(--clio-ink);
365
+ --clio-menu-item-active-fg: var(--clio-paper);
366
+ --clio-menu-item-active-shadow: none;
367
+ /* A full 16px row with a 1-on 1-off dotted rule on its ninth line. */
368
+ --clio-menu-separator:
369
+ repeating-linear-gradient(to right, var(--clio-ink) 0 1px, transparent 1px 2px) 0 8px / 100% 1px no-repeat;
370
+ --clio-menu-separator-height: 16px;
371
+
372
+ /* Push buttons */
373
+ --clio-button-bg: var(--clio-paper);
374
+ --clio-button-fg: var(--clio-ink);
375
+ --clio-button-border: 1px solid var(--clio-ink);
376
+ /* 20px tall; the corner steps in 3, 1, 1 pixels on its first three rows
377
+ (OK and Cancel, 6.0.8), which a 4.5px radius reproduces exactly. */
378
+ /* The frame and the default ring are the real pixel staircases, cut from
379
+ System 6.0.8's Alert and Save dialog (tooling/frame-art.py) and drawn with
380
+ border-image; border-radius would antialias an arc. */
381
+ --clio-button-radius: 0;
382
+ --clio-button-frame: var(--clio-art-frame-s6-button);
383
+ --clio-button-frame-held: var(--clio-art-frame-s6-button-held);
384
+ --clio-button-frame-slice: 4;
385
+ --clio-ring-frame: var(--clio-art-frame-s6-ring);
386
+ --clio-ring-frame-slice: 7;
387
+ --clio-popup-frame: none;
388
+ --clio-popup-frame-slice: 3;
389
+ --clio-button-shadow: 0 0 0 0 transparent;
390
+ --clio-button-padding: 0 12px;
391
+ --clio-button-min-width: 59px;
392
+ --clio-button-weight: 400;
393
+ --clio-button-active-bg: transparent; /* the held frame carries the ink face */
394
+ --clio-button-active-fg: var(--clio-paper);
395
+ --clio-button-active-shadow: 0 0 0 0 transparent;
396
+ /* Default button: Inside Macintosh's recipe is PenSize(3,3) around the
397
+ button inset by -4, so a 1px gap then a 3px ring. */
398
+ --clio-button-default-gap: 1px;
399
+ --clio-button-default-width: 3px;
400
+ --clio-button-default-radius: 8px;
401
+ --clio-button-disabled-fg: var(--clio-disabled);
402
+ --clio-button-disabled-border: 1px solid var(--clio-ink);
403
+
404
+ /* Check boxes and radio buttons */
405
+ --clio-check-size: 12px;
406
+ --clio-check-bg: var(--clio-paper);
407
+ --clio-check-border: 1px solid var(--clio-ink);
408
+ --clio-check-shadow: none;
409
+ --clio-check-mark: var(--clio-art-s6-check) 0 0 / 12px 12px no-repeat;
410
+ --clio-check-mark-origin: border-box;
411
+ --clio-check-pressed-border-width: 2px;
412
+ --clio-radio-size: 12px;
413
+ --clio-radio-off: var(--clio-art-s6-radio) 0 0 / 12px 12px no-repeat;
414
+ --clio-radio-on: var(--clio-art-s6-radio-dot) 3px 3px / 6px 6px no-repeat, var(--clio-art-s6-radio) 0 0 / 12px 12px no-repeat;
415
+ --clio-radio-pressed: var(--clio-art-s6-radio-focus) 0 0 / 12px 12px no-repeat;
416
+ --clio-radio-pressed-on: var(--clio-art-s6-radio-dot) 3px 3px / 6px 6px no-repeat, var(--clio-art-s6-radio-focus) 0 0 / 12px 12px no-repeat;
417
+
418
+ /* Text fields */
419
+ --clio-field-bg: var(--clio-paper);
420
+ --clio-field-border: 1px solid var(--clio-ink);
421
+ --clio-field-shadow: none;
422
+ /* Edit text: 1px frame, text inset 3px (Control Panel RAM cache field). */
423
+ --clio-field-padding: 3px;
424
+ --clio-field-focus-shadow: none;
425
+
426
+ /* Pop-up menus */
427
+ --clio-popup-bg: var(--clio-paper);
428
+ --clio-popup-border: 1px solid var(--clio-ink);
429
+ --clio-popup-radius: 0;
430
+ --clio-popup-shadow: 1px 1px 0 var(--clio-ink);
431
+ /* System 6 pop-up (Standard File folder menu, 6.0.8): an 18px box, 1px
432
+ frame, 1px shadow, no arrow; held, it inverts. */
433
+ --clio-popup-height: 18px;
434
+ --clio-popup-padding: 0 8px;
435
+ --clio-popup-arrow: none;
436
+ --clio-popup-weight: 400;
437
+
438
+ /* Scroll bars */
439
+ /* The lane line plus 14px; the window frame is the 16th line. The lane is
440
+ QuickDraw's ltGray, one dot in four. */
441
+ --clio-scrollbar-size: 15px;
442
+ --clio-scrollbar-track: var(--clio-art-s6-ltgray) 0 0 / 4px 2px repeat, #ffffff;
443
+ --clio-scrollbar-track-shadow: none;
444
+ --clio-scrollbar-thumb-bg: var(--clio-paper);
445
+ --clio-scrollbar-thumb-border: 1px solid var(--clio-ink);
446
+ --clio-scrollbar-thumb-shadow: none;
447
+ --clio-scrollbar-button-bg: var(--clio-paper);
448
+ --clio-scrollbar-button-shadow: none;
449
+ --clio-scrollbar-up: var(--clio-art-s6-up);
450
+ --clio-scrollbar-up-on: var(--clio-art-s6-up-on);
451
+ --clio-scrollbar-down: var(--clio-art-s6-down);
452
+ --clio-scrollbar-down-on: var(--clio-art-s6-down-on);
453
+ --clio-scrollbar-left: var(--clio-art-s6-left);
454
+ --clio-scrollbar-left-on: var(--clio-art-s6-left-on);
455
+ --clio-scrollbar-right: var(--clio-art-s6-right);
456
+ --clio-scrollbar-right-on: var(--clio-art-s6-right-on);
457
+
458
+ /* Dialogs */
459
+ --clio-dialog-bg: var(--clio-paper);
460
+ /* Modal frame (stop alert, 6.0.8): 1px ink, 2px paper, 2px ink; no shadow. */
461
+ --clio-modal-border: 1px solid var(--clio-ink);
462
+ --clio-modal-frame: inset 0 0 0 2px var(--clio-paper), inset 0 0 0 4px var(--clio-ink);
463
+ --clio-modal-padding: 18px 20px;
464
+ --clio-plain-dialog-border: 1px solid var(--clio-ink);
465
+ --clio-plain-dialog-shadow: 2px 2px 0 var(--clio-ink);
466
+
467
+ /* Bars, lists, groups, progress, tabs */
468
+ --clio-details-bg: var(--clio-paper);
469
+ /* Finder's info line: 17 rows of Geneva 9, closed by 1px ink, 1px paper,
470
+ 1px ink. */
471
+ --clio-details-border: 3px double var(--clio-ink);
472
+ --clio-details-font-size: 9px;
473
+ --clio-details-height: 17px;
474
+ --clio-details-padding: 0 15px;
475
+ --clio-scrollbar-corner: var(--clio-art-s6-grow) 0 0 / 14px 14px no-repeat, var(--clio-paper);
476
+ --clio-list-bg: var(--clio-paper);
477
+ --clio-list-border: 1px solid var(--clio-ink);
478
+ --clio-list-shadow: none;
479
+ --clio-list-row: 16px;
480
+ --clio-group-border: 1px solid var(--clio-ink);
481
+ --clio-group-shadow: none;
482
+ --clio-group-bg: transparent;
483
+ --clio-progress-height: 12px;
484
+ --clio-progress-bg: var(--clio-paper);
485
+ --clio-progress-border: 1px solid var(--clio-ink);
486
+ --clio-progress-shadow: none;
487
+ /* Finder copy progress (6.0.8): 12px, 1px frame, dkGray fill. */
488
+ --clio-progress-fill: var(--clio-art-s6-dkgray) 0 0 / 4px 2px repeat, var(--clio-ink);
489
+ --clio-tab-height: 20px;
490
+ --clio-tab-bg: var(--clio-paper);
491
+ --clio-tab-active-bg: var(--clio-paper);
492
+ --clio-tab-panel-bg: var(--clio-paper);
493
+ --clio-tab-panel-border: 1px solid var(--clio-ink);
494
+ --clio-label-bg: var(--clio-paper);
495
+ --clio-label-fg: var(--clio-ink);
496
+ --clio-label-selected-bg: var(--clio-ink);
497
+ --clio-label-selected-fg: var(--clio-paper);
498
+
499
+ /* Control Strip: System 6 had none; drawn here in its ink and paper, at the
500
+ Mac OS 9 geometry (adapted). */
501
+ --clio-strip-height: 24px;
502
+ --clio-strip-bg: var(--clio-paper);
503
+ --clio-strip-line: 1px solid var(--clio-ink);
504
+ --clio-strip-cell-shadow: none;
505
+ --clio-strip-sunken-shadow: none;
506
+ --clio-strip-sunken-lines: linear-gradient(transparent, transparent);
507
+ --clio-strip-pressed-bg: var(--clio-ink);
508
+ --clio-strip-pressed-shadow: inset 0 0 0 2px var(--clio-paper);
509
+ --clio-strip-cap-width: 13px;
510
+ --clio-strip-scroll-width: 13px;
511
+ --clio-strip-module-width: 30px;
512
+ --clio-strip-icon-inset: 2px;
513
+ --clio-strip-menu-top: 7px;
514
+ --clio-strip-menu-inset: 4px;
515
+ --clio-strip-handle-width: 18px;
516
+ --clio-strip-tab-width: 18px;
517
+ --clio-strip-cap: var(--clio-art-s6-strip-cap);
518
+ --clio-strip-back: var(--clio-art-s6-strip-back);
519
+ --clio-strip-forward: var(--clio-art-s6-strip-forward);
520
+ --clio-strip-menu: var(--clio-art-s6-strip-menu);
521
+ --clio-strip-handle: var(--clio-art-s6-strip-handle);
522
+ --clio-strip-tab: var(--clio-art-s6-strip-tab);
523
+ }
524
+
525
+ /* Inline art. Pixel-grid SVGs, never Apple bitmaps: the System 6 check, radio
526
+ ring and dot come from system.css (MIT, Sakun Acharige); Platinum's art lives
527
+ in 90-platinum.css; everything here is drawn for clio.css. See
528
+ THIRD-PARTY.md. */
529
+ :root {
530
+ --clio-art-s6-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' shape-rendering='crispEdges'%3E%3Cpath d='M0 0h1v1h-1zM1 1h1v1h-1zM2 2h1v1h-1zM3 3h1v1h-1zM4 4h1v1h-1zM5 5h1v1h-1zM6 6h1v1h-1zM7 7h1v1h-1zM8 8h1v1h-1zM9 9h1v1h-1zM10 10h1v1h-1zM11 11h1v1h-1zM11 0h1v1h-1zM10 1h1v1h-1zM9 2h1v1h-1zM8 3h1v1h-1zM7 4h1v1h-1zM6 5h1v1h-1zM5 6h1v1h-1zM4 7h1v1h-1zM3 8h1v1h-1zM2 9h1v1h-1zM1 10h1v1h-1zM0 11h1v1h-1z'/%3E%3C/svg%3E");
531
+ --clio-art-s6-radio: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' shape-rendering='crispEdges'%3E%3Cpath d='M4 0h4v1H4zM0 4h1v4H0zM11 4h1v4h-1zM2 1h2v1H2zM8 1h2v1H8zM10 2h1v2h-1zM1 2h1v2H1zM4 11h4v1H4zM2 10h2v1H2zM8 10h2v1H8zM10 8h1v2h-1zM1 8h1v2H1z'/%3E%3C/svg%3E");
532
+ --clio-art-s6-radio-focus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' shape-rendering='crispEdges'%3E%3Cpath d='M4 0h4v2H4zM0 4h2v4H0zM10 4h2v4h-2zM2 1h2v2H2zM8 1h2v2H8zM9 2h2v2H9zM1 2h2v2H1zM4 10h4v2H4zM2 9h2v2H2zM8 9h2v2H8zM9 8h2v2H9zM1 8h2v2H1z'/%3E%3C/svg%3E");
533
+ --clio-art-s6-radio-dot: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='6' shape-rendering='crispEdges'%3E%3Cpath d='M1 0h4v1H1zM1 5h4v1H1zM0 1h6v4H0z'/%3E%3C/svg%3E");
534
+ --clio-art-s6-submenu: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='11'%3E%3Cpath d='m0 0 6 5.5L0 11Z'/%3E%3C/svg%3E");
535
+ --clio-art-s6-submenu-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='11'%3E%3Cpath fill='%23fff' d='m0 0 6 5.5L0 11Z'/%3E%3C/svg%3E");
536
+ --clio-art-s6-desktop: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2' height='2' shape-rendering='crispEdges'%3E%3Cpath d='M0 0h1v1H0zM1 1h1v1H1z'/%3E%3Cpath fill='%23fff' d='M1 0h1v1H1zM0 1h1v1H0z'/%3E%3C/svg%3E");
537
+ /* Measured from System 6.0.8 (tooling/s6-art.py). */
538
+ --clio-art-s6-up: 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='M6 2h1v1h-1zM5 3h3v1h-3zM4 4h5v1h-5zM3 5h7v1h-7zM2 6h9v1h-9zM4 7h5v1h-5zM4 8h5v1h-5zM4 9h5v1h-5zM4 10h5v1h-5z'/%3E%3Cpath fill='%23000' d='M6 1h1v1h-1zM5 2h1v1h-1zM7 2h1v1h-1zM4 3h1v1h-1zM8 3h1v1h-1zM3 4h1v1h-1zM9 4h1v1h-1zM2 5h1v1h-1zM10 5h1v1h-1zM1 6h1v1h-1zM11 6h1v1h-1zM0 7h4v1h-4zM9 7h4v1h-4zM3 8h1v1h-1zM9 8h1v1h-1zM3 9h1v1h-1zM9 9h1v1h-1zM3 10h1v1h-1zM9 10h1v1h-1zM3 11h7v1h-7z'/%3E%3C/svg%3E");
539
+ --clio-art-s6-up-on: 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='M5 2h3v1h-3zM4 3h5v1h-5zM3 4h7v1h-7zM2 5h9v1h-9zM1 6h11v1h-11zM0 7h13v1h-13zM3 8h7v1h-7zM3 9h7v1h-7zM3 10h7v1h-7zM3 11h7v1h-7z'/%3E%3C/svg%3E");
540
+ --clio-art-s6-down: 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='M4 3h5v1h-5zM4 4h5v1h-5zM4 5h5v1h-5zM4 6h5v1h-5zM2 7h9v1h-9zM3 8h7v1h-7zM4 9h5v1h-5zM5 10h3v1h-3zM6 11h1v1h-1z'/%3E%3Cpath fill='%23000' d='M3 2h7v1h-7zM3 3h1v1h-1zM9 3h1v1h-1zM3 4h1v1h-1zM9 4h1v1h-1zM3 5h1v1h-1zM9 5h1v1h-1zM0 6h4v1h-4zM9 6h4v1h-4zM1 7h1v1h-1zM11 7h1v1h-1zM2 8h1v1h-1zM10 8h1v1h-1zM3 9h1v1h-1zM9 9h1v1h-1zM4 10h1v1h-1zM8 10h1v1h-1zM5 11h1v1h-1zM7 11h1v1h-1zM6 12h1v1h-1z'/%3E%3C/svg%3E");
541
+ --clio-art-s6-down-on: 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='M3 2h7v1h-7zM3 3h7v1h-7zM3 4h7v1h-7zM3 5h7v1h-7zM0 6h13v1h-13zM1 7h11v1h-11zM2 8h9v1h-9zM3 9h7v1h-7zM4 10h5v1h-5zM5 11h3v1h-3z'/%3E%3C/svg%3E");
542
+ --clio-art-s6-left: 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='M5 2h1v1h-1zM4 3h2v1h-2zM3 4h7v1h-7zM2 5h8v1h-8zM1 6h9v1h-9zM2 7h8v1h-8zM3 8h7v1h-7zM4 9h2v1h-2zM5 10h1v1h-1z'/%3E%3Cpath fill='%23000' d='M6 0h1v1h-1zM5 1h2v1h-2zM4 2h1v1h-1zM6 2h1v1h-1zM3 3h1v1h-1zM6 3h5v1h-5zM2 4h1v1h-1zM10 4h1v1h-1zM1 5h1v1h-1zM10 5h1v1h-1zM0 6h1v1h-1zM10 6h1v1h-1zM1 7h1v1h-1zM10 7h1v1h-1zM2 8h1v1h-1zM10 8h1v1h-1zM3 9h1v1h-1zM6 9h5v1h-5zM4 10h1v1h-1zM6 10h1v1h-1zM5 11h2v1h-2zM6 12h1v1h-1z'/%3E%3C/svg%3E");
543
+ --clio-art-s6-left-on: 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='M6 0h1v1h-1zM5 1h2v1h-2zM4 2h3v1h-3zM3 3h8v1h-8zM2 4h9v1h-9zM1 5h10v1h-10zM1 6h10v1h-10zM1 7h10v1h-10zM2 8h9v1h-9zM3 9h8v1h-8zM4 10h3v1h-3zM5 11h2v1h-2zM6 12h1v1h-1z'/%3E%3C/svg%3E");
544
+ --clio-art-s6-right: 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='M8 2h1v1h-1zM8 3h2v1h-2zM4 4h7v1h-7zM4 5h8v1h-8zM4 6h9v1h-9zM4 7h8v1h-8zM4 8h7v1h-7zM8 9h2v1h-2zM8 10h1v1h-1z'/%3E%3Cpath fill='%23000' d='M7 0h1v1h-1zM7 1h2v1h-2zM7 2h1v1h-1zM9 2h1v1h-1zM3 3h5v1h-5zM10 3h1v1h-1zM3 4h1v1h-1zM11 4h1v1h-1zM3 5h1v1h-1zM12 5h1v1h-1zM3 6h1v1h-1zM13 6h1v1h-1zM3 7h1v1h-1zM12 7h1v1h-1zM3 8h1v1h-1zM11 8h1v1h-1zM3 9h5v1h-5zM10 9h1v1h-1zM7 10h1v1h-1zM9 10h1v1h-1zM7 11h2v1h-2zM7 12h1v1h-1z'/%3E%3C/svg%3E");
545
+ --clio-art-s6-right-on: 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='M7 0h1v1h-1zM7 1h2v1h-2zM7 2h3v1h-3zM3 3h8v1h-8zM3 4h9v1h-9zM3 5h10v1h-10zM3 6h10v1h-10zM3 7h10v1h-10zM3 8h9v1h-9zM3 9h8v1h-8zM7 10h3v1h-3zM7 11h2v1h-2zM7 12h1v1h-1z'/%3E%3C/svg%3E");
546
+ --clio-art-s6-burst: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='11' shape-rendering='crispEdges'%3E%3Cpath fill='%23000' d='M5 1h1v1h-1zM2 2h1v1h-1zM5 2h1v1h-1zM8 2h1v1h-1zM3 3h1v1h-1zM5 3h1v1h-1zM7 3h1v1h-1zM1 5h3v1h-3zM5 5h1v1h-1zM7 5h3v1h-3zM3 7h1v1h-1zM5 7h1v1h-1zM7 7h1v1h-1zM2 8h1v1h-1zM5 8h1v1h-1zM8 8h1v1h-1zM5 9h1v1h-1z'/%3E%3C/svg%3E");
547
+ --clio-art-s6-ltgray: 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 1h1v1h-1z'/%3E%3Cpath fill='%23fff' d='M1 0h3v1h-3zM0 1h2v1h-2zM3 1h1v1h-1z'/%3E%3C/svg%3E");
548
+ --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
+ --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
+ --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");
551
+ /* Frames cut from captures by tooling/frame-art.py. */
552
+ --clio-art-frame-s6-button: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAgMAAACd/+6DAAAACVBMVEUAAAAAAAD///+D3c/SAAAAAXRSTlMAQObYZgAAACpJREFUeJxjYAxgYBINZWBiYWFgCmB0YGJgYABhBqmVDEx//jAwMAYwAAA66QRtNyAoFwAAAABJRU5ErkJggg==");
553
+ --clio-art-frame-s6-button-held: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAQMAAADaX5RTAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAAB1JREFUeJxjkGFgSmZgYmBg/N/IxABiMNSDSRkGACm1Aqb7EOVpAAAAAElFTkSuQmCC");
554
+ --clio-art-frame-s6-ring: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAPAQMAAAABGAcJAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAADRJREFUeJxjYD/AIP+BSYGDsYaB5csahg9yTB8+MDEwgJCAAFPDPyaeBAb7H0wPfjCwHwAAEpMM/gNXK+MAAAAASUVORK5CYII=");
555
+ --clio-art-frame-p9-button: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJBAMAAAASvxsjAAAAGFBMVEUAAAAAAAB3d3fd3d27u7uqqqoiIiL///+EaqngAAAAAXRSTlMAQObYZgAAADxJREFUeJxjYEgUTGBgYnyk9JCBMUWYYa8O03qGPXIbmBj+MDAwMIERY8pFhbN2jIyOD/7fZ/ov/96eAQBghg8JraaOFgAAAABJRU5ErkJggg==");
556
+ --clio-art-frame-p9-button-held: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJBAMAAAASvxsjAAAAGFBMVEUAAAAAAAB3d3dVVVVmZmYiIiKIiIhEREQ39d/AAAAAAXRSTlMAQObYZgAAAD9JREFUeJxjYAgUDGBgYVRT+8XAGC5zgJ+PUVxG8NErJgZGBgYGJgaGfwwMLA6vH7i8YmRUdfg9n+m/9ur3DAAxwg5nPuolSwAAAABJRU5ErkJggg==");
557
+ --clio-art-frame-p9-ring: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANBAMAAACAxflPAAAAG1BMVEUAAAAAAAB3d3fd3d3MzMy7u7uqqqoiIiKIiIhznn7oAAAAAXRSTlMAQObYZgAAAFpJREFUeJxjZGDnYmB7ycDCwKPAwPjzAwujgjEDg+x6xuLDrx6oOXEwCCcxMDAlCTAx/GMAISYGCEDQTGAOUyKLAoOKQgIjY6gAA9PO+4wMElwMDO8+MELNBwCaGBDQEM8mggAAAABJRU5ErkJggg==");
558
+ --clio-art-frame-p9-button-disabled: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAgMAAACd/+6DAAAACVBMVEUAAACIiIjd3d2RXqmqAAAAAXRSTlMAQObYZgAAACFJREFUeJxjYA1hYBINZWAKYHRgYmBgQMYMUisZGFhDGAAtsQJ9dgAT/gAAAABJRU5ErkJggg==");
559
+ --clio-art-frame-p9-popup: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHBAMAAAA2fErgAAAAGFBMVEUAAAAAAAB3d3fd3d27u7uqqqoiIiL///+EaqngAAAAAXRSTlMAQObYZgAAACtJREFUeJxjYEhMYGBi5H/IwJh+klWbQYCBQYAl/OQnOwbGAEUGpv+C9gwAea0HTcaLsPwAAAAASUVORK5CYII=");
560
+ --clio-art-frame-p9-popup-disabled: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHAgMAAAC5PL9AAAAACVBMVEUAAACIiIjd3d2RXqmqAAAAAXRSTlMAQObYZgAAAB1JREFUeJxjZLVmEg5gChBhcGBh0ljAtOENI6s1ACDmA/qjrWTUAAAAAElFTkSuQmCC");
561
+ --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
+ --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");
563
+ --clio-art-s6-strip-cap: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='24' shape-rendering='crispEdges'%3E%3Cpath fill='%23fff' d='M1 1h13v22H1z'/%3E%3Cpath d='M0 0h15v1H0zM0 23h15v1H0zM0 1h1v22H0zM14 1h1v22h-1zM3 8h8v1H3zM3 15h8v1H3zM3 9h1v6H3zM10 9h1v6h-1z'/%3E%3C/svg%3E");
564
+ --clio-art-s6-strip-back: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' shape-rendering='crispEdges'%3E%3Cpath d='M4 1h1v8H4zM3 2h1v6H3zM2 3h1v4H2zM1 4h1v2H1z'/%3E%3C/svg%3E");
565
+ --clio-art-s6-strip-forward: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' shape-rendering='crispEdges'%3E%3Cpath d='M5 1h1v8H5zM6 2h1v6H6zM7 3h1v4H7zM8 4h1v2H8z'/%3E%3C/svg%3E");
566
+ --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
+ --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
+ --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");
569
+ }
570
+
571
+ /* Base. clio.css styles elements only inside its own components, plus bare
572
+ form controls through :where(), so every rule here has zero specificity and
573
+ your own CSS always wins. It never restyles <body> unless you ask with
574
+ .desktop. */
575
+ :where(.desktop) {
576
+ margin: 0;
577
+ min-height: 100vh;
578
+ background: var(--clio-desktop);
579
+ color: var(--clio-ink);
580
+ }
581
+
582
+ :where(.window, .menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"],
583
+ .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) {
584
+ box-sizing: border-box;
585
+ color: var(--clio-ink);
586
+ font-family: var(--clio-font-chrome);
587
+ font-size: var(--clio-font-size);
588
+ font-weight: var(--clio-chrome-weight);
589
+ font-stretch: var(--clio-font-stretch-text);
590
+ font-synthesis: none;
591
+ line-height: 16px;
592
+ -webkit-font-smoothing: var(--clio-font-smoothing);
593
+ }
594
+
595
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) *,
596
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) *::before,
597
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) *::after {
598
+ box-sizing: border-box;
599
+ }
600
+
601
+ /* Application text (Geneva role) for content areas. */
602
+ :where(.window-pane, .modal-contents, .alert-contents, .text, .details-bar, .listbox, [role="listbox"], .status-bar, .icon, input, textarea) {
603
+ font-family: var(--clio-font-text);
604
+ font-stretch: var(--clio-font-stretch-text);
605
+ -webkit-font-smoothing: var(--clio-text-smoothing);
606
+ }
607
+
608
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(h1, h2, h3, h4, .heading) {
609
+ margin: 0 0 8px;
610
+ font-family: var(--clio-font-chrome);
611
+ font-size: var(--clio-font-size);
612
+ font-weight: var(--clio-chrome-weight);
613
+ line-height: 16px;
614
+ }
615
+
616
+ :where(.display) {
617
+ font-family: var(--clio-font-display);
618
+ -webkit-font-smoothing: auto;
619
+ }
620
+
621
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(p) {
622
+ margin: 0 0 8px;
623
+ }
624
+
625
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(a) {
626
+ color: inherit;
627
+ }
628
+
629
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(code, kbd, pre, samp) {
630
+ font-family: var(--clio-font-mono);
631
+ }
632
+
633
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(hr) {
634
+ height: 0;
635
+ margin: 8px 0;
636
+ border: 0;
637
+ border-top: var(--clio-border);
638
+ }
639
+
640
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) ::selection {
641
+ background: var(--clio-selection-bg);
642
+ color: var(--clio-selection-fg);
643
+ }
644
+
645
+ /* A row of controls with their label (system.css name kept). */
646
+ :where(.field-row, .field-row-stacked) {
647
+ display: flex;
648
+ align-items: center;
649
+ gap: 6px;
650
+ }
651
+
652
+ :where(.field-row-stacked) {
653
+ flex-direction: column;
654
+ align-items: flex-start;
655
+ gap: 4px;
656
+ }
657
+
658
+ :where(.field-row, .field-row-stacked) + :where(.field-row, .field-row-stacked) {
659
+ margin-top: 6px;
660
+ }
661
+
662
+ /* Hidden, still read aloud. */
663
+ :where(.visually-hidden, .title-bar button > span) {
664
+ position: absolute !important;
665
+ width: 1px;
666
+ height: 1px;
667
+ overflow: hidden;
668
+ clip: rect(0 0 0 0);
669
+ white-space: nowrap;
670
+ }
671
+
672
+ /* Windows.
673
+ Markup: .window > .title-bar (> .close, .title, .resize [, .shade]) >
674
+ optional .details-bar > .window-pane. system.css markup (.title-bar
675
+ button.close / button.resize, .inactive-title-bar) and AI System 6 markup
676
+ (.close-box, .resize-box, .shade-box, h1/h2 as the title) also work. */
677
+ :where(.window) {
678
+ position: relative;
679
+ display: flex;
680
+ flex-direction: column;
681
+ min-width: 120px;
682
+ padding: var(--clio-window-padding);
683
+ border: var(--clio-window-border);
684
+ background: var(--clio-window-bg);
685
+ box-shadow: var(--clio-window-shadow);
686
+ }
687
+
688
+ /* ---- Title bar ---------------------------------------------------------
689
+ System 6: a 17px box under a 1px inset: 2px of paper, six 1px ink stripes
690
+ on a 2px period across a 12px row, 2px of paper, then the 1px rule. */
691
+ .title-bar,
692
+ .inactive-title-bar {
693
+ --clio-tb-close: var(--clio-titlebar-slot);
694
+ --clio-tb-zoom: var(--clio-titlebar-slot);
695
+ --clio-tb-shade: var(--clio-titlebar-shade-slot);
696
+ --clio-tb-gutter: max(var(--clio-tb-close), calc(var(--clio-tb-zoom) + var(--clio-tb-shade)));
697
+ position: relative;
698
+ display: grid;
699
+ flex: none;
700
+ grid-template-columns:
701
+ var(--clio-tb-gutter)
702
+ minmax(0, 1fr)
703
+ var(--clio-tb-zoom)
704
+ calc(var(--clio-tb-gutter) - var(--clio-tb-zoom));
705
+ grid-template-rows: var(--clio-titlebar-row);
706
+ align-items: start;
707
+ box-sizing: border-box;
708
+ height: var(--clio-titlebar-height);
709
+ margin: var(--clio-titlebar-margin);
710
+ padding: var(--clio-titlebar-padding);
711
+ border-bottom: var(--clio-titlebar-border);
712
+ background: var(--clio-titlebar-bg);
713
+ font-family: var(--clio-font-chrome);
714
+ user-select: none;
715
+ -webkit-user-select: none;
716
+ }
717
+
718
+ /* A slot is reserved only for a control that is really there, so the title
719
+ stays centred on the whole bar. */
720
+ .title-bar:not(:has(> :is(.resize, .resize-box, .zoom))) { --clio-tb-zoom: 0px; }
721
+ .title-bar:not(:has(> :is(.shade, .shade-box, .collapse))) { --clio-tb-shade: 0px; }
722
+
723
+ .title-bar > :is(.title, h1, h2, h3),
724
+ .inactive-title-bar > :is(.title, h1, h2, h3) {
725
+ grid-column: 2;
726
+ grid-row: 1;
727
+ justify-self: center;
728
+ max-width: 100%;
729
+ height: var(--clio-titlebar-row);
730
+ margin: 0;
731
+ padding: var(--clio-title-padding);
732
+ overflow: hidden;
733
+ background: var(--clio-title-bg);
734
+ color: var(--clio-title-fg);
735
+ font-family: var(--clio-font-window-title, var(--clio-font-chrome));
736
+ font-size: var(--clio-title-font-size);
737
+ font-stretch: var(--clio-font-stretch-title);
738
+ font-weight: var(--clio-chrome-weight);
739
+ line-height: var(--clio-titlebar-row);
740
+ text-align: center;
741
+ text-overflow: ellipsis;
742
+ white-space: nowrap;
743
+ }
744
+
745
+ /* ---- Close, zoom and collapse boxes ------------------------------------ */
746
+ .title-bar > :is(button, .close, .close-box, .resize, .resize-box, .zoom, .shade, .shade-box, .collapse) {
747
+ position: relative;
748
+ grid-row: 1;
749
+ width: var(--clio-box-size);
750
+ min-width: 0;
751
+ height: var(--clio-box-size);
752
+ min-height: 0;
753
+ margin: 0;
754
+ padding: 0;
755
+ border: 1px solid var(--clio-ink);
756
+ border-radius: 0;
757
+ background: var(--clio-paper);
758
+ box-shadow: 0 0 0 var(--clio-box-isolation) var(--clio-paper);
759
+ color: transparent;
760
+ font-size: 0;
761
+ appearance: none;
762
+ -webkit-appearance: none;
763
+ cursor: default;
764
+ touch-action: manipulation;
765
+ }
766
+
767
+ .title-bar > :is(.close, .close-box) {
768
+ grid-column: 1;
769
+ justify-self: start;
770
+ margin-left: var(--clio-box-inset);
771
+ }
772
+
773
+ .title-bar > :is(.resize, .resize-box, .zoom) {
774
+ grid-column: 3;
775
+ justify-self: end;
776
+ margin-right: var(--clio-box-inset);
777
+ }
778
+
779
+ /* System 6 had no WindowShade box; only an era that opens the slot shows it. */
780
+ .title-bar > :is(.shade, .shade-box, .collapse) {
781
+ display: var(--clio-shade-display);
782
+ grid-column: 4;
783
+ justify-self: end;
784
+ }
785
+
786
+ /* Held close or zoom box: System 6 draws the same starburst in both
787
+ (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) {
789
+ background: var(--clio-art-s6-burst) 0 0 / 11px 11px no-repeat border-box, var(--clio-paper);
790
+ }
791
+
792
+ /* Zoom box: an inner square sharing the outer frame's top-left corner,
793
+ 7 of the frame's 11 pixels (System 6's 7:11 ratio). */
794
+ .title-bar > :is(.resize, .resize-box, .zoom)::before {
795
+ content: "";
796
+ position: absolute;
797
+ top: -1px;
798
+ left: -1px;
799
+ width: 7px;
800
+ height: 7px;
801
+ border-right: 1px solid var(--clio-ink);
802
+ border-bottom: 1px solid var(--clio-ink);
803
+ box-sizing: border-box;
804
+ }
805
+
806
+ .title-bar > :is(.resize, .resize-box, .zoom):is(:active, .active)::before {
807
+ opacity: 0;
808
+ }
809
+
810
+ .title-bar > button:focus-visible {
811
+ outline: var(--clio-focus-outline);
812
+ outline-offset: calc(var(--clio-box-isolation) - 1px);
813
+ }
814
+
815
+ /* ---- Inactive windows ----------------------------------------------------
816
+ System 6 draws a background window's title bar as a plain strip with its
817
+ name: no stripes, no close box, no zoom box. */
818
+ .window.inactive > .title-bar,
819
+ .inactive-title-bar {
820
+ background: var(--clio-titlebar-inactive-bg);
821
+ }
822
+
823
+ .window.inactive > .title-bar > :is(.title, h1, h2, h3),
824
+ .inactive-title-bar > :is(.title, h1, h2, h3) {
825
+ color: var(--clio-title-inactive-fg);
826
+ }
827
+
828
+ .window.inactive > .title-bar > :not(.title, h1, h2, h3),
829
+ .inactive-title-bar > :not(.title, h1, h2, h3) {
830
+ visibility: hidden;
831
+ }
832
+
833
+ /* ---- Window body ------------------------------------------------------- */
834
+ :where(.window-pane) {
835
+ flex: 1 1 auto;
836
+ min-height: 0;
837
+ padding: 8px;
838
+ overflow: auto;
839
+ background: var(--clio-pane-bg);
840
+ font-size: var(--clio-font-size);
841
+ line-height: 16px;
842
+ }
843
+
844
+ /* Finder's info line ("3 items 1,234K in disk"), ruled twice below. */
845
+ :where(.details-bar) {
846
+ display: flex;
847
+ flex: none;
848
+ justify-content: space-between;
849
+ gap: 16px;
850
+ min-height: var(--clio-details-height);
851
+ padding: var(--clio-details-padding);
852
+ border-bottom: var(--clio-details-border);
853
+ background: var(--clio-details-bg);
854
+ box-shadow: var(--clio-details-shadow, none);
855
+ font-family: var(--clio-font-small);
856
+ font-size: var(--clio-details-font-size);
857
+ line-height: var(--clio-details-height);
858
+ white-space: nowrap;
859
+ }
860
+
861
+ :where(.separator) {
862
+ flex: none;
863
+ border-top: var(--clio-border);
864
+ }
865
+
866
+ /* A status line under the pane. */
867
+ :where(.status-bar) {
868
+ display: flex;
869
+ flex: none;
870
+ gap: 12px;
871
+ padding: 1px 8px;
872
+ border-top: var(--clio-border);
873
+ background: var(--clio-details-bg);
874
+ font-family: var(--clio-font-small);
875
+ font-size: var(--clio-font-size-small);
876
+ line-height: 14px;
877
+ }
878
+
879
+ /* Menu bar and menus.
880
+ Markup: <ul role="menubar" class="menu-bar"> <li role="none"><button
881
+ role="menuitem" aria-haspopup="true" aria-expanded="false">File</button>
882
+ <ul role="menu" class="menu">…</ul></li></ul>. A menu opens while its title
883
+ has aria-expanded="true" or the class .open (your script toggles either), or
884
+ while focus is inside it, so it works with the keyboard and no script.
885
+ system.css's role="menu-bar" / role="menu-item" markup is accepted too. */
886
+ :where(.menu-bar, ul[role="menubar"], ul[role="menu-bar"]) {
887
+ display: flex;
888
+ align-items: stretch;
889
+ box-sizing: border-box;
890
+ height: var(--clio-menubar-height);
891
+ margin: 0;
892
+ padding: var(--clio-menubar-padding);
893
+ list-style: none;
894
+ border-bottom: var(--clio-menubar-border);
895
+ background: var(--clio-menubar-bg);
896
+ box-shadow: var(--clio-menubar-shadow);
897
+ user-select: none;
898
+ -webkit-user-select: none;
899
+ }
900
+
901
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li {
902
+ position: relative;
903
+ display: flex;
904
+ align-items: stretch;
905
+ }
906
+
907
+ /* Menu titles: a <button>, an <a>, or the <li> itself (system.css). */
908
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a, span),
909
+ :where([role="menu-bar"]) > [role="menu-item"] {
910
+ display: flex;
911
+ align-items: center;
912
+ min-width: 0;
913
+ margin: 0;
914
+ padding: var(--clio-menu-title-padding);
915
+ border: 0;
916
+ border-radius: 0;
917
+ background: transparent;
918
+ box-shadow: none;
919
+ color: inherit;
920
+ font: inherit;
921
+ line-height: 16px;
922
+ text-decoration: none;
923
+ white-space: nowrap;
924
+ appearance: none;
925
+ -webkit-appearance: none;
926
+ cursor: default;
927
+ }
928
+
929
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a, span):is([aria-expanded="true"], .active),
930
+ :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,
932
+ :where([role="menu-bar"]) > [role="menu-item"]:is(:focus, :focus-within) {
933
+ background: var(--clio-menu-title-active-bg);
934
+ box-shadow: var(--clio-menu-title-active-shadow);
935
+ color: var(--clio-menu-title-active-fg);
936
+ outline: none;
937
+ }
938
+
939
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a):focus-visible {
940
+ outline: var(--clio-focus-outline);
941
+ outline-offset: -3px;
942
+ }
943
+
944
+ /* ---- Menu panel ----------------------------------------------------------
945
+ System 6: paper, a 1px ink frame and a 1px ink drop shadow. */
946
+ :where(.menu, ul[role="menu"]) {
947
+ z-index: 10;
948
+ display: block;
949
+ box-sizing: border-box;
950
+ min-width: 140px;
951
+ width: max-content;
952
+ margin: 0;
953
+ padding: 0;
954
+ list-style: none;
955
+ border: var(--clio-menu-border);
956
+ border-top-width: var(--clio-menu-border-top-width);
957
+ background: var(--clio-menu-bg);
958
+ box-shadow: var(--clio-menu-shadow);
959
+ font-family: var(--clio-font-chrome);
960
+ font-size: var(--clio-font-size);
961
+ }
962
+
963
+ /* Inside a menu bar or a parent item, a menu is a drop-down. */
964
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"]) li > :is(.menu, ul[role="menu"]) {
965
+ position: absolute;
966
+ top: calc(100% + 1px);
967
+ left: 0;
968
+ display: none;
969
+ }
970
+
971
+ :where(.menu, [role="menu"]) li > :is(.menu, ul[role="menu"]) {
972
+ top: -1px;
973
+ left: 100%;
974
+ }
975
+
976
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"]) li:is(.open, :focus-within) > :is(.menu, ul[role="menu"]),
977
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"]) li > [aria-expanded="true"] + :is(.menu, ul[role="menu"]) {
978
+ display: block;
979
+ }
980
+
981
+ /* ---- Menu items ---------------------------------------------------------- */
982
+ :where(.menu, [role="menu"]) > li {
983
+ position: relative;
984
+ display: flex;
985
+ align-items: center;
986
+ min-height: var(--clio-menu-item-height);
987
+ padding: var(--clio-menu-item-padding);
988
+ font-weight: var(--clio-menu-item-weight);
989
+ line-height: var(--clio-menu-item-height);
990
+ white-space: nowrap;
991
+ cursor: default;
992
+ }
993
+
994
+ :where(.menu, [role="menu"]) > li:has(> :is(a, button)) {
995
+ padding: 0;
996
+ }
997
+
998
+ :where(.menu, [role="menu"]) > li > :is(a, button) {
999
+ display: flex;
1000
+ flex: 1;
1001
+ align-items: center;
1002
+ justify-content: flex-start;
1003
+ min-width: 0;
1004
+ min-height: var(--clio-menu-item-height);
1005
+ margin: 0;
1006
+ padding: var(--clio-menu-item-padding);
1007
+ border: 0;
1008
+ border-radius: 0;
1009
+ background: transparent;
1010
+ box-shadow: none;
1011
+ color: inherit;
1012
+ font: inherit;
1013
+ text-align: left;
1014
+ text-decoration: none;
1015
+ appearance: none;
1016
+ -webkit-appearance: none;
1017
+ cursor: default;
1018
+ }
1019
+
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) {
1022
+ background: var(--clio-menu-item-active-bg);
1023
+ box-shadow: var(--clio-menu-item-active-shadow);
1024
+ color: var(--clio-menu-item-active-fg);
1025
+ outline: none;
1026
+ }
1027
+
1028
+ :where(.menu, [role="menu"]) > li:is(.disabled, [aria-disabled="true"]),
1029
+ :where(.menu, [role="menu"]) > li > :is(a, button):is(:disabled, [aria-disabled="true"]) {
1030
+ color: var(--clio-disabled);
1031
+ background-image: var(--clio-disabled-dither);
1032
+ background-size: 2px 2px;
1033
+ background-attachment: fixed;
1034
+ -webkit-background-clip: text;
1035
+ background-clip: text;
1036
+ -webkit-text-fill-color: var(--clio-disabled-fill);
1037
+ }
1038
+
1039
+ /* Keyboard shortcut column, right-aligned. */
1040
+ :where(.menu, [role="menu"]) :is(kbd, .shortcut) {
1041
+ margin-left: auto;
1042
+ padding-left: 24px;
1043
+ font: inherit;
1044
+ }
1045
+
1046
+ /* Check mark column. */
1047
+ :where(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"])::before,
1048
+ :where(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked)::before {
1049
+ content: "";
1050
+ position: absolute;
1051
+ top: 50%;
1052
+ left: 3px;
1053
+ width: 9px;
1054
+ height: 8px;
1055
+ margin-top: -4px;
1056
+ background: var(--clio-art-s6-menucheck) 0 0 / 9px 8px no-repeat;
1057
+ }
1058
+
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 {
1061
+ background-image: var(--clio-art-s6-menucheck-on);
1062
+ }
1063
+
1064
+ /* Submenu arrow. */
1065
+ :where(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"]))::after,
1066
+ :where(.menu, [role="menu"]) > li > [aria-haspopup="true"]::after {
1067
+ content: "";
1068
+ position: absolute;
1069
+ top: 50%;
1070
+ right: 4px;
1071
+ width: 6px;
1072
+ height: 11px;
1073
+ margin-top: -5.5px;
1074
+ background: var(--clio-art-s6-submenu) 0 0 / 6px 11px no-repeat;
1075
+ }
1076
+
1077
+ :where(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"])):is(:hover, :focus-within, .active)::after {
1078
+ background-image: var(--clio-art-s6-submenu-on);
1079
+ }
1080
+
1081
+ /* Separator: System 6 draws a dotted grey rule through a full-height row. */
1082
+ :where(.menu, [role="menu"]) > :is(li.separator, li[role="separator"], hr) {
1083
+ display: block;
1084
+ height: var(--clio-menu-separator-height);
1085
+ min-height: 0;
1086
+ margin: 0;
1087
+ padding: 0;
1088
+ border: 0;
1089
+ background: var(--clio-menu-separator);
1090
+ }
1091
+
1092
+ /* system.css divider items keep their label row and add the rule below. */
1093
+ :where(.menu, [role="menu"]) > li.divider {
1094
+ border-bottom: 1px dotted var(--clio-ink);
1095
+ }
1096
+
1097
+ /* Controls. Bare elements are styled through :where(), so the rules carry no
1098
+ specificity. State model (from AI System 6's fidelity contract): hover never
1099
+ changes a push button; pressed comes only from pointer-down, Space or
1100
+ Enter (:active) or from the .active class; disabled keeps full geometry. */
1101
+
1102
+ /* ---- Push buttons -------------------------------------------------------- */
1103
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]) {
1104
+ display: inline-flex;
1105
+ align-items: center;
1106
+ justify-content: center;
1107
+ box-sizing: border-box;
1108
+ min-width: var(--clio-button-min-width);
1109
+ min-height: var(--clio-control-height);
1110
+ margin: 0;
1111
+ padding: var(--clio-button-padding);
1112
+ border: var(--clio-button-border);
1113
+ border-radius: var(--clio-button-radius);
1114
+ background: var(--clio-button-bg);
1115
+ box-shadow: var(--clio-button-shadow);
1116
+ border-image: var(--clio-button-frame) var(--clio-button-frame-slice) fill / calc(var(--clio-button-frame-slice) * 1px) stretch;
1117
+ color: var(--clio-button-fg);
1118
+ font-family: var(--clio-font-chrome);
1119
+ font-size: var(--clio-font-size);
1120
+ font-stretch: var(--clio-font-stretch-text);
1121
+ font-weight: var(--clio-button-weight);
1122
+ -webkit-font-smoothing: var(--clio-font-smoothing);
1123
+ line-height: 14px;
1124
+ text-align: center;
1125
+ text-decoration: none;
1126
+ white-space: nowrap;
1127
+ appearance: none;
1128
+ -webkit-appearance: none;
1129
+ cursor: default;
1130
+ touch-action: manipulation;
1131
+ -webkit-tap-highlight-color: transparent;
1132
+ }
1133
+
1134
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]):not(:disabled, .disabled):is(:active, .active) {
1135
+ background: var(--clio-button-active-bg);
1136
+ box-shadow: var(--clio-button-active-shadow);
1137
+ border-image-source: var(--clio-button-frame-held);
1138
+ color: var(--clio-button-active-fg);
1139
+ }
1140
+
1141
+ /* Default button: the ring that says Return will press it. Drawn as its own
1142
+ rounded rectangle (Inside Macintosh: PenSize(3,3), InsetRect(-4,-4),
1143
+ FrameRoundRect(16,16)), so its corners do not follow the button's. */
1144
+ :where(.default, .btn-default, button[type="submit"].default) {
1145
+ position: relative;
1146
+ border-radius: var(--clio-button-radius);
1147
+ }
1148
+
1149
+ :where(.default, .btn-default)::before {
1150
+ content: "";
1151
+ position: absolute;
1152
+ inset: calc(-1px - var(--clio-button-default-gap) - var(--clio-button-default-width));
1153
+ border: var(--clio-button-default-width) solid var(--clio-ink);
1154
+ border-radius: var(--clio-button-default-radius);
1155
+ border-image: var(--clio-ring-frame) var(--clio-ring-frame-slice) / calc(var(--clio-ring-frame-slice) * 1px) stretch;
1156
+ pointer-events: none;
1157
+ }
1158
+
1159
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]):is(:disabled, .disabled) {
1160
+ border: var(--clio-button-disabled-border);
1161
+ color: var(--clio-button-disabled-fg);
1162
+ /* System 6: the label through the 50% pattern, the frame left solid. */
1163
+ background-image: var(--clio-disabled-dither), linear-gradient(var(--clio-button-bg), var(--clio-button-bg));
1164
+ background-size: 2px 2px, auto;
1165
+ background-attachment: fixed, scroll;
1166
+ -webkit-background-clip: text, border-box;
1167
+ background-clip: text, border-box;
1168
+ -webkit-text-fill-color: var(--clio-disabled-fill);
1169
+ /* The frame without its face, so the dimmed label shows through. */
1170
+ border-image-source: var(--clio-button-frame-disabled, var(--clio-button-frame));
1171
+ border-image-slice: var(--clio-button-frame-slice);
1172
+ }
1173
+
1174
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]):focus-visible {
1175
+ outline: var(--clio-focus-outline);
1176
+ outline-offset: var(--clio-focus-offset);
1177
+ }
1178
+
1179
+ :where(.default, .btn-default):focus-visible {
1180
+ outline-offset: calc(var(--clio-focus-offset) + 4px);
1181
+ }
1182
+
1183
+ /* ---- Check boxes ---------------------------------------------------------- */
1184
+ :where(input[type="checkbox"]) {
1185
+ position: relative;
1186
+ flex: none;
1187
+ box-sizing: border-box;
1188
+ width: var(--clio-check-size);
1189
+ height: var(--clio-check-size);
1190
+ margin: 0;
1191
+ border: var(--clio-check-border);
1192
+ border-radius: 0;
1193
+ background: var(--clio-check-bg);
1194
+ box-shadow: var(--clio-check-shadow);
1195
+ vertical-align: -2px;
1196
+ appearance: none;
1197
+ -webkit-appearance: none;
1198
+ cursor: default;
1199
+ }
1200
+
1201
+ :where(input[type="checkbox"]):checked {
1202
+ background: var(--clio-check-mark), var(--clio-check-bg);
1203
+ background-origin: var(--clio-check-mark-origin);
1204
+ }
1205
+
1206
+ :where(input[type="checkbox"]):not(:disabled):active {
1207
+ border-width: var(--clio-check-pressed-border-width);
1208
+ }
1209
+
1210
+ :where(input[type="checkbox"]):disabled {
1211
+ border-color: var(--clio-disabled);
1212
+ opacity: 0.6;
1213
+ }
1214
+
1215
+ /* ---- Radio buttons -------------------------------------------------------- */
1216
+ :where(input[type="radio"]) {
1217
+ flex: none;
1218
+ box-sizing: border-box;
1219
+ width: var(--clio-radio-size);
1220
+ height: var(--clio-radio-size);
1221
+ margin: 0;
1222
+ border: 0;
1223
+ border-radius: 0;
1224
+ background: var(--clio-radio-off);
1225
+ vertical-align: -2px;
1226
+ appearance: none;
1227
+ -webkit-appearance: none;
1228
+ cursor: default;
1229
+ }
1230
+
1231
+ :where(input[type="radio"]):checked {
1232
+ background: var(--clio-radio-on);
1233
+ }
1234
+
1235
+ :where(input[type="radio"]):not(:disabled):active {
1236
+ background: var(--clio-radio-pressed);
1237
+ }
1238
+
1239
+ :where(input[type="radio"]):checked:not(:disabled):active {
1240
+ background: var(--clio-radio-pressed-on);
1241
+ }
1242
+
1243
+ :where(input[type="radio"]):disabled {
1244
+ opacity: 0.45;
1245
+ }
1246
+
1247
+ :where(input[type="checkbox"], input[type="radio"]):focus-visible {
1248
+ outline: var(--clio-focus-outline);
1249
+ outline-offset: var(--clio-focus-offset);
1250
+ }
1251
+
1252
+ :where(input[type="checkbox"], input[type="radio"]) + label,
1253
+ :where(label):has(> :is(input[type="checkbox"], input[type="radio"])) {
1254
+ font-family: var(--clio-font-chrome);
1255
+ font-size: var(--clio-font-size);
1256
+ }
1257
+
1258
+ :where(label):has(> :is(input[type="checkbox"], input[type="radio"])) {
1259
+ display: inline-flex;
1260
+ align-items: center;
1261
+ gap: 6px;
1262
+ }
1263
+
1264
+ :where(input[type="checkbox"], input[type="radio"]):disabled + label,
1265
+ :where(label):has(> :is(input[type="checkbox"], input[type="radio"]):disabled) {
1266
+ color: var(--clio-disabled);
1267
+ background-image: var(--clio-disabled-dither);
1268
+ background-size: 2px 2px;
1269
+ background-attachment: fixed;
1270
+ -webkit-background-clip: text;
1271
+ background-clip: text;
1272
+ -webkit-text-fill-color: var(--clio-disabled-fill);
1273
+ }
1274
+
1275
+ /* ---- Text fields ---------------------------------------------------------- */
1276
+ :where(input:not([type]), input[type="text"], input[type="search"], input[type="email"], input[type="password"],
1277
+ input[type="number"], input[type="url"], input[type="tel"], input[type="date"], input[type="time"],
1278
+ input[type="datetime-local"], input[type="month"], input[type="week"], textarea) {
1279
+ box-sizing: border-box;
1280
+ min-height: var(--clio-field-height);
1281
+ margin: 0;
1282
+ padding: var(--clio-field-padding);
1283
+ border: var(--clio-field-border);
1284
+ border-radius: 0;
1285
+ background: var(--clio-field-bg);
1286
+ box-shadow: var(--clio-field-shadow);
1287
+ color: var(--clio-ink);
1288
+ font-family: var(--clio-font-text);
1289
+ font-size: var(--clio-font-size);
1290
+ font-stretch: var(--clio-font-stretch-text);
1291
+ line-height: 14px;
1292
+ appearance: none;
1293
+ -webkit-appearance: none;
1294
+ }
1295
+
1296
+ :where(textarea) {
1297
+ display: block;
1298
+ line-height: 16px;
1299
+ resize: vertical;
1300
+ }
1301
+
1302
+ :where(input, textarea):focus-visible {
1303
+ outline: var(--clio-focus-outline);
1304
+ outline-offset: var(--clio-focus-offset);
1305
+ box-shadow: var(--clio-field-focus-shadow);
1306
+ }
1307
+
1308
+ :where(input, textarea):disabled {
1309
+ color: var(--clio-disabled);
1310
+ }
1311
+
1312
+ :where(input, textarea)::placeholder {
1313
+ color: var(--clio-disabled);
1314
+ opacity: 1;
1315
+ }
1316
+
1317
+ :where(label) {
1318
+ font-family: var(--clio-font-chrome);
1319
+ font-size: var(--clio-font-size);
1320
+ }
1321
+
1322
+ /* ---- Pop-up menus (select) ------------------------------------------------ */
1323
+ :where(select) {
1324
+ box-sizing: border-box;
1325
+ min-height: var(--clio-popup-height, var(--clio-control-height));
1326
+ margin: 0;
1327
+ padding: var(--clio-popup-padding);
1328
+ border: var(--clio-popup-border);
1329
+ border-radius: var(--clio-popup-radius);
1330
+ background: var(--clio-popup-arrow), var(--clio-popup-bg);
1331
+ box-shadow: var(--clio-popup-shadow);
1332
+ border-image: var(--clio-popup-frame) var(--clio-popup-frame-slice) / calc(var(--clio-popup-frame-slice) * 1px) stretch;
1333
+ color: var(--clio-ink);
1334
+ font-family: var(--clio-font-chrome);
1335
+ font-size: var(--clio-font-size);
1336
+ font-stretch: var(--clio-font-stretch-text);
1337
+ font-weight: var(--clio-popup-weight);
1338
+ -webkit-font-smoothing: var(--clio-font-smoothing);
1339
+ line-height: 16px;
1340
+ appearance: none;
1341
+ -webkit-appearance: none;
1342
+ cursor: default;
1343
+ }
1344
+
1345
+ :where(select):focus-visible {
1346
+ outline: var(--clio-focus-outline);
1347
+ outline-offset: var(--clio-focus-offset);
1348
+ }
1349
+
1350
+ :where(select):disabled {
1351
+ color: var(--clio-disabled);
1352
+ }
1353
+
1354
+ /* A list box: <select multiple> or <select size="n">. */
1355
+ :where(select[multiple], select[size]:not([size="1"])) {
1356
+ min-height: 0;
1357
+ padding: 0;
1358
+ border: var(--clio-list-border);
1359
+ border-radius: 0;
1360
+ background: var(--clio-list-bg);
1361
+ box-shadow: var(--clio-list-shadow);
1362
+ font-family: var(--clio-font-text);
1363
+ }
1364
+
1365
+ :where(select[multiple], select[size]:not([size="1"])) option {
1366
+ min-height: var(--clio-list-row);
1367
+ padding: 0 4px;
1368
+ }
1369
+
1370
+ :where(select[multiple], select[size]:not([size="1"])) option:checked {
1371
+ background: var(--clio-selection-bg) linear-gradient(var(--clio-selection-bg), var(--clio-selection-bg));
1372
+ color: var(--clio-selection-fg);
1373
+ }
1374
+
1375
+ /* ---- List boxes ------------------------------------------------------------ */
1376
+ :where(.listbox, ul[role="listbox"], ol[role="listbox"], div[role="listbox"]) {
1377
+ box-sizing: border-box;
1378
+ margin: 0;
1379
+ padding: 0;
1380
+ overflow: auto;
1381
+ list-style: none;
1382
+ border: var(--clio-list-border);
1383
+ background: var(--clio-list-bg);
1384
+ box-shadow: var(--clio-list-shadow);
1385
+ font-family: var(--clio-font-text);
1386
+ font-size: var(--clio-font-size);
1387
+ }
1388
+
1389
+ :where(.listbox, [role="listbox"]) > :is(li, [role="option"]) {
1390
+ min-height: var(--clio-list-row);
1391
+ padding: 0 4px;
1392
+ line-height: var(--clio-list-row);
1393
+ white-space: nowrap;
1394
+ cursor: default;
1395
+ }
1396
+
1397
+ :where(.listbox, [role="listbox"]) > :is(li, [role="option"]):is([aria-selected="true"], .selected) {
1398
+ background: var(--clio-selection-bg);
1399
+ color: var(--clio-selection-fg);
1400
+ }
1401
+
1402
+ :where(.listbox, [role="listbox"]) > :is(li, [role="option"]):focus-visible {
1403
+ outline: var(--clio-focus-outline);
1404
+ outline-offset: -2px;
1405
+ }
1406
+
1407
+ /* ---- Group boxes (fieldset) ---------------------------------------------- */
1408
+ :where(fieldset) {
1409
+ margin: 0;
1410
+ padding: 8px 10px 10px;
1411
+ border: var(--clio-group-border);
1412
+ background: var(--clio-group-bg);
1413
+ box-shadow: var(--clio-group-shadow);
1414
+ }
1415
+
1416
+ :where(fieldset) > :where(legend) {
1417
+ padding: 0 4px;
1418
+ background: var(--clio-pane-bg);
1419
+ font-family: var(--clio-font-chrome);
1420
+ font-size: var(--clio-font-size);
1421
+ font-weight: var(--clio-chrome-weight);
1422
+ }
1423
+
1424
+ /* ---- Progress -------------------------------------------------------------- */
1425
+ :where(progress) {
1426
+ box-sizing: border-box;
1427
+ width: 100%;
1428
+ height: var(--clio-progress-height);
1429
+ margin: 0;
1430
+ border: var(--clio-progress-border);
1431
+ border-radius: 0;
1432
+ background: var(--clio-progress-bg);
1433
+ box-shadow: var(--clio-progress-shadow);
1434
+ color: var(--clio-ink);
1435
+ appearance: none;
1436
+ -webkit-appearance: none;
1437
+ }
1438
+
1439
+ :where(progress)::-webkit-progress-bar {
1440
+ background: var(--clio-progress-bg);
1441
+ }
1442
+
1443
+ :where(progress)::-webkit-progress-value {
1444
+ background: var(--clio-progress-fill);
1445
+ }
1446
+
1447
+ :where(progress)::-moz-progress-bar {
1448
+ background: var(--clio-progress-fill);
1449
+ }
1450
+
1451
+ /* ---- Tabs -------------------------------------------------------------------
1452
+ System 6 had no tab control; the System 6 tab here is an adaptation (a
1453
+ boxed label that joins its panel). Platinum draws the real Mac OS 9 tab. */
1454
+ :where([role="tablist"], .tabs) {
1455
+ display: flex;
1456
+ align-items: flex-end;
1457
+ gap: 0;
1458
+ margin: 0;
1459
+ padding: 0 8px;
1460
+ list-style: none;
1461
+ }
1462
+
1463
+ :where([role="tablist"], .tabs) > :is([role="tab"], li, button) {
1464
+ position: relative;
1465
+ display: inline-flex;
1466
+ align-items: center;
1467
+ box-sizing: border-box;
1468
+ min-width: 0;
1469
+ min-height: var(--clio-tab-height);
1470
+ margin: 0 -1px -1px 0;
1471
+ padding: 0 12px;
1472
+ border: 1px solid var(--clio-ink);
1473
+ border-radius: 0;
1474
+ background: var(--clio-tab-bg);
1475
+ box-shadow: none;
1476
+ color: var(--clio-ink);
1477
+ font-family: var(--clio-font-chrome);
1478
+ font-size: var(--clio-font-size);
1479
+ font-weight: var(--clio-chrome-weight);
1480
+ cursor: default;
1481
+ }
1482
+
1483
+ :where([role="tablist"], .tabs) > :is([role="tab"], li, button):is([aria-selected="true"], .active) {
1484
+ z-index: 1;
1485
+ border-bottom-color: var(--clio-tab-active-bg);
1486
+ background: var(--clio-tab-active-bg);
1487
+ color: var(--clio-ink);
1488
+ }
1489
+
1490
+ :where([role="tabpanel"], .tab-panel) {
1491
+ padding: 10px;
1492
+ border: var(--clio-tab-panel-border);
1493
+ background: var(--clio-tab-panel-bg);
1494
+ }
1495
+
1496
+ /* ---- Desktop icons ---------------------------------------------------------- */
1497
+ :where(.icon) {
1498
+ display: inline-flex;
1499
+ flex-direction: column;
1500
+ align-items: center;
1501
+ justify-content: flex-start;
1502
+ gap: 2px;
1503
+ width: 80px;
1504
+ min-width: 0;
1505
+ min-height: 0;
1506
+ margin: 0;
1507
+ padding: 0;
1508
+ border: 0;
1509
+ border-radius: 0;
1510
+ background: none;
1511
+ box-shadow: none;
1512
+ color: var(--clio-ink);
1513
+ font-family: var(--clio-font-small);
1514
+ font-size: var(--clio-font-size-small);
1515
+ text-align: center;
1516
+ cursor: default;
1517
+ }
1518
+
1519
+ :where(.icon) > :is(img, svg, .icon-image) {
1520
+ width: 32px;
1521
+ height: 32px;
1522
+ image-rendering: pixelated;
1523
+ }
1524
+
1525
+ :where(.icon) > :is(figcaption, span, .icon-label) {
1526
+ max-width: 100%;
1527
+ padding: 0 2px;
1528
+ background: var(--clio-label-bg);
1529
+ color: var(--clio-label-fg);
1530
+ line-height: 13px;
1531
+ }
1532
+
1533
+ :where(.icon):is(.selected, [aria-selected="true"], [aria-pressed="true"]) > :is(img, svg, .icon-image) {
1534
+ filter: var(--clio-icon-selected-filter, invert(1));
1535
+ }
1536
+
1537
+ :where(.icon):is(.selected, [aria-selected="true"], [aria-pressed="true"]) > :is(figcaption, span, .icon-label) {
1538
+ background: var(--clio-label-selected-bg);
1539
+ color: var(--clio-label-selected-fg);
1540
+ }
1541
+
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
+ }
1558
+
1559
+ :where(.standard-dialog) {
1560
+ box-sizing: border-box;
1561
+ max-width: 100%;
1562
+ 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
+ padding: 0;
1576
+ border: 0;
1577
+ }
1578
+
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;
1586
+ }
1587
+
1588
+ :where(.alert-box) > :where(.alert-icon) {
1589
+ grid-row: 1;
1590
+ width: 32px;
1591
+ height: 32px;
1592
+ }
1593
+
1594
+ :where(.alert-box) > :where(.alert-contents, .modal-contents, p) {
1595
+ grid-column: 2;
1596
+ margin: 0;
1597
+ }
1598
+
1599
+ :where(.alert-box) > :where(.alert-buttons, .dialog-buttons) {
1600
+ grid-column: 1 / -1;
1601
+ }
1602
+
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;
1609
+ }
1610
+
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;
1621
+ }
1622
+
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);
1642
+ }
1643
+
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);
1648
+ }
1649
+
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);
1653
+ }
1654
+
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);
1658
+ }
1659
+
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);
1667
+ }
1668
+
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));
1673
+ }
1674
+
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);
1686
+ }
1687
+
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);
1693
+ }
1694
+
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);
1700
+ }
1701
+
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);
1707
+ }
1708
+
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);
1714
+ }
1715
+
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);
1719
+ }
1720
+
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);
1724
+ }
1725
+
1726
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:decrement:active,
1727
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:decrement:active {
1728
+ background-image: var(--clio-scrollbar-left-on);
1729
+ }
1730
+
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);
1734
+ }
1735
+
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;
1742
+ }
1743
+
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);
1749
+ }
1750
+
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);
1754
+ }
1755
+ }
1756
+
1757
+ /* Control Strip (System 7.5 to Mac OS 9): a row of module buttons with scroll
1758
+ arrows and a tab that folds the strip away. Markup follows AI System 6:
1759
+ .control-strip > button.control-strip-scroll.control-strip-scroll-back,
1760
+ .control-strip-modules[role=toolbar] > .control-strip-module-track >
1761
+ button.control-strip-module (an icon inside; aria-haspopup="menu" draws the
1762
+ menu triangle), button.control-strip-scroll.control-strip-scroll-forward,
1763
+ button.control-strip-handle. Add .is-collapsed to fold it to the tab, and
1764
+ data-edge="right" for a strip on the right edge. Placement is yours
1765
+ (AI System 6 fixes it to the screen's lower left). */
1766
+ /* The strip's art is the same in System 7.5.3, Mac OS 8.5 and Mac OS 9.0
1767
+ (compared pixel for pixel with the backdrop removed); only the cell colours
1768
+ differ, so it lives here for every era. Redrawn by tooling/p9-art.py. */
1769
+ :root {
1770
+ --clio-art-p9-strip-cap: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYBAMAAADXK7paAAAAHlBMVEUAAAAAAABERERVVVWAgICIiIigoKDAwMDMzP/////+VYXkAAAAAXRSTlMAQObYZgAAAGlJREFUeJxjFGQAg/8sbAlgxkwWBiUQfZuBheHfAwYGhg8MTBAlDPgYLAx/9jAwsOgysDAwhDIw/L8LYvy98NcVry4mBoa/Zy+AtTOwlzP8AzFY3r0jYBfC0l/3P4AZjILMBiD6DCPMOwBKOxgiile5lQAAAABJRU5ErkJggg==");
1771
+ --clio-art-s7-strip-cap: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAYBAMAAADXK7paAAAAG1BMVEUAAAAAAABERERVVVWIiIiqqqrMzMzMzP/////JRvoVAAAAAXRSTlMAQObYZgAAAGVJREFUeJxjFGQAg/8srAFgxioWBiUQfYeBheHfAwYGhg8MTBAlDPgYLAx/zzIwMMsxsDAwuDAw/L8HYvy98M+FgC6Gf/egDLY0hn8gBvO7dwTsQmj/ff8DmMEoyGwAos8wwrwDAP+1F0dci98qAAAAAElFTkSuQmCC");
1772
+ --clio-art-p9-strip-back: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAgMAAADwXCcuAAAACVBMVEUAAABVVVXd3d2apXz3AAAAAXRSTlMAQObYZgAAACxJREFUeJwFwaERwCAABLD0j3oE7IPBs/8KrcBjSKhiKM/cebs0gvzkfFioLlg9BPcTGNP4AAAAAElFTkSuQmCC");
1773
+ --clio-art-p9-strip-forward: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKAgMAAADwXCcuAAAACVBMVEUAAABVVVXd3d2apXz3AAAAAXRSTlMAQObYZgAAAC1JREFUeJwFwSESABAUQMHnzegC9/nFqRX3IegCuxBIwVYxdySFgLzpHbg2cvhWkAdTrBZiqwAAAABJRU5ErkJggg==");
1774
+ --clio-art-p9-strip-menu: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAHAQMAAAAVq36TAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAABZJREFUeJxjaGA4wPCA4QMTA9MHpgcAIQYE58W2/JQAAAAASUVORK5CYII=");
1775
+ --clio-art-p9-strip-handle: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAYBAMAAAAFe7ACAAAAFVBMVEUAAAAAAABERERVVVWIiIjMzMz///8V67gPAAAAAXRSTlMAQObYZgAAAINJREFUeJxVz7ENAjEMheE/IbQokRiAUVJQUjAs5RXZhJvgkp6LjGwfBU309PzFkkMBZAApVVgAIqWUZ9bORsE6fWvWJCukoIlbtjICG0sK5iLnVrM7Hqefsy3qPKnzZM6n/+41D/epbbi772IOaOPYsIv/sIrEG6YA4XqB3vWO2UErvmVcJ4BylohjAAAAAElFTkSuQmCC");
1776
+ --clio-art-p9-strip-tab: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAYBAMAAAAFe7ACAAAAFVBMVEUAAAAAAABERERVVVWIiIjMzMz///8V67gPAAAAAXRSTlMAQObYZgAAAIFJREFUeJxVz7ENAjEMQNHvKPS+DRiBEVJQMi49WeAkRrgJSHoijOyEgipf1pPlyAbQgMwVxqN7iYIACVprRaMUskS9gKJeSWKYADtGLRruzC3Lcqd6WW7uw45V7ma5m/Xv3uW53H3YdLnU7g4YFg9Q+6phfv2nw95BNlGsRf1++QW6eCj9rQPMHAAAAABJRU5ErkJggg==");
1777
+ }
1778
+
1779
+ :where(.control-strip) {
1780
+ display: inline-flex;
1781
+ align-items: stretch;
1782
+ height: var(--clio-strip-height);
1783
+ max-width: 100%;
1784
+ vertical-align: bottom;
1785
+ user-select: none;
1786
+ -webkit-user-select: none;
1787
+ }
1788
+
1789
+ /* The end cap, then every cell: one bevelled box between 1px lines. */
1790
+ :where(.control-strip)::before,
1791
+ :where(.control-strip) > :is(.control-strip-scroll, .control-strip-modules),
1792
+ :where(.control-strip-module) {
1793
+ box-sizing: border-box;
1794
+ border: var(--clio-strip-line);
1795
+ border-left: 0;
1796
+ background: var(--clio-strip-bg);
1797
+ box-shadow: var(--clio-strip-cell-shadow);
1798
+ }
1799
+
1800
+ /* The end cap is one picture: frame, bevel, icon and the rounded lower-left corner. */
1801
+ :where(.control-strip)::before {
1802
+ content: "";
1803
+ flex: none;
1804
+ width: calc(var(--clio-strip-cap-width) + 2px);
1805
+ border: 0;
1806
+ background: var(--clio-strip-cap) 0 0 / 100% 100% no-repeat;
1807
+ box-shadow: none;
1808
+ }
1809
+
1810
+ :where(.control-strip) > :is(.control-strip-scroll, .control-strip-handle) {
1811
+ flex: none;
1812
+ margin: 0;
1813
+ padding: 0;
1814
+ border-radius: 0;
1815
+ appearance: none;
1816
+ -webkit-appearance: none;
1817
+ cursor: default;
1818
+ }
1819
+
1820
+ /* Scroll arrows: 13px cells, sunken and hollow while there is nothing to scroll. */
1821
+ :where(.control-strip) > .control-strip-scroll {
1822
+ width: calc(var(--clio-strip-scroll-width) + 1px);
1823
+ min-width: 0;
1824
+ height: auto;
1825
+ min-height: 0;
1826
+ background: var(--clio-strip-back) 1px 6px / 10px 10px no-repeat, var(--clio-strip-bg);
1827
+ box-shadow: var(--clio-strip-cell-shadow);
1828
+ }
1829
+
1830
+ :where(.control-strip) > .control-strip-scroll-forward {
1831
+ background-image: var(--clio-strip-forward);
1832
+ }
1833
+
1834
+ :where(.control-strip) > .control-strip-scroll:disabled {
1835
+ background:
1836
+ var(--clio-strip-back) 1px 6px / 10px 10px no-repeat,
1837
+ var(--clio-strip-sunken-lines),
1838
+ var(--clio-strip-bg);
1839
+ box-shadow: var(--clio-strip-sunken-shadow);
1840
+ }
1841
+
1842
+ :where(.control-strip) > .control-strip-scroll-forward:disabled {
1843
+ background-image: var(--clio-strip-forward);
1844
+ }
1845
+
1846
+ :where(.control-strip) > .control-strip-scroll:not(:disabled):active,
1847
+ :where(.control-strip-module):not(:disabled):is(:active, [aria-expanded="true"]) {
1848
+ background-color: var(--clio-strip-pressed-bg);
1849
+ box-shadow: var(--clio-strip-pressed-shadow);
1850
+ }
1851
+
1852
+ :where(.control-strip-modules) {
1853
+ display: flex;
1854
+ min-width: 0;
1855
+ overflow: hidden;
1856
+ border: 0;
1857
+ background: none;
1858
+ box-shadow: none;
1859
+ }
1860
+
1861
+ :where(.control-strip-module-track) {
1862
+ display: flex;
1863
+ }
1864
+
1865
+ /* A module: the 16px icon 2px in, the menu triangle 3px from the right. */
1866
+ :where(.control-strip-module) {
1867
+ position: relative;
1868
+ display: flex;
1869
+ flex: none;
1870
+ align-items: center;
1871
+ width: calc(var(--clio-strip-module-width) + 1px);
1872
+ min-width: 0;
1873
+ height: var(--clio-strip-height);
1874
+ min-height: 0;
1875
+ margin: 0;
1876
+ padding: 0 0 0 var(--clio-strip-icon-inset);
1877
+ border-radius: 0;
1878
+ color: var(--clio-ink);
1879
+ appearance: none;
1880
+ -webkit-appearance: none;
1881
+ cursor: default;
1882
+ }
1883
+
1884
+ :where(.control-strip-module) > :is(svg, img, .sys-icon) {
1885
+ width: 16px;
1886
+ height: 16px;
1887
+ }
1888
+
1889
+ :where(.control-strip-module)[aria-haspopup]::after {
1890
+ content: "";
1891
+ position: absolute;
1892
+ top: var(--clio-strip-menu-top);
1893
+ right: calc(var(--clio-strip-menu-inset) + 1px);
1894
+ width: 4px;
1895
+ height: 7px;
1896
+ background: var(--clio-strip-menu) 0 0 / 4px 7px no-repeat;
1897
+ }
1898
+
1899
+ :where(.control-strip-module):disabled {
1900
+ color: var(--clio-disabled);
1901
+ opacity: 0.5;
1902
+ }
1903
+
1904
+ /* The tab: open, a slanted end with a grip; folded, the strip shrinks to it. */
1905
+ :where(.control-strip) > .control-strip-handle {
1906
+ width: var(--clio-strip-handle-width);
1907
+ min-width: 0;
1908
+ height: var(--clio-strip-height);
1909
+ min-height: 0;
1910
+ border: 0;
1911
+ background: var(--clio-strip-handle) 0 0 / 100% 100% no-repeat;
1912
+ box-shadow: none;
1913
+ }
1914
+
1915
+ :where(.control-strip.is-collapsed)::before,
1916
+ :where(.control-strip.is-collapsed) > :not(.control-strip-handle) {
1917
+ display: none;
1918
+ }
1919
+
1920
+ :where(.control-strip.is-collapsed) > .control-strip-handle {
1921
+ width: var(--clio-strip-tab-width);
1922
+ background-image: var(--clio-strip-tab);
1923
+ }
1924
+
1925
+ :where(.control-strip)[data-edge="right"] {
1926
+ flex-direction: row-reverse;
1927
+ }
1928
+
1929
+ :where(.control-strip)[data-edge="right"]::before,
1930
+ :where(.control-strip)[data-edge="right"] > .control-strip-handle {
1931
+ transform: scaleX(-1);
1932
+ }
1933
+
1934
+ :where(.control-strip) > :focus-visible,
1935
+ :where(.control-strip-module):focus-visible {
1936
+ outline: var(--clio-focus-outline);
1937
+ outline-offset: -3px;
1938
+ }
1939
+
1940
+ /* Macintosh System 7 in colour (7.5.3). System 7 keeps System 6's geometry,
1941
+ fonts and black-and-white controls; colour reaches the window frame, the
1942
+ title bar, the scroll bars and alerts. Applies inside data-era="system7";
1943
+ clio.system7.css is a build with System 7 as the page default.
1944
+ Every value: System 7.5.3 in Infinite Mac, the 800x600 canvas read 1:1
1945
+ (npm run capture:system7); see EVIDENCE.md. */
1946
+ :root {
1947
+ /* 1px #666/#aaa checker desktop. */
1948
+ --clio-desktop: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='2' height='2' shape-rendering='crispEdges'%3E%3Cpath fill='%23aaa' d='M0 0h1v1H0zM1 1h1v1H1z'/%3E%3Cpath fill='%23666' d='M1 0h1v1H1zM0 1h1v1H0z'/%3E%3C/svg%3E") 0 0 / 2px 2px repeat, #888888;
1949
+
1950
+ /* Title bar: S6 rows, #eee ground, six #777 stripes, #ccf light on the
1951
+ top and left inside edges, #99c shade on the bottom and right. */
1952
+ --clio-titlebar-height: 18px;
1953
+ --clio-titlebar-margin: 0;
1954
+ --clio-titlebar-padding: 3px 1px;
1955
+ --clio-titlebar-bg:
1956
+ linear-gradient(to bottom, #777777 0 1px, transparent 1px 2px)
1957
+ 0 0 / 100% 2px repeat-y content-box content-box,
1958
+ #eeeeee;
1959
+ --clio-title-bg: #eeeeee;
1960
+ --clio-title-inactive-fg: #888888;
1961
+ --clio-titlebar-inactive-bg: #ffffff;
1962
+
1963
+ /* Scroll bars */
1964
+ --clio-scrollbar-track: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='2' shape-rendering='crispEdges'%3E%3Cpath fill='%23ddd' d='M0 0h4v2H0z'/%3E%3Cpath fill='%23777' d='M2 0h1v1H2zM0 1h1v1H0z'/%3E%3C/svg%3E") 0 0 / 4px 2px repeat, #dddddd;
1965
+ /* The grip sits where System 7's fixed 16px scroll box has it: 3px from the
1966
+ leading edge, whatever length the browser gives the box. */
1967
+ --clio-scrollbar-thumb-bg: var(--clio-art-s7-grip-v) 50% 2px / 6px 10px no-repeat, #aaaaaa;
1968
+ --clio-scrollbar-thumb-bg-horizontal: var(--clio-art-s7-grip-h) 2px 50% / 10px 6px no-repeat, #aaaaaa;
1969
+ --clio-scrollbar-thumb-border: 0;
1970
+ --clio-scrollbar-thumb-shadow: inset -1px -1px 0 #333366, inset 1px 1px 0 #ccccff; /* the shade owns the corners */
1971
+ --clio-scrollbar-button-bg: #dddddd;
1972
+ --clio-scrollbar-up: var(--clio-art-s7-up);
1973
+ --clio-scrollbar-up-on: var(--clio-art-s7-up);
1974
+ --clio-scrollbar-down: var(--clio-art-s7-down);
1975
+ --clio-scrollbar-down-on: var(--clio-art-s7-down);
1976
+ --clio-scrollbar-left: var(--clio-art-s7-left);
1977
+ --clio-scrollbar-left-on: var(--clio-art-s7-left);
1978
+ --clio-scrollbar-right: var(--clio-art-s7-right);
1979
+ --clio-scrollbar-right-on: var(--clio-art-s7-right);
1980
+ --clio-scrollbar-corner: var(--clio-art-s7-grow) 0 0 / 14px 14px no-repeat, #eeeeee;
1981
+ --clio-scrollbar-thumb-color: #aaaaaa;
1982
+ --clio-scrollbar-track-color: #dddddd;
1983
+
1984
+ /* Menus: disabled items and the separator are solid #888 (System 6 used a
1985
+ 50% dither); the separator is still a full 16px row, ruled on its ninth line. */
1986
+ --clio-disabled: #888888;
1987
+ --clio-disabled-dither: none;
1988
+
1989
+ /* Control Strip, measured from System 7.5.3 (frame folder-window): the
1990
+ Mac OS 9 geometry and art in System 7 greys, #ccc cells with a #aaa then
1991
+ #888 shade; the held module is inferred from Mac OS 9's in these greys. */
1992
+ --clio-strip-bg: #cccccc;
1993
+ --clio-strip-line: 1px solid #000000;
1994
+ --clio-strip-cell-shadow: inset -1px -1px 0 #888888, inset -2px -2px 0 #aaaaaa, inset 1px 1px 0 #cccccc, inset 2px 2px 0 #ffffff;
1995
+ --clio-strip-sunken-shadow: none;
1996
+ /* Idle scroll cells: #888 along the top and left, white along the bottom and
1997
+ right, the two odd corners left in the face. */
1998
+ --clio-strip-sunken-lines:
1999
+ linear-gradient(#888888, #888888) 0 0 / calc(100% - 1px) 1px no-repeat,
2000
+ linear-gradient(#888888, #888888) 0 0 / 1px calc(100% - 1px) no-repeat,
2001
+ linear-gradient(#ffffff, #ffffff) 1px 100% / calc(100% - 1px) 1px no-repeat,
2002
+ linear-gradient(#ffffff, #ffffff) 100% 1px / 1px calc(100% - 1px) no-repeat;
2003
+ --clio-strip-pressed-bg: #888888;
2004
+ --clio-strip-pressed-shadow: inset 2px 2px 0 #555555, inset -2px -2px 0 #cccccc;
2005
+ --clio-strip-cap: var(--clio-art-s7-strip-cap);
2006
+ --clio-strip-back: var(--clio-art-p9-strip-back);
2007
+ --clio-strip-forward: var(--clio-art-p9-strip-forward);
2008
+ --clio-strip-menu: var(--clio-art-p9-strip-menu);
2009
+ --clio-strip-handle: var(--clio-art-p9-strip-handle);
2010
+ --clio-strip-tab: var(--clio-art-p9-strip-tab);
2011
+ --clio-disabled-fill: currentcolor;
2012
+ --clio-menu-separator: linear-gradient(#888888, #888888) 0 8px / 100% 1px no-repeat;
2013
+
2014
+ /* Pop-up menu (Numbers control panel): an 18px box, a 1px shadow that starts
2015
+ 3px in from the corner, an 11x6 black triangle 5px from the right edge,
2016
+ the label 15px in. */
2017
+ --clio-popup-shadow: 2px 2px 0 -1px #000000;
2018
+ --clio-popup-padding: 0 22px 0 14px;
2019
+ --clio-popup-arrow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='6' shape-rendering='crispEdges'%3E%3Cpath d='M0 0h11v1H0zM1 1h9v1H1zM2 2h7v1H2zM3 3h5v1H3zM4 4h3v1H4zM5 5h1v1H5z'/%3E%3C/svg%3E") right 5px center / 11px 6px no-repeat;
2020
+
2021
+ /* Progress (Finder copy): 11px, a 1px black frame, #ccf track, #444 fill. */
2022
+ --clio-progress-height: 11px;
2023
+ --clio-progress-bg: #ccccff;
2024
+ --clio-progress-fill: #444444;
2025
+
2026
+ /* Group box (General Controls, Numbers): a grey 1px line (#777 and #888
2027
+ alternate in the original; drawn #777 here). */
2028
+ --clio-group-border: 1px solid #777777;
2029
+
2030
+ /* Alert and modal frame: 1px black, a raised #ccf/#669 ring, #bbb, a
2031
+ sunken #669/#ccf ring, 1px black; the same 5px as System 6. */
2032
+ --clio-modal-border: 1px solid #000000;
2033
+ --clio-modal-frame:
2034
+ inset 1px 1px 0 #ccccff,
2035
+ inset -1px -1px 0 #666699,
2036
+ inset 0 0 0 2px #bbbbbb,
2037
+ inset 3px 3px 0 #666699,
2038
+ inset -3px -3px 0 #ccccff,
2039
+ inset 0 0 0 4px #000000;
2040
+
2041
+ /* Art redrawn from the captured pixels (tooling/s7-art.py). */
2042
+ --clio-art-s7-up: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath fill='%23dddddd' d='M1 1h12v1h-12zM1 2h5v1h-5zM7 2h6v1h-6zM1 3h4v1h-4zM8 3h5v1h-5zM1 4h3v1h-3zM9 4h4v1h-4zM1 5h2v1h-2zM10 5h3v1h-3zM1 6h1v1h-1zM11 6h2v1h-2zM12 7h1v1h-1zM1 8h3v1h-3zM9 8h4v1h-4zM1 9h3v1h-3zM9 9h4v1h-4zM1 10h3v1h-3zM9 10h4v1h-4zM1 11h3v1h-3zM9 11h4v1h-4zM1 12h12v1h-12z'/%3E%3Cpath fill='%23333366' d='M6 2h1v1h-1zM5 3h1v1h-1zM7 3h1v1h-1zM4 4h1v1h-1zM8 4h1v1h-1zM3 5h1v1h-1zM9 5h1v1h-1zM2 6h1v1h-1zM10 6h1v1h-1zM1 7h4v1h-4zM8 7h4v1h-4zM4 8h1v1h-1zM8 8h1v1h-1zM4 9h1v1h-1zM8 9h1v1h-1zM4 10h1v1h-1zM8 10h1v1h-1zM4 11h5v1h-5z'/%3E%3Cpath fill='%239999cc' d='M6 3h1v1h-1zM5 4h3v1h-3zM4 5h5v1h-5zM3 6h7v1h-7zM5 7h3v1h-3zM5 8h3v1h-3zM5 9h3v1h-3zM5 10h3v1h-3z'/%3E%3Cpath fill='%23777777' d='M13 0h1v1h-1zM13 1h1v1h-1zM13 2h1v1h-1zM13 3h1v1h-1zM13 4h1v1h-1zM13 5h1v1h-1zM13 6h1v1h-1zM13 7h1v1h-1zM13 8h1v1h-1zM13 9h1v1h-1zM13 10h1v1h-1zM13 11h1v1h-1zM13 12h1v1h-1zM0 13h14v1h-14z'/%3E%3Cpath fill='%23ffffff' d='M0 0h13v1h-13zM0 1h1v1h-1zM0 2h1v1h-1zM0 3h1v1h-1zM0 4h1v1h-1zM0 5h1v1h-1zM0 6h1v1h-1zM0 7h1v1h-1zM0 8h1v1h-1zM0 9h1v1h-1zM0 10h1v1h-1zM0 11h1v1h-1zM0 12h1v1h-1z'/%3E%3C/svg%3E");
2043
+ --clio-art-s7-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath fill='%23dddddd' d='M1 1h12v1h-12zM1 2h3v1h-3zM9 2h4v1h-4zM1 3h3v1h-3zM9 3h4v1h-4zM1 4h3v1h-3zM9 4h4v1h-4zM1 5h3v1h-3zM9 5h4v1h-4zM12 6h1v1h-1zM1 7h1v1h-1zM11 7h2v1h-2zM1 8h2v1h-2zM10 8h3v1h-3zM1 9h3v1h-3zM9 9h4v1h-4zM1 10h4v1h-4zM8 10h5v1h-5zM1 11h5v1h-5zM7 11h6v1h-6zM1 12h12v1h-12z'/%3E%3Cpath fill='%23333366' d='M4 2h5v1h-5zM4 3h1v1h-1zM8 3h1v1h-1zM4 4h1v1h-1zM8 4h1v1h-1zM4 5h1v1h-1zM8 5h1v1h-1zM1 6h4v1h-4zM8 6h4v1h-4zM2 7h1v1h-1zM10 7h1v1h-1zM3 8h1v1h-1zM9 8h1v1h-1zM4 9h1v1h-1zM8 9h1v1h-1zM5 10h1v1h-1zM7 10h1v1h-1zM6 11h1v1h-1z'/%3E%3Cpath fill='%239999cc' d='M5 3h3v1h-3zM5 4h3v1h-3zM5 5h3v1h-3zM5 6h3v1h-3zM3 7h7v1h-7zM4 8h5v1h-5zM5 9h3v1h-3zM6 10h1v1h-1z'/%3E%3Cpath fill='%23777777' d='M13 0h1v1h-1zM13 1h1v1h-1zM13 2h1v1h-1zM13 3h1v1h-1zM13 4h1v1h-1zM13 5h1v1h-1zM13 6h1v1h-1zM13 7h1v1h-1zM13 8h1v1h-1zM13 9h1v1h-1zM13 10h1v1h-1zM13 11h1v1h-1zM13 12h1v1h-1zM0 13h14v1h-14z'/%3E%3Cpath fill='%23ffffff' d='M0 0h13v1h-13zM0 1h1v1h-1zM0 2h1v1h-1zM0 3h1v1h-1zM0 4h1v1h-1zM0 5h1v1h-1zM0 6h1v1h-1zM0 7h1v1h-1zM0 8h1v1h-1zM0 9h1v1h-1zM0 10h1v1h-1zM0 11h1v1h-1zM0 12h1v1h-1z'/%3E%3C/svg%3E");
2044
+ --clio-art-s7-left: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath fill='%23dddddd' d='M1 1h6v1h-6zM8 1h5v1h-5zM1 2h5v1h-5zM8 2h5v1h-5zM1 3h4v1h-4zM8 3h5v1h-5zM1 4h3v1h-3zM12 4h1v1h-1zM1 5h2v1h-2zM12 5h1v1h-1zM1 6h1v1h-1zM12 6h1v1h-1zM1 7h2v1h-2zM12 7h1v1h-1zM1 8h3v1h-3zM12 8h1v1h-1zM1 9h4v1h-4zM8 9h5v1h-5zM1 10h5v1h-5zM8 10h5v1h-5zM1 11h6v1h-6zM8 11h5v1h-5zM1 12h12v1h-12z'/%3E%3Cpath fill='%23333366' d='M7 1h1v1h-1zM6 2h2v1h-2zM5 3h1v1h-1zM7 3h1v1h-1zM4 4h1v1h-1zM7 4h5v1h-5zM3 5h1v1h-1zM11 5h1v1h-1zM2 6h1v1h-1zM11 6h1v1h-1zM3 7h1v1h-1zM11 7h1v1h-1zM4 8h1v1h-1zM7 8h5v1h-5zM5 9h1v1h-1zM7 9h1v1h-1zM6 10h2v1h-2zM7 11h1v1h-1z'/%3E%3Cpath fill='%239999cc' d='M6 3h1v1h-1zM5 4h2v1h-2zM4 5h7v1h-7zM3 6h8v1h-8zM4 7h7v1h-7zM5 8h2v1h-2zM6 9h1v1h-1z'/%3E%3Cpath fill='%23777777' d='M13 0h1v1h-1zM13 1h1v1h-1zM13 2h1v1h-1zM13 3h1v1h-1zM13 4h1v1h-1zM13 5h1v1h-1zM13 6h1v1h-1zM13 7h1v1h-1zM13 8h1v1h-1zM13 9h1v1h-1zM13 10h1v1h-1zM13 11h1v1h-1zM13 12h1v1h-1zM0 13h14v1h-14z'/%3E%3Cpath fill='%23ffffff' d='M0 0h13v1h-13zM0 1h1v1h-1zM0 2h1v1h-1zM0 3h1v1h-1zM0 4h1v1h-1zM0 5h1v1h-1zM0 6h1v1h-1zM0 7h1v1h-1zM0 8h1v1h-1zM0 9h1v1h-1zM0 10h1v1h-1zM0 11h1v1h-1zM0 12h1v1h-1z'/%3E%3C/svg%3E");
2045
+ --clio-art-s7-right: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath fill='%23dddddd' d='M1 1h5v1h-5zM7 1h6v1h-6zM1 2h5v1h-5zM8 2h5v1h-5zM1 3h5v1h-5zM9 3h4v1h-4zM1 4h1v1h-1zM10 4h3v1h-3zM1 5h1v1h-1zM11 5h2v1h-2zM1 6h1v1h-1zM12 6h1v1h-1zM1 7h1v1h-1zM11 7h2v1h-2zM1 8h1v1h-1zM10 8h3v1h-3zM1 9h5v1h-5zM9 9h4v1h-4zM1 10h5v1h-5zM8 10h5v1h-5zM1 11h5v1h-5zM7 11h6v1h-6zM1 12h12v1h-12z'/%3E%3Cpath fill='%23333366' d='M6 1h1v1h-1zM6 2h2v1h-2zM6 3h1v1h-1zM8 3h1v1h-1zM2 4h5v1h-5zM9 4h1v1h-1zM2 5h1v1h-1zM10 5h1v1h-1zM2 6h1v1h-1zM11 6h1v1h-1zM2 7h1v1h-1zM10 7h1v1h-1zM2 8h5v1h-5zM9 8h1v1h-1zM6 9h1v1h-1zM8 9h1v1h-1zM6 10h2v1h-2zM6 11h1v1h-1z'/%3E%3Cpath fill='%239999cc' d='M7 3h1v1h-1zM7 4h2v1h-2zM3 5h7v1h-7zM3 6h8v1h-8zM3 7h7v1h-7zM7 8h2v1h-2zM7 9h1v1h-1z'/%3E%3Cpath fill='%23777777' d='M13 0h1v1h-1zM13 1h1v1h-1zM13 2h1v1h-1zM13 3h1v1h-1zM13 4h1v1h-1zM13 5h1v1h-1zM13 6h1v1h-1zM13 7h1v1h-1zM13 8h1v1h-1zM13 9h1v1h-1zM13 10h1v1h-1zM13 11h1v1h-1zM13 12h1v1h-1zM0 13h14v1h-14z'/%3E%3Cpath fill='%23ffffff' d='M0 0h13v1h-13zM0 1h1v1h-1zM0 2h1v1h-1zM0 3h1v1h-1zM0 4h1v1h-1zM0 5h1v1h-1zM0 6h1v1h-1zM0 7h1v1h-1zM0 8h1v1h-1zM0 9h1v1h-1zM0 10h1v1h-1zM0 11h1v1h-1zM0 12h1v1h-1z'/%3E%3C/svg%3E");
2046
+ --clio-art-s7-grow: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' shape-rendering='crispEdges'%3E%3Cpath fill='%23eeeeee' d='M0 0h14v1h-14zM0 1h14v1h-14zM0 2h2v1h-2zM8 2h6v1h-6zM0 3h2v1h-2zM12 3h2v1h-2zM0 4h2v1h-2zM12 4h2v1h-2zM0 5h2v1h-2zM12 5h2v1h-2zM0 6h2v1h-2zM12 6h2v1h-2zM0 7h2v1h-2zM12 7h2v1h-2zM0 8h3v1h-3zM12 8h2v1h-2zM0 9h3v1h-3zM12 9h2v1h-2zM0 10h3v1h-3zM12 10h2v1h-2zM0 11h3v1h-3zM12 11h2v1h-2zM0 12h14v1h-14zM0 13h14v1h-14z'/%3E%3Cpath fill='%23333366' d='M2 2h6v1h-6zM2 3h1v1h-1zM8 3h4v1h-4zM2 4h1v1h-1zM7 4h1v1h-1zM2 5h1v1h-1zM7 5h1v1h-1zM11 5h1v1h-1zM2 6h1v1h-1zM7 6h1v1h-1zM11 6h1v1h-1zM2 7h1v1h-1zM4 7h4v1h-4zM11 7h1v1h-1zM3 8h1v1h-1zM11 8h1v1h-1zM3 9h1v1h-1zM11 9h1v1h-1zM3 10h1v1h-1zM11 10h1v1h-1zM3 11h1v1h-1zM5 11h7v1h-7z'/%3E%3Cpath fill='%23aaaaaa' d='M8 5h3v1h-3zM8 6h3v1h-3zM8 7h3v1h-3zM5 8h6v1h-6zM5 9h6v1h-6zM5 10h6v1h-6z'/%3E%3Cpath fill='%23ccccff' d='M3 3h5v1h-5zM3 4h1v1h-1zM8 4h4v1h-4zM3 5h1v1h-1zM3 6h1v1h-1zM3 7h1v1h-1zM4 8h1v1h-1zM4 9h1v1h-1zM4 10h1v1h-1zM4 11h1v1h-1z'/%3E%3Cpath fill='%23bbbbbb' d='M4 4h3v1h-3zM4 5h3v1h-3zM4 6h3v1h-3z'/%3E%3C/svg%3E");
2047
+ --clio-art-s7-grip-v: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='10' shape-rendering='crispEdges'%3E%3Cpath fill='%23ccccff' d='M0 1h6v1h-6zM0 3h6v1h-6zM0 5h6v1h-6zM0 7h6v1h-6zM0 9h6v1h-6z'/%3E%3Cpath fill='%23666699' d='M0 2h6v1h-6zM0 4h6v1h-6zM0 6h6v1h-6zM0 8h6v1h-6z'/%3E%3Cpath fill='%239999cc' d='M0 0h6v1h-6z'/%3E%3C/svg%3E");
2048
+ --clio-art-s7-grip-h: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' shape-rendering='crispEdges'%3E%3Cpath fill='%23ccccff' d='M1 0h1v1h-1zM3 0h1v1h-1zM5 0h1v1h-1zM7 0h1v1h-1zM9 0h1v1h-1zM1 1h1v1h-1zM3 1h1v1h-1zM5 1h1v1h-1zM7 1h1v1h-1zM9 1h1v1h-1zM1 2h1v1h-1zM3 2h1v1h-1zM5 2h1v1h-1zM7 2h1v1h-1zM9 2h1v1h-1zM1 3h1v1h-1zM3 3h1v1h-1zM5 3h1v1h-1zM7 3h1v1h-1zM9 3h1v1h-1zM1 4h1v1h-1zM3 4h1v1h-1zM5 4h1v1h-1zM7 4h1v1h-1zM9 4h1v1h-1zM1 5h1v1h-1zM3 5h1v1h-1zM5 5h1v1h-1zM7 5h1v1h-1zM9 5h1v1h-1z'/%3E%3Cpath fill='%23666699' d='M2 0h1v1h-1zM4 0h1v1h-1zM6 0h1v1h-1zM8 0h1v1h-1zM2 1h1v1h-1zM4 1h1v1h-1zM6 1h1v1h-1zM8 1h1v1h-1zM2 2h1v1h-1zM4 2h1v1h-1zM6 2h1v1h-1zM8 2h1v1h-1zM2 3h1v1h-1zM4 3h1v1h-1zM6 3h1v1h-1zM8 3h1v1h-1zM2 4h1v1h-1zM4 4h1v1h-1zM6 4h1v1h-1zM8 4h1v1h-1zM2 5h1v1h-1zM4 5h1v1h-1zM6 5h1v1h-1zM8 5h1v1h-1z'/%3E%3Cpath fill='%239999cc' d='M0 0h1v1h-1zM0 1h1v1h-1zM0 2h1v1h-1zM0 3h1v1h-1zM0 4h1v1h-1zM0 5h1v1h-1z'/%3E%3C/svg%3E");
2049
+ }
2050
+
2051
+ /* The title bar's light and shade edges. */
2052
+ :root .title-bar {
2053
+ /* The shade is drawn last: it owns the bottom-left and top-right corners. */
2054
+ box-shadow: inset -1px -1px 0 #9999cc, inset 1px 1px 0 #ccccff;
2055
+ }
2056
+
2057
+ /* Close and zoom boxes: an 11px square sunk into the bar (#336 above-left,
2058
+ #ccf below-right) with a raised #ccf/#336 inner ring around #aaa, and 1px
2059
+ of #eee between the box and the stripes. */
2060
+ :root .title-bar > :is(button, .close, .close-box, .resize, .resize-box, .zoom) {
2061
+ /* The outer ring is painted, not bordered: the whole top row and left column
2062
+ are #336 (a CSS border would mitre the corners into a blend). */
2063
+ border: 1px solid transparent;
2064
+ background:
2065
+ linear-gradient(#333366, #333366) 0 0 / 100% 1px no-repeat,
2066
+ linear-gradient(#333366, #333366) 0 0 / 1px 100% no-repeat,
2067
+ linear-gradient(#aaaaaa, #aaaaaa),
2068
+ #ccccff;
2069
+ background-origin: border-box, border-box, padding-box, border-box;
2070
+ background-clip: border-box, border-box, padding-box, border-box;
2071
+ box-shadow: inset 1px 1px 0 #ccccff, inset -1px -1px 0 #333366, 0 0 0 1px #eeeeee;
2072
+ }
2073
+
2074
+ /* Zoom: a 5px square in the top-left of the grey centre, drawn #336. */
2075
+ :root .title-bar > :is(.resize, .resize-box, .zoom)::before {
2076
+ top: 1px;
2077
+ left: 1px;
2078
+ width: 5px;
2079
+ height: 5px;
2080
+ border-right: 1px solid #333366;
2081
+ border-bottom: 1px solid #333366;
2082
+ }
2083
+
2084
+ /* Held: a black square with a #99c face and the starburst. */
2085
+ :root .title-bar > :is(.close, .close-box, .resize, .resize-box, .zoom):is(:active, .active) {
2086
+ border-color: #000000;
2087
+ background: var(--clio-art-s6-burst) 0 0 / 11px 11px no-repeat border-box, #9999cc;
2088
+ background-clip: border-box;
2089
+ box-shadow: 0 0 0 1px #eeeeee;
2090
+ }
2091
+
2092
+ /* Background window: #555 frame, a plain white title bar, #888 title. */
2093
+ :root .window.inactive {
2094
+ border-color: #555555;
2095
+ }
2096
+
2097
+ :root .window.inactive > .title-bar,
2098
+ :root .inactive-title-bar {
2099
+ border-bottom-color: #555555;
2100
+ box-shadow: none;
2101
+ --clio-title-bg: #ffffff;
2102
+ }
2103
+
2104
+ :root .window.inactive > .title-bar > :is(.title, h1, h2, h3),
2105
+ :root .inactive-title-bar > :is(.title, h1, h2, h3) {
2106
+ background: #ffffff;
2107
+ }
2108
+
2109
+ /* The scroll box's leading edge is a #555 line (16 rows in all, as in System 6). */
2110
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb:vertical,
2111
+ :root:is(html.clio-scrollbars)::-webkit-scrollbar-thumb:vertical {
2112
+ min-height: 17px; /* the lane's black line, then 16 rows of box */
2113
+ border-top: 1px solid #555555;
2114
+ border-left: 1px solid #000000; /* the lane's own line, which the box covers */
2115
+ }
2116
+
2117
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb:horizontal,
2118
+ :root:is(html.clio-scrollbars)::-webkit-scrollbar-thumb:horizontal {
2119
+ min-width: 17px;
2120
+ border-left: 1px solid #555555;
2121
+ border-top: 1px solid #000000;
2122
+ }
2123
+
2124
+ /* The arrow art already carries its face, light and shade. */
2125
+ :root :is(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button,
2126
+ :root:is(html.clio-scrollbars)::-webkit-scrollbar-button {
2127
+ background-size: 14px 14px;
2128
+ }
2129
+
2130
+ /* Adaptations the historical machines never needed. Historical sizes are
2131
+ calibration, not a cage: on a touch screen the controls grow to the
2132
+ "coarse pointer" sizes from AI System 6's fidelity contract, without any
2133
+ transform: scale() of the interface. */
2134
+ @media (pointer: coarse) {
2135
+ :root,
2136
+ [data-era] {
2137
+ --clio-control-height: 36px;
2138
+ --clio-popup-height: 36px;
2139
+ --clio-field-height: 40px;
2140
+ --clio-menubar-height: 32px;
2141
+ --clio-menu-item-height: 32px;
2142
+ --clio-list-row: 32px;
2143
+ --clio-tab-height: 32px;
2144
+ }
2145
+
2146
+ /* The title-bar boxes keep their 11px art; their hit area grows to 44px. */
2147
+ .title-bar > :is(button, .close, .close-box, .resize, .resize-box, .zoom, .shade, .shade-box, .collapse)::after {
2148
+ content: "";
2149
+ position: absolute;
2150
+ inset: -17px;
2151
+ }
2152
+ }
2153
+
2154
+ /* Windows High Contrast and other forced-colour modes: give the choice
2155
+ controls back to the system so their state stays visible. */
2156
+ @media (forced-colors: active) {
2157
+ :where(input[type="checkbox"], input[type="radio"]) {
2158
+ appearance: auto;
2159
+ -webkit-appearance: auto;
2160
+ }
2161
+
2162
+ .title-bar,
2163
+ .inactive-title-bar {
2164
+ forced-color-adjust: none;
2165
+ }
2166
+ }
2167
+
2168
+ @media print {
2169
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog) {
2170
+ box-shadow: none;
2171
+ }
2172
+ }