zerocodejs 1.0.1-beta.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 (154) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +161 -0
  3. package/dist/__tests__/fixtures/sample-data.d.ts +23 -0
  4. package/dist/__tests__/fixtures/sample-data.d.ts.map +1 -0
  5. package/dist/__tests__/fixtures/sample-templates.d.ts +25 -0
  6. package/dist/__tests__/fixtures/sample-templates.d.ts.map +1 -0
  7. package/dist/components/ZeroCodeCMS.vue.d.ts +142 -0
  8. package/dist/components/ZeroCodeCMS.vue.d.ts.map +1 -0
  9. package/dist/components/ZeroCodeEditor.vue.d.ts +341 -0
  10. package/dist/components/ZeroCodeEditor.vue.d.ts.map +1 -0
  11. package/dist/components/ZeroCodePreview.vue.d.ts +36 -0
  12. package/dist/components/ZeroCodePreview.vue.d.ts.map +1 -0
  13. package/dist/core/composables/useZeroCodeData.d.ts +91 -0
  14. package/dist/core/composables/useZeroCodeData.d.ts.map +1 -0
  15. package/dist/core/composables/useZeroCodeRenderer.d.ts +7 -0
  16. package/dist/core/composables/useZeroCodeRenderer.d.ts.map +1 -0
  17. package/dist/core/renderer/renderer.d.ts +20 -0
  18. package/dist/core/renderer/renderer.d.ts.map +1 -0
  19. package/dist/core/utils/component-initializer.d.ts +6 -0
  20. package/dist/core/utils/component-initializer.d.ts.map +1 -0
  21. package/dist/core/utils/component-initializer.test.d.ts +2 -0
  22. package/dist/core/utils/component-initializer.test.d.ts.map +1 -0
  23. package/dist/core/utils/css-manager.d.ts +41 -0
  24. package/dist/core/utils/css-manager.d.ts.map +1 -0
  25. package/dist/core/utils/dom-utils.d.ts +29 -0
  26. package/dist/core/utils/dom-utils.d.ts.map +1 -0
  27. package/dist/core/utils/field-extractor.d.ts +8 -0
  28. package/dist/core/utils/field-extractor.d.ts.map +1 -0
  29. package/dist/core/utils/field-extractor.test.d.ts +2 -0
  30. package/dist/core/utils/field-extractor.test.d.ts.map +1 -0
  31. package/dist/core/utils/i18n-setup.d.ts +26 -0
  32. package/dist/core/utils/i18n-setup.d.ts.map +1 -0
  33. package/dist/core/utils/image-utils.d.ts +7 -0
  34. package/dist/core/utils/image-utils.d.ts.map +1 -0
  35. package/dist/core/utils/image-utils.test.d.ts +2 -0
  36. package/dist/core/utils/image-utils.test.d.ts.map +1 -0
  37. package/dist/core/utils/path-utils.d.ts +18 -0
  38. package/dist/core/utils/path-utils.d.ts.map +1 -0
  39. package/dist/core/utils/path-utils.test.d.ts +2 -0
  40. package/dist/core/utils/path-utils.test.d.ts.map +1 -0
  41. package/dist/core/utils/sanitize.d.ts +10 -0
  42. package/dist/core/utils/sanitize.d.ts.map +1 -0
  43. package/dist/core/utils/storage.d.ts +16 -0
  44. package/dist/core/utils/storage.d.ts.map +1 -0
  45. package/dist/core/utils/storage.test.d.ts +2 -0
  46. package/dist/core/utils/storage.test.d.ts.map +1 -0
  47. package/dist/core/utils/template-processor.d.ts +12 -0
  48. package/dist/core/utils/template-processor.d.ts.map +1 -0
  49. package/dist/core/utils/template-processor.test.d.ts +2 -0
  50. package/dist/core/utils/template-processor.test.d.ts.map +1 -0
  51. package/dist/core/utils/template-regex.d.ts +29 -0
  52. package/dist/core/utils/template-regex.d.ts.map +1 -0
  53. package/dist/core/utils/template-utils.d.ts +14 -0
  54. package/dist/core/utils/template-utils.d.ts.map +1 -0
  55. package/dist/core/utils/template-utils.test.d.ts +2 -0
  56. package/dist/core/utils/template-utils.test.d.ts.map +1 -0
  57. package/dist/core/utils/validation.d.ts +2 -0
  58. package/dist/core/utils/validation.d.ts.map +1 -0
  59. package/dist/core/utils/validation.test.d.ts +2 -0
  60. package/dist/core/utils/validation.test.d.ts.map +1 -0
  61. package/dist/css/common.css +677 -0
  62. package/dist/css/docs.css +396 -0
  63. package/dist/css/index.css +1039 -0
  64. package/dist/css/page.css +290 -0
  65. package/dist/css/sample.css +26 -0
  66. package/dist/css/site-common.css +218 -0
  67. package/dist/features/add/components/AddPanel.vue.d.ts +41 -0
  68. package/dist/features/add/components/AddPanel.vue.d.ts.map +1 -0
  69. package/dist/features/add/composables/useAddMode.d.ts +84 -0
  70. package/dist/features/add/composables/useAddMode.d.ts.map +1 -0
  71. package/dist/features/data-viewer/components/DataViewer.vue.d.ts +11 -0
  72. package/dist/features/data-viewer/components/DataViewer.vue.d.ts.map +1 -0
  73. package/dist/features/delete/components/DeletePanel.vue.d.ts +17 -0
  74. package/dist/features/delete/components/DeletePanel.vue.d.ts.map +1 -0
  75. package/dist/features/delete/composables/useDeleteMode.d.ts +20 -0
  76. package/dist/features/delete/composables/useDeleteMode.d.ts.map +1 -0
  77. package/dist/features/editor/components/ContextMenu.vue.d.ts +18 -0
  78. package/dist/features/editor/components/ContextMenu.vue.d.ts.map +1 -0
  79. package/dist/features/editor/components/EditPanel.vue.d.ts +39 -0
  80. package/dist/features/editor/components/EditPanel.vue.d.ts.map +1 -0
  81. package/dist/features/editor/components/ImageSelectModal.vue.d.ts +23 -0
  82. package/dist/features/editor/components/ImageSelectModal.vue.d.ts.map +1 -0
  83. package/dist/features/editor/components/RichTextEditor.vue.d.ts +11 -0
  84. package/dist/features/editor/components/RichTextEditor.vue.d.ts.map +1 -0
  85. package/dist/features/editor/components/SettingsPanel.vue.d.ts +25 -0
  86. package/dist/features/editor/components/SettingsPanel.vue.d.ts.map +1 -0
  87. package/dist/features/editor/components/Toolbar.vue.d.ts +21 -0
  88. package/dist/features/editor/components/Toolbar.vue.d.ts.map +1 -0
  89. package/dist/features/editor/composables/useClickHandlers.d.ts +8 -0
  90. package/dist/features/editor/composables/useClickHandlers.d.ts.map +1 -0
  91. package/dist/features/editor/composables/useContextMenu.d.ts +20 -0
  92. package/dist/features/editor/composables/useContextMenu.d.ts.map +1 -0
  93. package/dist/features/editor/composables/useEditMode.d.ts +66 -0
  94. package/dist/features/editor/composables/useEditMode.d.ts.map +1 -0
  95. package/dist/features/editor/composables/useEditorMode.d.ts +7 -0
  96. package/dist/features/editor/composables/useEditorMode.d.ts.map +1 -0
  97. package/dist/features/editor/composables/useModeSwitcher.d.ts +7 -0
  98. package/dist/features/editor/composables/useModeSwitcher.d.ts.map +1 -0
  99. package/dist/features/editor/composables/useOutlineManager.d.ts +5 -0
  100. package/dist/features/editor/composables/useOutlineManager.d.ts.map +1 -0
  101. package/dist/features/images-manager/components/ImagesManagerPanel.vue.d.ts +12 -0
  102. package/dist/features/images-manager/components/ImagesManagerPanel.vue.d.ts.map +1 -0
  103. package/dist/features/images-manager/composables/useImagesManager.d.ts +47 -0
  104. package/dist/features/images-manager/composables/useImagesManager.d.ts.map +1 -0
  105. package/dist/features/parent-selector/composables/useParentSelector.d.ts +9 -0
  106. package/dist/features/parent-selector/composables/useParentSelector.d.ts.map +1 -0
  107. package/dist/features/parts-manager/components/MonacoEditor.vue.d.ts +20 -0
  108. package/dist/features/parts-manager/components/MonacoEditor.vue.d.ts.map +1 -0
  109. package/dist/features/parts-manager/components/PartsManagerPanel.vue.d.ts +10 -0
  110. package/dist/features/parts-manager/components/PartsManagerPanel.vue.d.ts.map +1 -0
  111. package/dist/features/parts-manager/composables/usePartsManager.d.ts +190 -0
  112. package/dist/features/parts-manager/composables/usePartsManager.d.ts.map +1 -0
  113. package/dist/features/preview/PreviewArea.vue.d.ts +15 -0
  114. package/dist/features/preview/PreviewArea.vue.d.ts.map +1 -0
  115. package/dist/features/reorder/components/ReorderPanel.vue.d.ts +14 -0
  116. package/dist/features/reorder/components/ReorderPanel.vue.d.ts.map +1 -0
  117. package/dist/features/reorder/composables/useReorderMode.d.ts +9 -0
  118. package/dist/features/reorder/composables/useReorderMode.d.ts.map +1 -0
  119. package/dist/footer.html +10 -0
  120. package/dist/header.html +10 -0
  121. package/dist/i18n/index.d.ts +454 -0
  122. package/dist/i18n/index.d.ts.map +1 -0
  123. package/dist/i18n/locales/en.d.ts +231 -0
  124. package/dist/i18n/locales/en.d.ts.map +1 -0
  125. package/dist/i18n/locales/ja.d.ts +223 -0
  126. package/dist/i18n/locales/ja.d.ts.map +1 -0
  127. package/dist/images/customer-avatar.jpg +0 -0
  128. package/dist/images/default-avatar.jpg +0 -0
  129. package/dist/images/default.jpg +0 -0
  130. package/dist/images/hero-bg.jpg +0 -0
  131. package/dist/images/kv_image.jpg +0 -0
  132. package/dist/images/page-specific-hero.jpg +0 -0
  133. package/dist/images/sample-1.jpg +0 -0
  134. package/dist/images/sample-2.jpg +0 -0
  135. package/dist/images/sample-3.jpg +0 -0
  136. package/dist/images/zcode_top_01.png +0 -0
  137. package/dist/index.d.ts +6 -0
  138. package/dist/index.d.ts.map +1 -0
  139. package/dist/js/accordion.js +24 -0
  140. package/dist/js/common.js +1093 -0
  141. package/dist/types/index.d.ts +96 -0
  142. package/dist/types/index.d.ts.map +1 -0
  143. package/dist/web-component.d.ts +14 -0
  144. package/dist/web-component.d.ts.map +1 -0
  145. package/dist/web-components/zcode-cms.d.ts +29 -0
  146. package/dist/web-components/zcode-cms.d.ts.map +1 -0
  147. package/dist/web-components/zcode-editor.d.ts +29 -0
  148. package/dist/web-components/zcode-editor.d.ts.map +1 -0
  149. package/dist/zerocode.es.js +28710 -0
  150. package/dist/zerocode.es.js.map +1 -0
  151. package/dist/zerocode.umd.js +490 -0
  152. package/dist/zerocode.umd.js.map +1 -0
  153. package/dist/zerocodejs.css +1 -0
  154. package/package.json +94 -0
