@redacto.io/consent-sdk-react 3.4.0 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +176 -0
  3. package/dist/index.d.mts +51 -4
  4. package/dist/index.d.ts +51 -4
  5. package/dist/index.js +1912 -345
  6. package/dist/index.mjs +1911 -345
  7. package/dist/privacy-center.d.mts +566 -0
  8. package/dist/privacy-center.d.ts +566 -0
  9. package/dist/privacy-center.js +17174 -0
  10. package/dist/privacy-center.mjs +17136 -0
  11. package/package.json +47 -3
  12. package/src/RedactoNoticeConsent/RedactoNoticeConsent.test.tsx +201 -118
  13. package/src/RedactoNoticeConsent/RedactoNoticeConsent.tsx +1194 -93
  14. package/src/RedactoNoticeConsent/api/index.ts +337 -246
  15. package/src/RedactoNoticeConsent/api/types.ts +140 -41
  16. package/src/RedactoNoticeConsent/components/DigiLockerCallback.tsx +602 -0
  17. package/src/RedactoNoticeConsent/components/index.ts +7 -0
  18. package/src/RedactoNoticeConsent/injectStyles.ts +11 -0
  19. package/src/RedactoNoticeConsent/language-codes.ts +61 -0
  20. package/src/RedactoNoticeConsent/services/storage.ts +122 -0
  21. package/src/RedactoNoticeConsent/types.ts +2 -0
  22. package/src/RedactoNoticeConsentInline/api/index.ts +26 -64
  23. package/src/RedactoNoticeConsentInline/api/types.ts +0 -25
  24. package/src/RedactoPrivacyCenter/PrivacyCenterActivityPage.tsx +19 -0
  25. package/src/RedactoPrivacyCenter/PrivacyCenterConsentManagerPage.tsx +17 -0
  26. package/src/RedactoPrivacyCenter/PrivacyCenterFormPage.tsx +79 -0
  27. package/src/RedactoPrivacyCenter/PrivacyCenterHomePage.tsx +27 -0
  28. package/src/RedactoPrivacyCenter/PrivacyCenterLayout.tsx +142 -0
  29. package/src/RedactoPrivacyCenter/RedactoPrivacyCenter.tsx +51 -0
  30. package/src/RedactoPrivacyCenter/api/actions.ts +444 -0
  31. package/src/RedactoPrivacyCenter/api/client.ts +413 -0
  32. package/src/RedactoPrivacyCenter/api/config.ts +33 -0
  33. package/src/RedactoPrivacyCenter/api/fetcher.ts +181 -0
  34. package/src/RedactoPrivacyCenter/api/upload.ts +93 -0
  35. package/src/RedactoPrivacyCenter/assets/character.svg +31 -0
  36. package/src/RedactoPrivacyCenter/assets/fileAttach.svg +9 -0
  37. package/src/RedactoPrivacyCenter/assets/greenTick.svg +4 -0
  38. package/src/RedactoPrivacyCenter/assets/mail.svg +3 -0
  39. package/src/RedactoPrivacyCenter/assets/poweredByRedacto.svg +9 -0
  40. package/src/RedactoPrivacyCenter/assets/sentImg.svg +9 -0
  41. package/src/RedactoPrivacyCenter/assets/uploadFileIcon.svg +9 -0
  42. package/src/RedactoPrivacyCenter/components/ActivitiesList.tsx +272 -0
  43. package/src/RedactoPrivacyCenter/components/CaseDetailsModal.tsx +468 -0
  44. package/src/RedactoPrivacyCenter/components/CaseHistory.tsx +433 -0
  45. package/src/RedactoPrivacyCenter/components/ConsentManager.tsx +726 -0
  46. package/src/RedactoPrivacyCenter/components/ConsentManagerColumns.tsx +239 -0
  47. package/src/RedactoPrivacyCenter/components/ConsentManagerConstants.ts +7 -0
  48. package/src/RedactoPrivacyCenter/components/ConsentManagerTableSkeleton.tsx +155 -0
  49. package/src/RedactoPrivacyCenter/components/DataRequest/CorrectionDataSection.tsx +189 -0
  50. package/src/RedactoPrivacyCenter/components/DataRequest/GrievanceDataSection.tsx +118 -0
  51. package/src/RedactoPrivacyCenter/components/DataRequest/NominationDataSection.tsx +66 -0
  52. package/src/RedactoPrivacyCenter/components/DataRequest/PurposeSelectionSection.tsx +305 -0
  53. package/src/RedactoPrivacyCenter/components/Form.tsx +1455 -0
  54. package/src/RedactoPrivacyCenter/components/GrievanceTable.tsx +176 -0
  55. package/src/RedactoPrivacyCenter/components/GrievanceTablePagination.tsx +330 -0
  56. package/src/RedactoPrivacyCenter/components/ModifyConsentModal.tsx +329 -0
  57. package/src/RedactoPrivacyCenter/components/Pagination.tsx +140 -0
  58. package/src/RedactoPrivacyCenter/components/PrivacyCenterLayout.tsx +302 -0
  59. package/src/RedactoPrivacyCenter/components/RequestSubmit.tsx +218 -0
  60. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/SideBarPC.tsx +475 -0
  61. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/SideMenuPC.tsx +412 -0
  62. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/constants.tsx +42 -0
  63. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/menuItemsPC.tsx +1 -0
  64. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/types.ts +40 -0
  65. package/src/RedactoPrivacyCenter/components/SideMenuBarPC/utils.ts +38 -0
  66. package/src/RedactoPrivacyCenter/components/ThemeTransitionOverlay.tsx +85 -0
  67. package/src/RedactoPrivacyCenter/components/activitiesColumns.tsx +141 -0
  68. package/src/RedactoPrivacyCenter/components/caseHistoryColumns.tsx +179 -0
  69. package/src/RedactoPrivacyCenter/components/constant.ts +20 -0
  70. package/src/RedactoPrivacyCenter/components/types.ts +68 -0
  71. package/src/RedactoPrivacyCenter/components/utils.tsx +10 -0
  72. package/src/RedactoPrivacyCenter/config/routes.ts +9 -0
  73. package/src/RedactoPrivacyCenter/config/table.ts +25 -0
  74. package/src/RedactoPrivacyCenter/context/AuthContext.tsx +123 -0
  75. package/src/RedactoPrivacyCenter/context/BaseUrlContext.tsx +44 -0
  76. package/src/RedactoPrivacyCenter/context/LocaleContext.tsx +11 -0
  77. package/src/RedactoPrivacyCenter/context/NavigationContext.tsx +64 -0
  78. package/src/RedactoPrivacyCenter/context/OrganizationContext.tsx +30 -0
  79. package/src/RedactoPrivacyCenter/context/PageChromeContext.tsx +60 -0
  80. package/src/RedactoPrivacyCenter/context/theme.tsx +127 -0
  81. package/src/RedactoPrivacyCenter/lib/api.ts +468 -0
  82. package/src/RedactoPrivacyCenter/lib/consent-manager/utils.tsx +63 -0
  83. package/src/RedactoPrivacyCenter/lib/constants.ts +116 -0
  84. package/src/RedactoPrivacyCenter/lib/i18n.ts +81 -0
  85. package/src/RedactoPrivacyCenter/lib/locales.ts +105 -0
  86. package/src/RedactoPrivacyCenter/lib/queries.ts +30 -0
  87. package/src/RedactoPrivacyCenter/lib/types.ts +346 -0
  88. package/src/RedactoPrivacyCenter/lib/useCurrentLanguage.ts +37 -0
  89. package/src/RedactoPrivacyCenter/lib/utils.ts +625 -0
  90. package/src/RedactoPrivacyCenter/locales/as/translation.json +188 -0
  91. package/src/RedactoPrivacyCenter/locales/bho/translation.json +188 -0
  92. package/src/RedactoPrivacyCenter/locales/bn/translation.json +188 -0
  93. package/src/RedactoPrivacyCenter/locales/brx/translation.json +188 -0
  94. package/src/RedactoPrivacyCenter/locales/doi/translation.json +188 -0
  95. package/src/RedactoPrivacyCenter/locales/en/translation.json +188 -0
  96. package/src/RedactoPrivacyCenter/locales/gom/translation.json +188 -0
  97. package/src/RedactoPrivacyCenter/locales/gu/translation.json +188 -0
  98. package/src/RedactoPrivacyCenter/locales/hi/translation.json +188 -0
  99. package/src/RedactoPrivacyCenter/locales/kn/translation.json +188 -0
  100. package/src/RedactoPrivacyCenter/locales/ks/translation.json +188 -0
  101. package/src/RedactoPrivacyCenter/locales/mai/translation.json +188 -0
  102. package/src/RedactoPrivacyCenter/locales/ml/translation.json +188 -0
  103. package/src/RedactoPrivacyCenter/locales/mni-Mtei/translation.json +188 -0
  104. package/src/RedactoPrivacyCenter/locales/mr/translation.json +188 -0
  105. package/src/RedactoPrivacyCenter/locales/ne/translation.json +188 -0
  106. package/src/RedactoPrivacyCenter/locales/or/translation.json +188 -0
  107. package/src/RedactoPrivacyCenter/locales/pa/translation.json +188 -0
  108. package/src/RedactoPrivacyCenter/locales/sa/translation.json +188 -0
  109. package/src/RedactoPrivacyCenter/locales/sat/translation.json +188 -0
  110. package/src/RedactoPrivacyCenter/locales/sd/translation.json +188 -0
  111. package/src/RedactoPrivacyCenter/locales/ta/translation.json +188 -0
  112. package/src/RedactoPrivacyCenter/locales/te/translation.json +188 -0
  113. package/src/RedactoPrivacyCenter/locales/ur/translation.json +188 -0
  114. package/src/RedactoPrivacyCenter/styles/base.css +117 -0
  115. package/src/RedactoPrivacyCenter/styles/injectStyles.ts +1000 -0
  116. package/src/RedactoPrivacyCenter/styles/pcStyles.ts +819 -0
  117. package/src/RedactoPrivacyCenter/styles/responsive.ts +138 -0
  118. package/src/RedactoPrivacyCenter/styles/variables.css +133 -0
  119. package/src/RedactoPrivacyCenter/table/AdvancedTable.tsx +365 -0
  120. package/src/RedactoPrivacyCenter/table/AdvancedTablePagination.tsx +479 -0
  121. package/src/RedactoPrivacyCenter/table/index.ts +2 -0
  122. package/src/RedactoPrivacyCenter/types/images.d.ts +29 -0
  123. package/src/RedactoPrivacyCenter/ui/Footer.tsx +73 -0
  124. package/src/RedactoPrivacyCenter/ui/FormBlockWrapper.tsx +54 -0
  125. package/src/RedactoPrivacyCenter/ui/PCAccordion.tsx +87 -0
  126. package/src/RedactoPrivacyCenter/ui/PCActionIcon.tsx +47 -0
  127. package/src/RedactoPrivacyCenter/ui/PCAvatar.tsx +69 -0
  128. package/src/RedactoPrivacyCenter/ui/PCBadge.tsx +48 -0
  129. package/src/RedactoPrivacyCenter/ui/PCButton.tsx +77 -0
  130. package/src/RedactoPrivacyCenter/ui/PCCheckbox.tsx +55 -0
  131. package/src/RedactoPrivacyCenter/ui/PCCollapse.tsx +97 -0
  132. package/src/RedactoPrivacyCenter/ui/PCEmpty.tsx +35 -0
  133. package/src/RedactoPrivacyCenter/ui/PCInput.tsx +128 -0
  134. package/src/RedactoPrivacyCenter/ui/PCLoader.tsx +30 -0
  135. package/src/RedactoPrivacyCenter/ui/PCModal.tsx +104 -0
  136. package/src/RedactoPrivacyCenter/ui/PCPopover.tsx +175 -0
  137. package/src/RedactoPrivacyCenter/ui/PCSelect.tsx +381 -0
  138. package/src/RedactoPrivacyCenter/ui/PCTable.tsx +137 -0
  139. package/src/RedactoPrivacyCenter/ui/PCText.tsx +39 -0
  140. package/src/RedactoPrivacyCenter/ui/PCTextarea.tsx +43 -0
  141. package/src/RedactoPrivacyCenter/ui/PCTitle.tsx +37 -0
  142. package/src/RedactoPrivacyCenter/ui/PCTooltip.tsx +119 -0
  143. package/src/RedactoPrivacyCenter/ui/SimpleBar.tsx +25 -0
  144. package/src/RedactoPrivacyCenter/ui/StatusBadge.tsx +55 -0
  145. package/src/RedactoPrivacyCenter/ui/ThemeToggle.tsx +70 -0
  146. package/src/RedactoPrivacyCenter/ui/index.ts +18 -0
  147. package/src/RedactoPrivacyCenter/utils/cn.ts +28 -0
  148. package/src/RedactoPrivacyCenter/utils/date.ts +48 -0
  149. package/src/RedactoPrivacyCenter/utils/status.ts +111 -0
  150. package/src/RedactoPrivacyCenter/utils/toast.ts +130 -0
  151. package/src/index.ts +10 -0
  152. package/src/privacy-center.ts +107 -0
  153. package/tsconfig.json +2 -0
  154. package/tsup.config.ts +16 -1
  155. package/src/utils/isLegacyApi.ts +0 -12
