@dstally/tokens 1.0.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/README.md +28 -0
- package/assets/icon-1024.png +0 -0
- package/assets/icon-128.png +0 -0
- package/assets/icon-16.png +0 -0
- package/assets/icon-256.png +0 -0
- package/assets/icon-32.png +0 -0
- package/assets/icon-512.png +0 -0
- package/assets/icon-64.png +0 -0
- package/assets/icon-README.md +32 -0
- package/assets/logo-small.svg +15 -0
- package/assets/logo.svg +16 -0
- package/package.json +26 -0
- package/styles.css +7 -0
- package/tokens/base.css +20 -0
- package/tokens/colors.css +150 -0
- package/tokens/elevation.css +27 -0
- package/tokens/fonts.css +12 -0
- package/tokens/motion.css +25 -0
- package/tokens/spacing.css +30 -0
- package/tokens/typography.css +25 -0
package/README.md
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# @dstally/tokens
|
|
2
|
+
|
|
3
|
+
```ts
|
|
4
|
+
import '@dstally/tokens/styles.css'
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
That one import gives you every `--*` variable, the element baseline (`body`, headings, links, focus rings), the `.tally-num` / `.tally-overline` / `.tally-container` helpers, and the webfonts.
|
|
8
|
+
|
|
9
|
+
Dark is `:root`. Light is `[data-theme="light"]` on any ancestor.
|
|
10
|
+
|
|
11
|
+
## Files
|
|
12
|
+
|
|
13
|
+
- `tokens/colors.css` — indigo / amber / blue / neutral ramps, Okabe-Ito chart palette, semantic aliases for both themes.
|
|
14
|
+
- `tokens/typography.css` — scale, weights, timer sizes.
|
|
15
|
+
- `tokens/spacing.css` — 4px grid, layout widths, control heights.
|
|
16
|
+
- `tokens/elevation.css` — radii, shadows, blur, scrim.
|
|
17
|
+
- `tokens/motion.css` — durations, easings, reduced-motion.
|
|
18
|
+
- `tokens/fonts.css` — font stacks. Currently loads Instrument Sans + JetBrains Mono from Google Fonts; swap for local `@font-face` when licensed files exist.
|
|
19
|
+
- `tokens/base.css` — element defaults.
|
|
20
|
+
- `assets/` — `logo.svg` (64px+), `logo-small.svg` (16/32), PNG exports 16→1024.
|
|
21
|
+
|
|
22
|
+
## Rails
|
|
23
|
+
|
|
24
|
+
Copy `styles.css` and `tokens/` into `app/assets/stylesheets/tally/` (or vendor the package via importmap/jsbundling) and include it before application styles. Reports and emails then use the same variables as the apps.
|
|
25
|
+
|
|
26
|
+
## Rules
|
|
27
|
+
|
|
28
|
+
Use the semantic alias (`--surface-card`, `--text-body`, `--action-primary`), never the base ramp (`--neutral-850`). Charts and project colours use `--chart-1…8` only.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Tally — app icon
|
|
2
|
+
|
|
3
|
+
Four white uprights and an amber fifth mark drawn as a growth curve, on a deep indigo
|
|
4
|
+
gradient.
|
|
5
|
+
|
|
6
|
+
## Files
|
|
7
|
+
|
|
8
|
+
- `tally.svg` — vector master. Use for 64 px and up.
|
|
9
|
+
- `tally-small.svg` — 16 and 32 px artwork. Three uprights instead of four, strokes
|
|
10
|
+
widened 68 → 104. At 16 px the icon shape is only 12.9 px wide, which fits three
|
|
11
|
+
strokes with usable gaps but not four; the full mark turns to grey haze.
|
|
12
|
+
- `png/` — flat exports. 16 and 32 come from `tally-small.svg`.
|
|
13
|
+
- `Tally.iconset/` — the same PNGs under Apple's names. Delete it if your build pipeline
|
|
14
|
+
generates its own.
|
|
15
|
+
|
|
16
|
+
## Build
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
iconutil -c icns Tally.iconset -o Tally.icns
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Specs
|
|
23
|
+
|
|
24
|
+
1024 × 1024 canvas, icon shape 824 wide and centred, corner radius 181.3 (22%),
|
|
25
|
+
transparent outside the shape, no baked shadow.
|
|
26
|
+
|
|
27
|
+
Background `#4A57D2 → #2C3391 → #151A54`, with a 16% white lift from the top edge.
|
|
28
|
+
Marks `#FFFFFF`. Curve `#F5A524`.
|
|
29
|
+
|
|
30
|
+
The curve is one cubic Bézier with a round cap. Its control points sit symmetrically about
|
|
31
|
+
the chord, which is what keeps the bend even along the whole stroke — if you edit it, keep
|
|
32
|
+
them mirrored or it develops an elbow.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" xmlns:c2pa="http://c2pa.org/manifest"><metadata><c2pa:manifest>AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTpjNjk3NDQ4My0yYTI4LTQ1NjctYjA1Yy0zOWY0NDI3N2Q5Y2UAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaKxhLNdO+z/3SL5VjI6QiKUAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDowMzA4ZTU1Mi01MTlkLTQyNzQtYTFmZC05ZTNhZjI2NTY4NTFscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNo8RlcpgmHCdRmg8pin7mxPwAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggLQMC+Up3WMiYZeFP+4NkioKnGS4/EcCM9XYlgcwDPGWkZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaGLd3VB9nz48NWno5vB3yccAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRNAAAAAAAAAAAAAAAAAGRoYXNoWCClVpTG+J3oHO5viktt28rnxSEmYxBWSirDCi92C/VUR2RuYW1lbmp1bWJmIG1hbmlmZXN0amV4Y2x1c2lvbnOBomVzdGFydBiaZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOmM2OTc0NDgzLTJhMjgtNDU2Ny1iMDVjLTM5ZjQ0Mjc3ZDljZS9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOjAxNmRlMTM5LTA4MmQtNDBiNS05MzcyLTg3NjZkZTliZWM0NXJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCAtAwL5SndYyJhl4U/7g2SKgqcZLj8RwIz1diWBzAM8ZaJjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFggfJxdwa97MJ3XPnmID2fk+wKPsIjCk0BGws8iVWdLSCSiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggDjRexpit+/ZOgcj4M81MSi8D+KYfhrGhsVQ4W8CWqgp0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQJ/1HIGpfLh9Tv/M39XcWDXgYwig+wqdH3BitHbsSGXhClftsHuJmLNMj9cnzdFfmmy7Omlxi85LsA0xnt9/U+4=</c2pa:manifest></metadata>
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0" y1="0" x2="0.35" y2="1"><stop offset="0" stop-color="#4A57D2"></stop><stop offset="0.55" stop-color="#2C3391"></stop><stop offset="1" stop-color="#151A54"></stop></linearGradient>
|
|
4
|
+
<radialGradient id="lift" cx="0.5" cy="0.06" r="0.85"><stop offset="0" stop-color="#FFFFFF" stop-opacity="0.16"></stop><stop offset="1" stop-color="#FFFFFF" stop-opacity="0"></stop></radialGradient>
|
|
5
|
+
<clipPath id="mask"><rect x="100.0" y="100.0" width="824" height="824" rx="181.3" ry="181.3"></rect></clipPath>
|
|
6
|
+
</defs>
|
|
7
|
+
<rect id="icon-shape" x="100.0" y="100.0" width="824" height="824" rx="181.3" ry="181.3" fill="url(#bg)"></rect>
|
|
8
|
+
<rect x="100.0" y="100.0" width="824" height="824" rx="181.3" ry="181.3" fill="url(#lift)"></rect>
|
|
9
|
+
<g clip-path="url(#mask)">
|
|
10
|
+
<line x1="332" y1="300" x2="332" y2="724" stroke="#FFFFFF" stroke-width="104" stroke-linecap="round"></line>
|
|
11
|
+
<line x1="512" y1="300" x2="512" y2="724" stroke="#FFFFFF" stroke-width="104" stroke-linecap="round"></line>
|
|
12
|
+
<line x1="692" y1="300" x2="692" y2="724" stroke="#FFFFFF" stroke-width="104" stroke-linecap="round"></line>
|
|
13
|
+
<path d="M 272 714 C 482.5 611.9, 615.8 497.1, 748 304" fill="none" stroke="#F5A524" stroke-width="110" stroke-linecap="round"></path>
|
|
14
|
+
</g>
|
|
15
|
+
</svg>
|
package/assets/logo.svg
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1024" height="1024" viewBox="0 0 1024 1024" xmlns:c2pa="http://c2pa.org/manifest"><metadata><c2pa:manifest>AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYTowNWViYjU5OC0yMmRiLTQ3N2EtOTllMS1iYmZiZmZhMWY2MzYAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaPT/BoKeGEBfPoXe9mo1YOEAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDphMmRmM2U1YS0zYTViLTRiOGUtODQ4OC1hZTgzM2NjOWI1YjFscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNotYysDq3FO8g1zO6WSn3uZQAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggUjIPpTTjVa7TlPX4G1JZ+vw8aTlojdFbTCnkOqySpvWkZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaGLKUChMJy0p4xHd4rRQlmMAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRNAAAAAAAAAAAAAAAAAGRoYXNoWCDNCxt6mfviPmkodwq+5uqBxQX9yKsVQlogoy8Mgv4KVWRuYW1lbmp1bWJmIG1hbmlmZXN0amV4Y2x1c2lvbnOBomVzdGFydBiaZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjA1ZWJiNTk4LTIyZGItNDc3YS05OWUxLWJiZmJmZmExZjYzNi9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOmU2MTc4MDc3LWFlZTYtNDhhZS1hZTI0LTdmOThjY2JmNzliN3JjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCBSMg+lNONVrtOU9fgbUln6/DxpOWiN0VtMKeQ6rJKm9aJjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFggEViiyXc2OxHnP/Z+vYs+okLFDQE+j2UXoZE5XY8gUgeiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggaG7v43NnVsoAj1pYdSumpuxeLcpyjtVo6c5xvUwwb790Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQKhzUO/0ELqYYTwk03aTq4qO7liqE5FeQAFVpTfr+aW8NqY861YrBVene3zCw69Y6pn+pCEgS0779TcsFjhN1ts=</c2pa:manifest></metadata>
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bg" x1="0" y1="0" x2="0.35" y2="1"><stop offset="0" stop-color="#4A57D2"></stop><stop offset="0.55" stop-color="#2C3391"></stop><stop offset="1" stop-color="#151A54"></stop></linearGradient>
|
|
4
|
+
<radialGradient id="lift" cx="0.5" cy="0.06" r="0.85"><stop offset="0" stop-color="#FFFFFF" stop-opacity="0.16"></stop><stop offset="1" stop-color="#FFFFFF" stop-opacity="0"></stop></radialGradient>
|
|
5
|
+
<clipPath id="mask"><rect x="100.0" y="100.0" width="824" height="824" rx="181.3" ry="181.3"></rect></clipPath>
|
|
6
|
+
</defs>
|
|
7
|
+
<rect id="icon-shape" x="100.0" y="100.0" width="824" height="824" rx="181.3" ry="181.3" fill="url(#bg)"></rect>
|
|
8
|
+
<rect x="100.0" y="100.0" width="824" height="824" rx="181.3" ry="181.3" fill="url(#lift)"></rect>
|
|
9
|
+
<g clip-path="url(#mask)">
|
|
10
|
+
<line x1="308" y1="296" x2="308" y2="728" stroke="#FFFFFF" stroke-width="68" stroke-linecap="round"></line>
|
|
11
|
+
<line x1="444" y1="296" x2="444" y2="728" stroke="#FFFFFF" stroke-width="68" stroke-linecap="round"></line>
|
|
12
|
+
<line x1="580" y1="296" x2="580" y2="728" stroke="#FFFFFF" stroke-width="68" stroke-linecap="round"></line>
|
|
13
|
+
<line x1="716" y1="296" x2="716" y2="728" stroke="#FFFFFF" stroke-width="68" stroke-linecap="round"></line>
|
|
14
|
+
<path d="M 248 716 C 478.0 619.0, 626.4 504.2, 778 306" fill="none" stroke="#F5A524" stroke-width="80" stroke-linecap="round"></path>
|
|
15
|
+
</g>
|
|
16
|
+
</svg>
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dstally/tokens",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Tally design tokens: CSS custom properties, base styles, fonts and brand assets.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"styles.css",
|
|
11
|
+
"tokens",
|
|
12
|
+
"assets",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"exports": {
|
|
16
|
+
".": "./styles.css",
|
|
17
|
+
"./styles.css": "./styles.css",
|
|
18
|
+
"./tokens/*": "./tokens/*",
|
|
19
|
+
"./assets/*": "./assets/*"
|
|
20
|
+
},
|
|
21
|
+
"sideEffects": true,
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "node -e \"console.log('@dstally/tokens: nothing to build')\"",
|
|
24
|
+
"typecheck": "node -e \"process.exit(0)\""
|
|
25
|
+
}
|
|
26
|
+
}
|
package/styles.css
ADDED
package/tokens/base.css
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/* Element defaults. Consumers get sane baselines without writing any CSS. */
|
|
2
|
+
*,*::before,*::after{box-sizing:border-box}
|
|
3
|
+
html{-webkit-text-size-adjust:100%}
|
|
4
|
+
body{margin:0;background:var(--surface-page);color:var(--text-body);font-family:var(--font-sans);font-size:var(--text-body);line-height:var(--leading-body);letter-spacing:var(--tracking-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
|
|
5
|
+
h1,h2,h3,h4{margin:0;color:var(--text-strong);font-weight:var(--weight-semibold);text-wrap:balance}
|
|
6
|
+
h1{font-size:var(--text-display-2);line-height:var(--leading-display-2);letter-spacing:var(--tracking-display-2)}
|
|
7
|
+
h2{font-size:var(--text-title-1);line-height:var(--leading-title-1);letter-spacing:var(--tracking-title-1)}
|
|
8
|
+
h3{font-size:var(--text-title-2);line-height:var(--leading-title-2);letter-spacing:var(--tracking-title-2)}
|
|
9
|
+
h4{font-size:var(--text-title-3);line-height:var(--leading-title-3);letter-spacing:var(--tracking-title-3)}
|
|
10
|
+
p{margin:0 0 var(--space-5);text-wrap:pretty;max-width:var(--container-prose)}
|
|
11
|
+
a{color:var(--text-link);text-decoration:none;transition:color var(--duration-fast) var(--ease-standard)}
|
|
12
|
+
a:hover{color:var(--text-link-hover)}
|
|
13
|
+
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--border-focus);outline-offset:2px}
|
|
14
|
+
small{font-size:var(--text-caption);line-height:var(--leading-caption)}
|
|
15
|
+
code,kbd,samp,pre{font-family:var(--font-mono);font-size:.92em}
|
|
16
|
+
hr{border:0;border-top:1px solid var(--border-subtle);margin:var(--space-8) 0}
|
|
17
|
+
::selection{background:rgba(245,165,36,.28);color:var(--text-strong)}
|
|
18
|
+
.tally-num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;font-feature-settings:var(--numeric-features)}
|
|
19
|
+
.tally-overline{font-size:var(--text-overline);letter-spacing:var(--tracking-overline);text-transform:uppercase;font-weight:var(--weight-semibold);color:var(--text-muted)}
|
|
20
|
+
.tally-container{max-width:var(--container-max);margin:0 auto;padding:0 var(--gutter)}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/* Tally colour system. Base ramps first, then semantic aliases.
|
|
2
|
+
Dark is the canonical theme; :root is dark, [data-theme="light"] overrides. */
|
|
3
|
+
:root{
|
|
4
|
+
/* Brand indigo — sampled from the app-icon gradient #4A57D2 -> #2C3391 -> #151A54 */
|
|
5
|
+
--indigo-100:#E4E7FA;
|
|
6
|
+
--indigo-200:#C3C8F3;
|
|
7
|
+
--indigo-300:#9AA2EA;
|
|
8
|
+
--indigo-400:#6C77DE;
|
|
9
|
+
--indigo-500:#4A57D2;
|
|
10
|
+
--indigo-600:#3A44AF;
|
|
11
|
+
--indigo-700:#2C3391;
|
|
12
|
+
--indigo-800:#1F2470;
|
|
13
|
+
--indigo-900:#151A54;
|
|
14
|
+
--indigo-950:#0E1138;
|
|
15
|
+
|
|
16
|
+
/* Accent amber — the fifth tally stroke */
|
|
17
|
+
--amber-200:#FDE3B4;
|
|
18
|
+
--amber-300:#FBCC7C;
|
|
19
|
+
--amber-400:#F8B547;
|
|
20
|
+
--amber-500:#F5A524;
|
|
21
|
+
--amber-600:#D98C10;
|
|
22
|
+
--amber-700:#A96A08;
|
|
23
|
+
|
|
24
|
+
/* Secondary blue — app UI actions */
|
|
25
|
+
--blue-300:#7FB4EE;
|
|
26
|
+
--blue-400:#3D8BDB;
|
|
27
|
+
--blue-500:#1565C0;
|
|
28
|
+
--blue-600:#0F4E97;
|
|
29
|
+
--blue-700:#0B3A70;
|
|
30
|
+
|
|
31
|
+
/* Cool neutrals */
|
|
32
|
+
--neutral-0:#FFFFFF;
|
|
33
|
+
--neutral-25:#FAFBFD;
|
|
34
|
+
--neutral-50:#F4F6FA;
|
|
35
|
+
--neutral-100:#E8EBF2;
|
|
36
|
+
--neutral-200:#D5DAE6;
|
|
37
|
+
--neutral-300:#B3BAC9;
|
|
38
|
+
--neutral-400:#8B93A5;
|
|
39
|
+
--neutral-500:#697084;
|
|
40
|
+
--neutral-600:#4C5365;
|
|
41
|
+
--neutral-650:#3C4356;
|
|
42
|
+
--neutral-700:#2B3143;
|
|
43
|
+
--neutral-800:#1D2230;
|
|
44
|
+
--neutral-850:#161A26;
|
|
45
|
+
--neutral-900:#10131C;
|
|
46
|
+
--neutral-950:#0A0C13;
|
|
47
|
+
|
|
48
|
+
/* Okabe-Ito — the only palette permitted for charts and parallel-timer tracks */
|
|
49
|
+
--chart-1:#0072B2; /* blue */
|
|
50
|
+
--chart-2:#E69F00; /* orange */
|
|
51
|
+
--chart-3:#009E73; /* bluish green */
|
|
52
|
+
--chart-4:#CC79A7; /* reddish purple */
|
|
53
|
+
--chart-5:#56B4E9; /* sky blue */
|
|
54
|
+
--chart-6:#D55E00; /* vermillion */
|
|
55
|
+
--chart-7:#F0E442; /* yellow */
|
|
56
|
+
--chart-8:#4C5566; /* neutral (replaces Okabe-Ito black on dark ground) */
|
|
57
|
+
|
|
58
|
+
/* Gradients */
|
|
59
|
+
--gradient-brand:linear-gradient(160deg,#4A57D2 0%,#2C3391 52%,#151A54 100%); /* @kind other */
|
|
60
|
+
--gradient-brand-lift:linear-gradient(180deg,rgba(255,255,255,.16) 0%,rgba(255,255,255,0) 46%); /* @kind other */
|
|
61
|
+
--gradient-page:radial-gradient(120% 80% at 50% -10%,#1F2470 0%,#10131C 62%); /* @kind other */
|
|
62
|
+
|
|
63
|
+
/* ---- Semantic: dark (canonical) ---- */
|
|
64
|
+
--surface-page:var(--neutral-900);
|
|
65
|
+
--surface-sunken:var(--neutral-950);
|
|
66
|
+
--surface-card:var(--neutral-850);
|
|
67
|
+
--surface-raised:var(--neutral-800);
|
|
68
|
+
--surface-overlay:rgba(16,19,28,.72);
|
|
69
|
+
--surface-inset:rgba(255,255,255,.04);
|
|
70
|
+
--surface-hover:rgba(255,255,255,.06);
|
|
71
|
+
--surface-active:rgba(255,255,255,.1);
|
|
72
|
+
--surface-brand:var(--indigo-900);
|
|
73
|
+
--surface-brand-subtle:rgba(74,87,210,.16);
|
|
74
|
+
--surface-accent-subtle:rgba(245,165,36,.14);
|
|
75
|
+
|
|
76
|
+
--text-strong:var(--neutral-0);
|
|
77
|
+
--text-body:#DCE1EC;
|
|
78
|
+
--text-muted:var(--neutral-300);
|
|
79
|
+
--text-subtle:var(--neutral-400);
|
|
80
|
+
--text-inverse:var(--neutral-900);
|
|
81
|
+
--text-accent:var(--amber-400);
|
|
82
|
+
--text-link:var(--blue-300);
|
|
83
|
+
--text-link-hover:var(--amber-400);
|
|
84
|
+
--text-on-brand:var(--neutral-0);
|
|
85
|
+
|
|
86
|
+
--border-subtle:rgba(255,255,255,.08);
|
|
87
|
+
--border-default:rgba(255,255,255,.14);
|
|
88
|
+
--border-strong:rgba(255,255,255,.24);
|
|
89
|
+
--border-accent:var(--amber-500);
|
|
90
|
+
--border-focus:var(--amber-400);
|
|
91
|
+
|
|
92
|
+
--action-primary:var(--amber-500);
|
|
93
|
+
--action-primary-hover:var(--amber-400);
|
|
94
|
+
--action-primary-active:var(--amber-600);
|
|
95
|
+
--action-primary-text:#20160A;
|
|
96
|
+
--action-secondary:var(--blue-500);
|
|
97
|
+
--action-secondary-hover:var(--blue-400);
|
|
98
|
+
--action-secondary-active:var(--blue-600);
|
|
99
|
+
--action-secondary-text:var(--neutral-0);
|
|
100
|
+
|
|
101
|
+
--status-running:var(--amber-500);
|
|
102
|
+
--status-paused:var(--neutral-400);
|
|
103
|
+
--status-success:#00B383;
|
|
104
|
+
--status-warning:var(--amber-500);
|
|
105
|
+
--status-danger:#E8663A;
|
|
106
|
+
--status-info:#3D9BE0;
|
|
107
|
+
--status-success-surface:rgba(0,158,115,.16);
|
|
108
|
+
--status-warning-surface:rgba(245,165,36,.16);
|
|
109
|
+
--status-danger-surface:rgba(213,94,0,.18);
|
|
110
|
+
--status-info-surface:rgba(0,114,178,.18);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
[data-theme="light"]{
|
|
114
|
+
--surface-page:var(--neutral-25);
|
|
115
|
+
--surface-sunken:var(--neutral-50);
|
|
116
|
+
--surface-card:var(--neutral-0);
|
|
117
|
+
--surface-raised:var(--neutral-0);
|
|
118
|
+
--surface-overlay:rgba(16,19,28,.4);
|
|
119
|
+
--surface-inset:var(--neutral-50);
|
|
120
|
+
--surface-hover:rgba(21,26,84,.05);
|
|
121
|
+
--surface-active:rgba(21,26,84,.09);
|
|
122
|
+
--surface-brand:var(--indigo-500);
|
|
123
|
+
--surface-brand-subtle:rgba(74,87,210,.08);
|
|
124
|
+
--surface-accent-subtle:rgba(245,165,36,.16);
|
|
125
|
+
|
|
126
|
+
--text-strong:var(--neutral-900);
|
|
127
|
+
--text-body:var(--neutral-800);
|
|
128
|
+
--text-muted:var(--neutral-500);
|
|
129
|
+
--text-subtle:var(--neutral-400);
|
|
130
|
+
--text-inverse:var(--neutral-0);
|
|
131
|
+
--text-accent:var(--amber-700);
|
|
132
|
+
--text-link:var(--blue-500);
|
|
133
|
+
--text-link-hover:var(--indigo-700);
|
|
134
|
+
--text-on-brand:var(--neutral-0);
|
|
135
|
+
|
|
136
|
+
--border-subtle:var(--neutral-100);
|
|
137
|
+
--border-default:var(--neutral-200);
|
|
138
|
+
--border-strong:var(--neutral-300);
|
|
139
|
+
|
|
140
|
+
--action-primary:var(--amber-500);
|
|
141
|
+
--action-primary-hover:var(--amber-400);
|
|
142
|
+
--action-primary-active:var(--amber-600);
|
|
143
|
+
--action-primary-text:#20160A;
|
|
144
|
+
|
|
145
|
+
--status-success:#007A5A;
|
|
146
|
+
--status-warning:var(--amber-700);
|
|
147
|
+
--status-danger:#C24A12;
|
|
148
|
+
--status-info:var(--blue-500);
|
|
149
|
+
--chart-8:#000000;
|
|
150
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/* Radii, shadows, blur. Shadows are near-black and low-spread; nothing floats far. */
|
|
2
|
+
:root{
|
|
3
|
+
--radius-xs:4px;
|
|
4
|
+
--radius-sm:6px;
|
|
5
|
+
--radius-md:9px;
|
|
6
|
+
--radius-lg:12px;
|
|
7
|
+
--radius-xl:16px;
|
|
8
|
+
--radius-2xl:22px;
|
|
9
|
+
--radius-pill:999px;
|
|
10
|
+
--radius-icon-ratio:22%; /* app-icon squircle: radius = 22% of side */
|
|
11
|
+
|
|
12
|
+
--shadow-none:none;
|
|
13
|
+
--shadow-xs:0 1px 2px rgba(6,8,16,.32);
|
|
14
|
+
--shadow-sm:0 1px 3px rgba(6,8,16,.36),0 1px 1px rgba(6,8,16,.24);
|
|
15
|
+
--shadow-md:0 6px 16px -4px rgba(6,8,16,.44),0 2px 4px rgba(6,8,16,.28);
|
|
16
|
+
--shadow-lg:0 18px 40px -12px rgba(6,8,16,.55),0 4px 10px rgba(6,8,16,.3);
|
|
17
|
+
--shadow-pill:0 10px 30px -8px rgba(6,8,16,.6),0 0 0 1px rgba(255,255,255,.08) inset;
|
|
18
|
+
--shadow-focus:0 0 0 3px rgba(245,165,36,.34);
|
|
19
|
+
--shadow-inset-hairline:inset 0 1px 0 rgba(255,255,255,.06);
|
|
20
|
+
--glow-amber:0 0 0 1px rgba(245,165,36,.5),0 0 24px -6px rgba(245,165,36,.45);
|
|
21
|
+
|
|
22
|
+
--blur-panel:saturate(140%) blur(20px); /* @kind other */
|
|
23
|
+
--blur-scrim:blur(6px); /* @kind other */
|
|
24
|
+
|
|
25
|
+
/* Protection gradient for text over imagery / gradient */
|
|
26
|
+
--scrim-bottom:linear-gradient(180deg,rgba(10,12,19,0) 0%,rgba(10,12,19,.82) 100%); /* @kind other */
|
|
27
|
+
}
|
package/tokens/fonts.css
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
@import url('https://fonts.googleapis.com/css2?family=Instrument+Sans:ital,wght@0,400..700;1,400..700&family=JetBrains+Mono:wght@400;500;700&display=swap');
|
|
2
|
+
|
|
3
|
+
/* Tally webfonts are served from Google Fonts (see readme.md — SUBSTITUTION note).
|
|
4
|
+
If licensed brand binaries arrive, replace this @import with local @font-face rules
|
|
5
|
+
pointing at assets/fonts/*.woff2 and keep the family names below unchanged. */
|
|
6
|
+
:root{
|
|
7
|
+
--font-sans:"Instrument Sans","Helvetica Neue",-apple-system,BlinkMacSystemFont,sans-serif;
|
|
8
|
+
--font-mono:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,monospace;
|
|
9
|
+
--font-display:var(--font-sans);
|
|
10
|
+
--font-ui:var(--font-sans);
|
|
11
|
+
--font-numeric:var(--font-mono);
|
|
12
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* Motion. Short, damped, never bouncy. Time is the subject; nothing should feel slow. */
|
|
2
|
+
:root{
|
|
3
|
+
--duration-instant:80ms; /* @kind other */
|
|
4
|
+
--duration-fast:140ms; /* @kind other */
|
|
5
|
+
--duration-base:200ms; /* @kind other */
|
|
6
|
+
--duration-slow:320ms; /* @kind other */
|
|
7
|
+
--duration-enter:420ms; /* @kind other */
|
|
8
|
+
|
|
9
|
+
--ease-standard:cubic-bezier(.2,0,.2,1); /* @kind other */
|
|
10
|
+
--ease-out:cubic-bezier(.16,1,.3,1); /* @kind other */
|
|
11
|
+
--ease-in:cubic-bezier(.4,0,1,1); /* @kind other */
|
|
12
|
+
--ease-tick:steps(1,end); /* @kind other */ /* second-by-second timer digits never tween */
|
|
13
|
+
|
|
14
|
+
--transition-control:background-color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard),box-shadow var(--duration-fast) var(--ease-standard); /* @kind other */
|
|
15
|
+
--press-scale:.985; /* @kind other */
|
|
16
|
+
}
|
|
17
|
+
@media (prefers-reduced-motion:reduce){
|
|
18
|
+
:root{
|
|
19
|
+
--duration-fast:0ms; /* @kind other */
|
|
20
|
+
--duration-base:0ms; /* @kind other */
|
|
21
|
+
--duration-slow:0ms; /* @kind other */
|
|
22
|
+
--duration-enter:0ms; /* @kind other */
|
|
23
|
+
--press-scale:1; /* @kind other */
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* 4px base grid. Section rhythm on the marketing site uses the -section tokens. */
|
|
2
|
+
:root{
|
|
3
|
+
--space-0:0px;
|
|
4
|
+
--space-1:2px;
|
|
5
|
+
--space-2:4px;
|
|
6
|
+
--space-3:8px;
|
|
7
|
+
--space-4:12px;
|
|
8
|
+
--space-5:16px;
|
|
9
|
+
--space-6:20px;
|
|
10
|
+
--space-7:24px;
|
|
11
|
+
--space-8:32px;
|
|
12
|
+
--space-9:40px;
|
|
13
|
+
--space-10:48px;
|
|
14
|
+
--space-11:64px;
|
|
15
|
+
--space-12:80px;
|
|
16
|
+
--space-13:112px;
|
|
17
|
+
--space-14:160px;
|
|
18
|
+
|
|
19
|
+
--section-y:112px;
|
|
20
|
+
--section-y-tight:72px;
|
|
21
|
+
--container-max:1160px;
|
|
22
|
+
--container-prose:660px;
|
|
23
|
+
--gutter:24px;
|
|
24
|
+
|
|
25
|
+
--control-h-sm:26px;
|
|
26
|
+
--control-h-md:32px;
|
|
27
|
+
--control-h-lg:40px;
|
|
28
|
+
--control-h-xl:48px;
|
|
29
|
+
--row-h:38px;
|
|
30
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/* Type scale. Display and UI share one family; numerals are always mono + tabular. */
|
|
2
|
+
:root{
|
|
3
|
+
--text-display-1:64px; --leading-display-1:1.02; --tracking-display-1:-.03em;
|
|
4
|
+
--text-display-2:48px; --leading-display-2:1.06; --tracking-display-2:-.025em;
|
|
5
|
+
--text-title-1:34px; --leading-title-1:1.14; --tracking-title-1:-.02em;
|
|
6
|
+
--text-title-2:26px; --leading-title-2:1.2; --tracking-title-2:-.015em;
|
|
7
|
+
--text-title-3:20px; --leading-title-3:1.3; --tracking-title-3:-.01em;
|
|
8
|
+
--text-body-lg:18px; --leading-body-lg:1.6; --tracking-body-lg:-.005em;
|
|
9
|
+
--text-body:16px; --leading-body:1.6; --tracking-body:0em;
|
|
10
|
+
--text-body-sm:14px; --leading-body-sm:1.55; --tracking-body-sm:0em;
|
|
11
|
+
--text-caption:12px; --leading-caption:1.4; --tracking-caption:.005em;
|
|
12
|
+
--text-overline:11px; --leading-overline:1.2; --tracking-overline:.12em;
|
|
13
|
+
|
|
14
|
+
--weight-regular:400;
|
|
15
|
+
--weight-medium:500;
|
|
16
|
+
--weight-semibold:600;
|
|
17
|
+
--weight-bold:700;
|
|
18
|
+
|
|
19
|
+
/* Timer / duration readouts */
|
|
20
|
+
--text-timer-xl:44px;
|
|
21
|
+
--text-timer-lg:28px;
|
|
22
|
+
--text-timer-md:18px;
|
|
23
|
+
--text-timer-sm:13px;
|
|
24
|
+
--numeric-features:"tnum" 1,"cv01" 1; /* @kind other */
|
|
25
|
+
}
|