@slashgear/gdpr-cookie-scanner 3.7.0 → 3.8.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 (86) hide show
  1. package/.dockerignore +3 -0
  2. package/.gitattributes +1 -0
  3. package/.github/workflows/website.yml +80 -0
  4. package/CHANGELOG.md +33 -0
  5. package/CONTRIBUTING.md +32 -4
  6. package/dist/report/generator.d.ts.map +1 -1
  7. package/dist/report/generator.js +9 -4
  8. package/dist/report/generator.js.map +1 -1
  9. package/dist/report/html.js +12 -3
  10. package/dist/report/html.js.map +1 -1
  11. package/dist/scanner/consent-modal.d.ts.map +1 -1
  12. package/dist/scanner/consent-modal.js +17 -5
  13. package/dist/scanner/consent-modal.js.map +1 -1
  14. package/dist/scanner/index.d.ts.map +1 -1
  15. package/dist/scanner/index.js +12 -2
  16. package/dist/scanner/index.js.map +1 -1
  17. package/package.json +7 -3
  18. package/pnpm-workspace.yaml +3 -0
  19. package/scripts/build-showcase.mjs +113 -0
  20. package/src/report/generator.ts +10 -4
  21. package/src/report/html.ts +13 -3
  22. package/src/scanner/consent-modal.ts +16 -5
  23. package/src/scanner/index.ts +12 -2
  24. package/tests/analyzers/compliance.test.ts +49 -0
  25. package/website/Dockerfile +55 -0
  26. package/website/node_modules/.bin/oxfmt +21 -0
  27. package/website/node_modules/.bin/oxlint +21 -0
  28. package/website/node_modules/.bin/tsc +21 -0
  29. package/website/node_modules/.bin/tsserver +21 -0
  30. package/website/node_modules/.bin/tsx +21 -0
  31. package/website/package.json +29 -0
  32. package/{docs → website/public}/index.html +70 -20
  33. package/website/public/reports/www.20minutes.fr/after-accept.png +3 -0
  34. package/website/public/reports/www.20minutes.fr/after-reject.png +3 -0
  35. package/{docs/reports/www.leboncoin.fr/gdpr-report-leboncoin.fr-2026-02-22.html → website/public/reports/www.20minutes.fr/gdpr-report-20minutes.fr-2026-02-22.html} +194 -51
  36. package/website/public/reports/www.20minutes.fr/modal-initial.png +3 -0
  37. package/website/public/reports/www.arte.tv/after-accept.png +3 -0
  38. package/website/public/reports/www.arte.tv/after-reject.png +3 -0
  39. package/{docs → website/public}/reports/www.arte.tv/gdpr-report-arte.tv-2026-02-24.html +1 -0
  40. package/website/public/reports/www.arte.tv/modal-initial.png +3 -0
  41. package/website/public/reports/www.backmarket.fr/after-accept.png +3 -0
  42. package/website/public/reports/www.backmarket.fr/after-reject.png +3 -0
  43. package/website/public/reports/www.backmarket.fr/gdpr-report-backmarket.fr-2026-02-24.html +1530 -0
  44. package/website/public/reports/www.backmarket.fr/modal-initial.png +3 -0
  45. package/website/public/reports/www.deezer.com/after-accept.png +3 -0
  46. package/website/public/reports/www.deezer.com/after-reject.png +3 -0
  47. package/{docs → website/public}/reports/www.deezer.com/gdpr-report-deezer.com-2026-02-22.html +1 -0
  48. package/website/public/reports/www.deezer.com/modal-initial.png +3 -0
  49. package/website/public/reports/www.france.tv/after-accept.png +3 -0
  50. package/website/public/reports/www.france.tv/after-reject.png +3 -0
  51. package/website/public/reports/www.france.tv/gdpr-report-france.tv-2026-02-23.html +977 -0
  52. package/website/public/reports/www.france.tv/modal-initial.png +3 -0
  53. package/website/public/reports/www.m6.fr/after-accept.png +3 -0
  54. package/website/public/reports/www.m6.fr/after-reject.png +3 -0
  55. package/website/public/reports/www.m6.fr/gdpr-report-m6.fr-2026-02-28.html +1862 -0
  56. package/website/public/reports/www.m6.fr/modal-initial.png +3 -0
  57. package/website/public/reports/www.netflix.com/after-accept.png +3 -0
  58. package/website/public/reports/www.netflix.com/after-reject.png +3 -0
  59. package/{docs → website/public}/reports/www.netflix.com/gdpr-report-netflix.com-2026-02-23.html +1 -0
  60. package/website/public/reports/www.netflix.com/modal-initial.png +3 -0
  61. package/website/public/reports/www.radiofrance.fr/after-accept.png +3 -0
  62. package/website/public/reports/www.radiofrance.fr/after-reject.png +3 -0
  63. package/{docs → website/public}/reports/www.radiofrance.fr/gdpr-report-radiofrance.fr-2026-02-24.html +1 -0
  64. package/website/public/reports/www.radiofrance.fr/modal-initial.png +3 -0
  65. package/website/public/reports/www.tf1.fr/after-accept.png +3 -0
  66. package/website/public/reports/www.tf1.fr/after-reject.png +3 -0
  67. package/website/public/reports/www.tf1.fr/gdpr-report-tf1.fr-2026-02-23.html +1512 -0
  68. package/website/public/reports/www.tf1.fr/modal-initial.png +3 -0
  69. package/website/src/index.ts +15 -0
  70. package/website/src/security.ts +26 -0
  71. package/website/tsconfig.json +14 -0
  72. package/.github/workflows/pages.yml +0 -40
  73. package/docs/reports/www.arte.tv/after-accept.png +0 -0
  74. package/docs/reports/www.arte.tv/after-reject.png +0 -0
  75. package/docs/reports/www.deezer.com/after-accept.png +0 -0
  76. package/docs/reports/www.deezer.com/after-reject.png +0 -0
  77. package/docs/reports/www.impots.gouv.fr/after-accept.png +0 -0
  78. package/docs/reports/www.impots.gouv.fr/after-reject.png +0 -0
  79. package/docs/reports/www.impots.gouv.fr/gdpr-report-impots.gouv.fr-2026-02-22.html +0 -751
  80. package/docs/reports/www.leboncoin.fr/after-accept.png +0 -0
  81. package/docs/reports/www.leboncoin.fr/after-reject.png +0 -0
  82. package/docs/reports/www.netflix.com/after-accept.png +0 -0
  83. package/docs/reports/www.netflix.com/after-reject.png +0 -0
  84. package/docs/reports/www.radiofrance.fr/after-accept.png +0 -0
  85. package/docs/reports/www.radiofrance.fr/after-reject.png +0 -0
  86. /package/{docs → website/public}/style.css +0 -0
