@dopame/acde-darwin-arm64 0.0.0-stage → 0.0.10

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 (165) hide show
  1. package/LICENSE +8 -0
  2. package/bin/acde +66 -0
  3. package/bin/acde.cmd +45 -0
  4. package/bin/acdebin-dbg +4 -0
  5. package/bin/app/brand/art.mjs +53 -0
  6. package/bin/app/brand/brand.css +39 -0
  7. package/bin/app/brand/lockup.mjs +17 -0
  8. package/bin/app/brand/mark.mjs +124 -0
  9. package/bin/app/dist/broker.js +1 -0
  10. package/bin/app/dist/web.js +1 -0
  11. package/bin/app/greet/index.html +177 -0
  12. package/bin/app/greet/package.json +16 -0
  13. package/bin/app/package.json +35 -0
  14. package/lib/acde/LICENSE +8 -0
  15. package/lib/acde/dist/chunk-0n69bv5q.js +1 -0
  16. package/lib/acde/dist/chunk-1cw92x19.js +1 -0
  17. package/lib/acde/dist/chunk-458e14zb.js +1 -0
  18. package/lib/acde/dist/chunk-88mxgp54.js +1 -0
  19. package/lib/acde/dist/chunk-8dv09ven.js +1 -0
  20. package/lib/acde/dist/chunk-8fxsj5h6.js +1 -0
  21. package/lib/acde/dist/chunk-8pf3kk8v.js +1 -0
  22. package/lib/acde/dist/chunk-8r65bz1e.js +1 -0
  23. package/lib/acde/dist/chunk-9hpnkmxn.js +1 -0
  24. package/lib/acde/dist/chunk-a7w41xr9.js +1 -0
  25. package/lib/acde/dist/chunk-db7qqt8a.js +1 -0
  26. package/lib/acde/dist/chunk-e3rzr5fj.js +1 -0
  27. package/lib/acde/dist/chunk-ehms6xjp.js +1 -0
  28. package/lib/acde/dist/chunk-ggykhab6.js +1 -0
  29. package/lib/acde/dist/chunk-gt70e8h2.js +1 -0
  30. package/lib/acde/dist/chunk-hcf0xd5c.js +1 -0
  31. package/lib/acde/dist/chunk-hdrvz9sa.js +1 -0
  32. package/lib/acde/dist/chunk-jjq2mn94.js +1 -0
  33. package/lib/acde/dist/chunk-k8f4m94e.js +7 -0
  34. package/lib/acde/dist/chunk-mtgy1bm0.js +1 -0
  35. package/lib/acde/dist/chunk-mtw6p7kv.js +1 -0
  36. package/lib/acde/dist/chunk-nwkq7cpp.js +1 -0
  37. package/lib/acde/dist/chunk-nyr54266.js +1 -0
  38. package/lib/acde/dist/chunk-p0h5kspx.js +1 -0
  39. package/lib/acde/dist/chunk-pdj3h86e.js +1 -0
  40. package/lib/acde/dist/chunk-q9dbzac5.js +1 -0
  41. package/lib/acde/dist/chunk-qrhbrjzk.js +1 -0
  42. package/lib/acde/dist/chunk-s8p0y5ap.js +1 -0
  43. package/lib/acde/dist/chunk-t0xqxe00.js +1 -0
  44. package/lib/acde/dist/chunk-tgn5c2mw.js +1 -0
  45. package/lib/acde/dist/chunk-wmj6zwvn.js +1 -0
  46. package/lib/acde/dist/chunk-wnk81fkc.js +1 -0
  47. package/lib/acde/dist/chunk-x208z38w.js +1 -0
  48. package/lib/acde/dist/chunk-xq76vbg6.js +1 -0
  49. package/lib/acde/dist/chunk-xr9gh5x2.js +1 -0
  50. package/lib/acde/dist/chunk-yytnhz6e.js +1 -0
  51. package/lib/acde/dist/chunk-z0ts25s1.js +1 -0
  52. package/lib/acde/dist/chunk-zdyw1ckt.js +1 -0
  53. package/lib/acde/dist/cli.js +1 -0
  54. package/lib/acde/dist/driver/index.js +1 -0
  55. package/lib/acde/dist/e2e/index.js +1 -0
  56. package/lib/acde/dist/types/configs.d.ts +1 -0
  57. package/lib/acde/dist/types/driver/acde.d.ts +106 -0
  58. package/lib/acde/dist/types/driver/clock.d.ts +32 -0
  59. package/lib/acde/dist/types/driver/expect.d.ts +60 -0
  60. package/lib/acde/dist/types/driver/format.d.ts +16 -0
  61. package/lib/acde/dist/types/driver/index.d.ts +13 -0
  62. package/lib/acde/dist/types/driver/input.d.ts +75 -0
  63. package/lib/acde/dist/types/driver/locator.d.ts +151 -0
  64. package/lib/acde/dist/types/driver/logs.d.ts +26 -0
  65. package/lib/acde/dist/types/driver/png.d.ts +31 -0
  66. package/lib/acde/dist/types/driver/poll.d.ts +4 -0
  67. package/lib/acde/dist/types/driver/screenshot.d.ts +37 -0
  68. package/lib/acde/dist/types/driver/trace.d.ts +26 -0
  69. package/lib/acde/dist/types/driver/types.d.ts +213 -0
  70. package/lib/acde/dist/types/driver/video.d.ts +14 -0
  71. package/lib/acde/dist/types/driver/window.d.ts +77 -0
  72. package/lib/acde/dist/types/e2e/index.d.ts +78 -0
  73. package/lib/acde/dist/types/e2e/settings.d.ts +39 -0
  74. package/lib/acde/dist/types/ipc.d.ts +24 -0
  75. package/lib/acde/dist/types/paths.d.ts +5 -0
  76. package/lib/acde/dist/types/pm.d.ts +20 -0
  77. package/lib/acde/dist/types/runtime.d.ts +49 -0
  78. package/lib/acde/dist/types/sessions.d.ts +80 -0
  79. package/lib/acde/dist/types/sockets.d.ts +4 -0
  80. package/lib/acde/launcher.d.mts +25 -0
  81. package/lib/acde/launcher.mjs +1 -0
  82. package/lib/acde/package.json +31 -0
  83. package/lib/acde/skills/acde/SKILL.md +114 -0
  84. package/lib/acde/skills/acde/references/guide/agents.md +50 -0
  85. package/lib/acde/skills/acde/references/guide/assets.md +40 -0
  86. package/lib/acde/skills/acde/references/guide/backend.md +94 -0
  87. package/lib/acde/skills/acde/references/guide/capabilities.md +157 -0
  88. package/lib/acde/skills/acde/references/guide/config.md +73 -0
  89. package/lib/acde/skills/acde/references/guide/desktop.md +165 -0
  90. package/lib/acde/skills/acde/references/guide/dev.md +66 -0
  91. package/lib/acde/skills/acde/references/guide/doctor.md +144 -0
  92. package/lib/acde/skills/acde/references/guide/files.md +181 -0
  93. package/lib/acde/skills/acde/references/guide/frameworks.md +74 -0
  94. package/lib/acde/skills/acde/references/guide/install.md +34 -0
  95. package/lib/acde/skills/acde/references/guide/mcp.md +64 -0
  96. package/lib/acde/skills/acde/references/guide/open.md +107 -0
  97. package/lib/acde/skills/acde/references/guide/services.md +147 -0
  98. package/lib/acde/skills/acde/references/guide/testing.md +378 -0
  99. package/lib/acde/skills/acde/references/guide/tools.md +291 -0
  100. package/lib/acde/skills/acde/references/guide/window.md +167 -0
  101. package/lib/acde/skills/acde/references/reference/cli.md +221 -0
  102. package/lib/acde/skills/acde/references/reference/config.md +51 -0
  103. package/lib/acde/skills/acde/references/reference/env.md +44 -0
  104. package/lib/acde/skills/acde/references/reference/manifest.md +92 -0
  105. package/lib/acde/skills/acde/references/reference/modules.md +586 -0
  106. package/lib/acde/skills/acde/references/reference/platforms.md +23 -0
  107. package/lib/acde/skills/acde/references/reference/service.md +47 -0
  108. package/lib/acde/skills/acde/references/reference/testing.md +265 -0
  109. package/lib/acde/skills/acde/references/reference/web.md +94 -0
  110. package/lib/acde/skills/acde/references/start/first-app.md +87 -0
  111. package/lib/acde/skills/acde/references/start/install.md +232 -0
  112. package/lib/acde/skills/acde/references/start/project.md +77 -0
  113. package/lib/acde/templates/app/acde.config.jsonc +27 -0
  114. package/lib/acde/templates/app/gitignore +2 -0
  115. package/lib/acde/templates/app/index.html +22 -0
  116. package/lib/acde/templates/app/package.json +5 -0
  117. package/lib/acde/templates/app/src/i18n.js +26 -0
  118. package/lib/acde/templates/app/src/locales/en.js +4 -0
  119. package/lib/acde/templates/app/src/locales/zh.js +4 -0
  120. package/lib/acde/templates/app/src/main.js +5 -0
  121. package/lib/acde/templates/backend/server.ts +7 -0
  122. package/lib/acde/templates/backend/src/main.js +6 -0
  123. package/lib/acde/templates/desktop/acde.config.jsonc +17 -0
  124. package/lib/acde/templates/desktop/gitignore +2 -0
  125. package/lib/acde/templates/desktop/index.html +19 -0
  126. package/lib/acde/templates/desktop/package.json +5 -0
  127. package/lib/acde/templates/desktop/src/desktop.js +16 -0
  128. package/lib/acde/templates/desktop/src/i18n.js +26 -0
  129. package/lib/acde/templates/desktop/src/locales/en.js +4 -0
  130. package/lib/acde/templates/desktop/src/locales/zh.js +4 -0
  131. package/lib/acde/templates/framework/acde.config.jsonc +26 -0
  132. package/lib/acde-api/LICENSE +5 -0
  133. package/lib/acde-api/config.schema.json +563 -0
  134. package/lib/acde-api/package.json +51 -0
  135. package/lib/acde-api/src/app.d.ts +36 -0
  136. package/lib/acde-api/src/frame.d.ts +15 -0
  137. package/lib/acde-api/src/frame.js +1 -0
  138. package/lib/acde-api/src/index.d.ts +11 -0
  139. package/lib/acde-api/src/index.js +1 -0
  140. package/lib/acde-api/src/modules/app-modules.d.ts +81 -0
  141. package/lib/acde-api/src/modules/modules.d.ts +113 -0
  142. package/lib/acde-api/src/modules/shell-modules.d.ts +32 -0
  143. package/lib/acde-api/src/runtime/level.d.ts +1 -0
  144. package/lib/acde-api/src/runtime/level.js +1 -0
  145. package/lib/acde-api/src/runtime/load.d.ts +8 -0
  146. package/lib/acde-api/src/runtime/load.js +1 -0
  147. package/lib/acde-api/src/runtime/places.d.ts +3 -0
  148. package/lib/acde-api/src/runtime/places.js +1 -0
  149. package/lib/acde-api/src/runtime/platforms.d.ts +5 -0
  150. package/lib/acde-api/src/runtime/platforms.js +1 -0
  151. package/lib/acde-api/src/shell.d.ts +14 -0
  152. package/lib/acde-api/src/types/capabilities.d.ts +34 -0
  153. package/lib/acde-api/src/types/config.d.ts +55 -0
  154. package/lib/acde-api/src/types/events.d.ts +151 -0
  155. package/lib/acde-api/src/types/manifest.d.ts +83 -0
  156. package/lib/acde-api/src/types/office.d.ts +118 -0
  157. package/lib/acde-api/src/types/page.d.ts +1090 -0
  158. package/lib/acde-api/src/types/permissions.d.ts +50 -0
  159. package/lib/acde-api/src/types/service.d.ts +35 -0
  160. package/lib/acde-api/src/validate.d.ts +64 -0
  161. package/lib/acde-api/src/validate.js +1 -0
  162. package/lib/acde-api/src/vite.d.ts +3 -0
  163. package/lib/acde-api/src/vite.js +9 -0
  164. package/package.json +11 -4
  165. package/README.md +0 -3
