@odori/cli 0.0.2

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 (70) hide show
  1. package/LICENSE +22 -0
  2. package/bin/odori.mjs +39 -0
  3. package/dist/chunk-7XJL2BYO.js +3552 -0
  4. package/dist/cli.d.ts +10 -0
  5. package/dist/cli.js +10 -0
  6. package/dist/index.d.ts +622 -0
  7. package/dist/index.js +156 -0
  8. package/dist/registry-snapshot-NIH2JMQ6.js +3559 -0
  9. package/package.json +50 -0
  10. package/src/audio-mix.ts +133 -0
  11. package/src/binaries.ts +241 -0
  12. package/src/brand-file.ts +94 -0
  13. package/src/chunk-cache.ts +85 -0
  14. package/src/chunks.ts +78 -0
  15. package/src/cli.ts +319 -0
  16. package/src/commands/add.ts +151 -0
  17. package/src/commands/dev.ts +160 -0
  18. package/src/commands/doctor.ts +162 -0
  19. package/src/commands/exportVideo.ts +198 -0
  20. package/src/commands/init.ts +56 -0
  21. package/src/commands/inspect.ts +72 -0
  22. package/src/commands/list.ts +22 -0
  23. package/src/commands/new.ts +126 -0
  24. package/src/commands/shared.ts +96 -0
  25. package/src/commands/still.ts +40 -0
  26. package/src/commands/test.ts +265 -0
  27. package/src/commands/update.ts +183 -0
  28. package/src/config.ts +84 -0
  29. package/src/contracts.ts +159 -0
  30. package/src/cues.ts +141 -0
  31. package/src/determinism.ts +82 -0
  32. package/src/diff.ts +71 -0
  33. package/src/discovery.ts +216 -0
  34. package/src/formats.ts +119 -0
  35. package/src/index.ts +58 -0
  36. package/src/integrity.ts +101 -0
  37. package/src/jobs.ts +151 -0
  38. package/src/log.ts +17 -0
  39. package/src/open.ts +32 -0
  40. package/src/paths.ts +12 -0
  41. package/src/prepare-cache.ts +58 -0
  42. package/src/project.ts +196 -0
  43. package/src/registry-snapshot.json +3431 -0
  44. package/src/registry-source.ts +269 -0
  45. package/src/render.ts +627 -0
  46. package/src/server.ts +307 -0
  47. package/studio/index.html +41 -0
  48. package/studio/src/Studio.tsx +192 -0
  49. package/studio/src/components/AudioClip.tsx +64 -0
  50. package/studio/src/components/CanvasStage.tsx +79 -0
  51. package/studio/src/components/CommandPalette.tsx +129 -0
  52. package/studio/src/components/Diagnostics.tsx +93 -0
  53. package/studio/src/components/ExportPanel.tsx +234 -0
  54. package/studio/src/components/InputControls.tsx +110 -0
  55. package/studio/src/components/Thumbnail.tsx +71 -0
  56. package/studio/src/components/Transport.tsx +237 -0
  57. package/studio/src/components/Waveform.tsx +114 -0
  58. package/studio/src/components/Wordmark.tsx +449 -0
  59. package/studio/src/components/ui.tsx +138 -0
  60. package/studio/src/lib/mix-loudness.ts +52 -0
  61. package/studio/src/main.tsx +34 -0
  62. package/studio/src/shortcuts.ts +27 -0
  63. package/studio/src/studio.css +1232 -0
  64. package/studio/src/theme.ts +61 -0
  65. package/studio/src/views/AssetsView.tsx +111 -0
  66. package/studio/src/views/BrandsView.tsx +139 -0
  67. package/studio/src/views/ComponentsView.tsx +285 -0
  68. package/studio/src/views/HomeView.tsx +122 -0
  69. package/studio/src/views/VideosView.tsx +343 -0
  70. package/studio/src/virtual.d.ts +25 -0