@@ -0,0 +1,1530 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>GDPR Report — backmarket.fr</title>
7
+ <style>
8
+ *,
9
+ *::before,
10
+ *::after {
11
+ box-sizing: border-box;
12
+ }
13
+
14
+ :root {
15
+ --grade: #65a30d;
16
+ --grade-bg: #f7fee7;
17
+ --surface: #ffffff;
18
+ --bg: #f1f5f9;
19
+ --border: #e2e8f0;
20
+ --text: #0f172a;
21
+ --text-muted: #64748b;
22
+ --critical: #dc2626;
23
+ --critical-bg: #fef2f2;
24
+ --critical-border: #fecaca;
25
+ --warning: #d97706;
26
+ --warning-bg: #fffbeb;
27
+ --warning-border: #fde68a;
28
+ --ok: #16a34a;
29
+ --ok-bg: #f0fdf4;
30
+ --ok-border: #bbf7d0;
31
+ --radius: 10px;
32
+ --shadow: 0 1px 3px rgba(0, 0, 0, 0.08), 0 1px 2px rgba(0, 0, 0, 0.06);
33
+ --shadow-md: 0 4px 6px rgba(0, 0, 0, 0.07), 0 2px 4px rgba(0, 0, 0, 0.06);
34
+ }
35
+
36
+ body {
37
+ margin: 0;
38
+ background: var(--bg);
39
+ color: var(--text);
40
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
41
+ font-size: 14px;
42
+ line-height: 1.6;
43
+ }
44
+
45
+ /* ── Layout ── */
46
+ .page {
47
+ max-width: 1000px;
48
+ margin: 0 auto;
49
+ padding: 24px 16px 64px;
50
+ }
51
+
52
+ /* ── Hero ── */
53
+ .hero {
54
+ background: var(--surface);
55
+ border-radius: var(--radius);
56
+ box-shadow: var(--shadow-md);
57
+ padding: 32px 36px;
58
+ display: flex;
59
+ align-items: center;
60
+ gap: 32px;
61
+ margin-bottom: 20px;
62
+ border-top: 4px solid var(--grade);
63
+ }
64
+ .grade-badge {
65
+ flex-shrink: 0;
66
+ width: 80px;
67
+ height: 80px;
68
+ border-radius: 16px;
69
+ background: var(--grade);
70
+ color: #fff;
71
+ font-size: 42px;
72
+ font-weight: 800;
73
+ display: flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ letter-spacing: -2px;
77
+ }
78
+ .hero-info {
79
+ flex: 1;
80
+ min-width: 0;
81
+ }
82
+ .hero-info h1 {
83
+ margin: 0 0 4px;
84
+ font-size: 22px;
85
+ font-weight: 700;
86
+ color: var(--text);
87
+ white-space: nowrap;
88
+ overflow: hidden;
89
+ text-overflow: ellipsis;
90
+ }
91
+ .hero-meta {
92
+ font-size: 13px;
93
+ color: var(--text-muted);
94
+ margin: 0;
95
+ }
96
+ .hero-score {
97
+ flex-shrink: 0;
98
+ text-align: right;
99
+ }
100
+ .hero-score .score-num {
101
+ font-size: 40px;
102
+ font-weight: 800;
103
+ color: var(--grade);
104
+ line-height: 1;
105
+ }
106
+ .hero-score .score-den {
107
+ font-size: 18px;
108
+ color: var(--text-muted);
109
+ font-weight: 400;
110
+ }
111
+ .hero-score .score-label {
112
+ font-size: 12px;
113
+ color: var(--text-muted);
114
+ margin-top: 4px;
115
+ }
116
+
117
+ /* ── Score grid ── */
118
+ .score-grid {
119
+ display: grid;
120
+ grid-template-columns: repeat(4, 1fr);
121
+ gap: 12px;
122
+ margin-bottom: 20px;
123
+ }
124
+ @media (max-width: 640px) {
125
+ .score-grid {
126
+ grid-template-columns: repeat(2, 1fr);
127
+ }
128
+ }
129
+ .score-card {
130
+ background: var(--surface);
131
+ border-radius: var(--radius);
132
+ padding: 16px 18px;
133
+ box-shadow: var(--shadow);
134
+ }
135
+ .score-card-label {
136
+ font-size: 11px;
137
+ font-weight: 600;
138
+ text-transform: uppercase;
139
+ letter-spacing: 0.05em;
140
+ color: var(--text-muted);
141
+ margin-bottom: 8px;
142
+ }
143
+ .score-card-value {
144
+ font-size: 22px;
145
+ font-weight: 700;
146
+ color: var(--text);
147
+ margin-bottom: 8px;
148
+ }
149
+ .score-card-value span {
150
+ font-size: 14px;
151
+ font-weight: 400;
152
+ color: var(--text-muted);
153
+ }
154
+ .progress-track {
155
+ height: 6px;
156
+ background: var(--border);
157
+ border-radius: 3px;
158
+ overflow: hidden;
159
+ }
160
+ .progress-fill {
161
+ height: 100%;
162
+ border-radius: 3px;
163
+ background: var(--grade-color, #64748b);
164
+ }
165
+
166
+ /* ── Section ── */
167
+ .section {
168
+ background: var(--surface);
169
+ border-radius: var(--radius);
170
+ box-shadow: var(--shadow);
171
+ margin-bottom: 16px;
172
+ overflow: hidden;
173
+ }
174
+ .section-header {
175
+ padding: 16px 20px;
176
+ border-bottom: 1px solid var(--border);
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 10px;
180
+ }
181
+ .section-header h2 {
182
+ margin: 0;
183
+ font-size: 15px;
184
+ font-weight: 600;
185
+ color: var(--text);
186
+ }
187
+ .section-body {
188
+ padding: 20px;
189
+ }
190
+ .section-body.no-pad {
191
+ padding: 0;
192
+ }
193
+
194
+ /* ── Badges ── */
195
+ .badge {
196
+ display: inline-flex;
197
+ align-items: center;
198
+ gap: 4px;
199
+ padding: 2px 8px;
200
+ border-radius: 99px;
201
+ font-size: 11px;
202
+ font-weight: 600;
203
+ }
204
+ .badge-critical {
205
+ background: var(--critical-bg);
206
+ color: var(--critical);
207
+ border: 1px solid var(--critical-border);
208
+ }
209
+ .badge-warning {
210
+ background: var(--warning-bg);
211
+ color: var(--warning);
212
+ border: 1px solid var(--warning-border);
213
+ }
214
+ .badge-ok {
215
+ background: var(--ok-bg);
216
+ color: var(--ok);
217
+ border: 1px solid var(--ok-border);
218
+ }
219
+ .badge-muted {
220
+ background: var(--bg);
221
+ color: var(--text-muted);
222
+ border: 1px solid var(--border);
223
+ }
224
+ .count-badge {
225
+ background: var(--bg);
226
+ color: var(--text-muted);
227
+ font-size: 12px;
228
+ font-weight: 600;
229
+ padding: 1px 8px;
230
+ border-radius: 99px;
231
+ margin-left: auto;
232
+ }
233
+
234
+ /* ── Issue cards ── */
235
+ .issue-list {
236
+ display: flex;
237
+ flex-direction: column;
238
+ gap: 10px;
239
+ }
240
+ .issue-card {
241
+ border-radius: 8px;
242
+ padding: 14px 16px;
243
+ border: 1px solid;
244
+ }
245
+ .issue-card.critical {
246
+ background: var(--critical-bg);
247
+ border-color: var(--critical-border);
248
+ }
249
+ .issue-card.warning {
250
+ background: var(--warning-bg);
251
+ border-color: var(--warning-border);
252
+ }
253
+ .issue-title {
254
+ font-size: 13px;
255
+ font-weight: 600;
256
+ margin-bottom: 4px;
257
+ }
258
+ .issue-card.critical .issue-title {
259
+ color: var(--critical);
260
+ }
261
+ .issue-card.warning .issue-title {
262
+ color: var(--warning);
263
+ }
264
+ .issue-evidence {
265
+ font-size: 12px;
266
+ color: var(--text-muted);
267
+ margin: 0;
268
+ }
269
+ .no-issues {
270
+ display: flex;
271
+ align-items: center;
272
+ gap: 8px;
273
+ color: var(--ok);
274
+ font-weight: 500;
275
+ font-size: 14px;
276
+ }
277
+
278
+ /* ── Tables ── */
279
+ .data-table {
280
+ width: 100%;
281
+ border-collapse: collapse;
282
+ font-size: 13px;
283
+ }
284
+ .data-table th {
285
+ background: var(--bg);
286
+ padding: 10px 14px;
287
+ text-align: left;
288
+ font-size: 11px;
289
+ font-weight: 600;
290
+ text-transform: uppercase;
291
+ letter-spacing: 0.04em;
292
+ color: var(--text-muted);
293
+ border-bottom: 1px solid var(--border);
294
+ white-space: nowrap;
295
+ }
296
+ .data-table td {
297
+ padding: 10px 14px;
298
+ border-bottom: 1px solid var(--border);
299
+ vertical-align: top;
300
+ }
301
+ .data-table tr:last-child td {
302
+ border-bottom: none;
303
+ }
304
+ .data-table tr:hover td {
305
+ background: #fafafa;
306
+ }
307
+ code {
308
+ font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
309
+ font-size: 12px;
310
+ background: var(--bg);
311
+ padding: 1px 6px;
312
+ border-radius: 4px;
313
+ border: 1px solid var(--border);
314
+ }
315
+ .empty-state {
316
+ text-align: center;
317
+ padding: 32px;
318
+ color: var(--text-muted);
319
+ font-size: 13px;
320
+ }
321
+
322
+ /* ── Checklist status ── */
323
+ .status-ok {
324
+ color: var(--ok);
325
+ font-weight: 600;
326
+ }
327
+ .status-ko {
328
+ color: var(--critical);
329
+ font-weight: 600;
330
+ }
331
+ .status-warn {
332
+ color: var(--warning);
333
+ font-weight: 600;
334
+ }
335
+
336
+ /* ── Info grid ── */
337
+ .info-grid {
338
+ display: grid;
339
+ grid-template-columns: 1fr 1fr;
340
+ gap: 12px;
341
+ }
342
+ @media (max-width: 640px) {
343
+ .info-grid {
344
+ grid-template-columns: 1fr;
345
+ }
346
+ }
347
+ .info-item {
348
+ }
349
+ .info-label {
350
+ font-size: 11px;
351
+ font-weight: 600;
352
+ text-transform: uppercase;
353
+ letter-spacing: 0.04em;
354
+ color: var(--text-muted);
355
+ margin-bottom: 2px;
356
+ }
357
+ .info-value {
358
+ font-size: 13px;
359
+ color: var(--text);
360
+ }
361
+
362
+ /* ── Buttons table ── */
363
+ .btn-chip {
364
+ display: inline-block;
365
+ padding: 2px 10px;
366
+ border-radius: 4px;
367
+ font-size: 12px;
368
+ font-weight: 600;
369
+ }
370
+ .btn-chip.accept {
371
+ background: #dcfce7;
372
+ color: #166534;
373
+ }
374
+ .btn-chip.reject {
375
+ background: #fee2e2;
376
+ color: #991b1b;
377
+ }
378
+ .btn-chip.preferences {
379
+ background: #dbeafe;
380
+ color: #1e40af;
381
+ }
382
+ .btn-chip.unknown,
383
+ .btn-chip.close {
384
+ background: var(--bg);
385
+ color: var(--text-muted);
386
+ }
387
+
388
+ /* ── Recommendations ── */
389
+ .rec-list {
390
+ list-style: none;
391
+ margin: 0;
392
+ padding: 0;
393
+ display: flex;
394
+ flex-direction: column;
395
+ gap: 10px;
396
+ }
397
+ .rec-item {
398
+ display: flex;
399
+ gap: 12px;
400
+ padding: 12px 14px;
401
+ background: #f8fafc;
402
+ border-radius: 8px;
403
+ border: 1px solid var(--border);
404
+ font-size: 13px;
405
+ }
406
+ .rec-num {
407
+ flex-shrink: 0;
408
+ width: 24px;
409
+ height: 24px;
410
+ border-radius: 50%;
411
+ background: var(--text);
412
+ color: #fff;
413
+ font-size: 12px;
414
+ font-weight: 700;
415
+ display: flex;
416
+ align-items: center;
417
+ justify-content: center;
418
+ margin-top: 1px;
419
+ }
420
+
421
+ /* ── Footer ── */
422
+ .footer {
423
+ text-align: center;
424
+ margin-top: 40px;
425
+ font-size: 12px;
426
+ color: var(--text-muted);
427
+ }
428
+ .footer a {
429
+ color: var(--text-muted);
430
+ }
431
+
432
+ @media print {
433
+ body {
434
+ background: #fff;
435
+ }
436
+ .section {
437
+ box-shadow: none;
438
+ border: 1px solid var(--border);
439
+ }
440
+ .page {
441
+ padding: 0;
442
+ }
443
+ }
444
+ </style>
445
+ </head>
446
+ <body>
447
+ <div class="page">
448
+ <div class="hero">
449
+ <div class="grade-badge" style="background: #65a30d">B</div>
450
+ <div class="hero-info">
451
+ <h1>backmarket.fr</h1>
452
+ <p class="hero-meta">Scanned on 24 February 2026 at 16:27 · 15.0s</p>
453
+ </div>
454
+ <div class="hero-score">
455
+ <div>
456
+ <span class="score-num" style="color: #65a30d">77</span
457
+ ><span class="score-den">/100</span>
458
+ </div>
459
+ <div class="score-label">Compliance score</div>
460
+ </div>
461
+ </div>
462
+
463
+ <div class="score-grid">
464
+ <div class="score-card">
465
+ <div class="score-card-label">Consent validity</div>
466
+ <div class="score-card-value">20<span>/25</span></div>
467
+ <div class="progress-track">
468
+ <div class="progress-fill" style="width: 80%; background: #16a34a"></div>
469
+ </div>
470
+ </div>
471
+ <div class="score-card">
472
+ <div class="score-card-label">Easy refusal</div>
473
+ <div class="score-card-value">12<span>/25</span></div>
474
+ <div class="progress-track">
475
+ <div class="progress-fill" style="width: 48%; background: #ea580c"></div>
476
+ </div>
477
+ </div>
478
+ <div class="score-card">
479
+ <div class="score-card-label">Transparency</div>
480
+ <div class="score-card-value">22<span>/25</span></div>
481
+ <div class="progress-track">
482
+ <div class="progress-fill" style="width: 88%; background: #16a34a"></div>
483
+ </div>
484
+ </div>
485
+ <div class="score-card">
486
+ <div class="score-card-label">Cookie behavior</div>
487
+ <div class="score-card-value">23<span>/25</span></div>
488
+ <div class="progress-track">
489
+ <div class="progress-fill" style="width: 92%; background: #16a34a"></div>
490
+ </div>
491
+ </div>
492
+ </div>
493
+
494
+ <div class="section">
495
+ <div class="section-header">
496
+ <h2>Issues</h2>
497
+ <span class="count-badge">4</span>
498
+ <span class="badge badge-critical">2 critical</span>
499
+ <span class="badge badge-warning">2 warnings</span>
500
+ </div>
501
+ <div class="section-body">
502
+ <div class="issue-list">
503
+ <div class="issue-card critical">
504
+ <div class="issue-title">Reject button has critically low contrast ratio</div>
505
+ <p class="issue-evidence">
506
+ Contrast ratio 1.1:1 — WCAG AA requires 4.5:1 for normal text (rgba(0, 0, 0, 0) /
507
+ rgb(14, 16, 22))
508
+ </p>
509
+ </div>
510
+ <div class="issue-card critical">
511
+ <div class="issue-title">1 tracker request(s) fired before any consent</div>
512
+ <p class="issue-evidence">Google Tag Manager</p>
513
+ </div>
514
+ <div class="issue-card warning">
515
+ <div class="issue-title">Missing required information: &quot;purposes&quot;</div>
516
+ <p class="issue-evidence">The consent text does not mention purposes</p>
517
+ </div>
518
+ <div class="issue-card warning">
519
+ <div class="issue-title">
520
+ Accept button has significantly higher contrast than reject button
521
+ </div>
522
+ <p class="issue-evidence">Accept: 19.02:1, Reject: 1.1:1</p>
523
+ </div>
524
+ </div>
525
+ </div>
526
+ </div>
527
+
528
+ <div class="section">
529
+ <div class="section-header">
530
+ <h2>Consent modal</h2>
531
+ <span class="badge badge-ok">Detected</span>
532
+ </div>
533
+ <div class="section-body">
534
+ <img src="modal-initial.png" alt="Consent modal screenshot" class="modal-screenshot" />
535
+ <div class="info-grid" style="margin-bottom: 20px">
536
+ <div class="info-item">
537
+ <div class="info-label">Selector</div>
538
+ <div class="info-value"><code>.didomi-popup-container</code></div>
539
+ </div>
540
+ <div class="info-item">
541
+ <div class="info-label">Granular controls</div>
542
+ <div class="info-value"><span class="status-ok">✓ Yes</span></div>
543
+ </div>
544
+ <div class="info-item">
545
+ <div class="info-label">Privacy policy link</div>
546
+ <div class="info-value">
547
+ <a
548
+ href="https://www.backmarket.fr/fr-fr/legal/data-protection"
549
+ target="_blank"
550
+ rel="noopener"
551
+ >https://www.backmarket.fr/fr-fr/legal/data-protection</a
552
+ >
553
+ </div>
554
+ </div>
555
+ <div class="info-item">
556
+ <div class="info-label">Pre-ticked checkboxes</div>
557
+ <div class="info-value"><span class="status-ok">✓ None</span></div>
558
+ </div>
559
+ </div>
560
+ <div
561
+ style="
562
+ font-size: 12px;
563
+ font-weight: 600;
564
+ text-transform: uppercase;
565
+ letter-spacing: 0.04em;
566
+ color: var(--text-muted);
567
+ margin-bottom: 8px;
568
+ "
569
+ >
570
+ Buttons
571
+ </div>
572
+ <table class="data-table">
573
+ <thead>
574
+ <tr>
575
+ <th>Type</th>
576
+ <th>Label</th>
577
+ <th>Font size</th>
578
+ <th>Contrast</th>
579
+ <th>Clicks</th>
580
+ </tr>
581
+ </thead>
582
+ <tbody>
583
+ <tr>
584
+ <td><span class="btn-chip unknown">unknown</span></td>
585
+ <td>Voir nos partenaires</td>
586
+ <td>14px</td>
587
+ <td>3.27:1</td>
588
+ <td>1</td>
589
+ </tr>
590
+ <tr>
591
+ <td><span class="btn-chip reject">reject</span></td>
592
+ <td>Tout refuser</td>
593
+ <td>14px</td>
594
+ <td>1.1:1</td>
595
+ <td>1</td>
596
+ </tr>
597
+ <tr>
598
+ <td><span class="btn-chip accept">accept</span></td>
599
+ <td>Tout accepter</td>
600
+ <td>16px</td>
601
+ <td>19.02:1</td>
602
+ <td>1</td>
603
+ </tr>
604
+ <tr>
605
+ <td><span class="btn-chip preferences">preferences</span></td>
606
+ <td>Définir les préférences</td>
607
+ <td>16px</td>
608
+ <td>1:1</td>
609
+ <td>1</td>
610
+ </tr>
611
+ </tbody>
612
+ </table>
613
+ </div>
614
+ </div>
615
+
616
+ <div class="section">
617
+ <div class="section-header"><h2>Cookies</h2></div>
618
+ <div class="section-body">
619
+ <div style="margin-bottom: 24px">
620
+ <div
621
+ style="
622
+ font-size: 12px;
623
+ font-weight: 600;
624
+ text-transform: uppercase;
625
+ letter-spacing: 0.04em;
626
+ color: var(--text-muted);
627
+ margin-bottom: 8px;
628
+ display: flex;
629
+ align-items: center;
630
+ gap: 8px;
631
+ "
632
+ >
633
+ Before interaction
634
+ <span class="count-badge">10</span>
635
+ </div>
636
+ <table class="data-table">
637
+ <thead>
638
+ <tr>
639
+ <th>Name</th>
640
+ <th>Domain</th>
641
+ <th>Category</th>
642
+ <th>Expiry</th>
643
+ <th>Consent</th>
644
+ </tr>
645
+ </thead>
646
+ <tbody>
647
+ <tr>
648
+ <td><code>visitor_id</code></td>
649
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
650
+ <td><span class="badge badge-muted">unknown</span></td>
651
+ <td style="color: var(--text-muted)">3mo</td>
652
+ <td><span class="badge badge-muted">No</span></td>
653
+ </tr>
654
+ <tr>
655
+ <td><code>session_id</code></td>
656
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
657
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
658
+ <td style="color: var(--text-muted)">3mo</td>
659
+ <td><span class="badge badge-muted">No</span></td>
660
+ </tr>
661
+ <tr>
662
+ <td><code>__cf_bm</code></td>
663
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
664
+ <td><span class="badge badge-muted">unknown</span></td>
665
+ <td style="color: var(--text-muted)">< 1 day</td>
666
+ <td><span class="badge badge-muted">No</span></td>
667
+ </tr>
668
+ <tr>
669
+ <td><code>_cfuvid</code></td>
670
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
671
+ <td><span class="badge badge-muted">unknown</span></td>
672
+ <td style="color: var(--text-muted)">Session</td>
673
+ <td><span class="badge badge-muted">No</span></td>
674
+ </tr>
675
+ <tr>
676
+ <td><code>_dd_s</code></td>
677
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
678
+ <td><span class="badge badge-muted">unknown</span></td>
679
+ <td style="color: var(--text-muted)">< 1 day</td>
680
+ <td><span class="badge badge-muted">No</span></td>
681
+ </tr>
682
+ <tr>
683
+ <td><code>csrftoken_p</code></td>
684
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
685
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
686
+ <td style="color: var(--text-muted)">12mo</td>
687
+ <td><span class="badge badge-muted">No</span></td>
688
+ </tr>
689
+ <tr>
690
+ <td><code>sessionid</code></td>
691
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
692
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
693
+ <td style="color: var(--text-muted)">3mo</td>
694
+ <td><span class="badge badge-muted">No</span></td>
695
+ </tr>
696
+ <tr>
697
+ <td><code>cf_clearance</code></td>
698
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
699
+ <td><span class="badge badge-muted">unknown</span></td>
700
+ <td style="color: var(--text-muted)">12mo</td>
701
+ <td><span class="badge badge-muted">No</span></td>
702
+ </tr>
703
+ <tr>
704
+ <td><code>didomi_token</code></td>
705
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
706
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
707
+ <td style="color: var(--text-muted)">6mo</td>
708
+ <td><span class="badge badge-muted">No</span></td>
709
+ </tr>
710
+ <tr>
711
+ <td><code>ab.optOut</code></td>
712
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
713
+ <td><span class="badge badge-muted">unknown</span></td>
714
+ <td style="color: var(--text-muted)">13mo</td>
715
+ <td><span class="badge badge-muted">No</span></td>
716
+ </tr>
717
+ </tbody>
718
+ </table>
719
+ </div>
720
+ <div style="margin-bottom: 24px">
721
+ <div
722
+ style="
723
+ font-size: 12px;
724
+ font-weight: 600;
725
+ text-transform: uppercase;
726
+ letter-spacing: 0.04em;
727
+ color: var(--text-muted);
728
+ margin-bottom: 8px;
729
+ display: flex;
730
+ align-items: center;
731
+ gap: 8px;
732
+ "
733
+ >
734
+ After reject
735
+ <span class="count-badge">11</span>
736
+ </div>
737
+ <table class="data-table">
738
+ <thead>
739
+ <tr>
740
+ <th>Name</th>
741
+ <th>Domain</th>
742
+ <th>Category</th>
743
+ <th>Expiry</th>
744
+ <th>Consent</th>
745
+ </tr>
746
+ </thead>
747
+ <tbody>
748
+ <tr>
749
+ <td><code>visitor_id</code></td>
750
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
751
+ <td><span class="badge badge-muted">unknown</span></td>
752
+ <td style="color: var(--text-muted)">3mo</td>
753
+ <td><span class="badge badge-muted">No</span></td>
754
+ </tr>
755
+ <tr>
756
+ <td><code>session_id</code></td>
757
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
758
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
759
+ <td style="color: var(--text-muted)">3mo</td>
760
+ <td><span class="badge badge-muted">No</span></td>
761
+ </tr>
762
+ <tr>
763
+ <td><code>__cf_bm</code></td>
764
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
765
+ <td><span class="badge badge-muted">unknown</span></td>
766
+ <td style="color: var(--text-muted)">< 1 day</td>
767
+ <td><span class="badge badge-muted">No</span></td>
768
+ </tr>
769
+ <tr>
770
+ <td><code>_cfuvid</code></td>
771
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
772
+ <td><span class="badge badge-muted">unknown</span></td>
773
+ <td style="color: var(--text-muted)">Session</td>
774
+ <td><span class="badge badge-muted">No</span></td>
775
+ </tr>
776
+ <tr>
777
+ <td><code>csrftoken_p</code></td>
778
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
779
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
780
+ <td style="color: var(--text-muted)">12mo</td>
781
+ <td><span class="badge badge-muted">No</span></td>
782
+ </tr>
783
+ <tr>
784
+ <td><code>sessionid</code></td>
785
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
786
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
787
+ <td style="color: var(--text-muted)">3mo</td>
788
+ <td><span class="badge badge-muted">No</span></td>
789
+ </tr>
790
+ <tr>
791
+ <td><code>cf_clearance</code></td>
792
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
793
+ <td><span class="badge badge-muted">unknown</span></td>
794
+ <td style="color: var(--text-muted)">12mo</td>
795
+ <td><span class="badge badge-muted">No</span></td>
796
+ </tr>
797
+ <tr>
798
+ <td><code>ab.optOut</code></td>
799
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
800
+ <td><span class="badge badge-muted">unknown</span></td>
801
+ <td style="color: var(--text-muted)">13mo</td>
802
+ <td><span class="badge badge-muted">No</span></td>
803
+ </tr>
804
+ <tr>
805
+ <td><code>_dd_s</code></td>
806
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
807
+ <td><span class="badge badge-muted">unknown</span></td>
808
+ <td style="color: var(--text-muted)">< 1 day</td>
809
+ <td><span class="badge badge-muted">No</span></td>
810
+ </tr>
811
+ <tr>
812
+ <td><code>didomi_token</code></td>
813
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
814
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
815
+ <td style="color: var(--text-muted)">6mo</td>
816
+ <td><span class="badge badge-muted">No</span></td>
817
+ </tr>
818
+ <tr>
819
+ <td><code>euconsent-v2</code></td>
820
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
821
+ <td><span class="badge badge-muted">unknown</span></td>
822
+ <td style="color: var(--text-muted)">6mo</td>
823
+ <td><span class="badge badge-muted">No</span></td>
824
+ </tr>
825
+ </tbody>
826
+ </table>
827
+ </div>
828
+ <div style="margin-bottom: 24px">
829
+ <div
830
+ style="
831
+ font-size: 12px;
832
+ font-weight: 600;
833
+ text-transform: uppercase;
834
+ letter-spacing: 0.04em;
835
+ color: var(--text-muted);
836
+ margin-bottom: 8px;
837
+ display: flex;
838
+ align-items: center;
839
+ gap: 8px;
840
+ "
841
+ >
842
+ After accept
843
+ <span class="count-badge">40</span>
844
+ </div>
845
+ <table class="data-table">
846
+ <thead>
847
+ <tr>
848
+ <th>Name</th>
849
+ <th>Domain</th>
850
+ <th>Category</th>
851
+ <th>Expiry</th>
852
+ <th>Consent</th>
853
+ </tr>
854
+ </thead>
855
+ <tbody>
856
+ <tr>
857
+ <td><code>visitor_id</code></td>
858
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
859
+ <td><span class="badge badge-muted">unknown</span></td>
860
+ <td style="color: var(--text-muted)">3mo</td>
861
+ <td><span class="badge badge-muted">No</span></td>
862
+ </tr>
863
+ <tr>
864
+ <td><code>session_id</code></td>
865
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
866
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
867
+ <td style="color: var(--text-muted)">3mo</td>
868
+ <td><span class="badge badge-muted">No</span></td>
869
+ </tr>
870
+ <tr>
871
+ <td><code>csrftoken_p</code></td>
872
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
873
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
874
+ <td style="color: var(--text-muted)">12mo</td>
875
+ <td><span class="badge badge-muted">No</span></td>
876
+ </tr>
877
+ <tr>
878
+ <td><code>sessionid</code></td>
879
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
880
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
881
+ <td style="color: var(--text-muted)">3mo</td>
882
+ <td><span class="badge badge-muted">No</span></td>
883
+ </tr>
884
+ <tr>
885
+ <td><code>cf_clearance</code></td>
886
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
887
+ <td><span class="badge badge-muted">unknown</span></td>
888
+ <td style="color: var(--text-muted)">12mo</td>
889
+ <td><span class="badge badge-muted">No</span></td>
890
+ </tr>
891
+ <tr>
892
+ <td><code>_dd_s</code></td>
893
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
894
+ <td><span class="badge badge-muted">unknown</span></td>
895
+ <td style="color: var(--text-muted)">< 1 day</td>
896
+ <td><span class="badge badge-muted">No</span></td>
897
+ </tr>
898
+ <tr>
899
+ <td><code>didomi_token</code></td>
900
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
901
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
902
+ <td style="color: var(--text-muted)">6mo</td>
903
+ <td><span class="badge badge-muted">No</span></td>
904
+ </tr>
905
+ <tr>
906
+ <td><code>euconsent-v2</code></td>
907
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
908
+ <td><span class="badge badge-muted">unknown</span></td>
909
+ <td style="color: var(--text-muted)">6mo</td>
910
+ <td><span class="badge badge-muted">No</span></td>
911
+ </tr>
912
+ <tr>
913
+ <td><code>AMP_MKTG_b172142592</code></td>
914
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
915
+ <td><span class="badge badge-muted">analytics</span></td>
916
+ <td style="color: var(--text-muted)">12mo</td>
917
+ <td><span class="badge badge-warning">Required</span></td>
918
+ </tr>
919
+ <tr>
920
+ <td><code>AMP_b172142592</code></td>
921
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
922
+ <td><span class="badge badge-muted">analytics</span></td>
923
+ <td style="color: var(--text-muted)">12mo</td>
924
+ <td><span class="badge badge-warning">Required</span></td>
925
+ </tr>
926
+ <tr>
927
+ <td><code>_rdt_uuid</code></td>
928
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
929
+ <td><span class="badge badge-muted">unknown</span></td>
930
+ <td style="color: var(--text-muted)">3mo</td>
931
+ <td><span class="badge badge-muted">No</span></td>
932
+ </tr>
933
+ <tr>
934
+ <td><code>__rtbh.uid</code></td>
935
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
936
+ <td><span class="badge badge-muted">unknown</span></td>
937
+ <td style="color: var(--text-muted)">12mo</td>
938
+ <td><span class="badge badge-muted">No</span></td>
939
+ </tr>
940
+ <tr>
941
+ <td><code>__rtbh.lid</code></td>
942
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
943
+ <td><span class="badge badge-muted">unknown</span></td>
944
+ <td style="color: var(--text-muted)">12mo</td>
945
+ <td><span class="badge badge-muted">No</span></td>
946
+ </tr>
947
+ <tr>
948
+ <td><code>_uetsid</code></td>
949
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
950
+ <td><span class="badge badge-muted">unknown</span></td>
951
+ <td style="color: var(--text-muted)">1d</td>
952
+ <td><span class="badge badge-muted">No</span></td>
953
+ </tr>
954
+ <tr>
955
+ <td><code>_uetvid</code></td>
956
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
957
+ <td><span class="badge badge-muted">unknown</span></td>
958
+ <td style="color: var(--text-muted)">13mo</td>
959
+ <td><span class="badge badge-muted">No</span></td>
960
+ </tr>
961
+ <tr>
962
+ <td><code>g</code></td>
963
+ <td style="color: var(--text-muted)">.creativecdn.com</td>
964
+ <td><span class="badge badge-muted">unknown</span></td>
965
+ <td style="color: var(--text-muted)">12mo</td>
966
+ <td><span class="badge badge-warning">Required</span></td>
967
+ </tr>
968
+ <tr>
969
+ <td><code>c</code></td>
970
+ <td style="color: var(--text-muted)">.creativecdn.com</td>
971
+ <td><span class="badge badge-muted">unknown</span></td>
972
+ <td style="color: var(--text-muted)">12mo</td>
973
+ <td><span class="badge badge-warning">Required</span></td>
974
+ </tr>
975
+ <tr>
976
+ <td><code>ts</code></td>
977
+ <td style="color: var(--text-muted)">.creativecdn.com</td>
978
+ <td><span class="badge badge-muted">unknown</span></td>
979
+ <td style="color: var(--text-muted)">12mo</td>
980
+ <td><span class="badge badge-warning">Required</span></td>
981
+ </tr>
982
+ <tr>
983
+ <td><code>ar_debug</code></td>
984
+ <td style="color: var(--text-muted)">.pinterest.com</td>
985
+ <td><span class="badge badge-muted">unknown</span></td>
986
+ <td style="color: var(--text-muted)">12mo</td>
987
+ <td><span class="badge badge-muted">No</span></td>
988
+ </tr>
989
+ <tr>
990
+ <td><code>_pin_unauth</code></td>
991
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
992
+ <td><span class="badge badge-muted">unknown</span></td>
993
+ <td style="color: var(--text-muted)">12mo</td>
994
+ <td><span class="badge badge-muted">No</span></td>
995
+ </tr>
996
+ <tr>
997
+ <td><code>MUID</code></td>
998
+ <td style="color: var(--text-muted)">.bing.com</td>
999
+ <td><span class="badge badge-muted">advertising</span></td>
1000
+ <td style="color: var(--text-muted)">13mo</td>
1001
+ <td><span class="badge badge-warning">Required</span></td>
1002
+ </tr>
1003
+ <tr>
1004
+ <td><code>_fbp</code></td>
1005
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1006
+ <td><span class="badge badge-muted">advertising</span></td>
1007
+ <td style="color: var(--text-muted)">3mo</td>
1008
+ <td><span class="badge badge-warning">Required</span></td>
1009
+ </tr>
1010
+ <tr>
1011
+ <td><code>_pinterest_ct_ua</code></td>
1012
+ <td style="color: var(--text-muted)">.ct.pinterest.com</td>
1013
+ <td><span class="badge badge-muted">unknown</span></td>
1014
+ <td style="color: var(--text-muted)">12mo</td>
1015
+ <td><span class="badge badge-muted">No</span></td>
1016
+ </tr>
1017
+ <tr>
1018
+ <td><code>_ga_W101YGMKND</code></td>
1019
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1020
+ <td><span class="badge badge-muted">analytics</span></td>
1021
+ <td style="color: var(--text-muted)">13mo</td>
1022
+ <td><span class="badge badge-warning">Required</span></td>
1023
+ </tr>
1024
+ <tr>
1025
+ <td><code>_ga</code></td>
1026
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1027
+ <td><span class="badge badge-muted">analytics</span></td>
1028
+ <td style="color: var(--text-muted)">13mo</td>
1029
+ <td><span class="badge badge-warning">Required</span></td>
1030
+ </tr>
1031
+ <tr>
1032
+ <td><code>XANDR_PANID</code></td>
1033
+ <td style="color: var(--text-muted)">.adnxs.com</td>
1034
+ <td><span class="badge badge-muted">unknown</span></td>
1035
+ <td style="color: var(--text-muted)">3mo</td>
1036
+ <td><span class="badge badge-muted">No</span></td>
1037
+ </tr>
1038
+ <tr>
1039
+ <td><code>uuid2</code></td>
1040
+ <td style="color: var(--text-muted)">.adnxs.com</td>
1041
+ <td><span class="badge badge-muted">unknown</span></td>
1042
+ <td style="color: var(--text-muted)">3mo</td>
1043
+ <td><span class="badge badge-muted">No</span></td>
1044
+ </tr>
1045
+ <tr>
1046
+ <td><code>_gcl_au</code></td>
1047
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1048
+ <td><span class="badge badge-muted">unknown</span></td>
1049
+ <td style="color: var(--text-muted)">3mo</td>
1050
+ <td><span class="badge badge-muted">No</span></td>
1051
+ </tr>
1052
+ <tr>
1053
+ <td><code>anj</code></td>
1054
+ <td style="color: var(--text-muted)">.adnxs.com</td>
1055
+ <td><span class="badge badge-muted">unknown</span></td>
1056
+ <td style="color: var(--text-muted)">3mo</td>
1057
+ <td><span class="badge badge-muted">No</span></td>
1058
+ </tr>
1059
+ <tr>
1060
+ <td><code>visitor_id</code></td>
1061
+ <td style="color: var(--text-muted)">gobbledygook.backmarket.fr</td>
1062
+ <td><span class="badge badge-muted">unknown</span></td>
1063
+ <td style="color: var(--text-muted)">3mo</td>
1064
+ <td><span class="badge badge-muted">No</span></td>
1065
+ </tr>
1066
+ <tr>
1067
+ <td><code>session_id</code></td>
1068
+ <td style="color: var(--text-muted)">gobbledygook.backmarket.fr</td>
1069
+ <td><span class="badge badge-muted">strictly-necessary</span></td>
1070
+ <td style="color: var(--text-muted)">3mo</td>
1071
+ <td><span class="badge badge-muted">No</span></td>
1072
+ </tr>
1073
+ <tr>
1074
+ <td><code>FPAU</code></td>
1075
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1076
+ <td><span class="badge badge-muted">unknown</span></td>
1077
+ <td style="color: var(--text-muted)">3mo</td>
1078
+ <td><span class="badge badge-warning">Required</span></td>
1079
+ </tr>
1080
+ <tr>
1081
+ <td><code>FPGSID</code></td>
1082
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1083
+ <td><span class="badge badge-muted">unknown</span></td>
1084
+ <td style="color: var(--text-muted)">< 1 day</td>
1085
+ <td><span class="badge badge-muted">No</span></td>
1086
+ </tr>
1087
+ <tr>
1088
+ <td><code>_tq_id.TV-5445451818-1.1920</code></td>
1089
+ <td style="color: var(--text-muted)">www.backmarket.fr</td>
1090
+ <td><span class="badge badge-muted">unknown</span></td>
1091
+ <td style="color: var(--text-muted)">13mo</td>
1092
+ <td><span class="badge badge-muted">No</span></td>
1093
+ </tr>
1094
+ <tr>
1095
+ <td><code>__cf_bm</code></td>
1096
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1097
+ <td><span class="badge badge-muted">unknown</span></td>
1098
+ <td style="color: var(--text-muted)">< 1 day</td>
1099
+ <td><span class="badge badge-muted">No</span></td>
1100
+ </tr>
1101
+ <tr>
1102
+ <td><code>_cfuvid</code></td>
1103
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1104
+ <td><span class="badge badge-muted">unknown</span></td>
1105
+ <td style="color: var(--text-muted)">Session</td>
1106
+ <td><span class="badge badge-muted">No</span></td>
1107
+ </tr>
1108
+ <tr>
1109
+ <td><code>test_cookie</code></td>
1110
+ <td style="color: var(--text-muted)">.doubleclick.net</td>
1111
+ <td><span class="badge badge-muted">unknown</span></td>
1112
+ <td style="color: var(--text-muted)">< 1 day</td>
1113
+ <td><span class="badge badge-muted">No</span></td>
1114
+ </tr>
1115
+ <tr>
1116
+ <td><code>_gtmeec</code></td>
1117
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1118
+ <td><span class="badge badge-muted">unknown</span></td>
1119
+ <td style="color: var(--text-muted)">3mo</td>
1120
+ <td><span class="badge badge-muted">No</span></td>
1121
+ </tr>
1122
+ <tr>
1123
+ <td><code>ServerAwinChannelCookie</code></td>
1124
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1125
+ <td><span class="badge badge-muted">unknown</span></td>
1126
+ <td style="color: var(--text-muted)">1mo</td>
1127
+ <td><span class="badge badge-muted">No</span></td>
1128
+ </tr>
1129
+ <tr>
1130
+ <td><code>_scid</code></td>
1131
+ <td style="color: var(--text-muted)">.backmarket.fr</td>
1132
+ <td><span class="badge badge-muted">unknown</span></td>
1133
+ <td style="color: var(--text-muted)">12mo</td>
1134
+ <td><span class="badge badge-muted">No</span></td>
1135
+ </tr>
1136
+ </tbody>
1137
+ </table>
1138
+ </div>
1139
+ </div>
1140
+ </div>
1141
+
1142
+ <div class="section">
1143
+ <div class="section-header">
1144
+ <h2>Network trackers</h2>
1145
+ <span class="count-badge">23</span>
1146
+ <span class="badge badge-critical">1 before consent</span>
1147
+ </div>
1148
+ <div class="section-body no-pad">
1149
+ <table class="data-table">
1150
+ <thead>
1151
+ <tr>
1152
+ <th>Tracker</th>
1153
+ <th>Category</th>
1154
+ <th>Phase</th>
1155
+ <th>URL</th>
1156
+ </tr>
1157
+ </thead>
1158
+ <tbody>
1159
+ <tr>
1160
+ <td>Google Tag Manager</td>
1161
+ <td><span class="badge badge-muted">analytics</span></td>
1162
+ <td><span class="badge badge-critical">before consent</span></td>
1163
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1164
+ <code
1165
+ >https://www.googletagmanager.com/gtm.js?id=GTM-N6P9JCF&amp;gtg_health=1</code
1166
+ >
1167
+ </td>
1168
+ </tr>
1169
+ <tr>
1170
+ <td>Google Tag Manager</td>
1171
+ <td><span class="badge badge-muted">analytics</span></td>
1172
+ <td><span class="badge badge-muted">after-accept</span></td>
1173
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1174
+ <code
1175
+ >https://www.googletagmanager.com/gtm.js?id=GTM-N6P9JCF&amp;gtg_health=1</code
1176
+ >
1177
+ </td>
1178
+ </tr>
1179
+ <tr>
1180
+ <td>Facebook SDK</td>
1181
+ <td><span class="badge badge-muted">social</span></td>
1182
+ <td><span class="badge badge-muted">after-accept</span></td>
1183
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1184
+ <code>https://connect.facebook.net/en_US/fbevents.js</code>
1185
+ </td>
1186
+ </tr>
1187
+ <tr>
1188
+ <td>Bing Ads</td>
1189
+ <td><span class="badge badge-muted">advertising</span></td>
1190
+ <td><span class="badge badge-muted">after-accept</span></td>
1191
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1192
+ <code>https://bat.bing.com/bat.js</code>
1193
+ </td>
1194
+ </tr>
1195
+ <tr>
1196
+ <td>Tracking Pixel</td>
1197
+ <td><span class="badge badge-muted">pixel</span></td>
1198
+ <td><span class="badge badge-muted">after-accept</span></td>
1199
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1200
+ <code
1201
+ >https://alb.reddit.com/rp.gif?ts=1771946830358&amp;id=t2_jj9rwx1&amp;event=…</code
1202
+ >
1203
+ </td>
1204
+ </tr>
1205
+ <tr>
1206
+ <td>Tracking Pixel</td>
1207
+ <td><span class="badge badge-muted">pixel</span></td>
1208
+ <td><span class="badge badge-muted">after-accept</span></td>
1209
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1210
+ <code
1211
+ >https://ct.pinterest.com/user/?event=pagevisit&amp;ed=%7B%22event_id%22…</code
1212
+ >
1213
+ </td>
1214
+ </tr>
1215
+ <tr>
1216
+ <td>Tracking Pixel</td>
1217
+ <td><span class="badge badge-muted">pixel</span></td>
1218
+ <td><span class="badge badge-muted">after-accept</span></td>
1219
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1220
+ <code
1221
+ >https://ct.pinterest.com/v3/?tid=2613307596029&amp;pd=%7B%22np%22%3A%22…</code
1222
+ >
1223
+ </td>
1224
+ </tr>
1225
+ <tr>
1226
+ <td>Bing Ads</td>
1227
+ <td><span class="badge badge-muted">advertising</span></td>
1228
+ <td><span class="badge badge-muted">after-accept</span></td>
1229
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1230
+ <code>https://bat.bing.com/p/action/5118187.js</code>
1231
+ </td>
1232
+ </tr>
1233
+ <tr>
1234
+ <td>Facebook SDK</td>
1235
+ <td><span class="badge badge-muted">social</span></td>
1236
+ <td><span class="badge badge-muted">after-accept</span></td>
1237
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1238
+ <code>https://connect.facebook.net/signals/config/783393745082203?v=2.9.2…</code>
1239
+ </td>
1240
+ </tr>
1241
+ <tr>
1242
+ <td>Bing Ads</td>
1243
+ <td><span class="badge badge-muted">advertising</span></td>
1244
+ <td><span class="badge badge-muted">after-accept</span></td>
1245
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1246
+ <code
1247
+ >https://bat.bing.com/actionp/0?ti=5118187&amp;tm=gtm002&amp;Ver=2&amp;mid=7cb3e…</code
1248
+ >
1249
+ </td>
1250
+ </tr>
1251
+ <tr>
1252
+ <td>Bing Ads</td>
1253
+ <td><span class="badge badge-muted">advertising</span></td>
1254
+ <td><span class="badge badge-muted">after-accept</span></td>
1255
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1256
+ <code
1257
+ >https://bat.bing.com/actionp/0?ti=5118187&amp;tm=gtm002&amp;Ver=2&amp;mid=7cb3e…</code
1258
+ >
1259
+ </td>
1260
+ </tr>
1261
+ <tr>
1262
+ <td>Bing Ads</td>
1263
+ <td><span class="badge badge-muted">advertising</span></td>
1264
+ <td><span class="badge badge-muted">after-accept</span></td>
1265
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1266
+ <code
1267
+ >https://bat.bing.com/actionp/0?ti=5118187&amp;tm=gtm002&amp;Ver=2&amp;mid=7cb3e…</code
1268
+ >
1269
+ </td>
1270
+ </tr>
1271
+ <tr>
1272
+ <td>Bing Ads</td>
1273
+ <td><span class="badge badge-muted">advertising</span></td>
1274
+ <td><span class="badge badge-muted">after-accept</span></td>
1275
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1276
+ <code
1277
+ >https://bat.bing.com/action/0?ti=5118187&amp;tm=gtm002&amp;Ver=2&amp;mid=7cb3ea…</code
1278
+ >
1279
+ </td>
1280
+ </tr>
1281
+ <tr>
1282
+ <td>Tracking Pixel</td>
1283
+ <td><span class="badge badge-muted">pixel</span></td>
1284
+ <td><span class="badge badge-muted">after-accept</span></td>
1285
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1286
+ <code
1287
+ >https://ct.pinterest.com/v3/?event=pagevisit&amp;ed=%7B%22event_id%22%3…</code
1288
+ >
1289
+ </td>
1290
+ </tr>
1291
+ <tr>
1292
+ <td>Google Tag Manager</td>
1293
+ <td><span class="badge badge-muted">analytics</span></td>
1294
+ <td><span class="badge badge-muted">after-accept</span></td>
1295
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1296
+ <code
1297
+ >https://www.googletagmanager.com/gtag/destination?id=AW-930361829&amp;c…</code
1298
+ >
1299
+ </td>
1300
+ </tr>
1301
+ <tr>
1302
+ <td>Google Tag Manager</td>
1303
+ <td><span class="badge badge-muted">analytics</span></td>
1304
+ <td><span class="badge badge-muted">after-accept</span></td>
1305
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1306
+ <code
1307
+ >https://www.googletagmanager.com/gtag/destination?id=AW-820619352&amp;c…</code
1308
+ >
1309
+ </td>
1310
+ </tr>
1311
+ <tr>
1312
+ <td>Google Ad Services</td>
1313
+ <td><span class="badge badge-muted">advertising</span></td>
1314
+ <td><span class="badge badge-muted">after-accept</span></td>
1315
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1316
+ <code>https://www.googleadservices.com/pagead/conversion/930361829/?rando…</code>
1317
+ </td>
1318
+ </tr>
1319
+ <tr>
1320
+ <td>Google Tag Manager</td>
1321
+ <td><span class="badge badge-muted">analytics</span></td>
1322
+ <td><span class="badge badge-muted">after-accept</span></td>
1323
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1324
+ <code>https://www.googletagmanager.com/static/service_worker/6240/sw_ifra…</code>
1325
+ </td>
1326
+ </tr>
1327
+ <tr>
1328
+ <td>Google Ad Services</td>
1329
+ <td><span class="badge badge-muted">advertising</span></td>
1330
+ <td><span class="badge badge-muted">after-accept</span></td>
1331
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1332
+ <code>https://www.googleadservices.com/pagead/conversion/820619352/?rando…</code>
1333
+ </td>
1334
+ </tr>
1335
+ <tr>
1336
+ <td>Google Analytics</td>
1337
+ <td><span class="badge badge-muted">analytics</span></td>
1338
+ <td><span class="badge badge-muted">after-accept</span></td>
1339
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1340
+ <code
1341
+ >https://region1.analytics.google.com/g/s/collect?dma=1&amp;dma_cps=syph…</code
1342
+ >
1343
+ </td>
1344
+ </tr>
1345
+ <tr>
1346
+ <td>Google DoubleClick</td>
1347
+ <td><span class="badge badge-muted">advertising</span></td>
1348
+ <td><span class="badge badge-muted">after-accept</span></td>
1349
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1350
+ <code
1351
+ >https://stats.g.doubleclick.net/g/collect?v=2&amp;dma=1&amp;dma_cps=syphamo…</code
1352
+ >
1353
+ </td>
1354
+ </tr>
1355
+ <tr>
1356
+ <td>Google DoubleClick</td>
1357
+ <td><span class="badge badge-muted">advertising</span></td>
1358
+ <td><span class="badge badge-muted">after-accept</span></td>
1359
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1360
+ <code>https://googleads.g.doubleclick.net/pagead/viewthroughconversion/93…</code>
1361
+ </td>
1362
+ </tr>
1363
+ <tr>
1364
+ <td>Google DoubleClick</td>
1365
+ <td><span class="badge badge-muted">advertising</span></td>
1366
+ <td><span class="badge badge-muted">after-accept</span></td>
1367
+ <td style="font-size: 11px; color: var(--text-muted); word-break: break-all">
1368
+ <code>https://googleads.g.doubleclick.net/pagead/viewthroughconversion/82…</code>
1369
+ </td>
1370
+ </tr>
1371
+ </tbody>
1372
+ </table>
1373
+ </div>
1374
+ </div>
1375
+
1376
+ <div class="section">
1377
+ <div class="section-header">
1378
+ <h2>Recommendations</h2>
1379
+ <span class="count-badge">3</span>
1380
+ </div>
1381
+ <div class="section-body">
1382
+ <ul class="rec-list">
1383
+ <li class="rec-item">
1384
+ <span class="rec-num">1</span>
1385
+ <span
1386
+ >Equalise the styling of Accept / Reject buttons: same size, same colour, same level
1387
+ of visibility.</span
1388
+ >
1389
+ </li>
1390
+ <li class="rec-item">
1391
+ <span class="rec-num">2</span>
1392
+ <span
1393
+ >Do not set any non-essential cookie before consent. Gate the initialisation of
1394
+ third-party scripts on the acceptance callback.</span
1395
+ >
1396
+ </li>
1397
+ <li class="rec-item">
1398
+ <span class="rec-num">3</span>
1399
+ <span
1400
+ >Complete the modal information: processing purposes, identity of sub-processors,
1401
+ retention period, right to withdraw.</span
1402
+ >
1403
+ </li>
1404
+ </ul>
1405
+ </div>
1406
+ </div>
1407
+
1408
+ <div class="section">
1409
+ <div class="section-header">
1410
+ <h2>Compliance checklist</h2>
1411
+ <span class="count-badge">12 rules</span>
1412
+ <span class="badge badge-ok">10 ✓</span>
1413
+ <span class="badge badge-critical">1 ✗</span>
1414
+ <span class="badge badge-warning">1 ⚠</span>
1415
+ </div>
1416
+ <div class="section-body no-pad">
1417
+ <table class="data-table">
1418
+ <thead>
1419
+ <tr>
1420
+ <th>Category</th>
1421
+ <th>Rule</th>
1422
+ <th>Status</th>
1423
+ <th>Detail</th>
1424
+ </tr>
1425
+ </thead>
1426
+ <tbody>
1427
+ <tr>
1428
+ <td
1429
+ rowspan="3"
1430
+ style="font-weight: 600; vertical-align: top; background: var(--bg)"
1431
+ >
1432
+ Consent
1433
+ </td>
1434
+ <td>Consent modal detected</td>
1435
+ <td><span class="status-ok">✓ Compliant</span></td>
1436
+ <td style="color: var(--text-muted); font-size: 12px">
1437
+ Detected (.didomi-popup-container)
1438
+ </td>
1439
+ </tr>
1440
+ <tr>
1441
+ <td>No pre-ticked checkboxes</td>
1442
+ <td><span class="status-ok">✓ Compliant</span></td>
1443
+ <td style="color: var(--text-muted); font-size: 12px">None detected</td>
1444
+ </tr>
1445
+ <tr>
1446
+ <td>Unambiguous accept label</td>
1447
+ <td><span class="status-ok">✓ Compliant</span></td>
1448
+ <td style="color: var(--text-muted); font-size: 12px">Tout accepter</td>
1449
+ </tr>
1450
+ <tr>
1451
+ <td
1452
+ rowspan="3"
1453
+ style="font-weight: 600; vertical-align: top; background: var(--bg)"
1454
+ >
1455
+ Easy refusal
1456
+ </td>
1457
+ <td>Reject button at first layer</td>
1458
+ <td><span class="status-ok">✓ Compliant</span></td>
1459
+ <td style="color: var(--text-muted); font-size: 12px">Tout refuser</td>
1460
+ </tr>
1461
+ <tr>
1462
+ <td>Reject ≤ clicks than accept</td>
1463
+ <td><span class="status-ok">✓ Compliant</span></td>
1464
+ <td style="color: var(--text-muted); font-size: 12px">Accept: 1 · Reject: 1</td>
1465
+ </tr>
1466
+ <tr>
1467
+ <td>Button size symmetry</td>
1468
+ <td><span class="status-warn">⚠ Warning</span></td>
1469
+ <td style="color: var(--text-muted); font-size: 12px">
1470
+ Accept button is significantly larger
1471
+ </td>
1472
+ </tr>
1473
+ <tr>
1474
+ <td
1475
+ rowspan="3"
1476
+ style="font-weight: 600; vertical-align: top; background: var(--bg)"
1477
+ >
1478
+ Transparency
1479
+ </td>
1480
+ <td>Granular controls available</td>
1481
+ <td><span class="status-ok">✓ Compliant</span></td>
1482
+ <td style="color: var(--text-muted); font-size: 12px">0 control(s) detected</td>
1483
+ </tr>
1484
+ <tr>
1485
+ <td>Privacy policy in modal</td>
1486
+ <td><span class="status-ok">✓ Compliant</span></td>
1487
+ <td style="color: var(--text-muted); font-size: 12px">
1488
+ https://www.backmarket.fr/fr-fr/legal/data-protection
1489
+ </td>
1490
+ </tr>
1491
+ <tr>
1492
+ <td>Privacy policy on page</td>
1493
+ <td><span class="status-ok">✓ Compliant</span></td>
1494
+ <td style="color: var(--text-muted); font-size: 12px">
1495
+ https://www.backmarket.fr/fr-fr/legal/data-protection
1496
+ </td>
1497
+ </tr>
1498
+ <tr>
1499
+ <td
1500
+ rowspan="3"
1501
+ style="font-weight: 600; vertical-align: top; background: var(--bg)"
1502
+ >
1503
+ Cookie behavior
1504
+ </td>
1505
+ <td>No non-essential cookie before consent</td>
1506
+ <td><span class="status-ok">✓ Compliant</span></td>
1507
+ <td style="color: var(--text-muted); font-size: 12px">None</td>
1508
+ </tr>
1509
+ <tr>
1510
+ <td>Non-essential cookies removed after reject</td>
1511
+ <td><span class="status-ok">✓ Compliant</span></td>
1512
+ <td style="color: var(--text-muted); font-size: 12px">Correctly removed</td>
1513
+ </tr>
1514
+ <tr>
1515
+ <td>No tracker before consent</td>
1516
+ <td><span class="status-ko">✗ Non-compliant</span></td>
1517
+ <td style="color: var(--text-muted); font-size: 12px">1 tracker(s)</td>
1518
+ </tr>
1519
+ </tbody>
1520
+ </table>
1521
+ </div>
1522
+ </div>
1523
+
1524
+ <div class="footer">
1525
+ Generated by <a href="https://github.com/Slashgear/gdpr-report">gdpr-cookie-scanner</a>
1526
+ on 24 February 2026 at 16:27
1527
+ </div>
1528
+ </div>
1529
+ </body>
1530
+ </html>