stylegallery 0.1.7 → 0.1.9

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.
Files changed (62) hide show
  1. package/AGENTS.md +15 -1
  2. package/DOMAINS.md +7 -3
  3. package/GOVERNANCE.md +13 -11
  4. package/LICENSE-DOCS +2 -2
  5. package/README.md +23 -10
  6. package/consumer-reference/agent-native/v2/admission-policy.json +32 -37
  7. package/consumer-reference/agent-native/v2/material-registry.json +1 -1
  8. package/consumer-reference/agent-native/v2/schema/admission-policy.schema.json +3 -3
  9. package/consumer-reference/agent-native/v2/schema/material-record.schema.json +1 -1
  10. package/design-engineering/state-management/index.md +1 -1
  11. package/design-engineering/state-management/patterns/derived-state.md +1 -1
  12. package/design-engineering/state-management/patterns/draft-and-baseline.md +1 -1
  13. package/design-engineering/state-management/patterns/id-selection.md +1 -1
  14. package/design-engineering/state-management/patterns/identity-reset.md +1 -1
  15. package/design-engineering/state-management/patterns/latest-request-wins.md +1 -1
  16. package/design-engineering/state-management/patterns/optimistic-overlay.md +1 -1
  17. package/design-engineering/state-management/patterns/single-flight.md +1 -1
  18. package/design-engineering/state-management/patterns/single-owner.md +1 -1
  19. package/design-engineering/state-management/patterns/submitted-snapshot.md +1 -1
  20. package/design-engineering/state-management/patterns/unsaved-navigation.md +1 -1
  21. package/design-engineering/state-management/patterns/url-state.md +1 -1
  22. package/design-engineering/state-management/patterns/versioned-restore.md +1 -1
  23. package/design-engineering/state-management/verification.md +1 -1
  24. package/design-terminology/conflict-cases.md +1 -1
  25. package/design-terminology/source-kinds.md +1 -1
  26. package/expression/brand-studies.md +50 -0
  27. package/expression/direction-brief.md +83 -0
  28. package/expression/directions/nocturne-editorial.md +81 -0
  29. package/expression/directions/warm-print.md +73 -0
  30. package/expression/index.md +52 -0
  31. package/expression/techniques/gradient-atmosphere.md +107 -0
  32. package/expression/techniques/grain-and-texture.md +83 -0
  33. package/expression/techniques/webgl-hero.md +123 -0
  34. package/guides/vocabulary.md +1 -1
  35. package/index.md +3 -3
  36. package/log.md +45 -0
  37. package/motion/index.md +71 -0
  38. package/motion/techniques/kinetic-type.md +145 -0
  39. package/motion/techniques/scroll-choreography.md +154 -0
  40. package/package.json +17 -14
  41. package/platform-guides/compatibility-matrix.md +1 -1
  42. package/quality/claim-records/samples.md +50 -0
  43. package/quality/claim-records/stylegallery-multidomain-scope.md +2 -2
  44. package/quality/claims.md +24 -1
  45. package/quality/evidence/executable-evidence.md +1 -1
  46. package/quality/index.md +1 -2
  47. package/scripts/agent-native/v2/material-admission.mjs +1 -1
  48. package/scripts/agent-native/v2/material-identity.mjs +2 -2
  49. package/scripts/compiler/README.md +5 -5
  50. package/showcase/README.md +127 -0
  51. package/game-ui/classification.md +0 -82
  52. package/game-ui/decision-tree.md +0 -81
  53. package/game-ui/index.md +0 -45
  54. package/game-ui/reference-record.md +0 -62
  55. package/game-ui/screen-hierarchy.md +0 -107
  56. package/game-ui/screen-recipes.md +0 -101
  57. package/game-ui/unity/architecture.md +0 -166
  58. package/game-ui/unity/cli-loop.md +0 -84
  59. package/game-ui/unity/org-wiki.md +0 -146
  60. package/game-ui/unity/repository-map.md +0 -102
  61. package/game-ui/unity/ui-systems.md +0 -85
  62. package/game-ui/verification-workflow.md +0 -100
@@ -13,15 +13,15 @@
13
13
  "media_type": { "const": "text/markdown" },
