stylegallery 0.1.6 → 0.1.8

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 (97) hide show
  1. package/AGENTS.md +13 -1
  2. package/DOMAINS.md +10 -6
  3. package/GOVERNANCE.md +14 -12
  4. package/LICENSE +28 -0
  5. package/LICENSE-DOCS +42 -0
  6. package/NOTICE +38 -0
  7. package/README.md +47 -15
  8. package/consumer-reference/agent-native/README.md +7 -7
  9. package/consumer-reference/agent-native/v2/admission-policy.json +196 -31
  10. package/consumer-reference/agent-native/v2/material-registry.json +1 -1
  11. package/consumer-reference/agent-native/v2/schema/admission-policy.schema.json +3 -3
  12. package/consumer-reference/agent-native/v2/schema/material-record.schema.json +1 -1
  13. package/design-engineering/component-contract.md +19 -3
  14. package/design-engineering/decision-tree.md +1 -0
  15. package/design-engineering/index.md +48 -0
  16. package/design-engineering/loading-and-feedback.md +91 -0
  17. package/design-engineering/native-interaction-contracts.md +94 -0
  18. package/design-engineering/state-management/decision-tree.md +60 -0
  19. package/design-engineering/state-management/index.md +61 -0
  20. package/design-engineering/state-management/patterns/derived-state.md +85 -0
  21. package/design-engineering/state-management/patterns/draft-and-baseline.md +86 -0
  22. package/design-engineering/state-management/patterns/id-selection.md +85 -0
  23. package/design-engineering/state-management/patterns/identity-reset.md +89 -0
  24. package/design-engineering/state-management/patterns/latest-request-wins.md +94 -0
  25. package/design-engineering/state-management/patterns/optimistic-overlay.md +98 -0
  26. package/design-engineering/state-management/patterns/single-flight.md +92 -0
  27. package/design-engineering/state-management/patterns/single-owner.md +89 -0
  28. package/design-engineering/state-management/patterns/submitted-snapshot.md +107 -0
  29. package/design-engineering/state-management/patterns/unsaved-navigation.md +100 -0
  30. package/design-engineering/state-management/patterns/url-state.md +96 -0
  31. package/design-engineering/state-management/patterns/versioned-restore.md +95 -0
  32. package/design-engineering/state-management/recipes/delete-undo.md +65 -0
  33. package/design-engineering/state-management/recipes/index.md +64 -0
  34. package/design-engineering/state-management/recipes/multi-step-form.md +65 -0
  35. package/design-engineering/state-management/recipes/search-detail.md +65 -0
  36. package/design-engineering/state-management/recipes/settings-save.md +64 -0
  37. package/design-engineering/state-management/state-brief.md +83 -0
  38. package/design-engineering/state-management/verification.md +65 -0
  39. package/design-engineering/text-input-and-internationalization.md +91 -0
  40. package/design-engineering/worked-examples.md +2 -0
  41. package/design-terminology/conflict-cases.md +51 -8
  42. package/design-terminology/index.md +6 -0
  43. package/design-terminology/interaction-semantics.md +87 -0
  44. package/design-terminology/source-kinds.md +1 -1
  45. package/design-terminology/source-vocabularies.md +17 -1
  46. package/design-terminology/token-semantics.md +90 -0
  47. package/design-terminology/typography-semantics.md +86 -0
  48. package/expression/brand-studies.md +50 -0
  49. package/expression/direction-brief.md +71 -0
  50. package/expression/directions/nocturne-editorial.md +80 -0
  51. package/expression/directions/warm-print.md +73 -0
  52. package/expression/index.md +40 -0
  53. package/expression/techniques/gradient-atmosphere.md +107 -0
  54. package/expression/techniques/grain-and-texture.md +83 -0
  55. package/expression/techniques/webgl-hero.md +123 -0
  56. package/guides/vocabulary.md +1 -1
  57. package/index.md +3 -3
  58. package/log.md +64 -0
  59. package/motion/accessible-motion.md +90 -0
  60. package/motion/index.md +9 -0
  61. package/motion/interaction-recipes.md +8 -2
  62. package/motion/interruption-and-retargeting.md +90 -0
  63. package/motion/observed-choreography.md +73 -0
  64. package/motion/rendering-and-performance.md +89 -0
  65. package/motion/techniques/kinetic-type.md +145 -0
  66. package/motion/techniques/scroll-choreography.md +154 -0
  67. package/package.json +76 -21
  68. package/platform-guides/adaptive-navigation.md +85 -0
  69. package/platform-guides/compatibility-matrix.md +1 -1
  70. package/platform-guides/index.md +6 -0
  71. package/platform-guides/input-and-focus.md +91 -0
  72. package/platform-guides/preferences-and-accessibility.md +90 -0
  73. package/quality/claim-records/stylegallery-multidomain-scope.md +2 -2
  74. package/quality/evidence/executable-evidence.md +1 -1
  75. package/quality/index.md +1 -2
  76. package/scripts/agent-native/v2/material-admission.mjs +1 -1
  77. package/scripts/agent-native/v2/material-identity.mjs +2 -2
  78. package/scripts/compiler/README.md +112 -0
  79. package/scripts/compiler/cli.mjs +51 -0
  80. package/scripts/compiler/mcp.mjs +53 -0
  81. package/scripts/compiler/operations.mjs +70 -0
  82. package/scripts/compiler/runtime.mjs +156 -0
  83. package/scripts/sg-entry.mjs +20 -0
  84. package/scripts/sg-server.mjs +20 -0
  85. package/showcase/README.md +113 -0
  86. package/game-ui/classification.md +0 -82
  87. package/game-ui/decision-tree.md +0 -81
  88. package/game-ui/index.md +0 -45
  89. package/game-ui/reference-record.md +0 -62
  90. package/game-ui/screen-hierarchy.md +0 -107
  91. package/game-ui/screen-recipes.md +0 -101
  92. package/game-ui/unity/architecture.md +0 -166
  93. package/game-ui/unity/cli-loop.md +0 -84
  94. package/game-ui/unity/org-wiki.md +0 -146
  95. package/game-ui/unity/repository-map.md +0 -102
  96. package/game-ui/unity/ui-systems.md +0 -85
  97. package/game-ui/verification-workflow.md +0 -100
