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.
- package/AGENTS.md +35 -0
- package/EVIDENCE.md +86 -0
- package/LICENSE +21 -0
- package/README.md +150 -2
- package/THIRD-PARTY.md +73 -0
- package/dist/clio.css +1951 -0
- package/dist/clio.min.css +2 -0
- package/dist/clio.platinum.css +1951 -0
- package/dist/clio.platinum.min.css +2 -0
- package/dist/clio.system6.css +1446 -0
- package/dist/clio.system6.min.css +2 -0
- package/dist/components.json +934 -0
- package/dist/fonts/Asap-Variable.woff2 +0 -0
- package/dist/fonts/ChicagoFLF.woff +0 -0
- package/dist/fonts/ChicagoFLF.woff2 +0 -0
- package/dist/fonts/OFL-Asap.txt +93 -0
- package/llms.txt +38 -0
- package/package.json +66 -4
package/AGENTS.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# AGENTS.md — clio.css
|
|
2
|
+
|
|
3
|
+
For AI coding agents using or changing this repository.
|
|
4
|
+
|
|
5
|
+
## Using clio.css in a project
|
|
6
|
+
|
|
7
|
+
- Link `dist/clio.css` (System 6 default) and set `data-era="platinum"` on `<html>` or
|
|
8
|
+
any element for Mac OS 9 Platinum. Copy markup from `dist/components.json`
|
|
9
|
+
(`components[].html`); it is the same markup the docs render.
|
|
10
|
+
- Style overrides go through `--clio-*` custom properties, not by restating rules.
|
|
11
|
+
Library rules have zero or one-class specificity, so a plain class in your CSS wins.
|
|
12
|
+
- Do not add hover effects to push buttons: the era had none, and the library's state
|
|
13
|
+
model is pressed-on-pointer-down only.
|
|
14
|
+
|
|
15
|
+
## Changing this repository
|
|
16
|
+
|
|
17
|
+
- Sources: `src/*.css` (concatenated in file-name order) and `components/index.mjs`
|
|
18
|
+
(docs, `components.json`, `llms.txt`, `llms-full.txt` and `EVIDENCE.md` are generated
|
|
19
|
+
from it). Never hand-edit `dist/`, `docs/`, `llms.txt` or `EVIDENCE.md`.
|
|
20
|
+
- After a change: `npm test` (build + static checks) must pass. For Platinum chrome,
|
|
21
|
+
run `npm run fidelity` and do not let a specimen's exact-match share fall.
|
|
22
|
+
- Every new or changed value needs an evidence row in `components/index.mjs` with an
|
|
23
|
+
honest status: `measured` only when read from real pixels of the era (name the
|
|
24
|
+
capture), `inferred` when reasoned, `adapted` for web-only changes, `third-party` for
|
|
25
|
+
licensed art or fonts. An unmeasured value is never labelled measured.
|
|
26
|
+
- No Apple bitmaps, icons, logos or fonts, and no art cut from a screenshot. Draw art as
|
|
27
|
+
CSS or small SVGs (see `tooling/tab-art.py` for a drawn-from-measurement example).
|
|
28
|
+
Third-party art needs a licence entry in `THIRD-PARTY.md`.
|
|
29
|
+
- Tokens live on `:root, [data-era="system6"]` (01-tokens.css) and
|
|
30
|
+
`[data-era="platinum"]` (90-platinum.css). A token that reads another token is
|
|
31
|
+
resolved where it is declared, so an era that changes `--clio-paper` must re-declare
|
|
32
|
+
every token built from it.
|
|
33
|
+
- Motion: none today. If added, animate `transform`/`opacity` only and honour
|
|
34
|
+
`prefers-reduced-motion`.
|
|
35
|
+
- Keep `dist/clio.min.css` under the size budget in `test/check.mjs`.
|
package/EVIDENCE.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Evidence
|
|
2
|
+
|
|
3
|
+
Generated from `components/index.mjs` by `npm run build`; edit there.
|
|
4
|
+
|
|
5
|
+
Every value in clio.css 0.1.0 has a row here. Sources are paths in the AI System 6 development tree at commit `b75cd4ed` (public mirror: https://github.com/surfine/AI-System-6; some evidence folders such as `internal/` are private). The images measurements were taken from are evidence only; clio.css never ships them.
|
|
6
|
+
|
|
7
|
+
| Status | Meaning | Rows |
|
|
8
|
+
| --- | --- | ---: |
|
|
9
|
+
| Measured | read from real pixels of the era | 29 |
|
|
10
|
+
| Inferred | reasoned from documentation or behaviour, not measured | 26 |
|
|
11
|
+
| Adapted | a deliberate departure for the web (touch, focus, contrast) | 7 |
|
|
12
|
+
| Third-party | art or font from a named, licensed project | 7 |
|
|
13
|
+
|
|
14
|
+
Pixel check: `npm run fidelity` renders the Platinum specimens and compares them with AI System 6's GUIdebook Mac OS 9.0 reference crops (it needs a local AI System 6 checkout; see the script).
|
|
15
|
+
|
|
16
|
+
| Component | Era | Value | Status | Source — upstream evidence |
|
|
17
|
+
| --- | --- | --- | --- | --- |
|
|
18
|
+
| Window | System 6 | Title bar: a 17px box below a 1px inset; 2px paper, a 12px row of six 1px ink stripes on a 2px period, 2px paper, a 1px rule | Measured | `apps/desktop/styles/00-foundation.css:906` — System 6.0.8 running in an emulator, read at exact 2x pixels |
|
|
19
|
+
| Window | System 6 | Close and zoom boxes are 11px squares, 7px in from each end, with 3px of paper cut out of the stripes around them | Measured | `apps/desktop/styles/00-foundation.css:906` — same capture |
|
|
20
|
+
| Window | System 6 | Zoom box: an inner square of 7 of the frame's 11 pixels sharing its top-left corner | Measured | `apps/desktop/styles/10-windows.css:1059` — System 6 zoom box, 7:11 |
|
|
21
|
+
| Window | System 6 | An inactive window draws a plain white title strip with its name; no stripes, close box or zoom box | Measured | `apps/desktop/styles/00-foundation.css:951` — observed behaviour of System 6 |
|
|
22
|
+
| Window | System 6 | Pressed close box shows a starburst | Inferred | `apps/desktop/styles/10-windows.css (close-box ::before/::after)` — System 6 close-box tracking; pixels redrawn for clio.css |
|
|
23
|
+
| Window | System 6 | The window frame has a 1px ink drop shadow on the right and bottom | Inferred | `not in AI System 6 (it sets no window shadow)` — Inside Macintosh, Window Manager: documentProc frame; to be measured |
|
|
24
|
+
| Window | System 6 | The details bar closes with two 1px rules | Inferred | `not measured` — System 6 Finder window header |
|
|
25
|
+
| Window | Platinum | Frame: 1px black line, a raised 4px strip (white top/left, #999 bottom/right), the black content line; 2px 5px 5px padding | Measured | `apps/desktop/styles/65-appearance-themes.css:1744 (P14)` — Mac OS 8/9 window captures 16 and 21 |
|
|
26
|
+
| Window | Platinum | Title bar 19px: #ccc, six white/#777 ridge pairs from row 1, #999 shadow row, black rule; #ccc covers behind the boxes | Measured | `apps/desktop/styles/65-appearance-themes.css:104` — GUIdebook Mac OS 9.0 Appearance window (Theme Lab specimen active-titlebar) |
|
|
27
|
+
| Window | Platinum | Title in bold Charcoal; on other systems Asap at width 123 shifted (-1px, -1px), the metrics the title bar was measured with | Measured | `apps/desktop/styles/65-appearance-themes.css:1803` — GUIdebook Mac OS 9.0 Appearance window |
|
|
28
|
+
| Window | Platinum | Boxes: 11px, #222 frame, #999 to white gradient, #888 bevel above-left and white below-right; pressed #444 to #bbb | Measured | `apps/desktop/styles/65-appearance-themes.css:1820` — GUIdebook Mac OS 9.0 captures |
|
|
29
|
+
| Window | Platinum | Zoom mark: a six-pixel lower-left corner; WindowShade mark: two nine-pixel rules at y=4 and y=6 | Measured | `apps/desktop/styles/65-platinum-utility.css:725, :738` — GUIdebook Mac OS 9, 1x pixels |
|
|
30
|
+
| Window | Platinum | Background window: #555 frame and drop, flat controls, #777 title, boxes erased | Measured | `apps/desktop/styles/65-appearance-themes.css:1757 (N1, P26)` — Mac OS 9 native capture 53; GUIdebook active/inactive |
|
|
31
|
+
| Menu bar and menus | System 6 | Menu bar 20px with a 1px ink rule; selected title inverts | Inferred | `docs/design/CLASSIC_PLATINUM_FIDELITY.md:87` — historical reference ~20px; not yet measured from a capture |
|
|
32
|
+
| Menu bar and menus | System 6 | Menu: paper, 1px ink frame, 1px ink drop shadow; 16px rows; the highlighted row inverts | Inferred | `apps/desktop/styles/00-foundation.css:1094` — System 6 menus; Chicago 12 line spacing |
|
|
33
|
+
| Menu bar and menus | System 6 | Separator: a dotted grey rule through a full-height row | Inferred | `not measured` — System 6 menus |
|
|
34
|
+
| Menu bar and menus | Platinum | Menu bar: #ddd, white top line, #999 bottom line, 1px black rule, 20px; open title #333399 with #6666cc/#000088 lines | Measured | `apps/desktop/styles/65-appearance-themes.css:298, :45` — Mac OS 9 native menu bar captures 02/04 |
|
|
35
|
+
| Menu bar and menus | Platinum | Menu: no top rule, white/#999 inner bevel, #222 1px drop; 16px rows at weight 600; highlight #333399 with #6666cc/#000088 side columns | Measured | `apps/desktop/styles/65-appearance-themes.css:912 (P21), :917 (P24)` — GUIdebook Mac OS 9.0 Apple menu (Theme Lab specimen apple-menu) |
|
|
36
|
+
| Menu bar and menus | Platinum | Separator: #888 over white, in an 8px row | Inferred | `apps/desktop/styles/65-appearance-themes.css (separator #888/white)` — the line pair is measured; the 8px row height is not |
|
|
37
|
+
| Menu bar and menus | Platinum | Check mark and submenu arrow art | Third-party | `classic-stylesheets macos9/checkmark.svg, menu-right.svg (MIT)` — nielssp/classic-stylesheets @9ebd2d8 |
|
|
38
|
+
| Push button | System 6 | 1px ink round rectangle, paper face, Chicago 12; pressed inverts to ink with paper text | Inferred | `apps/desktop/styles/10-windows.css:3588` — AI System 6 Theme Lab default-ok specimen (authored, not a capture) |
|
|
39
|
+
| Push button | System 6 | Default button: a 1px gap then a 3px ring | Inferred | `apps/desktop/styles/00-foundation.css:79` — Inside Macintosh, Dialog Manager: PenSize(3,3), InsetRect(-4,-4), FrameRoundRect(16,16) |
|
|
40
|
+
| Push button | Both eras | Hover never changes a push button; pressed only on pointer-down, Space or Enter | Inferred | `docs/design/CLASSIC_PLATINUM_FIDELITY.md:210` — a 1987–1999 Mac had no hover state |
|
|
41
|
+
| Push button | System 6 | Keyboard focus: a 1px dotted frame 2px out | Adapted | `apps/desktop/styles/00-foundation.css:519` — System 6 had no button focus; a dotted frame cannot be read as the default ring |
|
|
42
|
+
| Push button | Platinum | #ddd face, 1px black border, 3px corners, bevel white/#ddd over #777/#aaa | Measured | `apps/desktop/styles/65-appearance-themes.css:236` — GUIdebook Mac OS 9.0 About dialog (Theme Lab specimen default-ok) |
|
|
43
|
+
| Push button | Platinum | Pressed: #666 face, white text, #444/#555 top-left over #888/#777 bottom-right | Measured | `apps/desktop/styles/65-appearance-themes.css:933 (P29)` — Infinite Mac Mac OS 9.0 capture |
|
|
44
|
+
| Push button | Platinum | Default ring: 1px black, a #aaa band with #ddd/#777 edges, 1px gap | Measured | `apps/desktop/styles/65-platinum-utility.css:773` — GUIdebook Mac OS 9.0 (default-ok specimen) |
|
|
45
|
+
| Push button | Platinum | Disabled: #888 border, flat #ddd, #777 text; the default ring goes #888 | Measured | `apps/desktop/styles/65-appearance-themes.css (N5)` — GUIdebook Open dialog Eject button (button-disabled specimen) |
|
|
46
|
+
| Check box | System 6 | A 12px box; checked draws an X from corner to corner | Inferred | `apps/desktop/styles/00-foundation.css:965` — System 6 check box; AI System 6 uses 13px, clio.css 12px to match the radio |
|
|
47
|
+
| Check box | System 6 | X art | Third-party | `apps/desktop/assets/themes/classic/controls/checkmark.svg` — system.css icon/checkmark.svg (MIT, Sakun Acharige) |
|
|
48
|
+
| Check box | Platinum | 12px #ddd well, 1px black frame, white top-left and #888 bottom-right bevel | Measured | `apps/desktop/styles/65-appearance-themes.css:897 (P18)` — GUIdebook Mac OS 9.0 Appearance Options tab (checkbox specimens) |
|
|
49
|
+
| Check box | Platinum | Check mark art | Third-party | `classic-stylesheets macos9/checkmark.svg (MIT)` — nielssp/classic-stylesheets @9ebd2d8 |
|
|
50
|
+
| Radio button | System 6 | 12px ring and 6px dot art | Third-party | `apps/desktop/assets/themes/classic/controls/radio-*.svg` — system.css icon/radio-border.svg, radio-dot.svg (MIT, Sakun Acharige) |
|
|
51
|
+
| Radio button | Platinum | Radio drawn with CSS gradients: black ring, white to #888 well, 6px black dot | Adapted | `apps/desktop/styles/65-appearance-themes.css:291` — AI System 6 later replaced this with art cut from a capture (P19); clio.css ships no cut art |
|
|
52
|
+
| Text field | System 6 | 1px ink frame, white, Geneva 12 | Inferred | `apps/desktop/styles/00-foundation.css:189` — System 6 dialog edit text |
|
|
53
|
+
| Text field | Platinum | White field, 1px black frame, #888 shadow above-left and white etch below-right | Measured | `apps/desktop/styles/65-appearance-themes.css:935 (P30)` — Infinite Mac Mac OS 9.0 capture |
|
|
54
|
+
| Text field | Platinum | Focus: a 2px #6666cc ring | Measured | `apps/desktop/styles/65-platinum-utility.css:38` — Mac OS 9 capture platinum-native/10b-fonts-tab |
|
|
55
|
+
| Pop-up menu | System 6 | A box with a 1px drop shadow | Inferred | `not measured` — System 6 pop-up menu CDEF |
|
|
56
|
+
| Pop-up menu | System 6 | The down triangle | Adapted | `drawn for clio.css` — a System 7 convention, kept so the control reads as a menu |
|
|
57
|
+
| Pop-up menu | Platinum | #ddd, 3px corners, white/#aaa bevel, bold label, a separate bevelled arrow part with the 7x10 arrow | Measured | `apps/desktop/styles/65-appearance-themes.css:1916 (P31)` — GUIdebook Mac OS 9.0 (popup-normal specimen), native 09b |
|
|
58
|
+
| Pop-up menu | Platinum | The arrow part is drawn with background layers, approximating the measured bevel | Inferred | `clio.css` — select has no ::after in CSS |
|
|
59
|
+
| Pop-up menu | Platinum | Arrow art | Third-party | `classic-stylesheets macos9/dropdown.svg (MIT)` — nielssp/classic-stylesheets @9ebd2d8 |
|
|
60
|
+
| List box | System 6 | White list, 1px ink frame, 16px rows, selection inverts | Inferred | `not measured` — System 6 Standard File dialog |
|
|
61
|
+
| List box | Platinum | Selection is lavender #ccccff with black text | Measured | `apps/desktop/styles/65-appearance-themes.css:128` — GUIdebook Mac OS 9.0 Open dialog (open-list-scrollbar specimen) |
|
|
62
|
+
| List box | Platinum | Rows carry no divider | Measured | `apps/desktop/styles/65-appearance-themes.css:860 (P10)` — Mac OS 9 native list capture 21 |
|
|
63
|
+
| Scroll bar | System 6 | A 16px lane | Inferred | `apps/desktop/styles/00-foundation.css:1173` — System 6 document window frame |
|
|
64
|
+
| Scroll bar | System 6 | 50% grey lane pattern | Inferred | `apps/desktop/styles/00-foundation.css:1177` — drawn as a 1px checker here; AI System 6 uses a 2px cell |
|
|
65
|
+
| Scroll bar | System 6 | Hollow arrow art | Inferred | `drawn for clio.css` — System 6 scroll arrows; to be measured |
|
|
66
|
+
| Scroll bar | Both eras | The scroll box grows with the visible fraction instead of a fixed 16px square | Adapted | `clio.css` — browsers size ::-webkit-scrollbar-thumb themselves |
|
|
67
|
+
| Scroll bar | Platinum | Lane #aaa with a double bevel; lavender #9999ff scroll box with #ccf/#66c bevel and grip ridges; #ddd arrow boxes with stepped 2/4/6/8 arrows | Measured | `apps/desktop/styles/65-appearance-themes.css:336 (P16), :351 (P17), :364 (P27)` — Mac OS 9 native capture 16; GUIdebook Open dialog |
|
|
68
|
+
| Dialogs and alerts | System 6 | Modal frame: 1px ink, 1px paper gap, 2px ink | Inferred | `apps/desktop/styles/84-clio-write.css:210` — AI System 6 has two recipes (this one and 00-foundation.css .system-modal); neither is measured |
|
|
69
|
+
| Dialogs and alerts | System 6 | Plain box: 1px ink frame and a 2px drop shadow | Inferred | `not measured` — altDBoxProc |
|
|
70
|
+
| Dialogs and alerts | Both eras | The alert icon is drawn here, not Apple's | Adapted | `clio.css` — no Apple icons are shipped |
|
|
71
|
+
| Dialogs and alerts | Platinum | 1px black frame over #ddd, inner bevel of three white steps inside #555/#999/#aaa, 1px black drop | Measured | `apps/desktop/styles/65-appearance-themes.css:840 (P06)` — GUIdebook Mac OS 9.0 About application (about-alert specimen) |
|
|
72
|
+
| Group box | System 6 | 1px ink frame with the legend on paper | Inferred | `not measured` — System 6 control panels |
|
|
73
|
+
| Group box | Platinum | Etched: #888 line with a white line inside and below | Measured | `apps/desktop/styles/65-appearance-themes.css:909 (P20)` — Mac OS 9 native group box |
|
|
74
|
+
| Progress bar | System 6 | 1px ink frame, ink fill | Inferred | `not measured` — System 6 Finder copy progress |
|
|
75
|
+
| Progress bar | Platinum | Barber-pole fill: ten 1px hard stops from #333399 through #eee to #000055 | Measured | `apps/desktop/styles/65-appearance-themes.css:937 (P32)` — Mac OS 9 native progress bar |
|
|
76
|
+
| Progress bar | Platinum | #bbb track with white/#aaa outer and #888/#ddd inner bevel | Inferred | `apps/desktop/styles/65-appearance-themes.css:592` — AI System 6 token, not tagged as measured |
|
|
77
|
+
| Tabs | System 6 | Boxed labels that join the panel | Adapted | `clio.css` — System 6 had no tab control |
|
|
78
|
+
| Tabs | Platinum | Tab art: sloped caps, #ccc tabs, the front tab #eee and 2px taller | Third-party | `classic-stylesheets macos9/tab*.svg (MIT)` — nielssp/classic-stylesheets @9ebd2d8; AI System 6 measured a 21-row tab (P01, 65-appearance-themes.css:742) |
|
|
79
|
+
| Desktop and icons | System 6 | A 50% grey desktop pattern | Inferred | `apps/desktop/styles/00-foundation.css:224` — System 6.0.8 default desktop; AI System 6 draws an 8px stipple |
|
|
80
|
+
| Desktop and icons | System 6 | White name tag; a selected icon inverts | Inferred | `apps/desktop/styles/00-foundation.css (desktop-label tokens)` — System 6 Finder |
|
|
81
|
+
| Desktop and icons | Platinum | 70% white tag with no edge; selected: black tag, white name, artwork darkened | Measured | `apps/desktop/styles/65-appearance-themes.css:882 (P12, P13)` — Mac OS 9 native capture 02 |
|
|
82
|
+
| Desktop and icons | Platinum | Desktop colour #4a71ab | Inferred | `apps/desktop/styles/65-appearance-themes.css:85` — base colour of AI System 6's azul tile, generated from a 512 Pixels capture; the tile is not shipped |
|
|
83
|
+
| Type and tokens | System 6 | ChicagoFLF, a public-domain revival of Chicago, for chrome | Third-party | `vendor/system.css-reference/fonts/ChicagoFLF.woff2` — Robin Casady's ChicagoFLF (public domain), as shipped by system.css |
|
|
84
|
+
| Type and tokens | Platinum | Charcoal when installed; otherwise Asap (OFL) at width 113 for text and 123 for titles, weights 400/600/700 | Measured | `apps/desktop/assets/fonts/platinum/README.md; 65-appearance-themes.css:25` — Asap matched to a measured Charcoal sample's x-height and advance width |
|
|
85
|
+
| Type and tokens | Platinum | Palette #fff #ddd #ccc #999 #777 #000, accent #333399, lavender #ccccff | Measured | `tooling/classic-platinum-fidelity-contract.json (platinum.palette)` — Mac OS 9 captures |
|
|
86
|
+
| Type and tokens | System 6 | Disabled text #696969 instead of a 50% dither | Adapted | `apps/desktop/styles/00-foundation.css (shade-dark)` — 5.6:1 on white; a dither blurs under browser scaling |
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 clio.css contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,151 @@
|
|
|
1
|
-
#
|
|
1
|
+
# clio.css
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**A CSS library for classic Mac OS interfaces: Macintosh System 6 and Mac OS 8/9 Platinum.**
|
|
4
|
+
Windows, title bars, menu bars, push buttons, check boxes, radio buttons, text fields,
|
|
5
|
+
pop-up menus, list boxes, scroll bars, dialogs, group boxes, progress bars, tabs and
|
|
6
|
+
desktop icons. Pure CSS, no JavaScript. MIT. No Apple bitmaps, icons, logos or fonts.
|
|
7
|
+
|
|
8
|
+
Every value is traced to its source and labelled **measured** (read from real pixels of
|
|
9
|
+
the era), **inferred**, **adapted** (a deliberate web change) or **third-party**. The
|
|
10
|
+
measurements come from [AI System 6](https://github.com/surfine/AI-System-6), which
|
|
11
|
+
recreates these eras against System 6.0.8 in an emulator and Mac OS 9.0 captures.
|
|
12
|
+
|
|
13
|
+

|
|
14
|
+
|
|
15
|
+
Docs and live examples: https://surfine.github.io/clio.css/
|
|
16
|
+
|
|
17
|
+
## Install
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install clio.css
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
```html
|
|
24
|
+
<link rel="stylesheet" href="https://unpkg.com/clio.css@0.1.0/dist/clio.css">
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
| File | What it draws |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| `dist/clio.css` | System 6 by default; `data-era="platinum"` on any element switches that subtree to Platinum |
|
|
30
|
+
| `dist/clio.system6.css` | System 6 only (42 KB minified, 7 KB gzip) |
|
|
31
|
+
| `dist/clio.platinum.css` | Platinum as the page default |
|
|
32
|
+
| `*.min.css` | Minified builds |
|
|
33
|
+
| `dist/components.json` | Machine-readable index: selectors, tokens, markup and evidence per component |
|
|
34
|
+
|
|
35
|
+
The stylesheets load fonts from `dist/fonts/` with relative URLs, so serve the `dist`
|
|
36
|
+
folder as a whole (the CDNs above do).
|
|
37
|
+
|
|
38
|
+
## Quick start
|
|
39
|
+
|
|
40
|
+
```html
|
|
41
|
+
<html data-era="platinum"> <!-- omit for System 6 -->
|
|
42
|
+
<div class="window" style="width: 320px">
|
|
43
|
+
<div class="title-bar">
|
|
44
|
+
<button class="close" aria-label="Close"></button>
|
|
45
|
+
<h1 class="title">Macintosh HD</h1>
|
|
46
|
+
<button class="resize" aria-label="Zoom"></button>
|
|
47
|
+
<button class="shade" aria-label="Collapse"></button> <!-- Platinum only -->
|
|
48
|
+
</div>
|
|
49
|
+
<div class="details-bar"><span>12 items</span><span>167K available</span></div>
|
|
50
|
+
<div class="window-pane">
|
|
51
|
+
<label><input type="checkbox" checked> Show warnings</label>
|
|
52
|
+
<button class="default">OK</button>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Form controls are styled on the native elements (`button`, `input`, `select`,
|
|
58
|
+
`textarea`, `fieldset`, `progress`), so keyboard, form and screen-reader behaviour stay
|
|
59
|
+
the browser's.
|
|
60
|
+
|
|
61
|
+
## Components
|
|
62
|
+
|
|
63
|
+
| Component | Markup |
|
|
64
|
+
| --- | --- |
|
|
65
|
+
| Window | `.window` › `.title-bar` (`.close`, `.title`, `.resize`, `.shade`) › `.details-bar` › `.window-pane`; `.window.inactive` |
|
|
66
|
+
| Menu bar and menus | `ul.menu-bar[role=menubar]` › `li` › `button[aria-expanded]` + `ul.menu[role=menu]`; `li[role=separator]`, `[aria-checked=true]`, `[aria-disabled=true]`, `kbd` |
|
|
67
|
+
| Push button | `button`, `.btn`; `.default` for the default ring; `.active` to pose pressed |
|
|
68
|
+
| Check box, radio button | `input[type=checkbox]`, `input[type=radio]` |
|
|
69
|
+
| Text field | `input[type=text]` and friends, `textarea` |
|
|
70
|
+
| Pop-up menu | `select`; `select[multiple]` becomes a list box |
|
|
71
|
+
| List box | `ul.listbox[role=listbox]` › `li[role=option][aria-selected]` |
|
|
72
|
+
| Scroll bar | automatic on `.window-pane`, `.listbox`, `textarea`; `.clio-scroll` on anything; `<html class="clio-scrollbars">` for the page |
|
|
73
|
+
| Dialogs and alerts | `.modal-dialog`, `.alert-box` (+ `.alert-icon.caution`), `.standard-dialog`, `.dialog-buttons` |
|
|
74
|
+
| Group box | `fieldset` + `legend` |
|
|
75
|
+
| Progress bar | `progress` |
|
|
76
|
+
| Tabs | `[role=tablist]` › `[role=tab][aria-selected]` + `[role=tabpanel]` |
|
|
77
|
+
| Desktop and icons | `.desktop`; `button.icon` › `img`/`svg` + `span` |
|
|
78
|
+
|
|
79
|
+
Coming from [system.css](https://github.com/sakofchit/system.css)? Its markup works
|
|
80
|
+
unchanged: `.title-bar button.close`, `button.resize`, `.inactive-title-bar`,
|
|
81
|
+
`.window-pane`, `.details-bar`, `.separator`, `.btn`, `.btn-default`, `.standard-dialog`,
|
|
82
|
+
`.modal-dialog`, `.alert-box`, `.outer-border`, `.inner-border`, `.field-row` and
|
|
83
|
+
`role="menu-bar"` / `role="menu-item"` menus.
|
|
84
|
+
|
|
85
|
+
## Customising
|
|
86
|
+
|
|
87
|
+
Every value is a `--clio-*` custom property, declared on `:root` and re-declared under
|
|
88
|
+
`[data-era="platinum"]`. Override any of them on any element. Every rule uses `:where()`
|
|
89
|
+
or a single class, so your own CSS always wins without `!important`.
|
|
90
|
+
|
|
91
|
+
```css
|
|
92
|
+
.my-app { --clio-selection-bg: #333399; --clio-button-radius: 4px; }
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## How faithful is it?
|
|
96
|
+
|
|
97
|
+
[EVIDENCE.md](EVIDENCE.md) lists every value with its status and source. Of the 69
|
|
98
|
+
rows, the Platinum chrome is almost all **measured**; much of System 6 beyond the
|
|
99
|
+
title bar is still **inferred** and marked as such.
|
|
100
|
+
|
|
101
|
+
[FIDELITY.md](FIDELITY.md) has a pixel check (`npm run fidelity`) that renders the
|
|
102
|
+
Platinum specimens and compares them with Mac OS 9.0 GUIdebook captures: the active title
|
|
103
|
+
bar matches 94% of pixels exactly, and nearly all the rest is the label, because
|
|
104
|
+
Charcoal is not shipped (Asap stands in).
|
|
105
|
+
|
|
106
|
+
What the era never had is adapted, not imitated: keyboard focus rings, touch-size
|
|
107
|
+
controls on `pointer: coarse` (title-bar boxes get a 45px hit area while their art stays
|
|
108
|
+
11px), solid grey instead of a dithered disabled state, and system controls in
|
|
109
|
+
forced-colours mode. No animation anywhere.
|
|
110
|
+
|
|
111
|
+
## Browser support
|
|
112
|
+
|
|
113
|
+
Current Chrome, Edge, Safari and Firefox. Uses `:where()`, `:has()` and custom
|
|
114
|
+
properties. Scroll-bar parts (arrows, scroll box) draw in Chromium and Safari; Firefox
|
|
115
|
+
gets the era's scroll-bar colours only.
|
|
116
|
+
|
|
117
|
+
## How it compares
|
|
118
|
+
|
|
119
|
+
| Library | Look | Licence |
|
|
120
|
+
| --- | --- | --- |
|
|
121
|
+
| [98.css](https://github.com/jdan/98.css) | Windows 98 | MIT |
|
|
122
|
+
| [7.css](https://github.com/khang-nd/7.css) | Windows 7 | MIT |
|
|
123
|
+
| [XP.css](https://github.com/botoxparty/XP.css) | Windows XP | MIT |
|
|
124
|
+
| [system.css](https://github.com/sakofchit/system.css) | Classic Apple (System 6 style) | MIT |
|
|
125
|
+
| [Puppertino](https://github.com/codedgar/Puppertino) | Modern macOS / iOS | MIT |
|
|
126
|
+
| **clio.css** | System 6 and Mac OS 8/9 Platinum, with per-value evidence | MIT |
|
|
127
|
+
|
|
128
|
+
## For AI agents
|
|
129
|
+
|
|
130
|
+
- [`llms.txt`](llms.txt) — summary and links ([llmstxt.org](https://llmstxt.org) format)
|
|
131
|
+
- [`llms-full.txt`](https://surfine.github.io/clio.css/llms-full.txt) — every component's markup and the full stylesheet
|
|
132
|
+
- [`components.json`](https://surfine.github.io/clio.css/components.json) — selectors, tokens, HTML and evidence per component
|
|
133
|
+
- [`AGENTS.md`](AGENTS.md) — how to use and change this repository
|
|
134
|
+
|
|
135
|
+
## Develop
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
npm run build # dist/, docs/, llms.txt, EVIDENCE.md from src/ and components/index.mjs
|
|
139
|
+
npm test # build + static checks
|
|
140
|
+
npm run fidelity # pixel check against AI System 6's references (needs a local checkout)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Licence
|
|
144
|
+
|
|
145
|
+
MIT, see [LICENSE](LICENSE). Bundled fonts and art keep their own licences, see
|
|
146
|
+
[THIRD-PARTY.md](THIRD-PARTY.md): ChicagoFLF (public domain), Asap (SIL OFL 1.1), and
|
|
147
|
+
SVG art from system.css and classic-stylesheets (both MIT).
|
|
148
|
+
|
|
149
|
+
clio.css is not affiliated with or endorsed by Apple Inc. Macintosh, Mac OS, Chicago,
|
|
150
|
+
Geneva and Charcoal are trademarks of Apple Inc., named only to describe the eras
|
|
151
|
+
recreated.
|
package/THIRD-PARTY.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Third-party material
|
|
2
|
+
|
|
3
|
+
clio.css ships no Apple bitmaps, icons, logos or fonts. Screenshots used to
|
|
4
|
+
measure values stay evidence in AI System 6 and are never distributed. The
|
|
5
|
+
following third-party material is included, each under its own licence.
|
|
6
|
+
|
|
7
|
+
## Fonts
|
|
8
|
+
|
|
9
|
+
| File | Font | Author | Licence |
|
|
10
|
+
| --- | --- | --- | --- |
|
|
11
|
+
| `dist/fonts/ChicagoFLF.woff2`, `.woff` | ChicagoFLF | Robin Casady | Public domain: the author's own statement and Font Library's listing (https://fontlibrary.org/font/chicagoflf); some download sites say "personal use", which is not the author's term. File as distributed by system.css |
|
|
12
|
+
| `dist/fonts/Asap-Variable.woff2` | Asap (variable, wdth + wght) | Omnibus-Type | SIL Open Font License 1.1, full text in `dist/fonts/OFL-Asap.txt`; upstream github.com/Omnibus-Type/Asap at commit 2de32f20, SHA-256 3f230328…498f |
|
|
13
|
+
|
|
14
|
+
Asap is a stand-in for Charcoal and is not presented as an Apple font.
|
|
15
|
+
|
|
16
|
+
## Art from system.css (MIT)
|
|
17
|
+
|
|
18
|
+
The System 6 check-box X, radio ring, pressed radio ring and radio dot are
|
|
19
|
+
re-encoded from `icon/checkmark.svg`, `icon/radio-border.svg`,
|
|
20
|
+
`icon/radio-border-focused.svg` and `icon/radio-dot.svg` of
|
|
21
|
+
https://github.com/sakofchit/system.css at commit c95b9542.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
Copyright (c) 2022 Sakun Acharige
|
|
25
|
+
|
|
26
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
27
|
+
a copy of this software and associated documentation files (the
|
|
28
|
+
"Software"), to deal in the Software without restriction, including
|
|
29
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
30
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
31
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
32
|
+
the following conditions:
|
|
33
|
+
|
|
34
|
+
The above copyright notice and this permission notice shall be
|
|
35
|
+
included in all copies or substantial portions of the Software.
|
|
36
|
+
|
|
37
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
38
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
39
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
40
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
41
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
42
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
43
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
44
|
+
## Art from classic-stylesheets (MIT)
|
|
45
|
+
|
|
46
|
+
The Platinum pop-up arrow (and its disabled colour), check mark, submenu
|
|
47
|
+
arrow and the three tab drawings are re-encoded from `macos9/dropdown.svg`,
|
|
48
|
+
`checkmark.svg`, `menu-right.svg`, `tab.svg`, `tab-active.svg` and
|
|
49
|
+
`tab-selected.svg` of https://github.com/nielssp/classic-stylesheets at commit
|
|
50
|
+
9ebd2d84. AI System 6 also adapted Platinum control relationships from the
|
|
51
|
+
same project.
|
|
52
|
+
|
|
53
|
+
MIT License
|
|
54
|
+
|
|
55
|
+
Copyright (c) 2022 Niels Sonnich Poulsen (http://nielssp.dk)
|
|
56
|
+
|
|
57
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
58
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
59
|
+
in the Software without restriction, including without limitation the rights
|
|
60
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
61
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
62
|
+
furnished to do so, subject to the following conditions:
|
|
63
|
+
|
|
64
|
+
The above copyright notice and this permission notice shall be included in all
|
|
65
|
+
copies or substantial portions of the Software.
|
|
66
|
+
|
|
67
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
68
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
69
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
70
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
71
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
72
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
73
|
+
SOFTWARE.
|