@hyvnt/hyvui 0.2.0 → 0.4.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.
Files changed (181) hide show
  1. package/README.md +294 -253
  2. package/dist/components/ambient/ArcaneVein.svelte +151 -0
  3. package/dist/components/ambient/ArcaneVein.svelte.d.ts +31 -0
  4. package/dist/components/ambient/BrassFiligree.svelte +109 -0
  5. package/dist/components/ambient/BrassFiligree.svelte.d.ts +20 -0
  6. package/dist/components/ambient/CornerBrackets.svelte +91 -87
  7. package/dist/components/ambient/CornerBrackets.svelte.d.ts +8 -0
  8. package/dist/components/ambient/CrystalShard.svelte +151 -0
  9. package/dist/components/ambient/CrystalShard.svelte.d.ts +19 -0
  10. package/dist/components/ambient/DataStream.svelte +117 -94
  11. package/dist/components/ambient/DataStream.svelte.d.ts +6 -0
  12. package/dist/components/ambient/EnergyArc.svelte +189 -0
  13. package/dist/components/ambient/EnergyArc.svelte.d.ts +32 -0
  14. package/dist/components/ambient/GlyphMark.svelte +75 -69
  15. package/dist/components/ambient/GlyphMark.svelte.d.ts +6 -0
  16. package/dist/components/ambient/GridOverlay.svelte +34 -28
  17. package/dist/components/ambient/GridOverlay.svelte.d.ts +8 -0
  18. package/dist/components/ambient/HexGrid.svelte +119 -0
  19. package/dist/components/ambient/HexGrid.svelte.d.ts +21 -0
  20. package/dist/components/ambient/ParallaxLayer.svelte +45 -41
  21. package/dist/components/ambient/ParallaxLayer.svelte.d.ts +7 -0
  22. package/dist/components/ambient/ScanBand.svelte +103 -91
  23. package/dist/components/ambient/ScanBand.svelte.d.ts +8 -0
  24. package/dist/components/ambient/ShimmerCloud.svelte +180 -0
  25. package/dist/components/ambient/ShimmerCloud.svelte.d.ts +21 -0
  26. package/dist/components/ambient/SignalRing.svelte +106 -100
  27. package/dist/components/ambient/SignalRing.svelte.d.ts +6 -0
  28. package/dist/components/ambient/ThreadLine.svelte +78 -78
  29. package/dist/components/ambient/ThreadLine.svelte.d.ts +7 -0
  30. package/dist/components/ambient/Vignette.svelte +30 -26
  31. package/dist/components/ambient/Vignette.svelte.d.ts +6 -0
  32. package/dist/components/depth/DepthLayer.svelte +30 -27
  33. package/dist/components/depth/DepthLayer.svelte.d.ts +8 -0
  34. package/dist/components/depth/DepthStage.svelte +67 -62
  35. package/dist/components/depth/DepthStage.svelte.d.ts +8 -0
  36. package/dist/components/depth/FloatCard.svelte +129 -104
  37. package/dist/components/depth/FloatCard.svelte.d.ts +8 -0
  38. package/dist/components/depth/HorizonGrid.svelte +241 -160
  39. package/dist/components/depth/HorizonGrid.svelte.d.ts +9 -0
  40. package/dist/components/depth/Plinth.svelte +62 -57
  41. package/dist/components/depth/Plinth.svelte.d.ts +10 -0
  42. package/dist/components/display/Avatar.svelte +69 -69
  43. package/dist/components/display/Avatar.svelte.d.ts +5 -0
  44. package/dist/components/display/Badge.svelte +75 -63
  45. package/dist/components/display/Badge.svelte.d.ts +6 -0
  46. package/dist/components/display/Blockquote.svelte +35 -34
  47. package/dist/components/display/Blockquote.svelte.d.ts +4 -0
  48. package/dist/components/display/CodeBlock.svelte +76 -76
  49. package/dist/components/display/CodeBlock.svelte.d.ts +5 -0
  50. package/dist/components/display/MetricCard.svelte +100 -83
  51. package/dist/components/display/MetricCard.svelte.d.ts +6 -0
  52. package/dist/components/display/Table.svelte +106 -104
  53. package/dist/components/display/Table.svelte.d.ts +7 -0
  54. package/dist/components/feedback/Alert.svelte +95 -76
  55. package/dist/components/feedback/Alert.svelte.d.ts +6 -0
  56. package/dist/components/feedback/EmptyState.svelte +75 -68
  57. package/dist/components/feedback/EmptyState.svelte.d.ts +7 -0
  58. package/dist/components/feedback/ErrorState.svelte +78 -73
  59. package/dist/components/feedback/ErrorState.svelte.d.ts +5 -0
  60. package/dist/components/feedback/Skeleton.svelte +58 -52
  61. package/dist/components/feedback/Skeleton.svelte.d.ts +6 -0
  62. package/dist/components/feedback/StatusDot.svelte +84 -54
  63. package/dist/components/feedback/StatusDot.svelte.d.ts +6 -0
  64. package/dist/components/feedback/StatusLine.svelte +128 -122
  65. package/dist/components/feedback/StatusLine.svelte.d.ts +6 -0
  66. package/dist/components/feedback/Toast.svelte +144 -136
  67. package/dist/components/feedback/Toast.svelte.d.ts +10 -0
  68. package/dist/components/inputs/Button.svelte +310 -237
  69. package/dist/components/inputs/Button.svelte.d.ts +8 -0
  70. package/dist/components/inputs/Checkbox.svelte +109 -105
  71. package/dist/components/inputs/Checkbox.svelte.d.ts +5 -0
  72. package/dist/components/inputs/FileUpload.svelte +170 -163
  73. package/dist/components/inputs/FileUpload.svelte.d.ts +5 -0
  74. package/dist/components/inputs/Input.svelte +153 -147
  75. package/dist/components/inputs/Input.svelte.d.ts +7 -0
  76. package/dist/components/inputs/Select.svelte +164 -150
  77. package/dist/components/inputs/Select.svelte.d.ts +8 -0
  78. package/dist/components/inputs/Textarea.svelte +160 -154
  79. package/dist/components/inputs/Textarea.svelte.d.ts +6 -0
  80. package/dist/components/inputs/Toggle.svelte +125 -120
  81. package/dist/components/inputs/Toggle.svelte.d.ts +5 -0
  82. package/dist/components/layout/Card.svelte +81 -76
  83. package/dist/components/layout/Card.svelte.d.ts +11 -0
  84. package/dist/components/layout/Drawer.svelte +140 -109
  85. package/dist/components/layout/Drawer.svelte.d.ts +6 -0
  86. package/dist/components/layout/Grid.svelte +128 -43
  87. package/dist/components/layout/Grid.svelte.d.ts +18 -2
  88. package/dist/components/layout/Modal.svelte +191 -159
  89. package/dist/components/layout/Modal.svelte.d.ts +10 -0
  90. package/dist/components/layout/Panel.svelte +58 -54
  91. package/dist/components/layout/Panel.svelte.d.ts +9 -0
  92. package/dist/components/layout/Popover.svelte +188 -67
  93. package/dist/components/layout/Popover.svelte.d.ts +19 -1
  94. package/dist/components/layout/Stack.svelte +65 -53
  95. package/dist/components/layout/Stack.svelte.d.ts +12 -0
  96. package/dist/components/navigation/Breadcrumb.svelte +78 -73
  97. package/dist/components/navigation/Breadcrumb.svelte.d.ts +8 -0
  98. package/dist/components/navigation/DropdownMenu.svelte +179 -124
  99. package/dist/components/navigation/DropdownMenu.svelte.d.ts +24 -2
  100. package/dist/components/navigation/SidebarNav.svelte +96 -90
  101. package/dist/components/navigation/SidebarNav.svelte.d.ts +9 -0
  102. package/dist/components/navigation/Tabs.svelte +106 -86
  103. package/dist/components/navigation/Tabs.svelte.d.ts +8 -0
  104. package/dist/components/navigation/Topbar.svelte +94 -85
  105. package/dist/components/navigation/Topbar.svelte.d.ts +9 -0
  106. package/dist/components/patterns/ActionBar.svelte +82 -76
  107. package/dist/components/patterns/ActionBar.svelte.d.ts +10 -0
  108. package/dist/components/patterns/ChapterMark.svelte +152 -0
  109. package/dist/components/patterns/ChapterMark.svelte.d.ts +19 -0
  110. package/dist/components/patterns/ConfirmDialog.svelte +75 -64
  111. package/dist/components/patterns/ConfirmDialog.svelte.d.ts +12 -0
  112. package/dist/components/patterns/DepthPortal.svelte +123 -0
  113. package/dist/components/patterns/DepthPortal.svelte.d.ts +24 -0
  114. package/dist/components/patterns/Manifesto.svelte +171 -0
  115. package/dist/components/patterns/Manifesto.svelte.d.ts +25 -0
  116. package/dist/components/patterns/PageHeader.svelte +117 -114
  117. package/dist/components/patterns/PageHeader.svelte.d.ts +8 -0
  118. package/dist/components/patterns/PullQuote.svelte +145 -0
  119. package/dist/components/patterns/PullQuote.svelte.d.ts +23 -0
  120. package/dist/components/patterns/RegisterSwitcher.svelte +132 -0
  121. package/dist/components/patterns/RegisterSwitcher.svelte.d.ts +21 -0
  122. package/dist/components/patterns/SearchBar.svelte +59 -59
  123. package/dist/components/patterns/SearchBar.svelte.d.ts +5 -0
  124. package/dist/components/patterns/ShowcaseFrame.svelte +117 -0
  125. package/dist/components/patterns/ShowcaseFrame.svelte.d.ts +28 -0
  126. package/dist/components/patterns/TerminalBoot.svelte +118 -104
  127. package/dist/components/patterns/TerminalBoot.svelte.d.ts +12 -0
  128. package/dist/components/primitives/Divider.svelte +56 -29
  129. package/dist/components/primitives/Divider.svelte.d.ts +5 -0
  130. package/dist/components/primitives/Icon.svelte +53 -49
  131. package/dist/components/primitives/Icon.svelte.d.ts +9 -0
  132. package/dist/components/primitives/Label.svelte +45 -44
  133. package/dist/components/primitives/Label.svelte.d.ts +6 -0
  134. package/dist/components/primitives/Surface.svelte +154 -87
  135. package/dist/components/primitives/Surface.svelte.d.ts +7 -0
  136. package/dist/components/primitives/Text.svelte +130 -98
  137. package/dist/components/primitives/Text.svelte.d.ts +7 -0
  138. package/dist/components/scenes/ArchiveScene.svelte +102 -95
  139. package/dist/components/scenes/ArchiveScene.svelte.d.ts +17 -1
  140. package/dist/components/scenes/DepthScene.svelte +128 -0
  141. package/dist/components/scenes/DepthScene.svelte.d.ts +36 -0
  142. package/dist/components/scenes/LogScene.svelte +86 -77
  143. package/dist/components/scenes/LogScene.svelte.d.ts +14 -0
  144. package/dist/components/scenes/NarrativeScene.svelte +100 -92
  145. package/dist/components/scenes/NarrativeScene.svelte.d.ts +9 -0
  146. package/dist/components/scenes/ReadoutScene.svelte +131 -107
  147. package/dist/components/scenes/ReadoutScene.svelte.d.ts +14 -1
  148. package/dist/components/scenes/StageScene.svelte +111 -104
  149. package/dist/components/scenes/StageScene.svelte.d.ts +14 -0
  150. package/dist/components/system/AppShell.svelte +62 -0
  151. package/dist/components/system/AppShell.svelte.d.ts +32 -0
  152. package/dist/examples/ArcaneShard.svelte +364 -0
  153. package/dist/examples/ArcaneShard.svelte.d.ts +3 -0
  154. package/dist/examples/FieldReport.svelte +226 -223
  155. package/dist/examples/HextechForge.svelte +324 -0
  156. package/dist/examples/HextechForge.svelte.d.ts +3 -0
  157. package/dist/examples/ObservationDeck.svelte +333 -317
  158. package/dist/examples/SignalLost.svelte +191 -191
  159. package/dist/index.d.ts +15 -1
  160. package/dist/index.js +16 -1
  161. package/dist/styles.css +115 -0
  162. package/dist/system/actions/echo.js +21 -12
  163. package/dist/system/actions/resolve.js +28 -14
  164. package/dist/system/actions/reveal.js +2 -2
  165. package/dist/system/actions/surface.js +12 -2
  166. package/dist/system/depth/depth.css +49 -49
  167. package/dist/system/depth/depth.js +1 -1
  168. package/dist/system/expressions.css +80 -80
  169. package/dist/system/override-template.css +72 -72
  170. package/dist/system/register.css +74 -74
  171. package/dist/system/register.d.ts +1 -1
  172. package/dist/system/register.js +5 -1
  173. package/dist/system/scroll-lock.d.ts +6 -0
  174. package/dist/system/scroll-lock.js +23 -0
  175. package/dist/tokens/arcane.css +96 -0
  176. package/dist/tokens/hextech.css +96 -0
  177. package/dist/tokens/tokens.css +102 -86
  178. package/dist/tokens/tokens.d.ts +41 -0
  179. package/dist/tokens/tokens.js +44 -3
  180. package/dist/utils/motion.js +1 -1
  181. package/package.json +71 -60
