lightview 1.8.2 → 2.0.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 (264) hide show
  1. package/.agent/workflows/daisyui-component-migration.md +155 -0
  2. package/.codacy/cli.sh +149 -0
  3. package/.codacy/codacy.yaml +15 -0
  4. package/.github/instructions/codacy.instructions.md +72 -0
  5. package/.wranglerignore +21 -0
  6. package/README.md +1330 -19
  7. package/_headers +4 -0
  8. package/build.js +70 -0
  9. package/components/actions/button.js +151 -0
  10. package/components/actions/dropdown.js +120 -0
  11. package/components/actions/modal.js +146 -0
  12. package/components/actions/swap.js +118 -0
  13. package/components/daisyui.js +288 -0
  14. package/components/data-display/accordion.js +128 -0
  15. package/components/data-display/alert.js +112 -0
  16. package/components/data-display/avatar.js +170 -0
  17. package/components/data-display/badge.js +82 -0
  18. package/components/data-display/card.js +151 -0
  19. package/components/data-display/carousel.js +94 -0
  20. package/components/data-display/chart.js +220 -0
  21. package/components/data-display/chat.js +128 -0
  22. package/components/data-display/collapse.js +103 -0
  23. package/components/data-display/countdown.js +69 -0
  24. package/components/data-display/diff.js +111 -0
  25. package/components/data-display/kbd.js +65 -0
  26. package/components/data-display/loading.js +75 -0
  27. package/components/data-display/progress.js +79 -0
  28. package/components/data-display/radial-progress.js +88 -0
  29. package/components/data-display/skeleton.js +66 -0
  30. package/components/data-display/stats.js +159 -0
  31. package/components/data-display/table.js +146 -0
  32. package/components/data-display/timeline.js +146 -0
  33. package/components/data-display/toast.js +72 -0
  34. package/components/data-display/tooltip.js +74 -0
  35. package/components/data-input/checkbox.js +253 -0
  36. package/components/data-input/file-input.js +224 -0
  37. package/components/data-input/input.js +264 -0
  38. package/components/data-input/radio.js +338 -0
  39. package/components/data-input/range.js +204 -0
  40. package/components/data-input/rating.js +219 -0
  41. package/components/data-input/select.js +287 -0
  42. package/components/data-input/textarea.js +287 -0
  43. package/components/data-input/toggle.js +201 -0
  44. package/components/index.js +137 -0
  45. package/components/layout/divider.js +72 -0
  46. package/components/layout/drawer.js +142 -0
  47. package/components/layout/footer.js +100 -0
  48. package/components/layout/hero.js +109 -0
  49. package/components/layout/indicator.js +90 -0
  50. package/components/layout/join.js +78 -0
  51. package/components/layout/navbar.js +110 -0
  52. package/components/navigation/breadcrumbs.js +91 -0
  53. package/components/navigation/dock.js +103 -0
  54. package/components/navigation/menu.js +126 -0
  55. package/components/navigation/pagination.js +105 -0
  56. package/components/navigation/steps.js +89 -0
  57. package/components/navigation/tabs.css +177 -0
  58. package/components/navigation/tabs.js +123 -0
  59. package/components/theme/theme-switch.css +65 -0
  60. package/components/theme/theme-switch.js +177 -0
  61. package/docs/about.html +164 -0
  62. package/docs/api/computed.html +184 -0
  63. package/docs/api/effects.html +173 -0
  64. package/docs/api/elements.html +180 -0
  65. package/docs/api/enhance.html +225 -0
  66. package/docs/api/hypermedia.html +165 -0
  67. package/docs/api/index.html +178 -0
  68. package/docs/api/nav.html +18 -0
  69. package/docs/api/signals.html +136 -0
  70. package/docs/api/state.html +217 -0
  71. package/docs/assets/images/logo-favicon.svg +42 -0
  72. package/docs/assets/images/logo-static.svg +40 -0
  73. package/docs/assets/images/logo.svg +66 -0
  74. package/docs/assets/js/examplify.js +395 -0
  75. package/docs/assets/styles/site.css +1102 -0
  76. package/docs/assets/styles/themes.css +236 -0
  77. package/docs/components/accordion.html +439 -0
  78. package/docs/components/alert.html +528 -0
  79. package/docs/components/avatar.html +586 -0
  80. package/docs/components/badge.html +531 -0
  81. package/docs/components/breadcrumbs.html +278 -0
  82. package/docs/components/button.html +579 -0
  83. package/docs/components/card.html +561 -0
  84. package/docs/components/carousel.html +286 -0
  85. package/docs/components/chart-area.html +702 -0
  86. package/docs/components/chart-bar.html +782 -0
  87. package/docs/components/chart-column.html +735 -0
  88. package/docs/components/chart-line.html +794 -0
  89. package/docs/components/chart-pie.html +823 -0
  90. package/docs/components/chart.html +610 -15
  91. package/docs/components/chat.html +547 -0
  92. package/docs/components/checkbox.html +641 -0
  93. package/docs/components/collapse.html +536 -0
  94. package/docs/components/component-nav.html +53 -0
  95. package/docs/components/countdown.html +470 -0
  96. package/docs/components/diff.html +245 -0
  97. package/docs/components/divider.html +240 -0
  98. package/docs/components/dock.html +277 -0
  99. package/docs/components/drawer.html +515 -0
  100. package/docs/components/dropdown.html +479 -0
  101. package/docs/components/file-input.html +591 -0
  102. package/docs/components/footer.html +301 -0
  103. package/docs/components/gallery.html +504 -0
  104. package/docs/components/hero.html +264 -0
  105. package/docs/components/index.css +840 -0
  106. package/docs/components/index.html +735 -0
  107. package/docs/components/indicator.html +342 -0
  108. package/docs/components/input.html +644 -0
  109. package/docs/components/join.html +285 -0
  110. package/docs/components/kbd.html +322 -0
  111. package/docs/components/loading.html +521 -0
  112. package/docs/components/menu.html +461 -0
  113. package/docs/components/modal.html +639 -0
  114. package/docs/components/navbar.html +321 -0
  115. package/docs/components/pagination.html +279 -0
  116. package/docs/components/progress.html +514 -0
  117. package/docs/components/radial-progress.html +434 -0
  118. package/docs/components/radio.html +655 -0
  119. package/docs/components/range.html +611 -0
  120. package/docs/components/rating.html +642 -0
  121. package/docs/components/select.html +696 -0
  122. package/docs/components/sidebar-setup.js +93 -0
  123. package/docs/components/skeleton.html +447 -0
  124. package/docs/components/spinner.html +68 -0
  125. package/docs/components/stats.html +486 -0
  126. package/docs/components/steps.html +356 -0
  127. package/docs/components/swap.html +517 -0
  128. package/docs/components/switch.html +68 -0
  129. package/docs/components/table.html +668 -0
  130. package/docs/components/tabs.html +506 -0
  131. package/docs/components/text-input.html +68 -0
  132. package/docs/components/textarea.html +603 -0
  133. package/docs/components/timeline.html +485 -42
  134. package/docs/components/toast.html +474 -0
  135. package/docs/components/toggle.html +564 -0
  136. package/docs/components/tooltip.html +423 -0
  137. package/docs/examples/getting-started-example.html +40 -0
  138. package/docs/examples/index.html +93 -0
  139. package/docs/getting-started/index.html +739 -0
  140. package/docs/getting-started/reviews.html +23 -0
  141. package/docs/getting-started/reviews.odom +108 -0
  142. package/docs/getting-started/reviews.vdom +84 -0
  143. package/docs/index.html +132 -42
  144. package/docs/playground.html +416 -0
  145. package/docs/router.html +285 -0
  146. package/docs/styles/index.html +190 -0
  147. package/functions/_middleware.js +32 -0
  148. package/index.html +309 -0
  149. package/lightview-router.js +364 -0
  150. package/lightview-x.js +1577 -0
  151. package/lightview.js +659 -1200
  152. package/lightview.js.backup +793 -0
  153. package/middleware/locale.js +25 -0
  154. package/middleware/markdown.js +44 -0
  155. package/middleware/notFound.js +37 -0
  156. package/package.json +27 -41
  157. package/watch.js +92 -0
  158. package/wrangler.toml +12 -0
  159. package/.idea/lightview.iml +0 -12
  160. package/.idea/modules.xml +0 -8
  161. package/.idea/vcs.xml +0 -6
  162. package/LICENSE +0 -21
  163. package/codepen-no-tabs-embed.css +0 -2
  164. package/docs/CNAME +0 -1
  165. package/docs/api.html +0 -674
  166. package/docs/blank.html +0 -10
  167. package/docs/comparedto.html +0 -89
  168. package/docs/components/chart-repl.html +0 -69
  169. package/docs/components/components.js +0 -113
  170. package/docs/components/contents.html +0 -17
  171. package/docs/components/gantt-repl.html +0 -61
  172. package/docs/components/gantt.html +0 -42
  173. package/docs/components/gauge-repl.html +0 -66
  174. package/docs/components/gauge.html +0 -20
  175. package/docs/components/orgchart-repl.html +0 -64
  176. package/docs/components/orgchart.html +0 -41
  177. package/docs/components/repl-as-src.html +0 -17
  178. package/docs/components/repl-repl.html +0 -95
  179. package/docs/components/repl.html +0 -527
  180. package/docs/components/timeline-repl.html +0 -72
  181. package/docs/components.html +0 -14
  182. package/docs/css/highlightjs.min.css +0 -9
  183. package/docs/css/tutorial.css +0 -35
  184. package/docs/examples/anchor.html +0 -11
  185. package/docs/examples/chart.html +0 -34
  186. package/docs/examples/counter.html +0 -26
  187. package/docs/examples/counter.test.mjs +0 -47
  188. package/docs/examples/counter2.html +0 -26
  189. package/docs/examples/directives.html +0 -79
  190. package/docs/examples/foreign.html +0 -50
  191. package/docs/examples/forgeinform.html +0 -98
  192. package/docs/examples/form.html +0 -61
  193. package/docs/examples/gauge.html +0 -18
  194. package/docs/examples/invalid-template-literals.html +0 -44
  195. package/docs/examples/medium/remote.html +0 -60
  196. package/docs/examples/message.html +0 -18
  197. package/docs/examples/nested.html +0 -11
  198. package/docs/examples/object-bound-form.html +0 -34
  199. package/docs/examples/remote-server.js +0 -51
  200. package/docs/examples/remote.html +0 -34
  201. package/docs/examples/remote.json +0 -1
  202. package/docs/examples/scratch.html +0 -69
  203. package/docs/examples/sensors/index.html +0 -44
  204. package/docs/examples/sensors/sensor-server.js +0 -30
  205. package/docs/examples/shared.html +0 -41
  206. package/docs/examples/template.html +0 -33
  207. package/docs/examples/timeline.html +0 -21
  208. package/docs/examples/todo.html +0 -40
  209. package/docs/examples/top.html +0 -10
  210. package/docs/examples/types.html +0 -94
  211. package/docs/examples/xor.html +0 -62
  212. package/docs/examples.html +0 -25
  213. package/docs/javascript/codejar.min.js +0 -8
  214. package/docs/javascript/highlightjs.min.js +0 -1173
  215. package/docs/javascript/isomorphic-git.js +0 -9
  216. package/docs/javascript/json5.min.js +0 -1
  217. package/docs/javascript/lightning-fs.js +0 -1
  218. package/docs/javascript/lightview.js +0 -1285
  219. package/docs/javascript/marked.min.js +0 -6
  220. package/docs/javascript/peerjs.min.js +0 -70
  221. package/docs/javascript/turndown.js +0 -973
  222. package/docs/javascript/types.js +0 -606
  223. package/docs/javascript/utils.js +0 -45
  224. package/docs/lightview.html +0 -63
  225. package/docs/old_index.html +0 -965
  226. package/docs/old_index.md +0 -1132
  227. package/docs/slidein.html +0 -51
  228. package/docs/tutorial/0-getting-started.html +0 -67
  229. package/docs/tutorial/1-intro-to-variables.html +0 -103
  230. package/docs/tutorial/10-template-components.html +0 -80
  231. package/docs/tutorial/11-linked-components.html +0 -76
  232. package/docs/tutorial/12-imported-components.html +0 -67
  233. package/docs/tutorial/13-input-binding.html +0 -94
  234. package/docs/tutorial/14-automatic-variable-creation.html +0 -74
  235. package/docs/tutorial/15-form-binding.html +0 -110
  236. package/docs/tutorial/16-if-directive.html +0 -60
  237. package/docs/tutorial/17-loop-directives.html +0 -83
  238. package/docs/tutorial/18-sanitizing-and-escaping-input.html +0 -79
  239. package/docs/tutorial/2-imported-and-exported-variables.html +0 -80
  240. package/docs/tutorial/3-data-types.html +0 -89
  241. package/docs/tutorial/4-extended-data-types.html +0 -83
  242. package/docs/tutorial/5-extended-functional-types.html +0 -96
  243. package/docs/tutorial/5.1-extended-functional-types.html +0 -79
  244. package/docs/tutorial/5.2-extended-functional-types.html +0 -70
  245. package/docs/tutorial/6-conventional-javascript.html +0 -75
  246. package/docs/tutorial/7-monitoring-with-observers.html +0 -107
  247. package/docs/tutorial/8-event-listeners.html +0 -65
  248. package/docs/tutorial/9-intro-to-components.html +0 -91
  249. package/docs/tutorial/contents.html +0 -32
  250. package/docs/tutorial/my-component.html +0 -29
  251. package/docs/tutorial/remote-value.json +0 -4
  252. package/docs/websiterepl.html +0 -46
  253. package/jest-puppeteer.config.js +0 -5
  254. package/jest.config.json +0 -12
  255. package/lightview.min.js +0 -1
  256. package/lightview_good.js +0 -1267
  257. package/lightview_optimized.js +0 -1274
  258. package/repl_hold.html +0 -320
  259. package/test/basic.html +0 -104
  260. package/test/basic.test.mjs +0 -315
  261. package/test/extended.html +0 -29
  262. package/test/extended.test.mjs +0 -448
  263. package/types.js +0 -607
  264. package/unsplash.key +0 -1
