@rune-kit/rune 2.3.3 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +86 -17
  2. package/compiler/__tests__/pack-split.test.js +141 -1
  3. package/compiler/__tests__/parser.test.js +147 -55
  4. package/compiler/__tests__/scripts-bundling.test.js +283 -0
  5. package/compiler/__tests__/skill-index.test.js +218 -0
  6. package/compiler/__tests__/tier-override.test.js +41 -0
  7. package/compiler/adapters/antigravity.js +71 -53
  8. package/compiler/adapters/codex.js +4 -0
  9. package/compiler/adapters/cursor.js +4 -0
  10. package/compiler/adapters/generic.js +4 -0
  11. package/compiler/adapters/openclaw.js +4 -0
  12. package/compiler/adapters/opencode.js +4 -0
  13. package/compiler/adapters/windsurf.js +4 -0
  14. package/compiler/bin/rune.js +355 -355
  15. package/compiler/doctor.js +11 -1
  16. package/compiler/emitter.js +678 -386
  17. package/compiler/parser.js +267 -247
  18. package/compiler/transforms/scripts-path.js +18 -0
  19. package/extensions/zalo/PACK.md +20 -1
  20. package/extensions/zalo/references/conversation-management.md +214 -0
  21. package/extensions/zalo/references/eval-scenarios.md +157 -0
  22. package/extensions/zalo/references/listen-mode.md +237 -0
  23. package/extensions/zalo/references/mcp-production.md +274 -0
  24. package/extensions/zalo/references/multi-account-proxy.md +224 -0
  25. package/extensions/zalo/references/vietqr-banking.md +160 -0
  26. package/hooks/hooks.json +12 -0
  27. package/hooks/intent-router/index.cjs +108 -0
  28. package/hooks/pre-tool-guard/index.cjs +177 -68
  29. package/package.json +63 -64
  30. package/skills/brainstorm/SKILL.md +2 -0
  31. package/skills/cook/SKILL.md +661 -648
  32. package/skills/debug/SKILL.md +394 -392
  33. package/skills/deploy/SKILL.md +2 -0
  34. package/skills/fix/SKILL.md +283 -281
  35. package/skills/marketing/SKILL.md +3 -0
  36. package/skills/onboard/SKILL.md +7 -0
  37. package/skills/plan/SKILL.md +344 -342
  38. package/skills/preflight/SKILL.md +362 -360
  39. package/skills/review/SKILL.md +491 -489
  40. package/skills/scout/SKILL.md +1 -0
  41. package/skills/sentinel/SKILL.md +319 -296
  42. package/skills/sentinel/references/auth-crypto-reference.md +192 -0
  43. package/skills/sentinel/references/desktop-security.md +201 -0
  44. package/skills/sentinel/references/supply-chain.md +160 -0
  45. package/skills/session-bridge/SKILL.md +1 -0
  46. package/skills/slides/SKILL.md +142 -0
  47. package/skills/slides/scripts/build-deck.js +158 -0
  48. package/skills/team/SKILL.md +1 -0
  49. package/skills/test/SKILL.md +587 -585
  50. package/skills/verification/SKILL.md +1 -0
  51. package/skills/watchdog/SKILL.md +2 -0
  52. package/docs/ANTIGRAVITY-GAP-ANALYSIS.md +0 -369
  53. package/docs/ARCHITECTURE.md +0 -332
  54. package/docs/COMMUNITY-PACKS.md +0 -109
  55. package/docs/CONTRIBUTING-L4.md +0 -215
  56. package/docs/CROSS-IDE-ANALYSIS.md +0 -164
  57. package/docs/EXTENSION-TEMPLATE.md +0 -126
  58. package/docs/MESH-RULES.md +0 -34
  59. package/docs/MULTI-PLATFORM.md +0 -804
  60. package/docs/SKILL-DEPTH-AUDIT.md +0 -191
  61. package/docs/SKILL-TEMPLATE.md +0 -118
  62. package/docs/TRADE-MATRIX.md +0 -327
  63. package/docs/VERSIONING.md +0 -91
  64. package/docs/VISION.md +0 -263
  65. package/docs/assets/demo-subtitles.srt +0 -215
  66. package/docs/assets/end-card.html +0 -276
  67. package/docs/assets/mesh-diagram.html +0 -654
  68. package/docs/assets/thumbnail.html +0 -295
  69. package/docs/guides/cli.md +0 -403
  70. package/docs/guides/index.html +0 -1450
  71. package/docs/index.html +0 -1005
  72. package/docs/references/claudekit-analysis.md +0 -414
  73. package/docs/references/voltagent-analysis.md +0 -189
  74. package/docs/script.js +0 -495
  75. package/docs/skills/index.html +0 -832
  76. package/docs/style.css +0 -958
  77. package/docs/video-demo-plan.md +0 -172