@@ -2,7 +2,7 @@ const statusColors = {
2
2
  ok: 'var(--status-ok)',
3
3
  warn: 'var(--status-warn)',
4
4
  fail: 'var(--status-fail)',
5
- pend: 'var(--status-pend)',
5
+ pend: 'var(--status-pend)'
6
6
  };
7
7
  /**
8
8
  * Animates a status change on an element. A brief overlay flash in the
@@ -25,6 +25,9 @@ export function resolve(node, register) {
25
25
  const position = getComputedStyle(node).position;
26
26
  if (position === 'static')
27
27
  node.style.position = 'relative';
28
+ let frame = 0;
29
+ let t1 = 0;
30
+ let t2 = 0;
28
31
  function trigger(status) {
29
32
  node.dispatchEvent(new CustomEvent('resolve:start', { detail: status }));
30
33
  if (prefersReduced) {
@@ -32,22 +35,25 @@ export function resolve(node, register) {
32
35
  return;
33
36
  }
34
37
  const overlay = document.createElement('span');
35
- overlay.style.cssText = `
36
- position: absolute;
37
- inset: 0;
38
- pointer-events: none;
39
- background: ${statusColors[status]};
40
- opacity: 0;
41
- border-radius: inherit;
42
- transition: opacity 0.12s ease-out;
38
+ overlay.style.cssText = `
39
+ position: absolute;
40
+ inset: 0;
41
+ pointer-events: none;
42
+ background: ${statusColors[status]};
43
+ opacity: 0;
44
+ border-radius: inherit;
45
+ transition: opacity 0.12s cubic-bezier(0.4, 0, 0.2, 1);
43
46
  `;
44
47
  node.appendChild(overlay);
45
- requestAnimationFrame(() => {
48
+ cancelAnimationFrame(frame);
49
+ clearTimeout(t1);
50
+ clearTimeout(t2);
51
+ frame = requestAnimationFrame(() => {
46
52
  overlay.style.opacity = '0.12';
47
- setTimeout(() => {
48
- overlay.style.transition = 'opacity 0.4s ease-out';
53
+ t1 = setTimeout(() => {
54
+ overlay.style.transition = 'opacity 0.38s cubic-bezier(0.22, 1, 0.36, 1)';
49
55
  overlay.style.opacity = '0';
50
- setTimeout(() => {
56
+ t2 = setTimeout(() => {
51
57
  overlay.remove();
52
58
  node.dispatchEvent(new CustomEvent('resolve:end', { detail: status }));
53
59
  }, 450);
@@ -55,5 +61,13 @@ export function resolve(node, register) {
55
61
  });
56
62
  }
57
63
  register({ trigger });
58
- return {};
64
+ return {
65
+ destroy() {
66
+ cancelAnimationFrame(frame);
67
+ clearTimeout(t1);
68
+ clearTimeout(t2);
69
+ if (position === 'static')
70
+ node.style.position = '';
71
+ }
72
+ };
59
73
  }
@@ -21,7 +21,7 @@ export function reveal(node, options) {
21
21
  target.style.opacity = '0';
22
22
  target.style.transform = prefersReduced ? 'none' : 'translateY(4px)';
23
23
  if (!prefersReduced) {
24
- target.style.transition = 'opacity 0.25s ease-out, transform 0.25s ease-out';
24
+ target.style.transition = 'opacity 0.22s cubic-bezier(0.22, 1, 0.36, 1), transform 0.22s cubic-bezier(0.22, 1, 0.36, 1)';
25
25
  }
26
26
  }
27
27
  function show() {
@@ -49,6 +49,6 @@ export function reveal(node, options) {
49
49
  node.removeEventListener('mouseleave', hide);
50
50
  node.removeEventListener('focusin', show);
51
51
  node.removeEventListener('focusout', hide);
52
- },
52
+ }
53
53
  };
54
54
  }
@@ -12,14 +12,24 @@ export function surface(node, options = {}) {
12
12
  return {};
13
13
  node.style.opacity = '0';
14
14
  node.style.transform = 'translateY(6px)';
15
- node.style.transition = `opacity 0.5s ease-out ${delay}ms, transform 0.5s ease-out ${delay}ms`;
15
+ node.style.transition = `opacity 0.38s cubic-bezier(0.22, 1, 0.36, 1) ${delay}ms, transform 0.38s cubic-bezier(0.22, 1, 0.36, 1) ${delay}ms`;
16
+ function onEnd(e) {
17
+ if (e.propertyName !== 'transform')
18
+ return;
19
+ node.removeEventListener('transitionend', onEnd);
20
+ // Clear transforms to avoid creating containing blocks for fixed/floating UI.
21
+ node.style.transform = 'none';
22
+ node.style.transition = '';
23
+ }
24
+ node.addEventListener('transitionend', onEnd);
16
25
  const frame = requestAnimationFrame(() => {
17
26
  node.style.opacity = '1';
18
27
  node.style.transform = 'translateY(0)';
19
28
  });
20
29
  return {
21
30
  destroy() {
31
+ node.removeEventListener('transitionend', onEnd);
22
32
  cancelAnimationFrame(frame);
23
- },
33
+ }
24
34
  };
25
35
  }
@@ -1,49 +1,49 @@
1
- /* ── perspective tokens ──────────────────────────────────────────────── */
2
- :root {
3
- --perspective-near: 600px;
4
- --perspective-mid: 1000px;
5
- --perspective-far: 1800px;
6
-
7
- --depth-ground: 0px;
8
- --depth-raised: 60px;
9
- --depth-foreground: 140px;
10
-
11
- --depth-tilt-max: 8deg;
12
- --depth-tilt-subtle: 3deg;
13
-
14
- --depth-transition: 0.4s cubic-bezier(0.22, 1, 0.36, 1);
15
- }
16
-
17
- /* ── perspective container ───────────────────────────────────────────── */
18
- .depth-stage {
19
- perspective: var(--perspective-mid);
20
- perspective-origin: 50% 40%;
21
- transform-style: preserve-3d;
22
- }
23
-
24
- /* ── depth level utilities ───────────────────────────────────────────── */
25
- .depth-ground {
26
- transform: translateZ(var(--depth-ground));
27
- }
28
-
29
- .depth-raised {
30
- transform: translateZ(var(--depth-raised));
31
- }
32
-
33
- .depth-foreground {
34
- transform: translateZ(var(--depth-foreground));
35
- }
36
-
37
- /* ── reduced motion override ─────────────────────────────────────────── */
38
- @media (prefers-reduced-motion: reduce) {
39
- .depth-ground,
40
- .depth-raised,
41
- .depth-foreground {
42
- transform: none;
43
- }
44
-
45
- .depth-stage {
46
- perspective: none;
47
- transform-style: flat;
48
- }
49
- }
1
+ /* ── perspective tokens ──────────────────────────────────────────────── */
2
+ :root {
3
+ --perspective-near: 600px;
4
+ --perspective-mid: 1000px;
5
+ --perspective-far: 1800px;
6
+
7
+ --depth-ground: 0px;
8
+ --depth-raised: 60px;
9
+ --depth-foreground: 140px;
10
+
11
+ --depth-tilt-max: 8deg;
12
+ --depth-tilt-subtle: 3deg;
13
+
14
+ --depth-transition: 0.4s cubic-bezier(0.22, 1, 0.36, 1);
15
+ }
16
+
17
+ /* ── perspective container ───────────────────────────────────────────── */
18
+ .depth-stage {
19
+ perspective: var(--perspective-mid);
20
+ perspective-origin: 50% 40%;
21
+ transform-style: preserve-3d;
22
+ }
23
+
24
+ /* ── depth level utilities ───────────────────────────────────────────── */
25
+ .depth-ground {
26
+ transform: translateZ(var(--depth-ground));
27
+ }
28
+
29
+ .depth-raised {
30
+ transform: translateZ(var(--depth-raised));
31
+ }
32
+
33
+ .depth-foreground {
34
+ transform: translateZ(var(--depth-foreground));
35
+ }
36
+
37
+ /* ── reduced motion override ─────────────────────────────────────────── */
38
+ @media (prefers-reduced-motion: reduce) {
39
+ .depth-ground,
40
+ .depth-raised,
41
+ .depth-foreground {
42
+ transform: none;
43
+ }
44
+
45
+ .depth-stage {
46
+ perspective: none;
47
+ transform-style: flat;
48
+ }
49
+ }
@@ -5,7 +5,7 @@ export function depthZ(level) {
5
5
  const map = {
6
6
  ground: 'var(--depth-ground)',
7
7
  raised: 'var(--depth-raised)',
8
- foreground: 'var(--depth-foreground)',
8
+ foreground: 'var(--depth-foreground)'
9
9
  };
10
10
  return map[level];
11
11
  }