14
14
  "allowed_materials": {
15
15
  "type": "array",
16
- "minItems": 181,
17
- "maxItems": 181,
16
+ "minItems": 180,
17
+ "maxItems": 180,
18
18
  "items": {
19
19
  "type": "object",
20
20
  "additionalProperties": false,
21
21
  "required": ["repository_path", "domain", "lifecycle"],
22
22
  "properties": {
23
23
  "repository_path": { "type": "string", "pattern": "^(?!/)(?!.*(?:^|/)\\.{1,2}(?:/|$))[A-Za-z0-9._ -]+(?:/[A-Za-z0-9._ -]+)*\\.md$" },
24
- "domain": { "enum": ["layout", "motion", "design-engineering", "game-ui", "platform-guides", "design-terminology", "shared"] },
24
+ "domain": { "enum": ["layout", "motion", "design-engineering", "platform-guides", "design-terminology", "expression", "shared"] },
25
25
  "lifecycle": { "enum": ["draft", "stable", "deprecated", "experimental", "generated"] }
26
26
  }
27
27
  }
@@ -15,6 +15,6 @@
15
15
  "source_sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
16
16
  "byte_length": { "type": "integer", "minimum": 0 },
17
17
  "lifecycle": { "enum": ["draft", "stable", "deprecated", "experimental", "generated"] },
18
- "domain": { "enum": ["layout", "motion", "design-engineering", "game-ui", "platform-guides", "design-terminology", "shared"] }
18
+ "domain": { "enum": ["layout", "motion", "design-engineering", "platform-guides", "design-terminology", "expression", "shared"] }
19
19
  }
20
20
  }
@@ -49,7 +49,7 @@ Neither a reducer nor a state machine guarantees race freedom. No library is the
49
49
 
50
50
  ## Verification Contract
51
51
 
52
- A reader should find a pattern from a failure symptom, identify its owner and minimal implementation, compose it into a screen, and locate a repeatable acceptance sequence. Run `npm run test:state-management` for the 12 local examples; record browser and backend checks separately.
52
+ A reader should find a pattern from a failure symptom, identify its owner and minimal implementation, compose it into a screen, and locate a repeatable acceptance sequence. Run `bun run test:state-management` for the 12 local examples; record browser and backend checks separately.
53
53
 
54
54
  ## Source, License, And Attribution
55
55
 
@@ -31,7 +31,7 @@ Only source items and filter are writable. Visible items and total are computed.
31
31
 
32
32
  ### Minimal Executable Example
33
33
 
34
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
34
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
35
 
36
36
  ```js
37
37
  import assert from "node:assert/strict";
@@ -31,7 +31,7 @@ The form owns a draft, persistence supplies the baseline, and dirty is derived u
31
31
 
32
32
  ### Minimal Executable Example
33
33
 
34
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
34
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
35
 
36
36
  ```js
37
37
  import assert from "node:assert/strict";
@@ -31,7 +31,7 @@ The screen owns `selectedId`; the data owner supplies current entities. Detail i
31
31
 
32
32
  ### Minimal Executable Example
33
33
 
34
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
34
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
35
 
36
36
  ```js
37
37
  import assert from "node:assert/strict";
@@ -31,7 +31,7 @@ The screen owner stores identity and generation. Entering a new identity clears
31
31
 
32
32
  ### Minimal Executable Example
33
33
 
34
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
34
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
35
 
36
36
  ```js
37
37
  import assert from "node:assert/strict";
@@ -33,7 +33,7 @@ The read owner stores a monotonically increasing identity, status, and last acce
33
33
 
34
34
  ### Minimal Executable Example
35
35
 
36
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
36
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
37
37
 
38
38
  ```js
39
39
  import assert from "node:assert/strict";
@@ -32,7 +32,7 @@ The cache owns base; the operation owns an overlay and ID. The displayed value i
32
32
 
33
33
  ### Minimal Executable Example
34
34
 
35
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
36
36
 
37
37
  ```js
38
38
  import assert from "node:assert/strict";
@@ -31,7 +31,7 @@ The operation owner holds one pending promise per declared scope. This example s
31
31
 
32
32
  ### Minimal Executable Example
33
33
 
34
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
34
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
35
 
36
36
  ```js
37
37
  import assert from "node:assert/strict";
@@ -31,7 +31,7 @@ The owner stores `value`; controls receive it and emit an intent. Temporary text
31
31
 
32
32
  ### Minimal Executable Example
33
33
 
34
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
34
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
35
 
36
36
  ```js
37
37
  import assert from "node:assert/strict";
@@ -33,7 +33,7 @@ The form owns draft and baseline; an active operation owns a copied snapshot and
33
33
 
