create-nativecore 0.1.1 → 0.2.1

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 (175) hide show
  1. package/README.md +6 -14
  2. package/bin/index.mjs +403 -431
  3. package/package.json +3 -2
  4. package/template/.env.example +28 -0
  5. package/template/.htmlhintrc +14 -0
  6. package/template/api/data/dashboard.json +11 -0
  7. package/template/api/data/users.json +18 -0
  8. package/template/api/mockApi.js +161 -0
  9. package/template/assets/icon.svg +13 -0
  10. package/template/assets/logo.svg +25 -0
  11. package/template/eslint.config.js +94 -0
  12. package/template/index.html +137 -0
  13. package/template/manifest.json +19 -0
  14. package/template/public/.well-known/security.txt +9 -0
  15. package/template/public/_headers +24 -0
  16. package/template/public/_redirects +14 -0
  17. package/template/public/assets/icon.svg +13 -0
  18. package/template/public/assets/logo.svg +25 -0
  19. package/template/public/manifest.json +19 -0
  20. package/template/public/robots.txt +13 -0
  21. package/template/public/sitemap.xml +27 -0
  22. package/template/scripts/build-for-bots.mjs +121 -0
  23. package/template/scripts/convert-to-ts.mjs +106 -0
  24. package/template/scripts/fix-encoding.mjs +38 -0
  25. package/template/scripts/fix-svg-paths.mjs +32 -0
  26. package/template/scripts/generate-cf-router.mjs +52 -0
  27. package/template/scripts/inject-dev-tools.mjs +41 -0
  28. package/template/scripts/inject-version.mjs +65 -0
  29. package/template/scripts/make-component.mjs +445 -0
  30. package/template/scripts/make-component.mjs.backup +432 -0
  31. package/template/scripts/make-controller.mjs +119 -0
  32. package/template/scripts/make-core-component.mjs +303 -0
  33. package/template/scripts/make-view.mjs +346 -0
  34. package/template/scripts/minify.mjs +71 -0
  35. package/template/scripts/prepare-static-assets.mjs +141 -0
  36. package/template/scripts/prompt-bot-build.mjs +223 -0
  37. package/template/scripts/remove-component.mjs +170 -0
  38. package/template/scripts/remove-core-component.mjs +156 -0
  39. package/template/scripts/remove-dev.mjs +13 -0
  40. package/template/scripts/remove-view.mjs +200 -0
  41. package/template/scripts/strip-dev-blocks.mjs +30 -0
  42. package/template/scripts/watch-compile.mjs +69 -0
  43. package/template/server.js +1066 -0
  44. package/template/src/app.ts +115 -0
  45. package/template/src/components/appRegistry.ts +8 -0
  46. package/template/src/components/core/app-footer.ts +27 -0
  47. package/template/src/components/core/app-header.ts +175 -0
  48. package/template/src/components/core/app-sidebar.ts +238 -0
  49. package/template/src/components/core/loading-spinner.ts +25 -0
  50. package/template/src/components/core/nc-a.ts +313 -0
  51. package/template/src/components/core/nc-accordion.ts +186 -0
  52. package/template/src/components/core/nc-alert.ts +153 -0
  53. package/template/src/components/core/nc-animation.ts +1150 -0
  54. package/template/src/components/core/nc-autocomplete.ts +271 -0
  55. package/template/src/components/core/nc-avatar-group.ts +113 -0
  56. package/template/src/components/core/nc-avatar.ts +148 -0
  57. package/template/src/components/core/nc-badge.ts +86 -0
  58. package/template/src/components/core/nc-bottom-nav.ts +214 -0
  59. package/template/src/components/core/nc-breadcrumb.ts +96 -0
  60. package/template/src/components/core/nc-button.ts +307 -0
  61. package/template/src/components/core/nc-card.ts +160 -0
  62. package/template/src/components/core/nc-checkbox.ts +282 -0
  63. package/template/src/components/core/nc-chip.ts +115 -0
  64. package/template/src/components/core/nc-code.ts +314 -0
  65. package/template/src/components/core/nc-collapsible.ts +154 -0
  66. package/template/src/components/core/nc-color-picker.ts +268 -0
  67. package/template/src/components/core/nc-copy-button.ts +119 -0
  68. package/template/src/components/core/nc-date-picker.ts +443 -0
  69. package/template/src/components/core/nc-div.ts +280 -0
  70. package/template/src/components/core/nc-divider.ts +81 -0
  71. package/template/src/components/core/nc-drawer.ts +230 -0
  72. package/template/src/components/core/nc-dropdown.ts +178 -0
  73. package/template/src/components/core/nc-empty-state.ts +134 -0
  74. package/template/src/components/core/nc-file-upload.ts +354 -0
  75. package/template/src/components/core/nc-form.ts +312 -0
  76. package/template/src/components/core/nc-image.ts +184 -0
  77. package/template/src/components/core/nc-input.ts +383 -0
  78. package/template/src/components/core/nc-kbd.ts +48 -0
  79. package/template/src/components/core/nc-menu-item.ts +193 -0
  80. package/template/src/components/core/nc-menu.ts +376 -0
  81. package/template/src/components/core/nc-modal.ts +238 -0
  82. package/template/src/components/core/nc-nav-item.ts +151 -0
  83. package/template/src/components/core/nc-number-input.ts +350 -0
  84. package/template/src/components/core/nc-otp-input.ts +235 -0
  85. package/template/src/components/core/nc-pagination.ts +178 -0
  86. package/template/src/components/core/nc-popover.ts +260 -0
  87. package/template/src/components/core/nc-progress-circular.ts +119 -0
  88. package/template/src/components/core/nc-progress.ts +134 -0
  89. package/template/src/components/core/nc-radio.ts +235 -0
  90. package/template/src/components/core/nc-rating.ts +266 -0
  91. package/template/src/components/core/nc-rich-text.ts +283 -0
  92. package/template/src/components/core/nc-scroll-top.ts +116 -0
  93. package/template/src/components/core/nc-select.ts +452 -0
  94. package/template/src/components/core/nc-skeleton.ts +107 -0
  95. package/template/src/components/core/nc-slider.ts +285 -0
  96. package/template/src/components/core/nc-snackbar.ts +230 -0
  97. package/template/src/components/core/nc-splash.ts +343 -0
  98. package/template/src/components/core/nc-stepper.ts +247 -0
  99. package/template/src/components/core/nc-switch.ts +281 -0
  100. package/template/src/components/core/nc-tab-item.ts +138 -0
  101. package/template/src/components/core/nc-table.ts +279 -0
  102. package/template/src/components/core/nc-tabs.ts +554 -0
  103. package/template/src/components/core/nc-tag-input.ts +279 -0
  104. package/template/src/components/core/nc-textarea.ts +216 -0
  105. package/template/src/components/core/nc-time-picker.ts +438 -0
  106. package/template/src/components/core/nc-timeline.ts +186 -0
  107. package/template/src/components/core/nc-tooltip.ts +143 -0
  108. package/template/src/components/frameworkRegistry.ts +68 -0
  109. package/template/src/components/preloadRegistry.ts +28 -0
  110. package/template/src/components/registry.ts +8 -0
  111. package/template/src/components/ui/dashboard-signal-lab.ts +284 -0
  112. package/template/src/constants/apiEndpoints.ts +27 -0
  113. package/template/src/constants/errorMessages.ts +23 -0
  114. package/template/src/constants/index.ts +8 -0
  115. package/template/src/constants/routePaths.ts +15 -0
  116. package/template/src/constants/storageKeys.ts +18 -0
  117. package/template/src/controllers/dashboard.controller.ts +200 -0
  118. package/template/src/controllers/home.controller.ts +21 -0
  119. package/template/src/controllers/index.ts +11 -0
  120. package/template/src/controllers/login.controller.ts +131 -0
  121. package/template/src/core/component.ts +354 -0
  122. package/template/src/core/errorHandler.ts +85 -0
  123. package/template/src/core/gpu-animation.ts +604 -0
  124. package/template/src/core/http.ts +173 -0
  125. package/template/src/core/lazyComponents.ts +90 -0
  126. package/template/src/core/router.ts +653 -0
  127. package/template/src/core/signals.ts +146 -0
  128. package/template/src/core/state.ts +248 -0
  129. package/template/src/dev/component-editor.ts +1363 -0
  130. package/template/src/dev/component-overlay.ts +278 -0
  131. package/template/src/dev/context-menu.ts +223 -0
  132. package/template/src/dev/denc-tools.ts +250 -0
  133. package/template/src/dev/hmr.ts +189 -0
  134. package/template/src/dev/nfbs.code-workspace +27 -0
  135. package/template/src/dev/outline-panel.ts +1247 -0
  136. package/template/src/middleware/auth.middleware.ts +23 -0
  137. package/template/src/routes/routes.ts +38 -0
  138. package/template/src/services/api.service.ts +394 -0
  139. package/template/src/services/auth.service.ts +176 -0
  140. package/template/src/services/index.ts +8 -0
  141. package/template/src/services/logger.service.ts +74 -0
  142. package/template/src/services/storage.service.ts +88 -0
  143. package/template/src/stores/appStore.ts +57 -0
  144. package/template/src/stores/uiStore.ts +36 -0
  145. package/template/src/styles/core-variables.css +219 -0
  146. package/template/src/styles/core.css +710 -0
  147. package/template/src/styles/main.css +3164 -0
  148. package/template/src/styles/variables.css +152 -0
  149. package/template/src/types/global.d.ts +47 -0
  150. package/template/src/utils/cacheBuster.ts +20 -0
  151. package/template/src/utils/dom.ts +149 -0
  152. package/template/src/utils/events.ts +203 -0
  153. package/template/src/utils/form.ts +176 -0
  154. package/template/src/utils/formatters.ts +169 -0
  155. package/template/src/utils/helpers.ts +195 -0
  156. package/template/src/utils/markdown.ts +307 -0
  157. package/template/src/utils/sidebar.ts +96 -0
  158. package/template/src/utils/smoothScroll.ts +85 -0
  159. package/template/src/utils/templates.ts +23 -0
  160. package/template/src/utils/validation.ts +73 -0
  161. package/template/src/views/protected/dashboard.html +293 -0
  162. package/template/src/views/public/home.html +150 -0
  163. package/template/src/views/public/login.html +102 -0
  164. package/template/tests/unit/component.test.ts +87 -0
  165. package/template/tests/unit/computed.test.ts +79 -0
  166. package/template/tests/unit/form.test.ts +68 -0
  167. package/template/tests/unit/formatters.test.ts +49 -0
  168. package/template/tests/unit/lazy-components.test.ts +59 -0
  169. package/template/tests/unit/markdown.test.ts +62 -0
  170. package/template/tests/unit/router.test.ts +112 -0
  171. package/template/tests/unit/signals.test.ts +54 -0
  172. package/template/tests/unit/validation.test.ts +50 -0
  173. package/template/tsconfig.build.json +21 -0
  174. package/template/tsconfig.json +51 -0
  175. package/template/vitest.config.ts +36 -0
