@product7/product7-js 0.1.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 (58) hide show
  1. package/README.md +1025 -0
  2. package/dist/README.md +1025 -0
  3. package/dist/product7-js.js +14658 -0
  4. package/dist/product7-js.js.map +1 -0
  5. package/dist/product7-js.min.js +2 -0
  6. package/dist/product7-js.min.js.map +1 -0
  7. package/package.json +114 -0
  8. package/src/api/mock-data/index.js +360 -0
  9. package/src/api/services/ChangelogService.js +28 -0
  10. package/src/api/services/FeedbackService.js +44 -0
  11. package/src/api/services/HelpService.js +50 -0
  12. package/src/api/services/MessengerService.js +279 -0
  13. package/src/api/services/SurveyService.js +127 -0
  14. package/src/api/utils/helpers.js +30 -0
  15. package/src/core/APIService.js +303 -0
  16. package/src/core/BaseAPIService.js +298 -0
  17. package/src/core/EventBus.js +54 -0
  18. package/src/core/Product7.js +812 -0
  19. package/src/core/WebSocketService.js +275 -0
  20. package/src/docs/api.md +226 -0
  21. package/src/docs/example.md +461 -0
  22. package/src/docs/framework-integrations.md +714 -0
  23. package/src/docs/installation.md +281 -0
  24. package/src/index.js +894 -0
  25. package/src/styles/base.js +50 -0
  26. package/src/styles/changelog.js +665 -0
  27. package/src/styles/components.js +553 -0
  28. package/src/styles/design-tokens.js +124 -0
  29. package/src/styles/feedback.js +325 -0
  30. package/src/styles/messenger-components.js +632 -0
  31. package/src/styles/messenger-core.js +233 -0
  32. package/src/styles/messenger-features.js +169 -0
  33. package/src/styles/messenger-views.js +877 -0
  34. package/src/styles/messenger.js +17 -0
  35. package/src/styles/messengerCustomStyles.js +114 -0
  36. package/src/styles/styles.js +26 -0
  37. package/src/styles/survey.js +894 -0
  38. package/src/utils/errors.js +142 -0
  39. package/src/utils/helpers.js +219 -0
  40. package/src/widgets/BaseWidget.js +548 -0
  41. package/src/widgets/ButtonWidget.js +104 -0
  42. package/src/widgets/ChangelogWidget.js +615 -0
  43. package/src/widgets/InlineWidget.js +148 -0
  44. package/src/widgets/MessengerWidget.js +979 -0
  45. package/src/widgets/SurveyWidget.js +1325 -0
  46. package/src/widgets/TabWidget.js +45 -0
  47. package/src/widgets/WidgetFactory.js +70 -0
  48. package/src/widgets/messenger/MessengerState.js +323 -0
  49. package/src/widgets/messenger/components/MessengerLauncher.js +124 -0
  50. package/src/widgets/messenger/components/MessengerPanel.js +111 -0
  51. package/src/widgets/messenger/components/NavigationTabs.js +130 -0
  52. package/src/widgets/messenger/views/ChangelogView.js +167 -0
  53. package/src/widgets/messenger/views/ChatView.js +592 -0
  54. package/src/widgets/messenger/views/ConversationsView.js +244 -0
  55. package/src/widgets/messenger/views/HelpView.js +239 -0
  56. package/src/widgets/messenger/views/HomeView.js +300 -0
  57. package/src/widgets/messenger/views/PreChatFormView.js +109 -0
  58. package/types/index.d.ts +341 -0
