@visns-studio/visns-components 6.17.2 → 6.20.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/package.json +10 -7
- package/src/components/AssociationManager.jsx +344 -177
- package/src/components/AsyncSelect.jsx +2 -2
- package/src/components/Autocomplete.jsx +57 -12
- package/src/components/Breadcrumb.jsx +23 -4
- package/src/components/ClientAssociationManager.jsx +321 -145
- package/src/components/DataGrid.jsx +625 -20
- package/src/components/DropZone.jsx +4 -1
- package/src/components/Form.jsx +233 -6
- package/src/components/MultiSelect.jsx +2 -2
- package/src/components/Navigation.jsx +39 -23
- package/src/components/TableFilter.jsx +172 -12
- package/src/components/UniversalSearch.jsx +390 -0
- package/src/components/auth/Login.jsx +164 -8
- package/src/components/auth/Profile.jsx +209 -22
- package/src/components/auth/authEndpoints.js +4 -0
- package/src/components/auth/webauthn.js +194 -0
- package/src/components/columns/ColumnRenderers.jsx +6 -1
- package/src/components/controls/DataGridSearch.jsx +11 -5
- package/src/components/generic/GenericAuth.jsx +6 -0
- package/src/components/generic/GenericDashboard.jsx +93 -36
- package/src/components/generic/GenericDetail.jsx +146 -61
- package/src/components/generic/GenericIndex.jsx +134 -38
- package/src/components/generic/GenericSettings.jsx +220 -0
- package/src/components/generic/StandardModal.jsx +165 -8
- package/src/components/generic/dashboardChartDefaults.js +230 -0
- package/src/components/generic/shared/indexLayout.js +38 -0
- package/src/components/settings/IntegrationsManager.jsx +474 -0
- package/src/components/sms/SmsLineSettings.jsx +16 -12
- package/src/components/styles/AssociationManager.module.scss +4 -363
- package/src/components/styles/AuditLog.module.scss +6 -6
- package/src/components/styles/AuditLogs.module.scss +3 -3
- package/src/components/styles/Autocomplete.module.scss +7 -7
- package/src/components/styles/BusinessCardOcr.module.scss +6 -1
- package/src/components/styles/CallQueueSettings.module.scss +4 -1
- package/src/components/styles/CameraPlacement.module.scss +19 -19
- package/src/components/styles/CategorizedDropZone.module.scss +6 -1
- package/src/components/styles/ClientAssociationManager.module.scss +5 -289
- package/src/components/styles/ClientAuth.module.scss +1 -1
- package/src/components/styles/DataGrid.module.scss +455 -8
- package/src/components/styles/Field.module.scss +32 -24
- package/src/components/styles/Form.module.scss +123 -3
- package/src/components/styles/GenericDashboard.module.scss +612 -825
- package/src/components/styles/GenericDetail.module.scss +406 -61
- package/src/components/styles/GenericDynamic.module.scss +25 -25
- package/src/components/styles/GenericEditableTable.module.scss +33 -33
- package/src/components/styles/GenericFormBuilder.module.scss +119 -119
- package/src/components/styles/GenericIndex.module.scss +483 -38
- package/src/components/styles/GenericMain.module.scss +6 -3
- package/src/components/styles/GenericQuote.module.scss +399 -81
- package/src/components/styles/GenericReport.module.scss +8 -8
- package/src/components/styles/GenericSettings.module.scss +209 -0
- package/src/components/styles/GenericSort.module.scss +9 -9
- package/src/components/styles/Integrations.module.scss +321 -0
- package/src/components/styles/List.module.scss +4 -4
- package/src/components/styles/Login.module.scss +57 -0
- package/src/components/styles/MultiSelect.module.scss +4 -4
- package/src/components/styles/Navigation.module.scss +12 -12
- package/src/components/styles/Notification.module.scss +12 -8
- package/src/components/styles/NotificationList.module.scss +5 -5
- package/src/components/styles/Profile.module.scss +5 -5
- package/src/components/styles/QrCode.module.scss +4 -4
- package/src/components/styles/QuickAction.module.scss +20 -20
- package/src/components/styles/SortableQuoteItems.module.scss +4 -4
- package/src/components/styles/TableFilter.module.scss +128 -17
- package/src/components/styles/TicketConversation.module.scss +497 -0
- package/src/components/styles/UniversalSearch.module.scss +229 -0
- package/src/components/styles/Vault.module.scss +413 -0
- package/src/components/styles/_associationManager.scss +467 -0
- package/src/components/styles/_authBrandPanel.scss +15 -9
- package/src/components/styles/_controls.scss +43 -39
- package/src/components/styles/global-datagrid.css +196 -0
- package/src/components/styles/global.css +168 -17
- package/src/components/tickets/TicketConversation.jsx +455 -0
- package/src/components/utils/rowActionSettings.js +117 -0
- package/src/components/vault/VaultClientPicker.jsx +183 -0
- package/src/components/vault/VaultEntryForm.jsx +23 -0
- package/src/components/vault/VaultManager.jsx +382 -34
- package/src/components/vault/VaultShareModal.jsx +454 -0
- package/src/components/vault/vaultEndpoints.js +16 -2
- package/src/components/vault/vaultShares.js +247 -0
- package/src/index.js +35 -0
- package/src/utils/fetchUtil.js +38 -14
|
@@ -676,8 +676,8 @@
|
|
|
676
676
|
width: 24px;
|
|
677
677
|
height: 24px;
|
|
678
678
|
border-radius: 50%;
|
|
679
|
-
background-color:
|
|
680
|
-
border: 1px solid
|
|
679
|
+
background-color: color-mix(in srgb, var(--approval-color, #c53030) 10%, transparent);
|
|
680
|
+
border: 1px solid color-mix(in srgb, var(--approval-color, #c53030) 20%, transparent);
|
|
681
681
|
color: var(--approval-color, #c53030);
|
|
682
682
|
font-size: 16px;
|
|
683
683
|
font-weight: bold;
|
|
@@ -1771,7 +1771,7 @@
|
|
|
1771
1771
|
flex-shrink: 0;
|
|
1772
1772
|
|
|
1773
1773
|
&:hover {
|
|
1774
|
-
background-color:
|
|
1774
|
+
background-color: color-mix(in srgb, var(--approval-color, #c53030) 10%, transparent);
|
|
1775
1775
|
}
|
|
1776
1776
|
}
|
|
1777
1777
|
|
|
@@ -1779,7 +1779,7 @@
|
|
|
1779
1779
|
padding: 40px 20px;
|
|
1780
1780
|
text-align: center;
|
|
1781
1781
|
color: var(--paragraph-color, #221e33);
|
|
1782
|
-
background-color: var(--bg-color, #f7f7f8)
|
|
1782
|
+
background-color: var(--bg-color, #f7f7f8);
|
|
1783
1783
|
|
|
1784
1784
|
p {
|
|
1785
1785
|
margin: 0;
|
|
@@ -1953,7 +1953,7 @@
|
|
|
1953
1953
|
justify-content: center;
|
|
1954
1954
|
|
|
1955
1955
|
&:hover {
|
|
1956
|
-
background-color:
|
|
1956
|
+
background-color: color-mix(in srgb, var(--approval-color, #c53030) 10%, transparent);
|
|
1957
1957
|
transform: scale(1.1);
|
|
1958
1958
|
}
|
|
1959
1959
|
}
|
|
@@ -2305,7 +2305,7 @@
|
|
|
2305
2305
|
transition: all 0.2s ease;
|
|
2306
2306
|
|
|
2307
2307
|
&:hover {
|
|
2308
|
-
background-color:
|
|
2308
|
+
background-color: color-mix(in srgb, var(--approval-color, #c53030) 10%, transparent);
|
|
2309
2309
|
}
|
|
2310
2310
|
}
|
|
2311
2311
|
}
|
|
@@ -2446,7 +2446,7 @@
|
|
|
2446
2446
|
.manualJoinSection {
|
|
2447
2447
|
margin-bottom: 24px;
|
|
2448
2448
|
padding: 20px;
|
|
2449
|
-
background-color: var(--bg-color, #f7f7f8)
|
|
2449
|
+
background-color: var(--bg-color, #f7f7f8);
|
|
2450
2450
|
border-radius: var(--radius, var(--br, 5px));
|
|
2451
2451
|
border: 1px solid var(--border-color, #e1e1e1);
|
|
2452
2452
|
|
|
@@ -2577,7 +2577,7 @@
|
|
|
2577
2577
|
transition: all 0.2s ease;
|
|
2578
2578
|
|
|
2579
2579
|
&:hover {
|
|
2580
|
-
background-color:
|
|
2580
|
+
background-color: color-mix(in srgb, var(--approval-color, #c53030) 10%, transparent);
|
|
2581
2581
|
}
|
|
2582
2582
|
}
|
|
2583
2583
|
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The settings hub.
|
|
3
|
+
*
|
|
4
|
+
* Same rail treatment as GenericIndex and GenericDetail — a sticky borderless
|
|
5
|
+
* column, not a card that terminates and leaves a void beside a tall panel —
|
|
6
|
+
* and it reads the same `--index-rail-*` tokens so a project retuning the rail
|
|
7
|
+
* retunes all three.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/* No page header above the layout: the rail and the panel both start at the
|
|
11
|
+
top, and the panel's own header is the page's single heading block. */
|
|
12
|
+
.page {
|
|
13
|
+
width: 100%;
|
|
14
|
+
box-sizing: border-box;
|
|
15
|
+
padding: 0.25rem 0.25rem 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.layout {
|
|
19
|
+
display: grid;
|
|
20
|
+
grid-template-columns:
|
|
21
|
+
minmax(var(--index-rail-min, 190px), var(--index-rail-width, 224px))
|
|
22
|
+
minmax(0, 1fr);
|
|
23
|
+
align-items: start;
|
|
24
|
+
gap: var(--index-rail-gap, 1.25rem);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.rail {
|
|
28
|
+
position: sticky;
|
|
29
|
+
top: var(--index-rail-top, 88px);
|
|
30
|
+
max-height: calc(100vh - var(--index-rail-offset, 120px));
|
|
31
|
+
overflow-y: auto;
|
|
32
|
+
overscroll-behavior: contain;
|
|
33
|
+
scrollbar-width: thin;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.railSearch {
|
|
37
|
+
position: relative;
|
|
38
|
+
display: flex;
|
|
39
|
+
gap: 0.4rem;
|
|
40
|
+
align-items: center;
|
|
41
|
+
margin-bottom: 0.75rem;
|
|
42
|
+
padding: 0 0.5rem;
|
|
43
|
+
border: 1px solid var(--border-color, rgba(43, 43, 43, 0.15));
|
|
44
|
+
border-radius: var(--btn-br, 5px);
|
|
45
|
+
background: var(--background-color, #fff);
|
|
46
|
+
color: var(--muted-color, #6b7280);
|
|
47
|
+
|
|
48
|
+
input {
|
|
49
|
+
width: 100%;
|
|
50
|
+
height: 32px;
|
|
51
|
+
border: 0;
|
|
52
|
+
background: none;
|
|
53
|
+
color: var(--paragraph-color, #2b2b2b);
|
|
54
|
+
font: inherit;
|
|
55
|
+
font-size: 0.8rem;
|
|
56
|
+
|
|
57
|
+
&:focus {
|
|
58
|
+
outline: none;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
&:focus-within {
|
|
63
|
+
border-color: color-mix(
|
|
64
|
+
in srgb,
|
|
65
|
+
var(--primary-color, #1b3933) 45%,
|
|
66
|
+
var(--border-color, rgba(43, 43, 43, 0.15))
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.railGroup {
|
|
72
|
+
margin-bottom: 1rem;
|
|
73
|
+
|
|
74
|
+
ul {
|
|
75
|
+
margin: 0;
|
|
76
|
+
padding: 0;
|
|
77
|
+
list-style: none;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.railGroupTitle {
|
|
82
|
+
margin: 0 0 0.35rem 0.75rem;
|
|
83
|
+
color: var(--muted-color, #6b7280);
|
|
84
|
+
font-size: 0.68rem;
|
|
85
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
86
|
+
letter-spacing: 0.08em;
|
|
87
|
+
text-transform: uppercase;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.railItem,
|
|
91
|
+
.railItemActive {
|
|
92
|
+
display: block;
|
|
93
|
+
width: 100%;
|
|
94
|
+
/* The 3px is reserved on every item, selected or not, so choosing one does
|
|
95
|
+
not shift its label sideways. */
|
|
96
|
+
padding: 0.45rem calc(var(--spacing-md, 1rem) - 3px);
|
|
97
|
+
border: 0;
|
|
98
|
+
border-left: 3px solid transparent;
|
|
99
|
+
border-radius: var(--radius-sm, 6px);
|
|
100
|
+
background: none;
|
|
101
|
+
color: var(--paragraph-color, #52606d);
|
|
102
|
+
font-family: inherit;
|
|
103
|
+
font-size: var(--font-size-sm, 0.8125rem);
|
|
104
|
+
font-weight: var(--font-weight-medium, 500);
|
|
105
|
+
text-align: left;
|
|
106
|
+
cursor: pointer;
|
|
107
|
+
transition:
|
|
108
|
+
background-color var(--speed, 160ms) var(--ease, ease),
|
|
109
|
+
color var(--speed, 160ms) var(--ease, ease);
|
|
110
|
+
|
|
111
|
+
&:hover {
|
|
112
|
+
background: color-mix(
|
|
113
|
+
in srgb,
|
|
114
|
+
var(--primary-color, #1b3933) 6%,
|
|
115
|
+
transparent
|
|
116
|
+
);
|
|
117
|
+
color: var(--heading-color, #111827);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
&:focus-visible {
|
|
121
|
+
outline: none;
|
|
122
|
+
box-shadow: 0 0 0 3px
|
|
123
|
+
color-mix(in srgb, var(--highlight-color, #3cbf7d) 30%, transparent);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Selected: accent edge, firmer tint, heavier weight. Three signals, so it is
|
|
128
|
+
never carried by colour alone. */
|
|
129
|
+
.railItemActive {
|
|
130
|
+
border-left-color: var(--accent-color, var(--primary-color, #1b3933));
|
|
131
|
+
background: color-mix(
|
|
132
|
+
in srgb,
|
|
133
|
+
var(--primary-color, #1b3933) 12%,
|
|
134
|
+
transparent
|
|
135
|
+
);
|
|
136
|
+
color: var(--heading-color, #111827);
|
|
137
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.railEmpty {
|
|
141
|
+
margin: 0.5rem 0.75rem;
|
|
142
|
+
color: var(--muted-color, #6b7280);
|
|
143
|
+
font-size: 0.78rem;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.panel {
|
|
147
|
+
min-width: 0;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.panelHead {
|
|
151
|
+
padding-bottom: 1rem;
|
|
152
|
+
|
|
153
|
+
h1 {
|
|
154
|
+
margin: 0;
|
|
155
|
+
color: var(--heading-color, #111827);
|
|
156
|
+
font-size: 1.35rem;
|
|
157
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
p {
|
|
161
|
+
margin: 0.25rem 0 0;
|
|
162
|
+
max-width: 70ch;
|
|
163
|
+
color: var(--muted-color, #6b7280);
|
|
164
|
+
font-size: 0.82rem;
|
|
165
|
+
line-height: 1.5;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/* The page title, in the rail's own group-heading treatment so it reads as
|
|
169
|
+
context above the section rather than as a second heading. */
|
|
170
|
+
.eyebrow {
|
|
171
|
+
margin: 0 0 0.2rem;
|
|
172
|
+
color: var(--muted-color, #6b7280);
|
|
173
|
+
font-size: 0.68rem;
|
|
174
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
175
|
+
letter-spacing: 0.08em;
|
|
176
|
+
text-transform: uppercase;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.panelBody {
|
|
181
|
+
min-width: 0;
|
|
182
|
+
|
|
183
|
+
// The panels double as standalone pages and carry their own page gutters
|
|
184
|
+
// (CallQueueSettings, SmsLineSettings...). Embedded here the shell owns
|
|
185
|
+
// the gutters, so the child's horizontal padding is flattened — otherwise
|
|
186
|
+
// every panel body sits indented from the panel header above it.
|
|
187
|
+
> * {
|
|
188
|
+
padding-right: 0 !important;
|
|
189
|
+
padding-left: 0 !important;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.empty {
|
|
194
|
+
padding: 2rem 0;
|
|
195
|
+
color: var(--muted-color, #6b7280);
|
|
196
|
+
font-size: 0.85rem;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
@media (max-width: 759px) {
|
|
200
|
+
.layout {
|
|
201
|
+
grid-template-columns: minmax(0, 1fr);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.rail {
|
|
205
|
+
position: static;
|
|
206
|
+
max-height: none;
|
|
207
|
+
overflow: visible;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
width: 100%;
|
|
21
21
|
background: var(--item-color);
|
|
22
22
|
border-radius: var(--br);
|
|
23
|
-
border: 1px solid rgba(var(--item-color-rgb), 1
|
|
23
|
+
border: 1px solid rgba(var(--item-color-rgb, 255, 255, 255), 1);
|
|
24
24
|
box-sizing: border-box;
|
|
25
25
|
overflow: visible;
|
|
26
26
|
position: relative;
|
|
27
27
|
padding: 2px;
|
|
28
28
|
margin: 8px 0;
|
|
29
|
-
box-shadow: 0 10px 50px rgba(var(--primary-rgb), 0.05);
|
|
29
|
+
box-shadow: 0 10px 50px rgba(var(--primary-rgb, 27, 57, 51), 0.05);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
.crmtitle {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
margin: 0;
|
|
36
36
|
background: white;
|
|
37
37
|
border-radius: var(--br);
|
|
38
|
-
border: 1px solid rgba(var(--primary-rgb), 0.15);
|
|
38
|
+
border: 1px solid rgba(var(--primary-rgb, 27, 57, 51), 0.15);
|
|
39
39
|
position: relative;
|
|
40
40
|
display: flex;
|
|
41
41
|
align-items: center;
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
svg {
|
|
58
|
-
color: rgba(var(--primary-rgb), 0.5);
|
|
58
|
+
color: rgba(var(--primary-rgb, 27, 57, 51), 0.5);
|
|
59
59
|
position: relative;
|
|
60
60
|
top: 2px;
|
|
61
61
|
margin: 0 0.5rem;
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
.titleInfo span {
|
|
71
71
|
font-size: 0.875em;
|
|
72
|
-
color: rgba(var(--primary-rgb), 0.65);
|
|
72
|
+
color: rgba(var(--primary-rgb, 27, 57, 51), 0.65);
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
margin: 0;
|
|
80
80
|
background: white;
|
|
81
81
|
border-radius: var(--br);
|
|
82
|
-
border: 1px solid rgba(var(--primary-rgb), 0.15);
|
|
82
|
+
border: 1px solid rgba(var(--primary-rgb, 27, 57, 51), 0.15);
|
|
83
83
|
position: relative;
|
|
84
84
|
display: flex;
|
|
85
85
|
align-items: center;
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
svg {
|
|
102
|
-
color: rgba(var(--primary-rgb), 0.5);
|
|
102
|
+
color: rgba(var(--primary-rgb, 27, 57, 51), 0.5);
|
|
103
103
|
position: relative;
|
|
104
104
|
top: 2px;
|
|
105
105
|
margin: 0 0.5rem;
|
|
@@ -115,8 +115,8 @@
|
|
|
115
115
|
align-items: center;
|
|
116
116
|
flex-wrap: wrap;
|
|
117
117
|
border-radius: 4px;
|
|
118
|
-
border: 1px solid rgba(var(--primary-rgb), 0.2);
|
|
119
|
-
box-shadow: 0px 0px 10px rgba(var(--primary-rgb), 0.25);
|
|
118
|
+
border: 1px solid rgba(var(--primary-rgb, 27, 57, 51), 0.2);
|
|
119
|
+
box-shadow: 0px 0px 10px rgba(var(--primary-rgb, 27, 57, 51), 0.25);
|
|
120
120
|
padding: 0.6rem;
|
|
121
121
|
box-sizing: border-box;
|
|
122
122
|
cursor: grab;
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Settings → Integrations.
|
|
3
|
+
*
|
|
4
|
+
* Cards on the page ground, not a card inside a card: the settings shell
|
|
5
|
+
* already provides the panel these sit in. Literal fallbacks on every token —
|
|
6
|
+
* a bare `var()` for something the host has not declared is invalid at
|
|
7
|
+
* computed-value time and takes the whole declaration with it.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
.wrap {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
gap: 2rem;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.group {
|
|
17
|
+
display: flex;
|
|
18
|
+
flex-direction: column;
|
|
19
|
+
gap: 0.75rem;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.groupTitle {
|
|
23
|
+
margin: 0;
|
|
24
|
+
color: var(--muted-color, #6b7280);
|
|
25
|
+
font-size: 0.7rem;
|
|
26
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
27
|
+
letter-spacing: 0.08em;
|
|
28
|
+
text-transform: uppercase;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.card {
|
|
32
|
+
display: flex;
|
|
33
|
+
flex-direction: column;
|
|
34
|
+
gap: 1rem;
|
|
35
|
+
padding: 1.15rem;
|
|
36
|
+
border: 1px solid var(--border-color, rgba(43, 43, 43, 0.12));
|
|
37
|
+
border-radius: var(--dg-card-radius, 14px);
|
|
38
|
+
background: var(--surface-color, #fff);
|
|
39
|
+
box-shadow:
|
|
40
|
+
0 1px 2px color-mix(in srgb, var(--primary-color, #1b3933) 8%, transparent),
|
|
41
|
+
0 8px 24px -14px color-mix(in srgb, var(--primary-color, #1b3933) 18%, transparent);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.cardHead {
|
|
45
|
+
display: flex;
|
|
46
|
+
gap: 0.75rem;
|
|
47
|
+
align-items: flex-start;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.cardIcon {
|
|
51
|
+
display: inline-flex;
|
|
52
|
+
flex-shrink: 0;
|
|
53
|
+
align-items: center;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
width: 32px;
|
|
56
|
+
height: 32px;
|
|
57
|
+
border-radius: var(--radius-sm, 8px);
|
|
58
|
+
background: color-mix(in srgb, var(--primary-color, #1b3933) 10%, transparent);
|
|
59
|
+
color: var(--primary-color, #1b3933);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
.cardTitle {
|
|
63
|
+
flex: 1;
|
|
64
|
+
min-width: 0;
|
|
65
|
+
|
|
66
|
+
h4 {
|
|
67
|
+
margin: 0;
|
|
68
|
+
color: var(--heading-color, #111827);
|
|
69
|
+
font-size: 0.95rem;
|
|
70
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
p {
|
|
74
|
+
margin: 0.2rem 0 0;
|
|
75
|
+
color: var(--muted-color, #6b7280);
|
|
76
|
+
font-size: 0.8rem;
|
|
77
|
+
line-height: 1.45;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.services {
|
|
82
|
+
font-size: 0.72rem !important;
|
|
83
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
84
|
+
letter-spacing: 0.02em;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* Status. Never colour alone — each tone ships with a word, and the two that
|
|
88
|
+
matter most also ship with a glyph. */
|
|
89
|
+
.badge {
|
|
90
|
+
display: inline-flex;
|
|
91
|
+
flex-shrink: 0;
|
|
92
|
+
gap: 0.3rem;
|
|
93
|
+
align-items: center;
|
|
94
|
+
height: max-content;
|
|
95
|
+
padding: 0.2rem 0.55rem;
|
|
96
|
+
border-radius: 999px;
|
|
97
|
+
font-size: 0.72rem;
|
|
98
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
99
|
+
white-space: nowrap;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.ok {
|
|
103
|
+
background: color-mix(in srgb, var(--highlight-color, #3cbf7d) 18%, transparent);
|
|
104
|
+
color: #0f6b41;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.ready {
|
|
108
|
+
background: color-mix(in srgb, var(--primary-color, #1b3933) 12%, transparent);
|
|
109
|
+
color: var(--primary-color, #1b3933);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.warn {
|
|
113
|
+
background: rgba(203, 138, 20, 0.16);
|
|
114
|
+
color: #8a5a00;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.bad {
|
|
118
|
+
background: rgba(190, 60, 48, 0.14);
|
|
119
|
+
color: #9b2c22;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.muted {
|
|
123
|
+
background: rgba(43, 43, 43, 0.08);
|
|
124
|
+
color: var(--muted-color, #6b7280);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* Two columns on a wide panel, one when the panel is narrow. Container query
|
|
128
|
+
rather than a viewport query: this panel sits beside a rail, so the window's
|
|
129
|
+
width says nothing useful about how much room the fields actually have. */
|
|
130
|
+
.fields {
|
|
131
|
+
container-type: inline-size;
|
|
132
|
+
display: grid;
|
|
133
|
+
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
|
|
134
|
+
gap: 0.85rem;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.field {
|
|
138
|
+
display: flex;
|
|
139
|
+
flex-direction: column;
|
|
140
|
+
gap: 0.3rem;
|
|
141
|
+
min-width: 0;
|
|
142
|
+
|
|
143
|
+
label {
|
|
144
|
+
display: flex;
|
|
145
|
+
gap: 0.4rem;
|
|
146
|
+
align-items: center;
|
|
147
|
+
color: var(--paragraph-color, #374151);
|
|
148
|
+
font-size: 0.78rem;
|
|
149
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
input,
|
|
153
|
+
select {
|
|
154
|
+
width: 100%;
|
|
155
|
+
height: 36px;
|
|
156
|
+
padding: 0 0.6rem;
|
|
157
|
+
border: 1px solid var(--border-color, rgba(43, 43, 43, 0.15));
|
|
158
|
+
border-radius: var(--btn-br, 5px);
|
|
159
|
+
background: var(--background-color, #fff);
|
|
160
|
+
color: var(--paragraph-color, #2b2b2b);
|
|
161
|
+
font: inherit;
|
|
162
|
+
font-size: 0.82rem;
|
|
163
|
+
|
|
164
|
+
&:focus {
|
|
165
|
+
outline: none;
|
|
166
|
+
border-color: color-mix(
|
|
167
|
+
in srgb,
|
|
168
|
+
var(--primary-color, #1b3933) 45%,
|
|
169
|
+
var(--border-color, rgba(43, 43, 43, 0.15))
|
|
170
|
+
);
|
|
171
|
+
box-shadow: 0 0 0 3px
|
|
172
|
+
color-mix(in srgb, var(--highlight-color, #3cbf7d) 22%, transparent);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
&:disabled {
|
|
176
|
+
background: rgba(43, 43, 43, 0.04);
|
|
177
|
+
cursor: not-allowed;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/* "Set" against a secret field. The value never reaches this page; this badge
|
|
183
|
+
is the only thing said about it. */
|
|
184
|
+
.setTag {
|
|
185
|
+
padding: 0.05rem 0.4rem;
|
|
186
|
+
border-radius: 999px;
|
|
187
|
+
background: color-mix(in srgb, var(--highlight-color, #3cbf7d) 20%, transparent);
|
|
188
|
+
color: #0f6b41;
|
|
189
|
+
font-size: 0.65rem;
|
|
190
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
191
|
+
letter-spacing: 0.02em;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.help {
|
|
195
|
+
margin: 0;
|
|
196
|
+
color: var(--muted-color, #6b7280);
|
|
197
|
+
font-size: 0.72rem;
|
|
198
|
+
line-height: 1.4;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/* The callback URL has to be pasted into the provider's console character for
|
|
202
|
+
character, so it is selectable monospace rather than prose. */
|
|
203
|
+
.redirect {
|
|
204
|
+
margin: 0;
|
|
205
|
+
padding: 0.6rem 0.7rem;
|
|
206
|
+
border: 1px dashed var(--border-color, rgba(43, 43, 43, 0.2));
|
|
207
|
+
border-radius: var(--btn-br, 5px);
|
|
208
|
+
color: var(--muted-color, #6b7280);
|
|
209
|
+
font-size: 0.74rem;
|
|
210
|
+
line-height: 1.5;
|
|
211
|
+
|
|
212
|
+
code {
|
|
213
|
+
display: block;
|
|
214
|
+
margin-top: 0.3rem;
|
|
215
|
+
color: var(--paragraph-color, #2b2b2b);
|
|
216
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
217
|
+
font-size: 0.75rem;
|
|
218
|
+
overflow-wrap: anywhere;
|
|
219
|
+
user-select: all;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.testOk,
|
|
224
|
+
.testBad {
|
|
225
|
+
margin: 0;
|
|
226
|
+
font-size: 0.74rem;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.testOk { color: #0f6b41; }
|
|
230
|
+
.testBad { color: #9b2c22; }
|
|
231
|
+
|
|
232
|
+
.cardFoot {
|
|
233
|
+
display: flex;
|
|
234
|
+
flex-wrap: wrap;
|
|
235
|
+
gap: 0.5rem;
|
|
236
|
+
align-items: center;
|
|
237
|
+
padding-top: 0.85rem;
|
|
238
|
+
border-top: 1px solid var(--border-color, rgba(43, 43, 43, 0.1));
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
.spacer { flex: 1 1 auto; }
|
|
242
|
+
|
|
243
|
+
.docs {
|
|
244
|
+
display: inline-flex;
|
|
245
|
+
gap: 0.3rem;
|
|
246
|
+
align-items: center;
|
|
247
|
+
color: var(--muted-color, #6b7280);
|
|
248
|
+
font-size: 0.75rem;
|
|
249
|
+
text-decoration: none;
|
|
250
|
+
|
|
251
|
+
&:hover { color: var(--primary-color, #1b3933); }
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.primary,
|
|
255
|
+
.secondary,
|
|
256
|
+
.ghost {
|
|
257
|
+
display: inline-flex;
|
|
258
|
+
gap: 0.35rem;
|
|
259
|
+
align-items: center;
|
|
260
|
+
justify-content: center;
|
|
261
|
+
height: 34px;
|
|
262
|
+
padding: 0 0.9rem;
|
|
263
|
+
border-radius: var(--btn-br, 5px);
|
|
264
|
+
font-family: inherit;
|
|
265
|
+
font-size: 0.78rem;
|
|
266
|
+
font-weight: var(--font-weight-semibold, 600);
|
|
267
|
+
white-space: nowrap;
|
|
268
|
+
cursor: pointer;
|
|
269
|
+
|
|
270
|
+
&:disabled {
|
|
271
|
+
opacity: 0.5;
|
|
272
|
+
cursor: not-allowed;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.primary {
|
|
277
|
+
border: 1px solid var(--primary-color, #1b3933);
|
|
278
|
+
background: var(--primary-color, #1b3933);
|
|
279
|
+
color: #fff;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.secondary {
|
|
283
|
+
border: 1px solid var(--border-color, rgba(43, 43, 43, 0.16));
|
|
284
|
+
background: transparent;
|
|
285
|
+
color: var(--paragraph-color, #2b2b2b);
|
|
286
|
+
|
|
287
|
+
&:hover:not(:disabled) {
|
|
288
|
+
background: var(--hover-color, rgba(27, 57, 51, 0.06));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.ghost {
|
|
293
|
+
border: 1px solid transparent;
|
|
294
|
+
background: transparent;
|
|
295
|
+
color: var(--muted-color, #6b7280);
|
|
296
|
+
|
|
297
|
+
&:hover:not(:disabled) {
|
|
298
|
+
color: #9b2c22;
|
|
299
|
+
background: rgba(190, 60, 48, 0.08);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
.loading,
|
|
304
|
+
.empty {
|
|
305
|
+
display: flex;
|
|
306
|
+
gap: 0.5rem;
|
|
307
|
+
align-items: center;
|
|
308
|
+
padding: 2rem 0;
|
|
309
|
+
color: var(--muted-color, #6b7280);
|
|
310
|
+
font-size: 0.85rem;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.spin { animation: integrationsSpin 0.9s linear infinite; }
|
|
314
|
+
|
|
315
|
+
@keyframes integrationsSpin {
|
|
316
|
+
to { transform: rotate(360deg); }
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
@media (prefers-reduced-motion: reduce) {
|
|
320
|
+
.spin { animation: none; }
|
|
321
|
+
}
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
align-items: center;
|
|
24
24
|
flex-wrap: wrap;
|
|
25
25
|
border-radius: 6px;
|
|
26
|
-
border: 1px solid rgba(var(--primary-rgb), 0.2);
|
|
27
|
-
box-shadow: 0px 0px 10px rgba(var(--primary-rgb), 0.1);
|
|
26
|
+
border: 1px solid rgba(var(--primary-rgb, 27, 57, 51), 0.2);
|
|
27
|
+
box-shadow: 0px 0px 10px rgba(var(--primary-rgb, 27, 57, 51), 0.1);
|
|
28
28
|
padding: 0.8rem 5rem 0.8rem 2rem;
|
|
29
29
|
margin-bottom: 0.5rem;
|
|
30
30
|
font-size: 0.9rem;
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
user-select: none;
|
|
40
40
|
|
|
41
41
|
&:hover {
|
|
42
|
-
border-color: rgba(var(--primary-rgb), 0.4);
|
|
43
|
-
box-shadow: 0px 0px 12px rgba(var(--primary-rgb), 0.2);
|
|
42
|
+
border-color: rgba(var(--primary-rgb, 27, 57, 51), 0.4);
|
|
43
|
+
box-shadow: 0px 0px 12px rgba(var(--primary-rgb, 27, 57, 51), 0.2);
|
|
44
44
|
transform: translateY(-1px);
|
|
45
45
|
}
|
|
46
46
|
|