package/docs/style.css DELETED
@@ -1,958 +0,0 @@
1
- /* ─── RESET & BASE ─── */
2
- *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
3
-
4
- :root {
5
- /* Warm cream palette (default — light) */
6
- --bg-base: #ece4d6;
7
- --bg-card: #f5f0e8;
8
- --bg-elevated: #ede7db;
9
- --bg-section-alt: #e4dbc9;
10
- --bg-code: rgba(31,45,61,0.06);
11
- --text-primary: #1f2d3d;
12
- --text-secondary: #4b5563;
13
- --text-muted: #7a8494;
14
- --border: rgba(31,45,61,0.1);
15
- --accent: #5b7852;
16
- --accent-dim: rgba(91,120,82,0.1);
17
- --accent-glow: rgba(91,120,82,0.2);
18
- --cyan: #3d7a6a;
19
- --loss: #c0392b;
20
- --profit: #5b7852;
21
- --nav-bg: rgba(236,228,214,0.9);
22
- --font-display: 'Space Grotesk', system-ui, sans-serif;
23
- --font-body: 'Inter', system-ui, sans-serif;
24
- --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
25
- --radius-sm: 6px;
26
- --radius-md: 10px;
27
- --radius-lg: 16px;
28
- --shadow-card: 0 4px 24px rgba(31,45,61,0.08);
29
- --transition: 250ms ease;
30
- --max-width: 1120px;
31
- }
32
-
33
- /* ─── DARK MODE ─── */
34
- [data-theme="dark"] {
35
- --bg-base: #0a0f1a;
36
- --bg-card: #111827;
37
- --bg-elevated: #1a2332;
38
- --bg-section-alt: #080c14;
39
- --bg-code: rgba(0,0,0,0.4);
40
- --text-primary: #f0f4f8;
41
- --text-secondary: #8896a8;
42
- --text-muted: #5a6a7a;
43
- --border: #1e2d3d;
44
- --accent: #10b981;
45
- --accent-dim: rgba(16, 185, 129, 0.15);
46
- --accent-glow: rgba(16, 185, 129, 0.3);
47
- --loss: #ef4444;
48
- --profit: #10b981;
49
- --nav-bg: rgba(10, 15, 26, 0.85);
50
- --shadow-card: 0 4px 24px rgba(0,0,0,0.3);
51
- }
52
-
53
- html { scroll-behavior: smooth; }
54
-
55
- body {
56
- font-family: var(--font-body);
57
- background: var(--bg-base);
58
- color: var(--text-primary);
59
- line-height: 1.6;
60
- -webkit-font-smoothing: antialiased;
61
- overflow-x: hidden;
62
- }
63
-
64
- a { color: var(--accent); text-decoration: none; transition: opacity var(--transition); }
65
- a:hover { opacity: 0.85; }
66
-
67
- .container { max-width: var(--max-width); margin: 0 auto; padding: 0 24px; }
68
-
69
- /* ─── NAV ─── */
70
- .nav {
71
- position: fixed; top: 0; left: 0; right: 0; z-index: 100;
72
- background: var(--nav-bg);
73
- backdrop-filter: blur(12px);
74
- border-bottom: 1px solid var(--border);
75
- }
76
- .nav-inner {
77
- max-width: var(--max-width); margin: 0 auto;
78
- display: flex; align-items: center; justify-content: space-between;
79
- padding: 14px 24px;
80
- }
81
- .nav-logo {
82
- font-family: var(--font-display); font-weight: 700; font-size: 20px;
83
- color: var(--text-primary); display: flex; align-items: center; gap: 8px;
84
- }
85
- .logo-rune { color: var(--accent); font-size: 18px; }
86
- .nav-links { display: flex; align-items: center; gap: 28px; }
87
- .nav-links a { color: var(--text-secondary); font-size: 14px; font-weight: 500; }
88
- .nav-links a:hover { color: var(--text-primary); opacity: 1; }
89
-
90
- /* ─── BUTTONS ─── */
91
- .btn {
92
- display: inline-flex; align-items: center; justify-content: center;
93
- padding: 10px 22px; border-radius: var(--radius-sm);
94
- font-family: var(--font-body); font-weight: 600; font-size: 14px;
95
- cursor: pointer; transition: all var(--transition); border: none;
96
- }
97
- .btn-sm { padding: 6px 14px; font-size: 13px; }
98
- .btn-primary {
99
- background: var(--accent); color: #fff;
100
- box-shadow: 0 0 20px var(--accent-glow);
101
- }
102
- .btn-primary:hover { background: #0ea572; transform: translateY(-1px); opacity: 1; }
103
- .btn-ghost {
104
- background: transparent; color: var(--text-secondary);
105
- border: 1px solid var(--border);
106
- }
107
- .btn-ghost:hover { border-color: var(--accent); color: var(--text-primary); opacity: 1; }
108
-
109
- /* ─── HERO ─── */
110
- .hero {
111
- position: relative; min-height: 100vh;
112
- display: flex; align-items: center; justify-content: center;
113
- padding: 120px 24px 80px;
114
- }
115
- .hero-mesh {
116
- position: absolute; inset: 0; overflow: hidden; opacity: 0.45;
117
- }
118
- #mesh-canvas { width: 100%; height: 100%; }
119
- .hero-content {
120
- position: relative; z-index: 2; text-align: center; max-width: 680px;
121
- }
122
- .hero-badge {
123
- display: inline-block; font-family: var(--font-mono); font-size: 13px;
124
- color: var(--accent); background: var(--accent-dim);
125
- padding: 6px 16px; border-radius: 999px; margin-bottom: 28px;
126
- border: 1px solid rgba(91,120,82,0.25);
127
- }
128
- .hero h1 {
129
- font-family: var(--font-display); font-size: clamp(40px, 7vw, 72px);
130
- font-weight: 700; line-height: 1.1; margin-bottom: 20px;
131
- }
132
- .accent { color: var(--accent); }
133
- .hero-sub {
134
- font-size: 18px; color: var(--text-secondary); max-width: 520px;
135
- margin: 0 auto 36px; line-height: 1.7;
136
- }
137
- .hero-actions { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
138
-
139
- /* ─── SECTIONS ─── */
140
- .section { padding: 100px 0; }
141
- .section-dark { background: var(--bg-section-alt); }
142
- .section h2 {
143
- font-family: var(--font-display); font-size: 36px; font-weight: 700;
144
- text-align: center; margin-bottom: 12px;
145
- }
146
- .section-sub {
147
- text-align: center; color: var(--text-secondary); font-size: 17px;
148
- max-width: 560px; margin: 0 auto 48px;
149
- }
150
-
151
- /* ─── COMPARE (PROBLEM) ─── */
152
- .compare-grid {
153
- display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;
154
- }
155
- .compare-card {
156
- background: var(--bg-card); border: 1px solid var(--border);
157
- border-radius: var(--radius-lg); padding: 28px;
158
- }
159
- .compare-card h3 {
160
- font-family: var(--font-display); font-size: 20px; margin-bottom: 16px;
161
- }
162
- .compare-diagram {
163
- font-family: var(--font-mono); font-size: 14px; line-height: 1.8;
164
- color: var(--text-secondary); margin-bottom: 14px;
165
- background: rgba(31,45,61,0.05); padding: 14px; border-radius: var(--radius-sm);
166
- }
167
- .compare-good { border-color: var(--accent); }
168
- .compare-good h3 { color: var(--accent); }
169
- .text-loss { color: var(--loss); }
170
- .text-profit { color: var(--profit); }
171
-
172
- /* ─── LAYERS (ARCHITECTURE) ─── */
173
- .layers { display: flex; flex-direction: column; gap: 10px; max-width: 700px; margin: 0 auto; }
174
- .layer {
175
- display: flex; align-items: stretch; border-radius: var(--radius-md);
176
- overflow: hidden; border: 1px solid var(--border);
177
- transition: border-color var(--transition);
178
- }
179
- .layer:hover { border-color: var(--accent); }
180
- .layer-label {
181
- display: flex; align-items: center; justify-content: center;
182
- min-width: 56px; font-family: var(--font-mono); font-weight: 700; font-size: 14px;
183
- color: #fff;
184
- }
185
- .layer-0 .layer-label { background: var(--accent); }
186
- .layer-1 .layer-label { background: #6366f1; }
187
- .layer-2 .layer-label { background: #3b82f6; }
188
- .layer-3 .layer-label { background: #8b5cf6; }
189
- .layer-4 .layer-label { background: #f59e0b; }
190
- .layer-content {
191
- flex: 1; padding: 16px 20px; background: var(--bg-card);
192
- display: flex; flex-wrap: wrap; align-items: baseline; gap: 8px 16px;
193
- }
194
- .layer-content strong { font-family: var(--font-display); font-size: 16px; }
195
- .layer-count {
196
- font-family: var(--font-mono); font-size: 12px;
197
- color: var(--text-muted); background: rgba(31,45,61,0.06);
198
- padding: 2px 8px; border-radius: 4px;
199
- }
200
- .layer-content p {
201
- width: 100%; font-size: 14px; color: var(--text-secondary); margin: 0;
202
- }
203
-
204
- /* ─── WORKFLOWS ─── */
205
- .workflow-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
206
- .workflow-card {
207
- background: var(--bg-card); border: 1px solid var(--border);
208
- border-radius: var(--radius-lg); padding: 28px;
209
- }
210
- .workflow-card h3 {
211
- font-family: var(--font-mono); font-size: 18px; color: var(--accent);
212
- margin-bottom: 6px;
213
- }
214
- .workflow-desc { font-size: 14px; color: var(--text-secondary); margin-bottom: 20px; }
215
- .workflow-phases { display: flex; flex-direction: column; gap: 6px; }
216
- .phase {
217
- font-size: 13px; color: var(--text-secondary); padding: 6px 10px;
218
- background: rgba(31,45,61,0.03); border-radius: var(--radius-sm);
219
- border-left: 2px solid var(--border);
220
- transition: border-color var(--transition);
221
- }
222
- .phase:hover { border-left-color: var(--accent); }
223
- .phase-num {
224
- font-family: var(--font-mono); font-weight: 700; color: var(--accent);
225
- margin-right: 8px;
226
- }
227
-
228
- /* ─── FEATURES ─── */
229
- .features-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
230
- .feature-card {
231
- background: var(--bg-card); border: 1px solid var(--border);
232
- border-radius: var(--radius-lg); padding: 28px;
233
- transition: border-color var(--transition), transform var(--transition);
234
- }
235
- .feature-card:hover { border-color: var(--accent); transform: translateY(-2px); }
236
- .feature-icon { font-size: 28px; margin-bottom: 14px; }
237
- .feature-card h3 {
238
- font-family: var(--font-display); font-size: 18px; margin-bottom: 8px;
239
- }
240
- .feature-card p { font-size: 14px; color: var(--text-secondary); line-height: 1.6; }
241
-
242
- /* ─── INSTALL ─── */
243
- .install-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 20px; max-width: 960px; margin: 0 auto; }
244
- .install-card {
245
- background: var(--bg-card); border: 1px solid var(--border);
246
- border-radius: var(--radius-lg); padding: 32px; text-align: center;
247
- }
248
- .install-card h3 { font-family: var(--font-display); font-size: 20px; margin-bottom: 8px; }
249
- .install-badge {
250
- font-family: var(--font-mono); font-size: 12px;
251
- color: var(--accent); display: inline-block; margin-bottom: 18px;
252
- }
253
- .code-block {
254
- background: var(--bg-code); border: 1px solid var(--border);
255
- border-radius: var(--radius-sm); padding: 14px 20px;
256
- font-family: var(--font-mono); font-size: 14px;
257
- color: var(--accent); margin-bottom: 14px; text-align: left;
258
- overflow-x: auto;
259
- }
260
- .install-card p:last-child { font-size: 14px; color: var(--text-secondary); }
261
-
262
- /* ─── GUIDE DIRECTORY ─── */
263
- .guide-grid {
264
- display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
265
- gap: 12px; max-width: 960px; margin: 0 auto;
266
- }
267
- .guide-link {
268
- display: flex; align-items: center; gap: 16px;
269
- padding: 16px 20px; background: var(--bg-card);
270
- border: 1px solid var(--border); border-radius: var(--radius-md);
271
- color: var(--text-primary);
272
- transition: border-color var(--transition), transform var(--transition);
273
- }
274
- .guide-link:hover { border-color: var(--accent); transform: translateY(-2px); opacity: 1; }
275
- .guide-icon { font-size: 24px; flex-shrink: 0; }
276
- .guide-link strong { display: block; font-size: 15px; margin-bottom: 2px; }
277
- .guide-link span { font-size: 13px; color: var(--text-secondary); }
278
-
279
- /* ─── PRICING ─── */
280
-
281
- /* Persona cards — "who needs what" */
282
- .pricing-personas {
283
- display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px;
284
- margin-bottom: 40px; max-width: 960px; margin-left: auto; margin-right: auto;
285
- }
286
- .persona-card {
287
- background: var(--bg-elevated); border: 1px solid var(--border);
288
- border-radius: var(--radius-md); padding: 20px; text-align: center;
289
- }
290
- .persona-icon { font-size: 28px; margin-bottom: 10px; }
291
- .persona-card p { font-size: 14px; color: var(--text-secondary); line-height: 1.6; }
292
- .persona-card strong { color: var(--text-primary); }
293
-
294
- /* 3-column pricing grid */
295
- .pricing-grid-3 {
296
- display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px;
297
- max-width: 1060px; margin: 0 auto;
298
- }
299
- .pricing-card {
300
- background: var(--bg-card); border: 1px solid var(--border);
301
- border-radius: var(--radius-lg); padding: 32px;
302
- display: flex; flex-direction: column;
303
- }
304
- .pricing-pro {
305
- border-color: rgba(180,120,40,0.3);
306
- background: linear-gradient(168deg, var(--bg-card) 60%, rgba(180,120,40,0.05) 100%);
307
- }
308
- .pricing-biz {
309
- border-color: rgba(100,70,180,0.3);
310
- background: linear-gradient(168deg, var(--bg-card) 60%, rgba(100,70,180,0.06) 100%);
311
- transform: scale(1.03);
312
- box-shadow: 0 0 30px rgba(100,70,180,0.08), 0 8px 32px rgba(31,45,61,0.1);
313
- z-index: 1;
314
- }
315
- @media (max-width: 768px) {
316
- .pricing-biz { transform: scale(1); }
317
- }
318
- .pricing-tier { margin-bottom: 16px; }
319
- .pricing-badge {
320
- display: inline-block; font-family: var(--font-mono); font-size: 11px;
321
- font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px;
322
- padding: 3px 10px; border-radius: 4px; margin-bottom: 12px;
323
- }
324
- .pricing-badge-free { background: var(--accent-dim); color: var(--accent); }
325
- .pricing-badge-pro { background: rgba(180,120,40,0.12); color: #b47828; }
326
- .pricing-badge-biz { background: rgba(100,70,180,0.12); color: #6446b4; }
327
- .pricing-card h3 {
328
- font-family: var(--font-display); font-size: 26px; font-weight: 700;
329
- margin-bottom: 4px;
330
- }
331
- .pricing-price {
332
- font-family: var(--font-mono); font-size: 38px; font-weight: 700;
333
- color: var(--text-primary); line-height: 1.1;
334
- }
335
- .pricing-forever { font-size: 15px; color: var(--text-muted); font-weight: 400; }
336
- .pricing-period { font-size: 15px; color: var(--text-muted); font-weight: 400; }
337
- .pricing-desc {
338
- font-size: 14px; color: var(--text-secondary); line-height: 1.6;
339
- margin-bottom: 12px;
340
- }
341
- .pricing-who {
342
- font-size: 12px; color: var(--text-muted); line-height: 1.5;
343
- margin-bottom: 20px; font-style: italic;
344
- }
345
- .pricing-features {
346
- list-style: none; display: flex; flex-direction: column; gap: 9px;
347
- margin-bottom: 24px; flex: 1;
348
- }
349
- .pricing-features li {
350
- font-size: 13px; color: var(--text-secondary); line-height: 1.5;
351
- padding-left: 20px; position: relative;
352
- }
353
- .pricing-features li::before {
354
- content: '\2713'; position: absolute; left: 0;
355
- color: var(--accent); font-weight: 700; font-size: 12px;
356
- }
357
- .pricing-pro .pricing-features li::before { color: #b47828; }
358
- .pricing-biz .pricing-features li::before { color: #6446b4; }
359
- .pricing-features li strong { color: var(--text-primary); font-weight: 600; }
360
-
361
- /* BEST VALUE badge */
362
- .pricing-badge-best {
363
- background: linear-gradient(135deg, #b47828, #6446b4);
364
- color: #fff; font-size: 12px; letter-spacing: 1px;
365
- }
366
-
367
- /* What's Included breakdown (Business card) */
368
- .includes-breakdown {
369
- margin-bottom: 16px;
370
- }
371
- .includes-label {
372
- font-family: var(--font-display); font-size: 14px; font-weight: 700;
373
- color: var(--text-primary); margin-bottom: 10px;
374
- }
375
- .includes-box {
376
- border: 1px solid var(--border); border-radius: 8px;
377
- padding: 12px 14px; margin-bottom: 8px;
378
- background: rgba(31,45,61,0.03);
379
- }
380
- .includes-box strong {
381
- font-family: var(--font-display); font-size: 13px; color: var(--text-primary);
382
- }
383
- .includes-value {
384
- font-family: var(--font-mono); font-size: 11px; color: var(--text-muted);
385
- margin-left: 6px;
386
- }
387
- .includes-box ul {
388
- list-style: none; margin-top: 6px; display: flex; flex-direction: column; gap: 3px;
389
- }
390
- .includes-box ul li {
391
- font-size: 12px; color: var(--text-secondary); line-height: 1.5;
392
- padding-left: 16px; position: relative;
393
- }
394
- .includes-box ul li::before {
395
- content: '\2713'; position: absolute; left: 0;
396
- font-weight: 700; font-size: 11px;
397
- }
398
- .includes-box-pro ul li::before { color: #b47828; }
399
- .includes-box-biz ul li::before { color: #6446b4; }
400
-
401
- /* Guarantee note */
402
- .pricing-guarantee {
403
- color: var(--accent) !important; font-weight: 500;
404
- }
405
-
406
- /* Promo ribbon on pricing cards */
407
- .promo-ribbon {
408
- position: absolute; top: -1px; right: 24px;
409
- background: linear-gradient(135deg, #5b7852, #7a9e6e);
410
- color: #fff; font-family: var(--font-mono); font-size: 11px;
411
- font-weight: 700; letter-spacing: 0.5px; text-transform: uppercase;
412
- padding: 6px 14px 8px; border-radius: 0 0 8px 8px;
413
- box-shadow: 0 4px 12px rgba(91,120,82,0.3);
414
- animation: promo-pulse 2s ease-in-out infinite;
415
- }
416
- @keyframes promo-pulse {
417
- 0%, 100% { box-shadow: 0 4px 12px rgba(91,120,82,0.3); }
418
- 50% { box-shadow: 0 4px 20px rgba(91,120,82,0.5); }
419
- }
420
- .pricing-card { position: relative; overflow: visible; }
421
-
422
- /* Promo save badge under price */
423
- .promo-save {
424
- display: inline-block; margin-top: 6px;
425
- font-family: var(--font-mono); font-size: 13px; font-weight: 700;
426
- color: #5b7852; background: rgba(91,120,82,0.1);
427
- padding: 3px 10px; border-radius: 4px;
428
- }
429
- .btn-pro {
430
- display: inline-flex; align-items: center; justify-content: center;
431
- padding: 10px 22px; border-radius: var(--radius-sm);
432
- font-family: var(--font-body); font-weight: 600; font-size: 14px;
433
- cursor: pointer; transition: all var(--transition); border: none;
434
- background: #b47828; color: #fff;
435
- box-shadow: 0 2px 12px rgba(180,120,40,0.2);
436
- }
437
- .btn-pro:hover { background: #9a6520; transform: translateY(-1px); opacity: 1; }
438
- .btn-biz {
439
- display: inline-flex; align-items: center; justify-content: center;
440
- padding: 10px 22px; border-radius: var(--radius-sm);
441
- font-family: var(--font-body); font-weight: 600; font-size: 14px;
442
- cursor: pointer; transition: all var(--transition); border: none;
443
- background: #6446b4; color: #fff;
444
- box-shadow: 0 2px 12px rgba(100,70,180,0.2);
445
- }
446
- .btn-biz:hover { background: #5538a0; transform: translateY(-1px); opacity: 1; }
447
- .pricing-note {
448
- font-size: 12px; color: var(--text-muted); text-align: center;
449
- margin-top: 10px; line-height: 1.5;
450
- }
451
-
452
- /* Comparison table */
453
- .pricing-compare {
454
- max-width: 860px; margin: 48px auto 0;
455
- }
456
- .pricing-compare h3 {
457
- font-family: var(--font-display); font-size: 22px; font-weight: 700;
458
- text-align: center; margin-bottom: 20px;
459
- }
460
- .compare-table {
461
- width: 100%; border-collapse: collapse;
462
- font-size: 13px; color: var(--text-secondary);
463
- }
464
- .compare-table thead th {
465
- font-family: var(--font-display); font-weight: 600; font-size: 14px;
466
- color: var(--text-primary); padding: 12px 16px;
467
- border-bottom: 2px solid var(--border); text-align: center;
468
- }
469
- .compare-table thead th:first-child { text-align: left; }
470
- .compare-table .table-price {
471
- font-family: var(--font-mono); font-size: 11px; color: var(--text-muted);
472
- font-weight: 400;
473
- }
474
- .compare-table tbody td {
475
- padding: 10px 16px; border-bottom: 1px solid var(--border);
476
- text-align: center;
477
- }
478
- .compare-table tbody td:first-child { text-align: left; color: var(--text-primary); }
479
- .compare-table .check { color: var(--accent); font-weight: 700; font-size: 16px; }
480
- .compare-table .dash { color: var(--text-muted); }
481
- .compare-table tbody tr:hover { background: rgba(31,45,61,0.03); }
482
-
483
- /* ─── EXTENSIONS ─── */
484
- .ext-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
485
- .ext-card {
486
- background: var(--bg-card); border: 1px solid var(--border);
487
- border-radius: var(--radius-md); padding: 18px;
488
- display: flex; flex-direction: column; gap: 4px;
489
- transition: border-color var(--transition);
490
- }
491
- .ext-card:hover { border-color: var(--accent); }
492
- .ext-card strong { font-family: var(--font-mono); font-size: 13px; }
493
- .ext-card span { font-size: 13px; color: var(--text-muted); }
494
-
495
- /* ─── STATS ─── */
496
- .stats-grid {
497
- display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px;
498
- text-align: center;
499
- }
500
- .stat-num {
501
- font-family: var(--font-mono); font-size: 52px; font-weight: 700;
502
- color: var(--accent); display: block; line-height: 1;
503
- }
504
- .stat-label {
505
- font-size: 14px; color: var(--text-secondary); margin-top: 8px;
506
- display: block;
507
- }
508
-
509
- /* ─── FOOTER ─── */
510
- .footer {
511
- border-top: 1px solid var(--border); padding: 32px 0;
512
- background: var(--bg-section-alt);
513
- }
514
- .footer-inner {
515
- display: flex; align-items: center; justify-content: space-between;
516
- }
517
- .footer-inner p { font-size: 14px; color: var(--text-secondary); }
518
- .footer-links { display: flex; gap: 24px; }
519
- .footer-links a { font-size: 13px; color: var(--text-muted); }
520
- .footer-links a:hover { color: var(--text-primary); }
521
-
522
- /* ─── RESPONSIVE ─── */
523
- @media (max-width: 900px) {
524
- .compare-grid, .workflow-grid, .features-grid { grid-template-columns: 1fr; }
525
- .ext-grid { grid-template-columns: repeat(2, 1fr); }
526
- .install-grid, .pricing-grid, .pricing-grid-3 { grid-template-columns: 1fr; }
527
- .pricing-personas { grid-template-columns: 1fr; }
528
- .compare-table { font-size: 12px; }
529
- .compare-table thead th, .compare-table tbody td { padding: 8px 10px; }
530
- .stats-grid { grid-template-columns: repeat(2, 1fr); gap: 32px; }
531
- .nav-links a:not(.btn):not(.nav-ctrl) { display: none; }
532
- .nav-controls { gap: 6px; }
533
- }
534
-
535
- @media (max-width: 640px) {
536
- .section { padding: 64px 0; }
537
- .section h2 { font-size: 28px; }
538
- .hero { padding: 100px 20px 60px; }
539
- .hero h1 { font-size: 36px; }
540
- .footer-inner { flex-direction: column; gap: 16px; text-align: center; }
541
- .ext-grid { grid-template-columns: 1fr; }
542
- .stats-grid { grid-template-columns: repeat(2, 1fr); }
543
- }
544
-
545
- /* ─── THEME TOGGLE + TRANSLATE ─── */
546
- .nav-controls { display: flex; align-items: center; gap: 8px; }
547
- .theme-toggle, .lang-toggle {
548
- background: none; border: 1px solid var(--border); color: var(--text-secondary);
549
- width: 34px; height: 34px; border-radius: var(--radius-sm);
550
- cursor: pointer; display: flex; align-items: center; justify-content: center;
551
- font-size: 16px; transition: all var(--transition); flex-shrink: 0;
552
- }
553
- .theme-toggle:hover, .lang-toggle:hover {
554
- border-color: var(--accent); color: var(--text-primary);
555
- }
556
- /* Google Translate — hide ALL injected elements */
557
- .goog-te-banner-frame { display: none !important; }
558
- body { top: 0 !important; position: static !important; }
559
- .skiptranslate { display: none !important; height: 0 !important; overflow: hidden !important; }
560
- .goog-te-spinner-pos, .goog-te-balloon-frame, #goog-gt-tt, .goog-te-ftab-frame { display: none !important; }
561
- .goog-text-highlight { background: none !important; box-shadow: none !important; }
562
- font[style] > font { vertical-align: unset !important; }
563
- #_gt_dummy { display: none !important; visibility: hidden !important; height: 0 !important; overflow: hidden !important; }
564
- /* Language dropdown */
565
- .lang-dropdown { position: relative; }
566
- .lang-menu {
567
- position: absolute; top: calc(100% + 6px); right: 0; z-index: 100;
568
- background: var(--bg-card); border: 1px solid var(--border);
569
- border-radius: var(--radius-md); padding: 4px; min-width: 140px;
570
- box-shadow: 0 8px 24px rgba(0,0,0,0.15);
571
- display: flex; flex-direction: column;
572
- }
573
- .lang-menu[hidden] { display: none; }
574
- .lang-menu button {
575
- background: none; border: none; color: var(--text-secondary);
576
- padding: 7px 12px; font-family: var(--font-body); font-size: 13px;
577
- text-align: left; cursor: pointer; border-radius: var(--radius-sm);
578
- transition: all var(--transition);
579
- }
580
- .lang-menu button:hover {
581
- background: var(--bg-elevated); color: var(--text-primary);
582
- }
583
-
584
- /* ─── PAYMENT MODAL ─── */
585
- .pay-modal { position: fixed; inset: 0; z-index: 9999; display: flex; align-items: center; justify-content: center; }
586
- .pay-modal[hidden] { display: none; }
587
- .pay-backdrop { position: absolute; inset: 0; background: rgba(0,0,0,0.7); backdrop-filter: blur(4px); }
588
- .pay-dialog {
589
- position: relative; background: var(--bg-card); border: 1px solid var(--border);
590
- border-radius: var(--radius-lg); padding: 32px; max-width: 440px; width: 90%;
591
- box-shadow: 0 24px 64px rgba(0,0,0,0.5); max-height: 90vh; overflow-y: auto;
592
- }
593
- .pay-close {
594
- position: absolute; top: 12px; right: 16px; background: none; border: none;
595
- color: var(--text-muted); font-size: 24px; cursor: pointer; line-height: 1;
596
- padding: 4px; transition: color var(--transition);
597
- }
598
- .pay-close:hover { color: var(--text-primary); }
599
- .pay-back {
600
- background: none; border: none; color: var(--text-muted); font-size: 14px;
601
- cursor: pointer; padding: 0; margin-bottom: 12px; transition: color var(--transition);
602
- }
603
- .pay-back:hover { color: var(--text-primary); }
604
- .pay-step h3 { font-family: var(--font-display); font-size: 22px; margin-bottom: 4px; color: var(--text-primary); }
605
- .pay-subtitle { font-size: 14px; color: var(--text-secondary); margin-bottom: 20px; }
606
-
607
- /* Payment method selector */
608
- .pay-options { display: flex; flex-direction: column; gap: 12px; }
609
- .pay-option {
610
- display: flex; align-items: center; gap: 14px; padding: 16px;
611
- background: var(--bg-base); border: 1px solid var(--border); border-radius: var(--radius-md);
612
- cursor: pointer; transition: all var(--transition); text-decoration: none; color: inherit;
613
- }
614
- .pay-option:hover { border-color: var(--accent); background: var(--bg-elevated); }
615
- .pay-option-flag { font-size: 28px; flex-shrink: 0; }
616
- .pay-option-info { flex: 1; display: flex; flex-direction: column; gap: 2px; }
617
- .pay-option-info strong { font-size: 15px; color: var(--text-primary); }
618
- .pay-option-info span { font-size: 12px; color: var(--text-muted); }
619
- .pay-option-price { font-family: var(--font-mono); font-weight: 700; font-size: 14px !important; color: var(--accent) !important; margin-top: 2px; }
620
- .pay-option-arrow { font-size: 18px; color: var(--text-muted); flex-shrink: 0; }
621
-
622
- /* Form inputs */
623
- .pay-label { display: block; font-size: 13px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; }
624
- .pay-input {
625
- width: 100%; padding: 10px 14px; background: var(--bg-base); border: 1px solid var(--border);
626
- border-radius: var(--radius-sm); color: var(--text-primary); font-family: var(--font-mono);
627
- font-size: 14px; outline: none; transition: border-color var(--transition); margin-bottom: 14px;
628
- }
629
- .pay-input:focus { border-color: var(--accent); }
630
- .pay-input::placeholder { color: var(--text-muted); }
631
- .pay-error { color: var(--loss); font-size: 13px; margin-top: 8px; text-align: center; }
632
-
633
- /* QR section */
634
- .pay-qr { text-align: center; margin: 16px 0; }
635
- .pay-qr img { width: 240px; height: 240px; border-radius: var(--radius-md); background: #fff; }
636
- .pay-details {
637
- background: var(--bg-base); border: 1px solid var(--border);
638
- border-radius: var(--radius-md); padding: 14px; margin-bottom: 16px;
639
- }
640
- .pay-detail-row { display: flex; justify-content: space-between; align-items: center; padding: 6px 0; font-size: 13px; }
641
- .pay-detail-row span { color: var(--text-muted); }
642
- .pay-detail-row strong { color: var(--text-primary); }
643
- .pay-mono { font-family: var(--font-mono); font-size: 13px; }
644
- .pay-status {
645
- display: flex; align-items: center; justify-content: center; gap: 10px;
646
- padding: 12px; border-radius: var(--radius-sm); font-size: 14px;
647
- background: var(--accent-dim); color: var(--accent); font-weight: 500;
648
- }
649
- .pay-spinner {
650
- width: 16px; height: 16px; border: 2px solid var(--accent);
651
- border-top-color: transparent; border-radius: 50%;
652
- animation: spin 0.8s linear infinite;
653
- }
654
- @keyframes spin { to { transform: rotate(360deg); } }
655
- .pay-hint { font-size: 12px; color: var(--text-muted); text-align: center; margin-top: 12px; line-height: 1.5; }
656
- /* Success page */
657
- .pay-success { text-align: center; }
658
-
659
- .pay-success-badge {
660
- width: 72px; height: 72px; border-radius: 50%;
661
- background: var(--accent-dim); color: var(--accent);
662
- display: flex; align-items: center; justify-content: center;
663
- margin: 0 auto 20px;
664
- animation: successPop 0.4s cubic-bezier(0.34, 1.56, 0.64, 1) both;
665
- }
666
-
667
- .pay-success-circle {
668
- stroke-dasharray: 151; stroke-dashoffset: 151;
669
- animation: successCircle 0.6s 0.2s ease-out forwards;
670
- }
671
- .pay-success-tick {
672
- stroke-dasharray: 40; stroke-dashoffset: 40;
673
- animation: successTick 0.4s 0.6s ease-out forwards;
674
- }
675
-
676
- @keyframes successPop { 0% { transform: scale(0); opacity: 0; } 100% { transform: scale(1); opacity: 1; } }
677
- @keyframes successCircle { to { stroke-dashoffset: 0; } }
678
- @keyframes successTick { to { stroke-dashoffset: 0; } }
679
-
680
- .pay-success-title {
681
- font-family: var(--font-display); font-size: 26px; font-weight: 700;
682
- margin-bottom: 6px; color: var(--text-primary);
683
- }
684
- .pay-success-sub {
685
- font-size: 14px; color: var(--text-secondary); margin-bottom: 24px;
686
- }
687
-
688
- .pay-success-steps {
689
- text-align: left; display: flex; flex-direction: column; gap: 14px;
690
- background: var(--accent-dim); border-radius: var(--radius-md);
691
- padding: 20px; margin-bottom: 24px;
692
- }
693
- .pay-success-step {
694
- display: flex; align-items: flex-start; gap: 12px;
695
- }
696
- .pay-success-num {
697
- flex-shrink: 0; width: 26px; height: 26px; border-radius: 50%;
698
- background: var(--accent); color: #fff; font-size: 13px; font-weight: 700;
699
- display: flex; align-items: center; justify-content: center;
700
- margin-top: 1px;
701
- }
702
- .pay-success-step strong {
703
- display: block; font-size: 14px; color: var(--text-primary); margin-bottom: 2px;
704
- }
705
- .pay-success-step span {
706
- font-size: 13px; color: var(--text-secondary); line-height: 1.4;
707
- }
708
-
709
- .pay-success-done {
710
- width: 100%; margin-bottom: 12px;
711
- }
712
- .pay-success-help {
713
- font-size: 12px; color: var(--text-secondary); opacity: 0.7;
714
- }
715
- .pay-success-help a { color: var(--accent); }
716
-
717
- /* Legacy (keep for backwards compat) */
718
- .pay-success-icon {
719
- width: 64px; height: 64px; border-radius: 50%; background: var(--accent);
720
- color: #fff; font-size: 32px; display: flex; align-items: center; justify-content: center;
721
- margin: 0 auto 16px; font-weight: 700;
722
- }
723
-
724
- /* ─── MESH SECTION ─── */
725
- .mesh-diagram { display: flex; flex-direction: column; gap: 0; margin: 32px 0; }
726
-
727
- .mesh-tier {
728
- border: 1px solid var(--border);
729
- border-radius: 12px;
730
- padding: 20px;
731
- background: var(--bg-card);
732
- }
733
- .mesh-tier-free { border-color: var(--accent); }
734
- .mesh-tier-pro { border-color: #a78bfa; }
735
- .mesh-tier-biz { border-color: #f59e0b; }
736
-
737
- .mesh-tier-header {
738
- display: flex;
739
- align-items: center;
740
- gap: 12px;
741
- margin-bottom: 16px;
742
- flex-wrap: wrap;
743
- }
744
- .mesh-tier-badge {
745
- font-size: 10px;
746
- font-weight: 700;
747
- padding: 3px 10px;
748
- border-radius: 4px;
749
- text-transform: uppercase;
750
- letter-spacing: 0.5px;
751
- }
752
- .mesh-badge-free { background: rgba(var(--accent-rgb, 74,104,67), 0.15); color: var(--accent); }
753
- .mesh-badge-pro { background: rgba(167,139,250,0.15); color: #a78bfa; }
754
- .mesh-badge-biz { background: rgba(245,158,11,0.15); color: #f59e0b; }
755
- .mesh-tier-stats { font-size: 12px; color: var(--text-muted); margin-left: auto; }
756
-
757
- .mesh-layers { display: flex; flex-direction: column; gap: 8px; }
758
- .mesh-layer {
759
- display: flex;
760
- align-items: flex-start;
761
- gap: 10px;
762
- }
763
- .mesh-layer-label {
764
- font-size: 10px;
765
- font-weight: 700;
766
- color: var(--text-muted);
767
- background: var(--bg-section-alt);
768
- padding: 3px 8px;
769
- border-radius: 4px;
770
- min-width: 28px;
771
- text-align: center;
772
- flex-shrink: 0;
773
- margin-top: 2px;
774
- }
775
- .mesh-nodes {
776
- display: flex;
777
- flex-wrap: wrap;
778
- gap: 6px;
779
- }
780
- .mesh-node {
781
- font-size: 11px;
782
- font-family: 'JetBrains Mono', monospace;
783
- padding: 3px 8px;
784
- border-radius: 4px;
785
- background: var(--bg-section-alt);
786
- color: var(--text-secondary);
787
- border: 1px solid var(--border);
788
- }
789
- .mesh-node-router {
790
- background: rgba(var(--accent-rgb, 74,104,67), 0.1);
791
- color: var(--accent);
792
- border-color: var(--accent);
793
- font-weight: 600;
794
- }
795
- .mesh-node-more {
796
- font-style: italic;
797
- color: var(--text-muted);
798
- border-style: dashed;
799
- }
800
-
801
- .mesh-flow-example {
802
- margin-top: 14px;
803
- padding: 10px 14px;
804
- background: var(--bg-section-alt);
805
- border-radius: 8px;
806
- font-size: 12px;
807
- display: flex;
808
- align-items: center;
809
- gap: 10px;
810
- flex-wrap: wrap;
811
- overflow-x: auto;
812
- }
813
- .mesh-flow-label { color: var(--text-muted); font-weight: 600; white-space: nowrap; }
814
- .mesh-flow {
815
- font-family: 'JetBrains Mono', monospace;
816
- font-size: 11px;
817
- color: var(--text-secondary);
818
- white-space: nowrap;
819
- }
820
- .mesh-flow-fail { color: #ef4444; font-weight: 700; }
821
- .mesh-flow-pass { color: var(--accent); font-weight: 700; }
822
-
823
- .mesh-arrows {
824
- display: flex;
825
- flex-direction: column;
826
- align-items: center;
827
- padding: 8px 0;
828
- }
829
- .mesh-arrow-line {
830
- width: 2px;
831
- height: 24px;
832
- background: linear-gradient(to bottom, var(--accent), #a78bfa);
833
- }
834
- .mesh-arrow-line-biz {
835
- background: linear-gradient(to bottom, #a78bfa, #f59e0b);
836
- }
837
- .mesh-arrow-labels { text-align: center; }
838
- .mesh-arrow-label {
839
- display: block;
840
- font-size: 12px;
841
- font-weight: 700;
842
- color: var(--text-primary);
843
- }
844
- .mesh-arrow-desc {
845
- display: block;
846
- font-size: 11px;
847
- color: var(--text-muted);
848
- }
849
-
850
- .mesh-nodes-grid {
851
- display: grid;
852
- grid-template-columns: 1fr 1fr;
853
- gap: 10px;
854
- }
855
- .mesh-pack {
856
- padding: 10px 14px;
857
- background: var(--bg-section-alt);
858
- border-radius: 8px;
859
- border: 1px solid var(--border);
860
- }
861
- .mesh-pack strong {
862
- display: block;
863
- font-size: 13px;
864
- color: var(--text-primary);
865
- margin-bottom: 2px;
866
- }
867
- .mesh-pack span { font-size: 12px; color: var(--text-secondary); line-height: 1.4; }
868
- .mesh-pack em { color: #a78bfa; font-style: normal; font-weight: 600; }
869
-
870
- .mesh-tier-note {
871
- margin-top: 12px;
872
- font-size: 12px;
873
- color: var(--text-muted);
874
- line-height: 1.5;
875
- }
876
- .mesh-tier-note code {
877
- font-size: 11px;
878
- background: var(--bg-section-alt);
879
- padding: 1px 5px;
880
- border-radius: 3px;
881
- }
882
-
883
- .mesh-points {
884
- display: grid;
885
- grid-template-columns: repeat(3, 1fr);
886
- gap: 20px;
887
- margin-top: 32px;
888
- }
889
- .mesh-point {
890
- padding: 20px;
891
- border-radius: 12px;
892
- background: var(--bg-card);
893
- border: 1px solid var(--border);
894
- }
895
- .mesh-point-icon {
896
- font-size: 20px;
897
- color: var(--accent);
898
- margin-bottom: 8px;
899
- }
900
- .mesh-point h3 {
901
- font-size: 15px;
902
- font-weight: 700;
903
- margin-bottom: 6px;
904
- font-family: 'Space Grotesk', sans-serif;
905
- }
906
- .mesh-point p { font-size: 13px; color: var(--text-secondary); line-height: 1.5; }
907
- .mesh-point code {
908
- font-size: 12px;
909
- background: var(--bg-section-alt);
910
- padding: 1px 5px;
911
- border-radius: 3px;
912
- }
913
-
914
- @media (max-width: 768px) {
915
- .mesh-nodes-grid { grid-template-columns: 1fr; }
916
- .mesh-points { grid-template-columns: 1fr; }
917
- .mesh-tier-stats { margin-left: 0; width: 100%; }
918
- .mesh-flow-example { flex-direction: column; align-items: flex-start; }
919
- }
920
-
921
- /* ─── ANIMATIONS ─── */
922
- @media (prefers-reduced-motion: no-preference) {
923
- .layer, .feature-card, .workflow-card, .compare-card, .ext-card, .install-card, .pricing-card, .stat {
924
- opacity: 0; transform: translateY(20px);
925
- animation: fadeUp 0.5s ease forwards;
926
- }
927
- .section:nth-child(2) .compare-card:nth-child(1) { animation-delay: 0.1s; }
928
- .section:nth-child(2) .compare-card:nth-child(2) { animation-delay: 0.2s; }
929
- .section:nth-child(2) .compare-card:nth-child(3) { animation-delay: 0.3s; }
930
- }
931
-
932
- @keyframes fadeUp {
933
- to { opacity: 1; transform: translateY(0); }
934
- }
935
-
936
- /* ─── DARK MODE OVERRIDES ─── */
937
- [data-theme="dark"] .hero-mesh { opacity: 0.4; }
938
- [data-theme="dark"] .compare-diagram { background: rgba(0,0,0,0.3); }
939
- [data-theme="dark"] .layer-count { background: rgba(255,255,255,0.06); }
940
- [data-theme="dark"] .phase { background: rgba(255,255,255,0.03); }
941
- [data-theme="dark"] .compare-table tbody tr:hover { background: rgba(255,255,255,0.02); }
942
- [data-theme="dark"] .includes-box { background: rgba(255,255,255,0.02); }
943
- [data-theme="dark"] .pricing-pro { border-color: #f59e0b; background: linear-gradient(168deg, var(--bg-card) 60%, rgba(245,158,11,0.06) 100%); }
944
- [data-theme="dark"] .pricing-biz { border-color: #8b5cf6; background: linear-gradient(168deg, var(--bg-card) 60%, rgba(139,92,246,0.06) 100%); }
945
- [data-theme="dark"] .pricing-badge-pro { background: rgba(245,158,11,0.15); color: #f59e0b; }
946
- [data-theme="dark"] .pricing-badge-biz { background: rgba(139,92,246,0.15); color: #8b5cf6; }
947
- [data-theme="dark"] .pricing-badge-best { background: linear-gradient(135deg, #f59e0b, #8b5cf6); }
948
- [data-theme="dark"] .pricing-pro .pricing-features li::before { color: #f59e0b; }
949
- [data-theme="dark"] .pricing-biz .pricing-features li::before { color: #8b5cf6; }
950
- [data-theme="dark"] .includes-box-pro ul li::before { color: #f59e0b; }
951
- [data-theme="dark"] .includes-box-biz ul li::before { color: #8b5cf6; }
952
- [data-theme="dark"] .btn-pro { background: #f59e0b; color: #000; box-shadow: 0 0 20px rgba(245,158,11,0.3); }
953
- [data-theme="dark"] .btn-pro:hover { background: #d97706; }
954
- [data-theme="dark"] .btn-biz { background: #8b5cf6; box-shadow: 0 0 20px rgba(139,92,246,0.3); }
955
- [data-theme="dark"] .btn-biz:hover { background: #7c3aed; }
956
- [data-theme="dark"] .promo-ribbon { background: linear-gradient(135deg, #059669, #10b981); box-shadow: 0 4px 12px rgba(16,185,129,0.3); }
957
- [data-theme="dark"] .promo-save { color: #10b981; background: rgba(16,185,129,0.1); }
958
- [data-theme="dark"] .pricing-biz { box-shadow: 0 0 30px rgba(139,92,246,0.12), 0 8px 32px rgba(0,0,0,0.15); }