package/LICENSE ADDED
@@ -0,0 +1,8 @@
1
+ Copyright (c) 2026 Dopame. All rights reserved.
2
+
3
+ This software is proprietary and confidential. No part of it may be
4
+ copied, modified, distributed or used without prior written permission
5
+ from Dopame.
6
+
7
+ Third-party code keeps its own license (see the package metadata of each
8
+ dependency).
package/bin/acde ADDED
@@ -0,0 +1,66 @@
1
+ #!/bin/sh
2
+ self=$0
3
+ while [ -h "$self" ]; do
4
+ link=$(readlink "$self")
5
+ case $link in
6
+ /*) self=$link ;;
7
+ *) self=$(dirname "$self")/$link ;;
8
+ esac
9
+ done
10
+ bin=$(cd -P "$(dirname "$self")" && pwd -P) || exit 1
11
+ cli=$(dirname "$bin")/lib/acde/dist/cli.js
12
+ at_least() {
13
+ major=${1%%.*}
14
+ minor=0
15
+ case $1 in
16
+ *.*) minor=${1#*.} && minor=${minor%%.*} ;;
17
+ esac
18
+ case $major$minor in
19
+ '' | *[!0-9]*) return 1 ;;
20
+ esac
21
+ [ "$major" -gt "$2" ] || { [ "$major" -eq "$2" ] && [ "$minor" -ge "$3" ]; }
22
+ }
23
+ cache=$(dirname "$bin")/lib/runtime-cache
24
+ bun=$(command -v bun 2>/dev/null) || bun=
25
+ node=$(command -v node 2>/dev/null) || node=
26
+ key="bun $bun node $node"
27
+ fresh() {
28
+ [ -z "$1" ] || [ ! "$1" -nt "$cache" ]
29
+ }
30
+ if [ -f "$cache" ] && fresh "$bun" && fresh "$node"; then
31
+ { IFS= read -r cached_key && IFS= read -r chosen; } <"$cache" 2>/dev/null || cached_key=
32
+ if [ "$cached_key" = "$key" ] && [ -n "$chosen" ] && [ -x "$chosen" ]; then
33
+ exec "$chosen" "$cli" "$@"
34
+ fi
35
+ fi
36
+ remember() {
37
+ { printf '%s\n%s\n' "$key" "$1" >"$cache"; } 2>/dev/null || :
38
+ }
39
+ bun_version=
40
+ node_version=
41
+ if [ -n "$bun" ]; then
42
+ bun_version=$("$bun" --version 2>/dev/null)
43
+ if at_least "$bun_version" 1 4; then
44
+ remember "$bun"
45
+ exec "$bun" "$cli" "$@"
46
+ fi
47
+ fi
48
+ if [ -n "$node" ]; then
49
+ node_version=$("$node" -p "process.versions.bun ? '' : process.versions.node" 2>/dev/null)
50
+ if at_least "$node_version" 22 3; then
51
+ remember "$node"
52
+ exec "$node" "$cli" "$@"
53
+ fi
54
+ fi
55
+ if [ -n "$bun_version" ]; then
56
+ echo "acde: needs Bun 1.4 or newer, and the bun on PATH is $bun_version:" \
57
+ "update it (bun upgrade, or https://bun.sh)" >&2
58
+ exit 1
59
+ fi
60
+ if [ -n "$node_version" ]; then
61
+ echo "acde: needs Node.js 22.3 or newer, and the node on PATH is $node_version: update it (https://nodejs.org)" >&2
62
+ exit 1
63
+ fi
64
+ echo "acde: needs Bun 1.4+ or Node.js 22.3+ and there is neither on PATH:" \
65
+ "install one of them, Bun (https://bun.sh) or Node.js (https://nodejs.org)" >&2
66
+ exit 1
package/bin/acde.cmd ADDED
@@ -0,0 +1,45 @@
1
+ @echo off
2
+ setlocal
3
+ set "ACDE_CLI=%~dp0..\lib\acde\dist\cli.js"
4
+ set "ACDE_CACHE=%~dp0..\lib\runtime-cache"
5
+ set "ACDE_BUN="
6
+ set "ACDE_NODE="
7
+ for /f "delims=" %%p in ('where bun.exe 2^>nul') do if not defined ACDE_BUN set "ACDE_BUN=%%p"
8
+ for /f "delims=" %%p in ('where node.exe 2^>nul') do if not defined ACDE_NODE set "ACDE_NODE=%%p"
9
+ set "ACDE_KEY=bun"
10
+ if defined ACDE_BUN for %%f in ("%ACDE_BUN%") do set "ACDE_KEY=bun?%%~ff?%%~tf?%%~zf"
11
+ if defined ACDE_NODE for %%f in ("%ACDE_NODE%") do set "ACDE_KEY=%ACDE_KEY%?node?%%~ff?%%~tf?%%~zf"
12
+ set "ACDE_CACHED_KEY="
13
+ set "ACDE_CHOSEN="
14
+ if exist "%ACDE_CACHE%" for /f "usebackq tokens=1,2 delims=*" %%a in ("%ACDE_CACHE%") do (
15
+ set "ACDE_CACHED_KEY=%%a"
16
+ set "ACDE_CHOSEN=%%b"
17
+ )
18
+ if not defined ACDE_CHOSEN goto probe
19
+ if not "%ACDE_CACHED_KEY%"=="%ACDE_KEY%" goto probe
20
+ if not exist "%ACDE_CHOSEN%" goto probe
21
+ "%ACDE_CHOSEN%" "%ACDE_CLI%" %*
22
+ exit /b %errorlevel%
23
+ :probe
24
+ if not defined ACDE_BUN goto node
25
+ "%ACDE_BUN%" -e "const [a,b]=process.versions.bun.split('.').map(Number);process.exit(a>1||(a===1&&b>=4)?0:1)" >nul 2>&1 || goto node
26
+ >"%ACDE_CACHE%" 2>nul echo %ACDE_KEY%*%ACDE_BUN%
27
+ "%ACDE_BUN%" "%ACDE_CLI%" %*
28
+ exit /b %errorlevel%
29
+ :node
30
+ if not defined ACDE_NODE goto old
31
+ "%ACDE_NODE%" -e "const [a,b]=process.versions.node.split('.').map(Number);process.exit(!process.versions.bun&&(a>22||(a===22&&b>=3))?0:1)" >nul 2>&1 || goto old
32
+ >"%ACDE_CACHE%" 2>nul echo %ACDE_KEY%*%ACDE_NODE%
33
+ "%ACDE_NODE%" "%ACDE_CLI%" %*
34
+ exit /b %errorlevel%
35
+ :old
36
+ if defined ACDE_BUN goto oldbun
37
+ if defined ACDE_NODE goto oldnode
38
+ echo acde: needs Bun 1.4+ or Node.js 22.3+ and there is neither on PATH: install one of them, Bun (https://bun.sh) or Node.js (https://nodejs.org) 1>&2
39
+ exit /b 1
40
+ :oldbun
41
+ for /f "delims=" %%v in ('call "%ACDE_BUN%" --version') do echo acde: needs Bun 1.4 or newer, and the bun on PATH is %%v: update it (bun upgrade, or https://bun.sh) 1>&2
42
+ exit /b 1
43
+ :oldnode
44
+ for /f "delims=" %%v in ('call "%ACDE_NODE%" --version') do echo acde: needs Node.js 22.3 or newer, and the node on PATH is %%v: update it (https://nodejs.org) 1>&2
45
+ exit /b 1
@@ -0,0 +1,4 @@
1
+ [diffend] Oversized file quarantined before diffing.
2
+ name: package/bin/acdebin-dbg
3
+ size: 72644848 bytes
4
+ sha256: 449c1cd36284adf49a5f7850563cf0478fb87d86cf5a504af42f405521469392
@@ -0,0 +1,53 @@
1
+ export default {
2
+ source: "dopame_logo_1103.ai",
3
+ rays: [
4
+ {"d":"M0.1082 0.4149 C0.1088 0.4149 0.1117 0.4152 0.1138 0.4158 C0.1455 0.4239 0.3321 0.4887 0.3321 0.4887 C0.3321 0.4887 0.1057 0.451 0.1046 0.4508 C0.0963 0.4491 0.0901 0.4418 0.0901 0.433 C0.0901 0.423 0.0982 0.4149 0.1082 0.4149","color":"#F768A8","capsule":[0.3321,0.4887,0.1128,0.4292,0,0.0235]},
5
+ {"d":"M0.1146 0.3308 C0.1239 0.3343 0.3578 0.4759 0.3578 0.4759 C0.3578 0.4759 0.1112 0.3682 0.1018 0.3647 C0.0925 0.3612 0.0877 0.3507 0.0912 0.3414 C0.0948 0.332 0.1052 0.3273 0.1146 0.3308","color":"#F97491","capsule":[0.3578,0.4759,0.1182,0.3448,0,0.0267]},
6
+ {"d":"M0.1171 0.2466 C0.1258 0.2515 0.381 0.4635 0.381 0.4635 C0.381 0.4635 0.1081 0.2831 0.0994 0.2782 C0.0906 0.2733 0.0875 0.2623 0.0924 0.2536 C0.0973 0.2448 0.1083 0.2417 0.1171 0.2466","color":"#FB7E80","capsule":[0.381,0.4635,0.1184,0.2611,0,0.0266]},
7
+ {"d":"M0.1338 0.165 C0.1375 0.1683 0.3977 0.444 0.3977 0.444 C0.3977 0.444 0.1107 0.1932 0.1096 0.1922 C0.1071 0.1899 0.1054 0.187 0.1046 0.1836 C0.1036 0.1789 0.1045 0.1735 0.1077 0.1689 C0.111 0.1643 0.1157 0.1615 0.1205 0.1609 C0.1253 0.1602 0.1301 0.1617 0.1338 0.165","color":"#F98871","capsule":[0.3977,0.444,0.126,0.179,0,0.021]},
8
+ {"d":"M0.1934 0.1064 C0.1957 0.1109 0.4168 0.4293 0.4168 0.4293 C0.4168 0.4293 0.1665 0.1301 0.1633 0.1263 C0.16 0.1225 0.1587 0.1177 0.1595 0.1129 C0.1602 0.1081 0.1631 0.1035 0.1678 0.1004 C0.1725 0.0973 0.1779 0.0965 0.1826 0.0976 C0.1873 0.0989 0.1912 0.102 0.1934 0.1064","color":"#FA935B","capsule":[0.4168,0.4293,0.1773,0.1217,0,0.0231]},
9
+ {"d":"M0.4338 0.4114 C0.4338 0.4114 0.2417 0.0988 0.2404 0.0939 C0.239 0.0891 0.2398 0.0842 0.2425 0.0802 C0.2438 0.0781 0.2457 0.0764 0.2478 0.075 C0.25 0.0736 0.2525 0.0727 0.2553 0.0723 C0.2611 0.0714 0.2654 0.073 0.2692 0.0758 C0.2714 0.0775 0.2732 0.0797 0.2745 0.0823 C0.2753 0.084 0.4338 0.4114 0.4338 0.4114","color":"#FC9E48","capsule":[0.4338,0.4114,0.2592,0.0906,0,0.0193]},
10
+ {"d":"M0.3609 0.0855 C0.3635 0.0951 0.4505 0.389 0.4505 0.389 C0.4505 0.389 0.3284 0.1044 0.3259 0.0947 C0.3233 0.085 0.3291 0.0751 0.3388 0.0725 C0.3485 0.07 0.3584 0.0758 0.3609 0.0855","color":"#FEA638","capsule":[0.4505,0.389,0.3389,0.1003,0,0.027]},
11
+ {"d":"M0.4681 0.3603 C0.4681 0.3603 0.4062 0.1001 0.4062 0.0901 C0.4062 0.0801 0.4144 0.072 0.4244 0.072 C0.4328 0.072 0.4398 0.0777 0.4419 0.0854 C0.4423 0.0869 0.4681 0.3603 0.4681 0.3603","color":"#FDB027","capsule":[0.4681,0.3603,0.4189,0.0962,0,0.0247]},
12
+ {"d":"M0.532 0.093 C0.5314 0.098 0.4964 0.3395 0.4964 0.3395 C0.4964 0.3395 0.4957 0.1004 0.4959 0.0904 C0.4961 0.0804 0.5048 0.0723 0.5153 0.0732 C0.5205 0.0736 0.5251 0.076 0.5281 0.0796 C0.5311 0.0833 0.5326 0.088 0.532 0.093","color":"#FEB718","capsule":[0.4964,0.3395,0.5039,0.1005,0,0.0283]},
13
+ {"d":"M0.6151 0.1117 C0.6135 0.1164 0.5168 0.3806 0.5168 0.3806 C0.5168 0.3806 0.5791 0.1065 0.5803 0.1016 C0.5815 0.0967 0.5845 0.0928 0.5886 0.0904 C0.5927 0.088 0.5978 0.0874 0.6028 0.0889 C0.6079 0.0903 0.6118 0.0935 0.614 0.0978 C0.6162 0.102 0.6167 0.1069 0.6151 0.1117","color":"#FEBE11","capsule":[0.5168,0.3806,0.5916,0.11,0,0.0234]},
14
+ {"d":"M0.6925 0.1471 C0.69 0.1514 0.5356 0.4087 0.5356 0.4087 C0.5356 0.4087 0.6564 0.139 0.6606 0.13 C0.6649 0.1209 0.6759 0.1175 0.6853 0.1223 C0.6876 0.1234 0.6895 0.1251 0.691 0.127 C0.6925 0.1289 0.6936 0.1311 0.6943 0.1334 C0.6956 0.1379 0.6951 0.1428 0.6925 0.1471","color":"#FEC30C","capsule":[0.5356,0.4087,0.6636,0.143,0,0.0283]},
15
+ {"d":"M0.761 0.1978 C0.7542 0.205 0.5528 0.4331 0.5528 0.4331 C0.5528 0.4331 0.7301 0.1785 0.7332 0.1746 C0.7362 0.1706 0.7406 0.1683 0.7453 0.1678 C0.7499 0.1673 0.755 0.1685 0.759 0.172 C0.7669 0.1789 0.7679 0.1904 0.761 0.1978","color":"#FFC403","capsule":[0.5528,0.4331,0.7408,0.1872,0,0.0235]},
16
+ {"d":"M0.8175 0.2615 C0.8134 0.2644 0.5757 0.4502 0.5757 0.4502 C0.5757 0.4502 0.7875 0.2397 0.7951 0.233 C0.8025 0.2265 0.8144 0.2274 0.8208 0.2358 C0.824 0.24 0.8254 0.2448 0.8247 0.2496 C0.824 0.2543 0.8215 0.2586 0.8175 0.2615","color":"#FEBD12","capsule":[0.5757,0.4502,0.7942,0.2463,0,0.0276]},
17
+ {"d":"M0.8597 0.3354 C0.8552 0.3374 0.598 0.4649 0.598 0.4649 C0.598 0.4649 0.8393 0.3054 0.8437 0.3029 C0.8481 0.3005 0.8532 0.3001 0.8575 0.3015 C0.862 0.303 0.8659 0.3063 0.8683 0.311 C0.8708 0.3156 0.8708 0.3208 0.8692 0.3253 C0.8676 0.3297 0.8643 0.3334 0.8597 0.3354","color":"#FDBA16","capsule":[0.598,0.4649,0.8497,0.3271,0,0.0241]},
18
+ {"d":"M0.8858 0.4165 C0.876 0.4184 0.625 0.4805 0.625 0.4805 C0.625 0.4805 0.8673 0.3844 0.8768 0.3814 C0.8864 0.3784 0.8965 0.3842 0.8993 0.3943 C0.9017 0.4046 0.8956 0.4145 0.8858 0.4165","color":"#FDB420","capsule":[0.625,0.4805,0.8811,0.4,0,0.0191]},
19
+ {"d":"M0.8946 0.5012 C0.8846 0.5011 0.6488 0.5003 0.6488 0.5003 C0.6488 0.5003 0.8879 0.4654 0.8929 0.465 C0.8979 0.4646 0.9026 0.4662 0.9061 0.4694 C0.9079 0.4709 0.9093 0.4728 0.9104 0.475 C0.9115 0.4772 0.9122 0.4797 0.9122 0.4823 C0.9125 0.4928 0.9046 0.5013 0.8946 0.5012","color":"#FCAC2D","capsule":[0.6488,0.5003,0.8914,0.4813,0,0.0209]},
20
+ {"d":"M0.8856 0.5859 C0.876 0.5838 0.6125 0.5264 0.6125 0.5264 C0.6125 0.5264 0.8865 0.5496 0.8915 0.5501 C0.8965 0.5507 0.9007 0.5533 0.9035 0.5571 C0.9063 0.5609 0.9079 0.5659 0.9068 0.571 C0.905 0.5814 0.8956 0.5881 0.8856 0.5859","color":"#FBA63A","capsule":[0.6125,0.5264,0.8845,0.5628,0,0.0236]},
21
+ {"d":"M0.8592 0.6668 C0.8546 0.6648 0.5827 0.5474 0.5827 0.5474 C0.5827 0.5474 0.8677 0.6315 0.8725 0.6331 C0.8772 0.6347 0.8808 0.6382 0.8828 0.6425 C0.8838 0.6446 0.8844 0.647 0.8844 0.6494 C0.8845 0.6518 0.884 0.6543 0.883 0.6568 C0.8811 0.6616 0.8775 0.6653 0.8732 0.6671 C0.8687 0.6689 0.8637 0.6689 0.8592 0.6668","color":"#FC9E49","capsule":[0.5827,0.5474,0.8589,0.6531,0,0.0237]},
22
+ {"d":"M0.8165 0.7405 C0.8124 0.7375 0.5599 0.5647 0.5599 0.5647 C0.5599 0.5647 0.8322 0.7077 0.8365 0.7103 C0.8408 0.7129 0.8437 0.717 0.8447 0.7216 C0.8457 0.7262 0.8448 0.7312 0.8419 0.7356 C0.8405 0.7378 0.8387 0.7396 0.8367 0.741 C0.8346 0.7423 0.8324 0.7432 0.83 0.7436 C0.8254 0.7444 0.8205 0.7434 0.8165 0.7405","color":"#FB9557","capsule":[0.5599,0.5647,0.8223,0.7266,0,0.0214]},
23
+ {"d":"M0.7596 0.8039 C0.753 0.7964 0.5399 0.5863 0.5399 0.5863 C0.5399 0.5863 0.778 0.7717 0.7854 0.7784 C0.7928 0.7852 0.7929 0.7968 0.7855 0.8043 C0.7779 0.8116 0.7663 0.8113 0.7596 0.8039","color":"#FC8C67","capsule":[0.5399,0.5863,0.7566,0.7914,0,0.0294]},
24
+ {"d":"M0.691 0.8543 C0.6885 0.85 0.5212 0.614 0.5212 0.614 C0.5212 0.614 0.7185 0.8305 0.7214 0.8346 C0.7243 0.8387 0.7252 0.8435 0.7243 0.8482 C0.7234 0.8528 0.7207 0.8573 0.7163 0.86 C0.7119 0.8628 0.7068 0.8636 0.7022 0.8626 C0.6977 0.8616 0.6935 0.8586 0.691 0.8543","color":"#FB8477","capsule":[0.5212,0.614,0.6967,0.843,0,0.0249]},
25
+ {"d":"M0.6136 0.8898 C0.6104 0.8802 0.5081 0.6472 0.5081 0.6472 C0.5081 0.6472 0.6453 0.8721 0.6473 0.8767 C0.6494 0.8812 0.6493 0.8862 0.6475 0.8906 C0.6457 0.8951 0.642 0.8985 0.6372 0.9005 C0.6274 0.9044 0.6167 0.8992 0.6136 0.8898","color":"#F97A89","capsule":[0.5081,0.6472,0.6149,0.8774,0,0.0299]},
26
+ {"d":"M0.5305 0.9087 C0.53 0.9037 0.4935 0.6739 0.4935 0.6739 C0.4935 0.6739 0.5652 0.8979 0.5663 0.9028 C0.5673 0.9076 0.5663 0.9127 0.5636 0.9164 C0.5609 0.9203 0.5566 0.9231 0.5515 0.924 C0.5489 0.9244 0.5464 0.9244 0.544 0.9238 C0.5416 0.9232 0.5394 0.9221 0.5375 0.9207 C0.5337 0.9179 0.5312 0.9136 0.5305 0.9087","color":"#FA7197","capsule":[0.4935,0.6739,0.5442,0.9032,0,0.0217]},
27
+ {"d":"M0.4454 0.9119 C0.4454 0.9019 0.4685 0.64 0.4685 0.64 C0.4685 0.64 0.4816 0.9019 0.4816 0.9118 C0.4816 0.9219 0.4735 0.93 0.4635 0.93 C0.4535 0.93 0.4454 0.9219 0.4454 0.9119","color":"#F769A8","capsule":[0.4685,0.64,0.4549,0.9023,0,0.0277]},
28
+ {"d":"M0.3601 0.9119 C0.3601 0.9019 0.4452 0.606 0.4452 0.606 C0.4452 0.606 0.3963 0.9019 0.3963 0.9119 C0.3963 0.9219 0.3882 0.93 0.3782 0.93 C0.3682 0.93 0.3601 0.9219 0.3601 0.9119","color":"#F861B4","capsule":[0.4452,0.606,0.3741,0.9052,0,0.0255]},
29
+ {"d":"M0.2747 0.9119 C0.2747 0.9111 0.2742 0.9085 0.2758 0.9044 C0.2954 0.8552 0.4241 0.5864 0.4241 0.5864 C0.4241 0.5864 0.3102 0.9179 0.3088 0.9204 C0.3058 0.9261 0.2998 0.93 0.2929 0.93 C0.2828 0.93 0.2747 0.9219 0.2747 0.9119","color":"#F75AC1","capsule":[0.4241,0.5864,0.2907,0.9109,0,0.0207]},
30
+ {"d":"M0.1922 0.8949 C0.1945 0.8904 0.4059 0.5651 0.4059 0.5651 C0.4059 0.5651 0.2245 0.9118 0.2232 0.9136 C0.2217 0.9156 0.2197 0.9173 0.2174 0.9185 C0.2131 0.9207 0.2076 0.9211 0.2024 0.9192 C0.1998 0.9181 0.1975 0.9167 0.1956 0.9149 C0.1938 0.9131 0.1924 0.911 0.1914 0.9088 C0.1896 0.9043 0.1899 0.8993 0.1922 0.8949","color":"#F554CB","capsule":[0.4059,0.5651,0.208,0.8988,0,0.0208]},
31
+ {"d":"M0.3814 0.5467 C0.3814 0.5467 0.1563 0.8624 0.1528 0.8659 C0.1492 0.8695 0.1445 0.8711 0.1397 0.8708 C0.1349 0.8704 0.1299 0.8679 0.1265 0.8635 C0.1248 0.8613 0.1236 0.8588 0.123 0.8563 C0.1223 0.8538 0.1222 0.8513 0.1226 0.8489 C0.1227 0.8485 0.1231 0.8454 0.1264 0.8414 C0.1627 0.7965 0.3814 0.5467 0.3814 0.5467","color":"#F652D0","capsule":[0.3814,0.5467,0.1418,0.8528,0,0.0192]},
32
+ {"d":"M0.3622 0.5328 C0.3622 0.5328 0.1213 0.7873 0.1199 0.7884 C0.1177 0.7901 0.1151 0.7914 0.1122 0.7921 C0.1073 0.7933 0.1023 0.7923 0.0985 0.7894 C0.0966 0.7879 0.0949 0.7861 0.0935 0.7838 C0.0923 0.7816 0.0915 0.779 0.0911 0.7762 C0.0906 0.7707 0.0922 0.7654 0.0955 0.7618 C0.0987 0.7582 0.3622 0.5328 0.3622 0.5328","color":"#F650D2","capsule":[0.3622,0.5328,0.1087,0.773,0,0.019]},
33
+ {"d":"M0.3391 0.5203 C0.3391 0.5203 0.119 0.7037 0.1171 0.7048 C0.1145 0.7063 0.1115 0.7071 0.1082 0.7071 C0.0982 0.7071 0.0901 0.699 0.0901 0.689 C0.0901 0.6845 0.0918 0.6804 0.0945 0.6772 C0.0978 0.6733 0.3391 0.5203 0.3391 0.5203","color":"#F650D1","capsule":[0.3391,0.5203,0.1069,0.687,0,0.0207]},
34
+ {"d":"M0.3148 0.5115 C0.3148 0.5115 0.1169 0.6201 0.1128 0.6212 C0.1114 0.6216 0.1098 0.6218 0.1082 0.6218 C0.0982 0.6218 0.0901 0.6137 0.0901 0.6037 C0.0901 0.5987 0.0921 0.5942 0.0954 0.5909 C0.0977 0.5886 0.1005 0.5869 0.1037 0.5861 C0.1051 0.5858 0.3148 0.5115 0.3148 0.5115","color":"#F653CA","capsule":[0.3148,0.5115,0.1083,0.6054,0,0.02]},
35
+ {"d":"M0.1082 0.5003 C0.1182 0.5003 0.2965 0.501 0.2965 0.501 C0.2965 0.501 0.1182 0.5365 0.1082 0.5365 C0.0982 0.5365 0.0901 0.5284 0.0901 0.5184 C0.0901 0.5084 0.0982 0.5003 0.1082 0.5003","color":"#F85CBF","capsule":[0.2965,0.501,0.1167,0.5248,0,0.0268]},
36
+ ],
37
+ spark: "M0.0002 1 C-0.084 0.4976 -0.4729 0.0985 -0.9702 0 C-0.4729 -0.0988 -0.084 -0.4976 0.0002 -1 C0.084 -0.4976 0.4729 -0.0988 0.9702 0 C0.4729 0.0985 0.084 0.4976 0.0002 1",
38
+ word: [
39
+ {"char":"D","d":"M1.5347 0.5036 C1.5347 0.406 1.4695 0.3309 1.3746 0.3309 L1.256 0.3309 L1.256 0.6762 L1.3746 0.6762 C1.4695 0.6762 1.5347 0.6011 1.5347 0.5036 M1.5933 0.5036 C1.5933 0.6314 1.5018 0.7342 1.3746 0.7342 L1.1947 0.7342 L1.1947 0.2729 L1.3746 0.2729 C1.5018 0.2729 1.5933 0.3757 1.5933 0.5036","x0":1.1947,"x1":1.5933},
40
+ {"char":"o","d":"M1.9202 0.5694 C1.9202 0.5029 1.8694 0.4522 1.8035 0.4522 C1.7383 0.4522 1.6876 0.5029 1.6876 0.5694 C1.6876 0.636 1.7383 0.6868 1.8035 0.6868 C1.8694 0.6868 1.9202 0.636 1.9202 0.5694 M1.6303 0.5694 C1.6303 0.4719 1.7073 0.3962 1.8035 0.3962 C1.8997 0.3962 1.9775 0.4719 1.9775 0.5694 C1.9775 0.667 1.8997 0.7428 1.8035 0.7428 C1.7073 0.7428 1.6303 0.667 1.6303 0.5694","x0":1.6303,"x1":1.9775},
41
+ {"char":"p","d":"M2.3036 0.5694 C2.3036 0.5023 2.2528 0.4515 2.1869 0.4515 C2.1204 0.4515 2.0697 0.5023 2.0697 0.5694 C2.0697 0.6367 2.1204 0.6874 2.1869 0.6874 C2.2528 0.6874 2.3036 0.6367 2.3036 0.5694 M2.3609 0.5694 C2.3609 0.667 2.2858 0.7428 2.1942 0.7428 C2.1382 0.7428 2.096 0.7177 2.0697 0.6775 L2.0697 0.866 L2.0123 0.866 L2.0123 0.4047 L2.0697 0.4047 L2.0697 0.4614 C2.096 0.4212 2.1382 0.3962 2.1942 0.3962 C2.2858 0.3962 2.3609 0.4719 2.3609 0.5694","x0":2.0123,"x1":2.3609},
42
+ {"char":"a","d":"M2.6758 0.5694 C2.6758 0.5023 2.6251 0.4515 2.5586 0.4515 C2.4927 0.4515 2.4419 0.5023 2.4419 0.5694 C2.4419 0.6367 2.4927 0.6874 2.5586 0.6874 C2.6251 0.6874 2.6758 0.6367 2.6758 0.5694 M2.7332 0.4047 L2.7332 0.7342 L2.6758 0.7342 L2.6758 0.6775 C2.6495 0.7177 2.6073 0.7428 2.5513 0.7428 C2.4597 0.7428 2.3846 0.667 2.3846 0.5694 C2.3846 0.4719 2.4597 0.3962 2.5513 0.3962 C2.6073 0.3962 2.6495 0.4212 2.6758 0.4614 L2.6758 0.4047ZM2.7332 0.4047","x0":2.3846,"x1":2.7332},
43
+ {"char":"m","d":"M3.2669 0.5293 L3.2669 0.7342 L3.2096 0.7342 L3.2096 0.5312 C3.2096 0.4792 3.1806 0.4508 3.1371 0.4508 C3.091 0.4508 3.0561 0.4798 3.0561 0.551 L3.0561 0.7342 L2.9988 0.7342 L2.9988 0.5312 C2.9988 0.4792 2.9717 0.4508 2.9289 0.4508 C2.8847 0.4508 2.8446 0.4798 2.8446 0.551 L2.8446 0.7342 L2.7872 0.7342 L2.7872 0.4047 L2.8446 0.4047 L2.8446 0.4489 C2.8683 0.412 2.9025 0.3962 2.9427 0.3962 C2.9875 0.3962 3.0205 0.4166 3.0396 0.4522 C3.0627 0.4146 3.1002 0.3962 3.1431 0.3962 C3.2162 0.3962 3.2669 0.4469 3.2669 0.5293","x0":2.7872,"x1":3.2669},
44
+ {"char":"e","d":"M3.3723 0.5457 L3.5924 0.5457 C3.5826 0.4805 3.5358 0.4502 3.4863 0.4502 C3.4244 0.4502 3.3816 0.4884 3.3723 0.5457 M3.4916 0.6887 C3.5371 0.6887 3.57 0.6676 3.5865 0.6406 L3.6352 0.6683 C3.6063 0.7131 3.5562 0.7428 3.4903 0.7428 C3.3842 0.7428 3.3137 0.6683 3.3137 0.5694 C3.3137 0.4719 3.3835 0.3962 3.4863 0.3962 C3.5858 0.3962 3.6504 0.4779 3.6504 0.5701 C3.6504 0.5787 3.6497 0.5872 3.6484 0.5958 L3.3723 0.5958 C3.3835 0.6551 3.4303 0.6887 3.4916 0.6887","x0":3.3137,"x1":3.6504},
45
+ ],
46
+ wordSpark: [3.2977,0.3597,0.086],
47
+ wordBaseline: 0.7342,
48
+ wordWidth: 3.6504,
49
+ tile: "M0.7256 1 L0.2744 1 C0.1229 1 0 0.8771 0 0.7256 L0 0.2744 C0 0.1229 0.1229 0 0.2744 0 L0.7256 0 C0.8771 0 1 0.1229 1 0.2744 L1 0.7256 C1 0.8771 0.8771 1 0.7256 1",
50
+ tileMark: [0.1301,0.1302,0.7381],
51
+ gradient: {"from":"#FFC403","to":"#F652D0"},
52
+ ink: "#121421",
53
+ };
@@ -0,0 +1,39 @@
1
+ :root {
2
+ --pink: #F652D0;
3
+ --coral: #F97492;
4
+ --orange: #FCA241;
5
+ --yellow: #FFC403;
6
+ --gradient: linear-gradient(45deg, #F652D0, #FFC403);
7
+ --ink: #121421;
8
+ --muted: rgba(18, 20, 33, 0.58);
9
+ --paper: #F6F6F8;
10
+ --card: #FFFFFF;
11
+ --line: rgba(18, 20, 33, 0.10);
12
+ --field: #FFFFFF;
13
+ --error: #D3264F;
14
+ }
15
+
16
+ @media (prefers-color-scheme: dark) {
17
+ :root {
18
+ --ink: #FFFFFF;
19
+ --muted: rgba(255, 255, 255, 0.58);
20
+ --paper: #0E0F14;
21
+ --card: #171920;
22
+ --line: rgba(255, 255, 255, 0.10);
23
+ --field: #0E0F14;
24
+ --error: #FF8BA6;
25
+ }
26
+ }
27
+
28
+ .lockup {
29
+ --h: 40px;
30
+ display: flex;
31
+ height: var(--h);
32
+ color: var(--ink);
33
+ }
34
+
35
+ .lockup canvas {
36
+ display: block;
37
+ flex: none;
38
+ height: var(--h);
39
+ }
@@ -0,0 +1,17 @@
1
+ import { LOCKUP, drawLockup } from './mark.mjs'
2
+
3
+ export function lockup(root) {
4
+ const canvas = root.querySelector('canvas')
5
+ const draw = () => {
6
+ const ratio = globalThis.devicePixelRatio || 1
7
+ const h = canvas.getBoundingClientRect().height
8
+ canvas.style.width = `${h * LOCKUP.width}px`
9
+ canvas.width = Math.max(1, Math.round(h * LOCKUP.width * ratio))
10
+ canvas.height = Math.max(1, Math.round(h * ratio))
11
+ drawLockup(canvas.getContext('2d'), 0, 0, canvas.height, getComputedStyle(root).color)
12
+ }
13
+ draw()
14
+ addEventListener('resize', draw)
15
+ matchMedia('(prefers-color-scheme: dark)').addEventListener('change', draw)
16
+ return draw
17
+ }
@@ -0,0 +1,124 @@
1
+ import ART from './art.mjs';
2
+
3
+ const mix = (a, b, t) => {
4
+ const p = (c, i) => parseInt(c.slice(1 + 2 * i, 3 + 2 * i), 16);
5
+ return '#' + [0, 1, 2].map((i) => ('0' + Math.round(p(a, i) + (p(b, i) - p(a, i)) * t).toString(16)).slice(-2)).join('').toUpperCase();
6
+ };
7
+
8
+ export const COLORS = {
9
+ pink: ART.gradient.to,
10
+ coral: mix(ART.gradient.to, ART.gradient.from, 0.3),
11
+ orange: mix(ART.gradient.to, ART.gradient.from, 0.7),
12
+ yellow: ART.gradient.from,
13
+ ink: ART.ink,
14
+ paper: '#FFFFFF',
15
+ night: '#0E0F14',
16
+ };
17
+
18
+ export const GRADIENT = [
19
+ [0, COLORS.pink],
20
+ [1, COLORS.yellow],
21
+ ];
22
+
23
+ export const WORDMARK = { name: ART.word.map((g) => g.char).join('') };
24
+
25
+ export const LOCKUP = {
26
+ word: ART.word,
27
+ spark: ART.spark,
28
+ sparkAt: ART.wordSpark,
29
+ baseline: ART.wordBaseline,
30
+ width: ART.wordWidth,
31
+ };
32
+
33
+ export const RAYS = ART.rays;
34
+
35
+ function compile(d) {
36
+ return d
37
+ .replace(/([MLCZ])/g, '|$1')
38
+ .split('|')
39
+ .filter((part) => part)
40
+ .map((part) => {
41
+ const rest = part.slice(1).trim();
42
+ return [part[0], rest ? rest.split(/\s+/).map(Number) : []];
43
+ });
44
+ }
45
+
46
+ const cache = new Map();
47
+ const ops = (d) => {
48
+ let o = cache.get(d);
49
+ if (!o) cache.set(d, (o = compile(d)));
50
+ return o;
51
+ };
52
+
53
+ function trace(ctx, d, x, y, s) {
54
+ for (const [op, n] of ops(d)) {
55
+ if (op === 'M') ctx.moveTo(x + n[0] * s, y + n[1] * s);
56
+ else if (op === 'L') ctx.lineTo(x + n[0] * s, y + n[1] * s);
57
+ else if (op === 'C') ctx.bezierCurveTo(x + n[0] * s, y + n[1] * s, x + n[2] * s, y + n[3] * s, x + n[4] * s, y + n[5] * s);
58
+ else ctx.closePath();
59
+ }
60
+ }
61
+
62
+ const SMALL = 64;
63
+ const TINY = 28;
64
+
65
+ export function drawMark(ctx, x, y, size, fill) {
66
+ const own = !fill || fill === 'gradient';
67
+ const bold = size < SMALL ? (size < TINY ? 0.02 : 0.012) * size : 0;
68
+ ctx.save();
69
+ ctx.lineJoin = 'round';
70
+ ctx.lineWidth = bold;
71
+ if (!own) {
72
+ ctx.fillStyle = ctx.strokeStyle = fill;
73
+ ctx.beginPath();
74
+ }
75
+ for (const ray of RAYS) {
76
+ if (own) {
77
+ ctx.fillStyle = ctx.strokeStyle = ray.color;
78
+ ctx.beginPath();
79
+ }
80
+ trace(ctx, ray.d, x, y, size);
81
+ if (own) {
82
+ ctx.fill();
83
+ if (bold) ctx.stroke();
84
+ }
85
+ }
86
+ if (!own) {
87
+ ctx.fill();
88
+ if (bold) ctx.stroke();
89
+ }
90
+ ctx.restore();
91
+ }
92
+
93
+ export function drawSparkle(ctx, cx, cy, r, fill) {
94
+ ctx.save();
95
+ ctx.beginPath();
96
+ trace(ctx, ART.spark, cx, cy, r);
97
+ ctx.fillStyle = fill;
98
+ ctx.fill();
99
+ ctx.restore();
100
+ }
101
+
102
+ export function drawIcon(ctx, x, y, size, dark) {
103
+ ctx.save();
104
+ ctx.beginPath();
105
+ trace(ctx, ART.tile, x, y, size);
106
+ ctx.fillStyle = dark ? COLORS.night : COLORS.paper;
107
+ ctx.fill();
108
+ ctx.restore();
109
+ const [mx, my, ms] = ART.tileMark;
110
+ drawMark(ctx, x + mx * size, y + my * size, ms * size, 'gradient');
111
+ }
112
+
113
+ export function drawLockup(ctx, x, y, height, ink, mark) {
114
+ drawMark(ctx, x, y, height, mark || 'gradient');
115
+ ctx.save();
116
+ ctx.beginPath();
117
+ for (const g of ART.word) trace(ctx, g.d, x, y, height);
118
+ ctx.fillStyle = ink;
119
+ ctx.fill();
120
+ ctx.restore();
121
+ const [sx, sy, sr] = ART.wordSpark;
122
+ drawSparkle(ctx, x + sx * height, y + sy * height, sr * height, ink);
123
+ return ART.wordWidth * height;
124
+ }