clio.css 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1446 @@
1
+ /*! clio.css 0.1.0 (System 6 only) | MIT | https://surfine.github.io/clio.css/
2
+ * Classic Mac OS interface CSS: System 6 and Mac OS 9 Platinum.
3
+ * Measured values traced to AI System 6; see EVIDENCE.md.
4
+ * Includes art from system.css (MIT) and classic-stylesheets (MIT); see THIRD-PARTY.md. */
5
+ /* Fonts. Only two faces ship, both with a licence that allows it:
6
+ - ChicagoFLF: a public-domain outline revival of Chicago (Robin Casady).
7
+ - Asap (variable, wdth + wght): SIL OFL 1.1, Omnibus-Type. The legal
8
+ stand-in for Charcoal that AI System 6 measured its Platinum title bar
9
+ against (width axis 113 for text, 123 for titles).
10
+ Apple's own faces (Chicago, Geneva, Charcoal, Monaco) are never shipped;
11
+ the stacks below reach them only when the visitor already has them. */
12
+ @font-face {
13
+ font-family: "ChicagoFLF";
14
+ src: url("fonts/ChicagoFLF.woff2") format("woff2"),
15
+ url("fonts/ChicagoFLF.woff") format("woff");
16
+ font-display: swap;
17
+ }
18
+
19
+ @font-face {
20
+ font-family: "Clio Asap";
21
+ src: url("fonts/Asap-Variable.woff2") format("woff2");
22
+ font-style: normal;
23
+ font-weight: 100 900;
24
+ font-stretch: 75% 125%;
25
+ font-display: swap;
26
+ }
27
+
28
+ /* Tokens: Macintosh System 6 is the default era.
29
+ Every value below is traceable in EVIDENCE.md. A value marked [M] there was
30
+ measured from real pixels; [I] is inferred; [A] is a deliberate web
31
+ adaptation (contrast, focus, touch). Platinum re-declares these tokens in
32
+ 90-platinum.css under [data-era="platinum"]. */
33
+ :root,
34
+ [data-era="system6"] {
35
+ /* 1-bit palette. System 6 on a compact Mac had two colours. */
36
+ --clio-ink: #000000;
37
+ --clio-paper: #ffffff;
38
+ --clio-face: #ffffff;
39
+ /* [A] Disabled text: System 6 drew it through a 50% grey pattern; a solid
40
+ grey keeps 5.6:1 on white instead of a dither the browser would blur. */
41
+ --clio-disabled: #696969;
42
+ --clio-selection-bg: #000000;
43
+ --clio-selection-fg: #ffffff;
44
+
45
+ /* Type. Chicago 12 is the system font; Geneva is the application font. */
46
+ --clio-font-chrome: Chicago, "ChicagoFLF", Charcoal, Geneva, "Helvetica Neue", Arial, sans-serif;
47
+ --clio-font-text: Geneva, "Clio Asap", "Helvetica Neue", Arial, sans-serif;
48
+ --clio-font-mono: Monaco, Menlo, Consolas, "Courier New", monospace;
49
+ --clio-font-size: 12px;
50
+ --clio-font-size-small: 10px;
51
+ --clio-chrome-weight: 400;
52
+ --clio-font-stretch-text: normal;
53
+ --clio-font-stretch-title: normal;
54
+
55
+ /* Geometry */
56
+ --clio-line: 1px;
57
+ --clio-border: 1px solid var(--clio-ink);
58
+ --clio-radius: 0;
59
+ --clio-control-height: 20px;
60
+ --clio-field-height: 20px;
61
+ --clio-row-height: 16px;
62
+ --clio-gap: 8px;
63
+
64
+ /* Focus: [A] the era had no keyboard focus ring for buttons. A dotted frame
65
+ is how System 6 drew a dragged outline, so it reads as native and cannot
66
+ be confused with the default button's solid ring. */
67
+ --clio-focus-outline: 1px dotted var(--clio-ink);
68
+ --clio-focus-offset: 2px;
69
+
70
+ /* Desktop */
71
+ --clio-desktop: var(--clio-art-s6-desktop) 0 0 / 2px 2px repeat, #808080;
72
+
73
+ /* Window frame and title bar [M: measured at the emulator's exact 2x] */
74
+ --clio-window-bg: var(--clio-paper);
75
+ --clio-pane-bg: var(--clio-paper);
76
+ --clio-window-border: 1px solid var(--clio-ink);
77
+ --clio-window-shadow: 1px 1px 0 var(--clio-ink);
78
+ --clio-window-padding: 0;
79
+ --clio-titlebar-height: 17px;
80
+ --clio-titlebar-margin: 1px 0 0;
81
+ --clio-titlebar-padding: 2px 1px;
82
+ --clio-titlebar-border: 1px solid var(--clio-ink);
83
+ --clio-titlebar-row: 12px;
84
+ --clio-titlebar-stripe: 2px;
85
+ --clio-titlebar-bg:
86
+ linear-gradient(to bottom, var(--clio-ink) 0 1px, transparent 1px 2px)
87
+ 0 0 / 100% var(--clio-titlebar-stripe) repeat-y content-box content-box,
88
+ var(--clio-paper);
89
+ --clio-titlebar-inactive-bg: var(--clio-paper);
90
+ --clio-title-font-size: 12px;
91
+ --clio-title-bg: var(--clio-paper);
92
+ --clio-title-fg: var(--clio-ink);
93
+ --clio-title-inactive-fg: var(--clio-ink);
94
+ --clio-title-padding: 0 0.5em;
95
+ --clio-titlebar-slot: 18px;
96
+ --clio-titlebar-shade-slot: 0px;
97
+ --clio-shade-display: none;
98
+ --clio-box-size: 11px;
99
+ --clio-box-inset: 7px;
100
+ --clio-box-isolation: 3px;
101
+
102
+ /* Menus */
103
+ --clio-menubar-height: 20px;
104
+ --clio-menubar-bg: var(--clio-paper);
105
+ --clio-menubar-border: 1px solid var(--clio-ink);
106
+ --clio-menubar-shadow: none;
107
+ --clio-menubar-padding: 0 8px;
108
+ --clio-menu-title-padding: 0 8px;
109
+ --clio-menu-title-active-bg: var(--clio-ink);
110
+ --clio-menu-title-active-fg: var(--clio-paper);
111
+ --clio-menu-title-active-shadow: none;
112
+ --clio-menu-bg: var(--clio-paper);
113
+ --clio-menu-border: 1px solid var(--clio-ink);
114
+ --clio-menu-border-top-width: 1px;
115
+ --clio-menu-shadow: 1px 1px 0 var(--clio-ink);
116
+ --clio-menu-item-height: 16px;
117
+ --clio-menu-item-padding: 0 12px 0 16px;
118
+ --clio-menu-item-weight: 400;
119
+ --clio-menu-item-active-bg: var(--clio-ink);
120
+ --clio-menu-item-active-fg: var(--clio-paper);
121
+ --clio-menu-item-active-shadow: none;
122
+ --clio-menu-separator:
123
+ repeating-linear-gradient(to right, var(--clio-ink) 0 1px, transparent 1px 2px) 0 50% / 100% 1px no-repeat;
124
+ --clio-menu-separator-height: 16px;
125
+
126
+ /* Push buttons */
127
+ --clio-button-bg: var(--clio-paper);
128
+ --clio-button-fg: var(--clio-ink);
129
+ --clio-button-border: 1px solid var(--clio-ink);
130
+ --clio-button-radius: 7px;
131
+ --clio-button-shadow: 0 0 0 0 transparent;
132
+ --clio-button-padding: 0 12px;
133
+ --clio-button-min-width: 59px;
134
+ --clio-button-weight: 400;
135
+ --clio-button-active-bg: var(--clio-ink);
136
+ --clio-button-active-fg: var(--clio-paper);
137
+ --clio-button-active-shadow: 0 0 0 0 transparent;
138
+ /* Default button: Inside Macintosh's recipe is PenSize(3,3) around the
139
+ button inset by -4, so a 1px gap then a 3px ring. */
140
+ --clio-button-default-ring: 0 0 0 1px var(--clio-paper), 0 0 0 4px var(--clio-ink);
141
+ --clio-button-default-radius: 8px;
142
+ --clio-button-disabled-fg: var(--clio-disabled);
143
+ --clio-button-disabled-border: 1px solid var(--clio-ink);
144
+
145
+ /* Check boxes and radio buttons */
146
+ --clio-check-size: 12px;
147
+ --clio-check-bg: var(--clio-paper);
148
+ --clio-check-border: 1px solid var(--clio-ink);
149
+ --clio-check-shadow: none;
150
+ --clio-check-mark: var(--clio-art-s6-check) 0 0 / 12px 12px no-repeat;
151
+ --clio-check-mark-origin: border-box;
152
+ --clio-check-pressed-border-width: 2px;
153
+ --clio-radio-size: 12px;
154
+ --clio-radio-off: var(--clio-art-s6-radio) 0 0 / 12px 12px no-repeat;
155
+ --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;
156
+ --clio-radio-pressed: var(--clio-art-s6-radio-focus) 0 0 / 12px 12px no-repeat;
157
+ --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;
158
+
159
+ /* Text fields */
160
+ --clio-field-bg: var(--clio-paper);
161
+ --clio-field-border: 1px solid var(--clio-ink);
162
+ --clio-field-shadow: none;
163
+ --clio-field-padding: 2px 3px;
164
+ --clio-field-focus-shadow: none;
165
+
166
+ /* Pop-up menus */
167
+ --clio-popup-bg: var(--clio-paper);
168
+ --clio-popup-border: 1px solid var(--clio-ink);
169
+ --clio-popup-radius: 0;
170
+ --clio-popup-shadow: 1px 1px 0 var(--clio-ink);
171
+ --clio-popup-padding: 0 24px 0 6px;
172
+ --clio-popup-arrow: var(--clio-art-s6-popup) right 6px center / 11px 6px no-repeat;
173
+ --clio-popup-weight: 400;
174
+
175
+ /* Scroll bars */
176
+ --clio-scrollbar-size: 16px;
177
+ --clio-scrollbar-track: var(--clio-art-s6-desktop) 0 0 / 2px 2px repeat, #808080;
178
+ --clio-scrollbar-track-shadow: none;
179
+ --clio-scrollbar-thumb-bg: var(--clio-paper);
180
+ --clio-scrollbar-thumb-border: 1px solid var(--clio-ink);
181
+ --clio-scrollbar-thumb-shadow: none;
182
+ --clio-scrollbar-button-bg: var(--clio-paper);
183
+ --clio-scrollbar-button-shadow: none;
184
+ --clio-scrollbar-up: var(--clio-art-s6-up);
185
+ --clio-scrollbar-up-on: var(--clio-art-s6-up-on);
186
+ --clio-scrollbar-down: var(--clio-art-s6-down);
187
+ --clio-scrollbar-down-on: var(--clio-art-s6-down-on);
188
+ --clio-scrollbar-left: var(--clio-art-s6-left);
189
+ --clio-scrollbar-left-on: var(--clio-art-s6-left-on);
190
+ --clio-scrollbar-right: var(--clio-art-s6-right);
191
+ --clio-scrollbar-right-on: var(--clio-art-s6-right-on);
192
+
193
+ /* Dialogs */
194
+ --clio-dialog-bg: var(--clio-paper);
195
+ /* [I] dBoxProc: a 1px frame, a 1px paper gap, then a 2px ink border. */
196
+ --clio-modal-border: 1px solid var(--clio-ink);
197
+ --clio-modal-frame: inset 0 0 0 1px var(--clio-paper), inset 0 0 0 3px var(--clio-ink);
198
+ --clio-modal-padding: 16px 18px;
199
+ --clio-plain-dialog-border: 1px solid var(--clio-ink);
200
+ --clio-plain-dialog-shadow: 2px 2px 0 var(--clio-ink);
201
+
202
+ /* Bars, lists, groups, progress, tabs */
203
+ --clio-details-bg: var(--clio-paper);
204
+ /* [I] Finder's info line closes with two 1px rules. */
205
+ --clio-details-border: 3px double var(--clio-ink);
206
+ --clio-list-bg: var(--clio-paper);
207
+ --clio-list-border: 1px solid var(--clio-ink);
208
+ --clio-list-shadow: none;
209
+ --clio-list-row: 16px;
210
+ --clio-group-border: 1px solid var(--clio-ink);
211
+ --clio-group-shadow: none;
212
+ --clio-group-bg: transparent;
213
+ --clio-progress-height: 12px;
214
+ --clio-progress-bg: var(--clio-paper);
215
+ --clio-progress-border: 1px solid var(--clio-ink);
216
+ --clio-progress-shadow: none;
217
+ --clio-progress-fill: var(--clio-ink);
218
+ --clio-tab-height: 20px;
219
+ --clio-tab-bg: var(--clio-paper);
220
+ --clio-tab-active-bg: var(--clio-paper);
221
+ --clio-tab-panel-bg: var(--clio-paper);
222
+ --clio-tab-panel-border: 1px solid var(--clio-ink);
223
+ --clio-label-bg: var(--clio-paper);
224
+ --clio-label-fg: var(--clio-ink);
225
+ --clio-label-selected-bg: var(--clio-ink);
226
+ --clio-label-selected-fg: var(--clio-paper);
227
+ }
228
+
229
+ /* Inline art. Pixel-grid SVGs, never Apple bitmaps: the System 6 check, radio
230
+ ring and dot come from system.css (MIT, Sakun Acharige); Platinum's art lives
231
+ in 90-platinum.css; everything here is drawn for clio.css. See
232
+ THIRD-PARTY.md. */
233
+ :root {
234
+ --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");
235
+ --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");
236
+ --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");
237
+ --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");
238
+ --clio-art-s6-up: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpolygon points='8.5,3.5 14.5,9.5 11.5,9.5 11.5,13.5 5.5,13.5 5.5,9.5 2.5,9.5' fill='%23fff' stroke='%23000' stroke-width='1' shape-rendering='crispEdges'/%3E%3C/svg%3E");
239
+ --clio-art-s6-up-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpolygon points='8.5,3.5 14.5,9.5 11.5,9.5 11.5,13.5 5.5,13.5 5.5,9.5 2.5,9.5' fill='%23000' stroke='%23000' stroke-width='1' shape-rendering='crispEdges'/%3E%3C/svg%3E");
240
+ --clio-art-s6-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpolygon points='8.5,13.5 14.5,7.5 11.5,7.5 11.5,3.5 5.5,3.5 5.5,7.5 2.5,7.5' fill='%23fff' stroke='%23000' stroke-width='1' shape-rendering='crispEdges'/%3E%3C/svg%3E");
241
+ --clio-art-s6-down-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpolygon points='8.5,13.5 14.5,7.5 11.5,7.5 11.5,3.5 5.5,3.5 5.5,7.5 2.5,7.5' fill='%23000' stroke='%23000' stroke-width='1' shape-rendering='crispEdges'/%3E%3C/svg%3E");
242
+ --clio-art-s6-left: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpolygon points='3.5,8.5 9.5,14.5 9.5,11.5 13.5,11.5 13.5,5.5 9.5,5.5 9.5,2.5' fill='%23fff' stroke='%23000' stroke-width='1' shape-rendering='crispEdges'/%3E%3C/svg%3E");
243
+ --clio-art-s6-left-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpolygon points='3.5,8.5 9.5,14.5 9.5,11.5 13.5,11.5 13.5,5.5 9.5,5.5 9.5,2.5' fill='%23000' stroke='%23000' stroke-width='1' shape-rendering='crispEdges'/%3E%3C/svg%3E");
244
+ --clio-art-s6-right: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpolygon points='13.5,8.5 7.5,14.5 7.5,11.5 3.5,11.5 3.5,5.5 7.5,5.5 7.5,2.5' fill='%23fff' stroke='%23000' stroke-width='1' shape-rendering='crispEdges'/%3E%3C/svg%3E");
245
+ --clio-art-s6-right-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpolygon points='13.5,8.5 7.5,14.5 7.5,11.5 3.5,11.5 3.5,5.5 7.5,5.5 7.5,2.5' fill='%23000' stroke='%23000' stroke-width='1' shape-rendering='crispEdges'/%3E%3C/svg%3E");
246
+ --clio-art-s6-popup: 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");
247
+ --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");
248
+ --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");
249
+ --clio-art-s6-menucheck: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' shape-rendering='crispEdges'%3E%3Cpath d='M9 0h1v2H9zM8 2h1v2H8zM7 4h1v2H7zM6 5h1v2H6zM5 6h1v3H5zM4 7h1v3H4zM3 6h1v3H3zM2 5h1v2H2zM1 4h1v2H1zM0 4h1v1H0z'/%3E%3C/svg%3E");
250
+ --clio-art-s6-menucheck-on: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' shape-rendering='crispEdges'%3E%3Cpath fill='%23fff' d='M9 0h1v2H9zM8 2h1v2H8zM7 4h1v2H7zM6 5h1v2H6zM5 6h1v3H5zM4 7h1v3H4zM3 6h1v3H3zM2 5h1v2H2zM1 4h1v2H1zM0 4h1v1H0z'/%3E%3C/svg%3E");
251
+ --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");
252
+ }
253
+
254
+ /* Base. clio.css styles elements only inside its own components, plus bare
255
+ form controls through :where(), so every rule here has zero specificity and
256
+ your own CSS always wins. It never restyles <body> unless you ask with
257
+ .desktop. */
258
+ :where(.desktop) {
259
+ margin: 0;
260
+ min-height: 100vh;
261
+ background: var(--clio-desktop);
262
+ color: var(--clio-ink);
263
+ }
264
+
265
+ :where(.window, .menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"],
266
+ .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) {
267
+ box-sizing: border-box;
268
+ color: var(--clio-ink);
269
+ font-family: var(--clio-font-chrome);
270
+ font-size: var(--clio-font-size);
271
+ font-weight: var(--clio-chrome-weight);
272
+ font-stretch: var(--clio-font-stretch-text);
273
+ font-synthesis: none;
274
+ line-height: 16px;
275
+ -webkit-font-smoothing: auto;
276
+ }
277
+
278
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) *,
279
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) *::before,
280
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .modeless-dialog, .clio) *::after {
281
+ box-sizing: border-box;
282
+ }
283
+
284
+ /* Application text (Geneva role) for content areas. */
285
+ :where(.window-pane, .modal-contents, .alert-contents, .text) {
286
+ font-family: var(--clio-font-text);
287
+ font-stretch: var(--clio-font-stretch-text);
288
+ }
289
+
290
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(h1, h2, h3, h4, .heading) {
291
+ margin: 0 0 8px;
292
+ font-family: var(--clio-font-chrome);
293
+ font-size: var(--clio-font-size);
294
+ font-weight: var(--clio-chrome-weight);
295
+ line-height: 16px;
296
+ }
297
+
298
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(p) {
299
+ margin: 0 0 8px;
300
+ }
301
+
302
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(a) {
303
+ color: inherit;
304
+ }
305
+
306
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(code, kbd, pre, samp) {
307
+ font-family: var(--clio-font-mono);
308
+ }
309
+
310
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) :where(hr) {
311
+ height: 0;
312
+ margin: 8px 0;
313
+ border: 0;
314
+ border-top: var(--clio-border);
315
+ }
316
+
317
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog, .clio) ::selection {
318
+ background: var(--clio-selection-bg);
319
+ color: var(--clio-selection-fg);
320
+ }
321
+
322
+ /* A row of controls with their label (system.css name kept). */
323
+ :where(.field-row, .field-row-stacked) {
324
+ display: flex;
325
+ align-items: center;
326
+ gap: 6px;
327
+ }
328
+
329
+ :where(.field-row-stacked) {
330
+ flex-direction: column;
331
+ align-items: flex-start;
332
+ gap: 4px;
333
+ }
334
+
335
+ :where(.field-row, .field-row-stacked) + :where(.field-row, .field-row-stacked) {
336
+ margin-top: 6px;
337
+ }
338
+
339
+ /* Hidden, still read aloud. */
340
+ :where(.visually-hidden, .title-bar button > span) {
341
+ position: absolute !important;
342
+ width: 1px;
343
+ height: 1px;
344
+ overflow: hidden;
345
+ clip: rect(0 0 0 0);
346
+ white-space: nowrap;
347
+ }
348
+
349
+ /* Windows.
350
+ Markup: .window > .title-bar (> .close, .title, .resize [, .shade]) >
351
+ optional .details-bar > .window-pane. system.css markup (.title-bar
352
+ button.close / button.resize, .inactive-title-bar) and AI System 6 markup
353
+ (.close-box, .resize-box, .shade-box, h1/h2 as the title) also work. */
354
+ :where(.window) {
355
+ position: relative;
356
+ display: flex;
357
+ flex-direction: column;
358
+ min-width: 120px;
359
+ padding: var(--clio-window-padding);
360
+ border: var(--clio-window-border);
361
+ background: var(--clio-window-bg);
362
+ box-shadow: var(--clio-window-shadow);
363
+ }
364
+
365
+ /* ---- Title bar ---------------------------------------------------------
366
+ System 6: a 17px box under a 1px inset: 2px of paper, six 1px ink stripes
367
+ on a 2px period across a 12px row, 2px of paper, then the 1px rule. */
368
+ .title-bar,
369
+ .inactive-title-bar {
370
+ --clio-tb-close: var(--clio-titlebar-slot);
371
+ --clio-tb-zoom: var(--clio-titlebar-slot);
372
+ --clio-tb-shade: var(--clio-titlebar-shade-slot);
373
+ --clio-tb-gutter: max(var(--clio-tb-close), calc(var(--clio-tb-zoom) + var(--clio-tb-shade)));
374
+ position: relative;
375
+ display: grid;
376
+ flex: none;
377
+ grid-template-columns:
378
+ var(--clio-tb-gutter)
379
+ minmax(0, 1fr)
380
+ var(--clio-tb-zoom)
381
+ calc(var(--clio-tb-gutter) - var(--clio-tb-zoom));
382
+ grid-template-rows: var(--clio-titlebar-row);
383
+ align-items: start;
384
+ box-sizing: border-box;
385
+ height: var(--clio-titlebar-height);
386
+ margin: var(--clio-titlebar-margin);
387
+ padding: var(--clio-titlebar-padding);
388
+ border-bottom: var(--clio-titlebar-border);
389
+ background: var(--clio-titlebar-bg);
390
+ font-family: var(--clio-font-chrome);
391
+ user-select: none;
392
+ -webkit-user-select: none;
393
+ }
394
+
395
+ /* A slot is reserved only for a control that is really there, so the title
396
+ stays centred on the whole bar. */
397
+ .title-bar:not(:has(> :is(.resize, .resize-box, .zoom))) { --clio-tb-zoom: 0px; }
398
+ .title-bar:not(:has(> :is(.shade, .shade-box, .collapse))) { --clio-tb-shade: 0px; }
399
+
400
+ .title-bar > :is(.title, h1, h2, h3),
401
+ .inactive-title-bar > :is(.title, h1, h2, h3) {
402
+ grid-column: 2;
403
+ grid-row: 1;
404
+ justify-self: center;
405
+ max-width: 100%;
406
+ height: var(--clio-titlebar-row);
407
+ margin: 0;
408
+ padding: var(--clio-title-padding);
409
+ overflow: hidden;
410
+ background: var(--clio-title-bg);
411
+ color: var(--clio-title-fg);
412
+ font-family: var(--clio-font-chrome);
413
+ font-size: var(--clio-title-font-size);
414
+ font-stretch: var(--clio-font-stretch-title);
415
+ font-weight: var(--clio-chrome-weight);
416
+ line-height: var(--clio-titlebar-row);
417
+ text-align: center;
418
+ text-overflow: ellipsis;
419
+ white-space: nowrap;
420
+ }
421
+
422
+ /* ---- Close, zoom and collapse boxes ------------------------------------ */
423
+ .title-bar > :is(button, .close, .close-box, .resize, .resize-box, .zoom, .shade, .shade-box, .collapse) {
424
+ position: relative;
425
+ grid-row: 1;
426
+ width: var(--clio-box-size);
427
+ min-width: 0;
428
+ height: var(--clio-box-size);
429
+ min-height: 0;
430
+ margin: 0;
431
+ padding: 0;
432
+ border: 1px solid var(--clio-ink);
433
+ border-radius: 0;
434
+ background: var(--clio-paper);
435
+ box-shadow: 0 0 0 var(--clio-box-isolation) var(--clio-paper);
436
+ color: transparent;
437
+ font-size: 0;
438
+ appearance: none;
439
+ -webkit-appearance: none;
440
+ cursor: default;
441
+ touch-action: manipulation;
442
+ }
443
+
444
+ .title-bar > :is(.close, .close-box) {
445
+ grid-column: 1;
446
+ justify-self: start;
447
+ margin-left: var(--clio-box-inset);
448
+ }
449
+
450
+ .title-bar > :is(.resize, .resize-box, .zoom) {
451
+ grid-column: 3;
452
+ justify-self: end;
453
+ margin-right: var(--clio-box-inset);
454
+ }
455
+
456
+ /* System 6 had no WindowShade box; only an era that opens the slot shows it. */
457
+ .title-bar > :is(.shade, .shade-box, .collapse) {
458
+ display: var(--clio-shade-display);
459
+ grid-column: 4;
460
+ justify-self: end;
461
+ }
462
+
463
+ /* Pressed close box: the starburst System 6 draws while the mouse is held. */
464
+ .title-bar > :is(.close, .close-box)::before {
465
+ content: "";
466
+ position: absolute;
467
+ inset: -1px;
468
+ background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='11' height='11' shape-rendering='crispEdges'%3E%3Cpath d='M1 5h3v1H1zM7 5h3v1H7zM5 1h1v3H5zM5 7h1v3H5zM2 2h1v1H2zM3 3h1v1H3zM7 7h1v1H7zM8 8h1v1H8zM8 2h1v1H8zM7 3h1v1H7zM2 8h1v1H2zM3 7h1v1H3z'/%3E%3C/svg%3E") 0 0 / 11px 11px no-repeat;
469
+ opacity: 0;
470
+ }
471
+
472
+ .title-bar > :is(.close, .close-box):is(:active, .active)::before {
473
+ opacity: 1;
474
+ }
475
+
476
+ /* Zoom box: an inner square sharing the outer frame's top-left corner,
477
+ 7 of the frame's 11 pixels (System 6's 7:11 ratio). */
478
+ .title-bar > :is(.resize, .resize-box, .zoom)::before {
479
+ content: "";
480
+ position: absolute;
481
+ top: -1px;
482
+ left: -1px;
483
+ width: 7px;
484
+ height: 7px;
485
+ border-right: 1px solid var(--clio-ink);
486
+ border-bottom: 1px solid var(--clio-ink);
487
+ box-sizing: border-box;
488
+ }
489
+
490
+ .title-bar > :is(.resize, .resize-box, .zoom):is(:active, .active)::before {
491
+ opacity: 0;
492
+ }
493
+
494
+ .title-bar > button:focus-visible {
495
+ outline: var(--clio-focus-outline);
496
+ outline-offset: calc(var(--clio-box-isolation) - 1px);
497
+ }
498
+
499
+ /* ---- Inactive windows ----------------------------------------------------
500
+ System 6 draws a background window's title bar as a plain strip with its
501
+ name: no stripes, no close box, no zoom box. */
502
+ .window.inactive > .title-bar,
503
+ .inactive-title-bar {
504
+ background: var(--clio-titlebar-inactive-bg);
505
+ }
506
+
507
+ .window.inactive > .title-bar > :is(.title, h1, h2, h3),
508
+ .inactive-title-bar > :is(.title, h1, h2, h3) {
509
+ color: var(--clio-title-inactive-fg);
510
+ }
511
+
512
+ .window.inactive > .title-bar > :not(.title, h1, h2, h3),
513
+ .inactive-title-bar > :not(.title, h1, h2, h3) {
514
+ visibility: hidden;
515
+ }
516
+
517
+ /* ---- Window body ------------------------------------------------------- */
518
+ :where(.window-pane) {
519
+ flex: 1 1 auto;
520
+ min-height: 0;
521
+ padding: 8px;
522
+ overflow: auto;
523
+ background: var(--clio-pane-bg);
524
+ font-size: var(--clio-font-size);
525
+ line-height: 16px;
526
+ }
527
+
528
+ /* Finder's info line ("3 items 1,234K in disk"), ruled twice below. */
529
+ :where(.details-bar) {
530
+ display: flex;
531
+ flex: none;
532
+ justify-content: space-between;
533
+ gap: 16px;
534
+ padding: 2px 8px 1px;
535
+ border-bottom: var(--clio-details-border);
536
+ background: var(--clio-details-bg);
537
+ box-shadow: var(--clio-details-shadow, none);
538
+ font-family: var(--clio-font-text);
539
+ font-size: var(--clio-font-size);
540
+ line-height: 16px;
541
+ white-space: nowrap;
542
+ }
543
+
544
+ :where(.separator) {
545
+ flex: none;
546
+ border-top: var(--clio-border);
547
+ }
548
+
549
+ /* A status line under the pane. */
550
+ :where(.status-bar) {
551
+ display: flex;
552
+ flex: none;
553
+ gap: 12px;
554
+ padding: 1px 8px;
555
+ border-top: var(--clio-border);
556
+ background: var(--clio-details-bg);
557
+ font-family: var(--clio-font-text);
558
+ font-size: var(--clio-font-size-small);
559
+ line-height: 14px;
560
+ }
561
+
562
+ /* Menu bar and menus.
563
+ Markup: <ul role="menubar" class="menu-bar"> <li role="none"><button
564
+ role="menuitem" aria-haspopup="true" aria-expanded="false">File</button>
565
+ <ul role="menu" class="menu">…</ul></li></ul>. A menu opens while its title
566
+ has aria-expanded="true" or the class .open (your script toggles either), or
567
+ while focus is inside it, so it works with the keyboard and no script.
568
+ system.css's role="menu-bar" / role="menu-item" markup is accepted too. */
569
+ :where(.menu-bar, ul[role="menubar"], ul[role="menu-bar"]) {
570
+ display: flex;
571
+ align-items: stretch;
572
+ box-sizing: border-box;
573
+ height: var(--clio-menubar-height);
574
+ margin: 0;
575
+ padding: var(--clio-menubar-padding);
576
+ list-style: none;
577
+ border-bottom: var(--clio-menubar-border);
578
+ background: var(--clio-menubar-bg);
579
+ box-shadow: var(--clio-menubar-shadow);
580
+ user-select: none;
581
+ -webkit-user-select: none;
582
+ }
583
+
584
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li {
585
+ position: relative;
586
+ display: flex;
587
+ align-items: stretch;
588
+ }
589
+
590
+ /* Menu titles: a <button>, an <a>, or the <li> itself (system.css). */
591
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a, span),
592
+ :where([role="menu-bar"]) > [role="menu-item"] {
593
+ display: flex;
594
+ align-items: center;
595
+ min-width: 0;
596
+ margin: 0;
597
+ padding: var(--clio-menu-title-padding);
598
+ border: 0;
599
+ border-radius: 0;
600
+ background: transparent;
601
+ box-shadow: none;
602
+ color: inherit;
603
+ font: inherit;
604
+ line-height: 16px;
605
+ text-decoration: none;
606
+ white-space: nowrap;
607
+ appearance: none;
608
+ -webkit-appearance: none;
609
+ cursor: default;
610
+ }
611
+
612
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a, span):is([aria-expanded="true"], .active),
613
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li.open > :is(button, a, span),
614
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a):active,
615
+ :where([role="menu-bar"]) > [role="menu-item"]:is(:focus, :focus-within) {
616
+ background: var(--clio-menu-title-active-bg);
617
+ box-shadow: var(--clio-menu-title-active-shadow);
618
+ color: var(--clio-menu-title-active-fg);
619
+ outline: none;
620
+ }
621
+
622
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"]) > li > :is(button, a):focus-visible {
623
+ outline: var(--clio-focus-outline);
624
+ outline-offset: -3px;
625
+ }
626
+
627
+ /* ---- Menu panel ----------------------------------------------------------
628
+ System 6: paper, a 1px ink frame and a 1px ink drop shadow. */
629
+ :where(.menu, ul[role="menu"]) {
630
+ z-index: 10;
631
+ display: block;
632
+ box-sizing: border-box;
633
+ min-width: 140px;
634
+ width: max-content;
635
+ margin: 0;
636
+ padding: 0;
637
+ list-style: none;
638
+ border: var(--clio-menu-border);
639
+ border-top-width: var(--clio-menu-border-top-width);
640
+ background: var(--clio-menu-bg);
641
+ box-shadow: var(--clio-menu-shadow);
642
+ font-family: var(--clio-font-chrome);
643
+ font-size: var(--clio-font-size);
644
+ }
645
+
646
+ /* Inside a menu bar or a parent item, a menu is a drop-down. */
647
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"]) li > :is(.menu, ul[role="menu"]) {
648
+ position: absolute;
649
+ top: 100%;
650
+ left: 0;
651
+ display: none;
652
+ }
653
+
654
+ :where(.menu, [role="menu"]) li > :is(.menu, ul[role="menu"]) {
655
+ top: -1px;
656
+ left: 100%;
657
+ }
658
+
659
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"]) li:is(.open, :focus-within) > :is(.menu, ul[role="menu"]),
660
+ :where(.menu-bar, [role="menubar"], [role="menu-bar"], .menu, [role="menu"]) li > [aria-expanded="true"] + :is(.menu, ul[role="menu"]) {
661
+ display: block;
662
+ }
663
+
664
+ /* ---- Menu items ---------------------------------------------------------- */
665
+ :where(.menu, [role="menu"]) > li {
666
+ position: relative;
667
+ display: flex;
668
+ align-items: center;
669
+ min-height: var(--clio-menu-item-height);
670
+ padding: var(--clio-menu-item-padding);
671
+ font-weight: var(--clio-menu-item-weight);
672
+ line-height: var(--clio-menu-item-height);
673
+ white-space: nowrap;
674
+ cursor: default;
675
+ }
676
+
677
+ :where(.menu, [role="menu"]) > li:has(> :is(a, button)) {
678
+ padding: 0;
679
+ }
680
+
681
+ :where(.menu, [role="menu"]) > li > :is(a, button) {
682
+ display: flex;
683
+ flex: 1;
684
+ align-items: center;
685
+ justify-content: flex-start;
686
+ min-width: 0;
687
+ min-height: var(--clio-menu-item-height);
688
+ margin: 0;
689
+ padding: var(--clio-menu-item-padding);
690
+ border: 0;
691
+ border-radius: 0;
692
+ background: transparent;
693
+ box-shadow: none;
694
+ color: inherit;
695
+ font: inherit;
696
+ text-align: left;
697
+ text-decoration: none;
698
+ appearance: none;
699
+ -webkit-appearance: none;
700
+ cursor: default;
701
+ }
702
+
703
+ :where(.menu, [role="menu"]) > li:not(.disabled, [aria-disabled="true"], .separator, [role="separator"]):is(:hover, :focus-within, .active),
704
+ :where(.menu, [role="menu"]) > li > :is(a, button):not([aria-disabled="true"], :disabled):is(:hover, :focus-visible, .active) {
705
+ background: var(--clio-menu-item-active-bg);
706
+ box-shadow: var(--clio-menu-item-active-shadow);
707
+ color: var(--clio-menu-item-active-fg);
708
+ outline: none;
709
+ }
710
+
711
+ :where(.menu, [role="menu"]) > li:is(.disabled, [aria-disabled="true"]),
712
+ :where(.menu, [role="menu"]) > li > :is(a, button):is(:disabled, [aria-disabled="true"]) {
713
+ color: var(--clio-disabled);
714
+ }
715
+
716
+ /* Keyboard shortcut column, right-aligned. */
717
+ :where(.menu, [role="menu"]) :is(kbd, .shortcut) {
718
+ margin-left: auto;
719
+ padding-left: 24px;
720
+ font: inherit;
721
+ }
722
+
723
+ /* Check mark column. */
724
+ :where(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"])::before,
725
+ :where(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked)::before {
726
+ content: "";
727
+ position: absolute;
728
+ top: 50%;
729
+ left: 3px;
730
+ width: 10px;
731
+ height: 10px;
732
+ margin-top: -5px;
733
+ background: var(--clio-art-s6-menucheck) 0 0 / 10px 10px no-repeat;
734
+ }
735
+
736
+ :where(.menu, [role="menu"]) > li:is(.checked, [aria-checked="true"]):is(:hover, :focus-within, .active)::before,
737
+ :where(.menu, [role="menu"]) > li > :is([aria-checked="true"], .checked):is(:hover, :focus-visible, .active)::before {
738
+ background-image: var(--clio-art-s6-menucheck-on);
739
+ }
740
+
741
+ /* Submenu arrow. */
742
+ :where(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"]))::after,
743
+ :where(.menu, [role="menu"]) > li > [aria-haspopup="true"]::after {
744
+ content: "";
745
+ position: absolute;
746
+ top: 50%;
747
+ right: 4px;
748
+ width: 6px;
749
+ height: 11px;
750
+ margin-top: -5.5px;
751
+ background: var(--clio-art-s6-submenu) 0 0 / 6px 11px no-repeat;
752
+ }
753
+
754
+ :where(.menu, [role="menu"]) > li:has(> :is(.menu, ul[role="menu"])):is(:hover, :focus-within, .active)::after {
755
+ background-image: var(--clio-art-s6-submenu-on);
756
+ }
757
+
758
+ /* Separator: System 6 draws a dotted grey rule through a full-height row. */
759
+ :where(.menu, [role="menu"]) > :is(li.separator, li[role="separator"], hr) {
760
+ display: block;
761
+ height: var(--clio-menu-separator-height);
762
+ min-height: 0;
763
+ margin: 0;
764
+ padding: 0;
765
+ border: 0;
766
+ background: var(--clio-menu-separator);
767
+ }
768
+
769
+ /* system.css divider items keep their label row and add the rule below. */
770
+ :where(.menu, [role="menu"]) > li.divider {
771
+ border-bottom: 1px dotted var(--clio-ink);
772
+ }
773
+
774
+ /* Controls. Bare elements are styled through :where(), so the rules carry no
775
+ specificity. State model (from AI System 6's fidelity contract): hover never
776
+ changes a push button; pressed comes only from pointer-down, Space or
777
+ Enter (:active) or from the .active class; disabled keeps full geometry. */
778
+
779
+ /* ---- Push buttons -------------------------------------------------------- */
780
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]) {
781
+ display: inline-flex;
782
+ align-items: center;
783
+ justify-content: center;
784
+ box-sizing: border-box;
785
+ min-width: var(--clio-button-min-width);
786
+ min-height: var(--clio-control-height);
787
+ margin: 0;
788
+ padding: var(--clio-button-padding);
789
+ border: var(--clio-button-border);
790
+ border-radius: var(--clio-button-radius);
791
+ background: var(--clio-button-bg);
792
+ box-shadow: var(--clio-button-shadow);
793
+ color: var(--clio-button-fg);
794
+ font-family: var(--clio-font-chrome);
795
+ font-size: var(--clio-font-size);
796
+ font-stretch: var(--clio-font-stretch-text);
797
+ font-weight: var(--clio-button-weight);
798
+ line-height: 14px;
799
+ text-align: center;
800
+ text-decoration: none;
801
+ white-space: nowrap;
802
+ appearance: none;
803
+ -webkit-appearance: none;
804
+ cursor: default;
805
+ touch-action: manipulation;
806
+ -webkit-tap-highlight-color: transparent;
807
+ }
808
+
809
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]):not(:disabled, .disabled):is(:active, .active) {
810
+ background: var(--clio-button-active-bg);
811
+ box-shadow: var(--clio-button-active-shadow);
812
+ color: var(--clio-button-active-fg);
813
+ }
814
+
815
+ /* Default button: the ring that says Return will press it. */
816
+ :where(.default, .btn-default, button[type="submit"].default) {
817
+ border-radius: var(--clio-button-radius);
818
+ box-shadow: var(--clio-button-shadow), var(--clio-button-default-ring);
819
+ }
820
+
821
+ :where(.default, .btn-default):not(:disabled, .disabled):is(:active, .active) {
822
+ box-shadow: var(--clio-button-active-shadow), var(--clio-button-default-ring);
823
+ }
824
+
825
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]):is(:disabled, .disabled) {
826
+ border: var(--clio-button-disabled-border);
827
+ color: var(--clio-button-disabled-fg);
828
+ }
829
+
830
+ :where(button, .btn, .btn-default, .standard-button, input[type="button"], input[type="submit"], input[type="reset"]):focus-visible {
831
+ outline: var(--clio-focus-outline);
832
+ outline-offset: var(--clio-focus-offset);
833
+ }
834
+
835
+ :where(.default, .btn-default):focus-visible {
836
+ outline-offset: calc(var(--clio-focus-offset) + 4px);
837
+ }
838
+
839
+ /* ---- Check boxes ---------------------------------------------------------- */
840
+ :where(input[type="checkbox"]) {
841
+ position: relative;
842
+ flex: none;
843
+ box-sizing: border-box;
844
+ width: var(--clio-check-size);
845
+ height: var(--clio-check-size);
846
+ margin: 0;
847
+ border: var(--clio-check-border);
848
+ border-radius: 0;
849
+ background: var(--clio-check-bg);
850
+ box-shadow: var(--clio-check-shadow);
851
+ vertical-align: -2px;
852
+ appearance: none;
853
+ -webkit-appearance: none;
854
+ cursor: default;
855
+ }
856
+
857
+ :where(input[type="checkbox"]):checked {
858
+ background: var(--clio-check-mark), var(--clio-check-bg);
859
+ background-origin: var(--clio-check-mark-origin);
860
+ }
861
+
862
+ :where(input[type="checkbox"]):not(:disabled):active {
863
+ border-width: var(--clio-check-pressed-border-width);
864
+ }
865
+
866
+ :where(input[type="checkbox"]):disabled {
867
+ border-color: var(--clio-disabled);
868
+ opacity: 0.6;
869
+ }
870
+
871
+ /* ---- Radio buttons -------------------------------------------------------- */
872
+ :where(input[type="radio"]) {
873
+ flex: none;
874
+ box-sizing: border-box;
875
+ width: var(--clio-radio-size);
876
+ height: var(--clio-radio-size);
877
+ margin: 0;
878
+ border: 0;
879
+ border-radius: 0;
880
+ background: var(--clio-radio-off);
881
+ vertical-align: -2px;
882
+ appearance: none;
883
+ -webkit-appearance: none;
884
+ cursor: default;
885
+ }
886
+
887
+ :where(input[type="radio"]):checked {
888
+ background: var(--clio-radio-on);
889
+ }
890
+
891
+ :where(input[type="radio"]):not(:disabled):active {
892
+ background: var(--clio-radio-pressed);
893
+ }
894
+
895
+ :where(input[type="radio"]):checked:not(:disabled):active {
896
+ background: var(--clio-radio-pressed-on);
897
+ }
898
+
899
+ :where(input[type="radio"]):disabled {
900
+ opacity: 0.45;
901
+ }
902
+
903
+ :where(input[type="checkbox"], input[type="radio"]):focus-visible {
904
+ outline: var(--clio-focus-outline);
905
+ outline-offset: var(--clio-focus-offset);
906
+ }
907
+
908
+ :where(input[type="checkbox"], input[type="radio"]) + label,
909
+ :where(label):has(> :is(input[type="checkbox"], input[type="radio"])) {
910
+ font-family: var(--clio-font-chrome);
911
+ font-size: var(--clio-font-size);
912
+ }
913
+
914
+ :where(label):has(> :is(input[type="checkbox"], input[type="radio"])) {
915
+ display: inline-flex;
916
+ align-items: center;
917
+ gap: 6px;
918
+ }
919
+
920
+ :where(input[type="checkbox"], input[type="radio"]):disabled + label,
921
+ :where(label):has(> :is(input[type="checkbox"], input[type="radio"]):disabled) {
922
+ color: var(--clio-disabled);
923
+ }
924
+
925
+ /* ---- Text fields ---------------------------------------------------------- */
926
+ :where(input:not([type]), input[type="text"], input[type="search"], input[type="email"], input[type="password"],
927
+ input[type="number"], input[type="url"], input[type="tel"], input[type="date"], input[type="time"],
928
+ input[type="datetime-local"], input[type="month"], input[type="week"], textarea) {
929
+ box-sizing: border-box;
930
+ min-height: var(--clio-field-height);
931
+ margin: 0;
932
+ padding: var(--clio-field-padding);
933
+ border: var(--clio-field-border);
934
+ border-radius: 0;
935
+ background: var(--clio-field-bg);
936
+ box-shadow: var(--clio-field-shadow);
937
+ color: var(--clio-ink);
938
+ font-family: var(--clio-font-text);
939
+ font-size: var(--clio-font-size);
940
+ font-stretch: var(--clio-font-stretch-text);
941
+ line-height: 14px;
942
+ appearance: none;
943
+ -webkit-appearance: none;
944
+ }
945
+
946
+ :where(textarea) {
947
+ display: block;
948
+ line-height: 16px;
949
+ resize: vertical;
950
+ }
951
+
952
+ :where(input, textarea):focus-visible {
953
+ outline: var(--clio-focus-outline);
954
+ outline-offset: var(--clio-focus-offset);
955
+ box-shadow: var(--clio-field-focus-shadow);
956
+ }
957
+
958
+ :where(input, textarea):disabled {
959
+ color: var(--clio-disabled);
960
+ }
961
+
962
+ :where(input, textarea)::placeholder {
963
+ color: var(--clio-disabled);
964
+ opacity: 1;
965
+ }
966
+
967
+ :where(label) {
968
+ font-family: var(--clio-font-chrome);
969
+ font-size: var(--clio-font-size);
970
+ }
971
+
972
+ /* ---- Pop-up menus (select) ------------------------------------------------ */
973
+ :where(select) {
974
+ box-sizing: border-box;
975
+ min-height: var(--clio-control-height);
976
+ margin: 0;
977
+ padding: var(--clio-popup-padding);
978
+ border: var(--clio-popup-border);
979
+ border-radius: var(--clio-popup-radius);
980
+ background: var(--clio-popup-arrow), var(--clio-popup-bg);
981
+ box-shadow: var(--clio-popup-shadow);
982
+ color: var(--clio-ink);
983
+ font-family: var(--clio-font-chrome);
984
+ font-size: var(--clio-font-size);
985
+ font-stretch: var(--clio-font-stretch-text);
986
+ font-weight: var(--clio-popup-weight);
987
+ line-height: 16px;
988
+ appearance: none;
989
+ -webkit-appearance: none;
990
+ cursor: default;
991
+ }
992
+
993
+ :where(select):focus-visible {
994
+ outline: var(--clio-focus-outline);
995
+ outline-offset: var(--clio-focus-offset);
996
+ }
997
+
998
+ :where(select):disabled {
999
+ color: var(--clio-disabled);
1000
+ }
1001
+
1002
+ /* A list box: <select multiple> or <select size="n">. */
1003
+ :where(select[multiple], select[size]:not([size="1"])) {
1004
+ min-height: 0;
1005
+ padding: 0;
1006
+ border: var(--clio-list-border);
1007
+ border-radius: 0;
1008
+ background: var(--clio-list-bg);
1009
+ box-shadow: var(--clio-list-shadow);
1010
+ font-family: var(--clio-font-text);
1011
+ }
1012
+
1013
+ :where(select[multiple], select[size]:not([size="1"])) option {
1014
+ min-height: var(--clio-list-row);
1015
+ padding: 0 4px;
1016
+ }
1017
+
1018
+ :where(select[multiple], select[size]:not([size="1"])) option:checked {
1019
+ background: var(--clio-selection-bg) linear-gradient(var(--clio-selection-bg), var(--clio-selection-bg));
1020
+ color: var(--clio-selection-fg);
1021
+ }
1022
+
1023
+ /* ---- List boxes ------------------------------------------------------------ */
1024
+ :where(.listbox, ul[role="listbox"], ol[role="listbox"], div[role="listbox"]) {
1025
+ box-sizing: border-box;
1026
+ margin: 0;
1027
+ padding: 0;
1028
+ overflow: auto;
1029
+ list-style: none;
1030
+ border: var(--clio-list-border);
1031
+ background: var(--clio-list-bg);
1032
+ box-shadow: var(--clio-list-shadow);
1033
+ font-family: var(--clio-font-text);
1034
+ font-size: var(--clio-font-size);
1035
+ }
1036
+
1037
+ :where(.listbox, [role="listbox"]) > :is(li, [role="option"]) {
1038
+ min-height: var(--clio-list-row);
1039
+ padding: 0 4px;
1040
+ line-height: var(--clio-list-row);
1041
+ white-space: nowrap;
1042
+ cursor: default;
1043
+ }
1044
+
1045
+ :where(.listbox, [role="listbox"]) > :is(li, [role="option"]):is([aria-selected="true"], .selected) {
1046
+ background: var(--clio-selection-bg);
1047
+ color: var(--clio-selection-fg);
1048
+ }
1049
+
1050
+ :where(.listbox, [role="listbox"]) > :is(li, [role="option"]):focus-visible {
1051
+ outline: var(--clio-focus-outline);
1052
+ outline-offset: -2px;
1053
+ }
1054
+
1055
+ /* ---- Group boxes (fieldset) ---------------------------------------------- */
1056
+ :where(fieldset) {
1057
+ margin: 0;
1058
+ padding: 8px 10px 10px;
1059
+ border: var(--clio-group-border);
1060
+ background: var(--clio-group-bg);
1061
+ box-shadow: var(--clio-group-shadow);
1062
+ }
1063
+
1064
+ :where(fieldset) > :where(legend) {
1065
+ padding: 0 4px;
1066
+ background: var(--clio-pane-bg);
1067
+ font-family: var(--clio-font-chrome);
1068
+ font-size: var(--clio-font-size);
1069
+ font-weight: var(--clio-chrome-weight);
1070
+ }
1071
+
1072
+ /* ---- Progress -------------------------------------------------------------- */
1073
+ :where(progress) {
1074
+ box-sizing: border-box;
1075
+ width: 100%;
1076
+ height: var(--clio-progress-height);
1077
+ margin: 0;
1078
+ border: var(--clio-progress-border);
1079
+ border-radius: 0;
1080
+ background: var(--clio-progress-bg);
1081
+ box-shadow: var(--clio-progress-shadow);
1082
+ color: var(--clio-ink);
1083
+ appearance: none;
1084
+ -webkit-appearance: none;
1085
+ }
1086
+
1087
+ :where(progress)::-webkit-progress-bar {
1088
+ background: var(--clio-progress-bg);
1089
+ }
1090
+
1091
+ :where(progress)::-webkit-progress-value {
1092
+ background: var(--clio-progress-fill);
1093
+ }
1094
+
1095
+ :where(progress)::-moz-progress-bar {
1096
+ background: var(--clio-progress-fill);
1097
+ }
1098
+
1099
+ /* ---- Tabs -------------------------------------------------------------------
1100
+ System 6 had no tab control; the System 6 tab here is an adaptation (a
1101
+ boxed label that joins its panel). Platinum draws the real Mac OS 9 tab. */
1102
+ :where([role="tablist"], .tabs) {
1103
+ display: flex;
1104
+ align-items: flex-end;
1105
+ gap: 0;
1106
+ margin: 0;
1107
+ padding: 0 8px;
1108
+ list-style: none;
1109
+ }
1110
+
1111
+ :where([role="tablist"], .tabs) > :is([role="tab"], li, button) {
1112
+ position: relative;
1113
+ display: inline-flex;
1114
+ align-items: center;
1115
+ box-sizing: border-box;
1116
+ min-width: 0;
1117
+ min-height: var(--clio-tab-height);
1118
+ margin: 0 -1px -1px 0;
1119
+ padding: 0 12px;
1120
+ border: 1px solid var(--clio-ink);
1121
+ border-radius: 0;
1122
+ background: var(--clio-tab-bg);
1123
+ box-shadow: none;
1124
+ color: var(--clio-ink);
1125
+ font-family: var(--clio-font-chrome);
1126
+ font-size: var(--clio-font-size);
1127
+ font-weight: var(--clio-chrome-weight);
1128
+ cursor: default;
1129
+ }
1130
+
1131
+ :where([role="tablist"], .tabs) > :is([role="tab"], li, button):is([aria-selected="true"], .active) {
1132
+ z-index: 1;
1133
+ border-bottom-color: var(--clio-tab-active-bg);
1134
+ background: var(--clio-tab-active-bg);
1135
+ color: var(--clio-ink);
1136
+ }
1137
+
1138
+ :where([role="tabpanel"], .tab-panel) {
1139
+ padding: 10px;
1140
+ border: var(--clio-tab-panel-border);
1141
+ background: var(--clio-tab-panel-bg);
1142
+ }
1143
+
1144
+ /* ---- Desktop icons ---------------------------------------------------------- */
1145
+ :where(.icon) {
1146
+ display: inline-flex;
1147
+ flex-direction: column;
1148
+ align-items: center;
1149
+ justify-content: flex-start;
1150
+ gap: 2px;
1151
+ width: 80px;
1152
+ min-width: 0;
1153
+ min-height: 0;
1154
+ margin: 0;
1155
+ padding: 0;
1156
+ border: 0;
1157
+ border-radius: 0;
1158
+ background: none;
1159
+ box-shadow: none;
1160
+ color: var(--clio-ink);
1161
+ font-family: var(--clio-font-text);
1162
+ font-size: var(--clio-font-size-small);
1163
+ text-align: center;
1164
+ cursor: default;
1165
+ }
1166
+
1167
+ :where(.icon) > :is(img, svg, .icon-image) {
1168
+ width: 32px;
1169
+ height: 32px;
1170
+ image-rendering: pixelated;
1171
+ }
1172
+
1173
+ :where(.icon) > :is(figcaption, span, .icon-label) {
1174
+ max-width: 100%;
1175
+ padding: 0 2px;
1176
+ background: var(--clio-label-bg);
1177
+ color: var(--clio-label-fg);
1178
+ line-height: 13px;
1179
+ }
1180
+
1181
+ :where(.icon):is(.selected, [aria-selected="true"], [aria-pressed="true"]) > :is(img, svg, .icon-image) {
1182
+ filter: var(--clio-icon-selected-filter, invert(1));
1183
+ }
1184
+
1185
+ :where(.icon):is(.selected, [aria-selected="true"], [aria-pressed="true"]) > :is(figcaption, span, .icon-label) {
1186
+ background: var(--clio-label-selected-bg);
1187
+ color: var(--clio-label-selected-fg);
1188
+ }
1189
+
1190
+ /* Dialogs and alerts.
1191
+ .modal-dialog / .alert-box: the double-framed modal box (dBoxProc).
1192
+ .standard-dialog: the plain box with a drop shadow (altDBoxProc).
1193
+ .modeless-dialog: a movable dialog, which is a .window.
1194
+ Use them on <dialog> or on a <div role="dialog">. system.css's
1195
+ .outer-border / .inner-border wrappers are accepted and draw nothing extra. */
1196
+ :where(.modal-dialog, .alert-box, dialog.modal) {
1197
+ box-sizing: border-box;
1198
+ max-width: 100%;
1199
+ margin: 0;
1200
+ padding: var(--clio-modal-padding);
1201
+ border: var(--clio-modal-border);
1202
+ background: var(--clio-dialog-bg);
1203
+ box-shadow: var(--clio-modal-frame);
1204
+ color: var(--clio-ink);
1205
+ }
1206
+
1207
+ :where(.standard-dialog) {
1208
+ box-sizing: border-box;
1209
+ max-width: 100%;
1210
+ margin: 0;
1211
+ padding: 12px 14px;
1212
+ border: var(--clio-plain-dialog-border);
1213
+ background: var(--clio-dialog-bg);
1214
+ box-shadow: var(--clio-plain-dialog-shadow);
1215
+ color: var(--clio-ink);
1216
+ }
1217
+
1218
+ :where(dialog):is(.modal-dialog, .alert-box, .standard-dialog, .modal)::backdrop {
1219
+ background: transparent;
1220
+ }
1221
+
1222
+ :where(.modal-dialog, .alert-box, .standard-dialog) :where(.outer-border, .inner-border) {
1223
+ padding: 0;
1224
+ border: 0;
1225
+ }
1226
+
1227
+ /* Alert layout: icon on the left, message, buttons bottom-right. */
1228
+ :where(.alert-box) {
1229
+ display: grid;
1230
+ grid-template-columns: auto 1fr;
1231
+ column-gap: 16px;
1232
+ row-gap: 12px;
1233
+ align-items: start;
1234
+ }
1235
+
1236
+ :where(.alert-box) > :where(.alert-icon) {
1237
+ grid-row: 1;
1238
+ width: 32px;
1239
+ height: 32px;
1240
+ }
1241
+
1242
+ :where(.alert-box) > :where(.alert-contents, .modal-contents, p) {
1243
+ grid-column: 2;
1244
+ margin: 0;
1245
+ }
1246
+
1247
+ :where(.alert-box) > :where(.alert-buttons, .dialog-buttons) {
1248
+ grid-column: 1 / -1;
1249
+ }
1250
+
1251
+ :where(.dialog-buttons, .alert-buttons) {
1252
+ display: flex;
1253
+ flex-wrap: wrap;
1254
+ justify-content: flex-end;
1255
+ gap: 12px;
1256
+ margin-top: 12px;
1257
+ }
1258
+
1259
+ /* An alert icon drawn here, not Apple's: a rounded speech box with "!". */
1260
+ :where(.alert-icon.caution, .alert-icon.note, .alert-icon.stop) {
1261
+ display: block;
1262
+ box-sizing: border-box;
1263
+ border: 2px solid var(--clio-ink);
1264
+ border-radius: 6px;
1265
+ background: var(--clio-paper);
1266
+ color: var(--clio-ink);
1267
+ font: 700 22px/28px var(--clio-font-chrome);
1268
+ text-align: center;
1269
+ }
1270
+
1271
+ :where(.alert-icon.caution)::before { content: "!"; }
1272
+ :where(.alert-icon.note)::before { content: "i"; }
1273
+ :where(.alert-icon.stop) { border-radius: 50%; }
1274
+ :where(.alert-icon.stop)::before { content: "\00D7"; }
1275
+
1276
+ /* Scroll bars, for scroll areas clio.css owns (.window-pane, .listbox,
1277
+ textarea, list-box selects) and for anything you mark with .clio-scroll.
1278
+ Add class="clio-scrollbars" to <html> to give every scroll area the era's
1279
+ scroll bar.
1280
+
1281
+ WebKit/Blink draw the full bar: two arrow boxes, the patterned lane and the
1282
+ scroll box. The scroll box is proportional to the content here (a browser
1283
+ limit), where System 6 drew a fixed 16px square. Firefox has no scroll bar
1284
+ parts, so it gets the era's colours through scrollbar-color. */
1285
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar,
1286
+ :where(html.clio-scrollbars)::-webkit-scrollbar {
1287
+ width: var(--clio-scrollbar-size);
1288
+ height: var(--clio-scrollbar-size);
1289
+ background: var(--clio-paper);
1290
+ }
1291
+
1292
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track,
1293
+ :where(html.clio-scrollbars)::-webkit-scrollbar-track {
1294
+ background: var(--clio-scrollbar-track);
1295
+ box-shadow: var(--clio-scrollbar-track-shadow);
1296
+ }
1297
+
1298
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track:vertical,
1299
+ :where(html.clio-scrollbars)::-webkit-scrollbar-track:vertical {
1300
+ border-left: 1px solid var(--clio-ink);
1301
+ }
1302
+
1303
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-track:horizontal,
1304
+ :where(html.clio-scrollbars)::-webkit-scrollbar-track:horizontal {
1305
+ border-top: 1px solid var(--clio-ink);
1306
+ }
1307
+
1308
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb,
1309
+ :where(html.clio-scrollbars)::-webkit-scrollbar-thumb {
1310
+ min-width: var(--clio-scrollbar-size);
1311
+ min-height: var(--clio-scrollbar-size);
1312
+ border: var(--clio-scrollbar-thumb-border);
1313
+ background: var(--clio-scrollbar-thumb-bg);
1314
+ box-shadow: var(--clio-scrollbar-thumb-shadow);
1315
+ }
1316
+
1317
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-thumb:horizontal,
1318
+ :where(html.clio-scrollbars)::-webkit-scrollbar-thumb:horizontal {
1319
+ background: var(--clio-scrollbar-thumb-bg-horizontal, var(--clio-scrollbar-thumb-bg));
1320
+ box-shadow: var(--clio-scrollbar-thumb-shadow-horizontal, var(--clio-scrollbar-thumb-shadow));
1321
+ }
1322
+
1323
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:start:decrement,
1324
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:end:increment,
1325
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:start:decrement,
1326
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:end:increment {
1327
+ display: block;
1328
+ width: var(--clio-scrollbar-size);
1329
+ height: var(--clio-scrollbar-size);
1330
+ background-color: var(--clio-scrollbar-button-bg);
1331
+ background-position: center;
1332
+ background-repeat: no-repeat;
1333
+ box-shadow: var(--clio-scrollbar-button-shadow);
1334
+ }
1335
+
1336
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:decrement,
1337
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:decrement {
1338
+ border-left: 1px solid var(--clio-ink);
1339
+ border-bottom: 1px solid var(--clio-ink);
1340
+ background-image: var(--clio-scrollbar-up);
1341
+ }
1342
+
1343
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:increment,
1344
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:increment {
1345
+ border-left: 1px solid var(--clio-ink);
1346
+ border-top: 1px solid var(--clio-ink);
1347
+ background-image: var(--clio-scrollbar-down);
1348
+ }
1349
+
1350
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:decrement,
1351
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:decrement {
1352
+ border-top: 1px solid var(--clio-ink);
1353
+ border-right: 1px solid var(--clio-ink);
1354
+ background-image: var(--clio-scrollbar-left);
1355
+ }
1356
+
1357
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:increment,
1358
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:increment {
1359
+ border-top: 1px solid var(--clio-ink);
1360
+ border-left: 1px solid var(--clio-ink);
1361
+ background-image: var(--clio-scrollbar-right);
1362
+ }
1363
+
1364
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:decrement:active,
1365
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:decrement:active {
1366
+ background-image: var(--clio-scrollbar-up-on);
1367
+ }
1368
+
1369
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:vertical:increment:active,
1370
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:vertical:increment:active {
1371
+ background-image: var(--clio-scrollbar-down-on);
1372
+ }
1373
+
1374
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:decrement:active,
1375
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:decrement:active {
1376
+ background-image: var(--clio-scrollbar-left-on);
1377
+ }
1378
+
1379
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:horizontal:increment:active,
1380
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:horizontal:increment:active {
1381
+ background-image: var(--clio-scrollbar-right-on);
1382
+ }
1383
+
1384
+ /* Only the single arrow box at each end, as on the Mac. */
1385
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:start:increment,
1386
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-button:end:decrement,
1387
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:start:increment,
1388
+ :where(html.clio-scrollbars)::-webkit-scrollbar-button:end:decrement {
1389
+ display: none;
1390
+ }
1391
+
1392
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, .clio-scrollbars *)::-webkit-scrollbar-corner,
1393
+ :where(html.clio-scrollbars)::-webkit-scrollbar-corner {
1394
+ border-top: 1px solid var(--clio-ink);
1395
+ border-left: 1px solid var(--clio-ink);
1396
+ background: var(--clio-scrollbar-button-bg);
1397
+ }
1398
+
1399
+ @supports not selector(::-webkit-scrollbar) {
1400
+ :where(.window-pane, .listbox, [role="listbox"], textarea, select[multiple], .clio-scroll, html.clio-scrollbars, .clio-scrollbars *) {
1401
+ scrollbar-color: var(--clio-scrollbar-thumb-color, var(--clio-ink)) var(--clio-scrollbar-track-color, #c0c0c0);
1402
+ }
1403
+ }
1404
+
1405
+ /* Adaptations the historical machines never needed. Historical sizes are
1406
+ calibration, not a cage: on a touch screen the controls grow to the
1407
+ "coarse pointer" sizes from AI System 6's fidelity contract, without any
1408
+ transform: scale() of the interface. */
1409
+ @media (pointer: coarse) {
1410
+ :root,
1411
+ [data-era] {
1412
+ --clio-control-height: 36px;
1413
+ --clio-field-height: 40px;
1414
+ --clio-menubar-height: 32px;
1415
+ --clio-menu-item-height: 32px;
1416
+ --clio-list-row: 32px;
1417
+ --clio-tab-height: 32px;
1418
+ }
1419
+
1420
+ /* The title-bar boxes keep their 11px art; their hit area grows to 44px. */
1421
+ .title-bar > :is(button, .close, .close-box, .resize, .resize-box, .zoom, .shade, .shade-box, .collapse)::after {
1422
+ content: "";
1423
+ position: absolute;
1424
+ inset: -17px;
1425
+ }
1426
+ }
1427
+
1428
+ /* Windows High Contrast and other forced-colour modes: give the choice
1429
+ controls back to the system so their state stays visible. */
1430
+ @media (forced-colors: active) {
1431
+ :where(input[type="checkbox"], input[type="radio"]) {
1432
+ appearance: auto;
1433
+ -webkit-appearance: auto;
1434
+ }
1435
+
1436
+ .title-bar,
1437
+ .inactive-title-bar {
1438
+ forced-color-adjust: none;
1439
+ }
1440
+ }
1441
+
1442
+ @media print {
1443
+ :where(.window, .modal-dialog, .alert-box, .standard-dialog) {
1444
+ box-shadow: none;
1445
+ }
1446
+ }