@@ -0,0 +1,3164 @@
1
+ /**
2
+ * Main Styles
3
+ */
4
+
5
+ /* Reset & Base */
6
+ * {
7
+ margin: 0;
8
+ padding: 0;
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ body {
13
+ font-family: var(--font-family);
14
+ font-size: var(--font-size-base);
15
+ color: var(--color-text);
16
+ background-color: var(--color-bg);
17
+ line-height: 1.6;
18
+ -webkit-font-smoothing: antialiased;
19
+ -moz-osx-font-smoothing: grayscale;
20
+ }
21
+
22
+ /* Selection */
23
+ ::selection {
24
+ background: var(--color-primary);
25
+ color: white;
26
+ }
27
+
28
+ /* Container */
29
+ .container {
30
+ max-width: var(--container-max-width);
31
+ margin: 0 auto;
32
+ padding: 0 var(--spacing-xl);
33
+ }
34
+
35
+ /* Responsive Grid Utilities */
36
+ .grid {
37
+ display: grid;
38
+ gap: var(--nc-spacing-lg);
39
+ width: 100%;
40
+ }
41
+
42
+ .grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
43
+ .grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
44
+ .grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
45
+ .grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
46
+
47
+ /* Auto-fit responsive grid (recommended) */
48
+ .grid-auto {
49
+ display: grid;
50
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
51
+ gap: var(--nc-spacing-lg);
52
+ width: 100%;
53
+ }
54
+
55
+ /* Flexbox responsive layout */
56
+ .flex-wrap {
57
+ display: flex;
58
+ flex-wrap: wrap;
59
+ gap: var(--nc-spacing-lg);
60
+ }
61
+
62
+ .flex-wrap > * {
63
+ flex: 1 1 300px;
64
+ min-width: 0;
65
+ }
66
+
67
+ /* Responsive breakpoints */
68
+ @media (max-width: 768px) {
69
+ .grid-cols-2,
70
+ .grid-cols-3,
71
+ .grid-cols-4 {
72
+ grid-template-columns: repeat(1, minmax(0, 1fr));
73
+ }
74
+
75
+ .grid-auto {
76
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
77
+ }
78
+ }
79
+
80
+ @media (min-width: 769px) and (max-width: 1024px) {
81
+ .grid-cols-3,
82
+ .grid-cols-4 {
83
+ grid-template-columns: repeat(2, minmax(0, 1fr));
84
+ }
85
+ }
86
+
87
+ a {
88
+ color: var(--color-primary);
89
+ text-decoration: none;
90
+ transition: color var(--transition-fast);
91
+ }
92
+
93
+ a:hover {
94
+ color: var(--color-primary-dark);
95
+ }
96
+
97
+
98
+
99
+ /* Page transition animations */
100
+ @keyframes fadeIn {
101
+ from {
102
+ opacity: 0;
103
+ }
104
+ to {
105
+ opacity: 1;
106
+ }
107
+ }
108
+
109
+ @keyframes fadeOut {
110
+ from {
111
+ opacity: 1;
112
+ }
113
+ to {
114
+ opacity: 0;
115
+ }
116
+ }
117
+
118
+ .page-transition-exit {
119
+ animation: fadeOut 0.2s ease-out forwards;
120
+ }
121
+
122
+ .page-transition-enter {
123
+ animation: fadeIn 0.4s ease-in forwards;
124
+ }
125
+
126
+ /* Page navigation spinner */
127
+ @keyframes nc-spin {
128
+ to { transform: rotate(360deg); }
129
+ }
130
+
131
+ #page-progress {
132
+ position: fixed;
133
+ bottom: 1.25rem;
134
+ right: 1.25rem;
135
+ width: 26px;
136
+ height: 26px;
137
+ border-radius: 50%;
138
+ z-index: 9999;
139
+ pointer-events: none;
140
+ opacity: 0;
141
+ transition: opacity 0.2s ease;
142
+ background: conic-gradient(
143
+ var(--color-primary) 0deg,
144
+ var(--color-primary) 270deg,
145
+ transparent 270deg
146
+ );
147
+ -webkit-mask: radial-gradient(circle, transparent 9px, black 10px);
148
+ mask: radial-gradient(circle, transparent 9px, black 10px);
149
+ }
150
+
151
+ #page-progress.loading {
152
+ opacity: 1;
153
+ animation: nc-spin 0.7s linear infinite;
154
+ }
155
+
156
+ /* Layout */
157
+ .container {
158
+ width: 100%;
159
+ max-width: var(--container-max-width);
160
+ margin: 0 auto;
161
+ padding: 0 var(--spacing-lg);
162
+ box-sizing: border-box;
163
+ }
164
+
165
+
166
+ .component-library {
167
+ max-width: 1400px;
168
+ width: 100%;
169
+ margin: 0 auto;
170
+ padding: var(--spacing-2xl) var(--spacing-xl);
171
+ box-sizing: border-box;
172
+ width: 100%;
173
+ }
174
+
175
+ /* Component Library Sections */
176
+ .page-header {
177
+ text-align: center;
178
+ margin-bottom: var(--spacing-3xl);
179
+ padding-bottom: var(--spacing-xl);
180
+ border-bottom: 2px solid var(--color-border);
181
+ }
182
+
183
+ .page-title {
184
+ font-size: var(--font-size-4xl);
185
+ font-weight: 800;
186
+ color: var(--color-text);
187
+ margin-bottom: var(--spacing-md);
188
+ background: var(--gradient-primary);
189
+ -webkit-background-clip: text;
190
+ -webkit-text-fill-color: transparent;
191
+ background-clip: text;
192
+ }
193
+
194
+ .page-description {
195
+ font-size: var(--font-size-lg);
196
+ color: var(--color-text-secondary);
197
+ margin: 0;
198
+ }
199
+
200
+ .component-section {
201
+ margin-bottom: var(--spacing-3xl);
202
+ padding: var(--spacing-2xl);
203
+ background: white;
204
+ border-radius: var(--radius-xl);
205
+ border: 1px solid var(--color-border);
206
+ box-shadow: var(--shadow-sm);
207
+ transition: all var(--transition-base);
208
+ }
209
+
210
+ .component-section:hover {
211
+ box-shadow: var(--shadow-md);
212
+ border-color: var(--color-primary-light);
213
+ }
214
+
215
+ .section-title {
216
+ font-size: var(--font-size-2xl);
217
+ font-weight: 700;
218
+ color: var(--color-text);
219
+ margin-bottom: var(--spacing-lg);
220
+ padding-bottom: var(--spacing-sm);
221
+ border-bottom: 2px solid var(--color-bg-secondary);
222
+ }
223
+
224
+ .component-demo {
225
+ display: flex;
226
+ flex-wrap: wrap;
227
+ gap: var(--spacing-lg);
228
+ align-items: center;
229
+ padding: var(--spacing-sm);
230
+ background: var(--color-bg-secondary);
231
+ border-radius: var(--radius-lg);
232
+ min-height: 100px;
233
+ }
234
+
235
+ /* Docs Page */
236
+ .docs-page {
237
+ padding-top: var(--spacing-2xl);
238
+ padding-bottom: var(--spacing-3xl);
239
+ }
240
+
241
+ .docs-page__header {
242
+ text-align: left;
243
+ }
244
+
245
+ .docs-page__eyebrow {
246
+ margin: 0 0 var(--spacing-sm);
247
+ font-size: var(--font-size-sm);
248
+ font-weight: 700;
249
+ letter-spacing: 0.08em;
250
+ text-transform: uppercase;
251
+ color: var(--color-primary);
252
+ }
253
+
254
+ .docs-page__status {
255
+ margin: var(--spacing-md) 0 0;
256
+ font-size: var(--font-size-sm);
257
+ color: var(--color-text-secondary);
258
+ }
259
+
260
+ .docs-page__toc-toggle {
261
+ display: none;
262
+ align-items: center;
263
+ justify-content: center;
264
+ gap: 0.4rem;
265
+ margin: 0 0 var(--spacing-lg);
266
+ padding: 0.7rem 0.95rem;
267
+ border: 1px solid var(--color-border);
268
+ border-radius: var(--radius-lg);
269
+ background: white;
270
+ color: var(--color-text);
271
+ font: inherit;
272
+ font-weight: 700;
273
+ box-shadow: var(--shadow-sm);
274
+ }
275
+
276
+ .docs-sidebar-backdrop {
277
+ position: fixed;
278
+ inset: 0;
279
+ background: rgba(15, 23, 42, 0.38);
280
+ opacity: 0;
281
+ pointer-events: none;
282
+ transition: opacity var(--transition-fast);
283
+ z-index: 39;
284
+ }
285
+
286
+ .docs-sidebar-backdrop.is-visible {
287
+ opacity: 1;
288
+ pointer-events: auto;
289
+ }
290
+
291
+ .docs-layout {
292
+ display: grid;
293
+ grid-template-columns: minmax(220px, 280px) minmax(0, 1fr);
294
+ gap: var(--spacing-xl);
295
+ align-items: start;
296
+ }
297
+
298
+ .docs-sidebar {
299
+ position: sticky;
300
+ top: 12px;
301
+ align-self: start;
302
+ height: calc(100vh - 24px);
303
+ }
304
+
305
+ .docs-sidebar__card {
306
+ background: white;
307
+ border: 1px solid var(--color-border);
308
+ border-radius: var(--radius-xl);
309
+ box-shadow: var(--shadow-sm);
310
+ padding: var(--spacing-lg);
311
+ height: 100%;
312
+ overflow: hidden;
313
+ display: flex;
314
+ flex-direction: column;
315
+ }
316
+
317
+ .docs-sidebar__title {
318
+ margin: 0 0 var(--spacing-md);
319
+ font-size: var(--font-size-lg);
320
+ color: var(--color-text);
321
+ }
322
+
323
+ .docs-toc {
324
+ display: flex;
325
+ flex-direction: column;
326
+ flex: 1 1 auto;
327
+ gap: 6px;
328
+ overflow-y: auto;
329
+ min-height: 0;
330
+ padding-right: 4px;
331
+ padding-bottom: 24px;
332
+ scrollbar-width: thin;
333
+ }
334
+
335
+ .docs-toc::-webkit-scrollbar {
336
+ width: 8px;
337
+ }
338
+
339
+ .docs-toc::-webkit-scrollbar-thumb {
340
+ background: var(--color-border);
341
+ border-radius: 999px;
342
+ }
343
+
344
+ .docs-toc::-webkit-scrollbar-track {
345
+ background: transparent;
346
+ }
347
+
348
+ .docs-toc__link {
349
+ display: block;
350
+ padding: 6px 10px;
351
+ border-radius: var(--radius-md);
352
+ color: var(--color-text-secondary);
353
+ text-decoration: none;
354
+ transition: background var(--transition-fast), color var(--transition-fast);
355
+ }
356
+
357
+ .docs-toc__link:hover {
358
+ background: var(--color-bg-secondary);
359
+ color: var(--color-primary);
360
+ }
361
+
362
+ .docs-toc__link--chapter {
363
+ font-weight: 600;
364
+ }
365
+
366
+ .docs-toc__link--active {
367
+ background: color-mix(in srgb, var(--color-primary) 12%, white);
368
+ color: var(--color-primary-dark);
369
+ }
370
+
371
+ .docs-toc__link--h3 {
372
+ padding-left: 22px;
373
+ font-size: var(--font-size-sm);
374
+ }
375
+
376
+ .docs-toc__link--h4 {
377
+ padding-left: 34px;
378
+ font-size: var(--font-size-sm);
379
+ }
380
+
381
+ .docs-toc__empty {
382
+ color: var(--color-text-secondary);
383
+ font-size: var(--font-size-sm);
384
+ }
385
+
386
+ .docs-content {
387
+ min-width: 0;
388
+ }
389
+
390
+ .docs-article {
391
+ background: white;
392
+ border: 1px solid var(--color-border);
393
+ border-radius: var(--radius-xl);
394
+ box-shadow: var(--shadow-sm);
395
+ padding: clamp(20px, 3vw, 40px);
396
+ }
397
+
398
+ .docs-reader {
399
+ display: flex;
400
+ flex-direction: column;
401
+ gap: var(--spacing-xl);
402
+ }
403
+
404
+ .docs-reader__nav {
405
+ display: flex;
406
+ align-items: center;
407
+ justify-content: space-between;
408
+ gap: var(--spacing-md);
409
+ padding: var(--spacing-md);
410
+ border: 1px solid var(--color-border);
411
+ border-radius: var(--radius-lg);
412
+ background: var(--color-bg-secondary);
413
+ }
414
+
415
+ .docs-reader__meta {
416
+ min-width: 0;
417
+ text-align: center;
418
+ font-weight: 700;
419
+ color: var(--color-text);
420
+ }
421
+
422
+ .docs-reader__meta-compact,
423
+ .docs-reader__button-compact {
424
+ display: none;
425
+ }
426
+
427
+ .docs-reader__body {
428
+ min-width: 0;
429
+ }
430
+
431
+ .docs-reader__button {
432
+ display: inline-flex;
433
+ flex-direction: column;
434
+ gap: 4px;
435
+ min-width: min(220px, 100%);
436
+ padding: 12px 16px;
437
+ border: 1px solid var(--color-border);
438
+ border-radius: var(--radius-md);
439
+ background: white;
440
+ color: var(--color-text);
441
+ font: inherit;
442
+ font-weight: 700;
443
+ text-align: left;
444
+ cursor: pointer;
445
+ transition: border-color var(--transition-fast), transform var(--transition-fast), box-shadow var(--transition-fast);
446
+ }
447
+
448
+ .docs-reader__button-detail {
449
+ font-size: var(--font-size-sm);
450
+ font-weight: 500;
451
+ color: var(--color-text-secondary);
452
+ }
453
+
454
+ .docs-reader__button:hover:not(:disabled) {
455
+ border-color: var(--color-primary);
456
+ box-shadow: var(--shadow-sm);
457
+ transform: translateY(-1px);
458
+ }
459
+
460
+ .docs-reader__button:disabled {
461
+ opacity: 0.55;
462
+ cursor: not-allowed;
463
+ }
464
+
465
+ .docs-reader__button--next {
466
+ text-align: right;
467
+ align-items: flex-end;
468
+ }
469
+
470
+ .docs-article h1,
471
+ .docs-article h2,
472
+ .docs-article h3,
473
+ .docs-article h4 {
474
+ color: var(--color-text);
475
+ scroll-margin-top: 100px;
476
+ }
477
+
478
+ .docs-article h1 {
479
+ font-size: var(--font-size-4xl);
480
+ margin: 0 0 var(--spacing-lg);
481
+ }
482
+
483
+ .docs-article h2 {
484
+ margin-top: var(--spacing-2xl);
485
+ margin-bottom: var(--spacing-md);
486
+ padding-top: var(--spacing-sm);
487
+ border-top: 1px solid var(--color-border);
488
+ font-size: var(--font-size-2xl);
489
+ }
490
+
491
+ .docs-article h3 {
492
+ margin-top: var(--spacing-xl);
493
+ margin-bottom: var(--spacing-sm);
494
+ font-size: var(--font-size-xl);
495
+ }
496
+
497
+ .docs-article h4 {
498
+ margin-top: var(--spacing-lg);
499
+ margin-bottom: var(--spacing-xs);
500
+ font-size: var(--font-size-lg);
501
+ }
502
+
503
+ .docs-article p,
504
+ .docs-article li,
505
+ .docs-article blockquote {
506
+ color: var(--color-text-secondary);
507
+ line-height: 1.75;
508
+ }
509
+
510
+ .docs-article a {
511
+ color: var(--color-primary);
512
+ text-decoration: none;
513
+ }
514
+
515
+ .docs-article a:hover {
516
+ text-decoration: underline;
517
+ }
518
+
519
+ .docs-article ul,
520
+ .docs-article ol {
521
+ padding-left: 1.4rem;
522
+ }
523
+
524
+ .docs-article blockquote {
525
+ margin: var(--spacing-lg) 0;
526
+ padding: var(--spacing-md) var(--spacing-lg);
527
+ border-left: 4px solid var(--color-primary-light);
528
+ background: var(--color-bg-secondary);
529
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
530
+ }
531
+
532
+ .docs-article hr {
533
+ border: none;
534
+ border-top: 1px solid var(--color-border);
535
+ margin: var(--spacing-xl) 0;
536
+ }
537
+
538
+ .docs-article pre {
539
+ margin: var(--spacing-lg) 0;
540
+ padding: var(--spacing-lg);
541
+ overflow-x: auto;
542
+ border-radius: var(--radius-lg);
543
+ background: #111827;
544
+ color: #e5e7eb;
545
+ }
546
+
547
+ .docs-article code {
548
+ font-family: 'Geist Mono', monospace;
549
+ font-size: 0.95em;
550
+ }
551
+
552
+ .docs-article p code,
553
+ .docs-article li code,
554
+ .docs-article blockquote code {
555
+ background: var(--color-bg-secondary);
556
+ color: var(--color-text);
557
+ padding: 2px 6px;
558
+ border-radius: var(--radius-sm);
559
+ }
560
+
561
+ .docs-error {
562
+ padding: var(--spacing-xl);
563
+ border: 1px solid var(--color-danger-light);
564
+ border-radius: var(--radius-lg);
565
+ background: color-mix(in srgb, var(--color-danger) 8%, white);
566
+ }
567
+
568
+ @media (max-width: 980px) {
569
+ .docs-layout {
570
+ grid-template-columns: 1fr;
571
+ }
572
+
573
+ .docs-sidebar {
574
+ position: fixed;
575
+ top: 0;
576
+ left: 0;
577
+ width: min(86vw, 320px);
578
+ height: 100vh;
579
+ z-index: 40;
580
+ transform: translateX(-100%);
581
+ transition: transform var(--transition-base);
582
+ padding: 12px 10px 12px 12px;
583
+ box-sizing: border-box;
584
+ }
585
+
586
+ .docs-sidebar.is-open {
587
+ transform: translateX(0);
588
+ }
589
+
590
+ .docs-sidebar__card {
591
+ height: 100%;
592
+ }
593
+
594
+ .docs-toc {
595
+ overflow-y: auto;
596
+ }
597
+
598
+ .docs-page__toc-toggle {
599
+ display: inline-flex;
600
+ }
601
+
602
+ .docs-reader__nav {
603
+ display: grid;
604
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
605
+ align-items: center;
606
+ gap: 0.5rem;
607
+ padding: 0.65rem;
608
+ }
609
+
610
+ .docs-reader__button,
611
+ .docs-reader__button--next {
612
+ min-width: 0;
613
+ align-items: center;
614
+ justify-content: center;
615
+ text-align: center;
616
+ padding: 0.75rem 0.6rem;
617
+ gap: 0;
618
+ }
619
+
620
+ .docs-reader__button-label,
621
+ .docs-reader__button-detail,
622
+ .docs-reader__meta-full {
623
+ display: none;
624
+ }
625
+
626
+ .docs-reader__button-compact,
627
+ .docs-reader__meta-compact {
628
+ display: block;
629
+ font-size: 0.82rem;
630
+ line-height: 1.2;
631
+ }
632
+
633
+ .docs-reader__meta {
634
+ font-size: 0.82rem;
635
+ padding: 0 0.2rem;
636
+ }
637
+
638
+ .docs-reader__button--next {
639
+ align-items: center;
640
+ }
641
+ }
642
+
643
+
644
+
645
+ .mobile-menu-toggle {
646
+ display: none;
647
+ flex-direction: column;
648
+ gap: 4px;
649
+ background: transparent;
650
+ border: none;
651
+ cursor: pointer;
652
+ padding: var(--spacing-xs);
653
+ border-radius: var(--radius-md);
654
+ transition: all var(--transition-fast);
655
+ }
656
+
657
+ .mobile-menu-toggle:hover {
658
+ background: var(--color-bg-secondary);
659
+ }
660
+
661
+ .mobile-menu-toggle .burger-line {
662
+ width: 20px;
663
+ height: 2px;
664
+ background: var(--color-text);
665
+ border-radius: 2px;
666
+ transition: all var(--transition-fast);
667
+ }
668
+
669
+ @media (max-width: 768px) {
670
+ .mobile-menu-toggle {
671
+ display: flex;
672
+ }
673
+ }
674
+
675
+ .logo {
676
+ display: flex;
677
+ align-items: center;
678
+ gap: var(--spacing-sm);
679
+ font-size: var(--font-size-xl);
680
+ font-weight: 700;
681
+ color: var(--color-primary);
682
+ text-decoration: none;
683
+ transition: all var(--transition-fast);
684
+ }
685
+
686
+ .logo:hover {
687
+ transform: translateY(-2px);
688
+ color: var(--color-primary-dark);
689
+ }
690
+
691
+ .logo-icon {
692
+ font-size: 2rem;
693
+ line-height: 1;
694
+ }
695
+
696
+ .logo-text {
697
+ font-size: 1.5rem;
698
+ }
699
+
700
+
701
+ .nanc-link {
702
+ position: relative;
703
+ padding: var(--spacing-sm) var(--spacing-md);
704
+ color: var(--color-text);
705
+ font-weight: 500;
706
+ transition: all var(--transition-fast);
707
+ border-radius: var(--radius-md);
708
+ }
709
+
710
+ .nanc-link:hover {
711
+ color: var(--color-primary);
712
+ background: var(--color-bg-secondary);
713
+ }
714
+
715
+ .nanc-link.active {
716
+ color: var(--color-primary);
717
+ background: var(--color-bg-secondary);
718
+ }
719
+
720
+
721
+ .user-menu {
722
+ display: flex;
723
+ align-items: center;
724
+ gap: var(--spacing-md);
725
+ }
726
+
727
+ .user-name {
728
+ color: var(--color-text-secondary);
729
+ font-size: var(--font-size-sm);
730
+ font-weight: 500;
731
+ }
732
+
733
+ /* Hamburger Menu */
734
+ .hamburger {
735
+ display: none;
736
+ flex-direction: column;
737
+ gap: 5px;
738
+ background: none;
739
+ border: none;
740
+ cursor: pointer;
741
+ padding: var(--spacing-sm);
742
+ z-index: 1001;
743
+ transition: all var(--transition-fast);
744
+ border-radius: var(--radius-md);
745
+ }
746
+
747
+ .hamburger:hover {
748
+ background: var(--color-bg-secondary);
749
+ }
750
+
751
+ .hamburger-line {
752
+ width: 24px;
753
+ height: 2px;
754
+ background: var(--color-text);
755
+ transition: all var(--transition-fast);
756
+ border-radius: 2px;
757
+ }
758
+
759
+ .hamburger.active .hamburger-line:nth-child(1) {
760
+ transform: rotate(45deg) translate(7px, 7px);
761
+ }
762
+
763
+ .hamburger.active .hamburger-line:nth-child(2) {
764
+ opacity: 0;
765
+ }
766
+
767
+ .hamburger.active .hamburger-line:nth-child(3) {
768
+ transform: rotate(-45deg) translate(7px, -7px);
769
+ }
770
+
771
+ /* Mobile Drawer */
772
+ .mobile-drawer {
773
+ position: fixed;
774
+ top: 0;
775
+ left: 0;
776
+ width: 100%;
777
+ height: 100vh;
778
+ z-index: 999;
779
+ pointer-events: none;
780
+ visibility: hidden;
781
+ }
782
+
783
+ .mobile-drawer.open {
784
+ pointer-events: all;
785
+ visibility: visible;
786
+ }
787
+
788
+ .drawer-overlay {
789
+ position: absolute;
790
+ top: 0;
791
+ left: 0;
792
+ width: 100%;
793
+ height: 100%;
794
+ background: rgba(0, 0, 0, 0.5);
795
+ opacity: 0;
796
+ transition: opacity var(--transition-base);
797
+ z-index: 1;
798
+ }
799
+
800
+ .mobile-drawer.open .drawer-overlay {
801
+ opacity: 1;
802
+ }
803
+
804
+ .drawer-content {
805
+ position: absolute;
806
+ top: 0;
807
+ right: 0;
808
+ width: 300px;
809
+ max-width: 80vw;
810
+ height: 100%;
811
+ background: white;
812
+ box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1);
813
+ transform: translateX(100%);
814
+ transition: transform var(--transition-base);
815
+ display: flex;
816
+ flex-direction: column;
817
+ overflow-y: auto;
818
+ z-index: 2;
819
+ }
820
+
821
+ .mobile-drawer.open .drawer-content {
822
+ transform: translateX(0);
823
+ }
824
+
825
+ .drawer-header {
826
+ display: flex;
827
+ align-items: center;
828
+ justify-content: space-between;
829
+ padding: var(--spacing-lg);
830
+ border-bottom: 1px solid var(--color-border);
831
+ }
832
+
833
+ .drawer-title {
834
+ font-size: var(--font-size-lg);
835
+ font-weight: 700;
836
+ color: var(--color-text);
837
+ }
838
+
839
+ .drawer-close {
840
+ background: none;
841
+ border: none;
842
+ font-size: 2rem;
843
+ color: var(--color-text-secondary);
844
+ cursor: pointer;
845
+ width: 40px;
846
+ height: 40px;
847
+ display: flex;
848
+ align-items: center;
849
+ justify-content: center;
850
+ border-radius: var(--radius-md);
851
+ transition: all var(--transition-fast);
852
+ }
853
+
854
+ .drawer-close:hover {
855
+ background: var(--color-bg-secondary);
856
+ color: var(--color-text);
857
+ }
858
+
859
+ .drawer-nav {
860
+ flex: 1;
861
+ padding: var(--spacing-md) 0;
862
+ }
863
+
864
+ .drawer-link {
865
+ display: flex;
866
+ align-items: center;
867
+ gap: var(--spacing-md);
868
+ padding: var(--spacing-md) var(--spacing-lg);
869
+ color: var(--color-text);
870
+ font-weight: 500;
871
+ transition: all var(--transition-fast);
872
+ text-decoration: none;
873
+ border: none;
874
+ background: none;
875
+ width: 100%;
876
+ text-align: left;
877
+ cursor: pointer;
878
+ font-size: var(--font-size-base);
879
+ }
880
+
881
+ .drawer-link:hover {
882
+ background: var(--color-bg-secondary);
883
+ color: var(--color-primary);
884
+ }
885
+
886
+ .drawer-link.active {
887
+ background: var(--color-bg-secondary);
888
+ color: var(--color-primary);
889
+ border-left: 3px solid var(--color-primary);
890
+ }
891
+
892
+ .drawer-icon {
893
+ font-size: 1.25rem;
894
+ width: 24px;
895
+ text-align: center;
896
+ }
897
+
898
+ .drawer-user {
899
+ padding: var(--spacing-lg);
900
+ border-top: 1px solid var(--color-border);
901
+ background: var(--color-bg-secondary);
902
+ }
903
+
904
+ .drawer-user-info {
905
+ display: flex;
906
+ align-items: center;
907
+ gap: var(--spacing-md);
908
+ }
909
+
910
+ .drawer-user-icon {
911
+ font-size: 2.5rem;
912
+ }
913
+
914
+ .drawer-user-details {
915
+ display: flex;
916
+ flex-direction: column;
917
+ }
918
+
919
+ .drawer-user-name {
920
+ font-weight: 600;
921
+ color: var(--color-text);
922
+ }
923
+
924
+ .drawer-user-email {
925
+ font-size: var(--font-size-sm);
926
+ color: var(--color-text-secondary);
927
+ }
928
+
929
+ .desktop-only {
930
+ display: flex;
931
+ }
932
+
933
+ /* Footer */
934
+ /* Reserve space before the custom element upgrades to prevent layout shift */
935
+ app-footer {
936
+ display: block;
937
+ min-height: 80px;
938
+ }
939
+
940
+ .app-footer {
941
+ background: var(--color-bg-secondary);
942
+ padding: var(--spacing-xl) 0;
943
+ border-top: 1px solid var(--color-border);
944
+ }
945
+
946
+ .app-footer .container {
947
+ display: flex;
948
+ justify-content: space-between;
949
+ align-items: center;
950
+ }
951
+
952
+ .app-footer p {
953
+ color: var(--color-text-secondary);
954
+ }
955
+
956
+ .footer-links {
957
+ display: flex;
958
+ gap: var(--spacing-lg);
959
+ }
960
+
961
+ .footer-links a {
962
+ color: var(--color-text);
963
+ font-weight: 500;
964
+ text-decoration: underline;
965
+ text-underline-offset: 0.18em;
966
+ }
967
+
968
+ .footer-links a:hover,
969
+ .footer-links a:focus-visible {
970
+ color: var(--color-primary-dark);
971
+ }
972
+
973
+
974
+
975
+ /* Forms */
976
+ .form-group {
977
+ margin-bottom: var(--spacing-lg);
978
+ }
979
+
980
+ .form-group label {
981
+ margin-bottom: var(--spacing-xs);
982
+ font-weight: 500;
983
+ color: var(--color-text);
984
+ }
985
+
986
+ .form-group input,
987
+ .form-group textarea,
988
+ .form-group select {
989
+ width: 100%;
990
+ padding: var(--spacing-sm) var(--spacing-md);
991
+ border: 1px solid var(--color-border);
992
+ border-radius: var(--radius-md);
993
+ font-size: var(--font-size-base);
994
+ font-family: var(--font-family);
995
+ transition: border-color var(--transition-fast);
996
+ }
997
+
998
+ .form-group input:focus,
999
+ .form-group textarea:focus,
1000
+ .form-group select:focus {
1001
+ outline: none;
1002
+ border-color: var(--color-primary);
1003
+ }
1004
+
1005
+ /* Checkbox styles */
1006
+ .checkbox-group {
1007
+ margin-bottom: var(--spacing-md);
1008
+ }
1009
+
1010
+ .checkbox-label {
1011
+ display: flex;
1012
+ align-items: center;
1013
+ gap: var(--spacing-sm);
1014
+ cursor: pointer;
1015
+ user-select: none;
1016
+ }
1017
+
1018
+ .checkbox-input {
1019
+ max-width: 18px;
1020
+ height: 18px;
1021
+ cursor: pointer;
1022
+ accent-color: var(--color-primary);
1023
+ }
1024
+
1025
+ .checkbox-text {
1026
+ font-weight: 400;
1027
+ color: var(--color-text-secondary);
1028
+ }
1029
+
1030
+ /* Alerts */
1031
+ .alert {
1032
+ padding: var(--spacing-md) var(--spacing-lg);
1033
+ border-radius: var(--radius-md);
1034
+ margin-bottom: var(--spacing-lg);
1035
+ }
1036
+
1037
+ .alert-error {
1038
+ background: #fee;
1039
+ color: var(--color-error);
1040
+ border: 1px solid var(--color-error);
1041
+ }
1042
+
1043
+ .alert-success {
1044
+ background: #efe;
1045
+ color: var(--color-success);
1046
+ border: 1px solid var(--color-success);
1047
+ }
1048
+
1049
+ /* Loading Spinner */
1050
+ .loading-spinner {
1051
+ display: flex;
1052
+ flex-direction: column;
1053
+ align-items: center;
1054
+ justify-content: center;
1055
+ padding: var(--spacing-2xl);
1056
+ }
1057
+
1058
+ .spinner {
1059
+ width: 40px;
1060
+ height: 40px;
1061
+ border: 4px solid var(--color-border);
1062
+ border-top-color: var(--color-primary);
1063
+ border-radius: 50%;
1064
+ animation: spin 0.8s linear infinite;
1065
+ }
1066
+
1067
+ .loading-spinner.small .spinner {
1068
+ width: 20px;
1069
+ height: 20px;
1070
+ border-width: 2px;
1071
+ }
1072
+
1073
+ .loading-spinner.large .spinner {
1074
+ width: 60px;
1075
+ height: 60px;
1076
+ border-width: 6px;
1077
+ }
1078
+
1079
+ .loading-message {
1080
+ margin-top: var(--spacing-md);
1081
+ color: var(--color-text-secondary);
1082
+ }
1083
+
1084
+ @keyframes spin {
1085
+ to { transform: rotate(360deg); }
1086
+ }
1087
+
1088
+ /* Pages */
1089
+ .page {
1090
+ /*padding: var(--spacing-xl);*/
1091
+ }
1092
+
1093
+ /* Home Page */
1094
+ .hero {
1095
+ text-align: center;
1096
+ padding: var(--spacing-3xl) var(--spacing-xl);
1097
+ background: var(--gradient-hero);
1098
+ width: 100vw;
1099
+ position: relative;
1100
+ left: 50%;
1101
+ right: 50%;
1102
+ margin-left: -50vw;
1103
+ margin-right: -50vw;
1104
+ margin-top: 0;
1105
+ margin-bottom: 0;
1106
+ }
1107
+
1108
+ .hero h1 {
1109
+ font-size: var(--font-size-4xl);
1110
+ margin-bottom: var(--spacing-md);
1111
+ background: var(--gradient-subtle);
1112
+ background-color:white;
1113
+ -webkit-background-clip: text;
1114
+ -webkit-text-fill-color: transparent;
1115
+ background-clip: text;
1116
+ font-weight: 700;
1117
+ }
1118
+
1119
+ .hero p {
1120
+ font-size: var(--font-size-lg);
1121
+ color: var(--color-text-primary);
1122
+ margin-bottom: var(--spacing-xl);
1123
+ }
1124
+
1125
+ .hero-actions {
1126
+ display: flex;
1127
+ gap: var(--spacing-md);
1128
+ justify-content: center;
1129
+ }
1130
+
1131
+ .features {
1132
+ margin-top: var(--spacing-2xl);
1133
+ }
1134
+
1135
+ .features h2 {
1136
+ text-align: center;
1137
+ font-size: var(--font-size-2xl);
1138
+ margin-bottom: var(--spacing-xl);
1139
+ }
1140
+
1141
+ .feature-grid {
1142
+ display: grid;
1143
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1144
+ gap: var(--spacing-xl);
1145
+ margin-top: var(--spacing-xl);
1146
+ align-items: stretch;
1147
+ }
1148
+
1149
+ .feature-card {
1150
+ display: flex;
1151
+ flex-direction: column;
1152
+ padding: var(--spacing-2xl);
1153
+ background: white;
1154
+ border-radius: var(--radius-xl);
1155
+ text-align: center;
1156
+ transition: all var(--transition-base);
1157
+ cursor: pointer;
1158
+ /*border: 1px solid var(--color-border);*/
1159
+ box-shadow: var(--shadow-sm);
1160
+ height: 100%;
1161
+ }
1162
+
1163
+ .feature-card:hover {
1164
+ transform: translateY(-8px);
1165
+ box-shadow: var(--shadow-xl);
1166
+ /*border-color: var(--color-primary-light);*/
1167
+ }
1168
+
1169
+ .feature-card h3 {
1170
+ font-size: var(--font-size-xl);
1171
+ margin-bottom: var(--spacing-md);
1172
+ transition: color var(--transition-fast);
1173
+ font-weight: 600;
1174
+ }
1175
+
1176
+ .feature-card:hover h3 {
1177
+ color: var(--color-primary);
1178
+ }
1179
+
1180
+ .feature-card p {
1181
+ flex: 1;
1182
+ margin: 0;
1183
+ }
1184
+
1185
+ /* Page wrapper — centered on public shell */
1186
+ .page {
1187
+ max-width: var(--container-max-width);
1188
+ margin: 0 auto;
1189
+ }
1190
+
1191
+ /* On protected shell, page takes full available width — no centering */
1192
+ body.sidebar-enabled .page {
1193
+ max-width: 100%;
1194
+ margin: 0;
1195
+ }
1196
+
1197
+ /* Login Page */
1198
+ .login-page {
1199
+ display: flex;
1200
+ justify-content: center;
1201
+ align-items: center;
1202
+ min-height: 60vh;
1203
+ width: 100%;
1204
+ }
1205
+
1206
+ .login-experience {
1207
+ min-height: calc(100vh - 70px);
1208
+ width: 100%;
1209
+ display: flex;
1210
+ align-items: center;
1211
+ justify-content: center;
1212
+ padding: clamp(1.25rem, 3vw, 2.5rem);
1213
+ }
1214
+
1215
+ .login-shell {
1216
+ width: min(1280px, 100%);
1217
+ display: grid;
1218
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1219
+ align-items: stretch;
1220
+ border-radius: 36px;
1221
+ overflow: hidden;
1222
+ background: rgba(255, 255, 255, 0.94);
1223
+ border: 1px solid rgba(148, 163, 184, 0.2);
1224
+ box-shadow: 0 32px 90px rgba(15, 23, 42, 0.16);
1225
+ }
1226
+
1227
+ .login-showcase {
1228
+ position: relative;
1229
+ overflow: hidden;
1230
+ padding: clamp(2rem, 5vw, 4rem);
1231
+ background:
1232
+ radial-gradient(circle at top left, rgba(16, 185, 129, 0.26), transparent 35%),
1233
+ radial-gradient(circle at bottom right, rgba(59, 130, 246, 0.18), transparent 30%),
1234
+ linear-gradient(145deg, #07111f 0%, #0f172a 55%, #12243d 100%);
1235
+ color: #f8fafc;
1236
+ box-shadow: 0 32px 80px rgba(15, 23, 42, 0.28);
1237
+ display: flex;
1238
+ flex-direction: column;
1239
+ justify-content: space-between;
1240
+ gap: 2rem;
1241
+ }
1242
+
1243
+ .login-showcase__eyebrow,
1244
+ .login-panel__eyebrow {
1245
+ display: inline-flex;
1246
+ align-items: center;
1247
+ gap: 0.5rem;
1248
+ width: fit-content;
1249
+ padding: 0.45rem 0.9rem;
1250
+ border-radius: 999px;
1251
+ font-size: 0.76rem;
1252
+ font-weight: 700;
1253
+ letter-spacing: 0.12em;
1254
+ text-transform: uppercase;
1255
+ }
1256
+
1257
+ .login-showcase__eyebrow {
1258
+ background: rgba(255, 255, 255, 0.08);
1259
+ border: 1px solid rgba(255, 255, 255, 0.14);
1260
+ color: rgba(255, 255, 255, 0.9);
1261
+ }
1262
+
1263
+ .login-showcase__title {
1264
+ margin: 0;
1265
+ max-width: 12ch;
1266
+ font-size: clamp(2.4rem, 5vw, 4.75rem);
1267
+ line-height: 0.98;
1268
+ letter-spacing: -0.05em;
1269
+ color: #ffffff;
1270
+ }
1271
+
1272
+ .login-showcase__copy {
1273
+ margin: 0;
1274
+ max-width: 60ch;
1275
+ font-size: 1.05rem;
1276
+ line-height: 1.75;
1277
+ color: rgba(248, 250, 252, 0.78);
1278
+ }
1279
+
1280
+ .login-showcase__grid {
1281
+ display: grid;
1282
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1283
+ gap: 1.25rem;
1284
+ }
1285
+
1286
+ .login-showcase__card {
1287
+ padding: 1.4rem;
1288
+ border-radius: 24px;
1289
+ background: rgba(255, 255, 255, 0.06);
1290
+ border: 1px solid rgba(255, 255, 255, 0.1);
1291
+ backdrop-filter: blur(14px);
1292
+ }
1293
+
1294
+ .login-showcase__card--accent {
1295
+ background: linear-gradient(180deg, rgba(16, 185, 129, 0.12), rgba(15, 23, 42, 0.1));
1296
+ }
1297
+
1298
+ .login-showcase__card h2 {
1299
+ margin: 0 0 0.85rem;
1300
+ font-size: 1rem;
1301
+ color: #ffffff;
1302
+ }
1303
+
1304
+ .login-showcase__list {
1305
+ margin: 0;
1306
+ padding-left: 1.1rem;
1307
+ color: rgba(241, 245, 249, 0.82);
1308
+ line-height: 1.8;
1309
+ }
1310
+
1311
+ .login-showcase__metrics {
1312
+ display: grid;
1313
+ gap: 0.85rem;
1314
+ }
1315
+
1316
+ .login-showcase__metrics strong {
1317
+ display: block;
1318
+ margin-bottom: 0.2rem;
1319
+ color: #ffffff;
1320
+ }
1321
+
1322
+ .login-showcase__metrics span {
1323
+ color: rgba(241, 245, 249, 0.75);
1324
+ line-height: 1.55;
1325
+ }
1326
+
1327
+ .login-panel {
1328
+ display: flex;
1329
+ flex-direction: column;
1330
+ justify-content: center;
1331
+ padding: clamp(1.75rem, 3vw, 3rem);
1332
+ background:
1333
+ linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(255, 255, 255, 0.98)),
1334
+ linear-gradient(160deg, rgba(16, 185, 129, 0.08), rgba(59, 130, 246, 0.05));
1335
+ min-height: 100%;
1336
+ }
1337
+
1338
+ .login-panel__header h2 {
1339
+ margin: 0.65rem 0 0.6rem;
1340
+ font-size: clamp(1.9rem, 3vw, 2.6rem);
1341
+ line-height: 1.05;
1342
+ letter-spacing: -0.04em;
1343
+ color: #0f172a;
1344
+ }
1345
+
1346
+ .login-panel__header p {
1347
+ margin: 0;
1348
+ color: #475569;
1349
+ line-height: 1.7;
1350
+ }
1351
+
1352
+ .login-panel__eyebrow {
1353
+ background: rgba(16, 185, 129, 0.12);
1354
+ color: #047857;
1355
+ border: 1px solid rgba(16, 185, 129, 0.18);
1356
+ }
1357
+
1358
+ .login-demo-credentials {
1359
+ display: grid;
1360
+ grid-template-columns: repeat(2, minmax(0, 1fr));
1361
+ gap: 0.9rem;
1362
+ margin: 1.5rem 0 1.25rem;
1363
+ }
1364
+
1365
+ .login-demo-credentials__item {
1366
+ padding: 0.95rem 1rem;
1367
+ border-radius: 18px;
1368
+ background: #f8fafc;
1369
+ border: 1px solid #e2e8f0;
1370
+ }
1371
+
1372
+ .login-demo-credentials__item span {
1373
+ display: block;
1374
+ margin-bottom: 0.3rem;
1375
+ font-size: 0.76rem;
1376
+ font-weight: 700;
1377
+ letter-spacing: 0.08em;
1378
+ text-transform: uppercase;
1379
+ color: #64748b;
1380
+ }
1381
+
1382
+ .login-demo-credentials__item strong {
1383
+ color: #0f172a;
1384
+ font-size: 0.98rem;
1385
+ word-break: break-word;
1386
+ }
1387
+
1388
+ .login-alert {
1389
+ margin-bottom: 1rem;
1390
+ }
1391
+
1392
+ .login-alert[hidden] {
1393
+ display: none;
1394
+ }
1395
+
1396
+ .login-form {
1397
+ display: grid;
1398
+ gap: 1.15rem;
1399
+ }
1400
+
1401
+ .login-field {
1402
+ display: grid;
1403
+ gap: 0.55rem;
1404
+ }
1405
+
1406
+ .login-field__meta {
1407
+ display: flex;
1408
+ align-items: center;
1409
+ justify-content: space-between;
1410
+ gap: 1rem;
1411
+ flex-wrap: wrap;
1412
+ }
1413
+
1414
+ .login-field__label {
1415
+ font-size: 0.92rem;
1416
+ font-weight: 700;
1417
+ color: #0f172a;
1418
+ }
1419
+
1420
+ .login-field__demo {
1421
+ font-size: 0.8rem;
1422
+ font-weight: 600;
1423
+ color: #0f766e;
1424
+ }
1425
+
1426
+ .login-form__utility {
1427
+ display: flex;
1428
+ align-items: center;
1429
+ justify-content: space-between;
1430
+ gap: 1rem;
1431
+ flex-wrap: wrap;
1432
+ }
1433
+
1434
+ .login-form__utility-link {
1435
+ color: #0f766e;
1436
+ font-size: 0.92rem;
1437
+ font-weight: 600;
1438
+ text-decoration: none;
1439
+ }
1440
+
1441
+ .login-form__utility-link:hover,
1442
+ .login-form__utility-link:focus-visible {
1443
+ text-decoration: underline;
1444
+ text-underline-offset: 0.18em;
1445
+ }
1446
+
1447
+ .login-panel__footer {
1448
+ margin: 1.15rem 0 0;
1449
+ color: #64748b;
1450
+ font-size: 0.92rem;
1451
+ line-height: 1.65;
1452
+ }
1453
+
1454
+ @media (max-width: 980px) {
1455
+ .login-shell {
1456
+ grid-template-columns: 1fr;
1457
+ }
1458
+
1459
+ .login-showcase__grid,
1460
+ .login-demo-credentials {
1461
+ grid-template-columns: 1fr;
1462
+ }
1463
+ }
1464
+
1465
+ @media (max-width: 640px) {
1466
+ .login-experience {
1467
+ padding: 1rem;
1468
+ }
1469
+
1470
+ .login-shell {
1471
+ border-radius: 24px;
1472
+ }
1473
+
1474
+ .login-showcase__title {
1475
+ max-width: none;
1476
+ }
1477
+
1478
+ .login-form__utility {
1479
+ align-items: flex-start;
1480
+ flex-direction: column;
1481
+ }
1482
+ }
1483
+
1484
+ /* Dashboard Page */
1485
+ .dashboard-container {
1486
+ max-width: 100%;
1487
+ margin: 0;
1488
+ display: grid;
1489
+ gap: 1.5rem;
1490
+ padding: 1.25rem;
1491
+ }
1492
+
1493
+ .dashboard-hero {
1494
+ display: grid;
1495
+ grid-template-columns: minmax(0, 1.35fr) minmax(300px, 0.75fr);
1496
+ gap: 1.5rem;
1497
+ padding: 1.8rem;
1498
+ background:
1499
+ radial-gradient(circle at top left, rgba(16, 185, 129, 0.18), transparent 30%),
1500
+ radial-gradient(circle at bottom right, rgba(59, 130, 246, 0.14), transparent 30%),
1501
+ linear-gradient(140deg, #f8fafc 0%, #eefbf6 48%, #eff6ff 100%);
1502
+ border: 1px solid rgba(148, 163, 184, 0.22);
1503
+ box-shadow: 0 24px 60px rgba(15, 23, 42, 0.08);
1504
+ border-radius: 32px;
1505
+ }
1506
+
1507
+ .dashboard-hero__content,
1508
+ .dashboard-hero__spotlight {
1509
+ display: grid;
1510
+ gap: 1rem;
1511
+ align-content: start;
1512
+ }
1513
+
1514
+ .dashboard-title {
1515
+ font-size: clamp(2.2rem, 5vw, 3.8rem);
1516
+ font-weight: 800;
1517
+ letter-spacing: -0.05em;
1518
+ line-height: 0.95;
1519
+ margin: 0;
1520
+ color: #0f172a;
1521
+ }
1522
+
1523
+ .dashboard-subtitle {
1524
+ font-size: 1.02rem;
1525
+ color: #475569;
1526
+ margin: 0;
1527
+ max-width: 60ch;
1528
+ line-height: 1.7;
1529
+ }
1530
+
1531
+ .dashboard-hero__actions {
1532
+ display: flex;
1533
+ flex-wrap: wrap;
1534
+ gap: 0.85rem;
1535
+ }
1536
+
1537
+ .dashboard-hero__actions > * {
1538
+ min-width: 0;
1539
+ }
1540
+
1541
+ .dashboard-hero__proofs {
1542
+ display: flex;
1543
+ flex-wrap: wrap;
1544
+ gap: 0.65rem;
1545
+ }
1546
+
1547
+ .dashboard-spotlight-card {
1548
+ padding: 1.25rem;
1549
+ background: #0f172a;
1550
+ color: #f8fafc;
1551
+ box-shadow: 0 20px 40px rgba(15, 23, 42, 0.18);
1552
+ }
1553
+
1554
+ .dashboard-popover-copy {
1555
+ padding: 0.95rem 1rem;
1556
+ color: #334155;
1557
+ line-height: 1.65;
1558
+ }
1559
+
1560
+ .dashboard-spotlight-card__label {
1561
+ display: block;
1562
+ font-size: 0.75rem;
1563
+ font-weight: 700;
1564
+ letter-spacing: 0.08em;
1565
+ text-transform: uppercase;
1566
+ color: rgba(167, 243, 208, 0.9);
1567
+ }
1568
+
1569
+ .dashboard-spotlight-card__value {
1570
+ display: block;
1571
+ margin-top: 0.6rem;
1572
+ font-size: 2.6rem;
1573
+ line-height: 1;
1574
+ }
1575
+
1576
+ .dashboard-spotlight-card__copy {
1577
+ margin: 0.7rem 0 0;
1578
+ color: rgba(226, 232, 240, 0.78);
1579
+ line-height: 1.65;
1580
+ }
1581
+
1582
+ .dashboard-kpi-grid {
1583
+ display: grid;
1584
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1585
+ gap: 1rem;
1586
+ }
1587
+
1588
+ .dashboard-kpi-card {
1589
+ display: grid;
1590
+ grid-template-columns: minmax(0, 1fr) auto;
1591
+ gap: 1rem;
1592
+ align-items: center;
1593
+ padding: 1.3rem;
1594
+ box-shadow: 0 16px 36px rgba(15, 23, 42, 0.06);
1595
+ border-radius: 24px;
1596
+ }
1597
+
1598
+ .dashboard-kpi-card__value {
1599
+ display: block;
1600
+ margin-top: 0.5rem;
1601
+ font-size: clamp(1.8rem, 4vw, 2.5rem);
1602
+ line-height: 1;
1603
+ color: #0f172a;
1604
+ }
1605
+
1606
+ .dashboard-kpi-card__copy {
1607
+ margin: 0.65rem 0 0;
1608
+ color: #475569;
1609
+ line-height: 1.6;
1610
+ }
1611
+
1612
+ .dashboard-main-grid,
1613
+ .dashboard-showcase-grid {
1614
+ display: grid;
1615
+ grid-template-columns: minmax(0, 1.2fr) minmax(320px, 0.8fr);
1616
+ gap: 1.5rem;
1617
+ }
1618
+
1619
+ .dashboard-hero,
1620
+ .dashboard-kpi-card,
1621
+ .dashboard-panel,
1622
+ .dashboard-note-card,
1623
+ .dashboard-component-card,
1624
+ .dashboard-metric-card {
1625
+ min-width: 0;
1626
+ }
1627
+
1628
+ .dashboard-panel {
1629
+ padding: 1.4rem;
1630
+ box-shadow: 0 18px 42px rgba(15, 23, 42, 0.06);
1631
+ border-radius: 28px;
1632
+ }
1633
+
1634
+ .dashboard-panel--wide {
1635
+ min-width: 0;
1636
+ }
1637
+
1638
+ .dashboard-panel__header {
1639
+ display: flex;
1640
+ justify-content: space-between;
1641
+ align-items: flex-start;
1642
+ gap: 1rem;
1643
+ margin-bottom: 1.15rem;
1644
+ }
1645
+
1646
+ .dashboard-panel__title {
1647
+ margin: 0;
1648
+ font-size: 1.45rem;
1649
+ line-height: 1.15;
1650
+ color: #0f172a;
1651
+ }
1652
+
1653
+ .dashboard-panel__meta {
1654
+ font-size: 0.9rem;
1655
+ font-weight: 600;
1656
+ color: #475569;
1657
+ }
1658
+
1659
+ .dashboard-panel__header--compact {
1660
+ margin-bottom: 1rem;
1661
+ }
1662
+
1663
+ .dashboard-panel__title--small {
1664
+ margin-top: 0.65rem;
1665
+ font-size: 1.1rem;
1666
+ }
1667
+
1668
+ .dashboard-health-list {
1669
+ display: grid;
1670
+ gap: 1.1rem;
1671
+ }
1672
+
1673
+ .dashboard-health-row {
1674
+ display: grid;
1675
+ gap: 0.7rem;
1676
+ padding: 1rem 0;
1677
+ border-top: 1px solid #e2e8f0;
1678
+ }
1679
+
1680
+ .dashboard-health-row:first-child {
1681
+ border-top: none;
1682
+ padding-top: 0;
1683
+ }
1684
+
1685
+ .dashboard-health-row strong {
1686
+ display: block;
1687
+ margin-bottom: 0.35rem;
1688
+ color: #0f172a;
1689
+ }
1690
+
1691
+ .dashboard-health-row span {
1692
+ color: #64748b;
1693
+ font-size: 0.92rem;
1694
+ line-height: 1.6;
1695
+ }
1696
+
1697
+ .dashboard-panel--showcase {
1698
+ padding-bottom: 1.7rem;
1699
+ }
1700
+
1701
+ .dashboard-panel--embedded {
1702
+ padding: 1rem;
1703
+ }
1704
+
1705
+ .dashboard-content-stack {
1706
+ display: grid;
1707
+ gap: 1rem;
1708
+ align-content: start;
1709
+ }
1710
+
1711
+ .dashboard-note-card {
1712
+ padding: 1.1rem 1.15rem;
1713
+ border-radius: 22px;
1714
+ }
1715
+
1716
+ .dashboard-note-card h3 {
1717
+ margin: 0 0 0.45rem;
1718
+ color: #0f172a;
1719
+ }
1720
+
1721
+ .dashboard-note-card p {
1722
+ margin: 0;
1723
+ color: #475569;
1724
+ line-height: 1.7;
1725
+ }
1726
+
1727
+ .dashboard-component-grid {
1728
+ display: grid;
1729
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
1730
+ gap: 1rem;
1731
+ }
1732
+
1733
+ .dashboard-component-card {
1734
+ padding: 1.2rem;
1735
+ min-height: 180px;
1736
+ border-radius: 22px;
1737
+ }
1738
+
1739
+ .dashboard-signal-lab-card {
1740
+ display: grid;
1741
+ gap: 1rem;
1742
+ }
1743
+
1744
+ .dashboard-signal-lab-grid,
1745
+ .dashboard-data-grid {
1746
+ display: grid;
1747
+ grid-template-columns: repeat(3, minmax(0, 1fr));
1748
+ gap: 0.85rem;
1749
+ }
1750
+
1751
+ .dashboard-data-grid {
1752
+ grid-template-columns: minmax(0, 1.1fr) minmax(300px, 0.9fr);
1753
+ align-items: start;
1754
+ }
1755
+
1756
+ .dashboard-metric-card {
1757
+ padding: 1rem;
1758
+ border-radius: 20px;
1759
+ display: grid;
1760
+ gap: 0.7rem;
1761
+ }
1762
+
1763
+ .dashboard-metric-card__value {
1764
+ font-size: 1.9rem;
1765
+ line-height: 1;
1766
+ color: #0f172a;
1767
+ }
1768
+
1769
+ .dashboard-component-card h3 {
1770
+ margin: 0.9rem 0 0.5rem;
1771
+ color: #0f172a;
1772
+ }
1773
+
1774
+ .dashboard-component-card p {
1775
+ margin: 0;
1776
+ color: #475569;
1777
+ line-height: 1.7;
1778
+ }
1779
+
1780
+ .dashboard-actions {
1781
+ margin-top: var(--spacing-xl);
1782
+ }
1783
+
1784
+ @media (max-width: 1024px) {
1785
+ .dashboard-hero,
1786
+ .dashboard-main-grid,
1787
+ .dashboard-showcase-grid,
1788
+ .dashboard-data-grid {
1789
+ grid-template-columns: 1fr;
1790
+ }
1791
+ }
1792
+
1793
+ @media (max-width: 768px) {
1794
+ .dashboard-container {
1795
+ padding: 0.75rem;
1796
+ gap: 1rem;
1797
+ }
1798
+
1799
+ .dashboard-hero {
1800
+ padding: 1rem;
1801
+ gap: 1rem;
1802
+ border-radius: 22px;
1803
+ }
1804
+
1805
+ .dashboard-title {
1806
+ font-size: clamp(2rem, 10vw, 2.8rem);
1807
+ }
1808
+
1809
+ .dashboard-subtitle {
1810
+ font-size: 0.98rem;
1811
+ line-height: 1.65;
1812
+ }
1813
+
1814
+ .dashboard-hero__actions {
1815
+ display: grid;
1816
+ grid-template-columns: 1fr;
1817
+ }
1818
+
1819
+ .dashboard-hero__actions nc-button {
1820
+ width: 100%;
1821
+ }
1822
+
1823
+ .dashboard-hero__actions nc-a {
1824
+ width: 100%;
1825
+ --nc-a-host-width: 100%;
1826
+ --nc-a-width: 100%;
1827
+ }
1828
+
1829
+ .dashboard-hero__proofs {
1830
+ gap: 0.5rem;
1831
+ }
1832
+
1833
+ .dashboard-kpi-grid {
1834
+ grid-template-columns: 1fr;
1835
+ }
1836
+
1837
+ .dashboard-kpi-card {
1838
+ grid-template-columns: 1fr;
1839
+ padding: 1rem;
1840
+ }
1841
+
1842
+ .dashboard-signal-lab-grid {
1843
+ grid-template-columns: 1fr;
1844
+ }
1845
+
1846
+ .dashboard-data-grid {
1847
+ grid-template-columns: 1fr;
1848
+ }
1849
+
1850
+ .dashboard-panel,
1851
+ .dashboard-component-card,
1852
+ .dashboard-note-card,
1853
+ .dashboard-metric-card {
1854
+ padding: 1rem;
1855
+ border-radius: 20px;
1856
+ }
1857
+
1858
+ .dashboard-panel--embedded {
1859
+ padding: 0.85rem;
1860
+ }
1861
+
1862
+ .dashboard-panel__header {
1863
+ flex-direction: column;
1864
+ }
1865
+ }
1866
+
1867
+ @media (max-width: 480px) {
1868
+ .dashboard-container {
1869
+ padding: 0.5rem;
1870
+ }
1871
+
1872
+ .dashboard-title {
1873
+ font-size: clamp(1.8rem, 11vw, 2.4rem);
1874
+ }
1875
+
1876
+ .dashboard-hero,
1877
+ .dashboard-kpi-card,
1878
+ .dashboard-panel {
1879
+ border-radius: 18px;
1880
+ }
1881
+ }
1882
+
1883
+ /* Error Page */
1884
+ .error-page {
1885
+ text-align: center;
1886
+ padding: var(--spacing-2xl);
1887
+ }
1888
+
1889
+ .error-page h1 {
1890
+ font-size: 4rem;
1891
+ color: var(--color-error);
1892
+ margin-bottom: var(--spacing-md);
1893
+ }
1894
+
1895
+ .error-page h1 {
1896
+ font-size: 4rem;
1897
+ color: var(--color-error);
1898
+ margin-bottom: var(--spacing-md);
1899
+ }
1900
+
1901
+ /* User Detail Page */
1902
+ .user-detail-header {
1903
+ margin-bottom: var(--spacing-xl);
1904
+ }
1905
+
1906
+ .user-detail-header h1 {
1907
+ margin-bottom: var(--spacing-xs);
1908
+ }
1909
+
1910
+ .user-detail-header p {
1911
+ color: var(--color-text-secondary);
1912
+ }
1913
+
1914
+ .user-details {
1915
+ background: var(--color-bg-secondary);
1916
+ padding: var(--spacing-xl);
1917
+ border-radius: var(--radius-lg);
1918
+ margin-bottom: var(--spacing-xl);
1919
+ }
1920
+
1921
+ .detail-row {
1922
+ display: flex;
1923
+ justify-content: space-between;
1924
+ padding: var(--spacing-sm) 0;
1925
+ border-bottom: 1px solid var(--color-border);
1926
+ }
1927
+
1928
+ .detail-row:last-child {
1929
+ border-bottom: none;
1930
+ }
1931
+
1932
+ .detail-row .label {
1933
+ font-weight: 600;
1934
+ color: var(--color-text);
1935
+ }
1936
+
1937
+ .detail-row .value {
1938
+ color: var(--color-text-secondary);
1939
+ }
1940
+
1941
+ .user-actions {
1942
+ display: flex;
1943
+ gap: var(--spacing-md);
1944
+ }
1945
+
1946
+ .user-actions {
1947
+ display: flex;
1948
+ gap: var(--spacing-md);
1949
+ }
1950
+
1951
+ /* About Page */
1952
+ .about-hero {
1953
+ text-align: center;
1954
+ padding: var(--spacing-2xl) 0;
1955
+ margin-bottom: var(--spacing-xl);
1956
+ }
1957
+
1958
+ .about-hero h1 {
1959
+ font-size: var(--font-size-3xl);
1960
+ margin-bottom: var(--spacing-md);
1961
+ }
1962
+
1963
+ .about-hero .lead {
1964
+ font-size: var(--font-size-lg);
1965
+ color: var(--color-text-secondary);
1966
+ }
1967
+
1968
+ .about-content {
1969
+ max-width: 800px;
1970
+ margin: 0 auto;
1971
+ }
1972
+
1973
+ .about-section {
1974
+ margin-bottom: var(--spacing-2xl);
1975
+ }
1976
+
1977
+ .about-section h2 {
1978
+ font-size: var(--font-size-2xl);
1979
+ margin-bottom: var(--spacing-lg);
1980
+ color: var(--color-primary);
1981
+ }
1982
+
1983
+ .feature-list {
1984
+ list-style: none;
1985
+ padding: 0;
1986
+ }
1987
+
1988
+ .feature-list li {
1989
+ padding: var(--spacing-sm) 0;
1990
+ font-size: var(--font-size-lg);
1991
+ }
1992
+
1993
+ .tech-stack {
1994
+ display: grid;
1995
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
1996
+ gap: var(--spacing-lg);
1997
+ margin-top: var(--spacing-lg);
1998
+ }
1999
+
2000
+ .tech-item {
2001
+ padding: var(--spacing-lg);
2002
+ background: var(--color-bg-secondary);
2003
+ border-radius: var(--radius-lg);
2004
+ text-align: center;
2005
+ transition: all var(--transition-base);
2006
+ }
2007
+
2008
+ .tech-item:hover {
2009
+ transform: translateY(-5px);
2010
+ box-shadow: var(--shadow-md);
2011
+ }
2012
+
2013
+ .tech-item h3 {
2014
+ color: var(--color-primary);
2015
+ margin-bottom: var(--spacing-sm);
2016
+ }
2017
+
2018
+ .cta-section {
2019
+ text-align: center;
2020
+ padding: var(--spacing-2xl);
2021
+ background: var(--color-bg-secondary);
2022
+ border-radius: var(--radius-lg);
2023
+ }
2024
+
2025
+ .cta-section h2 {
2026
+ margin-bottom: var(--spacing-md);
2027
+ }
2028
+
2029
+ .cta-buttons {
2030
+ display: flex;
2031
+ gap: var(--spacing-md);
2032
+ justify-content: center;
2033
+ margin-top: var(--spacing-xl);
2034
+ }
2035
+
2036
+ /* Utility Classes */
2037
+ .text-center {
2038
+ text-align: center;
2039
+ }
2040
+
2041
+ .text-muted {
2042
+ color: var(--color-text-secondary);
2043
+ }
2044
+
2045
+ .mt-sm { margin-top: var(--spacing-sm); }
2046
+ .mt-md { margin-top: var(--spacing-md); }
2047
+ .mt-lg { margin-top: var(--spacing-lg); }
2048
+ .mt-xl { margin-top: var(--spacing-xl); }
2049
+
2050
+ .mb-sm { margin-bottom: var(--spacing-sm); }
2051
+ .mb-md { margin-bottom: var(--spacing-md); }
2052
+ .mb-lg { margin-bottom: var(--spacing-lg); }
2053
+ .mb-xl { margin-bottom: var(--spacing-xl); }
2054
+
2055
+ .hidden {
2056
+ display: none !important;
2057
+ }
2058
+
2059
+ /* Responsive */
2060
+ @media (max-width: 768px) {
2061
+
2062
+ }
2063
+
2064
+ @media (min-width: 769px) {
2065
+
2066
+ }
2067
+
2068
+ /* ============================================
2069
+ HOME PAGE STYLES
2070
+ ============================================ */
2071
+
2072
+ /* Hero Section */
2073
+ .hero {
2074
+ background: #0f172a;
2075
+ color: white;
2076
+ text-align: center;
2077
+ position: relative;
2078
+ overflow: hidden;
2079
+ width: 100%;
2080
+ left: auto;
2081
+ right: auto;
2082
+ margin-left: 0;
2083
+ margin-right: 0;
2084
+ padding: 6rem 2rem 5rem;
2085
+ box-sizing: border-box;
2086
+ }
2087
+
2088
+ .hero::before {
2089
+ content: '';
2090
+ position: absolute;
2091
+ top: 0; left: 0; right: 0; bottom: 0;
2092
+ background:
2093
+ radial-gradient(circle at 20% 20%, rgba(16, 185, 129, 0.1) 0%, transparent 40%),
2094
+ radial-gradient(circle at 80% 80%, rgba(59, 130, 246, 0.08) 0%, transparent 40%);
2095
+ pointer-events: none;
2096
+ }
2097
+
2098
+ .hero-inner {
2099
+ position: relative;
2100
+ z-index: 1;
2101
+ max-width: 760px;
2102
+ margin: 0 auto;
2103
+ display: flex;
2104
+ flex-direction: column;
2105
+ align-items: center;
2106
+ gap: 2rem;
2107
+ }
2108
+
2109
+ .hero-badge {
2110
+ display: inline-block;
2111
+ background: rgba(16, 185, 129, 0.12);
2112
+ border: 1px solid rgba(16, 185, 129, 0.25);
2113
+ padding: 0.4rem 1.1rem;
2114
+ border-radius: 6px;
2115
+ font-size: 0.78rem;
2116
+ font-weight: 600;
2117
+ color: #10b981;
2118
+ text-transform: uppercase;
2119
+ letter-spacing: 0.8px;
2120
+ }
2121
+
2122
+ .hero h1 {
2123
+ font-size: clamp(2.75rem, 5vw, 3.75rem);
2124
+ font-weight: 800;
2125
+ letter-spacing: -2px;
2126
+ line-height: 1.12;
2127
+ color: #ffffff;
2128
+ margin: 0;
2129
+ }
2130
+
2131
+ .hero-tagline {
2132
+ font-size: clamp(1rem, 2vw, 1.15rem);
2133
+ line-height: 1.7;
2134
+ color: rgba(255, 255, 255, 0.65);
2135
+ max-width: 600px;
2136
+ margin: 0;
2137
+ }
2138
+
2139
+ .hero-actions {
2140
+ display: flex;
2141
+ gap: 1rem;
2142
+ justify-content: center;
2143
+ flex-wrap: wrap;
2144
+ }
2145
+
2146
+ .hero-btn {
2147
+ display: inline-flex;
2148
+ align-items: center;
2149
+ gap: 0.4rem;
2150
+ padding: 0.75rem 1.75rem;
2151
+ border-radius: 8px;
2152
+ font-size: 0.95rem;
2153
+ font-weight: 600;
2154
+ text-decoration: none;
2155
+ white-space: nowrap;
2156
+ transition: transform 0.2s ease, box-shadow 0.2s ease, opacity 0.2s ease;
2157
+ cursor: pointer;
2158
+ border: none;
2159
+ }
2160
+
2161
+ .hero-btn-primary {
2162
+ background: linear-gradient(135deg, #10b981, #3b82f6);
2163
+ color: #fff;
2164
+ box-shadow: 0 2px 12px rgba(16, 185, 129, 0.35);
2165
+ }
2166
+
2167
+ .hero-btn-primary:hover {
2168
+ transform: translateY(-2px);
2169
+ box-shadow: 0 6px 20px rgba(16, 185, 129, 0.45);
2170
+ opacity: 0.92;
2171
+ color: #fff;
2172
+ }
2173
+
2174
+ .hero-btn-ghost {
2175
+ background: transparent;
2176
+ color: rgba(255, 255, 255, 0.85);
2177
+ border: 1.5px solid rgba(255, 255, 255, 0.25);
2178
+ }
2179
+
2180
+ .hero-btn-ghost:hover {
2181
+ transform: translateY(-2px);
2182
+ border-color: rgba(255, 255, 255, 0.5);
2183
+ color: #fff;
2184
+ background: rgba(255, 255, 255, 0.06);
2185
+ }
2186
+
2187
+ .hero-stats {
2188
+ display: flex;
2189
+ gap: 3rem;
2190
+ justify-content: center;
2191
+ flex-wrap: wrap;
2192
+ padding-top: 2.5rem;
2193
+ border-top: 1px solid rgba(255, 255, 255, 0.1);
2194
+ width: 100%;
2195
+ }
2196
+
2197
+ .stat-item {
2198
+ text-align: center;
2199
+ }
2200
+
2201
+ .stat-number {
2202
+ font-size: 2rem;
2203
+ font-weight: 800;
2204
+ display: block;
2205
+ margin-bottom: 0.25rem;
2206
+ background: linear-gradient(135deg, #10b981, #3b82f6);
2207
+ -webkit-background-clip: text;
2208
+ -webkit-text-fill-color: transparent;
2209
+ background-clip: text;
2210
+ }
2211
+
2212
+ .stat-label {
2213
+ font-size: 0.72rem;
2214
+ text-transform: uppercase;
2215
+ letter-spacing: 1.2px;
2216
+ color: rgba(255, 255, 255, 0.45);
2217
+ font-weight: 600;
2218
+ }
2219
+
2220
+ /* Shared section layout helpers */
2221
+ .section-head {
2222
+ text-align: center;
2223
+ max-width: 640px;
2224
+ margin: 0 auto 3.5rem;
2225
+ }
2226
+
2227
+ .section-head h2 {
2228
+ font-size: clamp(1.9rem, 3.5vw, 2.5rem);
2229
+ font-weight: 800;
2230
+ letter-spacing: -0.75px;
2231
+ line-height: 1.2;
2232
+ color: #0f172a;
2233
+ margin: 0 0 0.75rem;
2234
+ }
2235
+
2236
+ .section-head p,
2237
+ .section-head .subtitle,
2238
+ .section-head .section-subtitle {
2239
+ font-size: 1.05rem;
2240
+ color: #64748b;
2241
+ line-height: 1.6;
2242
+ margin: 0;
2243
+ }
2244
+
2245
+ /* Why NativeCore Section */
2246
+ .why-section {
2247
+ background: #ffffff;
2248
+ padding: 6rem 2rem;
2249
+ }
2250
+
2251
+ .why-cards {
2252
+ display: flex;
2253
+ flex-direction: row;
2254
+ gap: 2rem;
2255
+ justify-content: center;
2256
+ max-width: 1000px;
2257
+ margin: 0 auto;
2258
+ flex-wrap: wrap;
2259
+ }
2260
+
2261
+ .comparison-card {
2262
+ flex: 1;
2263
+ min-width: 280px;
2264
+ max-width: 460px;
2265
+ padding: 2.5rem;
2266
+ border-radius: 12px;
2267
+ background: white;
2268
+ border: 1px solid #e2e8f0;
2269
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
2270
+ transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
2271
+ }
2272
+
2273
+ .comparison-card:hover {
2274
+ transform: translateY(-4px);
2275
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.09);
2276
+ border-color: #cbd5e1;
2277
+ }
2278
+
2279
+ .comparison-card .card-icon {
2280
+ font-size: 2.25rem;
2281
+ text-align: center;
2282
+ display: block;
2283
+ margin-bottom: 1rem;
2284
+ }
2285
+
2286
+ .comparison-card h3 {
2287
+ text-align: center;
2288
+ font-size: 1.4rem;
2289
+ font-weight: 700;
2290
+ margin: 0 0 1.75rem;
2291
+ color: #0f172a;
2292
+ }
2293
+
2294
+ .comparison-card .feature-list {
2295
+ list-style: none;
2296
+ padding: 0;
2297
+ margin: 0;
2298
+ display: flex;
2299
+ flex-direction: column;
2300
+ gap: 0.9rem;
2301
+ }
2302
+
2303
+ .comparison-card .feature-list li {
2304
+ padding-left: 1.4rem;
2305
+ position: relative;
2306
+ font-size: 0.97rem;
2307
+ color: #475569;
2308
+ line-height: 1.55;
2309
+ }
2310
+
2311
+ .comparison-card .feature-list li::before {
2312
+ content: "•";
2313
+ position: absolute;
2314
+ left: 0;
2315
+ font-weight: bold;
2316
+ line-height: 1.55;
2317
+ }
2318
+
2319
+ .comparison-card.problem .feature-list li::before { color: #ef4444; }
2320
+ .comparison-card.solution .feature-list li::before { color: #10b981; }
2321
+
2322
+ /* Features Section */
2323
+ .features-section {
2324
+ padding: 6rem 2rem;
2325
+ background: #f8fafc;
2326
+ text-align: center;
2327
+ }
2328
+
2329
+ .features-section .section-head h2 {
2330
+ color: #0f172a;
2331
+ }
2332
+
2333
+ .features-section .subtitle {
2334
+ text-align: center;
2335
+ font-size: 1.05rem;
2336
+ color: #64748b;
2337
+ max-width: 600px;
2338
+ margin: 0.5rem auto 0;
2339
+ line-height: 1.6;
2340
+ }
2341
+
2342
+ .features-grid {
2343
+ display: grid;
2344
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
2345
+ gap: 1.5rem;
2346
+ max-width: 1200px;
2347
+ margin: 0 auto;
2348
+ }
2349
+
2350
+ .feature-card {
2351
+ padding: 2rem;
2352
+ background: white;
2353
+ border-radius: 10px;
2354
+ border: 1px solid #e2e8f0;
2355
+ text-align: left;
2356
+ transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease;
2357
+ }
2358
+
2359
+ .feature-card:hover {
2360
+ transform: translateY(-3px);
2361
+ box-shadow: 0 6px 20px rgba(0, 0, 0, 0.07);
2362
+ border-color: #cbd5e1;
2363
+ }
2364
+
2365
+ .feature-icon {
2366
+ font-size: 2rem;
2367
+ display: block;
2368
+ margin-bottom: 1rem;
2369
+ }
2370
+
2371
+ .feature-card h3 {
2372
+ font-size: 1.05rem;
2373
+ font-weight: 700;
2374
+ margin: 0 0 0.5rem;
2375
+ color: #0f172a;
2376
+ }
2377
+
2378
+ .feature-card p {
2379
+ font-size: 0.9rem;
2380
+ line-height: 1.65;
2381
+ color: #64748b;
2382
+ margin: 0;
2383
+ }
2384
+
2385
+ /* Comparison Table Section */
2386
+ .comparison-section {
2387
+ padding: 6rem 2rem;
2388
+ background: #ffffff;
2389
+ text-align: center;
2390
+ }
2391
+
2392
+ .comparison-section .section-head h2 {
2393
+ color: #0f172a;
2394
+ }
2395
+
2396
+ .comparison-section .subtitle {
2397
+ text-align: center;
2398
+ font-size: 1.05rem;
2399
+ color: #64748b;
2400
+ max-width: 600px;
2401
+ margin: 0.5rem auto 0;
2402
+ line-height: 1.6;
2403
+ }
2404
+
2405
+ .comparison-table {
2406
+ max-width: 1100px;
2407
+ margin: 0 auto;
2408
+ overflow-x: auto;
2409
+ }
2410
+
2411
+ .comparison-table table {
2412
+ width: 100%;
2413
+ border-collapse: collapse;
2414
+ background: white;
2415
+ border-radius: 10px;
2416
+ overflow: hidden;
2417
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06), 0 0 0 1px #e2e8f0;
2418
+ }
2419
+
2420
+ .comparison-table th {
2421
+ background: #0f172a;
2422
+ color: white;
2423
+ padding: 1rem 1.25rem;
2424
+ text-align: left;
2425
+ font-weight: 600;
2426
+ font-size: 0.85rem;
2427
+ text-transform: uppercase;
2428
+ letter-spacing: 0.5px;
2429
+ }
2430
+
2431
+ .comparison-table td {
2432
+ padding: 1rem 1.25rem;
2433
+ border-bottom: 1px solid #f1f5f9;
2434
+ color: #334155;
2435
+ font-size: 0.95rem;
2436
+ }
2437
+
2438
+ .comparison-table tbody tr:last-child td { border-bottom: none; }
2439
+ .comparison-table tbody tr:hover { background: #f8fafc; }
2440
+
2441
+ .framework-name { font-weight: 700; color: #667eea; }
2442
+ .check { color: #10b981; font-weight: bold; margin-right: 0.4rem; }
2443
+ .cross { color: #ef4444; margin-right: 0.4rem; opacity: 0.7; }
2444
+
2445
+ /* Responsive */
2446
+ @media (max-width: 768px) {
2447
+ .hero { padding: 4rem 1.5rem 3.5rem; }
2448
+ .hero-stats { gap: 2rem; }
2449
+ .why-section,
2450
+ .features-section,
2451
+ .comparison-section { padding: 4rem 1.25rem; }
2452
+ .why-cards { gap: 1.25rem; }
2453
+ .comparison-card { max-width: 100%; }
2454
+ .features-grid { grid-template-columns: 1fr; gap: 1rem; }
2455
+ .comparison-table {
2456
+ overflow: visible;
2457
+ }
2458
+
2459
+ .comparison-table table,
2460
+ .comparison-table thead,
2461
+ .comparison-table tbody,
2462
+ .comparison-table tr,
2463
+ .comparison-table th,
2464
+ .comparison-table td {
2465
+ display: block;
2466
+ width: 100%;
2467
+ }
2468
+
2469
+ .comparison-table thead {
2470
+ display: none;
2471
+ }
2472
+
2473
+ .comparison-table table {
2474
+ background: transparent;
2475
+ box-shadow: none;
2476
+ border-radius: 0;
2477
+ }
2478
+
2479
+ .comparison-table tbody {
2480
+ display: grid;
2481
+ gap: 1rem;
2482
+ }
2483
+
2484
+ .comparison-table tr {
2485
+ background: white;
2486
+ border: 1px solid #e2e8f0;
2487
+ border-radius: 14px;
2488
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.06);
2489
+ padding: 0.35rem 0;
2490
+ text-align: left;
2491
+ }
2492
+
2493
+ .comparison-table td {
2494
+ display: grid;
2495
+ grid-template-columns: minmax(92px, 120px) minmax(0, 1fr);
2496
+ gap: 0.75rem;
2497
+ align-items: start;
2498
+ padding: 0.65rem 1rem;
2499
+ border-bottom: 1px solid #f1f5f9;
2500
+ font-size: 0.92rem;
2501
+ }
2502
+
2503
+ .comparison-table td:last-child {
2504
+ border-bottom: none;
2505
+ }
2506
+
2507
+ .comparison-table td::before {
2508
+ content: attr(data-label);
2509
+ font-size: 0.72rem;
2510
+ font-weight: 700;
2511
+ letter-spacing: 0.04em;
2512
+ text-transform: uppercase;
2513
+ color: #64748b;
2514
+ }
2515
+ }
2516
+
2517
+ @keyframes metallic-shimmer {
2518
+ 0% {
2519
+ transform: translateX(-100%) translateY(-100%) rotate(45deg);
2520
+ }
2521
+ 100% {
2522
+ transform: translateX(100%) translateY(100%) rotate(45deg);
2523
+ }
2524
+ }
2525
+
2526
+ .hero-content {
2527
+ max-width: 900px;
2528
+ margin: 0 auto;
2529
+ }
2530
+
2531
+ .hero-badge {
2532
+ display: inline-block;
2533
+ background: rgba(16, 185, 129, 0.12);
2534
+ padding: 0.4rem 1rem;
2535
+ border-radius: 6px;
2536
+ font-size: 0.8rem;
2537
+ font-weight: 600;
2538
+ margin-bottom: 1rem;
2539
+ color: #10b981;
2540
+ text-transform: uppercase;
2541
+ letter-spacing: 0.5px;
2542
+ }
2543
+
2544
+ .hero h1 {
2545
+ font-size: clamp(2.5rem, 5vw, 3.5rem);
2546
+ font-weight: 800;
2547
+ margin-bottom: 1rem;
2548
+ letter-spacing: -1.5px;
2549
+ line-height: 1.15;
2550
+ color: #ffffff;
2551
+ }
2552
+
2553
+ .hero-tagline {
2554
+ font-size: clamp(1rem, 2vw, 1.15rem);
2555
+ margin-bottom: 1.5rem;
2556
+ line-height: 1.6;
2557
+ color: rgba(255, 255, 255, 0.7);
2558
+ max-width: 650px;
2559
+ margin-left: auto;
2560
+ margin-right: auto;
2561
+ }
2562
+
2563
+ .hero-actions {
2564
+ display: flex;
2565
+ gap: 1rem;
2566
+ justify-content: center;
2567
+ flex-wrap: wrap;
2568
+ margin-bottom: 2.5rem;
2569
+ }
2570
+
2571
+ .hero-stats {
2572
+ display: flex;
2573
+ gap: 2.5rem;
2574
+ justify-content: center;
2575
+ flex-wrap: wrap;
2576
+ padding-top: 2rem;
2577
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
2578
+ }
2579
+
2580
+ .stat-item {
2581
+ text-align: center;
2582
+ }
2583
+
2584
+ .stat-number {
2585
+ font-size: 2rem;
2586
+ font-weight: 800;
2587
+ display: block;
2588
+ margin-bottom: 0.25rem;
2589
+ background: linear-gradient(135deg, #10b981, #3b82f6);
2590
+ -webkit-background-clip: text;
2591
+ -webkit-text-fill-color: transparent;
2592
+ background-clip: text;
2593
+ }
2594
+
2595
+ .stat-label {
2596
+ font-size: 0.75rem;
2597
+ text-transform: uppercase;
2598
+ letter-spacing: 1px;
2599
+ color: rgba(255, 255, 255, 0.5);
2600
+ font-weight: 600;
2601
+ }
2602
+
2603
+ /* Problem/Solution Section */
2604
+ .problem-solution {
2605
+ padding: 5rem 2rem;
2606
+ position: relative;
2607
+ background: linear-gradient(180deg, #f9fafb 0%, #ffffff 100%);
2608
+ }
2609
+
2610
+ .problem-solution::before {
2611
+ content: '';
2612
+ position: absolute;
2613
+ top: 0;
2614
+ left: 0;
2615
+ right: 0;
2616
+ bottom: 0;
2617
+ background:
2618
+ radial-gradient(circle at 10% 20%, rgba(102, 126, 234, 0.05) 0%, transparent 30%),
2619
+ radial-gradient(circle at 90% 80%, rgba(118, 75, 162, 0.05) 0%, transparent 30%);
2620
+ pointer-events: none;
2621
+ }
2622
+
2623
+ .problem-box, .solution-box {
2624
+ padding: 2.5rem;
2625
+ border-radius: var(--radius-xl);
2626
+ background: white;
2627
+ box-shadow: 0 4px 20px rgba(0,0,0,0.08);
2628
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
2629
+ }
2630
+
2631
+ .problem-box:hover, .solution-box:hover {
2632
+ transform: translateY(-4px);
2633
+ box-shadow: 0 8px 30px rgba(0,0,0,0.12);
2634
+ }
2635
+
2636
+ .problem-box {
2637
+ border-left: 4px solid var(--danger-color);
2638
+ }
2639
+
2640
+ .solution-box {
2641
+ border-left: 4px solid var(--success-color);
2642
+ }
2643
+
2644
+ .box-header {
2645
+ display: flex;
2646
+ align-items: center;
2647
+ gap: 1rem;
2648
+ margin-bottom: 1.5rem;
2649
+ }
2650
+
2651
+ .icon-badge {
2652
+ display: inline-flex;
2653
+ align-items: center;
2654
+ justify-content: center;
2655
+ width: 48px;
2656
+ height: 48px;
2657
+ border-radius: 12px;
2658
+ font-size: 24px;
2659
+ flex-shrink: 0;
2660
+ }
2661
+
2662
+ .icon-badge.danger {
2663
+ background: linear-gradient(135deg, rgba(239, 68, 68, 0.1) 0%, rgba(220, 38, 38, 0.15) 100%);
2664
+ }
2665
+
2666
+ .icon-badge.success {
2667
+ background: linear-gradient(135deg, rgba(34, 197, 94, 0.1) 0%, rgba(22, 163, 74, 0.15) 100%);
2668
+ }
2669
+
2670
+ .box-header h3 {
2671
+ font-size: 1.5rem;
2672
+ margin: 0;
2673
+ color: var(--text-primary);
2674
+ font-weight: 700;
2675
+ }
2676
+
2677
+ .feature-list {
2678
+ list-style: none;
2679
+ padding: 0;
2680
+ margin: 0;
2681
+ display: flex;
2682
+ flex-direction: column;
2683
+ gap: 1rem;
2684
+ }
2685
+
2686
+ .feature-list li {
2687
+ padding: 0;
2688
+ color: var(--text-secondary);
2689
+ line-height: 1.7;
2690
+ font-size: 0.95rem;
2691
+ }
2692
+
2693
+ .feature-list li strong {
2694
+ color: var(--text-primary);
2695
+ font-weight: 600;
2696
+ }
2697
+
2698
+ /* Features Grid */
2699
+ .features-section {
2700
+ display:flex;
2701
+ flex-direction:column;
2702
+ justify-content: center;
2703
+ align-items:center;
2704
+ padding: 4rem 2rem;
2705
+ width: 100%;
2706
+ background: #ffffff;
2707
+ position: relative;
2708
+ overflow: hidden;
2709
+ }
2710
+
2711
+ .features-section::before {
2712
+ content: '';
2713
+ position: absolute;
2714
+ top: 0;
2715
+ left: 0;
2716
+ right: 0;
2717
+ bottom: 0;
2718
+ background:
2719
+ radial-gradient(circle at 10% 20%, rgba(16, 185, 129, 0.03) 0%, transparent 50%);
2720
+ pointer-events: none;
2721
+ }
2722
+
2723
+ .features-section::after {
2724
+ content: '';
2725
+ position: absolute;
2726
+ top: -50%;
2727
+ left: -50%;
2728
+ width: 200%;
2729
+ height: 200%;
2730
+ background: linear-gradient(
2731
+ 90deg,
2732
+ transparent 0%,
2733
+ transparent 45%,
2734
+ rgba(255, 255, 255, 0.08) 50%,
2735
+ transparent 55%,
2736
+ transparent 100%
2737
+ );
2738
+ animation: metallic-shimmer 15s ease-in-out infinite;
2739
+ pointer-events: none;
2740
+ z-index: 0;
2741
+ }
2742
+
2743
+ .features-section > * {
2744
+ position: relative;
2745
+ z-index: 1;
2746
+ width: 100%;
2747
+ max-width: 1400px;
2748
+ margin: 0 auto;
2749
+ }
2750
+
2751
+ .comparison-section {
2752
+ display:flex;
2753
+ flex-direction:column;
2754
+ justify-content: center;
2755
+ align-items:center;
2756
+ padding: 4rem 2rem;
2757
+ width: 100%;
2758
+ position: relative;
2759
+ background: #f8fafc;
2760
+ }
2761
+
2762
+ .comparison-section::before {
2763
+ content: none;
2764
+ }
2765
+
2766
+ .comparison-section > * {
2767
+ position: relative;
2768
+ z-index: 1;
2769
+ max-width: 1400px;
2770
+ margin: 0 auto;
2771
+ }
2772
+
2773
+ .features-section h2, .comparison-section h2 {
2774
+ font-size: clamp(2rem, 4vw, 2.5rem);
2775
+ text-align: center;
2776
+ margin-bottom: 0.75rem;
2777
+ font-weight: 800;
2778
+ }
2779
+
2780
+ .features-section h2 {
2781
+ color: white;
2782
+ }
2783
+
2784
+ .comparison-section h2 {
2785
+ color: var(--text);
2786
+ }
2787
+
2788
+ .features-section .subtitle {
2789
+ text-align: center;
2790
+ font-size: 1.1rem;
2791
+ color: rgba(255, 255, 255, 0.9);
2792
+ margin-bottom: 3rem;
2793
+ max-width: 700px;
2794
+ margin-left: auto;
2795
+ margin-right: auto;
2796
+ }
2797
+
2798
+ .comparison-section .subtitle {
2799
+ text-align: center;
2800
+ font-size: 1.1rem;
2801
+ color: var(--text-secondary);
2802
+ margin-bottom: 3rem;
2803
+ max-width: 700px;
2804
+ margin-left: auto;
2805
+ margin-right: auto;
2806
+ }
2807
+
2808
+ .features-grid {
2809
+ display: grid;
2810
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
2811
+ gap: 1.5rem;
2812
+ width: 100%;
2813
+ min-width: 0;
2814
+ }
2815
+
2816
+ .feature-card {
2817
+ box-sizing: border-box;
2818
+ min-width: 0;
2819
+ padding: 1.75rem;
2820
+ background: white;
2821
+ border-radius: 8px;
2822
+ transition: all 0.2s ease;
2823
+ border: 1px solid #e2e8f0;
2824
+ }
2825
+
2826
+ .feature-card:hover {
2827
+ transform: translateY(-2px);
2828
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06);
2829
+ border-color: #cbd5e1;
2830
+ }
2831
+
2832
+ .feature-icon {
2833
+ font-size: 2.5rem;
2834
+ margin-bottom: 1rem;
2835
+ display: block;
2836
+ }
2837
+
2838
+ .feature-card h3 {
2839
+ font-size: 1.25rem;
2840
+ margin-bottom: 0.75rem;
2841
+ font-weight: 700;
2842
+ }
2843
+
2844
+ .feature-card p {
2845
+ color: var(--text-secondary);
2846
+ line-height: 1.6;
2847
+ margin: 0;
2848
+ }
2849
+
2850
+ /* Comparison Table */
2851
+ .comparison-table {
2852
+ overflow-x: auto;
2853
+ margin-top: 2rem;
2854
+ }
2855
+
2856
+ .comparison-table table {
2857
+ width: 100%;
2858
+ border-collapse: separate;
2859
+ border-spacing: 0;
2860
+ background: rgba(255,255,255,0.95);
2861
+ backdrop-filter: blur(10px);
2862
+ border-radius: var(--radius-lg);
2863
+ overflow: hidden;
2864
+ box-shadow: 0 4px 20px rgba(0,0,0,0.08);
2865
+ }
2866
+
2867
+ .comparison-table th {
2868
+ background: #0f172a;
2869
+ color: white;
2870
+ padding: 1rem 1.25rem;
2871
+ text-align: left;
2872
+ font-weight: 600;
2873
+ font-size: 0.9rem;
2874
+ text-transform: uppercase;
2875
+ letter-spacing: 0.5px;
2876
+ }
2877
+
2878
+ .comparison-table th:last-child {
2879
+ border-right: none;
2880
+ }
2881
+
2882
+ .comparison-table th:first-child {
2883
+ border-top-left-radius: var(--radius-lg);
2884
+ }
2885
+
2886
+ .comparison-table th:last-child {
2887
+ border-top-right-radius: var(--radius-lg);
2888
+ }
2889
+
2890
+ .comparison-table td {
2891
+ padding: 1.25rem 1.5rem;
2892
+ border-bottom: 1px solid rgba(0,0,0,0.05);
2893
+ border-right: 1px solid rgba(0,0,0,0.05);
2894
+ color: var(--text-primary);
2895
+ }
2896
+
2897
+ .comparison-table td:last-child {
2898
+ border-right: none;
2899
+ }
2900
+
2901
+ .comparison-table tbody tr:nth-child(even) {
2902
+ background: rgba(0,0,0,0.02);
2903
+ }
2904
+
2905
+ .comparison-table tbody tr:hover {
2906
+ background: rgba(102, 126, 234, 0.05);
2907
+ }
2908
+
2909
+ .comparison-table tr:last-child td {
2910
+ border-bottom: none;
2911
+ }
2912
+
2913
+ .comparison-table tr:last-child td:first-child {
2914
+ border-bottom-left-radius: var(--radius-lg);
2915
+ }
2916
+
2917
+ .comparison-table tr:last-child td:last-child {
2918
+ border-bottom-right-radius: var(--radius-lg);
2919
+ }
2920
+
2921
+ .comparison-table small {
2922
+ display: block;
2923
+ font-size: 0.75rem;
2924
+ color: var(--text-secondary);
2925
+ margin-top: 0.25rem;
2926
+ font-weight: normal;
2927
+ opacity: 0.8;
2928
+ }
2929
+
2930
+ .framework-name {
2931
+ font-weight: 700;
2932
+ color: #667eea !important;
2933
+ font-size: 1.05rem;
2934
+ }
2935
+
2936
+ .check {
2937
+ color: var(--success-color);
2938
+ font-weight: bold;
2939
+ font-size: 1.3rem;
2940
+ margin-right: 0.5rem;
2941
+ }
2942
+
2943
+ .cross {
2944
+ color: var(--danger-color);
2945
+ font-size: 1.3rem;
2946
+ margin-right: 0.5rem;
2947
+ opacity: 0.7;
2948
+ }
2949
+
2950
+ @media (max-width: 768px) {
2951
+ .hero {
2952
+ padding: 3rem 1.5rem 2rem;
2953
+ }
2954
+
2955
+ .hero-actions {
2956
+ width: 100%;
2957
+ align-items: center;
2958
+ }
2959
+
2960
+ .hero-actions nc-a {
2961
+ --nc-a-host-width: min(100%, 22rem);
2962
+ --nc-a-width: 100%;
2963
+ }
2964
+
2965
+ .problem-solution-grid {
2966
+ gap: 2rem;
2967
+ }
2968
+
2969
+ .features-section {
2970
+ padding: 4rem 1rem;
2971
+ }
2972
+
2973
+ .features-grid {
2974
+ grid-template-columns: 1fr;
2975
+ gap: 1rem;
2976
+ }
2977
+
2978
+ .feature-card {
2979
+ width: 100%;
2980
+ padding: 1.25rem;
2981
+ }
2982
+ }
2983
+
2984
+ /* ============================================================
2985
+ COMPONENTS PAGE
2986
+ ============================================================ */
2987
+
2988
+ .components-coming-soon {
2989
+ min-height: 70vh;
2990
+ display: flex;
2991
+ align-items: center;
2992
+ justify-content: center;
2993
+ padding: 4rem 2rem;
2994
+ }
2995
+
2996
+ .coming-soon-inner {
2997
+ text-align: center;
2998
+ max-width: 560px;
2999
+ }
3000
+
3001
+ .coming-soon-badge {
3002
+ display: inline-block;
3003
+ padding: 0.3rem 0.9rem;
3004
+ border-radius: 999px;
3005
+ font-size: 0.75rem;
3006
+ font-weight: 600;
3007
+ letter-spacing: 1px;
3008
+ text-transform: uppercase;
3009
+ background: rgba(16, 185, 129, 0.12);
3010
+ color: #10b981;
3011
+ border: 1px solid rgba(16, 185, 129, 0.25);
3012
+ margin-bottom: 1.5rem;
3013
+ }
3014
+
3015
+ .components-coming-soon h1 {
3016
+ font-size: clamp(2rem, 4vw, 2.75rem);
3017
+ font-weight: 800;
3018
+ color: var(--text-primary);
3019
+ margin-bottom: 1rem;
3020
+ }
3021
+
3022
+ .components-coming-soon p {
3023
+ font-size: 1.05rem;
3024
+ color: var(--text-secondary);
3025
+ line-height: 1.7;
3026
+ margin-bottom: 2.5rem;
3027
+ }
3028
+
3029
+ .coming-soon-stats {
3030
+ display: flex;
3031
+ gap: 3rem;
3032
+ justify-content: center;
3033
+ padding-top: 2rem;
3034
+ border-top: 1px solid rgba(255, 255, 255, 0.08);
3035
+ }
3036
+
3037
+ .cs-num {
3038
+ display: block;
3039
+ font-size: 1.75rem;
3040
+ font-weight: 800;
3041
+ background: linear-gradient(135deg, #10b981, #3b82f6);
3042
+ -webkit-background-clip: text;
3043
+ -webkit-text-fill-color: transparent;
3044
+ background-clip: text;
3045
+ }
3046
+
3047
+ .cs-label {
3048
+ display: block;
3049
+ font-size: 0.7rem;
3050
+ text-transform: uppercase;
3051
+ letter-spacing: 1.2px;
3052
+ color: rgba(255, 255, 255, 0.4);
3053
+ font-weight: 600;
3054
+ margin-top: 0.2rem;
3055
+ }
3056
+
3057
+ /* ============================================================
3058
+ COMPONENT DEMOS (components page shared layout)
3059
+ ============================================================ */
3060
+
3061
+ .components-demo {
3062
+ padding: var(--spacing-xl, 2rem);
3063
+ max-width: 900px;
3064
+ margin: 0 auto;
3065
+ }
3066
+
3067
+ .demo-section {
3068
+ margin-bottom: 2.5rem;
3069
+ }
3070
+
3071
+ .demo-section-title {
3072
+ font-size: 0.75rem;
3073
+ font-weight: 600;
3074
+ text-transform: uppercase;
3075
+ letter-spacing: 1px;
3076
+ color: var(--text-secondary);
3077
+ margin-bottom: 1rem;
3078
+ }
3079
+
3080
+ .demo-row {
3081
+ display: flex;
3082
+ flex-wrap: wrap;
3083
+ gap: 0.75rem;
3084
+ }
3085
+
3086
+ .demo-row--align-center {
3087
+ align-items: center;
3088
+ }
3089
+
3090
+ .demo-row--col {
3091
+ flex-direction: column;
3092
+ gap: 1.5rem;
3093
+ }
3094
+
3095
+ /* Component card — wraps a single component demo with header + sections */
3096
+ .demo-component {
3097
+ display: flex;
3098
+ flex-direction: column;
3099
+ gap: 0;
3100
+ background: var(--background-secondary, var(--nc-bg-secondary));
3101
+ border: 1px solid var(--border-color, var(--nc-border));
3102
+ border-radius: var(--nc-radius-lg);
3103
+ padding: 2rem;
3104
+ margin-bottom: 2rem;
3105
+ }
3106
+
3107
+ .demo-component + .demo-component {
3108
+ margin-top: 0;
3109
+ }
3110
+
3111
+ .demo-component__header {
3112
+ margin-bottom: 1.75rem;
3113
+ padding-bottom: 1.5rem;
3114
+ border-bottom: 1px solid rgba(255, 255, 255, 0.07);
3115
+ }
3116
+
3117
+ .demo-component__tag {
3118
+ display: inline-block;
3119
+ font-size: 1.1rem;
3120
+ font-weight: 700;
3121
+ font-family: var(--font-mono, monospace);
3122
+ color: var(--text-primary);
3123
+ margin-bottom: 0.5rem;
3124
+ }
3125
+
3126
+ .demo-component__desc {
3127
+ font-size: 0.9rem;
3128
+ color: var(--text-secondary);
3129
+ line-height: 1.6;
3130
+ margin: 0.4rem 0 0.75rem;
3131
+ }
3132
+
3133
+ .demo-component__usage {
3134
+ font-family: var(--font-mono, monospace);
3135
+ font-size: 0.8rem;
3136
+ color: var(--nc-primary);
3137
+ background: rgba(16, 185, 129, 0.07);
3138
+ border: 1px solid rgba(16, 185, 129, 0.15);
3139
+ border-radius: 6px;
3140
+ padding: 0.5rem 0.85rem;
3141
+ display: block;
3142
+ }
3143
+
3144
+ .demo-component__usage-group {
3145
+ display: flex;
3146
+ flex-direction: column;
3147
+ gap: 0.5rem;
3148
+ }
3149
+
3150
+ .demo-component__usage-label {
3151
+ font-size: 0.7rem;
3152
+ font-weight: 600;
3153
+ text-transform: uppercase;
3154
+ letter-spacing: 0.8px;
3155
+ color: var(--text-secondary);
3156
+ margin-bottom: 0.15rem;
3157
+ }
3158
+
3159
+ .demo-section-desc {
3160
+ font-size: 0.82rem;
3161
+ color: var(--text-muted, var(--text-secondary));
3162
+ margin: -0.4rem 0 0.75rem;
3163
+ line-height: 1.5;
3164
+ }