@@ -0,0 +1,1102 @@
1
+ /* ========================================
2
+ Lightview Documentation Site Styles
3
+ "Why be heavy when you can be light?"
4
+ ======================================== */
5
+
6
+ /* ============= CSS Variables ============= */
7
+ :root {
8
+ /* Brand Colors - Light Theme */
9
+ --site-primary: #6366f1;
10
+ --site-primary-hover: #4f46e5;
11
+ --site-primary-light: #e0e7ff;
12
+ --site-primary-dark: #4338ca;
13
+
14
+ --site-accent: #f59e0b;
15
+ --site-accent-hover: #d97706;
16
+ --site-accent-light: #fef3c7;
17
+
18
+ --site-success: #10b981;
19
+ --site-warning: #f59e0b;
20
+ --site-danger: #ef4444;
21
+ --site-info: #06b6d4;
22
+
23
+ /* Backgrounds */
24
+ --site-bg: #fafafa;
25
+ --site-bg-alt: #f1f5f9;
26
+ --site-surface: #ffffff;
27
+ --site-surface-elevated: #ffffff;
28
+
29
+ /* Text */
30
+ --site-text: #1e293b;
31
+ --site-text-secondary: #64748b;
32
+ --site-text-muted: #94a3b8;
33
+
34
+ /* Borders */
35
+ --site-border: #e2e8f0;
36
+ --site-border-hover: #cbd5e1;
37
+
38
+ /* Code */
39
+ --site-code-bg: #f1f5f9;
40
+ --site-code-text: #1e293b;
41
+
42
+ /* Shadows */
43
+ --site-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
44
+ --site-shadow: 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 2px rgba(0, 0, 0, 0.06);
45
+ --site-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
46
+ --site-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
47
+
48
+ /* Spacing */
49
+ --site-nav-height: 64px;
50
+ --site-content-max-width: 1200px;
51
+ --site-sidebar-width: 260px;
52
+
53
+ /* Transitions */
54
+ --site-transition: 0.2s ease;
55
+ --site-transition-slow: 0.3s ease;
56
+
57
+ /* Typography */
58
+ --site-font: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
59
+ --site-font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
60
+
61
+ /* Border Radius */
62
+ --site-radius-sm: 4px;
63
+ --site-radius: 8px;
64
+ --site-radius-lg: 12px;
65
+ --site-radius-xl: 16px;
66
+ }
67
+
68
+ /* Dark Theme */
69
+ [data-theme="dark"] {
70
+ --site-primary: #818cf8;
71
+ --site-primary-hover: #a5b4fc;
72
+ --site-primary-light: #312e81;
73
+ --site-primary-dark: #c7d2fe;
74
+
75
+ --site-accent: #fbbf24;
76
+ --site-accent-hover: #fcd34d;
77
+ --site-accent-light: #78350f;
78
+
79
+ --site-bg: #0f172a;
80
+ --site-bg-alt: #1e293b;
81
+ --site-surface: #1e293b;
82
+ --site-surface-elevated: #334155;
83
+
84
+ --site-text: #f1f5f9;
85
+ --site-text-secondary: #94a3b8;
86
+ --site-text-muted: #64748b;
87
+
88
+ --site-border: #334155;
89
+ --site-border-hover: #475569;
90
+
91
+ --site-code-bg: #1e293b;
92
+ --site-code-text: #e2e8f0;
93
+
94
+ --site-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
95
+ --site-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 1px 2px rgba(0, 0, 0, 0.3);
96
+ --site-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
97
+ --site-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -2px rgba(0, 0, 0, 0.3);
98
+ }
99
+
100
+ /* ============= Reset & Base ============= */
101
+ *,
102
+ *::before,
103
+ *::after {
104
+ box-sizing: border-box;
105
+ }
106
+
107
+ html {
108
+ scroll-behavior: smooth;
109
+ }
110
+
111
+ body {
112
+ margin: 0;
113
+ padding: 0;
114
+ font-family: var(--site-font);
115
+ font-size: 16px;
116
+ line-height: 1.6;
117
+ color: var(--site-text);
118
+ background-color: var(--site-bg);
119
+ -webkit-font-smoothing: antialiased;
120
+ -moz-osx-font-smoothing: grayscale;
121
+ }
122
+
123
+ a {
124
+ color: var(--site-primary);
125
+ text-decoration: none;
126
+ transition: color var(--site-transition);
127
+ }
128
+
129
+ a:hover {
130
+ color: var(--site-primary-hover);
131
+ }
132
+
133
+ img {
134
+ max-width: 100%;
135
+ height: auto;
136
+ }
137
+
138
+ /* ============= Navigation ============= */
139
+ .site-nav {
140
+ position: fixed;
141
+ top: 0;
142
+ left: 0;
143
+ right: 0;
144
+ height: var(--site-nav-height);
145
+ background: var(--site-surface);
146
+ border-bottom: 1px solid var(--site-border);
147
+ display: flex;
148
+ align-items: center;
149
+ padding: 0 1.5rem;
150
+ z-index: 1000;
151
+ backdrop-filter: blur(8px);
152
+ background: rgba(255, 255, 255, 0.9);
153
+ }
154
+
155
+ [data-theme="dark"] .site-nav {
156
+ background: rgba(15, 23, 42, 0.9);
157
+ }
158
+
159
+ .nav-brand {
160
+ display: flex;
161
+ align-items: center;
162
+ }
163
+
164
+ .logo-link {
165
+ display: flex;
166
+ align-items: center;
167
+ gap: 0.5rem;
168
+ font-weight: 700;
169
+ font-size: 1.25rem;
170
+ color: var(--site-text);
171
+ }
172
+
173
+ .logo-link:hover {
174
+ color: var(--site-primary);
175
+ }
176
+
177
+ .logo {
178
+ width: 36px;
179
+ height: 36px;
180
+ }
181
+
182
+ .nav-links {
183
+ display: flex;
184
+ align-items: center;
185
+ gap: 0.25rem;
186
+ margin-left: 2rem;
187
+ }
188
+
189
+ .nav-link {
190
+ padding: 0.5rem 0.875rem;
191
+ border-radius: var(--site-radius);
192
+ color: var(--site-text-secondary);
193
+ font-size: 0.9375rem;
194
+ font-weight: 500;
195
+ transition: all var(--site-transition);
196
+ display: flex;
197
+ align-items: center;
198
+ gap: 0.25rem;
199
+ }
200
+
201
+ .nav-link:hover {
202
+ color: var(--site-text);
203
+ background: var(--site-bg-alt);
204
+ }
205
+
206
+ .nav-link.active {
207
+ color: var(--site-primary);
208
+ background: var(--site-primary-light);
209
+ }
210
+
211
+ .external-icon {
212
+ opacity: 0.5;
213
+ }
214
+
215
+ .nav-actions {
216
+ margin-left: auto;
217
+ display: flex;
218
+ align-items: center;
219
+ gap: 1rem;
220
+ }
221
+
222
+ .nav-toggle {
223
+ display: none;
224
+ background: none;
225
+ border: none;
226
+ padding: 0.5rem;
227
+ cursor: pointer;
228
+ }
229
+
230
+ .nav-toggle-icon {
231
+ display: block;
232
+ width: 24px;
233
+ height: 2px;
234
+ background: var(--site-text);
235
+ position: relative;
236
+ }
237
+
238
+ .nav-toggle-icon::before,
239
+ .nav-toggle-icon::after {
240
+ content: '';
241
+ position: absolute;
242
+ width: 24px;
243
+ height: 2px;
244
+ background: var(--site-text);
245
+ left: 0;
246
+ }
247
+
248
+ .nav-toggle-icon::before {
249
+ top: -7px;
250
+ }
251
+
252
+ .nav-toggle-icon::after {
253
+ top: 7px;
254
+ }
255
+
256
+ /* Mobile Navigation */
257
+ @media (max-width: 900px) {
258
+ .nav-toggle {
259
+ display: block;
260
+ }
261
+
262
+ .nav-links {
263
+ position: fixed;
264
+ top: var(--site-nav-height);
265
+ left: auto;
266
+ right: 0;
267
+ width: 50vw;
268
+ background: var(--site-surface);
269
+ border-bottom: 1px solid var(--site-border);
270
+ border-left: 1px solid var(--site-border);
271
+ flex-direction: column;
272
+ padding: 1rem;
273
+ gap: 0.25rem;
274
+ margin-left: 0;
275
+ transform: translateY(-100%);
276
+ opacity: 0;
277
+ pointer-events: none;
278
+ transition: all var(--site-transition-slow);
279
+ }
280
+
281
+ .nav-links.open {
282
+ transform: translateY(0);
283
+ opacity: 1;
284
+ pointer-events: all;
285
+ }
286
+
287
+ .nav-link {
288
+ width: 100%;
289
+ padding: 0.75rem 1rem;
290
+ }
291
+ }
292
+
293
+ /* ============= Main Content ============= */
294
+ .site-content {
295
+ margin-top: var(--site-nav-height);
296
+ min-height: calc(100vh - var(--site-nav-height));
297
+ margin-left: 2ch;
298
+ margin-right: 2ch;
299
+ }
300
+
301
+ /* ============= Footer ============= */
302
+ .site-footer {
303
+ background: var(--site-surface);
304
+ border-top: 1px solid var(--site-border);
305
+ padding: 3rem 1.5rem 1.5rem;
306
+ }
307
+
308
+ .footer-content {
309
+ max-width: var(--site-content-max-width);
310
+ margin: 0 auto;
311
+ display: grid;
312
+ grid-template-columns: 1fr 2fr;
313
+ gap: 3rem;
314
+ }
315
+
316
+ .footer-brand {
317
+ display: flex;
318
+ flex-direction: column;
319
+ gap: 0.75rem;
320
+ }
321
+
322
+ .footer-logo {
323
+ width: 48px;
324
+ height: 48px;
325
+ }
326
+
327
+ .footer-tagline {
328
+ color: var(--site-text-secondary);
329
+ font-style: italic;
330
+ margin: 0;
331
+ }
332
+
333
+ .footer-links {
334
+ display: grid;
335
+ grid-template-columns: repeat(3, 1fr);
336
+ gap: 2rem;
337
+ }
338
+
339
+ .footer-column {
340
+ display: flex;
341
+ flex-direction: column;
342
+ gap: 0.5rem;
343
+ }
344
+
345
+ .footer-column h4 {
346
+ font-size: 0.875rem;
347
+ font-weight: 600;
348
+ color: var(--site-text);
349
+ margin: 0 0 0.5rem;
350
+ text-transform: uppercase;
351
+ letter-spacing: 0.05em;
352
+ }
353
+
354
+ .footer-column a {
355
+ color: var(--site-text-secondary);
356
+ font-size: 0.9375rem;
357
+ }
358
+
359
+ .footer-column a:hover {
360
+ color: var(--site-primary);
361
+ }
362
+
363
+ .footer-bottom {
364
+ max-width: var(--site-content-max-width);
365
+ margin: 2rem auto 0;
366
+ padding-top: 1.5rem;
367
+ border-top: 1px solid var(--site-border);
368
+ text-align: center;
369
+ }
370
+
371
+ .footer-bottom p {
372
+ margin: 0;
373
+ color: var(--site-text-muted);
374
+ font-size: 0.875rem;
375
+ }
376
+
377
+ @media (max-width: 768px) {
378
+ .footer-content {
379
+ grid-template-columns: 1fr;
380
+ gap: 2rem;
381
+ }
382
+
383
+ .footer-links {
384
+ grid-template-columns: repeat(2, 1fr);
385
+ }
386
+ }
387
+
388
+ @media (max-width: 480px) {
389
+ .footer-links {
390
+ grid-template-columns: 1fr;
391
+ }
392
+ }
393
+
394
+ /* ============= Loading State ============= */
395
+ .loading-spinner {
396
+ display: flex;
397
+ flex-direction: column;
398
+ align-items: center;
399
+ justify-content: center;
400
+ padding: 4rem;
401
+ color: var(--site-text-muted);
402
+ }
403
+
404
+ .spinner {
405
+ width: 40px;
406
+ height: 40px;
407
+ border: 3px solid var(--site-border);
408
+ border-top-color: var(--site-primary);
409
+ border-radius: 50%;
410
+ animation: spin 0.8s linear infinite;
411
+ }
412
+
413
+ @keyframes spin {
414
+ to {
415
+ transform: rotate(360deg);
416
+ }
417
+ }
418
+
419
+ /* ============= Error Page ============= */
420
+ .error-page {
421
+ display: flex;
422
+ flex-direction: column;
423
+ align-items: center;
424
+ justify-content: center;
425
+ padding: 4rem;
426
+ text-align: center;
427
+ }
428
+
429
+ .error-page h1 {
430
+ font-size: 6rem;
431
+ font-weight: 800;
432
+ color: var(--site-primary);
433
+ margin: 0;
434
+ line-height: 1;
435
+ }
436
+
437
+ .error-page p {
438
+ font-size: 1.25rem;
439
+ color: var(--site-text-secondary);
440
+ margin: 1rem 0 2rem;
441
+ }
442
+
443
+ /* ============= Buttons ============= */
444
+ .btn {
445
+ display: inline-flex;
446
+ align-items: center;
447
+ justify-content: center;
448
+ gap: 0.5rem;
449
+ padding: 0.625rem 1.25rem;
450
+ font-size: 0.9375rem;
451
+ font-weight: 500;
452
+ border-radius: var(--site-radius);
453
+ border: none;
454
+ cursor: pointer;
455
+ transition: all var(--site-transition);
456
+ text-decoration: none;
457
+ }
458
+
459
+ .btn-primary {
460
+ background: var(--site-primary);
461
+ color: white;
462
+ }
463
+
464
+ .btn-primary:hover {
465
+ background: var(--site-primary-hover);
466
+ color: white;
467
+ }
468
+
469
+ .btn-secondary {
470
+ background: var(--site-surface);
471
+ color: var(--site-text);
472
+ border: 1px solid var(--site-border);
473
+ }
474
+
475
+ .btn-secondary:hover {
476
+ background: var(--site-bg-alt);
477
+ border-color: var(--site-border-hover);
478
+ }
479
+
480
+ .btn-accent {
481
+ background: var(--site-accent);
482
+ color: #1e293b;
483
+ }
484
+
485
+ .btn-accent:hover {
486
+ background: var(--site-accent-hover);
487
+ }
488
+
489
+ .btn-lg {
490
+ padding: 0.875rem 1.75rem;
491
+ font-size: 1.0625rem;
492
+ }
493
+
494
+ .btn-sm {
495
+ padding: 0.375rem 0.875rem;
496
+ font-size: 0.875rem;
497
+ }
498
+
499
+ /* ============= Hero Section ============= */
500
+ .hero {
501
+ padding: 5rem 1.5rem;
502
+ text-align: center;
503
+ background: linear-gradient(135deg, var(--site-bg) 0%, var(--site-bg-alt) 100%);
504
+ position: relative;
505
+ overflow: hidden;
506
+ }
507
+
508
+ .hero::before {
509
+ content: '';
510
+ position: absolute;
511
+ top: -50%;
512
+ left: -50%;
513
+ width: 200%;
514
+ height: 200%;
515
+ background: radial-gradient(circle at 50% 50%, var(--site-primary-light) 0%, transparent 50%);
516
+ opacity: 0.5;
517
+ pointer-events: none;
518
+ }
519
+
520
+ .hero-content {
521
+ position: relative;
522
+ max-width: 800px;
523
+ margin: 0 auto;
524
+ }
525
+
526
+ .hero-logo {
527
+ width: 100px;
528
+ height: 100px;
529
+ margin-bottom: 1.5rem;
530
+ }
531
+
532
+
533
+
534
+ .hero h1 {
535
+ font-size: 3.5rem;
536
+ font-weight: 800;
537
+ margin: 0 0 0.5rem;
538
+ background: linear-gradient(135deg, var(--site-primary) 0%, var(--site-accent) 100%);
539
+ -webkit-background-clip: text;
540
+ -webkit-text-fill-color: transparent;
541
+ background-clip: text;
542
+ }
543
+
544
+ .hero-tagline {
545
+ font-size: 1.5rem;
546
+ color: var(--site-text-secondary);
547
+ margin: 0 0 1rem;
548
+ font-weight: 500;
549
+ }
550
+
551
+ .hero-description {
552
+ font-size: 1.125rem;
553
+ color: var(--site-text-secondary);
554
+ margin: 0 0 2rem;
555
+ max-width: 600px;
556
+ margin-left: auto;
557
+ margin-right: auto;
558
+ }
559
+
560
+ .hero-actions {
561
+ display: flex;
562
+ gap: 1rem;
563
+ justify-content: center;
564
+ flex-wrap: wrap;
565
+ }
566
+
567
+ .hero-stats {
568
+ display: flex;
569
+ gap: 3rem;
570
+ justify-content: center;
571
+ margin-top: 3rem;
572
+ padding-top: 2rem;
573
+ border-top: 1px solid var(--site-border);
574
+ }
575
+
576
+ .hero-stat {
577
+ text-align: center;
578
+ }
579
+
580
+ .hero-stat-value {
581
+ font-size: 2rem;
582
+ font-weight: 700;
583
+ color: var(--site-primary);
584
+ }
585
+
586
+ .hero-stat-label {
587
+ font-size: 0.875rem;
588
+ color: var(--site-text-muted);
589
+ }
590
+
591
+ @media (max-width: 640px) {
592
+ .hero h1 {
593
+ font-size: 2.5rem;
594
+ }
595
+
596
+ .hero-tagline {
597
+ font-size: 1.25rem;
598
+ }
599
+
600
+ .hero-stats {
601
+ gap: 1.5rem;
602
+ }
603
+ }
604
+
605
+ /* ============= Section Styles ============= */
606
+ .section {
607
+ padding: 1.5rem 1.5rem;
608
+ }
609
+
610
+ .section-alt {
611
+ background: var(--site-bg-alt);
612
+ }
613
+
614
+ .section-content {
615
+ max-width: var(--site-content-max-width);
616
+ margin: 0 auto;
617
+ }
618
+
619
+ .section-header {
620
+ text-align: center;
621
+ margin-bottom: 3rem;
622
+ }
623
+
624
+ .section-title {
625
+ font-size: 2.25rem;
626
+ font-weight: 700;
627
+ margin: 0 0 0.75rem;
628
+ }
629
+
630
+ .section-subtitle {
631
+ font-size: 1.125rem;
632
+ color: var(--site-text-secondary);
633
+ margin: 0;
634
+ max-width: 600px;
635
+ margin-left: auto;
636
+ margin-right: auto;
637
+ }
638
+
639
+ /* ============= Feature Grid ============= */
640
+ .feature-grid {
641
+ display: grid;
642
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
643
+ gap: 1.5rem;
644
+ }
645
+
646
+ .feature-card {
647
+ background: var(--site-surface);
648
+ border: 1px solid var(--site-border);
649
+ border-radius: var(--site-radius-lg);
650
+ padding: 1.5rem;
651
+ transition: all var(--site-transition);
652
+ }
653
+
654
+ .feature-card:hover {
655
+ border-color: var(--site-primary);
656
+ box-shadow: var(--site-shadow-md);
657
+ transform: translateY(-2px);
658
+ }
659
+
660
+ .feature-icon {
661
+ width: 48px;
662
+ height: 48px;
663
+ background: var(--site-primary-light);
664
+ border-radius: var(--site-radius);
665
+ display: flex;
666
+ align-items: center;
667
+ justify-content: center;
668
+ margin-bottom: 1rem;
669
+ color: var(--site-primary);
670
+ }
671
+
672
+ .feature-title {
673
+ font-size: 1.125rem;
674
+ font-weight: 600;
675
+ margin: 0 0 0.5rem;
676
+ }
677
+
678
+ .feature-description {
679
+ color: var(--site-text-secondary);
680
+ margin: 0;
681
+ font-size: 0.9375rem;
682
+ }
683
+
684
+ /* ============= Code Blocks ============= */
685
+ pre,
686
+ code {
687
+ font-family: var(--site-font-mono);
688
+ }
689
+
690
+ code {
691
+ background: var(--site-code-bg);
692
+ color: var(--site-code-text);
693
+ padding: 0.125rem 0.375rem;
694
+ border-radius: var(--site-radius-sm);
695
+ font-size: 0.875em;
696
+ }
697
+
698
+ pre {
699
+ background: var(--site-code-bg);
700
+ border: 1px solid var(--site-border);
701
+ border-radius: var(--site-radius);
702
+ padding: 1rem 1.25rem;
703
+ overflow-x: auto;
704
+ }
705
+
706
+ pre code {
707
+ background: none;
708
+ padding: 0;
709
+ font-size: 0.875rem;
710
+ line-height: 1.7;
711
+ }
712
+
713
+ /* ============= Cards ============= */
714
+ .card {
715
+ background: var(--site-surface);
716
+ border: 1px solid var(--site-border);
717
+ border-radius: var(--site-radius-lg);
718
+ overflow: hidden;
719
+ }
720
+
721
+ .card-header {
722
+ padding: 1rem 1.25rem;
723
+ border-bottom: 1px solid var(--site-border);
724
+ background: var(--site-bg-alt);
725
+ }
726
+
727
+ .card-body {
728
+ padding: 1.25rem;
729
+ }
730
+
731
+ .card-footer {
732
+ padding: 1rem 1.25rem;
733
+ border-top: 1px solid var(--site-border);
734
+ background: var(--site-bg-alt);
735
+ }
736
+
737
+ /* ============= Documentation Layout ============= */
738
+ .docs-layout {
739
+ display: grid;
740
+ grid-template-columns: var(--site-sidebar-width) 1fr;
741
+ max-width: var(--site-content-max-width);
742
+ margin: 0 auto;
743
+ gap: 2rem;
744
+ padding: 2rem 1.5rem;
745
+ }
746
+
747
+ .docs-sidebar {
748
+ position: sticky;
749
+ top: calc(var(--site-nav-height) + 2rem);
750
+ height: fit-content;
751
+ max-height: calc(100vh - var(--site-nav-height) - 4rem);
752
+ overflow-y: auto;
753
+ }
754
+
755
+ .docs-nav {
756
+ display: flex;
757
+ flex-direction: column;
758
+ gap: 0.25rem;
759
+ }
760
+
761
+ .docs-nav-section {
762
+ margin-bottom: 1.5rem;
763
+ }
764
+
765
+ .docs-nav-title {
766
+ font-size: 0.75rem;
767
+ font-weight: 600;
768
+ color: var(--site-text-muted);
769
+ text-transform: uppercase;
770
+ letter-spacing: 0.05em;
771
+ margin: 0 0 0.5rem;
772
+ padding: 0 0.75rem;
773
+ }
774
+
775
+ .docs-nav-link {
776
+ display: block;
777
+ padding: 0.5rem 0.75rem;
778
+ color: var(--site-text-secondary);
779
+ border-radius: var(--site-radius-sm);
780
+ font-size: 0.9375rem;
781
+ }
782
+
783
+ .docs-nav-link:hover {
784
+ color: var(--site-text);
785
+ background: var(--site-bg-alt);
786
+ }
787
+
788
+ .docs-nav-link.active {
789
+ color: var(--site-primary);
790
+ background: var(--site-primary-light);
791
+ }
792
+
793
+ .docs-content {
794
+ min-width: 0;
795
+ }
796
+
797
+ .docs-content h1 {
798
+ font-size: 2.25rem;
799
+ margin: 0 0 0.5rem;
800
+ }
801
+
802
+ .docs-content h2 {
803
+ font-size: 1.5rem;
804
+ margin: 2.5rem 0 1rem;
805
+ padding-bottom: 0.5rem;
806
+ border-bottom: 1px solid var(--site-border);
807
+ }
808
+
809
+ .docs-content h3 {
810
+ font-size: 1.25rem;
811
+ margin: 2rem 0 0.75rem;
812
+ }
813
+
814
+ .docs-content p {
815
+ margin: 0 0 1rem;
816
+ }
817
+
818
+ .docs-content ul,
819
+ .docs-content ol {
820
+ margin: 0 0 1rem;
821
+ padding-left: 1.5rem;
822
+ }
823
+
824
+ .docs-content li {
825
+ margin-bottom: 0.5rem;
826
+ }
827
+
828
+ @media (max-width: 900px) {
829
+ .docs-layout {
830
+ grid-template-columns: 1fr;
831
+ }
832
+
833
+ .docs-sidebar {
834
+ position: static;
835
+ max-height: none;
836
+ }
837
+ }
838
+
839
+ /* ============= API Reference Table ============= */
840
+ .api-table {
841
+ width: 100%;
842
+ border-collapse: collapse;
843
+ margin: 1rem 0;
844
+ }
845
+
846
+ .api-table th,
847
+ .api-table td {
848
+ padding: 0.75rem;
849
+ text-align: left;
850
+ border-bottom: 1px solid var(--site-border);
851
+ }
852
+
853
+ .api-table th {
854
+ background: var(--site-bg-alt);
855
+ font-weight: 600;
856
+ font-size: 0.875rem;
857
+ }
858
+
859
+ .api-table td code {
860
+ white-space: nowrap;
861
+ }
862
+
863
+ /* ============= Playground ============= */
864
+ .playground-container {
865
+ display: grid;
866
+ grid-template-columns: 1fr 1fr;
867
+ gap: 1rem;
868
+ height: calc(100vh - var(--site-nav-height) - 4rem);
869
+ padding: 2rem 1.5rem;
870
+ max-width: 1600px;
871
+ margin: 0 auto;
872
+ }
873
+
874
+ .playground-editor {
875
+ display: flex;
876
+ flex-direction: column;
877
+ background: var(--site-surface);
878
+ border: 1px solid var(--site-border);
879
+ border-radius: var(--site-radius-lg);
880
+ overflow: hidden;
881
+ }
882
+
883
+ .playground-editor-header {
884
+ display: flex;
885
+ align-items: center;
886
+ justify-content: space-between;
887
+ padding: 0.75rem 1rem;
888
+ background: var(--site-bg-alt);
889
+ border-bottom: 1px solid var(--site-border);
890
+ }
891
+
892
+ .playground-editor-title {
893
+ font-weight: 600;
894
+ font-size: 0.875rem;
895
+ }
896
+
897
+ .playground-textarea {
898
+ flex: 1;
899
+ width: 100%;
900
+ padding: 1rem;
901
+ font-family: var(--site-font-mono);
902
+ font-size: 0.875rem;
903
+ line-height: 1.6;
904
+ border: none;
905
+ resize: none;
906
+ background: var(--site-code-bg);
907
+ color: var(--site-code-text);
908
+ }
909
+
910
+ .playground-textarea:focus {
911
+ outline: none;
912
+ }
913
+
914
+ .playground-preview {
915
+ display: flex;
916
+ flex-direction: column;
917
+ background: var(--site-surface);
918
+ border: 1px solid var(--site-border);
919
+ border-radius: var(--site-radius-lg);
920
+ overflow: hidden;
921
+ }
922
+
923
+ .playground-preview-header {
924
+ display: flex;
925
+ align-items: center;
926
+ justify-content: space-between;
927
+ padding: 0.75rem 1rem;
928
+ background: var(--site-bg-alt);
929
+ border-bottom: 1px solid var(--site-border);
930
+ }
931
+
932
+ .playground-preview-content {
933
+ flex: 1;
934
+ padding: 1rem;
935
+ overflow: auto;
936
+ }
937
+
938
+ .playground-examples {
939
+ margin-top: 1rem;
940
+ }
941
+
942
+ .example-tray {
943
+ display: flex;
944
+ gap: 0.5rem;
945
+ flex-wrap: wrap;
946
+ }
947
+
948
+ .example-btn {
949
+ padding: 0.375rem 0.75rem;
950
+ font-size: 0.8125rem;
951
+ background: var(--site-bg-alt);
952
+ border: 1px solid var(--site-border);
953
+ border-radius: var(--site-radius);
954
+ cursor: pointer;
955
+ transition: all var(--site-transition);
956
+ }
957
+
958
+ .example-btn:hover {
959
+ background: var(--site-primary-light);
960
+ border-color: var(--site-primary);
961
+ color: var(--site-primary);
962
+ }
963
+
964
+ @media (max-width: 900px) {
965
+ .playground-container {
966
+ grid-template-columns: 1fr;
967
+ height: auto;
968
+ }
969
+
970
+ .playground-editor,
971
+ .playground-preview {
972
+ height: 400px;
973
+ }
974
+ }
975
+
976
+ /* ============= Example Cards ============= */
977
+ .example-grid {
978
+ display: grid;
979
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
980
+ gap: 1.5rem;
981
+ }
982
+
983
+ .example-card {
984
+ background: var(--site-surface);
985
+ border: 1px solid var(--site-border);
986
+ border-radius: var(--site-radius-lg);
987
+ overflow: hidden;
988
+ transition: all var(--site-transition);
989
+ }
990
+
991
+ .example-card:hover {
992
+ border-color: var(--site-primary);
993
+ box-shadow: var(--site-shadow-md);
994
+ }
995
+
996
+ .example-card-preview {
997
+ height: 160px;
998
+ background: var(--site-bg-alt);
999
+ padding: 1rem;
1000
+ display: flex;
1001
+ align-items: center;
1002
+ justify-content: center;
1003
+ }
1004
+
1005
+ .example-card-content {
1006
+ padding: 1rem 1.25rem;
1007
+ }
1008
+
1009
+ .example-card-title {
1010
+ font-weight: 600;
1011
+ margin: 0 0 0.5rem;
1012
+ }
1013
+
1014
+ .example-card-description {
1015
+ color: var(--site-text-secondary);
1016
+ font-size: 0.875rem;
1017
+ margin: 0;
1018
+ }
1019
+
1020
+ /* ============= Component Demo ============= */
1021
+ .component-demo {
1022
+ background: var(--site-bg-alt);
1023
+ border: 1px solid var(--site-border);
1024
+ border-radius: var(--site-radius-lg);
1025
+ padding: 2rem;
1026
+ margin: 1.5rem 0;
1027
+ display: flex;
1028
+ align-items: center;
1029
+ justify-content: center;
1030
+ gap: 1rem;
1031
+ flex-wrap: wrap;
1032
+ }
1033
+
1034
+ /* ============= Inline Code Example ============= */
1035
+ .code-example {
1036
+ margin: 1.5rem 0;
1037
+ border: 1px solid var(--site-border);
1038
+ border-radius: var(--site-radius-lg);
1039
+ overflow: hidden;
1040
+ }
1041
+
1042
+ .code-example-preview {
1043
+ padding: 1.5rem;
1044
+ background: var(--site-bg-alt);
1045
+ border-bottom: 1px solid var(--site-border);
1046
+ }
1047
+
1048
+ .code-example-code {
1049
+ position: relative;
1050
+ }
1051
+
1052
+ .code-example-code pre {
1053
+ margin: 0;
1054
+ border: none;
1055
+ border-radius: 0;
1056
+ }
1057
+
1058
+ .code-example-actions {
1059
+ position: absolute;
1060
+ top: 0.5rem;
1061
+ right: 0.5rem;
1062
+ display: flex;
1063
+ gap: 0.5rem;
1064
+ }
1065
+
1066
+ .code-copy-btn {
1067
+ padding: 0.375rem 0.625rem;
1068
+ font-size: 0.75rem;
1069
+ background: var(--site-surface);
1070
+ border: 1px solid var(--site-border);
1071
+ border-radius: var(--site-radius-sm);
1072
+ cursor: pointer;
1073
+ opacity: 0.7;
1074
+ transition: all var(--site-transition);
1075
+ }
1076
+
1077
+ .code-copy-btn:hover {
1078
+ opacity: 1;
1079
+ }
1080
+
1081
+ [contenteditable] {
1082
+ outline: none;
1083
+ border-bottom: 1px dashed var(--site-text-muted);
1084
+ }
1085
+
1086
+
1087
+ /* ============= Utility Classes ============= */
1088
+ .text-muted {
1089
+ color: var(--site-text-muted);
1090
+ }
1091
+
1092
+ .text-secondary {
1093
+ color: var(--site-text-secondary);
1094
+ }
1095
+
1096
+ .text-primary {
1097
+ color: var(--site-primary);
1098
+ }
1099
+
1100
+ .text-accent {
1101
+ color: var(--site-accent);
1102
+ }