34
34
  ### Minimal Executable Example
35
35
 
36
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
36
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
37
37
 
38
38
  ```js
39
39
  import assert from "node:assert/strict";
@@ -33,7 +33,7 @@ The form owns dirty; the router integration owns a pending destination and guard
33
33
 
34
34
  ### Minimal Executable Example
35
35
 
36
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
36
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
37
37
 
38
38
  ```js
39
39
  import assert from "node:assert/strict";
@@ -31,7 +31,7 @@ The route owns committed query state; a text field may own an uncommitted buffer
31
31
 
32
32
  ### Minimal Executable Example
33
33
 
34
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
34
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
35
 
36
36
  ```js
37
37
  import assert from "node:assert/strict";
@@ -32,7 +32,7 @@ The persistence adapter owns a versioned envelope and scope key. Decoding valida
32
32
 
33
33
  ### Minimal Executable Example
34
34
 
35
- Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `npm run test:state-management`. The assertions exercise the local model, not a browser or backend.
35
+ Run this standalone JavaScript block with Node.js 22 or newer, or run all pattern examples from a repository checkout with `bun run test:state-management`. The assertions exercise the local model, not a browser or backend.
36
36
 
37
37
  ```js
38
38
  import assert from "node:assert/strict";
@@ -31,7 +31,7 @@ Start with the selected pattern's invariant. Use controlled promises or an injec
31
31
 
32
32
  ### Executable Local Coverage
33
33
 
34
- From a repository checkout, `npm run test:state-management` extracts and executes the standalone `js` block from each of the 12 pattern pages in an isolated Node process. The examples assert model outcomes for ownership, projections, selection, drafts, save snapshots, navigation decisions, stale completions, duplicate effects, optimistic recovery, URL parsing, identity generations, and restore validation.
34
+ From a repository checkout, `bun run test:state-management` extracts and executes the standalone `js` block from each of the 12 pattern pages in an isolated Node process. The examples assert model outcomes for ownership, projections, selection, drafts, save snapshots, navigation decisions, stale completions, duplicate effects, optimistic recovery, URL parsing, identity generations, and restore validation.
35
35
 
36
36
  The four recipes declare integration acceptance sequences; they are not runnable browser fixtures. Existing [Interaction Lab](../../examples/domain-interactions/README.md) is a separate prototype with its own evidence scope. New recipe acceptance remains unexecuted until adapted to a consumer.
37
37
 