@@ -0,0 +1,90 @@
1
+ ---
2
+ type: Domain Guide
3
+ title: Token Semantics And Resolution
4
+ description: Compare semantic roles, references, groups, resolver contexts, and runtime values without treating their names as interchangeable.
5
+ domain: design-terminology
6
+ lifecycle: experimental
7
+ provenance_kind: local
8
+ reviewed_on: 2026-09-21
9
+ ---
10
+
11
+ # Token Semantics And Resolution
12
+
13
+ Primary role: source-specific token terminology comparison.
14
+
15
+ ## Repository Boundary
16
+
17
+ This page compares vocabulary and the decisions obscured by ambiguous token names. It imports no token values, themes, or compiler behavior. [Consumer Reference](../consumer-reference/index.md) owns interchange/evidence infrastructure; consumer profiles own their values and implementation. Layout's token boundary remains unchanged.
18
+
19
+ Canonical term and relation records live in [Cross-System Term Cases](conflict-cases.md). This guide explains their use; it does not establish a second term registry.
20
+
21
+ ## Reusable Method
22
+
23
+ When a handoff says “alias,” “semantic,” or “theme,” identify whether it refers to design intent, a reference edge, organization, context selection, or a runtime representation. Record the named source before choosing an equivalence relation. Inspect the exported structure separately from the visual result.
24
+
25
+ ### Sources And Distinctions
26
+
27
+ | Source | Source-backed distinction | Question for a handoff |
28
+ | --- | --- | --- |
29
+ | [Fluent 2 tokens](https://fluent2.microsoft.design/design-tokens) | Global tokens hold context-independent values; alias tokens add semantic meaning. | Does “alias” name a semantic layer in this system? |
30
+ | [DTCG Format 2025.10](https://www.designtokens.org/tr/2025.10/format/) | A token value may reference another token; groups organize records. | Does “alias” name a reference relationship in an interchange document? |
31
+ | [Carbon color overview](https://carbondesignsystem.com/elements/color/overview/) | Color tokens preserve roles across themes while assigned values can change. | Is the role stable across every theme being compared? |
32
+ | [Carbon color usage](https://carbondesignsystem.com/elements/color/usage/) | Contextual color tokens depend on the layer where they are used. | Is the surrounding layer part of value resolution? |
33
+ | [DTCG Resolver 2025.10](https://www.designtokens.org/tr/2025.10/resolver/) | Modifiers conditionally select sources through contexts; ordered resolution determines the resulting token set. | Where are the selected contexts and conflict order recorded? |
34
+ | [CSS Custom Properties Level 1](https://www.w3.org/TR/css-variables-1/) | Custom properties participate in CSS runtime value substitution and the cascade. | Which original semantics and metadata remain after translation? |
35
+
36
+ All six source surfaces were inspected on 2026-09-21. DTCG 2025.10 modules are Community Group reports, not W3C Recommendations. The Fluent and Carbon pages are dated system documentation, not guarantees about every package release.
37
+
38
+ ### Alias Is Not One Decision
39
+
40
+ The recorded `fluent.alias-token` / `dtcg.alias` relation is `partial_overlap`. A semantic token may use a reference, but a reference edge does not itself prove a semantic role. A reference between two raw values illustrates the non-semantic region; a consumer's exported semantic value may be flattened and no longer retain its reference edge.
41
+
42
+ The `fluent.alias-token` / `carbon.color-token` relation is also scoped overlap. Both can express role-oriented color decisions, but their vocabularies and non-color coverage differ. This is not permission to rename one system's tokens after another's or assert that their role sets are identical.
43
+
44
+ ### Grouping Is Not Context Selection
45
+
46
+ The recorded `dtcg.resolver-modifier` / `dtcg.group` relation is `not_comparable` for organization-versus-resolution. Ask where a context is selected, where sources are ordered, and where a group is merely a path. A directory or group named `dark` does not independently explain how a consumer chooses dark appearance.
47
+
48
+ This distinction also prevents confusing a token system's theme with a user's complete preference state. A selected theme does not determine text scaling, reduced motion, or every platform accessibility preference; those adaptation decisions belong to [Platform Guides](../platform-guides/preferences-and-accessibility.md).
49
+
50
+ ### Worked Handoff: Same Color, Different Meaning
51
+
52
+ Two consumer roles happen to resolve to the same displayed color in one theme. Preserve the roles separately when their purposes differ. Equality of an output value is evidence of that output only; it does not justify merging source concepts.
53
+
54
+ | Handoff field | Proposed content | Why it matters |
55
+ | --- | --- | --- |
56
+ | Source term | Source-qualified identifier and locator | Keeps a role name attached to its own vocabulary. |
57
+ | Comparison scope | The particular translation being considered | Prevents a local mapping from becoming universal equivalence. |
58
+ | Context | Theme, layer, or resolver inputs actually selected | Makes value resolution reproducible. |
59
+ | Output representation | Target format and adapter version | Separates serialization from semantic intent. |
60
+ | Retained/lost information | Role, reference edges, metadata, and unsupported structures | Exposes lossy translation. |
61
+ | Verification | Structural check plus rendered state evidence if appearance is claimed | Avoids treating a valid file as a usable component. |
62
+
63
+ The fields are a local analysis aid. They do not expand this repository's closed token adapter or admit arbitrary DTCG features into existing schemas.
64
+
65
+ ## Opinionated Guidance
66
+
67
+ Prefer source-qualified names in cross-system discussions. Before merging tokens, compare responsibilities across contexts, not just matching values in a screenshot. Keep compiler inputs explicit enough that another consumer can explain how an output was obtained.
68
+
69
+ ## Platform-Specific Guidance
70
+
71
+ An exported custom property, native resource, or tool variable can consume translated design information without preserving the full source contract. The concrete adapter owns unit conversion, missing features, and runtime context. Comparative vocabulary cannot certify that adapter.
72
+
73
+ ## Unsupported Absolutes
74
+
75
+ A reference is not proof of semantic intent. A group is not automatically a theme selector. The same value is not the same role. A valid DTCG document is not a declaration that StyleGallery supports every feature in that document.
76
+
77
+ ## Verification Contract
78
+
79
+ Recheck both source locators for each relied-on relation and record the scope and direction. Probe a matching value with different roles, a changed theme, a contextual layer change, and a flattened export. Inspect the actual adapter if making a round-trip or runtime claim.
80
+
81
+ These are proposed checks. Only source readings and Markdown record consistency are claimed here; no token pipeline or product rendering was executed. Re-review when a vocabulary, module version, or adapter contract changes.
82
+
83
+ ## Source, License, And Attribution
84
+
85
+ Locally authored synthesis; no source token values or upstream expression are copied. Terminology reliance: `fluent.alias-token`, `fluent.global-token`, `carbon.color-token`, `dtcg.alias`, `dtcg.token`, `dtcg.group`, `dtcg.resolver-modifier`, and `css.custom-property`. Relations used: `partial_overlap`, `implementation_representation`, and `not_comparable`. Named sources were rechecked 2026-09-21; local relations remain author judgments, not independent semantic approval. `consumer_reference: not_applicable` because no consumer profile or adapter record is selected.
86
+
87
+ ## IA Navigation
88
+
89
+ Parent: [Design Terminology](index.md).
90
+ Next: [Typography Semantics](typography-semantics.md).
@@ -0,0 +1,86 @@
1
+ ---
2
+ type: Domain Guide
3
+ title: Typography Roles, Styles, And Representations
4
+ description: Compare named type roles, native scaling behavior, composite token records, and CSS output without inventing universal size mappings.
5
+ domain: design-terminology
6
+ lifecycle: experimental
7
+ provenance_kind: local
8
+ reviewed_on: 2026-09-21
9
+ ---
10
+
11
+ # Typography Roles, Styles, And Representations
12
+
13
+ Primary role: typography vocabulary comparison.
14
+
15
+ ## Repository Boundary
16
+
17
+ This guide compares source-specific meanings. It defines no StyleGallery type scale, font choice, size, density, or visual token. Product typography belongs to its consumer; Layout owns spatial behavior. [Term Cases](conflict-cases.md) is the canonical record for the term identifiers and relations used here.
18
+
19
+ ## Reusable Method
20
+
21
+ Identify whether “style” means a semantic role, a bundle of values, a collection of role slots, a native scaling behavior, or a runtime declaration. Compare sources at that level. Then record what information is lost when the result is serialized or rendered elsewhere.
22
+
23
+ ### Source Findings
24
+
25
+ | Source | Bounded meaning | Boundary to retain |
26
+ | --- | --- | --- |
27
+ | [Apple HIG typography](https://developer.apple.com/design/human-interface-guidelines/typography) | Text styles combine typographic attributes into a hierarchy and participate in system text-size adaptation. | A single exported size does not encode the complete native scaling behavior. |
28
+ | [Fluent 2 typography](https://fluent2.microsoft.design/typography) | The type ramp supplies named styles and roles for a selected target platform. | A role label does not specify one universal font or numeric size across platforms. |
29
+ | [Material 3 in Compose](https://developer.android.com/develop/ui/compose/designsystems/material3#typography) | The `Typography` class models the Material 3 type scale using named style slots. | This is the system's Compose implementation surface, not an interchange specification. |
30
+ | [DTCG typography type](https://www.designtokens.org/tr/2025.10/format/#typography) | The composite record includes family, size, weight, letter spacing, and line height. | The record does not itself implement platform text scaling. |
31
+ | [CSS font shorthand](https://www.w3.org/TR/css-fonts-4/#font-prop) | `font` is a runtime shorthand over defined font properties and line height. | It does not encode every typographic property or the original role metadata. |
32
+
33
+ Read on 2026-09-21. Apple content was inspected through the official documentation JSON. Material and Fluent references are dated product documentation. DTCG Format 2025.10 is a Community Group report; CSS Fonts Level 4 is a standards-track publication. Actual font availability and rendering require target evidence.
34
+
35
+ ### Comparing A Style With A Record
36
+
37
+ `apple.text-style` and `dtcg.typography` have `partial_overlap` for exchanging typographic attributes. Some attributes can be represented in both. Apple's style is also connected to native text-size behavior, while an interchange record can describe styles outside Apple's system. An exporter must explain the scope of a match.
38
+
39
+ `css.font` → `dtcg.typography` is an `implementation_representation` relation scoped to partial typography output. A consumer must emit additional properties such as letter spacing separately when needed and retain provenance outside the shorthand. This relation does not promise a reversible conversion.
40
+
41
+ ### Comparing Role Collections
42
+
43
+ `material3.typography` and `fluent.type-ramp` have `partial_overlap` for named typography roles. Both help organize hierarchy, but the role inventories, defaults, and implementation surfaces differ. Matching two names containing “body” does not prove equivalent intended use or visual results.
44
+
45
+ A collection of styles and one style are different abstraction levels. Before declaring `broader_than`, demonstrate proper set containment with comparable instances; a class that contains fields is not automatically a broader semantic concept than those fields.
46
+
47
+ ### Worked Handoff: Dense Review Surface
48
+
49
+ A consumer wants more records visible while retaining readable annotations and controls. Separate the density decision from typography translation. Density might change spacing, optional detail, or command presentation; it need not mean scaling every font down.
50
+
51
+ | Decision | Evidence to request | Translation failure |
52
+ | --- | --- | --- |
53
+ | Role mapping | Task purpose and named source roles | Similar labels map headings to ordinary labels. |
54
+ | Value representation | Output properties and units | A composite style loses a required property. |
55
+ | Scaling | Target user setting and the resulting style behavior | A static export ignores larger-text settings. |
56
+ | Font fallback | Actual fonts and representative scripts | A role looks acceptable only with a locally installed font. |
57
+ | Reading hierarchy | Long and localized content on the target surface | Compact labels obscure the main task. |
58
+
59
+ This is a proposed consumer investigation, not evidence that a particular type scale improves reading speed. For product adaptation, use [Preferences And Accessibility](../platform-guides/preferences-and-accessibility.md); for editing behavior, use [Text Input And Internationalization](../design-engineering/text-input-and-internationalization.md).
60
+
61
+ ## Opinionated Guidance
62
+
63
+ Preserve semantic roles even when two styles currently share values. Judge a translation by the declared task, retained attributes, and target scaling behavior. Treat a visual match at one size as a narrow observation.
64
+
65
+ ## Platform-Specific Guidance
66
+
67
+ Points, CSS pixels, and scale-aware native units must be interpreted by the selected runtime. Native text-style names do not become CSS breakpoints or shared Layout tokens. Font fallback and script shaping require actual rendering; a vocabulary comparison cannot establish them.
68
+
69
+ ## Unsupported Absolutes
70
+
71
+ A type ramp is not a universal accessibility standard. A typography token is not a complete native text-style behavior. CSS `font` is not a lossless export of all typography information. More visible rows do not prove higher task efficiency.
72
+
73
+ ## Verification Contract
74
+
75
+ Record source roles, relation scope, output representation, scaling inputs, and any omitted information. Probe default and enlarged text, missing fonts, long labels, multiple scripts, and the actual target's line metrics. Keep file validation separate from visual and user-task evidence.
76
+
77
+ These probes are unexecuted. Source meaning was reviewed; runtime rendering and reading performance were not measured. Re-review when role definitions, format versions, platform scaling, or adapter behavior changes.
78
+
79
+ ## Source, License, And Attribution
80
+
81
+ Locally authored synthesis without imported type values or source examples. Terminology reliance: `apple.text-style`, `fluent.type-ramp`, `material3.typography`, `dtcg.typography`, and `css.font`; relation types: `partial_overlap` and `implementation_representation`. Named sources were rechecked 2026-09-21; this is author review, not independent semantic approval. `consumer_reference: not_applicable` because no consumer typography record is selected.
82
+
83
+ ## IA Navigation
84
+
85
+ Parent: [Design Terminology](index.md).
86
+ Next: [Token Semantics And Resolution](token-semantics.md).
@@ -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. Do not use the brand's logo files, icon sets, trademarked artwork, or product photography. Draw an original wordmark in a web font, or use the plain brand name as text.
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 the rest from the source and screenshots: no copied logos, artwork, or verbatim copy.
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,71 @@
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, WebGL, photography, illustration, or none
34
+ motion_density: # entrance sequence count, scroll scenes, ambient loops
35
+ signature: # the one unusual move this page makes that a template would not
36
+ constraints: # performance budget, accessibility floor, brand rules
37
+ consumer_reference: not_applicable
38
+ consumer_reference_reason: A direction brief selects no consumer reference record.
39
+ ```
40
+
41
+ ### Choosing Values Fast
42
+
43
+ - Pair one expressive display face with one quiet body face and one mono or small-caps label face. Three families is the ceiling.
44
+ - Set display type larger and tighter than feels safe: `clamp()` from about 3rem at 320px up to 9-13rem at 1440px, tracking around -0.03em, line height 0.85-0.95.
45
+ - Pick a ground that is not pure black or pure white (`#07070a`, `#f4efe6`). Use one hot accent and at most one cool counter-accent.
46
+ - Spend expression in a few places: one hero moment, one signature scroll scene, one closing moment. Leave the rest quiet so those land.
47
+
48
+ ## Opinionated Guidance
49
+
50
+ 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.
51
+
52
+ ## Platform-Specific Guidance
53
+
54
+ 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.
55
+
56
+ ## Unsupported Absolutes
57
+
58
+ No palette, type pairing, or density is correct for every subject. A filled brief is a plan, not evidence that the page works.
59
+
60
+ ## Verification Contract
61
+
62
+ The brief is ready when every field has a concrete value and `signature` names a specific move. The built page is verified by `node scripts/check-showcase.mjs --work <slug>` and by reviewing its screenshots against `memory` and `signature`.
63
+
64
+ ## Source, License, And Attribution
65
+
66
+ Locally authored template. No upstream source.
67
+
68
+ ## IA Navigation
69
+
70
+ Parent: [Expression](index.md).
71
+ Next: [Nocturne Editorial Direction](directions/nocturne-editorial.md).
@@ -0,0 +1,80 @@
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(3.1rem, 11.5vw, 11rem)`, tracking -0.035em, line height 0.9, `text-wrap: balance` |
47
+ | Section display | `--serif` 400, `clamp(2.6rem, 7vw, 7rem)`, tracking -0.03em, line height 0.95 |
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) |
55
+ | Motion density | One entrance sequence, three to four scroll scenes, one ambient loop. Easing `expo.out`, entrances 1.1-1.3s, 0.06s word stagger |
56
+
57
+ ## Opinionated Guidance
58
+
59
+ 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 display type carry the contrast.
60
+
61
+ ## Platform-Specific Guidance
62
+
63
+ `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.
64
+
65
+ ## Unsupported Absolutes
66
+
67
+ These values produced one legible reference page. They are not proven for long-form reading, data-dense UI, or light-mode contexts.
68
+
69
+ ## Verification Contract
70
+
71
+ 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.
72
+
73
+ ## Source, License, And Attribution
74
+
75
+ Locally authored direction. Font families are Google Fonts under the SIL Open Font License; no upstream prose or code is reproduced.
76
+
77
+ ## IA Navigation
78
+
79
+ Parent: [Expression](../index.md).
80
+ 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(3rem, 12vw, 12.5rem)`, tracking -0.05em, line height 0.85, uppercase optional |
42
+ | Section display | `--grotesk` 700, `clamp(2.2rem, 6vw, 6rem)`, tracking -0.04em |
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 | 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 |
49
+
50
+ ## Opinionated Guidance
51
+
52
+ Light editorial pages die from timidity. Make the display type uncomfortably big, 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,40 @@
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
+ | Reinterpret a real brand as an unofficial study. | [Brand Studies](brand-studies.md) |
22
+
23
+ Build the result in [Showcase](../showcase/README.md) and add motion from [Motion techniques](../motion/techniques/scroll-choreography.md).
24
+
25
+ ## How Expression Relates To Other Domains
26
+
27
+ - Layout is the floor. An Expression direction never changes a Layout pattern; a page composes patterns and adds expression in its own product CSS.
28
+ - Motion owns how things move. Expression names the motion density a direction wants, and Motion techniques implement it.
29
+ - Design Engineering reference profiles are governed token fixtures. Expression directions are starting points for product work and are not validated tokens.
30
+
31
+ 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.
32
+
33
+ ## Domain Contract
34
+
35
+ See [StyleGallery Domains](../DOMAINS.md) for lifecycle, provenance, page membership, and staleness rules.
36
+
37
+ ## IA Navigation
38
+
39
+ Parent: [StyleGallery](../index.md).
40
+ Next: [Expression Direction Brief](direction-brief.md).
@@ -0,0 +1,107 @@
1
+ ---
2
+ type: Domain Recipe
3
+ title: Gradient Atmosphere
4
+ description: Copy-ready blurred gradient fields, card glows, and gradient text for expressive product pages.
5
+ domain: expression
6
+ lifecycle: experimental
7
+ provenance_kind: local
8
+ ---
9
+
10
+ # Gradient Atmosphere
11
+
12
+ Primary role: visual technique recipe.
13
+
14
+ ## Repository Boundary
15
+
16
+ Product-layer CSS for `showcase/` works and consumer pages. Never add these declarations to reusable Layout pattern CSS.
17
+
18
+ ## Reusable Method
19
+
20
+ ### Aurora Field
21
+
22
+ Three large radial gradients, blurred together and slowly drifting behind a section.
23
+
24
+ ```html
25
+ <section class="hero">
26
+ <div class="aurora" aria-hidden="true"><span></span><span></span><span></span></div>
27
+ <!-- content -->
28
+ </section>
29
+ ```
30
+
31
+ ```css
32
+ .hero { isolation: isolate; overflow: clip; position: relative; }
33
+ .aurora { filter: blur(70px) saturate(140%); inset: 0; opacity: 0.55; position: absolute; z-index: -2; }
34
+ .aurora span { animation: drift 18s ease-in-out infinite alternate; border-radius: 50%; position: absolute; }
35
+ .aurora span:nth-child(1) { background: radial-gradient(circle, #ff5a36, transparent 65%); block-size: 60vmax; inline-size: 60vmax; inset-block-start: -20vmax; inset-inline-end: -15vmax; }
36
+ .aurora span:nth-child(2) { animation-duration: 24s; background: radial-gradient(circle, #7b5cff, transparent 65%); block-size: 55vmax; inline-size: 55vmax; inset-block-end: -25vmax; inset-inline-start: -10vmax; }
37
+ .aurora span:nth-child(3) { animation-duration: 30s; background: radial-gradient(circle, #1f6fff, transparent 60%); block-size: 35vmax; inline-size: 35vmax; inset-block-start: 30%; inset-inline-start: 40%; }
38
+ @keyframes drift { to { transform: translate3d(-6vmax, 4vmax, 0) scale(1.15); } }
39
+ @media (prefers-reduced-motion: reduce) { .aurora span { animation: none; } }
40
+ ```
41
+
42
+ `overflow: clip` on the section keeps the oversized blobs from widening the document; without it the page scrolls sideways at 320px.
43
+
44
+ ### Legibility Scrim
45
+
46
+ When copy sits over the field, add a gradient between the atmosphere and the copy instead of dimming the atmosphere everywhere.
47
+
48
+ ```css
49
+ .hero::after {
50
+ background: linear-gradient(to top, rgb(7 7 10 / 0.7), transparent 55%), linear-gradient(to right, rgb(7 7 10 / 0.55), transparent 60%);
51
+ content: ""; inset: 0; pointer-events: none; position: absolute; z-index: -1;
52
+ }
53
+ ```
54
+
55
+ ### Card Glow
56
+
57
+ Two corner radial gradients per card, colored by custom properties set on the card, so each card gets its own light without new classes.
58
+
59
+ ```css
60
+ .card {
61
+ background:
62
+ radial-gradient(120% 90% at 100% 0%, color-mix(in oklab, var(--hue-a) 55%, transparent), transparent 60%),
63
+ radial-gradient(90% 80% at 0% 100%, color-mix(in oklab, var(--hue-b) 45%, transparent), transparent 60%),
64
+ #111118;
65
+ }
66
+ ```
67
+
68
+ ```html
69
+ <li class="card" style="--hue-a:#ff5a36; --hue-b:#7b5cff">...</li>
70
+ ```
71
+
72
+ ### Gradient Text
73
+
74
+ ```css
75
+ .accent {
76
+ background: linear-gradient(100deg, #ff5a36, #ffb454 40%, #7b5cff);
77
+ -webkit-background-clip: text;
78
+ background-clip: text;
79
+ color: transparent;
80
+ padding-inline-end: 0.06em; /* keeps italic overhang from being clipped */
81
+ }
82
+ ```
83
+
84
+ ## Opinionated Guidance
85
+
86
+ One atmosphere per viewport. An aurora behind the hero plus glowing cards plus gradient text in the same view reads as noise; stagger them down the page.
87
+
88
+ ## Platform-Specific Guidance
89
+
90
+ `filter: blur()` on large layers costs GPU memory. Blur the container once, not each blob, and keep blob sizes in `vmax` so the effect scales without re-rasterizing at many sizes. `color-mix()` needs a current engine; provide a plain `rgb()` fallback if you target older browsers.
91
+
92
+ ## Unsupported Absolutes
93
+
94
+ Blur radius, opacity, and drift duration here were tuned for one dark page. Light grounds need lower opacity and usually no `saturate()`.
95
+
96
+ ## Verification Contract
97
+
98
+ In the showcase check, the page has no horizontal overflow at 320px, and under reduced motion no infinite drift animation is running. Review the screenshots for text contrast over the brightest part of the field.
99
+
100
+ ## Source, License, And Attribution
101
+
102
+ Locally authored recipe. No upstream source.
103
+
104
+ ## IA Navigation
105
+
106
+ Parent: [Expression](../index.md).
107
+ Next: [Grain And Texture](grain-and-texture.md).