@beworke/pixel-bemony 0.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +157 -0
  2. package/README.md +176 -0
  3. package/RELEASE_CANDIDATE.md +37 -0
  4. package/dist/browser/index.cjs.js +2598 -0
  5. package/dist/browser/index.cjs.js.map +1 -0
  6. package/dist/browser/index.d.mts +184 -0
  7. package/dist/browser/index.d.ts +184 -0
  8. package/dist/browser/index.esm.js +2557 -0
  9. package/dist/browser/index.esm.js.map +1 -0
  10. package/dist/browser/pixel-bemony.global.js +9848 -0
  11. package/dist/browser/pixel-bemony.global.js.map +1 -0
  12. package/dist/createBemonyPixel-BGRD66p-.d.mts +474 -0
  13. package/dist/createBemonyPixel-BGRD66p-.d.ts +474 -0
  14. package/dist/index.cjs.js +2154 -0
  15. package/dist/index.cjs.js.map +1 -0
  16. package/dist/index.d.mts +320 -0
  17. package/dist/index.d.ts +320 -0
  18. package/dist/index.esm.js +2081 -0
  19. package/dist/index.esm.js.map +1 -0
  20. package/docs/BACKEND_PURCHASE_AND_REDIRECTS.md +125 -0
  21. package/docs/BROWSER_EVENT_ENRICHMENT.md +116 -0
  22. package/docs/SCENARIOS.md +92 -0
  23. package/docs/SECURITY_LIMITATIONS.md +45 -0
  24. package/docs/TEST_MATRIX.md +39 -0
  25. package/docs/TROUBLESHOOTING.md +81 -0
  26. package/examples/README.md +73 -0
  27. package/examples/browser-bootstrap.html +47 -0
  28. package/examples/checkout-price-code.html +37 -0
  29. package/examples/funnel/donsell/downsell_1.html +130 -0
  30. package/examples/funnel/donsell/downsell_2.html +130 -0
  31. package/examples/funnel/donsell/downsell_3.html +130 -0
  32. package/examples/funnel/offer-page.html +105 -0
  33. package/examples/funnel/upsell/upsell_1.html +130 -0
  34. package/examples/funnel/upsell/upsell_2.html +130 -0
  35. package/examples/funnel/upsell/upsell_3.html +139 -0
  36. package/examples/offer-page-price-code.html +22 -0
  37. package/examples/one-click-price-code.html +38 -0
  38. package/examples/security/checkout-sim.css +408 -0
  39. package/examples/security/checkout-sim.js +414 -0
  40. package/examples/security/one-click/pri_downsell_1.html +85 -0
  41. package/examples/security/one-click/pri_downsell_1a.html +85 -0
  42. package/examples/security/one-click/pri_downsell_1b.html +78 -0
  43. package/examples/security/one-click/pri_downsell_2.html +78 -0
  44. package/examples/security/one-click/pri_downsell_2a.html +78 -0
  45. package/examples/security/one-click/pri_downsell_2b.html +78 -0
  46. package/examples/security/one-click/pri_downsell_3.html +78 -0
  47. package/examples/security/one-click/pri_downsell_3a.html +78 -0
  48. package/examples/security/one-click/pri_downsell_3b.html +78 -0
  49. package/examples/security/one-click/pri_upsell_1.html +78 -0
  50. package/examples/security/one-click/pri_upsell_1a.html +78 -0
  51. package/examples/security/one-click/pri_upsell_1b.html +78 -0
  52. package/examples/security/one-click/pri_upsell_2.html +78 -0
  53. package/examples/security/one-click/pri_upsell_2a.html +78 -0
  54. package/examples/security/one-click/pri_upsell_2b.html +78 -0
  55. package/examples/security/one-click/pri_upsell_3.html +78 -0
  56. package/examples/security/one-click/pri_upsell_3a.html +78 -0
  57. package/examples/security/one-click/pri_upsell_3b.html +78 -0
  58. package/examples/security/one-click/pri_upsell_3c.html +78 -0
  59. package/examples/security/pri1766322.html +333 -0
  60. package/examples/security/pri5529930.html +333 -0
  61. package/examples/security/pri6670988.html +334 -0
  62. package/examples/security/thank-you.html +65 -0
  63. package/examples/sim/funnel-flow.js +258 -0
  64. package/examples/sim/one-click-sim.js +167 -0
  65. package/examples/upsell-price-code.html +41 -0
  66. package/examples/url-context-navigation.html +96 -0
  67. package/package.json +63 -0