@@ -0,0 +1,1039 @@
1
+ /* ZeroCode.js - index.html 専用CSS */
2
+
3
+ /* ヒーローセクション */
4
+ .hero {
5
+ max-width: 1200px;
6
+ margin: 0 auto;
7
+ padding: 60px 20px;
8
+ text-align: center;
9
+ }
10
+
11
+ .hero-title {
12
+ font-size: 48px;
13
+ font-weight: 800;
14
+ margin-bottom: 16px;
15
+ color: #2c3e50;
16
+ line-height: 1.3;
17
+ }
18
+
19
+ .hero-subtitle {
20
+ font-size: 18px;
21
+ color: #7f8c8d;
22
+ margin-bottom: 32px;
23
+ }
24
+
25
+ .hero-buttons {
26
+ display: flex;
27
+ gap: 16px;
28
+ justify-content: center;
29
+ margin-bottom: 60px;
30
+ flex-wrap: wrap;
31
+ }
32
+
33
+ .btn {
34
+ display: inline-block;
35
+ padding: 12px 24px;
36
+ border-radius: 4px;
37
+ font-size: 15px;
38
+ font-weight: 500;
39
+ text-decoration: none;
40
+ transition: background 0.2s;
41
+ border: none;
42
+ cursor: pointer;
43
+ }
44
+
45
+ .btn-primary {
46
+ background: #2c3e50;
47
+ color: white;
48
+ }
49
+
50
+ .btn-primary:hover {
51
+ background: #34495e;
52
+ }
53
+
54
+ .btn-secondary {
55
+ background: #ffffff;
56
+ color: #2c3e50;
57
+ border: 1px solid #bdc3c7;
58
+ }
59
+
60
+ .btn-secondary:hover {
61
+ background: #f8f9fa;
62
+ border-color: #95a5a6;
63
+ }
64
+
65
+ .hero-image {
66
+ max-width: 800px;
67
+ margin: 0 auto;
68
+ background: #f8f9fa;
69
+ border-radius: 8px;
70
+ padding: 0;
71
+ box-shadow:
72
+ 0 4px 20px rgba(0, 0, 0, 0.1),
73
+ 0 0 0 1px rgba(0, 0, 0, 0.05);
74
+ position: relative;
75
+ overflow: hidden;
76
+ }
77
+
78
+ .hero-image::before {
79
+ content: '';
80
+ position: absolute;
81
+ top: 0;
82
+ left: 0;
83
+ right: 0;
84
+ height: 32px;
85
+ background: #e8e8e8;
86
+ border-bottom: 1px solid #d0d0d0;
87
+ z-index: 2;
88
+ pointer-events: none;
89
+ }
90
+
91
+ .hero-image::after {
92
+ content: '';
93
+ position: absolute;
94
+ top: 8px;
95
+ left: 12px;
96
+ width: 12px;
97
+ height: 12px;
98
+ border-radius: 50%;
99
+ background: #ff5f57;
100
+ box-shadow:
101
+ 20px 0 0 #ffbd2e,
102
+ 40px 0 0 #28ca42;
103
+ z-index: 3;
104
+ pointer-events: none;
105
+ }
106
+
107
+ .hero-image img {
108
+ width: 100%;
109
+ height: auto;
110
+ display: block;
111
+ margin-top: 32px;
112
+ }
113
+
114
+ /* セクション共通 */
115
+ .section {
116
+ max-width: 1200px;
117
+ margin: 0 auto;
118
+ padding: 60px 20px;
119
+ }
120
+
121
+ .section-title {
122
+ font-size: 32px;
123
+ font-weight: 600;
124
+ text-align: center;
125
+ margin-bottom: 40px;
126
+ color: #2c3e50;
127
+ }
128
+
129
+ .section-subtitle {
130
+ font-size: 18px;
131
+ text-align: center;
132
+ color: #7f8c8d;
133
+ margin-bottom: 50px;
134
+ max-width: 800px;
135
+ margin-left: auto;
136
+ margin-right: auto;
137
+ }
138
+
139
+ /* 特徴セクション */
140
+ .features-grid {
141
+ display: grid;
142
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
143
+ gap: 30px;
144
+ margin-top: 40px;
145
+ }
146
+
147
+ .feature-card {
148
+ background: rgba(255, 255, 255, 0.8);
149
+ border: 1px solid #e0e0e0;
150
+ border-radius: 8px;
151
+ padding: 32px;
152
+ text-align: left;
153
+ backdrop-filter: blur(10px);
154
+ box-shadow:
155
+ 0 8px 32px rgba(0, 0, 0, 0.08),
156
+ 0 2px 8px rgba(0, 0, 0, 0.04);
157
+ }
158
+
159
+ .feature-title {
160
+ font-size: 20px;
161
+ font-weight: 600;
162
+ margin-bottom: 12px;
163
+ color: #2c3e50;
164
+ }
165
+
166
+ .feature-description {
167
+ font-size: 15px;
168
+ color: #7f8c8d;
169
+ line-height: 1.7;
170
+ }
171
+
172
+ /* アーキテクチャセクション */
173
+ .architecture-diagram {
174
+ max-width: 800px;
175
+ margin: 40px auto;
176
+ padding: 40px;
177
+ background: rgba(255, 255, 255, 0.8);
178
+ border-radius: 8px;
179
+ border: 1px solid #e0e0e0;
180
+ backdrop-filter: blur(10px);
181
+ box-shadow:
182
+ 0 8px 32px rgba(0, 0, 0, 0.08),
183
+ 0 2px 8px rgba(0, 0, 0, 0.04);
184
+ }
185
+
186
+ .architecture-flow {
187
+ display: flex;
188
+ align-items: center;
189
+ justify-content: center;
190
+ gap: 16px;
191
+ flex-wrap: nowrap;
192
+ }
193
+
194
+ .arch-box {
195
+ background: #ffffff;
196
+ border: 2px solid #e0e0e0;
197
+ border-radius: 8px;
198
+ padding: 20px 16px;
199
+ flex: 1 1 0;
200
+ min-width: 0;
201
+ text-align: center;
202
+ }
203
+
204
+ .arch-box.backend {
205
+ border-color: #95a5a6;
206
+ }
207
+
208
+ .arch-box.frontend {
209
+ border-color: #3498db;
210
+ border-width: 3px;
211
+ }
212
+
213
+ .arch-frontend-group {
214
+ display: flex;
215
+ flex-direction: column;
216
+ gap: 12px;
217
+ flex: 1 1 0;
218
+ min-width: 0;
219
+ }
220
+
221
+ .arch-box.frontend-cms {
222
+ border-color: #3498db;
223
+ border-width: 2px;
224
+ }
225
+
226
+ .arch-box.frontend-editor {
227
+ border-color: #e67e22;
228
+ border-width: 2px;
229
+ }
230
+
231
+ .arch-features {
232
+ font-size: 11px;
233
+ color: #7f8c8d;
234
+ margin-top: 6px;
235
+ line-height: 1.4;
236
+ }
237
+
238
+ .arch-label {
239
+ font-size: 14px;
240
+ font-weight: 600;
241
+ color: #2c3e50;
242
+ margin-bottom: 8px;
243
+ }
244
+
245
+ .arch-name {
246
+ font-size: 18px;
247
+ font-weight: 700;
248
+ color: #3498db;
249
+ margin: 8px 0;
250
+ }
251
+
252
+ .arch-desc {
253
+ font-size: 13px;
254
+ color: #7f8c8d;
255
+ margin-top: 8px;
256
+ }
257
+
258
+ .arch-arrow {
259
+ font-size: 24px;
260
+ color: #7f8c8d;
261
+ font-weight: 300;
262
+ }
263
+
264
+ .arch-note {
265
+ text-align: center;
266
+ font-size: 14px;
267
+ color: #7f8c8d;
268
+ margin-top: 20px;
269
+ padding-top: 20px;
270
+ border-top: 1px solid #e0e0e0;
271
+ }
272
+
273
+ /* デモセクション */
274
+ .demo-grid {
275
+ display: flex;
276
+ align-items: stretch;
277
+ justify-content: center;
278
+ flex-wrap: wrap;
279
+ gap: 12px;
280
+ margin-top: 30px;
281
+ max-width: 1200px;
282
+ margin-left: auto;
283
+ margin-right: auto;
284
+ }
285
+
286
+ .demo-arrow {
287
+ font-size: 24px;
288
+ color: #95a5a6;
289
+ display: flex;
290
+ align-items: center;
291
+ justify-content: center;
292
+ flex-shrink: 0;
293
+ margin: 0 6px;
294
+ }
295
+
296
+ @media (max-width: 768px) {
297
+ .demo-grid {
298
+ flex-direction: column;
299
+ gap: 8px;
300
+ }
301
+
302
+ .demo-arrow {
303
+ transform: rotate(90deg);
304
+ margin: 6px 0;
305
+ }
306
+ }
307
+
308
+ .demo-card {
309
+ background: rgba(255, 255, 255, 0.8);
310
+ border: 1px solid #e0e0e0;
311
+ padding: 24px;
312
+ backdrop-filter: blur(10px);
313
+ box-shadow:
314
+ 0 8px 32px rgba(0, 0, 0, 0.08),
315
+ 0 2px 8px rgba(0, 0, 0, 0.04);
316
+ flex: 1;
317
+ min-width: 280px;
318
+ max-width: 100%;
319
+ min-height: 100%;
320
+ }
321
+
322
+ .demo-card.pub {
323
+ border-top: 3px solid #27ae60;
324
+ }
325
+
326
+ .demo-card.cms {
327
+ border-top: 3px solid #3498db;
328
+ }
329
+
330
+ .demo-card.dev {
331
+ border-top: 3px solid #e67e22;
332
+ }
333
+
334
+ .demo-badge {
335
+ display: inline-block;
336
+ padding: 4px 10px;
337
+ border-radius: 4px;
338
+ font-size: 11px;
339
+ font-weight: 600;
340
+ margin-bottom: 12px;
341
+ text-transform: uppercase;
342
+ letter-spacing: 0.5px;
343
+ }
344
+
345
+ .demo-card.pub .demo-badge {
346
+ background: #d5f4e6;
347
+ color: #27ae60;
348
+ }
349
+
350
+ .demo-card.cms .demo-badge {
351
+ background: #d6eaf8;
352
+ color: #3498db;
353
+ }
354
+
355
+ .demo-card.dev .demo-badge {
356
+ background: #fadbd8;
357
+ color: #e67e22;
358
+ }
359
+
360
+ .demo-title {
361
+ font-size: 18px;
362
+ font-weight: 600;
363
+ margin-bottom: 8px;
364
+ color: #2c3e50;
365
+ }
366
+
367
+ .demo-description {
368
+ font-size: 14px;
369
+ color: #7f8c8d;
370
+ margin-bottom: 16px;
371
+ line-height: 1.6;
372
+ }
373
+
374
+ .demo-features {
375
+ list-style: none;
376
+ margin-bottom: 18px;
377
+ }
378
+
379
+ .demo-features li {
380
+ font-size: 14px;
381
+ color: #7f8c8d;
382
+ margin: 8px 0;
383
+ padding-left: 24px;
384
+ position: relative;
385
+ }
386
+
387
+ .demo-features li::before {
388
+ content: '\2022';
389
+ position: absolute;
390
+ left: 0;
391
+ color: #7f8c8d;
392
+ font-weight: normal;
393
+ }
394
+
395
+ .demo-code {
396
+ background: #1e1e1e;
397
+ border-radius: 6px;
398
+ padding: 10px;
399
+ margin-bottom: 16px;
400
+ overflow-x: auto;
401
+ }
402
+
403
+ .demo-code code {
404
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
405
+ font-size: 13px;
406
+ color: #d4d4d4;
407
+ }
408
+
409
+ .demo-button {
410
+ display: block;
411
+ width: 100%;
412
+ padding: 10px;
413
+ background: #2c3e50;
414
+ color: white;
415
+ text-align: center;
416
+ border-radius: 4px;
417
+ text-decoration: none;
418
+ font-weight: 500;
419
+ font-size: 14px;
420
+ }
421
+
422
+ .demo-button:hover {
423
+ background: #34495e;
424
+ }
425
+
426
+ /* クイックスタートセクション */
427
+ .quickstart {
428
+ background: rgba(255, 255, 255, 0.8);
429
+ border-radius: 8px;
430
+ padding: 32px;
431
+ margin-top: 40px;
432
+ border: 1px solid #e0e0e0;
433
+ backdrop-filter: blur(10px);
434
+ box-shadow:
435
+ 0 8px 32px rgba(0, 0, 0, 0.08),
436
+ 0 2px 8px rgba(0, 0, 0, 0.04);
437
+ }
438
+
439
+ .quickstart h3 {
440
+ color: #2c3e50 !important;
441
+ }
442
+
443
+ .quickstart-code {
444
+ background: #1e1e1e;
445
+ border-radius: 6px;
446
+ padding: 20px;
447
+ margin: 20px 0;
448
+ overflow-x: auto;
449
+ }
450
+
451
+ .quickstart-code code {
452
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
453
+ font-size: 14px;
454
+ color: #d4d4d4;
455
+ line-height: 1.6;
456
+ }
457
+
458
+ .quickstart-install {
459
+ background: #1e1e1e;
460
+ border-radius: 6px;
461
+ padding: 16px 20px;
462
+ margin-top: 20px;
463
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
464
+ font-size: 14px;
465
+ color: #d4d4d4;
466
+ }
467
+
468
+ .quickstart-tabs {
469
+ display: flex;
470
+ gap: 8px;
471
+ margin-bottom: 20px;
472
+ border-bottom: 1px solid #e0e0e0;
473
+ }
474
+
475
+ .quickstart-tab {
476
+ padding: 10px 20px;
477
+ background: transparent;
478
+ border: none;
479
+ border-bottom: 2px solid transparent;
480
+ cursor: pointer;
481
+ font-size: 14px;
482
+ font-weight: 500;
483
+ color: #7f8c8d;
484
+ transition: all 0.2s;
485
+ }
486
+
487
+ .quickstart-tab:hover {
488
+ color: #2c3e50;
489
+ }
490
+
491
+ .quickstart-tab.active {
492
+ color: #2c3e50;
493
+ border-bottom-color: #2c3e50;
494
+ }
495
+
496
+ .quickstart-tab-content {
497
+ position: relative;
498
+ }
499
+
500
+ .tab-pane {
501
+ display: none;
502
+ }
503
+
504
+ .tab-pane.active {
505
+ display: block;
506
+ }
507
+
508
+ /* なぜ選ぶべきかセクション */
509
+ .why-choose-grid {
510
+ display: grid;
511
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
512
+ gap: 30px;
513
+ margin-top: 40px;
514
+ }
515
+
516
+ .why-choose-card {
517
+ background: rgba(255, 255, 255, 0.8);
518
+ border: 1px solid #e0e0e0;
519
+ border-radius: 8px;
520
+ padding: 32px;
521
+ text-align: center;
522
+ backdrop-filter: blur(10px);
523
+ box-shadow:
524
+ 0 8px 32px rgba(0, 0, 0, 0.08),
525
+ 0 2px 8px rgba(0, 0, 0, 0.04);
526
+ transition: transform 0.2s, box-shadow 0.2s;
527
+ }
528
+
529
+ .why-choose-card:hover {
530
+ transform: translateY(-4px);
531
+ box-shadow:
532
+ 0 12px 40px rgba(0, 0, 0, 0.12),
533
+ 0 4px 12px rgba(0, 0, 0, 0.06);
534
+ }
535
+
536
+ .why-choose-icon {
537
+ width: 64px;
538
+ height: 64px;
539
+ margin: 0 auto 20px;
540
+ border-radius: 12px;
541
+ display: flex;
542
+ align-items: center;
543
+ justify-content: center;
544
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
545
+ position: relative;
546
+ }
547
+
548
+ .why-choose-icon-link {
549
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
550
+ }
551
+
552
+ .why-choose-icon-link::before {
553
+ content: '';
554
+ width: 24px;
555
+ height: 24px;
556
+ border: 3px solid white;
557
+ border-radius: 4px;
558
+ position: relative;
559
+ }
560
+
561
+ .why-choose-icon-link::after {
562
+ content: '';
563
+ width: 12px;
564
+ height: 12px;
565
+ border-top: 3px solid white;
566
+ border-right: 3px solid white;
567
+ position: absolute;
568
+ top: 50%;
569
+ left: 50%;
570
+ transform: translate(8px, -12px) rotate(45deg);
571
+ }
572
+
573
+ .why-choose-icon-swap {
574
+ background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
575
+ }
576
+
577
+ .why-choose-icon-swap::before,
578
+ .why-choose-icon-swap::after {
579
+ content: '';
580
+ position: absolute;
581
+ width: 20px;
582
+ height: 20px;
583
+ border: 3px solid white;
584
+ border-radius: 4px;
585
+ }
586
+
587
+ .why-choose-icon-swap::before {
588
+ top: 12px;
589
+ left: 12px;
590
+ transform: rotate(-15deg);
591
+ }
592
+
593
+ .why-choose-icon-swap::after {
594
+ bottom: 12px;
595
+ right: 12px;
596
+ transform: rotate(15deg);
597
+ }
598
+
599
+ .why-choose-icon-lightning {
600
+ background: linear-gradient(135deg, #f6d365 0%, #fda085 100%);
601
+ }
602
+
603
+ .why-choose-icon-lightning::before {
604
+ content: '';
605
+ width: 0;
606
+ height: 0;
607
+ border-left: 8px solid transparent;
608
+ border-right: 8px solid transparent;
609
+ border-bottom: 16px solid white;
610
+ position: absolute;
611
+ top: 16px;
612
+ left: 50%;
613
+ transform: translateX(-50%) rotate(-20deg);
614
+ }
615
+
616
+ .why-choose-icon-lightning::after {
617
+ content: '';
618
+ width: 0;
619
+ height: 0;
620
+ border-left: 8px solid transparent;
621
+ border-right: 8px solid transparent;
622
+ border-top: 16px solid white;
623
+ position: absolute;
624
+ bottom: 16px;
625
+ left: 50%;
626
+ transform: translateX(-50%) rotate(20deg);
627
+ }
628
+
629
+ .why-choose-title {
630
+ font-size: 20px;
631
+ font-weight: 600;
632
+ margin-bottom: 12px;
633
+ color: #2c3e50;
634
+ }
635
+
636
+ .why-choose-description {
637
+ font-size: 15px;
638
+ color: #7f8c8d;
639
+ line-height: 1.7;
640
+ text-align: left;
641
+ }
642
+
643
+ /* 比較セクション */
644
+ .comparison-container {
645
+ background: rgba(255, 255, 255, 0.8);
646
+ border-radius: 8px;
647
+ padding: 32px;
648
+ margin-top: 40px;
649
+ border: 1px solid #e0e0e0;
650
+ backdrop-filter: blur(10px);
651
+ box-shadow:
652
+ 0 8px 32px rgba(0, 0, 0, 0.08),
653
+ 0 2px 8px rgba(0, 0, 0, 0.04);
654
+ overflow-x: auto;
655
+ }
656
+
657
+ .comparison-table {
658
+ width: 100%;
659
+ border-collapse: collapse;
660
+ margin: 0;
661
+ font-size: 14px;
662
+ }
663
+
664
+ .comparison-table thead {
665
+ background: #f8f9fa;
666
+ }
667
+
668
+ .comparison-table th {
669
+ padding: 16px;
670
+ text-align: left;
671
+ font-weight: 600;
672
+ color: #2c3e50;
673
+ border-bottom: 2px solid #e0e0e0;
674
+ }
675
+
676
+ .comparison-table th:first-child {
677
+ min-width: 180px;
678
+ }
679
+
680
+ .comparison-table td {
681
+ padding: 16px;
682
+ border-bottom: 1px solid #e0e0e0;
683
+ color: #7f8c8d;
684
+ }
685
+
686
+ .comparison-table tbody tr:hover {
687
+ background: #f8f9fa;
688
+ }
689
+
690
+ .comparison-icon {
691
+ display: inline-block;
692
+ width: 18px;
693
+ height: 18px;
694
+ margin-right: 8px;
695
+ vertical-align: middle;
696
+ }
697
+
698
+ .comparison-icon-check {
699
+ position: relative;
700
+ }
701
+
702
+ .comparison-icon-check::before {
703
+ content: '';
704
+ width: 18px;
705
+ height: 18px;
706
+ border: 2px solid #27ae60;
707
+ border-radius: 3px;
708
+ background: #27ae60;
709
+ display: block;
710
+ position: relative;
711
+ }
712
+
713
+ .comparison-icon-check::after {
714
+ content: '';
715
+ width: 5px;
716
+ height: 10px;
717
+ border: 2px solid white;
718
+ border-top: 0;
719
+ border-left: 0;
720
+ position: absolute;
721
+ top: 3px;
722
+ left: 6px;
723
+ transform: rotate(45deg);
724
+ }
725
+
726
+ .comparison-icon-cross {
727
+ position: relative;
728
+ width: 18px;
729
+ height: 18px;
730
+ border: 2px solid #e74c3c;
731
+ border-radius: 3px;
732
+ background: #e74c3c;
733
+ }
734
+
735
+ .comparison-icon-cross::before {
736
+ content: '';
737
+ width: 10px;
738
+ height: 2px;
739
+ background: white;
740
+ position: absolute;
741
+ top: 50%;
742
+ left: 50%;
743
+ transform: translate(-50%, -50%) rotate(45deg);
744
+ }
745
+
746
+ .comparison-icon-cross::after {
747
+ content: '';
748
+ width: 10px;
749
+ height: 2px;
750
+ background: white;
751
+ position: absolute;
752
+ top: 50%;
753
+ left: 50%;
754
+ transform: translate(-50%, -50%) rotate(-45deg);
755
+ }
756
+
757
+ .comparison-icon-warning {
758
+ position: relative;
759
+ }
760
+
761
+ .comparison-icon-warning::before {
762
+ content: '';
763
+ width: 0;
764
+ height: 0;
765
+ border-left: 9px solid transparent;
766
+ border-right: 9px solid transparent;
767
+ border-bottom: 14px solid #f39c12;
768
+ display: block;
769
+ position: relative;
770
+ }
771
+
772
+ .comparison-icon-warning::after {
773
+ content: '';
774
+ width: 2px;
775
+ height: 6px;
776
+ background: white;
777
+ position: absolute;
778
+ top: 3px;
779
+ left: 50%;
780
+ transform: translateX(-50%);
781
+ border-radius: 1px;
782
+ box-shadow: 0 4px 0 white;
783
+ }
784
+
785
+ .comparison-yes {
786
+ color: #27ae60;
787
+ font-weight: 500;
788
+ }
789
+
790
+ .comparison-partial {
791
+ color: #f39c12;
792
+ font-weight: 500;
793
+ }
794
+
795
+ .comparison-no {
796
+ color: #e74c3c;
797
+ font-weight: 500;
798
+ }
799
+
800
+ .comparison-note {
801
+ margin-top: 24px;
802
+ padding-top: 24px;
803
+ border-top: 1px solid #e0e0e0;
804
+ font-size: 14px;
805
+ color: #7f8c8d;
806
+ line-height: 1.7;
807
+ text-align: center;
808
+ }
809
+
810
+ /* ユースケースセクション */
811
+ .usecase-list {
812
+ display: flex;
813
+ flex-direction: column;
814
+ gap: 24px;
815
+ margin-top: 40px;
816
+ }
817
+
818
+ .usecase-item {
819
+ background: rgba(255, 255, 255, 0.8);
820
+ border: 1px solid #e0e0e0;
821
+ border-radius: 8px;
822
+ padding: 24px;
823
+ backdrop-filter: blur(10px);
824
+ box-shadow:
825
+ 0 8px 32px rgba(0, 0, 0, 0.08),
826
+ 0 2px 8px rgba(0, 0, 0, 0.04);
827
+ transition: transform 0.2s, box-shadow 0.2s;
828
+ }
829
+
830
+ .usecase-item:hover {
831
+ transform: translateX(4px);
832
+ box-shadow:
833
+ 0 12px 40px rgba(0, 0, 0, 0.12),
834
+ 0 4px 12px rgba(0, 0, 0, 0.06);
835
+ }
836
+
837
+ .usecase-content {
838
+ width: 100%;
839
+ }
840
+
841
+ .usecase-content h3 {
842
+ font-size: 18px;
843
+ font-weight: 600;
844
+ margin-bottom: 8px;
845
+ color: #2c3e50;
846
+ }
847
+
848
+ .usecase-content p {
849
+ font-size: 15px;
850
+ color: #7f8c8d;
851
+ line-height: 1.7;
852
+ margin: 0;
853
+ }
854
+
855
+ /* デモヒント */
856
+ .demo-hint {
857
+ margin-top: 12px;
858
+ font-size: 13px;
859
+ color: #7f8c8d;
860
+ text-align: center;
861
+ font-style: italic;
862
+ }
863
+
864
+ /* ドキュメントセクション */
865
+ .docs-section {
866
+ text-align: center;
867
+ background: rgba(255, 255, 255, 0.8);
868
+ border-radius: 8px;
869
+ padding: 48px 32px;
870
+ border: 1px solid #e0e0e0;
871
+ backdrop-filter: blur(10px);
872
+ box-shadow:
873
+ 0 8px 32px rgba(0, 0, 0, 0.08),
874
+ 0 2px 8px rgba(0, 0, 0, 0.04);
875
+ }
876
+
877
+ .docs-text {
878
+ font-size: 18px;
879
+ color: #7f8c8d;
880
+ margin-bottom: 30px;
881
+ }
882
+
883
+ /* レスポンシブ */
884
+ @media (max-width: 768px) {
885
+ .hero {
886
+ padding: 40px 20px;
887
+ }
888
+
889
+ .hero-title {
890
+ font-size: 32px;
891
+ }
892
+
893
+ .hero-subtitle {
894
+ font-size: 16px;
895
+ margin-bottom: 24px;
896
+ }
897
+
898
+ .hero-image {
899
+ max-width: 100%;
900
+ padding: 8px;
901
+ }
902
+
903
+ .section {
904
+ padding: 40px 20px;
905
+ }
906
+
907
+ .section-title {
908
+ font-size: 24px;
909
+ margin-bottom: 30px;
910
+ }
911
+
912
+ .section-subtitle {
913
+ font-size: 16px;
914
+ margin-bottom: 30px;
915
+ }
916
+
917
+ .features-grid {
918
+ grid-template-columns: 1fr;
919
+ gap: 20px;
920
+ }
921
+
922
+ .demo-grid {
923
+ flex-direction: column;
924
+ gap: 8px;
925
+ }
926
+
927
+ .demo-arrow {
928
+ transform: rotate(90deg);
929
+ margin: 6px 0;
930
+ }
931
+
932
+ .feature-card {
933
+ padding: 24px;
934
+ }
935
+
936
+ .demo-card {
937
+ padding: 20px;
938
+ }
939
+
940
+ .hero-buttons {
941
+ flex-direction: column;
942
+ gap: 12px;
943
+ margin-bottom: 40px;
944
+ }
945
+
946
+ .btn {
947
+ width: 100%;
948
+ padding: 12px 20px;
949
+ font-size: 14px;
950
+ }
951
+
952
+ .quickstart {
953
+ padding: 24px;
954
+ }
955
+
956
+ .quickstart-tabs {
957
+ overflow-x: auto;
958
+ -webkit-overflow-scrolling: touch;
959
+ scrollbar-width: none;
960
+ }
961
+
962
+ .quickstart-tabs::-webkit-scrollbar {
963
+ display: none;
964
+ }
965
+
966
+ .quickstart-tab {
967
+ padding: 8px 16px;
968
+ font-size: 13px;
969
+ white-space: nowrap;
970
+ }
971
+
972
+ .quickstart-code {
973
+ padding: 16px;
974
+ font-size: 12px;
975
+ }
976
+
977
+ .quickstart-code code {
978
+ font-size: 12px;
979
+ }
980
+
981
+ .docs-section {
982
+ padding: 32px 20px;
983
+ }
984
+
985
+ .architecture-diagram {
986
+ padding: 24px;
987
+ }
988
+
989
+ .architecture-flow {
990
+ flex-direction: column;
991
+ gap: 16px;
992
+ }
993
+
994
+ .arch-box {
995
+ min-width: 100%;
996
+ }
997
+
998
+ .arch-frontend-group {
999
+ width: 100%;
1000
+ }
1001
+
1002
+ .arch-arrow {
1003
+ transform: rotate(90deg);
1004
+ }
1005
+
1006
+ .comparison-container {
1007
+ padding: 20px;
1008
+ }
1009
+
1010
+ .comparison-table {
1011
+ font-size: 12px;
1012
+ }
1013
+
1014
+ .comparison-table th,
1015
+ .comparison-table td {
1016
+ padding: 12px 8px;
1017
+ }
1018
+
1019
+ .comparison-table th:first-child {
1020
+ min-width: 140px;
1021
+ }
1022
+
1023
+ .why-choose-grid {
1024
+ grid-template-columns: 1fr;
1025
+ gap: 20px;
1026
+ }
1027
+
1028
+ .why-choose-card {
1029
+ padding: 24px;
1030
+ }
1031
+
1032
+ .usecase-list {
1033
+ gap: 20px;
1034
+ }
1035
+
1036
+ .usecase-item {
1037
+ padding: 20px;
1038
+ }
1039
+ }