@@ -0,0 +1,894 @@
1
+ export const surveyStyles = `
2
+ .feedback-survey-container {
3
+ display: none;
4
+ }
5
+
6
+ .feedback-survey-backdrop {
7
+ position: fixed;
8
+ top: 0;
9
+ left: 0;
10
+ right: 0;
11
+ bottom: 0;
12
+ background: rgba(0, 0, 0, 0.4);
13
+ z-index: var(--z-modal-backdrop);
14
+ animation: fadeIn var(--transition-slow);
15
+ }
16
+
17
+ .feedback-survey-backdrop-dark {
18
+ background: rgba(2, 6, 23, 0.65);
19
+ }
20
+
21
+ /* ========================================
22
+ SURVEY CARD
23
+ ======================================== */
24
+
25
+ .feedback-survey {
26
+ position: fixed;
27
+ z-index: var(--z-modal);
28
+ background: var(--color-white);
29
+ border: 1px solid var(--color-neutral-200);
30
+ border-radius: var(--radius-xl);
31
+ box-shadow: var(--shadow-lg);
32
+ padding: var(--spacing-6);
33
+ min-width: 320px;
34
+ max-width: 400px;
35
+ font-family: inherit;
36
+ overflow: hidden;
37
+ opacity: 0;
38
+ transition: opacity 200ms ease, transform 240ms cubic-bezier(0.16, 1, 0.3, 1);
39
+ }
40
+
41
+ /* ========================================
42
+ DARK THEME — scoped variable overrides
43
+ ======================================== */
44
+
45
+ .feedback-survey-theme-dark {
46
+ /* Aligned with messenger dark theme */
47
+ --color-white: #0f1317;
48
+ --color-background: #0f1317;
49
+ --color-surface: #1a1e24;
50
+ --color-border: #232930;
51
+ --color-neutral-50: #1a1e24;
52
+ --color-neutral-100: #1a1e24;
53
+ --color-neutral-200: #232930;
54
+ --color-neutral-300: #2d343c;
55
+ --color-neutral-400: #555555;
56
+ --color-neutral-500: #777777;
57
+ --color-neutral-900: #e8e8e8;
58
+ --color-text-primary: #e8e8e8;
59
+ --color-text-secondary: #999999;
60
+ --color-text-tertiary: #666666;
61
+ /* Survey-specific tokens */
62
+ --color-primary-light: rgba(21, 94, 239, 0.18);
63
+ --color-primary-border: rgba(21, 94, 239, 0.4);
64
+ --color-error-light: rgba(239, 68, 68, 0.15);
65
+ --color-error-border: rgba(239, 68, 68, 0.25);
66
+ --color-error-dark: #fca5a5;
67
+ }
68
+
69
+ /* ========================================
70
+ POSITION VARIANTS + ENTRANCE STATES
71
+ ======================================== */
72
+
73
+ .feedback-survey-right {
74
+ bottom: var(--spacing-6);
75
+ right: var(--spacing-6);
76
+ transform: translateY(10px);
77
+ }
78
+
79
+ .feedback-survey-left {
80
+ bottom: var(--spacing-6);
81
+ left: var(--spacing-6);
82
+ transform: translateY(10px);
83
+ }
84
+
85
+ .feedback-survey-center {
86
+ top: 50%;
87
+ left: 50%;
88
+ transform: translate(-50%, -50%) scale(0.97);
89
+ }
90
+
91
+
92
+ /* ========================================
93
+ CLOSE BUTTON
94
+ ======================================== */
95
+
96
+ .feedback-survey-close {
97
+ position: absolute;
98
+ top: var(--spacing-4);
99
+ right: var(--spacing-4);
100
+ background: none;
101
+ border: none;
102
+ cursor: pointer;
103
+ color: var(--color-neutral-500);
104
+ padding: 4px;
105
+ width: 28px;
106
+ height: 28px;
107
+ display: flex;
108
+ align-items: center;
109
+ justify-content: center;
110
+ border-radius: var(--radius-md);
111
+ transition: all var(--transition-base);
112
+ }
113
+
114
+ .feedback-survey-close iconify-icon {
115
+ display: block;
116
+ }
117
+
118
+ .feedback-survey-close:hover {
119
+ background: var(--color-neutral-100);
120
+ color: var(--color-neutral-900);
121
+ }
122
+
123
+ .feedback-survey-close:focus-visible {
124
+ outline: none;
125
+ box-shadow: 0 0 0 3px var(--color-primary-light);
126
+ }
127
+
128
+ /* ========================================
129
+ TYPOGRAPHY
130
+ ======================================== */
131
+
132
+ .feedback-survey-title {
133
+ margin: 0 0 var(--spacing-3) 0;
134
+ font-size: var(--font-size-xl);
135
+ font-weight: var(--font-weight-semibold);
136
+ line-height: var(--line-height-snug);
137
+ padding-right: 36px;
138
+ color: var(--color-text-primary);
139
+ }
140
+
141
+ .feedback-survey-description {
142
+ color: var(--color-text-secondary);
143
+ margin: 0 0 var(--spacing-4) 0;
144
+ font-size: var(--font-size-base);
145
+ line-height: var(--line-height-relaxed);
146
+ }
147
+
148
+ .feedback-survey-description-primary .feedback-survey-description {
149
+ color: var(--color-text-primary);
150
+ font-size: var(--font-size-lg);
151
+ font-weight: var(--font-weight-semibold);
152
+ line-height: var(--line-height-snug);
153
+ padding-right: 36px;
154
+ }
155
+
156
+ .feedback-survey-content {
157
+ margin-bottom: var(--spacing-3);
158
+ }
159
+
160
+ /* ========================================
161
+ PROGRESS BAR
162
+ ======================================== */
163
+
164
+ .feedback-survey-progress {
165
+ margin-bottom: var(--spacing-4);
166
+ }
167
+
168
+ .feedback-survey-progress-track {
169
+ height: 3px;
170
+ background: var(--color-neutral-200);
171
+ border-radius: var(--radius-full);
172
+ overflow: hidden;
173
+ }
174
+
175
+ .feedback-survey-progress-fill {
176
+ height: 100%;
177
+ background: var(--color-primary);
178
+ border-radius: var(--radius-full);
179
+ transition: width 320ms cubic-bezier(0.16, 1, 0.3, 1);
180
+ }
181
+
182
+ /* ========================================
183
+ NPS
184
+ ======================================== */
185
+
186
+ .feedback-survey-nps {
187
+ display: flex;
188
+ justify-content: space-between;
189
+ gap: var(--spacing-1);
190
+ }
191
+
192
+ .feedback-survey-nps-btn {
193
+ flex: 1;
194
+ height: 40px;
195
+ min-height: unset;
196
+ border: 1px solid var(--color-border);
197
+ border-radius: var(--radius-md);
198
+ background: var(--color-surface);
199
+ cursor: pointer;
200
+ font-size: var(--font-size-sm);
201
+ font-weight: var(--font-weight-medium);
202
+ color: var(--color-text-primary);
203
+ transition: all var(--transition-fast);
204
+ font-family: inherit;
205
+ }
206
+
207
+ .feedback-survey-nps-btn:hover {
208
+ background: var(--color-primary-light);
209
+ border-color: var(--color-primary-border);
210
+ color: var(--color-primary);
211
+ }
212
+
213
+ .feedback-survey-nps-btn.selected {
214
+ background: var(--color-primary-light);
215
+ border-color: var(--color-primary);
216
+ color: var(--color-primary-active);
217
+ transform: scale(1.06);
218
+ z-index: 1;
219
+ position: relative;
220
+ }
221
+
222
+ /* ========================================
223
+ CSAT
224
+ ======================================== */
225
+
226
+ .feedback-survey-csat {
227
+ display: flex;
228
+ justify-content: center;
229
+ gap: var(--spacing-4);
230
+ padding: var(--spacing-2) 0;
231
+ }
232
+
233
+ .feedback-survey-csat-btn {
234
+ background: none;
235
+ border: none;
236
+ cursor: pointer;
237
+ font-size: 32px;
238
+ transition: transform var(--transition-fast), opacity var(--transition-fast);
239
+ padding: var(--spacing-2);
240
+ min-width: 44px;
241
+ min-height: 44px;
242
+ display: flex;
243
+ align-items: center;
244
+ justify-content: center;
245
+ border-radius: var(--radius-lg);
246
+ line-height: 1;
247
+ }
248
+
249
+ .feedback-survey-csat-btn:hover {
250
+ transform: scale(1.15);
251
+ }
252
+
253
+ .feedback-survey-csat-btn.selected {
254
+ transform: scale(1.2);
255
+ }
256
+
257
+ .feedback-survey-csat:has(.selected) .feedback-survey-csat-btn:not(.selected) {
258
+ transform: scale(0.85);
259
+ opacity: 0.3;
260
+ }
261
+
262
+ /* ========================================
263
+ CES SEGMENTED (short scale)
264
+ ======================================== */
265
+
266
+ .feedback-survey-ces {
267
+ display: flex;
268
+ justify-content: space-between;
269
+ gap: var(--spacing-2);
270
+ }
271
+
272
+ .feedback-survey-ces-btn {
273
+ flex: 1;
274
+ height: 40px;
275
+ padding: 0 var(--spacing-2);
276
+ border: 1px solid var(--color-border);
277
+ border-radius: var(--radius-md);
278
+ background: var(--color-surface);
279
+ cursor: pointer;
280
+ font-size: var(--font-size-xs);
281
+ font-weight: var(--font-weight-medium);
282
+ color: var(--color-text-primary);
283
+ transition: all var(--transition-fast);
284
+ font-family: inherit;
285
+ text-align: center;
286
+ }
287
+
288
+ .feedback-survey-ces-btn:hover {
289
+ background: var(--color-primary-light);
290
+ border-color: var(--color-primary-border);
291
+ color: var(--color-primary);
292
+ }
293
+
294
+ .feedback-survey-ces-btn.selected {
295
+ background: var(--color-primary-light);
296
+ border-color: var(--color-primary);
297
+ color: var(--color-primary-active);
298
+ }
299
+
300
+ /* ========================================
301
+ CES LIST
302
+ ======================================== */
303
+
304
+ .feedback-survey-ces-list {
305
+ display: flex;
306
+ flex-direction: column;
307
+ gap: var(--spacing-2);
308
+ }
309
+
310
+ .feedback-survey-ces-list-btn {
311
+ width: 100%;
312
+ height: 40px;
313
+ padding: 0 var(--spacing-4);
314
+ border: 1px solid var(--color-border);
315
+ border-radius: var(--radius-md);
316
+ background: var(--color-surface);
317
+ cursor: pointer;
318
+ font-size: var(--font-size-base);
319
+ font-weight: var(--font-weight-medium);
320
+ color: var(--color-text-primary);
321
+ transition: all var(--transition-fast);
322
+ font-family: inherit;
323
+ text-align: left;
324
+ display: flex;
325
+ align-items: center;
326
+ justify-content: space-between;
327
+ }
328
+
329
+ .feedback-survey-ces-list-btn:hover {
330
+ background: var(--color-primary-light);
331
+ border-color: var(--color-primary-border);
332
+ color: var(--color-primary);
333
+ }
334
+
335
+ .feedback-survey-ces-list-btn.selected {
336
+ background: var(--color-primary-light);
337
+ border-color: var(--color-primary);
338
+ color: var(--color-primary-active);
339
+ }
340
+
341
+ /* ========================================
342
+ SELECTION INDICATOR (choice & CES list)
343
+ ======================================== */
344
+
345
+ .feedback-survey-ces-list-btn::after,
346
+ .feedback-survey-page-choice-btn::after {
347
+ content: '';
348
+ width: 18px;
349
+ height: 18px;
350
+ border-radius: 50%;
351
+ border: 1.5px solid var(--color-neutral-300);
352
+ flex-shrink: 0;
353
+ background: transparent;
354
+ background-size: 10px 10px;
355
+ background-repeat: no-repeat;
356
+ background-position: center;
357
+ transition: all var(--transition-fast);
358
+ }
359
+
360
+ .feedback-survey-ces-list-btn.selected::after,
361
+ .feedback-survey-page-choice-btn.selected::after {
362
+ border-color: var(--color-primary);
363
+ background-color: var(--color-primary);
364
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpolyline points='2,6.5 5,9.5 10,3' stroke='white' stroke-width='1.5' fill='none' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
365
+ }
366
+
367
+ /* ========================================
368
+ RATING SCALE (generic)
369
+ ======================================== */
370
+
371
+ .feedback-survey-rating-scale {
372
+ display: flex;
373
+ gap: 0;
374
+ border: 1px solid var(--color-neutral-200);
375
+ border-radius: var(--radius-md);
376
+ overflow: hidden;
377
+ background: var(--color-white);
378
+ }
379
+
380
+ .feedback-survey-rating-scale-btn {
381
+ flex: 1;
382
+ height: 40px;
383
+ padding: 0;
384
+ border: 0;
385
+ border-right: 1px solid var(--color-neutral-200);
386
+ border-radius: 0;
387
+ background: var(--color-white);
388
+ cursor: pointer;
389
+ font-size: clamp(14px, 3vw, 18px);
390
+ font-weight: var(--font-weight-medium);
391
+ color: var(--color-text-primary);
392
+ transition: background var(--transition-fast), color var(--transition-fast);
393
+ position: relative;
394
+ }
395
+
396
+ .feedback-survey-rating-scale-btn:last-child {
397
+ border-right: none;
398
+ }
399
+
400
+ .feedback-survey-rating-scale-btn:hover {
401
+ background: var(--color-primary-light);
402
+ color: var(--color-primary);
403
+ }
404
+
405
+ .feedback-survey-rating-scale-btn:focus-visible {
406
+ outline: none;
407
+ z-index: 1;
408
+ box-shadow: inset 0 0 0 2px var(--color-primary);
409
+ }
410
+
411
+ .feedback-survey-rating-scale-btn.selected {
412
+ background: var(--color-primary-light);
413
+ color: var(--color-primary-active);
414
+ box-shadow: inset 0 0 0 2px var(--color-primary);
415
+ }
416
+
417
+ /* ========================================
418
+ SCALE LABELS
419
+ ======================================== */
420
+
421
+ .feedback-survey-labels {
422
+ display: flex;
423
+ justify-content: space-between;
424
+ margin-top: var(--spacing-2);
425
+ font-size: var(--font-size-xs);
426
+ color: var(--color-text-tertiary);
427
+ }
428
+
429
+ .feedback-survey-rating-scale + .feedback-survey-labels {
430
+ margin-top: var(--spacing-3);
431
+ padding: 0 var(--spacing-1);
432
+ font-size: var(--font-size-sm);
433
+ color: var(--color-text-tertiary);
434
+ }
435
+
436
+ /* ========================================
437
+ FREQUENCY
438
+ ======================================== */
439
+
440
+ .feedback-survey-frequency {
441
+ display: flex;
442
+ gap: var(--spacing-2);
443
+ }
444
+
445
+ .feedback-survey-freq-btn {
446
+ flex: 1;
447
+ height: 40px;
448
+ padding: 0 var(--spacing-3);
449
+ border: 1px solid var(--color-border);
450
+ border-radius: var(--radius-md);
451
+ background: var(--color-surface);
452
+ cursor: pointer;
453
+ font-size: var(--font-size-sm);
454
+ font-weight: var(--font-weight-medium);
455
+ color: var(--color-text-primary);
456
+ transition: all var(--transition-fast);
457
+ font-family: inherit;
458
+ }
459
+
460
+ .feedback-survey-freq-btn:hover {
461
+ background: var(--color-primary-light);
462
+ border-color: var(--color-primary-border);
463
+ color: var(--color-primary);
464
+ }
465
+
466
+ .feedback-survey-freq-btn.selected {
467
+ background: var(--color-primary-light);
468
+ border-color: var(--color-primary);
469
+ color: var(--color-primary-active);
470
+ }
471
+
472
+ /* ========================================
473
+ FORM INPUTS
474
+ ======================================== */
475
+
476
+ .feedback-survey-feedback {
477
+ margin-top: var(--spacing-4);
478
+ }
479
+
480
+ .feedback-survey-textarea {
481
+ width: 100%;
482
+ padding: var(--spacing-3);
483
+ border: 1px solid var(--color-border);
484
+ border-radius: var(--radius-md);
485
+ font-size: var(--font-size-base);
486
+ resize: vertical;
487
+ height: 80px;
488
+ background: var(--color-white);
489
+ color: var(--color-text-primary);
490
+ font-family: inherit;
491
+ box-sizing: border-box;
492
+ transition: border-color var(--transition-base);
493
+ outline: none;
494
+ }
495
+
496
+ .feedback-survey-textarea::placeholder {
497
+ color: var(--color-text-tertiary);
498
+ }
499
+
500
+ .feedback-survey-textarea:focus {
501
+ border-color: var(--color-primary);
502
+ box-shadow: 0 0 0 3px var(--color-primary-light);
503
+ }
504
+
505
+ .feedback-survey-select {
506
+ width: 100%;
507
+ height: 40px;
508
+ padding: 0 var(--spacing-3);
509
+ border: 1px solid var(--color-border);
510
+ border-radius: var(--radius-md);
511
+ font-size: var(--font-size-base);
512
+ background: var(--color-white);
513
+ color: var(--color-text-primary);
514
+ font-family: inherit;
515
+ cursor: pointer;
516
+ transition: border-color var(--transition-base);
517
+ outline: none;
518
+ }
519
+
520
+ .feedback-survey-select:focus {
521
+ border-color: var(--color-primary);
522
+ box-shadow: 0 0 0 3px var(--color-primary-light);
523
+ }
524
+
525
+ .feedback-survey-input {
526
+ width: 100%;
527
+ height: 40px;
528
+ padding: 0 var(--spacing-3);
529
+ border: 1px solid var(--color-border);
530
+ border-radius: var(--radius-md);
531
+ font-size: var(--font-size-base);
532
+ background: var(--color-white);
533
+ color: var(--color-text-primary);
534
+ font-family: inherit;
535
+ box-sizing: border-box;
536
+ transition: border-color var(--transition-base);
537
+ outline: none;
538
+ }
539
+
540
+ .feedback-survey-input::placeholder {
541
+ color: var(--color-text-tertiary);
542
+ }
543
+
544
+ .feedback-survey-input:focus {
545
+ border-color: var(--color-primary);
546
+ box-shadow: 0 0 0 3px var(--color-primary-light);
547
+ }
548
+
549
+ /* ========================================
550
+ MULTI-PAGE TEXT INPUT
551
+ ======================================== */
552
+
553
+ .feedback-survey-page-textarea {
554
+ width: 100%;
555
+ min-height: 120px;
556
+ padding: var(--spacing-3);
557
+ border: 1px solid var(--color-border);
558
+ border-radius: var(--radius-md);
559
+ font-size: var(--font-size-base);
560
+ font-family: inherit;
561
+ background: var(--color-white);
562
+ color: var(--color-text-primary);
563
+ box-sizing: border-box;
564
+ resize: vertical;
565
+ outline: none;
566
+ transition: border-color var(--transition-base);
567
+ }
568
+
569
+ .feedback-survey-page-textarea::placeholder {
570
+ color: var(--color-text-tertiary);
571
+ }
572
+
573
+ .feedback-survey-page-textarea:focus {
574
+ border-color: var(--color-primary);
575
+ box-shadow: 0 0 0 3px var(--color-primary-light);
576
+ }
577
+
578
+ /* ========================================
579
+ MULTIPLE CHOICE
580
+ ======================================== */
581
+
582
+ .feedback-survey-multiple-choice {
583
+ display: flex;
584
+ flex-direction: column;
585
+ gap: var(--spacing-2);
586
+ }
587
+
588
+ .feedback-survey-page-choice-btn {
589
+ width: 100%;
590
+ height: 40px;
591
+ padding: 0 var(--spacing-4);
592
+ border: 1px solid var(--color-border);
593
+ border-radius: var(--radius-md);
594
+ background: var(--color-surface);
595
+ color: var(--color-text-primary);
596
+ text-align: left;
597
+ font-size: var(--font-size-base);
598
+ font-weight: var(--font-weight-medium);
599
+ cursor: pointer;
600
+ font-family: inherit;
601
+ display: flex;
602
+ align-items: center;
603
+ justify-content: space-between;
604
+ transition: all var(--transition-fast);
605
+ }
606
+
607
+ .feedback-survey-page-choice-btn:hover {
608
+ background: var(--color-primary-light);
609
+ border-color: var(--color-primary-border);
610
+ color: var(--color-primary);
611
+ }
612
+
613
+ .feedback-survey-page-choice-btn.selected {
614
+ background: var(--color-primary-light);
615
+ border-color: var(--color-primary);
616
+ color: var(--color-primary-active);
617
+ }
618
+
619
+ /* ========================================
620
+ LINK PAGE
621
+ ======================================== */
622
+
623
+ .feedback-survey-link-page {
624
+ display: flex;
625
+ flex-direction: column;
626
+ gap: var(--spacing-3);
627
+ }
628
+
629
+ .feedback-survey-link-text {
630
+ font-size: var(--font-size-base);
631
+ color: var(--color-text-secondary);
632
+ line-height: var(--line-height-relaxed);
633
+ margin: 0;
634
+ }
635
+
636
+ /* ========================================
637
+ ACTIONS
638
+ ======================================== */
639
+
640
+ .feedback-survey-actions {
641
+ display: flex;
642
+ align-items: center;
643
+ gap: var(--spacing-3);
644
+ margin-top: var(--spacing-4);
645
+ }
646
+
647
+ .feedback-survey-back {
648
+ padding: 0 var(--spacing-4);
649
+ min-height: 40px;
650
+ border: 1px solid var(--color-border);
651
+ border-radius: var(--radius-md);
652
+ background: var(--color-surface);
653
+ color: var(--color-text-secondary);
654
+ font-size: var(--font-size-base);
655
+ font-weight: var(--font-weight-medium);
656
+ cursor: pointer;
657
+ font-family: inherit;
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: center;
661
+ gap: var(--spacing-2);
662
+ transition: all var(--transition-fast);
663
+ flex: 1;
664
+ white-space: nowrap;
665
+ }
666
+
667
+ .feedback-survey-back:hover {
668
+ background: var(--color-neutral-100);
669
+ border-color: var(--color-neutral-300);
670
+ color: var(--color-text-primary);
671
+ }
672
+
673
+ /* ========================================
674
+ SUBMIT & LINK BUTTON
675
+ ======================================== */
676
+
677
+ .feedback-survey-submit {
678
+ flex: 1;
679
+ display: flex;
680
+ align-items: center;
681
+ justify-content: center;
682
+ gap: var(--spacing-2);
683
+ min-height: 40px;
684
+ padding: 0 var(--spacing-4);
685
+ background: var(--color-primary);
686
+ color: #ffffff;
687
+ border: 1px solid var(--color-primary);
688
+ border-radius: var(--radius-md);
689
+ font-size: var(--font-size-base);
690
+ font-weight: var(--font-weight-medium);
691
+ cursor: pointer;
692
+ font-family: inherit;
693
+ text-align: center;
694
+ transition: all var(--transition-base);
695
+ }
696
+
697
+ .feedback-survey-submit:hover:not(:disabled) {
698
+ background: var(--color-primary-hover);
699
+ border-color: var(--color-primary-hover);
700
+ }
701
+
702
+ .feedback-survey-submit:disabled {
703
+ opacity: 0.6;
704
+ cursor: not-allowed;
705
+ }
706
+
707
+ .feedback-survey-link-btn {
708
+ display: flex;
709
+ align-items: center;
710
+ justify-content: center;
711
+ gap: var(--spacing-2);
712
+ width: 100%;
713
+ min-height: 40px;
714
+ padding: 0 var(--spacing-4);
715
+ background: var(--color-primary);
716
+ color: #ffffff;
717
+ border: 1px solid var(--color-primary);
718
+ border-radius: var(--radius-md);
719
+ font-size: var(--font-size-base);
720
+ font-weight: var(--font-weight-medium);
721
+ cursor: pointer;
722
+ font-family: inherit;
723
+ text-align: center;
724
+ text-decoration: none;
725
+ transition: all var(--transition-base);
726
+ }
727
+
728
+ .feedback-survey-link-btn:hover {
729
+ background: var(--color-primary-hover);
730
+ border-color: var(--color-primary-hover);
731
+ color: var(--color-white);
732
+ text-decoration: none;
733
+ }
734
+
735
+ .feedback-survey-link-btn iconify-icon,
736
+ .feedback-survey-submit iconify-icon {
737
+ flex-shrink: 0;
738
+ color: #ffffff;
739
+ }
740
+
741
+ .feedback-survey-back iconify-icon {
742
+ flex-shrink: 0;
743
+ color: currentColor;
744
+ }
745
+
746
+ /* ========================================
747
+ ERROR
748
+ ======================================== */
749
+
750
+ .feedback-survey-error {
751
+ margin-bottom: var(--spacing-3);
752
+ background: #D13212;
753
+ border-radius: var(--radius-md);
754
+ color: #ffffff;
755
+ font-size: var(--font-size-sm);
756
+ font-weight: var(--font-weight-medium);
757
+ padding: var(--spacing-3) var(--spacing-4);
758
+ display: flex;
759
+ align-items: center;
760
+ gap: var(--spacing-2);
761
+ }
762
+
763
+ .feedback-survey-error iconify-icon {
764
+ flex-shrink: 0;
765
+ }
766
+
767
+ /* ========================================
768
+ DARK MODE — SELECTED STATE OVERRIDES
769
+ ======================================== */
770
+
771
+ .feedback-survey-theme-dark .feedback-survey-ces-list-btn.selected,
772
+ .feedback-survey-theme-dark .feedback-survey-page-choice-btn.selected,
773
+ .feedback-survey-theme-dark .feedback-survey-freq-btn.selected,
774
+ .feedback-survey-theme-dark .feedback-survey-ces-btn.selected,
775
+ .feedback-survey-theme-dark .feedback-survey-nps-btn.selected,
776
+ .feedback-survey-theme-dark .feedback-survey-rating-scale-btn.selected {
777
+ color: var(--color-text-primary);
778
+ }
779
+
780
+ /* ========================================
781
+ PRESS EFFECT
782
+ ======================================== */
783
+
784
+ .feedback-survey-close:active,
785
+ .feedback-survey-submit:active,
786
+ .feedback-survey-back:active,
787
+ .feedback-survey-link-btn:active,
788
+ .feedback-survey-ces-btn:active,
789
+ .feedback-survey-ces-list-btn:active,
790
+ .feedback-survey-page-choice-btn:active,
791
+ .feedback-survey-freq-btn:active,
792
+ .feedback-survey-rating-scale-btn:active,
793
+ .feedback-survey-nps-btn:active {
794
+ transform: translateY(1px);
795
+ transition-duration: 100ms;
796
+ }
797
+
798
+ .feedback-survey-nps-btn.selected:active {
799
+ transform: scale(1.06) translateY(1px);
800
+ }
801
+
802
+ .feedback-survey-csat-btn:active {
803
+ transform: scale(1.05) translateY(1px);
804
+ transition-duration: 100ms;
805
+ }
806
+
807
+ .feedback-survey-csat-btn.selected:active {
808
+ transform: scale(1.2) translateY(1px);
809
+ }
810
+
811
+ /* ========================================
812
+ NOTIFICATION TOASTS
813
+ ======================================== */
814
+
815
+ .product7-notification {
816
+ position: fixed;
817
+ top: var(--spacing-6);
818
+ right: var(--spacing-6);
819
+ padding: var(--spacing-3) var(--spacing-5);
820
+ border-radius: var(--radius-xl);
821
+ font-size: var(--font-size-sm);
822
+ font-weight: var(--font-weight-medium);
823
+ z-index: var(--z-notification);
824
+ box-shadow: var(--shadow-lg);
825
+ font-family: inherit;
826
+ color: #fff;
827
+ }
828
+
829
+ .product7-notification > div {
830
+ display: flex;
831
+ align-items: center;
832
+ gap: var(--spacing-2);
833
+ }
834
+
835
+ .product7-notification svg {
836
+ width: 18px;
837
+ height: 18px;
838
+ flex-shrink: 0;
839
+ }
840
+
841
+ .product7-notification-success {
842
+ background: #037F0C;
843
+ }
844
+
845
+ .product7-notification-error {
846
+ background: #D13212;
847
+ }
848
+
849
+ .product7-notification-warning {
850
+ background: #FF9900;
851
+ color: #000;
852
+ }
853
+
854
+ .product7-notification-info {
855
+ background: #0972D3;
856
+ }
857
+
858
+ /* ========================================
859
+ RESPONSIVE
860
+ ======================================== */
861
+
862
+ @media (max-width: 768px) {
863
+ .feedback-survey {
864
+ min-width: 288px;
865
+ padding: var(--spacing-5);
866
+ }
867
+
868
+ .feedback-survey-nps-btn {
869
+ font-size: var(--font-size-xs);
870
+ }
871
+
872
+ .feedback-survey-csat-btn {
873
+ font-size: 28px;
874
+ min-width: 40px;
875
+ min-height: 40px;
876
+ }
877
+
878
+ .feedback-survey-title {
879
+ font-size: var(--font-size-lg);
880
+ }
881
+
882
+ .feedback-survey-description-primary .feedback-survey-description {
883
+ font-size: var(--font-size-md);
884
+ }
885
+
886
+ .feedback-survey-rating-scale-btn {
887
+ font-size: clamp(13px, 5vw, 16px);
888
+ }
889
+
890
+ .feedback-survey-rating-scale + .feedback-survey-labels {
891
+ font-size: var(--font-size-xs);
892
+ }
893
+ }
894
+ `;