diff --git a/index.html b/index.html index 9e9bf49..db1482a 100644 --- a/index.html +++ b/index.html @@ -42,6 +42,21 @@ .lockup.big { font-size: 40px; gap: 1rem; } .lockup.big img { width: 64px; height: 64px; } :root[data-theme='light'] .on-dark, :root:not([data-theme='light']) .on-light { display: none !important; } +/* The index: every section a click away, while the page scrolls. */ +.index { position: sticky; top: 0; z-index: 4; background: color-mix(in srgb, var(--spin-page) 92%, transparent); backdrop-filter: blur(6px); border-bottom: 1px solid var(--spin-border); } +.index .wrap { display: flex; gap: .25rem 1rem; padding-block: .5rem; overflow-x: auto; white-space: nowrap; scrollbar-width: none; } +.index a { font: 500 12px var(--spin-font-mono); color: var(--spin-muted); text-decoration: none; padding: .35rem .15rem; } +.index a:hover { color: var(--spin-accent-text); } +.index a[href="#in-use"], .index a[href="#decisions"], .index a[href="#checks"] { color: var(--spin-label); margin-left: .5rem; } +section, .part { scroll-margin-top: 3rem; } + +/* A part: what follows is sample content, a decision, or a check. */ +.part { display: flex; gap: 1rem; align-items: baseline; margin-top: 4rem; padding: 1.25rem 0; border-top: 2px solid var(--spin-border-strong); } +.part .num { font: 600 2rem var(--spin-font-mono); color: var(--spin-label); line-height: 1; } +.part h2 { margin: 0; font-size: 1.4rem; } .part p { margin: .25rem 0 0; max-width: 52rem; } +#page > .part:first-child { margin-top: 1.5rem; border-top: 0; } +.perc-wrap summary { cursor: pointer; font: 500 13px var(--spin-font-mono); padding: .5rem 0; color: var(--spin-text); } + /* The mark's guide */ .guide { display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: 2rem; align-items: start; } .tiles { display: grid; gap: 1rem; } @@ -147,7 +162,8 @@ .hero, .doc, .dash { grid-template-columns: 1fr; } .doc nav, .doc aside, .dash nav { display: none; } .hero { padding: 2rem 1rem; } .doc article { padding: 1.25rem 1rem; } - .hero h1 { font-size: 1.75rem; } .hero img { max-width: 10rem; } + .hero { gap: 1rem; padding: 1.5rem 1rem; } .hero h1 { font-size: 1.6rem; margin-top: .25rem; } .hero img { max-width: 6.5rem; } + .part { margin-top: 2.5rem; } .part .num { font-size: 1.5rem; } .wrap { padding-inline: 1rem; } table { font-size: 13px; } .site header .search { display: none; } .btn, .dash input, .dash .btn { min-height: var(--spin-target-touch); } @@ -172,9 +188,18 @@

Spin brand system

+
-
+
1

In use

Sample screens drawn from the tokens. The words, rows and names in them are fixtures, there to show the palette at work: nothing in them is a decision.

+ +
The site
SpinSearch
@@ -207,7 +232,7 @@

Snapshots and rollback

-
+
The dashboard
@@ -235,7 +260,9 @@

Workspaces

-
+
2

Decisions

What the brand is: the mark and how it is used, and the palette, each color by what it is for. These are what palette.toml and the mark's cut hold.

+ +
The mark
@@ -262,12 +289,14 @@

Not

-
+
Palette
-
+
3

Checks

What holds the decisions: the same page at a phone's and a tablet's width, and every pair of colors task palette measures.

+ +
Widths

This page at a phone's and a tablet's width (layout.phone, layout.tablet), in the mode and the view chosen above.

@@ -276,10 +305,10 @@

Not

-
+
Perception

Every pair task palette holds, as drawn and in each view (dist/perception.js). Contrast is WCAG 2.2's; distance is CIEDE2000.

-
+
Every pair
@@ -328,6 +357,8 @@

Not

perception.map((r) => `${r.Mode}${r.Kind}${r.What}${r.Distance ? r.Floor + '/' + r.Worst : r.Floor + ':1'}` + (r.Distance ? views.map((v) => `${r.Distance[v]}`).join('') : `${r.Contrast}:1`) + '').join(''); +const held = perception.filter((r) => r.OK).length; +document.getElementById('perc-summary').textContent = `Every pair: ${held} of ${perception.length} hold their floors - open the table`; apply();