@rune-kit/rune 2.2.1 → 2.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +39 -13
  2. package/compiler/bin/rune.js +26 -4
  3. package/docs/ANTIGRAVITY-GAP-ANALYSIS.md +369 -0
  4. package/docs/ARCHITECTURE.md +332 -0
  5. package/docs/COMMUNITY-PACKS.md +109 -0
  6. package/docs/CONTRIBUTING-L4.md +215 -0
  7. package/docs/CROSS-IDE-ANALYSIS.md +164 -0
  8. package/docs/EXTENSION-TEMPLATE.md +108 -0
  9. package/docs/MESH-RULES.md +34 -0
  10. package/docs/MULTI-PLATFORM.md +804 -0
  11. package/docs/SKILL-DEPTH-AUDIT.md +191 -0
  12. package/docs/SKILL-TEMPLATE.md +72 -0
  13. package/docs/TRADE-MATRIX.md +327 -0
  14. package/docs/VERSIONING.md +91 -0
  15. package/docs/VISION.md +263 -0
  16. package/docs/assets/demo-subtitles.srt +215 -0
  17. package/docs/assets/end-card.html +276 -0
  18. package/docs/assets/mesh-diagram.html +654 -0
  19. package/docs/assets/thumbnail.html +295 -0
  20. package/docs/guides/cli.md +403 -0
  21. package/docs/guides/index.html +1346 -0
  22. package/docs/index.html +674 -0
  23. package/docs/references/claudekit-analysis.md +414 -0
  24. package/docs/references/voltagent-analysis.md +189 -0
  25. package/docs/script.js +277 -0
  26. package/docs/skills/index.html +832 -0
  27. package/docs/style.css +583 -0
  28. package/docs/video-demo-plan.md +172 -0
  29. package/extensions/ui/PACK.md +2 -0
  30. package/extensions/ui/skills/design-decision.md +10 -0
  31. package/extensions/ui/skills/palette-picker.md +11 -0
  32. package/hooks/.gitkeep +0 -0
  33. package/hooks/auto-format/index.cjs +48 -0
  34. package/hooks/context-watch/index.cjs +68 -0
  35. package/hooks/hooks.json +99 -0
  36. package/hooks/metrics-collector/index.cjs +42 -0
  37. package/hooks/post-session-reflect/index.cjs +153 -0
  38. package/hooks/pre-compact/index.cjs +95 -0
  39. package/hooks/pre-tool-guard/index.cjs +68 -0
  40. package/hooks/run-hook +17 -0
  41. package/hooks/run-hook.cjs +16 -0
  42. package/hooks/run-hook.cmd +1 -0
  43. package/hooks/secrets-scan/index.cjs +100 -0
  44. package/hooks/session-start/index.cjs +65 -0
  45. package/hooks/typecheck/index.cjs +65 -0
  46. package/package.json +9 -4
  47. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -0
  48. package/references/ui-pro-max-data/charts.csv +26 -0
  49. package/references/ui-pro-max-data/colors.csv +162 -0
  50. package/references/ui-pro-max-data/styles.csv +85 -0
  51. package/references/ui-pro-max-data/typography.csv +74 -0
  52. package/references/ui-pro-max-data/ui-reasoning.csv +162 -0
  53. package/references/ui-pro-max-data/ux-guidelines.csv +100 -0
  54. package/skills/ba/SKILL.md +10 -0
  55. package/skills/completion-gate/SKILL.md +34 -1
  56. package/skills/context-engine/SKILL.md +13 -0
  57. package/skills/cook/SKILL.md +71 -0
  58. package/skills/debug/SKILL.md +56 -1
  59. package/skills/design/SKILL.md +11 -0
  60. package/skills/fix/SKILL.md +26 -1
  61. package/skills/plan/SKILL.md +23 -6
  62. package/skills/review/SKILL.md +2 -0
  63. package/skills/skill-forge/SKILL.md +38 -3
  64. package/skills/test/SKILL.md +10 -1
  65. package/skills/verification/SKILL.md +60 -2