@@ -0,0 +1,408 @@
1
+ :root {
2
+ --bg: #f1f5f9;
3
+ --surface: #ffffff;
4
+ --surface-2: #f8fafc;
5
+ --border: #e2e8f0;
6
+ --text: #0f172a;
7
+ --muted: #64748b;
8
+ --primary: #2563eb;
9
+ --primary-hover: #1d4ed8;
10
+ --success: #16a34a;
11
+ --success-soft: #dcfce7;
12
+ --danger: #dc2626;
13
+ --danger-soft: #fee2e2;
14
+ --radius: 12px;
15
+ --shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
16
+ }
17
+
18
+ * {
19
+ box-sizing: border-box;
20
+ }
21
+
22
+ body {
23
+ margin: 0;
24
+ font-family:
25
+ 'Segoe UI',
26
+ system-ui,
27
+ -apple-system,
28
+ sans-serif;
29
+ background: var(--bg);
30
+ color: var(--text);
31
+ line-height: 1.45;
32
+ }
33
+
34
+ .wrap {
35
+ max-width: 1100px;
36
+ margin: 0 auto;
37
+ padding: 2rem 1.25rem 3rem;
38
+ display: grid;
39
+ grid-template-columns: minmax(0, 1fr) 360px;
40
+ gap: 2rem;
41
+ align-items: start;
42
+ }
43
+
44
+ @media (max-width: 900px) {
45
+ .wrap {
46
+ grid-template-columns: 1fr;
47
+ }
48
+ }
49
+
50
+ .main {
51
+ display: flex;
52
+ flex-direction: column;
53
+ gap: 1.25rem;
54
+ }
55
+
56
+ .page-title {
57
+ margin: 0;
58
+ font-size: 1.5rem;
59
+ font-weight: 600;
60
+ letter-spacing: -0.02em;
61
+ }
62
+
63
+ .page-sub {
64
+ margin: 0.35rem 0 0;
65
+ font-size: 0.875rem;
66
+ color: var(--muted);
67
+ }
68
+
69
+ .card {
70
+ background: var(--surface);
71
+ border: 1px solid var(--border);
72
+ border-radius: var(--radius);
73
+ padding: 1.1rem 1.15rem;
74
+ box-shadow: var(--shadow);
75
+ }
76
+
77
+ .card h2 {
78
+ margin: 0 0 0.85rem;
79
+ font-size: 1rem;
80
+ font-weight: 600;
81
+ }
82
+
83
+ .card-desc {
84
+ margin: -0.4rem 0 0.85rem;
85
+ font-size: 0.8rem;
86
+ color: var(--muted);
87
+ }
88
+
89
+ .field {
90
+ margin-bottom: 0.9rem;
91
+ }
92
+
93
+ .field:last-child {
94
+ margin-bottom: 0;
95
+ }
96
+
97
+ label {
98
+ display: block;
99
+ font-size: 0.8rem;
100
+ font-weight: 500;
101
+ margin-bottom: 0.3rem;
102
+ }
103
+
104
+ .hint {
105
+ margin: 0.3rem 0 0;
106
+ font-size: 0.75rem;
107
+ color: var(--muted);
108
+ }
109
+
110
+ input[type='text'],
111
+ input[type='email'],
112
+ input[type='tel'],
113
+ select {
114
+ width: 100%;
115
+ border: 1px solid var(--border);
116
+ border-radius: 8px;
117
+ padding: 0.65rem 0.75rem;
118
+ font: inherit;
119
+ background: var(--surface-2);
120
+ color: var(--text);
121
+ }
122
+
123
+ input:focus,
124
+ select:focus {
125
+ outline: 2px solid color-mix(in srgb, var(--primary) 35%, transparent);
126
+ border-color: var(--primary);
127
+ }
128
+
129
+ .row-2 {
130
+ display: grid;
131
+ grid-template-columns: 1fr 1fr;
132
+ gap: 0.75rem;
133
+ }
134
+
135
+ .row-3 {
136
+ display: grid;
137
+ grid-template-columns: 1fr 1fr 1fr;
138
+ gap: 0.75rem;
139
+ }
140
+
141
+ @media (max-width: 560px) {
142
+ .row-2,
143
+ .row-3 {
144
+ grid-template-columns: 1fr;
145
+ }
146
+ }
147
+
148
+ .check {
149
+ display: flex;
150
+ align-items: flex-start;
151
+ gap: 0.65rem;
152
+ margin-top: 0.35rem;
153
+ cursor: pointer;
154
+ user-select: none;
155
+ }
156
+
157
+ .check input {
158
+ margin-top: 0.2rem;
159
+ width: 1.05rem;
160
+ height: 1.05rem;
161
+ flex-shrink: 0;
162
+ cursor: pointer;
163
+ pointer-events: auto;
164
+ }
165
+
166
+ .check input:disabled {
167
+ cursor: not-allowed;
168
+ opacity: 0.55;
169
+ }
170
+
171
+ /* Triggers programáticos — no DOM (não display:none) para o detector capturar click. */
172
+ .sr-trigger {
173
+ position: absolute;
174
+ width: 1px;
175
+ height: 1px;
176
+ padding: 0;
177
+ margin: -1px;
178
+ overflow: hidden;
179
+ clip: rect(0, 0, 0, 0);
180
+ white-space: nowrap;
181
+ border: 0;
182
+ }
183
+
184
+
185
+ .check .check-label {
186
+ font-size: 0.875rem;
187
+ font-weight: 500;
188
+ }
189
+
190
+ .check .check-desc {
191
+ font-size: 0.75rem;
192
+ color: var(--muted);
193
+ margin-top: 0.15rem;
194
+ }
195
+
196
+ .secure {
197
+ display: flex;
198
+ align-items: center;
199
+ gap: 0.45rem;
200
+ font-size: 0.875rem;
201
+ color: var(--success);
202
+ margin: 0 0 0.85rem;
203
+ }
204
+
205
+ .pay-tabs {
206
+ display: grid;
207
+ grid-template-columns: repeat(4, 1fr);
208
+ gap: 0.5rem;
209
+ margin-bottom: 1rem;
210
+ }
211
+
212
+ @media (max-width: 640px) {
213
+ .pay-tabs {
214
+ grid-template-columns: 1fr 1fr;
215
+ }
216
+ }
217
+
218
+ .pay-tab {
219
+ appearance: none;
220
+ border: 1px solid var(--border);
221
+ background: var(--surface-2);
222
+ border-radius: 8px;
223
+ padding: 0.55rem 0.4rem;
224
+ font: inherit;
225
+ font-size: 0.78rem;
226
+ cursor: pointer;
227
+ color: var(--text);
228
+ }
229
+
230
+ .pay-tab[aria-selected='true'] {
231
+ background: var(--primary);
232
+ border-color: var(--primary);
233
+ color: #fff;
234
+ }
235
+
236
+ .pay-tab:disabled {
237
+ opacity: 0.45;
238
+ cursor: not-allowed;
239
+ }
240
+
241
+ .btn-primary {
242
+ appearance: none;
243
+ width: 100%;
244
+ border: none;
245
+ border-radius: 8px;
246
+ padding: 0.85rem 1rem;
247
+ font: inherit;
248
+ font-weight: 600;
249
+ background: var(--primary);
250
+ color: #fff;
251
+ cursor: pointer;
252
+ }
253
+
254
+ .btn-primary:hover {
255
+ background: var(--primary-hover);
256
+ }
257
+
258
+ .btn-primary:disabled {
259
+ opacity: 0.55;
260
+ cursor: not-allowed;
261
+ }
262
+
263
+ .aside {
264
+ display: flex;
265
+ flex-direction: column;
266
+ gap: 1rem;
267
+ position: sticky;
268
+ top: 1rem;
269
+ }
270
+
271
+ .aside .card {
272
+ position: relative;
273
+ }
274
+
275
+ .meta-row {
276
+ display: flex;
277
+ justify-content: space-between;
278
+ align-items: center;
279
+ font-size: 0.875rem;
280
+ margin-bottom: 0.85rem;
281
+ }
282
+
283
+ .meta-row .muted {
284
+ color: var(--muted);
285
+ }
286
+
287
+ .pill {
288
+ display: inline-block;
289
+ border-radius: 999px;
290
+ padding: 0.15rem 0.55rem;
291
+ font-size: 0.72rem;
292
+ font-weight: 600;
293
+ background: #e2e8f0;
294
+ color: #334155;
295
+ }
296
+
297
+ .pill.ok {
298
+ background: var(--success-soft);
299
+ color: var(--success);
300
+ }
301
+
302
+ .pill.bad {
303
+ background: var(--danger-soft);
304
+ color: var(--danger);
305
+ }
306
+
307
+ .pill.bump {
308
+ background: var(--success-soft);
309
+ color: var(--success);
310
+ }
311
+
312
+ .lines {
313
+ list-style: none;
314
+ margin: 0;
315
+ padding: 0;
316
+ }
317
+
318
+ .lines li {
319
+ display: flex;
320
+ justify-content: space-between;
321
+ gap: 0.75rem;
322
+ padding: 0.65rem 0;
323
+ border-bottom: 1px solid var(--border);
324
+ font-size: 0.875rem;
325
+ }
326
+
327
+ .lines li:last-child {
328
+ border-bottom: none;
329
+ }
330
+
331
+ .line-meta {
332
+ font-size: 0.72rem;
333
+ color: var(--muted);
334
+ }
335
+
336
+ .total-row {
337
+ display: flex;
338
+ justify-content: space-between;
339
+ align-items: baseline;
340
+ border-top: 1px solid var(--border);
341
+ padding-top: 0.75rem;
342
+ margin-top: 0.35rem;
343
+ }
344
+
345
+ .total-row strong {
346
+ font-size: 0.875rem;
347
+ }
348
+
349
+ .total-row .amount {
350
+ font-size: 1.15rem;
351
+ font-weight: 700;
352
+ }
353
+
354
+ .bump-head {
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 0.5rem;
358
+ margin-bottom: 0.35rem;
359
+ }
360
+
361
+ .bump-head h2 {
362
+ margin: 0;
363
+ font-size: 0.95rem;
364
+ }
365
+
366
+ .debug {
367
+ background: var(--surface-2);
368
+ font-size: 0.75rem;
369
+ }
370
+
371
+ .debug .kv {
372
+ display: flex;
373
+ justify-content: space-between;
374
+ gap: 0.5rem;
375
+ margin-bottom: 0.55rem;
376
+ }
377
+
378
+ .debug .label {
379
+ color: var(--muted);
380
+ margin: 0 0 0.25rem;
381
+ }
382
+
383
+ .debug .mono {
384
+ font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
385
+ word-break: break-word;
386
+ white-space: pre-wrap;
387
+ max-height: 7rem;
388
+ overflow: auto;
389
+ margin: 0 0 0.65rem;
390
+ }
391
+
392
+ .empty-cart {
393
+ font-size: 0.875rem;
394
+ color: var(--muted);
395
+ margin: 0;
396
+ }
397
+
398
+ .linkish {
399
+ appearance: none;
400
+ border: none;
401
+ background: none;
402
+ color: var(--success);
403
+ font: inherit;
404
+ font-size: 0.875rem;
405
+ padding: 0;
406
+ cursor: pointer;
407
+ width: fit-content;
408
+ }