@rune-kit/rune 2.2.0 → 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 (199) hide show
  1. package/README.md +72 -40
  2. package/compiler/__tests__/pack-split.test.js +145 -0
  3. package/compiler/bin/rune.js +26 -9
  4. package/compiler/doctor.js +42 -0
  5. package/compiler/emitter.js +27 -4
  6. package/compiler/parser.js +41 -3
  7. package/compiler/transformer.js +10 -6
  8. package/compiler/transforms/compliance.js +40 -0
  9. package/docs/ANTIGRAVITY-GAP-ANALYSIS.md +369 -0
  10. package/docs/ARCHITECTURE.md +332 -0
  11. package/docs/COMMUNITY-PACKS.md +109 -0
  12. package/docs/CONTRIBUTING-L4.md +215 -0
  13. package/docs/CROSS-IDE-ANALYSIS.md +164 -0
  14. package/docs/EXTENSION-TEMPLATE.md +108 -0
  15. package/docs/MESH-RULES.md +34 -0
  16. package/docs/MULTI-PLATFORM.md +804 -0
  17. package/docs/SKILL-DEPTH-AUDIT.md +191 -0
  18. package/docs/SKILL-TEMPLATE.md +72 -0
  19. package/docs/TRADE-MATRIX.md +327 -0
  20. package/docs/VERSIONING.md +91 -0
  21. package/docs/VISION.md +263 -0
  22. package/docs/assets/demo-subtitles.srt +215 -0
  23. package/docs/assets/end-card.html +276 -0
  24. package/docs/assets/mesh-diagram.html +654 -0
  25. package/docs/assets/thumbnail.html +295 -0
  26. package/docs/guides/cli.md +403 -0
  27. package/docs/guides/index.html +1346 -0
  28. package/docs/index.html +674 -0
  29. package/docs/references/claudekit-analysis.md +414 -0
  30. package/docs/references/voltagent-analysis.md +189 -0
  31. package/docs/script.js +277 -0
  32. package/docs/skills/index.html +832 -0
  33. package/docs/style.css +583 -0
  34. package/docs/video-demo-plan.md +172 -0
  35. package/extensions/ai-ml/PACK.md +38 -474
  36. package/extensions/ai-ml/skills/ai-agents.md +172 -0
  37. package/extensions/ai-ml/skills/code-sandbox.md +187 -0
  38. package/extensions/ai-ml/skills/deep-research.md +146 -0
  39. package/extensions/ai-ml/skills/embedding-search.md +66 -0
  40. package/extensions/ai-ml/skills/fine-tuning-guide.md +74 -0
  41. package/extensions/ai-ml/skills/llm-architect.md +125 -0
  42. package/extensions/ai-ml/skills/llm-integration.md +64 -0
  43. package/extensions/ai-ml/skills/prompt-patterns.md +72 -0
  44. package/extensions/ai-ml/skills/rag-patterns.md +66 -0
  45. package/extensions/ai-ml/skills/web-extraction.md +114 -0
  46. package/extensions/analytics/PACK.md +19 -484
  47. package/extensions/analytics/skills/ab-testing.md +72 -0
  48. package/extensions/analytics/skills/dashboard-patterns.md +83 -0
  49. package/extensions/analytics/skills/data-validation.md +68 -0
  50. package/extensions/analytics/skills/funnel-analysis.md +81 -0
  51. package/extensions/analytics/skills/sql-patterns.md +57 -0
  52. package/extensions/analytics/skills/statistical-analysis.md +79 -0
  53. package/extensions/analytics/skills/tracking-setup.md +71 -0
  54. package/extensions/backend/PACK.md +44 -618
  55. package/extensions/backend/skills/api-patterns.md +84 -0
  56. package/extensions/backend/skills/async-pipeline.md +193 -0
  57. package/extensions/backend/skills/auth-patterns.md +97 -0
  58. package/extensions/backend/skills/background-jobs.md +133 -0
  59. package/extensions/backend/skills/caching-patterns.md +108 -0
  60. package/extensions/backend/skills/cli-generation.md +133 -0
  61. package/extensions/backend/skills/database-patterns.md +87 -0
  62. package/extensions/backend/skills/middleware-patterns.md +104 -0
  63. package/extensions/chrome-ext/PACK.md +19 -921
  64. package/extensions/chrome-ext/skills/cws-preflight.md +143 -0
  65. package/extensions/chrome-ext/skills/cws-publish.md +104 -0
  66. package/extensions/chrome-ext/skills/ext-ai-integration.md +251 -0
  67. package/extensions/chrome-ext/skills/ext-messaging.md +139 -0
  68. package/extensions/chrome-ext/skills/ext-storage.md +133 -0
  69. package/extensions/chrome-ext/skills/mv3-scaffold.md +164 -0
  70. package/extensions/content/PACK.md +43 -335
  71. package/extensions/content/skills/blog-patterns.md +88 -0
  72. package/extensions/content/skills/cms-integration.md +131 -0
  73. package/extensions/content/skills/content-scoring.md +107 -0
  74. package/extensions/content/skills/i18n.md +83 -0
  75. package/extensions/content/skills/mdx-authoring.md +137 -0
  76. package/extensions/content/skills/reference.md +1014 -0
  77. package/extensions/content/skills/seo-patterns.md +67 -0
  78. package/extensions/content/skills/video-repurpose.md +153 -0
  79. package/extensions/devops/PACK.md +38 -457
  80. package/extensions/devops/skills/chaos-testing.md +67 -0
  81. package/extensions/devops/skills/ci-cd.md +75 -0
  82. package/extensions/devops/skills/docker.md +58 -0
  83. package/extensions/devops/skills/edge-serverless.md +163 -0
  84. package/extensions/devops/skills/infra-as-code.md +158 -0
  85. package/extensions/devops/skills/kubernetes.md +110 -0
  86. package/extensions/devops/skills/monitoring.md +57 -0
  87. package/extensions/devops/skills/server-setup.md +64 -0
  88. package/extensions/devops/skills/ssl-domain.md +42 -0
  89. package/extensions/ecommerce/PACK.md +62 -226
  90. package/extensions/ecommerce/skills/cart-system.md +79 -0
  91. package/extensions/ecommerce/skills/inventory-mgmt.md +102 -0
  92. package/extensions/ecommerce/skills/order-management.md +126 -0
  93. package/extensions/ecommerce/skills/payment-integration.md +472 -0
  94. package/extensions/ecommerce/skills/shopify-dev.md +69 -0
  95. package/extensions/ecommerce/skills/subscription-billing.md +93 -0
  96. package/extensions/ecommerce/skills/tax-compliance.md +117 -0
  97. package/extensions/gamedev/PACK.md +66 -317
  98. package/extensions/gamedev/skills/asset-pipeline.md +74 -0
  99. package/extensions/gamedev/skills/audio-system.md +129 -0
  100. package/extensions/gamedev/skills/camera-system.md +87 -0
  101. package/extensions/gamedev/skills/ecs.md +98 -0
  102. package/extensions/gamedev/skills/game-loops.md +72 -0
  103. package/extensions/gamedev/skills/input-system.md +199 -0
  104. package/extensions/gamedev/skills/multiplayer.md +180 -0
  105. package/extensions/gamedev/skills/particles.md +105 -0
  106. package/extensions/gamedev/skills/physics-engine.md +89 -0
  107. package/extensions/gamedev/skills/scene-management.md +146 -0
  108. package/extensions/gamedev/skills/threejs-patterns.md +90 -0
  109. package/extensions/gamedev/skills/webgl.md +71 -0
  110. package/extensions/mobile/PACK.md +56 -223
  111. package/extensions/mobile/skills/app-store-connect.md +152 -0
  112. package/extensions/mobile/skills/app-store-prep.md +66 -0
  113. package/extensions/mobile/skills/deep-linking.md +109 -0
  114. package/extensions/mobile/skills/flutter.md +60 -0
  115. package/extensions/mobile/skills/ios-build-pipeline.md +142 -0
  116. package/extensions/mobile/skills/native-bridge.md +66 -0
  117. package/extensions/mobile/skills/ota-updates.md +97 -0
  118. package/extensions/mobile/skills/push-notifications.md +111 -0
  119. package/extensions/mobile/skills/react-native.md +82 -0
  120. package/extensions/saas/PACK.md +26 -720
  121. package/extensions/saas/skills/billing-integration.md +121 -0
  122. package/extensions/saas/skills/feature-flags.md +130 -0
  123. package/extensions/saas/skills/multi-tenant.md +103 -0
  124. package/extensions/saas/skills/onboarding-flow.md +139 -0
  125. package/extensions/saas/skills/subscription-flow.md +95 -0
  126. package/extensions/saas/skills/team-management.md +144 -0
  127. package/extensions/security/PACK.md +10 -448
  128. package/extensions/security/skills/api-security.md +140 -0
  129. package/extensions/security/skills/compliance.md +68 -0
  130. package/extensions/security/skills/owasp-audit.md +64 -0
  131. package/extensions/security/skills/pentest-patterns.md +77 -0
  132. package/extensions/security/skills/secret-mgmt.md +65 -0
  133. package/extensions/security/skills/supply-chain.md +65 -0
  134. package/extensions/trading/PACK.md +18 -535
  135. package/extensions/trading/skills/chart-components.md +55 -0
  136. package/extensions/trading/skills/experiment-loop.md +125 -0
  137. package/extensions/trading/skills/fintech-patterns.md +47 -0
  138. package/extensions/trading/skills/indicator-library.md +58 -0
  139. package/extensions/trading/skills/quant-analysis.md +111 -0
  140. package/extensions/trading/skills/realtime-data.md +58 -0
  141. package/extensions/trading/skills/trade-logic.md +104 -0
  142. package/extensions/ui/PACK.md +36 -853
  143. package/extensions/ui/skills/a11y-audit.md +91 -0
  144. package/extensions/ui/skills/animation-patterns.md +106 -0
  145. package/extensions/ui/skills/component-patterns.md +75 -0
  146. package/extensions/ui/skills/design-decision.md +108 -0
  147. package/extensions/ui/skills/design-system.md +68 -0
  148. package/extensions/ui/skills/landing-patterns.md +155 -0
  149. package/extensions/ui/skills/palette-picker.md +173 -0
  150. package/extensions/ui/skills/react-health.md +90 -0
  151. package/extensions/ui/skills/type-system.md +125 -0
  152. package/extensions/ui/skills/web-vitals.md +153 -0
  153. package/extensions/zalo/PACK.md +117 -0
  154. package/extensions/zalo/skills/zalo-oa-mcp.md +317 -0
  155. package/extensions/zalo/skills/zalo-oa-messaging.md +429 -0
  156. package/extensions/zalo/skills/zalo-oa-setup.md +236 -0
  157. package/extensions/zalo/skills/zalo-oa-webhook.md +189 -0
  158. package/extensions/zalo/skills/zalo-personal-messaging.md +194 -0
  159. package/extensions/zalo/skills/zalo-personal-setup.md +153 -0
  160. package/extensions/zalo/skills/zalo-rate-guard.md +219 -0
  161. package/hooks/.gitkeep +0 -0
  162. package/hooks/auto-format/index.cjs +48 -0
  163. package/hooks/context-watch/index.cjs +68 -0
  164. package/hooks/hooks.json +99 -0
  165. package/hooks/metrics-collector/index.cjs +42 -0
  166. package/hooks/post-session-reflect/index.cjs +153 -0
  167. package/hooks/pre-compact/index.cjs +95 -0
  168. package/hooks/pre-tool-guard/index.cjs +68 -0
  169. package/hooks/run-hook +17 -0
  170. package/hooks/run-hook.cjs +16 -0
  171. package/hooks/run-hook.cmd +1 -0
  172. package/hooks/secrets-scan/index.cjs +100 -0
  173. package/hooks/session-start/index.cjs +65 -0
  174. package/hooks/typecheck/index.cjs +65 -0
  175. package/package.json +9 -4
  176. package/references/ui-pro-max-data/LICENSE-UI-PRO-MAX +21 -0
  177. package/references/ui-pro-max-data/charts.csv +26 -0
  178. package/references/ui-pro-max-data/colors.csv +162 -0
  179. package/references/ui-pro-max-data/styles.csv +85 -0
  180. package/references/ui-pro-max-data/typography.csv +74 -0
  181. package/references/ui-pro-max-data/ui-reasoning.csv +162 -0
  182. package/references/ui-pro-max-data/ux-guidelines.csv +100 -0
  183. package/skills/ba/SKILL.md +10 -0
  184. package/skills/brainstorm/SKILL.md +63 -1
  185. package/skills/completion-gate/SKILL.md +34 -1
  186. package/skills/context-engine/SKILL.md +13 -0
  187. package/skills/cook/SKILL.md +155 -5
  188. package/skills/debug/SKILL.md +56 -1
  189. package/skills/design/SKILL.md +11 -0
  190. package/skills/fix/SKILL.md +26 -1
  191. package/skills/mcp-builder/SKILL.md +48 -1
  192. package/skills/plan/SKILL.md +23 -6
  193. package/skills/review/SKILL.md +44 -5
  194. package/skills/review-intake/SKILL.md +17 -1
  195. package/skills/skill-forge/SKILL.md +38 -3
  196. package/skills/skill-router/SKILL.md +89 -7
  197. package/skills/team/SKILL.md +24 -1
  198. package/skills/test/SKILL.md +28 -1
  199. package/skills/verification/SKILL.md +98 -1
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
+ }