@consilioweb/payload-support 4.0.0 → 6.0.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.
- package/README.md +272 -35
- package/dist/components/RichTextEditor/index.js +1 -1
- package/dist/components/TicketConversation/RewriteDropdown.js +1 -1
- package/dist/components/TicketConversation/components/AISummaryPanel.js +3 -0
- package/dist/components/TicketConversation/components/ActionPanels.js +13 -8
- package/dist/components/TicketConversation/components/ClientHistory.js +1 -0
- package/dist/components/TicketConversation/components/CodeBlock.js +1 -0
- package/dist/components/TicketConversation/components/CodeBlockInserter.js +1 -1
- package/dist/components/TicketConversation/components/QuickActions.js +10 -8
- package/dist/components/TicketConversation/components/TicketHeader.js +2 -0
- package/dist/components/TicketConversation/components/TimeTrackingPanel.js +15 -9
- package/dist/components/TicketConversation/index.d.ts +10 -0
- package/dist/components/TicketConversation/index.js +25 -7
- package/dist/index.cjs +421 -73
- package/dist/index.d.cts +127 -38
- package/dist/index.d.ts +127 -38
- package/dist/index.js +415 -72
- package/dist/styles/BillingView.module.scss +11 -11
- package/dist/styles/ChatView.module.scss +7 -7
- package/dist/styles/CommandPalette.module.scss +1 -1
- package/dist/styles/CrmView.module.scss +9 -9
- package/dist/styles/EmailTracking.module.scss +6 -6
- package/dist/styles/ImportConversation.module.scss +5 -5
- package/dist/styles/Logs.module.scss +5 -5
- package/dist/styles/NewTicket.module.scss +2 -2
- package/dist/styles/PendingEmails.module.scss +13 -13
- package/dist/styles/SupportDashboard.module.scss +24 -8
- package/dist/styles/TicketDetail.module.scss +20 -20
- package/dist/styles/TicketInbox.module.scss +6 -6
- package/dist/styles/TicketingSettings.module.scss +10 -10
- package/dist/styles/TimeDashboard.module.scss +6 -6
- package/dist/styles/_tokens.scss +3 -1
- package/dist/utils/db.d.ts +34 -0
- package/dist/utils/readSettings.d.ts +90 -0
- package/dist/views/BillingView/client.js +15 -8
- package/dist/views/BillingView/index.js +4 -4
- package/dist/views/ChatView/client.js +2 -0
- package/dist/views/ChatView/index.js +4 -4
- package/dist/views/CrmView/client.js +2 -0
- package/dist/views/CrmView/index.js +4 -4
- package/dist/views/EmailTrackingView/client.js +23 -11
- package/dist/views/EmailTrackingView/index.js +4 -4
- package/dist/views/ImportConversationView/client.js +1 -0
- package/dist/views/ImportConversationView/index.js +4 -4
- package/dist/views/LogsView/client.js +1 -1
- package/dist/views/LogsView/index.js +4 -2
- package/dist/views/NewTicketView/client.js +20 -13
- package/dist/views/NewTicketView/index.js +4 -2
- package/dist/views/PendingEmailsView/client.js +9 -3
- package/dist/views/PendingEmailsView/index.js +4 -4
- package/dist/views/SupportDashboardView/client.js +17 -19
- package/dist/views/SupportDashboardView/index.js +4 -4
- package/dist/views/TicketDetailView/client.js +23 -11
- package/dist/views/TicketDetailView/index.js +4 -4
- package/dist/views/TicketInboxView/client.js +52 -26
- package/dist/views/TicketInboxView/index.js +4 -2
- package/dist/views/TicketingSettingsView/TicketingSettings.module.scss +7 -7
- package/dist/views/TicketingSettingsView/client.js +44 -26
- package/dist/views/TicketingSettingsView/index.js +4 -4
- package/dist/views/TimeDashboardView/client.js +10 -7
- package/dist/views/TimeDashboardView/index.js +4 -4
- package/dist/views/shared/ErrorBoundary.d.ts +36 -1
- package/dist/views/shared/ErrorBoundary.js +59 -28
- package/dist/views/shared/adminTokens.d.ts +15 -5
- package/dist/views/shared/adminTokens.js +23 -7
- package/dist/views/shared/icons.d.ts +49 -0
- package/dist/views/shared/icons.js +92 -0
- package/dist/views/shared/locales/en.json +15 -1
- package/dist/views/shared/locales/fr.json +15 -1
- package/dist/views/shared/viewAccess.d.ts +29 -0
- package/dist/views/shared/viewAccess.js +24 -0
- package/package.json +31 -21
- package/scripts/uninstall-data.mjs +178 -0
- package/scripts/uninstall.mjs +184 -0
- package/src/collections/Tickets.ts +7 -0
- package/src/collections/TimeEntries.ts +11 -3
- package/src/components/RichTextEditor/index.tsx +1 -1
- package/src/components/TicketConversation/RewriteDropdown.tsx +1 -1
- package/src/components/TicketConversation/components/AISummaryPanel.tsx +3 -0
- package/src/components/TicketConversation/components/ActionPanels.tsx +13 -8
- package/src/components/TicketConversation/components/ClientHistory.tsx +1 -0
- package/src/components/TicketConversation/components/CodeBlock.tsx +1 -0
- package/src/components/TicketConversation/components/CodeBlockInserter.tsx +1 -1
- package/src/components/TicketConversation/components/QuickActions.tsx +10 -8
- package/src/components/TicketConversation/components/TicketHeader.tsx +2 -0
- package/src/components/TicketConversation/components/TimeTrackingPanel.tsx +17 -9
- package/src/components/TicketConversation/index.tsx +41 -7
- package/src/endpoints/auth-2fa.ts +53 -8
- package/src/endpoints/capabilities.ts +2 -4
- package/src/endpoints/chatbot.ts +2 -2
- package/src/endpoints/delete-account.ts +191 -47
- package/src/endpoints/export-data.ts +104 -4
- package/src/endpoints/import-conversation.ts +2 -2
- package/src/endpoints/login.ts +13 -3
- package/src/endpoints/purge-logs.ts +6 -15
- package/src/endpoints/push.ts +14 -1
- package/src/endpoints/statuses.ts +17 -0
- package/src/index.ts +2 -0
- package/src/plugin.ts +51 -1
- package/src/portal/LiveChat.tsx +1 -1
- package/src/portal/auth/profile/page.tsx +3 -2
- package/src/portal/icons.tsx +91 -0
- package/src/portal/login/page.tsx +14 -4
- package/src/styles/BillingView.module.scss +11 -11
- package/src/styles/ChatView.module.scss +7 -7
- package/src/styles/CommandPalette.module.scss +1 -1
- package/src/styles/CrmView.module.scss +9 -9
- package/src/styles/EmailTracking.module.scss +6 -6
- package/src/styles/ImportConversation.module.scss +5 -5
- package/src/styles/Logs.module.scss +5 -5
- package/src/styles/NewTicket.module.scss +2 -2
- package/src/styles/PendingEmails.module.scss +13 -13
- package/src/styles/SupportDashboard.module.scss +24 -8
- package/src/styles/TicketDetail.module.scss +20 -20
- package/src/styles/TicketInbox.module.scss +6 -6
- package/src/styles/TicketingSettings.module.scss +10 -10
- package/src/styles/TimeDashboard.module.scss +6 -6
- package/src/styles/_tokens.scss +3 -1
- package/src/types.ts +20 -0
- package/src/utils/push.ts +22 -0
- package/src/utils/rateLimiter.ts +98 -0
- package/src/utils/retention.ts +111 -0
- package/src/utils/slugs.ts +15 -0
- package/src/utils/twoFactorChallenge.ts +6 -1
- package/src/utils/urlSafety.ts +36 -1
- package/src/views/BillingView/client.tsx +17 -8
- package/src/views/BillingView/index.tsx +4 -4
- package/src/views/ChatView/client.tsx +2 -0
- package/src/views/ChatView/index.tsx +4 -4
- package/src/views/CrmView/client.tsx +2 -0
- package/src/views/CrmView/index.tsx +4 -4
- package/src/views/EmailTrackingView/client.tsx +18 -7
- package/src/views/EmailTrackingView/index.tsx +4 -4
- package/src/views/ImportConversationView/client.tsx +1 -0
- package/src/views/ImportConversationView/index.tsx +4 -4
- package/src/views/LogsView/client.tsx +1 -1
- package/src/views/LogsView/index.tsx +4 -2
- package/src/views/NewTicketView/client.tsx +22 -13
- package/src/views/NewTicketView/index.tsx +4 -2
- package/src/views/PendingEmailsView/client.tsx +9 -3
- package/src/views/PendingEmailsView/index.tsx +4 -4
- package/src/views/SupportDashboardView/client.tsx +11 -5
- package/src/views/SupportDashboardView/index.tsx +4 -4
- package/src/views/TicketDetailView/client.tsx +25 -11
- package/src/views/TicketDetailView/index.tsx +4 -4
- package/src/views/TicketInboxView/client.tsx +47 -7
- package/src/views/TicketInboxView/index.tsx +4 -2
- package/src/views/TicketingSettingsView/TicketingSettings.module.scss +7 -7
- package/src/views/TicketingSettingsView/client.tsx +201 -144
- package/src/views/TicketingSettingsView/index.tsx +4 -4
- package/src/views/TimeDashboardView/client.tsx +10 -7
- package/src/views/TimeDashboardView/index.tsx +4 -4
- package/src/views/shared/ErrorBoundary.tsx +95 -31
- package/src/views/shared/adminTokens.ts +28 -11
- package/src/views/shared/icons.tsx +146 -0
- package/src/views/shared/locales/en.json +15 -1
- package/src/views/shared/locales/fr.json +15 -1
- package/src/views/shared/viewAccess.ts +73 -0
- package/src/types/lucide-react.d.ts +0 -42
|
@@ -561,8 +561,9 @@ export default function ProfilePage() {
|
|
|
561
561
|
|
|
562
562
|
<div className="p-6 sm:p-8">
|
|
563
563
|
<p className="mb-4 text-sm text-slate-500 dark:text-slate-400 leading-relaxed">
|
|
564
|
-
Conformement au RGPD, vous pouvez télécharger l'ensemble de vos données personnelles
|
|
565
|
-
(profil, tickets, messages, enquetes de
|
|
564
|
+
Conformement au RGPD, vous pouvez télécharger l'ensemble de vos données personnelles :
|
|
565
|
+
celles que vous avez fournies (profil, tickets, messages, temps passe, enquetes de
|
|
566
|
+
satisfaction, chat) et celles que nous avons deduites de votre historique (synthese IA).
|
|
566
567
|
</p>
|
|
567
568
|
<a
|
|
568
569
|
href="/api/support/export-data"
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Inlined Lucide icons.
|
|
3
|
+
*
|
|
4
|
+
* The plugin used to require `lucide-react` as a peer dependency for exactly
|
|
5
|
+
* 5 icons across the portal live-chat widget. That made every integrator install an icon set,
|
|
6
|
+
* and a missing install a build-time failure, for 5 paths totalling a few
|
|
7
|
+
* hundred bytes. They are inlined here instead, and `lucide-react` is no longer
|
|
8
|
+
* a peer dependency.
|
|
9
|
+
*
|
|
10
|
+
* The geometry below is copied from lucide-react v1.41.0 and, like the rest of
|
|
11
|
+
* Lucide, is under the ISC licence:
|
|
12
|
+
*
|
|
13
|
+
* ISC License
|
|
14
|
+
* Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as
|
|
15
|
+
* part of Feather (MIT). All other copyright (c) for Lucide are held by
|
|
16
|
+
* Lucide Contributors 2022.
|
|
17
|
+
*
|
|
18
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
|
19
|
+
* purpose with or without fee is hereby granted, provided that the above
|
|
20
|
+
* copyright notice and this permission notice appear in all copies.
|
|
21
|
+
*
|
|
22
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
23
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
24
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
25
|
+
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
26
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
27
|
+
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
|
28
|
+
* IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
import React from 'react'
|
|
32
|
+
|
|
33
|
+
export interface IconProps extends Omit<React.SVGProps<SVGSVGElement>, 'width' | 'height'> {
|
|
34
|
+
/** Rendered width and height. Lucide's own default is 24. */
|
|
35
|
+
size?: number | string
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type IconNode = ReadonlyArray<readonly [string, Record<string, string | number>]>
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Icons are decorative by default (`aria-hidden`): every control that has
|
|
42
|
+
* nothing but an icon inside carries its own `aria-label`. Pass
|
|
43
|
+
* `aria-hidden={false}` plus a label to make one meaningful on its own.
|
|
44
|
+
*/
|
|
45
|
+
function createIcon(displayName: string, nodes: IconNode): React.FC<IconProps> {
|
|
46
|
+
const Icon: React.FC<IconProps> = ({ size = 24, strokeWidth = 2, ...rest }) => (
|
|
47
|
+
<svg
|
|
48
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
49
|
+
width={size}
|
|
50
|
+
height={size}
|
|
51
|
+
viewBox="0 0 24 24"
|
|
52
|
+
fill="none"
|
|
53
|
+
stroke="currentColor"
|
|
54
|
+
strokeWidth={strokeWidth}
|
|
55
|
+
strokeLinecap="round"
|
|
56
|
+
strokeLinejoin="round"
|
|
57
|
+
aria-hidden="true"
|
|
58
|
+
{...rest}
|
|
59
|
+
>
|
|
60
|
+
{nodes.map(([tag, attrs], index) => React.createElement(tag, { key: index, ...attrs }))}
|
|
61
|
+
</svg>
|
|
62
|
+
)
|
|
63
|
+
Icon.displayName = displayName
|
|
64
|
+
return Icon
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export const ArrowLeft = createIcon('ArrowLeft', [
|
|
68
|
+
['path', { d: "m12 19-7-7 7-7" }],
|
|
69
|
+
['path', { d: "M19 12H5" }],
|
|
70
|
+
] as const)
|
|
71
|
+
|
|
72
|
+
export const MessageCircle = createIcon('MessageCircle', [
|
|
73
|
+
['path', { d: "M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719" }],
|
|
74
|
+
] as const)
|
|
75
|
+
|
|
76
|
+
export const Minimize2 = createIcon('Minimize2', [
|
|
77
|
+
['path', { d: "m14 10 7-7" }],
|
|
78
|
+
['path', { d: "M20 10h-6V4" }],
|
|
79
|
+
['path', { d: "m3 21 7-7" }],
|
|
80
|
+
['path', { d: "M4 14h6v6" }],
|
|
81
|
+
] as const)
|
|
82
|
+
|
|
83
|
+
export const Send = createIcon('Send', [
|
|
84
|
+
['path', { d: "M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z" }],
|
|
85
|
+
['path', { d: "m21.854 2.147-10.94 10.939" }],
|
|
86
|
+
] as const)
|
|
87
|
+
|
|
88
|
+
export const X = createIcon('X', [
|
|
89
|
+
['path', { d: "M18 6 6 18" }],
|
|
90
|
+
['path', { d: "m6 6 12 12" }],
|
|
91
|
+
] as const)
|
|
@@ -33,8 +33,11 @@ function SupportLoginContent() {
|
|
|
33
33
|
// 2FA state
|
|
34
34
|
const [needs2FA, setNeeds2FA] = useState(false)
|
|
35
35
|
// Proof that the password step succeeded, minted by /support/login. Required
|
|
36
|
-
// by /support/2fa
|
|
37
|
-
//
|
|
36
|
+
// by BOTH branches of /support/2fa: `send` no longer mails a code to anyone
|
|
37
|
+
// who merely knows the address, and `verify` no longer lets such a caller
|
|
38
|
+
// burn the 5 verification attempts of the address they typed. Each accepted
|
|
39
|
+
// `send` returns a refreshed proof, so it stays valid as long as the code it
|
|
40
|
+
// just minted — keep the latest one.
|
|
38
41
|
const [challenge, setChallenge] = useState('')
|
|
39
42
|
const [twoFactorCode, setTwoFactorCode] = useState('')
|
|
40
43
|
const [sending2FA, setSending2FA] = useState(false)
|
|
@@ -72,6 +75,8 @@ function SupportLoginContent() {
|
|
|
72
75
|
})
|
|
73
76
|
|
|
74
77
|
if (codeRes.ok) {
|
|
78
|
+
const codeData = await codeRes.json().catch(() => ({}))
|
|
79
|
+
if (codeData?.challenge) setChallenge(codeData.challenge)
|
|
75
80
|
setNeeds2FA(true)
|
|
76
81
|
} else {
|
|
77
82
|
setError('Erreur lors de l\'envoi du code de vérification.')
|
|
@@ -98,13 +103,16 @@ function SupportLoginContent() {
|
|
|
98
103
|
const verifyRes = await fetch('/api/support/2fa', {
|
|
99
104
|
method: 'POST',
|
|
100
105
|
headers: { 'Content-Type': 'application/json' },
|
|
101
|
-
body: JSON.stringify({ action: 'verify', email, code: twoFactorCode }),
|
|
106
|
+
body: JSON.stringify({ action: 'verify', email, code: twoFactorCode, challenge }),
|
|
102
107
|
})
|
|
103
108
|
|
|
104
109
|
const verifyData = await verifyRes.json()
|
|
105
110
|
|
|
106
111
|
if (!verifyRes.ok || !verifyData.verified) {
|
|
107
|
-
|
|
112
|
+
// 401 = the proof of the password step expired (10 min), not a bad code.
|
|
113
|
+
setError(verifyRes.status === 401
|
|
114
|
+
? 'Session expirée. Reconnectez-vous pour recevoir un nouveau code.'
|
|
115
|
+
: verifyData.error || 'Code incorrect.')
|
|
108
116
|
return
|
|
109
117
|
}
|
|
110
118
|
|
|
@@ -138,6 +146,8 @@ function SupportLoginContent() {
|
|
|
138
146
|
body: JSON.stringify({ action: 'send', email, challenge }),
|
|
139
147
|
})
|
|
140
148
|
if (res.ok) {
|
|
149
|
+
const data = await res.json().catch(() => ({}))
|
|
150
|
+
if (data?.challenge) setChallenge(data.challenge)
|
|
141
151
|
setError('')
|
|
142
152
|
} else {
|
|
143
153
|
// 401 = the challenge expired (10 min): the password must be re-entered.
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
.subtitle {
|
|
26
|
-
color: var(--theme-elevation-
|
|
26
|
+
color: var(--theme-elevation-650);
|
|
27
27
|
margin: 4px 0 0;
|
|
28
28
|
font-size: 14px;
|
|
29
29
|
}
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
.label {
|
|
60
60
|
font-size: 12px;
|
|
61
61
|
font-weight: 700;
|
|
62
|
-
color: var(--theme-elevation-
|
|
62
|
+
color: var(--theme-elevation-650);
|
|
63
63
|
margin-bottom: 4px;
|
|
64
64
|
}
|
|
65
65
|
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
border: 1px solid var(--theme-elevation-300);
|
|
135
135
|
border-radius: 8px;
|
|
136
136
|
background: var(--theme-elevation-100);
|
|
137
|
-
color: var(--theme-elevation-
|
|
137
|
+
color: var(--theme-elevation-650);
|
|
138
138
|
font-size: 14px;
|
|
139
139
|
}
|
|
140
140
|
|
|
@@ -162,7 +162,7 @@
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
.groupClient {
|
|
165
|
-
color: var(--theme-elevation-
|
|
165
|
+
color: var(--theme-elevation-650);
|
|
166
166
|
margin-left: 10px;
|
|
167
167
|
font-size: 13px;
|
|
168
168
|
}
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
|
|
191
191
|
.groupAmountStrike {
|
|
192
192
|
font-size: 11px;
|
|
193
|
-
color: var(--theme-elevation-
|
|
193
|
+
color: var(--theme-elevation-650);
|
|
194
194
|
text-decoration: line-through;
|
|
195
195
|
}
|
|
196
196
|
|
|
@@ -208,7 +208,7 @@
|
|
|
208
208
|
text-transform: uppercase;
|
|
209
209
|
letter-spacing: 0.5px;
|
|
210
210
|
text-align: center;
|
|
211
|
-
color: var(--theme-elevation-
|
|
211
|
+
color: var(--theme-elevation-650);
|
|
212
212
|
background: var(--theme-elevation-50);
|
|
213
213
|
border-bottom: 1px solid var(--theme-elevation-300);
|
|
214
214
|
}
|
|
@@ -268,7 +268,7 @@
|
|
|
268
268
|
}
|
|
269
269
|
|
|
270
270
|
.secondary {
|
|
271
|
-
color: var(--theme-elevation-
|
|
271
|
+
color: var(--theme-elevation-650);
|
|
272
272
|
}
|
|
273
273
|
|
|
274
274
|
.billedAmount {
|
|
@@ -326,7 +326,7 @@
|
|
|
326
326
|
border-radius: 4px;
|
|
327
327
|
border: 1px solid var(--theme-elevation-300);
|
|
328
328
|
background: var(--theme-elevation-100);
|
|
329
|
-
color: var(--theme-elevation-
|
|
329
|
+
color: var(--theme-elevation-650);
|
|
330
330
|
font-size: 10px;
|
|
331
331
|
font-weight: 600;
|
|
332
332
|
cursor: pointer;
|
|
@@ -367,7 +367,7 @@
|
|
|
367
367
|
|
|
368
368
|
.summaryMeta {
|
|
369
369
|
font-size: 11px;
|
|
370
|
-
color: var(--theme-elevation-
|
|
370
|
+
color: var(--theme-elevation-650);
|
|
371
371
|
}
|
|
372
372
|
|
|
373
373
|
.summaryAction {
|
|
@@ -403,7 +403,7 @@
|
|
|
403
403
|
background: var(--theme-elevation-100);
|
|
404
404
|
border: 1px dashed var(--theme-elevation-300);
|
|
405
405
|
border-radius: 6px;
|
|
406
|
-
color: var(--theme-elevation-
|
|
406
|
+
color: var(--theme-elevation-650);
|
|
407
407
|
font-size: 12px;
|
|
408
408
|
font-style: italic;
|
|
409
409
|
}
|
|
@@ -423,7 +423,7 @@
|
|
|
423
423
|
|
|
424
424
|
.totalMeta {
|
|
425
425
|
font-size: 13px;
|
|
426
|
-
color: var(--theme-elevation-
|
|
426
|
+
color: var(--theme-elevation-650);
|
|
427
427
|
}
|
|
428
428
|
|
|
429
429
|
.totalChecked {
|
|
@@ -29,7 +29,7 @@ $font-stack: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', system-ui,
|
|
|
29
29
|
|
|
30
30
|
.subtitle {
|
|
31
31
|
font-size: 13px;
|
|
32
|
-
color: var(--theme-elevation-
|
|
32
|
+
color: var(--theme-elevation-650);
|
|
33
33
|
margin: 4px 0 0;
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -67,7 +67,7 @@ $font-stack: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', system-ui,
|
|
|
67
67
|
letter-spacing: 0.04em;
|
|
68
68
|
border: none;
|
|
69
69
|
cursor: pointer;
|
|
70
|
-
color: var(--theme-elevation-
|
|
70
|
+
color: var(--theme-elevation-650);
|
|
71
71
|
background: none;
|
|
72
72
|
position: relative;
|
|
73
73
|
transition: color 100ms;
|
|
@@ -175,7 +175,7 @@ $font-stack: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', system-ui,
|
|
|
175
175
|
|
|
176
176
|
.sessionPreview {
|
|
177
177
|
font-size: 12px;
|
|
178
|
-
color: var(--theme-elevation-
|
|
178
|
+
color: var(--theme-elevation-650);
|
|
179
179
|
white-space: nowrap;
|
|
180
180
|
overflow: hidden;
|
|
181
181
|
text-overflow: ellipsis;
|
|
@@ -233,7 +233,7 @@ $font-stack: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', system-ui,
|
|
|
233
233
|
border-radius: 6px;
|
|
234
234
|
border: 1px solid var(--theme-elevation-200);
|
|
235
235
|
background: none;
|
|
236
|
-
color: var(--theme-elevation-
|
|
236
|
+
color: var(--theme-elevation-650);
|
|
237
237
|
font-weight: 600;
|
|
238
238
|
font-size: 12px;
|
|
239
239
|
cursor: pointer;
|
|
@@ -301,7 +301,7 @@ $font-stack: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', system-ui,
|
|
|
301
301
|
border-color: var(--theme-elevation-200);
|
|
302
302
|
padding: 6px 14px;
|
|
303
303
|
font-size: 12px;
|
|
304
|
-
color: var(--theme-elevation-
|
|
304
|
+
color: var(--theme-elevation-650);
|
|
305
305
|
border-radius: 8px;
|
|
306
306
|
max-width: 80%;
|
|
307
307
|
}
|
|
@@ -339,7 +339,7 @@ $font-stack: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', system-ui,
|
|
|
339
339
|
font-weight: 700;
|
|
340
340
|
margin-bottom: 4px;
|
|
341
341
|
opacity: 0.7;
|
|
342
|
-
color: var(--theme-elevation-
|
|
342
|
+
color: var(--theme-elevation-650);
|
|
343
343
|
}
|
|
344
344
|
|
|
345
345
|
.bubbleBody {
|
|
@@ -373,7 +373,7 @@ $font-stack: -apple-system, BlinkMacSystemFont, 'Inter', 'Segoe UI', system-ui,
|
|
|
373
373
|
font-size: 12px;
|
|
374
374
|
font-weight: 600;
|
|
375
375
|
background: none;
|
|
376
|
-
color: var(--theme-elevation-
|
|
376
|
+
color: var(--theme-elevation-650);
|
|
377
377
|
cursor: pointer;
|
|
378
378
|
transition: all 80ms;
|
|
379
379
|
|
|
@@ -34,7 +34,7 @@ $red: #dc2626;
|
|
|
34
34
|
|
|
35
35
|
.subtitle {
|
|
36
36
|
font-size: 13px;
|
|
37
|
-
color: var(--theme-elevation-
|
|
37
|
+
color: var(--theme-elevation-650);
|
|
38
38
|
font-weight: 400;
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -125,7 +125,7 @@ $red: #dc2626;
|
|
|
125
125
|
|
|
126
126
|
.clientName {
|
|
127
127
|
font-size: 12px;
|
|
128
|
-
color: var(--theme-elevation-
|
|
128
|
+
color: var(--theme-elevation-650);
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
.clientEmail {
|
|
@@ -181,7 +181,7 @@ $red: #dc2626;
|
|
|
181
181
|
|
|
182
182
|
.clientHeaderContact {
|
|
183
183
|
font-size: 14px;
|
|
184
|
-
color: var(--theme-elevation-
|
|
184
|
+
color: var(--theme-elevation-650);
|
|
185
185
|
margin-top: 4px;
|
|
186
186
|
}
|
|
187
187
|
|
|
@@ -199,7 +199,7 @@ $red: #dc2626;
|
|
|
199
199
|
background: var(--theme-elevation-50);
|
|
200
200
|
border-radius: 6px;
|
|
201
201
|
font-size: 12px;
|
|
202
|
-
color: var(--theme-elevation-
|
|
202
|
+
color: var(--theme-elevation-650);
|
|
203
203
|
font-style: italic;
|
|
204
204
|
}
|
|
205
205
|
|
|
@@ -281,7 +281,7 @@ $red: #dc2626;
|
|
|
281
281
|
|
|
282
282
|
.mergePanelDesc {
|
|
283
283
|
font-size: 12px;
|
|
284
|
-
color: var(--theme-elevation-
|
|
284
|
+
color: var(--theme-elevation-650);
|
|
285
285
|
margin: 0 0 10px;
|
|
286
286
|
line-height: 1.5;
|
|
287
287
|
}
|
|
@@ -328,13 +328,13 @@ $red: #dc2626;
|
|
|
328
328
|
}
|
|
329
329
|
|
|
330
330
|
.mergeResultName {
|
|
331
|
-
color: var(--theme-elevation-
|
|
331
|
+
color: var(--theme-elevation-650);
|
|
332
332
|
margin-left: 8px;
|
|
333
333
|
}
|
|
334
334
|
|
|
335
335
|
.mergeEmpty {
|
|
336
336
|
font-size: 12px;
|
|
337
|
-
color: var(--theme-elevation-
|
|
337
|
+
color: var(--theme-elevation-650);
|
|
338
338
|
font-style: italic;
|
|
339
339
|
margin: 0;
|
|
340
340
|
}
|
|
@@ -355,7 +355,7 @@ $red: #dc2626;
|
|
|
355
355
|
font-size: 10px;
|
|
356
356
|
font-weight: 700;
|
|
357
357
|
text-transform: uppercase;
|
|
358
|
-
color: var(--theme-elevation-
|
|
358
|
+
color: var(--theme-elevation-650);
|
|
359
359
|
letter-spacing: 0.03em;
|
|
360
360
|
}
|
|
361
361
|
|
|
@@ -477,7 +477,7 @@ $red: #dc2626;
|
|
|
477
477
|
font-size: 10px;
|
|
478
478
|
font-weight: 600;
|
|
479
479
|
text-transform: uppercase;
|
|
480
|
-
color: var(--theme-elevation-
|
|
480
|
+
color: var(--theme-elevation-650);
|
|
481
481
|
border-bottom: 1px solid var(--theme-elevation-200);
|
|
482
482
|
letter-spacing: 0.03em;
|
|
483
483
|
}
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
font-weight: 700;
|
|
43
43
|
text-transform: uppercase;
|
|
44
44
|
letter-spacing: 0.06em;
|
|
45
|
-
color: var(--theme-elevation-
|
|
45
|
+
color: var(--theme-elevation-650);
|
|
46
46
|
margin-bottom: 6px;
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
.statUnit {
|
|
56
56
|
font-size: 14px;
|
|
57
57
|
font-weight: 500;
|
|
58
|
-
color: var(--theme-elevation-
|
|
58
|
+
color: var(--theme-elevation-650);
|
|
59
59
|
margin-left: 2px;
|
|
60
60
|
}
|
|
61
61
|
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
padding: 8px 14px;
|
|
79
79
|
font-size: 13px;
|
|
80
80
|
font-weight: 600;
|
|
81
|
-
color: var(--theme-elevation-
|
|
81
|
+
color: var(--theme-elevation-650);
|
|
82
82
|
background: none;
|
|
83
83
|
border: none;
|
|
84
84
|
border-bottom: 2px solid transparent;
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
background: none;
|
|
105
105
|
font-size: 12px;
|
|
106
106
|
font-weight: 600;
|
|
107
|
-
color: var(--theme-elevation-
|
|
107
|
+
color: var(--theme-elevation-650);
|
|
108
108
|
cursor: pointer;
|
|
109
109
|
transition: all 80ms;
|
|
110
110
|
&:hover { background: var(--theme-elevation-100); }
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
font-weight: 700;
|
|
142
142
|
text-transform: uppercase;
|
|
143
143
|
letter-spacing: 0.04em;
|
|
144
|
-
color: var(--theme-elevation-
|
|
144
|
+
color: var(--theme-elevation-650);
|
|
145
145
|
border-bottom: 1px solid var(--theme-elevation-200);
|
|
146
146
|
}
|
|
147
147
|
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
background: none;
|
|
218
218
|
font-size: 12px;
|
|
219
219
|
font-weight: 600;
|
|
220
|
-
color: var(--theme-elevation-
|
|
220
|
+
color: var(--theme-elevation-650);
|
|
221
221
|
cursor: pointer;
|
|
222
222
|
&:hover { background: var(--theme-elevation-100); }
|
|
223
223
|
&:disabled { opacity: 0.4; cursor: not-allowed; }
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
|
|
90
90
|
.dropzoneText {
|
|
91
91
|
font-size: 15px;
|
|
92
|
-
color: var(--theme-elevation-
|
|
92
|
+
color: var(--theme-elevation-650);
|
|
93
93
|
margin-top: 8px;
|
|
94
94
|
}
|
|
95
95
|
|
|
@@ -122,7 +122,7 @@
|
|
|
122
122
|
.sectionTitleRight {
|
|
123
123
|
font-weight: 400;
|
|
124
124
|
font-size: 13px;
|
|
125
|
-
color: var(--theme-elevation-
|
|
125
|
+
color: var(--theme-elevation-650);
|
|
126
126
|
margin-left: auto;
|
|
127
127
|
}
|
|
128
128
|
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
|
|
140
140
|
.infoLabel {
|
|
141
141
|
font-weight: 600;
|
|
142
|
-
color: var(--theme-elevation-
|
|
142
|
+
color: var(--theme-elevation-650);
|
|
143
143
|
min-width: 100px;
|
|
144
144
|
}
|
|
145
145
|
|
|
@@ -182,11 +182,11 @@
|
|
|
182
182
|
|
|
183
183
|
.msgDate {
|
|
184
184
|
font-size: 11px;
|
|
185
|
-
color: var(--theme-elevation-
|
|
185
|
+
color: var(--theme-elevation-650);
|
|
186
186
|
}
|
|
187
187
|
|
|
188
188
|
.msgPreview {
|
|
189
|
-
color: var(--theme-elevation-
|
|
189
|
+
color: var(--theme-elevation-650);
|
|
190
190
|
font-size: 12px;
|
|
191
191
|
line-height: 1.4;
|
|
192
192
|
}
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
background: none;
|
|
35
35
|
font-size: 12px;
|
|
36
36
|
font-weight: 600;
|
|
37
|
-
color: var(--theme-elevation-
|
|
37
|
+
color: var(--theme-elevation-650);
|
|
38
38
|
cursor: pointer;
|
|
39
39
|
transition: all 100ms;
|
|
40
40
|
&:hover { background: var(--theme-elevation-100); color: var(--theme-text); }
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
padding: 10px 16px;
|
|
58
58
|
font-size: 13px;
|
|
59
59
|
font-weight: 600;
|
|
60
|
-
color: var(--theme-elevation-
|
|
60
|
+
color: var(--theme-elevation-650);
|
|
61
61
|
background: none;
|
|
62
62
|
border: none;
|
|
63
63
|
border-bottom: 2px solid transparent;
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
font-weight: 700;
|
|
81
81
|
text-transform: uppercase;
|
|
82
82
|
letter-spacing: 0.04em;
|
|
83
|
-
color: var(--theme-elevation-
|
|
83
|
+
color: var(--theme-elevation-650);
|
|
84
84
|
border-bottom: 1px solid var(--theme-elevation-200);
|
|
85
85
|
}
|
|
86
86
|
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
background: none;
|
|
129
129
|
font-size: 12px;
|
|
130
130
|
font-weight: 600;
|
|
131
|
-
color: var(--theme-elevation-
|
|
131
|
+
color: var(--theme-elevation-650);
|
|
132
132
|
cursor: pointer;
|
|
133
133
|
&:hover { background: var(--theme-elevation-100); }
|
|
134
134
|
&:disabled { opacity: 0.4; cursor: not-allowed; }
|
|
@@ -136,7 +136,7 @@
|
|
|
136
136
|
|
|
137
137
|
.pageInfo {
|
|
138
138
|
font-size: 12px;
|
|
139
|
-
color: var(--theme-elevation-
|
|
139
|
+
color: var(--theme-elevation-650);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
.empty {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
display: inline-flex;
|
|
14
14
|
align-items: center;
|
|
15
15
|
gap: 4px;
|
|
16
|
-
color: var(--theme-elevation-
|
|
16
|
+
color: var(--theme-elevation-650);
|
|
17
17
|
text-decoration: none;
|
|
18
18
|
font-size: 13px;
|
|
19
19
|
font-weight: 500;
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
.subtitle {
|
|
32
32
|
font-size: 13px;
|
|
33
|
-
color: var(--theme-elevation-
|
|
33
|
+
color: var(--theme-elevation-650);
|
|
34
34
|
margin: 0 0 24px;
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -56,7 +56,7 @@ $radius-pill: 20px;
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
.subtitle {
|
|
59
|
-
color: var(--theme-elevation-
|
|
59
|
+
color: var(--theme-elevation-650);
|
|
60
60
|
margin: 0;
|
|
61
61
|
font-size: 14px;
|
|
62
62
|
}
|
|
@@ -86,7 +86,7 @@ $radius-pill: 20px;
|
|
|
86
86
|
font-size: 13px;
|
|
87
87
|
font-weight: 600;
|
|
88
88
|
border-bottom: 2px solid transparent;
|
|
89
|
-
color: var(--theme-elevation-
|
|
89
|
+
color: var(--theme-elevation-650);
|
|
90
90
|
background: transparent;
|
|
91
91
|
transition: color 100ms, border-color 100ms;
|
|
92
92
|
|
|
@@ -156,7 +156,7 @@ $radius-pill: 20px;
|
|
|
156
156
|
|
|
157
157
|
.senderEmail {
|
|
158
158
|
font-size: 12px;
|
|
159
|
-
color: var(--theme-elevation-
|
|
159
|
+
color: var(--theme-elevation-650);
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
.cardSubject {
|
|
@@ -171,7 +171,7 @@ $radius-pill: 20px;
|
|
|
171
171
|
align-items: center;
|
|
172
172
|
gap: 10px;
|
|
173
173
|
font-size: 12px;
|
|
174
|
-
color: var(--theme-elevation-
|
|
174
|
+
color: var(--theme-elevation-650);
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
.attachment {
|
|
@@ -226,7 +226,7 @@ $radius-pill: 20px;
|
|
|
226
226
|
|
|
227
227
|
.suggestionLow {
|
|
228
228
|
background-color: var(--theme-elevation-100);
|
|
229
|
-
color: var(--theme-elevation-
|
|
229
|
+
color: var(--theme-elevation-650);
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
// ── Body preview ─────────────────────────────────────────────
|
|
@@ -236,7 +236,7 @@ $radius-pill: 20px;
|
|
|
236
236
|
|
|
237
237
|
.bodyText {
|
|
238
238
|
font-size: 13px;
|
|
239
|
-
color: var(--theme-elevation-
|
|
239
|
+
color: var(--theme-elevation-650);
|
|
240
240
|
line-height: 1.5;
|
|
241
241
|
}
|
|
242
242
|
|
|
@@ -353,7 +353,7 @@ $radius-pill: 20px;
|
|
|
353
353
|
background: none;
|
|
354
354
|
border: none;
|
|
355
355
|
cursor: pointer;
|
|
356
|
-
color: var(--theme-elevation-
|
|
356
|
+
color: var(--theme-elevation-650);
|
|
357
357
|
padding: 4px;
|
|
358
358
|
border-radius: 4px;
|
|
359
359
|
display: flex;
|
|
@@ -368,7 +368,7 @@ $radius-pill: 20px;
|
|
|
368
368
|
.sectionLabel {
|
|
369
369
|
font-size: 12px;
|
|
370
370
|
font-weight: 700;
|
|
371
|
-
color: var(--theme-elevation-
|
|
371
|
+
color: var(--theme-elevation-650);
|
|
372
372
|
text-transform: uppercase;
|
|
373
373
|
letter-spacing: 0.5px;
|
|
374
374
|
margin-bottom: 8px;
|
|
@@ -433,7 +433,7 @@ $radius-pill: 20px;
|
|
|
433
433
|
}
|
|
434
434
|
|
|
435
435
|
.scoreLow {
|
|
436
|
-
background-color: var(--theme-elevation-
|
|
436
|
+
background-color: var(--theme-elevation-650);
|
|
437
437
|
}
|
|
438
438
|
|
|
439
439
|
// ── Detected client row ──────────────────────────────────────
|
|
@@ -456,7 +456,7 @@ $radius-pill: 20px;
|
|
|
456
456
|
|
|
457
457
|
.detectedEmail {
|
|
458
458
|
font-size: 12px;
|
|
459
|
-
color: var(--theme-elevation-
|
|
459
|
+
color: var(--theme-elevation-650);
|
|
460
460
|
margin-left: 8px;
|
|
461
461
|
}
|
|
462
462
|
|
|
@@ -481,7 +481,7 @@ $radius-pill: 20px;
|
|
|
481
481
|
|
|
482
482
|
.clientResultEmail {
|
|
483
483
|
font-size: 12px;
|
|
484
|
-
color: var(--theme-elevation-
|
|
484
|
+
color: var(--theme-elevation-650);
|
|
485
485
|
margin-left: 8px;
|
|
486
486
|
}
|
|
487
487
|
|
|
@@ -523,13 +523,13 @@ $radius-pill: 20px;
|
|
|
523
523
|
|
|
524
524
|
.searchingHint {
|
|
525
525
|
font-size: 13px;
|
|
526
|
-
color: var(--theme-elevation-
|
|
526
|
+
color: var(--theme-elevation-650);
|
|
527
527
|
padding: 8px;
|
|
528
528
|
}
|
|
529
529
|
|
|
530
530
|
.noResults {
|
|
531
531
|
font-size: 13px;
|
|
532
|
-
color: var(--theme-elevation-
|
|
532
|
+
color: var(--theme-elevation-650);
|
|
533
533
|
padding: 8px;
|
|
534
534
|
}
|
|
535
535
|
|