@@ -0,0 +1,449 @@
1
+ /**
2
+ * The Odori mark and wordmark, one drawing, the same artwork the documentation
3
+ * site serves as /logo.svg. Inlined rather than fetched: the dev server serves
4
+ * the *project's* public/ at the root, so a file reference here would 404 in
5
+ * every real project. `currentColor` keeps it correct in both themes.
6
+ *
7
+ * Regenerate from apps/docs/public/logo.svg if the artwork changes.
8
+ */
9
+ export const Wordmark = () => (
10
+ <svg viewBox="-3.0 -17.45 403.20 122.40" aria-hidden="true" focusable="false">
11
+ <g transform="scale(0.87500)"><g transform="translate(50 50) scale(0.148170) translate(-628.40 -623.65)"><g transform="translate(0.000000,1254.000000) scale(0.100000,-0.100000)"
12
+ fill="currentColor" stroke="none">
13
+ <path d="M6090 9673 c-8 -2 -94 -12 -190 -23 -96 -11 -191 -22 -210 -25 -37
14
+ -4 -144 -27 -245 -52 -33 -8 -80 -19 -105 -24 -25 -6 -64 -19 -87 -30 -24 -10
15
+ -51 -19 -62 -19 -19 0 -78 -19 -134 -43 -17 -8 -68 -29 -112 -47 -115 -48
16
+ -189 -83 -280 -134 -44 -25 -100 -56 -125 -69 -119 -65 -430 -320 -430 -353 0
17
+ -8 -6 -23 -12 -34 -11 -16 -9 -26 6 -55 11 -19 27 -35 37 -35 9 0 19 -7 23
18
+ -15 3 -8 18 -21 33 -28 15 -6 61 -33 100 -59 40 -27 76 -48 80 -48 7 0 40 -21
19
+ 145 -92 31 -21 59 -38 63 -38 4 0 22 -12 41 -27 18 -16 62 -48 99 -73 82 -56
20
+ 174 -127 243 -188 29 -26 65 -58 81 -72 51 -45 191 -182 191 -187 0 -2 20 -24
21
+ 45 -49 25 -24 45 -48 45 -53 0 -5 14 -21 30 -34 17 -14 30 -28 30 -31 0 -6 19
22
+ -30 124 -160 17 -21 33 -43 35 -50 2 -6 24 -37 48 -68 23 -31 43 -59 43 -63 0
23
+ -3 11 -21 25 -39 14 -18 25 -36 25 -40 0 -3 18 -33 40 -65 22 -32 46 -74 54
24
+ -93 8 -19 31 -59 50 -88 20 -30 36 -65 36 -77 0 -12 4 -25 10 -28 9 -5 80
25
+ -147 80 -159 0 -3 11 -29 24 -58 29 -65 65 -167 113 -318 19 -63 39 -124 44
26
+ -135 19 -42 49 -172 49 -211 0 -55 29 -81 100 -89 30 -4 72 -13 93 -21 21 -8
27
+ 42 -12 47 -9 4 3 72 -9 151 -25 79 -17 169 -35 199 -41 30 -6 64 -15 75 -20
28
+ 11 -5 43 -13 70 -19 83 -18 243 -69 365 -117 119 -47 397 -180 485 -233 28
29
+ -16 57 -33 65 -37 54 -25 219 -142 383 -272 172 -137 280 -233 397 -353 103
30
+ -105 118 -123 219 -242 36 -43 77 -82 90 -87 26 -10 91 6 91 22 0 5 14 23 30
31
+ 41 17 17 30 36 30 41 0 6 8 20 19 31 10 12 31 44 46 71 15 28 31 55 36 61 11
32
+ 14 101 199 150 309 62 140 128 320 134 368 1 12 8 35 14 52 28 69 82 347 101
33
+ 515 21 182 19 477 -5 690 -9 88 -35 263 -40 270 -2 4 -7 33 -10 65 -3 32 -9
34
+ 63 -14 69 -4 6 -11 38 -14 70 -4 37 -14 70 -26 87 -12 16 -21 33 -21 39 0 14
35
+ -17 13 -23 -2 -2 -7 -8 -9 -13 -5 -5 5 -1 13 9 18 23 13 22 60 -3 109 -11 22
36
+ -20 48 -20 59 0 11 -4 23 -10 26 -5 3 -10 15 -10 25 0 10 -6 31 -14 47 -16 33
37
+ -33 72 -76 168 -51 115 -121 250 -170 325 -16 25 -42 68 -58 95 -16 28 -39 59
38
+ -51 69 -11 11 -21 23 -21 28 0 5 -26 41 -57 80 -32 39 -68 86 -81 105 -13 19
39
+ -46 56 -73 82 -27 26 -49 50 -49 54 0 21 -295 294 -373 344 -23 16 -47 35 -54
40
+ 44 -13 17 -128 89 -143 89 -4 0 -10 7 -14 15 -3 8 -13 15 -21 15 -9 0 -28 14
41
+ -42 30 -13 17 -35 30 -46 30 -20 0 -20 -2 8 -26 19 -16 29 -33 27 -46 -2 -11
42
+ 1 -18 6 -15 10 7 52 -20 52 -34 0 -5 -12 -2 -27 7 l-28 16 28 -26 c15 -14 23
43
+ -26 17 -26 -16 0 -60 31 -60 42 0 6 -14 23 -31 39 -19 18 -28 33 -23 41 6 10
44
+ 5 11 -8 1 -8 -7 -18 -10 -22 -6 -4 4 -11 1 -17 -7 -7 -12 -11 -13 -18 -2 -4 8
45
+ -11 13 -15 13 -3 -1 -21 6 -39 15 -29 15 -30 18 -12 24 12 5 26 2 36 -6 9 -8
46
+ 18 -11 21 -8 4 3 15 1 26 -5 15 -8 23 -7 32 4 10 13 10 19 -4 34 -25 27 -115
47
+ 74 -131 67 -8 -3 -24 7 -37 22 -13 15 -43 35 -68 45 -25 11 -77 34 -116 53
48
+ -68 32 -74 33 -100 19 -16 -8 -37 -15 -46 -15 -10 0 -18 -5 -18 -10 0 -6 -16
49
+ 2 -35 17 -40 32 -39 42 2 18 l28 -17 -24 21 c-27 25 -35 26 -53 7 -12 -11 -16
50
+ -10 -25 10 -12 25 -1 35 34 30 10 -2 12 -1 6 1 -7 3 -13 8 -13 13 0 5 -10 12
51
+ -22 15 -13 4 -36 13 -53 20 -45 19 -173 53 -230 60 -27 4 -55 11 -62 17 -6 5
52
+ -48 16 -93 24 -45 7 -85 16 -90 19 -23 14 -422 44 -570 43 -91 -1 -172 -3
53
+ -180 -5z m940 -109 c0 -2 -9 -4 -21 -4 -11 0 -18 4 -14 10 5 8 35 3 35 -6z
54
+ m-355 -29 c77 -9 144 -19 149 -22 5 -3 27 -8 50 -10 64 -6 200 -35 211 -44 5
55
+ -5 17 -9 27 -9 10 0 50 -11 90 -24 40 -12 84 -23 97 -24 13 -1 28 -6 32 -13 9
56
+ -15 74 -40 122 -46 20 -3 37 -9 37 -15 0 -5 26 -20 58 -34 31 -14 75 -33 97
57
+ -43 121 -56 122 -56 145 -30 l21 24 -6 -28 c-5 -26 -4 -27 22 -21 23 5 26 4
58
+ 16 -6 -10 -11 -7 -18 13 -37 14 -12 32 -23 41 -23 9 0 25 -8 35 -17 16 -14 21
59
+ -15 28 -4 4 8 15 11 24 8 19 -7 22 -27 4 -27 -7 0 3 -13 22 -30 19 -16 41 -27
60
+ 48 -25 6 2 12 0 12 -5 0 -5 17 -20 38 -34 20 -13 55 -40 76 -60 22 -20 46 -36
61
+ 53 -36 7 0 54 -38 105 -84 51 -45 98 -85 103 -87 6 -2 72 -71 148 -154 189
62
+ -206 195 -213 236 -275 20 -30 44 -61 54 -68 9 -7 17 -19 17 -27 0 -8 6 -18
63
+ 13 -22 15 -9 77 -108 77 -123 0 -6 5 -10 10 -10 6 0 14 -8 17 -17 4 -10 15
64
+ -29 25 -42 10 -13 18 -32 18 -41 0 -10 6 -23 14 -29 13 -11 136 -251 136 -265
65
+ 0 -4 9 -28 21 -54 20 -44 26 -60 48 -114 5 -13 14 -43 21 -68 6 -25 20 -64 31
66
+ -87 10 -24 19 -49 19 -57 0 -8 5 -18 10 -21 6 -4 8 -11 5 -16 -3 -5 -1 -26 5
67
+ -46 20 -65 40 -156 45 -198 3 -22 11 -71 19 -109 8 -38 13 -73 10 -78 -3 -4
68
+ -2 -13 2 -19 3 -6 8 -28 10 -48 2 -20 6 -54 8 -76 16 -131 21 -553 6 -567 -3
69
+ -4 -7 -31 -14 -113 -7 -76 -30 -220 -41 -255 -4 -12 -8 -32 -10 -43 -4 -26
70
+ -25 -106 -32 -127 -10 -25 -14 -44 -17 -65 -1 -11 -7 -29 -13 -40 -6 -11 -14
71
+ -37 -18 -58 -4 -20 -11 -37 -16 -37 -5 0 -6 -6 -3 -14 3 -8 1 -17 -5 -21 -6
72
+ -3 -11 -15 -11 -25 0 -10 -7 -31 -15 -47 -8 -15 -21 -45 -30 -65 -37 -93 -47
73
+ -114 -56 -128 -5 -8 -14 -26 -20 -40 -6 -14 -15 -32 -19 -41 -46 -90 -66 -129
74
+ -84 -154 -12 -16 -27 -41 -34 -55 -18 -36 -34 -62 -57 -94 l-21 -27 -34 41
75
+ c-185 218 -558 564 -725 671 -22 14 -49 36 -59 47 -11 12 -26 22 -34 22 -8 0
76
+ -33 15 -56 33 -40 32 -154 103 -266 165 -98 55 -303 152 -319 152 -6 0 -38 13
77
+ -73 29 -111 51 -347 133 -423 146 -22 4 -44 11 -50 15 -5 4 -35 11 -65 15 -91
78
+ 12 -101 21 -33 29 67 7 78 13 62 32 -8 10 -3 11 28 2 28 -8 59 -7 115 2 42 7
79
+ 81 9 87 6 6 -4 19 -3 28 3 10 5 128 21 263 35 135 15 265 31 290 36 25 5 86
80
+ 14 135 20 50 6 108 13 130 16 139 18 289 36 345 40 36 2 74 7 85 11 11 3 34 7
81
+ 50 8 32 3 85 12 265 45 63 12 135 24 158 27 24 3 46 12 49 19 9 23 -38 55 -72
82
+ 49 -16 -2 -61 -7 -100 -10 -84 -7 -246 -23 -295 -30 -19 -3 -57 -7 -85 -10
83
+ -27 -3 -97 -12 -155 -20 -121 -16 -293 -38 -430 -55 -52 -7 -131 -18 -175 -25
84
+ -44 -8 -156 -25 -250 -40 -93 -14 -186 -30 -205 -36 -19 -5 -55 -11 -80 -14
85
+ -98 -8 -156 -18 -168 -28 -7 -5 -27 -11 -45 -12 -82 -4 -206 -18 -246 -26 -40
86
+ -9 -73 -2 -44 8 13 5 116 81 143 106 8 8 31 25 50 38 19 13 53 40 75 60 22 21
87
+ 56 48 75 61 19 13 44 31 55 40 11 10 83 65 160 123 77 57 172 130 210 160 39
88
+ 31 102 76 140 102 39 26 86 59 105 75 37 29 150 113 238 175 30 21 63 46 74
89
+ 56 19 18 66 53 138 102 19 13 60 42 90 64 30 23 70 51 88 62 17 12 32 24 32
90
+ 28 0 4 50 45 111 91 118 88 143 120 118 146 -13 13 -19 12 -50 -2 -36 -18
91
+ -166 -104 -234 -155 -22 -16 -62 -45 -90 -64 -27 -19 -93 -68 -145 -109 -52
92
+ -42 -120 -92 -150 -113 -49 -33 -194 -139 -275 -201 -17 -12 -75 -56 -130 -96
93
+ -55 -41 -109 -83 -120 -93 -33 -31 -99 -79 -117 -86 -10 -3 -18 -10 -18 -15 0
94
+ -5 -33 -31 -72 -58 -65 -43 -165 -119 -178 -135 -7 -8 -118 -92 -139 -104 -53
95
+ -33 -111 -77 -111 -85 0 -6 -7 -10 -16 -10 -8 0 -29 -13 -46 -30 -16 -17 -32
96
+ -30 -35 -30 -6 0 -60 -43 -100 -78 -50 -46 -42 -25 47 128 13 23 65 132 210
97
+ 445 15 33 38 83 50 110 12 28 37 82 55 120 18 39 52 111 75 160 22 50 52 111
98
+ 65 137 14 27 25 52 25 57 0 6 20 52 44 103 24 51 49 111 57 133 7 22 19 47 26
99
+ 56 7 8 13 18 13 22 0 4 11 31 25 61 14 30 25 61 25 68 0 8 7 23 15 34 8 10 15
100
+ 29 15 42 0 12 4 22 10 22 5 0 14 19 21 43 6 23 23 67 37 97 14 30 29 64 32 75
101
+ 4 11 17 45 30 75 12 30 40 107 62 170 21 63 43 124 47 135 29 72 32 94 15 120
102
+ -9 14 -19 25 -23 25 -21 0 -54 -58 -100 -175 -29 -71 -58 -144 -66 -162 -8
103
+ -17 -15 -36 -15 -42 0 -7 -9 -31 -21 -54 -11 -23 -31 -70 -44 -105 -24 -61
104
+ -32 -81 -74 -174 -11 -26 -21 -52 -21 -56 0 -5 -13 -36 -30 -70 -16 -34 -30
105
+ -66 -30 -70 0 -9 -76 -191 -120 -285 -11 -24 -20 -48 -20 -54 0 -5 -18 -46
106
+ -40 -91 -22 -44 -40 -83 -40 -86 0 -4 -29 -66 -64 -139 -96 -201 -116 -243
107
+ -116 -250 0 -9 -49 -116 -72 -157 -32 -59 -78 -161 -78 -176 0 -8 -6 -14 -12
108
+ -14 -7 0 -26 -31 -42 -68 -17 -37 -38 -79 -48 -94 -10 -14 -18 -33 -18 -42 0
109
+ -18 -39 -76 -51 -76 -13 0 -31 156 -36 300 -4 146 -8 218 -17 320 -3 30 -7 92
110
+ -10 137 -2 45 -7 86 -10 91 -3 4 -8 46 -11 93 -3 46 -8 91 -10 99 -2 8 -6 44
111
+ -10 80 -3 36 -8 87 -11 113 -3 27 -7 61 -9 75 -5 45 -34 282 -44 362 -5 41
112
+ -13 100 -16 130 -12 114 -90 539 -105 575 -5 11 -11 34 -15 50 -3 17 -10 48
113
+ -16 70 -6 22 -14 59 -18 82 -9 47 -35 93 -54 93 -7 0 -18 -9 -24 -19 -10 -15
114
+ -8 -35 6 -98 18 -76 36 -190 33 -206 -1 -4 5 -40 14 -80 16 -71 24 -119 43
115
+ -247 36 -255 62 -433 72 -480 12 -62 23 -147 37 -303 6 -59 14 -112 18 -118 4
116
+ -6 8 -30 9 -53 1 -22 7 -90 14 -151 14 -130 31 -294 35 -350 2 -22 6 -58 10
117
+ -80 7 -47 6 -43 -46 100 -37 102 -69 178 -90 215 -4 8 -13 26 -19 40 -56 131
118
+ -184 386 -199 395 -5 3 -15 18 -23 33 -28 54 -60 108 -81 134 -11 15 -32 43
119
+ -46 63 -14 20 -45 62 -69 92 -24 30 -44 61 -45 68 -1 7 -20 31 -41 53 -88 89
120
+ -123 130 -129 150 -4 12 -12 22 -18 22 -13 0 -148 137 -148 150 0 6 -6 10 -12
121
+ 10 -7 0 -40 26 -74 58 -110 104 -265 229 -427 344 -49 35 -118 84 -154 111
122
+ -36 26 -70 47 -76 47 -6 0 -23 12 -38 26 -16 15 -52 39 -81 55 -29 16 -68 36
123
+ -85 45 -40 21 -41 28 -6 57 15 12 36 31 47 42 45 44 237 185 252 185 3 0 29
124
+ 16 58 35 29 19 57 35 61 35 5 0 23 11 41 25 18 14 38 25 44 25 7 0 24 8 38 18
125
+ 15 11 61 33 102 50 41 17 98 42 125 55 28 14 64 27 81 31 46 10 128 55 136 74
126
+ 6 16 7 16 7 0 1 -15 7 -15 69 4 37 11 78 22 92 25 14 2 32 7 40 10 8 4 19 5
127
+ 24 4 5 -1 41 5 80 13 75 16 261 46 311 51 16 2 62 6 100 10 252 26 486 26 710
128
+ 0z m1065 -285 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10
129
+ -4 10 -10z m250 -76 c0 -2 -7 -4 -15 -4 -8 0 -15 4 -15 10 0 5 7 7 15 4 8 -4
130
+ 15 -8 15 -10z m1432 -1819 c-4 -5 -8 -2 -10 8 -2 9 -8 17 -13 17 -6 0 -7 5 -4
131
+ 11 5 6 12 4 20 -8 7 -10 10 -22 7 -28z m-28 -1 c5 -14 4 -15 -9 -4 -12 10 -15
132
+ 10 -15 0 0 -8 -3 -11 -6 -7 -7 7 4 27 16 27 4 0 11 -7 14 -16z m20 -83 c-6 -6
133
+ -24 19 -24 34 1 6 7 1 15 -9 8 -11 12 -22 9 -25z m-24 5 c0 -8 7 -19 15 -26 8
134
+ -7 12 -17 9 -22 -7 -11 -28 16 -39 51 -5 16 -4 21 4 17 6 -4 11 -13 11 -20z"/>
135
+ <path d="M7440 9451 c0 -5 11 -12 25 -15 14 -4 25 -11 25 -17 0 -6 5 -7 10 -4
136
+ 18 11 11 23 -21 34 -38 13 -39 13 -39 2z"/>
137
+ <path d="M4395 8013 c-134 -11 -336 -74 -455 -143 -82 -48 -153 -96 -157 -107
138
+ -3 -8 -18 -20 -32 -28 -15 -7 -54 -39 -87 -70 -32 -31 -69 -64 -81 -72 -13 -8
139
+ -23 -20 -23 -26 0 -5 -19 -32 -42 -58 -74 -83 -108 -126 -108 -134 0 -4 -15
140
+ -26 -33 -49 -38 -46 -87 -130 -87 -149 0 -7 19 8 42 32 28 29 44 39 47 30 2
141
+ -7 -1 -15 -7 -17 -7 -2 -12 -8 -12 -14 0 -6 -14 -29 -31 -52 -16 -23 -50 -72
142
+ -75 -110 -24 -38 -44 -62 -44 -53 0 9 5 19 10 22 6 3 10 11 10 17 0 6 -6 5
143
+ -16 -3 -9 -7 -14 -22 -11 -36 2 -13 -2 -28 -9 -34 -8 -6 -14 -16 -14 -22 0 -5
144
+ -14 -40 -32 -76 -17 -36 -31 -70 -30 -75 2 -4 -2 -14 -8 -21 -8 -9 -8 -15 -1
145
+ -20 7 -4 5 -14 -5 -30 -8 -13 -16 -34 -18 -47 -1 -12 -8 -33 -15 -46 -9 -18
146
+ -9 -23 1 -27 10 -4 13 -26 12 -80 -1 -70 0 -75 20 -76 20 0 20 -1 -3 -10 -17
147
+ -7 -21 -13 -13 -22 15 -19 25 -87 12 -87 -5 0 -10 -16 -10 -36 0 -31 2 -35 15
148
+ -24 9 8 15 9 15 2 0 -6 -10 -18 -22 -27 -18 -12 -20 -17 -9 -24 11 -7 11 -9 0
149
+ -14 -12 -5 -11 -8 1 -17 11 -9 12 -13 3 -17 -7 -2 -13 -11 -13 -19 0 -8 -6
150
+ -14 -14 -14 -19 0 -28 -14 -20 -34 8 -22 25 -20 31 4 6 22 23 27 23 7 0 -7 -7
151
+ -23 -16 -36 -10 -14 -13 -26 -7 -30 5 -3 13 -14 16 -24 5 -14 2 -20 -12 -24
152
+ -27 -7 -15 -33 16 -33 14 0 22 -4 18 -11 -4 -6 -9 -8 -12 -5 -3 3 -14 1 -25
153
+ -5 -13 -7 -17 -16 -13 -30 4 -13 2 -19 -9 -19 -8 0 -22 -9 -30 -21 -8 -12 -19
154
+ -18 -24 -15 -15 9 -37 -23 -25 -35 13 -13 53 -2 53 14 0 7 9 18 21 25 18 11
155
+ 23 11 34 -4 16 -23 -2 -56 -27 -49 -19 7 -36 -14 -20 -24 6 -3 13 -23 17 -43
156
+ 4 -23 11 -35 18 -31 6 4 8 -2 4 -18 -4 -13 -7 -27 -7 -31 0 -5 -6 -8 -14 -8
157
+ -7 0 -16 -9 -19 -20 -3 -13 0 -20 9 -20 8 0 14 6 14 14 0 17 28 41 37 32 4 -4
158
+ 1 -11 -6 -15 -11 -7 -9 -11 8 -20 11 -7 21 -21 21 -31 0 -23 -18 -27 -26 -5
159
+ -4 8 -11 15 -16 15 -6 0 -4 -7 3 -16 11 -14 11 -18 -4 -29 -24 -17 -21 -28 4
160
+ -14 17 9 25 8 37 -5 9 -8 12 -19 8 -23 -4 -4 -11 -1 -16 7 -8 13 -13 12 -31
161
+ -7 -17 -16 -20 -28 -14 -50 6 -25 8 -26 19 -10 18 24 27 21 20 -7 -5 -20 0
162
+ -25 25 -34 31 -11 39 -26 21 -37 -5 -3 -19 6 -32 20 -12 14 -27 25 -34 25 -16
163
+ 0 -54 53 -54 74 0 9 -5 16 -11 16 -12 0 -1 -43 12 -48 5 -2 9 -12 9 -23 0 -10
164
+ 4 -19 10 -19 12 0 34 -40 26 -47 -3 -3 -12 0 -21 7 -10 8 -15 9 -15 1 0 -6 5
165
+ -11 10 -11 6 0 10 -10 10 -21 0 -12 8 -28 18 -35 23 -18 33 -17 26 1 -4 8 -12
166
+ 15 -20 15 -8 0 -14 5 -14 11 0 6 9 8 21 4 18 -6 20 -4 14 14 -8 25 -7 25 33 5
167
+ 18 -8 32 -22 32 -30 0 -8 10 -24 22 -36 17 -17 18 -20 4 -15 -10 4 -22 7 -27
168
+ 7 -5 0 -9 7 -9 15 0 12 -5 10 -21 -6 -23 -23 -19 -70 8 -101 13 -14 13 -21 4
169
+ -32 -9 -11 -10 -20 -2 -35 7 -13 8 -22 1 -26 -6 -4 -5 -13 2 -25 10 -15 10
170
+ -22 1 -31 -8 -8 -9 -18 -2 -31 9 -16 13 -17 43 -4 37 15 56 7 56 -26 0 -11 5
171
+ -15 14 -12 11 4 13 0 9 -18 -6 -21 -5 -22 11 -9 18 15 32 9 21 -8 -19 -32 -92
172
+ 19 -79 54 6 15 4 17 -12 11 -10 -5 -27 -11 -36 -13 -25 -7 -23 -27 2 -20 27 7
173
+ 35 -10 15 -33 -13 -15 -14 -22 -5 -40 9 -17 14 -19 26 -9 10 8 14 8 14 0 0 -6
174
+ 5 -11 10 -11 17 0 11 21 -12 40 -13 10 -20 21 -17 24 3 4 20 -8 38 -26 l31
175
+ -32 -35 -14 c-46 -19 -45 -33 3 -27 34 4 41 1 61 -26 13 -17 20 -33 17 -36 -3
176
+ -4 1 -14 9 -23 19 -21 9 -64 -14 -55 -9 4 -23 10 -31 13 -12 5 -11 1 3 -18 10
177
+ -14 20 -33 24 -42 5 -18 23 -25 23 -9 0 5 9 11 20 14 13 3 20 0 20 -9 0 -8 5
178
+ -14 10 -14 6 0 10 -7 10 -15 0 -8 -4 -15 -9 -15 -5 0 -11 7 -15 15 -8 23 -25
179
+ 18 -32 -9 -6 -26 32 -90 48 -80 14 9 9 20 -19 48 -14 14 -23 29 -20 33 8 7 57
180
+ -38 57 -53 0 -6 9 -19 19 -28 10 -10 21 -27 24 -38 5 -19 5 -19 -19 3 -13 12
181
+ -27 20 -30 17 -8 -9 11 -42 73 -125 29 -40 53 -76 53 -81 0 -7 67 -93 201
182
+ -257 27 -33 67 -78 89 -100 22 -22 40 -45 40 -52 0 -7 5 -13 11 -13 6 0 34
183
+ -22 63 -49 134 -128 310 -271 332 -271 6 0 14 -6 17 -12 2 -7 31 -31 63 -52
184
+ 33 -21 70 -47 84 -57 14 -10 50 -31 80 -46 30 -14 82 -43 115 -63 33 -20 76
185
+ -42 95 -50 19 -8 47 -23 62 -34 15 -10 35 -20 45 -21 10 -1 36 -11 58 -22 49
186
+ -25 160 -70 198 -79 15 -3 44 -15 64 -25 21 -10 45 -19 54 -19 9 0 42 -9 73
187
+ -20 90 -31 312 -82 471 -109 246 -42 834 -43 890 -1 20 14 59 19 72 8 9 -7 17
188
+ -7 26 0 6 5 39 15 72 22 86 16 89 18 76 34 -13 15 -5 26 20 26 9 0 19 6 22 13
189
+ 3 9 7 9 18 0 11 -9 18 -8 33 2 10 8 24 11 31 9 7 -3 16 0 20 6 5 8 11 8 21 -1
190
+ 17 -14 44 -5 44 16 0 8 5 15 11 15 6 0 8 7 5 16 -4 12 -2 15 9 10 9 -3 24 3
191
+ 35 14 26 26 31 25 17 -5 -7 -14 -18 -25 -24 -25 -7 0 -13 -4 -13 -10 0 -12 12
192
+ -13 42 -1 13 5 36 12 52 16 21 4 27 10 23 24 -3 15 2 20 24 25 19 3 29 12 29
193
+ 23 0 13 3 14 12 5 10 -10 10 -15 -2 -22 -8 -5 -11 -12 -7 -17 12 -11 42 12 40
194
+ 32 0 9 11 21 25 28 15 6 33 20 41 30 7 11 20 16 29 12 8 -3 33 6 54 20 37 25
195
+ 41 25 58 10 11 -10 20 -12 24 -7 3 6 0 13 -6 16 -10 3 -9 8 3 18 9 7 14 18 13
196
+ 23 -3 9 50 47 106 75 14 7 35 24 48 38 19 21 26 24 40 15 14 -8 23 -6 40 7 23
197
+ 19 29 40 13 40 -23 0 -3 54 25 70 17 9 30 25 32 39 3 31 20 51 40 49 38 -3 52
198
+ 3 52 21 0 11 -4 23 -10 26 -18 11 -11 24 16 31 18 5 22 10 14 18 -7 7 -16 7
199
+ -30 -1 -15 -10 -19 -9 -23 5 -4 15 -5 15 -6 -2 -1 -13 -7 -17 -20 -13 -14 3
200
+ -17 0 -14 -14 4 -16 0 -17 -32 -12 -35 6 -37 4 -30 -16 8 -25 -12 -30 -22 -4
201
+ -4 11 3 24 22 38 15 13 25 27 21 33 -10 16 13 25 29 12 12 -10 15 -9 15 5 0
202
+ 12 6 16 20 12 12 -3 23 1 29 10 10 19 32 8 24 -12 -3 -9 1 -15 10 -15 9 0 19
203
+ 10 23 22 4 13 14 28 23 35 25 18 7 25 -25 9 -28 -15 -50 -12 -25 4 8 4 12 17
204
+ 8 29 -3 11 1 25 9 32 22 18 17 24 -23 26 -26 1 -41 -4 -50 -17 -8 -11 -20 -16
205
+ -33 -13 -11 3 -27 0 -35 -7 -13 -11 -18 -10 -29 6 -17 23 -10 40 10 23 11 -9
206
+ 16 -6 23 12 5 14 5 28 0 34 -12 12 -11 45 1 45 6 0 10 -4 10 -10 0 -5 5 -10
207
+ 10 -10 6 0 10 7 10 16 0 14 3 14 15 4 12 -10 18 -10 31 1 13 10 17 10 25 -2
208
+ 12 -20 11 -29 -3 -29 -8 -1 -5 -7 6 -15 25 -19 36 -11 36 26 0 19 5 29 15 29
209
+ 8 0 15 5 15 10 0 6 -7 10 -15 10 -24 0 -18 17 14 39 36 26 37 26 44 1 7 -28
210
+ 25 -25 25 5 0 14 -4 25 -9 25 -5 0 -18 9 -29 20 -18 18 -19 23 -6 41 10 15 15
211
+ 17 19 7 4 -11 7 -10 15 1 6 8 8 20 5 28 -3 7 0 13 7 13 6 0 10 -10 8 -22 -2
212
+ -11 3 -23 11 -26 9 -3 11 1 6 17 -3 11 -2 21 3 21 12 0 22 -24 22 -50 0 -10 7
213
+ -21 15 -24 13 -5 15 0 9 32 -4 20 -11 43 -17 50 -7 9 -5 18 7 30 9 10 16 27
214
+ 16 38 0 17 -2 17 -18 -4 l-17 -22 -20 22 c-17 20 -20 21 -23 6 -4 -21 -18 -23
215
+ -28 -6 -4 6 -2 14 4 16 7 2 12 11 13 20 0 11 2 12 6 5 2 -7 9 -13 14 -13 14 0
216
+ 11 26 -4 39 -15 12 -11 72 6 83 6 4 16 0 22 -8 9 -13 13 -12 25 10 7 14 19 26
217
+ 27 26 15 0 18 26 3 35 -6 4 -8 15 -5 26 4 10 2 19 -4 19 -5 0 -12 -14 -16 -30
218
+ -4 -16 -13 -30 -20 -30 -7 0 -15 -5 -17 -11 -2 -7 -8 -6 -16 4 -10 12 -10 18
219
+ 4 31 9 10 13 20 10 24 -4 3 -11 0 -16 -8 -7 -12 -12 -12 -22 -2 -10 10 -8 14
220
+ 10 18 12 4 22 10 22 14 0 4 9 10 20 13 23 6 27 35 6 43 -23 9 -56 -14 -49 -34
221
+ 6 -15 5 -15 -10 -3 -21 17 -22 37 -2 45 8 3 15 17 15 31 0 24 -9 30 -37 26
222
+ -16 -2 -17 35 -2 44 6 4 17 -2 25 -14 8 -12 23 -21 32 -21 15 1 15 2 -2 15
223
+ -10 7 -15 18 -12 23 3 5 -1 15 -9 22 -8 7 -15 23 -15 36 0 13 -4 24 -10 24
224
+ -16 0 -49 41 -43 55 7 21 -38 77 -52 65 -14 -11 -45 -3 -45 11 0 5 9 9 20 9
225
+ 11 0 20 4 20 8 0 5 -9 17 -20 27 -11 10 -20 23 -20 30 0 16 -40 51 -68 60 -15
226
+ 4 -21 12 -18 21 3 9 -23 43 -67 88 -65 66 -78 75 -121 81 -63 10 -117 -8 -182
227
+ -61 -28 -23 -60 -45 -72 -48 -11 -4 -33 -17 -48 -29 -34 -26 -273 -147 -292
228
+ -147 -7 0 -27 -7 -44 -16 -41 -21 -142 -50 -303 -85 -205 -45 -532 -37 -735
229
+ 17 -89 24 -212 65 -256 85 -23 10 -54 21 -68 25 -14 3 -26 10 -26 14 0 5 -10
230
+ 12 -22 15 -38 11 -104 43 -141 68 -20 13 -68 39 -106 57 -39 19 -73 41 -76 50
231
+ -3 9 -15 22 -28 27 -12 6 -43 27 -70 47 -26 20 -54 36 -61 36 -8 0 -24 14 -36
232
+ 30 -12 17 -56 57 -99 89 -43 33 -86 72 -96 88 -10 15 -34 44 -54 63 -67 66
233
+ -151 163 -151 174 0 7 -13 26 -30 44 -16 18 -30 37 -30 41 0 4 -9 16 -20 26
234
+ -11 10 -20 23 -20 29 0 6 -12 25 -27 42 -39 42 -193 341 -193 372 0 6 -8 26
235
+ -18 44 -10 18 -19 51 -21 73 -1 22 -6 44 -11 49 -6 6 -10 31 -10 56 0 26 -3
236
+ 50 -7 54 -17 16 -11 94 12 175 23 78 81 207 153 336 120 217 284 379 485 478
237
+ 45 22 62 37 73 63 13 30 12 37 -7 73 -11 22 -36 54 -54 70 -34 29 -37 45 -7
238
+ 33 31 -12 -21 59 -58 78 -147 76 -327 109 -515 93z m-165 -993 c0 -5 -5 -10
239
+ -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m-980 -45 c-7 -8 -17
240
+ -15 -22 -15 -6 0 -5 7 2 15 7 8 17 15 22 15 6 0 5 -7 -2 -15z m820 -5 c0 -5
241
+ -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m-840 -34
242
+ c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m665
243
+ -36 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z
244
+ m205 -30 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z
245
+ m-905 -20 c3 -5 2 -10 -4 -10 -5 0 -13 5 -16 10 -3 6 -2 10 4 10 5 0 13 -4 16
246
+ -10z m-5 -30 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10
247
+ -4 10 -10z m-25 -50 c-4 -6 -1 -18 6 -26 9 -11 9 -18 1 -26 -9 -9 -12 -8 -12
248
+ 4 0 9 -5 18 -12 20 -14 5 -3 38 12 38 6 0 8 -5 5 -10z m912 -112 c-3 -8 -6 -5
249
+ -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z m-947 -30 c0 -4 -6 -8 -14 -8 -14 0
250
+ -28 35 -18 45 7 6 32 -23 32 -37z m60 22 c0 -5 -4 -10 -9 -10 -6 0 -13 5 -16
251
+ 10 -3 6 1 10 9 10 9 0 16 -4 16 -10z m-57 -59 c-9 -11 -20 -18 -25 -15 -14 9
252
+ -9 22 10 27 31 8 32 7 15 -12z m-13 -41 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10
253
+ 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m1145 -72 c-7 -5 -6 -8 1 -8 6 0 18 -18
254
+ 27 -41 19 -49 4 -47 -25 3 -16 28 -19 44 -13 74 l8 39 7 -30 c3 -17 1 -33 -5
255
+ -37z m35 42 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4
256
+ -10z m-1150 -20 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11
257
+ -4 11 -10z m-5 -40 c-3 -5 -11 -10 -16 -10 -6 0 -7 5 -4 10 3 6 11 10 16 10 6
258
+ 0 7 -4 4 -10z m21 -152 c-11 -6 -14 -17 -10 -34 4 -14 2 -24 -5 -24 -12 0 -14
259
+ 32 -5 68 5 18 9 20 21 10 12 -10 12 -13 -1 -20z m4 -198 c0 -5 -4 -10 -10 -10
260
+ -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m40 0 c0 -5 -2 -10 -4
261
+ -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m-10 -200 c0 -5 -4
262
+ -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m-80 -104 c0
263
+ -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m105
264
+ -16 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z
265
+ m-105 -50 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4
266
+ -10z m1480 6 c0 -11 -19 -15 -25 -6 -3 5 1 10 9 10 9 0 16 -2 16 -4z m-1515
267
+ -16 c3 -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m42
268
+ -56 c-9 -9 -28 6 -21 18 4 6 10 6 17 -1 6 -6 8 -13 4 -17z m93 -74 c0 -5 -2
269
+ -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m-110 -110 c0
270
+ -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m30
271
+ -60 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z
272
+ m250 -150 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4
273
+ -10z m-190 -50 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10
274
+ -4 10 -10z m18 -85 c0 -14 -4 -25 -9 -25 -5 0 -9 11 -9 25 0 14 4 25 9 25 5 0
275
+ 9 -11 9 -25z m-24 -61 c9 -22 -3 -32 -14 -14 -12 19 -12 30 -1 30 5 0 12 -7
276
+ 15 -16z m51 -5 c12 -19 -5 -23 -22 -6 -16 16 -16 17 -1 17 9 0 20 -5 23 -11z
277
+ m4585 1 c12 -8 11 -10 -7 -10 -13 0 -23 5 -23 10 0 13 11 13 30 0z m95 -51
278
+ c11 -17 0 -20 -21 -4 -17 13 -17 14 -2 15 9 0 20 -5 23 -11z m-4555 -204 c0
279
+ -8 -4 -15 -10 -15 -5 0 -10 7 -10 15 0 8 5 15 10 15 6 0 10 -7 10 -15z m4670
280
+ -15 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z
281
+ m-35 -21 c-10 -15 -25 -10 -19 6 4 8 10 12 15 9 5 -3 7 -10 4 -15z m-4565 7
282
+ c0 -11 -19 -15 -25 -6 -3 5 1 10 9 10 9 0 16 -2 16 -4z m-60 -15 c0 -6 -4 -13
283
+ -10 -16 -5 -3 -10 1 -10 9 0 9 5 16 10 16 6 0 10 -4 10 -9z m2110 -91 c0 -5
284
+ -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z m2605 -10 c3
285
+ -5 -3 -10 -15 -10 -12 0 -18 5 -15 10 3 6 10 10 15 10 5 0 12 -4 15 -10z
286
+ m-135 -14 c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2
287
+ 10 -4z m-2520 -16 c0 -5 -4 -10 -9 -10 -6 0 -13 5 -16 10 -3 6 1 10 9 10 9 0
288
+ 16 -4 16 -10z m2490 -10 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10
289
+ 2 0 4 -4 4 -10z m76 -17 c-10 -10 -19 5 -10 18 6 11 8 11 12 0 2 -7 1 -15 -2
290
+ -18z m-4496 -13 c9 -16 8 -20 -5 -20 -8 0 -15 9 -15 20 0 11 2 20 5 20 2 0 9
291
+ -9 15 -20z m42 -102 c-7 -7 -12 -8 -12 -2 0 6 3 14 7 17 3 4 9 5 12 2 2 -3 -1
292
+ -11 -7 -17z m4418 -17 c13 -25 13 -34 0 -26 -16 10 -32 45 -21 45 6 0 15 -9
293
+ 21 -19z m50 15 c0 -11 -19 -15 -25 -6 -3 5 1 10 9 10 9 0 16 -2 16 -4z m78
294
+ -33 c2 -7 -3 -13 -11 -13 -9 0 -17 -6 -20 -12 -2 -7 -4 0 -4 15 0 20 4 27 15
295
+ 25 8 -2 17 -9 20 -15z m-92 -28 c-3 -8 -13 -15 -21 -15 -15 0 -15 1 -1 16 9 8
296
+ 16 21 17 27 0 8 2 8 6 -1 3 -7 2 -19 -1 -27z m-56 -55 c0 -5 -2 -10 -4 -10 -3
297
+ 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m40 0 c0 -5 -2 -10 -4 -10
298
+ -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m10 -51 c0 -6 -4 -7 -10
299
+ -4 -5 3 -10 11 -10 16 0 6 5 7 10 4 6 -3 10 -11 10 -16z m-4393 -39 c-14 -20
300
+ -14 -20 -32 7 -14 21 -14 25 -3 15 13 -10 18 -9 29 4 19 23 24 0 6 -26z m4373
301
+ -1 c0 -5 -4 -9 -10 -9 -5 0 -10 7 -10 16 0 8 5 12 10 9 6 -3 10 -10 10 -16z
302
+ m-110 1 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z
303
+ m210 -11 c0 -5 -9 -9 -20 -9 -11 0 -20 4 -20 8 0 4 9 8 20 9 11 1 20 -2 20 -8z
304
+ m-170 -9 c0 -5 -5 -10 -11 -10 -5 0 -7 5 -4 10 3 6 8 10 11 10 2 0 4 -4 4 -10z
305
+ m120 -15 c0 -19 -5 -25 -22 -24 -13 1 -31 -2 -40 -6 -11 -4 -18 -3 -18 4 0 7
306
+ 14 17 30 22 17 6 30 15 30 20 0 5 5 9 10 9 6 0 10 -11 10 -25z m-4375 -5 c3
307
+ -5 1 -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m4229 -11
308
+ c-2 -4 3 -12 11 -19 19 -16 11 -28 -17 -26 -18 1 -23 7 -23 28 -1 19 4 26 16
309
+ 25 10 -1 16 -4 13 -8z m126 -38 c0 -12 -41 -22 -54 -13 -6 3 0 9 14 13 36 10
310
+ 40 10 40 0z m-160 -25 c0 -11 -19 -15 -25 -6 -3 5 1 10 9 10 9 0 16 -2 16 -4z
311
+ m110 -28 c0 -13 -23 -5 -28 10 -2 7 2 10 12 6 9 -3 16 -11 16 -16z m63 -13
312
+ c-3 -8 -9 -15 -14 -15 -10 0 -12 24 -3 33 11 11 24 -3 17 -18z m-4239 0 c-7
313
+ -17 -20 -20 -28 -6 -4 5 0 12 6 14 23 9 28 7 22 -8z m4110 -10 c-5 -12 -84
314
+ -16 -84 -4 0 12 12 16 49 16 27 0 38 -4 35 -12z m80 -26 c-3 -5 -10 -7 -15 -3
315
+ -5 3 -7 10 -3 15 3 5 10 7 15 3 5 -3 7 -10 3 -15z m-14 -39 c0 -5 -2 -10 -4
316
+ -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m-340 -10 c0 -5 -2
317
+ -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11 -4 11 -10z m260 6 c0 -2
318
+ -7 -6 -15 -10 -8 -3 -15 -1 -15 4 0 6 7 10 15 10 8 0 15 -2 15 -4z m-96 -52
319
+ c4 -9 4 -19 1 -22 -7 -8 -35 19 -29 29 8 14 21 11 28 -7z m-99 -43 c-3 -6 -11
320
+ -11 -17 -11 -6 0 -6 6 2 15 14 17 26 13 15 -4z m81 2 c3 -10 11 -30 19 -46 13
321
+ -25 13 -28 -11 -43 -28 -19 -48 -9 -21 10 19 14 23 35 7 37 -5 1 -14 2 -19 3
322
+ -19 2 -23 16 -7 22 13 5 14 9 5 20 -9 11 -8 14 5 14 9 0 19 -8 22 -17z m-106
323
+ -38 c0 -8 -4 -15 -10 -15 -5 0 -10 7 -10 15 0 8 5 15 10 15 6 0 10 -7 10 -15z
324
+ m-12 -44 c3 -8 -1 -12 -9 -9 -7 2 -15 10 -17 17 -3 8 1 12 9 9 7 -2 15 -10 17
325
+ -17z m220 -56 c-12 -13 -73 49 -63 65 5 9 17 3 40 -21 18 -20 28 -38 23 -44z
326
+ m48 48 c-3 -8 -6 -17 -6 -19 0 -2 -4 -4 -9 -4 -11 0 -23 29 -16 40 9 15 37 -1
327
+ 31 -17z m49 17 c-3 -5 -11 -10 -16 -10 -6 0 -7 5 -4 10 3 6 11 10 16 10 6 0 7
328
+ -4 4 -10z m-335 -36 c0 -8 -4 -12 -10 -9 -5 3 -10 10 -10 16 0 5 5 9 10 9 6 0
329
+ 10 -7 10 -16z m110 -13 c0 -16 -18 -22 -23 -9 -3 9 -9 7 -19 -6 -8 -10 -20
330
+ -16 -26 -12 -19 11 -14 24 11 29 40 8 57 7 57 -2z m60 2 c-1 -11 -26 -43 -34
331
+ -43 -11 0 -6 38 7 43 19 8 27 8 27 0z m20 -28 c0 -8 -4 -15 -10 -15 -5 0 -10
332
+ 7 -10 15 0 8 5 15 10 15 6 0 10 -7 10 -15z m-120 -55 c0 -5 -7 -10 -15 -10 -8
333
+ 0 -15 5 -15 10 0 6 7 10 15 10 8 0 15 -4 15 -10z m70 -6 c0 -8 -4 -12 -10 -9
334
+ -5 3 -10 10 -10 16 0 5 5 9 10 9 6 0 10 -7 10 -16z m-50 -35 c0 -6 11 -20 25
335
+ -31 28 -22 32 -38 10 -38 -8 0 -15 6 -15 14 0 19 -32 30 -41 14 -4 -7 -11 -9
336
+ -16 -4 -4 4 0 12 9 17 10 5 15 16 12 24 -4 8 -1 15 5 15 6 0 11 -5 11 -11z
337
+ m70 -9 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10
338
+ -10z m160 -11 c0 -5 -4 -9 -10 -9 -5 0 -10 7 -10 16 0 8 5 12 10 9 6 -3 10
339
+ -10 10 -16z m-299 -32 c-13 -13 -26 -3 -16 12 3 6 11 8 17 5 6 -4 6 -10 -1
340
+ -17z m-41 -31 c0 -11 -19 -15 -25 -6 -3 5 1 10 9 10 9 0 16 -2 16 -4z m-56
341
+ -21 c-6 -16 -24 -21 -24 -7 0 11 11 22 21 22 5 0 6 -7 3 -15z m106 5 c0 -5 -9
342
+ -10 -20 -10 -11 0 -20 5 -20 10 0 6 9 10 20 10 11 0 20 -4 20 -10z m125 -10
343
+ c-3 -5 -10 -10 -16 -10 -5 0 -9 5 -9 10 0 6 7 10 16 10 8 0 12 -4 9 -10z m-74
344
+ -43 c-13 -13 -26 -3 -16 12 3 6 11 8 17 5 6 -4 6 -10 -1 -17z m89 -3 c0 -8 -4
345
+ -12 -10 -9 -5 3 -10 10 -10 16 0 5 5 9 10 9 6 0 10 -7 10 -16z m-190 -38 c0
346
+ -12 -5 -7 -19 24 -11 24 -11 24 3 6 9 -11 16 -24 16 -30z m94 8 c4 -10 1 -14
347
+ -6 -12 -15 5 -23 28 -10 28 5 0 13 -7 16 -16z m-44 -13 c0 -11 -4 -23 -10 -26
348
+ -6 -4 -10 5 -10 19 0 14 5 26 10 26 6 0 10 -9 10 -19z m100 -7 c0 -14 -3 -14
349
+ -15 -4 -8 7 -15 14 -15 16 0 2 7 4 15 4 8 0 15 -7 15 -16z m-65 -14 c3 -5 1
350
+ -10 -4 -10 -6 0 -11 5 -11 10 0 6 2 10 4 10 3 0 8 -4 11 -10z m-295 -10 c0 -5
351
+ -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m190 0 c0
352
+ -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z m-20
353
+ -39 c0 -6 -4 -13 -10 -16 -5 -3 -10 1 -10 9 0 9 5 16 10 16 6 0 10 -4 10 -9z
354
+ m-50 -71 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10
355
+ -10z m40 -15 c0 -8 -7 -15 -15 -15 -16 0 -20 12 -8 23 11 12 23 8 23 -8z
356
+ m-175 -5 c3 -5 -1 -10 -9 -10 -9 0 -16 5 -16 10 0 6 4 10 9 10 6 0 13 -4 16
357
+ -10z m125 -18 c0 -13 -12 -22 -22 -16 -10 6 -1 24 13 24 5 0 9 -4 9 -8z m-230
358
+ -12 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6 0 10 -4 10 -10z
359
+ m-370 -170 c0 -5 -7 -10 -16 -10 -8 0 -12 5 -9 10 3 6 10 10 16 10 5 0 9 -4 9
360
+ -10z m-90 -30 c0 -5 -2 -10 -4 -10 -3 0 -8 5 -11 10 -3 6 -1 10 4 10 6 0 11
361
+ -4 11 -10z m260 -30 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10 10 10 6
362
+ 0 10 -4 10 -10z m-330 -34 c0 -3 -7 -12 -17 -21 -14 -14 -14 -18 -2 -26 10 -6
363
+ 8 -9 -11 -10 -14 -1 -37 -3 -52 -5 -30 -3 -38 13 -12 23 9 3 20 0 26 -8 6 -10
364
+ 7 -6 2 11 -6 21 -5 23 8 12 12 -10 18 -8 33 8 18 20 25 24 25 16z m-340 -10
365
+ c0 -3 -4 -8 -10 -11 -5 -3 -10 -1 -10 4 0 6 5 11 10 11 6 0 10 -2 10 -4z m363
366
+ -22 c-4 -12 0 -14 21 -8 16 4 26 2 26 -5 0 -14 -57 -14 -66 0 -3 6 0 15 7 20
367
+ 19 12 19 11 12 -7z m77 -14 c0 -5 -4 -10 -10 -10 -5 0 -10 5 -10 10 0 6 5 10
368
+ 10 10 6 0 10 -4 10 -10z"/>
369
+ <path d="M3260 7141 c-12 -23 -13 -31 -2 -31 4 0 12 11 19 25 13 29 -1 34 -17
370
+ 6z"/>
371
+ <path d="M3240 7080 c-8 -5 -11 -12 -7 -16 4 -4 13 -2 19 4 15 15 7 24 -12 12z"/>
372
+ <path d="M3036 6482 c-3 -6 -1 -14 5 -17 15 -10 25 3 12 16 -7 7 -13 7 -17 1z"/>
373
+ <path d="M3016 6351 c-4 -7 -5 -15 -2 -18 9 -9 19 4 14 18 -4 11 -6 11 -12 0z"/>
374
+ <path d="M3001 6236 c-8 -10 -9 -16 -1 -21 13 -8 30 3 30 21 0 18 -14 18 -29
375
+ 0z"/>
376
+ <path d="M3036 6153 c-6 -14 -5 -15 5 -6 7 7 10 15 7 18 -3 3 -9 -2 -12 -12z"/>
377
+ <path d="M2985 6070 c-3 -6 4 -24 16 -42 14 -19 25 -26 27 -19 2 7 -1 18 -7
378
+ 24 -6 6 -11 19 -11 29 0 19 -15 24 -25 8z"/>
379
+ <path d="M3030 6066 c0 -9 5 -16 10 -16 6 0 10 4 10 9 0 6 -4 13 -10 16 -5 3
380
+ -10 -1 -10 -9z"/>
381
+ <path d="M3026 5972 c-3 -6 -1 -14 5 -17 15 -10 25 3 12 16 -7 7 -13 7 -17 1z"/>
382
+ <path d="M2992 5920 c-16 -26 -15 -40 2 -40 16 0 27 32 17 48 -4 7 -11 4 -19
383
+ -8z"/>
384
+ <path d="M2987 5658 c7 -37 10 -44 19 -35 9 8 -6 67 -17 67 -4 0 -6 -15 -2
385
+ -32z"/>
386
+ <path d="M3046 5581 c-4 -7 -5 -15 -2 -18 9 -9 19 4 14 18 -4 11 -6 11 -12 0z"/>
387
+ <path d="M3060 5285 c0 -8 5 -15 10 -15 6 0 10 7 10 15 0 8 -4 15 -10 15 -5 0
388
+ -10 -7 -10 -15z"/>
389
+ <path d="M3085 5250 c-3 -5 -1 -10 4 -10 6 0 11 5 11 10 0 6 -2 10 -4 10 -3 0
390
+ -8 -4 -11 -10z"/>
391
+ <path d="M3080 5205 c0 -9 5 -15 11 -13 6 2 11 8 11 13 0 5 -5 11 -11 13 -6 2
392
+ -11 -4 -11 -13z"/>
393
+ <path d="M3252 4768 c5 -15 28 -23 28 -10 0 5 -7 13 -16 16 -10 4 -14 1 -12
394
+ -6z"/>
395
+ <path d="M8190 4449 c0 -12 29 -38 43 -39 4 0 0 11 -9 25 -17 26 -34 33 -34
396
+ 14z"/>
397
+ <path d="M8200 4385 c0 -8 5 -15 10 -15 6 0 10 7 10 15 0 8 -4 15 -10 15 -5 0
398
+ -10 -7 -10 -15z"/>
399
+ <path d="M8236 4305 c4 -8 10 -15 15 -15 5 0 9 7 9 15 0 8 -7 15 -15 15 -9 0
400
+ -12 -6 -9 -15z"/>
401
+ <path d="M8085 4180 c3 -5 8 -10 11 -10 2 0 4 5 4 10 0 6 -5 10 -11 10 -5 0
402
+ -7 -4 -4 -10z"/>
403
+ <path d="M8240 4169 c0 -18 2 -19 15 -9 15 12 12 30 -6 30 -5 0 -9 -10 -9 -21z"/>
404
+ <path d="M8186 4114 c-8 -22 1 -31 16 -16 9 9 9 15 1 23 -7 7 -12 5 -17 -7z"/>
405
+ <path d="M8050 4090 c0 -11 5 -20 10 -20 6 0 10 -6 10 -14 0 -10 10 -14 30
406
+ -14 19 1 30 6 30 16 0 9 -6 12 -15 8 -21 -8 -54 14 -48 31 3 7 0 13 -6 13 -6
407
+ 0 -11 -9 -11 -20z"/>
408
+ <path d="M8220 4029 c0 -5 5 -7 10 -4 6 3 10 8 10 11 0 2 -4 4 -10 4 -5 0 -10
409
+ -5 -10 -11z"/>
410
+ <path d="M8070 4014 c0 -8 5 -12 10 -9 6 4 8 11 5 16 -9 14 -15 11 -15 -7z"/>
411
+ <path d="M8099 4010 c-1 -11 -2 -25 -3 -32 -1 -6 4 -13 10 -15 17 -6 24 55 7
412
+ 61 -8 3 -14 -2 -14 -14z"/>
413
+ <path d="M8020 3991 c0 -8 43 -41 55 -41 16 0 1 29 -20 38 -31 14 -35 15 -35
414
+ 3z"/>
415
+ <path d="M8146 3984 c-8 -22 1 -31 16 -16 9 9 9 15 1 23 -7 7 -12 5 -17 -7z"/>
416
+ <path d="M7895 3971 c-6 -11 9 -23 19 -14 9 9 7 23 -3 23 -6 0 -12 -4 -16 -9z"/>
417
+ <path d="M8096 3932 c-3 -6 -1 -14 5 -17 15 -10 25 3 12 16 -7 7 -13 7 -17 1z"/>
418
+ <path d="M8168 3910 c2 -17 10 -30 19 -30 20 0 13 54 -8 58 -12 2 -15 -4 -11
419
+ -28z"/>
420
+ <path d="M8032 3909 c2 -7 10 -15 17 -17 8 -3 12 1 9 9 -2 7 -10 15 -17 17 -8
421
+ 3 -12 -1 -9 -9z"/>
422
+ <path d="M8115 3891 c-3 -5 -1 -12 5 -16 5 -3 10 1 10 9 0 18 -6 21 -15 7z"/>
423
+ <path d="M8080 3860 c0 -5 5 -10 10 -10 6 0 10 5 10 10 0 6 -4 10 -10 10 -5 0
424
+ -10 -4 -10 -10z"/>
425
+ <path d="M8050 3825 c0 -18 33 -65 44 -65 28 0 46 12 46 31 0 23 -15 25 -24 4
426
+ -8 -22 -21 -18 -36 10 -12 22 -30 34 -30 20z"/>
427
+ <path d="M8020 3780 c0 -5 9 -10 21 -10 11 0 17 5 14 10 -3 6 -13 10 -21 10
428
+ -8 0 -14 -4 -14 -10z"/>
429
+ <path d="M8027 3744 c-11 -11 -8 -44 3 -44 15 0 24 30 13 41 -5 5 -12 6 -16 3z"/>
430
+ <path d="M8085 3720 c-3 -5 1 -10 9 -10 9 0 16 5 16 10 0 6 -4 10 -9 10 -6 0
431
+ -13 -4 -16 -10z"/>
432
+ <path d="M8010 3660 c0 -13 5 -20 13 -17 6 2 12 10 12 17 0 7 -6 15 -12 18 -8
433
+ 2 -13 -5 -13 -18z"/>
434
+ <path d="M7931 3636 c-12 -18 -21 -38 -21 -44 0 -18 58 -10 76 10 18 19 11 39
435
+ -7 21 -12 -12 -39 -6 -39 8 0 5 7 9 15 9 8 0 15 7 15 15 0 25 -17 17 -39 -19z"/>
436
+ <path d="M7867 3573 c-11 -10 -8 -63 3 -63 6 0 10 7 10 15 0 8 7 15 15 15 20
437
+ 0 19 26 -1 34 -19 7 -19 7 -27 -1z"/>
438
+ <path d="M7695 3389 c-9 -14 -2 -20 14 -10 8 6 9 11 3 15 -6 3 -14 1 -17 -5z"/>
439
+ <path d="M7656 3371 c-4 -7 -5 -15 -2 -18 9 -9 19 4 14 18 -4 11 -6 11 -12 0z"/>
440
+ <path d="M7616 3351 c-4 -5 -2 -12 3 -15 5 -4 12 -2 15 3 4 5 2 12 -3 15 -5 4
441
+ -12 2 -15 -3z"/>
442
+ <path d="M7420 3240 c-8 -5 -12 -11 -9 -14 2 -3 11 -1 19 4 8 5 12 11 9 14 -2
443
+ 3 -11 1 -19 -4z"/>
444
+ <path d="M7375 3200 c-3 -5 -1 -10 4 -10 6 0 11 5 11 10 0 6 -2 10 -4 10 -3 0
445
+ -8 -4 -11 -10z"/>
446
+ </g></g></g>
447
+ <g fill="currentColor" transform="translate(137.50 79.25) scale(0.10000 -0.10000)"><path transform="translate(0.00 0)" d="M375 -16Q272 -16 198.0 28.5Q124 73 84.0 156.0Q44 239 44 354Q44 469 84.0 552.5Q124 636 198.0 681.0Q272 726 375 726Q479 726 553.5 681.0Q628 636 667.5 552.5Q707 469 707 354Q707 239 667.5 156.0Q628 73 553.5 28.5Q479 -16 375 -16ZM375 83Q478 83 536.5 154.5Q595 226 595 354Q595 482 536.5 554.5Q478 627 375 627Q273 627 214.5 554.5Q156 482 156 354Q156 226 214.5 154.5Q273 83 375 83Z"/><path transform="translate(751.00 0)" d="M264 -12Q196 -12 146.0 22.0Q96 56 69.0 118.5Q42 181 42 266Q42 351 69.0 413.5Q96 476 146.0 510.0Q196 544 264 544Q319 544 362.0 521.0Q405 498 427 457V710H533V0H434L431 80Q409 36 364.5 12.0Q320 -12 264 -12ZM292 80Q357 80 392.0 129.0Q427 178 427 266Q427 355 392.0 403.5Q357 452 292 452Q228 452 190.0 402.5Q152 353 152 266Q152 181 190.0 130.5Q228 80 292 80Z"/><path transform="translate(1359.00 0)" d="M294 -12Q218 -12 161.0 22.5Q104 57 73.0 119.0Q42 181 42 266Q42 351 73.0 413.0Q104 475 161.0 509.5Q218 544 294 544Q370 544 427.0 509.5Q484 475 515.0 413.0Q546 351 546 266Q546 181 515.0 119.0Q484 57 427.0 22.5Q370 -12 294 -12ZM294 80Q362 80 399.0 129.0Q436 178 436 266Q436 353 399.0 402.5Q362 452 294 452Q227 452 189.5 402.5Q152 353 152 266Q152 178 189.5 129.0Q227 80 294 80Z"/><path transform="translate(1947.00 0)" d="M75 0V532H172L175 431Q190 483 221.5 507.5Q253 532 302 532H353V437H302Q241 437 211.0 407.0Q181 377 181 314V0Z"/><path transform="translate(2341.00 0)" d="M75 0V532H181V0ZM73 609V715H183V609Z"/></g>
448
+ </svg>
449
+ );
@@ -0,0 +1,138 @@
1
+ import type {ButtonHTMLAttributes, ReactNode} from "react";
2
+
3
+ export const Button = ({
4
+ variant = "ghost",
5
+ active,
6
+ icon,
7
+ children,
8
+ ...props
9
+ }: ButtonHTMLAttributes<HTMLButtonElement> & {
10
+ variant?: "ghost" | "outline" | "primary";
11
+ active?: boolean;
12
+ icon?: boolean;
13
+ }) => (
14
+ <button
15
+ type="button"
16
+ className="button"
17
+ data-variant={variant}
18
+ data-active={active ? "true" : undefined}
19
+ data-icon={icon ? "true" : undefined}
20
+ {...props}
21
+ >
22
+ {children}
23
+ </button>
24
+ );
25
+
26
+ export const Badge = ({children, tone}: {children: ReactNode; tone?: "success" | "warning" | "danger"}) => (
27
+ <span className="badge" data-tone={tone}>
28
+ {children}
29
+ </span>
30
+ );
31
+
32
+ export const Kbd = ({children}: {children: ReactNode}) => <kbd className="kbd">{children}</kbd>;
33
+
34
+ export const Separator = () => <div className="separator" />;
35
+
36
+ export const SectionTitle = ({children}: {children: ReactNode}) => <h2 className="section-title">{children}</h2>;
37
+
38
+ export const Fact = ({label, children}: {label: string; children: ReactNode}) => (
39
+ <div className="fact">
40
+ <dt>{label}</dt>
41
+ <dd>{children}</dd>
42
+ </div>
43
+ );
44
+
45
+ export const Empty = ({title, children}: {title: string; children?: ReactNode}) => (
46
+ <div className="empty">
47
+ <h2>{title}</h2>
48
+ <p className="hint">{children}</p>
49
+ </div>
50
+ );
51
+
52
+ /** Playback glyphs drawn inline so Studio needs no icon dependency. */
53
+ export const Icon = ({
54
+ name,
55
+ }: {
56
+ name:
57
+ | "play"
58
+ | "pause"
59
+ | "prev"
60
+ | "next"
61
+ | "start"
62
+ | "end"
63
+ | "loop"
64
+ | "sound"
65
+ | "muted"
66
+ | "caret"
67
+ | "sun"
68
+ | "moon"
69
+ | "display"
70
+ | "external"
71
+ | "search";
72
+ }) => {
73
+ const paths: Record<string, ReactNode> = {
74
+ play: <path d="M4.5 2.8v8.4l7-4.2z" fill="currentColor" />,
75
+ sun: (
76
+ <>
77
+ <circle cx="7" cy="7" r="2.5" fill="none" stroke="currentColor" strokeWidth="1.2" />
78
+ <path
79
+ d="M7 1.4v1.3M7 11.3v1.3M1.4 7h1.3M11.3 7h1.3M3.05 3.05l.92.92M10.03 10.03l.92.92M10.95 3.05l-.92.92M3.97 10.03l-.92.92"
80
+ fill="none"
81
+ stroke="currentColor"
82
+ strokeLinecap="round"
83
+ strokeWidth="1.2"
84
+ />
85
+ </>
86
+ ),
87
+ moon: <path d="M11.4 8.6A4.7 4.7 0 0 1 5.4 2.6 4.9 4.9 0 1 0 11.4 8.6z" fill="currentColor" />,
88
+ display: (
89
+ <>
90
+ <rect x="1.9" y="2.6" width="10.2" height="7.1" rx="1.2" fill="none" stroke="currentColor" strokeWidth="1.2" />
91
+ <path d="M5.2 11.9h3.6" fill="none" stroke="currentColor" strokeLinecap="round" strokeWidth="1.2" />
92
+ </>
93
+ ),
94
+ caret: <path d="M3.6 5.6 7 9l3.4-3.4" fill="none" stroke="currentColor" strokeWidth="1.4" />,
95
+ search: (
96
+ <>
97
+ <circle cx="6.2" cy="6.2" r="3.4" fill="none" stroke="currentColor" strokeWidth="1.3" />
98
+ <path d="M8.9 8.9 11.6 11.6" fill="none" stroke="currentColor" strokeWidth="1.3" strokeLinecap="round" />
99
+ </>
100
+ ),
101
+ external: (
102
+ <>
103
+ <path d="M5.5 3H3.2v7.8H11V8.5" fill="none" stroke="currentColor" strokeWidth="1.2" />
104
+ <path d="M7.6 2.6H11.4V6.4M11.2 2.8 6.6 7.4" fill="none" stroke="currentColor" strokeWidth="1.2" />
105
+ </>
106
+ ),
107
+ pause: <path d="M4 2.8h2v8.4H4zM8 2.8h2v8.4H8z" fill="currentColor" />,
108
+ prev: <path d="M9.5 2.8v8.4l-6-4.2zM3 2.8h1.2v8.4H3z" fill="currentColor" />,
109
+ next: <path d="M4.5 2.8v8.4l6-4.2zM9.8 2.8H11v8.4H9.8z" fill="currentColor" />,
110
+ start: <path d="M11 2.8v8.4L4.5 7zM3 2.8h1.2v8.4H3z" fill="currentColor" />,
111
+ end: <path d="M3 2.8v8.4L9.5 7zM9.8 2.8H11v8.4H9.8z" fill="currentColor" />,
112
+ sound: (
113
+ <>
114
+ <path d="M3 5.2h2.2L8 3v8L5.2 8.8H3z" fill="currentColor" />
115
+ <path d="M9.6 4.6a3.4 3.4 0 0 1 0 4.8" fill="none" stroke="currentColor" strokeWidth="1.2" />
116
+ </>
117
+ ),
118
+ muted: (
119
+ <>
120
+ <path d="M3 5.2h2.2L8 3v8L5.2 8.8H3z" fill="currentColor" />
121
+ <path d="M9.6 5 12 9M12 5l-2.4 4" fill="none" stroke="currentColor" strokeWidth="1.2" />
122
+ </>
123
+ ),
124
+ loop: (
125
+ <path
126
+ d="M3 6a3 3 0 0 1 3-3h3M11 8a3 3 0 0 1-3 3H5M9 1.5 10.8 3 9 4.5M5 9.5 3.2 11 5 12.5"
127
+ fill="none"
128
+ stroke="currentColor"
129
+ strokeWidth="1.2"
130
+ />
131
+ ),
132
+ };
133
+ return (
134
+ <svg width="14" height="14" viewBox="0 0 14 14" aria-hidden="true">
135
+ {paths[name]}
136
+ </svg>
137
+ );
138
+ };
@@ -0,0 +1,52 @@
1
+ import {duckEnvelope, gainAtFrame, integratedLufs, type AudioTrack} from "odori";
2
+
3
+ /**
4
+ * Measure the mix Studio is playing.
5
+ *
6
+ * The track is rendered offline through the same gain and duck envelopes the
7
+ * player uses, then measured to BS.1770. That is the level handed to the
8
+ * encoder, before it normalizes to the brand target, so the two numbers side
9
+ * by side say how far a mix has to travel.
10
+ */
11
+ export const measureTrack = async (track: AudioTrack, fps: number, durationInFrames: number): Promise<number | null> => {
12
+ if (track.cues.length === 0 || durationInFrames === 0) return null;
13
+
14
+ const sampleRate = 48000;
15
+ const seconds = durationInFrames / fps;
16
+ const context = new OfflineAudioContext(2, Math.ceil(seconds * sampleRate), sampleRate);
17
+
18
+ const sources = await Promise.all(
19
+ track.cues.map(async (cue) => {
20
+ const response = await fetch(cue.src);
21
+ if (!response.ok) return null;
22
+ return {cue, buffer: await context.decodeAudioData(await response.arrayBuffer())};
23
+ }),
24
+ );
25
+
26
+ let scheduled = 0;
27
+ for (const entry of sources) {
28
+ if (!entry) continue;
29
+ const {cue, buffer} = entry;
30
+ const source = context.createBufferSource();
31
+ source.buffer = buffer;
32
+ source.loop = cue.loop;
33
+
34
+ // One breakpoint per envelope point, carrying the cue's own fades, which
35
+ // is the curve the player evaluates frame by frame.
36
+ const gain = context.createGain();
37
+ gain.gain.setValueAtTime(0, 0);
38
+ for (const point of duckEnvelope(cue, track.cues)) {
39
+ const time = Math.max(0, point.frame / fps);
40
+ gain.gain.linearRampToValueAtTime(Math.max(0, gainAtFrame(cue, point.frame) * point.value), time);
41
+ }
42
+
43
+ source.connect(gain).connect(context.destination);
44
+ source.start(cue.fromFrame / fps, cue.trimStartSeconds, cue.durationInFrames / fps);
45
+ scheduled += 1;
46
+ }
47
+ if (scheduled === 0) return null;
48
+
49
+ const rendered = await context.startRendering();
50
+ const channels = Array.from({length: rendered.numberOfChannels}, (_, index) => rendered.getChannelData(index));
51
+ return integratedLufs(channels, rendered.sampleRate);
52
+ };