@@ -0,0 +1,1000 @@
1
+ /**
2
+ * CSS Injection Utility for Privacy Center SDK
3
+ *
4
+ * Injects CSS that cannot be done with inline styles:
5
+ * - Keyframe animations
6
+ * - Pseudo-elements (::after, ::before)
7
+ * - Checkbox checked states
8
+ * - Focus states for form elements
9
+ */
10
+
11
+ let stylesInjected = false;
12
+
13
+ export const injectPCStyles = () => {
14
+ if (stylesInjected || typeof document === 'undefined') {
15
+ return;
16
+ }
17
+
18
+ const STYLE_ID = 'redacto-privacy-center-styles';
19
+
20
+ // Check if styles are already injected
21
+ if (document.getElementById(STYLE_ID)) {
22
+ stylesInjected = true;
23
+ return;
24
+ }
25
+
26
+ const style = document.createElement('style');
27
+ style.id = STYLE_ID;
28
+ // Inject CSS variables first
29
+ const variablesStyle = document.createElement('style');
30
+ variablesStyle.id = 'redacto-privacy-center-variables';
31
+ if (!document.getElementById('redacto-privacy-center-variables')) {
32
+ // CSS variables will be injected via a separate import or inline
33
+ // For now, we'll rely on the host app or inject them here
34
+ variablesStyle.textContent = `
35
+ :root, [data-theme="light"] {
36
+ --pc-primary: #3b82f6;
37
+ --pc-primary-hover: #2563eb;
38
+ --pc-primary-active: #1d4ed8;
39
+ --pc-secondary: #6b7280;
40
+ --pc-secondary-hover: #4b5563;
41
+ --pc-success: #10b981;
42
+ --pc-error: #ef4444;
43
+ --pc-warning: #f59e0b;
44
+ --pc-warning-bg: #fef9c3;
45
+ --pc-warning-border: #fcd34d;
46
+ --pc-warning-text: #92400e;
47
+ --pc-info: #3b82f6;
48
+ --pc-bg-shell: #ffffff;
49
+ --pc-bg-primary: #ffffff;
50
+ --pc-bg-secondary: #f9fafb;
51
+ --pc-bg-tertiary: #f3f4f6;
52
+ --pc-bg-hover: #f9fafb;
53
+ --pc-bg-active: #f3f4f6;
54
+ --pc-bg-overlay: rgba(0, 0, 0, 0.5);
55
+ --pc-text-primary: #111827;
56
+ --pc-text-secondary: #6b7280;
57
+ --pc-text-tertiary: #9ca3af;
58
+ --pc-text-inverse: #ffffff;
59
+ --pc-text-disabled: #d1d5db;
60
+ --pc-border-color: #e5e7eb;
61
+ --pc-border-color-hover: #d1d5db;
62
+ --pc-border-color-focus: #3b82f6;
63
+ --pc-border-radius-sm: 0.375rem;
64
+ --pc-border-radius-md: 0.4375rem;
65
+ --pc-border-radius-lg: 0.625rem;
66
+ --pc-border-radius-xl: 0.875rem;
67
+ --pc-border-radius-2xl: 1.25rem;
68
+ --pc-border-radius-3xl: 2rem;
69
+ --pc-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
70
+ --pc-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
71
+ --pc-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
72
+ --pc-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
73
+ --pc-sidebar-shadow: 12px 0 28px rgba(15, 23, 42, 0.08), 1px 0 0 rgba(15, 23, 42, 0.04);
74
+ --pc-spacing-xs: 0.25rem;
75
+ --pc-spacing-sm: 0.5rem;
76
+ --pc-spacing-md: 0.875rem;
77
+ --pc-spacing-lg: 1.25rem;
78
+ --pc-spacing-xl: 1.75rem;
79
+ --pc-spacing-2xl: 2.5rem;
80
+ --pc-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
81
+ --pc-font-size-xs: 0.75rem;
82
+ --pc-font-size-sm: 0.8125rem;
83
+ --pc-font-size-base: 0.9375rem;
84
+ --pc-font-size-lg: 1.0625rem;
85
+ --pc-font-size-xl: 1.1875rem;
86
+ --pc-font-size-2xl: 1.375rem;
87
+ --pc-font-size-3xl: 1.75rem;
88
+ --pc-font-weight-normal: 400;
89
+ --pc-font-weight-medium: 500;
90
+ --pc-font-weight-semibold: 600;
91
+ --pc-font-weight-bold: 700;
92
+ --pc-transition-fast: 150ms ease-in-out;
93
+ --pc-transition-base: 200ms ease-in-out;
94
+ --pc-transition-slow: 300ms ease-in-out;
95
+ --pc-z-dropdown: 1000;
96
+ --pc-z-sticky: 1020;
97
+ --pc-z-fixed: 1030;
98
+ --pc-z-modal-backdrop: 1200;
99
+ --pc-z-modal: 1210;
100
+ --pc-z-popover: 1060;
101
+ --pc-z-tooltip: 1070;
102
+ --pc-icon-filter: 0;
103
+ --pc-sidebar-mobile-width: 280px;
104
+ --pc-sidebar-collapsed-width: 80px;
105
+ --pc-sidebar-expanded-width: 300px;
106
+ --pc-sidebar-expanded-width-2xl: 320px;
107
+ }
108
+ [data-theme="dark"] {
109
+ --pc-primary: #60a5fa;
110
+ --pc-primary-hover: #3b82f6;
111
+ --pc-primary-active: #2563eb;
112
+ --pc-secondary: #9ca3af;
113
+ --pc-secondary-hover: #6b7280;
114
+ --pc-success: #34d399;
115
+ --pc-error: #f87171;
116
+ --pc-warning: #fbbf24;
117
+ --pc-warning-bg: #78350f;
118
+ --pc-warning-border: #fbbf24;
119
+ --pc-warning-text: #fef3c7;
120
+ --pc-info: #60a5fa;
121
+ --pc-bg-shell: #111827;
122
+ --pc-bg-primary: #1b2435;
123
+ --pc-bg-secondary: #243044;
124
+ --pc-bg-tertiary: #31405a;
125
+ --pc-bg-hover: #243044;
126
+ --pc-bg-active: #31405a;
127
+ --pc-bg-overlay: rgba(0, 0, 0, 0.7);
128
+ --pc-text-primary: #f9fafb;
129
+ --pc-text-secondary: #d1d5db;
130
+ --pc-text-tertiary: #9ca3af;
131
+ --pc-text-inverse: #111827;
132
+ --pc-text-disabled: #6b7280;
133
+ --pc-border-color: rgba(148, 163, 184, 0.18);
134
+ --pc-border-color-hover: rgba(148, 163, 184, 0.28);
135
+ --pc-border-color-focus: #60a5fa;
136
+ --pc-sidebar-shadow: 14px 0 36px rgba(2, 6, 23, 0.42), 1px 0 0 rgba(148, 163, 184, 0.08);
137
+ --pc-icon-filter: 1;
138
+ }
139
+ `;
140
+ document.head.appendChild(variablesStyle);
141
+ }
142
+
143
+ style.textContent = `
144
+ /* Privacy Center SDK Styles */
145
+
146
+ /* Theme Transition Animations */
147
+ /* Smooth transitions for all color-related properties (scoped to SDK root).
148
+ IMPORTANT: Avoid !important so component-specific transitions (e.g. transform)
149
+ can win and animations remain smooth. */
150
+ .pc-root,
151
+ .pc-root *,
152
+ .pc-root *::before,
153
+ .pc-root *::after {
154
+ transition: background-color 0.4s cubic-bezier(0.4, 0, 0.2, 1),
155
+ color 0.4s cubic-bezier(0.4, 0, 0.2, 1),
156
+ border-color 0.4s cubic-bezier(0.4, 0, 0.2, 1),
157
+ fill 0.4s cubic-bezier(0.4, 0, 0.2, 1),
158
+ stroke 0.4s cubic-bezier(0.4, 0, 0.2, 1);
159
+ }
160
+
161
+ /* Exclude certain elements from transitions */
162
+ svg *,
163
+ img,
164
+ video,
165
+ canvas {
166
+ transition: none !important;
167
+ }
168
+
169
+ /* Sun and Moon Rising Animation */
170
+ @keyframes pc-sun-moon-rise {
171
+ 0% {
172
+ bottom: -150px;
173
+ opacity: 0;
174
+ transform: translateX(-50%) scale(0.5) rotate(-10deg);
175
+ }
176
+ 15% {
177
+ opacity: 1;
178
+ transform: translateX(-50%) scale(1) rotate(0deg);
179
+ }
180
+ 70% {
181
+ opacity: 1;
182
+ transform: translateX(-50%) scale(1.1) rotate(5deg);
183
+ }
184
+ 100% {
185
+ bottom: calc(100vh + 50px);
186
+ opacity: 0;
187
+ transform: translateX(-50%) scale(0.7) rotate(10deg);
188
+ }
189
+ }
190
+
191
+ /* Sun specific glow animation */
192
+ @keyframes pc-sun-glow {
193
+ 0%, 100% {
194
+ filter: drop-shadow(0 0 30px rgba(251, 191, 36, 0.7))
195
+ drop-shadow(0 0 60px rgba(251, 191, 36, 0.4));
196
+ }
197
+ 50% {
198
+ filter: drop-shadow(0 0 50px rgba(251, 191, 36, 0.9))
199
+ drop-shadow(0 0 100px rgba(251, 191, 36, 0.6));
200
+ }
201
+ }
202
+
203
+ /* Moon specific glow animation */
204
+ @keyframes pc-moon-glow {
205
+ 0%, 100% {
206
+ filter: drop-shadow(0 0 30px rgba(224, 231, 255, 0.7))
207
+ drop-shadow(0 0 60px rgba(224, 231, 255, 0.4));
208
+ }
209
+ 50% {
210
+ filter: drop-shadow(0 0 50px rgba(224, 231, 255, 0.9))
211
+ drop-shadow(0 0 100px rgba(224, 231, 255, 0.6));
212
+ }
213
+ }
214
+
215
+ .pc-theme-transition-overlay {
216
+ position: fixed;
217
+ top: 0;
218
+ left: 0;
219
+ right: 0;
220
+ bottom: 0;
221
+ pointer-events: none;
222
+ z-index: 9999;
223
+ display: flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ opacity: 0;
227
+ will-change: opacity;
228
+ overflow: hidden;
229
+ }
230
+
231
+ .pc-theme-transition-icon {
232
+ will-change: transform, opacity, bottom, filter;
233
+ }
234
+
235
+ .pc-theme-transition-light {
236
+ animation: pc-sun-moon-rise 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards,
237
+ pc-sun-glow 1s ease-in-out;
238
+ }
239
+
240
+ .pc-theme-transition-dark {
241
+ animation: pc-sun-moon-rise 1s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards,
242
+ pc-moon-glow 1s ease-in-out;
243
+ }
244
+
245
+ /* Keyframe Animations */
246
+ @keyframes pc-spin {
247
+ 0% {
248
+ transform: rotate(0deg);
249
+ }
250
+ 100% {
251
+ transform: rotate(360deg);
252
+ }
253
+ }
254
+
255
+ @keyframes pc-fadeIn {
256
+ from {
257
+ opacity: 0;
258
+ }
259
+ to {
260
+ opacity: 1;
261
+ }
262
+ }
263
+
264
+ @keyframes pc-slideDown {
265
+ from {
266
+ opacity: 0;
267
+ transform: translateY(-10px);
268
+ }
269
+ to {
270
+ opacity: 1;
271
+ transform: translateY(0);
272
+ }
273
+ }
274
+
275
+ @keyframes pc-slideUp {
276
+ from {
277
+ opacity: 0;
278
+ transform: translateY(10px);
279
+ }
280
+ to {
281
+ opacity: 1;
282
+ transform: translateY(0);
283
+ }
284
+ }
285
+
286
+ @keyframes pulse {
287
+ 0%, 100% {
288
+ opacity: 1;
289
+ }
290
+ 50% {
291
+ opacity: 0.5;
292
+ }
293
+ }
294
+
295
+ /* Checkbox Styles */
296
+ .pc-checkbox {
297
+ appearance: none !important;
298
+ -webkit-appearance: none !important;
299
+ -moz-appearance: none !important;
300
+ border: 2px solid var(--pc-border-color) !important;
301
+ border-radius: var(--pc-border-radius-sm) !important;
302
+ background-color: var(--pc-bg-primary) !important;
303
+ cursor: pointer !important;
304
+ position: relative !important;
305
+ box-sizing: border-box !important;
306
+ margin: 0 !important;
307
+ transition: all 0.2s ease !important;
308
+ flex-shrink: 0 !important;
309
+ }
310
+
311
+ .pc-checkbox:checked {
312
+ background-color: var(--pc-primary) !important;
313
+ border-color: var(--pc-primary) !important;
314
+ }
315
+
316
+ .pc-checkbox:hover:not(:disabled) {
317
+ border-color: var(--pc-primary) !important;
318
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1) !important;
319
+ }
320
+
321
+ .pc-checkbox:checked::after {
322
+ content: '' !important;
323
+ position: absolute !important;
324
+ left: 50% !important;
325
+ top: 50% !important;
326
+ transform: translate(-50%, -50%) rotate(45deg) !important;
327
+ width: 4px !important;
328
+ height: 8px !important;
329
+ border: solid var(--pc-text-inverse) !important;
330
+ border-width: 0 2px 2px 0 !important;
331
+ box-sizing: border-box !important;
332
+ }
333
+
334
+ .pc-checkbox-sm:checked::after {
335
+ width: 3px !important;
336
+ height: 6px !important;
337
+ border-width: 0 1.5px 1.5px 0 !important;
338
+ }
339
+
340
+ .pc-checkbox:focus {
341
+ outline: 2px solid var(--pc-border-color-focus) !important;
342
+ outline-offset: 2px !important;
343
+ }
344
+
345
+ .pc-checkbox:disabled {
346
+ opacity: 0.5 !important;
347
+ cursor: not-allowed !important;
348
+ }
349
+
350
+ /* Input Focus Styles - Removed focus ring and border change */
351
+ .pc-input:focus,
352
+ .pc-textarea:focus,
353
+ .pc-select:focus {
354
+ outline: none !important;
355
+ box-shadow: none !important;
356
+ }
357
+
358
+ /* Button Hover States */
359
+ .pc-button-primary:hover:not(:disabled) {
360
+ background-color: var(--pc-primary-hover) !important;
361
+ }
362
+
363
+ .pc-button-secondary:hover:not(:disabled) {
364
+ background-color: var(--pc-secondary-hover) !important;
365
+ }
366
+
367
+ .pc-button-outline:hover:not(:disabled) {
368
+ background-color: var(--pc-bg-hover) !important;
369
+ }
370
+
371
+ .pc-button-text:hover:not(:disabled) {
372
+ background-color: var(--pc-bg-hover) !important;
373
+ }
374
+
375
+ .pc-button-danger:hover:not(:disabled) {
376
+ background-color: #dc2626 !important;
377
+ }
378
+
379
+ /* Responsive modal footer actions (stack buttons on small screens) */
380
+ .pc-modal-footer-actions {
381
+ display: flex;
382
+ gap: var(--pc-spacing-sm);
383
+ justify-content: flex-end;
384
+ width: 100%;
385
+ }
386
+
387
+ @media (max-width: 480px) {
388
+ .pc-modal-footer-actions {
389
+ flex-direction: column-reverse;
390
+ align-items: stretch;
391
+ }
392
+ .pc-modal-footer-actions > button {
393
+ width: 100% !important;
394
+ }
395
+ }
396
+
397
+ /* Button Focus States */
398
+ .pc-button:focus-visible {
399
+ outline: 2px solid var(--pc-border-color-focus) !important;
400
+ outline-offset: 2px !important;
401
+ }
402
+
403
+ /* Table Row Hover */
404
+ .pc-table-row:hover {
405
+ background-color: var(--pc-bg-hover) !important;
406
+ }
407
+
408
+ /* Action Icon Hover */
409
+ .pc-action-icon:hover:not(:disabled) {
410
+ background-color: var(--pc-bg-hover) !important;
411
+ }
412
+
413
+ /* Modal Overlay Animation */
414
+ .pc-modal-overlay {
415
+ animation: pc-fadeIn 0.2s cubic-bezier(0.16, 1, 0.3, 1) !important;
416
+ }
417
+
418
+ /* Dropdown Animation - Support both top and bottom positioning */
419
+ .pc-select-dropdown {
420
+ animation: pc-slideDown 0.2s cubic-bezier(0.16, 1, 0.3, 1) !important;
421
+ }
422
+
423
+ /* Responsive dropdown - allow width to be set via inline styles */
424
+ .pc-select-dropdown {
425
+ box-sizing: border-box !important;
426
+ }
427
+
428
+ /* Ensure options don't wrap and dropdown is compact */
429
+ .pc-select-option {
430
+ white-space: nowrap !important;
431
+ }
432
+
433
+ /* Responsive dropdown positioning for small screens */
434
+ @media (max-width: 639px) {
435
+ .pc-select-dropdown {
436
+ left: 0 !important;
437
+ right: auto !important;
438
+ }
439
+ }
440
+
441
+ /* For very small screens, ensure dropdown doesn't overflow viewport */
442
+ @media (max-width: 480px) {
443
+ .pc-select-dropdown {
444
+ max-width: calc(100vw - 2rem) !important;
445
+ }
446
+ }
447
+
448
+ /* Tooltip Animation */
449
+ .pc-tooltip {
450
+ animation: pc-slideUp 0.2s cubic-bezier(0.16, 1, 0.3, 1) !important;
451
+ }
452
+
453
+ /* Accordion Transition */
454
+ .pc-accordion-body {
455
+ transition: max-height 0.3s ease, padding 0.3s ease !important;
456
+ }
457
+
458
+ /* Scrollbar Styles (for better UX) */
459
+ .pc-scrollbar::-webkit-scrollbar {
460
+ width: 8px;
461
+ height: 8px;
462
+ }
463
+
464
+ .pc-scrollbar::-webkit-scrollbar-track {
465
+ background: var(--pc-bg-secondary);
466
+ border-radius: 4px;
467
+ }
468
+
469
+ .pc-scrollbar::-webkit-scrollbar-thumb {
470
+ background: var(--pc-border-color);
471
+ border-radius: 4px;
472
+ }
473
+
474
+ .pc-scrollbar::-webkit-scrollbar-thumb:hover {
475
+ background: var(--pc-border-color-hover);
476
+ }
477
+
478
+ /* Ensure SDK components have proper z-index */
479
+ .pc-select-dropdown {
480
+ z-index: var(--pc-z-dropdown) !important;
481
+ }
482
+
483
+ .pc-tooltip {
484
+ z-index: 1300 !important;
485
+ }
486
+
487
+ .pc-modal-overlay {
488
+ z-index: var(--pc-z-modal-backdrop) !important;
489
+ }
490
+
491
+ .pc-modal {
492
+ z-index: var(--pc-z-modal) !important;
493
+ }
494
+
495
+ /* Responsive Utilities */
496
+ @media (max-width: 639px) {
497
+ .pc-hidden-xs {
498
+ display: none !important;
499
+ }
500
+ .pc-block-xs {
501
+ display: block !important;
502
+ }
503
+ .pc-flex-xs {
504
+ display: flex !important;
505
+ }
506
+ }
507
+
508
+ @media (min-width: 640px) {
509
+ .pc-hidden-sm {
510
+ display: none !important;
511
+ }
512
+ .pc-block-sm {
513
+ display: block !important;
514
+ }
515
+ .pc-flex-sm {
516
+ display: flex !important;
517
+ }
518
+ }
519
+
520
+ @media (min-width: 768px) {
521
+ .pc-hidden-md {
522
+ display: none !important;
523
+ }
524
+ .pc-block-md {
525
+ display: block !important;
526
+ }
527
+ .pc-flex-md {
528
+ display: flex !important;
529
+ }
530
+ }
531
+
532
+ @media (min-width: 1024px) {
533
+ .pc-hidden-lg {
534
+ display: none !important;
535
+ }
536
+ .pc-block-lg {
537
+ display: block !important;
538
+ }
539
+ .pc-flex-lg {
540
+ display: flex !important;
541
+ }
542
+ }
543
+
544
+ /* Status badge: responsive, light bg, little radius */
545
+ .pc-status-badge {
546
+ border-radius: 9999px;
547
+ max-width: 100%;
548
+ white-space: nowrap;
549
+ overflow: hidden;
550
+ text-overflow: ellipsis;
551
+ }
552
+ @media (max-width: 480px) {
553
+ .pc-status-badge {
554
+ padding: 0.2rem 0.4rem !important;
555
+ font-size: 0.6875rem !important;
556
+ }
557
+ }
558
+ @media (min-width: 481px) and (max-width: 639px) {
559
+ .pc-status-badge {
560
+ padding: 0.22rem 0.45rem !important;
561
+ font-size: 0.7rem !important;
562
+ }
563
+ }
564
+
565
+ /* Responsive Typography */
566
+ .pc-text-responsive {
567
+ font-size: 0.875rem;
568
+ }
569
+ @media (min-width: 768px) {
570
+ .pc-text-responsive {
571
+ font-size: 1rem;
572
+ }
573
+ }
574
+ @media (min-width: 1024px) {
575
+ .pc-text-responsive {
576
+ font-size: 1.125rem;
577
+ }
578
+ }
579
+
580
+ /* Responsive Container */
581
+ .pc-container-responsive {
582
+ width: 100%;
583
+ padding-left: 0.75rem;
584
+ padding-right: 0.75rem;
585
+ }
586
+ @media (min-width: 640px) {
587
+ .pc-container-responsive {
588
+ padding-left: 1rem;
589
+ padding-right: 1rem;
590
+ }
591
+ }
592
+ @media (min-width: 1024px) {
593
+ .pc-container-responsive {
594
+ padding-left: 1.5rem;
595
+ padding-right: 1.5rem;
596
+ max-width: 1280px;
597
+ margin-left: auto;
598
+ margin-right: auto;
599
+ }
600
+ }
601
+
602
+ /* Responsive Grid */
603
+ .pc-grid-responsive {
604
+ display: grid;
605
+ grid-template-columns: 1fr;
606
+ gap: 0.75rem;
607
+ }
608
+ @media (min-width: 640px) {
609
+ .pc-grid-responsive {
610
+ display: flex;
611
+ flex-direction: row;
612
+ gap: 1rem;
613
+ }
614
+ }
615
+ @media (min-width: 1024px) {
616
+ .pc-grid-responsive {
617
+ display: flex;
618
+ flex-direction: row;
619
+ gap: 1.5rem;
620
+ }
621
+ }
622
+
623
+ /* Responsive Flex Direction */
624
+ .pc-flex-responsive {
625
+ flex-direction: column;
626
+ }
627
+ @media (min-width: 640px) {
628
+ .pc-flex-responsive {
629
+ flex-direction: row;
630
+ align-items: flex-start;
631
+ }
632
+ }
633
+
634
+ /* Responsive Spacing */
635
+ .pc-spacing-responsive {
636
+ gap: 0.5rem;
637
+ }
638
+ @media (min-width: 768px) {
639
+ .pc-spacing-responsive {
640
+ gap: 1rem;
641
+ }
642
+ }
643
+ @media (min-width: 1024px) {
644
+ .pc-spacing-responsive {
645
+ gap: 1.5rem;
646
+ }
647
+ }
648
+
649
+ /* Responsive Padding */
650
+ .pc-padding-responsive {
651
+ padding: 0.75rem;
652
+ }
653
+ @media (min-width: 640px) {
654
+ .pc-padding-responsive {
655
+ padding: 1rem;
656
+ }
657
+ }
658
+ @media (min-width: 1024px) {
659
+ .pc-padding-responsive {
660
+ padding: 1.5rem;
661
+ }
662
+ }
663
+
664
+ /* Responsive Width */
665
+ .pc-w-full-mobile {
666
+ width: 100%;
667
+ }
668
+ @media (min-width: 640px) {
669
+ .pc-w-full-mobile {
670
+ width: auto;
671
+ }
672
+ }
673
+
674
+ /* Ensure proper box-sizing for all SDK elements */
675
+ .pc-root,
676
+ .pc-root *,
677
+ .pc-root *::before,
678
+ .pc-root *::after {
679
+ box-sizing: border-box;
680
+ }
681
+
682
+ /* Base reset for SDK components */
683
+ .pc-root {
684
+ font-family: var(--pc-font-family);
685
+ font-size: var(--pc-font-size-base);
686
+ line-height: 1.5;
687
+ color: var(--pc-text-primary);
688
+ background-color: var(--pc-bg-shell);
689
+ -webkit-font-smoothing: antialiased;
690
+ -moz-osx-font-smoothing: grayscale;
691
+ }
692
+
693
+ /* Ensure tables are responsive */
694
+ .pc-table-wrapper {
695
+ overflow-x: auto;
696
+ -webkit-overflow-scrolling: touch;
697
+ }
698
+
699
+ /* Responsive table */
700
+ @media (max-width: 767px) {
701
+ .pc-table-responsive {
702
+ font-size: 0.875rem;
703
+ }
704
+ .pc-table-responsive th,
705
+ .pc-table-responsive td {
706
+ padding: 0.5rem 0.25rem;
707
+ }
708
+ }
709
+
710
+ /* Sidebar responsive styles */
711
+ /* Mobile: Hidden by default, shown when mobile menu is open */
712
+ @media (max-width: 767px) {
713
+ .pc-sidebar {
714
+ width: var(--pc-sidebar-mobile-width) !important;
715
+ transform: translateX(-100%) !important;
716
+ transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
717
+ will-change: transform;
718
+ }
719
+ .pc-sidebar[data-mobile-open="true"] {
720
+ transform: translateX(0) !important;
721
+ }
722
+ }
723
+
724
+ /* Mobile overlay fade */
725
+ .pc-mobile-overlay {
726
+ opacity: 0;
727
+ pointer-events: none;
728
+ transition: opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
729
+ will-change: opacity;
730
+ }
731
+ .pc-mobile-overlay[data-open="true"] {
732
+ opacity: 1;
733
+ pointer-events: auto;
734
+ }
735
+
736
+ /* Medium screens (768px+): Sidebar visible, collapsed by default */
737
+ @media (min-width: 768px) {
738
+ .pc-sidebar {
739
+ transform: translateX(0) !important;
740
+ /* Default to collapsed width */
741
+ width: var(--pc-sidebar-collapsed-width) !important;
742
+ transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
743
+ will-change: width;
744
+ }
745
+ /* Expand only when collapse state is toggled off */
746
+ .pc-sidebar:not(.pc-sidebar-collapsed) {
747
+ width: var(--pc-sidebar-expanded-width) !important;
748
+ }
749
+ /* Explicitly set collapsed width */
750
+ .pc-sidebar.pc-sidebar-collapsed {
751
+ width: var(--pc-sidebar-collapsed-width) !important;
752
+ }
753
+ }
754
+
755
+ /* Large screens (1024px+): Same behavior as medium */
756
+ @media (min-width: 1024px) {
757
+ .pc-sidebar:not(.pc-sidebar-collapsed) {
758
+ width: var(--pc-sidebar-expanded-width) !important;
759
+ }
760
+ }
761
+
762
+ /* Extra large screens (1280px+): Same behavior */
763
+ @media (min-width: 1280px) {
764
+ .pc-sidebar:not(.pc-sidebar-collapsed) {
765
+ width: var(--pc-sidebar-expanded-width) !important;
766
+ }
767
+ }
768
+
769
+ @media (min-width: 1536px) {
770
+ .pc-sidebar:not(.pc-sidebar-collapsed) {
771
+ width: var(--pc-sidebar-expanded-width-2xl) !important;
772
+ }
773
+ }
774
+
775
+ /* Desktop sidebar toggle affordance:
776
+ fixed top-layer button aligned to the sidebar border. */
777
+ .pc-sidebar-toggle-desktop {
778
+ left: calc(var(--pc-sidebar-collapsed-width) - 14px);
779
+ transform: translateY(-50%);
780
+ transition: opacity 0.2s ease, left 0.3s cubic-bezier(0.4, 0, 0.2, 1);
781
+ }
782
+ @media (min-width: 768px) {
783
+ .pc-sidebar {
784
+ isolation: isolate;
785
+ }
786
+ .pc-sidebar-toggle-desktop[data-visible="false"] {
787
+ opacity: 0;
788
+ pointer-events: none;
789
+ }
790
+ .pc-sidebar-toggle-desktop[data-visible="true"] {
791
+ opacity: 1;
792
+ pointer-events: auto;
793
+ }
794
+ .pc-sidebar-toggle-desktop[data-collapsed="false"] {
795
+ left: calc(var(--pc-sidebar-expanded-width) - 14px);
796
+ }
797
+ }
798
+ @media (min-width: 1536px) {
799
+ .pc-sidebar-toggle-desktop[data-collapsed="false"] {
800
+ left: calc(var(--pc-sidebar-expanded-width-2xl) - 14px);
801
+ }
802
+ }
803
+
804
+ /* Ensure menu items are always vertical */
805
+ .pc-sidebar-menu-container {
806
+ display: flex !important;
807
+ flex-direction: column !important;
808
+ }
809
+
810
+ /* Ensure menu items stack vertically, not horizontally */
811
+ .pc-sidebar-menu-container > * {
812
+ display: block !important;
813
+ width: 100% !important;
814
+ flex-shrink: 0 !important;
815
+ }
816
+
817
+ /* Collapsed menu items should be centered and vertical */
818
+ .pc-sidebar.pc-sidebar-collapsed .pc-sidebar-menu-container > * {
819
+ width: 100% !important;
820
+ }
821
+
822
+ /* Prevent horizontal layout of menu items */
823
+ .pc-sidebar-menu-container > * > * {
824
+ display: block !important;
825
+ }
826
+
827
+ /* Ensure menu items are always vertical */
828
+ .pc-sidebar .pc-menu-container {
829
+ display: flex !important;
830
+ flex-direction: column !important;
831
+ }
832
+
833
+ /* Responsive Header Layout */
834
+ .pc-header-responsive {
835
+ flex-direction: column !important;
836
+ }
837
+ @media (min-width: 768px) {
838
+ .pc-header-responsive {
839
+ flex-direction: row !important;
840
+ align-items: flex-start !important;
841
+ justify-content: space-between !important;
842
+ }
843
+ }
844
+
845
+ /* Responsive Title Section */
846
+ .pc-title-responsive {
847
+ width: 100% !important;
848
+ }
849
+ @media (min-width: 768px) {
850
+ .pc-title-responsive {
851
+ flex: 1 !important;
852
+ min-width: 200px !important;
853
+ width: auto !important;
854
+ }
855
+ }
856
+
857
+ /* Responsive Export Button */
858
+ .pc-export-button-responsive {
859
+ width: 100% !important;
860
+ }
861
+ @media (min-width: 768px) {
862
+ .pc-export-button-responsive {
863
+ width: auto !important;
864
+ flex-shrink: 0 !important;
865
+ }
866
+ }
867
+ @media (min-width: 768px) {
868
+ .pc-export-button-responsive button {
869
+ width: auto !important;
870
+ }
871
+ }
872
+
873
+ /* Responsive Filters Layout */
874
+ .pc-filters-responsive {
875
+ flex-direction: column !important;
876
+ }
877
+ @media (min-width: 768px) {
878
+ .pc-filters-responsive {
879
+ flex-direction: row !important;
880
+ align-items: flex-start !important;
881
+ justify-content: space-between !important;
882
+ width: 100% !important;
883
+ flex-wrap: wrap !important;
884
+ }
885
+ }
886
+
887
+ /* Responsive Search Input */
888
+ .pc-search-responsive {
889
+ width: 100% !important;
890
+ }
891
+ @media (min-width: 768px) {
892
+ .pc-search-responsive {
893
+ width: auto !important;
894
+ min-width: 160px !important;
895
+ max-width: 340px !important;
896
+ }
897
+ }
898
+
899
+ /* Responsive Filters Row */
900
+ .pc-filters-row-responsive {
901
+ flex-direction: column !important;
902
+ width: 100% !important;
903
+ margin-left: 0 !important;
904
+ }
905
+ @media (min-width: 768px) {
906
+ .pc-filters-row-responsive {
907
+ flex-direction: row !important;
908
+ width: auto !important;
909
+ flex-shrink: 0 !important;
910
+ margin-left: auto !important;
911
+ margin-right: 0 !important;
912
+ gap: 1rem !important;
913
+ align-items: center !important;
914
+ justify-content: flex-end !important;
915
+ flex-wrap: wrap !important;
916
+ }
917
+ }
918
+
919
+ /* Consent Manager filter selects: full width on mobile, responsive on medium, fixed on desktop */
920
+ .pc-filter-select {
921
+ width: 100% !important;
922
+ min-width: 0 !important;
923
+ }
924
+ /* Medium screens (e.g. tablets): allow shrink + wrap to avoid overflow */
925
+ @media (min-width: 768px) and (max-width: 1023px) {
926
+ .pc-search-responsive {
927
+ flex: 1 1 200px !important;
928
+ max-width: none !important;
929
+ }
930
+ .pc-filters-row-responsive {
931
+ width: 100% !important;
932
+ margin-left: 0 !important;
933
+ justify-content: flex-start !important;
934
+ }
935
+ .pc-filter-select {
936
+ flex: 1 1 200px !important;
937
+ width: auto !important;
938
+ min-width: 180px !important;
939
+ max-width: 240px !important;
940
+ }
941
+ }
942
+ /* Desktop: keep equal, sufficient width */
943
+ @media (min-width: 1024px) {
944
+ .pc-filter-select {
945
+ width: 240px !important;
946
+ min-width: 240px !important;
947
+ flex: 0 0 auto !important;
948
+ }
949
+ }
950
+ @media (min-width: 768px) {
951
+ .pc-filters-row-responsive > *:not(:first-child) {
952
+
953
+ }
954
+ .pc-filter-button-wrapper {
955
+ width: auto !important;
956
+ min-width: auto !important;
957
+ }
958
+ /* Tabs container should only take space it needs */
959
+ .pc-filters-row-responsive > *:first-child {
960
+ min-width: auto !important;
961
+ width: auto !important;
962
+ }
963
+ }
964
+
965
+ /* Override the generic first-child sizing for our filter selects */
966
+ @media (min-width: 1024px) {
967
+ .pc-filters-row-responsive > .pc-filter-select:first-child {
968
+ width: 240px !important;
969
+ min-width: 240px !important;
970
+ }
971
+ }
972
+
973
+ /* Case Details Modal Responsive Styles */
974
+ .pc-case-details-content {
975
+ padding: 1rem !important;
976
+ }
977
+ @media (min-width: 640px) {
978
+ .pc-case-details-content {
979
+ padding: 1.5rem !important;
980
+ }
981
+ }
982
+
983
+ .pc-case-details-grid {
984
+ grid-template-columns: 1fr !important;
985
+ }
986
+ @media (min-width: 640px) {
987
+ .pc-case-details-grid {
988
+ grid-template-columns: repeat(2, 1fr) !important;
989
+ }
990
+ }
991
+ @media (min-width: 1024px) {
992
+ .pc-case-details-grid {
993
+ grid-template-columns: repeat(4, 1fr) !important;
994
+ }
995
+ }
996
+ `;
997
+
998
+ document.head.appendChild(style);
999
+ stylesInjected = true;
1000
+ };