@@ -127,7 +127,7 @@ Query phrasing: `Dynamic Type typography token`, `Material Typography Fluent typ
127
127
 
128
128
  ## Platform-Specific Guidance
129
129
 
130
- When a case involves a platform guideline source, cite that platform's surface and route deeper convention comparison to [Platform Guides](../platform-guides/index.md); engine terms route to Game UI; motion terms to Motion.
130
+ When a case involves a platform guideline source, cite that platform's surface and route deeper convention comparison to [Platform Guides](../platform-guides/index.md); motion terms route to Motion.
131
131
 
132
132
  ## Unsupported Absolutes
133
133
 
@@ -54,7 +54,7 @@ This guide classifies what kind of thing a vocabulary source is before any of it
54
54
 
55
55
  ## Platform-Specific Guidance
56
56
 
57
- Platform guideline sources are recorded here only for terminology. Bounded comparison of their interaction conventions belongs to [Platform Guides](../platform-guides/index.md); engine vocabulary belongs to Game UI.
57
+ Platform guideline sources are recorded here only for terminology. Bounded comparison of their interaction conventions belongs to [Platform Guides](../platform-guides/index.md).
58
58
 
59
59
  ## Unsupported Absolutes
60
60
 
@@ -0,0 +1,50 @@
1
+ ---
2
+ type: Domain Policy
3
+ title: Brand Studies
4
+ description: Rules for unofficial reinterpretations of real brands in showcase works.
5
+ domain: expression
6
+ lifecycle: experimental
7
+ provenance_kind: local
8
+ ---
9
+
10
+ # Brand Studies
11
+
12
+ Primary role: brand-study policy.
13
+
14
+ ## Repository Boundary
15
+
16
+ A brand study reinterprets a real, named brand as an unofficial design exercise. It is allowed only in `showcase/`. It is not allowed in any governed domain page, Layout pattern, or reference profile. Platform Guides' prohibition on brand imitation still applies to Platform Guides.
17
+
18
+ ## Reusable Method
19
+
20
+ 1. Set `brand_study: true` and `subject: <brand name>` in the work's `brief.md`.
21
+ 2. Add `<meta name="robots" content="noindex, nofollow">` to `index.html`.
22
+ 3. Show the word "Unofficial" in visible page text, typically in the title and footer, e.g. "Unofficial brand study".
23
+ 4. Study the brand's register, then write original copy in that register. Do not paste taglines, product copy, or press text.
24
+ 5. Reuse existing photographs, videos, product renders, and other media from the reference or supplied/project assets; record their source in the brief. Do not replace them with generated pictures or CSS/SVG product stand-ins. Create assets only for intentionally graphical or vector work, following [Image Weight](techniques/image-weight.md). Keep the brand name as plain text rather than copying its logo as the study's identity.
25
+ 6. Run `node scripts/check-showcase.mjs --work <slug>`. The brief and page checks fail if steps 1-3 are missing.
26
+
27
+ ## Opinionated Guidance
28
+
29
+ A good study answers "what if this brand leaned harder into X?" rather than cloning the current site. Pick the X, write it in the brief's `signature` field, and let the page argue for it.
30
+
31
+ ## Platform-Specific Guidance
32
+
33
+ `noindex` keeps search engines from ranking the study for the brand's name. It does not stop people from sharing a public URL, so deploy studies to preview hosts, not to a domain that could be mistaken for the brand's.
34
+
35
+ ## Unsupported Absolutes
36
+
37
+ Following these steps reduces confusion and copying risk. It is not legal advice and does not create a license to any trademark.
38
+
39
+ ## Verification Contract
40
+
41
+ The showcase checker enforces the machine-checkable steps (subject, `noindex`, visible Unofficial text). A reviewer checks original copy, plain-text brand identity, recorded media sources, and whether newly created assets are intentionally graphical/vector rather than substitutes for photography or realistic renders.
42
+
43
+ ## Source, License, And Attribution
44
+
45
+ Locally authored policy. No upstream source.
46
+
47
+ ## IA Navigation
48
+
49
+ Parent: [Expression](index.md).
50
+ Next: [Showcase](../showcase/README.md).
@@ -0,0 +1,83 @@
1
+ ---
2
+ type: Domain Guide
3
+ title: Expression Direction Brief
4
+ description: Decide what a finished page should feel like, with concrete values, before building it.
5
+ domain: expression
6
+ lifecycle: experimental
7
+ provenance_kind: local
8
+ ---
9
+
10
+ # Expression Direction Brief
11
+
12
+ Primary role: art-direction handoff template.
13
+
14
+ ## Repository Boundary
15
+
16
+ This brief records one product page's direction. Its values belong to that page or to a named direction. They never become reusable Layout values, and they are not consumer-reference tokens.
17
+
18
+ ## Reusable Method
19
+
20
+ A strong one-shot page comes from committing to a few specific choices. Fill every field with an actual value; "modern" or "clean" is not a value.
21
+
22
+ ```yaml
23
+ subject: # what the page is for, in one sentence
24
+ memory: # the one image or moment a visitor should remember
25
+ reference: # a real site, film, print piece, or place, plus what to take from it
26
+ register: # the voice of the copy, e.g. "late-night radio host, warm and dry"
27
+ type:
28
+ display: # family, weight, tracking, line height, largest size
29
+ body: # family, weight, size, line height
30
+ label: # family, case, tracking
31
+ palette: # 3-6 hex values with roles: ground, text, accent, secondary accent
32
+ texture: # grain, noise, paper, halftone, or none, with strength
33
+ atmosphere: # gradient field, grain, or WebGL behind content; never in place of content
34
+ imagery: # existing asset per slot: source URL/path, crop, focal point, and role; name any missing asset
35
+ asset_creation: # none by default; only intentionally graphical/vector assets, never generated photos/video/realistic renders
36
+ response: # what answers the pointer (links, cards, tabs, media frames) and how fast; 100-320ms states, 400-500ms reveals
37
+ surface_detail: # edge-fade masks, rounded media clips, hairlines between panels
38
+ motion_density: # entrance sequence count, scroll scenes, ambient loops
39
+ length: # screens planned and the sequence each idea gets (setup, product, proof)
40
+ signature: # the one unusual move this page makes that a template would not
41
+ constraints: # performance budget, accessibility floor, brand rules
42
+ consumer_reference: not_applicable
43
+ consumer_reference_reason: A direction brief selects no consumer reference record.
44
+ ```
45
+
46
+ ### Choosing Values Fast
47
+
48
+ These defaults come from [Measured Expression Benchmarks](measured-benchmarks.md), which compared 49 live homepages with StyleGallery studies built from the older advice. The studies read as empty and loud; the originals read as full and calm.
49
+
50
+ - Select existing assets before writing the page: reference-site media, supplied files, then project assets. Reuse photographs, video, and product renders instead of making replacements. New asset creation is limited to intentional graphics/vectors: icons, diagrams, patterns, abstract graphics, and vector illustrations. SVG, canvas, WebGL, or an image generator is not a workaround for recreating a photographic scene.
51
+ - Put existing imagery, an intentional vector graphic, or a live product surface on every screen. Implementing a working UI is page behavior, not permission to fabricate photographic product imagery. If an asset is missing, find an existing one or name the missing slot rather than filling it with a crude drawing. See [Image Weight](techniques/image-weight.md).
52
+ - Size display type from the page's job, not bigger than feels safe: the largest text is 3.5-5.5 times the body (measured median 56px over 14px), tracking 0em on Korean and system faces and about -0.02em on Latin grotesks, line height 1.1-1.2. Only a campaign or editorial hero goes to 6-7 times. See [Display Type Calibration](techniques/display-type-calibration.md).
53
+ - Pair one display face with one body face, plus a mono or small-caps label face only if the page needs it. Two families is the measured median; three is the ceiling.
54
+ - Make many things answer the pointer: every link, button, card, tab, and media frame gets a 100-320ms state change on `opacity`, `color`, `transform`, or `background-color` (measured median: 76 responsive elements per page). Reserve 400-500ms for reveals.
55
+ - Finish surfaces: edge-fade masks on anything that scrolls or bleeds, rounded clips on media, 1px hairlines between panels instead of soft shadows. See [Masks, Clips, And Hairlines](techniques/surface-detail.md).
56
+ - Pace the page at 6-10 screens and give each idea a sequence (setup, product, proof) instead of one beat. Change the background band about every three screens, not every screen.
57
+ - Pick a ground that is not pure black or pure white (`#07070a`, `#f4efe6`). Use one hot accent and at most one cool counter-accent.
58
+ - Spend the big moments in a few places: one hero moment, one signature scroll scene, one closing moment. Everywhere else stays calm but never empty: quiet sections still carry imagery and respond to the pointer.
59
+
60
+ ## Opinionated Guidance
61
+
62
+ Write the `signature` field first. If you cannot name one move a template would not make, the page will read as a template no matter how polished it is.
63
+
64
+ ## Platform-Specific Guidance
65
+
66
+ Variable and web fonts may fail to load. Name a system fallback with similar width so layout does not jump, and check the page with fonts blocked.
67
+
68
+ ## Unsupported Absolutes
69
+
70
+ No palette, type pairing, or density is correct for every subject. A filled brief is a plan, not evidence that the page works.
71
+
72
+ ## Verification Contract
73
+
74
+ The brief is ready when every field has a concrete value, `imagery` names a slot for every screen, and `signature` names a specific move. The built page is verified by `node scripts/check-showcase.mjs --work <slug> --richness error`, which fails an empty screen, too few responsive elements, slow link transitions, and missing masks or hairlines, and by reviewing its screenshots against `memory` and `signature`.
75
+
76
+ ## Source, License, And Attribution
77
+
78
+ Locally authored template. No upstream source.
79
+
80
+ ## IA Navigation
81
+
82
+ Parent: [Expression](index.md).
83
+ Next: [Nocturne Editorial Direction](directions/nocturne-editorial.md).
@@ -0,0 +1,81 @@
1
+ ---
2
+ type: Domain Guide
3
+ title: Nocturne Editorial Direction
4
+ description: A dark, glowing, editorial direction with concrete type, color, texture, and motion-density values.
5
+ domain: expression
6
+ lifecycle: experimental
7
+ provenance_kind: local
8
+ ---
9
+
10
+ # Nocturne Editorial Direction
11
+
12
+ Primary role: named art direction with starting values.
13
+
14
+ ## Repository Boundary
15
+
16
+ These values are a starting point for product pages in `showcase/` or a consumer's own CSS. They are not tokens, defaults, or Layout inputs.
17
+
18
+ ## Reusable Method
19
+
20
+ Mood: a city at 3am seen through glass. Dark ground, warm glowing accents, oversized serif display, and quiet mono labels.
21
+
22
+ ```css
23
+ :root {
24
+ /* Ground and text */
25
+ --ink: #07070a;
26
+ --ink-2: #111118; /* raised surfaces */
27
+ --paper: #efe9df; /* primary text: warm, never pure white */
28
+ --paper-dim: rgb(239 233 223 / 0.62);
29
+ --line: rgb(239 233 223 / 0.14);
30
+ /* Accents: one hot, one cool, one highlight */
31
+ --ember: #ff5a36;
32
+ --violet: #7b5cff;
33
+ --haze: #9bd1ff;
34
+ /* Type */
35
+ --serif: "Instrument Serif", "Iowan Old Style", Georgia, serif;
36
+ --sans: "Inter Tight", "Helvetica Neue", Arial, sans-serif;
37
+ --mono: "JetBrains Mono", ui-monospace, Menlo, monospace;
38
+ /* Rhythm */
39
+ --gutter: clamp(1.25rem, 4vw, 3.5rem);
40
+ --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
41
+ }
42
+ ```
43
+
44
+ | Role | Value |
45
+ | --- | --- |
46
+ | Hero display | `--serif` 400, `clamp(2.8rem, 1.6rem + 4.4vw, 6.5rem)`, tracking -0.02em, line height 1.02, `text-wrap: balance`. Measured editorial and creative homepages top out at a median 88px; 11rem heroes read as a poster, not a page ([Display Type Calibration](../techniques/display-type-calibration.md)) |
47
+ | Section display | `--serif` 400, `clamp(2rem, 1.3rem + 2.4vw, 3.6rem)`, tracking -0.02em, line height 1.08 |
48
+ | Body | `--sans` 350, `clamp(1rem, 0.95rem + 0.25vw, 1.125rem)`, line height 1.55, dimmed to `--paper-dim` for secondary copy |
49
+ | Labels | `--mono` 0.75rem, uppercase, tracking 0.14em |
50
+ | Accent word | Italic serif with `linear-gradient(100deg, var(--ember), #ffb454 40%, var(--violet))` clipped to text, one word per headline |
51
+ | Surfaces | `--ink-2` with 1px `--line` border, radius 1.5rem, two corner radial gradients from the card's own accent pair |
52
+ | Buttons | Pill radius, primary is `--paper` on `--ink`, ghost is a `--line` border only |
53
+ | Texture | [Grain](../techniques/grain-and-texture.md) at 0.22 opacity, `mix-blend-mode: overlay` |
54
+ | Atmosphere | [Gradient aurora](../techniques/gradient-atmosphere.md) behind the hero, optional [WebGL field](../techniques/webgl-hero.md). Atmosphere sits behind content, never in place of it |
55
+ | Imagery | A picture, drawn scene, or live product surface on every screen, framed with a rounded clip and an edge-fade mask where it bleeds into the ground ([Image Weight](../techniques/image-weight.md), [Masks, Clips, And Hairlines](../techniques/surface-detail.md)) |
56
+ | Motion density | One entrance sequence, three to four scroll scenes, one ambient loop, and responsive states on every link, card, tab, and media frame at 150-300ms. Easing `expo.out`, entrances 0.6-0.9s, 0.06s word stagger |
57
+
58
+ ## Opinionated Guidance
59
+
60
+ Use the gradient only on one italic word per headline; used on whole sentences it turns into a gaming UI. Keep body copy dim and let imagery and display type share the contrast. A dark page with only type and an aurora reads empty after the first screen; give every screen something to look at.
61
+
62
+ ## Platform-Specific Guidance
63
+
64
+ `background-clip: text` still needs the `-webkit-` prefix in some engines; declare both. Large blurred gradients are expensive on low-end GPUs; keep them to three blobs and stop their animation under reduced motion.
65
+
66
+ ## Unsupported Absolutes
67
+
68
+ These values produced one legible reference page. They are not proven for long-form reading, data-dense UI, or light-mode contexts.
69
+
70
+ ## Verification Contract
71
+
72
+ A page using this direction passes `node scripts/check-showcase.mjs`. Check `--paper-dim` body text against the actual ground in its screenshots; over bright aurora areas it may need a darkening gradient layer, as the reference hero uses.
73
+
74
+ ## Source, License, And Attribution
75
+
76
+ Locally authored direction. Font families are Google Fonts under the SIL Open Font License; no upstream prose or code is reproduced.
77
+
78
+ ## IA Navigation
79
+
80
+ Parent: [Expression](../index.md).
81
+ Next: [Warm Print Direction](warm-print.md).
@@ -0,0 +1,73 @@
1
+ ---
2
+ type: Domain Guide
3
+ title: Warm Print Direction
4
+ description: A light, warm, print-inspired direction with concrete type, color, texture, and motion-density values.
5
+ domain: expression
6
+ lifecycle: experimental
7
+ provenance_kind: local
8
+ ---
9
+
10
+ # Warm Print Direction
11
+
12
+ Primary role: named art direction with starting values.
13
+
14
+ ## Repository Boundary
15
+
16
+ These values are a starting point for product pages in `showcase/` or a consumer's own CSS. They are not tokens, defaults, or Layout inputs.
17
+
18
+ ## Reusable Method
19
+
20
+ Mood: a well-made independent magazine. Off-white paper, heavy grotesk display, ink-black text, one saturated spot color, visible grid lines, halftone texture.
21
+
22
+ ```css
23
+ :root {
24
+ --paper: #f4efe6;
25
+ --paper-2: #ebe4d6; /* inset panels */
26
+ --ink: #141210;
27
+ --ink-dim: rgb(20 18 16 / 0.64);
28
+ --rule: rgb(20 18 16 / 0.18);
29
+ --spot: #1f4bff; /* one spot color, used sparingly */
30
+ --spot-2: #ff4a1c; /* optional second spot, never beside the first */
31
+ --grotesk: "Bricolage Grotesque", "Arial Narrow", Arial, sans-serif;
32
+ --text: "Newsreader", Georgia, serif;
33
+ --mono: "IBM Plex Mono", ui-monospace, monospace;
34
+ --gutter: clamp(1rem, 3vw, 2.5rem);
35
+ --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
36
+ }
37
+ ```
38
+
39
+ | Role | Value |
40
+ | --- | --- |
41
+ | Hero display | `--grotesk` 800, `clamp(2.8rem, 1.4rem + 5vw, 7rem)`, tracking -0.03em, line height 1.0, uppercase optional. Measured editorial and creative homepages top out at a median 88px ([Display Type Calibration](../techniques/display-type-calibration.md)) |
42
+ | Section display | `--grotesk` 700, `clamp(2rem, 1.2rem + 2.8vw, 3.8rem)`, tracking -0.025em |
43
+ | Body | `--text` 400, 1.125rem, line height 1.6, max 34rem measure |
44
+ | Labels | `--mono` 0.72rem, uppercase, tracking 0.1em, preceded by a `--rule` hairline |
45
+ | Grid | Visible 1px `--rule` column lines on a 12-column grid at 64rem and wider |
46
+ | Surfaces | Flat `--paper-2`, no shadows, no radius or at most 0.25rem |
47
+ | Images | One picture or drawn plate per spread and at least one per screen ([Image Weight](../techniques/image-weight.md)), duotone via `mix-blend-mode: multiply` over `--spot`, or grayscale plus [halftone](../techniques/grain-and-texture.md#halftone) |
48
+ | Motion density | Few entrances, crisp: 0.6-0.8s, `--ease-out`, line-by-line reveals, one horizontal marquee of headlines, and underline or color responses on every link and card at 150-250ms |
49
+
50
+ ## Opinionated Guidance
51
+
52
+ Light editorial pages die from timidity, but the cure is pictures and a strict grid, not size. Give every spread an image, let one headline break the grid, and keep everything else strictly on it.
53
+
54
+ ## Platform-Specific Guidance
55
+
56
+ Multiply blending needs an opaque ancestor background to blend against; set `--paper` on the section, not only on `body`, or the effect disappears inside isolated stacking contexts.
57
+
58
+ ## Unsupported Absolutes
59
+
60
+ No reference build exists yet for this direction; its values are proposals until a showcase work uses them and passes review.
61
+
62
+ ## Verification Contract
63
+
64
+ A page using this direction passes `node scripts/check-showcase.mjs`. Check `--ink-dim` text contrast on `--paper-2` panels and confirm the grid lines disappear below 64rem.
65
+
66
+ ## Source, License, And Attribution
67
+
68
+ Locally authored direction. Font families are Google Fonts under the SIL Open Font License; no upstream prose or code is reproduced.
69
+
70
+ ## IA Navigation
71
+
72
+ Parent: [Expression](../index.md).
73
+ Next: [Gradient Atmosphere](../techniques/gradient-atmosphere.md).
@@ -0,0 +1,52 @@
1
+ # Expression
2
+
3
+ The Expression domain owns art direction for finished product pages: type pairing, palette, gradient and texture, WebGL atmosphere, copy register, and the density of expressive moments.
4
+
5
+ ## Scope Boundary
6
+
7
+ In scope: art-direction briefs, named directions with concrete starting values, visual technique recipes with copy-ready code, and the policy for unofficial brand studies.
8
+
9
+ Out of scope: layout mechanics and scroll ownership (Layout), timing, interruption, and motion review (Motion), component state contracts (Design Engineering), shared token schemas (consumer reference), and any decorative value inside reusable Layout pattern CSS.
10
+
11
+ ## Start Here
12
+
13
+ | Task | Route |
14
+ | --- | --- |
15
+ | Decide what a page should feel like before building it. | [Expression Direction Brief](direction-brief.md) |
16
+ | Start from a complete dark editorial system. | [Nocturne Editorial Direction](directions/nocturne-editorial.md) |
17
+ | Start from a complete light, warm, print-like system. | [Warm Print Direction](directions/warm-print.md) |
18
+ | Add glowing, drifting color behind content. | [Gradient Atmosphere](techniques/gradient-atmosphere.md) |
19
+ | Add film grain, noise, or paper texture. | [Grain And Texture](techniques/grain-and-texture.md) |
20
+ | Put a live WebGL field behind a hero. | [WebGL Hero Field](techniques/webgl-hero.md) |
21
+ | Style a money product: one accent, big numerals, a working calculator. | [Fintech Clarity Direction](directions/fintech-clarity.md) |
22
+ | Present physical products or vehicles one stage at a time. | [Hardware Catalogue Direction](directions/hardware-catalogue.md) |
23
+ | Style a software tool in dark or light, with mono labels and a working mock. | [Developer Tool Direction](directions/developer-tool.md) |
24
+ | Style a Korean service or commerce page with Pretendard and dense grids. | [Korean Service Direction](directions/korean-service.md) |
25
+ | Make an intentionally vector product diagram, not a substitute for photography. | [Drawn Products](techniques/drawn-products.md) |
26
+ | Add a small working product demo that answers honestly. | [Live Product Demos](techniques/live-product-demos.md) |
27
+ | Put a pointer-reactive 3D object field on a page without WebGL. | [Canvas 3D Without WebGL](techniques/canvas-3d.md) |
28
+ | Check a page against measured values from 49 live homepages, and see why the studies read as less expressive. | [Measured Expression Benchmarks](measured-benchmarks.md) |
29
+ | Reuse existing assets, frame imagery, and restrict new assets to graphics/vectors. | [Image Weight](techniques/image-weight.md) |
30
+ | Calibrate display size, weight, tracking, and leading so type reads confident, not loud. | [Display Type Calibration](techniques/display-type-calibration.md) |
31
+ | Add the finishing detail of edge-fade masks, rounded clips, wipes, blur-in, and hairlines. | [Masks, Clips, And Hairlines](techniques/surface-detail.md) |
32
+ | Find a finished brand study to learn from, and the lessons 54 studies taught. | [Study Atlas](study-atlas.md) |
33
+ | Reinterpret a real brand as an unofficial study. | [Brand Studies](brand-studies.md) |
34
+
35
+ Build the result in [Showcase](../showcase/README.md) and add motion from [Motion techniques](../motion/techniques/scroll-choreography.md).
36
+
37
+ ## How Expression Relates To Other Domains
38
+
39
+ - Layout is the floor. An Expression direction never changes a Layout pattern; a page composes patterns and adds expression in its own product CSS.
40
+ - Motion owns how things move. Expression names the motion density a direction wants, and Motion techniques implement it.
41
+ - Design Engineering reference profiles are governed token fixtures. Expression directions are starting points for product work and are not validated tokens.
42
+
43
+ These pages are experimental. Their values are proposals chosen for a mood, not measured outcomes. Review a direction when a showcase work built on it fails its outcome checks or reads poorly in its screenshots.
44
+
45
+ ## Domain Contract
46
+
47
+ See [StyleGallery Domains](../DOMAINS.md) for lifecycle, provenance, page membership, and staleness rules.
48
+
49
+ ## IA Navigation
50
+
51
+ Parent: [StyleGallery](../index.md).
52
+ Next: [Expression Direction Brief](direction-brief.md).