@@ -1,80 +1,80 @@
1
- /* ── typographic expressions ──────────────────────────────────────────── */
2
- /* expressions describe compositional intent — what the text is doing in */
3
- /* the design. they are orthogonal to variants (structural role). */
4
- /* apply via the Text component's expression prop or manually via class. */
5
-
6
- /* ── expression: title-card ──────────────────────────────────────────── */
7
- /* scene-opening headers. very large, line-height below 1, max-width tight */
8
- .expr-title-card {
9
- font-family: var(--font-body);
10
- font-size: clamp(3.4rem, 10vw, 8rem);
11
- font-weight: 400;
12
- line-height: 0.91;
13
- letter-spacing: -0.05em;
14
- max-width: 10ch;
15
- }
16
-
17
- /* ── expression: manifesto ───────────────────────────────────────────── */
18
- /* philosophical statements, pull-quotes, oblique voice */
19
- .expr-manifesto {
20
- font-family: var(--font-body);
21
- font-style: italic;
22
- font-size: clamp(1.1rem, 2.5vw, 1.6rem);
23
- line-height: 1.45;
24
- color: var(--text-soft);
25
- max-width: 30rem;
26
- }
27
-
28
- /* ── expression: readout ─────────────────────────────────────────────── */
29
- /* data labels, system output, status-like content */
30
- .expr-readout {
31
- font-family: var(--font-mono);
32
- font-size: 0.82rem;
33
- letter-spacing: 0.06em;
34
- color: var(--muted);
35
- line-height: 1.6;
36
- }
37
-
38
- /* ── expression: whisper ─────────────────────────────────────────────── */
39
- /* supporting notes, parenthetical content, secondary metadata */
40
- .expr-whisper {
41
- font-family: var(--font-body);
42
- font-size: 0.88rem;
43
- color: var(--muted-strong);
44
- line-height: 1.5;
45
- font-style: italic;
46
- }
47
-
48
- /* ── expression: command ─────────────────────────────────────────────── */
49
- /* CTAs, active instructions, call-to-action labels */
50
- .expr-command {
51
- font-family: var(--font-mono);
52
- font-size: 0.75rem;
53
- letter-spacing: 0.12em;
54
- text-transform: uppercase;
55
- color: var(--accent);
56
- font-weight: 500;
57
- }
58
-
59
- /* ── expression: chapter ─────────────────────────────────────────────── */
60
- /* section openers, scene numbers, narrative markers */
61
- .expr-chapter {
62
- font-family: var(--font-mono);
63
- font-size: 0.62rem;
64
- letter-spacing: 0.22em;
65
- text-transform: uppercase;
66
- color: var(--muted-strong);
67
- display: flex;
68
- align-items: center;
69
- gap: 0.75rem;
70
- }
71
-
72
- /* adds a line after the label */
73
- .expr-chapter::after {
74
- content: '';
75
- display: block;
76
- flex: 1;
77
- height: 1px;
78
- background: var(--line);
79
- max-width: 4rem;
80
- }
1
+ /* ── typographic expressions ──────────────────────────────────────────── */
2
+ /* expressions describe compositional intent — what the text is doing in */
3
+ /* the design. they are orthogonal to variants (structural role). */
4
+ /* apply via the Text component's expression prop or manually via class. */
5
+
6
+ /* ── expression: title-card ──────────────────────────────────────────── */
7
+ /* scene-opening headers. very large, line-height below 1, max-width tight */
8
+ .expr-title-card {
9
+ font-family: var(--font-body);
10
+ font-size: clamp(3.4rem, 10vw, 8rem);
11
+ font-weight: 400;
12
+ line-height: 0.91;
13
+ letter-spacing: -0.05em;
14
+ max-width: 10ch;
15
+ }
16
+
17
+ /* ── expression: manifesto ───────────────────────────────────────────── */
18
+ /* philosophical statements, pull-quotes, oblique voice */
19
+ .expr-manifesto {
20
+ font-family: var(--font-body);
21
+ font-style: italic;
22
+ font-size: clamp(1.1rem, 2.5vw, 1.6rem);
23
+ line-height: 1.45;
24
+ color: var(--text-soft);
25
+ max-width: 30rem;
26
+ }
27
+
28
+ /* ── expression: readout ─────────────────────────────────────────────── */
29
+ /* data labels, system output, status-like content */
30
+ .expr-readout {
31
+ font-family: var(--font-mono);
32
+ font-size: 0.82rem;
33
+ letter-spacing: 0.06em;
34
+ color: var(--muted);
35
+ line-height: 1.6;
36
+ }
37
+
38
+ /* ── expression: whisper ─────────────────────────────────────────────── */
39
+ /* supporting notes, parenthetical content, secondary metadata */
40
+ .expr-whisper {
41
+ font-family: var(--font-body);
42
+ font-size: 0.88rem;
43
+ color: var(--muted-strong);
44
+ line-height: 1.5;
45
+ font-style: italic;
46
+ }
47
+
48
+ /* ── expression: command ─────────────────────────────────────────────── */
49
+ /* CTAs, active instructions, call-to-action labels */
50
+ .expr-command {
51
+ font-family: var(--font-mono);
52
+ font-size: 0.75rem;
53
+ letter-spacing: 0.12em;
54
+ text-transform: uppercase;
55
+ color: var(--accent);
56
+ font-weight: 500;
57
+ }
58
+
59
+ /* ── expression: chapter ─────────────────────────────────────────────── */
60
+ /* section openers, scene numbers, narrative markers */
61
+ .expr-chapter {
62
+ font-family: var(--font-mono);
63
+ font-size: 0.62rem;
64
+ letter-spacing: 0.22em;
65
+ text-transform: uppercase;
66
+ color: var(--muted-strong);
67
+ display: flex;
68
+ align-items: center;
69
+ gap: 0.75rem;
70
+ }
71
+
72
+ /* adds a line after the label */
73
+ .expr-chapter::after {
74
+ content: '';
75
+ display: block;
76
+ flex: 1;
77
+ height: 1px;
78
+ background: var(--line);
79
+ max-width: 4rem;
80
+ }
@@ -1,72 +1,72 @@
1
- /**
2
- * hyvui project override layer
3
- * ─────────────────────────────────────────────────────────────────────────
4
- * Copy this file into your project as `theme.css` and import it after
5
- * `app.css`. Uncomment and adjust properties to tune the library's
6
- * presentation for this specific project.
7
- *
8
- * DO NOT modify tokens.css. This file is the only sanctioned override surface.
9
- * DO NOT change color values here. Color lives in tokens.css.
10
- * This file controls presence, weight, and scale — not palette.
11
- *
12
- * Apply a register for broader personality shifts:
13
- * document.body.dataset.register = 'field-notebook' | 'mission-control' | 'archive'
14
- */
15
-
16
- :root {
17
- /* ── type presence ──────────────────────────────────────────────────── */
18
- /* Adjust heading compression. More negative = more compressed. */
19
- /* --reg-heading-tracking: -0.05em; */
20
-
21
- /* Adjust body text size. Range: 0.9rem (dense) to 1.25rem (editorial) */
22
- /* --reg-body-size: 1.1rem; */
23
-
24
- /* ── surface presence ───────────────────────────────────────────────── */
25
- /* Lower opacity = cards feel lighter, more atmospheric. */
26
- /* Higher opacity = cards feel heavier, more structured. */
27
- /* Range: 0.4 (ghostly) to 1.0 (fully opaque) */
28
- /* --reg-surface-opacity: 0.8; */
29
-
30
- /* ── ornament presence ──────────────────────────────────────────────── */
31
- /* Controls ambient component visibility globally. */
32
- /* 0 = invisible, 1 = full AESTHETICS.md opacity */
33
- /* --reg-ornament-opacity: 0.14; */
34
-
35
- /* ── accent balance ─────────────────────────────────────────────────── */
36
- /* Gold weight. 1 = full presence, 0.4 = almost invisible. */
37
- /* --reg-accent-weight: 1; */
38
-
39
- /* Teal weight. Same scale. */
40
- /* --reg-signal-weight: 0.8; */
41
-
42
- /* ── spacing scale ──────────────────────────────────────────────────── */
43
- /* Multiplier on spacing. > 1 = more breathing room. < 1 = tighter. */
44
- /* Range: 0.85 (compact) to 1.4 (spacious) */
45
- /* --reg-spacing-scale: 1; */
46
- }
47
-
48
- /*
49
- * EXAMPLE: Portfolio / narrative project
50
- * ──────────────────────────────────────
51
- * :root {
52
- * --reg-heading-tracking: -0.055em;
53
- * --reg-body-size: 1.15rem;
54
- * --reg-surface-opacity: 0.65;
55
- * --reg-ornament-opacity: 0.2;
56
- * --reg-accent-weight: 1;
57
- * --reg-signal-weight: 0.5;
58
- * --reg-spacing-scale: 1.2;
59
- * }
60
- *
61
- * EXAMPLE: Dashboard / tool project
62
- * ───────────────────────────────────
63
- * :root {
64
- * --reg-heading-tracking: -0.02em;
65
- * --reg-body-size: 0.9rem;
66
- * --reg-surface-opacity: 0.95;
67
- * --reg-ornament-opacity: 0.06;
68
- * --reg-accent-weight: 0.6;
69
- * --reg-signal-weight: 1;
70
- * --reg-spacing-scale: 0.88;
71
- * }
72
- */
1
+ /**
2
+ * hyvui project override layer
3
+ * ─────────────────────────────────────────────────────────────────────────
4
+ * Copy this file into your project as `theme.css` and import it after
5
+ * `app.css`. Uncomment and adjust properties to tune the library's
6
+ * presentation for this specific project.
7
+ *
8
+ * DO NOT modify tokens.css. This file is the only sanctioned override surface.
9
+ * DO NOT change color values here. Color lives in tokens.css.
10
+ * This file controls presence, weight, and scale — not palette.
11
+ *
12
+ * Apply a register for broader personality shifts:
13
+ * document.body.dataset.register = 'field-notebook' | 'mission-control' | 'archive'
14
+ */
15
+
16
+ :root {
17
+ /* ── type presence ──────────────────────────────────────────────────── */
18
+ /* Adjust heading compression. More negative = more compressed. */
19
+ /* --reg-heading-tracking: -0.05em; */
20
+
21
+ /* Adjust body text size. Range: 0.9rem (dense) to 1.25rem (editorial) */
22
+ /* --reg-body-size: 1.1rem; */
23
+
24
+ /* ── surface presence ───────────────────────────────────────────────── */
25
+ /* Lower opacity = cards feel lighter, more atmospheric. */
26
+ /* Higher opacity = cards feel heavier, more structured. */
27
+ /* Range: 0.4 (ghostly) to 1.0 (fully opaque) */
28
+ /* --reg-surface-opacity: 0.8; */
29
+
30
+ /* ── ornament presence ──────────────────────────────────────────────── */
31
+ /* Controls ambient component visibility globally. */
32
+ /* 0 = invisible, 1 = full AESTHETICS.md opacity */
33
+ /* --reg-ornament-opacity: 0.14; */
34
+
35
+ /* ── accent balance ─────────────────────────────────────────────────── */
36
+ /* Gold weight. 1 = full presence, 0.4 = almost invisible. */
37
+ /* --reg-accent-weight: 1; */
38
+
39
+ /* Teal weight. Same scale. */
40
+ /* --reg-signal-weight: 0.8; */
41
+
42
+ /* ── spacing scale ──────────────────────────────────────────────────── */
43
+ /* Multiplier on spacing. > 1 = more breathing room. < 1 = tighter. */
44
+ /* Range: 0.85 (compact) to 1.4 (spacious) */
45
+ /* --reg-spacing-scale: 1; */
46
+ }
47
+
48
+ /*
49
+ * EXAMPLE: Portfolio / narrative project
50
+ * ──────────────────────────────────────
51
+ * :root {
52
+ * --reg-heading-tracking: -0.055em;
53
+ * --reg-body-size: 1.15rem;
54
+ * --reg-surface-opacity: 0.65;
55
+ * --reg-ornament-opacity: 0.2;
56
+ * --reg-accent-weight: 1;
57
+ * --reg-signal-weight: 0.5;
58
+ * --reg-spacing-scale: 1.2;
59
+ * }
60
+ *
61
+ * EXAMPLE: Dashboard / tool project
62
+ * ───────────────────────────────────
63
+ * :root {
64
+ * --reg-heading-tracking: -0.02em;
65
+ * --reg-body-size: 0.9rem;
66
+ * --reg-surface-opacity: 0.95;
67
+ * --reg-ornament-opacity: 0.06;
68
+ * --reg-accent-weight: 0.6;
69
+ * --reg-signal-weight: 1;
70
+ * --reg-spacing-scale: 0.88;
71
+ * }
72
+ */