@bestagentkits/render 0.1.0 → 0.2.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 (111) hide show
  1. package/CHANGELOG.md +119 -0
  2. package/README.md +189 -34
  3. package/assets/fonts/bricolage-grotesque/OFL.txt +93 -0
  4. package/assets/fonts/fraunces/OFL.txt +93 -0
  5. package/assets/fonts/geist/OFL.txt +93 -0
  6. package/assets/fonts/inter-tight/OFL.txt +93 -0
  7. package/assets/fonts/jetbrains-mono/OFL.txt +93 -0
  8. package/assets/fonts/plus-jakarta-sans/OFL.txt +93 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +51 -10
  12. package/dist/cli.js.map +1 -1
  13. package/dist/mcp-server.d.ts +37 -0
  14. package/dist/mcp-server.d.ts.map +1 -0
  15. package/dist/mcp-server.js +274 -0
  16. package/dist/mcp-server.js.map +1 -0
  17. package/dist/registry/roster.d.ts +1 -1
  18. package/dist/registry/roster.d.ts.map +1 -1
  19. package/dist/registry/roster.js +222 -6
  20. package/dist/registry/roster.js.map +1 -1
  21. package/dist/render/block-helpers.d.ts +52 -0
  22. package/dist/render/block-helpers.d.ts.map +1 -0
  23. package/dist/render/block-helpers.js +113 -0
  24. package/dist/render/block-helpers.js.map +1 -0
  25. package/dist/render/blocks.d.ts +3 -4
  26. package/dist/render/blocks.d.ts.map +1 -1
  27. package/dist/render/blocks.js +126 -121
  28. package/dist/render/blocks.js.map +1 -1
  29. package/dist/render/charts.d.ts +5 -0
  30. package/dist/render/charts.d.ts.map +1 -1
  31. package/dist/render/charts.js +205 -90
  32. package/dist/render/charts.js.map +1 -1
  33. package/dist/render/derived-variables.d.ts +17 -0
  34. package/dist/render/derived-variables.d.ts.map +1 -0
  35. package/dist/render/derived-variables.js +17 -0
  36. package/dist/render/derived-variables.js.map +1 -0
  37. package/dist/render/diagram-fallback.d.ts +25 -0
  38. package/dist/render/diagram-fallback.d.ts.map +1 -0
  39. package/dist/render/diagram-fallback.js +86 -0
  40. package/dist/render/diagram-fallback.js.map +1 -0
  41. package/dist/render/document.d.ts +4 -0
  42. package/dist/render/document.d.ts.map +1 -1
  43. package/dist/render/document.js +34 -6
  44. package/dist/render/document.js.map +1 -1
  45. package/dist/render/effects-styles.d.ts +14 -0
  46. package/dist/render/effects-styles.d.ts.map +1 -0
  47. package/dist/render/effects-styles.js +39 -0
  48. package/dist/render/effects-styles.js.map +1 -0
  49. package/dist/render/embedded-fonts.generated.d.ts +22 -0
  50. package/dist/render/embedded-fonts.generated.d.ts.map +1 -0
  51. package/dist/render/embedded-fonts.generated.js +59 -0
  52. package/dist/render/embedded-fonts.generated.js.map +1 -0
  53. package/dist/render/feature-styles.d.ts +14 -0
  54. package/dist/render/feature-styles.d.ts.map +1 -0
  55. package/dist/render/feature-styles.js +161 -0
  56. package/dist/render/feature-styles.js.map +1 -0
  57. package/dist/render/font-faces.d.ts +22 -0
  58. package/dist/render/font-faces.d.ts.map +1 -0
  59. package/dist/render/font-faces.js +60 -0
  60. package/dist/render/font-faces.js.map +1 -0
  61. package/dist/render/outline.d.ts +21 -0
  62. package/dist/render/outline.d.ts.map +1 -0
  63. package/dist/render/outline.js +44 -0
  64. package/dist/render/outline.js.map +1 -0
  65. package/dist/render/render.d.ts.map +1 -1
  66. package/dist/render/render.js +53 -10
  67. package/dist/render/render.js.map +1 -1
  68. package/dist/render/runtime.d.ts.map +1 -1
  69. package/dist/render/runtime.js +184 -10
  70. package/dist/render/runtime.js.map +1 -1
  71. package/dist/render/showcase-blocks.d.ts +47 -0
  72. package/dist/render/showcase-blocks.d.ts.map +1 -0
  73. package/dist/render/showcase-blocks.js +349 -0
  74. package/dist/render/showcase-blocks.js.map +1 -0
  75. package/dist/render/showcase-styles.d.ts +15 -0
  76. package/dist/render/showcase-styles.d.ts.map +1 -0
  77. package/dist/render/showcase-styles.js +217 -0
  78. package/dist/render/showcase-styles.js.map +1 -0
  79. package/dist/render/signature-styles.d.ts +18 -0
  80. package/dist/render/signature-styles.d.ts.map +1 -0
  81. package/dist/render/signature-styles.js +41 -0
  82. package/dist/render/signature-styles.js.map +1 -0
  83. package/dist/render/styles.d.ts +18 -9
  84. package/dist/render/styles.d.ts.map +1 -1
  85. package/dist/render/styles.js +224 -128
  86. package/dist/render/styles.js.map +1 -1
  87. package/dist/render/surface-styles.d.ts +24 -0
  88. package/dist/render/surface-styles.d.ts.map +1 -0
  89. package/dist/render/surface-styles.js +41 -0
  90. package/dist/render/surface-styles.js.map +1 -0
  91. package/dist/render/verify.d.ts.map +1 -1
  92. package/dist/render/verify.js +30 -0
  93. package/dist/render/verify.js.map +1 -1
  94. package/dist/spec/normalize.d.ts.map +1 -1
  95. package/dist/spec/normalize.js +32 -0
  96. package/dist/spec/normalize.js.map +1 -1
  97. package/dist/theme/load-theme.d.ts +2 -2
  98. package/dist/theme/load-theme.d.ts.map +1 -1
  99. package/dist/theme/load-theme.js +46 -10
  100. package/dist/theme/load-theme.js.map +1 -1
  101. package/dist/theme/presets.d.ts +4 -3
  102. package/dist/theme/presets.d.ts.map +1 -1
  103. package/dist/theme/presets.js +35 -18
  104. package/dist/theme/presets.js.map +1 -1
  105. package/dist/theme/tokens.d.ts.map +1 -1
  106. package/dist/theme/tokens.js +4 -4
  107. package/dist/theme/tokens.js.map +1 -1
  108. package/dist/version.d.ts +1 -1
  109. package/dist/version.js +1 -1
  110. package/llms.txt +25 -0
  111. package/package.json +9 -3
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Structured diagram fallback.
3
+ *
4
+ * Without an adapter a diagram still has to read as a diagram. When the
5
+ * connections form one simple chain (every node has at most one way in and one
6
+ * way out, and the chain visits every node), the nodes are drawn as a flow with
7
+ * labelled connectors. Any other graph is shown as a set of nodes plus an
8
+ * explicit connection list, because drawing arrows between nodes that are not
9
+ * connected would state something the spec does not.
10
+ */
11
+ import { escapeText } from './escape.js';
12
+ /** Order nodes along the single chain the edges describe, or return undefined when they do not form one. */
13
+ export function chainOrder(nodes, edges) {
14
+ if (nodes.length < 2 || edges.length !== nodes.length - 1)
15
+ return undefined;
16
+ const byId = new Map(nodes.map((node) => [node.id, node]));
17
+ if (byId.size !== nodes.length)
18
+ return undefined;
19
+ const next = new Map();
20
+ const incoming = new Set();
21
+ for (const edge of edges) {
22
+ if (!byId.has(edge.from) || !byId.has(edge.to))
23
+ return undefined;
24
+ if (next.has(edge.from) || incoming.has(edge.to))
25
+ return undefined;
26
+ next.set(edge.from, edge.to);
27
+ incoming.add(edge.to);
28
+ }
29
+ const start = nodes.find((node) => !incoming.has(node.id));
30
+ if (start === undefined)
31
+ return undefined;
32
+ const ordered = [];
33
+ const seen = new Set();
34
+ let cursor = start.id;
35
+ while (cursor !== undefined && !seen.has(cursor)) {
36
+ seen.add(cursor);
37
+ const node = byId.get(cursor);
38
+ if (node !== undefined)
39
+ ordered.push(node);
40
+ cursor = next.get(cursor);
41
+ }
42
+ return ordered.length === nodes.length ? ordered : undefined;
43
+ }
44
+ function nodeMarkup(node) {
45
+ const label = node.label === '' ? node.id : node.label;
46
+ return `<span class="ak-flow-node"><span class="ak-flow-name">${escapeText(label)}</span><code>${escapeText(node.id)}</code></span>`;
47
+ }
48
+ function flowMarkup(ordered, edges) {
49
+ const edgeFrom = new Map(edges.map((edge) => [edge.from, edge]));
50
+ const items = ordered.map((node, index) => {
51
+ const edge = index < ordered.length - 1 ? edgeFrom.get(node.id) : undefined;
52
+ const connector = edge === undefined
53
+ ? ''
54
+ : `<span class="ak-flow-edge"><span class="ak-sr">then to ${escapeText(edge.to)}</span>${edge.label === ''
55
+ ? ''
56
+ : `<span class="ak-flow-edge-label">${escapeText(edge.label)}</span>`}</span>`;
57
+ return `<li>${nodeMarkup(node)}${connector}</li>`;
58
+ });
59
+ return `<ol class="ak-flow">${items.join('')}</ol>`;
60
+ }
61
+ function graphMarkup(nodes, edges) {
62
+ const nodeList = nodes.length === 0
63
+ ? ''
64
+ : `<ul class="ak-flow-nodes">${nodes.map((node) => `<li>${nodeMarkup(node)}</li>`).join('')}</ul>`;
65
+ const edgeList = edges.length === 0
66
+ ? ''
67
+ : `<ul class="ak-flow-links">${edges
68
+ .map((edge) => `<li><code>${escapeText(edge.from)}</code><span class="ak-flow-arrow" aria-hidden="true">\u2192</span><span class="ak-sr">to</span><code>${escapeText(edge.to)}</code>${edge.label === '' ? '' : `<span class="ak-flow-link-label">${escapeText(edge.label)}</span>`}</li>`)
69
+ .join('')}</ul>`;
70
+ return `${nodeList}${edgeList}`;
71
+ }
72
+ function text(value) {
73
+ return typeof value === 'string' ? value : '';
74
+ }
75
+ /** Render the fallback body for the described nodes and connections. */
76
+ export function renderDiagramFallback(described, connections) {
77
+ const nodes = described.map((item) => ({ id: text(item.id), label: text(item.label) }));
78
+ const edges = connections.map((item) => ({
79
+ from: text(item.from),
80
+ to: text(item.to),
81
+ label: text(item.label),
82
+ }));
83
+ const ordered = chainOrder(nodes, edges);
84
+ return ordered === undefined ? graphMarkup(nodes, edges) : flowMarkup(ordered, edges);
85
+ }
86
+ //# sourceMappingURL=diagram-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-fallback.js","sourceRoot":"","sources":["../../src/render/diagram-fallback.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,10 @@ export interface DocumentInput {
24
24
  themeToggle: boolean;
