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 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
- # Temporary Holding Version
1
+ # clio.css
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
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
+ ![A System 6 window and a Mac OS 9 Platinum window drawn with clio.css](assets/og.png)
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.