package/docs/style.css ADDED
@@ -0,0 +1,583 @@
1
+ /* ─── RESET & BASE ─── */
2
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
3
+
4
+ :root {
5
+ --bg-base: #0a0f1a;
6
+ --bg-card: #111827;
7
+ --bg-elevated: #1a2332;
8
+ --bg-section-alt: #080c14;
9
+ --bg-code: rgba(0,0,0,0.4);
10
+ --text-primary: #f0f4f8;
11
+ --text-secondary: #8896a8;
12
+ --text-muted: #5a6a7a;
13
+ --border: #1e2d3d;
14
+ --accent: #10b981;
15
+ --accent-dim: rgba(16, 185, 129, 0.15);
16
+ --accent-glow: rgba(16, 185, 129, 0.3);
17
+ --cyan: #06b6d4;
18
+ --loss: #ef4444;
19
+ --profit: #10b981;
20
+ --nav-bg: rgba(10, 15, 26, 0.85);
21
+ --font-display: 'Space Grotesk', system-ui, sans-serif;
22
+ --font-body: 'Inter', system-ui, sans-serif;
23
+ --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
24
+ --radius-sm: 6px;
25
+ --radius-md: 10px;
26
+ --radius-lg: 16px;
27
+ --shadow-card: 0 4px 24px rgba(0,0,0,0.3);
28
+ --transition: 250ms ease;
29
+ --max-width: 1120px;
30
+ }
31
+
32
+ /* ─── LIGHT MODE ─── */
33
+ [data-theme="light"] {
34
+ --bg-base: #f8fafb;
35
+ --bg-card: #ffffff;
36
+ --bg-elevated: #f1f5f9;
37
+ --bg-section-alt: #eef2f6;
38
+ --bg-code: rgba(0,0,0,0.04);
39
+ --text-primary: #0f172a;
40
+ --text-secondary: #475569;
41
+ --text-muted: #94a3b8;
42
+ --border: #e2e8f0;
43
+ --accent: #059669;
44
+ --accent-dim: rgba(5, 150, 105, 0.1);
45
+ --accent-glow: rgba(5, 150, 105, 0.2);
46
+ --loss: #dc2626;
47
+ --profit: #059669;
48
+ --nav-bg: rgba(248, 250, 251, 0.88);
49
+ --shadow-card: 0 4px 24px rgba(0,0,0,0.08);
50
+ }
51
+ [data-theme="light"] .hero-mesh { opacity: 0.15; }
52
+ [data-theme="light"] .compare-diagram { background: rgba(0,0,0,0.04); }
53
+ [data-theme="light"] .code-block { background: var(--bg-code); }
54
+ [data-theme="light"] .phase { background: rgba(0,0,0,0.02); }
55
+ [data-theme="light"] .layer-count { background: rgba(0,0,0,0.05); }
56
+ [data-theme="light"] .compare-table tbody tr:hover { background: rgba(0,0,0,0.02); }
57
+
58
+ html { scroll-behavior: smooth; }
59
+
60
+ body {
61
+ font-family: var(--font-body);
62
+ background: var(--bg-base);
63
+ color: var(--text-primary);
64
+ line-height: 1.6;
65
+ -webkit-font-smoothing: antialiased;
66
+ overflow-x: hidden;
67
+ }
68
+
69
+ a { color: var(--accent); text-decoration: none; transition: opacity var(--transition); }
70
+ a:hover { opacity: 0.85; }
71
+
72
+ .container { max-width: var(--max-width); margin: 0 auto; padding: 0 24px; }
73
+
74
+ /* ─── NAV ─── */
75
+ .nav {
76
+ position: fixed; top: 0; left: 0; right: 0; z-index: 100;
77
+ background: var(--nav-bg);
78
+ backdrop-filter: blur(12px);
79
+ border-bottom: 1px solid var(--border);
80
+ }
81
+ .nav-inner {
82
+ max-width: var(--max-width); margin: 0 auto;
83
+ display: flex; align-items: center; justify-content: space-between;
84
+ padding: 14px 24px;
85
+ }
86
+ .nav-logo {
87
+ font-family: var(--font-display); font-weight: 700; font-size: 20px;
88
+ color: var(--text-primary); display: flex; align-items: center; gap: 8px;
89
+ }
90
+ .logo-rune { color: var(--accent); font-size: 18px; }
91
+ .nav-links { display: flex; align-items: center; gap: 28px; }
92
+ .nav-links a { color: var(--text-secondary); font-size: 14px; font-weight: 500; }
93
+ .nav-links a:hover { color: var(--text-primary); opacity: 1; }
94
+
95
+ /* ─── BUTTONS ─── */
96
+ .btn {
97
+ display: inline-flex; align-items: center; justify-content: center;
98
+ padding: 10px 22px; border-radius: var(--radius-sm);
99
+ font-family: var(--font-body); font-weight: 600; font-size: 14px;
100
+ cursor: pointer; transition: all var(--transition); border: none;
101
+ }
102
+ .btn-sm { padding: 6px 14px; font-size: 13px; }
103
+ .btn-primary {
104
+ background: var(--accent); color: #fff;
105
+ box-shadow: 0 0 20px var(--accent-glow);
106
+ }
107
+ .btn-primary:hover { background: #0ea572; transform: translateY(-1px); opacity: 1; }
108
+ .btn-ghost {
109
+ background: transparent; color: var(--text-secondary);
110
+ border: 1px solid var(--border);
111
+ }
112
+ .btn-ghost:hover { border-color: var(--accent); color: var(--text-primary); opacity: 1; }
113
+
114
+ /* ─── HERO ─── */
115
+ .hero {
116
+ position: relative; min-height: 100vh;
117
+ display: flex; align-items: center; justify-content: center;
118
+ padding: 120px 24px 80px;
119
+ }
120
+ .hero-mesh {
121
+ position: absolute; inset: 0; overflow: hidden; opacity: 0.4;
122
+ }
123
+ #mesh-canvas { width: 100%; height: 100%; }
124
+ .hero-content {
125
+ position: relative; z-index: 2; text-align: center; max-width: 680px;
126
+ }
127
+ .hero-badge {
128
+ display: inline-block; font-family: var(--font-mono); font-size: 13px;
129
+ color: var(--accent); background: var(--accent-dim);
130
+ padding: 6px 16px; border-radius: 999px; margin-bottom: 28px;
131
+ border: 1px solid rgba(16, 185, 129, 0.2);
132
+ }
133
+ .hero h1 {
134
+ font-family: var(--font-display); font-size: clamp(40px, 7vw, 72px);
135
+ font-weight: 700; line-height: 1.1; margin-bottom: 20px;
136
+ }
137
+ .accent { color: var(--accent); }
138
+ .hero-sub {
139
+ font-size: 18px; color: var(--text-secondary); max-width: 520px;
140
+ margin: 0 auto 36px; line-height: 1.7;
141
+ }
142
+ .hero-actions { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
143
+
144
+ /* ─── SECTIONS ─── */
145
+ .section { padding: 100px 0; }
146
+ .section-dark { background: var(--bg-section-alt); }
147
+ .section h2 {
148
+ font-family: var(--font-display); font-size: 36px; font-weight: 700;
149
+ text-align: center; margin-bottom: 12px;
150
+ }
151
+ .section-sub {
152
+ text-align: center; color: var(--text-secondary); font-size: 17px;
153
+ max-width: 560px; margin: 0 auto 48px;
154
+ }
155
+
156
+ /* ─── COMPARE (PROBLEM) ─── */
157
+ .compare-grid {
158
+ display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;
159
+ }
160
+ .compare-card {
161
+ background: var(--bg-card); border: 1px solid var(--border);
162
+ border-radius: var(--radius-lg); padding: 28px;
163
+ }
164
+ .compare-card h3 {
165
+ font-family: var(--font-display); font-size: 20px; margin-bottom: 16px;
166
+ }
167
+ .compare-diagram {
168
+ font-family: var(--font-mono); font-size: 14px; line-height: 1.8;
169
+ color: var(--text-secondary); margin-bottom: 14px;
170
+ background: rgba(0,0,0,0.3); padding: 14px; border-radius: var(--radius-sm);
171
+ }
172
+ .compare-good { border-color: var(--accent); }
173
+ .compare-good h3 { color: var(--accent); }
174
+ .text-loss { color: var(--loss); }
175
+ .text-profit { color: var(--profit); }
176
+
177
+ /* ─── LAYERS (ARCHITECTURE) ─── */
178
+ .layers { display: flex; flex-direction: column; gap: 10px; max-width: 700px; margin: 0 auto; }
179
+ .layer {
180
+ display: flex; align-items: stretch; border-radius: var(--radius-md);
181
+ overflow: hidden; border: 1px solid var(--border);
182
+ transition: border-color var(--transition);
183
+ }
184
+ .layer:hover { border-color: var(--accent); }
185
+ .layer-label {
186
+ display: flex; align-items: center; justify-content: center;
187
+ min-width: 56px; font-family: var(--font-mono); font-weight: 700; font-size: 14px;
188
+ color: #fff;
189
+ }
190
+ .layer-0 .layer-label { background: var(--accent); }
191
+ .layer-1 .layer-label { background: #6366f1; }
192
+ .layer-2 .layer-label { background: #3b82f6; }
193
+ .layer-3 .layer-label { background: #8b5cf6; }
194
+ .layer-4 .layer-label { background: #f59e0b; }
195
+ .layer-content {
196
+ flex: 1; padding: 16px 20px; background: var(--bg-card);
197
+ display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 16px;
198
+ }
199
+ .layer-content strong { font-family: var(--font-display); font-size: 16px; }
200
+ .layer-count {
201
+ font-family: var(--font-mono); font-size: 12px;
202
+ color: var(--text-muted); background: rgba(255,255,255,0.06);
203
+ padding: 2px 8px; border-radius: 4px;
204
+ }
205
+ .layer-content p {
206
+ width: 100%; font-size: 14px; color: var(--text-secondary); margin: 0;
207
+ }
208
+
209
+ /* ─── WORKFLOWS ─── */
210
+ .workflow-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
211
+ .workflow-card {
212
+ background: var(--bg-card); border: 1px solid var(--border);
213
+ border-radius: var(--radius-lg); padding: 28px;
214
+ }
215
+ .workflow-card h3 {
216
+ font-family: var(--font-mono); font-size: 18px; color: var(--accent);
217
+ margin-bottom: 6px;
218
+ }
219
+ .workflow-desc { font-size: 14px; color: var(--text-secondary); margin-bottom: 20px; }
220
+ .workflow-phases { display: flex; flex-direction: column; gap: 6px; }
221
+ .phase {
222
+ font-size: 13px; color: var(--text-secondary); padding: 6px 10px;
223
+ background: rgba(255,255,255,0.03); border-radius: var(--radius-sm);
224
+ border-left: 2px solid var(--border);
225
+ transition: border-color var(--transition);
226
+ }
227
+ .phase:hover { border-left-color: var(--accent); }
228
+ .phase-num {
229
+ font-family: var(--font-mono); font-weight: 700; color: var(--accent);
230
+ margin-right: 8px;
231
+ }
232
+
233
+ /* ─── FEATURES ─── */
234
+ .features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
235
+ .feature-card {
236
+ background: var(--bg-card); border: 1px solid var(--border);
237
+ border-radius: var(--radius-lg); padding: 28px;
238
+ transition: border-color var(--transition), transform var(--transition);
239
+ }
240
+ .feature-card:hover { border-color: var(--accent); transform: translateY(-2px); }
241
+ .feature-icon { font-size: 28px; margin-bottom: 14px; }
242
+ .feature-card h3 {
243
+ font-family: var(--font-display); font-size: 18px; margin-bottom: 8px;
244
+ }
245
+ .feature-card p { font-size: 14px; color: var(--text-secondary); line-height: 1.6; }
246
+
247
+ /* ─── INSTALL ─── */
248
+ .install-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; max-width: 800px; margin: 0 auto; }
249
+ .install-card {
250
+ background: var(--bg-card); border: 1px solid var(--border);
251
+ border-radius: var(--radius-lg); padding: 32px; text-align: center;
252
+ }
253
+ .install-card h3 { font-family: var(--font-display); font-size: 20px; margin-bottom: 8px; }
254
+ .install-badge {
255
+ font-family: var(--font-mono); font-size: 12px;
256
+ color: var(--accent); display: inline-block; margin-bottom: 18px;
257
+ }
258
+ .code-block {
259
+ background: rgba(0,0,0,0.4); border: 1px solid var(--border);
260
+ border-radius: var(--radius-sm); padding: 14px 20px;
261
+ font-family: var(--font-mono); font-size: 14px;
262
+ color: var(--accent); margin-bottom: 14px; text-align: left;
263
+ overflow-x: auto;
264
+ }
265
+ .install-card p:last-child { font-size: 14px; color: var(--text-secondary); }
266
+
267
+ /* ─── PRICING ─── */
268
+
269
+ /* Persona cards — "who needs what" */
270
+ .pricing-personas {
271
+ display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;
272
+ margin-bottom: 40px; max-width: 960px; margin-left: auto; margin-right: auto;
273
+ }
274
+ .persona-card {
275
+ background: var(--bg-elevated); border: 1px solid var(--border);
276
+ border-radius: var(--radius-md); padding: 20px; text-align: center;
277
+ }
278
+ .persona-icon { font-size: 28px; margin-bottom: 10px; }
279
+ .persona-card p { font-size: 14px; color: var(--text-secondary); line-height: 1.6; }
280
+ .persona-card strong { color: var(--text-primary); }
281
+
282
+ /* 3-column pricing grid */
283
+ .pricing-grid-3 {
284
+ display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;
285
+ max-width: 1060px; margin: 0 auto;
286
+ }
287
+ .pricing-card {
288
+ background: var(--bg-card); border: 1px solid var(--border);
289
+ border-radius: var(--radius-lg); padding: 32px;
290
+ display: flex; flex-direction: column;
291
+ }
292
+ .pricing-pro {
293
+ border-color: #f59e0b;
294
+ background: linear-gradient(168deg, var(--bg-card) 60%, rgba(245, 158, 11, 0.06) 100%);
295
+ }
296
+ .pricing-biz {
297
+ border-color: #8b5cf6;
298
+ background: linear-gradient(168deg, var(--bg-card) 60%, rgba(139, 92, 246, 0.06) 100%);
299
+ }
300
+ .pricing-tier { margin-bottom: 16px; }
301
+ .pricing-badge {
302
+ display: inline-block; font-family: var(--font-mono); font-size: 11px;
303
+ font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px;
304
+ padding: 3px 10px; border-radius: 4px; margin-bottom: 12px;
305
+ }
306
+ .pricing-badge-free { background: var(--accent-dim); color: var(--accent); }
307
+ .pricing-badge-pro { background: rgba(245, 158, 11, 0.15); color: #f59e0b; }
308
+ .pricing-badge-biz { background: rgba(139, 92, 246, 0.15); color: #8b5cf6; }
309
+ .pricing-card h3 {
310
+ font-family: var(--font-display); font-size: 26px; font-weight: 700;
311
+ margin-bottom: 4px;
312
+ }
313
+ .pricing-price {
314
+ font-family: var(--font-mono); font-size: 38px; font-weight: 700;
315
+ color: var(--text-primary); line-height: 1.1;
316
+ }
317
+ .pricing-forever { font-size: 15px; color: var(--text-muted); font-weight: 400; }
318
+ .pricing-period { font-size: 15px; color: var(--text-muted); font-weight: 400; }
319
+ .pricing-desc {
320
+ font-size: 14px; color: var(--text-secondary); line-height: 1.6;
321
+ margin-bottom: 12px;
322
+ }
323
+ .pricing-who {
324
+ font-size: 12px; color: var(--text-muted); line-height: 1.5;
325
+ margin-bottom: 20px; font-style: italic;
326
+ }
327
+ .pricing-features {
328
+ list-style: none; display: flex; flex-direction: column; gap: 9px;
329
+ margin-bottom: 24px; flex: 1;
330
+ }
331
+ .pricing-features li {
332
+ font-size: 13px; color: var(--text-secondary); line-height: 1.5;
333
+ padding-left: 20px; position: relative;
334
+ }
335
+ .pricing-features li::before {
336
+ content: '\2713'; position: absolute; left: 0;
337
+ color: var(--accent); font-weight: 700; font-size: 12px;
338
+ }
339
+ .pricing-pro .pricing-features li::before { color: #f59e0b; }
340
+ .pricing-biz .pricing-features li::before { color: #8b5cf6; }
341
+ .pricing-features li strong { color: var(--text-primary); font-weight: 600; }
342
+ .btn-pro {
343
+ display: inline-flex; align-items: center; justify-content: center;
344
+ padding: 10px 22px; border-radius: var(--radius-sm);
345
+ font-family: var(--font-body); font-weight: 600; font-size: 14px;
346
+ cursor: pointer; transition: all var(--transition); border: none;
347
+ background: #f59e0b; color: #000;
348
+ box-shadow: 0 0 20px rgba(245, 158, 11, 0.3);
349
+ }
350
+ .btn-pro:hover { background: #d97706; transform: translateY(-1px); opacity: 1; }
351
+ .btn-biz {
352
+ display: inline-flex; align-items: center; justify-content: center;
353
+ padding: 10px 22px; border-radius: var(--radius-sm);
354
+ font-family: var(--font-body); font-weight: 600; font-size: 14px;
355
+ cursor: pointer; transition: all var(--transition); border: none;
356
+ background: #8b5cf6; color: #fff;
357
+ box-shadow: 0 0 20px rgba(139, 92, 246, 0.3);
358
+ }
359
+ .btn-biz:hover { background: #7c3aed; transform: translateY(-1px); opacity: 1; }
360
+ .pricing-note {
361
+ font-size: 12px; color: var(--text-muted); text-align: center;
362
+ margin-top: 10px; line-height: 1.5;
363
+ }
364
+
365
+ /* Comparison table */
366
+ .pricing-compare {
367
+ max-width: 860px; margin: 48px auto 0;
368
+ }
369
+ .pricing-compare h3 {
370
+ font-family: var(--font-display); font-size: 22px; font-weight: 700;
371
+ text-align: center; margin-bottom: 20px;
372
+ }
373
+ .compare-table {
374
+ width: 100%; border-collapse: collapse;
375
+ font-size: 13px; color: var(--text-secondary);
376
+ }
377
+ .compare-table thead th {
378
+ font-family: var(--font-display); font-weight: 600; font-size: 14px;
379
+ color: var(--text-primary); padding: 12px 16px;
380
+ border-bottom: 2px solid var(--border); text-align: center;
381
+ }
382
+ .compare-table thead th:first-child { text-align: left; }
383
+ .compare-table .table-price {
384
+ font-family: var(--font-mono); font-size: 11px; color: var(--text-muted);
385
+ font-weight: 400;
386
+ }
387
+ .compare-table tbody td {
388
+ padding: 10px 16px; border-bottom: 1px solid var(--border);
389
+ text-align: center;
390
+ }
391
+ .compare-table tbody td:first-child { text-align: left; color: var(--text-primary); }
392
+ .compare-table .check { color: var(--accent); font-weight: 700; font-size: 16px; }
393
+ .compare-table .dash { color: var(--text-muted); }
394
+ .compare-table tbody tr:hover { background: rgba(255,255,255,0.02); }
395
+
396
+ /* ─── EXTENSIONS ─── */
397
+ .ext-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
398
+ .ext-card {
399
+ background: var(--bg-card); border: 1px solid var(--border);
400
+ border-radius: var(--radius-md); padding: 18px;
401
+ display: flex; flex-direction: column; gap: 4px;
402
+ transition: border-color var(--transition);
403
+ }
404
+ .ext-card:hover { border-color: var(--accent); }
405
+ .ext-card strong { font-family: var(--font-mono); font-size: 13px; }
406
+ .ext-card span { font-size: 13px; color: var(--text-muted); }
407
+
408
+ /* ─── STATS ─── */
409
+ .stats-grid {
410
+ display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px;
411
+ text-align: center;
412
+ }
413
+ .stat-num {
414
+ font-family: var(--font-mono); font-size: 52px; font-weight: 700;
415
+ color: var(--accent); display: block; line-height: 1;
416
+ }
417
+ .stat-label {
418
+ font-size: 14px; color: var(--text-secondary); margin-top: 8px;
419
+ display: block;
420
+ }
421
+
422
+ /* ─── FOOTER ─── */
423
+ .footer {
424
+ border-top: 1px solid var(--border); padding: 32px 0;
425
+ }
426
+ .footer-inner {
427
+ display: flex; align-items: center; justify-content: space-between;
428
+ }
429
+ .footer-inner p { font-size: 14px; color: var(--text-secondary); }
430
+ .footer-links { display: flex; gap: 24px; }
431
+ .footer-links a { font-size: 13px; color: var(--text-muted); }
432
+ .footer-links a:hover { color: var(--text-primary); }
433
+
434
+ /* ─── RESPONSIVE ─── */
435
+ @media (max-width: 900px) {
436
+ .compare-grid, .workflow-grid, .features-grid { grid-template-columns: 1fr; }
437
+ .ext-grid { grid-template-columns: repeat(2, 1fr); }
438
+ .install-grid, .pricing-grid, .pricing-grid-3 { grid-template-columns: 1fr; }
439
+ .pricing-personas { grid-template-columns: 1fr; }
440
+ .compare-table { font-size: 12px; }
441
+ .compare-table thead th, .compare-table tbody td { padding: 8px 10px; }
442
+ .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 32px; }
443
+ .nav-links a:not(.btn):not(.nav-ctrl) { display: none; }
444
+ .nav-controls { gap: 6px; }
445
+ }
446
+
447
+ @media (max-width: 640px) {
448
+ .section { padding: 64px 0; }
449
+ .section h2 { font-size: 28px; }
450
+ .hero { padding: 100px 20px 60px; }
451
+ .hero h1 { font-size: 36px; }
452
+ .footer-inner { flex-direction: column; gap: 16px; text-align: center; }
453
+ .ext-grid { grid-template-columns: 1fr; }
454
+ .stats-grid { grid-template-columns: repeat(2, 1fr); }
455
+ }
456
+
457
+ /* ─── THEME TOGGLE + TRANSLATE ─── */
458
+ .nav-controls { display: flex; align-items: center; gap: 8px; }
459
+ .theme-toggle, .lang-toggle {
460
+ background: none; border: 1px solid var(--border); color: var(--text-secondary);
461
+ width: 34px; height: 34px; border-radius: var(--radius-sm);
462
+ cursor: pointer; display: flex; align-items: center; justify-content: center;
463
+ font-size: 16px; transition: all var(--transition); flex-shrink: 0;
464
+ }
465
+ .theme-toggle:hover, .lang-toggle:hover {
466
+ border-color: var(--accent); color: var(--text-primary);
467
+ }
468
+ /* Google Translate — hide injected banner */
469
+ .goog-te-banner-frame { display: none !important; }
470
+ body { top: 0 !important; }
471
+ .skiptranslate { display: none !important; }
472
+ /* Language dropdown */
473
+ .lang-dropdown { position: relative; }
474
+ .lang-menu {
475
+ position: absolute; top: calc(100% + 6px); right: 0; z-index: 100;
476
+ background: var(--bg-card); border: 1px solid var(--border);
477
+ border-radius: var(--radius-md); padding: 4px; min-width: 140px;
478
+ box-shadow: 0 8px 24px rgba(0,0,0,0.15);
479
+ display: flex; flex-direction: column;
480
+ }
481
+ .lang-menu[hidden] { display: none; }
482
+ .lang-menu button {
483
+ background: none; border: none; color: var(--text-secondary);
484
+ padding: 7px 12px; font-family: var(--font-body); font-size: 13px;
485
+ text-align: left; cursor: pointer; border-radius: var(--radius-sm);
486
+ transition: all var(--transition);
487
+ }
488
+ .lang-menu button:hover {
489
+ background: var(--bg-elevated); color: var(--text-primary);
490
+ }
491
+
492
+ /* ─── PAYMENT MODAL ─── */
493
+ .pay-modal { position: fixed; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; }
494
+ .pay-modal[hidden] { display: none; }
495
+ .pay-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,0.7); backdrop-filter: blur(4px); }
496
+ .pay-dialog {
497
+ position: relative; background: var(--bg-card); border: 1px solid var(--border);
498
+ border-radius: var(--radius-lg); padding: 32px; max-width: 440px; width: 90%;
499
+ box-shadow: 0 24px 64px rgba(0,0,0,0.5); max-height: 90vh; overflow-y: auto;
500
+ }
501
+ .pay-close {
502
+ position: absolute; top: 12px; right: 16px; background: none; border: none;
503
+ color: var(--text-muted); font-size: 24px; cursor: pointer; line-height: 1;
504
+ padding: 4px; transition: color var(--transition);
505
+ }
506
+ .pay-close:hover { color: var(--text-primary); }
507
+ .pay-back {
508
+ background: none; border: none; color: var(--text-muted); font-size: 14px;
509
+ cursor: pointer; padding: 0; margin-bottom: 12px; transition: color var(--transition);
510
+ }
511
+ .pay-back:hover { color: var(--text-primary); }
512
+ .pay-step h3 { font-family: var(--font-display); font-size: 22px; margin-bottom: 4px; color: var(--text-primary); }
513
+ .pay-subtitle { font-size: 14px; color: var(--text-secondary); margin-bottom: 20px; }
514
+
515
+ /* Payment method selector */
516
+ .pay-options { display: flex; flex-direction: column; gap: 12px; }
517
+ .pay-option {
518
+ display: flex; align-items: center; gap: 14px; padding: 16px;
519
+ background: var(--bg-base); border: 1px solid var(--border); border-radius: var(--radius-md);
520
+ cursor: pointer; transition: all var(--transition); text-decoration: none; color: inherit;
521
+ }
522
+ .pay-option:hover { border-color: var(--accent); background: var(--bg-elevated); }
523
+ .pay-option-flag { font-size: 28px; flex-shrink: 0; }
524
+ .pay-option-info { flex: 1; display: flex; flex-direction: column; gap: 2px; }
525
+ .pay-option-info strong { font-size: 15px; color: var(--text-primary); }
526
+ .pay-option-info span { font-size: 12px; color: var(--text-muted); }
527
+ .pay-option-price { font-family: var(--font-mono); font-weight: 700; font-size: 14px !important; color: var(--accent) !important; margin-top: 2px; }
528
+ .pay-option-arrow { font-size: 18px; color: var(--text-muted); flex-shrink: 0; }
529
+
530
+ /* Form inputs */
531
+ .pay-label { display: block; font-size: 13px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; }
532
+ .pay-input {
533
+ width: 100%; padding: 10px 14px; background: var(--bg-base); border: 1px solid var(--border);
534
+ border-radius: var(--radius-sm); color: var(--text-primary); font-family: var(--font-mono);
535
+ font-size: 14px; outline: none; transition: border-color var(--transition); margin-bottom: 14px;
536
+ }
537
+ .pay-input:focus { border-color: var(--accent); }
538
+ .pay-input::placeholder { color: var(--text-muted); }
539
+ .pay-error { color: var(--loss); font-size: 13px; margin-top: 8px; text-align: center; }
540
+
541
+ /* QR section */
542
+ .pay-qr { text-align: center; margin: 16px 0; }
543
+ .pay-qr img { width: 240px; height: 240px; border-radius: var(--radius-md); background: #fff; }
544
+ .pay-details {
545
+ background: var(--bg-base); border: 1px solid var(--border);
546
+ border-radius: var(--radius-md); padding: 14px; margin-bottom: 16px;
547
+ }
548
+ .pay-detail-row { display: flex; justify-content: space-between; align-items: center; padding: 6px 0; font-size: 13px; }
549
+ .pay-detail-row span { color: var(--text-muted); }
550
+ .pay-detail-row strong { color: var(--text-primary); }
551
+ .pay-mono { font-family: var(--font-mono); font-size: 13px; }
552
+ .pay-status {
553
+ display: flex; align-items: center; justify-content: center; gap: 10px;
554
+ padding: 12px; border-radius: var(--radius-sm); font-size: 14px;
555
+ background: var(--accent-dim); color: var(--accent); font-weight: 500;
556
+ }
557
+ .pay-spinner {
558
+ width: 16px; height: 16px; border: 2px solid var(--accent);
559
+ border-top-color: transparent; border-radius: 50%;
560
+ animation: spin 0.8s linear infinite;
561
+ }
562
+ @keyframes spin { to { transform: rotate(360deg); } }
563
+ .pay-hint { font-size: 12px; color: var(--text-muted); text-align: center; margin-top: 12px; line-height: 1.5; }
564
+ .pay-success-icon {
565
+ width: 64px; height: 64px; border-radius: 50%; background: var(--accent);
566
+ color: #fff; font-size: 32px; display: flex; align-items: center; justify-content: center;
567
+ margin: 0 auto 16px; font-weight: 700;
568
+ }
569
+
570
+ /* ─── ANIMATIONS ─── */
571
+ @media (prefers-reduced-motion: no-preference) {
572
+ .layer, .feature-card, .workflow-card, .compare-card, .ext-card, .install-card, .pricing-card, .stat {
573
+ opacity: 0; transform: translateY(20px);
574
+ animation: fadeUp 0.5s ease forwards;
575
+ }
576
+ .section:nth-child(2) .compare-card:nth-child(1) { animation-delay: 0.1s; }
577
+ .section:nth-child(2) .compare-card:nth-child(2) { animation-delay: 0.2s; }
578
+ .section:nth-child(2) .compare-card:nth-child(3) { animation-delay: 0.3s; }
579
+ }
580
+
581
+ @keyframes fadeUp {
582
+ to { opacity: 1; transform: translateY(0); }
583
+ }