25
25
  /** Resolved theme density, emitted as a document-level attribute. */
26
26
  density: string;
27
+ /** The theme turned motion off; the runtime reads this from the root element. */
28
+ motionDisabled?: boolean;
29
+ /** Rendered page outline; omitted or empty when the page has none. */
30
+ outline?: string;
27
31
  }
28
32
  export interface AssembledDocument {
29
33
  html: string;
@@ -1 +1 @@
1
- {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/render/document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAC;AAI1D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,UAAU,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AA8BD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAQA;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,iBAAiB,CA6CxE"}
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/render/document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAC;AAI1D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,UAAU,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAkCD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAQA;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,iBAAiB,CAsExE"}
@@ -17,8 +17,11 @@ import { escapeAttribute, escapeText } from './escape.js';
17
17
  import { needsLiveRegion } from './runtime.js';
18
18
  function directives(policy, input, styleNonce, scriptNonce) {
19
19
  const origins = [...new Set(input.allowedOrigins)].sort();
20
- const imageSources = ['data:', 'file:', ...origins];
21
- const mediaSources = ['file:', ...origins];
20
+ // `'self'` lets the page's own relative assets load when the file is served
21
+ // over HTTP(S) instead of opened from disk. It adds no fetch path: remote URLs
22
+ // in the spec are still gated by the network policy before they reach markup.
23
+ const imageSources = ['data:', 'file:', "'self'", ...origins];
24
+ const mediaSources = ['file:', "'self'", ...origins];
22
25
  const parts = [
23
26
  "default-src 'none'",
24
27
  "base-uri 'none'",
@@ -26,7 +29,8 @@ function directives(policy, input, styleNonce, scriptNonce) {
26
29
  "frame-src 'none'",
27
30
  "object-src 'none'",
28
31
  "connect-src 'none'",
29
- "font-src 'none'",
32
+ // Only embedded `data:` faces are ever allowed; a page without one keeps fonts closed.
33
+ input.css.includes('@font-face') ? 'font-src data:' : "font-src 'none'",
30
34
  `img-src ${imageSources.join(' ')}`,
31
35
  `media-src ${mediaSources.join(' ')}`,
32
36
  `style-src 'nonce-${styleNonce}'`,
@@ -55,12 +59,32 @@ export function assembleDocument(input) {
55
59
  const themeToggle = input.themeToggle
56
60
  ? `<div class="ak-page-bar"><button type="button" class="ak-btn ak-theme-toggle" data-ak-theme-toggle aria-pressed="false" aria-label="Toggle dark theme">Dark</button></div>`
57
61
  : '';
62
+ // Share metadata comes only from the spec's own meta, so it stays
63
+ // deterministic and never invents a URL the artifact does not have.
58
64
  const description = meta.description === undefined
59
65
  ? ''
60
- : `<meta name="description" content="${escapeAttribute(meta.description)}" />`;
66
+ : [
67
+ `<meta name="description" content="${escapeAttribute(meta.description)}" />`,
68
+ `<meta property="og:description" content="${escapeAttribute(meta.description)}" />`,
69
+ ].join('\n');
70
+ const share = [
71
+ `<meta property="og:title" content="${escapeAttribute(meta.title)}" />`,
72
+ '<meta property="og:type" content="article" />',
73
+ '<meta name="twitter:card" content="summary" />',
74
+ ].join('\n');
75
+ // The colophon names the generator and offers a way back to the top; it holds
76
+ // no dates or paths, so the artifact stays byte-deterministic.
77
+ const colophon = [
78
+ '<footer class="ak-colophon">',
79
+ `<p><span class="ak-colophon-title">${escapeText(meta.title)}</span>`,
80
+ `<span>Generated by @bestagentkits/render ${escapeText(input.compilerVersion)}</span></p>`,
81
+ '<a href="#ak-main-content">Back to top</a>',
82
+ '</footer>',
83
+ ].join('');
84
+ const outline = input.outline ?? '';
61
85
  const html = [
62
86
  '<!DOCTYPE html>',
63
- `<html lang="${escapeAttribute(meta.locale)}" data-density="${escapeAttribute(input.density)}">`,
87
+ `<html lang="${escapeAttribute(meta.locale)}" data-density="${escapeAttribute(input.density)}"${input.motionDisabled === true ? ' data-motion="none"' : ''}>`,
64
88
  '<head>',
65
89
  '<meta charset="utf-8" />',
66
90
  '<meta name="viewport" content="width=device-width, initial-scale=1" />',
@@ -69,13 +93,17 @@ export function assembleDocument(input) {
69
93
  `<meta http-equiv="Content-Security-Policy" content="${escapeAttribute(csp)}" />`,
70
94
  `<title>${escapeText(meta.title)}</title>`,
71
95
  description,
96
+ share,
72
97
  `<style nonce="${escapeAttribute(styleNonce)}">${input.css}</style>`,
73
98
  '</head>',
74
99
  '<body>',
75
100
  '<a class="ak-skip" href="#ak-main-content">Skip to main content</a>',
76
- '<div class="ak-shell">',
101
+ '<div class="ak-progress-rail" aria-hidden="true"></div>',
102
+ `<div class="ak-shell${outline === '' ? '' : ' ak-shell--outline'}">`,
77
103
  themeToggle,
78
104
  input.body,
105
+ outline,
106
+ colophon,
79
107
  '</div>',
80
108
  liveRegion,
81
109
  input.js === '' ? '' : `<script nonce="${escapeAttribute(scriptNonce)}">${input.js}</script>`,
@@ -1 +1 @@
1
- {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/render/document.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../src/render/document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Effects layer of the emitted stylesheet.
3
+ *
4
+ * Atmosphere and feedback shared by every page: a theme-tinted aurora behind the
5
+ * hero, a word-by-word title reveal, a film-grain page texture, a pointer
6
+ * spotlight on cards, and a shine on primary buttons. It also carries the window dots, which the terminal and the
7
+ * frame feature share. Block styles belong in feature sheets, never here.
8
+ *
9
+ * Rules: no selector may contain a feature marker (see `verify.ts`); motion is
10
+ * gated on `prefers-reduced-motion: no-preference`; nothing starts hidden unless
11
+ * it is already on screen; print drops all of it.
12
+ */
13
+ export declare const EFFECTS_CSS: string;
14
+ //# sourceMappingURL=effects-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects-styles.d.ts","sourceRoot":"","sources":["../../src/render/effects-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAcH,eAAO,MAAM,WAAW,QAoB2E,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Effects layer of the emitted stylesheet.
3
+ *
4
+ * Atmosphere and feedback shared by every page: a theme-tinted aurora behind the
5
+ * hero, a word-by-word title reveal, a film-grain page texture, a pointer
6
+ * spotlight on cards, and a shine on primary buttons. It also carries the window dots, which the terminal and the
7
+ * frame feature share. Block styles belong in feature sheets, never here.
8
+ *
9
+ * Rules: no selector may contain a feature marker (see `verify.ts`); motion is
10
+ * gated on `prefers-reduced-motion: no-preference`; nothing starts hidden unless
11
+ * it is already on screen; print drops all of it.
12
+ */
13
+ const EASE_OUT = 'cubic-bezier(.16,1,.3,1)';
14
+ /** A 160px fractal-noise tile, inlined so the page stays offline and CSP-clean. */
15
+ const GRAIN = `url("data:image/svg+xml,%3Csvg xmlns='http%3A//www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='g'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .6 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23g)'/%3E%3C/svg%3E")`;
16
+ /** Title words rise one after another; words past the last step share its delay. */
17
+ const WORD_STEPS = Array.from({ length: 14 }, (_, index) => `.ak-word:nth-child(${index + 1}) > span{animation-delay:${(0.08 + index * 0.055).toFixed(3)}s}`).join('');
18
+ export const EFFECTS_CSS = `::selection{background:color-mix(in srgb,var(--ak-color-accent) 26%,transparent)}
19
+ body{position:relative}
20
+ body::before{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background-image:${GRAIN};background-size:160px;opacity:.05}
21
+ .ak-hero{position:relative;isolation:isolate}
22
+ .ak-hero::before{content:"";position:absolute;z-index:-1;top:-40%;right:0;width:min(820px,78%);aspect-ratio:1.3;pointer-events:none;background:radial-gradient(closest-side at 36% 48%,color-mix(in srgb,var(--ak-color-accent) 34%,transparent),transparent),radial-gradient(closest-side at 70% 34%,color-mix(in srgb,var(--ak-color-info) 24%,transparent),transparent),radial-gradient(closest-side at 58% 72%,color-mix(in srgb,var(--ak-color-success) 16%,transparent),transparent);filter:blur(28px);opacity:.8}
23
+ .ak-word{display:inline-block;overflow:hidden;vertical-align:top;padding-bottom:.12em;margin-bottom:-.12em}
24
+ .ak-word > span{display:inline-block}
25
+ @keyframes ak-aurora{50%{transform:translate(-5%,7%) rotate(-5deg) scale(1.07)}}
26
+ @keyframes ak-rise{from{transform:translateY(108%)}to{transform:none}}
27
+ @media (prefers-reduced-motion:no-preference){.ak-hero::before{animation:ak-aurora 18s ease-in-out infinite}.ak-hero > h1:has(.ak-word){animation:none}.ak-word > span{animation:ak-rise calc(var(--ak-motion-duration) * 5.5) ${EASE_OUT} both}${WORD_STEPS}}
28
+ .ak-card,.ak-tile{position:relative;isolation:isolate}
29
+ .ak-card::after,.ak-tile::after{content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;background:radial-gradient(380px circle at var(--ak-mx,50%) var(--ak-my,-60%),color-mix(in srgb,var(--ak-color-accent) 13%,transparent),transparent 70%);opacity:0;transition:opacity calc(var(--ak-motion-duration) * 2) var(--ak-motion-easing)}
30
+ .ak-card:hover::after,.ak-tile:hover::after{opacity:1}
31
+ .ak-btn[data-variant="primary"]{position:relative;isolation:isolate;overflow:hidden}
32
+ .ak-btn[data-variant="primary"]::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(105deg,transparent 30%,color-mix(in srgb,var(--ak-color-accent-contrast) 34%,transparent) 50%,transparent 70%);translate:-110% 0}
33
+ @media (prefers-reduced-motion:no-preference){.ak-btn[data-variant="primary"]::after{transition:translate .9s ${EASE_OUT}}.ak-btn[data-variant="primary"]:hover::after{translate:110% 0}}
34
+ .ak-hero[data-align="center"]{align-items:center;text-align:center}
35
+ .ak-hero[data-align="center"]::before{right:auto;left:50%;translate:-50% 0}
36
+ .ak-window-dots{display:inline-flex;flex:none;gap:6px}
37
+ .ak-window-dots > span{width:10px;height:10px;border-radius:50%;background:currentColor;opacity:.32}
38
+ @media print{body::before,.ak-hero::before{display:none}.ak-word > span{animation:none!important}}`;
39
+ //# sourceMappingURL=effects-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effects-styles.js","sourceRoot":"","sources":["../../src/render/effects-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,QAAQ,GAAG,0BAA0B,CAAC;AAE5C,mFAAmF;AACnF,MAAM,KAAK,GAAG,+WAA+W,CAAC;AAE9X,oFAAoF;AACpF,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAC3B,EAAE,MAAM,EAAE,EAAE,EAAE,EACd,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACX,sBAAsB,KAAK,GAAG,CAAC,4BAA4B,CAAC,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CACnG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;;oGAEyE,KAAK;;;;;;;iOAOwH,QAAQ,SAAS,UAAU;;;;;;gHAM5I,QAAQ;;;;;mGAKrB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Generated by scripts/generate-embedded-fonts.mjs from assets/fonts. Do not edit.
3
+ *
4
+ * Variable WOFF2 subsets of SIL Open Font License 1.1 fonts, unmodified from
5
+ * their Fontsource packages. The licence texts ship in assets/fonts/<family>/OFL.txt.
6
+ */
7
+ export interface EmbeddedFont {
8
+ /** Namespaced family name a theme font stack refers to. */
9
+ family: string;
10
+ /** Upstream family name, for the licence notice. */
11
+ name: string;
12
+ /** Variable weight range. */
13
+ weight: string;
14
+ copyright: string;
15
+ /** Base64 WOFF2 data per subset. */
16
+ latin: string;
17
+ vietnamese: string;
18
+ }
19
+ export declare const LATIN_RANGE = "U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD";
20
+ export declare const VIETNAMESE_RANGE = "U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB";
21
+ export declare const EMBEDDED_FONTS: readonly EmbeddedFont[];
22
+ //# sourceMappingURL=embedded-fonts.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedded-fonts.generated.d.ts","sourceRoot":"","sources":["../../src/render/embedded-fonts.generated.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,6JAA6J,CAAC;AACtL,eAAO,MAAM,gBAAgB,iJAAiJ,CAAC;AAE/K,eAAO,MAAM,cAAc,EAAE,SAAS,YAAY,EAiDjD,CAAC"}